[
  {
    "path": ".clang-format",
    "content": "---\nLanguage:        Cpp\nAccessModifierOffset: -2\nAlignAfterOpenBracket: Align\nAlignArrayOfStructures: None\nAlignConsecutiveAssignments:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCompound:   false\n  AlignFunctionDeclarations: false\n  AlignFunctionPointers: false\n  PadOperators:    true\nAlignConsecutiveBitFields:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCompound:   false\n  AlignFunctionDeclarations: false\n  AlignFunctionPointers: false\n  PadOperators:    false\nAlignConsecutiveDeclarations:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCompound:   false\n  AlignFunctionDeclarations: true\n  AlignFunctionPointers: false\n  PadOperators:    false\nAlignConsecutiveMacros:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCompound:   false\n  AlignFunctionDeclarations: false\n  AlignFunctionPointers: false\n  PadOperators:    false\nAlignConsecutiveShortCaseStatements:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCaseArrows: false\n  AlignCaseColons: false\nAlignConsecutiveTableGenBreakingDAGArgColons:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCompound:   false\n  AlignFunctionDeclarations: false\n  AlignFunctionPointers: false\n  PadOperators:    false\nAlignConsecutiveTableGenCondOperatorColons:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCompound:   false\n  AlignFunctionDeclarations: false\n  AlignFunctionPointers: false\n  PadOperators:    false\nAlignConsecutiveTableGenDefinitionColons:\n  Enabled:         false\n  AcrossEmptyLines: false\n  AcrossComments:  false\n  AlignCompound:   false\n  AlignFunctionDeclarations: false\n  AlignFunctionPointers: false\n  PadOperators:    false\nAlignEscapedNewlines: Right\nAlignOperands:   Align\nAlignTrailingComments:\n  Kind:            Always\n  OverEmptyLines:  0\nAllowAllArgumentsOnNextLine: true\nAllowAllParametersOfDeclarationOnNextLine: true\nAllowBreakBeforeNoexceptSpecifier: Never\nAllowShortBlocksOnASingleLine: Never\nAllowShortCaseExpressionOnASingleLine: true\nAllowShortCaseLabelsOnASingleLine: false\nAllowShortCompoundRequirementOnASingleLine: true\nAllowShortEnumsOnASingleLine: true\nAllowShortFunctionsOnASingleLine: All\nAllowShortIfStatementsOnASingleLine: Never\nAllowShortLambdasOnASingleLine: All\nAllowShortLoopsOnASingleLine: false\nAllowShortNamespacesOnASingleLine: false\nAlwaysBreakAfterDefinitionReturnType: None\nAlwaysBreakBeforeMultilineStrings: false\nAttributeMacros:\n  - __capability\nBinPackArguments: true\nBinPackLongBracedList: true\nBinPackParameters: BinPack\nBitFieldColonSpacing: Both\nBracedInitializerIndentWidth: -1\nBraceWrapping:\n  AfterCaseLabel:  false\n  AfterClass:      false\n  AfterControlStatement: Never\n  AfterEnum:       false\n  AfterExternBlock: false\n  AfterFunction:   false\n  AfterNamespace:  false\n  AfterObjCDeclaration: false\n  AfterStruct:     false\n  AfterUnion:      false\n  BeforeCatch:     false\n  BeforeElse:      false\n  BeforeLambdaBody: false\n  BeforeWhile:     false\n  IndentBraces:    false\n  SplitEmptyFunction: true\n  SplitEmptyRecord: true\n  SplitEmptyNamespace: true\nBreakAdjacentStringLiterals: true\nBreakAfterAttributes: Leave\nBreakAfterJavaFieldAnnotations: false\nBreakAfterReturnType: None\nBreakArrays:     true\nBreakBeforeBinaryOperators: None\nBreakBeforeConceptDeclarations: Always\nBreakBeforeBraces: Attach\nBreakBeforeInlineASMColon: OnlyMultiline\nBreakBeforeTemplateCloser: false\nBreakBeforeTernaryOperators: true\nBreakBinaryOperations: Never\nBreakConstructorInitializers: BeforeColon\nBreakFunctionDefinitionParameters: false\nBreakInheritanceList: BeforeColon\nBreakStringLiterals: true\nBreakTemplateDeclarations: MultiLine\nColumnLimit:     100\nCommentPragmas:  '^ IWYU pragma:'\nCompactNamespaces: false\nConstructorInitializerIndentWidth: 4\nContinuationIndentWidth: 4\nCpp11BracedListStyle: true\nDerivePointerAlignment: false\nDisableFormat:   false\nEmptyLineAfterAccessModifier: Never\nEmptyLineBeforeAccessModifier: LogicalBlock\nEnumTrailingComma: Leave\nExperimentalAutoDetectBinPacking: false\nFixNamespaceComments: true\nForEachMacros:\n  - foreach\n  - Q_FOREACH\n  - BOOST_FOREACH\nIfMacros:\n  - KJ_IF_MAYBE\nIncludeBlocks:   Preserve\nIncludeCategories:\n  - Regex:           '^\"(llvm|llvm-c|clang|clang-c)/'\n    Priority:        2\n    SortPriority:    0\n    CaseSensitive:   false\n  - Regex:           '^(<|\"(gtest|gmock|isl|json)/)'\n    Priority:        3\n    SortPriority:    0\n    CaseSensitive:   false\n  - Regex:           '.*'\n    Priority:        1\n    SortPriority:    0\n    CaseSensitive:   false\nIncludeIsMainRegex: '(Test)?$'\nIncludeIsMainSourceRegex: ''\nIndentAccessModifiers: false\nIndentCaseBlocks: false\nIndentCaseLabels: false\nIndentExportBlock: true\nIndentExternBlock: AfterExternBlock\nIndentGotoLabels: true\nIndentPPDirectives: None\nIndentRequiresClause: true\nIndentWidth:     2\nIndentWrappedFunctionNames: false\nInsertBraces:    false\nInsertNewlineAtEOF: false\nInsertTrailingCommas: None\nIntegerLiteralSeparator:\n  Binary:          0\n  BinaryMinDigits: 0\n  Decimal:         0\n  DecimalMinDigits: 0\n  Hex:             0\n  HexMinDigits:    0\nJavaScriptQuotes: Leave\nJavaScriptWrapImports: true\nKeepEmptyLines:\n  AtEndOfFile:     false\n  AtStartOfBlock:  true\n  AtStartOfFile:   true\nKeepFormFeed:    false\nLambdaBodyIndentation: Signature\nLineEnding:      DeriveLF\nMacroBlockBegin: ''\nMacroBlockEnd:   ''\nMainIncludeChar: Quote\nMaxEmptyLinesToKeep: 1\nNamespaceIndentation: None\nObjCBinPackProtocolList: Auto\nObjCBlockIndentWidth: 2\nObjCBreakBeforeNestedBlockParam: true\nObjCSpaceAfterProperty: false\nObjCSpaceBeforeProtocolList: true\nOneLineFormatOffRegex: ''\nPackConstructorInitializers: BinPack\nPenaltyBreakAssignment: 2\nPenaltyBreakBeforeFirstCallParameter: 19\nPenaltyBreakBeforeMemberAccess: 150\nPenaltyBreakComment: 300\nPenaltyBreakFirstLessLess: 120\nPenaltyBreakOpenParenthesis: 0\nPenaltyBreakScopeResolution: 500\nPenaltyBreakString: 1000\nPenaltyBreakTemplateDeclaration: 10\nPenaltyExcessCharacter: 1000000\nPenaltyIndentedWhitespace: 0\nPenaltyReturnTypeOnItsOwnLine: 60\nPointerAlignment: Right\nPPIndentWidth:   -1\nQualifierAlignment: Leave\nReferenceAlignment: Pointer\nReflowComments:  Always\nRemoveBracesLLVM: false\nRemoveEmptyLinesInUnwrappedLines: false\nRemoveParentheses: Leave\nRemoveSemicolon: false\nRequiresClausePosition: OwnLine\nRequiresExpressionIndentation: OuterScope\nSeparateDefinitionBlocks: Leave\nShortNamespaceLines: 1\nSkipMacroDefinitionBody: false\nSortIncludes:\n  Enabled:         true\n  IgnoreCase:      false\nSortJavaStaticImport: Before\nSortUsingDeclarations: LexicographicNumeric\nSpaceAfterCStyleCast: false\nSpaceAfterLogicalNot: false\nSpaceAfterOperatorKeyword: false\nSpaceAfterTemplateKeyword: true\nSpaceAroundPointerQualifiers: Default\nSpaceBeforeAssignmentOperators: true\nSpaceBeforeCaseColon: false\nSpaceBeforeCpp11BracedList: false\nSpaceBeforeCtorInitializerColon: true\nSpaceBeforeInheritanceColon: true\nSpaceBeforeJsonColon: false\nSpaceBeforeParens: ControlStatements\nSpaceBeforeParensOptions:\n  AfterControlStatements: true\n  AfterForeachMacros: true\n  AfterFunctionDefinitionName: false\n  AfterFunctionDeclarationName: false\n  AfterIfMacros:   true\n  AfterNot:        false\n  AfterOverloadedOperator: false\n  AfterPlacementOperator: true\n  AfterRequiresInClause: false\n  AfterRequiresInExpression: false\n  BeforeNonEmptyParentheses: false\nSpaceBeforeRangeBasedForLoopColon: true\nSpaceBeforeSquareBrackets: false\nSpaceInEmptyBlock: false\nSpacesBeforeTrailingComments: 1\nSpacesInAngles:  Never\nSpacesInContainerLiterals: true\nSpacesInLineCommentPrefix:\n  Minimum:         1\n  Maximum:         -1\nSpacesInParens:  Never\nSpacesInParensOptions:\n  ExceptDoubleParentheses: false\n  InCStyleCasts:   false\n  InConditionalStatements: false\n  InEmptyParentheses: false\n  Other:           false\nSpacesInSquareBrackets: false\nStandard:        Latest\nStatementAttributeLikeMacros:\n  - Q_EMIT\nStatementMacros:\n  - Q_UNUSED\n  - QT_REQUIRE_VERSION\nTableGenBreakInsideDAGArg: DontBreak\nTabWidth:        8\nUseTab:          Never\nVerilogBreakBetweenInstancePorts: true\nWhitespaceSensitiveMacros:\n  - BOOST_PP_STRINGIZE\n  - CF_SWIFT_NAME\n  - NS_SWIFT_NAME\n  - PP_STRINGIZE\n  - STRINGIZE\nWrapNamespaceBodyWithEmptyLines: Leave\n...\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. Windows 10]\n - Version [e.g. 3.0.0]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/workflows/ci-linux.yml",
    "content": "name: CI-Linux\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\n  # Allows you to run this workflow manually from the Actions tab.\n  workflow_dispatch:\n    inputs:\n      debug_enabled:\n        type: boolean\n        description: 'Run the build with tmate debugging enabled'\n        required: false\n        default: false\n\nenv:\n    VNOTE_VER: 3.20.1\n    CMAKE_VER: 3.24.3\n\njobs:\n  build-linux:\n    name: Build On Ubuntu\n    runs-on: ubuntu-latest\n    timeout-minutes: 120\n\n    steps:\n      # Checks-out your repository under $GITHUB_WORKSPACE.\n      - uses: actions/checkout@v2\n        with:\n          fetch-depth: 1\n\n      - name: Init Submodules\n        run: |\n          auth_header=\"$(git config --local --get http.https://github.com/.extraheader)\"\n          git submodule sync --recursive\n          git -c \"http.extraheader=$auth_header\" -c protocol.version=2 submodule update --init --force --recursive --depth=1\n\n      - name: Install a Fresh CMake\n        run: |\n          wget --no-verbose https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.sh\n          chmod +x cmake-${CMAKE_VER}-Linux-x86_64.sh\n          mkdir ${{runner.workspace}}/cmake\n          sudo ./cmake-${CMAKE_VER}-Linux-x86_64.sh --skip-license --prefix=${{runner.workspace}}/cmake\n          sudo rm -f /usr/local/bin/cmake /usr/local/bin/cpack\n          sudo ln -s ${{runner.workspace}}/cmake/bin/cmake /usr/local/bin/cmake\n          sudo ln -s ${{runner.workspace}}/cmake/bin/cpack /usr/local/bin/cpack\n\n      - name: Install linuxdeploy\n        uses: miurahr/install-linuxdeploy-action@v1\n        with:\n          plugins: qt appimage\n\n      - name: Install Dependencies\n        run: |\n          sudo DEBIAN_FRONTEND=noninteractive apt-get update\n          sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libfcitx5-qt-dev fcitx-libs-dev extra-cmake-modules libxkbcommon-dev\n          sudo DEBIAN_FRONTEND=noninteractive apt-get install -y tree\n          sudo DEBIAN_FRONTEND=noninteractive apt-get install -y fuse libxcb-cursor-dev\n          python3 -m pip config set global.break-system-packages true\n\n      - name: Cache Qt\n        id: cache-qt\n        uses: actions/cache@v4\n        with:\n          path: ${{runner.workspace}}/Qt\n          key: ${{ runner.os }}-QtCache-6.8\n\n      - name: Install Qt\n        uses: jurplel/install-qt-action@v3\n        with:\n          version: 6.8.3\n          target: desktop\n          modules: 'qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat qtserialport'\n          tools: 'tools_opensslv3_src'\n          cache: 'true'\n\n      - name: Compile OpenSSLV3\n        run: |\n          cd ${Qt6_DIR}/../../Tools/OpenSSLv3/src\n          ./Configure\n          make -j2\n          sudo make install\n\n      - name: Create Build Dir\n        run: mkdir build\n        working-directory: ${{runner.workspace}}\n\n      - name: Compile fcitxqt5\n        run: |\n          git clone https://github.com/fcitx/fcitx-qt5\n          cd fcitx-qt5\n          mkdir build && cd build\n          cmake -DENABLE_QT5=OFF -DENABLE_QT6=ON ..\n          make -j2\n          sudo make install\n        working-directory: ${{runner.workspace}}/build\n\n      - name: Compile qt6ct\n        run: |\n          git clone https://github.com/trialuser02/qt6ct qt6ct.git\n          cd qt6ct.git\n          qmake\n          make -j$(nproc) && sudo make install\n        working-directory: ${{runner.workspace}}/build\n\n      - name: Configure Project\n        run: |\n          qmake -v\n          cmake --version\n          cmake ${GITHUB_WORKSPACE}\n        working-directory: ${{runner.workspace}}/build\n\n      - name: Build Project\n        run: |\n          # Remove the libqsqlmimer.so as libmimerapi.so is not deployed with Qt6\n          rm ${{runner.workspace}}/Qt/6.*/gcc_64/plugins/sqldrivers/libqsqlmimer.so\n          cmake --build . --target pack\n        working-directory: ${{runner.workspace}}/build\n\n      - name: Fix Package\n        run: |\n          mkdir fixpackage\n          mv VNote*.AppImage ./fixpackage\n          pushd fixpackage\n          # Extract the AppImage\n          ./VNote*.AppImage --appimage-extract\n          # Remove libnss3.so and libnssutil3.so\n          rm ./squashfs-root/usr/lib/libnss*.so\n          # Re-package\n          rm VNote*.AppImage\n          linuxdeploy-plugin-appimage-x86_64.AppImage --appdir=./squashfs-root\n          mv VNote*.AppImage ../\n          popd\n          mv VNote*.AppImage VNote-${{env.VNOTE_VER}}-linux-x64.AppImage\n        working-directory: ${{runner.workspace}}/build\n\n      - name: Archive Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: VNote-${{env.VNOTE_VER}}-linux-x64.AppImage\n          path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64.AppImage\n\n      - name: Update Tag\n        if: github.ref == 'refs/heads/master'\n        run: |\n          git tag --force continuous-build ${GITHUB_SHA}\n          git push --force --tags\n\n      - name: Update Continuous Build Release\n        if: github.ref == 'refs/heads/master'\n        uses: johnwbyrd/update-release@v1.0.0\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64.AppImage\n          release: Continuous Build\n          tag: continuous-build\n\n      - name: Release\n        if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')\n        uses: ncipollo/release-action@v1.11.0\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64.AppImage\n          commit: master\n          tag: v${{env.VNOTE_VER}}\n          allowUpdates: true\n          draft: true\n"
  },
  {
    "path": ".github/workflows/ci-macos.yml",
    "content": "name: CI-MacOS\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\n  # Allows you to run this workflow manually from the Actions tab.\n  workflow_dispatch:\n    inputs:\n      debug_enabled:\n        type: boolean\n        description: 'Run the build with tmate debugging enabled'\n        required: false\n        default: false\n\nenv:\n    VNOTE_VER: 3.20.1\n    CMAKE_VER: 3.24.3\n\njobs:\n  build:\n    environment: Mac-code-sign\n    name: Build On MacOS\n    timeout-minutes: 120\n\n    strategy:\n      fail-fast: false\n      matrix:\n        config:\n          - name: \"Build on Arm64\"\n            os: macos-latest\n            arch: universal\n            qt: 6.8.3\n\n    runs-on: ${{matrix.config.os}}\n\n    steps:\n      # Checks-out your repository under $GITHUB_WORKSPACE.\n      - uses: actions/checkout@v2\n        with:\n          fetch-depth: 1\n\n      - name: Init Submodules\n        run: |\n          auth_header=\"$(git config --local --get http.https://github.com/.extraheader)\"\n          git submodule sync --recursive\n          git -c \"http.extraheader=$auth_header\" -c protocol.version=2 submodule update --init --force --recursive --depth=1\n\n      - name: Install Dependencies\n        run: |\n          brew install tree libiodbc libpq\n\n      - name: Fix SQL\n        run: |\n          sudo mkdir -p /usr/local/opt/libiodbc/lib\n          sudo ln -s /opt/homebrew/opt/libiodbc/lib/libiodbc.2.dylib /usr/local/opt/libiodbc/lib/libiodbc.2.dylib\n          sudo mkdir -p /Applications/Postgres.app/Contents/Versions/14/lib\n          sudo ln -s /opt/homebrew/Cellar/libpq/16.3/lib/libpq.5.dylib /Applications/Postgres.app/Contents/Versions/14/lib/libpq.5.dylib\n\n      - name: Install a fresh CMake\n        run: |\n          wget --no-verbose https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-macos-universal.tar.gz\n          tar xzf cmake-${CMAKE_VER}-macos-universal.tar.gz\n          sudo rm -f /usr/local/bin/cmake /usr/local/bin/cpack\n          sudo ln -s ${{runner.workspace}}/cmake-${CMAKE_VER}-macos-universal/CMake.app/Contents/bin/cmake /usr/local/bin/cmake\n          sudo ln -s ${{runner.workspace}}/cmake-${CMAKE_VER}-macos-universal/CMake.app/Contents/bin/cpack /usr/local/bin/cpack\n        working-directory: ${{runner.workspace}}\n\n      - name: Install macdeployqtfix\n        run: |\n          git clone https://github.com/tamlok/macdeployqtfix.git macdeployqtfix --depth=1\n        working-directory: ${{runner.workspace}}\n\n      - name: Install optool\n        run: |\n          wget --no-verbose https://github.com/alexzielenski/optool/releases/download/0.1/optool.zip\n          unzip ./optool.zip\n          sudo ln -s ./optool /usr/local/bin/optool\n        working-directory: ${{runner.workspace}}\n\n      - name: Cache Qt\n        id: cache-qt\n        uses: actions/cache@v4\n        with:\n          path: ${{runner.workspace}}/Qt\n          key: ${{ runner.os }}-QtCache-6.8\n\n      - name: Install Qt\n        uses: jurplel/install-qt-action@v3\n        with:\n          version: ${{matrix.config.qt}}\n          target: desktop\n          modules: 'qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat qtserialport'\n          cache: 'true'\n\n      - name: Create Build Dir\n        run: mkdir build\n        working-directory: ${{runner.workspace}}\n\n      - name: Configure Project\n        run: |\n          qmake -v\n          cmake --version\n          cmake -DMACDEPLOYQTFIX_EXECUTABLE=${{runner.workspace}}/macdeployqtfix/macdeployqtfix.py -DCMAKE_OSX_ARCHITECTURES=\"x86_64;arm64\"  ${GITHUB_WORKSPACE}\n        working-directory: ${{runner.workspace}}/build\n\n      - name: Build Project\n        run: |\n          # Keep only required SQL drivers\n          rm ${{env.Qt6_DIR}}/plugins/sqldrivers/libqsqlmimer.dylib\n          rm ${{env.Qt6_DIR}}/plugins/sqldrivers/libqsqlodbc.dylib\n          rm ${{env.Qt6_DIR}}/plugins/sqldrivers/libqsqlpsql.dylib\n\n          # Build the project\n          cmake --build . --target pack\n\n          # Fix Qt frameworks\n          python3 ${{runner.workspace}}/macdeployqtfix/macdeployqtfix.py ./src/VNote.app/Contents/MacOS/VNote ${{env.Qt6_DIR}}/../..\n\n          # Only delete rpaths that exist to avoid errors\n          for rpath in $(otool -l ./src/VNote.app/Contents/MacOS/VNote | awk '/LC_RPATH/ {getline; getline; print $2}' | grep 'vnote'); do\n            echo \"Checking rpath: $rpath\"\n            if otool -l ./src/VNote.app/Contents/MacOS/VNote | grep -q \"$rpath\"; then\n              echo \"Deleting rpath: $rpath\"\n              install_name_tool -delete_rpath \"$rpath\" ./src/VNote.app/Contents/MacOS/VNote\n            else\n              echo \"Rpath not found: $rpath\"\n            fi\n          done\n          for rpath in $(otool -l ./src/VNote.app/Contents/Frameworks/libVTextEdit.dylib | awk '/LC_RPATH/ {getline; getline; print $2}' | grep 'vnote'); do\n            echo \"Checking rpath: $rpath\"\n            if otool -l ./src/VNote.app/Contents/Frameworks/libVTextEdit.dylib | grep -q \"$rpath\"; then\n              echo \"Deleting rpath: $rpath\"\n              install_name_tool -delete_rpath \"$rpath\" ./src/VNote.app/Contents/Frameworks/libVTextEdit.dylib\n            else\n              echo \"Rpath not found: $rpath\"\n            fi\n          done\n\n          # Run macdeployqtfix again to ensure all dependencies are properly fixed\n          python3 ${{runner.workspace}}/macdeployqtfix/macdeployqtfix.py ./src/VNote.app/Contents/MacOS/VNote ${{env.Qt6_DIR}}/../..\n        working-directory: ${{runner.workspace}}/build\n\n      - name: Codesign Bundle\n        # Extract the secrets we defined earlier as environment variables\n        env:\n          MACOS_CERTIFICATE: ${{ secrets.CLI_MACOS_CERTIFICATE }}\n          MACOS_CERTIFICATE_PWD: ${{ secrets.CLI_MACOS_CERTIFICATE_PWD }}\n          MACOS_CERTIFICATE_NAME: ${{ secrets.CLI_MACOS_CERTIFICATE_NAME }}\n          MACOS_CI_KEYCHAIN_PWD: ${{ secrets.CLI_MACOS_CERTIFICATE }}\n        run: |\n          # Turn our base64-encoded certificate back to a regular .p12 file\n          echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12\n\n          # We need to create a new keychain, otherwise using the certificate will prompt\n          # with a UI dialog asking for the certificate password, which we can't\n          # use in a headless CI environment\n          security create-keychain -p \"$MACOS_CI_KEYCHAIN_PWD\" build.keychain\n          security default-keychain -s build.keychain\n          security unlock-keychain -p \"$MACOS_CI_KEYCHAIN_PWD\" build.keychain\n          security import certificate.p12 -k build.keychain -P \"$MACOS_CERTIFICATE_PWD\" -T /usr/bin/codesign\n          security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k \"$MACOS_CI_KEYCHAIN_PWD\" build.keychain\n\n          echo \"Codesigning main app bundle\"\n          codesign --force --deep -s \"$MACOS_CERTIFICATE_NAME\" --entitlements ${{github.workspace}}/package/entitlements.xml --options runtime ./src/VNote.app\n          codesign -v -vvv ./src/VNote.app\n\n          hdiutil create -volname \"VNote\" -srcfolder ./src/VNote.app -ov -format UDZO VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\n          codesign --force --deep -s \"$MACOS_CERTIFICATE_NAME\" --entitlements ${{github.workspace}}/package/entitlements.xml --options runtime ./VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\n          codesign -v -vvv ./VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\n\n        working-directory: ${{runner.workspace}}/build\n\n      - name: \"Notarize Bundle\"\n        # Extract the secrets we defined earlier as environment variables\n        env:\n          PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.CLI_MACOS_NOTARY_USER }}\n          PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.CLI_MACOS_TEAM_ID }}\n          PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.CLI_MACOS_NOTARY_PWD }}\n        run: |\n          # Store the notarization credentials so that we can prevent a UI password dialog\n          # from blocking the CI\n          echo \"Create keychain profile\"\n          xcrun notarytool store-credentials \"notarytool-profile\" --apple-id \"$PROD_MACOS_NOTARIZATION_APPLE_ID\" --team-id \"$PROD_MACOS_NOTARIZATION_TEAM_ID\" --password \"$PROD_MACOS_NOTARIZATION_PWD\"\n\n          # Here we send the notarization request to the Apple's Notarization service, waiting for the result.\n          # This typically takes a few seconds inside a CI environment, but it might take more depending on the App\n          # characteristics. Visit the Notarization docs for more information and strategies on how to optimize it if\n          # you're curious\n          echo \"Notarize app\"\n          xcrun notarytool submit \"${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\" --keychain-profile \"notarytool-profile\" --wait\n\n          # Finally, we need to \"attach the staple\" to our executable, which will allow our app to be\n          # validated by macOS even when an internet connection is not available.\n          echo \"Attach staple\"\n          xcrun stapler staple \"${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\"\n\n      # Enable tmate debugging of manually-triggered workflows if the input option was provided\n      - name: Setup tmate session\n        uses: mxschmitt/action-tmate@v3\n        if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}\n\n      - name: Archive DMG\n        uses: actions/upload-artifact@v4\n        with:\n          name: VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}\n          path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\n\n      - name: Update Tag\n        if: github.ref == 'refs/heads/master'\n        run: |\n          git tag --force continuous-build ${GITHUB_SHA}\n          git push --force --tags\n\n      - name: Update Continuous Build Release\n        if: github.ref == 'refs/heads/master'\n        uses: johnwbyrd/update-release@v1.0.0\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\n          release: Continuous Build\n          tag: continuous-build\n\n      - name: Release\n        if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')\n        uses: ncipollo/release-action@v1.11.0\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg\n          commit: master\n          tag: v${{env.VNOTE_VER}}\n          allowUpdates: true\n          draft: true\n"
  },
  {
    "path": ".github/workflows/ci-win.yml",
    "content": "name: CI-Windows\r\n\r\non:\r\n  push:\r\n    branches: [ master ]\r\n  pull_request:\r\n    branches: [ master ]\r\n\r\n  # Allows you to run this workflow manually from the Actions tab.\r\n  workflow_dispatch:\r\n    inputs:\r\n      debug_enabled:\r\n        type: boolean\r\n        description: 'Run the build with tmate debugging enabled'\r\n        required: false\r\n        default: false\r\n\r\nenv:\r\n    VNOTE_VER: 3.20.1\r\n\r\njobs:\r\n  build:\r\n    name: ${{ matrix.config.name }}\r\n    runs-on: windows-${{ matrix.config.vs_version }}\r\n    timeout-minutes: 120\r\n\r\n    strategy:\r\n      fail-fast: false\r\n      matrix:\r\n        config:\r\n          - name: \"Build on Win64 Qt 6\"\r\n            arch: win64_msvc2022_64\r\n            vs_version: 2022\r\n            vs_cmd: \"C:\\\\Program Files\\\\Microsoft Visual Studio\\\\2022\\\\Enterprise\\\\VC\\\\Auxiliary\\\\Build\\\\vcvars64.bat\"\r\n            qt: 6.8.3\r\n            qt_modules: \"qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat\"\r\n            qt_tools: tools_opensslv3_x64\r\n            qt_major: 6\r\n            suffix: \"\"\r\n\r\n    steps:\r\n      # Checks-out your repository under $GITHUB_WORKSPACE.\r\n      - uses: actions/checkout@v2\r\n        with:\r\n          fetch-depth: 1\r\n\r\n      - name: Init Submodules\r\n        shell: bash\r\n        run: |\r\n          auth_header=\"$(git config --local --get http.https://github.com/.extraheader)\"\r\n          git submodule sync --recursive\r\n          git -c \"http.extraheader=$auth_header\" -c protocol.version=2 submodule update --init --force --recursive --depth=1\r\n\r\n      - name: Cache Qt\r\n        id: cache-qt\r\n        uses: actions/cache@v4\r\n        with:\r\n          path: ${{runner.workspace}}/Qt\r\n          key: ${{runner.os}}-${{matrix.config.arch}}-QtCache-${{matrix.config.qt}}\r\n\r\n      - name: Install Qt Official Build\r\n        uses: jurplel/install-qt-action@v3\r\n        with:\r\n          version: ${{matrix.config.qt}}\r\n          target: desktop\r\n          arch: ${{matrix.config.arch}}\r\n          modules: ${{matrix.config.qt_modules}}\r\n          tools: ${{matrix.config.qt_tools}}\r\n          cache: 'true'\r\n\r\n      - name: Create Build Dir\r\n        shell: bash\r\n        run: mkdir build\r\n        working-directory: ${{runner.workspace}}\r\n\r\n      # Enable tmate debugging of manually-triggered workflows if the input option was provided\r\n      - name: Setup tmate session\r\n        uses: mxschmitt/action-tmate@v3\r\n        if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}\r\n\r\n      - name: Configure and Build Project\r\n        shell: cmd\r\n        run: |\r\n          cmake --version\r\n          call \"${{matrix.config.vs_cmd}}\"\r\n          cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DQT_DEFAULT_MAJOR_VERSION=${{matrix.config.qt_major}} -DOPENSSL_EXTRA_LIB_DIR=${{runner.workspace}}\\build\\openssl-utils.git\\1.1.1j\\Win_x64 %GITHUB_WORKSPACE%\r\n          cmake --build .\r\n          cmake --build . --target=pack\r\n          7z x VNote*.zip -o*\r\n          dir\r\n        working-directory: ${{runner.workspace}}/build\r\n\r\n      - name: Archive Artifacts\r\n        uses: actions/upload-artifact@v4\r\n        with:\r\n          name: VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}\r\n          path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}\r\n\r\n      - name: Archive Installer\r\n        uses: actions/upload-artifact@v4\r\n        with:\r\n          name: VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}.msi\r\n          path: ${{runner.workspace}}/build/VNote*.msi\r\n\r\n      - name: Update Tag\r\n        if: github.ref == 'refs/heads/master'\r\n        shell: bash\r\n        run: |\r\n          git tag --force continuous-build ${GITHUB_SHA}\r\n          git push --force --tags\r\n\r\n      - name: Update Continuous Build Release\r\n        if: github.ref == 'refs/heads/master'\r\n        uses: johnwbyrd/update-release@v1.0.0\r\n        with:\r\n          token: ${{ secrets.GITHUB_TOKEN }}\r\n          # glob not supported\r\n          files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}.zip\r\n          release: Continuous Build\r\n          tag: continuous-build\r\n\r\n      - name: Release\r\n        if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')\r\n        uses: ncipollo/release-action@v1.11.0\r\n        with:\r\n          token: ${{ secrets.GITHUB_TOKEN }}\r\n          # glob not supported\r\n          artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}\r\n          commit: master\r\n          tag: v${{env.VNOTE_VER}}\r\n          allowUpdates: true\r\n          draft: true\r\n"
  },
  {
    "path": ".gitignore",
    "content": "*.pro.user\n*.pro.user.*\n.ccls\ncompile_commands.json\ncompile_commands.json.*\ncompile_flags.txt\n.cache\n.tasks\n.vimspector.json\nGPATH\nGRTAGS\nGTAGS\naqtinstall.log\ntags\nCMakeLists.txt.user\nbuild\nbuild.*\nbuild*\n.DS_Store\n.vscode\ndev.sh\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"libs/vtextedit\"]\n\tpath = libs/vtextedit\n\turl = https://github.com/vnotex/vtextedit.git\n[submodule \"libs/QHotkey\"]\n\tpath = libs/QHotkey\n\turl = https://github.com/vnotex/QHotkey.git\n"
  },
  {
    "path": "AGENTS.md",
    "content": "# VNote Agent Development Guide\n\n## Setup\n\nAfter cloning the repository, run the init script to set up your development environment:\n* **Linux/macOS**: `bash scripts/init.sh`\n* **Windows**: `scripts\\init.cmd`\n\n## Build/Lint/Test Commands\n\n* **Build**: `mkdir build && cd build && cmake .. && cmake --build . --config Release`\n* **Debug Build**: `cmake .. -DCMAKE_BUILD_TYPE=Debug && cmake --build . --config Debug`\n* **Run Tests**: Uncomment `add_subdirectory(tests)` in root CMakeLists.txt, rebuild, then `ctest`\n* **Run Single Test**: `ctest -R test_task` (use test name pattern matching)\n* **Format Code**: Use clang-format with provided `.clang-format` (100 char line limit, 2-space indent)\n\n## C++ Code Style Guidelines\n\n* **Standards**: C++14, Qt 5/6 framework with CMAKE_AUTOMOC/AUTOUIC/AUTORCC enabled\n* **Includes**: Order: system includes, Qt includes, local includes (blank line between groups)\n* **Namespaces**: Use `vnotex` namespace for all core classes; `using namespace vnotex;` in .cpp files\n* **Headers**: Use header guards (`#ifndef CLASSNAME_H`), forward declarations preferred in headers\n* **Classes**: CamelCase, private inheritance for utility classes (Noncopyable pattern)\n* **Methods**: camelCase with getter prefixes (`getInst()`, `getThemeMgr()`), parameters prefixed with `p_`\n* **Members**: Prefix private members with `m_` (e.g., `m_jobj`, `m_themeMgr`)\n* **Singletons**: Use static instance pattern: `static Type &getInst() { static Type inst; return inst; }`\n* **Qt Integration**: Use signals/slots, QObject inheritance, Q_OBJECT macro for MOC\n* **Memory**: Use Qt smart pointers (QScopedPointer, QSharedPointer), not raw new/delete\n* **Config**: Access via ConfigMgr::getInst(), JSON-based hierarchical config system\n* **Architecture**: Layered structure - core/ for logic, widgets/ for UI, utils/ for helpers\n* **Error Handling**: Use custom Exception class with Exception::throwOne(), qCritical/qWarning/qInfo for logging\n* **Formatting**: 2-space indent, 100 char line limit, pointer alignment right (e.g., `int *ptr`)\n\n## Architecture Notes\n\n* Core singleton VNoteX coordinates all managers (ThemeMgr, TaskMgr, NotebookMgr, BufferMgr)\n* ConfigMgr provides MainConfig, SessionConfig, CoreConfig, EditorConfig, WidgetConfig\n* Test framework uses Qt Test (QObject-based tests with initTestCase() and test methods)"
  },
  {
    "path": "CMakeLists.txt",
    "content": "cmake_minimum_required (VERSION 3.20)\n\nset(CMAKE_OSX_DEPLOYMENT_TARGET \"12.1\" CACHE STRING \"Minimum OS X deployment version\")\n\nproject(VNote\n    VERSION 3.20.1\n    DESCRIPTION \"A pleasant note-taking platform\"\n    HOMEPAGE_URL \"https://app.vnote.fun\"\n    LANGUAGES C CXX)\n\nset(CMAKE_BUILD_TYPE Release CACHE STRING \"Build type, defaults to Release\")\n\nset(CMAKE_CXX_STANDARD 14)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nset(CMAKE_AUTOMOC ON)\nset(CMAKE_AUTOUIC ON)\nset(CMAKE_AUTORCC ON)\n\nset(QHOTKEY_INSTALL OFF CACHE BOOL \"Disable installing QHotKey\" FORCE)\nadd_subdirectory(libs)\n\nadd_subdirectory(src)\n\n# TODO: find a better way to organize tests\n# add_subdirectory(tests)\n"
  },
  {
    "path": "COPYING.LESSER",
    "content": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "README.md",
    "content": "# VNote\n![CI-Windows](https://github.com/vnotex/vnote/actions/workflows/ci-win.yml/badge.svg?branch=master) ![CI-Linux](https://github.com/vnotex/vnote/actions/workflows/ci-linux.yml/badge.svg?branch=master) ![CI-MacOS](https://github.com/vnotex/vnote/actions/workflows/ci-macos.yml/badge.svg?branch=master)\n\n[简体中文](README_zh_CN.md)\n\n[Project on Gitee](https://gitee.com/vnotex/vnote)\n\nA pleasant note-taking platform.\n\nFor more information, please visit [**VNote's Home Page**](https://vnotex.github.io/vnote).\n\n![VNote](pics/vnote.png)\n\n## Description\n**VNote** is a Qt-based, free and open source note-taking application, focusing on Markdown now. VNote is designed to provide a pleasant note-taking platform with excellent editing experience.\n\nVNote is **NOT** just a simple editor for Markdown. By providing notes management, VNote makes taking notes in Markdown simpler. In the future, VNote will support more formats besides Markdown.\n\nUtilizing Qt, VNote could run on **Linux**, **Windows**, and **macOS**.\n\n![Main](pics/main.png)\n\n![Main2](pics/main2.png)\n\n## Downloads\nContinuous builds on `master` branch could be found at the [Continuous Build](https://github.com/vnotex/vnote/releases/tag/continuous-build) release.\n\nLatest stable builds could be found at the [latest release](https://github.com/vnotex/vnote/releases/latest). Alternative download services are available:\n\n* [Tianyi Netdisk](https://cloud.189.cn/t/Av67NvmEJVBv)\n* [Baidu Netdisk](https://pan.baidu.com/s/1lX69oMBw8XuJshQDN3HiHw?pwd=f8fk)\n\n## Supports\n* [GitHub Issues](https://github.com/vnotex/vnote/issues);\n* Email: `tamlokveer at gmail.com`;\n* [Telegram](https://t.me/vnotex);\n* WeChat Public Account: vnotex;\n\nThank [users who donated to VNote](https://github.com/vnotex/vnote/wiki/Donate-List)!\n\n## Development\n\nAfter cloning the repository, run the initialization script to set up your development environment:\n\n**Linux/macOS:**\n```bash\nbash scripts/init.sh\n```\n\n**Windows:**\n```cmd\nscripts\\init.cmd\n```\n\nThis script will:\n* Initialize and update all git submodules\n* Install pre-commit hooks for automatic code formatting with clang-format\n* Set up the vtextedit submodule pre-commit hook\n\nFor more development guidelines, see [AGENTS.md](AGENTS.md).\n\n## License\nVNote is licensed under [GNU LGPLv3](https://opensource.org/licenses/LGPL-3.0). Code base of VNote could be used freely by VNoteX.\n"
  },
  {
    "path": "README_zh_CN.md",
    "content": "# VNote\n![CI-Windows](https://github.com/vnotex/vnote/actions/workflows/ci-win.yml/badge.svg?branch=master) ![CI-Linux](https://github.com/vnotex/vnote/actions/workflows/ci-linux.yml/badge.svg?branch=master) ![CI-MacOS](https://github.com/vnotex/vnote/actions/workflows/ci-macos.yml/badge.svg?branch=master)\n\n[English](README.md)\n\n[Gitee托管项目](https://gitee.com/vnotex/vnote)\n\n一个舒适的笔记平台！\n\n更多信息，请访问[VNote主页](https://vnotex.github.io/vnote)。\n\n![VNote](pics/vnote.png)\n\n## 简介\n**VNote**是一个专注于Markdown的基于Qt的开源免费的笔记应用。VNote希望能提供一个拥有完美编辑体验的舒适的笔记平台。\n\nVNote不是一个简单的Markdown编辑器。通过提供强大的笔记管理，VNote使得使用Markdown记笔记更轻松简单。将来，VNote会支持更多的文档格式。\n\n得益于Qt，VNote当前可以高效地运行在**Linux**，**Windows**，以及**macOS**平台上。\n\n![主界面](pics/main.png)\n\n![主界面2](pics/main2.png)\n\n## 下载\n基于`master`分支的[持续构建版本发布](https://github.com/vnotex/vnote/releases/tag/continuous-build)。\n\n最新的[稳定版本发布](https://github.com/vnotex/vnote/releases/latest)。其他下载选项：\n\n* [天翼云盘](https://cloud.189.cn/t/Av67NvmEJVBv)\n* [百度云盘](https://pan.baidu.com/s/1lX69oMBw8XuJshQDN3HiHw?pwd=f8fk)\n\n## 支持\n* [GitHub Issues](https://github.com/vnotex/vnote/issues)；\n* 邮件：`tamlokveer at gmail.com`；\n* [Telegram](https://t.me/vnotex)；\n* 微信公众号：`vnotex`；\n\n感谢这些[捐赠用户](https://github.com/vnotex/vnote/wiki/Donate-List)！\n\n## 开发\n\n克隆仓库后，运行初始化脚本来设置开发环境：\n\n**Linux/macOS:**\n```bash\nbash scripts/init.sh\n```\n\n**Windows:**\n```cmd\nscripts\\init.cmd\n```\n\n此脚本将会：\n* 初始化并更新所有 git 子模块\n* 安装用于自动代码格式化的 pre-commit 钩子（需要 clang-format）\n* 设置 vtextedit 子模块的 pre-commit 钩子\n\n更多开发指南，请参考 [AGENTS.md](AGENTS.md)。\n\n## 许可\nVNote遵循[GNU LGPLv3](https://opensource.org/licenses/LGPL-3.0)许可。VNote项目的代码可以自由给VNoteX项目使用。\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nOnly the latest version is supported with security updates.\n\n## Reporting a Vulnerability\n\nPlease [contact support](mailto:tamlokveer@gmail.com) **with a proof of concept** that shows the security vulnerability. Please do not contact us without this proof of concept, as we cannot fix anything without this.\n\nFor general opinions on what makes an app more or less secure, please use the forum.\n\n## Bounty\n\nWe **do not** offer a bounty for discovering vulnerabilities, please do not ask. We can however credit you and link to your website/profile in the changelog and release announcement.\n"
  },
  {
    "path": "changes.md",
    "content": "# Changes\n## v3.20.0\n* MindMap: add outline and linking support\n* Refine themes\n* Support searching tags\n* Enhanced QuickAccess with unique id\n* NoteExplorer: support customizing node's color/background/outline\n* MarkdownEditor: support copying local GIF\n* Fix attachment and tag popup\n* InputMode: add VSCode input mode and keep the default Normal input mode simple\n\n## v3.19.2\n* Codesign MacOS Bundle\n* Fix toolbar expansion button style\n* Support hot-reloading of theme via --watch-themes option\n\n## v3.19.1\n* Fix toolbar button in Qt 6.8\n\n## v3.19.0\n* Add VSCode-sytle editor shortcuts\n\n## v3.18.1\n* Fix crash caused by Qt6 change\n* Fix XSS protection exemption\n* Check link before open\n\n## v3.18.0\n* Upgrade to Qt6\n* Support MacOS universal build\n* Upgrade Mermaid, Flowchart.js, and markdown-it\n* Markdown-it\n    * Fix XSS protection and turn it on by default\n    * Support mark by `==xx==`\n\n## v3.17.0\n* Quick note: create note in given scheme (@feloxx)\n* MarkdownEditor: support inserting multiple images (@feloxx)\n* Mermaid: upgrade and fix preview issue (@ygcaicn)\n* Flowchart.js: upgrade\n\n## v3.16.0\n* Support reading PDF format\n* Support Ming Map editor in suffix `*.emind`\n* Support \"View By\" for notebooks selector\n* ViewWindow: add shortcut Ctrl+G,V to alternate among view modes\n* Bug fixes\n\n## v3.15.1\n* Add two themes\n* Bug fixes\n\n## v3.15.0\n* Editor supports Word Count\n* Add Open Windows panel\n* Theme: add Vue-light theme\n* Support default open mode\n* NotebookSelector: support dynamic icons for notebooks\n\n## v3.14.0\n* Theme: support custom icons\n* Theme: refine icons\n* NavigationMode: fix issue for input method\n\n## v3.13.1\n* Shortcuts for Copy/Paste/Properties in node explorer\n* Global shortcut to call out main window\n* UnitedEntry: bug fix for macOS\n\n## v3.13.0\n* United Entry: migration of Universal Entry\n\n## v3.12.888\n* Fix shortcuts in key sequence with input method (like `Ctrl+G, E`)\n* Add line ending settings for config files\n* FindAndReplace: fix zero-length search\n* QuickAccess: support folders\n* Upgrade to Qt 5.15.2\n* Support file associations\n* NewNoteDialog: remember default file type\n\n## v3.12.0\n* NotebookExplorer: support separate node explorer\n* Theme: add user-provided VSCode-Dark theme\n* MarkdownEditor: use web to highlight code blocks\n* MarkdownViewWindow\n    * Add switch for code block line number\n    * Fix ParseToMarkdown `<style>` issue\n    * Add config for overridding MathJax script\n* SortDialog: fix sorting issue of date\n* FramelessMainWindow: fix StayOnTop issue\n\n## v3.11.0\n* Task: support a simple task system (@tootal)\n* Theme: add user-provided Solarized-Dark and Solarized-Light themes\n* Export: fix wkhtmltopdf table-of-contents translation\n* Support equation begin in MathJax\n* MainWindow: decide DPI on the screen vnote starts\n* Settings: support searching\n* Fix crash caused by Youdao Dict\n\n## v3.10.1\n* MarkdownEditor: fix view mode issue\n* Support print\n* Refine icons\n\n## v3.10.0\n* MarkdownEditor\n    * Support side-by-side edit with preview\n    * Support config for highlighting whitespace\n* Tag: fix input method issue on macOS\n\n## v3.9.0\n* Remove recycle bin node (now recycle bin is just a simple folder)\n* Quick Access: support removing items directly\n* MarkdownEditor\n    * Support centering images in read mode\n    * Add user.css for user styles in read mode\n    * Add debugger by F12\n    * Support context-sensitive context menu for images and links\n\n## v3.8.0\n* Support tags\n* Introduce notebook database using SQLITE\n* A perfect frameless main window on Windows\n* Add switch to control whether store history in notebook\n* Refine dock widgets of main window\n* NotebookExplorer: support scan notebook and import external files\n\n## v3.7.0\n* PlantUml/Graphviz: support relative path executable\n* macOS: support opening file with VNote in Finder\n* Sort notes by name case-insensitively\n* Export\n    * Support All-in-One in PDF format\n    * Support Custom export format (like Pandoc)\n    * Allow minimizing the export dialog and doing export at background\n* MainWindow: use icon-only bar for docks\n* Support update check\n* Add shortcuts for CloseOtherTabs and CloseTabsToTheRight\n* Search: highlight matched items in opened files\n* Editor: support specifying line ending\n\n## v3.6.0\n* Support **Image Host**: GitHub and Gitee\n* Add config page for Vi\n\n## v3.5.1\n* LocationList: fix recently introduced regression when highlighting segments of text\n\n## v3.5.0\n* Support History\n* ViewArea\n    * `Ctrl+G, H/J/K/L` to navigate through ViewSplits\n    * `Ctrl+G, Shift+H/J/K/L` to move ViewWindow across ViewSplits\n* MarkdownEditor\n    * Add configs for in-place preview sources\n    * Add a tool button to disable in-place preview\n* Vi: support align and indent commands `=` and `>`\n* LocationList: highlight matched text segments\n* SelectDialog: support shortcuts (such as Rich Paste)\n\n## v3.4.0\n* Support Snippet\n    * `Ctrl+G S` to insert a snippet\n    * `%snippet_name%` to insert a snippet (the legacy Magic Word)\n        * Snippet is supported in some dialogs (such as creating a new note)\n* Support note template (snippet is supported)\n* Remove `'` and `\"` from auot-brackets\n\n## v3.3.0\n* Editor: support auto indent, auto list\n* Support opening notes with external programs\n* Add a delay after code/math blocks update before preview\n\n## v3.2.0\n* Support local PlantUml and Graphviz rendering\n* Add shortcuts to tab navigation in ViewSplit\n* Editor: support auto bracket and overridding font family\n\n## v3.1.0\n* Support Japanese translation (Thanks @miurahr)\n* MarkdownEditor: guess image suffix when fetching to local\n* Refine read mode styles (Thanks @heartnn)\n* Support recovering edit session on start\n* Support recovering notebook explorer session on start\n* Support Flash Page\n* Support Quick Access\n* Allow to keep docks (like Outline) when expanding content area\n\n## v3.0.1\n* Support spell check via Hunspell\n* `Ctrl+Alt+F` to trigger full-text search\n* Auto focus to the input widget when activating full-text search\n* Fix Expand Content Area with panels\n\n## v3.0.0-beta.11\n* Full-text search\n\n## v3.0.0-beta.10\n* Show more tips\n* Add exclude patterns for external nodes\n* Add command line parser and support opening files from command line\n* Update Mermaid.js to 8.9.1\n* Support exporting current note\n* Add ExpandAll to node explorer\n\n## v3.0.0-beta.9\n* Fix crash when exporting external files\n* Support manual sorting folders and notes\n* Support showing external files in notebook\n\n## v3.0.0-beta.8\n* Note explorer supports different view orders\n* Fix `Ctrl+V` paste in editor\n* Fix Linux HTTPS crash bug\n* Add button to show/hide recycle bin node\n* Other small fixes\n\n## v3.0.0-beta.7\n* Support export to Markdown/HTML/PDF\n* Support base level 1/2/3 for section number in read mode\n* Support opening link to folder in read mode\n\n## v3.0.0-beta.6\n* Add theme **pure** for light mode\n* Small fixes\n\n## v3.0.0-beta.5\n* Refine themes\n* Add section number style \"1.1\" and \"1.1.\", and use the later as default\n* Support indentation of first line of paragraph in read mode\n* Add file type combo box in NewNoteDialog\n* Add \"Insert Mark\" in tool bar\n* Support **Smart Table**\n* Support `*.rmd` as Markdown suffix\n* Turn on system title bar by default\n* Enable AutoBreak by default\n\n## v3.0.0-beta.4\n* Add theme **moonlight** for dark mode\n* Add shortcuts for split and workspace\n* Bug fix\n* More configs in Settings dialog for Markdown viewer\n* Support section number in edit mode (without the dot suffix)\n* Support link jump in Markdown viewer\n* Use socket for single instance guard\n\n## v3.0.0-beta.3\n* Support `[TOC]`\n* Fix MathJax\n* Add shortcut for StayOnTop\n* Add Markdown guide and shortcuts guide\n* Show hovered link in read mode\n* Smart Input Method in Vi mode\n* Bug fix in Markdown editor when finding current heading index\n* Add custom Info.plist on macOS\n* Support minimizing to system tray\n* Support restart\n* Add read and edit in Markdown ViewWindow\n* Add Chinese translations\n\n## v3.0.0-beta.2\n* Fix Import Legacy Notebook\n* Refine toolbar\n* Fix Outline viewer\n"
  },
  {
    "path": "libs/CMakeLists.txt",
    "content": "add_subdirectory(QHotkey)\nadd_subdirectory(vtextedit)\n"
  },
  {
    "path": "package/QtWebEngineProcess.entitlements.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n    <true/>\n    <key>com.apple.security.cs.disable-library-validation</key>\n    <true/>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n    <key>com.apple.security.cs.disable-executable-page-protection</key>\n    <true/>\n    <key>com.apple.security.files.user-selected.read-write</key>\n    <true/>\n    <key>com.apple.security.network.client</key>\n    <true/>\n    <key>com.apple.security.get-task-allow</key>\n    <true/>\n    <key>com.apple.security.cs.debugger</key>\n    <true/>\n    <key>com.apple.security.inherit</key>\n    <true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "package/entitlements.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <key>com.apple.security.files.user-selected.read-write</key>\n        <true/>\n        <key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n        <true/>\n        <key>com.apple.security.network.client</key>\n        <true/>\n        <key>com.apple.security.cs.allow-jit</key>\n        <true/>\n        <key>com.apple.security.cs.disable-library-validation</key>\n        <true/>\n        <key>com.apple.security.cs.disable-executable-page-protection</key>\n        <true/>\n        <key>com.apple.security.get-task-allow</key>\n        <true/>\n        <key>com.apple.security.cs.debugger</key>\n        <true/>\n        <key>com.apple.security.inherit</key>\n        <true/>\n    </dict>\n</plist>\n"
  },
  {
    "path": "package/lgpl-3.0.rtf",
    "content": "{\\rtf1\\ansi\\deff3\\adeflang1025\n{\\fonttbl{\\f0\\froman\\fprq2\\fcharset0 Times New Roman;}{\\f1\\froman\\fprq2\\fcharset2 Symbol;}{\\f2\\fswiss\\fprq2\\fcharset0 Arial;}{\\f3\\froman\\fprq2\\fcharset0 Liberation Serif{\\*\\falt Times New Roman};}{\\f4\\fswiss\\fprq2\\fcharset0 Liberation Sans{\\*\\falt Arial};}{\\f5\\froman\\fprq0\\fcharset128 Helvetica{\\*\\falt Arial};}{\\f6\\fnil\\fprq2\\fcharset0 Droid Sans Fallback;}{\\f7\\fnil\\fprq2\\fcharset0 FreeSans;}{\\f8\\fswiss\\fprq0\\fcharset128 FreeSans;}}\n{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue128;\\red128\\green128\\blue128;}\n{\\stylesheet{\\s0\\snext0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033 Normal;}\n{\\*\\cs15\\snext15\\cf2\\ul\\ulc0\\langfe255\\alang255\\lang255 Internet Link;}\n{\\s16\\sbasedon0\\snext17\\sb240\\sa120\\keepn\\dbch\\af6\\dbch\\af7\\afs28\\loch\\f4\\fs28 Heading;}\n{\\s17\\sbasedon0\\snext17\\sl288\\slmult1\\sb0\\sa140 Text Body;}\n{\\s18\\sbasedon17\\snext18\\sl288\\slmult1\\sb0\\sa140\\dbch\\af8 List;}\n{\\s19\\sbasedon0\\snext19\\sb120\\sa120\\noline\\i\\dbch\\af8\\afs24\\ai\\fs24 Caption;}\n{\\s20\\sbasedon0\\snext20\\noline\\dbch\\af8 Index;}\n}{\\info{\\creatim\\yr0\\mo0\\dy0\\hr0\\min0}{\\revtim\\yr0\\mo0\\dy0\\hr0\\min0}{\\printim\\yr0\\mo0\\dy0\\hr0\\min0}{\\comment LibreOffice}{\\vern67241986}}\\deftab720\n\\viewscale100\n{\\*\\pgdsctbl\n{\\pgdsc0\\pgdscuse451\\pgwsxn12240\\pghsxn15840\\marglsxn1800\\margrsxn1800\\margtsxn1440\\margbsxn1440\\pgdscnxt0 Default Style;}}\n\\formshade{\\*\\pgdscno0}\\paperh15840\\paperw12240\\margl1800\\margr1800\\margt1440\\margb1440\\sectd\\sbknone\\sectunlocked1\\pgndec\\pgwsxn12240\\pghsxn15840\\marglsxn1800\\margrsxn1800\\margtsxn1440\\margbsxn1440\\ftnbj\\ftnstart1\\ftnrstcont\\ftnnar\\aenddoc\\aftnrstcont\\aftnstart1\\aftnnrlc\n\\pgndec\\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs28\\loch\\f5\nGNU LESSER GENERAL PUBLIC LICENSE}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nVersion 3, 29 June 2007}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nCopyright \\u169\\'3f 2007 Free Software Foundation, Inc. <}{{\\field{\\*\\fldinst HYPERLINK \"https://fsf.org/\" }{\\fldrslt {\\cf2\\ul\\ulc0\\langfe255\\alang255\\lang255\\ul\\ulc0\\rtlch \\ltrch\\loch\\loch\\f5\nhttps://fsf.org/}{}}}\\rtlch \\ltrch\\loch\\loch\\f5\n>}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nEveryone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nThis version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs24\\loch\\f5\n0. Additional Definitions.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nAs used herein, \\uc2 \\u8220\\'81\\'67this License\\u8221\\'81\\'68 refers to version 3 of the GNU Lesser General Public License, and the \\u8220\\'81\\'67GNU GPL\\u8221\\'81\\'68 refers to version 3 of the GNU General Public License.\\uc1 }\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\f5\n\\uc2 \\u8220\\'81\\'67\\uc1 }{\\rtlch \\ltrch\\loch\\loch\\f5\nThe Library\\uc2 \\u8221\\'81\\'68 refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.\\uc1 }\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nAn \\uc2 \\u8220\\'81\\'67Application\\u8221\\'81\\'68 is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.\\uc1 }\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nA \\uc2 \\u8220\\'81\\'67Combined Work\\u8221\\'81\\'68 is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the \\u8220\\'81\\'67Linked Version\\u8221\\'81\\'68.\\uc1 }\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nThe \\uc2 \\u8220\\'81\\'67Minimal Corresponding Source\\u8221\\'81\\'68 for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.\\uc1 }\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nThe \\uc2 \\u8220\\'81\\'67Corresponding Application Code\\u8221\\'81\\'68 for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.\\uc1 }\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs24\\loch\\f5\n1. Exception to Section 3 of the GNU GPL.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nYou may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs24\\loch\\f5\n2. Conveying Modified Versions.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nIf you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs24\\loch\\f5\n3. Object Code Incorporating Material from Library Header Files.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nThe object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab b) Accompany the object code with a copy of the GNU GPL and this license document.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs24\\loch\\f5\n4. Combined Works.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nYou may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab b) Accompany the Combined Work with a copy of the GNU GPL and this license document.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab d) Do one of the following:}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li720\\ri0\\lin720\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8211\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li720\\ri0\\lin720\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8211\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs24\\loch\\f5\n5. Combined Libraries.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nYou may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li360\\ri0\\lin360\\rin0\\fi-360\\sb0\\sa0{\\rtlch \\ltrch\\loch\\f5\n\\u8226\\'3f}{\\rtlch \\ltrch\\loch\\loch\\f5\n\\tab b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\b\\rtlch \\ltrch\\loch\\fs24\\loch\\f5\n6. Revised Versions of the GNU Lesser General Public License.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nThe Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.}\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nEach version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License \\uc2 \\u8220\\'81\\'67or any later version\\u8221\\'81\\'68 applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.\\uc1 }\n\\par \\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\dbch\\af6\\langfe2052\\dbch\\af7\\afs24\\alang1081\\loch\\f3\\fs24\\lang1033\\ql\\li0\\ri0\\lin0\\rin0\\fi0\\sb0\\sa180{\\rtlch \\ltrch\\loch\\loch\\f5\nIf the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.}\n\\par }\n"
  },
  {
    "path": "package/qt.conf",
    "content": "[Platforms]\nWindowsArguments = fontengine=freetype\n"
  },
  {
    "path": "privacy_policy.md",
    "content": "# Privacy Policy\n\n## Introduction\nWelcome to VNote! We value your privacy and are committed to protecting your personal information. This Privacy Policy explains how we handle your information when you use our application.\n\n## Information We Collect\nVNote does not collect any personal or usage data from its users. Your interactions with the app remain private and are not stored or shared.\n\n## How We Use Your Information\nSince VNote does not collect any user data, we do not use, store, or process any personal information.\n\n## Sharing Your Information\nAs VNote does not collect any user data, we do not share any personal information with third parties.\n\n## Security\nWhile VNote does not collect any user data, we still implement security measures to ensure the integrity and safety of the application itself.\n\n## Your Choices\nSince no data is collected, there are no choices or actions required from users regarding their personal information.\n\n## Children's Privacy\nOur services are not intended for children under the age of 13. We do not knowingly collect personal information from children under 13.\n\n## Changes to This Privacy Policy\nWe may update this Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on our app. You are advised to review this Privacy Policy periodically for any changes.\n\n"
  },
  {
    "path": "scripts/init.cmd",
    "content": "@echo off\nREM Initialization script for VNote development environment on Windows\nREM This script calls init.sh using Git Bash\n\nsetlocal\n\necho ========================================\necho Initializing VNote development environment\necho ========================================\necho.\n\nREM Check if Git Bash is available\nwhere bash.exe >nul 2>&1\nif %errorlevel% neq 0 (\n    echo Error: Git Bash not found in PATH\n    echo.\n    echo Please ensure Git for Windows is installed and bash.exe is in your PATH.\n    echo You can download Git for Windows from: https://git-scm.com/download/win\n    echo.\n    echo Alternatively, run the init.sh script directly from Git Bash:\n    echo   bash scripts/init.sh\n    echo.\n    pause\n    exit /b 1\n)\n\nREM Get the directory where this script is located\nset SCRIPT_DIR=%~dp0\nset SCRIPT_DIR=%SCRIPT_DIR:~0,-1%\n\nREM Convert Windows path to Unix-style path for Git Bash\nREM Change C:\\path\\to\\file to /c/path/to/file\nset UNIX_PATH=%SCRIPT_DIR:\\=/%\nset UNIX_PATH=%UNIX_PATH::=%\nset UNIX_PATH=/%UNIX_PATH%\n\nREM Run the bash script\nbash.exe \"%UNIX_PATH%/init.sh\"\n\nif %errorlevel% neq 0 (\n    echo.\n    echo Error: Initialization failed\n    pause\n    exit /b 1\n)\n\necho.\necho You can now start developing VNote!\necho.\npause\n"
  },
  {
    "path": "scripts/init.sh",
    "content": "#!/bin/bash\n#\n# Initialization script for VNote development environment\n# Run this script once after cloning the repository\n#\n\nset -e\n\necho \"========================================\"\necho \"Initializing VNote development environment\"\necho \"========================================\"\n\n# Get the script directory and project root\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_ROOT=\"$(cd \"$SCRIPT_DIR/..\" && pwd)\"\n\ncd \"$PROJECT_ROOT\"\n\n# Step 1: Initialize and update git submodules\necho \"\"\necho \"[1/3] Initializing and updating git submodules...\"\nif ! git submodule update --init --recursive; then\n    echo \"Error: Failed to initialize submodules\"\n    exit 1\nfi\necho \"✓ Submodules initialized successfully\"\n\n# Step 2: Install pre-commit hook for main repository\necho \"\"\necho \"[2/3] Installing pre-commit hook for main repository...\"\nHOOKS_DIR=\".git/hooks\"\nif [ ! -d \"$HOOKS_DIR\" ]; then\n    echo \"Error: .git/hooks directory not found. Are you in a git repository?\"\n    exit 1\nfi\n\nif [ -f \"$HOOKS_DIR/pre-commit\" ]; then\n    echo \"Warning: pre-commit hook already exists. Creating backup...\"\n    cp \"$HOOKS_DIR/pre-commit\" \"$HOOKS_DIR/pre-commit.backup\"\nfi\n\ncp \"scripts/pre-commit\" \"$HOOKS_DIR/pre-commit\"\nchmod +x \"$HOOKS_DIR/pre-commit\"\necho \"✓ Main repository pre-commit hook installed\"\n\n# Step 3: Install pre-commit hook for vtextedit submodule\necho \"\"\necho \"[3/3] Installing pre-commit hook for vtextedit submodule...\"\nVTEXTEDIT_HOOKS_DIR=\"libs/vtextedit/.git/hooks\"\n\n# Check if vtextedit is using .git file (submodule) or directory\nif [ -f \"libs/vtextedit/.git\" ]; then\n    # It's a submodule, read the actual git directory path\n    GIT_DIR=$(grep \"gitdir:\" \"libs/vtextedit/.git\" | cut -d' ' -f2)\n    VTEXTEDIT_HOOKS_DIR=\"libs/vtextedit/$GIT_DIR/hooks\"\nelif [ -d \"libs/vtextedit/.git\" ]; then\n    # It's a regular git directory\n    VTEXTEDIT_HOOKS_DIR=\"libs/vtextedit/.git/hooks\"\nfi\n\nif [ ! -d \"$VTEXTEDIT_HOOKS_DIR\" ]; then\n    echo \"Error: vtextedit hooks directory not found at $VTEXTEDIT_HOOKS_DIR\"\n    exit 1\nfi\n\nif [ -f \"$VTEXTEDIT_HOOKS_DIR/pre-commit\" ]; then\n    echo \"Warning: vtextedit pre-commit hook already exists. Creating backup...\"\n    cp \"$VTEXTEDIT_HOOKS_DIR/pre-commit\" \"$VTEXTEDIT_HOOKS_DIR/pre-commit.backup\"\nfi\n\ncp \"libs/vtextedit/scripts/pre-commit\" \"$VTEXTEDIT_HOOKS_DIR/pre-commit\"\nchmod +x \"$VTEXTEDIT_HOOKS_DIR/pre-commit\"\necho \"✓ vtextedit submodule pre-commit hook installed\"\n\n# Done\necho \"\"\necho \"========================================\"\necho \"✓ Initialization complete!\"\necho \"========================================\"\necho \"\"\necho \"Note: The pre-commit hooks require clang-format to be installed.\"\necho \"If you don't have it installed, the hooks will skip formatting with a warning.\"\necho \"\"\n"
  },
  {
    "path": "scripts/pre-commit",
    "content": "#!/bin/sh\n#\n# Pre-commit hook to format C++ files with clang-format\n# Excludes third-party library folders\n\n# Folders to exclude (third-party sources)\nEXCLUDE_DIRS=\"libs\"\n\n# Get list of staged C++ files\nSTAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\\.(cpp|h|c|cc|cxx|hpp)$')\n\nif [ -z \"$STAGED_FILES\" ]; then\n  exit 0\nfi\n\n# Check if clang-format is available\nif ! command -v clang-format >/dev/null 2>&1; then\n  echo \"Warning: clang-format not found. Skipping formatting.\"\n  echo \"Install clang-format to enable automatic formatting.\"\n  exit 0\nfi\n\n# Format each file that is not in excluded directories\nfor FILE in $STAGED_FILES; do\n  # Check if file is in excluded directory\n  EXCLUDED=0\n  for EXCLUDE_DIR in $EXCLUDE_DIRS; do\n    case \"$FILE\" in\n      $EXCLUDE_DIR/*)\n        EXCLUDED=1\n        break\n        ;;\n    esac\n  done\n\n  if [ $EXCLUDED -eq 0 ]; then\n    echo \"Formatting: $FILE\"\n    clang-format -i \"$FILE\"\n    git add \"$FILE\"\n  else\n    echo \"Skipping (third-party): $FILE\"\n  fi\ndone\n\nexit 0\n"
  },
  {
    "path": "scripts/update_version.py",
    "content": "import fileinput\nimport sys\nimport re\n\nif len(sys.argv) < 2:\n    print(\"Please provide a new version string!\")\n    exit\n\nnewVersion = sys.argv[1]\nshortVersion = re.match('^(\\\\d+\\\\.\\\\d+).', newVersion).group(1)\nprint(\"New version: {0}\".format(newVersion))\n\n# CMakeList\nregExp = re.compile('(\\\\s+)VERSION \\\\S+')\nfor line in fileinput.input(['CMakeLists.txt'], inplace = True):\n    print(regExp.sub('\\\\1VERSION ' + newVersion, line), end='')\n\n# vnotex.json\nregExp = re.compile('(\\\\s+)\"version\" : \"\\\\S+\"')\nfor line in fileinput.input(['src/data/core/vnotex.json'], inplace = True):\n    print(regExp.sub('\\\\1\"version\" : \"' + newVersion + '\"', line), end='')\n\n# ci-xxx.yml\nregExp = re.compile('(\\\\s+)VNOTE_VER: \\\\S+')\nfor line in fileinput.input(['.github/workflows/ci-win.yml', '.github/workflows/ci-linux.yml', '.github/workflows/ci-macos.yml'], inplace = True):\n    print(regExp.sub('\\\\1VNOTE_VER: ' + newVersion, line), end='')\n\n# Info.plist\nregExp = re.compile('(\\\\s+)<string>(?!10\\\\.15)\\\\d+\\\\.\\\\d+</string>')\nfor line in fileinput.input(['src/data/core/Info.plist'], inplace = True):\n    print(regExp.sub('\\\\1<string>' + shortVersion + '</string>', line), end='')\n\nregExp = re.compile('(\\\\s+)<string>\\\\d+\\\\.\\\\d+\\\\.\\\\d+</string>')\nfor line in fileinput.input(['src/data/core/Info.plist'], inplace = True):\n    print(regExp.sub('\\\\1<string>' + newVersion + '</string>', line), end='')\n\nregExp = re.compile('(\\\\s+)<string>\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+</string>')\nfor line in fileinput.input(['src/data/core/Info.plist'], inplace = True):\n    print(regExp.sub('\\\\1<string>' + newVersion + '.1</string>', line), end='')\n"
  },
  {
    "path": "src/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.20)\n\nset(CMAKE_INCLUDE_CURRENT_DIR ON)\n\nset(CMAKE_INSTALL_BINDIR \".\" CACHE STRING \"Binary dir for install\")\n\nset(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING \"Qt version to use (5 or 6), defaults to 6\")\nfind_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core Gui Network PrintSupport Sql Svg Widgets WebChannel WebEngineWidgets LinguistTools)\nfind_package(Qt${QT_DEFAULT_MAJOR_VERSION} OPTIONAL_COMPONENTS Core5Compat)\n\nif ((QT_DEFAULT_MAJOR_VERSION GREATER 5))\n    qt_standard_project_setup()\nelse()\n    set(CMAKE_AUTOMOC ON)\n    set(CMAKE_AUTORCC ON)\n    set(CMAKE_AUTOUIC ON)\nendif()\n\n# Application icon on Windows\nset(VX_APP_ICON_RC_WIN data/core/icons/vnote.rc)\n\n# The MACOSX_BUNDLE_ICON_FILE variable is added to the Info.plist\n# generated by CMake. This variable contains the .icns file name,\n# without the path.\nset(MACOSX_BUNDLE_ICON_FILE vnote.icns)\n# And the following tells CMake where to find and install the file itself.\nset(VX_APP_ICON_MACOS data/core/icons/vnote.icns)\nset_source_files_properties(${VX_APP_ICON_MACOS} PROPERTIES\n    MACOSX_PACKAGE_LOCATION \"Resources\")\n\n# Translations\nset(VX_TS_FILES data/core/translations/vnote_zh_CN.ts\n    data/core/translations/vnote_ja.ts)\n# Generate .qm files from .ts files (lrelease)\nset_source_files_properties(${VX_TS_FILES} PROPERTIES\n    OUTPUT_LOCATION \"${CMAKE_CURRENT_BINARY_DIR}/translations\")\nqt_add_translation(VX_QM_FILES ${VX_TS_FILES})\nadd_custom_target(lrelease DEPENDS ${VX_QM_FILES})\n\n# TODO: VTextEdit translations\nlist(APPEND VX_QM_FILES\n    ${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qdialogbuttonbox_zh_CN.qm\n    ${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtbase_ja.qm\n    ${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtbase_zh_CN.qm\n    ${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtv_ja.qm\n    ${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtv_zh_CN.qm\n    ${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qwebengine_zh_CN.qm\n)\n\n# Resources\nset(VX_RESOURCE_FILES data/core/core.qrc)\nset(VX_EXTRA_RESOURCE_FILES_RCC ${CMAKE_CURRENT_BINARY_DIR}/vnote_extra.rcc)\nqt_add_binary_resources(VX_EXTRA_RESOURCE data/extra/extra.qrc DESTINATION ${VX_EXTRA_RESOURCE_FILES_RCC} OPTIONS -compress 9)\n\nadd_executable(vnote WIN32 MACOSX_BUNDLE\n    application.cpp application.h\n    commandlineoptions.cpp commandlineoptions.h\n    fakeaccessible.cpp fakeaccessible.h\n    main.cpp\n    ${VX_APP_ICON_RC_WIN} ${VX_APP_ICON_MACOS} ${VX_RESOURCE_FILES}\n)\n\n# Translations\nif((QT_DEFAULT_MAJOR_VERSION EQUAL 6))\n    if((Qt6Widgets_VERSION VERSION_GREATER_EQUAL 6.7.0))\n        qt_add_lupdate(TS_FILES ${VX_TS_FILES}\n            SOURCE_TARGETS vnote)\n    else()\n        qt_add_lupdate(vnote TS_FILES ${VX_TS_FILES})\n    endif()\nendif()\n\nadd_dependencies(vnote VX_EXTRA_RESOURCE)\n\nset(VX_LIBS_FOLDER ../libs)\ntarget_include_directories(vnote PRIVATE\n    ${CMAKE_CURRENT_SOURCE_DIR}\n)\n\nfind_program(GOLD_LINKER \"ld.gold\")\nif (NOT ${GOLD_LINKER} STREQUAL GOLD_LINKER-NOTFOUND)\n    set(CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold\")\nendif()\n\ntarget_compile_definitions(vnote PRIVATE\n    QT_MESSAGELOGCONTEXT\n)\n\nadd_subdirectory(core)\nadd_subdirectory(export)\nadd_subdirectory(imagehost)\nadd_subdirectory(search)\nadd_subdirectory(snippet)\nadd_subdirectory(task)\nadd_subdirectory(unitedentry)\nadd_subdirectory(utils)\nadd_subdirectory(widgets)\n\ntarget_link_libraries(vnote PRIVATE\n    Qt::Core\n    Qt::Gui\n    Qt::Network\n    Qt::PrintSupport\n    Qt::Sql\n    Qt::Svg\n    Qt::WebChannel\n    Qt::WebEngineWidgets\n    Qt::Widgets\n    VTextEdit\n    qhotkey\n)\n\nif((QT_DEFAULT_MAJOR_VERSION GREATER 5))\n    target_link_libraries(vnote PRIVATE\n        Qt::Core5Compat\n    )\nendif()\n\n# Copy the qt.conf on Windows\nif(WIN32)\n    add_custom_command(TARGET vnote POST_BUILD\n        COMMAND ${CMAKE_COMMAND} -E copy_if_different\n        \"${PROJECT_SOURCE_DIR}/package/qt.conf\" $<TARGET_FILE_DIR:vnote>)\nendif()\n\n# Installation\nif (WIN32)\n    install(TARGETS vnote RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})\n    install(FILES \"${PROJECT_SOURCE_DIR}/package/qt.conf\" DESTINATION ${CMAKE_INSTALL_BINDIR})\n    install(FILES ${VX_EXTRA_RESOURCE_FILES_RCC} DESTINATION ${CMAKE_INSTALL_BINDIR})\n    install(FILES ${VX_QM_FILES} DESTINATION \"${CMAKE_INSTALL_BINDIR}/translations\" OPTIONAL)\nelseif(APPLE)\n    set(CMAKE_MACOSX_RPATH ON)\n\n    # TODO: declare install for macOS if necessary. For packing, we will manually copy files into\n    # the src/vnote.app bundle.\n\n    # The generated Info.plist will be overridden.\n    set_target_properties(vnote\n        PROPERTIES\n        OUTPUT_NAME \"${PROJECT_NAME}\"\n        MACOSX_BUNDLE_BUNDLE_NAME \"${PROJECT_NAME}\"\n        MACOSX_BUNDLE_INFO_STRING \"${PROJECT_DESCRIPTION}\"\n        MACOSX_BUNDLE_GUI_IDENTIFIER \"fun.vnote.vnote\"\n        MACOSX_BUNDLE_LONG_VERSION_STRING \"${PROJECT_VERSION}\"\n        MACOSX_BUNDLE_SHORT_VERSION_STRING \"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}\"\n        MACOSX_BUNDLE_BUNDLE_VERSION \"${PROJECT_VERSION}\"\n        MACOSX_BUNDLE_COPYRIGHT \"Distributed under LGPL-3.0 license. Copyright (c) 2024 app.vnote.fun\"\n    )\nelse()\n    install(TARGETS vnote\n        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}\n        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n    )\n    install(FILES ${VX_EXTRA_RESOURCE_FILES_RCC} DESTINATION ${CMAKE_INSTALL_DATADIR})\n    install(FILES ${VX_QM_FILES} DESTINATION \"${CMAKE_INSTALL_DATADIR}/translations\" OPTIONAL)\n\n    set(desktop.path applications)\n    set(desktop.files data/core/vnote.desktop)\n    set(icon16.path icons/hicolor/16x16/apps)\n    set(icon16.files data/core/logo/16x16/vnote.png)\n    set(icon32.path icons/hicolor/32x32/apps)\n    set(icon32.files data/core/logo/32x32/vnote.png)\n    set(icon48.path icons/hicolor/48x48/apps)\n    set(icon48.files data/core/logo/48x48/vnote.png)\n    set(icon64.path icons/hicolor/64x64/apps)\n    set(icon64.files data/core/logo/64x64/vnote.png)\n    set(icon128.path icons/hicolor/128x128/apps)\n    set(icon128.files data/core/logo/128x128/vnote.png)\n    set(icon256.path icons/hicolor/256x256/apps)\n    set(icon256.files data/core/logo/256x256/vnote.png)\n    set(iconsvg.path icons/hicolor/scalable/apps)\n    set(iconsvg.files data/core/logo/vnote.svg)\n    foreach(item IN ITEMS desktop icon16 icon32 icon48 icon64 icon128 icon256 iconsvg)\n        install(FILES ${CMAKE_CURRENT_LIST_DIR}/${${item}.files}\n            DESTINATION ${CMAKE_INSTALL_DATADIR}/${${item}.path}\n            PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)\n    endforeach()\nendif()\n\ninclude(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake)\n"
  },
  {
    "path": "src/CPackLinuxDeployQt.cmake.in",
    "content": "message(STATUS \"VX_APPIMAGE_DEST_DIR ${VX_APPIMAGE_DEST_DIR}\")\nmessage(STATUS \"VX_APPIMAGE_DESKTOP_FILE ${VX_APPIMAGE_DESKTOP_FILE}\")\n\nexecute_process(\n    COMMAND ${CMAKE_MAKE_PROGRAM} DESTDIR=${VX_APPIMAGE_DEST_DIR} install\n    WORKING_DIRECTORY ${CMAKE_BINARY_DIR})\nexecute_process(\n    COMMAND env QMAKE=${QMAKE_EXECUTABLE} LD_LIBRARY_PATH=/usr/local/lib64:$ENV{LD_LIBRARY_PATH} \"${LINUXDEPLOY_EXECUTABLE}\" --plugin=qt --output=appimage\n        --appdir=${VX_APPIMAGE_DEST_DIR} -e ${CMAKE_CURRENT_BINARY_DIR}/vnote -d ${VX_APPIMAGE_DESKTOP_FILE}\n        -i ${CMAKE_CURRENT_LIST_DIR}/data/core/logo/64x64/vnote.png\n        -l ${QT_PLUGINS_DIR}/platformthemes/libqgtk3.so\n        -l /usr/local/lib64/libcrypto.so.3\n        -l /usr/local/lib64/libssl.so.3\n        # --exclude-library option does not work as expected\n        # --exclude-library=libssl.so.1.1,libcrypto.so.1.1,libnss3.so,libnssutil3.so\n    WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY})\n"
  },
  {
    "path": "src/CPackMacDeployQt.cmake.in",
    "content": "execute_process(COMMAND \"optool\" strip -t ${CMAKE_CURRENT_BINARY_DIR}/VNote.app\n    WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY}\n)\nexecute_process(COMMAND \"${MACDEPLOYQT_EXECUTABLE}\" ${CMAKE_CURRENT_BINARY_DIR}/VNote.app -always-overwrite -verbose=1\n    WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY}\n)\n"
  },
  {
    "path": "src/Packaging.cmake",
    "content": "# from: https://github.com/miurahr/cmake-qt-packaging-example\nfind_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core)\n\nget_target_property(QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION)\nget_filename_component(QT_BIN_DIR \"${QMAKE_EXECUTABLE}\" DIRECTORY)\nexecute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)\n\nset(QT_TOOLS_DIR \"${QT_BIN_DIR}/../../../Tools\")\ncmake_path(NORMAL_PATH QT_TOOLS_DIR OUTPUT_VARIABLE QT_TOOLS_DIR)\n\nset(QT_PLUGINS_DIR \"${QT_BIN_DIR}/../plugins\")\ncmake_path(NORMAL_PATH QT_PLUGINS_DIR OUTPUT_VARIABLE QT_PLUGINS_DIR)\n\n# To use the specific version of Qt\nset(WINDEPLOYQT_EXECUTABLE \"${QT_BIN_DIR}/windeployqt.exe\")\n\nfind_program(LINUXDEPLOY_EXECUTABLE linuxdeploy linuxdeploy-x86_64.AppImage HINTS \"${QT_BIN_DIR}\")\nfind_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS \"${QT_BIN_DIR}\")\nfind_program(MACDEPLOYQTFIX_EXECUTABLE macdeployqtfix.py HINTS \"${QT_BIN_DIR}\")\nfind_package(Python)\n\nfunction(windeployqt target)\n    # Bundle Library Files\n    string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER)\n\n    if ((QT_DEFAULT_MAJOR_VERSION GREATER 5))\n        if(CMAKE_BUILD_TYPE_UPPER STREQUAL \"DEBUG\")\n            set(WINDEPLOYQT_ARGS --debug)\n        else()\n            set(WINDEPLOYQT_ARGS --release)\n        endif()\n    endif()\n\n    add_custom_target(deploy\n        COMMAND \"${CMAKE_COMMAND}\" -E remove_directory \"${CMAKE_CURRENT_BINARY_DIR}/winqt/\"\n        COMMAND \"${CMAKE_COMMAND}\" -E\n            env PATH=\"${QT_BIN_DIR}\" \"${WINDEPLOYQT_EXECUTABLE}\"\n            ${WINDEPLOYQT_ARGS}\n            --no-quick-import\n            --no-opengl-sw\n            --no-compiler-runtime\n            --translations zh_CN,ja\n            --dir \"${CMAKE_CURRENT_BINARY_DIR}/winqt/\"\n            $<TARGET_FILE:${target}>\n        COMMAND \"${CMAKE_COMMAND}\" -E remove_directory \"${CMAKE_CURRENT_BINARY_DIR}/winqt/generic/\"\n        COMMAND \"${CMAKE_COMMAND}\" -E remove_directory \"${CMAKE_CURRENT_BINARY_DIR}/winqt/styles/\"\n        COMMAND \"${CMAKE_COMMAND}\" -E remove_directory \"${CMAKE_CURRENT_BINARY_DIR}/winqt/qmltooling/\"\n        COMMENT \"Deploying Qt...\"\n        DEPENDS vnote lrelease\n    )\n\n    add_dependencies(pack deploy)\n\n    install(DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}/winqt/\" DESTINATION \"${CMAKE_INSTALL_BINDIR}\" OPTIONAL)\n\n    set(OPENSSL_ROOT_DIR \"${QT_TOOLS_DIR}/OpenSSL/Win_x64\" CACHE STRING \"OpenSSL dir\")\n    file(GLOB OPENSSL_LIBS_FILES \"${OPENSSL_ROOT_DIR}/bin/lib*.dll\")\n    cmake_path(NORMAL_PATH OPENSSL_LIBS_FILES OUTPUT_VARIABLE OPENSSL_LIBS_FILES)\n    install(FILES ${OPENSSL_LIBS_FILES} DESTINATION \"${CMAKE_INSTALL_BINDIR}\" OPTIONAL)\n\n    message(STATUS \"OpenSSLExtraLIBDIR:${OPENSSL_EXTRA_LIB_DIR}\")\n    file(GLOB OPENSSL_EXTRA_LIB_FILES \"${OPENSSL_EXTRA_LIB_DIR}/lib*.dll\")\n    cmake_path(NORMAL_PATH OPENSSL_EXTRA_LIB_FILES OUTPUT_VARIABLE OPENSSL_EXTRA_LIB_FILES)\n    message(STATUS \"OpenSSLExtraLibFiles:${OPENSSL_EXTRA_LIB_FILES}\")\n    install(FILES ${OPENSSL_EXTRA_LIB_FILES} DESTINATION \"${CMAKE_INSTALL_BINDIR}\" OPTIONAL)\n\n    set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)\n    include(InstallRequiredSystemLibraries)\nendfunction()\n\nset(CPACK_PACKAGE_VENDOR \"VNoteX\")\nset(CPACK_PACKAGE_NAME ${PROJECT_NAME})\nset(CPACK_PACKAGE_CONTACT \"Le Tan <tamlokveer@gmail.com>\")\nset(CPACK_PACKAGE_DESCRIPTION_SUMMARY \"${PROJECT_DESCRIPTION}\")\nset(CPACK_PACKAGE_DESCRIPTION_FILE \"${PROJECT_SOURCE_DIR}/README.md\")\nset(CPACK_RESOURCE_FILE_LICENSE \"${PROJECT_SOURCE_DIR}/COPYING.LESSER\")\nset(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})\nset(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})\nset(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})\n\nset(CPACK_PACKAGE_INSTALL_DIRECTORY \"${PROJECT_NAME}\")\nset(CPACK_PACKAGE_DIRECTORY \"${CMAKE_BINARY_DIR}\")\n\n# Start menu entry on Windows\nset(CPACK_PACKAGE_EXECUTABLES \"vnote\" \"VNote\")\n# Desktop link on Windows\nset(CPACK_CREATE_DESKTOP_LINKS \"vnote\")\n\nset(CPACK_STRIP_FILES TRUE)\n\n# WIX generator\nset(CPACK_WIX_UPGRADE_GUID BA25F337-991A-4893-9D8A-AD5E89BAF5C4)\nset(CPACK_WIX_PRODUCT_GUID BA25F337-991A-4893-9D8A-AD5E89BAF5C4)\nset(CPACK_WIX_LICENSE_RTF \"${PROJECT_SOURCE_DIR}/package/lgpl-3.0.rtf\")\nset(CPACK_WIX_PRODUCT_ICON \"${CMAKE_CURRENT_LIST_DIR}/data/core/icons/vnote.ico\")\nset(CPACK_WIX_UI_BANNER \"${PROJECT_SOURCE_DIR}/package/wix_banner.png\")\nset(CPACK_WIX_UI_DIALOG \"${PROJECT_SOURCE_DIR}/package/wix_dialog.png\")\n\n#------------------------------------------------------------------------------\n# include CPack, so we get target for packages\nset(CPACK_OUTPUT_CONFIG_FILE \"${CMAKE_BINARY_DIR}/BundleConfig.cmake\")\n\nadd_custom_target(pack\n                  COMMAND ${CMAKE_CPACK_COMMAND} \"--config\" \"${CMAKE_BINARY_DIR}/BundleConfig.cmake\" \"--verbose\"\n                  COMMENT \"Running CPACK. Please wait...\"\n                  DEPENDS vnote)\nadd_dependencies(pack lrelease)\n\nset(CPACK_GENERATOR)\n\nset(CPACK_PACKAGE_ICON \"${CMAKE_CURRENT_LIST_DIR}/data/core/logo/64x64/vnote.png\")\n\nif(WIN32)\n    find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS \"${QT_BIN_DIR}\" DOC \"Path to the windeployqt utility\")\n\n    list(APPEND CPACK_GENERATOR ZIP)\n    message(STATUS \"Package generation - Windows - Zip\")\n\n    find_program(WIX_EXECUTABLE wix HINTS \"${QT_BIN_DIR}\" DOC \"Path to the WiX utility\")\n\n    if (NOT WIX_EXECUTABLE-NOTFOUND)\n        list(APPEND CPACK_GENERATOR WIX)\n        message(STATUS \"Package generation - Windows - WiX\")\n    endif()\n\n    windeployqt(vnote)\nelseif(APPLE)\n    # Manually copy resources.\n    set(VX_BUNDLE_CONTENTS_DIR $<TARGET_FILE_DIR:vnote>/..)\n    add_custom_target(deploy\n        COMMAND ${CMAKE_COMMAND} -E copy_if_different\n        \"${CMAKE_CURRENT_LIST_DIR}/data/core/Info.plist\" ${VX_BUNDLE_CONTENTS_DIR}\n        COMMAND ${CMAKE_COMMAND} -E copy_if_different\n        ${VX_EXTRA_RESOURCE_FILES_RCC} ${VX_BUNDLE_CONTENTS_DIR}/Resources\n        COMMAND ${CMAKE_COMMAND} -E make_directory ${VX_BUNDLE_CONTENTS_DIR}/Resources/translations\n        COMMAND ${CMAKE_COMMAND} -E copy_if_different\n        ${VX_QM_FILES} ${VX_BUNDLE_CONTENTS_DIR}/Resources/translations\n        COMMENT \"Copying resources into bundle Contents ${VX_BUNDLE_CONTENTS_DIR}\"\n        DEPENDS vnote lrelease\n    )\n    add_dependencies(pack deploy)\n\n    message(STATUS \"MACDeployQtExecutable: ${MACDEPLOYQT_EXECUTABLE}\")\n    if (MACDEPLOYQT_EXECUTABLE)\n        message(STATUS \"Package generation - MacOS - DMG\")\n\n        list(APPEND CPACK_GENERATOR External)\n        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CPackMacDeployQt.cmake.in \"${CMAKE_BINARY_DIR}/CPackExternal.cmake\")\n        set(CPACK_EXTERNAL_PACKAGE_SCRIPT \"${CMAKE_BINARY_DIR}/CPackExternal.cmake\")\n        include(InstallRequiredSystemLibraries)\n    endif()\nelse()\n    message(STATUS \"LinuxDeployExecutable: ${LINUXDEPLOY_EXECUTABLE}\")\n    if(LINUXDEPLOY_EXECUTABLE)\n        message(STATUS \"Package generation - Linux - AppImage\")\n\n        list(APPEND CPACK_GENERATOR External)\n        set(VX_APPIMAGE_DEST_DIR \"${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage\")\n        set(VX_APPIMAGE_DESKTOP_FILE \"${VX_APPIMAGE_DEST_DIR}${CMAKE_INSTALL_PREFIX}/share/applications/vnote.desktop\")\n        configure_file(${CMAKE_CURRENT_LIST_DIR}/CPackLinuxDeployQt.cmake.in \"${CMAKE_BINARY_DIR}/CPackExternal.cmake\")\n        set(CPACK_EXTERNAL_PACKAGE_SCRIPT \"${CMAKE_BINARY_DIR}/CPackExternal.cmake\")\n    endif()\nendif()\n\ninclude(CPack)\n"
  },
  {
    "path": "src/application.cpp",
    "content": "#include \"application.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QFileOpenEvent>\n#include <QFileSystemWatcher>\n#include <QStyle>\n#include <QTimer>\n#include <core/vnotex.h>\n\nusing namespace vnotex;\n\nApplication::Application(int &p_argc, char **p_argv) : QApplication(p_argc, p_argv) {}\n\nvoid Application::watchThemeFolder(const QString &p_themeFolderPath) {\n  if (p_themeFolderPath.isEmpty()) {\n    return;\n  }\n\n  // Initialize watchers only when needed\n  if (!m_styleWatcher) {\n    m_styleWatcher = new QFileSystemWatcher(this);\n  }\n  if (!m_reloadTimer) {\n    m_reloadTimer = new QTimer(this);\n    m_reloadTimer->setSingleShot(true);\n    m_reloadTimer->setInterval(500); // 500ms debounce delay\n    connect(m_reloadTimer, &QTimer::timeout, this, &Application::reloadThemeResources);\n\n    // Connect file watcher to timer\n    connect(m_styleWatcher, &QFileSystemWatcher::directoryChanged, m_reloadTimer,\n            qOverload<>(&QTimer::start));\n    connect(m_styleWatcher, &QFileSystemWatcher::fileChanged, m_reloadTimer,\n            qOverload<>(&QTimer::start));\n  }\n\n  // Watch the theme folder and its files\n  m_styleWatcher->addPath(p_themeFolderPath);\n\n  // Also watch individual files in the theme folder\n  QDir themeDir(p_themeFolderPath);\n  QStringList files = themeDir.entryList(QDir::Files);\n  for (const QString &file : files) {\n    m_styleWatcher->addPath(themeDir.filePath(file));\n  }\n}\n\nvoid Application::reloadThemeResources() {\n  VNoteX::getInst().getThemeMgr().refreshCurrentTheme();\n\n  auto stylesheet = VNoteX::getInst().getThemeMgr().fetchQtStyleSheet();\n  if (!stylesheet.isEmpty()) {\n    setStyleSheet(stylesheet);\n    style()->unpolish(this);\n    style()->polish(this);\n  }\n}\n\nbool Application::event(QEvent *p_event) {\n  // On macOS, we need this to open file from Finder.\n  if (p_event->type() == QEvent::FileOpen) {\n    QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(p_event);\n    qDebug() << \"request to open file\" << openEvent->file();\n    emit openFileRequested(openEvent->file());\n  }\n\n  return QApplication::event(p_event);\n}\n"
  },
  {
    "path": "src/application.h",
    "content": "#ifndef APPLICATION_H\n#define APPLICATION_H\n#include <QApplication>\n\nclass QFileSystemWatcher;\nclass QTimer;\n\nnamespace vnotex {\nclass Application : public QApplication {\n  Q_OBJECT\npublic:\n  Application(int &p_argc, char **p_argv);\n\n  // Set up theme folder watcher for hot-reload\n  void watchThemeFolder(const QString &p_themeFolderPath);\n\n  // Reload the theme resources (stylesheet, icons, etc)\n  void reloadThemeResources();\n\nsignals:\n  void openFileRequested(const QString &p_filePath);\n\nprotected:\n  bool event(QEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  QFileSystemWatcher *m_styleWatcher = nullptr;\n  QTimer *m_reloadTimer = nullptr;\n};\n} // namespace vnotex\n\n#endif // APPLICATION_H\n"
  },
  {
    "path": "src/commandlineoptions.cpp",
    "content": "#include \"commandlineoptions.h\"\n\n#include <QCommandLineOption>\n#include <QCommandLineParser>\n#include <QCoreApplication>\n#include <QDebug>\n\n#include <widgets/mainwindow.h>\n\nusing vnotex::MainWindow;\n\nCommandLineOptions::ParseResult CommandLineOptions::parse(const QStringList &p_arguments) {\n  QCommandLineParser parser;\n  parser.setApplicationDescription(MainWindow::tr(\"A pleasant note-taking platform.\"));\n  const auto helpOpt = parser.addHelpOption();\n  const auto versionOpt = parser.addVersionOption();\n\n  // Positional arguments.\n  parser.addPositionalArgument(\"paths\", MainWindow::tr(\"Files or folders to open.\"));\n\n  const QCommandLineOption verboseOpt(\"verbose\", MainWindow::tr(\"Print more logs.\"));\n  parser.addOption(verboseOpt);\n\n  const QCommandLineOption logStderrOpt(\"log-stderr\", MainWindow::tr(\"Log to stderr.\"));\n  parser.addOption(logStderrOpt);\n\n  const QCommandLineOption watchThemesOpt(\"watch-themes\",\n                                          MainWindow::tr(\"Watch theme folder for changes.\"));\n  parser.addOption(watchThemesOpt);\n\n  // WebEngine options.\n  // No need to handle them. Just add them to the parser to avoid parse error.\n  {\n    QCommandLineOption webRemoteDebuggingPortOpt(\"remote-debugging-port\",\n                                                 MainWindow::tr(\"WebEngine remote debugging port.\"),\n                                                 MainWindow::tr(\"port_number\"));\n    webRemoteDebuggingPortOpt.setFlags(QCommandLineOption::HiddenFromHelp);\n    parser.addOption(webRemoteDebuggingPortOpt);\n\n    QCommandLineOption webNoSandboxOpt(\"no-sandbox\", MainWindow::tr(\"WebEngine without sandbox.\"));\n    webNoSandboxOpt.setFlags(QCommandLineOption::HiddenFromHelp);\n    parser.addOption(webNoSandboxOpt);\n\n    QCommandLineOption webDisableGpu(\"disable-gpu\", MainWindow::tr(\"WebEngine with GPU disabled.\"));\n    webDisableGpu.setFlags(QCommandLineOption::HiddenFromHelp);\n    parser.addOption(webDisableGpu);\n  }\n\n  if (!parser.parse(p_arguments)) {\n    m_errorMsg = parser.errorText();\n    return ParseResult::Error;\n  }\n\n  // Handle results.\n  m_helpText = parser.helpText();\n  if (parser.isSet(helpOpt)) {\n    return ParseResult::HelpRequested;\n  }\n\n  if (parser.isSet(versionOpt)) {\n    return ParseResult::VersionRequested;\n  }\n\n  // Position arguments.\n  const auto args = parser.positionalArguments();\n  m_pathsToOpen = args;\n\n  if (parser.isSet(verboseOpt)) {\n    m_verbose = true;\n  }\n\n  if (parser.isSet(logStderrOpt)) {\n    m_logToStderr = true;\n  }\n\n  if (parser.isSet(watchThemesOpt)) {\n    m_watchThemes = true;\n  }\n\n  return ParseResult::Ok;\n}\n"
  },
  {
    "path": "src/commandlineoptions.h",
    "content": "#ifndef COMMANDLINEOPTIONS_H\n#define COMMANDLINEOPTIONS_H\n\n#include <QStringList>\n\nclass CommandLineOptions {\npublic:\n  enum ParseResult { Ok, Error, VersionRequested, HelpRequested };\n\n  CommandLineOptions() = default;\n\n  ParseResult parse(const QStringList &p_arguments);\n\n  QString m_errorMsg;\n\n  QString m_helpText;\n\n  QStringList m_pathsToOpen;\n\n  bool m_verbose = false;\n\n  bool m_logToStderr = false;\n\n  // Whether to watch theme folder for changes\n  bool m_watchThemes = false;\n};\n\n#endif // COMMANDLINEOPTIONS_H\n"
  },
  {
    "path": "src/core/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    buffer/buffer.cpp buffer/buffer.h\n    buffer/bufferprovider.cpp buffer/bufferprovider.h\n    buffer/filebufferprovider.cpp buffer/filebufferprovider.h\n    buffer/filetypehelper.cpp buffer/filetypehelper.h\n    buffer/ibufferfactory.h\n    buffer/markdownbuffer.cpp buffer/markdownbuffer.h\n    buffer/markdownbufferfactory.cpp buffer/markdownbufferfactory.h\n    buffer/mindmapbuffer.cpp buffer/mindmapbuffer.h\n    buffer/mindmapbufferfactory.cpp buffer/mindmapbufferfactory.h\n    buffer/nodebufferprovider.cpp buffer/nodebufferprovider.h\n    buffer/pdfbuffer.cpp buffer/pdfbuffer.h\n    buffer/pdfbufferfactory.cpp buffer/pdfbufferfactory.h\n    buffer/textbuffer.cpp buffer/textbuffer.h\n    buffer/textbufferfactory.cpp buffer/textbufferfactory.h\n    buffer/urlbasedbufferprovider.h\n    buffermgr.cpp buffermgr.h\n    clipboarddata.cpp clipboarddata.h\n    configmgr.cpp configmgr.h\n    coreconfig.cpp coreconfig.h\n    editorconfig.cpp editorconfig.h\n    events.h\n    exception.h\n    externalfile.cpp externalfile.h\n    file.cpp file.h\n    filelocator.h\n    fileopenparameters.h\n    global.cpp global.h\n    historyitem.cpp historyitem.h\n    historymgr.cpp historymgr.h\n    htmltemplatehelper.cpp htmltemplatehelper.h\n    iconfig.h\n    location.h\n    logger.cpp logger.h\n    mainconfig.cpp mainconfig.h\n    markdowneditorconfig.cpp markdowneditorconfig.h\n    mindmapeditorconfig.cpp mindmapeditorconfig.h\n    namebasedserver.h\n    noncopyable.h\n    notebook/bundlenotebook.cpp notebook/bundlenotebook.h\n    notebook/bundlenotebookfactory.cpp notebook/bundlenotebookfactory.h\n    notebook/externalnode.cpp notebook/externalnode.h\n    notebook/historyi.h\n    notebook/inotebookfactory.h\n    notebook/node.cpp notebook/node.h\n    notebook/nodeparameters.cpp notebook/nodeparameters.h\n    notebook/nodevisual.cpp notebook/nodevisual.h\n    notebook/notebook.cpp notebook/notebook.h\n    notebook/notebookdatabaseaccess.cpp notebook/notebookdatabaseaccess.h\n    notebook/notebookparameters.cpp notebook/notebookparameters.h\n    notebook/notebooktagmgr.cpp notebook/notebooktagmgr.h\n    notebook/tag.cpp notebook/tag.h\n    notebook/tagi.h\n    notebook/vxnode.cpp notebook/vxnode.h\n    notebook/vxnodefile.cpp notebook/vxnodefile.h\n    notebookbackend/inotebookbackend.cpp notebookbackend/inotebookbackend.h\n    notebookbackend/inotebookbackendfactory.h\n    notebookbackend/localnotebookbackend.cpp notebookbackend/localnotebookbackend.h\n    notebookbackend/localnotebookbackendfactory.cpp notebookbackend/localnotebookbackendfactory.h\n    notebookconfigmgr/bundlenotebookconfigmgr.cpp notebookconfigmgr/bundlenotebookconfigmgr.h\n    notebookconfigmgr/inotebookconfigmgr.cpp notebookconfigmgr/inotebookconfigmgr.h\n    notebookconfigmgr/inotebookconfigmgrfactory.h\n    notebookconfigmgr/notebookconfig.cpp notebookconfigmgr/notebookconfig.h\n    notebookconfigmgr/vxnodeconfig.cpp notebookconfigmgr/vxnodeconfig.h\n    notebookconfigmgr/vxnotebookconfigmgr.cpp notebookconfigmgr/vxnotebookconfigmgr.h\n    notebookconfigmgr/vxnotebookconfigmgrfactory.cpp notebookconfigmgr/vxnotebookconfigmgrfactory.h\n    notebookmgr.cpp notebookmgr.h\n    pdfviewerconfig.cpp pdfviewerconfig.h\n    quickaccesshelper.cpp quickaccesshelper.h\n    sessionconfig.cpp sessionconfig.h\n    singleinstanceguard.cpp singleinstanceguard.h\n    templatemgr.cpp templatemgr.h\n    texteditorconfig.cpp texteditorconfig.h\n    theme.cpp theme.h\n    thememgr.cpp thememgr.h\n    versioncontroller/dummyversioncontroller.cpp versioncontroller/dummyversioncontroller.h\n    versioncontroller/dummyversioncontrollerfactory.cpp versioncontroller/dummyversioncontrollerfactory.h\n    versioncontroller/iversioncontroller.h\n    versioncontroller/iversioncontrollerfactory.h\n    versioncontroller/versioncontrollerserver.cpp versioncontroller/versioncontrollerserver.h\n    vnotex.cpp vnotex.h\n    webresource.h\n    widgetconfig.cpp widgetconfig.h\n)\n\ntarget_include_directories(vnote PRIVATE\n    ${CMAKE_CURRENT_SOURCE_DIR}\n)\n"
  },
  {
    "path": "src/core/buffer/buffer.cpp",
    "content": "#include \"buffer.h\"\n\n#include <QTimer>\n\n#include <notebook/node.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <widgets/viewwindow.h>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n\n#include \"bufferprovider.h\"\n#include \"exception.h\"\n\nusing namespace vnotex;\n\nstatic vnotex::ID generateBufferID() {\n  static vnotex::ID id = 0;\n  return ++id;\n}\n\nBuffer::Buffer(const BufferParameters &p_parameters, QObject *p_parent)\n    : QObject(p_parent), m_provider(p_parameters.m_provider), m_id(generateBufferID()),\n      m_readOnly(m_provider->isReadOnly()) {\n  m_autoSaveTimer = new QTimer(this);\n  m_autoSaveTimer->setSingleShot(true);\n  m_autoSaveTimer->setInterval(1000);\n  connect(m_autoSaveTimer, &QTimer::timeout, this, &Buffer::autoSave);\n\n  readContent();\n\n  checkBackupFileOfPreviousSession();\n}\n\nBuffer::~Buffer() {\n  Q_ASSERT(m_attachedViewWindowCount == 0);\n  Q_ASSERT(!m_viewWindowToSync);\n  Q_ASSERT(!isModified());\n  Q_ASSERT(m_backupFilePath.isEmpty());\n}\n\nint Buffer::getAttachViewWindowCount() const { return m_attachedViewWindowCount; }\n\nvoid Buffer::attachViewWindow(ViewWindow *p_win) {\n  Q_UNUSED(p_win);\n  Q_ASSERT(!(m_state & StateFlag::Discarded));\n  ++m_attachedViewWindowCount;\n}\n\nvoid Buffer::detachViewWindow(ViewWindow *p_win) {\n  Q_UNUSED(p_win);\n  Q_ASSERT(p_win != m_viewWindowToSync);\n\n  --m_attachedViewWindowCount;\n  Q_ASSERT(m_attachedViewWindowCount >= 0);\n\n  if (m_attachedViewWindowCount == 0) {\n    emit attachedViewWindowEmpty();\n  }\n}\n\nViewWindow *Buffer::createViewWindow(const QSharedPointer<FileOpenParameters> &p_paras,\n                                     QWidget *p_parent) {\n  auto window = createViewWindowInternal(p_paras, p_parent);\n  Q_ASSERT(window);\n  window->attachToBuffer(this, p_paras);\n  return window;\n}\n\nbool Buffer::match(const Node *p_node) const {\n  Q_ASSERT(p_node);\n  return m_provider->match(p_node);\n}\n\nbool Buffer::match(const QString &p_filePath) const { return m_provider->match(p_filePath); }\n\nQString Buffer::getName() const { return m_provider->getName(); }\n\nQString Buffer::getPath() const { return m_provider->getPath(); }\n\nQString Buffer::getContentPath() const { return m_provider->getContentPath(); }\n\nQString Buffer::getResourcePath() const { return m_provider->getResourcePath(); }\n\nID Buffer::getId() const { return m_id; }\n\nconst QString &Buffer::getContent() const {\n  const_cast<Buffer *>(this)->syncContent();\n  return m_content;\n}\n\nvoid Buffer::setContent(const QString &p_content, int &p_revision) {\n  m_viewWindowToSync = nullptr;\n  m_content = p_content;\n  p_revision = ++m_revision;\n  setModified(true);\n  m_autoSaveTimer->start();\n  emit contentsChanged();\n}\n\nvoid Buffer::invalidateContent(const ViewWindow *p_win,\n                               const std::function<void(int)> &p_setRevision) {\n  Q_ASSERT(!m_viewWindowToSync || m_viewWindowToSync == p_win);\n  ++m_revision;\n  p_setRevision(m_revision);\n  m_viewWindowToSync = p_win;\n  m_autoSaveTimer->start();\n  emit contentsChanged();\n}\n\nint Buffer::getRevision() const { return m_revision; }\n\nvoid Buffer::syncContent(const ViewWindow *p_win) {\n  if (m_viewWindowToSync == p_win) {\n    syncContent();\n  }\n}\n\nvoid Buffer::syncContent() {\n  if (m_viewWindowToSync) {\n    // Need to sync content.\n    m_content = m_viewWindowToSync->getLatestContent();\n    m_viewWindowToSync = nullptr;\n  }\n}\n\nbool Buffer::isModified() const { return m_modified; }\n\nvoid Buffer::setModified(bool p_modified) {\n  if (m_modified == p_modified) {\n    return;\n  }\n\n  m_modified = p_modified;\n  emit modified(m_modified);\n}\n\nbool Buffer::isReadOnly() const { return m_readOnly; }\n\nBuffer::OperationCode Buffer::save(bool p_force) {\n  Q_ASSERT(!m_readOnly);\n  if (m_readOnly) {\n    return OperationCode::Failed;\n  }\n\n  if (m_modified || p_force ||\n      m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) {\n    syncContent();\n\n    // We do not involve user here to handle file missing and changed outside cases.\n    // The active ViewWindow will check this periodically.\n    // Check if file still exists.\n    if (!p_force && !checkFileExistsOnDisk()) {\n      qWarning() << \"failed to save buffer due to file missing on disk\" << getPath();\n      return OperationCode::FileMissingOnDisk;\n    }\n\n    // Check if file is modified outside.\n    if (!p_force && checkFileChangedOutside()) {\n      qWarning() << \"failed to save buffer due to file changed from outside\" << getPath();\n      return OperationCode::FileChangedOutside;\n    }\n\n    try {\n      m_provider->write(m_content);\n    } catch (Exception &p_e) {\n      qWarning() << \"failed to write the buffer content\" << getPath() << p_e.what();\n      return OperationCode::Failed;\n    }\n\n    setModified(false);\n    m_state &= ~(StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside);\n  }\n  return OperationCode::Success;\n}\n\nBuffer::OperationCode Buffer::reload() {\n  // Check if file is missing.\n  if (!checkFileExistsOnDisk()) {\n    qWarning() << \"failed to save buffer due to file missing on disk\" << getPath();\n    return OperationCode::FileMissingOnDisk;\n  }\n\n  if (m_modified || m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) {\n    readContent();\n\n    emit modified(m_modified);\n    emit contentsChanged();\n  }\n  return OperationCode::Success;\n}\n\nvoid Buffer::readContent() {\n  m_content = m_provider->read();\n  ++m_revision;\n\n  // Reset state.\n  m_viewWindowToSync = nullptr;\n  m_modified = false;\n}\n\nvoid Buffer::discard() {\n  Q_ASSERT(!(m_state & StateFlag::Discarded));\n  Q_ASSERT(m_attachedViewWindowCount == 1);\n  m_autoSaveTimer->stop();\n  m_content.clear();\n  m_state |= StateFlag::Discarded;\n  ++m_revision;\n\n  m_viewWindowToSync = nullptr;\n  m_modified = false;\n}\n\nvoid Buffer::close() {\n  // Delete the backup file if exists.\n  m_autoSaveTimer->stop();\n  if (!m_backupFilePath.isEmpty()) {\n    FileUtils::removeFile(m_backupFilePath);\n    m_backupFilePath.clear();\n  }\n}\n\nQString Buffer::getImageFolderPath() const {\n  return const_cast<Buffer *>(this)->m_provider->fetchImageFolderPath();\n}\n\nQString Buffer::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) {\n  Q_UNUSED(p_srcImagePath);\n  Q_UNUSED(p_imageFileName);\n  Q_ASSERT_X(false, \"insertImage\", \"image insert is not supported\");\n  return QString();\n}\n\nQString Buffer::insertImage(const QImage &p_image, const QString &p_imageFileName) {\n  Q_UNUSED(p_image);\n  Q_UNUSED(p_imageFileName);\n  Q_ASSERT_X(false, \"insertImage\", \"image insert is not supported\");\n  return QString();\n}\n\nvoid Buffer::removeImage(const QString &p_imagePath) {\n  Q_UNUSED(p_imagePath);\n  Q_ASSERT_X(false, \"removeImage\", \"image remove is not supported\");\n}\n\nvoid Buffer::autoSave() {\n  if (m_readOnly) {\n    m_autoSaveTimer->stop();\n    return;\n  }\n\n  if (m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) {\n    qDebug() << \"disable AutoSave due to file missing on disk or changed outside\";\n    return;\n  }\n  Q_ASSERT(!(m_state & StateFlag::Discarded));\n  auto policy = ConfigMgr::getInst().getEditorConfig().getAutoSavePolicy();\n  switch (policy) {\n  case EditorConfig::AutoSavePolicy::None:\n    return;\n\n  case EditorConfig::AutoSavePolicy::AutoSave:\n    if (save(false) != OperationCode::Success) {\n      qWarning() << \"AutoSave failed to save buffer, retry later\";\n    } else {\n      emit autoSaved();\n    }\n    break;\n\n  case EditorConfig::AutoSavePolicy::BackupFile:\n    try {\n      writeBackupFile();\n    } catch (Exception &p_e) {\n      qWarning() << \"AutoSave failed to write backup file, retry later\" << p_e.what();\n    }\n    break;\n  }\n}\n\nvoid Buffer::writeBackupFile() {\n  if (m_backupFilePath.isEmpty()) {\n    const auto &config = ConfigMgr::getInst().getEditorConfig();\n    QString backupDirPath(QDir(getResourcePath()).filePath(config.getBackupFileDirectory()));\n    backupDirPath = QDir::cleanPath(backupDirPath);\n    auto backupFileName = FileUtils::generateFileNameWithSequence(backupDirPath, getName(),\n                                                                  config.getBackupFileExtension());\n    QDir backupDir(backupDirPath);\n    backupDir.mkpath(backupDirPath);\n    m_backupFilePath = backupDir.filePath(backupFileName);\n  }\n\n  Q_ASSERT(m_backupFilePathOfPreviousSession.isEmpty());\n\n  // Just use FileUtils instead of notebook backend.\n  FileUtils::writeFile(m_backupFilePath, generateBackupFileHead() + getContent());\n}\n\nQString Buffer::generateBackupFileHead() const {\n  return QStringLiteral(\"vnotex_backup_file %1|\").arg(getContentPath());\n}\n\nvoid Buffer::checkBackupFileOfPreviousSession() {\n  const auto &config = ConfigMgr::getInst().getEditorConfig();\n  if (config.getAutoSavePolicy() != EditorConfig::AutoSavePolicy::BackupFile) {\n    return;\n  }\n\n  QString backupDirPath(QDir(getResourcePath()).filePath(config.getBackupFileDirectory()));\n  backupDirPath = QDir::cleanPath(backupDirPath);\n  QDir backupDir(backupDirPath);\n  QStringList backupFiles;\n  {\n    const QString nameFilter =\n        QStringLiteral(\"%1*%2\").arg(getName(), config.getBackupFileExtension());\n    backupFiles =\n        backupDir.entryList(QStringList(nameFilter),\n                            QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::NoDotAndDotDot);\n  }\n\n  if (backupFiles.isEmpty()) {\n    return;\n  }\n\n  for (const auto &file : backupFiles) {\n    const auto filePath = backupDir.filePath(file);\n    if (isBackupFileOfBuffer(filePath)) {\n      const auto backupContent = readBackupFile(filePath);\n      if (backupContent == getContent()) {\n        // Found backup file with identical content.\n        // Just discard the backup file.\n        FileUtils::removeFile(filePath);\n        qInfo() << \"delete identical backup file of previous session\" << filePath;\n      } else {\n        m_backupFilePathOfPreviousSession = filePath;\n        qInfo() << \"found backup file of previous session\" << filePath;\n      }\n      break;\n    }\n  }\n}\n\nbool Buffer::isBackupFileOfBuffer(const QString &p_file) const {\n  QFile file(p_file);\n  if (!file.open(QFile::ReadOnly | QIODevice::Text)) {\n    return false;\n  }\n\n  QTextStream st(&file);\n  const auto head = st.readLine();\n  return head.startsWith(generateBackupFileHead());\n}\n\nconst QString &Buffer::getBackupFileOfPreviousSession() const {\n  return m_backupFilePathOfPreviousSession;\n}\n\nQString Buffer::readBackupFile(const QString &p_filePath) {\n  auto content = FileUtils::readTextFile(p_filePath);\n  return content.mid(content.indexOf(QLatin1Char('|')) + 1);\n}\n\nvoid Buffer::discardBackupFileOfPreviousSession() {\n  Q_ASSERT(!m_backupFilePathOfPreviousSession.isEmpty());\n\n  FileUtils::removeFile(m_backupFilePathOfPreviousSession);\n  qInfo() << \"discard backup file of previous session\" << m_backupFilePathOfPreviousSession;\n  m_backupFilePathOfPreviousSession.clear();\n}\n\nvoid Buffer::recoverFromBackupFileOfPreviousSession() {\n  Q_ASSERT(!m_backupFilePathOfPreviousSession.isEmpty());\n\n  m_content = readBackupFile(m_backupFilePathOfPreviousSession);\n  m_provider->write(m_content);\n  ++m_revision;\n\n  FileUtils::removeFile(m_backupFilePathOfPreviousSession);\n  qInfo() << \"recover from backup file of previous session\" << m_backupFilePathOfPreviousSession;\n  m_backupFilePathOfPreviousSession.clear();\n\n  // Reset state.\n  m_viewWindowToSync = nullptr;\n  m_modified = false;\n\n  emit modified(m_modified);\n  emit contentsChanged();\n}\n\nbool Buffer::isChildOf(const Node *p_node) const { return m_provider->isChildOf(p_node); }\n\nbool Buffer::isAttachmentSupported() const {\n  return !m_readOnly && m_provider->isAttachmentSupported();\n}\n\nbool Buffer::hasAttachment() const {\n  if (!isAttachmentSupported()) {\n    return false;\n  }\n\n  if (m_provider->getAttachmentFolder().isEmpty()) {\n    return false;\n  }\n\n  QDir dir(getAttachmentFolderPath());\n  return !dir.isEmpty();\n}\n\nQString Buffer::getAttachmentFolderPath() const {\n  Q_ASSERT(isAttachmentSupported());\n  return const_cast<Buffer *>(this)->m_provider->fetchAttachmentFolderPath();\n}\n\nQStringList Buffer::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) {\n  if (p_files.isEmpty()) {\n    return QStringList();\n  }\n  auto destFolderPath = p_destFolderPath.isEmpty() ? getAttachmentFolderPath() : p_destFolderPath;\n  Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), destFolderPath));\n  auto files = m_provider->addAttachment(destFolderPath, p_files);\n  if (!files.isEmpty()) {\n    emit attachmentChanged();\n  }\n  return files;\n}\n\nQString Buffer::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) {\n  Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_destFolderPath));\n  auto filePath = m_provider->newAttachmentFile(p_destFolderPath, p_name);\n  emit attachmentChanged();\n  return filePath;\n}\n\nQString Buffer::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) {\n  Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_destFolderPath));\n  auto folderPath = m_provider->newAttachmentFolder(p_destFolderPath, p_name);\n  emit attachmentChanged();\n  return folderPath;\n}\n\nQString Buffer::renameAttachment(const QString &p_path, const QString &p_name) {\n  Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_path));\n  return m_provider->renameAttachment(p_path, p_name);\n}\n\nvoid Buffer::removeAttachment(const QStringList &p_paths) {\n  m_provider->removeAttachment(p_paths);\n  emit attachmentChanged();\n}\n\nbool Buffer::isAttachment(const QString &p_path) const {\n  return PathUtils::pathContains(getAttachmentFolderPath(), p_path);\n}\n\nbool Buffer::isTagSupported() const { return m_provider->isTagSupported(); }\n\nBuffer::ProviderType Buffer::getProviderType() const { return m_provider->getType(); }\n\nNode *Buffer::getNode() const { return m_provider->getNode(); }\n\nbool Buffer::checkFileExistsOnDisk() {\n  if (m_provider->checkFileExistsOnDisk()) {\n    m_state &= ~StateFlag::FileMissingOnDisk;\n    return true;\n  } else {\n    m_state |= StateFlag::FileMissingOnDisk;\n    return false;\n  }\n}\n\nbool Buffer::checkFileChangedOutside() {\n  if (m_provider->checkFileChangedOutside()) {\n    m_state |= StateFlag::FileChangedOutside;\n    return true;\n  } else {\n    m_state &= ~StateFlag::FileChangedOutside;\n    return false;\n  }\n}\n\nBuffer::StateFlags Buffer::state() const { return m_state; }\n\nQSharedPointer<File> Buffer::getFile() const { return m_provider->getFile(); }\n"
  },
  {
    "path": "src/core/buffer/buffer.h",
    "content": "#ifndef BUFFER_H\n#define BUFFER_H\n\n#include <QObject>\n#include <QSharedPointer>\n\n#include <functional>\n\n#include <global.h>\n\nclass QWidget;\nclass QTimer;\n\nnamespace vnotex {\nclass Node;\nclass Buffer;\nclass ViewWindow;\nstruct FileOpenParameters;\nclass BufferProvider;\nclass File;\n\nstruct BufferParameters {\n  QSharedPointer<BufferProvider> m_provider;\n};\n\nclass Buffer : public QObject {\n  Q_OBJECT\npublic:\n  enum class ProviderType { Internal, External };\n\n  enum class OperationCode { Success, FileMissingOnDisk, FileChangedOutside, Failed };\n\n  enum StateFlag { Normal = 0, FileMissingOnDisk = 0x1, FileChangedOutside = 0x2, Discarded = 0x4 };\n  Q_DECLARE_FLAGS(StateFlags, StateFlag);\n\n  Buffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);\n\n  virtual ~Buffer();\n\n  int getAttachViewWindowCount() const;\n\n  void attachViewWindow(ViewWindow *p_win);\n  void detachViewWindow(ViewWindow *p_win);\n\n  // Create a view window to show the content of this buffer.\n  // Attach the created view window to this buffer.\n  ViewWindow *createViewWindow(const QSharedPointer<FileOpenParameters> &p_paras,\n                               QWidget *p_parent);\n\n  // Whether this buffer matches @p_node.\n  bool match(const Node *p_node) const;\n\n  // Whether this buffer matches @p_filePath.\n  bool match(const QString &p_filePath) const;\n\n  // Buffer name.\n  QString getName() const;\n\n  QString getPath() const;\n\n  // In some cases, getPath() may point to a container containting all the stuffs.\n  // getContentPath() will return the real path to the file providing the content.\n  QString getContentPath() const;\n\n  // Get the base path to resolve resources.\n  QString getResourcePath() const;\n\n  // Return nullptr if not available.\n  QSharedPointer<File> getFile() const;\n\n  ID getId() const;\n\n  // Get buffer content.\n  // It may differ from the content on disk.\n  // For performance, we need to sync the content with ViewWindow before returning\n  // the latest content.\n  const QString &getContent() const;\n\n  // @p_revision will be set before contentsChanged is emitted.\n  void setContent(const QString &p_content, int &p_revision);\n\n  // Invalidate the content of buffer.\n  // Need to sync with @p_win to get the latest content.\n  // @p_setRevision will be called to set revision before contentsChanged is emitted.\n  void invalidateContent(const ViewWindow *p_win, const std::function<void(int)> &p_setRevision);\n\n  // Sync content with @p_win if @p_win is the window needed to sync.\n  void syncContent(const ViewWindow *p_win);\n\n  int getRevision() const;\n\n  bool isModified() const;\n  void setModified(bool p_modified);\n\n  bool isReadOnly() const;\n\n  // Save buffer content to file.\n  OperationCode save(bool p_force);\n\n  // Discard changes and reload file.\n  OperationCode reload();\n\n  // Discard the buffer which will invalidate the buffer.\n  void discard();\n\n  // Buffer is about to be deleted.\n  void close();\n\n  // Insert image from @p_srcImagePath.\n  // Return inserted image file path.\n  virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName);\n\n  virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName);\n\n  virtual void removeImage(const QString &p_imagePath);\n\n  const QString &getBackupFileOfPreviousSession() const;\n\n  void discardBackupFileOfPreviousSession();\n\n  void recoverFromBackupFileOfPreviousSession();\n\n  // Whether this buffer's provider is a child of @p_node or an attachment of @p_node.\n  bool isChildOf(const Node *p_node) const;\n\n  Node *getNode() const;\n\n  bool isAttachmentSupported() const;\n\n  bool hasAttachment() const;\n\n  QString getAttachmentFolderPath() const;\n\n  // @p_destFolderPath: folder path locating in attachment folder. Use the root folder if empty.\n  QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files);\n\n  QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name);\n\n  QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name);\n\n  QString renameAttachment(const QString &p_path, const QString &p_name);\n\n  void removeAttachment(const QStringList &p_paths);\n\n  // Judge whether file @p_path is attachment.\n  bool isAttachment(const QString &p_path) const;\n\n  bool isTagSupported() const;\n\n  ProviderType getProviderType() const;\n\n  bool checkFileExistsOnDisk();\n\n  bool checkFileChangedOutside();\n\n  StateFlags state() const;\n\n  static QString readBackupFile(const QString &p_filePath);\n\nsignals:\n  void attachedViewWindowEmpty();\n\n  void modified(bool p_modified);\n\n  void contentsChanged();\n\n  void nameChanged();\n\n  void attachmentChanged();\n\n  // This buffer is AutoSavePolicy::AutoSave.\n  void autoSaved();\n\nprotected:\n  virtual ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                               QWidget *p_parent) = 0;\n\n  QSharedPointer<BufferProvider> m_provider;\n\nprivate slots:\n  void autoSave();\n\nprivate:\n  void syncContent();\n\n  void readContent();\n\n  // Get the path of the image folder.\n  QString getImageFolderPath() const;\n\n  void writeBackupFile();\n\n  // Generate backup file head.\n  QString generateBackupFileHead() const;\n\n  void checkBackupFileOfPreviousSession();\n\n  bool isBackupFileOfBuffer(const QString &p_file) const;\n\n  // Will be assigned uniquely once created.\n  const ID m_id = 0;\n\n  // Revision of contents.\n  int m_revision = 0;\n\n  // If the buffer is modified, m_content reflect the latest changes instead\n  // of the file content.\n  QString m_content;\n\n  bool m_readOnly = false;\n\n  bool m_modified = false;\n\n  int m_attachedViewWindowCount = 0;\n\n  const ViewWindow *m_viewWindowToSync = nullptr;\n\n  // Managed by QObject.\n  QTimer *m_autoSaveTimer = nullptr;\n\n  QString m_backupFilePath;\n\n  QString m_backupFilePathOfPreviousSession;\n\n  StateFlags m_state = StateFlag::Normal;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::Buffer::StateFlags)\n\n#endif // BUFFER_H\n"
  },
  {
    "path": "src/core/buffer/bufferprovider.cpp",
    "content": "#include \"bufferprovider.h\"\n\n#include <QFileInfo>\n\nusing namespace vnotex;\n\nbool BufferProvider::checkFileExistsOnDisk() const { return QFileInfo::exists(getContentPath()); }\n\nQDateTime BufferProvider::getLastModifiedFromFile() const {\n  return QFileInfo(getContentPath()).lastModified();\n}\n\nbool BufferProvider::checkFileChangedOutside() const {\n  // TODO: support non-local URLs.\n  QFileInfo info(getContentPath());\n  if (!info.exists() || m_lastModified != info.lastModified()) {\n    return true;\n  }\n  return false;\n}\n"
  },
  {
    "path": "src/core/buffer/bufferprovider.h",
    "content": "#ifndef BUFFERPROVIDER_H\n#define BUFFERPROVIDER_H\n\n#include <QDateTime>\n#include <QObject>\n\n#include \"buffer.h\"\n\nnamespace vnotex {\nclass Node;\n\n// Content provider for Buffer.\nclass BufferProvider : public QObject {\n  Q_OBJECT\npublic:\n  BufferProvider(QObject *p_parent = nullptr) : QObject(p_parent) {}\n\n  virtual ~BufferProvider() {}\n\n  virtual Buffer::ProviderType getType() const = 0;\n\n  virtual bool match(const Node *p_node) const = 0;\n\n  virtual bool match(const QString &p_filePath) const = 0;\n\n  virtual QString getName() const = 0;\n\n  virtual QString getPath() const = 0;\n\n  virtual QString getContentPath() const = 0;\n\n  virtual QString getResourcePath() const = 0;\n\n  virtual void write(const QString &p_content) = 0;\n\n  virtual QString read() const = 0;\n\n  virtual QString fetchImageFolderPath() = 0;\n\n  virtual bool isChildOf(const Node *p_node) const = 0;\n\n  virtual Node *getNode() const = 0;\n\n  virtual QString getAttachmentFolder() const = 0;\n\n  virtual QString fetchAttachmentFolderPath() = 0;\n\n  virtual QStringList addAttachment(const QString &p_destFolderPath,\n                                    const QStringList &p_files) = 0;\n\n  virtual QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) = 0;\n\n  virtual QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) = 0;\n\n  virtual QString renameAttachment(const QString &p_path, const QString &p_name) = 0;\n\n  virtual void removeAttachment(const QStringList &p_paths) = 0;\n\n  virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) = 0;\n\n  virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName) = 0;\n\n  virtual void removeImage(const QString &p_imagePath) = 0;\n\n  virtual bool isAttachmentSupported() const = 0;\n\n  virtual bool isTagSupported() const = 0;\n\n  virtual bool checkFileExistsOnDisk() const;\n\n  virtual bool checkFileChangedOutside() const;\n\n  virtual bool isReadOnly() const = 0;\n\n  // Return nullptr if not available.\n  virtual QSharedPointer<File> getFile() const = 0;\n\nprotected:\n  virtual QDateTime getLastModifiedFromFile() const;\n\n  QDateTime m_lastModified;\n};\n} // namespace vnotex\n\n#endif // BUFFERPROVIDER_H\n"
  },
  {
    "path": "src/core/buffer/filebufferprovider.cpp",
    "content": "#include \"filebufferprovider.h\"\n\n#include <QFileInfo>\n\n#include <core/exception.h>\n#include <core/file.h>\n#include <notebook/node.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nFileBufferProvider::FileBufferProvider(const QSharedPointer<File> &p_file, Node *p_nodeAttachedTo,\n                                       bool p_readOnly, QObject *p_parent)\n    : BufferProvider(p_parent), m_file(p_file), c_nodeAttachedTo(p_nodeAttachedTo),\n      m_readOnly(p_readOnly) {}\n\nBuffer::ProviderType FileBufferProvider::getType() const { return Buffer::ProviderType::External; }\n\nbool FileBufferProvider::match(const Node *p_node) const {\n  Q_UNUSED(p_node);\n  return false;\n}\n\nbool FileBufferProvider::match(const QString &p_filePath) const {\n  return PathUtils::areSamePaths(m_file->getFilePath(), p_filePath);\n}\n\nQString FileBufferProvider::getName() const { return m_file->getName(); }\n\nQString FileBufferProvider::getPath() const { return m_file->getFilePath(); }\n\nQString FileBufferProvider::getContentPath() const { return m_file->getContentPath(); }\n\nQString FileBufferProvider::getResourcePath() const { return m_file->getResourcePath(); }\n\nvoid FileBufferProvider::write(const QString &p_content) {\n  m_file->write(p_content);\n  m_lastModified = getLastModifiedFromFile();\n}\n\nQString FileBufferProvider::read() const {\n  const_cast<FileBufferProvider *>(this)->m_lastModified = getLastModifiedFromFile();\n  return m_file->read();\n}\n\nQString FileBufferProvider::fetchImageFolderPath() {\n  auto file = m_file->getImageInterface();\n  if (file) {\n    return file->fetchImageFolderPath();\n  } else {\n    return QString();\n  }\n}\n\nbool FileBufferProvider::isChildOf(const Node *p_node) const {\n  if (c_nodeAttachedTo) {\n    return c_nodeAttachedTo == p_node || Node::isAncestor(p_node, c_nodeAttachedTo);\n  }\n  return false;\n}\n\nQString FileBufferProvider::getAttachmentFolder() const {\n  Q_ASSERT(false);\n  return QString();\n}\n\nQString FileBufferProvider::fetchAttachmentFolderPath() {\n  Q_ASSERT(false);\n  return QString();\n}\n\nQStringList FileBufferProvider::addAttachment(const QString &p_destFolderPath,\n                                              const QStringList &p_files) {\n  Q_UNUSED(p_destFolderPath);\n  Q_UNUSED(p_files);\n  Q_ASSERT(false);\n  return QStringList();\n}\n\nQString FileBufferProvider::newAttachmentFile(const QString &p_destFolderPath,\n                                              const QString &p_name) {\n  Q_UNUSED(p_destFolderPath);\n  Q_UNUSED(p_name);\n  Q_ASSERT(false);\n  return QString();\n}\n\nQString FileBufferProvider::newAttachmentFolder(const QString &p_destFolderPath,\n                                                const QString &p_name) {\n  Q_UNUSED(p_destFolderPath);\n  Q_UNUSED(p_name);\n  Q_ASSERT(false);\n  return QString();\n}\n\nQString FileBufferProvider::renameAttachment(const QString &p_path, const QString &p_name) {\n  Q_UNUSED(p_path);\n  Q_UNUSED(p_name);\n  Q_ASSERT(false);\n  return QString();\n}\n\nvoid FileBufferProvider::removeAttachment(const QStringList &p_paths) {\n  Q_UNUSED(p_paths);\n  Q_ASSERT(false);\n}\n\nQString FileBufferProvider::insertImage(const QString &p_srcImagePath,\n                                        const QString &p_imageFileName) {\n  auto file = m_file->getImageInterface();\n  if (file) {\n    return file->insertImage(p_srcImagePath, p_imageFileName);\n  } else {\n    return QString();\n  }\n}\n\nQString FileBufferProvider::insertImage(const QImage &p_image, const QString &p_imageFileName) {\n  auto file = m_file->getImageInterface();\n  if (file) {\n    return file->insertImage(p_image, p_imageFileName);\n  } else {\n    return QString();\n  }\n}\n\nvoid FileBufferProvider::removeImage(const QString &p_imagePath) {\n  auto file = m_file->getImageInterface();\n  if (file) {\n    try {\n      file->removeImage(p_imagePath);\n    } catch (Exception &e) {\n      qWarning() << \"failed to remove image\" << p_imagePath << e.what();\n    }\n  }\n}\n\nbool FileBufferProvider::isAttachmentSupported() const { return false; }\n\nbool FileBufferProvider::isTagSupported() const { return false; }\n\nNode *FileBufferProvider::getNode() const { return c_nodeAttachedTo; }\n\nbool FileBufferProvider::isReadOnly() const { return m_readOnly; }\n\nQSharedPointer<File> FileBufferProvider::getFile() const { return m_file; }\n"
  },
  {
    "path": "src/core/buffer/filebufferprovider.h",
    "content": "#ifndef FILEBUFFERPROVIDER_H\n#define FILEBUFFERPROVIDER_H\n\n#include \"bufferprovider.h\"\n\nnamespace vnotex {\nclass File;\n\n// Buffer provider based on external file.\nclass FileBufferProvider : public BufferProvider {\n  Q_OBJECT\npublic:\n  FileBufferProvider(const QSharedPointer<File> &m_file, Node *p_nodeAttachedTo, bool p_readOnly,\n                     QObject *p_parent = nullptr);\n\n  Buffer::ProviderType getType() const Q_DECL_OVERRIDE;\n\n  bool match(const Node *p_node) const Q_DECL_OVERRIDE;\n\n  bool match(const QString &p_filePath) const Q_DECL_OVERRIDE;\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getPath() const Q_DECL_OVERRIDE;\n\n  QString getContentPath() const Q_DECL_OVERRIDE;\n\n  QString getResourcePath() const Q_DECL_OVERRIDE;\n\n  void write(const QString &p_content) Q_DECL_OVERRIDE;\n\n  QString read() const Q_DECL_OVERRIDE;\n\n  QString fetchImageFolderPath() Q_DECL_OVERRIDE;\n\n  bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE;\n\n  Node *getNode() const Q_DECL_OVERRIDE;\n\n  QString getAttachmentFolder() const Q_DECL_OVERRIDE;\n\n  QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE;\n\n  QStringList addAttachment(const QString &p_destFolderPath,\n                            const QStringList &p_files) Q_DECL_OVERRIDE;\n\n  QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE;\n\n  QString newAttachmentFolder(const QString &p_destFolderPath,\n                              const QString &p_name) Q_DECL_OVERRIDE;\n\n  QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE;\n\n  void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE;\n\n  QString insertImage(const QString &p_srcImagePath,\n                      const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;\n\n  bool isAttachmentSupported() const Q_DECL_OVERRIDE;\n\n  bool isTagSupported() const Q_DECL_OVERRIDE;\n\n  bool isReadOnly() const Q_DECL_OVERRIDE;\n\n  QSharedPointer<File> getFile() const Q_DECL_OVERRIDE;\n\nprivate:\n  QSharedPointer<File> m_file;\n\n  Node *c_nodeAttachedTo = nullptr;\n\n  bool m_readOnly = false;\n};\n} // namespace vnotex\n\n#endif // FILEBUFFERPROVIDER_H\n"
  },
  {
    "path": "src/core/buffer/filetypehelper.cpp",
    "content": "#include \"filetypehelper.h\"\n\n#include <QDebug>\n#include <QFileInfo>\n\n#include \"buffer.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <utils/fileutils.h>\n\nusing namespace vnotex;\n\nQString FileType::preferredSuffix() const {\n  return m_suffixes.isEmpty() ? QString() : m_suffixes.first();\n}\n\nbool FileType::isMarkdown() const { return m_type == Type::Markdown; }\n\nQString FileTypeHelper::s_systemDefaultProgram = QStringLiteral(\"System\");\n\nFileTypeHelper::FileTypeHelper() { reload(); }\n\nvoid FileTypeHelper::reload() {\n  setupBuiltInTypes();\n\n  setupSuffixTypeMap();\n}\n\nvoid FileTypeHelper::setupBuiltInTypes() {\n  m_fileTypes.clear();\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  {\n    FileType type;\n    type.m_type = FileType::Markdown;\n    type.m_typeName = QStringLiteral(\"Markdown\");\n    type.m_displayName = Buffer::tr(\"Markdown\");\n\n    auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);\n    if (suffixes && !suffixes->isEmpty()) {\n      type.m_suffixes = *suffixes;\n    } else {\n      type.m_suffixes << QStringLiteral(\"md\") << QStringLiteral(\"mkd\") << QStringLiteral(\"rmd\")\n                      << QStringLiteral(\"markdown\");\n    }\n\n    m_fileTypes.push_back(type);\n  }\n\n  {\n    FileType type;\n    type.m_type = FileType::Text;\n    type.m_typeName = QStringLiteral(\"Text\");\n    type.m_displayName = Buffer::tr(\"Text\");\n\n    auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);\n    if (suffixes && !suffixes->isEmpty()) {\n      type.m_suffixes = *suffixes;\n    } else {\n      type.m_suffixes << QStringLiteral(\"txt\") << QStringLiteral(\"text\") << QStringLiteral(\"log\");\n    }\n\n    m_fileTypes.push_back(type);\n  }\n\n  {\n    FileType type;\n    type.m_type = FileType::Pdf;\n    type.m_typeName = QStringLiteral(\"PDF\");\n    type.m_displayName = Buffer::tr(\"Portable Document Format\");\n    type.m_isNewable = false;\n\n    auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);\n    if (suffixes && !suffixes->isEmpty()) {\n      type.m_suffixes = *suffixes;\n    } else {\n      type.m_suffixes << QStringLiteral(\"pdf\");\n    }\n\n    m_fileTypes.push_back(type);\n  }\n\n  {\n    FileType type;\n    type.m_type = FileType::MindMap;\n    type.m_typeName = QStringLiteral(\"MindMap\");\n    type.m_displayName = Buffer::tr(\"Mind Map\");\n\n    auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);\n    if (suffixes && !suffixes->isEmpty()) {\n      type.m_suffixes = *suffixes;\n    } else {\n      type.m_suffixes << QStringLiteral(\"emind\");\n    }\n\n    m_fileTypes.push_back(type);\n  }\n\n  {\n    FileType type;\n    type.m_type = FileType::Others;\n    type.m_typeName = QStringLiteral(\"Others\");\n    type.m_displayName = Buffer::tr(\"Others\");\n    m_fileTypes.push_back(type);\n  }\n}\n\nconst FileType &FileTypeHelper::getFileType(const QString &p_filePath) const {\n  Q_ASSERT(!p_filePath.isEmpty());\n\n  QFileInfo fi(p_filePath);\n  auto suffix = fi.suffix().toLower();\n  auto it = m_suffixTypeMap.find(suffix);\n  if (it != m_suffixTypeMap.end()) {\n    return m_fileTypes.at(it.value());\n  }\n\n  // Treat all unknown text files as plain text files.\n  if (FileUtils::isText(p_filePath)) {\n    return m_fileTypes[FileType::Text];\n  }\n\n  return m_fileTypes[FileType::Others];\n}\n\nconst FileType &FileTypeHelper::getFileTypeBySuffix(const QString &p_suffix) const {\n  auto it = m_suffixTypeMap.find(p_suffix.toLower());\n  if (it != m_suffixTypeMap.end()) {\n    return m_fileTypes.at(it.value());\n  } else {\n    return m_fileTypes[FileType::Others];\n  }\n}\n\nvoid FileTypeHelper::setupSuffixTypeMap() {\n  m_suffixTypeMap.clear();\n\n  for (int i = 0; i < m_fileTypes.size(); ++i) {\n    for (const auto &suffix : m_fileTypes[i].m_suffixes) {\n      if (m_suffixTypeMap.contains(suffix)) {\n        qWarning() << \"suffix conflicts detected\" << suffix << m_fileTypes[i].m_type;\n      }\n      m_suffixTypeMap.insert(suffix, i);\n    }\n  }\n}\n\nconst QVector<FileType> &FileTypeHelper::getAllFileTypes() const { return m_fileTypes; }\n\nconst FileType &FileTypeHelper::getFileType(int p_type) const {\n  if (p_type >= m_fileTypes.size()) {\n    p_type = FileType::Others;\n  }\n  return m_fileTypes[p_type];\n}\n\nFileTypeHelper &FileTypeHelper::getInst() {\n  static FileTypeHelper helper;\n  return helper;\n}\n\nbool FileTypeHelper::checkFileType(const QString &p_filePath, int p_type) const {\n  return getFileType(p_filePath).m_type == p_type;\n}\n\nconst FileType &FileTypeHelper::getFileTypeByName(const QString &p_typeName) const {\n  for (const auto &ft : m_fileTypes) {\n    if (ft.m_typeName == p_typeName) {\n      return ft;\n    }\n  }\n\n  Q_ASSERT(false);\n  return m_fileTypes[FileType::Others];\n}\n"
  },
  {
    "path": "src/core/buffer/filetypehelper.h",
    "content": "#ifndef FILETYPEHELPER_H\n#define FILETYPEHELPER_H\n\n#include <QMap>\n#include <QString>\n#include <QVector>\n\nnamespace vnotex {\nclass FileType {\npublic:\n  // There may be other types after Others.\n  enum Type { Markdown = 0, Text, Pdf, MindMap, Others };\n\n  QString preferredSuffix() const;\n\n  bool isMarkdown() const;\n\n  // Type.\n  int m_type = -1;\n\n  QString m_typeName;\n\n  QString m_displayName;\n\n  QStringList m_suffixes;\n\n  // Whether we can new this type of file.\n  bool m_isNewable = true;\n};\n\n// Only handle built-in editors.\nclass FileTypeHelper {\npublic:\n  const FileType &getFileType(const QString &p_filePath) const;\n\n  const FileType &getFileType(int p_type) const;\n\n  const FileType &getFileTypeByName(const QString &p_typeName) const;\n\n  const FileType &getFileTypeBySuffix(const QString &p_suffix) const;\n\n  const QVector<FileType> &getAllFileTypes() const;\n\n  bool checkFileType(const QString &p_filePath, int p_type) const;\n\n  void reload();\n\n  static FileTypeHelper &getInst();\n\n  static QString s_systemDefaultProgram;\n\nprivate:\n  FileTypeHelper();\n\n  void setupBuiltInTypes();\n\n  void setupSuffixTypeMap();\n\n  // Built-in Type could be accessed via enum Type.\n  QVector<FileType> m_fileTypes;\n\n  // suffix -> index of m_fileTypes.\n  // TODO: handle suffix conflicts.\n  QMap<QString, int> m_suffixTypeMap;\n};\n} // namespace vnotex\n\n#endif // FILETYPEHELPER_H\n"
  },
  {
    "path": "src/core/buffer/ibufferfactory.h",
    "content": "#ifndef IBUFFERFACTORY_H\n#define IBUFFERFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass Buffer;\nstruct BufferParameters;\n\n// Abstract factory to create buffer.\nclass IBufferFactory {\npublic:\n  virtual ~IBufferFactory() {}\n\n  virtual Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) = 0;\n\n  virtual bool isBufferCreatedByFactory(const Buffer *p_buffer) const = 0;\n};\n} // namespace vnotex\n\n#endif // IBUFFERFACTORY_H\n"
  },
  {
    "path": "src/core/buffer/markdownbuffer.cpp",
    "content": "#include \"markdownbuffer.h\"\n\n#include <QDir>\n\n#include <buffer/bufferprovider.h>\n#include <notebook/node.h>\n#include <utils/pathutils.h>\n#include <widgets/markdownviewwindow.h>\n\nusing namespace vnotex;\n\nMarkdownBuffer::MarkdownBuffer(const BufferParameters &p_parameters, QObject *p_parent)\n    : Buffer(p_parameters, p_parent) {\n  fetchInitialImages();\n}\n\nViewWindow *\nMarkdownBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                         QWidget *p_parent) {\n  Q_UNUSED(p_paras);\n  return new MarkdownViewWindow(p_parent);\n}\n\nQString MarkdownBuffer::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) {\n  return m_provider->insertImage(p_srcImagePath, p_imageFileName);\n}\n\nQString MarkdownBuffer::insertImage(const QImage &p_image, const QString &p_imageFileName) {\n  return m_provider->insertImage(p_image, p_imageFileName);\n}\n\nvoid MarkdownBuffer::fetchInitialImages() {\n  Q_ASSERT(m_initialImages.isEmpty());\n  // There is compilation error on Linux and macOS using TypeFlags directly.\n  int linkFlags =\n      vte::MarkdownLink::TypeFlag::LocalRelativeInternal | vte::MarkdownLink::TypeFlag::Remote;\n  m_initialImages = vte::MarkdownUtils::fetchImagesFromMarkdownText(\n      getContent(), getResourcePath(), static_cast<vte::MarkdownLink::TypeFlags>(linkFlags));\n}\n\nvoid MarkdownBuffer::addInsertedImage(const QString &p_imagePath, const QString &p_urlInLink) {\n  vte::MarkdownLink link;\n  link.m_path = p_imagePath;\n  link.m_urlInLink = p_urlInLink;\n  // There are two types: local internal and remote for image host.\n  link.m_type = PathUtils::isLocalFile(p_imagePath)\n                    ? vte::MarkdownLink::TypeFlag::LocalRelativeInternal\n                    : vte::MarkdownLink::TypeFlag::Remote;\n  m_insertedImages.append(link);\n}\n\nQHash<QString, bool> MarkdownBuffer::clearObsoleteImages() {\n  QHash<QString, bool> obsoleteImages;\n\n  Q_ASSERT(!isModified());\n  const bool discarded = state() & StateFlag::Discarded;\n  const int linkFlags =\n      vte::MarkdownLink::TypeFlag::LocalRelativeInternal | vte::MarkdownLink::TypeFlag::Remote;\n  const auto latestImages = vte::MarkdownUtils::fetchImagesFromMarkdownText(\n      !discarded ? getContent() : m_provider->read(), getResourcePath(),\n      static_cast<vte::MarkdownLink::TypeFlags>(linkFlags));\n  QSet<QString> latestImagesPath;\n  for (const auto &link : latestImages) {\n    if (link.m_type & vte::MarkdownLink::TypeFlag::Remote) {\n      latestImagesPath.insert(link.m_path);\n    } else {\n      latestImagesPath.insert(PathUtils::normalizePath(link.m_path));\n    }\n  }\n\n  for (const auto &link : m_insertedImages) {\n    if (!(link.m_type & linkFlags)) {\n      continue;\n    }\n\n    const bool isRemote = link.m_type & vte::MarkdownLink::TypeFlag::Remote;\n    const auto linkPath = isRemote ? link.m_path : PathUtils::normalizePath(link.m_path);\n    if (!latestImagesPath.contains(linkPath)) {\n      obsoleteImages.insert(link.m_path, isRemote);\n    }\n  }\n\n  m_insertedImages.clear();\n\n  for (const auto &link : m_initialImages) {\n    Q_ASSERT(link.m_type & linkFlags);\n    const bool isRemote = link.m_type & vte::MarkdownLink::TypeFlag::Remote;\n    const auto linkPath = isRemote ? link.m_path : PathUtils::normalizePath(link.m_path);\n    if (!latestImagesPath.contains(linkPath)) {\n      obsoleteImages.insert(link.m_path, isRemote);\n    }\n  }\n\n  m_initialImages = latestImages;\n\n  return obsoleteImages;\n}\n\nvoid MarkdownBuffer::removeImage(const QString &p_imagePath) {\n  qDebug() << \"remove obsolete image\" << p_imagePath;\n  m_provider->removeImage(p_imagePath);\n}\n"
  },
  {
    "path": "src/core/buffer/markdownbuffer.h",
    "content": "#ifndef MARKDOWNBUFFER_H\n#define MARKDOWNBUFFER_H\n\n#include \"buffer.h\"\n\n#include <QHash>\n#include <QVector>\n\n#include <vtextedit/markdownutils.h>\n\nnamespace vnotex {\nclass MarkdownBuffer : public Buffer {\n  Q_OBJECT\npublic:\n  MarkdownBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);\n\n  QString insertImage(const QString &p_srcImagePath,\n                      const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;\n\n  void addInsertedImage(const QString &p_imagePath, const QString &p_urlInLink);\n\n  // Clear obsolete images.\n  // Won't delete images, just return a list of obsolete images path.\n  // Will re-init m_initialImages and clear m_insertedImages.\n  // Return [ImagePath] -> IsRemote.\n  QHash<QString, bool> clearObsoleteImages();\n\nprotected:\n  ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                       QWidget *p_parent) Q_DECL_OVERRIDE;\n\nprivate:\n  void fetchInitialImages();\n\n  // Images referenced in the file before opening this buffer.\n  QVector<vte::MarkdownLink> m_initialImages;\n\n  // Images newly inserted during this buffer's lifetime.\n  QVector<vte::MarkdownLink> m_insertedImages;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNBUFFER_H\n"
  },
  {
    "path": "src/core/buffer/markdownbufferfactory.cpp",
    "content": "#include \"markdownbufferfactory.h\"\n\n#include \"markdownbuffer.h\"\n\nusing namespace vnotex;\n\nBuffer *MarkdownBufferFactory::createBuffer(const BufferParameters &p_parameters,\n                                            QObject *p_parent) {\n  return new MarkdownBuffer(p_parameters, p_parent);\n}\n\nbool MarkdownBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {\n  return dynamic_cast<const MarkdownBuffer *>(p_buffer) != nullptr;\n}\n"
  },
  {
    "path": "src/core/buffer/markdownbufferfactory.h",
    "content": "#ifndef MARKDOWNBUFFERFACTORY_H\n#define MARKDOWNBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buffer factory for Markdown file.\nclass MarkdownBufferFactory : public IBufferFactory {\npublic:\n  Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;\n\n  bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNBUFFERFACTORY_H\n"
  },
  {
    "path": "src/core/buffer/mindmapbuffer.cpp",
    "content": "#include \"mindmapbuffer.h\"\n\n#include <widgets/mindmapviewwindow.h>\n\nusing namespace vnotex;\n\nMindMapBuffer::MindMapBuffer(const BufferParameters &p_parameters, QObject *p_parent)\n    : Buffer(p_parameters, p_parent) {}\n\nViewWindow *\nMindMapBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                        QWidget *p_parent) {\n  Q_UNUSED(p_paras);\n  return new MindMapViewWindow(p_parent);\n}\n"
  },
  {
    "path": "src/core/buffer/mindmapbuffer.h",
    "content": "#ifndef MINDMAPBUFFER_H\n#define MINDMAPBUFFER_H\n\n#include \"buffer.h\"\n\nnamespace vnotex {\nclass MindMapBuffer : public Buffer {\n  Q_OBJECT\npublic:\n  MindMapBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);\n\nprotected:\n  ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                       QWidget *p_parent) Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // MINDMAPBUFFER_H\n"
  },
  {
    "path": "src/core/buffer/mindmapbufferfactory.cpp",
    "content": "#include \"mindmapbufferfactory.h\"\n\n#include \"mindmapbuffer.h\"\n\nusing namespace vnotex;\n\nBuffer *MindMapBufferFactory::createBuffer(const BufferParameters &p_parameters,\n                                           QObject *p_parent) {\n  return new MindMapBuffer(p_parameters, p_parent);\n}\n\nbool MindMapBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {\n  return dynamic_cast<const MindMapBuffer *>(p_buffer) != nullptr;\n}\n"
  },
  {
    "path": "src/core/buffer/mindmapbufferfactory.h",
    "content": "#ifndef MINDMAPBUFFERFACTORY_H\n#define MINDMAPBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buffer factory for MindMap file.\nclass MindMapBufferFactory : public IBufferFactory {\npublic:\n  Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;\n\n  bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // MINDMAPBUFFERFACTORY_H\n"
  },
  {
    "path": "src/core/buffer/nodebufferprovider.cpp",
    "content": "#include \"nodebufferprovider.h\"\n\n#include <QFileInfo>\n\n#include <core/exception.h>\n#include <core/file.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nNodeBufferProvider::NodeBufferProvider(const QSharedPointer<Node> &p_node,\n                                       const QSharedPointer<File> &p_file, QObject *p_parent)\n    : BufferProvider(p_parent), m_node(p_node), m_nodeFile(p_file) {}\n\nBuffer::ProviderType NodeBufferProvider::getType() const { return Buffer::ProviderType::Internal; }\n\nbool NodeBufferProvider::match(const Node *p_node) const { return m_node.data() == p_node; }\n\nbool NodeBufferProvider::match(const QString &p_filePath) const {\n  return PathUtils::areSamePaths(getPath(), p_filePath);\n}\n\nQString NodeBufferProvider::getName() const { return m_node->getName(); }\n\nQString NodeBufferProvider::getPath() const { return m_nodeFile->getFilePath(); }\n\nQString NodeBufferProvider::getContentPath() const { return m_nodeFile->getContentPath(); }\n\nQString NodeBufferProvider::getResourcePath() const { return m_nodeFile->getResourcePath(); }\n\nvoid NodeBufferProvider::write(const QString &p_content) {\n  m_nodeFile->write(p_content);\n  m_lastModified = getLastModifiedFromFile();\n}\n\nQString NodeBufferProvider::read() const {\n  const_cast<NodeBufferProvider *>(this)->m_lastModified = getLastModifiedFromFile();\n  return m_nodeFile->read();\n}\n\nQString NodeBufferProvider::fetchImageFolderPath() {\n  auto file = m_nodeFile->getImageInterface();\n  if (file) {\n    return file->fetchImageFolderPath();\n  } else {\n    Q_ASSERT(false);\n    return getContentPath();\n  }\n}\n\nbool NodeBufferProvider::isChildOf(const Node *p_node) const {\n  return Node::isAncestor(p_node, m_node.data());\n}\n\nQString NodeBufferProvider::getAttachmentFolder() const { return m_node->getAttachmentFolder(); }\n\nQString NodeBufferProvider::fetchAttachmentFolderPath() {\n  return m_node->fetchAttachmentFolderPath();\n}\n\nQStringList NodeBufferProvider::addAttachment(const QString &p_destFolderPath,\n                                              const QStringList &p_files) {\n  return m_node->addAttachment(p_destFolderPath, p_files);\n}\n\nQString NodeBufferProvider::newAttachmentFile(const QString &p_destFolderPath,\n                                              const QString &p_name) {\n  return m_node->newAttachmentFile(p_destFolderPath, p_name);\n}\n\nQString NodeBufferProvider::newAttachmentFolder(const QString &p_destFolderPath,\n                                                const QString &p_name) {\n  return m_node->newAttachmentFolder(p_destFolderPath, p_name);\n}\n\nQString NodeBufferProvider::renameAttachment(const QString &p_path, const QString &p_name) {\n  return m_node->renameAttachment(p_path, p_name);\n}\n\nvoid NodeBufferProvider::removeAttachment(const QStringList &p_paths) {\n  return m_node->removeAttachment(p_paths);\n}\n\nQString NodeBufferProvider::insertImage(const QString &p_srcImagePath,\n                                        const QString &p_imageFileName) {\n  auto file = m_nodeFile->getImageInterface();\n  if (file) {\n    return file->insertImage(p_srcImagePath, p_imageFileName);\n  } else {\n    return QString();\n  }\n}\n\nQString NodeBufferProvider::insertImage(const QImage &p_image, const QString &p_imageFileName) {\n  auto file = m_nodeFile->getImageInterface();\n  if (file) {\n    return file->insertImage(p_image, p_imageFileName);\n  } else {\n    return QString();\n  }\n}\n\nvoid NodeBufferProvider::removeImage(const QString &p_imagePath) {\n  auto file = m_nodeFile->getImageInterface();\n  if (file) {\n    try {\n      file->removeImage(p_imagePath);\n    } catch (Exception &e) {\n      qWarning() << \"failed to remove image\" << p_imagePath << e.what();\n    }\n  }\n}\n\nbool NodeBufferProvider::isAttachmentSupported() const { return true; }\n\nbool NodeBufferProvider::isTagSupported() const { return m_node->getNotebook()->tag() != nullptr; }\n\nNode *NodeBufferProvider::getNode() const { return m_node.data(); }\n\nbool NodeBufferProvider::isReadOnly() const { return m_node->isReadOnly(); }\n\nQSharedPointer<File> NodeBufferProvider::getFile() const { return m_nodeFile; }\n"
  },
  {
    "path": "src/core/buffer/nodebufferprovider.h",
    "content": "#ifndef NODEBUFFERPROVIDER_H\n#define NODEBUFFERPROVIDER_H\n\n#include <QSharedPointer>\n\n#include \"bufferprovider.h\"\n\nnamespace vnotex {\nclass File;\nclass IFileWithImage;\n\n// Buffer provider based on an internal node.\nclass NodeBufferProvider : public BufferProvider {\n  Q_OBJECT\npublic:\n  NodeBufferProvider(const QSharedPointer<Node> &p_node, const QSharedPointer<File> &p_file,\n                     QObject *p_parent = nullptr);\n\n  Buffer::ProviderType getType() const Q_DECL_OVERRIDE;\n\n  bool match(const Node *p_node) const Q_DECL_OVERRIDE;\n\n  bool match(const QString &p_filePath) const Q_DECL_OVERRIDE;\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getPath() const Q_DECL_OVERRIDE;\n\n  QString getContentPath() const Q_DECL_OVERRIDE;\n\n  QString getResourcePath() const Q_DECL_OVERRIDE;\n\n  void write(const QString &p_content) Q_DECL_OVERRIDE;\n\n  QString read() const Q_DECL_OVERRIDE;\n\n  QString fetchImageFolderPath() Q_DECL_OVERRIDE;\n\n  bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE;\n\n  Node *getNode() const Q_DECL_OVERRIDE;\n\n  QString getAttachmentFolder() const Q_DECL_OVERRIDE;\n\n  QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE;\n\n  QStringList addAttachment(const QString &p_destFolderPath,\n                            const QStringList &p_files) Q_DECL_OVERRIDE;\n\n  QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE;\n\n  QString newAttachmentFolder(const QString &p_destFolderPath,\n                              const QString &p_name) Q_DECL_OVERRIDE;\n\n  QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE;\n\n  void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE;\n\n  QString insertImage(const QString &p_srcImagePath,\n                      const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;\n\n  bool isAttachmentSupported() const Q_DECL_OVERRIDE;\n\n  bool isTagSupported() const Q_DECL_OVERRIDE;\n\n  bool isReadOnly() const Q_DECL_OVERRIDE;\n\n  QSharedPointer<File> getFile() const Q_DECL_OVERRIDE;\n\nprivate:\n  QSharedPointer<Node> m_node;\n\n  QSharedPointer<File> m_nodeFile;\n};\n} // namespace vnotex\n\n#endif // NODEBUFFERPROVIDER_H\n"
  },
  {
    "path": "src/core/buffer/pdfbuffer.cpp",
    "content": "#include \"pdfbuffer.h\"\n\n#include <widgets/pdfviewwindow.h>\n\nusing namespace vnotex;\n\nPdfBuffer::PdfBuffer(const BufferParameters &p_parameters, QObject *p_parent)\n    : Buffer(p_parameters, p_parent) {}\n\nViewWindow *PdfBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                                QWidget *p_parent) {\n  Q_UNUSED(p_paras);\n  return new PdfViewWindow(p_parent);\n}\n"
  },
  {
    "path": "src/core/buffer/pdfbuffer.h",
    "content": "#ifndef PDFBUFFER_H\n#define PDFBUFFER_H\n\n#include \"buffer.h\"\n\nnamespace vnotex {\nclass PdfBuffer : public Buffer {\n  Q_OBJECT\npublic:\n  PdfBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);\n\nprotected:\n  ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                       QWidget *p_parent) Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // PDFBUFFER_H\n"
  },
  {
    "path": "src/core/buffer/pdfbufferfactory.cpp",
    "content": "#include \"pdfbufferfactory.h\"\n\n#include \"pdfbuffer.h\"\n#include \"urlbasedbufferprovider.h\"\n\nusing namespace vnotex;\n\nBuffer *PdfBufferFactory::createBuffer(const BufferParameters &p_parameters, QObject *p_parent) {\n  BufferParameters paras;\n  paras.m_provider = QSharedPointer<UrlBasedBufferProvider>::create(p_parameters.m_provider);\n  return new PdfBuffer(paras, p_parent);\n}\n\nbool PdfBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {\n  return dynamic_cast<const PdfBuffer *>(p_buffer) != nullptr;\n}\n"
  },
  {
    "path": "src/core/buffer/pdfbufferfactory.h",
    "content": "#ifndef PDFBUFFERFACTORY_H\n#define PDFBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buffer factory for Pdf file.\nclass PdfBufferFactory : public IBufferFactory {\npublic:\n  Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;\n\n  bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // PDFBUFFERFACTORY_H\n"
  },
  {
    "path": "src/core/buffer/textbuffer.cpp",
    "content": "#include \"textbuffer.h\"\n\n#include <widgets/textviewwindow.h>\n\nusing namespace vnotex;\n\nTextBuffer::TextBuffer(const BufferParameters &p_parameters, QObject *p_parent)\n    : Buffer(p_parameters, p_parent) {}\n\nViewWindow *TextBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                                 QWidget *p_parent) {\n  Q_UNUSED(p_paras);\n  return new TextViewWindow(p_parent);\n}\n"
  },
  {
    "path": "src/core/buffer/textbuffer.h",
    "content": "#ifndef TEXTBUFFER_H\n#define TEXTBUFFER_H\n\n#include \"buffer.h\"\n\nnamespace vnotex {\nclass TextBuffer : public Buffer {\n  Q_OBJECT\npublic:\n  TextBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);\n\nprotected:\n  ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,\n                                       QWidget *p_parent) Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // TEXTBUFFER_H\n"
  },
  {
    "path": "src/core/buffer/textbufferfactory.cpp",
    "content": "#include \"textbufferfactory.h\"\n\n#include \"textbuffer.h\"\n\nusing namespace vnotex;\n\nBuffer *TextBufferFactory::createBuffer(const BufferParameters &p_parameters, QObject *p_parent) {\n  return new TextBuffer(p_parameters, p_parent);\n}\n\nbool TextBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {\n  return dynamic_cast<const TextBuffer *>(p_buffer) != nullptr;\n}\n"
  },
  {
    "path": "src/core/buffer/textbufferfactory.h",
    "content": "#ifndef TEXTBUFFERFACTORY_H\n#define TEXTBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buffer factory for text file.\nclass TextBufferFactory : public IBufferFactory {\npublic:\n  Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;\n\n  bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // TEXTBUFFERFACTORY_H\n"
  },
  {
    "path": "src/core/buffer/urlbasedbufferprovider.h",
    "content": "#ifndef URLBASEDBUFFERPROVIDER_H\n#define URLBASEDBUFFERPROVIDER_H\n\n#include \"bufferprovider.h\"\n\n#include <QSharedPointer>\n\nnamespace vnotex {\n// A wrapper provider to provide URL-based buffer (instead of content-based).\nclass UrlBasedBufferProvider : public BufferProvider {\n  Q_OBJECT\npublic:\n  // Will own @p_provider.\n  UrlBasedBufferProvider(const QSharedPointer<BufferProvider> &p_provider,\n                         QObject *p_parent = nullptr)\n      : BufferProvider(p_parent), m_provider(p_provider) {}\n\n  Buffer::ProviderType getType() const Q_DECL_OVERRIDE { return m_provider->getType(); }\n\n  bool match(const Node *p_node) const Q_DECL_OVERRIDE { return m_provider->match(p_node); }\n\n  bool match(const QString &p_filePath) const Q_DECL_OVERRIDE {\n    return m_provider->match(p_filePath);\n  }\n\n  QString getName() const Q_DECL_OVERRIDE { return m_provider->getName(); }\n\n  QString getPath() const Q_DECL_OVERRIDE { return m_provider->getPath(); }\n\n  QString getContentPath() const Q_DECL_OVERRIDE { return m_provider->getContentPath(); }\n\n  QString getResourcePath() const Q_DECL_OVERRIDE { return m_provider->getResourcePath(); }\n\n  void write(const QString &p_content) Q_DECL_OVERRIDE { Q_UNUSED(p_content); }\n\n  QString read() const Q_DECL_OVERRIDE {\n    const_cast<UrlBasedBufferProvider *>(this)->m_lastModified = getLastModifiedFromFile();\n    return QString();\n  }\n\n  QString fetchImageFolderPath() Q_DECL_OVERRIDE { return m_provider->fetchImageFolderPath(); }\n\n  bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE { return m_provider->isChildOf(p_node); }\n\n  Node *getNode() const Q_DECL_OVERRIDE { return m_provider->getNode(); }\n\n  QString getAttachmentFolder() const Q_DECL_OVERRIDE { return m_provider->getAttachmentFolder(); }\n\n  QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE {\n    return m_provider->fetchAttachmentFolderPath();\n  }\n\n  QStringList addAttachment(const QString &p_destFolderPath,\n                            const QStringList &p_files) Q_DECL_OVERRIDE {\n    return m_provider->addAttachment(p_destFolderPath, p_files);\n  }\n\n  QString newAttachmentFile(const QString &p_destFolderPath,\n                            const QString &p_name) Q_DECL_OVERRIDE {\n    return m_provider->newAttachmentFile(p_destFolderPath, p_name);\n  }\n\n  QString newAttachmentFolder(const QString &p_destFolderPath,\n                              const QString &p_name) Q_DECL_OVERRIDE {\n    return m_provider->newAttachmentFolder(p_destFolderPath, p_name);\n  }\n\n  QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE {\n    return m_provider->renameAttachment(p_path, p_name);\n  }\n\n  void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE {\n    m_provider->removeAttachment(p_paths);\n  }\n\n  QString insertImage(const QString &p_srcImagePath,\n                      const QString &p_imageFileName) Q_DECL_OVERRIDE {\n    return m_provider->insertImage(p_srcImagePath, p_imageFileName);\n  }\n\n  QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE {\n    return m_provider->insertImage(p_image, p_imageFileName);\n  }\n\n  void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE {\n    m_provider->removeImage(p_imagePath);\n  }\n\n  bool isAttachmentSupported() const Q_DECL_OVERRIDE { return m_provider->isAttachmentSupported(); }\n\n  bool isTagSupported() const Q_DECL_OVERRIDE { return m_provider->isTagSupported(); }\n\n  bool isReadOnly() const Q_DECL_OVERRIDE { return true; }\n\n  QSharedPointer<File> getFile() const Q_DECL_OVERRIDE { return m_provider->getFile(); }\n\nprivate:\n  QSharedPointer<BufferProvider> m_provider;\n};\n} // namespace vnotex\n\n#endif // URLBASEDBUFFERPROVIDER_H\n"
  },
  {
    "path": "src/core/buffermgr.cpp",
    "content": "#include \"buffermgr.h\"\n\n#include <QDebug>\n#include <QUrl>\n\n#include \"configmgr.h\"\n#include \"externalfile.h\"\n#include \"notebookmgr.h\"\n#include \"sessionconfig.h\"\n#include \"vnotex.h\"\n#include <buffer/buffer.h>\n#include <buffer/filebufferprovider.h>\n#include <buffer/filetypehelper.h>\n#include <buffer/markdownbufferfactory.h>\n#include <buffer/mindmapbufferfactory.h>\n#include <buffer/nodebufferprovider.h>\n#include <buffer/pdfbufferfactory.h>\n#include <buffer/textbufferfactory.h>\n#include <notebook/node.h>\n#include <utils/processutils.h>\n#include <utils/widgetutils.h>\n\n#include \"fileopenparameters.h\"\n\nusing namespace vnotex;\n\nQMap<QString, QString> BufferMgr::s_suffixToFileType;\n\nBufferMgr::BufferMgr(QObject *p_parent) : QObject(p_parent) {}\n\nBufferMgr::~BufferMgr() { Q_ASSERT(m_buffers.isEmpty()); }\n\nvoid BufferMgr::init() { initBufferServer(); }\n\nvoid BufferMgr::initBufferServer() {\n  m_bufferServer.reset(new NameBasedServer<IBufferFactory>);\n\n  const auto &helper = FileTypeHelper::getInst();\n\n  // Markdown.\n  auto markdownFactory = QSharedPointer<MarkdownBufferFactory>::create();\n  m_bufferServer->registerItem(helper.getFileType(FileType::Markdown).m_typeName, markdownFactory);\n\n  // Text.\n  auto textFactory = QSharedPointer<TextBufferFactory>::create();\n  m_bufferServer->registerItem(helper.getFileType(FileType::Text).m_typeName, textFactory);\n\n  // Pdf.\n  auto pdfFactory = QSharedPointer<PdfBufferFactory>::create();\n  m_bufferServer->registerItem(helper.getFileType(FileType::Pdf).m_typeName, pdfFactory);\n\n  // MindMap.\n  auto mindMapFactory = QSharedPointer<MindMapBufferFactory>::create();\n  m_bufferServer->registerItem(helper.getFileType(FileType::MindMap).m_typeName, mindMapFactory);\n}\n\nvoid BufferMgr::open(Node *p_node, const QSharedPointer<FileOpenParameters> &p_paras) {\n  if (!p_node) {\n    return;\n  }\n\n  if (p_node->isContainer()) {\n    return;\n  }\n\n  if (!p_node->checkExists()) {\n    auto msg = QStringLiteral(\"Failed to open node that does not exist (%1)\")\n                   .arg(p_node->fetchAbsolutePath());\n    qWarning() << msg;\n    VNoteX::getInst().showStatusMessageShort(msg);\n    return;\n  }\n\n  const auto nodePath = p_node->fetchAbsolutePath();\n\n  auto fileType = p_paras->m_fileType;\n  if (fileType.isEmpty()) {\n    // Check if we need to open it with external program by default according to the suffix.\n    fileType = findFileTypeByFile(nodePath);\n    if (openWithExternalProgram(nodePath, fileType)) {\n      return;\n    }\n  }\n\n  auto buffer = findBuffer(p_node);\n  if (!buffer || !isSameTypeBuffer(buffer, fileType)) {\n    auto nodeFile = p_node->getContentFile();\n    Q_ASSERT(nodeFile);\n    if (fileType.isEmpty()) {\n      fileType = nodeFile->getContentType().m_typeName;\n    } else if (fileType != nodeFile->getContentType().m_typeName) {\n      nodeFile->setContentType(FileTypeHelper::getInst().getFileTypeByName(fileType).m_type);\n    }\n\n    auto factory = m_bufferServer->getItem(fileType);\n    if (!factory) {\n      // No factory to open this file type.\n      qInfo() << \"file will be opened by default program\" << nodePath;\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(nodePath));\n      return;\n    }\n\n    BufferParameters paras;\n    paras.m_provider.reset(new NodeBufferProvider(p_node->sharedFromThis(), nodeFile));\n    buffer = factory->createBuffer(paras, this);\n    addBuffer(buffer);\n  }\n\n  Q_ASSERT(buffer);\n  emit bufferRequested(buffer, p_paras);\n}\n\nvoid BufferMgr::open(const QString &p_filePath, const QSharedPointer<FileOpenParameters> &p_paras) {\n  if (p_filePath.isEmpty()) {\n    return;\n  }\n\n  // Check if it is requested to open with external program.\n  if (openWithExternalProgram(p_filePath, p_paras->m_fileType)) {\n    return;\n  }\n\n  QFileInfo finfo(p_filePath);\n  if (!finfo.exists()) {\n    auto msg = QStringLiteral(\"Failed to open file that does not exist (%1)\").arg(p_filePath);\n    qWarning() << msg;\n    VNoteX::getInst().showStatusMessageShort(msg);\n    WidgetUtils::openUrlByDesktop(QUrl::fromUserInput(p_filePath));\n    return;\n  }\n\n  // Check if it is an internal node or not.\n  auto node = VNoteX::getInst().getNotebookMgr().loadNodeByPath(p_filePath);\n  if (node) {\n    if (node->hasContent()) {\n      open(node.data(), p_paras);\n      return;\n    } else {\n      // Folder node. Currently just locate to it.\n      emit VNoteX::getInst().locateNodeRequested(node.data());\n      return;\n    }\n  }\n\n  if (finfo.isDir()) {\n    WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(p_filePath));\n    return;\n  }\n\n  auto fileType = p_paras->m_fileType;\n  if (fileType.isEmpty()) {\n    // Check if we need to open it with external program by default according to the suffix.\n    fileType = findFileTypeByFile(p_filePath);\n    if (openWithExternalProgram(p_filePath, fileType)) {\n      return;\n    }\n  }\n\n  auto buffer = findBuffer(p_filePath);\n  if (!buffer || !isSameTypeBuffer(buffer, fileType)) {\n    // Open it as external file.\n    auto externalFile = QSharedPointer<ExternalFile>::create(p_filePath);\n    if (fileType.isEmpty()) {\n      fileType = externalFile->getContentType().m_typeName;\n    } else if (fileType != externalFile->getContentType().m_typeName) {\n      externalFile->setContentType(FileTypeHelper::getInst().getFileTypeByName(fileType).m_type);\n    }\n\n    auto factory = m_bufferServer->getItem(fileType);\n    if (!factory) {\n      // No factory to open this file type.\n      qInfo() << \"file will be opened by default program\" << p_filePath;\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(p_filePath));\n      return;\n    }\n\n    BufferParameters paras;\n    paras.m_provider.reset(\n        new FileBufferProvider(externalFile, p_paras->m_nodeAttachedTo, p_paras->m_readOnly));\n    buffer = factory->createBuffer(paras, this);\n    addBuffer(buffer);\n  }\n\n  Q_ASSERT(buffer);\n  emit bufferRequested(buffer, p_paras);\n}\n\nBuffer *BufferMgr::findBuffer(const Node *p_node) const {\n  auto it = std::find_if(m_buffers.constBegin(), m_buffers.constEnd(),\n                         [p_node](const Buffer *p_buffer) { return p_buffer->match(p_node); });\n  if (it != m_buffers.constEnd()) {\n    return *it;\n  }\n\n  return nullptr;\n}\n\nBuffer *BufferMgr::findBuffer(const QString &p_filePath) const {\n  auto it =\n      std::find_if(m_buffers.constBegin(), m_buffers.constEnd(),\n                   [p_filePath](const Buffer *p_buffer) { return p_buffer->match(p_filePath); });\n  if (it != m_buffers.constEnd()) {\n    return *it;\n  }\n\n  return nullptr;\n}\n\nvoid BufferMgr::addBuffer(Buffer *p_buffer) {\n  m_buffers.push_back(p_buffer);\n  connect(p_buffer, &Buffer::attachedViewWindowEmpty, this, [this, p_buffer]() {\n    qDebug() << \"delete buffer without attached view window\" << p_buffer->getName();\n    m_buffers.removeAll(p_buffer);\n    p_buffer->close();\n    p_buffer->deleteLater();\n  });\n}\n\nbool BufferMgr::openWithExternalProgram(const QString &p_filePath, const QString &p_name) const {\n  if (p_name.isEmpty()) {\n    return false;\n  }\n\n  if (p_name == FileTypeHelper::s_systemDefaultProgram) {\n    // Open it by system default program.\n    qInfo() << \"file will be opened by default program\" << p_filePath;\n    WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(p_filePath));\n    return true;\n  }\n\n  if (auto pro = ConfigMgr::getInst().getSessionConfig().findExternalProgram(p_name)) {\n    const auto command = pro->fetchCommand(p_filePath);\n    qDebug() << \"external program\" << command;\n    if (!command.isEmpty()) {\n      ProcessUtils::startDetached(command);\n    }\n    return true;\n  }\n\n  return false;\n}\n\nbool BufferMgr::isSameTypeBuffer(const Buffer *p_buffer, const QString &p_typeName) const {\n  if (p_typeName.isEmpty()) {\n    return true;\n  }\n\n  auto factory = m_bufferServer->getItem(p_typeName);\n  Q_ASSERT(factory);\n  if (factory) {\n    return factory->isBufferCreatedByFactory(p_buffer);\n  }\n\n  return true;\n}\n\nvoid BufferMgr::updateSuffixToFileType(\n    const QVector<CoreConfig::FileTypeSuffix> &p_fileTypeSuffixes) {\n  s_suffixToFileType.clear();\n\n  for (const auto &fts : p_fileTypeSuffixes) {\n    for (const auto &suf : fts.m_suffixes) {\n      auto it = s_suffixToFileType.find(suf);\n      if (it != s_suffixToFileType.end()) {\n        qWarning() << \"suffix conflicts for file types\" << fts.m_name << it.value();\n        it.value() = fts.m_name;\n      } else {\n        s_suffixToFileType.insert(suf, fts.m_name);\n      }\n    }\n  }\n}\n\nQString BufferMgr::findFileTypeByFile(const QString &p_filePath) {\n  QFileInfo fi(p_filePath);\n  auto suffix = fi.suffix().toLower();\n  auto it = s_suffixToFileType.find(suffix);\n  if (it != s_suffixToFileType.end()) {\n    return it.value();\n  } else {\n    return QString();\n  }\n}\n"
  },
  {
    "path": "src/core/buffermgr.h",
    "content": "#ifndef BUFFERMGR_H\n#define BUFFERMGR_H\n\n#include <QMap>\n#include <QObject>\n#include <QScopedPointer>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"coreconfig.h\"\n#include \"namebasedserver.h\"\n\nnamespace vnotex {\nclass IBufferFactory;\nclass Node;\nclass Buffer;\nstruct FileOpenParameters;\n\nclass BufferMgr : public QObject {\n  Q_OBJECT\npublic:\n  explicit BufferMgr(QObject *p_parent = nullptr);\n\n  ~BufferMgr();\n\n  void init();\n\npublic slots:\n  void open(Node *p_node, const QSharedPointer<FileOpenParameters> &p_paras);\n\n  void open(const QString &p_filePath, const QSharedPointer<FileOpenParameters> &p_paras);\n\n  static void updateSuffixToFileType(const QVector<CoreConfig::FileTypeSuffix> &p_fileTypeSuffixes);\n\nsignals:\n  void bufferRequested(Buffer *p_buffer, const QSharedPointer<FileOpenParameters> &p_paras);\n\nprivate:\n  void initBufferServer();\n\n  Buffer *findBuffer(const Node *p_node) const;\n\n  Buffer *findBuffer(const QString &p_filePath) const;\n\n  void addBuffer(Buffer *p_buffer);\n\n  bool openWithExternalProgram(const QString &p_filePath, const QString &p_name) const;\n\n  bool isSameTypeBuffer(const Buffer *p_buffer, const QString &p_typeName) const;\n\n  static QString findFileTypeByFile(const QString &p_filePath);\n\n  QSharedPointer<NameBasedServer<IBufferFactory>> m_bufferServer;\n\n  // Managed by QObject.\n  QVector<Buffer *> m_buffers;\n\n  // Mapping from suffix to file type or external program name.\n  static QMap<QString, QString> s_suffixToFileType;\n};\n} // namespace vnotex\n\n#endif // BUFFERMGR_H\n"
  },
  {
    "path": "src/core/clipboarddata.cpp",
    "content": "#include \"clipboarddata.h\"\n\n#include <QJsonArray>\n#include <QJsonDocument>\n\n#include \"exception.h\"\n\nusing namespace vnotex;\n\nconst QString NodeClipboardDataItem::c_notebookId = \"notebook_id\";\n\nconst QString NodeClipboardDataItem::c_nodePath = \"node_path\";\n\nNodeClipboardDataItem::NodeClipboardDataItem() {}\n\nNodeClipboardDataItem::NodeClipboardDataItem(ID p_notebookId, const QString &p_nodePath)\n    : m_notebookId(p_notebookId), m_nodeRelativePath(p_nodePath) {}\n\nQJsonObject NodeClipboardDataItem::toJson() const {\n  QJsonObject jobj;\n  jobj[c_notebookId] = QString::number(m_notebookId);\n  jobj[c_nodePath] = m_nodeRelativePath;\n  return jobj;\n}\n\nvoid NodeClipboardDataItem::fromJson(const QJsonObject &p_jobj) {\n  Q_ASSERT(p_jobj.contains(c_notebookId) && p_jobj.contains(c_nodePath));\n  auto idRet = stringToID(p_jobj[c_notebookId].toString());\n  Q_ASSERT(idRet.first);\n  m_notebookId = idRet.second;\n  m_nodeRelativePath = p_jobj[c_nodePath].toString();\n}\n\nconst QString ClipboardData::c_instanceId = \"instance_id\";\n\nconst QString ClipboardData::c_action = \"action\";\n\nconst QString ClipboardData::c_data = \"data\";\n\nClipboardData::ClipboardData() {}\n\nClipboardData::ClipboardData(ID p_instanceId, Action p_action)\n    : m_instanceId(p_instanceId), m_action(p_action) {}\n\nvoid ClipboardData::fromJson(const QJsonObject &p_jobj) {\n  clear();\n\n  if (!p_jobj.contains(c_instanceId) || !p_jobj.contains(c_action) || !p_jobj.contains(c_data)) {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"fail to parse ClipboardData from json (%1)\").arg(p_jobj.keys().join(',')));\n    return;\n  }\n\n  auto idRet = stringToID(p_jobj[c_instanceId].toString());\n  if (!idRet.first) {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"fail to parse ClipboardData from json (%1)\").arg(p_jobj.keys().join(',')));\n    return;\n  }\n  m_instanceId = idRet.second;\n\n  int act = p_jobj[c_action].toInt(Action::Invalid);\n  m_action = intToAction(act);\n  if (m_action == Action::Invalid) {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"fail to parse ClipboardData from json (%1)\").arg(p_jobj.keys().join(',')));\n    return;\n  }\n\n  const auto itemArr = p_jobj[c_data].toArray();\n  for (int i = 0; i < itemArr.size(); ++i) {\n    auto dataItem = createClipboardDataItem(m_action);\n    dataItem->fromJson(itemArr[i].toObject());\n    m_data.push_back(dataItem);\n  }\n}\n\nQJsonObject ClipboardData::toJson() const {\n  QJsonObject jobj;\n  jobj[c_instanceId] = QString::number(m_instanceId);\n  jobj[c_action] = static_cast<int>(m_action);\n\n  QJsonArray data;\n  for (const auto &item : m_data) {\n    data.append(item->toJson());\n  }\n  jobj[c_data] = data;\n\n  return jobj;\n}\n\nClipboardData::Action ClipboardData::intToAction(int p_act) const {\n  Action act = Action::Invalid;\n  if (p_act >= Action::CopyNode && p_act < Action::Invalid) {\n    act = static_cast<Action>(p_act);\n  }\n\n  return act;\n}\n\nvoid ClipboardData::clear() {\n  m_instanceId = 0;\n  m_action = Action::Invalid;\n  m_data.clear();\n}\n\nQSharedPointer<ClipboardDataItem> ClipboardData::createClipboardDataItem(Action p_act) {\n  switch (p_act) {\n  case Action::CopyNode:\n  case Action::MoveNode:\n    return QSharedPointer<NodeClipboardDataItem>::create();\n\n  case Action::Invalid:\n    Q_ASSERT(false);\n    return nullptr;\n  }\n\n  return nullptr;\n}\n\nvoid ClipboardData::addItem(const QSharedPointer<ClipboardDataItem> &p_item) {\n  Q_ASSERT(p_item);\n  m_data.push_back(p_item);\n}\n\nQString ClipboardData::toJsonText() const {\n  auto data = QJsonDocument(toJson()).toJson();\n  return QString::fromUtf8(data);\n}\n\nQSharedPointer<ClipboardData> ClipboardData::fromJsonText(const QString &p_json) {\n  if (p_json.isEmpty()) {\n    return nullptr;\n  }\n\n  auto data = QSharedPointer<ClipboardData>::create();\n  auto jobj = QJsonDocument::fromJson(p_json.toUtf8()).object();\n  if (jobj.isEmpty()) {\n    return nullptr;\n  }\n\n  try {\n    data->fromJson(jobj);\n  } catch (Exception &p_e) {\n    Q_UNUSED(p_e);\n    return nullptr;\n  }\n\n  return data;\n}\n\nconst QVector<QSharedPointer<ClipboardDataItem>> &ClipboardData::getData() const { return m_data; }\n\nID ClipboardData::getInstanceId() const { return m_instanceId; }\n\nClipboardData::Action ClipboardData::getAction() const { return m_action; }\n"
  },
  {
    "path": "src/core/clipboarddata.h",
    "content": "#ifndef CLIPBOARDDATA_H\n#define CLIPBOARDDATA_H\n\n#include <QJsonObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"global.h\"\n\nnamespace vnotex {\nclass ClipboardDataItem {\npublic:\n  virtual ~ClipboardDataItem() {}\n\n  virtual QJsonObject toJson() const = 0;\n\n  virtual void fromJson(const QJsonObject &p_jobj) = 0;\n};\n\nclass NodeClipboardDataItem : public ClipboardDataItem {\npublic:\n  NodeClipboardDataItem();\n\n  NodeClipboardDataItem(ID p_notebookId, const QString &p_nodePath);\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  void fromJson(const QJsonObject &p_jobj) Q_DECL_OVERRIDE;\n\n  ID m_notebookId;\n  QString m_nodeRelativePath;\n\nprivate:\n  static const QString c_notebookId;\n  static const QString c_nodePath;\n};\n\nclass ClipboardData {\npublic:\n  enum Action { CopyNode, MoveNode, Invalid };\n\n  ClipboardData();\n\n  ClipboardData(ID p_instanceId, Action p_action);\n\n  ID getInstanceId() const;\n\n  ClipboardData::Action getAction() const;\n\n  const QVector<QSharedPointer<ClipboardDataItem>> &getData() const;\n\n  void addItem(const QSharedPointer<ClipboardDataItem> &p_item);\n\n  QString toJsonText() const;\n\n  static QSharedPointer<ClipboardData> fromJsonText(const QString &p_json);\n\nprivate:\n  void fromJson(const QJsonObject &p_jobj);\n\n  QJsonObject toJson() const;\n\n  ClipboardData::Action intToAction(int p_act) const;\n\n  void clear();\n\n  static QSharedPointer<ClipboardDataItem> createClipboardDataItem(Action p_act);\n\n  ID m_instanceId = 0;\n  Action m_action = Action::Invalid;\n  QVector<QSharedPointer<ClipboardDataItem>> m_data;\n\n  static const QString c_instanceId;\n  static const QString c_action;\n  static const QString c_data;\n};\n} // namespace vnotex\n\n#endif // CLIPBOARDDATA_H\n"
  },
  {
    "path": "src/core/configmgr.cpp",
    "content": "#include \"configmgr.h\"\n\n#include <QCoreApplication>\n#include <QDebug>\n#include <QDir>\n#include <QFileInfo>\n#include <QJsonDocument>\n#include <QPixmap>\n#include <QResource>\n#include <QScopeGuard>\n#include <QScopedPointer>\n#include <QSplashScreen>\n#include <QStandardPaths>\n#include <QTemporaryDir>\n\n#include \"exception.h\"\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n\n#include \"coreconfig.h\"\n#include \"mainconfig.h\"\n#include \"sessionconfig.h\"\n\nusing namespace vnotex;\n\n#ifndef QT_NO_DEBUG\n// #define VX_DEBUG_WEB\n#endif\n\nconst QString ConfigMgr::c_orgName = \"VNote\";\n\nconst QString ConfigMgr::c_appName = \"VNote\";\n\nconst QString ConfigMgr::c_configFileName = \"vnotex.json\";\n\nconst QString ConfigMgr::c_sessionFileName = \"session.json\";\n\nconst QString ConfigMgr::c_userFilesFolder = \"user_files\";\n\nconst QString ConfigMgr::c_appFilesFolder = \"vnotex_files\";\n\nconst QJsonObject &ConfigMgr::Settings::getJson() const { return m_jobj; }\n\nQSharedPointer<ConfigMgr::Settings> ConfigMgr::Settings::fromFile(const QString &p_jsonFilePath) {\n  if (!QFileInfo::exists(p_jsonFilePath)) {\n    qWarning() << \"return empty Settings from non-exist config file\" << p_jsonFilePath;\n    return QSharedPointer<Settings>::create();\n  }\n\n  auto bytes = FileUtils::readFile(p_jsonFilePath);\n  return QSharedPointer<Settings>::create(QJsonDocument::fromJson(bytes).object());\n}\n\nvoid ConfigMgr::Settings::writeToFile(const QString &p_jsonFilePath) const {\n  FileUtils::writeFile(p_jsonFilePath, QJsonDocument(this->m_jobj).toJson());\n}\n\nConfigMgr::ConfigMgr(bool p_isUnitTest, QObject *p_parent)\n    : QObject(p_parent), m_config(new MainConfig(this)), m_sessionConfig(new SessionConfig(this)) {\n  if (p_isUnitTest) {\n    m_dirForUnitTest.reset(new QTemporaryDir());\n    if (!m_dirForUnitTest->isValid()) {\n      qWarning() << \"failed to init ConfigMgr for UnitTest\";\n      return;\n    }\n\n    QDir dir(m_dirForUnitTest->path());\n    dir.mkdir(c_appFilesFolder);\n    dir.mkdir(c_userFilesFolder);\n\n    m_appConfigFolderPath = m_dirForUnitTest->filePath(c_appFilesFolder);\n    m_userConfigFolderPath = m_dirForUnitTest->filePath(c_userFilesFolder);\n    return;\n  }\n\n  locateConfigFolder();\n\n  bool needUpdate = checkAppConfig();\n  if (needUpdate) {\n    checkUserConfig();\n  }\n\n  m_config->init();\n  m_sessionConfig->init();\n}\n\nConfigMgr::~ConfigMgr() {}\n\nConfigMgr &ConfigMgr::getInst(bool p_isUnitTest) {\n  static ConfigMgr inst(p_isUnitTest);\n  return inst;\n}\n\nvoid ConfigMgr::initForUnitTest() { getInst(true); }\n\nvoid ConfigMgr::locateConfigFolder() {\n  const auto appDirPath = getApplicationDirPath();\n  qInfo() << \"app folder\" << appDirPath;\n  // Check app config.\n  {\n    QString folderPath(appDirPath + '/' + c_appFilesFolder);\n    if (QDir(folderPath).exists()) {\n      // Config folder in app/.\n      m_appConfigFolderPath = PathUtils::cleanPath(folderPath);\n    } else {\n      m_appConfigFolderPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);\n    }\n  }\n\n  // Check user config.\n  {\n    QString folderPath(appDirPath + '/' + c_userFilesFolder);\n    if (QDir(folderPath).exists()) {\n      // Config folder in app/.\n      m_userConfigFolderPath = PathUtils::cleanPath(folderPath);\n    } else {\n      m_userConfigFolderPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);\n\n      // Make sure it exists.\n      QDir dir(m_userConfigFolderPath);\n      dir.mkpath(m_userConfigFolderPath);\n    }\n  }\n\n  Q_ASSERT(m_appConfigFolderPath != m_userConfigFolderPath);\n  qInfo() << \"app config folder\" << m_appConfigFolderPath;\n  qInfo() << \"user config folder\" << m_userConfigFolderPath;\n}\n\nbool ConfigMgr::checkAppConfig() {\n  bool needUpdate = false;\n  QDir appConfigDir(m_appConfigFolderPath);\n  if (!appConfigDir.exists()) {\n    needUpdate = true;\n    appConfigDir.mkpath(m_appConfigFolderPath);\n  } else {\n    if (!appConfigDir.exists(c_configFileName)) {\n      needUpdate = true;\n    } else {\n      // Check version of config file.\n      auto defaultSettings = getSettings(Source::Default);\n      auto appSettings = getSettings(Source::App);\n      auto defaultVersion = MainConfig::getVersion(defaultSettings->getJson());\n      auto appVersion = MainConfig::getVersion(appSettings->getJson());\n      if (defaultVersion != appVersion) {\n        qInfo() << \"new version\" << appVersion << defaultVersion;\n        needUpdate = true;\n      }\n    }\n\n    if (needUpdate) {\n      FileUtils::removeDir(m_appConfigFolderPath);\n      // Wait for the OS delete the folder.\n      Utils::sleepWait(1000);\n      appConfigDir.mkpath(m_appConfigFolderPath);\n    }\n  }\n\n  const auto mainConfigFilePath = appConfigDir.filePath(c_configFileName);\n\n#ifndef VX_DEBUG_WEB\n  if (!needUpdate) {\n    return false;\n  }\n#endif\n\n  qInfo() << \"update app config files in\" << m_appConfigFolderPath;\n\n  Q_ASSERT(appConfigDir.exists());\n\n  QPixmap pixmap(\":/vnotex/data/core/logo/vnote.png\");\n  QScopedPointer<QSplashScreen> splash(new QSplashScreen(pixmap));\n  splash->show();\n\n  // Load extra data.\n  splash->showMessage(\"Loading extra resource data\");\n  const QString extraRcc(\"app:vnote_extra.rcc\");\n  bool ret = QResource::registerResource(extraRcc);\n  if (!ret) {\n    Exception::throwOne(Exception::Type::FailToReadFile,\n                        QStringLiteral(\"failed to register resource file %1\").arg(extraRcc));\n  }\n  auto cleanup = qScopeGuard([extraRcc]() { QResource::unregisterResource(extraRcc); });\n\n  const QString extraDataRoot(QStringLiteral(\":/vnotex/data/extra\"));\n\n#ifdef VX_DEBUG_WEB\n  if (!needUpdate) {\n    // Always update main config file and web folder.\n    qDebug() << \"forced to update main config file and web folder for debugging\";\n    splash->showMessage(\"update main config file and web folder for debugging\");\n\n    // Cancel the read-only permission of the main config file.\n    QFile::setPermissions(mainConfigFilePath, QFile::WriteUser);\n    FileUtils::removeFile(mainConfigFilePath);\n    FileUtils::removeDir(appConfigDir.filePath(QStringLiteral(\"web\")));\n\n    // Wait for the OS delete the folder.\n    Utils::sleepWait(1000);\n\n    FileUtils::copyFile(getConfigFilePath(Source::Default), mainConfigFilePath);\n    FileUtils::copyDir(extraDataRoot + QStringLiteral(\"/web\"),\n                       appConfigDir.filePath(QStringLiteral(\"web\")));\n    return false;\n  }\n#else\n  Q_ASSERT(needUpdate);\n#endif\n\n  // Copy themes.\n  qApp->processEvents();\n  splash->showMessage(\"Copying themes\");\n  FileUtils::copyDir(extraDataRoot + QStringLiteral(\"/themes\"),\n                     appConfigDir.filePath(QStringLiteral(\"themes\")));\n\n  // Copy tasks.\n  qApp->processEvents();\n  splash->showMessage(\"Copying tasks\");\n  FileUtils::copyDir(extraDataRoot + QStringLiteral(\"/tasks\"),\n                     appConfigDir.filePath(QStringLiteral(\"tasks\")));\n\n  // Copy docs.\n  qApp->processEvents();\n  splash->showMessage(\"Copying docs\");\n  FileUtils::copyDir(extraDataRoot + QStringLiteral(\"/docs\"),\n                     appConfigDir.filePath(QStringLiteral(\"docs\")));\n\n  // Copy syntax-highlighting.\n  qApp->processEvents();\n  splash->showMessage(\"Copying syntax-highlighting\");\n  FileUtils::copyDir(extraDataRoot + QStringLiteral(\"/syntax-highlighting\"),\n                     appConfigDir.filePath(QStringLiteral(\"syntax-highlighting\")));\n\n  // Copy web.\n  qApp->processEvents();\n  splash->showMessage(\"Copying web\");\n  FileUtils::copyDir(extraDataRoot + QStringLiteral(\"/web\"),\n                     appConfigDir.filePath(QStringLiteral(\"web\")));\n\n  // Copy dicts.\n  qApp->processEvents();\n  splash->showMessage(\"Copying dicts\");\n  FileUtils::copyDir(extraDataRoot + QStringLiteral(\"/dicts\"),\n                     appConfigDir.filePath(QStringLiteral(\"dicts\")));\n\n  // Main config file.\n  FileUtils::copyFile(getConfigFilePath(Source::Default), appConfigDir.filePath(c_configFileName));\n\n  return needUpdate;\n}\n\nvoid ConfigMgr::checkUserConfig() {\n  // Mainly check if the user config and session config is read-only.\n  const auto userFile = getConfigFilePath(Source::User);\n  if (QFileInfo::exists(userFile)) {\n    if (!(QFile::permissions(userFile) & QFile::WriteUser)) {\n      qDebug() << \"make user config file writable\" << userFile;\n      QFile::setPermissions(userFile, QFile::WriteUser);\n    }\n  }\n\n  const auto sessionFile = getConfigFilePath(Source::Session);\n  if (QFileInfo::exists(sessionFile)) {\n    if (!(QFile::permissions(sessionFile) & QFile::WriteUser)) {\n      qDebug() << \"make session config file writable\" << sessionFile;\n      QFile::setPermissions(sessionFile, QFile::WriteUser);\n    }\n  }\n}\n\nQString ConfigMgr::getConfigFilePath(Source p_src) const {\n  QString configPath;\n  switch (p_src) {\n  case Source::Default:\n    configPath = getDefaultConfigFilePath();\n    break;\n\n  case Source::App:\n    configPath = m_appConfigFolderPath + QLatin1Char('/') + c_configFileName;\n    break;\n\n  case Source::User: {\n    configPath = m_userConfigFolderPath + QLatin1Char('/') + c_configFileName;\n    break;\n  }\n\n  case Source::Session: {\n    configPath = m_userConfigFolderPath + QLatin1Char('/') + c_sessionFileName;\n    break;\n  }\n\n  default:\n    Q_ASSERT(false);\n  }\n\n  return configPath;\n}\n\nQString ConfigMgr::getDefaultConfigFilePath() {\n  return QStringLiteral(\":/vnotex/data/core/\") + c_configFileName;\n}\n\nQSharedPointer<ConfigMgr::Settings> ConfigMgr::getSettings(Source p_src) const {\n  return ConfigMgr::Settings::fromFile(getConfigFilePath(p_src));\n}\n\nvoid ConfigMgr::writeUserSettings(const QJsonObject &p_jobj) {\n  Settings settings(p_jobj);\n  settings.writeToFile(getConfigFilePath(Source::User));\n}\n\nvoid ConfigMgr::writeSessionSettings(const QJsonObject &p_jobj) {\n  Settings settings(p_jobj);\n  settings.writeToFile(getConfigFilePath(Source::Session));\n}\n\nMainConfig &ConfigMgr::getConfig() { return *m_config; }\n\nSessionConfig &ConfigMgr::getSessionConfig() { return *m_sessionConfig; }\n\nCoreConfig &ConfigMgr::getCoreConfig() { return m_config->getCoreConfig(); }\n\nEditorConfig &ConfigMgr::getEditorConfig() { return m_config->getEditorConfig(); }\n\nWidgetConfig &ConfigMgr::getWidgetConfig() { return m_config->getWidgetConfig(); }\n\nQString ConfigMgr::getAppFolder() const { return m_appConfigFolderPath; }\n\nQString ConfigMgr::getUserFolder() const { return m_userConfigFolderPath; }\n\nQString ConfigMgr::getAppThemeFolder() const {\n  return PathUtils::concatenateFilePath(m_appConfigFolderPath, QStringLiteral(\"themes\"));\n}\n\nQString ConfigMgr::getUserThemeFolder() const {\n  auto folderPath =\n      PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"themes\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getAppTaskFolder() const {\n  return PathUtils::concatenateFilePath(m_appConfigFolderPath, QStringLiteral(\"tasks\"));\n}\n\nQString ConfigMgr::getUserTaskFolder() const {\n  auto folderPath = PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"tasks\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getAppWebStylesFolder() const {\n  return PathUtils::concatenateFilePath(m_appConfigFolderPath, QStringLiteral(\"web-styles\"));\n}\n\nQString ConfigMgr::getUserWebStylesFolder() const {\n  auto folderPath =\n      PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"web-styles\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getAppDocsFolder() const {\n  return PathUtils::concatenateFilePath(m_appConfigFolderPath, QStringLiteral(\"docs\"));\n}\n\nQString ConfigMgr::getUserDocsFolder() const {\n  auto folderPath = PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"docs\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getAppSyntaxHighlightingFolder() const {\n  return PathUtils::concatenateFilePath(m_appConfigFolderPath,\n                                        QStringLiteral(\"syntax-highlighting\"));\n}\n\nQString ConfigMgr::getUserSyntaxHighlightingFolder() const {\n  auto folderPath =\n      PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"syntax-highlighting\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getAppDictsFolder() const {\n  return PathUtils::concatenateFilePath(m_appConfigFolderPath, QStringLiteral(\"dicts\"));\n}\n\nQString ConfigMgr::getUserDictsFolder() const {\n  auto folderPath = PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"dicts\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getUserTemplateFolder() const {\n  auto folderPath =\n      PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"templates\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getUserSnippetFolder() const {\n  auto folderPath =\n      PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"snippets\"));\n  QDir().mkpath(folderPath);\n  return folderPath;\n}\n\nQString ConfigMgr::getUserMarkdownUserStyleFile() const {\n  auto folderPath =\n      PathUtils::concatenateFilePath(m_userConfigFolderPath, QStringLiteral(\"web/css\"));\n  auto filePath = PathUtils::concatenateFilePath(folderPath, QStringLiteral(\"user.css\"));\n  if (!QFileInfo::exists(filePath)) {\n    QDir().mkpath(folderPath);\n    FileUtils::writeFile(filePath, QByteArray());\n  }\n  return filePath;\n}\n\nQString ConfigMgr::getUserOrAppFile(const QString &p_filePath) const {\n  QFileInfo fi(p_filePath);\n  if (fi.isAbsolute()) {\n    return p_filePath;\n  }\n\n  // Check user folder first.\n  QDir userConfigDir(m_userConfigFolderPath);\n  if (userConfigDir.exists(p_filePath)) {\n    return userConfigDir.absoluteFilePath(p_filePath);\n  }\n\n  // App folder.\n  QDir appConfigDir(m_appConfigFolderPath);\n  return appConfigDir.absoluteFilePath(p_filePath);\n}\n\nQString ConfigMgr::locateSessionConfigFilePathAtBootstrap() {\n  // QApplication is not init yet, so org and app name are empty here.\n  auto folderPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);\n  folderPath = PathUtils::concatenateFilePath(folderPath, c_orgName + \"/\" + c_appName);\n  QDir dir(folderPath);\n  if (dir.exists(c_sessionFileName)) {\n    qInfo() << \"locateSessionConfigFilePathAtBootstrap\" << folderPath;\n    return dir.filePath(c_sessionFileName);\n  }\n\n  return QString();\n}\n\nQString ConfigMgr::getLogFile() const {\n  return PathUtils::concatenateFilePath(ConfigMgr::getInst().getUserFolder(), \"vnotex.log\");\n}\n\nQString ConfigMgr::getApplicationFilePath() {\n#if defined(Q_OS_LINUX)\n  // We could get the APPIMAGE env variable from the AppRun script.\n  auto appImageVar = QString::fromLocal8Bit(qgetenv(\"APPIMAGE\"));\n  qInfo() << \"APPIMAGE\" << appImageVar;\n  if (!appImageVar.isEmpty()) {\n    return appImageVar;\n  }\n#elif defined(Q_OS_MACOS)\n  auto exePath = QCoreApplication::applicationFilePath();\n  const QString exeName = c_appName.toLower() + \".app\";\n  int idx = exePath.indexOf(exeName + QStringLiteral(\"/Contents/MacOS/\"));\n  if (idx != -1) {\n    return exePath.left(idx + exeName.size());\n  }\n#endif\n\n  return QCoreApplication::applicationFilePath();\n}\n\nQString ConfigMgr::getApplicationDirPath() {\n  return PathUtils::parentDirPath(getApplicationFilePath());\n}\n\nQString ConfigMgr::getDocumentOrHomePath() {\n  static QString docHomePath;\n  if (docHomePath.isEmpty()) {\n    QStringList folders = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);\n    if (folders.isEmpty()) {\n      docHomePath = QDir::homePath();\n    } else {\n      docHomePath = folders[0];\n    }\n  }\n\n  return docHomePath;\n}\n\nQString ConfigMgr::getApplicationVersion() {\n  static QString appVersion;\n\n  if (appVersion.isEmpty()) {\n    auto defaultSettings = ConfigMgr::Settings::fromFile(getDefaultConfigFilePath());\n    const auto &defaultObj = defaultSettings->getJson();\n\n    auto metaDataObj = defaultObj.value(QStringLiteral(\"metadata\")).toObject();\n    appVersion = metaDataObj.value(QStringLiteral(\"version\")).toString();\n  }\n\n  return appVersion;\n}\n\nvoid ConfigMgr::initAppPrefixPath() {\n  // Support QFile(\"app:abc.txt\").\n  QStringList potential_dirs;\n  auto app_dir_path = QCoreApplication::applicationDirPath();\n  qInfo() << \"app prefix path: \" << app_dir_path;\n  potential_dirs << app_dir_path;\n\n#if defined(Q_OS_LINUX)\n  QDir localBinDir(app_dir_path);\n  if (localBinDir.exists(\"../local/bin/vnote\")) {\n    auto app_dir_path2 = localBinDir.cleanPath(localBinDir.filePath(\"../local/share\"));\n    qInfo() << \"app prefix path: \" << app_dir_path2;\n    potential_dirs << app_dir_path2;\n  }\n  if (localBinDir.exists(\"../share\")) {\n    auto app_dir_path3 = localBinDir.cleanPath(localBinDir.filePath(\"../share\"));\n    qInfo() << \"app prefix path: \" << app_dir_path3;\n    potential_dirs << app_dir_path3;\n  }\n#elif defined(Q_OS_MACOS)\n  QDir localBinDir(app_dir_path);\n  if (localBinDir.exists(\"../Resources\")) {\n    auto app_dir_path2 = localBinDir.cleanPath(localBinDir.filePath(\"../Resources\"));\n    qInfo() << \"app prefix path: \" << app_dir_path2;\n    potential_dirs << app_dir_path2;\n  }\n#endif\n\n  QDir::setSearchPaths(\"app\", potential_dirs);\n}\n\nQJsonValue ConfigMgr::parseAndReadConfig(const QString &p_exp) const {\n  if (p_exp.startsWith(QStringLiteral(\"main.\"))) {\n    return Utils::parseAndReadJson(m_config->toJson(), p_exp.mid(5));\n  } else if (p_exp.startsWith(QStringLiteral(\"session.\"))) {\n    return Utils::parseAndReadJson(m_sessionConfig->toJson(), p_exp.mid(8));\n  } else {\n    return QJsonValue();\n  }\n}\n"
  },
  {
    "path": "src/core/configmgr.h",
    "content": "#ifndef CONFIGMGR_H\n#define CONFIGMGR_H\n\n#include <QJsonObject>\n#include <QObject>\n#include <QScopedPointer>\n#include <QSharedPointer>\n\n#include \"noncopyable.h\"\n\nclass QTemporaryDir;\n\nnamespace vnotex {\nclass MainConfig;\nclass SessionConfig;\nclass CoreConfig;\nclass EditorConfig;\nclass WidgetConfig;\n\nclass ConfigMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  enum class Source { Default, App, User, Session };\n\n  class Settings {\n  public:\n    Settings() = default;\n\n    Settings(const QJsonObject &p_jobj) : m_jobj(p_jobj) {}\n\n    const QJsonObject &getJson() const;\n\n    void writeToFile(const QString &p_jsonFilePath) const;\n\n    static QSharedPointer<Settings> fromFile(const QString &p_jsonFilePath);\n\n  private:\n    QJsonObject m_jobj;\n  };\n\n  ~ConfigMgr();\n\n  static ConfigMgr &getInst(bool p_isUnitTest = false);\n\n  MainConfig &getConfig();\n\n  SessionConfig &getSessionConfig();\n\n  CoreConfig &getCoreConfig();\n\n  EditorConfig &getEditorConfig();\n\n  WidgetConfig &getWidgetConfig();\n\n  QString getAppFolder() const;\n\n  QString getUserFolder() const;\n\n  QString getLogFile() const;\n\n  QString getAppThemeFolder() const;\n\n  QString getUserThemeFolder() const;\n\n  QString getAppTaskFolder() const;\n\n  QString getUserTaskFolder() const;\n\n  QString getAppWebStylesFolder() const;\n\n  QString getUserWebStylesFolder() const;\n\n  QString getAppDocsFolder() const;\n\n  QString getUserDocsFolder() const;\n\n  QString getAppSyntaxHighlightingFolder() const;\n\n  QString getUserSyntaxHighlightingFolder() const;\n\n  QString getAppDictsFolder() const;\n  QString getUserDictsFolder() const;\n\n  QString getUserTemplateFolder() const;\n\n  QString getUserSnippetFolder() const;\n\n  // web/css/user.css.\n  QString getUserMarkdownUserStyleFile() const;\n\n  // If @p_filePath is absolute, just return it.\n  // Otherwise, first try to find it in user folder, then in app folder.\n  QString getUserOrAppFile(const QString &p_filePath) const;\n\n  QString getConfigFilePath(Source p_src) const;\n\n  // Parse exp like \"[main|session].core.shortcuts.FullScreen\" and return the config value.\n  QJsonValue parseAndReadConfig(const QString &p_exp) const;\n\n  // Called at boostrap without QApplication instance.\n  static QString locateSessionConfigFilePathAtBootstrap();\n\n  static QString getApplicationFilePath();\n\n  static QString getApplicationDirPath();\n\n  static QString getDocumentOrHomePath();\n\n  static QString getApplicationVersion();\n\n  static void initAppPrefixPath();\n\n  static void initForUnitTest();\n\n  static const QString c_orgName;\n\n  static const QString c_appName;\n\npublic:\n  // Used by IConfig.\n  QSharedPointer<Settings> getSettings(Source p_src) const;\n\n  void writeUserSettings(const QJsonObject &p_jobj);\n\n  void writeSessionSettings(const QJsonObject &p_jobj);\n\nsignals:\n  void editorConfigChanged();\n\nprivate:\n  ConfigMgr(bool p_isUnitTest, QObject *p_parent = nullptr);\n\n  // Locate the folder path where the config file exists.\n  void locateConfigFolder();\n\n  // Check if app config exists and is updated.\n  // Update it if in need.\n  // Return true if there is update.\n  bool checkAppConfig();\n\n  void checkUserConfig();\n\n  static QString getDefaultConfigFilePath();\n\n  QScopedPointer<MainConfig> m_config;\n  ;\n\n  // Session config.\n  QScopedPointer<SessionConfig> m_sessionConfig;\n\n  // Absolute path of the app config folder.\n  QString m_appConfigFolderPath;\n\n  // Absolute path of the user config folder.\n  QString m_userConfigFolderPath;\n\n  // In UnitTest, we use a temp dir to hold the user files and app files.\n  QScopedPointer<QTemporaryDir> m_dirForUnitTest;\n\n  // Name of the core config file.\n  static const QString c_configFileName;\n\n  // Name of the session config file.\n  static const QString c_sessionFileName;\n\n  static const QString c_userFilesFolder;\n\n  static const QString c_appFilesFolder;\n};\n} // namespace vnotex\n\n#endif // CONFIGMGR_H\n"
  },
  {
    "path": "src/core/coreconfig.cpp",
    "content": "#include \"coreconfig.h\"\n\n#include <QLocale>\n#include <QMetaEnum>\n\n#include <buffer/filetypehelper.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#define READINT(key) readInt(appObj, userObj, (key))\n#define READBOOL(key) readBool(appObj, userObj, (key))\n#define READSTRLIST(key) readStringList(appObj, userObj, (key))\n\nCoreConfig::FileTypeSuffix::FileTypeSuffix(const QString &p_name, const QStringList &p_suffixes)\n    : m_name(p_name), m_suffixes(p_suffixes) {}\n\nbool CoreConfig::FileTypeSuffix::operator==(const FileTypeSuffix &p_other) const {\n  return m_name == p_other.m_name && m_suffixes == p_other.m_suffixes;\n}\n\nQStringList CoreConfig::s_availableLocales;\n\nCoreConfig::CoreConfig(ConfigMgr *p_mgr, IConfig *p_topConfig) : IConfig(p_mgr, p_topConfig) {\n  m_sessionName = QStringLiteral(\"core\");\n}\n\nconst QString &CoreConfig::getTheme() const { return m_theme; }\n\nvoid CoreConfig::setTheme(const QString &p_name) { updateConfig(m_theme, p_name, this); }\n\nvoid CoreConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(m_sessionName).toObject();\n  const auto userObj = p_user.value(m_sessionName).toObject();\n\n  m_theme = READSTR(QStringLiteral(\"theme\"));\n\n  m_locale = READSTR(QStringLiteral(\"locale\"));\n  if (!m_locale.isEmpty() && !getAvailableLocales().contains(m_locale)) {\n    m_locale = QStringLiteral(\"en_US\");\n  }\n\n  loadShortcuts(appObj, userObj);\n\n  m_shortcutLeaderKey = READSTR(QStringLiteral(\"shortcut_leader_key\"));\n\n  m_toolBarIconSize = READINT(QStringLiteral(\"toolbar_icon_size\"));\n  if (m_toolBarIconSize <= 0) {\n    m_toolBarIconSize = 18;\n  }\n\n  m_docksTabBarIconSize = READINT(QStringLiteral(\"docks_tabbar_icon_size\"));\n  if (m_docksTabBarIconSize <= 0) {\n    m_docksTabBarIconSize = 18;\n  }\n\n  loadNoteManagement(appObj, userObj);\n\n  m_recoverLastSessionOnStartEnabled = READBOOL(QStringLiteral(\"recover_last_session_on_start\"));\n\n  m_checkForUpdatesOnStartEnabled = READBOOL(QStringLiteral(\"check_for_updates_on_start\"));\n\n  m_historyMaxCount = READINT(QStringLiteral(\"history_max_count\"));\n  if (m_historyMaxCount < 0) {\n    m_historyMaxCount = 100;\n  }\n\n  m_perNotebookHistoryEnabled = READBOOL(QStringLiteral(\"per_notebook_history\"));\n\n  {\n    auto lineEnding = READSTR(QStringLiteral(\"line_ending\"));\n    m_lineEnding = stringToLineEndingPolicy(lineEnding);\n  }\n\n  {\n    auto mode = READSTR(QStringLiteral(\"default_open_mode\"));\n    m_defaultOpenMode = stringToViewWindowMode(mode);\n  }\n\n  loadFileTypeSuffixes(appObj, userObj);\n\n  loadUnitedEntry(appObj, userObj);\n}\n\nQJsonObject CoreConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"theme\")] = m_theme;\n  obj[QStringLiteral(\"locale\")] = m_locale;\n  obj[QStringLiteral(\"shortcuts\")] = saveShortcuts();\n  obj[QStringLiteral(\"shortcut_leader_key\")] = m_shortcutLeaderKey;\n  obj[QStringLiteral(\"toolbar_icon_size\")] = m_toolBarIconSize;\n  obj[QStringLiteral(\"docks_tabbar_icon_size\")] = m_docksTabBarIconSize;\n  obj[QStringLiteral(\"recover_last_session_on_start\")] = m_recoverLastSessionOnStartEnabled;\n  obj[QStringLiteral(\"check_for_updates_on_start\")] = m_checkForUpdatesOnStartEnabled;\n  obj[QStringLiteral(\"history_max_count\")] = m_historyMaxCount;\n  obj[QStringLiteral(\"per_notebook_history\")] = m_perNotebookHistoryEnabled;\n  obj[QStringLiteral(\"line_ending\")] = lineEndingPolicyToString(m_lineEnding);\n  obj[QStringLiteral(\"file_type_suffixes\")] = saveFileTypeSuffixes();\n  obj[QStringLiteral(\"united_entry\")] = saveUnitedEntry();\n  obj[QStringLiteral(\"default_open_mode\")] = viewWindowModeToString(m_defaultOpenMode);\n  return obj;\n}\n\nconst QString &CoreConfig::getLocale() const { return m_locale; }\n\nvoid CoreConfig::setLocale(const QString &p_locale) { updateConfig(m_locale, p_locale, this); }\n\nQString CoreConfig::getLocaleToUse() const { return QLocale().name(); }\n\nconst QStringList &CoreConfig::getAvailableLocales() {\n  if (s_availableLocales.isEmpty()) {\n    s_availableLocales << QStringLiteral(\"en_US\");\n    s_availableLocales << QStringLiteral(\"zh_CN\");\n    s_availableLocales << QStringLiteral(\"ja_JP\");\n  }\n\n  return s_availableLocales;\n}\n\nvoid CoreConfig::loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(QStringLiteral(\"shortcuts\")).toObject();\n  const auto userObj = p_user.value(QStringLiteral(\"shortcuts\")).toObject();\n\n  static const auto indexOfShortcutEnum =\n      CoreConfig::staticMetaObject.indexOfEnumerator(\"Shortcut\");\n  Q_ASSERT(indexOfShortcutEnum >= 0);\n  const auto metaEnum = CoreConfig::staticMetaObject.enumerator(indexOfShortcutEnum);\n  // Skip the Max flag.\n  for (int i = 0; i < metaEnum.keyCount() - 1; ++i) {\n    m_shortcuts[i] = READSTR(metaEnum.key(i));\n  }\n}\n\nvoid CoreConfig::loadNoteManagement(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto topAppObj = p_app.value(QStringLiteral(\"note_management\")).toObject();\n  const auto topUserObj = p_user.value(QStringLiteral(\"note_management\")).toObject();\n\n  // External node.\n  {\n    const auto appObj = topAppObj.value(QStringLiteral(\"external_node\")).toObject();\n    const auto userObj = topUserObj.value(QStringLiteral(\"external_node\")).toObject();\n\n    m_externalNodeExcludePatterns = READSTRLIST(QStringLiteral(\"exclude_patterns\"));\n  }\n}\n\nQJsonObject CoreConfig::saveShortcuts() const {\n  QJsonObject obj;\n  static const auto indexOfShortcutEnum =\n      CoreConfig::staticMetaObject.indexOfEnumerator(\"Shortcut\");\n  Q_ASSERT(indexOfShortcutEnum >= 0);\n  const auto metaEnum = CoreConfig::staticMetaObject.enumerator(indexOfShortcutEnum);\n  // Skip the Max flag.\n  for (int i = 0; i < metaEnum.keyCount() - 1; ++i) {\n    obj[metaEnum.key(i)] = m_shortcuts[i];\n  }\n  return obj;\n}\n\nconst QString &CoreConfig::getShortcut(Shortcut p_shortcut) const {\n  Q_ASSERT(p_shortcut < Shortcut::MaxShortcut);\n  return m_shortcuts[p_shortcut];\n}\n\nint CoreConfig::getToolBarIconSize() const { return m_toolBarIconSize; }\n\nvoid CoreConfig::setToolBarIconSize(int p_size) {\n  Q_ASSERT(p_size > 0);\n  updateConfig(m_toolBarIconSize, p_size, this);\n}\n\nint CoreConfig::getDocksTabBarIconSize() const { return m_docksTabBarIconSize; }\n\nvoid CoreConfig::setDocksTabBarIconSize(int p_size) {\n  Q_ASSERT(p_size > 0);\n  updateConfig(m_docksTabBarIconSize, p_size, this);\n}\n\nconst QStringList &CoreConfig::getExternalNodeExcludePatterns() const {\n  return m_externalNodeExcludePatterns;\n}\n\nbool CoreConfig::isRecoverLastSessionOnStartEnabled() const {\n  return m_recoverLastSessionOnStartEnabled;\n}\n\nvoid CoreConfig::setRecoverLastSessionOnStartEnabled(bool p_enabled) {\n  updateConfig(m_recoverLastSessionOnStartEnabled, p_enabled, this);\n}\n\nbool CoreConfig::isCheckForUpdatesOnStartEnabled() const { return m_checkForUpdatesOnStartEnabled; }\n\nvoid CoreConfig::setCheckForUpdatesOnStartEnabled(bool p_enabled) {\n  updateConfig(m_checkForUpdatesOnStartEnabled, p_enabled, this);\n}\n\nint CoreConfig::getHistoryMaxCount() const { return m_historyMaxCount; }\n\nbool CoreConfig::isPerNotebookHistoryEnabled() const { return m_perNotebookHistoryEnabled; }\n\nvoid CoreConfig::setPerNotebookHistoryEnabled(bool p_enabled) {\n  updateConfig(m_perNotebookHistoryEnabled, p_enabled, this);\n}\n\nconst QString &CoreConfig::getShortcutLeaderKey() const { return m_shortcutLeaderKey; }\n\nLineEndingPolicy CoreConfig::getLineEndingPolicy() const { return m_lineEnding; }\n\nvoid CoreConfig::setLineEndingPolicy(LineEndingPolicy p_ending) {\n  updateConfig(m_lineEnding, p_ending, this);\n}\n\nvoid CoreConfig::loadFileTypeSuffixes(const QJsonObject &p_app, const QJsonObject &p_user) {\n  m_fileTypeSuffixes.clear();\n\n  QJsonArray arr;\n  if (p_user.contains(QStringLiteral(\"file_type_suffixes\"))) {\n    arr = p_user[QStringLiteral(\"file_type_suffixes\")].toArray();\n  } else {\n    arr = p_app[QStringLiteral(\"file_type_suffixes\")].toArray();\n  }\n\n  m_fileTypeSuffixes.reserve(arr.size());\n\n  bool hasSystemDefined = false;\n\n  for (int i = 0; i < arr.size(); ++i) {\n    const auto obj = arr[i].toObject();\n    const auto name = obj[QStringLiteral(\"name\")].toString();\n    if (name.isEmpty()) {\n      continue;\n    }\n\n    if (!hasSystemDefined && name == FileTypeHelper::s_systemDefaultProgram) {\n      hasSystemDefined = true;\n    }\n\n    const auto suffixes = readStringList(obj, QStringLiteral(\"suffixes\"));\n    m_fileTypeSuffixes.push_back(FileTypeSuffix(name, Utils::toLower(suffixes)));\n  }\n\n  if (!hasSystemDefined) {\n    m_fileTypeSuffixes.push_back(\n        FileTypeSuffix(FileTypeHelper::s_systemDefaultProgram, QStringList()));\n  }\n}\n\nQJsonArray CoreConfig::saveFileTypeSuffixes() const {\n  QJsonArray arr;\n  for (const auto &fts : m_fileTypeSuffixes) {\n    QJsonObject obj;\n    obj[QStringLiteral(\"name\")] = fts.m_name;\n    writeStringList(obj, QStringLiteral(\"suffixes\"), fts.m_suffixes);\n    arr.push_back(obj);\n  }\n  return arr;\n}\n\nvoid CoreConfig::loadUnitedEntry(const QJsonObject &p_app, const QJsonObject &p_user) {\n  QJsonObject unitedObj;\n  if (p_user.contains(QStringLiteral(\"united_entry\"))) {\n    unitedObj = p_user[QStringLiteral(\"united_entry\")].toObject();\n  } else {\n    unitedObj = p_app[QStringLiteral(\"united_entry\")].toObject();\n  }\n\n  m_unitedEntryAlias = unitedObj[QStringLiteral(\"alias\")].toArray();\n}\n\nQJsonObject CoreConfig::saveUnitedEntry() const {\n  QJsonObject unitedObj;\n  unitedObj[QStringLiteral(\"alias\")] = m_unitedEntryAlias;\n  return unitedObj;\n}\n\nconst QVector<CoreConfig::FileTypeSuffix> &CoreConfig::getFileTypeSuffixes() const {\n  return m_fileTypeSuffixes;\n}\n\nvoid CoreConfig::setFileTypeSuffixes(\n    const QVector<CoreConfig::FileTypeSuffix> &p_fileTypeSuffixes) {\n  updateConfig(m_fileTypeSuffixes, p_fileTypeSuffixes, this);\n}\n\nconst QStringList *CoreConfig::findFileTypeSuffix(const QString &p_name) const {\n  if (p_name.isEmpty()) {\n    return nullptr;\n  }\n\n  for (const auto &fts : m_fileTypeSuffixes) {\n    if (fts.m_name == p_name) {\n      return &fts.m_suffixes;\n    }\n  }\n\n  return nullptr;\n}\n\nconst QJsonArray &CoreConfig::getUnitedEntryAlias() const { return m_unitedEntryAlias; }\n\nvoid CoreConfig::setUnitedEntryAlias(const QJsonArray &p_alias) {\n  updateConfig(m_unitedEntryAlias, p_alias, this);\n}\n\nViewWindowMode CoreConfig::getDefaultOpenMode() const { return m_defaultOpenMode; }\n\nvoid CoreConfig::setDefaultOpenMode(ViewWindowMode p_mode) {\n  updateConfig(m_defaultOpenMode, p_mode, this);\n}\n\nViewWindowMode CoreConfig::stringToViewWindowMode(const QString &p_mode) {\n  if (p_mode == \"edit\") {\n    return ViewWindowMode::Edit;\n  }\n\n  return ViewWindowMode::Read;\n}\n\nQString CoreConfig::viewWindowModeToString(ViewWindowMode p_mode) {\n  switch (p_mode) {\n  case ViewWindowMode::Edit:\n    return \"edit\";\n\n  default:\n    return \"read\";\n  }\n}\n"
  },
  {
    "path": "src/core/coreconfig.h",
    "content": "#ifndef CORECONFIG_H\n#define CORECONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QString>\n#include <QStringList>\n#include <QtGlobal>\n\n#include \"global.h\"\n\nnamespace vnotex {\nclass CoreConfig : public IConfig {\n  Q_GADGET\npublic:\n  enum Shortcut {\n    FullScreen,\n    StayOnTop,\n    ExpandContentArea,\n    Settings,\n    NewNote,\n    NewQuickNote,\n    NewFolder,\n    CloseTab,\n    CloseAllTabs,\n    CloseOtherTabs,\n    CloseTabsToTheLeft,\n    CloseTabsToTheRight,\n    NavigationDock,\n    OutlineDock,\n    SearchDock,\n    SnippetDock,\n    LocationListDock,\n    HistoryDock,\n    WindowsDock,\n    TagDock,\n    Search,\n    NavigationMode,\n    LocateNode,\n    VerticalSplit,\n    HorizontalSplit,\n    MaximizeSplit,\n    DistributeSplits,\n    RemoveSplitAndWorkspace,\n    NewWorkspace,\n    Export,\n    Quit,\n    FlashPage,\n    QuickAccess,\n    ActivateTab1,\n    ActivateTab2,\n    ActivateTab3,\n    ActivateTab4,\n    ActivateTab5,\n    ActivateTab6,\n    ActivateTab7,\n    ActivateTab8,\n    ActivateTab9,\n    AlternateTab,\n    ActivateNextTab,\n    ActivatePreviousTab,\n    FocusContentArea,\n    OpenWithDefaultProgram,\n    OneSplitLeft,\n    OneSplitDown,\n    OneSplitUp,\n    OneSplitRight,\n    MoveOneSplitLeft,\n    MoveOneSplitDown,\n    MoveOneSplitUp,\n    MoveOneSplitRight,\n    OpenLastClosedFile,\n    UnitedEntry,\n    Copy,\n    Paste,\n    Cut,\n    Properties,\n    Global_WakeUp,\n    MaxShortcut\n  };\n  Q_ENUM(Shortcut)\n\n  struct FileTypeSuffix {\n    FileTypeSuffix() = default;\n\n    FileTypeSuffix(const QString &p_name, const QStringList &p_suffixes);\n\n    bool operator==(const FileTypeSuffix &p_other) const;\n\n    QString m_name;\n\n    QStringList m_suffixes;\n  };\n\n  CoreConfig(ConfigMgr *p_mgr, IConfig *p_topConfig);\n\n  void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  const QString &getTheme() const;\n  void setTheme(const QString &p_name);\n\n  const QString &getLocale() const;\n  void setLocale(const QString &p_locale);\n\n  // Should be called after locale is properly set.\n  QString getLocaleToUse() const;\n\n  const QString &getShortcut(Shortcut p_shortcut) const;\n\n  int getToolBarIconSize() const;\n  void setToolBarIconSize(int p_size);\n\n  int getDocksTabBarIconSize() const;\n  void setDocksTabBarIconSize(int p_size);\n\n  const QStringList &getExternalNodeExcludePatterns() const;\n\n  static const QStringList &getAvailableLocales();\n\n  bool isRecoverLastSessionOnStartEnabled() const;\n  void setRecoverLastSessionOnStartEnabled(bool p_enabled);\n\n  bool isCheckForUpdatesOnStartEnabled() const;\n  void setCheckForUpdatesOnStartEnabled(bool p_enabled);\n\n  int getHistoryMaxCount() const;\n\n  bool isPerNotebookHistoryEnabled() const;\n  void setPerNotebookHistoryEnabled(bool p_enabled);\n\n  const QString &getShortcutLeaderKey() const;\n\n  LineEndingPolicy getLineEndingPolicy() const;\n  void setLineEndingPolicy(LineEndingPolicy p_ending);\n\n  const QVector<FileTypeSuffix> &getFileTypeSuffixes() const;\n  void setFileTypeSuffixes(const QVector<FileTypeSuffix> &p_fileTypeSuffixes);\n\n  const QStringList *findFileTypeSuffix(const QString &p_name) const;\n\n  const QJsonArray &getUnitedEntryAlias() const;\n  void setUnitedEntryAlias(const QJsonArray &p_alias);\n\n  ViewWindowMode getDefaultOpenMode() const;\n  void setDefaultOpenMode(ViewWindowMode p_mode);\n\nprivate:\n  friend class MainConfig;\n\n  void loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  void loadNoteManagement(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  QJsonObject saveShortcuts() const;\n\n  void loadFileTypeSuffixes(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  QJsonArray saveFileTypeSuffixes() const;\n\n  void loadUnitedEntry(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  QJsonObject saveUnitedEntry() const;\n\n  static ViewWindowMode stringToViewWindowMode(const QString &p_mode);\n  static QString viewWindowModeToString(ViewWindowMode p_mode);\n\n  // Theme name.\n  QString m_theme;\n\n  // User-specified locale, such as zh_CN, en_US.\n  // Empty if not specified.\n  QString m_locale;\n\n  QString m_shortcuts[Shortcut::MaxShortcut];\n\n  // Leader key of shortcuts defined in m_shortctus.\n  QString m_shortcutLeaderKey;\n\n  // Icon size of MainWindow tool bar.\n  int m_toolBarIconSize = 18;\n\n  // Icon size of MainWindow QDockWidgets tab bar.\n  int m_docksTabBarIconSize = 20;\n\n  QStringList m_externalNodeExcludePatterns;\n\n  // Whether recover last session on start.\n  bool m_recoverLastSessionOnStartEnabled = true;\n\n  bool m_checkForUpdatesOnStartEnabled = true;\n\n  // Max count of the history items for each notebook and session config.\n  int m_historyMaxCount = 100;\n\n  // Whether store history in each notebook.\n  bool m_perNotebookHistoryEnabled = false;\n\n  LineEndingPolicy m_lineEnding = LineEndingPolicy::LF;\n\n  QVector<FileTypeSuffix> m_fileTypeSuffixes;\n\n  QJsonArray m_unitedEntryAlias;\n\n  ViewWindowMode m_defaultOpenMode = ViewWindowMode::Read;\n\n  static QStringList s_availableLocales;\n};\n} // namespace vnotex\n\n#endif // CORECONFIG_H\n"
  },
  {
    "path": "src/core/editorconfig.cpp",
    "content": "#include \"editorconfig.h\"\n\n#include <QDebug>\n#include <QMetaEnum>\n\n#include \"markdowneditorconfig.h\"\n#include \"mindmapeditorconfig.h\"\n#include \"pdfviewerconfig.h\"\n#include \"texteditorconfig.h\"\n\n#include <vtextedit/viconfig.h>\n\nusing namespace vnotex;\n\n#define READINT(key) readInt(appObj, userObj, (key))\n#define READSTR(key) readString(appObj, userObj, (key))\n#define READBOOL(key) readBool(appObj, userObj, (key))\n\nbool EditorConfig::ImageHostItem::operator==(const ImageHostItem &p_other) const {\n  return m_type == p_other.m_type && m_name == p_other.m_name && m_config == p_other.m_config;\n}\n\nvoid EditorConfig::ImageHostItem::fromJson(const QJsonObject &p_jobj) {\n  m_type = p_jobj[QStringLiteral(\"type\")].toInt();\n  m_name = p_jobj[QStringLiteral(\"name\")].toString();\n  m_config = p_jobj[QStringLiteral(\"config\")].toObject();\n}\n\nQJsonObject EditorConfig::ImageHostItem::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"type\")] = m_type;\n  obj[QStringLiteral(\"name\")] = m_name;\n  obj[QStringLiteral(\"config\")] = m_config;\n  return obj;\n}\n\nEditorConfig::EditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig)\n    : IConfig(p_mgr, p_topConfig), m_textEditorConfig(new TextEditorConfig(p_mgr, p_topConfig)),\n      m_markdownEditorConfig(new MarkdownEditorConfig(p_mgr, p_topConfig, m_textEditorConfig)),\n      m_pdfViewerConfig(new PdfViewerConfig(p_mgr, p_topConfig)),\n      m_mindMapEditorConfig(new MindMapEditorConfig(p_mgr, p_topConfig)) {\n  m_sessionName = QStringLiteral(\"editor\");\n}\n\nEditorConfig::~EditorConfig() {}\n\nvoid EditorConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(m_sessionName).toObject();\n  const auto userObj = p_user.value(m_sessionName).toObject();\n\n  loadCore(appObj, userObj);\n\n  loadImageHost(appObj, userObj);\n\n  m_viConfig = QSharedPointer<vte::ViConfig>::create();\n  m_viConfig->fromJson(read(appObj, userObj, QStringLiteral(\"vi\")).toObject());\n\n  m_textEditorConfig->init(appObj, userObj);\n  m_markdownEditorConfig->init(appObj, userObj);\n  m_pdfViewerConfig->init(appObj, userObj);\n  m_mindMapEditorConfig->init(appObj, userObj);\n}\n\nvoid EditorConfig::loadCore(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(QStringLiteral(\"core\")).toObject();\n  const auto userObj = p_user.value(QStringLiteral(\"core\")).toObject();\n\n  {\n    m_toolBarIconSize = READINT(QStringLiteral(\"toolbar_icon_size\"));\n    if (m_toolBarIconSize <= 0) {\n      m_toolBarIconSize = 14;\n    }\n  }\n\n  {\n    auto autoSavePolicy = READSTR(QStringLiteral(\"auto_save_policy\"));\n    m_autoSavePolicy = stringToAutoSavePolicy(autoSavePolicy);\n  }\n\n  m_backupFileDirectory = READSTR(QStringLiteral(\"backup_file_directory\"));\n\n  m_backupFileExtension = READSTR(QStringLiteral(\"backup_file_extension\"));\n\n  loadShortcuts(appObj, userObj);\n\n  m_spellCheckAutoDetectLanguageEnabled =\n      READBOOL(QStringLiteral(\"spell_check_auto_detect_language\"));\n  m_spellCheckDefaultDictionary = READSTR(QStringLiteral(\"spell_check_default_dictionary\"));\n  if (m_spellCheckDefaultDictionary.isEmpty()) {\n    m_spellCheckDefaultDictionary = QStringLiteral(\"en_US\");\n  }\n\n  {\n    auto lineEnding = READSTR(QStringLiteral(\"line_ending\"));\n    m_lineEnding = stringToLineEndingPolicy(lineEnding);\n  }\n}\n\nQJsonObject EditorConfig::saveCore() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"toolbar_icon_size\")] = m_toolBarIconSize;\n  obj[QStringLiteral(\"auto_save_policy\")] = autoSavePolicyToString(m_autoSavePolicy);\n  obj[QStringLiteral(\"backup_file_directory\")] = m_backupFileDirectory;\n  obj[QStringLiteral(\"backup_file_extension\")] = m_backupFileExtension;\n  obj[QStringLiteral(\"shortcuts\")] = saveShortcuts();\n  obj[QStringLiteral(\"spell_check_auto_detect_language\")] = m_spellCheckAutoDetectLanguageEnabled;\n  obj[QStringLiteral(\"spell_check_default_dictionary\")] = m_spellCheckDefaultDictionary;\n  obj[QStringLiteral(\"line_ending\")] = lineEndingPolicyToString(m_lineEnding);\n  return obj;\n}\n\nvoid EditorConfig::loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(QStringLiteral(\"shortcuts\")).toObject();\n  const auto userObj = p_user.value(QStringLiteral(\"shortcuts\")).toObject();\n\n  static const auto indexOfShortcutEnum =\n      EditorConfig::staticMetaObject.indexOfEnumerator(\"Shortcut\");\n  Q_ASSERT(indexOfShortcutEnum >= 0);\n  const auto metaEnum = EditorConfig::staticMetaObject.enumerator(indexOfShortcutEnum);\n  // Skip the Max flag.\n  for (int i = 0; i < metaEnum.keyCount() - 1; ++i) {\n    m_shortcuts[i] = READSTR(metaEnum.key(i));\n  }\n}\n\nQJsonObject EditorConfig::saveShortcuts() const {\n  QJsonObject obj;\n  static const auto indexOfShortcutEnum =\n      EditorConfig::staticMetaObject.indexOfEnumerator(\"Shortcut\");\n  Q_ASSERT(indexOfShortcutEnum >= 0);\n  const auto metaEnum = EditorConfig::staticMetaObject.enumerator(indexOfShortcutEnum);\n  // Skip the Max flag.\n  for (int i = 0; i < metaEnum.keyCount() - 1; ++i) {\n    obj[metaEnum.key(i)] = m_shortcuts[i];\n  }\n  return obj;\n}\n\nQJsonObject EditorConfig::toJson() const {\n  QJsonObject obj;\n  obj[m_textEditorConfig->getSessionName()] = m_textEditorConfig->toJson();\n  obj[m_markdownEditorConfig->getSessionName()] = m_markdownEditorConfig->toJson();\n  obj[m_pdfViewerConfig->getSessionName()] = m_pdfViewerConfig->toJson();\n  obj[m_mindMapEditorConfig->getSessionName()] = m_mindMapEditorConfig->toJson();\n  obj[QStringLiteral(\"core\")] = saveCore();\n  obj[QStringLiteral(\"image_host\")] = saveImageHost();\n\n  // In UT, it may be nullptr.\n  if (m_viConfig) {\n    obj[QStringLiteral(\"vi\")] = m_viConfig->toJson();\n  }\n  return obj;\n}\n\nTextEditorConfig &EditorConfig::getTextEditorConfig() { return *m_textEditorConfig; }\n\nconst TextEditorConfig &EditorConfig::getTextEditorConfig() const { return *m_textEditorConfig; }\n\nMarkdownEditorConfig &EditorConfig::getMarkdownEditorConfig() { return *m_markdownEditorConfig; }\n\nconst MarkdownEditorConfig &EditorConfig::getMarkdownEditorConfig() const {\n  return *m_markdownEditorConfig;\n}\n\nPdfViewerConfig &EditorConfig::getPdfViewerConfig() { return *m_pdfViewerConfig; }\n\nconst PdfViewerConfig &EditorConfig::getPdfViewerConfig() const { return *m_pdfViewerConfig; }\n\nMindMapEditorConfig &EditorConfig::getMindMapEditorConfig() { return *m_mindMapEditorConfig; }\n\nconst MindMapEditorConfig &EditorConfig::getMindMapEditorConfig() const {\n  return *m_mindMapEditorConfig;\n}\n\nint EditorConfig::getToolBarIconSize() const { return m_toolBarIconSize; }\n\nvoid EditorConfig::setToolBarIconSize(int p_size) {\n  Q_ASSERT(p_size > 0);\n  updateConfig(m_toolBarIconSize, p_size, this);\n}\n\nconst QString &EditorConfig::getShortcut(Shortcut p_shortcut) const {\n  Q_ASSERT(p_shortcut < Shortcut::MaxShortcut);\n  return m_shortcuts[p_shortcut];\n}\n\nQString EditorConfig::autoSavePolicyToString(AutoSavePolicy p_policy) const {\n  switch (p_policy) {\n  case AutoSavePolicy::None:\n    return QStringLiteral(\"none\");\n\n  case AutoSavePolicy::AutoSave:\n    return QStringLiteral(\"autosave\");\n\n  default:\n    return QStringLiteral(\"backupfile\");\n  }\n}\n\nEditorConfig::AutoSavePolicy EditorConfig::stringToAutoSavePolicy(const QString &p_str) const {\n  auto policy = p_str.toLower();\n  if (policy == QStringLiteral(\"none\")) {\n    return AutoSavePolicy::None;\n  } else if (policy == QStringLiteral(\"autosave\")) {\n    return AutoSavePolicy::AutoSave;\n  } else {\n    return AutoSavePolicy::BackupFile;\n  }\n}\n\nEditorConfig::AutoSavePolicy EditorConfig::getAutoSavePolicy() const { return m_autoSavePolicy; }\n\nvoid EditorConfig::setAutoSavePolicy(EditorConfig::AutoSavePolicy p_policy) {\n  updateConfig(m_autoSavePolicy, p_policy, this);\n}\n\nLineEndingPolicy EditorConfig::getLineEndingPolicy() const { return m_lineEnding; }\n\nvoid EditorConfig::setLineEndingPolicy(LineEndingPolicy p_ending) {\n  updateConfig(m_lineEnding, p_ending, this);\n}\n\nconst QString &EditorConfig::getBackupFileDirectory() const { return m_backupFileDirectory; }\n\nconst QString &EditorConfig::getBackupFileExtension() const { return m_backupFileExtension; }\n\nbool EditorConfig::isSpellCheckAutoDetectLanguageEnabled() const {\n  return m_spellCheckAutoDetectLanguageEnabled;\n}\n\nconst QString &EditorConfig::getSpellCheckDefaultDictionary() const {\n  return m_spellCheckDefaultDictionary;\n}\n\nvoid EditorConfig::setSpellCheckDefaultDictionary(const QString &p_dict) {\n  updateConfig(m_spellCheckDefaultDictionary, p_dict, this);\n}\n\nvoid EditorConfig::loadImageHost(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(QStringLiteral(\"image_host\")).toObject();\n  const auto userObj = p_user.value(QStringLiteral(\"image_host\")).toObject();\n\n  {\n    auto arr = read(appObj, userObj, QStringLiteral(\"hosts\")).toArray();\n    m_imageHosts.resize(arr.size());\n    for (int i = 0; i < arr.size(); ++i) {\n      m_imageHosts[i].fromJson(arr[i].toObject());\n    }\n  }\n\n  m_defaultImageHost = READSTR(QStringLiteral(\"default_image_host\"));\n  m_clearObsoleteImageAtImageHost = READBOOL(QStringLiteral(\"clear_obsolete_image\"));\n}\n\nQJsonObject EditorConfig::saveImageHost() const {\n  QJsonObject obj;\n\n  {\n    QJsonArray arr;\n    for (const auto &item : m_imageHosts) {\n      arr.append(item.toJson());\n    }\n    obj[QStringLiteral(\"hosts\")] = arr;\n  }\n\n  obj[QStringLiteral(\"default_image_host\")] = m_defaultImageHost;\n  obj[QStringLiteral(\"clear_obsolete_image\")] = m_clearObsoleteImageAtImageHost;\n\n  return obj;\n}\n\nconst QVector<EditorConfig::ImageHostItem> &EditorConfig::getImageHosts() const {\n  return m_imageHosts;\n}\n\nvoid EditorConfig::setImageHosts(const QVector<ImageHostItem> &p_hosts) {\n  updateConfig(m_imageHosts, p_hosts, this);\n}\n\nconst QString &EditorConfig::getDefaultImageHost() const { return m_defaultImageHost; }\n\nvoid EditorConfig::setDefaultImageHost(const QString &p_host) {\n  updateConfig(m_defaultImageHost, p_host, this);\n}\n\nbool EditorConfig::isClearObsoleteImageAtImageHostEnabled() const {\n  return m_clearObsoleteImageAtImageHost;\n}\n\nvoid EditorConfig::setClearObsoleteImageAtImageHostEnabled(bool p_enabled) {\n  updateConfig(m_clearObsoleteImageAtImageHost, p_enabled, this);\n}\n\nconst QSharedPointer<vte::ViConfig> &EditorConfig::getViConfig() const { return m_viConfig; }\n"
  },
  {
    "path": "src/core/editorconfig.h",
    "content": "#ifndef VNOTEX_EDITORCONFIG_H\n#define VNOTEX_EDITORCONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QObject>\n#include <QScopedPointer>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"global.h\"\n\nnamespace vte {\nclass ViConfig;\n}\n\nnamespace vnotex {\nclass TextEditorConfig;\nclass MarkdownEditorConfig;\nclass PdfViewerConfig;\nclass MindMapEditorConfig;\n\nclass EditorConfig : public IConfig {\n  Q_GADGET\npublic:\n  enum Shortcut {\n    Save,\n    EditRead,\n    Discard,\n    TypeHeading1,\n    TypeHeading2,\n    TypeHeading3,\n    TypeHeading4,\n    TypeHeading5,\n    TypeHeading6,\n    TypeHeadingNone,\n    TypeBold,\n    TypeItalic,\n    TypeStrikethrough,\n    TypeUnorderedList,\n    TypeOrderedList,\n    TypeTodoList,\n    TypeCheckedTodoList,\n    TypeCode,\n    TypeCodeBlock,\n    TypeMath,\n    TypeMathBlock,\n    TypeQuote,\n    TypeLink,\n    TypeImage,\n    TypeTable,\n    TypeMark,\n    Outline,\n    AltPaste,\n    FindAndReplace,\n    FindNext,\n    FindPrevious,\n    ApplySnippet,\n    Tag,\n    Debug,\n    Print,\n    ClearHighlights,\n    WordCount,\n    Attachment,\n    AlternateViewMode,\n    ParseToMarkdownAndPaste,\n    MaxShortcut\n  };\n  Q_ENUM(Shortcut)\n\n  enum AutoSavePolicy { None, AutoSave, BackupFile };\n  Q_ENUM(AutoSavePolicy)\n\n  struct ImageHostItem {\n    ImageHostItem() = default;\n\n    bool operator==(const ImageHostItem &p_other) const;\n\n    void fromJson(const QJsonObject &p_jobj);\n\n    QJsonObject toJson() const;\n\n    int m_type = 0;\n\n    QString m_name;\n\n    QJsonObject m_config;\n  };\n\n  EditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig);\n\n  ~EditorConfig();\n\n  TextEditorConfig &getTextEditorConfig();\n  const TextEditorConfig &getTextEditorConfig() const;\n\n  MarkdownEditorConfig &getMarkdownEditorConfig();\n  const MarkdownEditorConfig &getMarkdownEditorConfig() const;\n\n  PdfViewerConfig &getPdfViewerConfig();\n  const PdfViewerConfig &getPdfViewerConfig() const;\n\n  MindMapEditorConfig &getMindMapEditorConfig();\n  const MindMapEditorConfig &getMindMapEditorConfig() const;\n\n  void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  int getToolBarIconSize() const;\n  void setToolBarIconSize(int p_size);\n\n  EditorConfig::AutoSavePolicy getAutoSavePolicy() const;\n  void setAutoSavePolicy(EditorConfig::AutoSavePolicy p_policy);\n\n  const QString &getBackupFileDirectory() const;\n\n  const QString &getBackupFileExtension() const;\n\n  const QString &getShortcut(Shortcut p_shortcut) const;\n\n  bool isSpellCheckAutoDetectLanguageEnabled() const;\n\n  const QString &getSpellCheckDefaultDictionary() const;\n  void setSpellCheckDefaultDictionary(const QString &p_dict);\n\n  const QVector<ImageHostItem> &getImageHosts() const;\n  void setImageHosts(const QVector<ImageHostItem> &p_hosts);\n\n  const QString &getDefaultImageHost() const;\n  void setDefaultImageHost(const QString &p_host);\n\n  bool isClearObsoleteImageAtImageHostEnabled() const;\n  void setClearObsoleteImageAtImageHostEnabled(bool p_enabled);\n\n  const QSharedPointer<vte::ViConfig> &getViConfig() const;\n\n  LineEndingPolicy getLineEndingPolicy() const;\n  void setLineEndingPolicy(LineEndingPolicy p_ending);\n\nprivate:\n  friend class MainConfig;\n\n  void loadCore(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  QJsonObject saveCore() const;\n\n  void loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  QJsonObject saveShortcuts() const;\n\n  QString autoSavePolicyToString(AutoSavePolicy p_policy) const;\n  AutoSavePolicy stringToAutoSavePolicy(const QString &p_str) const;\n\n  void loadImageHost(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  QJsonObject saveImageHost() const;\n\n  // Icon size of editor tool bar.\n  int m_toolBarIconSize = 16;\n\n  QString m_shortcuts[Shortcut::MaxShortcut];\n\n  AutoSavePolicy m_autoSavePolicy = AutoSavePolicy::AutoSave;\n\n  // Where to put backup file, relative to the content file itself.\n  QString m_backupFileDirectory;\n\n  // Backup file extension.\n  QString m_backupFileExtension;\n\n  // Will be shared with MarkdownEditorConfig.\n  QSharedPointer<TextEditorConfig> m_textEditorConfig;\n\n  QScopedPointer<MarkdownEditorConfig> m_markdownEditorConfig;\n\n  QScopedPointer<PdfViewerConfig> m_pdfViewerConfig;\n\n  QScopedPointer<MindMapEditorConfig> m_mindMapEditorConfig;\n\n  bool m_spellCheckAutoDetectLanguageEnabled = false;\n\n  QString m_spellCheckDefaultDictionary;\n\n  QVector<ImageHostItem> m_imageHosts;\n\n  QString m_defaultImageHost;\n\n  bool m_clearObsoleteImageAtImageHost = false;\n\n  QSharedPointer<vte::ViConfig> m_viConfig;\n\n  LineEndingPolicy m_lineEnding = LineEndingPolicy::LF;\n};\n} // namespace vnotex\n\n#endif // EDITORCONFIG_H\n"
  },
  {
    "path": "src/core/events.h",
    "content": "#ifndef EVENTS_H\n#define EVENTS_H\n\n#include <QVariant>\n\nnamespace vnotex {\nclass Event {\npublic:\n  void reset() {\n    m_handled = false;\n    m_response.clear();\n  }\n\n  // Whether this event is handled.\n  // If it is handled, later handler should just ignore this event.\n  bool m_handled = false;\n\n  // Handler could use this field to return state to the event sender.\n  QVariant m_response = true;\n};\n} // namespace vnotex\n\n#endif // EVENTS_H\n"
  },
  {
    "path": "src/core/exception.h",
    "content": "#ifndef EXCEPTION_H\n#define EXCEPTION_H\n\n#include <QDebug>\n#include <QString>\n#include <stdexcept>\n\nnamespace vnotex {\nclass Exception : virtual public std::runtime_error {\npublic:\n  enum class Type {\n    InvalidPath,\n    FailToCreateDir,\n    FailToWriteFile,\n    FailToReadFile,\n    FailToRenameFile,\n    FailToCopyFile,\n    FailToCopyDir,\n    FailToRemoveFile,\n    FailToRemoveDir,\n    FileMissingOnDisk,\n    EssentialFileMissing,\n    FileExistsOnCreate,\n    DirExistsOnCreate,\n    InvalidArgument\n  };\n\n  Exception(Type p_type, const QString &p_what)\n      : std::runtime_error(p_what.toStdString()), m_type(p_type) {}\n\n  Type m_type;\n\n  [[noreturn]] static void throwOne(Exception::Type p_type, const QString &p_what) {\n    qCritical() << typeToString(p_type) << p_what;\n    throw Exception(p_type, p_what);\n  }\n\nprivate:\n  static QString typeToString(Exception::Type p_type) {\n    switch (p_type) {\n    case Type::InvalidPath:\n      return QStringLiteral(\"InvalidPath\");\n\n    case Type::FailToCreateDir:\n      return QStringLiteral(\"FailToCreateDir\");\n\n    case Type::FailToWriteFile:\n      return QStringLiteral(\"FailToWriteFile\");\n\n    case Type::FailToReadFile:\n      return QStringLiteral(\"FailToReadFile\");\n\n    case Type::FailToRenameFile:\n      return QStringLiteral(\"FailToRenameFile\");\n\n    case Type::FailToCopyFile:\n      return QStringLiteral(\"FailToCopyFile\");\n\n    case Type::FailToCopyDir:\n      return QStringLiteral(\"FailToCopyDir\");\n\n    case Type::FailToRemoveFile:\n      return QStringLiteral(\"FailToRemoveFile\");\n\n    case Type::FailToRemoveDir:\n      return QStringLiteral(\"FailToRemoveDir\");\n\n    case Type::FileMissingOnDisk:\n      return QStringLiteral(\"FileMissingOnDisk\");\n\n    case Type::EssentialFileMissing:\n      return QStringLiteral(\"EssentialFileMissing\");\n\n    case Type::FileExistsOnCreate:\n      return QStringLiteral(\"FileExistsOnCreate\");\n\n    case Type::DirExistsOnCreate:\n      return QStringLiteral(\"DirExistsOnCreate\");\n\n    case Type::InvalidArgument:\n      return QStringLiteral(\"InvalidArgument\");\n    }\n\n    return QString::number(static_cast<int>(p_type));\n  }\n};\n} // namespace vnotex\n\n#endif // EXCEPTION_H\n"
  },
  {
    "path": "src/core/externalfile.cpp",
    "content": "#include \"externalfile.h\"\n\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nExternalFile::ExternalFile(const QString &p_filePath) : c_filePath(p_filePath) {\n  setContentType(FileTypeHelper::getInst().getFileType(c_filePath).m_type);\n}\n\nQString ExternalFile::read() const { return FileUtils::readTextFile(getContentPath()); }\n\nvoid ExternalFile::write(const QString &p_content) {\n  FileUtils::writeFile(getContentPath(), p_content);\n}\n\nQString ExternalFile::getName() const { return PathUtils::fileName(c_filePath); }\n\nQString ExternalFile::getFilePath() const { return c_filePath; }\n\nQString ExternalFile::getContentPath() const { return c_filePath; }\n\nQString ExternalFile::getResourcePath() const { return PathUtils::parentDirPath(getContentPath()); }\n\nIFileWithImage *ExternalFile::getImageInterface() { return this; }\n\nNode *ExternalFile::getNode() const { return nullptr; }\n\nQString ExternalFile::fetchImageFolderPath() {\n  auto pa = PathUtils::concatenateFilePath(getResourcePath(), QStringLiteral(\"vx_images\"));\n  QDir().mkpath(pa);\n  return pa;\n}\n\nQString ExternalFile::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) {\n  const auto imageFolderPath = fetchImageFolderPath();\n  auto destFilePath = FileUtils::renameIfExistsCaseInsensitive(\n      PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName));\n  FileUtils::copyFile(p_srcImagePath, destFilePath);\n  return destFilePath;\n}\n\nQString ExternalFile::insertImage(const QImage &p_image, const QString &p_imageFileName) {\n  const auto imageFolderPath = fetchImageFolderPath();\n  auto destFilePath = FileUtils::renameIfExistsCaseInsensitive(\n      PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName));\n  p_image.save(destFilePath);\n  return destFilePath;\n}\n\nvoid ExternalFile::removeImage(const QString &p_imagePath) { FileUtils::removeFile(p_imagePath); }\n"
  },
  {
    "path": "src/core/externalfile.h",
    "content": "#ifndef EXTERNALFILE_H\n#define EXTERNALFILE_H\n\n#include \"file.h\"\n\nnamespace vnotex {\nclass ExternalFile : public File, public IFileWithImage {\npublic:\n  explicit ExternalFile(const QString &p_filePath);\n\n  QString read() const Q_DECL_OVERRIDE;\n\n  void write(const QString &p_content) Q_DECL_OVERRIDE;\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getFilePath() const Q_DECL_OVERRIDE;\n\n  QString getContentPath() const Q_DECL_OVERRIDE;\n\n  // Path to resolve resources.\n  QString getResourcePath() const Q_DECL_OVERRIDE;\n\n  IFileWithImage *getImageInterface() Q_DECL_OVERRIDE;\n\n  // Get the corresponding node if available.\n  Node *getNode() const Q_DECL_OVERRIDE;\n\n  // IFileWithImage interfaces.\npublic:\n  QString fetchImageFolderPath() Q_DECL_OVERRIDE;\n\n  // Insert image from @p_srcImagePath.\n  // Return inserted image file path.\n  QString insertImage(const QString &p_srcImagePath,\n                      const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;\n\nprivate:\n  QString c_filePath;\n};\n} // namespace vnotex\n\n#endif // EXTERNALFILE_H\n"
  },
  {
    "path": "src/core/file.cpp",
    "content": "#include \"file.h\"\n\nusing namespace vnotex;\n\nconst FileType &File::getContentType() const {\n  return FileTypeHelper::getInst().getFileType(m_contentType);\n}\n\nvoid File::setContentType(int p_type) { m_contentType = p_type; }\n"
  },
  {
    "path": "src/core/file.h",
    "content": "#ifndef FILE_H\n#define FILE_H\n\n#include <QString>\n\n#include <buffer/filetypehelper.h>\n\nclass QImage;\n\nnamespace vnotex {\nclass Node;\n\nclass IFileWithImage {\npublic:\n  IFileWithImage() = default;\n\n  virtual ~IFileWithImage() = default;\n\n  virtual QString fetchImageFolderPath() = 0;\n\n  // Insert image from @p_srcImagePath.\n  // Return inserted image file path.\n  virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) = 0;\n\n  virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName) = 0;\n\n  virtual void removeImage(const QString &p_imagePath) = 0;\n};\n\n// Abstract file interface.\nclass File {\npublic:\n  File() = default;\n\n  virtual ~File() = default;\n\n  virtual QString read() const = 0;\n\n  virtual void write(const QString &p_content) = 0;\n\n  virtual QString getName() const = 0;\n\n  virtual QString getFilePath() const = 0;\n\n  // The main content file of File.\n  // In bundle case, getFilePath() may point to a folder, getContentPath() points to the real\n  // content file.\n  virtual QString getContentPath() const = 0;\n\n  // Path to resolve resources.\n  virtual QString getResourcePath() const = 0;\n\n  virtual IFileWithImage *getImageInterface() = 0;\n\n  // Get the corresponding node if available.\n  virtual Node *getNode() const = 0;\n\n  const FileType &getContentType() const;\n\n  void setContentType(int p_type);\n\nprivate:\n  int m_contentType = FileType::Others;\n};\n} // namespace vnotex\n\n#endif // FILE_H\n"
  },
  {
    "path": "src/core/filelocator.h",
    "content": "#ifndef FILELOCATOR_H\n#define FILELOCATOR_H\n\n#include <QString>\n\nnamespace vnotex {\nclass Node;\n\n// A unique locator for both internal Node and external file.\nclass FileLocator {\npublic:\n  FileLocator(Node *p_node) : m_node(p_node) {}\n\n  FileLocator(const QString &p_filePath) : m_filePath(p_filePath) {}\n\n  bool isNode() const { return m_node; }\n\n  Node *node() const {\n    Q_ASSERT(isNode());\n    return m_node;\n  }\n\n  const QString &filePath() const {\n    Q_ASSERT(!isNode());\n    return m_filePath;\n  }\n\nprivate:\n  Node *m_node = nullptr;\n\n  QString m_filePath;\n};\n} // namespace vnotex\n\n#endif // FILELOCATOR_H\n"
  },
  {
    "path": "src/core/fileopenparameters.h",
    "content": "#ifndef FILEOPENPARAMETERS_H\n#define FILEOPENPARAMETERS_H\n\n#include <functional>\n\n#include <QSharedPointer>\n\n#include \"global.h\"\n\nnamespace vnotex {\nclass Node;\nclass SearchToken;\n\nstruct FileOpenParameters {\n  enum Hook { PostSave, MaxHook };\n\n  ViewWindowMode m_mode = ViewWindowMode::Read;\n\n  // Force to enter m_mode.\n  bool m_forceMode = false;\n\n  // Whether focus to the opened window.\n  bool m_focus = true;\n\n  // Whether it is a new file.\n  bool m_newFile = false;\n\n  // If this file is an attachment of a node, this field indicates it.\n  Node *m_nodeAttachedTo = nullptr;\n\n  // Open as read-only.\n  bool m_readOnly = false;\n\n  // If m_lineNumber > -1, it indicates the line to scroll to after opening the file.\n  // 0-based.\n  int m_lineNumber = -1;\n\n  // Whether always open a new window for file.\n  bool m_alwaysNewWindow = false;\n\n  // If not empty, use this token to do a search text highlight.\n  QSharedPointer<SearchToken> m_searchToken;\n\n  // Whether should save this file into session.\n  bool m_sessionEnabled = true;\n\n  // Whether specify the built-in file type to open as or the external program to open with.\n  QString m_fileType;\n\n  std::function<void()> m_hooks[Hook::MaxHook];\n};\n} // namespace vnotex\n\n#endif // FILEOPENPARAMETERS_H\n"
  },
  {
    "path": "src/core/global.cpp",
    "content": "#include \"global.h\"\n\nusing namespace vnotex;\n"
  },
  {
    "path": "src/core/global.h",
    "content": "#ifndef VNOTEX_GLOBAL_H\n#define VNOTEX_GLOBAL_H\n\n#include <QDebug>\n#include <QJsonObject>\n#include <QPair>\n#include <QString>\n\nnamespace vnotex {\ntypedef quint64 ID;\n\ninline QPair<bool, ID> stringToID(const QString &p_str) {\n  bool ok;\n  ID id = p_str.toULongLong(&ok);\n  return qMakePair(ok, id);\n}\n\ninline QString IDToString(ID p_id) { return QString::number(p_id); }\n\ntypedef quint64 TimeStamp;\n\nstruct Info {\n  Info(const QString &p_name, const QString &p_displayName, const QString &p_description)\n      : m_name(p_name), m_displayName(p_displayName), m_description(p_description) {}\n\n  // Name for identification.\n  QString m_name;\n\n  // User-visible name.\n  QString m_displayName;\n\n  QString m_description;\n};\n\nenum { CONTENTS_MARGIN = 2 };\n\ninline QString QJsonObjectToString(const QJsonObject &p_obj) {\n  QString str = \"{\";\n\n  auto keys = p_obj.keys();\n  for (auto &key : keys) {\n    str += \"\\\"\" + key + \"\\\": \\\"\" + p_obj.value(key).toString() + \"\\\";\";\n  }\n\n  str += \"}\";\n  return str;\n}\n\ninline QDebug operator<<(QDebug p_debug, const QJsonObject &p_obj) {\n  QDebugStateSaver saver(p_debug);\n  p_debug << QJsonObjectToString(p_obj);\n  return p_debug;\n}\n\nenum FindOption {\n  FindNone = 0,\n  FindBackward = 0x1U,\n  CaseSensitive = 0x2U,\n  WholeWordOnly = 0x4U,\n  RegularExpression = 0x8U,\n  IncrementalSearch = 0x10U,\n  // Used in full-text search.\n  FuzzySearch = 0x20U\n};\nQ_DECLARE_FLAGS(FindOptions, FindOption);\n\nenum OverrideState { NoOverride = 0, ForceEnable = 1, ForceDisable = 2 };\n\nenum class Alignment { None, Left, Center, Right };\n\nenum class ViewWindowMode { Read, Edit, Invalid };\n\nenum { InvalidViewSplitId = 0 };\n\nenum class Direction { Left, Down, Up, Right };\n\nstruct Segment {\n  Segment() = default;\n\n  Segment(int p_offset, int p_length) : m_offset(p_offset), m_length(p_length) {}\n\n  bool operator<(const Segment &p_other) const {\n    if (m_offset < p_other.m_offset) {\n      return true;\n      ;\n    } else {\n      return m_length < p_other.m_length;\n    }\n  }\n\n  int m_offset = 0;\n\n  int m_length = -1;\n};\n\nenum class LineEndingPolicy { Platform, File, LF, CRLF, CR };\n\ninline QString lineEndingPolicyToString(LineEndingPolicy p_ending) {\n  switch (p_ending) {\n  case LineEndingPolicy::Platform:\n    return QStringLiteral(\"platform\");\n\n  case LineEndingPolicy::File:\n    return QStringLiteral(\"file\");\n\n  case LineEndingPolicy::LF:\n    return QStringLiteral(\"lf\");\n\n  case LineEndingPolicy::CRLF:\n    return QStringLiteral(\"crlf\");\n\n  case LineEndingPolicy::CR:\n    return QStringLiteral(\"cr\");\n  }\n\n  return QStringLiteral(\"platform\");\n}\n\ninline LineEndingPolicy stringToLineEndingPolicy(const QString &p_str) {\n  auto ending = p_str.toLower();\n  if (ending == QStringLiteral(\"file\")) {\n    return LineEndingPolicy::File;\n  } else if (ending == QStringLiteral(\"lf\")) {\n    return LineEndingPolicy::LF;\n  } else if (ending == QStringLiteral(\"crlf\")) {\n    return LineEndingPolicy::CRLF;\n  } else if (ending == QStringLiteral(\"cr\")) {\n    return LineEndingPolicy::CR;\n  } else {\n    return LineEndingPolicy::Platform;\n  }\n}\n\nenum Role {\n  // Qt::UserRole = 0x0100\n  UserRole2 = 0x0101,\n  HighlightsRole = 0x0102,\n  // Used for comparison.\n  ComparisonRole = 0x0103\n};\n\nenum ViewOrder {\n  OrderedByConfiguration = 0,\n  OrderedByName,\n  OrderedByNameReversed,\n  OrderedByCreatedTime,\n  OrderedByCreatedTimeReversed,\n  OrderedByModifiedTime,\n  OrderedByModifiedTimeReversed,\n  ViewOrderMax\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::FindOptions);\n\nQ_DECLARE_METATYPE(vnotex::Segment);\n\n#endif // GLOBAL_H\n"
  },
  {
    "path": "src/core/historyitem.cpp",
    "content": "#include \"historyitem.h\"\n\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nHistoryItem::HistoryItem(const QString &p_path, int p_lineNumber,\n                         const QDateTime &p_lastAccessedTimeUtc)\n    : m_path(p_path), m_lineNumber(p_lineNumber), m_lastAccessedTimeUtc(p_lastAccessedTimeUtc) {}\n\nQJsonObject HistoryItem::toJson() const {\n  QJsonObject jobj;\n  jobj[QStringLiteral(\"path\")] = m_path;\n  jobj[QStringLiteral(\"line_number\")] = m_lineNumber;\n  jobj[QStringLiteral(\"last_accessed_time\")] = Utils::dateTimeStringUniform(m_lastAccessedTimeUtc);\n  return jobj;\n}\n\nvoid HistoryItem::fromJson(const QJsonObject &p_jobj) {\n  m_path = p_jobj[QStringLiteral(\"path\")].toString();\n  m_lineNumber = p_jobj[QStringLiteral(\"line_number\")].toInt();\n  m_lastAccessedTimeUtc =\n      Utils::dateTimeFromStringUniform(p_jobj[QStringLiteral(\"last_accessed_time\")].toString());\n}\n"
  },
  {
    "path": "src/core/historyitem.h",
    "content": "#ifndef HISTORYITEM_H\n#define HISTORYITEM_H\n\n#include <QDateTime>\n#include <QJsonObject>\n#include <QString>\n\nnamespace vnotex {\nstruct HistoryItem {\n  HistoryItem() = default;\n\n  HistoryItem(const QString &p_path, int p_lineNumber, const QDateTime &p_lastAccessedTimeUtc);\n\n  QJsonObject toJson() const;\n\n  void fromJson(const QJsonObject &p_jobj);\n\n  // Relative path if it is a node within a notebook.\n  QString m_path;\n\n  // 0-based.\n  int m_lineNumber = -1;\n\n  QDateTime m_lastAccessedTimeUtc;\n};\n} // namespace vnotex\n\n#endif // HISTORYITEM_H\n"
  },
  {
    "path": "src/core/historymgr.cpp",
    "content": "#include \"historymgr.h\"\n\n#include <QDebug>\n\n#include \"configmgr.h\"\n#include \"coreconfig.h\"\n#include \"exception.h\"\n#include \"notebookmgr.h\"\n#include \"sessionconfig.h\"\n#include \"vnotex.h\"\n#include <notebook/historyi.h>\n#include <notebook/notebook.h>\n#include <notebookbackend/inotebookbackend.h>\n\nusing namespace vnotex;\n\nbool HistoryItemFull::operator<(const HistoryItemFull &p_other) const {\n  if (m_item.m_lastAccessedTimeUtc < p_other.m_item.m_lastAccessedTimeUtc) {\n    return true;\n  } else if (m_item.m_lastAccessedTimeUtc > p_other.m_item.m_lastAccessedTimeUtc) {\n    return false;\n  } else {\n    return m_item.m_path < p_other.m_item.m_path;\n  }\n}\n\nHistoryMgr::HistoryMgr()\n    : m_perNotebookHistoryEnabled(\n          ConfigMgr::getInst().getCoreConfig().isPerNotebookHistoryEnabled()) {\n  connect(&VNoteX::getInst().getNotebookMgr(), &NotebookMgr::notebooksUpdated, this,\n          &HistoryMgr::loadHistory);\n\n  loadHistory();\n}\n\nstatic bool historyPtrCmp(const QSharedPointer<HistoryItemFull> &p_a,\n                          const QSharedPointer<HistoryItemFull> &p_b) {\n  return *p_a < *p_b;\n}\n\nvoid HistoryMgr::loadHistory() {\n  m_history.clear();\n\n  // Load from session.\n  {\n    const auto &history = ConfigMgr::getInst().getSessionConfig().getHistory();\n    for (const auto &item : history) {\n      auto fullItem = QSharedPointer<HistoryItemFull>::create();\n      fullItem->m_item = item;\n      m_history.push_back(fullItem);\n    }\n  }\n\n  // Load from notebooks.\n  if (m_perNotebookHistoryEnabled) {\n    const auto &notebooks = VNoteX::getInst().getNotebookMgr().getNotebooks();\n    for (const auto &nb : notebooks) {\n      auto historyI = nb->history();\n      if (!historyI) {\n        continue;\n      }\n      const auto &history = historyI->getHistory();\n      const auto &backend = nb->getBackend();\n      for (const auto &item : history) {\n        auto fullItem = QSharedPointer<HistoryItemFull>::create();\n        fullItem->m_item = item;\n\n        // We saved the absolute path by mistake in previous version.\n        try {\n          fullItem->m_item.m_path = backend->getFullPath(item.m_path);\n        } catch (Exception &p_e) {\n          qWarning() << \"skipped loading history item\" << item.m_path << \"from notebook\"\n                     << nb->getName() << p_e.what();\n          continue;\n        }\n\n        fullItem->m_notebookName = nb->getName();\n        m_history.push_back(fullItem);\n      }\n    }\n  }\n\n  std::sort(m_history.begin(), m_history.end(), historyPtrCmp);\n\n  qDebug() << \"loaded\" << m_history.size() << \"history items\";\n\n  emit historyUpdated();\n}\n\nconst QVector<QSharedPointer<HistoryItemFull>> &HistoryMgr::getHistory() const { return m_history; }\n\nvoid HistoryMgr::removeFromHistory(const QString &p_itemPath) {\n  for (int i = m_history.size() - 1; i >= 0; --i) {\n    if (m_history[i]->m_item.m_path == p_itemPath) {\n      m_history.remove(i);\n      break;\n    }\n  }\n}\n\nvoid HistoryMgr::add(const QString &p_path, int p_lineNumber, ViewWindowMode p_mode,\n                     bool p_readOnly, Notebook *p_notebook) {\n  const int maxHistoryCount = ConfigMgr::getInst().getCoreConfig().getHistoryMaxCount();\n  if (p_path.isEmpty() || maxHistoryCount == 0) {\n    return;\n  }\n\n  HistoryItem item(p_path, p_lineNumber, QDateTime::currentDateTimeUtc());\n\n  if (p_notebook && m_perNotebookHistoryEnabled && p_notebook->history()) {\n    p_notebook->history()->addHistory(item);\n  } else {\n    auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n    sessionConfig.addHistory(item);\n  }\n\n  // Maintain the combined queue.\n  {\n    removeFromHistory(item.m_path);\n\n    auto fullItem = QSharedPointer<HistoryItemFull>::create();\n    fullItem->m_item = item;\n    if (p_notebook) {\n      fullItem->m_notebookName = p_notebook->getName();\n    }\n    m_history.append(fullItem);\n  }\n\n  // Update m_lastClosedFiles.\n  {\n    for (int i = m_lastClosedFiles.size() - 1; i >= 0; --i) {\n      if (m_lastClosedFiles[i].m_path == p_path) {\n        m_lastClosedFiles.remove(i);\n        break;\n      }\n    }\n\n    m_lastClosedFiles.append(LastClosedFile());\n    auto &file = m_lastClosedFiles.back();\n    file.m_path = p_path;\n    file.m_lineNumber = p_lineNumber;\n    file.m_mode = p_mode;\n    file.m_readOnly = p_readOnly;\n\n    if (m_lastClosedFiles.size() > maxHistoryCount) {\n      m_lastClosedFiles.remove(0, m_lastClosedFiles.size() - maxHistoryCount);\n    }\n  }\n\n  emit historyUpdated();\n}\n\nvoid HistoryMgr::remove(const QVector<QString> &p_paths, Notebook *p_notebook) {\n  for (const QString &p_itemPath : p_paths) {\n    if (p_notebook && m_perNotebookHistoryEnabled && p_notebook->history()) {\n      p_notebook->history()->removeHistory(p_itemPath);\n    } else {\n      auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n      sessionConfig.removeHistory(p_itemPath);\n    }\n\n    removeFromHistory(p_itemPath);\n  }\n\n  emit historyUpdated();\n}\n\nvoid HistoryMgr::removeHistoryItem(QVector<HistoryItem> &p_history, const QString &p_itemPath) {\n  for (int i = p_history.size() - 1; i >= 0; --i) {\n    if (p_history[i].m_path == p_itemPath) {\n      p_history.remove(i);\n      break;\n    }\n  }\n}\n\nvoid HistoryMgr::insertHistoryItem(QVector<HistoryItem> &p_history, const HistoryItem &p_item) {\n  removeHistoryItem(p_history, p_item.m_path);\n  p_history.append(p_item);\n\n  const int maxHistoryCount = ConfigMgr::getInst().getCoreConfig().getHistoryMaxCount();\n  if (p_history.size() > maxHistoryCount) {\n    p_history.remove(0, p_history.size() - maxHistoryCount);\n  }\n}\n\nvoid HistoryMgr::clear() {\n  ConfigMgr::getInst().getSessionConfig().clearHistory();\n\n  if (m_perNotebookHistoryEnabled) {\n    const auto &notebooks = VNoteX::getInst().getNotebookMgr().getNotebooks();\n    for (const auto &nb : notebooks) {\n      if (auto historyI = nb->history()) {\n        historyI->clearHistory();\n      }\n    }\n  }\n\n  loadHistory();\n}\n\nHistoryMgr::LastClosedFile HistoryMgr::popLastClosedFile() {\n  if (m_lastClosedFiles.isEmpty()) {\n    return LastClosedFile();\n  }\n\n  auto file = m_lastClosedFiles.back();\n  m_lastClosedFiles.pop_back();\n  return file;\n}\n"
  },
  {
    "path": "src/core/historymgr.h",
    "content": "#ifndef HISTORYMGR_H\n#define HISTORYMGR_H\n\n#include <QObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"global.h\"\n#include \"historyitem.h\"\n#include \"noncopyable.h\"\n\nnamespace vnotex {\nclass Notebook;\n\nstruct HistoryItemFull {\n  bool operator<(const HistoryItemFull &p_other) const;\n\n  HistoryItem m_item;\n\n  QString m_notebookName;\n};\n\n// Combine the history from all notebooks and from SessionConfig.\n// SessionConfig will store history about external files.\n// Also provide stack of files accessed during current session, which could be re-opened\n// via Ctrl+Shit+T.\nclass HistoryMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  struct LastClosedFile {\n    QString m_path;\n\n    int m_lineNumber = 0;\n\n    ViewWindowMode m_mode = ViewWindowMode::Read;\n\n    bool m_readOnly = false;\n  };\n\n  static HistoryMgr &getInst() {\n    static HistoryMgr inst;\n    return inst;\n  }\n\n  const QVector<QSharedPointer<HistoryItemFull>> &getHistory() const;\n\n  void add(const QString &p_path, int p_lineNumber, ViewWindowMode p_mode, bool p_readOnly,\n           Notebook *p_notebook);\n\n  void remove(const QVector<QString> &p_paths, Notebook *p_notebook);\n\n  void clear();\n\n  LastClosedFile popLastClosedFile();\n\n  static void removeHistoryItem(QVector<HistoryItem> &p_history, const QString &p_itemPath);\n\n  static void insertHistoryItem(QVector<HistoryItem> &p_history, const HistoryItem &p_item);\n\nsignals:\n  void historyUpdated();\n\nprivate:\n  HistoryMgr();\n\n  void loadHistory();\n\n  // Sorted by last accessed time ascendingly.\n  QVector<QSharedPointer<HistoryItemFull>> m_history;\n\n  void removeFromHistory(const QString &p_itemPath);\n\n  QVector<LastClosedFile> m_lastClosedFiles;\n\n  const bool m_perNotebookHistoryEnabled = false;\n};\n} // namespace vnotex\n\n#endif // HISTORYMGR_H\n"
  },
  {
    "path": "src/core/htmltemplatehelper.cpp",
    "content": "#include \"htmltemplatehelper.h\"\n\n#include <QDebug>\n\n#include <core/configmgr.h>\n#include <core/exception.h>\n#include <core/markdowneditorconfig.h>\n#include <core/mindmapeditorconfig.h>\n#include <core/pdfviewerconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/fileutils.h>\n#include <utils/htmlutils.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nHtmlTemplateHelper::Template HtmlTemplateHelper::s_markdownViewerTemplate;\n\nHtmlTemplateHelper::Template HtmlTemplateHelper::s_pdfViewerTemplate;\n\nHtmlTemplateHelper::Template HtmlTemplateHelper::s_mindMapEditorTemplate;\n\nQString MarkdownWebGlobalOptions::toJavascriptObject() const {\n  return QStringLiteral(\"window.vxOptions = {\\n\") +\n         QStringLiteral(\"webPlantUml: %1,\\n\").arg(Utils::boolToString(m_webPlantUml)) +\n         QStringLiteral(\"plantUmlWebService: '%1',\\n\").arg(m_plantUmlWebService) +\n         QStringLiteral(\"webGraphviz: %1,\\n\").arg(Utils::boolToString(m_webGraphviz)) +\n         QStringLiteral(\"mathJaxScript: '%1',\\n\").arg(m_mathJaxScript) +\n         QStringLiteral(\"constrainImageWidthEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_constrainImageWidthEnabled)) +\n         QStringLiteral(\"imageAlignCenterEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_imageAlignCenterEnabled)) +\n         QStringLiteral(\"protectFromXss: %1,\\n\").arg(Utils::boolToString(m_protectFromXss)) +\n         QStringLiteral(\"htmlTagEnabled: %1,\\n\").arg(Utils::boolToString(m_htmlTagEnabled)) +\n         QStringLiteral(\"autoBreakEnabled: %1,\\n\").arg(Utils::boolToString(m_autoBreakEnabled)) +\n         QStringLiteral(\"linkifyEnabled: %1,\\n\").arg(Utils::boolToString(m_linkifyEnabled)) +\n         QStringLiteral(\"indentFirstLineEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_indentFirstLineEnabled)) +\n         QStringLiteral(\"codeBlockLineNumberEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_codeBlockLineNumberEnabled)) +\n         QStringLiteral(\"sectionNumberEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_sectionNumberEnabled)) +\n         QStringLiteral(\"transparentBackgroundEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_transparentBackgroundEnabled)) +\n         QStringLiteral(\"scrollable: %1,\\n\").arg(Utils::boolToString(m_scrollable)) +\n         QStringLiteral(\"bodyWidth: %1,\\n\").arg(m_bodyWidth) +\n         QStringLiteral(\"bodyHeight: %1,\\n\").arg(m_bodyHeight) +\n         QStringLiteral(\"transformSvgToPngEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_transformSvgToPngEnabled)) +\n         QStringLiteral(\"mathJaxScale: %1,\\n\").arg(m_mathJaxScale) +\n         QStringLiteral(\"removeCodeToolBarEnabled: %1,\\n\")\n             .arg(Utils::boolToString(m_removeCodeToolBarEnabled)) +\n         QStringLiteral(\"sectionNumberBaseLevel: %1\\n\").arg(m_sectionNumberBaseLevel) +\n         QStringLiteral(\"}\");\n}\n\n// Read \"global_styles\" from resource and fill the holder with the content.\nstatic void fillGlobalStyles(QString &p_template, const WebResource &p_resource,\n                             const QString &p_additionalStyles) {\n  QString styles;\n  for (const auto &ele : p_resource.m_resources) {\n    if (ele.isGlobal()) {\n      if (ele.m_enabled) {\n        for (const auto &style : ele.m_styles) {\n          // Read the style file content.\n          auto styleFile = ConfigMgr::getInst().getUserOrAppFile(style);\n          try {\n            styles += FileUtils::readTextFile(styleFile);\n          } catch (Exception &p_e) {\n            qWarning() << \"failed to read global styles\" << ele.m_name << styleFile << p_e.what();\n          }\n        }\n      }\n      break;\n    }\n  }\n\n  styles += p_additionalStyles;\n\n  if (!styles.isEmpty()) {\n    p_template.replace(\"/* VX_GLOBAL_STYLES_PLACEHOLDER */\", styles);\n  }\n}\n\nstatic QString fillStyleTag(const QString &p_styleFile) {\n  if (p_styleFile.isEmpty()) {\n    return \"\";\n  }\n  auto url = PathUtils::pathToUrl(p_styleFile);\n  return QStringLiteral(\"<link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"%1\\\">\\n\")\n      .arg(url.toString());\n}\n\nstatic QString fillScriptTag(const QString &p_scriptFile) {\n  if (p_scriptFile.isEmpty()) {\n    return \"\";\n  }\n  auto url = PathUtils::pathToUrl(p_scriptFile);\n  return QStringLiteral(\"<script type=\\\"text/javascript\\\" src=\\\"%1\\\"></script>\\n\")\n      .arg(url.toString());\n}\n\nstatic void fillThemeStyles(QString &p_template, const QString &p_webStyleSheetFile,\n                            const QString &p_highlightStyleSheetFile) {\n  QString styles;\n  styles += fillStyleTag(p_webStyleSheetFile);\n  styles += fillStyleTag(p_highlightStyleSheetFile);\n\n  if (!styles.isEmpty()) {\n    p_template.replace(QStringLiteral(\"<!-- VX_THEME_STYLES_PLACEHOLDER -->\"), styles);\n  }\n}\n\nstatic void fillGlobalOptions(QString &p_template, const MarkdownWebGlobalOptions &p_opts) {\n  p_template.replace(QStringLiteral(\"/* VX_GLOBAL_OPTIONS_PLACEHOLDER */\"),\n                     p_opts.toJavascriptObject());\n}\n\n// Read all other resources in @p_resource and fill the holder with proper resource path.\nstatic void fillResources(QString &p_template, const WebResource &p_resource) {\n  QString styles;\n  QString scripts;\n\n  for (const auto &ele : p_resource.m_resources) {\n    if (ele.m_enabled && !ele.isGlobal()) {\n      // Styles.\n      for (const auto &style : ele.m_styles) {\n        auto styleFile = ConfigMgr::getInst().getUserOrAppFile(style);\n        styles += fillStyleTag(styleFile);\n      }\n\n      // Scripts.\n      for (const auto &script : ele.m_scripts) {\n        auto scriptFile = ConfigMgr::getInst().getUserOrAppFile(script);\n        scripts += fillScriptTag(scriptFile);\n      }\n    }\n  }\n\n  if (!styles.isEmpty()) {\n    p_template.replace(QStringLiteral(\"<!-- VX_STYLES_PLACEHOLDER -->\"), styles);\n  }\n\n  if (!scripts.isEmpty()) {\n    p_template.replace(QStringLiteral(\"<!-- VX_SCRIPTS_PLACEHOLDER -->\"), scripts);\n  }\n}\n\nstatic void fillResourcesByContent(QString &p_template, const WebResource &p_resource) {\n  QString styles;\n  QString scripts;\n\n  for (const auto &ele : p_resource.m_resources) {\n    if (ele.m_enabled && !ele.isGlobal()) {\n      try {\n        // Styles.\n        for (const auto &style : ele.m_styles) {\n          auto styleFile = ConfigMgr::getInst().getUserOrAppFile(style);\n          styles += FileUtils::readTextFile(styleFile);\n        }\n\n        // Scripts.\n        for (const auto &script : ele.m_scripts) {\n          auto scriptFile = ConfigMgr::getInst().getUserOrAppFile(script);\n          scripts += FileUtils::readTextFile(scriptFile);\n        }\n      } catch (Exception &p_e) {\n        qWarning() << \"failed to read resource\" << ele.m_name << p_e.what();\n      }\n    }\n  }\n\n  if (!styles.isEmpty()) {\n    p_template.replace(QStringLiteral(\"/* VX_STYLES_PLACEHOLDER */\"), styles);\n  }\n\n  if (!scripts.isEmpty()) {\n    p_template.replace(QStringLiteral(\"/* VX_SCRIPTS_PLACEHOLDER */\"), scripts);\n  }\n}\n\nconst QString &HtmlTemplateHelper::getMarkdownViewerTemplate() {\n  return s_markdownViewerTemplate.m_template;\n}\n\nvoid HtmlTemplateHelper::updateMarkdownViewerTemplate(const MarkdownEditorConfig &p_config,\n                                                      bool p_force) {\n  if (!p_force && p_config.revision() == s_markdownViewerTemplate.m_revision) {\n    return;\n  }\n\n  s_markdownViewerTemplate.m_revision = p_config.revision();\n\n  MarkdownParas paras;\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  paras.m_webStyleSheetFile = themeMgr.getFile(Theme::File::WebStyleSheet);\n  paras.m_highlightStyleSheetFile = themeMgr.getFile(Theme::File::HighlightStyleSheet);\n\n  s_markdownViewerTemplate.m_template = generateMarkdownViewerTemplate(p_config, paras);\n}\n\nQString HtmlTemplateHelper::generateMarkdownViewerTemplate(const MarkdownEditorConfig &p_config,\n                                                           const MarkdownParas &p_paras) {\n  const auto &viewerResource = p_config.getViewerResource();\n  const auto templateFile = ConfigMgr::getInst().getUserOrAppFile(viewerResource.m_template);\n  QString htmlTemplate;\n  try {\n    htmlTemplate = FileUtils::readTextFile(templateFile);\n  } catch (Exception &p_e) {\n    qWarning() << \"failed to read HTML template\" << templateFile << p_e.what();\n    return errorPage();\n  }\n\n  fillGlobalStyles(htmlTemplate, viewerResource, \"\");\n\n  fillThemeStyles(htmlTemplate, p_paras.m_webStyleSheetFile, p_paras.m_highlightStyleSheetFile);\n\n  {\n    MarkdownWebGlobalOptions opts;\n    opts.m_webPlantUml = p_config.getWebPlantUml();\n    opts.m_plantUmlWebService = p_config.getPlantUmlWebService();\n    opts.m_webGraphviz = p_config.getWebGraphviz();\n    opts.m_mathJaxScript = p_config.getMathJaxScript();\n    opts.m_sectionNumberEnabled =\n        p_config.getSectionNumberMode() == MarkdownEditorConfig::SectionNumberMode::Read;\n    opts.m_sectionNumberBaseLevel = p_config.getSectionNumberBaseLevel();\n    opts.m_constrainImageWidthEnabled = p_config.getConstrainImageWidthEnabled();\n    opts.m_imageAlignCenterEnabled = p_config.getImageAlignCenterEnabled();\n    opts.m_protectFromXss = p_config.getProtectFromXss();\n    opts.m_htmlTagEnabled = p_config.getHtmlTagEnabled();\n    opts.m_autoBreakEnabled = p_config.getAutoBreakEnabled();\n    opts.m_linkifyEnabled = p_config.getLinkifyEnabled();\n    opts.m_indentFirstLineEnabled = p_config.getIndentFirstLineEnabled();\n    opts.m_codeBlockLineNumberEnabled = p_config.getCodeBlockLineNumberEnabled();\n    opts.m_transparentBackgroundEnabled = p_paras.m_transparentBackgroundEnabled;\n    opts.m_scrollable = p_paras.m_scrollable;\n    opts.m_bodyWidth = p_paras.m_bodyWidth;\n    opts.m_bodyHeight = p_paras.m_bodyHeight;\n    opts.m_transformSvgToPngEnabled = p_paras.m_transformSvgToPngEnabled;\n    opts.m_mathJaxScale = p_paras.m_mathJaxScale;\n    opts.m_removeCodeToolBarEnabled = p_paras.m_removeCodeToolBarEnabled;\n    fillGlobalOptions(htmlTemplate, opts);\n  }\n\n  fillResources(htmlTemplate, viewerResource);\n\n  return htmlTemplate;\n}\n\nQString HtmlTemplateHelper::generateMarkdownExportTemplate(const MarkdownEditorConfig &p_config,\n                                                           bool p_addOutlinePanel) {\n  auto exportResource = p_config.getExportResource();\n  const auto templateFile = ConfigMgr::getInst().getUserOrAppFile(exportResource.m_template);\n  QString htmlTemplate;\n  try {\n    htmlTemplate = FileUtils::readTextFile(templateFile);\n  } catch (Exception &p_e) {\n    qWarning() << \"failed to read Markdown export HTML template\" << templateFile << p_e.what();\n    return errorPage();\n  }\n\n  fillGlobalStyles(htmlTemplate, exportResource, \"\");\n\n  fillOutlinePanel(htmlTemplate, exportResource, p_addOutlinePanel);\n\n  fillResourcesByContent(htmlTemplate, exportResource);\n\n  return htmlTemplate;\n}\n\nvoid HtmlTemplateHelper::fillOutlinePanel(QString &p_template, WebResource &p_exportResource,\n                                          bool p_addOutlinePanel) {\n  for (auto &ele : p_exportResource.m_resources) {\n    if (ele.m_name == QStringLiteral(\"outline\")) {\n      ele.m_enabled = p_addOutlinePanel;\n      break;\n    }\n  }\n\n  // Remove static content to make the page clean.\n  if (!p_addOutlinePanel) {\n    int startIdx = p_template.indexOf(\"<!-- VX_OUTLINE_PANEL_START -->\");\n    QString endMark(\"<!-- VX_OUTLINE_PANEL_END -->\");\n    int endIdx = p_template.lastIndexOf(endMark);\n    Q_ASSERT(startIdx > -1 && endIdx > startIdx);\n    p_template.remove(startIdx, endIdx + endMark.size() - startIdx);\n\n    startIdx = p_template.indexOf(\"<!-- VX_OUTLINE_BUTTON_START -->\");\n    endMark = \"<!-- VX_OUTLINE_BUTTON_END -->\";\n    endIdx = p_template.lastIndexOf(endMark);\n    Q_ASSERT(startIdx > -1 && endIdx > startIdx);\n    p_template.remove(startIdx, endIdx + endMark.size() - startIdx);\n  }\n}\n\nvoid HtmlTemplateHelper::fillTitle(QString &p_template, const QString &p_title) {\n  if (!p_title.isEmpty()) {\n    p_template.replace(\"<!-- VX_TITLE_PLACEHOLDER -->\",\n                       QStringLiteral(\"<title>%1</title>\").arg(HtmlUtils::escapeHtml(p_title)));\n  }\n}\n\nvoid HtmlTemplateHelper::fillStyleContent(QString &p_template, const QString &p_styles) {\n  p_template.replace(\"/* VX_STYLES_CONTENT_PLACEHOLDER */\", p_styles);\n}\n\nvoid HtmlTemplateHelper::fillHeadContent(QString &p_template, const QString &p_head) {\n  p_template.replace(\"<!-- VX_HEAD_PLACEHOLDER -->\", p_head);\n}\n\nvoid HtmlTemplateHelper::fillContent(QString &p_template, const QString &p_content) {\n  p_template.replace(\"<!-- VX_CONTENT_PLACEHOLDER -->\", p_content);\n}\n\nvoid HtmlTemplateHelper::fillBodyClassList(QString &p_template, const QString &p_classList) {\n  p_template.replace(\"<!-- VX_BODY_CLASS_LIST_PLACEHOLDER -->\", p_classList);\n}\n\nQString HtmlTemplateHelper::errorPage() {\n  return VNoteX::tr(\"Failed to load HTML template. Check the logs for details. \"\n                    \"Try deleting the user configuration file and the default configuration file.\");\n}\n\nconst QString &HtmlTemplateHelper::getPdfViewerTemplate() { return s_pdfViewerTemplate.m_template; }\n\nconst QString &HtmlTemplateHelper::getPdfViewerTemplatePath() {\n  return s_pdfViewerTemplate.m_templatePath;\n}\n\nvoid HtmlTemplateHelper::updatePdfViewerTemplate(const PdfViewerConfig &p_config, bool p_force) {\n  if (!p_force && p_config.revision() == s_pdfViewerTemplate.m_revision) {\n    return;\n  }\n\n  s_pdfViewerTemplate.m_revision = p_config.revision();\n  generatePdfViewerTemplate(p_config, s_pdfViewerTemplate);\n}\n\nvoid HtmlTemplateHelper::generatePdfViewerTemplate(const PdfViewerConfig &p_config,\n                                                   Template &p_template) {\n  const auto &viewerResource = p_config.getViewerResource();\n  p_template.m_templatePath = ConfigMgr::getInst().getUserOrAppFile(viewerResource.m_template);\n  try {\n    p_template.m_template = FileUtils::readTextFile(p_template.m_templatePath);\n  } catch (Exception &p_e) {\n    qWarning() << \"failed to read HTML template\" << p_template.m_templatePath << p_e.what();\n    p_template.m_template = errorPage();\n    return;\n  }\n\n  fillResources(p_template.m_template, viewerResource);\n}\n\nconst QString &HtmlTemplateHelper::getMindMapEditorTemplate() {\n  return s_mindMapEditorTemplate.m_template;\n}\n\nvoid HtmlTemplateHelper::updateMindMapEditorTemplate(const MindMapEditorConfig &p_config,\n                                                     bool p_force) {\n  if (!p_force && p_config.revision() == s_mindMapEditorTemplate.m_revision) {\n    return;\n  }\n\n  s_mindMapEditorTemplate.m_revision = p_config.revision();\n\n  generateMindMapEditorTemplate(p_config, QString() /* Use empty theme style for now */,\n                                s_mindMapEditorTemplate);\n}\n\nvoid HtmlTemplateHelper::generateMindMapEditorTemplate(const MindMapEditorConfig &p_config,\n                                                       const QString &p_webStyleSheetFile,\n                                                       Template &p_template) {\n  const auto &editorResource = p_config.getEditorResource();\n  p_template.m_templatePath = ConfigMgr::getInst().getUserOrAppFile(editorResource.m_template);\n  try {\n    p_template.m_template = FileUtils::readTextFile(p_template.m_templatePath);\n  } catch (Exception &p_e) {\n    qWarning() << \"failed to read HTML template\" << p_template.m_templatePath << p_e.what();\n    p_template.m_template = errorPage();\n    return;\n  }\n\n  fillThemeStyles(p_template.m_template, p_webStyleSheetFile, QString());\n\n  fillResources(p_template.m_template, editorResource);\n}\n"
  },
  {
    "path": "src/core/htmltemplatehelper.h",
    "content": "#ifndef HTMLTEMPLATEHELPER_H\n#define HTMLTEMPLATEHELPER_H\n\n#include <QString>\n\nnamespace vnotex {\nclass MarkdownEditorConfig;\nclass PdfViewerConfig;\nclass MindMapEditorConfig;\nstruct WebResource;\n\n// Global options to be passed to Web side at the very beginning for Markdown.\nstruct MarkdownWebGlobalOptions {\n  bool m_webPlantUml = true;\n\n  QString m_plantUmlWebService;\n\n  bool m_webGraphviz = true;\n\n  QString m_mathJaxScript;\n\n  bool m_sectionNumberEnabled = true;\n\n  int m_sectionNumberBaseLevel = 2;\n\n  bool m_constrainImageWidthEnabled = true;\n\n  bool m_imageAlignCenterEnabled = true;\n\n  bool m_protectFromXss = false;\n\n  bool m_htmlTagEnabled = true;\n\n  bool m_autoBreakEnabled = false;\n\n  bool m_linkifyEnabled = true;\n\n  bool m_indentFirstLineEnabled = false;\n\n  bool m_codeBlockLineNumberEnabled = true;\n\n  // Force to use transparent background.\n  bool m_transparentBackgroundEnabled = false;\n\n  // Whether the content elements are scrollable. Like PDF, it is false.\n  bool m_scrollable = true;\n\n  int m_bodyWidth = -1;\n\n  int m_bodyHeight = -1;\n\n  // Whether transform inlie SVG to PNG.\n  // For wkhtmltopdf converter, it could not render some inline SVG correctly.\n  // This is just a hint not mandatory. For now, PlantUML and Graphviz needs this.\n  bool m_transformSvgToPngEnabled = false;\n\n  // wkhtmltopdf will make the MathJax formula too small.\n  qreal m_mathJaxScale = -1;\n\n  // Whether remove the tool bar of code blocks added by Prism.js.\n  bool m_removeCodeToolBarEnabled = false;\n\n  QString toJavascriptObject() const;\n};\n\n// Help to generate and update HTML templates.\nclass HtmlTemplateHelper {\npublic:\n  struct MarkdownParas {\n    QString m_webStyleSheetFile;\n\n    QString m_highlightStyleSheetFile;\n\n    bool m_transparentBackgroundEnabled = false;\n\n    bool m_scrollable = true;\n\n    int m_bodyWidth = -1;\n\n    int m_bodyHeight = -1;\n\n    bool m_transformSvgToPngEnabled = false;\n\n    qreal m_mathJaxScale = -1;\n\n    bool m_removeCodeToolBarEnabled = false;\n  };\n\n  HtmlTemplateHelper() = delete;\n\n  // For MarkdownViewer.\n  static const QString &getMarkdownViewerTemplate();\n  static void updateMarkdownViewerTemplate(const MarkdownEditorConfig &p_config,\n                                           bool p_force = false);\n\n  static QString generateMarkdownViewerTemplate(const MarkdownEditorConfig &p_config,\n                                                const MarkdownParas &p_paras);\n\n  static QString generateMarkdownExportTemplate(const MarkdownEditorConfig &p_config,\n                                                bool p_addOutlinePanel);\n\n  // For common HTML content manipulation.\n  static void fillTitle(QString &p_template, const QString &p_title);\n\n  static void fillStyleContent(QString &p_template, const QString &p_styles);\n\n  static void fillHeadContent(QString &p_template, const QString &p_head);\n\n  static void fillContent(QString &p_template, const QString &p_content);\n\n  static void fillBodyClassList(QString &p_template, const QString &p_classList);\n\n  static void fillOutlinePanel(QString &p_template, WebResource &p_exportResource,\n                               bool p_addOutlinePanel);\n\n  // For PdfViewer.\n  static const QString &getPdfViewerTemplate();\n  static void updatePdfViewerTemplate(const PdfViewerConfig &p_config, bool p_force = false);\n\n  static const QString &getPdfViewerTemplatePath();\n\n  // For MindMapEditor.\n  static const QString &getMindMapEditorTemplate();\n  static void updateMindMapEditorTemplate(const MindMapEditorConfig &p_config,\n                                          bool p_force = false);\n\nprivate:\n  struct Template {\n    int m_revision = -1;\n    QString m_template;\n    QString m_templatePath;\n  };\n\n  static QString errorPage();\n\n  static void generatePdfViewerTemplate(const PdfViewerConfig &p_config, Template &p_template);\n\n  static void generateMindMapEditorTemplate(const MindMapEditorConfig &p_config,\n                                            const QString &p_webStyleSheetFile,\n                                            Template &p_template);\n\n  static Template s_markdownViewerTemplate;\n\n  static Template s_pdfViewerTemplate;\n\n  static Template s_mindMapEditorTemplate;\n};\n} // namespace vnotex\n\n#endif // HTMLTEMPLATEHELPER_H\n"
  },
  {
    "path": "src/core/iconfig.h",
    "content": "#ifndef ICONFIG_H\n#define ICONFIG_H\n\n#include <QBitArray>\n#include <QDataStream>\n#include <QIODevice>\n#include <QJsonArray>\n#include <QJsonObject>\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass ConfigMgr;\n\n// Interface for Config.\nclass IConfig {\npublic:\n  IConfig(ConfigMgr *p_mgr, IConfig *p_topConfig = nullptr)\n      : m_topConfig(p_topConfig), m_mgr(p_mgr) {}\n\n  virtual ~IConfig() {}\n\n  // Called to init top level config.\n  virtual void init() { Q_ASSERT(false); }\n\n  // Init from QJsonObject.\n  virtual void init(const QJsonObject &p_default, const QJsonObject &p_user) {\n    Q_UNUSED(p_default);\n    Q_UNUSED(p_user);\n    Q_ASSERT(false);\n  }\n\n  virtual void writeToSettings() const {\n    Q_ASSERT(m_topConfig);\n    m_topConfig->writeToSettings();\n  }\n\n  virtual QJsonObject toJson() const = 0;\n\n  const QString &getSessionName() const { return m_sessionName; }\n\n  virtual int revision() const { return m_revision; }\n\n  void update() {\n    ++m_revision;\n    writeToSettings();\n  }\n\nprotected:\n  ConfigMgr *getMgr() const { return m_mgr; }\n\n  // First read user config, then the default config.\n  static QJsonValue read(const QJsonObject &p_default, const QJsonObject &p_user,\n                         const QString &p_key) {\n    auto it = p_user.find(p_key);\n    if (it != p_user.end()) {\n      return it.value();\n    } else {\n      return p_default.value(p_key);\n    }\n  }\n\n  static QString readString(const QJsonObject &p_default, const QJsonObject &p_user,\n                            const QString &p_key) {\n    return read(p_default, p_user, p_key).toString();\n  }\n\n  static QStringList readStringList(const QJsonObject &p_default, const QJsonObject &p_user,\n                                    const QString &p_key) {\n    auto arr = read(p_default, p_user, p_key).toArray();\n    QStringList res;\n    res.reserve(arr.size());\n    for (int i = 0; i < arr.size(); ++i) {\n      res.push_back(arr[i].toString());\n    }\n    return res;\n  }\n\n  static QStringList readStringList(const QJsonObject &p_obj, const QString &p_key) {\n    auto arr = p_obj.value(p_key).toArray();\n    QStringList res;\n    res.reserve(arr.size());\n    for (int i = 0; i < arr.size(); ++i) {\n      res.push_back(arr[i].toString());\n    }\n    return res;\n  }\n\n  static void writeStringList(QJsonObject &p_obj, const QString &p_key, const QStringList &p_list) {\n    QJsonArray arr;\n    for (const auto &ele : p_list) {\n      arr.push_back(ele);\n    }\n\n    p_obj[p_key] = arr;\n  }\n\n  static QString readString(const QJsonObject &p_obj, const QString &p_key) {\n    return p_obj.value(p_key).toString();\n  }\n\n  static QByteArray readByteArray(const QJsonObject &p_obj, const QString &p_key) {\n    return QByteArray::fromBase64(readString(p_obj, p_key).toLatin1());\n  }\n\n  static void writeByteArray(QJsonObject &p_obj, const QString &p_key, const QByteArray &p_bytes) {\n    p_obj.insert(p_key, QLatin1String(p_bytes.toBase64()));\n  }\n\n  static QBitArray readBitArray(const QJsonObject &p_obj, const QString &p_key) {\n    auto bytes = readByteArray(p_obj, p_key);\n    if (bytes.isEmpty()) {\n      return QBitArray();\n    }\n\n    QDataStream ds(bytes);\n    ds.setVersion(QDataStream::Qt_5_12);\n\n    QBitArray bits;\n    ds >> bits;\n    return bits;\n  }\n\n  static void writeBitArray(QJsonObject &p_obj, const QString &p_key, const QBitArray &p_bits) {\n    QByteArray bytes;\n    QDataStream ds(&bytes, QIODevice::WriteOnly);\n    ds.setVersion(QDataStream::Qt_5_12);\n    ds << p_bits;\n\n    writeByteArray(p_obj, p_key, bytes);\n  }\n\n  static bool readBool(const QJsonObject &p_default, const QJsonObject &p_user,\n                       const QString &p_key) {\n    return read(p_default, p_user, p_key).toBool();\n  }\n\n  static bool readBool(const QJsonObject &p_obj, const QString &p_key) {\n    return p_obj.value(p_key).toBool();\n  }\n\n  static int readInt(const QJsonObject &p_default, const QJsonObject &p_user,\n                     const QString &p_key) {\n    return read(p_default, p_user, p_key).toInt();\n  }\n\n  static qreal readReal(const QJsonObject &p_default, const QJsonObject &p_user,\n                        const QString &p_key) {\n    return read(p_default, p_user, p_key).toDouble();\n  }\n\n  static bool isUndefinedKey(const QJsonObject &p_default, const QJsonObject &p_user,\n                             const QString &p_key) {\n    return !p_default.contains(p_key) && !p_user.contains(p_key);\n  }\n\n  static bool isUndefinedKey(const QJsonObject &p_obj, const QString &p_key) {\n    return !p_obj.contains(p_key);\n  }\n\n  template <typename T> static void updateConfig(T &p_cur, const T &p_new, IConfig *p_config) {\n    if (p_cur == p_new) {\n      return;\n    }\n\n    ++p_config->m_revision;\n    p_cur = p_new;\n    p_config->writeToSettings();\n  }\n\n  template <typename T>\n  static void updateConfigWithoutCheck(T &p_cur, const T &p_new, IConfig *p_config) {\n    ++p_config->m_revision;\n    p_cur = p_new;\n    p_config->writeToSettings();\n  }\n\n  IConfig *m_topConfig = nullptr;\n\n  QString m_sessionName;\n\n  // Used to indicate whether there is change after last read.\n  int m_revision = 0;\n\nprivate:\n  ConfigMgr *m_mgr = nullptr;\n};\n} // namespace vnotex\n\n#endif // ICONFIG_H\n"
  },
  {
    "path": "src/core/location.h",
    "content": "#ifndef LOCATION_H\n#define LOCATION_H\n\n#include <QDebug>\n\n#include \"global.h\"\n\nnamespace vnotex {\nstruct Location {\n  friend QDebug operator<<(QDebug p_dbg, const Location &p_loc) {\n    QDebugStateSaver saver(p_dbg);\n    p_dbg.nospace() << p_loc.m_path << \":\" << p_loc.m_lineNumber;\n    return p_dbg;\n  }\n\n  // TODO: support encoding like buffer/notebook.\n  QString m_path;\n\n  QString m_displayPath;\n\n  // 0-based.\n  int m_lineNumber = -1;\n};\n\nenum class LocationType { Buffer, File, Folder, Notebook };\n\nstruct ComplexLocation {\n  struct Line {\n    Line() = default;\n\n    Line(int p_lineNumber, const QString &p_text, const QList<Segment> &p_segments)\n        : m_lineNumber(p_lineNumber), m_text(p_text), m_segments(p_segments) {}\n\n    // 0-based.\n    int m_lineNumber = -1;\n\n    QString m_text;\n\n    QList<Segment> m_segments;\n  };\n\n  void addLine(int p_lineNumber, const QString &p_text, const QList<Segment> &p_segments) {\n    m_lines.push_back(Line(p_lineNumber, p_text, p_segments));\n  }\n\n  friend QDebug operator<<(QDebug p_dbg, const ComplexLocation &p_loc) {\n    QDebugStateSaver saver(p_dbg);\n    p_dbg.nospace() << static_cast<int>(p_loc.m_type) << p_loc.m_path << p_loc.m_displayPath;\n    return p_dbg;\n  }\n\n  LocationType m_type = LocationType::File;\n\n  QString m_path;\n\n  QString m_displayPath;\n\n  QVector<Line> m_lines;\n};\n} // namespace vnotex\n\n#endif // LOCATION_H\n"
  },
  {
    "path": "src/core/logger.cpp",
    "content": "#include \"logger.h\"\n\n#include \"configmgr.h\"\n#include <QFile>\n#include <QTextStream>\n\nusing namespace vnotex;\n\nQFile Logger::s_file;\n\nbool Logger::s_verbose = false;\n\nbool Logger::s_logToStderr = false;\n\nvoid Logger::init(bool p_verbose, bool p_logToStderr) {\n  s_verbose = p_verbose;\n  s_logToStderr = p_logToStderr;\n\n#if defined(QT_NO_DEBUG)\n  if (!s_logToStderr) {\n    s_file.setFileName(ConfigMgr::getInst().getLogFile());\n    if (s_file.size() >= 5 * 1024 * 1024) {\n      s_file.open(QIODevice::WriteOnly | QIODevice::Text);\n    } else {\n      s_file.open(QIODevice::Append | QIODevice::Text);\n    }\n  }\n#else\n  // Always log to stderr in debug.\n  s_logToStderr = true;\n#endif\n\n  qInstallMessageHandler(Logger::log);\n}\n\nstatic QString getFileName(const char *p_file) {\n  QString file(p_file);\n  int idx = file.lastIndexOf(QChar('/'));\n  if (idx == -1) {\n    idx = file.lastIndexOf(QChar('\\\\'));\n  }\n\n  if (idx == -1) {\n    return file;\n  } else {\n    return file.mid(idx + 1);\n  }\n}\n\nvoid Logger::log(QtMsgType p_type, const QMessageLogContext &p_context, const QString &p_msg) {\n#if defined(QT_NO_DEBUG)\n  if (!s_verbose && p_type == QtDebugMsg) {\n    return;\n  }\n#endif\n\n  QByteArray localMsg = p_msg.toUtf8();\n  QString header;\n\n  switch (p_type) {\n  case QtDebugMsg:\n    header = QStringLiteral(\"Debug:\");\n    break;\n\n  case QtInfoMsg:\n    header = QStringLiteral(\"Info:\");\n    break;\n\n  case QtWarningMsg:\n    header = QStringLiteral(\"Warning:\");\n    break;\n\n  case QtCriticalMsg:\n    header = QStringLiteral(\"Critical:\");\n    break;\n\n  case QtFatalMsg:\n    header = QStringLiteral(\"Fatal:\");\n    break;\n  }\n\n  QString fileName = getFileName(p_context.file);\n\n  if (!s_logToStderr) {\n    QTextStream stream(&s_file);\n    stream << header << (QStringLiteral(\"(%1:%2) \").arg(fileName).arg(p_context.line)) << localMsg\n           << \"\\n\";\n\n    if (p_type == QtFatalMsg) {\n      s_file.close();\n      abort();\n    }\n  } else {\n    std::string fileStr = fileName.toStdString();\n    const char *file = fileStr.c_str();\n\n    switch (p_type) {\n    case QtDebugMsg:\n      fprintf(stderr, \"%s(%s:%u) %s\\n\", header.toStdString().c_str(), file, p_context.line,\n              localMsg.constData());\n      break;\n    case QtInfoMsg:\n      fprintf(stderr, \"%s(%s:%u) %s\\n\", header.toStdString().c_str(), file, p_context.line,\n              localMsg.constData());\n      break;\n    case QtWarningMsg:\n      fprintf(stderr, \"%s(%s:%u) %s\\n\", header.toStdString().c_str(), file, p_context.line,\n              localMsg.constData());\n      break;\n    case QtCriticalMsg:\n      fprintf(stderr, \"%s(%s:%u) %s\\n\", header.toStdString().c_str(), file, p_context.line,\n              localMsg.constData());\n      break;\n    case QtFatalMsg:\n      fprintf(stderr, \"%s(%s:%u) %s\\n\", header.toStdString().c_str(), file, p_context.line,\n              localMsg.constData());\n      abort();\n      break;\n    }\n\n    fflush(stderr);\n  }\n}\n"
  },
  {
    "path": "src/core/logger.h",
    "content": "#ifndef LOGGER_H\n#define LOGGER_H\n\n#include <QMessageLogContext>\n#include <QString>\n\nclass QFile;\n\nnamespace vnotex {\nclass Logger {\npublic:\n  Logger() = delete;\n\n  static void init(bool p_verbose, bool p_logToStderr);\n\nprivate:\n  static void log(QtMsgType p_type, const QMessageLogContext &p_context, const QString &p_msg);\n\n  static QFile s_file;\n\n  static bool s_verbose;\n\n  static bool s_logToStderr;\n};\n} // namespace vnotex\n\n#endif // LOGGER_H\n"
  },
  {
    "path": "src/core/mainconfig.cpp",
    "content": "#include \"mainconfig.h\"\n\n#include <QDebug>\n#include <QJsonObject>\n\n#include \"configmgr.h\"\n#include \"coreconfig.h\"\n#include \"editorconfig.h\"\n#include \"markdowneditorconfig.h\"\n#include \"texteditorconfig.h\"\n#include \"widgetconfig.h\"\n\nusing namespace vnotex;\n\nbool MainConfig::s_versionChanged = false;\n\nMainConfig::MainConfig(ConfigMgr *p_mgr)\n    : IConfig(p_mgr, nullptr), m_coreConfig(new CoreConfig(p_mgr, this)),\n      m_editorConfig(new EditorConfig(p_mgr, this)), m_widgetConfig(new WidgetConfig(p_mgr, this)) {\n}\n\nMainConfig::~MainConfig() {}\n\nvoid MainConfig::init() {\n  auto mgr = getMgr();\n  auto appSettings = mgr->getSettings(ConfigMgr::Source::App);\n  auto userSettings = mgr->getSettings(ConfigMgr::Source::User);\n  const auto &appJobj = appSettings->getJson();\n  const auto &userJobj = userSettings->getJson();\n\n  loadMetadata(appJobj, userJobj);\n\n  m_coreConfig->init(appJobj, userJobj);\n\n  m_editorConfig->init(appJobj, userJobj);\n\n  m_widgetConfig->init(appJobj, userJobj);\n\n  if (isVersionChanged()) {\n    doVersionSpecificOverride();\n\n    // Update user config.\n    writeToSettings();\n  }\n}\n\nvoid MainConfig::loadMetadata(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(QStringLiteral(\"metadata\")).toObject();\n  const auto userObj = p_user.value(QStringLiteral(\"metadata\")).toObject();\n\n  m_version = appObj.value(QStringLiteral(\"version\")).toString();\n  m_userVersion = userObj.value(QStringLiteral(\"version\")).toString();\n  s_versionChanged = m_version != m_userVersion;\n  qDebug() << \"version\" << m_version << \"user version\" << m_userVersion;\n}\n\nQJsonObject MainConfig::saveMetaData() const {\n  QJsonObject metaObj;\n  metaObj[QStringLiteral(\"version\")] = m_version;\n\n  return metaObj;\n}\n\nbool MainConfig::isVersionChanged() { return s_versionChanged; }\n\nCoreConfig &MainConfig::getCoreConfig() { return *m_coreConfig; }\n\nEditorConfig &MainConfig::getEditorConfig() { return *m_editorConfig; }\n\nWidgetConfig &MainConfig::getWidgetConfig() { return *m_widgetConfig; }\n\nvoid MainConfig::writeToSettings() const { getMgr()->writeUserSettings(toJson()); }\n\nQJsonObject MainConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"metadata\")] = saveMetaData();\n  obj[m_coreConfig->getSessionName()] = m_coreConfig->toJson();\n  obj[m_editorConfig->getSessionName()] = m_editorConfig->toJson();\n  obj[m_widgetConfig->getSessionName()] = m_widgetConfig->toJson();\n  return obj;\n}\n\nconst QString &MainConfig::getVersion() const { return m_version; }\n\nQString MainConfig::getVersion(const QJsonObject &p_jobj) {\n  const auto metadataObj = p_jobj.value(QStringLiteral(\"metadata\")).toObject();\n  return metadataObj.value(QStringLiteral(\"version\")).toString();\n}\n\nvoid MainConfig::doVersionSpecificOverride() {\n  // In a new version, we may want to change one value by force.\n}\n"
  },
  {
    "path": "src/core/mainconfig.h",
    "content": "#ifndef MAINCONFIG_H\n#define MAINCONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QString>\n#include <QtGlobal>\n\nclass QJsonObject;\n\nnamespace vnotex {\nclass CoreConfig;\nclass EditorConfig;\nclass WidgetConfig;\n\nclass MainConfig : public IConfig {\npublic:\n  explicit MainConfig(ConfigMgr *p_mgr);\n\n  ~MainConfig();\n\n  void init() Q_DECL_OVERRIDE;\n\n  const QString &getVersion() const;\n\n  CoreConfig &getCoreConfig();\n\n  EditorConfig &getEditorConfig();\n\n  WidgetConfig &getWidgetConfig();\n\n  void writeToSettings() const Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  static QString getVersion(const QJsonObject &p_jobj);\n\n  static bool isVersionChanged();\n\nprivate:\n  void loadMetadata(const QJsonObject &p_app, const QJsonObject &p_user);\n\n  QJsonObject saveMetaData() const;\n\n  void doVersionSpecificOverride();\n\n  // Version of VNoteX.\n  QString m_version;\n\n  // Version of user's configuration.\n  QString m_userVersion;\n\n  QScopedPointer<CoreConfig> m_coreConfig;\n\n  QScopedPointer<EditorConfig> m_editorConfig;\n\n  QScopedPointer<WidgetConfig> m_widgetConfig;\n\n  static bool s_versionChanged;\n};\n} // namespace vnotex\n\n#endif // MAINCONFIG_H\n"
  },
  {
    "path": "src/core/markdowneditorconfig.cpp",
    "content": "#include \"markdowneditorconfig.h\"\n\n#include <QDebug>\n\n#include \"mainconfig.h\"\n#include \"texteditorconfig.h\"\n\nusing namespace vnotex;\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#define READBOOL(key) readBool(appObj, userObj, (key))\n#define READREAL(key) readReal(appObj, userObj, (key))\n#define READINT(key) readInt(appObj, userObj, (key))\n\nMarkdownEditorConfig::MarkdownEditorConfig(\n    ConfigMgr *p_mgr, IConfig *p_topConfig,\n    const QSharedPointer<TextEditorConfig> &p_textEditorConfig)\n    : IConfig(p_mgr, p_topConfig), m_textEditorConfig(p_textEditorConfig) {\n  m_sessionName = QStringLiteral(\"markdown_editor\");\n}\n\nvoid MarkdownEditorConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(m_sessionName).toObject();\n  const auto userObj = p_user.value(m_sessionName).toObject();\n\n  loadViewerResource(appObj, userObj);\n  loadExportResource(appObj, userObj);\n\n  m_webPlantUml = READBOOL(QStringLiteral(\"web_plantuml\"));\n\n  m_plantUmlJar = READSTR(QStringLiteral(\"plantuml_jar\"));\n\n  m_plantUmlCommand = READSTR(QStringLiteral(\"plantuml_command\"));\n\n  m_plantUmlWebService = READSTR(QStringLiteral(\"plantuml_web_service\"));\n\n  m_webGraphviz = READBOOL(QStringLiteral(\"web_graphviz\"));\n\n  m_graphvizExe = READSTR(QStringLiteral(\"graphviz_exe\"));\n\n  m_mathJaxScript = READSTR(QStringLiteral(\"mathjax_script\"));\n\n  m_prependDotInRelativeLink = READBOOL(QStringLiteral(\"prepend_dot_in_relative_link\"));\n  m_confirmBeforeClearObsoleteImages =\n      READBOOL(QStringLiteral(\"confirm_before_clear_obsolete_images\"));\n  m_insertFileNameAsTitle = READBOOL(QStringLiteral(\"insert_file_name_as_title\"));\n\n  m_sectionNumberMode = stringToSectionNumberMode(READSTR(QStringLiteral(\"section_number\")));\n  m_sectionNumberBaseLevel = READINT(QStringLiteral(\"section_number_base_level\"));\n  m_sectionNumberStyle =\n      stringToSectionNumberStyle(READSTR(QStringLiteral(\"section_number_style\")));\n\n  m_constrainImageWidthEnabled = READBOOL(QStringLiteral(\"constrain_image_width\"));\n  m_imageAlignCenterEnabled = READBOOL(QStringLiteral(\"image_align_center\"));\n  m_constrainInplacePreviewWidthEnabled =\n      READBOOL(QStringLiteral(\"constrain_inplace_preview_width\"));\n  m_zoomFactorInReadMode = READREAL(QStringLiteral(\"zoom_factor_in_read_mode\"));\n  m_fetchImagesInParseAndPaste = READBOOL(QStringLiteral(\"fetch_images_in_parse_and_paste\"));\n\n  m_protectFromXss = READBOOL(QStringLiteral(\"protect_from_xss\"));\n  m_htmlTagEnabled = READBOOL(QStringLiteral(\"html_tag\"));\n  m_autoBreakEnabled = READBOOL(QStringLiteral(\"auto_break\"));\n  m_linkifyEnabled = READBOOL(QStringLiteral(\"linkify\"));\n  m_indentFirstLineEnabled = READBOOL(QStringLiteral(\"indent_first_line\"));\n  m_codeBlockLineNumberEnabled = READBOOL(QStringLiteral(\"code_block_line_number\"));\n\n  m_smartTableEnabled = READBOOL(QStringLiteral(\"smart_table\"));\n  m_smartTableInterval = READINT(QStringLiteral(\"smart_table_interval\"));\n\n  m_spellCheckEnabled = READBOOL(QStringLiteral(\"spell_check\"));\n\n  m_editorOverriddenFontFamily = READSTR(QStringLiteral(\"editor_overridden_font_family\"));\n\n  {\n    m_inplacePreviewSources = InplacePreviewSource::NoInplacePreview;\n    auto srcs = READSTR(QStringLiteral(\"inplace_preview_sources\")).split(QLatin1Char(';'));\n    for (const auto &src : srcs) {\n      m_inplacePreviewSources |= stringToInplacePreviewSource(src);\n    }\n  }\n\n  m_editViewMode = stringToEditViewMode(READSTR(QStringLiteral(\"edit_view_mode\")));\n\n  m_richPasteByDefaultEnabled = READBOOL(QStringLiteral(\"rich_paste_by_default\"));\n}\n\nQJsonObject MarkdownEditorConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"viewer_resource\")] = saveViewerResource();\n  obj[QStringLiteral(\"export_resource\")] = saveExportResource();\n  obj[QStringLiteral(\"web_plantuml\")] = m_webPlantUml;\n  obj[QStringLiteral(\"plantuml_jar\")] = m_plantUmlJar;\n  obj[QStringLiteral(\"plantuml_command\")] = m_plantUmlCommand;\n  obj[QStringLiteral(\"plantuml_web_service\")] = m_plantUmlWebService;\n  obj[QStringLiteral(\"web_graphviz\")] = m_webGraphviz;\n  obj[QStringLiteral(\"graphviz_exe\")] = m_graphvizExe;\n  obj[QStringLiteral(\"mathjax_script\")] = m_mathJaxScript;\n  obj[QStringLiteral(\"prepend_dot_in_relative_link\")] = m_prependDotInRelativeLink;\n  obj[QStringLiteral(\"confirm_before_clear_obsolete_images\")] = m_confirmBeforeClearObsoleteImages;\n  obj[QStringLiteral(\"insert_file_name_as_title\")] = m_insertFileNameAsTitle;\n\n  obj[QStringLiteral(\"section_number\")] = sectionNumberModeToString(m_sectionNumberMode);\n  obj[QStringLiteral(\"section_number_base_level\")] = m_sectionNumberBaseLevel;\n  obj[QStringLiteral(\"section_number_style\")] = sectionNumberStyleToString(m_sectionNumberStyle);\n\n  obj[QStringLiteral(\"constrain_image_width\")] = m_constrainImageWidthEnabled;\n  obj[QStringLiteral(\"image_align_center\")] = m_imageAlignCenterEnabled;\n  obj[QStringLiteral(\"constrain_inplace_preview_width\")] = m_constrainInplacePreviewWidthEnabled;\n  obj[QStringLiteral(\"zoom_factor_in_read_mode\")] = m_zoomFactorInReadMode;\n  obj[QStringLiteral(\"fetch_images_in_parse_and_paste\")] = m_fetchImagesInParseAndPaste;\n  obj[QStringLiteral(\"protect_from_xss\")] = m_protectFromXss;\n  obj[QStringLiteral(\"html_tag\")] = m_htmlTagEnabled;\n  obj[QStringLiteral(\"auto_break\")] = m_autoBreakEnabled;\n  obj[QStringLiteral(\"linkify\")] = m_linkifyEnabled;\n  obj[QStringLiteral(\"indent_first_line\")] = m_indentFirstLineEnabled;\n  obj[QStringLiteral(\"code_block_line_number\")] = m_codeBlockLineNumberEnabled;\n  obj[QStringLiteral(\"smart_table\")] = m_smartTableEnabled;\n  obj[QStringLiteral(\"smart_table_interval\")] = m_smartTableInterval;\n  obj[QStringLiteral(\"spell_check\")] = m_spellCheckEnabled;\n  obj[QStringLiteral(\"editor_overridden_font_family\")] = m_editorOverriddenFontFamily;\n\n  {\n    QStringList srcs;\n    if (m_inplacePreviewSources & InplacePreviewSource::ImageLink) {\n      srcs << inplacePreviewSourceToString(InplacePreviewSource::ImageLink);\n    }\n    if (m_inplacePreviewSources & InplacePreviewSource::CodeBlock) {\n      srcs << inplacePreviewSourceToString(InplacePreviewSource::CodeBlock);\n    }\n    if (m_inplacePreviewSources & InplacePreviewSource::Math) {\n      srcs << inplacePreviewSourceToString(InplacePreviewSource::Math);\n    }\n    obj[QStringLiteral(\"inplace_preview_sources\")] = srcs.join(QLatin1Char(';'));\n  }\n\n  obj[QStringLiteral(\"edit_view_mode\")] = editViewModeToString(m_editViewMode);\n\n  obj[QStringLiteral(\"rich_paste_by_default\")] = m_richPasteByDefaultEnabled;\n\n  return obj;\n}\n\nTextEditorConfig &MarkdownEditorConfig::getTextEditorConfig() { return *m_textEditorConfig; }\n\nconst TextEditorConfig &MarkdownEditorConfig::getTextEditorConfig() const {\n  return *m_textEditorConfig;\n}\n\nint MarkdownEditorConfig::revision() const { return m_revision + m_textEditorConfig->revision(); }\n\nvoid MarkdownEditorConfig::loadViewerResource(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const QString name(QStringLiteral(\"viewer_resource\"));\n\n  if (MainConfig::isVersionChanged()) {\n    bool needOverride = p_app[QStringLiteral(\"override_viewer_resource\")].toBool();\n    if (needOverride) {\n      qInfo() << \"override \\\"viewer_resource\\\" in user configuration due to version change\";\n      m_viewerResource.init(p_app[name].toObject());\n      return;\n    }\n  }\n\n  if (p_user.contains(name)) {\n    m_viewerResource.init(p_user[name].toObject());\n  } else {\n    m_viewerResource.init(p_app[name].toObject());\n  }\n}\n\nQJsonObject MarkdownEditorConfig::saveViewerResource() const { return m_viewerResource.toJson(); }\n\nvoid MarkdownEditorConfig::loadExportResource(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const QString name(QStringLiteral(\"export_resource\"));\n\n  if (MainConfig::isVersionChanged()) {\n    bool needOverride = p_app[QStringLiteral(\"override_viewer_resource\")].toBool();\n    if (needOverride) {\n      qInfo() << \"override \\\"viewer_resource\\\" in user configuration due to version change\";\n      m_exportResource.init(p_app[name].toObject());\n      return;\n    }\n  }\n\n  if (p_user.contains(name)) {\n    m_exportResource.init(p_user[name].toObject());\n  } else {\n    m_exportResource.init(p_app[name].toObject());\n  }\n}\n\nQJsonObject MarkdownEditorConfig::saveExportResource() const { return m_exportResource.toJson(); }\n\nconst WebResource &MarkdownEditorConfig::getViewerResource() const { return m_viewerResource; }\n\nconst WebResource &MarkdownEditorConfig::getExportResource() const { return m_exportResource; }\n\nbool MarkdownEditorConfig::getWebPlantUml() const { return m_webPlantUml; }\n\nvoid MarkdownEditorConfig::setWebPlantUml(bool p_enabled) {\n  updateConfig(m_webPlantUml, p_enabled, this);\n}\n\nconst QString &MarkdownEditorConfig::getPlantUmlJar() const { return m_plantUmlJar; }\n\nvoid MarkdownEditorConfig::setPlantUmlJar(const QString &p_jar) {\n  updateConfig(m_plantUmlJar, p_jar, this);\n}\n\nconst QString &MarkdownEditorConfig::getPlantUmlCommand() const { return m_plantUmlCommand; }\n\nconst QString &MarkdownEditorConfig::getPlantUmlWebService() const { return m_plantUmlWebService; }\n\nvoid MarkdownEditorConfig::setPlantUmlWebService(const QString &p_service) {\n  updateConfig(m_plantUmlWebService, p_service, this);\n}\n\nbool MarkdownEditorConfig::getWebGraphviz() const { return m_webGraphviz; }\n\nvoid MarkdownEditorConfig::setWebGraphviz(bool p_enabled) {\n  updateConfig(m_webGraphviz, p_enabled, this);\n}\n\nconst QString &MarkdownEditorConfig::getGraphvizExe() const { return m_graphvizExe; }\n\nvoid MarkdownEditorConfig::setGraphvizExe(const QString &p_exe) {\n  updateConfig(m_graphvizExe, p_exe, this);\n}\n\nconst QString &MarkdownEditorConfig::getMathJaxScript() const { return m_mathJaxScript; }\n\nvoid MarkdownEditorConfig::setMathJaxScript(const QString &p_script) {\n  updateConfig(m_mathJaxScript, p_script, this);\n}\n\nbool MarkdownEditorConfig::getPrependDotInRelativeLink() const {\n  return m_prependDotInRelativeLink;\n}\n\nbool MarkdownEditorConfig::getConfirmBeforeClearObsoleteImages() const {\n  return m_confirmBeforeClearObsoleteImages;\n}\n\nvoid MarkdownEditorConfig::setConfirmBeforeClearObsoleteImages(bool p_confirm) {\n  updateConfig(m_confirmBeforeClearObsoleteImages, p_confirm, this);\n}\n\nbool MarkdownEditorConfig::getInsertFileNameAsTitle() const { return m_insertFileNameAsTitle; }\n\nvoid MarkdownEditorConfig::setInsertFileNameAsTitle(bool p_enabled) {\n  updateConfig(m_insertFileNameAsTitle, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getConstrainImageWidthEnabled() const {\n  return m_constrainImageWidthEnabled;\n}\n\nvoid MarkdownEditorConfig::setConstrainImageWidthEnabled(bool p_enabled) {\n  updateConfig(m_constrainImageWidthEnabled, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getImageAlignCenterEnabled() const { return m_imageAlignCenterEnabled; }\n\nvoid MarkdownEditorConfig::setImageAlignCenterEnabled(bool p_enabled) {\n  updateConfig(m_imageAlignCenterEnabled, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getConstrainInplacePreviewWidthEnabled() const {\n  return m_constrainInplacePreviewWidthEnabled;\n}\n\nvoid MarkdownEditorConfig::setConstrainInplacePreviewWidthEnabled(bool p_enabled) {\n  updateConfig(m_constrainInplacePreviewWidthEnabled, p_enabled, this);\n}\n\nqreal MarkdownEditorConfig::getZoomFactorInReadMode() const { return m_zoomFactorInReadMode; }\n\nvoid MarkdownEditorConfig::setZoomFactorInReadMode(qreal p_factor) {\n  updateConfig(m_zoomFactorInReadMode, p_factor, this);\n}\n\nbool MarkdownEditorConfig::getFetchImagesInParseAndPaste() const {\n  return m_fetchImagesInParseAndPaste;\n}\n\nvoid MarkdownEditorConfig::setFetchImagesInParseAndPaste(bool p_enabled) {\n  updateConfig(m_fetchImagesInParseAndPaste, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getProtectFromXss() const { return m_protectFromXss; }\n\nbool MarkdownEditorConfig::getHtmlTagEnabled() const { return m_htmlTagEnabled; }\n\nvoid MarkdownEditorConfig::setHtmlTagEnabled(bool p_enabled) {\n  updateConfig(m_htmlTagEnabled, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getAutoBreakEnabled() const { return m_autoBreakEnabled; }\n\nvoid MarkdownEditorConfig::setAutoBreakEnabled(bool p_enabled) {\n  updateConfig(m_autoBreakEnabled, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getLinkifyEnabled() const { return m_linkifyEnabled; }\n\nvoid MarkdownEditorConfig::setLinkifyEnabled(bool p_enabled) {\n  updateConfig(m_linkifyEnabled, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getIndentFirstLineEnabled() const { return m_indentFirstLineEnabled; }\n\nvoid MarkdownEditorConfig::setIndentFirstLineEnabled(bool p_enabled) {\n  updateConfig(m_indentFirstLineEnabled, p_enabled, this);\n}\n\nbool MarkdownEditorConfig::getCodeBlockLineNumberEnabled() const {\n  return m_codeBlockLineNumberEnabled;\n}\n\nvoid MarkdownEditorConfig::setCodeBlockLineNumberEnabled(bool p_enabled) {\n  updateConfig(m_codeBlockLineNumberEnabled, p_enabled, this);\n}\n\nQString MarkdownEditorConfig::sectionNumberModeToString(SectionNumberMode p_mode) const {\n  switch (p_mode) {\n  case SectionNumberMode::None:\n    return QStringLiteral(\"none\");\n\n  case SectionNumberMode::Edit:\n    return QStringLiteral(\"edit\");\n\n  default:\n    return QStringLiteral(\"read\");\n  }\n}\n\nMarkdownEditorConfig::SectionNumberMode\nMarkdownEditorConfig::stringToSectionNumberMode(const QString &p_str) const {\n  auto mode = p_str.toLower();\n  if (mode == QStringLiteral(\"none\")) {\n    return SectionNumberMode::None;\n  } else if (mode == QStringLiteral(\"edit\")) {\n    return SectionNumberMode::Edit;\n  } else {\n    return SectionNumberMode::Read;\n  }\n}\n\nQString MarkdownEditorConfig::sectionNumberStyleToString(SectionNumberStyle p_style) const {\n  switch (p_style) {\n  case SectionNumberStyle::DigDotDig:\n    return QStringLiteral(\"digdotdig\");\n\n  default:\n    return QStringLiteral(\"digdotdigdot\");\n  }\n}\n\nMarkdownEditorConfig::SectionNumberStyle\nMarkdownEditorConfig::stringToSectionNumberStyle(const QString &p_str) const {\n  auto style = p_str.toLower();\n  if (style == QStringLiteral(\"digdotdig\")) {\n    return SectionNumberStyle::DigDotDig;\n  } else {\n    return SectionNumberStyle::DigDotDigDot;\n  }\n}\n\nQString MarkdownEditorConfig::inplacePreviewSourceToString(InplacePreviewSource p_src) const {\n  switch (p_src) {\n  case InplacePreviewSource::ImageLink:\n    return QStringLiteral(\"imagelink\");\n\n  case InplacePreviewSource::CodeBlock:\n    return QStringLiteral(\"codeblock\");\n\n  case InplacePreviewSource::Math:\n    return QStringLiteral(\"math\");\n\n  default:\n    return \"\";\n  }\n}\n\nMarkdownEditorConfig::InplacePreviewSource\nMarkdownEditorConfig::stringToInplacePreviewSource(const QString &p_str) const {\n  auto src = p_str.toLower();\n  if (src == QStringLiteral(\"imagelink\")) {\n    return InplacePreviewSource::ImageLink;\n  } else if (src == QStringLiteral(\"codeblock\")) {\n    return InplacePreviewSource::CodeBlock;\n  } else if (src == QStringLiteral(\"math\")) {\n    return InplacePreviewSource::Math;\n  } else {\n    return InplacePreviewSource::NoInplacePreview;\n  }\n}\n\nMarkdownEditorConfig::SectionNumberMode MarkdownEditorConfig::getSectionNumberMode() const {\n  return m_sectionNumberMode;\n}\n\nvoid MarkdownEditorConfig::setSectionNumberMode(SectionNumberMode p_mode) {\n  updateConfig(m_sectionNumberMode, p_mode, this);\n}\n\nint MarkdownEditorConfig::getSectionNumberBaseLevel() const { return m_sectionNumberBaseLevel; }\n\nvoid MarkdownEditorConfig::setSectionNumberBaseLevel(int p_level) {\n  updateConfig(m_sectionNumberBaseLevel, p_level, this);\n}\n\nMarkdownEditorConfig::SectionNumberStyle MarkdownEditorConfig::getSectionNumberStyle() const {\n  return m_sectionNumberStyle;\n}\n\nvoid MarkdownEditorConfig::setSectionNumberStyle(SectionNumberStyle p_style) {\n  updateConfig(m_sectionNumberStyle, p_style, this);\n}\n\nbool MarkdownEditorConfig::getSmartTableEnabled() const { return m_smartTableEnabled; }\n\nvoid MarkdownEditorConfig::setSmartTableEnabled(bool p_enabled) {\n  updateConfig(m_smartTableEnabled, p_enabled, this);\n}\n\nint MarkdownEditorConfig::getSmartTableInterval() const { return m_smartTableInterval; }\n\nbool MarkdownEditorConfig::isSpellCheckEnabled() const { return m_spellCheckEnabled; }\n\nvoid MarkdownEditorConfig::setSpellCheckEnabled(bool p_enabled) {\n  updateConfig(m_spellCheckEnabled, p_enabled, this);\n}\n\nconst QString &MarkdownEditorConfig::getEditorOverriddenFontFamily() const {\n  return m_editorOverriddenFontFamily;\n}\n\nvoid MarkdownEditorConfig::setEditorOverriddenFontFamily(const QString &p_family) {\n  updateConfig(m_editorOverriddenFontFamily, p_family, this);\n}\n\nMarkdownEditorConfig::InplacePreviewSources MarkdownEditorConfig::getInplacePreviewSources() const {\n  return m_inplacePreviewSources;\n}\n\nvoid MarkdownEditorConfig::setInplacePreviewSources(InplacePreviewSources p_src) {\n  updateConfig(m_inplacePreviewSources, p_src, this);\n}\n\nQString MarkdownEditorConfig::editViewModeToString(EditViewMode p_mode) const {\n  switch (p_mode) {\n  case EditViewMode::EditPreview:\n    return QStringLiteral(\"editpreview\");\n\n  default:\n    return QStringLiteral(\"editonly\");\n  }\n}\n\nMarkdownEditorConfig::EditViewMode\nMarkdownEditorConfig::stringToEditViewMode(const QString &p_str) const {\n  auto mode = p_str.toLower();\n  if (mode == QStringLiteral(\"editpreview\")) {\n    return EditViewMode::EditPreview;\n  } else {\n    return EditViewMode::EditOnly;\n  }\n}\n\nMarkdownEditorConfig::EditViewMode MarkdownEditorConfig::getEditViewMode() const {\n  return m_editViewMode;\n}\n\nvoid MarkdownEditorConfig::setEditViewMode(EditViewMode p_mode) {\n  updateConfig(m_editViewMode, p_mode, this);\n}\n\nbool MarkdownEditorConfig::getRichPasteByDefaultEnabled() const {\n  return m_richPasteByDefaultEnabled;\n}\n\nvoid MarkdownEditorConfig::setRichPasteByDefaultEnabled(bool p_enabled) {\n  updateConfig(m_richPasteByDefaultEnabled, p_enabled, this);\n}\n"
  },
  {
    "path": "src/core/markdowneditorconfig.h",
    "content": "#ifndef MARKDOWNEDITORCONFIG_H\n#define MARKDOWNEDITORCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"webresource.h\"\n\n#include <QSharedPointer>\n#include <QVector>\n\nnamespace vnotex {\nclass TextEditorConfig;\n\nclass MarkdownEditorConfig : public IConfig {\npublic:\n  enum SectionNumberMode { None, Read, Edit };\n\n  enum SectionNumberStyle {\n    // 1.1.\n    DigDotDigDot,\n    // 1.1\n    DigDotDig\n  };\n\n  enum InplacePreviewSource { NoInplacePreview = 0, ImageLink = 0x1, CodeBlock = 0x2, Math = 0x4 };\n  Q_DECLARE_FLAGS(InplacePreviewSources, InplacePreviewSource);\n\n  enum EditViewMode { EditOnly, EditPreview };\n\n  MarkdownEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig,\n                       const QSharedPointer<TextEditorConfig> &p_textEditorConfig);\n\n  void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  int revision() const Q_DECL_OVERRIDE;\n\n  TextEditorConfig &getTextEditorConfig();\n  const TextEditorConfig &getTextEditorConfig() const;\n\n  const WebResource &getViewerResource() const;\n\n  const WebResource &getExportResource() const;\n\n  bool getWebPlantUml() const;\n  void setWebPlantUml(bool p_enabled);\n\n  const QString &getPlantUmlJar() const;\n  void setPlantUmlJar(const QString &p_jar);\n\n  const QString &getPlantUmlCommand() const;\n\n  const QString &getPlantUmlWebService() const;\n  void setPlantUmlWebService(const QString &p_service);\n\n  bool getWebGraphviz() const;\n  void setWebGraphviz(bool p_enabled);\n\n  const QString &getGraphvizExe() const;\n  void setGraphvizExe(const QString &p_exe);\n\n  const QString &getMathJaxScript() const;\n  void setMathJaxScript(const QString &p_script);\n\n  bool getPrependDotInRelativeLink() const;\n\n  bool getConfirmBeforeClearObsoleteImages() const;\n  void setConfirmBeforeClearObsoleteImages(bool p_confirm);\n\n  bool getInsertFileNameAsTitle() const;\n  void setInsertFileNameAsTitle(bool p_enabled);\n\n  SectionNumberMode getSectionNumberMode() const;\n  void setSectionNumberMode(SectionNumberMode p_mode);\n\n  int getSectionNumberBaseLevel() const;\n  void setSectionNumberBaseLevel(int p_level);\n\n  SectionNumberStyle getSectionNumberStyle() const;\n  void setSectionNumberStyle(SectionNumberStyle p_style);\n\n  bool getConstrainImageWidthEnabled() const;\n  void setConstrainImageWidthEnabled(bool p_enabled);\n\n  bool getImageAlignCenterEnabled() const;\n  void setImageAlignCenterEnabled(bool p_enabled);\n\n  bool getConstrainInplacePreviewWidthEnabled() const;\n  void setConstrainInplacePreviewWidthEnabled(bool p_enabled);\n\n  qreal getZoomFactorInReadMode() const;\n  void setZoomFactorInReadMode(qreal p_factor);\n\n  bool getFetchImagesInParseAndPaste() const;\n  void setFetchImagesInParseAndPaste(bool p_enabled);\n\n  bool getProtectFromXss() const;\n\n  bool getHtmlTagEnabled() const;\n  void setHtmlTagEnabled(bool p_enabled);\n\n  bool getAutoBreakEnabled() const;\n  void setAutoBreakEnabled(bool p_enabled);\n\n  bool getLinkifyEnabled() const;\n  void setLinkifyEnabled(bool p_enabled);\n\n  bool getIndentFirstLineEnabled() const;\n  void setIndentFirstLineEnabled(bool p_enabled);\n\n  bool getCodeBlockLineNumberEnabled() const;\n  void setCodeBlockLineNumberEnabled(bool p_enabled);\n\n  bool getSmartTableEnabled() const;\n  void setSmartTableEnabled(bool p_enabled);\n\n  int getSmartTableInterval() const;\n\n  bool isSpellCheckEnabled() const;\n  void setSpellCheckEnabled(bool p_enabled);\n\n  const QString &getEditorOverriddenFontFamily() const;\n  void setEditorOverriddenFontFamily(const QString &p_family);\n\n  InplacePreviewSources getInplacePreviewSources() const;\n  void setInplacePreviewSources(InplacePreviewSources p_src);\n\n  EditViewMode getEditViewMode() const;\n  void setEditViewMode(EditViewMode p_mode);\n\n  bool getRichPasteByDefaultEnabled() const;\n  void setRichPasteByDefaultEnabled(bool p_enabled);\n\nprivate:\n  friend class MainConfig;\n\n  QString sectionNumberModeToString(SectionNumberMode p_mode) const;\n  SectionNumberMode stringToSectionNumberMode(const QString &p_str) const;\n\n  QString sectionNumberStyleToString(SectionNumberStyle p_style) const;\n  SectionNumberStyle stringToSectionNumberStyle(const QString &p_str) const;\n\n  void loadViewerResource(const QJsonObject &p_app, const QJsonObject &p_user);\n  QJsonObject saveViewerResource() const;\n\n  void loadExportResource(const QJsonObject &p_app, const QJsonObject &p_user);\n  QJsonObject saveExportResource() const;\n\n  QString inplacePreviewSourceToString(InplacePreviewSource p_src) const;\n  InplacePreviewSource stringToInplacePreviewSource(const QString &p_str) const;\n\n  QString editViewModeToString(EditViewMode p_mode) const;\n  EditViewMode stringToEditViewMode(const QString &p_str) const;\n\n  QSharedPointer<TextEditorConfig> m_textEditorConfig;\n\n  WebResource m_viewerResource;\n\n  WebResource m_exportResource;\n\n  // Whether use javascript or external program to render PlantUML.\n  bool m_webPlantUml = true;\n\n  // File path of the JAR to render PlantUmL.\n  QString m_plantUmlJar;\n\n  // Command to render PlantUml. If set, will ignore m_plantUmlJar.\n  // %1: the format to render in.\n  QString m_plantUmlCommand;\n\n  // PlantUml Web service to override that in plantuml.js file.\n  QString m_plantUmlWebService;\n\n  bool m_webGraphviz = true;\n\n  // Graphviz executable file.\n  QString m_graphvizExe;\n\n  // MathJax script to override that in mathjax.js file.\n  QString m_mathJaxScript;\n\n  // Whether prepend a dot in front of the relative link, like images.\n  bool m_prependDotInRelativeLink = false;\n\n  // Whether ask for user confirmation before clearing obsolete images.\n  bool m_confirmBeforeClearObsoleteImages = true;\n\n  // Whether insert the name of the new file as title.\n  bool m_insertFileNameAsTitle = true;\n\n  // Whether enable section numbering.\n  SectionNumberMode m_sectionNumberMode = SectionNumberMode::Read;\n\n  // 1 based.\n  int m_sectionNumberBaseLevel = 2;\n\n  // Section number style.\n  SectionNumberStyle m_sectionNumberStyle = SectionNumberStyle::DigDotDigDot;\n\n  // Whether enable image width constraint.\n  bool m_constrainImageWidthEnabled = true;\n\n  bool m_imageAlignCenterEnabled = false;\n\n  // Whether enable in-place preview width constraint.\n  bool m_constrainInplacePreviewWidthEnabled = false;\n\n  qreal m_zoomFactorInReadMode = 1.0;\n\n  // Whether fetch images to local in Parse To Markdown And Paste.\n  bool m_fetchImagesInParseAndPaste = true;\n\n  // Whether protect from Cross-Site Scripting.\n  bool m_protectFromXss = true;\n\n  // Whether allow HTML tag in Markdown source.\n  bool m_htmlTagEnabled = true;\n\n  // Whether auto break a line with `\\n`.\n  bool m_autoBreakEnabled = false;\n\n  // Whether convert URL-like text to links.\n  bool m_linkifyEnabled = true;\n\n  // Whether indent the first line of a paragraph.\n  bool m_indentFirstLineEnabled = false;\n\n  // Whether enable code block line number in read mode.\n  bool m_codeBlockLineNumberEnabled = true;\n\n  bool m_smartTableEnabled = true;\n\n  // Interval time to do smart table format.\n  int m_smartTableInterval = 2000;\n\n  // Override the config in TextEditorConfig.\n  bool m_spellCheckEnabled = true;\n\n  // Font family to override the editor's theme.\n  QString m_editorOverriddenFontFamily;\n\n  InplacePreviewSources m_inplacePreviewSources = InplacePreviewSource::NoInplacePreview;\n\n  // View mode in edit mode.\n  EditViewMode m_editViewMode = EditViewMode::EditOnly;\n\n  bool m_richPasteByDefaultEnabled = true;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::MarkdownEditorConfig::InplacePreviewSources)\n\n#endif // MARKDOWNEDITORCONFIG_H\n"
  },
  {
    "path": "src/core/mindmapeditorconfig.cpp",
    "content": "#include \"mindmapeditorconfig.h\"\n\n#include \"mainconfig.h\"\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#define READBOOL(key) readBool(appObj, userObj, (key))\n#define READINT(key) readInt(appObj, userObj, (key))\n\nusing namespace vnotex;\n\nMindMapEditorConfig::MindMapEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig)\n    : IConfig(p_mgr, p_topConfig) {\n  m_sessionName = QStringLiteral(\"mindmap_editor\");\n}\n\nvoid MindMapEditorConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(m_sessionName).toObject();\n  const auto userObj = p_user.value(m_sessionName).toObject();\n\n  loadEditorResource(appObj, userObj);\n}\n\nQJsonObject MindMapEditorConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"editor_resource\")] = saveEditorResource();\n  return obj;\n}\n\nvoid MindMapEditorConfig::loadEditorResource(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const QString name(QStringLiteral(\"editor_resource\"));\n\n  if (MainConfig::isVersionChanged()) {\n    bool needOverride = p_app[QStringLiteral(\"override_editor_resource\")].toBool();\n    if (needOverride) {\n      qInfo() << \"override \\\"editor_resource\\\" in user configuration due to version change\";\n      m_editorResource.init(p_app[name].toObject());\n      return;\n    }\n  }\n\n  if (p_user.contains(name)) {\n    m_editorResource.init(p_user[name].toObject());\n  } else {\n    m_editorResource.init(p_app[name].toObject());\n  }\n}\n\nQJsonObject MindMapEditorConfig::saveEditorResource() const { return m_editorResource.toJson(); }\n\nconst WebResource &MindMapEditorConfig::getEditorResource() const { return m_editorResource; }\n"
  },
  {
    "path": "src/core/mindmapeditorconfig.h",
    "content": "#ifndef MINDMAPEDITORCONFIG_H\n#define MINDMAPEDITORCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"webresource.h\"\n\nnamespace vnotex {\nclass MindMapEditorConfig : public IConfig {\npublic:\n  MindMapEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig);\n\n  void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  const WebResource &getEditorResource() const;\n\nprivate:\n  friend class MainConfig;\n\n  void loadEditorResource(const QJsonObject &p_app, const QJsonObject &p_user);\n  QJsonObject saveEditorResource() const;\n\n  WebResource m_editorResource;\n};\n} // namespace vnotex\n\n#endif // MINDMAPEDITORCONFIG_H\n"
  },
  {
    "path": "src/core/namebasedserver.h",
    "content": "#ifndef NAMEBASEDSERVER_H\n#define NAMEBASEDSERVER_H\n\n#include <QDebug>\n#include <QHash>\n#include <QList>\n#include <QSharedPointer>\n\nnamespace vnotex {\ntemplate <typename T> class NameBasedServer {\npublic:\n  // Register an item.\n  bool registerItem(const QString &p_name, const QSharedPointer<T> &p_item) {\n    if (m_data.contains(p_name)) {\n      qWarning() << \"item to register already exists with name\" << p_name;\n      return false;\n    }\n\n    m_data.insert(p_name, p_item);\n    return true;\n  }\n\n  // Get an item.\n  QSharedPointer<T> getItem(const QString &p_name) {\n    auto it = m_data.find(p_name);\n    if (it != m_data.end()) {\n      return it.value();\n    }\n\n    return nullptr;\n  }\n\n  QList<QSharedPointer<T>> getAllItems() const { return m_data.values(); }\n\nprivate:\n  // Name to item mapping.\n  QHash<QString, QSharedPointer<T>> m_data;\n};\n} // namespace vnotex\n\n#endif // NAMEBASEDSERVER_H\n"
  },
  {
    "path": "src/core/noncopyable.h",
    "content": "#ifndef NONCOPYABLE_H\n#define NONCOPYABLE_H\n\nnamespace vnotex {\nclass Noncopyable {\nprotected:\n  Noncopyable() = default;\n\n  virtual ~Noncopyable() = default;\n\n  Noncopyable(const Noncopyable &) = delete;\n  Noncopyable &operator=(const Noncopyable &) = delete;\n};\n} // namespace vnotex\n\n#endif // NONCOPYABLE_H\n"
  },
  {
    "path": "src/core/notebook/bundlenotebook.cpp",
    "content": "#include \"bundlenotebook.h\"\n\n#include <QCoreApplication>\n#include <QDebug>\n\n#include <core/exception.h>\n#include <core/historymgr.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <notebookconfigmgr/bundlenotebookconfigmgr.h>\n#include <notebookconfigmgr/notebookconfig.h>\n#include <utils/fileutils.h>\n\n#include \"notebookdatabaseaccess.h\"\n#include \"notebooktagmgr.h\"\n\nusing namespace vnotex;\n\nBundleNotebook::BundleNotebook(const NotebookParameters &p_paras,\n                               const QSharedPointer<NotebookConfig> &p_notebookConfig,\n                               QObject *p_parent)\n    : Notebook(p_paras, p_parent), m_configVersion(p_notebookConfig->m_version),\n      m_history(p_notebookConfig->m_history), m_tagGraph(p_notebookConfig->m_tagGraph),\n      m_extraConfigs(p_notebookConfig->m_extraConfigs) {\n  setupDatabase();\n}\n\nBundleNotebook::~BundleNotebook() { m_dbAccess->close(); }\n\nBundleNotebookConfigMgr *BundleNotebook::getBundleNotebookConfigMgr() const {\n  return static_cast<BundleNotebookConfigMgr *>(getConfigMgr().data());\n}\n\nvoid BundleNotebook::setupDatabase() {\n  auto dbPath = getBackend()->getFullPath(BundleNotebookConfigMgr::getDatabasePath());\n  m_dbAccess = new NotebookDatabaseAccess(this, dbPath, this);\n}\n\nvoid BundleNotebook::initializeInternal() {\n  initDatabase();\n\n  if (m_configVersion != getConfigMgr()->getCodeVersion()) {\n    updateNotebookConfig();\n  }\n}\n\nvoid BundleNotebook::initDatabase() {\n  m_dbAccess->initialize(m_configVersion);\n\n  if (m_dbAccess->isFresh()) {\n    // For previous version notebook without DB, just ignore the node Id from config.\n    int cnt = 0;\n    fillNodeTableFromConfig(getRootNode().data(), m_configVersion < 2, cnt);\n    qDebug() << \"fillNodeTableFromConfig nodes count\" << cnt;\n\n    fillTagTableFromTagGraph();\n\n    cnt = 0;\n    fillTagTableFromConfig(getRootNode().data(), cnt);\n  }\n\n  if (m_tagMgr) {\n    m_tagMgr->update();\n  }\n}\n\nvoid BundleNotebook::updateNotebookConfig() { getBundleNotebookConfigMgr()->writeNotebookConfig(); }\n\nvoid BundleNotebook::removeNotebookConfig() {\n  getBundleNotebookConfigMgr()->removeNotebookConfig();\n}\n\nvoid BundleNotebook::remove() {\n  // Remove all nodes.\n  removeNode(getRootNode());\n\n  // Remove notebook config.\n  removeNotebookConfig();\n\n  // Remove notebook root folder if it is empty.\n  if (!FileUtils::removeDirIfEmpty(getRootFolderAbsolutePath())) {\n    qInfo() << QStringLiteral(\"root folder of notebook (%1) is not empty and needs manual clean up\")\n                   .arg(getRootFolderAbsolutePath());\n  }\n}\n\nHistoryI *BundleNotebook::history() { return this; }\n\nconst QVector<HistoryItem> &BundleNotebook::getHistory() const { return m_history; }\n\nvoid BundleNotebook::removeHistory(const QString &p_itemPath) {\n  HistoryMgr::removeHistoryItem(m_history, p_itemPath);\n\n  updateNotebookConfig();\n}\n\nvoid BundleNotebook::addHistory(const HistoryItem &p_item) {\n  HistoryItem item(p_item);\n  item.m_path = getBackend()->getRelativePath(item.m_path);\n  HistoryMgr::insertHistoryItem(m_history, item);\n\n  updateNotebookConfig();\n}\n\nvoid BundleNotebook::clearHistory() {\n  m_history.clear();\n\n  updateNotebookConfig();\n}\n\nconst QJsonObject &BundleNotebook::getExtraConfigs() const { return m_extraConfigs; }\n\nvoid BundleNotebook::setExtraConfig(const QString &p_key, const QJsonObject &p_obj) {\n  m_extraConfigs[p_key] = p_obj;\n\n  updateNotebookConfig();\n}\n\nvoid BundleNotebook::fillNodeTableFromConfig(Node *p_node, bool p_ignoreId, int &p_totalCnt) {\n  bool ret = m_dbAccess->addNode(p_node, p_ignoreId);\n  if (!ret) {\n    qWarning() << \"failed to add node to DB\" << p_node->getName() << p_ignoreId;\n    return;\n  }\n\n  if (++p_totalCnt % 10) {\n    QCoreApplication::processEvents();\n  }\n\n  const auto &children = p_node->getChildrenRef();\n  for (const auto &child : children) {\n    fillNodeTableFromConfig(child.data(), p_ignoreId, p_totalCnt);\n  }\n}\n\nNotebookDatabaseAccess *BundleNotebook::getDatabaseAccess() const { return m_dbAccess; }\n\nbool BundleNotebook::rebuildDatabase() {\n  Q_ASSERT(m_dbAccess);\n  m_dbAccess->close();\n\n  auto backend = getBackend();\n  const auto dbPath = BundleNotebookConfigMgr::getDatabasePath();\n  if (backend->exists(dbPath)) {\n    try {\n      backend->removeFile(dbPath);\n    } catch (Exception &p_e) {\n      qWarning() << \"failed to delete database file\" << dbPath << p_e.what();\n      if (!m_dbAccess->open()) {\n        qWarning() << \"failed to open notebook database (restart is needed)\";\n      }\n      return false;\n    }\n  }\n\n  m_dbAccess->deleteLater();\n\n  setupDatabase();\n  initDatabase();\n\n  emit tagsUpdated();\n\n  return true;\n}\n\nconst QString &BundleNotebook::getTagGraph() const { return m_tagGraph; }\n\nvoid BundleNotebook::updateTagGraph(const QString &p_tagGraph) {\n  if (m_tagGraph == p_tagGraph) {\n    return;\n  }\n\n  m_tagGraph = p_tagGraph;\n  updateNotebookConfig();\n}\n\nvoid BundleNotebook::fillTagTableFromTagGraph() {\n  auto tagGraph = NotebookTagMgr::stringToTagGraph(m_tagGraph);\n  for (const auto &tagPair : tagGraph) {\n    if (!m_dbAccess->addTag(tagPair.m_parent)) {\n      qWarning() << \"failed to add tag to DB\" << tagPair.m_parent;\n      continue;\n    }\n\n    if (!m_dbAccess->addTag(tagPair.m_child, tagPair.m_parent)) {\n      qWarning() << \"failed to add tag to DB\" << tagPair.m_child;\n      continue;\n    }\n  }\n\n  QCoreApplication::processEvents();\n}\n\nvoid BundleNotebook::fillTagTableFromConfig(Node *p_node, int &p_totalCnt) {\n  // @p_node must already exists in node table.\n  bool ret = m_dbAccess->updateNodeTags(p_node);\n  if (!ret) {\n    qWarning() << \"failed to add tags of node to DB\" << p_node->getName() << p_node->getTags();\n    return;\n  }\n\n  if (++p_totalCnt % 10) {\n    QCoreApplication::processEvents();\n  }\n\n  const auto &children = p_node->getChildrenRef();\n  for (const auto &child : children) {\n    fillTagTableFromConfig(child.data(), p_totalCnt);\n  }\n}\n\nNotebookTagMgr *BundleNotebook::getTagMgr() const {\n  if (!m_tagMgr) {\n    auto th = const_cast<BundleNotebook *>(this);\n    th->m_tagMgr = new NotebookTagMgr(th);\n  }\n\n  return m_tagMgr;\n}\n\nTagI *BundleNotebook::tag() { return getTagMgr(); }\n\nint BundleNotebook::getConfigVersion() const { return m_configVersion; }\n"
  },
  {
    "path": "src/core/notebook/bundlenotebook.h",
    "content": "#ifndef BUNDLENOTEBOOK_H\n#define BUNDLENOTEBOOK_H\n\n#include \"global.h\"\n#include \"historyi.h\"\n#include \"notebook.h\"\n\nnamespace vnotex {\nclass BundleNotebookConfigMgr;\nclass NotebookConfig;\nclass NotebookDatabaseAccess;\nclass NotebookTagMgr;\n\nclass BundleNotebook : public Notebook, public HistoryI {\n  Q_OBJECT\npublic:\n  BundleNotebook(const NotebookParameters &p_paras,\n                 const QSharedPointer<NotebookConfig> &p_notebookConfig,\n                 QObject *p_parent = nullptr);\n\n  ~BundleNotebook();\n\n  void updateNotebookConfig() Q_DECL_OVERRIDE;\n\n  void removeNotebookConfig() Q_DECL_OVERRIDE;\n\n  void remove() Q_DECL_OVERRIDE;\n\n  const QString &getTagGraph() const;\n  void updateTagGraph(const QString &p_tagGraph);\n\n  const QJsonObject &getExtraConfigs() const Q_DECL_OVERRIDE;\n  void setExtraConfig(const QString &p_key, const QJsonObject &p_obj) Q_DECL_OVERRIDE;\n\n  bool rebuildDatabase() Q_DECL_OVERRIDE;\n\n  NotebookDatabaseAccess *getDatabaseAccess() const;\n\n  TagI *tag() Q_DECL_OVERRIDE;\n\n  int getConfigVersion() const;\n\n  // HistoryI.\npublic:\n  HistoryI *history() Q_DECL_OVERRIDE;\n\n  const QVector<HistoryItem> &getHistory() const Q_DECL_OVERRIDE;\n\n  void removeHistory(const QString &p_itemPath) Q_DECL_OVERRIDE;\n\n  void addHistory(const HistoryItem &p_item) Q_DECL_OVERRIDE;\n\n  void clearHistory() Q_DECL_OVERRIDE;\n\nprotected:\n  void initializeInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  BundleNotebookConfigMgr *getBundleNotebookConfigMgr() const;\n\n  void setupDatabase();\n\n  void fillNodeTableFromConfig(Node *p_node, bool p_ignoreId, int &p_totalCnt);\n\n  void initDatabase();\n\n  void fillTagTableFromTagGraph();\n\n  void fillTagTableFromConfig(Node *p_node, int &p_totalCnt);\n\n  NotebookTagMgr *getTagMgr() const;\n\n  const int m_configVersion;\n\n  QVector<HistoryItem> m_history;\n\n  QString m_tagGraph;\n\n  QJsonObject m_extraConfigs;\n\n  // Managed by QObject.\n  NotebookDatabaseAccess *m_dbAccess = nullptr;\n\n  // Managed by QObject.\n  NotebookTagMgr *m_tagMgr = nullptr;\n};\n} // namespace vnotex\n\n#endif // BUNDLENOTEBOOK_H\n"
  },
  {
    "path": "src/core/notebook/bundlenotebookfactory.cpp",
    "content": "#include \"bundlenotebookfactory.h\"\n\n#include <QDebug>\n#include <QObject>\n\n#include \"../exception.h\"\n#include \"bundlenotebook.h\"\n#include \"notebookconfigmgr/bundlenotebookconfigmgr.h\"\n#include \"notebookconfigmgr/notebookconfig.h\"\n#include \"notebookmgr.h\"\n#include \"notebookparameters.h\"\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nBundleNotebookFactory::BundleNotebookFactory() {}\n\nQString BundleNotebookFactory::getName() const { return QStringLiteral(\"bundle.vnotex\"); }\n\nQString BundleNotebookFactory::getDisplayName() const { return QObject::tr(\"Bundle Notebook\"); }\n\nQString BundleNotebookFactory::getDescription() const {\n  return QObject::tr(\"A notebook with configuration files to track its content\");\n}\n\n// Check if root folder is valid for a new notebook.\nstatic void checkRootFolderForNewNotebook(const NotebookParameters &p_paras) {\n  if (p_paras.m_rootFolderPath.isEmpty()) {\n    QString msg(\"no local root folder is specified\");\n    qCritical() << msg;\n    throw Exception(Exception::Type::InvalidPath, msg);\n  } else if (p_paras.m_ensureEmptyRootFolder && !PathUtils::isEmptyDir(p_paras.m_rootFolderPath)) {\n    QString msg =\n        QStringLiteral(\"local root folder must be empty: %1 (%2)\")\n            .arg(p_paras.m_rootFolderPath, PathUtils::absolutePath(p_paras.m_rootFolderPath));\n    qCritical() << msg;\n    throw Exception(Exception::Type::InvalidPath, msg);\n  }\n}\n\nQSharedPointer<Notebook> BundleNotebookFactory::newNotebook(const NotebookParameters &p_paras) {\n  checkParameters(p_paras);\n\n  checkRootFolderForNewNotebook(p_paras);\n\n  p_paras.m_notebookConfigMgr->createEmptySkeleton(p_paras);\n\n  auto nbConfig = BundleNotebookConfigMgr::readNotebookConfig(p_paras.m_notebookBackend);\n  auto notebook = QSharedPointer<BundleNotebook>::create(p_paras, nbConfig);\n  return notebook;\n}\n\nQSharedPointer<Notebook>\nBundleNotebookFactory::createNotebook(const NotebookMgr &p_mgr, const QString &p_rootFolderPath,\n                                      const QSharedPointer<INotebookBackend> &p_backend) {\n  // Read basic info about this notebook.\n  auto nbConfig = BundleNotebookConfigMgr::readNotebookConfig(p_backend);\n  auto paras = NotebookParameters::createNotebookParameters(\n      p_mgr, p_backend, getName(), nbConfig->m_name, nbConfig->m_description, p_rootFolderPath,\n      QIcon(), nbConfig->m_imageFolder, nbConfig->m_attachmentFolder, nbConfig->m_createdTimeUtc,\n      nbConfig->m_versionController, nbConfig->m_notebookConfigMgr);\n  checkParameters(*paras);\n  auto notebook = QSharedPointer<BundleNotebook>::create(*paras, nbConfig);\n  return notebook;\n}\n\nvoid BundleNotebookFactory::checkParameters(const NotebookParameters &p_paras) const {\n  auto configMgr = dynamic_cast<BundleNotebookConfigMgr *>(p_paras.m_notebookConfigMgr.data());\n  if (!configMgr) {\n    Exception::throwOne(Exception::Type::InvalidArgument,\n                        QStringLiteral(\"Invalid notebook configuration manager\"));\n  }\n}\n\nbool BundleNotebookFactory::checkRootFolder(const QSharedPointer<INotebookBackend> &p_backend) {\n  try {\n    BundleNotebookConfigMgr::readNotebookConfig(p_backend);\n  } catch (Exception &p_e) {\n    Q_UNUSED(p_e);\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/core/notebook/bundlenotebookfactory.h",
    "content": "#ifndef BUNDLENOTEBOOKFACTORY_H\n#define BUNDLENOTEBOOKFACTORY_H\n\n#include \"inotebookfactory.h\"\n\nnamespace vnotex {\nclass BundleNotebookFactory : public INotebookFactory {\npublic:\n  BundleNotebookFactory();\n\n  // Get the name of this factory.\n  QString getName() const Q_DECL_OVERRIDE;\n\n  // Get the display name of this factory.\n  QString getDisplayName() const Q_DECL_OVERRIDE;\n\n  // Get the description of this factory.\n  QString getDescription() const Q_DECL_OVERRIDE;\n\n  // New a notebook with given information and return an instance of that notebook.\n  QSharedPointer<Notebook> newNotebook(const NotebookParameters &p_paras) Q_DECL_OVERRIDE;\n\n  // Create a Notebook instance from existing root folder.\n  QSharedPointer<Notebook>\n  createNotebook(const NotebookMgr &p_mgr, const QString &p_rootFolderPath,\n                 const QSharedPointer<INotebookBackend> &p_backend) Q_DECL_OVERRIDE;\n\n  bool checkRootFolder(const QSharedPointer<INotebookBackend> &p_backend) Q_DECL_OVERRIDE;\n\nprivate:\n  void checkParameters(const NotebookParameters &p_paras) const;\n};\n} // namespace vnotex\n\n#endif // BUNDLENOTEBOOKFACTORY_H\n"
  },
  {
    "path": "src/core/notebook/externalnode.cpp",
    "content": "#include \"externalnode.h\"\n\n#include \"node.h\"\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nExternalNode::ExternalNode(Node *p_parent, const QString &p_name, Type p_type)\n    : m_parentNode(p_parent), m_name(p_name), m_type(p_type) {\n  Q_ASSERT(m_parentNode);\n}\n\nNode *ExternalNode::getNode() const { return m_parentNode; }\n\nconst QString &ExternalNode::getName() const { return m_name; }\n\nbool ExternalNode::isFolder() const { return m_type == Type::Folder; }\n\nQString ExternalNode::fetchAbsolutePath() const {\n  return PathUtils::concatenateFilePath(m_parentNode->fetchAbsolutePath(), m_name);\n}\n"
  },
  {
    "path": "src/core/notebook/externalnode.h",
    "content": "#ifndef EXTERNALNODE_H\n#define EXTERNALNODE_H\n\n#include <QString>\n\nnamespace vnotex {\nclass Node;\n\n// External node not managed by VNote.\nclass ExternalNode {\npublic:\n  enum class Type { File, Folder };\n\n  ExternalNode(Node *p_parent, const QString &p_name, Type p_type);\n\n  // Get parent node.\n  Node *getNode() const;\n\n  const QString &getName() const;\n\n  bool isFolder() const;\n\n  QString fetchAbsolutePath() const;\n\nprivate:\n  // Parent node.\n  // We support only one level further the external folder.\n  Node *m_parentNode = nullptr;\n\n  QString m_name;\n\n  Type m_type = Type::File;\n};\n} // namespace vnotex\n\n#endif // EXTERNALNODE_H\n"
  },
  {
    "path": "src/core/notebook/historyi.h",
    "content": "#ifndef HISTORYI_H\n#define HISTORYI_H\n\n#include <QVector>\n\n#include <core/historyitem.h>\n\nnamespace vnotex {\n// History interface for notebook.\nclass HistoryI {\npublic:\n  virtual ~HistoryI() = default;\n\n  virtual const QVector<HistoryItem> &getHistory() const = 0;\n\n  virtual void addHistory(const HistoryItem &p_item) = 0;\n\n  virtual void removeHistory(const QString &p_itemPath) = 0;\n\n  virtual void clearHistory() = 0;\n};\n} // namespace vnotex\n#endif // HISTORYI_H\n"
  },
  {
    "path": "src/core/notebook/inotebookfactory.h",
    "content": "#ifndef INOTEBOOKFACTORY_H\n#define INOTEBOOKFACTORY_H\n\n#include <QIcon>\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass Notebook;\nclass NotebookParameters;\nclass INotebookBackend;\nclass NotebookMgr;\n\n// Abstract factory to create notebook.\nclass INotebookFactory {\npublic:\n  virtual ~INotebookFactory() {}\n\n  // Get the name of this factory.\n  virtual QString getName() const = 0;\n\n  // Get the display name of this factory.\n  virtual QString getDisplayName() const = 0;\n\n  // Get the description of this factory.\n  virtual QString getDescription() const = 0;\n\n  // New a notebook with given information and return an instance of that notebook.\n  // The root folder should be empty.\n  virtual QSharedPointer<Notebook> newNotebook(const NotebookParameters &p_paras) = 0;\n\n  // Create a Notebook instance from existing root folder.\n  virtual QSharedPointer<Notebook>\n  createNotebook(const NotebookMgr &p_mgr, const QString &p_rootFolderPath,\n                 const QSharedPointer<INotebookBackend> &p_backend) = 0;\n\n  // Check if @p_rootFolderPath is a valid root folder to use by this factory\n  // to create a notebook.\n  virtual bool checkRootFolder(const QSharedPointer<INotebookBackend> &p_backend) = 0;\n};\n} // namespace vnotex\n\n#endif // INOTEBOOKFACTORY_H\n"
  },
  {
    "path": "src/core/notebook/node.cpp",
    "content": "#include \"node.h\"\n\n#include <QDir>\n\n#include \"nodeparameters.h\"\n#include \"notebook.h\"\n#include <QRandomGenerator>\n#include <core/exception.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <notebookconfigmgr/inotebookconfigmgr.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nNode::Node(Flags p_flags, const QString &p_name, const NodeParameters &p_paras,\n           Notebook *p_notebook, Node *p_parent)\n    : m_notebook(p_notebook), m_loaded(true), m_flags(p_flags), m_id(p_paras.m_id),\n      m_signature(p_paras.m_signature), m_name(p_name), m_createdTimeUtc(p_paras.m_createdTimeUtc),\n      m_modifiedTimeUtc(p_paras.m_modifiedTimeUtc), m_tags(p_paras.m_tags),\n      m_attachmentFolder(p_paras.m_attachmentFolder), m_visual(p_paras.m_visual),\n      m_parent(p_parent) {\n  Q_ASSERT(m_notebook);\n\n  checkSignature();\n}\n\nNode::Node(Flags p_flags, const QString &p_name, Notebook *p_notebook, Node *p_parent)\n    : m_notebook(p_notebook), m_flags(p_flags), m_name(p_name), m_parent(p_parent) {\n  Q_ASSERT(m_notebook);\n}\n\nNode::~Node() {}\n\nbool Node::isLoaded() const { return m_loaded; }\n\nvoid Node::loadCompleteInfo(const NodeParameters &p_paras,\n                            const QVector<QSharedPointer<Node>> &p_children) {\n  Q_ASSERT(!m_loaded);\n\n  m_id = p_paras.m_id;\n  m_signature = p_paras.m_signature;\n  m_createdTimeUtc = p_paras.m_createdTimeUtc;\n  m_modifiedTimeUtc = p_paras.m_modifiedTimeUtc;\n  Q_ASSERT(p_paras.m_tags.isEmpty());\n  Q_ASSERT(p_paras.m_attachmentFolder.isEmpty());\n\n  m_visual = p_paras.m_visual;\n\n  m_children = p_children;\n  m_loaded = true;\n\n  checkSignature();\n}\n\nbool Node::isRoot() const { return !m_parent && m_use == Use::Root; }\n\nconst QString &Node::getName() const { return m_name; }\n\nvoid Node::setName(const QString &p_name) { m_name = p_name; }\n\nvoid Node::updateName(const QString &p_name) {\n  if (m_name == p_name) {\n    return;\n  }\n\n  getConfigMgr()->renameNode(this, p_name);\n  Q_ASSERT(m_name == p_name);\n\n  emit m_notebook->nodeUpdated(this);\n}\n\nbool Node::containsChild(const QString &p_name, bool p_caseSensitive) const {\n  return findChild(p_name, p_caseSensitive) != nullptr;\n}\n\nbool Node::containsChild(const QSharedPointer<Node> &p_node) const {\n  return m_children.indexOf(p_node) != -1;\n}\n\nbool Node::isLegalNameForNewChild(const QString &p_name) const {\n  if (p_name.isEmpty()) {\n    return false;\n  }\n\n  auto mgr = getConfigMgr();\n  if (mgr->isBuiltInFile(this, p_name) || mgr->isBuiltInFolder(this, p_name)) {\n    return false;\n  }\n\n  if (containsChild(p_name, false)) {\n    return false;\n  }\n\n  return true;\n}\n\nQSharedPointer<Node> Node::findChild(const QString &p_name, bool p_caseSensitive) const {\n  auto targetName = p_caseSensitive ? p_name : p_name.toLower();\n  for (const auto &child : m_children) {\n    if (p_caseSensitive ? child->getName() == targetName\n                        : child->getName().toLower() == targetName) {\n      return child;\n    }\n  }\n\n  return nullptr;\n}\n\nvoid Node::setParent(Node *p_parent) { m_parent = p_parent; }\n\nNode *Node::getParent() const { return m_parent; }\n\nNode::Flags Node::getFlags() const { return m_flags; }\n\nNode::Use Node::getUse() const { return m_use; }\n\nvoid Node::setUse(Node::Use p_use) { m_use = p_use; }\n\nID Node::getId() const { return m_id; }\n\nvoid Node::updateId(ID p_id) {\n  if (m_id == p_id) {\n    return;\n  }\n\n  m_id = p_id;\n  save();\n  emit m_notebook->nodeUpdated(this);\n}\n\nID Node::getSignature() const { return m_signature; }\n\nconst QDateTime &Node::getCreatedTimeUtc() const { return m_createdTimeUtc; }\n\nconst QDateTime &Node::getModifiedTimeUtc() const { return m_modifiedTimeUtc; }\n\nvoid Node::setModifiedTimeUtc() { m_modifiedTimeUtc = QDateTime::currentDateTimeUtc(); }\n\nconst QVector<QSharedPointer<Node>> &Node::getChildrenRef() const { return m_children; }\n\nQVector<QSharedPointer<Node>> Node::getChildren() const { return m_children; }\n\nint Node::getChildrenCount() const { return m_children.size(); }\n\nvoid Node::addChild(const QSharedPointer<Node> &p_node) { insertChild(m_children.size(), p_node); }\n\nvoid Node::insertChild(int p_idx, const QSharedPointer<Node> &p_node) {\n  Q_ASSERT(isContainer());\n\n  p_node->setParent(this);\n\n  m_children.insert(p_idx, p_node);\n}\n\nvoid Node::removeChild(const QSharedPointer<Node> &p_child) {\n  if (m_children.removeOne(p_child)) {\n    p_child->setParent(nullptr);\n  }\n}\n\nNotebook *Node::getNotebook() const { return m_notebook; }\n\nbool Node::isAncestor(const Node *p_ancestor, const Node *p_child) {\n  if (!p_ancestor || !p_child) {\n    return false;\n  }\n\n  while (p_child) {\n    p_child = p_child->getParent();\n    if (p_child == p_ancestor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nconst QStringList &Node::getTags() const { return m_tags; }\n\nvoid Node::updateTags(const QStringList &p_tags) {\n  if (p_tags == m_tags) {\n    return;\n  }\n\n  m_tags = p_tags;\n  save();\n  emit m_notebook->nodeUpdated(this);\n}\n\nbool Node::isReadOnly() const { return m_flags & Flag::ReadOnly; }\n\nvoid Node::setReadOnly(bool p_readOnly) {\n  if (p_readOnly) {\n    m_flags |= Flag::ReadOnly;\n  } else {\n    m_flags &= ~Flag::ReadOnly;\n  }\n}\n\nQString Node::fetchPath() const {\n  if (!m_parent) {\n    return QString();\n  } else {\n    return PathUtils::concatenateFilePath(m_parent->fetchPath(), m_name);\n  }\n}\n\nbool Node::isContainer() const { return m_flags & Flag::Container; }\n\nbool Node::hasContent() const { return m_flags & Flag::Content; }\n\nQDir Node::toDir() const {\n  if (isContainer()) {\n    return QDir(fetchAbsolutePath());\n  }\n  Q_ASSERT(false);\n  return QDir();\n}\n\nvoid Node::load() {\n  if (isLoaded()) {\n    return;\n  }\n\n  getConfigMgr()->loadNode(this);\n}\n\nvoid Node::save() { getConfigMgr()->saveNode(this); }\n\nINotebookConfigMgr *Node::getConfigMgr() const { return m_notebook->getConfigMgr().data(); }\n\nconst QString &Node::getAttachmentFolder() const { return m_attachmentFolder; }\n\nvoid Node::setAttachmentFolder(const QString &p_attachmentFolder) {\n  m_attachmentFolder = p_attachmentFolder;\n}\n\nQString Node::fetchAttachmentFolderPath() {\n  return getConfigMgr()->fetchNodeAttachmentFolderPath(this);\n}\n\nINotebookBackend *Node::getBackend() const { return m_notebook->getBackend().data(); }\n\nbool Node::canRename(const QString &p_newName) const {\n  if (p_newName == m_name) {\n    return true;\n  }\n\n  if (p_newName.isEmpty()) {\n    return false;\n  }\n\n  Q_ASSERT(m_parent);\n  if (p_newName.toLower() == m_name.toLower()) {\n    if (m_parent->containsChild(p_newName, true)) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n\n  if (!m_parent->isLegalNameForNewChild(p_newName)) {\n    return false;\n  }\n\n  return true;\n}\n\nvoid Node::sortChildren(const QVector<int> &p_beforeIdx, const QVector<int> &p_afterIdx) {\n  Q_ASSERT(isContainer());\n\n  Q_ASSERT(p_beforeIdx.size() == p_afterIdx.size());\n\n  if (p_beforeIdx == p_afterIdx) {\n    return;\n  }\n\n  auto ori = m_children;\n  for (int i = 0; i < p_beforeIdx.size(); ++i) {\n    if (p_beforeIdx[i] != p_afterIdx[i]) {\n      m_children[p_beforeIdx[i]] = ori[p_afterIdx[i]];\n    }\n  }\n\n  save();\n}\n\nQVector<QSharedPointer<ExternalNode>> Node::fetchExternalChildren() const {\n  return getConfigMgr()->fetchExternalChildren(const_cast<Node *>(this));\n}\n\nbool Node::containsContainerChild(const QString &p_name) const {\n  // TODO: we assume that m_children is sorted first the container children.\n  for (auto &child : m_children) {\n    if (!child->isContainer()) {\n      break;\n    }\n\n    if (child->getName() == p_name) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nbool Node::containsContentChild(const QString &p_name) const {\n  // TODO: we assume that m_children is sorted: first the container children then content children.\n  for (int i = m_children.size() - 1; i >= 0; --i) {\n    if (m_children[i]->isContainer()) {\n      break;\n    }\n\n    if (m_children[i]->getName() == p_name) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nbool Node::exists() const { return m_flags & Flag::Exists; }\n\nvoid Node::setExists(bool p_exists) {\n  if (p_exists) {\n    m_flags |= Flag::Exists;\n  } else {\n    m_flags &= ~Flag::Exists;\n  }\n}\n\nbool Node::checkExists() {\n  bool before = exists();\n  bool after = getConfigMgr()->checkNodeExists(this);\n  if (before != after) {\n    emit m_notebook->nodeUpdated(this);\n  }\n  return after;\n}\n\nQList<QSharedPointer<File>> Node::collectFiles() {\n  QList<QSharedPointer<File>> files;\n\n  load();\n\n  if (hasContent()) {\n    files.append(getContentFile());\n  }\n\n  if (isContainer()) {\n    for (const auto &child : m_children) {\n      files.append(child->collectFiles());\n    }\n  }\n\n  return files;\n}\n\nID Node::generateSignature() {\n  return static_cast<ID>(QDateTime::currentDateTime().toSecsSinceEpoch() +\n                         (static_cast<qulonglong>(QRandomGenerator::global()->generate()) << 32));\n}\n\nvoid Node::checkSignature() {\n  if (m_signature == InvalidId) {\n    m_signature = generateSignature();\n  }\n}\n\n// 视觉效果相关方法\nconst NodeVisual &Node::getVisual() const { return m_visual; }\n\nvoid Node::setVisual(const NodeVisual &p_visual) { m_visual = p_visual; }\n\n// 视觉效果便捷访问方法\nconst QString &Node::getBackgroundColor() const { return m_visual.getBackgroundColor(); }\n\nvoid Node::setBackgroundColor(const QString &p_backgroundColor) {\n  m_visual.setBackgroundColor(p_backgroundColor);\n}\n\nconst QString &Node::getBorderColor() const { return m_visual.getBorderColor(); }\n\nvoid Node::setBorderColor(const QString &p_borderColor) { m_visual.setBorderColor(p_borderColor); }\n\nconst QString &Node::getNameColor() const { return m_visual.getNameColor(); }\n\nvoid Node::setNameColor(const QString &p_nameColor) { m_visual.setNameColor(p_nameColor); }\n\nQString Node::getEffectiveBackgroundColor() const { return getBackgroundColor(); }\n\nQString Node::getEffectiveBorderColor() const { return getBorderColor(); }\n\nvoid Node::updateNodeVisual(const NodeVisual &p_visual) {\n  if (m_visual.getBackgroundColor() == p_visual.getBackgroundColor() &&\n      m_visual.getBorderColor() == p_visual.getBorderColor() &&\n      m_visual.getNameColor() == p_visual.getNameColor()) {\n    return;\n  }\n\n  m_visual = p_visual;\n\n  // 持久化更新\n  getConfigMgr()->updateNodeVisual(this, p_visual);\n\n  // 界面更新\n  emit m_notebook->nodeUpdated(this);\n}\n"
  },
  {
    "path": "src/core/notebook/node.h",
    "content": "#ifndef NODE_H\n#define NODE_H\n\n#include <QDateTime>\n#include <QDir>\n#include <QEnableSharedFromThis>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"nodevisual.h\"\n#include <global.h>\n\nnamespace vnotex {\nclass Notebook;\nclass INotebookConfigMgr;\nclass INotebookBackend;\nclass File;\nclass ExternalNode;\nclass NodeParameters;\n\n// Node of notebook.\nclass Node : public QEnableSharedFromThis<Node> {\npublic:\n  enum Flag {\n    None = 0,\n    // A node with content.\n    Content = 0x1,\n    // A node with children.\n    Container = 0x2,\n    ReadOnly = 0x4,\n    // Whether a node exists on disk.\n    Exists = 0x10\n  };\n  Q_DECLARE_FLAGS(Flags, Flag)\n\n  enum Use { Normal, Root };\n\n  enum { InvalidId = 0 };\n\n  // Constructor with all information loaded.\n  Node(Flags p_flags, const QString &p_name, const NodeParameters &p_paras, Notebook *p_notebook,\n       Node *p_parent);\n\n  // Constructor not loaded.\n  Node(Flags p_flags, const QString &p_name, Notebook *p_notebook, Node *p_parent);\n\n  virtual ~Node();\n\n  bool isLoaded() const;\n\n  bool isRoot() const;\n\n  const QString &getName() const;\n  void setName(const QString &p_name);\n\n  void updateName(const QString &p_name);\n\n  // Fetch path of this node within notebook.\n  // This may not be the same as the actual file path. It depends on the config mgr.\n  virtual QString fetchPath() const;\n\n  // Fetch absolute file path if available.\n  virtual QString fetchAbsolutePath() const = 0;\n\n  bool isContainer() const;\n\n  bool hasContent() const;\n\n  // Whether the node exists on disk (without real check).\n  bool exists() const;\n\n  bool checkExists();\n\n  void setExists(bool p_exists);\n\n  Node::Flags getFlags() const;\n\n  Node::Use getUse() const;\n  void setUse(Node::Use p_use);\n\n  ID getId() const;\n  void updateId(ID p_id);\n\n  ID getSignature() const;\n\n  const QDateTime &getCreatedTimeUtc() const;\n\n  const QDateTime &getModifiedTimeUtc() const;\n  void setModifiedTimeUtc();\n\n  const QVector<QSharedPointer<Node>> &getChildrenRef() const;\n  QVector<QSharedPointer<Node>> getChildren() const;\n  int getChildrenCount() const;\n\n  QSharedPointer<Node> findChild(const QString &p_name, bool p_caseSensitive = true) const;\n\n  bool containsChild(const QString &p_name, bool p_caseSensitive = true) const;\n\n  bool containsChild(const QSharedPointer<Node> &p_node) const;\n\n  // Case sensitive.\n  bool containsContainerChild(const QString &p_name) const;\n\n  // Case sensitive.\n  bool containsContentChild(const QString &p_name) const;\n\n  bool isLegalNameForNewChild(const QString &p_name) const;\n\n  void addChild(const QSharedPointer<Node> &p_node);\n\n  void insertChild(int p_idx, const QSharedPointer<Node> &p_node);\n\n  void removeChild(const QSharedPointer<Node> &p_node);\n\n  QVector<QSharedPointer<ExternalNode>> fetchExternalChildren() const;\n\n  void setParent(Node *p_parent);\n  Node *getParent() const;\n\n  Notebook *getNotebook() const;\n\n  virtual void load();\n  virtual void save();\n\n  const QStringList &getTags() const;\n  void updateTags(const QStringList &p_tags);\n\n  const QString &getAttachmentFolder() const;\n  void setAttachmentFolder(const QString &p_attachmentFolder);\n\n  QString fetchAttachmentFolderPath();\n\n  // 视觉效果相关方法\n  const NodeVisual &getVisual() const;\n  void setVisual(const NodeVisual &p_visual);\n\n  // 视觉效果便捷访问方法\n  const QString &getBackgroundColor() const;\n  void setBackgroundColor(const QString &p_backgroundColor);\n\n  const QString &getBorderColor() const;\n  void setBorderColor(const QString &p_borderColor);\n\n  const QString &getNameColor() const;\n  void setNameColor(const QString &p_nameColor);\n\n  // 获取有效颜色（直接返回设置的颜色）\n  QString getEffectiveBackgroundColor() const;\n  QString getEffectiveBorderColor() const;\n\n  void updateNodeVisual(const NodeVisual &p_visual);\n\n  virtual QStringList addAttachment(const QString &p_destFolderPath,\n                                    const QStringList &p_files) = 0;\n\n  virtual QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) = 0;\n\n  virtual QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) = 0;\n\n  virtual QString renameAttachment(const QString &p_path, const QString &p_name) = 0;\n\n  virtual void removeAttachment(const QStringList &p_paths) = 0;\n\n  QDir toDir() const;\n\n  bool isReadOnly() const;\n  void setReadOnly(bool p_readOnly);\n\n  // Get File if this node has content.\n  virtual QSharedPointer<File> getContentFile() = 0;\n\n  void loadCompleteInfo(const NodeParameters &p_paras,\n                        const QVector<QSharedPointer<Node>> &p_children);\n\n  INotebookConfigMgr *getConfigMgr() const;\n\n  INotebookBackend *getBackend() const;\n\n  bool canRename(const QString &p_newName) const;\n\n  void sortChildren(const QVector<int> &p_beforeIdx, const QVector<int> &p_afterIdx);\n\n  // Get content files recursively.\n  QList<QSharedPointer<File>> collectFiles();\n\n  static bool isAncestor(const Node *p_ancestor, const Node *p_child);\n\n  static ID generateSignature();\n\nprotected:\n  Notebook *m_notebook = nullptr;\n\n  bool m_loaded = false;\n\nprivate:\n  void checkSignature();\n\n  Flags m_flags = Flag::None;\n\n  Use m_use = Use::Normal;\n\n  ID m_id = InvalidId;\n\n  // A long random number created when the node is created.\n  // Use to avoid conflicts of m_id.\n  ID m_signature = InvalidId;\n\n  QString m_name;\n\n  QDateTime m_createdTimeUtc;\n\n  QDateTime m_modifiedTimeUtc;\n\n  QStringList m_tags;\n\n  QString m_attachmentFolder;\n\n  NodeVisual m_visual;\n\n  Node *m_parent = nullptr;\n\n  QVector<QSharedPointer<Node>> m_children;\n};\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(Node::Flags)\n} // namespace vnotex\n\n#endif // NODE_H\n"
  },
  {
    "path": "src/core/notebook/nodeparameters.cpp",
    "content": "#include \"nodeparameters.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nNodeParameters::NodeParameters(ID p_id) : m_id(p_id) {}\r\n"
  },
  {
    "path": "src/core/notebook/nodeparameters.h",
    "content": "#ifndef NODEPARAMETERS_H\n#define NODEPARAMETERS_H\n\n#include <QDateTime>\n#include <QStringList>\n\n#include <core/global.h>\n\n#include \"node.h\"\n#include \"nodevisual.h\"\n\nnamespace vnotex {\nclass NodeParameters {\npublic:\n  NodeParameters() = default;\n\n  NodeParameters(ID p_id);\n\n  ID m_id = Node::InvalidId;\n\n  ID m_signature = Node::InvalidId;\n\n  QDateTime m_createdTimeUtc = QDateTime::currentDateTimeUtc();\n\n  QDateTime m_modifiedTimeUtc = QDateTime::currentDateTimeUtc();\n\n  QStringList m_tags;\n\n  QString m_attachmentFolder;\n\n  NodeVisual m_visual;\n};\n} // namespace vnotex\n\n#endif // NODEPARAMETERS_H\n"
  },
  {
    "path": "src/core/notebook/nodevisual.cpp",
    "content": "#include \"nodevisual.h\"\n\n#include <QColor>\n#include <QtMath>\n\nusing namespace vnotex;\n\nNodeVisual::NodeVisual(const QString &p_backgroundColor, const QString &p_borderColor,\n                       const QString &p_nameColor)\n    : m_backgroundColor(p_backgroundColor), m_borderColor(p_borderColor), m_nameColor(p_nameColor) {\n}\n\nbool NodeVisual::hasAnyVisualEffect() const {\n  return !m_backgroundColor.isEmpty() || !m_borderColor.isEmpty() || !m_nameColor.isEmpty();\n}\n\nvoid NodeVisual::clearAllColors() {\n  m_backgroundColor.clear();\n  m_borderColor.clear();\n  m_nameColor.clear();\n}\n"
  },
  {
    "path": "src/core/notebook/nodevisual.h",
    "content": "#ifndef NODEVISUAL_H\n#define NODEVISUAL_H\n\n#include <QString>\n\n/*\n * 节点视觉效果类\n * 自定义节点名称，背景颜色，边框颜色，节点名称颜色\n * 支持清除所有颜色，包括背景颜色，边框颜色，节点名称颜色\n * 支持级联修改，包括背景颜色，边框颜色，节点名称颜色\n */\nnamespace vnotex {\nclass NodeVisual {\npublic:\n  NodeVisual() = default;\n\n  NodeVisual(const QString &p_backgroundColor, const QString &p_borderColor,\n             const QString &p_nameColor);\n\n  // 背景颜色\n  const QString &getBackgroundColor() const { return m_backgroundColor; }\n  void setBackgroundColor(const QString &p_color) { m_backgroundColor = p_color; }\n\n  // 边框颜色\n  const QString &getBorderColor() const { return m_borderColor; }\n  void setBorderColor(const QString &p_color) { m_borderColor = p_color; }\n\n  // 节点名称颜色\n  const QString &getNameColor() const { return m_nameColor; }\n  void setNameColor(const QString &p_color) { m_nameColor = p_color; }\n\n  // 判断是否有任何视觉效果\n  bool hasAnyVisualEffect() const;\n\n  // 清除所有颜色\n  void clearAllColors();\n\nprivate:\n  QString m_backgroundColor; // 背景颜色\n  QString m_borderColor;     // 边框颜色\n  QString m_nameColor;       // 节点名称颜色\n};\n} // namespace vnotex\n\n#endif // NODEVISUAL_H\n"
  },
  {
    "path": "src/core/notebook/notebook.cpp",
    "content": "#include \"notebook.h\"\n\n#include <QFileInfo>\n\n#include \"nodeparameters.h\"\n#include <core/exception.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <notebookconfigmgr/inotebookconfigmgr.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <versioncontroller/iversioncontroller.h>\n\nusing namespace vnotex;\n\nconst QString Notebook::c_defaultAttachmentFolder = QStringLiteral(\"vx_attachments\");\n\nconst QString Notebook::c_defaultImageFolder = QStringLiteral(\"vx_images\");\n\nconst QString Notebook::c_defaultRecycleBinFolder = QStringLiteral(\"vx_recycle_bin\");\n\nstatic vnotex::ID generateNotebookID() {\n  static vnotex::ID id = Notebook::InvalidId;\n  return ++id;\n}\n\nNotebook::Notebook(const NotebookParameters &p_paras, QObject *p_parent)\n    : QObject(p_parent), m_id(generateNotebookID()), m_type(p_paras.m_type), m_name(p_paras.m_name),\n      m_description(p_paras.m_description), m_rootFolderPath(p_paras.m_rootFolderPath),\n      m_icon(p_paras.m_icon), m_imageFolder(p_paras.m_imageFolder),\n      m_attachmentFolder(p_paras.m_attachmentFolder), m_createdTimeUtc(p_paras.m_createdTimeUtc),\n      m_backend(p_paras.m_notebookBackend), m_versionController(p_paras.m_versionController),\n      m_configMgr(p_paras.m_notebookConfigMgr) {\n  if (m_imageFolder.isEmpty()) {\n    m_imageFolder = c_defaultImageFolder;\n  }\n  if (m_attachmentFolder.isEmpty()) {\n    m_attachmentFolder = c_defaultAttachmentFolder;\n  }\n  if (m_recycleBinFolder.isEmpty()) {\n    m_recycleBinFolder = c_defaultRecycleBinFolder;\n  }\n\n  m_configMgr->setNotebook(this);\n}\n\nNotebook::Notebook(const QString &p_name, QObject *p_parent) : QObject(p_parent), m_name(p_name) {}\n\nNotebook::~Notebook() {}\n\nvoid Notebook::initialize() {\n  if (m_initialized) {\n    return;\n  }\n\n  m_initialized = true;\n  initializeInternal();\n}\n\nvnotex::ID Notebook::getId() const { return m_id; }\n\nconst QString &Notebook::getType() const { return m_type; }\n\nconst QString &Notebook::getName() const { return m_name; }\n\nvoid Notebook::setName(const QString &p_name) { m_name = p_name; }\n\nvoid Notebook::updateName(const QString &p_name) {\n  Q_ASSERT(!p_name.isEmpty());\n  if (p_name == m_name) {\n    return;\n  }\n\n  m_name = p_name;\n  updateNotebookConfig();\n  emit updated();\n}\n\nconst QString &Notebook::getDescription() const { return m_description; }\n\nvoid Notebook::setDescription(const QString &p_description) { m_description = p_description; }\n\nvoid Notebook::updateDescription(const QString &p_description) {\n  if (p_description == m_description) {\n    return;\n  }\n\n  m_description = p_description;\n  updateNotebookConfig();\n  emit updated();\n}\n\nconst QString &Notebook::getRootFolderPath() const { return m_rootFolderPath; }\n\nQString Notebook::getRootFolderAbsolutePath() const {\n  return PathUtils::absolutePath(m_rootFolderPath);\n}\n\nQString Notebook::getConfigFolderAbsolutePath() const {\n  const auto &folderPath = m_configMgr->getConfigFolderPath();\n  if (folderPath.isEmpty()) {\n    return QString();\n  }\n\n  return getBackend()->getFullPath(folderPath);\n}\n\nconst QIcon &Notebook::getIcon() const { return m_icon; }\n\nvoid Notebook::setIcon(const QIcon &p_icon) { m_icon = p_icon; }\n\nconst QString &Notebook::getImageFolder() const { return m_imageFolder; }\n\nconst QString &Notebook::getAttachmentFolder() const { return m_attachmentFolder; }\n\nconst QString &Notebook::getRecycleBinFolder() const { return m_recycleBinFolder; }\n\nQString Notebook::getRecycleBinFolderAbsolutePath() const {\n  if (QDir::isAbsolutePath(m_recycleBinFolder)) {\n    if (!QFileInfo::exists(m_recycleBinFolder)) {\n      QDir dir(m_recycleBinFolder);\n      dir.mkpath(m_recycleBinFolder);\n    }\n    return m_recycleBinFolder;\n  } else {\n    auto folderPath = getBackend()->getFullPath(m_recycleBinFolder);\n    if (!getBackend()->exists(m_recycleBinFolder)) {\n      getBackend()->makePath(m_recycleBinFolder);\n    }\n    return folderPath;\n  }\n}\n\nconst QSharedPointer<INotebookBackend> &Notebook::getBackend() const { return m_backend; }\n\nconst QSharedPointer<IVersionController> &Notebook::getVersionController() const {\n  return m_versionController;\n}\n\nconst QSharedPointer<INotebookConfigMgr> &Notebook::getConfigMgr() const { return m_configMgr; }\n\nconst QSharedPointer<Node> &Notebook::getRootNode() const {\n  if (!m_root) {\n    const_cast<Notebook *>(this)->m_root = m_configMgr->loadRootNode();\n    Q_ASSERT(m_root->isRoot());\n  }\n\n  return m_root;\n}\n\nQSharedPointer<Node> Notebook::newNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                                       const QString &p_content) {\n  return m_configMgr->newNode(p_parent, p_flags, p_name, p_content);\n}\n\nconst QDateTime &Notebook::getCreatedTimeUtc() const { return m_createdTimeUtc; }\n\nQSharedPointer<Node> Notebook::loadNodeByPath(const QString &p_path) {\n  if (!PathUtils::pathContains(m_rootFolderPath, p_path)) {\n    return nullptr;\n  }\n\n  QString relativePath;\n  QFileInfo fi(p_path);\n  if (fi.isAbsolute()) {\n    if (!fi.exists()) {\n      return nullptr;\n    }\n\n    relativePath = PathUtils::relativePath(m_rootFolderPath, p_path);\n  } else {\n    relativePath = p_path;\n  }\n\n  return m_configMgr->loadNodeByPath(getRootNode(), relativePath);\n}\n\nQSharedPointer<Node> Notebook::copyNodeAsChildOf(const QSharedPointer<Node> &p_src, Node *p_dest,\n                                                 bool p_move) {\n  Q_ASSERT(p_src != p_dest);\n  Q_ASSERT(p_dest->getNotebook() == this);\n\n  if (Node::isAncestor(p_src.data(), p_dest)) {\n    Exception::throwOne(Exception::Type::InvalidArgument,\n                        QStringLiteral(\"source (%1) is the ancestor of destination (%2)\")\n                            .arg(p_src->fetchPath(), p_dest->fetchPath()));\n    return nullptr;\n  }\n\n  if (p_src->getParent() == p_dest && p_move) {\n    return p_src;\n  }\n\n  return m_configMgr->copyNodeAsChildOf(p_src, p_dest, p_move);\n}\n\nvoid Notebook::removeNode(const QSharedPointer<Node> &p_node, bool p_force, bool p_configOnly) {\n  Q_ASSERT(p_node && !p_node->isRoot());\n  Q_ASSERT(p_node->getNotebook() == this);\n  m_configMgr->removeNode(p_node, p_force, p_configOnly);\n}\n\nvoid Notebook::removeNode(Node *p_node, bool p_force, bool p_configOnly) {\n  Q_ASSERT(p_node);\n  removeNode(p_node->sharedFromThis(), p_force, p_configOnly);\n}\n\nvoid Notebook::moveNodeToRecycleBin(Node *p_node) {\n  moveNodeToRecycleBin(p_node->sharedFromThis());\n}\n\nvoid Notebook::moveNodeToRecycleBin(const QSharedPointer<Node> &p_node) {\n  Q_ASSERT(p_node && !p_node->isRoot());\n  m_configMgr->removeNodeToFolder(p_node, getOrCreateRecycleBinDateFolder());\n}\n\nQString Notebook::getOrCreateRecycleBinDateFolder() {\n  // Name after date.\n  auto dateFolderName = QDate::currentDate().toString(QStringLiteral(\"yyyyMMdd\"));\n  auto folderPath = PathUtils::concatenateFilePath(getRecycleBinFolder(), dateFolderName);\n  if (QDir::isAbsolutePath(folderPath)) {\n    qDebug() << \"using absolute recycle bin folder\" << folderPath;\n    QDir dir(folderPath);\n    if (dir.exists()) {\n      dir.mkpath(folderPath);\n    }\n  } else {\n    if (!getBackend()->exists(folderPath)) {\n      getBackend()->makePath(folderPath);\n    }\n  }\n\n  return folderPath;\n}\n\nvoid Notebook::moveFileToRecycleBin(const QString &p_filePath) {\n  auto destFilePath = PathUtils::concatenateFilePath(getOrCreateRecycleBinDateFolder(),\n                                                     PathUtils::fileName(p_filePath));\n  destFilePath = getBackend()->renameIfExistsCaseInsensitive(destFilePath);\n  m_backend->copyFile(p_filePath, destFilePath, true);\n}\n\nvoid Notebook::moveDirToRecycleBin(const QString &p_dirPath) {\n  auto destDirPath = PathUtils::concatenateFilePath(getOrCreateRecycleBinDateFolder(),\n                                                    PathUtils::fileName(p_dirPath));\n  destDirPath = getBackend()->renameIfExistsCaseInsensitive(destDirPath);\n  m_backend->copyDir(p_dirPath, destDirPath, true);\n}\n\nQSharedPointer<Node> Notebook::addAsNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                                         const NodeParameters &p_paras) {\n  return m_configMgr->addAsNode(p_parent, p_flags, p_name, p_paras);\n}\n\nbool Notebook::isBuiltInFile(const Node *p_node, const QString &p_name) const {\n  return m_configMgr->isBuiltInFile(p_node, p_name);\n}\n\nbool Notebook::isBuiltInFolder(const Node *p_node, const QString &p_name) const {\n  return m_configMgr->isBuiltInFolder(p_node, p_name);\n}\n\nQSharedPointer<Node> Notebook::copyAsNode(Node *p_parent, Node::Flags p_flags,\n                                          const QString &p_path) {\n  return m_configMgr->copyAsNode(p_parent, p_flags, p_path);\n}\n\nvoid Notebook::reloadNodes() {\n  m_root.clear();\n  getRootNode();\n}\n\nQJsonObject Notebook::getExtraConfig(const QString &p_key) const {\n  const auto &configs = getExtraConfigs();\n  return configs.value(p_key).toObject();\n}\n\nQList<QSharedPointer<File>> Notebook::collectFiles() {\n  QList<QSharedPointer<File>> files;\n\n  auto rootNode = getRootNode();\n\n  const auto &children = rootNode->getChildrenRef();\n  for (const auto &child : children) {\n    if (child->getUse() != Node::Use::Normal) {\n      continue;\n    }\n    files.append(child->collectFiles());\n  }\n\n  return files;\n}\n\nQStringList Notebook::scanAndImportExternalFiles() {\n  return m_configMgr->scanAndImportExternalFiles(getRootNode().data());\n}\n\nbool Notebook::rebuildDatabase() { return false; }\n\nHistoryI *Notebook::history() { return nullptr; }\n\nTagI *Notebook::tag() { return nullptr; }\n\nvoid Notebook::emptyRecycleBin() {\n  QDir dir(getRecycleBinFolderAbsolutePath());\n  auto children = dir.entryList(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);\n  for (const auto &child : children) {\n    FileUtils::removeDir(dir.filePath(child));\n  }\n}\n"
  },
  {
    "path": "src/core/notebook/notebook.h",
    "content": "#ifndef NOTEBOOK_H\n#define NOTEBOOK_H\n\n#include <QIcon>\n#include <QObject>\n#include <QSharedPointer>\n\n#include \"node.h\"\n#include \"notebookparameters.h\"\n#include <core/global.h>\n\nnamespace vnotex {\nclass INotebookBackend;\nclass IVersionController;\nclass INotebookConfigMgr;\nclass NodeParameters;\nclass File;\nclass HistoryI;\nclass TagI;\n\n// Base class of notebook.\nclass Notebook : public QObject {\n  Q_OBJECT\npublic:\n  Notebook(const NotebookParameters &p_paras, QObject *p_parent = nullptr);\n\n  // Used for UT only.\n  Notebook(const QString &p_name, QObject *p_parent = nullptr);\n\n  virtual ~Notebook();\n\n  void initialize();\n\n  enum { InvalidId = 0 };\n\n  ID getId() const;\n\n  const QString &getType() const;\n\n  const QString &getName() const;\n  void setName(const QString &p_name);\n  // Change the config and backend file as well.\n  void updateName(const QString &p_name);\n\n  const QString &getDescription() const;\n  void setDescription(const QString &p_description);\n  void updateDescription(const QString &p_description);\n\n  // Use getRootFolderAbsolutePath() instead for access.\n  const QString &getRootFolderPath() const;\n\n  QString getRootFolderAbsolutePath() const;\n\n  // Get the absolute path of the config folder if applicable.\n  QString getConfigFolderAbsolutePath() const;\n\n  const QIcon &getIcon() const;\n  void setIcon(const QIcon &p_icon);\n\n  const QString &getImageFolder() const;\n\n  const QString &getAttachmentFolder() const;\n\n  const QString &getRecycleBinFolder() const;\n\n  QString getRecycleBinFolderAbsolutePath() const;\n\n  const QDateTime &getCreatedTimeUtc() const;\n\n  const QSharedPointer<INotebookBackend> &getBackend() const;\n\n  const QSharedPointer<IVersionController> &getVersionController() const;\n\n  const QSharedPointer<INotebookConfigMgr> &getConfigMgr() const;\n\n  const QSharedPointer<Node> &getRootNode() const;\n\n  QSharedPointer<Node> newNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                               const QString &p_content = QString());\n\n  // Add @p_name under @p_parent to add as a new node @p_type.\n  QSharedPointer<Node> addAsNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                                 const NodeParameters &p_paras);\n\n  // Copy @p_path to @p_parent and add as a new node @p_type.\n  QSharedPointer<Node> copyAsNode(Node *p_parent, Node::Flags p_flags, const QString &p_path);\n\n  virtual void updateNotebookConfig() = 0;\n\n  virtual void removeNotebookConfig() = 0;\n\n  // @p_path could be absolute or relative.\n  virtual QSharedPointer<Node> loadNodeByPath(const QString &p_path);\n\n  // Copy @p_src as a child of @p_dest. They may belong to different notebooks.\n  virtual QSharedPointer<Node> copyNodeAsChildOf(const QSharedPointer<Node> &p_src, Node *p_dest,\n                                                 bool p_move);\n\n  // Remove @p_node and delete all related files from disk.\n  // @p_force: if true, will delete all files including files not tracked by configmgr.\n  // @p_configOnly: if true, will just remove node from config.\n  void removeNode(const QSharedPointer<Node> &p_node, bool p_force = false,\n                  bool p_configOnly = false);\n\n  void removeNode(Node *p_node, bool p_force = false, bool p_configOnly = false);\n\n  void moveNodeToRecycleBin(const QSharedPointer<Node> &p_node);\n\n  void moveNodeToRecycleBin(Node *p_node);\n\n  // Move @p_filePath to the recycle bin, without adding it as a child node.\n  void moveFileToRecycleBin(const QString &p_filePath);\n\n  // Move @p_dirPath to the recycle bin, without adding it as a child node.\n  void moveDirToRecycleBin(const QString &p_dirPath);\n\n  virtual void emptyRecycleBin();\n\n  // Remove all files of this notebook from disk.\n  virtual void remove() = 0;\n\n  // Whether @p_name is a built-in file under @p_node.\n  bool isBuiltInFile(const Node *p_node, const QString &p_name) const;\n\n  bool isBuiltInFolder(const Node *p_node, const QString &p_name) const;\n\n  void reloadNodes();\n\n  // Hold extra 3rd party configs.\n  virtual const QJsonObject &getExtraConfigs() const = 0;\n  QJsonObject getExtraConfig(const QString &p_key) const;\n  virtual void setExtraConfig(const QString &p_key, const QJsonObject &p_obj) = 0;\n\n  // Get content files recursively.\n  QList<QSharedPointer<File>> collectFiles();\n\n  QStringList scanAndImportExternalFiles();\n\n  virtual bool rebuildDatabase();\n\n  static const QString c_defaultAttachmentFolder;\n\n  static const QString c_defaultImageFolder;\n\n  static const QString c_defaultRecycleBinFolder;\n\npublic:\n  // Return null if history is not suported.\n  virtual HistoryI *history();\n\n  // Return null if tag is not suported.\n  virtual TagI *tag();\n\nsignals:\n  void updated();\n\n  void nodeUpdated(const Node *p_node);\n\n  void tagsUpdated();\n\nprotected:\n  virtual void initializeInternal() = 0;\n\nprivate:\n  QString getOrCreateRecycleBinDateFolder();\n\n  bool m_initialized = false;\n\n  // ID of this notebook.\n  // Will be assigned uniquely once loaded.\n  ID m_id;\n\n  // Type of this notebook.\n  QString m_type;\n\n  // Name of this notebook.\n  QString m_name;\n\n  // Description of this notebook.\n  QString m_description;\n\n  // Path of the notebook root folder.\n  QString m_rootFolderPath;\n\n  QIcon m_icon;\n\n  // Name of the folder to hold images.\n  QString m_imageFolder;\n\n  // Name of the folder to hold attachments.\n  QString m_attachmentFolder;\n\n  // Name or path of the folder to hold deleted files.\n  QString m_recycleBinFolder;\n\n  QDateTime m_createdTimeUtc;\n\n  // Backend for file access and synchronization.\n  QSharedPointer<INotebookBackend> m_backend;\n\n  // Version controller.\n  QSharedPointer<IVersionController> m_versionController;\n\n  // Config manager to read/wirte config files.\n  QSharedPointer<INotebookConfigMgr> m_configMgr;\n\n  QSharedPointer<Node> m_root;\n};\n} // namespace vnotex\n\n#endif // NOTEBOOK_H\n"
  },
  {
    "path": "src/core/notebook/notebookdatabaseaccess.cpp",
    "content": "#include \"notebookdatabaseaccess.h\"\r\n\r\n#include <QDebug>\r\n#include <QSet>\r\n#include <QtSql>\r\n\r\n#include <core/exception.h>\r\n\r\n#include \"node.h\"\r\n#include \"notebook.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nstatic QString c_nodeTableName = \"node\";\r\n\r\nstatic QString c_tagTableName = \"tag\";\r\n\r\nstatic QString c_nodeTagTableName = \"tag_node\";\r\n\r\nNotebookDatabaseAccess::NotebookDatabaseAccess(Notebook *p_notebook, const QString &p_databaseFile,\r\n                                               QObject *p_parent)\r\n    : QObject(p_parent), m_notebook(p_notebook), m_databaseFile(p_databaseFile),\r\n      m_connectionName(p_databaseFile) {}\r\n\r\nbool NotebookDatabaseAccess::open() {\r\n  auto db = QSqlDatabase::addDatabase(QStringLiteral(\"QSQLITE\"), m_connectionName);\r\n  db.setDatabaseName(m_databaseFile);\r\n  if (!db.open()) {\r\n    qWarning() << QStringLiteral(\"failed to open notebook database (%1) (%2)\")\r\n                      .arg(m_databaseFile, db.lastError().text());\r\n    return false;\r\n  }\r\n\r\n  {\r\n    // Enable foreign key support.\r\n    QSqlQuery query(db);\r\n    if (!query.exec(\"PRAGMA foreign_keys = ON\")) {\r\n      qWarning() << \"failed to turn on foreign key support\" << query.lastError().text();\r\n      return false;\r\n    }\r\n  }\r\n\r\n  m_valid = true;\r\n  m_fresh = db.tables().isEmpty();\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::isFresh() const { return m_fresh; }\r\n\r\nbool NotebookDatabaseAccess::isValid() const { return m_valid; }\r\n\r\n// Maybe insert new table according to @p_configVersion.\r\nvoid NotebookDatabaseAccess::setupTables(QSqlDatabase &p_db, int p_configVersion) {\r\n  Q_UNUSED(p_configVersion);\r\n\r\n  if (!m_valid) {\r\n    return;\r\n  }\r\n\r\n  QSqlQuery query(p_db);\r\n\r\n  if (m_fresh) {\r\n    // Node.\r\n    bool ret = query.exec(\r\n        QStringLiteral(\r\n            \"CREATE TABLE %1 (\\n\"\r\n            \"    id INTEGER PRIMARY KEY,\\n\"\r\n            \"    name TEXT NOT NULL,\\n\"\r\n            \"    signature INTEGER NOT NULL,\\n\"\r\n            \"    parent_id INTEGER NULL REFERENCES %1(id) ON DELETE CASCADE ON UPDATE CASCADE)\\n\")\r\n            .arg(c_nodeTableName));\r\n    if (!ret) {\r\n      qWarning() << QStringLiteral(\"failed to create database table (%1) (%2)\")\r\n                        .arg(c_nodeTableName, query.lastError().text());\r\n      m_valid = false;\r\n      return;\r\n    }\r\n\r\n    // Tag.\r\n    ret = query.exec(QStringLiteral(\"CREATE TABLE %1 (\\n\"\r\n                                    \"    name TEXT PRIMARY KEY,\\n\"\r\n                                    \"    parent_name TEXT NULL REFERENCES %1(name) ON DELETE \"\r\n                                    \"CASCADE ON UPDATE CASCADE) WITHOUT ROWID\\n\")\r\n                         .arg(c_tagTableName));\r\n    if (!ret) {\r\n      qWarning() << QStringLiteral(\"failed to create database table (%1) (%2)\")\r\n                        .arg(c_tagTableName, query.lastError().text());\r\n      m_valid = false;\r\n      return;\r\n    }\r\n\r\n    // Node_Tag.\r\n    ret = query.exec(\r\n        QStringLiteral(\r\n            \"CREATE TABLE %1 (\\n\"\r\n            \"    node_id INTEGER REFERENCES %2(id) ON DELETE CASCADE ON UPDATE CASCADE,\\n\"\r\n            \"    tag_name TEXT REFERENCES %3(name) ON DELETE CASCADE ON UPDATE CASCADE)\\n\")\r\n            .arg(c_nodeTagTableName, c_nodeTableName, c_tagTableName));\r\n    if (!ret) {\r\n      qWarning() << QStringLiteral(\"failed to create database table (%1) (%2)\")\r\n                        .arg(c_nodeTagTableName, query.lastError().text());\r\n      m_valid = false;\r\n      return;\r\n    }\r\n  }\r\n}\r\n\r\nvoid NotebookDatabaseAccess::initialize(int p_configVersion) {\r\n  open();\r\n\r\n  auto db = getDatabase();\r\n  setupTables(db, p_configVersion);\r\n}\r\n\r\nvoid NotebookDatabaseAccess::close() {\r\n  getDatabase().close();\r\n  QSqlDatabase::removeDatabase(m_connectionName);\r\n  m_valid = false;\r\n}\r\n\r\nbool NotebookDatabaseAccess::addNode(Node *p_node, bool p_ignoreId) {\r\n  p_node->load();\r\n\r\n  Q_ASSERT(p_node->getSignature() != Node::InvalidId);\r\n\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  if (p_ignoreId) {\r\n    query.prepare(QStringLiteral(\"INSERT INTO %1 (name, signature, parent_id)\\n\"\r\n                                 \"    VALUES (:name, :signature, :parent_id)\")\r\n                      .arg(c_nodeTableName));\r\n    query.bindValue(\":name\", p_node->getName());\r\n    query.bindValue(\":signature\", p_node->getSignature());\r\n    query.bindValue(\":parent_id\", p_node->getParent() ? p_node->getParent()->getId() : QVariant());\r\n  } else {\r\n    bool useNewId = false;\r\n    if (p_node->getId() != InvalidId) {\r\n      auto nodeRec = queryNode(p_node->getId());\r\n      if (nodeRec) {\r\n        auto nodePath = queryNodeParentPath(p_node->getId());\r\n        if (existsNode(p_node, nodeRec.data(), nodePath)) {\r\n          return true;\r\n        }\r\n\r\n        if (nodePath.isEmpty()) {\r\n          useNewId = true;\r\n          m_obsoleteNodes.insert(nodeRec->m_id);\r\n        } else {\r\n          auto relativePath = nodePath.join(QLatin1Char('/'));\r\n          auto oldNode = m_notebook->loadNodeByPath(relativePath);\r\n          Q_ASSERT(oldNode != p_node);\r\n          if (oldNode) {\r\n            // The node with the same id still exists.\r\n            useNewId = true;\r\n          } else if (nodeRec->m_signature == p_node->getSignature() &&\r\n                     nodeRec->m_name == p_node->getName()) {\r\n            // @p_node should be the same node as @nodeRec.\r\n            return updateNode(p_node);\r\n          } else {\r\n            // @nodeRec is now an obsolete node.\r\n            useNewId = true;\r\n            m_obsoleteNodes.insert(nodeRec->m_id);\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      useNewId = true;\r\n    }\r\n\r\n    if (useNewId) {\r\n      query.prepare(QStringLiteral(\"INSERT INTO %1 (name, signature, parent_id)\\n\"\r\n                                   \"    VALUES (:name, :signature, :parent_id)\")\r\n                        .arg(c_nodeTableName));\r\n    } else {\r\n      query.prepare(QStringLiteral(\"INSERT INTO %1 (id, name, signature, parent_id)\\n\"\r\n                                   \"    VALUES (:id, :name, :signature, :parent_id)\")\r\n                        .arg(c_nodeTableName));\r\n      query.bindValue(\":id\", p_node->getId());\r\n    }\r\n    query.bindValue(\":name\", p_node->getName());\r\n    query.bindValue(\":signature\", p_node->getSignature());\r\n    query.bindValue(\":parent_id\", p_node->getParent() ? p_node->getParent()->getId() : QVariant());\r\n  }\r\n\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to add node\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n\r\n  const ID id = query.lastInsertId().toULongLong();\r\n  p_node->updateId(id);\r\n\r\n  qDebug() << \"added node id\" << id << p_node->getName();\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::addNodeRecursively(Node *p_node, bool p_ignoreId) {\r\n  if (!p_node) {\r\n    return false;\r\n  }\r\n\r\n  auto paNode = p_node->getParent();\r\n  if (paNode && !addNodeRecursively(paNode, p_ignoreId)) {\r\n    return false;\r\n  }\r\n\r\n  return addNode(p_node, p_ignoreId);\r\n}\r\n\r\nQSharedPointer<NotebookDatabaseAccess::NodeRecord> NotebookDatabaseAccess::queryNode(ID p_id) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"SELECT id, name, signature, parent_id FROM %1 WHERE id = :id\")\r\n                    .arg(c_nodeTableName));\r\n  query.bindValue(\":id\", p_id);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to query node\" << query.executedQuery() << query.lastError().text();\r\n    return nullptr;\r\n  }\r\n\r\n  if (query.next()) {\r\n    auto nodeRec = QSharedPointer<NodeRecord>::create();\r\n    nodeRec->m_id = query.value(0).toULongLong();\r\n    nodeRec->m_name = query.value(1).toString();\r\n    nodeRec->m_signature = query.value(2).toULongLong();\r\n    nodeRec->m_parentId = query.value(3).toULongLong();\r\n    return nodeRec;\r\n  }\r\n\r\n  return nullptr;\r\n}\r\n\r\nQSqlDatabase NotebookDatabaseAccess::getDatabase() const {\r\n  return QSqlDatabase::database(m_connectionName);\r\n}\r\n\r\nbool NotebookDatabaseAccess::existsNode(const Node *p_node) {\r\n  if (!p_node) {\r\n    return false;\r\n  }\r\n\r\n  return existsNode(p_node, queryNode(p_node->getId()).data(),\r\n                    queryNodeParentPath(p_node->getId()));\r\n}\r\n\r\nbool NotebookDatabaseAccess::existsNode(const Node *p_node, const NodeRecord *p_rec,\r\n                                        const QStringList &p_nodePath) {\r\n  if (p_nodePath.isEmpty()) {\r\n    return false;\r\n  }\r\n\r\n  if (!nodeEqual(p_rec, p_node)) {\r\n    return false;\r\n  }\r\n\r\n  return checkNodePath(p_node, p_nodePath);\r\n}\r\n\r\nQStringList NotebookDatabaseAccess::queryNodeParentPath(ID p_id) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"WITH RECURSIVE cte_parents(id, name, parent_id) AS (\\n\"\r\n                               \"    SELECT node.id, node.name, node.parent_id\\n\"\r\n                               \"    FROM %1 node\\n\"\r\n                               \"    WHERE node.id = :id\\n\"\r\n                               \"    UNION ALL\\n\"\r\n                               \"    SELECT node.id, node.name, node.parent_id\\n\"\r\n                               \"    FROM %1 node\\n\"\r\n                               \"    JOIN cte_parents cte ON node.id = cte.parent_id\\n\"\r\n                               \"    LIMIT 5000)\\n\"\r\n                               \"SELECT id, name, parent_id FROM cte_parents\")\r\n                    .arg(c_nodeTableName));\r\n  query.bindValue(\":id\", p_id);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to query node's path\" << query.executedQuery()\r\n               << query.lastError().text();\r\n    return QStringList();\r\n  }\r\n\r\n  QStringList ret;\r\n  ID lastParentId = p_id;\r\n  bool hasResult = false;\r\n  while (query.next()) {\r\n    hasResult = true;\r\n    Q_ASSERT(lastParentId == query.value(0).toULongLong());\r\n    ret.prepend(query.value(1).toString());\r\n    lastParentId = query.value(2).toULongLong();\r\n  }\r\n  Q_ASSERT(!hasResult || lastParentId == InvalidId);\r\n  return ret;\r\n}\r\n\r\nQString NotebookDatabaseAccess::queryNodePath(ID p_id) {\r\n  auto parentPath = queryNodeParentPath(p_id);\r\n  if (parentPath.isEmpty()) {\r\n    return QString();\r\n  }\r\n\r\n  if (parentPath.size() == 1) {\r\n    return parentPath.first();\r\n  }\r\n\r\n  QString relativePath = parentPath.join(QLatin1Char('/'));\r\n  Q_ASSERT(relativePath[0] == QLatin1Char('/'));\r\n  return relativePath.mid(1);\r\n}\r\n\r\nbool NotebookDatabaseAccess::updateNode(const Node *p_node) {\r\n  Q_ASSERT(p_node->getParent());\r\n\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"UPDATE %1\\n\"\r\n                               \"SET name = :name,\\n\"\r\n                               \"    signature = :signature,\\n\"\r\n                               \"    parent_id = :parent_id\\n\"\r\n                               \"WHERE id = :id\")\r\n                    .arg(c_nodeTableName));\r\n  query.bindValue(\":name\", p_node->getName());\r\n  query.bindValue(\":signature\", p_node->getSignature());\r\n  query.bindValue(\":parent_id\", p_node->getParent()->getId());\r\n  query.bindValue(\":id\", p_node->getId());\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to update node\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n\r\n  qDebug() << \"updated node\" << p_node->getId() << p_node->getSignature() << p_node->getName()\r\n           << p_node->getParent()->getId();\r\n\r\n  return true;\r\n}\r\n\r\nvoid NotebookDatabaseAccess::clearObsoleteNodes() {\r\n  if (m_obsoleteNodes.isEmpty()) {\r\n    return;\r\n  }\r\n\r\n  for (auto it : m_obsoleteNodes) {\r\n    if (!removeNode(it)) {\r\n      qWarning() << \"failed to clear obsolete node\" << it;\r\n      continue;\r\n    }\r\n  }\r\n\r\n  m_obsoleteNodes.clear();\r\n}\r\n\r\nbool NotebookDatabaseAccess::removeNode(const Node *p_node) {\r\n  if (existsNode(p_node)) {\r\n    return removeNode(p_node->getId());\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::removeNode(ID p_id) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"DELETE FROM %1\\n\"\r\n                               \"WHERE id = :id\")\r\n                    .arg(c_nodeTableName));\r\n  query.bindValue(\":id\", p_id);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to remove node\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n  qDebug() << \"removed node\" << p_id;\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::nodeEqual(const NodeRecord *p_rec, const Node *p_node) const {\r\n  if (!p_rec) {\r\n    if (p_node) {\r\n      return false;\r\n    } else {\r\n      return true;\r\n    }\r\n  } else if (!p_node) {\r\n    return false;\r\n  }\r\n\r\n  if (p_rec->m_id != p_node->getId()) {\r\n    return false;\r\n  }\r\n  if (p_rec->m_name != p_node->getName()) {\r\n    return false;\r\n  }\r\n  if (p_rec->m_signature != p_node->getSignature()) {\r\n    return false;\r\n  }\r\n  if (p_node->getParent()) {\r\n    if (p_rec->m_parentId != p_node->getParent()->getId()) {\r\n      return false;\r\n    }\r\n  } else if (p_rec->m_parentId != Node::InvalidId) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::checkNodePath(const Node *p_node,\r\n                                           const QStringList &p_nodePath) const {\r\n  for (int i = p_nodePath.size() - 1; i >= 0; --i) {\r\n    if (!p_node) {\r\n      return false;\r\n    }\r\n\r\n    if (p_nodePath[i] != p_node->getName()) {\r\n      return false;\r\n    }\r\n    p_node = p_node->getParent();\r\n  }\r\n\r\n  if (p_node) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::addTag(const QString &p_name, const QString &p_parentName) {\r\n  return addTag(p_name, p_parentName, true);\r\n}\r\n\r\nbool NotebookDatabaseAccess::addTag(const QString &p_name) {\r\n  return addTag(p_name, QString(), false);\r\n}\r\n\r\nbool NotebookDatabaseAccess::addTag(const QString &p_name, const QString &p_parentName,\r\n                                    bool p_updateOnExists) {\r\n  {\r\n    auto tagRec = queryTag(p_name);\r\n    if (tagRec) {\r\n      if (!p_updateOnExists || tagRec->m_parentName == p_parentName) {\r\n        return true;\r\n      }\r\n\r\n      return updateTagParent(p_name, p_parentName);\r\n    }\r\n  }\r\n\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"INSERT INTO %1 (name, parent_name)\\n\"\r\n                               \"    VALUES (:name, :parent_name)\")\r\n                    .arg(c_tagTableName));\r\n  query.bindValue(\":name\", p_name);\r\n  query.bindValue(\":parent_name\", p_parentName.isEmpty() ? QVariant() : p_parentName);\r\n\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to add tag\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n\r\n  qDebug() << \"added tag\" << p_name << \"parentName\" << p_parentName;\r\n  return true;\r\n}\r\n\r\nQSharedPointer<NotebookDatabaseAccess::TagRecord>\r\nNotebookDatabaseAccess::queryTag(const QString &p_name) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(\r\n      QStringLiteral(\"SELECT name, parent_name FROM %1 WHERE name = :name\").arg(c_tagTableName));\r\n  query.bindValue(\":name\", p_name);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to query tag\" << query.executedQuery() << query.lastError().text();\r\n    return nullptr;\r\n  }\r\n\r\n  if (query.next()) {\r\n    auto tagRec = QSharedPointer<TagRecord>::create();\r\n    tagRec->m_name = query.value(0).toString();\r\n    tagRec->m_parentName = query.value(1).toString();\r\n    return tagRec;\r\n  }\r\n\r\n  return nullptr;\r\n}\r\n\r\nbool NotebookDatabaseAccess::updateTagParent(const QString &p_name, const QString &p_parentName) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"UPDATE %1\\n\"\r\n                               \"SET parent_name = :parent_name\\n\"\r\n                               \"WHERE name = :name\")\r\n                    .arg(c_tagTableName));\r\n  query.bindValue(\":name\", p_name);\r\n  query.bindValue(\":parent_name\", p_parentName.isEmpty() ? QVariant() : p_parentName);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to update tag\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n\r\n  qDebug() << \"updated tag parent\" << p_name << p_parentName;\r\n\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::renameTag(const QString &p_name, const QString &p_newName) {\r\n  Q_ASSERT(!p_newName.isEmpty());\r\n  if (p_name == p_newName) {\r\n    return true;\r\n  }\r\n\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"UPDATE %1\\n\"\r\n                               \"SET name = :new_name\\n\"\r\n                               \"WHERE name = :name\")\r\n                    .arg(c_tagTableName));\r\n  query.bindValue(\":name\", p_name);\r\n  query.bindValue(\":new_name\", p_newName);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to update tag\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n\r\n  qDebug() << \"updated tag name\" << p_name << p_newName;\r\n\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::removeTag(const QString &p_name) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"DELETE FROM %1\\n\"\r\n                               \"WHERE name = :name\")\r\n                    .arg(c_tagTableName));\r\n  query.bindValue(\":name\", p_name);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to remove tag\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n  qDebug() << \"removed tag\" << p_name;\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::updateNodeTags(Node *p_node) {\r\n  p_node->load();\r\n\r\n  if (p_node->getId() == Node::InvalidId) {\r\n    qWarning() << \"failed to update tags of node with invalid id\" << p_node->fetchPath();\r\n    return false;\r\n  }\r\n\r\n  const auto &nodeTags = p_node->getTags();\r\n\r\n  {\r\n    QStringList tagsList = queryNodeTags(p_node->getId());\r\n    QSet<QString> tags;\r\n    for (const auto &s : tagsList) {\r\n      tags.insert(s);\r\n    }\r\n    if (tags.isEmpty() && nodeTags.isEmpty()) {\r\n      return true;\r\n    }\r\n\r\n    bool needUpdate = false;\r\n    if (tags.size() != nodeTags.size()) {\r\n      needUpdate = true;\r\n    }\r\n\r\n    for (const auto &tag : nodeTags) {\r\n      if (tags.find(tag) == tags.end()) {\r\n        needUpdate = true;\r\n\r\n        if (!addTag(tag)) {\r\n          qWarning() << \"failed to add tag before addNodeTags\" << p_node->getId() << tag;\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!needUpdate) {\r\n      return true;\r\n    }\r\n  }\r\n\r\n  bool ret = removeNodeTags(p_node->getId());\r\n  if (!ret) {\r\n    return false;\r\n  }\r\n\r\n  return addNodeTags(p_node->getId(), nodeTags);\r\n}\r\n\r\nQStringList NotebookDatabaseAccess::queryNodeTags(ID p_id) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(\r\n      QStringLiteral(\"SELECT tag_name FROM %1 WHERE node_id = :node_id\").arg(c_nodeTagTableName));\r\n  query.bindValue(\":node_id\", p_id);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to query node's tags\" << query.executedQuery()\r\n               << query.lastError().text();\r\n    return QStringList();\r\n  }\r\n\r\n  QStringList tags;\r\n  while (query.next()) {\r\n    tags.append(query.value(0).toString());\r\n  }\r\n  return tags;\r\n}\r\n\r\nbool NotebookDatabaseAccess::removeNodeTags(ID p_id) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"DELETE FROM %1\\n\"\r\n                               \"WHERE node_id = :node_id\")\r\n                    .arg(c_nodeTagTableName));\r\n  query.bindValue(\":node_id\", p_id);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to remove tags of node\" << query.executedQuery()\r\n               << query.lastError().text();\r\n    return false;\r\n  }\r\n  qDebug() << \"removed tags of node\" << p_id;\r\n  return true;\r\n}\r\n\r\nbool NotebookDatabaseAccess::addNodeTags(ID p_id, const QStringList &p_tags) {\r\n  Q_ASSERT(p_id != Node::InvalidId);\r\n  if (p_tags.isEmpty()) {\r\n    return true;\r\n  }\r\n\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"INSERT INTO %1 (node_id, tag_name)\\n\"\r\n                               \"    VALUES (?, ?)\")\r\n                    .arg(c_nodeTagTableName));\r\n\r\n  QVariantList ids;\r\n  QVariantList tagNames;\r\n  for (const auto &tag : p_tags) {\r\n    ids << p_id;\r\n    tagNames << tag;\r\n  }\r\n\r\n  query.addBindValue(ids);\r\n  query.addBindValue(tagNames);\r\n\r\n  if (!query.execBatch()) {\r\n    qWarning() << \"failed to add tags of node\" << query.executedQuery() << query.lastError().text();\r\n    return false;\r\n  }\r\n\r\n  qDebug() << \"added tags of node\" << p_id << p_tags;\r\n  return true;\r\n}\r\n\r\nQList<ID> NotebookDatabaseAccess::queryTagNodes(const QString &p_tag) {\r\n  QList<ID> nodes;\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(\r\n      QStringLiteral(\"SELECT node_id FROM %1 WHERE tag_name = :tag_name\").arg(c_nodeTagTableName));\r\n  query.bindValue(\":tag_name\", p_tag);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to query nodes of tag\" << query.executedQuery()\r\n               << query.lastError().text();\r\n    return nodes;\r\n  }\r\n\r\n  while (query.next()) {\r\n    nodes.append(query.value(0).toULongLong());\r\n  }\r\n  return nodes;\r\n}\r\n\r\nQList<ID> NotebookDatabaseAccess::queryTagNodesRecursive(const QString &p_tag) {\r\n  auto tags = queryTagAndChildren(p_tag);\r\n  if (tags.size() <= 1) {\r\n    return queryTagNodes(p_tag);\r\n  }\r\n\r\n  QSet<ID> allIds;\r\n  for (const auto &tag : tags) {\r\n    auto ids = queryTagNodes(tag);\r\n    for (const auto &id : ids) {\r\n      allIds.insert(id);\r\n    }\r\n  }\r\n\r\n  return allIds.values();\r\n}\r\n\r\nQStringList NotebookDatabaseAccess::queryTagAndChildren(const QString &p_tag) {\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"WITH RECURSIVE cte_children(name, parent_name) AS (\\n\"\r\n                               \"    SELECT tag.name, tag.parent_name\\n\"\r\n                               \"    FROM %1 tag\\n\"\r\n                               \"    WHERE tag.name = :name\\n\"\r\n                               \"    UNION ALL\\n\"\r\n                               \"    SELECT tag.name, tag.parent_name\\n\"\r\n                               \"    FROM %1 tag\\n\"\r\n                               \"    JOIN cte_children cte ON tag.parent_name = cte.name\\n\"\r\n                               \"    LIMIT 5000)\\n\"\r\n                               \"SELECT name FROM cte_children\")\r\n                    .arg(c_tagTableName));\r\n  query.bindValue(\":name\", p_tag);\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to query tag and its children\" << query.executedQuery()\r\n               << query.lastError().text();\r\n    return QStringList();\r\n  }\r\n\r\n  QStringList ret;\r\n  while (query.next()) {\r\n    ret.append(query.value(0).toString());\r\n  }\r\n\r\n  qDebug() << \"tag and its children\" << p_tag << ret;\r\n  return ret;\r\n}\r\n\r\nQStringList NotebookDatabaseAccess::getNodesOfTags(const QStringList &p_tags) {\r\n  QStringList ret;\r\n  if (p_tags.isEmpty()) {\r\n    return ret;\r\n  }\r\n\r\n  QList<ID> nodeIds;\r\n\r\n  if (p_tags.size() == 1) {\r\n    nodeIds = queryTagNodesRecursive(p_tags.first());\r\n  } else {\r\n    QSet<ID> allIds;\r\n    for (const auto &tag : p_tags) {\r\n      auto ids = queryTagNodesRecursive(tag);\r\n      for (const auto &id : ids) {\r\n        allIds.insert(id);\r\n      }\r\n    }\r\n    nodeIds = allIds.values();\r\n  }\r\n\r\n  for (const auto &id : nodeIds) {\r\n    auto nodePath = queryNodePath(id);\r\n    if (nodePath.isNull()) {\r\n      continue;\r\n    }\r\n\r\n    ret.append(nodePath);\r\n  }\r\n\r\n  return ret;\r\n}\r\n\r\nQList<NotebookDatabaseAccess::TagRecord> NotebookDatabaseAccess::getAllTags() {\r\n  QList<TagRecord> ret;\r\n\r\n  auto db = getDatabase();\r\n  QSqlQuery query(db);\r\n  query.prepare(QStringLiteral(\"SELECT name, parent_name FROM %1 ORDER BY parent_name, name\")\r\n                    .arg(c_tagTableName));\r\n  if (!query.exec()) {\r\n    qWarning() << \"failed to query tags\" << query.executedQuery() << query.lastError().text();\r\n    return ret;\r\n  }\r\n\r\n  while (query.next()) {\r\n    ret.append(TagRecord());\r\n    ret.last().m_name = query.value(0).toString();\r\n    ret.last().m_parentName = query.value(1).toString();\r\n  }\r\n  return ret;\r\n}\r\n"
  },
  {
    "path": "src/core/notebook/notebookdatabaseaccess.h",
    "content": "#ifndef NOTEBOOKDATABASEACCESS_H\r\n#define NOTEBOOKDATABASEACCESS_H\r\n\r\n#include <QObject>\r\n#include <QSet>\r\n#include <QSharedPointer>\r\n#include <QtSql/QSqlDatabase>\r\n\r\n#include <core/global.h>\r\n\r\nnamespace tests {\r\nclass TestNotebookDatabase;\r\n}\r\n\r\nnamespace vnotex {\r\nclass Node;\r\nclass Notebook;\r\n\r\nclass NotebookDatabaseAccess : public QObject {\r\n  Q_OBJECT\r\npublic:\r\n  enum { InvalidId = 0 };\r\n\r\n  struct TagRecord {\r\n    QString m_name;\r\n\r\n    QString m_parentName;\r\n  };\r\n\r\n  friend class tests::TestNotebookDatabase;\r\n\r\n  NotebookDatabaseAccess(Notebook *p_notebook, const QString &p_databaseFile,\r\n                         QObject *p_parent = nullptr);\r\n\r\n  bool isFresh() const;\r\n\r\n  bool isValid() const;\r\n\r\n  void initialize(int p_configVersion);\r\n\r\n  bool open();\r\n\r\n  void close();\r\n\r\n  // Node table.\r\npublic:\r\n  bool addNode(Node *p_node, bool p_ignoreId);\r\n\r\n  bool addNodeRecursively(Node *p_node, bool p_ignoreId);\r\n\r\n  // Whether there is a record with the same ID in DB and has the same path.\r\n  bool existsNode(const Node *p_node);\r\n\r\n  void clearObsoleteNodes();\r\n\r\n  bool updateNode(const Node *p_node);\r\n\r\n  bool removeNode(const Node *p_node);\r\n\r\n  // Tag table.\r\npublic:\r\n  // Will update the tag if exists.\r\n  bool addTag(const QString &p_name, const QString &p_parentName);\r\n\r\n  bool addTag(const QString &p_name);\r\n\r\n  bool renameTag(const QString &p_name, const QString &p_newName);\r\n\r\n  bool removeTag(const QString &p_name);\r\n\r\n  // Sorted by parent_name.\r\n  QList<TagRecord> getAllTags();\r\n\r\n  QStringList queryTagAndChildren(const QString &p_tag);\r\n\r\n  // Node_tag table.\r\npublic:\r\n  bool updateNodeTags(Node *p_node);\r\n\r\n  // Return the relative path of nodes of tags @p_tags.\r\n  QStringList getNodesOfTags(const QStringList &p_tags);\r\n\r\nprivate:\r\n  struct NodeRecord {\r\n    ID m_id = InvalidId;\r\n\r\n    QString m_name;\r\n\r\n    ID m_signature = InvalidId;\r\n\r\n    ID m_parentId = InvalidId;\r\n  };\r\n\r\n  void setupTables(QSqlDatabase &p_db, int p_configVersion);\r\n\r\n  QSqlDatabase getDatabase() const;\r\n\r\n  // Return null if not exists.\r\n  QSharedPointer<NodeRecord> queryNode(ID p_id);\r\n\r\n  QStringList queryNodeParentPath(ID p_id);\r\n\r\n  QString queryNodePath(ID p_id);\r\n\r\n  bool nodeEqual(const NodeRecord *p_rec, const Node *p_node) const;\r\n\r\n  bool existsNode(const Node *p_node, const NodeRecord *p_rec, const QStringList &p_nodePath);\r\n\r\n  bool checkNodePath(const Node *p_node, const QStringList &p_nodePath) const;\r\n\r\n  bool removeNode(ID p_id);\r\n\r\n  // Return null if not exists.\r\n  QSharedPointer<TagRecord> queryTag(const QString &p_name);\r\n\r\n  bool updateTagParent(const QString &p_name, const QString &p_parentName);\r\n\r\n  bool addTag(const QString &p_name, const QString &p_parentName, bool p_updateOnExists);\r\n\r\n  QStringList queryNodeTags(ID p_id);\r\n\r\n  QList<ID> queryTagNodes(const QString &p_tag);\r\n\r\n  QList<ID> queryTagNodesRecursive(const QString &p_tag);\r\n\r\n  bool removeNodeTags(ID p_id);\r\n\r\n  bool addNodeTags(ID p_id, const QStringList &p_tags);\r\n\r\n  Notebook *m_notebook = nullptr;\r\n\r\n  QString m_databaseFile;\r\n\r\n  // From Qt's docs: It is highly recommended that you do not keep a copy of the QSqlDatabase around\r\n  // as a member of a class, as this will prevent the instance from being correctly cleaned up on\r\n  // shutdown.\r\n  QString m_connectionName;\r\n\r\n  // Whether it is a new data base whether any tables.\r\n  bool m_fresh = false;\r\n\r\n  bool m_valid = false;\r\n\r\n  QSet<ID> m_obsoleteNodes;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // NOTEBOOKDATABASEACCESS_H\r\n"
  },
  {
    "path": "src/core/notebook/notebookparameters.cpp",
    "content": "#include \"notebookparameters.h\"\n\n#include \"notebookmgr.h\"\n\nusing namespace vnotex;\n\nQSharedPointer<NotebookParameters> NotebookParameters::createNotebookParameters(\n    const NotebookMgr &p_mgr, const QString &p_type, const QString &p_name,\n    const QString &p_description, const QString &p_rootFolderPath, const QIcon &p_icon,\n    const QString &p_imageFolder, const QString &p_attachmentFolder,\n    const QDateTime &p_createdTimeUtc, const QString &p_backend, const QString &p_versionController,\n    const QString &p_configMgr) {\n  auto backend = p_mgr.createNotebookBackend(p_backend, p_rootFolderPath);\n  return createNotebookParameters(p_mgr, backend, p_type, p_name, p_description, p_rootFolderPath,\n                                  p_icon, p_imageFolder, p_attachmentFolder, p_createdTimeUtc,\n                                  p_versionController, p_configMgr);\n}\n\nQSharedPointer<NotebookParameters> NotebookParameters::createNotebookParameters(\n    const NotebookMgr &p_mgr, const QSharedPointer<INotebookBackend> &p_backend,\n    const QString &p_type, const QString &p_name, const QString &p_description,\n    const QString &p_rootFolderPath, const QIcon &p_icon, const QString &p_imageFolder,\n    const QString &p_attachmentFolder, const QDateTime &p_createdTimeUtc,\n    const QString &p_versionController, const QString &p_configMgr) {\n  auto paras = QSharedPointer<NotebookParameters>::create();\n  paras->m_type = p_type;\n  paras->m_name = p_name;\n  paras->m_description = p_description;\n  paras->m_rootFolderPath = p_rootFolderPath;\n  paras->m_icon = p_icon;\n  paras->m_imageFolder = p_imageFolder;\n  paras->m_attachmentFolder = p_attachmentFolder;\n  paras->m_createdTimeUtc = p_createdTimeUtc;\n  paras->m_notebookBackend = p_backend;\n  paras->m_versionController = p_mgr.createVersionController(p_versionController);\n  paras->m_notebookConfigMgr = p_mgr.createNotebookConfigMgr(p_configMgr, paras->m_notebookBackend);\n  return paras;\n}\n"
  },
  {
    "path": "src/core/notebook/notebookparameters.h",
    "content": "#ifndef NOTEBOOKPARAMETERS_H\n#define NOTEBOOKPARAMETERS_H\n\n#include <QDateTime>\n#include <QIcon>\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass NotebookMgr;\nclass INotebookBackend;\nclass IVersionController;\nclass INotebookConfigMgr;\n\n// Used to new a notebook.\nclass NotebookParameters {\npublic:\n  virtual ~NotebookParameters() {}\n\n  static QSharedPointer<NotebookParameters>\n  createNotebookParameters(const NotebookMgr &p_mgr, const QString &p_type, const QString &p_name,\n                           const QString &p_description, const QString &p_rootFolderPath,\n                           const QIcon &p_icon, const QString &p_imageFolder,\n                           const QString &p_attachmentFolder, const QDateTime &p_createdTimeUtc,\n                           const QString &p_backend, const QString &p_versionController,\n                           const QString &p_configMgr);\n\n  static QSharedPointer<NotebookParameters> createNotebookParameters(\n      const NotebookMgr &p_mgr, const QSharedPointer<INotebookBackend> &p_backend,\n      const QString &p_type, const QString &p_name, const QString &p_description,\n      const QString &p_rootFolderPath, const QIcon &p_icon, const QString &p_imageFolder,\n      const QString &p_attachmentFolder, const QDateTime &p_createdTimeUtc,\n      const QString &p_versionController, const QString &p_configMgr);\n\n  QString m_type;\n  QString m_name;\n  QString m_description;\n  QString m_rootFolderPath;\n  QIcon m_icon;\n\n  // Name of image folder.\n  QString m_imageFolder;\n\n  // Name of attachment folder.\n  QString m_attachmentFolder;\n\n  QDateTime m_createdTimeUtc;\n  QSharedPointer<INotebookBackend> m_notebookBackend;\n  QSharedPointer<IVersionController> m_versionController;\n  QSharedPointer<INotebookConfigMgr> m_notebookConfigMgr;\n\n  bool m_ensureEmptyRootFolder = true;\n};\n} // namespace vnotex\n\n#endif // NOTEBOOKPARAMETERS_H\n"
  },
  {
    "path": "src/core/notebook/notebooktagmgr.cpp",
    "content": "#include \"notebooktagmgr.h\"\r\n\r\n#include <QDebug>\r\n#include <QHash>\r\n\r\n#include \"bundlenotebook.h\"\r\n#include \"tag.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nNotebookTagMgr::NotebookTagMgr(BundleNotebook *p_notebook)\r\n    : QObject(p_notebook), m_notebook(p_notebook) {\r\n  update();\r\n}\r\n\r\nQVector<NotebookTagMgr::TagGraphPair> NotebookTagMgr::stringToTagGraph(const QString &p_text) {\r\n  // parent>chlid;parent2>chlid2.\r\n  QVector<TagGraphPair> tagGraph;\r\n  auto pairs = p_text.split(QLatin1Char(';'));\r\n  for (const auto &pa : pairs) {\r\n    if (pa.isEmpty()) {\r\n      continue;\r\n    }\r\n\r\n    auto paCh = pa.split(QLatin1Char('>'));\r\n    if (paCh.size() != 2 || paCh[0].isEmpty() || paCh[1].isEmpty()) {\r\n      qWarning() << \"ignore invalid <parent, child> tag pair\" << pa;\r\n      continue;\r\n    }\r\n\r\n    TagGraphPair tagPair;\r\n    tagPair.m_parent = paCh[0];\r\n    tagPair.m_child = paCh[1];\r\n    tagGraph.push_back(tagPair);\r\n  }\r\n\r\n  return tagGraph;\r\n}\r\n\r\nQString NotebookTagMgr::tagGraphToString(const QVector<TagGraphPair> &p_tagGraph) {\r\n  QString text;\r\n  if (p_tagGraph.isEmpty()) {\r\n    return text;\r\n  }\r\n\r\n  text = p_tagGraph[0].m_parent + QLatin1Char('>') + p_tagGraph[0].m_child;\r\n  for (int i = 1; i < p_tagGraph.size(); ++i) {\r\n    text += QLatin1Char(';') + p_tagGraph[i].m_parent + QLatin1Char('>') + p_tagGraph[i].m_child;\r\n  }\r\n\r\n  return text;\r\n}\r\n\r\nconst QVector<QSharedPointer<Tag>> &NotebookTagMgr::getTopLevelTags() const {\r\n  return m_topLevelTags;\r\n}\r\n\r\nvoid NotebookTagMgr::update() {\r\n  auto db = m_notebook->getDatabaseAccess();\r\n  const auto allTags = db->getAllTags();\r\n\r\n  update(allTags);\r\n}\r\n\r\nvoid NotebookTagMgr::update(const QList<NotebookDatabaseAccess::TagRecord> &p_allTags) {\r\n  m_topLevelTags.clear();\r\n\r\n  QHash<QString, Tag *> nameToTag;\r\n\r\n  QVector<int> todoIdx;\r\n  todoIdx.reserve(p_allTags.size());\r\n  for (int i = 0; i < p_allTags.size(); ++i) {\r\n    todoIdx.push_back(i);\r\n  }\r\n\r\n  while (!todoIdx.isEmpty()) {\r\n    QVector<int> pendingIdx;\r\n    pendingIdx.reserve(p_allTags.size());\r\n\r\n    for (int i = 0; i < todoIdx.size(); ++i) {\r\n      const auto &rec = p_allTags[todoIdx[i]];\r\n      Q_ASSERT(!nameToTag.contains(rec.m_name));\r\n      QSharedPointer<Tag> newTag;\r\n      if (rec.m_parentName.isEmpty()) {\r\n        // Top level.\r\n        newTag = QSharedPointer<Tag>::create(rec.m_name);\r\n        m_topLevelTags.push_back(newTag);\r\n      } else {\r\n        auto parentIt = nameToTag.find(rec.m_parentName);\r\n        if (parentIt == nameToTag.end()) {\r\n          // Need to process its parent first.\r\n          pendingIdx.push_back(todoIdx[i]);\r\n          continue;\r\n        } else {\r\n          newTag = QSharedPointer<Tag>::create(rec.m_name);\r\n          parentIt.value()->addChild(newTag);\r\n        }\r\n      }\r\n\r\n      nameToTag.insert(newTag->name(), newTag.data());\r\n    }\r\n\r\n    if (todoIdx.size() == pendingIdx.size()) {\r\n      qWarning() << \"cyclic parent-chlid tag definition detected\";\r\n      break;\r\n    }\r\n\r\n    todoIdx = pendingIdx;\r\n  }\r\n}\r\n\r\nQStringList NotebookTagMgr::findNodesOfTag(const QString &p_name) {\r\n  auto db = m_notebook->getDatabaseAccess();\r\n  return db->getNodesOfTags(QStringList(p_name));\r\n}\r\n\r\nQSharedPointer<Tag> NotebookTagMgr::findTag(const QString &p_name) {\r\n  QSharedPointer<Tag> tag;\r\n  forEachTag([&tag, p_name](const QSharedPointer<Tag> &p_tag) {\r\n    if (p_tag->name() == p_name) {\r\n      tag = p_tag;\r\n      return false;\r\n    }\r\n    return true;\r\n  });\r\n\r\n  return tag;\r\n}\r\n\r\nvoid NotebookTagMgr::forEachTag(const TagFinder &p_func) const {\r\n  for (const auto &tag : m_topLevelTags) {\r\n    if (!forEachTag(tag, p_func)) {\r\n      return;\r\n    }\r\n  }\r\n}\r\n\r\nbool NotebookTagMgr::forEachTag(const QSharedPointer<Tag> &p_tag, const TagFinder &p_func) const {\r\n  if (!p_func(p_tag)) {\r\n    return false;\r\n  }\r\n\r\n  for (const auto &child : p_tag->getChildren()) {\r\n    if (!forEachTag(child, p_func)) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nbool NotebookTagMgr::newTag(const QString &p_name, const QString &p_parentName) {\r\n  if (p_name.isEmpty()) {\r\n    return false;\r\n  }\r\n\r\n  auto db = m_notebook->getDatabaseAccess();\r\n  bool ret = db->addTag(p_name, p_parentName);\r\n  if (ret) {\r\n    const auto allTags = db->getAllTags();\r\n    update(allTags);\r\n    if (!p_parentName.isEmpty()) {\r\n      updateNotebookTagGraph(allTags);\r\n    }\r\n    emit m_notebook->tagsUpdated();\r\n    return true;\r\n  } else {\r\n    qWarning() << \"failed to new tag\" << p_name << p_parentName;\r\n    return false;\r\n  }\r\n}\r\n\r\nbool NotebookTagMgr::updateNodeTags(Node *p_node) {\r\n  auto db = m_notebook->getDatabaseAccess();\r\n\r\n  // Make sure the node exists in DB.\r\n  if (!db->addNodeRecursively(p_node, false)) {\r\n    qWarning() << \"failed to add node to DB\" << p_node->fetchPath() << p_node->getId()\r\n               << (p_node->getParent() ? p_node->getParent()->getId() : -1);\r\n    return false;\r\n  }\r\n\r\n  if (db->updateNodeTags(p_node)) {\r\n    update();\r\n    emit m_notebook->tagsUpdated();\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nbool NotebookTagMgr::updateNodeTags(Node *p_node, const QStringList &p_newTags) {\r\n  p_node->updateTags(p_newTags);\r\n  return updateNodeTags(p_node);\r\n}\r\n\r\nbool NotebookTagMgr::renameTag(const QString &p_name, const QString &p_newName) {\r\n  const auto nodePaths = findNodesOfTag(p_name);\r\n\r\n  auto db = m_notebook->getDatabaseAccess();\r\n  if (!db->renameTag(p_name, p_newName)) {\r\n    return false;\r\n  }\r\n\r\n  const auto allTags = db->getAllTags();\r\n  update(allTags);\r\n\r\n  updateNotebookTagGraph(allTags);\r\n\r\n  // Update node tag.\r\n  for (const auto &pa : nodePaths) {\r\n    auto node = m_notebook->loadNodeByPath(pa);\r\n    if (!node) {\r\n      qWarning() << \"node belongs to tag in DB but not exists\" << p_name << pa;\r\n      continue;\r\n    }\r\n\r\n    auto tags = node->getTags();\r\n    for (auto &tag : tags) {\r\n      if (tag == p_name) {\r\n        tag = p_newName;\r\n        break;\r\n      }\r\n    }\r\n    node->updateTags(tags);\r\n  }\r\n\r\n  emit m_notebook->tagsUpdated();\r\n  return true;\r\n}\r\n\r\nvoid NotebookTagMgr::updateNotebookTagGraph(\r\n    const QList<NotebookDatabaseAccess::TagRecord> &p_allTags) {\r\n  QVector<TagGraphPair> graph;\r\n  graph.reserve(p_allTags.size());\r\n  for (const auto &tag : p_allTags) {\r\n    if (tag.m_parentName.isEmpty()) {\r\n      continue;\r\n    }\r\n    TagGraphPair pa;\r\n    pa.m_parent = tag.m_parentName;\r\n    pa.m_child = tag.m_name;\r\n    graph.push_back(pa);\r\n  }\r\n  m_notebook->updateTagGraph(tagGraphToString(graph));\r\n}\r\n\r\nbool NotebookTagMgr::removeTag(const QString &p_name) {\r\n  const auto nodePaths = findNodesOfTag(p_name);\r\n\r\n  auto db = m_notebook->getDatabaseAccess();\r\n  QStringList tagsAndChildren;\r\n  if (!nodePaths.isEmpty()) {\r\n    tagsAndChildren = db->queryTagAndChildren(p_name);\r\n    if (tagsAndChildren.isEmpty()) {\r\n      qWarning() << \"failed to query tag and its children\" << p_name;\r\n      return false;\r\n    }\r\n  }\r\n\r\n  if (!db->removeTag(p_name)) {\r\n    return false;\r\n  }\r\n\r\n  const auto allTags = db->getAllTags();\r\n  update(allTags);\r\n\r\n  updateNotebookTagGraph(allTags);\r\n\r\n  // Update node tag.\r\n  for (const auto &pa : nodePaths) {\r\n    auto node = m_notebook->loadNodeByPath(pa);\r\n    if (!node) {\r\n      qWarning() << \"node belongs to tag in DB but not exists\" << p_name << pa;\r\n      continue;\r\n    }\r\n\r\n    const auto &tags = node->getTags();\r\n    QStringList newTags;\r\n    for (const auto &tag : tags) {\r\n      if (tagsAndChildren.contains(tag)) {\r\n        continue;\r\n      }\r\n      newTags.append(tag);\r\n    }\r\n    node->updateTags(newTags);\r\n  }\r\n\r\n  emit m_notebook->tagsUpdated();\r\n  return true;\r\n}\r\n\r\nbool NotebookTagMgr::moveTag(const QString &p_name, const QString &p_newParentName) {\r\n  auto db = m_notebook->getDatabaseAccess();\r\n  if (!db->addTag(p_name, p_newParentName)) {\r\n    return false;\r\n  }\r\n\r\n  const auto allTags = db->getAllTags();\r\n  update(allTags);\r\n\r\n  updateNotebookTagGraph(allTags);\r\n\r\n  emit m_notebook->tagsUpdated();\r\n  return true;\r\n}\r\n"
  },
  {
    "path": "src/core/notebook/notebooktagmgr.h",
    "content": "#ifndef NOTEBOOKTAGMGR_H\r\n#define NOTEBOOKTAGMGR_H\r\n\r\n#include <QObject>\r\n\r\n#include \"tagi.h\"\r\n\r\n#include <functional>\r\n\r\n#include <QSharedPointer>\r\n#include <QVector>\r\n\r\n#include \"notebookdatabaseaccess.h\"\r\n\r\nnamespace vnotex {\r\nclass BundleNotebook;\r\nclass Tag;\r\n\r\nclass NotebookTagMgr : public QObject, public TagI {\r\n  Q_OBJECT\r\npublic:\r\n  struct TagGraphPair {\r\n    QString m_parent;\r\n\r\n    QString m_child;\r\n  };\r\n\r\n  explicit NotebookTagMgr(BundleNotebook *p_notebook);\r\n\r\n  void update();\r\n\r\n  static QVector<TagGraphPair> stringToTagGraph(const QString &p_text);\r\n\r\n  static QString tagGraphToString(const QVector<TagGraphPair> &p_tagGraph);\r\n\r\n  // TagI.\r\npublic:\r\n  const QVector<QSharedPointer<Tag>> &getTopLevelTags() const Q_DECL_OVERRIDE;\r\n\r\n  QStringList findNodesOfTag(const QString &p_name) Q_DECL_OVERRIDE;\r\n\r\n  QSharedPointer<Tag> findTag(const QString &p_name) Q_DECL_OVERRIDE;\r\n\r\n  bool newTag(const QString &p_name, const QString &p_parentName) Q_DECL_OVERRIDE;\r\n\r\n  bool renameTag(const QString &p_name, const QString &p_newName) Q_DECL_OVERRIDE;\r\n\r\n  bool updateNodeTags(Node *p_node) Q_DECL_OVERRIDE;\r\n\r\n  bool updateNodeTags(Node *p_node, const QStringList &p_newTags) Q_DECL_OVERRIDE;\r\n\r\n  bool removeTag(const QString &p_name) Q_DECL_OVERRIDE;\r\n\r\n  bool moveTag(const QString &p_name, const QString &p_newParentName) Q_DECL_OVERRIDE;\r\n\r\nprivate:\r\n  typedef std::function<bool(const QSharedPointer<Tag> &p_tag)> TagFinder;\r\n\r\n  // @p_func: return false to abort the search.\r\n  void forEachTag(const TagFinder &p_func) const;\r\n\r\n  // Return false if abort.\r\n  bool forEachTag(const QSharedPointer<Tag> &p_tag, const TagFinder &p_func) const;\r\n\r\n  void update(const QList<NotebookDatabaseAccess::TagRecord> &p_allTags);\r\n\r\n  void updateNotebookTagGraph(const QList<NotebookDatabaseAccess::TagRecord> &p_allTags);\r\n\r\n  BundleNotebook *m_notebook = nullptr;\r\n\r\n  QVector<QSharedPointer<Tag>> m_topLevelTags;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // NOTEBOOKTAGMGR_H\r\n"
  },
  {
    "path": "src/core/notebook/tag.cpp",
    "content": "#include \"tag.h\"\n\n#include <QRegularExpression>\n\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nTag::Tag(const QString &p_name) : m_name(p_name) {}\n\nconst QVector<QSharedPointer<Tag>> &Tag::getChildren() const { return m_children; }\n\nvoid Tag::addChild(const QSharedPointer<Tag> &p_tag) {\n  p_tag->m_parent = this;\n  m_children.push_back(p_tag);\n}\n\nconst QString &Tag::name() const { return m_name; }\n\nTag *Tag::getParent() const { return m_parent; }\n\nQString Tag::fetchPath() const {\n  if (!m_parent) {\n    return m_name;\n  } else {\n    return PathUtils::concatenateFilePath(m_parent->fetchPath(), m_name);\n  }\n}\n\nbool Tag::isValidName(const QString &p_name) {\n  return !p_name.isEmpty() && !p_name.contains(QRegularExpression(\"[>/]\"));\n}\n"
  },
  {
    "path": "src/core/notebook/tag.h",
    "content": "#ifndef TAG_H\n#define TAG_H\n\n#include <QEnableSharedFromThis>\n#include <QSharedPointer>\n#include <QString>\n#include <QVector>\n\nnamespace vnotex {\nclass Tag : public QEnableSharedFromThis<Tag> {\npublic:\n  Tag(const QString &p_name);\n\n  const QVector<QSharedPointer<Tag>> &getChildren() const;\n\n  const QString &name() const;\n\n  Tag *getParent() const;\n\n  void addChild(const QSharedPointer<Tag> &p_tag);\n\n  QString fetchPath() const;\n\n  static bool isValidName(const QString &p_name);\n\nprivate:\n  Tag *m_parent = nullptr;\n\n  QString m_name;\n\n  QVector<QSharedPointer<Tag>> m_children;\n};\n} // namespace vnotex\n\n#endif // TAG_H\n"
  },
  {
    "path": "src/core/notebook/tagi.h",
    "content": "#ifndef TAGI_H\n#define TAGI_H\n\n#include <QVector>\n\n#include \"tag.h\"\n\nnamespace vnotex {\nclass Node;\n\n// Tag interface for notebook.\nclass TagI {\npublic:\n  virtual ~TagI() = default;\n\n  virtual const QVector<QSharedPointer<Tag>> &getTopLevelTags() const = 0;\n\n  virtual QStringList findNodesOfTag(const QString &p_name) = 0;\n\n  virtual QSharedPointer<Tag> findTag(const QString &p_name) = 0;\n\n  virtual bool newTag(const QString &p_name, const QString &p_parentName) = 0;\n\n  virtual bool renameTag(const QString &p_name, const QString &p_newName) = 0;\n\n  virtual bool updateNodeTags(Node *p_node) = 0;\n\n  virtual bool updateNodeTags(Node *p_node, const QStringList &p_newTags) = 0;\n\n  virtual bool removeTag(const QString &p_name) = 0;\n\n  virtual bool moveTag(const QString &p_name, const QString &p_newParentName) = 0;\n};\n} // namespace vnotex\n#endif // TAGI_H\n"
  },
  {
    "path": "src/core/notebook/vxnode.cpp",
    "content": "#include \"vxnode.h\"\n\n#include <QDir>\n\n#include \"notebook.h\"\n#include \"vxnodefile.h\"\n#include <notebookbackend/inotebookbackend.h>\n#include <notebookconfigmgr/inotebookconfigmgr.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nVXNode::VXNode(const QString &p_name, const NodeParameters &p_paras, Notebook *p_notebook,\n               Node *p_parent)\n    : Node(Node::Flag::Content, p_name, p_paras, p_notebook, p_parent) {}\n\nVXNode::VXNode(const QString &p_name, Notebook *p_notebook, Node *p_parent)\n    : Node(Node::Flag::Container, p_name, p_notebook, p_parent) {}\n\nQString VXNode::fetchAbsolutePath() const {\n  return PathUtils::concatenateFilePath(m_notebook->getRootFolderAbsolutePath(), fetchPath());\n}\n\nQSharedPointer<File> VXNode::getContentFile() {\n  Q_ASSERT(hasContent());\n  // We should not keep the shared ptr of VXNodeFile, or there is a cyclic ref.\n  return QSharedPointer<VXNodeFile>::create(sharedFromThis().dynamicCast<VXNode>());\n}\n\nQStringList VXNode::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) {\n  Q_ASSERT(PathUtils::pathContains(fetchAttachmentFolderPath(), p_destFolderPath));\n\n  auto backend = getBackend();\n  QStringList addedFiles;\n  for (const auto &file : p_files) {\n    if (PathUtils::isDir(file)) {\n      qWarning() << \"skip adding folder as attachment\" << file;\n      continue;\n    }\n\n    auto destFilePath = backend->renameIfExistsCaseInsensitive(\n        PathUtils::concatenateFilePath(p_destFolderPath, PathUtils::fileName(file)));\n    backend->copyFile(file, destFilePath);\n    addedFiles << destFilePath;\n  }\n\n  return addedFiles;\n}\n\nQString VXNode::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) {\n  Q_ASSERT(PathUtils::pathContains(fetchAttachmentFolderPath(), p_destFolderPath));\n\n  auto backend = getBackend();\n  auto destFilePath = backend->renameIfExistsCaseInsensitive(\n      PathUtils::concatenateFilePath(p_destFolderPath, p_name));\n  backend->writeFile(destFilePath, QByteArray());\n  return destFilePath;\n}\n\nQString VXNode::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) {\n  Q_ASSERT(PathUtils::pathContains(fetchAttachmentFolderPath(), p_destFolderPath));\n\n  auto backend = getBackend();\n  auto destFilePath = backend->renameIfExistsCaseInsensitive(\n      PathUtils::concatenateFilePath(p_destFolderPath, p_name));\n  backend->makePath(destFilePath);\n  return destFilePath;\n}\n\nQString VXNode::renameAttachment(const QString &p_path, const QString &p_name) {\n  Q_ASSERT(PathUtils::pathContains(fetchAttachmentFolderPath(), p_path));\n  getBackend()->renameFile(p_path, p_name);\n  return p_name;\n}\n\nvoid VXNode::removeAttachment(const QStringList &p_paths) {\n  auto attaFolderPath = fetchAttachmentFolderPath();\n  // Just move it to recycle bin but not added as a child node of recycle bin.\n  for (const auto &pa : p_paths) {\n    Q_ASSERT(PathUtils::pathContains(attaFolderPath, pa));\n    if (QFileInfo(pa).isDir()) {\n      m_notebook->moveDirToRecycleBin(pa);\n    } else {\n      m_notebook->moveFileToRecycleBin(pa);\n    }\n  }\n}\n"
  },
  {
    "path": "src/core/notebook/vxnode.h",
    "content": "#ifndef VXNODE_H\n#define VXNODE_H\n\n#include \"node.h\"\n\nnamespace vnotex {\n// Node of VXNotebookConfigMgr.\nclass VXNode : public Node {\npublic:\n  // For content node.\n  VXNode(const QString &p_name, const NodeParameters &p_paras, Notebook *p_notebook,\n         Node *p_parent);\n\n  // For container node.\n  VXNode(const QString &p_name, Notebook *p_notebook, Node *p_parent);\n\n  QString fetchAbsolutePath() const Q_DECL_OVERRIDE;\n\n  QSharedPointer<File> getContentFile() Q_DECL_OVERRIDE;\n\n  QStringList addAttachment(const QString &p_destFolderPath,\n                            const QStringList &p_files) Q_DECL_OVERRIDE;\n\n  QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE;\n\n  QString newAttachmentFolder(const QString &p_destFolderPath,\n                              const QString &p_name) Q_DECL_OVERRIDE;\n\n  QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE;\n\n  void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // VXNODE_H\n"
  },
  {
    "path": "src/core/notebook/vxnodefile.cpp",
    "content": "#include \"vxnodefile.h\"\n\n#include <QImage>\n\n#include \"notebook.h\"\n#include \"vxnode.h\"\n#include <notebookbackend/inotebookbackend.h>\n#include <notebookconfigmgr/inotebookconfigmgr.h>\n#include <notebookconfigmgr/vxnotebookconfigmgr.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nVXNodeFile::VXNodeFile(const QSharedPointer<VXNode> &p_node) : m_node(p_node) {\n  Q_ASSERT(m_node && m_node->hasContent());\n  setContentType(FileTypeHelper::getInst().getFileType(getContentPath()).m_type);\n}\n\nQString VXNodeFile::read() const { return m_node->getBackend()->readTextFile(m_node->fetchPath()); }\n\nvoid VXNodeFile::write(const QString &p_content) {\n  m_node->getBackend()->writeFile(m_node->fetchPath(), p_content);\n\n  m_node->setModifiedTimeUtc();\n  m_node->save();\n}\n\nQString VXNodeFile::getName() const { return m_node->getName(); }\n\nQString VXNodeFile::getFilePath() const { return m_node->fetchAbsolutePath(); }\n\nQString VXNodeFile::getContentPath() const { return m_node->fetchAbsolutePath(); }\n\nQString VXNodeFile::getResourcePath() const { return PathUtils::parentDirPath(getContentPath()); }\n\nIFileWithImage *VXNodeFile::getImageInterface() { return this; }\n\nNode *VXNodeFile::getNode() const { return m_node.data(); }\n\nQString VXNodeFile::fetchImageFolderPath() {\n  auto configMgr = dynamic_cast<VXNotebookConfigMgr *>(m_node->getConfigMgr());\n  return configMgr->fetchNodeImageFolderPath(m_node.data());\n}\n\nQString VXNodeFile::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) {\n  auto backend = m_node->getBackend();\n  const auto imageFolderPath = fetchImageFolderPath();\n  auto destFilePath = backend->renameIfExistsCaseInsensitive(\n      PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName));\n  backend->copyFile(p_srcImagePath, destFilePath);\n  return destFilePath;\n}\n\nQString VXNodeFile::insertImage(const QImage &p_image, const QString &p_imageFileName) {\n  auto backend = m_node->getBackend();\n  const auto imageFolderPath = fetchImageFolderPath();\n  auto destFilePath = backend->renameIfExistsCaseInsensitive(\n      PathUtils::concatenateFilePath(imageFolderPath, p_imageFileName));\n  p_image.save(destFilePath);\n  backend->addFile(destFilePath);\n  return destFilePath;\n}\n\nvoid VXNodeFile::removeImage(const QString &p_imagePath) {\n  // Just move it to recycle bin but not added as a child node of recycle bin.\n  m_node->getNotebook()->moveFileToRecycleBin(p_imagePath);\n}\n"
  },
  {
    "path": "src/core/notebook/vxnodefile.h",
    "content": "#ifndef VXNODEFILE_H\n#define VXNODEFILE_H\n\n#include <QSharedPointer>\n\n#include <core/file.h>\n\nnamespace vnotex {\nclass VXNode;\n\n// File from VXNode.\nclass VXNodeFile : public File, public IFileWithImage {\npublic:\n  explicit VXNodeFile(const QSharedPointer<VXNode> &p_node);\n\n  QString read() const Q_DECL_OVERRIDE;\n\n  void write(const QString &p_content) Q_DECL_OVERRIDE;\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getFilePath() const Q_DECL_OVERRIDE;\n\n  QString getContentPath() const Q_DECL_OVERRIDE;\n\n  QString getResourcePath() const Q_DECL_OVERRIDE;\n\n  IFileWithImage *getImageInterface() Q_DECL_OVERRIDE;\n\n  // Get the corresponding node if available.\n  Node *getNode() const Q_DECL_OVERRIDE;\n\n  // IFileWithImage interfaces.\npublic:\n  QString fetchImageFolderPath() Q_DECL_OVERRIDE;\n\n  // Insert image from @p_srcImagePath.\n  // Return inserted image file path.\n  QString insertImage(const QString &p_srcImagePath,\n                      const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;\n\n  void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;\n\nprivate:\n  QSharedPointer<VXNode> m_node;\n};\n} // namespace vnotex\n\n#endif // VXNODEFILE_H\n"
  },
  {
    "path": "src/core/notebookbackend/inotebookbackend.cpp",
    "content": "#include \"inotebookbackend.h\"\n\n#include <QDir>\n\n#include <exception.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nvoid INotebookBackend::constrainPath(const QString &p_path) const {\n  if (!PathUtils::pathContains(m_rootPath, p_path)) {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"path (%1) does not locate in root folder (%2)\").arg(p_path, m_rootPath));\n  }\n}\n\nQString INotebookBackend::getFullPath(const QString &p_path) const {\n  constrainPath(p_path);\n  return QDir(m_rootPath).filePath(p_path);\n}\n\nQString INotebookBackend::getRelativePath(const QString &p_path) const {\n  constrainPath(p_path);\n  return PathUtils::relativePath(m_rootPath, p_path);\n}\n"
  },
  {
    "path": "src/core/notebookbackend/inotebookbackend.h",
    "content": "#ifndef INOTEBOOKBACKEND_H\n#define INOTEBOOKBACKEND_H\n\n#include <QObject>\n\n#include <utils/pathutils.h>\n\nclass QByteArray;\nclass QJsonObject;\n\nnamespace vnotex {\n// Abstract class for notebook backend, which is responsible for file access\n// and synchronization.\nclass INotebookBackend : public QObject {\n  Q_OBJECT\npublic:\n  INotebookBackend(const QString &p_rootPath, QObject *p_parent = nullptr)\n      : QObject(p_parent), m_rootPath(PathUtils::absolutePath(p_rootPath)) {}\n\n  virtual ~INotebookBackend() {}\n\n  virtual QString getName() const = 0;\n\n  virtual QString getDisplayName() const = 0;\n\n  virtual QString getDescription() const = 0;\n\n  const QString &getRootPath() const { return m_rootPath; }\n\n  void setRootPath(const QString &p_rootPath) { m_rootPath = p_rootPath; }\n\n  // Whether @p_dirPath is an empty directory.\n  virtual bool isEmptyDir(const QString &p_dirPath) const = 0;\n\n  // Create the directory path @p_dirPath. Create all parent directories if necessary.\n  virtual void makePath(const QString &p_dirPath) = 0;\n\n  // Write @p_data to @p_filePath.\n  virtual void writeFile(const QString &p_filePath, const QByteArray &p_data) = 0;\n\n  // Write @p_text to @p_filePath.\n  virtual void writeFile(const QString &p_filePath, const QString &p_text) = 0;\n\n  // Write @p_jobj to @p_filePath.\n  virtual void writeFile(const QString &p_filePath, const QJsonObject &p_jobj) = 0;\n\n  // Read content from @p_filePath.\n  virtual QString readTextFile(const QString &p_filePath) = 0;\n\n  // Read file @p_filePath.\n  virtual QByteArray readFile(const QString &p_filePath) = 0;\n\n  QString getFullPath(const QString &p_path) const;\n\n  QString getRelativePath(const QString &p_path) const;\n\n  virtual bool exists(const QString &p_path) const = 0;\n\n  virtual bool existsFile(const QString &p_path) const = 0;\n\n  virtual bool existsDir(const QString &p_path) const = 0;\n\n  virtual bool childExistsCaseInsensitive(const QString &p_dirPath,\n                                          const QString &p_name) const = 0;\n\n  virtual bool isFile(const QString &p_path) const = 0;\n\n  virtual void renameFile(const QString &p_filePath, const QString &p_name) = 0;\n\n  virtual void renameDir(const QString &p_dirPath, const QString &p_name) = 0;\n\n  // Copy @p_filePath to @p_destPath.\n  // @p_filePath could be outside notebook.\n  virtual void copyFile(const QString &p_filePath, const QString &p_destPath,\n                        bool p_move = false) = 0;\n\n  // Delete @p_filePath from disk.\n  virtual void removeFile(const QString &p_filePath) = 0;\n\n  // Copy  @p_dirPath to as @p_destPath.\n  virtual void copyDir(const QString &p_dirPath, const QString &p_destPath,\n                       bool p_move = false) = 0;\n\n  // Delete @p_dirPath from disk if it is empty.\n  // Return false if it is not deleted due to non-empty.\n  virtual bool removeDirIfEmpty(const QString &p_dirPath) = 0;\n\n  virtual void removeDir(const QString &p_dirPath) = 0;\n\n  virtual QString renameIfExistsCaseInsensitive(const QString &p_path) const = 0;\n\n  // Add one file to backend.\n  virtual void addFile(const QString &p_path) = 0;\n\n  virtual void removeEmptyDir(const QString &p_dirPath) = 0;\n\nprotected:\n  // Constrain @p_path within root path of the notebook.\n  void constrainPath(const QString &p_path) const;\n\nprivate:\n  // Root path of the notebook.\n  QString m_rootPath;\n};\n} // namespace vnotex\n\n#endif // INOTEBOOKBACKEND_H\n"
  },
  {
    "path": "src/core/notebookbackend/inotebookbackendfactory.h",
    "content": "#ifndef INOTEBOOKBACKENDFACTORY_H\n#define INOTEBOOKBACKENDFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass INotebookBackend;\n\nclass INotebookBackendFactory {\npublic:\n  INotebookBackendFactory() {}\n\n  virtual ~INotebookBackendFactory() {}\n\n  virtual QString getName() const = 0;\n\n  virtual QString getDisplayName() const = 0;\n\n  virtual QString getDescription() const = 0;\n\n  virtual QSharedPointer<INotebookBackend> createNotebookBackend(const QString &p_rootPath) = 0;\n};\n} // namespace vnotex\n\n#endif // INOTEBOOKBACKENDFACTORY_H\n"
  },
  {
    "path": "src/core/notebookbackend/localnotebookbackend.cpp",
    "content": "#include \"localnotebookbackend.h\"\n\n#include <QDir>\n#include <QFile>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QTextStream>\n\n#include <vtextedit/textutils.h>\n\n#include \"configmgr.h\"\n#include \"coreconfig.h\"\n#include \"exception.h\"\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nLocalNotebookBackend::LocalNotebookBackend(const QString &p_name, const QString &p_displayName,\n                                           const QString &p_description, const QString &p_rootPath,\n                                           QObject *p_parent)\n    : INotebookBackend(p_rootPath, p_parent), m_info(p_name, p_displayName, p_description) {}\n\nQString LocalNotebookBackend::getName() const { return m_info.m_name; }\n\nQString LocalNotebookBackend::getDisplayName() const { return m_info.m_displayName; }\n\nQString LocalNotebookBackend::getDescription() const { return m_info.m_description; }\n\nbool LocalNotebookBackend::isEmptyDir(const QString &p_dirPath) const {\n  return PathUtils::isEmptyDir(getFullPath(p_dirPath));\n}\n\nvoid LocalNotebookBackend::makePath(const QString &p_dirPath) {\n  constrainPath(p_dirPath);\n  QDir dir(getRootPath());\n  if (!dir.mkpath(p_dirPath)) {\n    Exception::throwOne(Exception::Type::FailToCreateDir,\n                        QStringLiteral(\"fail to create directory: %1\").arg(p_dirPath));\n  }\n}\n\nvoid LocalNotebookBackend::writeFile(const QString &p_filePath, const QByteArray &p_data) {\n  const auto filePath = getFullPath(p_filePath);\n  FileUtils::writeFile(filePath, p_data);\n}\n\nvoid LocalNotebookBackend::writeFile(const QString &p_filePath, const QString &p_text) {\n  const auto filePath = getFullPath(p_filePath);\n  FileUtils::writeFile(filePath, p_text);\n}\n\nvoid LocalNotebookBackend::writeFile(const QString &p_filePath, const QJsonObject &p_jobj) {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto data = QJsonDocument(p_jobj).toJson();\n  vte::LineEnding before = vte::LineEnding::LF;\n  QString text;\n  switch (coreConfig.getLineEndingPolicy()) {\n  case LineEndingPolicy::Platform:\n#if defined(Q_OS_WIN)\n    text = QString::fromUtf8(data);\n    vte::TextUtils::transformLineEnding(text, before, vte::LineEnding::CRLF);\n#endif\n    break;\n\n  case LineEndingPolicy::File:\n    // Not supported.\n    Q_FALLTHROUGH();\n  case LineEndingPolicy::LF:\n    break;\n\n  case LineEndingPolicy::CRLF:\n    text = QString::fromUtf8(data);\n    vte::TextUtils::transformLineEnding(text, before, vte::LineEnding::CRLF);\n    break;\n\n  case LineEndingPolicy::CR:\n    text = QString::fromUtf8(data);\n    vte::TextUtils::transformLineEnding(text, before, vte::LineEnding::CR);\n    break;\n  }\n\n  if (!text.isEmpty()) {\n    writeFile(p_filePath, text);\n  } else {\n    writeFile(p_filePath, data);\n  }\n}\n\nQString LocalNotebookBackend::readTextFile(const QString &p_filePath) {\n  const auto filePath = getFullPath(p_filePath);\n  return FileUtils::readTextFile(filePath);\n}\n\nQByteArray LocalNotebookBackend::readFile(const QString &p_filePath) {\n  const auto filePath = getFullPath(p_filePath);\n  return FileUtils::readFile(filePath);\n}\n\nbool LocalNotebookBackend::exists(const QString &p_path) const {\n  return QFileInfo::exists(getFullPath(p_path));\n}\n\nbool LocalNotebookBackend::existsFile(const QString &p_path) const {\n  QFileInfo fi(getFullPath(p_path));\n  return fi.exists() && fi.isFile();\n}\n\nbool LocalNotebookBackend::existsDir(const QString &p_path) const {\n  QFileInfo fi(getFullPath(p_path));\n  return fi.exists() && fi.isDir();\n}\n\nbool LocalNotebookBackend::childExistsCaseInsensitive(const QString &p_dirPath,\n                                                      const QString &p_name) const {\n  return FileUtils::childExistsCaseInsensitive(getFullPath(p_dirPath), p_name);\n}\n\nbool LocalNotebookBackend::isFile(const QString &p_path) const {\n  QFileInfo fi(getFullPath(p_path));\n  return fi.isFile();\n}\n\nvoid LocalNotebookBackend::renameFile(const QString &p_filePath, const QString &p_name) {\n  Q_ASSERT(isFile(p_filePath));\n  const auto filePath = getFullPath(p_filePath);\n  FileUtils::renameFile(filePath, p_name);\n}\n\nvoid LocalNotebookBackend::renameDir(const QString &p_dirPath, const QString &p_name) {\n  Q_ASSERT(!isFile(p_dirPath));\n  const auto dirPath = getFullPath(p_dirPath);\n  FileUtils::renameFile(dirPath, p_name);\n}\n\nvoid LocalNotebookBackend::copyFile(const QString &p_filePath, const QString &p_destPath,\n                                    bool p_move) {\n  auto filePath = p_filePath;\n  if (QFileInfo(filePath).isRelative()) {\n    filePath = getFullPath(filePath);\n  }\n\n  Q_ASSERT(QFileInfo(filePath).isFile());\n\n  FileUtils::copyFile(filePath, getFullPath(p_destPath), p_move);\n}\n\nvoid LocalNotebookBackend::copyDir(const QString &p_dirPath, const QString &p_destPath,\n                                   bool p_move) {\n  auto dirPath = p_dirPath;\n  if (QFileInfo(dirPath).isRelative()) {\n    dirPath = getFullPath(dirPath);\n  }\n\n  Q_ASSERT(QFileInfo(dirPath).isDir());\n\n  FileUtils::copyDir(dirPath, getFullPath(p_destPath), p_move);\n}\n\nvoid LocalNotebookBackend::removeFile(const QString &p_filePath) {\n  Q_ASSERT(isFile(p_filePath));\n  FileUtils::removeFile(getFullPath(p_filePath));\n}\n\nbool LocalNotebookBackend::removeDirIfEmpty(const QString &p_dirPath) {\n  Q_ASSERT(!isFile(p_dirPath));\n  return FileUtils::removeDirIfEmpty(getFullPath(p_dirPath));\n}\n\nvoid LocalNotebookBackend::removeDir(const QString &p_dirPath) {\n  Q_ASSERT(!isFile(p_dirPath));\n  return FileUtils::removeDir(getFullPath(p_dirPath));\n}\n\nQString LocalNotebookBackend::renameIfExistsCaseInsensitive(const QString &p_path) const {\n  return FileUtils::renameIfExistsCaseInsensitive(getFullPath(p_path));\n}\n\nvoid LocalNotebookBackend::addFile(const QString &p_path) {\n  Q_UNUSED(p_path);\n  // Do nothing for now.\n}\n\nvoid LocalNotebookBackend::removeEmptyDir(const QString &p_dirPath) {\n  FileUtils::removeEmptyDir(getFullPath(p_dirPath));\n}\n"
  },
  {
    "path": "src/core/notebookbackend/localnotebookbackend.h",
    "content": "#ifndef LOCALNOTEBOOKBACKEND_H\n#define LOCALNOTEBOOKBACKEND_H\n\n#include \"inotebookbackend.h\"\n\n#include \"../global.h\"\n\nnamespace vnotex {\n// Backend to access local file system.\nclass LocalNotebookBackend : public INotebookBackend {\n  Q_OBJECT\npublic:\n  explicit LocalNotebookBackend(const QString &p_name, const QString &p_displayName,\n                                const QString &p_description, const QString &p_rootPath,\n                                QObject *p_parent = nullptr);\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getDisplayName() const Q_DECL_OVERRIDE;\n\n  QString getDescription() const Q_DECL_OVERRIDE;\n\n  // Whether @p_dirPath is an empty directory.\n  bool isEmptyDir(const QString &p_dirPath) const Q_DECL_OVERRIDE;\n\n  // Create the directory path @p_dirPath. Create all parent directories if necessary.\n  void makePath(const QString &p_dirPath) Q_DECL_OVERRIDE;\n\n  // Write @p_data to @p_filePath.\n  void writeFile(const QString &p_filePath, const QByteArray &p_data) Q_DECL_OVERRIDE;\n\n  // Write @p_text to @p_filePath.\n  void writeFile(const QString &p_filePath, const QString &p_text) Q_DECL_OVERRIDE;\n\n  // Write @p_jobj to @p_filePath.\n  void writeFile(const QString &p_filePath, const QJsonObject &p_jobj) Q_DECL_OVERRIDE;\n\n  // Read content from @p_filePath.\n  QString readTextFile(const QString &p_filePath) Q_DECL_OVERRIDE;\n\n  // Read file @p_filePath.\n  QByteArray readFile(const QString &p_filePath) Q_DECL_OVERRIDE;\n\n  bool exists(const QString &p_path) const Q_DECL_OVERRIDE;\n\n  bool existsFile(const QString &p_path) const Q_DECL_OVERRIDE;\n\n  bool existsDir(const QString &p_path) const Q_DECL_OVERRIDE;\n\n  bool childExistsCaseInsensitive(const QString &p_dirPath,\n                                  const QString &p_name) const Q_DECL_OVERRIDE;\n\n  bool isFile(const QString &p_path) const Q_DECL_OVERRIDE;\n\n  void renameFile(const QString &p_filePath, const QString &p_name) Q_DECL_OVERRIDE;\n\n  void renameDir(const QString &p_dirPath, const QString &p_name) Q_DECL_OVERRIDE;\n\n  // Delete @p_filePath from disk.\n  void removeFile(const QString &p_filePath) Q_DECL_OVERRIDE;\n\n  // Delete @p_dirPath from disk if it is empty.\n  bool removeDirIfEmpty(const QString &p_dirPath) Q_DECL_OVERRIDE;\n\n  void removeDir(const QString &p_dirPath) Q_DECL_OVERRIDE;\n\n  // Copy @p_filePath to @p_destPath.\n  // @p_filePath may beyond this notebook backend.\n  void copyFile(const QString &p_filePath, const QString &p_destPath,\n                bool p_move = false) Q_DECL_OVERRIDE;\n\n  // Copy @p_dirPath to as @p_destPath.\n  void copyDir(const QString &p_dirPath, const QString &p_destPath,\n               bool p_move = false) Q_DECL_OVERRIDE;\n\n  QString renameIfExistsCaseInsensitive(const QString &p_path) const Q_DECL_OVERRIDE;\n\n  void addFile(const QString &p_path) Q_DECL_OVERRIDE;\n\n  void removeEmptyDir(const QString &p_dirPath) Q_DECL_OVERRIDE;\n\nprivate:\n  Info m_info;\n};\n} // namespace vnotex\n\n#endif // LOCALNOTEBOOKBACKEND_H\n"
  },
  {
    "path": "src/core/notebookbackend/localnotebookbackendfactory.cpp",
    "content": "#include \"localnotebookbackendfactory.h\"\n\n#include <QObject>\n\n#include \"localnotebookbackend.h\"\n\nusing namespace vnotex;\n\nLocalNotebookBackendFactory::LocalNotebookBackendFactory() {}\n\nQString LocalNotebookBackendFactory::getName() const { return QStringLiteral(\"local.vnotex\"); }\n\nQString LocalNotebookBackendFactory::getDisplayName() const {\n  return QObject::tr(\"Local Notebook Backend\");\n}\n\nQString LocalNotebookBackendFactory::getDescription() const {\n  return QObject::tr(\"Local file system\");\n}\n\nQSharedPointer<INotebookBackend>\nLocalNotebookBackendFactory::createNotebookBackend(const QString &p_rootPath) {\n  return QSharedPointer<LocalNotebookBackend>::create(getName(), getDisplayName(), getDescription(),\n                                                      p_rootPath);\n}\n"
  },
  {
    "path": "src/core/notebookbackend/localnotebookbackendfactory.h",
    "content": "#ifndef LOCALNOTEBOOKBACKENDFACTORY_H\n#define LOCALNOTEBOOKBACKENDFACTORY_H\n\n#include \"inotebookbackendfactory.h\"\n\nnamespace vnotex {\nclass LocalNotebookBackendFactory : public INotebookBackendFactory {\npublic:\n  LocalNotebookBackendFactory();\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getDisplayName() const Q_DECL_OVERRIDE;\n\n  QString getDescription() const Q_DECL_OVERRIDE;\n\n  QSharedPointer<INotebookBackend> createNotebookBackend(const QString &p_rootPath) Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // LOCALNOTEBOOKBACKENDFACTORY_H\n"
  },
  {
    "path": "src/core/notebookconfigmgr/bundlenotebookconfigmgr.cpp",
    "content": "#include \"bundlenotebookconfigmgr.h\"\n\n#include <QJsonDocument>\n\n#include \"notebookconfig.h\"\n#include <notebook/bundlenotebook.h>\n#include <notebook/notebookparameters.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nconst QString BundleNotebookConfigMgr::c_configFolderName = \"vx_notebook\";\n\nconst QString BundleNotebookConfigMgr::c_configName = \"vx_notebook.json\";\n\nBundleNotebookConfigMgr::BundleNotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend,\n                                                 QObject *p_parent)\n    : INotebookConfigMgr(p_backend, p_parent) {}\n\nvoid BundleNotebookConfigMgr::createEmptySkeleton(const NotebookParameters &p_paras) {\n  getBackend()->makePath(BundleNotebookConfigMgr::c_configFolderName);\n\n  auto config = NotebookConfig::fromNotebookParameters(getCodeVersion(), p_paras);\n  writeNotebookConfig(*config);\n}\n\nQSharedPointer<NotebookConfig> BundleNotebookConfigMgr::readNotebookConfig() const {\n  return readNotebookConfig(getBackend());\n}\n\nvoid BundleNotebookConfigMgr::writeNotebookConfig() {\n  auto config = NotebookConfig::fromNotebook(getCodeVersion(), getBundleNotebook());\n  writeNotebookConfig(*config);\n}\n\nvoid BundleNotebookConfigMgr::writeNotebookConfig(const NotebookConfig &p_config) {\n  getBackend()->writeFile(getConfigFilePath(), p_config.toJson());\n}\n\nvoid BundleNotebookConfigMgr::removeNotebookConfig() {\n  getBackend()->removeDir(getConfigFolderName());\n}\n\nQSharedPointer<NotebookConfig>\nBundleNotebookConfigMgr::readNotebookConfig(const QSharedPointer<INotebookBackend> &p_backend) {\n  auto data = p_backend->readFile(getConfigFilePath());\n\n  auto config = QSharedPointer<NotebookConfig>::create();\n  config->fromJson(QJsonDocument::fromJson(data).object());\n\n  return config;\n}\n\nconst QString &BundleNotebookConfigMgr::getConfigFolderName() { return c_configFolderName; }\n\nconst QString &BundleNotebookConfigMgr::getConfigName() { return c_configName; }\n\nQString BundleNotebookConfigMgr::getConfigFilePath() {\n  return PathUtils::concatenateFilePath(c_configFolderName, c_configName);\n}\n\nQString BundleNotebookConfigMgr::getDatabasePath() {\n  return PathUtils::concatenateFilePath(c_configFolderName, \"notebook.db\");\n}\n\nBundleNotebook *BundleNotebookConfigMgr::getBundleNotebook() const {\n  return static_cast<BundleNotebook *>(getNotebook());\n}\n\nbool BundleNotebookConfigMgr::isBuiltInFile(const Node *p_node, const QString &p_name) const {\n  Q_UNUSED(p_node);\n  Q_UNUSED(p_name);\n  return false;\n}\n\nbool BundleNotebookConfigMgr::isBuiltInFolder(const Node *p_node, const QString &p_name) const {\n  if (p_node->isRoot()) {\n    const auto name = p_name.toLower();\n    return (name == c_configFolderName || name == getNotebook()->getRecycleBinFolder().toLower());\n  }\n  return false;\n}\n\nint BundleNotebookConfigMgr::getCodeVersion() const { return 3; }\n\nQString BundleNotebookConfigMgr::getConfigFolderPath() const { return c_configFolderName; }\n"
  },
  {
    "path": "src/core/notebookconfigmgr/bundlenotebookconfigmgr.h",
    "content": "#ifndef BUNDLENOTEBOOKCONFIGMGR_H\n#define BUNDLENOTEBOOKCONFIGMGR_H\n\n#include \"inotebookconfigmgr.h\"\n\nnamespace vnotex {\nclass BundleNotebook;\n\nclass BundleNotebookConfigMgr : public INotebookConfigMgr {\n  Q_OBJECT\npublic:\n  BundleNotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend,\n                          QObject *p_parent = nullptr);\n\n  // Create an empty skeleton for an empty notebook.\n  virtual void createEmptySkeleton(const NotebookParameters &p_paras) Q_DECL_OVERRIDE;\n\n  QSharedPointer<NotebookConfig> readNotebookConfig() const;\n  void writeNotebookConfig();\n\n  void removeNotebookConfig();\n\n  bool isBuiltInFile(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE;\n\n  bool isBuiltInFolder(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE;\n\n  int getCodeVersion() const Q_DECL_OVERRIDE;\n\n  QString getConfigFolderPath() const Q_DECL_OVERRIDE;\n\n  static const QString &getConfigFolderName();\n\n  static const QString &getConfigName();\n\n  static QString getConfigFilePath();\n\n  static QString getDatabasePath();\n\n  static QSharedPointer<NotebookConfig>\n  readNotebookConfig(const QSharedPointer<INotebookBackend> &p_backend);\n\nprotected:\n  BundleNotebook *getBundleNotebook() const;\n\nprivate:\n  void writeNotebookConfig(const NotebookConfig &p_config);\n\n  // Folder name to store the notebook's config.\n  // This folder locates in the root folder of the notebook.\n  static const QString c_configFolderName;\n\n  // Name of the notebook's config file.\n  static const QString c_configName;\n};\n} // namespace vnotex\n\n#endif // BUNDLENOTEBOOKCONFIGMGR_H\n"
  },
  {
    "path": "src/core/notebookconfigmgr/inotebookconfigmgr.cpp",
    "content": "#include \"inotebookconfigmgr.h\"\n\n#include <notebookbackend/inotebookbackend.h>\n\nusing namespace vnotex;\n\nINotebookConfigMgr::INotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend,\n                                       QObject *p_parent)\n    : QObject(p_parent), m_backend(p_backend) {}\n\nINotebookConfigMgr::~INotebookConfigMgr() {}\n\nconst QSharedPointer<INotebookBackend> &INotebookConfigMgr::getBackend() const { return m_backend; }\n\nNotebook *INotebookConfigMgr::getNotebook() const { return m_notebook; }\n\nvoid INotebookConfigMgr::setNotebook(Notebook *p_notebook) { m_notebook = p_notebook; }\n"
  },
  {
    "path": "src/core/notebookconfigmgr/inotebookconfigmgr.h",
    "content": "#ifndef INOTEBOOKCONFIGMGR_H\n#define INOTEBOOKCONFIGMGR_H\n\n#include <QObject>\n#include <QSharedPointer>\n\n#include \"notebook/node.h\"\n#include \"notebook/nodevisual.h\"\n\nnamespace vnotex {\nclass NotebookConfig;\nclass INotebookBackend;\nclass NotebookParameters;\nclass Notebook;\nclass NodeParameters;\n\n// Abstract class for notebook config manager, which is responsible for config\n// files access and note nodes access.\nclass INotebookConfigMgr : public QObject {\n  Q_OBJECT\npublic:\n  INotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend,\n                     QObject *p_parent = nullptr);\n\n  virtual ~INotebookConfigMgr();\n\n  virtual QString getName() const = 0;\n\n  virtual QString getDisplayName() const = 0;\n\n  virtual QString getDescription() const = 0;\n\n  // Create an empty skeleton for an empty notebook.\n  virtual void createEmptySkeleton(const NotebookParameters &p_paras) = 0;\n\n  const QSharedPointer<INotebookBackend> &getBackend() const;\n\n  virtual QSharedPointer<Node> loadRootNode() = 0;\n\n  virtual void loadNode(Node *p_node) = 0;\n  virtual void saveNode(const Node *p_node) = 0;\n\n  virtual void renameNode(Node *p_node, const QString &p_name) = 0;\n\n  virtual QSharedPointer<Node> newNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                                       const QString &p_content) = 0;\n\n  virtual QSharedPointer<Node> addAsNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                                         const NodeParameters &p_paras) = 0;\n\n  virtual QSharedPointer<Node> copyAsNode(Node *p_parent, Node::Flags p_flags,\n                                          const QString &p_path) = 0;\n\n  Notebook *getNotebook() const;\n  void setNotebook(Notebook *p_notebook);\n\n  virtual QSharedPointer<Node> loadNodeByPath(const QSharedPointer<Node> &p_root,\n                                              const QString &p_relativePath) = 0;\n\n  virtual QSharedPointer<Node> copyNodeAsChildOf(const QSharedPointer<Node> &p_src, Node *p_dest,\n                                                 bool p_move) = 0;\n\n  virtual void removeNode(const QSharedPointer<Node> &p_node, bool p_force, bool p_configOnly) = 0;\n\n  virtual void removeNodeToFolder(const QSharedPointer<Node> &p_node,\n                                  const QString &p_destFolder) = 0;\n\n  // Whether @p_name is a built-in file under @p_node.\n  virtual bool isBuiltInFile(const Node *p_node, const QString &p_name) const = 0;\n\n  virtual bool isBuiltInFolder(const Node *p_node, const QString &p_name) const = 0;\n\n  virtual QString fetchNodeAttachmentFolderPath(Node *p_node) = 0;\n\n  virtual QVector<QSharedPointer<ExternalNode>> fetchExternalChildren(Node *p_node) const = 0;\n\n  virtual bool checkNodeExists(Node *p_node) = 0;\n\n  virtual QStringList scanAndImportExternalFiles(Node *p_node) = 0;\n\n  virtual void updateNodeVisual(Node *p_node, const NodeVisual &p_visual) = 0;\n\n  // Version of the config processing code.\n  virtual int getCodeVersion() const = 0;\n\n  virtual QString getConfigFolderPath() const = 0;\n\nprivate:\n  QSharedPointer<INotebookBackend> m_backend;\n\n  Notebook *m_notebook = nullptr;\n};\n} // namespace vnotex\n\n#endif // INOTEBOOKCONFIGMGR_H\n"
  },
  {
    "path": "src/core/notebookconfigmgr/inotebookconfigmgrfactory.h",
    "content": "#ifndef INOTEBOOKCONFIGMGRFACTORY_H\n#define INOTEBOOKCONFIGMGRFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass INotebookConfigMgr;\nclass INotebookBackend;\n\nclass INotebookConfigMgrFactory {\npublic:\n  INotebookConfigMgrFactory() {}\n\n  virtual ~INotebookConfigMgrFactory() {}\n\n  virtual QString getName() const = 0;\n\n  virtual QString getDisplayName() const = 0;\n\n  virtual QString getDescription() const = 0;\n\n  virtual QSharedPointer<INotebookConfigMgr>\n  createNotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend) = 0;\n};\n} // namespace vnotex\n\n#endif // INOTEBOOKCONFIGMGRFACTORY_H\n"
  },
  {
    "path": "src/core/notebookconfigmgr/notebookconfig.cpp",
    "content": "#include \"notebookconfig.h\"\n\n#include \"exception.h\"\n#include \"global.h\"\n#include <notebook/bundlenotebook.h>\n#include <notebook/notebookparameters.h>\n#include <utils/utils.h>\n#include <versioncontroller/iversioncontroller.h>\n\nusing namespace vnotex;\n\nQSharedPointer<NotebookConfig>\nNotebookConfig::fromNotebookParameters(int p_version, const NotebookParameters &p_paras) {\n  auto config = QSharedPointer<NotebookConfig>::create();\n\n  config->m_version = p_version;\n  config->m_name = p_paras.m_name;\n  config->m_description = p_paras.m_description;\n  config->m_imageFolder = p_paras.m_imageFolder;\n  config->m_attachmentFolder = p_paras.m_attachmentFolder;\n  config->m_createdTimeUtc = p_paras.m_createdTimeUtc;\n  config->m_versionController = p_paras.m_versionController->getName();\n  config->m_notebookConfigMgr = p_paras.m_notebookConfigMgr->getName();\n\n  return config;\n}\n\nQJsonObject NotebookConfig::toJson() const {\n  QJsonObject jobj;\n\n  jobj[QStringLiteral(\"version\")] = m_version;\n  jobj[QStringLiteral(\"name\")] = m_name;\n  jobj[QStringLiteral(\"description\")] = m_description;\n  jobj[QStringLiteral(\"image_folder\")] = m_imageFolder;\n  jobj[QStringLiteral(\"attachment_folder\")] = m_attachmentFolder;\n  jobj[QStringLiteral(\"created_time\")] = Utils::dateTimeStringUniform(m_createdTimeUtc);\n  jobj[QStringLiteral(\"version_controller\")] = m_versionController;\n  jobj[QStringLiteral(\"config_mgr\")] = m_notebookConfigMgr;\n\n  jobj[QStringLiteral(\"history\")] = saveHistory();\n\n  jobj[QStringLiteral(\"tag_graph\")] = m_tagGraph;\n\n  jobj[QStringLiteral(\"extra_configs\")] = m_extraConfigs;\n\n  return jobj;\n}\n\nvoid NotebookConfig::fromJson(const QJsonObject &p_jobj) {\n  if (!p_jobj.contains(QStringLiteral(\"version\")) || !p_jobj.contains(QStringLiteral(\"name\")) ||\n      !p_jobj.contains(QStringLiteral(\"created_time\")) ||\n      !p_jobj.contains(QStringLiteral(\"version_controller\")) ||\n      !p_jobj.contains(QStringLiteral(\"config_mgr\"))) {\n    Exception::throwOne(Exception::Type::InvalidArgument,\n                        QStringLiteral(\"failed to read notebook configuration from JSON (%1)\")\n                            .arg(QJsonObjectToString(p_jobj)));\n    return;\n  }\n\n  m_version = p_jobj[QStringLiteral(\"version\")].toInt();\n  m_name = p_jobj[QStringLiteral(\"name\")].toString();\n  m_description = p_jobj[QStringLiteral(\"description\")].toString();\n  m_imageFolder = p_jobj[QStringLiteral(\"image_folder\")].toString();\n  m_attachmentFolder = p_jobj[QStringLiteral(\"attachment_folder\")].toString();\n  m_createdTimeUtc =\n      Utils::dateTimeFromStringUniform(p_jobj[QStringLiteral(\"created_time\")].toString());\n  m_versionController = p_jobj[QStringLiteral(\"version_controller\")].toString();\n  m_notebookConfigMgr = p_jobj[QStringLiteral(\"config_mgr\")].toString();\n\n  loadHistory(p_jobj);\n\n  m_tagGraph = p_jobj[QStringLiteral(\"tag_graph\")].toString();\n\n  m_extraConfigs = p_jobj[QStringLiteral(\"extra_configs\")].toObject();\n}\n\nQSharedPointer<NotebookConfig> NotebookConfig::fromNotebook(int p_version,\n                                                            const BundleNotebook *p_notebook) {\n  auto config = QSharedPointer<NotebookConfig>::create();\n\n  config->m_version = p_version;\n  config->m_name = p_notebook->getName();\n  config->m_description = p_notebook->getDescription();\n  config->m_imageFolder = p_notebook->getImageFolder();\n  config->m_attachmentFolder = p_notebook->getAttachmentFolder();\n  config->m_createdTimeUtc = p_notebook->getCreatedTimeUtc();\n  config->m_versionController = p_notebook->getVersionController()->getName();\n  config->m_notebookConfigMgr = p_notebook->getConfigMgr()->getName();\n  config->m_history = p_notebook->getHistory();\n  config->m_tagGraph = p_notebook->getTagGraph();\n  config->m_extraConfigs = p_notebook->getExtraConfigs();\n\n  return config;\n}\n\nQJsonArray NotebookConfig::saveHistory() const {\n  QJsonArray arr;\n  for (const auto &item : m_history) {\n    arr.append(item.toJson());\n  }\n  return arr;\n}\n\nvoid NotebookConfig::loadHistory(const QJsonObject &p_jobj) {\n  auto arr = p_jobj[QStringLiteral(\"history\")].toArray();\n  m_history.resize(arr.size());\n  for (int i = 0; i < arr.size(); ++i) {\n    m_history[i].fromJson(arr[i].toObject());\n  }\n}\n"
  },
  {
    "path": "src/core/notebookconfigmgr/notebookconfig.h",
    "content": "#ifndef NOTEBOOKCONFIG_H\n#define NOTEBOOKCONFIG_H\n\n#include <QDateTime>\n#include <QJsonArray>\n#include <QJsonObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"bundlenotebookconfigmgr.h\"\n#include <core/global.h>\n#include <core/historyitem.h>\n\nnamespace vnotex {\nclass NotebookParameters;\n\n// Notebook config of BundleNotebook.\nclass NotebookConfig {\npublic:\n  virtual ~NotebookConfig() {}\n\n  static QSharedPointer<NotebookConfig> fromNotebookParameters(int p_version,\n                                                               const NotebookParameters &p_paras);\n\n  static QSharedPointer<NotebookConfig> fromNotebook(int p_version,\n                                                     const BundleNotebook *p_notebook);\n\n  virtual QJsonObject toJson() const;\n\n  virtual void fromJson(const QJsonObject &p_jobj);\n\n  int m_version = 0;\n\n  QString m_name;\n\n  QString m_description;\n\n  QString m_imageFolder;\n\n  QString m_attachmentFolder;\n\n  QDateTime m_createdTimeUtc;\n\n  QString m_versionController;\n\n  QString m_notebookConfigMgr;\n\n  QVector<HistoryItem> m_history;\n\n  // Graph of tags of this notebook like \"parent>chlid;parent2>chlid2\".\n  QString m_tagGraph;\n\n  // Hold all the extra configs for other components or 3rd party plugins.\n  // Use a unique name as the key and the value is a QJsonObject.\n  QJsonObject m_extraConfigs;\n\nprivate:\n  QJsonArray saveHistory() const;\n\n  void loadHistory(const QJsonObject &p_jobj);\n};\n} // namespace vnotex\n\n#endif // NOTEBOOKCONFIG_H\n"
  },
  {
    "path": "src/core/notebookconfigmgr/vxnodeconfig.cpp",
    "content": "#include \"vxnodeconfig.h\"\r\n\r\n#include <QJsonArray>\r\n#include <utils/utils.h>\r\n\r\nusing namespace vnotex;\r\n\r\nusing namespace vnotex::vx_node_config;\r\n\r\nconst QString NodeConfig::c_version = \"version\";\r\n\r\nconst QString NodeConfig::c_id = \"id\";\r\n\r\nconst QString NodeConfig::c_signature = \"signature\";\r\n\r\nconst QString NodeConfig::c_createdTimeUtc = \"created_time\";\r\n\r\nconst QString NodeConfig::c_files = \"files\";\r\n\r\nconst QString NodeConfig::c_folders = \"folders\";\r\n\r\nconst QString NodeConfig::c_name = \"name\";\r\n\r\nconst QString NodeConfig::c_modifiedTimeUtc = \"modified_time\";\r\n\r\nconst QString NodeConfig::c_attachmentFolder = \"attachment_folder\";\r\n\r\nconst QString NodeConfig::c_tags = \"tags\";\r\n\r\nconst QString NodeConfig::c_backgroundColor = \"background_color\";\r\n\r\nconst QString NodeConfig::c_borderColor = \"border_color\";\r\n\r\nconst QString NodeConfig::c_nameColor = \"name_color\";\r\n\r\nstatic ID stringToNodeId(const QString &p_idStr) {\r\n  auto ret = stringToID(p_idStr);\r\n  if (!ret.first) {\r\n    return Node::InvalidId;\r\n  }\r\n  return ret.second;\r\n}\r\n\r\nQJsonObject NodeFileConfig::toJson() const {\r\n  QJsonObject jobj;\r\n\r\n  jobj[NodeConfig::c_name] = m_name;\r\n  jobj[NodeConfig::c_id] = IDToString(m_id);\r\n  jobj[NodeConfig::c_signature] = IDToString(m_signature);\r\n  jobj[NodeConfig::c_createdTimeUtc] = Utils::dateTimeStringUniform(m_createdTimeUtc);\r\n  jobj[NodeConfig::c_modifiedTimeUtc] = Utils::dateTimeStringUniform(m_modifiedTimeUtc);\r\n  jobj[NodeConfig::c_attachmentFolder] = m_attachmentFolder;\r\n  jobj[NodeConfig::c_tags] = QJsonArray::fromStringList(m_tags);\r\n\r\n  // Visual settings\r\n  if (!m_backgroundColor.isEmpty()) {\r\n    jobj[NodeConfig::c_backgroundColor] = m_backgroundColor;\r\n  }\r\n  if (!m_borderColor.isEmpty()) {\r\n    jobj[NodeConfig::c_borderColor] = m_borderColor;\r\n  }\r\n  if (!m_nameColor.isEmpty()) {\r\n    jobj[NodeConfig::c_nameColor] = m_nameColor;\r\n  }\r\n\r\n  return jobj;\r\n}\r\n\r\nvoid NodeFileConfig::fromJson(const QJsonObject &p_jobj) {\r\n  m_name = p_jobj[NodeConfig::c_name].toString();\r\n\r\n  m_id = stringToNodeId(p_jobj[NodeConfig::c_id].toString());\r\n  m_signature = stringToNodeId(p_jobj[NodeConfig::c_signature].toString());\r\n\r\n  m_createdTimeUtc =\r\n      Utils::dateTimeFromStringUniform(p_jobj[NodeConfig::c_createdTimeUtc].toString());\r\n  m_modifiedTimeUtc =\r\n      Utils::dateTimeFromStringUniform(p_jobj[NodeConfig::c_modifiedTimeUtc].toString());\r\n\r\n  m_attachmentFolder = p_jobj[NodeConfig::c_attachmentFolder].toString();\r\n\r\n  {\r\n    auto arr = p_jobj[NodeConfig::c_tags].toArray();\r\n    for (int i = 0; i < arr.size(); ++i) {\r\n      m_tags << arr[i].toString();\r\n    }\r\n  }\r\n\r\n  // Visual settings (check if fields exist for backward compatibility)\r\n  if (p_jobj.contains(NodeConfig::c_backgroundColor)) {\r\n    m_backgroundColor = p_jobj[NodeConfig::c_backgroundColor].toString();\r\n  }\r\n  if (p_jobj.contains(NodeConfig::c_borderColor)) {\r\n    m_borderColor = p_jobj[NodeConfig::c_borderColor].toString();\r\n  }\r\n  if (p_jobj.contains(NodeConfig::c_nameColor)) {\r\n    m_nameColor = p_jobj[NodeConfig::c_nameColor].toString();\r\n  }\r\n}\r\n\r\nNodeParameters NodeFileConfig::toNodeParameters() const {\r\n  NodeParameters paras;\r\n  paras.m_id = m_id;\r\n  paras.m_signature = m_signature;\r\n  paras.m_createdTimeUtc = m_createdTimeUtc;\r\n  paras.m_modifiedTimeUtc = m_modifiedTimeUtc;\r\n  paras.m_tags = m_tags;\r\n  paras.m_attachmentFolder = m_attachmentFolder;\r\n\r\n  // Visual settings\r\n  paras.m_visual.setBackgroundColor(m_backgroundColor);\r\n  paras.m_visual.setBorderColor(m_borderColor);\r\n  paras.m_visual.setNameColor(m_nameColor);\r\n\r\n  return paras;\r\n}\r\n\r\nQJsonObject NodeFolderConfig::toJson() const {\r\n  QJsonObject jobj;\r\n\r\n  jobj[NodeConfig::c_name] = m_name;\r\n\r\n  // Visual settings\r\n  if (!m_backgroundColor.isEmpty()) {\r\n    jobj[NodeConfig::c_backgroundColor] = m_backgroundColor;\r\n  }\r\n  if (!m_borderColor.isEmpty()) {\r\n    jobj[NodeConfig::c_borderColor] = m_borderColor;\r\n  }\r\n  if (!m_nameColor.isEmpty()) {\r\n    jobj[NodeConfig::c_nameColor] = m_nameColor;\r\n  }\r\n\r\n  return jobj;\r\n}\r\n\r\nvoid NodeFolderConfig::fromJson(const QJsonObject &p_jobj) {\r\n  m_name = p_jobj[NodeConfig::c_name].toString();\r\n\r\n  // Visual settings (check if fields exist for backward compatibility)\r\n  if (p_jobj.contains(NodeConfig::c_backgroundColor)) {\r\n    m_backgroundColor = p_jobj[NodeConfig::c_backgroundColor].toString();\r\n  }\r\n  if (p_jobj.contains(NodeConfig::c_borderColor)) {\r\n    m_borderColor = p_jobj[NodeConfig::c_borderColor].toString();\r\n  }\r\n  if (p_jobj.contains(NodeConfig::c_nameColor)) {\r\n    m_nameColor = p_jobj[NodeConfig::c_nameColor].toString();\r\n  }\r\n}\r\n\r\nNodeParameters NodeFolderConfig::toNodeParameters() const {\r\n  NodeParameters paras;\r\n\r\n  // Visual settings\r\n  paras.m_visual.setBackgroundColor(m_backgroundColor);\r\n  paras.m_visual.setBorderColor(m_borderColor);\r\n  paras.m_visual.setNameColor(m_nameColor);\r\n\r\n  return paras;\r\n}\r\n\r\nNodeConfig::NodeConfig() {}\r\n\r\nNodeConfig::NodeConfig(int p_version, ID p_id, ID p_signature, const QDateTime &p_createdTimeUtc,\r\n                       const QDateTime &p_modifiedTimeUtc)\r\n    : m_version(p_version), m_id(p_id), m_signature(p_signature),\r\n      m_createdTimeUtc(p_createdTimeUtc), m_modifiedTimeUtc(p_modifiedTimeUtc) {}\r\n\r\nQJsonObject NodeConfig::toJson() const {\r\n  QJsonObject jobj;\r\n\r\n  jobj[NodeConfig::c_version] = m_version;\r\n  jobj[NodeConfig::c_id] = IDToString(m_id);\r\n  jobj[NodeConfig::c_signature] = IDToString(m_signature);\r\n  jobj[NodeConfig::c_createdTimeUtc] = Utils::dateTimeStringUniform(m_createdTimeUtc);\r\n  jobj[NodeConfig::c_modifiedTimeUtc] = Utils::dateTimeStringUniform(m_modifiedTimeUtc);\r\n\r\n  QJsonArray files;\r\n  for (const auto &file : m_files) {\r\n    files.append(file.toJson());\r\n  }\r\n  jobj[NodeConfig::c_files] = files;\r\n\r\n  QJsonArray folders;\r\n  for (const auto &folder : m_folders) {\r\n    folders.append(folder.toJson());\r\n  }\r\n  jobj[NodeConfig::c_folders] = folders;\r\n\r\n  // Visual settings for the container node itself\r\n  if (!m_backgroundColor.isEmpty()) {\r\n    jobj[NodeConfig::c_backgroundColor] = m_backgroundColor;\r\n  }\r\n  if (!m_borderColor.isEmpty()) {\r\n    jobj[NodeConfig::c_borderColor] = m_borderColor;\r\n  }\r\n  if (!m_nameColor.isEmpty()) {\r\n    jobj[NodeConfig::c_nameColor] = m_nameColor;\r\n  }\r\n\r\n  return jobj;\r\n}\r\n\r\nvoid NodeConfig::fromJson(const QJsonObject &p_jobj) {\r\n  m_version = p_jobj[NodeConfig::c_version].toInt();\r\n\r\n  m_id = stringToNodeId(p_jobj[NodeConfig::c_id].toString());\r\n  m_signature = stringToNodeId(p_jobj[NodeConfig::c_signature].toString());\r\n\r\n  m_createdTimeUtc =\r\n      Utils::dateTimeFromStringUniform(p_jobj[NodeConfig::c_createdTimeUtc].toString());\r\n  m_modifiedTimeUtc =\r\n      Utils::dateTimeFromStringUniform(p_jobj[NodeConfig::c_modifiedTimeUtc].toString());\r\n\r\n  auto filesJson = p_jobj[NodeConfig::c_files].toArray();\r\n  m_files.resize(filesJson.size());\r\n  for (int i = 0; i < filesJson.size(); ++i) {\r\n    m_files[i].fromJson(filesJson[i].toObject());\r\n  }\r\n\r\n  auto foldersJson = p_jobj[NodeConfig::c_folders].toArray();\r\n  m_folders.resize(foldersJson.size());\r\n  for (int i = 0; i < foldersJson.size(); ++i) {\r\n    m_folders[i].fromJson(foldersJson[i].toObject());\r\n  }\r\n\r\n  // Visual settings for the container node itself (check if fields exist for backward\r\n  // compatibility)\r\n  if (p_jobj.contains(NodeConfig::c_backgroundColor)) {\r\n    m_backgroundColor = p_jobj[NodeConfig::c_backgroundColor].toString();\r\n  }\r\n  if (p_jobj.contains(NodeConfig::c_borderColor)) {\r\n    m_borderColor = p_jobj[NodeConfig::c_borderColor].toString();\r\n  }\r\n  if (p_jobj.contains(NodeConfig::c_nameColor)) {\r\n    m_nameColor = p_jobj[NodeConfig::c_nameColor].toString();\r\n  }\r\n}\r\n\r\nNodeParameters NodeConfig::toNodeParameters() const {\r\n  NodeParameters paras;\r\n  paras.m_id = m_id;\r\n  paras.m_signature = m_signature;\r\n  paras.m_createdTimeUtc = m_createdTimeUtc;\r\n  paras.m_modifiedTimeUtc = m_modifiedTimeUtc;\r\n\r\n  // Visual settings for the container node itself\r\n  paras.m_visual.setBackgroundColor(m_backgroundColor);\r\n  paras.m_visual.setBorderColor(m_borderColor);\r\n  paras.m_visual.setNameColor(m_nameColor);\r\n\r\n  return paras;\r\n}\r\n"
  },
  {
    "path": "src/core/notebookconfigmgr/vxnodeconfig.h",
    "content": "#ifndef VXNODECONFIG_H\r\n#define VXNODECONFIG_H\r\n\r\n#include <QDateTime>\r\n#include <QJsonObject>\r\n#include <QVector>\r\n\r\n#include <core/global.h>\r\n#include <notebook/node.h>\r\n#include <notebook/nodeparameters.h>\r\n\r\nnamespace vnotex {\r\n// Config structures for VXNotebookConfigMgr.\r\nnamespace vx_node_config {\r\n// Config of a file child.\r\nstruct NodeFileConfig {\r\n  QJsonObject toJson() const;\r\n\r\n  void fromJson(const QJsonObject &p_jobj);\r\n\r\n  NodeParameters toNodeParameters() const;\r\n\r\n  QString m_name;\r\n\r\n  ID m_id = Node::InvalidId;\r\n\r\n  ID m_signature = Node::InvalidId;\r\n\r\n  QDateTime m_createdTimeUtc;\r\n\r\n  QDateTime m_modifiedTimeUtc;\r\n\r\n  QString m_attachmentFolder;\r\n\r\n  QStringList m_tags;\r\n\r\n  // Visual settings\r\n  QString m_backgroundColor;\r\n  QString m_borderColor;\r\n  QString m_nameColor;\r\n};\r\n\r\n// Config of a folder child.\r\nstruct NodeFolderConfig {\r\n  QJsonObject toJson() const;\r\n\r\n  void fromJson(const QJsonObject &p_jobj);\r\n\r\n  NodeParameters toNodeParameters() const;\r\n\r\n  QString m_name;\r\n\r\n  // Visual settings\r\n  QString m_backgroundColor;\r\n  QString m_borderColor;\r\n  QString m_nameColor;\r\n};\r\n\r\n// Config of a folder node.\r\nstruct NodeConfig {\r\n  NodeConfig();\r\n\r\n  NodeConfig(int p_version, ID p_id, ID p_signature, const QDateTime &p_createdTimeUtc,\r\n             const QDateTime &p_modifiedTimeUtc);\r\n\r\n  QJsonObject toJson() const;\r\n\r\n  void fromJson(const QJsonObject &p_jobj);\r\n\r\n  NodeParameters toNodeParameters() const;\r\n\r\n  int m_version = 0;\r\n\r\n  ID m_id = Node::InvalidId;\r\n\r\n  ID m_signature = Node::InvalidId;\r\n\r\n  QDateTime m_createdTimeUtc;\r\n\r\n  QDateTime m_modifiedTimeUtc;\r\n\r\n  QVector<NodeFileConfig> m_files;\r\n\r\n  QVector<NodeFolderConfig> m_folders;\r\n\r\n  // Visual settings for the container node itself\r\n  QString m_backgroundColor;\r\n  QString m_borderColor;\r\n  QString m_nameColor;\r\n\r\n  static const QString c_version;\r\n\r\n  static const QString c_id;\r\n\r\n  static const QString c_signature;\r\n\r\n  static const QString c_createdTimeUtc;\r\n\r\n  static const QString c_files;\r\n\r\n  static const QString c_folders;\r\n\r\n  static const QString c_name;\r\n\r\n  static const QString c_modifiedTimeUtc;\r\n\r\n  static const QString c_attachmentFolder;\r\n\r\n  static const QString c_tags;\r\n\r\n  static const QString c_backgroundColor;\r\n\r\n  static const QString c_borderColor;\r\n\r\n  static const QString c_nameColor;\r\n};\r\n} // namespace vx_node_config\r\n} // namespace vnotex\r\n\r\n#endif // VXNODECONFIG_H\r\n"
  },
  {
    "path": "src/core/notebookconfigmgr/vxnotebookconfigmgr.cpp",
    "content": "#include \"vxnotebookconfigmgr.h\"\n\n#include <QDebug>\n#include <QJsonArray>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QSet>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/editorconfig.h>\n#include <exception.h>\n#include <notebook/bundlenotebook.h>\n#include <notebook/externalnode.h>\n#include <notebook/nodevisual.h>\n#include <notebook/notebookdatabaseaccess.h>\n#include <notebook/notebookparameters.h>\n#include <notebook/vxnode.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n\n#include <utils/contentmediautils.h>\n\n#include \"vxnodeconfig.h\"\n#include \"vxnotebookconfigmgrfactory.h\"\n\nusing namespace vnotex;\n\nusing namespace vnotex::vx_node_config;\n\nconst QString VXNotebookConfigMgr::c_nodeConfigName = \"vx.json\";\n\nbool VXNotebookConfigMgr::s_initialized = false;\n\nQVector<QRegExp> VXNotebookConfigMgr::s_externalNodeExcludePatterns;\n\nVXNotebookConfigMgr::VXNotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend,\n                                         QObject *p_parent)\n    : BundleNotebookConfigMgr(p_backend, p_parent) {\n  if (!s_initialized) {\n    s_initialized = true;\n\n    const auto &patterns = ConfigMgr::getInst().getCoreConfig().getExternalNodeExcludePatterns();\n    s_externalNodeExcludePatterns.reserve(patterns.size());\n    for (const auto &pat : patterns) {\n      if (!pat.isEmpty()) {\n        s_externalNodeExcludePatterns.push_back(\n            QRegExp(pat, Qt::CaseInsensitive, QRegExp::Wildcard));\n      }\n    }\n  }\n}\n\nQString VXNotebookConfigMgr::getName() const { return VXNotebookConfigMgrFactory::c_name; }\n\nQString VXNotebookConfigMgr::getDisplayName() const {\n  return VXNotebookConfigMgrFactory::c_displayName;\n}\n\nQString VXNotebookConfigMgr::getDescription() const {\n  return VXNotebookConfigMgrFactory::c_description;\n}\n\nvoid VXNotebookConfigMgr::createEmptySkeleton(const NotebookParameters &p_paras) {\n  BundleNotebookConfigMgr::createEmptySkeleton(p_paras);\n\n  createEmptyRootNode();\n}\n\nvoid VXNotebookConfigMgr::createEmptyRootNode() {\n  auto currentTime = QDateTime::currentDateTimeUtc();\n  NodeConfig node(getCodeVersion(), Node::InvalidId, Node::InvalidId, currentTime, currentTime);\n  writeNodeConfig(c_nodeConfigName, node);\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::loadRootNode() {\n  auto nodeConfig = readNodeConfig(\"\");\n  QSharedPointer<Node> root = nodeConfigToNode(*nodeConfig, \"\", nullptr);\n  root->setUse(Node::Use::Root);\n  root->setExists(true);\n  Q_ASSERT(root->isLoaded());\n\n  if (static_cast<BundleNotebook *>(getNotebook())->getConfigVersion() < 3) {\n    removeLegacyRecycleBinNode(root);\n  }\n\n  return root;\n}\n\nvoid VXNotebookConfigMgr::removeLegacyRecycleBinNode(const QSharedPointer<Node> &p_root) {\n  // Do not support recycle bin node as it complicates everything.\n  auto node =\n      p_root->findChild(QStringLiteral(\"vx_recycle_bin\"), FileUtils::isPlatformNameCaseSensitive());\n  if (node) {\n    removeNode(node, true, true);\n  }\n}\n\nvoid VXNotebookConfigMgr::markNodeReadOnly(Node *p_node) const {\n  if (p_node->isReadOnly()) {\n    return;\n  }\n\n  p_node->setReadOnly(true);\n  for (const auto &child : p_node->getChildrenRef()) {\n    markNodeReadOnly(child.data());\n  }\n}\n\nQSharedPointer<NodeConfig> VXNotebookConfigMgr::readNodeConfig(const QString &p_path) const {\n  auto backend = getBackend();\n  if (!backend->exists(p_path)) {\n    Exception::throwOne(Exception::Type::InvalidArgument,\n                        QStringLiteral(\"node path (%1) does not exist\").arg(p_path));\n  }\n\n  if (backend->isFile(p_path)) {\n    Exception::throwOne(Exception::Type::InvalidArgument,\n                        QStringLiteral(\"node (%1) is a file node without config\").arg(p_path));\n  } else {\n    auto configPath = PathUtils::concatenateFilePath(p_path, c_nodeConfigName);\n    auto data = backend->readFile(configPath);\n    auto nodeConfig = QSharedPointer<NodeConfig>::create();\n    nodeConfig->fromJson(QJsonDocument::fromJson(data).object());\n    return nodeConfig;\n  }\n\n  return nullptr;\n}\n\nQString VXNotebookConfigMgr::getNodeConfigFilePath(const Node *p_node) const {\n  Q_ASSERT(p_node->isContainer());\n  return PathUtils::concatenateFilePath(p_node->fetchPath(), c_nodeConfigName);\n}\n\nvoid VXNotebookConfigMgr::writeNodeConfig(const QString &p_path, const NodeConfig &p_config) const {\n  getBackend()->writeFile(p_path, p_config.toJson());\n}\n\nvoid VXNotebookConfigMgr::writeNodeConfig(const Node *p_node) {\n  auto config = nodeToNodeConfig(p_node);\n  writeNodeConfig(getNodeConfigFilePath(p_node), *config);\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::nodeConfigToNode(const NodeConfig &p_config,\n                                                           const QString &p_name, Node *p_parent) {\n  auto node = QSharedPointer<VXNode>::create(p_name, getNotebook(), p_parent);\n  loadFolderNode(node.data(), p_config);\n  return node;\n}\n\nvoid VXNotebookConfigMgr::loadFolderNode(Node *p_node, const NodeConfig &p_config) {\n  QSet<QString> seenNames;\n\n  QVector<QSharedPointer<Node>> children;\n  children.reserve(p_config.m_files.size() + p_config.m_folders.size());\n  const auto basePath = p_node->fetchPath();\n\n  bool needUpdateConfig = false;\n\n  for (const auto &folder : p_config.m_folders) {\n    if (folder.m_name.isEmpty()) {\n      // Skip empty name node.\n      qWarning() << \"skipped loading node with empty name under\" << p_node->fetchPath();\n      continue;\n    }\n\n    if (seenNames.contains(folder.m_name)) {\n      qWarning() << \"skipped loading node with duplicated name under\" << p_node->fetchPath();\n      continue;\n    }\n    seenNames.insert(folder.m_name);\n\n    auto folderNode = QSharedPointer<VXNode>::create(folder.m_name, getNotebook(), p_node);\n    inheritNodeFlags(p_node, folderNode.data());\n    folderNode->setExists(\n        getBackend()->existsDir(PathUtils::concatenateFilePath(basePath, folder.m_name)));\n\n    // 设置视觉效果信息\n    NodeParameters visualParams = folder.toNodeParameters();\n    folderNode->setVisual(visualParams.m_visual);\n    children.push_back(folderNode);\n  }\n\n  for (const auto &file : p_config.m_files) {\n    if (file.m_name.isEmpty()) {\n      // Skip empty name node.\n      qWarning() << \"skipped loading node with empty name under\" << p_node->fetchPath();\n      continue;\n    }\n\n    if (seenNames.contains(file.m_name)) {\n      qWarning() << \"skipped loading node with duplicated name under\" << p_node->fetchPath();\n      continue;\n    }\n    seenNames.insert(file.m_name);\n\n    // For compability only.\n    needUpdateConfig = needUpdateConfig || file.m_signature == Node::InvalidId;\n\n    auto fileNode =\n        QSharedPointer<VXNode>::create(file.m_name, file.toNodeParameters(), getNotebook(), p_node);\n    inheritNodeFlags(p_node, fileNode.data());\n    fileNode->setExists(\n        getBackend()->existsFile(PathUtils::concatenateFilePath(basePath, file.m_name)));\n    children.push_back(fileNode);\n  }\n\n  p_node->loadCompleteInfo(p_config.toNodeParameters(), children);\n\n  needUpdateConfig = needUpdateConfig || p_config.m_signature == Node::InvalidId;\n  if (needUpdateConfig) {\n    writeNodeConfig(p_node);\n  }\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::newNode(Node *p_parent, Node::Flags p_flags,\n                                                  const QString &p_name, const QString &p_content) {\n  Q_ASSERT(p_parent && p_parent->isContainer() && !p_name.isEmpty());\n\n  QSharedPointer<Node> node;\n\n  if (p_flags & Node::Flag::Content) {\n    Q_ASSERT(!(p_flags & Node::Flag::Container));\n    node = newFileNode(p_parent, p_name, p_content, true, NodeParameters());\n  } else {\n    node = newFolderNode(p_parent, p_name, true, NodeParameters());\n  }\n\n  return node;\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::addAsNode(Node *p_parent, Node::Flags p_flags,\n                                                    const QString &p_name,\n                                                    const NodeParameters &p_paras) {\n  Q_ASSERT(p_parent && p_parent->isContainer());\n\n  // TODO: reuse the config if available.\n  QSharedPointer<Node> node;\n  if (p_flags & Node::Flag::Content) {\n    Q_ASSERT(!(p_flags & Node::Flag::Container));\n    node = newFileNode(p_parent, p_name, \"\", false, p_paras);\n  } else {\n    node = newFolderNode(p_parent, p_name, false, p_paras);\n  }\n\n  return node;\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::copyAsNode(Node *p_parent, Node::Flags p_flags,\n                                                     const QString &p_path) {\n  Q_ASSERT(p_parent && p_parent->isContainer());\n\n  QSharedPointer<Node> node;\n  if (p_flags & Node::Flag::Content) {\n    Q_ASSERT(!(p_flags & Node::Flag::Container));\n    node = copyFileAsChildOf(p_path, p_parent);\n  } else {\n    node = copyFolderAsChildOf(p_path, p_parent);\n  }\n\n  return node;\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::newFileNode(Node *p_parent, const QString &p_name,\n                                                      const QString &p_content, bool p_create,\n                                                      const NodeParameters &p_paras) {\n  ensureNodeInDatabase(p_parent);\n\n  auto notebook = getNotebook();\n\n  // Create file node.\n  auto node = QSharedPointer<VXNode>::create(p_name, p_paras, notebook, p_parent);\n\n  // Write empty file.\n  if (p_create) {\n    if (getBackend()->childExistsCaseInsensitive(p_parent->fetchPath(), p_name)) {\n      // File already exists. Exception.\n      Exception::throwOne(\n          Exception::Type::FileExistsOnCreate,\n          QStringLiteral(\"file (%1) already exists when creating new node\").arg(node->fetchPath()));\n      return nullptr;\n    }\n\n    getBackend()->writeFile(node->fetchPath(), p_content);\n    node->setExists(true);\n  } else {\n    node->setExists(getBackend()->existsFile(node->fetchPath()));\n  }\n\n  addChildNode(p_parent, node);\n  writeNodeConfig(p_parent);\n\n  addNodeToDatabase(node.data());\n\n  return node;\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::newFolderNode(Node *p_parent, const QString &p_name,\n                                                        bool p_create,\n                                                        const NodeParameters &p_paras) {\n  ensureNodeInDatabase(p_parent);\n\n  auto notebook = getNotebook();\n\n  // Create folder node.\n  auto node = QSharedPointer<VXNode>::create(p_name, notebook, p_parent);\n  node->loadCompleteInfo(p_paras, QVector<QSharedPointer<Node>>());\n\n  // Make folder.\n  if (p_create) {\n    if (getBackend()->childExistsCaseInsensitive(p_parent->fetchPath(), p_name)) {\n      // Dir already exists. Exception.\n      Exception::throwOne(\n          Exception::Type::DirExistsOnCreate,\n          QStringLiteral(\"dir (%1) already exists when creating new node\").arg(node->fetchPath()));\n      return nullptr;\n    }\n\n    getBackend()->makePath(node->fetchPath());\n    node->setExists(true);\n  } else {\n    node->setExists(getBackend()->existsDir(node->fetchPath()));\n  }\n\n  writeNodeConfig(node.data());\n\n  addChildNode(p_parent, node);\n  writeNodeConfig(p_parent);\n\n  addNodeToDatabase(node.data());\n\n  return node;\n}\n\nQSharedPointer<NodeConfig> VXNotebookConfigMgr::nodeToNodeConfig(const Node *p_node) const {\n  Q_ASSERT(p_node->isContainer());\n  Q_ASSERT(p_node->isLoaded());\n\n  auto config =\n      QSharedPointer<NodeConfig>::create(getCodeVersion(), p_node->getId(), p_node->getSignature(),\n                                         p_node->getCreatedTimeUtc(), p_node->getModifiedTimeUtc());\n\n  // Set visual settings for the container node itself\n  config->m_backgroundColor = p_node->getBackgroundColor();\n  config->m_borderColor = p_node->getBorderColor();\n  config->m_nameColor = p_node->getNameColor();\n\n  for (const auto &child : p_node->getChildrenRef()) {\n    if (child->hasContent()) {\n      NodeFileConfig fileConfig;\n      fileConfig.m_name = child->getName();\n      fileConfig.m_id = child->getId();\n      fileConfig.m_signature = child->getSignature();\n      fileConfig.m_createdTimeUtc = child->getCreatedTimeUtc();\n      fileConfig.m_modifiedTimeUtc = child->getModifiedTimeUtc();\n      fileConfig.m_attachmentFolder = child->getAttachmentFolder();\n      fileConfig.m_tags = child->getTags();\n\n      // Visual settings\n      fileConfig.m_backgroundColor = child->getBackgroundColor();\n      fileConfig.m_borderColor = child->getBorderColor();\n      fileConfig.m_nameColor = child->getNameColor();\n\n      config->m_files.push_back(fileConfig);\n    } else {\n      Q_ASSERT(child->isContainer());\n      NodeFolderConfig folderConfig;\n      folderConfig.m_name = child->getName();\n\n      // Visual settings\n      folderConfig.m_backgroundColor = child->getBackgroundColor();\n      folderConfig.m_borderColor = child->getBorderColor();\n      folderConfig.m_nameColor = child->getNameColor();\n\n      config->m_folders.push_back(folderConfig);\n    }\n  }\n\n  return config;\n}\n\nvoid VXNotebookConfigMgr::loadNode(Node *p_node) {\n  if (p_node->isLoaded() || !p_node->exists()) {\n    return;\n  }\n\n  auto config = readNodeConfig(p_node->fetchPath());\n  Q_ASSERT(p_node->isContainer());\n  loadFolderNode(p_node, *config);\n}\n\nvoid VXNotebookConfigMgr::saveNode(const Node *p_node) {\n  if (p_node->isContainer()) {\n    writeNodeConfig(p_node);\n  } else {\n    Q_ASSERT(!p_node->isRoot());\n    writeNodeConfig(p_node->getParent());\n  }\n}\n\nvoid VXNotebookConfigMgr::renameNode(Node *p_node, const QString &p_name) {\n  Q_ASSERT(!p_node->isRoot());\n\n  if (p_node->isContainer()) {\n    getBackend()->renameDir(p_node->fetchPath(), p_name);\n  } else {\n    getBackend()->renameFile(p_node->fetchPath(), p_name);\n  }\n\n  p_node->setName(p_name);\n  writeNodeConfig(p_node->getParent());\n\n  ensureNodeInDatabase(p_node);\n  updateNodeInDatabase(p_node);\n}\n\n// Do not touch DB here since it will be called at different scenarios.\nvoid VXNotebookConfigMgr::addChildNode(Node *p_parent, const QSharedPointer<Node> &p_child) const {\n  if (p_child->isContainer()) {\n    int idx = 0;\n    const auto &children = p_parent->getChildrenRef();\n    for (; idx < children.size(); ++idx) {\n      if (!children[idx]->isContainer()) {\n        break;\n      }\n    }\n\n    p_parent->insertChild(idx, p_child);\n  } else {\n    p_parent->addChild(p_child);\n  }\n\n  inheritNodeFlags(p_parent, p_child.data());\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::loadNodeByPath(const QSharedPointer<Node> &p_root,\n                                                         const QString &p_relativePath) {\n  auto p = PathUtils::cleanPath(p_relativePath);\n  if (p == \".\") {\n    return p_root;\n  }\n\n  auto paths = p.split('/', Qt::SkipEmptyParts);\n  auto node = p_root;\n  for (auto &pa : paths) {\n    // Find child @pa in @node.\n    if (!node->isLoaded()) {\n      loadNode(node.data());\n    }\n\n    auto child = node->findChild(pa, FileUtils::isPlatformNameCaseSensitive());\n    if (!child) {\n      return nullptr;\n    }\n\n    node = child;\n  }\n\n  return node;\n}\n\n// @p_src may belong to different notebook or different kind of configmgr.\n// TODO: we could constrain @p_src within the same configrmgr?\nQSharedPointer<Node> VXNotebookConfigMgr::copyNodeAsChildOf(const QSharedPointer<Node> &p_src,\n                                                            Node *p_dest, bool p_move) {\n  return copyNodeAsChildOf(p_src, p_dest, p_move, true);\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::copyNodeAsChildOf(const QSharedPointer<Node> &p_src,\n                                                            Node *p_dest, bool p_move,\n                                                            bool p_updateDatabase) {\n  Q_ASSERT(p_dest->isContainer());\n\n  if (!p_src->exists()) {\n    if (p_move) {\n      // It is OK to always update the database.\n      p_src->getNotebook()->removeNode(p_src);\n    }\n    return nullptr;\n  }\n\n  QSharedPointer<Node> node;\n  if (p_src->isContainer()) {\n    node = copyFolderNodeAsChildOf(p_src, p_dest, p_move, p_updateDatabase);\n  } else {\n    node = copyFileNodeAsChildOf(p_src, p_dest, p_move, p_updateDatabase);\n  }\n\n  return node;\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::copyFileNodeAsChildOf(const QSharedPointer<Node> &p_src,\n                                                                Node *p_dest, bool p_move,\n                                                                bool p_updateDatabase) {\n  QString destFilePath;\n  QString attachmentFolder;\n  copyFilesOfFileNode(p_src, p_dest->fetchPath(), destFilePath, attachmentFolder);\n\n  // Create a file node.\n  auto notebook = getNotebook();\n  const bool sameNotebook = p_src->getNotebook() == notebook;\n\n  if (p_updateDatabase) {\n    ensureNodeInDatabase(p_dest);\n    if (sameNotebook) {\n      ensureNodeInDatabase(p_src.data());\n    }\n  }\n\n  NodeParameters paras;\n  if (p_move && sameNotebook) {\n    paras.m_id = p_src->getId();\n    paras.m_signature = p_src->getSignature();\n  }\n  paras.m_createdTimeUtc = p_src->getCreatedTimeUtc();\n  paras.m_modifiedTimeUtc = p_src->getModifiedTimeUtc();\n  paras.m_tags = p_src->getTags();\n  paras.m_attachmentFolder = attachmentFolder;\n  auto destNode =\n      QSharedPointer<VXNode>::create(PathUtils::fileName(destFilePath), paras, notebook, p_dest);\n  destNode->setExists(true);\n\n  addChildNode(p_dest, destNode);\n  writeNodeConfig(p_dest);\n\n  if (p_updateDatabase) {\n    if (p_move && sameNotebook) {\n      updateNodeInDatabase(destNode.data());\n    } else {\n      addNodeToDatabase(destNode.data());\n    }\n\n    Q_ASSERT(nodeExistsInDatabase(destNode.data()));\n  }\n\n  if (p_move) {\n    if (sameNotebook) {\n      // The same notebook. Do not directly call removeNode() since we already update the record\n      // in database directly.\n      removeNode(p_src, false, false, false);\n    } else {\n      p_src->getNotebook()->removeNode(p_src);\n    }\n  }\n\n  return destNode;\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::copyFolderNodeAsChildOf(const QSharedPointer<Node> &p_src,\n                                                                  Node *p_dest, bool p_move,\n                                                                  bool p_updateDatabase) {\n  auto destFolderPath = PathUtils::concatenateFilePath(p_dest->fetchPath(), p_src->getName());\n  destFolderPath = getBackend()->renameIfExistsCaseInsensitive(destFolderPath);\n\n  // Make folder.\n  getBackend()->makePath(destFolderPath);\n\n  // Create a folder node.\n  auto notebook = getNotebook();\n  const bool sameNotebook = p_src->getNotebook() == notebook;\n\n  if (p_updateDatabase) {\n    ensureNodeInDatabase(p_dest);\n    if (sameNotebook) {\n      ensureNodeInDatabase(p_src.data());\n    }\n  }\n\n  auto destNode =\n      QSharedPointer<VXNode>::create(PathUtils::fileName(destFolderPath), notebook, p_dest);\n  {\n    NodeParameters paras;\n    if (p_move && sameNotebook) {\n      paras.m_id = p_src->getId();\n      paras.m_signature = p_src->getSignature();\n    }\n    paras.m_createdTimeUtc = p_src->getCreatedTimeUtc();\n    paras.m_modifiedTimeUtc = p_src->getModifiedTimeUtc();\n    destNode->loadCompleteInfo(paras, QVector<QSharedPointer<Node>>());\n  }\n\n  destNode->setExists(true);\n  writeNodeConfig(destNode.data());\n\n  addChildNode(p_dest, destNode);\n  writeNodeConfig(p_dest);\n\n  if (p_updateDatabase) {\n    if (p_move && sameNotebook) {\n      p_updateDatabase = false;\n      updateNodeInDatabase(destNode.data());\n    } else {\n      addNodeToDatabase(destNode.data());\n    }\n  }\n\n  // Copy children node.\n  auto children = p_src->getChildren();\n  for (const auto &childNode : children) {\n    copyNodeAsChildOf(childNode, destNode.data(), p_move, p_updateDatabase);\n  }\n\n  if (p_move) {\n    if (sameNotebook) {\n      removeNode(p_src, false, false, false);\n    } else {\n      p_src->getNotebook()->removeNode(p_src);\n    }\n  }\n\n  return destNode;\n}\n\nvoid VXNotebookConfigMgr::removeNode(const QSharedPointer<Node> &p_node, bool p_force,\n                                     bool p_configOnly) {\n  removeNode(p_node, p_force, p_configOnly, true);\n}\n\nvoid VXNotebookConfigMgr::removeNode(const QSharedPointer<Node> &p_node, bool p_force,\n                                     bool p_configOnly, bool p_updateDatabase) {\n  if (!p_configOnly && p_node->exists()) {\n    // Remove all children.\n    auto children = p_node->getChildren();\n    for (const auto &childNode : children) {\n      // With DELETE CASCADE, we could just touch the DB at parent level.\n      removeNode(childNode, p_force, p_configOnly, false);\n    }\n\n    try {\n      removeFilesOfNode(p_node.data(), p_force);\n    } catch (Exception &p_e) {\n      qWarning() << \"failed to remove files of node\" << p_node->fetchPath() << p_e.what();\n    }\n  }\n\n  if (p_updateDatabase) {\n    // Remove it from data base before modifying the parent.\n    removeNodeFromDatabase(p_node.data());\n  }\n\n  if (auto parentNode = p_node->getParent()) {\n    parentNode->removeChild(p_node);\n    writeNodeConfig(parentNode);\n  }\n}\n\nvoid VXNotebookConfigMgr::removeFilesOfNode(Node *p_node, bool p_force) {\n  Q_ASSERT(p_node->getNotebook() == getNotebook());\n  if (!p_node->isContainer()) {\n    // Delete attachment.\n    if (!p_node->getAttachmentFolder().isEmpty()) {\n      getBackend()->removeDir(p_node->fetchAttachmentFolderPath());\n    }\n\n    // Delete media files fetched from content.\n    ContentMediaUtils::removeMediaFiles(p_node);\n\n    // Delete node file itself.\n    auto filePath = p_node->fetchPath();\n    getBackend()->removeFile(filePath);\n  } else {\n    Q_ASSERT(p_node->getChildrenCount() == 0);\n    // Delete node config file and the dir if it is empty.\n    auto configFilePath = getNodeConfigFilePath(p_node);\n    getBackend()->removeFile(configFilePath);\n    auto folderPath = p_node->fetchPath();\n    if (p_force) {\n      getBackend()->removeDir(folderPath);\n    } else {\n      getBackend()->removeEmptyDir(folderPath);\n      bool deleted = getBackend()->removeDirIfEmpty(folderPath);\n      if (!deleted) {\n        qWarning() << \"folder is not deleted since it is not empty\" << folderPath;\n      }\n    }\n  }\n}\n\nvoid VXNotebookConfigMgr::removeNodeToFolder(const QSharedPointer<Node> &p_node,\n                                             const QString &p_destFolder) {\n  if (p_node->isContainer()) {\n    removeFolderNodeToFolder(p_node, p_destFolder);\n  } else {\n    removeFileNodeToFolder(p_node, p_destFolder);\n  }\n}\n\nvoid VXNotebookConfigMgr::removeFolderNodeToFolder(const QSharedPointer<Node> &p_node,\n                                                   const QString &p_destFolder) {\n  auto destFolderPath = PathUtils::concatenateFilePath(p_destFolder, p_node->getName());\n  destFolderPath = getBackend()->renameIfExistsCaseInsensitive(destFolderPath);\n\n  // Make folder.\n  getBackend()->makePath(destFolderPath);\n\n  // Children.\n  auto children = p_node->getChildren();\n  for (const auto &child : children) {\n    removeNodeToFolder(child, destFolderPath);\n  }\n\n  removeNode(p_node, false, false);\n}\n\nvoid VXNotebookConfigMgr::removeFileNodeToFolder(const QSharedPointer<Node> &p_node,\n                                                 const QString &p_destFolder) {\n  // Use a wrapper folder.\n  auto destFolderPath = PathUtils::concatenateFilePath(p_destFolder, p_node->getName());\n  destFolderPath = getBackend()->renameIfExistsCaseInsensitive(destFolderPath);\n\n  // Make folder.\n  getBackend()->makePath(destFolderPath);\n\n  QString destFilePath;\n  QString attachmentFolder;\n  copyFilesOfFileNode(p_node, destFolderPath, destFilePath, attachmentFolder);\n\n  removeNode(p_node, false, false);\n}\n\nvoid VXNotebookConfigMgr::copyFilesOfFileNode(const QSharedPointer<Node> &p_node,\n                                              const QString &p_destFolder, QString &p_destFilePath,\n                                              QString &p_attachmentFolder) {\n  // Copy source file itself.\n  auto nodeFilePath = p_node->fetchAbsolutePath();\n  p_destFilePath = PathUtils::concatenateFilePath(p_destFolder, PathUtils::fileName(nodeFilePath));\n  p_destFilePath = getBackend()->renameIfExistsCaseInsensitive(p_destFilePath);\n  getBackend()->copyFile(nodeFilePath, p_destFilePath);\n\n  // Copy media files fetched from content.\n  ContentMediaUtils::copyMediaFiles(p_node.data(), getBackend().data(), p_destFilePath);\n\n  // Copy attachment folder. Rename attachment folder if conflicts.\n  p_attachmentFolder = p_node->getAttachmentFolder();\n  if (!p_attachmentFolder.isEmpty()) {\n    auto destAttachmentFolderPath = fetchNodeAttachmentFolder(p_destFilePath, p_attachmentFolder);\n    ContentMediaUtils::copyAttachment(p_node.data(), getBackend().data(), p_destFilePath,\n                                      destAttachmentFolderPath);\n  }\n}\n\nQString VXNotebookConfigMgr::fetchNodeImageFolderPath(Node *p_node) {\n  auto pa = PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_node->fetchAbsolutePath()),\n                                           getNotebook()->getImageFolder());\n  // Do not make the folder when it is a folder node request.\n  if (p_node->hasContent()) {\n    getBackend()->makePath(pa);\n  }\n  return pa;\n}\n\nQString VXNotebookConfigMgr::fetchNodeAttachmentFolderPath(Node *p_node) {\n  auto notebookFolder = PathUtils::concatenateFilePath(\n      PathUtils::parentDirPath(p_node->fetchAbsolutePath()), getNotebook()->getAttachmentFolder());\n  if (p_node->hasContent()) {\n    auto nodeFolder = p_node->getAttachmentFolder();\n    if (nodeFolder.isEmpty()) {\n      auto folderPath = fetchNodeAttachmentFolder(p_node->fetchAbsolutePath(), nodeFolder);\n      p_node->setAttachmentFolder(nodeFolder);\n      saveNode(p_node);\n\n      getBackend()->makePath(folderPath);\n      return folderPath;\n    } else {\n      return PathUtils::concatenateFilePath(notebookFolder, nodeFolder);\n    }\n  } else {\n    // Do not make the folder when it is a folder node request.\n    return notebookFolder;\n  }\n}\n\nQString VXNotebookConfigMgr::fetchNodeAttachmentFolder(const QString &p_nodePath,\n                                                       QString &p_folderName) {\n  auto notebookFolder = PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_nodePath),\n                                                       getNotebook()->getAttachmentFolder());\n  if (p_folderName.isEmpty()) {\n    p_folderName = FileUtils::generateUniqueFileName(notebookFolder, QString(), QString());\n  } else if (FileUtils::childExistsCaseInsensitive(notebookFolder, p_folderName)) {\n    p_folderName = FileUtils::generateFileNameWithSequence(notebookFolder, p_folderName, QString());\n  }\n  return PathUtils::concatenateFilePath(notebookFolder, p_folderName);\n}\n\nbool VXNotebookConfigMgr::isBuiltInFile(const Node *p_node, const QString &p_name) const {\n  static const QString backupFileExtension =\n      ConfigMgr::getInst().getEditorConfig().getBackupFileExtension().toLower();\n\n  const auto name = p_name.toLower();\n  if (name == c_nodeConfigName || name == QStringLiteral(\"_vnote.json\") ||\n      name.endsWith(backupFileExtension)) {\n    return true;\n  }\n  return BundleNotebookConfigMgr::isBuiltInFile(p_node, p_name);\n}\n\nbool VXNotebookConfigMgr::isBuiltInFolder(const Node *p_node, const QString &p_name) const {\n  const auto name = p_name.toLower();\n  const auto &nb = getNotebook();\n  if (name == nb->getImageFolder().toLower() || name == nb->getAttachmentFolder().toLower() ||\n      name == QStringLiteral(\"_v_images\") || name == QStringLiteral(\"_v_attachments\") ||\n      name == QStringLiteral(\"vx_images\") || name == QStringLiteral(\"vx_attachments\")) {\n    return true;\n  }\n  return BundleNotebookConfigMgr::isBuiltInFolder(p_node, p_name);\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::copyFileAsChildOf(const QString &p_srcPath,\n                                                            Node *p_dest) {\n  // Skip copy if it already locates in dest folder.\n  auto destFilePath =\n      PathUtils::concatenateFilePath(p_dest->fetchAbsolutePath(), PathUtils::fileName(p_srcPath));\n  if (!PathUtils::areSamePaths(p_srcPath, destFilePath)) {\n    // Copy source file itself.\n    destFilePath = getBackend()->renameIfExistsCaseInsensitive(destFilePath);\n    getBackend()->copyFile(p_srcPath, destFilePath);\n\n    // Copy media files fetched from content.\n    ContentMediaUtils::copyMediaFiles(p_srcPath, getBackend().data(), destFilePath);\n  }\n\n  ensureNodeInDatabase(p_dest);\n\n  const auto name = PathUtils::fileName(destFilePath);\n  auto destNode = p_dest->findChild(name, true);\n  if (destNode) {\n    // Already have the node.\n    ensureNodeInDatabase(destNode.data());\n    return destNode;\n  }\n\n  // Create a file node.\n  destNode = QSharedPointer<VXNode>::create(name, NodeParameters(), getNotebook(), p_dest);\n  destNode->setExists(true);\n  addChildNode(p_dest, destNode);\n  writeNodeConfig(p_dest);\n\n  addNodeToDatabase(destNode.data());\n\n  return destNode;\n}\n\nQSharedPointer<Node> VXNotebookConfigMgr::copyFolderAsChildOf(const QString &p_srcPath,\n                                                              Node *p_dest) {\n  // Skip copy if it already locates in dest folder.\n  auto destFolderPath =\n      PathUtils::concatenateFilePath(p_dest->fetchAbsolutePath(), PathUtils::fileName(p_srcPath));\n  if (!PathUtils::areSamePaths(p_srcPath, destFolderPath)) {\n    destFolderPath = getBackend()->renameIfExistsCaseInsensitive(destFolderPath);\n\n    // Copy folder.\n    getBackend()->copyDir(p_srcPath, destFolderPath);\n  }\n\n  ensureNodeInDatabase(p_dest);\n\n  const auto name = PathUtils::fileName(destFolderPath);\n  auto destNode = p_dest->findChild(name, true);\n  if (destNode) {\n    // Already have the node.\n    ensureNodeInDatabase(destNode.data());\n    return destNode;\n  }\n\n  // Create a folder node.\n  auto notebook = getNotebook();\n  destNode = QSharedPointer<VXNode>::create(name, notebook, p_dest);\n  destNode->loadCompleteInfo(NodeParameters(), QVector<QSharedPointer<Node>>());\n  destNode->setExists(true);\n\n  writeNodeConfig(destNode.data());\n\n  addChildNode(p_dest, destNode);\n  writeNodeConfig(p_dest);\n\n  addNodeToDatabase(destNode.data());\n\n  return destNode;\n}\n\nvoid VXNotebookConfigMgr::inheritNodeFlags(const Node *p_node, Node *p_child) const {\n  if (p_node->isReadOnly()) {\n    markNodeReadOnly(p_child);\n  }\n}\n\nQVector<QSharedPointer<ExternalNode>>\nVXNotebookConfigMgr::fetchExternalChildren(Node *p_node) const {\n  Q_ASSERT(p_node->isContainer());\n  QVector<QSharedPointer<ExternalNode>> externalNodes;\n\n  auto dir = p_node->toDir();\n\n  // Folders.\n  {\n    const auto folders = dir.entryList(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);\n    for (const auto &folder : folders) {\n      if (isBuiltInFolder(p_node, folder)) {\n        continue;\n      }\n\n      if (isExcludedFromExternalNode(folder)) {\n        continue;\n      }\n\n      if (p_node->containsContainerChild(folder)) {\n        continue;\n      }\n\n      externalNodes.push_back(\n          QSharedPointer<ExternalNode>::create(p_node, folder, ExternalNode::Type::Folder));\n    }\n  }\n\n  // Files.\n  {\n    const auto files = dir.entryList(QDir::Files);\n    for (const auto &file : files) {\n      if (isBuiltInFile(p_node, file)) {\n        continue;\n      }\n\n      if (isExcludedFromExternalNode(file)) {\n        continue;\n      }\n\n      if (p_node->containsContentChild(file)) {\n        continue;\n      }\n\n      externalNodes.push_back(\n          QSharedPointer<ExternalNode>::create(p_node, file, ExternalNode::Type::File));\n    }\n  }\n\n  return externalNodes;\n}\n\nbool VXNotebookConfigMgr::isExcludedFromExternalNode(const QString &p_name) const {\n  for (const auto &regExp : s_externalNodeExcludePatterns) {\n    if (regExp.exactMatch(p_name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nbool VXNotebookConfigMgr::checkNodeExists(Node *p_node) {\n  bool exists = getBackend()->exists(p_node->fetchPath());\n  p_node->setExists(exists);\n  return exists;\n}\n\nQStringList VXNotebookConfigMgr::scanAndImportExternalFiles(Node *p_node) {\n  QStringList files;\n  if (!p_node->isContainer()) {\n    return files;\n  }\n\n  // External nodes.\n  auto dir = p_node->toDir();\n  auto externalNodes = fetchExternalChildren(p_node);\n  for (const auto &node : externalNodes) {\n    Node::Flags flags = Node::Flag::Content;\n    if (node->isFolder()) {\n      if (isLikelyImageFolder(dir.filePath(node->getName()))) {\n        qWarning() << \"skip importing folder containing only images\" << node->getName();\n        continue;\n      }\n      flags = Node::Flag::Container;\n    }\n\n    addAsNode(p_node, flags, node->getName(), NodeParameters());\n    files << dir.filePath(node->getName());\n  }\n\n  // Children folders (including newly-added external nodes).\n  for (const auto &child : p_node->getChildrenRef()) {\n    if (child->isContainer()) {\n      files << scanAndImportExternalFiles(child.data());\n    }\n  }\n\n  return files;\n}\n\nbool VXNotebookConfigMgr::isLikelyImageFolder(const QString &p_dirPath) {\n  QDir dir(p_dirPath);\n  const auto folders = dir.entryList(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);\n  if (!folders.isEmpty()) {\n    return false;\n  }\n\n  const auto files = dir.entryList(QDir::Files);\n  if (files.isEmpty()) {\n    return false;\n  }\n\n  for (const auto &file : files) {\n    if (!FileUtils::isImage(dir.filePath(file))) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nNotebookDatabaseAccess *VXNotebookConfigMgr::getDatabaseAccess() const {\n  return static_cast<BundleNotebook *>(getNotebook())->getDatabaseAccess();\n}\n\nvoid VXNotebookConfigMgr::updateNodeInDatabase(Node *p_node) {\n  Q_ASSERT(sameNotebook(p_node));\n  getDatabaseAccess()->updateNode(p_node);\n}\n\nvoid VXNotebookConfigMgr::ensureNodeInDatabase(Node *p_node) {\n  if (!p_node) {\n    return;\n  }\n\n  Q_ASSERT(sameNotebook(p_node));\n\n  auto db = getDatabaseAccess();\n  if (db->existsNode(p_node)) {\n    return;\n  }\n\n  ensureNodeInDatabase(p_node->getParent());\n  db->addNode(p_node, false);\n  db->clearObsoleteNodes();\n}\n\nvoid VXNotebookConfigMgr::addNodeToDatabase(Node *p_node) {\n  Q_ASSERT(sameNotebook(p_node));\n  auto db = getDatabaseAccess();\n  db->addNode(p_node, false);\n  db->clearObsoleteNodes();\n}\n\nbool VXNotebookConfigMgr::nodeExistsInDatabase(const Node *p_node) {\n  Q_ASSERT(sameNotebook(p_node));\n  return getDatabaseAccess()->existsNode(p_node);\n}\n\nvoid VXNotebookConfigMgr::removeNodeFromDatabase(const Node *p_node) {\n  Q_ASSERT(sameNotebook(p_node));\n  getDatabaseAccess()->removeNode(p_node);\n}\n\nbool VXNotebookConfigMgr::sameNotebook(const Node *p_node) const {\n  return p_node ? p_node->getNotebook() == getNotebook() : true;\n}\n\nvoid VXNotebookConfigMgr::updateNodeVisual(Node *p_node, const NodeVisual &p_visual) {\n  Q_ASSERT(sameNotebook(p_node));\n\n  p_node->setVisual(p_visual);\n\n  if (p_node->isRoot()) {\n    return;\n  }\n\n  saveNode(p_node);\n}\n"
  },
  {
    "path": "src/core/notebookconfigmgr/vxnotebookconfigmgr.h",
    "content": "#ifndef VXNOTEBOOKCONFIGMGR_H\n#define VXNOTEBOOKCONFIGMGR_H\n\n#include \"bundlenotebookconfigmgr.h\"\n\n#include <QDateTime>\n#include <QRegExp>\n#include <QVector>\n\n#include <core/global.h>\n\nclass QJsonObject;\n\nnamespace vnotex {\nnamespace vx_node_config {\nstruct NodeFileConfig;\nstruct NodeFolderConfig;\nstruct NodeConfig;\n} // namespace vx_node_config\n\nclass NotebookDatabaseAccess;\n\n// Config manager for VNoteX's bundle notebook.\nclass VXNotebookConfigMgr : public BundleNotebookConfigMgr {\n  Q_OBJECT\npublic:\n  VXNotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend,\n                      QObject *p_parent = nullptr);\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getDisplayName() const Q_DECL_OVERRIDE;\n\n  QString getDescription() const Q_DECL_OVERRIDE;\n\n  void createEmptySkeleton(const NotebookParameters &p_paras) Q_DECL_OVERRIDE;\n\n  QSharedPointer<Node> loadRootNode() Q_DECL_OVERRIDE;\n\n  void loadNode(Node *p_node) Q_DECL_OVERRIDE;\n  void saveNode(const Node *p_node) Q_DECL_OVERRIDE;\n\n  void renameNode(Node *p_node, const QString &p_name) Q_DECL_OVERRIDE;\n\n  QSharedPointer<Node> newNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                               const QString &p_content) Q_DECL_OVERRIDE;\n\n  QSharedPointer<Node> addAsNode(Node *p_parent, Node::Flags p_flags, const QString &p_name,\n                                 const NodeParameters &p_paras) Q_DECL_OVERRIDE;\n\n  QSharedPointer<Node> copyAsNode(Node *p_parent, Node::Flags p_flags,\n                                  const QString &p_path) Q_DECL_OVERRIDE;\n\n  QSharedPointer<Node> loadNodeByPath(const QSharedPointer<Node> &p_root,\n                                      const QString &p_relativePath) Q_DECL_OVERRIDE;\n\n  QSharedPointer<Node> copyNodeAsChildOf(const QSharedPointer<Node> &p_src, Node *p_dest,\n                                         bool p_move) Q_DECL_OVERRIDE;\n\n  void removeNode(const QSharedPointer<Node> &p_node, bool p_force = false,\n                  bool p_configOnly = false) Q_DECL_OVERRIDE;\n\n  void removeNodeToFolder(const QSharedPointer<Node> &p_node,\n                          const QString &p_destFolder) Q_DECL_OVERRIDE;\n\n  bool isBuiltInFile(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE;\n\n  bool isBuiltInFolder(const Node *p_node, const QString &p_name) const Q_DECL_OVERRIDE;\n\n  QString fetchNodeImageFolderPath(Node *p_node);\n\n  QString fetchNodeAttachmentFolderPath(Node *p_node) Q_DECL_OVERRIDE;\n\n  QVector<QSharedPointer<ExternalNode>> fetchExternalChildren(Node *p_node) const Q_DECL_OVERRIDE;\n\n  bool checkNodeExists(Node *p_node) Q_DECL_OVERRIDE;\n\n  QStringList scanAndImportExternalFiles(Node *p_node) Q_DECL_OVERRIDE;\n\n  void updateNodeVisual(Node *p_node, const NodeVisual &p_visual) Q_DECL_OVERRIDE;\n\nprivate:\n  void createEmptyRootNode();\n\n  QSharedPointer<vx_node_config::NodeConfig> readNodeConfig(const QString &p_path) const;\n  void writeNodeConfig(const QString &p_path, const vx_node_config::NodeConfig &p_config) const;\n\n  void writeNodeConfig(const Node *p_node);\n\n  QSharedPointer<Node> nodeConfigToNode(const vx_node_config::NodeConfig &p_config,\n                                        const QString &p_name, Node *p_parent = nullptr);\n\n  void loadFolderNode(Node *p_node, const vx_node_config::NodeConfig &p_config);\n\n  QSharedPointer<vx_node_config::NodeConfig> nodeToNodeConfig(const Node *p_node) const;\n\n  QSharedPointer<Node> newFileNode(Node *p_parent, const QString &p_name, const QString &p_content,\n                                   bool p_create, const NodeParameters &p_paras);\n\n  QSharedPointer<Node> newFolderNode(Node *p_parent, const QString &p_name, bool p_create,\n                                     const NodeParameters &p_paras);\n\n  QString getNodeConfigFilePath(const Node *p_node) const;\n\n  void addChildNode(Node *p_parent, const QSharedPointer<Node> &p_child) const;\n\n  QSharedPointer<Node> copyNodeAsChildOf(const QSharedPointer<Node> &p_src, Node *p_dest,\n                                         bool p_move, bool p_updateDatabase);\n\n  QSharedPointer<Node> copyFileNodeAsChildOf(const QSharedPointer<Node> &p_src, Node *p_dest,\n                                             bool p_move, bool p_updateDatabase);\n\n  QSharedPointer<Node> copyFolderNodeAsChildOf(const QSharedPointer<Node> &p_src, Node *p_dest,\n                                               bool p_move, bool p_updateDatabase);\n\n  QSharedPointer<Node> copyFileAsChildOf(const QString &p_srcPath, Node *p_dest);\n\n  QSharedPointer<Node> copyFolderAsChildOf(const QString &p_srcPath, Node *p_dest);\n\n  void removeFilesOfNode(Node *p_node, bool p_force);\n\n  void markNodeReadOnly(Node *p_node) const;\n\n  void removeLegacyRecycleBinNode(const QSharedPointer<Node> &p_root);\n\n  // Generate node attachment folder.\n  // @p_folderName: suggested folder name if not empty, may be renamed due to conflicts.\n  // Return the attachment folder path.\n  QString fetchNodeAttachmentFolder(const QString &p_nodePath, QString &p_folderName);\n\n  void inheritNodeFlags(const Node *p_node, Node *p_child) const;\n\n  bool isExcludedFromExternalNode(const QString &p_name) const;\n\n  void removeNode(const QSharedPointer<Node> &p_node, bool p_force, bool p_configOnly,\n                  bool p_updateDatabase);\n\n  NotebookDatabaseAccess *getDatabaseAccess() const;\n\n  void updateNodeInDatabase(Node *p_node);\n\n  void ensureNodeInDatabase(Node *p_node);\n\n  void addNodeToDatabase(Node *p_node);\n\n  bool nodeExistsInDatabase(const Node *p_node);\n\n  void removeNodeFromDatabase(const Node *p_node);\n\n  bool sameNotebook(const Node *p_node) const;\n\n  void removeFolderNodeToFolder(const QSharedPointer<Node> &p_node, const QString &p_destFolder);\n\n  void removeFileNodeToFolder(const QSharedPointer<Node> &p_node, const QString &p_destFolder);\n\n  void copyFilesOfFileNode(const QSharedPointer<Node> &p_node, const QString &p_destFolder,\n                           QString &p_destFilePath, QString &p_attachmentFolder);\n\n  static bool isLikelyImageFolder(const QString &p_dirPath);\n\n  static bool s_initialized;\n\n  static QVector<QRegExp> s_externalNodeExcludePatterns;\n\n  // Name of the node's config file.\n  static const QString c_nodeConfigName;\n};\n} // namespace vnotex\n\n#endif // VXNOTEBOOKCONFIGMGR_H\n"
  },
  {
    "path": "src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp",
    "content": "#include \"vxnotebookconfigmgrfactory.h\"\n\n#include <QObject>\n\n#include \"../notebookbackend/inotebookbackend.h\"\n#include \"vxnotebookconfigmgr.h\"\n\nusing namespace vnotex;\n\nconst QString VXNotebookConfigMgrFactory::c_name = QStringLiteral(\"vx.vnotex\");\n\nconst QString VXNotebookConfigMgrFactory::c_displayName =\n    QObject::tr(\"VNoteX Notebook Configuration\");\n\nconst QString VXNotebookConfigMgrFactory::c_description =\n    QObject::tr(\"Built-in VNoteX notebook configuration\");\n\nVXNotebookConfigMgrFactory::VXNotebookConfigMgrFactory() {}\n\nQString VXNotebookConfigMgrFactory::getName() const { return c_name; }\n\nQString VXNotebookConfigMgrFactory::getDisplayName() const { return c_displayName; }\n\nQString VXNotebookConfigMgrFactory::getDescription() const { return c_description; }\n\nQSharedPointer<INotebookConfigMgr> VXNotebookConfigMgrFactory::createNotebookConfigMgr(\n    const QSharedPointer<INotebookBackend> &p_backend) {\n  return QSharedPointer<VXNotebookConfigMgr>::create(p_backend);\n}\n"
  },
  {
    "path": "src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.h",
    "content": "#ifndef VXNOTEBOOKCONFIGMGRFACTORY_H\n#define VXNOTEBOOKCONFIGMGRFACTORY_H\n\n#include \"inotebookconfigmgrfactory.h\"\n\nnamespace vnotex {\nclass VXNotebookConfigMgrFactory : public INotebookConfigMgrFactory {\npublic:\n  VXNotebookConfigMgrFactory();\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getDisplayName() const Q_DECL_OVERRIDE;\n\n  QString getDescription() const Q_DECL_OVERRIDE;\n\n  QSharedPointer<INotebookConfigMgr>\n  createNotebookConfigMgr(const QSharedPointer<INotebookBackend> &p_backend) Q_DECL_OVERRIDE;\n\n  static const QString c_name;\n\n  static const QString c_displayName;\n\n  static const QString c_description;\n};\n} // namespace vnotex\n\n#endif // VXNOTEBOOKCONFIGMGRFACTORY_H\n"
  },
  {
    "path": "src/core/notebookmgr.cpp",
    "content": "#include \"notebookmgr.h\"\n\n#include \"configmgr.h\"\n#include \"exception.h\"\n#include <notebook/bundlenotebookfactory.h>\n#include <notebook/notebook.h>\n#include <notebook/notebookparameters.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <notebookbackend/localnotebookbackendfactory.h>\n#include <notebookconfigmgr/inotebookconfigmgr.h>\n#include <notebookconfigmgr/vxnotebookconfigmgrfactory.h>\n#include <utils/pathutils.h>\n#include <versioncontroller/dummyversioncontrollerfactory.h>\n#include <versioncontroller/iversioncontroller.h>\n\nusing namespace vnotex;\n\nNotebookMgr::NotebookMgr(QObject *p_parent)\n    : QObject(p_parent), m_currentNotebookId(Notebook::InvalidId) {}\n\nvoid NotebookMgr::close() {\n  m_notebooks.clear();\n  m_currentNotebookId = -1;\n}\n\nvoid NotebookMgr::init() {\n  initVersionControllerServer();\n\n  initConfigMgrServer();\n\n  initBackendServer();\n\n  initNotebookServer();\n}\n\nvoid NotebookMgr::initVersionControllerServer() {\n  m_versionControllerServer.reset(new NameBasedServer<IVersionControllerFactory>);\n\n  // Dummy Version Controller.\n  auto dummyFactory = QSharedPointer<DummyVersionControllerFactory>::create();\n  m_versionControllerServer->registerItem(dummyFactory->getName(), dummyFactory);\n}\n\nvoid NotebookMgr::initConfigMgrServer() {\n  m_configMgrServer.reset(new NameBasedServer<INotebookConfigMgrFactory>);\n\n  // VX Notebook Config Manager.\n  auto vxFactory = QSharedPointer<VXNotebookConfigMgrFactory>::create();\n  m_configMgrServer->registerItem(vxFactory->getName(), vxFactory);\n}\n\nvoid NotebookMgr::initBackendServer() {\n  m_backendServer.reset(new NameBasedServer<INotebookBackendFactory>);\n\n  // Local Notebook Backend.\n  auto localFactory = QSharedPointer<LocalNotebookBackendFactory>::create();\n  m_backendServer->registerItem(localFactory->getName(), localFactory);\n}\n\nvoid NotebookMgr::initNotebookServer() {\n  m_notebookServer.reset(new NameBasedServer<INotebookFactory>);\n\n  // Bundle Notebook.\n  auto bundleFacotry = QSharedPointer<BundleNotebookFactory>::create();\n  m_notebookServer->registerItem(bundleFacotry->getName(), bundleFacotry);\n}\n\nQSharedPointer<INotebookFactory> NotebookMgr::getBundleNotebookFactory() const {\n  return m_notebookServer->getItem(QStringLiteral(\"bundle.vnotex\"));\n}\n\nQList<QSharedPointer<INotebookFactory>> NotebookMgr::getAllNotebookFactories() const {\n  return m_notebookServer->getAllItems();\n}\n\nQList<QSharedPointer<IVersionControllerFactory>>\nNotebookMgr::getAllVersionControllerFactories() const {\n  return m_versionControllerServer->getAllItems();\n}\n\nQList<QSharedPointer<INotebookConfigMgrFactory>>\nNotebookMgr::getAllNotebookConfigMgrFactories() const {\n  return m_configMgrServer->getAllItems();\n}\n\nQList<QSharedPointer<INotebookBackendFactory>> NotebookMgr::getAllNotebookBackendFactories() const {\n  return m_backendServer->getAllItems();\n}\n\nQSharedPointer<INotebookBackend>\nNotebookMgr::createNotebookBackend(const QString &p_backendName,\n                                   const QString &p_rootFolderPath) const {\n  auto factory = m_backendServer->getItem(p_backendName);\n  if (factory) {\n    return factory->createNotebookBackend(p_rootFolderPath);\n  } else {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"failed to find notebook backend factory %1\").arg(p_backendName));\n  }\n\n  return nullptr;\n}\n\nQSharedPointer<IVersionController>\nNotebookMgr::createVersionController(const QString &p_controllerName) const {\n  auto factory = m_versionControllerServer->getItem(p_controllerName);\n  if (factory) {\n    return factory->createVersionController();\n  } else {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"failed to find version controller factory %1\").arg(p_controllerName));\n  }\n\n  return nullptr;\n}\n\nQSharedPointer<INotebookConfigMgr>\nNotebookMgr::createNotebookConfigMgr(const QString &p_mgrName,\n                                     const QSharedPointer<INotebookBackend> &p_backend) const {\n  auto factory = m_configMgrServer->getItem(p_mgrName);\n  if (factory) {\n    return factory->createNotebookConfigMgr(p_backend);\n  } else {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"failed to find notebook config manager factory %1\").arg(p_mgrName));\n  }\n\n  return nullptr;\n}\n\nvoid NotebookMgr::loadNotebooks() {\n  readNotebooksFromConfig();\n\n  loadCurrentNotebookId();\n}\n\nstatic SessionConfig &getSessionConfig() { return ConfigMgr::getInst().getSessionConfig(); }\n\nvoid NotebookMgr::loadCurrentNotebookId() {\n  auto &rootFolderPath = getSessionConfig().getCurrentNotebookRootFolderPath();\n  auto notebook = findNotebookByRootFolderPath(rootFolderPath);\n  if (notebook) {\n    m_currentNotebookId = notebook->getId();\n  } else {\n    m_currentNotebookId = Notebook::InvalidId;\n  }\n\n  emit currentNotebookChanged(notebook);\n}\n\nQSharedPointer<Notebook>\nNotebookMgr::newNotebook(const QSharedPointer<NotebookParameters> &p_parameters) {\n  auto factory = m_notebookServer->getItem(p_parameters->m_type);\n  if (!factory) {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"failed to find notebook factory %1\").arg(p_parameters->m_type));\n  }\n\n  auto notebook = factory->newNotebook(*p_parameters);\n  addNotebook(notebook);\n\n  saveNotebooksToConfig();\n\n  emit notebooksUpdated();\n\n  setCurrentNotebook(notebook->getId());\n\n  return notebook;\n}\n\nvoid NotebookMgr::importNotebook(const QSharedPointer<Notebook> &p_notebook) {\n  Q_ASSERT(p_notebook);\n  if (m_notebooks.indexOf(p_notebook) != -1) {\n    return;\n  }\n\n  addNotebook(p_notebook);\n\n  saveNotebooksToConfig();\n\n  emit notebooksUpdated();\n\n  setCurrentNotebook(p_notebook->getId());\n}\n\nstatic SessionConfig::NotebookItem\nnotebookToSessionConfig(const QSharedPointer<const Notebook> &p_notebook) {\n  SessionConfig::NotebookItem item;\n  item.m_type = p_notebook->getType();\n  item.m_rootFolderPath = p_notebook->getRootFolderPath();\n  item.m_backend = p_notebook->getBackend()->getName();\n  return item;\n}\n\nvoid NotebookMgr::saveNotebooksToConfig() const {\n  QVector<SessionConfig::NotebookItem> items;\n  items.reserve(m_notebooks.size());\n  for (auto &nb : m_notebooks) {\n    items.push_back(notebookToSessionConfig(nb));\n  }\n\n  getSessionConfig().setNotebooks(items);\n}\n\nvoid NotebookMgr::readNotebooksFromConfig() {\n  Q_ASSERT(m_notebooks.isEmpty());\n  auto items = getSessionConfig().getNotebooks();\n  for (auto &item : items) {\n    try {\n      auto nb = readNotebookFromConfig(item);\n      addNotebook(nb);\n    } catch (Exception &p_e) {\n      qCritical(\"failed to read notebook (%s) from config (%s)\",\n                item.m_rootFolderPath.toStdString().c_str(), p_e.what());\n      m_notebooksFailedToLoad.push_back(item.m_rootFolderPath);\n    }\n  }\n\n  emit notebooksUpdated();\n}\n\nQSharedPointer<Notebook>\nNotebookMgr::readNotebookFromConfig(const SessionConfig::NotebookItem &p_item) {\n  auto factory = m_notebookServer->getItem(p_item.m_type);\n  if (!factory) {\n    Exception::throwOne(Exception::Type::InvalidArgument,\n                        QStringLiteral(\"failed to find notebook factory %1\").arg(p_item.m_type));\n  }\n\n  auto backend = createNotebookBackend(p_item.m_backend, p_item.m_rootFolderPath);\n\n  auto notebook = factory->createNotebook(*this, p_item.m_rootFolderPath, backend);\n  return notebook;\n}\n\nconst QVector<QSharedPointer<Notebook>> &NotebookMgr::getNotebooks() const { return m_notebooks; }\n\nID NotebookMgr::getCurrentNotebookId() const { return m_currentNotebookId; }\n\nQSharedPointer<Notebook> NotebookMgr::getCurrentNotebook() const {\n  return findNotebookById(m_currentNotebookId);\n}\n\nvoid NotebookMgr::setCurrentNotebook(ID p_notebookId) {\n  auto lastId = m_currentNotebookId;\n  m_currentNotebookId = p_notebookId;\n  auto nb = findNotebookById(p_notebookId);\n  if (!nb) {\n    m_currentNotebookId = Notebook::InvalidId;\n  }\n\n  if (lastId != m_currentNotebookId) {\n    emit currentNotebookChanged(nb);\n  }\n\n  getSessionConfig().setCurrentNotebookRootFolderPath(nb ? nb->getRootFolderPath() : \"\");\n}\n\nQSharedPointer<Notebook>\nNotebookMgr::findNotebookByRootFolderPath(const QString &p_rootFolderPath) const {\n  for (auto &nb : m_notebooks) {\n    if (PathUtils::areSamePaths(nb->getRootFolderPath(), p_rootFolderPath)) {\n      return nb;\n    }\n  }\n\n  return nullptr;\n}\n\nQSharedPointer<Notebook> NotebookMgr::findNotebookById(ID p_id) const {\n  for (auto &nb : m_notebooks) {\n    if (nb->getId() == p_id) {\n      return nb;\n    }\n  }\n\n  return nullptr;\n}\n\nvoid NotebookMgr::closeNotebook(ID p_id) {\n  auto it =\n      std::find_if(m_notebooks.begin(), m_notebooks.end(),\n                   [p_id](const QSharedPointer<Notebook> &p_nb) { return p_nb->getId() == p_id; });\n  if (it == m_notebooks.end()) {\n    qWarning() << \"failed to find notebook of given id to close\" << p_id;\n    return;\n  }\n\n  auto notebookToClose = *it;\n  emit notebookAboutToClose(notebookToClose.data());\n\n  m_notebooks.erase(it);\n\n  saveNotebooksToConfig();\n\n  emit notebooksUpdated();\n  setCurrentNotebookAfterUpdate();\n\n  qInfo() << QStringLiteral(\"notebook %1 (%2) is closed\")\n                 .arg(notebookToClose->getName(), notebookToClose->getRootFolderPath());\n}\n\nvoid NotebookMgr::removeNotebook(ID p_id) {\n  auto it =\n      std::find_if(m_notebooks.begin(), m_notebooks.end(),\n                   [p_id](const QSharedPointer<Notebook> &p_nb) { return p_nb->getId() == p_id; });\n  if (it == m_notebooks.end()) {\n    qWarning() << \"failed to find notebook of given id to remove\" << p_id;\n    return;\n  }\n\n  auto nbToRemove = *it;\n  emit notebookAboutToRemove(nbToRemove.data());\n\n  m_notebooks.erase(it);\n\n  saveNotebooksToConfig();\n\n  emit notebooksUpdated();\n  setCurrentNotebookAfterUpdate();\n\n  try {\n    nbToRemove->remove();\n  } catch (Exception &p_e) {\n    qWarning() << QStringLiteral(\"failed to remove notebook %1 (%2) (%3)\")\n                      .arg(nbToRemove->getName(), nbToRemove->getRootFolderPath(), p_e.what());\n    throw;\n  }\n\n  qInfo() << QStringLiteral(\"notebook %1 (%2) is removed\")\n                 .arg(nbToRemove->getName(), nbToRemove->getRootFolderPath());\n}\n\nvoid NotebookMgr::setCurrentNotebookAfterUpdate() {\n  if (!m_notebooks.isEmpty()) {\n    setCurrentNotebook(m_notebooks.first()->getId());\n  } else {\n    setCurrentNotebook(Notebook::InvalidId);\n  }\n}\n\nvoid NotebookMgr::addNotebook(const QSharedPointer<Notebook> &p_notebook) {\n  p_notebook->initialize();\n  m_notebooks.push_back(p_notebook);\n  auto notebook = p_notebook.data();\n  connect(p_notebook.data(), &Notebook::updated, this,\n          [this, notebook]() { emit notebookUpdated(notebook); });\n}\n\nQSharedPointer<Node> NotebookMgr::loadNodeByPath(const QString &p_path) {\n  for (const auto &nb : m_notebooks) {\n    auto node = nb->loadNodeByPath(p_path);\n    if (node) {\n      return node;\n    }\n  }\n\n  return nullptr;\n}\n\nconst QStringList &NotebookMgr::getNotebooksFailedToLoad() const { return m_notebooksFailedToLoad; }\n\nvoid NotebookMgr::clearNotebooksFailedToLoad() {\n  m_notebooksFailedToLoad.clear();\n  saveNotebooksToConfig();\n}\n"
  },
  {
    "path": "src/core/notebookmgr.h",
    "content": "#ifndef NOTEBOOKMGR_H\n#define NOTEBOOKMGR_H\n\n#include <QList>\n#include <QObject>\n#include <QScopedPointer>\n#include <QVector>\n\n#include \"global.h\"\n#include \"namebasedserver.h\"\n#include \"noncopyable.h\"\n#include \"notebook/notebook.h\"\n#include \"sessionconfig.h\"\n\nnamespace vnotex {\nclass IVersionController;\nclass IVersionControllerFactory;\nclass INotebookConfigMgr;\nclass INotebookConfigMgrFactory;\nclass INotebookBackend;\nclass INotebookBackendFactory;\nclass INotebookFactory;\nclass NotebookParameters;\nclass Node;\n\nclass NotebookMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  explicit NotebookMgr(QObject *p_parent = nullptr);\n\n  void init();\n\n  void close();\n\n  QSharedPointer<INotebookFactory> getBundleNotebookFactory() const;\n\n  QList<QSharedPointer<INotebookFactory>> getAllNotebookFactories() const;\n\n  QList<QSharedPointer<IVersionControllerFactory>> getAllVersionControllerFactories() const;\n\n  QList<QSharedPointer<INotebookConfigMgrFactory>> getAllNotebookConfigMgrFactories() const;\n\n  QList<QSharedPointer<INotebookBackendFactory>> getAllNotebookBackendFactories() const;\n\n  QSharedPointer<INotebookBackend> createNotebookBackend(const QString &p_backendName,\n                                                         const QString &p_rootFolderPath) const;\n\n  QSharedPointer<IVersionController> createVersionController(const QString &p_controllerName) const;\n\n  QSharedPointer<INotebookConfigMgr>\n  createNotebookConfigMgr(const QString &p_mgrName,\n                          const QSharedPointer<INotebookBackend> &p_backend) const;\n\n  void loadNotebooks();\n\n  QSharedPointer<Notebook> newNotebook(const QSharedPointer<NotebookParameters> &p_parameters);\n\n  void importNotebook(const QSharedPointer<Notebook> &p_notebook);\n\n  const QVector<QSharedPointer<Notebook>> &getNotebooks() const;\n\n  ID getCurrentNotebookId() const;\n\n  QSharedPointer<Notebook> getCurrentNotebook() const;\n\n  // Find the notebook with the same directory as root folder.\n  QSharedPointer<Notebook> findNotebookByRootFolderPath(const QString &p_rootFolderPath) const;\n\n  QSharedPointer<Notebook> findNotebookById(ID p_id) const;\n\n  void closeNotebook(ID p_id);\n\n  void removeNotebook(ID p_id);\n\n  // Try to load @p_path as a node if it is within one notebook.\n  QSharedPointer<Node> loadNodeByPath(const QString &p_path);\n\n  const QStringList &getNotebooksFailedToLoad() const;\n\n  void clearNotebooksFailedToLoad();\n\npublic slots:\n  void setCurrentNotebook(ID p_notebookId);\n\nsignals:\n  void notebooksUpdated();\n\n  void notebookUpdated(const Notebook *p_notebook);\n\n  void notebookAboutToClose(const Notebook *p_notebook);\n\n  void notebookAboutToRemove(const Notebook *p_notebook);\n\n  void currentNotebookChanged(const QSharedPointer<Notebook> &p_notebook);\n\nprivate:\n  void initVersionControllerServer();\n\n  void initConfigMgrServer();\n\n  void initBackendServer();\n\n  void initNotebookServer();\n\n  void saveNotebooksToConfig() const;\n  void readNotebooksFromConfig();\n\n  void loadCurrentNotebookId();\n\n  QSharedPointer<Notebook> readNotebookFromConfig(const SessionConfig::NotebookItem &p_item);\n\n  void setCurrentNotebookAfterUpdate();\n\n  void addNotebook(const QSharedPointer<Notebook> &p_notebook);\n\n  QScopedPointer<NameBasedServer<IVersionControllerFactory>> m_versionControllerServer;\n\n  QScopedPointer<NameBasedServer<INotebookConfigMgrFactory>> m_configMgrServer;\n\n  QScopedPointer<NameBasedServer<INotebookBackendFactory>> m_backendServer;\n\n  QScopedPointer<NameBasedServer<INotebookFactory>> m_notebookServer;\n\n  QVector<QSharedPointer<Notebook>> m_notebooks;\n\n  ID m_currentNotebookId = 0;\n\n  QStringList m_notebooksFailedToLoad;\n};\n} // namespace vnotex\n\n#endif // NOTEBOOKMGR_H\n"
  },
  {
    "path": "src/core/pdfviewerconfig.cpp",
    "content": "#include \"pdfviewerconfig.h\"\n\n#include \"mainconfig.h\"\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#define READBOOL(key) readBool(appObj, userObj, (key))\n#define READINT(key) readInt(appObj, userObj, (key))\n\nusing namespace vnotex;\n\nPdfViewerConfig::PdfViewerConfig(ConfigMgr *p_mgr, IConfig *p_topConfig)\n    : IConfig(p_mgr, p_topConfig) {\n  m_sessionName = QStringLiteral(\"pdf_viewer\");\n}\n\nvoid PdfViewerConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(m_sessionName).toObject();\n  const auto userObj = p_user.value(m_sessionName).toObject();\n\n  loadViewerResource(appObj, userObj);\n}\n\nQJsonObject PdfViewerConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"viewer_resource\")] = saveViewerResource();\n  return obj;\n}\n\nvoid PdfViewerConfig::loadViewerResource(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const QString name(QStringLiteral(\"viewer_resource\"));\n\n  if (MainConfig::isVersionChanged()) {\n    bool needOverride = p_app[QStringLiteral(\"override_viewer_resource\")].toBool();\n    if (needOverride) {\n      qInfo() << \"override \\\"viewer_resource\\\" in user configuration due to version change\";\n      m_viewerResource.init(p_app[name].toObject());\n      return;\n    }\n  }\n\n  if (p_user.contains(name)) {\n    m_viewerResource.init(p_user[name].toObject());\n  } else {\n    m_viewerResource.init(p_app[name].toObject());\n  }\n}\n\nQJsonObject PdfViewerConfig::saveViewerResource() const { return m_viewerResource.toJson(); }\n\nconst WebResource &PdfViewerConfig::getViewerResource() const { return m_viewerResource; }\n"
  },
  {
    "path": "src/core/pdfviewerconfig.h",
    "content": "#ifndef PDFVIEWERCONFIG_H\n#define PDFVIEWERCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"webresource.h\"\n\nnamespace vnotex {\nclass PdfViewerConfig : public IConfig {\npublic:\n  PdfViewerConfig(ConfigMgr *p_mgr, IConfig *p_topConfig);\n\n  void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  const WebResource &getViewerResource() const;\n\nprivate:\n  friend class MainConfig;\n\n  void loadViewerResource(const QJsonObject &p_app, const QJsonObject &p_user);\n  QJsonObject saveViewerResource() const;\n\n  WebResource m_viewerResource;\n};\n} // namespace vnotex\n\n#endif // PDFVIEWERCONFIG_H\n"
  },
  {
    "path": "src/core/quickaccesshelper.cpp",
    "content": "#include \"quickaccesshelper.h\"\n\n#include \"configmgr.h\"\n#include \"sessionconfig.h\"\n\nusing namespace vnotex;\n\nvoid QuickAccessHelper::pinToQuickAccess(const QStringList &p_files) {\n  if (p_files.isEmpty()) {\n    return;\n  }\n\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  sessionConfig.tryCorrectQuickAccessFiles();\n  auto qaFiles = sessionConfig.getQuickAccessFiles();\n  qaFiles.append(p_files);\n  qaFiles.removeDuplicates();\n  sessionConfig.setQuickAccessFiles(qaFiles);\n}\n"
  },
  {
    "path": "src/core/quickaccesshelper.h",
    "content": "#ifndef QUICKACCESSHELPER_H\n#define QUICKACCESSHELPER_H\n\n#include <QStringList>\n\nnamespace vnotex {\nclass QuickAccessHelper {\npublic:\n  QuickAccessHelper() = delete;\n\n  static void pinToQuickAccess(const QStringList &p_files);\n};\n} // namespace vnotex\n\n#endif // QUICKACCESSHELPER_H\n"
  },
  {
    "path": "src/core/sessionconfig.cpp",
    "content": "#include \"sessionconfig.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QJsonArray>\n#include <QJsonDocument>\n\n#include <core/notebookmgr.h>\n#include <core/vnotex.h>\n\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/vxurlutils.h>\n\n#include \"configmgr.h\"\n#include \"historymgr.h\"\n#include \"mainconfig.h\"\n\nusing namespace vnotex;\n\nbool SessionConfig::NotebookItem::operator==(const NotebookItem &p_other) const {\n  return m_type == p_other.m_type && m_rootFolderPath == p_other.m_rootFolderPath &&\n         m_backend == p_other.m_backend;\n}\n\nvoid SessionConfig::NotebookItem::fromJson(const QJsonObject &p_jobj) {\n  m_type = p_jobj[QStringLiteral(\"type\")].toString();\n  m_rootFolderPath = p_jobj[QStringLiteral(\"root_folder\")].toString();\n  m_backend = p_jobj[QStringLiteral(\"backend\")].toString();\n}\n\nQJsonObject SessionConfig::NotebookItem::toJson() const {\n  QJsonObject jobj;\n\n  jobj[QStringLiteral(\"type\")] = m_type;\n  jobj[QStringLiteral(\"root_folder\")] = m_rootFolderPath;\n  jobj[QStringLiteral(\"backend\")] = m_backend;\n\n  return jobj;\n}\n\nbool SessionConfig::QuickNoteScheme::operator==(const QuickNoteScheme &p_other) const {\n  return m_name == p_other.m_name && m_folderPath == p_other.m_folderPath &&\n         m_noteName == p_other.m_noteName && m_template == p_other.m_template;\n}\n\nvoid SessionConfig::QuickNoteScheme::fromJson(const QJsonObject &p_jobj) {\n  m_name = p_jobj[QStringLiteral(\"name\")].toString();\n  m_folderPath = p_jobj[QStringLiteral(\"folder_path\")].toString();\n  m_noteName = p_jobj[QStringLiteral(\"note_name\")].toString();\n  m_template = p_jobj[QStringLiteral(\"template\")].toString();\n}\n\nQJsonObject SessionConfig::QuickNoteScheme::toJson() const {\n  QJsonObject jobj;\n\n  jobj[QStringLiteral(\"name\")] = m_name;\n  jobj[QStringLiteral(\"folder_path\")] = m_folderPath;\n  jobj[QStringLiteral(\"note_name\")] = m_noteName;\n  jobj[QStringLiteral(\"template\")] = m_template;\n\n  return jobj;\n}\n\nvoid SessionConfig::ExternalProgram::fromJson(const QJsonObject &p_jobj) {\n  m_name = p_jobj[QStringLiteral(\"name\")].toString();\n  m_command = p_jobj[QStringLiteral(\"command\")].toString();\n  m_shortcut = p_jobj[QStringLiteral(\"shortcut\")].toString();\n}\n\nQJsonObject SessionConfig::ExternalProgram::toJson() const {\n  QJsonObject jobj;\n\n  jobj[QStringLiteral(\"name\")] = m_name;\n  jobj[QStringLiteral(\"command\")] = m_command;\n  jobj[QStringLiteral(\"shortcut\")] = m_shortcut;\n\n  return jobj;\n}\n\nQString SessionConfig::ExternalProgram::fetchCommand(const QString &p_file) const {\n  auto command(m_command);\n  command.replace(QStringLiteral(\"%1\"), QStringLiteral(\"\\\"%1\\\"\").arg(p_file));\n  return command;\n}\n\nSessionConfig::SessionConfig(ConfigMgr *p_mgr) : IConfig(p_mgr, nullptr) {}\n\nSessionConfig::~SessionConfig() {}\n\nvoid SessionConfig::init() {\n  auto mgr = getMgr();\n  auto sessionSettings = mgr->getSettings(ConfigMgr::Source::Session);\n  const auto &sessionJobj = sessionSettings->getJson();\n\n  loadCore(sessionJobj);\n\n  loadStateAndGeometry(sessionJobj);\n\n  loadExportOption(sessionJobj);\n\n  m_searchOption.fromJson(sessionJobj[QStringLiteral(\"search_option\")].toObject());\n\n  m_viewAreaSession = readByteArray(sessionJobj, QStringLiteral(\"viewarea_session\"));\n\n  m_notebookExplorerSession =\n      readByteArray(sessionJobj, QStringLiteral(\"notebook_explorer_session\"));\n\n  loadExternalPrograms(sessionJobj);\n\n  loadNotebooks(sessionJobj);\n\n  loadHistory(sessionJobj);\n\n  loadQuickNoteSchemes(sessionJobj);\n\n  if (MainConfig::isVersionChanged()) {\n    doVersionSpecificOverride();\n  }\n}\n\nvoid SessionConfig::loadCore(const QJsonObject &p_session) {\n  const auto coreObj = p_session.value(QStringLiteral(\"core\")).toObject();\n  m_newNotebookDefaultRootFolderPath =\n      readString(coreObj, QStringLiteral(\"new_notebook_default_root_folder_path\"));\n  if (m_newNotebookDefaultRootFolderPath.isEmpty()) {\n    m_newNotebookDefaultRootFolderPath = QDir::homePath();\n  }\n\n  m_currentNotebookRootFolderPath =\n      readString(coreObj, QStringLiteral(\"current_notebook_root_folder_path\"));\n\n  {\n    auto option = readString(coreObj, QStringLiteral(\"opengl\"));\n    m_openGL = stringToOpenGL(option);\n  }\n\n  if (!isUndefinedKey(coreObj, QStringLiteral(\"system_title_bar\"))) {\n    m_systemTitleBarEnabled = readBool(coreObj, QStringLiteral(\"system_title_bar\"));\n  } else {\n    m_systemTitleBarEnabled = true;\n  }\n\n  if (!isUndefinedKey(coreObj, QStringLiteral(\"minimize_to_system_tray\"))) {\n    m_minimizeToSystemTray = readBool(coreObj, QStringLiteral(\"minimize_to_system_tray\")) ? 1 : 0;\n  }\n\n  m_flashPage = readString(coreObj, QStringLiteral(\"flash_page\"));\n\n  m_quickAccessFiles = readStringList(coreObj, QStringLiteral(\"quick_access\"));\n\n  m_externalMediaDefaultPath = readString(coreObj, QStringLiteral(\"external_media_default_path\"));\n  if (m_externalMediaDefaultPath.isEmpty()) {\n    m_externalMediaDefaultPath = QDir::homePath();\n  }\n}\n\nQJsonObject SessionConfig::saveCore() const {\n  QJsonObject coreObj;\n  coreObj[QStringLiteral(\"new_notebook_default_root_folder_path\")] =\n      m_newNotebookDefaultRootFolderPath;\n  coreObj[QStringLiteral(\"current_notebook_root_folder_path\")] = m_currentNotebookRootFolderPath;\n  coreObj[QStringLiteral(\"opengl\")] = openGLToString(m_openGL);\n  coreObj[QStringLiteral(\"system_title_bar\")] = m_systemTitleBarEnabled;\n  if (m_minimizeToSystemTray != -1) {\n    coreObj[QStringLiteral(\"minimize_to_system_tray\")] = m_minimizeToSystemTray > 0;\n  }\n  coreObj[QStringLiteral(\"flash_page\")] = m_flashPage;\n  writeStringList(coreObj, QStringLiteral(\"quick_access\"), m_quickAccessFiles);\n  coreObj[QStringLiteral(\"external_media_default_path\")] = m_externalMediaDefaultPath;\n  return coreObj;\n}\n\nconst QString &SessionConfig::getNewNotebookDefaultRootFolderPath() const {\n  return m_newNotebookDefaultRootFolderPath;\n}\n\nvoid SessionConfig::setNewNotebookDefaultRootFolderPath(const QString &p_path) {\n  updateConfig(m_newNotebookDefaultRootFolderPath, p_path, this);\n}\n\nconst QString &SessionConfig::getExternalMediaDefaultPath() const {\n  return m_externalMediaDefaultPath;\n}\n\nvoid SessionConfig::setExternalMediaDefaultPath(const QString &p_path) {\n  updateConfig(m_externalMediaDefaultPath, p_path, this);\n}\n\nconst QVector<SessionConfig::NotebookItem> &SessionConfig::getNotebooks() const {\n  return m_notebooks;\n}\n\nvoid SessionConfig::setNotebooks(const QVector<SessionConfig::NotebookItem> &p_notebooks) {\n  updateConfig(m_notebooks, p_notebooks, this);\n}\n\nvoid SessionConfig::loadNotebooks(const QJsonObject &p_session) {\n  const auto notebooksJson = p_session.value(QStringLiteral(\"notebooks\")).toArray();\n  m_notebooks.resize(notebooksJson.size());\n  for (int i = 0; i < notebooksJson.size(); ++i) {\n    m_notebooks[i].fromJson(notebooksJson[i].toObject());\n  }\n}\n\nQJsonArray SessionConfig::saveNotebooks() const {\n  QJsonArray nbArray;\n  for (const auto &nb : m_notebooks) {\n    nbArray.append(nb.toJson());\n  }\n  return nbArray;\n}\n\nconst QString &SessionConfig::getCurrentNotebookRootFolderPath() const {\n  return m_currentNotebookRootFolderPath;\n}\n\nvoid SessionConfig::setCurrentNotebookRootFolderPath(const QString &p_path) {\n  updateConfig(m_currentNotebookRootFolderPath, p_path, this);\n}\n\nvoid SessionConfig::writeToSettings() const { getMgr()->writeSessionSettings(toJson()); }\n\nQJsonObject SessionConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"core\")] = saveCore();\n  obj[QStringLiteral(\"notebooks\")] = saveNotebooks();\n  obj[QStringLiteral(\"state_geometry\")] = saveStateAndGeometry();\n  obj[QStringLiteral(\"export\")] = saveExportOption();\n  obj[QStringLiteral(\"search_option\")] = m_searchOption.toJson();\n  writeByteArray(obj, QStringLiteral(\"viewarea_session\"), m_viewAreaSession);\n  writeByteArray(obj, QStringLiteral(\"notebook_explorer_session\"), m_notebookExplorerSession);\n  obj[QStringLiteral(\"external_programs\")] = saveExternalPrograms();\n  obj[QStringLiteral(\"history\")] = saveHistory();\n  obj[QStringLiteral(\"quick_note_schemes\")] = saveQuickNoteSchemes();\n  return obj;\n}\n\nQJsonObject SessionConfig::saveStateAndGeometry() const {\n  QJsonObject obj;\n  writeByteArray(obj, QStringLiteral(\"main_window_state\"), m_mainWindowStateGeometry.m_mainState);\n  writeByteArray(obj, QStringLiteral(\"main_window_geometry\"),\n                 m_mainWindowStateGeometry.m_mainGeometry);\n  writeStringList(obj, QStringLiteral(\"visible_docks_before_expand\"),\n                  m_mainWindowStateGeometry.m_visibleDocksBeforeExpand);\n  writeByteArray(obj, QStringLiteral(\"tag_explorer_state\"),\n                 m_mainWindowStateGeometry.m_tagExplorerState);\n  writeByteArray(obj, QStringLiteral(\"notebook_explorer_state\"),\n                 m_mainWindowStateGeometry.m_notebookExplorerState);\n  writeByteArray(obj, QStringLiteral(\"location_list_state\"),\n                 m_mainWindowStateGeometry.m_locationListState);\n  return obj;\n}\n\nSessionConfig::MainWindowStateGeometry SessionConfig::getMainWindowStateGeometry() const {\n  return m_mainWindowStateGeometry;\n}\n\nvoid SessionConfig::setMainWindowStateGeometry(\n    const SessionConfig::MainWindowStateGeometry &p_state) {\n  updateConfig(m_mainWindowStateGeometry, p_state, this);\n}\n\nSessionConfig::OpenGL SessionConfig::getOpenGLAtBootstrap() {\n  auto userConfigFile = ConfigMgr::locateSessionConfigFilePathAtBootstrap();\n  if (!userConfigFile.isEmpty()) {\n    auto bytes = FileUtils::readFile(userConfigFile);\n    auto obj = QJsonDocument::fromJson(bytes).object();\n    auto coreObj = obj.value(QStringLiteral(\"core\")).toObject();\n    auto str = coreObj.value(QStringLiteral(\"opengl\")).toString();\n    return stringToOpenGL(str);\n  }\n\n  return OpenGL::None;\n}\n\nSessionConfig::OpenGL SessionConfig::getOpenGL() const { return m_openGL; }\n\nvoid SessionConfig::setOpenGL(OpenGL p_option) { updateConfig(m_openGL, p_option, this); }\n\nQString SessionConfig::openGLToString(OpenGL p_option) {\n  switch (p_option) {\n  case OpenGL::Desktop:\n    return QStringLiteral(\"desktop\");\n\n  case OpenGL::Angle:\n    return QStringLiteral(\"angle\");\n\n  case OpenGL::Software:\n    return QStringLiteral(\"software\");\n\n  default:\n    return QStringLiteral(\"none\");\n  }\n}\n\nSessionConfig::OpenGL SessionConfig::stringToOpenGL(const QString &p_str) {\n  auto option = p_str.toLower();\n  if (option == QStringLiteral(\"software\")) {\n    return OpenGL::Software;\n  } else if (option == QStringLiteral(\"desktop\")) {\n    return OpenGL::Desktop;\n  } else if (option == QStringLiteral(\"angle\")) {\n    return OpenGL::Angle;\n  } else {\n    return OpenGL::None;\n  }\n}\n\nbool SessionConfig::getSystemTitleBarEnabled() const { return m_systemTitleBarEnabled; }\n\nvoid SessionConfig::setSystemTitleBarEnabled(bool p_enabled) {\n  updateConfig(m_systemTitleBarEnabled, p_enabled, this);\n}\n\nint SessionConfig::getMinimizeToSystemTray() const { return m_minimizeToSystemTray; }\n\nvoid SessionConfig::setMinimizeToSystemTray(bool p_enabled) {\n  updateConfig(m_minimizeToSystemTray, p_enabled ? 1 : 0, this);\n}\n\nvoid SessionConfig::doVersionSpecificOverride() {\n  // In a new version, we may want to change one value by force.\n  // SHOULD set the in memory variable only, or will override the notebook list.\n}\n\nconst ExportOption &SessionConfig::getExportOption() const { return m_exportOption; }\n\nvoid SessionConfig::setExportOption(const ExportOption &p_option) {\n  updateConfig(m_exportOption, p_option, this);\n}\n\nconst QVector<ExportCustomOption> &SessionConfig::getCustomExportOptions() const {\n  return m_customExportOptions;\n}\n\nvoid SessionConfig::setCustomExportOptions(const QVector<ExportCustomOption> &p_options) {\n  updateConfig(m_customExportOptions, p_options, this);\n}\n\nconst SearchOption &SessionConfig::getSearchOption() const { return m_searchOption; }\n\nvoid SessionConfig::setSearchOption(const SearchOption &p_option) {\n  updateConfig(m_searchOption, p_option, this);\n}\n\nvoid SessionConfig::loadStateAndGeometry(const QJsonObject &p_session) {\n  const auto obj = p_session.value(QStringLiteral(\"state_geometry\")).toObject();\n  m_mainWindowStateGeometry.m_mainState = readByteArray(obj, QStringLiteral(\"main_window_state\"));\n  m_mainWindowStateGeometry.m_mainGeometry =\n      readByteArray(obj, QStringLiteral(\"main_window_geometry\"));\n  m_mainWindowStateGeometry.m_visibleDocksBeforeExpand =\n      readStringList(obj, QStringLiteral(\"visible_docks_before_expand\"));\n  m_mainWindowStateGeometry.m_tagExplorerState =\n      readByteArray(obj, QStringLiteral(\"tag_explorer_state\"));\n  m_mainWindowStateGeometry.m_notebookExplorerState =\n      readByteArray(obj, QStringLiteral(\"notebook_explorer_state\"));\n  m_mainWindowStateGeometry.m_locationListState =\n      readByteArray(obj, QStringLiteral(\"location_list_state\"));\n}\n\nQByteArray SessionConfig::getViewAreaSessionAndClear() {\n  QByteArray bytes;\n  m_viewAreaSession.swap(bytes);\n  return bytes;\n}\n\nvoid SessionConfig::setViewAreaSession(const QByteArray &p_bytes) {\n  updateConfigWithoutCheck(m_viewAreaSession, p_bytes, this);\n}\n\nQByteArray SessionConfig::getNotebookExplorerSessionAndClear() {\n  QByteArray bytes;\n  m_notebookExplorerSession.swap(bytes);\n  return bytes;\n}\n\nvoid SessionConfig::setNotebookExplorerSession(const QByteArray &p_bytes) {\n  updateConfigWithoutCheck(m_notebookExplorerSession, p_bytes, this);\n}\n\nconst QString &SessionConfig::getFlashPage() const { return m_flashPage; }\n\nvoid SessionConfig::setFlashPage(const QString &p_file) { updateConfig(m_flashPage, p_file, this); }\n\nconst QStringList &SessionConfig::getQuickAccessFiles() const { return m_quickAccessFiles; }\n\nvoid SessionConfig::setQuickAccessFiles(const QStringList &p_files) {\n  QStringList files;\n  for (const auto &file : p_files) {\n    auto fi = file.trimmed();\n    if (!fi.isEmpty()) {\n      files << fi;\n    }\n  }\n  updateConfig(m_quickAccessFiles, files, this);\n  if (tryCorrectQuickAccessFiles()) {\n    update();\n  }\n}\n\nvoid SessionConfig::removeQuickAccessFile(const QString &p_file) {\n  if (m_quickAccessFiles.removeOne(p_file)) {\n    tryCorrectQuickAccessFiles();\n    update();\n  }\n}\n\nbool SessionConfig::tryCorrectQuickAccessFiles(void) {\n  auto notebook = VNoteX::getInst().getNotebookMgr().getCurrentNotebook();\n  if (!notebook) {\n    return false;\n  }\n\n  QStringList oldResult = m_quickAccessFiles;\n  QStringList newResult;\n  for (const auto &file : m_quickAccessFiles) {\n    auto fi = file.trimmed();\n    if (fi.isEmpty()) {\n      continue;\n    }\n    // check absolute path\n    if (!file.startsWith(\"#\")) {\n      if (QFileInfo(file).exists()) {\n        newResult << file;\n      }\n      continue;\n    }\n\n    // update VxURL if file path is changed\n    const QString rootPath = notebook->getRootFolderAbsolutePath();\n    QString signature = VxUrlUtils::getSignatureFromVxURL(file);\n    QString oldFilePath = VxUrlUtils::getFilePathFromVxURL(file);\n\n    // Start searching for the file from oldFilePath until reaching rootPath\n    QString newFilePath;\n    QString currentDir = PathUtils::parentDirPath(oldFilePath);\n    while (true) {\n      // make sure currentDir is under rootPath\n      if (!currentDir.startsWith(rootPath)) {\n        break;\n      }\n\n      newFilePath = VxUrlUtils::getFilePathFromSignature(currentDir, signature);\n      if (!newFilePath.isEmpty()) {\n        break;\n      }\n      // invalid path\n      if (currentDir.isEmpty() || QDir(currentDir).isRoot()) {\n        break;\n      }\n\n      currentDir = PathUtils::parentDirPath(currentDir);\n    }\n\n    // file deleted\n    if (newFilePath.isEmpty()) {\n      continue;\n    }\n    // file path not changed\n    if (oldFilePath == newFilePath) {\n      newResult << file;\n      continue;\n    }\n    // file path changed, but not exists\n    if (!QFileInfo(newFilePath).exists()) {\n      continue;\n    }\n    QString newVxURL = VxUrlUtils::generateVxURL(signature, newFilePath);\n    newResult << newVxURL;\n  }\n  newResult.removeDuplicates();\n  m_quickAccessFiles = newResult;\n\n  if (oldResult != newResult) {\n    return true;\n  }\n  return false;\n}\n\nvoid SessionConfig::loadExternalPrograms(const QJsonObject &p_session) {\n  const auto arr = p_session.value(QStringLiteral(\"external_programs\")).toArray();\n  m_externalPrograms.resize(arr.size());\n  for (int i = 0; i < arr.size(); ++i) {\n    m_externalPrograms[i].fromJson(arr[i].toObject());\n  }\n}\n\nQJsonArray SessionConfig::saveExternalPrograms() const {\n  QJsonArray arr;\n  for (const auto &pro : m_externalPrograms) {\n    arr.append(pro.toJson());\n  }\n  return arr;\n}\n\nvoid SessionConfig::loadQuickNoteSchemes(const QJsonObject &p_session) {\n  const auto arr = p_session.value(QStringLiteral(\"quick_note_schemes\")).toArray();\n  m_quickNoteSchemes.resize(arr.size());\n  for (int i = 0; i < arr.size(); ++i) {\n    m_quickNoteSchemes[i].fromJson(arr[i].toObject());\n  }\n}\n\nQJsonArray SessionConfig::saveQuickNoteSchemes() const {\n  QJsonArray arr;\n  for (const auto &scheme : m_quickNoteSchemes) {\n    arr.append(scheme.toJson());\n  }\n  return arr;\n}\n\nconst QVector<SessionConfig::ExternalProgram> &SessionConfig::getExternalPrograms() const {\n  return m_externalPrograms;\n}\n\nconst SessionConfig::ExternalProgram *\nSessionConfig::findExternalProgram(const QString &p_name) const {\n  for (const auto &pro : m_externalPrograms) {\n    if (pro.m_name == p_name) {\n      return &pro;\n    }\n  }\n  return nullptr;\n}\n\nconst QVector<HistoryItem> &SessionConfig::getHistory() const { return m_history; }\n\nvoid SessionConfig::addHistory(const HistoryItem &p_item) {\n  HistoryMgr::insertHistoryItem(m_history, p_item);\n  update();\n}\n\nvoid SessionConfig::removeHistory(const QString &p_itemPath) {\n  HistoryMgr::removeHistoryItem(m_history, p_itemPath);\n  update();\n}\n\nvoid SessionConfig::clearHistory() {\n  m_history.clear();\n  update();\n}\n\nvoid SessionConfig::loadHistory(const QJsonObject &p_session) {\n  auto arr = p_session[QStringLiteral(\"history\")].toArray();\n  m_history.resize(arr.size());\n  for (int i = 0; i < arr.size(); ++i) {\n    m_history[i].fromJson(arr[i].toObject());\n  }\n}\n\nQJsonArray SessionConfig::saveHistory() const {\n  QJsonArray arr;\n  for (const auto &item : m_history) {\n    arr.append(item.toJson());\n  }\n  return arr;\n}\n\nvoid SessionConfig::loadExportOption(const QJsonObject &p_session) {\n  auto exportObj = p_session[QStringLiteral(\"export\")].toObject();\n\n  m_exportOption.fromJson(exportObj[QStringLiteral(\"export_option\")].toObject());\n\n  auto customArr = exportObj[QStringLiteral(\"custom_options\")].toArray();\n  m_customExportOptions.resize(customArr.size());\n  for (int i = 0; i < customArr.size(); ++i) {\n    m_customExportOptions[i].fromJson(customArr[i].toObject());\n  }\n}\n\nQJsonObject SessionConfig::saveExportOption() const {\n  QJsonObject obj;\n\n  obj[QStringLiteral(\"export_option\")] = m_exportOption.toJson();\n\n  QJsonArray customArr;\n  for (int i = 0; i < m_customExportOptions.size(); ++i) {\n    customArr.push_back(m_customExportOptions[i].toJson());\n  }\n  obj[QStringLiteral(\"custom_options\")] = customArr;\n\n  return obj;\n}\n\nconst QVector<SessionConfig::QuickNoteScheme> &SessionConfig::getQuickNoteSchemes() const {\n  return m_quickNoteSchemes;\n}\n\nvoid SessionConfig::setQuickNoteSchemes(const QVector<QuickNoteScheme> &p_schemes) {\n  updateConfig(m_quickNoteSchemes, p_schemes, this);\n}\n"
  },
  {
    "path": "src/core/sessionconfig.h",
    "content": "#ifndef SESSIONCONFIG_H\n#define SESSIONCONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QString>\n#include <QVector>\n\n#include \"historyitem.h\"\n#include <export/exportdata.h>\n#include <search/searchdata.h>\n\nnamespace vnotex {\nclass SessionConfig : public IConfig {\npublic:\n  struct NotebookItem {\n    NotebookItem() = default;\n\n    bool operator==(const NotebookItem &p_other) const;\n\n    void fromJson(const QJsonObject &p_jobj);\n\n    QJsonObject toJson() const;\n\n    QString m_type;\n    QString m_rootFolderPath;\n    QString m_backend;\n  };\n\n  struct MainWindowStateGeometry {\n    bool operator==(const MainWindowStateGeometry &p_other) const {\n      return m_mainState == p_other.m_mainState && m_mainGeometry == p_other.m_mainGeometry &&\n             m_visibleDocksBeforeExpand == p_other.m_visibleDocksBeforeExpand &&\n             m_tagExplorerState == p_other.m_tagExplorerState &&\n             m_notebookExplorerState == p_other.m_notebookExplorerState &&\n             m_locationListState == p_other.m_locationListState;\n    }\n\n    QByteArray m_mainState;\n\n    QByteArray m_mainGeometry;\n\n    QStringList m_visibleDocksBeforeExpand;\n\n    QByteArray m_tagExplorerState;\n\n    QByteArray m_notebookExplorerState;\n\n    QByteArray m_locationListState;\n  };\n\n  struct QuickNoteScheme {\n    bool operator==(const QuickNoteScheme &p_other) const;\n\n    void fromJson(const QJsonObject &p_jobj);\n\n    QJsonObject toJson() const;\n\n    QString m_name;\n\n    // Where to create the quick note.\n    QString m_folderPath;\n\n    // Name of the quick note. Snippet is supported.\n    QString m_noteName;\n\n    QString m_template;\n  };\n\n  enum OpenGL { None, Desktop, Angle, Software };\n\n  struct ExternalProgram {\n    void fromJson(const QJsonObject &p_jobj);\n\n    QJsonObject toJson() const;\n\n    QString fetchCommand(const QString &p_file) const;\n\n    QString m_name;\n\n    // %1: the file paths to open.\n    QString m_command;\n\n    QString m_shortcut;\n  };\n\n  explicit SessionConfig(ConfigMgr *p_mgr);\n\n  ~SessionConfig();\n\n  void init() Q_DECL_OVERRIDE;\n\n  const QString &getNewNotebookDefaultRootFolderPath() const;\n  void setNewNotebookDefaultRootFolderPath(const QString &p_path);\n\n  const QString &getExternalMediaDefaultPath() const;\n  void setExternalMediaDefaultPath(const QString &p_path);\n\n  const QString &getCurrentNotebookRootFolderPath() const;\n  void setCurrentNotebookRootFolderPath(const QString &p_path);\n\n  const QVector<SessionConfig::NotebookItem> &getNotebooks() const;\n  void setNotebooks(const QVector<SessionConfig::NotebookItem> &p_notebooks);\n\n  void writeToSettings() const Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  SessionConfig::MainWindowStateGeometry getMainWindowStateGeometry() const;\n  void setMainWindowStateGeometry(const SessionConfig::MainWindowStateGeometry &p_state);\n\n  OpenGL getOpenGL() const;\n  void setOpenGL(OpenGL p_option);\n\n  bool getSystemTitleBarEnabled() const;\n  void setSystemTitleBarEnabled(bool p_enabled);\n\n  static OpenGL getOpenGLAtBootstrap();\n\n  static QString openGLToString(OpenGL p_option);\n  static OpenGL stringToOpenGL(const QString &p_str);\n\n  int getMinimizeToSystemTray() const;\n  void setMinimizeToSystemTray(bool p_enabled);\n\n  const ExportOption &getExportOption() const;\n  void setExportOption(const ExportOption &p_option);\n\n  const QVector<ExportCustomOption> &getCustomExportOptions() const;\n  void setCustomExportOptions(const QVector<ExportCustomOption> &p_options);\n\n  const SearchOption &getSearchOption() const;\n  void setSearchOption(const SearchOption &p_option);\n\n  QByteArray getViewAreaSessionAndClear();\n  void setViewAreaSession(const QByteArray &p_bytes);\n\n  QByteArray getNotebookExplorerSessionAndClear();\n  void setNotebookExplorerSession(const QByteArray &p_bytes);\n\n  const QString &getFlashPage() const;\n  void setFlashPage(const QString &p_file);\n\n  const QStringList &getQuickAccessFiles() const;\n  void setQuickAccessFiles(const QStringList &p_files);\n\n  void removeQuickAccessFile(const QString &p_file);\n  bool tryCorrectQuickAccessFiles(void);\n\n  const QVector<ExternalProgram> &getExternalPrograms() const;\n  const ExternalProgram *findExternalProgram(const QString &p_name) const;\n\n  const QVector<HistoryItem> &getHistory() const;\n  void addHistory(const HistoryItem &p_item);\n  void removeHistory(const QString &p_itemPath);\n  void clearHistory();\n\n  const QVector<QuickNoteScheme> &getQuickNoteSchemes() const;\n  void setQuickNoteSchemes(const QVector<QuickNoteScheme> &p_schemes);\n\nprivate:\n  void loadCore(const QJsonObject &p_session);\n\n  QJsonObject saveCore() const;\n\n  void loadNotebooks(const QJsonObject &p_session);\n\n  QJsonArray saveNotebooks() const;\n\n  void loadStateAndGeometry(const QJsonObject &p_session);\n\n  QJsonObject saveStateAndGeometry() const;\n\n  void loadExternalPrograms(const QJsonObject &p_session);\n\n  QJsonArray saveExternalPrograms() const;\n\n  void loadQuickNoteSchemes(const QJsonObject &p_session);\n\n  QJsonArray saveQuickNoteSchemes() const;\n\n  void doVersionSpecificOverride();\n\n  void loadHistory(const QJsonObject &p_session);\n\n  QJsonArray saveHistory() const;\n\n  void loadExportOption(const QJsonObject &p_session);\n\n  QJsonObject saveExportOption() const;\n\n  QString m_newNotebookDefaultRootFolderPath;\n\n  // Use root folder to identify a notebook uniquely.\n  QString m_currentNotebookRootFolderPath;\n\n  QVector<SessionConfig::NotebookItem> m_notebooks;\n\n  MainWindowStateGeometry m_mainWindowStateGeometry;\n\n  OpenGL m_openGL = OpenGL::None;\n\n  // Whether use system's title bar or not.\n  bool m_systemTitleBarEnabled = true;\n\n  // Whether to minimize to tray.\n  // -1 for prompting for user;\n  // 0 for disabling minimizing to system tray;\n  // 1 for enabling minimizing to system tray.\n  int m_minimizeToSystemTray = -1;\n\n  ExportOption m_exportOption;\n\n  QVector<ExportCustomOption> m_customExportOptions;\n\n  SearchOption m_searchOption;\n\n  QByteArray m_viewAreaSession;\n\n  QByteArray m_notebookExplorerSession;\n\n  QString m_flashPage;\n\n  QStringList m_quickAccessFiles;\n\n  QVector<ExternalProgram> m_externalPrograms;\n\n  QVector<HistoryItem> m_history;\n\n  // Default folder path to open for external media like images and files.\n  QString m_externalMediaDefaultPath;\n\n  QVector<QuickNoteScheme> m_quickNoteSchemes;\n};\n} // namespace vnotex\n\n#endif // SESSIONCONFIG_H\n"
  },
  {
    "path": "src/core/singleinstanceguard.cpp",
    "content": "#include \"singleinstanceguard.h\"\n\n#include <QByteArray>\n#include <QDataStream>\n#include <QDebug>\n#include <QLocalServer>\n#include <QLocalSocket>\n\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nconst QString SingleInstanceGuard::c_serverName = \"vnote\";\n\nconst QChar SingleInstanceGuard::c_stringListSeparator = '>';\n\nSingleInstanceGuard::~SingleInstanceGuard() { exit(); }\n\nbool SingleInstanceGuard::tryRun() {\n  Q_ASSERT(!m_online);\n\n  // On Windows, multiple servers on the same name are allowed.\n  m_client = tryConnect();\n  if (m_client) {\n    // There is one server running and we are now connected, so we could not continue.\n    return false;\n  }\n\n  m_server = tryListen();\n  if (m_server) {\n    // We are the lucky one.\n    qInfo() << \"guard succeeds to run\";\n  } else {\n    // We still allow the guard to run. There maybe a bug need to fix.\n    qWarning() << \"failed to connect to an existing instance or establish a new local server\";\n  }\n\n  setupServer();\n\n  m_online = true;\n  return true;\n}\n\nvoid SingleInstanceGuard::requestOpenFiles(const QStringList &p_files) {\n  if (p_files.isEmpty()) {\n    return;\n  }\n\n  Q_ASSERT(!m_online);\n  if (!m_client || m_client->state() != QLocalSocket::ConnectedState) {\n    qWarning() << \"failed to request open files\" << m_client->errorString();\n    return;\n  }\n\n  sendRequest(m_client.data(), OpCode::OpenFiles, p_files.join(c_stringListSeparator));\n}\n\nvoid SingleInstanceGuard::requestShow() {\n  Q_ASSERT(!m_online);\n  if (!m_client || m_client->state() != QLocalSocket::ConnectedState) {\n    qWarning() << \"failed to request show\" << m_client->errorString();\n    return;\n  }\n\n  sendRequest(m_client.data(), OpCode::Show, QString());\n}\n\nvoid SingleInstanceGuard::exit() {\n  m_online = false;\n\n  if (m_client) {\n    m_client->disconnectFromServer();\n    m_client.clear();\n  }\n\n  if (m_server) {\n    m_server->close();\n    m_server.clear();\n  }\n}\n\nQSharedPointer<QLocalSocket> SingleInstanceGuard::tryConnect() {\n  auto socket = QSharedPointer<QLocalSocket>::create();\n  socket->connectToServer(c_serverName);\n  if (socket->waitForConnected(200)) {\n    // Connected.\n    qDebug() << \"socket connected to server\" << c_serverName;\n    return socket;\n  } else {\n    qDebug() << \"socket connect timeout\";\n    return nullptr;\n  }\n}\n\nQSharedPointer<QLocalServer> SingleInstanceGuard::tryListen() {\n  auto server = QSharedPointer<QLocalServer>::create();\n  bool ret = server->listen(c_serverName);\n  if (!ret && server->serverError() == QAbstractSocket::AddressInUseError) {\n    // On Unix, a previous crash may leave a server running.\n    // Clean up and try again.\n    QLocalServer::removeServer(c_serverName);\n    ret = server->listen(c_serverName);\n  }\n\n  if (ret) {\n    qDebug() << \"local server listening on\" << c_serverName;\n    return server;\n  } else {\n    qDebug() << \"failed to start local server\";\n    return nullptr;\n  }\n}\n\nvoid SingleInstanceGuard::setupServer() {\n  if (!m_server) {\n    return;\n  }\n\n  connect(m_server.data(), &QLocalServer::newConnection, this, [this]() {\n    auto socket = m_server->nextPendingConnection();\n    if (socket) {\n      qInfo() << \"local server receives new connect\" << socket;\n      if (m_ongoingConnect) {\n        qWarning() << \"drop the connection since there is one ongoing connect\";\n        socket->disconnectFromServer();\n        socket->deleteLater();\n        return;\n      }\n\n      m_ongoingConnect = true;\n      m_command.clear();\n\n      connect(socket, &QLocalSocket::disconnected, this, [this, socket]() {\n        Q_ASSERT(m_ongoingConnect);\n        socket->deleteLater();\n        m_ongoingConnect = false;\n      });\n      connect(socket, &QLocalSocket::readyRead, this, [this, socket]() { receiveCommand(socket); });\n    }\n  });\n}\n\nvoid SingleInstanceGuard::receiveCommand(QLocalSocket *p_socket) {\n  QDataStream inStream;\n  inStream.setDevice(p_socket);\n  inStream.setVersion(QDataStream::Qt_5_12);\n\n  while (p_socket->bytesAvailable() > 0) {\n    if (m_command.m_opCode == OpCode::Null) {\n      // Relies on the fact that QDataStream serializes a quint32 into\n      // sizeof(quint32) bytes.\n      if (p_socket->bytesAvailable() < (int)sizeof(quint32) * 2) {\n        return;\n      }\n\n      quint32 opCode = 0;\n      inStream >> opCode;\n      m_command.m_opCode = static_cast<OpCode>(opCode);\n      inStream >> m_command.m_size;\n    }\n\n    if (p_socket->bytesAvailable() < m_command.m_size) {\n      return;\n    }\n\n    qDebug() << \"op code\" << m_command.m_opCode << m_command.m_size << p_socket->bytesAvailable();\n\n    switch (m_command.m_opCode) {\n    case OpCode::Show:\n      Q_ASSERT(m_command.m_size == 0);\n      emit showRequested();\n      break;\n\n    case OpCode::OpenFiles: {\n      Q_ASSERT(m_command.m_size != 0);\n      QString payload;\n      inStream >> payload;\n      const auto files = payload.split(c_stringListSeparator);\n      emit openFilesRequested(files);\n      break;\n    }\n\n    default:\n      qWarning() << \"unknown op code\" << m_command.m_opCode;\n      m_command.clear();\n      return;\n    }\n\n    m_command.clear();\n  }\n}\n\nvoid SingleInstanceGuard::sendRequest(QLocalSocket *p_socket, OpCode p_code,\n                                      const QString &p_payload) {\n  QByteArray block;\n  QDataStream out(&block, QIODevice::WriteOnly);\n  out.setVersion(QDataStream::Qt_5_12);\n  out << static_cast<quint32>(p_code);\n  out << static_cast<quint32>(p_payload.size());\n  if (p_payload.size() > 0) {\n    out << p_payload;\n  }\n  p_socket->write(block);\n  if (p_socket->waitForBytesWritten(3000)) {\n    qDebug() << \"request sent\" << p_code << p_payload.size();\n  } else {\n    qWarning() << \"failed to send request\" << p_code;\n  }\n}\n"
  },
  {
    "path": "src/core/singleinstanceguard.h",
    "content": "#ifndef SINGLEINSTANCEGUARD_H\n#define SINGLEINSTANCEGUARD_H\n\n#include <QObject>\n#include <QSharedPointer>\n#include <QString>\n\nclass QLocalServer;\nclass QLocalSocket;\n\nnamespace vnotex {\nclass SingleInstanceGuard : public QObject {\n  Q_OBJECT\npublic:\n  SingleInstanceGuard() = default;\n\n  ~SingleInstanceGuard();\n\n  // Try to run. Return true on success.\n  bool tryRun();\n\n  // Server API.\npublic:\n  // A running instance requests to exit.\n  void exit();\n\n  // Clients API.\npublic:\n  void requestOpenFiles(const QStringList &p_files);\n\n  void requestShow();\n\nsignals:\n  void openFilesRequested(const QStringList &p_files);\n\n  void showRequested();\n\nprivate:\n  enum OpCode { Null = 0, Show, OpenFiles };\n\n  struct Command {\n    void clear() {\n      m_opCode = OpCode::Null;\n      m_size = 0;\n    }\n\n    OpCode m_opCode = OpCode::Null;\n    int m_size = 0;\n  };\n\n  QSharedPointer<QLocalSocket> tryConnect();\n\n  QSharedPointer<QLocalServer> tryListen();\n\n  void setupServer();\n\n  void receiveCommand(QLocalSocket *p_socket);\n\n  void sendRequest(QLocalSocket *p_socket, OpCode p_code, const QString &p_payload);\n\n  // Whether succeeded to run.\n  bool m_online = false;\n\n  QSharedPointer<QLocalSocket> m_client;\n\n  QSharedPointer<QLocalServer> m_server;\n\n  bool m_ongoingConnect = false;\n\n  Command m_command;\n\n  static const QString c_serverName;\n\n  static const QChar c_stringListSeparator;\n};\n} // namespace vnotex\n\n#endif // SINGLEINSTANCEGUARD_H\n"
  },
  {
    "path": "src/core/templatemgr.cpp",
    "content": "#include \"templatemgr.h\"\n\n#include <QDir>\n\n#include <utils/fileutils.h>\n\n#include \"configmgr.h\"\n\nusing namespace vnotex;\n\nQString TemplateMgr::getTemplateFolder() const {\n  return ConfigMgr::getInst().getUserTemplateFolder();\n}\n\nQStringList TemplateMgr::getTemplates() const {\n  QDir dir(getTemplateFolder());\n  dir.setFilter(QDir::Files | QDir::NoSymLinks);\n  return dir.entryList();\n}\n\nQString TemplateMgr::getTemplateFilePath(const QString &p_name) const {\n  if (p_name.isEmpty()) {\n    return QString();\n  }\n  return QDir(getTemplateFolder()).filePath(p_name);\n}\n\nQString TemplateMgr::getTemplateContent(const QString &p_name) const {\n  const auto filePath = getTemplateFilePath(p_name);\n  if (filePath.isEmpty()) {\n    return QString();\n  }\n  return FileUtils::readTextFile(filePath);\n}\n"
  },
  {
    "path": "src/core/templatemgr.h",
    "content": "#ifndef TEMPLATEMGR_H\n#define TEMPLATEMGR_H\n\n#include <QObject>\n#include <QStringList>\n\n#include \"noncopyable.h\"\n\nnamespace vnotex {\nclass TemplateMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  static TemplateMgr &getInst() {\n    static TemplateMgr inst;\n    return inst;\n  }\n\n  QString getTemplateFolder() const;\n\n  QStringList getTemplates() const;\n\n  QString getTemplateFilePath(const QString &p_name) const;\n\n  QString getTemplateContent(const QString &p_name) const;\n\nprivate:\n  TemplateMgr() = default;\n};\n} // namespace vnotex\n\n#endif // TEMPLATEMGR_H\n"
  },
  {
    "path": "src/core/texteditorconfig.cpp",
    "content": "#include \"texteditorconfig.h\"\n\nusing namespace vnotex;\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#define READBOOL(key) readBool(appObj, userObj, (key))\n#define READINT(key) readInt(appObj, userObj, (key))\n\nTextEditorConfig::TextEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig)\n    : IConfig(p_mgr, p_topConfig) {\n  m_sessionName = QStringLiteral(\"text_editor\");\n}\n\nvoid TextEditorConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(m_sessionName).toObject();\n  const auto userObj = p_user.value(m_sessionName).toObject();\n\n  {\n    auto lineNumber = READSTR(QStringLiteral(\"line_number\"));\n    m_lineNumberType = stringToLineNumberType(lineNumber);\n  }\n\n  m_textFoldingEnabled = READBOOL(QStringLiteral(\"text_folding\"));\n\n  {\n    auto inputMode = READSTR(QStringLiteral(\"input_mode\"));\n    m_inputMode = stringToInputMode(inputMode);\n  }\n\n  {\n    auto centerCursor = READSTR(QStringLiteral(\"center_cursor\"));\n    m_centerCursor = stringToCenterCursor(centerCursor);\n  }\n\n  {\n    auto wrapMode = READSTR(QStringLiteral(\"wrap_mode\"));\n    m_wrapMode = stringToWrapMode(wrapMode);\n  }\n\n  m_expandTab = READBOOL(QStringLiteral(\"expand_tab\"));\n\n  m_tabStopWidth = READINT(QStringLiteral(\"tab_stop_width\"));\n\n  m_highlightWhitespace = READBOOL(QStringLiteral(\"highlight_whitespace\"));\n\n  m_zoomDelta = READINT(QStringLiteral(\"zoom_delta\"));\n\n  m_spellCheckEnabled = READBOOL(QStringLiteral(\"spell_check\"));\n}\n\nQJsonObject TextEditorConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"line_number\")] = lineNumberTypeToString(m_lineNumberType);\n  obj[QStringLiteral(\"text_folding\")] = m_textFoldingEnabled;\n  obj[QStringLiteral(\"input_mode\")] = inputModeToString(m_inputMode);\n  obj[QStringLiteral(\"center_cursor\")] = centerCursorToString(m_centerCursor);\n  obj[QStringLiteral(\"wrap_mode\")] = wrapModeToString(m_wrapMode);\n  obj[QStringLiteral(\"expand_tab\")] = m_expandTab;\n  obj[QStringLiteral(\"tab_stop_width\")] = m_tabStopWidth;\n  obj[QStringLiteral(\"highlight_whitespace\")] = m_highlightWhitespace;\n  obj[QStringLiteral(\"zoom_delta\")] = m_zoomDelta;\n  obj[QStringLiteral(\"spell_check\")] = m_spellCheckEnabled;\n  return obj;\n}\n\nQString TextEditorConfig::lineNumberTypeToString(LineNumberType p_type) const {\n  switch (p_type) {\n  case LineNumberType::None:\n    return QStringLiteral(\"none\");\n\n  case LineNumberType::Relative:\n    return QStringLiteral(\"relative\");\n\n  default:\n    return QStringLiteral(\"absolute\");\n  }\n}\n\nTextEditorConfig::LineNumberType\nTextEditorConfig::stringToLineNumberType(const QString &p_str) const {\n  auto lineNumber = p_str.toLower();\n  if (lineNumber == QStringLiteral(\"none\")) {\n    return LineNumberType::None;\n  } else if (lineNumber == QStringLiteral(\"relative\")) {\n    return LineNumberType::Relative;\n  } else {\n    return LineNumberType::Absolute;\n  }\n}\n\nQString TextEditorConfig::inputModeToString(InputMode p_mode) const {\n  switch (p_mode) {\n  case InputMode::ViMode:\n    return QStringLiteral(\"vi\");\n\n  case InputMode::VscodeMode:\n    return QStringLiteral(\"vscode\");\n\n  default:\n    return QStringLiteral(\"normal\");\n  }\n}\n\nTextEditorConfig::InputMode TextEditorConfig::stringToInputMode(const QString &p_str) const {\n  auto inputMode = p_str.toLower();\n  if (inputMode == QStringLiteral(\"vi\")) {\n    return InputMode::ViMode;\n  } else if (inputMode == QStringLiteral(\"vscode\")) {\n    return InputMode::VscodeMode;\n  } else {\n    return InputMode::NormalMode;\n  }\n}\n\nQString TextEditorConfig::centerCursorToString(CenterCursor p_cursor) const {\n  switch (p_cursor) {\n  case CenterCursor::AlwaysCenter:\n    return QStringLiteral(\"always\");\n\n  case CenterCursor::CenterOnBottom:\n    return QStringLiteral(\"bottom\");\n\n  default:\n    return QStringLiteral(\"never\");\n  }\n}\n\nTextEditorConfig::CenterCursor TextEditorConfig::stringToCenterCursor(const QString &p_str) const {\n  auto centerCursor = p_str.toLower();\n  if (centerCursor == QStringLiteral(\"always\")) {\n    return CenterCursor::AlwaysCenter;\n  } else if (centerCursor == QStringLiteral(\"bottom\")) {\n    return CenterCursor::CenterOnBottom;\n  } else {\n    return CenterCursor::NeverCenter;\n  }\n}\n\nQString TextEditorConfig::wrapModeToString(WrapMode p_mode) const {\n  switch (p_mode) {\n  case WrapMode::NoWrap:\n    return QStringLiteral(\"none\");\n\n  case WrapMode::WrapAnywhere:\n    return QStringLiteral(\"anywhere\");\n\n  case WrapMode::WordWrapOrAnywhere:\n    return QStringLiteral(\"word_anywhere\");\n\n  default:\n    return QStringLiteral(\"word\");\n  }\n}\n\nTextEditorConfig::WrapMode TextEditorConfig::stringToWrapMode(const QString &p_str) const {\n  auto centerCursor = p_str.toLower();\n  if (centerCursor == QStringLiteral(\"none\")) {\n    return WrapMode::NoWrap;\n  } else if (centerCursor == QStringLiteral(\"anywhere\")) {\n    return WrapMode::WrapAnywhere;\n  } else if (centerCursor == QStringLiteral(\"word_anywhere\")) {\n    return WrapMode::WordWrapOrAnywhere;\n  } else {\n    return WrapMode::WordWrap;\n  }\n}\n\nTextEditorConfig::LineNumberType TextEditorConfig::getLineNumberType() const {\n  return m_lineNumberType;\n}\n\nvoid TextEditorConfig::setLineNumberType(TextEditorConfig::LineNumberType p_type) {\n  updateConfig(m_lineNumberType, p_type, this);\n}\n\nbool TextEditorConfig::getTextFoldingEnabled() const { return m_textFoldingEnabled; }\n\nvoid TextEditorConfig::setTextFoldingEnabled(bool p_enabled) {\n  updateConfig(m_textFoldingEnabled, p_enabled, this);\n}\n\nTextEditorConfig::InputMode TextEditorConfig::getInputMode() const { return m_inputMode; }\n\nvoid TextEditorConfig::setInputMode(TextEditorConfig::InputMode p_mode) {\n  updateConfig(m_inputMode, p_mode, this);\n}\n\nTextEditorConfig::CenterCursor TextEditorConfig::getCenterCursor() const { return m_centerCursor; }\n\nvoid TextEditorConfig::setCenterCursor(TextEditorConfig::CenterCursor p_centerCursor) {\n  updateConfig(m_centerCursor, p_centerCursor, this);\n}\n\nTextEditorConfig::WrapMode TextEditorConfig::getWrapMode() const { return m_wrapMode; }\n\nvoid TextEditorConfig::setWrapMode(TextEditorConfig::WrapMode p_mode) {\n  updateConfig(m_wrapMode, p_mode, this);\n}\n\nbool TextEditorConfig::getExpandTabEnabled() const { return m_expandTab; }\n\nvoid TextEditorConfig::setExpandTabEnabled(bool p_enabled) {\n  updateConfig(m_expandTab, p_enabled, this);\n}\n\nbool TextEditorConfig::getHighlightWhitespaceEnabled() const { return m_highlightWhitespace; }\n\nvoid TextEditorConfig::setHighlightWhitespaceEnabled(bool p_enabled) {\n  updateConfig(m_highlightWhitespace, p_enabled, this);\n}\n\nint TextEditorConfig::getTabStopWidth() const { return m_tabStopWidth; }\n\nvoid TextEditorConfig::setTabStopWidth(int p_width) { updateConfig(m_tabStopWidth, p_width, this); }\n\nint TextEditorConfig::getZoomDelta() const { return m_zoomDelta; }\n\nvoid TextEditorConfig::setZoomDelta(int p_delta) { updateConfig(m_zoomDelta, p_delta, this); }\n\nbool TextEditorConfig::isSpellCheckEnabled() const { return m_spellCheckEnabled; }\n\nvoid TextEditorConfig::setSpellCheckEnabled(bool p_enabled) {\n  updateConfig(m_spellCheckEnabled, p_enabled, this);\n}\n"
  },
  {
    "path": "src/core/texteditorconfig.h",
    "content": "#ifndef VNOTEX_TEXTEDITORCONFIG_H\n#define VNOTEX_TEXTEDITORCONFIG_H\n\n#include \"iconfig.h\"\n\nnamespace vnotex {\nclass MainConfig;\n\nclass TextEditorConfig : public IConfig {\npublic:\n  enum class LineNumberType { None, Absolute, Relative };\n\n  enum class InputMode { NormalMode, ViMode, VscodeMode };\n\n  enum class CenterCursor { NeverCenter, AlwaysCenter, CenterOnBottom };\n\n  enum class WrapMode { NoWrap, WordWrap, WrapAnywhere, WordWrapOrAnywhere };\n\n  TextEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig);\n\n  void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  TextEditorConfig::LineNumberType getLineNumberType() const;\n  void setLineNumberType(TextEditorConfig::LineNumberType p_type);\n\n  bool getTextFoldingEnabled() const;\n  void setTextFoldingEnabled(bool p_enabled);\n\n  TextEditorConfig::InputMode getInputMode() const;\n  void setInputMode(TextEditorConfig::InputMode p_mode);\n\n  TextEditorConfig::CenterCursor getCenterCursor() const;\n  void setCenterCursor(TextEditorConfig::CenterCursor p_centerCursor);\n\n  TextEditorConfig::WrapMode getWrapMode() const;\n  void setWrapMode(TextEditorConfig::WrapMode p_mode);\n\n  bool getExpandTabEnabled() const;\n  void setExpandTabEnabled(bool p_enabled);\n\n  int getTabStopWidth() const;\n  void setTabStopWidth(int p_width);\n\n  bool getHighlightWhitespaceEnabled() const;\n  void setHighlightWhitespaceEnabled(bool p_enabled);\n\n  int getZoomDelta() const;\n  void setZoomDelta(int p_delta);\n\n  bool isSpellCheckEnabled() const;\n  void setSpellCheckEnabled(bool p_enabled);\n\nprivate:\n  friend class MainConfig;\n\n  QString lineNumberTypeToString(LineNumberType p_type) const;\n  LineNumberType stringToLineNumberType(const QString &p_str) const;\n\n  QString inputModeToString(InputMode p_mode) const;\n  InputMode stringToInputMode(const QString &p_str) const;\n\n  QString centerCursorToString(CenterCursor p_cursor) const;\n  CenterCursor stringToCenterCursor(const QString &p_str) const;\n\n  QString wrapModeToString(WrapMode p_mode) const;\n  WrapMode stringToWrapMode(const QString &p_str) const;\n\n  LineNumberType m_lineNumberType = LineNumberType::Absolute;\n\n  bool m_textFoldingEnabled = true;\n\n  InputMode m_inputMode = InputMode::NormalMode;\n\n  CenterCursor m_centerCursor = CenterCursor::NeverCenter;\n\n  WrapMode m_wrapMode = WrapMode::WordWrapOrAnywhere;\n\n  bool m_expandTab = true;\n\n  int m_tabStopWidth = 4;\n\n  bool m_highlightWhitespace = false;\n\n  int m_zoomDelta = 0;\n\n  bool m_spellCheckEnabled = false;\n};\n} // namespace vnotex\n\n#endif // TEXTEDITORCONFIG_H\n"
  },
  {
    "path": "src/core/theme.cpp",
    "content": "#include \"theme.h\"\n\n#include <QApplication>\n#include <QDir>\n#include <QFileInfo>\n#include <QJsonDocument>\n#include <QRegularExpression>\n#include <QSettings>\n\n#include \"exception.h\"\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nTheme::Theme(const QString &p_themeFolderPath, const Metadata &p_metadata, const Palette &p_palette)\n    : m_themeFolderPath(p_themeFolderPath), m_metadata(p_metadata), m_palette(p_palette) {}\n\nQString vnotex::Theme::getThemeFolder() const { return m_themeFolderPath; }\n\nbool Theme::isValidThemeFolder(const QString &p_folder) {\n  QDir dir(p_folder);\n  if (!dir.exists()) {\n    qWarning() << \"theme folder does not exist\" << p_folder;\n    return false;\n  }\n\n  // The Palette file must exist.\n  auto file = getFileName(File::Palette);\n  if (!dir.exists(file)) {\n    qWarning() << \"Not a valid theme folder\" << p_folder;\n    return false;\n  }\n\n  return true;\n}\n\nQString Theme::getDisplayName(const QString &p_folder, const QString &p_locale) {\n  auto obj = readPaletteFile(p_folder);\n  const auto metaObj = obj[QStringLiteral(\"metadata\")].toObject();\n  QString prefix(\"display_name\");\n\n  if (!p_locale.isEmpty()) {\n    // Check full locale.\n    auto fullLocale = QStringLiteral(\"%1_%2\").arg(prefix, p_locale);\n    if (metaObj.contains(fullLocale)) {\n      return metaObj.value(fullLocale).toString();\n    }\n\n    auto shortLocale = QStringLiteral(\"%1_%2\").arg(prefix, p_locale.split('_')[0]);\n    if (metaObj.contains(shortLocale)) {\n      return metaObj.value(shortLocale).toString();\n    }\n  }\n\n  if (metaObj.contains(prefix)) {\n    return metaObj.value(prefix).toString();\n  }\n  return PathUtils::dirName(p_folder);\n}\n\nTheme *Theme::fromFolder(const QString &p_folder) {\n  Q_ASSERT(!p_folder.isEmpty());\n  auto obj = readPaletteFile(p_folder);\n  auto metadata = readMetadata(obj);\n  auto paletteObj = translatePalette(obj, metadata.m_backfillSystemPalette);\n  return new Theme(p_folder, metadata, paletteObj);\n}\n\nTheme::Metadata Theme::readMetadata(const Palette &p_obj) {\n  Metadata data;\n\n  const auto metaObj = p_obj[QStringLiteral(\"metadata\")].toObject();\n\n  data.m_revision = metaObj[QStringLiteral(\"revision\")].toInt();\n  data.m_editorHighlightTheme = metaObj[QStringLiteral(\"editor-highlight-theme\")].toString();\n  data.m_markdownEditorHighlightTheme =\n      metaObj[QStringLiteral(\"markdown-editor-highlight-theme\")].toString();\n  data.m_backfillSystemPalette = metaObj[QStringLiteral(\"backfill-system-palette\")].toBool(false);\n\n  return data;\n}\n\nQJsonObject Theme::backfillSystemPalette(QJsonObject p_obj) {\n  const auto qpalette = QApplication::palette();\n  // Active.\n  {\n    QJsonObject obj;\n    obj[\"window\"] = qpalette.color(QPalette::Active, QPalette::Window).name();\n    obj[\"window_text\"] = qpalette.color(QPalette::Active, QPalette::WindowText).name();\n    obj[\"base\"] = qpalette.color(QPalette::Active, QPalette::Base).name();\n    obj[\"alternate_base\"] = qpalette.color(QPalette::Active, QPalette::AlternateBase).name();\n    obj[\"text\"] = qpalette.color(QPalette::Active, QPalette::Text).name();\n    obj[\"button\"] = qpalette.color(QPalette::Active, QPalette::Button).name();\n    obj[\"button_text\"] = qpalette.color(QPalette::Active, QPalette::ButtonText).name();\n    obj[\"bright_text\"] = qpalette.color(QPalette::Active, QPalette::BrightText).name();\n    obj[\"light\"] = qpalette.color(QPalette::Active, QPalette::Light).name();\n    obj[\"midlight\"] = qpalette.color(QPalette::Active, QPalette::Midlight).name();\n    obj[\"dark\"] = qpalette.color(QPalette::Active, QPalette::Dark).name();\n    obj[\"highlight\"] = qpalette.color(QPalette::Active, QPalette::Highlight).name();\n    obj[\"highlighted_text\"] = qpalette.color(QPalette::Active, QPalette::HighlightedText).name();\n    obj[\"link\"] = qpalette.color(QPalette::Active, QPalette::Link).name();\n    obj[\"link_visited\"] = qpalette.color(QPalette::Active, QPalette::LinkVisited).name();\n\n    p_obj[\"active\"] = obj;\n  }\n\n  // Inactive.\n  {\n    QJsonObject obj;\n    p_obj[\"inactive\"] = obj;\n  }\n\n  // Disabled.\n  {\n    QJsonObject obj;\n    obj[\"window\"] = qpalette.color(QPalette::Disabled, QPalette::Window).name();\n    obj[\"window_text\"] = qpalette.color(QPalette::Disabled, QPalette::WindowText).name();\n    obj[\"base\"] = qpalette.color(QPalette::Disabled, QPalette::Base).name();\n    obj[\"alternate_base\"] = qpalette.color(QPalette::Disabled, QPalette::AlternateBase).name();\n    obj[\"text\"] = qpalette.color(QPalette::Disabled, QPalette::Text).name();\n    obj[\"button\"] = qpalette.color(QPalette::Disabled, QPalette::Button).name();\n    obj[\"button_text\"] = qpalette.color(QPalette::Disabled, QPalette::ButtonText).name();\n    obj[\"bright_text\"] = qpalette.color(QPalette::Disabled, QPalette::BrightText).name();\n    obj[\"light\"] = qpalette.color(QPalette::Disabled, QPalette::Light).name();\n    obj[\"midlight\"] = qpalette.color(QPalette::Disabled, QPalette::Midlight).name();\n    obj[\"dark\"] = qpalette.color(QPalette::Disabled, QPalette::Dark).name();\n    obj[\"highlight\"] = qpalette.color(QPalette::Disabled, QPalette::Highlight).name();\n    obj[\"highlighted_text\"] = qpalette.color(QPalette::Disabled, QPalette::HighlightedText).name();\n    obj[\"link\"] = qpalette.color(QPalette::Disabled, QPalette::Link).name();\n    obj[\"link_visited\"] = qpalette.color(QPalette::Disabled, QPalette::LinkVisited).name();\n\n    p_obj[\"disabled\"] = obj;\n  }\n\n  return p_obj;\n}\n\nTheme::Palette Theme::translatePalette(const QJsonObject &p_obj, bool p_backfillSystemPalette) {\n  const QString paletteSection(\"palette\");\n  const QString baseSection(\"base\");\n  const QString widgetsSection(\"widgets\");\n\n  // @p_palette may contain referenced definitons: derived=@base#sub#sub2.\n  Palette palette;\n\n  if (p_backfillSystemPalette) {\n    palette[paletteSection] = backfillSystemPalette(p_obj[paletteSection].toObject());\n  } else {\n    palette[paletteSection] = p_obj[paletteSection];\n  }\n\n  palette[baseSection] = p_obj[baseSection];\n  palette[widgetsSection] = p_obj[widgetsSection];\n\n  // Skip paletteSection since it will not contain any reference.\n\n  translatePaletteObject(palette, palette, baseSection);\n\n  translatePaletteObject(palette, palette, widgetsSection);\n\n  return palette;\n}\n\nvoid Theme::translatePaletteObject(const Palette &p_palette, QJsonObject &p_obj,\n                                   const QString &p_key) {\n  int lastUnresolvedRefs = 0;\n  while (true) {\n    auto ret = translatePaletteObjectOnce(p_palette, p_obj, p_key);\n    if (!ret.first) {\n      break;\n    }\n\n    if (ret.second > 0 && ret.second == lastUnresolvedRefs) {\n      qWarning() << \"found cyclic references in palette definitions\" << p_obj[p_key];\n      break;\n    }\n    lastUnresolvedRefs = ret.second;\n  }\n}\n\nQPair<bool, int> Theme::translatePaletteObjectOnce(const Palette &p_palette, QJsonObject &p_obj,\n                                                   const QString &p_key) {\n  bool changed = false;\n  int unresolvedRefs = 0;\n\n  // May contain referenced definitions: derived=@base#sub#sub2.\n  QRegularExpression refRe(\"\\\\A@(\\\\w+(?:#\\\\w+)*)\\\\z\");\n  const int baseCapturedIdx = 1;\n\n  auto obj = p_obj[p_key].toObject();\n  for (auto it = obj.begin(); it != obj.end(); ++it) {\n    auto val = it.value();\n    if (val.isString()) {\n      // Check if it references to another key.\n      auto match = refRe.match(val.toString());\n      if (match.hasMatch()) {\n        auto refVal = findValueByKeyPath(p_palette, match.captured(baseCapturedIdx));\n        if (refVal.isUndefined()) {\n          ++unresolvedRefs;\n          qWarning() << \"failed to find palette key\" << match.captured(baseCapturedIdx);\n          break;\n        } else if (val.toString() == refVal.toString()) {\n          ++unresolvedRefs;\n          qWarning() << \"found cyclic references in palette definitions\" << it.key()\n                     << val.toString();\n          break;\n        }\n\n        Q_ASSERT_X(refVal.isString(), \"translatePaletteObjectOnce\",\n                   val.toString().toStdString().c_str());\n        const auto refValStr = refVal.toString();\n        it.value() = refValStr;\n        if (isRef(refValStr)) {\n          // It is another ref again.\n          ++unresolvedRefs;\n        }\n        changed = true;\n      }\n    } else if (val.isObject()) {\n      auto ret = translatePaletteObjectOnce(p_palette, obj, it.key());\n      changed = changed || ret.first;\n      unresolvedRefs += ret.second;\n    } else {\n      Q_ASSERT(false);\n    }\n  }\n\n  if (changed) {\n    p_obj[p_key] = obj;\n  }\n  return qMakePair(changed, unresolvedRefs);\n}\n\nQString Theme::fetchQtStyleSheet() const {\n  const auto qtStyleFile = getFile(File::QtStyleSheet);\n  if (qtStyleFile.isEmpty()) {\n    return \"\";\n  }\n  auto style = FileUtils::readTextFile(qtStyleFile);\n  translateStyleByPalette(m_palette, style);\n  translateUrlToAbsolute(m_themeFolderPath, style);\n  translateFontFamilyList(style);\n  return style;\n}\n\nvoid Theme::translateStyleByPalette(const Palette &p_palette, QString &p_style) {\n  QRegularExpression refRe(\"(\\\\s|:)@(\\\\w+(?:#\\\\w+)*)\");\n  const int prefixCapturedIdx = 1;\n  const int refCapturedIdx = 2;\n\n  int pos = 0;\n  QRegularExpressionMatch match;\n  while (pos < p_style.size()) {\n    int idx = p_style.indexOf(refRe, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    auto name = match.captured(refCapturedIdx);\n    auto val = findValueByKeyPath(p_palette, name).toString();\n    if (val.isEmpty() || isRef(val)) {\n      qWarning() << \"failed to translate style\" << name << val;\n      pos = idx + match.capturedLength();\n    } else {\n      pos = idx + match.capturedLength() + val.size() - (name.size() + 1);\n      p_style.replace(idx + match.captured(prefixCapturedIdx).size(), name.size() + 1, val);\n    }\n  }\n}\n\nvoid Theme::translateUrlToAbsolute(const QString &p_basePath, QString &p_style) {\n  QRegularExpression urlRe(\"(\\\\s|:)url\\\\(([^\\\\(\\\\)]+)\\\\)\");\n  const int prefixCapturedIdx = 1;\n  const int urlCapturedIdx = 2;\n\n  QDir dir(p_basePath);\n  const int literalSize = QStringLiteral(\"url(\").size();\n  int pos = 0;\n  QRegularExpressionMatch match;\n  while (pos < p_style.size()) {\n    int idx = p_style.indexOf(urlRe, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    auto url = match.captured(urlCapturedIdx);\n    if (QFileInfo(url).isRelative()) {\n      auto absoluteUrl = dir.filePath(url);\n      pos = idx + match.capturedLength() + absoluteUrl.size() - url.size();\n      p_style.replace(idx + match.captured(prefixCapturedIdx).size() + literalSize, url.size(),\n                      absoluteUrl);\n    } else {\n      pos = idx + match.capturedLength();\n    }\n  }\n}\n\nvoid Theme::translateFontFamilyList(QString &p_style) {\n  QRegularExpression fontRe(\"(\\\\s|^)font-family:([^;]+);\");\n  const int prefixCapturedIdx = 1;\n  const int fontCapturedIdx = 2;\n\n  int pos = 0;\n  QRegularExpressionMatch match;\n  while (pos < p_style.size()) {\n    int idx = p_style.indexOf(fontRe, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    auto familyList = match.captured(fontCapturedIdx).trimmed();\n    familyList.remove('\"');\n    auto family = Utils::pickAvailableFontFamily(familyList.split(','));\n    if (family.isEmpty()) {\n      // Could not find available font. Remove it.\n      auto newStr = match.captured(prefixCapturedIdx);\n      p_style.replace(idx, match.capturedLength(), newStr);\n      pos = idx + newStr.size();\n    } else if (family != familyList) {\n      if (family.contains(' ')) {\n        family = \"\\\"\" + family + \"\\\"\";\n      }\n\n      auto newStr =\n          QStringLiteral(\"%1font-family: %2;\").arg(match.captured(prefixCapturedIdx), family);\n      p_style.replace(idx, match.capturedLength(), newStr);\n      pos = idx + newStr.size();\n    } else {\n      pos = idx + match.capturedLength();\n    }\n  }\n}\n\nQString Theme::paletteColor(const QString &p_name) const {\n  auto val = findValueByKeyPath(m_palette, p_name).toString();\n  if (!val.isEmpty() && !isRef(val)) {\n    return val;\n  }\n  qWarning() << \"undefined or invalid palette color\" << p_name;\n  return QString();\n}\n\nQJsonObject Theme::readJsonFile(const QString &p_filePath) {\n  auto bytes = FileUtils::readFile(p_filePath);\n  return QJsonDocument::fromJson(bytes).object();\n}\n\nQJsonObject Theme::readPaletteFile(const QString &p_folder) {\n  auto obj = readJsonFile(QDir(p_folder).filePath(getFileName(File::Palette)));\n  return obj;\n}\n\nQJsonValue Theme::findValueByKeyPath(const Palette &p_palette, const QString &p_keyPath) {\n  auto keys = p_keyPath.split('#');\n  Q_ASSERT(!keys.isEmpty());\n  if (keys.size() == 1) {\n    return p_palette[keys.first()];\n  }\n\n  auto obj = p_palette;\n  for (int i = 0; i < keys.size() - 1; ++i) {\n    obj = obj[keys[i]].toObject();\n  }\n\n  return obj[keys.last()];\n}\n\nbool Theme::isRef(const QString &p_str) { return p_str.startsWith('@'); }\n\nQString Theme::getFile(File p_fileType) const { return getFile(m_themeFolderPath, p_fileType); }\n\nQString Theme::getFile(const QString &p_themeFolder, File p_fileType) {\n  QDir dir(p_themeFolder);\n  if (dir.exists(getFileName(p_fileType))) {\n    return dir.filePath(getFileName(p_fileType));\n  } else if (p_fileType == File::MarkdownEditorStyle) {\n    // Fallback to text editor style.\n    if (dir.exists(getFileName(File::TextEditorStyle))) {\n      return dir.filePath(getFileName(File::TextEditorStyle));\n    }\n  }\n  return \"\";\n}\n\nQString Theme::getFileName(File p_fileType) {\n  switch (p_fileType) {\n  case File::Palette:\n    return QStringLiteral(\"palette.json\");\n  case File::QtStyleSheet:\n    return QStringLiteral(\"interface.qss\");\n  case File::WebStyleSheet:\n    return QStringLiteral(\"web.css\");\n  case File::HighlightStyleSheet:\n    return QStringLiteral(\"highlight.css\");\n  case File::TextEditorStyle:\n    return QStringLiteral(\"text-editor.theme\");\n  case File::MarkdownEditorStyle:\n    return QStringLiteral(\"markdown-text-editor.theme\");\n  case File::EditorHighlightStyle:\n    return QStringLiteral(\"editor-highlight.theme\");\n  case File::MarkdownEditorHighlightStyle:\n    return QStringLiteral(\"markdown-editor-highlight.theme\");\n  case File::Cover:\n    return QStringLiteral(\"cover.png\");\n  case File::Icon:\n    return QStringLiteral(\"icons\");\n  default:\n    Q_ASSERT(false);\n    return \"\";\n  }\n}\n\nQString Theme::getEditorHighlightTheme() const {\n  auto file = getFile(File::EditorHighlightStyle);\n  if (file.isEmpty()) {\n    return m_metadata.m_editorHighlightTheme;\n  } else {\n    return file;\n  }\n}\n\nQString Theme::getMarkdownEditorHighlightTheme() const {\n  auto file = getFile(File::MarkdownEditorHighlightStyle);\n  if (!file.isEmpty()) {\n    return file;\n  }\n\n  if (!m_metadata.m_markdownEditorHighlightTheme.isEmpty()) {\n    return m_metadata.m_markdownEditorHighlightTheme;\n  }\n\n  return getEditorHighlightTheme();\n}\n\nQString Theme::name() const { return PathUtils::dirName(m_themeFolderPath); }\n\nQPixmap Theme::getCover(const QString &p_folder) {\n  QDir dir(p_folder);\n  if (dir.exists(getFileName(File::Cover))) {\n    const auto coverFile = dir.filePath(getFileName(File::Cover));\n    return QPixmap(coverFile);\n  }\n  return QPixmap();\n}\n"
  },
  {
    "path": "src/core/theme.h",
    "content": "#ifndef THEME_H\n#define THEME_H\n\n#include <QHash>\n#include <QJsonObject>\n#include <QPair>\n#include <QPixmap>\n#include <QString>\n\nnamespace tests {\nclass TestTheme;\n}\n\nnamespace vnotex {\nclass Theme {\npublic:\n  enum class File {\n    Palette = 0,\n    QtStyleSheet,\n    WebStyleSheet,\n    HighlightStyleSheet,\n    TextEditorStyle,\n    MarkdownEditorStyle,\n    EditorHighlightStyle,\n    MarkdownEditorHighlightStyle,\n    Cover,\n    Icon,\n    Max\n  };\n\n  QString fetchQtStyleSheet() const;\n\n  QString paletteColor(const QString &p_name) const;\n\n  // Get the file path of @p_fileType if exists.\n  QString getFile(File p_fileType) const;\n\n  // Return the file path of the theme or just the theme name.\n  QString getEditorHighlightTheme() const;\n\n  // Return the file path of the theme or just the theme name.\n  QString getMarkdownEditorHighlightTheme() const;\n\n  QString name() const;\n\n  QString getThemeFolder() const;\n\n  static bool isValidThemeFolder(const QString &p_folder);\n\n  static Theme *fromFolder(const QString &p_folder);\n\n  static QString getDisplayName(const QString &p_folder, const QString &p_locale);\n\n  static QPixmap getCover(const QString &p_folder);\n\n  static QString getFile(const QString &p_themeFolder, File p_fileType);\n\nprivate:\n  struct Metadata {\n    int m_revision = 0;\n\n    // Name of the theme for editor syntax highlight.\n    // Will be ignored if EditorHighlightStyle file exists within the theme.\n    QString m_editorHighlightTheme;\n\n    // Use for MarkdownEditor code block highlight.\n    // If not specified, will use m_editorHighlightTheme.\n    // Valid only when KSyntaxCodeBlockHighlighter is used.\n    QString m_markdownEditorHighlightTheme;\n\n    // Whether this theme needs to backfill current standard palette to the theme palette.\n    bool m_backfillSystemPalette = false;\n  };\n\n  typedef QJsonObject Palette;\n\n  Theme(const QString &p_themeFolderPath, const Metadata &p_metadata, const QJsonObject &p_palette);\n\n  QString m_themeFolderPath;\n\n  Theme::Metadata m_metadata;\n\n  Palette m_palette;\n\n  static Metadata readMetadata(const QJsonObject &p_obj);\n\n  static Theme::Palette translatePalette(const QJsonObject &p_obj, bool p_backfillSystemPalette);\n\n  static QJsonObject backfillSystemPalette(QJsonObject p_obj);\n\n  static void translatePaletteObject(const Palette &p_palette, QJsonObject &p_obj,\n                                     const QString &p_key);\n\n  // Translate p_obj[p_key] by looking up @p_palette.\n  // Return <changed, unresolvedRefs>.\n  static QPair<bool, int> translatePaletteObjectOnce(const Palette &p_palette, QJsonObject &p_obj,\n                                                     const QString &p_key);\n\n  static QJsonValue findValueByKeyPath(const Palette &p_palette, const QString &p_keyPath);\n\n  static void translateStyleByPalette(const Palette &p_palette, QString &p_style);\n\n  static void translateUrlToAbsolute(const QString &p_basePath, QString &p_style);\n\n  // Font-family in QSS only supports specifying one font, not a list.\n  // Thus we need to choose one available font from the list.\n  static void translateFontFamilyList(QString &p_style);\n\n  static QJsonObject readJsonFile(const QString &p_filePath);\n\n  static QJsonObject readPaletteFile(const QString &p_folder);\n\n  // Whether @p_str is a reference definition like \"@xxxx\".\n  static bool isRef(const QString &p_str);\n\n  static QString getFileName(File p_fileType);\n\n  friend class tests::TestTheme;\n};\n} // namespace vnotex\n\n#endif // THEME_H\n"
  },
  {
    "path": "src/core/thememgr.cpp",
    "content": "#include \"thememgr.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QRegularExpression>\n\n#include \"configmgr.h\"\n#include \"coreconfig.h\"\n#include \"exception.h\"\n#include \"theme.h\"\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n#include <vtextedit/vtexteditor.h>\n\nusing namespace vnotex;\n\nQStringList ThemeMgr::s_searchPaths;\n\nQStringList ThemeMgr::s_webStylesSearchPaths;\n\nThemeMgr::ThemeMgr(const QString &p_currentThemeName, QObject *p_parent) : QObject(p_parent) {\n  loadAvailableThemes();\n\n  loadCurrentTheme(p_currentThemeName);\n}\n\nQString ThemeMgr::getIconFile(const QString &p_icon) const {\n  Q_ASSERT(!p_icon.isEmpty());\n\n  QRegularExpression sep(\"[/\\\\\\\\]\");\n  if (p_icon.indexOf(sep) != -1) {\n    return p_icon;\n  }\n\n  // If there is an ICONS folder in the theme configuration, use the custom ICONS from it.\n  QString customIcon = getFile(Theme::File::Icon) + \"/\" + p_icon;\n  if (QFile::exists(customIcon)) {\n    return customIcon;\n  } else {\n    return \":/vnotex/data/core/icons/\" + p_icon;\n  }\n}\n\nvoid ThemeMgr::loadAvailableThemes() {\n  m_themes.clear();\n\n  for (const auto &pa : s_searchPaths) {\n    loadThemes(pa);\n  }\n\n  if (m_themes.isEmpty()) {\n    Exception::throwOne(Exception::Type::EssentialFileMissing,\n                        QStringLiteral(\"no available themes found in paths: %1\")\n                            .arg(s_searchPaths.join(QLatin1Char(';'))));\n  }\n}\n\nvoid ThemeMgr::loadThemes(const QString &p_path) {\n  qDebug() << \"search for themes in\" << p_path;\n  QDir dir(p_path);\n  dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);\n  auto themeFolders = dir.entryList();\n  const auto localeStr = ConfigMgr::getInst().getCoreConfig().getLocaleToUse();\n  for (auto &folder : themeFolders) {\n    checkAndAddThemeFolder(PathUtils::concatenateFilePath(p_path, folder), localeStr);\n  }\n}\n\nvoid ThemeMgr::checkAndAddThemeFolder(const QString &p_folder, const QString &p_locale) {\n  if (Theme::isValidThemeFolder(p_folder)) {\n    ThemeInfo info;\n    info.m_name = PathUtils::dirName(p_folder);\n    info.m_displayName = Theme::getDisplayName(p_folder, p_locale);\n    info.m_folderPath = p_folder;\n    m_themes.push_back(info);\n    qDebug() << \"add theme\" << info.m_name << info.m_displayName << info.m_folderPath;\n  }\n}\n\nconst Theme &ThemeMgr::getCurrentTheme() const { return *m_currentTheme; }\n\nvoid ThemeMgr::loadCurrentTheme(const QString &p_themeName) {\n  m_currentTheme.reset();\n  auto themeFolder = findThemeFolder(p_themeName);\n  if (themeFolder.isNull()) {\n    qWarning() << \"failed to locate theme\" << p_themeName;\n  } else {\n    qInfo() << \"using theme\" << p_themeName;\n    m_currentTheme.reset(loadTheme(themeFolder));\n  }\n\n  if (!m_currentTheme) {\n    const QString defaultTheme(\"pure\");\n    qWarning() << \"fall back to default theme\" << defaultTheme;\n    m_currentTheme.reset(loadTheme(findThemeFolder(defaultTheme)));\n  }\n\n  IconUtils::setDefaultIconForeground(paletteColor(\"base#icon#fg\"),\n                                      paletteColor(\"base#icon#disabled#fg\"));\n}\n\nTheme *ThemeMgr::loadTheme(const QString &p_themeFolder) {\n  if (p_themeFolder.isEmpty()) {\n    qWarning(\"failed to load theme from empty folder\");\n    return nullptr;\n  }\n\n  try {\n    return Theme::fromFolder(p_themeFolder);\n  } catch (Exception &p_e) {\n    qWarning(\"failed to load theme from folder %s (%s)\", p_themeFolder.toStdString().c_str(),\n             p_e.what());\n    return nullptr;\n  }\n}\n\nQString ThemeMgr::findThemeFolder(const QString &p_name) const {\n  auto theme = findTheme(p_name);\n  if (theme) {\n    return theme->m_folderPath;\n  }\n  return QString();\n}\n\nconst ThemeMgr::ThemeInfo *ThemeMgr::findTheme(const QString &p_name) const {\n  for (const auto &info : m_themes) {\n    if (info.m_name == p_name) {\n      return &info;\n    }\n  }\n\n  return nullptr;\n}\n\nQString ThemeMgr::fetchQtStyleSheet() const {\n  Q_ASSERT(m_currentTheme);\n  if (!m_currentTheme) {\n    return QString();\n  }\n\n  return m_currentTheme->fetchQtStyleSheet();\n}\n\nQString ThemeMgr::paletteColor(const QString &p_name) const {\n  Q_ASSERT(m_currentTheme);\n  return m_currentTheme->paletteColor(p_name);\n}\n\nvoid ThemeMgr::addSearchPath(const QString &p_path) { s_searchPaths << p_path; }\n\nQString ThemeMgr::getFile(Theme::File p_fileType) const {\n  return m_currentTheme->getFile(p_fileType);\n}\n\nQString ThemeMgr::getEditorHighlightTheme() const {\n  return m_currentTheme->getEditorHighlightTheme();\n}\n\nQString ThemeMgr::getMarkdownEditorHighlightTheme() const {\n  return m_currentTheme->getMarkdownEditorHighlightTheme();\n}\n\nvoid ThemeMgr::addSyntaxHighlightingSearchPaths(const QStringList &p_paths) {\n  vte::VTextEditor::addSyntaxCustomSearchPaths(p_paths);\n}\n\nconst QColor &ThemeMgr::getBaseBackground() const { return m_baseBackground; }\n\nvoid ThemeMgr::setBaseBackground(const QColor &p_bg) { m_baseBackground = p_bg; }\n\nconst QVector<ThemeMgr::ThemeInfo> &ThemeMgr::getAllThemes() const { return m_themes; }\n\nQPixmap ThemeMgr::getThemePreview(const QString &p_name) const {\n  auto theme = findTheme(p_name);\n  if (theme) {\n    return Theme::getCover(theme->m_folderPath);\n  }\n  return QPixmap();\n}\n\nvoid ThemeMgr::refresh() {\n  loadAvailableThemes();\n  refreshCurrentTheme();\n}\n\nvoid vnotex::ThemeMgr::refreshCurrentTheme() {\n  if (m_currentTheme) {\n    loadCurrentTheme(m_currentTheme->name());\n  }\n}\n\nvoid ThemeMgr::addWebStylesSearchPath(const QString &p_path) { s_webStylesSearchPaths << p_path; }\n\nQVector<QPair<QString, QString>> ThemeMgr::getWebStyles() const {\n  QVector<QPair<QString, QString>> styles;\n\n  // From themes.\n  for (const auto &th : m_themes) {\n    auto filePath = Theme::getFile(th.m_folderPath, Theme::File::WebStyleSheet);\n    if (!filePath.isEmpty()) {\n      styles.push_back(qMakePair(\n          tr(\"[Theme] %1 %2\").arg(th.m_displayName, PathUtils::fileName(filePath)), filePath));\n    }\n\n    filePath = Theme::getFile(th.m_folderPath, Theme::File::HighlightStyleSheet);\n    if (!filePath.isEmpty()) {\n      styles.push_back(qMakePair(\n          tr(\"[Theme] %1 %2\").arg(th.m_displayName, PathUtils::fileName(filePath)), filePath));\n    }\n  }\n\n  // From search paths.\n  for (const auto &pa : s_webStylesSearchPaths) {\n    QDir dir(pa);\n    auto styleFiles = dir.entryList({\"*.css\"}, QDir::Files);\n    for (const auto &file : styleFiles) {\n      styles.push_back(qMakePair(file, dir.filePath(file)));\n    }\n  }\n\n  return styles;\n}\n"
  },
  {
    "path": "src/core/thememgr.h",
    "content": "#ifndef THEMEMGR_H\n#define THEMEMGR_H\n\n#include <QObject>\n\n#include <QColor>\n#include <QPixmap>\n#include <QScopedPointer>\n#include <QString>\n#include <QStringList>\n#include <QVector>\n\n#include \"theme.h\"\n\nnamespace vnotex {\nclass ThemeMgr : public QObject {\n  Q_OBJECT\npublic:\n  struct ThemeInfo {\n    // Id.\n    QString m_name;\n\n    // Locale supported.\n    QString m_displayName;\n\n    QString m_folderPath;\n  };\n\n  ThemeMgr(const QString &p_currentThemeName, QObject *p_parent = nullptr);\n\n  // @p_icon: file path or file name of the icon.\n  // If @p_icon is a path, just return it.\n  // Otherwise, first try to find it in current theme, and if not found,\n  // find it in resource file.\n  // Return the path of the icon to use.\n  QString getIconFile(const QString &p_icon) const;\n\n  QString fetchQtStyleSheet() const;\n\n  QString paletteColor(const QString &p_name) const;\n\n  QString getFile(Theme::File p_fileType) const;\n\n  // Return the file path of the theme or just the theme name.\n  QString getEditorHighlightTheme() const;\n\n  QString getMarkdownEditorHighlightTheme() const;\n\n  const QColor &getBaseBackground() const;\n  void setBaseBackground(const QColor &p_bg);\n\n  const QVector<ThemeInfo> &getAllThemes() const;\n\n  const Theme &getCurrentTheme() const;\n\n  QPixmap getThemePreview(const QString &p_name) const;\n\n  const ThemeInfo *findTheme(const QString &p_name) const;\n\n  // Refresh the themes list and reload current theme.\n  void refresh();\n\n  void refreshCurrentTheme();\n\n  // Return all web stylesheets available, including those from themes and web styles search paths.\n  // <DisplayName, FilePath>.\n  QVector<QPair<QString, QString>> getWebStyles() const;\n\n  static void addSearchPath(const QString &p_path);\n\n  static void addSyntaxHighlightingSearchPaths(const QStringList &p_paths);\n\n  static void addWebStylesSearchPath(const QString &p_path);\n\nprivate:\n  void loadAvailableThemes();\n\n  void loadThemes(const QString &p_path);\n\n  void checkAndAddThemeFolder(const QString &p_folder, const QString &p_locale);\n\n  void loadCurrentTheme(const QString &p_themeName);\n\n  Theme *loadTheme(const QString &p_themeFolder);\n\n  QString findThemeFolder(const QString &p_name) const;\n\n  QVector<ThemeInfo> m_themes;\n\n  QScopedPointer<Theme> m_currentTheme;\n\n  // Background of the main window.\n  // Set at runtime, not from the theme config.\n  QColor m_baseBackground;\n\n  // List of paths to search for themes.\n  static QStringList s_searchPaths;\n\n  // List of paths to search for CSS styles, including CSS syntax highlighting styles.\n  static QStringList s_webStylesSearchPaths;\n};\n} // namespace vnotex\n\n#endif // THEMEMGR_H\n"
  },
  {
    "path": "src/core/versioncontroller/dummyversioncontroller.cpp",
    "content": "#include \"dummyversioncontroller.h\"\n\nusing namespace vnotex;\n\nDummyVersionController::DummyVersionController(const QString &p_name, const QString &p_displayName,\n                                               const QString &p_description, QObject *p_parent)\n    : IVersionController(p_parent), m_info(p_name, p_displayName, p_description) {}\n\nQString DummyVersionController::getName() const { return m_info.m_name; }\n\nQString DummyVersionController::getDisplayName() const { return m_info.m_displayName; }\n\nQString DummyVersionController::getDescription() const { return m_info.m_description; }\n"
  },
  {
    "path": "src/core/versioncontroller/dummyversioncontroller.h",
    "content": "#ifndef DUMMYVERSIONCONTROLLER_H\n#define DUMMYVERSIONCONTROLLER_H\n\n#include \"iversioncontroller.h\"\n\n#include <global.h>\n\nnamespace vnotex {\nclass DummyVersionController : public IVersionController {\n  Q_OBJECT\npublic:\n  explicit DummyVersionController(const QString &p_name, const QString &p_displayName,\n                                  const QString &p_description, QObject *p_parent = nullptr);\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getDisplayName() const Q_DECL_OVERRIDE;\n\n  QString getDescription() const Q_DECL_OVERRIDE;\n\nprivate:\n  Info m_info;\n};\n} // namespace vnotex\n\n#endif // DUMMYVERSIONCONTROLLER_H\n"
  },
  {
    "path": "src/core/versioncontroller/dummyversioncontrollerfactory.cpp",
    "content": "#include \"dummyversioncontrollerfactory.h\"\n\nusing namespace vnotex;\n\n#include <QObject>\n\n#include \"dummyversioncontroller.h\"\n\nDummyVersionControllerFactory::DummyVersionControllerFactory() {}\n\nQString DummyVersionControllerFactory::getName() const { return QStringLiteral(\"dummy.vnotex\"); }\n\nQString DummyVersionControllerFactory::getDisplayName() const {\n  return QObject::tr(\"No Version Control\");\n}\n\nQString DummyVersionControllerFactory::getDescription() const {\n  return QObject::tr(\"Disable version control\");\n}\n\nQSharedPointer<IVersionController> DummyVersionControllerFactory::createVersionController() {\n  return QSharedPointer<DummyVersionController>::create(getName(), getDisplayName(),\n                                                        getDescription());\n}\n"
  },
  {
    "path": "src/core/versioncontroller/dummyversioncontrollerfactory.h",
    "content": "#ifndef DUMMYVERSIONCONTROLLERFACTORY_H\n#define DUMMYVERSIONCONTROLLERFACTORY_H\n\n#include \"iversioncontrollerfactory.h\"\n\nnamespace vnotex {\nclass DummyVersionControllerFactory : public IVersionControllerFactory {\npublic:\n  DummyVersionControllerFactory();\n\n  QString getName() const Q_DECL_OVERRIDE;\n\n  QString getDisplayName() const Q_DECL_OVERRIDE;\n\n  QString getDescription() const Q_DECL_OVERRIDE;\n\n  QSharedPointer<IVersionController> createVersionController() Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // DUMMYVERSIONCONTROLLERFACTORY_H\n"
  },
  {
    "path": "src/core/versioncontroller/iversioncontroller.h",
    "content": "#ifndef IVERSIONCONTROLLER_H\n#define IVERSIONCONTROLLER_H\n\n#include <QObject>\n\nnamespace vnotex {\n// Abstract class for version control.\nclass IVersionController : public QObject {\n  Q_OBJECT\npublic:\n  explicit IVersionController(QObject *p_parent = nullptr) : QObject(p_parent) {}\n\n  virtual ~IVersionController() {}\n\n  virtual QString getName() const = 0;\n\n  virtual QString getDisplayName() const = 0;\n\n  virtual QString getDescription() const = 0;\n};\n} // namespace vnotex\n\n#endif // IVERSIONCONTROLLER_H\n"
  },
  {
    "path": "src/core/versioncontroller/iversioncontrollerfactory.h",
    "content": "#ifndef IVERSIONCONTROLLERFACTORY_H\n#define IVERSIONCONTROLLERFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass IVersionController;\n\nclass IVersionControllerFactory {\npublic:\n  IVersionControllerFactory() {}\n\n  virtual ~IVersionControllerFactory() {}\n\n  virtual QString getName() const = 0;\n\n  virtual QString getDisplayName() const = 0;\n\n  virtual QString getDescription() const = 0;\n\n  virtual QSharedPointer<IVersionController> createVersionController() = 0;\n};\n} // namespace vnotex\n\n#endif // IVERSIONCONTROLLERFACTORY_H\n"
  },
  {
    "path": "src/core/versioncontroller/versioncontrollerserver.cpp",
    "content": "#include \"versioncontrollerserver.h\"\n\n#include <QDebug>\n\n#include \"iversioncontroller.h\"\n#include \"iversioncontrollerfactory.h\"\n\nusing namespace vnotex;\n\nVersionControllerServer::VersionControllerServer() {}\n\nbool VersionControllerServer::registerFactory(\n    const QSharedPointer<IVersionControllerFactory> &p_factory) {\n  Q_ASSERT(p_factory);\n  if (m_factories.contains(p_factory->getName())) {\n    qWarning() << \"VersionControllerFactory to register already exists\" << p_factory->getName()\n               << p_factory->getDisplayName();\n    return false;\n  }\n\n  qDebug() << \"VersionControllerFactory\" << p_factory->getName() << \"registered\";\n  m_factories.insert(p_factory->getName(), p_factory);\n  return true;\n}\n\nQSharedPointer<IVersionController>\nVersionControllerServer::createVersionController(const QString &p_name) {\n  auto it = m_factories.find(p_name);\n  if (it != m_factories.end()) {\n    auto &factory = it.value();\n    return factory->createVersionController();\n  }\n\n  return nullptr;\n}\n"
  },
  {
    "path": "src/core/versioncontroller/versioncontrollerserver.h",
    "content": "#ifndef VERSIONCONTROLLERSERVER_H\n#define VERSIONCONTROLLERSERVER_H\n\n#include <QHash>\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass IVersionController;\nclass IVersionControllerFactory;\n\nclass VersionControllerServer {\npublic:\n  VersionControllerServer();\n\n  // Register a factory.\n  bool registerFactory(const QSharedPointer<IVersionControllerFactory> &p_factory);\n\n  // @p_name: Name of the version controller to create.\n  QSharedPointer<IVersionController> createVersionController(const QString &p_name);\n\nprivate:\n  // Name to factory mapping.\n  QHash<QString, QSharedPointer<IVersionControllerFactory>> m_factories;\n};\n} // namespace vnotex\n\n#endif // VERSIONCONTROLLERSERVER_H\n"
  },
  {
    "path": "src/core/vnotex.cpp",
    "content": "#include \"vnotex.h\"\n\n#include <QDateTime>\n#include <QRandomGenerator>\n\n#include \"buffermgr.h\"\n#include \"configmgr.h\"\n#include \"coreconfig.h\"\n#include \"location.h\"\n#include \"notebookmgr.h\"\n#include <widgets/mainwindow.h>\n\n#include \"fileopenparameters.h\"\n#include \"quickaccesshelper.h\"\n\n#include <task/taskmgr.h>\n#include <utils/docsutils.h>\n\nusing namespace vnotex;\n\nVNoteX::VNoteX(QObject *p_parent) : QObject(p_parent) {\n  m_instanceId = QRandomGenerator::global()->generate64();\n\n  initThemeMgr();\n\n  initTaskMgr();\n\n  initNotebookMgr();\n\n  initBufferMgr();\n\n  initDocsUtils();\n\n  initQuickAccess();\n}\n\nvoid VNoteX::initLoad() {\n  qDebug() << \"start init which may take a while\";\n  m_notebookMgr->loadNotebooks();\n  m_taskMgr->init();\n}\n\nvoid VNoteX::initThemeMgr() {\n  Q_ASSERT(!m_themeMgr);\n  auto &configMgr = ConfigMgr::getInst();\n  ThemeMgr::addSearchPath(configMgr.getAppThemeFolder());\n  ThemeMgr::addSearchPath(configMgr.getUserThemeFolder());\n  ThemeMgr::addSyntaxHighlightingSearchPaths(QStringList()\n                                             << configMgr.getUserSyntaxHighlightingFolder()\n                                             << configMgr.getAppSyntaxHighlightingFolder());\n  ThemeMgr::addWebStylesSearchPath(configMgr.getAppWebStylesFolder());\n  ThemeMgr::addWebStylesSearchPath(configMgr.getUserWebStylesFolder());\n  m_themeMgr = new ThemeMgr(configMgr.getCoreConfig().getTheme(), this);\n}\n\nvoid VNoteX::initTaskMgr() {\n  Q_ASSERT(!m_taskMgr);\n  m_taskMgr = new TaskMgr(this);\n  connect(m_taskMgr, &TaskMgr::taskOutputRequested, this, &VNoteX::showOutputRequested);\n}\n\nThemeMgr &VNoteX::getThemeMgr() const { return *m_themeMgr; }\n\nTaskMgr &VNoteX::getTaskMgr() const { return *m_taskMgr; }\n\nvoid VNoteX::setMainWindow(MainWindow *p_mainWindow) {\n  Q_ASSERT(!m_mainWindow);\n  m_mainWindow = p_mainWindow;\n}\n\nMainWindow *VNoteX::getMainWindow() const {\n  Q_ASSERT(m_mainWindow);\n  return m_mainWindow;\n}\n\nvoid VNoteX::initNotebookMgr() {\n  Q_ASSERT(!m_notebookMgr);\n  m_notebookMgr = new NotebookMgr(this);\n  m_notebookMgr->init();\n}\n\nvoid VNoteX::initBufferMgr() {\n  BufferMgr::updateSuffixToFileType(ConfigMgr::getInst().getCoreConfig().getFileTypeSuffixes());\n\n  Q_ASSERT(!m_bufferMgr);\n  m_bufferMgr = new BufferMgr(this);\n  m_bufferMgr->init();\n\n  connect(this, &VNoteX::openNodeRequested, m_bufferMgr,\n          QOverload<Node *, const QSharedPointer<FileOpenParameters> &>::of(&BufferMgr::open));\n\n  connect(\n      this, &VNoteX::openFileRequested, m_bufferMgr,\n      QOverload<const QString &, const QSharedPointer<FileOpenParameters> &>::of(&BufferMgr::open));\n}\n\nNotebookMgr &VNoteX::getNotebookMgr() const { return *m_notebookMgr; }\n\nBufferMgr &VNoteX::getBufferMgr() const { return *m_bufferMgr; }\n\nvoid VNoteX::showStatusMessage(const QString &p_message, int p_timeoutMilliseconds) {\n  emit statusMessageRequested(p_message, p_timeoutMilliseconds);\n}\n\nvoid VNoteX::showStatusMessageShort(const QString &p_message) {\n  showStatusMessage(p_message, 3000);\n}\n\nvoid VNoteX::showTips(const QString &p_message, int p_timeoutMilliseconds) {\n  emit tipsRequested(p_message, p_timeoutMilliseconds);\n}\n\nID VNoteX::getInstanceId() const { return m_instanceId; }\n\nvoid VNoteX::initDocsUtils() {\n  auto &configMgr = ConfigMgr::getInst();\n  // If we got a match in user folder, stop the search.\n  DocsUtils::addSearchPath(configMgr.getUserDocsFolder());\n  DocsUtils::addSearchPath(configMgr.getAppDocsFolder());\n\n  DocsUtils::setLocale(configMgr.getCoreConfig().getLocaleToUse());\n}\n\nvoid VNoteX::initQuickAccess() {\n  connect(this, &VNoteX::pinToQuickAccessRequested, this, &QuickAccessHelper::pinToQuickAccess);\n}\n"
  },
  {
    "path": "src/core/vnotex.h",
    "content": "#ifndef VNOTEX_H\n#define VNOTEX_H\n\n#include <QObject>\n#include <QScopedPointer>\n\n#include \"global.h\"\n#include \"noncopyable.h\"\n#include \"thememgr.h\"\n\nnamespace vnotex {\nclass MainWindow;\nclass NotebookMgr;\nclass BufferMgr;\nclass Node;\nstruct FileOpenParameters;\nclass Event;\nclass Notebook;\nstruct ComplexLocation;\nclass TaskMgr;\n\nclass VNoteX : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  static VNoteX &getInst() {\n    static VNoteX inst;\n    return inst;\n  }\n\n  // MUST be called to load some heavy data.\n  // It is good to call it after MainWindow is shown.\n  void initLoad();\n\n  ThemeMgr &getThemeMgr() const;\n\n  TaskMgr &getTaskMgr() const;\n\n  void setMainWindow(MainWindow *p_mainWindow);\n  MainWindow *getMainWindow() const;\n\n  NotebookMgr &getNotebookMgr() const;\n\n  BufferMgr &getBufferMgr() const;\n\n  ID getInstanceId() const;\n\npublic slots:\n  void showStatusMessage(const QString &p_message, int p_timeoutMilliseconds = 0);\n\n  void showStatusMessageShort(const QString &p_message);\n\n  void showTips(const QString &p_message, int p_timeoutMilliseconds = 3000);\n\nsignals:\n  // Requested to new a notebook.\n  void newNotebookRequested();\n\n  // Requested to new a notebook from existing folder.\n  void newNotebookFromFolderRequested();\n\n  // Requested to import a notebook.\n  void importNotebookRequested();\n\n  void manageNotebooksRequested();\n\n  // Requested to import files.\n  void importFileRequested();\n\n  // Requested to import folder.\n  void importFolderRequested();\n\n  // Requested to new a note in current notebook.\n  // The handler should determine in which folder this note belongs to.\n  void newNoteRequested();\n\n  // Requested to new a quick note (maybe in current folder).\n  void newQuickNoteRequested();\n\n  // Requested to new a folder in current notebook.\n  void newFolderRequested();\n\n  // Requested to show output message.\n  void showOutputRequested(const QString &p_text);\n\n  // Requested to show status message.\n  void statusMessageRequested(const QString &p_message, int p_timeoutMilliseconds);\n\n  void tipsRequested(const QString &p_message, int p_timeoutMilliseconds);\n\n  // Requested to open @p_node.\n  void openNodeRequested(Node *p_node, const QSharedPointer<FileOpenParameters> &p_paras);\n\n  // @m_response of @p_event: true to continue the move, false to cancel the move.\n  void nodeAboutToMove(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  // @m_response of @p_event: true to continue the removal, false to cancel the removal.\n  void nodeAboutToRemove(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  // @m_response of @p_event: true to continue the rename, false to cancel the rename.\n  void nodeAboutToRename(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  // @m_response of @p_event: true to continue the reload, false to cancel the reload.\n  void nodeAboutToReload(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  // Requested to open @p_filePath.\n  void openFileRequested(const QString &p_filePath,\n                         const QSharedPointer<FileOpenParameters> &p_paras);\n\n  // Requested to locate node in explorer.\n  void locateNodeRequested(Node *p_node);\n\n  void exportRequested();\n\n  void pinToQuickAccessRequested(const QStringList &p_files);\n\n  void closeFileRequested(const QString &p_filePath, const QSharedPointer<Event> &p_event);\n\nprivate:\n  explicit VNoteX(QObject *p_parent = nullptr);\n\n  void initThemeMgr();\n\n  void initTaskMgr();\n\n  void initNotebookMgr();\n\n  void initBufferMgr();\n\n  void initDocsUtils();\n\n  void initQuickAccess();\n\n  MainWindow *m_mainWindow = nullptr;\n\n  // QObject managed.\n  ThemeMgr *m_themeMgr = nullptr;\n\n  // QObject managed.\n  TaskMgr *m_taskMgr = nullptr;\n\n  // QObject managed.\n  NotebookMgr *m_notebookMgr = nullptr;\n\n  // QObject managed.\n  BufferMgr *m_bufferMgr = nullptr;\n\n  // Used to identify app's instance.\n  ID m_instanceId = 0;\n};\n} // namespace vnotex\n\n#endif // VNOTEX_H\n"
  },
  {
    "path": "src/core/webresource.h",
    "content": "#ifndef WEBRESOURCE_H\n#define WEBRESOURCE_H\n\n#include <QJsonArray>\n#include <QJsonObject>\n#include <QStringList>\n#include <QVector>\n\nnamespace vnotex {\n// Resource for Web.\nstruct WebResource {\n  struct Resource {\n    void init(const QJsonObject &p_obj) {\n      m_name = p_obj[QStringLiteral(\"name\")].toString();\n      m_enabled = p_obj[QStringLiteral(\"enabled\")].toBool();\n\n      m_styles.clear();\n      auto stylesArray = p_obj[QStringLiteral(\"styles\")].toArray();\n      for (int i = 0; i < stylesArray.size(); ++i) {\n        m_styles << stylesArray[i].toString();\n      }\n\n      m_scripts.clear();\n      auto scriptsArray = p_obj[QStringLiteral(\"scripts\")].toArray();\n      for (int i = 0; i < scriptsArray.size(); ++i) {\n        m_scripts << scriptsArray[i].toString();\n      }\n    }\n\n    QJsonObject toJson() const {\n      QJsonObject obj;\n      obj[QStringLiteral(\"name\")] = m_name;\n      obj[QStringLiteral(\"enabled\")] = m_enabled;\n\n      QJsonArray stylesArray;\n      for (const auto &ele : m_styles) {\n        stylesArray.append(ele);\n      }\n      obj[QStringLiteral(\"styles\")] = stylesArray;\n\n      QJsonArray scriptsArray;\n      for (const auto &ele : m_scripts) {\n        scriptsArray.append(ele);\n      }\n      obj[QStringLiteral(\"scripts\")] = scriptsArray;\n      return obj;\n    }\n\n    bool isGlobal() const { return m_name == QStringLiteral(\"global_styles\"); }\n\n    QString m_name;\n\n    bool m_enabled = true;\n\n    QStringList m_styles;\n\n    QStringList m_scripts;\n  };\n\n  void init(const QJsonObject &p_obj) {\n    m_template = p_obj[QStringLiteral(\"template\")].toString();\n\n    auto ary = p_obj[QStringLiteral(\"resources\")].toArray();\n    m_resources.resize(ary.size());\n    for (int i = 0; i < ary.size(); ++i) {\n      m_resources[i].init(ary[i].toObject());\n    }\n  }\n\n  QJsonObject toJson() const {\n    QJsonObject obj;\n    obj[QStringLiteral(\"template\")] = m_template;\n\n    {\n      QJsonArray ary;\n      for (const auto &ele : m_resources) {\n        ary.append(ele.toJson());\n      }\n      obj[QStringLiteral(\"resources\")] = ary;\n    }\n\n    return obj;\n  }\n\n  // HTML template file.\n  QString m_template;\n\n  // Resources to fill in the template.\n  QVector<Resource> m_resources;\n};\n\n} // namespace vnotex\n\n#endif // WEBRESOURCE_H\n"
  },
  {
    "path": "src/core/widgetconfig.cpp",
    "content": "#include \"widgetconfig.h\"\n\nusing namespace vnotex;\n\n#define READINT(key) readInt(appObj, userObj, (key))\n#define READBOOL(key) readBool(appObj, userObj, (key))\n#define READSTRLIST(key) readStringList(appObj, userObj, (key))\n\nWidgetConfig::WidgetConfig(ConfigMgr *p_mgr, IConfig *p_topConfig) : IConfig(p_mgr, p_topConfig) {\n  m_sessionName = QStringLiteral(\"widget\");\n}\n\nvoid WidgetConfig::init(const QJsonObject &p_app, const QJsonObject &p_user) {\n  const auto appObj = p_app.value(m_sessionName).toObject();\n  const auto userObj = p_user.value(m_sessionName).toObject();\n\n  {\n    m_outlineAutoExpandedLevel = READINT(QStringLiteral(\"outline_auto_expanded_level\"));\n    if (m_outlineAutoExpandedLevel < 0 || m_outlineAutoExpandedLevel > 6) {\n      m_outlineAutoExpandedLevel = 6;\n    }\n\n    m_outlineSectionNumberEnabled = READBOOL(QStringLiteral(\"outline_section_number_enabled\"));\n  }\n\n  m_findAndReplaceOptions =\n      static_cast<FindOptions>(READINT(QStringLiteral(\"find_and_replace_options\")));\n\n  m_notebookSelectorViewOrder = READINT(QStringLiteral(\"notebook_selector_view_order\"));\n\n  {\n    m_nodeExplorerViewOrder = READINT(QStringLiteral(\"node_explorer_view_order\"));\n    m_nodeExplorerExploreMode = READINT(QStringLiteral(\"node_explorer_explore_mode\"));\n    m_nodeExplorerExternalFilesVisible =\n        READBOOL(QStringLiteral(\"node_explorer_external_files_visible\"));\n    m_nodeExplorerAutoImportExternalFilesEnabled =\n        READBOOL(QStringLiteral(\"node_explorer_auto_import_external_files_enabled\"));\n    m_nodeExplorerCloseBeforeOpenWithEnabled =\n        READBOOL(QStringLiteral(\"node_explorer_close_before_open_with_enabled\"));\n  }\n\n  m_searchPanelAdvancedSettingsVisible =\n      READBOOL(QStringLiteral(\"search_panel_advanced_settings_visible\"));\n\n  m_mainWindowKeepDocksExpandingContentArea =\n      READSTRLIST(QStringLiteral(\"main_window_keep_docks_expanding_content_area\"));\n\n  m_snippetPanelBuiltInSnippetsVisible =\n      READBOOL(QStringLiteral(\"snippet_panel_builtin_snippets_visible\"));\n\n  m_tagExplorerTwoColumnsEnabled = READBOOL(QStringLiteral(\"tag_explorer_two_columns_enabled\"));\n\n  m_newNoteDefaultFileType = READINT(QStringLiteral(\"new_note_default_file_type\"));\n\n  m_unitedEntryExpandAllEnabled = READBOOL(QStringLiteral(\"united_entry_expand_all\"));\n}\n\nQJsonObject WidgetConfig::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"outline_auto_expanded_level\")] = m_outlineAutoExpandedLevel;\n  obj[QStringLiteral(\"outline_section_number_enabled\")] = m_outlineSectionNumberEnabled;\n\n  obj[QStringLiteral(\"find_and_replace_options\")] = static_cast<int>(m_findAndReplaceOptions);\n\n  obj[QStringLiteral(\"notebook_selector_view_order\")] = m_notebookSelectorViewOrder;\n\n  obj[QStringLiteral(\"node_explorer_view_order\")] = m_nodeExplorerViewOrder;\n  obj[QStringLiteral(\"node_explorer_explore_mode\")] = m_nodeExplorerExploreMode;\n  obj[QStringLiteral(\"node_explorer_external_files_visible\")] = m_nodeExplorerExternalFilesVisible;\n  obj[QStringLiteral(\"node_explorer_auto_import_external_files_enabled\")] =\n      m_nodeExplorerAutoImportExternalFilesEnabled;\n  obj[QStringLiteral(\"node_explorer_close_before_open_with_enabled\")] =\n      m_nodeExplorerCloseBeforeOpenWithEnabled;\n\n  obj[QStringLiteral(\"search_panel_advanced_settings_visible\")] =\n      m_searchPanelAdvancedSettingsVisible;\n  obj[QStringLiteral(\"snippet_panel_builtin_snippets_visible\")] =\n      m_snippetPanelBuiltInSnippetsVisible;\n  obj[QStringLiteral(\"tag_explorer_two_columns_enabled\")] = m_tagExplorerTwoColumnsEnabled;\n  writeStringList(obj, QStringLiteral(\"main_window_keep_docks_expanding_content_area\"),\n                  m_mainWindowKeepDocksExpandingContentArea);\n  obj[QStringLiteral(\"new_note_default_file_type\")] = m_newNoteDefaultFileType;\n  obj[QStringLiteral(\"united_entry_expand_all\")] = m_unitedEntryExpandAllEnabled;\n  return obj;\n}\n\nint WidgetConfig::getOutlineAutoExpandedLevel() const { return m_outlineAutoExpandedLevel; }\n\nvoid WidgetConfig::setOutlineAutoExpandedLevel(int p_level) {\n  updateConfig(m_outlineAutoExpandedLevel, p_level, this);\n}\n\nbool WidgetConfig::getOutlineSectionNumberEnabled() const { return m_outlineSectionNumberEnabled; }\n\nvoid WidgetConfig::setOutlineSectionNumberEnabled(bool p_enabled) {\n  updateConfig(m_outlineSectionNumberEnabled, p_enabled, this);\n}\n\nFindOptions WidgetConfig::getFindAndReplaceOptions() const { return m_findAndReplaceOptions; }\n\nvoid WidgetConfig::setFindAndReplaceOptions(FindOptions p_options) {\n  updateConfig(m_findAndReplaceOptions, p_options, this);\n}\n\nint WidgetConfig::getNodeExplorerViewOrder() const { return m_nodeExplorerViewOrder; }\n\nvoid WidgetConfig::setNodeExplorerViewOrder(int p_viewOrder) {\n  updateConfig(m_nodeExplorerViewOrder, p_viewOrder, this);\n}\n\nint WidgetConfig::getNotebookSelectorViewOrder() const { return m_notebookSelectorViewOrder; }\n\nvoid WidgetConfig::setNotebookSelectorViewOrder(int p_viewOrder) {\n  updateConfig(m_notebookSelectorViewOrder, p_viewOrder, this);\n}\n\nint WidgetConfig::getNodeExplorerExploreMode() const { return m_nodeExplorerExploreMode; }\n\nvoid WidgetConfig::setNodeExplorerExploreMode(int p_mode) {\n  updateConfig(m_nodeExplorerExploreMode, p_mode, this);\n}\n\nbool WidgetConfig::isNodeExplorerExternalFilesVisible() const {\n  return m_nodeExplorerExternalFilesVisible;\n}\n\nvoid WidgetConfig::setNodeExplorerExternalFilesVisible(bool p_visible) {\n  updateConfig(m_nodeExplorerExternalFilesVisible, p_visible, this);\n}\n\nbool WidgetConfig::getNodeExplorerAutoImportExternalFilesEnabled() const {\n  return m_nodeExplorerAutoImportExternalFilesEnabled;\n}\n\nvoid WidgetConfig::setNodeExplorerAutoImportExternalFilesEnabled(bool p_enabled) {\n  updateConfig(m_nodeExplorerAutoImportExternalFilesEnabled, p_enabled, this);\n}\n\nbool WidgetConfig::getNodeExplorerCloseBeforeOpenWithEnabled() const {\n  return m_nodeExplorerCloseBeforeOpenWithEnabled;\n}\n\nvoid WidgetConfig::setNodeExplorerCloseBeforeOpenWithEnabled(bool p_enabled) {\n  updateConfig(m_nodeExplorerCloseBeforeOpenWithEnabled, p_enabled, this);\n}\n\nbool WidgetConfig::isSearchPanelAdvancedSettingsVisible() const {\n  return m_searchPanelAdvancedSettingsVisible;\n}\n\nvoid WidgetConfig::setSearchPanelAdvancedSettingsVisible(bool p_visible) {\n  updateConfig(m_searchPanelAdvancedSettingsVisible, p_visible, this);\n}\n\nconst QStringList &WidgetConfig::getMainWindowKeepDocksExpandingContentArea() const {\n  return m_mainWindowKeepDocksExpandingContentArea;\n}\n\nvoid WidgetConfig::setMainWindowKeepDocksExpandingContentArea(const QStringList &p_docks) {\n  updateConfig(m_mainWindowKeepDocksExpandingContentArea, p_docks, this);\n}\n\nbool WidgetConfig::isSnippetPanelBuiltInSnippetsVisible() const {\n  return m_snippetPanelBuiltInSnippetsVisible;\n}\n\nvoid WidgetConfig::setSnippetPanelBuiltInSnippetsVisible(bool p_visible) {\n  updateConfig(m_snippetPanelBuiltInSnippetsVisible, p_visible, this);\n}\n\nbool WidgetConfig::getTagExplorerTwoColumnsEnabled() const {\n  return m_tagExplorerTwoColumnsEnabled;\n}\n\nvoid WidgetConfig::setTagExplorerTwoColumnsEnabled(bool p_enabled) {\n  updateConfig(m_tagExplorerTwoColumnsEnabled, p_enabled, this);\n}\n\nint WidgetConfig::getNewNoteDefaultFileType() const { return m_newNoteDefaultFileType; }\n\nvoid WidgetConfig::setNewNoteDefaultFileType(int p_type) {\n  updateConfig(m_newNoteDefaultFileType, p_type, this);\n}\n\nbool WidgetConfig::getUnitedEntryExpandAllEnabled() const { return m_unitedEntryExpandAllEnabled; }\n\nvoid WidgetConfig::setUnitedEntryExpandAllEnabled(bool p_enabled) {\n  updateConfig(m_unitedEntryExpandAllEnabled, p_enabled, this);\n}\n"
  },
  {
    "path": "src/core/widgetconfig.h",
    "content": "#ifndef WIDGETCONFIG_H\n#define WIDGETCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"global.h\"\n\n#include <QString>\n\nnamespace vnotex {\nclass WidgetConfig : public IConfig {\npublic:\n  WidgetConfig(ConfigMgr *p_mgr, IConfig *p_topConfig);\n\n  void init(const QJsonObject &p_app, const QJsonObject &p_user) Q_DECL_OVERRIDE;\n\n  QJsonObject toJson() const Q_DECL_OVERRIDE;\n\n  int getOutlineAutoExpandedLevel() const;\n  void setOutlineAutoExpandedLevel(int p_level);\n\n  bool getOutlineSectionNumberEnabled() const;\n  void setOutlineSectionNumberEnabled(bool p_enabled);\n\n  FindOptions getFindAndReplaceOptions() const;\n  void setFindAndReplaceOptions(FindOptions p_options);\n\n  int getNotebookSelectorViewOrder() const;\n  void setNotebookSelectorViewOrder(int p_viewOrder);\n\n  int getNodeExplorerViewOrder() const;\n  void setNodeExplorerViewOrder(int p_viewOrder);\n\n  int getNodeExplorerExploreMode() const;\n  void setNodeExplorerExploreMode(int p_mode);\n\n  bool isNodeExplorerExternalFilesVisible() const;\n  void setNodeExplorerExternalFilesVisible(bool p_visible);\n\n  bool getNodeExplorerAutoImportExternalFilesEnabled() const;\n  void setNodeExplorerAutoImportExternalFilesEnabled(bool p_enabled);\n\n  bool getNodeExplorerCloseBeforeOpenWithEnabled() const;\n  void setNodeExplorerCloseBeforeOpenWithEnabled(bool p_enabled);\n\n  bool isSearchPanelAdvancedSettingsVisible() const;\n  void setSearchPanelAdvancedSettingsVisible(bool p_visible);\n\n  const QStringList &getMainWindowKeepDocksExpandingContentArea() const;\n  void setMainWindowKeepDocksExpandingContentArea(const QStringList &p_docks);\n\n  bool isSnippetPanelBuiltInSnippetsVisible() const;\n  void setSnippetPanelBuiltInSnippetsVisible(bool p_visible);\n\n  bool getTagExplorerTwoColumnsEnabled() const;\n  void setTagExplorerTwoColumnsEnabled(bool p_enabled);\n\n  int getNewNoteDefaultFileType() const;\n  void setNewNoteDefaultFileType(int p_type);\n\n  bool getUnitedEntryExpandAllEnabled() const;\n  void setUnitedEntryExpandAllEnabled(bool p_enabled);\n\nprivate:\n  int m_outlineAutoExpandedLevel = 6;\n\n  bool m_outlineSectionNumberEnabled = false;\n\n  FindOptions m_findAndReplaceOptions = FindOption::FindNone;\n\n  int m_notebookSelectorViewOrder = 0;\n\n  int m_nodeExplorerViewOrder = 0;\n\n  int m_nodeExplorerExploreMode = 1;\n\n  bool m_nodeExplorerExternalFilesVisible = true;\n\n  bool m_nodeExplorerAutoImportExternalFilesEnabled = true;\n\n  bool m_nodeExplorerCloseBeforeOpenWithEnabled = true;\n\n  bool m_searchPanelAdvancedSettingsVisible = true;\n\n  // Object name of those docks that should be kept when expanding content area.\n  QStringList m_mainWindowKeepDocksExpandingContentArea;\n\n  bool m_snippetPanelBuiltInSnippetsVisible = true;\n\n  // Whether enable two columns for tag explorer.\n  bool m_tagExplorerTwoColumnsEnabled = false;\n\n  int m_newNoteDefaultFileType = 0;\n\n  bool m_unitedEntryExpandAllEnabled = false;\n};\n} // namespace vnotex\n\n#endif // WIDGETCONFIG_H\n"
  },
  {
    "path": "src/data/core/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>CFBundleDocumentTypes</key>\n    <array>\n        <dict>\n            <key>CFBundleTypeIconFile</key>\n            <string>vnote.icns</string>\n            <key>CFBundleTypeName</key>\n            <string>VNote Document</string>\n            <key>CFBundleTypeRole</key>\n            <string>Editor</string>\n            <key>LSItemContentTypes</key>\n            <array>\n                <string>public.plain-text</string>\n                <string>net.daringfireball.markdown</string>\n            </array>\n            <key>LSHandlerRank</key>\n            <string>Owner</string>\n        </dict>\n    </array>\n    <key>CFBundleName</key>\n    <string>VNote</string>\n    <key>CFBundleExecutable</key>\n    <string>VNote</string>\n    <key>CFBundleShortVersionString</key>\n    <string>3.20</string>\n    <key>CFBundleVersion</key>\n    <string>3.20.1</string>\n    <key>NSHumanReadableCopyright</key>\n    <string>Distributed under LGPL-3.0 license. Copyright (c) 2025 app.vnote.fun</string>\n    <key>CFBundleIconFile</key>\n    <string>vnote.icns</string>\n    <key>CFBundleIdentifier</key>\n    <string>fun.vnote.vnote</string>\n    <key>CFBundlePackageType</key>\n    <string>APPL</string>\n    <key>LSApplicationCategoryType</key>\n    <string>public.app-category.productivity</string>\n    <key>LSMinimumSystemVersion</key>\n    <string>10.15</string>\n    <key>NOTE</key>\n    <string>A pleasant note-taking platform</string>\n    <key>NSPrincipalClass</key>\n    <string>NSApplication</string>\n    <key>NSSupportsAutomaticGraphicsSwitching</key>\n    <true/>\n    <key>NSRequiresAquaSystemAppearance</key>\n    <true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "src/data/core/core.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/vnotex/data/core\">\n        <file>vnotex.json</file>\n        <file>icons/vnote.icns</file>\n        <file>icons/vnote.ico</file>\n        <file>icons/new_note.svg</file>\n        <file>icons/notebook_menu.svg</file>\n        <file>icons/task_menu.svg</file>\n        <file>icons/united_entry.svg</file>\n        <file>icons/busy.svg</file>\n        <file>icons/advanced_settings.svg</file>\n        <file>icons/discard_editor.svg</file>\n        <file>icons/edit_editor.svg</file>\n        <file>icons/read_editor.svg</file>\n        <file>icons/view_mode_editor.svg</file>\n        <file>icons/expand.svg</file>\n        <file>icons/fullscreen.svg</file>\n        <file>icons/tag_dock.svg</file>\n        <file>icons/tag.svg</file>\n        <file>icons/tag_selected.svg</file>\n        <file>icons/menu.svg</file>\n        <file>icons/settings.svg</file>\n        <file>icons/view.svg</file>\n        <file>icons/inplace_preview_editor.svg</file>\n        <file>icons/image_host_editor.svg</file>\n        <file>icons/import_menu.svg</file>\n        <file>icons/export_menu.svg</file>\n        <file>icons/flash_page_menu.svg</file>\n        <file>icons/quick_access_menu.svg</file>\n        <file>icons/notebook_default.svg</file>\n        <file>icons/file_node.svg</file>\n        <file>icons/folder_node.svg</file>\n        <file>icons/other_item.svg</file>\n        <file>icons/manage_notebooks.svg</file>\n        <file>icons/up_level.svg</file>\n        <file>icons/properties.svg</file>\n        <file>icons/recycle_bin.svg</file>\n        <file>icons/scan_import.svg</file>\n        <file>icons/search_location_list.svg</file>\n        <file>icons/save_editor.svg</file>\n        <file>icons/buffer.svg</file>\n        <file>icons/attachment_editor.svg</file>\n        <file>icons/attachment_full_editor.svg</file>\n        <file>icons/tag_editor.svg</file>\n        <file>icons/word_count_editor.svg</file>\n        <file>icons/split_menu.svg</file>\n        <file>icons/split_window_list.svg</file>\n        <file>icons/type_heading_editor.svg</file>\n        <file>icons/type_bold_editor.svg</file>\n        <file>icons/type_italic_editor.svg</file>\n        <file>icons/type_strikethrough_editor.svg</file>\n        <file>icons/type_unordered_list_editor.svg</file>\n        <file>icons/type_ordered_list_editor.svg</file>\n        <file>icons/type_todo_list_editor.svg</file>\n        <file>icons/type_checked_todo_list_editor.svg</file>\n        <file>icons/type_code_editor.svg</file>\n        <file>icons/type_code_block_editor.svg</file>\n        <file>icons/type_math_editor.svg</file>\n        <file>icons/type_math_block_editor.svg</file>\n        <file>icons/type_quote_editor.svg</file>\n        <file>icons/type_link_editor.svg</file>\n        <file>icons/type_image_editor.svg</file>\n        <file>icons/type_mark_editor.svg</file>\n        <file>icons/type_table_editor.svg</file>\n        <file>icons/add.svg</file>\n        <file>icons/clear.svg</file>\n        <file>icons/open_folder.svg</file>\n        <file>icons/open_file.svg</file>\n        <file>icons/copy_path.svg</file>\n        <file>icons/new_file.svg</file>\n        <file>icons/new_folder.svg</file>\n        <file>icons/decrease_outline_level.svg</file>\n        <file>icons/increase_outline_level.svg</file>\n        <file>icons/minimize.svg</file>\n        <file>icons/maximize.svg</file>\n        <file>icons/maximize_restore.svg</file>\n        <file>icons/close.svg</file>\n        <file>icons/delete.svg</file>\n        <file>icons/debug_editor.svg</file>\n        <file>icons/print_editor.svg</file>\n        <file>icons/stay_on_top.svg</file>\n        <file>icons/outline_editor.svg</file>\n        <file>icons/find_replace_editor.svg</file>\n        <file>icons/search.svg</file>\n        <file>icons/cancel.svg</file>\n        <file>icons/section_number_editor.svg</file>\n        <file>icons/sort.svg</file>\n        <file>icons/navigation_dock.svg</file>\n        <file>icons/history_dock.svg</file>\n        <file>icons/outline_dock.svg</file>\n        <file>icons/windows_dock.svg</file>\n        <file>icons/search_dock.svg</file>\n        <file>icons/snippet_dock.svg</file>\n        <file>icons/location_list_dock.svg</file>\n        <file>icons/console_dock.svg</file>\n        <file>logo/vnote.svg</file>\n        <file>logo/vnote.png</file>\n        <file>logo/256x256/vnote.png</file>\n        <file>logo/vnote_mono.png</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "src/data/core/fun.vnote.app.VNote.metainfo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component type=\"desktop-application\">\n   <id>fun.vnote.app.VNote</id>\n   <name>VNote</name>\n   <summary>A pleasant note-taking platform</summary>\n   <developer_name>Le Tan</developer_name>\n   <metadata_license>CC0-1.0</metadata_license>\n   <project_license>LGPL-3.0-only</project_license>\n   <description>\n      <p>Simple notes management</p>\n      <ul>\n         <li>All plain text, no database</li>\n         <li>Self-contained notebooks, infinite levels of folders, plain notes</li>\n         <li>Tags and attachments</li>\n         <li>Explore and edit external files</li>\n      </ul>\n      <p>Own your data</p>\n      <ul>\n         <li>All files on your local disk</li>\n         <li>One notebook is exactly one directory</li>\n         <li>Work from anywhere seamlessly via third-party service of your choice</li>\n      </ul>\n      <p>Concentration</p>\n      <ul>\n         <li>In-place preview or side-by-side live preview</li>\n         <li>Focus on your note in both read and edit mode</li>\n      </ul>\n      <p>Pleasant Markdown experience</p>\n      <ul>\n         <li>Minimized gap between read and write of Markdown</li>\n         <li>Syntax highlights and in-place preview</li>\n         <li>Effective images management</li>\n         <li>Interactive outline</li>\n         <li>UML diagrams, flowcharts, and math formulas</li>\n      </ul>\n      <p>Highly customizable</p>\n      <ul>\n         <li>Themes and styles</li>\n         <li>Shortcuts and behaviors</li>\n      </ul>\n      <p>By programmers, for programmers</p>\n      <ul>\n         <li>Vi mode and Vi-like navigation</li>\n         <li>Line number in editor</li>\n         <li>Multiple tabs</li>\n         <li>Window splits</li>\n         <li>Fuzzy search and jump</li>\n         <li>Versatile shortcuts</li>\n      </ul>\n   </description>\n   <launchable type=\"desktop-id\">fun.vnote.app.VNote.desktop</launchable>\n   <url type=\"donation\">https://github.com/vnotex/vnote#donate</url>\n   <url type=\"faq\">https://app.vnote.fun/en_us/#!docs/Users/Frequently%20Asked%20Questions.md</url>\n   <url type=\"help\">https://join.slack.com/t/vnote/shared_invite/enQtNDg2MzY0NDg3NzI4LTQ1Yzk1YjA5MjAyYTU0MjJkMTUxNmRiYWQ2YjlkOWU0ZGZlMTFlZTAxNzg0ZGUyNzI0ZGY2NDg4MmU1M2FkMDg</url>\n   <url type=\"homepage\">https://app.vnote.fun/</url>\n   <url type=\"vcs-browser\">https://github.com/vnotex/vnote</url>   \n   <screenshots>\n      <screenshot type=\"default\">\n         <image>https://app.vnote.fun/en_us/vx_images/90420129296.png</image>\n      </screenshot>\n      <screenshot>\n         <image>https://app.vnote.fun/en_us/vx_images/4085821110870.png</image>\n      </screenshot>\n   </screenshots>\n   <content_rating type=\"oars-1.1\" />\n   <releases>\n      <release version=\"3.18.2\" date=\"2024-08-06\" />\n      <release version=\"3.18.1\" date=\"2024-07-10\" />\n      <release version=\"3.18.0\" date=\"2024-07-01\" />      \n      <release version=\"3.17.0\" date=\"2023-09-27\" />\n   </releases>\n</component>\n\n"
  },
  {
    "path": "src/data/core/icons/vnote.rc",
    "content": "IDI_ICON1               ICON    DISCARDABLE     \"vnote.ico\"\n"
  },
  {
    "path": "src/data/core/translations/vnote_ja.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ja_JP\">\n<context>\n    <name>QMessageBox</name>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"12\"/>\n        <source>Question</source>\n        <translation>質問</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"16\"/>\n        <source>Information</source>\n        <translation>情報</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"20\"/>\n        <source>Warning</source>\n        <translation>警告</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"24\"/>\n        <source>Critical</source>\n        <translation>クリティカル</translation>\n    </message>\n</context>\n<context>\n    <name>QObject</name>\n    <message>\n        <location filename=\"../../../core/notebook/bundlenotebookfactory.cpp\" line=\"27\"/>\n        <source>Bundle Notebook</source>\n        <translation>ノートブックのバンドル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebook/bundlenotebookfactory.cpp\" line=\"32\"/>\n        <source>A notebook with configuration files to track its content</source>\n        <translation>コンテンツを追跡するための構成ファイルを備えたノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookbackend/localnotebookbackendfactory.cpp\" line=\"20\"/>\n        <source>Local Notebook Backend</source>\n        <translation>ローカルノートブックバックエンド</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookbackend/localnotebookbackendfactory.cpp\" line=\"25\"/>\n        <source>Local file system</source>\n        <translation>ローカルファイルシステム</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp\" line=\"12\"/>\n        <source>VNoteX Notebook Configuration</source>\n        <translation>VNoteXノートブック設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp\" line=\"14\"/>\n        <source>Built-in VNoteX notebook configuration</source>\n        <translation>内蔵のVNoteXノートブック設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/versioncontroller/dummyversioncontrollerfactory.cpp\" line=\"20\"/>\n        <source>No Version Control</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/versioncontroller/dummyversioncontrollerfactory.cpp\" line=\"25\"/>\n        <source>Disable version control</source>\n        <translation>バージョン管理を無効にする</translation>\n    </message>\n</context>\n<context>\n    <name>QWebEnginePage</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"316\"/>\n        <source>&amp;Back</source>\n        <translation>戻る(&amp;B)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"317\"/>\n        <source>&amp;Forward</source>\n        <translation>進む(&amp;F)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"318\"/>\n        <source>&amp;Reload</source>\n        <translation>再読み込み(&amp;R)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::AppearancePage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"32\"/>\n        <source>System title bar</source>\n        <translation>システムタイトルバー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"34\"/>\n        <source>Use system title bar</source>\n        <translation>システムタイトルバーを使用</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"43\"/>\n        <source>Icon size of the main window tool bar</source>\n        <translation>メインウィンドウツールバーのアイコンサイズ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"48\"/>\n        <source>Main tool bar icon size:</source>\n        <translation>メインツールバーアイコンのサイズ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"70\"/>\n        <source>Dock widgets kept when expanding content area:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"125\"/>\n        <source>Appearance</source>\n        <translation>外観</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::AttachmentPopup</name>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"63\"/>\n        <source>Add</source>\n        <translation>追加</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"73\"/>\n        <source>Select Files As Attachments</source>\n        <translation>添付するファイルを選択</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"93\"/>\n        <source>New File</source>\n        <translation>新規ファイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"101\"/>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"125\"/>\n        <source>New Attachment</source>\n        <translation>新規添付ファイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"102\"/>\n        <source>File name:</source>\n        <translation>ファイル名:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"117\"/>\n        <source>New Folder</source>\n        <translation>新規フォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"126\"/>\n        <source>Folder name:</source>\n        <translation>フォルダ名:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"141\"/>\n        <source>Open Folder</source>\n        <translation>フォルダを開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"157\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"178\"/>\n        <source>Delete</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"215\"/>\n        <source>Copy Path</source>\n        <translation type=\"unfinished\">パスをコピー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"231\"/>\n        <source>Properties</source>\n        <translation type=\"unfinished\">設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"250\"/>\n        <source>Failed to rename attachment (%1) to (%2).</source>\n        <translation>添付ファイル(%1)の(%2)への名前変更に失敗しました。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"251\"/>\n        <source>Please try another name again.</source>\n        <translation>別の名前を選択して再実施してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"290\"/>\n        <source>Please select one directory to continue.</source>\n        <translation>続行するディレクトリを1つ選択してください。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Buffer</name>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"47\"/>\n        <source>Markdown</source>\n        <translation>Markdown</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"66\"/>\n        <source>Text</source>\n        <translation>テキスト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"82\"/>\n        <source>Portable Document Format</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"99\"/>\n        <source>Mind Map</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"115\"/>\n        <source>Others</source>\n        <translation>その他</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ConsoleViewer</name>\n    <message>\n        <location filename=\"../../../widgets/consoleviewer.cpp\" line=\"44\"/>\n        <source>Clear</source>\n        <translation type=\"unfinished\">クリア</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::DeleteConfirmDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/deleteconfirmdialog.cpp\" line=\"62\"/>\n        <source>Do not ask again</source>\n        <translation>今後、再確認しない</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/deleteconfirmdialog.cpp\" line=\"210\"/>\n        <source>%1/%2 Items</source>\n        <translation>%1/%2アイテム</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::DockWidgetHelper</name>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"143\"/>\n        <source>Navigation</source>\n        <translation type=\"unfinished\">ナビゲーション</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"154\"/>\n        <source>Outline</source>\n        <translation type=\"unfinished\">アウトライン</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"165\"/>\n        <source>Open Windows</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"176\"/>\n        <source>Console</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"188\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\">検索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"199\"/>\n        <source>Snippets</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"210\"/>\n        <source>History</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"221\"/>\n        <source>Tags</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"232\"/>\n        <source>Location List</source>\n        <translation type=\"unfinished\">ロケーションリスト</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::EditorPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"32\"/>\n        <source>Auto save policy</source>\n        <translation>自動保存ポリシー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"34\"/>\n        <source>None</source>\n        <translation>なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"35\"/>\n        <source>Auto Save</source>\n        <translation>自動保存</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"36\"/>\n        <source>Backup File</source>\n        <translation>バックアップファイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"38\"/>\n        <source>Auto save policy:</source>\n        <translation>自動保存ポリシー:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"47\"/>\n        <source>Line ending</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"49\"/>\n        <source>Follow Platform</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"50\"/>\n        <source>Follow File</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"51\"/>\n        <source>LF (Linux/macOS)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"52\"/>\n        <source>CR LF (Windows)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"53\"/>\n        <source>CR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"55\"/>\n        <source>Line ending:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"64\"/>\n        <source>Icon size of the editor tool bar</source>\n        <translation>Icon size of the editor tool bar</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"69\"/>\n        <source>Tool bar icon size:</source>\n        <translation>ツールバーのアイコンサイズ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"81\"/>\n        <source>Default dictionary used for spell check</source>\n        <translation>スペルチェックに使用するデフォルト辞書</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"91\"/>\n        <source>Add Dictionary</source>\n        <translation>辞書を追加</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"97\"/>\n        <source>VNote uses [Hunspell](http://hunspell.github.io/) for spell check.</source>\n        <translation>VNoteはスペルチェックには[Hunspell](http://hunspell.github.io/)を使用します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"98\"/>\n        <source>Please download Hunspell&apos;s dictionaries, put them under (%1) and restart VNote.</source>\n        <translation>Hunspellの辞書をダウンロードして(%1)の下に置き、VNoteを再起動してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"107\"/>\n        <source>Spell check dictionary:</source>\n        <translation>スペルチェック辞書:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"166\"/>\n        <source>Editor</source>\n        <translation>エディタ</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ExportDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"90\"/>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"255\"/>\n        <source>Export</source>\n        <translation>エクスポート</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"95\"/>\n        <source>Source</source>\n        <translation>ソース</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"101\"/>\n        <source>Current Buffer (%1)</source>\n        <translation>現在のバッファ(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"105\"/>\n        <source>Current Note (%1)</source>\n        <translation>現在のノート(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"109\"/>\n        <source>Current Folder (%1)</source>\n        <translation>現在のフォルダ(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"113\"/>\n        <source>Current Notebook (%1)</source>\n        <translation>現在のノートブック(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"116\"/>\n        <source>Source:</source>\n        <translation>ソース:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"128\"/>\n        <source>vnote_exports</source>\n        <translation>vnote_exports</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"133\"/>\n        <source>Target</source>\n        <translation>ターゲット</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"138\"/>\n        <source>Markdown</source>\n        <translation>Markdown</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"140\"/>\n        <source>HTML</source>\n        <translation>HTML</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"142\"/>\n        <source>PDF</source>\n        <translation>PDF</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"144\"/>\n        <source>Custom</source>\n        <translation>カスタム</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"168\"/>\n        <source>Format:</source>\n        <translation>フォーマット:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"172\"/>\n        <source>Use transparent background</source>\n        <translation>透明な背景を使用する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"180\"/>\n        <source>Rendering style:</source>\n        <translation>レンダリングスタイル:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"186\"/>\n        <source>Syntax highlighting style:</source>\n        <translation>構文強調表示スタイル:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"442\"/>\n        <source>Please specify a valid scheme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"654\"/>\n        <source>Add Table-of-Contents</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"661\"/>\n        <source>Use wkhtmltopdf (outline supported)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"676\"/>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"773\"/>\n        <source>Export all source files into one file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"691\"/>\n        <source>Browse</source>\n        <translation>ブラウズ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"786\"/>\n        <source>Command:\n\t%1: List of input files.\n\t%2: List of paths to search for images and other resources.\n\t%3: Path of rendering CSS style sheet.\n\t%4: Path of syntax highlighting CSS style sheet.\n\t%5: Path of output file.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"905\"/>\n        <source>New Custom Export Scheme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"905\"/>\n        <source>Scheme name:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"912\"/>\n        <source>Name conflicts with existing scheme.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"946\"/>\n        <source>Delete scheme (%1)?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"203\"/>\n        <source>Select Export Output Directory</source>\n        <translation>エクスポート出力ディレクトリの選択</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"194\"/>\n        <source>Output directory:</source>\n        <translation>出力ディレクトリ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"219\"/>\n        <source>Advanced</source>\n        <translation>詳細</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"237\"/>\n        <source>Process sub-folders</source>\n        <translation>サブフォルダを処理する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"242\"/>\n        <source>Export attachments</source>\n        <translation>添付ファイルのエクスポート</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"259\"/>\n        <source>Open Directory</source>\n        <translation>ディレクトリを開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"268\"/>\n        <source>Copy Content</source>\n        <translation>コンテンツをコピー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"269\"/>\n        <source>Copy exported file content</source>\n        <translation>エクスポートされたファイルの内容をコピーする</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"389\"/>\n        <source>%n file(s) exported</source>\n        <translation>\n            <numerusform>%n ファイルがエクスポートされました</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"402\"/>\n        <source>Cancelling the export</source>\n        <translation>エクスポートをキャンセルしています</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"433\"/>\n        <source>Please specify a valid wkhtmltopdf executable file (%1)</source>\n        <translation>有効なwkhtmltopdf実行ファイル(%1)を指定してください</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"526\"/>\n        <source>Embed styles</source>\n        <translation>スタイルの埋め込み</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"531\"/>\n        <source>Embed images</source>\n        <translation>画像の埋め込み</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"536\"/>\n        <source>Complete page</source>\n        <translation>完全なページ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"537\"/>\n        <source>Export the whole page along with images which may change the links structure</source>\n        <translation>リンク構造を変更する可能性のある画像と共にページ全体をエクスポートする</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"547\"/>\n        <source>Mime HTML format</source>\n        <translation>Mime HTMLフォーマット</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"561\"/>\n        <source>Add outline panel</source>\n        <translation>アウトライン・パネルの追加</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"632\"/>\n        <source>Settings</source>\n        <translation>設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"650\"/>\n        <source>Page layout:</source>\n        <translation>ページレイアウト:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"664\"/>\n        <source>Download</source>\n        <translation>ダウンロード</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"675\"/>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"772\"/>\n        <source>All-in-One</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"696\"/>\n        <source>Select wkhtmltopdf Executable</source>\n        <translation>wkhtmltopdfの実行ファイルを選択</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"704\"/>\n        <source>Wkhtmltopdf path:</source>\n        <translation>wkhtmltopdf パス:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"709\"/>\n        <source>Wkhtmltopdf arguments:</source>\n        <translation>wkhtmltopdf の引数:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"731\"/>\n        <source>Scheme:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"737\"/>\n        <source>New</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"743\"/>\n        <source>Delete</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"752\"/>\n        <source>Suffix of the target file like docs/pdf/epub</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"754\"/>\n        <source>Target file suffix:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"759\"/>\n        <source>Separator used to concatenate resource folder paths</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"761\"/>\n        <source>Resource path separator:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"765\"/>\n        <source>Use HTML format as input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"766\"/>\n        <source>Convert to HTMl format first as the input of the custom export command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"779\"/>\n        <source>Target page scrollable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"780\"/>\n        <source>Whether the page of the target file is scrollable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"883\"/>\n        <source>Portrait</source>\n        <translation>縦長書式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"883\"/>\n        <source>Landscape</source>\n        <translation>横長書式</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Exporter</name>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"32\"/>\n        <source>Skipped buffer (%1) without file base.</source>\n        <translation>ファイルベースのないバッファ(%1)をスキップしました。</translation>\n    </message>\n    <message>\n        <source>Failed to create output folder %1.</source>\n        <translation type=\"vanished\">出力フォルダ%1の作成に失敗しました。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"64\"/>\n        <source>Format %1 is not supported to export as Markdown.</source>\n        <translation>フォーマット%1はMarkdownとしてエクスポートできません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"38\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"120\"/>\n        <source>Failed to create output folder (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"73\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"139\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"189\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"297\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"406\"/>\n        <source>Failed to create output folder under (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"170\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"245\"/>\n        <source>all_in_one_export</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"174\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"253\"/>\n        <source>Exported to (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"304\"/>\n        <source>Failed to load node (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"356\"/>\n        <source>Unknown target format %1.</source>\n        <translation>不明なターゲットフォーマット %1 。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"361\"/>\n        <source>File (%1) exported to (%2)</source>\n        <translation>ファイル(%1)を(%2)にエクスポートしました</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"363\"/>\n        <source>Failed to export file (%1)</source>\n        <translation>ファイル(%1)のエクスポートに失敗しました</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"620\"/>\n        <source>Custom command: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"136\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"186\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"404\"/>\n        <source>notebook_%1</source>\n        <translation>ノートブック_%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"146\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"200\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"545\"/>\n        <source>Failed to create temporary directory to hold HTML files.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"443\"/>\n        <source>Format %1 is not supported to export as HTML.</source>\n        <translation>フォーマット %1 はHTMLとしてエクスポートできません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"503\"/>\n        <source>Asked to stop. Aborting.</source>\n        <translation>止めるように言われました。中止します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"514\"/>\n        <source>Format %1 is not supported to export as PDF.</source>\n        <translation>フォーマット %1 はPDFとしてエクスポートできません。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FileAssociationPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"35\"/>\n        <source>Built-In File Types</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"39\"/>\n        <source>External Programs</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"82\"/>\n        <source>File Associations</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"102\"/>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"130\"/>\n        <source>Suffixes separated by ;</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"103\"/>\n        <source>List of suffixes for this file type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"131\"/>\n        <source>List of suffixes to open with external program (or system default program)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FilePropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"38\"/>\n        <source>Location:</source>\n        <translation>場所:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"42\"/>\n        <source>Name:</source>\n        <translation>名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"44\"/>\n        <source>Size:</source>\n        <translation>サイズ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"44\"/>\n        <source>%1 Bytes</source>\n        <translation>%1バイト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"48\"/>\n        <source>Properties</source>\n        <translation>設定</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FileSearchEngineWorker</name>\n    <message>\n        <location filename=\"../../../search/filesearchengine.cpp\" line=\"39\"/>\n        <source>Skip binary file (%1)</source>\n        <translation>バイナリファイル (%1) をスキップします</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FileSystemViewer</name>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"149\"/>\n        <source>&amp;Open</source>\n        <translation>開く(&amp;O)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"159\"/>\n        <source>&amp;Delete</source>\n        <translation>削除(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"169\"/>\n        <source>&amp;Properties</source>\n        <translation>設定(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"188\"/>\n        <source>Cop&amp;y Path</source>\n        <translation>パスをコピー(&amp;Y)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"194\"/>\n        <source>Copied path: %1</source>\n        <translation>コピーされたファイルパス: %1</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FindAndReplaceWidget</name>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"54\"/>\n        <source>Find And Replace</source>\n        <translation>検索/置換</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"64\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\">閉じる</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"76\"/>\n        <source>Find:</source>\n        <translation>検索:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"79\"/>\n        <source>Search</source>\n        <translation>検索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"88\"/>\n        <source>Find &amp;Next</source>\n        <translation>次を検索(&amp;N)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"94\"/>\n        <source>Find &amp;Previous</source>\n        <translation>前を検索(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"107\"/>\n        <source>Replace with:</source>\n        <translation>次で置換:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"110\"/>\n        <source>\\1, \\2 for back reference in regular expression</source>\n        <translation>正規表現の後方参照用に \\1, \\2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"113\"/>\n        <source>Replace</source>\n        <translation>置換</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"118\"/>\n        <source>Replace And Find</source>\n        <translation>検索と置換</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"123\"/>\n        <source>Replace All</source>\n        <translation>すべて置換</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"141\"/>\n        <source>&amp;Case sensitive</source>\n        <translation>大文字と小文字を区別(&amp;C)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"146\"/>\n        <source>&amp;Whole word only</source>\n        <translation>単語全体のみ(&amp;W)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"151\"/>\n        <source>Re&amp;gular expression</source>\n        <translation>正規表現(&amp;G)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"156\"/>\n        <source>&amp;Incremental search</source>\n        <translation>インクリメンタル検索(&amp;I)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FindUnitedEntry</name>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"29\"/>\n        <source>Search for files in notebooks</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"43\"/>\n        <source>Search for files in notebooks with advanced options for scope, object, target and so on.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"45\"/>\n        <source>Keywords to search for.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"48\"/>\n        <source>Search scope. Possible values: buffer/folder/notebook/all_notebook.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"49\"/>\n        <source>search_scope</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"54\"/>\n        <source>Search objects. Possible values: name/content/tag/path.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"55\"/>\n        <source>search_objects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"60\"/>\n        <source>Search targets. Possible values: file/folder/notebook.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"61\"/>\n        <source>search_targets</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"66\"/>\n        <source>Wildcard pattern of files to search.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"67\"/>\n        <source>file_pattern</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FolderFilesFilterWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"44\"/>\n        <source>Folder:</source>\n        <translation>フォルダ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"54\"/>\n        <source>Browse</source>\n        <translation>ブラウズ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"60\"/>\n        <source>Select Notebook Root Folder</source>\n        <translation>ノートブックルートフォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"72\"/>\n        <source>Select files:</source>\n        <translation>ファイルを選択:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"82\"/>\n        <source>Select All</source>\n        <translation>すべて置換</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"92\"/>\n        <source>Clear</source>\n        <translation>クリア</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FolderPropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"34\"/>\n        <source>Properties</source>\n        <translation>設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"59\"/>\n        <source>Please specify a name for the folder.</source>\n        <translation>フォルダの名前を指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"65\"/>\n        <source>Name conflicts with existing folder.</source>\n        <translation>名前が既存のフォルダと重複しています。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"93\"/>\n        <source>Failed to save folder (%1) in (%2) (%3).</source>\n        <translation>Failed to save folder (%1) in (%2) (%3).</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FullScreenToggleAction</name>\n    <message>\n        <location filename=\"../../../widgets/fullscreentoggleaction.cpp\" line=\"12\"/>\n        <source>F&amp;ull Screen</source>\n        <translation>フルスクリーン(&amp;F)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/fullscreentoggleaction.cpp\" line=\"14\"/>\n        <source>Exit F&amp;ull Screen</source>\n        <translation>フルスクリーン終了(&amp;A)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::GeneralPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"27\"/>\n        <source>Interface language</source>\n        <translation>インタフェースの言語</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"29\"/>\n        <source>Default</source>\n        <translation>既定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"36\"/>\n        <source>Language:</source>\n        <translation>言語:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"46\"/>\n        <source>OpenGL implementation used to render application</source>\n        <translation>アプリケーションのレンダリングに使用されるOpenGL実装</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"48\"/>\n        <source>None</source>\n        <translation>なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"49\"/>\n        <source>Desktop</source>\n        <translation>デスクトップ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"50\"/>\n        <source>OpenGL ES</source>\n        <translation>OpenGL ES</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"51\"/>\n        <source>Software</source>\n        <translation>ソフトウエア</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"53\"/>\n        <source>OpenGL:</source>\n        <translation>OpenGL:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"63\"/>\n        <source>Minimize to system tray</source>\n        <translation>システムトレイに最小化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"65\"/>\n        <source>Minimize to system tray when closed</source>\n        <translation>VNoteを閉じた後、システムトレイに最小化する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"74\"/>\n        <source>Recover last session on start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"76\"/>\n        <source>Recover last session (like buffers) on start of VNote</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"84\"/>\n        <source>Check for updates on start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"86\"/>\n        <source>Check for updates on start of VNote</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"150\"/>\n        <source>General</source>\n        <translation>一般</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::GitHubImageHost</name>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"79\"/>\n        <source>Failed to create image with empty path.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"84\"/>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"133\"/>\n        <source>Invalid GitHub image host configuration.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"94\"/>\n        <source>The resource already exists at the image host (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"97\"/>\n        <source>Failed to query the resource at the image host (%1) (%2) (%3).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"108\"/>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"115\"/>\n        <source>Failed to create resource at the image host (%1) (%2) (%3).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"174\"/>\n        <source>Failed to fetch SHA about the resource (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"185\"/>\n        <source>Failed to delete resource (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::GiteeImageHost</name>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"81\"/>\n        <source>Failed to create image with empty path.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"86\"/>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"139\"/>\n        <source>Invalid Gitee image host configuration.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"97\"/>\n        <source>The resource already exists at the image host (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"101\"/>\n        <source>Failed to query the resource at the image host (%1) (%2) (%3).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"113\"/>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"120\"/>\n        <source>Failed to create resource at the image host (%1) (%2) (%3).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"151\"/>\n        <source>Failed to fetch information about the resource (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"159\"/>\n        <source>Failed to fetch SHA about the resource (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"171\"/>\n        <source>Failed to delete resource (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::HelpUnitedEntry</name>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"11\"/>\n        <source>Help information about United Entry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"26\"/>\n        <source>Shortcut</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"26\"/>\n        <source>Description</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"28\"/>\n        <source>Close United Entry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"29\"/>\n        <source>Go to previous item</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"30\"/>\n        <source>Go to next item</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"31\"/>\n        <source>Go to the item one level up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"32\"/>\n        <source>Expand/Collapse current item</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"33\"/>\n        <source>Expand/Collapse all the items</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"34\"/>\n        <source>Activate current item</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"35\"/>\n        <source>Clear the input except the entry name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"36\"/>\n        <source>Select the entry name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"37\"/>\n        <source>Stop current entry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::HistoryPanel</name>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"72\"/>\n        <source>Clear</source>\n        <translation type=\"unfinished\">クリア</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"89\"/>\n        <source>&amp;Open</source>\n        <translation type=\"unfinished\">開く(&amp;O)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"99\"/>\n        <source>&amp;Locate Node</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"132\"/>\n        <source>Clear all the history?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"175\"/>\n        <source>Older</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"200\"/>\n        <source>Today</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"202\"/>\n        <source>Yesterday</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"204\"/>\n        <source>Last 7 Days</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"216\"/>\n        <source>%1\n%2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"219\"/>\n        <source>[%1] %2\n%3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImageHost</name>\n    <message>\n        <location filename=\"../../../imagehost/imagehost.cpp\" line=\"24\"/>\n        <source>GitHub</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/imagehost.cpp\" line=\"27\"/>\n        <source>Gitee</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImageHostPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"40\"/>\n        <source>New Image Host</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"55\"/>\n        <source>General</source>\n        <translation type=\"unfinished\">一般</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"62\"/>\n        <source>Default image host:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"70\"/>\n        <source>Clear obsolete images</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"72\"/>\n        <source>Clear unused images at image host (based on current file only)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"95\"/>\n        <source>Local</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"163\"/>\n        <source>Failed to rename image host (%1) to (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"186\"/>\n        <source>Image Host</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"215\"/>\n        <source>Test</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"223\"/>\n        <source>Delete</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"232\"/>\n        <source>Type:</source>\n        <translation type=\"unfinished\">種類:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"236\"/>\n        <source>Name:</source>\n        <translation type=\"unfinished\">名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"247\"/>\n        <source>%1:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"259\"/>\n        <source>Delete image host (%1)?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"301\"/>\n        <source>Test %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"301\"/>\n        <source>succeeded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"301\"/>\n        <source>failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImageInsertDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"76\"/>\n        <source>From:</source>\n        <translation>次から:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"83\"/>\n        <source>&amp;Browse</source>\n        <translation>ブラウズ(&amp;B)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"93\"/>\n        <source>Title:</source>\n        <translation>タイトル：</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"102\"/>\n        <source>Alt text:</source>\n        <translation>Altテキスト:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"132\"/>\n        <source>Scaling width:</source>\n        <translation>スケール幅:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"138\"/>\n        <source>Fixed scaling width</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"231\"/>\n        <source>Select Image To Insert</source>\n        <translation>挿入する画像を選択</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"233\"/>\n        <source>Images (*.png *.xpm *.jpg *.bmp *.gif *.svg *.webp);;All (*.*)</source>\n        <translation>画像(*.png*.xpm*.jpg*.bmp*.gif*.svg)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportFolderDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"33\"/>\n        <source>Import folder into (%1).</source>\n        <translation>フォルダを (%1) へインポートする。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"43\"/>\n        <source>Import Folder</source>\n        <translation>フォルダをインポート</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"74\"/>\n        <source>Please specify a valid folder to import.</source>\n        <translation>インポートする適切なフォルダを指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"90\"/>\n        <source>Failed to add folder (%1) as node under (%2).</source>\n        <translation>フォルダ (%1) を、 (%2) 配下のノードに追加できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"100\"/>\n        <source>Failed to add folder (%1) as node (%2).</source>\n        <translation>フォルダ (%1) をノード(%2)として追加できませんでした。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportFolderUtilsTranslate</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"29\"/>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"81\"/>\n        <source>Failed to add folder (%1) as node (%2).</source>\n        <translation>フォルダ (%1) をノード(%2)として追加できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"39\"/>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"109\"/>\n        <source>Failed to add file (%1) as node (%2).</source>\n        <translation>ファイル (%1) をノード(%2)として追加できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"56\"/>\n        <source>Failed to read folder config (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"66\"/>\n        <source>Folder (%1) does not exist.</source>\n        <translation>フォルダ (%1) は存在しません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"71\"/>\n        <source>Folder (%1) conflicts with built-in folder.</source>\n        <translation>フォルダ (%1) は、ビルトインフォルダと重複しています。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"91\"/>\n        <source>File (%1) does not exist.</source>\n        <translation>ファイル (%1) は存在しません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"96\"/>\n        <source>File (%1) conflicts with built-in file.</source>\n        <translation>フォルダ (%1) は、ビルトインファイルと重複しています。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportLegacyNotebookDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"39\"/>\n        <source>Welcome to VNoteX and the new VNote!</source>\n        <translation>VNoteXと新しいVNoteへようこそ!</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"22\"/>\n        <source>Open Legacy Notebook</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"37\"/>\n        <source>Once opened, the legacy notebook could no longer be recognized by legacy VNote!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"51\"/>\n        <source>Please specify a valid root folder to open.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"56\"/>\n        <source>Failed to recognize a legacy notebook from the root folder.</source>\n        <translation>ルートフォルダからレガシーノートブックを認識できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"66\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>同じルートフォルダを持つノートブック(%1)が既に存在します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"97\"/>\n        <source>Failed to read legacy notebook configuration in (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"120\"/>\n        <source>Failed to create notebook in (%1) (%2).</source>\n        <translation type=\"unfinished\">(%1)(%2)にノートブックを作成できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"146\"/>\n        <source>Failed to import folder contents by legacy config in (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportNotebookDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"37\"/>\n        <source>Open Notebook</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"80\"/>\n        <source>The root folder specified does not exist.</source>\n        <translation>指定されたルートフォルダは存在しません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"91\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>同じルートフォルダを持つノートブック(%1)が既に存在します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"103\"/>\n        <source>Not a valid (%1) root folder (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Not a valid %1 root folder (%2).</source>\n        <translation type=\"vanished\">有効な%1ルートフォルダ(%2)ではありません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"126\"/>\n        <source>Failed to create notebook from root folder (%1) (%2).</source>\n        <translation>ルートフォルダ(%1)(%2)からノートブックを作成できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"137\"/>\n        <source>Failed to open notebook.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"147\"/>\n        <source>Failed to open notebook (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LabelWithButtonsWidget</name>\n    <message>\n        <location filename=\"../../../widgets/labelwithbuttonswidget.cpp\" line=\"59\"/>\n        <source>Delete</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LevelLabelWithUpButton</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/levellabelwithupbutton.cpp\" line=\"28\"/>\n        <source>Up</source>\n        <translation type=\"unfinished\">上</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/levellabelwithupbutton.cpp\" line=\"30\"/>\n        <source>Go one level up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LineEditWithSnippet</name>\n    <message>\n        <location filename=\"../../../widgets/lineeditwithsnippet.cpp\" line=\"21\"/>\n        <source>Snippet is supported via &quot;%name%&quot;</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LinkInsertDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/linkinsertdialog.cpp\" line=\"36\"/>\n        <source>&amp;Text:</source>\n        <translation>テキスト(&amp;T):</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/linkinsertdialog.cpp\" line=\"43\"/>\n        <source>&amp;Url:</source>\n        <translation>&amp;Url:</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LocationInputWithBrowseButton</name>\n    <message>\n        <location filename=\"../../../widgets/locationinputwithbrowsebutton.cpp\" line=\"22\"/>\n        <source>Browse</source>\n        <translation type=\"unfinished\">ブラウズ</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LocationList</name>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"47\"/>\n        <source>Path</source>\n        <translation>パス</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"47\"/>\n        <source>Line</source>\n        <translation>ライン</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"47\"/>\n        <source>Text</source>\n        <translation>テキスト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"103\"/>\n        <source>Clear</source>\n        <translation>クリア</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"228\"/>\n        <source>%n Item(s)</source>\n        <translation>\n            <numerusform>%n アイテム</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MainWindow</name>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"15\"/>\n        <source>A pleasant note-taking platform.</source>\n        <translation>心地よいノート取りプラットフォーム。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"20\"/>\n        <source>Files or folders to open.</source>\n        <translation>開くファイルまたはフォルダ。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"22\"/>\n        <source>Print more logs.</source>\n        <translation>ログをさらに印刷します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"25\"/>\n        <source>Log to stderr.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"28\"/>\n        <source>Watch theme folder for changes.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"35\"/>\n        <source>WebEngine remote debugging port.</source>\n        <translation>WebEngineリモートデバッグポート。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"36\"/>\n        <source>port_number</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"40\"/>\n        <source>WebEngine without sandbox.</source>\n        <translation>サンドボックスのないWebEngine。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"44\"/>\n        <source>WebEngine with GPU disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../main.cpp\" line=\"135\"/>\n        <source>%1 failed to start.</source>\n        <translation>%1を開始できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../main.cpp\" line=\"136\"/>\n        <source>Failed to initialize configuration manager. Please check if all the files are intact or reinstall the application.</source>\n        <translation>設定マネージャの初期化に失敗しました。すべてのファイルが正常かどうかを確認するか、アプリケーションを再インストールしてください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"821\"/>\n        <source>Failed to check for updates (%1)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"823\"/>\n        <source>Updates available: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"109\"/>\n        <source>Initializing core components...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"387\"/>\n        <source>Do you want to minimize %1 to system tray instead of quitting when closed?</source>\n        <translation>終了する代わりに、%1をシステムトレイに最小化しますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"389\"/>\n        <source>You could change the option in Settings later.</source>\n        <translation>設定の選択肢は、後で変更することができます。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"442\"/>\n        <source>%1 is still running here.</source>\n        <translation>%1はまだ実行中です。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"601\"/>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"612\"/>\n        <source>Global</source>\n        <translation>グローバル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"716\"/>\n        <source>There is one export dialog running. Please close it first.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"837\"/>\n        <source>Failed to load %n notebook(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"838\"/>\n        <source>These notebooks may be moved or deleted. It is recommended to remove them from configuration and open them with the correct root folder path later.\nRemove them from the configuration?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/systemtrayhelper.cpp\" line=\"44\"/>\n        <source>Show Main Window</source>\n        <translation>メインウィンドウを表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/systemtrayhelper.cpp\" line=\"55\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"776\"/>\n        <source>Quit</source>\n        <translation>終了</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"54\"/>\n        <source>File</source>\n        <translation>ファイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"61\"/>\n        <source>Notebook</source>\n        <translation>ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"72\"/>\n        <source>New Notebook</source>\n        <translation>新規ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"79\"/>\n        <source>New Notebook From Folder</source>\n        <translation>フォルダから新規ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"122\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"131\"/>\n        <source>New Note</source>\n        <translation>新規ノート</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"145\"/>\n        <source>New Folder</source>\n        <translation>新規フォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"156\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"160\"/>\n        <source>Open File</source>\n        <translation>ファイルを開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"189\"/>\n        <source>Import File</source>\n        <translation>ファイルをインポート</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"196\"/>\n        <source>Import Folder</source>\n        <translation>フォルダをインポート</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"88\"/>\n        <source>Open Other Notebooks</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"95\"/>\n        <source>Open Legacy Notebooks Of VNote 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"135\"/>\n        <source>New Quick Note</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"206\"/>\n        <source>Export (Convert Format)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"222\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"260\"/>\n        <source>Quick Access</source>\n        <translation>クイックアクセス</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"230\"/>\n        <source>Flash Page</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"237\"/>\n        <source>Please set the Flash Page location in the Settings dialog first.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"238\"/>\n        <source>Flash Page is a temporary page for a flash of inspiration.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"267\"/>\n        <source>Please pin files to Quick Access first.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"268\"/>\n        <source>Files could be pinned to Quick Access via context menu.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"269\"/>\n        <source>Quick Access could be managed in the Settings dialog.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"353\"/>\n        <source>Add Task</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"359\"/>\n        <source>Reload</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"294\"/>\n        <source>Task</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"604\"/>\n        <source>Menu</source>\n        <translation type=\"unfinished\">メニュー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"719\"/>\n        <source>Home Page</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"725\"/>\n        <source>Documentation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"739\"/>\n        <source>Contributors</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"625\"/>\n        <source>Edit User Configuration File</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"651\"/>\n        <source>Edit Markdown User Styles</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"664\"/>\n        <source>Edit the user styles of Markdown editor read mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"494\"/>\n        <source>Quick Access Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"408\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"614\"/>\n        <source>Settings</source>\n        <translation>設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"534\"/>\n        <source>Expand Content Area</source>\n        <translation>コンテンツ領域の拡大</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"556\"/>\n        <source>Press %1 To Exit Full Screen</source>\n        <translation>%1 を押して全画面表示を終了する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"104\"/>\n        <source>Manage Notebooks</source>\n        <translation type=\"unfinished\">ノートブックの管理</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"179\"/>\n        <source>Import</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"564\"/>\n        <source>Stay on Top</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"576\"/>\n        <source>Windows</source>\n        <translation>ウインドウ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"634\"/>\n        <source>Open User Configuration Folder</source>\n        <translation>ユーザー設定フォルダを開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"641\"/>\n        <source>Open Default Configuration Folder</source>\n        <translation>既定の設定フォルダを開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"669\"/>\n        <source>Reset Main Window Layout</source>\n        <translation>メインウィンドウのレイアウトをリセット</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"770\"/>\n        <source>Restart</source>\n        <translation>再起動</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"717\"/>\n        <source>Help</source>\n        <translation>ヘルプ</translation>\n    </message>\n    <message>\n        <source>What&apos;s This?</source>\n        <translation type=\"vanished\">これは何ですか?</translation>\n    </message>\n    <message>\n        <source>Enter WhatsThis mode and click somewhere to show help information</source>\n        <translation type=\"vanished\">[これは何]モードに入り、ヘルプ情報を表示する場所をクリックします</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"693\"/>\n        <source>Shortcuts Help</source>\n        <translation>ショートカットヘルプ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"705\"/>\n        <source>Markdown Guide</source>\n        <translation>Markdown ガイド</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"678\"/>\n        <source>View Logs</source>\n        <translation>ログの表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"731\"/>\n        <source>Feedback and Discussions</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"762\"/>\n        <source>Check for Updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"745\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"751\"/>\n        <source>About</source>\n        <translation>バージョン情報</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"748\"/>\n        <source>&lt;h3&gt;%1&lt;/h3&gt;\n&lt;span&gt;%2&lt;/span&gt;\n</source>\n        <translation>&lt;h3&gt;%1&lt;/h3&gt;\n&lt;span&gt;%2&lt;/span&gt;\n</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"754\"/>\n        <source>About Qt</source>\n        <translation>Qtについて</translation>\n    </message>\n    <message>\n        <location filename=\"../../../utils/widgetutils.cpp\" line=\"86\"/>\n        <source>Are you sure to open link (%1)?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../utils/widgetutils.cpp\" line=\"87\"/>\n        <source>Malicious link might do harm to your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ManageNotebooksDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"64\"/>\n        <source>Close Noteboook</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"75\"/>\n        <source>Delete</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"92\"/>\n        <source>Manage Notebooks</source>\n        <translation>ノートブックの管理</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"232\"/>\n        <source>Please specify a name for the notebook.</source>\n        <translation type=\"unfinished\">ノートブックの名前を指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"261\"/>\n        <source>Close notebook (%1)?</source>\n        <translation>ノートブック(%1)を閉じますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"291\"/>\n        <source>Press &quot;Ok&quot; to close the notebook and open the location of the notebook root folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"264\"/>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"292\"/>\n        <source>Notebook location: %1</source>\n        <translation>ノートブックの場所:%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"263\"/>\n        <source>The notebook could be opened by VNote again via &quot;Open Other Notebooks&quot; operation.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"275\"/>\n        <source>Failed to close notebook (%1)</source>\n        <translation>ノートブック(%1)を閉じることができませんでした</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"290\"/>\n        <source>Please close the notebook in VNote first and delete the notebook root folder files manually.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"309\"/>\n        <source>There are unsaved changes to current notebook.</source>\n        <translation>現在のノートブックに未保存の変更があります。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownEditor</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"250\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"748\"/>\n        <source>Insert Link</source>\n        <translation>リンクを挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"263\"/>\n        <source>Insert Image</source>\n        <translation>画像を挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"320\"/>\n        <source>Insert Table</source>\n        <translation>表を挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"377\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1557\"/>\n        <source>Failed to read local image file (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"390\"/>\n        <source>Failed to insert image from local file (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"433\"/>\n        <source>Failed to insert image from data (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"512\"/>\n        <source>For advanced paste, try the &quot;Rich Paste&quot; and &quot;Parse to Markdown and Paste&quot; on the editor&apos;s context menu</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"553\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"590\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"660\"/>\n        <source>Insert From Clipboard</source>\n        <translation>クリップボードから挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"554\"/>\n        <source>Insert From URL</source>\n        <translation>URLから挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"555\"/>\n        <source>Insert From Image Data</source>\n        <translation>イメージデータから挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"556\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"593\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"663\"/>\n        <source>Insert As Image Link</source>\n        <translation>イメージリンクとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"591\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"662\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"812\"/>\n        <source>Insert As Image</source>\n        <translation>イメージとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"592\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"678\"/>\n        <source>Insert As Text</source>\n        <translation>テキストとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"665\"/>\n        <source>Insert As Relative Image Link</source>\n        <translation>相対イメージリンクとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"669\"/>\n        <source>Insert As Link</source>\n        <translation>リンクとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"671\"/>\n        <source>Insert As Relative Link</source>\n        <translation>相対リンクとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"674\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"815\"/>\n        <source>Attach And Insert Link</source>\n        <translation>リンクを添付して挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"680\"/>\n        <source>Insert File Content</source>\n        <translation>ファイルの内容を挿入</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"810\"/>\n        <source>Insert From Clipboard (%n items)</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"863\"/>\n        <source>Insert Image From Clipboard</source>\n        <translation>クリップボードからイメージを挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"879\"/>\n        <source>Insert Image From URL</source>\n        <translation>URLからイメージを挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1072\"/>\n        <source>&amp;Read</source>\n        <translation>読み取り(&amp;R)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1090\"/>\n        <source>Rich Paste</source>\n        <translation>リッチ貼り付け</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1090\"/>\n        <source>Paste as Plain Text</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1099\"/>\n        <source>Parse to Markdown and Paste</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1111\"/>\n        <source>Insert Snippet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1476\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1575\"/>\n        <source>Failed to upload image to image host (%1) as (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1655\"/>\n        <source>View Image</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1664\"/>\n        <source>Copy Image URL</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1674\"/>\n        <source>Copy Image</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1737\"/>\n        <source>Copy In-Place Preview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1782\"/>\n        <source>Open Link</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1791\"/>\n        <source>Copy Link</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1215\"/>\n        <source>Fetching images to local...</source>\n        <translation>ローカルにイメージを取得しています...</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1216\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1521\"/>\n        <source>Abort</source>\n        <translation>中止</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1221\"/>\n        <source>Fetch Images To Local</source>\n        <translation>イメージをローカルに取得</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1249\"/>\n        <source>Fetching image (%1)</source>\n        <translation>イメージ (%1) を取得しています</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1488\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1526\"/>\n        <source>Upload Images To Image Host</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1492\"/>\n        <source>None</source>\n        <translation type=\"unfinished\">なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1520\"/>\n        <source>Uploading local images...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1548\"/>\n        <source>Upload image (%1)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownEditorPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"218\"/>\n        <source>Markdown Editor</source>\n        <translation>Markdownエディタ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"223\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"440\"/>\n        <source>Read</source>\n        <translation>読み取り</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"227\"/>\n        <source>Constrain image width</source>\n        <translation>イメージの幅を制限する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"229\"/>\n        <source>Constrain image width to the window</source>\n        <translation>イメージの幅をウィンドウに制限する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"237\"/>\n        <source>Center image</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"239\"/>\n        <source>Center images</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"248\"/>\n        <source>Zoom factor in read mode</source>\n        <translation>読み取りモードのズーム倍率</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"253\"/>\n        <source>Zoom factor:</source>\n        <translation>ズーム倍率:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"261\"/>\n        <source>HTML tag</source>\n        <translation>HTMLタグ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"263\"/>\n        <source>Allow HTML tags in source</source>\n        <translation>ソース内のHTMLタグを許可</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"271\"/>\n        <source>Auto break</source>\n        <translation>自動ブレーク</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"273\"/>\n        <source>Automatically break a line with &apos;\\n&apos;</source>\n        <translation>&apos;\\n&apos; で自動的に改行する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"281\"/>\n        <source>Linkify</source>\n        <translation>リンク変換</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"283\"/>\n        <source>Convert URL-like text to links</source>\n        <translation>URLに似たテキストをリンクに変換する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"291\"/>\n        <source>Indent first line</source>\n        <translation>最初の行をインデント</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"293\"/>\n        <source>Indent the first line of each paragraph</source>\n        <translation>各段落の最初の行をインデントする</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"301\"/>\n        <source>Code block line number</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"303\"/>\n        <source>Add line number to code block</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"315\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"441\"/>\n        <source>Edit</source>\n        <translation>編集</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"319\"/>\n        <source>Insert file name as title</source>\n        <translation>ファイル名をタイトルとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"321\"/>\n        <source>Insert file name as title when creating note</source>\n        <translation>ノート作成時にファイル名をタイトルとして挿入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"329\"/>\n        <source>Constrain in-place preview width</source>\n        <translation>インプレイスプレビューの幅を制約する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"331\"/>\n        <source>Constrain in-place preview width to the window</source>\n        <translation>インプレイスプレビューをウインドウ幅に制約する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"340\"/>\n        <source>In-place preview sources:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"342\"/>\n        <source>Image link</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"347\"/>\n        <source>Code block</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"352\"/>\n        <source>Math</source>\n        <translation type=\"unfinished\">数式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"359\"/>\n        <source>Fetch images to local in Parse And Paste</source>\n        <translation>[解析と貼り付け]でイメージをローカルに取得</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"361\"/>\n        <source>Fetch images to local in Parse To Markdown And Paste</source>\n        <translation type=\"unfinished\">[Markdown解析と貼り付け]でイメージをローカルに取得</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"369\"/>\n        <source>Smart table</source>\n        <translation>スマートテーブル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"371\"/>\n        <source>Smart table formation</source>\n        <translation type=\"unfinished\">スマートテーブルにフォーマット</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"379\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"381\"/>\n        <source>Spell check</source>\n        <translation>スペルチェック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"392\"/>\n        <source>Override font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"394\"/>\n        <source>Override editor font family of theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"416\"/>\n        <source>Use Rich Paste by default</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"418\"/>\n        <source>Use Rich Paste by default when pasting text</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"430\"/>\n        <source>General</source>\n        <translation>一般</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"438\"/>\n        <source>Section number mode</source>\n        <translation>セクション番号モード</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"439\"/>\n        <source>None</source>\n        <translation>なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"447\"/>\n        <source>Base level to start section numbering in edit mode</source>\n        <translation>編集モードでセクション番号付けを開始するベースレベル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"456\"/>\n        <source>Section number style</source>\n        <translation>セクション番号スタイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"457\"/>\n        <source>1.1.</source>\n        <translation>1.1.</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"458\"/>\n        <source>1.1</source>\n        <translation>1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"470\"/>\n        <source>Section number:</source>\n        <translation>セクション番号:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"477\"/>\n        <source>Use Web service or local JAR file to render PlantUml graphs</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"479\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"551\"/>\n        <source>Web Service</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"537\"/>\n        <source>Override the Web service used to render PlantUml graphs</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"538\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"609\"/>\n        <source>Empty to use default one</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"611\"/>\n        <source>Override MathJax script:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"549\"/>\n        <source>Use Web service or local executable file to render Graphviz graphs</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"480\"/>\n        <source>Local JAR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"482\"/>\n        <source>PlantUml:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"494\"/>\n        <source>Local JAR file to render PlantUml graphs</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"498\"/>\n        <source>Select PlantUml JAR File</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"507\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"578\"/>\n        <source>Test</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"508\"/>\n        <source>Test PlantUml JAR and Java Runtime Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"514\"/>\n        <source>The JAR file (%1) specified does not exist.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"521\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"592\"/>\n        <source>Test %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"521\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"592\"/>\n        <source>succeeded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"521\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"592\"/>\n        <source>failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"528\"/>\n        <source>PlantUml JAR file:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"540\"/>\n        <source>Override PlantUml Web service:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"552\"/>\n        <source>Local Executable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"554\"/>\n        <source>Graphviz:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"566\"/>\n        <source>Local executable file to render Graphviz graphs</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"570\"/>\n        <source>Select Graphviz Executable File</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"579\"/>\n        <source>Test Graphviz executable file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"585\"/>\n        <source>The executable file (%1) specified does not exist.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"599\"/>\n        <source>Graphviz executable file:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"608\"/>\n        <source>Override the MathJax script used to render math formulas</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownViewWindow</name>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"459\"/>\n        <source>Markdown Viewer</source>\n        <translation>Markdownビューア</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"806\"/>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"838\"/>\n        <source>Clear Obsolete Images</source>\n        <translation>古いイメージをクリア</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"807\"/>\n        <source>These images seems to be not in use anymore. Please confirm the deletion of them.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"808\"/>\n        <source>Deleted local images could be found in the recycle bin of notebook if it is from a bundle notebook.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"832\"/>\n        <source>Clearing obsolete images...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"833\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\">中止</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"847\"/>\n        <source>Clear image (%1)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"859\"/>\n        <source>Cleared %n obsolete images</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1284\"/>\n        <source>View Mode Not Supported In Read Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1302\"/>\n        <source>Edit Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1313\"/>\n        <source>Edit with Preview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1422\"/>\n        <source>Printed to PDF</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1422\"/>\n        <source>Failed to print to PDF</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1017\"/>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1026\"/>\n        <source>Replace is not supported in read mode</source>\n        <translation>置換は読み取りモードではサポートされていません</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownViewer</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"139\"/>\n        <source>&amp;Edit</source>\n        <translation>編集(&amp;E)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"424\"/>\n        <source>Cross Copy</source>\n        <translation>クロスコピー</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownViewerAdapter</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"289\"/>\n        <source>No Background</source>\n        <translation>背景なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"290\"/>\n        <source>Evernote</source>\n        <translation>Evernote</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"291\"/>\n        <source>OneNote</source>\n        <translation>OneNote</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"292\"/>\n        <source>Microsoft Word</source>\n        <translation>Microsoft Word</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"293\"/>\n        <source>WeChat Public Account Editor</source>\n        <translation>WeChatパブリックアカウントエディタ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"294\"/>\n        <source>Raw HTML</source>\n        <translation>生のHTML</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MindMapViewWindow</name>\n    <message>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"287\"/>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"295\"/>\n        <source>Replace is not supported yet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"413\"/>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"550\"/>\n        <source>File does not exist or unsupported URL format: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MiscPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/miscpage.cpp\" line=\"35\"/>\n        <source>Misc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewFolderDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"31\"/>\n        <source>New Folder</source>\n        <translation>新規フォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"56\"/>\n        <source>Please specify a name for the folder.</source>\n        <translation>フォルダの名前を指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"61\"/>\n        <source>Name conflicts with existing or built-in folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"84\"/>\n        <source>Failed to create folder under (%1) in (%2) (%3).</source>\n        <translation>(%2)(%3)の(%1)の下にフォルダを作成できませんでした。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewImageHostDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"28\"/>\n        <source>Type:</source>\n        <translation type=\"unfinished\">種類:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"36\"/>\n        <source>Name:</source>\n        <translation type=\"unfinished\">名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"40\"/>\n        <source>New Image Host</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"57\"/>\n        <source>Please specify a valid name for the image host.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"60\"/>\n        <source>Name conflicts with existing image host.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"77\"/>\n        <source>Failed to create image host (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewNoteDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"52\"/>\n        <source>New Note</source>\n        <translation>新規ノート</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"48\"/>\n        <source>Template:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"77\"/>\n        <source>Please specify a valid name for the note.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"82\"/>\n        <source>Name conflicts with existing or built-in note.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"132\"/>\n        <source>Failed to create note under (%1) in (%2) (%3).</source>\n        <translation>(%2)(%3)の(%1)の下にノートを作成できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"158\"/>\n        <source>note</source>\n        <translation>ノート</translation>\n    </message>\n    <message>\n        <source>None</source>\n        <translation type=\"obsolete\">なし</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewNotebookDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"33\"/>\n        <source>New Notebook</source>\n        <translation>新規ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"43\"/>\n        <source>&lt;br/&gt;Both absolute and relative paths are supported. ~ and environment variable are not supported now.</source>\n        <translation>&lt;br/&gt;絶対パスと相対パスの両方をここで使用できます。- そして、環境変数は現在サポートされていません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"65\"/>\n        <source>Please specify a name for the notebook.</source>\n        <translation>ノートブックの名前を指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"76\"/>\n        <source>Please specify a valid root folder for the notebook.</source>\n        <translation>有効なルートフォルダを指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"86\"/>\n        <source>Root folder of the notebook must be empty. If you want to import existing data, please try other operations.</source>\n        <translation>ノートブックのルートフォルダは空でなければなりません。既存のデータをインポートする場合は、他の操作を試してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"91\"/>\n        <source>Root folder should be a directory.</source>\n        <translation>ルートフォルダはディレクトリである必要があります。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"103\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>同じルートフォルダを持つノートブック(%1)が既に存在します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"136\"/>\n        <source>Failed to create notebook in (%1) (%2).</source>\n        <translation>(%1)(%2)にノートブックを作成できませんでした。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewNotebookFromFolderDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"37\"/>\n        <source>Source Folder</source>\n        <translation>ソースフォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"51\"/>\n        <source>New Notebook From Folder</source>\n        <translation>フォルダから新規ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"89\"/>\n        <source>Please specify a name for the notebook.</source>\n        <translation>ノートブックの名前を指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"100\"/>\n        <source>Please specify a valid folder for the new notebook.</source>\n        <translation>新規ノートブックに有効なフォルダを指定してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"111\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>同じルートフォルダを持つノートブック(%1)が既に存在します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"122\"/>\n        <source>The folder is likely to be the root folder of a valid bundle notebook. You may want to use &quot;Open Other Notebooks&quot; to open it. If continue, all existing information of the notebook may be lost.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"159\"/>\n        <source>Failed to create notebook in %1 (%2).</source>\n        <translation>%1(%2)にノートブックを作成できませんでした。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewSnippetDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"25\"/>\n        <source>New Snippet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"64\"/>\n        <source>Failed to add snippet (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"79\"/>\n        <source>Please specify a name for the snippet.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"84\"/>\n        <source>Name conflicts with existing snippet.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewTagDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"50\"/>\n        <source>Location:</source>\n        <translation type=\"unfinished\">場所:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"54\"/>\n        <source>Name:</source>\n        <translation type=\"unfinished\">名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"58\"/>\n        <source>New Tag</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"69\"/>\n        <source>Please specify a valid name for the tag.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"72\"/>\n        <source>Name conflicts with existing tag.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"86\"/>\n        <source>Failed to create tag (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NodeInfoWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"59\"/>\n        <source>Notebook:</source>\n        <translation>ノートブック:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"68\"/>\n        <source>Location:</source>\n        <translation>場所:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"73\"/>\n        <source>File type:</source>\n        <translation>ファイルの種類:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"77\"/>\n        <source>Name:</source>\n        <translation>名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"81\"/>\n        <source>Created time:</source>\n        <translation>作成日時:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"84\"/>\n        <source>Modified time:</source>\n        <translation>最終変更日時:</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NoteManagementPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"26\"/>\n        <source>Per-Notebook access history</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"28\"/>\n        <source>Store note access history in its notebook</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"37\"/>\n        <source>Line ending used to write configuration files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"39\"/>\n        <source>Follow Platform</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"40\"/>\n        <source>LF (Linux/macOS)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"41\"/>\n        <source>CR LF (Windows)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"42\"/>\n        <source>CR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"44\"/>\n        <source>Line ending:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"53\"/>\n        <source>Default mode when opening notes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"55\"/>\n        <source>Read</source>\n        <translation type=\"unfinished\">読み取り</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"56\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\">編集</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"58\"/>\n        <source>Default open mode:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"110\"/>\n        <source>Note Management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotePropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"35\"/>\n        <source>%1 Properties</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"60\"/>\n        <source>Please specify a valid name for the note.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"66\"/>\n        <source>Name conflicts with existing note.</source>\n        <translation>名前が既存のノートと重複しています。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"94\"/>\n        <source>Failed to save note (%1) in (%2) (%3).</source>\n        <translation>ノート(%1)を(%2)(%3)に保存できませんでした。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NoteTemplateSelector</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notetemplateselector.cpp\" line=\"35\"/>\n        <source>Manage</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notetemplateselector.cpp\" line=\"52\"/>\n        <source>None</source>\n        <translation type=\"unfinished\">なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notetemplateselector.cpp\" line=\"84\"/>\n        <source>Failed to load template (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookExplorer</name>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"78\"/>\n        <source>Select one of all the notebooks as current notebook.&lt;br/&gt;Move mouse on one item to check its details.</source>\n        <translation>すべてのノートブックの1つを現在のノートブックとして選択します。&lt;br/&gt;1つの項目にマウスを移動して、その詳細を確認します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"116\"/>\n        <source>Notebook</source>\n        <translation>ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"120\"/>\n        <source>This title bar contains buttons and menu to manage notebooks and notes.</source>\n        <translation>このタイトルバーには、ノートブックとノートを管理するためのボタンとメニューが含まれています。</translation>\n    </message>\n    <message>\n        <source>View</source>\n        <translation type=\"vanished\">表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"186\"/>\n        <source>External Files</source>\n        <translation>外部ファイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"189\"/>\n        <source>Show External Files</source>\n        <translation>外部ファイルを表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"141\"/>\n        <source>Scan and Import</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"146\"/>\n        <source>Please select one notebook first.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"151\"/>\n        <source>Scan the whole notebook (%1) and import external files automatically?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"152\"/>\n        <source>This operation helps importing external files that are added outside from VNote. It may import unexpected files.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"154\"/>\n        <source>It is recommended to always manage files within VNote.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"162\"/>\n        <source>Imported %n file(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"173\"/>\n        <source>Manage Notebooks</source>\n        <translation type=\"unfinished\">ノートブックの管理</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"178\"/>\n        <source>Rebuild Notebook Database</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"200\"/>\n        <source>Import External Files when Activated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"210\"/>\n        <source>Close File Before Open with External Program</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"137\"/>\n        <source>Recycle Bin</source>\n        <translation type=\"unfinished\">ごみ箱</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"126\"/>\n        <source>Notebooks</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"128\"/>\n        <source>Notes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"131\"/>\n        <source>View By</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"297\"/>\n        <source>Please set up quick note schemes in the Settings dialog first.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"302\"/>\n        <source>New Quick Note</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"326\"/>\n        <source>The quick note should be created within a notebook.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"341\"/>\n        <source>Failed to create quick note from scheme (%1) (%2)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"371\"/>\n        <source>Please first create a notebook to hold your data.</source>\n        <translation>まず、データを保持するノートブックを作成してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"396\"/>\n        <source>Select Files To Import</source>\n        <translation>インポートするファイルを選択</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"407\"/>\n        <source>Failed to add file (%1) as node (%2).\n</source>\n        <translation>ファイル (%1) をノード(%2)として追加できませんでした。\n</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"464\"/>\n        <source>View By Configuration</source>\n        <translation>設定順に表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"470\"/>\n        <source>View By Name</source>\n        <translation>名前順による表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"475\"/>\n        <source>View By Name (Reversed)</source>\n        <translation>名前順による表示(逆順)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"480\"/>\n        <source>View By Created Time</source>\n        <translation>作成日時順の表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"485\"/>\n        <source>View By Created Time (Reversed)</source>\n        <translation>作成日時順の表示(逆順)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"491\"/>\n        <source>View By Modified Time</source>\n        <translation>変更日時順の表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"496\"/>\n        <source>View By Modified Time (Reversed)</source>\n        <translation>変更日時順の表示(逆順)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"525\"/>\n        <source>Open Recycle Bin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"533\"/>\n        <source>Empty Recycle Bin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"540\"/>\n        <source>Empty the recycle bin of notebook (%1)?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"541\"/>\n        <source>CAUTION! All the files under the recycle bin folder will be deleted and unrecoverable!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"542\"/>\n        <source>Recycle bin folder: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"552\"/>\n        <source>Explore Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"556\"/>\n        <source>Combined</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"562\"/>\n        <source>Separate, Single Column</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"568\"/>\n        <source>Separate, Double Columns</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"649\"/>\n        <source>Rebuild the database of notebook (%1)?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"650\"/>\n        <source>This operation will rebuild the notebook database from configuration files. It may take time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"651\"/>\n        <source>A notebook may use a database for cache, such as IDs of nodes and tags.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"657\"/>\n        <source>Rebuilding notebook database...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"673\"/>\n        <source>Notebook database has been rebuilt.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"677\"/>\n        <source>Failed to rebuild notebook database.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookInfoWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"47\"/>\n        <source>Basic Information</source>\n        <translation>基本情報</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"52\"/>\n        <source>Type:</source>\n        <translation>種類:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"57\"/>\n        <source>Name of notebook</source>\n        <translation>ノートブックの名前</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"60\"/>\n        <source>Name:</source>\n        <translation>名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"64\"/>\n        <source>Icon:</source>\n        <translation>アイコン:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"69\"/>\n        <source>Description of notebook</source>\n        <translation>ノートブックの説明</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"72\"/>\n        <source>Description:</source>\n        <translation>説明:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"77\"/>\n        <source>Root folder:</source>\n        <translation>ルートフォルダ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"86\"/>\n        <source>Type of notebook</source>\n        <translation>ノートブックの種類</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"88\"/>\n        <source>Specify the type of notebook.&lt;br/&gt;</source>\n        <translation>ノートブックの種類を指定します。&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"92\"/>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"164\"/>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"180\"/>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"196\"/>\n        <source>&lt;b&gt;%1&lt;/b&gt;: %2&lt;br/&gt;</source>\n        <translation>&lt;b&gt;%1&lt;/b&gt;: %2&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"102\"/>\n        <source>Path of notebook root folder</source>\n        <translation>ノートブックのルートフォルダのパス</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"103\"/>\n        <source>&lt;b&gt;Notebook Root Folder&lt;/b&gt; is the folder containing all data of one notebook in %1.</source>\n        <translation>&lt;b&gt;ノートブックルートフォルダ&lt;/b&gt;は %1 内の1つのノートブックのすべてのデータを含むフォルダです。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"111\"/>\n        <source>Browse</source>\n        <translation>ブラウズ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"117\"/>\n        <source>Select Notebook Root Folder</source>\n        <translation>ノートブックルートフォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"134\"/>\n        <source>Advanced Information</source>\n        <translation>詳細情報</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"139\"/>\n        <source>Configuration manager:</source>\n        <translation>設定マネージャ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"144\"/>\n        <source>Version control:</source>\n        <translation>バージョン管理:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"149\"/>\n        <source>Backend:</source>\n        <translation>バックエンド:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"158\"/>\n        <source>Configuration manager of notebook</source>\n        <translation>ノートブックの設定マネージャ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"160\"/>\n        <source>Specify configruation manager of notebook.&lt;br/&gt;</source>\n        <translation>ノートブックの設定マネージャを指定してください。&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"174\"/>\n        <source>Version control of notebook</source>\n        <translation>ノートブックのバージョン管理</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"176\"/>\n        <source>Specify version control of notebook.&lt;br/&gt;</source>\n        <translation>ノートブックのバージョン管理を指定します。&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"190\"/>\n        <source>Backend of notebook</source>\n        <translation>ノートブックのバックエンド</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"192\"/>\n        <source>Specify backend of notebook.&lt;br/&gt;</source>\n        <translation>ノートブックのバックエンドを指定してください。&lt;br/&gt;</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookNodeExplorer</name>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"452\"/>\n        <source>Failed to load nodes of notebook (%1) (%2).</source>\n        <translation>ノートブック(%1)(%2)のノードをロードできませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2773\"/>\n        <source>[Invalid] %1</source>\n        <translation>[無効] %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"596\"/>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"613\"/>\n        <source>[External] %1</source>\n        <translation>[外部] %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1327\"/>\n        <source>New &amp;Folder</source>\n        <translation>新規フォルダ(&amp;F)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1338\"/>\n        <source>&amp;Properties (Rename)</source>\n        <translation>プロパティ(名前変更)(&amp;P)</translation>\n    </message>\n    <message>\n        <source>Open &amp;Location</source>\n        <translation type=\"vanished\">場所を開く(&amp;L)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1386\"/>\n        <source>Cop&amp;y Path</source>\n        <translation>パスをコピー(&amp;Y)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1406\"/>\n        <source>Copied path: %1</source>\n        <translation>コピーされたファイルパス: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1412\"/>\n        <source>&amp;Copy</source>\n        <translation>コピー(&amp;C)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1421\"/>\n        <source>C&amp;ut</source>\n        <translation>切り取り(&amp;U)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1430\"/>\n        <source>&amp;Paste</source>\n        <translation>貼り付け(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1437\"/>\n        <source>&amp;Delete</source>\n        <translation>削除(&amp;D)</translation>\n    </message>\n    <message>\n        <source>&amp;Remove From Index</source>\n        <translation type=\"vanished\">インデックスから削除(&amp;R)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1453\"/>\n        <source>&amp;Sort</source>\n        <translation>整列(&amp;S)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1461\"/>\n        <source>Re&amp;load</source>\n        <translation>再ロード(&amp;L)</translation>\n    </message>\n    <message>\n        <source>Relo&amp;ad Index From Disk</source>\n        <translation type=\"vanished\">ディスクからインデックスを再作成(&amp;A)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1489\"/>\n        <source>&amp;Import To Index</source>\n        <translation>インデックスに読み込む(&amp;I)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1500\"/>\n        <source>&amp;Open</source>\n        <translation>開く(&amp;O)</translation>\n    </message>\n    <message>\n        <source>&amp;Expand All\t*</source>\n        <translation type=\"vanished\">全て展開(&amp;E)\t*</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1579\"/>\n        <source>Pin To &amp;Quick Access</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1609\"/>\n        <source>&amp;Tags</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1819\"/>\n        <source>Copied %n item(s)</source>\n        <translation>\n            <numerusform>%n アイテムをコピーしました</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1930\"/>\n        <source>Invalid clipboard data to paste.</source>\n        <translation>貼り付けるクリップボードデータが無効です。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1945\"/>\n        <source>Destination is detected in sources (%1). Operation is cancelled.</source>\n        <translation>宛先がソース(%1)で検出されました。操作がキャンセルされました。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1978\"/>\n        <source>Failed to copy source (%1) to destination (%2) (%3).</source>\n        <translation>コピー元(%1)をコピー先(%2)(%3)にコピーできませんでした。</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2003\"/>\n        <source>Pasted %n item(s)</source>\n        <translation>\n            <numerusform>%n アイテムを貼り付けました</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1316\"/>\n        <source>New &amp;Note</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1229\"/>\n        <source>Visual Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1237\"/>\n        <source>Cascade Color Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1348\"/>\n        <source>Open Locat&amp;ion</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1445\"/>\n        <source>Remo&amp;ve From Index</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1470\"/>\n        <source>Relo&amp;ad Index Of Notebook From Disk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1529\"/>\n        <source>&amp;Edit</source>\n        <translation type=\"unfinished\">編集(&amp;E)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1529\"/>\n        <source>&amp;Read</source>\n        <translation type=\"unfinished\">読み取り(&amp;R)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1561\"/>\n        <source>E&amp;xpand All\t*</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1624\"/>\n        <source>Set Background Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1637\"/>\n        <source>Select Background Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1647\"/>\n        <source>Set Border Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1660\"/>\n        <source>Select Border Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1670\"/>\n        <source>Set Name Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1683\"/>\n        <source>Select Name Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1693\"/>\n        <source>Set Cascade Background Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1710\"/>\n        <source>Select Cascade Background Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1718\"/>\n        <source>Set Cascade Border Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1735\"/>\n        <source>Select Cascade Border Color</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1743\"/>\n        <source>Clear Cascade Colors</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1761\"/>\n        <source>Clear Colors</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2046\"/>\n        <source>Delete these folders and notes?</source>\n        <translation>これらのフォルダとメモを削除しますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2047\"/>\n        <source>Deleted files could be found in the recycle bin of notebook.</source>\n        <translation>削除されたファイルはノートブックのごみ箱にあります。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2048\"/>\n        <source>Confirm Deletion</source>\n        <translation>削除の確認</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2123\"/>\n        <source>Failed to delete/remove item (%1) (%2) (%3).</source>\n        <translation>アイテム(%1)(%2)(%3)の削除/削除に失敗しました。</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2137\"/>\n        <source>Deleted/Removed %n item(s)</source>\n        <translation>\n            <numerusform>%nアイテムを削除しました</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2142\"/>\n        <source>Confirm Removal</source>\n        <translation>削除の確認</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2143\"/>\n        <source>Remove these folders and notes from index?</source>\n        <translation>これらのフォルダとメモをインデックスから削除しますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2144\"/>\n        <source>Files are not touched but just removed from notebook index.</source>\n        <translation>ファイルには触れずに、ただインデックスから削除されます。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2334\"/>\n        <source>Sort Folders</source>\n        <translation>フォルダの整列</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2334\"/>\n        <source>Sort Notes</source>\n        <translation>ノートの整列</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2335\"/>\n        <source>Sort nodes under %1 (%2) in the configuration file.</source>\n        <translation>設定ファイル内の%1(%2)以下のノードを整列します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2336\"/>\n        <source>notebook</source>\n        <translation>ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2336\"/>\n        <source>folder</source>\n        <translation>フォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2347\"/>\n        <source>Name</source>\n        <translation>名前</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2347\"/>\n        <source>Created Time</source>\n        <translation>作成日時</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2347\"/>\n        <source>Modified Time</source>\n        <translation>最終変更日時</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2547\"/>\n        <source>Invalid node (%1).</source>\n        <translation>無効なノード(%1)です。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2548\"/>\n        <source>Please check if the node exists on the disk.</source>\n        <translation>ノードがディスク上に存在するかどうかを確認してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2559\"/>\n        <source>Open &amp;With</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2594\"/>\n        <source>System Default Program</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2603\"/>\n        <source>Add External Program</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookSelector</name>\n    <message>\n        <location filename=\"../../../widgets/notebookselector.cpp\" line=\"152\"/>\n        <source>Notebook: %1\nRoot folder: %2\nDescription: %3</source>\n        <translation>ノートブック:%1\nルートフォルダ:%2\n説明:%3</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::OutlinePopup</name>\n    <message>\n        <location filename=\"../../../widgets/outlinepopup.cpp\" line=\"24\"/>\n        <source>Outline</source>\n        <translation>アウトライン</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::OutlineProvider</name>\n    <message>\n        <location filename=\"../../../widgets/outlineprovider.h\" line=\"105\"/>\n        <source>[EMPTY]</source>\n        <translation>[空]</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::OutlineViewer</name>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"95\"/>\n        <source>Decrease Expansion Level</source>\n        <translation type=\"unfinished\">展開レベルを下げる</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"110\"/>\n        <source>Increase Expansion Level</source>\n        <translation type=\"unfinished\">展開レベルの上げる</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"126\"/>\n        <source>Section Number</source>\n        <translation type=\"unfinished\">セクション番号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"315\"/>\n        <source>%1 %2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"350\"/>\n        <source>Expansion level: %1</source>\n        <translation type=\"unfinished\">展開レベル: %1</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::QuickAccessPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"115\"/>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"148\"/>\n        <source>Quick Access</source>\n        <translation type=\"unfinished\">クイックアクセス</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"120\"/>\n        <source>Flash Page</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"125\"/>\n        <source>Flash Page location (user could copy the path of one note and paste it here)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"127\"/>\n        <source>Flash Page:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"135\"/>\n        <source>Select Flash Page File</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"153\"/>\n        <source>Edit the files pinned to Quick Access (one file per line)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"156\"/>\n        <source>Quick Access:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"178\"/>\n        <source>Quick Note</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"187\"/>\n        <source>No scheme to show</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"189\"/>\n        <source>New</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"194\"/>\n        <source>Delete</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"200\"/>\n        <source>Scheme:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"217\"/>\n        <source>Folder:</source>\n        <translation type=\"unfinished\">フォルダ:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"219\"/>\n        <source>Empty to use current explored folder dynamically</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"227\"/>\n        <source>Select Quick Note Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"236\"/>\n        <source>Note name:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"244\"/>\n        <source>Note template:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"267\"/>\n        <source>Quick Note Scheme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"268\"/>\n        <source>Scheme name already exists! Try again:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"268\"/>\n        <source>Scheme name:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"278\"/>\n        <source>quick_note_%da%.md</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"294\"/>\n        <source>Delete quick note scheme (%1)?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::RenameTagDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"32\"/>\n        <source>Name:</source>\n        <translation type=\"unfinished\">名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"36\"/>\n        <source>Rename Tag</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"51\"/>\n        <source>Please specify a valid name for the tag.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"54\"/>\n        <source>Name conflicts with existing tag.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"65\"/>\n        <source>Failed to rename tag (%1) to (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::RepoImageHost</name>\n    <message>\n        <location filename=\"../../../imagehost/repoimagehost.cpp\" line=\"21\"/>\n        <source>PersonalAccessToken/UserName/RepositoryName should not be empty.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/repoimagehost.cpp\" line=\"38\"/>\n        <source>Private repository is not supported.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SearchPanel</name>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"167\"/>\n        <source>Full-text search.</source>\n        <translation>全文検索。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"169\"/>\n        <source>Keywords to search for.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"178\"/>\n        <source>Search in case sensitive.</source>\n        <translation>大文字と小文字を区別して検索します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"181\"/>\n        <source>Search by regular expression.</source>\n        <translation>正規表現で検索します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"184\"/>\n        <source>Search whole word only.</source>\n        <translation>単語全体のみを検索します。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"187\"/>\n        <source>Do a fuzzy search (not applicable to content search).</source>\n        <translation>あいまい検索を実行します(コンテンツ検索には適用されません)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"190\"/>\n        <source>Do an OR combination of keywords.</source>\n        <translation>キーワードのOR結合を実行します。</translation>\n    </message>\n    <message>\n        <source>Keywords to search.</source>\n        <translation type=\"vanished\">検索するキーワード。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"93\"/>\n        <source>Keyword:</source>\n        <translation>キーワード:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"96\"/>\n        <source>Buffers</source>\n        <translation>バッファ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"97\"/>\n        <source>Current Folder</source>\n        <translation>現在のフォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"98\"/>\n        <source>Current Notebook</source>\n        <translation>現在のノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"99\"/>\n        <source>All Notebooks</source>\n        <translation>全てのノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"100\"/>\n        <source>Scope:</source>\n        <translation>範囲:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"117\"/>\n        <source>Wildcard pattern of files to search</source>\n        <translation>検索するファイルのワイルドカードパターン</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"120\"/>\n        <source>File pattern:</source>\n        <translation>ファイルパターン:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"142\"/>\n        <source>Search</source>\n        <translation>検索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"146\"/>\n        <source>Cancel</source>\n        <translation>キャンセル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"150\"/>\n        <source>Toggle Location List</source>\n        <translation>ロケーションリストを切り替え</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"156\"/>\n        <source>Advanced Settings</source>\n        <translation>詳細設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"171\"/>\n        <source>Object:</source>\n        <translation>オブジェクト:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"173\"/>\n        <source>Name</source>\n        <translation>名前</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"176\"/>\n        <source>Content</source>\n        <translation>コンテンツ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"179\"/>\n        <source>Tag</source>\n        <translation>タグ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"182\"/>\n        <source>Path</source>\n        <translation>パス</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"190\"/>\n        <source>Target:</source>\n        <translation>ターゲット:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"192\"/>\n        <source>File</source>\n        <translation>ファイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"195\"/>\n        <source>Folder</source>\n        <translation>フォルダ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"198\"/>\n        <source>Notebook</source>\n        <translation>ノートブック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"206\"/>\n        <source>Option:</source>\n        <translation>オプション:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"208\"/>\n        <source>&amp;Case sensitive</source>\n        <translation>大文字と小文字を区別(&amp;C)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"214\"/>\n        <source>&amp;Plain text</source>\n        <translation>プレーンテキスト(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"218\"/>\n        <source>&amp;Whole word only</source>\n        <translation>単語全体のみ(&amp;W)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"222\"/>\n        <source>&amp;Fuzzy search</source>\n        <translation>あいまい検索(&amp;F)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"226\"/>\n        <source>Re&amp;gular expression</source>\n        <translation>正規表現(&amp;G)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"326\"/>\n        <source>Search finished: %1</source>\n        <translation>検索が終了しました:%1</translation>\n    </message>\n    <message>\n        <source>Invalid keyword</source>\n        <translation type=\"vanished\">キーワードが無効です</translation>\n    </message>\n    <message>\n        <source>No object specified</source>\n        <translation type=\"vanished\">オブジェクトが指定されていません</translation>\n    </message>\n    <message>\n        <source>No target specified</source>\n        <translation type=\"vanished\">ターゲットが指定されていません</translation>\n    </message>\n    <message>\n        <source>Fuzzy search is not allowed when searching content</source>\n        <translation type=\"vanished\">コンテンツの検索時にあいまい検索はできません</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SearchTranslate</name>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"29\"/>\n        <source>Idle</source>\n        <translation>アイドル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"32\"/>\n        <source>Busy</source>\n        <translation>ビジー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"35\"/>\n        <source>Finished</source>\n        <translation>完了</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"38\"/>\n        <source>Failed</source>\n        <translation>失敗</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"41\"/>\n        <source>Stopped</source>\n        <translation>停止</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Searcher</name>\n    <message numerus=\"yes\">\n        <location filename=\"../../../search/searcher.cpp\" line=\"55\"/>\n        <source>Searching %n buffer(s)</source>\n        <translation>\n            <numerusform>%nバッファを検索中</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"96\"/>\n        <source>Searching folder (%1)</source>\n        <translation>フォルダ(%1)を検索しています</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"128\"/>\n        <source>Searching notebook (%1)</source>\n        <translation>ノートブック(%1)を検索しています</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"153\"/>\n        <source>Failed to compile tokens (%1)</source>\n        <translation>単語トークンの抽出に失敗しました(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"170\"/>\n        <source>Failed to search due to worker is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"353\"/>\n        <source>Failed to load node to search (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../search/searcher.cpp\" line=\"489\"/>\n        <source>Start second-phase search: %n files(s)</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"10\"/>\n        <source>Invalid keyword</source>\n        <translation type=\"unfinished\">キーワードが無効です</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"15\"/>\n        <source>No object specified</source>\n        <translation type=\"unfinished\">オブジェクトが指定されていません</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"20\"/>\n        <source>No target specified</source>\n        <translation type=\"unfinished\">ターゲットが指定されていません</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"26\"/>\n        <source>Fuzzy search is not allowed when searching content</source>\n        <translation type=\"unfinished\">コンテンツの検索時にあいまい検索はできません</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SelectDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/selectdialog.cpp\" line=\"55\"/>\n        <source>Cancel</source>\n        <translation>キャンセル</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SettingsDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/settingsdialog.cpp\" line=\"72\"/>\n        <source>Settings</source>\n        <translation>設定</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/settingsdialog.cpp\" line=\"86\"/>\n        <source>Search</source>\n        <translation>検索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/settingsdialog.cpp\" line=\"331\"/>\n        <source>A restart of VNote may be needed to make changes take effect. Restart VNote now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetInfoWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"43\"/>\n        <source>Name:</source>\n        <translation type=\"unfinished\">名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"50\"/>\n        <source>Description:</source>\n        <translation type=\"unfinished\">説明:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"53\"/>\n        <source>Type:</source>\n        <translation type=\"unfinished\">種類:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"56\"/>\n        <source>Shortcut:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"60\"/>\n        <source>A mark in the snippet content indicating the cursor position after the application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"63\"/>\n        <source>Cursor mark:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"67\"/>\n        <source>A mark in the snippet content that will be replaced with the selected text before the application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"70\"/>\n        <source>Selection mark:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"72\"/>\n        <source>Indent as first line</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"79\"/>\n        <source>Nested snippet is supported, like `%time%` to embed the snippet `time`</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"82\"/>\n        <source>Content:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"88\"/>\n        <source>Text</source>\n        <translation type=\"unfinished\">テキスト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"90\"/>\n        <source>Dynamic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"190\"/>\n        <source>None</source>\n        <translation type=\"unfinished\">なし</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetMgr</name>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"319\"/>\n        <source>the day as number without a leading zero (`1` to `31`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"323\"/>\n        <source>the day as number with a leading zero (`01` to `31`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"327\"/>\n        <source>the abbreviated localized day name (e.g. `Mon` to `Sun`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"331\"/>\n        <source>the long localized day name (e.g. `Monday` to `Sunday`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"335\"/>\n        <source>the month as number without a leading zero (`1` to `12`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"339\"/>\n        <source>the month as number with a leading zero (`01` to `12`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"343\"/>\n        <source>the abbreviated localized month name (e.g. `Jan` to `Dec`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"347\"/>\n        <source>the long localized month name (e.g. `January` to `December`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"351\"/>\n        <source>the year as two digit numbers (`00` to `99`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"355\"/>\n        <source>the year as four digit numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"359\"/>\n        <source>the week number without a leading zero (`1` to `53`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"365\"/>\n        <source>the week number with a leading zero (`01` to `53`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"371\"/>\n        <source>the hour without a leading zero (`0` to `23` even with AM/PM display)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"375\"/>\n        <source>the hour with a leading zero (`00` to `23` even with AM/PM display)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"379\"/>\n        <source>the minute without a leading zero (`0` to `59`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"383\"/>\n        <source>the minute with a leading zero (`00` to `59`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"387\"/>\n        <source>the second without a leading zero (`0` to `59`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"391\"/>\n        <source>the second with a leading zero (`00` to `59`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"395\"/>\n        <source>date (`2021-02-24`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"399\"/>\n        <source>the abbreviated date (`20210224`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"403\"/>\n        <source>time (`16:51:02`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"407\"/>\n        <source>date and time (`2021-02-24_16:51:02`)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"414\"/>\n        <source>name of current note</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"416\"/>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"422\"/>\n        <source>[Value Not Available]</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"420\"/>\n        <source>complete base name of current note</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetPanel</name>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"64\"/>\n        <source>New Snippet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"70\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\">フォルダを開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"77\"/>\n        <source>Show Built-In Snippets</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"101\"/>\n        <source>%n Item(s)</source>\n        <translation type=\"unfinished\">\n            <numerusform>%n アイテム</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"123\"/>\n        <source>%1%2 [%3]</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"144\"/>\n        <source>&amp;Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"151\"/>\n        <source>&amp;Delete</source>\n        <translation type=\"unfinished\">削除(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"156\"/>\n        <source>&amp;Properties (Rename)</source>\n        <translation type=\"unfinished\">プロパティ(名前変更)(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"201\"/>\n        <source>Confirm Deletion</source>\n        <translation type=\"unfinished\">削除の確認</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"202\"/>\n        <source>Delete these snippets permanently?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"203\"/>\n        <source>Files will be deleted permanently and could not be found even in operating system&apos;s recycle bin.</source>\n        <translation type=\"unfinished\">ファイルは永久に削除され、オペレーティングシステムのごみ箱にもはいりません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"226\"/>\n        <source>Failed to remove snippet (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetPropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"31\"/>\n        <source>%1 Properties</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"56\"/>\n        <source>Please specify a name for the snippet.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"65\"/>\n        <source>Name conflicts with existing snippet.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"92\"/>\n        <source>Failed to update snippet (%1) (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SortDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"54\"/>\n        <source>&amp;Top</source>\n        <translation>最上部(&amp;T)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"61\"/>\n        <source>&amp;Up</source>\n        <translation>上へ(&amp;U)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"68\"/>\n        <source>&amp;Down</source>\n        <translation>下へ(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"75\"/>\n        <source>&amp;Bottom</source>\n        <translation>最下部(&amp;B)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TableInsertDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"28\"/>\n        <source>Row count of the table body</source>\n        <translation>テーブル本体の行数</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"32\"/>\n        <source>Row:</source>\n        <translation>行:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"36\"/>\n        <source>Column count of the table</source>\n        <translation>テーブルの列数</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"40\"/>\n        <source>Column:</source>\n        <translation>列:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"44\"/>\n        <source>None</source>\n        <translation>なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"45\"/>\n        <source>Left</source>\n        <translation>左</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"46\"/>\n        <source>Center</source>\n        <translation>中心</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"47\"/>\n        <source>Right</source>\n        <translation>右</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"56\"/>\n        <source>Alignment:</source>\n        <translation>整列:</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TagExplorer</name>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"94\"/>\n        <source>Two Columns</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"379\"/>\n        <source>Search of tags succeeded: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"397\"/>\n        <source>&amp;Open</source>\n        <translation type=\"unfinished\">開く(&amp;O)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"407\"/>\n        <source>&amp;Locate Node</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"449\"/>\n        <source>&amp;New Tag</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"452\"/>\n        <source>&amp;Rename</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"454\"/>\n        <source>&amp;Delete</source>\n        <translation type=\"unfinished\">削除(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"501\"/>\n        <source>Delete the tag and all its chlidren tags?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"502\"/>\n        <source>Only tags and the references of them will be deleted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"510\"/>\n        <source>Tag deleted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"512\"/>\n        <source>Failed to delete tag: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"532\"/>\n        <source>Failed to move tag (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TagViewer</name>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"47\"/>\n        <source>Enter to add a tag</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"48\"/>\n        <source>[Shift+Enter] to add current selected tag in the list</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"324\"/>\n        <source>Tags updated: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"327\"/>\n        <source>Failed to update tags of node (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Task</name>\n    <message>\n        <location filename=\"../../../task/task.cpp\" line=\"456\"/>\n        <source>[Task (%1) started]\n</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../task/task.cpp\" line=\"471\"/>\n        <source>[Task (%1) error occurred (%2)]\n</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../task/task.cpp\" line=\"475\"/>\n        <source>\n[Task (%1) finished (%2)]\n</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TextEditor</name>\n    <message>\n        <location filename=\"../../../widgets/editors/texteditor.cpp\" line=\"33\"/>\n        <source>Insert Snippet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TextEditorPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"30\"/>\n        <source>Line number type</source>\n        <translation>行番号タイプ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"32\"/>\n        <source>None</source>\n        <translation>なし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"33\"/>\n        <source>Absolute</source>\n        <translation>絶対行番号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"34\"/>\n        <source>Relative</source>\n        <translation>相対行番号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"36\"/>\n        <source>Line number:</source>\n        <translation>行番号:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"44\"/>\n        <source>Fold text</source>\n        <translation>テキストを折りたたむ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"46\"/>\n        <source>Text folding</source>\n        <translation>テキストの折り畳み</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"55\"/>\n        <source>Input mode like Vi</source>\n        <translation>Viのような入力モード</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"57\"/>\n        <source>Normal</source>\n        <translation>標準</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"58\"/>\n        <source>Vi</source>\n        <translation>Vi</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"59\"/>\n        <source>VSCode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"61\"/>\n        <source>Input mode:</source>\n        <translation>入力モード:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"70\"/>\n        <source>Force to center text cursor</source>\n        <translation>テキストカーソルを強制的に中央揃えにする</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"72\"/>\n        <source>Never</source>\n        <translation>常にしない</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"73\"/>\n        <source>Always Center</source>\n        <translation>常に中央</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"74\"/>\n        <source>Center On Bottom</source>\n        <translation>下部の中心</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"76\"/>\n        <source>Center cursor:</source>\n        <translation>中央カーソル:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"85\"/>\n        <source>Word wrap mode of editor</source>\n        <translation>エディタの行折り返しモード</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"87\"/>\n        <source>No Wrap</source>\n        <translation>折り返しなし</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"88\"/>\n        <source>Word Wrap</source>\n        <translation>ワード折り返し</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"89\"/>\n        <source>Wrap Anywhere</source>\n        <translation>任意の場所で折り返し</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"90\"/>\n        <source>Word Wrap Or Wrap Anywhere</source>\n        <translation>ワード折り返しまたは任意の場所で折り返し</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"92\"/>\n        <source>Wrap mode:</source>\n        <translation>折り返しモード:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"100\"/>\n        <source>Expand Tab</source>\n        <translation>タブを展開</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"102\"/>\n        <source>Expand Tab into spaces</source>\n        <translation>タブをスペースに展開</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"111\"/>\n        <source>Number of spaces to use where Tab is needed</source>\n        <translation>タブが必要な場所で使用するスペースの数</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"116\"/>\n        <source>Tab stop width:</source>\n        <translation>タブストップの幅:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"124\"/>\n        <source>Highlight whitespace</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"126\"/>\n        <source>Highlight Tab and trailing space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"135\"/>\n        <source>Zoom delta of the basic font size</source>\n        <translation>基本フォントサイズのズーム差</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"140\"/>\n        <source>Zoom delta:</source>\n        <translation>ズーム差:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"148\"/>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"150\"/>\n        <source>Spell check</source>\n        <translation>スペルチェック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"242\"/>\n        <source>Text Editor</source>\n        <translation>テキストエディタ</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ThemeMgr</name>\n    <message>\n        <location filename=\"../../../core/thememgr.cpp\" line=\"238\"/>\n        <location filename=\"../../../core/thememgr.cpp\" line=\"244\"/>\n        <source>[Theme] %1 %2</source>\n        <translation>[テーマ] %1 %2</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ThemePage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"49\"/>\n        <source>Refresh</source>\n        <translation>再表示</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"57\"/>\n        <source>Add/Delete</source>\n        <translation>追加/削除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"65\"/>\n        <source>Update</source>\n        <translation>更新</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"68\"/>\n        <source>Open Location</source>\n        <translation>場所を開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"78\"/>\n        <source>No Preview Available</source>\n        <translation>プレビューがありません</translation>\n    </message>\n    <message>\n        <source>Style Override</source>\n        <translation type=\"vanished\">優先スタイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"109\"/>\n        <source>Theme</source>\n        <translation>テーマ</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TitleBar</name>\n    <message>\n        <location filename=\"../../../widgets/titlebar.cpp\" line=\"90\"/>\n        <source>Menu</source>\n        <translation>メニュー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titlebar.cpp\" line=\"94\"/>\n        <source>Settings</source>\n        <translation>設定</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TitleToolBar</name>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"39\"/>\n        <source>Minimize</source>\n        <translation>最小化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"46\"/>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"70\"/>\n        <source>Maximize</source>\n        <translation>最大化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"52\"/>\n        <source>Close</source>\n        <translation>閉じる</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"67\"/>\n        <source>Restore Down</source>\n        <translation>復元ダウン</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::UnitedEntry</name>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"99\"/>\n        <source>United Entry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"76\"/>\n        <source>Type to command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"118\"/>\n        <source>Options</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"124\"/>\n        <source>Expand All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"145\"/>\n        <source>Busy</source>\n        <translation type=\"unfinished\">ビジー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"354\"/>\n        <source>Unknown entry: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"370\"/>\n        <source>Entry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"370\"/>\n        <source>Description</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::UnitedEntryAlias</name>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentryalias.cpp\" line=\"35\"/>\n        <source>[Alias] </source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentryalias.cpp\" line=\"64\"/>\n        <source>Invalid United Entry alias: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Updater</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"34\"/>\n        <source>Version:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"36\"/>\n        <source>Fetching information...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"37\"/>\n        <source>Latest version:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"43\"/>\n        <source>View Releases</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"50\"/>\n        <source>Check for Updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"65\"/>\n        <source>Failed to fetch information (%1).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::VNoteX</name>\n    <message>\n        <location filename=\"../../../core/htmltemplatehelper.cpp\" line=\"329\"/>\n        <source>Failed to load HTML template. Check the logs for details. Try deleting the user configuration file and the default configuration file.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/vipage.cpp\" line=\"28\"/>\n        <source>Ctrl+C/X to copy/cut</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/vipage.cpp\" line=\"30\"/>\n        <source>Use Ctrl+C/X to copy/cut text</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/vipage.cpp\" line=\"61\"/>\n        <source>Vi Input Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewArea</name>\n    <message>\n        <location filename=\"../../../widgets/viewarea.cpp\" line=\"988\"/>\n        <source>No recently closed file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewSplit</name>\n    <message>\n        <source>Windows List</source>\n        <translation type=\"vanished\">ウインドウリスト</translation>\n    </message>\n    <message>\n        <source>Workspaces and Splits</source>\n        <translation type=\"vanished\">ワークスペースと分割</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"135\"/>\n        <source>Open Windows</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"159\"/>\n        <source>Menu</source>\n        <translation type=\"unfinished\">メニュー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"433\"/>\n        <source>No Window To Show</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"462\"/>\n        <source>Workspaces</source>\n        <translation>ワークスペース</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"478\"/>\n        <source>Workspace %1</source>\n        <translation>ワークスペース%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"494\"/>\n        <source>New Workspace</source>\n        <translation>新しいワークスペース</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"501\"/>\n        <source>Remove Workspace</source>\n        <translation>ワークスペースを削除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"510\"/>\n        <source>Split</source>\n        <translation>分割</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"511\"/>\n        <source>Vertical Split</source>\n        <translation>垂直分割</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"517\"/>\n        <source>Horizontal Split</source>\n        <translation>水平分割</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"523\"/>\n        <source>Maximize Split</source>\n        <translation>分割の最大化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"529\"/>\n        <source>Distribute Splits</source>\n        <translation>分割を整列する</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"535\"/>\n        <source>Remove Split</source>\n        <translation>分割終了</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"540\"/>\n        <source>Remove Split And Workspace</source>\n        <translation>分割とワークスペースを削除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"556\"/>\n        <source>Close Tab</source>\n        <translation>タブを閉じる</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"566\"/>\n        <source>Close All Tabs</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"576\"/>\n        <source>Close Other Tabs</source>\n        <translation>他のタブを閉じる</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"586\"/>\n        <source>Close Tabs To The Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"596\"/>\n        <source>Close Tabs To The Right</source>\n        <translation>右側のタブを閉じる</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"607\"/>\n        <source>Auto Reload</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"608\"/>\n        <source>Reload file from disk automatically if it is changed outside</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"626\"/>\n        <source>Copy Path</source>\n        <translation>パスをコピー</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"632\"/>\n        <source>Copied path: %1</source>\n        <translation>コピーされたファイルパス: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"637\"/>\n        <source>Open Location</source>\n        <translation>場所を開く</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"649\"/>\n        <source>Locate Node</source>\n        <translation>ノードの検索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"662\"/>\n        <source>Pin To Quick Access</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"680\"/>\n        <source>Move One Split Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"692\"/>\n        <source>Move One Split Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"704\"/>\n        <source>Move One Split Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"716\"/>\n        <source>Move One Split Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewTagsDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/viewtagsdialog.cpp\" line=\"32\"/>\n        <source>Name:</source>\n        <translation type=\"unfinished\">名前:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/viewtagsdialog.cpp\" line=\"35\"/>\n        <source>Tags:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/viewtagsdialog.cpp\" line=\"39\"/>\n        <source>Tags</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewWindow</name>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/attachmentdragdropareaindicator.cpp\" line=\"38\"/>\n        <source>Attached %n file(s)</source>\n        <translation>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"215\"/>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"234\"/>\n        <source>[No Buffer]</source>\n        <translation>[バッファなし]</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"658\"/>\n        <source>Save changes before closing note (%1)?</source>\n        <translation>ノート(%1)を閉じる前に変更を保存しますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"659\"/>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"719\"/>\n        <source>Note path (%1).</source>\n        <translation>ノートのパス(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"718\"/>\n        <source>Discard changes to note (%1)?</source>\n        <translation>ノート(%1)への変更を破棄しますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"799\"/>\n        <source>Found backup file (%1) of file (%2). Do you want to recover from backup file?</source>\n        <translation>ファイル(%2)のバックアップファイル(%1)が見つかりました。バックアップファイルからリカバリしますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"800\"/>\n        <source>&apos;Yes&apos; to recover from backup file, &apos;No&apos; to discard it, and &apos;Cancel&apos; to exit.</source>\n        <translation>バックアップファイルからリカバリする場合は[はい]、破棄する場合は[いいえ]、終了する場合は[キャンセル]をクリックします。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"801\"/>\n        <source>It may be caused by crash while editing this file before.\n\nFile last modified time: %1\nBackup file last modified time: %2</source>\n        <translation>以前このファイルを編集中にクラッシュが発生した可能性があります。\n\nファイルの最終変更時刻:%1\nバックアップファイルの最終変更時刻:%2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"830\"/>\n        <source>Drag And Drop Files To Attach</source>\n        <translation>添付するファイルをドラッグアンドドロップ</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"895\"/>\n        <source>File is missing on disk (%1).</source>\n        <translation>ディスク(%1)にファイルがありません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"896\"/>\n        <source>Do you want to force to save the buffer to the file?</source>\n        <translation>バッファをファイルに保存しますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"897\"/>\n        <source>The file may be deleted from outside. Please choose to save the buffer to a new file or just discard it.</source>\n        <translation>ファイルが外部から削除されている可能性があります。バッファを新しいファイルに保存するか、破棄するかを選択してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"919\"/>\n        <source>File is changed from outside (%1).</source>\n        <translation>ファイルが外部(%1)から変更されました。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"920\"/>\n        <source>Do you want to save the buffer to the file to override, or discard the buffer?</source>\n        <translation>上書きするファイルにバッファを保存しますか?それともバッファを破棄しますか?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"921\"/>\n        <source>The file is changed from outside. Please choose to save the buffer to the file or just discard the buffer and reload the file.</source>\n        <translation>ファイルが外部から変更されました。バッファをファイルに保存するか、バッファを破棄してファイルを再ロードするかを選択してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"969\"/>\n        <source>This is a read-only note (%1), on which modification is not allowed.</source>\n        <translation>これは読み取り専用のノート(%1)です。変更はできません。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"970\"/>\n        <source>Please save your changes to another note.</source>\n        <translation>手動で変更を他のノートとして保存してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"978\"/>\n        <source>Failed to save note (%1).</source>\n        <translation>ノート(%1)を保存できませんでした。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"979\"/>\n        <source>Please check the file (%1) and try it again.</source>\n        <translation>ファイルを確認してからもう一度実行してください。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"980\"/>\n        <source>Maybe the file is occupied by another service temporarily.</source>\n        <translation>ファイルが一時的に他のサービスに占有されている可能性があります。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1077\"/>\n        <source>Zoomed: %1%</source>\n        <translation>ズーム: %1%</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1082\"/>\n        <source>Zoomed: %1%2</source>\n        <translation>ズーム: %1%2</translation>\n    </message>\n    <message>\n        <source>Pattern not found: %1%2</source>\n        <translation type=\"obsolete\">パターンが見つかりません:%1%2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1224\"/>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1233\"/>\n        <source>Pattern not found: %1</source>\n        <translation>パターンが見つかりません:%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1393\"/>\n        <source>View Mode Not Supported</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1226\"/>\n        <source>Match found: %1/%2</source>\n        <translation>一致が見つかりました: %1/%2</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1235\"/>\n        <source>Replaced %n match(es)</source>\n        <translation>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1351\"/>\n        <source>Local</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"95\"/>\n        <source>Save</source>\n        <translation>保存</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"102\"/>\n        <source>Edit</source>\n        <translation>編集</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"104\"/>\n        <source>Read</source>\n        <translation>読み取り</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"106\"/>\n        <source>Discard</source>\n        <translation>破棄</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"125\"/>\n        <source>View Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"139\"/>\n        <source>Heading</source>\n        <translation>見出し</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"148\"/>\n        <source>Heading 1</source>\n        <translation>見出し1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"155\"/>\n        <source>Heading 2</source>\n        <translation>見出し2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"162\"/>\n        <source>Heading 3</source>\n        <translation>見出し3</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"169\"/>\n        <source>Heading 4</source>\n        <translation>見出し4</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"176\"/>\n        <source>Heading 5</source>\n        <translation>見出し5</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"183\"/>\n        <source>Heading 6</source>\n        <translation>見出し6</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"190\"/>\n        <source>Clear</source>\n        <translation>クリア</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"203\"/>\n        <source>Bold</source>\n        <translation>太字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"209\"/>\n        <source>Italic</source>\n        <translation>イタリック体</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"215\"/>\n        <source>Strikethrough</source>\n        <translation>取り消し線</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"221\"/>\n        <source>Unordered List</source>\n        <translation>順序なしリスト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"227\"/>\n        <source>Ordered List</source>\n        <translation>順序付きリスト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"233\"/>\n        <source>Todo List</source>\n        <translation>TODOリスト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"239\"/>\n        <source>Checked Todo List</source>\n        <translation>チェックされたToDoリスト</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"245\"/>\n        <source>Code</source>\n        <translation>コード</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"251\"/>\n        <source>Code Block</source>\n        <translation>コードブロック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"257\"/>\n        <source>Math</source>\n        <translation>数式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"263\"/>\n        <source>Math Block</source>\n        <translation>数式ブロック</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"269\"/>\n        <source>Quote</source>\n        <translation>引用</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"275\"/>\n        <source>Link</source>\n        <translation>リンク</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"281\"/>\n        <source>Image</source>\n        <translation>画像</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"287\"/>\n        <source>Table</source>\n        <translation>表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"293\"/>\n        <source>Mark</source>\n        <translation>マーク</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"300\"/>\n        <source>Attachments</source>\n        <translation>添付ファイル</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"317\"/>\n        <source>Tags</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"334\"/>\n        <source>Outline</source>\n        <translation>アウトライン</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"351\"/>\n        <source>Find And Replace</source>\n        <translation>検索/置換</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"359\"/>\n        <source>Section Number</source>\n        <translation>セクション番号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"369\"/>\n        <source>Follow Configuration</source>\n        <translation>設定に従う</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"375\"/>\n        <source>Enabled</source>\n        <translation>有効</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"380\"/>\n        <source>Disabled</source>\n        <translation>無効</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"392\"/>\n        <source>Toggle In-Place Preview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"401\"/>\n        <source>Image Host</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"415\"/>\n        <source>Debug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"422\"/>\n        <source>Print</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"430\"/>\n        <source>Word Count</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"238\"/>\n        <source>Snippet applied: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"265\"/>\n        <source>Snippet (%1) not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"292\"/>\n        <source>Snippet not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"305\"/>\n        <source>Select Snippet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::WebViewExporter</name>\n    <message>\n        <location filename=\"../../../export/webviewexporter.cpp\" line=\"355\"/>\n        <source>Table of Contents</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/webviewexporter.cpp\" line=\"590\"/>\n        <source>Copy output file (%1) to (%2).</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::WordCountPanel</name>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"17\"/>\n        <source>Selection Area</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"24\"/>\n        <source>Words</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"28\"/>\n        <source>Characters (no spaces)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"32\"/>\n        <source>Characters (with spaces)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "src/data/core/translations/vnote_zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\">\n<context>\n    <name>QMessageBox</name>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"12\"/>\n        <source>Question</source>\n        <translation>问题</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"16\"/>\n        <source>Information</source>\n        <translation>信息</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"20\"/>\n        <source>Warning</source>\n        <translation>警告</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/messageboxhelper.cpp\" line=\"24\"/>\n        <source>Critical</source>\n        <translation>严重</translation>\n    </message>\n</context>\n<context>\n    <name>QObject</name>\n    <message>\n        <location filename=\"../../../core/notebook/bundlenotebookfactory.cpp\" line=\"27\"/>\n        <source>Bundle Notebook</source>\n        <translation>自包含笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebook/bundlenotebookfactory.cpp\" line=\"32\"/>\n        <source>A notebook with configuration files to track its content</source>\n        <translation>使用配置文件来索引内容的笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookbackend/localnotebookbackendfactory.cpp\" line=\"20\"/>\n        <source>Local Notebook Backend</source>\n        <translation>本地笔记本后端</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookbackend/localnotebookbackendfactory.cpp\" line=\"25\"/>\n        <source>Local file system</source>\n        <translation>本地文件系统</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp\" line=\"12\"/>\n        <source>VNoteX Notebook Configuration</source>\n        <translation>VNoteX笔记本配置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp\" line=\"14\"/>\n        <source>Built-in VNoteX notebook configuration</source>\n        <translation>内建的VNoteX笔记本配置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/versioncontroller/dummyversioncontrollerfactory.cpp\" line=\"20\"/>\n        <source>No Version Control</source>\n        <translation>无版本控制</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/versioncontroller/dummyversioncontrollerfactory.cpp\" line=\"25\"/>\n        <source>Disable version control</source>\n        <translation>禁用版本控制</translation>\n    </message>\n</context>\n<context>\n    <name>QWebEnginePage</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"316\"/>\n        <source>&amp;Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"317\"/>\n        <source>&amp;Forward</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"318\"/>\n        <source>&amp;Reload</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::AppearancePage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"32\"/>\n        <source>System title bar</source>\n        <translation>系统标题栏</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"34\"/>\n        <source>Use system title bar</source>\n        <translation>使用系统标题栏</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"43\"/>\n        <source>Icon size of the main window tool bar</source>\n        <translation>主窗口工具栏图标大小</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"48\"/>\n        <source>Main tool bar icon size:</source>\n        <translation>主工具栏图标大小:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"70\"/>\n        <source>Dock widgets kept when expanding content area:</source>\n        <translation>扩展内容区时保留的停靠部件:</translation>\n    </message>\n    <message>\n        <source>Keep dock widgets when expanding content area:</source>\n        <translation type=\"vanished\">扩展内容区时保留停靠部件:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/appearancepage.cpp\" line=\"125\"/>\n        <source>Appearance</source>\n        <translation>外观</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::AttachmentPopup</name>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"63\"/>\n        <source>Add</source>\n        <translation>添加</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"73\"/>\n        <source>Select Files As Attachments</source>\n        <translation>选择文件作为附件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"93\"/>\n        <source>New File</source>\n        <translation>新建文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"101\"/>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"125\"/>\n        <source>New Attachment</source>\n        <translation>新建附件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"102\"/>\n        <source>File name:</source>\n        <translation>文件名:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"117\"/>\n        <source>New Folder</source>\n        <translation>新建文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"126\"/>\n        <source>Folder name:</source>\n        <translation>文件夹名:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"141\"/>\n        <source>Open Folder</source>\n        <translation>打开文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"157\"/>\n        <source>Open</source>\n        <translation>打开</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"178\"/>\n        <source>Delete</source>\n        <translation>删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"215\"/>\n        <source>Copy Path</source>\n        <translation>复制路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"231\"/>\n        <source>Properties</source>\n        <translation>属性</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"250\"/>\n        <source>Failed to rename attachment (%1) to (%2).</source>\n        <translation>无法将附件(%1)重命名为(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"251\"/>\n        <source>Please try another name again.</source>\n        <translation>请尝试其他名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/attachmentpopup.cpp\" line=\"290\"/>\n        <source>Please select one directory to continue.</source>\n        <translation>请选择一个目录并继续。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Buffer</name>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"47\"/>\n        <source>Markdown</source>\n        <translation>Markdown</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"66\"/>\n        <source>Text</source>\n        <translation>文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"82\"/>\n        <source>Portable Document Format</source>\n        <translation>便携文件格式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"99\"/>\n        <source>Mind Map</source>\n        <translation>思维导图</translation>\n    </message>\n    <message>\n        <location filename=\"../../../core/buffer/filetypehelper.cpp\" line=\"115\"/>\n        <source>Others</source>\n        <translation>其他</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ConsoleViewer</name>\n    <message>\n        <location filename=\"../../../widgets/consoleviewer.cpp\" line=\"44\"/>\n        <source>Clear</source>\n        <translation>清空</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::DeleteConfirmDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/deleteconfirmdialog.cpp\" line=\"62\"/>\n        <source>Do not ask again</source>\n        <translation>不再询问</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/deleteconfirmdialog.cpp\" line=\"210\"/>\n        <source>%1/%2 Items</source>\n        <translation>%1/%2项</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::DockWidgetHelper</name>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"143\"/>\n        <source>Navigation</source>\n        <translation>导航</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"154\"/>\n        <source>Outline</source>\n        <translation>大纲</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"176\"/>\n        <source>Console</source>\n        <translation>控制台</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"188\"/>\n        <source>Search</source>\n        <translation>搜索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"199\"/>\n        <source>Snippets</source>\n        <translation>片段</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"210\"/>\n        <source>History</source>\n        <translation>历史</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"221\"/>\n        <source>Tags</source>\n        <translation>标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"232\"/>\n        <source>Location List</source>\n        <translation>位置列表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dockwidgethelper.cpp\" line=\"165\"/>\n        <source>Open Windows</source>\n        <translation>已打开窗口</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::EditorPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"32\"/>\n        <source>Auto save policy</source>\n        <translation>自动保存策略</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"34\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"35\"/>\n        <source>Auto Save</source>\n        <translation>自动保存</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"36\"/>\n        <source>Backup File</source>\n        <translation>备份文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"38\"/>\n        <source>Auto save policy:</source>\n        <translation>自动保存策略:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"47\"/>\n        <source>Line ending</source>\n        <translation>行结尾</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"49\"/>\n        <source>Follow Platform</source>\n        <translation>跟随平台</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"50\"/>\n        <source>Follow File</source>\n        <translation>跟随文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"51\"/>\n        <source>LF (Linux/macOS)</source>\n        <translation>LF(Linux/macOS)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"52\"/>\n        <source>CR LF (Windows)</source>\n        <translation>CR LF(Windows)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"53\"/>\n        <source>CR</source>\n        <translation>CR</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"55\"/>\n        <source>Line ending:</source>\n        <translation>行结尾:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"64\"/>\n        <source>Icon size of the editor tool bar</source>\n        <translation>编辑器工具栏图标大小</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"69\"/>\n        <source>Tool bar icon size:</source>\n        <translation>工具栏图标大小:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"81\"/>\n        <source>Default dictionary used for spell check</source>\n        <translation>拼写检查默认词典</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"91\"/>\n        <source>Add Dictionary</source>\n        <translation>添加词典</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"97\"/>\n        <source>VNote uses [Hunspell](http://hunspell.github.io/) for spell check.</source>\n        <translation>VNote使用[Hunspell](http://hunspell.github.io/)进行拼写检查。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"98\"/>\n        <source>Please download Hunspell&apos;s dictionaries, put them under (%1) and restart VNote.</source>\n        <translation>请下载Hunspell的词典，放置于(%1)并重启VNote。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"107\"/>\n        <source>Spell check dictionary:</source>\n        <translation>拼写检查词典:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/editorpage.cpp\" line=\"166\"/>\n        <source>Editor</source>\n        <translation>编辑器</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ExportDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"90\"/>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"255\"/>\n        <source>Export</source>\n        <translation>导出</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"95\"/>\n        <source>Source</source>\n        <translation>源</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"101\"/>\n        <source>Current Buffer (%1)</source>\n        <translation>当前缓冲区(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"105\"/>\n        <source>Current Note (%1)</source>\n        <translation>当前笔记(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"109\"/>\n        <source>Current Folder (%1)</source>\n        <translation>当前文件夹(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"113\"/>\n        <source>Current Notebook (%1)</source>\n        <translation>当前笔记本(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"116\"/>\n        <source>Source:</source>\n        <translation>源:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"128\"/>\n        <source>vnote_exports</source>\n        <translation>vnote导出</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"133\"/>\n        <source>Target</source>\n        <translation>目标</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"138\"/>\n        <source>Markdown</source>\n        <translation>Markdown</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"140\"/>\n        <source>HTML</source>\n        <translation>HTML网页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"142\"/>\n        <source>PDF</source>\n        <translation>PDF</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"144\"/>\n        <source>Custom</source>\n        <translation>自定义</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"168\"/>\n        <source>Format:</source>\n        <translation>格式:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"172\"/>\n        <source>Use transparent background</source>\n        <translation>使用透明背景</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"180\"/>\n        <source>Rendering style:</source>\n        <translation>渲染样式:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"186\"/>\n        <source>Syntax highlighting style:</source>\n        <translation>语法高亮样式:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"442\"/>\n        <source>Please specify a valid scheme</source>\n        <translation>请指定一个有效的方案</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"654\"/>\n        <source>Add Table-of-Contents</source>\n        <translation>添加内容导航表格</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"661\"/>\n        <source>Use wkhtmltopdf (outline supported)</source>\n        <translation>使用wkhtmltopdf(支持大纲)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"676\"/>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"773\"/>\n        <source>Export all source files into one file</source>\n        <translation>导出所有的源文件到一个文件中</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"691\"/>\n        <source>Browse</source>\n        <translation>浏览</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"786\"/>\n        <source>Command:\n\t%1: List of input files.\n\t%2: List of paths to search for images and other resources.\n\t%3: Path of rendering CSS style sheet.\n\t%4: Path of syntax highlighting CSS style sheet.\n\t%5: Path of output file.</source>\n        <translation>命令:\n\t%1: 输入文件列表。\n\t%2: 搜索图片和其他资源的路径列表。\n\t%3: 用于渲染的 CSS 样式表文件路径。\n\t%4: 用于语法高亮的 CSS 样式表文件路径。\n\t%5: 输出文件路径。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"905\"/>\n        <source>New Custom Export Scheme</source>\n        <translation>新建自定义导出方案</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"905\"/>\n        <source>Scheme name:</source>\n        <translation>方案名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"912\"/>\n        <source>Name conflicts with existing scheme.</source>\n        <translation>名字和已有方案冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"946\"/>\n        <source>Delete scheme (%1)?</source>\n        <translation>删除方案(%1)?</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"203\"/>\n        <source>Select Export Output Directory</source>\n        <translation>选择导出输出目录</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"194\"/>\n        <source>Output directory:</source>\n        <translation>输出目录:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"219\"/>\n        <source>Advanced</source>\n        <translation>高级</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"237\"/>\n        <source>Process sub-folders</source>\n        <translation>处理子文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"242\"/>\n        <source>Export attachments</source>\n        <translation>导出附件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"259\"/>\n        <source>Open Directory</source>\n        <translation>打开目录</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"268\"/>\n        <source>Copy Content</source>\n        <translation>复制内容</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"269\"/>\n        <source>Copy exported file content</source>\n        <translation>复制已导出文件的内容</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"389\"/>\n        <source>%n file(s) exported</source>\n        <translation>\n            <numerusform>已导出 %n 个文件</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"402\"/>\n        <source>Cancelling the export</source>\n        <translation>正在取消导出</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"433\"/>\n        <source>Please specify a valid wkhtmltopdf executable file (%1)</source>\n        <translation>请指定一个有效的wkhtmltopdf可执行文件(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"526\"/>\n        <source>Embed styles</source>\n        <translation>嵌入样式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"531\"/>\n        <source>Embed images</source>\n        <translation>嵌入图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"536\"/>\n        <source>Complete page</source>\n        <translation>完整页面</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"537\"/>\n        <source>Export the whole page along with images which may change the links structure</source>\n        <translation>导出包括图像的完整页面，可能改变链接结构</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"547\"/>\n        <source>Mime HTML format</source>\n        <translation>Mime HTML格式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"561\"/>\n        <source>Add outline panel</source>\n        <translation>添加大纲面板</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"632\"/>\n        <source>Settings</source>\n        <translation>设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"650\"/>\n        <source>Page layout:</source>\n        <translation>页面布局:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"664\"/>\n        <source>Download</source>\n        <translation>下载</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"675\"/>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"772\"/>\n        <source>All-in-One</source>\n        <translation>多合一</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"696\"/>\n        <source>Select wkhtmltopdf Executable</source>\n        <translation>选择wkhtmltopdf可执行文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"704\"/>\n        <source>Wkhtmltopdf path:</source>\n        <translation>Wkhtmltopdf路径:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"709\"/>\n        <source>Wkhtmltopdf arguments:</source>\n        <translation>Wkhtmltopdf参数:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"731\"/>\n        <source>Scheme:</source>\n        <translation>方案:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"737\"/>\n        <source>New</source>\n        <translation>新建</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"743\"/>\n        <source>Delete</source>\n        <translation>删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"752\"/>\n        <source>Suffix of the target file like docs/pdf/epub</source>\n        <translation>目标文件的后缀，如docs/pdf/epub</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"754\"/>\n        <source>Target file suffix:</source>\n        <translation>目标文件后缀:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"759\"/>\n        <source>Separator used to concatenate resource folder paths</source>\n        <translation>用于连接资源文件夹路径的分隔符</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"761\"/>\n        <source>Resource path separator:</source>\n        <translation>资源路径分隔符:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"765\"/>\n        <source>Use HTML format as input</source>\n        <translation>使用HTML格式作为输入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"766\"/>\n        <source>Convert to HTMl format first as the input of the custom export command</source>\n        <translation>首先转换为HTML格式然后作为自定义输出命令的输入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"779\"/>\n        <source>Target page scrollable</source>\n        <translation>目标页面可滚动</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"780\"/>\n        <source>Whether the page of the target file is scrollable</source>\n        <translation>目标文件的页面是否可滚动的</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"883\"/>\n        <source>Portrait</source>\n        <translation>纵向</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/exportdialog.cpp\" line=\"883\"/>\n        <source>Landscape</source>\n        <translation>横向</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Exporter</name>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"32\"/>\n        <source>Skipped buffer (%1) without file base.</source>\n        <translation>跳过非基于文件的缓冲区(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"38\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"120\"/>\n        <source>Failed to create output folder (%1).</source>\n        <translation>无法创建输出文件夹(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"64\"/>\n        <source>Format %1 is not supported to export as Markdown.</source>\n        <translation>格式%1不支持导出为Markdown。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"73\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"139\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"189\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"297\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"406\"/>\n        <source>Failed to create output folder under (%1).</source>\n        <translation>无法在(%1)中创建输出文件夹。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"170\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"245\"/>\n        <source>all_in_one_export</source>\n        <translation>多合一导出</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"174\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"253\"/>\n        <source>Exported to (%1).</source>\n        <translation>输出到(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"304\"/>\n        <source>Failed to load node (%1) (%2).</source>\n        <translation>无法加载节点(%1)(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"356\"/>\n        <source>Unknown target format %1.</source>\n        <translation>未知的目标格式%1。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"361\"/>\n        <source>File (%1) exported to (%2)</source>\n        <translation>文件(%1)已导出为(%2)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"363\"/>\n        <source>Failed to export file (%1)</source>\n        <translation>无法导出文件(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"620\"/>\n        <source>Custom command: %1</source>\n        <translation>自定义命令: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"136\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"186\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"404\"/>\n        <source>notebook_%1</source>\n        <translation>笔记本_%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"146\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"200\"/>\n        <location filename=\"../../../export/exporter.cpp\" line=\"545\"/>\n        <source>Failed to create temporary directory to hold HTML files.</source>\n        <translation>无法创建临时目录存放HTML文件。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"443\"/>\n        <source>Format %1 is not supported to export as HTML.</source>\n        <translation>格式%1不支持导出为HTML。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"503\"/>\n        <source>Asked to stop. Aborting.</source>\n        <translation>用户取消。正在终止。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/exporter.cpp\" line=\"514\"/>\n        <source>Format %1 is not supported to export as PDF.</source>\n        <translation>格式%1不支持导出为PDF。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FileAssociationPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"35\"/>\n        <source>Built-In File Types</source>\n        <translation>内建文件类型</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"39\"/>\n        <source>External Programs</source>\n        <translation>外部程序</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"82\"/>\n        <source>File Associations</source>\n        <translation>文件关联</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"102\"/>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"130\"/>\n        <source>Suffixes separated by ;</source>\n        <translation>由;分隔的后缀</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"103\"/>\n        <source>List of suffixes for this file type</source>\n        <translation>该文件类型的后缀列表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/fileassociationpage.cpp\" line=\"131\"/>\n        <source>List of suffixes to open with external program (or system default program)</source>\n        <translation>需要使用外部程序打开的后缀列表(或者系统默认程序)</translation>\n    </message>\n    <message>\n        <source>List of suffixes to open with external program</source>\n        <translation type=\"vanished\">需要使用外部程序打开的后缀列表</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FilePropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"38\"/>\n        <source>Location:</source>\n        <translation>路径:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"42\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"44\"/>\n        <source>Size:</source>\n        <translation>大小:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"44\"/>\n        <source>%1 Bytes</source>\n        <translation>%1字节</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/filepropertiesdialog.cpp\" line=\"48\"/>\n        <source>Properties</source>\n        <translation>属性</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FileSearchEngineWorker</name>\n    <message>\n        <location filename=\"../../../search/filesearchengine.cpp\" line=\"39\"/>\n        <source>Skip binary file (%1)</source>\n        <translation>跳过二进制文件(%1)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FileSystemViewer</name>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"149\"/>\n        <source>&amp;Open</source>\n        <translation>打开(&amp;O)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"159\"/>\n        <source>&amp;Delete</source>\n        <translation>删除(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"169\"/>\n        <source>&amp;Properties</source>\n        <translation>属性(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"188\"/>\n        <source>Cop&amp;y Path</source>\n        <translation>复制路径(&amp;Y)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/filesystemviewer.cpp\" line=\"194\"/>\n        <source>Copied path: %1</source>\n        <translation>已复制路径: %1</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FindAndReplaceWidget</name>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"54\"/>\n        <source>Find And Replace</source>\n        <translation>查找替换</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"64\"/>\n        <source>Close</source>\n        <translation>关闭</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"76\"/>\n        <source>Find:</source>\n        <translation>查找:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"79\"/>\n        <source>Search</source>\n        <translation>查找</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"88\"/>\n        <source>Find &amp;Next</source>\n        <translation>查找下一个(&amp;N)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"94\"/>\n        <source>Find &amp;Previous</source>\n        <translation>查找上一个(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"107\"/>\n        <source>Replace with:</source>\n        <translation>替换为:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"110\"/>\n        <source>\\1, \\2 for back reference in regular expression</source>\n        <translation>在正则表达式中使用\\1和\\2来后向引用</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"113\"/>\n        <source>Replace</source>\n        <translation>替换</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"118\"/>\n        <source>Replace And Find</source>\n        <translation>替换并查找</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"123\"/>\n        <source>Replace All</source>\n        <translation>替换全部</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"141\"/>\n        <source>&amp;Case sensitive</source>\n        <translation>大小写敏感(&amp;C)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"146\"/>\n        <source>&amp;Whole word only</source>\n        <translation>匹配完整词(&amp;W)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"151\"/>\n        <source>Re&amp;gular expression</source>\n        <translation>正则表达式(&amp;G)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/findandreplacewidget.cpp\" line=\"156\"/>\n        <source>&amp;Incremental search</source>\n        <translation>增量查找(&amp;I)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FindUnitedEntry</name>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"29\"/>\n        <source>Search for files in notebooks</source>\n        <translation>在笔记本中搜索文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"43\"/>\n        <source>Search for files in notebooks with advanced options for scope, object, target and so on.</source>\n        <translation>在笔记本中搜索文件，支持高级选项如范围、对象和目标等等。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"45\"/>\n        <source>Keywords to search for.</source>\n        <translation>搜索的关键词。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"48\"/>\n        <source>Search scope. Possible values: buffer/folder/notebook/all_notebook.</source>\n        <translation>搜索范围。可能的值：buffer/folder/notebook/all_notebook。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"49\"/>\n        <source>search_scope</source>\n        <translation>搜索范围</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"54\"/>\n        <source>Search objects. Possible values: name/content/tag/path.</source>\n        <translation>搜索对象。可能的值：name/content/tag/path。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"55\"/>\n        <source>search_objects</source>\n        <translation>搜索对象</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"60\"/>\n        <source>Search targets. Possible values: file/folder/notebook.</source>\n        <translation>搜索目标。可能的值：file/folder/notebook。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"61\"/>\n        <source>search_targets</source>\n        <translation>搜索目标</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"66\"/>\n        <source>Wildcard pattern of files to search.</source>\n        <translation>需要搜索的文件的通配符模式。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/findunitedentry.cpp\" line=\"67\"/>\n        <source>file_pattern</source>\n        <translation>文件模式</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FolderFilesFilterWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"44\"/>\n        <source>Folder:</source>\n        <translation>文件夹:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"54\"/>\n        <source>Browse</source>\n        <translation>浏览</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"60\"/>\n        <source>Select Notebook Root Folder</source>\n        <translation>选择笔记本根文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"72\"/>\n        <source>Select files:</source>\n        <translation>选择文件:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"82\"/>\n        <source>Select All</source>\n        <translation>选择全部</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderfilesfilterwidget.cpp\" line=\"92\"/>\n        <source>Clear</source>\n        <translation>清空</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FolderPropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"34\"/>\n        <source>Properties</source>\n        <translation>属性</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"59\"/>\n        <source>Please specify a name for the folder.</source>\n        <translation>请为文件夹指定一个名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"65\"/>\n        <source>Name conflicts with existing folder.</source>\n        <translation>名字和已有文件夹冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/folderpropertiesdialog.cpp\" line=\"93\"/>\n        <source>Failed to save folder (%1) in (%2) (%3).</source>\n        <translation>无法保存笔记本(%2)中的文件夹(%1)(%3)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::FullScreenToggleAction</name>\n    <message>\n        <location filename=\"../../../widgets/fullscreentoggleaction.cpp\" line=\"12\"/>\n        <source>F&amp;ull Screen</source>\n        <translation>全屏(&amp;U)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/fullscreentoggleaction.cpp\" line=\"14\"/>\n        <source>Exit F&amp;ull Screen</source>\n        <translation>退出全屏(&amp;U)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::GeneralPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"27\"/>\n        <source>Interface language</source>\n        <translation>界面语言</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"29\"/>\n        <source>Default</source>\n        <translation>默认</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"36\"/>\n        <source>Language:</source>\n        <translation>语言:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"46\"/>\n        <source>OpenGL implementation used to render application</source>\n        <translation>用于渲染应用程序的OpenGL实现</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"48\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"49\"/>\n        <source>Desktop</source>\n        <translation>Desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"50\"/>\n        <source>OpenGL ES</source>\n        <translation>OpenGL ES</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"51\"/>\n        <source>Software</source>\n        <translation>Software</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"53\"/>\n        <source>OpenGL:</source>\n        <translation>OpenGL:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"63\"/>\n        <source>Minimize to system tray</source>\n        <translation>最小化到系统托盘</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"65\"/>\n        <source>Minimize to system tray when closed</source>\n        <translation>关闭时最小化到系统托盘</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"74\"/>\n        <source>Recover last session on start</source>\n        <translation>启动时恢复上次会话</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"76\"/>\n        <source>Recover last session (like buffers) on start of VNote</source>\n        <translation>启动VNote时恢复上次会话（如缓冲区）</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"84\"/>\n        <source>Check for updates on start</source>\n        <translation>启动时检查更新</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"86\"/>\n        <source>Check for updates on start of VNote</source>\n        <translation>VNote启动时检查更新</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/generalpage.cpp\" line=\"150\"/>\n        <source>General</source>\n        <translation>通用</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::GitHubImageHost</name>\n    <message>\n        <source>PersonalAccessToken/UserName/RepositoryName should not be empty.</source>\n        <translation type=\"vanished\">个人令牌/用户名/仓库名不能为空。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"79\"/>\n        <source>Failed to create image with empty path.</source>\n        <translation>无法从空路径创建图片。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"84\"/>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"133\"/>\n        <source>Invalid GitHub image host configuration.</source>\n        <translation>无效的GitHub图床配置。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"94\"/>\n        <source>The resource already exists at the image host (%1).</source>\n        <translation>该资源已经存在于图床(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"97\"/>\n        <source>Failed to query the resource at the image host (%1) (%2) (%3).</source>\n        <translation>无法在图床查询资源(%1)(%2)(%3)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"108\"/>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"115\"/>\n        <source>Failed to create resource at the image host (%1) (%2) (%3).</source>\n        <translation>无法在图床创建资源(%1)(%2)(%3)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"174\"/>\n        <source>Failed to fetch SHA about the resource (%1) (%2).</source>\n        <translation>无法获取该资源的SHA值(%1)(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/githubimagehost.cpp\" line=\"185\"/>\n        <source>Failed to delete resource (%1) (%2).</source>\n        <translation>无法删除资源(%1)(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::GiteeImageHost</name>\n    <message>\n        <source>PersonalAccessToken/UserName/RepositoryName should not be empty.</source>\n        <translation type=\"vanished\">个人令牌/用户名/仓库名不能为空。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"81\"/>\n        <source>Failed to create image with empty path.</source>\n        <translation>无法从空路径创建图片。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"86\"/>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"139\"/>\n        <source>Invalid Gitee image host configuration.</source>\n        <translation>无效的码云图床配置。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"97\"/>\n        <source>The resource already exists at the image host (%1).</source>\n        <translation>该资源已经存在于图床(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"101\"/>\n        <source>Failed to query the resource at the image host (%1) (%2) (%3).</source>\n        <translation>无法在图床查询资源(%1)(%2)(%3)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"113\"/>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"120\"/>\n        <source>Failed to create resource at the image host (%1) (%2) (%3).</source>\n        <translation>无法在图床创建资源(%1)(%2)(%3)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"151\"/>\n        <source>Failed to fetch information about the resource (%1).</source>\n        <translation>无法获取该资源的信息(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"159\"/>\n        <source>Failed to fetch SHA about the resource (%1) (%2).</source>\n        <translation>无法获取该资源的SHA值(%1)(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/giteeimagehost.cpp\" line=\"171\"/>\n        <source>Failed to delete resource (%1) (%2).</source>\n        <translation>无法删除资源(%1)(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::HelpUnitedEntry</name>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"11\"/>\n        <source>Help information about United Entry</source>\n        <translation>统一入口的帮助信息</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"26\"/>\n        <source>Shortcut</source>\n        <translation>快捷键</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"26\"/>\n        <source>Description</source>\n        <translation>描述</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"28\"/>\n        <source>Close United Entry</source>\n        <translation>关闭统一入口</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"29\"/>\n        <source>Go to previous item</source>\n        <translation>前一项</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"30\"/>\n        <source>Go to next item</source>\n        <translation>后一项</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"31\"/>\n        <source>Go to the item one level up</source>\n        <translation>向上一层</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"32\"/>\n        <source>Expand/Collapse current item</source>\n        <translation>展开/收起当前项</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"33\"/>\n        <source>Expand/Collapse all the items</source>\n        <translation>展开/收起全部项</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"34\"/>\n        <source>Activate current item</source>\n        <translation>激活当前项</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"35\"/>\n        <source>Clear the input except the entry name</source>\n        <translation>清除输入但保留入口名字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"36\"/>\n        <source>Select the entry name</source>\n        <translation>选择入口名字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/helpunitedentry.cpp\" line=\"37\"/>\n        <source>Stop current entry</source>\n        <translation>停止当前入口</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::HistoryPanel</name>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"72\"/>\n        <source>Clear</source>\n        <translation>清空</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"89\"/>\n        <source>&amp;Open</source>\n        <translation>打开(&amp;O)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"99\"/>\n        <source>&amp;Locate Node</source>\n        <translation>定位节点(&amp;L)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"132\"/>\n        <source>Clear all the history?</source>\n        <translation>清空所有历史？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"175\"/>\n        <source>Older</source>\n        <translation>更早</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"200\"/>\n        <source>Today</source>\n        <translation>今天</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"202\"/>\n        <source>Yesterday</source>\n        <translation>昨天</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"204\"/>\n        <source>Last 7 Days</source>\n        <translation>过去7天</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"216\"/>\n        <source>%1\n%2</source>\n        <translation>%1\n%2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/historypanel.cpp\" line=\"219\"/>\n        <source>[%1] %2\n%3</source>\n        <translation>[%1] %2\n%3</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImageHost</name>\n    <message>\n        <location filename=\"../../../imagehost/imagehost.cpp\" line=\"24\"/>\n        <source>GitHub</source>\n        <translation>GitHub</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/imagehost.cpp\" line=\"27\"/>\n        <source>Gitee</source>\n        <translation>码云</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImageHostPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"40\"/>\n        <source>New Image Host</source>\n        <translation>新建图床</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"55\"/>\n        <source>General</source>\n        <translation>通用</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"62\"/>\n        <source>Default image host:</source>\n        <translation>默认图床:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"70\"/>\n        <source>Clear obsolete images</source>\n        <translation>清空无用图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"72\"/>\n        <source>Clear unused images at image host (based on current file only)</source>\n        <translation>清空图床中无用的图片（仅基于当前文件）</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"95\"/>\n        <source>Local</source>\n        <translation>本地</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"163\"/>\n        <source>Failed to rename image host (%1) to (%2).</source>\n        <translation>无法重命名图床(%1)为(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"186\"/>\n        <source>Image Host</source>\n        <translation>图床</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"215\"/>\n        <source>Test</source>\n        <translation>测试</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"223\"/>\n        <source>Delete</source>\n        <translation>删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"232\"/>\n        <source>Type:</source>\n        <translation>类型:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"236\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"247\"/>\n        <source>%1:</source>\n        <translation>%1:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"259\"/>\n        <source>Delete image host (%1)?</source>\n        <translation>删除图床(%1)？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"301\"/>\n        <source>Test %1.</source>\n        <translation>测试%1。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"301\"/>\n        <source>succeeded</source>\n        <translation>成功</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/imagehostpage.cpp\" line=\"301\"/>\n        <source>failed</source>\n        <translation>失败</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImageInsertDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"76\"/>\n        <source>From:</source>\n        <translation>源:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"83\"/>\n        <source>&amp;Browse</source>\n        <translation>浏览(&amp;B)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"93\"/>\n        <source>Title:</source>\n        <translation>标题:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"102\"/>\n        <source>Alt text:</source>\n        <translation>替换文本:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"132\"/>\n        <source>Scaling width:</source>\n        <translation>缩放宽度:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"138\"/>\n        <source>Fixed scaling width</source>\n        <translation>固定的缩放宽度</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"231\"/>\n        <source>Select Image To Insert</source>\n        <translation>选择图片插入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/imageinsertdialog.cpp\" line=\"233\"/>\n        <source>Images (*.png *.xpm *.jpg *.bmp *.gif *.svg *.webp);;All (*.*)</source>\n        <translation>图片(*.png *.xpm *.jpg *.bmp *.gif *.svg *.webp);;全部文件(*.*)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportFolderDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"33\"/>\n        <source>Import folder into (%1).</source>\n        <translation>导入文件夹至(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"43\"/>\n        <source>Import Folder</source>\n        <translation>导入文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"74\"/>\n        <source>Please specify a valid folder to import.</source>\n        <translation>请指定一个有效文件夹进行导入。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"90\"/>\n        <source>Failed to add folder (%1) as node under (%2).</source>\n        <translation>无法在(%2)下将文件夹(%1)添加为节点。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderdialog.cpp\" line=\"100\"/>\n        <source>Failed to add folder (%1) as node (%2).</source>\n        <translation>无法添加文件夹(%1)为节点(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportFolderUtilsTranslate</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"29\"/>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"81\"/>\n        <source>Failed to add folder (%1) as node (%2).</source>\n        <translation>无法添加文件夹(%1)为节点(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"39\"/>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"109\"/>\n        <source>Failed to add file (%1) as node (%2).</source>\n        <translation>无法添加文件(%1)为节点(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"56\"/>\n        <source>Failed to read folder config (%1) (%2).</source>\n        <translation>无法读取文件夹配置(%1)(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"66\"/>\n        <source>Folder (%1) does not exist.</source>\n        <translation>文件夹(%1)不存在。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"71\"/>\n        <source>Folder (%1) conflicts with built-in folder.</source>\n        <translation>文件夹(%1)和内建文件夹冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"91\"/>\n        <source>File (%1) does not exist.</source>\n        <translation>文件(%1)不存在。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importfolderutils.cpp\" line=\"96\"/>\n        <source>File (%1) conflicts with built-in file.</source>\n        <translation>文件(%1)和内建文件冲突。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportLegacyNotebookDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"39\"/>\n        <source>Welcome to VNoteX and the new VNote!</source>\n        <translation>欢迎使用VNoteX和全新的VNote！</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"22\"/>\n        <source>Open Legacy Notebook</source>\n        <translation>打开遗留笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"37\"/>\n        <source>Once opened, the legacy notebook could no longer be recognized by legacy VNote!</source>\n        <translation>一旦打开，该遗留笔记本将无法被旧版本的VNote所识别！</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"51\"/>\n        <source>Please specify a valid root folder to open.</source>\n        <translation>请指定一个有效根文件夹以打开。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"56\"/>\n        <source>Failed to recognize a legacy notebook from the root folder.</source>\n        <translation>无法从根文件夹中识别到遗留笔记本。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"66\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>已经存在一个使用相同根文件夹的笔记本(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"97\"/>\n        <source>Failed to read legacy notebook configuration in (%1) (%2).</source>\n        <translation>在(%1)中无法读取遗留笔记本配置(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"120\"/>\n        <source>Failed to create notebook in (%1) (%2).</source>\n        <translation>无法在(%1)创建笔记本(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importlegacynotebookdialog.cpp\" line=\"146\"/>\n        <source>Failed to import folder contents by legacy config in (%1) (%2).</source>\n        <translation>无法在(%1)中根据遗留配置导入文件夹内容(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ImportNotebookDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"37\"/>\n        <source>Open Notebook</source>\n        <translation>打开笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"80\"/>\n        <source>The root folder specified does not exist.</source>\n        <translation>指定的根文件夹不存在。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"91\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>已经存在一个使用相同根文件夹的笔记本(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"103\"/>\n        <source>Not a valid (%1) root folder (%2).</source>\n        <translation>无效的(%1)根文件夹(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"126\"/>\n        <source>Failed to create notebook from root folder (%1) (%2).</source>\n        <translation>无法从根文件夹(%1)创建笔记本(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"137\"/>\n        <source>Failed to open notebook.</source>\n        <translation>无法打开笔记本。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/importnotebookdialog.cpp\" line=\"147\"/>\n        <source>Failed to open notebook (%1).</source>\n        <translation>无法打开笔记本(%1)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LabelWithButtonsWidget</name>\n    <message>\n        <location filename=\"../../../widgets/labelwithbuttonswidget.cpp\" line=\"59\"/>\n        <source>Delete</source>\n        <translation>删除</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LevelLabelWithUpButton</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/levellabelwithupbutton.cpp\" line=\"28\"/>\n        <source>Up</source>\n        <translation>向上</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/levellabelwithupbutton.cpp\" line=\"30\"/>\n        <source>Go one level up</source>\n        <translation>向上一层</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LineEditWithSnippet</name>\n    <message>\n        <location filename=\"../../../widgets/lineeditwithsnippet.cpp\" line=\"21\"/>\n        <source>Snippet is supported via &quot;%name%&quot;</source>\n        <translation>支持通过&quot;%名字%&quot;使用片段</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LinkInsertDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/linkinsertdialog.cpp\" line=\"36\"/>\n        <source>&amp;Text:</source>\n        <translation>文本(&amp;T):</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/linkinsertdialog.cpp\" line=\"43\"/>\n        <source>&amp;Url:</source>\n        <translation>地址(&amp;U):</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LocationInputWithBrowseButton</name>\n    <message>\n        <location filename=\"../../../widgets/locationinputwithbrowsebutton.cpp\" line=\"22\"/>\n        <source>Browse</source>\n        <translation>浏览</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::LocationList</name>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"47\"/>\n        <source>Path</source>\n        <translation>路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"47\"/>\n        <source>Line</source>\n        <translation>行号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"47\"/>\n        <source>Text</source>\n        <translation>文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"103\"/>\n        <source>Clear</source>\n        <translation>清空</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/locationlist.cpp\" line=\"228\"/>\n        <source>%n Item(s)</source>\n        <translation>\n            <numerusform>%n 项</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MainWindow</name>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"821\"/>\n        <source>Failed to check for updates (%1)</source>\n        <translation>无法检查更新(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"823\"/>\n        <source>Updates available: %1</source>\n        <translation>有可用更新: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"109\"/>\n        <source>Initializing core components...</source>\n        <translation>正在初始化核心组件...</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"387\"/>\n        <source>Do you want to minimize %1 to system tray instead of quitting when closed?</source>\n        <translation>关闭时，是否将%1最小化到系统托盘而非退出？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"389\"/>\n        <source>You could change the option in Settings later.</source>\n        <translation>稍后可以在设置里面更改。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"442\"/>\n        <source>%1 is still running here.</source>\n        <translation>%1仍然在此运行。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"601\"/>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"612\"/>\n        <source>Global</source>\n        <translation>全局</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"716\"/>\n        <source>There is one export dialog running. Please close it first.</source>\n        <translation>已有导出对话框运行。请先将其关闭。</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"837\"/>\n        <source>Failed to load %n notebook(s).</source>\n        <translation>\n            <numerusform>无法加载 %n 个笔记本。</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mainwindow.cpp\" line=\"838\"/>\n        <source>These notebooks may be moved or deleted. It is recommended to remove them from configuration and open them with the correct root folder path later.\nRemove them from the configuration?</source>\n        <translation>这些笔记本可能已被移动或者删除。推荐将其从配置中移除并稍后使用正确的根文件夹路径重新打开。\n从配置中移除它们？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/systemtrayhelper.cpp\" line=\"44\"/>\n        <source>Show Main Window</source>\n        <translation>显示主窗口</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/systemtrayhelper.cpp\" line=\"55\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"776\"/>\n        <source>Quit</source>\n        <translation>退出</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"54\"/>\n        <source>File</source>\n        <translation>文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"61\"/>\n        <source>Notebook</source>\n        <translation>笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"72\"/>\n        <source>New Notebook</source>\n        <translation>新建笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"79\"/>\n        <source>New Notebook From Folder</source>\n        <translation>从文件夹新建笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"122\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"131\"/>\n        <source>New Note</source>\n        <translation>新建笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"145\"/>\n        <source>New Folder</source>\n        <translation>新建文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"156\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"160\"/>\n        <source>Open File</source>\n        <translation>打开文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"189\"/>\n        <source>Import File</source>\n        <translation>导入文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"196\"/>\n        <source>Import Folder</source>\n        <translation>导入文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"88\"/>\n        <source>Open Other Notebooks</source>\n        <translation>打开其他笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"95\"/>\n        <source>Open Legacy Notebooks Of VNote 2</source>\n        <translation>打开VNote 2的遗留笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"135\"/>\n        <source>New Quick Note</source>\n        <translation>新建快速笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"206\"/>\n        <source>Export (Convert Format)</source>\n        <translation>导出(转换格式)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"222\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"260\"/>\n        <source>Quick Access</source>\n        <translation>快速访问</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"230\"/>\n        <source>Flash Page</source>\n        <translation>灵犀页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"237\"/>\n        <source>Please set the Flash Page location in the Settings dialog first.</source>\n        <translation>请先在设置对话框中设置灵犀页位置。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"238\"/>\n        <source>Flash Page is a temporary page for a flash of inspiration.</source>\n        <translation>灵犀页是一个用于记录一闪而过的灵感的临时页面。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"267\"/>\n        <source>Please pin files to Quick Access first.</source>\n        <translation>请先将文件固定到快速访问。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"268\"/>\n        <source>Files could be pinned to Quick Access via context menu.</source>\n        <translation>文件可以通过上下文菜单固定到快速访问。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"269\"/>\n        <source>Quick Access could be managed in the Settings dialog.</source>\n        <translation>可以在设置对话框中管理快速访问。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"353\"/>\n        <source>Add Task</source>\n        <translation>添加任务</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"359\"/>\n        <source>Reload</source>\n        <translation>重新加载</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"294\"/>\n        <source>Task</source>\n        <translation>任务</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"604\"/>\n        <source>Menu</source>\n        <translation>菜单</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"725\"/>\n        <source>Documentation</source>\n        <translation>文档</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"739\"/>\n        <source>Contributors</source>\n        <translation>贡献者</translation>\n    </message>\n    <message>\n        <source>Configuration</source>\n        <translation type=\"vanished\">配置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"625\"/>\n        <source>Edit User Configuration File</source>\n        <translation>编辑用户配置文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"651\"/>\n        <source>Edit Markdown User Styles</source>\n        <translation>编辑Markdown用户样式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"664\"/>\n        <source>Edit the user styles of Markdown editor read mode</source>\n        <translation>编辑Markdown编辑器阅读模式的用户样式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"494\"/>\n        <source>Quick Access Not Set</source>\n        <translation>快速访问未设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"408\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"614\"/>\n        <source>Settings</source>\n        <translation>设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"534\"/>\n        <source>Expand Content Area</source>\n        <translation>扩展内容区</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"556\"/>\n        <source>Press %1 To Exit Full Screen</source>\n        <translation>按%1退出全屏</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"104\"/>\n        <source>Manage Notebooks</source>\n        <translation>管理笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"179\"/>\n        <source>Import</source>\n        <translation>导入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"564\"/>\n        <source>Stay on Top</source>\n        <translation>置顶</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"576\"/>\n        <source>Windows</source>\n        <translation>窗口</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"634\"/>\n        <source>Open User Configuration Folder</source>\n        <translation>打开用户配置文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"641\"/>\n        <source>Open Default Configuration Folder</source>\n        <translation>打开默认配置文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"669\"/>\n        <source>Reset Main Window Layout</source>\n        <translation>重置主窗口布局</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"770\"/>\n        <source>Restart</source>\n        <translation>重启</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"717\"/>\n        <source>Help</source>\n        <translation>帮助</translation>\n    </message>\n    <message>\n        <source>What&apos;s This?</source>\n        <translation type=\"vanished\">这是什么？</translation>\n    </message>\n    <message>\n        <source>Enter WhatsThis mode and click somewhere to show help information</source>\n        <translation type=\"vanished\">进入WhatsThis模式，点击某处以显示帮助信息</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"693\"/>\n        <source>Shortcuts Help</source>\n        <translation>快捷键帮助</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"705\"/>\n        <source>Markdown Guide</source>\n        <translation>Markdown指南</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"678\"/>\n        <source>View Logs</source>\n        <translation>查看日志</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"719\"/>\n        <source>Home Page</source>\n        <translation>主页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"731\"/>\n        <source>Feedback and Discussions</source>\n        <translation>反馈和讨论</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"762\"/>\n        <source>Check for Updates</source>\n        <translation>检查更新</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"745\"/>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"751\"/>\n        <source>About</source>\n        <translation>关于</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"748\"/>\n        <source>&lt;h3&gt;%1&lt;/h3&gt;\n&lt;span&gt;%2&lt;/span&gt;\n</source>\n        <translation>&lt;h3&gt;%1&lt;/h3&gt;\n&lt;span&gt;%2&lt;/span&gt;\n</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/toolbarhelper.cpp\" line=\"754\"/>\n        <source>About Qt</source>\n        <translation>关于Qt</translation>\n    </message>\n    <message>\n        <location filename=\"../../../main.cpp\" line=\"135\"/>\n        <source>%1 failed to start.</source>\n        <translation>%1无法启动。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../main.cpp\" line=\"136\"/>\n        <source>Failed to initialize configuration manager. Please check if all the files are intact or reinstall the application.</source>\n        <translation>无法初始化配置管理器。请检查全部文件的完整性或者重新安装应用。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"15\"/>\n        <source>A pleasant note-taking platform.</source>\n        <translation>一个舒适的笔记平台。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"20\"/>\n        <source>Files or folders to open.</source>\n        <translation>需要打开的目标文件或者文件夹。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"22\"/>\n        <source>Print more logs.</source>\n        <translation>输出更多日志信息。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"25\"/>\n        <source>Log to stderr.</source>\n        <translation>打印日志到错误输出。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"28\"/>\n        <source>Watch theme folder for changes.</source>\n        <translation>监控主题文件夹改动。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"35\"/>\n        <source>WebEngine remote debugging port.</source>\n        <translation>WebEngine远程调试端口。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"36\"/>\n        <source>port_number</source>\n        <translation>端口</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"40\"/>\n        <source>WebEngine without sandbox.</source>\n        <translation>在非沙盒下运行WebEngine。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../commandlineoptions.cpp\" line=\"44\"/>\n        <source>WebEngine with GPU disabled.</source>\n        <translation>WebEngine中禁用GPU。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../utils/widgetutils.cpp\" line=\"86\"/>\n        <source>Are you sure to open link (%1)?</source>\n        <translation>确认打开链接 (%1)？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../utils/widgetutils.cpp\" line=\"87\"/>\n        <source>Malicious link might do harm to your device.</source>\n        <translation>可疑的链接可能会损坏设备。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ManageNotebooksDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"75\"/>\n        <source>Delete</source>\n        <translation>删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"92\"/>\n        <source>Manage Notebooks</source>\n        <translation>管理笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"64\"/>\n        <source>Close Noteboook</source>\n        <translation>关闭笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"232\"/>\n        <source>Please specify a name for the notebook.</source>\n        <translation>请为笔记本指定一个名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"261\"/>\n        <source>Close notebook (%1)?</source>\n        <translation>关闭笔记本(%1)？</translation>\n    </message>\n    <message>\n        <source>The notebook could be opened by VNote again.</source>\n        <translation type=\"vanished\">该笔记本可以使用VNote重新打开。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"291\"/>\n        <source>Press &quot;Ok&quot; to close the notebook and open the location of the notebook root folder.</source>\n        <translation>按“确认”关闭该笔记本并打开笔记本根文件夹所在位置。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"264\"/>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"292\"/>\n        <source>Notebook location: %1</source>\n        <translation>笔记本路径: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"263\"/>\n        <source>The notebook could be opened by VNote again via &quot;Open Other Notebooks&quot; operation.</source>\n        <translation>该笔记本可以使用VNote中的“打开其他笔记本”操作重新打开。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"275\"/>\n        <source>Failed to close notebook (%1)</source>\n        <translation>无法关闭笔记本(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"290\"/>\n        <source>Please close the notebook in VNote first and delete the notebook root folder files manually.</source>\n        <translation>请先在VNote中关闭该笔记本，然后手动删除该笔记本的根文件夹等文件。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/managenotebooksdialog.cpp\" line=\"309\"/>\n        <source>There are unsaved changes to current notebook.</source>\n        <translation>当前笔记本有尚未保存的更改。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownEditor</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"250\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"748\"/>\n        <source>Insert Link</source>\n        <translation>插入链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"263\"/>\n        <source>Insert Image</source>\n        <translation>插入图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"320\"/>\n        <source>Insert Table</source>\n        <translation>插入表格</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"377\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1557\"/>\n        <source>Failed to read local image file (%1) (%2).</source>\n        <translation>无法读取本地图片文件(%1)(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"390\"/>\n        <source>Failed to insert image from local file (%1) (%2).</source>\n        <translation>无法从本地文件(%1)插入图片(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"433\"/>\n        <source>Failed to insert image from data (%1).</source>\n        <translation>无法从数据插入图片(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"512\"/>\n        <source>For advanced paste, try the &quot;Rich Paste&quot; and &quot;Parse to Markdown and Paste&quot; on the editor&apos;s context menu</source>\n        <translation>更多高级粘贴，请尝试编辑器上下文菜单中的“多功能粘贴”和“解析为Markdown并粘贴”功能</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"553\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"590\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"660\"/>\n        <source>Insert From Clipboard</source>\n        <translation>从剪切板插入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"554\"/>\n        <source>Insert From URL</source>\n        <translation>从URL插入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"555\"/>\n        <source>Insert From Image Data</source>\n        <translation>从图片数据插入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"556\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"593\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"663\"/>\n        <source>Insert As Image Link</source>\n        <translation>插入为图片链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"591\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"662\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"812\"/>\n        <source>Insert As Image</source>\n        <translation>插入为图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"592\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"678\"/>\n        <source>Insert As Text</source>\n        <translation>插入为文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"665\"/>\n        <source>Insert As Relative Image Link</source>\n        <translation>插入为相对图片链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"669\"/>\n        <source>Insert As Link</source>\n        <translation>插入为链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"671\"/>\n        <source>Insert As Relative Link</source>\n        <translation>插入为相对链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"674\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"815\"/>\n        <source>Attach And Insert Link</source>\n        <translation>添加为附件并插入链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"680\"/>\n        <source>Insert File Content</source>\n        <translation>插入文件内容</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"810\"/>\n        <source>Insert From Clipboard (%n items)</source>\n        <translation>\n            <numerusform>从剪切板插入(%n项)</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"863\"/>\n        <source>Insert Image From Clipboard</source>\n        <translation>从剪切板插入图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"879\"/>\n        <source>Insert Image From URL</source>\n        <translation>从URL插入图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1072\"/>\n        <source>&amp;Read</source>\n        <translation>阅读(&amp;R)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1090\"/>\n        <source>Rich Paste</source>\n        <translation>多功能粘贴</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1090\"/>\n        <source>Paste as Plain Text</source>\n        <translation>粘贴为纯文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1099\"/>\n        <source>Parse to Markdown and Paste</source>\n        <translation>解析为Markodwn并粘贴</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1111\"/>\n        <source>Insert Snippet</source>\n        <translation>插入片段</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1476\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1575\"/>\n        <source>Failed to upload image to image host (%1) as (%2).</source>\n        <translation>无法上传图片为(%2)到图床(%1）中。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1655\"/>\n        <source>View Image</source>\n        <translation>查看图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1664\"/>\n        <source>Copy Image URL</source>\n        <translation>复制图片地址</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1674\"/>\n        <source>Copy Image</source>\n        <translation>复制图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1737\"/>\n        <source>Copy In-Place Preview</source>\n        <translation>复制原地预览</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1782\"/>\n        <source>Open Link</source>\n        <translation>打开链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1791\"/>\n        <source>Copy Link</source>\n        <translation>复制链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1215\"/>\n        <source>Fetching images to local...</source>\n        <translation>正在获取图片到本地...</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1216\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1521\"/>\n        <source>Abort</source>\n        <translation>终止</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1221\"/>\n        <source>Fetch Images To Local</source>\n        <translation>获取图片到本地</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1249\"/>\n        <source>Fetching image (%1)</source>\n        <translation>正在获取图片(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1488\"/>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1526\"/>\n        <source>Upload Images To Image Host</source>\n        <translation>上传图片到图床</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1492\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1520\"/>\n        <source>Uploading local images...</source>\n        <translation>正在上传本地图片...</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdowneditor.cpp\" line=\"1548\"/>\n        <source>Upload image (%1)</source>\n        <translation>上传图片(%1)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownEditorPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"319\"/>\n        <source>Insert file name as title</source>\n        <translation>将文件名作为标题</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"321\"/>\n        <source>Insert file name as title when creating note</source>\n        <translation>创建笔记时将文件名作为标题插入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"223\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"440\"/>\n        <source>Read</source>\n        <translation>阅读</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"227\"/>\n        <source>Constrain image width</source>\n        <translation>限制图片宽度</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"229\"/>\n        <source>Constrain image width to the window</source>\n        <translation>将图片宽度限制在窗口内</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"237\"/>\n        <source>Center image</source>\n        <translation>图片居中</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"239\"/>\n        <source>Center images</source>\n        <translation>居中显示图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"248\"/>\n        <source>Zoom factor in read mode</source>\n        <translation>阅读模式缩放</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"253\"/>\n        <source>Zoom factor:</source>\n        <translation>缩放:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"261\"/>\n        <source>HTML tag</source>\n        <translation>HTML标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"263\"/>\n        <source>Allow HTML tags in source</source>\n        <translation>源文件中允许HTML标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"271\"/>\n        <source>Auto break</source>\n        <translation>自动换行</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"273\"/>\n        <source>Automatically break a line with &apos;\\n&apos;</source>\n        <translation>遇到&apos;\\n&apos;则自动换行</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"281\"/>\n        <source>Linkify</source>\n        <translation>链接化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"283\"/>\n        <source>Convert URL-like text to links</source>\n        <translation>转换类URL的文本为链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"291\"/>\n        <source>Indent first line</source>\n        <translation>首行缩进</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"293\"/>\n        <source>Indent the first line of each paragraph</source>\n        <translation>缩进每个段落的第一行</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"301\"/>\n        <source>Code block line number</source>\n        <translation>代码块行号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"303\"/>\n        <source>Add line number to code block</source>\n        <translation>为代码块添加行号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"315\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"441\"/>\n        <source>Edit</source>\n        <translation>编辑</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"329\"/>\n        <source>Constrain in-place preview width</source>\n        <translation>限制原地预览宽度</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"331\"/>\n        <source>Constrain in-place preview width to the window</source>\n        <translation>将原地预览宽度限制在窗口内</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"340\"/>\n        <source>In-place preview sources:</source>\n        <translation>原地预览源:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"342\"/>\n        <source>Image link</source>\n        <translation>图片链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"347\"/>\n        <source>Code block</source>\n        <translation>代码块</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"352\"/>\n        <source>Math</source>\n        <translation>数学公式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"359\"/>\n        <source>Fetch images to local in Parse And Paste</source>\n        <translation>在解析并粘贴时，获取图片到本地</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"361\"/>\n        <source>Fetch images to local in Parse To Markdown And Paste</source>\n        <translation>在解析为Markdown并粘贴时，获取图片到本地</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"369\"/>\n        <source>Smart table</source>\n        <translation>智能表格</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"371\"/>\n        <source>Smart table formation</source>\n        <translation>智能表格格式化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"379\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"381\"/>\n        <source>Spell check</source>\n        <translation>拼写检查</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"392\"/>\n        <source>Override font</source>\n        <translation>覆盖字体</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"394\"/>\n        <source>Override editor font family of theme</source>\n        <translation>覆盖主题中的编辑器字体</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"416\"/>\n        <source>Use Rich Paste by default</source>\n        <translation>默认使用多功能粘贴</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"418\"/>\n        <source>Use Rich Paste by default when pasting text</source>\n        <translation>当粘贴文本时默认使用多功能粘贴</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"430\"/>\n        <source>General</source>\n        <translation>通用</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"438\"/>\n        <source>Section number mode</source>\n        <translation>小节序号模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"439\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"447\"/>\n        <source>Base level to start section numbering in edit mode</source>\n        <translation>编辑模式中开始小节序号计数的基础层级</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"456\"/>\n        <source>Section number style</source>\n        <translation>小节序号样式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"457\"/>\n        <source>1.1.</source>\n        <translation>1.1.</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"458\"/>\n        <source>1.1</source>\n        <translation>1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"470\"/>\n        <source>Section number:</source>\n        <translation>小节序号:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"477\"/>\n        <source>Use Web service or local JAR file to render PlantUml graphs</source>\n        <translation>使用网页服务或者本地JAR文件来渲染PlantUml图表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"479\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"551\"/>\n        <source>Web Service</source>\n        <translation>网页服务</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"537\"/>\n        <source>Override the Web service used to render PlantUml graphs</source>\n        <translation>覆盖用于渲染PlantUml图表的网页服务</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"538\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"609\"/>\n        <source>Empty to use default one</source>\n        <translation>留空则使用默认值</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"540\"/>\n        <source>Override PlantUml Web service:</source>\n        <translation>覆盖PlantUml网页服务:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"611\"/>\n        <source>Override MathJax script:</source>\n        <translation>覆盖MathJax脚本:</translation>\n    </message>\n    <message>\n        <source>PlantUml Web service:</source>\n        <translation type=\"vanished\">PlantUml网页服务:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"549\"/>\n        <source>Use Web service or local executable file to render Graphviz graphs</source>\n        <translation>使用网页服务或者本地可执行文件来渲染Graphviz图表</translation>\n    </message>\n    <message>\n        <source>Use online service or local JAR file to render PlantUml graphs</source>\n        <translation type=\"vanished\">使用在线服务或者本地JAR文件来渲染PlantUml图表</translation>\n    </message>\n    <message>\n        <source>Online Service</source>\n        <translation type=\"vanished\">在线服务</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"480\"/>\n        <source>Local JAR</source>\n        <translation>本地JAR</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"482\"/>\n        <source>PlantUml:</source>\n        <translation>PlantUml:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"494\"/>\n        <source>Local JAR file to render PlantUml graphs</source>\n        <translation>用于渲染PlantUml图表的本地JAR文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"498\"/>\n        <source>Select PlantUml JAR File</source>\n        <translation>选择PlantUml JAR文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"507\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"578\"/>\n        <source>Test</source>\n        <translation>测试</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"508\"/>\n        <source>Test PlantUml JAR and Java Runtime Environment</source>\n        <translation>测试PlantUml JAR以及Java运行时环境</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"514\"/>\n        <source>The JAR file (%1) specified does not exist.</source>\n        <translation>指定的JAR文件(%1)不存在。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"521\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"592\"/>\n        <source>Test %1.</source>\n        <translation>测试%1。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"521\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"592\"/>\n        <source>succeeded</source>\n        <translation>成功</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"521\"/>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"592\"/>\n        <source>failed</source>\n        <translation>失败</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"528\"/>\n        <source>PlantUml JAR file:</source>\n        <translation>PlantUml JAR文件:</translation>\n    </message>\n    <message>\n        <source>Use online service or local executable file to render Graphviz graphs</source>\n        <translation type=\"vanished\">使用在线服务或者本地可执行文件来渲染Graphviz图表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"552\"/>\n        <source>Local Executable</source>\n        <translation>本地可执行文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"554\"/>\n        <source>Graphviz:</source>\n        <translation>Graphviz:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"566\"/>\n        <source>Local executable file to render Graphviz graphs</source>\n        <translation>用于渲染Graphviz图表的本地可执行文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"570\"/>\n        <source>Select Graphviz Executable File</source>\n        <translation>选择Graphviz可执行文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"579\"/>\n        <source>Test Graphviz executable file</source>\n        <translation>测试Graphviz可执行文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"585\"/>\n        <source>The executable file (%1) specified does not exist.</source>\n        <translation>指定的可执行文件(%1)不存在。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"599\"/>\n        <source>Graphviz executable file:</source>\n        <translation>Graphviz可执行文件:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"608\"/>\n        <source>Override the MathJax script used to render math formulas</source>\n        <translation>覆盖用于渲染数学公式的MathJax脚本</translation>\n    </message>\n    <message>\n        <source>MathJax script:</source>\n        <translation type=\"vanished\">MathJax脚本:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/markdowneditorpage.cpp\" line=\"218\"/>\n        <source>Markdown Editor</source>\n        <translation>Markdown编辑器</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownViewWindow</name>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"459\"/>\n        <source>Markdown Viewer</source>\n        <translation>Markdown查看器</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"806\"/>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"838\"/>\n        <source>Clear Obsolete Images</source>\n        <translation>清空无用图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"807\"/>\n        <source>These images seems to be not in use anymore. Please confirm the deletion of them.</source>\n        <translation>这些图片似乎已经不再使用。请确认并删除。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"808\"/>\n        <source>Deleted local images could be found in the recycle bin of notebook if it is from a bundle notebook.</source>\n        <translation>如果这是一个自包含笔记本，已删除的本地图片可以在笔记本回收站中找回。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"832\"/>\n        <source>Clearing obsolete images...</source>\n        <translation>正在清空无用图片...</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"833\"/>\n        <source>Abort</source>\n        <translation>终止</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"847\"/>\n        <source>Clear image (%1)</source>\n        <translation>清空图片(%1)</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"859\"/>\n        <source>Cleared %n obsolete images</source>\n        <translation>\n            <numerusform>清空 %n 无用图片</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1284\"/>\n        <source>View Mode Not Supported In Read Mode</source>\n        <translation>阅读模式不支持查看模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1302\"/>\n        <source>Edit Only</source>\n        <translation>纯编辑</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1313\"/>\n        <source>Edit with Preview</source>\n        <translation>预览辅助的编辑</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1422\"/>\n        <source>Printed to PDF</source>\n        <translation>已打印为PDF</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1422\"/>\n        <source>Failed to print to PDF</source>\n        <translation>无法打印为PDF</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1017\"/>\n        <location filename=\"../../../widgets/markdownviewwindow.cpp\" line=\"1026\"/>\n        <source>Replace is not supported in read mode</source>\n        <translation>阅读模式不支持替换</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownViewer</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"139\"/>\n        <source>&amp;Edit</source>\n        <translation>编辑(&amp;E)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownviewer.cpp\" line=\"424\"/>\n        <source>Cross Copy</source>\n        <translation>交叉复制</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MarkdownViewerAdapter</name>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"289\"/>\n        <source>No Background</source>\n        <translation>无背景</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"290\"/>\n        <source>Evernote</source>\n        <translation>印象笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"291\"/>\n        <source>OneNote</source>\n        <translation>OneNote</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"292\"/>\n        <source>Microsoft Word</source>\n        <translation>Microsoft Word</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"293\"/>\n        <source>WeChat Public Account Editor</source>\n        <translation>微信公众号编辑器</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/editors/markdownvieweradapter.cpp\" line=\"294\"/>\n        <source>Raw HTML</source>\n        <translation>原始HTML</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MindMapViewWindow</name>\n    <message>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"287\"/>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"295\"/>\n        <source>Replace is not supported yet</source>\n        <translation>不支持替换</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"413\"/>\n        <location filename=\"../../../widgets/mindmapviewwindow.cpp\" line=\"550\"/>\n        <source>File does not exist or unsupported URL format: %1</source>\n        <translation>文件不存在或者URL格式不支持：%1</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::MiscPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/miscpage.cpp\" line=\"35\"/>\n        <source>Misc</source>\n        <translation>杂项</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewFolderDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"31\"/>\n        <source>New Folder</source>\n        <translation>新建文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"56\"/>\n        <source>Please specify a name for the folder.</source>\n        <translation>请为文件夹指定一个名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"61\"/>\n        <source>Name conflicts with existing or built-in folder.</source>\n        <translation>名字和已有或内建文件夹冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newfolderdialog.cpp\" line=\"84\"/>\n        <source>Failed to create folder under (%1) in (%2) (%3).</source>\n        <translation>无法在笔记本(%2)中文件夹(%1)下创建文件夹(%3)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewImageHostDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"28\"/>\n        <source>Type:</source>\n        <translation>类型:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"36\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"40\"/>\n        <source>New Image Host</source>\n        <translation>新建图床</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"57\"/>\n        <source>Please specify a valid name for the image host.</source>\n        <translation>请为图床指定一个有效名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"60\"/>\n        <source>Name conflicts with existing image host.</source>\n        <translation>名字和已有图床冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/newimagehostdialog.cpp\" line=\"77\"/>\n        <source>Failed to create image host (%1).</source>\n        <translation>无法创建图床(%1)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewNoteDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"52\"/>\n        <source>New Note</source>\n        <translation>新建笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"48\"/>\n        <source>Template:</source>\n        <translation>模板:</translation>\n    </message>\n    <message>\n        <source>Manage</source>\n        <translation type=\"vanished\">管理</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"77\"/>\n        <source>Please specify a valid name for the note.</source>\n        <translation>请为笔记指定一个有效名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"82\"/>\n        <source>Name conflicts with existing or built-in note.</source>\n        <translation>名字和已有或内建笔记冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"132\"/>\n        <source>Failed to create note under (%1) in (%2) (%3).</source>\n        <translation>无法在笔记本(%2)中文件夹(%1)下创建笔记(%3)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotedialog.cpp\" line=\"158\"/>\n        <source>note</source>\n        <translation>笔记</translation>\n    </message>\n    <message>\n        <source>None</source>\n        <translation type=\"vanished\">无</translation>\n    </message>\n    <message>\n        <source>Failed to load template (%1) (%2).</source>\n        <translation type=\"vanished\">无法加载模板(%1)(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewNotebookDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"33\"/>\n        <source>New Notebook</source>\n        <translation>新建笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"43\"/>\n        <source>&lt;br/&gt;Both absolute and relative paths are supported. ~ and environment variable are not supported now.</source>\n        <translation>&lt;br/&gt;支持绝对路径和相对路径。~和环境变量暂时不支持。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"65\"/>\n        <source>Please specify a name for the notebook.</source>\n        <translation>请为笔记本指定一个名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"76\"/>\n        <source>Please specify a valid root folder for the notebook.</source>\n        <translation>请为笔记本指定一个有效的根文件夹。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"86\"/>\n        <source>Root folder of the notebook must be empty. If you want to import existing data, please try other operations.</source>\n        <translation>笔记本根文件夹必须为空。如果需要导入已有数据，请尝试其他操作。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"91\"/>\n        <source>Root folder should be a directory.</source>\n        <translation>根文件夹应该为一个目录。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"103\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>已经存在一个使用相同根文件夹的笔记本(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookdialog.cpp\" line=\"136\"/>\n        <source>Failed to create notebook in (%1) (%2).</source>\n        <translation>无法在(%1)创建笔记本(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewNotebookFromFolderDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"37\"/>\n        <source>Source Folder</source>\n        <translation>源文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"51\"/>\n        <source>New Notebook From Folder</source>\n        <translation>从文件夹新建笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"89\"/>\n        <source>Please specify a name for the notebook.</source>\n        <translation>请为笔记本指定一个名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"100\"/>\n        <source>Please specify a valid folder for the new notebook.</source>\n        <translation>请为笔记本指定一个有效的根文件夹。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"111\"/>\n        <source>There already exists a notebook (%1) with the same root folder.</source>\n        <translation>已经存在一个使用相同根文件夹的笔记本(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"122\"/>\n        <source>The folder is likely to be the root folder of a valid bundle notebook. You may want to use &quot;Open Other Notebooks&quot; to open it. If continue, all existing information of the notebook may be lost.</source>\n        <translation>该文件夹很有可能是一个有限的自包含笔记本的根文件夹。建议可以通过“打开其他笔记本”操作打开该笔记本。如果继续，原有笔记本的信息可能会丢失。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newnotebookfromfolderdialog.cpp\" line=\"159\"/>\n        <source>Failed to create notebook in %1 (%2).</source>\n        <translation>无法在(%1)创建笔记本(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewSnippetDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"25\"/>\n        <source>New Snippet</source>\n        <translation>新建片段</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"64\"/>\n        <source>Failed to add snippet (%1) (%2).</source>\n        <translation>无法添加片段(%1)(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"79\"/>\n        <source>Please specify a name for the snippet.</source>\n        <translation>请为片段指定一个名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newsnippetdialog.cpp\" line=\"84\"/>\n        <source>Name conflicts with existing snippet.</source>\n        <translation>名字和已有片段冲突。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NewTagDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"50\"/>\n        <source>Location:</source>\n        <translation>路径:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"54\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"58\"/>\n        <source>New Tag</source>\n        <translation>新建标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"69\"/>\n        <source>Please specify a valid name for the tag.</source>\n        <translation>请为标签指定一个有效名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"72\"/>\n        <source>Name conflicts with existing tag.</source>\n        <translation>名字和已有标签冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/newtagdialog.cpp\" line=\"86\"/>\n        <source>Failed to create tag (%1).</source>\n        <translation>无法创建标签(%1)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NodeInfoWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"59\"/>\n        <source>Notebook:</source>\n        <translation>笔记本:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"68\"/>\n        <source>Location:</source>\n        <translation>路径:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"73\"/>\n        <source>File type:</source>\n        <translation>文件类型:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"77\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"81\"/>\n        <source>Created time:</source>\n        <translation>创建时间:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/nodeinfowidget.cpp\" line=\"84\"/>\n        <source>Modified time:</source>\n        <translation>修改时间:</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NoteManagementPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"26\"/>\n        <source>Per-Notebook access history</source>\n        <translation>按笔记本维护访问历史</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"28\"/>\n        <source>Store note access history in its notebook</source>\n        <translation>保存笔记访问历史到其所在笔记本中</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"37\"/>\n        <source>Line ending used to write configuration files</source>\n        <translation>用于写配置文件的行结尾</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"39\"/>\n        <source>Follow Platform</source>\n        <translation>跟随平台</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"40\"/>\n        <source>LF (Linux/macOS)</source>\n        <translation>LF(Linux/macOS)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"41\"/>\n        <source>CR LF (Windows)</source>\n        <translation>CR LF(Windows)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"42\"/>\n        <source>CR</source>\n        <translation>CR</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"44\"/>\n        <source>Line ending:</source>\n        <translation>行结尾:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"53\"/>\n        <source>Default mode when opening notes</source>\n        <translation>笔记的默认打开模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"55\"/>\n        <source>Read</source>\n        <translation>阅读</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"56\"/>\n        <source>Edit</source>\n        <translation>编辑</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"58\"/>\n        <source>Default open mode:</source>\n        <translation>默认打开模式:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/notemanagementpage.cpp\" line=\"110\"/>\n        <source>Note Management</source>\n        <translation>笔记管理</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotePropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"35\"/>\n        <source>%1 Properties</source>\n        <translation>%1属性</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"60\"/>\n        <source>Please specify a valid name for the note.</source>\n        <translation>请为笔记指定一个有效名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"66\"/>\n        <source>Name conflicts with existing note.</source>\n        <translation>名字和已有笔记冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notepropertiesdialog.cpp\" line=\"94\"/>\n        <source>Failed to save note (%1) in (%2) (%3).</source>\n        <translation>无法保存笔记本(%2)中的笔记(%1)(%3)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NoteTemplateSelector</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notetemplateselector.cpp\" line=\"35\"/>\n        <source>Manage</source>\n        <translation>管理</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notetemplateselector.cpp\" line=\"52\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notetemplateselector.cpp\" line=\"84\"/>\n        <source>Failed to load template (%1) (%2).</source>\n        <translation>无法加载模板(%1)(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookExplorer</name>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"78\"/>\n        <source>Select one of all the notebooks as current notebook.&lt;br/&gt;Move mouse on one item to check its details.</source>\n        <translation>从全部笔记本中选择一个作为当前笔记本。&lt;br/&gt;移动鼠标到某个项目上查看详情。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"116\"/>\n        <source>Notebook</source>\n        <translation>笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"120\"/>\n        <source>This title bar contains buttons and menu to manage notebooks and notes.</source>\n        <translation>该标题栏包含管理笔记本和笔记的按钮和菜单。</translation>\n    </message>\n    <message>\n        <source>View</source>\n        <translation type=\"vanished\">查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"186\"/>\n        <source>External Files</source>\n        <translation>外部文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"189\"/>\n        <source>Show External Files</source>\n        <translation>显示外部文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"141\"/>\n        <source>Scan and Import</source>\n        <translation>扫描并导入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"146\"/>\n        <source>Please select one notebook first.</source>\n        <translation>请先选择一个笔记本。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"151\"/>\n        <source>Scan the whole notebook (%1) and import external files automatically?</source>\n        <translation>扫描整个笔记本(%1)并自动导入外部文件？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"152\"/>\n        <source>This operation helps importing external files that are added outside from VNote. It may import unexpected files.</source>\n        <translation>该操作帮助导入在VNote外添加的外部文件。可能会导入不想要的文件。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"154\"/>\n        <source>It is recommended to always manage files within VNote.</source>\n        <translation>推荐总是在VNote中管理文件。</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"162\"/>\n        <source>Imported %n file(s).</source>\n        <translation>\n            <numerusform>已导入 %n 个文件。</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"173\"/>\n        <source>Manage Notebooks</source>\n        <translation>管理笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"178\"/>\n        <source>Rebuild Notebook Database</source>\n        <translation>重建笔记本数据库</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"200\"/>\n        <source>Import External Files when Activated</source>\n        <translation>激活时自动导入外部文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"210\"/>\n        <source>Close File Before Open with External Program</source>\n        <translation>以外部程序打开前关闭文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"137\"/>\n        <source>Recycle Bin</source>\n        <translation>回收站</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"126\"/>\n        <source>Notebooks</source>\n        <translation>笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"128\"/>\n        <source>Notes</source>\n        <translation>笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"131\"/>\n        <source>View By</source>\n        <translation>查看方式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"297\"/>\n        <source>Please set up quick note schemes in the Settings dialog first.</source>\n        <translation>请先在设置对话框中设置快速笔记方案。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"302\"/>\n        <source>New Quick Note</source>\n        <translation>新建快速笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"326\"/>\n        <source>The quick note should be created within a notebook.</source>\n        <translation>快速笔记应该在一个笔记本内进行创建。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"341\"/>\n        <source>Failed to create quick note from scheme (%1) (%2)</source>\n        <translation>无法从方案(%1)中新建快速笔记(%2)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"371\"/>\n        <source>Please first create a notebook to hold your data.</source>\n        <translation>请先创建一个笔记本来保存数据。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"396\"/>\n        <source>Select Files To Import</source>\n        <translation>选择文件导入</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"407\"/>\n        <source>Failed to add file (%1) as node (%2).\n</source>\n        <translation>无法添加文件 (%1) 为节点 (%2)。\n</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"464\"/>\n        <source>View By Configuration</source>\n        <translation>按配置查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"470\"/>\n        <source>View By Name</source>\n        <translation>按名字查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"475\"/>\n        <source>View By Name (Reversed)</source>\n        <translation>按名字倒序查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"480\"/>\n        <source>View By Created Time</source>\n        <translation>按创建时间查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"485\"/>\n        <source>View By Created Time (Reversed)</source>\n        <translation>按创建时间倒序查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"491\"/>\n        <source>View By Modified Time</source>\n        <translation>按修改时间查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"496\"/>\n        <source>View By Modified Time (Reversed)</source>\n        <translation>按修改时间倒序查看</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"525\"/>\n        <source>Open Recycle Bin</source>\n        <translation>打开回收站</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"533\"/>\n        <source>Empty Recycle Bin</source>\n        <translation>清空回收站</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"540\"/>\n        <source>Empty the recycle bin of notebook (%1)?</source>\n        <translation>清空笔记本(%1)的回收站？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"541\"/>\n        <source>CAUTION! All the files under the recycle bin folder will be deleted and unrecoverable!</source>\n        <translation>注意！回收站文件夹下面的所有文件都会被删除且不可恢复！</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"542\"/>\n        <source>Recycle bin folder: %1</source>\n        <translation>回收站文件夹: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"552\"/>\n        <source>Explore Mode</source>\n        <translation>浏览模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"556\"/>\n        <source>Combined</source>\n        <translation>合并</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"562\"/>\n        <source>Separate, Single Column</source>\n        <translation>独立，单列</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"568\"/>\n        <source>Separate, Double Columns</source>\n        <translation>独立，双列</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"649\"/>\n        <source>Rebuild the database of notebook (%1)?</source>\n        <translation>重建笔记本(%1)的数据库？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"650\"/>\n        <source>This operation will rebuild the notebook database from configuration files. It may take time.</source>\n        <translation>该操作会根据配置文件重建笔记本数据库。可能会需要一定时间。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"651\"/>\n        <source>A notebook may use a database for cache, such as IDs of nodes and tags.</source>\n        <translation>一个笔记本可能会使用一个数据库作为缓存，例如节点的标识号和标签。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"657\"/>\n        <source>Rebuilding notebook database...</source>\n        <translation>正在重建笔记本数据库...</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"673\"/>\n        <source>Notebook database has been rebuilt.</source>\n        <translation>笔记本数据库已重建。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebookexplorer.cpp\" line=\"677\"/>\n        <source>Failed to rebuild notebook database.</source>\n        <translation>无法重建笔记本数据库。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookInfoWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"47\"/>\n        <source>Basic Information</source>\n        <translation>基本信息</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"52\"/>\n        <source>Type:</source>\n        <translation>类型:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"57\"/>\n        <source>Name of notebook</source>\n        <translation>笔记本名字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"60\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"64\"/>\n        <source>Icon:</source>\n        <translation>图标:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"69\"/>\n        <source>Description of notebook</source>\n        <translation>笔记本描述</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"72\"/>\n        <source>Description:</source>\n        <translation>描述:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"77\"/>\n        <source>Root folder:</source>\n        <translation>根文件夹:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"86\"/>\n        <source>Type of notebook</source>\n        <translation>笔记本类型</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"88\"/>\n        <source>Specify the type of notebook.&lt;br/&gt;</source>\n        <translation>指定笔记本类型。&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"92\"/>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"164\"/>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"180\"/>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"196\"/>\n        <source>&lt;b&gt;%1&lt;/b&gt;: %2&lt;br/&gt;</source>\n        <translation>&lt;b&gt;%1&lt;/b&gt;: %2&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"102\"/>\n        <source>Path of notebook root folder</source>\n        <translation>笔记本根文件夹路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"103\"/>\n        <source>&lt;b&gt;Notebook Root Folder&lt;/b&gt; is the folder containing all data of one notebook in %1.</source>\n        <translation>&lt;b&gt;笔记本根文件夹&lt;/b&gt;是在%1中包含一个笔记本的全部数据。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"111\"/>\n        <source>Browse</source>\n        <translation>浏览</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"117\"/>\n        <source>Select Notebook Root Folder</source>\n        <translation>选择笔记本根文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"134\"/>\n        <source>Advanced Information</source>\n        <translation>高级信息</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"139\"/>\n        <source>Configuration manager:</source>\n        <translation>配置管理器:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"144\"/>\n        <source>Version control:</source>\n        <translation>版本管理:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"149\"/>\n        <source>Backend:</source>\n        <translation>后端:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"158\"/>\n        <source>Configuration manager of notebook</source>\n        <translation>笔记本的配置管理器</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"160\"/>\n        <source>Specify configruation manager of notebook.&lt;br/&gt;</source>\n        <translation>指定笔记本的配置管理器。&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"174\"/>\n        <source>Version control of notebook</source>\n        <translation>笔记本的版本管理</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"176\"/>\n        <source>Specify version control of notebook.&lt;br/&gt;</source>\n        <translation>指定笔记本的版本管理。&lt;br/&gt;</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"190\"/>\n        <source>Backend of notebook</source>\n        <translation>笔记本后端</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/notebookinfowidget.cpp\" line=\"192\"/>\n        <source>Specify backend of notebook.&lt;br/&gt;</source>\n        <translation>指定笔记本后端。&lt;br/&gt;</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookNodeExplorer</name>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"452\"/>\n        <source>Failed to load nodes of notebook (%1) (%2).</source>\n        <translation>无法加载笔记本(%1)节点(%2)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1229\"/>\n        <source>Visual Settings</source>\n        <translation>样式设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1237\"/>\n        <source>Cascade Color Settings</source>\n        <translation>级联色设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1529\"/>\n        <source>&amp;Edit</source>\n        <translation>编辑(&amp;E)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1529\"/>\n        <source>&amp;Read</source>\n        <translation>阅读(&amp;R)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1561\"/>\n        <source>E&amp;xpand All\t*</source>\n        <translation>逐层展开(&amp;X)\t*</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2773\"/>\n        <source>[Invalid] %1</source>\n        <translation>[无效]%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"596\"/>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"613\"/>\n        <source>[External] %1</source>\n        <translation>[外部]%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1327\"/>\n        <source>New &amp;Folder</source>\n        <translation>新建文件夹(&amp;F)</translation>\n    </message>\n    <message>\n        <source>Open &amp;Location</source>\n        <translation type=\"vanished\">打开路径(&amp;L)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1386\"/>\n        <source>Cop&amp;y Path</source>\n        <translation>复制路径(&amp;Y)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1406\"/>\n        <source>Copied path: %1</source>\n        <translation>已复制路径: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1412\"/>\n        <source>&amp;Copy</source>\n        <translation>复制(&amp;C)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1421\"/>\n        <source>C&amp;ut</source>\n        <translation>剪切(&amp;U)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1430\"/>\n        <source>&amp;Paste</source>\n        <translation>粘贴(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1445\"/>\n        <source>Remo&amp;ve From Index</source>\n        <translation>从索引中移除(&amp;V)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1453\"/>\n        <source>&amp;Sort</source>\n        <translation>排序(&amp;S)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1461\"/>\n        <source>Re&amp;load</source>\n        <translation>重新加载(&amp;L)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1316\"/>\n        <source>New &amp;Note</source>\n        <translation>新建笔记(&amp;N)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1470\"/>\n        <source>Relo&amp;ad Index Of Notebook From Disk</source>\n        <translation>从磁盘重新加载笔记本索引(&amp;A)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1489\"/>\n        <source>&amp;Import To Index</source>\n        <translation>导入到索引（&amp;I）</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1500\"/>\n        <source>&amp;Open</source>\n        <translation>打开(&amp;O)</translation>\n    </message>\n    <message>\n        <source>&amp;Expand All\t*</source>\n        <translation type=\"vanished\">逐层展开(&amp;E)\t*</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1978\"/>\n        <source>Failed to copy source (%1) to destination (%2) (%3).</source>\n        <translation>无法复制源(%1)至目标(%2)(%3)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2334\"/>\n        <source>Sort Folders</source>\n        <translation>排序文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2334\"/>\n        <source>Sort Notes</source>\n        <translation>排序笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2335\"/>\n        <source>Sort nodes under %1 (%2) in the configuration file.</source>\n        <translation>在配置文件中对%1(%2)下的节点进行排序。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2336\"/>\n        <source>notebook</source>\n        <translation>笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2336\"/>\n        <source>folder</source>\n        <translation>文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2347\"/>\n        <source>Name</source>\n        <translation>名字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2347\"/>\n        <source>Created Time</source>\n        <translation>创建时间</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2347\"/>\n        <source>Modified Time</source>\n        <translation>修改时间</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2547\"/>\n        <source>Invalid node (%1).</source>\n        <translation>无效的节点(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2548\"/>\n        <source>Please check if the node exists on the disk.</source>\n        <translation>请检查该节点在磁盘上是否存在。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1338\"/>\n        <source>&amp;Properties (Rename)</source>\n        <translation>属性(重命名)(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1348\"/>\n        <source>Open Locat&amp;ion</source>\n        <translation>打开路径(&amp;I)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1437\"/>\n        <source>&amp;Delete</source>\n        <translation>删除(&amp;D)</translation>\n    </message>\n    <message>\n        <source>&amp;Remove From Index</source>\n        <translation type=\"vanished\">从索引中移除(&amp;R)</translation>\n    </message>\n    <message>\n        <source>Relo&amp;ad Index From Disk</source>\n        <translation type=\"vanished\">从磁盘重新加载索引(&amp;A)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1579\"/>\n        <source>Pin To &amp;Quick Access</source>\n        <translation>固定到快速访问(&amp;Q)</translation>\n    </message>\n    <message>\n        <source>Folder is not supported by quick access</source>\n        <translation type=\"vanished\">快速访问不支持文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1609\"/>\n        <source>&amp;Tags</source>\n        <translation>标签(&amp;T)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1624\"/>\n        <source>Set Background Color</source>\n        <translation>设置背景颜色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1637\"/>\n        <source>Select Background Color</source>\n        <translation>选择背景颜色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1647\"/>\n        <source>Set Border Color</source>\n        <translation>设置边框颜色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1660\"/>\n        <source>Select Border Color</source>\n        <translation>选择边框颜色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1670\"/>\n        <source>Set Name Color</source>\n        <translation>设置文字颜色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1683\"/>\n        <source>Select Name Color</source>\n        <translation>选择文字颜色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1693\"/>\n        <source>Set Cascade Background Color</source>\n        <translation>设置背景级联色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1710\"/>\n        <source>Select Cascade Background Color</source>\n        <translation>选择背景级联色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1718\"/>\n        <source>Set Cascade Border Color</source>\n        <translation>设置边框级联色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1735\"/>\n        <source>Select Cascade Border Color</source>\n        <translation>选择边框级联色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1743\"/>\n        <source>Clear Cascade Colors</source>\n        <translation>清空级联色</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1761\"/>\n        <source>Clear Colors</source>\n        <translation>清空颜色</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1819\"/>\n        <source>Copied %n item(s)</source>\n        <translation>\n            <numerusform>已复制 %n 项</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1930\"/>\n        <source>Invalid clipboard data to paste.</source>\n        <translation>无效的剪切板数据用于粘贴。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"1945\"/>\n        <source>Destination is detected in sources (%1). Operation is cancelled.</source>\n        <translation>目标包含在源(%1)中。操作取消。</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2003\"/>\n        <source>Pasted %n item(s)</source>\n        <translation>\n            <numerusform>已粘贴 %n 项</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2046\"/>\n        <source>Delete these folders and notes?</source>\n        <translation>删除这些文件夹和笔记？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2047\"/>\n        <source>Deleted files could be found in the recycle bin of notebook.</source>\n        <translation>被删除的文件可以在笔记本回收站中找回。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2048\"/>\n        <source>Confirm Deletion</source>\n        <translation>确认删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2123\"/>\n        <source>Failed to delete/remove item (%1) (%2) (%3).</source>\n        <translation>无法删除或移除项目(%1)(%2)(%3)。</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2137\"/>\n        <source>Deleted/Removed %n item(s)</source>\n        <translation>\n            <numerusform>删除或移除 %n 项</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2142\"/>\n        <source>Confirm Removal</source>\n        <translation>确认移除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2143\"/>\n        <source>Remove these folders and notes from index?</source>\n        <translation>从索引中移除这些文件夹和笔记？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2144\"/>\n        <source>Files are not touched but just removed from notebook index.</source>\n        <translation>文件不会被改动，仅仅是从笔记本索引中移除。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2559\"/>\n        <source>Open &amp;With</source>\n        <translation>打开方式(&amp;W)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2594\"/>\n        <source>System Default Program</source>\n        <translation>系统默认程序</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/notebooknodeexplorer.cpp\" line=\"2603\"/>\n        <source>Add External Program</source>\n        <translation>添加外部程序</translation>\n    </message>\n    <message>\n        <source>Tags: %1\n</source>\n        <translation type=\"vanished\">标签: %1\n</translation>\n    </message>\n    <message>\n        <source>Created Time: %1\n</source>\n        <translation type=\"vanished\">创建时间: %1\n</translation>\n    </message>\n    <message>\n        <source>Modified Time: %1</source>\n        <translation type=\"vanished\">修改时间: %1</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::NotebookSelector</name>\n    <message>\n        <location filename=\"../../../widgets/notebookselector.cpp\" line=\"152\"/>\n        <source>Notebook: %1\nRoot folder: %2\nDescription: %3</source>\n        <translation>笔记本: %1\n根文件夹: %2\n描述: %3</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::OutlinePopup</name>\n    <message>\n        <location filename=\"../../../widgets/outlinepopup.cpp\" line=\"24\"/>\n        <source>Outline</source>\n        <translation>大纲</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::OutlineProvider</name>\n    <message>\n        <location filename=\"../../../widgets/outlineprovider.h\" line=\"105\"/>\n        <source>[EMPTY]</source>\n        <translation>[空]</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::OutlineViewer</name>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"95\"/>\n        <source>Decrease Expansion Level</source>\n        <translation>减小扩展层级</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"110\"/>\n        <source>Increase Expansion Level</source>\n        <translation>增大扩展层级</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"126\"/>\n        <source>Section Number</source>\n        <translation>小节序号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"315\"/>\n        <source>%1 %2</source>\n        <translation>%1 %2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/outlineviewer.cpp\" line=\"350\"/>\n        <source>Expansion level: %1</source>\n        <translation>扩展层级: %1</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::QuickAccessPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"115\"/>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"148\"/>\n        <source>Quick Access</source>\n        <translation>快速访问</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"120\"/>\n        <source>Flash Page</source>\n        <translation>灵犀页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"125\"/>\n        <source>Flash Page location (user could copy the path of one note and paste it here)</source>\n        <translation>灵犀页位置（用户可以复制笔记的路径并粘贴在此）</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"127\"/>\n        <source>Flash Page:</source>\n        <translation>灵犀页:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"135\"/>\n        <source>Select Flash Page File</source>\n        <translation>选择灵犀页文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"153\"/>\n        <source>Edit the files pinned to Quick Access (one file per line)</source>\n        <translation>编辑固定到快速访问的文件（一行一个文件）</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"156\"/>\n        <source>Quick Access:</source>\n        <translation>快速访问:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"178\"/>\n        <source>Quick Note</source>\n        <translation>快速笔记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"187\"/>\n        <source>No scheme to show</source>\n        <translation>没有可以展示的方案</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"189\"/>\n        <source>New</source>\n        <translation>新建</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"194\"/>\n        <source>Delete</source>\n        <translation>删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"200\"/>\n        <source>Scheme:</source>\n        <translation>方案:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"217\"/>\n        <source>Folder:</source>\n        <translation>文件夹:</translation>\n    </message>\n    <message>\n        <source>Folder path:</source>\n        <translation type=\"obsolete\">文件夹路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"219\"/>\n        <source>Empty to use current explored folder dynamically</source>\n        <translation>如为空则动态使用创建笔记时当前浏览文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"227\"/>\n        <source>Select Quick Note Folder</source>\n        <translation>选择快速笔记文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"236\"/>\n        <source>Note name:</source>\n        <translation>文件名:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"244\"/>\n        <source>Note template:</source>\n        <translation>笔记模板:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"267\"/>\n        <source>Quick Note Scheme</source>\n        <translation>快速笔记方案</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"268\"/>\n        <source>Scheme name already exists! Try again:</source>\n        <translation>方案名字已存在！请重试:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"268\"/>\n        <source>Scheme name:</source>\n        <translation>方案名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"278\"/>\n        <source>quick_note_%da%.md</source>\n        <translation>快速笔记_%da%.md</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/quickaccesspage.cpp\" line=\"294\"/>\n        <source>Delete quick note scheme (%1)?</source>\n        <translation>删除快速笔记方案(%1)?</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::RenameTagDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"32\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"36\"/>\n        <source>Rename Tag</source>\n        <translation>重命名标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"51\"/>\n        <source>Please specify a valid name for the tag.</source>\n        <translation>请为标签指定一个有效名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"54\"/>\n        <source>Name conflicts with existing tag.</source>\n        <translation>名字和已有标签冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/renametagdialog.cpp\" line=\"65\"/>\n        <source>Failed to rename tag (%1) to (%2).</source>\n        <translation>无法重命名标签(%1)为(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::RepoImageHost</name>\n    <message>\n        <location filename=\"../../../imagehost/repoimagehost.cpp\" line=\"21\"/>\n        <source>PersonalAccessToken/UserName/RepositoryName should not be empty.</source>\n        <translation>个人令牌/用户名/仓库名不能为空。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../imagehost/repoimagehost.cpp\" line=\"38\"/>\n        <source>Private repository is not supported.</source>\n        <translation>不支持私有仓库。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SearchPanel</name>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"167\"/>\n        <source>Full-text search.</source>\n        <translation>全文搜索。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"169\"/>\n        <source>Keywords to search for.</source>\n        <translation>搜索的关键词。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"178\"/>\n        <source>Search in case sensitive.</source>\n        <translation>大小写敏感搜索。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"181\"/>\n        <source>Search by regular expression.</source>\n        <translation>以正则表达式搜索。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"184\"/>\n        <source>Search whole word only.</source>\n        <translation>按完整词搜索。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"187\"/>\n        <source>Do a fuzzy search (not applicable to content search).</source>\n        <translation>模糊搜索（对内容搜索无效）。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchtoken.cpp\" line=\"190\"/>\n        <source>Do an OR combination of keywords.</source>\n        <translation>用或来组合关键词。</translation>\n    </message>\n    <message>\n        <source>Keywords to search.</source>\n        <translation type=\"vanished\">搜索的关键词。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"93\"/>\n        <source>Keyword:</source>\n        <translation>关键词:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"96\"/>\n        <source>Buffers</source>\n        <translation>缓冲区</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"97\"/>\n        <source>Current Folder</source>\n        <translation>当前文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"98\"/>\n        <source>Current Notebook</source>\n        <translation>当前笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"99\"/>\n        <source>All Notebooks</source>\n        <translation>全部笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"100\"/>\n        <source>Scope:</source>\n        <translation>范围:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"117\"/>\n        <source>Wildcard pattern of files to search</source>\n        <translation>需要搜索的文件的通配符模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"120\"/>\n        <source>File pattern:</source>\n        <translation>文件模式:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"142\"/>\n        <source>Search</source>\n        <translation>搜索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"146\"/>\n        <source>Cancel</source>\n        <translation>取消</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"150\"/>\n        <source>Toggle Location List</source>\n        <translation>打开或关闭位置列表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"156\"/>\n        <source>Advanced Settings</source>\n        <translation>高级设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"171\"/>\n        <source>Object:</source>\n        <translation>对象:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"173\"/>\n        <source>Name</source>\n        <translation>名字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"176\"/>\n        <source>Content</source>\n        <translation>内容</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"179\"/>\n        <source>Tag</source>\n        <translation>标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"182\"/>\n        <source>Path</source>\n        <translation>路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"190\"/>\n        <source>Target:</source>\n        <translation>目标:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"192\"/>\n        <source>File</source>\n        <translation>文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"195\"/>\n        <source>Folder</source>\n        <translation>文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"198\"/>\n        <source>Notebook</source>\n        <translation>笔记本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"206\"/>\n        <source>Option:</source>\n        <translation>选项:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"208\"/>\n        <source>&amp;Case sensitive</source>\n        <translation>大小写敏感(&amp;C)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"214\"/>\n        <source>&amp;Plain text</source>\n        <translation>纯文本(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"218\"/>\n        <source>&amp;Whole word only</source>\n        <translation>匹配完整词(&amp;W)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"222\"/>\n        <source>&amp;Fuzzy search</source>\n        <translation>模糊搜索(&amp;F)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"226\"/>\n        <source>Re&amp;gular expression</source>\n        <translation>正则表达式(&amp;G)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/searchpanel.cpp\" line=\"326\"/>\n        <source>Search finished: %1</source>\n        <translation>搜索完成: %1</translation>\n    </message>\n    <message>\n        <source>Invalid keyword</source>\n        <translation type=\"vanished\">无效关键词</translation>\n    </message>\n    <message>\n        <source>No object specified</source>\n        <translation type=\"vanished\">没有指定对象</translation>\n    </message>\n    <message>\n        <source>No target specified</source>\n        <translation type=\"vanished\">没有指定目标</translation>\n    </message>\n    <message>\n        <source>Fuzzy search is not allowed when searching content</source>\n        <translation type=\"vanished\">模糊搜索不可用于搜索内容</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SearchTranslate</name>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"29\"/>\n        <source>Idle</source>\n        <translation>空闲</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"32\"/>\n        <source>Busy</source>\n        <translation>忙</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"35\"/>\n        <source>Finished</source>\n        <translation>完成</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"38\"/>\n        <source>Failed</source>\n        <translation>失败</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchdata.h\" line=\"41\"/>\n        <source>Stopped</source>\n        <translation>停止</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Searcher</name>\n    <message numerus=\"yes\">\n        <location filename=\"../../../search/searcher.cpp\" line=\"55\"/>\n        <source>Searching %n buffer(s)</source>\n        <translation>\n            <numerusform>正在搜索 %n 缓冲区</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"96\"/>\n        <source>Searching folder (%1)</source>\n        <translation>正在搜索文件夹(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"128\"/>\n        <source>Searching notebook (%1)</source>\n        <translation>正在搜索笔记本(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"153\"/>\n        <source>Failed to compile tokens (%1)</source>\n        <translation>无法编译令牌(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"170\"/>\n        <source>Failed to search due to worker is busy</source>\n        <translation>正忙，无法搜索</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searcher.cpp\" line=\"353\"/>\n        <source>Failed to load node to search (%1) (%2).</source>\n        <translation>无法加载节点进行搜索(%1)(%2)。</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../search/searcher.cpp\" line=\"489\"/>\n        <source>Start second-phase search: %n files(s)</source>\n        <translation>\n            <numerusform>开始第二阶段搜索: %n 文件</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"10\"/>\n        <source>Invalid keyword</source>\n        <translation>无效关键词</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"15\"/>\n        <source>No object specified</source>\n        <translation>没有指定对象</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"20\"/>\n        <source>No target specified</source>\n        <translation>没有指定目标</translation>\n    </message>\n    <message>\n        <location filename=\"../../../search/searchhelper.cpp\" line=\"26\"/>\n        <source>Fuzzy search is not allowed when searching content</source>\n        <translation>模糊搜索不可用于搜索内容</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SelectDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/selectdialog.cpp\" line=\"55\"/>\n        <source>Cancel</source>\n        <translation>取消</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SettingsDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/settingsdialog.cpp\" line=\"72\"/>\n        <source>Settings</source>\n        <translation>设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/settingsdialog.cpp\" line=\"86\"/>\n        <source>Search</source>\n        <translation>查找</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/settingsdialog.cpp\" line=\"331\"/>\n        <source>A restart of VNote may be needed to make changes take effect. Restart VNote now?</source>\n        <translation>需要重启VNote以让更改生效。现在重启VNote？</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetInfoWidget</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"43\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"50\"/>\n        <source>Description:</source>\n        <translation>描述:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"53\"/>\n        <source>Type:</source>\n        <translation>类型:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"56\"/>\n        <source>Shortcut:</source>\n        <translation>快捷键:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"60\"/>\n        <source>A mark in the snippet content indicating the cursor position after the application</source>\n        <translation>一个用于在片段内容中指定应用片段后光标位置的标记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"63\"/>\n        <source>Cursor mark:</source>\n        <translation>光标标记:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"67\"/>\n        <source>A mark in the snippet content that will be replaced with the selected text before the application</source>\n        <translation>一个用于在片段内容中指代应用片段前所选择文本的标记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"70\"/>\n        <source>Selection mark:</source>\n        <translation>选择标记:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"72\"/>\n        <source>Indent as first line</source>\n        <translation>与第一行同步缩进</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"79\"/>\n        <source>Nested snippet is supported, like `%time%` to embed the snippet `time`</source>\n        <translation>支持嵌套的片段，如`%time%`会内嵌片段`time`</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"82\"/>\n        <source>Content:</source>\n        <translation>内容:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"88\"/>\n        <source>Text</source>\n        <translation>文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"90\"/>\n        <source>Dynamic</source>\n        <translation>动态</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetinfowidget.cpp\" line=\"190\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetMgr</name>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"319\"/>\n        <source>the day as number without a leading zero (`1` to `31`)</source>\n        <translation>没有前导零的日期数字(`1`到`31`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"323\"/>\n        <source>the day as number with a leading zero (`01` to `31`)</source>\n        <translation>带前导零的日期数字(`01`到`31`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"327\"/>\n        <source>the abbreviated localized day name (e.g. `Mon` to `Sun`)</source>\n        <translation>缩写的本地化日期名字(如`一`到`日`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"331\"/>\n        <source>the long localized day name (e.g. `Monday` to `Sunday`)</source>\n        <translation>本地化日期名字(如`星期一`到`星期日`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"335\"/>\n        <source>the month as number without a leading zero (`1` to `12`)</source>\n        <translation>没有前导零的月份数字(如`1`到`12`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"339\"/>\n        <source>the month as number with a leading zero (`01` to `12`)</source>\n        <translation>带前导零的月份数字(`01`到`12`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"343\"/>\n        <source>the abbreviated localized month name (e.g. `Jan` to `Dec`)</source>\n        <translation>缩写的本地化月份名字(如`一`到`十二`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"347\"/>\n        <source>the long localized month name (e.g. `January` to `December`)</source>\n        <translation>本地化月份名字(如`一月`到`十二月`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"351\"/>\n        <source>the year as two digit numbers (`00` to `99`)</source>\n        <translation>两位数的年份数字(`00`到`99`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"355\"/>\n        <source>the year as four digit numbers</source>\n        <translation>四位数的年份数字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"359\"/>\n        <source>the week number without a leading zero (`1` to `53`)</source>\n        <translation>没有前导零的星期数字(`1`到`53`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"365\"/>\n        <source>the week number with a leading zero (`01` to `53`)</source>\n        <translation>带前导零的星期数字(`1`到`53`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"371\"/>\n        <source>the hour without a leading zero (`0` to `23` even with AM/PM display)</source>\n        <translation>没有前导零的小时(`0`到`23`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"375\"/>\n        <source>the hour with a leading zero (`00` to `23` even with AM/PM display)</source>\n        <translation>带前导零的小时(`00`到`23`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"379\"/>\n        <source>the minute without a leading zero (`0` to `59`)</source>\n        <translation>没有前导零的分(`0`到`59`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"383\"/>\n        <source>the minute with a leading zero (`00` to `59`)</source>\n        <translation>带前导零的分(`00`到`59`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"387\"/>\n        <source>the second without a leading zero (`0` to `59`)</source>\n        <translation>没有前导零的秒(`0`到`59`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"391\"/>\n        <source>the second with a leading zero (`00` to `59`)</source>\n        <translation>带前导零的秒(`00`到`59`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"395\"/>\n        <source>date (`2021-02-24`)</source>\n        <translation>日期(`2021-02-24`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"399\"/>\n        <source>the abbreviated date (`20210224`)</source>\n        <translation>缩写的日期(`20210224`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"403\"/>\n        <source>time (`16:51:02`)</source>\n        <translation>时间(`16:51:02`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"407\"/>\n        <source>date and time (`2021-02-24_16:51:02`)</source>\n        <translation>日期时间(`2021-02-24_16:51:02`)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"414\"/>\n        <source>name of current note</source>\n        <translation>当前笔记名字</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"416\"/>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"422\"/>\n        <source>[Value Not Available]</source>\n        <translation>[没有可用值]</translation>\n    </message>\n    <message>\n        <location filename=\"../../../snippet/snippetmgr.cpp\" line=\"420\"/>\n        <source>complete base name of current note</source>\n        <translation>当前笔记的完整基本名字</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetPanel</name>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"64\"/>\n        <source>New Snippet</source>\n        <translation>新建片段</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"70\"/>\n        <source>Open Folder</source>\n        <translation>打开文件夹</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"77\"/>\n        <source>Show Built-In Snippets</source>\n        <translation>显示内建片段</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"101\"/>\n        <source>%n Item(s)</source>\n        <translation>\n            <numerusform>%n 项</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"123\"/>\n        <source>%1%2 [%3]</source>\n        <translation>%1%2 [%3]</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"144\"/>\n        <source>&amp;Apply</source>\n        <translation>应用(&amp;A)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"151\"/>\n        <source>&amp;Delete</source>\n        <translation>删除(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"156\"/>\n        <source>&amp;Properties (Rename)</source>\n        <translation>属性(重命名)(&amp;P)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"201\"/>\n        <source>Confirm Deletion</source>\n        <translation>确认删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"202\"/>\n        <source>Delete these snippets permanently?</source>\n        <translation>永久删除这些片段？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"203\"/>\n        <source>Files will be deleted permanently and could not be found even in operating system&apos;s recycle bin.</source>\n        <translation>文件将会被永久删除，即使在操作系统的回收站中也无法找回。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/snippetpanel.cpp\" line=\"226\"/>\n        <source>Failed to remove snippet (%1) (%2).</source>\n        <translation>无法删除片段(%1)(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SnippetPropertiesDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"31\"/>\n        <source>%1 Properties</source>\n        <translation>%1属性</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"56\"/>\n        <source>Please specify a name for the snippet.</source>\n        <translation>请为片段指定一个名字。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"65\"/>\n        <source>Name conflicts with existing snippet.</source>\n        <translation>名字和已有片段冲突。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/snippetpropertiesdialog.cpp\" line=\"92\"/>\n        <source>Failed to update snippet (%1) (%2).</source>\n        <translation>无法更新片段(%1)(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::SortDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"54\"/>\n        <source>&amp;Top</source>\n        <translation>置顶(&amp;T)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"61\"/>\n        <source>&amp;Up</source>\n        <translation>上移(&amp;U)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"68\"/>\n        <source>&amp;Down</source>\n        <translation>下移(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/sortdialog.cpp\" line=\"75\"/>\n        <source>&amp;Bottom</source>\n        <translation>置底(&amp;B)</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TableInsertDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"28\"/>\n        <source>Row count of the table body</source>\n        <translation>表格正文行数</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"32\"/>\n        <source>Row:</source>\n        <translation>行:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"36\"/>\n        <source>Column count of the table</source>\n        <translation>表格列数</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"40\"/>\n        <source>Column:</source>\n        <translation>列:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"44\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"45\"/>\n        <source>Left</source>\n        <translation>左对齐</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"46\"/>\n        <source>Center</source>\n        <translation>居中</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"47\"/>\n        <source>Right</source>\n        <translation>右对齐</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/tableinsertdialog.cpp\" line=\"56\"/>\n        <source>Alignment:</source>\n        <translation>对齐:</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TagExplorer</name>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"94\"/>\n        <source>Two Columns</source>\n        <translation>双列</translation>\n    </message>\n    <message>\n        <source>Search of tag succeeded: %1</source>\n        <translation type=\"vanished\">标签搜索成功: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"379\"/>\n        <source>Search of tags succeeded: %1</source>\n        <translation>标签搜索成功: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"397\"/>\n        <source>&amp;Open</source>\n        <translation>打开(&amp;O)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"407\"/>\n        <source>&amp;Locate Node</source>\n        <translation>定位节点(&amp;L)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"449\"/>\n        <source>&amp;New Tag</source>\n        <translation>新建标签(&amp;N)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"452\"/>\n        <source>&amp;Rename</source>\n        <translation>重命名(&amp;R)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"454\"/>\n        <source>&amp;Delete</source>\n        <translation>删除(&amp;D)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"501\"/>\n        <source>Delete the tag and all its chlidren tags?</source>\n        <translation>删除该标签以及其子标签？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"502\"/>\n        <source>Only tags and the references of them will be deleted.</source>\n        <translation>只会删除标签以及标签的引用。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"510\"/>\n        <source>Tag deleted</source>\n        <translation>标签已删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"512\"/>\n        <source>Failed to delete tag: %1</source>\n        <translation>无法删除标签: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagexplorer.cpp\" line=\"532\"/>\n        <source>Failed to move tag (%1).</source>\n        <translation>无法移动标签(%1)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TagViewer</name>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"47\"/>\n        <source>Enter to add a tag</source>\n        <translation>回车以添加一个标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"48\"/>\n        <source>[Shift+Enter] to add current selected tag in the list</source>\n        <translation>[Shift+Enter]以添加列表中当前选择的标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"324\"/>\n        <source>Tags updated: %1</source>\n        <translation>标签已更新: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/tagviewer.cpp\" line=\"327\"/>\n        <source>Failed to update tags of node (%1).</source>\n        <translation>无法更新节点(%1)的标签。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Task</name>\n    <message>\n        <location filename=\"../../../task/task.cpp\" line=\"456\"/>\n        <source>[Task (%1) started]\n</source>\n        <translation>[任务(%1)已启动]\n</translation>\n    </message>\n    <message>\n        <location filename=\"../../../task/task.cpp\" line=\"471\"/>\n        <source>[Task (%1) error occurred (%2)]\n</source>\n        <translation>[任务(%1)遇到错误(%2)]\n</translation>\n    </message>\n    <message>\n        <location filename=\"../../../task/task.cpp\" line=\"475\"/>\n        <source>\n[Task (%1) finished (%2)]\n</source>\n        <translation>\n[任务(%1)已结束(%2)]\n</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TextEditor</name>\n    <message>\n        <location filename=\"../../../widgets/editors/texteditor.cpp\" line=\"33\"/>\n        <source>Insert Snippet</source>\n        <translation>插入片段</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TextEditorPage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"30\"/>\n        <source>Line number type</source>\n        <translation>行号类型</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"32\"/>\n        <source>None</source>\n        <translation>无</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"33\"/>\n        <source>Absolute</source>\n        <translation>绝对</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"34\"/>\n        <source>Relative</source>\n        <translation>相对</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"36\"/>\n        <source>Line number:</source>\n        <translation>行号:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"44\"/>\n        <source>Fold text</source>\n        <translation>折叠文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"46\"/>\n        <source>Text folding</source>\n        <translation>文本折叠</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"55\"/>\n        <source>Input mode like Vi</source>\n        <translation>输入模式，如Vi</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"57\"/>\n        <source>Normal</source>\n        <translation>普通</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"58\"/>\n        <source>Vi</source>\n        <translation>Vi</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"59\"/>\n        <source>VSCode</source>\n        <translation>VSCode</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"61\"/>\n        <source>Input mode:</source>\n        <translation>输入模式:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"70\"/>\n        <source>Force to center text cursor</source>\n        <translation>文本光标强制居中</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"72\"/>\n        <source>Never</source>\n        <translation>从不</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"73\"/>\n        <source>Always Center</source>\n        <translation>总是居中</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"74\"/>\n        <source>Center On Bottom</source>\n        <translation>在底部时居中</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"76\"/>\n        <source>Center cursor:</source>\n        <translation>光标居中:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"85\"/>\n        <source>Word wrap mode of editor</source>\n        <translation>编辑器词换行模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"87\"/>\n        <source>No Wrap</source>\n        <translation>不换行</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"88\"/>\n        <source>Word Wrap</source>\n        <translation>按词换行</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"89\"/>\n        <source>Wrap Anywhere</source>\n        <translation>在任意位置换行</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"90\"/>\n        <source>Word Wrap Or Wrap Anywhere</source>\n        <translation>按词换行或者在任意位置换行</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"92\"/>\n        <source>Wrap mode:</source>\n        <translation>换行模式:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"100\"/>\n        <source>Expand Tab</source>\n        <translation>扩展制表符</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"102\"/>\n        <source>Expand Tab into spaces</source>\n        <translation>扩展制表符为空格</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"111\"/>\n        <source>Number of spaces to use where Tab is needed</source>\n        <translation>输入制表符时空格数量</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"116\"/>\n        <source>Tab stop width:</source>\n        <translation>制表符宽度:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"124\"/>\n        <source>Highlight whitespace</source>\n        <translation>高亮空白字符</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"126\"/>\n        <source>Highlight Tab and trailing space</source>\n        <translation>高亮制表符和结尾空格</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"135\"/>\n        <source>Zoom delta of the basic font size</source>\n        <translation>基础字体的缩放大小</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"140\"/>\n        <source>Zoom delta:</source>\n        <translation>缩放大小:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"148\"/>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"150\"/>\n        <source>Spell check</source>\n        <translation>拼写检查</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/texteditorpage.cpp\" line=\"242\"/>\n        <source>Text Editor</source>\n        <translation>文本编辑器</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ThemeMgr</name>\n    <message>\n        <location filename=\"../../../core/thememgr.cpp\" line=\"238\"/>\n        <location filename=\"../../../core/thememgr.cpp\" line=\"244\"/>\n        <source>[Theme] %1 %2</source>\n        <translation>[主题]%1 %2</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ThemePage</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"49\"/>\n        <source>Refresh</source>\n        <translation>刷新</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"57\"/>\n        <source>Add/Delete</source>\n        <translation>添加/删除</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"65\"/>\n        <source>Update</source>\n        <translation>更新</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"68\"/>\n        <source>Open Location</source>\n        <translation>打开路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"78\"/>\n        <source>No Preview Available</source>\n        <translation>没有可用预览</translation>\n    </message>\n    <message>\n        <source>Style Override</source>\n        <translation type=\"vanished\">样式覆盖</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/themepage.cpp\" line=\"109\"/>\n        <source>Theme</source>\n        <translation>主题</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TitleBar</name>\n    <message>\n        <location filename=\"../../../widgets/titlebar.cpp\" line=\"94\"/>\n        <source>Settings</source>\n        <translation>设置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titlebar.cpp\" line=\"90\"/>\n        <source>Menu</source>\n        <translation>菜单</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::TitleToolBar</name>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"39\"/>\n        <source>Minimize</source>\n        <translation>最小化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"46\"/>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"70\"/>\n        <source>Maximize</source>\n        <translation>最大化</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"52\"/>\n        <source>Close</source>\n        <translation>关闭</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/titletoolbar.cpp\" line=\"67\"/>\n        <source>Restore Down</source>\n        <translation>向下还原</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::UnitedEntry</name>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"99\"/>\n        <source>United Entry</source>\n        <translation>统一入口</translation>\n    </message>\n    <message>\n        <source>United Entry (%1)</source>\n        <translation type=\"vanished\">统一入口 (%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"76\"/>\n        <source>Type to command</source>\n        <translation>输入命令</translation>\n    </message>\n    <message>\n        <source>Type to command (%1)</source>\n        <translation type=\"vanished\">输入命令 (%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"118\"/>\n        <source>Options</source>\n        <translation>选项</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"124\"/>\n        <source>Expand All</source>\n        <translation>扩展全部</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"145\"/>\n        <source>Busy</source>\n        <translation>忙</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"354\"/>\n        <source>Unknown entry: %1</source>\n        <translation>未知入口: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"370\"/>\n        <source>Entry</source>\n        <translation>入口</translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentry.cpp\" line=\"370\"/>\n        <source>Description</source>\n        <translation>描述</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::UnitedEntryAlias</name>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentryalias.cpp\" line=\"35\"/>\n        <source>[Alias] </source>\n        <translation>[别名] </translation>\n    </message>\n    <message>\n        <location filename=\"../../../unitedentry/unitedentryalias.cpp\" line=\"64\"/>\n        <source>Invalid United Entry alias: %1</source>\n        <translation>无效的统一入口别名: %1</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::Updater</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"34\"/>\n        <source>Version:</source>\n        <translation>版本:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"36\"/>\n        <source>Fetching information...</source>\n        <translation>正在获取信息...</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"37\"/>\n        <source>Latest version:</source>\n        <translation>最新版本:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"43\"/>\n        <source>View Releases</source>\n        <translation>查看发布</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"50\"/>\n        <source>Check for Updates</source>\n        <translation>检查更新</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/updater.cpp\" line=\"65\"/>\n        <source>Failed to fetch information (%1).</source>\n        <translation>无法获取信息(%1)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::VNoteX</name>\n    <message>\n        <location filename=\"../../../core/htmltemplatehelper.cpp\" line=\"329\"/>\n        <source>Failed to load HTML template. Check the logs for details. Try deleting the user configuration file and the default configuration file.</source>\n        <translation>无法加载HTML模板。详情请查看日志。可以尝试删除用户配置文件以及默认配置文件。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViPage</name>\n    <message>\n        <source>Control-C to copy</source>\n        <translation type=\"vanished\">Control-C进行复制</translation>\n    </message>\n    <message>\n        <source>Use Control-C to copy text</source>\n        <translation type=\"vanished\">使用Control-C复制文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/vipage.cpp\" line=\"28\"/>\n        <source>Ctrl+C/X to copy/cut</source>\n        <translation>Ctrl+C/X进行复制/剪切</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/vipage.cpp\" line=\"30\"/>\n        <source>Use Ctrl+C/X to copy/cut text</source>\n        <translation>使用Ctrl+C/X来复制/剪切文本</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/settings/vipage.cpp\" line=\"61\"/>\n        <source>Vi Input Mode</source>\n        <translation>Vi输入模式</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewArea</name>\n    <message>\n        <location filename=\"../../../widgets/viewarea.cpp\" line=\"988\"/>\n        <source>No recently closed file</source>\n        <translation>没有最近关闭文件</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewSplit</name>\n    <message>\n        <source>Windows List</source>\n        <translation type=\"vanished\">窗口列表</translation>\n    </message>\n    <message>\n        <source>Workspaces and Splits</source>\n        <translation type=\"vanished\">工作空间和拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"135\"/>\n        <source>Open Windows</source>\n        <translation>已打开窗口</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"159\"/>\n        <source>Menu</source>\n        <translation>菜单</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"433\"/>\n        <source>No Window To Show</source>\n        <translation>没有可以展示的窗口</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"462\"/>\n        <source>Workspaces</source>\n        <translation>工作空间</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"478\"/>\n        <source>Workspace %1</source>\n        <translation>工作空间%1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"494\"/>\n        <source>New Workspace</source>\n        <translation>新建工作空间</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"501\"/>\n        <source>Remove Workspace</source>\n        <translation>移除工作空间</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"510\"/>\n        <source>Split</source>\n        <translation>拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"511\"/>\n        <source>Vertical Split</source>\n        <translation>竖直拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"517\"/>\n        <source>Horizontal Split</source>\n        <translation>水平拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"523\"/>\n        <source>Maximize Split</source>\n        <translation>最大化拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"529\"/>\n        <source>Distribute Splits</source>\n        <translation>平均分配拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"535\"/>\n        <source>Remove Split</source>\n        <translation>移除拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"540\"/>\n        <source>Remove Split And Workspace</source>\n        <translation>移除拆分和工作空间</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"556\"/>\n        <source>Close Tab</source>\n        <translation>关闭标签页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"566\"/>\n        <source>Close All Tabs</source>\n        <translation>关闭所有标签页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"576\"/>\n        <source>Close Other Tabs</source>\n        <translation>关闭其他标签页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"586\"/>\n        <source>Close Tabs To The Left</source>\n        <translation>关闭左侧标签页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"596\"/>\n        <source>Close Tabs To The Right</source>\n        <translation>关闭右侧标签页</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"607\"/>\n        <source>Auto Reload</source>\n        <translation>自动重新加载</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"608\"/>\n        <source>Reload file from disk automatically if it is changed outside</source>\n        <translation>当发生外部修改时，自动从磁盘重新加载文件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"626\"/>\n        <source>Copy Path</source>\n        <translation>复制路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"632\"/>\n        <source>Copied path: %1</source>\n        <translation>已复制路径: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"637\"/>\n        <source>Open Location</source>\n        <translation>打开路径</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"649\"/>\n        <source>Locate Node</source>\n        <translation>定位节点</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"662\"/>\n        <source>Pin To Quick Access</source>\n        <translation>固定到快速访问</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"680\"/>\n        <source>Move One Split Left</source>\n        <translation>向左移动一个拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"692\"/>\n        <source>Move One Split Right</source>\n        <translation>向右移动一个拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"704\"/>\n        <source>Move One Split Up</source>\n        <translation>向上移动一个拆分</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewsplit.cpp\" line=\"716\"/>\n        <source>Move One Split Down</source>\n        <translation>向下移动一个拆分</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewTagsDialog</name>\n    <message>\n        <location filename=\"../../../widgets/dialogs/viewtagsdialog.cpp\" line=\"32\"/>\n        <source>Name:</source>\n        <translation>名字:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/viewtagsdialog.cpp\" line=\"35\"/>\n        <source>Tags:</source>\n        <translation>标签:</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/dialogs/viewtagsdialog.cpp\" line=\"39\"/>\n        <source>Tags</source>\n        <translation>标签</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::ViewWindow</name>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/attachmentdragdropareaindicator.cpp\" line=\"38\"/>\n        <source>Attached %n file(s)</source>\n        <translation>\n            <numerusform>已添加 %n 文件为附件</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"215\"/>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"234\"/>\n        <source>[No Buffer]</source>\n        <translation>[无缓冲区]</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"658\"/>\n        <source>Save changes before closing note (%1)?</source>\n        <translation>关闭笔记(%1)前是否保存更改？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"659\"/>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"719\"/>\n        <source>Note path (%1).</source>\n        <translation>笔记路径(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"718\"/>\n        <source>Discard changes to note (%1)?</source>\n        <translation>放弃对笔记(%1)的更改？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"799\"/>\n        <source>Found backup file (%1) of file (%2). Do you want to recover from backup file?</source>\n        <translation>发现文件(%2)的备份文件(%1)。是否要从备份文件中恢复？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"800\"/>\n        <source>&apos;Yes&apos; to recover from backup file, &apos;No&apos; to discard it, and &apos;Cancel&apos; to exit.</source>\n        <translation>“是”以从备份文件中恢复，“否”以放弃该备份文件，“取消”以退出。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"801\"/>\n        <source>It may be caused by crash while editing this file before.\n\nFile last modified time: %1\nBackup file last modified time: %2</source>\n        <translation>可能是由于此前编辑该文件时发生崩溃。\n\n文件最后修改时间: %1\n备份文件最后修改时间: %2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"830\"/>\n        <source>Drag And Drop Files To Attach</source>\n        <translation>拖拽文件以添加为附件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"895\"/>\n        <source>File is missing on disk (%1).</source>\n        <translation>文件在磁盘中丢失(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"896\"/>\n        <source>Do you want to force to save the buffer to the file?</source>\n        <translation>是否强制保存缓冲区内容到文件？</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"897\"/>\n        <source>The file may be deleted from outside. Please choose to save the buffer to a new file or just discard it.</source>\n        <translation>该文件可能已经被删除。请选择将缓冲区的内容保存为新文件或者放弃缓冲区。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"919\"/>\n        <source>File is changed from outside (%1).</source>\n        <translation>文件被更改(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"920\"/>\n        <source>Do you want to save the buffer to the file to override, or discard the buffer?</source>\n        <translation>是否保存缓冲区覆盖到文件，或者放弃缓冲区？</translation>\n    </message>\n    <message>\n        <source>Pattern not found: %1%2</source>\n        <translation type=\"vanished\">无法找到模式: %1%2</translation>\n    </message>\n    <message>\n        <source> [+]</source>\n        <translation type=\"vanished\"> [+]</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1351\"/>\n        <source>Local</source>\n        <translation>本地</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1393\"/>\n        <source>View Mode Not Supported</source>\n        <translation>不支持查看模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"921\"/>\n        <source>The file is changed from outside. Please choose to save the buffer to the file or just discard the buffer and reload the file.</source>\n        <translation>该文件已经被更改。请选择保存缓冲区到该文件或者放弃缓冲区并重新加载文件。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"969\"/>\n        <source>This is a read-only note (%1), on which modification is not allowed.</source>\n        <translation>这是一个只读笔记(%1)，不支持修改。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"970\"/>\n        <source>Please save your changes to another note.</source>\n        <translation>请保存更改到另一个笔记。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"978\"/>\n        <source>Failed to save note (%1).</source>\n        <translation>无法保存笔记(%1)。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"979\"/>\n        <source>Please check the file (%1) and try it again.</source>\n        <translation>请检查文件(%1)并重试。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"980\"/>\n        <source>Maybe the file is occupied by another service temporarily.</source>\n        <translation>可能该文件正在被第三方应用临时占用。</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1077\"/>\n        <source>Zoomed: %1%</source>\n        <translation>缩放: %1%</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1082\"/>\n        <source>Zoomed: %1%2</source>\n        <translation>缩放: %1%2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1224\"/>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1233\"/>\n        <source>Pattern not found: %1</source>\n        <translation>无法找到模式: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1226\"/>\n        <source>Match found: %1/%2</source>\n        <translation>找到匹配: %1/%2</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../../../widgets/viewwindow.cpp\" line=\"1235\"/>\n        <source>Replaced %n match(es)</source>\n        <translation>\n            <numerusform>替换 %n 处匹配</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"95\"/>\n        <source>Save</source>\n        <translation>保存</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"102\"/>\n        <source>Edit</source>\n        <translation>编辑</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"104\"/>\n        <source>Read</source>\n        <translation>阅读</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"106\"/>\n        <source>Discard</source>\n        <translation>放弃</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"125\"/>\n        <source>View Mode</source>\n        <translation>查看模式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"139\"/>\n        <source>Heading</source>\n        <translation>标题</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"148\"/>\n        <source>Heading 1</source>\n        <translation>标题1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"155\"/>\n        <source>Heading 2</source>\n        <translation>标题2</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"162\"/>\n        <source>Heading 3</source>\n        <translation>标题3</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"169\"/>\n        <source>Heading 4</source>\n        <translation>标题4</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"176\"/>\n        <source>Heading 5</source>\n        <translation>标题5</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"183\"/>\n        <source>Heading 6</source>\n        <translation>标题6</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"190\"/>\n        <source>Clear</source>\n        <translation>清空</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"203\"/>\n        <source>Bold</source>\n        <translation>粗体</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"209\"/>\n        <source>Italic</source>\n        <translation>斜体</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"215\"/>\n        <source>Strikethrough</source>\n        <translation>删除线</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"221\"/>\n        <source>Unordered List</source>\n        <translation>无序列表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"227\"/>\n        <source>Ordered List</source>\n        <translation>有序列表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"233\"/>\n        <source>Todo List</source>\n        <translation>待办列表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"239\"/>\n        <source>Checked Todo List</source>\n        <translation>已完成待办列表</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"245\"/>\n        <source>Code</source>\n        <translation>代码</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"251\"/>\n        <source>Code Block</source>\n        <translation>代码块</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"257\"/>\n        <source>Math</source>\n        <translation>数学公式</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"263\"/>\n        <source>Math Block</source>\n        <translation>数学公式块</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"269\"/>\n        <source>Quote</source>\n        <translation>引用块</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"275\"/>\n        <source>Link</source>\n        <translation>链接</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"281\"/>\n        <source>Image</source>\n        <translation>图片</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"287\"/>\n        <source>Table</source>\n        <translation>表格</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"293\"/>\n        <source>Mark</source>\n        <translation>标记</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"300\"/>\n        <source>Attachments</source>\n        <translation>附件</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"317\"/>\n        <source>Tags</source>\n        <translation>标签</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"334\"/>\n        <source>Outline</source>\n        <translation>大纲</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"351\"/>\n        <source>Find And Replace</source>\n        <translation>查找替换</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"359\"/>\n        <source>Section Number</source>\n        <translation>小节序号</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"369\"/>\n        <source>Follow Configuration</source>\n        <translation>跟随配置</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"375\"/>\n        <source>Enabled</source>\n        <translation>启用</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"380\"/>\n        <source>Disabled</source>\n        <translation>禁用</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"392\"/>\n        <source>Toggle In-Place Preview</source>\n        <translation>启用/关闭原地预览</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"401\"/>\n        <source>Image Host</source>\n        <translation>图床</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"415\"/>\n        <source>Debug</source>\n        <translation>调试</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"422\"/>\n        <source>Print</source>\n        <translation>打印</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/viewwindowtoolbarhelper.cpp\" line=\"430\"/>\n        <source>Word Count</source>\n        <translation>字词计数</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"238\"/>\n        <source>Snippet applied: %1</source>\n        <translation>片段已应用: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"265\"/>\n        <source>Snippet (%1) not found</source>\n        <translation>无法找到片段(%1)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"292\"/>\n        <source>Snippet not available</source>\n        <translation>没有可用片段</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/textviewwindowhelper.h\" line=\"305\"/>\n        <source>Select Snippet</source>\n        <translation>选择片段</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::WebViewExporter</name>\n    <message>\n        <location filename=\"../../../export/webviewexporter.cpp\" line=\"355\"/>\n        <source>Table of Contents</source>\n        <translation>目录</translation>\n    </message>\n    <message>\n        <location filename=\"../../../export/webviewexporter.cpp\" line=\"590\"/>\n        <source>Copy output file (%1) to (%2).</source>\n        <translation>复制输出文件(%1)为(%2)。</translation>\n    </message>\n</context>\n<context>\n    <name>vnotex::WordCountPanel</name>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"17\"/>\n        <source>Selection Area</source>\n        <translation>选择区域</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"24\"/>\n        <source>Words</source>\n        <translation>词</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"28\"/>\n        <source>Characters (no spaces)</source>\n        <translation>字(无空格)</translation>\n    </message>\n    <message>\n        <location filename=\"../../../widgets/wordcountpopup.cpp\" line=\"32\"/>\n        <source>Characters (with spaces)</source>\n        <translation>字(有空格)</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "src/data/core/vnote.desktop",
    "content": "[Desktop Entry]\nType=Application\nName=VNote\nName[zh]=VNote笔记\nGenericName=Note-taking Application\nGenericName[zh]=笔记软件\nComment=A pleasant note-taking platform\nComment[zh]=一个舒适的笔记平台\nIcon=vnote\nTerminal=false\nExec=vnote %F\nMimeType=text/markdown;\nCategories=Utility\n"
  },
  {
    "path": "src/data/core/vnotex.json",
    "content": "{\n    \"//comment\" : \"This is the default configuration file of VNoteX. User should modify the one in user configuration folder instead of this.\",\n    \"metadata\" : {\n        \"//comment\": \"When releasing new version, please go through the following configs to check if override is needed.\",\n        \"//Comment\": \"markdown_editor#override_viewer_resource\",\n        \"version\" : \"3.20.1\"\n    },\n    \"core\" : {\n        \"theme\" : \"pure\",\n        \"locale\" : \"\",\n        \"shortcuts\" : {\n            \"FullScreen\" : \"F11\",\n            \"StayOnTop\" : \"F10\",\n            \"ExpandContentArea\" : \"Ctrl+G, E\",\n            \"Settings\" : \"Ctrl+Alt+P\",\n            \"NewNote\" : \"Ctrl+Alt+N\",\n            \"NewQuickNote\" : \"Ctrl+Alt+Q\",\n            \"NewFolder\" : \"Ctrl+Alt+S\",\n            \"CloseTab\" : \"Ctrl+G, X\",\n            \"CloseAllTabs\": \"\",\n            \"CloseOtherTabs\" : \"\",\n            \"CloseTabsToTheLeft\" : \"\",\n            \"CloseTabsToTheRight\" : \"\",\n            \"NavigationDock\" : \"Ctrl+G, A\",\n            \"OutlineDock\" : \"Ctrl+G, U\",\n            \"SearchDock\" : \"\",\n            \"SnippetDock\" : \"Ctrl+G, S\",\n            \"LocationListDock\" : \"Ctrl+G, C\",\n            \"HistoryDock\" : \"\",\n            \"WindowsDock\" : \"\",\n            \"TagDock\" : \"\",\n            \"Search\" : \"Ctrl+Alt+F\",\n            \"NavigationMode\" : \"Ctrl+G, W\",\n            \"LocateNode\" : \"Ctrl+G, D\",\n            \"VerticalSplit\" : \"Ctrl+G, \\\\\",\n            \"HorizontalSplit\" : \"Ctrl+G, -\",\n            \"MaximizeSplit\" : \"Ctrl+G, Shift+\\\\\",\n            \"DistributeSplits\" : \"Ctrl+G, =\",\n            \"RemoveSplitAndWorkspace\" : \"Ctrl+G, R\",\n            \"NewWorkspace\" : \"\",\n            \"Export\" : \"Ctrl+G, T\",\n            \"Quit\" : \"Ctrl+Q\",\n            \"FlashPage\" : \"Ctrl+Alt+L\",\n            \"QuickAccess\" : \"Ctrl+Alt+I\",\n            \"ActivateTab1\" : \"Ctrl+G, 1\",\n            \"ActivateTab2\" : \"Ctrl+G, 2\",\n            \"ActivateTab3\" : \"Ctrl+G, 3\",\n            \"ActivateTab4\" : \"Ctrl+G, 4\",\n            \"ActivateTab5\" : \"Ctrl+G, 5\",\n            \"ActivateTab6\" : \"Ctrl+G, 6\",\n            \"ActivateTab7\" : \"Ctrl+G, 7\",\n            \"ActivateTab8\" : \"Ctrl+G, 8\",\n            \"ActivateTab9\" : \"Ctrl+G, 9\",\n            \"AlternateTab\" : \"Ctrl+G, 0\",\n            \"ActivateNextTab\" : \"Ctrl+G, N\",\n            \"ActivatePreviousTab\" : \"Ctrl+G, P\",\n            \"FocusContentArea\" : \"Ctrl+G, Y\",\n            \"OpenWithDefaultProgram\" : \"F9\",\n            \"OneSplitLeft\" : \"Ctrl+G, H\",\n            \"OneSplitDown\" : \"Ctrl+G, J\",\n            \"OneSplitUp\" : \"Ctrl+G, K\",\n            \"OneSplitRight\" : \"Ctrl+G, L\",\n            \"MoveOneSplitLeft\" : \"Ctrl+G, Shift+H\",\n            \"MoveOneSplitDown\" : \"Ctrl+G, Shift+J\",\n            \"MoveOneSplitUp\" : \"Ctrl+G, Shift+K\",\n            \"MoveOneSplitRight\" : \"Ctrl+G, Shift+L\",\n            \"OpenLastClosedFile\" : \"Ctrl+Shift+T\",\n            \"UnitedEntry\" : \"Ctrl+G, G\",\n            \"Copy\" : \"Ctrl+C\",\n            \"Cut\" : \"Ctrl+X\",\n            \"Paste\" : \"Ctrl+V\",\n            \"Properties\" : \"F2\",\n            \"Global_WakeUp\" : \"Ctrl+Alt+U\"\n        },\n        \"file_type_suffixes\" : [\n            {\n                \"name\" : \"Markdown\",\n                \"suffixes\" : [\n                    \"md\",\n                    \"mkd\",\n                    \"rmd\",\n                    \"markdown\"\n                ]\n            },\n            {\n                \"name\" : \"Text\",\n                \"suffixes\" : [\n                    \"txt\",\n                    \"text\",\n                    \"log\"\n                ]\n            },\n            {\n                \"name\" : \"PDF\",\n                \"suffixes\" : [\n                    \"pdf\"\n                ]\n            },\n            {\n                \"name\" : \"MindMap\",\n                \"suffixes\" : [\n                    \"emind\"\n                ]\n            }\n        ],\n        \"shortcut_leader_key\" : \"Ctrl+G\",\n        \"toolbar_icon_size\" : 18,\n        \"docks_tabbar_icon_size\" : 20,\n        \"note_management\" : {\n            \"external_node\" : {\n                \"//comment\" : \"Wildcard patterns of files and folders to exclude as external files\",\n                \"exclude_patterns\" : [\n                    \".gitignore\",\n                    \".git\"\n                ]\n            }\n        },\n        \"recover_last_session_on_start\" : true,\n        \"check_for_updates_on_start\" : true,\n        \"//comment\" : \"Max count of the history items for each notebook and session config\",\n        \"history_max_count\" : 100,\n        \"per_notebook_history\" : false,\n        \"//comment\" : \"Line ending policy for config files, platform/lf/crlf/cr\",\n        \"line_ending\" : \"lf\",\n        \"//comment\" : \"read/edit\",\n        \"default_open_mode\" : \"read\",\n        \"united_entry\" : {\n            \"alias\" : [\n                {\n                    \"name\" : \"q\",\n                    \"description\" : \"Search for folders/files by name in all notebooks\",\n                    \"value\" : \"find --scope all_notebook --object name --target file --target folder\"\n                },\n                {\n                    \"name\" : \"a\",\n                    \"description\" : \"Search for files by content in all notebooks\",\n                    \"value\" : \"find --scope all_notebook --object content --target file\"\n                },\n                {\n                    \"name\" : \"z\",\n                    \"description\" : \"Search for files by tag in all notebooks\",\n                    \"value\" : \"find --scope all_notebook --object tag --target file\"\n                },\n                {\n                    \"name\" : \"w\",\n                    \"description\" : \"Search for notebooks by name in all notebooks\",\n                    \"value\" : \"find --scope all_notebook --object name --target notebook\"\n                },\n                {\n                    \"name\" : \"e\",\n                    \"description\" : \"Search for folders/files by name in current notebook\",\n                    \"value\" : \"find --scope notebook --object name --target file --target folder\"\n                },\n                {\n                    \"name\" : \"d\",\n                    \"description\" : \"Search for files by content in current notebook\",\n                    \"value\" : \"find --scope notebook --object content --target file\"\n                },\n                {\n                    \"name\" : \"c\",\n                    \"description\" : \"Search for files by tag in current notebook\",\n                    \"value\" : \"find --scope notebook --object tag --target file\"\n                },\n                {\n                    \"name\" : \"r\",\n                    \"description\" : \"Search for folders/files by name in current folder\",\n                    \"value\" : \"find --scope folder --object name --target file --target folder\"\n                },\n                {\n                    \"name\" : \"f\",\n                    \"description\" : \"Search for files by content in current folder\",\n                    \"value\" : \"find --scope folder --object content --target file\"\n                },\n                {\n                    \"name\" : \"v\",\n                    \"description\" : \"Search for files by tag in current folder\",\n                    \"value\" : \"find --scope folder --object tag --target file\"\n                },\n                {\n                    \"name\" : \"t\",\n                    \"description\" : \"Search for files by name in buffers\",\n                    \"value\" : \"find --scope buffer --object name --target file\"\n                },\n                {\n                    \"name\" : \"g\",\n                    \"description\" : \"Search for files by content in buffers\",\n                    \"value\" : \"find --scope buffer --object content --target file\"\n                }\n            ]\n        }\n    },\n    \"editor\" : {\n        \"core\": {\n            \"toolbar_icon_size\" : 16,\n            \"//comment\" : \"none/autosave/backupfile\",\n            \"auto_save_policy\" : \"autosave\",\n            \"backup_file_extension\" : \"vswp\",\n            \"//comment\" : \"Where to put the backup file, related to the content file\",\n            \"backup_file_directory\" : \".\",\n            \"shortcuts\" : {\n                \"Save\" : \"Ctrl+S\",\n                \"EditRead\" : \"Ctrl+T\",\n                \"Discard\" : \"Ctrl+G, Q\",\n                \"TypeHeading1\" : \"Ctrl+1\",\n                \"TypeHeading2\" : \"Ctrl+2\",\n                \"TypeHeading3\" : \"Ctrl+3\",\n                \"TypeHeading4\" : \"Ctrl+4\",\n                \"TypeHeading5\" : \"Ctrl+5\",\n                \"TypeHeading6\" : \"Ctrl+6\",\n                \"TypeHeadingNone\" : \"Ctrl+7\",\n                \"TypeBold\" : \"Ctrl+B\",\n                \"TypeItalic\" : \"Ctrl+I\",\n                \"TypeStrikethrough\" : \"\",\n                \"TypeUnorderedList\" : \"Ctrl+8\",\n                \"TypeOrderedList\" : \"Ctrl+9\",\n                \"TypeTodoList\" : \"\",\n                \"TypeCheckedTodoList\" : \"\",\n                \"TypeCode\" : \"Ctrl+;\",\n                \"TypeCodeBlock\" : \"Ctrl+'\",\n                \"TypeMath\" : \"Ctrl+.\",\n                \"TypeMathBlock\" : \"Ctrl+G, .\",\n                \"TypeQuote\" : \"\",\n                \"TypeLink\" : \"Ctrl+,\",\n                \"TypeImage\" : \"\",\n                \"TypeTable\" : \"Ctrl+/\",\n                \"TypeMark\" : \"Ctrl+G, M\",\n                \"Outline\" : \"Ctrl+G, O\",\n                \"AltPaste\" : \"Ctrl+Shift+V\",\n                \"FindAndReplace\" : \"Ctrl+F\",\n                \"FindNext\" : \"F3\",\n                \"FindPrevious\" : \"Shift+F3\",\n                \"ApplySnippet\" : \"Ctrl+G, I\",\n                \"Tag\" : \"Ctrl+G, B\",\n                \"Attachment\" : \"\",\n                \"AlternateViewMode\" : \"Ctrl+G, V\",\n                \"WordCount\" : \"\",\n                \"Debug\" : \"F12\",\n                \"Print\" : \"\",\n                \"ClearHighlights\" : \"Ctrl+G, Space\",\n                \"ParseToMarkdownAndPaste\" : \"Ctrl+G, Ctrl+P\"\n            },\n            \"spell_check_auto_detect_language\" : false,\n            \"spell_check_default_dictionary\" : \"en_US\",\n            \"//comment\" : \"platform/file/lf/crlf/cr\",\n            \"line_ending\" : \"lf\"\n        },\n        \"text_editor\" : {\n            \"theme\" : \"\",\n            \"//comment\" : \"none/absolute/relative\",\n            \"line_number\" : \"absolute\",\n            \"text_folding\" : true,\n            \"//comment\" : \"normal/vi\",\n            \"input_mode\" : \"normal\",\n            \"//comment\" : \"never/always/bottom\",\n            \"center_cursor\" : \"never\",\n            \"//comment\" : \"none/word/anywhere/word_anywhere\",\n            \"wrap_mode\": \"word_anywhere\",\n            \"expand_tab\": true,\n            \"tab_stop_width\": 4,\n            \"highlight_whitespace\": false,\n            \"//comment\" : \"Positive to zoom in and negative to zoom out\",\n            \"zoom_delta\": 0,\n            \"spell_check\": false\n        },\n        \"markdown_editor\" : {\n            \"override_viewer_resource\" : true,\n            \"viewer_resource\" : {\n                \"template\" : \"web/markdown-viewer-template.html\",\n                \"resources\" : [\n                    {\n                        \"name\" : \"global_styles\",\n                        \"enabled\" : true,\n                        \"styles\" : [\n                            \"web/css/user.css\",\n                            \"web/css/globalstyles.css\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"built_in\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/qwebchannel.js\",\n                            \"web/js/eventemitter.js\",\n                            \"web/js/vxcore.js\",\n                            \"web/js/utils.js\",\n                            \"web/js/nodelinemapper.js\",\n                            \"web/js/lrucache.js\",\n                            \"web/js/graphcache.js\",\n                            \"web/js/graphpreviewer.js\",\n                            \"web/js/markdownviewercore.js\",\n                            \"web/js/vxworker.js\",\n                            \"web/js/graphrenderer.js\",\n                            \"web/js/svg-to-image.js\",\n                            \"web/js/computed-style-to-inline-style.js\",\n                            \"web/js/imageviewer.js\",\n                            \"web/js/easyaccess.js\",\n                            \"web/js/crosscopy.js\"\n                        ],\n                        \"styles\" : [\n                            \"web/css/imageviewer.css\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"markdown_viewer\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/markdownviewer.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"markdown_it\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/markdown-it/markdown-it.min.js\",\n                            \"web/js/markdown-it/markdown-it-container.min.js\",\n                            \"web/js/markdown-it/markdown-it-emoji.min.js\",\n                            \"web/js/markdown-it/markdown-it-footnote.min.js\",\n                            \"web/js/markdown-it/markdown-it-front-matter.js\",\n                            \"web/js/markdown-it/markdown-it-imsize.min.js\",\n                            \"web/js/markdown-it/markdown-it-sub.min.js\",\n                            \"web/js/markdown-it/markdown-it-sup.min.js\",\n                            \"web/js/markdown-it/markdown-it-task-lists.js\",\n                            \"web/js/markdown-it/markdown-it-texmath.js\",\n                            \"web/js/markdown-it/markdown-it-inject-linenumbers.js\",\n                            \"web/js/markdown-it/markdownItAnchor.umd.js\",\n                            \"web/js/markdown-it/markdownItTocDoneRight.umd.js\",\n                            \"web/js/markdown-it/markdown-it-implicit-figure.js\",\n                            \"web/js/markdown-it/markdown-it-mark.min.js\",\n                            \"web/js/markdownit.js\"\n                        ],\n                        \"styles\" : [\n                            \"web/css/markdownit.css\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"prism\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/prism/clipboard.min.js\",\n                            \"web/js/prism.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"mermaid\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/mermaid.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"flowchart.js\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/flowchart.js/raphael.min.js\",\n                            \"web/js/flowchart.js/flowchart.min.js\",\n                            \"web/js/flowchartjs.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"wavedrom\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/wavedrom.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"mathjax\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/mathjax.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"plantuml\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/plantuml.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"graphviz\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/graphviz.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"turndown\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/turndown/turndown.js\",\n                            \"web/js/turndown/turndown-plugin-gfm.js\",\n                            \"web/js/turndown.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"mark.js\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/mark.js/mark.min.js\",\n                            \"web/js/markjs.js\"\n                        ]\n                    }\n                ]\n            },\n            \"export_resource\" : {\n                \"template\" : \"web/markdown-export-template.html\",\n                \"resources\" : [\n                    {\n                        \"name\" : \"global_styles\",\n                        \"enabled\" : true,\n                        \"styles\" : [\n                            \"web/css/exportglobalstyles.css\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"outline\",\n                        \"enabled\" : true,\n                        \"styles\" : [\n                            \"web/css/outline.css\"\n                        ],\n                        \"scripts\" : [\n                            \"web/js/outline.js\"\n                        ]\n                    }\n                ]\n            },\n            \"//comment\" : \"Whether use javascript or external program to render PlantUML\",\n            \"web_plantuml\" : true,\n            \"//commnet\" : \"Local PlantUML JAR file to render PlantUML\",\n            \"plantuml_jar\" : \"\",\n            \"//commnet\" : \"Command to render PlantUML via stdin and stdout (overrides plantuml_jar)\",\n            \"//commnet\" : \"- %1: the format to render in\",\n            \"plantuml_command\" : \"\",\n            \"//commnet\" : \"PlantUml Web service to use\",\n            \"plantuml_web_service\" : \"\",\n            \"//comment\" : \"Whether use javascript or external program to render Graphviz\",\n            \"web_graphviz\" : true,\n            \"//commnet\" : \"Local Graphviz executable file to render Graphviz\",\n            \"graphviz_exe\" : \"\",\n            \"//commnet\" : \"MathJax script to use\",\n            \"mathjax_script\" : \"\",\n            \"//comment\" : \"Whether prepend a dot at front in relative link like images\",\n            \"prepend_dot_in_relative_link\" : false,\n            \"//comment\" : \"Whether ask for user confirmation before clearing obsolete images\",\n            \"confirm_before_clear_obsolete_images\" : true,\n            \"//comment\" : \"Whether insert the file name as title on new file\",\n            \"insert_file_name_as_title\" : true,\n            \"//comment\" : \"none/read/edit\",\n            \"section_number\" : \"none\",\n            \"//comment\" : \"Base level to start section numbering\",\n            \"section_number_base_level\" : 2,\n            \"//comment\" : \"Style of the section number in edit mode\",\n            \"//comment\" : \"digdotdigdot/digdotdig\",\n            \"section_number_style\" : \"digdotdigdot\",\n            \"//comment\" : \"Whether enable image width constraint\",\n            \"constrain_image_width\" : true,\n            \"image_align_center\" : false,\n            \"//comment\" : \"Whether enable in-place preview width constraint\",\n            \"constrain_inplace_preview_width\" : false,\n            \"//comment\" : \"Zoom factor in read mode\",\n            \"zoom_factor_in_read_mode\" : 1,\n            \"//comment\" : \"Whether fetch images to local in Parse To Markdown And Paste\",\n            \"fetch_images_in_parse_and_paste\" : true,\n            \"//comment\" : \"Whether protect from Cross-Site Scripting attack\",\n            \"protect_from_xss\" : true,\n            \"//comment\" : \"Whether allow HTML tags in source\",\n            \"html_tag\" : true,\n            \"//comment\" : \"Whether auto break a line with '\\\\n'\",\n            \"auto_break\" : true,\n            \"//comment\" : \"Whether convert URL-like text to links\",\n            \"linkify\" : true,\n            \"//comment\" : \"Whether add indentation to the first line of paragraph\",\n            \"indent_first_line\" : false,\n            \"//comment\" : \"Whether add line number to fenced code block in read mode\",\n            \"code_block_line_number\" : true,\n            \"//comment\" : \"Whether enable smart table (formatting)\",\n            \"smart_table\" : true,\n            \"//comment\" : \"Time interval (milliseconds) to do smart table formatting\",\n            \"smart_table_interval\" : 1000,\n            \"spell_check\" : false,\n            \"editor_overridden_font_family\" : \"\",\n            \"//comment\" : \"Sources to enable inplace preview, separated by ;\",\n            \"//comment\" : \"imagelink/codeblock/math\",\n            \"inplace_preview_sources\" : \"imagelink;codeblock;math\",\n            \"//comment\" : \"view mode of edit mode: editonly/editpreview\",\n            \"edit_view_mode\" : \"editonly\",\n            \"rich_paste_by_default\" : true\n        },\n        \"pdf_viewer\" : {\n            \"override_viewer_resource\" : true,\n            \"viewer_resource\" : {\n                \"template\" : \"web/pdf.js/web/pdf-viewer-template.html\",\n                \"resources\" : [\n                    {\n                        \"name\" : \"built_in\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/qwebchannel.js\",\n                            \"web/js/eventemitter.js\",\n                            \"web/js/utils.js\",\n                            \"web/js/vxcore.js\",\n                            \"web/pdf.js/pdfviewercore.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"pdf.js\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/pdf.js/build/pdf.js\",\n                            \"web/pdf.js/web/viewer.js\"\n                        ],\n                        \"styles\" : [\n                            \"web/pdf.js/web/viewer.css\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"pdf_viewer\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/pdf.js/pdfviewer.js\"\n                        ],\n                        \"styles\" : [\n                            \"web/pdf.js/pdfviewer.css\"\n                        ]\n                    }\n                ]\n            }\n        },\n        \"mindmap_editor\" : {\n            \"override_editor_resource\" : true,\n            \"editor_resource\" : {\n                \"template\" : \"web/mindmap-editor-template.html\",\n                \"resources\" : [\n                    {\n                        \"name\" : \"global_styles\",\n                        \"enabled\" : true,\n                        \"styles\" : [\n                            \"web/css/globalstyles.css\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"built_in\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/qwebchannel.js\",\n                            \"web/js/eventemitter.js\",\n                            \"web/js/utils.js\",\n                            \"web/js/vxcore.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"mindmap_dependencies\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/mindmap/lib/mind-elixir/MindElixir.js\",\n                            \"web/js/mindmap/core/mindmap-core.js\",\n                            \"web/js/mindmap/features/outline/outline.js\",\n                            \"web/js/mindmap/features/link-handler/link-handler.js\"\n                        ]\n                    },\n                    {\n                        \"name\" : \"mindmap_editor\",\n                        \"enabled\" : true,\n                        \"scripts\" : [\n                            \"web/js/mindmapeditor.js\"\n                        ]\n                    }\n                ]\n            }\n        },\n        \"image_host\" : {\n            \"hosts\" : [\n            ],\n            \"default_image_host\" : \"\",\n            \"clear_obsolete_image\" : false\n        },\n        \"vi\" : {\n            \"control_c_to_copy\" : false\n        }\n    },\n    \"widget\" : {\n        \"//comment\" : \"Level of the heading in outline that should expand to automatically (1-6)\",\n        \"outline_auto_expanded_level\" : 6,\n        \"//comment\" : \"Add section number in the outline viewer\",\n        \"outline_section_number_enabled\" : false,\n        \"//comment\" : \"Default find options in FindAndReplace\",\n        \"find_and_replace_options\" : 16,\n        \"//comment\" : \"View order of the notebook selector (enum ViewOrder)\",\n        \"notebook_selector_view_order\" : 0,\n        \"//comment\" : \"View order of the node explorer (enum ViewOrder)\",\n        \"node_explorer_view_order\" : 0,\n        \"node_explorer_external_files_visible\" : true,\n        \"node_explorer_auto_import_external_files_enabled\" : true,\n        \"//comment\" : \"Whether close the file before opening it with external program\",\n        \"node_explorer_close_before_open_with_enabled\" : true,\n        \"//comment\" : \"0 - combined/1 - separate_single/2 - separate_double\",\n        \"node_explorer_explore_mode\" : 0,\n        \"search_panel_advanced_settings_visible\" : true,\n        \"//comment\" : \"Docks to ignore when expanding content area of main window\",\n        \"main_window_keep_docks_expanding_content_area\": [\"OutlineDock.vnotex\", \"WindowsDock.vnotex\"],\n        \"snippet_panel_builtin_snippets_visible\" : true,\n        \"tag_explorer_two_columns_enabled\" : false,\n        \"new_note_default_file_type\" : 0,\n        \"united_entry_expand_all\" : false\n    }\n}\n"
  },
  {
    "path": "src/data/extra/dicts/en_US.aff",
    "content": "SET UTF-8\nTRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'\nICONV 1\nICONV ’ '\nNOSUGGEST !\n\n# ordinal numbers\nCOMPOUNDMIN 1\n# only in compounds: 1th, 2th, 3th\nONLYINCOMPOUND c\n# compound rules:\n# 1. [0-9]*1[0-9]th (10th, 11th, 12th, 56714th, etc.)\n# 2. [0-9]*[02-9](1st|2nd|3rd|[4-9]th) (21st, 22nd, 123rd, 1234th, etc.)\nCOMPOUNDRULE 2\nCOMPOUNDRULE n*1t\nCOMPOUNDRULE n*mp\nWORDCHARS 0123456789\n\nPFX A Y 1\nPFX A   0     re         .\n\nPFX I Y 1\nPFX I   0     in         .\n\nPFX U Y 1\nPFX U   0     un         .\n\nPFX C Y 1\nPFX C   0     de          .\n\nPFX E Y 1\nPFX E   0     dis         .\n\nPFX F Y 1\nPFX F   0     con         .\n\nPFX K Y 1\nPFX K   0     pro         .\n\nSFX V N 2\nSFX V   e     ive        e\nSFX V   0     ive        [^e]\n\nSFX N Y 3\nSFX N   e     ion        e\nSFX N   y     ication    y \nSFX N   0     en         [^ey] \n\nSFX X Y 3\nSFX X   e     ions       e\nSFX X   y     ications   y\nSFX X   0     ens        [^ey]\n\nSFX H N 2\nSFX H   y     ieth       y\nSFX H   0     th         [^y] \n\nSFX Y Y 1\nSFX Y   0     ly         .\n\nSFX G Y 2\nSFX G   e     ing        e\nSFX G   0     ing        [^e] \n\nSFX J Y 2\nSFX J   e     ings       e\nSFX J   0     ings       [^e]\n\nSFX D Y 4\nSFX D   0     d          e\nSFX D   y     ied        [^aeiou]y\nSFX D   0     ed         [^ey]\nSFX D   0     ed         [aeiou]y\n\nSFX T N 4\nSFX T   0     st         e\nSFX T   y     iest       [^aeiou]y\nSFX T   0     est        [aeiou]y\nSFX T   0     est        [^ey]\n\nSFX R Y 4\nSFX R   0     r          e\nSFX R   y     ier        [^aeiou]y\nSFX R   0     er         [aeiou]y\nSFX R   0     er         [^ey]\n\nSFX Z Y 4\nSFX Z   0     rs         e\nSFX Z   y     iers       [^aeiou]y\nSFX Z   0     ers        [aeiou]y\nSFX Z   0     ers        [^ey]\n\nSFX S Y 4\nSFX S   y     ies        [^aeiou]y\nSFX S   0     s          [aeiou]y\nSFX S   0     es         [sxzh]\nSFX S   0     s          [^sxzhy]\n\nSFX P Y 3\nSFX P   y     iness      [^aeiou]y\nSFX P   0     ness       [aeiou]y\nSFX P   0     ness       [^y]\n\nSFX M Y 1\nSFX M   0     's         .\n\nSFX B Y 3\nSFX B   0     able       [^aeiou]\nSFX B   0     able       ee\nSFX B   e     able       [^aeiou]e\n\nSFX L Y 1\nSFX L   0     ment       .\n\nREP 90\nREP a ei\nREP ei a\nREP a ey\nREP ey a\nREP ai ie\nREP ie ai\nREP alot a_lot\nREP are air\nREP are ear\nREP are eir\nREP air are\nREP air ere\nREP ere air\nREP ere ear\nREP ere eir\nREP ear are\nREP ear air\nREP ear ere\nREP eir are\nREP eir ere\nREP ch te\nREP te ch\nREP ch ti\nREP ti ch\nREP ch tu\nREP tu ch\nREP ch s\nREP s ch\nREP ch k\nREP k ch\nREP f ph\nREP ph f\nREP gh f\nREP f gh\nREP i igh\nREP igh i\nREP i uy\nREP uy i\nREP i ee\nREP ee i\nREP j di\nREP di j\nREP j gg\nREP gg j\nREP j ge\nREP ge j\nREP s ti\nREP ti s\nREP s ci\nREP ci s\nREP k cc\nREP cc k\nREP k qu\nREP qu k\nREP kw qu\nREP o eau\nREP eau o\nREP o ew\nREP ew o\nREP oo ew\nREP ew oo\nREP ew ui\nREP ui ew\nREP oo ui\nREP ui oo\nREP ew u\nREP u ew\nREP oo u\nREP u oo\nREP u oe\nREP oe u\nREP u ieu\nREP ieu u\nREP ue ew\nREP ew ue\nREP uff ough\nREP oo ieu\nREP ieu oo\nREP ier ear\nREP ear ier\nREP ear air\nREP air ear\nREP w qu\nREP qu w\nREP z ss\nREP ss z\nREP shun tion\nREP shun sion\nREP shun cion\nREP size cise\n"
  },
  {
    "path": "src/data/extra/dicts/en_US.dic",
    "content": "49524\n0/nm\n0th/pt\n1/n1\n1st/p\n1th/tc\n2/nm\n2nd/p\n2th/tc\n3/nm\n3rd/p\n3th/tc\n4/nm\n4th/pt\n5/nm\n5th/pt\n6/nm\n6th/pt\n7/nm\n7th/pt\n8/nm\n8th/pt\n9/nm\n9th/pt\nA/SM\nAA/M\nAAA\nAB/M\nABA\nABC/SM\nABM/SM\nABS\nAC/M\nACLU/M\nACT\nACTH/M\nAD/M\nADC\nADD\nADM\nADP/M\nAF\nAFAIK\nAFB\nAFC/M\nAFDC\nAFN\nAFT\nAI/SM\nAIDS/M\nAK\nAL\nAM/M\nAMA\nAMD/M\nANSI/S\nANZUS/M\nAOL/M\nAP/M\nAPB\nAPC\nAPI\nAPO\nAPR\nAR\nARC\nASAP\nASCII/SM\nASL/M\nASPCA\nATM/M\nATP/M\nATV\nAV\nAVI\nAWACS/M\nAWOL/M\nAWS/M\nAZ/M\nAZT/M\nAachen/M\nAaliyah/M\nAaron/M\nAbbas/M\nAbbasid/M\nAbbott/M\nAbby/M\nAbdul/M\nAbe/M\nAbel/M\nAbelard/M\nAbelson/M\nAberdeen/M\nAbernathy/M\nAbidjan/M\nAbigail/M\nAbilene/M\nAbner/M\nAborigine/MS\nAbraham/M\nAbram/MS\nAbrams/M\nAbsalom/M\nAbuja/M\nAbyssinia/M\nAbyssinian/M\nAc/M\nAcadia/M\nAcapulco/M\nAccenture/M\nAccra/M\nAcevedo/M\nAchaean/M\nAchebe/M\nAchernar/M\nAcheson/M\nAchilles/M\nAconcagua/M\nAcosta/M\nAcropolis\nAcrux/M\nActaeon/M\nActon/M\nActs/M\nAcuff/M\nAda/SM\nAdam/SM\nAdams/M\nAdan/M\nAdana/M\nAdar/M\nAddams/M\nAdderley/M\nAddie/M\nAddison/M\nAdela/M\nAdelaide/M\nAdele/M\nAdeline/M\nAden/M\nAdenauer/M\nAdhara/M\nAdidas/M\nAdirondack/SM\nAdirondacks/M\nAdkins/M\nAdler/M\nAdm\nAdmiralty\nAdolf/M\nAdolfo/M\nAdolph/M\nAdonis/MS\nAdrenalin/MS\nAdrian/M\nAdriana/M\nAdriatic/M\nAdrienne/M\nAdvent/MS\nAdventist/MS\nAdvil/M\nAegean/M\nAelfric/M\nAeneas/M\nAeneid/M\nAeolus/M\nAeroflot/M\nAeschylus/M\nAesculapius/M\nAesop/M\nAfghan/SM\nAfghani/M\nAfghanistan/M\nAfr\nAfrica/M\nAfrican/SM\nAfrikaans/M\nAfrikaner/SM\nAfro/SM\nAfrocentric\nAfrocentrism/M\nAg/M\nAgamemnon/M\nAgana\nAgassi/M\nAgassiz/M\nAgatha/M\nAggie/M\nAglaia/M\nAgnes/M\nAgnew/M\nAgni/M\nAgra/M\nAgricola/M\nAgrippa/M\nAgrippina/M\nAguadilla/M\nAguascalientes\nAguilar/M\nAguinaldo/M\nAguirre/M\nAgustin/M\nAhab/M\nAhmad/M\nAhmadabad/M\nAhmadinejad/M\nAhmed/M\nAhriman/M\nAida/M\nAiken/M\nAileen/M\nAimee/M\nAinu/M\nAiredale/MS\nAires/M\nAisha/M\nAjax/M\nAkbar/M\nAkhmatova/M\nAkihito/M\nAkita/M\nAkiva/M\nAkkad/M\nAkron/M\nAl/M\nAla/S\nAlabama/M\nAlabaman/MS\nAlabamian/SM\nAladdin/M\nAlamo/M\nAlamogordo/M\nAlan/M\nAlana/M\nAlar/M\nAlaric/M\nAlaska/M\nAlaskan/MS\nAlba/M\nAlbania/M\nAlbanian/MS\nAlbany/M\nAlbee/M\nAlberio/M\nAlbert/M\nAlberta/M\nAlbertan\nAlberto/M\nAlbigensian/M\nAlbion/M\nAlbireo/M\nAlbuquerque/M\nAlcatraz/M\nAlcestis/M\nAlcibiades/M\nAlcindor/M\nAlcmena/M\nAlcoa/M\nAlcott/M\nAlcuin/M\nAlcyone/M\nAldan/M\nAldebaran/M\nAlden/M\nAlderamin/M\nAldo/M\nAldrin/M\nAlec/M\nAleichem/M\nAlejandra/M\nAlejandro/M\nAlembert/M\nAleppo/M\nAleut/MS\nAleutian/SM\nAlex/M\nAlexander/MS\nAlexandra/M\nAlexandria/M\nAlexandrian\nAlexei/M\nAlexis/M\nAlfonso/M\nAlfonzo/M\nAlford/M\nAlfred/M\nAlfreda/M\nAlfredo/M\nAlgenib/M\nAlger/M\nAlgeria/M\nAlgerian/SM\nAlgieba/M\nAlgiers/M\nAlgol/M\nAlgonquian/SM\nAlgonquin/MS\nAlhambra/M\nAlhena/M\nAli/M\nAlice/M\nAlicia/M\nAlighieri/M\nAline/M\nAlioth/M\nAlisa/M\nAlisha/M\nAlison/M\nAlissa/M\nAlistair/M\nAlkaid/M\nAllah/M\nAllahabad/M\nAllan/M\nAlleghenies/M\nAllegheny/SM\nAllegra/M\nAllen/M\nAllende/M\nAllentown/M\nAllhallows/M\nAllie/MS\nAllison/M\nAllstate/M\nAllyson/M\nAlma/M\nAlmach/M\nAlmaty/M\nAlmighty/M\nAlmohad/M\nAlmoravid/M\nAlnilam/M\nAlnitak/M\nAlonzo/M\nAlpert/M\nAlphard/M\nAlphecca/M\nAlpheratz/M\nAlphonse/M\nAlphonso/M\nAlpine/M\nAlpo/M\nAlps/M\nAlsace/M\nAlsatian/SM\nAlsop/M\nAlston/M\nAlta/M\nAltaba/M\nAltai/M\nAltaic/M\nAltair/M\nAltamira/M\nAlthea/M\nAltiplano/M\nAltman/M\nAltoids/M\nAlton/M\nAltoona/M\nAludra/M\nAlva/M\nAlvarado/M\nAlvarez/M\nAlvaro/M\nAlvin/M\nAlyce/M\nAlyson/M\nAlyssa/M\nAlzheimer/M\nAm/MNR\nAmadeus/M\nAmado/M\nAmalia/M\nAmanda/M\nAmarillo/M\nAmaru/M\nAmaterasu/M\nAmati/M\nAmazon/SM\nAmazonian\nAmber/M\nAmelia/M\nAmen/M\nAmenhotep/M\nAmerasian/M\nAmerica/SM\nAmerican/MS\nAmericana/M\nAmericanism/MS\nAmericanization/MS\nAmericanize/GDS\nAmerind/SM\nAmerindian/MS\nAmes/M\nAmeslan/M\nAmgen/M\nAmharic/M\nAmherst/M\nAmie/M\nAmiga/M\nAmish/M\nAmman/M\nAmoco/M\nAmos/M\nAmparo/M\nAmpere/M\nAmritsar/M\nAmsterdam/M\nAmtrak/M\nAmundsen/M\nAmur/M\nAmway/M\nAmy/M\nAna/M\nAnabaptist/M\nAnabel/M\nAnacin/M\nAnacreon/M\nAnaheim/M\nAnalects/M\nAnanias/M\nAnasazi/M\nAnastasia/M\nAnatole/M\nAnatolia/M\nAnatolian/M\nAnaxagoras/M\nAnchorage/M\nAndalusia/M\nAndalusian/M\nAndaman/M\nAndean/M\nAndersen/M\nAnderson/M\nAndes/M\nAndorra/M\nAndorran/SM\nAndre/MS\nAndrea/M\nAndrei/M\nAndres/M\nAndretti/M\nAndrew/SM\nAndrews/M\nAndrianampoinimerina/M\nAndroid/M\nAndromache/M\nAndromeda/M\nAndropov/M\nAndy/M\nAngara/M\nAngel/M\nAngela/M\nAngeles/M\nAngelia/M\nAngelica/M\nAngelico/M\nAngelina/M\nAngeline/M\nAngelique/M\nAngelita/M\nAngelo/M\nAngelou/M\nAngevin/M\nAngie/M\nAngkor/M\nAngle/MS\nAngleton/M\nAnglia/M\nAnglican/SM\nAnglicanism/MS\nAnglicism/MS\nAnglicization\nAnglicize\nAnglo/M\nAnglophile/M\nAnglophobe\nAngola/M\nAngolan/MS\nAngora/SM\nAngstrom/M\nAnguilla/M\nAngus/M\nAnhui/M\nAniakchak/M\nAnibal/M\nAnita/M\nAnkara/M\nAnn/M\nAnna/M\nAnnabel/M\nAnnabelle/M\nAnnam/M\nAnnapolis/M\nAnnapurna/M\nAnne/M\nAnnette/M\nAnnie/M\nAnniston/M\nAnnmarie/M\nAnnunciation/SM\nAnouilh/M\nAnselm/M\nAnselmo/M\nAnshan/M\nAntaeus/M\nAntananarivo/M\nAntarctic/M\nAntarctica/M\nAntares/M\nAnthony/M\nAnthropocene\nAntichrist/SM\nAntietam/M\nAntigone/M\nAntigua/M\nAntillean\nAntilles/M\nAntioch/M\nAntipas/M\nAntipodes\nAntofagasta/M\nAntoine/M\nAntoinette/M\nAnton/M\nAntone/M\nAntonia/M\nAntoninus/M\nAntonio/M\nAntonius/M\nAntony/M\nAntwan/M\nAntwerp/M\nAnubis/M\nAnzac/M\nApache/SM\nApalachicola/M\nApatosaurus\nApennines/M\nAphrodite/M\nApia/M\nApocalypse/M\nApocrypha/M\nApollinaire/M\nApollo/SM\nApollonian/M\nApostle/M\nAppalachia/M\nAppalachian/SM\nAppalachians/M\nAppaloosa/SM\nApple/M\nAppleseed/M\nAppleton/M\nAppomattox/M\nApr/M\nApril/MS\nApuleius/M\nAquafresh/M\nAquarian\nAquarius/MS\nAquila/M\nAquinas/M\nAquino/M\nAquitaine/M\nAr/M\nAra/M\nArab/SM\nArabia/M\nArabian/MS\nArabic/M\nArabist/MS\nAraby/M\nAraceli/M\nArafat/M\nAragon\nAraguaya/M\nAral/M\nAramaic/M\nAramco/M\nArapaho/MS\nArapahoes\nArarat/M\nAraucanian/M\nArawak/M\nArawakan/M\nArbitron/M\nArcadia/M\nArcadian/M\nArchean/M\nArchibald/M\nArchie/M\nArchimedes/M\nArctic/M\nArcturus/M\nArdabil\nArden/M\nArduino/M\nArecibo/M\nArequipa/M\nAres/M\nArgentina/M\nArgentine/M\nArgentinean\nArgentinian/MS\nArgo/SM\nArgonaut/MS\nArgonne/M\nArgos/M\nArgus/M\nAriadne/M\nArianism/M\nAriel/M\nAries/MS\nAriosto/M\nAristarchus/M\nAristides/M\nAristophanes/M\nAristotelian/M\nAristotle/M\nArius/M\nAriz\nArizona/M\nArizonan/SM\nArizonian/MS\nArjuna/M\nArk/M\nArkansan/MS\nArkansas/M\nArkhangelsk/M\nArkwright/M\nArlene/M\nArline/M\nArlington/M\nArmageddon/SM\nArmagnac/M\nArmand/M\nArmando/M\nArmani/M\nArmenia/M\nArmenian/SM\nArminius/M\nArmonk/M\nArmour/M\nArmstrong/M\nArneb/M\nArnhem/M\nArno/M\nArnold/M\nArnulfo/M\nAron/M\nArrhenius/M\nArron/M\nArt/M\nArtaxerxes/M\nArtemis/M\nArthur/M\nArthurian/M\nArtie/M\nArturo/M\nAruba/M\nAryan/MS\nAs/M\nAsama/M\nAscella/M\nAscension/M\nAsgard/M\nAshanti/M\nAshcroft/M\nAshe/M\nAsheville/M\nAshgabat\nAshikaga/M\nAshkenazim/M\nAshkhabad/M\nAshlee/M\nAshley/M\nAshmolean/M\nAshurbanipal/M\nAsia/M\nAsiago\nAsian/MS\nAsiatic/SM\nAsimov/M\nAsmara/M\nAsoka/M\nAspell/M\nAspen/M\nAsperger/M\nAspidiske/M\nAsquith/M\nAssad/M\nAssam/M\nAssamese/M\nAssembly\nAssisi/M\nAssyria/M\nAssyrian/SM\nAstaire/M\nAstana/M\nAstarte/M\nAston/M\nAstor/M\nAstoria/M\nAstrakhan/M\nAstroTurf/M\nAsturias/M\nAsuncion/M\nAswan/M\nAt/SM\nAtacama/M\nAtahualpa/M\nAtalanta/M\nAtari/M\nAtascadero/M\nAtaturk/M\nAthabasca/M\nAthabaskan/SM\nAthanasius\nAthena/M\nAthene/M\nAthenian/SM\nAthens/M\nAtkins/M\nAtkinson/M\nAtlanta/M\nAtlantes\nAtlantic/M\nAtlantis/M\nAtlas/MS\nAtman/M\nAtonement\nAtreus/M\nAtria/M\nAtropos/M\nAttic/M\nAttica/M\nAttila/M\nAttlee/M\nAttn\nAttucks/M\nAtwood/M\nAu/M\nAubrey/M\nAuburn/M\nAuckland/M\nAuden/M\nAudi/M\nAudion/M\nAudra/M\nAudrey/M\nAudubon/M\nAug/M\nAugean/M\nAugsburg/M\nAugust/MS\nAugusta/M\nAugustan/M\nAugustine/M\nAugustinian/MS\nAugustus/M\nAurangzeb/M\nAurelia/M\nAurelio/M\nAurelius/M\nAureomycin/M\nAuriga/M\nAurora/M\nAuschwitz/M\nAussie/MS\nAusten/M\nAusterlitz/M\nAustin/MS\nAustralasia/M\nAustralasian\nAustralia/M\nAustralian/SM\nAustraloid/M\nAustralopithecus/M\nAustria/M\nAustrian/SM\nAustronesian/M\nAutumn/M\nAv/M\nAva/M\nAvalon/M\nAve/M\nAventine/M\nAvernus/M\nAverroes/M\nAvery/M\nAvesta/M\nAvicenna/M\nAvignon/M\nAvila/M\nAvior/M\nAvis/M\nAvogadro/M\nAvon/M\nAvondale/M\nAxis\nAxum/M\nAyala/M\nAyers/M\nAymara/M\nAyrshire/M\nAyurveda/M\nAyyubid/M\nAzana/M\nAzania/M\nAzazel/M\nAzerbaijan/M\nAzerbaijani/MS\nAzores/M\nAzov/M\nAztec/SM\nAztecan/M\nAztlan/M\nB/MNT\nBA/M\nBASIC/SM\nBB/M\nBBB/M\nBBC/M\nBBQ\nBBS\nBBSes\nBC/M\nBFF\nBIA\nBIOS\nBITNET\nBLT/SM\nBM/M\nBMW/M\nBO\nBP/M\nBPOE\nBR\nBS/M\nBSA\nBSD/SM\nBTU\nBTW\nBYOB\nBa/M\nBaal/SM\nBaath/M\nBaathist/M\nBabbage/M\nBabbitt/M\nBabel/MS\nBabylon/MS\nBabylonia/M\nBabylonian/SM\nBacall/M\nBacardi/M\nBacchanalia/M\nBacchic\nBacchus/M\nBach/M\nBackus/M\nBacon/M\nBactria/M\nBaden/M\nBadlands/M\nBaedeker/MS\nBaez/M\nBaffin/M\nBaggies/M\nBaghdad/M\nBaguio/M\nBaha'i/M\nBaha'ullah/M\nBahama/SM\nBahamanian\nBahamas/M\nBahamian/MS\nBahia/M\nBahrain/M\nBaidu/M\nBaikal/M\nBailey/M\nBaird/M\nBakelite/M\nBaker/M\nBakersfield/M\nBaku/M\nBakunin/M\nBalanchine/M\nBalaton/M\nBalboa/M\nBalder/M\nBaldwin/SM\nBalearic/M\nBalfour/M\nBali/M\nBalinese/M\nBalkan/MS\nBalkans/M\nBalkhash/M\nBall/M\nBallard/M\nBalthazar/M\nBaltic/M\nBaltimore/M\nBaluchistan/M\nBalzac/M\nBamako/M\nBambi/M\nBanach/M\nBancroft/M\nBandung/M\nBangalore/M\nBangkok/M\nBangladesh/M\nBangladeshi/SM\nBangor/M\nBangui/M\nBanjarmasin/M\nBanjul/M\nBanks/M\nBanneker/M\nBannister/M\nBanting/M\nBantu/MS\nBaotou/M\nBaptist/SM\nBaptiste/M\nBarabbas/M\nBarack/M\nBarbadian/SM\nBarbados/M\nBarbara/M\nBarbarella/M\nBarbarossa/M\nBarbary/M\nBarber/M\nBarbie/M\nBarbour/M\nBarbra/M\nBarbuda/M\nBarcelona/M\nBarceloneta/M\nBarclay/SM\nBarclays/M\nBardeen/M\nBarents/M\nBarker/M\nBarkley/M\nBarlow/M\nBarnabas/M\nBarnaby/M\nBarnard/M\nBarnaul/M\nBarnes/M\nBarnett/M\nBarney/M\nBarnum/M\nBaroda/M\nBarquisimeto/M\nBarr/M\nBarranquilla/M\nBarrera/M\nBarrett/M\nBarrie/M\nBarron/M\nBarry/M\nBarrymore/M\nBart/M\nBarth/MS\nBartholdi/M\nBartholomew/M\nBartlett/M\nBartok/M\nBarton/M\nBaruch/M\nBaryshnikov/M\nBasel/M\nBasho/M\nBasie/M\nBasil/M\nBasque/MS\nBasra/M\nBass/M\nBasseterre/M\nBastille/M\nBasutoland/M\nBataan/M\nBates/M\nBathsheba/M\nBatista/M\nBatman/M\nBattle/M\nBatu/M\nBaudelaire/M\nBaudouin/M\nBaudrillard/M\nBauer/M\nBauhaus/M\nBaum/M\nBavaria/M\nBavarian/M\nBaxter/M\nBayamon\nBayer/M\nBayes/M\nBayesian/M\nBayeux/M\nBaylor/M\nBayonne/M\nBayreuth/M\nBaywatch/M\nBe/MH\nBeach/M\nBeadle/M\nBean/M\nBeard/M\nBeardmore/M\nBeardsley/M\nBearnaise/M\nBeasley/M\nBeatlemania/M\nBeatles/M\nBeatrice/M\nBeatrix/M\nBeatriz/M\nBeatty/M\nBeau/M\nBeaufort/M\nBeaujolais/M\nBeaumarchais/M\nBeaumont/M\nBeauregard/M\nBeauvoir/M\nBechtel/M\nBeck/MR\nBecker/M\nBecket/M\nBeckett/M\nBeckley/M\nBeckman\nBecky/M\nBecquerel/M\nBede/M\nBedouin/SM\nBeebe/M\nBeecher/M\nBeefaroni/M\nBeelzebub/M\nBeerbohm/M\nBeethoven/M\nBeeton/M\nBegin/M\nBehan/M\nBehring/M\nBeiderbecke/M\nBeijing/M\nBeirut/M\nBekesy/M\nBela/M\nBelarus/M\nBelarusian\nBelau/M\nBelem/M\nBelfast/M\nBelg\nBelgian/SM\nBelgium/M\nBelgrade/M\nBelinda/M\nBelize/M\nBell/M\nBella/M\nBellamy/M\nBellatrix/M\nBelleek/M\nBellingham/M\nBellini/M\nBellow/M\nBelmont/M\nBelmopan/M\nBeloit/M\nBelorussian/MS\nBelshazzar/M\nBeltane/M\nBelushi/M\nBen/M\nBenacerraf/M\nBenchley/M\nBend/MR\nBender/M\nBendictus\nBendix/M\nBenedict/M\nBenedictine/MS\nBenelux/M\nBenet/M\nBenetton/M\nBengal/SM\nBengali/M\nBenghazi/M\nBenin/M\nBeninese/M\nBenita/M\nBenito/M\nBenjamin/M\nBennett/M\nBennie/M\nBenny/M\nBenson/M\nBentham/M\nBentley/M\nBenton/M\nBenz/M\nBenzedrine/M\nBeowulf/M\nBerber/SM\nBerenice/M\nBeretta/M\nBerg/MNR\nBergen/M\nBerger/M\nBergerac/M\nBergman/M\nBergson/M\nBeria/M\nBering/M\nBerkeley/M\nBerkshire/SM\nBerkshires/M\nBerle/M\nBerlin/SZMR\nBerliner/M\nBerlioz/M\nBerlitz/M\nBermuda/SM\nBermudan/SM\nBermudian/SM\nBern/M\nBernadette/M\nBernadine/M\nBernanke/M\nBernard/M\nBernardo/M\nBernays/M\nBernbach/M\nBernese\nBernhardt/M\nBernice/M\nBernie/M\nBernini/M\nBernoulli/M\nBernstein/M\nBerra/M\nBerry/M\nBert/M\nBerta/M\nBertelsmann/M\nBertha/M\nBertie/M\nBertillon/M\nBertram/M\nBertrand/M\nBerwick/M\nBeryl/M\nBerzelius/M\nBess/M\nBessel/M\nBessemer/M\nBessie/M\nBest/M\nBetelgeuse/M\nBeth/M\nBethany/M\nBethe/M\nBethesda/M\nBethlehem/M\nBethune/M\nBetsy/M\nBette/M\nBettie/M\nBetty/M\nBettye/M\nBeulah/M\nBeveridge\nBeverley/M\nBeverly/M\nBeyer/M\nBharat/M\nBhopal/M\nBhutan/M\nBhutanese/M\nBhutto/M\nBi/M\nBialystok/M\nBianca/M\nBib\nBible/MS\nBic/M\nBiddle/M\nBiden/M\nBierce/M\nBigQuery/M\nBigfoot/M\nBiggles/M\nBiko/M\nBilbao/M\nBilbo/M\nBill/MJ\nBillie/M\nBillings/M\nBilly/M\nBimini/M\nBinghamton/M\nBiogen/M\nBioko/M\nBird/M\nBirdseye/M\nBirkenstock/M\nBirmingham/M\nBiro/M\nBiscay/M\nBiscayne/M\nBishkek/M\nBishop/M\nBismarck/M\nBismark/M\nBisquick/M\nBissau/M\nBitTorrent/M\nBizet/M\nBjerknes/M\nBjork/M\nBk/M\nBlackBerry/M\nBlackbeard/M\nBlackburn/M\nBlackfeet/M\nBlackfoot/M\nBlackpool/M\nBlacksburg/M\nBlackshirt/M\nBlackstone/M\nBlackwell/M\nBlaine/M\nBlair/M\nBlake/M\nBlanca/M\nBlanchard/M\nBlanche/M\nBlankenship/M\nBlantyre/M\nBlatz/M\nBlavatsky/M\nBlenheim/M\nBlevins/M\nBligh/M\nBloch/M\nBlockbuster/M\nBloemfontein/M\nBlondel/M\nBlondie/M\nBloom/MR\nBloomer/M\nBloomfield/M\nBloomingdale/M\nBloomington/M\nBloomsburg/M\nBloomsbury/M\nBlu\nBlucher/M\nBluebeard/M\nBluetooth/M\nBlvd\nBlythe/M\nBoadicea\nBoas/M\nBob/M\nBobbi/M\nBobbie/M\nBobbitt/M\nBobby/M\nBoccaccio/M\nBodhidharma/M\nBodhisattva/M\nBodleian\nBoeing/M\nBoeotia/M\nBoeotian/M\nBoer/SM\nBoethius/M\nBogart/M\nBogota/M\nBohemia/M\nBohemian/SM\nBohr/M\nBoise/M\nBojangles/M\nBoleyn/M\nBolivar/M\nBolivia/M\nBolivian/MS\nBollywood/M\nBologna/M\nBolshevik/SM\nBolsheviki\nBolshevism/M\nBolshevist/M\nBolshoi/M\nBolton/M\nBoltzmann/M\nBombay/M\nBonaparte/M\nBonaventure/M\nBond/M\nBonhoeffer/M\nBoniface/M\nBonita/M\nBonn/MR\nBonner/M\nBonneville/M\nBonnie/M\nBono/M\nBooker/M\nBoole/M\nBoolean/M\nBoone/M\nBootes/M\nBooth/M\nBordeaux/M\nBorden/M\nBordon/M\nBoreas/M\nBorg/SM\nBorges/M\nBorgia/M\nBorglum/M\nBoris/M\nBork/M\nBorlaug/M\nBorn/M\nBorneo/M\nBorobudur/M\nBorodin/M\nBoru/M\nBosch/M\nBose/M\nBosnia/M\nBosnian\nBosporus/M\nBoston/MS\nBostonian/M\nBoswell/M\nBotha\nBotox\nBotswana/M\nBotticelli/M\nBoulder/M\nBoulez/M\nBourbaki/M\nBourbon/SM\nBournemouth/M\nBovary/M\nBowditch/M\nBowell/M\nBowen/M\nBowers/M\nBowery/M\nBowie/M\nBowman/M\nBoyd/M\nBoyer/M\nBoyle/M\nBr/MT\nBrad/MY\nBradbury/M\nBraddock/M\nBradenton/M\nBradford/M\nBradley/M\nBradly/M\nBradshaw/M\nBradstreet/M\nBrady/M\nBragg/M\nBrahe/M\nBrahma/MS\nBrahmagupta/M\nBrahman/MS\nBrahmani\nBrahmanism/SM\nBrahmaputra/M\nBrahms/M\nBraille/MS\nBrain/M\nBrampton/M\nBran/M\nBranch/M\nBrandeis/M\nBranden/M\nBrandenburg/M\nBrandi/M\nBrandie/M\nBrando/M\nBrandon/M\nBrandt/M\nBrandy/M\nBrant/M\nBraque/M\nBrasilia/M\nBratislava/M\nBrattain/M\nBray/M\nBrazil/M\nBrazilian/MS\nBrazos/M\nBrazzaville/M\nBreakspear/M\nBreathalyzer\nBrecht/M\nBreckenridge/M\nBremen/M\nBremerton/M\nBrenda/M\nBrendan/M\nBrennan/M\nBrenner/M\nBrent/M\nBrenton/M\nBrest/M\nBret/M\nBreton/M\nBrett/M\nBrewer/M\nBrewster/M\nBrexit\nBrezhnev/M\nBrian/M\nBriana/M\nBrianna/M\nBrice/M\nBridalveil/M\nBridgeport/M\nBridger/M\nBridges/M\nBridget/M\nBridgetown/M\nBridgett/M\nBridgette/M\nBridgman/M\nBrie/SM\nBrigadoon/M\nBriggs/M\nBrigham/M\nBright/M\nBrighton/M\nBrigid/M\nBrigitte/M\nBrillo/M\nBrillouin\nBrinkley/M\nBrisbane/M\nBristol/M\nBrit/SM\nBritain/M\nBritannia/M\nBritannic/M\nBritannica/M\nBriticism/SM\nBritish/MRZ\nBritisher/M\nBritney/M\nBriton/MS\nBritt/MN\nBrittany/SM\nBritten/M\nBrittney/M\nBrno/M\nBroadway/SM\nBrobdingnag/M\nBrobdingnagian/M\nBrock/M\nBrokaw/M\nBronson/M\nBronte/M\nBrontosaurus\nBronx/M\nBrooke/MS\nBrooklyn/M\nBrooks/M\nBros\nBrown/MG\nBrowne/M\nBrownian/M\nBrownie/S\nBrowning/M\nBrownshirt/M\nBrownsville/M\nBrubeck/M\nBruce/M\nBruckner/M\nBruegel\nBrummel/M\nBrunei/M\nBruneian/MS\nBrunelleschi/M\nBrunhilde/M\nBruno/M\nBrunswick/M\nBrussels/M\nBrut/M\nBrutus/M\nBryan/M\nBryant/M\nBryce/M\nBrynner/M\nBryon/M\nBrzezinski/M\nBtu/M\nBuber/M\nBuchanan/M\nBucharest/M\nBuchenwald/M\nBuchwald/M\nBuck/M\nBuckingham/M\nBuckley/M\nBuckner/M\nBud/M\nBudapest/M\nBuddha/SM\nBuddhism/SM\nBuddhist/SM\nBuddy/M\nBudweiser/M\nBuffalo/M\nBuffy/M\nBuford/M\nBugatti/M\nBugzilla/M\nBuick/M\nBujumbura/M\nBukhara/M\nBukharin/M\nBulawayo/M\nBulfinch/M\nBulganin/M\nBulgar/M\nBulgari/M\nBulgaria/M\nBulgarian/SM\nBullock/M\nBullwinkle/M\nBultmann/M\nBumppo/M\nBunche/M\nBundesbank/M\nBundestag/M\nBunin/M\nBunker/M\nBunsen/M\nBunuel/M\nBunyan/M\nBurbank/M\nBurberry/M\nBurch/M\nBurger/M\nBurgess/M\nBurgoyne/M\nBurgundian/M\nBurgundy/SM\nBurke/M\nBurks/M\nBurl/M\nBurlington/M\nBurma/M\nBurmese/M\nBurnett/M\nBurns/M\nBurnside/M\nBurr/M\nBurris/M\nBurroughs/M\nBursa/M\nBurt/M\nBurton/M\nBurundi/M\nBurundian/MS\nBusch/M\nBush/M\nBushido/M\nBushnell/M\nButler/M\nButterfingers/M\nBuxtehude/M\nByblos/M\nByers/M\nByrd/M\nByron/M\nByronic/M\nByzantine/MS\nByzantium/M\nC/SM\nCA\nCAD/M\nCAI\nCAM\nCAP\nCARE\nCATV\nCB\nCBC/M\nCBS/M\nCCTV\nCCU\nCD/SM\nCDC\nCDT\nCEO/M\nCF\nCFC/M\nCFO\nCGI\nCIA/M\nCID\nCNN/M\nCNS/M\nCO/M\nCOBOL/SM\nCOD\nCOL\nCOLA\nCPA/M\nCPI/M\nCPO\nCPR/M\nCPU/M\nCRT/SM\nCSS/M\nCST/M\nCT/M\nCV\nCVS/M\nCZ\nCa/M\nCabernet/M\nCabot/M\nCabral/M\nCabrera/M\nCabrini/M\nCadette\nCadillac/M\nCadiz/M\nCaedmon/M\nCaerphilly/M\nCaesar/SM\nCage/M\nCagney/M\nCahokia/M\nCaiaphas/M\nCain/SM\nCairo/M\nCaitlin/M\nCajun/MS\nCal/M\nCalais/M\nCalcutta/M\nCalder/M\nCalderon/M\nCaldwell/M\nCaleb/M\nCaledonia/M\nCalexico/M\nCalgary/M\nCalhoun/M\nCali/M\nCaliban/M\nCalif\nCalifornia/M\nCalifornian/SM\nCaligula/M\nCallaghan/M\nCallahan/M\nCallao/M\nCallas/M\nCallie/M\nCalliope/M\nCallisto/M\nCaloocan/M\nCalvary/M\nCalvert/M\nCalvin/M\nCalvinism/MS\nCalvinist/MS\nCalvinistic\nCamacho/M\nCamarillo/M\nCambodia/M\nCambodian/SM\nCambrian/SM\nCambridge/M\nCamden/M\nCamel/M\nCamelopardalis/M\nCamelot/MS\nCamembert/MS\nCameron/M\nCameroon/SM\nCameroonian/MS\nCamilla/M\nCamille/M\nCamoens/M\nCampanella/M\nCampbell/M\nCampinas/M\nCampos/M\nCamry/M\nCamus/M\nCan/M\nCanaan/M\nCanaanite/MS\nCanad\nCanada/M\nCanadian/SM\nCanadianism\nCanaletto/M\nCanaries/M\nCanaveral/M\nCanberra/M\nCancer/SM\nCancun/M\nCandace/M\nCandice/M\nCandide/M\nCandy/M\nCannes/M\nCannon/M\nCanon/M\nCanopus/M\nCantabrigian/M\nCanterbury/M\nCanton/M\nCantonese/M\nCantor/M\nCantrell/M\nCantu/M\nCanute/M\nCapablanca/M\nCapek/M\nCapella/M\nCapet/M\nCapetian/M\nCapetown/M\nCaph/M\nCapistrano/M\nCapitol/SM\nCapitoline/M\nCapone/M\nCapote/M\nCapra/M\nCapri/M\nCapricorn/MS\nCapt\nCapuchin/M\nCapulet/M\nCara/M\nCaracalla/M\nCaracas/M\nCaravaggio/M\nCarboloy/M\nCarbondale/M\nCarboniferous/M\nCarborundum/M\nCardenas/M\nCardiff/M\nCardin/M\nCardozo/M\nCarey/M\nCarib/MS\nCaribbean/MS\nCarina/M\nCarissa/M\nCarl/M\nCarla/M\nCarlene/M\nCarlin/M\nCarlo/MS\nCarlos/M\nCarlsbad/M\nCarlson/M\nCarlton/M\nCarly/M\nCarlyle/M\nCarmela/M\nCarmella/M\nCarmelo/M\nCarmen/M\nCarmichael/M\nCarmine/M\nCarnap/M\nCarnation/M\nCarnegie/M\nCarney/M\nCarnot/M\nCarol/M\nCarole/M\nCarolina/M\nCaroline/M\nCarolingian/M\nCarolinian/M\nCarolyn/M\nCarpathian/SM\nCarpathians/M\nCarpenter/M\nCarr/M\nCarranza/M\nCarrie/RM\nCarrier/M\nCarrillo/M\nCarroll/M\nCarson/M\nCarter/M\nCartersville/M\nCartesian/M\nCarthage/M\nCarthaginian/MS\nCartier/M\nCartwright/M\nCaruso/M\nCarver/M\nCary/M\nCasablanca/M\nCasals/M\nCasandra/M\nCasanova/SM\nCascades/M\nCase/M\nCasey/M\nCash/M\nCasio/M\nCaspar/M\nCasper/M\nCaspian/M\nCassandra/SM\nCassatt/M\nCassidy/M\nCassie/M\nCassiopeia/M\nCassius/M\nCastaneda/M\nCastilian\nCastillo/M\nCastlereagh/M\nCastor/M\nCastries/M\nCastro/M\nCatalan/SM\nCatalina/M\nCatalonia/M\nCatawba/M\nCaterpillar/M\nCathay/M\nCather/M\nCatherine/M\nCathleen/M\nCatholic/MS\nCatholicism/MS\nCathryn/M\nCathy/M\nCatiline/M\nCato/M\nCatskill/SM\nCatskills/M\nCatt/M\nCatullus/M\nCaucasian/MS\nCaucasoid\nCaucasus/M\nCauchy/M\nCavendish/M\nCavour/M\nCaxton/M\nCayenne/M\nCayman/M\nCayuga/SM\nCayuse\nCb\nCd/M\nCe/M\nCeausescu/M\nCebu/M\nCebuano/M\nCecelia/M\nCecil/M\nCecile/M\nCecilia/M\nCecily/M\nCedric/M\nCeleste/M\nCelgene/M\nCelia/M\nCelina/M\nCellini/M\nCelsius/M\nCelt/SM\nCeltic/SM\nCenozoic/M\nCentaurus/M\nCentigrade\nCentral\nCepheid/M\nCepheus/M\nCerberus/M\nCerenkov/M\nCeres/M\nCerf/M\nCervantes/M\nCesar/M\nCesarean/M\nCessna/M\nCetus/M\nCeylon/M\nCeylonese\nCezanne/M\nCf/M\nCh'in/M\nCh/N\nChablis/M\nChad/M\nChadian/MS\nChadwick/M\nChagall/M\nChaitanya/M\nChaitin/M\nChaldea\nChaldean/M\nChallenger/M\nChalmers\nChamberlain/M\nChambers/M\nChambersburg/M\nChampaign/M\nChamplain/M\nChampollion/M\nChan/M\nChance/M\nChancellorsville/M\nChandigarh/M\nChandler/M\nChandon/M\nChandra/M\nChandragupta/M\nChandrasekhar/M\nChanel/M\nChaney/M\nChang/M\nChangchun/M\nChangsha/M\nChantilly/M\nChaplin/M\nChaplinesque\nChapman/M\nChappaquiddick/M\nChapultepec/M\nCharbray/M\nChardonnay/M\nCharity/M\nCharlemagne/M\nCharlene/M\nCharles/M\nCharleston/MS\nCharley/M\nCharlie/M\nCharlotte/M\nCharlottesville/M\nCharlottetown/M\nCharmaine/M\nCharmin/M\nCharolais/M\nCharon/M\nChartism/M\nChartres/M\nCharybdis/M\nChase/M\nChasity/M\nChateaubriand/M\nChattahoochee/M\nChattanooga/M\nChatterley/M\nChatterton/M\nChaucer/M\nChauncey/M\nChautauqua/M\nChavez/M\nChayefsky/M\nChe/M\nChechen/M\nChechnya/M\nCheddar/M\nCheer/M\nCheerios/M\nCheetos/M\nCheever/M\nChekhov/M\nChekhovian\nChelsea/M\nChelyabinsk/M\nChen/M\nCheney/M\nChengdu/M\nChennai/M\nCheops/M\nCheri/M\nCherie/M\nChernenko/M\nChernobyl/M\nChernomyrdin/M\nCherokee/MS\nCherry/M\nCheryl/M\nChesapeake/M\nCheshire/M\nChester/M\nChesterfield/M\nChesterton/M\nChevalier/M\nCheviot/M\nChevrolet/M\nChevron/M\nChevy/M\nCheyenne/SM\nChi/M\nChianti/MS\nChiba/M\nChibcha/M\nChicago/M\nChicagoan/M\nChicana/M\nChicano/M\nChickasaw/MS\nChiclets/M\nChico/M\nChihuahua/MS\nChile/M\nChilean/MS\nChimborazo/M\nChimera/MS\nChimu/M\nChin/M\nChina/M\nChinatown/M\nChinese/M\nChinook/MS\nChipewyan/M\nChippendale/M\nChippewa/SM\nChiquita/M\nChirico/M\nChisholm/M\nChisinau/M\nChittagong/M\nChivas/M\nChloe/M\nChoctaw/SM\nChomsky/M\nChongqing/M\nChopin/M\nChopra/M\nChou/M\nChretien/M\nChris/M\nChrist/MS\nChrista/M\nChristchurch/M\nChristendom/MS\nChristensen/M\nChristi/M\nChristian/SM\nChristianity/SM\nChristianize\nChristie/M\nChristina/M\nChristine/M\nChristlike\nChristmas/MS\nChristmastide/MS\nChristmastime/MS\nChristoper/M\nChristopher/M\nChromebook/MS\nChronicles\nChrysler/M\nChrysostom/M\nChrystal/M\nChuck/M\nChukchi/M\nChumash/M\nChung/M\nChurch/M\nChurchill/M\nChurriguera/M\nChuvash/M\nCi/M\nCicero/M\nCid/M\nCimabue/M\nCincinnati/M\nCinderella/MS\nCindy/M\nCinemaScope/M\nCinerama/M\nCipro/M\nCirce/M\nCisco/M\nCitibank/M\nCitigroup/M\nCitroen/M\nCl/MV\nClaiborne/M\nClair/M\nClaire/M\nClairol/M\nClancy/M\nClapeyron/M\nClapton/M\nClara/M\nClare/M\nClarence/M\nClarendon/M\nClarice/M\nClarissa/M\nClark/M\nClarke/M\nClarksville/M\nClaude/M\nClaudette/M\nClaudia/M\nClaudine/M\nClaudio/M\nClaudius/M\nClaus/M\nClausewitz/M\nClausius/M\nClay/M\nClayton/M\nClearasil/M\nClem/XM\nClemenceau/M\nClemens/M\nClement/MS\nClementine/M\nClements/M\nClemons/M\nClemson/M\nCleo/M\nCleopatra/M\nCleveland/M\nCliburn/M\nCliff/M\nClifford/M\nClifton/M\nCline/M\nClint/M\nClinton/M\nClio/M\nClive/M\nClojure/M\nClorets/M\nClorox/M\nClosure/M\nClotho/M\nClouseau/M\nClovis/M\nClyde/M\nClydesdale/M\nClytemnestra/M\nCm/M\nCmdr\nCo/M\nCobain/M\nCobb/M\nCochabamba/M\nCochin/M\nCochise/M\nCochran/M\nCockney/M\nCocteau/M\nCod\nCody/M\nCoffey/M\nCognac/M\nCohan/M\nCohen/M\nCoimbatore/M\nCointreau/M\nCoke/SM\nCol/M\nColbert/M\nColby/M\nCole/M\nColeen/M\nColeman/M\nColeridge/M\nColette/M\nColfax/M\nColgate/M\nColin/M\nColleen/M\nCollier/M\nCollin/SM\nCollins/M\nColo\nCologne/M\nColombia/M\nColombian/MS\nColombo/M\nColon/M\nColoradan/SM\nColorado/M\nColoradoan\nColosseum/M\nColt/M\nColtrane/M\nColumbia/M\nColumbine/M\nColumbus/M\nCom\nComanche/MS\nCombs/M\nComdr\nComintern/M\nCommandment\nCommons/M\nCommonwealth\nCommunion/SM\nCommunism\nCommunist/SM\nComo/M\nComoran\nComoros/M\nCompaq/M\nCompton/M\nCompuServe/M\nComte/M\nConakry/M\nConan/M\nConcepcion/M\nConcetta/M\nConcord/SM\nConcorde/M\nCondillac/M\nCondorcet/M\nConestoga/M\nConfederacy/M\nConfederate/MS\nConfucian/SM\nConfucianism/MS\nConfucius/M\nCong/M\nCongo/M\nCongolese/M\nCongregational\nCongregationalist/MS\nCongress/MS\nCongressional\nCongreve/M\nConley/M\nConn/MR\nConnecticut/M\nConnellsville/M\nConnemara/M\nConner/M\nConnery/M\nConnie/M\nConnolly/M\nConnors/M\nConrad/M\nConrail/M\nConroe/M\nConservative\nConstable/M\nConstance/M\nConstantine/M\nConstantinople/M\nConstitution\nConsuelo/M\nContinent/M\nContinental/M\nContreras/M\nConway/M\nCook/M\nCooke/M\nCooley/M\nCoolidge/M\nCooper/M\nCooperstown/M\nCoors/M\nCopacabana/M\nCopeland/M\nCopenhagen/M\nCopernican/M\nCopernicus/M\nCopland/M\nCopley/M\nCopperfield/M\nCoppertone/M\nCoppola/M\nCoptic/M\nCora/M\nCordelia/M\nCordilleras/M\nCordoba/M\nCorey/M\nCorfu/M\nCorina/M\nCorine/M\nCorinne/M\nCorinth/M\nCorinthian/MS\nCorinthians/M\nCoriolanus/M\nCoriolis/M\nCork\nCorleone/M\nCormack/M\nCorneille/M\nCornelia/M\nCornelius/M\nCornell/M\nCorning/M\nCornish/MS\nCornwall/M\nCornwallis/M\nCoronado/M\nCorot/M\nCorp\nCorreggio/M\nCorrine/M\nCorsica/M\nCorsican/M\nCortes/MS\nCortland/M\nCorvallis/M\nCorvette/M\nCorvus/M\nCory/M\nCosby/M\nCosmosDB/M\nCossack/M\nCostco/M\nCostello/M\nCostner/M\nCote/M\nCotonou/M\nCotopaxi/M\nCotswold/M\nCotton/M\nCoulomb/M\nCoulter/M\nCouperin/M\nCourbet/M\nCourtney/M\nCousteau/M\nCoventry/SM\nCovington/M\nCoward/M\nCowell/M\nCowley/M\nCowper/M\nCox/M\nCoy/M\nCoyle/M\nCozumel/M\nCpl\nCr/MT\nCrabbe/M\nCraft/M\nCraig/M\nCranach/M\nCrane/M\nCranmer/M\nCrater/M\nCrawford/M\nCray/M\nCrayola/M\nCreation/M\nCreator/M\nCrecy/M\nCree/DSM\nCreek/SM\nCreighton/M\nCreole/SM\nCreon/M\nCressida/M\nCrest/M\nCretaceous/M\nCretan/SM\nCrete/M\nCrichton/M\nCrick/M\nCrimea/M\nCrimean/M\nCriollo/M\nCrisco/M\nCristina/M\nCroat/SM\nCroatia/M\nCroatian/MS\nCroce/M\nCrockett/M\nCroesus/M\nCromwell/M\nCromwellian/M\nCronin/M\nCronkite/M\nCronus/M\nCrookes/M\nCrosby/M\nCross/M\nCrow/SM\nCrowley/M\nCrucifixion/MS\nCruikshank/M\nCruise/M\nCrusades's\nCrusoe/M\nCrux/M\nCruz/M\nCryptozoic/M\nCrystal/M\nCsonka/M\nCt\nCtesiphon/M\nCthulhu/M\nCu/M\nCuba/M\nCuban/SM\nCuchulain/M\nCuisinart/M\nCulbertson/M\nCullen/M\nCumberland/M\nCummings/M\nCunard/M\nCunningham/M\nCupid/M\nCuracao/M\nCurie/M\nCuritiba/M\nCurrier/M\nCurry/RM\nCurt/M\nCurtis/M\nCuster/M\nCuvier/M\nCuzco/M\nCybele/M\nCyclades/M\nCyclopes/M\nCyclops/M\nCygnus/M\nCymbeline/M\nCynthia/M\nCyprian/M\nCypriot/MS\nCyprus/M\nCyrano/M\nCyril/M\nCyrillic/M\nCyrus/M\nCzech/M\nCzechia/M\nCzechoslovak\nCzechoslovakia/M\nCzechoslovakian/SM\nCzechs\nCzerny/M\nD/M\nDA/M\nDAR\nDAT/M\nDBMS/M\nDC/M\nDD/M\nDDS/M\nDDT/S\nDE\nDEA\nDEC/SD\nDH\nDHS\nDI\nDJ\nDMCA\nDMD/M\nDMZ\nDNA/M\nDOA\nDOB\nDOD\nDOE\nDOS/M\nDOT\nDP/SM\nDPT\nDST\nDTP\nDUI\nDVD/S\nDVR/SM\nDWI\nDachau/M\nDacron/SM\nDada/M\nDadaism/M\nDaedalus/M\nDaguerre/M\nDagwood/M\nDahomey/M\nDaimler/M\nDaisy/M\nDakar/M\nDakota/SM\nDakotan/M\nDalai\nDale/M\nDaley/M\nDali/M\nDalian/M\nDallas/M\nDalmatia/M\nDalmatian/SM\nDalton/M\nDamascus/M\nDame/MN\nDamian/M\nDamien/M\nDamion/M\nDamocles/M\nDamon/M\nDan/M\nDana/M\nDanae/M\nDanbury/M\nDane/SM\nDanelaw/M\nDangerfield/M\nDanial/M\nDaniel/SM\nDanielle/M\nDaniels/M\nDanish/M\nDannie/M\nDanny/M\nDanone/M\nDante/M\nDanton/M\nDanube/M\nDanubian/M\nDanville/M\nDaphne/M\nDarby/M\nDarcy/M\nDardanelles/M\nDare/M\nDaren/M\nDarfur/M\nDarin/M\nDario/M\nDarius/M\nDarjeeling/M\nDarla/M\nDarlene/M\nDarling/M\nDarnell/M\nDarrel/M\nDarrell/M\nDarren/M\nDarrin/M\nDarrow/M\nDarryl/M\nDarth/M\nDartmoor/M\nDartmouth/M\nDarvon/M\nDarwin/M\nDarwinian/M\nDarwinism/SM\nDarwinist\nDaryl/M\nDatamation\nDaugherty/M\nDaumier/M\nDavao/M\nDave/M\nDavenport/M\nDavid/MS\nDavidson/M\nDavies/M\nDavis/M\nDavy/SM\nDawes/M\nDawkins\nDawn/M\nDawson/M\nDay/M\nDayan\nDayton/M\nDeGeneres/M\nDeKalb/M\nDeadhead/M\nDean/M\nDeana/M\nDeandre/M\nDeann/M\nDeanna/M\nDeanne/M\nDeath/M\nDebbie/M\nDebby/M\nDebian/M\nDebora/M\nDeborah/M\nDebouillet/M\nDebra/M\nDebs/M\nDebussy/M\nDec/M\nDecalogue/M\nDecatur/M\nDecca/M\nDeccan/M\nDecember/SM\nDecker/M\nDedekind/M\nDee/M\nDeena/M\nDeere/M\nDefoe/M\nDegas/M\nDeidre/M\nDeimos/M\nDeirdre/M\nDeity\nDejesus/M\nDel/M\nDelacroix/M\nDelacruz/M\nDelaney/M\nDelano/M\nDelaware/MS\nDelawarean/SM\nDelbert/M\nDeleon/M\nDelgado/M\nDelhi/M\nDelia/M\nDelibes/M\nDelicious/M\nDelilah/M\nDelilahs\nDelius/M\nDell/M\nDella/M\nDelmar/M\nDelmarva/M\nDelmer/M\nDelmonico/M\nDelores/M\nDeloris/M\nDelphi/M\nDelphic/M\nDelphinus/M\nDelta/M\nDeltona/M\nDem/G\nDemavend/M\nDemerol/M\nDemeter/M\nDemetrius/M\nDeming/M\nDemocrat/SM\nDemocratic\nDemocritus/M\nDemosthenes/M\nDempsey/M\nDena/M\nDenali\nDeneb/M\nDenebola/M\nDeng/M\nDenis/M\nDenise/M\nDenmark/M\nDennis/M\nDenny/M\nDenton/M\nDenver/M\nDeon/M\nDepp/M\nDerby/M\nDerek/M\nDerick/M\nDermot/M\nDerrick/M\nDerrida/M\nDescartes/M\nDesdemona/M\nDesiree/M\nDesmond/M\nDetroit/M\nDeuteronomy/M\nDevanagari/M\nDevi/M\nDevin/M\nDevon/M\nDevonian/M\nDewar/M\nDewayne/M\nDewey/M\nDewitt/M\nDexedrine/M\nDexter/M\nDhaka/M\nDhaulagiri/M\nDi/SM\nDiCaprio/M\nDiMaggio/M\nDiaghilev/M\nDial/M\nDiana/M\nDiane/M\nDiann/M\nDianna/M\nDianne/M\nDias\nDiaspora/MS\nDick/XM\nDickens/M\nDickensian\nDickerson/M\nDickinson/M\nDickson/M\nDictaphone/SM\nDiderot/M\nDido/M\nDidrikson/M\nDiefenbaker/M\nDiego/M\nDiem/M\nDietrich/M\nDijkstra/M\nDijon/M\nDilbert/MS\nDillard/M\nDillinger/M\nDillon/M\nDina/M\nDinah/M\nDino/M\nDiocletian/M\nDiogenes/M\nDion/M\nDionne/M\nDionysian/M\nDionysus/M\nDiophantine/M\nDior/M\nDipper/M\nDir\nDirac/M\nDirichlet/M\nDirk/M\nDis/M\nDisney/M\nDisneyland/M\nDisraeli/M\nDivine/M\nDiwali/M\nDix/M\nDixie/M\nDixiecrat/M\nDixieland/SM\nDixon/M\nDjango/M\nDjibouti/M\nDmitri/M\nDnepropetrovsk/M\nDniester/M\nDobbin/M\nDoberman/M\nDobro/M\nDoctor\nDoctorow/M\nDodge/M\nDodgson/M\nDodoma/M\nDodson/M\nDoe/M\nDoha/M\nDolby/M\nDole/M\nDollie/M\nDolly/M\nDolores/M\nDomesday/M\nDomingo/M\nDominguez/M\nDominic/M\nDominica/M\nDominican/MS\nDominick/M\nDominion\nDominique/M\nDomitian/M\nDon/SM\nDona/M\nDonahue/M\nDonald/M\nDonaldson/M\nDonatello/M\nDonetsk/M\nDonizetti/M\nDonn/MR\nDonna/M\nDonne/M\nDonnell/M\nDonner/M\nDonnie/M\nDonny/M\nDonovan/M\nDooley/M\nDoolittle/M\nDoonesbury/M\nDoppler/M\nDora/M\nDorcas/M\nDoreen/M\nDorian/M\nDoric/M\nDoris/M\nDoritos/M\nDorothea/M\nDorothy/M\nDorset/M\nDorsey/M\nDorthy/M\nDortmund/M\nDostoevsky/M\nDot/M\nDothan/M\nDotson/M\nDouala/M\nDouay/M\nDoubleday/M\nDoug/M\nDouglas/M\nDouglass/M\nDouro/M\nDover/M\nDow/M\nDowns/M\nDowny/M\nDoyle/M\nDr\nDraco/M\nDraconian/M\nDracula/M\nDrake/M\nDramamine/SM\nDrambuie/M\nDrano/M\nDravidian/M\nDreiser/M\nDresden/M\nDrew/M\nDreyfus/M\nDristan/M\nDropbox/M\nDrudge/M\nDrupal/M\nDryden/M\nDschubba/M\nDu\nDuPont/M\nDuane/M\nDubai/M\nDubcek/M\nDubhe/M\nDublin/M\nDubrovnik/M\nDubuque/M\nDuchamp/M\nDudley/M\nDuffy/M\nDuisburg/M\nDuke/M\nDulles/M\nDuluth/M\nDumas/M\nDumbledore/M\nDumbo/M\nDumpster/M\nDunant/M\nDunbar/M\nDuncan/M\nDundee\nDunedin/M\nDunkirk/M\nDunlap/M\nDunn/M\nDunne/M\nDuracell/M\nDuran/M\nDurant/M\nDurante/M\nDurban/M\nDurer/M\nDurex/M\nDurham/MS\nDurkheim/M\nDuroc/M\nDurocher/M\nDuse/M\nDushanbe/M\nDusseldorf/M\nDustbuster/M\nDustin/M\nDusty/M\nDutch/M\nDutchman/M\nDutchmen/M\nDutchwoman\nDuvalier/M\nDvina/M\nDvorak/M\nDwayne/M\nDwight/M\nDy/M\nDyer/M\nDylan/M\nDynamoDB/M\nDyson/M\nDzerzhinsky/M\nDzungaria/M\nE/SM\nEC\nECG/M\nECMAScript/M\nEDP/M\nEDT\nEEC/M\nEEG/M\nEEO\nEEOC\nEFL\nEFT\nEKG/M\nELF/M\nEM\nEMT\nENE/M\nEOE\nEPA/M\nER\nERA\nESE/M\nESL\nESP/M\nESPN/M\nESR\nEST/M\nET\nETA\nETD\nEU\nEULA/S\nEakins/M\nEarhart/M\nEarl/M\nEarle/M\nEarlene/M\nEarline/M\nEarnest/M\nEarnestine/M\nEarnhardt/M\nEarp/M\nEast/SZMR\nEaster/M\nEastern/R\nEastman/M\nEastwood/M\nEaton/M\nEben/M\nEbeneezer/M\nEbert/M\nEbola/M\nEbonics/M\nEbony/M\nEbro/M\nEcclesiastes/M\nEco/M\nEcstasy\nEcuador/M\nEcuadoran/SM\nEcuadorean\nEcuadorian/SM\nEd/MNX\nEdam/SM\nEdda/M\nEddie/M\nEddington/M\nEddy/M\nEden/M\nEdgar/M\nEdgardo/M\nEdinburgh/M\nEdison/M\nEdith/M\nEdmond/M\nEdmonton/M\nEdmund/M\nEdna/M\nEdsel/M\nEduardo/M\nEdward/SM\nEdwardian/M\nEdwardo/M\nEdwards/M\nEdwin/M\nEdwina/M\nEeyore/M\nEffie/M\nEfrain/M\nEfren/M\nEggo/M\nEgypt/M\nEgyptian/MS\nEgyptology/M\nEhrenberg/M\nEhrlich/M\nEichmann/M\nEiffel/M\nEileen/M\nEinstein/MS\nEire/M\nEisenhower/M\nEisenstein/M\nEisner/M\nElaine/M\nElam/M\nElanor/M\nElasticsearch/M\nElastoplast/M\nElba/M\nElbe/M\nElbert/M\nElbrus/M\nEldersburg/M\nEldon/M\nEleanor/M\nEleazar/M\nElectra/M\nElena/M\nElgar/M\nEli/M\nElias/M\nElijah/M\nElinor/M\nEliot/M\nElisa/M\nElisabeth/M\nElise/M\nEliseo/M\nElisha/M\nEliza/M\nElizabeth/M\nElizabethan/SM\nElizabethtown/M\nElkhart/M\nElla/M\nEllen/M\nEllesmere/M\nEllie/M\nEllington/M\nElliot/M\nElliott/M\nEllis/M\nEllison/M\nElma/M\nElmer/M\nElmira/M\nElmo/M\nElnath/M\nElnora/M\nElohim/M\nEloise/M\nEloy/M\nElroy/M\nElsa/M\nElsie/M\nElsinore/M\nEltanin/M\nElton/M\nElul/M\nElva/M\nElvia/M\nElvin/M\nElvira/M\nElvis/M\nElway/M\nElwood/M\nElyria/M\nElysee/M\nElysian/M\nElysium/SM\nEmacs/M\nEmanuel/M\nEmerson/M\nEmery/M\nEmil/M\nEmile/M\nEmilia/M\nEmilio/M\nEmily/M\nEminem/M\nEminence\nEmma/M\nEmmanuel/M\nEmmett/M\nEmmy/M\nEmory/M\nEncarta/M\nEndymion/M\nEng/M\nEngels/M\nEngland/M\nEnglish/MRS\nEnglishman/M\nEnglishmen/M\nEnglishwoman/M\nEnglishwomen/M\nEnid/M\nEnif/M\nEniwetok/M\nEnkidu/M\nEnoch/M\nEnos/M\nEnrico/M\nEnrique/M\nEnron/M\nEnterprise/M\nEocene/M\nEpcot/M\nEphesian/MS\nEphesus/M\nEphraim/M\nEpictetus/M\nEpicurean/M\nEpicurus/M\nEpimethius/M\nEpiphany/SM\nEpiscopal\nEpiscopalian/MS\nEpistle\nEpsom/M\nEpson/M\nEpstein/M\nEquuleus/M\nEr/M\nErasmus/M\nErato/M\nEratosthenes/M\nErebus/M\nErector/M\nErewhon/M\nErhard/M\nEric/M\nErica/M\nErich/M\nErick/M\nEricka/M\nErickson/M\nEridanus/M\nErie/M\nErik/M\nErika/M\nErin/M\nEris/MS\nEritrea/M\nEritrean/SM\nErlang/M\nErlenmeyer/M\nErma/M\nErna/M\nErnest/M\nErnestine/M\nErnesto/M\nErnie/M\nErnst/M\nEros/MS\nErrol/M\nErse/M\nErvIn/M\nErwin/M\nEsau/M\nEscher/M\nEscherichia/M\nEscondido\nEskimo/MS\nEsmeralda/M\nEsperanto/M\nEsperanza/M\nEspinoza/M\nEsq/M\nEsquire/MS\nEssen/M\nEssene/M\nEssequibo/M\nEssex/M\nEssie/M\nEstablishment\nEsteban/M\nEstela/M\nEstella/M\nEstelle/M\nEster/M\nEsterhazy/M\nEstes/M\nEsther/M\nEstonia/M\nEstonian/SM\nEstrada/M\nEthan/M\nEthel/M\nEthelred/M\nEthernet/M\nEthiopia/M\nEthiopian/SM\nEtna/M\nEton/M\nEtruria/M\nEtruscan/M\nEtta/M\nEu/M\nEucharist/MS\nEucharistic\nEuclid/M\nEugene/M\nEugenia/M\nEugenie/M\nEugenio/M\nEula/M\nEuler/M\nEumenides/M\nEunice/M\nEuphrates/M\nEur\nEurasia/M\nEurasian/MS\nEuripides/M\nEurodollar/SM\nEuropa/M\nEurope/M\nEuropean/MS\nEurydice/M\nEustachian/M\nEustis/M\nEuterpe/M\nEva/M\nEvan/SM\nEvangelical\nEvangelina/M\nEvangeline/M\nEvangelist/M\nEvans/M\nEvansville/M\nEve/M\nEvelyn/M\nEvenki/M\nEverReady/M\nEverest/M\nEverett/M\nEverette/M\nEverglades/M\nEvert/M\nEvian/M\nEvita/M\nEwing/M\nExcalibur/M\nExcedrin/M\nExcellency/SM\nExchequer\nExercycle/M\nExocet/M\nExodus/M\nExxon/M\nEyck/M\nEyre/M\nEysenck/M\nEzekiel/M\nEzra/M\nF/MD\nFAA\nFAQ/SM\nFBI/M\nFCC\nFD\nFDA\nFDIC/M\nFDR/M\nFHA/M\nFICA/M\nFIFO\nFL\nFM/SM\nFNMA/M\nFOFL\nFORTRAN/M\nFPO\nFSF/M\nFSLIC\nFTC\nFUD/S\nFWD\nFWIW\nFY\nFYI\nFaberge/M\nFabian/MS\nFacebook/M\nFaeroe/M\nFafnir/M\nFagin/M\nFahd/M\nFahrenheit/M\nFairbanks/M\nFairfield/M\nFairhope/M\nFaisal/M\nFaisalabad/M\nFaith/M\nFajardo/M\nFalasha/M\nFalkland/SM\nFalklands/M\nFallopian/M\nFalstaff/M\nFalwell/M\nFannie/M\nFanny/M\nFaraday/M\nFargo/M\nFarley/M\nFarmer/M\nFarmington/M\nFarragut/M\nFarrakhan/M\nFarrell/M\nFarrow/M\nFarsi/M\nFassbinder/M\nFatah/M\nFates/M\nFather/SM\nFatima/M\nFatimid/M\nFaulkner/M\nFaulknerian/M\nFauntleroy/M\nFaust/M\nFaustian/M\nFaustino/M\nFaustus/M\nFawkes/M\nFay/M\nFaye/M\nFayetteville/M\nFe/M\nFeb/M\nFebruary/SM\nFed/SM\nFedEx/M\nFederal/MS\nFederalist/M\nFederico/M\nFeds/M\nFelecia/M\nFelice/M\nFelicia/M\nFelicity/M\nFelipe/M\nFelix/M\nFellini/M\nFenian/M\nFerber/M\nFerdinand/M\nFergus/M\nFerguson/M\nFerlinghetti/M\nFermat/M\nFermi/M\nFern/M\nFernandez/M\nFernando/M\nFerrari/M\nFerraro/M\nFerrell/M\nFerris/M\nFeynman/M\nFez/M\nFiat/M\nFiberglas/M\nFibonacci/M\nFichte/M\nFidel/M\nFido/M\nFielding/M\nFields/M\nFigaro/M\nFigueroa/M\nFiji/M\nFijian/MS\nFilipino/MS\nFillmore/M\nFilofax/M\nFinch/M\nFinland/M\nFinlay/M\nFinley/M\nFinn/SM\nFinnbogadottir/M\nFinnegan/M\nFinnish/M\nFiona/M\nFirebase/M\nFirefox/M\nFirestone/M\nFischer/M\nFisher/M\nFisk/M\nFitch/M\nFitchburg/M\nFitzgerald/M\nFitzpatrick/M\nFitzroy/M\nFizeau/M\nFla\nFlagstaff/M\nFlanagan/M\nFlanders/M\nFlathead\nFlatt/M\nFlaubert/M\nFleischer/M\nFleming/M\nFlemish/M\nFletcher/M\nFlint/M\nFlintstones/M\nFlo/M\nFlora/M\nFlorence/M\nFlorentine/M\nFlores/M\nFlorida/M\nFloridan/M\nFloridian/SM\nFlorine/M\nFlorsheim/M\nFlory/M\nFlossie/M\nFlowers/M\nFloyd/M\nFlynn/M\nFm/M\nFoch/M\nFokker/M\nFoley/M\nFolgers/M\nFolsom/M\nFomalhaut/M\nFonda/M\nFoosball/M\nForbes/M\nFord/M\nForeman/M\nForest/MR\nForester/M\nFormica/MS\nFormosa/M\nFormosan/M\nForrest/M\nForster/M\nFortaleza/M\nFosse/M\nFoster/M\nFotomat/M\nFoucault/M\nFourier/M\nFourneyron/M\nFourth\nFowler/M\nFox/MS\nFr/MD\nFragonard/M\nFran/M\nFrance/SM\nFrances/M\nFrancesca/M\nFrancine/M\nFrancis/M\nFrancisca/M\nFranciscan/MS\nFrancisco/M\nFranck/M\nFranco/M\nFrancois/M\nFrancoise/M\nFrancophile\nFranglais/M\nFrank/SM\nFrankel/M\nFrankenstein/M\nFrankfort/M\nFrankfurt/MR\nFrankfurter/M\nFrankie/M\nFrankish\nFranklin/M\nFranks/M\nFranny/M\nFranz/M\nFraser/M\nFrau/MN\nFraulein\nFrazier/M\nFred/M\nFreda/M\nFreddie/M\nFreddy/M\nFrederic/M\nFrederick/M\nFredericksburg/M\nFredericton/M\nFredric/M\nFredrick/M\nFreeman/M\nFreemason/SM\nFreemasonry/SM\nFreetown/M\nFreida/M\nFremont/M\nFrench/MS\nFrenchman/M\nFrenchmen/M\nFrenchwoman/M\nFrenchwomen/M\nFreon/M\nFresnel/M\nFresno/M\nFreud/M\nFreudian/M\nFrey/M\nFreya/M\nFri/M\nFriday/SM\nFrieda/M\nFriedan/M\nFriedman/M\nFriedmann/M\nFriend/SM\nFrigga/M\nFrigidaire/M\nFrisbee/M\nFrisco/M\nFrisian/MS\nFrito/M\nFritz/M\nFrobisher/M\nFrodo/M\nFroissart/M\nFromm/M\nFronde/M\nFrontenac/M\nFrost/M\nFrostbelt/M\nFrunze/M\nFry/M\nFrye/M\nFuchs/M\nFuentes/M\nFugger/M\nFuji/M\nFujian/M\nFujitsu/M\nFujiwara/M\nFujiyama/M\nFukuoka/M\nFukuyama/M\nFulani/M\nFulbright/M\nFuller/M\nFullerton/M\nFulton/M\nFunafuti/M\nFundy/M\nFuries/M\nFurman/M\nFurtwangler/M\nFushun/M\nFuzhou/M\nFuzzbuster/M\nG/MNRB\nGA\nGAO\nGATT/M\nGB/M\nGCC/M\nGDP/M\nGE/M\nGED\nGHQ/M\nGHz\nGI\nGIF\nGIGO\nGM/M\nGMAT\nGMO\nGMT/M\nGNP/M\nGNU/M\nGOP/M\nGP/M\nGPA\nGPO\nGPS\nGPU\nGSA\nGTE/M\nGU\nGUI/M\nGa/M\nGable/M\nGabon/M\nGabonese/M\nGaborone/M\nGabriel/M\nGabriela/M\nGabrielle/M\nGacrux/M\nGadsden/M\nGaea/M\nGael/SM\nGaelic/M\nGagarin/M\nGage/M\nGaia/M\nGail/M\nGaiman/M\nGaines/M\nGainesville/M\nGainsborough/M\nGalahad/SM\nGalapagos/M\nGalatea/M\nGalatia/M\nGalatians/M\nGalaxy\nGalbraith/M\nGale/M\nGalen/M\nGalibi/M\nGalilean/SM\nGalilee/M\nGalileo/M\nGall/M\nGallagher/M\nGallegos/M\nGallic/M\nGallicism/SM\nGallo/M\nGalloway/M\nGallup/M\nGalois/M\nGalsworthy/M\nGalvani/M\nGalveston/M\nGama\nGamay/M\nGambia/M\nGambian/SM\nGamble/M\nGamow/M\nGandalf/M\nGandhi/M\nGandhian/M\nGanesha/M\nGanges/M\nGangtok/M\nGansu/M\nGantry/M\nGanymede/M\nGap/M\nGarbo/M\nGarcia/M\nGardner/M\nGareth/M\nGarfield/M\nGarfunkel/M\nGargantua/M\nGaribaldi/M\nGarland/M\nGarner/M\nGarrett/M\nGarrick/M\nGarrison/M\nGarry/M\nGarth/M\nGarvey/M\nGary/M\nGarza/M\nGascony/M\nGasser/M\nGastonia/M\nGastroenterology\nGates/M\nGatling/M\nGatorade/M\nGatsby/M\nGatun/M\nGauguin/M\nGaul/SM\nGaulish\nGauss/M\nGaussian/M\nGautama/M\nGautier/M\nGavin/M\nGawain/M\nGay/M\nGayle/M\nGaza/M\nGaziantep/M\nGd/M\nGdansk/M\nGe/M\nGeffen/M\nGehenna/M\nGehrig/M\nGeiger/M\nGelbvieh/M\nGeller/M\nGemini/MS\nGen/M\nGena/M\nGenaro/M\nGene/M\nGenesis/M\nGenet/M\nGeneva/M\nGenevieve/M\nGenghis/M\nGenoa/SM\nGentoo/M\nGentry/M\nGeo/M\nGeoffrey/M\nGeorge/MS\nGeorgetown/M\nGeorgette/M\nGeorgia/M\nGeorgian/MS\nGeorgina/M\nGer/M\nGerald/M\nGeraldine/M\nGerard/M\nGerardo/M\nGerber/M\nGere/M\nGeritol/M\nGerman/MS\nGermanic/M\nGermany/M\nGeronimo/M\nGerry/M\nGershwin/M\nGertrude/M\nGestapo/SM\nGethsemane/M\nGetty/M\nGettysburg/M\nGewurztraminer/M\nGhana/M\nGhanaian\nGhats/M\nGhazvanid/M\nGhent/M\nGhibelline/M\nGiacometti/M\nGiannini/M\nGiauque/M\nGibbon/M\nGibbs/M\nGibraltar/MS\nGibson/M\nGide/M\nGideon/M\nGielgud/M\nGienah/M\nGil/M\nGila/M\nGilbert/M\nGilberto/M\nGilchrist/M\nGilda/M\nGilead/M\nGiles/M\nGilgamesh/M\nGill/M\nGillespie/M\nGillette/M\nGilliam/M\nGillian/M\nGilligan/M\nGilman\nGilmore/M\nGilroy/M\nGina/M\nGinger/M\nGingrich/M\nGinny/M\nGino/M\nGinsberg/M\nGinsburg/M\nGinsu/M\nGiorgione/M\nGiotto/M\nGiovanni/M\nGiraudoux/M\nGiselle/M\nGish/M\nGitHub/M\nGiuliani/M\nGiuseppe/M\nGiza/M\nGk\nGladstone/MS\nGladys/M\nGlaser/M\nGlasgow/M\nGlass/M\nGlastonbury/M\nGlaswegian/SM\nGlaxo/M\nGleason/M\nGlen/M\nGlenda/M\nGlendale\nGlenlivet/M\nGlenn/M\nGlenna/M\nGloria/M\nGloucester/M\nGlover/M\nGnostic/M\nGnosticism/M\nGnuPG\nGoa/M\nGobi/M\nGod/M\nGodard/M\nGoddard/M\nGodel/M\nGodhead/M\nGodiva/M\nGodot/M\nGodspeed/SM\nGodthaab/M\nGodunov/M\nGodzilla/M\nGoebbels/M\nGoering/M\nGoethals/M\nGoethe/M\nGoff/M\nGog/M\nGogol/M\nGoiania/M\nGolan/M\nGolconda/M\nGolda/M\nGoldberg/M\nGolden/M\nGoldie/M\nGoldilocks/M\nGolding/M\nGoldman/M\nGoldsboro/M\nGoldsmith/M\nGoldwater/M\nGoldwyn/M\nGolgi/M\nGolgotha/M\nGoliath/M\nGomez/M\nGomorrah/M\nGompers/M\nGomulka/M\nGondwanaland/M\nGonzales/M\nGonzalez/M\nGonzalo/M\nGood/M\nGoodall/M\nGoode/M\nGoodman/M\nGoodrich/M\nGoodwill/M\nGoodwin/M\nGoodyear/M\nGoogle/M\nGoolagong/M\nGopher\nGorbachev/M\nGordian/M\nGordimer/M\nGordon/M\nGore/M\nGoren/M\nGorey/M\nGorgas/M\nGorgon/M\nGorgonzola/M\nGorky/M\nGospel/MS\nGoteborg/M\nGoth/M\nGotham/M\nGothic/MS\nGoths\nGouda/SM\nGould/M\nGounod/M\nGovernor\nGoya/M\nGr/B\nGrable/M\nGracchus/M\nGrace/M\nGraceland/M\nGracie/M\nGraciela/M\nGrady/M\nGraffias/M\nGrafton/M\nGraham/M\nGrahame/M\nGrail/M\nGrammy/M\nGrampians/M\nGranada/M\nGrant/M\nGrass/M\nGraves/M\nGray/M\nGrayslake/M\nGrecian/M\nGreece/M\nGreek/SM\nGreeley/M\nGreen/SM\nGreene/M\nGreenland/M\nGreenlandic\nGreenpeace/M\nGreensboro/M\nGreensleeves/M\nGreenspan/M\nGreenville/M\nGreenwich/M\nGreer/M\nGreg/M\nGregg/M\nGregorian/M\nGregorio/M\nGregory/M\nGrenada/M\nGrenadian/MS\nGrenadines/M\nGrendel/M\nGrenoble/M\nGresham/M\nGreta/M\nGretchen/M\nGretel/M\nGretzky/M\nGrey/M\nGrieg/M\nGriffin/M\nGriffith/M\nGrimes/M\nGrimm/M\nGrinch/M\nGris/M\nGromyko/M\nGropius/M\nGross/M\nGrosz/M\nGrotius/M\nGrover/M\nGrozny\nGrumman/M\nGrundy/M\nGrunewald/M\nGrus/M\nGruyere/SM\nGuadalajara/M\nGuadalcanal/M\nGuadalquivir/M\nGuadalupe/M\nGuadeloupe/M\nGuallatiri/M\nGuam/M\nGuamanian\nGuangdong/M\nGuangzhou/M\nGuantanamo/M\nGuarani/M\nGuarnieri/M\nGuatemala/M\nGuatemalan/MS\nGuayama/M\nGuayaquil/M\nGucci/M\nGuelph/M\nGuernsey/MS\nGuerra/M\nGuerrero/M\nGuevara/M\nGuggenheim/M\nGuiana/M\nGuido\nGuillermo/M\nGuinea/M\nGuinean/MS\nGuinevere/M\nGuinness/M\nGuiyang/M\nGuizhou/M\nGuizot/M\nGujarat/M\nGujarati/M\nGujranwala/M\nGulfport/M\nGullah/M\nGulliver/M\nGumbel/M\nGunther/M\nGuofeng/M\nGupta/M\nGurkha/M\nGus/M\nGustav/M\nGustavo/M\nGustavus/M\nGutenberg/M\nGuthrie/M\nGutierrez/M\nGuy/M\nGuyana/M\nGuyanese/M\nGuzman/M\nGwalior/M\nGwen/M\nGwendoline/M\nGwendolyn/M\nGwyn/M\nGypsy/SM\nH/M\nHBO/M\nHBase/M\nHDD\nHDMI\nHDTV\nHF/M\nHHS\nHI\nHIV/M\nHM\nHMO/M\nHMS\nHOV\nHP/M\nHPV\nHQ/M\nHR\nHRH\nHS\nHSBC/M\nHST\nHT\nHTML/M\nHTTP\nHUD/M\nHa/M\nHaas/M\nHabakkuk/M\nHaber/M\nHadar/M\nHades/M\nHadoop/M\nHadrian/M\nHafiz/M\nHagar/M\nHagerstown/M\nHaggai/M\nHagiographa/M\nHague/M\nHahn/M\nHaida/SM\nHaifa/M\nHainan/M\nHaiphong/M\nHaiti/M\nHaitian/MS\nHakka/M\nHakluyt/M\nHal/SM\nHaldane/M\nHale/M\nHaleakala/M\nHaley/M\nHalifax/M\nHall/M\nHalley/M\nHalliburton/M\nHallie/M\nHallmark/M\nHalloween/MS\nHallstatt/M\nHalon/M\nHals/M\nHalsey/M\nHam/M\nHaman/M\nHamburg/MS\nHamhung/M\nHamilcar/M\nHamill/M\nHamilton/M\nHamiltonian/M\nHamitic/M\nHamlet/M\nHamlin/M\nHammarskjold/M\nHammerstein/M\nHammett/M\nHammond/M\nHammurabi/M\nHampshire/M\nHampton/M\nHamsun/M\nHan/SM\nHancock/M\nHandel/M\nHandy/M\nHaney/M\nHanford/M\nHangul/M\nHangzhou/M\nHank/M\nHanna/M\nHannah/M\nHannibal/M\nHanoi/M\nHanover/M\nHanoverian/M\nHans/MN\nHansel/M\nHansen/M\nHanson/M\nHanuka\nHanukkah/M\nHanukkahs\nHapsburg/M\nHarare/M\nHarbin/M\nHardin/M\nHarding/M\nHardy/M\nHargreaves/M\nHarlan/M\nHarlem/M\nHarlequin/M\nHarley/M\nHarlingen/M\nHarlow/M\nHarmon/M\nHarold/M\nHarper/M\nHarpy/SM\nHarrell/M\nHarriet/M\nHarriett/M\nHarrington/M\nHarris/M\nHarrisburg/M\nHarrison/M\nHarrisonburg/M\nHarrods/M\nHarry/M\nHart/M\nHarte/M\nHartford/M\nHartline/M\nHartman/M\nHarvard/M\nHarvey/M\nHasbro/M\nHasidim/M\nHaskell/M\nHastings/M\nHatfield/M\nHathaway/M\nHatsheput/M\nHatteras/M\nHattie/M\nHattiesburg/M\nHauptmann/M\nHausa/M\nHausdorff/M\nHavana/MS\nHavarti/M\nHavel/M\nHavoline/M\nHaw\nHawaii/M\nHawaiian/SM\nHawking/M\nHawkins/M\nHawks\nHawthorne/M\nHay/SM\nHayden/M\nHaydn/M\nHayek/M\nHayes/M\nHaynes/M\nHays/M\nHayward/M\nHaywood/M\nHayworth/M\nHazel/M\nHazleton/M\nHazlitt/M\nHe/M\nHead/M\nHearst/M\nHeath/MR\nHeather/M\nHeaviside/M\nHeb\nHebe/M\nHebei/M\nHebert/M\nHebraic/M\nHebraism/SM\nHebrew/MS\nHebrews/M\nHebrides/M\nHecate/M\nHector/M\nHecuba/M\nHeep/M\nHefner/M\nHegel/M\nHegelian/M\nHegira/M\nHeidegger/M\nHeidelberg/M\nHeidi/M\nHeifetz/M\nHeilongjiang/M\nHeimlich/M\nHeine/M\nHeineken/M\nHeinlein/M\nHeinrich/M\nHeinz/M\nHeisenberg/M\nHeisman/M\nHelen/M\nHelena/M\nHelene/M\nHelga/M\nHelicobacter\nHelicon/M\nHeliopolis/M\nHelios/M\nHellene/SM\nHellenic/M\nHellenism/MS\nHellenist\nHellenistic/M\nHellenization/M\nHellenize/M\nHeller/M\nHellespont/M\nHellman/M\nHelmholtz/M\nHeloise/M\nHelsinki/M\nHelvetian\nHelvetius/M\nHemet/M\nHemingway/M\nHenan/M\nHench/M\nHenderson/M\nHendrick/MS\nHendricks/M\nHendrix/M\nHenley/M\nHennessy/M\nHenri/M\nHenrietta/M\nHenrik/M\nHenry/M\nHensley/M\nHenson/M\nHepburn/M\nHephaestus/M\nHepplewhite/M\nHera/M\nHeracles/M\nHeraclitus/M\nHerakles/M\nHerbart/M\nHerbert/M\nHerculaneum/M\nHerculean\nHercules/M\nHerder/M\nHereford/SM\nHerero/M\nHeriberto/M\nHerman/M\nHermaphroditus/M\nHermes/M\nHerminia/M\nHermitage/M\nHermite/M\nHermosillo/M\nHernandez/M\nHerod/M\nHerodotus/M\nHeroku/M\nHerr/MG\nHerrera/M\nHerrick/M\nHerring/M\nHerschel/M\nHersey/M\nHershel/M\nHershey/M\nHertz/M\nHertzsprung/M\nHerzegovina/M\nHerzl/M\nHeshvan/M\nHesiod/M\nHesperia/M\nHesperus/M\nHess/M\nHesse/M\nHessian/M\nHester/M\nHeston/M\nHettie/M\nHewitt/M\nHewlett/M\nHeyerdahl/M\nHeywood/M\nHezbollah/M\nHezekiah/M\nHf/M\nHg/M\nHialeah/M\nHiawatha/M\nHibernia/M\nHibernian\nHickman/M\nHickok/M\nHickory/M\nHicks/M\nHieronymus/M\nHigashiosaka\nHiggins/M\nHighlander/SM\nHighlands\nHighness/M\nHightstown/M\nHilario/M\nHilary/M\nHilbert/M\nHilda/M\nHildebrand/M\nHilfiger/M\nHill/M\nHillary/M\nHillel/M\nHilton/M\nHimalaya/SM\nHimalayan\nHimalayas/M\nHimmler/M\nHinayana/M\nHindemith/M\nHindenburg/M\nHindi/M\nHindu/SM\nHinduism/SM\nHindustan/M\nHindustani/SM\nHines/M\nHinesville/M\nHinton/M\nHipparchus/M\nHippocrates/M\nHippocratic/M\nHiram/M\nHirobumi/M\nHirohito/M\nHiroshima/M\nHispanic/SM\nHispaniola/M\nHiss/M\nHitachi/M\nHitchcock/M\nHitler/MS\nHittite/SM\nHmong/M\nHo/M\nHobart/M\nHobbes/M\nHobbs/M\nHockney/M\nHodge/SM\nHodges/M\nHodgkin/M\nHoff/M\nHoffa/M\nHoffman/M\nHofstadter/M\nHogan/M\nHogarth/M\nHogwarts/M\nHohenlohe/M\nHohenstaufen/M\nHohenzollern/M\nHohhot/M\nHohokam/M\nHokkaido/M\nHokusai/M\nHolbein/M\nHolcomb/M\nHolden/M\nHolder/M\nHoliday/M\nHoliness\nHolland/ZSMR\nHollander/M\nHollerith/M\nHolley/M\nHollie/M\nHollis/M\nHolloway/M\nHolly/M\nHollywood/M\nHolman/M\nHolmes/M\nHolocaust/M\nHolocene/M\nHolst/M\nHolstein/SM\nHolt/M\nHomer/M\nHomeric/M\nHon\nHonda/M\nHonduran/MS\nHonduras/M\nHonecker/M\nHoneywell/M\nHong\nHoniara/M\nHonolulu/M\nHonorable\nHonshu/M\nHood/M\nHooke/RM\nHooker/M\nHooper/M\nHoosier/MS\nHooters/M\nHoover/MS\nHope/M\nHopewell/M\nHopi/SM\nHopkins/M\nHopper/M\nHorace/M\nHoracio/M\nHoratio/M\nHormel/M\nHormuz/M\nHorn/M\nHornblower/M\nHorne/M\nHorowitz/M\nHorthy/M\nHorton/M\nHorus/M\nHosea/M\nHost/SM\nHotpoint/M\nHottentot/SM\nHoudini/M\nHouma/M\nHouse/M\nHousman/M\nHouston/M\nHouyhnhnm/M\nHovhaness/M\nHoward/M\nHowe/M\nHowell/MS\nHowells/M\nHowrah\nHoyle/M\nHrothgar/M\nHts\nHuang/M\nHubbard/M\nHubble/M\nHubei/M\nHuber/M\nHubert/M\nHuck/M\nHuddersfield\nHudson/M\nHuerta/M\nHuey/M\nHuff/M\nHuffman/M\nHuggins/M\nHugh/MS\nHughes/M\nHugo/M\nHuguenot/MS\nHui/M\nHuitzilopotchli/M\nHull/M\nHumberto/M\nHumboldt/M\nHume/M\nHummel/M\nHummer/M\nHumphrey/SM\nHumvee/M\nHun/SM\nHunan/M\nHung/M\nHungarian/SM\nHungary/M\nHunspell/M\nHunt/MR\nHunter/M\nHuntington/M\nHuntley/M\nHuntsville/M\nHurd/M\nHurley/M\nHuron/M\nHurst/M\nHus/M\nHussein/M\nHusserl/M\nHussite/M\nHuston/M\nHutchinson/M\nHutton/M\nHutu/M\nHuxley/M\nHuygens/M\nHyades/M\nHyde/M\nHyderabad/M\nHydra/M\nHymen/M\nHyperion/M\nHyundai/M\nHz/M\nI'd\nI'll\nI'm\nI've\nI/M\nIA\nIBM/M\nICBM/SM\nICC\nICU\nID/SM\nIDE\nIE\nIED\nIEEE\nIKEA/M\nIL\nIMF/M\nIMHO\nIMNSHO\nIMO\nIN\nING/M\nINRI\nINS\nIOU/M\nIP\nIPA\nIPO\nIQ/M\nIRA/SM\nIRC\nIRS/M\nISBN\nISIS\nISO/M\nISP\nISS\nIT\nIUD\nIV/SM\nIVF\nIa\nIaccoca/M\nIago/M\nIan/M\nIapetus/M\nIbadan/M\nIberia/M\nIberian/M\nIbiza/M\nIblis/M\nIbo/M\nIbsen/M\nIcahn/M\nIcarus/M\nIce\nIceland/MRZ\nIcelander/M\nIcelandic/M\nIda/M\nIdaho/SM\nIdahoan/MS\nIdahoes\nIeyasu/M\nIgnacio/M\nIgnatius/M\nIgor/M\nIguassu/M\nIjsselmeer/M\nIke/M\nIkhnaton/M\nIla/M\nIlene/M\nIliad/SM\nIll\nIllinois/M\nIllinoisan/MS\nIlluminati/M\nIlyushin/M\nImelda/M\nImhotep/M\nImodium/M\nImogene/M\nImus/M\nIn/M\nIna/M\nInc\nInca/SM\nInchon/M\nIncorporated\nInd\nIndependence/M\nIndia/M\nIndian/MS\nIndiana/M\nIndianan/SM\nIndianapolis/M\nIndianian\nIndies/M\nIndio/M\nIndira/M\nIndochina/M\nIndochinese/M\nIndonesia/M\nIndonesian/SM\nIndore/M\nIndra/M\nIndus/M\nIndy/SM\nInes/M\nInez/M\nInge/M\nInglewood\nIngram/M\nIngres/M\nIngrid/M\nInnocent/M\nInnsbruck\nInonu/M\nInquisition/M\nInst\nInstagram/M\nInstamatic/M\nIntel/M\nIntelsat/M\nInternationale/M\nInternet/SM\nInterpol/M\nInuit/MS\nInuktitut/M\nInvar/M\nIo/M\nIonesco/M\nIonian/MS\nIonic/SM\nIowa/SM\nIowan/MS\nIphigenia/M\nIpswich\nIqaluit/M\nIqbal/M\nIquitos/M\nIr/M\nIra/M\nIran/M\nIranian/SM\nIraq/M\nIraqi/MS\nIreland/M\nIrene/M\nIris/M\nIrish/MR\nIrishman/M\nIrishmen/M\nIrishwoman/M\nIrishwomen/M\nIrkutsk/M\nIrma/M\nIroquoian/SM\nIroquois/M\nIrrawaddy/M\nIrtish/M\nIrvin/M\nIrvine/M\nIrving/M\nIrwin/M\nIsaac/M\nIsabel/M\nIsabela/M\nIsabella/M\nIsabelle/M\nIsaiah/M\nIscariot/M\nIsfahan/M\nIsherwood/M\nIshim/M\nIshmael/M\nIshtar/M\nIsiah/M\nIsidro/M\nIsis/M\nIslam/MS\nIslamabad/M\nIslamic/M\nIslamism/M\nIslamist/M\nIslamophobia\nIslamophobic\nIsmael/M\nIsmail/M\nIsolde/M\nIspell/M\nIsrael/SM\nIsraeli/SM\nIsraelite/M\nIssac/M\nIssachar/M\nIstanbul/M\nIsuzu/M\nIt\nItaipu/M\nItal\nItalian/SM\nItalianate\nItaly/M\nItasca/M\nIthaca/M\nIthacan/M\nIto/M\nIva/M\nIvan/M\nIvanhoe/M\nIves/M\nIvorian\nIvory/M\nIvy/M\nIyar/M\nIzaak/M\nIzanagi/M\nIzanami/M\nIzhevsk/M\nIzmir/M\nIzod/M\nIzvestia/M\nJ/MD\nJCS\nJD\nJFK/M\nJP\nJPEG\nJV\nJack/M\nJackie/M\nJacklyn/M\nJackson/M\nJacksonian/M\nJacksonville/M\nJacky/M\nJaclyn/M\nJacob/SM\nJacobean/M\nJacobi/M\nJacobin/M\nJacobite/M\nJacobs/M\nJacobson/M\nJacquard/M\nJacqueline/M\nJacquelyn/M\nJacques/M\nJacuzzi/M\nJagger/M\nJagiellon/M\nJaguar/M\nJahangir/M\nJaime/M\nJain/M\nJainism/M\nJaipur/M\nJakarta/M\nJake/M\nJamaal/M\nJamaica/M\nJamaican/SM\nJamal/M\nJamar/M\nJame/SM\nJamel/M\nJames/M\nJamestown/M\nJami/M\nJamie/M\nJan/M\nJana/M\nJanacek/M\nJane/M\nJanell/M\nJanelle/M\nJanesville/M\nJanet/M\nJanette/M\nJanice/M\nJanie/M\nJanine/M\nJanis/M\nJanissary/M\nJanjaweed/M\nJanna/M\nJannie/M\nJansen/M\nJansenist/M\nJanuary/SM\nJanus/M\nJap/SM\nJapan/M\nJapanese/MS\nJapura/M\nJared/M\nJarlsberg/M\nJarred/M\nJarrett/M\nJarrod/M\nJarvis/M\nJasmine/M\nJason/M\nJasper/M\nJataka/M\nJava/SM\nJavaScript/M\nJavanese/M\nJavier/M\nJaxartes/M\nJay/M\nJayapura/M\nJayawardene/M\nJaycee/MS\nJaycees/M\nJayne/M\nJayson/M\nJean/M\nJeanette/M\nJeanie/M\nJeanine/M\nJeanne/M\nJeannette/M\nJeannie/M\nJeannine/M\nJed/M\nJedi/M\nJeep/M\nJeeves/M\nJeff/M\nJefferey/M\nJefferson/M\nJeffersonian/M\nJeffery/M\nJeffrey/M\nJeffry/M\nJehoshaphat/M\nJehovah/M\nJekyll/M\nJenifer/M\nJenkins/M\nJenna/M\nJenner/M\nJennie/M\nJennifer/M\nJennings/M\nJenny/M\nJensen/M\nJephthah/M\nJerald/M\nJeremiah/M\nJeremiahs\nJeremy/M\nJeri/M\nJericho/M\nJermaine/M\nJeroboam/M\nJerold/M\nJerome/M\nJerri/M\nJerrod/M\nJerrold/M\nJerry/M\nJersey/MS\nJerusalem/M\nJess/M\nJesse/M\nJessica/M\nJessie/M\nJesuit/MS\nJesus/M\nJetway/M\nJew/SM\nJewel/M\nJewell/M\nJewess/MS\nJewish/PM\nJewry/M\nJezebel/SM\nJiangsu/M\nJiangxi/M\nJidda/M\nJilin/M\nJill/M\nJillian/M\nJim/M\nJimenez/M\nJimmie/M\nJimmy/M\nJinan/M\nJinnah/M\nJinny/M\nJivaro/M\nJo/M\nJoan/M\nJoann/M\nJoanna/M\nJoanne/M\nJoaquin/M\nJob/SM\nJobs/M\nJocasta/M\nJocelyn/M\nJock/M\nJockey/M\nJodi/M\nJodie/M\nJody/M\nJoe/M\nJoel/M\nJoey/M\nJogjakarta/M\nJohann/M\nJohanna/M\nJohannes/M\nJohannesburg/M\nJohn/SM\nJohnathan/M\nJohnathon/M\nJohnie/M\nJohnnie/M\nJohnny/M\nJohns/M\nJohnson/M\nJohnston/M\nJohnstown/M\nJolene/M\nJolson/M\nJon/M\nJonah/M\nJonahs\nJonas/M\nJonathan/M\nJonathon/M\nJones/M\nJonesboro/M\nJoni/M\nJonson/M\nJoplin/M\nJordan/M\nJordanian/MS\nJorge/M\nJose/M\nJosef/M\nJosefa/M\nJosefina/M\nJoseph/M\nJosephine/M\nJosephs\nJosephson/M\nJosephus/M\nJosh/M\nJoshua/M\nJosiah/M\nJosie/M\nJosue/M\nJoule/M\nJove/M\nJovian/M\nJoy/M\nJoyce/M\nJoycean/M\nJoyner/M\nJpn\nJr/M\nJuan/M\nJuana/M\nJuanita/M\nJuarez/M\nJubal/M\nJudaeo\nJudah/M\nJudaic\nJudaical\nJudaism/MS\nJudas/MS\nJudd/M\nJude/M\nJudea/M\nJudges\nJudith/M\nJudson/M\nJudy/M\nJuggernaut/M\nJul\nJules/M\nJulia/M\nJulian/M\nJuliana/M\nJulianne/M\nJulie/M\nJuliet/M\nJuliette/M\nJulio/M\nJulius/M\nJulliard/M\nJuly/SM\nJun/M\nJune/SM\nJuneau/M\nJung/M\nJungfrau/M\nJungian/M\nJunior/SM\nJunker/SM\nJuno/M\nJupiter/M\nJurassic/M\nJurua/M\nJustice/M\nJustin/M\nJustine/M\nJustinian/M\nJutland/M\nJuvenal/M\nK/SMNGJ\nKB/M\nKC\nKFC/M\nKGB/M\nKIA\nKKK/M\nKO/M\nKP\nKS\nKY\nKaaba/M\nKabul/M\nKafka/M\nKafkaesque/M\nKagoshima/M\nKahlua/M\nKahului/M\nKaifeng/M\nKailua/M\nKaiser/MS\nKaitlin/M\nKalahari/M\nKalamazoo/M\nKalashnikov/M\nKalb/M\nKalevala/M\nKalgoorlie/M\nKali/M\nKalmyk/M\nKama/M\nKamchatka/M\nKamehameha/M\nKampala/M\nKampuchea/M\nKan/SM\nKanchenjunga/M\nKandahar/M\nKandinsky/M\nKane/M\nKaneohe/M\nKankakee/M\nKannada/M\nKano/M\nKanpur/M\nKansan/MS\nKansas/M\nKant/M\nKantian/M\nKaohsiung/M\nKaposi/M\nKara/M\nKarachi/M\nKaraganda/M\nKarakorum/M\nKaramazov/M\nKareem/M\nKaren/M\nKarenina/M\nKari/M\nKarin/M\nKarina/M\nKarl/M\nKarla/M\nKarloff/M\nKaro/M\nKarol/M\nKarroo/M\nKaryn/M\nKasai/M\nKasey/M\nKashmir/SM\nKasparov/M\nKate/M\nKatelyn/M\nKatharine/M\nKatherine/M\nKatheryn/M\nKathiawar/M\nKathie/M\nKathleen/M\nKathmandu/M\nKathrine/M\nKathryn/M\nKathy/M\nKatie/M\nKatina/M\nKatmai/M\nKatowice/M\nKatrina/M\nKaty/M\nKauai/M\nKaufman/M\nKaunas/M\nKaunda/M\nKawabata/M\nKawasaki/M\nKay/M\nKaye/M\nKayla/M\nKazakh/M\nKazakhs\nKazakhstan/M\nKazan/M\nKazantzakis/M\nKb/M\nKeaton/M\nKeats/M\nKeck/M\nKeenan/M\nKeewatin/M\nKeillor/M\nKeisha/M\nKeith/M\nKeller/M\nKelley/M\nKelli/M\nKellie/M\nKellogg/M\nKelly/M\nKelsey/M\nKelvin/M\nKemerovo/M\nKemp/M\nKempis/M\nKen/M\nKendall/M\nKendra/M\nKendrick/M\nKenmore/M\nKennan/M\nKennedy/M\nKenneth/M\nKennewick/M\nKennith/M\nKenny/M\nKenosha/M\nKent/M\nKenton/M\nKentuckian/MS\nKentucky/M\nKenya/M\nKenyan/SM\nKenyatta/M\nKenyon/M\nKeogh/M\nKeokuk/M\nKepler/M\nKerensky/M\nKeri/M\nKermit/M\nKern/M\nKerouac/M\nKerr/M\nKerri/M\nKerry/M\nKettering/M\nKeven/M\nKevin/M\nKevlar/M\nKevorkian/M\nKewpie/M\nKey/M\nKeynes/M\nKeynesian/M\nKhabarovsk/M\nKhachaturian/M\nKhalid/M\nKhan/M\nKharkov/M\nKhartoum/M\nKhayyam/M\nKhazar/M\nKhmer/M\nKhoikhoi/M\nKhoisan/M\nKhomeini/M\nKhorana/M\nKhrushchev/M\nKhufu/M\nKhulna/M\nKhwarizmi/M\nKhyber/M\nKickapoo/M\nKidd/M\nKiel/M\nKierkegaard/M\nKieth/M\nKiev/M\nKigali/M\nKikuyu/M\nKilauea/M\nKilimanjaro/M\nKilleen/M\nKilroy/M\nKim/M\nKimberley/M\nKimberly/M\nKing/M\nKingsport/M\nKingston/M\nKingstown/M\nKinko's\nKinney/M\nKinsey/M\nKinshasa/M\nKiowa/MS\nKip/M\nKipling/M\nKirby/M\nKirchhoff/M\nKirchner/M\nKirghistan/M\nKirghiz/M\nKirghizia/M\nKiribati/M\nKirinyaga/M\nKirk/M\nKirkland/M\nKirkpatrick/M\nKirov/M\nKirsten/M\nKisangani/M\nKishinev/M\nKislev/M\nKissimmee/M\nKissinger/M\nKit/M\nKitakyushu/M\nKitchener/M\nKitty/M\nKiwanis/M\nKlan/M\nKlansman/M\nKlaus/M\nKlee/M\nKleenex/MS\nKlein/M\nKlimt/M\nKline/M\nKlingon/M\nKlondike/MS\nKmart/M\nKnapp/M\nKnesset/M\nKngwarreye/M\nKnickerbocker/M\nKnievel/M\nKnight/M\nKnopf/M\nKnossos/M\nKnowles/M\nKnox/M\nKnoxville/M\nKnudsen/M\nKnuth/M\nKnuths\nKobe/M\nKoch/M\nKochab/M\nKodachrome/M\nKodak/M\nKodaly/M\nKodiak/M\nKoestler/M\nKohinoor/M\nKohl/M\nKoizumi/M\nKojak/M\nKokomo/M\nKolyma/M\nKommunizma/M\nKong/M\nKongo/M\nKonrad/M\nKoontz/M\nKoppel/M\nKoran/MS\nKoranic\nKorea/M\nKorean/SM\nKornberg/M\nKory/M\nKorzybski/M\nKosciusko/M\nKossuth/M\nKosygin/M\nKotlin/M\nKoufax/M\nKowloon/M\nKr/M\nKraft/M\nKrakatoa/M\nKrakow/M\nKramer/M\nKrasnodar/M\nKrasnoyarsk/M\nKrebs/M\nKremlin/M\nKremlinologist\nKremlinology\nKresge/M\nKringle/M\nKris/M\nKrishna/M\nKrishnamurti/M\nKrista/M\nKristen/M\nKristi/M\nKristie/M\nKristin/M\nKristina/M\nKristine/M\nKristopher/M\nKristy/M\nKroc/M\nKroger/M\nKronecker/M\nKropotkin/M\nKruger/M\nKrugerrand/M\nKrupp/M\nKrystal/M\nKshatriya/M\nKublai/M\nKubrick/M\nKuhn/M\nKuibyshev/M\nKulthumm/M\nKunming/M\nKuomintang/M\nKurd/M\nKurdish/M\nKurdistan/M\nKurosawa/M\nKurt/M\nKurtis/M\nKusch/M\nKutuzov/M\nKuwait/M\nKuwaiti/SM\nKuznets/M\nKuznetsk/M\nKwakiutl/M\nKwan/M\nKwangju/M\nKwanzaa/MS\nKy/MH\nKyle/M\nKyoto/M\nKyrgyzstan/M\nKyushu/M\nL'Amour/M\nL'Enfant\nL'Oreal/M\nL'Ouverture/M\nL/MN\nLA\nLAN/M\nLBJ/M\nLC\nLCD/M\nLCM\nLDC\nLED/M\nLG/M\nLGBT\nLIFO\nLL\nLLB/M\nLLD/M\nLNG\nLOGO\nLP/M\nLPG\nLPN/SM\nLSAT\nLSD/M\nLVN\nLa/SM\nLab\nLaban/M\nLabrador/SM\nLabradorean\nLacey/M\nLachesis/M\nLactobacillus\nLacy/M\nLadoga/M\nLadonna/M\nLady/M\nLadyship/MS\nLafayette/M\nLafitte/M\nLagos/M\nLagrange/M\nLagrangian/M\nLahore/M\nLaius/M\nLajos/M\nLakeisha/M\nLakeland/M\nLakewood\nLakisha/M\nLakota/M\nLakshmi/M\nLamaism/SM\nLamar/M\nLamarck/M\nLamaze/M\nLamb/M\nLambert/M\nLamborghini/M\nLambrusco/M\nLamentations\nLamont/M\nLana/M\nLanai/M\nLancashire/M\nLancaster/M\nLance/M\nLancelot/M\nLand/M\nLandon/M\nLandry/M\nLandsat/M\nLandsteiner/M\nLane/M\nLang/M\nLangerhans/M\nLangland/M\nLangley/M\nLangmuir/M\nLanka/M\nLankan/M\nLanny/M\nLansing/M\nLanzhou/M\nLao/SM\nLaocoon/M\nLaos/M\nLaotian/SM\nLaplace/M\nLaplacian\nLapland/MR\nLapp/SM\nLara/M\nLaramie/M\nLardner/M\nLaredo/M\nLarousse/M\nLarry/M\nLars/MN\nLarsen/M\nLarson/M\nLascaux/M\nLassa/M\nLassen/M\nLassie/M\nLat/M\nLatasha/M\nLateran/M\nLatham/M\nLatin/MRS\nLatina\nLatino/SM\nLatisha/M\nLatonya/M\nLatoya/M\nLatrobe/M\nLatvia/M\nLatvian/MS\nLaud/MR\nLauder/M\nLaue/M\nLaundromat/M\nLaura/M\nLaurasia/M\nLaurel/M\nLauren/M\nLaurence/M\nLaurent/M\nLauri/M\nLaurie/M\nLaval/M\nLavern/M\nLaverne/M\nLavoisier/M\nLavonne/M\nLawanda/M\nLawrence/M\nLawson/M\nLawton/M\nLayamon/M\nLayla/M\nLayton/M\nLazaro/M\nLazarus/M\nLe/SM\nLea/M\nLeach/M\nLeadbelly/M\nLeah/M\nLeakey/M\nLean/M\nLeander/M\nLeann/M\nLeanna/M\nLeanne/M\nLear/M\nLearjet/M\nLeary/M\nLeavenworth/M\nLebanese/M\nLebanon/M\nLebesgue/M\nLeblanc/M\nLeda/M\nLederberg/M\nLee/M\nLeeds/M\nLeesburg/M\nLeeuwenhoek/M\nLeeward/M\nLeft\nLegendre/M\nLeger/M\nLeghorn/M\nLego/M\nLegree/M\nLehman/M\nLeibniz/M\nLeicester/SM\nLeiden/M\nLeif/M\nLeigh/M\nLeila/M\nLeipzig/M\nLela/M\nLeland/M\nLelia/M\nLemaitre/M\nLemuel/M\nLemuria/M\nLen/M\nLena/M\nLenard/M\nLenin/M\nLeningrad/M\nLeninism/M\nLeninist/M\nLennon/M\nLenny/M\nLeno/M\nLenoir/M\nLenora/M\nLenore/M\nLent/SMN\nLenten/M\nLeo/SM\nLeola/M\nLeominster/M\nLeon/M\nLeona/M\nLeonard/M\nLeonardo/M\nLeoncavallo/M\nLeonel/M\nLeonid/M\nLeonidas/M\nLeonor/M\nLeopold/M\nLeopoldo/M\nLepidus/M\nLepke/M\nLepus/M\nLerner/M\nLeroy/M\nLes/M\nLesa/M\nLesley/M\nLeslie/M\nLesotho/M\nLesseps/M\nLessie/M\nLester/M\nLestrade/M\nLeta/M\nLetha/M\nLethe/M\nLeticia/M\nLetitia/M\nLetterman/M\nLevant/M\nLevesque/M\nLevi/SM\nLeviathan/M\nLevine/M\nLeviticus/M\nLevitt/M\nLevy/M\nLew/M\nLewinsky/M\nLewis/M\nLewiston/M\nLewisville/M\nLexington/M\nLexus/M\nLhasa/MS\nLhotse/M\nLi/MY\nLiaoning/M\nLibby/M\nLiberace/M\nLiberal\nLiberia/M\nLiberian/SM\nLibra/MS\nLibreOffice/M\nLibreville/M\nLibrium/M\nLibya/M\nLibyan/SM\nLichtenstein/M\nLidia/M\nLie/M\nLieberman/M\nLiebfraumilch/M\nLiechtenstein/ZMR\nLiechtensteiner/M\nLiege/M\nLieut\nLila/M\nLilia/M\nLilian/M\nLiliana/M\nLilith/M\nLiliuokalani/M\nLille/M\nLillian/M\nLillie/M\nLilliput/M\nLilliputian/MS\nLilly/M\nLilongwe/M\nLily/M\nLima/M\nLimbaugh/M\nLimbo\nLimburger/M\nLimoges/M\nLimousin/M\nLimpopo/M\nLin/M\nLina/M\nLincoln/MS\nLind/M\nLinda/M\nLindbergh/M\nLindsay/M\nLindsey/M\nLindy/M\nLinnaeus/M\nLinotype/M\nLinton/M\nLinus/M\nLinux/MS\nLinwood/M\nLionel/M\nLipizzaner/M\nLippi/M\nLippmann/M\nLipscomb/M\nLipton/M\nLisa/M\nLisbon/M\nLissajous/M\nLister/M\nListerine/M\nListon/M\nLiszt/M\nLithuania/M\nLithuanian/MS\nLittle/M\nLitton/M\nLivermore/M\nLiverpool/M\nLiverpudlian/SM\nLivia/M\nLivingston/M\nLivingstone/M\nLivonia/M\nLivy/M\nLiz/M\nLiza/M\nLizzie/M\nLizzy/M\nLjubljana/M\nLlewellyn/M\nLloyd/M\nLn\nLoafer/SM\nLobachevsky/M\nLochinvar/M\nLocke/M\nLockean/M\nLockheed/M\nLockwood/M\nLodge/M\nLodi/M\nLodz/M\nLoewe/M\nLoewi/M\nLoews/M\nLogan/M\nLohengrin/M\nLoire/M\nLois/M\nLoki/M\nLola/M\nLolita/M\nLollard/M\nLollobrigida/M\nLombard/M\nLombardi/M\nLombardy/M\nLome/M\nLompoc/M\nLon/M\nLondon/MRZ\nLondoner/M\nLong/M\nLongfellow/M\nLongmont/M\nLongstreet/M\nLongueuil\nLongview/M\nLonnie/M\nLopez/M\nLora/M\nLorain/M\nLoraine/M\nLord/SM\nLordship/SM\nLorelei/M\nLoren/M\nLorena/M\nLorene/M\nLorentz/M\nLorentzian\nLorenz/M\nLorenzo/M\nLoretta/M\nLori/M\nLorie/M\nLorna/M\nLorraine/M\nLorre/M\nLorrie/M\nLos\nLot/M\nLothario/SM\nLott/M\nLottie/M\nLou/M\nLouella/M\nLouie/M\nLouis/M\nLouisa/M\nLouise/M\nLouisiana/M\nLouisianan/MS\nLouisianian/MS\nLouisville/M\nLourdes/M\nLouvre/M\nLove/M\nLovecraft/M\nLovelace/M\nLowe/M\nLowell/M\nLowenbrau/M\nLowery/M\nLowlands\nLoyang/M\nLoyd/M\nLoyola/M\nLr\nLt\nLtd\nLu/M\nLuanda/M\nLuann/M\nLubavitcher/M\nLubbock/M\nLubumbashi/M\nLucas/M\nLuce/M\nLucia/M\nLucian/M\nLuciano/M\nLucien/M\nLucifer/M\nLucile/M\nLucille/M\nLucinda/M\nLucio/M\nLucite/SM\nLucius/M\nLucknow/M\nLucretia/M\nLucretius/M\nLucy/M\nLuddite/MS\nLudhiana/M\nLudwig/M\nLuella/M\nLufthansa/M\nLuftwaffe/M\nLuger/M\nLugosi/M\nLuigi/M\nLuis/M\nLuisa/M\nLuke/M\nLula/M\nLully/M\nLulu/M\nLumiere/M\nLuna/M\nLupe/M\nLupercalia/M\nLupus/M\nLuria/M\nLusaka/M\nLusitania/M\nLuther/M\nLutheran/SM\nLutheranism/MS\nLuvs/M\nLuxembourg/ZMR\nLuxembourger/M\nLuxembourgian\nLuz/M\nLuzon/M\nLvov/M\nLyX/M\nLyallpur\nLycra/M\nLycurgus/M\nLydia/M\nLydian/SM\nLyell/M\nLyle/M\nLyly/M\nLyman/M\nLyme/M\nLynch/M\nLynchburg/M\nLynda/M\nLyndon/M\nLynette/M\nLynn/M\nLynne/M\nLynnette/M\nLyon/SM\nLyons/M\nLyra/M\nLysenko/M\nLysistrata/M\nLysol/M\nM/SMGB\nMA/M\nMASH\nMB/M\nMBA/M\nMC\nMCI/M\nMD/M\nMDT\nME\nMEGO/S\nMFA/M\nMGM/M\nMHz\nMI/M\nMIA\nMIDI/M\nMIPS\nMIRV\nMIT/M\nMM\nMN\nMO\nMOOC\nMP/M\nMPEG\nMRI/M\nMS/M\nMSG/M\nMST/M\nMSW\nMT/M\nMTV/M\nMVP/M\nMW\nMaalox/M\nMabel/M\nMable/M\nMac/M\nMacArthur/M\nMacBride/M\nMacDonald/M\nMacLeish/M\nMacao/M\nMacaulay/M\nMacbeth/M\nMaccabees\nMaccabeus/M\nMace/M\nMacedon/M\nMacedonia/M\nMacedonian/SM\nMach/M\nMachiavelli/M\nMachiavellian/M\nMacias/M\nMacintosh/M\nMack/M\nMackenzie/M\nMackinac/M\nMackinaw/M\nMacmillan/M\nMacon/M\nMacumba/M\nMacy/M\nMadagascan/SM\nMadagascar/M\nMadam\nMadden/M\nMaddox/M\nMadeira/SM\nMadeleine/M\nMadeline/M\nMadelyn/M\nMadera/M\nMadge/M\nMadison/M\nMadonna/SM\nMadras/M\nMadrid/M\nMadurai/M\nMae/M\nMaeterlinck/M\nMafia/MS\nMafioso/M\nMagdalena/M\nMagdalene/M\nMagellan/M\nMagellanic/M\nMaggie/M\nMaghreb/M\nMagi\nMaginot/M\nMagnificat\nMagnitogorsk/M\nMagog/M\nMagoo/M\nMagritte/M\nMagsaysay/M\nMagus\nMagyar/SM\nMahabharata/M\nMaharashtra/M\nMahavira/M\nMahayana/M\nMahayanist/M\nMahdi/M\nMahfouz/M\nMahican/SM\nMahler/M\nMai/M\nMaidenform/M\nMaigret/M\nMailer/M\nMaillol/M\nMaiman/M\nMaimonides/M\nMaine/MZR\nMainer/M\nMaisie/M\nMaitreya/M\nMaj\nMajesty\nMajor/M\nMajorca/M\nMajuro/M\nMakarios/M\nMaker/M\nMalabar/M\nMalabo/M\nMalacca/M\nMalachi/M\nMalagasy/M\nMalamud/M\nMalaprop/M\nMalawi/M\nMalawian/SM\nMalay/MS\nMalaya/M\nMalayalam/M\nMalayan/MS\nMalaysia/M\nMalaysian/MS\nMalcolm/M\nMaldive/MS\nMaldives/M\nMaldivian/MS\nMaldonado/M\nMale/M\nMali/M\nMalian/SM\nMalibu/M\nMalinda/M\nMalinowski/M\nMallarme/M\nMallomars/M\nMallory/M\nMalone/M\nMalory/M\nMalplaquet/M\nMalraux/M\nMalta/M\nMaltese/M\nMalthus/M\nMalthusian/SM\nMameluke/M\nMamet/M\nMamie/M\nMamore/M\nMan/M\nManagua/M\nManama/M\nManasseh/M\nManchester/M\nManchu/SM\nManchuria/M\nManchurian/M\nMancini/M\nMancunian/MS\nMandalay/M\nMandarin/M\nMandela/M\nMandelbrot/M\nMandeville/M\nMandingo/M\nMandrell/M\nMandy/M\nManet/M\nManfred/M\nManhattan/SM\nMani/M\nManichean/M\nManila/SM\nManitoba/M\nManitoulin/M\nMankato/M\nManley/M\nMann/GM\nMannheim/M\nManning/M\nMansfield/M\nManson/M\nManteca/M\nMantegna/M\nMantle/M\nManuel/M\nManuela/M\nManx/M\nMao/M\nMaoism/SM\nMaoist/SM\nMaori/MS\nMapplethorpe/M\nMaputo/M\nMar/SM\nMara/M\nMaracaibo/M\nMarat/M\nMaratha/M\nMarathi/M\nMarathon/M\nMarc/M\nMarceau/M\nMarcel/M\nMarcelino/M\nMarcella/M\nMarcelo/M\nMarch/MS\nMarci/M\nMarcia/M\nMarciano/M\nMarcie/M\nMarco/MS\nMarconi/M\nMarcos/M\nMarcus/M\nMarcuse\nMarcy/M\nMarduk/M\nMargaret/M\nMargarita/M\nMargarito/M\nMarge/M\nMargery/M\nMargie/M\nMargo/M\nMargot\nMargret/M\nMargrethe/M\nMarguerite/M\nMari/SM\nMaria/M\nMariaDB/M\nMarian/M\nMariana/SM\nMarianas/M\nMarianne/M\nMariano/M\nMaribel/M\nMaricela/M\nMarie/M\nMarietta/M\nMarilyn/M\nMarin/M\nMarina/M\nMarine/SM\nMario/M\nMarion/M\nMaris/M\nMarisa/M\nMarisol/M\nMarissa/M\nMaritain/M\nMaritza/M\nMariupol\nMarius/M\nMarjorie/M\nMarjory/M\nMark/SM\nMarkab/M\nMarkham/M\nMarkov/M\nMarks/M\nMarla/M\nMarlboro/M\nMarlborough/M\nMarlene/M\nMarley/M\nMarlin/M\nMarlon/M\nMarlowe/M\nMarmara/M\nMarne/M\nMaronite/M\nMarple/M\nMarquesas/M\nMarquette/M\nMarquez/M\nMarquis/M\nMarquita/M\nMarrakesh/M\nMarriott/M\nMars/MS\nMarsala/M\nMarseillaise/MS\nMarseilles/M\nMarsh/M\nMarsha/M\nMarshall/M\nMarta/M\nMartel/M\nMartha/M\nMartial/M\nMartian/SM\nMartin/M\nMartina/M\nMartinez/M\nMartinique/M\nMarty/M\nMarva/M\nMarvell/M\nMarvin/M\nMarx/M\nMarxian\nMarxism/SM\nMarxist/SM\nMary/M\nMaryann/M\nMaryanne/M\nMaryellen/M\nMaryland/MR\nMarylander/M\nMarylou/M\nMarysville/M\nMasada/M\nMasai/M\nMasaryk/M\nMascagni/M\nMasefield/M\nMaserati/M\nMaseru/M\nMashhad/M\nMason/MS\nMasonic/M\nMasonite/M\nMass/MS\nMassachusetts/M\nMassasoit/M\nMassenet/M\nMassey/M\nMaster/S\nMasterCard/M\nMasters/M\nMather/M\nMatheson/M\nMathew/SM\nMathews/M\nMathewson/M\nMathias/M\nMathis/M\nMatilda/M\nMatisse/M\nMatlab/M\nMatt/M\nMattel/M\nMatterhorn/M\nMatthew/SM\nMatthews/M\nMatthias/M\nMattie/M\nMaud/M\nMaude/M\nMaugham/M\nMaui/M\nMauldin/M\nMaupassant/M\nMaura/M\nMaureen/M\nMauriac/M\nMaurice/M\nMauricio/M\nMaurine/M\nMauritania/M\nMauritanian/SM\nMauritian/SM\nMauritius/M\nMauro/M\nMaurois/M\nMauryan/M\nMauser/M\nMavis/M\nMax/M\nMaximilian/M\nMaxine/M\nMaxwell/M\nMay/SMR\nMaya/SM\nMayan/MS\nMayer/M\nMayfair/M\nMayflower/M\nMaynard/M\nMayo/M\nMaypole\nMayra/M\nMays/M\nMaytag/M\nMazama/M\nMazarin/M\nMazatlan/M\nMazda/M\nMazola/M\nMazzini/M\nMb/M\nMbabane/M\nMbini/M\nMcAdam/M\nMcAllen/M\nMcBride/M\nMcCain/M\nMcCall/M\nMcCarthy/M\nMcCarthyism/M\nMcCartney/M\nMcCarty/M\nMcClain/M\nMcClellan/M\nMcClure/M\nMcConnell/M\nMcCormick/M\nMcCoy/M\nMcCray/M\nMcCullough/M\nMcDaniel/M\nMcDonald/M\nMcDonnell/M\nMcDowell/M\nMcEnroe/M\nMcFadden/M\nMcFarland/M\nMcGee/M\nMcGovern/M\nMcGowan/M\nMcGuffey/M\nMcGuire/M\nMcHenry/M\nMcIntosh/M\nMcIntyre/M\nMcJob\nMcKay/M\nMcKee/M\nMcKenzie/M\nMcKinley/M\nMcKinney/M\nMcKnight/M\nMcLaughlin/M\nMcLean/M\nMcLeod/M\nMcLuhan/M\nMcMahon/M\nMcMillan/M\nMcNamara/M\nMcNaughton/M\nMcNeil/M\nMcPherson/M\nMcQueen/M\nMcVeigh/M\nMd/M\nMe\nMead/M\nMeade/M\nMeadows/M\nMeagan/M\nMeany/M\nMecca/MS\nMedan/M\nMedea/M\nMedellin/M\nMedford/M\nMedia/M\nMedicaid/SM\nMedicare/SM\nMedici/M\nMedina/M\nMediterranean/MS\nMedusa/M\nMeg/M\nMegan/M\nMeghan/M\nMeier/M\nMeighen/M\nMeiji/M\nMeir/M\nMejia/M\nMekong/M\nMel/M\nMelanesia/M\nMelanesian/M\nMelanie/M\nMelba/M\nMelbourne/M\nMelchior/M\nMelchizedek/M\nMelendez/M\nMelinda/M\nMelisa/M\nMelisande/M\nMelissa/M\nMellon/M\nMelody/M\nMelpomene/M\nMelton/M\nMelva/M\nMelville/M\nMelvin/M\nMemcached/M\nMemling/M\nMemphis/M\nMenander/M\nMencius/M\nMencken/M\nMendel/M\nMendeleev/M\nMendelian/M\nMendelssohn/M\nMendez/M\nMendocino/M\nMendoza/M\nMenelaus/M\nMenelik/M\nMenes/M\nMengzi\nMenifee/M\nMenkalinan/M\nMenkar/M\nMenkent/M\nMennen/M\nMennonite/MS\nMenominee/M\nMenotti/M\nMensa/M\nMentholatum/M\nMenuhin/M\nMenzies/M\nMephisto\nMephistopheles/M\nMerak/M\nMercado/M\nMercator/M\nMerced/M\nMercedes/M\nMercer/M\nMercia/M\nMerck/M\nMercurochrome/M\nMercury/SM\nMeredith/M\nMerino/M\nMerle/M\nMerlin/M\nMerlot/M\nMerovingian/M\nMerriam/M\nMerrick/M\nMerrill/M\nMerrimack/M\nMerritt/M\nMerthiolate/M\nMerton/M\nMervin/M\nMesa/M\nMesabi/M\nMesmer/M\nMesolithic/M\nMesopotamia/M\nMesopotamian\nMesozoic/M\nMesserschmidt/M\nMessiaen/M\nMessiah/M\nMessiahs\nMessianic\nMessieurs\nMetallica/M\nMetamucil/M\nMethodism/SM\nMethodist/SM\nMethuselah/M\nMetternich/M\nMeuse/M\nMex\nMexicali/M\nMexican/MS\nMexico/M\nMeyer/MS\nMeyerbeer/M\nMeyers/M\nMfume/M\nMg/M\nMgr\nMiG/M\nMia/M\nMiami/MS\nMiaplacidus/M\nMicah/M\nMicawber/M\nMich/M\nMichael/M\nMichaelmas/MS\nMicheal/M\nMichel/M\nMichelangelo/M\nMichele/M\nMichelin/M\nMichelle/M\nMichelob/M\nMichelson/M\nMichigan/M\nMichigander/MS\nMichiganite\nMick/M\nMickey/M\nMickie/M\nMicky/M\nMicmac/SM\nMicronesia/M\nMicronesian/M\nMicrosoft/M\nMidas/M\nMiddleton/M\nMiddletown/M\nMideast\nMideastern\nMidland/MS\nMidway/M\nMidwest/M\nMidwestern/MR\nMiguel/M\nMike/M\nMikhail/M\nMikoyan/M\nMilagros/M\nMilan/M\nMilanese\nMildred/M\nMiles/M\nMilford/M\nMilken/M\nMill/SMR\nMillard/M\nMillay/M\nMiller/M\nMillet/M\nMillicent/M\nMillie/M\nMillikan/M\nMills/M\nMilne/M\nMilo/M\nMilosevic/M\nMilquetoast/M\nMiltiades/M\nMilton/M\nMiltonian\nMiltonic/M\nMiltown/M\nMilwaukee/M\nMimi/M\nMimosa/M\nMin/M\nMinamoto/M\nMindanao/M\nMindoro/M\nMindy/M\nMinerva/M\nMing/M\nMingus/M\nMinn\nMinneapolis/M\nMinnelli/M\nMinnesota/M\nMinnesotan/SM\nMinnie/M\nMinoan/MS\nMinolta/M\nMinos/M\nMinot/M\nMinotaur/M\nMinsk/M\nMinsky/M\nMintaka/M\nMinuit/M\nMinuteman/M\nMiocene/M\nMir/M\nMira/M\nMirabeau/M\nMirach/M\nMiranda/M\nMirfak/M\nMiriam/M\nMiro/M\nMirzam/M\nMiskito/M\nMiss\nMississauga/M\nMississippi/M\nMississippian/SM\nMissoula/M\nMissouri/M\nMissourian/MS\nMissy/M\nMistassini/M\nMister\nMistress\nMisty/M\nMitch/M\nMitchel/M\nMitchell/M\nMitford/M\nMithra/M\nMithridates/M\nMitsubishi/M\nMitterrand/M\nMitty/M\nMitzi/M\nMixtec/M\nMizar/M\nMk\nMlle\nMme/S\nMn/M\nMnemosyne/M\nMo/M\nMobil/M\nMobile/M\nMobutu/M\nModesto/M\nModigliani/M\nMoe/M\nMoet/M\nMogadishu/M\nMogul/MS\nMohacs/M\nMohamed/M\nMohammad/M\nMohammedan/SM\nMohammedanism/SM\nMohave/SM\nMohawk/SM\nMohegan\nMoho/M\nMohorovicic/M\nMoira/M\nMoises/M\nMoiseyev/M\nMojave/SM\nMoldavia/M\nMoldavian\nMoldova/M\nMoldovan\nMoliere/M\nMolina/M\nMoll/M\nMollie/M\nMolly/M\nMolnar/M\nMoloch/M\nMolokai/M\nMolotov/M\nMoluccas/M\nMombasa/M\nMon/SM\nMona/M\nMonacan\nMonaco/M\nMondale/M\nMonday/SM\nMondrian/M\nMonegasque/SM\nMonera/M\nMonessen/M\nMonet/M\nMongoDB/M\nMongol/SM\nMongolia/M\nMongolian/SM\nMongolic/M\nMongoloid\nMonica/M\nMonique/M\nMonk/M\nMonmouth/M\nMonongahela/M\nMonroe/M\nMonrovia/M\nMonsanto/M\nMonsieur/M\nMonsignor/SM\nMont/M\nMontague/M\nMontaigne/M\nMontana/M\nMontanan/SM\nMontcalm/M\nMonte/M\nMontenegrin/M\nMontenegro/M\nMonterey/M\nMonterrey/M\nMontesquieu/M\nMontessori/M\nMonteverdi/M\nMontevideo/M\nMontezuma/M\nMontgolfier/M\nMontgomery/M\nMonticello/M\nMontoya/M\nMontpelier/M\nMontrachet/M\nMontreal/M\nMontserrat/M\nMonty/M\nMoody/M\nMoog/M\nMoon/M\nMooney/M\nMoor/SM\nMoore/M\nMoorish/M\nMorales/M\nMoran/M\nMoravia/M\nMoravian/M\nMordred/M\nMore/M\nMoreno/M\nMorgan/SM\nMorgantown/M\nMoriarty/M\nMorin/M\nMorison/M\nMorita/M\nMorley/M\nMormon/SM\nMormonism/SM\nMoro/M\nMoroccan/SM\nMorocco/M\nMoroni/M\nMorpheus/M\nMorphy/M\nMorris/M\nMorrison/M\nMorristown/M\nMorrow/M\nMorse/M\nMort/M\nMortimer/M\nMorton/M\nMosaic/M\nMoscow/M\nMoseley/M\nMoselle/M\nMoses/M\nMosley/M\nMoss/M\nMosul/M\nMotorola/M\nMotown/M\nMotrin/M\nMott/M\nMoulton/M\nMount/M\nMountbatten/M\nMountie/MS\nMoussorgsky/M\nMouthe/M\nMouton/M\nMowgli/M\nMozambican/SM\nMozambique/M\nMozart/M\nMozilla/M\nMr/SM\nMs/S\nMsgr\nMt\nMuawiya/M\nMubarak/M\nMueller/M\nMuenster/MS\nMugabe/M\nMuhammad/M\nMuhammadan/MS\nMuhammadanism/SM\nMuir/M\nMujib/M\nMulder/M\nMullen/M\nMuller/M\nMulligan/M\nMullikan/M\nMullins/M\nMulroney/M\nMultan/M\nMultics\nMumbai/M\nMumford/M\nMunch/M\nMunchhausen/M\nMuncie/M\nMunich/M\nMunoz/M\nMunro/M\nMunster/M\nMuppet/M\nMurasaki/M\nMurat/M\nMurchison/M\nMurcia\nMurdoch/M\nMurfreesboro/M\nMuriel/M\nMurillo/M\nMurine/M\nMurmansk/M\nMurphy/M\nMurray/M\nMurrieta/M\nMurrow/M\nMurrumbidgee/M\nMuscat/M\nMuscovite/M\nMuscovy/M\nMuse/M\nMusharraf/M\nMusial/M\nMuskegon/M\nMuskogee/M\nMuslim/MS\nMussolini/M\nMussorgsky/M\nMutsuhito/M\nMuzak/M\nMySQL/M\nMySpace/M\nMyanmar/M\nMycenae/M\nMycenaean/M\nMyers/M\nMylar/MS\nMyles/M\nMyra/M\nMyrdal/M\nMyrna/M\nMyron/M\nMyrtle/M\nMysore/M\nMyst/M\nN'Djamena\nN/MD\nNAACP/M\nNAFTA/M\nNASA/M\nNASCAR/M\nNASDAQ/M\nNATO/M\nNB\nNBA/M\nNBC/M\nNBS\nNC\nNCAA/M\nNCO\nND\nNE/M\nNEH\nNF\nNFC\nNFL/M\nNH\nNHL/M\nNIH\nNIMBY\nNJ\nNLRB\nNM\nNORAD/M\nNOW\nNP\nNPR/M\nNR\nNRA\nNRC\nNS\nNSA/M\nNSC\nNSF\nNSFW\nNT\nNV\nNVIDIA/M\nNW/M\nNWT\nNY\nNYC\nNYSE\nNZ\nNa/M\nNabisco/M\nNabokov/M\nNader/M\nNadia/M\nNadine/M\nNagasaki/M\nNagoya/M\nNagpur/M\nNagy/M\nNahuatl/MS\nNahum/M\nNaipaul/M\nNair/M\nNairobi/M\nNaismith/M\nNam/M\nNamath/M\nNamibia/M\nNamibian/MS\nNampa/M\nNan/M\nNanak/M\nNanchang/M\nNancy/M\nNanette/M\nNanjing/M\nNannie/M\nNanook/M\nNansen/M\nNantes/M\nNantucket/M\nNaomi/M\nNapa/M\nNaphtali/M\nNapier/M\nNaples/M\nNapoleon/MS\nNapoleonic/M\nNapster/M\nNarcissus/M\nNarmada/M\nNarnia/M\nNarraganset\nNarragansett/M\nNash/M\nNashua/M\nNashville/M\nNassau/M\nNasser/M\nNat/M\nNatalia/M\nNatalie/M\nNatasha/M\nNatchez/M\nNate/MN\nNathan/SM\nNathaniel/M\nNathans/M\nNation/M\nNationwide/M\nNativity/M\nNaugahyde/M\nNauru/M\nNautilus/M\nNavajo/SM\nNavajoes\nNavarre/M\nNavarro/M\nNavratilova/M\nNavy\nNazarene/M\nNazareth/M\nNazca/M\nNazi/SM\nNazism/MS\nNb/M\nNd/M\nNdjamena/M\nNe/M\nNeWS\nNeWSes\nNeal/M\nNeanderthal/SM\nNeapolitan/M\nNeb\nNebr\nNebraska/M\nNebraskan/MS\nNebuchadnezzar/M\nNed/M\nNefertiti/M\nNegev/M\nNegress/MS\nNegritude\nNegro/MS\nNegroes\nNegroid/SM\nNegros/M\nNehemiah/M\nNehru/M\nNeil/M\nNelda/M\nNell/M\nNellie/M\nNelly/M\nNelsen/M\nNelson/M\nNembutal/M\nNemesis/M\nNeo/M\nNeogene/M\nNeolithic\nNepal/M\nNepalese/M\nNepali/MS\nNeptune/M\nNereid/M\nNerf/M\nNero/M\nNeruda/M\nNescafe/M\nNesselrode/M\nNestle/M\nNestor/M\nNestorius/M\nNetflix/M\nNetherlander/SM\nNetherlands/M\nNetscape/M\nNettie/M\nNetzahualcoyotl/M\nNev/M\nNeva/M\nNevada/M\nNevadan/SM\nNevadian\nNevis/M\nNevsky/M\nNewark/M\nNewburgh/M\nNewcastle/M\nNewfoundland/MRS\nNewman/M\nNewport/M\nNewsweek/M\nNewton/M\nNewtonian/M\nNexis/M\nNgaliema/M\nNguyen/M\nNi/M\nNiagara/M\nNiamey/M\nNibelung/M\nNicaea/M\nNicaragua/M\nNicaraguan/SM\nNiccolo/M\nNice/M\nNicene/M\nNichiren/M\nNicholas/M\nNichole/M\nNichols/M\nNicholson/M\nNick/M\nNickelodeon/M\nNicklaus/M\nNickolas/M\nNicobar/M\nNicodemus/M\nNicola/SM\nNicolas/M\nNicole/M\nNicosia/M\nNiebuhr/M\nNielsen/M\nNietzsche/M\nNieves/M\nNigel/M\nNiger/M\nNigeria/M\nNigerian/MS\nNigerien/M\nNightingale/M\nNijinsky/M\nNike/M\nNikita/M\nNikkei/M\nNikki/M\nNikolai/M\nNikon/M\nNile/M\nNimitz/M\nNimrod/M\nNina/M\nNineveh/M\nNintendo/M\nNiobe/M\nNippon/M\nNipponese/M\nNirenberg/M\nNirvana/M\nNisan/M\nNisei/M\nNissan/M\nNita/M\nNivea/M\nNixon/M\nNkrumah/M\nNo/SM\nNoDoz/M\nNoah/M\nNobel/M\nNobelist/MS\nNoble/M\nNoe/M\nNoel/SM\nNoelle/M\nNoemi/M\nNokia/M\nNola/M\nNolan/M\nNome/M\nNona/M\nNootka/M\nNora/M\nNorbert/M\nNorberto/M\nNordic/MS\nNoreen/M\nNorfolk/M\nNoriega/M\nNorma/M\nNormal/M\nNorman/MS\nNormand/M\nNormandy/M\nNorplant/M\nNorris/M\nNorse/M\nNorseman/M\nNorsemen/M\nNorth/M\nNorthampton/M\nNortheast/MS\nNortherner/M\nNorthrop/M\nNorthrup/M\nNorths\nNorthwest/SM\nNorton/M\nNorw\nNorway/M\nNorwegian/SM\nNorwich/M\nNosferatu/M\nNostradamus/M\nNottingham/M\nNouakchott/M\nNoumea/M\nNov/M\nNova/M\nNovartis/M\nNovember/MS\nNovgorod/M\nNovocain/MS\nNovocaine\nNovokuznetsk/M\nNovosibirsk/M\nNoxzema/M\nNoyce/M\nNoyes/M\nNp/M\nNubia/M\nNubian/M\nNukualofa/M\nNumbers/M\nNunavut/M\nNunez/M\nNunki/M\nNuremberg/M\nNureyev/M\nNutraSweet/M\nNyQuil/M\nNyasa/M\nNyerere/M\nO'Brien/M\nO'Casey/M\nO'Connell/M\nO'Connor/M\nO'Donnell/M\nO'Hara/M\nO'Higgins/M\nO'Keeffe/M\nO'Neil/M\nO'Neill/M\nO'Rourke/M\nO'Toole/M\nO/SM\nOAS/M\nOB\nOCR\nOD/SM\nOE\nOED\nOH\nOHSA/M\nOJ\nOK/SMDG\nOMB/M\nON\nOPEC/M\nOR\nOS/M\nOSHA/M\nOSes\nOT\nOTB\nOTC\nOTOH\nOahu/M\nOakland/M\nOakley/M\nOates/M\nOaxaca/M\nOb/M\nObadiah/M\nObama/M\nObamacare\nOberlin/M\nOberon/M\nOcala/M\nOcaml/M\nOccam/M\nOccident\nOccidental/MS\nOceania/M\nOceanside\nOceanus/M\nOchoa/M\nOct/M\nOctavia/M\nOctavian/M\nOctavio/M\nOctober/SM\nOdell/M\nOder/M\nOdessa/M\nOdets/M\nOdin/M\nOdis/M\nOdom/M\nOdysseus/M\nOdyssey/M\nOedipal/M\nOedipus/M\nOersted/M\nOfelia/M\nOffenbach/M\nOfficeMax/M\nOgbomosho/M\nOgden/M\nOgilvy/M\nOglethorpe/M\nOhio/M\nOhioan/SM\nOise/M\nOjibwa/SM\nOkayama\nOkeechobee/M\nOkefenokee/M\nOkhotsk/M\nOkinawa/M\nOkinawan\nOkla\nOklahoma/M\nOklahoman/M\nOktoberfest/M\nOla/M\nOlaf/M\nOlajuwon/M\nOlav/M\nOldenburg/M\nOldfield/M\nOldsmobile/M\nOlduvai/M\nOlen/M\nOlenek/M\nOlga/M\nOligocene/M\nOlin/M\nOlive/MR\nOliver/M\nOlivetti/M\nOlivia/M\nOlivier/M\nOllie/M\nOlmec/M\nOlmsted/M\nOlsen/M\nOlson/M\nOlympia/SM\nOlympiad/MS\nOlympian/MS\nOlympic/SM\nOlympics/M\nOlympus/M\nOmaha/MS\nOman/M\nOmani/MS\nOmar/M\nOmayyad/M\nOmdurman/M\nOmnipotent\nOmsk/M\nOnassis/M\nOneal/M\nOnega/M\nOnegin/M\nOneida/MS\nOnion/M\nOno/M\nOnondaga/MS\nOnsager/M\nOnt\nOntarian\nOntario/M\nOort/M\nOpal/M\nOpel/M\nOpenOffice/M\nOphelia/M\nOphiuchus/M\nOppenheimer/M\nOpposition\nOprah/M\nOra/M\nOracle/M\nOran/M\nOrange/M\nOranjestad/M\nOrbison/M\nOrdovician/M\nOre/N\nOreg\nOregon/M\nOregonian/SM\nOrem/M\nOreo/M\nOrestes/M\nOrient/M\nOriental/MS\nOrientalism\nOrin/M\nOrinoco/M\nOrion/M\nOriya/M\nOrizaba/M\nOrkney/M\nOrlando/M\nOrleans/M\nOrlon/MS\nOrly/M\nOrpheus/M\nOrphic/M\nOrr/M\nOrtega/M\nOrthodox\nOrtiz/M\nOrval/M\nOrville/M\nOrwell/M\nOrwellian/M\nOs/M\nOsage/MS\nOsaka/M\nOsbert/M\nOsborn/M\nOsborne/M\nOscar/MS\nOsceola/M\nOsgood/M\nOshawa/M\nOshkosh/M\nOsiris/M\nOslo/M\nOsman/M\nOstrogoth/M\nOstwald/M\nOsvaldo/M\nOswald/M\nOthello/M\nOtis/M\nOttawa/SM\nOtto/M\nOttoman/M\nOuagadougou/M\nOuija/MS\nOvid/M\nOwen/SM\nOwens/M\nOwensboro/M\nOxford/SM\nOxnard/M\nOxonian/M\nOxus/M\nOxycontin/M\nOz/M\nOzark/MS\nOzarks/M\nOzymandias/M\nOzzie/M\nP/MN\nPA/M\nPAC/M\nPARC/S\nPASCAL\nPBS/M\nPBX\nPC/SM\nPCB\nPCMCIA\nPCP/M\nPD\nPDF\nPDQ\nPDT\nPE\nPET/M\nPFC\nPG\nPGP\nPHP/M\nPIN\nPJ's\nPLO/M\nPM/SMDG\nPMS/M\nPO\nPOW/M\nPP\nPPS\nPR\nPRC/M\nPRO\nPS/M\nPST/M\nPT\nPTA/M\nPTO\nPVC/M\nPW\nPX\nPa/M\nPaar/M\nPablo/M\nPablum/M\nPabst/M\nPace/M\nPacheco/M\nPacific/M\nPacino/M\nPackard/M\nPadang\nPaderewski/M\nPadilla/M\nPaganini/M\nPage/M\nPaglia/M\nPahlavi/M\nPaige/M\nPaine/M\nPaiute/SM\nPakistan/M\nPakistani/SM\nPalembang/M\nPaleocene/M\nPaleogene/M\nPaleolithic/M\nPaleozoic/M\nPalermo/M\nPalestine/M\nPalestinian/SM\nPalestrina/M\nPaley/M\nPalikir/M\nPalisades/M\nPalladio/M\nPalmdale/M\nPalmer/M\nPalmerston/M\nPalmolive/M\nPalmyra/M\nPalomar/M\nPam/M\nPamela/M\nPamirs/M\nPampers/M\nPan/M\nPanama/SM\nPanamanian/MS\nPanasonic/M\nPandora/M\nPangaea/M\nPankhurst/M\nPanmunjom/M\nPansy/M\nPantagruel/M\nPantaloon/M\nPantheon/M\nPanza/M\nParacelsus/M\nParaclete/M\nParadise\nParaguay/M\nParaguayan/MS\nParalympic/S\nParamaribo/M\nParamount/M\nParana/M\nParcheesi/M\nPareto/M\nParis/M\nParisian/MS\nPark/SMR\nParker/M\nParkersburg/M\nParkinson/M\nParkinsonism\nParkman/M\nParks/M\nParliament/M\nParmenides\nParmesan/MS\nParnassus/MS\nParnell/M\nParr/M\nParrish/M\nParsifal/M\nParsons/M\nParthenon/M\nParthia/M\nPasadena/M\nPascagoula/M\nPascal/SM\nPasco/M\nPasquale/M\nPassion/SM\nPassover/MS\nPasternak/M\nPasteur/M\nPat/M\nPatagonia/M\nPatagonian/M\nPate/M\nPatel/M\nPaterson/M\nPatna/M\nPatrica/M\nPatrice/M\nPatricia/M\nPatrick/M\nPatsy/M\nPatterson/M\nPatti/M\nPatton/M\nPatty/M\nPaul/GM\nPaula/M\nPaulette/M\nPauli/M\nPauline/M\nPauling/M\nPavarotti/M\nPavlov/M\nPavlova/M\nPavlovian/M\nPawnee/SM\nPayPal/M\nPayne/M\nPb/M\nPd/M\nPeabody/M\nPeace/M\nPeale/M\nPearl/M\nPearlie/M\nPearson/M\nPeary/M\nPechora/M\nPeck/M\nPeckinpah/M\nPecos/M\nPedro/M\nPeel/M\nPeg/M\nPegasus/MS\nPeggy/M\nPei/M\nPeiping/M\nPeking/SM\nPekingese/SM\nPele/M\nPelee/M\nPeloponnese/M\nPembroke/M\nPen/M\nPena/M\nPenderecki/M\nPenelope/M\nPenn/M\nPenna\nPenney/M\nPennington/M\nPennsylvania/M\nPennsylvanian/MS\nPenny/M\nPennzoil/M\nPensacola/M\nPentagon/M\nPentateuch/M\nPentax/M\nPentecost/SM\nPentecostal/MS\nPentecostalism\nPentium/SM\nPeoria/M\nPepin/M\nPepsi/M\nPepys/M\nPequot/M\nPercheron/M\nPercival/M\nPercy/M\nPerelman/M\nPerez/M\nPericlean/M\nPericles/M\nPerkins/M\nPerl/SM\nPerm/M\nPermalloy/M\nPermian/M\nPernod/M\nPeron/M\nPerot/M\nPerrier/M\nPerry/RM\nPerseid/M\nPersephone/M\nPersepolis/M\nPerseus/M\nPershing/M\nPersia/M\nPersian/SM\nPerth/M\nPeru/M\nPeruvian/MS\nPeshawar/M\nPetain/M\nPetaluma/M\nPete/RMZ\nPeter/M\nPeters/MN\nPetersen/M\nPeterson/M\nPetra/M\nPetrarch/M\nPetty/M\nPeugeot/M\nPfc\nPfizer/M\nPhD/M\nPhaedra/M\nPhaethon/M\nPhanerozoic/M\nPharaoh/M\nPharaohs\nPharisaic\nPharisaical\nPharisee/MS\nPhekda/M\nPhelps/M\nPhidias/M\nPhil/MY\nPhiladelphia/M\nPhilby/M\nPhilemon/M\nPhilip/MS\nPhilippe/M\nPhilippians/M\nPhilippine/SM\nPhilippines/M\nPhilips/M\nPhilistine/M\nPhillip/SM\nPhillipa/M\nPhillips/M\nPhilly/M\nPhipps/M\nPhobos/M\nPhoebe/M\nPhoenicia/M\nPhoenician/SM\nPhoenix/M\nPhotostat/MS\nPhotostatted\nPhotostatting\nPhrygia/M\nPhyllis/M\nPiaf/M\nPiaget/M\nPianola/M\nPicasso/M\nPiccadilly/M\nPickering/M\nPickett/M\nPickford/M\nPickwick/M\nPict/M\nPiedmont/M\nPierce/M\nPierre/M\nPierrot/M\nPike/M\nPilate/MS\nPilates/M\nPilcomayo/M\nPilgrim/SM\nPillsbury/M\nPinatubo/M\nPincus/M\nPindar/M\nPinkerton/M\nPinocchio/M\nPinochet/M\nPinter/M\nPinyin\nPippin/M\nPiraeus/M\nPirandello/M\nPisa/M\nPisces/M\nPisistratus/M\nPissaro/M\nPitcairn/M\nPitt/SM\nPittman/M\nPitts/M\nPittsburgh/M\nPittsfield/M\nPius/M\nPizarro/M\nPkwy\nPl\nPlanck/M\nPlano\nPlantagenet/M\nPlasticine/M\nPlataea/M\nPlath/M\nPlato/M\nPlatonic\nPlatonism/M\nPlatonist/M\nPlatte/M\nPlautus/M\nPlayStation/M\nPlayboy/M\nPlaytex/M\nPleiades/M\nPleistocene/M\nPlexiglas/MS\nPliny/M\nPliocene/SM\nPlutarch/M\nPluto/M\nPlymouth/M\nPm/M\nPo/M\nPocahontas/M\nPocatello/M\nPocono/SM\nPoconos/M\nPodgorica/M\nPodhoretz/M\nPodunk/M\nPoe/M\nPogo/M\nPoincare/M\nPoiret/M\nPoirot/M\nPoisson/M\nPoitier/M\nPokemon/M\nPol/MY\nPoland/M\nPolanski/M\nPolaris/M\nPolaroid/MS\nPole/SM\nPolish/M\nPolitburo/M\nPolk/M\nPollard/M\nPollock/M\nPollux/M\nPolly/M\nPollyanna/M\nPolo/M\nPoltava/M\nPolyhymnia/M\nPolynesia/M\nPolynesian/MS\nPolyphemus/M\nPomerania/M\nPomeranian/M\nPomona/M\nPompadour/M\nPompeian\nPompeii/M\nPompey/M\nPonce/M\nPontchartrain/M\nPontiac/M\nPontianak/M\nPooh/M\nPoole/M\nPoona/M\nPope/M\nPopeye/M\nPopocatepetl/M\nPopper/M\nPoppins/M\nPopsicle/M\nPorfirio/M\nPorrima/M\nPorsche/M\nPort/MR\nPorter/M\nPorterville/M\nPortia/M\nPortland/M\nPorto/M\nPortsmouth/M\nPortugal/M\nPortuguese/M\nPoseidon/M\nPost/M\nPostgreSQL/M\nPotemkin/M\nPotomac/M\nPotsdam/M\nPottawatomie/M\nPotter/M\nPotts/M\nPottstown/M\nPoughkeepsie/M\nPound/M\nPoussin/M\nPowell/M\nPowerPC/M\nPowerPoint/M\nPowers/M\nPowhatan/M\nPoznan/M\nPr/M\nPrada/M\nPrado/M\nPraetorian/M\nPrague/M\nPraia/M\nPrakrit/M\nPratchett/M\nPratt/M\nPravda/M\nPraxiteles/M\nPreakness/M\nPrecambrian/M\nPreminger/M\nPremyslid/M\nPrensa/M\nPrentice/M\nPres\nPresbyterian/SM\nPresbyterianism/MS\nPrescott/M\nPresley/M\nPreston/M\nPretoria/M\nPriam/M\nPribilof/M\nPrice/M\nPriceline/M\nPriestley/M\nPrince/M\nPrinceton/M\nPrincipe/M\nPriscilla/M\nPrius/M\nPrivate\nProcrustean/M\nProcrustes/M\nProcter/M\nProcyon/M\nProf\nProhibition\nProkofiev/M\nPromethean/M\nPrometheus/M\nProphets\nProserpina/M\nProserpine/M\nProtagoras/M\nProterozoic/M\nProtestant/MS\nProtestantism/SM\nProteus/M\nProudhon/M\nProust/M\nProvencal/MS\nProvence/M\nProverbs\nProvidence/SM\nProvo/M\nProzac/MS\nPrudence/M\nPrudential/M\nPruitt/M\nPrussia/M\nPrussian/MS\nPrut/M\nPryor/M\nPsalms/M\nPsalter/MS\nPsyche/M\nPt/M\nPtah/M\nPtolemaic/M\nPtolemy/SM\nPu/M\nPuccini/M\nPuck/M\nPuckett/M\nPuebla/M\nPueblo/M\nPuerto\nPuget/M\nPugh/M\nPulaski/M\nPulitzer/M\nPullman/MS\nPunch/M\nPunic/M\nPunjab/M\nPunjabi/M\nPurana/M\nPurcell/M\nPurdue/M\nPurim/MS\nPurina/M\nPuritan/M\nPuritanism/MS\nPurus/M\nPusan/M\nPusey/M\nPushkin/M\nPushtu/M\nPutin/M\nPutnam/M\nPuzo/M\nPvt\nPyTorch/M\nPygmalion/M\nPygmy/SM\nPyle/M\nPym/M\nPynchon/M\nPyongyang/M\nPyotr/M\nPyrenees/M\nPyrex/MS\nPyrrhic/M\nPythagoras/M\nPythagorean/M\nPythias/M\nPython/M\nQ\nQA\nQB\nQC\nQED\nQM\nQWERTY\nQaddafi/M\nQantas/M\nQatar/M\nQatari/MS\nQingdao/M\nQinghai/M\nQiqihar/M\nQom/M\nQuaalude/M\nQuaker/MS\nQuakerism/SM\nQualcomm/M\nQuaoar/M\nQuasimodo/M\nQuaternary/M\nQuayle/M\nQue\nQuebec/M\nQuebecois/M\nQuechua/M\nQueen/MS\nQueens/M\nQueensland/M\nQuentin/M\nQuetzalcoatl/M\nQuezon/M\nQuincy/M\nQuinn/M\nQuintilian/M\nQuinton/M\nQuirinal/M\nQuisling/M\nQuito/M\nQuixote/M\nQuixotism/M\nQumran/M\nQuonset/M\nR/M\nRAF/M\nRAM/SM\nRBI\nRC\nRCA/M\nRCMP\nRD\nRDA\nRDS/M\nREIT\nREM/SM\nRF\nRFC/S\nRFD\nRI\nRIF\nRIP\nRISC\nRN/M\nRNA/M\nROFL\nROM/M\nROTC/M\nRP\nRR\nRSFSR\nRSI\nRSV\nRSVP\nRTFM\nRV/SM\nRa/M\nRabat/M\nRabelais/M\nRabelaisian/M\nRabin/M\nRachael/M\nRachel/M\nRachelle/M\nRachmaninoff/M\nRacine/M\nRadcliff/M\nRadcliffe/M\nRae/M\nRafael/M\nRaffles/M\nRagnarok/M\nRainier/M\nRaleigh/M\nRalph/M\nRama/M\nRamada/M\nRamadan/MS\nRamakrishna/M\nRamanujan/M\nRamayana/M\nRambo/M\nRamirez/M\nRamiro/M\nRamon/M\nRamona/M\nRamos/M\nRamsay/M\nRamses/M\nRamsey/M\nRand/M\nRandal/M\nRandall/M\nRandell/M\nRandi/M\nRandolph/M\nRandy/M\nRangoon/M\nRankin/M\nRankine/M\nRaoul/M\nRaphael/M\nRappaport/M\nRapunzel/M\nRaquel/M\nRasalgethi/M\nRasalhague/M\nRasmussen/M\nRasputin/M\nRasta\nRastaban/M\nRastafarian/MS\nRastafarianism\nRather/M\nRatliff/M\nRaul/M\nRavel/M\nRawalpindi/M\nRay/M\nRayBan/M\nRayburn/M\nRayleigh/M\nRaymond/M\nRaymundo/M\nRb/M\nRd\nRe/M\nReading/M\nReagan/M\nReaganomics/M\nRealtor/M\nReasoner/M\nReba/M\nRebekah/M\nRecife/M\nReconstruction/M\nRedding/M\nRedeemer/M\nRedford/M\nRedgrave/M\nRedis/M\nRedmond/M\nRedshift/M\nReebok/M\nReed/M\nReese/M\nReeves/M\nReformation/MS\nRefugio/M\nReggie/M\nRegina/M\nReginae/M\nReginald/M\nRegor/M\nRegulus/M\nRehnquist/M\nReich/M\nReichstag's\nReid/M\nReilly/M\nReinaldo/M\nReinhardt/M\nReinhold/M\nRemarque/M\nRembrandt/M\nRemington/M\nRemus/M\nRena/M\nRenaissance/SM\nRenascence\nRenault/M\nRene/M\nRenee/M\nReno/M\nRenoir/M\nRep\nRepresentative\nRepublican/SM\nRepublicanism\nRequiem/MS\nResistance\nRestoration/M\nResurrection\nReuben/M\nReunion/M\nReuters/M\nReuther/M\nRev\nReva/M\nRevelation/SM\nRevelations/M\nRevere/M\nReverend/M\nRevlon/M\nRex/M\nReyes/M\nReykjavik/M\nReyna/M\nReynaldo/M\nReynolds/M\nRf/M\nRh/M\nRhea/M\nRhee/M\nRheingau/M\nRhenish/M\nRhiannon/M\nRhine/M\nRhineland/M\nRhoda/M\nRhode/S\nRhodes/M\nRhodesia/M\nRhodesian\nRhonda/M\nRhone/M\nRibbentrop/M\nRicardo/M\nRice/M\nRich/M\nRichard/MS\nRichards/M\nRichardson/M\nRichelieu/M\nRichie/M\nRichmond/M\nRichter/M\nRichthofen/M\nRick/M\nRickenbacker/M\nRickey/M\nRickie/M\nRickover/M\nRicky/M\nRico/M\nRiddle/M\nRide/M\nRiefenstahl/M\nRiel/M\nRiemann/M\nRiesling/MS\nRiga/M\nRigel/M\nRiggs/M\nRight\nRigoberto/M\nRigoletto/M\nRiley/M\nRilke/M\nRimbaud/M\nRingling/M\nRingo/M\nRio/SM\nRios/M\nRipley/M\nRisorgimento/M\nRita/M\nRitalin/M\nRitz/M\nRivas/M\nRivera/M\nRivers/M\nRiverside/M\nRiviera/MS\nRiyadh/M\nRizal/M\nRn/M\nRoach/M\nRoanoke/M\nRob/M\nRobbie/M\nRobbin/MS\nRobbins/M\nRobby/M\nRoberson/M\nRobert/MS\nRoberta/M\nRoberto/M\nRoberts/M\nRobertson/M\nRobeson/M\nRobespierre/M\nRobin/M\nRobinson/M\nRobitussin/M\nRobles/M\nRobson/M\nRobt/M\nRobyn/M\nRocco/M\nRocha/M\nRochambeau/M\nRoche/M\nRochelle/M\nRochester/M\nRock/M\nRockefeller/M\nRockford/M\nRockies/M\nRockne/M\nRockwell/M\nRocky/SM\nRod/M\nRoddenberry/M\nRoderick/M\nRodger/MS\nRodgers/M\nRodin/M\nRodney/M\nRodolfo/M\nRodrick/M\nRodrigo/M\nRodriguez/M\nRodriquez/M\nRoeg/M\nRoentgen\nRogelio/M\nRoger/MS\nRogers/M\nRoget/M\nRojas/M\nRoku/M\nRolaids/M\nRoland/M\nRolando/M\nRolex/M\nRolland/M\nRollerblade/M\nRollins/M\nRolodex/M\nRolvaag/M\nRom\nRoman/MS\nRomanesque/MS\nRomania/M\nRomanian/MS\nRomano/M\nRomanov/M\nRomans/M\nRomansh/M\nRomanticism\nRomany/SM\nRome/SM\nRomeo/M\nRomero/M\nRommel/M\nRomney/M\nRomulus/M\nRon/M\nRonald/M\nRonda/M\nRonnie/M\nRonny/M\nRonstadt/M\nRontgen\nRooney/M\nRoosevelt/M\nRoot/M\nRoquefort/SM\nRorschach/M\nRory/M\nRosa/M\nRosales/M\nRosalie/M\nRosalind/M\nRosalinda/M\nRosalyn/M\nRosanna/M\nRosanne/M\nRosario/M\nRoscoe/M\nRose/M\nRoseann/M\nRoseau/M\nRosecrans/M\nRosella/M\nRosemarie/M\nRosemary/M\nRosenberg/M\nRosendo/M\nRosenzweig/M\nRosetta/M\nRosicrucian/M\nRosie/M\nRoslyn/M\nRoss/M\nRossetti/M\nRossini/M\nRostand/M\nRostov/M\nRostropovich/M\nRoswell/M\nRotarian/M\nRoth/M\nRothko/M\nRothschild/M\nRotterdam/M\nRottweiler/M\nRouault/M\nRourke/M\nRousseau/M\nRove/RM\nRover/M\nRowe/M\nRowena/M\nRowland/M\nRowling/M\nRoxanne/M\nRoxie/M\nRoxy/M\nRoy/M\nRoyal/M\nRoyce/M\nRozelle/M\nRte\nRu/MH\nRubaiyat/M\nRubbermaid/M\nRuben/SM\nRubens/M\nRubicon/MS\nRubik/M\nRubin/M\nRubinstein/M\nRuby/M\nRuchbah/M\nRudolf/M\nRudolph/M\nRudy/M\nRudyard/M\nRufus/M\nRuhr/M\nRuiz/M\nRukeyser/M\nRumpelstiltskin/M\nRumsfeld/M\nRunnymede/M\nRunyon/M\nRupert/M\nRush/M\nRushdie/M\nRushmore/M\nRuskin/M\nRuss/M\nRussel/M\nRussell/M\nRussia/M\nRussian/SM\nRusso/M\nRustbelt/M\nRusty/M\nRutan/M\nRutgers/M\nRuth/M\nRutherford/M\nRuthie/M\nRutledge/M\nRwanda/MS\nRwandan/SM\nRwy\nRx\nRy\nRyan/M\nRydberg/M\nRyder/M\nRyukyu/M\nS/MN\nSA\nSAC\nSALT/M\nSAM/M\nSAP/M\nSARS/M\nSASE\nSAT\nSBA\nSC/M\nSCSI/M\nSD\nSDI\nSE/M\nSEATO\nSEC/M\nSF\nSGML/M\nSIDS/M\nSJ\nSJW\nSK\nSLR\nSO/S\nSOB/M\nSOP/M\nSOS/M\nSOSes\nSPCA\nSPF\nSQL\nSQLite/M\nSRO\nSS\nSSA\nSSE/M\nSSS\nSST\nSSW/M\nST\nSTD\nSTOL\nSUSE/M\nSUV\nSVN/M\nSW/M\nSWAK\nSWAT\nSaab/M\nSaar/M\nSaarinen/M\nSaatchi/M\nSabbath/M\nSabbaths\nSabik/M\nSabin/M\nSabina/M\nSabine/M\nSabre/M\nSabrina/M\nSacajawea/M\nSacco/M\nSachs/M\nSacramento/M\nSadat/M\nSaddam/M\nSadducee/M\nSade/M\nSadie/M\nSadr/M\nSafavid/M\nSafeway/M\nSagan/M\nSaginaw/M\nSagittarius/MS\nSahara/M\nSaharan/M\nSahel/M\nSaigon/M\nSaiph/M\nSakai/M\nSakha/M\nSakhalin/M\nSakharov/M\nSaki/M\nSaks/M\nSal/MY\nSaladin/M\nSalado/M\nSalamis/M\nSalas/M\nSalazar/M\nSalem/M\nSalerno/M\nSalesforce/M\nSalinas/M\nSalinger/M\nSalisbury/M\nSalish/M\nSalk/M\nSallie/M\nSallust/M\nSally/M\nSalome/M\nSalonika/M\nSalton/M\nSalvador/M\nSalvadoran/SM\nSalvadorean/MS\nSalvadorian/MS\nSalvatore/M\nSalween/M\nSalyut/M\nSam/M\nSamantha/M\nSamar/M\nSamara/M\nSamaritan/MS\nSamarkand/M\nSammie/M\nSammy/M\nSamoa/M\nSamoan/SM\nSamoset/M\nSamoyed/M\nSampson/M\nSamson/M\nSamsonite/M\nSamsung/M\nSamuel/M\nSamuelson/M\nSan'a\nSan/M\nSana/M\nSanchez/M\nSancho/M\nSand/ZM\nSandburg/M\nSanders/M\nSandinista/M\nSandoval/M\nSandra/M\nSandy/M\nSanford/M\nSanforized/M\nSang/MR\nSanger/M\nSanhedrin/M\nSanka/M\nSankara/M\nSanskrit/M\nSanta/M\nSantana/M\nSantayana/M\nSanteria/M\nSantiago/M\nSantos/M\nSappho/M\nSapporo/M\nSara/M\nSaracen/MS\nSaragossa/M\nSarah/M\nSarajevo/M\nSaran/M\nSarasota/M\nSaratov/M\nSarawak/M\nSardinia/M\nSargasso/M\nSargent/M\nSargon/M\nSarnoff/M\nSaroyan/M\nSarto/M\nSartre/M\nSasha/M\nSask\nSaskatchewan/M\nSaskatoon/M\nSasquatch/MS\nSassanian/M\nSassoon/M\nSat/M\nSatan/M\nSatanism/M\nSatanist/M\nSaturday/MS\nSaturn/M\nSaturnalia/M\nSaudi/MS\nSaul/M\nSaunders/M\nSaundra/M\nSaussure/M\nSauternes\nSavage/M\nSavannah/M\nSavior/M\nSavonarola/M\nSavoy/M\nSavoyard/M\nSawyer/M\nSaxon/MS\nSaxony/M\nSayers/M\nSb/M\nSc/M\nScala/M\nScan\nScandinavia/M\nScandinavian/MS\nScaramouch/M\nScarborough/M\nScarlatti/M\nScheat/M\nSchedar/M\nScheherazade/M\nSchelling/M\nSchenectady/M\nSchiaparelli/M\nSchick/M\nSchiller/M\nSchindler/M\nSchlesinger/M\nSchliemann/M\nSchlitz/M\nSchloss/M\nSchmidt/M\nSchnabel/M\nSchnauzer/M\nSchneider/M\nSchoenberg/M\nSchopenhauer/M\nSchrieffer/M\nSchrodinger/M\nSchroeder/M\nSchubert/M\nSchultz/M\nSchulz/M\nSchumann/M\nSchumpeter/M\nSchuyler/M\nSchuylkill/M\nSchwartz/M\nSchwarzenegger/M\nSchwarzkopf/M\nSchweitzer/M\nSchweppes/M\nSchwinger/M\nSchwinn/M\nScientologist/SM\nScientology/M\nScipio/M\nScopes/M\nScorpio/SM\nScorpius/M\nScorsese/M\nScot/SM\nScotch/MS\nScotchman/M\nScotchmen/M\nScotchwoman/M\nScotchwomen/M\nScotia/M\nScotland/M\nScotsman/M\nScotsmen/M\nScotswoman/M\nScotswomen/M\nScott/M\nScottie/SM\nScottish/M\nScottsdale/M\nScrabble/MS\nScranton/M\nScriabin/M\nScribner/M\nScripture/SM\nScrooge/M\nScruggs/M\nScud/M\nSculley/M\nScylla/M\nScythia/M\nScythian/M\nSe/MH\nSeaborg/M\nSeagram/M\nSean/M\nSears/M\nSeaside/M\nSeattle/M\nSebastian/M\nSebring/M\nSec\nSeconal/M\nSecretariat/M\nSecretary\nSeder/MS\nSedna/M\nSeebeck/M\nSeeger/M\nSega/M\nSegovia/M\nSegre/M\nSegundo/M\nSegway/S\nSeiko/M\nSeine/M\nSeinfeld/M\nSejong/M\nSelassie/M\nSelectric/M\nSelena/M\nSeleucid/M\nSeleucus/M\nSelim/M\nSeljuk/M\nSelkirk/M\nSellers/M\nSelma/M\nSelznick/M\nSemarang/M\nSeminole/MS\nSemiramis/M\nSemite/MS\nSemitic/SM\nSemtex/M\nSenate/MS\nSendai/M\nSeneca/MS\nSenegal/M\nSenegalese/M\nSenghor/M\nSenior/M\nSennacherib/M\nSennett/M\nSensurround/M\nSeoul/M\nSep\nSephardi/M\nSepoy/M\nSept/M\nSeptember/MS\nSeptuagint/MS\nSequoya/M\nSerb/SM\nSerbia/M\nSerbian/MS\nSerena/M\nSerengeti/M\nSergei/M\nSergio/M\nSerpens/M\nSerra/M\nSerrano/M\nSet/M\nSeth/M\nSeton/M\nSeurat/M\nSeuss/M\nSevastopol/M\nSevern/M\nSeverus/M\nSeville/M\nSevres/M\nSeward/M\nSextans/M\nSexton/M\nSeychelles/M\nSeyfert/M\nSeymour/M\nSgt\nShaanxi/M\nShackleton/M\nShaffer/M\nShah/M\nShaka/M\nShaker\nShakespeare/M\nShakespearean/M\nShana/M\nShandong/M\nShane/M\nShanghai/M\nShankara/M\nShanna/M\nShannon/M\nShantung/M\nShanxi/M\nShapiro/M\nSharePoint/M\nShari'a/M\nShari/M\nSharif/M\nSharlene/M\nSharon/M\nSharp/M\nSharpe/M\nSharron/M\nShasta/M\nShaula/M\nShaun/M\nShauna/M\nShavian/M\nShavuot/M\nShaw/M\nShawn/M\nShawna/M\nShawnee/SM\nShcharansky/M\nShea/M\nSheba/M\nShebeli/M\nSheboygan/M\nSheena/M\nSheetrock/M\nSheffield/M\nSheila/M\nShelby/M\nSheldon/M\nShelia/M\nShell/M\nShelley/M\nShelly/M\nShelton/M\nShenandoah/M\nShenyang/M\nSheol/M\nShepard/M\nShepherd/M\nSheppard/M\nSheratan/M\nSheraton/M\nSheree/M\nSheri/M\nSheridan/M\nSherlock/M\nSherman/M\nSherpa/M\nSherri/M\nSherrie/M\nSherry/M\nSherwood/M\nSheryl/M\nShetland/SM\nShetlands/M\nShevardnadze/M\nShevat/M\nShi'ite/M\nShields/M\nShiite/MS\nShijiazhuang/M\nShikoku/M\nShillong/M\nShiloh/M\nShinto/MS\nShintoism/MS\nShintoist/MS\nShiraz/M\nShirley/M\nShiva/M\nShockley/M\nShort/M\nShorthorn/M\nShoshone/SM\nShostakovitch/M\nShrek/M\nShreveport/M\nShriner/M\nShropshire/M\nShula/M\nShylock/M\nShylockian/M\nSi/M\nSiam/M\nSiamese/M\nSibelius/M\nSiberia/M\nSiberian/MS\nSibyl/M\nSichuan/M\nSicilian/SM\nSicily/M\nSid/M\nSiddhartha/M\nSidney/M\nSiegfried/M\nSiemens/M\nSierpinski/M\nSierras\nSigismund/M\nSigmund/M\nSigurd/M\nSihanouk/M\nSikh/M\nSikhism\nSikhs\nSikkim/M\nSikkimese/M\nSikorsky/M\nSilas/M\nSilesia/M\nSilurian/SM\nSilva/M\nSilvia/M\nSimenon/M\nSimmental/M\nSimmons/M\nSimon/M\nSimone/M\nSimpson/SM\nSimpsons/M\nSimpsonville/M\nSims/M\nSinai/M\nSinatra/M\nSinbad/M\nSinclair/M\nSindbad/M\nSindhi/M\nSingapore/M\nSingaporean/SM\nSinger/M\nSingh/M\nSingleton/M\nSinhalese/M\nSinkiang/M\nSioux/M\nSir/SM\nSirius/M\nSistine/M\nSisyphean/M\nSisyphus/M\nSiva/M\nSivan/M\nSjaelland/M\nSkinner/M\nSkippy/M\nSkopje/M\nSkye/M\nSkylab/M\nSkype/M\nSlackware/M\nSlashdot/M\nSlater/M\nSlav/SM\nSlavic/M\nSlavonic/M\nSlidell/M\nSlinky/M\nSloan/M\nSloane/M\nSlocum/M\nSlovak/SM\nSlovakia/M\nSlovakian\nSlovene/SM\nSlovenia/M\nSlovenian/MS\nSlurpee/M\nSm/M\nSmall/M\nSmetana/M\nSmirnoff/M\nSmith/M\nSmithson/M\nSmithsonian/M\nSmokey/M\nSmolensk/M\nSmollett/M\nSmuts/M\nSmyrna\nSn/M\nSnake/M\nSnapple/M\nSnead/M\nSnell/M\nSnickers/M\nSnider/M\nSnoopy/M\nSnow/M\nSnowbelt/M\nSnyder/M\nSoave/M\nSoc\nSocastee/M\nSocorro/M\nSocrates/M\nSocratic/M\nSoddy/M\nSodom/M\nSofia/M\nSoho/M\nSol/M\nSolis/M\nSolomon/M\nSolon/M\nSolzhenitsyn/M\nSomali/SM\nSomalia/M\nSomalian/MS\nSomme/M\nSomoza/M\nSon/M\nSondheim/M\nSondra/M\nSonghai/M\nSonghua/M\nSonia/M\nSonja/M\nSonny/M\nSonora/M\nSontag/M\nSony/M\nSonya/M\nSophia/M\nSophie/M\nSophoclean/M\nSophocles/M\nSopwith/M\nSorbonne/M\nSosa/M\nSoto/M\nSouphanouvong/M\nSourceforge/M\nSousa/M\nSouth/M\nSouthampton/M\nSoutheast/MS\nSoutherner/SM\nSouthey/M\nSouths\nSouthwest/MS\nSoviet/M\nSoweto/M\nSoyinka/M\nSoyuz/M\nSp\nSpaatz/M\nSpackle/M\nSpahn/M\nSpain/M\nSpam/M\nSpan\nSpanglish\nSpaniard/SM\nSpanish/M\nSparks/M\nSparta/M\nSpartacus/M\nSpartan/MS\nSpartanburg/M\nSpears/M\nSpeer/M\nSpence/RM\nSpencer/M\nSpencerian/M\nSpengler/M\nSpenglerian/M\nSpenser/M\nSpenserian/M\nSperry/M\nSphinx/M\nSpica/M\nSpielberg/M\nSpillane/M\nSpinoza/M\nSpinx/M\nSpiro/M\nSpirograph/M\nSpitsbergen/M\nSpitz/M\nSpock/M\nSpokane/M\nSpringdale/M\nSpringfield/M\nSpringsteen/M\nSprint/M\nSprite/M\nSputnik/M\nSq\nSquanto/M\nSquibb/M\nSr/M\nSrinagar/M\nSrivijaya/M\nSt\nSta\nStacey/M\nStaci/M\nStacie/M\nStacy/M\nStael/M\nStafford/M\nStairMaster/M\nStalin/M\nStalingrad/M\nStalinist/M\nStallone/M\nStamford/M\nStan/M\nStandish/M\nStanford/M\nStanislavsky/M\nStanley/M\nStanton/M\nStaples/M\nStarbucks/M\nStark/M\nStarkey/M\nStarr/M\nStaten/M\nStates\nStaubach/M\nStaunton/M\nSte\nSteadicam/M\nSteele/M\nStefan/M\nStefanie/M\nStein/MR\nSteinbeck/M\nSteinem/M\nSteiner/M\nSteinmetz/M\nSteinway/M\nStella/M\nStendhal/M\nStengel/M\nStephan/M\nStephanie/M\nStephen/MS\nStephens/M\nStephenson/M\nSterling/M\nStern/M\nSterne/M\nSterno/M\nStetson/M\nSteuben/M\nSteubenville/M\nSteve/M\nSteven/MS\nStevens/M\nStevenson/M\nStevie/M\nStewart/M\nStieglitz/M\nStilton/SM\nStimson/M\nStine/M\nStirling/M\nStockhausen/M\nStockholm/M\nStockton/M\nStoic/SM\nStoicism/MS\nStokes/M\nStolichnaya/M\nStolypin/M\nStone/M\nStonehenge/M\nStoppard/M\nStout/M\nStowe/M\nStrabo/M\nStradivari\nStradivarius/M\nStrasbourg/M\nStrauss/M\nStravinsky/M\nStreisand/M\nStrickland/M\nStrindberg/M\nStromboli/M\nStrong/M\nStu/M\nStuart/MS\nStudebaker/M\nStuttgart/M\nStuyvesant/M\nStygian/M\nStyrofoam/SM\nStyron/M\nStyx/M\nSuarez/M\nSubaru/M\nSucre/M\nSucrets/M\nSudan/M\nSudanese/M\nSudetenland/M\nSudoku/M\nSudra/M\nSue/M\nSuetonius/M\nSuez/M\nSuffolk/M\nSufi/M\nSufism/M\nSuharto/M\nSui/M\nSukarno/M\nSukkot\nSulawesi/M\nSuleiman/M\nSulla/M\nSullivan/M\nSumatra/M\nSumatran/SM\nSumeria/M\nSumerian/SM\nSummer/MS\nSummers/M\nSumner/M\nSumter/M\nSun/SM\nSunbeam/M\nSunbelt/M\nSundanese/M\nSundas/M\nSunday/MS\nSung/M\nSunkist/M\nSunni/SM\nSunnite/MS\nSunnyvale/M\nSuperbowl/M\nSuperfund/M\nSuperglue/M\nSuperior/M\nSuperman/M\nSupt\nSurabaya/M\nSurat/M\nSuriname/M\nSurinamese\nSurya/M\nSusan/M\nSusana/M\nSusanna/M\nSusanne/M\nSusie/M\nSusquehanna/M\nSussex/M\nSutherland/M\nSutton/M\nSuva/M\nSuwanee/M\nSuzanne/M\nSuzette/M\nSuzhou/M\nSuzuki/M\nSuzy/M\nSvalbard/M\nSven/M\nSvengali/M\nSverdlovsk\nSwahili/SM\nSwammerdam/M\nSwanee/M\nSwansea/M\nSwanson/M\nSwazi/SM\nSwaziland/M\nSwed/N\nSwede/SM\nSweden/M\nSwedenborg/M\nSwedish/M\nSweeney/M\nSweet/M\nSwift/M\nSwinburne/M\nSwiss/MS\nSwissair/M\nSwitz\nSwitzerland/M\nSybil/M\nSydney/M\nSykes/M\nSylvester/M\nSylvia/M\nSylvie/M\nSynge/M\nSyracuse/M\nSyria/M\nSyriac/M\nSyrian/MS\nSzilard/M\nSzymborska/M\nT'ang/M\nT/MDG\nTA\nTARP\nTB/M\nTBA\nTD\nTDD\nTEFL\nTELNET/S\nTELNETTed\nTELNETTing\nTESL\nTESOL\nTGIF\nTHC\nTKO/M\nTLC/M\nTM\nTN\nTNT/M\nTOEFL\nTQM\nTV/SM\nTVA\nTWA/M\nTWX\nTX\nTa/M\nTabasco/SM\nTabatha/M\nTabernacle/MS\nTabitha/M\nTabriz/MS\nTacitus/M\nTacoma/M\nTad/M\nTadzhik/M\nTaegu/M\nTaejon/M\nTaft/M\nTagalog/SM\nTagore/M\nTagus/M\nTahiti/M\nTahitian/MS\nTahoe/M\nTaichung/M\nTainan\nTaine/M\nTaipei/M\nTaiping/M\nTaiwan/M\nTaiwanese/M\nTaiyuan/M\nTajikistan/M\nTaklamakan/M\nTalbot/M\nTaliban/M\nTaliesin/M\nTallahassee/M\nTallchief/M\nTalley/M\nTalleyrand/M\nTallinn/M\nTalmud/MS\nTalmudic\nTalmudist\nTamara/M\nTameka/M\nTamera/M\nTamerlane/M\nTami/M\nTamika/M\nTamil/MS\nTammany/M\nTammi/M\nTammie/M\nTammuz/M\nTammy/M\nTampa/M\nTampax/M\nTamra/M\nTamworth/M\nTancred/M\nTaney/M\nTanganyika/M\nTangier/MS\nTangshan/M\nTania/M\nTanisha/M\nTanner/M\nTannhauser/M\nTantalus/M\nTanya/M\nTanzania/M\nTanzanian/SM\nTao/M\nTaoism/MS\nTaoist/MS\nTara/M\nTarantino/M\nTarawa/M\nTarazed/M\nTarbell/M\nTarget/M\nTarim/M\nTarkenton/M\nTarkington/M\nTartary/M\nTartuffe/M\nTarzan/M\nTasha/M\nTashkent/M\nTasman/M\nTasmania/M\nTasmanian/M\nTass/M\nTatar/MS\nTate/M\nTatum/M\nTaurus/MS\nTavares/M\nTawney/M\nTaylor/M\nTb/M\nTbilisi/M\nTc/M\nTchaikovsky/M\nTe/M\nTeX\nTeXes\nTeasdale/M\nTechnicolor/M\nTecumseh/M\nTed/M\nTeddy/M\nTeflon/MS\nTegucigalpa/M\nTehran\nTelePrompTer\nTelePrompter/M\nTelemachus/M\nTelemann/M\nTeletype\nTell/MR\nTeller/M\nTelugu/M\nTemecula/M\nTempe\nTemplar/M\nTemple/M\nTenn/M\nTennessean/SM\nTennessee/M\nTennyson/M\nTennysonian\nTenochtitlan/M\nTensorFlow/M\nTeotihuacan/M\nTerence/M\nTeresa/M\nTereshkova/M\nTeri/M\nTerkel/M\nTerpsichore/M\nTerr/M\nTerra/M\nTerran/M\nTerrance/M\nTerrell/M\nTerrence/M\nTerri/M\nTerrie/M\nTerry/M\nTertiary/M\nTesla/M\nTess/M\nTessa/M\nTessie/M\nTet/M\nTethys/M\nTetons/M\nTeuton/MS\nTeutonic/M\nTevet/M\nTex/M\nTexaco/M\nTexan/MS\nTexarkana/M\nTexas/M\nTh/M\nThackeray/M\nThad/M\nThaddeus/M\nThai/SM\nThailand/M\nThales/M\nThalia/M\nThames/M\nThanh/M\nThanksgiving/MS\nThant/M\nThar/M\nTharp/M\nThatcher/M\nThea/M\nThebes/M\nTheiler/M\nThelma/M\nThemistocles/M\nTheocritus/M\nTheodora/M\nTheodore/M\nTheodoric/M\nTheodosius/M\nTheosophy/M\nTheravada/M\nTheresa/M\nTherese/M\nThermopylae/M\nThermos\nTheron/M\nTheseus/M\nThespian/M\nThespis/M\nThessalonian/SM\nThessaloniki/M\nThessaly/M\nThieu/M\nThimbu/M\nThimphu\nThomas/M\nThomism/M\nThomistic/M\nThompson/M\nThomson/M\nThor/M\nThorazine/M\nThoreau/M\nThornton/M\nThoroughbred/M\nThorpe/M\nThoth/M\nThrace/M\nThracian/M\nThu\nThucydides/M\nThule/M\nThunderbird/M\nThur/S\nThurber/M\nThurman/M\nThurmond/M\nThursday/SM\nThutmose/M\nTi/M\nTia/M\nTianjin/M\nTiber/M\nTiberius/M\nTibet/M\nTibetan/MS\nTicketmaster/M\nTiconderoga/M\nTide/M\nTienanmen/M\nTiffany/M\nTigris/M\nTijuana/M\nTillich/M\nTillman/M\nTilsit/M\nTim/M\nTimbuktu/M\nTimex/M\nTimmy/M\nTimon/M\nTimor/M\nTimothy/M\nTimur/M\nTimurid/M\nTina/M\nTing/M\nTinkerbell/M\nTinkertoy/M\nTinseltown/M\nTintoretto/M\nTippecanoe/M\nTipperary/M\nTirane\nTiresias/M\nTirol/M\nTirolean\nTisha/M\nTishri/M\nTitan/SM\nTitania/M\nTitanic/M\nTitian/M\nTiticaca/M\nTito/M\nTitus/M\nTitusville/M\nTl/M\nTlaloc/M\nTlingit/M\nTm/M\nTobago/M\nTobit/M\nToby/M\nTocantins/M\nTocqueville/M\nTod/M\nTodd/M\nTogo/M\nTogolese/M\nTojo/M\nTokay/M\nTokugawa/M\nTokyo/M\nTokyoite\nToledo/MS\nTolkien/M\nTolstoy/M\nToltec/M\nTolyatti/M\nTom/M\nTomas/M\nTombaugh/M\nTomlin/M\nTommie/M\nTommy/M\nTompkins/M\nTomsk/M\nTonga/M\nTongan/MS\nToni/M\nTonia/M\nTonto/M\nTony/M\nTonya/M\nTopeka/M\nTopsy/M\nTorah/M\nTorahs\nToronto/M\nTorquemada/M\nTorrance/M\nTorrens/M\nTorres/M\nTorricelli/M\nTortola/M\nTortuga/M\nTorvalds/M\nTory/SM\nTosca/M\nToscanini/M\nToshiba/M\nToto/M\nToulouse/M\nTownes/M\nTownsend/M\nToynbee/M\nToyoda/M\nToyota/M\nTracey/M\nTraci/M\nTracie/M\nTracy/M\nTrafalgar/M\nTrailways/M\nTrajan/M\nTran/M\nTranscaucasia/M\nTransvaal/M\nTransylvania/M\nTransylvanian/M\nTrappist/SM\nTravis/M\nTravolta/M\nTreasury/SM\nTreblinka/M\nTrekkie/M\nTrent/M\nTrenton/M\nTrevelyan/M\nTrevino/M\nTrevor/M\nTrey/M\nTriangulum/M\nTriassic/M\nTricia/M\nTrident/M\nTrieste/M\nTrimurti/M\nTrina/M\nTrinidad/M\nTrinidadian/MS\nTrinity/SM\nTripitaka/M\nTripoli/M\nTrippe/M\nTrisha/M\nTristan/M\nTriton/M\nTrobriand/M\nTroilus/M\nTrojan/MS\nTrollope/M\nTrondheim/M\nTropicana/M\nTrotsky/M\nTroy/M\nTroyes\nTruckee/M\nTrudeau/M\nTrudy/M\nTruffaut/M\nTrujillo/M\nTruman/M\nTrumbull/M\nTrump/M\nTruth/M\nTsimshian/M\nTsiolkovsky/M\nTsitsihar/M\nTsongkhapa/M\nTswana/M\nTu/M\nTuamotu/M\nTuareg/M\nTubman/M\nTucker/M\nTucson/M\nTucuman/M\nTudor/SM\nTue/S\nTues/M\nTuesday/MS\nTulane/M\nTull/M\nTulsa/M\nTulsidas/M\nTums/M\nTungus/M\nTunguska/M\nTunis/M\nTunisia/M\nTunisian/MS\nTunney/M\nTupi/M\nTupperware/M\nTupungato/M\nTurgenev/M\nTurin/M\nTuring/M\nTurk/SM\nTurkestan/M\nTurkey/M\nTurkic/MS\nTurkish/M\nTurkmenistan/M\nTurlock/M\nTurner/M\nTurpin/M\nTuscaloosa/M\nTuscan/M\nTuscany/M\nTuscarora/MS\nTuscon/M\nTuskegee/M\nTussaud/M\nTut/M\nTutankhamen/M\nTutsi/M\nTutu/M\nTuvalu/M\nTuvaluan\nTwain/M\nTweed/M\nTweedledee/M\nTweedledum/M\nTwila/M\nTwinkies/M\nTwitter/M\nTwizzlers/M\nTwp\nTy/M\nTycho/M\nTylenol/M\nTyler/M\nTyndale/M\nTyndall/M\nTyre/M\nTyree/M\nTyrolean\nTyrone/M\nTyson/M\nU/M\nUAR\nUAW\nUBS/M\nUCLA/M\nUFO/SM\nUHF/M\nUK/M\nUL\nUN/M\nUNESCO/M\nUNICEF/M\nUNIX/M\nUPC\nUPI/M\nUPS/M\nURL/S\nUS/M\nUSA/M\nUSAF\nUSB\nUSCG\nUSDA/M\nUSIA\nUSMC\nUSN\nUSO\nUSP\nUSPS\nUSS\nUSSR/M\nUT/M\nUTC\nUV/M\nUbangi/M\nUbuntu/M\nUcayali/M\nUccello/M\nUdall/M\nUfa/M\nUganda/M\nUgandan/MS\nUighur/M\nUjungpandang/M\nUkraine/M\nUkrainian/SM\nUlster/M\nUltrasuede/M\nUlyanovsk/M\nUlysses/M\nUmbriel/M\nUnderwood/M\nUngava/M\nUnicode/M\nUnilever/M\nUnion/SM\nUnionist\nUniontown/M\nUniroyal/M\nUnitarian/MS\nUnitarianism/MS\nUnitas/M\nUnix/S\nUnukalhai/M\nUpanishads/M\nUpdike/M\nUpjohn/M\nUpton/M\nUr/M\nUral/SM\nUrals/M\nUrania/M\nUranus/M\nUrban/M\nUrdu/M\nUrey/M\nUriah/M\nUriel/M\nUris/M\nUrquhart/M\nUrsa/M\nUrsula/M\nUrsuline/M\nUruguay/M\nUruguayan/MS\nUrumqi/M\nUsenet/MS\nUstinov/M\nUt\nUtah/M\nUtahan/MS\nUte/SM\nUtica/M\nUtopia/SM\nUtopian/SM\nUtrecht/M\nUtrillo/M\nUzbek/M\nUzbekistan/M\nUzi/SM\nV/M\nVA\nVAT/M\nVAX\nVAXes\nVBA/M\nVCR/M\nVD/M\nVDT\nVDU\nVF\nVFW/M\nVG\nVGA\nVHF/M\nVHS\nVI/M\nVIP/SM\nVISTA\nVJ\nVLF/M\nVOA\nVP\nVT\nVTOL\nVa/M\nVacaville/M\nVader/M\nVaduz/M\nVal/M\nValarie/M\nValdez/M\nValdosta/M\nValencia/SM\nValenti/M\nValentin/M\nValentine/M\nValentino/M\nValenzuela/M\nValeria/M\nValerian/M\nValerie/M\nValery/M\nValhalla/M\nValium/MS\nValkyrie/SM\nVallejo/M\nValletta/M\nValois/M\nValparaiso/M\nValvoline/M\nVan/M\nVance/M\nVancouver/M\nVandal/MS\nVanderbilt/M\nVandyke/M\nVanessa/M\nVang/M\nVanuatu/M\nVanzetti/M\nVaranasi/M\nVarese/M\nVargas/M\nVaseline/SM\nVasquez/M\nVassar/M\nVatican/M\nVauban/M\nVaughan/M\nVaughn/M\nVazquez/M\nVeblen/M\nVeda/SM\nVedanta/M\nVega/SM\nVegas/M\nVegemite/M\nVela/M\nVelasquez/M\nVelazquez/M\nVelcro/MS\nVelez/M\nVelma/M\nVelveeta/M\nVenetian/SM\nVenezuela/M\nVenezuelan/SM\nVenice/M\nVenn/M\nVentolin/M\nVenus/MS\nVenusian/M\nVera/M\nVeracruz/M\nVerde/M\nVerdi/M\nVerdun/M\nVerizon/M\nVerlaine/M\nVermeer/M\nVermont/ZMR\nVermonter/M\nVern/M\nVerna/M\nVerne/M\nVernon/M\nVerona/M\nVeronese/M\nVeronica/M\nVersailles/M\nVesalius/M\nVespasian/M\nVespucci/M\nVesta/M\nVesuvius/M\nViacom/M\nViagra/M\nVic/M\nVicente/M\nVichy/M\nVicki/M\nVickie/M\nVicksburg/M\nVicky/M\nVictor/M\nVictoria/M\nVictorian/MS\nVictorianism\nVictorville/M\nVictrola/M\nVidal/M\nVienna/M\nViennese/M\nVientiane/M\nVietcong/M\nVietminh/M\nVietnam/M\nVietnamese/M\nVijayanagar/M\nVijayawada/M\nViking/MS\nVila/M\nVilla/SM\nVillarreal/M\nVillas/M\nVillon/M\nVilma/M\nVilnius/M\nVilyui/M\nVince/M\nVincent/M\nVindemiatrix/M\nVineland/M\nVinson/M\nViola/M\nViolet/M\nVirgie/M\nVirgil/M\nVirginia/M\nVirginian/SM\nVirgo/SM\nVisa/M\nVisalia/M\nVisayans/M\nVishnu/M\nVisigoth/M\nVisigoths\nVistula/M\nVitim/M\nVito/M\nVitus/M\nVivaldi/M\nVivekananda/M\nVivian/M\nVivienne/M\nVlad/M\nVladimir/M\nVladivostok/M\nVlaminck/M\nVlasic/M\nVoIP\nVogue/M\nVolcker/M\nVoldemort/M\nVolga/M\nVolgograd/M\nVolkswagen/M\nVolstead/M\nVolta/M\nVoltaire/M\nVolvo/M\nVonda/M\nVonnegut/M\nVoronezh/M\nVorster/M\nVoyager/M\nVt\nVuitton/M\nVulcan/M\nVulg\nVulgate/SM\nW/MDT\nWA\nWAC\nWASP/M\nWATS/M\nWC\nWHO/M\nWI\nWMD\nWNW/M\nWP\nWSW/M\nWTO\nWV\nWW\nWWI\nWWII\nWWW/M\nWY\nWYSIWYG\nWabash/M\nWac\nWaco/M\nWade/M\nWagner/M\nWagnerian/M\nWahhabi/M\nWaikiki/M\nWaite/M\nWake/M\nWaksman/M\nWald/MN\nWaldemar/M\nWalden/M\nWaldensian/M\nWaldheim/M\nWaldo/M\nWaldorf/M\nWales/M\nWalesa/M\nWalgreen/SM\nWalgreens/M\nWalker/M\nWalkman/M\nWall/SMR\nWallace/M\nWallenstein/M\nWaller/M\nWallis/M\nWalloon/M\nWalls/M\nWalmart/M\nWalpole/M\nWalpurgisnacht/M\nWalsh/M\nWalt/MRZ\nWalter/M\nWalters/M\nWalton/M\nWanamaker/M\nWanda/M\nWang/M\nWankel/M\nWard/M\nWare/MG\nWarhol/M\nWaring/M\nWarner/M\nWarren/M\nWarsaw/M\nWarwick/M\nWasatch/M\nWash/M\nWashington/M\nWashingtonian/MS\nWassermann/M\nWaterbury/M\nWaterford/M\nWatergate/M\nWaterloo/MS\nWaters/M\nWatertown/M\nWatkins/M\nWatson/M\nWatsonville/M\nWatt/SM\nWatteau/M\nWatts/M\nWatusi/M\nWaugh/M\nWausau/M\nWave\nWayne/M\nWaynesboro/M\nWeaver/M\nWeb/MR\nWebb/M\nWeber/M\nWebern/M\nWebster/MS\nWed/M\nWeddell/M\nWedgwood/M\nWednesday/MS\nWeeks/M\nWehrmacht/M\nWei/M\nWeierstrass/M\nWeill/M\nWeinberg/M\nWeirton/M\nWeiss/M\nWeissmuller/M\nWeizmann/M\nWeldon/M\nWelland/M\nWeller/M\nWelles/M\nWellington/SM\nWells/M\nWelsh/M\nWelshman/M\nWelshmen/M\nWelshwoman\nWenatchee/M\nWendell/M\nWendi/M\nWendy/M\nWesak/M\nWesley/M\nWesleyan/M\nWessex/M\nWesson/M\nWest/SM\nWestern/MRS\nWestinghouse/M\nWestminster/M\nWeston/M\nWestphalia/M\nWeyden/M\nWezen/M\nWharton/M\nWheaties/M\nWheatstone/M\nWheeler/M\nWheeling/M\nWhig/SM\nWhipple/M\nWhirlpool/M\nWhistler/M\nWhitaker/M\nWhite/SM\nWhitefield/M\nWhitehall/M\nWhitehead/M\nWhitehorse/M\nWhiteley/M\nWhitfield/M\nWhitley/M\nWhitman/M\nWhitney/M\nWhitsunday/MS\nWhittier/M\nWiFi\nWicca/M\nWichita/M\nWiemar/M\nWiesel/M\nWiesenthal/M\nWiggins/M\nWigner/M\nWii/M\nWikileaks\nWikipedia/M\nWilberforce/M\nWilbert/M\nWilbur/M\nWilburn/M\nWilcox/M\nWilda/M\nWilde/MR\nWilder/M\nWiles/M\nWiley/M\nWilford/M\nWilfred/M\nWilfredo/M\nWilhelm/M\nWilhelmina/M\nWilkerson/M\nWilkes/M\nWilkins/M\nWilkinson/M\nWill/M\nWilla/M\nWillamette/M\nWillard/M\nWillemstad/M\nWilliam/SM\nWilliams/M\nWilliamsburg/M\nWilliamson/M\nWilliamsport/M\nWillie/M\nWillis/M\nWilly/M\nWilma/M\nWilmer/M\nWilmington/M\nWilson/M\nWilsonian/M\nWilton/M\nWimbledon/M\nWimsey/M\nWinchell/M\nWinchester/MS\nWindbreaker/M\nWindex/M\nWindhoek/M\nWindows/M\nWindsor/SM\nWindward/M\nWinesap/M\nWinfred/M\nWinfrey/M\nWinifred/M\nWinkle/M\nWinnebago/M\nWinnie/M\nWinnipeg/M\nWinston/M\nWinters/M\nWinthrop/M\nWis\nWisc\nWisconsin/M\nWisconsinite/MS\nWise/M\nWitt/M\nWittgenstein/M\nWitwatersrand/M\nWm/M\nWobegon/M\nWodehouse/M\nWolf/M\nWolfe/M\nWolff/M\nWolfgang/M\nWollongong/M\nWollstonecraft/M\nWolsey/M\nWolverhampton\nWonder/M\nWonderbra/M\nWong/M\nWood/SM\nWoodard/M\nWoodhull/M\nWoodland/M\nWoodrow/M\nWoods/M\nWoodstock/M\nWoodward/M\nWoolf/M\nWoolite/M\nWoolongong/M\nWoolworth/M\nWooster/M\nWooten/M\nWorcester/SM\nWorcestershire/M\nWordPress/M\nWordsworth/M\nWorkman/M\nWorms/M\nWotan/M\nWovoka/M\nWozniak/M\nWozzeck/M\nWrangell/M\nWren/M\nWright/M\nWrigley/M\nWroclaw/M\nWu/M\nWuhan/M\nWurlitzer/M\nWyatt/M\nWycherley/M\nWycliffe/M\nWyeth/M\nWylie/M\nWynn/M\nWyo\nWyoming/M\nWyomingite/SM\nX/M\nXEmacs/M\nXL/M\nXML\nXS\nXXL\nXamarin/M\nXanadu/M\nXanthippe/M\nXavier/M\nXe/SM\nXenakis/M\nXenia/M\nXenophon/M\nXerox/MS\nXerxes/M\nXhosa/M\nXi'an/M\nXian/SM\nXiaoping/M\nXimenes/M\nXingu/M\nXinjiang/M\nXiongnu/M\nXizang/M\nXmas/MS\nXochipilli/M\nXuzhou/M\nY/M\nYMCA/M\nYMHA\nYMMV\nYT\nYWCA/M\nYWHA\nYacc/M\nYahoo/M\nYahtzee/M\nYahweh/M\nYakima/M\nYakut/M\nYakutsk/M\nYale/M\nYalow/M\nYalta/M\nYalu/M\nYamagata/M\nYamaha/M\nYamoussoukro/M\nYang/M\nYangon/M\nYangtze/M\nYank/SM\nYankee/SM\nYaobang/M\nYaounde/M\nYaqui/M\nYaren\nYaroslavl/M\nYataro/M\nYates/M\nYauco/M\nYb/M\nYeager/M\nYeats/M\nYekaterinburg/M\nYellowknife/M\nYellowstone/M\nYeltsin/M\nYemen/M\nYemeni/SM\nYemenite\nYenisei/M\nYerevan/M\nYerkes/M\nYesenia/M\nYevtushenko/M\nYggdrasil/M\nYiddish/M\nYmir/M\nYoda/M\nYoknapatawpha/M\nYoko/M\nYokohama/M\nYolanda/M\nYong/M\nYonkers/M\nYork/M\nYorkie/M\nYorkshire/MS\nYorktown/M\nYoruba/M\nYosemite/M\nYossarian/M\nYouTube/M\nYoung/M\nYoungstown/M\nYpres/M\nYpsilanti/M\nYuan/M\nYucatan/M\nYugo/M\nYugoslav/MS\nYugoslavia/M\nYugoslavian/SM\nYukon/M\nYule/SM\nYuletide/MS\nYuma/SM\nYunnan/M\nYuri/M\nYves/M\nYvette/M\nYvonne/M\nZ/SMNXT\nZachariah/M\nZachary/M\nZachery/M\nZagreb/M\nZaire/M\nZairian\nZambezi/M\nZambia/M\nZambian/SM\nZamboni/M\nZamenhof/M\nZamora/M\nZane/M\nZanuck/M\nZanzibar/M\nZapata/M\nZaporozhye/M\nZapotec/M\nZappa/M\nZara/M\nZarathustra/M\nZealand/M\nZebedee/M\nZechariah/M\nZedekiah/M\nZedong/M\nZeffirelli/M\nZeke/M\nZelig/M\nZelma/M\nZen/M\nZenger/M\nZeno/M\nZephaniah/M\nZephyrhills/M\nZephyrus/M\nZest/M\nZeus/M\nZhdanov\nZhejiang/M\nZhengzhou/M\nZhivago/M\nZhukov/M\nZibo/M\nZiegfeld/M\nZiegler/M\nZiggy/M\nZika\nZimbabwe/M\nZimbabwean/SM\nZimmerman/M\nZinfandel/M\nZion/SM\nZionism/SM\nZionist/SM\nZiploc/M\nZn/M\nZoe/M\nZola/M\nZollverein/M\nZoloft/M\nZomba/M\nZorn/M\nZoroaster/M\nZoroastrian/MS\nZoroastrianism/SM\nZorro/M\nZosma/M\nZr/M\nZsigmondy/M\nZubenelgenubi/M\nZubeneschamali/M\nZukor/M\nZulu/SM\nZululand\nZuni/M\nZurich/M\nZwingli/M\nZworykin/M\nZyrtec/M\nZyuganov/M\nZzz\na/S\naah\naardvark/SM\nab/SDY\naback\nabacus/MS\nabaft\nabalone/SM\nabandon/LSDG\nabandonment/M\nabase/LGDS\nabasement/M\nabash/GLDS\nabashed/UY\nabashment/M\nabate/LGDS\nabated/U\nabatement/M\nabattoir/MS\nabbe/SM\nabbess/MS\nabbey/MS\nabbot/MS\nabbr\nabbrev/S\nabbreviate/DSGNX\nabbreviation/M\nabdicate/GNDSX\nabdication/M\nabdomen/SM\nabdominal\nabduct/DSG\nabductee/MS\nabduction/SM\nabductor/MS\nabeam\naberrant\naberration/MS\naberrational\nabet/S\nabetted\nabetting\nabettor/SM\nabeyance/M\nabhor/S\nabhorred\nabhorrence/M\nabhorrent/Y\nabhorring\nabidance/M\nabide/GS\nabiding/Y\nability/IEMS\nabject/YP\nabjection/M\nabjectness/M\nabjuration/SM\nabjuratory\nabjure/ZGDRS\nabjurer/M\nablate/XGNVDS\nablation/M\nablative/MS\nablaze\nable/UT\nabler\nabloom\nablution/SM\nabnegate/GNDS\nabnegation/M\nabnormal/Y\nabnormality/SM\naboard\nabode/MS\nabolish/GDS\nabolition/M\nabolitionism/M\nabolitionist/SM\nabominable\nabominably\nabominate/DSGNX\nabomination/M\naboriginal/MS\naborigine/SM\naborning\nabort/GVDS\nabortion/MS\nabortionist/MS\nabortive/Y\nabound/DSG\nabout\nabove/M\naboveboard\nabracadabra/M\nabrade/GDS\nabrasion/MS\nabrasive/MYPS\nabrasiveness/M\nabreast\nabridge/DSG\nabridgment/MS\nabroad\nabrogate/XGNDS\nabrogation/M\nabrogator/MS\nabrupt/TPRY\nabruptness/M\nabs/M\nabscess/MDSG\nabscissa/SM\nabscission/M\nabscond/ZGSDR\nabsconder/M\nabseil/MDSG\nabsence/SM\nabsent/DYSG\nabsentee/MS\nabsenteeism/M\nabsentminded/YP\nabsentmindedness/M\nabsinthe/M\nabsolute/PMYTNS\nabsoluteness/M\nabsolution/M\nabsolutism/M\nabsolutist/MS\nabsolve/DSG\nabsorb/AGDS\nabsorbance\nabsorbency/M\nabsorbent/SM\nabsorbing/Y\nabsorption/M\nabsorptive\nabstain/DRZGS\nabstainer/M\nabstemious/PY\nabstemiousness/M\nabstention/MS\nabstinence/M\nabstinent\nabstract/GSPMDY\nabstracted/YP\nabstractedness/M\nabstraction/SM\nabstractness/MS\nabstruse/YP\nabstruseness/M\nabsurd/TPRY\nabsurdist/MS\nabsurdity/SM\nabsurdness/M\nabundance/SM\nabundant/Y\nabuse's\nabuse/EGVDS\nabuser/MS\nabusive/YP\nabusiveness/M\nabut/SL\nabutment/MS\nabutted\nabutting\nabuzz\nabysmal/Y\nabyss/MS\nabyssal\nac\nacacia/MS\nacademe/M\nacademia/M\nacademic/SM\nacademical/Y\nacademician/MS\nacademy/SM\nacanthus/MS\naccede/GDS\naccelerate/GNXDS\nacceleration/M\naccelerator/SM\naccent/MDSG\naccented/U\naccentual\naccentuate/GNDS\naccentuation/M\naccept/DSBG\nacceptability/M\nacceptableness/M\nacceptably/U\nacceptance/SM\nacceptation/MS\naccepted/U\naccess/MDSG\naccessibility/IM\naccessible/I\naccessibly/I\naccession/MDGS\naccessorize/DSG\naccessory/SM\naccident/MS\naccidental/SMY\nacclaim/MDGS\nacclamation/M\nacclimate/DSGN\nacclimation/M\nacclimatization/M\nacclimatize/DSG\nacclivity/SM\naccolade/SM\naccommodate/XGNDS\naccommodating/Y\naccommodation/M\naccompanied/U\naccompaniment/MS\naccompanist/SM\naccompany/DSG\naccomplice/SM\naccomplish/DSLG\naccomplished/U\naccomplishment/MS\naccord/GMDS\naccordance/M\naccordant\naccording/Y\naccordion/MS\naccordionist/MS\naccost/GMDS\naccount/MDSBG\naccountability/M\naccountable/U\naccountancy/M\naccountant/MS\naccounted/U\naccounting/M\naccouter/SGD\naccouterments/M\naccredit/SGD\naccreditation/M\naccredited/U\naccretion/MS\naccrual/MS\naccrue/GDS\nacct\nacculturate/DSGN\nacculturation/M\naccumulate/XGNVDS\naccumulation/M\naccumulator/MS\naccuracy/IM\naccurate/IY\naccurateness/M\naccursed/P\naccursedness/M\naccusation/MS\naccusative/MS\naccusatory\naccuse/ZGDRS\naccuser/M\naccusing/Y\naccustom/DSG\naccustomed/U\nace/DSMG\nacerbate/DSG\nacerbic\nacerbically\nacerbity/M\nacetaminophen/M\nacetate/MS\nacetic\nacetone/M\nacetonic\nacetyl\nacetylene/M\nache/DSMG\nachene/MS\nachievable/U\nachieve/BLZGDRS\nachievement/SM\nachiever/M\naching/Y\nachoo/M\nachromatic\nachy/TR\nacid/SMY\nacidic\nacidify/GDS\nacidity/M\nacidosis/M\nacidulous\nacknowledge/DSG\nacknowledged/U\nacknowledgment/SM\nacme/SM\nacne/M\nacolyte/MS\naconite/MS\nacorn/MS\nacoustic/S\nacoustical/Y\nacoustics/M\nacquaint/AGSD\nacquaintance/SM\nacquaintanceship/M\nacquainted/U\nacquiesce/DSG\nacquiescence/M\nacquiescent/Y\nacquire/ZGBDRSL\nacquirement/M\nacquisition/MS\nacquisitive/YP\nacquisitiveness/M\nacquit/S\nacquittal/MS\nacquitted\nacquitting\nacre/SM\nacreage/MS\nacrid/PTRY\nacridity/M\nacridness/M\nacrimonious/YP\nacrimoniousness/M\nacrimony/M\nacrobat/MS\nacrobatic/S\nacrobatically\nacrobatics/M\nacronym/MS\nacrophobia/M\nacropolis/MS\nacross\nacrostic/SM\nacrylamide\nacrylic/MS\nact's\nact/ASDGV\nacting/M\nactinium/M\naction/ASM\nactionable\nactivate/ICANGSD\nactivation/ICAM\nactivator/MS\nactive's\nactive/IKY\nactiveness/M\nactives\nactivism/M\nactivist/MS\nactivities\nactivity/IM\nactor/AMS\nactress/MS\nactual/Y\nactuality/SM\nactualization/M\nactualize/GDS\nactuarial\nactuary/SM\nactuate/GNDS\nactuation/M\nactuator/SM\nacuity/M\nacumen/M\nacupressure/M\nacupuncture/M\nacupuncturist/SM\nacute/PMYTRS\nacuteness/M\nacyclovir/M\nacyl\nad/SM\nadage/MS\nadagio/MS\nadamant/MY\nadapt/BZGVDRS\nadaptability/M\nadaptation/MS\nadapter/M\nadaption/S\nadd/SDRBZG\naddend/MS\naddenda\naddendum/M\nadder/M\naddict/GVMDS\naddiction/SM\naddition/SM\nadditional/Y\nadditive/SM\naddle/GDS\naddress's\naddress/AGDS\naddressable\naddressed/U\naddressee/SM\nadduce/GDS\nadenine/M\nadenocarcinoma\nadenoid/SM\nadenoidal\nadept/MYPS\nadeptness/M\nadequacy/IM\nadequate/IY\nadequateness/M\nadhere/GDS\nadherence/M\nadherent/SM\nadhesion/M\nadhesive/PSM\nadhesiveness/M\nadiabatic\nadieu/MS\nadios\nadipose\nadj\nadjacency/M\nadjacent/Y\nadjectival/Y\nadjective/MS\nadjoin/GDS\nadjourn/DGLS\nadjournment/SM\nadjudge/GDS\nadjudicate/GNVXDS\nadjudication/M\nadjudicator/SM\nadjudicatory\nadjunct/MS\nadjuration/MS\nadjure/GDS\nadjust/AGDSL\nadjustable\nadjuster/SM\nadjustment/AMS\nadjutant/SM\nadman/M\nadmen\nadmin/S\nadminister/DGS\nadministrate/XDSGNV\nadministration/M\nadministrative/Y\nadministrator/MS\nadmirably\nadmiral/MS\nadmiralty/M\nadmiration/M\nadmire/BZGDRS\nadmirer/M\nadmiring/Y\nadmissibility/IM\nadmissible/I\nadmissibly\nadmission/AM\nadmissions\nadmit/AS\nadmittance/M\nadmitted/Y\nadmitting/A\nadmix/GDS\nadmixture/SM\nadmonish/LDSG\nadmonishment/MS\nadmonition/MS\nadmonitory\nado/M\nadobe/MS\nadolescence/SM\nadolescent/SM\nadopt/AGVDS\nadoptable\nadopter/MS\nadoption/SM\nadorableness/M\nadorably\nadoration/M\nadore/BZGDRS\nadorer/M\nadoring/Y\nadorn/LGDS\nadorned/U\nadornment/MS\nadrenal/MS\nadrenalin's\nadrenaline/M\nadrenergic\nadrift\nadroit/PY\nadroitness/M\nadsorb/SDG\nadsorbent/MS\nadsorption/SM\nadulate/DSGN\nadulation/M\nadulator/MS\nadulatory\nadult/MS\nadulterant/MS\nadulterate/GNDS\nadulterated/U\nadulteration/M\nadulterer/SM\nadulteress/MS\nadulterous\nadultery/SM\nadulthood/M\nadumbrate/GNDS\nadumbration/M\nadv\nadvance/LDSMG\nadvancement/SM\nadvantage/EDSMG\nadvantageous/EY\nadvent/SM\nadventitious/Y\nadventure/DRSMZG\nadventurer/M\nadventuresome\nadventuress/MS\nadventurism\nadventurist/S\nadventurous/YP\nadventurousness/M\nadverb/SM\nadverbial/SMY\nadversarial\nadversary/SM\nadverse/PRYT\nadverseness/M\nadversity/SM\nadvert/SMDG\nadvertise/LZGDRS\nadvertised/U\nadvertisement/MS\nadvertiser/M\nadvertising/M\nadvertorial/SM\nadvice/M\nadvisability/IM\nadvisable/I\nadvisably\nadvise/LDRSZGB\nadvised/UY\nadvisement/M\nadviser/M\nadvisor/SM\nadvisory/SM\nadvocacy/M\nadvocate/MGDS\nadvt\nadware\nadze/SM\naegis/M\naerate/DSGN\naeration/M\naerator/SM\naerial/SMY\naerialist/MS\naerie/MS\naerobatic/S\naerobatics/M\naerobic/S\naerobically\naerobics/M\naerodrome/MS\naerodynamic/S\naerodynamically\naerodynamics/M\naerogram/S\naeronautic/S\naeronautical\naeronautics/M\naerosol/MS\naerospace/M\naesthete/MS\naesthetic/S\naesthetically\naestheticism/M\naesthetics/M\nafar\naffability/M\naffable\naffably\naffair/MS\naffect's\naffect/EGDS\naffectation/SM\naffected/UY\naffecting/Y\naffection/EM\naffectionate/Y\naffections\nafferent\naffiance/GDS\naffidavit/SM\naffiliate's\naffiliate/EGNDS\naffiliated/U\naffiliation/EM\naffiliations\naffine\naffinity/SM\naffirm/AGDS\naffirmation/AMS\naffirmative/MYS\naffix/GMDS\nafflatus/M\nafflict/GDS\naffliction/SM\naffluence/M\naffluent/Y\nafford/GDSB\naffordability\naffordably\nafforest/EGSD\nafforestation/M\naffray/MS\naffront/GMDS\nafghan/MS\naficionado/MS\nafield\nafire\naflame\nafloat\naflutter\nafoot\naforementioned\naforesaid\naforethought\nafoul\nafraid/U\nafresh\naft/RZ\nafterbirth/M\nafterbirths\nafterburner/MS\naftercare/M\naftereffect/MS\nafterglow/SM\nafterimage/MS\nafterlife/M\nafterlives\naftermarket/MS\naftermath/M\naftermaths\nafternoon/MS\naftershave/SM\naftershock/SM\naftertaste/SM\nafterthought/SM\nafterward/S\nafterword/MS\nagain\nagainst\nagape/M\nagar/M\nagate/MS\nagave/M\nage/DSMGJ\nageism/M\nageist/SM\nageless/YP\nagelessness/M\nagency/SM\nagenda/SM\nagenesis\nagent/AMS\nageratum/M\nagglomerate/DSMGNX\nagglomeration/M\nagglutinate/DSXGN\nagglutination/M\naggrandize/GLDS\naggrandizement/M\naggravate/GNXDS\naggravating/Y\naggravation/M\naggregate/MGNDSX\naggregation/M\naggregator/SM\naggression/M\naggressive/PY\naggressiveness/M\naggressor/SM\naggrieve/DSG\naggro\naghast\nagile/Y\nagility/M\naging/M\nagitate/XGNDS\nagitation/M\nagitator/MS\nagitprop/M\nagleam\naglitter\naglow\nagnostic/MS\nagnosticism/M\nago\nagog\nagonist/S\nagonize/GDS\nagonizing/Y\nagony/SM\nagoraphobia/M\nagoraphobic/MS\nagrarian/MS\nagrarianism/M\nagree/EBLDS\nagreeableness/EM\nagreeably/E\nagreeing/E\nagreement/ESM\nagribusiness/MS\nagricultural/Y\nagriculturalist/MS\nagriculture/M\nagriculturist/MS\nagronomic\nagronomist/MS\nagronomy/M\naground\nague/M\nah\naha\nahchoo\nahead\nahem\nahoy\naid/SMDG\naide/SM\naided/U\naigrette/MS\nail/SDLG\naileron/SM\nailment/SM\naim/SMDG\naimless/YP\naimlessness/M\nain't\nair/SMDJG\nairbag/MS\nairbase/SM\nairbed/S\nairborne\nairbrush/MDSG\nairbus/MS\naircraft/M\naircraftman\naircraftmen\naircrew/S\nairdrome/S\nairdrop/SM\nairdropped\nairdropping\nairfare/SM\nairfield/SM\nairflow/M\nairfoil/SM\nairfreight/M\nairguns\nairhead/SM\nairily\nairiness/M\nairing/M\nairless/P\nairlessness/M\nairletters\nairlift/SGMD\nairline/RSMZ\nairliner/M\nairlock/SM\nairmail/GSMD\nairman/M\nairmen\nairplane/MS\nairplay/M\nairport/SM\nairship/SM\nairshow/S\nairsick/P\nairsickness/M\nairspace/M\nairspeed\nairstrike/MS\nairstrip/SM\nairtight\nairtime/M\nairwaves/M\nairway/MS\nairwoman\nairwomen\nairworthiness/M\nairworthy/P\nairy/PTR\naisle/MS\naitch/MS\najar\naka\nakimbo\nakin\nalabaster/M\nalack\nalacrity/M\nalarm/GMDS\nalarming/Y\nalarmist/SM\nalas\nalb/SM\nalbacore/SM\nalbatross/MS\nalbeit\nalbinism/M\nalbino/MS\nalbum/MNS\nalbumen/M\nalbumin/M\nalbuminous\nalchemist/SM\nalchemy/M\nalcohol/SM\nalcoholic/MS\nalcoholically\nalcoholism/M\nalcove/MS\nalder/MS\nalderman/M\naldermen\nalderwoman/M\nalderwomen\nale/SMV\naleatory\nalehouse/SM\nalembic/SM\nalert/GMDYPS\nalertness/M\nalewife/M\nalewives\nalfalfa/M\nalfresco\nalga/M\nalgae\nalgal\nalgebra/SM\nalgebraic\nalgebraically\nalgorithm/SM\nalgorithmic\nalias/GMDS\nalibi/GMDS\nalien/BGMDS\nalienable/IU\nalienate/DSGN\nalienation/M\nalienist/SM\nalight/GDS\nalign/ALGDS\naligned/U\naligner/MS\nalignment/AMS\nalike/U\naliment/MDSG\nalimentary\nalimony/M\naliveness/M\naliyah/M\naliyahs\nalkali/M\nalkalies\nalkaline\nalkalinity/M\nalkalize/DSG\nalkaloid/SM\nalkyd/MS\nall/M\nallay/GDS\nallegation/MS\nallege/GDS\nalleged/Y\nallegiance/MS\nallegoric\nallegorical/Y\nallegorist/MS\nallegory/SM\nallegretto/MS\nallegro/MS\nallele/MS\nalleluia/SM\nallergen/SM\nallergenic\nallergic\nallergically\nallergist/SM\nallergy/SM\nalleviate/DSGN\nalleviation/M\nalley/MS\nalleyway/SM\nalliance/SM\nalligator/MS\nalliterate/DSXGNV\nalliteration/M\nalliterative/Y\nallocate/ADSGN\nallocation/AM\nallocations\nallot/LS\nallotment/SM\nallotted\nallotting\nallover\nallow/EGDS\nallowable/U\nallowably\nallowance/SM\nalloy/GMDS\nalloyed/U\nallspice/M\nallude/GDS\nallure/MGLDS\nallurement/MS\nalluring/Y\nallusion/SM\nallusive/PY\nallusiveness/M\nalluvial/M\nalluvium/SM\nally/GDSM\nalmanac/SM\nalmighty\nalmond/MS\nalmoner/SM\nalmost\nalms/M\nalmshouse/MS\naloe/SM\naloft\naloha/MS\nalone\nalong\nalongshore\nalongside\naloof/PY\naloofness/M\naloud\nalp/SM\nalpaca/MS\nalpha/MS\nalphabet/SM\nalphabetic\nalphabetical/Y\nalphabetization/SM\nalphabetize/ZGDRS\nalphabetizer/M\nalphanumeric\nalphanumerical/Y\nalpine/S\nalready\nalright\nalso\nalt/S\naltar/MS\naltarpiece/SM\nalter/GDBS\nalterable/U\nalteration/MS\naltercation/SM\naltered/U\nalternate/DSMYGNVX\nalternation/M\nalternative/MYS\nalternator/SM\nalthough\naltimeter/MS\naltitude/MS\nalto/SM\naltogether\naltruism/M\naltruist/SM\naltruistic\naltruistically\nalum/SM\nalumina/M\naluminum/M\nalumna/M\nalumnae\nalumni\nalumnus/M\nalveolar/S\nalways\nam/N\namalgam/SM\namalgamate/XGNDS\namalgamation/M\namanuenses\namanuensis/M\namaranth/M\namaranths\namaretto/M\namaryllis/MS\namass/GDS\namateur/SM\namateurish/YP\namateurishness/M\namateurism/M\namatory\namaze/LMGDS\namazement/M\namazing/Y\namazon/MS\namazonian\nambassador/SM\nambassadorial\nambassadorship/MS\nambassadress/MS\namber/M\nambergris/M\nambiance/MS\nambidexterity/M\nambidextrous/Y\nambient\nambiguity/SM\nambiguous/UY\nambit\nambition/MS\nambitious/YP\nambitiousness/M\nambivalence/M\nambivalent/Y\namble/MZGDRS\nambler/M\nambrosia/M\nambrosial\nambulance/MS\nambulanceman\nambulancemen\nambulancewoman\nambulancewomen\nambulant\nambulate/DSXGN\nambulation/M\nambulatory/SM\nambuscade/MGDS\nambush/GMDS\nameliorate/GNVDS\namelioration/M\namen/B\namenability/M\namenably\namend/BLGDS\namendment/SM\namenity/SM\namerce/GLDS\namercement/SM\namericium/M\namethyst/SM\namiability/M\namiable\namiably\namicability/M\namicable\namicably\namid\namide/MS\namidship/S\namigo/MS\namine/S\namino\namiss\namitriptyline\namity/M\nammeter/SM\nammo/M\nammonia/M\nammonium\nammunition/M\namnesia/M\namnesiac/MS\namnesic/SM\namnesty/GDSM\namniocenteses\namniocentesis/M\namnion/MS\namniotic\namoeba/MS\namoebae\namoebic\namok\namong\namontillado/SM\namoral/Y\namorality/M\namorous/YP\namorousness/M\namorphous/PY\namorphousness/M\namortization/SM\namortize/DSGB\namount/GMDS\namour/MS\namoxicillin\namp/SMY\namperage/M\nampere/MS\nampersand/MS\namphetamine/SM\namphibian/MS\namphibious/Y\namphitheater/SM\namphora/M\namphorae\nampicillin\nample/TR\namplification/M\namplifier/M\namplify/NDRSXZG\namplitude/SM\nampule/MS\namputate/GNDSX\namputation/M\namputee/MS\namt\namulet/MS\namuse/LGDS\namusement/MS\namusing/Y\namygdala\namylase/M\namyloid\nan/CS\nanabolism/M\nanachronism/SM\nanachronistic\nanachronistically\nanaconda/SM\nanaerobe/SM\nanaerobic\nanaerobically\nanagram/MS\nanal/Y\nanalgesia/M\nanalgesic/SM\nanalog/MS\nanalogical/Y\nanalogize/GDS\nanalogous/YP\nanalogousness/M\nanalogue/SM\nanalogy/SM\nanalysand/MS\nanalyses/A\nanalysis/AM\nanalyst/SM\nanalytic\nanalytical/Y\nanalyzable\nanalyze/ADSG\nanalyzer/SM\nanapest/SM\nanapestic/MS\nanarchic\nanarchically\nanarchism/M\nanarchist/MS\nanarchistic\nanarchy/M\nanathema/SM\nanathematize/DSG\nanatomic\nanatomical/Y\nanatomist/SM\nanatomize/DSG\nanatomy/SM\nancestor/SM\nancestral/Y\nancestress/MS\nancestry/SM\nanchor/MDGS\nanchorage/MS\nanchorite/MS\nanchorman/M\nanchormen\nanchorpeople\nanchorperson/SM\nanchorwoman/M\nanchorwomen\nanchovy/SM\nancient/SPMRYT\nancientness/M\nancillary/SM\nand\nandante/SM\nandiron/SM\nandrogen/M\nandrogenic\nandrogynous\nandrogyny/M\nandroid/SM\nanecdotal/Y\nanecdote/MS\nanemia/M\nanemic\nanemically\nanemometer/SM\nanemone/SM\nanent\nanesthesia/M\nanesthesiologist/SM\nanesthesiology/M\nanesthetic/SM\nanesthetist/MS\nanesthetization/SM\nanesthetize/GDS\naneurysm/SM\nanew\nangel/MS\nangelfish/MS\nangelic\nangelica/M\nangelical/Y\nanger/GMDS\nangina/M\nangioplasty/SM\nangiosperm/SM\nangle/MZGDRS\nangler/M\nangleworm/MS\nanglicism/S\nanglicize/GDS\nangling/M\nanglophile/S\nanglophone/S\nangora/MS\nangostura\nangrily\nangry/TR\nangst/M\nangstrom/MS\nanguish/GMDS\nangular\nangularity/SM\nangulation\nanhydrous\naniline/M\nanilingus\nanimadversion/MS\nanimadvert/GSD\nanimal/MS\nanimalcule/SM\nanimate/ADSGN\nanimated/Y\nanimation/AM\nanimations\nanimator/MS\nanime/M\nanimism/M\nanimist/SM\nanimistic\nanimosity/SM\nanimus/M\nanion/MS\nanionic\nanise/M\naniseed/M\nanisette/M\nankh/M\nankhs\nankle/MS\nanklebone/MS\nanklet/MS\nannalist/SM\nannals/M\nanneal/GDS\nannelid/MS\nannex/GMDS\nannexation/MS\nannihilate/DSGN\nannihilation/M\nannihilator/SM\nanniversary/SM\nannotate/DSXGNV\nannotation/M\nannotator/MS\nannounce/DRSLZG\nannounced/U\nannouncement/MS\nannouncer/M\nannoy/GDS\nannoyance/MS\nannoying/Y\nannual/MYS\nannualized\nannuitant/SM\nannuity/SM\nannul/LS\nannular\nannulled\nannulling\nannulment/SM\nannulus\nannunciation/SM\nanode/MS\nanodize/GDS\nanodyne/MS\nanoint/GDLS\nanointment/M\nanomalous/Y\nanomaly/SM\nanon/S\nanonymity/M\nanonymous/Y\nanopheles/M\nanorak/MS\nanorectic/SM\nanorexia/M\nanorexic/MS\nanother\nanswer/BMDGS\nanswerable/U\nanswered/U\nanswerphone/S\nant/SMD\nantacid/SM\nantagonism/SM\nantagonist/SM\nantagonistic\nantagonistically\nantagonize/DSG\nantarctic\nante/SM\nanteater/MS\nantebellum\nantecedence/M\nantecedent/SM\nantechamber/SM\nantedate/GDS\nantediluvian\nanteing\nantelope/MS\nantenatal\nantenna/SM\nantennae\nanterior\nanteroom/MS\nanthem/MS\nanther/MS\nanthill/SM\nanthologist/SM\nanthologize/DSG\nanthology/SM\nanthracite/M\nanthrax/M\nanthropocentric\nanthropoid/MS\nanthropological/Y\nanthropologist/SM\nanthropology/M\nanthropomorphic\nanthropomorphically\nanthropomorphism/M\nanthropomorphize\nanthropomorphous\nanti/SM\nantiabortion\nantiabortionist/MS\nantiaircraft\nantibacterial/MS\nantibiotic/MS\nantibody/SM\nantic/MS\nanticancer\nanticipate/GNXDS\nanticipated/U\nanticipation/M\nanticipatory\nanticked\nanticking\nanticlerical\nanticlimactic\nanticlimactically\nanticlimax/MS\nanticline/SM\nanticlockwise\nanticoagulant/MS\nanticommunism/M\nanticommunist/SM\nanticyclone/SM\nanticyclonic\nantidemocratic\nantidepressant/MS\nantidote/MS\nantifascist/MS\nantiferromagnetic\nantifreeze/M\nantigen/SM\nantigenic\nantigenicity/M\nantihero/M\nantiheroes\nantihistamine/SM\nantiknock/M\nantilabor\nantilogarithm/SM\nantimacassar/MS\nantimalarial\nantimatter/M\nantimicrobial\nantimissile\nantimony/M\nantineutrino/SM\nantineutron/MS\nantinuclear\nantioxidant/MS\nantiparticle/SM\nantipasti\nantipasto/MS\nantipathetic\nantipathy/SM\nantipersonnel\nantiperspirant/SM\nantiphon/SM\nantiphonal/MYS\nantipodal/S\nantipodean/MS\nantipodes/M\nantipollution\nantipoverty\nantiproton/MS\nantiquarian/SM\nantiquarianism/M\nantiquary/SM\nantiquate/GDS\nantique/DSMG\nantiquity/SM\nantirrhinum/S\nantiscience\nantisemitic\nantisemitism/M\nantisepsis/M\nantiseptic/SM\nantiseptically\nantiserum/MS\nantislavery\nantisocial/Y\nantispasmodic/MS\nantisubmarine\nantitank\nantitheses\nantithesis/M\nantithetic\nantithetical/Y\nantitoxin/MS\nantitrust\nantivenin/MS\nantivenom\nantiviral/MS\nantivirus\nantivivisectionist/MS\nantiwar\nantler/MDS\nantonym/SM\nantonymous\nantrum\nantsy/TR\nanus/MS\nanvil/MS\nanxiety/SM\nanxious/YP\nanxiousness/M\nany\nanybody/SM\nanyhow\nanymore\nanyone/M\nanyplace\nanything/SM\nanytime\nanyway/S\nanywhere\nanywise\naorta/MS\naortic\napace\napart\napartheid/M\napartment/MS\napathetic\napathetically\napathy/M\napatite/M\nape/DSMG\napelike\naperitif/MS\naperture/SM\napex/MS\naphasia/M\naphasic/MS\naphelia\naphelion/SM\naphid/MS\naphorism/MS\naphoristic\naphoristically\naphrodisiac/SM\napiarist/SM\napiary/SM\napical/Y\napiece\napish/Y\naplenty\naplomb/M\napocalypse/SM\napocalyptic\napocrypha/M\napocryphal/Y\napogee/MS\napolitical/Y\napologetic/U\napologetically\napologia/SM\napologist/MS\napologize/GDS\napology/SM\napoplectic\napoplexy/SM\napoptosis\napoptotic\napostasy/SM\napostate/SM\napostatize/GDS\napostle/MS\napostleship/M\napostolic\napostrophe/MS\napothecary/SM\napothegm/SM\napotheoses\napotheosis/M\napp/SM\nappall/GDS\nappalling/Y\nappaloosa/MS\napparatchik/S\napparatus/MS\napparel/MDGS\napparent/Y\napparition/SM\nappeal/GMDS\nappealing/UY\nappear/AESDG\nappearance/EAMS\nappease/LZGDRS\nappeasement/SM\nappeaser/M\nappellant/SM\nappellate/XN\nappellation/M\nappend/GDS\nappendage/SM\nappendectomy/SM\nappendices\nappendicitis/M\nappendix/MS\nappertain/GDS\nappetite/SM\nappetizer/MS\nappetizing/Y\napplaud/ZGDRS\napplauder/M\napplause/M\napple/MS\napplejack/M\napplesauce/M\napplet/MS\nappliance/SM\napplicability/M\napplicable/I\napplicably\napplicant/SM\napplication/AM\napplicator/SM\napplier/MS\napplique/DSM\nappliqueing\napply/ANXGDS\nappoint/AELSVGD\nappointee/SM\nappointment's/A\nappointment/ESM\napportion/AGDLS\napportionment/AM\nappose/GDS\napposite/YNVP\nappositeness/M\napposition/M\nappositive/SM\nappraisal/AMS\nappraise/ADSG\nappraiser/MS\nappreciable/I\nappreciably/I\nappreciate/DSXGNV\nappreciated/U\nappreciation/M\nappreciative/Y\nappreciator/MS\nappreciatory\napprehend/GDS\napprehension/MS\napprehensive/YP\napprehensiveness/M\napprentice/DSMG\napprenticeship/MS\napprise/GDS\napproach/GBMDS\napproachable/UI\napprobation/EM\napprobations\nappropriate/PYGNXDS\nappropriated/U\nappropriateness/IM\nappropriation/M\nappropriator/SM\napproval/EM\napprovals\napprove/EGDS\napproved/U\napproving/EY\napprox\napproximate/DSXYGN\napproximation/M\nappurtenance/SM\nappurtenant\napricot/MS\napron/MS\napropos\napse/SM\napt/IYPT\napter\naptitude/SM\naptness/IM\naqua/SM\naquaculture/M\naqualung/MS\naquamarine/SM\naquanaut/MS\naquaplane/MGDS\naquarium/MS\naquatic/SM\naquatically\naquatics/M\naquatint/S\naquavit/M\naqueduct/MS\naqueous\naquifer/SM\naquiline\narabesque/MS\narability/M\narachnid/MS\narachnophobia\narbiter/SM\narbitrage/MZGDRS\narbitrager/M\narbitrageur/SM\narbitrament/SM\narbitrarily\narbitrariness/M\narbitrary/P\narbitrate/GNDS\narbitration/M\narbitrator/MS\narbor/MS\narboreal\narboretum/SM\narborvitae/SM\narbutus/MS\narc/SMDG\narcade/MS\narcane\narch/PZTGVMDRSY\narchaeological/Y\narchaeologist/SM\narchaeology/M\narchaic\narchaically\narchaism/MS\narchaist/MS\narchangel/MS\narchbishop/SM\narchbishopric/SM\narchdeacon/SM\narchdiocesan\narchdiocese/MS\narchduchess/MS\narchduke/MS\narchenemy/SM\narcher/M\narchery/M\narchetypal\narchetype/MS\narchfiend/MS\narchiepiscopal\narchipelago/MS\narchitect/SM\narchitectonic/S\narchitectonics/M\narchitectural/Y\narchitecture/MS\narchitrave/SM\narchival\narchive/DSMG\narchivist/MS\narchness/M\narchway/SM\narctic/MS\nardent/Y\nardor/MS\narduous/YP\narduousness/M\nare/SMB\narea/SM\nareal\naren't\narena/MS\nargent/M\narginine\nargon/M\nargosy/SM\nargot/MS\narguable/IU\narguably/U\nargue/ZGDRS\narguer/M\nargument/MS\nargumentation/M\nargumentative/PY\nargumentativeness/M\nargyle/MS\naria/SM\narid/Y\naridity/M\naright\narise/GS\narisen\naristocracy/SM\naristocrat/SM\naristocratic\naristocratically\narithmetic/M\narithmetical/Y\narithmetician/MS\nark/SM\narm's\narm/EAGDS\narmada/MS\narmadillo/SM\narmament/AEM\narmaments\narmature/MS\narmband/MS\narmchair/MS\narmed/U\narmful/MS\narmhole/SM\narmistice/SM\narmlet/MS\narmload/S\narmor/ZGMDRS\narmored/U\narmorer/M\narmorial\narmory/SM\narmpit/MS\narmrest/SM\narmy/SM\naroma/MS\naromatherapist/MS\naromatherapy/M\naromatic/MS\naromatically\narose\naround\narousal/M\narouse/GDS\narpeggio/MS\narr\narraign/DGSL\narraignment/SM\narrange/AESDLG\narrangement's/E\narrangement/ASM\narranger/SM\narrant\narras/MS\narray/EGMDS\narrears/M\narrest/AGMDS\narrhythmia/M\narrhythmic\narrhythmical\narrival/MS\narrive/GDS\narrogance/M\narrogant/Y\narrogate/GNDS\narrogation/M\narrow/MS\narrowhead/MS\narrowroot/M\narroyo/MS\narsed\narsenal/MS\narsenic/M\narsing\narson/M\narsonist/SM\nart/SM\narterial\narteriole/MS\narteriosclerosis/M\nartery/SM\nartful/PY\nartfulness/M\narthritic/MS\narthritis/M\narthropod/MS\narthroscope/SM\narthroscopic\narthroscopy\nartichoke/SM\narticle/MDS\narticulacy/I\narticular\narticulate/YGNPDSX\narticulateness/IM\narticulation/M\nartifact/SM\nartifice/RSMZ\nartificer/M\nartificial/Y\nartificiality/M\nartillery/M\nartilleryman/M\nartillerymen\nartiness/M\nartisan/MS\nartist/MS\nartiste/MS\nartistic/I\nartistically\nartistry/M\nartless/PY\nartlessness/M\nartsy/TR\nartwork/MS\narty/PTR\narugula\narum/SM\nasap\nasbestos/M\nascend/AGDS\nascendance/M\nascendancy/M\nascendant/SM\nascension/MS\nascent/MS\nascertain/GDSBL\nascertainment/M\nascetic/MS\nascetically\nasceticism/M\nascot/MS\nascribe/GBDS\nascription/M\naseptic\naseptically\nasexual/Y\nasexuality/M\nash/MDNSG\nashamed/UY\nashcan/MS\nashlar/MS\nashore\nashram/MS\nashtray/SM\nashy/TR\naside/MS\nasinine/Y\nasininity/SM\nask/SDG\naskance\nasked/U\naskew\naslant\nasleep\nasocial\nasp/SMNX\nasparagus/M\naspartame/M\naspect/MS\naspen/M\nasperity/SM\naspersion/MS\nasphalt/MDGS\nasphodel/SM\nasphyxia/M\nasphyxiate/DSXGN\nasphyxiation/M\naspic/MS\naspidistra/MS\naspirant/MS\naspirate/MGNDSX\naspiration/M\naspirator/SM\naspire/GDS\naspirin/MS\nass/MS\nassail/GBDS\nassailable/U\nassailant/SM\nassassin/SM\nassassinate/GNXDS\nassassination/M\nassault/MDRGS\nassay/ZGMDRS\nassayer/M\nassemblage/SM\nassemble/AEGSD\nassembler/MS\nassemblies\nassembly/AM\nassemblyman/M\nassemblymen\nassemblywoman/M\nassemblywomen\nassent/GMDS\nassert/AGVDS\nassertion/AM\nassertions\nassertive/YP\nassertiveness/M\nassess/ALGDS\nassessment/ASM\nassessor/MS\nasset/MS\nasseverate/DSGN\nasseveration/M\nasshole/MS!\nassiduity/M\nassiduous/PY\nassiduousness/M\nassign's\nassign/ALGDS\nassignable\nassignation/MS\nassigned/U\nassignee/M\nassigner/MS\nassignment/AMS\nassignor/MS\nassimilate/DSGN\nassimilated/U\nassimilation/M\nassist/GVMDS\nassistance/M\nassistant/SM\nassisted/U\nassize/MS\nassn\nassoc\nassociate's\nassociate/EDSGNV\nassociation/EM\nassociations\nassociativity\nassonance/M\nassonant/MS\nassort/GLDS\nassortative\nassortment/MS\nasst\nassuage/GDS\nassume/BGDS\nassumption/SM\nassumptive\nassurance/ASM\nassure/AGDS\nassured/MYS\nastatine/M\naster/EMS\nasterisk/GMDS\nastern\nasteroid/MS\nasthma/M\nasthmatic/SM\nasthmatically\nastigmatic\nastigmatism/SM\nastir\nastonish/DSLG\nastonishing/Y\nastonishment/M\nastound/GDS\nastounding/Y\nastraddle\nastrakhan/M\nastral\nastray\nastride\nastringency/M\nastringent/SMY\nastrolabe/SM\nastrologer/SM\nastrological/Y\nastrologist/MS\nastrology/M\nastronaut/MS\nastronautic/S\nastronautical\nastronautics/M\nastronomer/SM\nastronomic\nastronomical/Y\nastronomy/M\nastrophysical\nastrophysicist/MS\nastrophysics/M\nastute/PYTR\nastuteness/M\nasunder\nasylum/SM\nasymmetric\nasymmetrical/Y\nasymmetry/SM\nasymptomatic\nasymptotic\nasymptotically\nasynchronous/Y\nat\natavism/M\natavist/SM\natavistic\nataxia/M\nataxic/MS\nate\natelier/SM\natheism/M\natheist/MS\natheistic\natherosclerosis/M\natherosclerotic\nathirst\nathlete/MS\nathletic/S\nathletically\nathleticism\nathletics/M\nathwart\natilt\natishoo\natlas/MS\natmosphere/MS\natmospheric/S\natmospherically\natmospherics/M\natoll/MS\natom/SM\natomic\natomically\natomize/ZGDRS\natomizer/M\natonal/Y\natonality/M\natone/LGDS\natonement/M\natop\natria\natrial\natrioventricular\natrium/M\natrocious/PY\natrociousness/M\natrocity/SM\natrophy/DSMG\natropine/M\nattach/ALGDS\nattache/BM\nattached/U\nattachment/AM\nattachments\nattack/ZGMDRS\nattacker/M\nattain/AGDS\nattainability/M\nattainable/U\nattainder/M\nattainment/SM\nattar/M\nattempt's\nattempt/ASDG\nattend/SDRZG\nattendance/SM\nattendant/SM\nattended/U\nattendee/SM\nattention/IM\nattentions\nattentive/IPY\nattentiveness/IM\nattenuate/DSGN\nattenuation/M\nattest/SDG\nattestation/SM\nattested/U\nattic/SM\nattire/DSMG\nattitude/SM\nattitudinal\nattitudinize/GDS\nattn\nattorney/MS\nattract/SGVDB\nattractant/MS\nattraction/MS\nattractive/UY\nattractiveness/M\nattribute/DSMGNVBX\nattributed/U\nattribution/M\nattributive/MYS\nattrition/M\nattune/DSG\natty\natwitter\natypical/Y\naubergine/S\nauburn/M\nauction/MDGS\nauctioneer/SM\naudacious/YP\naudaciousness/M\naudacity/M\naudibility/IM\naudible/MS\naudibly/I\naudience/MS\naudio/MS\naudiological\naudiologist/SM\naudiology/M\naudiometer/SM\naudiophile/SM\naudiotape/SM\naudiovisual/S\naudiovisuals/M\naudit/GMDS\naudition/SMDG\nauditor/MS\nauditorium/SM\nauditory\nauger/MS\naught/MS\naugment/DRZGS\naugmentation/MS\naugmentative\naugmenter/M\naugur/GMDS\naugury/SM\naugust/PTRY\naugustness/M\nauk/SM\naunt/SM\nauntie/SM\naura/MS\naural/Y\naureole/SM\naureus\nauricle/SM\nauricular\naurora/SM\nauscultate/GNDSX\nauscultation/M\nauspice/SM\nauspicious/IY\nauspiciousness/M\naustere/RYT\nausterity/SM\naustral\nauthentic/IU\nauthentically\nauthenticate/XGNDS\nauthenticated/U\nauthentication/M\nauthenticity/M\nauthor/SMDG\nauthoress/MS\nauthorial\nauthoritarian/MS\nauthoritarianism/M\nauthoritative/YP\nauthoritativeness/M\nauthority/SM\nauthorization/MS\nauthorize/AGDS\nauthorized/U\nauthorship/M\nautism/M\nautistic\nauto/MS\nautobahn/SM\nautobiographer/SM\nautobiographic\nautobiographical/Y\nautobiography/SM\nautoclave/MS\nautocracy/SM\nautocrat/SM\nautocratic\nautocratically\nautocross\nautodidact/SM\nautograph/MDG\nautographs\nautoimmune\nautoimmunity/M\nautomaker/SM\nautomate/GNDS\nautomatic/SM\nautomatically\nautomation/M\nautomatism/M\nautomatize/GDS\nautomaton/SM\nautomobile/DSMG\nautomotive\nautonomic\nautonomous/Y\nautonomy/M\nautopilot/SM\nautopsy/GDSM\nautosuggestion\nautoworker/MS\nautumn/SM\nautumnal\naux\nauxiliary/SM\nauxin/M\nav/RZ\navail/BGMDS\navailability/UM\navailable/U\navalanche/SM\navarice/M\navaricious/Y\navast\navatar/MS\navaunt\navdp\nave\navenge/ZGDRS\navenger/M\navenue/MS\naverage/MYGDS\naverred\naverring\naverse/XN\naversion/M\navert/GDS\navg\navian\naviary/SM\naviation/M\naviator/MS\naviatrices\naviatrix/MS\navid/Y\navidity/M\navionic/S\navionics/M\navitaminosis/M\navocado/SM\navocation/MS\navocational\navoid/SDGB\navoidable/U\navoidably/U\navoidance/M\navoidant\navoirdupois/M\navouch/DSG\navow/EDGS\navowal/ESM\navowed/Y\navuncular/Y\naw\nawait/GDS\nawake/GS\nawaken/AGDS\nawakening/SM\naward/GMDS\nawardee/S\naware/UP\nawareness/UM\nawash\naway\nawe/DSMG\naweigh\nawesome/YP\nawesomeness/M\nawestruck\nawful/YP\nawfuller\nawfullest\nawfulness/M\nawhile\nawkward/RYPT\nawkwardness/M\nawl/SM\nawn/GJSM\nawning/M\nawoke\nawoken\nawry\nax/MDSG\naxial/Y\naxiom/SM\naxiomatic\naxiomatically\naxis/M\naxle/MS\naxletree/SM\naxolotl/SM\naxon/MS\nayah/M\nayahs\nayatollah/M\nayatollahs\naye/SM\nazalea/SM\nazimuth/M\nazimuths\nazure/SM\nb/KDT\nbaa/SMDG\nbabble/MZGDRS\nbabbler/M\nbabe/SM\nbabel/MS\nbaboon/MS\nbabushka/SM\nbaby/TGDRSM\nbabyhood/M\nbabyish\nbabysat\nbabysit/S\nbabysitter/MS\nbabysitting/M\nbaccalaureate/SM\nbaccarat/M\nbacchanal/MS\nbacchanalia/M\nbacchanalian/MS\nbaccy\nbachelor/SM\nbachelorhood/M\nbacillary\nbacilli\nbacillus/M\nback/SJZGMDR\nbackache/MS\nbackbench/S\nbackbit\nbackbite/ZGRS\nbackbiter/M\nbackbitten\nbackboard/SM\nbackbone/MS\nbackbreaking\nbackchat\nbackcloth\nbackcloths\nbackcomb/DSG\nbackdate/GDS\nbackdoor\nbackdrop/MS\nbacker/M\nbackfield/SM\nbackfire/MGDS\nbackgammon/M\nbackground/MRZS\nbackgrounder/M\nbackhand/MDRSZG\nbackhanded/Y\nbackhander/M\nbackhoe/MS\nbacking/M\nbacklash/MS\nbackless\nbacklog/MS\nbacklogged\nbacklogging\nbackpack/ZGMDRS\nbackpacker/M\nbackpacking/M\nbackpedal/SDG\nbackrest/SM\nbackroom/S\nbackscratching/M\nbackseat/SM\nbackside/SM\nbackslapper/SM\nbackslapping/M\nbackslash/MS\nbackslid\nbackslide/RSZG\nbackslider/M\nbackspace/DSMG\nbackspin/M\nbackstabber/MS\nbackstabbing\nbackstage/M\nbackstair/S\nbackstop/SM\nbackstopped\nbackstopping\nbackstory/S\nbackstreet/S\nbackstretch/MS\nbackstroke/MGDS\nbacktalk/M\nbacktrack/SDG\nbackup/MS\nbackward/PSY\nbackwardness/M\nbackwash/M\nbackwater/SM\nbackwoods/M\nbackwoodsman/M\nbackwoodsmen\nbackyard/SM\nbacon/M\nbacteria/M\nbacterial\nbactericidal\nbactericide/SM\nbacteriologic\nbacteriological\nbacteriologist/SM\nbacteriology/M\nbacterium/M\nbad/MYP\nbadder\nbaddest\nbaddie/MS\nbade\nbadge/MZRS\nbadger/GMD\nbadinage/M\nbadlands/M\nbadman/M\nbadmen\nbadminton/M\nbadmouth/GD\nbadmouths\nbadness/M\nbaffle/MZGDRSL\nbafflement/M\nbaffler/M\nbag/SM\nbagatelle/SM\nbagel/MS\nbagful/MS\nbaggage/M\nbagged\nbaggie/M\nbaggily\nbagginess/M\nbagging\nbaggy/PTRS\nbagpipe/MZRS\nbagpiper/M\nbaguette/MS\nbah\nbaht/SM\nbail/SBGMD\nbailey/S\nbailiff/S\nbailiwick/MS\nbailout/SM\nbailsman/M\nbailsmen\nbairn/MS\nbait/SGMD\nbaize/M\nbake/DRSMZG\nbaked/U\nbaker/M\nbakery/SM\nbakeshop/MS\nbaklava/M\nbaksheesh/M\nbalaclava/MS\nbalalaika/MS\nbalance's\nbalance/UDSG\nbalboa/SM\nbalcony/SM\nbald/STGPDRY\nbalderdash/M\nbaldfaced\nbaldness/M\nbaldric/SM\nbaldy/S\nbale/DRSMZG\nbaleen/M\nbaleful/PY\nbalefulness/M\nbaler/M\nbalk/SGMD\nbalky/RT\nball/SGMD\nballad/SM\nballadeer/MS\nballadry/M\nballast/GSMD\nballcock/MS\nballerina/SM\nballet/SM\nballetic\nballgame/MS\nballgirl/S\nballgown/S\nballistic/S\nballistics/M\nballoon/SGMD\nballoonist/MS\nballot/SMDG\nballpark/MS\nballplayer/MS\nballpoint/MS\nballroom/MS\nballs/DSG\nballsy/RT\nbally\nballyhoo/SMDG\nbalm/SM\nbalminess/M\nbalmy/RTP\nbaloney/M\nbalsa/MS\nbalsam/SM\nbalsamic\nbaluster/SM\nbalustrade/MS\nbamboo/SM\nbamboozle/DSG\nban/SM\nbanal/Y\nbanality/SM\nbanana/SM\nband's\nband/ESGD\nbandage/DSMG\nbandanna/MS\nbandbox/MS\nbandeau/M\nbandeaux\nbandit/SM\nbanditry/M\nbandleader/S\nbandmaster/SM\nbandoleer/SM\nbandsman/M\nbandsmen\nbandstand/SM\nbandwagon/SM\nbandwidth\nbandwidths\nbandy/DRSTG\nbane/SM\nbaneful\nbang/SGMDR\nbangle/SM\nbani\nbanish/GLDS\nbanishment/M\nbanister/SM\nbanjo/MS\nbanjoist/SM\nbank/SZGBMDR\nbankbook/SM\nbankcard/SM\nbanker/M\nbanking/M\nbanknote/SM\nbankroll/SGMD\nbankrupt/SGMD\nbankruptcy/SM\nbanned\nbanner/SM\nbanning\nbannock/MS\nbanns/M\nbanquet/ZGMDRS\nbanqueter/M\nbanquette/SM\nbanshee/MS\nbantam/SM\nbantamweight/SM\nbanter/GSMD\nbantering/Y\nbanyan/SM\nbanzai/SM\nbaobab/SM\nbap/S\nbaptism/MS\nbaptismal\nbaptist/S\nbaptistery/SM\nbaptize/ZGDRS\nbaptized/U\nbaptizer/M\nbar's\nbar/ECUTS\nbarb/SZGMDR\nbarbacoa\nbarbarian/SM\nbarbarianism/MS\nbarbaric\nbarbarically\nbarbarism/SM\nbarbarity/SM\nbarbarize/DSG\nbarbarous/Y\nbarbecue/DSMG\nbarbel/SM\nbarbell/MS\nbarber/GMD\nbarberry/SM\nbarbershop/MS\nbarbie/S\nbarbiturate/SM\nbarbwire/M\nbarcarole/SM\nbard/SM\nbardic\nbare/DRSPYG\nbareback/D\nbarefaced/Y\nbarefoot/D\nbarehanded\nbareheaded\nbarelegged\nbareness/M\nbarf/SGMDY\nbarfly/SM\nbargain/MDRZGS\nbargainer/M\nbarge/MGDS\nbargeman/M\nbargemen\nbarhop/S\nbarhopped\nbarhopping\nbarista/MS\nbaritone/MS\nbarium/M\nbark's\nbark/CSGD\nbarkeep/ZMRS\nbarkeeper/M\nbarker/SM\nbarley/M\nbarmaid/MS\nbarman/M\nbarmen\nbarmy/RT\nbarn/SM\nbarnacle/MDS\nbarney/S\nbarnstorm/SDRZG\nbarnstormer/M\nbarnyard/SM\nbarometer/MS\nbarometric\nbarometrically\nbaron/MS\nbaronage/MS\nbaroness/MS\nbaronet/MS\nbaronetcy/SM\nbaronial\nbarony/SM\nbaroque/M\nbarque/SM\nbarrack/MDGS\nbarracuda/SM\nbarrage/MGDS\nbarre/MGJDS\nbarred/UEC\nbarrel/GSMD\nbarren/TPSMR\nbarrenness/M\nbarrette/SM\nbarricade/MGDS\nbarrier/MS\nbarring/ECU\nbarrio/SM\nbarrister/MS\nbarroom/MS\nbarrow/SM\nbartender/SM\nbarter/ZGSMDR\nbarterer/M\nbaryon/SM\nbasal/Y\nbasalt/M\nbasaltic\nbase's\nbase/CDSLTG\nbaseball/SM\nbaseboard/MS\nbaseless\nbaseline/MS\nbasely\nbaseman/M\nbasemen\nbasement/CMS\nbaseness/M\nbaser\nbash/GMDS\nbashful/PY\nbashfulness/M\nbashing/M\nbasic/MS\nbasically\nbasil/M\nbasilica/MS\nbasilisk/MS\nbasin/MS\nbasinful/MS\nbasis/M\nbask/SGD\nbasket/SM\nbasketball/MS\nbasketry/M\nbasketwork/M\nbasque/S\nbass/MS\nbasset/SM\nbassinet/MS\nbassist/MS\nbasso/MS\nbassoon/MS\nbassoonist/SM\nbasswood/MS\nbast/M\nbastard/MS\nbastardization/MS\nbastardize/GDS\nbastardy/M\nbaste/ZGNXDRS\nbaster/M\nbastion/M\nbat/SM\nbatch/MDSG\nbate/KACGSD\nbath/ZGMDRS\nbathe/M\nbather/M\nbathetic\nbathhouse/MS\nbathing/M\nbathmat/MS\nbathos/M\nbathrobe/SM\nbathroom/SM\nbaths\nbathtub/MS\nbathwater\nbathyscaphe/SM\nbathysphere/MS\nbatik/MS\nbatiste/M\nbatman/M\nbatmen\nbaton/MS\nbatsman/M\nbatsmen\nbattalion/SM\nbatted\nbatten/GSMD\nbatter/JZGSMDR\nbatterer/M\nbattery/SM\nbatting/M\nbattle/LDRSMZG\nbattleaxe/MS\nbattledore/SM\nbattledress\nbattlefield/MS\nbattlefront/MS\nbattleground/MS\nbattlement/SM\nbattler/M\nbattleship/SM\nbatty/RT\nbauble/SM\nbaud/SM\nbauxite/M\nbawd/SM\nbawdily\nbawdiness/M\nbawdy/PRT\nbawl/SGMD\nbay/SMDG\nbayberry/SM\nbayonet/SMDG\nbayou/MS\nbazaar/SM\nbazillion/S\nbazooka/SM\nbbl\nbdrm\nbe\nbeach/MDSG\nbeachcomber/SM\nbeachfront\nbeachhead/MS\nbeachwear/M\nbeacon/SM\nbead/SGMD\nbeading/M\nbeadle/SM\nbeady/RT\nbeagle/SM\nbeak/SZMDR\nbeaker/M\nbeam/SGMD\nbean/SGMD\nbeanbag/MS\nbeanfeast/S\nbeanie/SM\nbeanpole/MS\nbeansprout/S\nbeanstalk/MS\nbear/SZGBJMR\nbearable/U\nbearably/U\nbeard/MDGS\nbeardless\nbearer/M\nbearing/M\nbearish/PY\nbearishness/M\nbearlike\nbearskin/MS\nbeast/MS\nbeastliness/M\nbeastly/TPRM\nbeat/SZGBMNRJ\nbeatable/U\nbeaten/U\nbeater/M\nbeatific\nbeatifically\nbeatification/M\nbeatify/GXNDS\nbeating/M\nbeatitude/SM\nbeatnik/MS\nbeau/SM\nbeaut/MS\nbeauteous/Y\nbeautician/SM\nbeautification/M\nbeautifier/M\nbeautiful/Y\nbeautify/NDRSZG\nbeauty/SM\nbeaver/SGMD\nbebop/MS\nbecalm/GSD\nbecame\nbecause\nbeck/SM\nbeckon/SGD\nbecloud/GDS\nbecome/S\nbecoming/UY\nbecquerel/S\nbed/SM\nbedaub/GSD\nbedazzle/GDSL\nbedazzlement/M\nbedbug/SM\nbedchamber/S\nbedclothes/M\nbedded\nbedder\nbedding/M\nbedeck/GSD\nbedevil/LGDS\nbedevilment/M\nbedfellow/SM\nbedhead/S\nbedim/S\nbedimmed\nbedimming\nbedizen/GDS\nbedlam/SM\nbedpan/SM\nbedpost/SM\nbedraggle/GDS\nbedridden\nbedrock/SM\nbedroll/SM\nbedroom/SM\nbedside/SM\nbedsit/S\nbedsitter/S\nbedsore/SM\nbedspread/SM\nbedstead/SM\nbedtime/SM\nbee/RSMZGJ\nbeebread/M\nbeech/MS\nbeechnut/MS\nbeef/SGMD\nbeefburger/SM\nbeefcake/MS\nbeefiness/M\nbeefsteak/MS\nbeefy/RPT\nbeehive/MS\nbeekeeper/MS\nbeekeeping/M\nbeeline/MS\nbeen\nbeep/SZGMDR\nbeeper/M\nbeer/M\nbeery/TR\nbeeswax/M\nbeet/SM\nbeetle/MGDS\nbeetroot/S\nbeeves\nbefall/SGN\nbefell\nbefit/S\nbefitted\nbefitting/Y\nbefog/S\nbefogged\nbefogging\nbefore\nbeforehand\nbefoul/DGS\nbefriend/SGD\nbefuddle/GLDS\nbefuddlement/M\nbeg/S\nbegan\nbegat\nbeget/S\nbegetter/S\nbegetting\nbeggar/MDYGS\nbeggary/M\nbegged\nbegging\nbegin/S\nbeginner/SM\nbeginning/MS\nbegone\nbegonia/SM\nbegot\nbegotten\nbegrime/DSG\nbegrudge/DSG\nbegrudging/Y\nbeguile/DRSZGL\nbeguilement/M\nbeguiler/M\nbeguiling/Y\nbeguine/SM\nbegum/MS\nbegun\nbehalf/M\nbehalves\nbehave/GDS\nbehavior/SM\nbehavioral/Y\nbehaviorism/M\nbehaviorist/MS\nbehead/DGS\nbeheld\nbehemoth/M\nbehemoths\nbehest/MS\nbehind/MS\nbehindhand\nbehold/NRZGS\nbeholder/M\nbehoove/DSG\nbeige/M\nbeing/M\nbejewel/SDG\nbelabor/SDG\nbelated/Y\nbelay/GDS\nbelch/GMDS\nbeleaguer/GSD\nbelfry/SM\nbelie/DS\nbelief/EUM\nbeliefs\nbelievable/U\nbelievably/U\nbelieve/EDRSZG\nbeliever/EUMS\nbelieving/U\nbelittle/LDSG\nbelittlement/M\nbell/SGMD\nbelladonna/M\nbellboy/SM\nbelle/MS\nbelled/A\nbelletrist/MS\nbelletristic\nbellhop/SM\nbellicose\nbellicosity/M\nbelligerence/M\nbelligerency/M\nbelligerent/MYS\nbelling/A\nbellman/M\nbellmen\nbellow/MDGS\nbellwether/MS\nbelly/GDSM\nbellyache/MGDS\nbellybutton/SM\nbellyful/MS\nbelong/JDGS\nbelonging/M\nbeloved/SM\nbelow\nbelt/SGMD\nbeltway/SM\nbeluga/MS\nbelying\nbemire/GDS\nbemoan/DGS\nbemuse/LGDS\nbemused/Y\nbemusement/M\nbench/GMDS\nbenchmark/MS\nbend/BSZGMR\nbender/M\nbendy/TR\nbeneath\nbenedictine\nbenediction/SM\nbenedictory\nbenefaction/SM\nbenefactor/MS\nbenefactress/MS\nbenefice/SM\nbeneficence/M\nbeneficent/Y\nbeneficial/Y\nbeneficiary/SM\nbenefit/SMDG\nbenevolence/SM\nbenevolent/Y\nbenighted/Y\nbenign/Y\nbenignant\nbenignity/M\nbent/SM\nbentonite\nbentwood/M\nbenumb/DSG\nbenzene/M\nbenzine/M\nbenzyl\nbequeath/DG\nbequeaths\nbequest/MS\nberate/GDS\nbereave/DSLG\nbereavement/MS\nbereft\nberet/MS\nberg/SM\nberiberi/M\nberk/S\nberkelium/M\nberm/SM\nberry/GDSM\nberrylike\nberserk\nberth/GMD\nberths\nberyl/MS\nberyllium/M\nbeseech/ZGRS\nbeseecher/M\nbeseeching/Y\nbeseem/DSG\nbeset/S\nbesetting\nbeside/S\nbesiege/ZGDRS\nbesieger/M\nbesmear/DSG\nbesmirch/GDS\nbesom/MS\nbesot/S\nbesotted\nbesotting\nbesought\nbespangle/DSG\nbespatter/GSD\nbespeak/SG\nbespectacled\nbespoke\nbespoken\nbest/SGMD\nbestial/Y\nbestiality/M\nbestiary/SM\nbestir/S\nbestirred\nbestirring\nbestow/DGS\nbestowal/SM\nbestrew/SDG\nbestrewn\nbestridden\nbestride/SG\nbestrode\nbestseller/MS\nbestselling\nbet/SM\nbeta/SM\nbetake/GS\nbetaken\nbetcha\nbetel/M\nbethink/SG\nbethought\nbetide/GDS\nbetimes\nbetoken/GDS\nbetook\nbetray/DRZGS\nbetrayal/SM\nbetrayer/M\nbetroth/DG\nbetrothal/SM\nbetrothed/M\nbetroths\nbetter/MDGLS\nbetterment/M\nbetting\nbettor/MS\nbetween\nbetwixt\nbevel/GMDS\nbeverage/SM\nbevvy/S\nbevy/SM\nbewail/DGS\nbeware/GDS\nbewhiskered\nbewigged\nbewilder/LSGD\nbewildering/Y\nbewilderment/M\nbewitch/GLDS\nbewitching/Y\nbewitchment/M\nbey/SM\nbeyond\nbezel/MS\nbf\nbhaji\nbi/SMRZ\nbiannual/Y\nbias/GMDS\nbiased/U\nbiathlon/SM\nbib/SM\nbible/MS\nbiblical\nbibliographer/MS\nbibliographic\nbibliographical/Y\nbibliography/SM\nbibliophile/SM\nbibulous\nbicameral\nbicameralism/M\nbicarb/MS\nbicarbonate/MS\nbicentenary/SM\nbicentennial/SM\nbicep/MS\nbiceps/M\nbicker/MDRZGS\nbickerer/M\nbiconcave\nbiconvex\nbicuspid/MS\nbicycle/DRSMZG\nbicycler/M\nbicyclist/SM\nbid/SMG\nbiddable\nbidden/U\nbidder/MS\nbidding/M\nbiddy/SM\nbide/S\nbidet/MS\nbidirectional/Y\nbiennial/MYS\nbiennium/MS\nbier/M\nbiff/SGD\nbifocal/S\nbifocals/M\nbifurcate/XDSGN\nbifurcation/M\nbig/P\nbigamist/SM\nbigamous\nbigamy/M\nbigger\nbiggest\nbiggie/MS\nbiggish\nbighead/SM\nbighearted/P\nbigheartedness/M\nbighorn/SM\nbight/MS\nbigmouth/M\nbigmouths\nbigness/M\nbigot/MDS\nbigotry/SM\nbigwig/MS\nbijou/M\nbijoux\nbike/DRSMZG\nbiker/M\nbikini/MS\nbilabial/MS\nbilateral/Y\nbilberry/S\nbile/M\nbilge/MS\nbilingual/SMY\nbilingualism/M\nbilious/P\nbiliousness/M\nbilirubin\nbilk/SZGDR\nbilker/M\nbill/SBJGMD\nbillboard/MS\nbillet/GMDS\nbillfold/SM\nbillhook/S\nbilliard/S\nbilliards/M\nbilling/M\nbillingsgate/M\nbillion/MHS\nbillionaire/SM\nbillionth/M\nbillionths\nbillow/GMDS\nbillowy\nbilly/SM\nbillycan/S\nbimbo/MS\nbimetallic/SM\nbimetallism/M\nbimodal\nbimonthly/SM\nbin/SM\nbinary/SM\nbinaural\nbind's\nbind/AUGS\nbinder/MS\nbindery/SM\nbinding/MS\nbindweed/M\nbinge/MDS\nbingo/M\nbinman\nbinmen\nbinnacle/SM\nbinned\nbinning\nbinocular/MS\nbinomial/SM\nbio/SM\nbiochemical/SMY\nbiochemist/MS\nbiochemistry/M\nbiodegradability/M\nbiodegrade/DSGB\nbiodiversity/M\nbioethics/M\nbiofeedback/M\nbiofilm/MS\nbiog\nbiographer/SM\nbiographic\nbiographical/Y\nbiography/SM\nbiol\nbiologic\nbiological/Y\nbiologist/MS\nbiology/M\nbiomarker/MS\nbiomass/M\nbiomedical\nbionic/S\nbionically\nbionics/M\nbiophysical\nbiophysicist/MS\nbiophysics/M\nbiopic/MS\nbiopsy/GDSM\nbioreactor/S\nbiorhythm/MS\nbiosensor/S\nbiosphere/SM\nbiosynthesis\nbiotech\nbiotechnological\nbiotechnology/M\nbiotin/M\nbipartisan\nbipartisanship/M\nbipartite\nbiped/MS\nbipedal\nbiplane/MS\nbipolar\nbipolarity/M\nbiracial\nbirch/GMDS\nbird/SZGMDR\nbirdbath/M\nbirdbaths\nbirdbrain/SMD\nbirdcage/S\nbirder/M\nbirdhouse/MS\nbirdie/MDS\nbirdieing\nbirdlike\nbirdlime/M\nbirdseed/M\nbirdsong\nbirdwatcher/SM\nbirdying\nbiretta/SM\nbirth/ZGMDR\nbirthday/MS\nbirther/M\nbirthmark/MS\nbirthplace/MS\nbirthrate/MS\nbirthright/MS\nbirths/A\nbirthstone/SM\nbiscuit/SM\nbisect/DGS\nbisection/MS\nbisector/SM\nbisexual/MYS\nbisexuality/M\nbishop/MS\nbishopric/SM\nbismuth/M\nbison/M\nbisque/M\nbistro/MS\nbit/CSMG\nbitch/GMDS\nbitchily\nbitchiness/M\nbitchy/PRT\nbitcoin/SM\nbite/RSMZ\nbiter/M\nbiting/Y\nbitmap/S\nbitten\nbitter/PMRYTS\nbittern/SM\nbitterness/M\nbitters/M\nbittersweet/MS\nbitty/TR\nbitumen/M\nbituminous\nbivalent\nbivalve/SM\nbivouac/MS\nbivouacked\nbivouacking\nbiweekly/SM\nbiyearly\nbiz/M\nbizarre/Y\nbk\nbl/DG\nblab/SM\nblabbed\nblabber/DGS\nblabbermouth/M\nblabbermouths\nblabbing\nblack/PXTGMDNRYS\nblackamoor/MS\nblackball/SGMD\nblackberry/GSM\nblackbird/SM\nblackboard/MS\nblackcurrant/S\nblacken/DG\nblackface\nblackguard/SM\nblackhead/MS\nblacking/M\nblackish\nblackjack/MDGS\nblackleg/S\nblacklist/MDSG\nblackmail/MDRSZG\nblackmailer/M\nblackness/M\nblackout/SM\nblacksmith/M\nblacksmiths\nblacksnake/SM\nblackthorn/SM\nblacktop/SM\nblacktopped\nblacktopping\nbladder/MS\nblade/MDS\nblag/S\nblagged\nblagging\nblah/M\nblahs/M\nblame/BMGDRS\nblameless/YP\nblamelessness/M\nblameworthiness/M\nblameworthy/P\nblammo\nblanch/GDS\nblancmange/MS\nbland/PTRY\nblandish/DSLG\nblandishment/SM\nblandness/M\nblank/TGPMDRYS\nblanket/GMDS\nblankness/M\nblare/MGDS\nblarney/SMDG\nblase\nblaspheme/ZGDRS\nblasphemer/M\nblasphemous/Y\nblasphemy/SM\nblast/ZGMDRS\nblaster/M\nblastoff/MS\nblat/S\nblatancy/SM\nblatant/Y\nblather/SMDG\nblaze/MZGDRS\nblazer/M\nblazon/MDGS\nbldg\nbleach/MDRSZG\nbleached/U\nbleacher/M\nbleak/TPRY\nbleakness/M\nblear\nblearily\nbleariness/M\nbleary/PRT\nbleat/GMDS\nbleed/ZGRS\nbleeder/M\nbleeding/M\nbleep/ZGMDRS\nbleeper/M\nblemish/GMDS\nblemished/U\nblench/DSG\nblend/ZGMDRS\nblender/M\nbless/GDSJ\nblessed/YP\nblessedness/M\nblessing/M\nbletch\nblew\nblight/ZGMDRS\nblimey\nblimp/MS\nblimpish\nblind/PZTGMDRYS\nblinder/M\nblindfold/SMDG\nblinding/Y\nblindness/M\nblindside/DSG\nblini/MS\nblink/ZGMDRS\nblinker/MDG\nblintz/MS\nblintze/M\nblip/SM\nbliss/M\nblissful/YP\nblissfulness/M\nblister/GMDS\nblistering/Y\nblistery\nblithe/PYTR\nblitheness/M\nblither/G\nblithesome\nblitz/GMDS\nblitzkrieg/MS\nblivet/S\nblizzard/SM\nbloat/ZGDRS\nbloatware\nblob/SM\nblobbed\nblobbing\nbloc/SM\nblock's\nblock/UGDS\nblockade/MZGDRS\nblockader/M\nblockage/MS\nblockbuster/SM\nblockbusting/M\nblocker/MS\nblockhead/SM\nblockhouse/MS\nblog/SM\nblogged\nblogger/MS\nblogging\nbloke/MS\nblokish\nblond/PTMRS\nblonde/MS\nblondish\nblondness/M\nblood/GMDS\nbloodbath/M\nbloodbaths\nbloodcurdling\nbloodhound/SM\nbloodily\nbloodiness/M\nbloodless/YP\nbloodlessness/M\nbloodletting/M\nbloodline/SM\nbloodmobile/MS\nbloodshed/M\nbloodshot\nbloodstain/SMD\nbloodstock/M\nbloodstream/SM\nbloodsucker/SM\nbloodsucking\nbloodthirstily\nbloodthirstiness/M\nbloodthirsty/RPT\nbloody/PTGDRS\nbloom/ZGMDRS\nbloomer/M\nbloop/ZGMDRS\nblooper/M\nblossom/GMDS\nblossomy\nblot/SM\nblotch/GMDS\nblotchy/TR\nblotted\nblotter/MS\nblotting\nblotto\nblouse/MGDS\nblow/SZGMR\nblower/M\nblowfly/SM\nblowgun/MS\nblowhard/MS\nblowhole/S\nblowjob/SM\nblowlamp/S\nblown\nblowout/SM\nblowpipe/SM\nblowtorch/MS\nblowup/MS\nblowy/TR\nblowzy/RT\nblubber/GSMD\nblubbery\nbludgeon/MDGS\nblue/DRSPMTG\nbluebell/MS\nblueberry/SM\nbluebird/MS\nbluebonnet/SM\nbluebottle/SM\nbluefish/MS\nbluegill/MS\nbluegrass/M\nblueish\nbluejacket/SM\nbluejeans/M\nblueness/M\nbluenose/MS\nbluepoint/MS\nblueprint/MDGS\nbluestocking/SM\nbluesy/RT\nbluet/MS\nbluff/ZTGPMDRYS\nbluffer/M\nbluffness/M\nbluing/M\nbluish\nblunder/MDRZGS\nblunderbuss/MS\nblunderer/M\nblunt/PTGDRYS\nbluntness/M\nblur/SM\nblurb/MS\nblurred\nblurriness/M\nblurring\nblurry/TRP\nblurt/GDS\nblush/ZGMDRS\nblusher/M\nbluster/MDRSZG\nblusterer/M\nblusterous\nblustery\nblvd\nboa/SM\nboar/SM\nboard/ZGMDRS\nboarder/M\nboarding/M\nboardinghouse/MS\nboardroom/MS\nboardwalk/MS\nboast/ZGMDRS\nboaster/M\nboastful/PY\nboastfulness/M\nboat/SZGMDR\nboater/M\nboathouse/MS\nboating/M\nboatload/S\nboatman/M\nboatmen\nboatswain/SM\nboatyard/S\nbob/SM\nbobbed\nbobbin/MS\nbobbing\nbobble/MGDS\nbobby/SM\nbobbysoxer/SM\nbobcat/MS\nbobolink/SM\nbobsled/SM\nbobsledded\nbobsledder/MS\nbobsledding\nbobsleigh/M\nbobsleighs\nbobtail/SM\nbobwhite/MS\nboccie/M\nbock/M\nbod/SMDG\nbodacious\nbode/S\nbodega/MS\nbodge/GDS\nbodice/MS\nbodily\nbodkin/MS\nbody/DSM\nbodybuilder/SM\nbodybuilding/M\nbodyguard/MS\nbodysuit/SM\nbodywork/M\nboffin/S\nboffo\nbog/SM\nboga\nbogey/GMDS\nbogeyman/M\nbogeymen\nbogged\nbogging\nboggle/GDS\nboggy/TR\nbogie/MS\nbogon\nbogosity\nbogus\nbogyman/M\nbogymen\nbohemian/SM\nbohemianism/M\nboil/SJZGMDR\nboiler/M\nboilermaker/SM\nboilerplate/M\nboink/GDS\nboisterous/YP\nboisterousness/M\nbola/SM\nbold/PTRY\nboldface/DM\nboldness/M\nbole/SM\nbolero/MS\nbolivar/MS\nbolivares\nboll/SM\nbollard/S\nbollix/GMDS\nbollocking/S\nbollocks\nbologna/M\nbolshie\nbolster/GMDS\nbolt's\nbolt/USGD\nbolthole/S\nbolus/MS\nbomb/SJZGMDR\nbombard/GDLS\nbombardier/MS\nbombardment/SM\nbombast/M\nbombastic\nbombastically\nbomber/M\nbombproof\nbombshell/SM\nbombsite/S\nbonanza/MS\nbonbon/MS\nbonce/S\nbond/SGMD\nbondage/M\nbondholder/MS\nbonding/M\nbondman/M\nbondmen\nbondsman/M\nbondsmen\nbondwoman/M\nbondwomen\nbone/DRSMZG\nbonehead/SMD\nboneless\nboner/M\nboneshaker/S\nboneyard\nbonfire/MS\nbong/SGMD\nbongo/MS\nbonhomie/M\nboniness/M\nbonito/MS\nbonk/SZGD\nbonnet/MS\nbonny/TR\nbonobo/MS\nbonsai/M\nbonus/MS\nbony/PTR\nboo/SMDHG\nboob/SGMD\nbooby/SM\nboodle/MS\nbooger/S\nboogeyman/M\nboogeymen\nboogie/MDS\nboogieing\nboogieman/M\nboohoo/GMDS\nbook/SBJGMD\nbookbinder/SM\nbookbindery/SM\nbookbinding/M\nbookcase/MS\nbookend/MS\nbookie/MS\nbooking/M\nbookish\nbookkeeper/MS\nbookkeeping/M\nbooklet/MS\nbookmaker/SM\nbookmaking/M\nbookmark/SMDG\nbookmobile/SM\nbookplate/MS\nbookseller/MS\nbookshelf/M\nbookshelves\nbookshop/SM\nbookstall/S\nbookstore/MS\nbookworm/SM\nboolean\nboom/SZGMDR\nboombox/MS\nboomerang/MDGS\nboon/SM\nboondocks/M\nboondoggle/MZGDRS\nboondoggler/M\nboonies/M\nboor/SM\nboorish/PY\nboorishness/MS\nboost/ZGMDRS\nbooster/M\nboot's\nboot/ASGD\nbootblack/SM\nbootee/MS\nbooth/M\nbooths\nbootlace/S\nbootleg/MS\nbootlegged\nbootlegger/MS\nbootlegging/M\nbootless\nbootstrap/MS\nbootstrapped\nbootstrapping\nbooty/SM\nbooze/MZGDRS\nboozer/M\nboozy/TR\nbop/SM\nbopped\nbopping\nborax/M\nbordello/MS\nborder/GMDS\nborderland/MS\nborderline/MS\nbore/DRSMZG\nboredom/M\nborehole/S\nborer/M\nboring/Y\nborn/IAU\nborne\nboron/M\nborough/M\nboroughs\nborrow/SDRZGJ\nborrower/M\nborrowing/M\nborscht/M\nborstal/S\nborzoi/SM\nbosh/M\nbosom's\nbosom/US\nbosomy\nboss/DSGM\nbossily\nbossiness/M\nbossism/M\nbossy/RTP\nbot/S\nbotanic\nbotanical/Y\nbotanist/SM\nbotany/M\nbotch/DRSZGM\nbotcher/M\nboth\nbother/SMDG\nbotheration\nbothered/U\nbothersome\nbotnet/SM\nbottle/DRSMZG\nbottleneck/MS\nbottler/M\nbottom/SMDG\nbottomless\nbotulinum\nbotulism/M\nboudoir/SM\nbouffant/SM\nbougainvillea/MS\nbough/M\nboughs\nbought\nbouillabaisse/SM\nbouillon/MS\nboulder/SM\nboules\nboulevard/SM\nbounce/DRSMZG\nbouncer/M\nbouncily\nbounciness/M\nbouncy/RTP\nbound/ASMGD\nboundary/SM\nbounden\nbounder/SM\nboundless/PY\nboundlessness/M\nbounteous/YP\nbounteousness/M\nbountiful/YP\nbountifulness/M\nbounty/SM\nbouquet/SM\nbourbon/SM\nbourgeois/M\nbourgeoisie/M\nboustrophedon\nbout/MS\nboutique/SM\nboutonniere/MS\nbouzouki/MS\nbovine/SM\nbovver\nbow/ZGSMDR\nbowdlerization/MS\nbowdlerize/DSG\nbowed/U\nbowel/SM\nbower/M\nbowl/MDRZGS\nbowleg/SM\nbowlegged\nbowler/M\nbowlful/SM\nbowline/SM\nbowling/M\nbowman/M\nbowmen\nbowsprit/SM\nbowstring/SM\nbowwow/SM\nbox/ZGMDNRS\nboxcar/SM\nboxer/M\nboxing/M\nboxlike\nboxroom/S\nboxwood/M\nboxy/RT\nboy/SM\nboycott/SGMD\nboyfriend/MS\nboyhood/SM\nboyish/YP\nboyishness/M\nboysenberry/SM\nbozo/MS\nbpm\nbps\nbra/SM\nbrace/MZGDRS\nbracelet/MS\nbracer/M\nbracero/MS\nbracken/M\nbracket/GMDS\nbrackish/P\nbrackishness/M\nbract/MS\nbrad/SM\nbradawl/S\nbradycardia\nbrae/SM\nbrag/SM\nbraggadocio/SM\nbraggart/SM\nbragged\nbragger/MS\nbragging\nbraid/GMDS\nbraiding/M\nbraille/M\nbrain/GMDS\nbrainchild/M\nbrainchildren/M\nbraininess/M\nbrainless/Y\nbrainpower\nbrainstorm/SMDG\nbrainstorming/M\nbrainteaser/SM\nbrainwash/DSG\nbrainwashing/M\nbrainwave/S\nbrainy/PTR\nbraise/GDS\nbrake/MGDS\nbrakeman/M\nbrakemen\nbramble/MS\nbrambly\nbran/M\nbranch/GMDS\nbranchlike\nbrand/ZGMDRS\nbranded/U\nbrander/M\nbrandish/DSG\nbrandy/GDSM\nbrash/PTRY\nbrashness/M\nbrass/MS\nbrasserie/MS\nbrassiere/MS\nbrassily\nbrassiness/M\nbrassy/PTR\nbrat/SM\nbratty/RT\nbratwurst/SM\nbravado/M\nbrave/GPMYDTRS\nbraveness/M\nbravery/M\nbravo/SM\nbravura/SM\nbrawl/SDRZGM\nbrawler/M\nbrawn/M\nbrawniness/M\nbrawny/RTP\nbray/DGSM\nbraze/DRSZG\nbrazen/SDYGP\nbrazenness/M\nbrazer/M\nbrazier/SM\nbreach/GMDS\nbread/GMDHS\nbreadbasket/SM\nbreadboard/SM\nbreadbox/MS\nbreadcrumb/MS\nbreadfruit/SM\nbreadline/MS\nbreadth/M\nbreadths\nbreadwinner/SM\nbreak/BMZGRS\nbreakable/MS\nbreakage/MS\nbreakaway/MS\nbreakdown/MS\nbreaker/M\nbreakfast/MDGS\nbreakfront/MS\nbreakneck\nbreakout/MS\nbreakpoints\nbreakthrough/M\nbreakthroughs\nbreakup/SM\nbreakwater/SM\nbream/MS\nbreast/SMDG\nbreastbone/MS\nbreastfed\nbreastfeed/GS\nbreastplate/SM\nbreaststroke/SM\nbreastwork/MS\nbreath/MDRSZGB\nbreathalyze/ZGDRS\nbreathe\nbreather/M\nbreathing/M\nbreathless/PY\nbreathlessness/M\nbreaths\nbreathtaking/Y\nbreathy/RT\nbred/I\nbreech/MS\nbreed/SRZGM\nbreeder/M\nbreeding/IM\nbreeze/DSMG\nbreezeway/SM\nbreezily\nbreeziness/M\nbreezy/RTP\nbrethren\nbreve/SM\nbrevet/SM\nbrevetted\nbrevetting\nbreviary/SM\nbrevity/M\nbrew/MDRZGS\nbrewer/M\nbrewery/SM\nbrewpub/SM\nbribe/DRSMZG\nbriber/M\nbribery/M\nbrick/SMDG\nbrickbat/SM\nbrickie/S\nbricklayer/MS\nbricklaying/M\nbrickwork/M\nbrickyard/S\nbridal/SM\nbride/SM\nbridegroom/SM\nbridesmaid/MS\nbridge/DSMG\nbridgeable/U\nbridgehead/SM\nbridgework/M\nbridle/DSMG\nbridled/U\nbridleway/S\nbrie/MZR\nbrief's\nbrief/CSDTGJ\nbriefcase/SM\nbriefer\nbriefing/CM\nbriefly\nbriefness/M\nbrier/M\nbrig/MS\nbrigade/SM\nbrigadier/MS\nbrigand/SM\nbrigandage/M\nbrigantine/MS\nbright/SPNRYXT\nbrighten/DRZG\nbrightener/M\nbrightness/M\nbrights/M\nbrill\nbrilliance/M\nbrilliancy/M\nbrilliant/MYS\nbrilliantine/M\nbrim/MS\nbrimful\nbrimless\nbrimmed\nbrimming\nbrimstone/M\nbrindle/DM\nbrine/M\nbring/SRZG\nbringer/M\nbrininess/M\nbrink/SM\nbrinkmanship/M\nbriny/RTP\nbrioche/SM\nbriquette/MS\nbrisk/SDRYTGP\nbrisket/SM\nbriskness/M\nbristle/DSMG\nbristly/TR\nbritches/M\nbrittle/PRMT\nbrittleness/M\nbro/SMH\nbroach/MDSG\nbroad/SMNRYXTP\nbroadband/M\nbroadcast/AMGS\nbroadcaster/MS\nbroadcasting/M\nbroadcloth/M\nbroaden/DG\nbroadloom/M\nbroadminded\nbroadness/M\nbroadsheet/SM\nbroadside/MGDS\nbroadsword/SM\nbrocade/DSMG\nbroccoli/M\nbrochette/SM\nbrochure/MS\nbrogan/SM\nbrogue/SM\nbroil/SMDRZG\nbroiler/M\nbroke\nbroken/YP\nbrokenhearted/Y\nbrokenness/M\nbroker/SMDG\nbrokerage/MS\nbrolly/S\nbromide/SM\nbromidic\nbromine/M\nbronc/SM\nbronchi\nbronchial\nbronchitic\nbronchitis/M\nbronchus/M\nbronco/SM\nbroncobuster/SM\nbrontosaur/MS\nbrontosaurus/MS\nbronze/DSMG\nbrooch/MS\nbrood/SMDRZG\nbrooder/M\nbroodily\nbrooding/MY\nbroodmare/MS\nbroody/RMPT\nbrook/SMDG\nbrooklet/SM\nbroom/SM\nbroomstick/MS\nbroth/MRZ\nbrothel/MS\nbrother/MY\nbrotherhood/MS\nbrotherliness/M\nbroths\nbrougham/SM\nbrought\nbrouhaha/SM\nbrow/MS\nbrowbeat/SNG\nbrown/SMDRPTG\nbrownfield\nbrownie/MS\nbrownish\nbrownness/M\nbrownout/SM\nbrownstone/MS\nbrowse/DRSMZG\nbrowser/M\nbrr\nbruin/SM\nbruise/DRSMZG\nbruiser/M\nbruising/M\nbruit/SDG\nbrunch/MDSG\nbrunet/SM\nbrunette/MS\nbrunt/M\nbrush/MDSG\nbrushoff/SM\nbrushstroke/S\nbrushwood/M\nbrushwork/M\nbrusque/RPYT\nbrusqueness/M\nbrutal/Y\nbrutality/SM\nbrutalization/M\nbrutalize/GDS\nbrute/SM\nbrutish/PY\nbrutishness/M\nbu\nbub/SM\nbubble/DSMG\nbubblegum/M\nbubbly/RMT\nbubo/M\nbuboes\nbuccaneer/SGMD\nbuck/MDGS\nbuckaroo/SM\nbuckboard/MS\nbucket/SGMD\nbucketful/MS\nbuckeye/MS\nbuckle's\nbuckle/UDSG\nbuckler/MS\nbuckram/M\nbucksaw/MS\nbuckshot/M\nbuckskin/MS\nbuckteeth\nbucktooth/MD\nbuckwheat/M\nbuckyball/SM\nbucolic/MS\nbucolically\nbud/SM\nbudded\nbudding/S\nbuddy/SM\nbudge/DSG\nbudgerigar/MS\nbudget/SGMD\nbudgetary\nbudgie/SM\nbuff/AMDGS\nbuffalo/MDG\nbuffaloes\nbuffer/SMDG\nbuffet/SMDGJ\nbuffoon/SM\nbuffoonery/M\nbuffoonish\nbug's\nbug/CS\nbugaboo/SM\nbugbear/SM\nbugged/C\nbugger/SMDG\nbuggery\nbugging/C\nbuggy/RSMT\nbugle/DRSMZG\nbugler/M\nbuild/SMRZGJ\nbuilder/M\nbuilding/M\nbuildup/SM\nbuilt/AI\nbuiltin\nbulb/MS\nbulbous\nbulge/DSMG\nbulgy/RT\nbulimarexia/M\nbulimia/M\nbulimic/SM\nbulk/MDGS\nbulkhead/MS\nbulkiness/M\nbulky/RTP\nbull/MDGS\nbulldog/SM\nbulldogged\nbulldogging\nbulldoze/ZGDRS\nbulldozer/M\nbullet/SMD\nbulletin/MDGS\nbulletproof/SDG\nbullfight/SMRZG\nbullfighter/M\nbullfighting/M\nbullfinch/MS\nbullfrog/MS\nbullhead/MDS\nbullheaded/PY\nbullheadedness/M\nbullhorn/MS\nbullion/M\nbullish/YP\nbullishness/M\nbullock/SM\nbullpen/SM\nbullring/MS\nbullseye\nbullshit/MS!\nbullshitted/!\nbullshitter/SM!\nbullshitting/!\nbullwhip/S\nbully/DSMG\nbulrush/MS\nbulwark/MS\nbum/SM\nbumbag/S\nbumble/DRSZG\nbumblebee/SM\nbumbler/M\nbumf\nbummed\nbummer/SM\nbummest\nbumming\nbump/MDRZGS\nbumper/M\nbumph\nbumpiness/M\nbumpkin/MS\nbumptious/PY\nbumptiousness/M\nbumpy/PRT\nbun/SM\nbunch/MDSG\nbunchy/RT\nbunco/SMDG\nbundle/DSMG\nbung/MDGS\nbungalow/MS\nbungee/SM\nbunghole/MS\nbungle/DRSMZG\nbungler/M\nbunion/SM\nbunk's\nbunk/CDGS\nbunker/SM\nbunkhouse/SM\nbunkum/M\nbunny/SM\nbunt/MDGSJ\nbunting/M\nbuoy/MDGS\nbuoyancy/M\nbuoyant/Y\nbur/SMY\nburble/DSMG\nburbs/M\nburden's\nburden/USGD\nburdensome\nburdock/M\nbureau/SM\nbureaucracy/SM\nbureaucrat/MS\nbureaucratic\nbureaucratically\nbureaucratization/M\nbureaucratize/GDS\nburg/MRZS\nburgeon/DSG\nburger/M\nburgh/MRZ\nburgher/M\nburghs\nburglar/MS\nburglarize/GDS\nburglarproof\nburglary/SM\nburgle/DSG\nburgomaster/SM\nburgundy/SM\nburial/ASM\nburka/SM\nburl/MDS\nburlap/M\nburlesque/MGDS\nburliness/M\nburly/RPT\nburn/MDRZGSB\nburnable/SM\nburner/M\nburnish/ZGMDRS\nburnisher/M\nburnoose/MS\nburnout/MS\nburnt\nburp/MDGS\nburr/MDGS\nburrito/MS\nburro/SM\nburrow/SMDRZG\nburrower/M\nbursa/M\nbursae\nbursar/SM\nbursary/SM\nbursitis/M\nburst/SMG\nbury/ADSG\nbus/AMS\nbusboy/SM\nbusby/SM\nbused\nbusgirl/MS\nbush/MDSGJ\nbushel/SGMD\nbushiness/M\nbushing/M\nbushman/M\nbushmaster/SM\nbushmen\nbushwhack/DRSZG\nbushwhacker/M\nbushy/RPT\nbusily\nbusiness/MS\nbusinesslike\nbusinessman/M\nbusinessmen\nbusinessperson/SM\nbusinesswoman/M\nbusinesswomen\nbusing/M\nbusk/DRZGS\nbuskin/SM\nbusload/S\nbuss/M\nbust/MDRZGS\nbuster/M\nbustle/DSMG\nbusty/RZT\nbusy/DRSTGP\nbusybody/SM\nbusyness/M\nbusywork/M\nbut/ACS\nbutane/M\nbutch/MRSZ\nbutcher/MDG\nbutchery/SM\nbutler/SM\nbutt/MDRZGS\nbutte/SM\nbutted/A\nbutter/MDG\nbutterball/MS\nbuttercream\nbuttercup/SM\nbutterfat/M\nbutterfingered\nbutterfingers/M\nbutterfly/GDSM\nbuttermilk/M\nbutternut/SM\nbutterscotch/M\nbuttery/TRSM\nbutting/A\nbuttock/SM\nbutton's\nbutton/USDG\nbuttonhole/DSMG\nbuttonwood/MS\nbuttress/MDSG\nbutty/S\nbuxom\nbuy/ZGSMR\nbuyback/SM\nbuyer/M\nbuyout/SM\nbuzz/MDRSZG\nbuzzard/MS\nbuzzer/M\nbuzzkill/SM\nbuzzword/SM\nbx\nbxs\nby/M\nbye/SM\nbygone/SM\nbylaw/SM\nbyline/SM\nbypass/GMDS\nbypath/M\nbypaths\nbyplay/M\nbyproduct/MS\nbyre/S\nbyroad/SM\nbystander/MS\nbyte/MS\nbyway/SM\nbyword/SM\nbyzantine\nc/IES\nca\ncab/SMRZ\ncabal/MS\ncabala's\ncaballero/MS\ncabana/SM\ncabaret/SM\ncabbage/MS\ncabbed\ncabbing\ncabby/SM\ncabdriver/SM\ncabin/MS\ncabinet/SM\ncabinetmaker/MS\ncabinetmaking/M\ncabinetry/M\ncabinetwork/M\ncable/MGDS\ncablecast/GMS\ncablegram/MS\ncabochon/SM\ncaboodle/M\ncaboose/SM\ncabriolet/SM\ncabstand/SM\ncacao/MS\ncache/MGDS\ncachepot/SM\ncachet/MS\ncackle/MZGDRS\ncackler/M\ncacophonous\ncacophony/SM\ncacti\ncactus/M\ncad/SM\ncadaver/SM\ncadaverous\ncaddie/MDS\ncaddish/YP\ncaddishness/M\ncaddying\ncadence/DSM\ncadenza/SM\ncadet/MS\ncadge/ZGDRS\ncadger/M\ncadmium/M\ncadre/MS\ncaducei\ncaduceus/M\ncaesura/SM\ncafe/SM\ncafeteria/MS\ncafetiere/S\ncaff/CS\ncaffeinated\ncaffeine/M\ncaftan/MS\ncage/DSMG\ncagey\ncagier\ncagiest\ncagily\ncaginess/M\ncagoule/S\ncahoot/MS\ncaiman/MS\ncairn/MS\ncaisson/SM\ncaitiff/SM\ncajole/ZGLDRS\ncajolement/M\ncajoler/M\ncajolery/M\ncake/DSMG\ncakewalk/SM\ncal\ncalabash/MS\ncalaboose/SM\ncalamari/SM\ncalamine/M\ncalamitous/Y\ncalamity/SM\ncalcareous\ncalciferous\ncalcification/M\ncalcify/GNDS\ncalcimine/DSMG\ncalcine/DSG\ncalcite/M\ncalcium/M\ncalculable/I\ncalculate/AGNVDSX\ncalculated/Y\ncalculating/Y\ncalculation/AM\ncalculator/SM\ncalculi\ncalculus/M\ncaldera/SM\ncalendar/MDGS\ncalender's\ncalf/M\ncalfskin/M\ncaliber/SM\ncalibrate/GNDSX\ncalibration/M\ncalibrator/SM\ncalico/M\ncalicoes\ncalifornium/M\ncaliper/SGMD\ncaliph/M\ncaliphate/MS\ncaliphs\ncalisthenic/S\ncalisthenics/M\ncalk/SGMD\ncall/ASGMD\ncalla/MS\ncallable\ncallback/MS\ncalled/U\ncaller/MS\ncalligrapher/SM\ncalligraphic\ncalligraphist/MS\ncalligraphy/M\ncalling/SM\ncalliope/MS\ncallosity/SM\ncallous/PGDSY\ncallousness/M\ncallow/RPT\ncallowness/M\ncallus/MDSG\ncalm/PSTGMDRY\ncalmness/M\ncaloric\ncalorie/MS\ncalorific\ncalumet/MS\ncalumniate/GNDS\ncalumniation/M\ncalumniator/MS\ncalumnious\ncalumny/SM\ncalve/GDS\ncalypso/MS\ncalyx/MS\ncam/SM\ncamaraderie/M\ncamber/MDSG\ncambial\ncambium/SM\ncambric/M\ncamcorder/SM\ncame\ncamel/MS\ncamelhair\ncamellia/MS\ncameo/MS\ncamera/MS\ncameraman/M\ncameramen\ncamerapeople\ncameraperson\ncamerawoman/M\ncamerawomen\ncamerawork\ncamiknickers\ncamisole/SM\ncamouflage/MZGDRS\ncamouflager/M\ncamp's\ncamp/CSGD\ncampaign/SMDRZG\ncampaigner/M\ncampanile/SM\ncampanologist/MS\ncampanology/M\ncamper/MS\ncampfire/SM\ncampground/SM\ncamphor/M\ncamping/M\ncampsite/SM\ncampus/MS\ncampy/TR\ncamshaft/SM\ncan't\ncan/SMDRZG\ncanal/MS\ncanalization/M\ncanalize/GDS\ncanape/MS\ncanard/MS\ncanary/SM\ncanasta/M\ncancan/MS\ncancel/DRSZG\ncanceler/M\ncancellation/SM\ncancelous\ncancer/MS\ncancerous\ncandelabra/SM\ncandelabrum/M\ncandid/YP\ncandida\ncandidacy/SM\ncandidate/MS\ncandidature/SM\ncandidness/M\ncandle/MZGDRS\ncandlelight/M\ncandlelit\ncandlepower/M\ncandler/M\ncandlestick/MS\ncandlewick/SM\ncandor/M\ncandy/GDSM\ncandyfloss\ncane/SM\ncanebrake/MS\ncaner/M\ncanine/MS\ncanister/SM\ncanker/GMDS\ncankerous\ncannabis/MS\ncanned\ncannelloni/M\ncannery/SM\ncannibal/SM\ncannibalism/M\ncannibalistic\ncannibalization/M\ncannibalize/GDS\ncannily/U\ncanniness/M\ncanning\ncannon/GMDS\ncannonade/MGDS\ncannonball/SM\ncannot\ncanny/UTR\ncanoe/MDS\ncanoeing\ncanoeist/SM\ncanola/M\ncanon/MS\ncanonical/Y\ncanonization/SM\ncanonize/DSG\ncanoodle/DSG\ncanopy/GDSM\ncanst\ncant's\ncant/CZRDGS\ncantabile\ncantaloupe/SM\ncantankerous/PY\ncantankerousness/M\ncantata/MS\ncanteen/MS\ncanter/CM\ncantered\ncantering\ncanticle/MS\ncantilever/MDGS\ncanto/MS\ncanton/MLS\ncantonal\ncantonment/MS\ncantor/MS\ncanvas/MGDS\ncanvasback/SM\ncanvass/MDRSZG\ncanvasser/M\ncanyon/MGS\ncap/SMDRBZ\ncapabilities\ncapability/IM\ncapable/I\ncapably/I\ncapacious/PY\ncapaciousness/M\ncapacitance/M\ncapacities\ncapacitor/SM\ncapacity/IM\ncaparison/MDGS\ncape/SM\ncaper/GMD\ncapeskin/M\ncapillarity/M\ncapillary/SM\ncapital/MSY\ncapitalism/M\ncapitalist/SM\ncapitalistic\ncapitalistically\ncapitalization/M\ncapitalize/ADSG\ncapitation/CSM\ncapitol/SM\ncapitulate/ADSXGN\ncapitulation/AM\ncaplet/MS\ncapo/SM\ncapon/MS\ncapped/UA\ncapping/UA\ncappuccino/SM\ncaprice/SM\ncapricious/PY\ncapriciousness/M\ncapsicum/SM\ncapsize/DSG\ncapstan/SM\ncapstone/MS\ncapsular\ncapsule/DSMG\ncapsulize/DSG\ncapt\ncaptain/SMDG\ncaptaincy/SM\ncaption/SMDG\ncaptious/YP\ncaptiousness/M\ncaptivate/DSGN\ncaptivation/M\ncaptivator/SM\ncaptive/SM\ncaptivity/SM\ncaptor/MS\ncapture/ADSMG\ncar/SMDRZG\ncarafe/MS\ncaramel/SM\ncaramelize/DSG\ncarapace/SM\ncarat/MS\ncaravan/SM\ncaravansary/SM\ncaravel/SM\ncaraway/SM\ncarbide/SM\ncarbine/SM\ncarbohydrate/SM\ncarbolic\ncarbon/MS\ncarbonaceous\ncarbonate/MGNDS\ncarbonation/M\ncarboniferous\ncarbonize/GDS\ncarborundum/M\ncarboy/MS\ncarbs\ncarbuncle/SM\ncarbuncular\ncarburetor/SM\ncarcass/MS\ncarcinogen/SM\ncarcinogenic/MS\ncarcinogenicity/M\ncarcinoma/MS\ncard/ESGMD\ncardamom/SM\ncardamon/S\ncardboard/M\ncarder/MS\ncardholder/S\ncardiac\ncardie/S\ncardigan/SM\ncardinal/SMY\ncardio\ncardiogram/SM\ncardiograph/M\ncardiographs\ncardiologist/MS\ncardiology/M\ncardiomyopathy\ncardiopulmonary\ncardiovascular\ncardsharp/MRZS\ncardsharper/M\ncare/SM\ncareen/DGS\ncareer/MDGS\ncareerism\ncareerist/SM\ncarefree\ncareful/YP\ncarefuller\ncarefullest\ncarefulness/M\ncaregiver/SM\ncareless/PY\ncarelessness/M\ncarer/M\ncaress/MDSG\ncaret/MS\ncaretaker/MS\ncareworn\ncarfare/M\ncargo/M\ncargoes\ncarhop/MS\ncaribou/SM\ncaricature/MGDS\ncaricaturist/SM\ncaries/M\ncarillon/SM\ncaring/M\ncarious\ncarjack/JSDRZG\ncarjacker/M\ncarjacking/M\ncarload/SM\ncarmaker/S\ncarmine/SM\ncarnage/M\ncarnal/Y\ncarnality/M\ncarnation/IMS\ncarnelian/MS\ncarnival/MS\ncarnivora\ncarnivore/SM\ncarnivorous/PY\ncarnivorousness/M\ncarny/SM\ncarob/MS\ncarol/ZGMDRS\ncaroler/M\ncarom/GMDS\ncarotene/M\ncarotid/SM\ncarousal/SM\ncarouse/DRSMZG\ncarousel/SM\ncarouser/M\ncarp/SZGMDR\ncarpal/MS\ncarpel/MS\ncarpenter/MDGS\ncarpentry/M\ncarper/M\ncarpet/MDGS\ncarpetbag/MS\ncarpetbagged\ncarpetbagger/MS\ncarpetbagging\ncarpeting/M\ncarpi\ncarpool/SMDG\ncarport/SM\ncarpus/M\ncarrel/MS\ncarriage/SM\ncarriageway/S\ncarrier/M\ncarrion/M\ncarrot/MS\ncarroty\ncarry/ZGDRSM\ncarryall/SM\ncarrycot/S\ncarryout\ncarryover/MS\ncarsick/P\ncarsickness/M\ncart/SZGMDR\ncartage/M\ncartel/MS\ncarter/M\ncarthorse/SM\ncartilage/SM\ncartilaginous\ncartload/SM\ncartographer/SM\ncartographic\ncartography/M\ncarton/MS\ncartoon/SMDG\ncartoonist/MS\ncartridge/MS\ncartwheel/GMDS\ncarve/JZGDRS\ncarver/M\ncarvery/S\ncarving/M\ncaryatid/MS\ncasaba/MS\ncascade/DSMG\ncascara/SM\ncase/LDSJMG\ncasebook/S\ncased/U\ncaseharden/DGS\ncasein/M\ncaseload/MS\ncasement/MS\ncasework/ZMR\ncaseworker/M\ncash/GMDS\ncashback/M\ncashbook/MS\ncashew/MS\ncashier/GSMD\ncashless\ncashmere/M\ncasing/M\ncasino/MS\ncask/SM\ncasket/MS\ncassava/SM\ncasserole/DSMG\ncassette/MS\ncassia/MS\ncassock/SM\ncassowary/SM\ncast/ASGM\ncastanet/MS\ncastaway/MS\ncaste/JMZRS\ncastellated\ncaster/M\ncastigate/DSGN\ncastigation/M\ncastigator/SM\ncasting/AM\ncastle/MGDS\ncastoff/SM\ncastor/MS\ncastrate/GNXDS\ncastration/M\ncasual/PMYS\ncasualness/M\ncasualty/SM\ncasuist/SM\ncasuistic\ncasuistry/M\ncat/SM\ncataclysm/MS\ncataclysmal\ncataclysmic\ncatacomb/SM\ncatafalque/MS\ncatalepsy/M\ncataleptic/MS\ncatalog/ZGSMDR\ncataloger/M\ncatalpa/SM\ncatalyses\ncatalysis/M\ncatalyst/MS\ncatalytic/M\ncatalyze/GDS\ncatamaran/SM\ncatapult/GMDS\ncataract/MS\ncatarrh/M\ncatastrophe/MS\ncatastrophic\ncatastrophically\ncatatonia/M\ncatatonic/SM\ncatbird/SM\ncatboat/SM\ncatcall/GSMD\ncatch/ZGJLMRS\ncatchall/MS\ncatcher/M\ncatchment/MS\ncatchpenny\ncatchphrase/SM\ncatchword/MS\ncatchy/RT\ncatechism/SM\ncatechist/SM\ncatechize/DSG\ncategorical/Y\ncategorization/MS\ncategorize/GDS\ncategory/SM\ncater/ZGJDRS\ncatercorner\ncaterer/M\ncaterpillar/MS\ncaterwaul/SMDG\ncatfish/MS\ncatgut/M\ncatharses\ncatharsis/M\ncathartic/SM\ncathedral/SM\ncatheter/SM\ncatheterize/DSG\ncathode/SM\ncathodic\ncatholic\ncatholicity/M\ncation/MS\ncatkin/MS\ncatlike\ncatnap/MS\ncatnapped\ncatnapping\ncatnip/M\ncatsuit/S\ncattail/SM\ncatted\ncattery/S\ncattily\ncattiness/M\ncatting\ncattle/M\ncattleman/M\ncattlemen\ncatty/TPR\ncatwalk/SM\ncaucus/MDSG\ncaudal/Y\ncaught/U\ncauldron/MS\ncauliflower/SM\ncaulk/ZGMDRS\ncaulker/M\ncausal/Y\ncausality/SM\ncausation/M\ncausative\ncause/MZGDRS\ncauseless\ncauser/M\ncauserie/SM\ncauseway/SM\ncaustic/SM\ncaustically\ncausticity/M\ncauterization/M\ncauterize/GDS\ncaution/SMDG\ncautionary\ncautious/IY\ncautiousness/M\ncavalcade/MS\ncavalier/SMY\ncavalry/SM\ncavalryman/M\ncavalrymen\ncave/DRSMZG\ncaveat/MS\ncaveman/M\ncavemen\ncavern/MS\ncavernous/Y\ncaviar/M\ncavil/ZGJMDRS\ncaviler/M\ncaving/M\ncavitation\ncavity/FSM\ncavort/DGS\ncaw/SMDG\ncay/CSM\ncayenne/M\ncayuse/MS\ncc\ncease/CMGDS\nceasefire/MS\nceaseless/YP\nceaselessness/M\nceca\ncecal\ncecum/M\ncedar/MS\ncede/FAGSD\nceder/MS\ncedilla/SM\nceilidh\nceilidhs\nceiling/MS\ncelandine/M\nceleb/S\ncelebrant/SM\ncelebrate/DSGNX\ncelebration/M\ncelebrator/SM\ncelebratory\ncelebrity/SM\nceleriac\ncelerity/M\ncelery/M\ncelesta/MS\ncelestial/Y\ncelibacy/M\ncelibate/MS\ncell/SMD\ncellar/MS\ncellist/SM\ncellmate/SM\ncello/MS\ncellophane/M\ncellphone/MS\ncellular/SM\ncellulite/M\ncellulitis\ncelluloid/M\ncellulose/M\ncement/MDRZGS\ncementer/M\ncementum/M\ncemetery/SM\ncenobite/MS\ncenobitic\ncenotaph/M\ncenotaphs\ncenser/MS\ncensor/MDGS\ncensored/U\ncensorial\ncensorious/PY\ncensoriousness/M\ncensorship/M\ncensure/BDRSMZG\ncensurer/M\ncensus/MDSG\ncent/SZMR\ncentaur/SM\ncentavo/SM\ncentenarian/MS\ncentenary/SM\ncentennial/MYS\ncenter/MDG\ncenterboard/SM\ncenterfold/MS\ncenterpiece/MS\ncentigrade\ncentigram/SM\ncentiliter/MS\ncentime/SM\ncentimeter/MS\ncentipede/SM\ncentral/SMY\ncentralism\ncentralist\ncentrality/M\ncentralization/CM\ncentralize/CGDS\ncentralizer/MS\ncentrifugal/Y\ncentrifuge/DSMG\ncentripetal/Y\ncentrism/M\ncentrist/MS\ncenturion/SM\ncentury/SM\ncephalic\nceramic/SM\nceramicist/SM\nceramics/M\nceramist/MS\ncereal/MS\ncerebellar\ncerebellum/SM\ncerebra\ncerebral\ncerebrate/GNDS\ncerebration/M\ncerebrovascular\ncerebrum/MS\ncerement/MS\nceremonial/SMY\nceremonious/UY\nceremoniousness/M\nceremony/SM\ncerise/M\ncerium/M\ncermet/M\ncert/S\ncertain/UY\ncertainty/USM\ncertifiable\ncertifiably\ncertificate/MGNXDS\ncertification/M\ncertify/DSG\ncertitude/IM\ncertitudes\ncerulean/M\ncervical\ncervices\ncervix/M\ncesarean/MS\ncesium/M\ncessation/MS\ncession/KAFSM\ncesspit/S\ncesspool/MS\ncetacean/MS\nceteris\ncf\ncg\nch/IFVT\nchad/S\nchafe/GDS\nchaff/GMDS\nchaffinch/MS\nchagrin/GSMD\nchain's\nchain/UGDS\nchainsaw/MDGS\nchair/GMDS\nchairlift/MS\nchairman/M\nchairmanship/SM\nchairmen\nchairperson/SM\nchairwoman/M\nchairwomen\nchaise/MS\nchalcedony/M\nchalet/MS\nchalice/SM\nchalk/GMDS\nchalkboard/SM\nchalkiness/M\nchalky/PRT\nchallenge/DRSMZG\nchallenged/U\nchallenger/M\nchallis/M\nchamber/SMD\nchamberlain/MS\nchambermaid/MS\nchambray/M\nchameleon/SM\nchamois/M\nchamomile/MS\nchamp/ZGMDS\nchampagne/MS\nchampion/GMDS\nchampionship/MS\nchance/MGDS\nchancel/SM\nchancellery/SM\nchancellor/MS\nchancellorship/M\nchancery/SM\nchanciness/M\nchancre/SM\nchancy/PRT\nchandelier/SM\nchandler/MS\nchange/MZGDRS\nchangeability/M\nchangeable/P\nchangeableness/M\nchangeably\nchanged/U\nchangeless/Y\nchangeling/SM\nchangeover/SM\nchanger/M\nchanging/U\nchannel/GSMD\nchannelization/M\nchannelize/DSG\nchanson/SM\nchant/ZGMDRS\nchanter/M\nchanteuse/MS\nchantey/SM\nchanticleer/MS\nchaos/M\nchaotic\nchaotically\nchap/SM\nchaparral/SM\nchapati/S\nchapatti/S\nchapbook/MS\nchapeau/SM\nchapel/MS\nchaperon/MDGS\nchaperonage/M\nchaperoned/U\nchaplain/MS\nchaplaincy/SM\nchaplet/SM\nchapped\nchapping\nchappy/S\nchapter/SM\nchar/SM\ncharabanc/MS\ncharacter/MS\ncharacterful\ncharacteristic/SM\ncharacteristically/U\ncharacterization/MS\ncharacterize/DSG\ncharacterless\ncharade/SM\ncharbroil/GDS\ncharcoal/MS\nchard/M\nchardonnay/SM\ncharge/AESDGM\nchargeable/A\ncharged/U\ncharger/SM\ncharily\nchariness/M\nchariot/SM\ncharioteer/MS\ncharisma/M\ncharismatic/MS\ncharitable/P\ncharitableness/M\ncharitably/U\ncharity/SM\ncharlady/S\ncharlatan/SM\ncharlatanism/M\ncharlatanry/M\ncharlie/S\ncharm/ZGMDRS\ncharmer/M\ncharming/Y\ncharmless\ncharred\ncharring\nchart/GMDS\ncharted/U\ncharter's\ncharter/ASGD\ncharterer/MS\nchartreuse/M\ncharwoman/M\ncharwomen\nchary/TRP\nchase/MZGDRS\nchaser/M\nchasm/MS\nchassis/M\nchaste/PYTR\nchasten/DGS\nchasteness/M\nchastise/DRSZGL\nchastisement/SM\nchastiser/M\nchastity/M\nchasuble/SM\nchat/SM\nchateau/SM\nchateaux\nchatelaine/SM\nchatline/S\nchatroom/M\nchatted\nchattel/MS\nchatter/MDRZGS\nchatterbox/MS\nchatterer/M\nchattily\nchattiness/M\nchatting\nchatty/TPR\nchauffeur/GMDS\nchauvinism/M\nchauvinist/SM\nchauvinistic\nchauvinistically\ncheap/PXTNRY\ncheapen/DG\ncheapness/M\ncheapo\ncheapskate/MS\ncheat/ZGMDRS\ncheater/M\ncheck/AGMDS\ncheckbook/SM\ncheckbox\nchecked/U\nchecker/MDGS\ncheckerboard/SM\ncheckers/M\nchecklist/MS\ncheckmate/MGDS\ncheckoff/SM\ncheckout/SM\ncheckpoint/SM\ncheckroom/MS\nchecksum\ncheckup/MS\ncheddar/M\ncheek/GMDS\ncheekbone/SM\ncheekily\ncheekiness/M\ncheeky/TPR\ncheep/GMDS\ncheer/ZGMDRS\ncheerer/M\ncheerful/YP\ncheerfuller\ncheerfullest\ncheerfulness/M\ncheerily\ncheeriness/M\ncheerio/MS\ncheerleader/SM\ncheerless/PY\ncheerlessness/M\ncheery/TPR\ncheese/MGDS\ncheeseboard/S\ncheeseburger/SM\ncheesecake/SM\ncheesecloth/M\ncheeseparing/M\ncheesiness/M\ncheesy/TPR\ncheetah/M\ncheetahs\nchef/SM\nchem\nchemical/SMY\nchemise/MS\nchemist/MS\nchemistry/M\nchemo/M\nchemotherapeutic\nchemotherapy/M\nchemurgy/M\nchenille/M\ncherish/DSG\ncheroot/MS\ncherry/SM\nchert/M\ncherub/MS\ncherubic\ncherubim\nchervil/M\nchess/M\nchessboard/MS\nchessman/M\nchessmen\nchest/MDS\nchesterfield/SM\nchestful/SM\nchestnut/SM\nchesty/TR\nchevalier/SM\ncheviot/M\nchevron/MS\nchew/SZGMDR\nchewer/M\nchewiness/M\nchewy/PTR\nchg\nchge\nchi/SM\nchiaroscuro/M\nchic/PTMR\nchicane/MS\nchicanery/SM\nchichi/MS\nchick/XMNS\nchickadee/SM\nchicken/MDG\nchickenfeed/M\nchickenhearted\nchickenpox/M\nchickenshit/S!\nchickpea/SM\nchickweed/M\nchicle/M\nchicness/M\nchicory/SM\nchide/GDS\nchiding/Y\nchief/TMRYS\nchiefdom/M\nchieftain/MS\nchieftainship/SM\nchiffon/M\nchiffonier/MS\nchigger/MS\nchignon/MS\nchihuahua/SM\nchilblain/SM\nchild/M\nchildbearing/M\nchildbirth/M\nchildbirths\nchildcare/M\nchildhood/SM\nchildish/YP\nchildishness/M\nchildless/P\nchildlessness/M\nchildlike\nchildminder/S\nchildminding\nchildproof/GSD\nchildren/M\nchili/M\nchilies\nchill/JPZTGMDRS\nchiller/M\nchilliness/M\nchilling/Y\nchillness/M\nchilly/TPR\nchime/MZGDRS\nchimer/M\nchimera/MS\nchimeric\nchimerical\nchimney/MS\nchimp/MS\nchimpanzee/SM\nchin/SM\nchina/M\nchinaware/M\nchinchilla/MS\nchine/MS\nchink/GMDS\nchinless\nchinned\nchinning\nchino/MS\nchinstrap/MS\nchintz/M\nchintzy/RT\nchinwag/S\nchip/SM\nchipboard\nchipmunk/SM\nchipolata/S\nchipped\nchipper/MS\nchippie\nchipping/S\nchippy/S\nchirography/M\nchiropodist/MS\nchiropody/M\nchiropractic/SM\nchiropractor/SM\nchirp/GMDS\nchirpily\nchirpy/PTR\nchirrup/GMDS\nchisel/ZGMDRS\nchiseler/M\nchit/SM\nchitchat/SM\nchitchatted\nchitchatting\nchitin/M\nchitinous\nchitosan\nchitterlings/M\nchivalrous/PY\nchivalrousness/M\nchivalry/M\nchive/MS\nchivy/GDS\nchlamydia/MS\nchlamydiae\nchloral/M\nchlordane/M\nchloride/MS\nchlorinate/GNDS\nchlorination/M\nchlorine/M\nchlorofluorocarbon/SM\nchloroform/SGMD\nchlorophyll/M\nchloroplast/MS\nchm\nchoc/S\nchock/GMDS\nchockablock\nchocoholic/SM\nchocolate/MS\nchocolaty\nchoice/MTRS\nchoir/MS\nchoirboy/MS\nchoirmaster/SM\nchoke/MZGDRS\nchokecherry/SM\nchoker/M\ncholecystectomy\ncholecystitis\ncholer/M\ncholera/M\ncholeric\ncholesterol/M\nchomp/ZGMDRS\nchoose/ZGRS\nchooser/M\nchoosiness/M\nchoosy/TPR\nchop/SM\nchophouse/SM\nchopped\nchopper/MDGS\nchoppily\nchoppiness/M\nchopping\nchoppy/TPR\nchopstick/SM\nchoral/MYS\nchorale/MS\nchord/MS\nchordal\nchordate/SM\nchore/MS\nchorea/M\nchoreograph/DRZG\nchoreographer/M\nchoreographic\nchoreographically\nchoreographs\nchoreography/M\nchorister/SM\nchoroid/MS\nchortle/MZGDRS\nchortler/M\nchorus/GMDS\nchose\nchosen\nchow/SGMD\nchowder/MS\nchrism/M\nchristen/ASGD\nchristening/MS\nchristian/U\nchristology\nchromatic\nchromatically\nchromatin/M\nchromatography\nchrome/MGDS\nchromium/M\nchromosomal\nchromosome/MS\nchronic\nchronically\nchronicle/DRSMZG\nchronicler/M\nchronograph/M\nchronographs\nchronological/Y\nchronologist/MS\nchronology/SM\nchronometer/SM\nchrysalis/MS\nchrysanthemum/MS\nchub/SM\nchubbiness/M\nchubby/TPR\nchuck/GMDS\nchuckhole/SM\nchuckle/MGDS\nchuffed\nchug/SM\nchugged\nchugging\nchukka/MS\nchum/SM\nchummed\nchummily\nchumminess/M\nchumming\nchummy/PTR\nchump/MS\nchunder/GDS\nchunk/GMDS\nchunkiness/M\nchunky/PTR\nchunter/DGS\nchurch/MS\nchurchgoer/SM\nchurchgoing/M\nchurchman/M\nchurchmen\nchurchwarden/MS\nchurchwoman\nchurchwomen\nchurchyard/SM\nchurl/MS\nchurlish/PY\nchurlishness/M\nchurn/ZGMDRS\nchurner/M\nchute/MS\nchutney/MS\nchutzpah/M\nchyme/M\nciabatta/SM\nciao/S\ncicada/MS\ncicatrices\ncicatrix/M\ncicerone/SM\nciceroni\ncider's\ncider/S\ncigar/MS\ncigarette/MS\ncigarillo/MS\ncilantro/M\ncilia\ncilium/M\ncinch/GMDS\ncinchona/SM\ncincture/SM\ncinder/GMDS\ncine\ncinema/MS\ncinematic\ncinematographer/MS\ncinematographic\ncinematography/M\ncinnabar/M\ncinnamon/M\ncipher's\ncipher/CGDS\ncir\ncirca\ncircadian\ncircle/MGDS\ncirclet/MS\ncircuit/MDGS\ncircuital\ncircuitous/YP\ncircuitousness/M\ncircuitry/M\ncircuity/M\ncircular/SMY\ncircularity/M\ncircularize/DSG\ncirculate/ADSG\ncirculation/SM\ncirculatory\ncircumcise/XDSGN\ncircumcised/U\ncircumcision/M\ncircumference/MS\ncircumferential\ncircumflex/MS\ncircumlocution/MS\ncircumlocutory\ncircumnavigate/XGNDS\ncircumnavigation/M\ncircumpolar\ncircumscribe/GDS\ncircumscription/MS\ncircumspect/Y\ncircumspection/M\ncircumstance/MGDS\ncircumstantial/Y\ncircumvent/DSG\ncircumvention/M\ncircus/MS\ncirque/MS\ncirrhosis/M\ncirrhotic/SM\ncirri\ncirrus/M\ncistern/MS\ncit\ncitadel/MS\ncitation/AMS\ncite's\ncite/IAGSD\ncitified\ncitizen/MS\ncitizenry/M\ncitizenship/M\ncitric\ncitron/MS\ncitronella/M\ncitrus/MS\ncity/SM\ncitywide\ncivet/MS\ncivic/S\ncivically\ncivics/M\ncivil/UY\ncivilian/MS\ncivility/ISM\ncivilization/MS\ncivilize/GDS\ncivilized/U\ncivvies/M\nck\ncl\nclack/GMDS\nclad/U\ncladding/M\nclade\nclaim's\nclaim/CKEAGDS\nclaimable/A\nclaimant/MS\nclaimed/U\nclaimer/ECSM\nclairvoyance/M\nclairvoyant/MS\nclam/SM\nclambake/MS\nclamber/ZGMDRS\nclamberer/M\nclammed\nclammily\nclamminess/M\nclamming\nclammy/PTR\nclamor/GMDS\nclamorous\nclamp/GMDS\nclampdown/MS\nclan/SM\nclandestine/Y\nclang/ZGMDRS\nclangor/M\nclangorous/Y\nclank/GMDS\nclannish/P\nclannishness/M\nclansman/M\nclansmen\nclanswoman\nclanswomen\nclap/SM\nclapboard/MDGS\nclapped\nclapper/MS\nclapperboard/S\nclapping/M\nclaptrap/M\nclaque/MS\nclaret/MS\nclarification/M\nclarify/XDSNG\nclarinet/SM\nclarinetist/SM\nclarion/MDGS\nclarity/M\nclash/GMDS\nclasp's\nclasp/UGDS\nclass/GMDS\nclassic/MS\nclassical/MY\nclassicism/M\nclassicist/MS\nclassifiable\nclassification/CAM\nclassifications\nclassified's\nclassified/U\nclassifieds\nclassifier/MS\nclassify/ACSDGN\nclassiness/M\nclassism\nclassless/P\nclassmate/MS\nclassroom/MS\nclasswork/M\nclassy/TRP\nclatter/GMDS\nclausal\nclause/MS\nclaustrophobia/M\nclaustrophobic\nclavichord/SM\nclavicle/MS\nclavier/MS\nclaw's\nclaw/CSGD\nclay/M\nclayey\nclayier\nclayiest\nclean/BJPZTGDRYS\ncleaner/M\ncleaning/M\ncleanliness/UM\ncleanly/UTPR\ncleanness/UM\ncleanse/ZGDRS\ncleanser/M\ncleanup/MS\nclear/JPTGMDRYS\nclearance/SM\nclearheaded\nclearing/M\nclearinghouse/SM\nclearness/M\nclearway/S\ncleat/MS\ncleavage/MS\ncleave/ZGDRS\ncleaver/M\nclef/SM\ncleft/MS\nclematis/MS\nclemency/IM\nclement/Y\nclementine/S\nclench/GMDS\nclerestory/SM\nclergy/SM\nclergyman/M\nclergymen\nclergywoman/M\nclergywomen\ncleric/MS\nclerical/Y\nclericalism/M\nclerk/GMDS\nclerkship/M\nclever/PTRY\ncleverness/M\nclevis/MS\nclew/SGMD\ncliche/MDS\nclick/BZGMDRS\nclicker/M\nclient/MS\nclientele/MS\ncliff/MS\ncliffhanger/SM\ncliffhanging\nclifftop/S\nclii\nclimacteric/M\nclimactic\nclimate/SM\nclimatic\nclimatically\nclimatologist/SM\nclimatology/M\nclimax/MDSG\nclimb/SMDRZGB\nclimber/M\nclimbing/M\nclime/SM\nclinch/MDRSZG\nclincher/M\ncling/SMRZG\nclinger/M\nclingfilm\nclingy/RT\nclinic/SM\nclinical/Y\nclinician/SM\nclink/SMDRZG\nclinker/M\ncliometric/S\ncliometrician/MS\ncliometrics/M\nclip/SM\nclipboard/MS\nclipped\nclipper/SM\nclipping/SM\nclique/SM\ncliquey\ncliquish/YP\ncliquishness/M\nclit/SM\nclitoral\nclitorides\nclitoris/MS\nclix\ncloaca/M\ncloacae\ncloak's\ncloak/USDG\ncloakroom/MS\nclobber/SMDG\ncloche/SM\nclock/SMDG\nclockwise\nclockwork/SM\nclod/MS\ncloddish\nclodhopper/MS\nclog's\nclog/US\nclogged/U\nclogging/U\ncloisonne/M\ncloister/SMDG\ncloistral\nclomp/SDG\nclonal\nclone/DSMG\nclonidine\nclonk/SMDG\nclop/MS\nclopped\nclopping\nclose/DRSMYTGJP\nclosefisted\nclosemouthed\ncloseness/M\ncloseout/MS\ncloset/SMDG\ncloseup/SM\nclosing/M\nclosure/ESM\nclot/MS\ncloth/M\nclothe/UDSG\nclotheshorse/MS\nclothesline/SM\nclothespin/SM\nclothier/MS\nclothing/M\ncloths\nclotted\nclotting\ncloture/SM\ncloud/SMDG\ncloudburst/SM\nclouded/U\ncloudiness/M\ncloudless\ncloudy/RPT\nclout/SMDG\nclove/RSMZ\ncloven\nclover/M\ncloverleaf/SM\ncloverleaves\nclown/SMDG\nclownish/YP\nclownishness/M\ncloy/DGS\ncloying/Y\nclub/MS\nclubbable\nclubbed\nclubber/S\nclubbing\nclubfeet\nclubfoot/MD\nclubhouse/SM\nclubland\ncluck/SMDG\nclue/MGDS\nclueless\nclump/SMDG\nclumpy/TR\nclumsily\nclumsiness/M\nclumsy/TRP\nclung\nclunk/SMDRZG\nclunker/M\nclunky/TR\ncluster/MDSG\nclutch/GMDS\nclutter's\nclutter/UDSG\nclvi\nclvii\nclxi\nclxii\nclxiv\nclxix\nclxvi\nclxvii\ncm\ncnidarian/MS\nco/ESD\ncoach/MDSG\ncoachload/S\ncoachman/M\ncoachmen\ncoachwork\ncoadjutor/MS\ncoagulant/MS\ncoagulate/GNDS\ncoagulation/M\ncoagulator/MS\ncoal/MDGS\ncoalesce/GDS\ncoalescence/M\ncoalescent\ncoalface/MS\ncoalfield/S\ncoalition/MS\ncoalitionist/MS\ncoalmine/S\ncoarse/RYTP\ncoarsen/SDG\ncoarseness/M\ncoast/SMDRZG\ncoastal\ncoaster/M\ncoastguard/S\ncoastline/MS\ncoat/MDGJS\ncoating/M\ncoatroom/S\ncoattail/SM\ncoauthor/MDGS\ncoax/DRSZG\ncoaxer/M\ncoaxial\ncoaxing/Y\ncob/SM\ncobalt/M\ncobber/S\ncobble/DRSMZG\ncobbler/M\ncobblestone/SM\ncobnut/S\ncobra/SM\ncobweb/SM\ncobwebbed\ncobwebby/RT\ncoca/M\ncocaine/M\ncocci/S\ncoccus/M\ncoccyges\ncoccyx/M\ncochineal/M\ncochlea/SM\ncochleae\ncochlear\ncock/MDGS\ncockade/SM\ncockamamie\ncockatiel/MS\ncockatoo/SM\ncockatrice/SM\ncockchafer/S\ncockcrow/SM\ncockerel/SM\ncockeyed\ncockfight/MGS\ncockfighting/M\ncockily\ncockiness/M\ncockle/SM\ncockleshell/SM\ncockney/SM\ncockpit/SM\ncockroach/MS\ncockscomb/SM\ncocksucker/MS!\ncocksure\ncocktail/MS\ncocky/RTP\ncoco/MS\ncocoa/SM\ncoconut/SM\ncocoon/SMDG\ncod/SM\ncoda/MS\ncodded\ncodding\ncoddle/DSG\ncode's\ncode/CZGDRS\ncodeine/M\ncodependency/M\ncodependent/SM\ncoder/CM\ncodex/M\ncodfish/MS\ncodger/SM\ncodices\ncodicil/SM\ncodification/M\ncodifier/M\ncodify/XDRSNZG\ncodon/S\ncodpiece/MS\ncodswallop\ncoed/MS\ncoeducation/M\ncoeducational\ncoefficient/MS\ncoelenterate/MS\ncoenzyme\ncoequal/MYS\ncoerce/DRSZGNV\ncoercer/M\ncoercion/M\ncoeval/SMY\ncoexist/DSG\ncoexistence/M\ncoexistent\ncoextensive\ncoffee/SM\ncoffeecake/SM\ncoffeehouse/MS\ncoffeemaker/SM\ncoffeepot/MS\ncoffer/SM\ncofferdam/MS\ncoffin/SMDG\ncog/SM\ncogency/M\ncogent/Y\ncogitate/DSXGNV\ncogitation/M\ncogitator/MS\ncognac/SM\ncognate/MS\ncognition/AM\ncognitional\ncognitive/Y\ncognizable\ncognizance/AM\ncognizant\ncognomen/SM\ncognoscente/M\ncognoscenti\ncogwheel/SM\ncohabit/SGD\ncohabitant/MS\ncohabitation/M\ncoheir/SM\ncohere/DSG\ncoherence/IM\ncoherency/M\ncoherent/IY\ncohesion/M\ncohesive/YP\ncohesiveness/M\ncoho/MS\ncohort/SM\ncoif/MS\ncoiffed\ncoiffing\ncoiffure/DSMG\ncoil's/A\ncoil/UADGS\ncoin/MDRZGS\ncoinage/SM\ncoincide/DSG\ncoincidence/MS\ncoincident\ncoincidental/Y\ncoiner/M\ncoinsurance/M\ncoir\ncoital\ncoitus/M\ncoke/MGDS\ncol/S\ncola/MS\ncolander/SM\ncold/MRYTPS\ncoldblooded\ncoldness/M\ncoleslaw/M\ncoleus/MS\ncoley/S\ncolic/M\ncolicky\ncoliseum/MS\ncolitis/M\ncoll\ncollaborate/DSXGNV\ncollaboration/M\ncollaborationist\ncollaborative/Y\ncollaborator/MS\ncollage/SM\ncollagen\ncollapse/MGDS\ncollapsible\ncollar/SMDG\ncollarbone/SM\ncollard/SM\ncollarless\ncollate/DSXGN\ncollateral/MY\ncollateralize\ncollation/M\ncollator/MS\ncolleague/MS\ncollect's\ncollect/ASGVD\ncollected/U\ncollectedly\ncollectible/SM\ncollection/AMS\ncollective/MYS\ncollectivism/M\ncollectivist/SM\ncollectivization/M\ncollectivize/DSG\ncollector/MS\ncolleen/SM\ncollege/SM\ncollegiality/M\ncollegian/MS\ncollegiate\ncollide/DRSZG\ncollie/RSMZ\ncollier/M\ncolliery/SM\ncollision/SM\ncollocate/MGNDSX\ncollocation/M\ncolloid/SM\ncolloidal\ncolloq\ncolloquial/Y\ncolloquialism/SM\ncolloquies\ncolloquium/MS\ncolloquy/M\ncollude/DSG\ncollusion/M\ncollusive\ncologne/SM\ncolon/SM\ncolonel/SM\ncolonelcy/M\ncolones\ncolonial/SMY\ncolonialism/M\ncolonialist/MS\ncolonist/SM\ncolonization/ACM\ncolonize/CAGSD\ncolonizer/MS\ncolonnade/MDS\ncolonoscopy/SM\ncolony/SM\ncolophon/SM\ncolor's\ncolor/AEGDS\ncolorant/SM\ncoloration/EM\ncoloratura/MS\ncolorblind/P\ncolorblindness/M\ncolored's\ncolored/U\ncoloreds\ncolorfast/P\ncolorfastness/M\ncolorful/PY\ncolorfulness/M\ncoloring's\ncolorist/S\ncolorization/M\ncolorize/DSG\ncolorless/PY\ncolorlessness/M\ncolorway/S\ncolossal/Y\ncolossi\ncolossus/M\ncolostomy/SM\ncolostrum/M\ncolt/MS\ncoltish\ncolumbine/SM\ncolumn/SMD\ncolumnar\ncolumnist/SM\ncom/JL\ncoma/MS\ncomaker/SM\ncomatose\ncomb/MDRZGJS\ncombat/SMDGV\ncombatant/SM\ncombativeness/M\ncombed/U\ncomber/M\ncombination/SM\ncombine's\ncombine/ADSG\ncombined/U\ncombiner/MS\ncombings/M\ncombo/SM\ncombust/SGVD\ncombustibility/M\ncombustible/MS\ncombustion/M\ncome/IMZGRS\ncomeback/MS\ncomedian/MS\ncomedic\ncomedienne/MS\ncomedown/MS\ncomedy/SM\ncomeliness/M\ncomely/RPT\ncomer's\ncomestible/SM\ncomet/SM\ncomeuppance/SM\ncomfit's\ncomfit/ES\ncomfort/ESMDG\ncomfortable/P\ncomfortableness/M\ncomfortably/U\ncomforter/MS\ncomforting/Y\ncomfortless\ncomfy/RT\ncomic/SM\ncomical/Y\ncomicality/M\ncoming/M\ncomity/M\ncomm\ncomma/SM\ncommand/SMDRLZG\ncommandant/MS\ncommandeer/GDS\ncommander/M\ncommandment/MS\ncommando/SM\ncommemorate/XGNVDS\ncommemoration/M\ncommemorator/MS\ncommence/ADSLG\ncommencement/AM\ncommencements\ncommend/ASDBG\ncommendably\ncommendation/AMS\ncommendatory\ncommensurable\ncommensurate/IY\ncomment/GSMD\ncommentary/SM\ncommentate/DSG\ncommentator/SM\ncommerce/M\ncommercial/SMY\ncommercialism/M\ncommercialization/M\ncommercialize/GDS\ncommie/SM\ncommingle/DSG\ncommiserate/GNVDSX\ncommiseration/M\ncommissar/SM\ncommissariat/SM\ncommissary/SM\ncommission's\ncommission/ACSGD\ncommissionaire/S\ncommissioner/SM\ncommit/AS\ncommitment/MS\ncommittal/SM\ncommitted/AU\ncommittee/SM\ncommitteeman/M\ncommitteemen\ncommitteewoman/M\ncommitteewomen\ncommitter/S\ncommitting/A\ncommode's\ncommode/EIS\ncommodification\ncommodious/Y\ncommodity/SM\ncommodore/SM\ncommon's\ncommon/UPRYT\ncommonality/S\ncommonalty/M\ncommoner/MS\ncommonness/UM\ncommonplace/MS\ncommons\ncommonsense\ncommonweal/MH\ncommonwealth/M\ncommonwealths\ncommotion/SM\ncommunal/Y\ncommune/XDSMGN\ncommunicability/M\ncommunicable/I\ncommunicably\ncommunicant/MS\ncommunicate/GNVDSX\ncommunication/M\ncommunicative/U\ncommunicator/SM\ncommunion/M\ncommunique/SM\ncommunism/M\ncommunist/SM\ncommunistic\ncommunity/SM\ncommutation/MS\ncommutative\ncommutativity\ncommutator/SM\ncommute/BDRSMZG\ncommuter/M\ncomorbidity\ncomp/MDYGS\ncompact/TGSMDRYP\ncompaction\ncompactness/M\ncompactor/SM\ncompanion/SBM\ncompanionably\ncompanionship/M\ncompanionway/MS\ncompany/SM\ncomparability/M\ncomparable/I\ncomparably/I\ncomparative/MYS\ncompare/BDSG\ncomparison/MS\ncompartment/SM\ncompartmental\ncompartmentalization/M\ncompartmentalize/DSG\ncompass/GMDS\ncompassion/M\ncompassionate/Y\ncompatibility/IM\ncompatible/IMS\ncompatibly/I\ncompatriot/MS\ncompeer/SM\ncompel/S\ncompelled\ncompelling/Y\ncompendious\ncompendium/SM\ncompensate/DSXGN\ncompensated/U\ncompensation/M\ncompensatory\ncompere/DSG\ncompete/DSG\ncompetence/IM\ncompetences\ncompetencies\ncompetency/IM\ncompetent/IY\ncompetition/SM\ncompetitive/PY\ncompetitiveness/M\ncompetitor/SM\ncompilation/SM\ncompile/DRSZG\ncompiler/M\ncomplacence/M\ncomplacency/M\ncomplacent/Y\ncomplain/DRZGS\ncomplainant/MS\ncomplainer/M\ncomplaint/SM\ncomplaisance/M\ncomplaisant/Y\ncomplected\ncomplement/SGMD\ncomplementary\ncomplete/PYTGNXDRS\ncompleted/U\ncompleteness/IM\ncompletion/M\ncomplex/MSY\ncomplexion/MDS\ncomplexional\ncomplexity/SM\ncompliance/M\ncompliant/Y\ncomplicate/GDS\ncomplicated/Y\ncomplication/M\ncomplicit\ncomplicity/M\ncompliment/MDGS\ncomplimentary/U\ncomply/NDSXG\ncompo/S\ncomponent/SM\ncomport/LSGD\ncomportment/M\ncompose/AECGSD\ncomposedly\ncomposer/MS\ncomposite/MYGNXDS\ncomposition/CM\ncompositional\ncompositor/SM\ncompost/SGMD\ncomposure/EM\ncompote/SM\ncompound/GMDBS\ncompounded/U\ncomprehend/SDG\ncomprehensibility/IM\ncomprehensible/I\ncomprehensibly/I\ncomprehension/IM\ncomprehensions\ncomprehensive/PMYS\ncomprehensiveness/M\ncompress's\ncompress/CGVDS\ncompressed/U\ncompressible\ncompression/CM\ncompressor/SM\ncomprise/GDS\ncompromise/MGDS\ncomptroller/MS\ncompulsion/MS\ncompulsive/YP\ncompulsiveness/M\ncompulsorily\ncompulsory/SM\ncompunction/SM\ncomputation/SM\ncomputational/Y\ncompute/ADSG\ncomputer/MS\ncomputerate\ncomputerization/M\ncomputerize/GDS\ncomputing/M\ncomrade/SMY\ncomradeship/M\ncon/GSM\nconcatenate/XDSGN\nconcatenation/M\nconcave/YP\nconcaveness/M\nconceal/SDRZGBL\nconcealed/U\nconcealer/M\nconcealment/M\nconceit/SMD\nconceited/PY\nconceitedness/M\nconceivable/I\nconceivably/I\nconceive/DSGB\nconcentrate/DSMGNX\nconcentration/M\nconcentric\nconcentrically\nconcept/SM\nconception/SM\nconceptional\nconceptual/Y\nconceptualization/MS\nconceptualize/DSG\nconcern/UMD\nconcerned/UY\nconcerning\nconcerns\nconcert's\nconcert/ESDG\nconcerted/Y\nconcertgoer/S\nconcertina/SGMD\nconcertize/DSG\nconcertmaster/MS\nconcerto/SM\nconcessionaire/MS\nconcessional\nconcessionary\nconch/M\nconchie/S\nconchs\nconcierge/MS\nconciliate/DSGN\nconciliation/AM\nconciliator/SM\nconciliatory\nconcise/RPYTN\nconciseness/M\nconcision/M\nconclave/SM\nconclude/DSG\nconclusion/MS\nconclusive/IYP\nconclusiveness/IM\nconcoct/SDG\nconcoction/MS\nconcomitant/MYS\nconcord/M\nconcordance/SM\nconcordant\nconcordat/SM\nconcourse/SM\nconcrete/DSPMYGNX\nconcreteness/M\nconcretion/M\nconcubinage/M\nconcubine/MS\nconcupiscence/M\nconcupiscent\nconcur/S\nconcurred\nconcurrence/SM\nconcurrency\nconcurring\nconcuss/V\nconcussion/SM\ncondemn/SDRZG\ncondemnation/MS\ncondemnatory\ncondemner/M\ncondensate/MNXS\ncondensation/M\ncondense/DRSZG\ncondenser/M\ncondescending/Y\ncondescension/M\ncondign\ncondiment/MS\ncondition's\ncondition/AGSD\nconditional/SMY\nconditionality\nconditioned/U\nconditioner/SM\nconditioning/M\ncondo/SM\ncondolence/SM\ncondom/SM\ncondominium/MS\ncondone/DSG\ncondor/SM\nconduce/DSGV\nconduct/MDGV\nconductance/M\nconductibility/M\nconductible\nconduction/M\nconductivity/M\nconductor/MS\nconductress/MS\nconduit/SM\ncone/M\nconeys\nconfab/SM\nconfabbed\nconfabbing\nconfabulate/XDSGN\nconfabulation/M\nconfection/SZMR\nconfectioner/M\nconfectionery/SM\nconfederacy/SM\nconfederate/M\nconfer/S\nconferee/SM\nconference/MGS\nconferrable\nconferral/M\nconferred\nconferrer/MS\nconferring\nconfessed/Y\nconfession/SM\nconfessional/SM\nconfessor/MS\nconfetti/M\nconfidant/MS\nconfidante/SM\nconfide/DRSZG\nconfidence/SM\nconfident/Y\nconfidential/Y\nconfidentiality/M\nconfider/M\nconfiding/Y\nconfiguration/S\nconfigure/B\nconfined/U\nconfinement/MS\nconfirm/ASDG\nconfirmation/ASM\nconfirmatory\nconfirmed/U\nconfiscate/DSGNX\nconfiscation/M\nconfiscator/SM\nconfiscatory\nconflagration/MS\nconflate/XDSGN\nconflation/M\nconflict/SGMD\nconfluence/MS\nconfluent\nconform/ZB\nconformable/U\nconformal\nconformance/M\nconformism/M\nconformist/SM\nconformity/M\nconfrere/MS\nconfrontation/SM\nconfrontational\nconfuse/RZ\nconfused/Y\nconfusing/Y\nconfutation/M\nconfute/DSG\nconga/SMDG\ncongeal/SLDG\ncongealment/M\nconger/SM\ncongeries/M\ncongest/SDGV\ncongestion/M\nconglomerate/DSXMGN\nconglomeration/M\ncongrats/M\ncongratulate/XGNDS\ncongratulation/M\ncongratulatory\ncongregant/MS\ncongregate/GNDSX\ncongregation/M\ncongregational\ncongregationalism/M\ncongregationalist/MS\ncongress/MS\ncongressional\ncongressman/M\ncongressmen\ncongresspeople\ncongressperson/MS\ncongresswoman/M\ncongresswomen\ncongruence/M\ncongruent/Y\ncongruity/ISM\ncongruous\nconic/SM\nconical/Y\nconifer/SM\nconiferous\nconjectural\nconjecture/MGDS\nconjoint\nconjugal/Y\nconjugate/DSXGN\nconjugation/M\nconjunct/VMS\nconjunctiva/SM\nconjunctive/SM\nconjunctivitis/M\nconjuration/MS\nconjure/DRSZG\nconjurer/M\nconk/MDRZ\nconman\nconnect/AEDVGS\nconnectable\nconnected/U\nconnection/EMS\nconnective/MS\nconnectivity/M\nconnector/MS\nconned\nconning\nconniption/MS\nconnivance/M\nconnive/DRSZG\nconniver/M\nconnoisseur/SM\nconnotative\nconnubial\nconquer/ASDG\nconquerable/U\nconquered/U\nconqueror/MS\nconquest/AM\nconquistador/SM\ncons/DSG\nconsanguineous\nconsanguinity/M\nconscienceless\nconscientious/PY\nconscientiousness/M\nconscious/UYP\nconsciousness/UM\nconsciousnesses\nconscription/M\nconsecrate/ADSGN\nconsecrated/U\nconsecration/AM\nconsecrations\nconsecutive/Y\nconsensual\nconsensus/MS\nconsent/SMDG\nconsequence/SM\nconsequent/Y\nconsequential/IY\nconservancy/SM\nconservation/M\nconservationism/M\nconservationist/SM\nconservatism/M\nconservative/MYS\nconservatoire/S\nconservator/SM\nconservatory/SM\nconsider/AGSD\nconsiderable/I\nconsiderably\nconsiderate/IPYN\nconsiderateness/IM\nconsideration/AIM\nconsiderations\nconsidered/U\nconsign/ASDG\nconsignee/MS\nconsignment/MS\nconsist/SDG\nconsistence/MS\nconsistency/ISM\nconsistent/IY\nconsistory/SM\nconsolable/I\nconsolation/MS\nconsolatory\nconsolidate/XDSGN\nconsolidated/U\nconsolidation/M\nconsolidator/MS\nconsoling/Y\nconsomme/M\nconsonance/SM\nconsonant/SMY\nconsortia\nconsortium/M\nconspectus/MS\nconspicuous/IPY\nconspicuousness/IM\nconspiracy/SM\nconspirator/MS\nconspiratorial/Y\nconspire/GD\nconstable/SM\nconstabulary/SM\nconstancy/IM\nconstant/MYS\nconstellation/SM\nconsternation/M\nconstipate/GNDS\nconstipation/M\nconstituency/SM\nconstituent/SM\nconstitute/ADSGNV\nconstitution/AM\nconstitutional/MYS\nconstitutionalism\nconstitutionality/UM\nconstitutions\nconstrained/U\nconstraint/SM\nconstrict/GVSD\nconstriction/SM\nconstrictor/SM\nconstruable\nconstruct's\nconstruct/CADVGS\nconstruction/CAMS\nconstructional\nconstructionist's\nconstructionist/CS\nconstructive/YP\nconstructiveness/M\nconstructor/MS\nconstrue/GDS\nconsul/KSM\nconsular/K\nconsulate/SM\nconsulship/M\nconsult/GSD\nconsultancy/SM\nconsultant/MS\nconsultation/MS\nconsultative\nconsumable/SM\nconsume/BDRSZG\nconsumed/U\nconsumer/M\nconsumerism/M\nconsumerist/MS\nconsummate/YGNXDS\nconsummated/U\nconsumption/M\nconsumptive/SM\ncont\ncontact/ASDG\ncontactable\ncontagion/MS\ncontagious/PY\ncontagiousness/M\ncontain/SBLDRZG\ncontainer/M\ncontainerization/M\ncontainerize/DSG\ncontainment/M\ncontaminant/SM\ncontaminate/ACDSG\ncontaminated/U\ncontamination/CM\ncontaminator/SM\ncontd\ncontemn/SDG\ncontemplate/DSGNV\ncontemplation/M\ncontemplative/SMY\ncontemporaneity/M\ncontemporaneous/Y\ncontempt/M\ncontemptible\ncontemptibly\ncontemptuous/YP\ncontemptuousness/M\ncontender/MS\ncontent/ESLMDG\ncontented/EY\ncontentedness/M\ncontention/SM\ncontentious/YP\ncontentiousness/M\ncontently\ncontentment/EM\nconterminous/Y\ncontestable/I\ncontestant/MS\ncontested/U\ncontextualization\ncontextualize/DSG\ncontiguity/M\ncontiguous/Y\ncontinence/IM\ncontinent/SM\ncontinental/SM\ncontingency/SM\ncontingent/SMY\ncontinua\ncontinual/Y\ncontinuance/EMS\ncontinuation/EMS\ncontinue/EGDS\ncontinuity/ESM\ncontinuous/EY\ncontinuum/M\ncontort/GD\ncontortion/MS\ncontortionist/SM\ncontra\ncontraband/M\ncontrabassoon/S\ncontraception/M\ncontraceptive/SM\ncontract/MDG\ncontractible\ncontractile\ncontractility\ncontraction/S\ncontractual/Y\ncontradict/SDG\ncontradiction/SM\ncontradictory\ncontradistinction/MS\ncontraflow/S\ncontrail/MS\ncontraindicate/GNXDS\ncontraindication/M\ncontralto/SM\ncontraption/SM\ncontrapuntal/Y\ncontrarian/SM\ncontrarianism\ncontrariety/M\ncontrarily\ncontrariness/M\ncontrariwise\ncontrary/PSM\ncontrast/MDGS\ncontravene/GDS\ncontravention/SM\ncontretemps/M\ncontribute/XGND\ncontribution/M\ncontributor/MS\ncontributory\ncontrition/M\ncontrivance/MS\ncontrive/ZGDRS\ncontriver/M\ncontrol's\ncontrol/CS\ncontrollable/U\ncontrolled/UC\ncontroller/MS\ncontrolling/C\ncontroversial/Y\ncontroversy/SM\ncontrovert/DSG\ncontrovertible/I\ncontumacious/Y\ncontumacy/M\ncontumelious\ncontumely/SM\ncontuse/XDSGN\ncontusion/M\nconundrum/SM\nconurbation/MS\nconvalesce/DSG\nconvalescence/MS\nconvalescent/SM\nconvection/M\nconvectional\nconvective\nconvector/S\nconvene/ADSG\nconvener/MS\nconvenience/IMS\nconvenient/IY\nconvent/SM\nconventicle/MS\nconvention/SM\nconventional/UY\nconventionality/UM\nconventionalize/GDS\nconventioneer/S\nconvergence/MS\nconvergent\nconversant\nconversation/MS\nconversational/Y\nconversationalist/SM\nconverse/Y\nconvert's\nconvert/AGSD\nconverted/U\nconverter/SM\nconvertibility/M\nconvertible/SM\nconvex/Y\nconvexity/M\nconvey/SBDG\nconveyance/MGS\nconveyor/MS\nconvict/GSMD\nconviction/MS\nconvince/GDS\nconvinced/U\nconvincing/UY\nconvivial/Y\nconviviality/M\nconvoke/DSG\nconvoluted\nconvolution/MS\nconvoy/SMDG\nconvulse/GNVXDS\nconvulsion/M\nconvulsive/Y\ncony/M\ncoo/GSMD\ncook's\ncook/ADGS\ncookbook/MS\ncooked/U\ncooker/SM\ncookery/SM\ncookhouse/S\ncookie/SM\ncooking/M\ncookout/SM\ncookware/SM\ncool/MDRYZTGPS\ncoolant/SM\ncooler/M\ncoolie/SM\ncoolness/M\ncoon/MS!\ncoonskin/MS\ncoop/MDRZGS\ncooper/MDG\ncooperage/M\ncooperate/DSGNV\ncooperation/M\ncooperative/PMYS\ncooperativeness/M\ncooperator/SM\ncoordinate/DSMYGN\ncoordinated/U\ncoordination/M\ncoordinator/MS\ncoot/MS\ncootie/SM\ncop/GJSMD\ncopacetic\ncopay/M\ncope/MS\ncopier/SM\ncopilot/SM\ncoping/M\ncopious/PY\ncopiousness/M\ncopped\ncopper/SM\ncopperhead/SM\ncopperplate/M\ncoppery\ncopping\ncopra/M\ncopse/SM\ncopter/SM\ncopula/SM\ncopulate/GNVDS\ncopulation/M\ncopulative/SM\ncopy's\ncopy/ADSG\ncopybook/SM\ncopycat/MS\ncopycatted\ncopycatting\ncopyist/MS\ncopyleft\ncopyright/GSMD\ncopywriter/MS\ncoquetry/SM\ncoquette/DSMG\ncoquettish/Y\ncor\ncoracle/SM\ncoral/SM\ncorbel/SM\ncord/EASGDM\ncordage/M\ncordial/SMY\ncordiality/M\ncordillera/MS\ncordite/M\ncordless\ncordon/SMDG\ncordovan/M\ncorduroy/MS\ncorduroys/M\ncore/MZGDRS\ncoreligionist/S\ncorer/M\ncorespondent/MS\ncorgi/SM\ncoriander/M\ncork's\ncork/UDGS\ncorkage\ncorker/SM\ncorkscrew/SMDG\ncorm/MS\ncormorant/SM\ncorn/MDRZGS\ncornball/MS\ncornbread/M\ncorncob/MS\ncorncrake/S\ncornea/SM\ncorneal\ncorner/GMD\ncornerstone/SM\ncornet/SM\ncornfield/S\ncornflakes/M\ncornflour\ncornflower/SM\ncornice/MS\ncornily\ncorniness/M\ncornmeal/M\ncornrow/MDGS\ncornstalk/SM\ncornstarch/M\ncornucopia/MS\ncorny/PRT\ncorolla/MS\ncorollary/SM\ncorona/SM\ncoronal/MS\ncoronary/SM\ncoronation/SM\ncoroner/MS\ncoronet/MS\ncorp\ncorpora\ncorporal/SM\ncorporate/XYN\ncorporation/IM\ncorporatism\ncorporeal/Y\ncorporeality/M\ncorps/MS\ncorpse/M\ncorpsman/M\ncorpsmen\ncorpulence/M\ncorpulent\ncorpus/M\ncorpuscle/MS\ncorpuscular\ncorr\ncorral/SM\ncorralled\ncorralling\ncorrect/DRYTGVSBP\ncorrected/U\ncorrection/SM\ncorrectional\ncorrective/SM\ncorrectness/IM\ncorrector\ncorrelate/XDSMGNV\ncorrelated/U\ncorrelation/M\ncorrelational\ncorrelative/MS\ncorrespond/SDG\ncorrespondence/SM\ncorrespondent/SM\ncorresponding/Y\ncorridor/SM\ncorrie/S\ncorroborate/GNVDSX\ncorroborated/U\ncorroboration/M\ncorroborator/SM\ncorroboratory\ncorrode/GDS\ncorrosion/M\ncorrosive/SMY\ncorrugate/GNXDS\ncorrugation/M\ncorrupt/DRYPSTG\ncorruptibility/IM\ncorruptible/I\ncorruption/MS\ncorruptness/M\ncorsage/MS\ncorsair/MS\ncorset/SGMD\ncortege/MS\ncortex/M\ncortical\ncortices\ncortisol\ncortisone/M\ncorundum/M\ncoruscate/GNDS\ncoruscation/M\ncorvette/SM\ncos/M\ncosh/DSG\ncosign/ZGSDR\ncosignatory/SM\ncosigner/M\ncosine/SM\ncosmetic/SM\ncosmetically\ncosmetician/MS\ncosmetologist/MS\ncosmetology/M\ncosmic\ncosmically\ncosmogonist/SM\ncosmogony/SM\ncosmological\ncosmologist/SM\ncosmology/SM\ncosmonaut/SM\ncosmopolitan/MS\ncosmopolitanism/M\ncosmos/MS\ncosplay\ncosponsor/GSMD\ncosset/SGD\ncossetted\ncossetting\ncost/MDYGSJ\ncostar/SM\ncostarred\ncostarring\ncostliness/M\ncostly/PTR\ncostume/MZGDRS\ncostumer/M\ncostumier/S\ncot/SM\ncotangent/MS\ncote/MS\ncoterie/MS\ncoterminous\ncotillion/SM\ncottage/MZGRS\ncottager/M\ncottar/SM\ncotter/SM\ncotton/SGMD\ncottonmouth/M\ncottonmouths\ncottonseed/MS\ncottontail/MS\ncottonwood/SM\ncottony\ncotyledon/MS\ncouch/MDSG\ncouchette/S\ncougar/SM\ncough/MDG\ncoughs\ncould\ncould've\ncouldn't\ncoulee/SM\ncoulis\ncoulomb/MS\ncouncil/MS\ncouncilman/M\ncouncilmen\ncouncilor/MS\ncouncilperson/SM\ncouncilwoman/M\ncouncilwomen\ncounsel/JMDGS\ncounselor/MS\ncount/EASMDG\ncountable/U\ncountably\ncountdown/MS\ncounted/U\ncountenance's\ncountenance/EGDS\ncounter/EMS\ncounteract/SGVD\ncounteraction/MS\ncounterargument/S\ncounterattack/GMDS\ncounterbalance/MGDS\ncounterblast/S\ncounterclaim/GSMD\ncounterclockwise\ncounterculture/SM\ncountered\ncounterespionage/M\ncounterexample/S\ncounterfactual\ncounterfeit/ZGMDRS\ncounterfeiter/M\ncounterfoil/MS\ncountering\ncounterinsurgency/SM\ncounterintelligence/M\ncounterman/M\ncountermand/GMDS\ncountermeasure/SM\ncountermelody/S\ncountermen\ncountermove/S\ncounteroffensive/SM\ncounteroffer/SM\ncounterpane/SM\ncounterpart/SM\ncounterpetition\ncounterpoint/MDGS\ncounterpoise/MGDS\ncounterproductive\ncounterrevolution/SM\ncounterrevolutionary/SM\ncountersign/GSMD\ncountersignature/MS\ncountersink/GSM\ncounterspy/SM\ncounterstroke/SM\ncountersunk\ncountertenor/MS\ncountervail/GSD\ncounterweight/MS\ncountess/MS\ncountless\ncountrified\ncountry/SM\ncountryman/M\ncountrymen\ncountryside/MS\ncountrywide\ncountrywoman/M\ncountrywomen\ncounty/SM\ncountywide\ncoup's\ncoup/AS\ncoupe/SM\ncouple's\ncouple/UCGSD\ncouplet/MS\ncoupling/SM\ncoupon/SM\ncourage/M\ncourageous/YP\ncourageousness/M\ncourgette/S\ncourier/MDSG\ncourse/EDGMS\ncoursebook/S\ncourser/MS\ncoursework\ncourt/SMDYG\ncourteous/EY\ncourteousness/M\ncourtesan/SM\ncourtesy/ESM\ncourthouse/MS\ncourtier/SM\ncourtliness/M\ncourtly/PRT\ncourtroom/MS\ncourtship/MS\ncourtyard/MS\ncouscous/M\ncousin/SM\ncouture/M\ncouturier/MS\ncovalent\ncovariance\ncovariant\ncove/MS\ncoven/SM\ncovenant/MDSG\ncover's\ncover/AEUGDS\ncoverage/M\ncoverall/MS\ncovering's\ncoverings\ncoverlet/MS\ncovert/SPMY\ncovertness/M\ncovet/SDG\ncovetous/YP\ncovetousness/M\ncovey/SM\ncow/ZGSMDR\ncoward/SMY\ncowardice/M\ncowardliness/M\ncowbell/MS\ncowbird/MS\ncowboy/SM\ncowcatcher/MS\ncower/DG\ncowgirl/MS\ncowhand/MS\ncowherd/MS\ncowhide/MS\ncowl/MGSJ\ncowlick/MS\ncowling/M\ncowman/M\ncowmen\ncoworker/MS\ncowpat/S\ncowpoke/MS\ncowpox/M\ncowpuncher/SM\ncowrie/SM\ncowshed/S\ncowslip/SM\ncox/GDS\ncoxcomb/MS\ncoxswain/MS\ncoy/TPRY\ncoyness/M\ncoyote/SM\ncoypu/SM\ncozen/SDG\ncozenage/M\ncozily\ncoziness/M\ncozy/RSMTP\ncpd\ncpl\ncps\ncrab/MS\ncrabbed\ncrabber/SM\ncrabbily\ncrabbiness/M\ncrabbing\ncrabby/PRT\ncrabgrass/M\ncrablike\ncrabwise\ncrack/SMDRYZGJ\ncrackdown/MS\ncracker/M\ncrackerjack/MS\ncrackhead/MS\ncrackle/DSJMG\ncrackling/M\ncrackpot/MS\ncrackup/SM\ncradle/DSMG\ncraft/SMDG\ncraftily\ncraftiness/M\ncraftsman/M\ncraftsmanship/M\ncraftsmen\ncraftspeople\ncraftswoman/M\ncraftswomen\ncrafty/RTP\ncrag/MS\ncragginess/M\ncraggy/RPT\ncram/S\ncrammed\ncrammer/S\ncramming\ncramp/SMDG\ncramping/M\ncrampon/SM\ncranberry/SM\ncrane/DSMG\ncranial\ncranium/SM\ncrank/SMDG\ncrankcase/SM\ncrankily\ncrankiness/M\ncrankshaft/MS\ncranky/PRT\ncranny/DSM\ncrap/MS\ncrape/SM\ncrapped\ncrapper/S\ncrappie/RSMT\ncrapping\ncrappy\ncraps/M\ncrapshooter/MS\ncrash/MDSG\ncrass/RYTP\ncrassness/M\ncrate/DRSMZG\ncrater/MDG\ncravat/SM\ncrave/DSGJ\ncraven/SMYP\ncravenness/M\ncraving/M\ncraw/MS\ncrawdad/SM\ncrawl/SMDRZG\ncrawler/M\ncrawlspace/SM\ncrawly/TRSM\ncray/S\ncrayfish/MS\ncrayola/S\ncrayon/GSMD\ncraze/DSMG\ncrazily\ncraziness/M\ncrazy/PRSMT\ncreak/SMDG\ncreakily\ncreakiness/M\ncreaky/RPT\ncream/SMDRZG\ncreamer/M\ncreamery/SM\ncreamily\ncreaminess/M\ncreamy/RPT\ncrease/ICGMSD\ncreate/KADSGNV\ncreation's/K\ncreation/ASM\ncreationism/SM\ncreationist/SM\ncreative/SMYP\ncreativeness/M\ncreativity/M\ncreator/MS\ncreature/SM\ncreche/SM\ncred\ncredence/M\ncredential/SGMD\ncredenza/SM\ncredibility/IM\ncredible/I\ncredibly/I\ncredit/EGSBMD\ncreditably/E\ncreditor/SM\ncreditworthy/P\ncredo/SM\ncredulity/IM\ncredulous/IY\ncredulousness/M\ncreed/SM\ncreek/SM\ncreel/SM\ncreep/SMRZG\ncreeper/M\ncreepily\ncreepiness/M\ncreepy/TPR\ncremains/M\ncremate/GNDSX\ncremation/M\ncrematoria\ncrematorium/MS\ncrematory/SM\ncreme/SM\ncrenelate/XGNDS\ncrenelation/M\ncreole/SM\ncreosote/MGDS\ncrepe/SM\ncrept\ncrepuscular\ncrescendo/CSM\ncrescent/MS\ncress/M\ncrest/SMDG\ncrestfallen\ncrestless\ncretaceous\ncretin/SM\ncretinism/M\ncretinous\ncretonne/M\ncrevasse/SM\ncrevice/MS\ncrew/MDGS\ncrewel/M\ncrewelwork/M\ncrewman/M\ncrewmen\ncrib/MS\ncribbage/M\ncribbed\ncribber/MS\ncribbing\ncrick/SMDG\ncricket/MRSZG\ncricketer/M\ncrier/M\ncrikey\ncrime/SM\ncriminal/MYS\ncriminality/M\ncriminalize/CGDS\ncriminologist/MS\ncriminology/M\ncrimp/SMDG\ncrimson/SMDG\ncringe/DSMG\ncrinkle/DSMG\ncrinkly/RT\ncrinoline/SM\ncripes\ncripple/DRSMZG\ncrippler/M\ncrippleware\ncrippling/Y\ncrises\ncrisis/M\ncrisp/SMDRYTGP\ncrispbread/S\ncrispiness/M\ncrispness/M\ncrispy/PRT\ncrisscross/GMDS\ncriteria\ncriterion/M\ncritic/SM\ncritical/UY\ncriticality\ncriticism/MS\ncriticize/ZGDRS\ncriticizer/M\ncritique/MGDS\ncritter/SM\ncroak/SMDG\ncroaky/RT\ncrochet/SMDRZG\ncrocheter/M\ncrocheting/M\ncrock/SMD\ncrockery/M\ncrocodile/SM\ncrocus/MS\ncroft/SRZG\ncroissant/MS\ncrone/SM\ncrony/SM\ncronyism/M\ncrook/SMDG\ncrooked/PTRY\ncrookedness/M\ncrookneck/SM\ncroon/SMDRZG\ncrooner/M\ncrop/MS\ncropland/SM\ncropped\ncropper/MS\ncropping\ncroquet/M\ncroquette/SM\ncrosier/MS\ncross's\ncross/AUGTSD\ncrossbar/SM\ncrossbeam/MS\ncrossbones/M\ncrossbow/SM\ncrossbowman/M\ncrossbowmen\ncrossbred\ncrossbreed/SGM\ncrosscheck/SMDG\ncrosscurrent/MS\ncrosscut/SM\ncrosscutting\ncrosser\ncrossfire/MS\ncrosshatch/GDS\ncrossing/SM\ncrossly\ncrossness/M\ncrossover/MS\ncrosspatch/MS\ncrosspiece/SM\ncrossroad/MS\ncrossroads/M\ncrosstown\ncrosswalk/MS\ncrosswind/MS\ncrosswise\ncrossword/MS\ncrotch/MS\ncrotchet/SM\ncrotchety\ncrouch/GMDS\ncroup/M\ncroupier/M\ncroupy/ZTR\ncrouton/MS\ncrow/MDGS\ncrowbar/MS\ncrowd/SMDG\ncrowded/U\ncrowdfund/SDG\ncrowfeet\ncrowfoot/SM\ncrown/SMDG\ncrowned/U\ncrucial/Y\ncrucible/SM\ncrucifix/MS\ncrucifixion/SM\ncruciform/SM\ncrucify/DSG\ncrud/M\ncruddy/TR\ncrude/RMYTP\ncrudeness/M\ncrudites/M\ncrudity/SM\ncruel/RYPT\ncruelness/M\ncruelty/SM\ncruet/SM\ncruft/SD\ncrufty\ncruise/DRSMZG\ncruiser/M\ncruller/MS\ncrumb/SMDYG\ncrumble/MGDS\ncrumbliness/M\ncrumbly/TPR\ncrumby/TR\ncrumminess/M\ncrummy/PTR\ncrumpet/MS\ncrumple/MGDS\ncrunch/GMDRS\ncrunchiness/M\ncrunchy/TRP\ncrupper/MS\ncrusade/MZGDRS\ncrusader/M\ncruse/SM\ncrush/MDRSZG\ncrusher/M\ncrushing/Y\ncrust/SMDG\ncrustacean/SM\ncrustal\ncrustily\ncrustiness/M\ncrusty/TRP\ncrutch/MS\ncrux/MS\ncry/ZGJDRSM\ncrybaby/SM\ncryogenic/S\ncryogenics/M\ncryonics\ncryosurgery/M\ncrypt/SM\ncryptic\ncryptically\ncryptocurrency/SM\ncryptogram/SM\ncryptographer/SM\ncryptography/M\ncrystal/SM\ncrystalline\ncrystallization/M\ncrystallize/ADSG\ncrystallographic\ncrystallography\nct\nctn\nctr\ncu\ncub/ZGSMDR\ncubbyhole/MS\ncube/MS\ncuber/M\ncubic\ncubical\ncubicle/MS\ncubism/M\ncubist/SM\ncubit/SM\ncuboid/S\ncuckold/MDSG\ncuckoldry/M\ncuckoo/SM\ncucumber/SM\ncud/SM\ncuddle/DSMG\ncuddly/TR\ncudgel/SGMDJ\ncue/DSMG\ncuff/MDGS\ncuisine/SM\nculinary\ncull/MDGS\nculminate/XDSGN\nculmination/M\nculotte/SM\nculpability/M\nculpable/I\nculpably\nculprit/SM\ncult/MS\ncultism/M\ncultist/MS\ncultivable\ncultivar/SM\ncultivate/BDSGN\ncultivated/U\ncultivation/M\ncultivator/MS\ncultural/Y\nculture/MGDS\ncultured/U\nculvert/MS\ncum/SM\ncumber/SDG\ncumbersome/P\ncumbersomeness/M\ncumbrous\ncumin/M\ncummerbund/MS\ncumming\ncumulative/Y\ncumuli\ncumulonimbi\ncumulonimbus/M\ncumulus/M\ncuneiform/M\ncunnilingus/M\ncunning/MRYT\ncunt/MS!\ncup/SM\ncupboard/SM\ncupcake/MS\ncupful/SM\ncupid/SM\ncupidity/M\ncupola/SMD\ncuppa/S\ncupped\ncupping\ncupric\ncur/SMY\ncurability/M\ncuracao\ncuracy/SM\ncurare/M\ncurate/DSMGV\ncurative/MS\ncurator/KMS\ncuratorial\ncurb/MDGS\ncurbing/M\ncurbside\ncurbstone/SM\ncurd/MS\ncurdle/DSG\ncure's\ncure/KZGBDRS\ncured/U\ncurer/KM\ncurettage/M\ncurfew/SM\ncuria/M\ncuriae\ncurie/SM\ncurio/SM\ncuriosity/SM\ncurious/YP\ncuriousness/M\ncurium/M\ncurl's\ncurl/UDGS\ncurler/SM\ncurlew/SM\ncurlicue/DSMG\ncurliness/M\ncurling/M\ncurly/RPT\ncurmudgeon/MYS\ncurrant/MS\ncurrency/SM\ncurrent's\ncurrent/FAY\ncurrents\ncurricula\ncurricular\ncurriculum/M\ncurry/DSMG\ncurrycomb/SGMD\ncurse/DSMGV\ncursed/Y\ncursive's\ncursive/EAY\ncursor/SM\ncursorily\ncursoriness/M\ncursory/P\ncurt/RYTP\ncurtail/GDSL\ncurtailment/SM\ncurtain/GMDS\ncurtness/M\ncurtsy/GDSM\ncurvaceous/P\ncurvaceousness/M\ncurvature/SM\ncurve/DSMG\ncurvy/RT\ncushion/MDSG\ncushy/RT\ncusp/MS\ncuspid/SM\ncuspidor/SM\ncuss's\ncuss/FEGSD\ncussed/PY\ncustard/MS\ncustodial\ncustodian/MS\ncustodianship/M\ncustody/M\ncustom/SZMR\ncustomarily\ncustomary/U\ncustomer/M\ncustomhouse/SM\ncustomization/M\ncustomize/DSG\ncut/TSMR\ncutaneous\ncutaway/MS\ncutback/MS\ncute/YP\ncuteness/M\ncutesy/TR\ncutey/S\ncuticle/MS\ncutie/SM\ncutlass/MS\ncutler/SM\ncutlery/M\ncutlet/SM\ncutoff/SM\ncutout/SM\ncutter/SM\ncutthroat/SM\ncutting/MYS\ncuttlefish/MS\ncutup/SM\ncutworm/MS\ncw\ncwt\ncyan/M\ncyanide/M\ncyanobacteria\ncyberbully/SM\ncybercafe/S\ncybernetic/S\ncybernetics/M\ncyberpunk/SM\ncybersex\ncyberspace/MS\ncyborg/SM\ncyclamen/MS\ncycle/ADSMG\ncyclic\ncyclical/Y\ncyclist/MS\ncyclometer/MS\ncyclone/MS\ncyclonic\ncyclopedia/MS\ncyclopes\ncyclops/M\ncyclotron/MS\ncygnet/MS\ncylinder/MS\ncylindrical\ncymbal/MS\ncymbalist/MS\ncynic/SM\ncynical/Y\ncynicism/M\ncynosure/MS\ncypress/MS\ncyst/MS\ncystic\ncystitis\ncytokines\ncytologist/SM\ncytology/M\ncytoplasm/M\ncytoplasmic\ncytosine/M\nczar/MS\nczarina/SM\nczarism\nczarist/SM\nd'Arezzo/M\nd'Estaing/M\nd/NXGJ\ndB\ndab/SM\ndabbed\ndabber/MS\ndabbing\ndabble/ZGDRS\ndabbler/M\ndace/SM\ndacha/MS\ndachshund/MS\ndactyl/MS\ndactylic/MS\ndad/SM\ndadaism/M\ndadaist/MS\ndaddy/SM\ndado/M\ndadoes\ndaemon/MS\ndaemonic\ndaffiness/M\ndaffodil/SM\ndaffy/PTR\ndaft/PTRY\ndaftness/M\ndag/S\ndagger/MS\ndago/S\ndagoes\ndaguerreotype/DSMG\ndahlia/MS\ndailiness/M\ndaily/PSM\ndaintily\ndaintiness/M\ndainty/RSMTP\ndaiquiri/MS\ndairy/GSM\ndairying/M\ndairymaid/MS\ndairyman/M\ndairymen\ndairywoman/M\ndairywomen\ndais/MS\ndaisy/SM\ndale/SM\ndalliance/MS\ndallier/M\ndally/ZGDRS\ndalmatian/MS\ndam/SM\ndamage/MGDS\ndamageable\ndamaged/U\ndamages/M\ndamask/MDGS\ndame/SM\ndammed\ndamming\ndammit\ndamn/SBGMD\ndamnably\ndamnation/M\ndamned/T\ndamp/SPXZTGMDNRY\ndampen/ZGDR\ndampener/M\ndamper/M\ndampness/M\ndamsel/MS\ndamselfly/SM\ndamson/MS\ndance/MZGDRS\ndancer/M\ndancing/M\ndandelion/SM\ndander/M\ndandify/GDS\ndandle/GDS\ndandruff/M\ndandy/TRSM\ndang/SZGDR\ndanger/M\ndangerous/Y\ndangle/ZGDRS\ndangler/M\ndanish/MS\ndank/PTRY\ndankness/M\ndanseuse/MS\ndapper/TR\ndapple/MGDS\ndare/DRSMZG\ndaredevil/MS\ndaredevilry/M\ndarer/M\ndaresay\ndaring/MY\ndark/PXTMNRY\ndarken/ZGDR\ndarkener/M\ndarkie/S\ndarkness/M\ndarkroom/MS\ndarling/MS\ndarn/SZGMDR\ndarned/TR\ndarner/M\ndart/SZGMDR\ndartboard/MS\ndarter/M\ndash/ZGMDRS\ndashboard/SM\ndasher/M\ndashiki/MS\ndashing/Y\ndastard/MYS\ndastardliness/M\ndata\ndatabase/SM\ndataset's\ndatasets\ndatatype\ndate/DRSMZGV\ndatebook/S\ndated/U\ndateless\ndateline/MGDS\ndater/M\ndateset\ndative/MS\ndatum/M\ndaub/SZGMDR\ndauber/M\ndaughter/SMY\ndaunt/GDS\ndaunting/Y\ndauntless/YP\ndauntlessness/M\ndauphin/MS\ndavenport/MS\ndavit/MS\ndawdle/ZGDRS\ndawdler/M\ndawn/SGMD\nday/SM\ndaybed/MS\ndaybreak/M\ndaycare/M\ndaydream/MDRZGS\ndaydreamer/M\ndaylight/MS\ndaylights/M\ndaylong\ndaytime/M\ndaze/DSMG\ndazed/Y\ndazzle/MZGDRS\ndazzler/M\ndazzling/Y\ndb\ndbl\ndc\ndd/SDG\ndded/K\ndding/K\ndeacon/MS\ndeaconess/MS\ndead/XTMNRY\ndeadbeat/MS\ndeadbolt/SM\ndeaden/GD\ndeadhead/SDG\ndeadline/SM\ndeadliness/M\ndeadlock/GSMD\ndeadly/TPR\ndeadpan/MS\ndeadpanned\ndeadpanning\ndeadwood/M\ndeaf/PXTNR\ndeafen/GD\ndeafening/Y\ndeafness/M\ndeal/SJZGMR\ndealer/M\ndealership/SM\ndealing/M\ndealt\ndean/M\ndeanery/SM\ndeanship/M\ndear/SPTMRYH\ndearest/S\ndearness/M\ndearth/M\ndearths\ndeary/SM\ndeath/MY\ndeathbed/SM\ndeathblow/MS\ndeathless/Y\ndeathlike\ndeaths\ndeathtrap/MS\ndeathwatch/MS\ndeaves\ndeb/SM\ndebacle/MS\ndebarkation/M\ndebarment/M\ndebate/BMZR\ndebater/M\ndebating/M\ndebauch/MDSG\ndebauchee/MS\ndebauchery/SM\ndebenture/MS\ndebilitate/DSGN\ndebilitation/M\ndebility/SM\ndebit/D\ndebonair/PY\ndebonairness/M\ndebouch/GDS\ndebridement\ndebris/M\ndebt/SM\ndebtor/MS\ndebugger/S\ndebut/GMD\ndebutante/SM\ndecade/MS\ndecadence/M\ndecadency/M\ndecadent/MYS\ndecaf/MS\ndecaffeinate/DSG\ndecagon/MS\ndecal/MS\ndecampment/M\ndecapitate/XGNDS\ndecapitator/MS\ndecathlete/S\ndecathlon/SM\ndecay/GD\ndeceased/M\ndecedent/MS\ndeceit/MS\ndeceitful/YP\ndeceitfulness/M\ndeceive/UGDS\ndeceiver/MS\ndeceiving/Y\ndecelerate/GNDS\ndeceleration/M\ndecelerator/SM\ndecency/ISM\ndecennial/SM\ndecent/IY\ndeception/MS\ndeceptive/YP\ndeceptiveness/M\ndecibel/MS\ndecidable/U\ndecide/BZGDRS\ndecided/Y\ndeciduous\ndeciliter/MS\ndecimal/SM\ndecimalization\ndecimate/DSGN\ndecimation/M\ndecimeter/MS\ndecipherable/UI\ndecision/IM\ndecisions\ndecisive/IPY\ndecisiveness/IM\ndeck/SGMD\ndeckchair/S\ndeckhand/SM\ndeckle/S\ndeclamation/MS\ndeclamatory\ndeclaration/MS\ndeclarative\ndeclaratory\ndeclare/DRSZGB\ndeclared/U\ndeclarer/M\ndeclension/SM\ndeclination/M\ndecline/DRSMZG\ndecliner/M\ndeclivity/SM\ndecoherence\ndecolletage/SM\ndecollete\ndecongestant/MS\ndeconstructionism\ndecor/MS\ndecorate/AGNVDS\ndecorating/M\ndecoration/AM\ndecorations\ndecorative/Y\ndecorator/MS\ndecorous/IY\ndecorousness/M\ndecorum/M\ndecoupage/DSMG\ndecoy/GMDS\ndecreasing/Y\ndecree/MDS\ndecreeing\ndecrement/GDS\ndecrepit\ndecrepitude/M\ndecriminalization/M\ndecry/GDS\ndecryption\ndedicate/AGDS\ndedication/SM\ndedicator/SM\ndedicatory\ndeduce/GDS\ndeducible\ndeduct/GVD\ndeductible/SM\ndeduction/SM\ndeductive/Y\ndeed/GD\ndeejay/MS\ndeem/ASGD\ndeep/SPXTMNRY\ndeepen/GD\ndeepness/M\ndeer/M\ndeerskin/M\ndeerstalker/S\ndef/Z\ndefacement/M\ndefacer/SM\ndefalcate/DSXGN\ndefalcation/M\ndefamation/M\ndefamatory\ndefame/ZGDRS\ndefamer/M\ndefaulter/SM\ndefeat/MDRZGS\ndefeated/U\ndefeater/M\ndefeatism/M\ndefeatist/MS\ndefecate/GNDS\ndefecation/M\ndefect/MDGVS\ndefection/MS\ndefective/MPYS\ndefectiveness/M\ndefector/MS\ndefendant/SM\ndefended/U\ndefenestration/S\ndefense/DSMGV\ndefenseless/YP\ndefenselessness/M\ndefensible/I\ndefensibly/I\ndefensive/MYP\ndefensiveness/M\ndeference/M\ndeferential/Y\ndeferral/MS\ndeferred\ndeferring\ndeffer\ndeffest\ndefiant/Y\ndefibrillation\ndefibrillator/S\ndeficiency/SM\ndeficient\ndeficit/SM\ndefilement/M\ndefinable/IU\ndefine/AGDS\ndefined/U\ndefiner/MS\ndefinite/IYVP\ndefiniteness/IM\ndefinition/AM\ndefinitions\ndefinitive/Y\ndeflate/GNDS\ndeflation/M\ndeflationary\ndeflect/DGVS\ndeflection/MS\ndeflector/SM\ndefogger/SM\ndefoliant/SM\ndefoliate/DSGN\ndefoliation/M\ndefoliator/MS\ndeformity/SM\ndefraud/DRZGS\ndefrauder/M\ndefrayal/M\ndefrock/DG\ndefroster/MS\ndeft/PTRY\ndeftness/M\ndefunct\ndefy/GDS\ndeg\ndegeneracy/M\ndegenerate/MV\ndegrade/B\ndegree/MS\ndehydrator/SM\ndehydrogenase\ndeicer/MS\ndeification/M\ndeify/NGDS\ndeign/GDS\ndeist/MS\ndeistic\ndeity/SM\ndeject/GDS\ndejected/Y\ndejection/M\ndelay/ZDR\ndelectable\ndelectably\ndelectation/M\ndelegate/GD\ndelete/XGNDS\ndeleterious\ndeletion/M\ndelft/M\ndelftware/M\ndeli/SM\ndeliberate/XYVP\ndeliberateness/M\ndelicacy/ISM\ndelicate/IY\ndelicateness/M\ndelicatessen/SM\ndelicious/PY\ndeliciousness/M\ndelighted/Y\ndelightful/Y\ndeliminator\ndelineate/GNXDS\ndelineation/M\ndelinquency/SM\ndelinquent/SMY\ndeliquesce/DSG\ndeliquescent\ndelirious/YP\ndeliriousness/M\ndelirium/SM\ndeliver/ADGS\ndeliverable\ndeliverance/M\ndelivered/U\ndeliverer/SM\ndell/SM\ndelphinium/MS\ndelta/MS\ndelude/GDS\ndeluge/MGDS\ndelusion/MS\ndelusional\ndelusive/Y\ndeluxe\ndelve/ZGDRS\ndelver/M\ndemagogic\ndemagogically\ndemagogue/SM\ndemagoguery/M\ndemagogy/M\ndemand/GMDS\ndemanding/U\ndemarcate/DSGNX\ndemarcation/M\ndemean/GDS\ndemeanor/M\ndemented/Y\ndementia/M\ndemesne/MS\ndemigod/MS\ndemigoddess/MS\ndemijohn/SM\ndemimondaine/SM\ndemimonde/M\ndemise/MGDS\ndemitasse/MS\ndemo/GMD\ndemocracy/SM\ndemocrat/MS\ndemocratic/U\ndemocratically\ndemocratization/M\ndemocratize/GDS\ndemode\ndemographer/SM\ndemographic/SM\ndemographically\ndemographics/M\ndemography/M\ndemolish/DSG\ndemolition/MS\ndemon/MS\ndemonetization/M\ndemoniac\ndemoniacal/Y\ndemonic\ndemonically\ndemonize/GDS\ndemonology/SM\ndemonstrability\ndemonstrable/I\ndemonstrably\ndemonstrate/XGNVDS\ndemonstration/M\ndemonstrative/MYSP\ndemonstrativeness/M\ndemonstrator/MS\ndemote/GD\ndemotic\ndemount\ndemulcent/SM\ndemur/TMRS\ndemure/PY\ndemureness/M\ndemurral/SM\ndemurred\ndemurrer/SM\ndemurring\nden/M\ndenationalization\ndenaturation\ndenature/DG\ndendrite/SM\ndengue/M\ndeniability\ndeniable/U\ndenial/MS\ndenier/M\ndenigrate/DSGN\ndenigration/M\ndenim/MS\ndenitrification\ndenizen/MS\ndenominational\ndenotative\ndenouement/MS\ndenounce/LDSG\ndenouncement/SM\ndense/PYTR\ndenseness/M\ndensity/SM\ndent/ISGMD\ndental/Y\ndentifrice/SM\ndentin/M\ndentist/MS\ndentistry/M\ndentition/M\ndenture/IMS\ndenuclearize/GDS\ndenudation/M\ndenude/GDS\ndenunciation/SM\ndeny/ZGDRS\ndeodorant/SM\ndeodorization/M\ndeodorize/DRSZG\ndeodorizer/M\ndeparted/M\ndepartment/MS\ndepartmental/Y\ndepartmentalization/M\ndepartmentalize/GDS\ndeparture/SM\ndependability/M\ndependable/U\ndependably\ndependence/IM\ndependency/SM\ndependent/IMYS\ndepict/GDS\ndepiction/MS\ndepilatory/SM\ndeplete/GNDS\ndepletion/M\ndeplorably\ndeplore/BGDS\ndeploy/ALGDS\ndeployment/AM\ndeployments\ndeponent/MS\ndeportation/MS\ndeportee/MS\ndeportment/M\ndeposit/AGMDS\ndepositor/MS\ndepository/SM\ndeprave/GDS\ndepravity/SM\ndeprecate/GNDS\ndeprecating/Y\ndeprecation/M\ndeprecatory\ndepreciate/DSGN\ndepreciation/M\ndepredation/SM\ndepressant/SM\ndepressing/Y\ndepression/SM\ndepressive/SM\ndepressor/MS\ndepressurization\ndeprive/GDS\ndeprogramming\ndepth/M\ndepths\ndeputation/MS\ndepute/DSG\ndeputize/DSG\ndeputy/SM\nderailleur/SM\nderailment/SM\nderangement/M\nderby/SM\nderelict/MS\ndereliction/M\nderide/GDS\nderision/M\nderisive/PY\nderisiveness/M\nderisory\nderivation/MS\nderivative/MS\nderive/B\ndermal\ndermatitis/M\ndermatological\ndermatologist/SM\ndermatology/M\ndermis/M\nderogate/DSGN\nderogation/M\nderogatorily\nderogatory\nderrick/SM\nderriere/SM\nderringer/SM\nderv\ndervish/MS\ndesalinate/GNDS\ndesalination/M\ndesalinization/M\ndesalinize/GDS\ndescant/M\ndescend/FGDS\ndescendant/MS\ndescender\ndescribable/I\ndescribe/BZGDR\ndescriber/M\ndescription/SM\ndescriptive/PY\ndescriptiveness/M\ndescriptor/S\ndescry/GDS\ndesecrate/DSGN\ndesecration/M\ndeselection\ndesert/SDRZGM\ndeserter/M\ndesertification\ndesertion/SM\ndeserved/UY\ndeserving/U\ndesiccant/SM\ndesiccate/DSGN\ndesiccation/M\ndesiccator/SM\ndesiderata\ndesideratum/M\ndesign/ASDG\ndesignate/DSGNX\ndesignation/M\ndesirability/UM\ndesirableness/M\ndesirably/U\ndesire/B\ndesired/U\ndesirous\ndesist/SDG\ndesk/SM\ndeskill/G\ndesktop/SM\ndesolate/PDSYGN\ndesolateness/M\ndesolation/M\ndespair/SMDG\ndespairing/Y\ndesperado/M\ndesperadoes\ndesperate/YNP\ndesperateness/M\ndesperation/M\ndespicable\ndespicably\ndespise/DSG\ndespite\ndespoilment/M\ndespondence/M\ndespondency/M\ndespondent/Y\ndespotic\ndespotically\ndespotism/M\ndessert/SM\ndessertspoon/S\ndessertspoonful/S\ndestination/SM\ndestine/DSG\ndestiny/SM\ndestitute/N\ndestitution/M\ndestroy/SZGDR\ndestroyer/M\ndestruct/GVMDS\ndestructibility/IM\ndestructible/I\ndestruction/M\ndestructive/PY\ndestructiveness/M\ndesuetude/M\ndesultorily\ndesultory\ndetach/BLGDS\ndetachment/MS\ndetain/LGDS\ndetainee/MS\ndetainment/M\ndetect/SDGVB\ndetectable/U\ndetected/U\ndetection/M\ndetective/SM\ndetector/SM\ndetente/SMNX\ndetention/M\ndeter/SL\ndetergent/SM\ndeteriorate/DSGN\ndeterioration/M\ndeterment/M\ndeterminable/I\ndeterminant/SM\ndeterminate\ndetermine/AGDS\ndetermined/U\ndeterminedly\ndeterminer/SM\ndeterminism/M\ndeterministic\ndeterministically\ndeterred/U\ndeterrence/M\ndeterrent/MS\ndeterring\ndetestably\ndetestation/M\ndethrone/DSLG\ndethronement/M\ndetonate/GNDSX\ndetonation/M\ndetonator/SM\ndetox/MDSG\ndetoxification/M\ndetoxify/DSGN\ndetract/GD\ndetriment/SM\ndetrimental/Y\ndetritus/M\ndeuce/SM\ndeuterium/M\ndevastate/GNDS\ndevastating/Y\ndevastation/M\ndevastator/MS\ndevelop/ASGDL\ndeveloped/U\ndeveloper/SM\ndevelopment/ASM\ndevelopmental/Y\ndeviance/M\ndeviancy/M\ndeviant/SM\ndeviate/DSMGNX\ndeviating/U\ndeviation/M\ndevil/SMDGL\ndevilish/YP\ndevilishness/M\ndevilment/M\ndevilry/SM\ndeviltry/SM\ndevious/YP\ndeviousness/M\ndevoid\ndevolution/M\ndevolve/DSG\ndevoted/Y\ndevotee/SM\ndevotion/MS\ndevotional/SM\ndevour/SDG\ndevout/PRYT\ndevoutness/M\ndew/M\ndewberry/SM\ndewclaw/SM\ndewdrop/SM\ndewiness/M\ndewlap/SM\ndewy/RTP\ndexterity/M\ndexterous/YP\ndexterousness/M\ndextrose/M\ndharma\ndhoti/SM\ndhow/MS\ndiabetes/M\ndiabetic/SM\ndiabolic\ndiabolical/Y\ndiacritic/MS\ndiacritical\ndiadem/SM\ndiaereses\ndiaeresis/M\ndiagnose/DSG\ndiagnosis/M\ndiagnostic/S\ndiagnostically\ndiagnostician/SM\ndiagnostics/M\ndiagonal/SMY\ndiagram/SM\ndiagrammatic\ndiagrammatically\ndiagrammed\ndiagramming\ndial/AMDGS\ndialect/SM\ndialectal\ndialectic/SM\ndialectical\ndialectics/M\ndialing/S\ndialog\ndialogue/SM\ndialyses\ndialysis/M\ndialyzes\ndiam\ndiamagnetic\ndiamagnetism\ndiamante\ndiameter/SM\ndiametric\ndiametrical/Y\ndiamond/SM\ndiamondback/MS\ndiapason/SM\ndiaper/SMDG\ndiaphanous\ndiaphragm/SM\ndiaphragmatic\ndiarist/SM\ndiarrhea/M\ndiary/SM\ndiaspora/SM\ndiastase/M\ndiastole/M\ndiastolic\ndiathermy/M\ndiatom/SM\ndiatomic\ndiatonic\ndiatribe/SM\ndiazepam\ndibble/DSMG\ndibs/M\ndice/GDS\ndices/I\ndicey\ndichotomous\ndichotomy/SM\ndicier\ndiciest\ndick/MRXZS\ndicker/DG\ndickey/SM\ndickhead/S\ndickybird/S\ndicotyledon/MS\ndicotyledonous\ndict\ndicta\ndictate/DSMGNX\ndictation/M\ndictator/SM\ndictatorial/Y\ndictatorship/SM\ndiction/M\ndictionary/SM\ndictum/M\ndid/AU\ndidactic\ndidactically\ndiddle/DRSZG\ndiddler/M\ndiddly\ndiddlysquat\ndiddums\ndidgeridoo/S\ndidn't\ndido/M\ndidoes\ndidst\ndie/DSM\ndielectric/MS\ndiereses\ndieresis/M\ndiesel/SMDG\ndiet/MDRZGS\ndietary/SM\ndieter/M\ndietetic/S\ndietetics/M\ndietitian/MS\ndiff/DRZGS\ndiffer/DG\ndifference/IM\ndifferences\ndifferent/IY\ndifferentiable\ndifferential/SM\ndifferentiate/DSGN\ndifferentiated/U\ndifferentiation/M\ndifficult/Y\ndifficulty/SM\ndiffidence/M\ndiffident/Y\ndiffract/GSD\ndiffraction/M\ndiffuse/DSYGNVP\ndiffuseness/M\ndiffusion/M\ndiffusivity\ndig/SM\ndigerati/M\ndigest/SMDGV\ndigested/U\ndigestibility/M\ndigestible/I\ndigestion/IM\ndigestions\ndigestive/S\ndigger/SM\ndigging/S\ndiggings/M\ndigicam/S\ndigit/SM\ndigital/Y\ndigitalis/M\ndigitization\ndigitize/GDS\ndignified/U\ndignify/DSG\ndignitary/SM\ndignity/ISM\ndigraph/M\ndigraphs\ndigress/GVDS\ndigression/MS\ndike/MGDS\ndiktat/S\ndilapidated\ndilapidation/M\ndilatation/M\ndilate/DSGN\ndilation/M\ndilator/SM\ndilatory\ndildo/S\ndilemma/MS\ndilettante/SM\ndilettantish\ndilettantism/M\ndiligence/M\ndiligent/Y\ndill/MS\ndilly/SM\ndillydally/DSG\ndiluent\ndilute/DSGNX\ndiluted/U\ndilution/M\ndim/PSRY\ndime/MS\ndimension/SM\ndimensional\ndimensionless\ndiminish/GDS\ndiminished/U\ndiminuendo/SM\ndiminution/SM\ndiminutive/SM\ndimity/M\ndimmed/U\ndimmer/SM\ndimmest\ndimming\ndimness/M\ndimple/DSMG\ndimply\ndimwit/SM\ndimwitted\ndin/ZGSMDR\ndinar/SM\ndine/S\ndiner/M\ndinette/MS\nding/MDG\ndingbat/MS\ndinghy/SM\ndingily\ndinginess/M\ndingle/SM\ndingo/M\ndingoes\ndingus/MS\ndingy/RPT\ndink/R\ndinky/RSMT\ndinned\ndinner/SMDG\ndinnertime/M\ndinnerware/M\ndinning\ndinosaur/SM\ndint/M\ndiocesan/MS\ndiocese/MS\ndiode/SM\ndiorama/SM\ndioxide/SM\ndioxin/SM\ndip/SM\ndiphtheria/M\ndiphthong/SM\ndiploid/SM\ndiploma/SM\ndiplomacy/M\ndiplomat/MS\ndiplomata\ndiplomatic/U\ndiplomatically\ndiplomatist/MS\ndiplopia\ndipole/SM\ndipped\ndipper/SM\ndipping\ndippy/RT\ndipso/S\ndipsomania/M\ndipsomaniac/MS\ndipstick/SM\ndipterous\ndiptych/M\ndiptychs\ndire/YTR\ndirect/ASDGVT\ndirecter\ndirection/IM\ndirectional\ndirectionless\ndirections\ndirective/SM\ndirectly\ndirectness/IM\ndirector/MS\ndirectorate/SM\ndirectorial\ndirectorship/SM\ndirectory/SM\ndireful\ndirge/SM\ndirigible/MS\ndirk/MS\ndirndl/SM\ndirt/M\ndirtball/S\ndirtily\ndirtiness/M\ndirty/DRSTGP\ndis/M\ndisable/DSGL\ndisablement/M\ndisambiguate/N\ndisappointing/Y\ndisarming/Y\ndisassembly\ndisastrous/Y\ndisbandment/M\ndisbarment/M\ndisbelieving/Y\ndisbursal/M\ndisburse/DSGL\ndisbursement/MS\ndisc/M\ndiscern/LSDG\ndiscernible/I\ndiscernibly\ndiscerning/Y\ndiscernment/M\ndischarged/U\ndisciple/SM\ndiscipleship/M\ndisciplinarian/SM\ndisciplinary\ndiscipline/DSMG\ndisciplined/U\ndisclose/DSG\ndisclosed/U\ndisco/MG\ndiscography/SM\ndiscoloration/S\ndiscombobulate/DSGN\ndiscombobulation/M\ndiscomfit/DG\ndiscomfiture/M\ndiscommode/DG\ndisconcerting/Y\ndisconnected/PY\ndisconnectedness/M\ndisconsolate/Y\ndiscordance/M\ndiscordant/Y\ndiscotheque/SM\ndiscourage/LGDS\ndiscouragement/SM\ndiscouraging/Y\ndiscover/ASDG\ndiscovered/U\ndiscoverer/MS\ndiscovery/ASM\ndiscreet/PRYT\ndiscreetness/M\ndiscrepancy/SM\ndiscrepant\ndiscrete/PYN\ndiscreteness/M\ndiscretion/IM\ndiscretionary\ndiscriminant\ndiscriminate/GNDS\ndiscriminating/U\ndiscrimination/M\ndiscriminator/MS\ndiscriminatory\ndiscursiveness/M\ndiscus/MS\ndiscussant/SM\ndiscussion/SM\ndisdain/SMDG\ndisdainful/Y\ndisembowel/SDLG\ndisembowelment/M\ndisfigurement/SM\ndisfranchisement/M\ndisgorgement/M\ndisgruntle/LGDS\ndisgruntlement/M\ndisguise/GD\ndisguised/U\ndisgusted/Y\ndisgusting/Y\ndish/MDSG\ndishabille/M\ndisharmonious\ndishcloth/M\ndishcloths\ndisheartening/Y\ndishevel/DGLS\ndishevelment/M\ndishpan/SM\ndishrag/SM\ndishtowel/MS\ndishware/M\ndishwasher/MS\ndishwater/M\ndishy\ndisillusion/GLD\ndisillusionment/M\ndisinfectant/MS\ndisinfection/M\ndisinterested/PY\ndisinterestedness/M\ndisjointed/YP\ndisjointedness/M\ndisjunctive\ndisjuncture\ndisk/MS\ndiskette/MS\ndislodge/GDS\ndismal/Y\ndismantlement/M\ndismay/SMDG\ndismayed/U\ndismember/LGD\ndismemberment/M\ndismissive/Y\ndisorder/Y\ndisorganization/M\ndisparage/DSGL\ndisparagement/M\ndisparaging/Y\ndisparate/Y\ndispatcher/MS\ndispel/S\ndispelled\ndispelling\ndispensary/SM\ndispensation/MS\ndispense/BZGDRS\ndispenser/M\ndispersal/M\ndisperse/GNDS\ndispersion/M\ndispirit/GDS\ndispleasure/M\ndisposable/SM\ndisposal/SM\ndisposed/I\ndisposition/ISM\ndispossession/M\ndisproof/SM\ndisproportional\ndisprove/B\ndisputable/I\ndisputably/I\ndisputant/MS\ndisputation/SM\ndisputatious/Y\ndispute/DRSMZGB\ndisputed/U\ndisputer/M\ndisquiet/GSMD\ndisquisition/MS\ndisregardful\ndisrepair/M\ndisrepute/MB\ndisrupt/GVSD\ndisruption/SM\ndisruptive/Y\ndissect/SDG\ndissed\ndissemblance/M\ndissemble/ZGDRS\ndissembler/M\ndisseminate/GNDS\ndissemination/M\ndissension/SM\ndissent/SMDRZG\ndissenter/M\ndissertation/SM\ndissidence/M\ndissident/MS\ndissimilar\ndissimilitude/S\ndissing\ndissipate/GNDS\ndissipation/M\ndissociate/GNVDS\ndissociation/M\ndissoluble/I\ndissolute/YNP\ndissoluteness/M\ndissolve/AGDS\ndissolved/U\ndissonance/SM\ndissonant\ndissuade/GDS\ndissuasive\ndist\ndistaff/SM\ndistal/Y\ndistance/DSMG\ndistant/Y\ndistaste/SM\ndistemper/M\ndistention/SM\ndistillate/SMNX\ndistillation/M\ndistillery/SM\ndistinct/IYTVP\ndistincter\ndistinction/SM\ndistinctive/YP\ndistinctiveness/M\ndistinctness/IM\ndistinguish/GDSB\ndistinguishable/I\ndistinguished/U\ndistort/GDR\ndistortion/MS\ndistract/DG\ndistracted/Y\ndistraction/S\ndistrait\ndistraught\ndistress/DG\ndistressful\ndistressing/Y\ndistribute/AGNVDS\ndistributed/U\ndistribution/AM\ndistributional\ndistributions\ndistributive/Y\ndistributor's\ndistributor/AS\ndistributorship/S\ndistrict's\ndistrict/AS\ndisturb/ZGSDR\ndisturbance/SM\ndisturbed/U\ndisturber/M\ndisturbing/Y\ndisunion/M\ndisyllabic\nditch/MDSG\ndither/SMDRZG\nditherer/M\nditransitive\nditsy\nditto/SMDG\nditty/SM\nditz/MS\ndiuretic/MS\ndiurnal/Y\ndiv\ndiva/MS\ndivalent\ndivan/SM\ndive/MZTGDRS\ndiver/M\ndiverge/DSG\ndivergence/MS\ndivergent\ndiverse/XYNP\ndiverseness/M\ndiversification/M\ndiversify/GNDS\ndiversion/M\ndiversionary\ndiversity/SM\ndivert/SDG\ndiverticulitis/M\ndivest/SLDG\ndivestiture/MS\ndivestment/M\ndivide/DRSMZGB\ndivided/U\ndividend/MS\ndivider/M\ndivination/M\ndivine/DRSMYZTG\ndiviner/M\ndiving/M\ndivinity/SM\ndivisibility/IM\ndivisible/I\ndivision/MS\ndivisional\ndivisive/PY\ndivisiveness/M\ndivisor/SM\ndivorce/DSLMG\ndivorcee/MS\ndivorcement/MS\ndivot/SM\ndivulge/GDS\ndivvy/DSMG\ndixieland/M\ndizzily\ndizziness/M\ndizzy/DRSPTG\ndjellaba/MS\ndo/SJMRHZG\ndoable\ndob/S\ndobbed\ndobbin/SM\ndobbing\ndoberman/MS\ndobro\ndoc/SM\ndocent/SM\ndocile/Y\ndocility/M\ndock/MDRZGS\ndocket/SMDG\ndockland/S\ndockside\ndockworker/MS\ndockyard/MS\ndoctor/SMDG\ndoctoral\ndoctorate/MS\ndoctrinaire/MS\ndoctrinal\ndoctrine/MS\ndocudrama/SM\ndocument/GMDS\ndocumentary/SM\ndocumentation/SM\ndocumented/U\ndodder/SMDG\ndoddery\ndoddle\ndodge/DRSMZG\ndodgem/S\ndodger/M\ndodgy/RT\ndodo/MS\ndoe/SM\ndoer/M\ndoes/AU\ndoeskin/MS\ndoesn't\ndoff/DGS\ndog/SM\ndogcart/SM\ndogcatcher/SM\ndoge/MS\ndogeared\ndogfight/SM\ndogfish/MS\ndogged/PY\ndoggedness/M\ndoggerel/M\ndogging\ndoggone/TGRS\ndoggy/RSMT\ndoghouse/SM\ndogie/SM\ndogleg/SM\ndoglegged\ndoglegging\ndoglike\ndogma/SM\ndogmatic\ndogmatically\ndogmatism/M\ndogmatist/SM\ndognapper\ndogsbody/S\ndogsled/S\ndogtrot/MS\ndogtrotted\ndogtrotting\ndogwood/MS\ndoily/SM\ndoing/USM\ndoldrums/M\ndole's\ndole/FGDS\ndoleful/YP\ndolefulness/M\ndoll/MDGS\ndollar/SM\ndollhouse/SM\ndollop/SGMD\ndolly/SM\ndolmen/SM\ndolomite/M\ndolor/M\ndolorous/Y\ndolphin/MS\ndolt/MS\ndoltish/YP\ndoltishness/M\ndomain/SM\ndome/MGDS\ndomestic/SM\ndomestically\ndomesticate/DSGN\ndomesticated/U\ndomestication/M\ndomesticity/M\ndomicile/DSMG\ndomiciliary\ndominance/M\ndominant/SMY\ndominate/DSGN\ndomination/M\ndominatrices\ndominatrix/M\ndomineer/SGD\ndomineering/Y\ndominion/SM\ndomino/M\ndominoes\ndon't\ndon/SM\ndona/MS\ndonate/DSXGN\ndonation/M\ndone/FAU\ndong/MDGS\ndongle/SM\ndonkey/SM\ndonned\ndonning\ndonnish\ndonnybrook/MS\ndonor/SM\ndonuts\ndoodad/SM\ndoodah\ndoodahs\ndoodle/DRSMZG\ndoodlebug/SM\ndoodler/M\ndoohickey/SM\ndoolally\ndoom/MDGS\ndoomsayer/MS\ndoomsday/M\ndoomster/S\ndoor's\ndoor/IS\ndoorbell/MS\ndoorjamb/S\ndoorkeeper/MS\ndoorknob/MS\ndoorknocker/S\ndoorman/M\ndoormat/SM\ndoormen\ndoorplate/SM\ndoorpost/S\ndoorstep/MS\ndoorstepped\ndoorstepping\ndoorstop/MS\ndoorway/SM\ndooryard/MS\ndopa/M\ndopamine\ndope/MZGDRS\ndoper/M\ndopey\ndopier\ndopiest\ndopiness/M\ndoping/M\ndoppelganger/S\ndork/MS\ndorky/RT\ndorm/MRZS\ndormancy/M\ndormant\ndormer/M\ndormice\ndormitory/SM\ndormouse/M\ndorsal/Y\ndory/SM\ndosage/SM\ndose/MGDS\ndosh\ndosimeter/SM\ndoss/DRSZG\ndosshouse/S\ndossier/MS\ndost\ndot/ZGSMDR\ndotage/M\ndotard/SM\ndotcom/SM\ndote/S\ndoter/M\ndoting/Y\ndotted\ndotting\ndotty/RT\ndouble's\ndouble/ADSG\ndoubleheader/MS\ndoublespeak/M\ndoublet/MS\ndoubloon/SM\ndoubly\ndoubt/SMDRZG\ndoubter/M\ndoubtful/PY\ndoubtfulness/M\ndoubting/Y\ndoubtless/Y\ndouche/DSMG\ndough/M\ndoughnut/SM\ndoughty/RT\ndoughy/TR\ndour/RYTP\ndourness/M\ndouse/DSG\ndove/MS\ndovecot/S\ndovecote/SM\ndovetail/MDSG\ndovish\ndowager/MS\ndowdily\ndowdiness/M\ndowdy/RSPT\ndowel/SMDG\ndower/SMDG\ndown/MDRZGS\ndownbeat/SM\ndowncast\ndowndraft/MS\ndowner/M\ndownfall/SMN\ndownfield\ndowngrade/DSMG\ndownhearted/PY\ndownheartedness/M\ndownhill/MS\ndownload/MDBSG\ndownmarket\ndownplay/DSG\ndownpour/MS\ndownrange\ndownright\ndownriver\ndownscale\ndownshift/SGD\ndownside/MS\ndownsize/GDS\ndownsizing/M\ndownspout/MS\ndownstage\ndownstairs/M\ndownstate/M\ndownstream\ndownswing/MS\ndowntempo\ndowntime/M\ndowntown/M\ndowntrend/MS\ndowntrodden\ndownturn/MS\ndownward/S\ndownwind\ndowny/RT\ndowry/SM\ndowse/DRSZG\ndowser/M\ndoxology/SM\ndoyen/SM\ndoyenne/MS\ndoz/XGDNS\ndoze/M\ndozen/MH\ndozily\ndozy/RTP\ndpi\ndpt\ndrab/MYSP\ndrabber\ndrabbest\ndrabness/M\ndrachma/MS\ndraconian\ndraft's\ndraft/ASDG\ndraftee/SM\ndrafter/SM\ndraftily\ndraftiness/M\ndrafting/M\ndraftsman/M\ndraftsmanship/M\ndraftsmen\ndraftswoman/M\ndraftswomen\ndrafty/RTP\ndrag/MS\ndragged\ndragging\ndraggy/TR\ndragnet/SM\ndragon/SM\ndragonfly/SM\ndragoon/SMDG\ndragster/S\ndrain/SMDRZG\ndrainage/M\ndrainboard/SM\ndrainer/M\ndrainpipe/MS\ndrake/SM\ndram/MS\ndrama/SM\ndramatic/S\ndramatically\ndramatics/M\ndramatist/SM\ndramatization/SM\ndramatize/DSG\ndrank\ndrape/DRSMZG\ndraper/M\ndrapery/SM\ndrastic\ndrastically\ndrat\ndratted\ndraughtboard/S\ndraw/MRZGSJ\ndrawback/MS\ndrawbridge/MS\ndrawer/M\ndrawing/M\ndrawl/SMDG\ndrawn/A\ndrawstring/MS\ndray/MS\ndread/SMDG\ndreadful/PY\ndreadfulness/M\ndreadlocks/M\ndreadnought/MS\ndream/SMDRZG\ndreamboat/MS\ndreamed/U\ndreamer/M\ndreamily\ndreaminess/M\ndreamland/M\ndreamless\ndreamlike\ndreamworld/SM\ndreamy/RPT\ndrear\ndrearily\ndreariness/M\ndreary/RPT\ndredge/DRSMZG\ndredger/M\ndregs/M\ndrench/GDS\ndress/AUGSDM\ndressage/M\ndresser/MS\ndressiness/M\ndressing/SM\ndressmaker/SM\ndressmaking/M\ndressy/TPR\ndrew/A\ndribble/MZGDRS\ndribbler/M\ndriblet/MS\ndrier/M\ndrift/SMDRZG\ndrifter/M\ndriftnet/S\ndriftwood/M\ndrill/SMDRZG\ndriller/M\ndrillmaster/SM\ndrink/SMRBJZG\ndrinkable/U\ndrinker/M\ndrip/MS\ndripped\ndripping/SM\ndrippy/TR\ndrive/RSMZGJ\ndrivel/SZGMDR\ndriveler/M\ndriven\ndriver/M\ndriveshaft/SM\ndriveway/MS\ndrizzle/MGDS\ndrizzly\ndrogue/SM\ndroid/S\ndroll/RPT\ndrollery/SM\ndrollness/M\ndrolly\ndromedary/SM\ndrone/DSMG\ndrool/SMDG\ndroop/GSMD\ndroopiness/M\ndroopy/TPR\ndrop/MS\ndropkick/MS\ndroplet/SM\ndropout/SM\ndropped\ndropper/SM\ndropping/S\ndroppings/M\ndropsical\ndropsy/M\ndross/M\ndrought/SM\ndrove/RSMZ\ndrover/M\ndrown/GSJD\ndrowning/M\ndrowse/MGDS\ndrowsily\ndrowsiness/M\ndrowsy/RTP\ndrub/S\ndrubbed\ndrubber/SM\ndrubbing/MS\ndrudge/MGDS\ndrudgery/M\ndrug/MS\ndrugged\ndruggie/SM\ndrugging\ndruggist/SM\ndruggy\ndrugstore/MS\ndruid/SM\ndruidism/M\ndrum/MS\ndrumbeat/SM\ndrumlin/SM\ndrummed\ndrummer/SM\ndrumming\ndrumstick/SM\ndrunk/STMNR\ndrunkard/MS\ndrunken/PY\ndrunkenness/M\ndrupe/SM\ndruthers/M\ndry/ZTGDRSMY\ndryad/SM\ndryer/SM\ndryness/M\ndrys\ndrywall/M\ndual\ndualism/M\nduality/M\ndub/SM\ndubbed\ndubber/SM\ndubbin/M\ndubbing\ndubiety/M\ndubious/YP\ndubiousness/M\nducal\nducat/SM\nduchess/MS\nduchy/SM\nduck/MDGS\nduckbill/SM\nduckboards\nduckling/SM\nduckpins/M\nduckweed/M\nducky/TRSM\nduct's/K\nduct/CKIFS\nductile\nductility/M\nducting\nductless\ndud/GSMD\ndude/MS\ndudgeon/M\ndue/SM\nduel/MDRJZGS\ndueler/M\nduelist/SM\nduenna/MS\nduet/MS\nduff/MDRZGS\nduffer/M\ndug\ndugout/MS\nduh\nduke/MS\ndukedom/SM\ndulcet\ndulcimer/MS\ndull/DRPTGS\ndullard/SM\ndullness/M\ndully\nduly/U\ndumb/RYPT\ndumbbell/SM\ndumbfound/SDG\ndumbness/M\ndumbo/S\ndumbstruck\ndumbwaiter/SM\ndumdum/MS\ndummy/SM\ndump/MDRZGS\ndumpiness/M\ndumpling/SM\ndumpsite/S\ndumpster/SM\ndumpy/PTR\ndun/SM\ndunce/SM\ndunderhead/MS\ndune/MS\ndung/MDGS\ndungaree/MS\ndungeon/SM\ndunghill/MS\ndunk/MDGS\ndunned\ndunner\ndunnest\ndunning\ndunno\nduo/SM\nduodecimal\nduodena\nduodenal\nduodenum/M\nduopoly/S\ndupe/MZGDRS\nduper/M\nduple\nduplex/MS\nduplicate's\nduplicate/AGNDS\nduplication/AM\nduplicator/MS\nduplicitous\nduplicity/M\ndurability/M\ndurable\ndurably\ndurance/M\nduration/M\nduress/M\nduring\ndurst\ndurum/M\ndusk/M\nduskiness/M\ndusky/RTP\ndust/MDRZGS\ndustbin/SM\ndustcart/S\nduster/M\ndustiness/M\ndustless\ndustman\ndustmen\ndustpan/SM\ndustsheet/S\ndusty/RTP\ndutch\nduteous/Y\ndutiable\ndutiful/YP\ndutifulness/M\nduty/SM\nduvet/SM\ndwarf/SGMD\ndwarfish\ndwarfism/M\ndweeb/SM\ndwell/SJZGR\ndweller/M\ndwelling/M\ndwelt/I\ndwindle/DSG\ndyadic\ndybbuk/SM\ndybbukim\ndye/DRSMZG\ndyeing/A\ndyer/M\ndyestuff/M\ndying/M\ndyke/MS\ndynamic/MS\ndynamical/Y\ndynamics/M\ndynamism/M\ndynamite/MZGDRS\ndynamiter/M\ndynamo/SM\ndynastic\ndynasty/SM\ndysentery/M\ndysfunction/MS\ndysfunctional\ndyslectic/SM\ndyslexia/M\ndyslexic/SM\ndyspepsia/M\ndyspeptic/MS\ndysphagia\ndysphoria\ndysphoric\ndysprosium/M\ndystonia\ndystopi\ndystopia\ndystopian\ndz\ne'en\ne'er\ne/FDST\neBay/M\neMusic/M\nea\neach\neager/PTRY\neagerness/M\neagle/MS\neaglet/MS\near/SMDY\nearache/SM\nearbud/SM\neardrum/SM\nearful/SM\nearl/MS\nearldom/SM\nearliness/M\nearlobe/SM\nearly/RTP\nearmark/SMDG\nearmuff/SM\nearn/DRZTGJS\nearned/U\nearner/M\nearnest/SMYP\nearnestness/M\nearnings/M\nearphone/MS\nearpiece/S\nearplug/SM\nearring/SM\nearshot/M\nearsplitting\nearth's\nearth/UDYG\nearthbound\nearthen\nearthenware/M\nearthiness/M\nearthling/MS\nearthly/RT\nearthquake/SM\nearths/U\nearthshaking\nearthward/S\nearthwork/MS\nearthworm/MS\nearthy/RTP\nearwax/M\nearwig/SM\nease/EDSM\neasel/SM\neasement/SM\neasily/U\neasiness/UM\neasing\neast/M\neastbound\neasterly/SM\neastern/ZR\neasterner/M\neasternmost\neastward/S\neasy/URTP\neasygoing\neat/ZGBSNR\neatable/SM\neaten/U\neater/M\neatery/SM\neave/MS\neavesdrop/S\neavesdropped\neavesdropper/SM\neavesdropping\nebb/SMDG\nebony/SM\nebullience/M\nebullient/Y\nebullition/M\neccentric/SM\neccentrically\neccentricity/SM\neccl\necclesial\necclesiastic/SM\necclesiastical/Y\nechelon/SM\nechidna\nechinoderm/SM\necho's\necho/ADG\nechoes/A\nechoic\necholocation/M\nechos\neclair/SM\neclat/M\neclectic/SM\neclectically\neclecticism/M\neclipse/DSMG\necliptic/M\neclogue/SM\necocide/M\necol\necologic\necological/Y\necologist/MS\necology/M\necon\neconometric/S\neconomic/S\neconomical/UY\neconomics/M\neconomist/SM\neconomize/DRSZG\neconomizer/M\neconomy/SM\necosystem/MS\necotourism/M\necotourist/MS\necru/M\necstasy/SM\necstatic\necstatically\necu/S\necumenical/Y\necumenicism/M\necumenism/M\neczema/M\ned/ACSM\nedamame\neddy/DSMG\nedelweiss/M\nedema/SM\nedge/MZGJDRS\nedger/M\nedgewise\nedgily\nedginess/M\nedging/M\nedgy/RTP\nedibility/M\nedible/SMP\nedibleness/M\nedict/SM\nedification/M\nedifice/SM\nedifier/M\nedify/DRSZGN\nedifying/U\nedit's\nedit/ADGS\neditable\nedited/U\nedition/MS\neditor/SM\neditorial/SMY\neditorialize/DSG\neditorship/M\neduc\neducability/M\neducable/I\neducate/ADSGNV\neducated/U\neducation/AM\neducational/Y\neducationalist/S\neducationist/S\neducations\neducator/MS\neduce/DSGB\nedutainment/M\neek\neel/SM\neerie/RT\neerily\neeriness/M\neff/GSD\nefface/DSLG\neffacement/M\neffect/SMDGV\neffective/IPY\neffectiveness/IM\neffectual/IY\neffectuate/DSG\neffeminacy/M\neffeminate/Y\neffendi/SM\nefferent\neffervesce/GDS\neffervescence/M\neffervescent/Y\neffete/YP\neffeteness/M\nefficacious/Y\nefficacy/IM\nefficiency/ISM\nefficient/IY\neffigy/SM\nefflorescence/M\nefflorescent\neffluence/M\neffluent/MS\neffluvia\neffluvium/M\nefflux\neffort/SM\neffortful\neffortless/YP\neffortlessness/M\neffrontery/M\neffulgence/M\neffulgent\neffuse/DSGNVX\neffusion/M\neffusive/YP\neffusiveness/M\negad\negalitarian/SM\negalitarianism/M\negg/GSMD\neggbeater/MS\neggcup/SM\negghead/SM\neggnog/M\neggplant/MS\neggshell/SM\neglantine/SM\nego/SM\negocentric/MS\negocentrically\negocentricity/M\negoism/M\negoist/SM\negoistic\negoistical/Y\negomania/M\negomaniac/MS\negotism/M\negotist/SM\negotistic\negotistical/Y\negregious/PY\negregiousness/M\negress/MS\negret/SM\neh\neider/SM\neiderdown/MS\neigenvalue/S\neigenvector/S\neight/SM\neighteen/MHS\neighteenth/M\neighteenths\neighth/M\neighths\neightieth/M\neightieths\neighty/SMH\neinsteinium/M\neisteddfod/S\neither\nejaculate/GNXDS\nejaculation/M\nejaculatory\neject/SDG\nejection/MS\nejector/SM\neke/DSG\nelaborate/YGNDSPX\nelaborateness/M\nelaboration/M\nelan/M\neland/SM\nelapse/DSG\nelastic/MS\nelastically\nelasticated\nelasticity/M\nelasticize/DSG\nelate/DSGN\nelated/Y\nelation/M\nelbow/SMDG\nelbowroom/M\nelder/SMY\nelderberry/SM\neldercare/M\neldest\neldritch\nelect's\nelect/ASDGV\nelectable\nelection/AMS\nelectioneer/DGS\nelective/MS\nelector/MS\nelectoral/Y\nelectorate/MS\nelectric/S\nelectrical/Y\nelectrician/MS\nelectricity/M\nelectrification/M\nelectrifier/M\nelectrify/ZGNDRS\nelectrocardiogram/MS\nelectrocardiograph/M\nelectrocardiographs\nelectrocardiography/M\nelectrocute/DSXGN\nelectrocution/M\nelectrode/SM\nelectrodynamics\nelectroencephalogram/MS\nelectroencephalograph/M\nelectroencephalographic\nelectroencephalographs\nelectroencephalography/M\nelectrologist/SM\nelectrolysis/M\nelectrolyte/MS\nelectrolytic\nelectromagnet/MS\nelectromagnetic\nelectromagnetically\nelectromagnetism/M\nelectromotive\nelectron/MS\nelectronic/S\nelectronica/M\nelectronically\nelectronics/M\nelectroplate/DSG\nelectroscope/SM\nelectroscopic\nelectroshock/M\nelectrostatic/S\nelectrostatics/M\nelectrotype/MS\nelectroweak\neleemosynary\nelegance/IM\nelegant/IY\nelegiac/MS\nelegiacal\nelegy/SM\nelem\nelement/MS\nelemental/Y\nelementary\nelephant/SM\nelephantiasis/M\nelephantine\nelev\nelevate/XDSGN\nelevation/M\nelevator/MS\neleven/SMH\nelevens/S\neleventh/M\nelevenths\nelf/M\nelfin\nelfish\nelicit/SDG\nelicitation/M\nelide/DSG\neligibility/IM\neligible\neliminate/XDSGN\nelimination/M\neliminator/S\nelision/MS\nelite/SM\nelitism/M\nelitist/MS\nelixir/SM\nelk/SM\nell/SM\nellipse/MS\nellipsis/M\nellipsoid/SM\nellipsoidal\nelliptic\nelliptical/Y\nelm/SM\nelocution/M\nelocutionary\nelocutionist/SM\nelodea/SM\nelongate/DSGNX\nelongation/M\nelope/DSGL\nelopement/MS\neloquence/M\neloquent/Y\nelse\nelsewhere\nelucidate/DSGNX\nelucidation/M\nelude/DSG\nelusive/YP\nelusiveness/M\nelver/SM\nelves\nelvish\nem's\nem/S\nemaciate/GNDS\nemaciation/M\nemail/SMDG\nemanate/XDSGN\nemanation/M\nemancipate/DSGN\nemancipation/M\nemancipator/MS\nemasculate/GNDS\nemasculation/M\nembalm/SZGDR\nembalmer/M\nembank/SLGD\nembankment/SM\nembargo/MDG\nembargoes\nembark/AEGDS\nembarkation/EM\nembarkations\nembarrass/GLDS\nembarrassed/U\nembarrassing/Y\nembarrassment/SM\nembassy/SM\nembattled\nembed/S\nembedded\nembedding\nembellish/LGDS\nembellishment/SM\nember/SM\nembezzle/ZGLDRS\nembezzlement/M\nembezzler/M\nembitter/GLDS\nembitterment/M\nemblazon/GDLS\nemblazonment/M\nemblem/SM\nemblematic\nemblematically\nembodiment/EM\nembody/AEGSD\nembolden/DGS\nembolism/MS\nembolization\nemboss/DRSZG\nembosser/M\nembouchure/M\nembower/SGD\nembrace/DSMG\nembraceable\nembrasure/MS\nembrocation/MS\nembroider/SDRZG\nembroiderer/M\nembroidery/SM\nembroil/DGLS\nembroilment/M\nembryo/SM\nembryological\nembryologist/MS\nembryology/M\nembryonic\nemcee/DSM\nemceeing\nemend/SDG\nemendation/MS\nemerald/MS\nemerge/ADSG\nemergence/AM\nemergency/SM\nemergent\nemerita\nemeritus\nemery/M\nemetic/SM\nemf/S\nemigrant/SM\nemigrate/DSXGN\nemigration/M\nemigre/SM\neminence/MS\neminent/Y\nemir/MS\nemirate/MS\nemissary/SM\nemission/SM\nemit/S\nemitted\nemitter/MS\nemitting\nemo/SM\nemoji/SM\nemollient/MS\nemolument/MS\nemote/XDSGNV\nemoticon/SM\nemotion/M\nemotional/UY\nemotionalism/M\nemotionalize/GDS\nemotionless\nemotive/Y\nempathetic\nempathically\nempathize/DSG\nempathy/M\nemperor/MS\nemphases\nemphasis/M\nemphasize/AGDS\nemphatic/U\nemphatically\nemphysema/M\nempire/SM\nempiric\nempirical/Y\nempiricism/M\nempiricist/SM\nemplacement/SM\nemploy's\nemploy/ADGLS\nemployable/U\nemployee/SM\nemployer/SM\nemployment/UAM\nemployments\nemporium/SM\nempower/SDGL\nempowerment/M\nempress/MS\nemptily\nemptiness/M\nempty/TGPDRSM\nempyrean/M\nemu/SM\nemulate/DSGNVX\nemulation/M\nemulator/SM\nemulsification/M\nemulsifier/M\nemulsify/NDRSZG\nemulsion/MS\nen/SM\nenable/DRSZG\nenabler/M\nenact/ASLDG\nenactment/ASM\nenamel/JSZGMDR\nenameler/M\nenamelware/M\nenamor/SGD\nenc\nencamp/LSGD\nencampment/MS\nencapsulate/XGNDS\nencapsulation/M\nencase/LDSG\nencasement/M\nencephalitic\nencephalitis/M\nenchain/DGS\nenchant/ELDGS\nenchanter/MS\nenchanting/Y\nenchantment/EM\nenchantments\nenchantress/MS\nenchilada/SM\nencipher/SGD\nencircle/DSGL\nencirclement/M\nencl\nenclave/MS\nenclose/GDS\nenclosed/U\nenclosure/SM\nencode/DRSZG\nencoder/M\nencomium/MS\nencompass/GDS\nencore/DSMG\nencounter/GSMD\nencourage/DSLG\nencouragement/SM\nencouraging/Y\nencroach/GLDS\nencroachment/SM\nencrust/DGS\nencrustation/SM\nencrypt/DGS\nencryption\nencumber/EGSD\nencumbered/U\nencumbrance/MS\nency\nencyclical/SM\nencyclopedia/MS\nencyclopedic\nencyst/LSGD\nencystment/M\nend/GVSJMD\nendanger/SGDL\nendangerment/M\nendear/SGLD\nendearing/Y\nendearment/SM\nendeavor/GSMD\nendemic/MS\nendemically\nendgame/S\nending/M\nendive/SM\nendless/PY\nendlessness/M\nendmost\nendocarditis\nendocrine/MS\nendocrinologist/MS\nendocrinology/M\nendogenous/Y\nendometrial\nendometriosis\nendometrium\nendorphin/MS\nendorse/LZGDRS\nendorsement/MS\nendorser/M\nendoscope/MS\nendoscopic\nendoscopy/M\nendothelial\nendothermic\nendotracheal\nendow/SDLG\nendowment/MS\nendpoint/SM\nendue/DSG\nendurable/U\nendurance/M\nendure/DSBG\nendways\nenema/SM\nenemy/SM\nenergetic\nenergetically\nenergize/ZGDRS\nenergizer/M\nenergy/SM\nenervate/GNDS\nenervation/M\nenfeeble/GDSL\nenfeeblement/M\nenfilade/DSMG\nenfold/SGD\nenforce/LZGDRS\nenforceable/U\nenforced/U\nenforcement/M\nenforcer/M\nenfranchise/EGDSL\nenfranchisement/EM\nengage/EADSG\nengagement/EMS\nengagingly\nengender/SGD\nengine/SM\nengineer/MDGS\nengineering/M\nengorge/LGDS\nengorgement/M\nengram/SM\nengrave/ZGJDRS\nengraver/M\nengraving/M\nengross/GLDS\nengrossment/M\nengulf/SLGD\nengulfment/M\nenhance/LZGDRS\nenhancement/SM\nenigma/SM\nenigmatic\nenigmatically\nenjambment/SM\nenjoin/SGD\nenjoy/GBLSD\nenjoyably\nenjoyment/SM\nenlarge/LZGDRS\nenlargeable\nenlargement/MS\nenlarger/M\nenlighten/SGLD\nenlightened/U\nenlightenment/M\nenlist/ADGSL\nenlistee/SM\nenlistment/AM\nenlistments\nenliven/SLDG\nenlivenment/M\nenmesh/DSGL\nenmeshment/M\nenmity/SM\nennoble/DSGL\nennoblement/M\nennui/M\nenormity/SM\nenormous/PY\nenormousness/M\nenough/M\nenplane/DSG\nenqueue/DS\nenquirer/S\nenquiringly\nenrage/GDS\nenrapture/DSG\nenrich/DSLG\nenrichment/M\nenroll/DLSG\nenrollment/MS\nensconce/DSG\nensemble/SM\nenshrine/GLDS\nenshrinement/M\nenshroud/DGS\nensign/MS\nensilage/M\nenslave/DSGL\nenslavement/M\nensnare/DSLG\nensnarement/M\nensue/DSG\nensure/ZGDRS\nensurer/M\nentail/DSGL\nentailment/M\nentangle/EDSLG\nentanglement/EM\nentanglements\nentente/SM\nenter/ASGD\nenteral\nenteric\nenteritis/M\nenterprise/MGS\nenterprising/Y\nentertain/ZGDRSL\nentertainer/M\nentertaining/MY\nentertainment/MS\nenthrall/GDSL\nenthrallment/M\nenthrone/GDSL\nenthronement/SM\nenthuse/DSG\nenthusiasm/MS\nenthusiast/MS\nenthusiastic/U\nenthusiastically\nentice/GDSL\nenticement/MS\nenticing/Y\nentire/Y\nentirety/M\nentitle/DSGL\nentitlement/SM\nentity/SM\nentomb/DSGL\nentombment/M\nentomological\nentomologist/MS\nentomology/M\nentourage/SM\nentr'acte\nentrails/M\nentrained\nentrance/LDSMG\nentrancement/M\nentrancing/Y\nentrant/SM\nentrap/LS\nentrapment/M\nentrapped\nentrapping\nentreat/GSD\nentreating/Y\nentreaty/SM\nentree/MS\nentrench/DSGL\nentrenchment/MS\nentrepreneur/SM\nentrepreneurial\nentrepreneurship\nentropy/M\nentrust/SGD\nentry/ASM\nentryphone/S\nentryway/MS\nentwine/DSG\nenumerable\nenumerate/DSGNX\nenumeration/M\nenumerator/SM\nenunciate/DSGN\nenunciation/M\nenuresis/M\nenvelop/SLDRZG\nenvelope/SM\nenveloper/M\nenvelopment/M\nenvenom/SDG\nenviable/U\nenviably\nenvious/PY\nenviousness/M\nenvironment/MS\nenvironmental/Y\nenvironmentalism/M\nenvironmentalist/SM\nenvirons/M\nenvisage/GDS\nenvision/DGS\nenvoy/SM\nenvy/DSMG\nenvying/Y\nenzymatic\nenzyme/SM\neolian\neon/SM\neosinophil/S\neosinophilic\nepaulet/SM\nepee/MS\nephedrine/M\nephemera/M\nephemeral/Y\nepic/MS\nepicenter/MS\nepicure/SM\nepicurean/MS\nepidemic/SM\nepidemically\nepidemiological\nepidemiologist/SM\nepidemiology/M\nepidermal\nepidermic\nepidermis/MS\nepidural/S\nepiglottis/MS\nepigram/SM\nepigrammatic\nepigraph/M\nepigraphs\nepigraphy/M\nepilepsy/M\nepileptic/SM\nepilogue/MS\nepinephrine/M\nepiphany/SM\nepiscopacy/M\nepiscopal\nepiscopate/M\nepisode/SM\nepisodic\nepisodically\nepistemic\nepistemological\nepistemology\nepistle/SM\nepistolary\nepitaph/M\nepitaphs\nepithelial\nepithelium/M\nepithet/SM\nepitome/SM\nepitomize/GDS\nepoch/M\nepochal\nepochs\neponymous\nepoxy/DSMG\nepsilon/SM\nequability/M\nequable\nequably\nequal/SMDYG\nequality/IM\nequalization/M\nequalize/ZGDRS\nequalizer/M\nequanimity/M\nequate/DSGNBX\nequation/M\nequator/SM\nequatorial\nequerry/SM\nequestrian/SM\nequestrianism/M\nequestrienne/SM\nequidistant/Y\nequilateral/SM\nequilibrium/EM\nequine/SM\nequinoctial\nequinox/MS\nequip/AS\nequipage/MS\nequipment/M\nequipoise/M\nequipped/UA\nequipping/A\nequitable/I\nequitably/I\nequitation/M\nequity/ISM\nequiv\nequivalence/MS\nequivalency/SM\nequivalent/MYS\nequivocal/UY\nequivocalness/M\nequivocate/GNXDS\nequivocation/M\nequivocator/SM\ner/C\nera/SM\neradicable/I\neradicate/DSGN\neradication/M\neradicator/MS\nerase/DRSBZG\neraser/M\nerasure/SM\nerbium/M\nere\nerect/PSGDY\nerectile\nerection/SM\nerectness/M\nerector/MS\nerelong\neremite/MS\nerg/SM\nergo\nergonomic/S\nergonomically\nergonomics/M\nergosterol/M\nergot/M\nermine/SM\nerode/DSG\nerodible\nerogenous\nerosion/M\nerosive\nerotic/S\nerotica/M\nerotically\neroticism/M\nerr/GSD\nerrand/SM\nerrant/I\nerrata/SM\nerratic\nerratically\nerratum/M\nerroneous/Y\nerror/SM\nersatz/MS\nerst\nerstwhile\neruct/SDG\neructation/SM\nerudite/YN\nerudition/M\nerupt/SDGV\neruption/MS\nerysipelas/M\nerythrocyte/SM\nerythromycin\nescalate/CDSGN\nescalation/CM\nescalations\nescalator/MS\nescallop/SGMD\nescalope/S\nescapade/MS\nescape/LMGDS\nescapee/MS\nescapement/SM\nescapism/M\nescapist/MS\nescapologist/S\nescapology\nescargot/MS\nescarole/MS\nescarpment/MS\neschatological\neschatology\neschew/SDG\nescort/SMDG\nescritoire/MS\nescrow/SM\nescudo/SM\nescutcheon/SM\nesophageal\nesophagi\nesophagus/M\nesoteric\nesoterically\nesp\nespadrille/MS\nespalier/MDSG\nespecial/Y\nespionage/M\nesplanade/MS\nespousal/M\nespouse/GDS\nespresso/MS\nesprit/M\nespy/DSG\nesquire/SM\nessay/SMDRZG\nessayer/M\nessayist/SM\nessence/SM\nessential/IMS\nessentially\nestablish/AESDGL\nestablishment/AEM\nestablishments\nestate/SM\nesteem/ESMDG\nester/SM\nestimable/I\nestimate/MGNDSX\nestimation/M\nestimator/SM\nestoppel\nestradiol\nestrange/LDSG\nestrangement/MS\nestrogen/MS\nestrous\nestrus/MS\nestuary/SM\neta/SM\netc\netch/DRSZGJ\netcher/M\netching/M\neternal/YP\neternalness/M\neternity/SM\nethane/M\nethanol/M\nether/M\nethereal/Y\nethic/SM\nethical/UY\nethics/M\nethmoid\nethnic/SM\nethnically\nethnicity/M\nethnocentric\nethnocentrism/M\nethnographer/S\nethnographic\nethnographically\nethnography\nethnological/Y\nethnologist/SM\nethnology/M\nethological\nethologist/MS\nethology/M\nethos/M\nethyl/M\nethylene/M\netiolated\netiologic\netiological\netiology/SM\netiquette/M\netude/SM\netymological/Y\netymologist/SM\netymology/SM\neucalypti\neucalyptus/MS\neuchre/DSMG\neuclidean\neugenic/S\neugenically\neugenicist/MS\neugenics/M\neukaryote/SM\neukaryotic\neulogist/MS\neulogistic\neulogize/ZGDRS\neulogizer/M\neulogy/SM\neunuch/M\neunuchs\neuphemism/SM\neuphemistic\neuphemistically\neuphonious/Y\neuphony/M\neuphoria/M\neuphoric\neuphorically\neureka\neuro/MS\neuropium/M\neutectic\neuthanasia/M\neuthanize/DSG\neuthenics/M\neutrophication\nevacuate/XDSGN\nevacuation/M\nevacuee/MS\nevade/DRSZG\nevader/M\nevaluate/AGNVDSX\nevaluation/AM\nevaluator/S\nevanescence/M\nevanescent\nevangelic\nevangelical/SMY\nevangelicalism/M\nevangelism/M\nevangelist/MS\nevangelistic\nevangelize/GDS\nevaporate/GNDS\nevaporation/M\nevaporator/SM\nevasion/SM\nevasive/YP\nevasiveness/M\neve/ASM\neven/MDRYTGSJP\nevenhanded/Y\nevening/M\nevenness/UM\nevensong/M\nevent/SM\neventful/UY\neventfulness/M\neventide/M\neventual/Y\neventuality/SM\neventuate/GDS\never\neverglade/SM\nevergreen/SM\neverlasting/MYS\nevermore\nevery\neverybody/M\neveryday\neveryone/M\neveryplace\neverything/M\neverywhere\nevict/SDG\neviction/MS\nevidence/MGDS\nevident/Y\nevil/MRYTSP\nevildoer/SM\nevildoing/M\neviller\nevillest\nevilness/M\nevince/DSG\neviscerate/DSGN\nevisceration/M\nevocation/MS\nevocative/Y\nevoke/DSG\nevolution/M\nevolutionary\nevolutionist/SM\nevolve/DSG\newe/RSMZ\newer/M\nex/MS\nexabyte/MS\nexacerbate/GNDS\nexacerbation/M\nexact/SPDRYTG\nexacting/Y\nexaction/M\nexactitude/M\nexactness/IM\nexaggerate/XDSGN\nexaggerated/Y\nexaggeration/M\nexaggerator/MS\nexalt/SDG\nexaltation/M\nexam/MS\nexamination/AMS\nexamine/AGDS\nexaminer/MS\nexample/MGDS\nexampled/U\nexasperate/DSGN\nexasperated/Y\nexasperating/Y\nexasperation/M\nexcavate/GNDSX\nexcavation/M\nexcavator/SM\nexceed/GSD\nexceeding/Y\nexcel/S\nexcelled\nexcellence/M\nexcellency/SM\nexcellent/Y\nexcelling\nexcelsior/M\nexcept/GSD\nexception/BSM\nexceptionable/U\nexceptional/UY\nexceptionalism\nexcerpt/MDGS\nexcess/VMS\nexcessive/Y\nexchange/DSMG\nexchangeable\nexchequer/SM\nexcise/XDSMGN\nexcision/M\nexcitability/M\nexcitably\nexcitation/M\nexcite/BDRSLZG\nexcited/Y\nexcitement/SM\nexciter/M\nexciting/Y\nexciton\nexcl\nexclaim/DGS\nexclamation/SM\nexclamatory\nexclude/GDS\nexclusion/MS\nexclusionary\nexclusive/PMYS\nexclusiveness/M\nexclusivity/M\nexcommunicate/GNDSX\nexcommunication/M\nexcoriate/DSGNX\nexcoriation/M\nexcrement/M\nexcremental\nexcrescence/MS\nexcrescent\nexcreta/M\nexcrete/XGNDS\nexcretion/M\nexcretory\nexcruciating/Y\nexculpate/DSGN\nexculpation/M\nexculpatory\nexcursion/MS\nexcursionist/MS\nexcursive/YP\nexcursiveness/M\nexcusable/I\nexcusably/I\nexcuse/DSBMG\nexcused/U\nexec/MS\nexecrable\nexecrably\nexecrate/DSGN\nexecration/M\nexecute/BXGNVDS\nexecution/ZMR\nexecutioner/M\nexecutive/SM\nexecutor/MS\nexecutrices\nexecutrix/M\nexegeses\nexegesis/M\nexegetic\nexegetical\nexemplar/SM\nexemplary\nexemplification/M\nexemplify/GDSXN\nexempt/SGD\nexemption/SM\nexercise/DRSMZG\nexerciser/M\nexert/SDG\nexertion/MS\nexeunt\nexfoliate/GNDS\nexhalation/MS\nexhale/DSG\nexhaust/GVMDS\nexhaustible/I\nexhaustion/M\nexhaustive/YP\nexhaustiveness/M\nexhibit/GMDS\nexhibition/MS\nexhibitionism/M\nexhibitionist/MS\nexhibitor/SM\nexhilarate/DSGN\nexhilaration/M\nexhort/SDG\nexhortation/MS\nexhumation/MS\nexhume/DSG\nexigence/MS\nexigency/SM\nexigent\nexiguity/M\nexiguous\nexile/DSMG\nexilic\nexist/SDG\nexistence/MS\nexistent\nexistential/Y\nexistentialism/M\nexistentialist/MS\nexit/MDGS\nexobiology/M\nexodus/MS\nexogenous\nexon/MS\nexonerate/GNDS\nexoneration/M\nexoplanet/MS\nexorbitance/M\nexorbitant/Y\nexorcise/DSG\nexorcism/SM\nexorcist/SM\nexoskeleton/SM\nexosphere/SM\nexothermic\nexotic/SM\nexotica\nexotically\nexoticism/M\nexp\nexpand/BGSD\nexpanse/XMNVS\nexpansible\nexpansion/M\nexpansionary\nexpansionism/M\nexpansionist/MS\nexpansive/YP\nexpansiveness/M\nexpat/S\nexpatiate/GNDS\nexpatiation/M\nexpatriate/DSMGN\nexpatriation/M\nexpect/GSD\nexpectancy/M\nexpectant/Y\nexpectation/SM\nexpectorant/SM\nexpectorate/DSGN\nexpectoration/M\nexpedience/IM\nexpediences\nexpediencies\nexpediency/IM\nexpedient/SMY\nexpedite/DRSZGNX\nexpediter/M\nexpedition/M\nexpeditionary\nexpeditious/PY\nexpeditiousness/M\nexpel/S\nexpelled\nexpelling\nexpend/GSBD\nexpendable/SM\nexpenditure/SM\nexpense/MS\nexpensive/IYP\nexpensiveness/IM\nexperience/IMD\nexperiences\nexperiencing\nexperiential\nexperiment/MDRSZG\nexperimental/Y\nexperimentation/M\nexperimenter/M\nexpert/SPMY\nexpertise/M\nexpertness/M\nexpiate/GNDS\nexpiation/M\nexpiatory\nexpiration/M\nexpire/DSG\nexpired/U\nexpiry/M\nexplain/ADGS\nexplainable\nexplained/U\nexplanation/MS\nexplanatory\nexpletive/MS\nexplicable/I\nexplicate/XGNDS\nexplication/M\nexplicit/PY\nexplicitness/M\nexplode/GDS\nexploit/ZGBMDRS\nexploitation/M\nexploitative\nexploited/U\nexploiter/M\nexploration/MS\nexploratory\nexplore/ZGDRS\nexplored/U\nexplorer/M\nexplosion/SM\nexplosive/SPMY\nexplosiveness/M\nexpo/MS\nexponent/MS\nexponential/Y\nexponentiation\nexport/BSZGMDR\nexportation/M\nexporter/M\nexpose/DSMG\nexposed/U\nexposition/SM\nexpositor/SM\nexpository\nexpostulate/GNXDS\nexpostulation/M\nexposure/MS\nexpound/ZGDRS\nexpounder/M\nexpress/GVMDSY\nexpressed/U\nexpressible/I\nexpression/SM\nexpressionism/M\nexpressionist/SM\nexpressionistic\nexpressionless/Y\nexpressive/PY\nexpressiveness/M\nexpressway/SM\nexpropriate/GNXDS\nexpropriation/M\nexpropriator/SM\nexpulsion/MS\nexpunge/GDS\nexpurgate/DSGNX\nexpurgated/U\nexpurgation/M\nexquisite/YP\nexquisiteness/M\next\nextant\nextemporaneous/PY\nextemporaneousness/M\nextempore\nextemporization/M\nextemporize/GDS\nextend/SZGDRB\nextender/M\nextensibility\nextensible\nextension/SM\nextensional\nextensive/YP\nextensiveness/M\nextent/SM\nextenuate/DSGN\nextenuation/M\nexterior/MS\nexterminate/DSXGN\nextermination/M\nexterminator/MS\nexternal/MYS\nexternalization/SM\nexternalize/DSG\nextinct/GDS\nextinction/MS\nextinguish/ZGBDRS\nextinguishable/I\nextinguisher/M\nextirpate/GNDS\nextirpation/M\nextol/S\nextolled\nextolling\nextort/SGD\nextortion/MRZ\nextortionate/Y\nextortioner/M\nextortionist/MS\nextra/SM\nextracellular\nextract/MDGVS\nextraction/SM\nextractor/MS\nextracurricular\nextradite/GNBXDS\nextradition/M\nextrajudicial\nextralegal\nextramarital\nextramural\nextraneous/Y\nextraordinaire\nextraordinarily\nextraordinary\nextrapolate/XGNDS\nextrapolation/M\nextrasensory\nextraterrestrial/MS\nextraterritorial\nextraterritoriality/M\nextravagance/MS\nextravagant/Y\nextravaganza/MS\nextravehicular\nextreme/PMYTRS\nextremeness/M\nextremism/M\nextremist/MS\nextremity/SM\nextricable/I\nextricate/GNDS\nextrication/M\nextrinsic\nextrinsically\nextroversion/M\nextrovert/SMD\nextrude/GDS\nextrusion/SM\nextrusive\nexuberance/M\nexuberant/Y\nexudation/M\nexude/DSG\nexult/SDG\nexultant/Y\nexultation/M\nexurb/SM\nexurban\nexurbanite/SM\nexurbia/M\neye/DSM\neyeball/GMDS\neyebrow/SM\neyedropper/SM\neyeful/SM\neyeglass/MS\neyeing\neyelash/MS\neyeless\neyelet/SM\neyelid/SM\neyeliner/MS\neyeopener/MS\neyeopening\neyepiece/MS\neyesight/M\neyesore/MS\neyestrain/M\neyeteeth\neyetooth/M\neyewash/M\neyewitness/MS\nf/CIAVTR\nfMRI\nfa/M\nfab\nfable/DSM\nfabric/SM\nfabricate/DSGNX\nfabrication/M\nfabricator/SM\nfabulous/Y\nfacade/SM\nface's\nface/ACSDG\nfacecloth/M\nfacecloths\nfaceless\nfacepalm/SDG\nfacet/SMDG\nfacetious/YP\nfacetiousness/M\nfacial/SMY\nfacile/Y\nfacilitate/GNDS\nfacilitation/M\nfacilitator/MS\nfacility/SM\nfacing/SM\nfacsimile/DSM\nfacsimileing\nfact/MS\nfaction/SM\nfactional\nfactionalism/M\nfactious\nfactitious\nfactoid/SM\nfactor's\nfactor/ASDG\nfactorial/MS\nfactorization\nfactorize/GDS\nfactory/SM\nfactotum/SM\nfactual/Y\nfaculty/SM\nfad/GSMD\nfaddish/P\nfaddist/MS\nfaddy/P\nfade/MS\nfading/U\nfaerie/SM\nfaff/DGS\nfag/SM\nfagged\nfagging\nfaggot/SM\nfagot/SMG\nfaience/M\nfail/DGJS\nfailing/M\nfaille/M\nfailure/SM\nfain/RT\nfaint/SMDRYTGP\nfainthearted\nfaintness/M\nfair/MRYTGJPS\nfairground/MS\nfairing/M\nfairness/UM\nfairway/SM\nfairy/SM\nfairyland/SM\nfaith/M\nfaithful's\nfaithful/UPY\nfaithfulness/UM\nfaithfuls\nfaithless/PY\nfaithlessness/M\nfaiths\nfajita/SM\nfajitas/M\nfake/MZGDRS\nfaker/M\nfakir/SM\nfalcon/SMRZ\nfalconer/M\nfalconry/M\nfall/MNGS\nfallacious/Y\nfallacy/SM\nfallback\nfallibility/IM\nfallible/P\nfallibleness/M\nfallibly/I\nfalloff/SM\nfallout/M\nfallow/SMDG\nfalse/PRYT\nfalsehood/SM\nfalseness/M\nfalsetto/SM\nfalsie/SM\nfalsifiable\nfalsification/M\nfalsifier/M\nfalsify/DRSZGNX\nfalsity/SM\nfalter/GSJMD\nfaltering/Y\nfame's\nfame/D\nfamilial\nfamiliar/MYS\nfamiliarity/UM\nfamiliarization/M\nfamiliarize/GDS\nfamily/SM\nfamine/SM\nfamish/DSG\nfamous/IY\nfan/SM\nfanatic/SM\nfanatical/Y\nfanaticism/M\nfanboy/SM\nfanciable\nfancier/M\nfanciful/YP\nfancifulness/M\nfancily\nfanciness/M\nfancy/DRSMZTGP\nfancywork/M\nfandango/MS\nfandom\nfanfare/SM\nfang/MDS\nfanlight/SM\nfanned\nfanning\nfanny/SM\nfantail/MS\nfantasia/SM\nfantasist/S\nfantasize/GDS\nfantastic\nfantastical/Y\nfantasy/DSMG\nfanzine/MS\nfar\nfarad/SM\nfaradize/DG\nfaraway\nfarce/SM\nfarcical/Y\nfare/MGDS\nfarewell/SM\nfarina/M\nfarinaceous\nfarm/MDRZGSJ\nfarmer/M\nfarmhand/SM\nfarmhouse/SM\nfarming/M\nfarmland/MS\nfarmstead/MS\nfarmyard/MS\nfaro/M\nfarrago/M\nfarragoes\nfarrier/MS\nfarrow/SMDG\nfarseeing\nfarsighted/P\nfarsightedness/M\nfart/MDGS\nfarther\nfarthermost\nfarthest\nfarthing/SM\nfascia/SM\nfascicle/SM\nfascinate/GNDSX\nfascinating/Y\nfascination/M\nfascism/M\nfascist/MS\nfascistic\nfashion/ZGBMDRS\nfashionable/U\nfashionably/U\nfashioner/M\nfashionista/MS\nfast/MDRTGSP\nfastback/SM\nfastball/SM\nfasten/UAGDS\nfastener/SM\nfastening/MS\nfastidious/PY\nfastidiousness/M\nfastness/MS\nfat/GSPMD\nfatal/Y\nfatalism/M\nfatalist/SM\nfatalistic\nfatalistically\nfatality/SM\nfatback/M\nfate/MS\nfateful/YP\nfatefulness/M\nfathead/MDS\nfather/SGMDY\nfatherhood/M\nfatherland/MS\nfatherless\nfathom/SMDGB\nfathomable/U\nfathomless\nfatigue/MDSG\nfatigues/M\nfatness/M\nfatso/S\nfatten/SDG\nfatter\nfattest\nfattiness/M\nfatty/RSMTP\nfatuity/M\nfatuous/YP\nfatuousness/M\nfatwa/SM\nfaucet/SM\nfault/CSMDG\nfaultfinder/SM\nfaultfinding/M\nfaultily\nfaultiness/M\nfaultless/PY\nfaultlessness/M\nfaulty/PRT\nfaun/MS\nfauna/SM\nfauvism/M\nfauvist/SM\nfaux\nfave/S\nfavor/ESMDG\nfavorable/U\nfavorably/U\nfavorite/SM\nfavoritism/M\nfawn/MDRZGS\nfawner/M\nfax/GMDS\nfay/TSMR\nfaze/GDS\nfazed/U\nfealty/M\nfear/MDGS\nfearful/YP\nfearfulness/M\nfearless/PY\nfearlessness/M\nfearsome\nfeasibility/M\nfeasible/IU\nfeasibly\nfeast/SMDRZG\nfeaster/M\nfeat/MS\nfeather/SGMD\nfeatherbedding/M\nfeatherbrained\nfeatherless\nfeatherweight/MS\nfeathery/TR\nfeature/DSMG\nfeatureless\nfebrile\nfecal\nfeces/M\nfeckless/PY\nfecund\nfecundate/GNDS\nfecundation/M\nfecundity/M\nfed/SM\nfederal/SMY\nfederalism/M\nfederalist/MS\nfederalization/M\nfederalize/GDS\nfederate/FXDSGN\nfederation/FM\nfedora/SM\nfee/SM\nfeeble/RTP\nfeebleness/M\nfeebly\nfeed/MRZGSJ\nfeedback/M\nfeedbag/SM\nfeeder/M\nfeeding/M\nfeedlot/SM\nfeel/MRZGSJ\nfeeler/M\nfeelgood\nfeeling/MY\nfeet\nfeign/SDG\nfeigned/U\nfeint/SMDG\nfeisty/TR\nfeldspar/M\nfelicitate/GNXDS\nfelicitation/M\nfelicitous/Y\nfelicity/ISM\nfeline/SM\nfell/MDRZTGS\nfella/S\nfellatio/M\nfellow/SM\nfellowman/M\nfellowmen\nfellowship/MS\nfelon/SM\nfelonious\nfelony/SM\nfelt/MDGS\nfem\nfemale/PSM\nfemaleness/M\nfeminine/SMY\nfemininity/M\nfeminism/M\nfeminist/SM\nfeminize/DSG\nfemoral\nfemur/SM\nfen/SM\nfence/DRSMZG\nfencer/M\nfencing/M\nfend/CDRZGS\nfender/CM\nfenestration/M\nfennel/M\nferal\nferment/FCMS\nfermentation/M\nfermented\nfermenting\nfermium/M\nfern/MS\nferny/RT\nferocious/PY\nferociousness/M\nferocity/M\nferret/GSMD\nferric\nferromagnetic\nferromagnetism\nferrous\nferrule/MS\nferry/DSMG\nferryboat/SM\nferryman/M\nferrymen\nfertile/I\nfertility/IM\nfertilization/M\nfertilize/DRSZG\nfertilized/U\nfertilizer/M\nferule/SM\nfervency/M\nfervent/Y\nfervid/Y\nfervor/M\nfess/FKGSD\nfest/MRZVS\nfestal\nfester/GMD\nfestival/SM\nfestive/YP\nfestiveness/M\nfestivity/SM\nfestoon/GMDS\nfeta/M\nfetal\nfetch/DRSZG\nfetcher/M\nfetching/Y\nfete/MGDS\nfetid/P\nfetidness/M\nfetish/MS\nfetishism/M\nfetishist/SM\nfetishistic\nfetlock/MS\nfetter's\nfetter/USGD\nfettle/M\nfettuccine/M\nfetus/MS\nfeud/MDGS\nfeudal\nfeudalism/M\nfeudalistic\nfever/SMD\nfeverish/YP\nfeverishness/M\nfew/TPMR\nfewness/M\nfey\nfez/M\nfezzes\nff\nfiance/CM\nfiancee/MS\nfiances\nfiasco/M\nfiascoes\nfiat/MS\nfib/ZSMR\nfibbed\nfibber/SM\nfibbing\nfiber/M\nfiberboard/M\nfiberfill/M\nfiberglass/M\nfibril/SM\nfibrillate/GNDS\nfibrillation/M\nfibrin/M\nfibroid\nfibrosis/M\nfibrous\nfibula/M\nfibulae\nfibular\nfiche/SM\nfichu/SM\nfickle/RPT\nfickleness/M\nfiction/MS\nfictional/Y\nfictionalization/SM\nfictionalize/DSG\nfictitious/Y\nfictive\nficus/M\nfiddle/DRSMZG\nfiddler/M\nfiddlesticks\nfiddly/TR\nfidelity/IM\nfidget/SGMD\nfidgety\nfiduciary/SM\nfie\nfief/MS\nfiefdom/MS\nfield/ISMRZ\nfielded\nfielder/IM\nfielding\nfieldsman\nfieldsmen\nfieldwork/MRZ\nfieldworker/M\nfiend/SM\nfiendish/Y\nfierce/PRYT\nfierceness/M\nfieriness/M\nfiery/RPT\nfiesta/SM\nfife/MZRS\nfifer/M\nfifteen/MHS\nfifteenth/M\nfifteenths\nfifth/MY\nfifths\nfiftieth/M\nfiftieths\nfifty/SMH\nfig/SLM\nfight/SMRZG\nfightback\nfighter/IMS\nfighting/IM\nfigment/MS\nfiguration/FM\nfigurative/Y\nfigure's\nfigure/FEGSD\nfigurehead/SM\nfigurine/MS\nfilament/MS\nfilamentous\nfilbert/MS\nfilch/DSG\nfile's/KC\nfile/CAKGDS\nfilename/S\nfiler/CSM\nfilet\nfilial\nfilibuster/MDRSZG\nfilibusterer/M\nfiligree/DSM\nfiligreeing\nfiling's\nfilings\nfill's\nfill/AIDGS\nfilled/U\nfiller/MS\nfillet/MDGS\nfilling/SM\nfillip/MDGS\nfilly/SM\nfilm/MDGS\nfilminess/M\nfilmmaker/SM\nfilmstrip/MS\nfilmy/TPR\nfilo\nfilter/MDRBSZG\nfiltered/U\nfilterer/M\nfilth/M\nfilthily\nfilthiness/M\nfilthy/RPT\nfiltrate's\nfiltrate/IGNDS\nfiltration/IM\nfin/SMR\nfinagle/DRSZG\nfinagler/M\nfinal/SMY\nfinale/MS\nfinalist/SM\nfinality/M\nfinalization/M\nfinalize/DSG\nfinance's\nfinance/ADSG\nfinancial/Y\nfinancier/MS\nfinancing/M\nfinch/MS\nfind/JMRZGS\nfinder/M\nfinding/M\nfindings/M\nfine's/F\nfine/CAFTGDS\nfinely\nfineness/M\nfinery/AM\nfinespun\nfinesse/DSMG\nfinger/MDGSJ\nfingerboard/SM\nfingering/M\nfingerling/SM\nfingermark/S\nfingernail/SM\nfingerprint/SGMD\nfingertip/MS\nfinial/MS\nfinical\nfinickiness/M\nfinicky/RPT\nfinis/MS\nfinish's\nfinish/ADSG\nfinished/U\nfinisher/MS\nfinite/IY\nfink/MDGS\nfinned\nfinny\nfir/ZGSJMDRH\nfire/MS\nfirearm/SM\nfireball/MS\nfirebomb/MDSJG\nfirebox/MS\nfirebrand/SM\nfirebreak/SM\nfirebrick/SM\nfirebug/SM\nfirecracker/SM\nfiredamp/M\nfirefight/MRSZG\nfirefighter/M\nfirefighting/M\nfirefly/SM\nfireguard/S\nfirehouse/SM\nfirelight/ZMR\nfireman/M\nfiremen\nfireplace/SM\nfireplug/MS\nfirepower/M\nfireproof/DSG\nfirer/M\nfirescreen/S\nfireside/MS\nfirestorm/MS\nfiretrap/MS\nfiretruck/MS\nfirewall/MS\nfirewater/M\nfirewood/M\nfirework/SM\nfirm/MDRYPTGS\nfirmament/SM\nfirmness/M\nfirmware/M\nfirst/SMY\nfirstborn/SM\nfirsthand\nfirth/M\nfirths\nfiscal/MYS\nfish/MDRSZG\nfishbowl/SM\nfishcake/SM\nfisher/M\nfisherman/M\nfishermen\nfishery/SM\nfishhook/SM\nfishily\nfishiness/M\nfishing/M\nfishmonger/MS\nfishnet/SM\nfishpond/MS\nfishtail/DGS\nfishwife/M\nfishwives\nfishy/TRP\nfissile\nfission/BM\nfissure/SM\nfist/MS\nfistfight/MS\nfistful/SM\nfisticuffs/M\nfistula/SM\nfistulous/M\nfit/KAMS\nfitful/YP\nfitfulness/M\nfitly\nfitment/S\nfitness/UM\nfitted/UA\nfitter/MS\nfittest\nfitting/SMY\nfive/MZRS\nfix/ZGBJMDRS\nfixate/GNVDSX\nfixation/M\nfixative/MS\nfixed/Y\nfixer/M\nfixings/M\nfixity/M\nfixture/MS\nfizz/MDSG\nfizzle/DSMG\nfizzy/RT\nfjord/SM\nfl/JDG\nflab/M\nflabbergast/SGD\nflabbily\nflabbiness/M\nflabby/RPT\nflaccid/Y\nflaccidity/M\nflack/SM\nflag/MS\nflagella\nflagellant/S\nflagellate/GNDS\nflagellation/M\nflagellum/M\nflagged\nflagging/U\nflagman/M\nflagmen\nflagon/MS\nflagpole/SM\nflagrance/M\nflagrancy/M\nflagrant/Y\nflagship/SM\nflagstaff/MS\nflagstone/MS\nflail/SGMD\nflair/SM\nflak/M\nflake/DSMG\nflakiness/M\nflaky/TRP\nflamage\nflambe/MS\nflambeed\nflambeing\nflamboyance/M\nflamboyancy/M\nflamboyant/Y\nflame/DRSJMZG\nflamenco/MS\nflameproof/DGS\nflamethrower/SM\nflamingo/MS\nflammability/IM\nflammable/SM\nflan/MS\nflange/MS\nflank/SZGMDR\nflanker/M\nflannel/SGMD\nflannelette/M\nflap/MS\nflapjack/MS\nflapped\nflapper/SM\nflapping\nflare/DSMG\nflareup/SM\nflash/ZTGMDRS\nflashback/SM\nflashbulb/SM\nflashcard/SM\nflashcube/SM\nflasher/M\nflashgun/SM\nflashily\nflashiness/M\nflashing/M\nflashlight/MS\nflashy/RTP\nflask/SM\nflat/MYPS\nflatbed/SM\nflatboat/SM\nflatbread\nflatcar/SM\nflatfeet\nflatfish/MS\nflatfoot/SMD\nflatiron/SM\nflatland/M\nflatlet/S\nflatmate/S\nflatness/M\nflatted\nflatten/SDG\nflatter/SDRZG\nflatterer/M\nflattering/Y\nflattery/M\nflattest\nflatting\nflattish\nflattop/SM\nflatulence/M\nflatulent\nflatus/M\nflatware/M\nflatworm/SM\nflaunt/MDSG\nflaunting/Y\nflavor/MDSGJ\nflavored/U\nflavorful\nflavoring/M\nflavorless\nflavorsome\nflaw/MDGS\nflawless/PY\nflawlessness/M\nflax/MN\nflay/DGS\nflea/MS\nfleabag/SM\nfleabite/S\nfleapit/S\nfleck/SGMD\nfledged/U\nfledgling/MS\nflee/S\nfleece/MZGDRS\nfleecer/M\nfleeciness/M\nfleecy/RTP\nfleeing\nfleet/STGMDRYP\nfleetingly/M\nfleetingness/M\nfleetness/M\nflesh/GMDSY\nfleshly/TR\nfleshpot/MS\nfleshy/RT\nflew\nflex/AMS\nflexed\nflexibility/IM\nflexible/I\nflexibly/I\nflexing\nflexion\nflextime/M\nflibbertigibbet/SM\nflick/SZGMDR\nflicker/GMD\nflier/M\nflight/MS\nflightiness/M\nflightless\nflighty/PTR\nflimflam/SM\nflimflammed\nflimflamming\nflimsily\nflimsiness/M\nflimsy/TRP\nflinch/GMDS\nfling/GM\nflint/SM\nflintlock/SM\nflinty/TR\nflip/MS\nflippancy/M\nflippant/Y\nflipped\nflipper/MS\nflippest\nflipping\nflippy/S\nflirt/SGMD\nflirtation/MS\nflirtatious/YP\nflirtatiousness/M\nflirty\nflit/MS\nflitted\nflitting\nfloat/SMDRZG\nfloater/M\nflock/SMDG\nflocking/M\nfloe/MS\nflog/S\nflogged\nflogger/SM\nflogging/MS\nflood/SMDRG\nfloodgate/MS\nfloodlight/MDSG\nfloodlit\nfloodplain/MS\nfloodwater/MS\nfloor/SMDG\nfloorboard/MS\nflooring/M\nfloorwalker/SM\nfloozy/SM\nflop/MS\nflophouse/MS\nflopped\nfloppily\nfloppiness/M\nflopping\nfloppy/PRSMT\nflora/SM\nfloral\nflorescence/IM\nflorescent/I\nfloret/SM\nflorid/PY\nfloridness/M\nflorin/SM\nflorist/SM\nfloss/MDSG\nflossy/RT\nflotation/SM\nflotilla/MS\nflotsam/M\nflounce/DSMG\nflouncy\nflounder/MDSG\nflour/SMDG\nflourish/GMDS\nfloury\nflout/SMDRZG\nflouter/M\nflow/MDGS\nflowchart/SM\nflower's\nflower/CSDG\nflowerbed/MS\nfloweriness/M\nflowering/S\nflowerless\nflowerpot/MS\nflowery/PTR\nflown\nflt\nflu/M\nflub/MS\nflubbed\nflubbing\nfluctuate/GNDSX\nfluctuation/M\nflue/MS\nfluency/M\nfluent/Y\nfluff/SMDG\nfluffiness/M\nfluffy/RPT\nfluid/SMY\nfluidity/M\nfluke/SM\nfluky/RT\nflume/SM\nflummox/DSG\nflung\nflunk/SMDG\nflunky/SM\nfluoresce/DSG\nfluorescence/M\nfluorescent\nfluoridate/GNDS\nfluoridation/M\nfluoride/SM\nfluorine/M\nfluorite/M\nfluorocarbon/MS\nfluoroscope/SM\nfluoroscopic\nfluoxetine\nflurry/GDSM\nflush/MDRSTG\nfluster/MDSG\nflute/DSMG\nfluting/M\nflutist/MS\nflutter/MDSG\nfluttery\nfluvial\nflux/IMS\nfluxed\nfluxing\nfly/ZTGBDRSM\nflyaway\nflyblown\nflyby/M\nflybys\nflycatcher/MS\nflying/M\nflyleaf/M\nflyleaves\nflyover/MS\nflypaper/SM\nflypast/S\nflysheet/S\nflyspeck/GMDS\nflyswatter/MS\nflytrap/S\nflyway/SM\nflyweight/SM\nflywheel/MS\nfoal/MDGS\nfoam/MDGS\nfoaminess/M\nfoamy/RTP\nfob/SM\nfobbed\nfobbing\nfocal/Y\nfocus's\nfocus/ADSG\nfocused/U\nfodder/SM\nfoe/SM\nfog's\nfog/CS\nfogbound\nfogged/C\nfoggily\nfogginess/M\nfogging/C\nfoggy/RTP\nfoghorn/MS\nfogy/SM\nfogyish\nfoible/SM\nfoil/MDGS\nfoist/SDG\nfol\nfold's\nfold/AUSGD\nfoldaway\nfolder/SM\nfoldout/MS\nfoliage/M\nfolic\nfolio/SM\nfolk/MS\nfolklore/M\nfolkloric\nfolklorist/MS\nfolksiness/M\nfolksinger/SM\nfolksinging/M\nfolksy/PTR\nfolktale/MS\nfolkway/MS\nfoll\nfollicle/MS\nfollow/SDRZGJ\nfollower/M\nfollowing/M\nfollowup/S\nfolly/SM\nfoment/SGD\nfomentation/M\nfond/RYTP\nfondant/MS\nfondle/DSG\nfondness/M\nfondue/SM\nfont/MS\nfontanel/MS\nfoo\nfoobar\nfood/MS\nfoodie/SM\nfoodstuff/SM\nfool/MDGS\nfoolery/SM\nfoolhardily\nfoolhardiness/M\nfoolhardy/TPR\nfoolish/YP\nfoolishness/M\nfoolproof\nfoolscap/M\nfoot/MDRZGSJ\nfootage/M\nfootball/MRZGS\nfootballer/M\nfootbridge/SM\nfootfall/MS\nfoothill/MS\nfoothold/MS\nfootie\nfooting/M\nfootless\nfootlights/M\nfootling/MS\nfootlocker/SM\nfootloose\nfootman/M\nfootmen\nfootnote/MGDS\nfootpath/M\nfootpaths\nfootplate/S\nfootprint/SM\nfootrace/MS\nfootrest/MS\nfootsie/SM\nfootslogging\nfootsore\nfootstep/MS\nfootstool/SM\nfootwear/M\nfootwork/M\nfooty\nfop/SM\nfoppery/M\nfoppish/P\nfoppishness/M\nfor/H\nfora\nforage/DRSMZG\nforager/M\nforay/SMDG\nforbade\nforbear/SMG\nforbearance/M\nforbid/S\nforbidden\nforbidding/YS\nforbore\nforborne\nforce/DSMG\nforced/U\nforceful/PY\nforcefulness/M\nforceps/M\nforcible\nforcibly\nford/MDGSB\nfore/MS\nforearm/GSMD\nforebear/MS\nforebode/GJDS\nforeboding/M\nforecast/MRZGS\nforecaster/M\nforecastle/MS\nforeclose/DSG\nforeclosure/MS\nforecourt/SM\nforedoom/DGS\nforefather/MS\nforefeet\nforefinger/SM\nforefoot/M\nforefront/SM\nforego/G\nforegoes\nforegone\nforeground/GMDS\nforehand/MS\nforehead/MS\nforeign/ZRP\nforeigner/M\nforeignness/M\nforeknew\nforeknow/GS\nforeknowledge/M\nforeknown\nforeleg/SM\nforelimb/MS\nforelock/MS\nforeman/M\nforemast/MS\nforemen\nforemost\nforename/MDS\nforenoon/MS\nforensic/MS\nforensically\nforensics/M\nforeordain/GSD\nforepart/MS\nforeperson/SM\nforeplay/M\nforequarter/MS\nforerunner/MS\nforesail/MS\nforesaw\nforesee/RSBZ\nforeseeable/U\nforeseeing\nforeseen/U\nforeseer/M\nforeshadow/GDS\nforeshore/S\nforeshorten/DSG\nforesight/MD\nforesightedness/M\nforeskin/MS\nforest's\nforest/ACGDS\nforestall/SGD\nforestation/ACM\nforester/MS\nforestland/M\nforestry/M\nforetaste/DSMG\nforetell/GS\nforethought/M\nforetold\nforever/M\nforevermore\nforewarn/DSG\nforewent\nforewoman/M\nforewomen\nforeword/MS\nforfeit/GSMD\nforfeiture/SM\nforgather/SDG\nforgave\nforge/DRSMZGVJ\nforger/M\nforgery/SM\nforget/S\nforgetful/YP\nforgetfulness/M\nforgettable/U\nforgetting\nforging/M\nforgivable/U\nforgive/BRSZGP\nforgiven\nforgiveness/M\nforgiver/M\nforgiving/U\nforgo/RZG\nforgoer/M\nforgoes\nforgone\nforgot\nforgotten/U\nfork/MDGS\nforkful/SM\nforklift/MS\nforlorn/Y\nform's\nform/CAIFDGS\nformal/SMY\nformaldehyde/M\nformalin\nformalism/M\nformalist/MS\nformalities\nformality/IM\nformalization/M\nformalize/GDS\nformat/SMV\nformation/CFASM\nformatted/A\nformatting/M\nformed/U\nformer/FIAM\nformerly\nformfitting\nformic\nformidable\nformidably\nformless/PY\nformlessness/M\nformula/MS\nformulae\nformulaic\nformulate/ADSGNX\nformulated/U\nformulation/AM\nformulator/SM\nfornicate/GNDS\nfornication/M\nfornicator/MS\nforsake/GS\nforsaken\nforsook\nforsooth\nforswear/SG\nforswore\nforsworn\nforsythia/SM\nfort/MS\nforte/SM\nforthcoming/M\nforthright/YP\nforthrightness/M\nforthwith\nfortieth/M\nfortieths\nfortification/M\nfortified/U\nfortifier/M\nfortify/DRSNZGX\nfortissimo\nfortitude/M\nfortnight/MYS\nfortress/MS\nfortuitous/YP\nfortuitousness/M\nfortuity/M\nfortunate/UY\nfortune/MS\nfortuneteller/SM\nfortunetelling/M\nforty/SMH\nforum/SM\nforward/MDRYZTGSP\nforwarder/M\nforwardness/M\nforwent\nfossa\nfossil/SM\nfossilization/M\nfossilize/GDS\nfoster/GSD\nfought\nfoul/MDRYTGSP\nfoulard/M\nfoulmouthed\nfoulness/M\nfound/FSDG\nfoundation/SM\nfoundational\nfounded/U\nfounder/GMDS\nfoundling/SM\nfoundry/SM\nfount/SM\nfountain/SM\nfountainhead/MS\nfour/MHS\nfourfold\nfourposter/SM\nfourscore/M\nfoursome/SM\nfoursquare\nfourteen/SMH\nfourteenth/M\nfourteenths\nfourth/MY\nfourths\nfowl/MDGS\nfox/GMDS\nfoxfire/M\nfoxglove/SM\nfoxhole/MS\nfoxhound/SM\nfoxhunt/GS\nfoxily\nfoxiness/M\nfoxtrot/MS\nfoxtrotted\nfoxtrotting\nfoxy/RTP\nfoyer/SM\nfps\nfr\nfracas/MS\nfrack/SDG\nfractal/SM\nfraction/ISM\nfractional/Y\nfractious/YP\nfractiousness/M\nfracture/MGDS\nfrag/S\nfragile/RT\nfragility/M\nfragment/GMDS\nfragmentary/M\nfragmentation/M\nfragrance/MS\nfragrant/Y\nfrail/RYTP\nfrailness/M\nfrailty/SM\nframe/DRSMZG\nframed/U\nframer/M\nframework/SM\nfranc/SM\nfranchise's\nfranchise/EDSG\nfranchisee/SM\nfranchiser/SM\nfrancium/M\nfrancophone\nfrangibility/M\nfrangible\nfrank/SMDRYTGP\nfrankfurter/MS\nfrankincense/M\nfrankness/M\nfrantic\nfrantically\nfrappe/SM\nfrat/MS\nfraternal/Y\nfraternity/FSM\nfraternization/M\nfraternize/ZGDRS\nfraternizer/M\nfratricidal\nfratricide/MS\nfraud's\nfraud/S\nfraudster/S\nfraudulence/M\nfraudulent/Y\nfraught\nfray's\nfray/CDGS\nfrazzle/MGDS\nfreak/SMDG\nfreakish/YP\nfreakishness/M\nfreaky/RT\nfreckle/DSMG\nfreckly\nfree/YTDRS\nfreebase/MGDS\nfreebie/SM\nfreebooter/SM\nfreeborn\nfreedman/M\nfreedmen\nfreedom/SM\nfreehand\nfreehold/ZMRS\nfreeholder/M\nfreeing\nfreelance/DRSMZG\nfreelancer/M\nfreeload/SDRZG\nfreeloader/M\nfreeman/M\nfreemasonry\nfreemen\nfreephone\nfreesia/S\nfreestanding\nfreestone/SM\nfreestyle/SM\nfreethinker/SM\nfreethinking/M\nfreeware/M\nfreeway/MS\nfreewheel/DGS\nfreewill\nfreezable\nfreeze's\nfreeze/UAGS\nfreezer/MS\nfreezing's\nfreight/MDRZGS\nfreighter/M\nfrench\nfrenemy/S\nfrenetic\nfrenetically\nfrenzied/Y\nfrenzy/DSM\nfreq\nfrequencies\nfrequency/IM\nfrequent/DRYSZTG\nfrequented/U\nfrequenter/M\nfresco/M\nfrescoes\nfresh/PNRYXZT\nfreshen/ZGDR\nfreshener/M\nfreshet/MS\nfreshman/M\nfreshmen\nfreshness/M\nfreshwater/M\nfret/MS\nfretful/YP\nfretfulness/M\nfretsaw/MS\nfretted\nfretting\nfretwork/M\nfriable\nfriar/SM\nfriary/SM\nfricassee/DSM\nfricasseeing\nfricative/SM\nfriction/SM\nfrictional\nfridge/SM\nfriedcake/MS\nfriend's\nfriend/UGSDY\nfriendless\nfriendlies\nfriendliness/UM\nfriendly's\nfriendly/UPTR\nfriendship/MS\nfrieze/SM\nfrig/S\nfrigate/MS\nfrigged\nfrigging\nfright/SXGMDN\nfrighten/DG\nfrightening/Y\nfrightful/PY\nfrightfulness/M\nfrigid/YP\nfrigidity/M\nfrigidness/M\nfrill/SMD\nfrilly/TR\nfringe's\nfringe/IDSG\nfrippery/SM\nfrisk/SDG\nfriskily\nfriskiness/M\nfrisky/TRP\nfrisson/S\nfritter/MDSG\nfritz/M\nfrivolity/SM\nfrivolous/PY\nfrivolousness/M\nfrizz/MDSYG\nfrizzle/MGDS\nfrizzy/TR\nfro\nfrock's\nfrock/CUS\nfrog/MS\nfrogging/S\nfrogman/M\nfrogmarch/GDS\nfrogmen\nfrogspawn\nfrolic/SM\nfrolicked\nfrolicker/SM\nfrolicking\nfrolicsome\nfrom\nfrond/SM\nfront's\nfront/FSDG\nfrontage/MS\nfrontal/Y\nfrontbench/ZRS\nfrontier/MS\nfrontiersman/M\nfrontiersmen\nfrontierswoman\nfrontierswomen\nfrontispiece/MS\nfrontward/S\nfrosh/M\nfrost's\nfrost/CSDG\nfrostbit\nfrostbite/MGS\nfrostbitten\nfrostily\nfrostiness/M\nfrosting/SM\nfrosty/TPR\nfroth/MDG\nfrothiness/M\nfroths\nfrothy/TPR\nfroufrou/M\nfroward/P\nfrowardness/M\nfrown/SMDG\nfrowzily\nfrowziness/M\nfrowzy/TPR\nfroze/AU\nfrozen/UA\nfructify/DSG\nfructose/M\nfrugal/Y\nfrugality/M\nfruit/SMDG\nfruitcake/MS\nfruiterer/S\nfruitful/YP\nfruitfulness/M\nfruitiness/M\nfruition/M\nfruitless/PY\nfruitlessness/M\nfruity/TPR\nfrump/SM\nfrumpish\nfrumpy/TR\nfrustrate/GNXDS\nfrustrating/Y\nfrustration/M\nfrustum/MS\nfry/GDSM\nfryer/SM\nft\nftp/ZGS\nfuchsia/MS\nfuck/SMGDRZ!\nfucker/M!\nfuckhead/S!\nfuddle/DSMG\nfudge/DSMG\nfuehrer/MS\nfuel's\nfuel/ADGS\nfug\nfugal\nfuggy\nfugitive/MS\nfugue/SM\nfuhrer/SM\nfulcrum/MS\nfulfill/LDGS\nfulfilled/U\nfulfilling/U\nfulfillment/M\nfull/MDRZTGSP\nfullback/MS\nfuller/M\nfullness/M\nfully\nfulminate/DSXGN\nfulmination/M\nfulsome/PY\nfulsomeness/M\nfum/S\nfumble/DRSMZG\nfumbler/M\nfumbling/Y\nfume/MGDS\nfumigant/MS\nfumigate/GNDS\nfumigation/M\nfumigator/SM\nfumy/RT\nfun/M\nfunction/MDGS\nfunctional/Y\nfunctionalism\nfunctionalist/S\nfunctionality/S\nfunctionary/SM\nfunctor\nfund/AMDGS\nfundamental/SMY\nfundamentalism/M\nfundamentalist/SM\nfunded/U\nfunding/M\nfundraiser/MS\nfundraising\nfuneral/MS\nfunerary\nfunereal/Y\nfunfair/S\nfungal\nfungi\nfungible/MS\nfungicidal\nfungicide/MS\nfungoid\nfungous\nfungus/M\nfunicular/SM\nfunk/MDGS\nfunkiness/M\nfunky/PRT\nfunnel/MDGS\nfunner\nfunnest\nfunnily\nfunniness/M\nfunny/TPRSM\nfunnyman/M\nfunnymen\nfur/SM\nfurbelow/M\nfurbish/ADSG\nfurious/Y\nfurl's\nfurl/UDGS\nfurlong/SM\nfurlough/GMD\nfurloughs\nfurn\nfurnace/SM\nfurnish/ADSG\nfurnished/U\nfurnishings/M\nfurniture/M\nfuror/SM\nfurosemide\nfurred\nfurrier/M\nfurriness/M\nfurring/M\nfurrow/MDSG\nfurry/ZTRP\nfurther/SGD\nfurtherance/M\nfurthermore\nfurthermost\nfurthest\nfurtive/YP\nfurtiveness/M\nfury/SM\nfurze/M\nfuse's/A\nfuse/CAIFGDS\nfusee/SM\nfuselage/SM\nfusibility/M\nfusible\nfusilier/SM\nfusillade/MS\nfusion/IFKSM\nfuss/MDSG\nfussbudget/MS\nfussily\nfussiness/M\nfusspot/SM\nfussy/TRP\nfustian/M\nfustiness/M\nfusty/TRP\nfut\nfutile/Y\nfutility/M\nfuton/SM\nfuture/MS\nfuturism/M\nfuturist/MS\nfuturistic\nfuturity/SM\nfuturologist/MS\nfuturology/M\nfutz/DSG\nfuzz/MDSG\nfuzzball/S\nfuzzily\nfuzziness/M\nfuzzy/PTR\nfwd\nfwy\ng/SNXVB\ngab/SM\ngabardine/SM\ngabbed\ngabbiness/M\ngabbing\ngabble/DSMG\ngabby/RTP\ngaberdine/SM\ngabfest/MS\ngable/DSM\ngad/S\ngadabout/SM\ngadded\ngadder/SM\ngadding\ngadfly/SM\ngadget/SM\ngadgetry/M\ngadolinium/M\ngaff/MDRZGS\ngaffe/SM\ngaffer/M\ngag/SM\ngaga\ngagged\ngagging\ngaggle/SM\ngaiety/M\ngaily\ngain's\ngain/ADGS\ngainer/SM\ngainful/Y\ngainsaid\ngainsay/ZGRS\ngainsayer/M\ngait/MRZS\ngaiter/M\ngal/SM\ngala/MS\ngalactic\ngalaxy/SM\ngale's\ngale/AS\ngalena/M\ngall/MDGS\ngallant/SMY\ngallantry/M\ngallbladder/MS\ngalleon/SM\ngalleria/MS\ngallery/SM\ngalley/SM\ngallimaufry/SM\ngallium/M\ngallivant/GSD\ngallon/SM\ngallop/SMDG\ngallows/M\ngallstone/MS\ngaloot/SM\ngalore\ngalosh/MS\ngalumph/DG\ngalumphs\ngalvanic\ngalvanism/M\ngalvanization/M\ngalvanize/DSG\ngalvanometer/MS\ngambit/SM\ngamble/DRSMZG\ngambler/M\ngambling/M\ngambol/SMDG\ngame/MYTGDRSP\ngamecock/MS\ngamekeeper/MS\ngameness/M\ngamesmanship/M\ngamester/MS\ngamete/SM\ngametic\ngamin/SM\ngamine/SM\ngaminess/M\ngaming/M\ngamma/SM\ngammon/M\ngammy\ngamut/SM\ngamy/RTP\ngander/SM\ngang/MDGS\ngangbusters/M\ngangland/M\nganglia\ngangling\nganglion/M\nganglionic\ngangplank/SM\ngangrene/DSMG\ngangrenous\ngangsta/S\ngangster/SM\ngangway/MS\nganja\ngannet/SM\ngantlet/MS\ngantry/SM\ngap/GSMD\ngape/MS\ngar/SLM\ngarage/DSMG\ngarb/MDGS\ngarbage/M\ngarbageman\ngarbanzo/SM\ngarble/DSG\ngarcon/SM\ngarden/SZGMDR\ngardener/M\ngardenia/MS\ngardening/M\ngarfish/MS\ngargantuan\ngargle/DSMG\ngargoyle/SM\ngarish/PY\ngarishness/M\ngarland/MDGS\ngarlic/M\ngarlicky\ngarment/MS\ngarner/SGD\ngarnet/SM\ngarnish/GLMDS\ngarnishee/DSM\ngarnisheeing\ngarnishment/SM\ngarret/SM\ngarrison/MDSG\ngarrote/MZGDRS\ngarroter/M\ngarrulity/M\ngarrulous/PY\ngarrulousness/M\ngarter/SM\ngas's\ngas/CS\ngasbag/SM\ngaseous\ngash/MDSG\ngasholder/S\ngasket/SM\ngaslight/MS\ngasman\ngasmen\ngasohol/M\ngasoline/M\ngasometer/S\ngasp/MDGS\ngassed/C\ngasses\ngassing/C\ngassy/RT\ngastric\ngastritis/M\ngastroenteritis/M\ngastrointestinal\ngastronome/S\ngastronomic\ngastronomical/Y\ngastronomy/M\ngastropod/SM\ngasworks/M\ngate/MGDS\ngateau\ngateaux\ngatecrash/DRSZG\ngatecrasher/M\ngatehouse/SM\ngatekeeper/MS\ngatepost/MS\ngateway/MS\ngather/SJZGMDR\ngatherer/M\ngathering/M\ngator/SM\ngauche/RPYT\ngaucheness/M\ngaucherie/M\ngaucho/SM\ngaudily\ngaudiness/M\ngaudy/RPT\ngauge/DSMG\ngaunt/RPT\ngauntlet/MS\ngauntness/M\ngauze/M\ngauziness/M\ngauzy/RPT\ngave\ngavel/SM\ngavotte/MS\ngawd\ngawk/DGS\ngawkily\ngawkiness/M\ngawky/RPT\ngawp/DGS\ngay/TSPMR\ngayness/M\ngaze/MZGDRS\ngazebo/SM\ngazelle/MS\ngazer/M\ngazette/MGDS\ngazetteer/MS\ngazillion/S\ngazpacho/M\ngazump/DGS\ngear/MDGS\ngearbox/MS\ngearing/M\ngearshift/MS\ngearwheel/SM\ngecko/SM\ngeddit\ngee/DS\ngeeing\ngeek/MS\ngeeky/RT\ngeese\ngeezer/MS\ngeisha/M\ngel/SM\ngelatin/M\ngelatinous\ngelcap/M\ngeld/DJGS\ngelding/M\ngelid\ngelignite/M\ngelled\ngelling\ngem/SM\ngemological\ngemologist/MS\ngemology/M\ngemstone/MS\ngendarme/MS\ngender/MDS\ngene/MS\ngenealogical/Y\ngenealogist/MS\ngenealogy/SM\ngenera\ngeneral/SMY\ngeneralissimo/MS\ngeneralist/MS\ngenerality/SM\ngeneralization/MS\ngeneralize/GDS\ngeneralship/M\ngenerate/CAVNGSD\ngeneration/ACM\ngenerational\ngenerations\ngenerator/SM\ngeneric/SM\ngenerically\ngenerosity/SM\ngenerous/PY\ngenerousness/M\ngenes/S\ngenesis/M\ngenetic/S\ngenetically\ngeneticist/MS\ngenetics/M\ngenial/FY\ngeniality/FM\ngeniculate\ngenie/SM\ngenii\ngenital/FY\ngenitalia/M\ngenitals/M\ngenitive/MS\ngenitourinary\ngenius/MS\ngenned\ngenning\ngenocidal\ngenocide/MS\ngenome/MS\ngenomics\ngenre/SM\ngent/AMS\ngenteel/YP\ngenteelness/M\ngentian/SM\ngentile/SM\ngentility/M\ngentle/TGDRSP\ngentlefolk/MS\ngentlefolks/M\ngentleman/MY\ngentlemanly/U\ngentlemen\ngentleness/M\ngentlewoman/M\ngentlewomen\ngently\ngentrification/M\ngentrify/DSGN\ngentry/SM\ngenuflect/DGS\ngenuflection/MS\ngenuine/PY\ngenuineness/M\ngenus/M\ngeocache/DSG\ngeocentric\ngeocentrically\ngeochemistry/M\ngeode/SM\ngeodesic/SM\ngeodesy/M\ngeodetic\ngeoengineering\ngeog\ngeographer/SM\ngeographic\ngeographical/Y\ngeography/SM\ngeologic\ngeological/Y\ngeologist/MS\ngeology/SM\ngeom\ngeomagnetic\ngeomagnetism/M\ngeometer\ngeometric\ngeometrical/Y\ngeometry/SM\ngeophysical\ngeophysicist/SM\ngeophysics/M\ngeopolitical\ngeopolitics/M\ngeostationary\ngeosynchronous\ngeosyncline/MS\ngeothermal\ngeothermic\ngeranium/MS\ngerbil/MS\ngeriatric/S\ngeriatrician/S\ngeriatrics/M\ngerm/MS\ngermane\ngermanium/M\ngermicidal\ngermicide/MS\ngerminal/M\ngerminate/GNDS\ngermination/M\ngerontological\ngerontologist/MS\ngerontology/M\ngerrymander/GMDS\ngerrymandering/M\ngerund/MS\ngestalt/S\ngestapo/MS\ngestate/GNDS\ngestation/M\ngestational\ngesticulate/DSGNX\ngesticulation/M\ngestural\ngesture/MGDS\ngesundheit\nget/S\ngetaway/SM\ngetting\ngetup/M\ngewgaw/SM\ngeyser/SM\nghastliness/M\nghastly/TPR\nghat/MS\nghee\ngherkin/MS\nghetto/SM\nghettoize/GDS\nghost/SMDYG\nghostliness/M\nghostly/RTP\nghostwrite/ZGRS\nghostwriter/M\nghostwritten\nghostwrote\nghoul/SM\nghoulish/YP\nghoulishness/M\ngiant/SM\ngiantess/MS\ngibber/GDS\ngibberish/M\ngibbet/GMDS\ngibbon/MS\ngibbous\ngibe/MGDS\ngiblet/SM\ngiddily\ngiddiness/M\ngiddy/RTP\ngift/MDGS\ngig/SM\ngigabit/SM\ngigabyte/MS\ngigahertz/M\ngigantic\ngigantically\ngigapixel/MS\ngigawatt/SM\ngigged\ngigging\ngiggle/DRSMZG\ngiggler/M\ngiggly/RT\ngigolo/SM\ngild/MDRZGS\ngilder/M\ngilding/M\ngill/MS\ngillie/S\ngillion/S\ngilt/MS\ngimbals/M\ngimcrack/SM\ngimcrackery/M\ngimlet/GSMD\ngimme/SM\ngimmick/MS\ngimmickry/M\ngimmicky\ngimp/MDGS\ngimpy\ngin/SM\nginger/GSMDY\ngingerbread/M\ngingersnap/SM\ngingery\ngingham/M\ngingivitis/M\nginkgo/M\nginkgoes\nginned\nginning\nginormous\nginseng/M\ngiraffe/MS\ngird/DRZGS\ngirder/M\ngirdle/DSMG\ngirl/MS\ngirlfriend/MS\ngirlhood/SM\ngirlish/YP\ngirlishness/M\ngirly\ngiro/S\ngirt/MDGS\ngirth/M\ngirths\ngist/M\ngit/S\ngite/S\ngive/ZGJRS\ngiveaway/MS\ngiveback/MS\ngiven/SM\ngiver/M\ngizmo/SM\ngizzard/MS\nglace/S\nglaceed\nglaceing\nglacial/Y\nglaciate/XGNDS\nglaciation/M\nglacier/MS\nglad/MYSP\ngladden/GDS\ngladder\ngladdest\nglade/SM\ngladiator/SM\ngladiatorial\ngladiola/SM\ngladioli\ngladiolus/M\ngladness/M\ngladsome\nglam\nglamorization/M\nglamorize/DSG\nglamorous/Y\nglamour/GMDS\nglance/DSMG\ngland/SM\nglandes\nglandular\nglans/M\nglare/DSMG\nglaring/Y\nglasnost/M\nglass/MDSG\nglassblower/MS\nglassblowing/M\nglassful/SM\nglasshouse/S\nglassily\nglassiness/M\nglassware/M\nglassy/RTP\nglaucoma/M\nglaze/DSMG\nglazier/SM\nglazing/M\ngleam/SMDGJ\nglean/SDRZGJ\ngleaner/M\ngleanings/M\nglee/M\ngleeful/YP\ngleefulness/M\nglen/MS\nglenohumeral\nglenoid\nglib/YP\nglibber\nglibbest\nglibness/M\nglide/DRSMZG\nglider/M\ngliding/M\nglimmer/MDGJS\nglimmering/M\nglimpse/MGDS\nglint/SMDG\nglissandi\nglissando/M\nglisten/MDSG\nglister/DSG\nglitch/GMDS\nglitter/MDSG\nglitterati\nglittery\nglitz/M\nglitzy/TR\ngloaming/SM\ngloat/SMDG\ngloating/Y\nglob/MDGS\nglobal/Y\nglobalism/M\nglobalist/MS\nglobalization/M\nglobalize/GDS\nglobe/SM\nglobetrotter/MS\nglobetrotting\nglobular\nglobule/MS\nglobulin/M\nglockenspiel/SM\ngloom/M\ngloomily\ngloominess/M\ngloomy/TRP\nglop/M\ngloppy\nglorification/M\nglorify/GDSN\nglorious/IY\nglory/DSMG\ngloss/MDSG\nglossary/SM\nglossily\nglossiness/M\nglossolalia/M\nglossy/PTRSM\nglottal\nglottis/MS\nglove/DSMG\nglow/MDRZGS\nglower/GMD\nglowing/Y\nglowworm/MS\nglucagon\nglucose/M\nglue/MGDS\nglued/U\ngluey\ngluier\ngluiest\nglum/YP\nglummer\nglummest\nglumness/M\ngluon/S\nglut/MNS\ngluten/M\nglutenous\nglutinous/Y\nglutted\nglutting\nglutton/MS\ngluttonous/Y\ngluttony/M\nglycerin/M\nglycerol/M\nglycogen/M\nglycol\nglyph\ngm\ngnarl/SMDG\ngnarly/TR\ngnash/MDSG\ngnat/MS\ngnaw/DGS\ngneiss/M\ngnocchi\ngnome/SM\ngnomic\ngnomish\ngnu/SM\ngo/JMRHZG\ngoad/MDGS\ngoal/MS\ngoalie/SM\ngoalkeeper/MS\ngoalkeeping/M\ngoalless\ngoalmouth\ngoalmouths\ngoalpost/MS\ngoalscorer/S\ngoaltender/MS\ngoat/MS\ngoatee/SM\ngoatherd/MS\ngoatskin/MS\ngob/SM\ngobbed\ngobbet/SM\ngobbing\ngobble/DRSMZG\ngobbledygook/M\ngobbler/M\ngoblet/SM\ngoblin/SM\ngobsmacked\ngobstopper/S\ngod/SM\ngodawful\ngodchild/M\ngodchildren/M\ngoddammit\ngoddamn/D\ngoddaughter/MS\ngoddess/MS\ngodfather/SM\ngodforsaken\ngodhead/M\ngodhood/M\ngodless/PY\ngodlessness/M\ngodlike\ngodliness/UM\ngodly/URTP\ngodmother/SM\ngodparent/SM\ngodsend/SM\ngodson/SM\ngodspeed\ngoer/M\ngoes\ngofer/SM\ngoggle/DSMG\ngoggles/M\ngoing/M\ngoiter/SM\ngold/MNS\ngoldbrick/ZGSMDR\ngoldbricker/M\ngolden/TR\ngoldenrod/M\ngoldfield/S\ngoldfinch/MS\ngoldfish/MS\ngoldmine/SM\ngoldsmith/M\ngoldsmiths\ngolf/MDRZGS\ngolfer/M\ngolliwog/S\ngolly/SM\ngonad/SM\ngonadal\ngondola/MS\ngondolier/SM\ngone/ZR\ngoner/M\ngong/MDGS\ngonk/S\ngonna\ngonorrhea/M\ngonorrheal\ngonzo\ngoo/M\ngoober/SM\ngood/MYSP\ngoodbye/MS\ngoodhearted\ngoodish\ngoodly/TR\ngoodness/M\ngoodnight\ngoods/M\ngoodwill/M\ngoody/SM\ngooey\ngoof/MDGS\ngoofball/SM\ngoofiness/M\ngoofy/RPT\ngoogle/DSMG\ngoogly/S\ngooier\ngooiest\ngook/MS\ngoon/MS\ngoop/M\ngoose/DSMG\ngooseberry/SM\ngoosebumps/M\ngoosestep/S\ngoosestepped\ngoosestepping\ngopher/SM\ngore/MGDS\ngorge's\ngorge/EDSG\ngorgeous/YP\ngorgeousness/M\ngorgon/SM\ngorilla/MS\ngorily\ngoriness/M\ngormandize/DRSZG\ngormandizer/M\ngormless\ngorp/MS\ngorse/M\ngory/RTP\ngosh\ngoshawk/MS\ngosling/SM\ngospel/MS\ngossamer/M\ngossip/MDRZGS\ngossiper/M\ngossipy\ngot\ngotcha/S\ngoths\ngotta\ngotten\ngouache/S\ngouge/DRSMZG\ngouger/M\ngoulash/MS\ngourd/SM\ngourde/MS\ngourmand/SM\ngourmet/SM\ngout/M\ngouty/TR\ngov\ngovern/DGSBL\ngovernable/U\ngovernance/M\ngoverned/U\ngoverness/MS\ngovernment/MS\ngovernmental\ngovernor/SM\ngovernorship/M\ngovt\ngown/MDGS\ngr\ngrab/MS\ngrabbed\ngrabber/MS\ngrabbing\ngrabby/TR\ngrace/EDSMG\ngraceful/EPY\ngracefulness/EM\ngraceless/PY\ngracelessness/M\ngracious/UY\ngraciousness/M\ngrackle/MS\ngrad/MRZSB\ngradate/XGNDS\ngradation/CM\ngrade's\ngrade/CADSG\ngraded/U\ngrader/M\ngradient/MS\ngradual/PY\ngradualism/M\ngradualness/M\ngraduate/XMGNDS\ngraduation/M\ngraffiti\ngraffito/M\ngraft/SMDRZG\ngrafter/M\ngraham/S\ngrail\ngrain/ISMD\ngraininess/M\ngrainy/PTR\ngram/KMS\ngrammar/MS\ngrammarian/SM\ngrammatical/UY\ngramophone/MS\ngrampus/MS\ngran/S\ngranary/SM\ngrand/SMRYPT\ngrandam/MS\ngrandaunt/MS\ngrandchild/M\ngrandchildren/M\ngranddad/SM\ngranddaddy/SM\ngranddaughter/SM\ngrandee/MS\ngrandeur/M\ngrandfather/GMDYS\ngrandiloquence/M\ngrandiloquent\ngrandiose/Y\ngrandiosity/M\ngrandma/MS\ngrandmother/MYS\ngrandnephew/MS\ngrandness/M\ngrandniece/MS\ngrandpa/MS\ngrandparent/MS\ngrandson/MS\ngrandstand/SGMD\ngranduncle/SM\ngrange/SM\ngranite/M\ngranitic\ngranny/SM\ngranola/M\ngrant/SMDRZG\ngrantee/MS\ngranter/M\ngrantsmanship/M\ngranular\ngranularity/M\ngranulate/GNDS\ngranulation/M\ngranule/MS\ngrape/SM\ngrapefruit/MS\ngrapeshot/M\ngrapevine/SM\ngraph/MDG\ngraphic/MS\ngraphical/Y\ngraphite/M\ngraphologist/MS\ngraphology/M\ngraphs\ngrapnel/MS\ngrapple/MGDS\ngrasp/SMDBG\ngrass/MDSG\ngrasshopper/MS\ngrassland/MS\ngrassroots\ngrassy/TR\ngrate/DRSMZGJ\ngrateful/UYP\ngratefulness/UM\ngrater/M\ngratification/M\ngratify/GNXDS\ngratifying/Y\ngratin/S\ngrating/MY\ngratis\ngratitude/IM\ngratuitous/YP\ngratuitousness/M\ngratuity/SM\ngravamen/MS\ngrave/DRSMYTGP\ngravedigger/SM\ngravel/SGMDY\ngraven\ngraveness/M\ngraveside/MS\ngravestone/SM\ngraveyard/MS\ngravid\ngravimeter/MS\ngravitas\ngravitate/GNDS\ngravitation/M\ngravitational\ngravity/M\ngravy/SM\ngray/MDRTGSP\ngraybeard/SM\ngrayish\ngrayness/M\ngraze/DRSMZG\ngrazer/M\ngrease/DRSMZG\ngreasepaint/M\ngreasily\ngreasiness/M\ngreasy/PTR\ngreat/SMRYPT\ngreatcoat/SM\ngreathearted\ngreatness/M\ngrebe/SM\ngreed/M\ngreedily\ngreediness/M\ngreedy/PTR\ngreen/GPSMDRYT\ngreenback/MS\ngreenbelt/MS\ngreenery/M\ngreenfield\ngreenfly/S\ngreengage/MS\ngreengrocer/SM\ngreenhorn/SM\ngreenhouse/SM\ngreenish\ngreenmail/M\ngreenness/M\ngreenroom/SM\ngreenstone\ngreensward/M\ngreenwood/M\ngreet/ZGJSDR\ngreeter/M\ngreeting/M\ngregarious/PY\ngregariousness/M\ngremlin/SM\ngrenade/SM\ngrenadier/MS\ngrenadine/M\ngrep/S\ngrepped\ngrepping\ngrew/A\ngreyhound/SM\ngribble/S\ngrid/MS\ngriddle/SM\ngriddlecake/SM\ngridiron/SM\ngridlock/SMD\ngrief/SM\ngrievance/MS\ngrieve/ZGDRS\ngriever/M\ngrievous/PY\ngrievousness/M\ngriffin/SM\ngriffon/SM\ngrill/SGMDJ\ngrille/MS\ngrim/DYPG\ngrimace/DSMG\ngrime/SM\ngriminess/M\ngrimmer\ngrimmest\ngrimness/M\ngrimy/TRP\ngrin/MS\ngrind/SZGMRJ\ngrinder/M\ngrindstone/MS\ngringo/MS\ngrinned\ngrinning\ngrip/MDRSZG\ngripe/SM\ngriper/M\ngrippe/MZGDR\ngripper/M\ngrisliness/M\ngrisly/RTP\ngrist/MY\ngristle/M\ngristmill/MS\ngrit/MS\ngrits/M\ngritted\ngritter/SM\ngrittiness/M\ngritting\ngritty/RTP\ngrizzle/DSG\ngrizzly/TRSM\ngroan/SGMD\ngroat/SM\ngrocer/MS\ngrocery/SM\ngrog/M\ngroggily\ngrogginess/M\ngroggy/PRT\ngroin/SM\ngrok/S\ngrokked\ngrokking\ngrommet/SM\ngroom/SZGMDR\ngroomer/M\ngrooming/M\ngroomsman/M\ngroomsmen\ngroove/MGDS\ngroovy/RT\ngrope/DRSMZG\ngroper/M\ngrosbeak/MS\ngrosgrain/M\ngross/PTGMDRSY\ngrossness/M\ngrotesque/SPMY\ngrotesqueness/M\ngrotto/M\ngrottoes\ngrotty/TR\ngrouch/GMDS\ngrouchily\ngrouchiness/M\ngrouchy/RTP\nground/ZGMDRJS\ngroundbreaking/MS\ngroundcloth\ngroundcloths\ngrounder/M\ngroundhog/MS\ngrounding/M\ngroundless/Y\ngroundnut/MS\ngroundsheet/S\ngroundskeeper/S\ngroundsman\ngroundsmen\ngroundswell/SM\ngroundwater/M\ngroundwork/M\ngroup/JSZGMDR\ngrouper/M\ngroupie/MS\ngrouping/M\ngroupware/M\ngrouse/MZGDRS\ngrouser/M\ngrout/SGMD\ngrove/SM\ngrovel/ZGDRS\ngroveler/M\ngrovelled\ngrovelling\ngrow/AHSG\ngrower/MS\ngrowing/I\ngrowl/SZGMDR\ngrowler/M\ngrown/AI\ngrownup/MS\ngrowth/AM\ngrowths\ngrub/MS\ngrubbed\ngrubber/MS\ngrubbily\ngrubbiness/M\ngrubbing\ngrubby/TRP\ngrubstake/M\ngrudge/MGDS\ngrudging/Y\ngrue/S\ngruel/GJM\ngrueling/Y\ngruesome/RYTP\ngruesomeness/M\ngruff/TPRY\ngruffness/M\ngrumble/DRSMZGJ\ngrumbler/M\ngrump/SM\ngrumpily\ngrumpiness/M\ngrumpy/PRT\ngrunge/MS\ngrungy/RT\ngrunion/SM\ngrunt/SGMD\ngt\nguacamole/M\nguanine/M\nguano/M\nguarani/MS\nguarantee/MDS\nguaranteeing\nguarantor/MS\nguaranty/GDSM\nguard/SZGMDR\nguarded/Y\nguarder/M\nguardhouse/SM\nguardian/SM\nguardianship/M\nguardrail/SM\nguardroom/SM\nguardsman/M\nguardsmen\nguava/SM\ngubernatorial\nguerrilla/SM\nguess/ZGBMDRS\nguesser/M\nguesstimate/DSMG\nguesswork/M\nguest/SGMD\nguestbook/SM\nguesthouse/S\nguestroom/S\nguff/M\nguffaw/MDGS\nguidance/M\nguide/DRSMZG\nguidebook/SM\nguided/U\nguideline/SM\nguidepost/SM\nguider/M\nguild/SZMR\nguilder/M\nguildhall/MS\nguile/M\nguileful\nguileless/YP\nguilelessness/M\nguillemot/S\nguillotine/DSMG\nguilt/M\nguiltily\nguiltiness/M\nguiltless\nguilty/PRT\nguinea/MS\nguise/ESM\nguitar/MS\nguitarist/SM\ngulag/SM\ngulch/MS\ngulden/MS\ngulf/MS\ngull/MDSG\ngullet/MS\ngullibility/M\ngullible\ngully/SM\ngulp/MDRSZG\ngulper/M\ngum/SM\ngumball/S\ngumbo/SM\ngumboil/SM\ngumboot/S\ngumdrop/SM\ngummed\ngumming\ngummy/TR\ngumption/M\ngumshoe/MDS\ngumshoeing\ngun/SM\ngunboat/SM\ngunfight/MRZS\ngunfighter/M\ngunfire/M\ngunge\ngungy\ngunk/M\ngunky\ngunman/M\ngunmen\ngunmetal/M\ngunned\ngunnel/MS\ngunner/MS\ngunnery/M\ngunning\ngunny/M\ngunnysack/MS\ngunpoint/M\ngunpowder/M\ngunrunner/MS\ngunrunning/M\ngunship/MS\ngunshot/MS\ngunslinger/SM\ngunsmith/M\ngunsmiths\ngunwale/MS\nguppy/SM\ngurgle/MGDS\ngurney/MS\nguru/MS\ngush/MDRSZG\ngusher/M\ngushing/Y\ngushy/TR\ngusset/MSDG\ngussy/DSG\ngust/EMDSG\ngustatory\ngustily\ngusto/M\ngusty/RT\ngut/SM\ngutless/P\ngutlessness/M\ngutsy/RT\ngutted\ngutter/SMDG\nguttersnipe/MS\ngutting\nguttural/MS\ngutty/RT\nguv/S\nguvnor/S\nguy/SGMD\nguzzle/DRSZG\nguzzler/M\ngym/SM\ngymkhana/MS\ngymnasium/MS\ngymnast/MS\ngymnastic/S\ngymnastically\ngymnastics/M\ngymnosperm/SM\ngymslip/S\ngynecologic\ngynecological\ngynecologist/SM\ngynecology/M\ngyp/SM\ngypped\ngypper/SM\ngypping\ngypster/SM\ngypsum/M\ngypsy/SM\ngyrate/DSGNX\ngyration/M\ngyrator/SM\ngyrfalcon/MS\ngyro/MS\ngyroscope/MS\ngyroscopic\ngyve/MGDS\nh'm\nh/NRSXZGVJ\nha/SH\nhaberdasher/SM\nhaberdashery/SM\nhabiliment/SM\nhabit's\nhabit/ISB\nhabitability/M\nhabitat/SM\nhabitation/MS\nhabitual/YP\nhabitualness/M\nhabituate/GNDS\nhabituation/M\nhabitue/SM\nhacienda/SM\nhack/MDRZGS\nhacker/M\nhacking/M\nhackish\nhackle/MS\nhackney/SMDG\nhacksaw/SM\nhacktivist/MS\nhackwork/M\nhad\nhaddock/SM\nhadith\nhadn't\nhadst\nhafnium/M\nhaft/MS\nhag/SM\nhaggard/YP\nhaggardness/M\nhaggis/MS\nhaggish\nhaggle/MZGDRS\nhaggler/M\nhagiographer/SM\nhagiography/SM\nhahnium/M\nhaiku/M\nhail/MDGS\nhailstone/MS\nhailstorm/MS\nhair/MDS\nhairball/MS\nhairband/S\nhairbreadth/M\nhairbreadths\nhairbrush/MS\nhaircloth/M\nhaircut/SM\nhairdo/MS\nhairdresser/SM\nhairdressing/M\nhairdryer/MS\nhairgrip/S\nhairiness/M\nhairless\nhairlike\nhairline/SM\nhairnet/SM\nhairpiece/MS\nhairpin/SM\nhairsbreadth/M\nhairsbreadths\nhairsplitter/SM\nhairsplitting/M\nhairspray/S\nhairspring/MS\nhairstyle/MS\nhairstylist/SM\nhairy/TRP\nhaj\nhajj/M\nhajjes\nhajji/SM\nhake/MS\nhalal/M\nhalberd/SM\nhalcyon\nhale/ITGDRS\nhalf/M\nhalfback/SM\nhalfhearted/PY\nhalfheartedness/M\nhalfpence\nhalfpenny/SM\nhalftime/MS\nhalftone/MS\nhalfway\nhalfwit/SM\nhalibut/SM\nhalite/M\nhalitosis/M\nhall/MS\nhallelujah/M\nhallelujahs\nhallmark/GMDS\nhalloo/MSG\nhallow/DSG\nhallowed/U\nhallucinate/GNXDS\nhallucination/M\nhallucinatory\nhallucinogen/SM\nhallucinogenic/SM\nhallway/SM\nhalo/MDGS\nhalogen/SM\nhalon\nhalt/MDRZGS\nhalter/GMD\nhalterneck/S\nhalting/Y\nhalve/DSG\nhalyard/MS\nham/SM\nhamburg/SZMR\nhamburger/M\nhamlet/MS\nhammed\nhammer/MDRSJZG\nhammerer/M\nhammerhead/SM\nhammerlock/SM\nhammertoe/MS\nhamming\nhammock/SM\nhammy/TR\nhamper/GMDS\nhampered/U\nhamster/MS\nhamstring/GSM\nhamstrung\nhand's\nhand/UDGS\nhandbag/SM\nhandball/MS\nhandbarrow/SM\nhandbill/MS\nhandbook/MS\nhandbrake/S\nhandcar/SM\nhandcart/MS\nhandclasp/MS\nhandcraft/SMDG\nhandcuff/MDGS\nhanded/P\nhandful/SM\nhandgun/SM\nhandheld/MS\nhandhold/MS\nhandicap/MS\nhandicapped\nhandicapper/MS\nhandicapping\nhandicraft/MS\nhandily\nhandiness/M\nhandiwork/M\nhandkerchief/MS\nhandle/MZGDRS\nhandlebar/MS\nhandler/M\nhandmade\nhandmaid/XMNS\nhandmaiden/M\nhandout/SM\nhandover/S\nhandpick/GDS\nhandrail/MS\nhandsaw/SM\nhandset/SM\nhandshake/JMGS\nhandsome/PYTR\nhandsomeness/M\nhandspring/MS\nhandstand/SM\nhandwork/M\nhandwoven\nhandwriting/M\nhandwritten\nhandy/UTR\nhandyman/M\nhandymen\nhang/MDRJZGS\nhangar/MS\nhangdog\nhanger/M\nhanging/M\nhangman/M\nhangmen\nhangnail/MS\nhangout/SM\nhangover/MS\nhangup/MS\nhank/MRZS\nhanker/GJD\nhankering/M\nhankie/MS\nhansom/MS\nhap/MY\nhaphazard/YP\nhaphazardness/M\nhapless/YP\nhaplessness/M\nhaploid/MS\nhappen/SDGJ\nhappening/M\nhappenstance/SM\nhappily/U\nhappiness/UM\nhappy/URTP\nhaptic\nharangue/MGDS\nharass/LZGDRS\nharasser/M\nharassment/M\nharbinger/SM\nharbor/GMDS\nharbormaster/S\nhard/NRYXTP\nhardback/MS\nhardball/M\nhardboard/M\nhardbound\nhardcore\nhardcover/SM\nharden/ZGDR\nhardened/U\nhardener/M\nhardhat/MS\nhardheaded/PY\nhardheadedness/M\nhardhearted/PY\nhardheartedness/M\nhardihood/M\nhardily\nhardiness/M\nhardliner/MS\nhardness/M\nhardscrabble\nhardship/SM\nhardstand/SM\nhardtack/M\nhardtop/SM\nhardware/M\nhardwired\nhardwood/SM\nhardworking\nhardy/PTR\nhare/MGDS\nharebell/MS\nharebrained\nharelip/SM\nharelipped\nharem/SM\nharicot/S\nhark/DGS\nharlequin/SM\nharlot/SM\nharlotry/M\nharm/MDGS\nharmed/U\nharmful/YP\nharmfulness/M\nharmless/PY\nharmlessness/M\nharmonic/SM\nharmonica/MS\nharmonically\nharmonies\nharmonious/PY\nharmoniousness/M\nharmonium/MS\nharmonization/M\nharmonize/ZGDRS\nharmonizer/M\nharmony/EM\nharness's\nharness/UDSG\nharp/MDGS\nharpist/SM\nharpoon/ZGSMDR\nharpooner/M\nharpsichord/MS\nharpsichordist/SM\nharpy/SM\nharridan/MS\nharrier/M\nharrow/SMDG\nharrumph/GD\nharrumphs\nharry/DRSZG\nharsh/RYTP\nharshness/M\nhart/MS\nharvest/SMDRZG\nharvested/U\nharvester/M\nhash/AMDSG\nhashish/M\nhashtag/SM\nhasn't\nhasp/MS\nhassle/DSMG\nhassock/SM\nhast/DNXG\nhaste/SM\nhasten/DG\nhastily\nhastiness/M\nhasty/RTP\nhat/ZGSMDR\nhatband/S\nhatbox/MS\nhatch/MDSG\nhatchback/MS\nhatcheck/SM\nhatched/U\nhatchery/SM\nhatchet/SM\nhatching/M\nhatchway/SM\nhate/MS\nhateful/PY\nhatefulness/M\nhatemonger/MS\nhater/M\nhatpin/S\nhatred/SM\nhatstand/S\nhatted\nhatter/SM\nhatting\nhauberk/SM\nhaughtily\nhaughtiness/M\nhaughty/PRT\nhaul/MDRZGS\nhaulage/M\nhauler/M\nhaulier/S\nhaunch/MS\nhaunt/SMDRZG\nhaunter/M\nhaunting/Y\nhauteur/M\nhave/MGS\nhaven't\nhaven/SM\nhaversack/SM\nhavoc/M\nhaw/GSMD\nhawk/MDRZGS\nhawker/M\nhawkish/P\nhawkishness/M\nhawser/SM\nhawthorn/MS\nhay/GSMD\nhaycock/SM\nhayloft/SM\nhaymaker/S\nhaymaking\nhaymow/SM\nhayrick/MS\nhayride/MS\nhayseed/MS\nhaystack/SM\nhaywire\nhazard/SMDG\nhazardous/Y\nhaze/MZGJDRS\nhazel/SM\nhazelnut/MS\nhazer/M\nhazily\nhaziness/M\nhazing/M\nhazmat\nhazy/RTP\nhdqrs\nhe'd\nhe'll\nhe/M\nhead/MDRZGJS\nheadache/MS\nheadband/MS\nheadbanger/S\nheadbanging\nheadboard/SM\nheadbutt/DSG\nheadcase/S\nheadcheese\nheadcount/S\nheaddress/MS\nheader/M\nheadfirst\nheadgear/M\nheadhunt/DRSZG\nheadhunter/M\nheadhunting/M\nheadily\nheadiness/M\nheading/M\nheadlamp/MS\nheadland/MS\nheadless\nheadlight/MS\nheadline/MZGDRS\nheadliner/M\nheadlock/MS\nheadlong\nheadman/M\nheadmaster/SM\nheadmen\nheadmistress/MS\nheadphone/MS\nheadpiece/MS\nheadpin/SM\nheadquarter/SDG\nheadquarters/M\nheadrest/MS\nheadroom/M\nheadscarf\nheadscarves\nheadset/SM\nheadship/SM\nheadshrinker/SM\nheadsman/M\nheadsmen\nheadstall/SM\nheadstand/SM\nheadstone/SM\nheadstrong\nheadteacher/S\nheadwaiter/SM\nheadwaters/M\nheadway/M\nheadwind/SM\nheadword/SM\nheady/RTP\nheal/DRHZGS\nhealed/U\nhealer/M\nhealth/M\nhealthcare\nhealthful/PY\nhealthfulness/M\nhealthily/U\nhealthiness/UM\nhealthy/UTRP\nheap/MDGS\nhear/AHGJS\nheard/AU\nhearer/SM\nhearing/AM\nhearken/SGD\nhearsay/M\nhearse's\nhearse/AS\nheart/SM\nheartache/MS\nheartbeat/MS\nheartbreak/SMG\nheartbroken\nheartburn/M\nhearten/ESGD\nheartfelt\nhearth/M\nhearthrug/S\nhearths\nhearthstone/SM\nheartily\nheartiness/M\nheartland/MS\nheartless/PY\nheartlessness/M\nheartrending/Y\nheartsick/P\nheartsickness/M\nheartstrings/M\nheartthrob/MS\nheartwarming\nheartwood/M\nhearty/RSMPT\nheat's\nheat/ADGS\nheated/U\nheatedly\nheater/SM\nheath/MNRX\nheathen/M\nheathendom/M\nheathenish\nheathenism/M\nheather/M\nheaths\nheating/M\nheatproof\nheatstroke/M\nheatwave/S\nheave/DRSMZG\nheaven/SMY\nheavenly/TR\nheavens/M\nheavenward/S\nheaver/M\nheavily\nheaviness/M\nheavy/RSMTP\nheavyhearted\nheavyset\nheavyweight/MS\nheck/M\nheckle/DRSMZG\nheckler/M\nheckling/M\nhectare/SM\nhectic\nhectically\nhectogram/SM\nhectometer/MS\nhector/SMDG\nhedge/DRSMZG\nhedgehog/MS\nhedgehop/S\nhedgehopped\nhedgehopping\nhedger/M\nhedgerow/SM\nhedonism/M\nhedonist/MS\nhedonistic\nheed/MDGS\nheeded/U\nheedful/Y\nheedless/PY\nheedlessness/M\nheehaw/SMDG\nheel/MDGS\nheelless\nheft/MDGS\nheftily\nheftiness/M\nhefty/PRT\nhegemonic\nhegemony/M\nhegira/SM\nheifer/SM\nheight/XSMN\nheighten/DG\nheinous/YP\nheinousness/M\nheir/MS\nheiress/MS\nheirloom/SM\nheist/SMDG\nheld\nhelical\nhelices\nhelicopter/SGMD\nheliocentric\nheliotrope/SM\nhelipad/S\nheliport/MS\nhelium/M\nhelix/M\nhell/M\nhellbent\nhellcat/MS\nhellebore/M\nhellfire\nhellhole/MS\nhellion/MS\nhellish/YP\nhellishness/M\nhello/SM\nhelluva\nhelm/MS\nhelmet/SMD\nhelmsman/M\nhelmsmen\nhelot/SM\nhelp/MDRZGSJ\nhelper/M\nhelpful/UY\nhelpfulness/M\nhelping/M\nhelpless/PY\nhelplessness/M\nhelpline/SM\nhelpmate/SM\nhelve/SM\nhem/SM\nhematite/M\nhematologic\nhematological\nhematologist/MS\nhematology/M\nheme/M\nhemiplegia\nhemisphere/SM\nhemispheric\nhemispherical\nhemline/SM\nhemlock/SM\nhemmed\nhemmer/SM\nhemming\nhemoglobin/M\nhemophilia/M\nhemophiliac/MS\nhemorrhage/MGDS\nhemorrhagic\nhemorrhoid/MS\nhemostat/MS\nhemp/MN\nhemstitch/MDSG\nhen/M\nhence\nhenceforth\nhenceforward\nhenchman/M\nhenchmen\nhenna/SMDG\nhenpeck/GSD\nhep\nheparin/M\nhepatic\nhepatitis/M\nhepatocyte/S\nhepper\nheppest\nheptagon/MS\nheptagonal\nheptathlon/SM\nherald/SMDG\nheralded/U\nheraldic\nheraldry/M\nherb/MS\nherbaceous\nherbage/M\nherbal/S\nherbalist/MS\nherbicidal\nherbicide/MS\nherbivore/SM\nherbivorous\nherculean\nherd/MDRZGS\nherder/M\nherdsman/M\nherdsmen\nhere/M\nhereabout/S\nhereafter/SM\nhereby\nhereditary\nheredity/M\nherein\nhereinafter\nhereof\nhereon\nheresy/SM\nheretic/SM\nheretical\nhereto\nheretofore\nhereunder\nhereunto\nhereupon\nherewith\nheritable/I\nheritage/MS\nhermaphrodite/SM\nhermaphroditic\nhermetic\nhermetical/Y\nhermit/SM\nhermitage/MS\nhermitian\nhernia/SM\nhernial\nherniate/GNDS\nherniation/M\nhero/M\nheroes\nheroic/S\nheroically\nheroics/M\nheroin/SM\nheroine/SM\nheroism/M\nheron/SM\nherpes/M\nherpetologist/SM\nherpetology/M\nherring/MS\nherringbone/M\nherself\nhertz/M\nhesitance/M\nhesitancy/M\nhesitant/Y\nhesitate/DSGNX\nhesitating/UY\nhesitation/M\nhessian\nhetero/SM\nheterodox\nheterodoxy/M\nheterogeneity/M\nheterogeneous/Y\nheterosexual/MYS\nheterosexuality/M\nheuristic/MS\nheuristically\nheuristics/M\nhew/ZGSDR\nhewer/M\nhex/GMDS\nhexadecimal/S\nhexagon/MS\nhexagonal\nhexagram/SM\nhexameter/SM\nhey\nheyday/SM\nhf\nhgt\nhgwy\nhi/SD\nhiatus/MS\nhibachi/MS\nhibernate/GNDS\nhibernation/M\nhibernator/MS\nhibiscus/MS\nhiccough/DG\nhiccoughs\nhiccup/GSMD\nhick/MS\nhickey/SM\nhickory/SM\nhid\nhidden\nhide/MZGJDRS\nhideaway/SM\nhidebound\nhideous/YP\nhideousness/M\nhideout/MS\nhider/M\nhiding/M\nhie/S\nhieing\nhierarchic\nhierarchical/Y\nhierarchy/SM\nhieroglyph/M\nhieroglyphic/MS\nhieroglyphs\nhigh/MRYZTP\nhighball/SM\nhighborn\nhighboy/MS\nhighbrow/SM\nhighchair/MS\nhighfalutin\nhighhanded/PY\nhighhandedness/M\nhighland/MRZS\nhighlander/M\nhighlight/SMDRZG\nhighlighter/M\nhighness/M\nhighroad/MS\nhighs\nhightail/DSG\nhighway/MS\nhighwayman/M\nhighwaymen\nhijab/SM\nhijack/SJZGMDR\nhijacker/M\nhijacking/M\nhike/MZGDRS\nhiker/M\nhiking/M\nhilarious/PY\nhilariousness/M\nhilarity/M\nhill/MS\nhillbilly/SM\nhilliness/M\nhillock/MS\nhillside/SM\nhilltop/MS\nhilly/PRT\nhilt/MS\nhim/S\nhimself\nhind/MRZS\nhinder/GD\nhindered/U\nhindmost\nhindquarter/MS\nhindrance/SM\nhindsight/M\nhinge's\nhinge/UDSG\nhint/MDRZGS\nhinter/M\nhinterland/SM\nhip/SPM\nhipbath\nhipbaths\nhipbone/MS\nhiphuggers\nhipness/M\nhipped\nhipper\nhippest\nhippie/SM\nhipping\nhippo/SM\nhippocampus\nhippodrome/SM\nhippopotamus/MS\nhippy\nhipster/MS\nhiragana\nhire's\nhire/AGDS\nhireling/MS\nhirsute/P\nhirsuteness/M\nhiss/MDSG\nhist\nhistamine/MS\nhistogram/MS\nhistologist/SM\nhistology/M\nhistopathology\nhistorian/MS\nhistoric\nhistorical/Y\nhistoricity/M\nhistoriographer/MS\nhistoriography/M\nhistory/SM\nhistrionic/S\nhistrionically\nhistrionics/M\nhit/SM\nhitch's\nhitch/UDSG\nhitcher/MS\nhitchhike/DRSMZG\nhitchhiker/M\nhither\nhitherto\nhitter/SM\nhitting\nhive/MGDS\nhiya\nhmm\nho/SMDRYZ\nhoagie/MS\nhoard/SZGMDRJ\nhoarder/M\nhoarding/M\nhoarfrost/M\nhoariness/M\nhoarse/YTRP\nhoarseness/M\nhoary/TRP\nhoax/MDRSZG\nhoaxer/M\nhob/SM\nhobbit/S\nhobble/MZGDRS\nhobbler/M\nhobby/SM\nhobbyhorse/MS\nhobbyist/SM\nhobgoblin/MS\nhobnail/SGMD\nhobnob/S\nhobnobbed\nhobnobbing\nhobo/MS\nhock/MDSG\nhockey/M\nhockshop/MS\nhod/SM\nhodgepodge/SM\nhoe/SM\nhoecake/SM\nhoedown/SM\nhoeing\nhoer/M\nhog/SM\nhogan/SM\nhogback/SM\nhogged\nhogging\nhoggish/Y\nhogshead/SM\nhogtie/DS\nhogtying\nhogwash/M\nhoick/SGD\nhoist/SGMD\nhoke/GDS\nhokey\nhokier\nhokiest\nhokum/M\nhold/MRJSZG\nholdall/S\nholder/M\nholding/M\nholdout/SM\nholdover/SM\nholdup/MS\nhole/MGDS\nholey\nholiday/SMDG\nholidaymaker/S\nholiness/UM\nholism\nholistic\nholistically\nholler/MDGS\nhollow/MDRYPSTG\nhollowness/M\nholly/SM\nhollyhock/MS\nholmium/M\nholocaust/SM\nhologram/MS\nholograph/M\nholographic\nholographs\nholography/M\nhols\nholster/SMDG\nholy/URPT\nhomage/MS\nhombre/MS\nhomburg/SM\nhome/MYZGDRS\nhomebody/SM\nhomeboy/SM\nhomecoming/SM\nhomegrown\nhomeland/MS\nhomeless/MP\nhomelessness/M\nhomelike\nhomeliness/M\nhomely/PRT\nhomemade\nhomemaker/SM\nhomemaking/M\nhomeopath/M\nhomeopathic\nhomeopaths\nhomeopathy/M\nhomeostasis/M\nhomeostatic\nhomeowner/MS\nhomepage/MS\nhomer/GMD\nhomeroom/MS\nhomeschooling/M\nhomesick/P\nhomesickness/M\nhomespun/M\nhomestead/SMDRZG\nhomesteader/M\nhomestretch/MS\nhometown/MS\nhomeward/S\nhomework/MRZG\nhomewrecker/SM\nhomey/SMP\nhomeyness/M\nhomicidal\nhomicide/MS\nhomier\nhomiest\nhomiletic\nhomily/SM\nhominid/SM\nhominoid/S\nhominy/M\nhomo/MS\nhomoerotic\nhomogeneity/M\nhomogeneous/Y\nhomogenization/M\nhomogenize/DSG\nhomograph/M\nhomographs\nhomologous\nhomology\nhomonym/SM\nhomophobia/M\nhomophobic\nhomophone/MS\nhomosexual/SM\nhomosexuality/M\nhon/SZTGMDR\nhoncho/MS\nhone/MS\nhoner/M\nhonest/EYT\nhonester\nhonesty/EM\nhoney/SGMD\nhoneybee/SM\nhoneycomb/MDSG\nhoneydew/SM\nhoneylocust/M\nhoneymoon/ZGMDRS\nhoneymooner/M\nhoneypot/S\nhoneysuckle/SM\nhonk/MDRSZG\nhonker/M\nhonky/SM\nhonor/ESGMDB\nhonorableness/M\nhonorably/E\nhonorarily\nhonorarium/MS\nhonorary\nhonoree/SM\nhonorer/SM\nhonorific/MS\nhooch/M\nhood/MDSG\nhoodie/MS\nhoodlum/SM\nhoodoo/MDSG\nhoodwink/DGS\nhooey/M\nhoof/MDRSZG\nhook's\nhook/UDSG\nhookah/M\nhookahs\nhooker/MS\nhookup/MS\nhookworm/MS\nhooky/M\nhooligan/MS\nhooliganism/M\nhoop/MDSG\nhoopla/M\nhooray\nhoosegow/SM\nhoot/MDRSZG\nhootenanny/SM\nhooter/M\nhoover/DSG\nhooves\nhop/SGMD\nhope/MS\nhopeful/PSMY\nhopefulness/M\nhopeless/YP\nhopelessness/M\nhopped\nhopper/MS\nhopping\nhopscotch/MDSG\nhora/MS\nhorde/DSMG\nhorehound/SM\nhorizon/SM\nhorizontal/SMY\nhormonal\nhormone/SM\nhorn/MDS\nhornbeam\nhornblende/M\nhornet/MS\nhornless\nhornlike\nhornpipe/MS\nhorny/TR\nhorologic\nhorological\nhorologist/MS\nhorology/M\nhoroscope/SM\nhorrendous/Y\nhorrible/P\nhorribleness/M\nhorribly\nhorrid/Y\nhorrific\nhorrifically\nhorrify/DSG\nhorrifying/Y\nhorror/MS\nhorse's\nhorse/UDSG\nhorseback/M\nhorsebox/S\nhorseflesh/M\nhorsefly/SM\nhorsehair/M\nhorsehide/M\nhorselaugh/M\nhorselaughs\nhorseless\nhorseman/M\nhorsemanship/M\nhorsemen\nhorseplay/M\nhorsepower/M\nhorseradish/MS\nhorseshit/!\nhorseshoe/DSM\nhorseshoeing\nhorsetail/SM\nhorsetrading\nhorsewhip/SM\nhorsewhipped\nhorsewhipping\nhorsewoman/M\nhorsewomen\nhorsey\nhorsier\nhorsiest\nhortatory\nhorticultural\nhorticulturalist/S\nhorticulture/M\nhorticulturist/MS\nhosanna/SM\nhose/MGDS\nhosepipe/S\nhosier/MS\nhosiery/M\nhosp\nhospholipase\nhospice/MS\nhospitable/I\nhospitably/I\nhospital/SM\nhospitality/M\nhospitalization/SM\nhospitalize/DSG\nhost/MDSG\nhostage/MS\nhostel/ZGMDRS\nhosteler/M\nhostelry/SM\nhostess/MDSG\nhostile/MYS\nhostilities/M\nhostility/SM\nhostler/MS\nhot/SYP\nhotbed/MS\nhotblooded\nhotbox/MS\nhotcake/SM\nhotel/SM\nhotelier/MS\nhotfoot/MDGS\nhothead/DSM\nhotheaded/YP\nhotheadedness/M\nhothouse/SM\nhotkey/S\nhotlink/S\nhotness/M\nhotplate/SM\nhotpot/S\nhots/M\nhotshot/MS\nhotted\nhotter\nhottest\nhottie/S\nhotting\nhound/SGMD\nhour/MYS\nhourglass/MS\nhouri/SM\nhouse's\nhouse/ADSG\nhouseboat/SM\nhousebound\nhouseboy/SM\nhousebreak/RSZG\nhousebreaker/M\nhousebreaking/M\nhousebroke\nhousebroken\nhouseclean/DSG\nhousecleaning/M\nhousecoat/SM\nhousefly/SM\nhouseful/SM\nhousehold/SMRZ\nhouseholder/M\nhousehusband/SM\nhousekeeper/MS\nhousekeeping/M\nhouselights/M\nhousemaid/SM\nhouseman/M\nhousemaster/S\nhousemate/S\nhousemen\nhousemistress/S\nhousemother/SM\nhouseparent/SM\nhouseplant/MS\nhouseproud\nhouseroom\nhousetop/SM\nhousewares/M\nhousewarming/SM\nhousewife/MY\nhousewives\nhousework/M\nhousing/MS\nhove\nhovel/SM\nhover/SGD\nhovercraft/M\nhow'd\nhow're\nhow/SM\nhowbeit\nhowdah/M\nhowdahs\nhowdy\nhowever\nhowitzer/SM\nhowl/MDRSZG\nhowler/M\nhowsoever\nhoyden/MS\nhoydenish\nhp\nhr/S\nht\nhuarache/SM\nhub/SM\nhubbub/SM\nhubby/SM\nhubcap/SM\nhubris/M\nhuckleberry/SM\nhuckster/SGMD\nhucksterism/M\nhuddle/DSMG\nhue/DSM\nhuff/MDSG\nhuffily\nhuffiness/M\nhuffy/PRT\nhug/STMR\nhuge/YP\nhugeness/M\nhugged\nhugging\nhuh\nhula/MS\nhulk/MSG\nhull/MDRSZG\nhullabaloo/SM\nhuller/M\nhum/SM\nhuman/SMRYTP\nhumane/PY\nhumaneness/M\nhumanism/M\nhumanist/SM\nhumanistic\nhumanitarian/MS\nhumanitarianism/M\nhumanities/M\nhumanity/ISM\nhumanization/CM\nhumanize/CDSG\nhumanizer/SM\nhumankind/M\nhumanness/M\nhumanoid/SM\nhumble/DRSZTGJP\nhumbleness/M\nhumbler/M\nhumbly\nhumbug/SM\nhumbugged\nhumbugging\nhumdinger/MS\nhumdrum/M\nhumeral\nhumeri\nhumerus/M\nhumid/Y\nhumidification/M\nhumidifier/CM\nhumidify/CZGDRS\nhumidity/M\nhumidor/SM\nhumiliate/DSGNX\nhumiliating/Y\nhumiliation/M\nhumility/M\nhummed\nhummer/SM\nhumming\nhummingbird/SM\nhummock/SM\nhummocky\nhummus/M\nhumongous\nhumor/SMDG\nhumoresque\nhumorist/MS\nhumorless/YP\nhumorlessness/M\nhumorous/PY\nhumorousness/M\nhump/MDSG\nhumpback/MDS\nhumph/DG\nhumphs\nhumus/M\nhunch/MDSG\nhunchback/SMD\nhundred/SMH\nhundredfold\nhundredth/M\nhundredths\nhundredweight/SM\nhung\nhunger/SMDG\nhungover\nhungrily\nhungriness/M\nhungry/PRT\nhunk/MRSZ\nhunker/DG\nhunky/RT\nhunt/MDRSZG\nhunter/M\nhunting/M\nhuntress/MS\nhuntsman/M\nhuntsmen\nhurdle/DRSMZG\nhurdler/M\nhurdling/M\nhurl/MDRSZG\nhurler/M\nhurling/M\nhurrah/GMD\nhurrahs\nhurricane/MS\nhurried/UY\nhurry/DSMG\nhurt/MSG\nhurtful/YP\nhurtfulness/M\nhurtle/DSG\nhusband/GMDS\nhusbandman/M\nhusbandmen\nhusbandry/M\nhush/MDSG\nhusk/MDRSZG\nhusker/M\nhuskily\nhuskiness/M\nhusky/PRSMT\nhussar/SM\nhussy/SM\nhustings/M\nhustle/DRSMZG\nhustler/M\nhut/SM\nhutch/MS\nhuzzah/MDG\nhuzzahs\nhwy\nhyacinth/M\nhyacinths\nhybrid/SM\nhybridism/M\nhybridization/M\nhybridize/DSG\nhydra/SM\nhydrangea/SM\nhydrant/MS\nhydrate's\nhydrate/CGNDS\nhydration/CM\nhydraulic/S\nhydraulically\nhydraulics/M\nhydro/M\nhydrocarbon/MS\nhydrocephalus/M\nhydrochloride\nhydrocortisone\nhydrodynamic/S\nhydrodynamics/M\nhydroelectric\nhydroelectrically\nhydroelectricity/M\nhydrofoil/MS\nhydrogen/M\nhydrogenate/CGDS\nhydrogenation/M\nhydrogenous\nhydrologist/MS\nhydrology/M\nhydrolyses\nhydrolysis/M\nhydrolyze/DSG\nhydrometer/SM\nhydrometry/M\nhydrophilic\nhydrophobia/M\nhydrophobic\nhydrophone/SM\nhydroplane/GDSM\nhydroponic/S\nhydroponically\nhydroponics/M\nhydrosphere/M\nhydrotherapy/M\nhydrothermal\nhydrous\nhydroxide/SM\nhyena/SM\nhygiene/M\nhygienic/U\nhygienically\nhygienist/MS\nhygrometer/SM\nhying\nhymen/SM\nhymeneal\nhymn/MDSG\nhymnal/MS\nhymnbook/SM\nhype/MGDRS\nhyperactive\nhyperactivity/M\nhyperbola/SM\nhyperbole/M\nhyperbolic\nhypercritical/Y\nhypercube\nhyperglycemia/M\nhyperinflation\nhyperlink/GSMD\nhypermarket/S\nhypermedia/M\nhyperparathyroidism\nhyperplane\nhypersensitive/P\nhypersensitiveness/M\nhypersensitivity/SM\nhyperspace/S\nhypertension/M\nhypertensive/SM\nhypertext/M\nhyperthyroid/M\nhyperthyroidism/M\nhypertrophy/DSMG\nhyperventilate/GNDS\nhyperventilation/M\nhypervisor/MS\nhyphen/MDSG\nhyphenate/XDSMGN\nhyphenation/M\nhypnoses\nhypnosis/M\nhypnotherapist/S\nhypnotherapy/M\nhypnotic/SM\nhypnotically\nhypnotism/M\nhypnotist/MS\nhypnotize/GDS\nhypo/MS\nhypoallergenic\nhypochondria/M\nhypochondriac/SM\nhypocrisy/SM\nhypocrite/MS\nhypocritical/Y\nhypodermic/MS\nhypoglycemia/M\nhypoglycemic/SM\nhypotenuse/MS\nhypothalami\nhypothalamus/M\nhypothermia/M\nhypotheses\nhypothesis/M\nhypothesize/DSG\nhypothetical/Y\nhypothyroid/M\nhypothyroidism/M\nhyssop/M\nhysterectomy/SM\nhysteresis\nhysteria/M\nhysteric/SM\nhysterical/Y\nhysterics/M\ni/US\niOS/M\niPad/M\niPhone/M\niPod/M\niTunes/M\niamb/MS\niambi\niambic/SM\niambus/MS\nibex/MS\nibid\nibidem\nibis/MS\nibuprofen/M\nice's\nice/CDSG\niceberg/SM\niceboat/SM\nicebound\nicebox/MS\nicebreaker/SM\nicecap/SM\niceman/M\nicemen\nichthyologist/MS\nichthyology/M\nicicle/SM\nicily\niciness/M\nicing/SM\nicky/RT\nicon/MS\niconic\niconoclasm/M\niconoclast/SM\niconoclastic\niconography/M\nictus/M\nicy/TPR\nid/SMY\nidea/MS\nideal/SMY\nidealism/M\nidealist/SM\nidealistic\nidealistically\nidealization/MS\nidealize/DSG\nidem\nidempotent\nidentical/Y\nidentifiable/U\nidentification/M\nidentified/U\nidentify/ZGNDRSX\nidentikit/S\nidentity/SM\nideogram/SM\nideograph/M\nideographs\nideological/Y\nideologist/SM\nideologue/MS\nideology/SM\nides/M\nidiocy/SM\nidiom/SM\nidiomatic/U\nidiomatically\nidiopathic\nidiosyncrasy/SM\nidiosyncratic\nidiosyncratically\nidiot/SM\nidiotic\nidiotically\nidle/MZTGDRSP\nidleness/M\nidler/M\nidol/MS\nidolater/SM\nidolatress/MS\nidolatrous\nidolatry/M\nidolization/M\nidolize/GDS\nidyll/SM\nidyllic\nidyllically\nif/SM\niffiness/M\niffy/RTP\nigloo/SM\nigneous\nignitable\nignite/AGDS\nignition/MS\nignoble\nignobly\nignominious/Y\nignominy/SM\nignoramus/MS\nignorance/M\nignorant/Y\nignore/GDS\niguana/MS\nii\niii\nilea\nileitis/M\nileum/M\nilia\nilium/M\nilk/SM\nill/SMP\nillegal/MYS\nillegality/SM\nillegibility/M\nillegible\nillegibly\nillegitimacy/M\nillegitimate/Y\nilliberal/Y\nilliberality/M\nillicit/YP\nillicitness/M\nillimitable\nilliteracy/M\nilliterate/MYS\nillness/MS\nillogical/Y\nillogicality/M\nilluminate/GNXDS\nilluminating/Y\nillumination/M\nillumine/DSBG\nillus/V\nillusion/EMS\nillusionist/SM\nillusory\nillustrate/GNVXDS\nillustration/M\nillustrative/Y\nillustrator/SM\nillustrious/PY\nillustriousness/M\nimage/DSMG\nimagery/M\nimaginable/U\nimaginably/U\nimaginal\nimaginary\nimagination/MS\nimaginative/UY\nimagine/DSBJG\nimago/M\nimagoes\nimam/MS\nimbalance/DSM\nimbecile/MS\nimbecilic\nimbecility/SM\nimbibe/ZGDRS\nimbiber/M\nimbrication/M\nimbroglio/SM\nimbue/DSG\nimitable/I\nimitate/DSGNVX\nimitation/M\nimitative/PY\nimitativeness/M\nimitator/SM\nimmaculate/PY\nimmaculateness/M\nimmanence/M\nimmanency/M\nimmanent/Y\nimmaterial/YP\nimmateriality/M\nimmaterialness/M\nimmature/Y\nimmaturity/M\nimmeasurable\nimmeasurably\nimmediacies/M\nimmediacy/SM\nimmediate/PY\nimmediateness/M\nimmemorial/Y\nimmense/Y\nimmensity/SM\nimmerse/XDSGNV\nimmersible\nimmersion/M\nimmigrant/SM\nimmigrate/DSGN\nimmigration/M\nimminence/M\nimminent/Y\nimmobile\nimmobility/M\nimmobilization/M\nimmobilize/ZGDRS\nimmoderate/Y\nimmodest/Y\nimmodesty/M\nimmolate/DSGN\nimmolation/M\nimmoral/Y\nimmorality/SM\nimmortal/MYS\nimmortality/M\nimmortalize/DSG\nimmovability/M\nimmovable\nimmovably\nimmune\nimmunity/M\nimmunization/SM\nimmunize/GDS\nimmunodeficiency/M\nimmunodeficient\nimmunoglobulin/S\nimmunologic\nimmunological\nimmunologist/MS\nimmunology/M\nimmure/DSG\nimmutability/M\nimmutable\nimmutably\nimp/SMR\nimpact/SMDG\nimpair/SDGL\nimpaired/U\nimpairment/MS\nimpala/SM\nimpale/DSGL\nimpalement/M\nimpalpable\nimpalpably\nimpanel/SDG\nimpart/SDG\nimpartial/Y\nimpartiality/M\nimpassably\nimpasse/BSMV\nimpassibility/M\nimpassible\nimpassibly\nimpassioned\nimpassive/YP\nimpassiveness/M\nimpassivity/M\nimpasto/M\nimpatience/MS\nimpatiens/M\nimpatient/Y\nimpeach/ZGBLDRS\nimpeachable/U\nimpeacher/M\nimpeachment/SM\nimpeccability/M\nimpeccable\nimpeccably\nimpecunious/PY\nimpecuniousness/M\nimpedance/M\nimpede/DSG\nimpeded/U\nimpediment/SM\nimpedimenta/M\nimpel/S\nimpelled\nimpeller/MS\nimpelling\nimpend/SDG\nimpenetrability/M\nimpenetrable\nimpenetrably\nimpenitence/M\nimpenitent/Y\nimperative/SMY\nimperceptibility/M\nimperceptible\nimperceptibly\nimperceptive\nimperf\nimperfect/SMYP\nimperfection/MS\nimperfectness/M\nimperial/MYS\nimperialism/M\nimperialist/SM\nimperialistic\nimperialistically\nimperil/GSLD\nimperilment/M\nimperious/PY\nimperiousness/M\nimperishable\nimperishably\nimpermanence/M\nimpermanent/Y\nimpermeability/M\nimpermeable\nimpermeably\nimpermissible\nimpersonal/Y\nimpersonate/GNXDS\nimpersonation/M\nimpersonator/SM\nimpertinence/MS\nimpertinent/Y\nimperturbability/M\nimperturbable\nimperturbably\nimpervious/Y\nimpetigo/M\nimpetuosity/M\nimpetuous/YP\nimpetuousness/M\nimpetus/MS\nimpiety/SM\nimpinge/LDSG\nimpingement/M\nimpious/PY\nimpiousness/M\nimpish/YP\nimpishness/M\nimplacability/M\nimplacable\nimplacably\nimplant/BSGMD\nimplantation/M\nimplausibility/SM\nimplausible\nimplausibly\nimplement/GBMDRS\nimplementable/U\nimplementation/SM\nimplemented/U\nimplicate/DSG\nimplication/M\nimplicit/PY\nimplicitness/M\nimplode/DSG\nimplore/DSG\nimploring/Y\nimplosion/MS\nimplosive\nimply/XDSGN\nimpolite/YP\nimpoliteness/MS\nimpolitic\nimponderable/MS\nimport/ZGBSMDR\nimportance/M\nimportant/Y\nimportation/MS\nimporter/M\nimportunate/Y\nimportune/GDS\nimportunity/M\nimpose/ADSG\nimposer/MS\nimposing/U\nimposingly\nimposition/MS\nimpossibility/SM\nimpossible/S\nimpossibly\nimpost/SM\nimpostor/SM\nimposture/MS\nimpotence/M\nimpotency/M\nimpotent/Y\nimpound/DGS\nimpoverish/DSLG\nimpoverishment/M\nimpracticability\nimpracticable\nimpracticably\nimpractical/Y\nimpracticality/M\nimprecate/DSXGN\nimprecation/M\nimprecise/PYN\nimpreciseness/M\nimprecision/M\nimpregnability/M\nimpregnable\nimpregnably\nimpregnate/GNDS\nimpregnation/M\nimpresario/SM\nimpress/MDSGV\nimpressed/U\nimpressibility/M\nimpressible\nimpression/BSM\nimpressionability/M\nimpressionism/M\nimpressionist/SM\nimpressionistic\nimpressive/PY\nimpressiveness/M\nimprimatur/SM\nimprint/MDRZGS\nimprinter/M\nimprison/SDLG\nimprisonment/SM\nimprobability/SM\nimprobable\nimprobably\nimpromptu/SM\nimproper/Y\nimpropriety/SM\nimprove/GBDSL\nimproved/U\nimprovement/MS\nimprovidence/M\nimprovident/Y\nimprovisation/SM\nimprovisational\nimprovise/ZGDRS\nimproviser/M\nimprudence/M\nimprudent/Y\nimpudence/M\nimpudent/Y\nimpugn/ZGSDR\nimpugner/M\nimpulse/MGNVDS\nimpulsion/M\nimpulsive/PY\nimpulsiveness/M\nimpulsivity\nimpunity/M\nimpure/RYT\nimpurity/SM\nimputation/SM\nimpute/BDSG\nin/ASM\ninaccuracy/S\ninaction/M\ninadequacy/S\ninadvertence/M\ninadvertent/Y\ninalienability/M\ninalienably\ninamorata/SM\ninane/RYT\ninanimate/PY\ninanimateness/M\ninanity/SM\ninappropriate/Y\ninarticulate/Y\ninasmuch\ninaudible\ninaugural/SM\ninaugurate/XGNDS\ninauguration/M\ninboard/MS\ninbound\ninbox/MS\ninbreed/S\ninc/TGD\nincalculably\nincandescence/M\nincandescent/Y\nincantation/SM\nincapacitate/GNDS\nincarcerate/XDSGN\nincarceration/M\nincarnadine/DSG\nincarnate/AXGNDS\nincarnation/AM\nincendiary/SM\nincense/MGDS\nincentive's\nincentive/ES\ninception/SM\nincessant/Y\nincest/M\nincestuous/PY\nincestuousness/M\ninch/MDSG\ninchoate\ninchworm/SM\nincidence/SM\nincident/SM\nincidental/MYS\nincinerate/DSGN\nincineration/M\nincinerator/MS\nincipience/M\nincipient/Y\nincise/XGNVDS\nincision/M\nincisive/PY\nincisiveness/M\nincisor/MS\nincitement/MS\ninciter/MS\nincl\ninclement\ninclination/EM\ninclinations\nincline's\nincline/EGDS\ninclude/GDS\ninclusion/MS\ninclusive/YP\ninclusiveness/M\nincognito/MS\nincombustible\nincommode/GD\nincommodious\nincommunicado\nincompatibility/S\nincompetent/MS\nincomplete/Y\ninconceivability/M\nincongruous/PY\nincongruousness/M\ninconsolably\ninconstant/Y\nincontestability/M\nincontestably\nincontinent\nincontrovertibly\ninconvenience/GD\nincorporate/ADSGN\nincorporated/U\nincorporation/AM\nincorporeal\nincorrect/Y\nincorrigibility/M\nincorrigible\nincorrigibly\nincorruptibly\nincreasing/Y\nincrement/SMDG\nincremental/Y\nincrementalism\nincrementalist/SM\nincriminate/GNDS\nincrimination/M\nincriminatory\nincrustation/SM\nincubate/GNDS\nincubation/M\nincubator/SM\nincubus/MS\ninculcate/DSGN\ninculcation/M\ninculpate/DSG\nincumbency/SM\nincumbent/SM\nincunabula\nincunabulum/M\nincur/SB\nincurable/MS\nincurably\nincurious\nincurred\nincurring\nincursion/MS\nind\nindebted/P\nindebtedness/M\nindeed\nindefatigable\nindefatigably\nindefeasible\nindefeasibly\nindefinably\nindelible\nindelibly\nindemnification/M\nindemnify/GDSXN\nindemnity/SM\nindentation/MS\nindention/M\nindenture/DG\nindescribably\nindestructibly\nindeterminably\nindeterminacy/M\nindeterminate/Y\nindex/ZGMDRS\nindexation/SM\nindexer/M\nindicate/XDSGNV\nindication/M\nindicative/SMY\nindicator/MS\nindict/GDSBL\nindictment/SM\nindie/S\nindigence/M\nindigenous\nindigent/SMY\nindignant/Y\nindignation/M\nindigo/M\nindirect/Y\nindiscipline\nindiscreet/Y\nindiscretion/S\nindiscriminate/Y\nindispensability/M\nindispensable/MS\nindispensably\nindissolubility\nindissolubly\nindistinguishably\nindite/GDS\nindium/M\nindividual/MYS\nindividualism/M\nindividualist/MS\nindividualistic\nindividualistically\nindividuality/M\nindividualization/M\nindividualize/GDS\nindividuate/DSGN\nindividuation/M\nindivisibly\nindoctrinate/GNDS\nindoctrination/M\nindolence/M\nindolent/Y\nindomitable\nindomitably\nindubitable\nindubitably\ninduce/DRSZGL\ninducement/SM\ninducer/M\ninduct/DGV\ninductance/M\ninductee/SM\ninduction/MS\ninductive/Y\nindulge/DSG\nindulgence/SM\nindulgent/Y\nindustrial/Y\nindustrialism/M\nindustrialist/SM\nindustrialization/M\nindustrialize/DSG\nindustrious/YP\nindustriousness/M\nindustry/SM\nindwell/SG\ninebriate/MGNDS\ninebriation/M\ninedible\nineffability/M\nineffable\nineffably\ninelastic\nineligible/MS\nineligibly\nineluctable\nineluctably\ninept/YP\nineptitude/M\nineptness/M\ninequality/S\ninert/YP\ninertia/M\ninertial\ninertness/M\ninescapable\ninescapably\ninestimably\ninevitability/M\ninevitable/M\ninevitably\ninexact/Y\ninexhaustibly\ninexorability\ninexorable\ninexorably\ninexpedient\ninexpert/Y\ninexpiable\ninexplicably\ninexpressibly\ninexpressive\ninextricably\ninf/ZT\ninfallible\ninfamy/SM\ninfancy/M\ninfant/MS\ninfanticide/MS\ninfantile\ninfantry/SM\ninfantryman/M\ninfantrymen\ninfarct/MS\ninfarction/M\ninfatuate/DSXGN\ninfatuation/M\ninfect/AESDG\ninfected/U\ninfection/ASM\ninfectious/PY\ninfectiousness/M\ninfelicitous\ninference/SM\ninferential\ninferior/MS\ninferiority/M\ninfernal/Y\ninferno/MS\ninferred\ninferring\ninfest/GDS\ninfestation/MS\ninfidel/MS\ninfidelity/S\ninfiltrator/SM\ninfinite/MV\ninfinitesimal/SMY\ninfinitival\ninfinitive/MS\ninfinitude/M\ninfinity/SM\ninfirm\ninfirmary/SM\ninfirmity/SM\ninfix\ninflame/DSG\ninflammable\ninflammation/SM\ninflammatory\ninflatable/SM\ninflate/ADSG\ninflation/EM\ninflationary\ninflect/SDG\ninflection/MS\ninflectional\ninflict/SDGV\ninfliction/M\ninflow/SM\ninfluence/MGDS\ninfluenced/U\ninfluential/Y\ninfluenza/M\ninfo/M\ninfomercial/SM\ninform/Z\ninformal/Y\ninformant/SM\ninformatics\ninformation/EM\ninformational\ninformative/PY\ninformativeness/M\ninformed/U\ninfotainment/M\ninfra\ninfrared/M\ninfrasonic\ninfrastructural\ninfrastructure/SM\ninfrequence/M\ninfrequent/Y\ninfringement/MS\ninfuriate/GDS\ninfuriating/Y\ninfuser/SM\ningenious/PY\ningeniousness/M\ningenue/SM\ningenuity/M\ningenuous/EY\ningenuousness/M\ningest/SDG\ningestion/M\ninglenook/SM\ningot/SM\ningrain/G\ningrate/SM\ningratiate/GNDS\ningratiating/Y\ningratiation/M\ningredient/MS\ningress/MS\ninguinal\ninhabit/DG\ninhabitable/U\ninhabitant/SM\ninhabited/U\ninhalant/SM\ninhalation/MS\ninhalator/MS\ninhaler/SM\ninharmonious\ninhere/DSG\ninherent/Y\ninherit/EGSD\ninheritance/EM\ninheritances\ninheritor/SM\ninhibit/GSD\ninhibition/SM\ninhibitor/SM\ninhibitory\ninhuman/Y\ninhumane/Y\ninimical/Y\ninimitably\niniquitous/Y\niniquity/SM\ninitial/SGMDY\ninitialism\ninitialization\ninitialize/DSG\ninitialized/AU\ninitiate/XMGNVDS\ninitiated/U\ninitiation/M\ninitiative/SM\ninitiator/MS\ninitiatory\ninject/SDG\ninjection/SM\ninjector/SM\ninjunctive\ninjure/DRSZG\ninjured/U\ninjurer/M\ninjurious\nink/MD\ninkblot/SM\ninkiness/M\ninkling/SM\ninkstand/SM\ninkwell/MS\ninky/RTP\ninland/M\ninline\ninmate/SM\ninmost\ninn/SGMRJ\ninnards/M\ninnate/PY\ninnateness/M\ninnermost\ninnersole/SM\ninnerspring\ninnervate/GNDS\ninnervation/M\ninning/M\ninnit\ninnkeeper/MS\ninnocence/M\ninnocent/MYS\ninnocuous/PY\ninnocuousness/M\ninnovate/XDSGNV\ninnovation/M\ninnovator/MS\ninnovatory\ninnuendo/SM\ninnumerably\ninnumerate\ninoculate/AGDS\ninoculation/MS\ninoperative\ninordinate/Y\ninorganic\ninositol\ninquire/ZGDR\ninquirer/M\ninquiring/Y\ninquiry/SM\ninquisition/MS\ninquisitional\ninquisitive/YP\ninquisitiveness/M\ninquisitor/SM\ninquisitorial\ninrush/MS\ninsane/T\ninsatiability/M\ninsatiably\ninscribe/ZGDR\ninscriber/M\ninscription/MS\ninscrutability/M\ninscrutable/P\ninscrutableness/M\ninscrutably\ninseam/SM\ninsecticidal\ninsecticide/MS\ninsectivore/MS\ninsectivorous\ninsecure/Y\ninseminate/DSGN\ninsemination/M\ninsensate\ninsensible\ninsensitive/Y\ninseparable/MS\ninsert's\ninsert/AGSD\ninsertion/AM\ninsertions\ninsetting\ninshore\ninside/RSMZ\ninsider/M\ninsidious/YP\ninsidiousness/M\ninsight/MS\ninsightful\ninsignia/M\ninsinuate/GNVDSX\ninsinuation/M\ninsinuator/SM\ninsipid/PY\ninsipidity/M\ninsist/SGD\ninsistence/M\ninsistent/Y\ninsisting/Y\ninsofar\ninsole/SM\ninsolence/M\ninsolent/Y\ninsoluble\ninsolubly\ninsolvency/S\ninsomnia/M\ninsomniac/SM\ninsomuch\ninsouciance/M\ninsouciant\ninspect/AGDS\ninspection/SM\ninspector/MS\ninspectorate/MS\ninspiration/MS\ninspirational\ninspiratory\ninspired/U\ninspiring/U\ninst\ninstability/S\ninstallation/MS\ninstaller/UMS\ninstallment/SM\ninstance/GD\ninstant/MRYS\ninstantaneous/Y\ninstantiate/DSG\ninstar\ninstate/AGDS\ninstead\ninstigate/DSGN\ninstigation/M\ninstigator/MS\ninstillation/M\ninstinct/VMS\ninstinctive/Y\ninstinctual\ninstitute/XMZGNDRS\ninstituter/M\ninstitution/M\ninstitutional/Y\ninstitutionalization/M\ninstitutionalize/DSG\ninstr\ninstruct/SDGV\ninstructed/U\ninstruction/MS\ninstructional\ninstructive/Y\ninstructor/MS\ninstrument/MDSG\ninstrumental/MYS\ninstrumentalist/SM\ninstrumentality/M\ninstrumentation/M\ninsubordinate\ninsufferable\ninsufferably\ninsula\ninsular\ninsularity/M\ninsulate/GNDS\ninsulation/M\ninsulator/MS\ninsulin/M\ninsult/SMDG\ninsulting/Y\ninsuperable\ninsuperably\ninsurance/SM\ninsure/DRSZGB\ninsured/SM\ninsurer/M\ninsurgence/SM\ninsurgency/SM\ninsurgent/MS\ninsurmountably\ninsurrection/SM\ninsurrectionist/SM\nint\nintact\nintaglio/MS\ninteger/MS\nintegral/SMY\nintegrate/AEVNGSD\nintegration/EAM\nintegrator\nintegrity/M\nintegument/SM\nintellect/MS\nintellectual/MYS\nintellectualism/M\nintellectualize/GDS\nintelligence/M\nintelligent/Y\nintelligentsia/M\nintelligibility/M\nintelligible/U\nintelligibly/U\nintended/SM\nintense/YTVR\nintensification/M\nintensifier/M\nintensify/DRSZGN\nintensity/S\nintensive/MYPS\nintensiveness/M\nintent/SMYP\nintention/MS\nintentional/UY\nintentness/M\ninter/ESL\ninteract/SGVD\ninteraction/SM\ninteractive/Y\ninteractivity\ninterbred\ninterbreed/GS\nintercede/GDS\nintercept/GMDS\ninterception/MS\ninterceptor/SM\nintercession/SM\nintercessor/MS\nintercessory\ninterchange/DSMG\ninterchangeability\ninterchangeable\ninterchangeably\nintercity\nintercollegiate\nintercom/SM\nintercommunicate/DSGN\nintercommunication/M\ninterconnect/GDS\ninterconnection/SM\nintercontinental\nintercourse/M\nintercultural\ninterdenominational\ninterdepartmental\ninterdependence/M\ninterdependent/Y\ninterdict/GMDS\ninterdiction/M\ninterdisciplinary\ninterest/ESMD\ninterested/U\ninteresting/Y\ninterface/MGDS\ninterfaith\ninterfere/GDS\ninterference/M\ninterferon/M\ninterfile/GDS\nintergalactic\nintergovernmental\ninterim/M\ninterior/SM\ninterj\ninterject/GDS\ninterjection/SM\ninterlace/GDS\ninterlard/DGS\ninterleave/DSG\ninterleukin/M\ninterline/GDSJ\ninterlinear\ninterlining/M\ninterlink/DSG\ninterlock/GMDS\ninterlocutor/SM\ninterlocutory\ninterlope/ZGDRS\ninterloper/M\ninterlude/MGDS\nintermarriage/SM\nintermarry/GDS\nintermediary/SM\nintermediate/MYS\ninterment/EM\ninterments\nintermezzi\nintermezzo/MS\ninterminably\nintermingle/DSG\nintermission/SM\nintermittence\nintermittency\nintermittent/Y\nintermix/GDS\nintern/GDL\ninternal/SY\ninternalization/M\ninternalize/GDS\ninternational/SMY\ninternationalism/M\ninternationalist/SM\ninternationalization\ninternationalize/DSG\ninternecine\ninternee/SM\ninternet\ninternist/MS\ninternment/M\ninternship/MS\ninteroffice\ninteroperability\ninteroperable\ninteroperate/S\ninterpenetrate/DSGN\ninterpersonal\ninterplanetary\ninterplay/M\ninterpolate/XDSGN\ninterpolation/M\ninterpose/GDS\ninterposition/M\ninterpret/AGVDS\ninterpretation/AMS\ninterpretative\ninterpreted/U\ninterpreter/MS\ninterracial\ninterred/E\ninterregnum/SM\ninterrelate/XDSGN\ninterrelation/M\ninterrelationship/MS\ninterring/E\ninterrogate/DSGNVX\ninterrogation/M\ninterrogative/MYS\ninterrogator/SM\ninterrogatory/SM\ninterrupt/ZGMDRS\ninterrupter/M\ninterruption/MS\ninterscholastic\nintersect/GDS\nintersection/SM\nintersession/SM\nintersex\nintersperse/GNDS\ninterspersion/M\ninterstate/MS\ninterstellar\ninterstice/MS\ninterstitial\nintertwine/GDS\ninterurban\ninterval/SM\nintervene/GDS\nintervention/SM\ninterventionism/M\ninterventionist/SM\ninterview/ZGMDRS\ninterviewee/MS\ninterviewer/M\nintervocalic\ninterwar\ninterweave/GS\ninterwove\ninterwoven\nintestacy/M\nintestate\nintestinal\nintestine/MS\nintifada\nintimacy/SM\nintimate/MYGNDSX\nintimation/M\nintimidate/GNDS\nintimidating/Y\nintimidation/M\nintonation/SM\nintoxicant/SM\nintoxicate/DSGN\nintoxication/M\nintracranial\nintramural\nintramuscular\nintranet/MS\nintransigence/M\nintransigent/MYS\nintrastate\nintrauterine\nintravenous/MSY\nintrepid/Y\nintrepidity/M\nintricacy/SM\nintricate/Y\nintrigue/DRSMZG\nintriguer/M\nintriguing/Y\nintrinsic\nintrinsically\nintro/SM\nintroduce/AGDS\nintroduction/AM\nintroductions\nintroductory\nintroit/SM\nintrospect/GVDS\nintrospection/M\nintrospective/Y\nintroversion/M\nintrovert/MDS\nintrude/DRSZG\nintruder/M\nintrusion/SM\nintrusive/YP\nintrusiveness/M\nintuit/SDGV\nintuition/S\nintuitive/PY\nintuitiveness/M\ninundate/XDSGN\ninundation/M\ninure/DSG\ninvade/DRSZG\ninvader/M\ninvalid/GMDYS\ninvalidism/M\ninvaluable\ninvaluably\ninvariant\ninvasion/MS\ninvasive\ninvective/M\ninveigh/GD\ninveighs\ninveigle/ZGDRS\ninveigler/M\ninvent/ASGVD\ninvention/AMS\ninventive/PY\ninventiveness/M\ninventor/MS\ninventory/DSMG\ninverse/SMY\ninvert/SMDRZG\ninverter/M\ninvest/ASDGL\ninvestigate/GNVDSX\ninvestigation/M\ninvestigator/SM\ninvestigatory\ninvestiture/MS\ninvestment/AEM\ninvestor/SM\ninveteracy/M\ninveterate\ninvidious/YP\ninvidiousness/M\ninvigilate/GNDS\ninvigilator/S\ninvigorate/ADSG\ninvigorating/Y\ninvigoration/M\ninvincibility/M\ninvincibly\ninviolability/M\ninviolably\ninviolate\ninvitation/SM\ninvitational/SM\ninvite/DSMG\ninvited/U\ninvitee/SM\ninviting/Y\ninvoke/DSG\ninvoluntariness/M\ninvoluntary/P\ninvolution/M\ninvolve/LDSG\ninvolved/U\ninvolvement/SM\ninward/SY\nioctl\niodide/SM\niodine/M\niodize/DSG\nion/USM\nionic\nionization/UM\nionize/UDSG\nionizer/MS\nionosphere/MS\nionospheric\niota/MS\nipecac/SM\nirascibility/M\nirascible\nirascibly\nirate/YP\nirateness/M\nire/M\nireful\nirenic\nirides\niridescence/M\niridescent/Y\niridium/M\niris/MS\nirk/SGD\nirksome/YP\nirksomeness/M\niron/MDSG\nironclad/MS\nironic\nironical/Y\nironing/M\nironmonger/S\nironmongery\nironstone/M\nironware/M\nironwood/MS\nironwork/M\nirony/SM\nirradiate/DSGN\nirradiation/M\nirrational/SMY\nirrationality/M\nirreclaimable\nirreconcilability/M\nirreconcilable\nirreconcilably\nirrecoverable\nirrecoverably\nirredeemable\nirredeemably\nirreducible\nirreducibly\nirrefutable\nirrefutably\nirregardless\nirregular/MYS\nirregularity/SM\nirrelevance/MS\nirrelevancy/MS\nirrelevant/Y\nirreligion\nirreligious\nirremediable\nirremediably\nirremovable\nirreparable\nirreparably\nirreplaceable\nirrepressible\nirrepressibly\nirreproachable\nirreproachably\nirresistible\nirresistibly\nirresolute/PYN\nirresoluteness/M\nirresolution/M\nirrespective\nirresponsibility/M\nirresponsible\nirresponsibly\nirretrievable\nirretrievably\nirreverence/M\nirreverent/Y\nirreversible\nirreversibly\nirrevocable\nirrevocably\nirrigable\nirrigate/DSGN\nirrigation/M\nirritability/M\nirritable\nirritably\nirritant/SM\nirritate/DSXGN\nirritating/Y\nirritation/M\nirrupt/DGVS\nirruption/SM\nischemia\nischemic\nisinglass/M\nisl\nisland/SZMR\nislander/M\nisle/MS\nislet/SM\nism/CM\nisms\nisn't\nisobar/MS\nisobaric\nisolate/DSMGN\nisolation/M\nisolationism/M\nisolationist/SM\nisomer/MS\nisomeric\nisomerism/M\nisometric/S\nisometrically\nisometrics/M\nisomorphic\nisomorphism\nisosceles\nisotherm/SM\nisotope/SM\nisotopic\nisotropic\nissuance/M\nissue/ADSMG\nissuer/MS\nisthmian\nisthmus/MS\nit'd\nit'll\nit/USM\nital\nitalic/SM\nitalicization/M\nitalicize/GDS\nitalics/M\nitch/MDSG\nitchiness/M\nitchy/RPT\nitem/MS\nitemization/M\nitemize/GDS\niterate/AXGNVDS\niteration/AM\niterator/S\nitinerant/SM\nitinerary/SM\nitself\niv/U\nivory/SM\nivy/DSM\nix\nj/F\njab/SM\njabbed\njabber/SMDRZG\njabberer/M\njabbing\njabot/SM\njacaranda/MS\njack/MDGS\njackal/SM\njackass/MS\njackboot/SMD\njackdaw/MS\njacket/SMD\njackhammer/MS\njackknife/MGDS\njackknives\njackpot/MS\njackrabbit/MS\njackstraw/MS\njacquard/M\njade/MGDS\njaded/PY\njadedness/M\njadeite/M\njag/SM\njagged/TPRY\njaggedness/M\njaggies\njaguar/SM\njail/MDRZGS\njailbird/SM\njailbreak/SM\njailer/M\njailhouse/S\njalapeno/MS\njalopy/SM\njalousie/MS\njam/SM\njamb/MS\njambalaya/M\njamboree/MS\njammed\njamming\njammy/RT\njangle/DRSMZG\njangler/M\njanitor/SM\njanitorial\njapan/SM\njapanned\njapanning\njape/MGDS\njar/SM\njardiniere/SM\njarful/MS\njargon/M\njarred\njarring/Y\njasmine/SM\njasper/M\njato/MS\njaundice/DSMG\njaunt/SGMD\njauntily\njauntiness/M\njaunty/RPT\njava/M\njavelin/SM\njaw/SGMD\njawbone/DSMG\njawbreaker/MS\njawline/S\njay/SM\njaybird/SM\njaywalk/DRSZG\njaywalker/M\njaywalking/M\njazz/MDSG\njazzy/TR\njct\njealous/Y\njealousy/SM\njean/MS\njeans/M\njeep/MS\njeer/MDSG\njeering/MY\njeez\njejuna\njejune\njejunum/M\njell/DSG\njello/S\njelly/GDSM\njellybean/MS\njellyfish/MS\njellylike\njellyroll/SM\njemmy/GDS\njennet/MS\njenny/SM\njeopardize/GDS\njeopardy/M\njeremiad/MS\njerk/MDSG\njerkily\njerkin/MS\njerkiness/M\njerkwater\njerky/TRMP\njeroboam/S\njerrybuilt\njerrycan/S\njersey/MS\njest/MDRSZG\njester/M\njesting/Y\njet/SM\njetliner/SM\njetport/MS\njetsam/M\njetted\njetting\njettison/MDSG\njetty/SM\njew\njewel/SZGMDR\njeweler/M\njewelry/SM\njg\njib/SGMD\njibbed\njibbing\njibe/MS\njiff/MS\njiffy/SM\njig's\njig/AS\njigged/A\njigger's\njigger/ASDG\njigging/A\njiggle/DSMG\njiggly\njigsaw/SMDG\njihad/SM\njihadist/SM\njilt/MDSG\njimmy/DSMG\njimsonweed/M\njingle/DSMG\njingly\njingoism/M\njingoist/SM\njingoistic\njink/DSG\njinn\njinni/M\njinrikisha/SM\njinx/MDSG\njitney/SM\njitterbug/MS\njitterbugged\njitterbugger/M\njitterbugging\njitters/M\njittery/RT\njive/MGDS\njob/SM\njobbed\njobber/SM\njobbing\njobholder/MS\njobless/P\njoblessness/M\njobshare/S\njobsworth\njobsworths\njock/MS\njockey/SGMD\njockstrap/MS\njocose/PY\njocoseness/M\njocosity/M\njocular/Y\njocularity/M\njocund/Y\njocundity/M\njodhpurs/M\njoey/S\njog/SM\njogged\njogger/SM\njogging/M\njoggle/DSMG\njohn/MS\njohnny/SM\njohnnycake/MS\njoin's\njoin/AFDSG\njoiner/FMS\njoinery/M\njoint's\njoint/EGSD\njointly/F\njoist/SM\njojoba\njoke/MZGDRS\njoker/M\njokey\njokier\njokiest\njoking/Y\njollification/SM\njollily\njolliness/M\njollity/M\njolly/TGPDRSM\njolt/MDRSZG\njolter/M\njonquil/SM\njosh/MDRSZG\njosher/M\njostle/MGDS\njot/SM\njotted\njotter/MS\njotting/MS\njoule/SM\njounce/MGDS\njouncy\njournal/MS\njournalese/M\njournalism/M\njournalist/SM\njournalistic\njourney/ZGMDRS\njourneyer/M\njourneyman/M\njourneymen\njourno/S\njoust/SZGMDR\njouster/M\njousting/M\njovial/Y\njoviality/M\njowl/MS\njowly/TR\njoy/SGMD\njoyful/YP\njoyfuller\njoyfullest\njoyfulness/M\njoyless/PY\njoylessness/M\njoyous/YP\njoyousness/M\njoyridden\njoyride/RSMZG\njoyrider/M\njoyriding/M\njoyrode\njoystick/SM\njr\njubilant/Y\njubilation/M\njubilee/SM\njudder/GDS\njudge's\njudge/ADSG\njudgeship/M\njudgment/SM\njudgmental/Y\njudicatory/SM\njudicature/M\njudicial/Y\njudiciary/SM\njudicious/IYP\njudiciousness/IM\njudo/M\njug/SM\njugful/MS\njugged\njuggernaut/SM\njugging\njuggle/MZGDRS\njuggler/M\njugglery/M\njugular/SM\njuice/DRSMZG\njuicer/M\njuicily\njuiciness/M\njuicy/PTR\njujitsu/M\njujube/MS\njukebox/MS\njulep/SM\njulienne\njumble/MGDS\njumbo/SM\njump/MDRSZG\njumper/M\njumpily\njumpiness/M\njumpsuit/MS\njumpy/TRP\njun\njunco/SM\njunction/FISM\njuncture/FMS\njungle/MS\njunior/MS\njuniper/SM\njunk/MDRSZG\njunker/M\njunket/MDSG\njunketeer/MS\njunkie/MTRS\njunkyard/MS\njunta/SM\njuridic\njuridical/Y\njurisdiction/SM\njurisdictional\njurisprudence/M\njurist/MS\njuristic\njuror/SM\njury/ISM\njuryman/M\njurymen\njurywoman/M\njurywomen\njust/RYPT\njustice/IMS\njustifiable/U\njustifiably/U\njustification/M\njustified/U\njustify/XGDSN\njustness/M\njut/SM\njute/M\njutted\njutting\njuvenile/SM\njuxtapose/DSG\njuxtaposition/SM\nk/IFGS\nkHz\nkW\nkWh\nkabbalah\nkaboom\nkabuki/M\nkaddish/MS\nkaffeeklatch/MS\nkaffeeklatsch/MS\nkahuna/S\nkaiser/MS\nkale/M\nkaleidoscope/MS\nkaleidoscopic\nkaleidoscopically\nkamikaze/MS\nkana\nkangaroo/MS\nkanji\nkaolin/M\nkapok/M\nkappa/SM\nkaput\nkarakul/M\nkaraoke/MS\nkarat/SM\nkarate/M\nkarma/M\nkarmic\nkart/MS\nkatakana\nkatydid/SM\nkayak/SMDG\nkayaking/M\nkayo/MDSG\nkazoo/SM\nkc\nkebab/SM\nkedgeree\nkeel/MDSG\nkeelhaul/DGS\nkeen/MDRYSTGP\nkeenness/M\nkeep/MRSZG\nkeeper/M\nkeeping/M\nkeepsake/MS\nkeg/SM\nkelp/M\nkelvin/SM\nken/SM\nkenned\nkennel/SGMD\nkenning\nkeno/M\nkepi/MS\nkept\nkeratin/M\nkeratitis\nkerbside\nkerchief/SM\nkerfuffle/S\nkernel/SM\nkerosene/M\nkestrel/MS\nketch/MS\nketchup/M\nketone/S\nkettle/SM\nkettledrum/SM\nkey/SGMD\nkeybinding/S\nkeyboard/ZGSMDR\nkeyboarder/M\nkeyboardist/SM\nkeyhole/MS\nkeynote/MZGDRS\nkeynoter/M\nkeypad/SM\nkeypunch/ZGMDRS\nkeypuncher/M\nkeystone/MS\nkeystroke/SM\nkeyword/MS\nkg\nkhaki/SM\nkhan/MS\nkibble/DSMG\nkibbutz/MS\nkibbutzim\nkibitz/ZGDRS\nkibitzer/M\nkibosh/M\nkick/MDRSZG\nkickback/SM\nkickball/M\nkickboxing\nkicker/M\nkickoff/MS\nkickstand/MS\nkicky/RT\nkid/SM\nkidded\nkidder/SM\nkiddie/SM\nkidding\nkiddish\nkiddo/SM\nkidnap/S\nkidnapped\nkidnapper/MS\nkidnapping/MS\nkidney/SM\nkidskin/M\nkielbasa/MS\nkielbasi\nkike/S\nkill/JMDRSZG\nkilldeer/SM\nkiller/M\nkilling/M\nkilljoy/SM\nkiln/MDSG\nkilo/MS\nkilobyte/SM\nkilocycle/SM\nkilogram/SM\nkilohertz/M\nkiloliter/MS\nkilometer/MS\nkiloton/SM\nkilowatt/SM\nkilt/MDRS\nkilter/M\nkimono/MS\nkin/M\nkinase\nkind's\nkind/UPRYT\nkinda\nkindergarten/MS\nkindergartner/SM\nkindhearted/PY\nkindheartedness/M\nkindle/AGDS\nkindliness/M\nkindling/M\nkindly/URT\nkindness/UM\nkindnesses\nkindred/M\nkinds\nkine/S\nkinematic/S\nkinematics/M\nkinetic/S\nkinetically\nkinetics/M\nkinfolk/SM\nkinfolks/M\nking/MYS\nkingdom/SM\nkingfisher/SM\nkingly/RT\nkingmaker/S\nkingpin/SM\nkingship/M\nkink/MDSG\nkinkily\nkinkiness/M\nkinky/TPR\nkinsfolk/M\nkinship/M\nkinsman/M\nkinsmen\nkinswoman/M\nkinswomen\nkiosk/SM\nkip/SM\nkipped\nkipper/MDGS\nkipping\nkirsch/MS\nkismet/M\nkiss/MDRSBZG\nkisser/M\nkissoff/SM\nkissogram/S\nkit/SGMD\nkitchen/SM\nkitchenette/MS\nkitchenware/M\nkite/MS\nkith/M\nkitsch/M\nkitschy\nkitted\nkitten/MS\nkittenish\nkitting\nkitty/SM\nkiwi/MS\nkiwifruit/MS\nkl\nklaxon/S\nkleptocracy\nkleptomania/M\nkleptomaniac/SM\nkludge/GDS\nkluge/DS\nklutz/MS\nklutziness/M\nklutzy/TRP\nkm\nkn\nknack/SZMR\nknacker/GD\nknapsack/MS\nknave/SM\nknavery/M\nknavish/Y\nknead/SZGDR\nkneader/M\nknee/MDS\nkneecap/SM\nkneecapped\nkneecapping\nkneeing\nkneel/SG\nknell/SGMD\nknelt\nknew\nknicker/S\nknickerbockers/M\nknickers/M\nknickknack/MS\nknife/DSMG\nknight/MDYSG\nknighthood/MS\nknightliness/M\nknish/MS\nknit/MS\nknitted\nknitter/SM\nknitting/M\nknitwear/M\nknives\nknob/MS\nknobbly\nknobby/TR\nknock/SZGMDR\nknockabout\nknockdown/SM\nknocker/M\nknockoff/SM\nknockout/SM\nknockwurst/SM\nknoll/SM\nknot/MS\nknothole/SM\nknotted\nknotting\nknotty/TR\nknow/SB\nknowing/UYS\nknowledge/M\nknowledgeable\nknowledgeably\nknown\nknuckle/DSMG\nknuckleduster/S\nknucklehead/MS\nknurl/SGMD\nkoala/SM\nkoan/S\nkohl\nkohlrabi/M\nkohlrabies\nkola/MS\nkook/MS\nkookaburra/SM\nkookiness/M\nkooky/TPR\nkopeck/MS\nkorma\nkosher/DSG\nkowtow/GMDS\nkph\nkraal/SM\nkraut/SM!\nkrill/M\nkrona/M\nkrone/RM\nkronor\nkronur\nkrypton/M\nkt\nkuchen/SM\nkudos/M\nkudzu/SM\nkumquat/MS\nkvetch/ZGMDRS\nkvetcher/M\nkw\nl/SDXTGJ\nla/M\nlab/SM\nlabel's\nlabel/ASDG\nlabeled/U\nlabia\nlabial/SM\nlabile\nlabium/M\nlabor/SMDRZG\nlaboratory/SM\nlaborer/M\nlaborious/PY\nlaboriousness/M\nlaborsaving\nlaburnum/MS\nlabyrinth/M\nlabyrinthine\nlabyrinths\nlac/M\nlace's\nlace/UGDS\nlacerate/DSGNX\nlaceration/M\nlacewing/SM\nlacework/M\nlachrymal\nlachrymose\nlack/MDSG\nlackadaisical/Y\nlackey/SM\nlackluster\nlaconic\nlaconically\nlacquer/GMDS\nlacrosse/M\nlactate/GNDS\nlactation/M\nlacteal\nlactic\nlactose/M\nlacuna/M\nlacunae\nlacy/RT\nlad/SGMDNJ\nladder/GSMD\nladdie/SM\nladdish/P\nlade/S\nladen/U\nlading/M\nladle/DSMG\nlady/SM\nladybird/SM\nladybug/MS\nladyfinger/MS\nladylike/U\nladylove/MS\nladyship/MS\nlaetrile/M\nlag/SZMR\nlager/M\nlaggard/MYS\nlagged\nlagging/M\nlagniappe/SM\nlagoon/SM\nlaid/IA\nlain\nlair/MS\nlaird/SM\nlaity/M\nlake/MS\nlakefront/S\nlakeside\nlam/SM\nlama/MS\nlamasery/SM\nlamb/MDSG\nlambada/MS\nlambaste/GDS\nlambda/SM\nlambency/M\nlambent/Y\nlambkin/SM\nlambskin/SM\nlambswool\nlame/MYZTGDRSP\nlamebrain/MDS\nlameness/M\nlament/BSMDG\nlamentably\nlamentation/MS\nlamina/M\nlaminae\nlaminar\nlaminate/MGNDS\nlamination/M\nlammed\nlamming\nlamp/MS\nlampblack/M\nlamplight/MRZ\nlamplighter/M\nlampoon/SGMD\nlamppost/SM\nlamprey/MS\nlampshade/SM\nlanai/SM\nlance/DRSMZG\nlancer/M\nlancet/SM\nland/MDRSGJ\nlandau/SM\nlandfall/MS\nlandfill/MS\nlandholder/SM\nlandholding/MS\nlanding/M\nlandlady/SM\nlandless/M\nlandline/MS\nlandlocked\nlandlord/MS\nlandlubber/MS\nlandmark/MS\nlandmass/MS\nlandmine/S\nlandowner/MS\nlandownership\nlandowning/SM\nlandscape/MZGDRS\nlandscaper/M\nlandslid\nlandslide/MGS\nlandslip/S\nlandsman/M\nlandsmen\nlandward/S\nlane/MS\nlanguage/MS\nlanguid/PY\nlanguidness/M\nlanguish/DSG\nlanguor/SM\nlanguorous/Y\nlank/RYTP\nlankiness/M\nlankness/M\nlanky/RTP\nlanolin/M\nlantern/MS\nlanthanum/M\nlanyard/MS\nlap/SM\nlaparoscopic\nlaparoscopy\nlaparotomy\nlapboard/SM\nlapdog/SM\nlapel/SM\nlapidary/SM\nlapin/SM\nlapped\nlappet/SM\nlapping\nlapse/AKGMSD\nlaptop/SM\nlapwing/MS\nlarboard/SM\nlarcenist/SM\nlarcenous\nlarceny/SM\nlarch/MS\nlard/MDRSZG\nlarder/M\nlardy/RT\nlarge/RSPMYT\nlargehearted\nlargeness/M\nlargess/M\nlargish\nlargo/SM\nlariat/SM\nlark/MDSG\nlarkspur/SM\nlarva/M\nlarvae\nlarval\nlaryngeal\nlarynges\nlaryngitis/M\nlarynx/M\nlasagna/MS\nlascivious/YP\nlasciviousness/M\nlase/ZGDRS\nlaser/M\nlash/MDSGJ\nlashing/M\nlass/MS\nlassie/SM\nlassitude/M\nlasso/SMDG\nlast/MDYSG\nlasting/Y\nlat/S\nlatch's\nlatch/UDSG\nlatchkey/SM\nlate/YTRP\nlatecomer/MS\nlatency/M\nlateness/M\nlatent\nlateral/MDYSG\nlatest/M\nlatex/M\nlath/MDRSZG\nlathe/M\nlather/GMD\nlathery\nlaths\nlatices\nlatish\nlatitude/MS\nlatitudinal\nlatitudinarian/MS\nlatrine/MS\nlatte/RSM\nlatter/MY\nlattice/MDS\nlatticework/SM\nlaud/MDSGB\nlaudably\nlaudanum/M\nlaudatory\nlaugh/BMDG\nlaughably\nlaughing/MY\nlaughingstock/SM\nlaughs\nlaughter/M\nlaunch/AGMDS\nlauncher/SM\nlaunchpad/SM\nlaunder/DRZGS\nlaunderer/M\nlaunderette/SM\nlaundress/MS\nlaundromat/MS\nlaundry/SM\nlaundryman/M\nlaundrymen\nlaundrywoman/M\nlaundrywomen\nlaureate/MS\nlaureateship/M\nlaurel/SM\nlav/SGD\nlava/M\nlavage/M\nlavaliere/SM\nlavatorial\nlavatory/SM\nlave/S\nlavender/SM\nlavish/PTGDRSY\nlavishness/M\nlaw/SM\nlawbreaker/SM\nlawbreaking/M\nlawful/UPY\nlawfulness/UM\nlawgiver/MS\nlawless/PY\nlawlessness/M\nlawmaker/MS\nlawmaking/M\nlawman/M\nlawmen\nlawn/MS\nlawnmower/SM\nlawrencium/M\nlawsuit/MS\nlawyer/SM\nlax/TRYP\nlaxative/MS\nlaxity/M\nlaxness/M\nlay/AICSGM\nlayabout/S\nlayaway/M\nlayer/CSM\nlayered\nlayering/M\nlayette/MS\nlayman/M\nlaymen\nlayoff/SM\nlayout/SM\nlayover/MS\nlaypeople\nlayperson/MS\nlayup/SM\nlaywoman/M\nlaywomen\nlaze/MGDS\nlazily\nlaziness/M\nlazy/DRSTGP\nlazybones/M\nlb/S\nlbw\nlea/SM\nleach/DSG\nlead/MDNRSZG\nleader/M\nleaderless\nleadership/SM\nleading/M\nleaf/MDSG\nleafage/M\nleafless\nleaflet/GMDS\nleafstalk/MS\nleafy/RT\nleague/DSMG\nleak/MDSG\nleakage/MS\nleakiness/M\nleaky/PRT\nlean/MDRSTGJP\nleaning/M\nleanness/M\nleap/MDRSZG\nleaper/M\nleapfrog/MS\nleapfrogged\nleapfrogging\nleapt\nlearn/AUGDS\nlearnability\nlearnable\nlearnedly\nlearner/MS\nlearning's\nlease/ADSMG\nleaseback/SM\nleasehold/MRSZ\nleaseholder/M\nleaser/SM\nleash's\nleash/UDSG\nleast/M\nleastwise\nleather/MS\nleatherette/M\nleatherneck/MS\nleathery\nleave/DRSMZGJ\nleaven/SGMD\nleavened/U\nleavening/M\nleaver/M\nleavings/M\nlech/MDRSZG\nlecher/M\nlecherous/PY\nlecherousness/M\nlechery/M\nlecithin/M\nlectern/MS\nlecture/MZGDRS\nlecturer/M\nlectureship/SM\nledge/RSMZ\nledger/M\nlee/RSMZ\nleech/MDSG\nleek/MS\nleer/MDG\nleeriness/M\nleery/RPT\nleeward/SM\nleeway/M\nleft/MRST\nleftism/M\nleftist/SM\nleftmost\nleftover/SM\nleftward/S\nlefty/SM\nleg/SM\nlegacy/SM\nlegal/SMY\nlegalese/M\nlegalism/MS\nlegalistic\nlegalistically\nlegality/SM\nlegalization/M\nlegalize/GDS\nlegate/CXMNS\nlegatee/MS\nlegation's/AC\nlegato/SM\nlegend/SM\nlegendarily\nlegendary\nlegerdemain/M\nlegged\nlegginess/M\nlegging/MS\nleggy/RPT\nleghorn/MS\nlegibility/M\nlegible\nlegibly\nlegion/SM\nlegionary/SM\nlegionnaire/SM\nlegislate/DSGNV\nlegislation/M\nlegislative/Y\nlegislator/MS\nlegislature/SM\nlegit\nlegitimacy/M\nlegitimate/DSYG\nlegitimatize/GDS\nlegitimization/M\nlegitimize/DSG\nlegless\nlegman/M\nlegmen\nlegroom/SM\nlegume/MS\nleguminous\nlegwarmer/S\nlegwork/M\nlei/SM\nleisure/DMY\nleisureliness/M\nleisurewear/M\nleitmotif/MS\nleitmotiv/MS\nlemma/S\nlemme/JG\nlemming/M\nlemon/SM\nlemonade/SM\nlemongrass\nlemony\nlemur/SM\nlend/RSZG\nlender/M\nlength/MNX\nlengthen/GD\nlengthily\nlengthiness/M\nlengths\nlengthwise\nlengthy/PRT\nlenience/M\nleniency/M\nlenient/Y\nlenitive\nlens/MS\nlent\nlentil/MS\nlento\nleonine\nleopard/SM\nleopardess/MS\nleotard/SM\nleper/SM\nleprechaun/MS\nleprosy/M\nleprous\nlepta\nlepton/MS\nlesbian/SM\nlesbianism/M\nlesion/MS\nless/MNRX\nlessee/MS\nlessen/GD\nlesson/MS\nlessor/MS\nlet/ISM\nletdown/SM\nlethal/Y\nlethargic\nlethargically\nlethargy/M\nletter/ZGMDRS\nletterbomb/S\nletterbox/S\nlettered/U\nletterer/M\nletterhead/MS\nlettering/M\nletterpress/M\nletting/S\nlettuce/MS\nletup/SM\nleucine\nleucotomy/S\nleukemia/M\nleukemic/SM\nleukocyte/MS\nlevee/SM\nlevel/PSZGMDRY\nleveler/M\nlevelheaded/P\nlevelheadedness/M\nlevelness/M\nlever/SGMD\nleverage's\nleverage/CDSG\nleviathan/MS\nlevier/M\nlevitate/DSGN\nlevitation/M\nlevity/M\nlevy/DRSMZG\nlewd/RYPT\nlewdness/M\nlexer/S\nlexical\nlexicographer/MS\nlexicographic\nlexicographical\nlexicography/M\nlexicon/SM\nlexis\nlg\nliabilities\nliability/AM\nliable/A\nliaise/GDS\nliaison/MS\nliar/MS\nlib/M\nlibation/SM\nlibber/MS\nlibel/SZGMDR\nlibeler/M\nlibelous\nliberal/MYPS\nliberalism/M\nliberality/M\nliberalization/SM\nliberalize/GDS\nliberalness/M\nliberate/CDSGN\nliberation/CM\nliberator/MS\nlibertarian/SM\nlibertine/MS\nliberty/SM\nlibidinal\nlibidinous\nlibido/MS\nlibrarian/MS\nlibrarianship\nlibrary/SM\nlibrettist/MS\nlibretto/SM\nlice\nlicense/MGDS\nlicensed/U\nlicensee/MS\nlicentiate/SM\nlicentious/YP\nlicentiousness/M\nlichen/MS\nlicit/Y\nlick/MDJSG\nlicking/M\nlicorice/SM\nlid/SM\nlidded\nlidless\nlido/MS\nlie/DSM\nlied/MR\nlief/RT\nliege/SM\nlien/MS\nlieu/M\nlieutenancy/M\nlieutenant/MS\nlife/MZR\nlifebelt/S\nlifeblood/M\nlifeboat/MS\nlifebuoy/MS\nlifeforms\nlifeguard/SM\nlifeless/YP\nlifelessness/M\nlifelike\nlifeline/MS\nlifelong\nlifer/M\nlifesaver/SM\nlifesaving/M\nlifespan/S\nlifestyle/SM\nlifetime/MS\nlifework/MS\nlift/MDRSZG\nlifter/M\nliftoff/SM\nligament/MS\nligate/GNDS\nligation/M\nligature/MGDS\nlight's/C\nlight/CASTGD\nlighted/U\nlighten/SDRZG\nlightener/M\nlighter/SM\nlightface/MD\nlightheaded\nlighthearted/YP\nlightheartedness/M\nlighthouse/MS\nlighting's\nlightly\nlightness/M\nlightning/MDS\nlightproof\nlightship/MS\nlightweight/SM\nligneous\nlignin\nlignite/M\nlii\nlikability/M\nlikable/P\nlikableness/M\nlike/EMGDST\nlikelihood/UM\nlikelihoods\nlikeliness/UM\nlikely/UPRT\nliken/SGD\nlikeness/UM\nlikenesses\nliker\nlikewise\nliking/M\nlilac/SM\nlilliputian\nlilo/S\nlilt/MDSG\nlily/SM\nlimb/MS\nlimber/UDSG\nlimberness/M\nlimbless\nlimbo/SM\nlime/MGDS\nlimeade/SM\nlimelight/M\nlimerick/SM\nlimescale\nlimestone/M\nlimey/S\nlimit's\nlimit/CSZGDR\nlimitation/CM\nlimitations\nlimited/U\nlimiter's\nlimiting/S\nlimitless/P\nlimitlessness/M\nlimn/DSG\nlimo/MS\nlimousine/MS\nlimp/MDRYSPTG\nlimpet/MS\nlimpid/YP\nlimpidity/M\nlimpidness/M\nlimpness/M\nlimy/RT\nlinage/M\nlinchpin/SM\nlinden/MS\nline/MZGDRSJ\nlineage/MS\nlineal/Y\nlineament/SM\nlinear/Y\nlinearity/M\nlinebacker/MS\nlined/U\nlinefeed\nlineman/M\nlinemen\nlinen/SM\nlinens/M\nliner/M\nlinesman/M\nlinesmen\nlineup/MS\nling/M\nlinger/ZGJDRS\nlingerer/M\nlingerie/M\nlingering/Y\nlingo/M\nlingoes\nlingual\nlinguine/M\nlinguist/SM\nlinguistic/S\nlinguistically\nlinguistics/M\nliniment/SM\nlining/M\nlink/MDRSG\nlinkage/MS\nlinkman\nlinkmen\nlinkup/MS\nlinnet/MS\nlino\nlinoleum/M\nlinseed/M\nlint's\nlint/CDG\nlintel/MS\nlints\nlinty/TR\nlion/MS\nlioness/MS\nlionhearted\nlionization/M\nlionize/GDS\nlip/SM\nlipid/SM\nliposuction/M\nlipped\nlippy\nlipread/GRS\nlipreader/M\nlipreading/M\nlipstick/MDSG\nliq\nliquefaction/M\nliquefy/DSG\nliqueur/SM\nliquid/MS\nliquidate/XGNDS\nliquidation/M\nliquidator/MS\nliquidity/M\nliquidize/ZGDRS\nliquidizer/M\nliquor/MDGS\nlira/M\nlire\nlisle/M\nlisp/MDRSZG\nlisper/M\nlissome\nlist/MDNSJXG\nlisted/U\nlisten/BMDRZG\nlistener/M\nlisteria\nlisting/M\nlistless/YP\nlistlessness/M\nlit/ZR\nlitany/SM\nlitchi/MS\nlite\nliter/M\nliteracy/M\nliteral/SMYP\nliteralness/M\nliterariness/M\nliterary/P\nliterate/SMY\nliterati/M\nliterature/M\nlithe/RPYT\nlitheness/M\nlithesome\nlithium/M\nlithograph/MDRZG\nlithographer/M\nlithographic\nlithographically\nlithographs\nlithography/M\nlithosphere/SM\nlitigant/SM\nlitigate/DSGN\nlitigation/M\nlitigator/MS\nlitigious/P\nlitigiousness/M\nlitmus/M\nlitotes/M\nlitter/MDRSZG\nlitterateur/MS\nlitterbug/MS\nlitterer/M\nlittle/MTRP\nlittleness/M\nlittoral/SM\nliturgical/Y\nliturgist/SM\nliturgy/SM\nlivability/M\nlivable/U\nlive/ATGDSB\nlivelihood/SM\nliveliness/M\nlivelong/S\nlively/PRT\nliven/SGD\nliver's\nliver/S\nliveried\nliverish\nliverwort/MS\nliverwurst/M\nlivery/CSM\nliveryman/CM\nliverymen/C\nlivestock/M\nliveware\nlivid/Y\nliving/MS\nlix/K\nlizard/MS\nll\nllama/SM\nllano/SM\nlo\nload's\nload/AUGSD\nloadable\nloader/MS\nloading's\nloaf/MDRSZG\nloafer/M\nloam/M\nloamy/TR\nloan/MDRSZG\nloaner/M\nloansharking/M\nloanword/MS\nloath/JZGDRS\nloathe\nloather/M\nloathing/M\nloathsome/PY\nloathsomeness/M\nloaves\nlob/SMD\nlobar\nlobbed\nlobber/MS\nlobbing\nlobby/GDSM\nlobbyist/MS\nlobe/MS\nlobotomize/DSG\nlobotomy/SM\nlobster/MS\nlocal/SMY\nlocale/MS\nlocality/SM\nlocalization/M\nlocalize/DSG\nlocate/EAGNDS\nlocation's/A\nlocation/ESM\nlocator/MS\nlocavore/SM\nloci\nlock/MDRSBZG\nlocker/M\nlocket/MS\nlockjaw/M\nlockout/MS\nlocksmith/M\nlocksmiths\nlockstep/M\nlockup/MS\nloco/S\nlocomotion/M\nlocomotive/MS\nlocoweed/SM\nlocum/S\nlocus/M\nlocust/SM\nlocution/MS\nlode/MS\nlodestar/MS\nlodestone/MS\nlodge/DRSJMZG\nlodger/M\nlodging/M\nlodgings/M\nloft/MDSG\nloftily\nloftiness/M\nlofty/PRT\nlog/SM\nloganberry/SM\nlogarithm/SM\nlogarithmic\nlogbook/SM\nloge/MS\nlogged\nlogger/SM\nloggerhead/SM\nloggia/SM\nlogging/M\nlogic/M\nlogical/Y\nlogicality/M\nlogician/MS\nlogin/SM\nlogistic/S\nlogistical/Y\nlogistics/M\nlogjam/SM\nlogo/MS\nlogoff/SM\nlogon/SM\nlogotype/SM\nlogout/SM\nlogrolling/M\nlogy/RT\nloin/MS\nloincloth/M\nloincloths\nloiter/ZGSDR\nloiterer/M\nloitering/M\nlolcat/SM\nloll/DSG\nlollipop/SM\nlollop/GSD\nlolly/S\nlollygag/S\nlollygagged\nlollygagging\nlone/YZR\nloneliness/M\nlonely/PTR\nloner/M\nlonesome/YP\nlonesomeness/M\nlong's\nlong/KDSTG\nlongboat/MS\nlongbow/MS\nlonger\nlongevity/M\nlonghair/MS\nlonghand/M\nlonghorn/MS\nlonghouse/S\nlonging/MYS\nlongish\nlongitude/MS\nlongitudinal/Y\nlongshoreman/M\nlongshoremen\nlongsighted\nlongstanding\nlongtime\nlongueur/SM\nlongways\nloo\nloofah/M\nloofahs\nlook/MDRSZG\nlookalike/MS\nlooker/M\nlookout/MS\nlookup\nloom/MDSG\nloon/MS\nloonie/M\nloony/RSMT\nloop/MDSG\nloophole/MS\nloopy/RT\nloos/NRX\nloose/UDSTG\nloosely\nloosen/UGSD\nlooseness/M\nloot/MDRSZG\nlooter/M\nlooting/M\nlop/S\nlope/MGDS\nlopped\nlopping\nlopsided/YP\nlopsidedness/M\nloquacious/PY\nloquaciousness/M\nloquacity/M\nlord/MDYSG\nlordliness/M\nlordly/TPR\nlordship/SM\nlore/M\nlorgnette/SM\nloris/MS\nlorn\nlorry/SM\nlose/ZGRSJ\nloser/M\nlosing/M\nloss/MS\nlossless\nlost\nlot/SM\nlotion/SM\nlottery/SM\nlotto/M\nlotus/MS\nlouche\nloud/RYTP\nloudhailer/SM\nloudmouth/MD\nloudmouths\nloudness/M\nloudspeaker/MS\nlough\nloughs\nlounge/MZGDRS\nlounger/M\nlour/DSG\nlouse's\nlouse/CDSG\nlousily\nlousiness/M\nlousy/TPR\nlout/MS\nloutish/PY\nlouver/MDS\nlovableness/M\nlovably\nlove/MYZGDRSB\nlovebird/SM\nlovechild/M\nloved/U\nloveless\nloveliness/M\nlovelorn\nlovely/RSMTP\nlovemaking/M\nlover/M\nlovesick\nlovey/S\nloving/Y\nlow/SZTGMDRYP\nlowborn\nlowboy/MS\nlowbrow/SM\nlowdown/M\nlower/GD\nlowercase/M\nlowermost\nlowish\nlowland/SZMR\nlowlander/M\nlowlife/SM\nlowliness/M\nlowly/TPR\nlowness/M\nlox/M\nloyal/ETY\nloyaler\nloyalism/M\nloyalist/SM\nloyalties\nloyalty/EM\nlozenge/SM\nltd\nluau/MS\nlubber/MYS\nlube/MGDS\nlubricant/SM\nlubricate/DSGN\nlubrication/M\nlubricator/MS\nlubricious/Y\nlubricity/M\nlucid/PY\nlucidity/M\nlucidness/M\nluck/MDSG\nluckily/U\nluckiness/UM\nluckless\nlucky/UPTR\nlucrative/YP\nlucrativeness/M\nlucre/M\nlucubrate/GNDS\nlucubration/M\nludicrous/YP\nludicrousness/M\nludo\nluff/DSG\nlug/SM\nluge/S\nluggage/M\nlugged\nlugger/MS\nlugging\nlughole/S\nlugsail/SM\nlugubrious/YP\nlugubriousness/M\nlukewarm/YP\nlukewarmness/M\nlull/MDSG\nlullaby/SM\nlulu/S\nlumbago/M\nlumbar\nlumber/MDRZGS\nlumberer/M\nlumbering/M\nlumberjack/SM\nlumberman/M\nlumbermen\nlumberyard/SM\nlumen\nluminary/SM\nluminescence/M\nluminescent\nluminosity/M\nluminous/Y\nlummox/MS\nlump/MDNSG\nlumpectomy/S\nlumpenproletariat\nlumpiness/M\nlumpish\nlumpy/TRP\nlunacy/SM\nlunar\nlunatic/SM\nlunch/GMDS\nlunchbox/S\nluncheon/SM\nluncheonette/SM\nlunchroom/MS\nlunchtime/MS\nlung/MDSG\nlunge/SM\nlungfish/MS\nlungful/S\nlunkhead/MS\nlupine/MS\nlupus/M\nlurch/GMDS\nlure/MGDS\nlurgy\nlurid/PY\nluridness/M\nlurk/DRSZG\nluscious/PY\nlusciousness/M\nlush/MRSYPT\nlushness/M\nlust/MDRSG\nluster/M\nlusterless\nlustful/Y\nlustily\nlustiness/M\nlustrous/Y\nlusty/PTR\nlutanist/SM\nlute/MS\nlutenist/SM\nlutetium/M\nlux\nluxuriance/M\nluxuriant/Y\nluxuriate/DSGN\nluxuriation/M\nluxurious/PY\nluxuriousness/M\nluxury/SM\nlvi\nlvii\nlxi\nlxii\nlxiv\nlxix\nlxvi\nlxvii\nlyceum/MS\nlychgate/S\nlye/MG\nlying/M\nlymph/M\nlymphatic/SM\nlymphocyte/SM\nlymphoid\nlymphoma/SM\nlynch/JZGDRS\nlyncher/M\nlynching/M\nlynx/MS\nlyre/MS\nlyrebird/MS\nlyric/SM\nlyrical/Y\nlyricism/M\nlyricist/SM\nlysosomal\nlysosomes\nm/KAS\nma'am\nma/SMH\nmac/SGMD\nmacabre\nmacadam/M\nmacadamia/SM\nmacadamize/GDS\nmacaque/MS\nmacaroni/MS\nmacaroon/MS\nmacaw/SM\nmace/MS\nmacerate/DSGN\nmaceration/M\nmach/M\nmachete/SM\nmachinate/GNDSX\nmachination/M\nmachine/DSMGB\nmachinery/M\nmachinist/MS\nmachismo/M\nmacho/M\nmackerel/SM\nmackinaw/SM\nmackintosh/MS\nmacrame/M\nmacro/SM\nmacrobiotic/S\nmacrobiotics/M\nmacrocosm/SM\nmacroeconomic/S\nmacroeconomics/M\nmacrology/S\nmacron/MS\nmacrophages\nmacroscopic\nmad/SMYP\nmadam/SM\nmadame/M\nmadcap/MS\nmadden/DGS\nmaddening/Y\nmadder/MS\nmaddest\nmadding\nmade/AU\nmademoiselle/MS\nmadhouse/SM\nmadman/M\nmadmen\nmadness/M\nmadras/MS\nmadrasa/SM\nmadrasah/M\nmadrasahs\nmadrassa/SM\nmadrigal/SM\nmadwoman/M\nmadwomen\nmaelstrom/SM\nmaestro/SM\nmafia/SM\nmafiosi\nmafioso/M\nmag/SM\nmagazine/SM\nmage/MS\nmagenta/M\nmaggot/MS\nmaggoty\nmagi/M\nmagic/SM\nmagical/Y\nmagician/SM\nmagicked\nmagicking\nmagisterial/Y\nmagistracy/M\nmagistrate/SM\nmagma/M\nmagnanimity/M\nmagnanimous/Y\nmagnate/SM\nmagnesia/M\nmagnesium/M\nmagnet/MS\nmagnetic\nmagnetically\nmagnetism/M\nmagnetite/M\nmagnetizable\nmagnetization/CM\nmagnetize/CGDS\nmagneto/SM\nmagnetometer/SM\nmagnetosphere\nmagnification/M\nmagnificence/M\nmagnificent/Y\nmagnifier/M\nmagnify/ZGXDRSN\nmagniloquence/M\nmagniloquent\nmagnitude/SM\nmagnolia/MS\nmagnon\nmagnum/MS\nmagpie/MS\nmagus/M\nmaharajah/M\nmaharajahs\nmaharani/SM\nmaharishi/SM\nmahatma/SM\nmahogany/SM\nmahout/MS\nmaid/MNSX\nmaiden/MY\nmaidenhair/M\nmaidenhead/SM\nmaidenhood/M\nmaidservant/SM\nmail/JMDRSZG\nmailbag/SM\nmailbomb/GSD\nmailbox/MS\nmailer/M\nmailing/M\nmaillot/SM\nmailman/M\nmailmen\nmailshot/S\nmaim/DSG\nmain/MYS\nmainframe/SM\nmainland/MS\nmainline/MGDS\nmainmast/MS\nmainsail/MS\nmainspring/MS\nmainstay/MS\nmainstream/SMDG\nmaintain/ZGBDRS\nmaintainability\nmaintainable/U\nmaintained/U\nmaintenance/M\nmaintop/SM\nmaisonette/MS\nmaize/SM\nmajestic\nmajestically\nmajesty/SM\nmajolica/M\nmajor/SGMDY\nmajordomo/MS\nmajorette/MS\nmajoritarian/SM\nmajoritarianism\nmajority/SM\nmake's/A\nmake/UAGS\nmakeover/MS\nmaker/SM\nmakeshift/SM\nmakeup/MS\nmakeweight/S\nmaking/MS\nmakings/M\nmalachite/M\nmaladjusted\nmaladjustment/M\nmaladministration\nmaladroit/PY\nmaladroitness/M\nmalady/SM\nmalaise/M\nmalamute/MS\nmalapropism/SM\nmalaria/M\nmalarial\nmalarkey/M\nmalathion/M\nmalcontent/MS\nmale/MPS\nmalediction/SM\nmalefaction/M\nmalefactor/SM\nmalefic\nmaleficence/M\nmaleficent\nmaleness/M\nmalevolence/M\nmalevolent/Y\nmalfeasance/M\nmalformation/SM\nmalformed\nmalfunction/MDSG\nmalice/M\nmalicious/PY\nmaliciousness/M\nmalign/DSG\nmalignancy/SM\nmalignant/Y\nmalignity/M\nmalinger/ZGSDR\nmalingerer/M\nmall/MS\nmallard/SM\nmalleability/M\nmalleable\nmallet/MS\nmallow/MS\nmalnourished\nmalnutrition/M\nmalocclusion/M\nmalodorous\nmalpractice/SM\nmalt/MDSG\nmalted/MS\nmaltose/M\nmaltreat/GLDS\nmaltreatment/M\nmalty/TR\nmalware/M\nmam/S\nmama/MS\nmamba/SM\nmambo/SGMD\nmamma/M\nmammal/MS\nmammalian/MS\nmammary\nmammogram/MS\nmammography/M\nmammon/M\nmammoth/M\nmammoths\nmammy/SM\nman's/F\nman/USY\nmanacle/DSMG\nmanage/ZGDRSL\nmanageability/M\nmanageable/U\nmanagement/MS\nmanager/M\nmanageress/S\nmanagerial\nmanana/MS\nmanatee/SM\nmandala/SM\nmandamus/MS\nmandarin/MS\nmandate/DSMG\nmandatory\nmandible/MS\nmandibular\nmandolin/MS\nmandrake/MS\nmandrel/SM\nmandrill/MS\nmane/MDS\nmanege/M\nmaneuver/MDGSBJ\nmaneuverability/M\nmanful/Y\nmanga/M\nmanganese/M\nmange/DRMZ\nmanger/M\nmangetout/S\nmanginess/M\nmangle/MZGDRS\nmango/M\nmangoes\nmangrove/MS\nmangy/TRP\nmanhandle/GDS\nmanhole/SM\nmanhood/M\nmanhunt/SM\nmania/SM\nmaniac/MS\nmaniacal/Y\nmanic/SM\nmanically\nmanicure/MGDS\nmanicurist/MS\nmanifest/MDYSG\nmanifestation/SM\nmanifesto/SM\nmanifold/GMDS\nmanikin/SM\nmanila/M\nmanioc/MS\nmanipulable\nmanipulate/XGNVDS\nmanipulation/M\nmanipulative/Y\nmanipulator/MS\nmankind/M\nmanky\nmanlike\nmanliness/M\nmanly/UTR\nmanna/M\nmanned/U\nmannequin/SM\nmanner/MDYS\nmannerism/SM\nmannerly/U\nmanning/U\nmannish/YP\nmannishness/M\nmanometer/SM\nmanor/SM\nmanorial\nmanpower/M\nmanque\nmansard/MS\nmanse/SXMN\nmanservant/M\nmansion/M\nmanslaughter/M\nmanta/SM\nmantel/MS\nmantelpiece/SM\nmantelshelf\nmantelshelves\nmantes\nmantilla/SM\nmantis/MS\nmantissa/SM\nmantle's\nmantle/EGDS\nmantra/MS\nmanual/MYS\nmanufacture/DRSMZG\nmanufacturer/M\nmanufacturing/M\nmanumission/SM\nmanumit/S\nmanumitted\nmanumitting\nmanure/MGDS\nmanuscript/MS\nmany/M\nmap's\nmap/AS\nmaple/SM\nmapmaker/SM\nmapped/A\nmapper/MS\nmapping/S\nmar/S\nmarabou/MS\nmarabout/SM\nmaraca/MS\nmaraschino/MS\nmarathon/SMRZ\nmarathoner/M\nmaraud/ZGDRS\nmarauder/M\nmarble/MGDS\nmarbleize/GDS\nmarbling/M\nmarch/ZGMDRS\nmarcher/M\nmarchioness/MS\nmare/MS\nmargarine/M\nmargarita/MS\nmarge\nmargin/MS\nmarginal/YS\nmarginalia/M\nmarginalization/M\nmarginalize/GDS\nmaria/M\nmariachi/MS\nmarigold/MS\nmarijuana/M\nmarimba/SM\nmarina/MS\nmarinade/DSMG\nmarinara/M\nmarinate/DSGN\nmarination/M\nmarine/MZRS\nmariner/M\nmarionette/MS\nmarital/Y\nmaritime\nmarjoram/M\nmark/AMDSG\nmarkdown/SM\nmarked/U\nmarkedly\nmarker/MS\nmarket/MDRZGBS\nmarketability/M\nmarketable/U\nmarketeer/SM\nmarketer/M\nmarketing/M\nmarketplace/SM\nmarking/SM\nmarkka/M\nmarkkaa\nmarksman/M\nmarksmanship/M\nmarksmen\nmarkup/MS\nmarl/M\nmarlin/MS\nmarlinespike/SM\nmarmalade/M\nmarmoreal\nmarmoset/SM\nmarmot/MS\nmaroon/MDGS\nmarque/MS\nmarquee/SM\nmarquess/MS\nmarquetry/M\nmarquis/MS\nmarquise/M\nmarquisette/M\nmarred/U\nmarriage/ASM\nmarriageability/M\nmarriageable\nmarried/SM\nmarring\nmarrow/MS\nmarry/AGDS\nmarsh/MS\nmarshal/SMDG\nmarshland/SM\nmarshmallow/SM\nmarshy/RT\nmarsupial/MS\nmart/MNSX\nmarten/M\nmartensite\nmartial/Y\nmartian/S\nmartin/MS\nmartinet/MS\nmartingale/MS\nmartini/SM\nmartyr/MDGS\nmartyrdom/M\nmarvel/MDGS\nmarvelous/Y\nmarzipan/M\nmasc\nmascara/GMDS\nmascot/MS\nmasculine/SM\nmasculinity/M\nmaser/SM\nmash/MDRSZG\nmasher/M\nmashup/MS\nmask's\nmask/UDSG\nmasker/MS\nmasochism/M\nmasochist/SM\nmasochistic\nmasochistically\nmason/SM\nmasonic\nmasonry/M\nmasque/MS\nmasquerade/DRSMZG\nmasquerader/M\nmass/MDSGV\nmassacre/MGDS\nmassage/DSMG\nmasseur/SM\nmasseuse/MS\nmassif/MS\nmassive/PY\nmassiveness/M\nmast/MDS\nmastectomy/SM\nmaster's\nmaster/ADGS\nmasterclass/S\nmasterful/Y\nmasterly\nmastermind/SGMD\nmasterpiece/MS\nmasterstroke/SM\nmasterwork/MS\nmastery/M\nmasthead/MS\nmastic/M\nmasticate/GNDS\nmastication/M\nmastiff/SM\nmastitis\nmastodon/SM\nmastoid/SM\nmasturbate/GNDS\nmasturbation/M\nmasturbatory\nmat/SZGMDR\nmatador/SM\nmatch/AMS\nmatchbook/SM\nmatchbox/MS\nmatched/U\nmatching\nmatchless\nmatchlock/SM\nmatchmaker/MS\nmatchmaking/M\nmatchstick/MS\nmatchwood/M\nmate/MS\nmaterial/SMY\nmaterialism/M\nmaterialist/SM\nmaterialistic\nmaterialistically\nmaterialization/M\nmaterialize/DSG\nmateriel/M\nmaternal/Y\nmaternity/M\nmatey/S\nmathematical/Y\nmathematician/SM\nmathematics/M\nmatinee/SM\nmating/M\nmatins/M\nmatriarch/M\nmatriarchal\nmatriarchs\nmatriarchy/SM\nmatrices\nmatricidal\nmatricide/MS\nmatriculate/DSGN\nmatriculation/M\nmatrimonial\nmatrimony/M\nmatrix/M\nmatron/MYS\nmatte/DRSMZG\nmatter/MDG\nmatting/M\nmattock/SM\nmattress/MS\nmaturate/GNDS\nmaturation/M\nmature/YTGDRS\nmaturity/SM\nmatzo/SMH\nmatzoh/M\nmatzohs\nmatzot\nmaudlin\nmaul/MDRSZG\nmauler/M\nmaunder/SDG\nmausoleum/SM\nmauve/M\nmaven/SM\nmaverick/SM\nmaw/SM\nmawkish/PY\nmawkishness/M\nmax/GMDS\nmaxi/MS\nmaxilla/M\nmaxillae\nmaxillary\nmaxim/SM\nmaxima\nmaximal/Y\nmaximization/M\nmaximize/GDS\nmaximum/SM\nmay/M\nmaybe/SM\nmayday/MS\nmayflower/MS\nmayfly/SM\nmayhem/M\nmayn't\nmayo/M\nmayonnaise/M\nmayor/SM\nmayoral\nmayoralty/M\nmayoress/MS\nmaypole/SM\nmayst\nmaze/MS\nmazurka/MS\nmdse\nme/DSH\nmead/M\nmeadow/MS\nmeadowlark/MS\nmeager/PY\nmeagerness/M\nmeal/MS\nmealiness/M\nmealtime/SM\nmealy/TPR\nmealybug/SM\nmealymouthed\nmean/MRYJPSTG\nmeander/SMDJG\nmeanderings/M\nmeanie/M\nmeaning/M\nmeaningful/PY\nmeaningfulness/M\nmeaningless/YP\nmeaninglessness/M\nmeanness/M\nmeant/U\nmeantime/M\nmeanwhile/M\nmeany/SM\nmeas\nmeasles/M\nmeasly/RT\nmeasurable\nmeasurably\nmeasure's\nmeasure/ADSG\nmeasured/U\nmeasureless\nmeasurement/MS\nmeat/MS\nmeatball/MS\nmeathead/MS\nmeatiness/M\nmeatless\nmeatloaf/M\nmeatloaves\nmeatpacking/M\nmeaty/TPR\nmecca/SM\nmechanic/MS\nmechanical/Y\nmechanics/M\nmechanism/SM\nmechanistic\nmechanistically\nmechanization/M\nmechanize/DSG\nmedal/SM\nmedalist/MS\nmedallion/SM\nmeddle/ZGDRS\nmeddler/M\nmeddlesome\nmedia/SM\nmedial/AY\nmedian/MS\nmediate/ADSGN\nmediated/U\nmediation/AM\nmediator/MS\nmedic/SM\nmedicaid/M\nmedical/SMY\nmedicament/M\nmedicare/M\nmedicate/GNXDS\nmedication/M\nmedicinal/Y\nmedicine/MS\nmedico/MS\nmedieval\nmedievalist/MS\nmediocre\nmediocrity/SM\nmeditate/DSGNVX\nmeditation/M\nmeditative/Y\nmedium/MS\nmedley/MS\nmedulla/SM\nmedusa\nmedusae\nmeed/M\nmeek/RYPT\nmeekness/M\nmeerschaum/SM\nmeet/MJSG\nmeeting/M\nmeetinghouse/SM\nmeetup/MS\nmeg/S\nmega\nmegabit/SM\nmegabucks/M\nmegabyte/MS\nmegachurch/MS\nmegacycle/SM\nmegadeath/M\nmegadeaths\nmegahertz/M\nmegalith/M\nmegalithic\nmegaliths\nmegalomania/M\nmegalomaniac/SM\nmegalopolis/MS\nmegaphone/DSMG\nmegapixel/SM\nmegastar/S\nmegaton/SM\nmegawatt/MS\nmeh\nmeiosis/M\nmeiotic\nmelamine/M\nmelancholia/M\nmelancholic/S\nmelancholy/M\nmelange/MS\nmelanin/M\nmelanoma/SM\nmeld/MDSG\nmelee/SM\nmeliorate/GNVDS\nmelioration/M\nmellifluous/PY\nmellifluousness/M\nmellow/PTGDRYS\nmellowness/M\nmelodic\nmelodically\nmelodious/YP\nmelodiousness/M\nmelodrama/MS\nmelodramatic/S\nmelodramatically\nmelodramatics/M\nmelody/SM\nmelon/SM\nmelt's\nmelt/ADSG\nmeltdown/SM\nmember's\nmember/EAS\nmembership/SM\nmembrane/SM\nmembranous\nmeme/MS\nmemento/MS\nmemo/MS\nmemoir/MS\nmemorabilia/M\nmemorability/M\nmemorable/U\nmemorably\nmemorandum/MS\nmemorial/SM\nmemorialize/DSG\nmemorization/M\nmemorize/DSG\nmemory/SM\nmemsahib/S\nmen/M\nmenace/MGDS\nmenacing/Y\nmenage/MS\nmenagerie/MS\nmend/MDRSZG\nmendacious/Y\nmendacity/M\nmendelevium/M\nmender/M\nmendicancy/M\nmendicant/SM\nmending/M\nmenfolk/MS\nmenfolks/M\nmenhaden/M\nmenial/MYS\nmeningeal\nmeninges\nmeningitis/M\nmeninx/M\nmenisci\nmeniscus/M\nmenopausal\nmenopause/M\nmenorah/M\nmenorahs\nmensch/MS\nmenservants\nmenses/M\nmenstrual\nmenstruate/GNDS\nmenstruation/M\nmensurable\nmensuration/M\nmenswear/M\nmental/Y\nmentalist/SM\nmentality/SM\nmenthol/M\nmentholated\nmention/GSMD\nmentioned/U\nmentor/MDSG\nmenu/MS\nmeow/MDSG\nmercantile\nmercantilism/M\nmercenary/SM\nmercer/MS\nmercerize/GDS\nmerchandise/MZGDRS\nmerchandiser/M\nmerchandising/M\nmerchant/MBS\nmerchantman/M\nmerchantmen\nmerciful/UY\nmerciless/PY\nmercilessness/M\nmercurial/Y\nmercuric\nmercury/M\nmercy/SM\nmere/MYTS\nmeretricious/YP\nmeretriciousness/M\nmerganser/MS\nmerge/DRSZG\nmerger/M\nmeridian/MS\nmeringue/MS\nmerino/MS\nmerit/CSM\nmerited/U\nmeriting\nmeritless\nmeritocracy/SM\nmeritocratic\nmeritorious/PY\nmeritoriousness/M\nmermaid/SM\nmerman/M\nmermen\nmerrily\nmerriment/M\nmerriness/M\nmerry/TRP\nmerrymaker/MS\nmerrymaking/M\nmesa/MS\nmescal/MS\nmescalin\nmescaline/M\nmesdames\nmesdemoiselles\nmesh/MDSG\nmesmeric\nmesmerism/M\nmesmerize/ZGDRS\nmesmerizer/M\nmesomorph/M\nmesomorphs\nmeson/SM\nmesosphere/SM\nmesquite/SM\nmess/MDSG\nmessage/MGDS\nmesseigneurs\nmessenger/SM\nmessiah/M\nmessiahs\nmessianic\nmessieurs\nmessily\nmessiness/M\nmessmate/SM\nmessy/PTR\nmestizo/MS\nmet\nmeta\nmetabolic\nmetabolically\nmetabolism/SM\nmetabolite/SM\nmetabolize/DSG\nmetacarpal/SM\nmetacarpi\nmetacarpus/M\nmetadata\nmetal/SMD\nmetalanguage/MS\nmetallic\nmetallurgic\nmetallurgical\nmetallurgist/MS\nmetallurgy/M\nmetalwork/MRZG\nmetalworker/M\nmetalworking/M\nmetamorphic\nmetamorphism/M\nmetamorphose/GDS\nmetamorphosis/M\nmetaphor/MS\nmetaphoric\nmetaphorical/Y\nmetaphysical/Y\nmetaphysics/M\nmetastases\nmetastasis/M\nmetastasize/DSG\nmetastatic\nmetatarsal/MS\nmetatarsi\nmetatarsus/M\nmetatheses\nmetathesis/M\nmete/MZGDRS\nmetempsychoses\nmetempsychosis/M\nmeteor/MS\nmeteoric\nmeteorically\nmeteorite/SM\nmeteoroid/SM\nmeteorologic\nmeteorological\nmeteorologist/SM\nmeteorology/M\nmeter/GMD\nmetformin\nmethadone/M\nmethamphetamine/M\nmethane/M\nmethanol/M\nmethinks\nmethod/MS\nmethodical/YP\nmethodicalness/M\nmethodological/Y\nmethodology/SM\nmethotrexate\nmethought\nmeths\nmethyl/M\nmeticulous/YP\nmeticulousness/M\nmetier/MS\nmetric/S\nmetrical/Y\nmetricate/GNDS\nmetrication/M\nmetricize/GDS\nmetro/SM\nmetronome/MS\nmetropolis/MS\nmetropolitan\nmettle/M\nmettlesome\nmew/SGMD\nmewl/DSG\nmews/M\nmezzanine/MS\nmezzo/SM\nmfg\nmfr/S\nmg\nmgr\nmi/MNX\nmiasma/MS\nmic/S\nmica/M\nmice\nmick/S\nmickey/MS\nmicro/SM\nmicroaggression/SM\nmicrobe/MS\nmicrobial\nmicrobiological\nmicrobiologist/MS\nmicrobiology/M\nmicrobrewery/SM\nmicrochip/MS\nmicrocircuit/SM\nmicrocode\nmicrocomputer/MS\nmicrocosm/MS\nmicrocosmic\nmicrodot/SM\nmicroeconomics/M\nmicroelectronic/S\nmicroelectronics/M\nmicrofiber/MS\nmicrofiche/M\nmicrofilm/GMDS\nmicrofinance\nmicrofloppies\nmicrogroove/SM\nmicrolight/MS\nmicroloan/MS\nmicromanage/ZGDRSL\nmicromanagement/M\nmicromanager/M\nmicrometeorite/SM\nmicrometer/MS\nmicron/MS\nmicroorganism/MS\nmicrophone/SM\nmicroprocessor/MS\nmicroscope/SM\nmicroscopic\nmicroscopical/Y\nmicroscopy/M\nmicrosecond/MS\nmicrosurgery/M\nmicrowave/DSMGB\nmicrowaveable\nmid\nmidair/M\nmidday/M\nmidden/MS\nmiddle/MGS\nmiddlebrow/SM\nmiddleman/M\nmiddlemen\nmiddlemost\nmiddleweight/MS\nmiddy/SM\nmidfield/RZ\nmidge/SM\nmidget/MS\nmidi/MS\nmidland/MS\nmidlife/M\nmidmost\nmidnight/M\nmidpoint/MS\nmidrib/MS\nmidriff/MS\nmidsection/MS\nmidshipman/M\nmidshipmen\nmidships\nmidsize\nmidst/M\nmidstream/M\nmidsummer/M\nmidterm/MS\nmidtown/M\nmidway/MS\nmidweek/MS\nmidwife/MGDS\nmidwifery/SM\nmidwinter/M\nmidwives\nmidyear/MS\nmien/M\nmiff/DSG\nmight've\nmight/M\nmightily\nmightiness/M\nmightn't\nmighty/TRP\nmignonette/SM\nmigraine/MS\nmigrant/MS\nmigrate/AGDS\nmigration/SM\nmigratory\nmikado/MS\nmike/MGDS\nmil/SZMR\nmilady/SM\nmilch\nmild/MRYTP\nmildew/SMDG\nmildness/M\nmile/MS\nmileage/SM\nmilepost/MS\nmiler/M\nmilestone/MS\nmilf/MS\nmilieu/SM\nmilitancy/M\nmilitant/MYS\nmilitarily\nmilitarism/M\nmilitarist/SM\nmilitaristic\nmilitarization/CM\nmilitarize/CDSG\nmilitary/M\nmilitate/GDS\nmilitia/SM\nmilitiaman/M\nmilitiamen\nmilk/MDRSZG\nmilker/M\nmilkiness/M\nmilkmaid/MS\nmilkman/M\nmilkmen\nmilkshake/SM\nmilksop/MS\nmilkweed/SM\nmilky/RTP\nmill/MDRSZGJ\nmillage/M\nmillennia\nmillennial/M\nmillennium/MS\nmiller/M\nmillet/M\nmilliard/MS\nmillibar/MS\nmilligram/MS\nmilliliter/MS\nmillimeter/MS\nmilliner/MS\nmillinery/M\nmilling/M\nmillion/HSM\nmillionaire/SM\nmillionairess/S\nmillionth/M\nmillionths\nmillipede/SM\nmillisecond/SM\nmillpond/SM\nmillrace/SM\nmillstone/SM\nmillstream/MS\nmillwright/SM\nmilometer/S\nmilquetoast/SM\nmilt/MDSG\nmime/MGDS\nmimeograph/GMD\nmimeographs\nmimetic\nmimic/SM\nmimicked\nmimicker/SM\nmimicking\nmimicry/SM\nmimosa/SM\nmin\nminaret/MS\nminatory\nmince/DRSMZG\nmincemeat/M\nmincer/M\nmind's\nmind/ADRSZG\nmindbogglingly\nminded/P\nmindful/YP\nmindfulness/M\nmindless/YP\nmindlessness/M\nmindset/MS\nmine/MZGNDRSX\nminefield/SM\nminer/M\nmineral/MS\nmineralogical\nmineralogist/MS\nmineralogy/M\nminestrone/M\nminesweeper/SM\nmingle/DSG\nmingy\nmini/MS\nminiature/MS\nminiaturist/MS\nminiaturization/M\nminiaturize/GDS\nminibar/S\nminibike/SM\nminibus/MS\nminicab/S\nminicam/MS\nminicomputer/SM\nminifloppies\nminim/SM\nminima\nminimal/Y\nminimalism/M\nminimalist/MS\nminimization/M\nminimize/DSG\nminimum/MS\nmining/M\nminion/M\nminiseries/M\nminiskirt/MS\nminister/SGMD\nministerial\nministrant/MS\nministration/MS\nministry/SM\nminivan/MS\nmink/MS\nminnesinger/MS\nminnow/SM\nminor/SMDG\nminority/SM\nminoxidil/M\nminster/MS\nminstrel/SM\nminstrelsy/M\nmint/MDRSZG\nmintage/M\nminter/M\nminty/RT\nminuend/MS\nminuet/SM\nminus/MS\nminuscule/MS\nminute/PDRSMYTG\nminuteman/M\nminutemen\nminuteness/M\nminutia/M\nminutiae\nminx/MS\nmiracle/MS\nmiraculous/Y\nmirage/SM\nmire/MGDS\nmirror/GSMD\nmirth/M\nmirthful/PY\nmirthfulness/M\nmirthless/Y\nmiry/RT\nmisaddress/DSG\nmisadventure/MS\nmisaligned\nmisalignment/M\nmisalliance/MS\nmisanthrope/SM\nmisanthropic\nmisanthropically\nmisanthropist/MS\nmisanthropy/M\nmisapplication/M\nmisapply/DSGNX\nmisapprehend/GSD\nmisapprehension/MS\nmisappropriate/XDSGN\nmisappropriation/M\nmisbegotten\nmisbehave/GDS\nmisbehavior/M\nmisc\nmiscalculate/DSXGN\nmiscalculation/M\nmiscall/DSG\nmiscarriage/MS\nmiscarry/GDS\nmiscast/SG\nmiscegenation/M\nmiscellaneous/Y\nmiscellany/SM\nmischance/SM\nmischief/M\nmischievous/YP\nmischievousness/M\nmiscibility/M\nmiscible\nmiscommunication/S\nmisconceive/GDS\nmisconception/SM\nmisconduct/MDGS\nmisconstruction/MS\nmisconstrue/GDS\nmiscount/MDSG\nmiscreant/SM\nmiscue/DSMG\nmisdeal/GMS\nmisdealt\nmisdeed/MS\nmisdemeanor/MS\nmisdiagnose/GDS\nmisdiagnosis/M\nmisdid\nmisdirect/SDG\nmisdirection/M\nmisdo/JG\nmisdoes\nmisdoing/M\nmisdone\nmiser/SBMY\nmiserableness/M\nmiserably\nmiserliness/M\nmisery/SM\nmisfeasance/M\nmisfeature/S\nmisfile/GDS\nmisfire/MGDS\nmisfit/SM\nmisfitted\nmisfitting\nmisfortune/SM\nmisgiving/MS\nmisgovern/SDGL\nmisgovernment/M\nmisguidance/M\nmisguide/DSG\nmisguided/Y\nmishandle/DSG\nmishap/SM\nmishear/GS\nmisheard\nmishit/S\nmishitting\nmishmash/MS\nmisidentify/GDS\nmisinform/DGS\nmisinformation/M\nmisinterpret/SGD\nmisinterpretation/SM\nmisjudge/DSG\nmisjudgment/SM\nmislabel/GSD\nmislaid\nmislay/GS\nmislead/GS\nmisleading/Y\nmisled\nmismanage/LGDS\nmismanagement/M\nmismatch/GMDS\nmisname/GDS\nmisnomer/MS\nmisogamist/MS\nmisogamy/M\nmisogynist/SM\nmisogynistic\nmisogynous\nmisogyny/M\nmisplace/GLDS\nmisplacement/M\nmisplay/GMDS\nmisprint/GMDS\nmisprision/M\nmispronounce/DSG\nmispronunciation/SM\nmisquotation/MS\nmisquote/MGDS\nmisread/GJS\nmisreading/M\nmisremember/GDS\nmisreport/MDGS\nmisrepresent/GDS\nmisrepresentation/MS\nmisrule/MGDS\nmiss's\nmiss/EDSGV\nmissal/ESM\nmissed/U\nmisshape/GDS\nmisshapen\nmissile/MS\nmissilery/M\nmission/AMS\nmissionary/SM\nmissioner/SM\nmissive/MS\nmisspeak/GS\nmisspell/GDJS\nmisspelling/M\nmisspend/GS\nmisspent\nmisspoke\nmisspoken\nmisstate/GDSL\nmisstatement/SM\nmisstep/MS\nmissus/MS\nmist's\nmist/CDRSZG\nmistakable/U\nmistake/BMGS\nmistaken/Y\nmister's\nmistily\nmistime/GDS\nmistiness/M\nmistletoe/M\nmistook\nmistral/MS\nmistranslated\nmistreat/LDGS\nmistreatment/M\nmistress/MS\nmistrial/MS\nmistrust/MDSG\nmistrustful/Y\nmisty/PRT\nmistype/GS\nmisunderstand/SGJ\nmisunderstanding/M\nmisunderstood\nmisuse/DSMG\nmite/MZRS\nmiter/MDG\nmitigate/DSGN\nmitigated/U\nmitigation/M\nmitochondria\nmitochondrial\nmitochondrion\nmitoses\nmitosis/M\nmitotic\nmitral\nmitt/MNSX\nmitten/M\nmitzvah\nmix/ZGMDRSB\nmixed/U\nmixer/M\nmixture/SM\nmizzen/MS\nmizzenmast/SM\nmkay\nmks\nml\nmm\nmnemonic/MS\nmnemonically\nmo/CKHS\nmoan/MDRSZG\nmoaner/M\nmoat/MDS\nmob's\nmob/CS\nmobbed/C\nmobbing/C\nmobile/MS\nmobility/M\nmobilization/CM\nmobilizations\nmobilize/CDSG\nmobilizer/SM\nmobster/SM\nmoccasin/SM\nmocha/SM\nmock/DRSZG\nmocker/M\nmockery/SM\nmocking/Y\nmockingbird/SM\nmod/STM\nmodal/SM\nmodality/S\nmodded\nmodding\nmode/MS\nmodel/ZGSJMDR\nmodeler/M\nmodeling/M\nmodem/SM\nmoderate/MYGNPDS\nmoderateness/M\nmoderation/M\nmoderator/SM\nmodern/MYPS\nmodernism/M\nmodernist/SM\nmodernistic\nmodernity/M\nmodernization/M\nmodernize/DRSZG\nmodernizer/M\nmodernness/M\nmodest/Y\nmodesty/M\nmodicum/SM\nmodifiable\nmodification/M\nmodified/U\nmodifier/M\nmodify/DRSXZGN\nmodish/YP\nmodishness/M\nmodular\nmodularization\nmodulate/CGNDS\nmodulation/CM\nmodulations\nmodulator/MS\nmodule/MS\nmodulo\nmodulus\nmoggy\nmogul/SM\nmohair/M\nmoi\nmoiety/SM\nmoil/MDSG\nmoire/SM\nmoist/XTPNRY\nmoisten/DRZG\nmoistener/M\nmoistness/M\nmoisture/M\nmoisturize/ZGDRS\nmoisturizer/M\nmolar/SM\nmolasses/M\nmold/MDRJSZG\nmoldboard/SM\nmolder/GMD\nmoldiness/M\nmolding/M\nmoldy/TPR\nmole/MS\nmolecular\nmolecularity/M\nmolecule/SM\nmolehill/SM\nmoleskin/M\nmolest/DRZGS\nmolestation/M\nmolested/U\nmolester/M\nmoll/MS\nmollification/M\nmollify/DSNG\nmolluscan\nmollusk/SM\nmolly/SM\nmollycoddle/DSMG\nmolt/MDNRSZG\nmolter/M\nmolybdenum/M\nmom/SM\nmoment/MS\nmomenta\nmomentarily\nmomentariness/M\nmomentary/P\nmomentous/PY\nmomentousness/M\nmomentum/M\nmommy/SM\nmonad\nmonarch/M\nmonarchic\nmonarchical\nmonarchism/M\nmonarchist/MS\nmonarchistic\nmonarchs\nmonarchy/SM\nmonastery/SM\nmonastic/MS\nmonastical/Y\nmonasticism/M\nmonaural\nmonetarily\nmonetarism/M\nmonetarist/MS\nmonetary\nmonetization/C\nmonetize/CGDS\nmoney/SMD\nmoneybag/MS\nmoneybox/S\nmoneylender/SM\nmoneymaker/SM\nmoneymaking/M\nmonger/MDGS\nmongol/S\nmongolism/M\nmongoloid/MS\nmongoose/MS\nmongrel/SM\nmonies\nmoniker/SM\nmonism/M\nmonist/MS\nmonition/SM\nmonitor/SMDG\nmonitory\nmonk/MS\nmonkey/MDGS\nmonkeyshine/SM\nmonkish\nmonkshood/SM\nmono/M\nmonochromatic\nmonochrome/MS\nmonocle/DSM\nmonoclonal\nmonocotyledon/SM\nmonocotyledonous\nmonocular\nmonodic\nmonodist/SM\nmonody/SM\nmonogamist/MS\nmonogamous/Y\nmonogamy/M\nmonogram/SM\nmonogrammed\nmonogramming\nmonograph/M\nmonographs\nmonolingual/MS\nmonolith/M\nmonolithic\nmonoliths\nmonologist/SM\nmonologue/SM\nmonomania/M\nmonomaniac/MS\nmonomaniacal\nmonomer/SM\nmononucleosis/M\nmonophonic\nmonoplane/SM\nmonopolist/SM\nmonopolistic\nmonopolization/M\nmonopolize/DRSZG\nmonopolizer/M\nmonopoly/SM\nmonorail/MS\nmonosyllabic\nmonosyllable/MS\nmonotheism/M\nmonotheist/SM\nmonotheistic\nmonotone/MS\nmonotonic\nmonotonically\nmonotonous/PY\nmonotonousness/M\nmonotony/M\nmonounsaturated\nmonoxide/MS\nmonseigneur/M\nmonsieur/M\nmonsignor/SM\nmonsoon/SM\nmonsoonal\nmonster/SM\nmonstrance/ASM\nmonstrosity/SM\nmonstrous/Y\nmontage/SM\nmonth/MY\nmonthly/SM\nmonths\nmonument/MS\nmonumental/Y\nmoo/SGMD\nmooch/ZGMDRS\nmoocher/M\nmood/MS\nmoodily\nmoodiness/M\nmoody/TPR\nmoon/MDSG\nmoonbeam/MS\nmoonless\nmoonlight/SMDRZG\nmoonlighter/M\nmoonlighting/M\nmoonlit\nmoonscape/SM\nmoonshine/MZRS\nmoonshiner/M\nmoonshot/MS\nmoonstone/MS\nmoonstruck\nmoonwalk/MS\nmoor/MDJSG\nmoorhen/S\nmooring/M\nmoorland/MS\nmoose/M\nmoot/DSG\nmop/SZGMDR\nmope/MS\nmoped/SM\nmoper/M\nmopey\nmopier\nmopiest\nmopish\nmopped\nmoppet/MS\nmopping\nmoraine/SM\nmoral/SMY\nmorale/M\nmoralism\nmoralist/MS\nmoralistic\nmoralistically\nmoralities\nmorality/UM\nmoralization/CM\nmoralize/CGDS\nmoralizer/MS\nmorass/MS\nmoratorium/SM\nmoray/SM\nmorbid/YP\nmorbidity/M\nmorbidness/M\nmordancy/M\nmordant/SMY\nmore/MS\nmoreish\nmorel/SM\nmoreover\nmores/M\nmorgue/MS\nmoribund\nmorn/MJSG\nmorning/M\nmorocco/M\nmoron/SM\nmoronic\nmoronically\nmorose/YP\nmoroseness/M\nmorph/GD\nmorpheme/MS\nmorphemic\nmorphia/M\nmorphine/M\nmorphing/M\nmorphological\nmorphology/M\nmorphs\nmorrow/MS\nmorsel/MS\nmortal/MYS\nmortality/M\nmortar/MDSG\nmortarboard/SM\nmortgage's\nmortgage/AGDS\nmortgagee/MS\nmortgagor/MS\nmortician/MS\nmortification/M\nmortify/NGDS\nmortise/DSMG\nmortuary/SM\nmosaic/MS\nmosey/SGD\nmosh/DSG\nmosque/MS\nmosquito/M\nmosquitoes\nmoss/MS\nmossback/SM\nmossy/TR\nmost/MY\nmot/SM\nmote's\nmote/KCXSVN\nmotel/SM\nmotet/SM\nmoth/M\nmothball/GMDS\nmother/MDYSG\nmotherboard/SM\nmotherfucker/MS!\nmotherfucking/!\nmotherhood/M\nmotherland/MS\nmotherless\nmotherliness/M\nmoths\nmotif/SM\nmotile/S\nmotility/M\nmotion/KCM\nmotioned\nmotioning\nmotionless/YP\nmotionlessness/M\nmotivate/CDSG\nmotivated/U\nmotivation/SM\nmotivational\nmotivator/SM\nmotive/MS\nmotiveless\nmotley/MS\nmotlier\nmotliest\nmotocross/MS\nmotor/SGMD\nmotorbike/MGDS\nmotorboat/MS\nmotorcade/MS\nmotorcar/SM\nmotorcycle/DSMG\nmotorcyclist/MS\nmotorist/SM\nmotorization/M\nmotorize/DSG\nmotorman/M\nmotormen\nmotormouth/M\nmotormouths\nmotorway/SM\nmottle/GDS\nmotto/M\nmottoes\nmoue/MS\nmound/SGMD\nmount/EASGMD\nmountable\nmountain/SM\nmountaineer/SMDG\nmountaineering/M\nmountainous\nmountainside/SM\nmountaintop/SM\nmountebank/MS\nmounted/U\nmounter/MS\nmounting/SM\nmourn/SZGDR\nmourned/U\nmourner/M\nmournful/YP\nmournfulness/M\nmourning/M\nmouse/DRSMZG\nmouser/M\nmousetrap/SM\nmousetrapped\nmousetrapping\nmousiness/M\nmoussaka/S\nmousse/MGDS\nmousy/PTR\nmouth/GMD\nmouthfeel\nmouthful/MS\nmouthiness/M\nmouthpiece/MS\nmouths\nmouthwash/MS\nmouthwatering\nmouthy/PTR\nmouton/M\nmovable/SM\nmove/AMZGDRSB\nmoved/U\nmovement/SM\nmover/AM\nmovie/SM\nmoviegoer/SM\nmoving/Y\nmow/SZGMDR\nmower/M\nmoxie/M\nmozzarella/M\nmp\nmpg\nmph\nmt\nmtg\nmtge\nmu/SM\nmuch/M\nmucilage/M\nmucilaginous\nmuck/MDSG\nmuckrake/DRSZG\nmuckraker/M\nmucky/TR\nmucous\nmucus/M\nmud/M\nmuddily\nmuddiness/M\nmuddle/MGDS\nmuddleheaded\nmuddy/PTGDRS\nmudflap/S\nmudflat/MS\nmudguard/SM\nmudpack/S\nmudroom/MS\nmudslide/MS\nmudslinger/SM\nmudslinging/M\nmuenster/M\nmuesli\nmuezzin/MS\nmuff/MDSG\nmuffin/MS\nmuffle/ZGDRS\nmuffler/M\nmufti/SM\nmug/SM\nmugful/MS\nmugged\nmugger/MS\nmugginess/M\nmugging/MS\nmuggins\nmuggle/MS\nmuggy/PTR\nmugshot/MS\nmugwump/MS\nmujaheddin\nmukluk/MS\nmulatto/M\nmulattoes\nmulberry/SM\nmulch/GMDS\nmulct/SGMD\nmule/MS\nmuleskinner/MS\nmuleteer/MS\nmulish/PY\nmulishness/M\nmull/DSG\nmullah/M\nmullahs\nmullein/M\nmullet/MS\nmulligan/SM\nmulligatawny/M\nmullion/SMD\nmulti\nmulticellular\nmultichannel\nmulticolored\nmulticultural\nmulticulturalism/M\nmultidimensional\nmultidisciplinary\nmultifaceted\nmultifamily\nmultifarious/PY\nmultifariousness/M\nmultiform\nmultigrain\nmultilateral/Y\nmultilayered\nmultilevel\nmultilingual\nmultilingualism/M\nmultimedia/M\nmultimillionaire/SM\nmultinational/SM\nmultipart\nmultiparty\nmultiplayer/M\nmultiple/MS\nmultiplex/ZGMDRS\nmultiplexer/M\nmultiplicand/MS\nmultiplication/M\nmultiplicative\nmultiplicity/SM\nmultiplier/M\nmultiply/NZGDRSX\nmultiprocessing\nmultiprocessor/SM\nmultipurpose\nmultiracial\nmultistage\nmultistory\nmultitask/GS\nmultitasking/M\nmultitude/SM\nmultitudinous\nmultivariate\nmultiverse/SM\nmultivitamin/MS\nmultiyear\nmum\nmumble/MZGDRS\nmumbler/M\nmumbletypeg/M\nmummer/MS\nmummery/M\nmummification/M\nmummify/GNDS\nmummy/SM\nmumps/M\nmun\nmunch/GDS\nmunchie/S\nmunchies/M\nmunchkin/SM\nmundane/SY\nmung/DSG\nmunicipal/SMY\nmunicipality/SM\nmunificence/M\nmunificent/Y\nmunition/MDGS\nmural/SM\nmuralist/SM\nmurder/ZGMDRS\nmurderer/M\nmurderess/MS\nmurderous/Y\nmurk/MS\nmurkily\nmurkiness/M\nmurky/PTR\nmurmur/ZGJMDRS\nmurmurer/M\nmurmuring/M\nmurmurous\nmurrain/M\nmuscat/MS\nmuscatel/SM\nmuscle/MGDS\nmusclebound\nmuscleman\nmusclemen\nmuscly\nmuscular/Y\nmuscularity/M\nmusculature/M\nmusculoskeletal\nmuse/MGDSJ\nmusette/MS\nmuseum/MS\nmush/MDRSZG\nmushiness/M\nmushroom/GSMD\nmushy/PTR\nmusic/SM\nmusical/MYS\nmusicale/MS\nmusicality/M\nmusician/SMY\nmusicianship/M\nmusicological\nmusicologist/MS\nmusicology/M\nmusing/MY\nmusk/M\nmuskeg/MS\nmuskellunge/MS\nmusket/MS\nmusketeer/MS\nmusketry/M\nmuskie/M\nmuskiness/M\nmuskmelon/SM\nmuskox/MN\nmuskrat/MS\nmusky/PTRS\nmuslin/M\nmuss/MDSG\nmussel/MS\nmussy/TR\nmust've\nmust/MRSZ\nmustache/MDS\nmustachio/SMD\nmustang/MS\nmustard/M\nmuster/GMD\nmustily\nmustiness/M\nmustn't\nmusty/PTR\nmutability/M\nmutably\nmutagen/MS\nmutagenic\nmutant/MS\nmutate/XGNVDS\nmutation/M\nmutational\nmute/MYTGDRSPB\nmuteness/M\nmutilate/DSGNX\nmutilation/M\nmutilator/SM\nmutineer/SM\nmutinous/Y\nmutiny/GDSM\nmutt/MS\nmutter/ZGJMDRS\nmutterer/M\nmuttering/M\nmutton/M\nmuttonchops/M\nmuttony\nmutual/Y\nmutuality/M\nmuumuu/MS\nmuzak\nmuzzily\nmuzzle/DSMG\nmuzzy/P\nmy\nmycologist/SM\nmycology/M\nmyelitis/M\nmyna/MS\nmyocardial\nmyocardium\nmyopia/M\nmyopic\nmyopically\nmyriad/SM\nmyrmidon/MS\nmyrrh/M\nmyrtle/SM\nmys\nmyself\nmysterious/PY\nmysteriousness/M\nmystery/SM\nmystic/SM\nmystical/Y\nmysticism/M\nmystification/CM\nmystify/CDSGN\nmystique/M\nmyth/M\nmythic\nmythical\nmythological\nmythologist/SM\nmythologize/DSG\nmythology/SM\nmyths\nmyxomatosis\nn/IKTH\nnaan/S\nnab/S\nnabbed\nnabbing\nnabob/SM\nnacelle/SM\nnacho/SM\nnacre/M\nnacreous\nnadir/SM\nnae\nnaff/RT\nnag/SM\nnagged\nnagger/MS\nnagging\nnagware\nnah\nnaiad/SM\nnaif/MS\nnail/MDSG\nnailbrush/MS\nnaive/RYT\nnaivete/M\nnaivety/M\nnaked/PY\nnakedness/M\nname's\nname/AGDS\nnameable/U\nnamed/U\nnamedrop\nnamedropping/M\nnameless/Y\nnamely\nnameplate/MS\nnamesake/SM\nnanny/SM\nnanobot/S\nnanosecond/SM\nnanotechnology/SM\nnanotube\nnap/SM\nnapalm/MDSG\nnape/MS\nnaphtha/M\nnaphthalene/M\nnapkin/MS\nnapless\nnapoleon/SM\nnapped\nnapper/MS\nnapping\nnappy/TRSM\nnarc/MS\nnarcissism/M\nnarcissist/MS\nnarcissistic\nnarcissus/M\nnarcolepsy/M\nnarcoleptic\nnarcoses\nnarcosis/M\nnarcotic/SM\nnarcotization/M\nnarcotize/GDS\nnark\nnarky\nnarrate/GNVDSX\nnarration/M\nnarrative/SM\nnarrator/SM\nnarrow/PTGMDRYS\nnarrowness/M\nnarwhal/MS\nnary\nnasal/SMY\nnasality/M\nnasalization/M\nnasalize/DSG\nnascence/AM\nnascent/A\nnastily\nnastiness/M\nnasturtium/SM\nnasty/PTR\nnatal\nnatch\nnation/MS\nnational/MYS\nnationalism/M\nnationalist/SM\nnationalistic\nnationalistically\nnationality/SM\nnationalization/MS\nnationalize/CDSG\nnationhood/M\nnationwide\nnative/MS\nnativity/SM\nnatl\nnatter/GMDS\nnattily\nnattiness/M\nnatty/PTR\nnatural's\nnatural/UPY\nnaturalism/M\nnaturalist/SM\nnaturalistic\nnaturalization/M\nnaturalize/DSG\nnaturalness/UM\nnaturals\nnature's\nnature/CS\nnaturism\nnaturist/S\nnaught/MS\nnaughtily\nnaughtiness/M\nnaughty/PTR\nnausea/M\nnauseate/GDS\nnauseating/Y\nnauseous/PY\nnauseousness/M\nnautical/Y\nnautilus/MS\nnaval\nnave/MS\nnavel/SM\nnavigability/M\nnavigable\nnavigate/DSGN\nnavigation/M\nnavigational\nnavigator/MS\nnavvy/S\nnavy/SM\nnay/SM\nnaysayer/MS\nne'er\nneanderthal/MS\nneap/MS\nnear/DRYSPTG\nnearby\nnearness/M\nnearshore\nnearside\nnearsighted/YP\nnearsightedness/M\nneat/NRYPXT\nneaten/GD\nneath\nneatness/M\nnebula/M\nnebulae\nnebular\nnebulous/PY\nnebulousness/M\nnecessarily/U\nnecessary/SM\nnecessitate/DSG\nnecessitous\nnecessity/SM\nneck/MDSG\nneckband/S\nneckerchief/MS\nnecking/M\nnecklace/MGDSJ\nneckline/MS\nnecktie/MS\nnecrology/M\nnecromancer/SM\nnecromancy/M\nnecrophilia\nnecrophiliac/S\nnecropolis/MS\nnecroses\nnecrosis/M\nnecrotic\nnectar/M\nnectarine/MS\nnee\nneed/MDSG\nneeded/U\nneedful/Y\nneediness/M\nneedle/MGDS\nneedlepoint/M\nneedless/YP\nneedlessness/M\nneedlewoman/M\nneedlewomen\nneedlework/M\nneedn't\nneedy/PTR\nnefarious/YP\nnefariousness/M\nneg\nnegate/DSGNVX\nnegation/M\nnegative/MYGPDS\nnegativeness/M\nnegativism/M\nnegativity/M\nneglect/SGMD\nneglectful/YP\nneglectfulness/M\nnegligee/MS\nnegligence/M\nnegligent/Y\nnegligible\nnegligibly\nnegotiability/M\nnegotiable/A\nnegotiate/ADSGN\nnegotiation/AM\nnegotiations\nnegotiator/MS\nnegritude/M\nnegro\nnegroid\nneigh/MDG\nneighbor/SMDYG\nneighborhood/SM\nneighborliness/M\nneighs\nneither\nnelson/SM\nnematode/SM\nnemeses\nnemesis/M\nneoclassic\nneoclassical\nneoclassicism/M\nneocolonialism/M\nneocolonialist/MS\nneocon/SM\nneoconservative/SM\nneocortex\nneodymium/M\nneolithic\nneologism/SM\nneon/M\nneonatal\nneonate/MS\nneophilia\nneophyte/MS\nneoplasm/MS\nneoplastic\nneoprene/M\nnepenthe/M\nnephew/SM\nnephrite/M\nnephritic\nnephritis/M\nnephropathy\nnepotism/M\nnepotist/SM\nnepotistic\nneptunium/M\nnerd/MS\nnerdy/RT\nnerve's\nnerve/UDSG\nnerveless/YP\nnervelessness/M\nnerviness/M\nnervous/YP\nnervousness/M\nnervy/TPR\nnest/MDSG\nnestle/GJDS\nnestling/M\nnet/SM\nnetball\nnetbook/MS\nnether\nnethermost\nnetherworld/M\nnetiquette/S\nnetted\nnetter/S\nnetting/M\nnettle/MGDS\nnettlesome\nnetwork/SGMD\nnetworking/M\nneural/Y\nneuralgia/M\nneuralgic\nneurasthenia/M\nneurasthenic/MS\nneuritic/MS\nneuritis/M\nneurological/Y\nneurologist/SM\nneurology/M\nneuron/MS\nneuronal\nneuroscience\nneuroses\nneurosis/M\nneurosurgeon/MS\nneurosurgery/M\nneurosurgical\nneurotic/MS\nneurotically\nneuroticism\nneurotransmitter/SM\nneut\nneuter/MDGS\nneutral/SMY\nneutralism/M\nneutralist/SM\nneutrality/M\nneutralization/M\nneutralize/DRSZG\nneutralizer/M\nneutrino/SM\nneutron/SM\nnever\nnevermore\nnevertheless\nnevi\nnevus/M\nnew/STMRYP\nnewbie/MS\nnewborn/SM\nnewcomer/SM\nnewel/SM\nnewfangled\nnewfound\nnewline/S\nnewlywed/SM\nnewness/M\nnews/M\nnewsagent/S\nnewsboy/SM\nnewscast/SMRZ\nnewscaster/M\nnewsdealer/SM\nnewsflash/S\nnewsgirl/SM\nnewsgroup/MS\nnewshound/S\nnewsletter/MS\nnewsman/M\nnewsmen\nnewspaper/MS\nnewspaperman/M\nnewspapermen\nnewspaperwoman/M\nnewspaperwomen\nnewspeak\nnewsprint/M\nnewsreader/S\nnewsreel/MS\nnewsroom/MS\nnewsstand/SM\nnewsweekly/SM\nnewswoman/M\nnewswomen\nnewsworthiness/M\nnewsworthy/P\nnewsy/TR\nnewt/MS\nnewton/MS\nnext/M\nnexus/MS\nniacin/M\nnib/SM\nnibble/MZGDRS\nnibbler/M\nnice/PYTR\nniceness/M\nnicety/SM\nniche/SM\nnick/MDRSZG\nnickel/MS\nnickelodeon/SM\nnicker/MDG\nnickle/S\nnickname/DSMG\nnicotine/M\nniece/SM\nnifedipine\nniff\nniffy\nnifty/TR\nnigga/SM\nniggard/SMY\nniggardliness/M\nniggaz\nnigger/SM!\nniggle/MZGDRS\nniggler/M\nnigh/RT\nnight/SMY\nnightcap/SM\nnightclothes/M\nnightclub/SM\nnightclubbed\nnightclubbing\nnightdress/MS\nnightfall/M\nnightgown/SM\nnighthawk/SM\nnightie/SM\nnightingale/SM\nnightlife/M\nnightlight/S\nnightlong\nnightmare/SM\nnightmarish\nnightshade/SM\nnightshirt/SM\nnightspot/MS\nnightstand/SM\nnightstick/SM\nnighttime/M\nnightwatchman\nnightwatchmen\nnightwear/M\nnihilism/M\nnihilist/MS\nnihilistic\nnil/M\nnimbi\nnimble/TPR\nnimbleness/M\nnimbly\nnimbus/M\nnimby\nnimrod/MS\nnincompoop/SM\nnine/MS\nninepin/MS\nninepins/M\nnineteen/SMH\nnineteenth/M\nnineteenths\nninetieth/M\nninetieths\nninety/HSM\nninja/SM\nninny/SM\nninth/M\nninths\nniobium/M\nnip/SM\nnipped\nnipper/MS\nnippiness/M\nnipping\nnipple/MS\nnippy/TPR\nnirvana/M\nnisei/M\nnit/SMR\nniter/M\nnitpick/SZGDR\nnitpicker/M\nnitpicking/M\nnitrate/DSMGN\nnitration/M\nnitric\nnitrification/M\nnitrite/SM\nnitro\nnitrocellulose/M\nnitrogen/M\nnitrogenous\nnitroglycerin/M\nnitwit/MS\nnix/GMDS\nno/SM\nnob/SY\nnobble/GDS\nnobelium/M\nnobility/M\nnoble/RSPMT\nnobleman/M\nnoblemen\nnobleness/M\nnoblewoman/M\nnoblewomen\nnobody/SM\nnocturnal/Y\nnocturne/MS\nnod/SM\nnodal\nnodded\nnodding\nnoddle/MS\nnoddy\nnode/MS\nnodular\nnodule/MS\nnoel/MS\nnoes\nnoggin/MS\nnohow\nnoise/DSMG\nnoiseless/PY\nnoiselessness/M\nnoisemaker/MS\nnoisily\nnoisiness/M\nnoisome\nnoisy/PTR\nnomad/SM\nnomadic\nnomenclature/MS\nnominal/Y\nnominate/ACGNVDS\nnomination's/A\nnomination/CSM\nnominative/SM\nnominator/CSM\nnominee/MS\nnon\nnonabrasive\nnonabsorbent/SM\nnonacademic\nnonacceptance/M\nnonacid\nnonactive/MS\nnonaddictive\nnonadhesive\nnonadjacent\nnonadjustable\nnonadministrative\nnonage/MS\nnonagenarian/MS\nnonaggression/M\nnonalcoholic\nnonaligned\nnonalignment/M\nnonallergic\nnonappearance/MS\nnonassignable\nnonathletic\nnonattendance/M\nnonautomotive\nnonavailability/M\nnonbasic\nnonbeliever/MS\nnonbelligerent/MS\nnonbinding\nnonbreakable\nnonburnable\nnoncaloric\nnoncancerous\nnonce/M\nnonchalance/M\nnonchalant/Y\nnonchargeable\nnonclerical/MS\nnonclinical\nnoncollectable\nnoncom/MS\nnoncombat\nnoncombatant/MS\nnoncombustible\nnoncommercial/MS\nnoncommittal/Y\nnoncommunicable\nnoncompeting\nnoncompetitive\nnoncompliance/M\nnoncomplying\nnoncomprehending\nnonconducting\nnonconductor/MS\nnonconforming\nnonconformism\nnonconformist/MS\nnonconformity/M\nnonconsecutive\nnonconstructive\nnoncontagious\nnoncontinuous\nnoncontributing\nnoncontributory\nnoncontroversial\nnonconvertible\nnoncooperation/M\nnoncorroding\nnoncorrosive\nnoncredit\nnoncriminal/SM\nnoncritical\nnoncrystalline\nnoncumulative\nnoncustodial\nnondairy\nnondeductible/M\nnondelivery/SM\nnondemocratic\nnondenominational\nnondepartmental\nnondepreciating\nnondescript\nnondestructive\nnondetachable\nnondeterminism\nnondeterministic\nnondisciplinary\nnondisclosure/M\nnondiscrimination/M\nnondiscriminatory\nnondramatic\nnondrinker/MS\nnondrying\nnone\nnoneducational\nnoneffective\nnonelastic\nnonelectric\nnonelectrical\nnonempty\nnonenforceable\nnonentity/SM\nnonequivalent/MS\nnonessential\nnonesuch/MS\nnonetheless\nnonevent/MS\nnonexchangeable\nnonexclusive\nnonexempt/M\nnonexistence/M\nnonexistent\nnonexplosive/MS\nnonfactual\nnonfading\nnonfat\nnonfatal\nnonfattening\nnonferrous\nnonfiction/M\nnonfictional\nnonflammable\nnonflowering\nnonfluctuating\nnonflying\nnonfood/M\nnonfreezing\nnonfunctional\nnongovernmental\nnongranular\nnonhazardous\nnonhereditary\nnonhuman\nnonidentical\nnoninclusive\nnonindependent\nnonindustrial\nnoninfectious\nnoninflammatory\nnoninflationary\nnoninflected\nnonintellectual/MS\nnoninterchangeable\nnoninterference/M\nnonintervention/M\nnonintoxicating\nnoninvasive\nnonirritating\nnonissue\nnonjudgmental\nnonjudicial\nnonlegal\nnonlethal\nnonlinear\nnonliterary\nnonliving/M\nnonmagnetic\nnonmalignant\nnonmember/MS\nnonmetal/SM\nnonmetallic\nnonmigratory\nnonmilitant\nnonmilitary\nnonnarcotic/SM\nnonnative/MS\nnonnegotiable\nnonnuclear\nnonnumerical\nnonobjective\nnonobligatory\nnonobservance/M\nnonobservant\nnonoccupational\nnonoccurence\nnonofficial\nnonoperational\nnonoperative\nnonparallel/MS\nnonpareil/MS\nnonparticipant/MS\nnonparticipating\nnonpartisan/SM\nnonpaying\nnonpayment/SM\nnonperformance/M\nnonperforming\nnonperishable\nnonperson/MS\nnonphysical/Y\nnonplus/S\nnonplussed\nnonplussing\nnonpoisonous\nnonpolitical\nnonpolluting\nnonporous\nnonpracticing\nnonprejudicial\nnonprescription\nnonproductive\nnonprofessional/SM\nnonprofit/SMB\nnonproliferation/M\nnonpublic\nnonpunishable\nnonracial\nnonradioactive\nnonrandom\nnonreactive\nnonreciprocal/SM\nnonreciprocating\nnonrecognition/M\nnonrecoverable\nnonrecurring\nnonredeemable\nnonrefillable\nnonrefundable\nnonreligious\nnonrenewable\nnonrepresentational\nnonresident/MS\nnonresidential\nnonresidual/M\nnonresistance/M\nnonresistant\nnonrestrictive\nnonreturnable/MS\nnonrhythmic\nnonrigid\nnonsalaried\nnonscheduled\nnonscientific\nnonscoring\nnonseasonal\nnonsectarian\nnonsecular\nnonsegregated\nnonsense/M\nnonsensical/Y\nnonsensitive\nnonsexist\nnonsexual\nnonskid\nnonslip\nnonsmoker/SM\nnonsmoking\nnonsocial\nnonspeaking\nnonspecialist/MS\nnonspecializing\nnonspecific\nnonspiritual/SM\nnonstaining\nnonstandard\nnonstarter/MS\nnonstick\nnonstop\nnonstrategic\nnonstriking\nnonstructural\nnonsuccessive\nnonsupport/GM\nnonsurgical\nnonsustaining\nnonsympathizer/M\nnontarnishable\nnontaxable\nnontechnical\nnontenured\nnontheatrical\nnonthinking\nnonthreatening\nnontoxic\nnontraditional\nnontransferable\nnontransparent\nnontrivial\nnontropical\nnonuniform\nnonunion\nnonuser/MS\nnonvenomous\nnonverbal\nnonviable\nnonviolence/M\nnonviolent/Y\nnonvirulent\nnonvocal\nnonvocational\nnonvolatile\nnonvoter/MS\nnonvoting\nnonwhite/MS\nnonworking\nnonyielding\nnonzero\nnoodle/MGDS\nnook/MS\nnookie\nnooky\nnoon/M\nnoonday/M\nnoontide/M\nnoontime/M\nnoose/SM\nnope\nnor\nnor'easter\nnorm/MS\nnormal/MY\nnormalcy/M\nnormality/M\nnormalization/M\nnormalize/DSG\nnormative\nnorth/ZMR\nnorthbound\nnortheast/MRZ\nnortheaster/MY\nnortheastern\nnortheastward/S\nnorther/MY\nnortherly/SM\nnorthern/ZR\nnortherner/M\nnorthernmost\nnorthward/S\nnorthwest/ZMR\nnorthwester/MY\nnorthwestern\nnorthwestward/S\nnose/MGDS\nnosebag/S\nnosebleed/MS\nnosecone/SM\nnosedive/DSMG\nnosegay/SM\nnosh/MDRSZG\nnosher/M\nnosily\nnosiness/M\nnostalgia/M\nnostalgic\nnostalgically\nnostril/MS\nnostrum/MS\nnosy/RPT\nnot/B\nnotability/SM\nnotable/SM\nnotably\nnotarial\nnotarization/M\nnotarize/GDS\nnotary/SM\nnotate/GDS\nnotation/FCSM\nnotch/GMDS\nnote's\nnote/FCSDG\nnotebook/MS\nnotelet/S\nnotepad/S\nnotepaper/M\nnoteworthiness/M\nnoteworthy/P\nnothing/PSM\nnothingness/M\nnotice/MGDS\nnoticeable/U\nnoticeably\nnoticeboard/S\nnoticed/U\nnotifiable\nnotification/M\nnotifier/M\nnotify/NDRSXZG\nnotion/MS\nnotional/Y\nnotoriety/M\nnotorious/Y\nnotwithstanding\nnotwork/S\nnougat/MS\nnoun/KMS\nnourish/DSLG\nnourishment/M\nnous\nnova/MS\nnovae\nnovel/SM\nnovelette/SM\nnovelist/SM\nnovelization/MS\nnovelize/DSG\nnovella/MS\nnovelty/SM\nnovena/MS\nnovene\nnovice/MS\nnovitiate/MS\nnow/M\nnowadays/M\nnoway/S\nnowhere/M\nnowise\nnowt\nnoxious\nnozzle/MS\nnu/SM\nnuance/MDS\nnub/SM\nnubbin/MS\nnubby/TR\nnubile\nnuclear/K\nnucleate/DSGN\nnucleation/M\nnuclei\nnucleic\nnucleoli\nnucleolus/M\nnucleon/SM\nnucleoside\nnucleotide\nnucleus/M\nnude/MTRS\nnudge/GDSM\nnudism/M\nnudist/SM\nnudity/M\nnugatory\nnugget/SM\nnuisance/MS\nnuke/MGDS\nnull/S\nnullification/M\nnullify/NDSG\nnullity/M\nnumb/ZTGPDRYS\nnumber's\nnumber/ASDG\nnumbered/U\nnumberless\nnumbness/M\nnumerable/I\nnumeracy/IM\nnumeral/SM\nnumerate/XGNDS\nnumeration/M\nnumerator/MS\nnumeric\nnumerical/Y\nnumerologist/MS\nnumerology/M\nnumerous/Y\nnuminous\nnumismatic/S\nnumismatics/M\nnumismatist/SM\nnumskull/MS\nnun/SM\nnuncio/SM\nnunnery/SM\nnuptial/MS\nnurse/MZGDRS\nnurselings\nnursemaid/MS\nnurser/M\nnursery/SM\nnurseryman/M\nnurserymen\nnursing/M\nnursling/SM\nnurture/DRSMZG\nnurturer/M\nnut/SM\nnutcase/S\nnutcracker/MS\nnuthatch/MS\nnuthouse/S\nnutmeat/SM\nnutmeg/SM\nnutpick/SM\nnutria/SM\nnutrient/MS\nnutriment/MS\nnutrition/M\nnutritional/Y\nnutritionist/SM\nnutritious/YP\nnutritiousness/M\nnutritive\nnutshell/MS\nnutted\nnutter/S\nnuttiness/M\nnutting\nnutty/RTP\nnuzzle/DRSMZG\nnuzzler/M\nnybble/S\nnylon/MS\nnylons/M\nnymph/M\nnymphet/MS\nnympho/S\nnymphomania/M\nnymphomaniac/SM\nnymphs\no\no'clock\no'er\noaf/SM\noafish/PY\noafishness/M\noak/SMN\noakum/M\noar/SGMD\noarlock/SM\noarsman/M\noarsmen\noarswoman/M\noarswomen\noases\noasis/M\noat/SMN\noatcake/SM\noath/M\noaths\noatmeal/M\noats/M\nob/S\nobbligato/MS\nobduracy/M\nobdurate/PY\nobdurateness/M\nobedience/EM\nobedient/EY\nobeisance/SM\nobeisant\nobelisk/MS\nobese\nobesity/M\nobey/EDSG\nobfuscate/GNXDS\nobfuscation/M\nobi/SM\nobit/MS\nobituary/SM\nobj\nobject/SGVMD\nobjectify/NGDS\nobjection/SMB\nobjectionable/U\nobjectionably\nobjective/SMYP\nobjectiveness/M\nobjectivity/M\nobjector/MS\nobjurgate/XGNDS\nobjurgation/M\noblate/NX\noblation/M\nobligate/DSXGN\nobligation/M\nobligatorily\nobligatory\noblige/EGDS\nobliging/Y\noblique/SMYP\nobliqueness/M\nobliquity/M\nobliterate/DSGN\nobliteration/M\noblivion/M\noblivious/YP\nobliviousness/M\noblong/MS\nobloquy/M\nobnoxious/YP\nobnoxiousness/M\noboe/MS\noboist/MS\nobscene/RYT\nobscenity/SM\nobscurantism/M\nobscurantist/SM\nobscure/DRSYTG\nobscurity/SM\nobsequies\nobsequious/PY\nobsequiousness/M\nobsequy/M\nobservably\nobservance/MS\nobservant/Y\nobservation/SM\nobservational\nobservatory/SM\nobserve/DRSBZG\nobserved/U\nobserver/M\nobsess/DSGV\nobsession/SM\nobsessional/Y\nobsessive/PSMY\nobsessiveness/M\nobsidian/M\nobsolesce/DSG\nobsolescence/M\nobsolescent\nobsolete/GDS\nobstacle/MS\nobstetric/S\nobstetrical\nobstetrician/SM\nobstetrics/M\nobstinacy/M\nobstinate/Y\nobstreperous/YP\nobstreperousness/M\nobstruct/DGVS\nobstructed/U\nobstruction/SM\nobstructionism/M\nobstructionist/MS\nobstructive/YP\nobstructiveness/M\nobtain/DBLGS\nobtainable/U\nobtainment/M\nobtrude/DSG\nobtrusion/M\nobtrusive/UPY\nobtrusiveness/UM\nobtuse/YTRP\nobtuseness/M\nobverse/SM\nobviate/DSGN\nobviation/M\nobvious/PY\nobviousness/M\nocarina/MS\noccasion/GMDS\noccasional/Y\noccidental/SM\nocclude/GDS\nocclusion/SM\nocclusive\noccult/M\noccultism/M\noccultist/SM\noccupancy/M\noccupant/SM\noccupation/AM\noccupational/Y\noccupations\noccupied/U\noccupier/SM\noccupy/ADSG\noccur/AS\noccurred/A\noccurrence/SM\noccurring/A\nocean/SM\noceanfront/SM\noceangoing\noceanic/M\noceanographer/SM\noceanographic\noceanography/M\noceanology/M\nocelot/MS\noch/R\nocher/M\nocker/S\noctagon/MS\noctagonal\noctal\noctane/MS\noctave/MS\noctavo/MS\noctet/SM\noctogenarian/SM\noctopus/MS\nocular/MS\noculist/SM\noculomotor\nodalisque/SM\nodd/STRYLP\noddball/SM\noddity/SM\noddment/SM\noddness/M\nodds/M\node/SM\nodious/YP\nodiousness/M\nodium/M\nodometer/MS\nodor/MDS\nodoriferous\nodorless\nodorous\nodyssey/MS\noedipal\noenology/M\noenophile/SM\noeuvre/MS\nof\noff/SZGDRJ\noffal/M\noffbeat/MS\noffend/ZGDRS\noffender/M\noffense/MS\noffensive's\noffensive/IPY\noffensiveness/IM\noffensives\noffer/JGMD\noffering/M\noffertory/SM\noffhand\noffhanded/PY\noffhandedness/M\noffice/MZRS\nofficeholder/SM\nofficer/M\nofficial/MYS\nofficialdom/M\nofficialese\nofficialism/M\nofficiant/SM\nofficiate/DSG\nofficiator/MS\nofficious/PY\nofficiousness/M\noffing/M\noffish\noffline\noffload/SDG\noffprint/SM\noffset/MS\noffsetting\noffshoot/MS\noffshore/G\noffside\noffsite\noffspring/M\noffstage/S\nofftrack\noft\noften/TR\noftentimes\nofttimes\nogle/MZGDRS\nogler/M\nogre/MS\nogreish\nogress/MS\noh/M\nohm/SM\nohmmeter/MS\noho\nohs\noi\noik/S\noil/SGMD\noilcan/S\noilcloth/M\noilcloths\noilfield/S\noiliness/M\noilman\noilmen\noilskin/MS\noilskins/M\noily/RPT\noink/MDSG\nointment/SM\nokapi/SM\nokay/MSG\nokra/MS\nold/TMNRP\noldie/SM\noldish\noldness/M\noldster/MS\nole/SMV\noleaginous\noleander/MS\noleo/M\noleomargarine/M\nolfactory/SM\noligarch/M\noligarchic\noligarchical\noligarchs\noligarchy/SM\noligonucleotide/S\noligopoly/SM\nolive/SM\nom/SMNX\nombudsman/M\nombudsmen\nomega/SM\nomelet/MS\nomen/M\nomicron/MS\nominous/YP\nominousness/M\nomission/MS\nomit/S\nomitted\nomitting\nomnibus/MS\nomnipotence/M\nomnipotent\nomnipresence/M\nomnipresent\nomniscience/M\nomniscient\nomnivore/MS\nomnivorous/PY\nomnivorousness/M\non/Y\nonboard\nonce/M\noncogene/SM\noncologist/SM\noncology/M\noncoming\none/SXMNP\noneness/M\nonerous/PY\nonerousness/M\noneself\nonetime\nongoing\nonion/M\nonionskin/M\nonline\nonlooker/SM\nonlooking\nonomatopoeia/M\nonomatopoeic\nonomatopoetic\nonrush/MSG\nonscreen\nonset/MS\nonshore\nonside\nonsite\nonslaught/MS\nonstage\nonto\nontogeny/M\nontological\nontology/M\nonus/MS\nonward\nonyx/MS\noodles/M\nooh/GD\noohs\noomph\noops\nooze/MGDS\noozy/TR\nop/SMDG\nopacity/M\nopal/MS\nopalescence/M\nopalescent\nopaque/PYTGDRS\nopaqueness/M\nopcode/S\nope/S\nopen/ZTGJPMDRYS\nopencast\nopened/U\nopener/M\nopenhanded/P\nopenhandedness/M\nopenhearted\nopening/M\nopenness/M\nopenwork/M\nopera/MS\noperable/I\noperand/S\noperate/DSGNVX\noperatic\noperatically\noperation/M\noperational/Y\noperative/SM\noperator/SM\noperetta/SM\nophthalmic\nophthalmologist/SM\nophthalmology/M\nopiate/SM\nopine/GNXDS\nopinion/M\nopinionated\nopium/M\nopossum/MS\nopp\nopponent/SM\nopportune/IY\nopportunism/M\nopportunist/SM\nopportunistic\nopportunistically\nopportunity/SM\noppose/DSG\nopposed/U\nopposite/SMYNX\nopposition/M\noppress/DSGV\noppression/M\noppressive/YP\noppressiveness/M\noppressor/MS\nopprobrious/Y\nopprobrium/M\nopt/SGD\noptic/MS\noptical/Y\noptician/SM\noptics/M\noptima\noptimal/Y\noptimism/SM\noptimist/SM\noptimistic\noptimistically\noptimization/MS\noptimize/DRSG\noptimum/SM\noption/SMDG\noptional/Y\noptometrist/MS\noptometry/M\nopulence/M\nopulent/Y\nopus/MS\nor\noracle/SM\noracular\noral/MYS\norality\norange/SMP\norangeade/MS\norangery/SM\norangutan/SM\norate/GNXDS\noration/M\norator/SM\noratorical/Y\noratorio/MS\noratory/SM\norb/SM\norbicular\norbit/MDRZGS\norbital/SM\norbiter/M\norc/SM\norchard/SM\norchestra/MS\norchestral\norchestrate/DSXGN\norchestration/M\norchid/SM\nordain/SDLG\nordainment/M\nordeal/SM\norder/EAMDGS\nordered/U\norderings\norderliness/EM\norderly/PSM\nordinal/SM\nordinance/SM\nordinarily\nordinariness/M\nordinary/SMP\nordinate/MNSX\nordination/M\nordnance/M\nordure/M\nore/SM\noregano/M\norg\norgan/MS\norgandy/M\norganelle/MS\norganic/SM\norganically/I\norganism/MS\norganismic\norganist/MS\norganization/ASM\norganizational/Y\norganize/AESDG\norganized/U\norganizer/MS\norganza/M\norgasm/SM\norgasmic\norgiastic\norgy/SM\noriel/MS\norient's\norient/AEDGS\noriental/MS\norientalist/S\norientate/EDSGN\norientation/AEM\norientations\norienteering\norifice/MS\norig\norigami/M\norigin/SM\noriginal/MYS\noriginality/M\noriginate/DSGN\norigination/M\noriginator/SM\noriole/SM\norison/SM\normolu/M\nornament/SGMD\nornamental\nornamentation/M\nornate/YP\nornateness/M\norneriness/M\nornery/PRT\nornithological\nornithologist/MS\nornithology/M\norotund\norotundity/SM\norphan/SMDG\norphanage/MS\norris/MS\northodontia/M\northodontic/S\northodontics/M\northodontist/SM\northodox/U\northodoxy/SM\northogonal\northogonality\northographic\northographically\northography/SM\northopedic/S\northopedics/M\northopedist/MS\norzo/M\noscillate/GNDSX\noscillation/M\noscillator/SM\noscillatory\noscilloscope/MS\nosculate/DSXGN\nosculation/M\nosier/MS\nosmium/M\nosmosis/M\nosmotic\nosprey/SM\nossicles\nossification/M\nossify/NGDS\nostensible\nostensibly\nostentation/M\nostentatious/Y\nosteoarthritis/M\nosteopath/M\nosteopathic\nosteopaths\nosteopathy/M\nosteoporosis/M\nostler/S\nostracism/M\nostracize/GDS\nostrich/MS\nother/MSP\notherwise\notherworldly\notiose\notter/MS\nottoman/MS\noubliette/MS\nouch\nought\noughtn't\nounce/MS\nour/S\nourselves\noust/ZGDRS\nouster/M\nout/SJGMDR\noutage/SM\noutargue/GDS\noutback/MS\noutbalance/DSG\noutbid/S\noutbidding\noutboard/MS\noutboast/DSG\noutbound\noutbox/MS\noutbreak/MS\noutbuilding/MS\noutburst/SM\noutcast/MS\noutclass/DSG\noutcome/MS\noutcrop/MS\noutcropped\noutcropping/SM\noutcry/SM\noutdated\noutdid\noutdistance/GDS\noutdo/G\noutdoes\noutdone\noutdoor/S\noutdoors/M\noutdoorsy\noutdraw/GS\noutdrawn\noutdrew\noutercourse\noutermost\nouterwear/M\noutface/GDS\noutfall/S\noutfield/SMRZ\noutfielder/M\noutfight/SG\noutfit/SM\noutfitted\noutfitter/MS\noutfitting\noutflank/GSD\noutflow/MS\noutfought\noutfox/GDS\noutgo/MJG\noutgoes\noutgrew\noutgrow/HGS\noutgrown\noutgrowth/M\noutgrowths\noutguess/GDS\noutgun/S\noutgunned\noutgunning\nouthit/S\nouthitting\nouthouse/SM\nouting/M\noutlaid\noutlandish/PY\noutlandishness/M\noutlast/DSG\noutlaw/SGMD\noutlay/SGM\noutlet/SM\noutlier/S\noutline/MGDS\noutlive/GDS\noutlook/MS\noutlying\noutmaneuver/GDS\noutmatch/GDS\noutmoded\noutnumber/DSG\noutpace/GDS\noutpatient/MS\noutperform/GSD\noutplace/L\noutplacement/M\noutplay/GDS\noutpoint/DGS\noutpost/MS\noutpouring/MS\noutproduce/DSG\noutput/SM\noutputted\noutputting\noutrace/GDS\noutrage/MGDS\noutrageous/Y\noutran\noutrank/GDS\noutre\noutreach/MDSG\noutrider/MS\noutrigger/SM\noutright\noutrun/S\noutrunning\noutscore/GDS\noutsell/GS\noutset/SM\noutshine/GS\noutshone\noutshout/GDS\noutside/MZRS\noutsider/M\noutsize/MS\noutskirt/MS\noutsmart/GDS\noutsold\noutsource/DSG\noutsourcing/M\noutspend/SG\noutspent\noutspoken/YP\noutspokenness/M\noutspread/GS\noutstanding/Y\noutstation/MS\noutstay/DGS\noutstretch/DSG\noutstrip/S\noutstripped\noutstripping\noutta\nouttake/MS\noutvote/GDS\noutward/YS\noutwear/GS\noutweigh/GD\noutweighs\noutwit/S\noutwith\noutwitted\noutwitting\noutwore\noutwork/MDRSZG\noutworn\nouzo/MS\nova\noval/MS\novarian\novary/SM\novate/NX\novation/M\noven/MS\novenbird/SM\novenproof\novenware\nover/MYS\noverabundance/M\noverabundant\noverachieve/ZGDRS\noverachiever/M\noveract/GVSD\noverage/SM\noveraggressive\noverall/SM\noveralls/M\noverambitious\noveranxious\noverarching\noverarm/GSD\noverate\noverattentive\noverawe/DSG\noverbalance/MGDS\noverbear/GS\noverbearing/Y\noverbid/SM\noverbidding\noverbite/MS\noverblown\noverboard\noverbold\noverbook/DGS\noverbore\noverborne\noverbought\noverbuild/SG\noverbuilt\noverburden/GSD\noverbuy/GS\novercame\novercapacity/M\novercapitalize/DSG\novercareful\novercast/MGS\novercautious\novercharge/DSMG\noverclock/GD\novercloud/SGD\novercoat/MS\novercome/GS\novercompensate/DSGN\novercompensation/M\noverconfidence/M\noverconfident\noverconscientious\novercook/DGS\novercritical\novercrowd/SDG\novercrowding/M\noverdecorate/DSG\noverdependent\noverdevelop/SDG\noverdid\noverdo/G\noverdoes\noverdone\noverdose/MGDS\noverdraft/SM\noverdraw/GS\noverdrawn\noverdress/GMDS\noverdrew\noverdrive/SM\noverdub/SM\noverdubbed\noverdubbing\noverdue\novereager\novereat/GSN\noveremotional\noveremphasis/M\noveremphasize/GDS\noverenthusiastic\noverestimate/MGNDS\noverestimation/M\noverexcite/DSG\noverexercise/GDS\noverexert/SDG\noverexertion/M\noverexpose/GDS\noverexposure/M\noverextend/DGS\noverfed\noverfeed/GS\noverfill/DGS\noverflew\noverflight/MS\noverflow/MDSG\noverflown\noverfly/GS\noverfond\noverfull\novergeneralize/DSG\novergenerous\novergraze/DSG\novergrew\noverground\novergrow/HSG\novergrown\novergrowth/M\noverhand/MDS\noverhang/MSG\noverhasty\noverhaul/MDSG\noverhead/MS\noverhear/SG\noverheard\noverheat/DSG\noverhung\noverindulge/GDS\noverindulgence/M\noverindulgent\noverinflated\noverjoy/GSD\noverkill/M\noverladen\noverlaid\noverlain\noverland\noverlap/SM\noverlapped\noverlapping\noverlarge\noverlay/GSM\noverleaf\noverlie\noverload/GMDS\noverlong\noverlook/GMDS\noverlord/MS\noverly/SG\novermanned\novermanning\novermaster/SDG\novermodest\novermuch/S\novernice\novernight/MS\noveroptimism/M\noveroptimistic\noverpaid\noverparticular\noverpass/MS\noverpay/GS\noverplay/GDS\noverpopulate/GNDS\noverpopulation/M\noverpower/SDG\noverpowering/Y\noverpraise/DSG\noverprecise\noverprice/DSG\noverprint/SMDG\noverproduce/GDS\noverproduction/M\noverprotect/SDGV\noverqualified\noverran\noverrate/GDS\noverreach/GDS\noverreact/SDG\noverreaction/SM\noverrefined\noverridden\noverride/MGS\noverripe/M\noverrode\noverrule/GDS\noverrun/SM\noverrunning\noversampling\noversaw\noversea/S\noversee/RSZ\noverseeing\noverseen\noverseer/M\noversell/GS\noversensitive/P\noversensitiveness/M\noversexed\novershadow/DSG\novershare/DSG\novershoe/MS\novershoot/GS\novershot\noversight/SM\noversimple\noversimplification/M\noversimplify/DSNGX\noversize\noversleep/GS\noverslept\noversold\noverspecialization/M\noverspecialize/GDS\noverspend/SG\noverspent\noverspread/GS\noverstaffed\noverstate/DSLG\noverstatement/MS\noverstay/DSG\noverstep/S\noverstepped\noverstepping\noverstimulate/DSG\noverstock/GSD\noverstretch/GDS\noverstrict\noverstrung\noverstuffed\noversubscribe/DSG\noversubtle\noversupply/GDS\noversuspicious\novert/Y\novertake/GS\novertaken\novertax/GDS\noverthink/SG\noverthought\noverthrew\noverthrow/SMG\noverthrown\novertime/MS\novertire/GDS\novertone/MS\novertook\noverture/MS\noverturn/DSG\noveruse/DSMG\novervaluation/S\novervalue/DSG\noverview/MS\noverweening/Y\noverweight/M\noverwhelm/SGD\noverwhelming/Y\noverwinter/SDG\noverwork/GMDS\noverwrite/GS\noverwritten\noverwrote\noverwrought\noverzealous\noviduct/SM\noviparous\novoid/MS\novular\novulate/DSGN\novulation/M\novule/MS\novum/M\now\nowe/DSG\nowl/SM\nowlet/MS\nowlish/Y\nown/ESGD\nowner/MS\nownership/M\nox/MN\noxalate\noxblood/M\noxbow/MS\noxcart/SM\noxford/SM\noxidant/MS\noxidase\noxidation/M\noxidative\noxide/MS\noxidization/M\noxidize/ZGDRS\noxidizer/M\noxtail/S\noxyacetylene/M\noxygen/M\noxygenate/DSGN\noxygenation/M\noxymora\noxymoron/M\noyster/SM\noz\nozone/M\np/NRXTGJ\npH\npa/SMH\npablum/M\npabulum/M\npace/MZGDRS\npacemaker/SM\npacer/M\npacesetter/SM\npacey\npachyderm/MS\npachysandra/MS\npacific\npacifically\npacification/M\npacifier/M\npacifism/M\npacifist/SM\npacifistic\npacify/ZGDRSN\npack's\npack/AUGSD\npackage's\npackage/AGDS\npackager/SM\npackaging/M\npacker/MS\npacket/MS\npacking's\npackinghouse/SM\npacksaddle/MS\npact/MS\npacy/RT\npad/SM\npadded\npadding/M\npaddle/MZGDRS\npaddler/M\npaddock/MDGS\npaddy/SM\npadlock/MDSG\npadre/SM\npaean/SM\npaella/MS\npagan/SM\npaganism/M\npage/MZGDRS\npageant/MS\npageantry/M\npageboy/SM\npager/M\npaginate/DSGN\npagination/M\npagoda/MS\npah\npaid/AU\npail/MS\npailful/SM\npain/MDSG\npainful/PY\npainfuller\npainfullest\npainfulness/M\npainkiller/MS\npainkilling\npainless/PY\npainlessness/M\npainstaking/MY\npaint/SZGJMDR\npaintball\npaintbox/MS\npaintbrush/MS\npainted/U\npainter/MY\npainting/M\npaintwork\npair/AMDSG\npaired/U\npairing/S\npairwise\npaisley/SM\npajama/S\npajamas/M\npal/SMY\npalace/MS\npaladin/SM\npalanquin/SM\npalatable/U\npalatal/SM\npalatalization/M\npalatalize/GDS\npalate/MBS\npalatial/Y\npalatinate/MS\npalatine/MS\npalaver/GSMD\npalazzi\npalazzo\npale/MYTGPDRSJ\npaleface/MS\npaleness/M\npaleo\npaleographer/MS\npaleography/M\npaleolithic\npaleontologist/SM\npaleontology/M\npalette/SM\npalfrey/SM\npalimony/M\npalimpsest/MS\npalindrome/MS\npalindromic\npaling/M\npalisade/SM\npalish\npall/MDSG\npalladium/M\npallbearer/MS\npallet/MS\npalliate/DSGNV\npalliation/M\npalliative/SM\npallid/YP\npallidness/M\npallor/M\npalm/MDSG\npalmate\npalmetto/SM\npalmist/SM\npalmistry/M\npalmtop/SM\npalmy/TR\npalomino/MS\npalpable\npalpably\npalpate/DSGN\npalpation/M\npalpitate/XGNDS\npalpitation/M\npalsy/GDSM\npaltriness/M\npaltry/RPT\npampas/M\npamper/DSG\npamphlet/MS\npamphleteer/MS\npan/SM\npanacea/SM\npanache/M\npanama/MS\npanatella/S\npancake/DSMG\npanchromatic\npancreas/MS\npancreatic\npancreatitis\npanda/SM\npandemic/SM\npandemonium/M\npander/MDRZGS\npanderer/M\npane/KM\npanegyric/SM\npanel/SGJMD\npaneling/M\npanelist/MS\npanes\npang/MS\npanhandle/DRSMZG\npanhandler/M\npanic/SM\npanicked\npanicking\npanicky\npanned\npannier/SM\npanning\npanoply/SM\npanorama/SM\npanoramic\npanpipes/M\npansy/SM\npant/MDSG\npantaloons/M\npantechnicon/S\npantheism/M\npantheist/SM\npantheistic\npantheon/SM\npanther/MS\npantie/MS\npanto/S\npantomime/MGDS\npantomimic\npantomimist/SM\npantry/SM\npantsuit/SM\npantyhose/M\npantyliner/M\npantywaist/SM\npap/SM\npapa/MS\npapacy/SM\npapal\npaparazzi/M\npaparazzo\npapaya/MS\npaper/SZGMDR\npaperback/SM\npaperbark/S\npaperboard/M\npaperboy/SM\npaperclip/S\npaperer/M\npapergirl/SM\npaperhanger/SM\npaperhanging/M\npaperless\npaperweight/MS\npaperwork/M\npapery\npapilla/M\npapillae\npapillary\npapist/MS\npapoose/MS\npappy/SM\npaprika/M\npapyri\npapyrus/M\npar/SZGMDRBJ\npara/MS\nparable/MS\nparabola/SM\nparabolic\nparacetamol/S\nparachute/DSMG\nparachutist/MS\nparade/MZGDRS\nparader/M\nparadigm/SM\nparadigmatic\nparadisaical\nparadise/SM\nparadox/MS\nparadoxical/Y\nparaffin/M\nparagliding\nparagon/MS\nparagraph/GMD\nparagraphs\nparakeet/SM\nparalegal/MS\nparallax/MS\nparallel/SGMD\nparalleled/U\nparallelism/MS\nparallelization\nparallelized\nparallelogram/SM\nparalyses\nparalysis/M\nparalytic/SM\nparalyze/DSG\nparalyzing/Y\nparamagnetic\nparamecia\nparamecium/M\nparamedic/MS\nparamedical/MS\nparameter/MS\nparameterize/D\nparametric\nparamilitary/SM\nparamount\nparamountcy\nparamour/SM\nparanoia/M\nparanoiac/MS\nparanoid/SM\nparanormal\nparapet/MS\nparaphernalia/M\nparaphrase/DSMG\nparaplegia/M\nparaplegic/SM\nparaprofessional/MS\nparapsychologist/MS\nparapsychology/M\nparaquat/M\nparasailing\nparascending\nparasite/SM\nparasitic\nparasitical/Y\nparasitism/M\nparasol/MS\nparasympathetic/S\nparathion/M\nparathyroid/MS\nparatroop/RZS\nparatrooper/M\nparatroops/M\nparatyphoid/M\nparboil/DSG\nparcel/GMDS\nparch/LGDS\nparchment/SM\npardner/S\npardon/ZGMDRBS\npardonable/U\npardonably/U\npardoner/M\npare/S\nparegoric/M\nparent/GMDS\nparentage/M\nparental\nparentheses\nparenthesis/M\nparenthesize/DSG\nparenthetic\nparenthetical/Y\nparenthood/M\nparenting/M\nparer/M\npares/S\nparesis/M\nparfait/MS\npariah/M\npariahs\nparibus\nparietal\nparimutuel/MS\nparing/M\nparish/MS\nparishioner/MS\nparity/ESM\npark/MDSG\nparka/SM\nparking/M\nparkland\nparkour\nparkway/MS\nparky\nparlance/M\nparlay/GMDS\nparley/GMDS\nparliament/SM\nparliamentarian/SM\nparliamentary\nparlor/MS\nparlous\nparmigiana\nparochial/Y\nparochialism/M\nparodist/SM\nparody/GDSM\nparole/MGDS\nparolee/MS\nparotid\nparoxysm/SM\nparoxysmal\nparquet/MDSG\nparquetry/M\nparred\nparricidal\nparricide/MS\nparring\nparrot/GMDS\nparry/GDSM\nparse/DRSG\nparsec/MS\nparsimonious/Y\nparsimony/M\nparsley/M\nparsnip/MS\nparson/MS\nparsonage/MS\npart's\npart/CDSG\npartake/ZGRS\npartaken\npartaker/M\nparterre/SM\nparthenogenesis/M\npartial/MYS\npartiality/M\nparticipant/SM\nparticipate/DSGN\nparticipation/M\nparticipator/MS\nparticipatory\nparticipial/M\nparticiple/MS\nparticle/SM\nparticleboard/M\nparticular/SMY\nparticularity/SM\nparticularization/M\nparticularize/DSG\nparticulate/SM\nparting/MS\npartisan/SM\npartisanship/M\npartition/GMDS\npartitive/MS\npartly\npartner/MDSG\npartnership/MS\npartook\npartridge/SM\nparturition/M\npartway\nparty/GDSM\nparvenu/MS\npascal/MS\npaschal\npasha/SM\npass/M\npassably\npassage/MS\npassageway/MS\npassbook/MS\npasse/DRSBXZGNV\npassel/MS\npassenger/SM\npasser/M\npasserby/M\npassersby\npassim\npassing/MY\npassion/EM\npassionate/EY\npassionflower/SM\npassionless\npassive/PMYS\npassiveness/M\npassivity/M\npassivization\npassivize/DSG\npasskey/MS\npassphrase/S\npassport/MS\npassword/MS\npast/AMS\npasta/SM\npaste/DSMG\npasteboard/M\npastel/MS\npastern/MS\npasteurization/M\npasteurize/ZGDRS\npasteurized/U\npasteurizer/M\npastiche/MS\npastie\npastille/MS\npastime/MS\npastiness/M\npastor/MS\npastoral/MS\npastorate/MS\npastrami/M\npastry/SM\npasturage/M\npasture/DSMG\npastureland/M\npasty/PTRSM\npat/SM\npatch/EGMDS\npatchily\npatchiness/M\npatchouli\npatchwork/SM\npatchy/TPR\npate/MS\npatella/MS\npatellae\npatent/GMDYS\npaterfamilias/MS\npaternal/Y\npaternalism/M\npaternalist/S\npaternalistic\npaternity/M\npaternoster/MS\npath/M\npathetic\npathetically\npathfinder/SM\npathless\npathogen/SM\npathogenic\npathological/Y\npathologist/SM\npathology/M\npathos/M\npaths\npathway/MS\npatience/M\npatient/IMST\npatienter\npatiently\npatina/MS\npatine\npatio/SM\npatisserie/S\npatois/M\npatresfamilias\npatriarch/M\npatriarchal\npatriarchate/MS\npatriarchs\npatriarchy/SM\npatrician/SM\npatricidal\npatricide/SM\npatrimonial\npatrimony/SM\npatriot/SM\npatriotic/U\npatriotically\npatriotism/M\npatrol/MS\npatrolled\npatrolling\npatrolman/M\npatrolmen\npatrolwoman/M\npatrolwomen\npatron/MS\npatronage/MS\npatroness/MS\npatronize/ZGDRS\npatronizer/M\npatronizing/Y\npatronymic/SM\npatronymically\npatroon/SM\npatsy/SM\npatted\npatter/MDGS\npattern/SMDG\npatting\npatty/SM\npaucity/M\npaunch/MS\npaunchy/RT\npauper/MS\npauperism/M\npauperize/DSG\npause/DSMG\npave/AGDS\npaved/U\npavement/MS\npavilion/SM\npaving/MS\npavlova/S\npaw/SGMD\npawl/MS\npawn/MDSG\npawnbroker/MS\npawnbroking/M\npawnshop/MS\npawpaw/MS\npay's\npay/ASGBL\npayback/SM\npaycheck/MS\npayday/MS\npayed\npayee/SM\npayer/SM\npayload/SM\npaymaster/SM\npayment/ASM\npayoff/MS\npayola/M\npayout/MS\npayphone/S\npayroll/SM\npayslip/SM\npaywall/SM\npayware\npct\npd\npea/SM\npeace/SM\npeaceable\npeaceably\npeaceful/PY\npeacefulness/M\npeacekeeper/SM\npeacekeeping/M\npeacemaker/MS\npeacemaking/M\npeacetime/M\npeach/MS\npeachy/TR\npeacock/MS\npeafowl/MS\npeahen/MS\npeak/MDSG\npeaky\npeal/AMDSG\npeanut/MS\npear/MYS\npearl/SGMD\npearly/RT\npeasant/SM\npeasantry/M\npeashooter/SM\npeat/M\npeaty/TR\npebble/MGDS\npebbly\npecan/SM\npeccadillo/M\npeccadilloes\npeccary/SM\npeck/MDRSZG\npeckish\npecs\npectic\npectin/M\npectoral/MS\npectoralis\npeculate/GNDS\npeculation/M\npeculator/SM\npeculiar/Y\npeculiarity/SM\npecuniary\npedagogic\npedagogical/Y\npedagogue/SM\npedagogy/M\npedal/SGMD\npedalo/S\npedant/MS\npedantic\npedantically\npedantry/M\npeddle/ZGDRS\npeddler/M\npederast/MS\npederasty/M\npedestal/MS\npedestrian/SM\npedestrianization\npedestrianize/GDS\npediatric/S\npediatrician/MS\npediatrics/M\npedicab/SM\npedicure/MGDS\npedicurist/MS\npedigree/MDS\npediment/MS\npedometer/MS\npedophile/S\npedophilia\npeduncle/MS\npee/DRSMZ\npeeing\npeek/MDSG\npeekaboo/M\npeel/MDRSJZG\npeeled/U\npeeler/M\npeeling/M\npeen/MS\npeep/MDRSZG\npeepbo\npeeper/M\npeephole/MS\npeepshow/MS\npeer/MDG\npeerage/SM\npeeress/MS\npeerless\npeeve/DSMG\npeevish/PY\npeevishness/M\npeewee/MS\npeewit/S\npeg/SM\npegboard/MS\npegged\npegging\npeignoir/SM\npejoration/M\npejorative/SMY\npeke/MS\npekineses\npekingese/SM\npekoe/M\npelagic\npelf/M\npelican/MS\npellagra/M\npellet/GMDS\npellucid\npelmet/S\npelt/MDSG\npelvic\npelvis/MS\npemmican/M\npen/M\npenal\npenalization/M\npenalize/DSG\npenalty/SM\npenance/MS\npence\npenchant/SM\npencil/GMDJS\npend/CDSG\npendant/MS\npendent/MS\npendulous\npendulum/MS\npenetrability/M\npenetrable\npenetrate/DSGNVX\npenetrating/Y\npenetration/M\npenfriend/S\npenguin/MS\npenicillin/M\npenile\npeninsula/SM\npeninsular\npenis/MS\npenitence/M\npenitent/SMY\npenitential\npenitentiary/SM\npenknife/M\npenknives\npenlight/SM\npenman/M\npenmanship/M\npenmen\npennant/MS\npenned\npenniless\npenning\npennon/MS\npenny/SM\npennyweight/MS\npennyworth\npenologist/MS\npenology/M\npension/BZGMDRS\npensioner/M\npensive/PY\npensiveness/M\npent\npentacle/MS\npentagon/MS\npentagonal\npentagram/SM\npentameter/SM\npentathlete/MS\npentathlon/MS\npenthouse/SM\npenuche/M\npenultimate/SM\npenumbra/MS\npenumbrae\npenurious/PY\npenuriousness/M\npenury/M\npeon/MS\npeonage/M\npeony/SM\npeople/MGDS\npep/SM\npepped\npepper/GMDS\npeppercorn/SM\npeppermint/SM\npepperoni/MS\npeppery\npeppiness/M\npepping\npeppy/TPR\npepsin/M\npeptic/MS\npeptide/S\nperadventure/M\nperambulate/XGNDS\nperambulation/M\nperambulator/MS\npercale/MS\nperceive/BGDS\nperceived/U\npercent/MS\npercentage/SM\npercentile/SM\nperceptible\nperceptibly\nperception/SM\nperceptional\nperceptive/PY\nperceptiveness/M\nperceptual/Y\nperch/GMDS\nperchance\npercipience/M\npercipient\npercolate/GNDS\npercolation/M\npercolator/SM\npercussion/AM\npercussionist/MS\npercussive\nperdition/M\nperdurable\nperegrinate/DSXGN\nperegrination/M\nperegrine/MS\nperemptorily\nperemptory\nperennial/SMY\nperestroika/M\nperfect/PTGMDRYS\nperfecta/MS\nperfectibility/M\nperfectible\nperfection/SM\nperfectionism/M\nperfectionist/SM\nperfectness/M\nperfidious/Y\nperfidy/SM\nperforate/GNXDS\nperforation/M\nperforce\nperform/SDRZG\nperformance/SM\nperformative\nperformed/U\nperformer/M\nperfume/DRSMZG\nperfumer/M\nperfumery/SM\nperfunctorily\nperfunctory\nperfusion\npergola/SM\nperhaps\npericardia\npericardial\npericarditis\npericardium/M\nperigee/SM\nperihelia\nperihelion/M\nperil/SGMD\nperilous/Y\nperimeter/SM\nperinatal\nperinea\nperineum/M\nperiod/MS\nperiodic\nperiodical/SMY\nperiodicity/M\nperiodontal\nperiodontics/M\nperiodontist/SM\nperipatetic/MS\nperipheral/MYS\nperiphery/SM\nperiphrases\nperiphrasis/M\nperiphrastic\nperiscope/SM\nperish/BDRSZG\nperishable/MS\nperistalses\nperistalsis/M\nperistaltic\nperistyle/SM\nperitoneal\nperitoneum/MS\nperitonitis/M\nperiwig/SM\nperiwinkle/SM\nperjure/DRSZG\nperjurer/M\nperjury/SM\nperk/MDSG\nperkily\nperkiness/M\nperky/TPR\nperm/MDSG\npermafrost/M\npermanence/M\npermanency/M\npermanent/SMY\npermeability/M\npermeable\npermeate/GNDS\npermeation/M\npermissible\npermissibly\npermission/MS\npermissive/PY\npermissiveness/M\npermit/MS\npermitted\npermitting\npermittivity\npermutation/SM\npermute/DSG\npernicious/YP\nperniciousness/M\nperoration/MS\nperoxide/MGDS\nperpend\nperpendicular/SMY\nperpendicularity/M\nperpetrate/DSGN\nperpetration/M\nperpetrator/MS\nperpetual/SMY\nperpetuate/DSGN\nperpetuation/M\nperpetuity/M\nperplex/GDS\nperplexed/Y\nperplexing/Y\nperplexity/SM\nperquisite/SM\npersecute/GNXDS\npersecution/M\npersecutor/SM\nperseverance/M\npersevere/DSG\npersiflage/M\npersimmon/SM\npersist/SGD\npersistence/M\npersistent/Y\npersnickety\nperson/UMS\npersona/SM\npersonable\npersonae\npersonage/MS\npersonal/MYS\npersonality/SM\npersonalize/CDSG\npersonalty/M\npersonification/M\npersonify/GDSNX\npersonnel/M\nperspective/MS\nperspex\nperspicacious/Y\nperspicacity/M\nperspicuity/M\nperspicuous\nperspiration/M\nperspire/GDS\npersuade/BZGDRS\npersuaded/U\npersuader/M\npersuasion/SM\npersuasive/PY\npersuasiveness/M\npert/RYPT\npertain/GSD\npertinacious/Y\npertinacity/M\npertinence/M\npertinent/Y\npertness/M\nperturb/DGS\nperturbation/SM\nperturbed/U\npertussis/M\nperuke/MS\nperusal/MS\nperuse/GDS\nperv/S\npervade/DSG\npervasive/PY\npervasiveness/M\nperverse/PXYN\nperverseness/M\nperversion/M\nperversity/M\npervert/SGMD\npeseta/MS\npeskily\npeskiness/M\npesky/TPR\npeso/MS\npessary/S\npessimal\npessimism/M\npessimist/SM\npessimistic\npessimistically\npest/MRSZ\npester/GD\npesticide/MS\npestiferous\npestilence/SM\npestilent\npestilential\npestle/MGDS\npesto/M\npet/SZMR\npetabyte/MS\npetal/SMD\npetard/MS\npetcock/SM\npeter/GMD\npetiole/SM\npetite/MS\npetition/ZGMDRS\npetitionary\npetitioner/M\npetrel/MS\npetrifaction/M\npetrify/DSG\npetrochemical/SM\npetrodollar/MS\npetrol/M\npetrolatum/M\npetroleum/M\npetrologist/SM\npetrology/M\npetted\npetticoat/MS\npettifog/S\npettifogged\npettifogger/SM\npettifoggery/M\npettifogging\npettily\npettiness/M\npetting/M\npettish/Y\npetty/PTR\npetulance/M\npetulant/Y\npetunia/MS\npew/SM\npewee/SM\npewit/SM\npewter/MS\npeyote/M\npf\npfennig/MS\npg\nphaeton/MS\nphage/S\nphagocyte/SM\nphalanger/SM\nphalanges\nphalanx/MS\nphalli\nphallic\nphallocentric\nphallocentrism\nphallus/M\nphantasm/MS\nphantasmagoria/MS\nphantasmagorical\nphantasmal\nphantom/SM\npharaoh/M\npharaohs\npharisaic\npharisee/SM\npharmaceutic/MS\npharmaceutical/SM\npharmaceutics/M\npharmacist/MS\npharmacologic\npharmacological\npharmacologist/SM\npharmacology/M\npharmacopoeia/MS\npharmacotherapy\npharmacy/SM\npharyngeal\npharynges\npharyngitis/M\npharynx/M\nphase/DSMG\nphaseout/SM\nphat\npheasant/MS\nphenacetin/M\nphenobarbital/M\nphenol/M\nphenom/MS\nphenomena\nphenomenal/Y\nphenomenological\nphenomenology\nphenomenon/MS\nphenotype\nphenytoin\npheromone/MS\nphew\nphi/SM\nphial/SM\nphilander/ZGDRS\nphilanderer/M\nphilandering/M\nphilanthropic\nphilanthropically\nphilanthropist/MS\nphilanthropy/SM\nphilatelic\nphilatelist/MS\nphilately/M\nphilharmonic/SM\nphilippic/MS\nphilistine/MS\nphilistinism/M\nphilodendron/SM\nphilological\nphilologist/MS\nphilology/M\nphilosopher/MS\nphilosophic\nphilosophical/Y\nphilosophize/DRSZG\nphilosophizer/M\nphilosophy/SM\nphilter/MS\nphish/ZGDR\nphisher/M\nphlebitis/M\nphlegm/M\nphlegmatic\nphlegmatically\nphloem/M\nphlox/M\nphobia/MS\nphobic/MS\nphoebe/MS\nphoenix/MS\nphone/DSMG\nphonecard/S\nphoneme/MS\nphonemic\nphonemically\nphonetic/S\nphonetically\nphonetician/SM\nphonetics/M\nphoneyed\nphoneying\nphonic/S\nphonically\nphonics/M\nphoniness/M\nphonograph/M\nphonographic\nphonographs\nphonological/Y\nphonologist/MS\nphonology/M\nphonon\nphony/PTGDRSM\nphooey\nphosphate/MS\nphosphodiesterase\nphosphor/MS\nphosphorescence/M\nphosphorescent/Y\nphosphoric\nphosphorous\nphosphorus/M\nphosphorylation\nphoto/SGMD\nphotocell/MS\nphotocopier/M\nphotocopy/DRSMZG\nphotoelectric\nphotoelectrically\nphotoengrave/DRSJZG\nphotoengraver/M\nphotoengraving/M\nphotofinishing/M\nphotogenic\nphotogenically\nphotograph/MDRZG\nphotographer/M\nphotographic\nphotographically\nphotographs/A\nphotography/M\nphotojournalism/M\nphotojournalist/SM\nphotometer/MS\nphoton/MS\nphotosensitive\nphotostat/SM\nphotostatic\nphotostatted\nphotostatting\nphotosynthesis/M\nphotosynthesize/GDS\nphotosynthetic\nphototropic\nphototropism\nphototypesetter\nphototypesetting\nphotovoltaic\nphrasal\nphrase's\nphrase/AGDS\nphrasebook/S\nphraseology/M\nphrasing/MS\nphreaking\nphrenologist/SM\nphrenology/M\nphyla\nphylactery/SM\nphylogeny/M\nphylum/M\nphys\nphysic/SM\nphysical/MYS\nphysicality\nphysician/SM\nphysicist/SM\nphysicked\nphysicking\nphysics/M\nphysio/S\nphysiognomy/SM\nphysiography/M\nphysiologic\nphysiological/Y\nphysiologist/MS\nphysiology/M\nphysiotherapist/MS\nphysiotherapy/M\nphysique/MS\nphytoplankton\npi/SMDRHZG\npianissimo/SM\npianist/MS\npiano/SM\npianoforte/SM\npianola/S\npiaster/MS\npiazza/MS\npibroch/M\npibrochs\npic/SM\npica/M\npicador/MS\npicante\npicaresque\npicayune\npiccalilli/M\npiccolo/MS\npick/MDRSJZG\npickax/GMDS\npicker/M\npickerel/MS\npicket/ZGMDRS\npickings/M\npickle/MGDS\npickpocket/SM\npickup/MS\npicky/PTR\npicnic/MS\npicnicked\npicnicker/SM\npicnicking\npicot/SM\npictogram/S\npictograph/M\npictographs\npictorial/MYS\npicture/MGDS\npicturesque/PY\npicturesqueness/M\npiddle/MGDS\npiddly\npidgin/MS\npie/SM\npiebald/MS\npiece/DSMG\npiecemeal\npiecework/MRZ\npieceworker/M\npiecrust/SM\npieing\npier/M\npierce/JGDS\npiercing/MY\npiety/M\npiezoelectric\npiffle/MG\npig/SML\npigeon/MS\npigeonhole/DSMG\npigged\npiggery/S\npigging\npiggish/PY\npiggishness/M\npiggy/TRSM\npiggyback/MDSG\npigheaded/PY\npigheadedness/M\npiglet/MS\npigment/MDS\npigmentation/M\npigpen/MS\npigskin/MS\npigsty/SM\npigswill\npigtail/MS\npike/MZGDRS\npiker/M\npikestaff/SM\npilaf/SM\npilaster/MS\npilchard/MS\npile/MGDSJ\npileup/MS\npilfer/ZGDRS\npilferage/M\npilferer/M\npilgrim/MS\npilgrimage/MS\npiling/M\npill/MDSG\npillage/MZGDRS\npillager/M\npillar/MDS\npillbox/MS\npillion/MS\npillock/S\npillory/GDSM\npillow/GMDS\npillowcase/MS\npillowslip/MS\npilot/DGSM\npilothouse/SM\npimento/MS\npimiento/MS\npimp/GMDYS\npimpernel/MS\npimple/DSM\npimply/RT\npin/SM\npinafore/MS\npinata/MS\npinball/M\npincer/MS\npinch/GMDS\npincushion/MS\npine's\npine/AGDS\npineapple/MS\npinewood/S\npiney\npinfeather/SM\nping/GMD\npinhead/SM\npinhole/SM\npinier\npiniest\npinion/SMDG\npink/TGPMDRS\npinkeye/M\npinkie/SM\npinkish\npinkness/M\npinko/MS\npinnacle/SM\npinnate\npinned/U\npinning/U\npinny/S\npinochle/M\npinon/MS\npinpoint/SGMD\npinprick/MS\npinsetter/SM\npinstripe/DSM\npint/MS\npinto/MS\npinup/MS\npinwheel/GSMD\npinyin/M\npinyon/SM\npioneer/SGMD\npious/YP\npiousness/M\npip/SZGMDR\npipe/MS\npipeline/SM\npiper/M\npipette/SM\npipework\npiping/M\npipit/MS\npipped\npippin/SM\npipping\npipsqueak/SM\npiquancy/M\npiquant/Y\npique/MGDS\npiracy/M\npiranha/SM\npirate/DSMG\npiratical/Y\npirogi/M\npiroshki/M\npirouette/DSMG\npiscatorial\npismire/SM\npiss/ZGMDRS\npissoir/S\npistachio/SM\npiste/S\npistil/SM\npistillate\npistol/SM\npiston/SM\npit/SM\npita/MS\npitapat/SM\npitch/MDRSZG\npitchblende/M\npitcher/M\npitchfork/MDSG\npitchman/M\npitchmen\npiteous/YP\npiteousness/M\npitfall/SM\npith/M\npithead/S\npithily\npithiness/M\npithy/RTP\npitiable\npitiably\npitiful/Y\npitiless/PY\npitilessness/M\npiton/MS\npitta/S\npittance/MS\npitted\npitting\npituitary/SM\npity/GDSM\npitying/Y\npivot/MDGS\npivotal\npix/M\npixel/MS\npixie/MS\npizza/MS\npizzazz/M\npizzeria/SM\npizzicati\npizzicato/M\npj's\npk\npkg\npkt\npkwy\npl\nplacard/SMDG\nplacate/DSGN\nplacation/M\nplacatory\nplace's\nplace/AESDLG\nplacebo/SM\nplaced/U\nplaceholder/MS\nplacekick/MDRZGS\nplacekicker/M\nplacement/EASM\nplacenta/SM\nplacental/S\nplacer/SM\nplacid/Y\nplacidity/M\nplacings\nplacket/SM\nplagiarism/SM\nplagiarist/SM\nplagiarize/DRSZG\nplagiarizer/M\nplagiary/M\nplague/DSMG\nplaice\nplaid/MS\nplain/MRYTSP\nplainchant\nplainclothes\nplainclothesman/M\nplainclothesmen\nplainness/M\nplainsman/M\nplainsmen\nplainsong/M\nplainspoken\nplaint/SMV\nplaintiff/SM\nplaintive/Y\nplait/MDGS\nplan/ZMRS\nplanar\nplane's\nplane/CGDS\nplaneload/MS\nplaner/M\nplanet/SM\nplanetarium/SM\nplanetary\nplangency/M\nplangent\nplank/MDGS\nplanking/M\nplankton/M\nplanned/U\nplanner/SM\nplanning/S\nplant/MDRZGSJ\nplantain/SM\nplantar\nplantation/MS\nplanter/M\nplanting/M\nplantlike\nplaque/SM\nplash/MDSG\nplasma/M\nplasmon\nplaster/SZGMDR\nplasterboard/M\nplasterer/M\nplastic/SM\nplasticity/M\nplasticize/DSG\nplastique\nplat/XGMDNS\nplate/MS\nplateau/SMDG\nplateful/SM\nplatelet/SM\nplaten/M\nplatform/SGMD\nplating/M\nplatinum/M\nplatitude/SM\nplatitudinous\nplatonic\nplatoon/SGMD\nplatted\nplatter/SM\nplatting\nplaty/M\nplatypus/MS\nplatys\nplaudit/SM\nplausibility/M\nplausible\nplausibly\nplay/AEGMDS\nplayable/EU\nplayact/SGD\nplayacting/M\nplayback/MS\nplaybill/MS\nplaybook/MS\nplayboy/SM\nplayer/SM\nplayfellow/SM\nplayful/PY\nplayfulness/M\nplaygirl/MS\nplaygoer/MS\nplayground/SM\nplaygroup/S\nplayhouse/MS\nplaylist/MS\nplaymate/MS\nplayoff/SM\nplaypen/SM\nplayroom/SM\nplayschool/S\nplaything/SM\nplaytime/M\nplaywright/SM\nplaza/MS\nplea/MS\nplead/DRZGSJ\npleader/M\npleading/MY\npleasant/UTYP\npleasanter\npleasantness/UM\npleasantry/SM\nplease/EDSG\npleasing/YS\npleasurably\npleasure/MGDSB\npleasureful\npleat/MDGS\npleb/S\nplebby\nplebe/MS\nplebeian/MS\nplebiscite/MS\nplectra\nplectrum/MS\npledge/DSMG\nplenary/SM\nplenipotentiary/SM\nplenitude/SM\nplenteous\nplentiful/Y\nplenty/M\nplenum/S\npleonasm/MS\nplethora/M\npleura/M\npleurae\npleurisy/M\nplexus/MS\npliability/M\npliable\npliancy/M\npliant/Y\npliers/M\nplight/SMDG\nplimsoll/S\nplinth/M\nplinths\nplod/S\nplodded\nplodder/MS\nplodding/S\nplonk/DRSZG\nplop/MS\nplopped\nplopping\nplosive/S\nplot/MS\nplotted\nplotter/SM\nplotting\nplover/SM\nplow/GMDS\nplowman/M\nplowmen\nplowshare/MS\nploy's\nploy/S\npluck/MDSG\npluckily\npluckiness/M\nplucky/RPT\nplug's\nplug/US\nplugged/U\nplugging/U\nplughole/S\nplugin/SM\nplum/GMDS\nplumage/M\nplumb/MDRSZGJ\nplumbed/U\nplumber/M\nplumbing/M\nplume/MS\nplummet/SGMD\nplummy\nplump/MDRYSTGP\nplumpness/M\nplumy/RT\nplunder/SZGMDR\nplunderer/M\nplunge/DRSMZG\nplunger/M\nplunk/MDSG\npluperfect/SM\nplural/SM\npluralism/M\npluralist/MS\npluralistic\nplurality/SM\npluralization/M\npluralize/GDS\nplus/MS\nplush/MRYTP\nplushness/M\nplushy/RT\nplutocracy/SM\nplutocrat/SM\nplutocratic\nplutonium/M\npluvial\nply/AGDSM\nplywood/M\npm\npneumatic\npneumatically\npneumococcal\npneumococci\npneumococcus\npneumonia/M\npoach/DRSZG\npoacher/M\npoaching/M\npock/GMDS\npocket/SMDG\npocketbook/SM\npocketful/SM\npocketknife/M\npocketknives\npockmark/MDGS\npod/SM\npodcast/SMG\npodded\npodding\npodiatrist/SM\npodiatry/M\npodium/SM\npoem/MS\npoesy/M\npoet/MS\npoetaster/MS\npoetess/MS\npoetic/S\npoetical/Y\npoetry/M\npogrom/SM\npoi/M\npoignancy/M\npoignant/Y\npoinciana/SM\npoinsettia/SM\npoint/MDRSZG\npointblank\npointed/Y\npointer/M\npointillism/M\npointillist/SM\npointless/PY\npointlessness/M\npointy/TR\npoise/MGDS\npoison/SJZGMDR\npoisoner/M\npoisoning/M\npoisonous/Y\npoke/MZGDRS\npoker/M\npokey/MS\npoky/TR\npol/SGMD\npolar\npolarity/SM\npolarization/CM\npolarize/CDSG\npole/MS\npoleaxe/GDS\npolecat/MS\npolemic/MS\npolemical/Y\npolemicist/SM\npolemics/M\npolestar/SM\npolice/DSMG\npoliceman/M\npolicemen\npolicewoman/M\npolicewomen\npolicy/SM\npolicyholder/MS\npolicymaker/S\npolio/MS\npoliomyelitis/M\npolish/ZGMDRS\npolished/U\npolisher/M\npolitburo/MS\npolite/RYTP\npoliteness/M\npolitesse/M\npolitic/S\npolitical/Y\npolitician/SM\npoliticization/M\npoliticize/CDSG\npoliticking/M\npolitico/SM\npolitics/M\npolity/SM\npolka/MDSG\npoll/GMDNS\npollack/MS\npollard/S\npollen/M\npollinate/GNDS\npollination/M\npollinator/SM\npolling/M\npolliwog/SM\npollster/SM\npollutant/MS\npollute/ZGNDRS\npolluted/U\npolluter/M\npollution/M\npolo/M\npolonaise/SM\npolonium/M\npoltergeist/MS\npoltroon/SM\npoly\npolyacrylamide\npolyamory/S\npolyandrous\npolyandry/M\npolyclinic/SM\npolyester/MS\npolyethylene/M\npolygamist/MS\npolygamous\npolygamy/M\npolyglot/SM\npolygon/SM\npolygonal\npolygraph/GMD\npolygraphs\npolyhedral\npolyhedron/SM\npolymath/M\npolymaths\npolymer/SM\npolymeric\npolymerization/M\npolymerize/GDS\npolymorphic\npolymorphous\npolynomial/MS\npolyp/MS\npolyphonic\npolyphony/M\npolypropylene/M\npolys\npolysemous\npolystyrene/M\npolysyllabic\npolysyllable/MS\npolytechnic/MS\npolytheism/M\npolytheist/SM\npolytheistic\npolythene\npolyunsaturate/DS\npolyurethane/MS\npolyvinyl\npom/S\npomade/DSMG\npomander/SM\npomegranate/MS\npommel/SGMD\npommy/S\npomp/M\npompadour/SMD\npompano/MS\npompom/SM\npomposity/M\npompous/YP\npompousness/M\nponce/GDS\nponcho/SM\nponcy\npond/MS\nponder/SZGDR\nponderer/M\nponderous/YP\nponderousness/M\npone/MS\npong/GDS\npongee/M\nponiard/MS\npontiff/SM\npontifical/Y\npontificate/DSMG\npontoon/SM\npony/GDSM\nponytail/MS\npoo/SGD\npooch/MDSG\npoodle/SM\npoof/MS\npoofter/S\npooh/GMD\npoohs\npool/GMDS\npoolroom/MS\npoolside/S\npoop/GMDS\npoor/TRYP\npoorboy/M\npoorhouse/SM\npoorness/M\npop/SM\npopcorn/M\npope/MS\npopgun/SM\npopinjay/MS\npoplar/SM\npoplin/M\npopover/SM\npoppa/MS\npoppadom/S\npopped\npopper/SM\npoppet/S\npopping\npoppy/SM\npoppycock/M\npopulace/MS\npopular/Y\npopularity/UM\npopularization/M\npopularize/DSG\npopulate/ACGDS\npopulated/U\npopulation/CM\npopulations\npopulism/M\npopulist/MS\npopulous/P\npopulousness/M\npopup/MS\nporcelain/SM\nporch/MS\nporcine\nporcupine/SM\npore/MGDS\nporgy/SM\npork/ZMR\nporker/M\nporky/RSMT\nporn/M\nporno/M\npornographer/MS\npornographic\npornographically\npornography/M\nporosity/M\nporous/P\nporousness/M\nporphyritic\nporphyry/M\nporpoise/MGDS\nporridge/M\nporringer/SM\nport's/A\nport/CAEGDS\nportability/M\nportable/MS\nportage/DSMG\nportal/SM\nportcullis/MS\nportend/SGD\nportent/SM\nportentous/YP\nporter/ASM\nporterhouse/SM\nportfolio/MS\nporthole/MS\nportico/M\nporticoes\nportiere/MS\nportion/KSGMD\nportliness/M\nportly/RPT\nportmanteau/MS\nportrait/MS\nportraitist/SM\nportraiture/M\nportray/SGD\nportrayal/MS\nportulaca/M\npose's/A\npose/CAKEGDS\nposer/EKSM\nposeur/SM\nposh/TR\nposit/DSGV\nposition/CKEMS\npositional/KE\npositioned/K\npositioning/AK\npositive/MYPS\npositiveness/M\npositivism\npositivist/S\npositron/MS\nposs\nposse/MS\npossess/AEVGSD\npossession/ASM\npossessive/SMYP\npossessiveness/M\npossessor/SM\npossibility/SM\npossible/SM\npossibly\npossum/SM\npost/ZGMDRSJ\npostage/M\npostal\npostbag/S\npostbox/S\npostcard/SM\npostcode/S\npostcolonial\npostconsonantal\npostdate/DSG\npostdoc/MS\npostdoctoral\nposter/M\nposterior/SM\nposterity/M\npostgraduate/SM\nposthaste\nposthumous/Y\nposthypnotic\npostie/S\npostilion/SM\npostindustrial\nposting/M\npostlude/SM\npostman/M\npostmark/SMDG\npostmaster/MS\npostmen\npostmenopausal\npostmeridian\npostmistress/MS\npostmodern\npostmodernism/M\npostmodernist/MS\npostmortem/SM\npostnasal\npostnatal\npostoperative\npostpaid\npostpartum\npostpone/DSGL\npostponement/SM\npostprandial\npostscript/SM\npostseason/SM\npostsynaptic\npostulate/XDSMGN\npostulation/M\npostural\nposture/MGJDS\nposturing/M\npostwar\npostwoman\npostwomen\nposy/SM\npot/CSM\npotability/M\npotable/SM\npotash/M\npotassium/M\npotato/M\npotatoes\npotbelly/DSM\npotboiler/SM\npotency/M\npotent/Y\npotentate/MS\npotential/MYS\npotentiality/SM\npotentiate/GDS\npotful/SM\npothead/SM\npother/SMDG\npotherb/SM\npotholder/MS\npothole/DRSMZG\npothook/SM\npotion/SM\npotluck/MS\npotpie/SM\npotpourri/SM\npotsherd/SM\npotshot/MS\npottage/M\npotted\npotter/GSMD\npottery/SM\npotting\npotty/PRSMT\npouch/MDSG\npouf/S\npouffe/S\npoulterer/MS\npoultice/DSMG\npoultry/M\npounce/DSMG\npound's\npound/KDSG\npoundage/M\npounding/SM\npour/GDSJ\npout/ZGMDRS\npouter/M\npoverty/M\npow\npowder/GSMD\npowdery\npower/MDSG\npowerboat/MS\npowerful/Y\npowerhouse/SM\npowerless/PY\npowerlessness/M\npowwow/SGMD\npox/MS\npp\nppm\nppr\npr\npracticability/M\npracticably\npractical/SMY\npracticality/SM\npractice/DSMGB\npracticed/U\npracticum/SM\npractitioner/SM\npraetor/SM\npraetorian\npragmatic/MS\npragmatical/Y\npragmatism/M\npragmatist/MS\nprairie/SM\npraise/EDSMG\npraiseworthiness/M\npraiseworthy/P\npraline/SM\npram/MS\nprance/DRSMZG\nprancer/M\nprancing/Y\nprang/DSG\nprank/MS\nprankster/SM\npraseodymium/M\nprat/S\nprate/MZGDRS\nprater/M\npratfall/SM\nprattle/DRSMZG\nprattler/M\nprawn/MDSG\npray/ZGDRS\nprayer/M\nprayerful/Y\npreach/DRSZGL\npreacher/M\npreachment/M\npreachy/RT\npreadolescence/SM\npreadolescent\npreamble/MGDS\nprearrange/LGDS\nprearrangement/M\npreassigned\nprecancel/SMDG\nprecancerous\nprecarious/PY\nprecariousness/M\nprecast\nprecaution/MS\nprecautionary\nprecede/DSG\nprecedence/M\nprecedent/SM\nprecept/SM\npreceptor/SM\nprecinct/MS\npreciosity/M\nprecious/YP\npreciousness/M\nprecipice/SM\nprecipitant/MS\nprecipitate/XMYGNDS\nprecipitation/M\nprecipitous/Y\nprecis/M\nprecise/DRSYTGNP\npreciseness/M\nprecision/M\npreclude/GDS\npreclusion/M\nprecocious/YP\nprecociousness/M\nprecocity/M\nprecognition/M\nprecognitive\nprecolonial\npreconceive/GDS\npreconception/SM\nprecondition/MDGS\nprecook/GSD\nprecursor/SM\nprecursory\npredate/DSG\npredator/MS\npredatory\npredawn\npredecease/GDS\npredecessor/SM\npredefined\npredesignate/GDS\npredestination/M\npredestine/DSG\npredetermination/M\npredetermine/ZGDRS\npredeterminer/M\npredicable\npredicament/MS\npredicate/MGNVDS\npredication/M\npredicative/Y\npredict/BGVSD\npredictability/UM\npredictable/U\npredictably/U\nprediction/SM\npredictor/MS\npredigest/GDS\npredilection/SM\npredispose/GDS\npredisposition/MS\nprednisone\npredominance/M\npredominant/Y\npredominate/YGDS\npreemie/SM\npreeminence/M\npreeminent/Y\npreempt/GVSD\npreemption/M\npreemptive/Y\npreen/DSG\npreexist/DGS\npreexistence/M\npref\nprefab/SM\nprefabbed\nprefabbing\nprefabricate/DSGN\nprefabrication/M\npreface/DSMG\nprefatory\nprefect/SM\nprefecture/MS\nprefer/SBL\npreferably\npreference/MS\npreferential/Y\npreferment/M\npreferred\npreferring\nprefigure/GDS\nprefix/MDSG\npreform/GSD\nprefrontal\npregame/SM\npregnancy/SM\npregnant\npreheat/GSD\nprehensile\nprehistorian/S\nprehistoric\nprehistorical/Y\nprehistory/M\nprehuman\npreinstalled\nprejudge/GDS\nprejudgment/SM\nprejudice/MGDS\nprejudiced/U\nprejudicial\nprekindergarten/SM\nprelacy/M\nprelate/SM\nprelim/SM\npreliminary/SM\npreliterate\nprelude/MS\npremarital\npremature/Y\npremed/SM\npremedical\npremeditate/DSGN\npremeditated/U\npremeditation/M\npremenstrual\npremier/SGMD\npremiere/MS\npremiership/MS\npremise/DSMG\npremium/SM\npremix/GDS\npremolar/SM\npremonition/MS\npremonitory\nprenatal/Y\nprenup/SM\nprenuptial\npreoccupation/SM\npreoccupy/DSG\npreoperative\npreordain/GDS\npreowned\nprep/MS\nprepackage/DSG\nprepacked\nprepaid\npreparation/SM\npreparatory\nprepare/GDS\nprepared/UP\npreparedness/UM\nprepay/GSL\nprepayment/MS\npreponderance/SM\npreponderant/Y\npreponderate/GDS\npreposition/SM\nprepositional/Y\nprepossess/GDS\nprepossessing/U\nprepossession/SM\npreposterous/Y\nprepped\nprepping\npreppy/TRSM\nprepubescence/M\nprepubescent/SM\nprepuce/MS\nprequel/MS\nprerecord/GSD\npreregister/SGD\npreregistration/M\nprerequisite/MS\nprerogative/SM\npres\npresage/MGDS\npresbyopia/M\npresbyter/SM\npresbytery/SM\npreschool/SZMR\npreschooler/M\nprescience/M\nprescient/Y\nprescribe/DSG\nprescript/SVM\nprescription/SM\nprescriptive/Y\npreseason/SM\npresence/SM\npresent/LMDRYZGSB\npresentably\npresentation/ASM\npresenter/M\npresentiment/SM\npresentment/SM\npreservation/M\npreservationist/SM\npreservative/SM\npreserve/BDRSMZG\npreserver/M\npreset/S\npresetting\npreshrank\npreshrink/GS\npreshrunk\npreside/GDS\npresidency/SM\npresident/MS\npresidential\npresidium/M\npresort/DGS\npress's\npress/ACGSD\npressed/U\npresser/MS\npressie/S\npressing/SMY\npressman/M\npressmen\npressure/DSMG\npressurization/M\npressurize/CGDS\npressurizer/SM\nprestidigitation/M\nprestige/M\nprestigious\npresto/SM\npresumably\npresume/GDSB\npresumption/SM\npresumptive\npresumptuous/YP\npresumptuousness/M\npresuppose/DSG\npresupposition/MS\npretax\npreteen/MS\npretend/DRZGS\npretender/M\npretense/SXMN\npretension/M\npretentious/UY\npretentiousness/M\npreterit/SM\npreterm\npreternatural/Y\npretest/DGS\npretext/MS\npretrial/S\nprettify/GDS\nprettily\nprettiness/M\npretty/TGDRSMP\npretzel/MS\nprevail/DGS\nprevalence/M\nprevalent\nprevaricate/DSGNX\nprevarication/M\nprevaricator/SM\nprevent/DBSGV\npreventable/U\npreventative/MS\nprevention/M\npreventive/SM\npreview/MDRSZG\nprevious/Y\nprevision/MS\nprewar\nprey/GMDS\nprezzie/S\npriapic\nprice's\nprice/AGDS\npriceless\npricey\npricier\npriciest\nprick/MDRYSZG\npricker/M\nprickle/MGDS\nprickliness/M\nprickly/PRT\npride/MGDS\nprideful/Y\nprier/M\npriest/SMY\npriestess/MS\npriesthood/SM\npriestliness/M\npriestly/RTP\nprig/MS\npriggish/P\npriggishness/M\nprim/ZGDRYP\nprimacy/M\nprimal\nprimarily\nprimary/SM\nprimate/MS\nprime/MS\nprimer/M\nprimeval\npriming/M\nprimitive/SPMY\nprimitiveness/M\nprimmer\nprimmest\nprimness/M\nprimogenitor/SM\nprimogeniture/M\nprimordial/Y\nprimp/DSG\nprimrose/SM\nprimula/S\nprince/SMY\nprincedom/SM\nprinceliness/M\nprincely/PRT\nprincess/MS\nprincipal/SMY\nprincipality/SM\nprinciple/DSM\nprincipled/U\nprint/AMDSG\nprintable/U\nprinter/MS\nprinting/SM\nprintmaking\nprintout/SM\nprion/S\nprior/MS\nprioress/MS\nprioritization\nprioritize/DSG\npriority/SM\npriory/SM\nprism/MS\nprismatic\nprison/SZMR\nprisoner/M\nprissily\nprissiness/M\nprissy/PTR\npristine\nprithee\nprivacy/M\nprivate/XMYTNRS\nprivateer/SM\nprivation/CSM\nprivatization/SM\nprivatize/DSG\nprivet/SM\nprivilege/DSMG\nprivileged/U\nprivily\nprivy/RSMT\nprize/MGDS\nprized/A\nprizefight/ZGSMR\nprizefighter/M\nprizefighting/M\nprizewinner/MS\nprizewinning\npro/SM\nprobabilistic\nprobability/SM\nprobable/SM\nprobably\nprobate/MN\nprobation/ZMR\nprobational\nprobationary\nprobationer/M\nprobe/MGDSBJ\nprobity/M\nproblem/MS\nproblematic/U\nproblematical/Y\nprobosces\nproboscis/MS\nprocaine/M\nprocedural\nprocedure/SM\nproceed/GJDS\nproceeding/M\nproceeds/M\nprocess's\nprocess/AGDS\nprocessable\nprocessed/U\nprocession/GD\nprocessional/MS\nprocessor/SM\nproclamation/MS\nproclivity/SM\nprocrastinate/DSGN\nprocrastination/M\nprocrastinator/MS\nprocreate/V\nproctor/GMDS\nprocurement/M\nprod/MS\nprodigal/MYS\nprodigality/M\nprodigious/Y\nprodigy/SM\nproduce's\nproduce/AZGDRS\nproducer/AM\nproducible/A\nproduction/ASM\nproductive/UY\nproductiveness/M\nproductivity/M\nprof/MS\nprofanation/MS\nprofane/PYGDS\nprofaneness/M\nprofanity/SM\nprofessed/Y\nprofession/SM\nprofessional/MYS\nprofessionalism/M\nprofessionalization\nprofessionalize/DSG\nprofessor/SM\nprofessorial/Y\nprofessorship/SM\nproffer/GMDS\nproficiency/M\nproficient/MYS\nprofit/BGD\nprofitability/M\nprofitable/U\nprofitably/U\nprofiteer/MDGS\nprofiteering/M\nprofiterole/SM\nprofitless\nprofligacy/M\nprofligate/SMY\nproforma\nprofound/RYTP\nprofoundness/M\nprofundity/SM\nprofuse/PY\nprofuseness/M\nprogenitor/SM\nprogeny/M\nprogesterone/M\nprogestin/S\nprognathous\nprognoses\nprognosis/M\nprognostic/MS\nprognosticate/XGNDS\nprognostication/M\nprognosticator/MS\nprogram/CAS\nprogrammable/MS\nprogrammatic\nprogrammed/AC\nprogrammer/MS\nprogramming/SM\nprogress/MDSGV\nprogression/MS\nprogressive/PMYS\nprogressiveness/M\nprohibit/DGVS\nprohibition/SM\nprohibitionist/MS\nprohibitive/Y\nprohibitory\nproject/GMDS\nprojectile/SM\nprojection/SM\nprojectionist/SM\nprojector/MS\nprokaryote/MS\nprokaryotic\nprole/S\nproletarian/MS\nproletariat/M\nproliferate/DSGN\nproliferation/M\nprolific\nprolifically\nprolix/Y\nprolixity/M\nprologue/SM\nprolongation/SM\nprom/M\npromenade/MGDS\npromethium/M\nprominence/M\nprominent/Y\npromiscuity/M\npromiscuous/Y\npromise/DSMG\npromising/Y\npromissory\npromo/M\npromontory/SM\npromote/DRZG\npromoter/M\npromotional\nprompt/JPSMDRYZTG\nprompted/U\nprompter/M\nprompting/M\npromptitude/M\npromptness/M\npromulgate/GNDS\npromulgation/M\npromulgator/MS\nprone/P\nproneness/M\nprong/MDS\npronghorn/MS\npronominal/M\npronounce/DSLG\npronounceable/U\npronouncement/SM\npronto\npronunciation/MS\nproof/ADGSM\nproofread/SRZG\nproofreader/M\nprop/MS\npropaganda/M\npropagandist/MS\npropagandize/GDS\npropagate/DSGN\npropagation/M\npropagator/SM\npropel/S\npropellant/MS\npropelled\npropeller/SM\npropelling\npropensity/SM\nproper/MRYT\nproperty/DSM\nprophecy/SM\nprophesier/M\nprophesy/DRSMZG\nprophet/SM\nprophetess/MS\nprophetic\nprophetical/Y\nprophylactic/SM\nprophylaxes\nprophylaxis/M\npropinquity/M\npropitiate/DSGN\npropitiation/M\npropitiatory\npropitious/Y\nproponent/SM\nproportion/ESM\nproportional/YS\nproportionality\nproportionate/EY\nproposal/MS\npropped\npropping\npropranolol\nproprietary/SM\nproprieties/M\nproprietor/SM\nproprietorial/Y\nproprietorship/M\nproprietress/MS\npropriety/SM\npropulsion/M\npropulsive\nprorate/DSG\nprorogation/M\nprorogue/GD\nprosaic\nprosaically\nproscenium/SM\nprosciutto/M\nproscribe/DG\nproscription/MS\nprose/M\nprosecute/DSXGN\nprosecution/M\nprosecutor/MS\nproselyte/DSMG\nproselytism/M\nproselytize/DRSZG\nproselytizer/M\nprosocial\nprosody/SM\nprospect/MDGVS\nprospective/Y\nprospector/SM\nprospectus/MS\nprosper/GSD\nprosperity/M\nprosperous/Y\nprostate/MS\nprostheses\nprosthesis/M\nprosthetic\nprostitute/MGNDS\nprostitution/M\nprostrate/GNXDS\nprostration/M\nprosy/RT\nprotactinium/M\nprotagonist/SM\nprotean\nprotect/GVSD\nprotected/U\nprotection/SM\nprotectionism/M\nprotectionist/MS\nprotective/PY\nprotectiveness/M\nprotector/MS\nprotectorate/MS\nprotege/SM\nprotegee/S\nprotein/SM\nprotestant/S\nprotestation/MS\nprotocol/MS\nproton/SM\nprotoplasm/M\nprotoplasmic\nprototype/MGS\nprototypical\nprotozoa\nprotozoan/MS\nprotozoic\nprotract/GD\nprotrude/GDS\nprotrusile\nprotrusion/MS\nprotuberance/MS\nprotuberant\nproud/RYT\nprov/NB\nprovability/M\nprovably\nprove/EAGDS\nproved/U\nproven/U\nprovenance/SM\nprovender/M\nprovenience/M\nproverbial/Y\nprovide/DRSZG\nprovided/U\nprovidence/M\nprovident/Y\nprovidential/Y\nprovider/M\nprovince/MS\nprovincial/SMY\nprovincialism/M\nprovisional/Y\nproviso/SM\nprovocateur/S\nprovocative/PY\nprovocativeness/M\nprovoke/DRSZG\nprovoked/U\nprovoker/M\nprovoking/Y\nprovolone/M\nprovost/SM\nprow/MS\nprowess/M\nprowl/MDRSZG\nprowler/M\nproximal\nproximate\nproximity/M\nproxy/SM\nprude/MS\nprudence/M\nprudent/Y\nprudential/Y\nprudery/M\nprudish/YP\nprudishness/M\nprune/MZGDRS\npruner/M\nprurience/M\nprurient/Y\npry/ZTGDRSM\npsalm/MS\npsalmist/SM\npsaltery/SM\npsephologist/S\npsephology\npseud/S\npseudo/S\npseudonym/SM\npseudonymous\npseudoscience/MS\npseudy\npshaw/MS\npsi/SM\npsittacosis/M\npsoriasis/M\npsst\npsych/MDSG\npsyche/M\npsychedelia\npsychedelic/SM\npsychedelically\npsychiatric\npsychiatrist/SM\npsychiatry/M\npsychic/MS\npsychical/Y\npsycho/SM\npsychoactive\npsychoanalyses\npsychoanalysis/M\npsychoanalyst/SM\npsychoanalytic\npsychoanalytical/Y\npsychoanalyze/DSG\npsychobabble/M\npsychodrama/MS\npsychogenic\npsychokinesis\npsychokinetic\npsychological/Y\npsychologist/MS\npsychology/SM\npsychometric\npsychoneuroses\npsychoneurosis/M\npsychopath/M\npsychopathic\npsychopathology\npsychopaths\npsychopathy/M\npsychopharmacology\npsychophysiology\npsychos/S\npsychosis/M\npsychosomatic\npsychotherapist/MS\npsychotherapy/SM\npsychotic/SM\npsychotically\npsychotropic/MS\npsychs\npt/C\nptarmigan/MS\npterodactyl/MS\nptomaine/SM\npub/SM\npubertal\npuberty/M\npubes/M\npubescence/M\npubescent\npubic\npubis/M\npublic/AM\npublican/AMS\npublication/ASM\npublicist/MS\npublicity/M\npublicize/GDS\npublicly\npublish/AGDS\npublishable\npublished/U\npublisher/MS\npublishing/M\npuce/M\npuck/ZMRS\npucker/MDG\npuckish/YP\npuckishness/M\npud/S\npudding/SM\npuddle/DSMG\npuddling/M\npudenda\npudendum/M\npudginess/M\npudgy/PRT\npueblo/SM\npuerile\npuerility/M\npuerperal\npuff/ZGMDRS\npuffball/SM\npuffer/M\npuffin/SM\npuffiness/M\npuffy/PRT\npug/SM\npugilism/M\npugilist/SM\npugilistic\npugnacious/YP\npugnaciousness/M\npugnacity/M\npuke/MGDS\npukka\npulchritude/M\npulchritudinous\npule/GDS\npull/ZGMDRS\npullback/MS\npuller/M\npullet/SM\npulley/SM\npullout/MS\npullover/SM\npulmonary\npulp/GMDS\npulpiness/M\npulpit/SM\npulpwood/M\npulpy/RPT\npulsar/SM\npulsate/XGNDS\npulsation/M\npulse/AMGDS\npulverization/M\npulverize/DSG\npuma/MS\npumice/SM\npummel/SGD\npump/ZGMDRS\npumper/M\npumpernickel/M\npumpkin/MS\npun/SM\npunch/MDRSZG\npunchbag/S\npuncheon/MS\npuncher/M\npunchline/S\npunchy/TR\npunctilio/M\npunctilious/PY\npunctiliousness/M\npunctual/Y\npunctuality/M\npunctuate/GNDS\npunctuation/M\npuncture/DSMG\npundit/SM\npunditry/M\npungency/M\npungent/Y\npuniness/M\npunish/BLGDS\npunished/U\npunishing/Y\npunishment/MS\npunitive/Y\npunk/TMRS\npunned\npunnet/S\npunning\npunster/SM\npunt/ZGMDRS\npunter/M\npuny/TRP\npup/SM\npupa/M\npupae\npupal\npupate/DSG\npupil/MS\npupped\npuppet/MS\npuppeteer/SM\npuppetry/M\npupping\npuppy/SM\npurblind\npurchase/DRSMZGB\npurchaser/M\npurdah/M\npure/PYTR\npurebred/SM\npuree/MDS\npureeing\npureness/M\npurgative/SM\npurgatorial\npurgatory/SM\npurge/MZGDRS\npurger/M\npurification/M\npurifier/M\npurify/NDRSZG\npurine/MS\npurism/M\npurist/MS\npuristic\npuritan/SM\npuritanical/Y\npuritanism/M\npurity/M\npurl/GMDS\npurlieu/SM\npurloin/SGD\npurple/MTRS\npurplish\npurport/SMDG\npurported/Y\npurpose/DSMYG\npurposed/A\npurposeful/YP\npurposefulness/M\npurposeless/PY\npurr/GMDS\npurse/MZGDRS\npurser/M\npursuance/M\npursuant\npursue/ZGDRS\npursuer/M\npursuit/SM\npurulence/M\npurulent\npurvey/DSG\npurveyance/M\npurveyor/SM\npurview/M\npus/M\npush/ZGMDRS\npushbike/S\npushcart/SM\npushchair/S\npusher/M\npushily\npushiness/M\npushover/MS\npushpin/S\npushy/TRP\npusillanimity/M\npusillanimous/Y\npuss/MS\npussy/TRSM\npussycat/MS\npussyfoot/DSG\npustular\npustule/SM\nput/ISM\nputative\nputout/MS\nputrefaction/M\nputrefactive\nputrefy/GDS\nputrescence/M\nputrescent\nputrid\nputsch/MS\nputt/ZGMDRS\nputted/I\nputtee/MS\nputter/MDRZG\nputterer/M\nputting/I\nputty/GDSM\nputz/S\npuzzle/MZGDRSL\npuzzlement/M\npuzzler/M\npvt\npwn/SGD\npyelonephritis\npygmy/SM\npylon/SM\npylori\npyloric\npylorus/M\npyorrhea/M\npyramid/GSMD\npyramidal\npyre/MS\npyrimidine/MS\npyrite/SM\npyrites/M\npyromania/M\npyromaniac/SM\npyrotechnic/S\npyrotechnical\npyrotechnics/M\npyruvate\npython/SM\npyx/MS\npzazz\nq\nqr\nqt/S\nqty\nqua\nquack/GMDS\nquackery/M\nquad/MS\nquadrangle/SM\nquadrangular\nquadrant/MS\nquadraphonic\nquadratic/MS\nquadrature\nquadrennial\nquadrennium/MS\nquadriceps/MS\nquadrilateral/SM\nquadrille/XMNS\nquadrillion/M\nquadriplegia/M\nquadriplegic/SM\nquadrivium/M\nquadruped/MS\nquadrupedal\nquadruple/MGDS\nquadruplet/MS\nquadruplicate/MGNDS\nquadruplication/M\nquaff/GMDS\nquagmire/SM\nquahog/MS\nquail/GMDS\nquaint/PRYT\nquaintness/M\nquake/MGDS\nquaky\nqualification/EM\nqualified/U\nqualifier/SM\nqualify/EGXNDS\nqualitative/Y\nquality/SM\nqualm/MS\nqualmish\nquandary/SM\nquango/S\nquanta\nquantifiable\nquantification/M\nquantifier/M\nquantify/NDRSZG\nquantitation\nquantitative/Y\nquantity/SM\nquantization\nquantize\nquantum/M\nquarantine/MGDS\nquark/MS\nquarrel/SZGMDR\nquarreler/M\nquarrelsome/P\nquarrelsomeness/M\nquarry/DSMG\nquart/MS\nquarter/SGMDY\nquarterback/GMDS\nquarterdeck/MS\nquarterfinal/SM\nquarterly/SM\nquartermaster/MS\nquarterstaff/M\nquarterstaves\nquartet/SM\nquarto/MS\nquartz/M\nquasar/MS\nquash/GDS\nquasi\nquatrain/MS\nquaver/MDSG\nquavery\nquay/MS\nquayside/S\nqueasily\nqueasiness/M\nqueasy/TPR\nqueen/GMDYS\nqueenly/RT\nqueer/PTGMDRYS\nqueerness/M\nquell/GDS\nquench/ZGDRSB\nquenchable/U\nquencher/M\nquenchless\nquerulous/YP\nquerulousness/M\nquery/DSMG\nques\nquesadilla/MS\nquest/IFAMS\nquested\nquesting\nquestion/SMDRZGBJ\nquestionable/U\nquestionably/U\nquestioned/U\nquestioner/M\nquestioning/MY\nquestionnaire/SM\nqueue's\nqueue/CDS\nqueuing\nquibble/DRSMZG\nquibbler/M\nquiche/SM\nquick/MNRYXTP\nquicken/DG\nquickfire\nquickie/SM\nquicklime/M\nquickness/M\nquicksand/MS\nquicksilver/M\nquickstep/MS\nquid/MS\nquiescence/M\nquiescent/Y\nquiet/SMDNRYXTGP\nquieten/DG\nquietism\nquietness/M\nquietude/IEM\nquietus/MS\nquiff/S\nquill/SM\nquilt/SMDRZG\nquilter/M\nquilting/M\nquin/S\nquince/SM\nquine/S\nquinidine\nquinine/M\nquinoa\nquinsy/M\nquint/SM\nquintessence/SM\nquintessential/Y\nquintet/SM\nquintuple/MGDS\nquintuplet/MS\nquip/MS\nquipped\nquipping\nquipster/SM\nquire's\nquire/IAS\nquirk/SMDG\nquirkiness/M\nquirky/RTP\nquirt/SM\nquisling/SM\nquit/S\nquitclaim/MS\nquite\nquittance/M\nquitter/SM\nquitting\nquiver/SMDG\nquivery\nquixotic\nquixotically\nquiz/M\nquizzed\nquizzer/SM\nquizzes\nquizzical/Y\nquizzing\nquo/H\nquoin/SM\nquoit/SMDG\nquondam\nquorate/I\nquorum/SM\nquot/B\nquota/SM\nquotability/M\nquotation/SM\nquote's\nquote/UDSG\nquotidian\nquotient/SM\nqwerty\nr/S\nrabbet/GMDS\nrabbi/SM\nrabbinate/M\nrabbinic\nrabbinical\nrabbit/GMDS\nrabble/MS\nrabid/PY\nrabidness/M\nrabies/M\nraccoon/M\nrace/MZGDRS\nracecourse/SM\nracegoer/S\nracehorse/MS\nraceme/MS\nracer/M\nracetrack/MS\nraceway/MS\nracial/Y\nracialism/M\nracialist/MS\nracily\nraciness/M\nracing/M\nracism/M\nracist/SM\nrack/GMDS\nracket/SMDG\nracketeer/SMDG\nracketeering/M\nraconteur/SM\nracquetball/SM\nracy/PRT\nrad/SM\nradar/SM\nradarscope/SM\nraddled\nradial/SMY\nradian/S\nradiance/M\nradiant/Y\nradiate/DSGNX\nradiation/M\nradiator/SM\nradical/SMY\nradicalism/M\nradicalization/M\nradicalize/DSG\nradicchio/M\nradii\nradio/MDGS\nradioactive/Y\nradioactivity/M\nradiocarbon/M\nradiogram/MS\nradiographer/SM\nradiography/M\nradioisotope/MS\nradiologist/SM\nradiology/M\nradioman/M\nradiomen\nradiometer/MS\nradiometric\nradiometry/M\nradiophone/SM\nradioscopy/M\nradiosonde/SM\nradiosurgery\nradiotelegraph/M\nradiotelegraphs\nradiotelegraphy/M\nradiotelephone/MS\nradiotherapist/MS\nradiotherapy/M\nradish/MS\nradium/M\nradius/M\nradon/M\nraffia/M\nraffish/YP\nraffishness/M\nraffle/DSMG\nraft/ZGMDRS\nrafter/M\nrafting/M\nrag/SGMD\nraga/MS\nragamuffin/MS\nragbag/M\nrage/MS\nragga\nragged/RYTP\nraggedness/M\nraggedy/RT\nragging\nraging/Y\nraglan/SM\nragout/SM\nragtag/S\nragtime/M\nragweed/M\nragwort\nrah\nraid/ZGMDRS\nraider/M\nrail's\nrail/CGDS\nrailcard/S\nrailing/SM\nraillery/SM\nrailroad/SZGMDR\nrailroader/M\nrailroading/M\nrailway/SM\nrailwayman\nrailwaymen\nraiment/M\nrain/GMDS\nrainbow/SM\nraincoat/SM\nraindrop/SM\nrainfall/SM\nrainmaker/SM\nrainmaking/M\nrainproof\nrainstorm/MS\nrainwater/M\nrainy/RT\nraise/MZGDRS\nraiser/M\nraisin/SM\nrajah/M\nrajahs\nrake/MGDS\nrakish/YP\nrakishness/M\nrally/DSMG\nram/SM\nramble/DRSMZGJ\nrambler/M\nrambunctious/PY\nrambunctiousness/M\nramekin/SM\nramie/M\nramification/M\nramify/DSXNG\nramjet/SM\nrammed\nramming\nramp/GMS\nrampage/DSMG\nrampancy/M\nrampant/Y\nrampart/SM\nramrod/SM\nramrodded\nramrodding\nramshackle\nran/A\nranch/MDRSZG\nrancher/M\nranching/M\nrancid/P\nrancidity/M\nrancidness/M\nrancor/M\nrancorous/Y\nrand/M\nrandiness/M\nrandom/PSY\nrandomization/M\nrandomize/DSG\nrandomness/MS\nrandy/RTP\nranee/MS\nrang/ZR\nrange's\nrange/CGDS\nrangefinder/S\nranger/M\nranginess/M\nrangy/RTP\nrank/TGJPMDRYS\nranking/M\nrankle/DSG\nrankness/M\nransack/SGD\nransom/SZGMDR\nransomer/M\nransomware\nrant/ZGMDJRS\nranter/M\nrap/SZGMDR\nrapacious/PY\nrapaciousness/M\nrapacity/M\nrape/MS\nraper/M\nrapeseed/M\nrapid/PMRYTS\nrapidity/M\nrapidness/M\nrapier/SM\nrapine/M\nrapist/SM\nrapped\nrappel/SM\nrappelled\nrappelling\nrapper/SM\nrapping\nrapport/MS\nrapporteur/S\nrapprochement/SM\nrapscallion/MS\nrapt/YP\nraptness/M\nraptor/S\nrapture/MS\nrapturous/Y\nrare/YTGPDRS\nrarebit/MS\nrarefaction/M\nrarefy/GDS\nrareness/M\nrarity/SM\nrascal/SMY\nrash/ZTMRSYP\nrasher/M\nrashness/M\nrasp/GMDS\nraspberry/SM\nraspy/RT\nraster\nrat/SM\nratatouille/M\nratbag/S\nratchet/GMDS\nrate/JXMZGNDRS\nrated/U\nratepayer/S\nrater/M\nrather\nrathskeller/SM\nratification/M\nratifier/M\nratify/NDRSZG\nrating/M\nratio/MS\nratiocinate/GNDS\nratiocination/M\nration/MDG\nrational/SMY\nrationale/MS\nrationalism/M\nrationalist/SM\nrationalistic\nrationality/M\nrationalization/MS\nrationalize/DSG\nratlike\nratline/SM\nrattan/SM\nratted\nratter/SM\nratting\nrattle/DRSMZGJ\nrattlebrain/SMD\nrattler/M\nrattlesnake/SM\nrattletrap/SM\nrattly\nrattrap/SM\nratty/RT\nraucous/YP\nraucousness/M\nraunchily\nraunchiness/M\nraunchy/TRP\nravage/DRSMZG\nravager/M\nravages/M\nrave/JMZGDRS\nravel's\nravel/UDSG\nraveling/S\nraven/MDSG\nravenous/Y\nravine/SM\nraving/M\nravioli/SM\nravish/DRSZGL\nravisher/M\nravishing/Y\nravishment/M\nraw/PTMR\nrawboned\nrawhide/M\nrawness/M\nray/SM\nrayon/M\nraze/GDS\nrazor/MS\nrazorback/MS\nrazz/GMDS\nrazzmatazz/M\nrcpt\nrd\nre/DSMYTGVJ\nreach/MDSGB\nreachable/U\nreacquire/DSG\nreact/V\nreactance\nreactant/SM\nreactionary/SM\nreactivity\nread/ZGMRBJS\nreadability/SM\nreader/M\nreadership/SM\nreadily\nreadiness/M\nreading/M\nreadmitted\nreadout/SM\nready/DRSTGP\nreafforestation\nreal/TMRYPS\nrealism/M\nrealist/SM\nrealistic/U\nrealistically/U\nrealities\nreality/UM\nrealization/MS\nrealize/DSBG\nrealized/U\nrealm/MS\nrealness/M\nrealpolitik/M\nrealty/M\nream/ZGMDRS\nreamer/M\nreap/ZGDRS\nreaper/M\nrear/GMDS\nrearguard/MS\nrearmost\nrearward/S\nreason/SMDRZGB\nreasonable/UP\nreasonableness/UM\nreasonably/U\nreasoner/M\nreasoning/M\nreassuring/Y\nrebate/M\nrebel/MS\nrebellion/MS\nrebellious/YP\nrebelliousness/M\nrebid/S\nrebidding\nrebirth/M\nreboil/SDG\nrebuild/SG\nrebuke/DSMG\nrebuking/Y\nrebuttal/MS\nrec'd\nrec/M\nrecalcitrance/M\nrecalcitrant\nrecant/SDG\nrecantation/SM\nrecap/MS\nrecapitalization\nrecce/S\nrecd\nreceipt/SMDG\nreceivables/M\nreceive/DRSZGB\nreceiver/M\nreceivership/M\nrecent/RYTP\nrecentness/M\nreceptacle/SM\nreception/MS\nreceptionist/SM\nreceptive/PY\nreceptiveness/M\nreceptivity/M\nreceptor/SM\nrecess/MDSGV\nrecessional/SM\nrecessionary\nrecessive/SM\nrecherche\nrecidivism/M\nrecidivist/SM\nrecipe/SM\nrecipient/SM\nreciprocal/SMY\nreciprocate/GNDS\nreciprocation/M\nreciprocity/M\nrecital/SM\nrecitalist/MS\nrecitative/MS\nreciter/SM\nreckless/YP\nrecklessness/M\nreckon/SJDG\nreckoning/M\nreclamation/M\nrecline/DRSZG\nrecliner/M\nrecluse/SMV\nrecognizable/U\nrecognizably/U\nrecognize/DRSGB\nrecognized/U\nrecombination\nrecompense/DSMG\nrecompilation\nrecompile/GD\nrecon/S\nreconcile/GDSB\nreconciliation/S\nrecondite\nreconfiguration\nreconfigure/D\nreconnaissance/MS\nreconnoiter/DGS\nreconstruct/V\nreconstructed/U\nrecorded/U\nrecorder/MS\nrecording/MS\nrecoup/DG\nrecourse/M\nrecoverable/U\nrecovery/SM\nrecreant/MS\nrecreational\nrecriminate/DSGNX\nrecrimination/M\nrecriminatory\nrecrudesce/GDS\nrecrudescence/M\nrecrudescent\nrecruit/LSMDRZG\nrecruiter/M\nrecruitment/M\nrectal/Y\nrectangle/MS\nrectangular\nrectifiable\nrectification/M\nrectifier/M\nrectify/XNDRSZG\nrectilinear\nrectitude/M\nrecto/MS\nrector/SM\nrectory/SM\nrectum/SM\nrecumbent\nrecuperate/GNVDS\nrecuperation/M\nrecur/S\nrecurred\nrecurrence/SM\nrecurring\nrecursion/S\nrecuse/DSG\nrecyclable/SM\nrecycling/M\nred/PSM\nredact/SDG\nredaction/M\nredactor/SM\nredbird/SM\nredbreast/MS\nredbrick\nredcap/SM\nredcoat/SM\nredcurrant/S\nredden/SDG\nredder\nreddest\nreddish\nredeem/RZB\nredeemer/M\nredemption/M\nredemptive\nredhead/SMD\nredirection\nredistrict/GD\nredivide/GDS\nredlining/M\nredneck/SM\nredness/M\nredo/G\nredolence/M\nredolent\nredoubt/SBM\nredoubtably\nredound/SDG\nredraw/SG\nredskin/SM\nreduce/DRSZG\nreducer/M\nreducible\nreductase/M\nreduction/SM\nreductionist\nreductive\nredundancy/SM\nredundant/Y\nredwood/SM\nredye/DS\nreediness/M\nreedy/RTP\nreef/ZGMDRS\nreefer/M\nreek/GMDS\nreel's\nreel/UGDS\nreeve/G\nreexport/SDG\nref/SZM\nrefashion/DGS\nrefection/M\nrefectory/SM\nrefer/B\nreferee/DSM\nrefereeing\nreference/MGDS\nreferendum/MS\nreferent/SM\nreferential\nreferral/SM\nreferred\nreferrer/SM\nreferring\nreffed\nreffing\nrefill/BM\nrefined/U\nrefinement/SM\nrefiner/SM\nrefinery/S\nrefitting\nreflate/XDSGN\nreflationary\nreflect/GVSD\nreflection/MS\nreflective/Y\nreflectivity\nreflector/MS\nreflexive/SMY\nreflexivity\nreflexology\nreforge/DSG\nreform/MZ\nreformat/V\nreformatory/SM\nreformatting\nreformed/U\nreformist/S\nrefortify/GDS\nrefract/SGVD\nrefraction/M\nrefractory/SM\nrefrain/SGMD\nrefresh/ZGLDRS\nrefresher/M\nrefreshing/Y\nrefreshment/SM\nrefreshments/M\nrefrigerant/SM\nrefrigerate/DSGN\nrefrigeration/M\nrefrigerator/MS\nrefuge/SM\nrefugee/SM\nrefulgence/M\nrefulgent\nrefund/B\nrefurbishment/MS\nrefusal/MS\nrefutation/MS\nrefute/BDRSZG\nrefuter/M\nreg\nregal/DYG\nregalement/M\nregalia/M\nregard/ESMDG\nregardless\nregards/M\nregather/DGS\nregatta/SM\nregency/SM\nregeneracy/M\nregenerate/V\nregex/M\nregexp/S\nreggae/M\nregicidal\nregicide/MS\nregime/SM\nregimen/SM\nregiment/MDGS\nregimental\nregimentation/M\nregion/SM\nregional/Y\nregionalism/MS\nregister/GMDS\nregistered/U\nregistrant/MS\nregistrar/MS\nregistration/SM\nregistry/SM\nregnant\nregress/MDSGV\nregression/MS\nregret/SM\nregretful/Y\nregrettable\nregrettably\nregretted\nregretting\nregrind/GS\nreground\nregroup/DGS\nregular/MYS\nregularity/SM\nregularization/M\nregularize/DSG\nregulate/CDSGNV\nregulated/U\nregulation/CM\nregulations\nregulator/MS\nregulatory\nregurgitate/DSGN\nregurgitation/M\nrehab/MS\nrehabbed\nrehabbing\nrehabilitate/GNVDS\nrehabilitation/M\nrehang/SDG\nrehears/GD\nrehearsal/MS\nrehearsed/U\nrehi\nrehung\nreify/NDSG\nreign/MDSG\nreimburse/BDSGL\nreimbursement/MS\nrein/GD\nreindeer/M\nreinforce/LGDS\nreinforcement/SM\nreinitialize\nreinstall/DG\nreinstatement/M\nreinsurance\nreiterate/V\nreject/GSMD\nrejection/SM\nrejoice/JGDS\nrejoicing/M\nrejoinder/SM\nrejuvenate/DSGN\nrejuvenation/M\nrel\nrelate/DRSBXZGNV\nrelatedness/M\nrelater/M\nrelation/M\nrelational\nrelationship/MS\nrelative/MYS\nrelativism/M\nrelativist/S\nrelativistic\nrelativity/M\nrelax/DRSZG\nrelaxant/MS\nrelaxation/SM\nrelaxer/M\nrelay/D\nrelease/B\nreleased/U\nrelegate/GNDS\nrelent/SGD\nrelentless/PY\nrelentlessness/M\nrelevance/M\nrelevancy/M\nrelevant/Y\nreliability/UM\nreliable/U\nreliably/U\nreliance/M\nreliant\nrelic/MS\nrelief/SM\nrelieve/ZGDRS\nreliever/M\nreligion/SM\nreligiosity\nreligious/MYP\nreligiousness/M\nreline/DSG\nrelinquish/LDSG\nrelinquishment/M\nreliquary/SM\nrelish/GMDS\nrelist/SGD\nrelocate/B\nreluctance/M\nreluctant/Y\nrely/GDS\nrem/M\nremain/SGD\nremainder/GMDS\nremand/SGD\nremapping\nremark/B\nremarkableness/M\nremarkably\nremarked/U\nremediable\nremedy/GDSM\nremember/DG\nremembered/U\nremembrance/MS\nreminder/M\nreminisce/GDS\nreminiscence/MS\nreminiscent/Y\nremiss/PY\nremissness/M\nremit/S\nremittance/SM\nremitted\nremitting/U\nremix/DSG\nremnant/MS\nremodel/GDS\nremold/SGD\nremonstrant/SM\nremonstrate/DSG\nremorse/M\nremorseful/Y\nremorseless/PY\nremorselessness/M\nremote/RSMYTP\nremoteness/M\nremoval/SM\nremunerate/GNVXDS\nremuneration/M\nrenaissance/MS\nrenal\nrenascence/S\nrend/GS\nrender/SGMDJ\nrendering/M\nrendezvous/GMDS\nrendition/MS\nrenegade/DSMG\nrenege/DRSZG\nreneger/M\nrenew/DSBG\nrenewal/MS\nrennet/M\nrennin/M\nrenounce/LDSG\nrenouncement/M\nrenovate/DSXGN\nrenovation/M\nrenovator/MS\nrenown/MD\nrent/ZGMDRS\nrental/SM\nrenter/M\nrenunciation/SM\nreopen/SDG\nreorg/MDSG\nrep/SM\nrepaint/GDS\nrepair/BZR\nrepairer/M\nrepairman/M\nrepairmen\nreparable\nreparation/MS\nreparations/M\nrepartee/M\nrepatriate/XDSMGN\nrepatriation/M\nrepeat/SMDRZGB\nrepeatability\nrepeatable/U\nrepeatably\nrepeated/Y\nrepeater/M\nrepeating/M\nrepel/S\nrepelled\nrepellent/SM\nrepelling\nrepent/SDG\nrepentance/M\nrepentant/Y\nrepercussion/S\nrepertoire/MS\nrepertory/SM\nrepetition/MS\nrepetitious/YP\nrepetitiousness/M\nrepetitive/YP\nrepetitiveness/M\nrephotograph/DG\nreplaceable\nreplant/GSD\nreplenish/LGDS\nreplenishment/M\nreplete/PDSGN\nrepleteness/M\nrepletion/M\nreplica/SM\nreplicate/DSGNX\nreplication/M\nreplicator/S\nreportage/M\nreported/Y\nreportorial\nreposeful\nreposition\nrepository/SM\nreprehend/DGS\nreprehensibility/M\nreprehensible\nreprehensibly\nreprehension/M\nrepresent/GDS\nrepresentational\nrepresentative/MS\nrepresented/U\nrepression/MS\nrepressive/PY\nreprieve/DSMG\nreprimand/GSMD\nreprisal/SM\nreprise/SMG\nreproach/GMDSB\nreproachful/Y\nreprobate/MS\nreproductive\nreprogramming\nreproving/Y\nreptile/SM\nreptilian/MS\nrepublic/S\nrepublicanism/M\nrepudiate/XGNDS\nrepudiation/M\nrepudiator/MS\nrepugnance/M\nrepugnant\nrepulsion/M\nrepulsive/YP\nrepulsiveness/M\nrepurchase/GDS\nreputability/M\nreputably/E\nreputation/MS\nrepute/DSMGB\nreputed/Y\nrequest/GDR\nrequiem/SM\nrequire/LDG\nrequirement/MS\nrequisite/XMNS\nrequisition/GMD\nrequital/M\nrequite/DRSZG\nrequited/U\nrequiter/M\nreread/SG\nrerecord/GDS\nrerunning\nresample/GDS\nresat\nrescind/SDG\nrescission/M\nrescue/DRSMZG\nrescuer/M\nreseal/B\nresemble/DSG\nresend\nresent/LSDG\nresentful/YP\nresentfulness/M\nresentment/MS\nreserpine/M\nreservation/MS\nreserved/UY\nreservedness/M\nreservist/SM\nreservoir/SM\nresetting\nreshipping\nresidence/SM\nresidency/SM\nresident/MS\nresidential\nresidua\nresidual/MS\nresidue/SM\nresiduum/M\nresignation/SM\nresigned/Y\nresilience/M\nresiliency/M\nresilient/Y\nresinous\nresist/SMDRZG\nresistance/SM\nresistant/U\nresistible\nresistivity\nresistless\nresistor/MS\nresit/S\nresitting\nresold\nresole/DSG\nresolute/PY\nresoluteness/M\nresolve/RBM\nresolved/U\nresonance/SM\nresonant/Y\nresonate/GDS\nresonator/SM\nresorption/M\nresound/SGD\nresounding/Y\nresourceful/YP\nresourcefulness/M\nresp\nrespect/ESGVMD\nrespectability/M\nrespectable\nrespectably\nrespectful/EY\nrespectfulness/M\nrespective/Y\nrespell/SGD\nrespiration/M\nrespirator/SM\nrespiratory\nrespire/DG\nresplendence/M\nresplendent/Y\nrespond/SGD\nrespondent/SM\nresponse/MS\nresponsibility/SM\nresponsible\nresponsibly\nresponsive/UYP\nresponsiveness/UM\nrest/GVMDS\nrestate/GDS\nrestaurant/SM\nrestaurateur/MS\nrestful/YP\nrestfuller\nrestfullest\nrestfulness/M\nrestitution/M\nrestive/YP\nrestiveness/M\nrestless/PY\nrestlessness/M\nrestoration/SM\nrestorative/SM\nrestorer/SM\nrestrained/U\nrestraint/MS\nrestrict/SDGV\nrestricted/U\nrestriction/MS\nrestrictive/YP\nrestrictiveness/M\nrestring/SG\nrestroom/SM\nrestructuring/SM\nresult/GSMD\nresultant/SM\nresume/DSMG\nresumption/MS\nresupply/DSG\nresurgence/MS\nresurgent\nresurrect/GSD\nresurrection/MS\nresuscitate/GNDS\nresuscitation/M\nresuscitator/SM\nretailer/MS\nretain/SDRZG\nretainer/M\nretake/G\nretaliate/DSGNVX\nretaliation/M\nretaliatory\nretard/SMDRZG\nretardant/SM\nretardation/M\nretarder/M\nretch/DSG\nreteach/GS\nretention/M\nretentive/YP\nretentiveness/M\nrethink/SGM\nrethought\nreticence/M\nreticent/Y\nreticulated\nreticulation/MS\nreticulum\nretina/SM\nretinal\nretinoblastoma\nretinue/SM\nretiree/SM\nretirement/MS\nretort/GMD\nretrace/GDS\nretract/DBG\nretractile\nretraction/S\nretrain/DGS\nretread/D\nretrenchment/MS\nretribution/MS\nretributive\nretrieval/SM\nretrieve/DRSMZGB\nretriever/M\nretro/MS\nretroactive/Y\nretrofire/GDS\nretrofit/SM\nretrofitted\nretrofitting\nretrograde/DSG\nretrogress/GVDS\nretrogression/M\nretrorocket/MS\nretrospect/MDSGV\nretrospection/M\nretrospective/MYS\nretrovirus/MS\nretsina/M\nreturnable/SM\nreturnee/SM\nrev/ZVM\nrevamping/M\nreveal/GJSD\nrevealed/U\nrevealing/Y\nreveille/M\nrevel/JMDRSZG\nrevelation/SM\nrevelatory\nreveler/M\nrevelry/SM\nrevenge/MGDS\nrevenuer/SM\nreverb\nreverberate/DSGNX\nreverberation/M\nrevere/DSG\nreverence/DSMG\nreverend/SM\nreverent/Y\nreverential/Y\nreverie/MS\nrevers/M\nreversal/SM\nreverse/Y\nreversibility\nreversible\nreversibly\nrevert/GSD\nrevertible\nrevetment/SM\nrevile/DRSLZG\nrevilement/M\nreviler/M\nreviser/MS\nrevision/SM\nrevisionism/M\nrevisionist/SM\nrevival/MS\nrevivalism/M\nrevivalist/SM\nrevive/DSG\nrevivification/M\nrevocable\nrevoke/DSG\nrevolt/GD\nrevolting/Y\nrevolution/SM\nrevolutionary/SM\nrevolutionist/SM\nrevolutionize/DSG\nrevolve/BZGDRS\nrevolver/M\nrevue/MS\nrevulsion/M\nrevved\nrevving\nrewarded/U\nrewarding/U\nrewarm/GSD\nrewash/GDS\nreweave/GS\nrewedding\nrewind/MB\nrewound\nrewrite/MGS\nrhapsodic\nrhapsodical\nrhapsodize/GDS\nrhapsody/SM\nrhea/MS\nrhenium/M\nrheostat/SM\nrhesus/MS\nrhetoric/M\nrhetorical/Y\nrhetorician/SM\nrheum/M\nrheumatic/MS\nrheumatically\nrheumatism/M\nrheumatoid\nrheumy\nrhinestone/SM\nrhinitis/M\nrhino/MS\nrhinoceros/MS\nrhinoplasty\nrhinovirus/MS\nrhizome/MS\nrho/SM\nrhodium/M\nrhododendron/SM\nrhomboid/SM\nrhomboidal\nrhombus/MS\nrhubarb/MS\nrhyme/MZGDRS\nrhymer/M\nrhymester/MS\nrhythm/SM\nrhythmic\nrhythmical/Y\nrial/MS\nrib/SM\nribald\nribaldry/M\nribbed\nribber/SM\nribbing\nribbon/SM\nriboflavin/M\nrice/MZGDRS\nricer/M\nrich/TMRSYP\nrichness/M\nrick/GMDS\nrickets/M\nrickety/RT\nrickrack/M\nrickshaw/MS\nricochet/GMDS\nricotta/M\nrid/S\nriddance/M\nridden\nridding\nriddle/DSMG\nride/MZGRS\nrider/M\nriderless\nridership/M\nridge/MGDS\nridgepole/SM\nridgy\nridicule/MGDS\nridiculous/YP\nridiculousness/M\nriding/M\nrife/TR\nriff/GMDS\nriffle/DSMG\nriffraff/M\nrifle/MZGDRS\nrifleman/M\nriflemen\nrifler/M\nrifling/M\nrift/GMDS\nrig/SM\nrigatoni/M\nrigged\nrigger/SM\nrigging/M\nright/MDRYSPTG\nrighteous/UP\nrighteously\nrighteousness/UM\nrightful/PY\nrightfulness/M\nrightism/M\nrightist/SM\nrightmost\nrightness/M\nrighto\nrightsize/DSG\nrightward/S\nrigid/YP\nrigidity/M\nrigidness/M\nrigmarole/MS\nrigor/MS\nrigorous/YP\nrigorousness/M\nrile/GDS\nrill/MS\nrim/SGMD\nrime/MS\nrimless\nrimmed\nrimming\nrind/MS\nring/ZGMDRJ\nringer/M\nringgit/MS\nringleader/MS\nringlet/MS\nringlike\nringmaster/MS\nringside/M\nringtone/SM\nringworm/M\nrink/MS\nrinse/MGDS\nriot/ZGMDRS\nrioter/M\nrioting/M\nriotous/PY\nrip/SXTMNR\nriparian\nripcord/MS\nripe/YP\nripen/DG\nripened/U\nripeness/M\nripoff/SM\nriposte/MGDS\nripped\nripper/SM\nripping\nripple/DSMG\nripply\nripsaw/SM\nriptide/MS\nrise/JMZGRS\nrisen\nriser/M\nrisibility/M\nrisible\nrising/M\nrisk/GMDS\nriskily\nriskiness/M\nrisky/RPT\nrisotto/MS\nrisque\nrissole/S\nrite/MS\nritual/SMY\nritualism/M\nritualistic\nritualistically\nritualized\nritzy/RT\nriv/ZNR\nrival/MDSG\nrivaled/U\nrivalry/SM\nrive/CGDS\nriver/M\nriverbank/SM\nriverbed/MS\nriverboat/SM\nriverfront\nriverside/MS\nrivet/MDRSZG\nriveter/M\nriviera/S\nrivulet/MS\nriyal/MS\nrm\nroach/GMDS\nroad/IMS\nroadbed/SM\nroadblock/MDSG\nroadhouse/SM\nroadie/MS\nroadkill/M\nroadrunner/SM\nroadshow/SM\nroadside/SM\nroadster/SM\nroadway/SM\nroadwork/SM\nroadworthy\nroam/ZGDRS\nroamer/M\nroaming/M\nroan/MS\nroar/ZGMDRS\nroarer/M\nroaring/M\nroast/ZGMDRSJ\nroaster/M\nroasting/M\nrob/S\nrobbed\nrobber/MS\nrobbery/SM\nrobbing\nrobe's\nrobe/EGDS\nrobin/MS\nrobocall/SGMD\nrobot/MS\nrobotic/S\nrobotics/M\nrobotize/GDS\nrobust/RYPT\nrobustness/M\nrock/ZGMDRS\nrockabilly/M\nrockbound\nrocker/M\nrockery/S\nrocket/MDSG\nrocketry/M\nrockfall/SM\nrockiness/M\nrocky/TRP\nrococo/M\nrod/SM\nrode\nrodent/MS\nrodeo/MS\nroe/SM\nroebuck/SM\nroentgen/MS\nroger/GDS\nrogue's\nrogue/KS\nroguery/M\nroguish/YP\nroguishness/M\nroil/GDS\nroister/ZGDRS\nroisterer/M\nrole/MS\nroll/MDRZGJS\nrollback/SM\nroller/M\nrollerblading\nrollerskating/M\nrollick/SDG\nrollicking/M\nrollmop/S\nrollover/SM\nromaine/MS\nroman/M\nromance/MZGDRS\nromancer/M\nromantic/MS\nromantically\nromanticism/M\nromanticist/SM\nromanticize/DSG\nromeo/MS\nromp/MDRZGS\nromper/M\nrondo/SM\nrood/MS\nroof/MDRZGS\nroofer/M\nroofing/M\nroofless\nrooftop/SM\nrook/MDGS\nrookery/SM\nrookie/SM\nroom/MDRZGS\nroomer/M\nroomette/SM\nroomful/SM\nroominess/M\nroommate/SM\nroomy/RTP\nroost/SMDRZG\nrooster/M\nroot/MDRZGS\nrooter/M\nrootkit/SM\nrootless/P\nrootlet/SM\nrope/MZGDRS\nroper/M\nropy/RT\nrosary/SM\nrose/MS\nroseate\nrosebud/SM\nrosebush/MS\nrosemary/M\nrosette/SM\nrosewater/M\nrosewood/MS\nrosily\nrosin/SMDG\nrosiness/M\nroster/SM\nrostrum/MS\nrosy/RTP\nrot/SM\nrota/S\nrotary/SM\nrotate/DSGNX\nrotation/M\nrotational\nrotatory\nrote/M\nrotgut/M\nrotisserie/SM\nrotogravure/MS\nrotor/SM\nrototiller/MS\nrotted\nrotten/TPRY\nrottenness/M\nrotter/S\nrotting\nrottweiler/S\nrotund/P\nrotunda/MS\nrotundity/M\nrotundness/M\nroue/MS\nrouge/DSMG\nrough/MDNRYXTGP\nroughage/M\nroughcast\nroughen/GD\nroughhouse/MGDS\nroughneck/GMDS\nroughness/M\nroughs\nroughshod\nroulette/M\nround/PSMDRYZTG\nroundabout/SM\nroundel/S\nroundelay/MS\nroundhouse/SM\nroundish\nroundness/M\nroundup/MS\nroundworm/SM\nrouse/DSG\nroust/SDG\nroustabout/SM\nrout/MRZS\nroute's\nroute/ADSG\nrouteing\nrouter/M\nroutine/MYS\nroutinize/GDS\nroux\nrove/ZGDRS\nrover/M\nrow/SZGMDR\nrowan/S\nrowboat/MS\nrowdily\nrowdiness/M\nrowdy/PRSMT\nrowdyism/M\nrowel/SMDG\nrower/M\nrowing/M\nrowlock/S\nroyal/SMY\nroyalist/SM\nroyalties/M\nroyalty/SM\nrpm\nrps\nrt\nrte\nrub/SM\nrubato/SM\nrubbed\nrubber/SM\nrubberize/GDS\nrubberneck/MDRSZG\nrubbernecker/M\nrubbery\nrubbing/S\nrubbish/MDSG\nrubbishy\nrubble/M\nrubdown/SM\nrube/MS\nrubella/M\nrubicund\nrubidium/M\nruble/SM\nrubric/SM\nruby/RSMT\nruched\nruck/DGS\nrucksack/MS\nruckus/MS\nructions\nrudder/SM\nrudderless\nruddiness/M\nruddy/RTP\nrude/YTRP\nrudeness/M\nrudiment/SM\nrudimentary\nrue/DSMG\nrueful/PY\nruefulness/M\nruff/MDYGS\nruffian/MYS\nruffle/DSMG\nruffled/U\nrug/SM\nrugby/M\nrugged/PTRY\nruggedness/M\nrugger\nrugrat/SM\nruin/MDGS\nruination/M\nruinous/Y\nrule/MZGJDRS\nruler/M\nruling/M\nrum/SM\nrumba/SMDG\nrumble/DSJMG\nrumbling/M\nrumbustious\nruminant/MS\nruminate/XGNVDS\nrumination/M\nruminative/Y\nrummage/DSMG\nrummer\nrummest\nrummy/M\nrumor/SMDG\nrumormonger/SM\nrump/MYS\nrumple/DSMG\nrumpus/MS\nrun/ASM\nrunabout/MS\nrunaround/SM\nrunaway/MS\nrundown/SM\nrune/MS\nrung/MS\nrunic\nrunlet/SM\nrunnel/SM\nrunner/SM\nrunning/M\nrunny/RT\nrunoff/SM\nrunt/MS\nruntime\nrunty/RT\nrunway/SM\nrupee/SM\nrupiah/M\nrupiahs\nrupture/MGDS\nrural\nruse/MS\nrush/MDRSZG\nrusher/M\nrushy\nrusk/MS\nrusset/SM\nrust/MDGS\nrustic/SM\nrustically\nrusticate/GDS\nrustication/M\nrusticity/M\nrustiness/M\nrustle/DRSJMZG\nrustler/M\nrustproof/SDG\nrusty/RPNT\nrut/SM\nrutabaga/SM\nruthenium/M\nrutherfordium/M\nruthless/YP\nruthlessness/M\nrutted\nrutting\nrutty/RT\nrye/M\ns/NYXB\nsabbath/M\nsabbaths\nsabbatical/SM\nsaber/MS\nsable/MS\nsabot/MS\nsabotage/DSMG\nsaboteur/SM\nsabra/MS\nsac/SM\nsaccharin/M\nsaccharine\nsacerdotal\nsachem/SM\nsachet/SM\nsack/ZGMDRJS\nsackcloth/M\nsacker/M\nsackful/MS\nsacking/M\nsacra\nsacrament/MS\nsacramental\nsacred/YP\nsacredness/M\nsacrifice/DSMG\nsacrificial/Y\nsacrilege/MS\nsacrilegious/Y\nsacristan/MS\nsacristy/SM\nsacroiliac/MS\nsacrosanct/P\nsacrosanctness/M\nsacrum/M\nsad/PY\nsadden/SDG\nsadder\nsaddest\nsaddle's\nsaddle/UDSG\nsaddlebag/MS\nsaddler/S\nsaddlery\nsades\nsadhu/S\nsadism/M\nsadist/SM\nsadistic\nsadistically\nsadness/M\nsadomasochism/M\nsadomasochist/MS\nsadomasochistic\nsafari/SGMD\nsafe/MYTPRS\nsafeguard/SMDG\nsafekeeping/M\nsafeness/M\nsafety/SM\nsafflower/MS\nsaffron/MS\nsag/SM\nsaga/MS\nsagacious/Y\nsagacity/M\nsage/MYTRS\nsagebrush/M\nsagged\nsagging\nsaggy/RT\nsago/M\nsaguaro/MS\nsahib/MS\nsaid/U\nsail/GMDSJ\nsailboard/MRZGS\nsailboarder/M\nsailboarding/M\nsailboat/MS\nsailcloth/M\nsailfish/MS\nsailing/M\nsailor/SM\nsailplane/MS\nsaint/MDYS\nsainthood/M\nsaintlike\nsaintliness/M\nsaintly/PRT\nsaith\nsake/M\nsalaam/SMDG\nsalable/U\nsalacious/PY\nsalaciousness/M\nsalacity/M\nsalad/MS\nsalamander/SM\nsalami/SM\nsalary/DSM\nsale/ABMS\nsaleroom/S\nsalesclerk/SM\nsalesgirl/SM\nsaleslady/SM\nsalesman/M\nsalesmanship/M\nsalesmen\nsalespeople/M\nsalesperson/MS\nsalesroom/S\nsaleswoman/M\nsaleswomen\nsalience/M\nsalient/SMY\nsaline/SM\nsalinity/M\nsaliva/M\nsalivary\nsalivate/GNDS\nsalivation/M\nsallow/RTP\nsallowness/M\nsally/DSMG\nsalmon/SM\nsalmonella/M\nsalmonellae\nsalon/MS\nsaloon/SM\nsalsa/MS\nsalt's\nsalt/CTGDS\nsaltbox/MS\nsaltcellar/SM\nsalted/U\nsalter\nsaltine/SM\nsaltiness/M\nsaltpeter/M\nsaltshaker/SM\nsaltwater/M\nsalty/RTP\nsalubrious/I\nsalutary\nsalutation/MS\nsalutatorian/MS\nsalutatory\nsalute/DSMG\nsalvage/DSMG\nsalvageable\nsalvation/M\nsalve/MZGDRS\nsalver/M\nsalvo/MS\nsamarium/M\nsamba/MDSG\nsame/SP\nsameness/M\nsamey\nsamizdat/S\nsamosa/S\nsamovar/SM\nsampan/SM\nsample/DRSMZGJ\nsampler/M\nsampling/M\nsamurai/SM\nsanatorium/SM\nsanctification/M\nsanctify/GDSN\nsanctimonious/YP\nsanctimoniousness/M\nsanctimony/M\nsanction/GSMD\nsanctioned/U\nsanctity/M\nsanctuary/SM\nsanctum/SM\nsand/ZGMDRS\nsandal/SM\nsandalwood/M\nsandbag/SM\nsandbagged\nsandbagger/SM\nsandbagging\nsandbank/MS\nsandbar/SM\nsandblast/ZGMDRS\nsandblaster/M\nsandbox/MS\nsandcastle/MS\nsander/M\nsandhog/SM\nsandiness/M\nsandlot/SM\nsandlotter/MS\nsandman/M\nsandmen\nsandpaper/GMDS\nsandpiper/MS\nsandpit/S\nsandstone/M\nsandstorm/SM\nsandwich/MDSG\nsandy/RTP\nsane/IYTR\nsaneness/M\nsang/S\nsangfroid/M\nsangria/M\nsanguinary\nsanguine/Y\nsanitarian/SM\nsanitarium/SM\nsanitary/IU\nsanitation/M\nsanitize/ZGDRS\nsanity/IM\nsank\nsans\nsanserif\nsap/SM\nsapience/M\nsapiens\nsapient\nsapless\nsapling/MS\nsapped\nsapper/S\nsapphire/SM\nsappiness/M\nsapping\nsappy/PRT\nsaprophyte/SM\nsaprophytic\nsapsucker/SM\nsapwood/M\nsaran/M\nsarcasm/MS\nsarcastic\nsarcastically\nsarcoma/MS\nsarcophagi\nsarcophagus/M\nsardine/MS\nsardonic\nsardonically\nsarge/MS\nsari/MS\nsarky\nsarnie/S\nsarong/SM\nsarsaparilla/MS\nsartorial/Y\nsash/MS\nsashay/SGMD\nsass/GMDS\nsassafras/MS\nsassy/RT\nsat\nsatanic\nsatanical/Y\nsatanism/M\nsatanist/MS\nsatay\nsatchel/MS\nsate/GDS\nsateen/M\nsatellite/DSMG\nsatiable/I\nsatiate/GNDS\nsatiation/M\nsatiety/M\nsatin/M\nsatinwood/SM\nsatiny\nsatire/SM\nsatiric\nsatirical/Y\nsatirist/SM\nsatirize/DSG\nsatisfaction/EM\nsatisfactions\nsatisfactorily/U\nsatisfactory/U\nsatisfied/U\nsatisfy/EDSG\nsatisfying/U\nsatisfyingly\nsatori/M\nsatrap/SM\nsatsuma/S\nsaturate/DSGN\nsaturated/U\nsaturation/M\nsaturnine\nsatyr/MS\nsatyriasis/M\nsatyric\nsauce/MZGDRS\nsaucepan/SM\nsaucer/M\nsaucily\nsauciness/M\nsaucy/RPT\nsauerkraut/M\nsauna/MDSG\nsaunter/MDGS\nsaurian\nsauropod/SM\nsausage/MS\nsaute/MS\nsauteed\nsauteing\nsavage/DRSMYTGP\nsavageness/M\nsavagery/SM\nsavanna/MS\nsavant/SM\nsave/BJMZGDRS\nsaved/U\nsaver/M\nsaving/M\nsavings/M\nsavior/SM\nsavor/MDSG\nsavoriness/M\nsavory/PTRSM\nsavoy/MS\nsavvy/DRSMTG\nsaw/SGMD\nsawbones/M\nsawbuck/MS\nsawdust/M\nsawfly/SM\nsawhorse/SM\nsawmill/MS\nsawyer/SM\nsax/MS\nsaxifrage/SM\nsaxophone/MS\nsaxophonist/SM\nsay's\nsay/USG\nsaying/SM\nscab/MS\nscabbard/MS\nscabbed\nscabbiness/M\nscabbing\nscabby/PTR\nscabies/M\nscabrous\nscad/MS\nscaffold/SMG\nscaffolding/M\nscag/S\nscagged\nscalability\nscalar/S\nscalawag/MS\nscald/MDSG\nscale's\nscale/CGDS\nscaleless\nscalene\nscaliness/M\nscallion/MS\nscallop/GSMD\nscalp/MDRSZG\nscalpel/SM\nscalper/M\nscaly/RTP\nscam/MS\nscammed\nscammer/S\nscamming\nscamp/MRSZ\nscamper/GMD\nscampi/M\nscan/MS\nscandal/SM\nscandalize/DSG\nscandalmonger/SM\nscandalous/Y\nscandium/M\nscanned\nscanner/SM\nscanning\nscansion/M\nscant/CDSTG\nscanter\nscantily\nscantiness/M\nscantly\nscantness/M\nscanty/RSPT\nscapegoat/SGMD\nscapegrace/MS\nscapula/M\nscapulae\nscapular/SM\nscar/GMDS\nscarab/SM\nscarce/RYTP\nscarceness/M\nscarcity/SM\nscare/MS\nscarecrow/MS\nscaremonger/SMG\nscarf/MDSG\nscarification/M\nscarify/NDSG\nscarily\nscariness/M\nscarlatina/M\nscarlet/M\nscarp/MDRSZG\nscarper/DG\nscarred\nscarring\nscarves\nscary/RTP\nscat/MS\nscathing/Y\nscatological\nscatology/M\nscatted\nscatter/GJSMD\nscatterbrain/SMD\nscattering/M\nscattershot\nscatting\nscatty\nscavenge/ZGDRS\nscavenger/M\nscenario/MS\nscenarist/MS\nscene/MS\nscenery/M\nscenic\nscenically\nscent/CMS\nscented/U\nscenting\nscentless\nscepter/MS\nsch\nschadenfreude\nschedule's\nschedule/ADSG\nscheduled/U\nscheduler/S\nschema\nschemata\nschematic/SM\nschematically\nschematize/GDS\nscheme/DRSMZG\nschemer/M\nscherzo/MS\nschilling/MS\nschism/SM\nschismatic/SM\nschist/M\nschistosomiasis\nschizo/SM\nschizoid/MS\nschizophrenia/M\nschizophrenic/SM\nschlemiel/SM\nschlep/SM\nschlepped\nschlepping\nschlock/M\nschmaltz/M\nschmaltzy/TR\nschmo/M\nschmoes\nschmooze/DRSZG\nschmuck/MS\nschnapps/M\nschnauzer/SM\nschnitzel/SM\nschnook/MS\nschnoz/MS\nschnozzle/SM\nscholar/MYS\nscholarship/MS\nscholastic\nscholastically\nscholasticism\nschool/SGMD\nschoolbag/MS\nschoolbook/SM\nschoolboy/MS\nschoolchild/M\nschoolchildren/M\nschooldays\nschooled/U\nschoolfellow/SM\nschoolgirl/SM\nschoolhouse/SM\nschooling/M\nschoolkid/S\nschoolmarm/SM\nschoolmarmish\nschoolmaster/MS\nschoolmate/SM\nschoolmistress/MS\nschoolroom/SM\nschoolteacher/MS\nschoolwork/M\nschoolyard/SM\nschooner/SM\nschuss/GMDS\nschussboomer/MS\nschwa/MS\nsci\nsciatic\nsciatica/M\nscience/FMS\nscientific/U\nscientifically/U\nscientist/SM\nscimitar/SM\nscintilla/MS\nscintillate/DSGN\nscintillation/M\nscion/MS\nscissor/GDS\nscleroses\nsclerosis/M\nsclerotic\nscoff/MDRSZG\nscoffer/M\nscofflaw/MS\nscold/MDSGJ\nscolding/M\nscoliosis/M\nsconce/SM\nscone/MS\nscoop/MDSG\nscoopful/MS\nscoot/DRSZG\nscooter/M\nscope/MGDS\nscorbutic\nscorch/MDRSZG\nscorcher/M\nscore/MZGDRS\nscoreboard/SM\nscorecard/MS\nscorekeeper/MS\nscoreless\nscoreline/S\nscorer/M\nscorn/MDRSZG\nscorner/M\nscornful/Y\nscorpion/MS\nscotch/MDSG\nscotchs\nscoundrel/MS\nscour/DRSZG\nscourer/M\nscourge/DSMG\nscout/MDRSZG\nscouting/M\nscoutmaster/MS\nscow/MS\nscowl/MDSG\nscrabble/MZGDRS\nscrabbler/M\nscrag/MS\nscraggly/RT\nscraggy/TR\nscram/S\nscramble's\nscramble/UGDS\nscrambler/MS\nscrammed\nscramming\nscrap/MDRSZGJ\nscrapbook/SM\nscrape/SM\nscraper/M\nscrapheap/SM\nscrapie\nscrapped\nscrapper/MS\nscrapping\nscrappy/TR\nscrapyard/SM\nscratch/GMDS\nscratchcard/S\nscratched/U\nscratchily\nscratchiness/M\nscratchpad/S\nscratchy/PRT\nscrawl/SMDG\nscrawly\nscrawniness/M\nscrawny/PTR\nscream/SMDRZG\nscreamer/M\nscreaming/Y\nscree/MDS\nscreech/GMDS\nscreechy/TR\nscreed/S\nscreen/SJMDG\nscreening/M\nscreenplay/SM\nscreensaver/SM\nscreenshot/S\nscreenwriter/SM\nscreenwriting/M\nscrew's\nscrew/UDSG\nscrewball/MS\nscrewdriver/MS\nscrewiness/M\nscrewworm/SM\nscrewy/PRT\nscribal\nscribble/MZGDRS\nscribbler/M\nscribe's\nscribe/CKIS\nscrim/MS\nscrimmage/MGDS\nscrimp/SDG\nscrimshaw/MDGS\nscrip/MS\nscript/FSMDG\nscripted/U\nscriptural\nscripture/MS\nscriptwriter/SM\nscrivener/SM\nscrod/M\nscrofula/M\nscrofulous\nscrog/S\nscroll/GSMD\nscrooge/MS\nscrota\nscrotal\nscrotum/M\nscrounge/DRSZG\nscrounger/M\nscroungy/TR\nscrub/MS\nscrubbed\nscrubber/SM\nscrubbing\nscrubby/RT\nscruff/SM\nscruffily\nscruffiness/M\nscruffy/RPT\nscrum/S\nscrumhalf\nscrumhalves\nscrummage/S\nscrummed\nscrumming\nscrump/SGD\nscrumptious/Y\nscrumpy\nscrunch/MDSG\nscrunchy/SM\nscruple/MGDS\nscrupulosity/M\nscrupulous/UPY\nscrupulousness/UM\nscrutineer/S\nscrutinize/GDS\nscrutiny/M\nscuba/MDSG\nscud/MS\nscudded\nscudding\nscuff/MDSG\nscuffle/MGDS\nscull/MDRSZG\nsculler/M\nscullery/SM\nscullion/SM\nsculpt/SGD\nsculptor/SM\nsculptress/MS\nsculptural\nsculpture/DSMG\nscum/MS\nscumbag/MS\nscummed\nscumming\nscummy/TR\nscupper/MDGS\nscurf/M\nscurfy\nscurrility/M\nscurrilous/PY\nscurrilousness/M\nscurry/GDSM\nscurvily\nscurvy/TRM\nscutcheon/SM\nscuttle/MGDS\nscuttlebutt/M\nscuzzy/TR\nscythe/DSMG\nsea/SM\nseabed/SM\nseabird/MS\nseaboard/SM\nseaborne\nseacoast/SM\nseafarer/SM\nseafaring/M\nseafloor/SM\nseafood/M\nseafront/SM\nseagoing\nseagull/MS\nseahorse/MS\nseal's\nseal/AUSDG\nsealant/MS\nsealer/SM\nsealskin/M\nseam/GMDNS\nseaman/M\nseamanship/M\nseamless/Y\nseamount/MS\nseamstress/MS\nseamy/RT\nseance/SM\nseaplane/SM\nseaport/MS\nsear/GMDS\nsearch/AZGMDRS\nsearchable/U\nsearcher/AM\nsearching/Y\nsearchlight/MS\nsearing/Y\nseascape/SM\nseashell/SM\nseashore/SM\nseasick/P\nseasickness/M\nseaside/MS\nseason/SGMDBJ\nseasonable/U\nseasonably/U\nseasonal/Y\nseasonality\nseasoned/U\nseasoning/M\nseat's\nseat/UGDS\nseating/M\nseatmate/SM\nseawall/MS\nseaward/MS\nseawater/M\nseaway/SM\nseaweed/MS\nseaworthiness/M\nseaworthy/P\nsebaceous\nseborrhea/M\nsebum\nsec'y\nsec/SM\nsecant/SM\nsecateurs\nsecede/DSG\nsecession/M\nsecessionist/MS\nseclude/GDS\nseclusion/M\nseclusive\nsecond/SLZGMDRY\nsecondarily\nsecondary/SM\nseconder/M\nsecondhand\nsecondment/S\nsecrecy/M\nsecret/SGVMDY\nsecretarial\nsecretariat/MS\nsecretary/SM\nsecretaryship/M\nsecrete/XNS\nsecretion/M\nsecretive/PY\nsecretiveness/M\nsecretory\nsect/IMS\nsectarian/MS\nsectarianism/M\nsectary/SM\nsection/AESM\nsectional/MS\nsectionalism/M\nsectioned\nsectioning\nsector/ESM\nsecular\nsecularism/M\nsecularist/SM\nsecularization/M\nsecularize/DSG\nsecure/DRSYTG\nsecured/U\nsecurity/ISM\nsecy\nsedan/MS\nsedate/DRSYTGNVP\nsedateness/M\nsedation/M\nsedative/SM\nsedentary\nsedge/M\nsedgy\nsediment/MS\nsedimentary\nsedimentation/M\nsedition/M\nseditious\nseduce/DRSZG\nseducer/M\nseduction/SM\nseductive/YP\nseductiveness/M\nseductress/MS\nsedulous/Y\nsee/RSMZ\nseed's\nseed/AGDS\nseedbed/MS\nseedcase/MS\nseeded/U\nseeder/SM\nseediness/M\nseedless\nseedling/MS\nseedpod/MS\nseedy/RPT\nseeing/S\nseek/ZGRS\nseeker/M\nseem/GDS\nseeming/Y\nseemliness/UM\nseemly/URTP\nseen/U\nseep/GDS\nseepage/M\nseer/M\nseersucker/M\nseesaw/SMDG\nseethe/DSG\nsegfault/S\nsegment/GSMD\nsegmentation/M\nsegmented/U\nsegregate/CDSGN\nsegregated/U\nsegregation/CM\nsegregationist/MS\nsegue/MGDS\nsegueing\nseigneur/SM\nseignior/SM\nseine/MZGDRS\nseiner/M\nseismic\nseismically\nseismograph/ZMR\nseismographer/M\nseismographic\nseismographs\nseismography/M\nseismologic\nseismological\nseismologist/MS\nseismology/M\nseize/GDS\nseizure/MS\nseldom\nselect/CSGVD\nselection/SM\nselective/Y\nselectivity/M\nselectman/M\nselectmen\nselectness/M\nselector/MS\nselenium/M\nselenographer/MS\nselenography/M\nself/M\nselfie/SM\nselfish/UYP\nselfishness/UM\nselfless/PY\nselflessness/M\nselfsame\nsell's\nsell/AZGRS\nseller's\nselloff/MS\nsellotape/DSG\nsellout/MS\nseltzer/MS\nselvage/MS\nselves\nsemantic/S\nsemantically\nsemanticist/MS\nsemantics/M\nsemaphore/DSMG\nsemblance/ASM\nsemen/M\nsemester/SM\nsemi/MS\nsemiannual/Y\nsemiarid\nsemiautomatic/MS\nsemibreve/S\nsemicircle/SM\nsemicircular\nsemicolon/MS\nsemiconducting\nsemiconductor/MS\nsemiconscious\nsemidarkness/M\nsemidetached\nsemifinal/SM\nsemifinalist/MS\nsemigloss/S\nsemimonthly/SM\nseminal\nseminar/MS\nseminarian/SM\nseminary/SM\nsemiofficial\nsemiotic/S\nsemiotics/M\nsemipermeable\nsemiprecious\nsemiprivate\nsemipro/S\nsemiprofessional/SM\nsemiquaver/S\nsemiretired\nsemiskilled\nsemisolid\nsemisweet\nsemitone/SM\nsemitrailer/MS\nsemitransparent\nsemitropical\nsemivowel/SM\nsemiweekly/SM\nsemiyearly\nsemolina/M\nsempstress/MS\nsenate/SM\nsenator/MS\nsenatorial\nsend/ZGRS\nsender/M\nsendoff/MS\nsenescence/M\nsenescent\nsenile\nsenility/M\nsenior/SM\nseniority/M\nsenna/M\nsenor/MS\nsenora/SM\nsenorita/SM\nsensation/MS\nsensational/Y\nsensationalism/M\nsensationalist/MS\nsensationalize/GDS\nsense/MGDS\nsenseless/PY\nsenselessness/M\nsensibilities\nsensibility/IM\nsensible/P\nsensibleness/M\nsensibly/I\nsensitive/SMYP\nsensitiveness/M\nsensitivities\nsensitivity/IM\nsensitization/CM\nsensitize/CDSG\nsensor/SM\nsensory\nsensual/Y\nsensualist/SM\nsensuality/M\nsensuous/YP\nsensuousness/M\nsent/FAU\nsentence/MGDS\nsententious/Y\nsentience/IM\nsentient/I\nsentiment/SM\nsentimental/Y\nsentimentalism/M\nsentimentalist/MS\nsentimentality/M\nsentimentalization/M\nsentimentalize/GDS\nsentinel/MS\nsentry/SM\nsepal/MS\nseparability/IM\nseparable\nseparably/I\nseparate/XMYGNVDSP\nseparateness/M\nseparation/M\nseparatism/M\nseparatist/MS\nseparator/MS\nsepia/M\nsepsis/M\nsepta\nseptal\nseptet/SM\nseptic\nsepticemia/M\nsepticemic\nseptuagenarian/MS\nseptum/M\nsepulcher/GMDS\nsepulchral\nseq\nsequel/SM\nsequence/MZGDRS\nsequencing/M\nsequential/FY\nsequester/SDG\nsequestrate/XGNDS\nsequestration/M\nsequin/SMD\nsequinned\nsequitur\nsequoia/MS\nseraglio/MS\nserape/SM\nseraph/M\nseraphic\nseraphs\nsere/TR\nserenade/MGDS\nserendipitous\nserendipity/M\nserene/RPYT\nsereneness/M\nserenity/M\nserf/MS\nserfdom/M\nserge/M\nsergeant/MS\nserial/SMY\nserialization/SM\nserialize/GDSB\nseries/M\nserif/MS\nserigraph/M\nserigraphs\nserine\nserious/PY\nseriousness/M\nsermon/SM\nsermonize/GDS\nserology/M\nserotonin\nserous\nserpent/MS\nserpentine/M\nserrate/XND\nserration/M\nserried\nserum/MS\nservant/MS\nserve's/AF\nserve/FACGDS\nserver/SM\nservery/S\nservice/EMS\nserviceability/M\nserviceable\nserviced\nserviceman/M\nservicemen\nservicewoman/M\nservicewomen\nservicing\nserviette/MS\nservile\nservility/M\nserving's\nservings\nservitor/MS\nservitude/M\nservo/MS\nservomechanism/SM\nservomotor/MS\nsesame/SM\nsesquicentennial/MS\nsession/MS\nset/AISM\nsetback/MS\nsetscrew/SM\nsetsquare/S\nsett/BJZGRS\nsettee/MS\nsetter/M\nsetting/M\nsettle's\nsettle/AUGDS\nsettlement/AM\nsettlements\nsettler/SM\nsetup/MS\nseven/MHS\nseventeen/SMH\nseventeenth/M\nseventeenths\nseventh/M\nsevenths\nseventieth/M\nseventieths\nseventy/SMH\nsever/ETGDS\nseveral/MY\nseverance/SM\nsevere/YPR\nsevereness/M\nseverity/M\nsew/ASGD\nsewage/M\nsewer/MS\nsewerage/M\nsewing/M\nsewn/A\nsex/GMDS\nsexagenarian/SM\nsexily\nsexiness/M\nsexism/M\nsexist/MS\nsexless\nsexologist/SM\nsexology/M\nsexpot/MS\nsextant/SM\nsextet/MS\nsexting\nsexton/MS\nsextuplet/SM\nsexual/Y\nsexuality/M\nsexy/PTR\nsf\nsh\nshabbily\nshabbiness/M\nshabby/PTR\nshack/MDSG\nshackle's\nshackle/UGDS\nshad/GMDSJ\nshade/MS\nshadily\nshadiness/M\nshading/M\nshadow/SGMD\nshadowbox/GDS\nshadowy/RT\nshady/RPT\nshaft/MDSG\nshag/MS\nshagged\nshagginess/M\nshagging\nshaggy/TPR\nshah/M\nshahs\nshake/MZGRS\nshakedown/SM\nshaken/U\nshakeout/MS\nshaker/M\nshakeup/MS\nshakily\nshakiness/M\nshaky/RPT\nshale/M\nshall\nshallot/MS\nshallow/TPMRYS\nshallowness/M\nshalom\nshalt\nsham/GMDS\nshaman/SM\nshamanic\nshamanism\nshamanistic\nshamble/MGDS\nshambles/M\nshambolic\nshame/MS\nshamefaced/Y\nshameful/PY\nshamefulness/M\nshameless/YP\nshamelessness/M\nshammed\nshamming\nshampoo/ZGMDRS\nshampooer/M\nshamrock/MS\nshan't\nshandy/S\nshanghai/DSG\nshank/MS\nshantung/M\nshanty/SM\nshantytown/SM\nshape's\nshape/AGDS\nshaped/U\nshapeless/YP\nshapelessness/M\nshapeliness/M\nshapely/PTR\nshard/MS\nshare/MZGDRS\nshareable\nsharecrop/S\nsharecropped\nsharecropper/MS\nsharecropping\nshareholder/SM\nshareholding/S\nsharer/M\nshareware/M\nsharia/M\nshariah\nshark/MDSG\nsharkskin/M\nsharp/MDNRYSPXZTG\nsharpen/ADGS\nsharpener/MS\nsharper/M\nsharpie/MS\nsharpish\nsharpness/M\nsharpshooter/SM\nsharpshooting/M\nshatter/GMDS\nshatterproof\nshave/MZGDRSJ\nshaven/U\nshaver/M\nshaving/M\nshawl/MS\nshay/MS\nshe'd\nshe'll\nshe/DSM\nsheaf/M\nshear/MDRSZG\nshearer/M\nsheath/JM\nsheathe/UGDS\nsheathing/M\nsheaths\nsheave/DSMG\nshebang/MS\nshebeen/S\nshed/MS\nshedding\nsheen/M\nsheeny/TR\nsheep/M\nsheepdog/MS\nsheepfold/SM\nsheepherder/MS\nsheepish/YP\nsheepishness/M\nsheepskin/MS\nsheer/MDRSPTG\nsheerness/M\nsheet/MSG\nsheeting/M\nsheetlike\nsheikdom/MS\nsheikh/M\nsheikhs\nsheila/S\nshekel/SM\nshelf/M\nshell/MDRSG\nshellac/MS\nshellacked\nshellacking/MS\nshellfire/M\nshellfish/MS\nshelter/GMDS\nshelve/GDS\nshelving/M\nshenanigan/SM\nshepherd/SMDG\nshepherdess/MS\nsherbet/SM\nsheriff/SM\nsherry/SM\nshew/GDS\nshewn\nshh\nshiatsu/M\nshibboleth/M\nshibboleths\nshield/MDGS\nshift/GMDS\nshiftily\nshiftiness/M\nshiftless/PY\nshiftlessness/M\nshifty/RPT\nshiitake/SM\nshill/GMDSJ\nshillelagh/M\nshillelaghs\nshilling/M\nshim/MS\nshimmed\nshimmer/SMDG\nshimmery\nshimming\nshimmy/DSMG\nshin/ZGMDRS\nshinbone/SM\nshindig/SM\nshine/MS\nshiner/M\nshingle/DSMG\nshinguard/M\nshininess/M\nshinned\nshinning\nshinny/DSG\nshinsplints/M\nshiny/TRP\nship's\nship/ALS\nshipboard/MS\nshipbuilder/SM\nshipbuilding/M\nshipload/SM\nshipmate/SM\nshipment/AM\nshipments\nshipowner/MS\nshipped/A\nshipper/SM\nshipping/M\nshipshape\nshipwreck/GMDS\nshipwright/MS\nshipyard/SM\nshire/MS\nshirk/ZGDRS\nshirker/M\nshirr/GMDSJ\nshirring/M\nshirt/GMDS\nshirtfront/SM\nshirting/M\nshirtless\nshirtsleeve/SM\nshirttail/SM\nshirtwaist/MS\nshirty\nshit/SM!\nshitfaced/!\nshithead/S!\nshitload/!\nshitted/!\nshitting/!\nshitty/RT!\nshiv/ZMRS\nshiver/MDG\nshivery\nshoal/GMDS\nshoat/MS\nshock/ZGMDRS\nshocker/M\nshocking/Y\nshockproof\nshod/U\nshoddily\nshoddiness/M\nshoddy/PRMT\nshoe/MS\nshoehorn/GMDS\nshoeing\nshoelace/MS\nshoemaker/SM\nshoeshine/SM\nshoestring/SM\nshoetree/MS\nshogun/MS\nshogunate/M\nshone\nshoo/GDS\nshook\nshoot/ZGMRSJ\nshooter/M\nshooting/M\nshootout/MS\nshop/MS\nshopaholic/MS\nshopfitter/S\nshopfitting\nshopfront/S\nshopkeeper/MS\nshoplift/DRZGS\nshoplifter/M\nshoplifting/M\nshoppe/MZGDRS\nshopper/M\nshopping/M\nshoptalk/M\nshopworn\nshore/MGDS\nshorebird/SM\nshoreline/MS\nshoring/M\nshort/XTGMDNRYSP\nshortage/MS\nshortbread/M\nshortcake/MS\nshortchange/DSG\nshortcoming/MS\nshortcrust\nshortcut/MS\nshorten/JGD\nshortening/M\nshortfall/MS\nshorthand/MD\nshorthorn/MS\nshortish\nshortlist/DGS\nshortness/M\nshortsighted/PY\nshortsightedness/M\nshortstop/MS\nshortwave/MS\nshorty/SM\nshot/MS\nshotgun/SM\nshotgunned\nshotgunning\nshould\nshould've\nshoulder/MDGS\nshouldn't\nshout/ZGMDRS\nshouter/M\nshove/MGDS\nshovel/MDSG\nshovelful/SM\nshow/JZGMDRS\nshowbiz/M\nshowboat/MDGS\nshowcase/MGDS\nshowdown/MS\nshower/MDG\nshowerproof\nshowery\nshowgirl/MS\nshowground/S\nshowily\nshowiness/M\nshowing/M\nshowjumping\nshowman/M\nshowmanship/M\nshowmen\nshown\nshowoff/SM\nshowpiece/SM\nshowplace/SM\nshowroom/MS\nshowstopper/MS\nshowstopping\nshowtime\nshowy/TRP\nshpt\nshrank\nshrapnel/M\nshred/MS\nshredded\nshredder/MS\nshredding\nshrew/MS\nshrewd/RYPT\nshrewdness/M\nshrewish\nshriek/MDSG\nshrift/M\nshrike/MS\nshrill/DRSPTG\nshrillness/M\nshrilly\nshrimp/MDRSZG\nshrine/MS\nshrink/MSBG\nshrinkage/M\nshrive/GDS\nshrivel/SGD\nshriven\nshroud/GMDS\nshrub/MS\nshrubbery/SM\nshrubby/RT\nshrug/MS\nshrugged\nshrugging\nshrunk/N\nshtick/MS\nshuck/GMDS\nshucks/S\nshudder/MDSG\nshuffle/AMGDS\nshuffleboard/SM\nshuffler/SM\nshun/S\nshunned\nshunning\nshunt/MSDG\nshush/DSG\nshut/S\nshutdown/SM\nshuteye/M\nshutoff/SM\nshutout/SM\nshutter/SMDG\nshutterbug/MS\nshutting\nshuttle/DSMG\nshuttlecock/GMDS\nshy/TGDRSMY\nshyer\nshyest\nshyness/M\nshyster/SM\nsibilant/SM\nsibling/SM\nsibyl/MS\nsibylline\nsic/S\nsicced\nsiccing\nsick/PXTGDNRYS\nsickbay/S\nsickbed/SM\nsicken/DG\nsickening/Y\nsickie/MS\nsickish\nsickle/MS\nsickly/RT\nsickness/MS\nsicko/MS\nsickout/SM\nsickroom/MS\nside's\nside/AGDS\nsidearm/SM\nsidebar/SM\nsideboard/SM\nsideburns/M\nsidecar/SM\nsidekick/SM\nsidelight/MS\nsideline/DSMG\nsidelong\nsideman/M\nsidemen\nsidepiece/MS\nsidereal\nsidesaddle/MS\nsideshow/MS\nsidesplitting\nsidestep/MS\nsidestepped\nsidestepping\nsidestroke/DSMG\nsideswipe/DSMG\nsidetrack/SMDG\nsidewalk/MS\nsidewall/MS\nsideways\nsidewinder/SM\nsiding/MS\nsidle/MGDS\nsiege/MS\nsienna/M\nsierra/MS\nsiesta/MS\nsieve/MGDS\nsift/ZGDRS\nsifted/U\nsifter/M\nsigh/GMD\nsighs\nsight/GMDYSJ\nsighting/M\nsightless\nsightly/UTR\nsightread\nsightseeing/M\nsightseer/MS\nsigma/MS\nsign's/C\nsign/AFCGDS\nsignage/M\nsignal/MDRYSZG\nsignaler/M\nsignalization/M\nsignalize/GDS\nsignalman/M\nsignalmen\nsignatory/SM\nsignature/MS\nsignboard/MS\nsigned/U\nsigner/CMS\nsignet/MS\nsignificance/IM\nsignificant/IY\nsignification/M\nsignify/XDSNG\nsigning's/C\nsignings\nsignor/FMS\nsignora/SM\nsignore\nsignori\nsignorina/MS\nsignorine\nsignpost/GSMD\nsilage/M\nsilence/DRSMZG\nsilencer/M\nsilent/MRYST\nsilhouette/DSMG\nsilica/M\nsilicate/MS\nsiliceous\nsilicon/SM\nsilicone/M\nsilicosis/M\nsilk/MNS\nsilkily\nsilkiness/M\nsilkscreen/SM\nsilkworm/MS\nsilky/TRP\nsill/MS\nsilliness/M\nsilly/TRSMP\nsilo/MS\nsilt/GMDS\nsilty/TR\nsilver/GMDS\nsilverfish/MS\nsilversmith/M\nsilversmiths\nsilverware/M\nsilvery\nsim/SM\nsimian/MS\nsimilar/Y\nsimilarity/ESM\nsimile/MS\nsimilitude/EM\nsimmer/GMDS\nsimonize/DSG\nsimony/M\nsimpatico\nsimper/GMDS\nsimpering/Y\nsimple/TRP\nsimpleminded\nsimpleness/M\nsimpleton/SM\nsimplex\nsimplicity/M\nsimplification/M\nsimplify/DSXNG\nsimplistic\nsimplistically\nsimply\nsimulacra\nsimulacrum/S\nsimulate/EDSGN\nsimulation/EM\nsimulations\nsimulator/EMS\nsimulcast/GMDS\nsimultaneity/M\nsimultaneous/Y\nsin/ASM\nsince\nsincere/IYT\nsincerer\nsincerity/IM\nsine/MS\nsinecure/MS\nsinew/MS\nsinewy\nsinful/PY\nsinfulness/M\nsing/BZGMDRYS\nsingalong/S\nsinge/MS\nsingeing\nsinger/M\nsinging/M\nsingle/PMGDS\nsingleness/M\nsingles/M\nsinglet/S\nsingleton/SM\nsingletree/SM\nsingsong/SMDG\nsingular/SMY\nsingularity/SM\nsinister\nsink/BZGMRS\nsinkable/U\nsinker/M\nsinkhole/SM\nsinless\nsinned\nsinner/MS\nsinning\nsinology\nsinuosity/M\nsinuous/Y\nsinus/MS\nsinusitis/M\nsinusoidal\nsip/SM\nsiphon/GMDS\nsipped\nsipper/SM\nsipping\nsir/SXMN\nsire/CMGDS\nsiren/M\nsirloin/SM\nsirocco/SM\nsirrah\nsirree/M\nsis/MS\nsisal/M\nsissified\nsissy/RSMT\nsister/ASM\nsisterhood/MS\nsisterliness/M\nsisterly/P\nsit/S\nsitar/SM\nsitarist/MS\nsitcom/SM\nsite/MGDS\nsitemap/SM\nsitter/SM\nsitting/SM\nsituate/DSXGN\nsituation/M\nsituational\nsix/MSH\nsixfold\nsixpence/MS\nsixshooter/M\nsixteen/SMH\nsixteenth/M\nsixteenths\nsixth/M\nsixths\nsixtieth/M\nsixtieths\nsixty/SMH\nsizable\nsize's\nsize/AGDS\nsizer\nsizing/M\nsizzle/DRSMZG\nska/M\nskate/MZGDRS\nskateboard/MDRSZG\nskateboarder/M\nskateboarding/M\nskater/M\nskating/M\nskedaddle/MGDS\nskeet/ZMR\nskein/MS\nskeletal\nskeleton/SM\nskeptic/SM\nskeptical/Y\nskepticism/M\nsketch/MDRSZG\nsketchbook/S\nsketcher/M\nsketchily\nsketchiness/M\nsketchpad/S\nsketchy/RTP\nskew/MDRZGS\nskewbald/S\nskewer/MDG\nski/SZGMDR\nskibob/S\nskid/MS\nskidded\nskidding\nskidpan/S\nskier/M\nskiff/SM\nskiffle\nskiing/M\nskill's\nskill/CSD\nskilled/U\nskillet/SM\nskillful/UY\nskillfulness/M\nskim/MS\nskimmed\nskimmer/SM\nskimming\nskimp/SDG\nskimpily\nskimpiness/M\nskimpy/RTP\nskin/MS\nskincare/M\nskinflint/MS\nskinful\nskinhead/MS\nskinless\nskinned\nskinniness/M\nskinning\nskinny/RMTP\nskint\nskintight\nskip/MS\nskipped\nskipper/SMDG\nskipping\nskirmish/ZGMDRS\nskirt/SMDG\nskit/MS\nskitter/GSD\nskittish/YP\nskittishness/M\nskittle/S\nskive/DRSZG\nskivvy/DSMG\nskoal/SM\nskua/S\nskulduggery/M\nskulk/SDRZG\nskulker/M\nskull/SM\nskullcap/MS\nskunk/SMDG\nsky/GSM\nskycap/SM\nskydive/DRSZG\nskydiver/M\nskydiving/M\nskyjack/JZGSDR\nskyjacker/M\nskyjacking/M\nskylark/SGMD\nskylight/MS\nskyline/SM\nskyrocket/GSMD\nskyscraper/SM\nskyward/S\nskywriter/SM\nskywriting/M\nslab/MS\nslabbed\nslabbing\nslack/PXZTGMDNRYS\nslacken/DG\nslacker/M\nslackness/M\nslacks/M\nslag/MS\nslagged\nslagging\nslagheap/S\nslain\nslake/GDS\nslalom/MSDG\nslam/MS\nslammed\nslammer/SM\nslamming\nslander/MZGDRS\nslanderer/M\nslanderous\nslang/M\nslangy/RT\nslant/MSDG\nslanting/Y\nslantwise\nslap/MS\nslapdash\nslaphappy\nslapped\nslapper/S\nslapping\nslapstick/M\nslash/MDRSZG\nslasher/M\nslat/MDGS\nslate/SM\nslather/SDG\nslatted\nslattern/SMY\nslaughter/MDRZGS\nslaughterer/M\nslaughterhouse/MS\nslave/DRSMZG\nslaveholder/MS\nslaver/MDG\nslavery/M\nslavish/PY\nslavishness/M\nslaw/M\nslay/DRZGJS\nslayer/M\nslaying/M\nsleaze/SM\nsleazebag/S\nsleazeball/S\nsleazily\nsleaziness/M\nsleazy/PRT\nsled/MS\nsledded\nsledder/SM\nsledding\nsledge/DSMG\nsledgehammer/GSMD\nsleek/SDRYTGP\nsleekness/M\nsleep/SMRZG\nsleeper/M\nsleepily\nsleepiness/M\nsleepless/PY\nsleeplessness/M\nsleepover/SM\nsleepwalk/ZGSDR\nsleepwalker/M\nsleepwalking/M\nsleepwear/M\nsleepy/RPT\nsleepyhead/MS\nsleet/SMDG\nsleety\nsleeve/DSM\nsleeveless\nsleigh/MDG\nsleighs\nsleight/SM\nslender/PRT\nslenderize/DSG\nslenderness/M\nslept\nsleuth/MG\nsleuths\nslew/MDGS\nslice/DRSMZG\nslicer/M\nslick/SMDRYZTGP\nslicker/M\nslickness/M\nslid\nslide/RSMZG\nslider/M\nslideshow/MS\nslight/SMDRYTGP\nslightness/M\nslim/PS\nslime/M\nsliminess/M\nslimline\nslimmed\nslimmer/S\nslimmest\nslimming/M\nslimness/M\nslimy/RTP\nsling/SMG\nslingback/S\nslingshot/SM\nslink/SG\nslinky/RT\nslip/MS\nslipcase/MS\nslipcover/MS\nslipknot/MS\nslippage/MS\nslipped\nslipper/SM\nslipperiness/M\nslippery/PRT\nslipping\nslippy\nslipshod\nslipstream/SM\nslipway/SM\nslit/MS\nslither/SGMD\nslithery\nslitter\nslitting\nsliver/GSMD\nslob/MS\nslobbed\nslobber/MDSG\nslobbery\nslobbing\nsloe/MS\nslog/MS\nslogan/SM\nsloganeering\nslogged\nslogging\nsloop/SM\nslop/MDGS\nslope/SM\nslopped\nsloppily\nsloppiness/M\nslopping\nsloppy/PTR\nslops/M\nslosh/DSG\nslot/MS\nsloth/M\nslothful/YP\nslothfulness/M\nsloths\nslotted\nslotting\nslouch/ZGMDRS\nsloucher/M\nslouchy/TR\nslough/GMD\nsloughs\nsloven/SMY\nslovenliness/M\nslovenly/PTR\nslow/DRYTGSP\nslowcoach/S\nslowdown/SM\nslowness/M\nslowpoke/SM\nsludge/M\nsludgy/RT\nslue/MGDS\nslug/MS\nsluggard/MS\nslugged\nslugger/SM\nslugging\nsluggish/PY\nsluggishness/M\nsluice/DSMG\nslum/MS\nslumber/GSMD\nslumberous\nslumdog/SM\nslumlord/MS\nslummed\nslummer\nslumming\nslummy/RT\nslump/SMDG\nslung\nslunk\nslur/MS\nslurp/SMDG\nslurred\nslurring\nslurry/M\nslush/M\nslushiness/M\nslushy/RPT\nslut/MS\nsluttish\nslutty/RT\nsly/TRY\nslyness/M\nsmack/SMDRZG\nsmacker/M\nsmall/SMRTP\nsmallholder/S\nsmallholding/S\nsmallish\nsmallness/M\nsmallpox/M\nsmarmy/RT\nsmart/SMDNRYXTGP\nsmarten/DG\nsmartness/M\nsmartphone/SM\nsmarts/M\nsmartwatch/MS\nsmarty/SM\nsmartypants/M\nsmash/MDRSZG\nsmasher/M\nsmashup/SM\nsmattering/MS\nsmear/SMDG\nsmeary/RT\nsmell/SMDG\nsmelliness/M\nsmelly/RPT\nsmelt/SMDRZG\nsmelter/M\nsmidgen/MS\nsmilax/M\nsmile/DSMG\nsmiley/SM\nsmiling/Y\nsmirch/GMDS\nsmirk/SMDG\nsmite/SG\nsmith/M\nsmithereens/M\nsmiths\nsmithy/SM\nsmitten\nsmock/SMDG\nsmocking/M\nsmog/MS\nsmoggy/RT\nsmoke/DRSMZG\nsmokehouse/MS\nsmokeless\nsmoker/M\nsmokescreen/SM\nsmokestack/SM\nsmokey\nsmokiness/M\nsmoking/M\nsmoky/RTP\nsmolder/SGMD\nsmooch/MDSG\nsmoochy\nsmooth/PDRYTG\nsmoothie/MS\nsmoothness/M\nsmooths\nsmorgasbord/SM\nsmote\nsmother/GSMD\nsmudge/DSMG\nsmudgy/TR\nsmug/YP\nsmugger\nsmuggest\nsmuggle/ZGDRS\nsmuggler/M\nsmuggling/M\nsmugness/M\nsmurf/S\nsmut/MS\nsmuttiness/M\nsmutty/TRP\nsnack/SMDG\nsnaffle/DSMG\nsnafu/SM\nsnag/MS\nsnagged\nsnagging\nsnail/SMDG\nsnake/DSMG\nsnakebite/MS\nsnakelike\nsnakeskin\nsnaky/RT\nsnap's\nsnap/US\nsnapdragon/SM\nsnapped/U\nsnapper/MS\nsnappily\nsnappiness/M\nsnapping/U\nsnappish/YP\nsnappishness/M\nsnappy/TRP\nsnapshot/SM\nsnare/DSMG\nsnarf/SDG\nsnark/S\nsnarky/TR\nsnarl's\nsnarl/USDG\nsnarling/Y\nsnarly/TR\nsnatch/ZGMDRS\nsnatcher/M\nsnazzily\nsnazzy/TR\nsneak/SMDRZG\nsneaker/M\nsneakily\nsneakiness/M\nsneaking/Y\nsneaky/TRP\nsneer/SJMDG\nsneering/Y\nsneeze/DSMG\nsnick/SDRZG\nsnicker/MDG\nsnide/RYT\nsniff/SMDRZG\nsniffer/M\nsniffle/DSMG\nsniffy/RT\nsnifter/SM\nsnip/MDRZGS\nsnipe/SM\nsniper/M\nsnipped\nsnippet/SM\nsnipping\nsnippy/RT\nsnips/M\nsnit/MS\nsnitch/MDSG\nsnivel/SMDRZG\nsniveler/M\nsnob/MS\nsnobbery/M\nsnobbish/PY\nsnobbishness/M\nsnobby/RT\nsnog/S\nsnogged\nsnogging\nsnood/SM\nsnooker/MDSG\nsnoop/SMDRZG\nsnooper/M\nsnoopy/TR\nsnoot/SM\nsnootily\nsnootiness/M\nsnooty/PTR\nsnooze/DSMG\nsnore/DRSMZG\nsnorer/M\nsnorkel/ZGMDRS\nsnorkeler/M\nsnorkeling/M\nsnort/SMDRZG\nsnorter/M\nsnot/MS\nsnottily\nsnottiness/M\nsnotty/TPR\nsnout/SM\nsnow/MDGS\nsnowball/GSMD\nsnowbank/SM\nsnowbird/SM\nsnowblower/MS\nsnowboard/ZGMDRS\nsnowboarder/M\nsnowboarding/M\nsnowbound\nsnowdrift/SM\nsnowdrop/SM\nsnowfall/SM\nsnowfield/SM\nsnowflake/SM\nsnowiness/M\nsnowline\nsnowman/M\nsnowmen\nsnowmobile/DSMG\nsnowplow/SGMD\nsnowshed\nsnowshoe/SM\nsnowshoeing\nsnowstorm/SM\nsnowsuit/SM\nsnowy/PRT\nsnub/MS\nsnubbed\nsnubbing\nsnuff/SMDRYZG\nsnuffbox/MS\nsnuffer/M\nsnuffle/MGDS\nsnug/MYSP\nsnugged\nsnugger\nsnuggest\nsnugging\nsnuggle/MGDS\nsnugness/M\nso\nsoak/MDGSJ\nsoaking/M\nsoap/MDGS\nsoapbox/MS\nsoapiness/M\nsoapstone/M\nsoapsuds/M\nsoapy/RPT\nsoar/MDGS\nsob/SM\nsobbed\nsobbing/Y\nsober/SDRYPTG\nsoberness/M\nsobriety/IM\nsobriquet/SM\nsoc\nsoccer/M\nsociability/M\nsociable/SM\nsociably\nsocial/SMY\nsocialism/M\nsocialist/SM\nsocialistic\nsocialite/SM\nsocialization/M\nsocialize/DSG\nsocietal\nsociety/SM\nsocioeconomic\nsocioeconomically\nsociological/Y\nsociologist/SM\nsociology/M\nsociopath/M\nsociopaths\nsociopolitical\nsock/MDGS\nsocket/SM\nsockeye/SM\nsod/SM\nsoda/MS\nsodded\nsodden/Y\nsodding\nsodium/M\nsodomite/MS\nsodomize/GDS\nsodomy/M\nsoever\nsofa/MS\nsoft/NRYXTP\nsoftback\nsoftball/MS\nsoftbound\nsoftcover\nsoften/DRZG\nsoftener/M\nsofthearted\nsoftness/M\nsoftware/M\nsoftwood/SM\nsofty/SM\nsoggily\nsogginess/M\nsoggy/RTP\nsoigne\nsoignee\nsoil/MDGS\nsoiled/U\nsoiree/SM\nsojourn/ZGMDRS\nsojourner/M\nsol/SM\nsolace/DSMG\nsolar\nsolaria\nsolarium/M\nsold\nsolder/ZGSMDR\nsolderer/M\nsoldier/MDYSG\nsoldiery/M\nsole/FSDGM\nsolecism/SM\nsolely\nsolemn/PTRY\nsolemness/M\nsolemnify/DSG\nsolemnity/SM\nsolemnization/M\nsolemnize/DSG\nsolemnness/M\nsolenoid/MS\nsolicit/GDS\nsolicitation/SM\nsolicited/U\nsolicitor/SM\nsolicitous/PY\nsolicitousness/M\nsolicitude/M\nsolid/PSMRYT\nsolidarity/M\nsolidi\nsolidification/M\nsolidify/DSNG\nsolidity/M\nsolidness/M\nsolidus/M\nsoliloquies\nsoliloquize/DSG\nsoliloquy/M\nsolipsism/M\nsolipsistic\nsolitaire/MS\nsolitariness/M\nsolitary/SMP\nsolitude/M\nsolo/MDGS\nsoloist/MS\nsolstice/MS\nsolubility/IM\nsoluble/MS\nsolute's\nsolute/AXN\nsolutes\nsolution's/AE\nsolvable/IU\nsolve/EADSG\nsolved/U\nsolvency/IM\nsolvent/IMS\nsolver/SM\nsomatic\nsomatosensory\nsomber/PY\nsomberness/M\nsombrero/MS\nsome\nsomebody/SM\nsomeday\nsomehow\nsomeone/MS\nsomeplace\nsomersault/MDGS\nsomerset/SM\nsomersetted\nsomersetting\nsomething/SM\nsometime/S\nsomeway/S\nsomewhat/S\nsomewhere\nsomnambulism/M\nsomnambulist/SM\nsomnolence/M\nsomnolent\nson/SM\nsonar/SM\nsonata/SM\nsonatina/SM\nsong/MS\nsongbird/SM\nsongbook/SM\nsongfest/SM\nsongster/MS\nsongstress/MS\nsongwriter/SM\nsongwriting\nsonic\nsonnet/SM\nsonny/SM\nsonogram/SM\nsonority/M\nsonorous/YP\nsonorousness/M\nsonsofbitches\nsoon/RT\nsoot/M\nsooth/MDRSZG\nsoothe\nsoother/M\nsoothing/Y\nsoothsayer/MS\nsoothsaying/M\nsooty/RT\nsop/SM\nsoph\nsophism/M\nsophist/MS\nsophistic\nsophistical\nsophisticate/DSMGN\nsophisticated/U\nsophistication/M\nsophistry/SM\nsophomore/MS\nsophomoric\nsoporific/MS\nsoporifically\nsopped\nsopping\nsoppy/RT\nsoprano/MS\nsorbet/SM\nsorcerer/MS\nsorceress/MS\nsorcery/M\nsordid/PY\nsordidness/M\nsore/MYTRSP\nsorehead/MS\nsoreness/M\nsorghum/M\nsorority/SM\nsorrel/SM\nsorrily\nsorriness/M\nsorrow/SMDG\nsorrowful/YP\nsorrowfulness/M\nsorry/RTP\nsort/FASGDM\nsorta\nsorted/U\nsorter/SM\nsortie/DSM\nsortieing\nsot/SM\nsottish\nsou'wester\nsou/SMH\nsouffle/SM\nsough/MDG\nsoughs\nsought/U\nsouk/S\nsoul/MS\nsoulful/YP\nsoulfulness/M\nsoulless/YP\nsoulmate/SM\nsound/JPSMDRYZTG\nsoundalike/S\nsoundbar/S\nsoundbite/S\nsoundboard/MS\nsoundcheck/S\nsounder/M\nsounding/M\nsoundless/Y\nsoundness/UM\nsoundproof/GDS\nsoundproofing/M\nsoundscape/S\nsoundtrack/SM\nsoup/MDGS\nsoupcon/MS\nsoupy/RT\nsour/MDRYTGSP\nsource/ADSMG\nsourdough/M\nsourdoughs\nsourish\nsourness/M\nsourpuss/MS\nsousaphone/MS\nsouse/DSMG\nsouth/M\nsouthbound\nsoutheast/ZMR\nsoutheaster/MY\nsoutheastern\nsoutheastward/S\nsoutherly/SM\nsouthern/SZMR\nsoutherner/M\nsouthernmost\nsouthpaw/SM\nsouthward/MS\nsouthwest/ZMR\nsouthwester/MY\nsouthwestern\nsouthwestward/S\nsouvenir/SM\nsovereign/SM\nsovereignty/M\nsoviet/SM\nsow's\nsow/ASGD\nsower/SM\nsown/A\nsoy/M\nsoybean/MS\nsozzled\nspa/SM\nspace/DRSMZG\nspacecraft/MS\nspaceflight/MS\nspaceman/M\nspacemen\nspaceport/SM\nspacer/M\nspaceship/SM\nspacesuit/SM\nspacetime\nspacewalk/SGMD\nspacewoman/M\nspacewomen\nspacey\nspacial\nspacier\nspaciest\nspaciness/M\nspacing/M\nspacious/YP\nspaciousness/M\nspade/DSMG\nspadeful/MS\nspadework/M\nspadices\nspadix/M\nspaghetti/M\nspake\nspam/MS\nspammed\nspammer/SM\nspamming\nspan/MS\nspandex/M\nspangle/DSMG\nspangly\nspaniel/SM\nspank/SMDGJ\nspanking/M\nspanned\nspanner/SM\nspanning\nspar/MS\nspare/DRSMYTGP\nspareness/M\nspareribs/M\nsparing/UY\nspark/SMDYG\nsparkle/DRSMZG\nsparkler/M\nsparky/RT\nsparred\nsparring\nsparrow/SM\nsparrowhawk/S\nsparse/RYTP\nsparseness/M\nsparsity/M\nspartan\nspasm/SM\nspasmodic\nspasmodically\nspastic/SM\nspat/MS\nspate/SM\nspathe/SM\nspatial/Y\nspatted\nspatter/SGMD\nspatting\nspatula/SM\nspavin/MD\nspawn/SMDG\nspay/DGS\nspeak/SRZGJ\nspeakeasy/SM\nspeaker/M\nspeakerphone/S\nspear/SMDG\nspearfish/GMDS\nspeargun\nspearhead/GMDS\nspearmint/M\nspec/MS\nspecial/SMY\nspecialism/S\nspecialist/MS\nspecialization/MS\nspecialize/GDS\nspecialty/SM\nspecie/SM\nspecies/M\nspecif\nspecifiable\nspecific/MS\nspecifically\nspecification/M\nspecificity/M\nspecified/U\nspecify/XNZDRSG\nspecimen/SM\nspecious/YP\nspeciousness/M\nspeck/SMDG\nspeckle/MGDS\nspecs/M\nspectacle/SM\nspectacles/M\nspectacular/MYS\nspectate/DSG\nspectator/SM\nspecter/AMS\nspectra\nspectral\nspectrometer/MS\nspectroscope/MS\nspectroscopic\nspectroscopy/M\nspectrum/M\nspeculate/DSXGNV\nspeculation/M\nspeculative/Y\nspeculator/MS\nsped\nspeech/MS\nspeechify/DSG\nspeechless/YP\nspeechlessness/M\nspeechwriter/S\nspeed/SMRZG\nspeedboat/SM\nspeeder/M\nspeedily\nspeediness/M\nspeeding/M\nspeedometer/MS\nspeedster/SM\nspeedup/MS\nspeedway/SM\nspeedwell/M\nspeedy/TPR\nspeleological\nspeleologist/MS\nspeleology/M\nspell/JSMDRZG\nspellbind/ZGRS\nspellbinder/M\nspellbound\nspellcheck/MDRZGS\nspellchecker/M\nspelldown/SM\nspeller/M\nspelling/M\nspelunker/MS\nspelunking/M\nspend/BSRZG\nspender/M\nspending/M\nspendthrift/MS\nspent/U\nsperm/SM\nspermatozoa\nspermatozoon/M\nspermicidal\nspermicide/MS\nspew/MDRZGS\nspewer/M\nsphagnum/MS\nsphere/SM\nspherical/Y\nspheroid/SM\nspheroidal\nsphincter/MS\nsphinx/MS\nspic/S\nspice/DSMG\nspicily\nspiciness/M\nspicule/MS\nspicy/PRT\nspider/SM\nspiderweb/MS\nspidery\nspiel/SMDG\nspiff/SDG\nspiffy/TR\nspigot/SM\nspike/DSMG\nspikiness/M\nspiky/RPT\nspill/SMDG\nspillage/MS\nspillover/SM\nspillway/MS\nspin/MS\nspinach/M\nspinal/SMY\nspindle/MGDS\nspindly/TR\nspine/SM\nspineless/YP\nspinet/SM\nspinless\nspinnaker/SM\nspinner/MS\nspinneret/SM\nspinney/S\nspinning/M\nspinster/SM\nspinsterhood/M\nspinsterish\nspiny/RT\nspiracle/SM\nspiral/SGMDY\nspire's\nspire/IFAS\nspirea/SM\nspirit's\nspirit/ISGD\nspirited/Y\nspiritless\nspiritual/MYS\nspiritualism/M\nspiritualist/MS\nspiritualistic\nspirituality/M\nspirituous\nspirochete/SM\nspiry\nspit/MDGS\nspitball/SM\nspite/ASM\nspiteful/PY\nspitefuller\nspitefullest\nspitefulness/M\nspitfire/SM\nspitted\nspitting\nspittle/M\nspittoon/MS\nspiv/S\nsplanchnic\nsplash/GMDS\nsplashdown/MS\nsplashily\nsplashiness/M\nsplashy/RTP\nsplat/SM\nsplatted\nsplatter/GSMD\nsplatting\nsplay/SMDG\nsplayfeet\nsplayfoot/MD\nspleen/SM\nsplendid/RYT\nsplendor/MS\nsplendorous\nsplenectomy\nsplenetic\nsplice/DRSMZG\nsplicer/M\nspliff/S\nspline/S\nsplint/SZGMDR\nsplinter/MDG\nsplintery\nsplit/SM\nsplitting/MS\nsplodge/S\nsplosh/DSG\nsplotch/MDSG\nsplotchy/TR\nsplurge/DSMG\nsplutter/GMDS\nspoil's\nspoil/CSDRZG\nspoilage/M\nspoiled/U\nspoiler/CM\nspoilsport/MS\nspoke/SM\nspoken/U\nspokesman/M\nspokesmen\nspokespeople\nspokesperson/MS\nspokeswoman/M\nspokeswomen\nspoliation/CM\nsponge/DRSMZG\nspongecake/M\nsponger/M\nsponginess/M\nspongy/RPT\nsponsor/MDGS\nsponsorship/M\nspontaneity/M\nspontaneous/Y\nspoof/SMDG\nspook/SMDG\nspookiness/M\nspooky/RPT\nspool/SMDG\nspoon/SMDG\nspoonbill/MS\nspoonerism/MS\nspoonful/SM\nspoor/SMDG\nsporadic\nsporadically\nspore/DSMG\nsporran/S\nsport/SMDGV\nsportiness/M\nsporting/Y\nsportive/Y\nsportscast/MRZGS\nsportscaster/M\nsportsman/M\nsportsmanlike/U\nsportsmanship/M\nsportsmen\nsportspeople\nsportsperson\nsportswear/M\nsportswoman/M\nsportswomen\nsportswriter/SM\nsporty/TPR\nspot/CMS\nspotless/PY\nspotlessness/M\nspotlight/GSMD\nspotlit\nspotted\nspotter/MS\nspottily\nspottiness/M\nspotting\nspotty/TPR\nspousal/MS\nspouse/SM\nspout/SMDG\nsprain/GSMD\nsprang\nsprat/SM\nsprawl/GSMD\nspray's\nspray/ASDG\nsprayer/MS\nspread/ZGBSMR\nspreadeagled\nspreader/M\nspreadsheet/MS\nspree/DSM\nspreeing\nsprig/SM\nsprigged\nsprightliness/M\nsprightly/RTP\nspring/GSM\nspringboard/MS\nspringbok/MS\nspringily\nspringiness/M\nspringlike\nspringtime/M\nspringy/RPT\nsprinkle/DRSJMZG\nsprinkler/M\nsprinkling/M\nsprint/ZGSMDR\nsprinter/M\nsprite/SM\nspritz/ZGMDRS\nspritzer/M\nsprocket/MS\nsprog/S\nsprout/GSMD\nspruce/DRSPMYTG\nspruceness/M\nsprung\nspry/RYT\nspryness/M\nspud/MS\nspume/DSMG\nspumoni/M\nspumy\nspun\nspunk/SM\nspunky/TR\nspur/MS\nspurge/M\nspurious/PY\nspuriousness/M\nspurn/SDG\nspurred\nspurring\nspurt/SMDG\nsputa\nsputnik/MS\nsputter/MDGS\nsputum/M\nspy/GDSM\nspyglass/MS\nspymaster/S\nspyware/M\nsq\nsqq\nsquab/SM\nsquabble/MZGDRS\nsquabbler/M\nsquad/SM\nsquadron/MS\nsqualid/PTRY\nsqualidness/M\nsquall/SGMD\nsqually\nsqualor/M\nsquamous\nsquander/GDS\nsquare/PDRSMYTG\nsquareness/M\nsquarish\nsquash/GMDS\nsquashy/TR\nsquat/SMP\nsquatness/M\nsquatted\nsquatter/MS\nsquattest\nsquatting\nsquaw/SM\nsquawk/SZGMDR\nsquawker/M\nsqueak/SZGMDR\nsqueaker/M\nsqueakily\nsqueakiness/M\nsqueaky/TRP\nsqueal/SZGMDR\nsquealer/M\nsqueamish/PY\nsqueamishness/M\nsqueegee/MDS\nsqueegeeing\nsqueeze/BMZGDRS\nsqueezebox/S\nsqueezer/M\nsquelch/GMDS\nsquelchy\nsquib/SM\nsquid/SM\nsquidgy\nsquiffy\nsquiggle/DSMG\nsquiggly\nsquint/STGMDR\nsquire/DSMG\nsquirm/SGMD\nsquirmy/RT\nsquirrel/SGMD\nsquirt/SGMD\nsquish/GMDS\nsquishy/RT\nsriracha\nssh\nst\nstab/MYS\nstabbed\nstabber/MS\nstabbing/MS\nstability/IM\nstabilization/CM\nstabilize/CDSG\nstabilizer/MS\nstable/DRSMTG\nstableman/M\nstablemate/S\nstablemen\nstably/U\nstaccato/MS\nstack/SMDG\nstadium/MS\nstaff's\nstaff/ASDG\nstaffer/MS\nstaffing/M\nstag/MDGSJ\nstage/SM\nstagecoach/MS\nstagecraft/M\nstagehand/MS\nstagestruck\nstagflation/M\nstagger/MDGS\nstaggering/Y\nstaging/M\nstagnancy/M\nstagnant/Y\nstagnate/DSGN\nstagnation/M\nstagy/RT\nstaid/PRYT\nstaidness/M\nstain/SMDG\nstained/U\nstainless/M\nstair/SM\nstaircase/MS\nstairway/MS\nstairwell/SM\nstake/DSMG\nstakeholder/MS\nstakeout/SM\nstalactite/MS\nstalagmite/MS\nstale/DRSTGP\nstalemate/DSMG\nstaleness/M\nstalk/SMDRJZG\nstalker/M\nstalking/M\nstall's\nstall/ISDG\nstallholder/S\nstallion/MS\nstalwart/MYS\nstamen/SM\nstamina/M\nstammer/ZGMDRS\nstammerer/M\nstammering/Y\nstamp/SMDRZG\nstampede/MGDS\nstamper/M\nstance/ISM\nstanch/TGDRS\nstanchion/SM\nstand/SMRJZG\nstandalone\nstandard/MS\nstandardization/M\nstandardize/DSG\nstandby/M\nstandbys\nstandee/MS\nstander/M\nstanding/M\nstandoff/MS\nstandoffish\nstandout/MS\nstandpipe/SM\nstandpoint/MS\nstandstill/MS\nstank\nstanza/SM\nstaph/M\nstaphylococcal\nstaphylococci\nstaphylococcus/M\nstaple/DRSMZG\nstapler/M\nstar/MDRZGS\nstarboard/M\nstarburst/S\nstarch/GMDS\nstarchily\nstarchiness/M\nstarchy/PTR\nstardom/M\nstardust/M\nstare/SM\nstarer/M\nstarfish/MS\nstarfruit\nstargaze/DRSZG\nstargazer/M\nstark/RYPZT\nstarkness/M\nstarless\nstarlet/MS\nstarlight/M\nstarling/SM\nstarlit\nstarred\nstarring\nstarry/TR\nstarstruck\nstart/ASMDG\nstarter/MS\nstartle/GDS\nstartling/Y\nstartup/MS\nstarvation/M\nstarve/DSJG\nstarveling/MS\nstash/MDSG\nstasis\nstat/MS\nstate/DRSMYGNLX\nstatecraft/M\nstated/U\nstatehood/M\nstatehouse/MS\nstateless/P\nstatelessness/M\nstateliness/M\nstately/PRT\nstatement/AMS\nstatemented\nstatementing\nstateroom/MS\nstateside\nstatesman/M\nstatesmanlike\nstatesmanship/M\nstatesmen\nstateswoman/M\nstateswomen\nstatewide\nstatic/SM\nstatically\nstation/MDRZG\nstationary\nstationer/M\nstationery/M\nstationmaster/S\nstatistic/MS\nstatistical/Y\nstatistician/SM\nstatuary/M\nstatue/SM\nstatuesque\nstatuette/MS\nstature/MS\nstatus/MS\nstatute/MS\nstatutorily\nstatutory\nstaunch/PDRSYTG\nstaunchness/M\nstave/DSMG\nstay/MDRZGS\nstd\nstdio\nstead/SM\nsteadfast/YP\nsteadfastness/M\nsteadily/U\nsteadiness/UM\nsteady/TGPDRSM\nsteak/SM\nsteakhouse/SM\nsteal/SMHG\nstealth/M\nstealthily\nstealthiness/M\nstealthy/TPR\nsteam/SMDRZG\nsteamboat/MS\nsteamer/M\nsteamfitter/SM\nsteamfitting/M\nsteaminess/M\nsteampunk\nsteamroll/ZGDRS\nsteamroller/MDG\nsteamship/MS\nsteamy/TPR\nsteed/SM\nsteel/SMDG\nsteeliness/M\nsteelmaker/S\nsteelworker/SM\nsteelworks/M\nsteely/PTR\nsteelyard/SM\nsteep/SMDNRYPXTG\nsteepen/GD\nsteeple/MS\nsteeplechase/MS\nsteeplejack/SM\nsteepness/M\nsteer/SMDBG\nsteerage/M\nsteering/M\nsteersman/M\nsteersmen\nstegosauri\nstegosaurus/MS\nstein/SM\nstellar\nstem/MS\nstemless\nstemmed\nstemming\nstemware/M\nstench/MS\nstencil/GMDS\nsteno/SM\nstenographer/SM\nstenographic\nstenography/M\nstenosis\nstent/SM\nstentorian\nstep/IMS\nstepbrother/SM\nstepchild/M\nstepchildren/M\nstepdad/MS\nstepdaughter/SM\nstepfather/SM\nstepladder/MS\nstepmom/MS\nstepmother/SM\nstepparent/SM\nsteppe/DRSMZG\nstepper/M\nsteppingstone/SM\nstepsister/MS\nstepson/MS\nstereo/SM\nstereophonic\nstereoscope/MS\nstereoscopic\nstereotype/DSMG\nstereotypical\nsterile\nsterility/M\nsterilization/SM\nsterilize/DRSZG\nsterilizer/M\nsterling/M\nstern/SMRYPT\nsternness/M\nsternum/MS\nsteroid/MS\nsteroidal\nstertorous\nstet/S\nstethoscope/MS\nstetson/MS\nstetted\nstetting\nstevedore/SM\nstew/MDGS\nsteward/GMDS\nstewardess/MS\nstewardship/M\nstick/SMRZG\nsticker/M\nstickily\nstickiness/M\nstickleback/SM\nstickler/MS\nstickpin/MS\nstickup/MS\nsticky/PTRSM\nstiff/SMDNRYPXTG\nstiffen/ZGDR\nstiffener/M\nstiffening/M\nstiffness/M\nstifle/DSJG\nstifling/Y\nstigma/SM\nstigmata\nstigmatic\nstigmatization/M\nstigmatize/GDS\nstile/SM\nstiletto/SM\nstill's\nstill/ITGSD\nstillbirth/M\nstillbirths\nstillborn\nstiller\nstillness/M\nstilt/SMD\nstilted/Y\nstimulant/SM\nstimulate/DSGNV\nstimulation/M\nstimuli\nstimulus/M\nsting/ZGSMR\nstinger/M\nstingily\nstinginess/M\nstingray/SM\nstingy/RTP\nstink/ZGSMR\nstinkbug/SM\nstinker/M\nstinky/RT\nstint/GSMD\nstipend/SM\nstipendiary/S\nstipple/DSMG\nstippling/M\nstipulate/XDSGN\nstipulation/M\nstir/MS\nstirred\nstirrer/SM\nstirring/SY\nstirrup/SM\nstitch's\nstitch/ADSG\nstitchery/M\nstitching/M\nstoat/SM\nstochastic\nstock's\nstock/AGSD\nstockade/DSMG\nstockbreeder/MS\nstockbroker/SM\nstockbroking/M\nstockholder/SM\nstockily\nstockiness/M\nstockinette/M\nstocking/SM\nstockist/S\nstockpile/MGDS\nstockpot/SM\nstockroom/MS\nstocktaking/M\nstocky/RTP\nstockyard/MS\nstodge\nstodgily\nstodginess/M\nstodgy/RTP\nstogie/MS\nstoic/SM\nstoical/Y\nstoicism/M\nstoke/DRSZG\nstoker/M\nstole/SM\nstolen\nstolid/RYTP\nstolidity/M\nstolidness/M\nstolon/MS\nstomach/MDRZG\nstomachache/SM\nstomacher/M\nstomachs\nstomp/GSMD\nstone/DRSMZG\nstonemason/MS\nstoner/M\nstonewall/GSD\nstoneware/M\nstonewashed\nstonework/M\nstonily\nstoniness/M\nstonkered\nstonking\nstony/TRP\nstood\nstooge/MS\nstool/SM\nstoop/GSMD\nstop's\nstop/US\nstopcock/SM\nstopgap/SM\nstoplight/MS\nstopover/MS\nstoppable/U\nstoppage/MS\nstopped/U\nstopper/GSMD\nstopping/U\nstopple/DSMG\nstopwatch/MS\nstorage/M\nstore's\nstore/ADSG\nstorefront/MS\nstorehouse/MS\nstorekeeper/SM\nstoreroom/SM\nstork/SM\nstorm/GSMD\nstormily\nstorminess/M\nstormy/RPT\nstory/DSM\nstoryboard/MS\nstorybook/SM\nstoryteller/MS\nstorytelling/M\nstoup/SM\nstout/TSMRYP\nstouthearted\nstoutness/M\nstove/SM\nstovepipe/SM\nstow/DGS\nstowage/M\nstowaway/MS\nstraddle/DRSMZG\nstraddler/M\nstrafe/MGDS\nstraggle/DRSZG\nstraggler/M\nstraggly/TR\nstraight/SPXTMNRY\nstraightaway/SM\nstraightedge/SM\nstraighten/ZGDR\nstraightener/M\nstraightforward/YPS\nstraightforwardness/M\nstraightness/M\nstraightway\nstrain's\nstrain/FADSG\nstrainer/ASM\nstrait/MNSX\nstraiten/GD\nstraitjacket/SGMD\nstraitlaced\nstrand/MDSG\nstrange/PRYZT\nstrangeness/M\nstranger/M\nstrangle/ZGDRS\nstranglehold/SM\nstrangler/M\nstrangulate/GNDS\nstrangulation/M\nstrap's\nstrap/US\nstrapless/MS\nstrapped/U\nstrapping/M\nstrata\nstratagem/SM\nstrategic/S\nstrategical/Y\nstrategics/M\nstrategist/SM\nstrategy/SM\nstrati\nstratification/M\nstratify/DSGN\nstratosphere/SM\nstratospheric\nstratum/M\nstratus/M\nstraw/GSMD\nstrawberry/SM\nstray/GSMD\nstreak/MDRSZG\nstreaker/M\nstreaky/TR\nstream/MDRSZG\nstreamer/M\nstreamline/DSG\nstreet/MS\nstreetcar/MS\nstreetlamp/S\nstreetlight/SM\nstreetwalker/SM\nstreetwise\nstrength/M\nstrengthen/AGDS\nstrengthener/MS\nstrengths\nstrenuous/PY\nstrenuousness/M\nstrep/M\nstreptococcal\nstreptococci\nstreptococcus/M\nstreptomycin/M\nstress/MDSG\nstressed/U\nstressful\nstressors\nstretch/BZGMDRS\nstretcher/MDG\nstretchmarks\nstretchy/TR\nstrew/GSDH\nstrewn\nstria/M\nstriae\nstriated\nstriation/MS\nstricken\nstrict/RYPT\nstrictness/M\nstricture/SM\nstridden\nstride/MGS\nstridency/M\nstrident/Y\nstrife/M\nstrike/MZGRSJ\nstrikebound\nstrikebreaker/SM\nstrikebreaking\nstrikeout/MS\nstriker/M\nstriking/Y\nstring/MDRSZG\nstringency/M\nstringent/Y\nstringer/M\nstringiness/M\nstringy/PTR\nstrip/GSMD\nstripe/MS\nstripey\nstripling/MS\nstripped\nstripper/MS\nstripping\nstriptease/MZGDRS\nstripteaser/M\nstripy\nstrive/GS\nstriven\nstrobe/MS\nstroboscope/MS\nstroboscopic\nstrode\nstroke/MGDS\nstroll/MDRSZG\nstroller/M\nstrong/RYT\nstrongbox/MS\nstronghold/MS\nstrongman/M\nstrongmen\nstrongroom/S\nstrontium/M\nstrop/SM\nstrophe/SM\nstrophic\nstropped\nstroppily\nstropping\nstroppy/TRP\nstrove\nstruck\nstructural/Y\nstructuralism\nstructuralist/S\nstructure's\nstructure/AGDS\nstructured/U\nstrudel/SM\nstruggle/MGDS\nstrum/SM\nstrummed\nstrumming\nstrumpet/MS\nstrung/UA\nstrut/SM\nstrutted\nstrutting\nstrychnine/M\nstub/MS\nstubbed\nstubbing\nstubble/M\nstubbly\nstubborn/RYPT\nstubbornness/M\nstubby/RT\nstucco/MDG\nstuccoes\nstuck/U\nstud/MYS\nstudbook/MS\nstudded\nstudding/M\nstudent/SM\nstudentship/S\nstudied/U\nstudiedly\nstudio/MS\nstudious/PY\nstudiousness/M\nstudly/RT\nstudy's\nstudy/AGDS\nstuff/GSMDJ\nstuffily\nstuffiness/M\nstuffing/M\nstuffy/RPT\nstultification/M\nstultify/DSNG\nstumble/DRSMZG\nstumbler/M\nstump/GSMD\nstumpy/TR\nstun/S\nstung\nstunk\nstunned\nstunner/S\nstunning/Y\nstunt/GSMD\nstuntman\nstuntmen\nstupefaction/M\nstupefy/DSG\nstupendous/Y\nstupid/TMRYS\nstupidity/SM\nstupor/MS\nsturdily\nsturdiness/M\nsturdy/TRP\nsturgeon/SM\nstutter/MDRSZG\nstutterer/M\nsty/SM\nstyle's\nstyle/ADSG\nstyli\nstylish/PY\nstylishness/M\nstylist/SM\nstylistic/S\nstylistically\nstylize/DSG\nstylus/MS\nstymie/MDS\nstymieing\nstyptic/SM\nsuasion/EM\nsuave/RYTP\nsuaveness/M\nsuavity/M\nsub/SM\nsubaltern/MS\nsubaqua\nsubarctic\nsubarea/MS\nsubatomic\nsubbasement/SM\nsubbed\nsubbing\nsubbranch/MS\nsubcategory/SM\nsubclass\nsubcommittee/SM\nsubcompact/SM\nsubconscious/PMY\nsubconsciousness/M\nsubcontinent/SM\nsubcontinental\nsubcontract/MDSG\nsubcontractor/MS\nsubculture/MS\nsubcutaneous/Y\nsubdivide/GDS\nsubdivision/SM\nsubdomain/MS\nsubdominant\nsubdue/DSG\nsubeditor/S\nsubfamily/SM\nsubfreezing\nsubgroup/MS\nsubhead/GJMS\nsubheading/M\nsubhuman/MS\nsubj\nsubject/GVMDS\nsubjection/M\nsubjective/Y\nsubjectivity/M\nsubjoin/GDS\nsubjugate/GNDS\nsubjugation/M\nsubjunctive/SM\nsublease/MGDS\nsublet/SM\nsubletting\nsublieutenant/S\nsublimate/GNDS\nsublimation/M\nsublime/YTGDRS\nsubliminal/Y\nsublimity/M\nsublingual\nsubmarginal\nsubmarine/MZRS\nsubmariner/M\nsubmerge/GDS\nsubmergence/M\nsubmerse/GNDS\nsubmersible/MS\nsubmersion/M\nsubmicroscopic\nsubmission/MS\nsubmissive/PY\nsubmissiveness/M\nsubmit/AS\nsubmitted/A\nsubmitter\nsubmitting/A\nsubnormal\nsuborbital\nsuborder/MS\nsubordinate/DSMGN\nsubordination/IM\nsuborn/SGD\nsubornation/M\nsubpar\nsubparagraph\nsubpart\nsubplot/MS\nsubpoena/GMDS\nsubprime\nsubprofessional/SM\nsubprogram/S\nsubroutine/SM\nsubscribe/UASDG\nsubscriber/MS\nsubscript/MS\nsubscription/MS\nsubsection/MS\nsubsequent/Y\nsubservience/M\nsubservient/Y\nsubset/SM\nsubside/GDS\nsubsidence/M\nsubsidiarity\nsubsidiary/SM\nsubsidization/M\nsubsidize/ZGDRS\nsubsidizer/M\nsubsidy/SM\nsubsist/SDG\nsubsistence/M\nsubsoil/M\nsubsonic\nsubspace\nsubspecies/M\nsubstance/SM\nsubstandard\nsubstantial/IY\nsubstantiate/GNDSX\nsubstantiated/U\nsubstantiation/FM\nsubstantive/SMY\nsubstation/MS\nsubstituent\nsubstitute/XMGNDS\nsubstitution/M\nsubstrata\nsubstrate/MS\nsubstratum/M\nsubstructure/SM\nsubsume/DSG\nsubsumption\nsubsurface/M\nsubsystem/SM\nsubteen/SM\nsubtenancy/M\nsubtenant/SM\nsubtend/SDG\nsubterfuge/SM\nsubterranean\nsubtext/SM\nsubtitle/DSMG\nsubtle/TR\nsubtlety/SM\nsubtly\nsubtopic/SM\nsubtotal/SGMD\nsubtract/GSD\nsubtraction/SM\nsubtrahend/SM\nsubtropic/S\nsubtropical\nsubtropics/M\nsuburb/MS\nsuburban/SM\nsuburbanite/SM\nsuburbia/M\nsubvention/SM\nsubversion/M\nsubversive/SPMY\nsubversiveness/M\nsubvert/SDG\nsubway/MS\nsubzero\nsucceed/GDS\nsuccess/VMS\nsuccessful/UY\nsuccession/SM\nsuccessive/Y\nsuccessor/SM\nsuccinct/RYTP\nsuccinctness/M\nsuccor/SGMD\nsuccotash/M\nsuccubi\nsuccubus\nsucculence/M\nsucculency/M\nsucculent/SM\nsuccumb/GDS\nsuch\nsuchlike\nsuck/MDRZGS\nsucker/GMD\nsuckle/DSJG\nsuckling/M\nsucrose/M\nsuction/SMDG\nsudden/PY\nsuddenness/M\nsuds/M\nsudsy/TR\nsue/DSG\nsuede/M\nsuet/M\nsuety\nsuffer/DRZGSJ\nsufferance/M\nsufferer/M\nsuffering/M\nsuffice/DSG\nsufficiency/IM\nsufficient/IY\nsuffix/MDSG\nsuffixation/M\nsuffocate/GNDS\nsuffocation/M\nsuffragan/MS\nsuffrage/M\nsuffragette/SM\nsuffragist/MS\nsuffuse/DSGN\nsuffusion/M\nsugar/GSMD\nsugarcane/M\nsugarcoat/GDS\nsugarless\nsugarplum/MS\nsugary/RT\nsuggest/GVSDR\nsuggestibility/M\nsuggestible\nsuggestion/SM\nsuggestive/YP\nsuggestiveness/M\nsuicidal\nsuicide/SM\nsuit/BMDGS\nsuitability/UM\nsuitableness/M\nsuitably/U\nsuitcase/SM\nsuite/SM\nsuited/U\nsuiting/M\nsuitor/MS\nsukiyaki/M\nsulfa/M\nsulfate/SM\nsulfide/SM\nsulfonamides\nsulfur/MDSG\nsulfuric\nsulfurous\nsulk/MDGS\nsulkily\nsulkiness/M\nsulky/TRSMP\nsullen/RYPT\nsullenness/M\nsullied/U\nsully/GDS\nsultan/MS\nsultana/SM\nsultanate/MS\nsultrily\nsultriness/M\nsultry/RPT\nsum/SM\nsumac/M\nsummarily\nsummarize/GDS\nsummary/SM\nsummat\nsummation/FMS\nsummed\nsummer/MDSG\nsummerhouse/SM\nsummertime/M\nsummery\nsumming\nsummit/MS\nsummitry/M\nsummon/DRSZG\nsummoner/M\nsummons/GMDS\nsumo/M\nsump/MS\nsumptuous/PY\nsumptuousness/M\nsun/SM\nsunbath/ZGMDRS\nsunbathe\nsunbather/M\nsunbathing/M\nsunbaths\nsunbeam/SM\nsunbed/S\nsunbelt/SM\nsunblock/MS\nsunbonnet/SM\nsunburn/SGMD\nsunburst/MS\nsundae/MS\nsundeck/S\nsunder/DSG\nsundial/SM\nsundown/SM\nsundress/S\nsundries/M\nsundry/S\nsunfish/MS\nsunflower/MS\nsung/U\nsunglasses/M\nsunhat/S\nsunk/N\nsunlamp/SM\nsunless\nsunlight/M\nsunlit\nsunned\nsunniness/M\nsunning\nsunny/TRP\nsunrise/SM\nsunroof/SM\nsunscreen/MS\nsunset/MS\nsunshade/MS\nsunshine/M\nsunshiny\nsunspot/SM\nsunstroke/M\nsuntan/MS\nsuntanned\nsuntanning\nsuntrap/S\nsunup/M\nsup/SZMR\nsuper/M\nsuperabundance/MS\nsuperabundant\nsuperannuate/GNDS\nsuperannuation/M\nsuperb/RYT\nsupercargo/M\nsupercargoes\nsupercharge/ZGDRS\nsupercharger/M\nsupercilious/PY\nsuperciliousness/M\nsupercity/SM\nsupercomputer/MS\nsuperconducting\nsuperconductive\nsuperconductivity/M\nsuperconductor/SM\nsupercritical\nsuperego/MS\nsupererogation/M\nsupererogatory\nsuperficial/Y\nsuperficiality/M\nsuperfine\nsuperfluity/M\nsuperfluous/YP\nsuperfluousness/M\nsuperglue\nsupergrass/S\nsuperhero/MS\nsuperheroes\nsuperhighway/SM\nsuperhuman\nsuperimpose/GDS\nsuperimposition/M\nsuperintend/DSG\nsuperintendence/M\nsuperintendency/M\nsuperintendent/SM\nsuperior/MS\nsuperiority/M\nsuperlative/SMY\nsuperman/M\nsupermarket/SM\nsupermassive\nsupermen\nsupermodel/SM\nsupermom/MS\nsupernal\nsupernatural/SY\nsupernova/MS\nsupernovae\nsupernumerary/SM\nsuperpose/GDS\nsuperposition/M\nsuperpower/SM\nsupersaturate/GNDS\nsupersaturation/M\nsuperscribe/GDS\nsuperscript/MS\nsuperscription/M\nsupersede/GDS\nsupersize/GDS\nsupersonic\nsuperstar/MS\nsuperstardom\nsuperstate/S\nsuperstition/MS\nsuperstitious/Y\nsuperstore/MS\nsuperstructure/MS\nsupertanker/MS\nsuperuser/S\nsupervene/GDS\nsupervention/M\nsupervise/XGNDS\nsupervised/U\nsupervision/M\nsupervisor/MS\nsupervisory\nsuperwoman/M\nsuperwomen\nsupine/Y\nsupp/DRZG\nsupper/M\nsuppertime\nsuppl\nsupplant/SDG\nsupple/TLPR\nsupplement/MDGS\nsupplemental\nsupplementary\nsupplementation/M\nsuppleness/M\nsuppliant/SM\nsupplicant/MS\nsupplicate/GDS\nsupplication/M\nsupplier/M\nsupply/ZGDRSMXN\nsupport/MDRSBZGV\nsupportable/UI\nsupported/U\nsupporter/M\nsuppose/GDS\nsupposed/Y\nsupposition/MS\nsuppository/SM\nsuppress/GVDS\nsuppressant/MS\nsuppressible\nsuppression/M\nsuppressor/SM\nsuppurate/DSGN\nsuppuration/M\nsupra\nsupranational\nsupremacist/MS\nsupremacy/M\nsupreme/Y\nsupremo/S\nsupt\nsurcease/DSMG\nsurcharge/DSMG\nsurcingle/SM\nsure/PYTR\nsurefire\nsurefooted\nsureness/M\nsurety/SM\nsurf/MDRZGS\nsurface's\nsurface/AGDS\nsurfboard/MDSG\nsurfeit/MDSG\nsurfer/M\nsurfing/M\nsurge/DSMG\nsurgeon/MS\nsurgery/SM\nsurgical/Y\nsurliness/M\nsurly/PTR\nsurmise/MGDS\nsurmount/DGSB\nsurmountable/I\nsurname/MS\nsurpass/GDS\nsurpassed/U\nsurplice/MS\nsurplus/MS\nsurplussed\nsurplussing\nsurprise/DSMGJ\nsurprising/UY\nsurreal\nsurrealism/M\nsurrealist/SM\nsurrealistic\nsurrealistically\nsurrender/MDSG\nsurreptitious/PY\nsurreptitiousness/M\nsurrey/MS\nsurrogacy/M\nsurrogate/SM\nsurround/GSDJ\nsurrounding/M\nsurroundings/M\nsurtax/MDSG\nsurtitle/S\nsurveillance/M\nsurvey's\nsurvey/ADGS\nsurveying/M\nsurveyor/SM\nsurvival/SM\nsurvivalist/SM\nsurvive/DSGB\nsurvivor/SM\nsusceptibility/SM\nsusceptible/I\nsushi/M\nsuspect/SMDG\nsuspected/U\nsuspend/SDRZG\nsuspender/M\nsuspense/XMN\nsuspenseful\nsuspension/M\nsuspicion/SM\nsuspicious/Y\nsuss/DSG\nsustain/SDBG\nsustainability\nsustainable/U\nsustainably\nsustenance/M\nsutler/MS\nsuttee\nsuture/MGDS\nsuzerain/MS\nsuzerainty/M\nsvelte/TR\nswab/MS\nswabbed\nswabbing\nswaddle/DSG\nswag/MS\nswagged\nswagger/SMDRG\nswagging\nswain/SM\nswallow/GSMD\nswallowtail/MS\nswam\nswami/SM\nswamp/GSMD\nswampland/M\nswampy/RT\nswan/MS\nswank/TGSMDR\nswankily\nswankiness/M\nswanky/RPT\nswanned\nswanning\nswansong/S\nswap/MS\nswapped\nswapping\nsward/SM\nswarm/GSMD\nswarthy/TR\nswash/GMDS\nswashbuckler/SM\nswashbuckling/M\nswastika/SM\nswat/MS\nswatch/MS\nswath/GMDS\nswathe/M\nswaths\nswatted\nswatter/SMDG\nswatting\nsway/MDGS\nswayback/MD\nswayed/U\nswear/ZGSR\nswearer/M\nswearword/MS\nsweat/ZGSMDR\nsweatband/MS\nsweater/M\nsweatpants/M\nsweats/M\nsweatshirt/SM\nsweatshop/MS\nsweatsuit/S\nsweaty/RT\nswede/SM\nsweep/ZGSMRJ\nsweeper/M\nsweeping/MY\nsweepings/M\nsweepstakes/M\nsweet/XTSMNRYP\nsweetbread/SM\nsweetbrier/SM\nsweetcorn\nsweetened/U\nsweetener/MS\nsweetening/M\nsweetheart/SM\nsweetie/SM\nsweetish\nsweetmeat/MS\nsweetness/M\nswell/TGSMDRJ\nswellhead/MDS\nswelling/M\nswelter/SGMD\nswept\nsweptback\nswerve/MGDS\nswerving/U\nswift/PTSMRY\nswiftness/M\nswig/MS\nswigged\nswigging\nswill/GSMD\nswim/MS\nswimmer/SM\nswimming/MY\nswimsuit/SM\nswimwear\nswindle/DRSMZG\nswindler/M\nswine/SM\nswineherd/SM\nswing/ZGSMR\nswingeing\nswinger/M\nswinish\nswipe/DSMG\nswirl/GSMD\nswirly\nswish/TGMDRS\nswitch/MDRSZGB\nswitchback/MS\nswitchblade/SM\nswitchboard/SM\nswitcher/M\nswitchover\nswivel/MDGS\nswiz\nswizz\nswizzle/DSG\nswollen\nswoon/SGMD\nswoop/SGMD\nswoosh/MDSG\nsword/SM\nswordfish/MS\nswordplay/M\nswordsman/M\nswordsmanship/M\nswordsmen\nswore\nsworn\nswot/S\nswotted\nswotting\nswum\nswung\nsybarite/SM\nsybaritic\nsycamore/MS\nsycophancy/M\nsycophant/SM\nsycophantic\nsyllabic\nsyllabicate/GNDS\nsyllabication/M\nsyllabification/M\nsyllabify/DSNG\nsyllable/MS\nsyllabub/S\nsyllabus/MS\nsyllogism/MS\nsyllogistic\nsylph/M\nsylphic\nsylphlike\nsylphs\nsylvan\nsymbioses\nsymbiosis/M\nsymbiotic\nsymbiotically\nsymbol/MS\nsymbolic\nsymbolical/Y\nsymbolism/M\nsymbolization/M\nsymbolize/DSG\nsymbology\nsymmetric\nsymmetrical/Y\nsymmetry/SM\nsympathetic/U\nsympathetically/U\nsympathies/M\nsympathize/ZGDRS\nsympathizer/M\nsympathy/SM\nsymphonic\nsymphony/SM\nsymposium/MS\nsymptom/MS\nsymptomatic\nsymptomatically\nsyn/H\nsynagogal\nsynagogue/SM\nsynapse/MS\nsynaptic\nsync/MDSG\nsynchronicity\nsynchronization/SM\nsynchronize/GDS\nsynchronous/Y\nsynchrony\nsyncopate/DSGN\nsyncopation/M\nsyncope/M\nsyndicalism\nsyndicalist/S\nsyndicate/DSMGN\nsyndication/M\nsyndrome/SM\nsynergism/M\nsynergistic\nsynergy/SM\nsynfuel/MS\nsynod/SM\nsynonym/SM\nsynonymous\nsynonymy/M\nsynopses\nsynopsis/M\nsynoptic\nsynovial\nsyntactic\nsyntactical/Y\nsyntax/M\nsyntheses\nsynthesis/M\nsynthesize/ZGDRS\nsynthesizer/M\nsynthetic/SM\nsynthetically\nsynths\nsyphilis/M\nsyphilitic/SM\nsyringe/DSMG\nsyrup/SM\nsyrupy\nsysadmin/S\nsysop/S\nsystem/SM\nsystematic/U\nsystematical/Y\nsystematization/M\nsystematize/GDS\nsystemic/MS\nsystemically\nsystole/SM\nsystolic\nt/SDNXGBJ\nta\ntab/SM\ntabbed\ntabbing\ntabbouleh/M\ntabby/SM\ntabernacle/SM\ntabla/MS\ntable/MGDS\ntableau/M\ntableaux\ntablecloth/M\ntablecloths\ntableland/SM\ntablespoon/SM\ntablespoonful/SM\ntablet/SM\ntabletop/MS\ntableware/M\ntabloid/SM\ntaboo/MDSG\ntabor/MS\ntabular\ntabulate/DSGNX\ntabulation/M\ntabulator/SM\ntachograph\ntachographs\ntachometer/SM\ntachycardia/M\ntachyon\ntacit/PY\ntacitness/M\ntaciturn/Y\ntaciturnity/M\ntack/ZGMDRS\ntacker/M\ntackiness/M\ntackle/DRSMZG\ntackler/M\ntacky/RTP\ntaco/MS\ntact/FM\ntactful/YP\ntactfulness/M\ntactic/SM\ntactical/Y\ntactician/MS\ntactile\ntactility/M\ntactless/PY\ntactlessness/M\ntad/SM\ntadpole/MS\ntaffeta/M\ntaffrail/SM\ntaffy/SM\ntag/SM\ntagged\ntagger/SM\ntagging\ntagliatelle\ntagline/MS\ntaiga/MS\ntail/ACSDMG\ntailback/MS\ntailboard/S\ntailbone/S\ntailcoat/MS\ntailgate/MZGDRS\ntailgater/M\ntailless\ntaillight/MS\ntailor/SGMD\ntailoring/M\ntailpiece/S\ntailpipe/SM\ntailspin/SM\ntailwind/SM\ntaint/MDSG\ntainted/U\ntake/AIMS\ntakeaway/S\ntaken/A\ntakeoff/MS\ntakeout/MS\ntakeover/SM\ntaker/MS\ntaking/SM\ntakings/M\ntalc/M\ntalcum/M\ntale/MS\ntalebearer/MS\ntalent/SMD\ntalented/U\ntali\ntalisman/MS\ntalk/ZGMDRS\ntalkative/PY\ntalkativeness/M\ntalker/M\ntalkie/RSMT\ntalky\ntall/TRP\ntallboy/MS\ntallier/M\ntallish\ntallness/M\ntallow/M\ntallowy\ntally/DRSMZG\ntallyho/MDGS\ntalon/MS\ntalus/MS\ntam/SM\ntamale/SM\ntamarack/MS\ntamarind/MS\ntambourine/MS\ntame/BYZTGDRSP\ntamed/U\ntameness/M\ntamer/M\ntamoxifen\ntamp/ZGDRS\ntamper/ZGDR\ntamperer/M\ntampon/SM\ntan/SM\ntanager/MS\ntanbark/M\ntandem/SM\ntandoori/M\ntang/MS\ntangelo/MS\ntangent/MS\ntangential/Y\ntangerine/MS\ntangibility/IM\ntangible/IMS\ntangibleness/M\ntangibly/I\ntangle's\ntangle/UDSG\ntango/MDSG\ntangy/RT\ntank/ZGMDRS\ntankard/MS\ntanker/M\ntankful/MS\ntanned/U\ntanner/SM\ntannery/SM\ntannest\ntannin/M\ntanning/M\ntansy/M\ntantalization/M\ntantalize/ZGDRS\ntantalizer/M\ntantalizing/Y\ntantalum/M\ntantamount\ntantra/M\ntantrum/SM\ntap/SZGMDR\ntapas\ntape/MS\ntapeline/MS\ntaper/MDG\ntapestry/SM\ntapeworm/MS\ntapioca/M\ntapir/MS\ntapped/U\ntapper/MS\ntappet/MS\ntapping\ntaproom/SM\ntaproot/SM\ntar/SGMD\ntaramasalata\ntarantella/MS\ntarantula/SM\ntarball/S\ntardily\ntardiness/M\ntardy/TPR\ntare/MS\ntarget/MDGS\ntariff/MS\ntarmac/MS\ntarmacadam\ntarmacked\ntarmacking\ntarn/MS\ntarnish/GMDS\ntarnished/U\ntaro/MS\ntarot/MS\ntarp/MS\ntarpaulin/MS\ntarpon/MS\ntarragon/SM\ntarred\ntarring\ntarry/TGDRS\ntarsal/MS\ntarsi\ntarsus/M\ntart/PTGMDRYS\ntartan/MS\ntartar/MS\ntartaric\ntartness/M\ntarty/T\ntaser/GMDS\ntask/GMDS\ntaskbar\ntaskmaster/MS\ntaskmistress/MS\ntassel/MDSG\ntaste/JMZGDRS\ntasted/U\ntasteful/EPY\ntastefulness/EM\ntasteless/PY\ntastelessness/M\ntaster/M\ntastily\ntastiness/M\ntasting/M\ntasty/TRP\ntat/SZR\ntatami/MS\ntater/M\ntatted\ntatter/MDSG\ntatterdemalion/MS\ntattie\ntatting/M\ntattle/MZGDRS\ntattler/M\ntattletale/MS\ntattoo/MDRSZG\ntattooer/M\ntattooist/SM\ntatty/TRS\ntau/SM\ntaught/UA\ntaunt/ZGMDRS\ntaunter/M\ntaunting/Y\ntaupe/M\ntaut/PXTNRY\ntauten/DG\ntautness/M\ntautological/Y\ntautologous\ntautology/SM\ntavern/MS\ntawdrily\ntawdriness/M\ntawdry/RTP\ntawny/TRM\ntax/BZGMDRS\ntaxa\ntaxation/M\ntaxer/M\ntaxi/GMDS\ntaxicab/SM\ntaxidermist/SM\ntaxidermy/M\ntaximeter/MS\ntaxiway/S\ntaxman\ntaxmen\ntaxon\ntaxonomic\ntaxonomist/MS\ntaxonomy/SM\ntaxpayer/MS\ntaxpaying\ntb/S\ntbsp\ntea/SM\nteabag/S\nteacake/SM\nteach/ZGRSBJ\nteachable/U\nteacher/M\nteaching/M\nteacup/MS\nteacupful/MS\nteak/MS\nteakettle/SM\nteal/MS\ntealight/MS\nteam/GMDS\nteammate/MS\nteamster/MS\nteamwork/M\nteapot/MS\ntear/GMDS\ntearaway/S\nteardrop/SM\ntearful/Y\nteargas/MS\nteargassed\nteargassing\ntearjerker/MS\ntearoom/SM\nteary/TR\ntease/MZGDRS\nteasel/MS\nteaser/M\nteasing/Y\nteaspoon/SM\nteaspoonful/SM\nteat/MS\nteatime/S\ntech/M\ntechie/S\ntechnetium/M\ntechnical/Y\ntechnicality/SM\ntechnician/SM\ntechnicolor\ntechnique/SM\ntechno\ntechnobabble\ntechnocracy/SM\ntechnocrat/MS\ntechnocratic\ntechnological/Y\ntechnologist/MS\ntechnology/SM\ntechnophobe/S\ntechs\ntectonic/S\ntectonics/M\nted/S\nteddy/S\ntedious/PY\ntediousness/M\ntedium/M\ntee/DSMH\nteeing\nteem/GDS\nteen/MS\nteenage/RZ\nteenager/M\nteeny/TR\nteenybopper/MS\nteeter/MDSG\nteethe/GDS\nteething/M\nteetotal/RZ\nteetotaler/M\nteetotalism/M\ntektite/SM\ntel\ntelecast/SZGMR\ntelecaster/M\ntelecommunication/MS\ntelecommunications/M\ntelecommute/ZGDRS\ntelecommuter/M\ntelecommuting/M\nteleconference/MGDS\nteleconferencing/M\ntelegenic\ntelegram/MS\ntelegraph/MDRZG\ntelegrapher/M\ntelegraphese\ntelegraphic\ntelegraphically\ntelegraphist/SM\ntelegraphs\ntelegraphy/M\ntelekinesis/M\ntelekinetic\ntelemarketer/SM\ntelemarketing/M\ntelemeter/SM\ntelemetry/SM\nteleological\nteleology\ntelepathic\ntelepathically\ntelepathy/M\ntelephone/DRSMZG\ntelephoner/M\ntelephonic\ntelephonist/S\ntelephony/M\ntelephoto/SM\ntelephotography/M\nteleplay/MS\nteleport\nteleportation\nteleprinter/MS\nteleprocessing/M\nteleprompter/SM\ntelesales\ntelescope/DSMG\ntelescopic\ntelescopically\nteletext/MS\ntelethon/MS\nteletype/S\nteletypewriter/MS\ntelevangelism/M\ntelevangelist/MS\ntelevise/XGNDS\ntelevision/M\nteleworker/S\nteleworking\ntelex/MDSG\ntell/AGS\nteller/SM\ntelling/Y\ntelltale/SM\ntellurium/M\ntelly/SM\ntelnet\ntemblor/MS\ntemerity/M\ntemp/MDRZTGS\ntemper/MDG\ntempera/LSM\ntemperament/MS\ntemperamental/Y\ntemperance/IM\ntemperate/IY\ntemperateness/M\ntemperature/SM\ntempest/SM\ntempestuous/YP\ntempestuousness/M\ntemplate's\ntemplate/S\ntemple/SM\ntempo/SM\ntemporal/Y\ntemporarily\ntemporariness/M\ntemporary/FSM\ntemporize/ZGDRS\ntemporizer/M\ntempt/SDRZG\ntemptation/MS\ntempter/M\ntempting/Y\ntemptress/MS\ntempura/M\nten/BMH\ntenability/M\ntenable/U\ntenably\ntenacious/YP\ntenaciousness/M\ntenacity/M\ntenancy/SM\ntenant/SMDG\ntenanted/U\ntenantry/M\ntench\ntend/IEFDGS\ntended/U\ntendency/SM\ntendentious/YP\ntendentiousness/M\ntender/SMDRYTGP\ntenderfoot/MS\ntenderhearted/P\ntenderheartedness/M\ntenderize/ZGDRS\ntenderizer/M\ntenderloin/SM\ntenderness/M\ntendinitis/M\ntendon/SM\ntendril/SM\ntenement/SM\ntenet/SM\ntenfold\ntenner/S\ntennis/M\ntenon/SMDG\ntenor/SM\ntenpin/SM\ntenpins/M\ntense/DRSMYTGNXP\ntenseness/M\ntensile\ntension/ESM\ntensity/IM\ntensor/S\ntent/DGSM\ntentacle/DSM\ntentative/PY\ntentativeness/M\ntenterhook/MS\ntenth/MY\ntenths\ntenuity/M\ntenuous/PY\ntenuousness/M\ntenure/DSMG\ntepee/SM\ntepid/YP\ntepidity/M\ntepidness/M\ntequila/SM\nterabit/SM\nterabyte/MS\nterahertz/M\nterapixel/MS\nterbium/M\ntercentenary/SM\ntercentennial/SM\nteriyaki\nterm/MDYGS\ntermagant/MS\nterminable/IC\nterminal/MYS\nterminate/DSGNX\ntermination/CSM\nterminator/S\ntermini\nterminological/Y\nterminology/SM\nterminus/M\ntermite/SM\ntern/IMS\nternary/SM\nterr\nterrace/DSMG\nterracotta/M\nterrain/SM\nterrapin/MS\nterrarium/SM\nterrazzo/MS\nterrestrial/SMY\nterrible/P\nterribleness/M\nterribly\nterrier/M\nterrific\nterrifically\nterrify/GDS\nterrifying/Y\nterrine/S\nterritorial/MS\nterritoriality\nterritory/SM\nterror/SM\nterrorism/M\nterrorist/SM\nterrorize/DSG\nterry/RMZ\nterrycloth/M\nterse/RYTP\nterseness/M\ntertiary\ntessellate/DSXGN\ntessellation/M\ntest's/AFK\ntest/AKFCDGS\ntestable/CF\ntestament/MS\ntestamentary\ntestate/S\ntestator/MS\ntestatrices\ntestatrix/M\ntested/U\ntester/KSM\ntestes\ntesticle/MS\ntesticular\ntestifier/M\ntestify/ZGDRS\ntestily\ntestimonial/MS\ntestimony/SM\ntestiness/M\ntestings\ntestis/M\ntestosterone/M\ntesty/PRT\ntetanus/M\ntetchily\ntetchy/PRT\ntether/SMDG\ntetra/SM\ntetracycline/M\ntetrahedral\ntetrahedron/MS\ntetrameter/SM\ntext/FMS\ntextbook/SM\ntexted\ntextile/MS\ntexting\ntextual/FY\ntextural\ntexture/MGDS\nthalami\nthalamus/M\nthalidomide/M\nthallium/M\nthan\nthane/SM\nthank/SDG\nthankful/YP\nthankfulness/M\nthankless/PY\nthanklessness/M\nthanksgiving/SM\nthat'd\nthat'll\nthat/M\nthatch/MDRSZG\nthatcher/M\nthatching/M\nthaw/MDGS\nthe/JG\ntheater/SM\ntheatergoer/SM\ntheatrical/YS\ntheatricality/M\ntheatricals/M\ntheatrics/M\nthee/S\ntheft/SM\ntheir/S\ntheism/M\ntheist/SM\ntheistic\nthem\nthematic\nthematically\ntheme/DSM\nthemselves\nthen/M\nthence\nthenceforth\nthenceforward\ntheocracy/SM\ntheocratic\ntheodolite/S\ntheologian/SM\ntheological/Y\ntheology/SM\ntheorem/MS\ntheoretic\ntheoretical/Y\ntheoretician/SM\ntheorist/SM\ntheorize/DSG\ntheory/SM\ntheosophic\ntheosophical\ntheosophist/SM\ntheosophy/M\ntherapeutic/S\ntherapeutically\ntherapeutics/M\ntherapist/SM\ntherapy/SM\nthere/M\nthereabout/S\nthereafter\nthereat\nthereby\ntherefor\ntherefore\ntherefrom\ntherein\ntheremin/SM\nthereof\nthereon\nthereto\ntheretofore\nthereunder\nthereunto\nthereupon\ntherewith\ntherm/SM\nthermal/MYS\nthermionic\nthermodynamic/S\nthermodynamics/M\nthermometer/MS\nthermometric\nthermonuclear\nthermoplastic/SM\nthermos/MS\nthermostat/MS\nthermostatic\nthermostatically\nthesauri\nthesaurus/MS\nthese/S\nthesis/M\nthespian/SM\ntheta/SM\nthew/MS\nthey\nthey'd\nthey'll\nthey're\nthey've\nthiamine/M\nthick/PMNRYXT\nthicken/DRJZG\nthickener/M\nthickening/M\nthicket/MS\nthickheaded/M\nthickness/MS\nthicko/S\nthickset\nthief/M\nthieve/DSG\nthievery/M\nthieving/M\nthievish\nthigh/M\nthighbone/MS\nthighs\nthimble/MS\nthimbleful/SM\nthin/YSP\nthine\nthing/M\nthingamabob/SM\nthingamajig/SM\nthingumabob/S\nthingummy/S\nthingy/S\nthink/SRBZG\nthinkable/U\nthinker/M\nthinking's\nthinned\nthinner/MS\nthinness/M\nthinnest\nthinning\nthird/SMY\nthirst/SGMD\nthirstily\nthirstiness/M\nthirsty/TPR\nthirteen/SMH\nthirteenth/M\nthirteenths\nthirtieth/M\nthirtieths\nthirty/HSM\nthis\nthistle/MS\nthistledown/M\nthither\ntho\nthole/SM\nthong/SM\nthoracic\nthorax/MS\nthorium/M\nthorn/SM\nthorniness/M\nthorny/PRT\nthorough/RYPT\nthoroughbred/MS\nthoroughfare/MS\nthoroughgoing\nthoroughness/M\nthose\nthou/MS\nthough\nthought/SM\nthoughtful/YP\nthoughtfulness/M\nthoughtless/PY\nthoughtlessness/M\nthousand/MHS\nthousandfold\nthousandth/M\nthousandths\nthrall/SMDG\nthralldom/M\nthrash/JMDRSZG\nthrasher/M\nthrashing/M\nthread/SMDRZG\nthreadbare\nthreader/M\nthreadlike\nthready/TR\nthreat/SMNX\nthreaten/DG\nthreatening/Y\nthree/SM\nthreefold\nthreepence/M\nthreescore/MS\nthreesome/SM\nthrenody/SM\nthresh/MDRSZG\nthresher/M\nthreshold/SM\nthrew\nthrice\nthrift/SM\nthriftily\nthriftiness/M\nthriftless\nthrifty/PTR\nthrill/SMDRZG\nthriller/M\nthrilling/Y\nthrive/DSG\nthroat/SM\nthroatily\nthroatiness/M\nthroaty/RTP\nthrob/SM\nthrobbed\nthrobbing\nthroe/SM\nthrombi\nthrombolytic\nthromboses\nthrombosis/M\nthrombotic\nthrombus/M\nthrone's\nthrone/S\nthrong/GSMD\nthrottle/DRSMZG\nthrottler/M\nthrough\nthroughout\nthroughput/M\nthrow/SMRZG\nthrowaway/SM\nthrowback/SM\nthrower/M\nthrown\nthru\nthrum/SM\nthrummed\nthrumming\nthrush/MS\nthrust/GSM\nthruway/MS\nthud/MS\nthudded\nthudding\nthug/MS\nthuggery/M\nthuggish\nthulium/M\nthumb/SMDG\nthumbnail/SM\nthumbprint/SM\nthumbscrew/SM\nthumbtack/SM\nthump/SMDG\nthumping/M\nthunder/ZGMDRS\nthunderbolt/SM\nthunderclap/SM\nthundercloud/MS\nthunderer/M\nthunderhead/SM\nthunderous/Y\nthundershower/SM\nthunderstorm/SM\nthunderstruck\nthundery\nthunk/S\nthus\nthwack/ZGSMDR\nthwacker/M\nthwart/GSMD\nthy\nthyme/M\nthymine/M\nthymus/MS\nthyroid/MS\nthyroidal\nthyself\nti/MRZ\ntiara/SM\ntibia/M\ntibiae\ntibial\ntic/SM\ntick/MDRZGS\nticker/M\nticket/GSMD\nticking/M\ntickle/DRSMZG\ntickler/M\nticklish/YP\nticklishness/M\nticktacktoe/M\nticktock/MS\ntidal/Y\ntidbit/SM\ntiddler/S\ntiddly\ntiddlywink/S\ntiddlywinks/M\ntide/MGJDS\ntideland/SM\ntidemark/S\ntidewater/MS\ntideway/MS\ntidily/U\ntidiness/UM\ntidings/M\ntidy/DRSMTGP\ntie's\ntie/AUSD\ntieback/MS\ntiebreak/RSZ\ntiebreaker/M\ntiepin/S\ntier/MD\ntiff/MDGS\ntiger/SM\ntigerish\ntight/SNRYPXT\ntighten/ZGDR\ntightener/M\ntightfisted\ntightness/M\ntightrope/MS\ntights/M\ntightwad/MS\ntigress/MS\ntil\ntilapia\ntilde/SM\ntile/MZGDRS\ntiler/M\ntiling/M\ntill's\ntill/EDRZGS\ntillable\ntillage/M\ntiller/EM\ntilt/MDGS\ntimber/SMDG\ntimberland/M\ntimberline/MS\ntimbre/SM\ntimbrel/SM\ntime/MYZGJDRS\ntimekeeper/MS\ntimekeeping/M\ntimeless/PY\ntimelessness/M\ntimeline/MS\ntimeliness/UM\ntimely/UPRT\ntimeout/SM\ntimepiece/MS\ntimer/M\ntimescale/S\ntimeserver/SM\ntimeserving/M\ntimeshare/S\ntimestamp/SMD\ntimetable/DSMG\ntimeworn\ntimezone\ntimid/RYTP\ntimidity/M\ntimidness/M\ntiming/M\ntimorous/PY\ntimorousness/M\ntimothy/M\ntimpani/M\ntimpanist/SM\ntin/SM\ntincture/MGDS\ntinder/M\ntinderbox/MS\ntine/MS\ntinfoil/M\nting/MDYG\ntinge/SM\ntingeing\ntingle/DSMGJ\ntingling/M\ntininess/M\ntinker/ZGSMDR\ntinkerer/M\ntinkle/DSMG\ntinned\ntinniness/M\ntinning\ntinnitus/M\ntinny/PRT\ntinplate/M\ntinpot\ntinsel/GSMD\ntinsmith/M\ntinsmiths\ntint/MDGS\ntintinnabulation/MS\ntintype/MS\ntinware/M\ntiny/RTP\ntip/SM\ntipped\ntipper/SM\ntippet/SM\ntippex/GDS\ntipping\ntipple/DRSMZG\ntippler/M\ntipsily\ntipsiness/M\ntipster/MS\ntipsy/RPT\ntiptoe/DSM\ntiptoeing\ntiptop/SM\ntirade/SM\ntiramisu/MS\ntire's\ntire/AGDS\ntired/PRYT\ntiredness/M\ntireless/YP\ntirelessness/M\ntiresome/PY\ntiresomeness/M\ntissue/SM\ntit/SM\ntitan/SM\ntitanic\ntitanium/M\ntitch/S\ntitchy\ntithe/DRSMZG\ntither/M\ntitian/M\ntitillate/DSGN\ntitillating/Y\ntitillation/M\ntitivate/DSGN\ntitivation/M\ntitle/DSMG\ntitled/U\ntitleholder/MS\ntitlist/MS\ntitmice\ntitmouse/M\ntitter/SGMD\ntittle/SM\ntitty/S\ntitular\ntizz\ntizzy/SM\ntn\ntnpk\nto/IU\ntoad/MS\ntoadstool/MS\ntoady/DSMG\ntoadyism/M\ntoast/SMDRZG\ntoaster/M\ntoastmaster/SM\ntoastmistress/MS\ntoasty/TRS\ntobacco/MS\ntobacconist/SM\ntoboggan/ZGSMDR\ntobogganer/M\ntobogganing/M\ntoccata/S\ntocopherol\ntocsin/SM\ntoday/M\ntoddle/DRSMZG\ntoddler/M\ntoddy/SM\ntoe/DSM\ntoecap/SM\ntoehold/MS\ntoeing\ntoenail/MS\ntoerag/S\ntoff/S\ntoffee/SM\ntofu/M\ntog/SM\ntoga/MDS\ntogether/P\ntogetherness/M\ntogged\ntogging\ntoggle/DSMG\ntogs/M\ntoil/MDRZGS\ntoiler/M\ntoilet/MDGS\ntoiletry/SM\ntoilette/M\ntoilsome\ntoke/MGDS\ntoken/SM\ntokenism/M\ntold/AU\ntole/M\ntolerable/I\ntolerably/I\ntolerance/IM\ntolerances\ntolerant/IY\ntolerate/GNDS\ntoleration/M\ntoll/MDGS\ntollbooth/M\ntollbooths\ntollgate/SM\ntollway/SM\ntoluene/M\ntom/SM\ntomahawk/SGMD\ntomato/M\ntomatoes\ntomb/MDGS\ntombola/S\ntomboy/MS\ntomboyish\ntombstone/MS\ntomcat/MS\ntome/MS\ntomfoolery/SM\ntomographic\ntomography/M\ntomorrow/MS\ntomtit/MS\nton/SM\ntonal/Y\ntonality/SM\ntone's\ntone/IZGDRS\ntonearm/SM\ntoneless/Y\ntoner/IM\ntong/MDGS\ntongue/MGDS\ntongueless\ntonic/SM\ntonight/M\ntonnage/SM\ntonne/SM\ntonsil/MS\ntonsillectomy/SM\ntonsillitis/M\ntonsorial\ntonsure/DSMG\ntony/RT\ntoo\ntook/A\ntool's\ntool/ADGS\ntoolbar/SM\ntoolbox/MS\ntoolkit\ntoolmaker/MS\ntoot/MDRZGS\ntooter/M\ntooth/MD\ntoothache/MS\ntoothbrush/MS\ntoothily\ntoothless\ntoothpaste/SM\ntoothpick/SM\ntoothsome\ntoothy/RT\ntootle/GDS\ntootsie/S\ntop/SM\ntopaz/MS\ntopcoat/SM\ntopdressing/SM\ntopee/S\ntopflight\ntopi\ntopiary/M\ntopic/SM\ntopical/Y\ntopicality/M\ntopknot/SM\ntopless\ntopmast/SM\ntopmost\ntopnotch\ntopographer/SM\ntopographic\ntopographical/Y\ntopography/SM\ntopological/Y\ntopology\ntopped\ntopper/MS\ntopping/SM\ntopple/GDS\ntopsail/SM\ntopside/SM\ntopsoil/M\ntopspin/M\ntoque/SM\ntor/SM\ntorch/GMDS\ntorchbearer/MS\ntorchlight/M\ntore\ntoreador/MS\ntorment/SMDG\ntormenting/Y\ntormentor/MS\ntorn\ntornado/M\ntornadoes\ntorpedo/GMD\ntorpedoes\ntorpid/Y\ntorpidity/M\ntorpor/M\ntorque/MGDS\ntorrent/SM\ntorrential\ntorrid/YP\ntorridity/M\ntorridness/M\ntorsion/M\ntorsional\ntorso/SM\ntort's\ntort/FEAS\ntorte/SM\ntortellini/M\ntortilla/MS\ntortoise/MS\ntortoiseshell/SM\ntortoni/M\ntortuous/PY\ntortuousness/M\ntorture/DRSMZG\ntorturer/M\ntorturous\ntorus\ntosh\ntoss/MDRSZG\ntossup/MS\ntot/SGMD\ntotal/GSMDY\ntotalitarian/SM\ntotalitarianism/M\ntotality/SM\ntotalizator/SM\ntote/MS\ntotem/SM\ntotemic\ntotted\ntotter/ZGMDRS\ntotterer/M\ntotting\ntoucan/MS\ntouch/AGMDS\ntouchdown/SM\ntouche/BJ\ntouched/U\ntouchily\ntouchiness/M\ntouching/Y\ntouchline/S\ntouchpaper/S\ntouchscreen/MS\ntouchstone/MS\ntouchy/RPT\ntough/XTGMDNRYP\ntoughen/ZGDR\ntoughener/M\ntoughie/SM\ntoughness/M\ntoughs\ntoupee/MS\ntour/CFSGDM\ntourism/M\ntourist/MS\ntouristic\ntouristy\ntourmaline/M\ntournament/SM\ntourney/MS\ntourniquet/MS\ntousle/GDS\ntout/MDGS\ntow/SZGMDR\ntoward/S\ntowboat/MS\ntowel/JGSMD\ntowelette/SM\ntoweling/M\ntower/GMD\ntowhead/MDS\ntowhee/MS\ntowline/MS\ntown/MS\ntownee/S\ntownhouse/MS\ntownie/MS\ntownsfolk/M\ntownship/MS\ntownsman/M\ntownsmen\ntownspeople/M\ntownswoman/M\ntownswomen\ntowpath/M\ntowpaths\ntowrope/SM\ntoxemia/M\ntoxic\ntoxicity/SM\ntoxicological\ntoxicologist/SM\ntoxicology/M\ntoxin/SM\ntoy/SGMD\ntoyboy/S\ntr\ntrabecula\ntrabecular\ntrabecule\ntrace/JDRSMZG\ntraceability\ntraceable/U\ntracer/M\ntracery/SM\ntrachea/M\ntracheae\ntracheal\ntracheotomy/SM\ntracing/M\ntrack/ZGSMDR\ntrackball/SM\ntracker/M\ntrackless\ntracksuit/S\ntract's\ntract/CEKFAS\ntractability/IM\ntractable/I\ntractably/I\ntraction/EFACKM\ntractor/FCKMS\ntrad\ntrade/JDRSMZG\ntrademark/SGMD\ntrader/M\ntradesman/M\ntradesmen\ntradespeople/M\ntradeswoman/M\ntradeswomen\ntrading/M\ntradition/MS\ntraditional/Y\ntraditionalism/M\ntraditionalist/SM\ntraduce/DRSZG\ntraducer/M\ntraffic/SM\ntrafficked\ntrafficker/SM\ntrafficking/M\ntragedian/SM\ntragedienne/MS\ntragedy/SM\ntragic\ntragically\ntragicomedy/SM\ntragicomic\ntrail/ZGSMDR\ntrailblazer/MS\ntrailblazing/M\ntrailer/M\ntrain/ZGSMDRB\ntrained/U\ntrainee/SM\ntrainer/M\ntraining/M\ntrainload/MS\ntrainman/M\ntrainmen\ntrainspotter/S\ntrainspotting\ntraipse/DSMG\ntrait/SM\ntraitor/SM\ntraitorous/Y\ntrajectory/SM\ntram/MS\ntramcar/S\ntramlines\ntrammed\ntrammel/SGMD\ntrammeled/U\ntramming\ntramp/ZGSMDR\ntramper/M\ntrample/DRSMZG\ntrampler/M\ntrampoline/MGDS\ntramway/S\ntrance/MS\ntranche/S\ntranquil/RYT\ntranquility/M\ntranquilize/ZGDRS\ntranquilizer/M\ntrans/I\ntransact/DGS\ntransaction/SM\ntransactor/MS\ntransatlantic\ntransceiver/SM\ntranscend/GSD\ntranscendence/M\ntranscendent\ntranscendental/Y\ntranscendentalism/M\ntranscendentalist/SM\ntranscontinental\ntranscribe/ZGDRS\ntranscriber/M\ntranscript/MS\ntranscription/SM\ntransducer/MS\ntransduction\ntransect/DSG\ntransept/MS\ntransfer/MBS\ntransferal/MS\ntransference/M\ntransferred\ntransferring\ntransfiguration/M\ntransfigure/GDS\ntransfinite\ntransfix/DSG\ntransform/BSZGMDR\ntransformation/SM\ntransformer/M\ntransfuse/DSXGN\ntransfusion/M\ntransgender/S\ntransgenic\ntransgress/GDS\ntransgression/SM\ntransgressor/SM\ntransience/M\ntransiency/M\ntransient/SMY\ntransistor/SM\ntransistorize/DSG\ntransit/SGMD\ntransition/GSMD\ntransitional/Y\ntransitive/ISMY\ntransitiveness/M\ntransitivity/M\ntransitory\ntransl\ntranslatable/U\ntranslate/DSGNBX\ntranslated/U\ntranslation/M\ntranslator/SM\ntransliterate/DSGNX\ntransliteration/M\ntranslocation\ntranslucence/M\ntranslucency/M\ntranslucent/Y\ntransmigrate/GNDS\ntransmigration/M\ntransmissible\ntransmission/MS\ntransmit/S\ntransmittable\ntransmittal/M\ntransmittance/M\ntransmitted\ntransmitter/SM\ntransmitting\ntransmogrification/M\ntransmogrify/DSNG\ntransmutation/SM\ntransmute/BDSG\ntransnational/MS\ntransoceanic\ntransom/SM\ntranspacific\ntransparency/SM\ntransparent/Y\ntranspiration/M\ntranspire/DSG\ntransplant/MDGS\ntransplantation/M\ntranspolar\ntransponder/SM\ntransport/BSZGMDR\ntransportation/M\ntransporter/M\ntranspose/DSG\ntransposition/MS\ntranssexual/SM\ntranssexualism/M\ntransship/SL\ntransshipment/M\ntransshipped\ntransshipping\ntransubstantiation/M\ntransversal\ntransverse/MYS\ntransvestism/M\ntransvestite/MS\ntrap/MS\ntrapdoor/MS\ntrapeze/SM\ntrapezium/SM\ntrapezoid/SM\ntrapezoidal\ntrappable\ntrapped\ntrapper/SM\ntrapping/S\ntrappings/M\ntrapshooting/M\ntrash/GMDS\ntrashcan/MS\ntrashiness/M\ntrashy/RPT\ntrauma/MS\ntraumatic\ntraumatically\ntraumatize/GDS\ntravail/SGMD\ntravel/MDRSZGJ\ntraveled/U\ntraveler/M\ntraveling/M\ntravelogue/MS\ntraversal/SM\ntraverse/DSMG\ntravesty/GDSM\ntrawl/ZGSMDR\ntrawler/M\ntray/MS\ntreacherous/PY\ntreacherousness/M\ntreachery/SM\ntreacle/M\ntreacly\ntread/AGSM\ntreadle/DSMG\ntreadmill/MS\ntreas\ntreason/BM\ntreasonous\ntreasure/DRSMZG\ntreasurer/M\ntreasury/SM\ntreat/AGSMD\ntreatable\ntreated/U\ntreatise/SM\ntreatment/MS\ntreaty/SM\ntreble/MGDS\ntree/MDS\ntreeing\ntreeless\ntreelike\ntreeline\ntreetop/SM\ntrefoil/SM\ntrek/MS\ntrekked\ntrekker/SM\ntrekking\ntrellis/GMDS\ntrematode/MS\ntremble/DSMG\ntremendous/Y\ntremolo/SM\ntremor/MS\ntremulous/PY\ntremulousness/M\ntrench's\ntrench/ADSG\ntrenchancy/M\ntrenchant/Y\ntrencher/MS\ntrencherman/M\ntrenchermen\ntrend/GSMD\ntrendily\ntrendiness/M\ntrendsetter/S\ntrendsetting\ntrendy/RSMPT\ntrepidation/M\ntrespass/MDRSZG\ntrespasser/M\ntress/EMS\ntrestle/MS\ntrews\ntrey/MS\ntriad/SM\ntriage/MD\ntrial/ASM\ntrialed\ntrialing\ntriangle/SM\ntriangular/Y\ntriangulate/GNDS\ntriangulation/M\ntriathlete/S\ntriathlon/SM\ntribal\ntribalism/M\ntribe/SM\ntribesman/M\ntribesmen\ntribeswoman/M\ntribeswomen\ntribulation/SM\ntribunal/SM\ntribune/MS\ntributary/SM\ntribute's\ntribute/FS\ntrice/M\ntricentennial/MS\ntriceps/MS\ntriceratops/M\ntrichina/M\ntrichinae\ntrichinosis/M\ntrick/GSMD\ntrickery/M\ntrickily\ntrickiness/M\ntrickle/MGDS\ntrickster/SM\ntricky/TRP\ntricolor/SM\ntricycle/SM\ntrident/MS\ntried/U\ntriennial/MYS\ntrier/SM\ntrifecta/SM\ntrifle/MZGDRS\ntrifler/M\ntrifocals/M\ntrig/M\ntrigger/MDSG\ntriglyceride/MS\ntrigonometric\ntrigonometrical\ntrigonometry/M\ntrike/SM\ntrilateral/S\ntrilby/SM\ntrill/GSMD\ntrillion/SMH\ntrillionth/M\ntrillionths\ntrillium/M\ntrilobite/SM\ntrilogy/SM\ntrim/PMYS\ntrimaran/MS\ntrimester/SM\ntrimmed/U\ntrimmer/SM\ntrimmest\ntrimming/SM\ntrimmings/M\ntrimness/M\ntrimonthly\ntrinitrotoluene/M\ntrinity/SM\ntrinket/SM\ntrio/MS\ntrip/MYS\ntripartite\ntripe/M\ntriple/MGDS\ntriplet/SM\ntriplex/MS\ntriplicate/MGDS\ntripod/MS\ntripodal\ntripos\ntripped\ntripper/SM\ntripping\ntriptych/M\ntriptychs\ntripwire/S\ntrireme/SM\ntrisect/SDG\ntrisection/M\ntrite/FPYT\ntriteness/FM\ntriter\ntritium/M\ntriumph/GMD\ntriumphal\ntriumphalism\ntriumphalist\ntriumphant/Y\ntriumphs\ntriumvir/MS\ntriumvirate/SM\ntrivalent\ntrivet/MS\ntrivia/M\ntrivial/Y\ntriviality/SM\ntrivialization/M\ntrivialize/GDS\ntrivium/M\ntrochaic\ntrochee/SM\ntrod/AU\ntrodden/A\ntroglodyte/SM\ntroika/MS\ntroll/SGMD\ntrolley/SM\ntrolleybus/MS\ntrollop/SM\ntrombone/MS\ntrombonist/MS\ntromp/SGD\ntron/S\ntroop/SZGMDR\ntrooper/M\ntroopship/MS\ntrope/SM\ntrophy/SM\ntropic/MS\ntropical/Y\ntropics/M\ntropism/SM\ntroposphere/SM\ntrot/MS\ntroth/M\ntrotted\ntrotter/SM\ntrotting\ntroubadour/MS\ntrouble/DSMG\ntroubled/U\ntroublemaker/MS\ntroubleshoot/DRZGS\ntroubleshooter/M\ntroubleshooting/M\ntroubleshot\ntroublesome/Y\ntrough/M\ntroughs\ntrounce/DRSZG\ntrouncer/M\ntroupe/MZGDRS\ntrouper/M\ntrouser/SM\ntrousers/M\ntrousseau/M\ntrousseaux\ntrout/SM\ntrove/SM\ntrow/DSG\ntrowel/MDSG\ntroy/S\ntruancy/M\ntruant/GMDS\ntruce/SM\ntruck/SZGMDR\ntrucker/M\ntrucking/M\ntruckle/MGDS\ntruckload/SM\ntruculence/M\ntruculent/Y\ntrudge/MGDS\ntrue/MTGDRS\ntruelove/SM\ntruffle/MS\ntrug/S\ntruism/MS\ntruly/U\ntrump/SGMD\ntrumpery/M\ntrumpet/ZGMDRS\ntrumpeter/M\ntruncate/GNDS\ntruncation/M\ntruncheon/SM\ntrundle/MZGDRS\ntrundler/M\ntrunk/SGM\ntruss/GMDS\ntrust/ESGMD\ntrustee/MS\ntrusteeship/SM\ntrustful/EY\ntrustfulness/M\ntrusting/Y\ntrustworthiness/M\ntrustworthy/TPR\ntrusty/TRSM\ntruth/ZMR\ntruther/M\ntruthful/UYP\ntruthfulness/UM\ntruthiness\ntruths/U\ntry's\ntry/AGDS\ntrying/Y\ntryout/SM\ntryptophan\ntryst/SMDG\ntsarists\ntsetse/MS\ntsp\ntsunami/SM\nttys\ntub/SZGMDR\ntuba/MS\ntubal\ntubby/TR\ntube/MS\ntubeless/M\ntuber/M\ntubercle/SM\ntubercular\ntuberculin/M\ntuberculosis/M\ntuberculous\ntuberose/M\ntuberous\ntubful/MS\ntubing/M\ntubular\ntubule/MS\ntuck/MDRSZG\ntucker/MDG\ntuft/MDRSZG\ntufter/M\ntug/SM\ntugboat/MS\ntugged\ntugging\ntuition/IM\ntularemia/M\ntulip/SM\ntulle/M\ntum/S\ntumble/DRSMZG\ntumbledown\ntumbler/M\ntumbleweed/SM\ntumbling/M\ntumbrel/SM\ntumescence/M\ntumescent\ntumid\ntumidity/M\ntummy/SM\ntumor/SM\ntumorous\ntumult/SM\ntumultuous/Y\ntun/SZGMDR\ntuna/MS\ntundra/SM\ntune/MS\ntuneful/YP\ntunefulness/M\ntuneless/Y\ntuner/M\ntuneup/SM\ntungsten/M\ntunic/SM\ntunnel/JSMDRZG\ntunneler/M\ntunny/SM\ntuple/S\ntuppence\ntuppenny\ntuque/SM\nturban/SMD\nturbid\nturbidity/M\nturbine/SM\nturbo/SM\nturbocharge/ZGDRS\nturbocharger/M\nturbofan/SM\nturbojet/SM\nturboprop/SM\nturbot/SM\nturbulence/M\nturbulent/Y\nturd/MS\nturducken/SM\ntureen/SM\nturf/MDSG\nturfy\nturgid/Y\nturgidity/M\nturkey/SM\nturmeric/SM\nturmoil/MS\nturn/AMDRSZG\nturnabout/SM\nturnaround/SM\nturnbuckle/SM\nturncoat/SM\nturner/AM\nturning/MS\nturnip/SM\nturnkey/MS\nturnoff/MS\nturnout/MS\nturnover/MS\nturnpike/MS\nturnstile/SM\nturntable/SM\nturpentine/M\nturpitude/M\nturps\nturquoise/SM\nturret/SMD\nturtle/SM\nturtledove/SM\nturtleneck/SMD\ntush/MS\ntusk/MDS\ntussle/DSMG\ntussock/MS\ntussocky\ntut/SM\ntutelage/M\ntutelary\ntutor/SMDG\ntutored/U\ntutorial/SM\ntutorship/M\ntutted\ntutti/SM\ntutting\ntutu/MS\ntux/MS\ntuxedo/SM\ntwaddle/MZGDRS\ntwaddler/M\ntwain/M\ntwang/SMDG\ntwangy/RT\ntwas\ntwat/S\ntweak/SMDG\ntwee\ntweed/SM\ntweeds/M\ntweedy/RT\ntween\ntweet's\ntweet/ASDG\ntweeter/SM\ntweezers/M\ntwelfth/M\ntwelfths\ntwelve/SM\ntwelvemonth/M\ntwelvemonths\ntwentieth/M\ntwentieths\ntwenty/SMH\ntwerk/SDG\ntwerp/SM\ntwice\ntwiddle/MGDS\ntwiddly\ntwig/MS\ntwigged\ntwigging\ntwiggy/TR\ntwilight/M\ntwilit\ntwill/MD\ntwin/MDRSZG\ntwine/SM\ntwiner/M\ntwinge/DSMG\ntwink/SY\ntwinkle/MGJDS\ntwinkling/M\ntwinned\ntwinning\ntwinset/S\ntwirl/SMDRZG\ntwirler/M\ntwirly\ntwist's\ntwist/USDG\ntwister/MS\ntwisty/TR\ntwit/MS\ntwitch/GMDS\ntwitchy/RT\ntwitted\ntwitter/MDSG\ntwittery\ntwitting\ntwixt\ntwo/SM\ntwofer/SM\ntwofold\ntwopence/SM\ntwopenny\ntwosome/SM\ntwp\ntycoon/SM\ntying/AU\ntyke/MS\ntympani/M\ntympanic\ntympanist/MS\ntympanum/SM\ntype's\ntype/AGDS\ntypecast/GS\ntypeface/MS\ntypescript/MS\ntypeset/S\ntypesetter/MS\ntypesetting/M\ntypewrite/RSZG\ntypewriter/M\ntypewriting/M\ntypewritten\ntypewrote\ntyphoid/M\ntyphoon/MS\ntyphus/M\ntypical/UY\ntypicality/M\ntypification/M\ntypify/NGDS\ntyping/M\ntypist/SM\ntypo/MS\ntypographer/SM\ntypographic\ntypographical/Y\ntypography/M\ntypology/SM\ntyrannic\ntyrannical/Y\ntyrannicidal\ntyrannicide/S\ntyrannize/GDS\ntyrannosaur/MS\ntyrannosaurus/MS\ntyrannous\ntyranny/SM\ntyrant/SM\ntyro/MS\ntzatziki\nu/S\nubiquitous/Y\nubiquity/M\nudder/SM\nufologist/SM\nufology/M\nugh\nugliness/M\nugly/RTP\nuh\nuhf\nukase/SM\nukulele/SM\nulcer/SM\nulcerate/XDSGN\nulceration/M\nulcerous\nulna/M\nulnae\nulnar\nulster/MS\nult\nulterior\nultimate/MY\nultimatum/MS\nultimo\nultra/SM\nultraconservative/SM\nultrahigh\nultralight/SM\nultramarine/M\nultramodern\nultrasensitive\nultrashort\nultrasonic\nultrasonically\nultrasound/MS\nultraviolet/M\nululate/DSGNX\nululation/M\num\numbel/SM\number/M\numbilical\numbilici\numbilicus/M\numbra/SM\numbrage/M\numbrella/SM\numiak/SM\numlaut/MS\nump/SGMD\numpire/MGDS\numpteen/H\nunabridged/MS\nunacceptability\nunacceptable\nunaccommodating\nunaccountably\nunadventurous\nunaesthetic\nunalterably\nunambitious\nunanimity/M\nunanimous/Y\nunapparent\nunappetizing\nunappreciative\nunary\nunassertive\nunassimilable\nunassuming/Y\nunavailing/Y\nunaware/S\nunbeknownst\nunbend/SG\nunbent\nunbid\nunblinking/Y\nunblushing/Y\nunbosom/DG\nunbound/D\nunbox/GDS\nunbreakable\nunbroken\nuncanny/T\nuncap/S\nuncaring\nuncatalogued\nunceasing/Y\nunchangeable\nuncharacteristic\nuncharitable\nunchaste/RT\nuncial/M\nuncle/SM\nunclean/DRPT\nuncleanly/T\nunclear/DRT\nuncomfortable\nuncommon/T\nuncompelling\nuncomplaining/Y\nuncomplicated\nuncomprehending/Y\nuncompromising/Y\nunconditional/Y\nuncongenial\nunconscionable\nunconscionably\nunconscious/M\nunconstitutional/Y\nuncontrollably\nuncontroversial\nuncool\nuncooperative\nuncouth/Y\nuncrushable\nunction/SM\nunctuous/YP\nunctuousness/M\nuncut\nundaunted/Y\nundecided/SM\nundemonstrative/Y\nundeniably\nunder\nunderachieve/LZGDRS\nunderachiever/M\nunderact/SDG\nunderage\nunderappreciated\nunderarm/SM\nunderbelly/SM\nunderbid/S\nunderbidding\nunderbrush/M\nundercarriage/MS\nundercharge/MGDS\nunderclass/MS\nunderclassman/M\nunderclassmen\nunderclothes/M\nunderclothing/M\nundercoat/GJSMD\nundercoating/M\nundercover\nundercurrent/SM\nundercut/SM\nundercutting\nunderdeveloped\nunderdevelopment/M\nunderdog/SM\nunderdone\nunderemployed\nunderemployment/M\nunderestimate/DSMGNX\nunderestimation/M\nunderexpose/GDS\nunderexposure/MS\nunderfed\nunderfeed/GS\nunderfloor\nunderflow\nunderfoot\nunderfunded\nunderfur/M\nundergarment/SM\nundergo/G\nundergoes\nundergone\nundergrad/S\nundergraduate/SM\nunderground/MS\nundergrowth/M\nunderhand\nunderhanded/PY\nunderhandedness/M\nunderinflated\nunderlain\nunderlay/SM\nunderlie/S\nunderline/MGDS\nunderling/MS\nunderlip/SM\nunderlying\nundermanned\nundermentioned\nundermine/GDS\nundermost\nunderneath/M\nunderneaths\nundernourished\nundernourishment/M\nunderpaid\nunderpants/M\nunderpart/MS\nunderpass/MS\nunderpay/GSL\nunderpayment/SM\nunderpin/S\nunderpinned\nunderpinning/MS\nunderplay/DGS\nunderpopulated\nunderprivileged\nunderproduction/M\nunderrate/GDS\nunderrepresented\nunderscore/DSMG\nundersea/S\nundersecretary/SM\nundersell/GS\nundersexed\nundershirt/SM\nundershoot/SG\nundershorts/M\nundershot\nunderside/MS\nundersign/DGS\nundersigned/M\nundersized\nunderskirt/SM\nundersold\nunderstaffed\nunderstand/SGBJ\nunderstandably\nunderstanding/MY\nunderstate/DSLG\nunderstatement/SM\nunderstood\nunderstudy/GDSM\nundertake/ZGJRS\nundertaken\nundertaker/M\nundertaking/M\nunderthings/M\nundertone/MS\nundertook\nundertow/SM\nunderused\nunderutilized\nundervaluation/M\nundervalue/DSG\nunderwater\nunderway\nunderwear/M\nunderweight/M\nunderwent\nunderwhelm/DGS\nunderwire/DS\nunderworld/MS\nunderwrite/ZGRS\nunderwriter/M\nunderwritten\nunderwrote\nundesirable/MS\nundies/M\nundo\nundoubted/Y\nundramatic\nundue\nundulant\nundulate/DSXGN\nundulation/M\nundying\nunearthliness/M\nunease/M\nuneasy/T\nuneatable\nuneconomic\nunemployed/M\nunending\nunenterprising\nunequal/DY\nunerring/Y\nunessential\nuneven/Y\nunexceptionably\nunexcited\nunexciting\nunexpected/YP\nunexpectedness/M\nunfailing/Y\nunfair/PTRY\nunfaltering\nunfamiliar\nunfathomably\nunfed\nunfeeling/Y\nunfeminine\nunfit/S\nunfitting\nunfix/GDS\nunflagging/Y\nunflappability/M\nunflappable\nunflappably\nunflattering\nunflinching/Y\nunforgettably\nunforgivably\nunfortunate/MS\nunfriendly/T\nunfrock/DG\nunfruitful\nunfunny\nungainliness/M\nungainly/RPT\nungenerous\nungentle\nungodly/T\nungraceful/Y\nungrudging\nunguarded\nunguent/SM\nungulate/MS\nunhandy/T\nunhappy/T\nunhealthful\nunhealthy/T\nunhistorical\nunholy/T\nunhurt\nunicameral\nunicellular\nunicorn/SM\nunicycle/SM\nunidirectional\nunification/AM\nuniform/SMDYG\nuniformity/M\nunify/AGDSN\nunilateral/Y\nunilateralism\nunimportant\nunimpressive\nuninformative\nuninhibited/Y\nuninstall/BSZGDR\nuninsured\nunintelligent\nunintended\nuninteresting\nuninterrupted/Y\nuninterruptible\nuninviting\nunion/ASM\nunionism/M\nunionist/MS\nunique/YTRP\nuniqueness/M\nunisex/M\nunison/M\nunitary\nunite/AEGSD\nunitedly\nunities\nunitize/DSG\nunity/EM\nunivalent\nunivalve/SM\nuniversal/MYS\nuniversalism\nuniversalist\nuniversality/M\nuniversalize/DSG\nuniverse/SM\nuniversity/SM\nunivocal\nunjust/Y\nunkempt\nunkind/T\nunkindly/T\nunknowable/M\nunknown/SM\nunleaded/M\nunless\nunlike/PB\nunlikely/T\nunlit\nunlock/DSG\nunlovable\nunlovely/TR\nunloving\nunlucky/T\nunmanly/T\nunmarried\nunmeaning\nunmentionable/MS\nunmentionables/M\nunmet\nunmindful\nunmissable\nunmistakably\nunmoral\nunmovable\nunmusical\nunnecessary\nunnerving/Y\nunobservant\nunoffensive\nunofficial/Y\nunoriginal\nunpeople\nunperceptive\nunpersuasive\nunpick/GDS\nunpin/S\nunpleasing\nunpolitical\nunpopular\nunpractical\nunprecedented/Y\nunprofessional/Y\nunpromising\nunpropitious\nunquestioning/Y\nunquiet/TR\nunread/B\nunready\nunreal\nunreasoning\nunregenerate\nunrelated\nunrelenting/Y\nunrelieved/Y\nunremarkable\nunremitting/Y\nunrepentant\nunreported\nunrepresentative\nunrest/M\nunrevealing\nunripe/TR\nunroll/GDS\nunromantic\nunruliness/M\nunruly/RTP\nunsafe/YTR\nunsaleable\nunsavory\nunscathed\nunseeing/Y\nunseemly/T\nunseen/M\nunsentimental\nunset\nunshakable\nunshakably\nunshapely\nunshockable\nunshorn\nunsightliness/M\nunsightly/PT\nunsmiling\nunsociable\nunsocial\nunsold\nunsound/PRYT\nunspeakable\nunspeakably\nunspecific\nunspectacular\nunsporting\nunstable\nunsteady/TRP\nunstinting/Y\nunstrapping\nunsubstantial\nunsubtle\nunsuitable\nunsure\nunsuspecting/Y\nunsymmetrical\nuntactful\nunthinkably\nunthinking/Y\nuntidy/PTR\nuntil\nuntimely/T\nuntiring/Y\nuntouchable/MS\nuntoward\nuntrue/RT\nuntrustworthy\nuntruth/M\nunutterable\nunutterably\nunwarrantable\nunwary/T\nunwavering\nunwed\nunwelcome/G\nunwell\nunwieldiness/M\nunwieldy/TRP\nunwise/RYT\nunworried\nunworthy/T\nunwound\nunwrapping\nunyielding\nup/S\nupbeat/MS\nupbraid/SGD\nupbringing/MS\nupchuck/SGD\nupcoming\nupcountry/M\nupdate/MGDRS\nupdraft/MS\nupend/SGD\nupfront\nupgrade/MGDS\nupheaval/MS\nupheld\nuphill/MS\nuphold/ZGRS\nupholder/M\nupholster/ASGD\nupholsterer/MS\nupholstery/M\nupkeep/M\nupland/MS\nuplift/JSMDG\nupload/SDG\nupmarket\nupmost\nupon\nupped\nupper/SM\nuppercase/M\nupperclassman/M\nupperclassmen\nupperclasswoman\nupperclasswomen\nuppercut/MS\nuppercutting\nuppermost\nupping\nuppish\nuppity\nupraise/DSG\nuprear/GSD\nupright/MYPS\nuprightness/M\nuprising/SM\nupriver\nuproar/SM\nuproarious/Y\nuproot/GSD\nupscale\nupset/SM\nupsetting\nupshot/SM\nupside/SM\nupsilon/MS\nupstage/GDS\nupstairs\nupstanding\nupstart/MDSG\nupstate/M\nupstream\nupstroke/SM\nupsurge/MGDS\nupswing/MS\nuptake/SM\nuptempo\nupthrust/GSM\nuptick/SM\nuptight\nuptown/M\nuptrend\nupturn/GSMD\nupward/SY\nupwind\nuracil/M\nuranium/M\nurban\nurbane/RYT\nurbanity/M\nurbanization/M\nurbanize/DSG\nurbanologist/MS\nurbanology/M\nurchin/SM\nurea/M\nuremia/M\nuremic\nureter/SM\nurethane/M\nurethra/M\nurethrae\nurethral\nurge/MGDS\nurgency/M\nurgent/Y\nuric\nurinal/SM\nurinalyses\nurinalysis/M\nurinary\nurinate/GNDS\nurination/M\nurine/M\nurn/SM\nurogenital\nurological\nurologist/MS\nurology/M\nursine\nurticaria/M\nusability/M\nusable/UA\nusage/SM\nuse/AEDSMG\nused/U\nuseful/PY\nusefulness/M\nuseless/YP\nuselessness/M\nuser/MS\nusername/MS\nusher/SMDG\nusherette/SM\nusu\nusual's\nusual/UY\nusurer/SM\nusurious\nusurp/SDRZG\nusurpation/M\nusurper/M\nusury/M\nutensil/SM\nuteri\nuterine\nuterus/M\nutilitarian/MS\nutilitarianism/M\nutility/SM\nutilization/M\nutilize/GBDS\nutmost/M\nutopia/SM\nutter/SDYG\nutterance/SM\nuttermost/M\nuveitis\nuvula/SM\nuvular/MS\nuxorious\nv/AS\nvac/S\nvacancy/SM\nvacant/Y\nvacate/DSG\nvacation/ZGMDRS\nvacationer/M\nvacationist/SM\nvaccinate/GNDSX\nvaccination/M\nvaccine/SM\nvacillate/XGNDS\nvacillation/M\nvacuity/M\nvacuole/MS\nvacuous/YP\nvacuousness/M\nvacuum/GSMD\nvagabond/SMDG\nvagabondage/M\nvagarious\nvagary/SM\nvagina/SM\nvaginae\nvaginal/Y\nvaginitis\nvagrancy/M\nvagrant/MS\nvague/RYTP\nvagueness/M\nvagus\nvain/RYT\nvainglorious/Y\nvainglory/M\nval\nvalance/MS\nvale/MS\nvalediction/MS\nvaledictorian/SM\nvaledictory/SM\nvalence/MS\nvalency/SM\nvalentine/SM\nvalet/SMDG\nvaletudinarian/MS\nvaletudinarianism/M\nvaliance/M\nvaliant/Y\nvalid/Y\nvalidate/IGNDS\nvalidation/IM\nvalidations\nvalidity/IM\nvalidness/M\nvalise/SM\nvalley/SM\nvalor/M\nvalorous/Y\nvaluable/MS\nvaluate/DSG\nvaluation/CAMS\nvalue's\nvalue/CAGSD\nvalueless\nvaluer/SM\nvalve/DSMG\nvalveless\nvalvular\nvamoose/DSG\nvamp/AMDGS\nvampire/SM\nvan/SM\nvanadium/M\nvandal/SM\nvandalism/M\nvandalize/DSG\nvane/MS\nvanguard/MS\nvanilla/SM\nvanish/JDSG\nvanity/SM\nvanned\nvanning\nvanquish/ZGDRS\nvanquisher/M\nvantage/SM\nvape/GDS\nvapid/YP\nvapidity/M\nvapidness/M\nvapor/SM\nvaporization/M\nvaporize/DRSZG\nvaporizer/M\nvaporous\nvaporware\nvapory\nvaquero/MS\nvar/S\nvariability/IM\nvariable/ISM\nvariably/I\nvariance/SM\nvariant/MS\nvariate/NX\nvariation/M\nvaricolored\nvaricose\nvaried/U\nvariegate/DSGN\nvariegation/M\nvarietal/SM\nvariety/SM\nvarious/Y\nvarlet/SM\nvarmint/MS\nvarnish/GMDS\nvarnished/U\nvarsity/SM\nvary/DSG\nvarying/U\nvascular\nvase/MS\nvasectomy/SM\nvasoconstriction\nvasomotor\nvassal/SM\nvassalage/M\nvast/MRYTSP\nvastness/M\nvat/SM\nvatted\nvatting\nvaudeville/M\nvaudevillian/MS\nvault/SMDRZG\nvaulter/M\nvaulting/M\nvaunt/SMDG\nvb\nveal/M\nvector/SGMD\nveejay/SM\nveep/MS\nveer/MDGS\nveg/M\nvegan/SM\nveganism\nvegeburger/S\nveges\nvegetable/SM\nvegetarian/SM\nvegetarianism/M\nvegetate/GNVDS\nvegetation/M\nvegged\nvegges\nveggie/SM\nveggieburger/S\nvegging\nvehemence/M\nvehemency/M\nvehement/Y\nvehicle/MS\nvehicular\nveil's\nveil/UDGS\nvein/MDGS\nvela\nvelar/SM\nveld/MS\nvellum/M\nvelocipede/MS\nvelocity/SM\nvelodrome/S\nvelour/MS\nvelum/M\nvelvet/M\nvelveteen/M\nvelvety\nvenal/Y\nvenality/M\nvenation/M\nvend/DGS\nvendetta/SM\nvendible\nvendor/MS\nveneer/MDGS\nvenerability/M\nvenerable\nvenerate/DSGN\nveneration/M\nvenereal\nvengeance/M\nvengeful/AY\nvenial\nvenireman/M\nveniremen\nvenison/M\nvenom/M\nvenomous/Y\nvenous\nvent's\nvent/DGS\nventilate/GNDS\nventilation/M\nventilator/SM\nventilatory\nventral\nventricle/SM\nventricular\nventriloquism/M\nventriloquist/SM\nventriloquy/M\nventure/DSMG\nventuresome/PY\nventuresomeness/M\nventurous/PY\nventurousness/M\nvenue/ASM\nveracious/Y\nveracity/M\nveranda/SM\nverapamil\nverb/KMS\nverbal/MYS\nverbalization/M\nverbalize/GDS\nverbatim\nverbena/SM\nverbiage/MS\nverbose/Y\nverbosity/M\nverboten\nverdant/Y\nverdict/SM\nverdigris/GMDS\nverdure/M\nverge's\nverge/FDSG\nverger/MS\nverifiable/U\nverification/M\nverified/U\nverify/DSNG\nverily\nverisimilitude/M\nveritable\nveritably\nverity/SM\nvermicelli/M\nvermiculite/M\nvermiform\nvermilion/M\nvermin/M\nverminous\nvermouth/M\nvernacular/MS\nvernal\nvernier/SM\nveronica/M\nverruca/SM\nverrucae\nversa\nversatile\nversatility/M\nverse/AFNGMSDX\nversed/U\nversification/M\nversifier/M\nversify/ZGNDRS\nversion/AFIMS\nversioned\nversioning\nverso/SM\nversus\nvert/A\nvertebra/M\nvertebrae\nvertebral\nvertebrate/IMS\nvertex/MS\nvertical/MYS\nvertices\nvertiginous\nvertigo/M\nverve/M\nvery/RT\nvesicle/SM\nvesicular\nvesiculate\nvesper/MS\nvessel/MS\nvest's\nvest/ILDGS\nvestal/MS\nvestibule/MS\nvestige/SM\nvestigial/Y\nvesting/M\nvestment/IMS\nvestry/SM\nvestryman/M\nvestrymen\nvet/SM\nvetch/MS\nveteran/SM\nveterinarian/MS\nveterinary/SM\nveto/MDG\nvetoes\nvetted\nvetting\nvex/GDS\nvexation/SM\nvexatious/Y\nvhf\nvi\nvia\nviability/M\nviable\nviably\nviaduct/SM\nvial/MS\nviand/SM\nvibe/MS\nvibes/M\nvibraharp/SM\nvibrancy/M\nvibrant/Y\nvibraphone/MS\nvibraphonist/MS\nvibrate/GNDSX\nvibration/M\nvibrato/MS\nvibrator/SM\nvibratory\nviburnum/SM\nvicar/SM\nvicarage/SM\nvicarious/YP\nvicariousness/M\nvice/CMS\nviced\nvicegerent/SM\nvicennial\nviceregal\nviceroy/MS\nvichyssoise/M\nvicing\nvicinity/M\nvicious/YP\nviciousness/M\nvicissitude/SM\nvictim/MS\nvictimization/M\nvictimize/GDS\nvictimless\nvictor/MS\nvictorious/Y\nvictory/SM\nvictual/SMDG\nvicuna/MS\nvidelicet\nvideo/GSMD\nvideocassette/SM\nvideoconferencing\nvideodisc/MS\nvideophone/MS\nvideotape/DSMG\nvideotex\nvie/DS\nview/AMDRSZG\nviewable\nviewer/AM\nviewership/M\nviewfinder/SM\nviewing/SM\nviewpoint/MS\nvigesimal\nvigil/SM\nvigilance/M\nvigilant/Y\nvigilante/SM\nvigilantism/M\nvigilantist/M\nvignette/DSMG\nvignettist/MS\nvigor/M\nvigorous/Y\nvii\nviii\nviking/MS\nvile/YTPR\nvileness/M\nvilification/M\nvilify/DSNG\nvilla/SM\nvillage/RSMZ\nvillager/M\nvillain/SM\nvillainous\nvillainy/SM\nvillein/SM\nvilleinage/M\nvilli\nvillus/M\nvim/M\nvinaigrette/M\nvincible/I\nvindicate/XDSGN\nvindication/M\nvindicator/MS\nvindictive/PY\nvindictiveness/M\nvine/MS\nvinegar/M\nvinegary\nvineyard/MS\nvino/M\nvinous\nvintage/MS\nvintner/MS\nvinyl/SM\nviol/MBS\nviola/SM\nviolable/I\nviolate/GNDSX\nviolation/M\nviolator/SM\nviolence/M\nviolent/Y\nviolet/MS\nviolin/MS\nviolincello/S\nviolinist/SM\nviolist/MS\nvioloncellist/SM\nvioloncello/MS\nviper/SM\nviperous\nvirago/M\nviragoes\nviral\nvireo/SM\nvirgin/MS\nvirginal/SM\nvirginity/M\nvirgule/MS\nvirile\nvirility/M\nvirologist/SM\nvirology/M\nvirtual/Y\nvirtualization\nvirtue/SM\nvirtuosity/M\nvirtuoso/M\nvirtuous/YP\nvirtuousness/M\nvirulence/M\nvirulent/Y\nvirus/MS\nvisa/MDSG\nvisage/MS\nviscera\nvisceral/Y\nviscid\nviscose/M\nviscosity/M\nviscount/SM\nviscountcy/SM\nviscountess/MS\nviscous\nviscus/M\nvise/ACMGDS\nvisibility/IM\nvisible/I\nvisibly/I\nvision/KGDSM\nvisionary/SM\nvisit's\nvisit/ASGD\nvisitant/MS\nvisitation/MS\nvisitor/MS\nvisor/SM\nvista/SM\nvisual/SMY\nvisualization/SM\nvisualize/DRSZG\nvisualizer/M\nvita/M\nvitae\nvital/SY\nvitality/M\nvitalization/AM\nvitalize/CAGSD\nvitals/M\nvitamin/MS\nvitiate/GNDS\nvitiation/M\nviticulture/M\nviticulturist/MS\nvitreous\nvitrifaction/M\nvitrification/M\nvitrify/GNDS\nvitrine/SM\nvitriol/M\nvitriolic\nvitriolically\nvittles/M\nvituperate/GNVDS\nvituperation/M\nviva/MS\nvivace\nvivacious/PY\nvivaciousness/M\nvivacity/M\nvivaria\nvivarium/SM\nvivid/RYTP\nvividness/M\nvivify/ADSG\nviviparous\nvivisect/DGS\nvivisection/M\nvivisectional\nvivisectionist/SM\nvixen/SM\nvixenish/Y\nviz\nvizier/SM\nvlf\nvocab\nvocable/MS\nvocabulary/SM\nvocal/SMY\nvocalic\nvocalist/SM\nvocalization/MS\nvocalize/DSG\nvocation/FIKASM\nvocational/Y\nvocative/MS\nvociferate/DSGN\nvociferation/M\nvociferous/YP\nvociferousness/M\nvodka/SM\nvogue/SM\nvoguish\nvoice/IDSMG\nvoiced/U\nvoiceless/PY\nvoicelessness/M\nvoicemail/SM\nvoid/MDSGB\nvoila\nvoile/M\nvol/S\nvolatile\nvolatility/M\nvolatilize/DSG\nvolcanic\nvolcanism\nvolcano/M\nvolcanoes\nvole/MS\nvolition/M\nvolitional\nvolley/GSMD\nvolleyball/MS\nvolt/AMS\nvoltage/MS\nvoltaic\nvoltmeter/SM\nvolubility/M\nvoluble\nvolubly\nvolume/SM\nvolumetric\nvoluminous/YP\nvoluminousness/M\nvoluntarily/I\nvoluntarism/M\nvoluntary/SM\nvolunteer/SGMD\nvolunteerism/M\nvoluptuary/SM\nvoluptuous/PY\nvoluptuousness/M\nvolute/SM\nvomit/SMDG\nvoodoo/GSMD\nvoodooism/M\nvoracious/PY\nvoraciousness/M\nvoracity/M\nvortex/MS\nvotary/SM\nvote's\nvote/CGVDS\nvoter/SM\nvouch/DRSZG\nvoucher/M\nvouchsafe/DSG\nvow/SGMD\nvowel/SM\nvoyage/MZGDRS\nvoyager/M\nvoyageur/SM\nvoyeur/MS\nvoyeurism/M\nvoyeuristic\nvulcanization/M\nvulcanize/GDS\nvulgar/RYT\nvulgarian/MS\nvulgarism/MS\nvulgarity/SM\nvulgarization/M\nvulgarize/ZGDRS\nvulgarizer/M\nvulnerabilities\nvulnerability/IM\nvulnerable/I\nvulnerably/I\nvulpine\nvulture/SM\nvulturous\nvulva/M\nvulvae\nvuvuzela/MS\nvying\nw/DNXTGVJ\nwabbit/S\nwack/MRTS\nwackiness/M\nwacko/SM\nwacky/RPT\nwad/SZGMDR\nwadded\nwadding/M\nwaddle/DSMG\nwade/MS\nwader/M\nwaders/M\nwadge/S\nwadi/MS\nwafer/SM\nwaffle/MZGDRS\nwaffler/M\nwaft/MDGS\nwag/SZGMDR\nwage/MS\nwaged/U\nwager/ZGMDR\nwagerer/M\nwagged\nwaggery/SM\nwagging\nwaggish/YP\nwaggishness/M\nwaggle/MGDS\nwagon/ZSMR\nwagoner/M\nwagtail/SM\nwaif/MS\nwail/MDRZGS\nwailer/M\nwailing/M\nwain/MS\nwainscot/SJMDG\nwainscoting/M\nwainwright/MS\nwaist/SM\nwaistband/MS\nwaistcoat/MS\nwaistline/MS\nwait/MDRZGS\nwaiter/M\nwaiting/M\nwaitperson/MS\nwaitress/MS\nwaitstaff/M\nwaive/DRSZG\nwaiver/M\nwake/MGJDS\nwakeful/PY\nwakefulness/M\nwaken/GSD\nwaldo/S\nwaldoes\nwale/MGDS\nwalk/MDRZGS\nwalkabout/S\nwalkaway/MS\nwalker/M\nwalkies\nwalking/M\nwalkout/SM\nwalkover/MS\nwalkway/SM\nwall/MDGS\nwallaby/SM\nwallah\nwallahs\nwallboard/M\nwallet/MS\nwalleye/DSM\nwallflower/MS\nwallop/MDSJG\nwalloping/M\nwallow/MDSG\nwallpaper/SMDG\nwally/S\nwalnut/MS\nwalrus/MS\nwaltz/ZGMDRS\nwaltzer/M\nwampum/M\nwan/GPDY\nwand/MS\nwander/DRSJZG\nwanderer/M\nwanderings/M\nwanderlust/SM\nwane/MS\nwangle/MZGDRS\nwangler/M\nwank/DRZGS\nwanna\nwannabe/SM\nwannabee/S\nwanner\nwanness/M\nwannest\nwant/MDGS\nwanted/U\nwanton/MDYSPG\nwantonness/M\nwapiti/MS\nwar/SM\nwarble/MZGDRS\nwarbler/M\nwarbonnet/SM\nward/AMDGS\nwarden/MS\nwarder/MS\nwardress/S\nwardrobe/SM\nwardroom/SM\nware/MS\nwarehouse/DSMG\nwarez\nwarfare/M\nwarfarin\nwarhead/MS\nwarhorse/SM\nwarily/U\nwariness/UM\nwarlike\nwarlock/MS\nwarlord/MS\nwarm/PDRYHZTGS\nwarmblooded\nwarmer/M\nwarmhearted/P\nwarmheartedness/M\nwarmish\nwarmness/M\nwarmonger/SMG\nwarmongering/M\nwarmth/M\nwarn/JDGS\nwarning/M\nwarp/MDGS\nwarpaint\nwarpath/M\nwarpaths\nwarplane/MS\nwarrant/GMDS\nwarranted/U\nwarranty/DSMG\nwarred\nwarren/MS\nwarring\nwarrior/SM\nwarship/SM\nwart/MS\nwarthog/SM\nwartime/M\nwarty/TR\nwary/UPRT\nwas\nwasabi\nwash/BJMDRSZG\nwashable/SM\nwashbasin/SM\nwashboard/SM\nwashbowl/SM\nwashcloth/M\nwashcloths\nwashed/U\nwasher/M\nwasherwoman/M\nwasherwomen\nwashing/M\nwashout/MS\nwashrag/MS\nwashroom/MS\nwashstand/SM\nwashtub/MS\nwashy/TR\nwasn't\nwasp/MS\nwaspish/YP\nwaspishness/M\nwassail/SMDG\nwast\nwastage/M\nwaste/DRSMZG\nwastebasket/MS\nwasteful/PY\nwastefulness/M\nwasteland/SM\nwastepaper/M\nwaster/M\nwastewater\nwastrel/SM\nwatch/BZGMDRS\nwatchable/U\nwatchband/MS\nwatchdog/SM\nwatcher/M\nwatchful/YP\nwatchfulness/M\nwatchmaker/MS\nwatchmaking/M\nwatchman/M\nwatchmen\nwatchstrap/S\nwatchtower/SM\nwatchword/MS\nwater/GSMD\nwaterbed/MS\nwaterbird/SM\nwaterboard/MDJSG\nwaterboarding/M\nwaterborne\nwatercolor/MS\nwatercourse/SM\nwatercraft/M\nwatercress/M\nwaterfall/SM\nwaterfowl/SM\nwaterfront/MS\nwaterhole/SM\nwateriness/M\nwaterlily/SM\nwaterline/MS\nwaterlogged\nwatermark/MDGS\nwatermelon/SM\nwatermill/MS\nwaterproof/SMDG\nwaterproofing/M\nwaters/M\nwatershed/MS\nwaterside/MS\nwaterspout/SM\nwatertight\nwaterway/MS\nwaterwheel/SM\nwaterworks/M\nwatery/PTR\nwatt/MS\nwattage/M\nwattle/MGDS\nwave/MZGDRS\nwaveband/S\nwaveform\nwavefront\nwavelength/M\nwavelengths\nwavelet/SM\nwavelike\nwaver/ZGMDR\nwaverer/M\nwavering/Y\nwaviness/M\nwavy/PRT\nwax/GMDNS\nwaxiness/M\nwaxwing/SM\nwaxwork/SM\nwaxy/RPT\nway/SM\nwaybill/SM\nwayfarer/MS\nwayfaring/SM\nwaylaid\nwaylay/RSZG\nwaylayer/M\nwayside/SM\nwayward/PY\nwaywardness/M\nwazoo/S\nwe\nwe'd\nwe'll\nwe're\nwe've\nweak/PNRYXT\nweaken/DRZG\nweakener/M\nweakfish/MS\nweakish\nweakling/SM\nweakness/MS\nweal/MHS\nwealth/M\nwealthiness/M\nwealthy/TRP\nwean/DGS\nweapon/MS\nweaponize/GDS\nweaponless\nweaponry/M\nwear/MRBJSZG\nwearable/U\nwearer/M\nwearied/U\nwearily\nweariness/M\nwearisome/Y\nweary/TGDRSP\nweasel/MDYSG\nweather/SMDG\nweatherboard/SG\nweathercock/MS\nweathering/M\nweatherization/M\nweatherize/DSG\nweatherman/M\nweathermen\nweatherperson/MS\nweatherproof/GSD\nweatherstrip/S\nweatherstripped\nweatherstripping/M\nweave/DRSMZG\nweaver/M\nweaving/M\nweb/SM\nwebbed\nwebbing/M\nwebcam/MS\nwebcast/SMG\nwebfeet\nwebfoot/M\nwebinar/SM\nwebisode/MS\nweblog/MS\nwebmaster/SM\nwebmistress/MS\nwebsite/SM\nwed/AS\nwedded/A\nwedder\nwedding/SM\nwedge/DSMG\nwedgie/MS\nwedlock/M\nwee/RSMT\nweed/MDRSZG\nweeder/M\nweedkiller/S\nweedless\nweedy/TR\nweeing\nweek/MYS\nweekday/SM\nweekend/SZGMDR\nweekly/SM\nweeknight/SM\nween/DSG\nweenie/MTRS\nweensy/RT\nweeny\nweep/MRJSZG\nweeper/M\nweepie\nweepy/TRSM\nweevil/MS\nweft/MS\nweigh's\nweigh/AGD\nweighbridge/S\nweighs/A\nweight/MDSJG\nweighted/U\nweightily\nweightiness/M\nweightless/YP\nweightlessness/M\nweightlifter/MS\nweightlifting/M\nweighty/PTR\nweir/MS\nweird/PTRY\nweirdie/MS\nweirdness/M\nweirdo/MS\nwelcome/MGDS\nweld/MDRBSZG\nwelder/M\nwelfare/M\nwelkin/M\nwell/MDPSG\nwellhead/SM\nwellie\nwellington/MS\nwellness/M\nwellspring/MS\nwelly/S\nwelsh/ZGDRS\nwelsher/M\nwelt/MDRSZG\nwelter/GMD\nwelterweight/SM\nwen/M\nwench/MS\nwend/DSG\nwent\nwept\nwere\nweren't\nwerewolf/M\nwerewolves\nwest/M\nwestbound\nwesterly/SM\nwestern/SZMR\nwesterner/M\nwesternization/M\nwesternize/GDS\nwesternmost\nwestward/S\nwet/SMYP\nwetback/SM\nwetland/SM\nwetness/M\nwetter/SM\nwettest\nwetting\nwetware/S\nwhack/SJZGMDR\nwhacker/M\nwhale/DRSMZG\nwhaleboat/MS\nwhalebone/M\nwhaler/M\nwhaling/M\nwham/MS\nwhammed\nwhamming\nwhammy/SM\nwharf/M\nwharves\nwhat/MS\nwhatchamacallit/MS\nwhatever\nwhatnot/M\nwhatshername\nwhatshisname\nwhatsit/S\nwhatsoever\nwheal/SM\nwheat/MN\nwheatgerm\nwheatmeal\nwhee\nwheedle/DRSZG\nwheedler/M\nwheel/SMDRG\nwheelbarrow/SM\nwheelbase/SM\nwheelchair/SM\nwheelhouse/MS\nwheelie/SM\nwheelwright/MS\nwheeze/DSMG\nwheezily\nwheeziness/M\nwheezy/PRT\nwhelk/SMD\nwhelm/SDG\nwhelp/SMDG\nwhen/MS\nwhence\nwhenever\nwhensoever\nwhere/SM\nwhereabouts/M\nwhereas\nwhereat\nwhereby\nwherefore/MS\nwherein\nwhereof\nwhereon\nwheresoever\nwhereto\nwhereupon\nwherever\nwherewith\nwherewithal/M\nwherry/SM\nwhet/S\nwhether\nwhetstone/SM\nwhetted\nwhetting\nwhew\nwhey/M\nwhich\nwhichever\nwhiff/SMDG\nwhiffletree/MS\nwhile/DSMG\nwhilom\nwhilst\nwhim/MS\nwhimper/MDGS\nwhimsical/Y\nwhimsicality/M\nwhimsy/SM\nwhine/DRSMZG\nwhiner/M\nwhinge/DRSZG\nwhingeing\nwhinny/GDSM\nwhiny/RT\nwhip/MS\nwhipcord/M\nwhiplash/MS\nwhipped\nwhipper/MS\nwhippersnapper/MS\nwhippet/MS\nwhipping/SM\nwhippletree/SM\nwhippoorwill/MS\nwhipsaw/MDGS\nwhir/MS\nwhirl/SMDG\nwhirligig/MS\nwhirlpool/MS\nwhirlwind/MS\nwhirlybird/SM\nwhirred\nwhirring\nwhisk/SMDRZG\nwhisker/MD\nwhiskery\nwhiskey/MS\nwhiskys\nwhisper/MDRSZG\nwhisperer/M\nwhist/M\nwhistle/MZGDRS\nwhistler/M\nwhit/MDNRSXTGJ\nwhite/SPM\nwhitebait\nwhiteboard/S\nwhitecap/SM\nwhitefish/MS\nwhitehead/MS\nwhitelist/GDS\nwhiten/ZGDRJ\nwhitener/M\nwhiteness/M\nwhitening/M\nwhiteout/SM\nwhitetail/MS\nwhitewall/SM\nwhitewash/MDSG\nwhitewater/M\nwhitey/SM\nwhither\nwhiting/M\nwhitish\nwhittle/ZGDRS\nwhittler/M\nwhiz/M\nwhizkid/M\nwhizzbang/MS\nwhizzed\nwhizzes\nwhizzing\nwho'd\nwho'll\nwho're\nwho've\nwho/M\nwhoa\nwhodunit/MS\nwhoever\nwhole/SMP\nwholefood/S\nwholegrain\nwholehearted/YP\nwholeheartedness/M\nwholemeal\nwholeness/M\nwholesale/MZGDRS\nwholesaler/M\nwholesome/UP\nwholesomely\nwholesomeness/UM\nwholewheat\nwholly\nwhom\nwhomever\nwhomsoever\nwhoop/SMDRZG\nwhoopee/S\nwhooper/M\nwhoosh/MDSG\nwhop/S\nwhopped\nwhopper/SM\nwhopping\nwhore/SMG\nwhorehouse/MS\nwhoreish\nwhorish\nwhorl/SMD\nwhose\nwhoso\nwhosoever\nwhup/S\nwhupped\nwhupping\nwhy'd\nwhy/M\nwhys\nwick/MDRSZ\nwicked/TPRY\nwickedness/M\nwicker/M\nwickerwork/M\nwicket/SM\nwide/YTRP\nwidemouthed\nwiden/SDRZG\nwidener/M\nwideness/M\nwidescreen/MS\nwidespread\nwidget/S\nwidow/SMDRZG\nwidower/M\nwidowhood/M\nwidth/M\nwidths\nwield/SDRZG\nwielder/M\nwiener/SM\nwienie/SM\nwife/MY\nwifeless\nwig/SM\nwigeon/M\nwigged\nwigging\nwiggle/DRSMZG\nwiggler/M\nwiggly/TR\nwight/SM\nwiglet/SM\nwigwag/SM\nwigwagged\nwigwagging\nwigwam/SM\nwiki/MS\nwild/MRYSTP\nwildcard/MS\nwildcat/MS\nwildcatted\nwildcatter/MS\nwildcatting\nwildebeest/MS\nwilderness/MS\nwildfire/MS\nwildflower/SM\nwildfowl/M\nwildlife/M\nwildness/M\nwilds/M\nwile/MGDS\nwiliness/M\nwill/MDS\nwillful/PY\nwillfulness/M\nwillies/M\nwilling/UPY\nwillingness/UM\nwilliwaw/MS\nwillow/SM\nwillowy\nwillpower/M\nwilly/S\nwilt/MDSG\nwily/RTP\nwimp/MDSG\nwimpish\nwimple/DSMG\nwimpy/RT\nwin/SGMD\nwince/DSMG\nwinch/MDSG\nwind's\nwind/UASG\nwindbag/SM\nwindblown\nwindbreak/SZMR\nwindbreaker/M\nwindburn/MD\nwindcheater/S\nwindchill/M\nwinded\nwinder/SM\nwindfall/MS\nwindflower/MS\nwindily\nwindiness/M\nwinding's\nwindjammer/SM\nwindlass/MS\nwindless\nwindmill/MDGS\nwindow/SMDG\nwindowless\nwindowpane/SM\nwindowsill/SM\nwindpipe/MS\nwindproof\nwindrow/SM\nwindscreen/SM\nwindshield/SM\nwindsock/MS\nwindstorm/MS\nwindsurf/ZGDRS\nwindsurfer/M\nwindsurfing/M\nwindswept\nwindup/SM\nwindward/M\nwindy/RTP\nwine/MS\nwineglass/MS\nwinegrower/MS\nwinemaker/MS\nwinery/SM\nwing/MDRZG\nwingding/MS\nwingless\nwinglike\nwingnut/SM\nwingspan/MS\nwingspread/SM\nwingtip/SM\nwink/MDRSZG\nwinker/M\nwinkle/DSMG\nwinnable/U\nwinner/SM\nwinning/MYS\nwinnow/ZGSDR\nwinnower/M\nwino/MS\nwinsome/YTRP\nwinsomeness/M\nwinter/GSMD\nwintergreen/M\nwinterize/GDS\nwintertime/M\nwintry/TR\nwiny/RT\nwipe/MZGDRS\nwiper/M\nwire's\nwire/AGDS\nwired/S\nwirehair/MS\nwireless/MS\nwiretap/MS\nwiretapped\nwiretapper/SM\nwiretapping/M\nwiriness/M\nwiring/M\nwiry/RTP\nwisdom/M\nwise/MYTGDRS\nwiseacre/SM\nwisecrack/MDSG\nwiseguy/S\nwish/MDRSZG\nwishbone/SM\nwisher/M\nwishful/Y\nwishlist's\nwisp/MS\nwispy/RT\nwist\nwisteria/SM\nwistful/YP\nwistfulness/M\nwit/SM\nwitch/MDSG\nwitchcraft/M\nwitchery/M\nwith\nwithal\nwithdraw/SG\nwithdrawal/MS\nwithdrawn\nwithdrew\nwithe/DRSMZG\nwither/JGD\nwithering/Y\nwithers/M\nwithheld\nwithhold/SG\nwithholding/M\nwithin/M\nwithout\nwithstand/GS\nwithstood\nwitless/PY\nwitlessness/M\nwitness/MDSG\nwits/M\nwitted\nwitter/SGD\nwitticism/SM\nwittily\nwittiness/M\nwitting/UY\nwitty/RPT\nwive/GDS\nwiz\nwizard/SMY\nwizardry/M\nwizened\nwk/Y\nwoad/M\nwobble/MGDS\nwobbliness/M\nwobbly/RTP\nwodge/S\nwoe/SM\nwoebegone\nwoeful/YP\nwoefuller\nwoefullest\nwoefulness/M\nwog/S\nwok/SMN\nwoke\nwold/MS\nwolf/MDSG\nwolfhound/SM\nwolfish\nwolfram/M\nwolverine/SM\nwolves\nwoman/M\nwomanhood/M\nwomanish\nwomanize/DRSZG\nwomanizer/M\nwomankind/M\nwomanlike/M\nwomanliness/M\nwomanly/RPT\nwomb/MS\nwombat/MS\nwomble/S\nwomen/M\nwomenfolk/SM\nwomenfolks/M\nwon't\nwon/M\nwonder/MDGLS\nwonderful/YP\nwonderfulness/M\nwondering/Y\nwonderland/MS\nwonderment/M\nwondrous/Y\nwonk/MS\nwonky/TR\nwont/MD\nwonted/U\nwoo/SZGDR\nwood/MDNSG\nwoodbine/M\nwoodblock/MS\nwoodcarver/MS\nwoodcarving/SM\nwoodchuck/MS\nwoodcock/SM\nwoodcraft/M\nwoodcut/SM\nwoodcutter/SM\nwoodcutting/M\nwooden/RYTP\nwoodenness/M\nwoodiness/M\nwoodland/SM\nwoodlice\nwoodlot/SM\nwoodlouse\nwoodman/M\nwoodmen\nwoodpecker/MS\nwoodpile/SM\nwoods/M\nwoodshed/SM\nwoodsiness/M\nwoodsman/M\nwoodsmen\nwoodsy/RTP\nwoodwind/MS\nwoodwork/MRZG\nwoodworker/M\nwoodworking/M\nwoodworm/S\nwoody/TPRSM\nwooer/M\nwoof/MDRSZG\nwoofer/M\nwool/MNX\nwoolen/M\nwoolgathering/M\nwooliness\nwoolliness/M\nwoolly/RSMPT\nwoozily\nwooziness/M\nwoozy/TRP\nwop/S!\nword's\nword/ADSG\nwordage/M\nwordbook/SM\nwordily\nwordiness/M\nwording/SM\nwordless/Y\nwordplay/M\nwordsmith\nwordsmiths\nwordy/TPR\nwore\nwork's\nwork/ADJSG\nworkable/U\nworkaday\nworkaholic/SM\nworkaround/S\nworkbasket/S\nworkbench/MS\nworkbook/MS\nworkday/SM\nworker/MS\nworkfare/M\nworkflow/MS\nworkforce/M\nworkhorse/SM\nworkhouse/SM\nworking's\nworkingman/M\nworkingmen\nworkings/M\nworkingwoman/M\nworkingwomen\nworkload/MS\nworkman/M\nworkmanlike\nworkmanship/M\nworkmate/S\nworkmen\nworkout/SM\nworkplace/MS\nworkroom/MS\nworks/M\nworksheet/MS\nworkshop/MS\nworkshy\nworksite/S\nworkspace\nworkstation/MS\nworktable/MS\nworktop/S\nworkup/MS\nworkweek/SM\nworld/SM\nworldlier\nworldliness/UM\nworldly/UTP\nworldview/SM\nworldwide\nworm/MDSG\nwormhole/MS\nwormwood/M\nwormy/TR\nworn/U\nworried/Y\nworrier/M\nworriment/M\nworrisome\nworry/ZGDRSMJ\nworrying/Y\nworrywart/SM\nworse/M\nworsen/DSG\nworship/ZGSMDR\nworshiper/M\nworshipful\nworst/SGMD\nworsted/M\nwort/M\nworth/M\nworthies\nworthily/U\nworthiness/UM\nworthless/PY\nworthlessness/M\nworthwhile\nworthy's\nworthy/UPRT\nwot\nwotcha\nwould've\nwould/S\nwouldn't\nwouldst\nwound/SGMDR\nwove/A\nwoven/AU\nwow/SGMD\nwpm\nwrack/GSMD\nwraith/M\nwraiths\nwrangle/DRSMZGJ\nwrangler/M\nwrap's\nwrap/US\nwraparound/SM\nwrapped/U\nwrapper/SM\nwrapping/MS\nwrasse/MS\nwrath/M\nwrathful/Y\nwreak/SGD\nwreath/MDSG\nwreathe\nwreaths\nwreck/SZGMDR\nwreckage/M\nwrecker/M\nwren/MS\nwrench/MDSG\nwrest/SGMD\nwrestle/MZGDRS\nwrestler/M\nwrestling/M\nwretch/MS\nwretched/TPRY\nwretchedness/M\nwriggle/MZGDRS\nwriggler/M\nwriggly\nwright/MS\nwring/SZGMR\nwringer/M\nwrinkle/MGDS\nwrinkled/U\nwrinkly/TRSM\nwrist/SM\nwristband/MS\nwristwatch/MS\nwrit/MRBJSZG\nwrite/S\nwriter/M\nwrithe/MGDS\nwriting/M\nwritten/AU\nwrong/STGMPDRY\nwrongdoer/SM\nwrongdoing/SM\nwrongful/PY\nwrongfulness/M\nwrongheaded/YP\nwrongheadedness/M\nwrongness/M\nwrote/A\nwroth\nwrought\nwrung\nwry/Y\nwryer\nwryest\nwryness/M\nwt\nwunderkind/S\nwurst/SM\nwuss/MS\nwussy/RSMT\nx\nxci\nxcii\nxciv\nxcix\nxcvi\nxcvii\nxenon/M\nxenophobe/MS\nxenophobia/M\nxenophobic\nxerographic\nxerography/M\nxerox/MDSG\nxi/SM\nxii\nxiii\nxiv\nxix\nxor\nxref/S\nxterm/M\nxv\nxvi\nxvii\nxviii\nxx\nxxi\nxxii\nxxiii\nxxiv\nxxix\nxxv\nxxvi\nxxvii\nxxviii\nxxx\nxxxi\nxxxii\nxxxiii\nxxxiv\nxxxix\nxxxv\nxxxvi\nxxxvii\nxxxviii\nxylem/M\nxylene\nxylophone/SM\nxylophonist/MS\ny'all\ny/F\nya\nyacht/SMDG\nyachting/M\nyachtsman/M\nyachtsmen\nyachtswoman/M\nyachtswomen\nyahoo/SM\nyak/SM\nyakked\nyakking\nyam/SM\nyammer/SZGMDR\nyammerer/M\nyang/M\nyank/MDSG\nyap/SM\nyapped\nyapping\nyard/MS\nyardage/MS\nyardarm/MS\nyardman/M\nyardmaster/MS\nyardmen\nyardstick/MS\nyarmulke/SM\nyarn/MS\nyarrow/M\nyashmak/S\nyaw/SGMD\nyawl/MS\nyawn/MDRSZG\nyawner/M\nyaws/M\nyd\nye/RST\nyea/SM\nyeah/M\nyeahs\nyear/MYS\nyearbook/MS\nyearling/MS\nyearlong\nyearly/SM\nyearn/GSJD\nyearning/M\nyeast/SM\nyeasty/RT\nyegg/MS\nyell/MDSG\nyellow/MDRTGPS\nyellowhammer/S\nyellowish\nyellowness/M\nyellowy\nyelp/MDSG\nyen/SM\nyeoman/M\nyeomanry/M\nyeomen\nyep/SM\nyes/MS\nyeshiva/SM\nyessed\nyessing\nyesterday/MS\nyesteryear/M\nyet\nyeti/MS\nyew/SM\nyid/S\nyield/JSGMD\nyikes\nyin/M\nyip/SM\nyipe\nyipped\nyippee\nyipping\nyo\nyob/S\nyobbo/S\nyodel/SMDRZG\nyodeler/M\nyoga/M\nyogi/MS\nyogic\nyogurt/SM\nyoke's\nyoke/UGDS\nyokel/SM\nyolk/MDS\nyon\nyonder\nyonks\nyore/M\nyou'd\nyou'll\nyou're\nyou've\nyou/SMH\nyoung/TMR\nyoungish\nyoungster/MS\nyour/S\nyourself\nyourselves\nyouth/M\nyouthful/YP\nyouthfulness/M\nyouths\nyow\nyowl/MDSG\nyr/S\nytterbium/M\nyttrium/M\nyuan/M\nyucca/SM\nyuck\nyucky/TR\nyuk/SM\nyukked\nyukking\nyukky\nyule/M\nyuletide/M\nyum\nyummy/TR\nyup/SM\nyuppie/MS\nyuppify/GDS\nyurt/MS\nz/DNXTGJ\nzaniness/M\nzany/RSMPT\nzap/SM\nzapped\nzapper/MS\nzapping\nzappy\nzeal/M\nzealot/MS\nzealotry/M\nzealous/YP\nzealousness/M\nzebra/SM\nzebu/MS\nzed/SM\nzeitgeist/SM\nzenith/M\nzeniths\nzenned\nzeolite/S\nzephyr/MS\nzeppelin/MS\nzero/MDHSG\nzeroes\nzest/MS\nzestful/YP\nzestfulness/M\nzesty/RT\nzeta/MS\nzigzag/SM\nzigzagged\nzigzagging\nzilch/M\nzillion/MS\nzinc/MS\nzincked\nzincking\nzine/S\nzinfandel/M\nzing/MDRZG\nzinger/M\nzingy/RT\nzinnia/MS\nzip's\nzip/US\nzipped/U\nzipper/MDGS\nzipping/U\nzippy/TR\nzircon/MS\nzirconium/M\nzit/SM\nzither/MS\nzloty/SM\nzlotys\nzodiac/MS\nzodiacal\nzombie/MS\nzonal/Y\nzone's\nzone/AGDS\nzoning/M\nzonked\nzoo/SM\nzookeeper/SM\nzoological/Y\nzoologist/SM\nzoology/M\nzoom/MDSG\nzoophyte/SM\nzoophytic\nzooplankton\nzorch\nzoster\nzounds\nzucchini/MS\nzwieback/M\nzydeco/M\nzygote/SM\nzygotic\nzymurgy/M\n"
  },
  {
    "path": "src/data/extra/docs/en/about_vnotex.txt",
    "content": "<p>\nVNoteX is designed to be a pleasant note-taking platform, refactored from VNote, which is an open source note-taking application for Markdown since 2016. VNote shares most of the code base with VNoteX since version 3 and continues to be open source.\n<br/><br/>\nSource code of VNote could be found at <a href=\"https://github.com/vnotex/vnote\">GitHub</a>.\n<br/><br/>\nPlease visit <a href=\"https://vnotex.github.io/vnote\">Homepage</a> for more information.\n</p>\n"
  },
  {
    "path": "src/data/extra/docs/en/external_programs.md",
    "content": "# External Programs\nVNote allows user to open notes with **external programs** via the `Open With` in the context menu of the node explorer.\n\nTo add custom external programs, user needs to edit the session configuration (the `session.json` file in user configuration folder). A sample may look like this:\n\n```json\n{\n    \"external_programs\": [\n        {\n            \"name\" : \"gvim\",\n            \"command\" : \"C:\\\\\\\"Program Files (x86)\\\"\\\\Vim\\\\vim80\\\\gvim.exe %1\",\n            \"shortcut\" : \"F4\"\n        },\n        {\n            \"name\" : \"notepad\",\n            \"command\" : \"notepad %1\",\n            \"shortcut\" : \"\"\n        }\n    ]\n}\n```\n\nAn external program could have 3 properties:\n\n1. `name`: the name of the program in VNote;\n2. `command`: the command to execute when opening notes with this external program;\n    1. Use `%1` as a placeholder which will be replaced by the real file paths (automatically wrapped by double quotes);\n3. `shortcut`: the shortcut assigned to this external program;\n\n**Close VNote** before editting the session configuration.\n"
  },
  {
    "path": "src/data/extra/docs/en/features_tips.txt",
    "content": "<p>Some features not to be missed in VNote:</p>\n<h3>Markdown Editor</h3>\n<ul>\n<li><strong>Parse to Markdown and Paste</strong> on the context menu: parse rich format text to Markdown text and fetch images to local if necessary.</li>\n<li><strong>Rich Paste</strong> on the context menu: paste as image, attachment, or link.</li>\n<li><strong>Cross Copy</strong> on the context menu: copy selected text as rich format text.</li>\n</ul>\n"
  },
  {
    "path": "src/data/extra/docs/en/get_started.txt",
    "content": "<div style=\"color: grey; margin-left: 30px;\">\n<h1>Get Started</h1>\n<ul>\n    <li>Create a notebook and create notes within notebook</li>\n    <li>Drag and drop files here</li>\n</ul>\n</div>\n"
  },
  {
    "path": "src/data/extra/docs/en/markdown_guide.md",
    "content": "# Markdown Guide\nThis is a quick guide [^1] for Markdown, a lightweight and easy-to-use syntax for writing.\n\n## What is Markdown?\nMarkdown is a way to style text via a few simple markers. You could write the document in plain text and then read it with a beautiful typesetting.\n\nThere is no standard Markdown syntax and many editors will support its own additional syntax. VNote supports only the widely-used basic syntax.\n\n## How to Use Markdown?\nIf you are new to Markdown, it is better to learn the syntax elements step by step. Knowing headers and emphasis is enough to survive. You could learn another new syntax and practise it every one or two days.\n\n## Syntax Guide\nHere is an overview of Markdown syntax supported by VNote.\n\n### Headers\n```md\n# This is a <h1> tag\n## This is a <h2> tag\n###### This is a <h6> tag\n```\n\n**Notes**:\n\n* At least one space is needed after the `#`\n* A header should occupy one entire line\n\n### Emphasis\n```md\n*This text will be italic*\n_This text will be italic_\n\n**This text will be bold**\n__This text will be bold__\n```\n\n**Notes**:\n\n* `*` is recommended in VNote\n* If the render failed, try to add an additional space before the first `*` and after the last `*`. The space is necessary if the surrounded text begins or ends with full width punctuation\n\n### Lists\n#### Unordered\n```md\n* Item 1  \nThis is a text under Item 1. Notice that there are two spaces at the end above.\n* Item 2\n    * Item 2a\n    * Item 2b\n* Item 3\n\nTo end a list, there should be one empty line above.\n```\n\n#### Ordered\n```md\n1. Item 1\n1. Item 2  \nNotice that the sequence number is irrelevant. Markdown will change the sequence automatically when renderring.\n3. Item 3\n    1. Item 3a\n    2. Item 3b\n4. Item 4\n```\n\n### Tables\n```md\n| col 1 | col 2 | col 3 |\n| --- | --- | --- |\n| cell1 | cell2 | cell3 |\n| cell4 | cell5 | cell6 |\n```\n\n### Images and Links\n```md\n![Image Alt Text](/url/to/image.png \"Optional Text\")\n\n![Image Alt Text](/url/to/image.png \"Image specified with width and height\" =800x600)\n\n![Image Alt Text](/url/to/image.png =800x600)\n\n![Image Alt Text](/url/to/image.png \"Image specified with width\" =800x)\n\n![Image Alt Text](/url/to/image.png \"Image specified with height\" =x600)\n\n[Link Text](/url/of/the/link)\n```\n\n**Notes**:\n\n* It is not recommended to use image links in reference format. VNote will not preview those images.\n\n### Blockquotes\n```md\nAs VNote suggests:\n\n> VNote is the best Markdown note-taking application\n> ever.  \n>\n> THere is two spaces after `ever.` above to insert a\n> new line.\n\nIt also suggests:\n\n> VNote is good.  \nHere is another sentence within the quote.\n```\n\n**Notes**:\n\n* Space is needed after the marker `>`\n* You could just add only one `>` at the first line\n\n### Fenced Code Block\n    ```lang\n    This is a fenced code block.\n    ```\n\n    ~~~cpp\n    This is another fenced code block.\n    ~~~\n\n**Notes**:\n\n* `lang` is optional to specify the language of the code; if not specified, VNote won't highlight the code\n    * For a detailed supported languages list, please visit [Prism](https://prismjs.com/#supported-languages)\n* It is always a good practice to add one empty line before the whole fenced code block\n\n### Diagrams\nVNote supports the following engines to draw diagrams. You should specify particular language of the fenced code block and write the definition of your diagram within it.\n\n* [Flowchart.js](http://flowchart.js.org/) for *flowchart* with language `flow` or `flowchart`\n* [Mermaid](https://mermaidjs.github.io/) with language `mermaid`\n* [WaveDrom](https://wavedrom.com/) for *digital timing diagram* with language `wavedrom`\n\nFor example,\n\n    ```flowchart\n    st=>start: Start:>http://www.google.com[blank]\n    e=>end:>http://www.google.com\n    op1=>operation: My Operation\n    sub1=>subroutine: My Subroutine\n    cond=>condition: Yes\n    or No?:>http://www.google.com\n    io=>inputoutput: catch something...\n\n    st->op1->cond\n    cond(yes)->io->e\n    cond(no)->sub1(right)->op1\n    ```\n\n#### UML\nVNote supports [PlantUML](http://plantuml.com/) to draw UML diagrams. You should use `puml` specified as the language of the fenced code block and write the definition of your diagram within it.\n\n    ```puml\n    @startuml\n    Bob -> Alice : hello\n    @enduml\n    ```\n\n#### Graphviz\nVNote supports [Graphviz](http://www.graphviz.org/) to draw diagrams. You should use `dot` specified as the language of the fenced code block and write the definition of your diagram within it.\n\n### Math Formulas\nVNote supports math formulas via [MathJax](https://www.mathjax.org/). The default math delimiters are `$$...$$` for **displayed mathematics**, and `$...$` for **inline mathematics**.\n\n* Inline mathematics should not cross multiple lines\n* Forms like `3$abc$`, `$abc$4`, `$ abc$`, and `$abc $` will not be treated as mathematics\n* Use `\\` to escape `$`\n* There should be only space chars before opening `$$` and after closing `$$`\n* Use `\\\\` to new a line within a displayed mathematics\n\nVNote also supports displayed mathematics via fenced code block with language `mathjax` specified.\n\n    ```mathjax\n    $$\n    J(\\theta) = \\frac 1 2 \\sum_{i=1}^m (h_\\theta(x^{(i)})-y^{(i)})^2\n    $$\n    ```\n\nEquation number of displayed mathematics is supported:\n\n    $$vnote x markdown = awesome$$ (1.2.1)\n\n### Inline Code\n```md\nHere is a `inline code`.\n```\n\nTo insert one `` ` ``, you need to use two `` ` `` to enclose it, such as ``` `` ` `` ```. To insert two `` ` ``, you need to use three `` ` ``.\n\n### Strikethrough\n```md\nHere is a ~~text~~ with strikethrough.\n```\n\n### Task Lists\n```md\n* [x] this is a complete item.\n* [ ] this is an incomplete item.\n```\n\n### Footnote\n```md\nThis is a footnote [^1].\n\n[^1]: Here is the detail of the footnote.\n```\n\n### Superscript and Subscript\n```md\nThis is the 1^st^ superscript.\n\nThis is the H~2~O subscript.\n```\n\n### Mark\n```md\nLet's mark the ==word==.\n```\n\n### Alert\n```md\n::: alert-info\n\nThis is an info text.\n\n:::\n\n::: alert-danger\n\nThis is a danger text.\n\n:::\n```\n\nAvailable variants:\n\n```\nalert-primary\nalert-secondary\nalert-success\nalert-info\nalert-warning\nalert-danger\nalert-light\nalert-dark\n```\n\n### New Line and Paragraph\nIf you want to enter a new line, you should add two spaces after current line and then continue your input. VNote provides `Shift+Enter` to help.\n\nIf you want to enter a new paragraph, you should add an empty line and then continue entering the new paragraph.\n\nGenerally, you need to add an empty line after a block element (such as code block, lists, blockquote) to explicitly end it.\n\n[^1]: This guide references [Mastering Markdown](https://guides.github.com/features/mastering-markdown/).\n"
  },
  {
    "path": "src/data/extra/docs/en/shortcuts.md",
    "content": "# Shortcuts\n1. All the keys without special notice are **case insensitive**\n2. On macOS, `Ctrl` corresponds to `Command` except in Vi mode\n3. The key sequence `Ctrl+G, I` means that first press both `Ctrl` and `G` simultaneously, release them, then press `I` and release\n4. For a **complete latest shortcuts list** or modifying default shortcuts, please view the `vnotex.json` configuration file\n\n## General\n- `Ctrl+G, E`  \nToggle expanding the content area.\n- `Ctrl+Alt+N`  \nCreate a note in current folder.\n- `Ctrl+F`  \nFind/Replace in current note.\n- `Ctrl+Alt+F`  \nAdvanced find.\n- `Ctrl+J`/`Ctrl+K`  \nVNote supports `Ctrl+J` and `Ctrl+K` for navigation in many widgets.\n- `Ctrl+Left Mouse`  \nScroll in all directions.\n- `Ctrl+Shift+T`  \nRecover last closed file.\n- `Ctrl+Alt+L`  \nOpen Flash Page.\n- `Ctrl+Alt+I`  \nOpen Quick Access.\n- `Ctrl+G, X`  \nClose current tab.\n- `Ctrl+G, D`  \nLocate to the folder of current note.\n- `Ctrl+G, O`  \nOpen the Outline popup.\n\n## Text Editor\n- `Ctrl+S`  \nSave current changes.\n- `Ctrl+Wheel`  \nZoom in/out the page through the mouse scroll.\n- `Ctrl+J/K`  \nScroll page down/up without changing cursor.\n- `Ctrl+N/P`  \nActivate auto-completion.\n    - `Ctrl+N/P`  \n    Navigate through the completion list and insert current completion.\n    - `Ctrl+E`  \n    Cancel completion.\n    - `Enter`  \n    Insert current completion.\n    - `Ctrl+[` or `Escape`  \n    Finish completion.\n\n### Text Editing\n- `Shift+Left`, `Shift+Right`, `Shift+Up`, `Shift+Down`  \nExpand the selection one character left or right, or one line up or down.\n- `Ctrl+Shift+Left`, `Ctrl+Shift+Right`  \nExpand the selection to the beginning or end of current word.\n- `Ctrl+Shift+Up`, `Ctrl+Sfhit+Down`  \nExpand the selection to the beginning or end of current paragraph.\n- `Shift+Home`, `Shift+End`  \nExpand the selection to the beginning or end of current line.\n- `Ctrl+Shift+Home`, `Ctrl+Shift+End`  \nExpand the selection to the beginning or end of current note.\n- `Ctrl+Shift+G`  \nGo to line.\n- `Ctrl+C/X`\nCopy/Cut line if there is no selection.\n- `Ctrl+L`  \nSelect line.\n- `Alt+Up/Down`  \nMove line up/down.\n- `Shift+Alt+Up/Down`\nCopy line up/down.\n- `Ctrl+Shift+K`  \nDelete line.\n\n## Markdown Editor\n### Read Mode\n- `H`/`J`/`K`/`L`  \nNavigation, corresponding to Left/Down/Up/Right arrow keys.\n- `Ctrl+U`  \nScroll up half screen.\n- `Ctrl+D`  \nScroll down half screen.\n- `gg`/`G`  \nJump to the beginning or end of the note. (Case Sensitive).\n- `Ctrl+=/-`  \nZoom in/out the page.\n- `Ctrl+Wheel`  \nZoom in/out the page through the mouse scroll.\n- `Ctrl+0`  \nRecover the page zoom factor to 100%.\n- Jump between titles\n    - `<N>[[`: jump to previous `N` title\n    - `<N>]]`: jump to next `N` title\n    - `<N>[]`: jump to previous `N` title at the same level\n    - `<N>][`: jump to next `N` title at the same level\n    - `<N>[{`: jump to previous `N` title at a higher level\n    - `<N>]}`: jump to next `N` title at a higher level\n\n### Edit Mode\nShares the same shortcuts with Text Editor.\n\n- `Ctrl+T`  \nEdit current note or save changes and exit edit mode.\n- `Ctrl+G, Q`  \nDiscard current changes and exit edit mode.\n\n#### Text Editing\n- `Ctrl+B`  \nInsert bold. Press `Ctrl+B` again to exit. Current selected text will be changed to bold if exists.\n- `Ctrl+I`  \nInsert italic. Press `Ctrl+I` again to exit. Current selected text will be changed to italic if exists.\n- `Ctrl+;`  \nInsert inline code. Press `Ctrl+;` again to exit. Current selected text will be changed to inline code if exists.\n- `Ctrl+'`  \nInsert fenced code block. Press `Ctrl+'` again to exit. Current selected text will be wrapped into a code block if exists.\n- `Ctrl+.`  \nInsert inline math. Press `Ctrl+.` again to exit. Current selected text will be changed to inline math if exists.\n- `Ctrl+G, .`  \nInsert math block. Press `Ctrl+G, .` again to exit. Current selected text will be changed to math block if exists.\n- `Ctrl+/`  \nInsert table.\n- `Ctrl+<Num>`  \nInsert title at level `<Num>`. `<Num>` should be 1 to 6. Current selected text will be changed to title if exists.\n- `Ctrl+7`  \nDelete the title mark of current line or selected text.\n- `Tab`/`Shift+Tab`  \nIncrease or decrease the indentation. If any text is selected, the indentation will operate on all these selected lines.\n- `Shift+Enter`  \nInsert two spaces followed by a new line, namely a soft linebreak in Markdown.\n\n## Navigation Mode\n`Ctrl+G, W` will turn VNote into **Navigation Mode**. In this mode, VNote will display at most two characters on some major widgets, and then pressing corresponding characters will jump to that widget.\n"
  },
  {
    "path": "src/data/extra/docs/en/welcome.md",
    "content": "# Welcome to VNote\nA pleasant note-taking platform.\n\nFor more information, please visit [**VNote's Home Page**](https://vnotex.github.io/vnote).\n\n## FAQs\n* Hover the mouse over buttons to get detailed information.\n* If VNote crashes after update, please delete the `vnotex.json` file under user configuration folder.\n* VNote has a series of powerful shortcuts. Please view the user configuration file `vnotex.json` for a complete list of shortcuts or modifying default shortcuts.\n    * The key sequence `Ctrl+G, I` means that first press both `Ctrl` and `G` simultaneously, release them, then press `I` and release.\n* Feedbacks are appreciated! Please [post an issue](https://github.com/vnotex/vnote/issues) on GitHub if there is any.\n\n### Windows Users\n* If VNote hangs frequently or behaves unexpectedly in interface, please check the **OpenGL** option. Check details [here](https://github.com/vnotex/vnote/issues/853).\n"
  },
  {
    "path": "src/data/extra/docs/zh_CN/about_vnotex.txt",
    "content": "<p>\nVNoteX致力于成为一个舒适的笔记平台。VNoteX重构自VNote，后者是一个始于2016年的专注于Markdown的开源笔记软件。VNote在版本3之后会和VNoteX共享大部分源代码，并继续开源。\n<br/><br/>\nVNote源代码可以在<a href=\"https://github.com/vnotex/vnote\">GitHub</a>获取。\n<br/><br/>\n详情请访问<a href=\"https://vnotex.github.io/vnote\">主页</a>。\n</p>\n"
  },
  {
    "path": "src/data/extra/docs/zh_CN/external_programs.md",
    "content": "# 外部程序\nVNote支持通过在节点浏览器上下文菜单中的`打开方式`来调用**外部程序**打开笔记。\n\n用户需要编辑会话配置(用户配置文件夹下的`session.json`文件)来添加自定义外部程序。一个例子如下：\n\n```json\n{\n    \"external_programs\": [\n        {\n            \"name\" : \"gvim\",\n            \"command\" : \"C:\\\\\\\"Program Files (x86)\\\"\\\\Vim\\\\vim80\\\\gvim.exe %1\",\n            \"shortcut\" : \"F4\"\n        },\n        {\n            \"name\" : \"notepad\",\n            \"command\" : \"notepad %1\",\n            \"shortcut\" : \"\"\n        }\n    ]\n}\n```\n\n一个外部程序可以包含3个属性：\n\n1. `name`：该程序在VNote中的名字；\n2. `command`：当使用该外部程序打开笔记时执行的命令；\n    1. 使用`%1`占位符，会被替换为真实的文件路径(自动加上双引号包裹)；\n3. `shortcut`：分配给该外部程序的快捷键；\n\n修改配置前请**关闭VNote**。\n"
  },
  {
    "path": "src/data/extra/docs/zh_CN/features_tips.txt",
    "content": "<p>VNote中一些不容错过的特性：</p>\n<h3 id=\"markdown-\">Markdown编辑器</h3>\n<ul>\n<li>上下文菜单中的<strong>解析为Markdown并粘贴</strong>：解析富文本为Markdown文本，并按需获取图片到本地。</li>\n<li>上下文菜单中的<strong>多功能粘贴</strong>：粘贴为图片、附件或者连接。</li>\n<li>上下文菜单中的<strong>交叉复制</strong>：将所选文本复制为富文本。</li>\n</ul>\n"
  },
  {
    "path": "src/data/extra/docs/zh_CN/get_started.txt",
    "content": "<div style=\"color: grey; margin-left: 30px;\">\n<h1>快速开始</h1>\n<ul>\n    <li>创建笔记本并在笔记本中创建文件夹和笔记</li>\n    <li>拖拽文件到此处</li>\n</ul>\n</div>\n"
  },
  {
    "path": "src/data/extra/docs/zh_CN/markdown_guide.md",
    "content": "# Markdown指南\nMarkdown是一种轻量级的易用的书写语法。本文是Markdown的一个快速指南[^1]。\n\n## 什么是Markdown？\nMarkdown是一种通过少量简单的标记字符来格式化文本的方法。您可以用纯文本来书写文档，然后在阅读时呈现一个美观的排版。\n\n其实并没有一个标准的Markdown语法，很多编辑器都会添加自己的扩展语法。不同于此，为了兼容性，VNote仅仅支持那些被广泛使用的基本语法。\n\n## 如何上手Markdown？\n如果刚接触Markdown，那么比较好的一个方法是逐个学习Markdown语法。刚开始，懂得标题和强调语法就能够写出基本的文档；然后，每天可以学习一个新的语法并不断练习。\n\n## 语法指南\n下面是VNote支持的Markdown语法的一个概览。\n\n### 标题\n```md\n# This is a <h1> tag\n## This is a <h2> tag\n###### This is a <h6> tag\n```\n\n**注意**：\n\n* `#`之后需要至少一个空格\n* 一个标题应该占一整行\n\n### 强调\n```md\n*This text will be italic*\n_This text will be italic_\n\n**This text will be bold**\n__This text will be bold__\n```\n\n**注意**：\n\n* VNote推荐使用`*`\n* 如果渲染错误，请尝试在第一个`*`之前以及最后一个`*`之后添加一个空格。如果被标记的文本是以全角符号开始或结尾，一般都需要前后添加一个空格\n\n### 列表\n#### 无序列表\n```md\n* Item 1  \n只是一段在Item 1下面的文字。需要注意上面一行结尾有两个空格。\n* Item 2\n    * Item 2a\n    * Item 2b\n* Item 3\n\n使用一个空行来来结束一个列表。\n```\n\n#### 有序列表\n```md\n1. Item 1\n1. Item 2  \n注意，列表前面的序号其实是无关紧要的，渲染时Markdown会自动修改该序号。\n3. Item 3\n    1. Item 3a\n    2. Item 3b\n4. Item 4\n```\n\n### 表格\n```md\n| col 1 | col 2 | col 3 |\n| --- | --- | --- |\n| cell1 | cell2 | cell3 |\n| cell4 | cell5 | cell6 |\n```\n\n### 图片和链接\n```md\n![Image Alt Text](/url/to/image.png \"Optional Text\")\n\n![Image Alt Text](/url/to/image.png \"Image specified with width and height\" =800x600)\n\n![Image Alt Text](/url/to/image.png =800x600)\n\n![Image Alt Text](/url/to/image.png \"Image specified with width\" =800x)\n\n![Image Alt Text](/url/to/image.png \"Image specified with height\" =x600)\n\n[Link Text](/url/of/the/link)\n```\n\n**注意**：\n\n* VNote不推荐使用参考式的图片链接。VNote不会预览这些图片。\n\n### 块引用\n```md\nAs VNote suggests:\n\n> VNote is the best Markdown note-taking application\n> ever.  \n>\n> THere is two spaces after `ever.` above to insert a\n> new line.\n\nIt also suggests:\n\n> VNote is good.  \nHere is another sentence within the quote.\n```\n\n**注意**：\n\n* `>`标记后面需要至少一个空格\n* 多行连续的引用可以只在第一行添加标记\n\n### 代码块\n    ```lang\n    This is a fenced code block.\n    ```\n\n    ~~~\n    This is another fenced code block.\n    ~~~\n\n**注意**：\n\n* `lang`用于指定代码块的代码语言，可选；如果不指定，VNote不会尝试高亮代码\n    * 请访问[Prism](https://prismjs.com/#supported-languages)获取一个完整的支持语言列表\n* 总是在一个代码块前面添加一个空行是一个不错的实践\n\n### 图表\nVNote支持使用以下引擎来绘制图表。您需要使用代码块，并标明特定语言，然后在代码块里面定义图表。\n\n* [Flowchart.js](http://flowchart.js.org/)，语言为`flow`或`flowchart`\n* [Mermaid](https://mermaidjs.github.io/)，语言为`mermaid`\n* [WaveDrom](https://wavedrom.com/)，数字时序图，语言为`wavedrom`\n\n例如，\n\n    ```flowchart\n    st=>start: Start:>http://www.google.com[blank]\n    e=>end:>http://www.google.com\n    op1=>operation: My Operation\n    sub1=>subroutine: My Subroutine\n    cond=>condition: Yes\n    or No?:>http://www.google.com\n    io=>inputoutput: catch something...\n\n    st->op1->cond\n    cond(yes)->io->e\n    cond(no)->sub1(right)->op1\n    ```\n\n#### UML\nVNote支持[PlantUML](http://plantuml.com/)来实现UML图表。您需要使用代码块，并标明语言为`puml`，然后在代码块里面定义图表。\n\n    ```puml\n    @startuml\n    Bob -> Alice : hello\n    @enduml\n    ```\n\n#### Graphviz\nVNote支持[Graphviz](http://www.graphviz.org/)来绘制图表。您需要使用代码块，并标明语言为`dot`，然后在代码块里面定义图表。\n\n### 数学公式\nVNote通过[MathJax](https://www.mathjax.org/)来支持数学公式。默认的**公式块**的分隔符是`$$...$$`，**行内公式**的分隔符是`$...$`。\n\n* 行内公式不能跨多行\n* 形如`3$abc$`/`$abc$4`/`$ abc$`和`$abc $`的不会被解析为公式\n* 使用`\\`转义`$`\n* 开始的`$$`之前以及结束的`$$`之后都只允许出现空格字符\n* 在公式块中，使用`\\\\`来换行\n\nVNote也可以使用标明语言`mathjax`的代码块来实现公式块。\n\n    ```mathjax\n    $$\n    J(\\theta) = \\frac 1 2 \\sum_{i=1}^m (h_\\theta(x^{(i)})-y^{(i)})^2\n    $$\n    ```\n\n公式块支持公式序号：\n\n    $$vnote x markdown = awesome$$ (1.2.1)\n\n### 行内代码\n```md\nHere is a `inline code`.\n```\n\n如果想输入一个`` ` ``，需要使用两个`` ` ``来括住它，例如``` `` ` `` ```。要输入两个`` ` ``，则需要使用三个`` ` ``。\n\n### 删除线\n```md\nHere is a ~~text~~ with strikethrough.\n```\n\n### 任务列表\n```md\n* [x] this is a complete item.\n* [ ] this is an incomplete item.\n```\n\n### 脚注\n```md\nThis is a footnote [^1].\n\n[^1]: Here is the detail of the footnote.\n```\n\n### 上标和下标\n```md\nThis is the 1^st^ superscript.\n\nThis is the H~2~O subscript.\n```\n\n### 标记\n```md\nLet's mark the ==word==.\n```\n\n### 警告\n```md\n::: alert-info\n\n这是一个信息文本。\n\n:::\n\n::: alert-danger\n\n这是一个危险文本。\n\n:::\n```\n\n可用的一些警告形式如下：\n\n```\nalert-primary\nalert-secondary\nalert-success\nalert-info\nalert-warning\nalert-danger\nalert-light\nalert-dark\n```\n\n### 换行和段落\n如果需要换行，您应该在当前行末尾添加两个空格，然后换行。VNote提供快捷键`Shift+Enter`来辅助用户输入两个空格并换行。\n\n如果需要一个新的段落，您应该先插入一个空行然后才输入新的段落的文本。\n\n一般来说，您应该在一个块元素（例如代码块、列表和块引用）后面插入一个空行来显式结束该元素。\n\n[^1]: 该指南参考了[Mastering Markdown](https://guides.github.com/features/mastering-markdown/)。\n"
  },
  {
    "path": "src/data/extra/docs/zh_CN/shortcuts.md",
    "content": "# 快捷键\n1. 以下按键除特别说明外，都不区分大小写\n2. 在macOS下，`Ctrl`对应于`Command`，在Vi模式下除外\n3. 按键序列`Ctrl+G, I`表示先同时按下`Ctrl`和`G`，释放，然后按下`I`并释放\n4. 可以通过查看配置文件`vnotex.json`来获取一个**完整的最新的快捷键列表**或者修改默认快捷键\n\n## 通用\n- `Ctrl+G, E`  \n是否扩展内容区。\n- `Ctrl+Alt+N`  \n在当前文件夹下新建笔记。\n- `Ctrl+F`  \n页内查找和替换。\n- `Ctrl+Alt+F`  \n高级查找。\n- `Ctrl+J`/`Ctrl+K`  \nVNote的很多部件均支持`Ctrl+J`和`Ctrl+K`导航。\n- `Ctrl+Left, Mouse`  \n任意滚动。\n- `Ctrl+Shift+T`  \n恢复上一个关闭的文件。\n- `Ctrl+Alt+L`  \n打开灵犀页。\n- `Ctrl+Alt+I`  \n打开快速访问。\n- `Ctrl+G, X`  \n关闭当前标签页。\n- `Ctrl+G, D`  \n定位到当前笔记所在文件夹。\n- `Ctrl+G, O`  \n打开大纲弹出窗口。\n\n## 文本编辑器\n- `Ctrl+S`  \n保存当前更改。\n- `Ctrl+Wheel`  \n鼠标滚轮实现放大/缩小页面。\n- `Ctrl+J/K`  \n向下/向上滚动页面，不会改变光标。\n- `Ctrl+N/P`  \n激活自动补全。\n    - `Ctrl+N/P`  \n    浏览补全列表并插入当前补全。\n    - `Ctrl+E`  \n    取消补全。\n    - `Enter`  \n    插入补全。\n    - `Ctrl+[`或者`Escape`  \n    结束补全。\n\n### 文本编辑\n- `Shift+Left`, `Shift+Right`, `Shift+Up`, `Shift+Down`  \n扩展选定左右一个字符，或上下一行。\n- `Ctrl+Shift+Left`, `Ctrl+Shift+Right`  \n扩展选定到单词开始或结尾。\n- `Ctrl+Shift+Up`, `Ctrl+Sfhit+Down`  \n扩展选定到段尾或段首。\n- `Shift+Home`, `Shift+End`  \n扩展选定到行首和行尾。\n- `Ctrl+Shift+Home`, `Ctrl+Shift+End`  \n扩展选定到笔记开始或结尾处。\n- `Ctrl+Shift+G`  \n跳转到指定行。\n- `Ctrl+C/X`  \n在没有选中文本时复制/剪切整行。\n- `Ctrl+L`  \n选择当前行。\n- `Alt+Up/Down`  \n向上/向下移动行。\n- `Shift+Alt+Up/Down`  \n向上/向下复制行。\n- `Ctrl+Shift+K`  \n删除行。\n\n## Markdown 编辑器\n### 阅读模式\n- `H`/`J`/`K`/`L`  \n导航，对应于左/下/上/右方向键。\n- `Ctrl+U`  \n向上滚动半屏。\n- `Ctrl+D`  \n向下滚动半屏。\n- `gg`/`G`  \n跳转到笔记的开始或结尾。（区分大小写）。\n- `Ctrl + +/-`  \n放大/缩小页面。\n- `Ctrl+Wheel`  \n鼠标滚轮实现放大/缩小页面。\n- `Ctrl+0`  \n恢复页面大小为100%。\n- 标题跳转\n    - `<N>[[`：跳转到上`N`个标题\n    - `<N>]]`：跳转到下`N`个标题\n    - `<N>[]`：跳转到上`N`个同层级的标题\n    - `<N>][`：跳转到下`N`个同层级的标题\n    - `<N>[{`：跳转到上`N`个高一层级的标题\n    - `<N>]}`：跳转到下`N`个高一层级的标题\n\n### 编辑模式\n和文本编辑器共享一样的快捷键。\n\n- `Ctrl+T`  \n编辑当前笔记或者保存更改并退出编辑模式。\n- `Ctrl+G, Q`  \n放弃当前更改并退出编辑模式。\n\n#### 文本编辑\n- `Ctrl+B`  \n插入粗体；再次按`Ctrl+B`退出。如果已经选择文本，则将当前选择文本加粗。\n- `Ctrl+I`  \n插入斜体；再次按`Ctrl+I`退出。如果已经选择文本，则将当前选择文本改为斜体。\n- `Ctrl+;`  \n插入行内代码；再次按`Ctrl+;`退出。如果已经选择文本，则将当前选择文本改为行内代码。\n- `Ctrl+'`  \n插入代码块；再次按`Ctrl+'`退出。如果已经选择文本，则将当前选择文本嵌入到代码块中。\n- `Ctrl+.`  \n插入公式；再次按`Ctrl+.`退出。如果已经选择文本，则将当前选择文本改为公式。\n- `Ctrl+G, .`  \n插入公式块；再次按`Ctrl+G, .`退出。如果已经选择文本，则将当前选择文本改为公式块。\n- `Ctrl+/`  \n插入表格。\n- `Ctrl+<Num>`  \n插入级别为`<Num>`的标题。`<Num>`应该是1到6的一个数字。如果已经选择文本，则将当前选择文本改为标题。\n- `Ctrl+7`  \n删除当前行或所选择文本的标题标记。\n- `Tab`/`Shift+Tab`  \n增加或减小缩进。如果已经选择文本，则对所有选择的行进行缩进操作。\n- `Shift+Enter`  \n插入两个空格然后换行，在Markdown中类似于软换行的概念。\n\n## 展览模式\n`Ctrl+G, W`会使VNote进入**展览模式**。该模式中，VNote会在一些主要部件中显示最多两个字母，按下这些字母可以跳转到对应的部件。\n"
  },
  {
    "path": "src/data/extra/docs/zh_CN/welcome.md",
    "content": "# 欢迎使用 VNote\n一个舒适的笔记平台。\n\n更多信息，请访问[VNote主页](https://vnotex.github.io/vnote)。\n\n## 常见问题\n* 将鼠标悬停在按钮上可以获取详细信息。\n* 如果更新后VNote崩溃，请删除用户配置文件夹中的`vnotex.json`文件。\n* VNote有着一系列强大的快捷键。请查看用户配置文件`vnotex.json`以获取一个完整的快捷键列表或者修改默认快捷键。\n    * 按键序列`Ctrl+G, I`表示先同时按下`Ctrl`和`G`，释放，然后按下`I`并释放。\n* 使用中有任何问题，欢迎[反馈](https://github.com/vnotex/vnote/issues)。\n\n## Windows用户\n* 如果VNote经常卡顿或无响应，或者界面异常，请检查**OpenGL**选项。[详情](https://github.com/vnotex/vnote/issues/853)。\n"
  },
  {
    "path": "src/data/extra/extra.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/vnotex/data/extra\">\n        <file>docs/en/get_started.txt</file>\n        <file>docs/en/about_vnotex.txt</file>\n        <file>docs/en/shortcuts.md</file>\n        <file>docs/en/markdown_guide.md</file>\n        <file>docs/en/external_programs.md</file>\n        <file>docs/en/welcome.md</file>\n        <file>docs/en/features_tips.txt</file>\n        <file>docs/zh_CN/get_started.txt</file>\n        <file>docs/zh_CN/about_vnotex.txt</file>\n        <file>docs/zh_CN/shortcuts.md</file>\n        <file>docs/zh_CN/markdown_guide.md</file>\n        <file>docs/zh_CN/external_programs.md</file>\n        <file>docs/zh_CN/welcome.md</file>\n        <file>docs/zh_CN/features_tips.txt</file>\n        <file>web/markdown-viewer-template.html</file>\n        <file>web/markdown-export-template.html</file>\n        <file>web/css/user.css</file>\n        <file>web/css/globalstyles.css</file>\n        <file>web/css/markdownit.css</file>\n        <file>web/css/imageviewer.css</file>\n        <file>web/css/outline.css</file>\n        <file>web/css/exportglobalstyles.css</file>\n        <file>web/js/qwebchannel.js</file>\n        <file>web/js/eventemitter.js</file>\n        <file>web/js/utils.js</file>\n        <file>web/js/nodelinemapper.js</file>\n        <file>web/js/lrucache.js</file>\n        <file>web/js/graphcache.js</file>\n        <file>web/js/graphpreviewer.js</file>\n        <file>web/js/markdownviewercore.js</file>\n        <file>web/js/vxcore.js</file>\n        <file>web/js/vxworker.js</file>\n        <file>web/js/graphrenderer.js</file>\n        <file>web/js/markdownviewer.js</file>\n        <file>web/js/imageviewer.js</file>\n        <file>web/js/easyaccess.js</file>\n        <file>web/js/crosscopy.js</file>\n        <file>web/js/outline.js</file>\n        <file>web/js/markdown-it/markdown-it-container.min.js</file>\n        <file>web/js/markdown-it/markdown-it-emoji.min.js</file>\n        <file>web/js/markdown-it/markdown-it-footnote.min.js</file>\n        <file>web/js/markdown-it/markdown-it-front-matter.js</file>\n        <file>web/js/markdown-it/markdownItAnchor.umd.js</file>\n        <file>web/js/markdown-it/markdownItTocDoneRight.umd.js</file>\n        <file>web/js/markdown-it/markdown-it-imsize.min.js</file>\n        <file>web/js/markdown-it/markdown-it-sub.min.js</file>\n        <file>web/js/markdown-it/markdown-it-sup.min.js</file>\n        <file>web/js/markdown-it/markdown-it-task-lists.js</file>\n        <file>web/js/markdown-it/markdown-it-texmath.js</file>\n        <file>web/js/markdown-it/markdown-it-mark.min.js</file>\n        <file>web/js/markdown-it/markdown-it-inject-linenumbers.js</file>\n        <file>web/js/markdown-it/xss.min.js</file>\n        <file>web/js/markdown-it/markdown-it-xss.js</file>\n        <file>web/js/markdown-it/markdown-it-implicit-figure.js</file>\n        <file>web/js/markdown-it/markdown-it.min.js</file>\n        <file>web/js/markdownit.js</file>\n        <file>web/js/mermaid/mermaid.min.js</file>\n        <file>web/js/mermaid.js</file>\n        <file>web/js/flowchart.js/flowchart.min.js</file>\n        <file>web/js/flowchart.js/raphael.min.js</file>\n        <file>web/js/flowchartjs.js</file>\n        <file>web/js/wavedrom/theme-default.js</file>\n        <file>web/js/wavedrom/wavedrom.min.js</file>\n        <file>web/js/wavedrom.js</file>\n        <file>web/js/mathjax.js</file>\n        <file>web/js/plantuml/synchro2.js</file>\n        <file>web/js/plantuml/zopfli.raw.min.js</file>\n        <file>web/js/plantuml.js</file>\n        <file>web/js/viz.js/lite.render.js</file>\n        <file>web/js/viz.js/viz.js</file>\n        <file>web/js/graphviz.js</file>\n        <file>web/js/prism/clipboard.min.js</file>\n        <file>web/js/prism/prism.min.js</file>\n        <file>web/js/prism.js</file>\n        <file>web/js/svg-to-image.js</file>\n        <file>web/js/computed-style-to-inline-style.js</file>\n        <file>web/js/turndown/turndown.js</file>\n        <file>web/js/turndown/turndown-plugin-gfm.js</file>\n        <file>web/js/turndown.js</file>\n        <file>web/js/mark.js/mark.min.js</file>\n        <file>web/js/markjs.js</file>\n\n        <file>web/mindmap-editor-template.html</file>\n        <file>web/js/mindmap/lib/mind-elixir/MindElixir.js</file>\n        <file>web/js/mindmap/core/mindmap-core.js</file>\n        <file>web/js/mindmap/features/outline/outline.js</file>\n        <file>web/js/mindmap/features/link-handler/link-handler.js</file>\n        <file>web/js/mindmapeditor.js</file>\n\n        <file>web/pdf.js/pdfviewer.js</file>\n        <file>web/pdf.js/pdfviewer.css</file>\n        <file>web/pdf.js/pdfviewercore.js</file>\n        <file>web/pdf.js/build/pdf.js</file>\n        <file>web/pdf.js/build/pdf.sandbox.js</file>\n        <file>web/pdf.js/build/pdf.worker.js</file>\n        <file>web/pdf.js/web/viewer.js</file>\n        <file>web/pdf.js/web/viewer.css</file>\n        <file>web/pdf.js/web/pdf-viewer-template.html</file>\n        <file>web/pdf.js/web/locale/locale.properties</file>\n        <file>web/pdf.js/web/locale/br/viewer.properties</file>\n        <file>web/pdf.js/web/locale/ca/viewer.properties</file>\n        <file>web/pdf.js/web/locale/de/viewer.properties</file>\n        <file>web/pdf.js/web/locale/en-CA/viewer.properties</file>\n        <file>web/pdf.js/web/locale/en-GB/viewer.properties</file>\n        <file>web/pdf.js/web/locale/en-US/viewer.properties</file>\n        <file>web/pdf.js/web/locale/eu/viewer.properties</file>\n        <file>web/pdf.js/web/locale/fr/viewer.properties</file>\n        <file>web/pdf.js/web/locale/ja/viewer.properties</file>\n        <file>web/pdf.js/web/locale/ru/viewer.properties</file>\n        <file>web/pdf.js/web/locale/uk/viewer.properties</file>\n        <file>web/pdf.js/web/locale/zh-CN/viewer.properties</file>\n        <file>web/pdf.js/web/locale/zh-TW/viewer.properties</file>\n        <file>web/pdf.js/web/images/annotation-check.svg</file>\n        <file>web/pdf.js/web/images/annotation-comment.svg</file>\n        <file>web/pdf.js/web/images/annotation-help.svg</file>\n        <file>web/pdf.js/web/images/annotation-insert.svg</file>\n        <file>web/pdf.js/web/images/annotation-key.svg</file>\n        <file>web/pdf.js/web/images/annotation-newparagraph.svg</file>\n        <file>web/pdf.js/web/images/annotation-noicon.svg</file>\n        <file>web/pdf.js/web/images/annotation-note.svg</file>\n        <file>web/pdf.js/web/images/annotation-paragraph.svg</file>\n        <file>web/pdf.js/web/images/cursor-editorInk.svg</file>\n        <file>web/pdf.js/web/images/findbarButton-next.svg</file>\n        <file>web/pdf.js/web/images/findbarButton-previous.svg</file>\n        <file>web/pdf.js/web/images/loading-dark.svg</file>\n        <file>web/pdf.js/web/images/loading-icon.gif</file>\n        <file>web/pdf.js/web/images/loading.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-documentProperties.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-firstPage.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-handTool.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-lastPage.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-rotateCcw.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-rotateCw.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-scrollHorizontal.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-scrollPage.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-scrollVertical.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-scrollWrapped.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-selectTool.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-spreadEven.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-spreadNone.svg</file>\n        <file>web/pdf.js/web/images/secondaryToolbarButton-spreadOdd.svg</file>\n        <file>web/pdf.js/web/images/shadow.png</file>\n        <file>web/pdf.js/web/images/toolbarButton-bookmark.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-currentOutlineItem.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-download.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-editorFreeText.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-editorInk.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-menuArrow.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-openFile.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-pageDown.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-pageUp.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-presentationMode.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-print.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-search.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-secondaryToolbarToggle.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-sidebarToggle.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-viewAttachments.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-viewLayers.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-viewOutline.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-viewThumbnail.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-zoomIn.svg</file>\n        <file>web/pdf.js/web/images/toolbarButton-zoomOut.svg</file>\n        <file>web/pdf.js/web/images/treeitem-collapsed.svg</file>\n        <file>web/pdf.js/web/images/treeitem-expanded.svg</file>\n        <file>web/pdf.js/web/cmaps/78-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/78-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/78-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/78-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/78-RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/78-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/78ms-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/78ms-RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/83pv-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/90ms-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/90ms-RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/90msp-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/90msp-RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/90pv-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/90pv-RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Add-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Add-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Add-RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Add-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-0.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-1.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-3.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-4.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-5.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-6.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-CNS1-UCS2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-GB1-0.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-GB1-1.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-GB1-2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-GB1-3.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-GB1-4.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-GB1-5.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-GB1-UCS2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-0.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-1.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-3.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-4.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-5.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-6.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Japan1-UCS2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Korea1-0.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Korea1-1.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Korea1-2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Adobe-Korea1-UCS2.bcmap</file>\n        <file>web/pdf.js/web/cmaps/B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/B5pc-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/B5pc-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/CNS-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/CNS-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/CNS1-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/CNS1-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/CNS2-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/CNS2-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/ETen-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/ETen-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/ETenms-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/ETenms-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/ETHK-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/ETHK-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Ext-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Ext-RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Ext-RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Ext-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GB-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GB-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GB-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GB-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBK-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBK-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBK2K-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBK2K-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBKp-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBKp-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBpc-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBpc-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBT-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBT-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBT-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBT-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBTpc-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/GBTpc-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Hankaku.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Hiragana.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKdla-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKdla-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKdlb-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKdlb-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKgccs-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKgccs-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKm314-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKm314-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKm471-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKm471-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKscs-B5-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/HKscs-B5-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Katakana.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSC-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSC-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSC-Johab-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSC-Johab-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSCms-UHC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSCms-UHC-HW-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSCms-UHC-HW-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSCms-UHC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSCpc-EUC-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/KSCpc-EUC-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/LICENSE</file>\n        <file>web/pdf.js/web/cmaps/NWP-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/NWP-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/RKSJ-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/RKSJ-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/Roman.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UCS2-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UCS2-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UTF16-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UTF16-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UTF32-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UTF32-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UTF8-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniCNS-UTF8-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UCS2-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UCS2-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UTF16-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UTF16-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UTF32-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UTF32-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UTF8-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniGB-UTF8-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UCS2-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UCS2-HW-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UCS2-HW-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UCS2-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UTF16-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UTF16-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UTF32-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UTF32-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UTF8-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS-UTF8-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS2004-UTF16-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS2004-UTF16-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS2004-UTF32-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS2004-UTF32-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS2004-UTF8-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJIS2004-UTF8-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJISPro-UCS2-HW-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJISPro-UCS2-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJISPro-UTF8-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJISX0213-UTF32-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJISX0213-UTF32-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJISX02132004-UTF32-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniJISX02132004-UTF32-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UCS2-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UCS2-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UTF16-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UTF16-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UTF32-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UTF32-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UTF8-H.bcmap</file>\n        <file>web/pdf.js/web/cmaps/UniKS-UTF8-V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/V.bcmap</file>\n        <file>web/pdf.js/web/cmaps/WP-Symbol.bcmap</file>\n\n        <file>dicts/en_US.aff</file>\n        <file>dicts/en_US.dic</file>\n        <file>themes/native/text-editor.theme</file>\n        <file>themes/native/highlight.css</file>\n        <file>themes/native/interface.qss</file>\n        <file>themes/native/web.css</file>\n        <file>themes/native/palette.json</file>\n        <file>themes/native/cover.png</file>\n        <file>themes/moonlight/arrow_dropdown.svg</file>\n        <file>themes/moonlight/arrow_dropdown_disabled.svg</file>\n        <file>themes/moonlight/branch_closed.svg</file>\n        <file>themes/moonlight/branch_open.svg</file>\n        <file>themes/moonlight/checkbox_checked.svg</file>\n        <file>themes/moonlight/checkbox_checked_disabled.svg</file>\n        <file>themes/moonlight/checkbox_unchecked.svg</file>\n        <file>themes/moonlight/checkbox_unchecked_disabled.svg</file>\n        <file>themes/moonlight/close.svg</file>\n        <file>themes/moonlight/expand_toolbar.svg</file>\n        <file>themes/moonlight/close_grey.svg</file>\n        <file>themes/moonlight/cover.png</file>\n        <file>themes/moonlight/down.svg</file>\n        <file>themes/moonlight/down_disabled.svg</file>\n        <file>themes/moonlight/float.svg</file>\n        <file>themes/moonlight/highlight.css</file>\n        <file>themes/moonlight/interface.qss</file>\n        <file>themes/moonlight/left.svg</file>\n        <file>themes/moonlight/left_disabled.svg</file>\n        <file>themes/moonlight/menu_checkbox.svg</file>\n        <file>themes/moonlight/menu_radiobutton.svg</file>\n        <file>themes/moonlight/palette.json</file>\n        <file>themes/moonlight/radiobutton_checked.svg</file>\n        <file>themes/moonlight/radiobutton_checked_disabled.svg</file>\n        <file>themes/moonlight/radiobutton_unchecked.svg</file>\n        <file>themes/moonlight/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/moonlight/right.svg</file>\n        <file>themes/moonlight/right_disabled.svg</file>\n        <file>themes/moonlight/sizegrip.svg</file>\n        <file>themes/moonlight/text-editor.theme</file>\n        <file>themes/moonlight/up.svg</file>\n        <file>themes/moonlight/up_disabled.svg</file>\n        <file>themes/moonlight/web.css</file>\n        <file>themes/pure/arrow_dropdown.svg</file>\n        <file>themes/pure/arrow_dropdown_disabled.svg</file>\n        <file>themes/pure/branch_closed.svg</file>\n        <file>themes/pure/branch_open.svg</file>\n        <file>themes/pure/checkbox_checked.svg</file>\n        <file>themes/pure/checkbox_checked_disabled.svg</file>\n        <file>themes/pure/checkbox_unchecked.svg</file>\n        <file>themes/pure/checkbox_unchecked_disabled.svg</file>\n        <file>themes/pure/close.svg</file>\n        <file>themes/pure/expand_toolbar.svg</file>\n        <file>themes/pure/close_grey.svg</file>\n        <file>themes/pure/cover.png</file>\n        <file>themes/pure/down.svg</file>\n        <file>themes/pure/down_disabled.svg</file>\n        <file>themes/pure/float.svg</file>\n        <file>themes/pure/highlight.css</file>\n        <file>themes/pure/interface.qss</file>\n        <file>themes/pure/left.svg</file>\n        <file>themes/pure/left_disabled.svg</file>\n        <file>themes/pure/menu_checkbox.svg</file>\n        <file>themes/pure/menu_radiobutton.svg</file>\n        <file>themes/pure/palette.json</file>\n        <file>themes/pure/radiobutton_checked.svg</file>\n        <file>themes/pure/radiobutton_checked_disabled.svg</file>\n        <file>themes/pure/radiobutton_unchecked.svg</file>\n        <file>themes/pure/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/pure/right.svg</file>\n        <file>themes/pure/right_disabled.svg</file>\n        <file>themes/pure/sizegrip.svg</file>\n        <file>themes/pure/text-editor.theme</file>\n        <file>themes/pure/up.svg</file>\n        <file>themes/pure/up_disabled.svg</file>\n        <file>themes/pure/web.css</file>\n        <file>themes/solarized-dark/arrow_dropdown.svg</file>\n        <file>themes/solarized-dark/arrow_dropdown_disabled.svg</file>\n        <file>themes/solarized-dark/branch_closed.svg</file>\n        <file>themes/solarized-dark/branch_open.svg</file>\n        <file>themes/solarized-dark/checkbox_checked.svg</file>\n        <file>themes/solarized-dark/checkbox_checked_disabled.svg</file>\n        <file>themes/solarized-dark/checkbox_unchecked.svg</file>\n        <file>themes/solarized-dark/checkbox_unchecked_disabled.svg</file>\n        <file>themes/solarized-dark/close.svg</file>\n        <file>themes/solarized-dark/expand_toolbar.svg</file>\n        <file>themes/solarized-dark/close_grey.svg</file>\n        <file>themes/solarized-dark/cover.png</file>\n        <file>themes/solarized-dark/down.svg</file>\n        <file>themes/solarized-dark/down_disabled.svg</file>\n        <file>themes/solarized-dark/float.svg</file>\n        <file>themes/solarized-dark/highlight.css</file>\n        <file>themes/solarized-dark/interface.qss</file>\n        <file>themes/solarized-dark/left.svg</file>\n        <file>themes/solarized-dark/left_disabled.svg</file>\n        <file>themes/solarized-dark/menu_checkbox.svg</file>\n        <file>themes/solarized-dark/menu_radiobutton.svg</file>\n        <file>themes/solarized-dark/palette.json</file>\n        <file>themes/solarized-dark/radiobutton_checked.svg</file>\n        <file>themes/solarized-dark/radiobutton_checked_disabled.svg</file>\n        <file>themes/solarized-dark/radiobutton_unchecked.svg</file>\n        <file>themes/solarized-dark/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/solarized-dark/right.svg</file>\n        <file>themes/solarized-dark/right_disabled.svg</file>\n        <file>themes/solarized-dark/sizegrip.svg</file>\n        <file>themes/solarized-dark/text-editor.theme</file>\n        <file>themes/solarized-dark/up.svg</file>\n        <file>themes/solarized-dark/up_disabled.svg</file>\n        <file>themes/solarized-dark/web.css</file>\n        <file>themes/solarized-light/arrow_dropdown.svg</file>\n        <file>themes/solarized-light/arrow_dropdown_disabled.svg</file>\n        <file>themes/solarized-light/branch_closed.svg</file>\n        <file>themes/solarized-light/branch_open.svg</file>\n        <file>themes/solarized-light/checkbox_checked.svg</file>\n        <file>themes/solarized-light/checkbox_checked_disabled.svg</file>\n        <file>themes/solarized-light/checkbox_unchecked.svg</file>\n        <file>themes/solarized-light/checkbox_unchecked_disabled.svg</file>\n        <file>themes/solarized-light/close.svg</file>\n        <file>themes/solarized-light/expand_toolbar.svg</file>\n        <file>themes/solarized-light/close_grey.svg</file>\n        <file>themes/solarized-light/cover.png</file>\n        <file>themes/solarized-light/down.svg</file>\n        <file>themes/solarized-light/down_disabled.svg</file>\n        <file>themes/solarized-light/float.svg</file>\n        <file>themes/solarized-light/highlight.css</file>\n        <file>themes/solarized-light/interface.qss</file>\n        <file>themes/solarized-light/left.svg</file>\n        <file>themes/solarized-light/left_disabled.svg</file>\n        <file>themes/solarized-light/menu_checkbox.svg</file>\n        <file>themes/solarized-light/menu_radiobutton.svg</file>\n        <file>themes/solarized-light/palette.json</file>\n        <file>themes/solarized-light/radiobutton_checked.svg</file>\n        <file>themes/solarized-light/radiobutton_checked_disabled.svg</file>\n        <file>themes/solarized-light/radiobutton_unchecked.svg</file>\n        <file>themes/solarized-light/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/solarized-light/right.svg</file>\n        <file>themes/solarized-light/right_disabled.svg</file>\n        <file>themes/solarized-light/sizegrip.svg</file>\n        <file>themes/solarized-light/text-editor.theme</file>\n        <file>themes/solarized-light/up.svg</file>\n        <file>themes/solarized-light/up_disabled.svg</file>\n        <file>themes/solarized-light/web.css</file>\n        <file>tasks/git/git.json</file>\n        <file>tasks/git/git.svg</file>\n        <file>tasks/git/commit.svg</file>\n        <file>tasks/git/history.svg</file>\n        <file>tasks/git/initialization.svg</file>\n        <file>tasks/git/pull.svg</file>\n        <file>tasks/git/push.svg</file>\n        <file>tasks/git/status.svg</file>\n        <file>syntax-highlighting/themes/markdown-default.theme</file>\n        <file>syntax-highlighting/themes/markdown-breeze-dark.theme</file>\n        <file>syntax-highlighting/themes/default.theme</file>\n        <file>syntax-highlighting/themes/breeze-dark.theme</file>\n        <file>syntax-highlighting/themes/printing.theme</file>\n        <file>syntax-highlighting/themes/solarized-dark.theme</file>\n        <file>syntax-highlighting/themes/solarized-light.theme</file>\n        <file>syntax-highlighting/syntax/4dos.xml</file>\n        <file>syntax-highlighting/syntax/abap.xml</file>\n        <file>syntax-highlighting/syntax/abc.xml</file>\n        <file>syntax-highlighting/syntax/actionscript.xml</file>\n        <file>syntax-highlighting/syntax/ada.xml</file>\n        <file>syntax-highlighting/syntax/adblock.xml</file>\n        <file>syntax-highlighting/syntax/agda.xml</file>\n        <file>syntax-highlighting/syntax/ahdl.xml</file>\n        <file>syntax-highlighting/syntax/ahk.xml</file>\n        <file>syntax-highlighting/syntax/alert.xml</file>\n        <file>syntax-highlighting/syntax/ample.xml</file>\n        <file>syntax-highlighting/syntax/ansforth94.xml</file>\n        <file>syntax-highlighting/syntax/ansic89.xml</file>\n        <file>syntax-highlighting/syntax/ansys.xml</file>\n        <file>syntax-highlighting/syntax/apache.xml</file>\n        <file>syntax-highlighting/syntax/apparmor.xml</file>\n        <file>syntax-highlighting/syntax/asciidoc.xml</file>\n        <file>syntax-highlighting/syntax/asm-avr.xml</file>\n        <file>syntax-highlighting/syntax/asm-dsp56k.xml</file>\n        <file>syntax-highlighting/syntax/asm-m68k.xml</file>\n        <file>syntax-highlighting/syntax/asm6502.xml</file>\n        <file>syntax-highlighting/syntax/asn1.xml</file>\n        <file>syntax-highlighting/syntax/asp.xml</file>\n        <file>syntax-highlighting/syntax/awk.xml</file>\n        <file>syntax-highlighting/syntax/bash.xml</file>\n        <file>syntax-highlighting/syntax/bibtex.xml</file>\n        <file>syntax-highlighting/syntax/bitbake.xml</file>\n        <file>syntax-highlighting/syntax/bmethod.xml</file>\n        <file>syntax-highlighting/syntax/boo.xml</file>\n        <file>syntax-highlighting/syntax/brightscript.xml</file>\n        <file>syntax-highlighting/syntax/c.xml</file>\n        <file>syntax-highlighting/syntax/carto-css.xml</file>\n        <file>syntax-highlighting/syntax/ccss.xml</file>\n        <file>syntax-highlighting/syntax/cg.xml</file>\n        <file>syntax-highlighting/syntax/cgis.xml</file>\n        <file>syntax-highlighting/syntax/changelog.xml</file>\n        <file>syntax-highlighting/syntax/chicken.xml</file>\n        <file>syntax-highlighting/syntax/cil.xml</file>\n        <file>syntax-highlighting/syntax/cisco.xml</file>\n        <file>syntax-highlighting/syntax/clipper.xml</file>\n        <file>syntax-highlighting/syntax/clist.xml</file>\n        <file>syntax-highlighting/syntax/clojure.xml</file>\n        <file>syntax-highlighting/syntax/cmake.xml</file>\n        <file>syntax-highlighting/syntax/coffee.xml</file>\n        <file>syntax-highlighting/syntax/coldfusion.xml</file>\n        <file>syntax-highlighting/syntax/commonlisp.xml</file>\n        <file>syntax-highlighting/syntax/component-pascal.xml</file>\n        <file>syntax-highlighting/syntax/context.xml</file>\n        <file>syntax-highlighting/syntax/cpp.xml</file>\n        <file>syntax-highlighting/syntax/crk.xml</file>\n        <file>syntax-highlighting/syntax/cs.xml</file>\n        <file>syntax-highlighting/syntax/css.xml</file>\n        <file>syntax-highlighting/syntax/cubescript.xml</file>\n        <file>syntax-highlighting/syntax/cue.xml</file>\n        <file>syntax-highlighting/syntax/curry.xml</file>\n        <file>syntax-highlighting/syntax/d.xml</file>\n        <file>syntax-highlighting/syntax/debianchangelog.xml</file>\n        <file>syntax-highlighting/syntax/debiancontrol.xml</file>\n        <file>syntax-highlighting/syntax/desktop.xml</file>\n        <file>syntax-highlighting/syntax/diff.xml</file>\n        <file>syntax-highlighting/syntax/djangotemplate.xml</file>\n        <file>syntax-highlighting/syntax/dockerfile.xml</file>\n        <file>syntax-highlighting/syntax/dosbat.xml</file>\n        <file>syntax-highlighting/syntax/dot.xml</file>\n        <file>syntax-highlighting/syntax/doxyfile.xml</file>\n        <file>syntax-highlighting/syntax/doxygen.xml</file>\n        <file>syntax-highlighting/syntax/doxygenlua.xml</file>\n        <file>syntax-highlighting/syntax/dtd.xml</file>\n        <file>syntax-highlighting/syntax/e.xml</file>\n        <file>syntax-highlighting/syntax/eiffel.xml</file>\n        <file>syntax-highlighting/syntax/elixir.xml</file>\n        <file>syntax-highlighting/syntax/elm.xml</file>\n        <file>syntax-highlighting/syntax/email.xml</file>\n        <file>syntax-highlighting/syntax/erlang.xml</file>\n        <file>syntax-highlighting/syntax/euphoria.xml</file>\n        <file>syntax-highlighting/syntax/fasm.xml</file>\n        <file>syntax-highlighting/syntax/fastq.xml</file>\n        <file>syntax-highlighting/syntax/ferite.xml</file>\n        <file>syntax-highlighting/syntax/fgl-4gl.xml</file>\n        <file>syntax-highlighting/syntax/fgl-per.xml</file>\n        <file>syntax-highlighting/syntax/fish.xml</file>\n        <file>syntax-highlighting/syntax/flatbuffers.xml</file>\n        <file>syntax-highlighting/syntax/fortran-fixed.xml</file>\n        <file>syntax-highlighting/syntax/fortran-free.xml</file>\n        <file>syntax-highlighting/syntax/freebasic.xml</file>\n        <file>syntax-highlighting/syntax/fsharp.xml</file>\n        <file>syntax-highlighting/syntax/fstab.xml</file>\n        <file>syntax-highlighting/syntax/ftl.xml</file>\n        <file>syntax-highlighting/syntax/gap.xml</file>\n        <file>syntax-highlighting/syntax/gcc.xml</file>\n        <file>syntax-highlighting/syntax/gcode.xml</file>\n        <file>syntax-highlighting/syntax/gdb-bt.xml</file>\n        <file>syntax-highlighting/syntax/gdb.xml</file>\n        <file>syntax-highlighting/syntax/gdbinit.xml</file>\n        <file>syntax-highlighting/syntax/gdl.xml</file>\n        <file>syntax-highlighting/syntax/gettext.xml</file>\n        <file>syntax-highlighting/syntax/git-ignore.xml</file>\n        <file>syntax-highlighting/syntax/git-rebase.xml</file>\n        <file>syntax-highlighting/syntax/gitolite.xml</file>\n        <file>syntax-highlighting/syntax/glosstex.xml</file>\n        <file>syntax-highlighting/syntax/glsl.xml</file>\n        <file>syntax-highlighting/syntax/gnuassembler.xml</file>\n        <file>syntax-highlighting/syntax/gnuplot.xml</file>\n        <file>syntax-highlighting/syntax/go.xml</file>\n        <file>syntax-highlighting/syntax/grammar.xml</file>\n        <file>syntax-highlighting/syntax/groovy.xml</file>\n        <file>syntax-highlighting/syntax/haml.xml</file>\n        <file>syntax-highlighting/syntax/hamlet.xml</file>\n        <file>syntax-highlighting/syntax/haskell.xml</file>\n        <file>syntax-highlighting/syntax/haxe.xml</file>\n        <file>syntax-highlighting/syntax/html.xml</file>\n        <file>syntax-highlighting/syntax/hunspell-aff.xml</file>\n        <file>syntax-highlighting/syntax/hunspell-dat.xml</file>\n        <file>syntax-highlighting/syntax/hunspell-dic.xml</file>\n        <file>syntax-highlighting/syntax/hunspell-idx.xml</file>\n        <file>syntax-highlighting/syntax/idconsole.xml</file>\n        <file>syntax-highlighting/syntax/idl.xml</file>\n        <file>syntax-highlighting/syntax/ilerpg.xml</file>\n        <file>syntax-highlighting/syntax/inform.xml</file>\n        <file>syntax-highlighting/syntax/ini.xml</file>\n        <file>syntax-highlighting/syntax/intelhex.xml</file>\n        <file>syntax-highlighting/syntax/isocpp.xml</file>\n        <file>syntax-highlighting/syntax/j.xml</file>\n        <file>syntax-highlighting/syntax/jam.xml</file>\n        <file>syntax-highlighting/syntax/java.xml</file>\n        <file>syntax-highlighting/syntax/javadoc.xml</file>\n        <file>syntax-highlighting/syntax/javascript-react.xml</file>\n        <file>syntax-highlighting/syntax/javascript.xml</file>\n        <file>syntax-highlighting/syntax/jcl.xml</file>\n        <file>syntax-highlighting/syntax/jira.xml</file>\n        <file>syntax-highlighting/syntax/json.xml</file>\n        <file>syntax-highlighting/syntax/jsp.xml</file>\n        <file>syntax-highlighting/syntax/julia.xml</file>\n        <file>syntax-highlighting/syntax/k.xml</file>\n        <file>syntax-highlighting/syntax/kbasic.xml</file>\n        <file>syntax-highlighting/syntax/kconfig.xml</file>\n        <file>syntax-highlighting/syntax/kdesrc-buildrc.xml</file>\n        <file>syntax-highlighting/syntax/kotlin.xml</file>\n        <file>syntax-highlighting/syntax/latex.xml</file>\n        <file>syntax-highlighting/syntax/ld.xml</file>\n        <file>syntax-highlighting/syntax/ldif.xml</file>\n        <file>syntax-highlighting/syntax/less.xml</file>\n        <file>syntax-highlighting/syntax/lex.xml</file>\n        <file>syntax-highlighting/syntax/lilypond.xml</file>\n        <file>syntax-highlighting/syntax/literate-curry.xml</file>\n        <file>syntax-highlighting/syntax/literate-haskell.xml</file>\n        <file>syntax-highlighting/syntax/logcat.xml</file>\n        <file>syntax-highlighting/syntax/logtalk.xml</file>\n        <file>syntax-highlighting/syntax/lpc.xml</file>\n        <file>syntax-highlighting/syntax/lsl.xml</file>\n        <file>syntax-highlighting/syntax/lua.xml</file>\n        <file>syntax-highlighting/syntax/m3u.xml</file>\n        <file>syntax-highlighting/syntax/m4.xml</file>\n        <file>syntax-highlighting/syntax/mab.xml</file>\n        <file>syntax-highlighting/syntax/magma.xml</file>\n        <file>syntax-highlighting/syntax/makefile.xml</file>\n        <file>syntax-highlighting/syntax/mako.xml</file>\n        <file>syntax-highlighting/syntax/mandoc.xml</file>\n        <file>syntax-highlighting/syntax/markdown.xml</file>\n        <file>syntax-highlighting/syntax/mason.xml</file>\n        <file>syntax-highlighting/syntax/mathematica.xml</file>\n        <file>syntax-highlighting/syntax/matlab.xml</file>\n        <file>syntax-highlighting/syntax/maxima.xml</file>\n        <file>syntax-highlighting/syntax/mediawiki.xml</file>\n        <file>syntax-highlighting/syntax/mel.xml</file>\n        <file>syntax-highlighting/syntax/mergetagtext.xml</file>\n        <file>syntax-highlighting/syntax/meson.xml</file>\n        <file>syntax-highlighting/syntax/metafont.xml</file>\n        <file>syntax-highlighting/syntax/metamath.xml</file>\n        <file>syntax-highlighting/syntax/mib.xml</file>\n        <file>syntax-highlighting/syntax/mips.xml</file>\n        <file>syntax-highlighting/syntax/modelica.xml</file>\n        <file>syntax-highlighting/syntax/modelines.xml</file>\n        <file>syntax-highlighting/syntax/modula-2-iso-only.xml</file>\n        <file>syntax-highlighting/syntax/modula-2-pim-only.xml</file>\n        <file>syntax-highlighting/syntax/modula-2-r10-only.xml</file>\n        <file>syntax-highlighting/syntax/modula-2.xml</file>\n        <file>syntax-highlighting/syntax/monobasic.xml</file>\n        <file>syntax-highlighting/syntax/mup.xml</file>\n        <file>syntax-highlighting/syntax/mustache.xml</file>\n        <file>syntax-highlighting/syntax/nagios.xml</file>\n        <file>syntax-highlighting/syntax/nasm.xml</file>\n        <file>syntax-highlighting/syntax/nemerle.xml</file>\n        <file>syntax-highlighting/syntax/nesc.xml</file>\n        <file>syntax-highlighting/syntax/ninja.xml</file>\n        <file>syntax-highlighting/syntax/noweb.xml</file>\n        <file>syntax-highlighting/syntax/nsis.xml</file>\n        <file>syntax-highlighting/syntax/objectivec.xml</file>\n        <file>syntax-highlighting/syntax/objectivecpp.xml</file>\n        <file>syntax-highlighting/syntax/ocaml.xml</file>\n        <file>syntax-highlighting/syntax/ocamllex.xml</file>\n        <file>syntax-highlighting/syntax/ocamlyacc.xml</file>\n        <file>syntax-highlighting/syntax/octave.xml</file>\n        <file>syntax-highlighting/syntax/oors.xml</file>\n        <file>syntax-highlighting/syntax/opal.xml</file>\n        <file>syntax-highlighting/syntax/opencl.xml</file>\n        <file>syntax-highlighting/syntax/openscad.xml</file>\n        <file>syntax-highlighting/syntax/pango.xml</file>\n        <file>syntax-highlighting/syntax/pascal.xml</file>\n        <file>syntax-highlighting/syntax/perl.xml</file>\n        <file>syntax-highlighting/syntax/pgn.xml</file>\n        <file>syntax-highlighting/syntax/php.xml</file>\n        <file>syntax-highlighting/syntax/picsrc.xml</file>\n        <file>syntax-highlighting/syntax/pig.xml</file>\n        <file>syntax-highlighting/syntax/pike.xml</file>\n        <file>syntax-highlighting/syntax/pli.xml</file>\n        <file>syntax-highlighting/syntax/ply.xml</file>\n        <file>syntax-highlighting/syntax/pony.xml</file>\n        <file>syntax-highlighting/syntax/postscript.xml</file>\n        <file>syntax-highlighting/syntax/povray.xml</file>\n        <file>syntax-highlighting/syntax/powershell.xml</file>\n        <file>syntax-highlighting/syntax/ppd.xml</file>\n        <file>syntax-highlighting/syntax/praat.xml</file>\n        <file>syntax-highlighting/syntax/progress.xml</file>\n        <file>syntax-highlighting/syntax/prolog.xml</file>\n        <file>syntax-highlighting/syntax/protobuf.xml</file>\n        <file>syntax-highlighting/syntax/pug.xml</file>\n        <file>syntax-highlighting/syntax/puppet.xml</file>\n        <file>syntax-highlighting/syntax/purebasic.xml</file>\n        <file>syntax-highlighting/syntax/python.xml</file>\n        <file>syntax-highlighting/syntax/q.xml</file>\n        <file>syntax-highlighting/syntax/qdocconf.xml</file>\n        <file>syntax-highlighting/syntax/qmake.xml</file>\n        <file>syntax-highlighting/syntax/qml.xml</file>\n        <file>syntax-highlighting/syntax/r.xml</file>\n        <file>syntax-highlighting/syntax/rapidq.xml</file>\n        <file>syntax-highlighting/syntax/rdoc.xml</file>\n        <file>syntax-highlighting/syntax/relaxng.xml</file>\n        <file>syntax-highlighting/syntax/relaxngcompact.xml</file>\n        <file>syntax-highlighting/syntax/replicode.xml</file>\n        <file>syntax-highlighting/syntax/rest.xml</file>\n        <file>syntax-highlighting/syntax/rexx.xml</file>\n        <file>syntax-highlighting/syntax/rhtml.xml</file>\n        <file>syntax-highlighting/syntax/rib.xml</file>\n        <file>syntax-highlighting/syntax/rmarkdown.xml</file>\n        <file>syntax-highlighting/syntax/roff.xml</file>\n        <file>syntax-highlighting/syntax/rpmspec.xml</file>\n        <file>syntax-highlighting/syntax/rsiidl.xml</file>\n        <file>syntax-highlighting/syntax/rtf.xml</file>\n        <file>syntax-highlighting/syntax/ruby.xml</file>\n        <file>syntax-highlighting/syntax/rust.xml</file>\n        <file>syntax-highlighting/syntax/sass.xml</file>\n        <file>syntax-highlighting/syntax/sather.xml</file>\n        <file>syntax-highlighting/syntax/scala.xml</file>\n        <file>syntax-highlighting/syntax/scheme.xml</file>\n        <file>syntax-highlighting/syntax/sci.xml</file>\n        <file>syntax-highlighting/syntax/scss.xml</file>\n        <file>syntax-highlighting/syntax/sed.xml</file>\n        <file>syntax-highlighting/syntax/selinux-cil.xml</file>\n        <file>syntax-highlighting/syntax/selinux-fc.xml</file>\n        <file>syntax-highlighting/syntax/selinux.xml</file>\n        <file>syntax-highlighting/syntax/sgml.xml</file>\n        <file>syntax-highlighting/syntax/sieve.xml</file>\n        <file>syntax-highlighting/syntax/sisu.xml</file>\n        <file>syntax-highlighting/syntax/smali.xml</file>\n        <file>syntax-highlighting/syntax/sml.xml</file>\n        <file>syntax-highlighting/syntax/spice.xml</file>\n        <file>syntax-highlighting/syntax/sql-mysql.xml</file>\n        <file>syntax-highlighting/syntax/sql-oracle.xml</file>\n        <file>syntax-highlighting/syntax/sql-postgresql.xml</file>\n        <file>syntax-highlighting/syntax/sql.xml</file>\n        <file>syntax-highlighting/syntax/stan.xml</file>\n        <file>syntax-highlighting/syntax/stata.xml</file>\n        <file>syntax-highlighting/syntax/stl.xml</file>\n        <file>syntax-highlighting/syntax/systemc.xml</file>\n        <file>syntax-highlighting/syntax/systemverilog.xml</file>\n        <file>syntax-highlighting/syntax/tads3.xml</file>\n        <file>syntax-highlighting/syntax/taskjuggler.xml</file>\n        <file>syntax-highlighting/syntax/tcl.xml</file>\n        <file>syntax-highlighting/syntax/tcsh.xml</file>\n        <file>syntax-highlighting/syntax/template-toolkit.xml</file>\n        <file>syntax-highlighting/syntax/texinfo.xml</file>\n        <file>syntax-highlighting/syntax/textile.xml</file>\n        <file>syntax-highlighting/syntax/tibasic.xml</file>\n        <file>syntax-highlighting/syntax/tiger.xml</file>\n        <file>syntax-highlighting/syntax/toml.xml</file>\n        <file>syntax-highlighting/syntax/txt2tags.xml</file>\n        <file>syntax-highlighting/syntax/typescript-react.xml</file>\n        <file>syntax-highlighting/syntax/typescript.xml</file>\n        <file>syntax-highlighting/syntax/uscript.xml</file>\n        <file>syntax-highlighting/syntax/vala.xml</file>\n        <file>syntax-highlighting/syntax/valgrind-suppression.xml</file>\n        <file>syntax-highlighting/syntax/varnish.xml</file>\n        <file>syntax-highlighting/syntax/varnish4.xml</file>\n        <file>syntax-highlighting/syntax/varnishcc.xml</file>\n        <file>syntax-highlighting/syntax/varnishcc4.xml</file>\n        <file>syntax-highlighting/syntax/varnishtest.xml</file>\n        <file>syntax-highlighting/syntax/varnishtest4.xml</file>\n        <file>syntax-highlighting/syntax/vcard.xml</file>\n        <file>syntax-highlighting/syntax/velocity.xml</file>\n        <file>syntax-highlighting/syntax/vera.xml</file>\n        <file>syntax-highlighting/syntax/verilog.xml</file>\n        <file>syntax-highlighting/syntax/vhdl.xml</file>\n        <file>syntax-highlighting/syntax/vrml.xml</file>\n        <file>syntax-highlighting/syntax/wavefront-obj.xml</file>\n        <file>syntax-highlighting/syntax/wayland-trace.xml</file>\n        <file>syntax-highlighting/syntax/winehq.xml</file>\n        <file>syntax-highlighting/syntax/wml.xml</file>\n        <file>syntax-highlighting/syntax/xharbour.xml</file>\n        <file>syntax-highlighting/syntax/xml.xml</file>\n        <file>syntax-highlighting/syntax/xmldebug.xml</file>\n        <file>syntax-highlighting/syntax/xonotic-console.xml</file>\n        <file>syntax-highlighting/syntax/xorg.xml</file>\n        <file>syntax-highlighting/syntax/xslt.xml</file>\n        <file>syntax-highlighting/syntax/xul.xml</file>\n        <file>syntax-highlighting/syntax/yacas.xml</file>\n        <file>syntax-highlighting/syntax/yacc.xml</file>\n        <file>syntax-highlighting/syntax/yaml.xml</file>\n        <file>syntax-highlighting/syntax/yang.xml</file>\n        <file>syntax-highlighting/syntax/zonnon.xml</file>\n        <file>syntax-highlighting/syntax/zsh.xml</file>\n        <file>syntax-highlighting/themes/vscode-dark.theme</file>\n        <file>themes/vscode-dark/arrow_dropdown.svg</file>\n        <file>themes/vscode-dark/arrow_dropdown_disabled.svg</file>\n        <file>themes/vscode-dark/branch_closed.svg</file>\n        <file>themes/vscode-dark/branch_open.svg</file>\n        <file>themes/vscode-dark/checkbox_checked.svg</file>\n        <file>themes/vscode-dark/checkbox_checked_disabled.svg</file>\n        <file>themes/vscode-dark/checkbox_unchecked.svg</file>\n        <file>themes/vscode-dark/checkbox_unchecked_disabled.svg</file>\n        <file>themes/vscode-dark/close.svg</file>\n        <file>themes/vscode-dark/expand_toolbar.svg</file>\n        <file>themes/vscode-dark/close_grey.svg</file>\n        <file>themes/vscode-dark/cover.png</file>\n        <file>themes/vscode-dark/down.svg</file>\n        <file>themes/vscode-dark/down_disabled.svg</file>\n        <file>themes/vscode-dark/float.svg</file>\n        <file>themes/vscode-dark/highlight.css</file>\n        <file>themes/vscode-dark/interface.qss</file>\n        <file>themes/vscode-dark/left.svg</file>\n        <file>themes/vscode-dark/left_disabled.svg</file>\n        <file>themes/vscode-dark/menu_checkbox.svg</file>\n        <file>themes/vscode-dark/menu_radiobutton.svg</file>\n        <file>themes/vscode-dark/palette.json</file>\n        <file>themes/vscode-dark/radiobutton_checked.svg</file>\n        <file>themes/vscode-dark/radiobutton_checked_disabled.svg</file>\n        <file>themes/vscode-dark/radiobutton_unchecked.svg</file>\n        <file>themes/vscode-dark/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/vscode-dark/readme.md</file>\n        <file>themes/vscode-dark/right.svg</file>\n        <file>themes/vscode-dark/right_disabled.svg</file>\n        <file>themes/vscode-dark/sizegrip.svg</file>\n        <file>themes/vscode-dark/text-editor.theme</file>\n        <file>themes/vscode-dark/up.svg</file>\n        <file>themes/vscode-dark/up_disabled.svg</file>\n        <file>themes/vscode-dark/web.css</file>\n        <file>themes/vue-light/arrow_dropdown.svg</file>\n        <file>themes/vue-light/arrow_dropdown_disabled.svg</file>\n        <file>themes/vue-light/branch_closed.svg</file>\n        <file>themes/vue-light/branch_open.svg</file>\n        <file>themes/vue-light/checkbox_checked.svg</file>\n        <file>themes/vue-light/checkbox_checked_disabled.svg</file>\n        <file>themes/vue-light/checkbox_unchecked.svg</file>\n        <file>themes/vue-light/checkbox_unchecked_disabled.svg</file>\n        <file>themes/vue-light/close.svg</file>\n        <file>themes/vue-light/expand_toolbar.svg</file>\n        <file>themes/vue-light/close_grey.svg</file>\n        <file>themes/vue-light/cover.png</file>\n        <file>themes/vue-light/down.svg</file>\n        <file>themes/vue-light/down_disabled.svg</file>\n        <file>themes/vue-light/float.svg</file>\n        <file>themes/vue-light/highlight.css</file>\n        <file>themes/vue-light/interface.qss</file>\n        <file>themes/vue-light/left.svg</file>\n        <file>themes/vue-light/left_disabled.svg</file>\n        <file>themes/vue-light/menu_checkbox.svg</file>\n        <file>themes/vue-light/menu_radiobutton.svg</file>\n        <file>themes/vue-light/palette.json</file>\n        <file>themes/vue-light/radiobutton_checked.svg</file>\n        <file>themes/vue-light/radiobutton_checked_disabled.svg</file>\n        <file>themes/vue-light/radiobutton_unchecked.svg</file>\n        <file>themes/vue-light/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/vue-light/right.svg</file>\n        <file>themes/vue-light/right_disabled.svg</file>\n        <file>themes/vue-light/sizegrip.svg</file>\n        <file>themes/vue-light/text-editor.theme</file>\n        <file>themes/vue-light/up.svg</file>\n        <file>themes/vue-light/up_disabled.svg</file>\n        <file>themes/vue-light/web.css</file>\n        <file>themes/vue-dark/arrow_dropdown.svg</file>\n        <file>themes/vue-dark/arrow_dropdown_disabled.svg</file>\n        <file>themes/vue-dark/branch_closed.svg</file>\n        <file>themes/vue-dark/branch_open.svg</file>\n        <file>themes/vue-dark/checkbox_checked.svg</file>\n        <file>themes/vue-dark/checkbox_checked_disabled.svg</file>\n        <file>themes/vue-dark/checkbox_unchecked.svg</file>\n        <file>themes/vue-dark/checkbox_unchecked_disabled.svg</file>\n        <file>themes/vue-dark/close.svg</file>\n        <file>themes/vue-dark/expand_toolbar.svg</file>\n        <file>themes/vue-dark/close_grey.svg</file>\n        <file>themes/vue-dark/cover.png</file>\n        <file>themes/vue-dark/down.svg</file>\n        <file>themes/vue-dark/down_disabled.svg</file>\n        <file>themes/vue-dark/float.svg</file>\n        <file>themes/vue-dark/highlight.css</file>\n        <file>themes/vue-dark/interface.qss</file>\n        <file>themes/vue-dark/left.svg</file>\n        <file>themes/vue-dark/left_disabled.svg</file>\n        <file>themes/vue-dark/menu_checkbox.svg</file>\n        <file>themes/vue-dark/menu_radiobutton.svg</file>\n        <file>themes/vue-dark/palette.json</file>\n        <file>themes/vue-dark/radiobutton_checked.svg</file>\n        <file>themes/vue-dark/radiobutton_checked_disabled.svg</file>\n        <file>themes/vue-dark/radiobutton_unchecked.svg</file>\n        <file>themes/vue-dark/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/vue-dark/right.svg</file>\n        <file>themes/vue-dark/right_disabled.svg</file>\n        <file>themes/vue-dark/sizegrip.svg</file>\n        <file>themes/vue-dark/text-editor.theme</file>\n        <file>themes/vue-dark/up.svg</file>\n        <file>themes/vue-dark/up_disabled.svg</file>\n        <file>themes/vue-dark/web.css</file>\n        <file>themes/vx-idea/code_highlight/highlight-dark.css</file>\n        <file>themes/vx-idea/code_highlight/highlight-one-light.css</file>\n        <file>themes/vx-idea/tips_components/alert.png</file>\n        <file>themes/vx-idea/tips_components/sytle.css</file>\n        <file>themes/vx-idea/arrow_dropdown.svg</file>\n        <file>themes/vx-idea/arrow_dropdown_disabled.svg</file>\n        <file>themes/vx-idea/branch_closed.svg</file>\n        <file>themes/vx-idea/branch_open.svg</file>\n        <file>themes/vx-idea/checkbox_checked.svg</file>\n        <file>themes/vx-idea/checkbox_checked_disabled.svg</file>\n        <file>themes/vx-idea/checkbox_unchecked.svg</file>\n        <file>themes/vx-idea/checkbox_unchecked_disabled.svg</file>\n        <file>themes/vx-idea/close.svg</file>\n        <file>themes/vx-idea/expand_toolbar.svg</file>\n        <file>themes/vx-idea/close_grey.svg</file>\n        <file>themes/vx-idea/cover.png</file>\n        <file>themes/vx-idea/down.svg</file>\n        <file>themes/vx-idea/down_disabled.svg</file>\n        <file>themes/vx-idea/float.svg</file>\n        <file>themes/vx-idea/highlight.css</file>\n        <file>themes/vx-idea/interface.qss</file>\n        <file>themes/vx-idea/left.svg</file>\n        <file>themes/vx-idea/left_disabled.svg</file>\n        <file>themes/vx-idea/menu_checkbox.svg</file>\n        <file>themes/vx-idea/menu_radiobutton.svg</file>\n        <file>themes/vx-idea/palette.json</file>\n        <file>themes/vx-idea/radiobutton_checked.svg</file>\n        <file>themes/vx-idea/radiobutton_checked_disabled.svg</file>\n        <file>themes/vx-idea/radiobutton_unchecked.svg</file>\n        <file>themes/vx-idea/radiobutton_unchecked_disabled.svg</file>\n        <file>themes/vx-idea/README.md</file>\n        <file>themes/vx-idea/right.svg</file>\n        <file>themes/vx-idea/right_disabled.svg</file>\n        <file>themes/vx-idea/sizegrip.svg</file>\n        <file>themes/vx-idea/text-editor.theme</file>\n        <file>themes/vx-idea/up.svg</file>\n        <file>themes/vx-idea/up_disabled.svg</file>\n        <file>themes/vx-idea/web.css</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/4dos.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY label\t\t\"[a-zA-Z_][a-zA-Z_0-9]*\">\t\t\t\t<!-- so sehen Labels aus -->\n\t<!ENTITY varname\t\"([a-z_]\\w*|[0-9]*[&amp;])\">\t\t\t<!-- valid character in a variable name -->\n\t<!ENTITY pathpart\t\"[^&#34;&#42;&#61;/:&lt;&gt;?\\\\[\\]\\|]\">\t<!-- valid character in a file name -->\n\t<!ENTITY tasten\t\t\"((Strg|Alt|Shift)-)?([a-z0-9]|F[1-9]|F1[0-2]|Esc|Bksp|Tab|Enter|Up|Down|Left|Right|PgUp|PgDn|Home|End|Ins|Del)\">\n]>\n<language name=\"4DOS BatchToMemory\" kateversion=\"5.0\" version=\"5\" section=\"Scripts\" extensions=\"*.btm\" casesensitive=\"0\" indenter=\"cstyle\" author=\"Stefan Huebner (st0ff@npl.de)\" license=\"LGPL\">\n<!--DONE:\n\t- comments are there\n\t- substitutions are there\n\t- basic variable function handling, distinguishing the function result between numerical and string\n\t- variables are there (somehow)\n\t- numbers will be found\n\t- escape characters are found and highlit\n\t- jumps, gosubs and labels\n\t- command grouping\n\t- conditions\n\t- redirection\n\t- many different command handlings\n\t\t- iff\n\t\t- echo\n\t\t- text/endtext\n\t\t- set/unset\n\t\t- input/inkey\n\t\t- do\n\t\t- for\n\t\t- switch\n\t- internal commands of 4DOS\n\tTODO:\n\t- if someone finds that PATH-detection makes sense: create it...\n\t- whatever doesn't seem to be correctly lit after all the preceeding stuff ...\n\t- follow the TODO-Marks\n-->\n\t<highlighting>\n                <list name=\"HighlightInsideComment\">\n                        <item>todo</item>\n                        <item>attention</item>\n                        <item>attn</item>\n                        <item>fixme</item>\n                        <item>achtung</item>\n                        <item>info</item>\n                </list>\n                <list name=\"IntFunctions\">\n                        <item>DOSMEM</item>   <!-- b|k|m-->\n                        <item>EMS</item>        <!-- b|k|m-->\n                        <item>EXTENDED</item>   <!-- b|k|m-->\n                        <item>XMS</item>        <!-- b|k|m-->\n                        <item>CDROM</item>      <!--string-->\n                        <item>CLUSTSIZE</item>  <!--string-->\n                        <item>CODEPAGE</item>   <!--string-->\n                        <item>COM</item>        <!--   int-->\n                        <item>DEVICE</item>   <!--string-->\n                        <item>DISKFREE</item>   <!--string, b|k|m-->\n                        <item>DISKTOTAL</item>  <!--string, b|k|m-->\n                        <item>DISKUSED</item>   <!--string, b|k|m-->\n                        <item>DRIVETYPE</item>  <!--string-->\n                        <item>HDDSIZE</item>  <!--string, b|k|m-->\n                        <item>LPT</item>        <!--   int-->\n                        <item>READY</item>      <!--string-->\n                        <item>REMOTE</item>   <!--string-->\n                        <item>REMOVABLE</item>  <!--string-->\n                        <item>ATTRIB</item>   <!--string,-n|r|h|s|a|d,p]--><!--ATTENTION : nur mit 2 Parametern wird ein Int returned-->\n                        <item>COMPARE</item>  <!--string-->\n                        <item>FILEAGE</item>  <!--string,a|c|w]-->\n                        <item>FILECLOSE</item>  <!--   int-->\n                        <item>FILEOPEN</item>   <!--string, r|w|a,b|t]-->\n                        <item>FILEREAD</item>   <!--   int,   int]-->\n                        <item>FILEREADB</item>  <!--   int,   int-->\n                        <item>FILES</item>      <!--string,-n|r|h|s|a|d]-->\n                        <item>FILESEEK</item>   <!--   int,   int,   int-->\n                        <item>FILESEEKL</item>  <!--   int,   int-->\n                        <item>FILESIZE</item>   <!--string,char,char]]-->\n                        <item>FILEWRITE</item>  <!--   int,string-->\n                        <item>FILEWRITEB</item> <!--   int,   int,string-->\n                        <item>FINDCLOSE</item>  <!--string-->\n                        <item>LINES</item>      <!--string-->\n                        <item>ASCII</item>      <!--  char-->\n                        <item>COUNT</item>      <!--  char,string-->\n                        <item>FIELDS</item>   <!--\"string\",]string-->\n                        <item>INDEX</item>      <!--string,string,int]-->\n                        <item>ISALNUM</item>  <!--string-->\n                        <item>ISALPHA</item>  <!--string-->\n                        <item>ISASCII</item>  <!--string-->\n                        <item>ISCNTRL</item>  <!--string-->\n                        <item>ISDIGIT</item>  <!--string-->\n                        <item>ISLOWER</item>  <!--string-->\n                        <item>ISPRINT</item>  <!--string-->\n                        <item>ISPUNCT</item>  <!--string-->\n                        <item>ISSPACE</item>  <!--string-->\n                        <item>ISUPPER</item>  <!--string-->\n                        <item>ISXDIGIT</item>   <!--string-->\n                        <item>LEN</item>        <!--string-->\n                        <item>SIMILAR</item>  <!--string,string-->\n                        <item>WILD</item>     <!--string,string-->\n                        <item>WORDS</item>      <!--\"string\",]string-->\n                        <item>ABS</item>        <!-- float-->\n                        <item>AVERAGE</item>  <!-- float,float,float...]]]-->\n                        <item>CEILING</item>  <!-- float-->\n                        <item>CONVERT</item>  <!--   int,   int,   int-->\n                        <item>DEC</item>        <!--expression-->\n                        <item>DECIMAL</item>  <!-- float-->\n                        <item>DIGITS</item>   <!--string-->\n                        <item>EVAL</item>     <!--expression-->\n                        <item>FLOOR</item>      <!-- float-->\n                        <item>INC</item>        <!--expression-->\n                        <item>INT</item>        <!-- float-->\n                        <item>MAX</item>        <!-- float,float,float...]]]-->\n                        <item>MIN</item>        <!-- float,float,float...]]]-->\n                        <item>NUMERIC</item>  <!--string-->\n                        <item>RANDOM</item>   <!-- float,float-->\n                        <item>DATE</item>     <!--  date-->\n                        <item>DAY</item>        <!--  date-->\n                        <item>DOWI</item>     <!--  date-->\n                        <item>DOY</item>        <!--  date-->\n                        <item>ISODOWI</item>  <!--  date-->\n                        <item>ISOWEEK</item>  <!--  date-->\n                        <item>ISOWYEAR</item>   <!--  date-->\n                        <item>MAKEAGE</item>  <!--  date,time]-->\n                        <item>MONTH</item>      <!--  date-->\n                        <item>TIME</item>     <!--  time-->\n                        <item>YEAR</item>     <!--  date-->\n                        <item>EXEC</item>     <!--expression-->\n                        <item>INIWRITE</item>   <!--string,string,string,string-->\n                </list>\n                <list name=\"StringFunctions\">\n                        <item>DDCSTR</item>   <!--   int-->\n                        <item>MASTER</item>   <!--string-->\n                        <item>READSCR</item>  <!--   int,   int,   int-->\n                        <item>SMBSTR</item>   <!--   int,   int-->\n                        <item>CWD</item>        <!--string-->\n                        <item>CWDS</item>     <!--string-->\n                        <item>FSTYPE</item>   <!--string-->\n                        <item>LABEL</item>      <!--string-->\n                        <item>SERIAL</item>   <!--string-->\n                        <item>ATTRIB</item>   <!--string--><!--ATTENTION : nur mit 1 Parameter wird ein String returned-->\n                        <item>FILEDATE</item>   <!--string,acw],n]]-->\n                        <item>FILETIME</item>   <!--string,acw],s]]-->\n                        <item>FINDFIRST</item>  <!--string,-n|r|h|s|a|d]-->\n                        <item>FINDNEXT</item>   <!--string,-n|r|h|s|a|d]-->\n                        <item>LINE</item>     <!--string,   int-->\n                        <item>MD5</item>        <!--string-->\n                        <item>SEARCH</item>   <!--string,string]-->\n                        <item>SHA1</item>     <!--string-->\n                        <item>TRUENAME</item>   <!--string-->\n                        <item>UNIQUE</item>   <!--string-->\n                        <item>ALTNAME</item>  <!--string-->\n                        <item>EXPAND</item>   <!--string,-n|r|h|s|a|d]-->\n                        <item>EXT</item>        <!--string-->\n                        <item>FILENAME</item>   <!--string-->\n                        <item>FULL</item>     <!--string-->\n                        <item>LFN</item>        <!--string-->\n                        <item>NAME</item>     <!--string-->\n                        <item>PATH</item>     <!--string-->\n                        <item>QUOTE</item>      <!--string-->\n                        <item>SFN</item>        <!--string-->\n                        <item>UNQUOTE</item>  <!--string-->\n                        <item>UNQUOTES</item>   <!--string-->\n                        <item>ASCII</item>      <!--string-->\n                        <item>CAPS</item>     <!--\"string\",string-->\n                        <item>CHAR</item>     <!--space-delimited list of int-->\n                        <item>FIELD</item>      <!--\"string\",] int,string-->\n                        <item>FORMAT</item>   <!--string,string-->\n                        <item>INSERT</item>   <!--   int,string,string-->\n                        <item>INSTR</item>      <!--   int,   int,string-->\n                        <item>LCS</item>        <!--string,string-->\n                        <item>LEFT</item>     <!--   int,string-->\n                        <item>LOWER</item>      <!--string-->\n                        <item>LTRIM</item>      <!--string,string-->\n                        <item>REPEAT</item>   <!--  char,   int-->\n                        <item>REPLACE</item>  <!--string,string,string-->\n                        <item>RIGHT</item>      <!--   int,string-->\n                        <item>RTRIM</item>      <!--string,string-->\n                        <item>REVERSE</item>  <!--string-->\n                        <item>STRIP</item>      <!--string,string-->\n                        <item>SUBST</item>      <!--   int,string,string-->\n                        <item>SUBSTR</item>   <!--   int,   int,string-->\n                        <item>TRIM</item>     <!--string-->\n                        <item>UPPER</item>      <!--string-->\n                        <item>WORD</item>     <!--\"string\",]n,string-->\n                        <item>COMMA</item>      <!-- float-->\n                        <item>AGEDATE</item>  <!--   int,format]-->\n                        <item>DATECONV</item>   <!--string,format]-->\n                        <item>DOW</item>        <!--  date-->\n                        <item>DOWF</item>     <!--  date-->\n                        <item>MAKEDATE</item>   <!--   int-->\n                        <item>MAKETIME</item>   <!--   int-->\n                        <item>MONTHF</item>   <!--  date-->\n                        <item>ALIAS</item>      <!--string-->\n                        <item>CLIP</item>     <!--string-->\n                        <item>CLIPW</item>      <!--string-->\n                        <item>EXECSTR</item>  <!--string-->\n                        <item>FUNCTION</item>   <!--string-->\n                        <item>HISTORY</item>  <!--   int,   int]-->\n                        <item>IF</item>               <!--condition,string,string-->\n                        <item>INIREAD</item>  <!--string,string,string-->\n                        <item>SELECT</item>   <!--string,   int,   int,   int,   int,string-->\n                        <item>TIMER</item>      <!--   int-->\n                </list>\n                <list name=\"IfCommand\">         <item>if</item>               </list>\n                <list name=\"IffCommand\">        <item>iff</item>              </list>\n                <list name=\"TextCommand\">       <item>text</item>             </list>\n                <list name=\"InputCommand\">      <item>input</item>    </list>\n                <list name=\"InkeyCommand\">  <item>inkey</item>        </list>\n                <list name=\"DoCommand\">  <item>do</item>              </list>\n                <list name=\"EnddoCommand\">  <item>enddo</item>        </list>\n                <list name=\"SkipdoCommand\">\n                        <item>iterate</item>\n                        <item>leave</item>\n                </list>\n                <list name=\"SwitchCommand\">     <item>switch</item>   </list>\n                <list name=\"TestErrorlevel\"><item>errorlevel</item></list>\n                <list name=\"TestStatusVarname\">\n                        <item>defined</item>\n                        <item>isalias</item>\n                        <item>isfunction</item>\n                        <item>isinternal</item>\n                        <item>islabel</item>\n                </list>\n                <list name=\"SetCommand\">\n                        <item>set</item>\n                        <item>function</item>\n                        <item>alias</item>\n                </list>\n                <list name=\"UnsetCommand\">\n                        <item>ENDLOCAL</item>\n                        <item>UNALIAS</item>\n                        <item>UNFUNCTION</item>\n                        <item>UNSET</item>\n                </list>\n                <list name=\"BadCommands\">\n                        <item>for</item>\n                        <item>else</item>\n                        <item>elseiff</item>\n                        <item>endiff</item>\n                        <item>enddo</item>\n                        <item>endtext</item>\n                        <item>case</item>\n                        <item>endswitch</item>\n                        <item>default</item>\n                        <!-- the following is only valid within a do-loop.  But obviously I didn't think about it twice:\n                                if inside a do-loop we enter an iff/endiff construct, we switch contexts and the \"leave\" will\n                                not be found by the \"insideDo\" context.  There would need to be a way to create a dynamic list\n                                of keywords that can be shorted or expanded by a specific context, so that the above wouldn't\n                                happen. -->\n                        <!--item> iterate </item>\n                        <item> leave </item-->\n                </list>\n                <list name=\"NeedOnOffCommands\">\n                        <item>BREAK</item>\n                        <item>IDLE</item>\n                        <item>LFNFOR</item>\n                        <item>LOADBTM</item>\n                        <item>SWAPPING</item>\n                        <item>TRANSIENT</item>\n                        <item>VERIFY</item>\n                </list>\n                <list name=\"TakeAFileNameCommands\">\n                        <item>CALL</item>\n                        <item>CD</item>\n                        <item>CHDIR</item>\n                        <item>CDD</item>\n                        <item>DIR</item>\n                        <item>ERASE</item>\n                        <item>DEL</item>\n                        <item>DESCRIBE</item>\n                        <item>HEAD</item>\n                        <item>MD</item>\n                        <item>MKDIR</item>\n                        <item>RD</item>\n                        <item>RMDIR</item>\n                        <item>PUSHD</item>\n                        <item>REN</item>\n                        <item>RENAME</item>\n                        <item>TOUCH</item>\n                </list>\n                <list name=\"simpleNoChecksCommands\">\n                        <item>BEEP</item>\n                        <item>CANCEL</item>\n                        <item>DATE</item>\n                        <item>FREE</item>\n                        <item>KEYBD</item>\n                        <item>ELSE</item>\n                        <item>PAUSE</item>\n                        <item>POPD</item>\n                        <item>QUIT</item>\n                        <item>SETDOS</item>\n                        <item>SHIFT</item>\n                        <item>TAIL</item>\n                        <item>TEE</item>\n                        <item>TIME</item>\n                        <item>TIMER</item>\n                        <item>TYPE</item>\n                </list>\n                <list name=\"NeedAnIntegerCommands\">\n                        <item>CHCP</item>\n                        <item>DELAY</item>\n                        <item>COUNTRY</item>\n                        <item>SETERROR</item>\n                </list>\n                <list name=\"TakeColorsCommands\">\n                        <item>CLS</item>\n                        <item>COLOR</item>\n                </list>\n                <list name=\"FilesystemOperationCommands\">\n                        <item>ATTRIB</item>\n                        <item>COPY</item>\n                        <item>FFIND</item>\n                        <item>MOVE</item>\n                </list>\n                <list name=\"DrawCommands\">\n                        <item>DRAWBOX</item>\n                        <item>DRAWHLINE</item>\n                        <item>DRAWVLINE</item>\n                        <item>SCREEN</item>\n                        <item>SCRPUT</item>\n                        <item>VSCRPUT</item>\n                </list>\n                <list name=\"NeedsACommandCommands\">\n                        <item>EXCEPT</item>\n                        <item>GLOBAL</item>\n                </list>\n                <list name=\"NoParametersAtAllCommands\">\n                        <item>SETLOCAL</item>\n                </list>\n                <list name=\"OnOff\">\n                        <item>on</item>\n                        <item>off</item>\n                </list>\n\t\t<contexts>\n\t\t\t<context name=\"base\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"findComments\"/>\n\t\t\t\t<IncludeRules context=\"findCommands\"/>\n\t\t\t\t<IncludeRules context=\"findCommandSeparator\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\t<!-- includes \"findSubstitution\"-->\n\t\t\t</context>\n<!--\n\tthe following contexts are meant to be included in other contexts.\n-->\n\t<!-- find any comments (we were even keen enough to highlight things like TODO/FIXME and so on)-->\n\t\t\t<context name=\"findComments\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"foundComment\" char=\":\" char1=\":\" column=\"0\"/>\n\t\t\t\t<WordDetect attribute=\"Comment\" context=\"foundComment\" String=\"rem\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t<!-- whereever there should be a command start, the following should match in some way or another -->\n\t\t\t<context name=\"findCommands\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<!-- Highlight command groups and start/end corresponding folding region -->\n\t\t\t\t<DetectChar attribute=\"Label\" context=\"CommandGroup\" char=\"(\" beginRegion=\"true\"/>\n\t\t\t\t<!-- find Labels and jmp/jsr/rts commands -->\n\t\t\t\t<IncludeRules context=\"findSpaghetti\"/>\n\t\t\t\t<!-- find commands that need special handling-->\n\t\t\t\t<!-- TODO: replace single-item keyword lists with WordDetect as soon as WordDetect works properly again-->\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"conditionLeft\" String=\"IfCommand\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdIff\" String=\"IffCommand\"/>\n\t\t\t\t<!-- find all \"echo\"-variations -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"[@]?echo\\s+(on|off)(?=\\s*($|\\%\\+|\\)|\\]))\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"cmdEcho\" String=\"\\becho[s]?(err)?[\\.]?\" insensitive=\"true\"/>\n\t\t\t\t<!-- special treatment for Text and EndText -->\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdText\" String=\"TextCommand\" insensitive=\"true\" beginRegion=\"true\"/>\n\t\t\t\t<!-- Set und Unset-Befehle -->\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdSet\" String=\"SetCommand\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdUnset\" String=\"UnsetCommand\"/>\n\t<!-- inkey/input -->\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdInput\" String=\"InputCommand\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdInkey\" String=\"InkeyCommand\"/>\n\t\t\t\t<!-- do loops -->\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdDo\" String=\"DoCommand\" beginRegion=\"true\"/>\n\t\t\t\t<!-- switch constructs -->\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdSwitch\" String=\"SwitchCommand\" beginRegion=\"true\"/>\n\t\t\t\t\t<!-- all the other internal 4DOS commands (with as little processing, as time permits) -->\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdNeedOnOff\" String=\"NeedOnOffCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdTakeAFileName\" String=\"TakeAFileNameCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdsimpleNoChecks\" String=\"simpleNoChecksCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdNeedAnInteger\" String=\"NeedAnIntegerCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdTakeColors\" String=\"TakeColorsCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdFilesystemOperation\" String=\"FilesystemOperationCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdDraw\" String=\"DrawCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"cmdNeedsACommand\" String=\"NeedsACommandCommands\"/>\n\t\t\t\t\t<keyword attribute=\"Keyword\" context=\"popNeedEndOfCommand\" String=\"NoParametersAtAllCommands\"/>\n\t\t\t\t<!-- BAD COMMANDS:\n\t\t\t\t\t for :: if someone codes for 4DOS, he shall not use for-loops.  The way to go is using do-loops,\n\t\t\t\t\t\t\tfor-loops were just included into 4DOS to have M$-DOS command.com compatibility\n\t\t\t\t\t any other bad commands: are not available outside of their respective scopes, or it's the same\n\t\t\t\t\t as with \"for\"\n\t\t\t\t-->\n\t\t\t\t\t<keyword attribute=\"Error\" context=\"Error\" String=\"BadCommands\"/>\n\t\t\t</context>\n\n\t<!-- find jumps, labels and subroutine calls -->\n\t\t\t<context name=\"findSpaghetti\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Label\" context=\"foundLabel\" String=\"^:&label;\" beginRegion=\"true\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Label\" context=\"foundSpagetti\" String=\"(goto|gosub)\\s+&label;\" insensitive=\"true\"/>\n\t\t\t\t<WordDetect attribute=\"Label\" String=\"return\" insensitive=\"true\" endRegion=\"true\"/>\n\t\t\t</context>\n\n\t<!-- find any variable substitution-->\n\t\t\t<context name=\"findSubstitution\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar context=\"substitutionFound\" char=\"%\" lookAhead=\"true\"/>\n\t\t\t</context>\n\n\t<!-- findVariables just finds variable substitutions WITHOUT variable functions!!!-->\n\t\t\t<context name=\"findVariables\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"VariableBold\" context=\"substitutionIndirect\" char=\"%\" char1=\"[\"/>\n\t\t\t\t<RegExpr attribute=\"Variable\" String=\"%(([a-z_][a-z_0-9]*%?)|[0-9]+&amp;?|&amp;|\\?+|_\\?|#)\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t<!-- findNumbers finds Numbers and variableSubstitutions that may well be numbers-->\n\t\t\t<context name=\"findNumbers\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Number\" String=\"\\s*[+-]?\\d*[,.]?\\d+\"/>\n\t\t\t\t<Detect2Chars attribute=\"Function\" context=\"substitutionFindIntFunction\" char=\"%\" char1=\"@\"/>\n\t\t\t\t<IncludeRules context=\"findVariables\"/>\n\t\t\t</context>\n\n\t<!-- findStrings should skip over Strings, highlighting any substitution inside-->\n\t\t\t<context name=\"findStrings\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Escape\" context=\"foundStringBackQuote\" char=\"`\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"foundStringQuote\" char=\"&quot;\"/>\n\t\t\t\t<IncludeRules context=\"findEscapes\"/>\n\t\t\t\t<IncludeRules context=\"findSubstitution\"/>\n\t\t\t\t<!-- a Number may well be interpreted as a string in 4dos, also -->\n\t\t\t\t<RegExpr attribute=\"Number\" String=\"\\s*[+-]?\\d*[,.]?\\d+\"/>\n\t\t\t\t<!-- the following highlights ANSI-Escape-Sequences -->\n\t\t\t\t<RegExpr attribute=\"Escape\" String=\"\\x1b\\[.*[fhlmpsuABCDHJKR]\" minimal=\"true\"/>\n\t\t\t   <!--\n\t\t\t\t\twe shall find strings - so why don't we find at least literal words?\n\n\t\t\t\t\tThere is one simple answer: if we are inside a context that shall highlight strings,\n\t\t\t\t\tthen \"findStrings\" is included, to find things that evaluate to some kind of string.\n\t\t\t\t\tNormal plaintext strings shall be lit by the context itself.\n\t\t\t\t-->\n\t\t\t</context>\n\n\t<!-- highlight escaped characters -->\n\t\t\t<context name=\"findEscapes\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Escape\" context=\"foundANSIEscape\" String=\"&#37;&#61;e\\[(?=.*[fhlmpsuABCDHJKR])\" minimal=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Escape\" String=\"\\x18.|&#37;&#61;.\"/>\n\t\t\t</context>\n\n\t<!-- highlight the command seperator without changing contexts -->\n\t\t\t<context name=\"findCommandSeparator\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Keyword\" char=\"%\" char1=\"+\"/>\n\t\t\t</context>\n\n\t<!-- highlight the command seperator and pop a context -->\n\t\t\t<context name=\"popNeedEndOfCommand\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<Detect2Chars attribute=\"Keyword\" context=\"#pop\" char=\"%\" char1=\"+\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t<!-- Entry Point for finding conditions -->\n\t\t\t<context name=\"findCondition\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"conditionLeft\" String=\"(not\\s+)*(((dir)?exist|isdir|defined|is(alias|function|label|internal)|errorlevel)|(.+((\\s*(==|!=)\\s*)|(\\s+(eq|ne|gt|ge|lt|le|eqc)\\s+)).+))\" lookAhead=\"true\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t<!-- find redirections -->\n\t\t\t<context name=\"findRedirection\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"RedirectionInput1st\" char=\"&lt;\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"RedirectionOutput1st\" String=\"[&gt;]{1,2}[&amp;]?[&gt;]?\"/>\n\t\t\t</context>\n\n\t<!-- find any Option -->\n\t\t\t<context name=\"findOption\" attribute=\"Option\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Option\" context=\"Option\" char=\"/\"/>\n\t\t\t</context>\n\n\n<!--\nHere we start with functional contexts.  These actually do something more than just find something and should not be sourced directly\n-->\n\t\t\t<context name=\"CommandGroup\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Label\" context=\"#pop\" char=\")\" endRegion=\"true\"/>\n\t\t\t\t<IncludeRules context=\"base\"/>\n\t\t\t</context>\n\n\t<!-- Highlight ANSI Escap-Sequences - the \"%=e[\" are already eaten up -->\n\t\t\t<context name=\"foundANSIEscape\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<AnyChar attribute=\"Escape\" context=\"#pop\" String=\"fhlmpsuABCDHJKR\"/>\n\t\t\t</context>\n\n\t<!-- if any substitution was found, we get here ... -->\n\t\t\t<context name=\"substitutionFound\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<Detect2Chars attribute=\"Function\" context=\"#pop!substitutionFindFunction\" char=\"%\" char1=\"@\"/>\n\t\t\t\t<Detect2Chars attribute=\"VariableBold\" context=\"#pop!substitutionIndirect\" char=\"%\" char1=\"[\"/>\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#pop\" String=\"%((([a-z_][a-z_0-9]*)%?)|[0-9]+&amp;?|&amp;|\\?+|_\\?|#)\" insensitive=\"true\"/>\n\t\t\t\t<!-- in @EVAL there is the modulo-operator %% - we'll have to filter it out!\n\t\t\t\t\t TODO: give eval a special handler and remove the following rule. -->\n\t\t\t\t<Detect2Chars attribute=\"Operator\" context=\"#pop\" char=\"%\" char1=\"%\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"substitutionFindFunction\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- TODO: add special function handlers for\n\t\t\t\t\t\texecstr\n\t\t\t\t\t\tif\n\t\t\t\t-->\n\t\t\t\t<keyword attribute=\"Function\" context=\"#pop!substitutionFunctionFound\" String=\"StringFunctions\"/>\n\t\t\t\t<IncludeRules context=\"substitutionFindIntFunction\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"substitutionFindIntFunction\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- TODO: add special function handlers for\n\t\t\t\t\t\teval\n\t\t\t\t-->\n\t\t\t\t<keyword attribute=\"Function\" context=\"#pop!substitutionFunctionFound\" String=\"IntFunctions\"/>\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#pop!substitutionFunctionFound\" String=\"&label;(?=\\[)\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t<!-- Variable Functions - the Masterpower of 4DOS -> we'll make this more complex later on!-->\n\t\t\t<context name=\"substitutionFunctionFound\" attribute=\"Error\" lineEndContext=\"Error\">\n\t\t\t\t<DetectChar attribute=\"Function\" context=\"#pop!findFunctionParameters\" beginRegion=\"true\" char=\"[\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"findFunctionParameters\" attribute=\"String\" lineEndContext=\"Error\">\n\t\t\t\t<DetectChar attribute=\"Function\" char=\",\"/>\n\t\t\t\t<DetectChar attribute=\"Function\" context=\"#pop\" endRegion=\"true\" char=\"]\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n\t<!-- indirect Substitutions - they need to find their ending braces-->\n\t\t\t<context name=\"substitutionIndirect\" attribute=\"Variable\" lineEndContext=\"Error\">\n\t\t\t\t<DetectChar attribute=\"VariableBold\" context=\"#pop\" endRegion=\"true\" char=\"]\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n\t<!-- Strings within quotes -->\n\t\t\t<context name=\"foundStringBackQuote\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"Escape\" context=\"#pop\" char=\"`\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"foundStringQuote\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n\t<!-- stuff inside comments ... (a comment always runs until EOL) -->\n\t\t\t<context name=\"foundComment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<keyword attribute=\"Alert\" String=\"HighlightInsideComment\"/>\n\t\t\t</context>\n\n\t<!-- Label definitions including parameter definitions for Gosub-->\n\t\t\t<context name=\"foundLabel\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- Wir suchen nach Parameterdefinitionen für GOSUBs, alles andere sind Fehler! -->\n\t\t\t\t<DetectChar attribute=\"Label\" context=\"#pop!foundLabelParameters\" char=\"[\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"foundLabelParameters\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectIdentifier attribute=\"Variable\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Label\" context=\"#pop\" char=\"]\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t<!-- highlight gosubs and gotos with additional parameters (only valid with gosub, actually)-->\n\t\t\t<context name=\"foundSpagetti\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n   <!-- Rules that highlight conditions (include the entry point \"findCondition\" to start this as a context that pops behind the condition(s))-->\n\t\t\t<context name=\"conditionLeft\" attribute=\"Normal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!conditionLeftStandard\">\n\t\t\t\t<RegExpr attribute=\"Normal\" context=\"conditionNot\" String=\"\\bnot\\b\" lookAhead=\"true\" insensitive=\"true\"/>\n\t\t\t\t<keyword attribute=\"Label\" context=\"#pop!conditionVarname\" String=\"TestStatusVarname\"/>\n\t\t\t\t<!-- the end of a filename comes with any non-quoted space - so we need to eat up the first space after exist etc.-->\n\t\t\t\t<RegExpr attribute=\"Label\" context=\"#pop!conditionFileTest\" String=\"((dir)?exist|isdir)\\s+\" insensitive=\"true\"/>\n\t\t\t\t<keyword attribute=\"Label\" context=\"#pop!conditionErrorlevel\" String=\"TestErrorlevel\"/>\n\t\t\t\t<DetectSpaces/>\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionNot\" attribute=\"Error\" lineEndContext=\"#pop#pop\">\n\t\t\t\t<!-- the context itself highlights everything as Error - just this rule finds the last not -->\n\t\t\t\t<RegExpr attribute=\"Alert\" context=\"#pop\" String=\"\\bnot\\b(?!\\s*not\\b)\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionVarname\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- basic variable name check just finds an identifier -->\n\t\t\t\t<DetectIdentifier attribute=\"Variable\" context=\"#pop!conditionEnd\"/>\n\t\t\t\t<!-- TODO: further checking, as a varname can also be calculated -->\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionFileTest\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<DetectSpaces context=\"#pop!conditionEnd\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionErrorlevel\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"==|!=|eq|ne|gt|ge|lt|le\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Number\" context=\"#pop!conditionEnd\" String=\"\\s*[+-]?\\d*[,.]?\\d+\"/>\n\t\t\t\t<!-- TODO: actually errorlevel-test can also take calculated numbers or int variables to test agains - but would we want to duplicate a lot of the functionality above again?-->\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionEnd\" attribute=\"Normal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"#pop!conditionLeft\" String=\"\\.(and|(x)?or)\\.\" insensitive=\"true\"/>\n\t\t\t\t<!--DetectSpaces/-->\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionLeftStandard\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<!--DetectSpaces/-->\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"#pop!conditionLeftEval\" String=\"\\s*(==|!=|eq|ne|gt|ge|lt|le)\\s*\" lookAhead=\"true\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionLeftEval\" attribute=\"Normal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!conditionRight\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"==|!=|eq|ne|gt|ge|lt|le|eqc\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionRight\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<DetectSpaces context=\"#pop!conditionEnd\"/>\n\t\t\t</context>\n\n   <!-- Handle Iff correctly: condition, then, wait for possible else/handle elseiff find endiff-->\n\t\t\t<context name=\"cmdIff\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findCondition\"/>\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<!-- TODO: replace with WordDetect as soon as WordDetect works right-->\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!cmdIffThen\" beginRegion=\"true\" String=\"\\bthen\\b\\s*($|%\\+)\" insensitive=\"true\"/>\n\t\t\t\t<!-- should the above regex not match, there is an error... -->\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"Error\" String=\"then\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdIffThen\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<!-- TODO: replace with WordDetect as soon as WordDetect works right-->\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"popNeedEndOfCommand\" String=\"\\belse\\b\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"cmdElseiff\" String=\"\\belseiff\\b\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!popNeedEndOfCommand\" endRegion=\"true\" String=\"\\bendiff\\b\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"base\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdElseiff\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findCondition\"/>\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<!-- TODO: replace with WordDetect as soon as WordDetect works right-->\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"\\bthen\\b\\s*($|%\\+)\" insensitive=\"true\"/>\n\t\t\t\t<!-- should the above regex not match, there is an error... -->\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"Error\" String=\"then\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t<!-- echo -->\n\t\t\t<context name=\"cmdEcho\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<IncludeRules context=\"findRedirection\"/>\n\t\t\t\t<RegExpr attribute=\"Normal\" context=\"#pop\" String=\"\\s*($|\\%\\+|\\)|\\])\" lookAhead=\"true\"/>\n\t\t\t</context>\n\n\t<!-- Redirection: kann ja auch mehrfach auftreten -->\n\t\t\t<context name=\"Redirection\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectSpaces attribute=\"Normal\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"RedirectionOutput1st\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"Redirection\"/>\n\t\t\t\t<DetectChar attribute=\"Redirection\" context=\"#pop!Redirection\" char=\"&lt;\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"RedirectionInput1st\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"Redirection\"/>\n\t\t\t\t<RegExpr attribute=\"Redirection\" context=\"#pop!Redirection\" String=\"[&gt;]{1,2}[&amp;]?[&gt;]?\"/>\n\t\t\t</context>\n\n\t<!-- special treatment of text and endtext -->\n\t\t\t<context name=\"cmdText\" attribute=\"Error\" lineEndContext=\"#pop!cmdEndText\">\n\t\t\t\t<DetectSpaces attribute=\"Normal\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"Redirection\" String=\"[&gt;]{1,2}\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdEndText\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"^\\s*endtext\\s*$\" insensitive=\"true\"/>\n\t<!--\tAs we are pretty 31337, we also highlight ANSI-Escapes in Textblocks.\n\t\t\tWe're just not 1337 enough to also provide a syntactic checking for\n\t\t\tthose sequences...-->\n\t\t\t\t<RegExpr attribute=\"Escape\" String=\"\\x1b\\[.*[fhlmpsuABCDHJKR]\" minimal=\"true\"/>\n\t\t\t</context>\n\n\t<!-- Set/Unset commands -->\n\t\t\t<context name=\"cmdUnset\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findOption\"/>\n\t\t\t\t<DetectIdentifier attribute=\"Variable\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdSet\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"=\"/>\n\t\t\t\t<IncludeRules context=\"cmdUnset\"/>\n\t\t\t</context>\n\n\t<!-- Highlight an Option, #pop on next space ...-->\n\t\t\t<context name=\"Option\" attribute=\"Option\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t<!-- input und inkey - testing allowed Options ... -->\n\t\t\t<context name=\"cmdInput\" attribute=\"String\" lineEndContext=\"#pop\"\n\t\t\t\t\t fallthroughContext=\"#pop!inputMessage\" fallthrough=\"true\">\n\t\t\t\t<IncludeRules context=\"input\"/>\n\t\t\t\t<RegExpr attribute=\"Option\" String=\"/([en]|l[0-9]+)\\s\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdInkey\" attribute=\"String\" lineEndContext=\"#pop\"\n\t\t\t\t\t fallthroughContext=\"#pop!inputMessage\" fallthrough=\"true\">\n\t\t\t\t<RegExpr attribute=\"Option\" context=\"inputKeysDP\" String=\"/k:\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Option\" context=\"inputKeysAZ\" String=\"/k\\&quot;\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Error\" String=\"/k\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Option\" String=\"/m\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"input\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"input\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Option\" String=\"/([cdpx]|[w][0-9]+)\\s\" insensitive=\"true\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"inputKeysDP\" attribute=\"Error\" lineEndContext=\"#pop#pop\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"inputKeyDesc\" char=\"[\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Function\" String=\"\\S\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"inputKeysAZ\" attribute=\"Error\" lineEndContext=\"#pop#pop\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"inputKeyDesc\" char=\"[\"/>\n\t\t\t\t<DetectChar attribute=\"Option\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t\t<RegExpr attribute=\"Function\" String=\"\\S\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"inputKeyDesc\" attribute=\"Error\" lineEndContext=\"#pop#pop#pop\">\n\t\t\t\t<RegExpr attribute=\"Label\" context=\"#pop!inputKeyDesc2\" String=\"&tasten;\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"inputKeyDesc2\" attribute=\"Error\" lineEndContext=\"#pop#pop#pop\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"]\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"inputMessage\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#pop!popNeedEndOfCommand\" String=\"%%[a-z_][a-z0-9_]*\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n\t<!-- special treatment of DO -->\n\t\t\t<context name=\"cmdDo\" attribute=\"Error\" lineEndContext=\"Error\">\n\t\t\t\t<!-- do n | forever-->\n\t\t\t\t<RegExpr attribute=\"Label\" context=\"#pop!insideDo\" String=\"\\s*forever(?=\\s*$)\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#pop!fixedDo\" String=\"\\s*(%|[0-9]+)\" lookAhead=\"true\"/>\n\t\t\t\t<!-- WHILE | UNTIL -->\n\t\t\t\t<RegExpr attribute=\"Label\" context=\"#pop!conditionalDo\" String=\"\\s*(while|until)\" insensitive=\"true\"/>\n\t\t\t\t<!-- varname = start TO end [BY n] | varname in blubberkram -->\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#pop!countedDo\" String=\"\\s*&varname;\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"fixedDo\" attribute=\"Error\" lineEndContext=\"#pop!insideDo\">\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t\t<IncludeRules context=\"findNumbers\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"countedDo\" attribute=\"Error\" lineEndContext=\"Error\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!countedDoIn\" String=\"\\bin\\b\" insensitive=\"true\"/>\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"#pop!countedDoStart\" char=\"=\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"countedDoIn\" attribute=\"String\" lineEndContext=\"#pop!insideDo\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<IncludeRules context=\"findOption\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"countedDoStart\" attribute=\"Error\" lineEndContext=\"Error\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!countedDoTo\" String=\"\\bto\\b\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"findNumbers\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"countedDoTo\" attribute=\"Error\" lineEndContext=\"#pop!insideDo\">\n\t\t\t\t<IncludeRules context=\"findNumbers\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!countedDoBy\" String=\"\\bby\\b\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"countedDoBy\" attribute=\"Error\" lineEndContext=\"#pop!insideDo\">\n\t\t\t\t<IncludeRules context=\"findNumbers\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"conditionalDo\" attribute=\"Error\" lineEndContext=\"#pop!insideDo\">\n\t\t\t\t<IncludeRules context=\"findCondition\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"insideDo\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<keyword attribute=\"Keyword\" String=\"SkipdoCommand\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" endRegion=\"true\" context=\"#pop!popNeedEndOfCommand\" String=\"EnddoCommand\"/>\n\t\t\t\t<IncludeRules context=\"base\"/>\n\t\t\t</context>\n\n   <!-- special treatment of switch statements -->\n\t\t\t<context name=\"cmdSwitch\" attribute=\"Normal\" lineEndContext=\"#pop!insideSwitch\">\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"insideSwitch\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!switchDefault\" String=\"\\s*default\\s*$\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"switchDefault\"/>\n\t\t\t</context>\n\t\t\t<!-- \"Default\" may be used only once, that's why we change contexts when it was found -->\n\t\t\t<context name=\"switchDefault\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"switchCase\" String=\"\\bcase\\b\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!popNeedEndOfCommand\" String=\"\\bendswitch\\b\" insensitive=\"true\" endRegion=\"true\"/>\n\t\t\t\t<IncludeRules context=\"base\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"switchCase\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<StringDetect attribute=\"Operator\" insensitive=\"true\" String=\".or.\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t</context>\n\n   <!-- internal commands of the 4DOS interpreter (TODO: make it even better, like integrated syntax checking) -->\n\t\t\t<context name=\"cmdNeedOnOff\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<keyword attribute=\"String\" context=\"#pop!popNeedEndOfCommand\" String=\"OnOff\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdNeedAnInteger\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectSpaces attribute=\"Normal\"/>\n\t\t\t\t<IncludeRules context=\"findOption\"/>\n\t\t\t\t<IncludeRules context=\"findNumbers\"/>\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdNeedsACommand\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findOption\"/>\n\t\t\t\t<IncludeRules context=\"base\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdsimpleNoChecks\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findOption\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdTakeAFileName\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findOption\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdTakeColors\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"#pop!ColorHaveBrightFG\" String=\"\\bbri(ght)?\\b\" insensitive=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"#pop!ColorHaveBlinkFG\" String=\"\\bbli(nk)?\\b\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"ColorHaveBlinkFG\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"ColorHaveBrightFG\" attribute=\"String\" lineEndContext=\"Error\">\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"#pop!ColorHaveBlinkFG\" String=\"\\bbli(nk)?\\b\" insensitive=\"true\"/>\n\t\t\t\t<IncludeRules context=\"ColorHaveBlinkFG\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"ColorHaveBlinkFG\" attribute=\"String\" lineEndContext=\"Error\">\n\t\t\t\t<RegExpr attribute=\"Option\" context=\"#pop!ColorHaveFG\" insensitive=\"true\" String=\"\\b(Bla(ck)?|Blue?|Gre(en)?|Red|Mag(enta)?|Cyan?|Yel(low)?|Whi(te)?)\\b\"/>\n\t\t\t\t<DetectSpaces/>\n\t\t\t</context>\n\n\t\t\t<context name=\"ColorHaveFG\" attribute=\"String\" lineEndContext=\"Error\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop!ColorBG\" insensitive=\"true\" String=\"\\s+on\\s+\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"ColorBG\" attribute=\"String\" lineEndContext=\"Error\">\n\t\t\t\t<RegExpr attribute=\"Operator\" insensitive=\"true\" String=\"\\bbri(ght)?\\b\"/>\n\t\t\t\t<RegExpr attribute=\"Option\" context=\"#pop!ColorHaveBG\" insensitive=\"true\" String=\"\\b(Bla(ck)?|Blue?|Gre(en)?|Red|Mag(enta)?|Cyan?|Yel(low)?|Whi(te)?)\\b\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"ColorHaveBG\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"#pop!ColorNeedBordercol\" insensitive=\"true\" String=\"\\bBOR(der)?\\b\"/>\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"ColorNeedBordercol\" attribute=\"String\" lineEndContext=\"Error\">\n\t\t\t\t<RegExpr attribute=\"Option\" context=\"#pop!popNeedEndOfCommand\" insensitive=\"true\" String=\"\\s*(Bla(ck)?|Blue?|Gre(en)?|Red|Mag(enta)?|Cyan?|Yel(low)?|Whi(te)?)\\b\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdDraw\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- ToDo: check if we'll have to split this into multiple contexts, add the highlighting for drawing commands -->\n\t\t\t</context>\n\n\t\t\t<context name=\"cmdFilesystemOperation\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"findOption\"/>\n\t\t\t\t<IncludeRules context=\"findStrings\"/>\n\t\t\t\t<IncludeRules context=\"popNeedEndOfCommand\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Error\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal\"\tdefStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Comment\"\t  defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Keyword\"\t  defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Number\"\tdefStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Option\"\tdefStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Label\"\t  defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Function\"\tdefStyleNum=\"dsFunction\"/>\n\t\t\t<itemData name=\"Redirection\"  defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"String\"\tdefStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Escape\"\tdefStyleNum=\"dsSpecialChar\"/>\n\t\t\t<itemData name=\"Variable\"\tdefStyleNum=\"dsVariable\"/>\n\t\t\t<itemData name=\"VariableBold\" defStyleNum=\"dsVariable\" bold=\"true\"/>\n\t\t\t<itemData name=\"Alert\"\t  defStyleNum=\"dsAlert\"/>\n\t\t\t<itemData name=\"Error\"\t  defStyleNum=\"dsError\"/>\n\t\t\t<itemData name=\"Operator\"\tdefStyleNum=\"dsOperator\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"rem \"/>\n\t\t\t<comment name=\"singleLine\" start=\"::\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"0\" additionalDeliminator=\"@\"/>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/abap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"ABAP\" version=\"2\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.abap;*.ABAP\" mimetype=\"text/x-abap-src\" priority=\"5\" author=\"Marcos Antonio Alvarez Costales (busgosin@hotmail.com)\" license=\"GPL\">\n  <highlighting>\n\n    <list name=\"keywords\">\n    <!-- compiler directives and structures -->\n      <item>ADD</item>\n      <item>ADJACENT</item>\n      <item>ALL</item>\n      <item>AND</item>\n      <item>APPEND</item>\n      <item>APPENDING</item>\n      <item>AS</item>\n      <item>ASCENDING</item>\n      <item>AT</item>\n      <item>BEGIN</item>\n      <item>BETWEEN</item>\n      <item>BINARY</item>\n      <item>BLOCK</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CENTERED</item>\n      <item>CHAIN</item>\n      <item>CHANGING</item>\n      <item>CHECK</item>\n      <item>CHECKBOX</item>\n      <item>CLEAR</item>\n      <item>COL_BACKGROUND</item>\n      <item>COL_HEADING</item>\n      <item>COL_NORMAL</item>\n      <item>COL_TOTAL</item>\n      <item>COLOR</item>\n      <item>COMMENT</item>\n      <item>COMMIT</item>\n      <item>COMPARING</item>\n      <item>COMPUTE</item>\n      <item>CONCATENATE</item>\n      <item>CONDENSE</item>\n      <item>CONSTANTS</item>\n      <item>CONTINUE</item>\n      <item>CONTROLS</item>\n      <item>COUNTRY</item>\n      <item>DATA</item>\n      <item>DECIMALS</item>\n      <item>DEFAULT</item>\n      <item>DELETE</item>\n      <item>DELETING</item>\n      <item>DESCENDING</item>\n      <item>DESCRIBE</item>\n      <item>DO</item>\n      <item>DUPLICATES</item>\n      <item>EDIT</item>\n      <item>ELSE</item>\n      <item>ELSEIF</item>\n      <item>END</item>\n      <item>ENDCASE</item>\n      <item>ENDCHAIN</item>\n      <item>ENDDO</item>\n      <item>ENDIF</item>\n      <item>ENDLOOP</item>\n      <item>ENDMODULE</item>\n      <item>ENDSELECT</item>\n      <item>ENDWHILE</item>\n      <item>ENTRIES</item>\n      <item>EQ</item>\n      <item>EXCEPTIONS</item>\n      <item>EXCLUDING</item>\n      <item>EXIT</item>\n      <item>EXIT-COMMAND</item>\n      <item>EXPORT</item>\n      <item>EXPORTING</item>\n      <item>FIELD</item>\n      <item>FIRST</item>\n      <item>FOR</item>\n      <item>FORMAT</item>\n      <item>FRAME</item>\n      <item>FREE</item>\n      <item>FROM</item>\n      <item>GE</item>\n      <item>GROUP</item>\n      <item>GT</item>\n      <item>HEADER</item>\n      <item>HEADING</item>\n      <item>HIDE</item>\n      <item>HOTSPOT</item>\n      <item>ID</item>\n      <item>IF</item>\n      <item>IMPORT</item>\n      <item>IMPORTING</item>\n      <item>IN</item>\n      <item>INDEX</item>\n      <item>INITIAL</item>\n      <item>INNER</item>\n      <item>INPUT</item>\n      <item>INSERT</item>\n      <item>INTENSIFIED</item>\n      <item>INTERVALS</item>\n      <item>INTO</item>\n      <item>IS</item>\n      <item>JOIN</item>\n      <item>KEY</item>\n      <item>LE</item>\n      <item>LEAVE</item>\n      <item>LEFT</item>\n      <item>LEFT-JUSTIFIED</item>\n      <item>LIKE</item>\n      <item>LINE</item>\n      <item>LINE-COUNT</item>\n      <item>LINES</item>\n      <item>LINES</item>\n      <item>LINE-SIZE</item>\n      <item>LIST-PROCESSING</item>\n      <item>LOOP</item>\n      <item>LT</item>\n      <item>MASK</item>\n      <item>MEMORY</item>\n      <item>MESSAGE</item>\n      <item>MESSAGE-ID</item>\n      <item>MOD</item>\n      <item>MODIFY</item>\n      <item>MODULE</item>\n      <item>MOVE</item>\n      <item>MOVE-CORRESPONDING</item>\n      <item>NE</item>\n      <item>NEW-LINE</item>\n      <item>NEW-PAGE</item>\n      <item>NO</item>\n      <item>NO-EXTENSION</item>\n      <item>NO-GAP</item>\n      <item>NO-SCROLLING</item>\n      <item>NOT</item>\n      <item>NO-ZERO</item>\n      <item>NUMBER</item>\n      <item>OBLIGATORY</item>\n      <item>OCCURS</item>\n      <item>OF</item>\n      <item>OFF</item>\n      <item>ON</item>\n      <item>OR</item>\n      <item>OTHERS</item>\n      <item>OUTPUT</item>\n      <item>PAGE</item>\n      <item>PARAMETER</item>\n      <item>PARAMETERS</item>\n      <item>PERFORM</item>\n      <item>PF-STATUS</item>\n      <item>POS_HIGH</item>\n      <item>POS_LOW</item>\n      <item>POSITION</item>\n      <item>PROGRAM</item>\n      <item>RADIOBUTTON</item>\n      <item>RANGES</item>\n      <item>READ</item>\n      <item>REFRESH</item>\n      <item>REPORT</item>\n      <item>RESERVE</item>\n      <item>RESET</item>\n      <item>RIGHT</item>\n      <item>RIGHT-JUSTIFIED</item>\n      <item>ROLLBACK</item>\n      <item>ROWS</item>\n      <item>SCREEN</item>\n      <item>SCREEN-GROUP1</item>\n      <item>SCREEN-GROUP2</item>\n      <item>SCREEN-GROUP3</item>\n      <item>SCREEN-GROUP4</item>\n      <item>SCREEN-GROUP5</item>\n      <item>SCREEN-INPUT</item>\n      <item>SCREEN-INTENSIFIED</item>\n      <item>SEARCH</item>\n      <item>SELECT</item>\n      <item>SELECTION</item>\n      <item>SELECTION-SCREEN</item>\n      <item>SELECT-OPTIONS</item>\n      <item>SEPARATED</item>\n      <item>SET</item>\n      <item>SHIFT</item>\n      <item>SINGLE</item>\n      <item>SKIP</item>\n      <item>SORT</item>\n      <item>SPACE</item>\n      <item>SPLIT</item>\n      <item>STANDARD</item>\n      <item>STARTING</item>\n      <item>STOP</item>\n      <item>STRLEN</item>\n      <item>STRUCTURE</item>\n      <item>SUBTRACT</item>\n      <item>SY-CUCOL</item>\n      <item>SY-DATUM</item>\n      <item>SY-DYNNR</item>\n      <item>SY-LINSZ</item>\n      <item>SY-LOOPC</item>\n      <item>SY-LSIND</item>\n      <item>SY-MSGID</item>\n      <item>SY-MSGTY</item>\n      <item>SY-MSGV1</item>\n      <item>SY-MSGV2</item>\n      <item>SY-MSGV3</item>\n      <item>SY-MSGV4</item>\n      <item>SY-PAGNO</item>\n      <item>SY-REPID</item>\n      <item>SY-STEPL</item>\n      <item>SY-SUBRC</item>\n      <item>SY-TABIX</item>\n      <item>SY-TCODE</item>\n      <item>SY-TMAXL</item>\n      <item>SY-UCOMM</item>\n      <item>SY-ULINE</item>\n      <item>SY-UNAME</item>\n      <item>SY-UZEIT</item>\n      <item>SY-VLINE</item>\n      <item>TABLE</item>\n      <item>TABLES</item>\n      <item>TABLEVIEW</item>\n      <item>TIMES</item>\n      <item>TITLE</item>\n      <item>TITLEBAR</item>\n      <item>TO</item>\n      <item>TRAILING</item>\n      <item>TRANSPORTING</item>\n      <item>TYPE</item>\n      <item>TYPE-POOLS</item>\n      <item>TYPES</item>\n      <item>ULINE</item>\n      <item>UP</item>\n      <item>UPDATE</item>\n      <item>USING</item>\n      <item>VALUE</item>\n      <item>WHEN</item>\n      <item>WHERE</item>\n      <item>WHILE</item>\n      <item>WITH</item>\n      <item>WORK</item>\n      <item>WRITE</item>\n      <item>AFTER</item>\n      <item>BEFORE</item>\n      <item>CALL</item>\n      <item>DURING</item>\n      <item>ENDFORM</item>\n      <item>END-OF-SELECTION</item>\n      <item>FORM</item>\n      <item>FUNCTION</item>\n      <item>INCLUDE</item>\n      <item>LINE-SELECTION</item>\n      <item>PROCESS</item>\n      <item>START-OF-SELECTION</item>\n      <item>TOP-OF-PAGE</item>\n      <item>TRANSACTION</item>\n      <item>USER-COMMAND</item>\n    </list>\n\n    <contexts>\n\t    <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t    <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t    <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"&quot;\"/>\n\t\t    <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"*\"/>\n\t\t    <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;:=&gt;[]^~\"/>\n\t    </context>\n\t    <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n\t\t       <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"&quot;\"/>\n\t\t       <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"*\"/>\n\t    </context>\n    </contexts>\n    \n    <itemDatas>\n\t    <itemData name=\"Normal Text\" \tdefStyleNum=\"dsNormal\"/>\n\t    <itemData name=\"Keyword\"  \t\tdefStyleNum=\"dsKeyword\"/>\n\t    <itemData name=\"Comment\"  \t\tdefStyleNum=\"dsComment\"/>\n\t    <itemData name=\"Symbol\"  \t\tdefStyleNum=\"dsNormal\"/>\n    </itemDatas>\n\n  </highlighting>\n  \n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"&quot;\" />\n      <comment name=\"singleLine\" start=\"*\" />\n      <comment name=\"multiLine\" start=\"*\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n  \n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/abc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Andrea Primiani - primiani at dag dot it\n \tversion1.10 - 12 december 2005 -->\n<language name=\"ABC\" version=\"5\" kateversion=\"2.4\" section=\"Other\" extensions=\"*.abc;*.ABC\" mimetype=\"text/vnd.abc\" casesensitive=\"1\" author=\"Andrea Primiani (primiani@dag.it)\" license=\"LGPL\">\n    <highlighting>\n        <contexts>\n           <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n<!-- detects tuplet symbols e.g. (3 or (3:2:2-->\n\t    <RegExpr attribute=\"Tuplet\" context=\"#stay\" String=\"\\([23456789]:?[23456789]?:?[23456789]?\" />\n<!-- detects quoted strings -->\n\t    <RangeDetect attribute=\"String\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n<!-- detects decorations delimited by ! ! symbols -->\n\t    <RangeDetect attribute=\"Decoration\" context=\"#stay\" char=\"!\" char1=\"!\" />\n<!-- detects single header command delimited by [ and sends to Header context -->\n\t    <RegExpr attribute=\"Header\" context=\"Header\" String=\"\\[[ABCGHILMNOQRSTUVZ]:\" />\n<!-- detects single header line inside a song without [] - ends at EOL-->\n\t    <RegExpr attribute=\"Header\" context=\"Header2\" String=\"[ABCGHILMNOPQRSTUVZ]:\" />\n<!-- detect beginning of header zone with X: and sends to Header context -->\t    \n\t    <Detect2Chars attribute=\"Header\" context=\"Header\" char=\"X\" char1=\":\" beginRegion=\"header\" column=\"0\"/>\n<!-- detects bar beginning (or chord) symbols and sends to Bar context -->\n\t    <AnyChar attribute=\"Bar\" context=\"Bar\" String=\"|:[\" />\n<!-- detects ] if used to close chords -->\t    \n\t    <DetectChar attribute=\"Bar\" context=\"#stay\" char=\"]\" />\n<!-- detects () for slurs -->\n\t    <AnyChar attribute=\"Slur\" context=\"#stay\" String=\"()\" />\n<!-- detects {} for gracings -->\n\t    <AnyChar attribute=\"Slur\" context=\"#stay\" String=\"{}\" />\n<!-- detects W: and w: lyric lines -->\t    \n\t    <Detect2Chars attribute=\"Lyrics\" context=\"Lyrics\" char=\"W\" char1=\":\" />\n\t    <Detect2Chars attribute=\"Lyrics\" context=\"Lyrics\" char=\"w\" char1=\":\" />\n<!-- detects %% preprocessor lines and % comment lines-->\t    \n\t    <Detect2Chars attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"%\" char1=\"%\"/>\n\t    <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"%\" />\n<!-- detects ^ _ = symbols before a note -->\n\t    <RegExpr attribute=\"Sharp\" context=\"#stay\" String=\"[_|\\^]?[_|=|\\^][A-Ga-g]\" />\n\t   </context>\n<!-- returns to Normal context at the end of line -->\t   \n\t   <context name=\"Preprocessor\" attribute=\"Preprocessor\" lineEndContext=\"#pop\" />\n\t   <context name=\"Lyrics\" attribute=\"Lyrics\" lineEndContext=\"#pop\" />\n\t   <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\" />\n<!-- returns to Normal context after the end of bar symbols or at EOL -->\n\t   <context name=\"Bar\" attribute=\"Bar\" lineEndContext=\"#pop\" >\n\t   \t<DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"&quot;\" />\n<!-- the bar symbol ends when a note letter follows -->\n\t\t<RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"[A-Ga-gZz]\" />\n<!-- the bar symbol ends after a white space -->\n\t\t<DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\" \" />\n<!-- detects decorations delimited by ! ! symbols -->\n\t    <RangeDetect attribute=\"Decoration\" context=\"#stay\" char=\"!\" char1=\"!\" />\n<!-- detects () for slurs -->\n\t    <AnyChar attribute=\"Slur\" context=\"#stay\" String=\"()\" />\n<!-- chomps all other bar symbols -->\n\t\t<RegExpr attribute=\"Bar\" context=\"#pop\" String=\":*\\|*[1-9]|/*\\|\" />\n\t   </context>\n<!-- returns to Normal context at the end of header -->\n\t   <context name=\"Header\" attribute=\"Header\" lineEndContext=\"#stay\">\n<!-- the header ends after K: line -->\n\t\t<RegExpr attribute=\"Header\" context=\"#pop\" String=\"K:.+\" endRegion=\"header\" column=\"0\"/>\n<!-- the single header command ends at the ] char -->\n\t\t<DetectChar attribute=\"Header\" context=\"#pop\" char=\"]\" />\n\t   </context>\n<!-- the single header line ends at EOL -->\n\t   <context name=\"Header2\" attribute=\"Header\" lineEndContext=\"#pop\" />\n       </contexts>\n        <itemDatas>\n          <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t  <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t  <itemData name=\"Decoration\" defStyleNum=\"dsFloat\" color=\"#00bbaa\" />\n\t  <itemData name=\"String\" defStyleNum=\"dsString\" bold=\"true\"/>\n\t  <itemData name=\"Preprocessor\" defStyleNum=\"dsString\" italic=\"true\"/>\n\t  <itemData name=\"Header\" defStyleNum=\"dsFloat\"/>\n\t  <itemData name=\"Slur\" defStyleNum=\"dsDataType\" bold=\"true\"/>\n\t  <itemData name=\"Tuplet\" defStyleNum=\"dsDataType\" color=\"#bb00bb\"/>\n\t  <itemData name=\"Lyrics\" defStyleNum=\"dsDataType\" color=\"#00bb00\"/>\n\t  <itemData name=\"Bar\" defStyleNum=\"dsChar\" color=\"#0000ff\"/>\n\t  <itemData name=\"Sharp\" defStyleNum=\"dsNormal\" color=\"#22bb66\" bold=\"true\"/>\n\t</itemDatas>\n </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"%\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/actionscript.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"ActionScript 2.0\" version=\"3\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.as\" mimetype=\"text/x-actionscript\" license=\"LGPL\" author=\"Aaron Miller (armantic101@gmail.com)\">\n  <highlighting>\n    \n    <list name=\"properties\">\n      <item>_accProps</item>\n      <item>_focusrect</item>\n      <item>_global</item>\n      <item>_highquality</item>\n      <item>_level</item>\n      <item>_parent</item>\n      <item>_quality</item>\n      <item>_root</item>\n      <item>_soundbuftime</item>\n      <item>maxscroll</item>\n      <item>scroll</item>\n      <item>this</item>\n    </list>\n    \n    <list name=\"global_functions\">\n      <item>asfunction</item>\n      <item>call</item>\n      <item>chr</item>\n      <item>clearInterval</item>\n      <item>duplicateMovieClip</item>\n      <item>escape</item>\n      <item>eval</item>\n      <item>fscommand</item>\n      <item>getProperty</item>\n      <item>getTimer</item>\n      <item>getURL</item>\n      <item>getVersion</item>\n      <item>gotoAndPlay</item>\n      <item>gotoAndStop</item>\n      <item>ifFrameLoaded</item>\n      <item>int</item>\n      <item>isFinite</item>\n      <item>isNaN</item>\n      <item>length</item>\n      <item>loadMovie</item>\n      <item>loadMovieNum</item>\n      <item>loadVariables</item>\n      <item>loadVariablesNum</item>\n      <item>mbchr</item>\n      <item>mblength</item>\n      <item>mbord</item>\n      <item>mbsubstring</item>\n      <item>nextFrame</item>\n      <item>nextScene</item>\n      <item>on</item>\n      <item>onClipEvent</item>\n      <item>ord</item>\n      <item>parseFloat</item>\n      <item>parseInt</item>\n      <item>play</item>\n      <item>prevFrame</item>\n      <item>prevScene</item>\n      <item>print</item>\n      <item>printAsBitmap</item>\n      <item>printAsBitmapNum</item>\n      <item>printNum</item>\n      <item>random</item>\n      <item>removeMovieClip</item>\n      <item>setInterval</item>\n      <item>setProperty</item>\n      <item>showRedrawRegions</item>\n      <item>startDrag</item>\n      <item>stop</item>\n      <item>stopAllSounds</item>\n      <item>stopDrag</item>\n      <item>substring</item>\n      <item>targetPath</item>\n      <item>tellTarget</item>\n      <item>toggleHighQuality</item>\n      <item>trace</item>\n      <item>typeof</item>\n      <item>unescape</item>\n      <item>unloadMovie</item>\n      <item>unloadMovieNum</item>\n    <item>updateAfterEvent</item>\n    </list>\n      \n    <list name=\"classes\">\n      <item>Accessibility</item>\n      <item>Accordion</item>\n      <item>Alert</item>\n      <item>Binding</item>\n      <item>Button</item>\n      <item>Camera</item>\n      <item>CellRenderer</item>\n      <item>CheckBox</item>\n      <item>Collection</item>\n      <item>Color</item>\n      <item>ComboBox</item>\n      <item>ComponentMixins</item>\n      <item>ContextMenu</item>\n      <item>ContextMenuItem</item>\n      <item>CustomActions</item>\n      <item>CustomFormatter</item>\n      <item>CustomValidator</item>\n      <item>DataGrid</item>\n      <item>DataHolder</item>\n      <item>DataProvider</item>\n      <item>DataSet</item>\n      <item>DataType</item>\n      <item>Date</item>\n      <item>DateChooser</item>\n      <item>DateField</item>\n      <item>Delta</item>\n      <item>DeltaItem</item>\n      <item>DeltaPacket</item>\n      <item>DepthManager</item>\n      <item>EndPoint</item>\n      <item>Error</item>\n      <item>FaultEvent</item>\n      <item>FocusManager</item>\n      <item>Form</item>\n      <item>Function</item>\n      <item>Iterator</item>\n      <item>Key</item>\n      <item>Label</item>\n      <item>List</item>\n      <item>LoadVars</item>\n      <item>Loader</item>\n      <item>LocalConnection</item>\n      <item>Log</item>\n      <item>Math</item>\n      <item>Media</item>\n      <item>Menu</item>\n      <item>MenuBar</item>\n      <item>Microphone</item>\n      <item>Mouse</item>\n      <item>MovieClip</item>\n      <item>MovieClipLoader</item>\n      <item>NetConnection</item>\n      <item>NetStream</item>\n      <item>Number</item>\n      <item>NumericStepper</item>\n      <item>PendingCall</item>\n      <item>PopUpManager</item>\n      <item>PrintJob</item>\n      <item>ProgressBar</item>\n      <item>RDBMSResolver</item>\n      <item>RadioButton</item>\n      <item>RelayResponder</item>\n      <item>SOAPCall</item>\n      <item>Screen</item>\n      <item>ScrollPane</item>\n      <item>Selection</item>\n      <item>SharedObject</item>\n      <item>Slide</item>\n      <item>Sound</item>\n      <item>Stage</item>\n      <item>StyleManager</item>\n      <item>System</item>\n      <item>TextArea</item>\n      <item>TextField</item>\n      <item>TextFormat</item>\n      <item>TextInput</item>\n      <item>TextSnapshot</item>\n      <item>TransferObject</item>\n      <item>Tree</item>\n      <item>TreeDataProvider</item>\n      <item>TypedValue</item>\n      <item>UIComponent</item>\n      <item>UIEventDispatcher</item>\n      <item>UIObject</item>\n      <item>Video</item>\n      <item>WebService</item>\n      <item>WebServiceConnector</item>\n      <item>Window</item>\n      <item>XML</item>\n      <item>XMLConnector</item>\n      <item>XUpdateResolver</item>\n    </list>\n    \n    <list name=\"keywords\">\n      <item>add</item>\n      <item>and</item>\n      <item>break</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>class</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>delete</item>\n      <item>do</item>\n      <item>dynamic</item>\n      <item>else</item>\n      <item>eq</item>\n      <item>extends</item>\n      <item>finally</item>\n      <item>for</item>\n      <item>function</item>\n      <item>ge</item>\n      <item>get</item>\n      <item>gt</item>\n      <item>if</item>\n      <item>implements</item>\n      <item>import</item>\n      <item>in</item>\n      <item>instanceof</item>\n      <item>interface</item>\n      <item>intrinsic</item>\n      <item>le</item>\n      <item>lt</item>\n      <item>ne</item>\n      <item>new</item>\n      <item>not</item>\n      <item>or</item>\n      <item>private</item>\n      <item>public</item>\n      <item>return</item>\n      <item>set</item>\n      <item>static</item>\n      <item>switch</item>\n      <item>throw</item>\n      <item>try</item>\n      <item>var</item>\n      <item>void</item>\n      <item>while</item>\n      <item>with</item>\n    </list>\n    \n    <list name=\"const\">\n      <item>false</item>\n      <item>Infinity</item>\n      <item>-Infinity</item>\n      <item>NaN</item>\n      <item>newline</item>\n      <item>null</item>\n      <item>true</item>\n      <item>undefined</item>\n    </list>\n    \n    <list name=\"types\">\n      <item>Array</item>\n      <item>Boolean</item>\n      <item>Number</item>\n      <item>Object</item>\n      <item>String</item>\n      <item>Void</item>\n    </list>\n    \n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <!-- Comment next line if you don't use Javadoc tool -->\n        <IncludeRules context=\"##Javadoc\"/>\n        <keyword attribute=\"Properties\" context=\"#stay\" String=\"properties\"/>\n        <keyword attribute=\"Global Functions\" context=\"#stay\" String=\"global_functions\"/>\n        <keyword attribute=\"Classes\" context=\"#stay\" String=\"classes\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Constants\" context=\"#stay\" String=\"const\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"Region1\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"Region1\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/> \n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/> \n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>  \n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\.{3,3}\\s+\" />  \n        <RegExpr attribute=\"Keyword\" context=\"StaticImports\" String=\"\\b(import\\s+static)\\b\" />\n        <RegExpr attribute=\"Keyword\" context=\"Imports\" String=\"\\b(package|import)\\b\" /> \n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*(/\\*\\s*\\d+\\s*\\*/\\s*)?[(])\" />\n        <RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" /> \n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\" fallthrough=\"true\" fallthroughContext=\"#pop\">  \n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_a-zA-Z]\\w*(?=[\\s]*)\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"StaticImports\">\n        <RegExpr attribute=\"StaticImports\" context=\"#pop\" String=\"\\s*.*$\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Imports\">\n        <RegExpr attribute=\"Imports\" context=\"#pop\" String=\"\\s*.*$\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\"/>\n      <itemData name=\"StaticImports\" defStyleNum=\"dsImport\"/>\n      <itemData name=\"Imports\"      defStyleNum=\"dsImport\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Properties\"   defStyleNum=\"dsAttribute\" bold=\"1\"/>\n      <itemData name=\"Global Functions\"   defStyleNum=\"dsFunction\" bold=\"1\"/>\n      <itemData name=\"Classes\"   defStyleNum=\"dsBuiltIn\" bold=\"1\"/>\n      <itemData name=\"Constants\" defStyleNum=\"dsConstant\" bold=\"1\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ada.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Ada\"\n          version=\"3\"\n          kateversion=\"5.0\"\n          section=\"Sources\"\n          extensions=\"*.adb;*.ads;*.ada;*.a\"\n          indenter=\"ada\"\n          mimetype=\"text/x-adasrc\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>abort</item>\n      <item>abs</item>\n      <item>abstract</item>\n      <item>accept</item>\n      <item>access</item>\n      <item>aliased</item>\n      <item>all</item>\n      <item>and</item>\n      <item>array</item>\n      <item>at</item>\n      <item>begin</item>\n      <item>body</item>\n      <item>constant</item>\n      <item>declare</item>\n      <item>delay</item>\n      <item>delta</item>\n      <item>digits</item>\n      <item>do</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>end</item>\n      <item>entry</item>\n      <item>exception</item>\n      <item>exit</item>\n      <item>for</item>\n      <item>function</item>\n      <item>generic</item>\n      <item>goto</item>\n      <item>in</item>\n      <item>interface</item>\n      <item>is</item>\n      <item>limited</item>\n      <item>mod</item>\n      <item>new</item>\n      <item>not</item>\n      <item>null</item>\n      <item>of</item>\n      <item>or</item>\n      <item>others</item>\n      <item>out</item>\n      <item>overriding</item>\n      <item>package</item>\n      <item>pragma</item>\n      <item>private</item>\n      <item>procedure</item>\n      <item>protected</item>\n      <item>raise</item>\n      <item>range</item>\n      <item>rem</item>\n      <item>record</item>\n      <item>renames</item>\n      <item>requeue</item>\n      <item>return</item>\n      <item>reverse</item>\n      <item>separate</item>\n      <item>subtype</item>\n      <item>tagged</item>\n      <item>task</item>\n      <item>terminate</item>\n      <item>then</item>\n      <item>type</item>\n      <item>until</item>\n      <item>use</item>\n      <item>when</item>\n      <item>while</item>\n      <item>with</item>\n      <item>xor</item>\n    </list>\n    <list name=\"pragmas\">\n      <item>all_calls_remote</item>\n      <item>assert</item>\n      <item>assertion_policy</item>\n      <item>asynchronous</item>\n      <item>atomic</item>\n      <item>atomic_components</item>\n      <item>attach_handler</item>\n      <item>controlled</item>\n      <item>convention</item>\n      <item>detect_blocking</item>\n      <item>discard_names</item>\n      <item>elaborate</item>\n      <item>elaborate_all</item>\n      <item>elaborate_body</item>\n      <item>export</item>\n      <item>import</item>\n      <item>inline</item>\n      <item>inspection_point</item>\n      <item>interrupt_handler</item>\n      <item>interrupt_priority</item>\n      <item>linker_options</item>\n      <item>list</item>\n      <item>locking_policy</item>\n      <item>no_return</item>\n      <item>normalize_scalars</item>\n      <item>optimize</item>\n      <item>pack</item>\n      <item>page</item>\n      <item>partition_elaboration_policy</item>\n      <item>preelaborable_initialization</item>\n      <item>preelaborate</item>\n      <item>priority</item>\n      <item>priority_specific_dispatching</item>\n      <item>profile</item>\n      <item>pure</item>\n      <item>queuing_policy</item>\n      <item>relative_deadline</item>\n      <item>remote_call_interface</item>\n      <item>remote_types</item>\n      <item>restrictions</item>\n      <item>reviewable</item>\n      <item>shared_passive</item>\n      <item>storage_size</item>\n      <item>suppress</item>\n      <item>task_dispatching_policy</item>\n      <item>unchecked_union</item>\n      <item>unsuppress</item>\n      <item>volatile</item>\n      <item>volatile_components</item>\n    </list>\n    <list name=\"types\">\n      <item>boolean</item>\n      <item>character</item>\n      <item>float</item>\n      <item>integer</item>\n      <item>long_float</item>\n      <item>long_integer</item>\n      <item>long_long_float</item>\n      <item>long_long_integer</item>\n      <item>short_float</item>\n      <item>short_integer</item>\n      <item>string</item>\n      <item>wide_string</item>\n      <item>wide_character</item>\n      <item>wide_wide_character</item>\n      <item>wide_wide_string</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Default\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\brecord\\b\"       insensitive=\"true\" beginRegion=\"RecordRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+record\\b\" insensitive=\"true\"   endRegion=\"RecordRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bcase\\b\"         insensitive=\"true\" beginRegion=\"CaseRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+case\\b\"   insensitive=\"true\"   endRegion=\"CaseRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bif\\b\"           insensitive=\"true\" beginRegion=\"IfRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+if\\b\"     insensitive=\"true\"   endRegion=\"IfRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bloop\\b\"         insensitive=\"true\" beginRegion=\"LoopRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+loop\\b\"   insensitive=\"true\"   endRegion=\"LoopRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bselect\\b\"       insensitive=\"true\" beginRegion=\"SelectRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+select\\b\" insensitive=\"true\"   endRegion=\"SelectRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bbegin\\b\"        insensitive=\"true\" beginRegion=\"BeginRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\b\"          insensitive=\"true\"   endRegion=\"BeginRegion\"/>\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"--  BEGIN\" beginRegion=\"RegionMarker\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"--  END\" endRegion=\"RegionMarker\" firstNonSpace=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Pragmas\" context=\"#stay\" String=\"pragmas\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"'.'\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"-\" char1=\"-\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;|\"/>\n      </context>\n      <context attribute=\"Region Marker\" lineEndContext=\"#pop\" name=\"Region Marker\"/>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\"/>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Pragmas\"     defStyleNum=\"dsExtension\" bold=\"1\" />\n      <itemData name=\"Data Type\"   defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Float\"       defStyleNum=\"dsFloat\" />\n      <itemData name=\"Char\"        defStyleNum=\"dsChar\" />\n      <itemData name=\"String\"      defStyleNum=\"dsString\" />\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\" />\n      <itemData name=\"Symbol\"      defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/adblock.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- See https://adblockplus.org/en/filters -->\n<language\n    name=\"Adblock Plus\"\n    version=\"1\"\n    kateversion=\"5.0\"\n    section=\"Configuration\"\n    author=\"Volker Krause (vkrause@kde.org)\"\n    extensions=\"\"\n    license=\"MIT\">\n    <highlighting>\n        <list name=\"special-comment-list\">\n            <item>Homepage</item>\n            <item>Title</item>\n            <item>Expires</item>\n            <item>Checksum</item>\n            <item>Redirect</item>\n            <item>Version</item>\n        </list>\n        <list name=\"filter-option-list\">\n            <item>script</item>\n            <item>image</item>\n            <item>stylesheet</item>\n            <item>object</item>\n            <item>xmlhttprequest</item>\n            <item>object-subrequest</item>\n            <item>subdocument</item>\n            <item>ping</item>\n            <item>websocket</item>\n            <item>webrtc</item>\n            <item>document</item>\n            <item>elemhide</item>\n            <item>generichide</item>\n            <item>genericblock</item>\n            <item>popup</item>\n            <item>other</item>\n            <item>third-party</item>\n            <item>domain</item>\n            <item>sitekey</item>\n            <item>match-case</item>\n            <item>collapse</item>\n            <item>donottrack</item>\n        </list>\n\n        <contexts>\n            <context name=\"rule-context\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar char=\"!\" column=\"0\" context=\"comment-context\" attribute=\"Comment\"/>\n                <DetectChar char=\"[\" column=\"0\" context=\"header-context\" attribute=\"Header\"/>\n                <Detect2Chars char=\"@\" char1=\"@\" column=\"0\" context=\"exception-context\" attribute=\"Exception Rule\"/>\n                <DetectChar char=\"$\" context=\"option-context\" attribute=\"Filter Option\"/>\n                <Detect2Chars char=\"#\" char1=\"#\" context=\"element-hiding-context\" attribute=\"Element Hiding Rule\"/>\n                <StringDetect String=\"#@#\" context=\"element-hiding-context\" attribute=\"Element Hiding Rule\"/>\n            </context>\n\n            <context name=\"comment-context\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <keyword String=\"special-comment-list\" attribute=\"Special Comment\"/>\n            </context>\n\n            <context name=\"header-context\" attribute=\"Header\" lineEndContext=\"#pop\"/>\n\n            <context name=\"exception-context\" attribute=\"Exception Rule\" lineEndContext=\"#pop\">\n                <DetectChar char=\"$\" context=\"#pop!option-context\" attribute=\"Filter Option\"/>\n            </context>\n\n            <context name=\"option-context\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <keyword String=\"filter-option-list\" attribute=\"Filter Option\"/>\n            </context>\n\n            <context name=\"element-hiding-context\" attribute=\"Element Hiding Rule\" lineEndContext=\"#pop\"/>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Special Comment\" defStyleNum=\"dsCommentVar\" spellChecking=\"false\"/>\n            <itemData name=\"Header\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Exception Rule\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n            <itemData name=\"Filter Option\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Element Hiding Rule\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <keywords casesensitive=\"1\" weakDeliminator=\"-\" additionalDeliminator=\"$\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/agda.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"[\n  <!ENTITY charsdelim \"_;.&#34;(){}@\">\n  <!ENTITY wordsep \"(?=([&charsdelim;]|\\s|$))\">\n]>\n<language name=\"Agda\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.agda\" mimetype=\"text/x-agda\" author=\"Matthias C. M. Troffaes\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"reserved keywords\">\n      <item>abstract</item>\n      <item>codata</item>\n      <item>coinductive</item>\n      <item>constructor</item>\n      <item>data</item>\n      <item>field</item>\n      <item>forall</item>\n      <item>hiding</item>\n      <item>import</item>\n      <item>in</item>\n      <item>inductive</item>\n      <item>infix</item>\n      <item>infixl</item>\n      <item>infixr</item>\n      <item>let</item>\n      <item>open</item>\n      <item>pattern</item>\n      <item>postulate</item>\n      <item>primitive</item>\n      <item>private</item>\n      <item>public</item>\n      <item>module</item>\n      <item>mutual</item>\n      <item>quote</item>\n      <item>quoteGoal</item>\n      <item>quoteTerm</item>\n      <item>record</item>\n      <item>renaming</item>\n      <item>rewrite</item>\n      <item>syntax</item>\n      <item>to</item>\n      <item>unquote</item>\n      <item>using</item>\n      <item>where</item>\n      <item>with</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"code\">\n        <RegExpr attribute=\"Pragma\"  context=\"#stay\" String=\"\\{-#.*#-\\}\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"reserved keywords\" />\n        <RegExpr attribute=\"Type\"    context=\"#stay\" String=\"(Prop|Set[₀-₉]+|Set[0-9]*)&wordsep;\" />\n        <RegExpr attribute=\"Special\" context=\"#stay\" String=\"(-&gt;|→|∀|λ|:|=|\\|)&wordsep;\" />\n        <RegExpr attribute=\"Float\"   context=\"#stay\" String=\"\\d+\\.\\d+&wordsep;\" />\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[0-9]+&wordsep;\" />\n        <DetectChar attribute=\"Char\"   context=\"char\"   char=\"'\" />\n        <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n        <Detect2Chars attribute=\"Comment\" context=\"comment\"  char=\"-\"  char1=\"-\" />\n        <Detect2Chars attribute=\"Comment\" context=\"comments\" char=\"{\" char1=\"-\" />\n        <Detect2Chars attribute=\"Hole\"    context=\"hole\"     char=\"{\" char1=\"!\" />\n        <!-- delimiters which cannot be part of an identifier, or\n             backslash which starts a lambda expression -->\n        <AnyChar      attribute=\"Special\" context=\"#stay\" String=\"&charsdelim;\\\\\" />\n        <!-- any other identifier (can contain backslash and single\n             quote anywhere except at start, but these two special\n             cases are already taken care off above) -->\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"[^&charsdelim;\\s]+\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\" />\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"comments\">\n        <Detect2Chars attribute=\"Comment\" context=\"comments\" char=\"{\" char1=\"-\" /> <!-- for nested comments -->\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"}\" />\n      </context>\n      <context attribute=\"Hole\" lineEndContext=\"#stay\" name=\"hole\">\n        <Detect2Chars attribute=\"Hole\" context=\"#pop\" char=\"!\" char1=\"}\" />\n      </context>\n      <context attribute=\"Char\" lineEndContext=\"#pop\" name=\"char\">\n        <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"\\\" char1=\"'\" />\n        <DetectChar   attribute=\"Char\" context=\"#pop\"  char=\"'\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar   attribute=\"String\" context=\"#pop\"  char=\"&quot;\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\"   defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\" />\n      <itemData name=\"Pragma\"   defStyleNum=\"dsPreprocessor\" spellChecking=\"false\" />\n      <itemData name=\"Hole\"     defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n      <itemData name=\"Type\"     defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"Special\"  defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"   spellChecking=\"false\" />\n      <itemData name=\"Float\"    defStyleNum=\"dsFloat\"    spellChecking=\"false\" />\n      <itemData name=\"Char\"     defStyleNum=\"dsChar\"     spellChecking=\"false\" />\n      <itemData name=\"String\"   defStyleNum=\"dsString\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <folding indentationsensitive=\"1\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n      <comment name=\"multiLine\" start=\"{-\" end=\"-}\" />\n    </comments>\n    <keywords casesensitive=\"1\"\n              weakDeliminator=\":!+,-&lt;=&gt;%&amp;*/?[]^|~\\\\\"\n              additionalDeliminator=\"&charsdelim;\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ahdl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"AHDL\" version=\"3\" kateversion=\"5.0\" section=\"Hardware\" extensions=\"*.ahdl;*.tdf\" mimetype=\"text/x-ahdl\" author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>assert</item>\n      <item>bidir</item>\n      <item>bits</item>\n      <item>buried</item>\n      <item>case</item>\n      <item>clique</item>\n      <item>connected_pins</item>\n      <item>constant</item>\n      <item>defaults</item>\n      <item>define</item>\n      <item>design</item>\n      <item>device</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>for</item>\n      <item>function</item>\n      <item>generate</item>\n      <item>gnd</item>\n      <item>help_id</item>\n      <item>in</item>\n      <item>include</item>\n      <item>input</item>\n      <item>is</item>\n      <item>machine</item>\n      <item>node</item>\n      <item>of</item>\n      <item>options</item>\n      <item>others</item>\n      <item>output</item>\n      <item>parameters</item>\n      <item>returns</item>\n      <item>states</item>\n      <item>subdesign</item>\n      <item>then</item>\n      <item>title</item>\n      <item>to</item>\n      <item>tri_state_node</item>\n      <item>variable</item>\n      <item>vcc</item>\n      <item>when</item>\n      <item>with</item>\n    </list>\n    <list name=\"types\">\n      <item>carry</item>\n      <item>cascade</item>\n      <item>dffe</item>\n      <item>dff</item>\n      <item>exp</item>\n      <item>global</item>\n      <item>jkffe</item>\n      <item>jkff</item>\n      <item>latch</item>\n      <item>lcell</item>\n      <item>mcell</item>\n      <item>memory</item>\n      <item>opendrn</item>\n      <item>soft</item>\n      <item>srffe</item>\n      <item>srff</item>\n      <item>tffe</item>\n      <item>tff</item>\n      <item>tri</item>\n      <item>wire</item>\n      <item>x</item>\n    </list>\n    <list name=\"operator\">\n      <item>not</item>\n      <item>and</item>\n      <item>nand</item>\n      <item>or</item>\n      <item>nor</item>\n      <item>xor</item>\n      <item>xnor</item>\n      <item>mod</item>\n      <item>div</item>\n      <item>log2</item>\n      <item>used</item>\n      <item>ceil</item>\n      <item>floor</item>\n    </list>\n    <contexts>\n      <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bdefaults\\b\" insensitive=\"true\" beginRegion=\"def\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+defaults\\b\" insensitive=\"true\" endRegion=\"def\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bif\\b\" insensitive=\"true\" beginRegion=\"if\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+if\\b\" insensitive=\"true\" endRegion=\"if\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\btable\\b\" insensitive=\"true\" beginRegion=\"table\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+table\\b\" insensitive=\"true\" endRegion=\"table\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bcase\\b\" insensitive=\"true\" beginRegion=\"case\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+case\\b\" insensitive=\"true\" endRegion=\"case\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bbegin\\b\" insensitive=\"true\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\b\" insensitive=\"true\" endRegion=\"block\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"(\" beginRegion=\"bracket\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\")\" endRegion=\"bracket\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"operator\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"\\b(\\d+)\\b\" />\n        <RegExpr attribute=\"Bit\" context=\"#stay\" String=\"\\bb&quot;(0|1|x)+&quot;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Octal\" context=\"#stay\" String=\"\\b(o|q)&quot;[0-7*]&quot;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Hex\" context=\"#stay\" String=\"\\b(h|x)&quot;[0-9a-f]*&quot;\" insensitive=\"true\"/>\n        <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"--\\s*BEGIN.*$\" beginRegion=\"region\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"--\\s*END.*$\" endRegion=\"region\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"--.*$\" />\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"%\" />\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n      </context>\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#stay\" >\n        <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#stay\" >\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"%\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"  spellChecking=\"false\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"false\" />\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Bit\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n      <comment name=\"multiLine\" start=\"%\" end=\"%\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ahk.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"AutoHotKey\" section=\"Scripts\"\n          version=\"3\" kateversion=\"5.0\"\n          indenter=\"cstyle\"\n          extensions=\"*.ahk;*.iahk\"\n          priority=\"9\">\n<!--\n##########################################################################\n## Modified from CPP by Sinel\n##\n##########################################################################\n-->\n  <highlighting>\n    <list name=\"flowofcontrol\">\n\t<item>if</item>\n\t<item>ifequal</item>\n\t<item>ifexist</item>\n\t<item>ifgreater</item>\n\t<item>ifgreaterorequal</item>\n\t<item>ifinstring</item>\n\t<item>ifless</item>\n\t<item>iflessorequal</item>\n\t<item>ifmsgbox</item>\n\t<item>ifnotequal</item>\n\t<item>ifnotexist</item>\n\t<item>ifnotinstring</item>\n\t<item>ifwinactive</item>\n\t<item>ifwinexist</item>\n\t<item>ifwinnotactive</item>\n\t<item>ifwinnotexist</item>\n\t<item>break</item>\n\t<item>continue</item>\n\t<item>else</item>\n\t<item>exit</item>\n\t<item>exitapp</item>\n\t<item>gosub</item>\n\t<item>goto</item>\n\t<item>loop</item>\n\t<item>onexit</item>\n\t<item>pause</item>\n\t<item>repeat</item>\n\t<item>return</item>\n\t<item>settimer</item>\n\t<item>sleep</item>\n\t<item>suspend</item>\n\t<item>static</item>\n\t<item>global</item>\n\t<item>local</item>\n\t<item>byref</item>\n\t<item>while</item>\n\t<item>until</item>\n\t<item>for</item>\n    </list>\n    <list name=\"commands\">\n\t<item>autotrim</item>\n\t<item>blockinput</item>\n\t<item>clipwait</item>\n\t<item>control</item>\n\t<item>controlclick</item>\n\t<item>controlfocus</item>\n\t<item>controlget</item>\n\t<item>controlgetfocus</item>\n\t<item>controlgetpos</item>\n\t<item>controlgettext</item>\n\t<item>controlmove</item>\n\t<item>controlsend</item>\n\t<item>controlsendraw</item>\n\t<item>controlsettext</item>\n\t<item>coordmode</item>\n\t<item>critical</item>\n\t<item>detecthiddentext</item>\n\t<item>detecthiddenwindows</item>\n\t<item>drive</item>\n\t<item>driveget</item>\n\t<item>drivespacefree</item>\n\t<item>edit</item>\n\t<item>endrepeat</item>\n\t<item>envadd</item>\n\t<item>envdiv</item>\n\t<item>envget</item>\n\t<item>envmult</item>\n\t<item>envset</item>\n\t<item>envsub</item>\n\t<item>envupdate</item>\n\t<item>fileappend</item>\n\t<item>filecopy</item>\n\t<item>filecopydir</item>\n\t<item>filecreatedir</item>\n\t<item>filecreateshortcut</item>\n\t<item>filedelete</item>\n\t<item>filegetattrib</item>\n\t<item>filegetshortcut</item>\n\t<item>filegetsize</item>\n\t<item>filegettime</item>\n\t<item>filegetversion</item>\n\t<item>fileinstall</item>\n\t<item>filemove</item>\n\t<item>filemovedir</item>\n\t<item>fileread</item>\n\t<item>filereadline</item>\n\t<item>filerecycle</item>\n\t<item>filerecycleempty</item>\n\t<item>fileremovedir</item>\n\t<item>fileselectfile</item>\n\t<item>fileselectfolder</item>\n\t<item>filesetattrib</item>\n\t<item>filesettime</item>\n\t<item>formattime</item>\n\t<item>getkeystate</item>\n\t<item>groupactivate</item>\n\t<item>groupadd</item>\n\t<item>groupclose</item>\n\t<item>groupdeactivate</item>\n\t<item>gui</item>\n\t<item>guicontrol</item>\n\t<item>guicontrolget</item>\n\t<item>hideautoitwin</item>\n\t<item>hotkey</item>\n\t<item>imagesearch</item>\n\t<item>inidelete</item>\n\t<item>iniread</item>\n\t<item>iniwrite</item>\n\t<item>input</item>\n\t<item>inputbox</item>\n\t<item>keyhistory</item>\n\t<item>keywait</item>\n\t<item>listhotkeys</item>\n\t<item>listlines</item>\n\t<item>listvars</item>\n\t<item>menu</item>\n\t<item>mouseclick</item>\n\t<item>mouseclickdrag</item>\n\t<item>mousegetpos</item>\n\t<item>mousemove</item>\n\t<item>msgbox</item>\n\t<item>outputdebug</item>\n\t<item>pixelgetcolor</item>\n\t<item>pixelsearch</item>\n\t<item>postmessage</item>\n\t<item>process</item>\n\t<item>progress</item>\n\t<item>random</item>\n\t<item>regdelete</item>\n\t<item>regread</item>\n\t<item>regwrite</item>\n\t<item>reload</item>\n\t<item>run</item>\n\t<item>runas</item>\n\t<item>runwait</item>\n\t<item>send</item>\n\t<item>sendevent</item>\n\t<item>sendinput</item>\n\t<item>sendmessage</item>\n\t<item>sendmode</item>\n\t<item>sendplay</item>\n\t<item>sendraw</item>\n\t<item>setbatchlines</item>\n\t<item>setcapslockstate</item>\n\t<item>setcontroldelay</item>\n\t<item>setdefaultmousespeed</item>\n\t<item>setenv</item>\n\t<item>setformat</item>\n\t<item>setkeydelay</item>\n\t<item>setmousedelay</item>\n\t<item>setnumlockstate</item>\n\t<item>setscrolllockstate</item>\n\t<item>setstorecapslockmode</item>\n\t<item>settitlematchmode</item>\n\t<item>setwindelay</item>\n\t<item>setworkingdir</item>\n\t<item>shutdown</item>\n\t<item>sort</item>\n\t<item>soundbeep</item>\n\t<item>soundget</item>\n\t<item>soundgetwavevolume</item>\n\t<item>soundplay</item>\n\t<item>soundset</item>\n\t<item>soundsetwavevolume</item>\n\t<item>splashimage</item>\n\t<item>splashtextoff</item>\n\t<item>splashtexton</item>\n\t<item>splitpath</item>\n\t<item>statusbargettext</item>\n\t<item>statusbarwait</item>\n\t<item>stringcasesense</item>\n\t<item>stringgetpos</item>\n\t<item>stringleft</item>\n\t<item>stringlen</item>\n\t<item>stringlower</item>\n\t<item>stringmid</item>\n\t<item>stringreplace</item>\n\t<item>stringright</item>\n\t<item>stringsplit</item>\n\t<item>stringtrimleft</item>\n\t<item>stringtrimright</item>\n\t<item>stringupper</item>\n\t<item>sysget</item>\n\t<item>thread</item>\n\t<item>tooltip</item>\n\t<item>transform</item>\n\t<item>traytip</item>\n\t<item>urldownloadtofile</item>\n\t<item>winactivate</item>\n\t<item>winactivatebottom</item>\n\t<item>winclose</item>\n\t<item>winget</item>\n\t<item>wingetactivestats</item>\n\t<item>wingetactivetitle</item>\n\t<item>wingetclass</item>\n\t<item>wingetpos</item>\n\t<item>wingettext</item>\n\t<item>wingettitle</item>\n\t<item>winhide</item>\n\t<item>winkill</item>\n\t<item>winmaximize</item>\n\t<item>winmenuselectitem</item>\n\t<item>winminimize</item>\n\t<item>winminimizeall</item>\n\t<item>winminimizeallundo</item>\n\t<item>winmove</item>\n\t<item>winrestore</item>\n\t<item>winset</item>\n\t<item>winsettitle</item>\n\t<item>winshow</item>\n\t<item>winwait</item>\n\t<item>winwaitactive</item>\n\t<item>winwaitclose</item>\n\t<item>winwaitnotactive</item>\n\t<item>fileencoding</item>\n    </list>\n    <list name=\"functions\">\n\t<item>abs</item>\n\t<item>acos</item>\n\t<item>asc</item>\n\t<item>asin</item>\n\t<item>atan</item>\n\t<item>ceil</item>\n\t<item>chr</item>\n\t<item>cos</item>\n\t<item>dllcall</item>\n\t<item>exp</item>\n\t<item>fileexist</item>\n\t<item>floor</item>\n\t<item>getkeystate</item>\n\t<item>numget</item>\n\t<item>numput</item>\n\t<item>registercallback</item>\n\t<item>il_add</item>\n\t<item>il_create</item>\n\t<item>il_destroy</item>\n\t<item>instr</item>\n\t<item>islabel</item>\n\t<item>isfunc</item>\n\t<item>ln</item>\n\t<item>log</item>\n\t<item>lv_add</item>\n\t<item>lv_delete</item>\n\t<item>lv_deletecol</item>\n\t<item>lv_getcount</item>\n\t<item>lv_getnext</item>\n\t<item>lv_gettext</item>\n\t<item>lv_insert</item>\n\t<item>lv_insertcol</item>\n\t<item>lv_modify</item>\n\t<item>lv_modifycol</item>\n\t<item>lv_setimagelist</item>\n\t<item>mod</item>\n\t<item>onmessage</item>\n\t<item>round</item>\n\t<item>regexmatch</item>\n\t<item>regexreplace</item>\n\t<item>sb_seticon</item>\n\t<item>sb_setparts</item>\n\t<item>sb_settext</item>\n\t<item>sin</item>\n\t<item>sqrt</item>\n\t<item>strlen</item>\n\t<item>substr</item>\n\t<item>tan</item>\n\t<item>tv_add</item>\n\t<item>tv_delete</item>\n\t<item>tv_getchild</item>\n\t<item>tv_getcount</item>\n\t<item>tv_getnext</item>\n\t<item>tv_get</item>\n\t<item>tv_getparent</item>\n\t<item>tv_getprev</item>\n\t<item>tv_getselection</item>\n\t<item>tv_gettext</item>\n\t<item>tv_modify</item>\n\t<item>varsetcapacity</item>\n\t<item>winactive</item>\n\t<item>winexist</item>\n\t<item>trim</item>\n\t<item>ltrim</item>\n\t<item>rtrim</item>\n\t<item>fileopen</item>\n\t<item>strget</item>\n\t<item>strput</item>\n\t<item>object</item>\n\t<item>array</item>\n\t<item>isobject</item>\n\t<item>objinsert</item>\n\t<item>objremove</item>\n\t<item>objminindex</item>\n\t<item>objmaxindex</item>\n\t<item>objsetcapacity</item>\n\t<item>objgetcapacity</item>\n\t<item>objgetaddress</item>\n\t<item>objnewenum</item>\n\t<item>objaddref</item>\n\t<item>objrelease</item>\n\t<item>objhaskey</item>\n\t<item>objclone</item>\n\t<item>_insert</item>\n\t<item>_remove</item>\n\t<item>_minindex</item>\n\t<item>_maxindex</item>\n\t<item>_setcapacity</item>\n\t<item>_getcapacity</item>\n\t<item>_getaddress</item>\n\t<item>_newenum</item>\n\t<item>_addref</item>\n\t<item>_release</item>\n\t<item>_haskey</item>\n\t<item>_clone</item>\n\t<item>comobjcreate</item>\n\t<item>comobjget</item>\n\t<item>comobjconnect</item>\n\t<item>comobjerror</item>\n\t<item>comobjactive</item>\n\t<item>comobjenwrap</item>\n\t<item>comobjunwrap</item>\n\t<item>comobjparameter</item>\n\t<item>comobjmissing</item>\n\t<item>comobjtype</item>\n\t<item>comobjvalue</item>\n\t<item>comobjarray</item>\n\t<item>comobjquery</item>\n\t<item>comobjflags</item>\n    </list>\n    <list name=\"directives\">\n\t<item>allowsamelinecomments</item>\n\t<item>clipboardtimeout</item>\n\t<item>commentflag</item>\n\t<item>errorstdout</item>\n\t<item>escapechar</item>\n\t<item>hotkeyinterval</item>\n\t<item>hotkeymodifiertimeout</item>\n\t<item>hotstring</item>\n\t<item>if</item>\n\t<item>iftimeout</item>\n\t<item>ifwinactive</item>\n\t<item>ifwinexist</item>\n\t<item>include</item>\n\t<item>includeagain</item>\n\t<item>installkeybdhook</item>\n\t<item>installmousehook</item>\n\t<item>keyhistory</item>\n\t<item>ltrim</item>\n\t<item>maxhotkeysperinterval</item>\n\t<item>maxmem</item>\n\t<item>maxthreads</item>\n\t<item>maxthreadsbuffer</item>\n\t<item>maxthreadsperhotkey</item>\n\t<item>menumaskkey</item>\n\t<item>noenv</item>\n\t<item>notrayicon</item>\n\t<item>persistent</item>\n\t<item>singleinstance</item>\n\t<item>usehook</item>\n\t<item>warn</item>\n\t<item>winactivateforce</item>\n      </list>\n    <list name=\"keysandbuttons\">\n\t<item>shift</item>\n\t<item>lshift</item>\n\t<item>rshift</item>\n\t<item>alt</item>\n\t<item>lalt</item>\n\t<item>ralt</item>\n\t<item>control</item>\n\t<item>lcontrol</item>\n\t<item>rcontrol</item>\n\t<item>ctrl</item>\n\t<item>lctrl</item>\n\t<item>rctrl</item>\n\t<item>lwin</item>\n\t<item>rwin</item>\n\t<item>appskey</item>\n\t<item>altdown</item>\n\t<item>altup</item>\n\t<item>shiftdown</item>\n\t<item>shiftup</item>\n\t<item>ctrldown</item>\n\t<item>ctrlup</item>\n\t<item>lwindown</item>\n\t<item>lwinup</item>\n\t<item>rwindown</item>\n\t<item>rwinup</item>\n\t<item>lbutton</item>\n\t<item>rbutton</item>\n\t<item>mbutton</item>\n\t<item>wheelup</item>\n\t<item>wheeldown</item>\n\t<item>xbutton1</item>\n\t<item>xbutton2</item>\n\t<item>joy1</item>\n\t<item>joy2</item>\n\t<item>joy3</item>\n\t<item>joy4</item>\n\t<item>joy5</item>\n\t<item>joy6</item>\n\t<item>joy7</item>\n\t<item>joy8</item>\n\t<item>joy9</item>\n\t<item>joy10</item>\n\t<item>joy11</item>\n\t<item>joy12</item>\n\t<item>joy13</item>\n\t<item>joy14</item>\n\t<item>joy15</item>\n\t<item>joy16</item>\n\t<item>joy17</item>\n\t<item>joy18</item>\n\t<item>joy19</item>\n\t<item>joy20</item>\n\t<item>joy21</item>\n\t<item>joy22</item>\n\t<item>joy23</item>\n\t<item>joy24</item>\n\t<item>joy25</item>\n\t<item>joy26</item>\n\t<item>joy27</item>\n\t<item>joy28</item>\n\t<item>joy29</item>\n\t<item>joy30</item>\n\t<item>joy31</item>\n\t<item>joy32</item>\n\t<item>joyx</item>\n\t<item>joyy</item>\n\t<item>joyz</item>\n\t<item>joyr</item>\n\t<item>joyu</item>\n\t<item>joyv</item>\n\t<item>joypov</item>\n\t<item>joyname</item>\n\t<item>joybuttons</item>\n\t<item>joyaxes</item>\n\t<item>joyinfo</item>\n\t<item>space</item>\n\t<item>tab</item>\n\t<item>enter</item>\n\t<item>escape</item>\n\t<item>esc</item>\n\t<item>backspace</item>\n\t<item>bs</item>\n\t<item>delete</item>\n\t<item>del</item>\n\t<item>insert</item>\n\t<item>ins</item>\n\t<item>pgup</item>\n\t<item>pgdn</item>\n\t<item>home</item>\n\t<item>end</item>\n\t<item>up</item>\n\t<item>down</item>\n\t<item>left</item>\n\t<item>right</item>\n\t<item>printscreen</item>\n\t<item>ctrlbreak</item>\n\t<item>pause</item>\n\t<item>scrolllock</item>\n\t<item>capslock</item>\n\t<item>numlock</item>\n\t<item>numpad0</item>\n\t<item>numpad1</item>\n\t<item>numpad2</item>\n\t<item>numpad3</item>\n\t<item>numpad4</item>\n\t<item>numpad5</item>\n\t<item>numpad6</item>\n\t<item>numpad7</item>\n\t<item>numpad8</item>\n\t<item>numpad9</item>\n\t<item>numpadmult</item>\n\t<item>numpadadd</item>\n\t<item>numpadsub</item>\n\t<item>numpaddiv</item>\n\t<item>numpaddot</item>\n\t<item>numpaddel</item>\n\t<item>numpadins</item>\n\t<item>numpadclear</item>\n\t<item>numpadup</item>\n\t<item>numpaddown</item>\n\t<item>numpadleft</item>\n\t<item>numpadright</item>\n\t<item>numpadhome</item>\n\t<item>numpadend</item>\n\t<item>numpadpgup</item>\n\t<item>numpadpgdn</item>\n\t<item>numpadenter</item>\n\t<item>f1</item>\n\t<item>f2</item>\n\t<item>f3</item>\n\t<item>f4</item>\n\t<item>f5</item>\n\t<item>f6</item>\n\t<item>f7</item>\n\t<item>f8</item>\n\t<item>f9</item>\n\t<item>f10</item>\n\t<item>f11</item>\n\t<item>f12</item>\n\t<item>f13</item>\n\t<item>f14</item>\n\t<item>f15</item>\n\t<item>f16</item>\n\t<item>f17</item>\n\t<item>f18</item>\n\t<item>f19</item>\n\t<item>f20</item>\n\t<item>f21</item>\n\t<item>f22</item>\n\t<item>f23</item>\n\t<item>f24</item>\n\t<item>browser_back</item>\n\t<item>browser_forward</item>\n\t<item>browser_refresh</item>\n\t<item>browser_stop</item>\n\t<item>browser_search</item>\n\t<item>browser_favorites</item>\n\t<item>browser_home</item>\n\t<item>volume_mute</item>\n\t<item>volume_down</item>\n\t<item>volume_up</item>\n\t<item>media_next</item>\n\t<item>media_prev</item>\n\t<item>media_stop</item>\n\t<item>media_play_pause</item>\n\t<item>launch_mail</item>\n\t<item>launch_media</item>\n\t<item>launch_app1</item>\n\t<item>launch_app2</item>\n\t<item>blind</item>\n\t<item>click</item>\n\t<item>raw</item>\n\t<item>wheelleft</item>\n\t<item>wheelright</item>\n    </list>\n    <list name=\"variables\">\n\t<item>a_ahkpath</item>\n\t<item>a_ahkversion</item>\n\t<item>a_appdata</item>\n\t<item>a_appdatacommon</item>\n\t<item>a_autotrim</item>\n\t<item>a_batchlines</item>\n\t<item>a_caretx</item>\n\t<item>a_carety</item>\n\t<item>a_computername</item>\n\t<item>a_controldelay</item>\n\t<item>a_cursor</item>\n\t<item>a_dd</item>\n\t<item>a_ddd</item>\n\t<item>a_dddd</item>\n\t<item>a_defaultmousespeed</item>\n\t<item>a_desktop</item>\n\t<item>a_desktopcommon</item>\n\t<item>a_detecthiddentext</item>\n\t<item>a_detecthiddenwindows</item>\n\t<item>a_endchar</item>\n\t<item>a_eventinfo</item>\n\t<item>a_exitreason</item>\n\t<item>a_formatfloat</item>\n\t<item>a_formatinteger</item>\n\t<item>a_gui</item>\n\t<item>a_guievent</item>\n\t<item>a_guicontrol</item>\n\t<item>a_guicontrolevent</item>\n\t<item>a_guiheight</item>\n\t<item>a_guiwidth</item>\n\t<item>a_guix</item>\n\t<item>a_guiy</item>\n\t<item>a_hour</item>\n\t<item>a_iconfile</item>\n\t<item>a_iconhidden</item>\n\t<item>a_iconnumber</item>\n\t<item>a_icontip</item>\n\t<item>a_index</item>\n\t<item>a_ipaddress1</item>\n\t<item>a_ipaddress2</item>\n\t<item>a_ipaddress3</item>\n\t<item>a_ipaddress4</item>\n\t<item>a_isadmin</item>\n\t<item>a_iscompiled</item>\n\t<item>a_issuspended</item>\n\t<item>a_keydelay</item>\n\t<item>a_language</item>\n\t<item>a_lasterror</item>\n\t<item>a_linefile</item>\n\t<item>a_linenumber</item>\n\t<item>a_loopfield</item>\n\t<item>a_loopfileattrib</item>\n\t<item>a_loopfiledir</item>\n\t<item>a_loopfileext</item>\n\t<item>a_loopfilefullpath</item>\n\t<item>a_loopfilelongpath</item>\n\t<item>a_loopfilename</item>\n\t<item>a_loopfileshortname</item>\n\t<item>a_loopfileshortpath</item>\n\t<item>a_loopfilesize</item>\n\t<item>a_loopfilesizekb</item>\n\t<item>a_loopfilesizemb</item>\n\t<item>a_loopfiletimeaccessed</item>\n\t<item>a_loopfiletimecreated</item>\n\t<item>a_loopfiletimemodified</item>\n\t<item>a_loopreadline</item>\n\t<item>a_loopregkey</item>\n\t<item>a_loopregname</item>\n\t<item>a_loopregsubkey</item>\n\t<item>a_loopregtimemodified</item>\n\t<item>a_loopregtype</item>\n\t<item>a_mday</item>\n\t<item>a_min</item>\n\t<item>a_mm</item>\n\t<item>a_mmm</item>\n\t<item>a_mmmm</item>\n\t<item>a_mon</item>\n\t<item>a_mousedelay</item>\n\t<item>a_msec</item>\n\t<item>a_mydocuments</item>\n\t<item>a_now</item>\n\t<item>a_nowutc</item>\n\t<item>a_numbatchlines</item>\n\t<item>a_ostype</item>\n\t<item>a_osversion</item>\n\t<item>a_priorhotkey</item>\n\t<item>a_programfiles</item>\n\t<item>a_programs</item>\n\t<item>a_programscommon</item>\n\t<item>a_screenheight</item>\n\t<item>a_screenwidth</item>\n\t<item>a_scriptdir</item>\n\t<item>a_scriptfullpath</item>\n\t<item>a_scriptname</item>\n\t<item>a_sec</item>\n\t<item>a_space</item>\n\t<item>a_startmenu</item>\n\t<item>a_startmenucommon</item>\n\t<item>a_startup</item>\n\t<item>a_startupcommon</item>\n\t<item>a_stringcasesense</item>\n\t<item>a_tab</item>\n\t<item>a_temp</item>\n\t<item>a_thishotkey</item>\n\t<item>a_thismenu</item>\n\t<item>a_thismenuitem</item>\n\t<item>a_thismenuitempos</item>\n\t<item>a_tickcount</item>\n\t<item>a_timeidle</item>\n\t<item>a_timeidlephysical</item>\n\t<item>a_timesincepriorhotkey</item>\n\t<item>a_timesincethishotkey</item>\n\t<item>a_titlematchmode</item>\n\t<item>a_titlematchmodespeed</item>\n\t<item>a_username</item>\n\t<item>a_wday</item>\n\t<item>a_windelay</item>\n\t<item>a_windir</item>\n\t<item>a_workingdir</item>\n\t<item>a_yday</item>\n\t<item>a_year</item>\n\t<item>a_yweek</item>\n\t<item>a_yyyy</item>\n\t<item>clipboard</item>\n\t<item>clipboardall</item>\n\t<item>comspec</item>\n\t<item>errorlevel</item>\n\t<item>programfiles</item>\n\t<item>true</item>\n\t<item>false</item>\n\t<item>a_thisfunc</item>\n\t<item>a_thislabel</item>\n\t<item>a_ispaused</item>\n\t<item>a_iscritical</item>\n\t<item>a_isunicode</item>\n\t<item>a_ptrsize</item>\n    </list>\n    <list name=\"keywords\">\n\t<item>ltrim</item>\n\t<item>rtrim</item>\n\t<item>join</item>\n\t<item>ahk_id</item>\n\t<item>ahk_pid</item>\n\t<item>ahk_class</item>\n\t<item>ahk_group</item>\n\t<item>processname</item>\n\t<item>minmax</item>\n\t<item>controllist</item>\n\t<item>statuscd</item>\n\t<item>filesystem</item>\n\t<item>setlabel</item>\n\t<item>alwaysontop</item>\n\t<item>mainwindow</item>\n\t<item>nomainwindow</item>\n\t<item>useerrorlevel</item>\n\t<item>altsubmit</item>\n\t<item>hscroll</item>\n\t<item>vscroll</item>\n\t<item>imagelist</item>\n\t<item>wantctrla</item>\n\t<item>wantf2</item>\n\t<item>vis</item>\n\t<item>visfirst</item>\n\t<item>wantreturn</item>\n\t<item>backgroundtrans</item>\n\t<item>minimizebox</item>\n\t<item>maximizebox</item>\n\t<item>sysmenu</item>\n\t<item>toolwindow</item>\n\t<item>exstyle</item>\n\t<item>check3</item>\n\t<item>checkedgray</item>\n\t<item>readonly</item>\n\t<item>notab</item>\n\t<item>lastfound</item>\n\t<item>lastfoundexist</item>\n\t<item>alttab</item>\n\t<item>shiftalttab</item>\n\t<item>alttabmenu</item>\n\t<item>alttabandmenu</item>\n\t<item>alttabmenudismiss</item>\n\t<item>controllisthwnd</item>\n\t<item>hwnd</item>\n\t<item>deref</item>\n\t<item>pow</item>\n\t<item>bitnot</item>\n\t<item>bitand</item>\n\t<item>bitor</item>\n\t<item>bitxor</item>\n\t<item>bitshiftleft</item>\n\t<item>bitshiftright</item>\n\t<item>sendandmouse</item>\n\t<item>mousemove</item>\n\t<item>mousemoveoff</item>\n\t<item>hkey_local_machine</item>\n\t<item>hkey_users</item>\n\t<item>hkey_current_user</item>\n\t<item>hkey_classes_root</item>\n\t<item>hkey_current_config</item>\n\t<item>hklm</item>\n\t<item>hku</item>\n\t<item>hkcu</item>\n\t<item>hkcr</item>\n\t<item>hkcc</item>\n\t<item>reg_sz</item>\n\t<item>reg_expand_sz</item>\n\t<item>reg_multi_sz</item>\n\t<item>reg_dword</item>\n\t<item>reg_qword</item>\n\t<item>reg_binary</item>\n\t<item>reg_link</item>\n\t<item>reg_resource_list</item>\n\t<item>reg_full_resource_descriptor</item>\n\t<item>reg_resource_requirements_list</item>\n\t<item>reg_dword_big_endian</item>\n\t<item>regex</item>\n\t<item>pixel</item>\n\t<item>mouse</item>\n\t<item>screen</item>\n\t<item>relative</item>\n\t<item>rgb</item>\n\t<item>low</item>\n\t<item>belownormal</item>\n\t<item>normal</item>\n\t<item>abovenormal</item>\n\t<item>high</item>\n\t<item>realtime</item>\n\t<item>between</item>\n\t<item>contains</item>\n\t<item>in</item>\n\t<item>is</item>\n\t<item>integer</item>\n\t<item>float</item>\n\t<item>number</item>\n\t<item>digit</item>\n\t<item>xdigit</item>\n\t<item>integerfast</item>\n\t<item>floatfast</item>\n\t<item>alpha</item>\n\t<item>upper</item>\n\t<item>lower</item>\n\t<item>alnum</item>\n\t<item>time</item>\n\t<item>date</item>\n\t<item>not</item>\n\t<item>or</item>\n\t<item>and</item>\n\t<item>topmost</item>\n\t<item>top</item>\n\t<item>bottom</item>\n\t<item>transparent</item>\n\t<item>transcolor</item>\n\t<item>redraw</item>\n\t<item>region</item>\n\t<item>id</item>\n\t<item>idlast</item>\n\t<item>count</item>\n\t<item>list</item>\n\t<item>capacity</item>\n\t<item>eject</item>\n\t<item>lock</item>\n\t<item>unlock</item>\n\t<item>label</item>\n\t<item>serial</item>\n\t<item>type</item>\n\t<item>status</item>\n\t<item>seconds</item>\n\t<item>minutes</item>\n\t<item>hours</item>\n\t<item>days</item>\n\t<item>read</item>\n\t<item>parse</item>\n\t<item>logoff</item>\n\t<item>close</item>\n\t<item>error</item>\n\t<item>single</item>\n\t<item>shutdown</item>\n\t<item>menu</item>\n\t<item>exit</item>\n\t<item>reload</item>\n\t<item>tray</item>\n\t<item>add</item>\n\t<item>rename</item>\n\t<item>check</item>\n\t<item>uncheck</item>\n\t<item>togglecheck</item>\n\t<item>enable</item>\n\t<item>disable</item>\n\t<item>toggleenable</item>\n\t<item>default</item>\n\t<item>nodefault</item>\n\t<item>standard</item>\n\t<item>nostandard</item>\n\t<item>color</item>\n\t<item>delete</item>\n\t<item>deleteall</item>\n\t<item>icon</item>\n\t<item>noicon</item>\n\t<item>tip</item>\n\t<item>click</item>\n\t<item>show</item>\n\t<item>edit</item>\n\t<item>progress</item>\n\t<item>hotkey</item>\n\t<item>text</item>\n\t<item>picture</item>\n\t<item>pic</item>\n\t<item>groupbox</item>\n\t<item>button</item>\n\t<item>checkbox</item>\n\t<item>radio</item>\n\t<item>dropdownlist</item>\n\t<item>ddl</item>\n\t<item>combobox</item>\n\t<item>statusbar</item>\n\t<item>treeview</item>\n\t<item>listbox</item>\n\t<item>listview</item>\n\t<item>datetime</item>\n\t<item>monthcal</item>\n\t<item>updown</item>\n\t<item>slider</item>\n\t<item>tab</item>\n\t<item>tab2</item>\n\t<item>iconsmall</item>\n\t<item>tile</item>\n\t<item>report</item>\n\t<item>sortdesc</item>\n\t<item>nosort</item>\n\t<item>nosorthdr</item>\n\t<item>grid</item>\n\t<item>hdr</item>\n\t<item>autosize</item>\n\t<item>range</item>\n\t<item>xm</item>\n\t<item>ym</item>\n\t<item>ys</item>\n\t<item>xs</item>\n\t<item>xp</item>\n\t<item>yp</item>\n\t<item>font</item>\n\t<item>resize</item>\n\t<item>owner</item>\n\t<item>submit</item>\n\t<item>nohide</item>\n\t<item>minimize</item>\n\t<item>maximize</item>\n\t<item>restore</item>\n\t<item>noactivate</item>\n\t<item>na</item>\n\t<item>cancel</item>\n\t<item>destroy</item>\n\t<item>center</item>\n\t<item>margin</item>\n\t<item>owndialogs</item>\n\t<item>guiescape</item>\n\t<item>guiclose</item>\n\t<item>guisize</item>\n\t<item>guicontextmenu</item>\n\t<item>guidropfiles</item>\n\t<item>tabstop</item>\n\t<item>section</item>\n\t<item>wrap</item>\n\t<item>border</item>\n\t<item>top</item>\n\t<item>bottom</item>\n\t<item>buttons</item>\n\t<item>expand</item>\n\t<item>first</item>\n\t<item>lines</item>\n\t<item>number</item>\n\t<item>uppercase</item>\n\t<item>lowercase</item>\n\t<item>limit</item>\n\t<item>password</item>\n\t<item>multi</item>\n\t<item>group</item>\n\t<item>background</item>\n\t<item>bold</item>\n\t<item>italic</item>\n\t<item>strike</item>\n\t<item>underline</item>\n\t<item>norm</item>\n\t<item>theme</item>\n\t<item>caption</item>\n\t<item>delimiter</item>\n\t<item>flash</item>\n\t<item>style</item>\n\t<item>checked</item>\n\t<item>password</item>\n\t<item>hidden</item>\n\t<item>left</item>\n\t<item>right</item>\n\t<item>center</item>\n\t<item>section</item>\n\t<item>move</item>\n\t<item>focus</item>\n\t<item>hide</item>\n\t<item>choose</item>\n\t<item>choosestring</item>\n\t<item>text</item>\n\t<item>pos</item>\n\t<item>enabled</item>\n\t<item>disabled</item>\n\t<item>visible</item>\n\t<item>notimers</item>\n\t<item>interrupt</item>\n\t<item>priority</item>\n\t<item>waitclose</item>\n\t<item>unicode</item>\n\t<item>tocodepage</item>\n\t<item>fromcodepage\\</item>\n\t<item>yes</item>\n\t<item>no</item>\n\t<item>ok</item>\n\t<item>cancel</item>\n\t<item>abort</item>\n\t<item>retry</item>\n\t<item>ignore</item>\n\t<item>force</item>\n\t<item>on</item>\n\t<item>off</item>\n\t<item>all</item>\n\t<item>send</item>\n\t<item>wanttab</item>\n\t<item>monitorcount</item>\n\t<item>monitorprimary</item>\n\t<item>monitorname</item>\n\t<item>monitorworkarea</item>\n\t<item>pid</item>\n\t<item>base</item>\n\t<item>__get</item>\n\t<item>__set</item>\n\t<item>__call</item>\n\t<item>__delete</item>\n\t<item>useunsetlocal</item>\n\t<item>useunsetglobal</item>\n\t<item>useenv</item>\n\t<item>localsameasglobal</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\\s*$\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <DetectChar context=\"AfterHash\" char=\"#\" firstNonSpace=\"true\" lookAhead=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n        <keyword attribute=\"Flow of control\" context=\"#stay\" String=\"flowofcontrol\" />\n        <keyword attribute=\"Commands\" context=\"#stay\" String=\"commands\" />\n        <keyword attribute=\"Functions\" context=\"#stay\" String=\"functions\" />\n        <keyword attribute=\"Directives\" context=\"#stay\" String=\"directives\" />\n        <keyword attribute=\"Keys and buttons\" context=\"#stay\" String=\"keysandbuttons\" />\n        <keyword attribute=\"Variables\" context=\"#stay\" String=\"variables\" />\n        <keyword attribute=\"Keywords\" context=\"#stay\" String=\"keywords\" />\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <DetectIdentifier />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <DetectChar attribute=\"Comment\" context=\"Commentar 1\" char=\";\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\"/>\n      </context>\n\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Region Marker\" lineEndContext=\"#pop\" name=\"Region Marker\">\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"AfterHash\">\n        <!-- define, elif, else, endif, error, if, ifdef, ifndef, include, include_next, line, pragma, undef, warning -->\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*if(?:def|ndef)?(?=\\s+\\S)\" insensitive=\"true\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*endif\" insensitive=\"true\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Define\" String=\"#\\s*define.*((?=\\\\))\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s+[0-9]+\" insensitive=\"true\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n        <DetectChar attribute=\"Comment\" context=\"Commentar 1\" char=\";\"/>\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <IncludeRules context=\"##Doxygen\" />\n        <DetectChar attribute=\"Comment\" context=\"Commentar 1\" char=\";\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*el(?:se|if)\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <DetectChar attribute=\"Comment\" context=\"Commentar 1\" char=\";\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n    </contexts>\n    <itemDatas>\n\t<itemData name=\"Flow of control\"      defStyleNum=\"dsControlFlow\" />\n\t<itemData name=\"Commands\"             defStyleNum=\"dsBuiltIn\" />\n\t<itemData name=\"Functions\"            defStyleNum=\"dsFunction\" italic=\"1\" bold=\"1\" />\n\t<itemData name=\"Directives\"           defStyleNum=\"dsConstant\" bold=\"1\" />\n\t<itemData name=\"Keys and buttons\"     defStyleNum=\"dsBuiltIn\" />\n\t<itemData name=\"Variables\"            defStyleNum=\"dsVariable\" />\n\t<itemData name=\"Keywords\"             defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n      <itemData name=\"Prep. Lib\"    defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n      <itemData name=\"Error\"        defStyleNum=\"dsError\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\";\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/alert.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language version=\"5\" kateversion=\"3.1\" name=\"Alerts\" section=\"Other\" extensions=\"\" mimetype=\"\" author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\" hidden=\"true\">\n  <highlighting>\n    <list name=\"alerts_hi\">\n      <item>ALERT</item>\n      <item>ATTENTION</item>\n      <item>DANGER</item>\n      <item>HACK</item>\n      <item>SECURITY</item>\n    </list>\n    <list name=\"alerts_mid\">\n      <item>BUG</item>\n      <item>FIXME</item>\n      <item>DEPRECATED</item>\n      <item>TASK</item>\n      <item>TODO</item>\n      <item>TBD</item>\n      <item>WARNING</item>\n      <item>CAUTION</item>\n      <item>NOLINT</item>\n    </list>\n    <list name=\"alerts_lo\">\n      <item>###</item>\n      <item>NOTE</item>\n      <item>NOTICE</item>\n      <item>TEST</item>\n      <item>TESTING</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Normal Text\" >\n        <StringDetect attribute=\"Region Marker\" context=\"#stay\" String=\"{{{\" beginRegion=\"AlertRegion1\" />\n        <StringDetect attribute=\"Region Marker\" context=\"#stay\" String=\"}}}\" endRegion=\"AlertRegion1\" />\n        <WordDetect attribute=\"Region Marker\" context=\"#stay\" String=\"BEGIN\" beginRegion=\"AlertRegion2\" />\n        <WordDetect attribute=\"Region Marker\" context=\"#stay\" String=\"END\" endRegion=\"AlertRegion2\" />\n        <keyword attribute=\"Alert Level 1\" context=\"#stay\" String=\"alerts_hi\" />\n        <keyword attribute=\"Alert Level 2\" context=\"#stay\" String=\"alerts_mid\" />\n        <keyword attribute=\"Alert Level 3\" context=\"#stay\" String=\"alerts_lo\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"   defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Alert Level 1\" defStyleNum=\"dsAlert\" color=\"#e85848\" selColor=\"#e85848\" backgroundColor=\"#451e1a\" />\n      <itemData name=\"Alert Level 2\" defStyleNum=\"dsAlert\" color=\"#ca9219\" selColor=\"#ca9219\" backgroundColor=\"#451e1a\" />\n      <itemData name=\"Alert Level 3\" defStyleNum=\"dsAlert\" color=\"#81ca2d\" selColor=\"#81ca2d\" />\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n<!-- kate: indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"AMPLE\" version=\"7\" kateversion=\"5.2\" section=\"Scripts\" extensions=\"*.ample;*.menu;*.startup\" mimetype=\"text/x-amplesrc\" priority=\"5\" author=\"Christian Parg (cparg@gmx.de)\" license=\"Apache &amp; LGPL\" >\n<!--\n#################################################################################################\n## AMPLE Highlight file by Christian Parg (cparg_(at)_gmx_de)\n## Note:\n##   - AMPLE ist the Scripting Language of Mentor Graphics' IC-Station Full Custom IC Tools\n##   - used c.xml as starting point\n## v0.2\n##   - added several function lists\n##   - added Spice 'f' suffix\n## This file comes without any warranty and is licensed under Apache License or LGPL V2 or later\n#################################################################################################\n\nNote: I used this hack to extract the functions from the reference documentation:\n   strings icstn_ref.pdf | fgrep '/Title ' | fgrep '\\(' | sed -e 's#/Title (#    <item> #' -e 's#)$# </item>#' -e 's#\\\\##g' -e 's#()##' > ~/tmp/bla2\n\n-->\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>builtin</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>do</item>\n      <item>else</item>\n      <item>extern</item>\n      <item>local</item>\n      <item>for</item>\n      <item>function</item>\n      <item>if</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>while</item>\n    </list>\n    <list name=\"resvar\">\n      <item>void</item>\n      <item>undefined</item>\n      <item>$abort_enable</item>\n      <item>$dofile_arg1</item>\n      <item>$dofile_arg2</item>\n      <item>$dofile_arg3</item>\n      <item>$dofile_arg4</item>\n      <item>$dofile_arg5</item>\n      <item>$dofile_arg6</item>\n      <item>$dofile_arg7</item>\n      <item>$dofile_arg8</item>\n      <item>$dofile_arg9</item>\n      <item>$dofile_arg10</item>\n      <item>$dofile_arg11</item>\n      <item>$dofile_arg12</item>\n      <item>$dofile_arg13</item>\n      <item>$dofile_arg14</item>\n      <item>$dofile_arg15</item>\n      <item>$dofile_arg16</item>\n      <item>$dofile_arg17</item>\n      <item>$dofile_arg18</item>\n      <item>$dofile_arg19</item>\n      <item>$dofile_arg20</item>\n      <item>$dofile_arg_count</item>\n      <item>$dofile_result</item>\n      <item>false</item>\n      <item>off</item>\n      <item>on</item>\n      <item>pi</item>\n      <item>$stderr</item>\n      <item>$stdin</item>\n      <item>$stdout</item>\n      <item>true</item>\n      <item>two_pi</item>\n    </list>\n\n    <!-- plain IC AMPLE builtin Functions -->\n\n    <list name=\"builtinfct\">\n      <item>abs</item>\n      <item>acos</item>\n      <item>$add_complex</item>\n      <item>$add_status_args</item>\n      <item>asin</item>\n      <item>atan</item>\n      <item>atan2</item>\n      <item>$bad_status</item>\n      <item>ceil</item>\n      <item>$clear_file_error</item>\n      <item>$close_file</item>\n      <item>$complex_imaginary</item>\n      <item>$complex_real</item>\n      <item>$conjugate_complex</item>\n      <item>$constrain_value</item>\n      <item>cos</item>\n      <item>cosh</item>\n      <item>cot</item>\n      <item>$create_complex</item>\n      <item>$create_string_registry</item>\n      <item>$create_vector</item>\n      <item>csc</item>\n      <item>$current_user</item>\n      <item>$cvt_exist_file</item>\n      <item>$cvt_read_variable</item>\n      <item>$cvt_type</item>\n      <item>$cvt_write_variable</item>\n      <item>$date</item>\n      <item>deg</item>\n      <item>$divide_complex</item>\n      <item>$dofile</item>\n      <item>$e</item>\n      <item>$eof</item>\n      <item>exp</item>\n      <item>$expand_rest</item>\n      <item>$f</item>\n      <item>$file_error</item>\n      <item>$file_exist</item>\n      <item>$file_pos</item>\n      <item>$file_status</item>\n      <item>floor</item>\n      <item>$flush_file</item>\n      <item>$format</item>\n      <item>$free_stream_id</item>\n      <item>$function_help</item>\n      <item>$function_ref_help</item>\n      <item>$function_signature</item>\n      <item>$g</item>\n      <item>$generate_rand</item>\n      <item>$get_ample_status</item>\n      <item>$get_app_name</item>\n      <item>$get_app_ver</item>\n      <item>$get_env</item>\n      <item>$i</item>\n      <item>$integer_divide</item>\n      <item>length</item>\n      <item>$list_overwritten_functions</item>\n      <item>$load_library</item>\n      <item>log</item>\n      <item>log10</item>\n      <item>$lower_string</item>\n      <item>$magnitude_complex</item>\n      <item>$multiply_complex</item>\n      <item>$n</item>\n      <item>$number_string</item>\n      <item>$open_file</item>\n      <item>$ord_to_string</item>\n      <item>$phase_complex</item>\n      <item>$pop_ample_status</item>\n      <item>pow</item>\n      <item>$qsort</item>\n      <item>rad</item>\n      <item>$raise_status</item>\n      <item>$read_file</item>\n      <item>$reads_file</item>\n      <item>$real_time</item>\n      <item>$register_alias</item>\n      <item>$register_args</item>\n      <item>$register_command</item>\n      <item>$resolve_mgc_path</item>\n      <item>$round</item>\n      <item>$round_prec</item>\n      <item>$s</item>\n      <item>sec</item>\n      <item>$seek_file</item>\n      <item>$set_function_status</item>\n      <item>$set_rand</item>\n      <item>$set_status</item>\n      <item>$set_thousands</item>\n      <item>$set_transcript_mode</item>\n      <item>sin</item>\n      <item>sinh</item>\n      <item>sqrt</item>\n      <item>$sscanf</item>\n      <item>$strcat</item>\n      <item>$strftime</item>\n      <item>$string_locate</item>\n      <item>$string_status</item>\n      <item>$string_to_ord</item>\n      <item>$subtract_complex</item>\n      <item>$suspend</item>\n      <item>$sys_time</item>\n      <item>$system</item>\n      <item>tan</item>\n      <item>tanh</item>\n      <item>$time</item>\n      <item>$traceback</item>\n      <item>$truncate</item>\n      <item>$type</item>\n      <item>$undefine_id</item>\n      <item>$upper_string</item>\n      <item>$vector_count_range</item>\n      <item>$vector_element_divide</item>\n      <item>$vector_element_multiply</item>\n      <item>$vector_find</item>\n      <item>$vector_histogram</item>\n      <item>$vector_integrate</item>\n      <item>$vector_max</item>\n      <item>$vector_min</item>\n      <item>$vector_search</item>\n      <item>$vector_slope</item>\n      <item>$vector_sum</item>\n      <item>$vendor_cpu</item>\n      <item>$where_is</item>\n      <item>$write_file</item>\n      <item>$writeln_file</item>\n      <item>$writes_file</item>\n    </list>\n    <list name=\"icstnfct\">\n      <item>$acquire_license</item>\n      <item>$activate_net</item>\n      <item>$activate_net_by_handle</item>\n      <item>$activate_net_by_name</item>\n      <item>$activate_port</item>\n      <item>$activate_port_by_handle</item>\n      <item>$activate_port_by_name</item>\n      <item>$add_cell</item>\n      <item>$add_contacts</item>\n      <item>$add_device</item>\n      <item>$add_fp_shape</item>\n      <item>$add_group_property</item>\n      <item>$add_metal</item>\n      <item>$add_multiple_text</item>\n      <item>$add_net_members_to_ports</item>\n      <item>$add_overflow</item>\n      <item>$add_overflow_by_handle</item>\n      <item>$add_panel</item>\n      <item>$add_path</item>\n      <item>$add_path_device</item>\n      <item>$add_point_device</item>\n      <item>$add_property</item>\n      <item>$add_property_group_members</item>\n      <item>$add_property_group_selections</item>\n      <item>$add_property_text</item>\n      <item>$add_route</item>\n      <item>$add_row</item>\n      <item>$add_rows_by_area</item>\n      <item>$add_ruler</item>\n      <item>$add_shape</item>\n      <item>$add_shape_device</item>\n      <item>$add_text</item>\n      <item>$add_text_on_ports</item>\n      <item>$add_to_library</item>\n      <item>$add_to_net</item>\n      <item>$add_to_port</item>\n      <item>$add_via</item>\n      <item>$align</item>\n      <item>$apply_print_vector_attributes</item>\n      <item>$attach_library</item>\n      <item>$autofloorplan</item>\n      <item>$autoplace_blocks</item>\n      <item>$autoplace_corner_cells</item>\n      <item>$autoplace_group</item>\n      <item>$autoplace_pins</item>\n      <item>$autoplace_ports</item>\n      <item>$autoplace_power_vias</item>\n      <item>$autoplace_standard_cells</item>\n      <item>$autoroute_all</item>\n      <item>$autoroute_nets</item>\n      <item>$autoroute_overflow</item>\n      <item>$backannotate_net_parameters</item>\n      <item>$build_hotplot_setup</item>\n      <item>$build_lib</item>\n      <item>$build_ports</item>\n      <item>$build_ports_shapes</item>\n      <item>$build_ports_text_location</item>\n      <item>$build_power_strap_shapes</item>\n      <item>$build_power_straps</item>\n      <item>$build_read_gdsii_optfile</item>\n      <item>$change_array</item>\n      <item>$change_aspect</item>\n      <item>$change_cursor_status</item>\n      <item>$change_device</item>\n      <item>$change_from_object_template</item>\n      <item>$change_group_property</item>\n      <item>$change_layer</item>\n      <item>$change_net</item>\n      <item>$change_object_attributes</item>\n      <item>$change_object_template</item>\n      <item>$change_overflow</item>\n      <item>$change_overflow_by_handle</item>\n      <item>$change_path</item>\n      <item>$change_port</item>\n      <item>$change_property</item>\n      <item>$change_property_group_members</item>\n      <item>$change_property_group_selections</item>\n      <item>$change_property_text</item>\n      <item>$change_row</item>\n      <item>$change_text</item>\n      <item>$change_via_type</item>\n      <item>$change_window</item>\n      <item>$checkpoint_cell</item>\n      <item>$checkpoint_cell_by_name</item>\n      <item>$check_drc</item>\n      <item>$check_fn</item>\n      <item>$check_instances</item>\n      <item>$check_overflows</item>\n      <item>$check_polygons</item>\n      <item>$check_power_pins</item>\n      <item>$check_preconditions</item>\n      <item>$check_shorts_all</item>\n      <item>$check_shorts_selected</item>\n      <item>$clear_clipboard</item>\n      <item>$close_layout_library</item>\n      <item>$close_logic</item>\n      <item>$close_selection</item>\n      <item>$close_session</item>\n      <item>$close_window</item>\n      <item>$compact</item>\n      <item>$compose_groups</item>\n      <item>$compose_layer_geometries</item>\n      <item>$compose_layer_selections</item>\n      <item>$connect_instance</item>\n      <item>$convert_dracula</item>\n      <item>$copy</item>\n      <item>$copy_edit_hotkey_settings</item>\n      <item>$copy_relative</item>\n      <item>$copy_to_clipboard</item>\n      <item>$copy_to_fp_layer</item>\n      <item>$copy_to_layer</item>\n      <item>$create_cell</item>\n      <item>$create_def_from_layout_view</item>\n      <item>$create_layout_library</item>\n      <item>$create_layout_view</item>\n      <item>$create_layout_view_from_def</item>\n      <item>$create_layout_view_from_lef</item>\n      <item>$create_layout_view_from_verilog</item>\n      <item>$create_lef_from_layout_library</item>\n      <item>$create_lef_from_layout_view</item>\n      <item>$create_library</item>\n      <item>$create_process</item>\n      <item>$create_toolbar</item>\n      <item>$create_via_cell</item>\n      <item>$create_viewpoint</item>\n      <item>$cut</item>\n      <item>$cut_stretch</item>\n      <item>$deactivate</item>\n      <item>$define_hotkey</item>\n      <item>$define_layer_alias</item>\n      <item>$define_layer_name</item>\n      <item>$define_layer_set</item>\n      <item>$define_max_gate_width</item>\n      <item>$define_mos_site_type</item>\n      <item>$define_must_connect</item>\n      <item>$define_net_pair</item>\n      <item>$define_net_shield</item>\n      <item>$define_route_transform</item>\n      <item>$delete</item>\n      <item>$delete_area</item>\n      <item>$delete_connectivity</item>\n      <item>$delete_drc_all</item>\n      <item>$delete_drc_area</item>\n      <item>$delete_drc_check</item>\n      <item>$delete_drc_current</item>\n      <item>$delete_drc_point</item>\n      <item>$delete_drc_scan</item>\n      <item>$delete_from_library</item>\n      <item>$delete_group_property</item>\n      <item>$delete_lvs_results</item>\n      <item>$delete_panel</item>\n      <item>$delete_property</item>\n      <item>$delete_property_group_members</item>\n      <item>$delete_property_group_selections</item>\n      <item>$delete_routing</item>\n      <item>$delete_ruler</item>\n      <item>$delete_rulers_all</item>\n      <item>$detach_library</item>\n      <item>$display_channels</item>\n      <item>$does_cell_exist</item>\n      <item>$edit_library</item>\n      <item>$edit_process</item>\n      <item>$edit_process_override</item>\n      <item>$enable_edit_layout_library</item>\n      <item>$export_drc_check</item>\n      <item>$extract_cell_connectivity</item>\n      <item>$extract_direct_distributed_parameters</item>\n      <item>$extract_direct_lumped_parameters</item>\n      <item>$extract_mask_distributed_parameters</item>\n      <item>$extract_mask_lumped_parameters</item>\n      <item>$fillet</item>\n      <item>$fillet_area</item>\n      <item>$filter_group</item>\n      <item>$fit_fp_shape</item>\n      <item>$flatten</item>\n      <item>$flatten_hierarchy</item>\n      <item>$flip</item>\n      <item>$flip_in_place</item>\n      <item>$flip_on_axis</item>\n      <item>$form_ic_action_buttons_gadget</item>\n      <item>$form_ic_color_paint_chip_gadget</item>\n      <item>$form_ic_display_gadget</item>\n      <item>$form_ic_layer_palette_gadget</item>\n      <item>$form_ic_patterns_list_box_gadget</item>\n      <item>$form_single_check_box_gadget</item>\n      <item>$fracture</item>\n      <item>$freeze_window</item>\n      <item>$get_absolute_points</item>\n      <item>$get_acap_info</item>\n      <item>$get_active_ic_window</item>\n      <item>$get_active_net</item>\n      <item>$get_active_port</item>\n      <item>$get_arc</item>\n      <item>$get_area</item>\n      <item>$get_area_estimate</item>\n      <item>$get_array_value</item>\n      <item>$get_auto_checkpoint</item>\n      <item>$get_basepoint</item>\n      <item>$get_bottom_orient_set</item>\n      <item>$get_boundary</item>\n      <item>$get_cap_extent</item>\n      <item>$get_cap_neg_pin</item>\n      <item>$get_cap_pos_pin</item>\n      <item>$get_cell_boundary</item>\n      <item>$get_cell_configuration</item>\n      <item>$get_cell_equivalents</item>\n      <item>$get_cell_info</item>\n      <item>$get_cell_list_dts</item>\n      <item>$get_cell_path</item>\n      <item>$get_cell_refs</item>\n      <item>$get_cell_xrefs</item>\n      <item>$get_circle</item>\n      <item>$get_closed_polygon</item>\n      <item>$get_closest_object_location</item>\n      <item>$get_closest_object_points</item>\n      <item>$get_compact_add_blkgs</item>\n      <item>$get_compact_jog_power</item>\n      <item>$get_compose_layer_geometries</item>\n      <item>$get_compose_layer_selections</item>\n      <item>$get_connectivity_layers</item>\n      <item>$get_containment</item>\n      <item>$get_context_contrast</item>\n      <item>$get_context_from_world</item>\n      <item>$get_crosshair_target_radius</item>\n      <item>$get_crosshair_target_style</item>\n      <item>$get_def_bus_bit_characters</item>\n      <item>$get_def_bus_bit_characters</item>\n      <item>$get_def_divider_character</item>\n      <item>$get_def_divider_character</item>\n      <item>$get_def_non_orthogonal</item>\n      <item>$set_def_non_orthogonal</item>\n      <item>$get_design_layers</item>\n      <item>$get_design_path</item>\n      <item>$get_design_refs</item>\n      <item>$get_dev_info</item>\n      <item>$get_dev_layer</item>\n      <item>$get_dev_rule</item>\n      <item>$get_device_alias</item>\n      <item>$get_device_iobj</item>\n      <item>$get_device_name</item>\n      <item>$get_drc_check_current_count</item>\n      <item>$get_drc_check_original_count</item>\n      <item>$get_drc_check_polygon_count</item>\n      <item>$get_drc_check_scan_count</item>\n      <item>$get_drc_current_result_check_name</item>\n      <item>$get_drc_current_result_number</item>\n      <item>$get_drc_current_result_points</item>\n      <item>$get_drc_current_result_type</item>\n      <item>$get_drc_default_layer_directory_name</item>\n      <item>$get_drc_default_summary_report_file_name</item>\n      <item>$get_drc_results_database_check_count</item>\n      <item>$get_drc_results_database_check_names</item>\n      <item>$get_drc_results_database_nonempty_check_names</item>\n      <item>$get_drc_results_database_result_count</item>\n      <item>$get_drc_results_database_scan_check_names</item>\n      <item>$get_drc_results_database_scan_result_count</item>\n      <item>$get_endangered_nets</item>\n      <item>$get_externals_info</item>\n      <item>$get_fp_compute_num_rows</item>\n      <item>$get_fp_compute_route_area_ratio</item>\n      <item>$get_fp_extend_row</item>\n      <item>$get_fractured_rectangles</item>\n      <item>$get_gadget_value</item>\n      <item>$get_graphic_preempt_list</item>\n      <item>$get_group_members</item>\n      <item>$get_group_names</item>\n      <item>$get_group_property_names</item>\n      <item>$get_highlight_count</item>\n      <item>$get_hotkey_settings</item>\n      <item>$get_ic_cell_windows</item>\n      <item>$get_ic_location</item>\n      <item>$get_ic_window_names</item>\n      <item>$get_instance_extent</item>\n      <item>$get_instance_fp_extent</item>\n      <item>$get_instance_version</item>\n      <item>$get_internal_row_layout</item>\n      <item>$get_internal_row_sequence</item>\n      <item>$get_layer_info</item>\n      <item>$get_layer_minimum_spacing</item>\n      <item>$get_layer_minimum_width</item>\n      <item>$get_layer_names</item>\n      <item>$get_layer_number</item>\n      <item>$get_layer_palette_height</item>\n      <item>$get_layers</item>\n      <item>$get_layout_counterpart</item>\n      <item>$get_layout_window</item>\n      <item>$get_lef_bus_bit_characters</item>\n      <item>$get_lef_bus_bit_characters</item>\n      <item>$get_lef_divider_character</item>\n      <item>$get_lef_divider_character</item>\n      <item>$get_lef_non_orthogonal</item>\n      <item>$set_lef_non_orthogonal</item>\n      <item>$get_lef_overlap_boundary</item>\n      <item>$set_lef_overlap_boundary</item>\n      <item>$get_left_orient_set</item>\n      <item>$get_library_cells</item>\n      <item>$get_licenses</item>\n      <item>$get_loaded_logic</item>\n      <item>$get_logic_counterpart</item>\n      <item>$get_mark</item>\n      <item>$get_mask_device_count</item>\n      <item>$get_mask_discrepancy_count</item>\n      <item>$get_mask_net_count</item>\n      <item>$get_mos_gate_pin</item>\n      <item>$get_mos_sd_extent</item>\n      <item>$get_mos_sd_pin</item>\n      <item>$get_nearest_edge</item>\n      <item>$get_net_members</item>\n      <item>$get_new_object_handles</item>\n      <item>$get_object_extent</item>\n      <item>$get_object_info</item>\n      <item>$get_outdated_cells</item>\n      <item>$get_outline</item>\n      <item>$get_panel_extent</item>\n      <item>$get_panel_names</item>\n      <item>$get_parameter_default</item>\n      <item>$get_peek_protected</item>\n      <item>$get_perimeter</item>\n      <item>$get_pid</item>\n      <item>$get_pin_members</item>\n      <item>$get_pins</item>\n      <item>$get_points</item>\n      <item>$get_port_members</item>\n      <item>$get_process</item>\n      <item>$get_process_override</item>\n      <item>$get_property_handles</item>\n      <item>$get_property_names</item>\n      <item>$get_property_value</item>\n      <item>$get_report_obj_types</item>\n      <item>$get_report_options</item>\n      <item>$get_res_extent</item>\n      <item>$get_res_neg_pin</item>\n      <item>$get_res_pos_pin</item>\n      <item>$get_reserved</item>\n      <item>$get_right_orient_set</item>\n      <item>$get_rotation_point</item>\n      <item>$get_router_add_blkgs</item>\n      <item>$get_router_align_cells</item>\n      <item>$get_router_align_mode</item>\n      <item>$get_router_block_feed_percent</item>\n      <item>$get_router_block_stub_mode</item>\n      <item>$get_router_cell_feed_percent</item>\n      <item>$get_router_channel_ocr</item>\n      <item>$get_router_connect_blk_pwr</item>\n      <item>$get_router_constrain_power</item>\n      <item>$get_router_create_power_grid</item>\n      <item>$get_router_limit_area</item>\n      <item>$get_router_overflow_mode</item>\n      <item>$get_router_pre_route</item>\n      <item>$get_router_preserve_power_width</item>\n      <item>$get_router_probe_extent_margin</item>\n      <item>$get_router_x_margin</item>\n      <item>$get_router_y_margin</item>\n      <item>$get_row_members</item>\n      <item>$get_rule_file_check_count</item>\n      <item>$get_rule_file_check_names</item>\n      <item>$get_rule_file_select_check_count</item>\n      <item>$get_rule_file_select_check_names</item>\n      <item>$get_select_area</item>\n      <item>$get_select_cell</item>\n      <item>$get_select_count</item>\n      <item>$get_select_extent</item>\n      <item>$get_select_set</item>\n      <item>$get_selectable_layers</item>\n      <item>$get_selected_edges</item>\n      <item>$get_short_segment</item>\n      <item>$get_snapped_points</item>\n      <item>$get_status_line_info</item>\n      <item>$get_top_orient_set</item>\n      <item>$get_traced_properties_numeric</item>\n      <item>$get_traced_properties_string</item>\n      <item>$get_visible_layers</item>\n      <item>$get_window_cell</item>\n      <item>$get_window_info</item>\n      <item>$get_world_from_context</item>\n      <item>$get_world_from_screen</item>\n      <item>$group</item>\n      <item>$group_by_name</item>\n      <item>$group_by_property</item>\n      <item>$group_on_selected</item>\n      <item>$group_text</item>\n      <item>$hide_layer_palette</item>\n      <item>$hide_status_line</item>\n      <item>$hide_system_toolbar</item>\n      <item>$hide_toolbar</item>\n      <item>$hide_tooltips</item>\n      <item>$highlight_all</item>\n      <item>$highlight_all_discrepancies</item>\n      <item>$highlight_all_incorrect</item>\n      <item>$highlight_all_unmatched</item>\n      <item>$highlight_by_location</item>\n      <item>$highlight_by_name</item>\n      <item>$highlight_by_property</item>\n      <item>$highlight_current_discrepancy</item>\n      <item>$highlight_discrepancy</item>\n      <item>$highlight_first_discrepancy</item>\n      <item>$highlight_group</item>\n      <item>$highlight_hierarchical_net</item>\n      <item>$highlight_next_discrepancy</item>\n      <item>$highlight_on_selected</item>\n      <item>$highlight_previous_discrepancy</item>\n      <item>$highlight_protected</item>\n      <item>$hotplot</item>\n      <item>$hotplot_invoke</item>\n      <item>$insert_posts</item>\n      <item>$iroute</item>\n      <item>$is_cell_outdated</item>\n      <item>$is_cell_reserved</item>\n      <item>$is_cell_salvage_pending</item>\n      <item>$is_edge_selected</item>\n      <item>$is_history_active</item>\n      <item>$is_layer_palette_visible</item>\n      <item>$is_library_reserved</item>\n      <item>$is_licensed</item>\n      <item>$is_process_reserved</item>\n      <item>$is_select_set_closed</item>\n      <item>$is_status_line_visible</item>\n      <item>$is_toolbar_visible</item>\n      <item>$link_floorplan_shape</item>\n      <item>$list_drc_all</item>\n      <item>$list_drc_check</item>\n      <item>$list_drc_selected</item>\n      <item>$load_design_hierarchy</item>\n      <item>$load_hotkey_settings</item>\n      <item>$load_logic</item>\n      <item>$load_mask_results</item>\n      <item>$load_process</item>\n      <item>$load_rules</item>\n      <item>$loc</item>\n      <item>$lvs_direct</item>\n      <item>$lvs_mask</item>\n      <item>$make_array</item>\n      <item>$make_cell</item>\n      <item>$make_font</item>\n      <item>$make_keypad_panels</item>\n      <item>$make_net</item>\n      <item>$make_port</item>\n      <item>$mark_instances_as_ignored</item>\n      <item>$measure_distance</item>\n      <item>$merge</item>\n      <item>$mgc_scope_name_pre_init</item>\n      <item>$minimize_levels</item>\n      <item>$minimize_vias</item>\n      <item>$modify_centerline</item>\n      <item>$move</item>\n      <item>$move_acap</item>\n      <item>$move_cursor_down</item>\n      <item>$move_cursor_left</item>\n      <item>$move_cursor_right</item>\n      <item>$move_cursor_up</item>\n      <item>$move_in_row</item>\n      <item>$move_on_row</item>\n      <item>$move_relative</item>\n      <item>$msg_cell_route_hierarchy_mode</item>\n      <item>$notch</item>\n      <item>$notch_special</item>\n      <item>$open_cell</item>\n      <item>$open_cell_map</item>\n      <item>$open_clipboard</item>\n      <item>$open_context_cell</item>\n      <item>$open_group_window</item>\n      <item>$open_hierarchy_window</item>\n      <item>$open_layout_library</item>\n      <item>$open_layout_view</item>\n      <item>$open_logic</item>\n      <item>$open_logic_by_name</item>\n      <item>$open_mask_logic</item>\n      <item>$open_selected_cell</item>\n      <item>$partition_hierarchy</item>\n      <item>$paste</item>\n      <item>$peek</item>\n      <item>$peek_area</item>\n      <item>$place</item>\n      <item>$place_on_row</item>\n      <item>$place_schematic_instances</item>\n      <item>$place_schematic_ports</item>\n      <item>$polygon_to_path</item>\n      <item>$print_cell</item>\n      <item>$prompt_for_ic_line</item>\n      <item>$prompt_for_ic_location</item>\n      <item>$prompt_for_ic_polygon</item>\n      <item>$prompt_for_ic_polyline</item>\n      <item>$prompt_for_ic_rectangle</item>\n      <item>$prompt_for_ic_route</item>\n      <item>$protect</item>\n      <item>$protect_group</item>\n      <item>$protect_nets</item>\n      <item>$read_def</item>\n      <item>$read_gdsii</item>\n      <item>$read_lef</item>\n      <item>$read_spice</item>\n      <item>$read_verilog</item>\n      <item>$read_xml</item>\n      <item>$redo</item>\n      <item>$redraw</item>\n      <item>$redraw_area</item>\n      <item>$regenerate_device</item>\n      <item>$release_license</item>\n      <item>$reload_cell</item>\n      <item>$reload_cell_by_name</item>\n      <item>$remove_contacts_by_area</item>\n      <item>$remove_contacts_by_m2</item>\n      <item>$remove_contacts_by_via</item>\n      <item>$remove_from_net</item>\n      <item>$remove_from_port</item>\n      <item>$remove_metal_by_area</item>\n      <item>$reopen_selection</item>\n      <item>$repeat_fn</item>\n      <item>$repeat_objects</item>\n      <item>$replace_cell</item>\n      <item>$replace_toolbar</item>\n      <item>$report_active_context</item>\n      <item>$report_all_mask_devices</item>\n      <item>$report_all_mask_nets</item>\n      <item>$report_capacitor_type</item>\n      <item>$report_cell</item>\n      <item>$report_cell_list_dts</item>\n      <item>$report_current_direct_net</item>\n      <item>$report_current_discrepancy</item>\n      <item>$report_current_mask_device</item>\n      <item>$report_current_mask_discrepancy</item>\n      <item>$report_current_mask_net</item>\n      <item>$report_design_layers</item>\n      <item>$report_design_tree</item>\n      <item>$report_design_xref</item>\n      <item>$report_direct_thresholds</item>\n      <item>$report_drc_all</item>\n      <item>$report_drc_area</item>\n      <item>$report_drc_check</item>\n      <item>$report_drc_current</item>\n      <item>$report_drc_point</item>\n      <item>$report_drc_scan</item>\n      <item>$report_eco_results</item>\n      <item>$report_gb_type</item>\n      <item>$report_group</item>\n      <item>$report_group_names</item>\n      <item>$report_hotkey_settings</item>\n      <item>$report_layer_attributes</item>\n      <item>$report_layer_sets</item>\n      <item>$report_library</item>\n      <item>$report_licenses</item>\n      <item>$report_logic</item>\n      <item>$report_lvs_results</item>\n      <item>$report_mask_results</item>\n      <item>$report_mask_thresholds</item>\n      <item>$report_mos_type</item>\n      <item>$report_net_parameters</item>\n      <item>$report_nets</item>\n      <item>$report_outdated_cells</item>\n      <item>$report_panels</item>\n      <item>$report_paired_nets</item>\n      <item>$report_peek_protected</item>\n      <item>$report_place_route</item>\n      <item>$report_ports</item>\n      <item>$report_process</item>\n      <item>$report_property_names</item>\n      <item>$report_reserved</item>\n      <item>$report_resistor_type</item>\n      <item>$report_row_capacity</item>\n      <item>$report_scoring</item>\n      <item>$report_selected</item>\n      <item>$report_shown_mask_devices</item>\n      <item>$report_shown_mask_discrepancies</item>\n      <item>$report_shown_mask_nets</item>\n      <item>$report_text_file</item>\n      <item>$report_via_type</item>\n      <item>$report_windows</item>\n      <item>$reselect</item>\n      <item>$reserve_cell</item>\n      <item>$reserve_cell_by_name</item>\n      <item>$reserve_library</item>\n      <item>$reserve_process</item>\n      <item>$reset_basepoint</item>\n      <item>$reset_licensing</item>\n      <item>$resize</item>\n      <item>$restore_defaults</item>\n      <item>$restore_drc_results</item>\n      <item>$restructure_nets</item>\n      <item>$resync_cell</item>\n      <item>$resync_cell_by_name</item>\n      <item>$resync_library</item>\n      <item>$resync_viewpoint</item>\n      <item>$rotate</item>\n      <item>$route_point_to_point</item>\n      <item>$rule_file_loaded</item>\n      <item>$run_eco</item>\n      <item>$salvage_cell</item>\n      <item>$salvage_reference</item>\n      <item>$save_cell</item>\n      <item>$save_cell_as</item>\n      <item>$save_cell_by_name</item>\n      <item>$save_drc_results</item>\n      <item>$save_layout_library</item>\n      <item>$save_library</item>\n      <item>$save_process</item>\n      <item>$save_process_by_name</item>\n      <item>$save_setup</item>\n      <item>$scale_cells</item>\n      <item>$scale_context</item>\n      <item>$scan_drc_all</item>\n      <item>$scan_drc_check</item>\n      <item>$sdl_cleanup</item>\n      <item>$sdl_create_cell</item>\n      <item>$select_all</item>\n      <item>$select_area</item>\n      <item>$select_area_polygon</item>\n      <item>$select_by_name</item>\n      <item>$select_by_property</item>\n      <item>$select_drc_all</item>\n      <item>$select_drc_check</item>\n      <item>$select_edge</item>\n      <item>$select_fixed_routes</item>\n      <item>$select_folds</item>\n      <item>$select_group</item>\n      <item>$select_highlighted</item>\n      <item>$select_ignored_instances</item>\n      <item>$select_on_selected</item>\n      <item>$select_one</item>\n      <item>$select_range</item>\n      <item>$select_text</item>\n      <item>$select_unplaced_schematic_instances</item>\n      <item>$select_unplaced_schematic_ports</item>\n      <item>$send_to_prompt</item>\n      <item>$set_active_port_style</item>\n      <item>$get_active_port_style</item>\n      <item>$set_active_ruler_layer</item>\n      <item>$get_active_ruler_layer</item>\n      <item>$set_add_route_alignment</item>\n      <item>$get_add_route_alignment</item>\n      <item>$set_add_route_checking</item>\n      <item>$get_add_route_checking</item>\n      <item>$set_add_route_padding</item>\n      <item>$get_add_route_padding</item>\n      <item>$set_angle_mode</item>\n      <item>$set_angle_mode_enforcement</item>\n      <item>$get_angle_mode_enforcement</item>\n      <item>$set_anneal_cooling_factor</item>\n      <item>$get_anneal_cooling_factor</item>\n      <item>$set_arc_segments</item>\n      <item>$get_arc_segments</item>\n      <item>$set_array_display_style</item>\n      <item>$get_array_display_style</item>\n      <item>$set_auto_focus_active_window</item>\n      <item>$get_auto_focus_active_window</item>\n      <item>$set_auto_outline_mode</item>\n      <item>$get_auto_outline_mode</item>\n      <item>$set_auto_restructure</item>\n      <item>$get_auto_restructure</item>\n      <item>$set_autonotch</item>\n      <item>$get_autonotch</item>\n      <item>$set_autoselect</item>\n      <item>$get_autoselect</item>\n      <item>$set_basepoint</item>\n      <item>$set_cell_configuration</item>\n      <item>$set_cell_logical_name</item>\n      <item>$set_cell_origin</item>\n      <item>$set_cell_process</item>\n      <item>$set_cell_route_hierarchy_mode</item>\n      <item>$set_cell_type</item>\n      <item>$set_check_drc_message_mode</item>\n      <item>$set_circle_input_style</item>\n      <item>$get_circle_input_style</item>\n      <item>$set_click_distance</item>\n      <item>$get_click_distance</item>\n      <item>$set_compact_center_wires</item>\n      <item>$get_compact_center_wires</item>\n      <item>$set_compact_corner_spacing</item>\n      <item>$get_compact_corner_spacing</item>\n      <item>$set_compact_cost_factor</item>\n      <item>$get_compact_cost_factor</item>\n      <item>$set_compact_ext_cells</item>\n      <item>$get_compact_ext_cells</item>\n      <item>$set_compact_ext_rows</item>\n      <item>$get_compact_ext_rows</item>\n      <item>$set_compact_jogs</item>\n      <item>$get_compact_jogs</item>\n      <item>$set_compact_offset_vias</item>\n      <item>$get_compact_offset_vias</item>\n      <item>$set_compact_path_mini</item>\n      <item>$get_compact_path_mini</item>\n      <item>$set_compact_route_levels</item>\n      <item>$get_compact_route_levels</item>\n      <item>$set_compact_suppress_output</item>\n      <item>$get_compact_suppress_output</item>\n      <item>$set_compact_to</item>\n      <item>$get_compact_to</item>\n      <item>$set_compact_wires_mode</item>\n      <item>$get_compact_wires_mode</item>\n      <item>$set_contact_count</item>\n      <item>$set_context</item>\n      <item>$set_context_up</item>\n      <item>$set_copy_ports_on_copy</item>\n      <item>$get_copy_ports_on_copy</item>\n      <item>$set_cross_probe</item>\n      <item>$get_cross_probe</item>\n      <item>$set_cross_probe_mode</item>\n      <item>$set_crosshair_style</item>\n      <item>$get_crosshair_style</item>\n      <item>$set_crosshair_target</item>\n      <item>$set_crosshair_target_radius</item>\n      <item>$set_cull</item>\n      <item>$set_def_bus_bit_characters</item>\n      <item>$set_def_divider_character</item>\n      <item>$set_def_non_orthogonal</item>\n      <item>$set_direct_thresholds</item>\n      <item>$set_display_window_title</item>\n      <item>$get_display_window_title</item>\n      <item>$set_drag_complexity</item>\n      <item>$get_drag_complexity</item>\n      <item>$set_drag_ruler_mode</item>\n      <item>$get_drag_ruler_mode</item>\n      <item>$set_drc_check</item>\n      <item>$set_drc_first</item>\n      <item>$set_drc_fit_factor</item>\n      <item>$set_drc_jump</item>\n      <item>$set_drc_last</item>\n      <item>$set_drc_next</item>\n      <item>$set_drc_previous</item>\n      <item>$set_drc_result</item>\n      <item>$set_drc_skip</item>\n      <item>$set_duplicate_ports_policy</item>\n      <item>$set_dynamic_drc</item>\n      <item>$get_dynamic_drc</item>\n      <item>$set_dynamic_drc_complexity</item>\n      <item>$get_dynamic_drc_complexity</item>\n      <item>$set_dynamic_hotkey_mode</item>\n      <item>$get_dynamic_hotkey_mode</item>\n      <item>$set_dynamic_loading</item>\n      <item>$get_dynamic_loading</item>\n      <item>$set_dynamic_message_mode</item>\n      <item>$get_dynamic_message_mode</item>\n      <item>$set_dynamic_pre_locations</item>\n      <item>$set_error_handling</item>\n      <item>$get_error_handling</item>\n      <item>$set_fill_display</item>\n      <item>$get_fill_display</item>\n      <item>$set_filled_layers</item>\n      <item>$get_filled_layers</item>\n      <item>$set_first_direct_net</item>\n      <item>$set_first_mask_device</item>\n      <item>$set_first_mask_discrepancy</item>\n      <item>$set_first_mask_net</item>\n      <item>$set_fp_bottom_gap</item>\n      <item>$get_fp_bottom_gap</item>\n      <item>$set_fp_left_gap</item>\n      <item>$get_fp_left_gap</item>\n      <item>$set_fp_lower_aspect</item>\n      <item>$get_fp_lower_aspect</item>\n      <item>$set_fp_max_height</item>\n      <item>$get_fp_max_height</item>\n      <item>$set_fp_max_width</item>\n      <item>$get_fp_max_width</item>\n      <item>$set_fp_num_rows</item>\n      <item>$get_fp_num_rows</item>\n      <item>$set_fp_right_gap</item>\n      <item>$get_fp_right_gap</item>\n      <item>$set_fp_route_area_ratio</item>\n      <item>$get_fp_route_area_ratio</item>\n      <item>$set_fp_top_gap</item>\n      <item>$get_fp_top_gap</item>\n      <item>$set_fp_upper_aspect</item>\n      <item>$get_fp_upper_aspect</item>\n      <item>$set_fractured_route</item>\n      <item>$get_fractured_route</item>\n      <item>$set_gadget_value</item>\n      <item>$set_gate_size</item>\n      <item>$set_gds_allanglefracture</item>\n      <item>$get_gds_allanglefracture</item>\n      <item>$set_gds_anglemode</item>\n      <item>$get_gds_anglemode</item>\n      <item>$set_gds_auto_identify_vias</item>\n      <item>$get_gds_auto_identify_vias</item>\n      <item>$set_gds_cellnamecase</item>\n      <item>$get_gds_cellnamecase</item>\n      <item>$set_gds_cellnamelength</item>\n      <item>$get_gds_cellnamelength</item>\n      <item>$set_gds_cellnamemap</item>\n      <item>$get_gds_cellnamemap</item>\n      <item>$set_gds_fixpolygons</item>\n      <item>$get_gds_fixpolygons</item>\n      <item>$set_gds_layerfilter</item>\n      <item>$get_gds_layerfilter</item>\n      <item>$set_gds_layermap</item>\n      <item>$get_gds_layermap</item>\n      <item>$set_gds_library</item>\n      <item>$get_gds_library</item>\n      <item>$set_gds_lockcells</item>\n      <item>$get_gds_lockcells</item>\n      <item>$set_gds_logfile</item>\n      <item>$get_gds_logfile</item>\n      <item>$set_gds_process</item>\n      <item>$get_gds_process</item>\n      <item>$set_gds_properties</item>\n      <item>$get_gds_properties</item>\n      <item>$set_gds_read_scale</item>\n      <item>$get_gds_read_scale</item>\n      <item>$set_gds_replace</item>\n      <item>$get_gds_replace</item>\n      <item>$set_gds_save_cells</item>\n      <item>$get_gds_save_cells</item>\n      <item>$set_gds_skipunmapped</item>\n      <item>$get_gds_skipunmapped</item>\n      <item>$set_gds_textheightmap</item>\n      <item>$get_gds_textheightmap</item>\n      <item>$set_gds_transcript</item>\n      <item>$get_gds_transcript</item>\n      <item>$set_graphic_interrupt</item>\n      <item>$get_graphic_interrupt</item>\n      <item>$set_gravity_distance</item>\n      <item>$get_gravity_distance</item>\n      <item>$set_grid</item>\n      <item>$set_guideline_net_size</item>\n      <item>$get_guideline_net_size</item>\n      <item>$set_guideline_width_limit</item>\n      <item>$get_guideline_width_limit</item>\n      <item>$set_hocr</item>\n      <item>$get_hocr</item>\n      <item>$set_hotkey_mode</item>\n      <item>$get_hotkey_mode</item>\n      <item>$set_ic_array_columns</item>\n      <item>$get_ic_array_columns</item>\n      <item>$set_ic_array_rows</item>\n      <item>$get_ic_array_rows</item>\n      <item>$set_ic_aspect</item>\n      <item>$get_ic_aspect</item>\n      <item>$set_ic_cell_flip</item>\n      <item>$get_ic_cell_flip</item>\n      <item>$set_ic_cell_orientation</item>\n      <item>$get_ic_cell_orientation</item>\n      <item>$set_ic_cell_rotation</item>\n      <item>$get_ic_cell_rotation</item>\n      <item>$set_ic_cell_scale</item>\n      <item>$get_ic_cell_scale</item>\n      <item>$set_ic_layer</item>\n      <item>$get_ic_layer</item>\n      <item>$set_ic_path_end_style</item>\n      <item>$get_ic_path_end_style</item>\n      <item>$set_ic_path_old_style</item>\n      <item>$get_ic_path_old_style</item>\n      <item>$set_ic_path_padding</item>\n      <item>$get_ic_path_padding</item>\n      <item>$set_ic_path_style</item>\n      <item>$get_ic_path_style</item>\n      <item>$set_ic_path_width</item>\n      <item>$get_ic_path_width</item>\n      <item>$set_ic_property_owner</item>\n      <item>$get_ic_property_owner</item>\n      <item>$set_ic_property_replace</item>\n      <item>$get_ic_property_replace</item>\n      <item>$set_ic_property_text_height</item>\n      <item>$get_ic_property_text_height</item>\n      <item>$set_ic_property_text_horz_just</item>\n      <item>$get_ic_property_text_horz_just</item>\n      <item>$set_ic_property_text_orientation</item>\n      <item>$get_ic_property_text_orientation</item>\n      <item>$set_ic_property_text_vert_just</item>\n      <item>$get_ic_property_text_vert_just</item>\n      <item>$set_ic_row_auto_resize</item>\n      <item>$get_ic_row_auto_resize</item>\n      <item>$set_ic_row_justification</item>\n      <item>$get_ic_row_justification</item>\n      <item>$set_ic_row_site</item>\n      <item>$get_ic_row_site</item>\n      <item>$set_ic_row_slideable</item>\n      <item>$get_ic_row_slideable</item>\n      <item>$set_instance_extent_display</item>\n      <item>$get_instance_extent_display</item>\n      <item>$set_instance_name_display</item>\n      <item>$get_instance_name_display</item>\n      <item>$set_instance_origin_display</item>\n      <item>$get_instance_origin_display</item>\n      <item>$set_instance_route_hierarchy_mode</item>\n      <item>$set_iobj_points</item>\n      <item>$set_iroute_accept_at_current_loc</item>\n      <item>$set_iroute_auto_shield</item>\n      <item>$set_iroute_checking</item>\n      <item>$set_iroute_push_mode</item>\n      <item>$set_iroute_route_transforms</item>\n      <item>$set_iroute_select_with_active_layer</item>\n      <item>$set_iroute_show_alignment</item>\n      <item>$set_iroute_show_ortho_path</item>\n      <item>$set_iroute_via_generator_is_default</item>\n      <item>$set_iroute_width_change</item>\n      <item>$set_join_on_move</item>\n      <item>$get_join_on_move</item>\n      <item>$set_layer_appearance</item>\n      <item>$set_layer_palette_height</item>\n      <item>$get_layer_palette_height</item>\n      <item>$set_layer_path_width</item>\n      <item>$set_lef_bus_bit_characters</item>\n      <item>$get_lef_bus_bit_characters</item>\n      <item>$set_lef_divider_character</item>\n      <item>$get_lef_divider_character</item>\n      <item>$set_lef_non_orthogonal</item>\n      <item>$get_lef_non_orthogonal</item>\n      <item>$set_lef_overlap_boundary</item>\n      <item>$get_lef_overlap_boundary</item>\n      <item>$set_library_cell_type</item>\n      <item>$set_library_site_types</item>\n      <item>$set_location_mode</item>\n      <item>$get_location_mode</item>\n      <item>$set_logic_source</item>\n      <item>$set_logical_correspondence</item>\n      <item>$set_lvs_all_capacitor_pins_swappable</item>\n      <item>$get_lvs_all_capacitor_pins_swappable</item>\n      <item>$set_lvs_component_subtype_property</item>\n      <item>$get_lvs_component_subtype_property</item>\n      <item>$set_lvs_component_type_properties</item>\n      <item>$get_lvs_component_type_properties</item>\n      <item>$set_lvs_default_direct_source_subname</item>\n      <item>$get_lvs_default_direct_source_subname</item>\n      <item>$set_lvs_default_mask_source_subname</item>\n      <item>$get_lvs_default_mask_source_subname</item>\n      <item>$set_lvs_default_report_name</item>\n      <item>$get_lvs_default_report_name</item>\n      <item>$set_lvs_filter_unused_bipolar_transistors</item>\n      <item>$get_lvs_filter_unused_bipolar_transistors</item>\n      <item>$set_lvs_filter_unused_mos_transistors</item>\n      <item>$get_lvs_filter_unused_mos_transistors</item>\n      <item>$set_lvs_ground_names</item>\n      <item>$get_lvs_ground_names</item>\n      <item>$set_lvs_ignore_ports</item>\n      <item>$get_lvs_ignore_ports</item>\n      <item>$set_lvs_pin_name_properties</item>\n      <item>$get_lvs_pin_name_properties</item>\n      <item>$set_lvs_power_names</item>\n      <item>$get_lvs_power_names</item>\n      <item>$set_lvs_recognize_gates</item>\n      <item>$get_lvs_recognize_gates</item>\n      <item>$set_lvs_recognize_only_simple_gates</item>\n      <item>$get_lvs_recognize_only_simple_gates</item>\n      <item>$set_lvs_reduce_parallel_bipolar_transistors</item>\n      <item>$get_lvs_reduce_parallel_bipolar_transistors</item>\n      <item>$set_lvs_reduce_parallel_capacitors</item>\n      <item>$get_lvs_reduce_parallel_capacitors</item>\n      <item>$set_lvs_reduce_parallel_diodes</item>\n      <item>$get_lvs_reduce_parallel_diodes</item>\n      <item>$set_lvs_reduce_parallel_mos_transistors</item>\n      <item>$get_lvs_reduce_parallel_mos_transistors</item>\n      <item>$set_lvs_reduce_parallel_resistors</item>\n      <item>$get_lvs_reduce_parallel_resistors</item>\n      <item>$set_lvs_reduce_series_capacitors</item>\n      <item>$get_lvs_reduce_series_capacitors</item>\n      <item>$set_lvs_reduce_series_resistors</item>\n      <item>$get_lvs_reduce_series_resistors</item>\n      <item>$set_lvs_reduce_split_gates</item>\n      <item>$get_lvs_reduce_split_gates</item>\n      <item>$set_lvs_report_list_limit</item>\n      <item>$get_lvs_report_list_limit</item>\n      <item>$set_lvs_write_instance_cross_reference</item>\n      <item>$get_lvs_write_instance_cross_reference</item>\n      <item>$set_lvs_write_net_cross_reference</item>\n      <item>$get_lvs_write_net_cross_reference</item>\n      <item>$set_mark</item>\n      <item>$set_mask_auto_view</item>\n      <item>$set_mask_default_database_name</item>\n      <item>$get_mask_default_database_name</item>\n      <item>$set_mask_thresholds</item>\n      <item>$get_mask_thresholds</item>\n      <item>$set_max_auto_display</item>\n      <item>$get_max_auto_display</item>\n      <item>$set_modify_distance</item>\n      <item>$get_modify_distance</item>\n      <item>$set_mos_cell_type</item>\n      <item>$get_mos_cell_type</item>\n      <item>$set_mos_share</item>\n      <item>$get_mos_share</item>\n      <item>$set_net_priority</item>\n      <item>$set_new_window_cull</item>\n      <item>$get_new_window_cull</item>\n      <item>$set_new_window_grid</item>\n      <item>$get_new_window_grid</item>\n      <item>$set_next_direct_net</item>\n      <item>$set_next_mask_device</item>\n      <item>$set_next_mask_discrepancy</item>\n      <item>$set_next_mask_net</item>\n      <item>$set_packed_vias</item>\n      <item>$set_padding_grid</item>\n      <item>$set_path_display_style</item>\n      <item>$get_path_display_style</item>\n      <item>$set_peek_on_view</item>\n      <item>$get_peek_on_view</item>\n      <item>$set_peek_protect</item>\n      <item>$set_pex_backannotation_distributed</item>\n      <item>$get_pex_backannotation_distributed</item>\n      <item>$set_pex_backannotation_lumped</item>\n      <item>$get_pex_backannotation_lumped</item>\n      <item>$set_pex_capacitance_scale</item>\n      <item>$get_pex_capacitance_scale</item>\n      <item>$set_pex_coupled_distributed</item>\n      <item>$get_pex_coupled_distributed</item>\n      <item>$set_pex_delay</item>\n      <item>$get_pex_delay</item>\n      <item>$set_pex_exclude_distributed</item>\n      <item>$get_pex_exclude_distributed</item>\n      <item>$set_pex_include_distributed</item>\n      <item>$get_pex_include_distributed</item>\n      <item>$set_pex_netlist_distributed</item>\n      <item>$get_pex_netlist_distributed</item>\n      <item>$set_pex_netlist_lumped</item>\n      <item>$get_pex_netlist_lumped</item>\n      <item>$set_pex_netlist_simple</item>\n      <item>$get_pex_netlist_simple</item>\n      <item>$set_pex_options_lumped</item>\n      <item>$get_pex_options_lumped</item>\n      <item>$set_pex_report_distributed</item>\n      <item>$get_pex_report_distributed</item>\n      <item>$set_pex_report_lumped</item>\n      <item>$get_pex_report_lumped</item>\n      <item>$set_pin_shape_editing</item>\n      <item>$set_placement_select_mode</item>\n      <item>$get_placement_select_mode</item>\n      <item>$set_point_select_mode</item>\n      <item>$get_point_select_mode</item>\n      <item>$set_point_select_reset_basepoint</item>\n      <item>$get_point_select_reset_basepoint</item>\n      <item>$set_port_pin_name_display</item>\n      <item>$get_port_pin_name_display</item>\n      <item>$set_preferred_overflow_layers</item>\n      <item>$get_preferred_overflow_layers</item>\n      <item>$set_previous_direct_net</item>\n      <item>$set_previous_mask_device</item>\n      <item>$set_previous_mask_discrepancy</item>\n      <item>$set_previous_mask_net</item>\n      <item>$set_print_appearance</item>\n      <item>$set_print_array_style</item>\n      <item>$get_print_array_style</item>\n      <item>$set_print_cull</item>\n      <item>$get_print_cull</item>\n      <item>$set_print_grid</item>\n      <item>$get_print_grid</item>\n      <item>$set_print_layers</item>\n      <item>$get_print_layers</item>\n      <item>$set_print_levels</item>\n      <item>$get_print_levels</item>\n      <item>$set_print_peeked_only</item>\n      <item>$get_print_peeked_only</item>\n      <item>$set_process_override</item>\n      <item>$set_push_count_limit</item>\n      <item>$set_query_on_merge</item>\n      <item>$get_query_on_merge</item>\n      <item>$set_query_on_placement</item>\n      <item>$get_query_on_placement</item>\n      <item>$set_redraw_controls</item>\n      <item>$get_redraw_controls</item>\n      <item>$set_redraw_level</item>\n      <item>$get_redraw_level</item>\n      <item>$set_redraw_precision</item>\n      <item>$get_redraw_precision</item>\n      <item>$set_redraw_queue_control</item>\n      <item>$get_redraw_queue_control</item>\n      <item>$set_report_target</item>\n      <item>$get_report_target</item>\n      <item>$set_restrict_visible</item>\n      <item>$get_restrict_visible</item>\n      <item>$set_resync_on_peek</item>\n      <item>$get_resync_on_peek</item>\n      <item>$set_route_center_wires</item>\n      <item>$get_route_center_wires</item>\n      <item>$set_route_hierarchy_mode</item>\n      <item>$set_route_net_order</item>\n      <item>$get_route_net_order</item>\n      <item>$set_route_objects</item>\n      <item>$get_route_objects</item>\n      <item>$set_route_one_pass</item>\n      <item>$get_route_one_pass</item>\n      <item>$set_route_overflow_order</item>\n      <item>$get_route_overflow_order</item>\n      <item>$set_route_pack_wires</item>\n      <item>$get_route_pack_wires</item>\n      <item>$set_route_protection</item>\n      <item>$set_route_same_net_checking</item>\n      <item>$get_route_same_net_checking</item>\n      <item>$set_route_stub_direction</item>\n      <item>$get_route_stub_direction</item>\n      <item>$set_route_trim_nets</item>\n      <item>$get_route_trim_nets</item>\n      <item>$set_route_via_rotation</item>\n      <item>$get_route_via_rotation</item>\n      <item>$set_router_channel_size_variation</item>\n      <item>$get_router_channel_size_variation</item>\n      <item>$set_router_cleanup</item>\n      <item>$get_router_cleanup</item>\n      <item>$set_router_compound_path</item>\n      <item>$get_router_compound_path</item>\n      <item>$set_router_conn_order</item>\n      <item>$get_router_conn_order</item>\n      <item>$set_router_do_net_rules_check</item>\n      <item>$get_router_do_net_rules_check</item>\n      <item>$set_router_feed_bias</item>\n      <item>$get_router_feed_bias</item>\n      <item>$set_router_h_grid_size</item>\n      <item>$get_router_h_grid_size</item>\n      <item>$set_router_improve_global_val</item>\n      <item>$get_router_improve_global_val</item>\n      <item>$set_router_initial_global_val</item>\n      <item>$get_router_initial_global_val</item>\n      <item>$set_router_max_bends</item>\n      <item>$get_router_max_bends</item>\n      <item>$set_router_max_iters</item>\n      <item>$get_router_max_iters</item>\n      <item>$set_router_max_vias</item>\n      <item>$get_router_max_vias</item>\n      <item>$set_router_minimized_layers</item>\n      <item>$get_router_minimized_layers</item>\n      <item>$set_router_mode_type</item>\n      <item>$get_router_mode_type</item>\n      <item>$set_router_num_extra_tracks</item>\n      <item>$get_router_num_extra_tracks</item>\n      <item>$set_router_oper_mode_type</item>\n      <item>$get_router_oper_mode_type</item>\n      <item>$set_router_primary_layer_used</item>\n      <item>$get_router_primary_layer_used</item>\n      <item>$set_router_probe_layers</item>\n      <item>$get_router_probe_layers</item>\n      <item>$set_router_restricted_layers</item>\n      <item>$get_router_restricted_layers</item>\n      <item>$set_router_step_size</item>\n      <item>$get_router_step_size</item>\n      <item>$set_router_use_gridded_mode</item>\n      <item>$get_router_use_gridded_mode</item>\n      <item>$set_router_v_grid_size</item>\n      <item>$get_router_v_grid_size</item>\n      <item>$set_router_view_probes</item>\n      <item>$get_router_view_probes</item>\n      <item>$set_router_wrong_direction</item>\n      <item>$get_router_wrong_direction</item>\n      <item>$set_ruler_angle_mode</item>\n      <item>$get_ruler_angle_mode</item>\n      <item>$set_ruler_select_state</item>\n      <item>$get_ruler_select_state</item>\n      <item>$set_ruler_text_height</item>\n      <item>$get_ruler_text_height</item>\n      <item>$set_sd_hv_contact</item>\n      <item>$set_sdl_filter</item>\n      <item>$get_sdl_filter</item>\n      <item>$set_sdl_preserve_orientation</item>\n      <item>$get_sdl_preserve_orientation</item>\n      <item>$set_sdl_quiet</item>\n      <item>$get_sdl_quiet</item>\n      <item>$set_search_path</item>\n      <item>$get_search_path</item>\n      <item>$set_select_via_pin</item>\n      <item>$get_select_via_pin</item>\n      <item>$set_selectable_area</item>\n      <item>$get_selectable_area</item>\n      <item>$set_selectable_layers</item>\n      <item>$set_selectable_types</item>\n      <item>$get_selectable_types</item>\n      <item>$set_site_type</item>\n      <item>$set_snap_basepoint_to_grid</item>\n      <item>$get_snap_basepoint_to_grid</item>\n      <item>$set_target_mode</item>\n      <item>$get_target_mode</item>\n      <item>$set_text_cull_basis</item>\n      <item>$get_text_cull_basis</item>\n      <item>$set_text_display</item>\n      <item>$get_text_display</item>\n      <item>$set_text_origin_display</item>\n      <item>$get_text_origin_display</item>\n      <item>$set_timer</item>\n      <item>$set_toolbar_alignment</item>\n      <item>$get_toolbar_alignment</item>\n      <item>$set_toolbar_keep_items_visible</item>\n      <item>$get_toolbar_keep_items_visible</item>\n      <item>$set_undo_level</item>\n      <item>$get_undo_level</item>\n      <item>$set_undo_object_limit</item>\n      <item>$get_undo_object_limit</item>\n      <item>$set_unselect_empty</item>\n      <item>$get_unselect_empty</item>\n      <item>$set_update_connected</item>\n      <item>$get_update_connected</item>\n      <item>$set_verilog_array_delimiters</item>\n      <item>$get_verilog_array_delimiters</item>\n      <item>$set_verilog_supply0</item>\n      <item>$get_verilog_supply0</item>\n      <item>$set_verilog_supply1</item>\n      <item>$get_verilog_supply1</item>\n      <item>$set_view_controls</item>\n      <item>$get_view_controls</item>\n      <item>$set_visible_layers</item>\n      <item>$set_working_directory</item>\n      <item>$get_working_directory</item>\n      <item>$set_xml_group_protection</item>\n      <item>$get_xml_group_protection</item>\n      <item>$set_xml_logfile</item>\n      <item>$get_xml_logfile</item>\n      <item>$set_xml_other_protection</item>\n      <item>$get_xml_other_protection</item>\n      <item>$set_xml_read_cell_path_style</item>\n      <item>$get_xml_read_cell_path_style</item>\n      <item>$set_xml_replace</item>\n      <item>$get_xml_replace</item>\n      <item>$set_xml_style</item>\n      <item>$get_xml_style</item>\n      <item>$set_xml_write_cell_path_style</item>\n      <item>$get_xml_write_cell_path_style</item>\n      <item>$setup_auto_checkpoint</item>\n      <item>$setup_ic</item>\n      <item>$setup_ic_dynamics</item>\n      <item>$setup_new_windows</item>\n      <item>$setup_print</item>\n      <item>$setup_redraw_controls</item>\n      <item>$setup_reports</item>\n      <item>$setup_rulers</item>\n      <item>$get_active_ruler_bgd_color</item>\n      <item>$get_active_ruler_color</item>\n      <item>$get_active_ruler_font</item>\n      <item>$setup_sdl</item>\n      <item>$setup_select_filter</item>\n      <item>$setup_session</item>\n      <item>$setup_status_line</item>\n      <item>$show_all_mask_devices</item>\n      <item>$show_all_mask_discrepancies</item>\n      <item>$show_all_mask_nets</item>\n      <item>$show_aspect</item>\n      <item>$show_contact_gaps</item>\n      <item>$show_context</item>\n      <item>$show_current_mask_device</item>\n      <item>$show_current_mask_discrepancy</item>\n      <item>$show_current_mask_net</item>\n      <item>$show_drc_all</item>\n      <item>$show_drc_area</item>\n      <item>$show_drc_check</item>\n      <item>$show_drc_current</item>\n      <item>$show_drc_scan</item>\n      <item>$show_group</item>\n      <item>$show_guidelines</item>\n      <item>$show_layer_palette</item>\n      <item>$show_mask_device_id</item>\n      <item>$show_mask_device_name</item>\n      <item>$show_mask_device_point</item>\n      <item>$show_mask_discrepancy</item>\n      <item>$show_mask_net_id</item>\n      <item>$show_mask_net_name</item>\n      <item>$show_mask_net_point</item>\n      <item>$show_panel</item>\n      <item>$show_status_line</item>\n      <item>$show_system_toolbar</item>\n      <item>$show_toolbar</item>\n      <item>$show_tooltips</item>\n      <item>$show_unplaced_instances</item>\n      <item>$slice</item>\n      <item>$slice_array</item>\n      <item>$slice_with_polygon</item>\n      <item>$slide_route</item>\n      <item>$snap_to_grid</item>\n      <item>$snap_to_row</item>\n      <item>$startup</item>\n      <item>$stretch</item>\n      <item>$stretch_relative</item>\n      <item>$swap_logically_equivalent_nets</item>\n      <item>$toolbar_context_glyph_item</item>\n      <item>$toolbar_glyph_item</item>\n      <item>$tooltips_visible</item>\n      <item>$trace_property_numeric</item>\n      <item>$trace_property_string</item>\n      <item>$trim_invalid_nets</item>\n      <item>$trim_nets</item>\n      <item>$trim_nets_options</item>\n      <item>$undefine_layer_alias</item>\n      <item>$undefine_layer_name</item>\n      <item>$undefine_layer_set</item>\n      <item>$undefine_must_connect</item>\n      <item>$undefine_net_pairs</item>\n      <item>$undelete_drc</item>\n      <item>$undo</item>\n      <item>$unfreeze_window</item>\n      <item>$ungroup</item>\n      <item>$unhighlight_all</item>\n      <item>$unhighlight_group</item>\n      <item>$unhighlight_hierarchical_net</item>\n      <item>$unlink_floorplan_shape</item>\n      <item>$unload_closed_cells</item>\n      <item>$unload_mask_results</item>\n      <item>$unload_viewpoint</item>\n      <item>$unmake_port</item>\n      <item>$unmark_all_ignored</item>\n      <item>$unmark_instances_as_ignored</item>\n      <item>$unpeek</item>\n      <item>$unpeek_area</item>\n      <item>$unplace</item>\n      <item>$unprotect_all</item>\n      <item>$unprotect_group</item>\n      <item>$unprotect_nets</item>\n      <item>$unreserve_cell</item>\n      <item>$unreserve_cell_by_name</item>\n      <item>$unreserve_library</item>\n      <item>$unreserve_process</item>\n      <item>$unselect_all</item>\n      <item>$unselect_all_edges</item>\n      <item>$unselect_area</item>\n      <item>$unselect_area_polygon</item>\n      <item>$unselect_by_name</item>\n      <item>$unselect_by_property</item>\n      <item>$unselect_drc</item>\n      <item>$unselect_edge</item>\n      <item>$unselect_group</item>\n      <item>$unselect_range</item>\n      <item>$unset_cell_process</item>\n      <item>$unset_logic_source</item>\n      <item>$unset_process_override</item>\n      <item>$unshow_all_mask_devices</item>\n      <item>$unshow_all_mask_discrepancies</item>\n      <item>$unshow_all_mask_nets</item>\n      <item>$unshow_all_mask_results</item>\n      <item>$unshow_current_mask_device</item>\n      <item>$unshow_current_mask_discrepancy</item>\n      <item>$unshow_current_mask_net</item>\n      <item>$unshow_drc</item>\n      <item>$unshow_guidelines</item>\n      <item>$untrace_all_properties</item>\n      <item>$update_cell</item>\n      <item>$update_cell_by_name</item>\n      <item>$update_gadget</item>\n      <item>$update_group_window</item>\n      <item>$update_hier_window</item>\n      <item>$update_layout_view</item>\n      <item>$update_layout_config_view</item>\n      <item>$update_library</item>\n      <item>$view_all</item>\n      <item>$view_all_mask_devices</item>\n      <item>$view_all_mask_discrepancies</item>\n      <item>$view_all_mask_nets</item>\n      <item>$view_area</item>\n      <item>$view_centered</item>\n      <item>$view_context</item>\n      <item>$view_current_mask_device</item>\n      <item>$view_current_mask_discrepancy</item>\n      <item>$view_current_mask_net</item>\n      <item>$view_drc</item>\n      <item>$view_highlighted</item>\n      <item>$view_next</item>\n      <item>$view_panel</item>\n      <item>$view_previous</item>\n      <item>$view_selected</item>\n      <item>$write_calibre</item>\n      <item>$write_def</item>\n      <item>$write_design_lef</item>\n      <item>$write_direct_cnet</item>\n      <item>$write_direct_netlist</item>\n      <item>$write_gdsii</item>\n      <item>$write_hierarchical_netlist</item>\n      <item>$write_lef</item>\n      <item>$write_mask_cnet</item>\n      <item>$write_mask_netlist</item>\n      <item>$write_source_cnet</item>\n      <item>$write_xml</item>\n      <item>$zoom_in</item>\n      <item>$zoom_out</item>\n      <item>$zoom_to_grid</item>\n    </list>\n    <list name=\"daicfct\">\n      <item>$$add_arc</item>\n      <item>$add_border</item>\n      <item>$add_bus</item>\n      <item>$add_circle</item>\n      <item>$add_dot</item>\n      <item>$add_fb_def</item>\n      <item>$add_fb_inst</item>\n      <item>$add_fb_pins</item>\n      <item>$add_frame</item>\n      <item>$add_ic_viewpoint_type</item>\n      <item>$add_instance</item>\n      <item>$add_line</item>\n      <item>$add_net</item>\n      <item>$add_panel</item>\n      <item>$add_parameters</item>\n      <item>$add_pin</item>\n      <item>$add_polygon</item>\n      <item>$add_polyline</item>\n      <item>$add_property</item>\n      <item>$add_property_to_handle</item>\n      <item>$add_rectangle</item>\n      <item>$add_selected_instance</item>\n      <item>$add_settings_block</item>\n      <item>$add_sheet_border</item>\n      <item>$add_text</item>\n      <item>$add_wire</item>\n      <item>$align</item>\n      <item>$allow_resizable_instances</item>\n      <item>$apply_edits</item>\n      <item>$auto_sequence_text</item>\n      <item>$begin_edit_symbol</item>\n      <item>$change_color</item>\n      <item>$change_compiled_pin_name</item>\n      <item>$change_group_visibility</item>\n      <item>$change_instance_resize_factor</item>\n      <item>$change_line_style</item>\n      <item>$change_line_width</item>\n      <item>$change_net_style</item>\n      <item>$change_net_width</item>\n      <item>$change_polygon_fill</item>\n      <item>$change_property_color</item>\n      <item>$change_property_font</item>\n      <item>$change_property_height</item>\n      <item>$change_property_justification</item>\n      <item>$change_property_name</item>\n      <item>$change_property_offset</item>\n      <item>$change_property_orientation</item>\n      <item>$change_property_stability_switch</item>\n      <item>$change_property_type</item>\n      <item>$change_property_value</item>\n      <item>$change_property_visibility</item>\n      <item>$change_property_visibility_switch</item>\n      <item>$change_text_font</item>\n      <item>$change_text_height</item>\n      <item>$change_text_justification</item>\n      <item>$change_text_value</item>\n      <item>$change_variant_display</item>\n      <item>$$check</item>\n      <item>$check_and_save</item>\n      <item>$clear_unattached_annotations</item>\n      <item>$close_design_configuration</item>\n      <item>$close_selection</item>\n      <item>$close_window</item>\n      <item>$comp_name</item>\n      <item>$connect</item>\n      <item>$connect_area</item>\n      <item>$construct_frame</item>\n      <item>$convert_fb_inst_to_def</item>\n      <item>$convert_to_comment</item>\n      <item>$convert_to_new_technology</item>\n      <item>$copy</item>\n      <item>$copy_edit_hotkey_settings</item>\n      <item>$copy_multiple</item>\n      <item>$copy_to_array</item>\n      <item>$create_design_configuration</item>\n      <item>$create_design_sheet</item>\n      <item>$create_entity</item>\n      <item>$create_fb_inst_from_def</item>\n      <item>$create_implicit_pins</item>\n      <item>$create_pin_list</item>\n      <item>$create_sheet</item>\n      <item>$create_symbol</item>\n      <item>$create_variant_viewpoint</item>\n      <item>$da_ic_crossprobe</item>\n      <item>$da_ic_crossprobe_diff</item>\n      <item>$define_hotkey</item>\n      <item>$delete</item>\n      <item>$delete_ba_property</item>\n      <item>$delete_interfaces</item>\n      <item>$delete_multiple_ba_properties</item>\n      <item>$delete_panel</item>\n      <item>$delete_parameter</item>\n      <item>$delete_property</item>\n      <item>$delete_property_owner</item>\n      <item>$delete_sheet</item>\n      <item>$delete_template_name</item>\n      <item>$direct_to_active_window</item>\n      <item>$disconnect</item>\n      <item>$disconnect_area</item>\n      <item>$disconnect_ba</item>\n      <item>$display_next_sheet</item>\n      <item>$display_prev_sheet</item>\n      <item>$display_spec_sheet</item>\n      <item>$does_selection_exist</item>\n      <item>$$dump_sim_values</item>\n      <item>$end_edit_symbol</item>\n      <item>$$exit_sim_mode</item>\n      <item>$expand_template_name</item>\n      <item>$export_spice</item>\n      <item>$export_verilog</item>\n      <item>$export_vhdl</item>\n      <item>$filter_property_check</item>\n      <item>$flip</item>\n      <item>$freeze_window</item>\n      <item>$generate_symbol</item>\n      <item>$get_active_symbol</item>\n      <item>$get_active_symbol_history</item>\n      <item>$get_apply_edits_needed</item>\n      <item>$get_attached_objects</item>\n      <item>$get_attributes</item>\n      <item>$get_auto_update_inst_handles</item>\n      <item>$get_basepoint</item>\n      <item>$get_body_text_restriction</item>\n      <item>$get_bundle_members</item>\n      <item>$get_check_schematic_status</item>\n      <item>$get_check_status</item>\n      <item>$get_comment_graphics_attributes</item>\n      <item>$get_comment_handles</item>\n      <item>$get_comment_text_attributes</item>\n      <item>$get_comment_text_restriction</item>\n      <item>$get_comment_visibility</item>\n      <item>$get_default_interface_name</item>\n      <item>$get_design_sheets</item>\n      <item>$get_diagram_location</item>\n      <item>$get_edit_mode</item>\n      <item>$get_evaluations</item>\n      <item>$get_fb_line_style_by_handle</item>\n      <item>$get_frame_attributes</item>\n      <item>$get_frame_handles</item>\n      <item>$get_grid</item>\n      <item>$get_hotkey_settings</item>\n      <item>$get_in_design_context</item>\n      <item>$get_instance_attributes</item>\n      <item>$get_instance_handles</item>\n      <item>$get_instance_models</item>\n      <item>$get_instance_pathname</item>\n      <item>$get_instance_resize_factor</item>\n      <item>$get_item_type</item>\n      <item>$get_model_path</item>\n      <item>$get_net_attributes</item>\n      <item>$get_net_handles</item>\n      <item>$get_next_active_symbol</item>\n      <item>$get_object_property_attributes</item>\n      <item>$get_objects</item>\n      <item>$get_objects_in_area</item>\n      <item>$get_origin</item>\n      <item>$get_owned_property_names</item>\n      <item>$get_parameter</item>\n      <item>$get_pathname</item>\n      <item>$get_pin_attributes</item>\n      <item>$get_pin_handles</item>\n      <item>$get_pin_names</item>\n      <item>$get_prop_text_restriction</item>\n      <item>$get_property</item>\n      <item>$get_property_attributes</item>\n      <item>$get_property_handles</item>\n      <item>$get_property_names</item>\n      <item>$get_property_owners</item>\n      <item>$get_schematic_sheets</item>\n      <item>$get_search_path</item>\n      <item>$get_select_count</item>\n      <item>$get_select_count_type</item>\n      <item>$get_select_design_paths</item>\n      <item>$get_select_extent</item>\n      <item>$get_select_handles</item>\n      <item>$get_select_handles_type</item>\n      <item>$get_select_identical</item>\n      <item>$get_select_text_exists</item>\n      <item>$get_select_text_handle</item>\n      <item>$get_select_text_name</item>\n      <item>$get_select_text_origin</item>\n      <item>$get_select_text_value</item>\n      <item>$get_sheet_design_pathname</item>\n      <item>$get_sheet_extent</item>\n      <item>$get_sheetname_viewed</item>\n      <item>$$get_sim_value</item>\n      <item>$$get_sim_version</item>\n      <item>$get_simulation_mode</item>\n      <item>$get_source_edit_allowed</item>\n      <item>$get_symbol_name</item>\n      <item>$get_text_information</item>\n      <item>$get_type_present</item>\n      <item>$get_vertex_attributes</item>\n      <item>$get_vertex_handles</item>\n      <item>$get_view_area</item>\n      <item>$get_viewpoint</item>\n      <item>$get_window_names</item>\n      <item>$get_window_sheet_list</item>\n      <item>$group</item>\n      <item>$hide_active_symbol_window</item>\n      <item>$hide_annotations</item>\n      <item>$hide_comment</item>\n      <item>$hide_context_window</item>\n      <item>$hide_panel_border</item>\n      <item>$hide_status_line</item>\n      <item>$hide_system_toolbar</item>\n      <item>$hide_toolbar</item>\n      <item>$highlight_by_handle</item>\n      <item>$highlight_by_name</item>\n      <item>$highlight_property_owner</item>\n      <item>$$hotplot_submit</item>\n      <item>$import_verilog</item>\n      <item>$insert_template</item>\n      <item>$is_active_symbol_window_visible</item>\n      <item>$is_context_window_visible</item>\n      <item>$is_handle_valid</item>\n      <item>$is_selection_open</item>\n      <item>$is_status_line_visible</item>\n      <item>$is_system_toolbar_visible</item>\n      <item>$is_toolbar_visible</item>\n      <item>$load_hotkey_settings</item>\n      <item>$make_fb</item>\n      <item>$make_polygon</item>\n      <item>$make_polyline</item>\n      <item>$make_symbol</item>\n      <item>$mark_property_attributes</item>\n      <item>$mark_property_value</item>\n      <item>$measure_distance</item>\n      <item>$merge_annotations</item>\n      <item>$modify_frame</item>\n      <item>$move</item>\n      <item>$move_cursor_incrementally</item>\n      <item>$$move_settings_block</item>\n      <item>$name_instances</item>\n      <item>$name_instances_auto</item>\n      <item>$open_design_configuration</item>\n      <item>$open_design_sheet</item>\n      <item>$open_down</item>\n      <item>$open_schematic</item>\n      <item>$open_sheet</item>\n      <item>$open_source_code</item>\n      <item>$open_symbol</item>\n      <item>$open_top</item>\n      <item>$open_up</item>\n      <item>$pivot</item>\n      <item>$place_active_symbol</item>\n      <item>$pop_to_front</item>\n      <item>$print_all_schematics</item>\n      <item>$print_design_sheets</item>\n      <item>$protect</item>\n      <item>$protect_area</item>\n      <item>$push_to_back</item>\n      <item>$recalculate_properties</item>\n      <item>$reconnect_annotations</item>\n      <item>$redo</item>\n      <item>$remove_comment_status</item>\n      <item>$reopen_selection</item>\n      <item>$replace</item>\n      <item>$replace_with_alternate_symbol</item>\n      <item>$report_broken_annotations</item>\n      <item>$$report_check</item>\n      <item>$report_default_property_settings</item>\n      <item>$report_groups</item>\n      <item>$report_hotkey_settings</item>\n      <item>$report_interfaces</item>\n      <item>$report_interfaces_selected</item>\n      <item>$report_object</item>\n      <item>$$report_object_name</item>\n      <item>$report_panels</item>\n      <item>$report_parameter</item>\n      <item>$report_unattached_annotations</item>\n      <item>$reselect</item>\n      <item>$reset_instance_colors</item>\n      <item>$resize_fb</item>\n      <item>$revalidate_models</item>\n      <item>$rotate</item>\n      <item>$route</item>\n      <item>$save_setup</item>\n      <item>$save_sheet</item>\n      <item>$save_sheet_as</item>\n      <item>$save_symbol</item>\n      <item>$save_symbol_as</item>\n      <item>$save_variant_viewpoint</item>\n      <item>$scale</item>\n      <item>$scroll_down_by_unit</item>\n      <item>$scroll_down_by_window</item>\n      <item>$scroll_hz</item>\n      <item>$scroll_left_by_unit</item>\n      <item>$scroll_left_by_window</item>\n      <item>$scroll_right_by_unit</item>\n      <item>$scroll_right_by_window</item>\n      <item>$scroll_up_by_unit</item>\n      <item>$scroll_up_by_window</item>\n      <item>$scroll_vt</item>\n      <item>$select_all</item>\n      <item>$select_area</item>\n      <item>$select_branches</item>\n      <item>$select_by_design_path</item>\n      <item>$select_by_handle</item>\n      <item>$select_by_name</item>\n      <item>$select_by_property</item>\n      <item>$select_by_property_type</item>\n      <item>$select_fb</item>\n      <item>$select_group</item>\n      <item>$select_instances</item>\n      <item>$select_nets</item>\n      <item>$select_pins</item>\n      <item>$select_property_owner</item>\n      <item>$select_template_name</item>\n      <item>$select_text</item>\n      <item>$select_vertices</item>\n      <item>$sequence_text</item>\n      <item>$set_active_symbol</item>\n      <item>$set_active_symbol_history</item>\n      <item>$set_basepoint</item>\n      <item>$set_color</item>\n      <item>$set_color_config</item>\n      <item>$set_compiler_options</item>\n      <item>$set_default_parts_menu</item>\n      <item>$set_edit_mode</item>\n      <item>$set_evaluations</item>\n      <item>$set_grid</item>\n      <item>$set_hotkey_mode</item>\n      <item>$set_next_active_symbol</item>\n      <item>$set_origin</item>\n      <item>$set_out_of_view_warn</item>\n      <item>$set_parameter</item>\n      <item>$set_previous_active_symbol</item>\n      <item>$set_property_owner</item>\n      <item>$set_property_type</item>\n      <item>$set_search_path</item>\n      <item>$set_sel_name_display</item>\n      <item>$$set_sim_value</item>\n      <item>$set_simulation_mode</item>\n      <item>$set_template_directory</item>\n      <item>$set_toolbar_alignment</item>\n      <item>$set_userrule_error</item>\n      <item>$set_userrule_warning</item>\n      <item>$set_variant_properties</item>\n      <item>$set_viewpoint</item>\n      <item>$$settings_block_visible</item>\n      <item>$setup_annotated_property_text</item>\n      <item>$setup_check_schematic</item>\n      <item>$setup_check_schematic_sheet</item>\n      <item>$$setup_check_sheet</item>\n      <item>$setup_check_symbol</item>\n      <item>$setup_color</item>\n      <item>$setup_comment</item>\n      <item>$setup_default_viewpoint</item>\n      <item>$setup_display</item>\n      <item>$setup_function_block</item>\n      <item>$setup_grid</item>\n      <item>$setup_hspice_alter</item>\n      <item>$setup_net</item>\n      <item>$setup_object_template</item>\n      <item>$setup_page</item>\n      <item>$setup_property_display</item>\n      <item>$setup_property_text</item>\n      <item>$setup_report</item>\n      <item>$setup_ripper</item>\n      <item>$setup_selection</item>\n      <item>$setup_select_filter</item>\n      <item>$setup_sim_config</item>\n      <item>$setup_sim_model_editor</item>\n      <item>$setup_symbol_body</item>\n      <item>$setup_text_restriction</item>\n      <item>$setup_unselect_filter</item>\n      <item>$show_active_symbol_window</item>\n      <item>$show_annotations</item>\n      <item>$show_comment</item>\n      <item>$show_context_window</item>\n      <item>$show_panel_border</item>\n      <item>$show_registration</item>\n      <item>$show_status_line</item>\n      <item>$show_system_toolbar</item>\n      <item>$show_toolbar</item>\n      <item>$sim_add_dspf</item>\n      <item>$sim_add_sdf</item>\n      <item>$sim_choose_library</item>\n      <item>$sim_copy_configuration_as</item>\n      <item>$sim_delete_converter</item>\n      <item>$sim_edit_commands</item>\n      <item>$sim_edit_measurements</item>\n      <item>$sim_edit_sdf</item>\n      <item>$sim_export_spice</item>\n      <item>$sim_get_adms_ini_file</item>\n      <item>$sim_hide_dcop</item>\n      <item>$sim_insert_converter_default</item>\n      <item>$sim_insert_converter_inst</item>\n      <item>$sim_insert_converter_net</item>\n      <item>$sim_insert_converter_pin</item>\n      <item>$sim_invoke</item>\n      <item>$sim_invoke_mr</item>\n      <item>$sim_invoke_ms</item>\n      <item>$$sim_merge_annotations</item>\n      <item>$sim_open_language</item>\n      <item>$sim_open_lang_model</item>\n      <item>$sim_process_extracted_netlist</item>\n      <item>$sim_restore_setup_from</item>\n      <item>$sim_run</item>\n      <item>$sim_save_selected</item>\n      <item>$sim_save_setup_as</item>\n      <item>$sim_set_additional_commands</item>\n      <item>$sim_set_include_paths</item>\n      <item>$sim_set_initial_condition</item>\n      <item>$sim_set_temperature</item>\n      <item>$sim_setup_analysis</item>\n      <item>$sim_setup_analysis_ac</item>\n      <item>$sim_setup_analysis_dc</item>\n      <item>$sim_setup_analysis_dcop</item>\n      <item>$sim_setup_analysis_mc</item>\n      <item>$sim_setup_analysis_mod_steadystate</item>\n      <item>$sim_setup_analysis_noise</item>\n      <item>$sim_setup_analysis_noisetran</item>\n      <item>$sim_setup_analysis_steadystate</item>\n      <item>$sim_setup_analysis_steadystateac</item>\n      <item>$sim_setup_analysis_steadystatenoise</item>\n      <item>$sim_setup_analysis_steadystateoscil</item>\n      <item>$sim_setup_analysis_tran</item>\n      <item>$sim_setup_netlister</item>\n      <item>$sim_setup_sim_environ</item>\n      <item>$$sim_setup_simulator_viewer</item>\n      <item>$$sim_setup_simulator_viewer_advance</item>\n      <item>$sim_simulate</item>\n      <item>$sim_view_measurements</item>\n      <item>$sim_view_output_file</item>\n      <item>$sim_write_commands</item>\n      <item>$sim_write_setup_file</item>\n      <item>$slice</item>\n      <item>$snap_to_grid</item>\n      <item>$sort_handles</item>\n      <item>$sort_handles_by_property</item>\n      <item>$stretch</item>\n      <item>$string_to_literal</item>\n      <item>$symb_name</item>\n      <item>$undo</item>\n      <item>$unfreeze_window</item>\n      <item>$ungroup</item>\n      <item>$unhighlight_by_handle</item>\n      <item>$unhighlight_by_name</item>\n      <item>$unhighlight_property_owner</item>\n      <item>$unmake_fb</item>\n      <item>$unprotect</item>\n      <item>$unprotect_area</item>\n      <item>$unselect_all</item>\n      <item>$unselect_area</item>\n      <item>$unselect_by_design_path</item>\n      <item>$unselect_by_handle</item>\n      <item>$unselect_by_property</item>\n      <item>$unselect_by_property_type</item>\n      <item>$unselect_fb</item>\n      <item>$unselect_property_owner</item>\n      <item>$unselect_vertices</item>\n      <item>$update</item>\n      <item>$update_all</item>\n      <item>$update_all_schematics</item>\n      <item>$update_border</item>\n      <item>$update_from_interface</item>\n      <item>$$update_settings_blocks</item>\n      <item>$update_title_block</item>\n      <item>$view_all</item>\n      <item>$view_area</item>\n      <item>$view_centered</item>\n      <item>$view_panel</item>\n      <item>$view_selected</item>\n      <item>$vpt_needs_save</item>\n      <item>$was_saved</item>\n      <item>$zoom_in</item>\n      <item>$zoom_out</item>\n      <item>$get_auto_name_net</item>\n      <item>$get_auto_place_instance_name</item>\n      <item>$get_check_busshorts</item>\n      <item>$get_check_functionblocks</item>\n      <item>$get_check_schematicbusshorts</item>\n      <item>$get_check_schematicnetio</item>\n      <item>$get_fb_def_color</item>\n      <item>$get_fb_def_line_style</item>\n      <item>$get_fb_inst_color</item>\n      <item>$get_fb_inst_line_style</item>\n      <item>$get_fb_int_change_popup</item>\n      <item>$get_fb_passthru</item>\n      <item>$get_fb_popupwin</item>\n      <item>$set_annotation_color</item>\n      <item>$set_annotation_visibility</item>\n      <item>$set_auto_name_net</item>\n      <item>$set_auto_place_instance_name</item>\n      <item>$set_auto_update_mode</item>\n      <item>$set_autoripper</item>\n      <item>$set_autoroute</item>\n      <item>$set_autoselect</item>\n      <item>$set_bus_width</item>\n      <item>$set_check_annotations</item>\n      <item>$set_check_busshorts</item>\n      <item>$set_check_closedots</item>\n      <item>$set_check_dangle</item>\n      <item>$set_check_expression</item>\n      <item>$set_check_filemode</item>\n      <item>$set_check_filename</item>\n      <item>$set_check_frame</item>\n      <item>$set_check_functionblocks</item>\n      <item>$set_check_initprops</item>\n      <item>$set_check_instance</item>\n      <item>$set_check_net</item>\n      <item>$set_check_notdots</item>\n      <item>$set_check_overlap</item>\n      <item>$set_check_owner</item>\n      <item>$set_check_parameter</item>\n      <item>$set_check_pins</item>\n      <item>$set_check_schematicbusshorts</item>\n      <item>$set_check_schematicinstance</item>\n      <item>$set_check_schematicinterface</item>\n      <item>$set_check_schematicnet</item>\n      <item>$set_check_schematicnetio</item>\n      <item>$set_check_schematicspecial</item>\n      <item>$set_check_schematicuserrule</item>\n      <item>$set_check_special</item>\n      <item>$set_check_symbolbody</item>\n      <item>$set_check_symbolinterface</item>\n      <item>$set_check_symbolpin</item>\n      <item>$set_check_symbolspecial</item>\n      <item>$set_check_symboluserrule</item>\n      <item>$set_check_transcript</item>\n      <item>$set_check_userrule</item>\n      <item>$set_check_window</item>\n      <item>$set_close_dot</item>\n      <item>$set_closeness_criteria</item>\n      <item>$set_dot_size</item>\n      <item>$set_dot_style</item>\n      <item>$set_dynamic_cursor</item>\n      <item>$set_dynamic_rounding_precision</item>\n      <item>$set_environment_dofile_pathname</item>\n      <item>$set_fb_def_color</item>\n      <item>$set_fb_def_line_style</item>\n      <item>$set_fb_inst_color</item>\n      <item>$set_fb_inst_line_style</item>\n      <item>$set_fb_int_change_popup</item>\n      <item>$set_fb_passthru</item>\n      <item>$set_fb_popupwin</item>\n      <item>$set_hidden_symbol_prop_display</item>\n      <item>$set_implicit_ripper</item>\n      <item>$set_line_style</item>\n      <item>$set_line_width</item>\n      <item>$set_modify_multiple_prop_filter</item>\n      <item>$set_net_style</item>\n      <item>$set_net_width</item>\n      <item>$set_new_annotation_visibility</item>\n      <item>$set_orthogonal</item>\n      <item>$set_orthogonal_angle</item>\n      <item>$set_pin_spacing</item>\n      <item>$set_polygon_fill</item>\n      <item>$set_property_font</item>\n      <item>$set_property_height</item>\n      <item>$set_property_hjustification</item>\n      <item>$set_property_orientation</item>\n      <item>$set_property_stability_switch</item>\n      <item>$set_property_transparency</item>\n      <item>$set_property_visibility</item>\n      <item>$set_property_visibility_switch</item>\n      <item>$set_property_vjustification</item>\n      <item>$set_report_filemode</item>\n      <item>$set_report_filename</item>\n      <item>$set_report_transcript</item>\n      <item>$set_report_window</item>\n      <item>$set_ripper_dot</item>\n      <item>$set_ripper_mode</item>\n      <item>$set_ripper_query</item>\n      <item>$set_ripper_symbol_pathname</item>\n      <item>$set_schem_check_mode</item>\n      <item>$set_schematicuserrules_file</item>\n      <item>$set_segment_select_mode</item>\n      <item>$set_select_aperture</item>\n      <item>$set_select_comment</item>\n      <item>$set_select_exterior</item>\n      <item>$set_select_frame</item>\n      <item>$set_select_instance</item>\n      <item>$set_select_net</item>\n      <item>$set_select_pin</item>\n      <item>$set_select_property</item>\n      <item>$set_select_segment</item>\n      <item>$set_select_symbolbody</item>\n      <item>$set_select_symbolpin</item>\n      <item>$set_select_text</item>\n      <item>$set_select_vertex</item>\n      <item>$set_selection_color</item>\n      <item>$set_selection_model</item>\n      <item>$set_snap</item>\n      <item>$set_symboluserrules_file</item>\n      <item>$set_text_font</item>\n      <item>$set_text_height</item>\n      <item>$set_text_hjustification</item>\n      <item>$set_text_orientation</item>\n      <item>$set_text_transparency</item>\n      <item>$set_text_vjustification</item>\n      <item>$set_undo_level</item>\n      <item>$set_unselect_comment</item>\n      <item>$set_unselect_exterior</item>\n      <item>$set_unselect_frame</item>\n      <item>$set_unselect_instance</item>\n      <item>$set_unselect_net</item>\n      <item>$set_unselect_pin</item>\n      <item>$set_unselect_property</item>\n      <item>$set_unselect_segment</item>\n      <item>$set_unselect_symbolbody</item>\n      <item>$set_unselect_symbolpin</item>\n      <item>$set_unselect_text</item>\n      <item>$set_unselect_vertex</item>\n      <item>$set_userrules_file</item>\n      <item>$set_user_units</item>\n    </list>\n    <list name=\"iccuifct\">\n      <item>$add_menu_item</item>\n      <item>$ask_color</item>\n      <item>$ask_frame_name</item>\n      <item>$ask_integer</item>\n      <item>$ask_number</item>\n      <item>$ask_pathname</item>\n      <item>$ask_pattern</item>\n      <item>$ask_save_edits</item>\n      <item>$ask_scope_builtin_name</item>\n      <item>$ask_scope_callable_name</item>\n      <item>$ask_scope_form_name</item>\n      <item>$ask_scope_frame_name</item>\n      <item>$ask_scope_function_name</item>\n      <item>$ask_scope_keydef_name</item>\n      <item>$ask_scope_menu_name</item>\n      <item>$ask_scope_stroke_name</item>\n      <item>$ask_string</item>\n      <item>$ask_yes_no</item>\n      <item>$ask_yes_no_cancel</item>\n      <item>$bell</item>\n      <item>$bottom_y</item>\n      <item>$c_ask_string</item>\n      <item>$change_location_map_entry</item>\n      <item>$change_workspace</item>\n      <item>$cleanup_icons</item>\n      <item>$cleanup_windows</item>\n      <item>$clear_message</item>\n      <item>$clear_saved_prompt</item>\n      <item>$close_application_windows</item>\n      <item>$close_physical_transcript</item>\n      <item>$close_session</item>\n      <item>$close_window</item>\n      <item>$collapse_dockable</item>\n      <item>$compile_userware</item>\n      <item>$create_form</item>\n      <item>$create_menu</item>\n      <item>$create_notepad</item>\n      <item>$create_prompt</item>\n      <item>$create_toolbar</item>\n      <item>$define_color</item>\n      <item>$define_userware</item>\n      <item>$delete_menu_item</item>\n      <item>$delete_stroke</item>\n      <item>$disable_interrupt</item>\n      <item>$disable_softkey_update</item>\n      <item>$dock_dockable</item>\n      <item>$dockable_collapsed</item>\n      <item>$dockable_docked</item>\n      <item>$dockable_permission</item>\n      <item>$dockable_pinned</item>\n      <item>$dockable_visible</item>\n      <item>$dockables_all_hidden</item>\n      <item>$dockables_all_shown</item>\n      <item>$dockables_locked</item>\n      <item>$double_click_distance</item>\n      <item>$edit_source</item>\n      <item>$enable_help</item>\n      <item>$enable_interrupt</item>\n      <item>$enable_ref_help</item>\n      <item>$enable_softkey_update</item>\n      <item>$eval</item>\n      <item>$execute</item>\n      <item>$execute_dynamic</item>\n      <item>$execute_last_menu</item>\n      <item>$execute_promptbar</item>\n      <item>$execute_ref</item>\n      <item>$execute_stroke</item>\n      <item>$expand_command</item>\n      <item>$float_dockable</item>\n      <item>$forget</item>\n      <item>$forget_all_promptbars</item>\n      <item>$forget_promptbar</item>\n      <item>$form_action</item>\n      <item>$form_action_buttons_gadget</item>\n      <item>$form_actual_value</item>\n      <item>$form_argument</item>\n      <item>$form_argument_gadget</item>\n      <item>$form_argument_integer_entry_gadget</item>\n      <item>$form_argument_number_entry_gadget</item>\n      <item>$form_argument_string_entry_gadget</item>\n      <item>$form_argument_value</item>\n      <item>$form_button</item>\n      <item>$form_check_boxes_gadget</item>\n      <item>$form_choice_buttons_gadget</item>\n      <item>$form_choice_stepper_gadget</item>\n      <item>$form_click_button_gadget</item>\n      <item>$form_color_paint_chip_gadget</item>\n      <item>$form_colors_list_box_gadget</item>\n      <item>$form_column</item>\n      <item>$form_display_only</item>\n      <item>$form_display_text_gadget</item>\n      <item>$form_dynamic_list_box_gadget</item>\n      <item>$form_entry_box_gadget</item>\n      <item>$form_execute_buttons</item>\n      <item>$form_gadget_value</item>\n      <item>$form_horiz_dynamic_list_box_gadget</item>\n      <item>$form_horiz_list_box_gadget</item>\n      <item>$form_item</item>\n      <item>$form_label</item>\n      <item>$form_left_justified_column</item>\n      <item>$form_list_box_gadget</item>\n      <item>$form_mouse_tracking</item>\n      <item>$form_named_argument</item>\n      <item>$form_named_argument_gadget</item>\n      <item>$form_navigator_entry</item>\n      <item>$form_navigator_gadget</item>\n      <item>$form_number_entry_box_gadget</item>\n      <item>$form_patterns_list_box_gadget</item>\n      <item>$form_prompt_text_gadget</item>\n      <item>$form_push_button_gadget</item>\n      <item>$form_radio_buttons_gadget</item>\n      <item>$form_repeat</item>\n      <item>$form_right_justified_column</item>\n      <item>$form_row</item>\n      <item>$form_scope_list_box_gadget</item>\n      <item>$form_set_no_enter</item>\n      <item>$form_single_check_box_gadget</item>\n      <item>$form_string_entry_box_gadget</item>\n      <item>$form_switch</item>\n      <item>$form_target_action</item>\n      <item>$form_target_button</item>\n      <item>$form_text_entry_box_gadget</item>\n      <item>$form_variable</item>\n      <item>$form_variable_gadget</item>\n      <item>$frame_maximized</item>\n      <item>$frame_window</item>\n      <item>$get_action_bar_bgd_color</item>\n      <item>$get_action_bar_fgd_color</item>\n      <item>$get_active_color</item>\n      <item>$get_active_window</item>\n      <item>$get_additional_workspaces</item>\n      <item>$get_app_name_and_version</item>\n      <item>$get_app_name_no_version</item>\n      <item>$get_auto_pop</item>\n      <item>$get_auto_refresh</item>\n      <item>$get_auto_resize_palette</item>\n      <item>$get_autosave</item>\n      <item>$get_base_window</item>\n      <item>$get_bgd_color</item>\n      <item>$get_border_width</item>\n      <item>$get_current_profile</item>\n      <item>$get_cursor_colors</item>\n      <item>$get_cursor_shape</item>\n      <item>$get_default_method</item>\n      <item>$get_default_notepad_font</item>\n      <item>$get_double_click_interval</item>\n      <item>$get_expanded_pathname</item>\n      <item>$get_fgd_color</item>\n      <item>$get_focus_follows_mouse</item>\n      <item>$get_focus_follows_mouse_delay</item>\n      <item>$get_font_nominal_width</item>\n      <item>$get_form_gadget_value</item>\n      <item>$get_frame_collapsed</item>\n      <item>$get_graphic_device</item>\n      <item>$get_keyboard_type</item>\n      <item>$get_last_window</item>\n      <item>$get_message_lines</item>\n      <item>$get_message_popup</item>\n      <item>$get_message_reply</item>\n      <item>$get_message_transcript</item>\n      <item>$get_notepad_document_status</item>\n      <item>$get_open_windows</item>\n      <item>$get_palette_menu_visible</item>\n      <item>$get_pattern</item>\n      <item>$get_prompt_fonts</item>\n      <item>$get_server_switch</item>\n      <item>$get_sidetab_color</item>\n      <item>$get_tabbed_workspace_trim_right</item>\n      <item>$get_text_cursor_blink</item>\n      <item>$get_transcript_output</item>\n      <item>$get_window_border_width</item>\n      <item>$get_window_frame_extent</item>\n      <item>$get_window_frame_width</item>\n      <item>$get_workspace</item>\n      <item>$graphic_x</item>\n      <item>$graphic_y</item>\n      <item>$grow_window</item>\n      <item>$help</item>\n      <item>$help_context</item>\n      <item>$help_enabled</item>\n      <item>$hide_all_dockables</item>\n      <item>$hide_command_shell</item>\n      <item>$hide_dockable</item>\n      <item>$hide_menu_bar</item>\n      <item>$hide_message_area</item>\n      <item>$hide_palette</item>\n      <item>$hide_palette_scrolls</item>\n      <item>$hide_scrolls</item>\n      <item>$hide_softkey_labels</item>\n      <item>$hide_softkeys</item>\n      <item>$hide_transcript</item>\n      <item>$hide_window_title</item>\n      <item>$identify_interrupt</item>\n      <item>$insert_menu_item</item>\n      <item>$key_</item>\n      <item>$left_x</item>\n      <item>$load_profile</item>\n      <item>$load_userware</item>\n      <item>$location</item>\n      <item>$lock_dockables</item>\n      <item>$mark</item>\n      <item>$maximize_window</item>\n      <item>$menu_bar_item</item>\n      <item>$menu_bar_visible</item>\n      <item>$menu_context_item</item>\n      <item>$menu_name</item>\n      <item>$menu_parent_name</item>\n      <item>$menu_registered_item</item>\n      <item>$menu_separator_item</item>\n      <item>$menu_special_text_item</item>\n      <item>$menu_text_item</item>\n      <item>$menu_title_item</item>\n      <item>$message</item>\n      <item>$message_area_visible</item>\n      <item>$minimize_window</item>\n      <item>$move_cursor</item>\n      <item>$move_dockable</item>\n      <item>$move_dockable_into</item>\n      <item>$move_palette</item>\n      <item>$move_window</item>\n      <item>$next_field</item>\n      <item>$next_field_promptbar</item>\n      <item>$next_icon</item>\n      <item>$next_window</item>\n      <item>$open_notepad</item>\n      <item>$open_physical_transcript</item>\n      <item>$open_text_report</item>\n      <item>$option_form_promptbar</item>\n      <item>$palette_visible</item>\n      <item>$pause</item>\n      <item>$pin_dockable</item>\n      <item>$pop_window</item>\n      <item>$pop_window_to_top</item>\n      <item>$popup_command_line</item>\n      <item>$popup_last_menu</item>\n      <item>$popup_menu</item>\n      <item>$popup_menu_at_cursor</item>\n      <item>$popup_menu_bar</item>\n      <item>$popup_window_menu</item>\n      <item>$prev_field</item>\n      <item>$prev_field_promptbar</item>\n      <item>$prompt</item>\n      <item>$prompt_arg</item>\n      <item>$prompt_display</item>\n      <item>$prompt_dynamic</item>\n      <item>$prompt_for_location</item>\n      <item>$prompt_for_polylocation</item>\n      <item>$prompt_for_polyrectangle</item>\n      <item>$prompt_for_rectangle</item>\n      <item>$prompt_options</item>\n      <item>$read_cpu_timer</item>\n      <item>$read_cpu_timer_total</item>\n      <item>$read_map</item>\n      <item>$read_timer</item>\n      <item>$read_timer_total</item>\n      <item>$redirect_to_active_window</item>\n      <item>$ref_help</item>\n      <item>$ref_help_enabled</item>\n      <item>$refresh</item>\n      <item>$relative_location</item>\n      <item>$remove_profile</item>\n      <item>$replace_palette</item>\n      <item>$replay_physical_transcript</item>\n      <item>$report_color</item>\n      <item>$report_key</item>\n      <item>$report_stroke</item>\n      <item>$reposition_window</item>\n      <item>$reset</item>\n      <item>$reset_defaults</item>\n      <item>$reset_timer</item>\n      <item>$resize_palette</item>\n      <item>$restore_default_profile</item>\n      <item>$result</item>\n      <item>$resume</item>\n      <item>$right_x</item>\n      <item>$save_profile</item>\n      <item>$save_profile_as</item>\n      <item>$screen_x</item>\n      <item>$screen_y</item>\n      <item>$scroll_down_by_unit</item>\n      <item>$scroll_down_by_window</item>\n      <item>$scroll_hz</item>\n      <item>$scroll_left_by_unit</item>\n      <item>$scroll_left_by_window</item>\n      <item>$scroll_right_by_unit</item>\n      <item>$scroll_right_by_window</item>\n      <item>$scroll_to_bottom</item>\n      <item>$scroll_to_left</item>\n      <item>$scroll_to_right</item>\n      <item>$scroll_to_top</item>\n      <item>$scroll_up_by_unit</item>\n      <item>$scroll_up_by_window</item>\n      <item>$scroll_vt</item>\n      <item>$scrolls_visible</item>\n      <item>$select</item>\n      <item>$select_active_window</item>\n      <item>$send_ipc</item>\n      <item>$session_window_active</item>\n      <item>$set_action_bar_bgd_color</item>\n      <item>$set_action_bar_fgd_color</item>\n      <item>$set_active_color</item>\n      <item>$set_active_window</item>\n      <item>$set_additional_workspaces</item>\n      <item>$set_auto_pop</item>\n      <item>$set_auto_refresh</item>\n      <item>$set_auto_resize_palette</item>\n      <item>$set_autosave</item>\n      <item>$set_base_window</item>\n      <item>$set_bgd_color</item>\n      <item>$set_border_width</item>\n      <item>$set_cmd_line_font</item>\n      <item>$set_cursor_colors</item>\n      <item>$set_cursor_shape</item>\n      <item>$set_default_method</item>\n      <item>$set_default_notepad_font</item>\n      <item>$set_default_position</item>\n      <item>$set_double_click_distance</item>\n      <item>$set_double_click_interval</item>\n      <item>$set_fgd_color</item>\n      <item>$set_focus_follows_mouse</item>\n      <item>$set_focus_follows_mouse_delay</item>\n      <item>$set_form_gadget_value</item>\n      <item>$set_form_position</item>\n      <item>$set_frame_width</item>\n      <item>$set_graphic_device</item>\n      <item>$set_invert_text_color_on_highlight</item>\n      <item>$set_ipc_port</item>\n      <item>$set_ipc_wakeup_interval</item>\n      <item>$set_left_justify_palette_text</item>\n      <item>$set_list_gadget_double_click_action</item>\n      <item>$set_menu_rollover_color</item>\n      <item>$set_message_font_resize</item>\n      <item>$set_message_lines</item>\n      <item>$set_message_popup</item>\n      <item>$set_message_reply</item>\n      <item>$set_message_transcript</item>\n      <item>$set_palette_width</item>\n      <item>$set_pattern</item>\n      <item>$set_prompt_fonts</item>\n      <item>$set_sidetab_color</item>\n      <item>$set_softkey_bgd_color</item>\n      <item>$set_softkey_fgd_color</item>\n      <item>$set_softkey_font</item>\n      <item>$set_tabbed_workspace_trim_right</item>\n      <item>$set_text_cursor_blink</item>\n      <item>$set_transcript_output</item>\n      <item>$set_window_border_width</item>\n      <item>$set_window_frame_width</item>\n      <item>$set_working_directory</item>\n      <item>setup_registered_commands</item>\n      <item>$show_all_dockables</item>\n      <item>$show_command_shell</item>\n      <item>$show_dockable</item>\n      <item>$show_location_map</item>\n      <item>$show_menu_bar</item>\n      <item>$show_message_area</item>\n      <item>$show_palette</item>\n      <item>$show_palette_scrolls</item>\n      <item>$show_parent_palette</item>\n      <item>$show_scrolls</item>\n      <item>$show_softkey_labels</item>\n      <item>$show_softkeys</item>\n      <item>$show_sub_palette</item>\n      <item>$show_toolbar_icons</item>\n      <item>$show_toolbar_text</item>\n      <item>$show_top_palette</item>\n      <item>$show_transcript</item>\n      <item>$show_window_title</item>\n      <item>$show_workspace_tab</item>\n      <item>$softkey_bgd_color</item>\n      <item>$softkey_fgd_color</item>\n      <item>$softkey_font</item>\n      <item>$softkeys_visible</item>\n      <item>$source</item>\n      <item>$start_stroke</item>\n      <item>$start_stroke_location</item>\n      <item>$start_timer</item>\n      <item>$stop</item>\n      <item>$stop_stroke</item>\n      <item>$stop_stroke_location</item>\n      <item>$stop_timer</item>\n      <item>$stroke_extent</item>\n      <item>$stroke_identity</item>\n      <item>$stroke_</item>\n      <item>$target_name</item>\n      <item>$title_visible</item>\n      <item>$toolbar_action_selector_item</item>\n      <item>$toolbar_add_item</item>\n      <item>$toolbar_associative_item</item>\n      <item>$toolbar_combo_box_item</item>\n      <item>$toolbar_insert_item</item>\n      <item>$toolbar_label_item</item>\n      <item>$toolbar_n_state_item</item>\n      <item>$toolbar_registered_item</item>\n      <item>$toolbar_remove_item</item>\n      <item>$toolbar_separator_item</item>\n      <item>$toolbar_text_field_item</item>\n      <item>$toolbar_text_icon_item</item>\n      <item>$top_y</item>\n      <item>$transcript_visible</item>\n      <item>$ui_message_ask_yes_no</item>\n      <item>$ui_message_fail</item>\n      <item>$update_menu_bar</item>\n      <item>$update_palette</item>\n      <item>$update_softkey_labels</item>\n      <item>$update_toolbars</item>\n      <item>$use_animations</item>\n      <item>$user_init</item>\n      <item>$user_pre_init</item>\n      <item>$user_window_init</item>\n      <item>$using_animations</item>\n      <item>$version</item>\n      <item>$wait</item>\n      <item>$window_class_name</item>\n      <item>$window_extent</item>\n      <item>$window_init</item>\n      <item>$window_interior_extent</item>\n      <item>$window_scope_name</item>\n      <item>$window_visible</item>\n      <item>$writeln</item>\n    </list>\n    <list name=\"dveicfct\">\n      <item>$add_back_annotation</item>\n      <item>$add_multiple_properties</item>\n      <item>$add_parameter</item>\n      <item>$add_primitive</item>\n      <item>$add_property</item>\n      <item>$add_substitute</item>\n      <item>$add_visible_property</item>\n      <item>$change_model</item>\n      <item>$change_property</item>\n      <item>$check_design</item>\n      <item>$clear_global_parameter</item>\n      <item>$close_design_viewpoint</item>\n      <item>$connect_back_annotation</item>\n      <item>$delete_invalid_entries</item>\n      <item>$delete_parameter</item>\n      <item>$delete_primitive</item>\n      <item>$delete_property</item>\n      <item>$delete_substitute</item>\n      <item>$delete_visible_property</item>\n      <item>$disconnect_back_annotation</item>\n      <item>$erc_check</item>\n      <item>$export_back_annotation</item>\n      <item>$export_design_configuration</item>\n      <item>$filter_property_check</item>\n      <item>$get_viewpoint_name</item>\n      <item>$import_back_annotation</item>\n      <item>$is_ba_readonly</item>\n      <item>$is_function_defined</item>\n      <item>$latch_using_label</item>\n      <item>$latch_version</item>\n      <item>$maintain_back_annotation_window</item>\n      <item>$open_back_annotation</item>\n      <item>$open_design_configuration</item>\n      <item>$open_design_viewpoint</item>\n      <item>$preset_global_parameter</item>\n      <item>$reload_model</item>\n      <item>$report_select_counts</item>\n      <item>$report_viewpoint_references</item>\n      <item>$save_design_viewpoint</item>\n      <item>$select_back_annotation</item>\n      <item>$select_design_configuration</item>\n      <item>$select_parameter</item>\n      <item>$select_primitive</item>\n      <item>$select_substitute</item>\n      <item>$select_visible_property</item>\n      <item>$unlatch_version</item>\n      <item>$unselect_back_annotation</item>\n      <item>$unselect_design_configuration</item>\n      <item>$unselect_parameter</item>\n      <item>$unselect_primitive</item>\n      <item>$unselect_substitute</item>\n      <item>$unselect_visible_property</item>\n      <item>$update_latched_version</item>\n    </list>\n\n    <list name=\"dmefct\">\n      <item>$$add_configuration_entry</item>\n      <item>$add_configuration_entry</item>\n      <item>$$add_container</item>\n      <item>$add_container</item>\n      <item>$$add_directory</item>\n      <item>$add_directory</item>\n      <item>$add_link</item>\n      <item>$add_object_property</item>\n      <item>$$add_reference</item>\n      <item>$add_reference</item>\n      <item>$add_reference_property</item>\n      <item>$add_toolbox</item>\n      <item>$$add_type</item>\n      <item>$add_versions</item>\n      <item>$browse_for_object</item>\n      <item>$$build_configuration</item>\n      <item>$build_configuration</item>\n      <item>$$change_configuration_references</item>\n      <item>$change_configuration_references</item>\n      <item>$$change_design_object_references</item>\n      <item>$change_design_object_references</item>\n      <item>$change_link_text</item>\n      <item>$change_location_map_entry</item>\n      <item>$$change_object_name</item>\n      <item>$change_object_name</item>\n      <item>$change_object_property</item>\n      <item>$$change_object_references</item>\n      <item>$change_object_references</item>\n      <item>$change_password</item>\n      <item>$change_protection</item>\n      <item>$change_reference_property</item>\n      <item>$change_reference_state</item>\n      <item>$change_version_depth</item>\n      <item>$check_references</item>\n      <item>$check_registries</item>\n      <item>$$clear_entry_filter</item>\n      <item>$$clear_global_status</item>\n      <item>$$clear_monitor</item>\n      <item>$$close_configuration</item>\n      <item>$close_hierarchy</item>\n      <item>$$close_versioned_object</item>\n      <item>$close_window</item>\n      <item>$$convert_configuration_references</item>\n      <item>$convert_configuration_references</item>\n      <item>$$convert_object_references</item>\n      <item>$convert_object_references</item>\n      <item>$$copy_configuration</item>\n      <item>$copy_configuration</item>\n      <item>$$copy_design_object</item>\n      <item>$copy_design_object</item>\n      <item>$$copy_object</item>\n      <item>$copy_object</item>\n      <item>$copy_version</item>\n      <item>$$create_configuration</item>\n      <item>$create_dm_category</item>\n      <item>$create_dm_cell</item>\n      <item>$create_dm_ext_lib</item>\n      <item>$create_dm_library</item>\n      <item>$create_dm_project</item>\n      <item>$create_dm_tech_category</item>\n      <item>$create_dm_tech_lib</item>\n      <item>$create_tech_config_object</item>\n      <item>$$create_versioned_object</item>\n      <item>$$delete_configuration</item>\n      <item>$delete_configuration</item>\n      <item>$delete_design_object</item>\n      <item>$delete_excess_versions</item>\n      <item>$$delete_object</item>\n      <item>$delete_object</item>\n      <item>$$delete_object_property</item>\n      <item>$delete_object_property</item>\n      <item>$$delete_reference</item>\n      <item>$delete_reference</item>\n      <item>$$delete_reference_handle</item>\n      <item>$$delete_reference_property</item>\n      <item>$delete_reference_property</item>\n      <item>$$delete_reference_property_handle</item>\n      <item>$$delete_version</item>\n      <item>$delete_version</item>\n      <item>$$delete_version_property</item>\n      <item>$descend_hierarchy_one_level</item>\n      <item>$descend_hierarchy_specify_level</item>\n      <item>$$duplicate_object</item>\n      <item>$edit_file</item>\n      <item>$empty_trash</item>\n      <item>$explore_contents</item>\n      <item>$explore_parent</item>\n      <item>$explore_reference_parent</item>\n      <item>$explore_references</item>\n      <item>$export_configuration_entries</item>\n      <item>$export_library</item>\n      <item>$export_location_map</item>\n      <item>$find_external_deps</item>\n      <item>$find_references</item>\n      <item>$$fix_relative_path</item>\n      <item>$$freeze_configuration</item>\n      <item>$freeze_configuration</item>\n      <item>$$freeze_version</item>\n      <item>$freeze_version</item>\n      <item>$get_area_selected_objects</item>\n      <item>$$get_children</item>\n      <item>$$get_configuration_entries</item>\n      <item>$$get_configuration_path</item>\n      <item>$$get_container_contents</item>\n      <item>$$get_date_last_modified</item>\n      <item>$get_default_tool</item>\n      <item>$$get_entry_version</item>\n      <item>$$get_fileset_members</item>\n      <item>$$get_hard_name</item>\n      <item>$$get_location_map</item>\n      <item>$$get_monitor_error_count</item>\n      <item>$$get_monitor_flag</item>\n      <item>$$get_monitor_verbosity</item>\n      <item>$$get_monitor_warning_count</item>\n      <item>$get_navigator_directory</item>\n      <item>$get_navigator_directory_hard</item>\n      <item>$get_next_tool_env</item>\n      <item>$$get_object_current_version</item>\n      <item>$$get_object_parent_path</item>\n      <item>$$get_object_path_filter</item>\n      <item>$get_object_pathname</item>\n      <item>$$get_object_properties</item>\n      <item>$$get_object_property_filter</item>\n      <item>$$get_object_property_value</item>\n      <item>$$get_object_protection</item>\n      <item>$$get_object_references</item>\n      <item>$$get_object_type</item>\n      <item>$get_object_type</item>\n      <item>$$get_object_type_filter</item>\n      <item>$get_object_version</item>\n      <item>$$get_object_versions</item>\n      <item>$$get_parent_entry</item>\n      <item>$$get_primaries</item>\n      <item>$$get_reference_properties</item>\n      <item>$$get_reference_properties_handle</item>\n      <item>$$get_reference_property_filter</item>\n      <item>$$get_reference_traversal</item>\n      <item>$$get_secondaries</item>\n      <item>$$get_soft_name</item>\n      <item>$$get_status_code</item>\n      <item>$$get_status_code_stack</item>\n      <item>$$get_status_messages</item>\n      <item>$get_subinvoke_mode</item>\n      <item>$$get_target_path</item>\n      <item>$get_technology</item>\n      <item>$get_toolbox_search_path</item>\n      <item>$get_tool_pathname</item>\n      <item>$get_tool_script</item>\n      <item>$get_tool_type</item>\n      <item>$$get_type_properties</item>\n      <item>$$get_type_property_value</item>\n      <item>$$get_version_depth</item>\n      <item>$$get_version_properties</item>\n      <item>$$get_working_directory</item>\n      <item>$goto_directory</item>\n      <item>$$handle_map_error</item>\n      <item>$$has_object_property</item>\n      <item>$$has_reference_property</item>\n      <item>$$has_reference_property_handle</item>\n      <item>$hide_secondary_entries</item>\n      <item>$hide_monitor</item>\n      <item>$import_classic_data</item>\n      <item>$import_custom_view</item>\n      <item>$import_design_kit</item>\n      <item>$import_ext_lib</item>\n      <item>$import_icstudio_library</item>\n      <item>$import_icstudio_project</item>\n      <item>$include_external_library</item>\n      <item>$invoke_bgd_tool</item>\n      <item>$invoke_tool</item>\n      <item>$$is_build_consistent</item>\n      <item>$$is_build_valid</item>\n      <item>$$is_configuration_edited</item>\n      <item>$$is_configuration_frozen</item>\n      <item>$$is_configuration_locked</item>\n      <item>$$is_container</item>\n      <item>$$is_directory</item>\n      <item>$$is_entry_container</item>\n      <item>$$is_entry_fixed</item>\n      <item>$$is_entry_primary</item>\n      <item>$$is_entry_retargetable</item>\n      <item>$$is_object_released</item>\n      <item>$$is_object_versioned</item>\n      <item>$$is_read_protected</item>\n      <item>$$is_relative_path</item>\n      <item>$$is_type_versioned</item>\n      <item>$$is_writable</item>\n      <item>$$is_write_protected</item>\n      <item>$list_references</item>\n      <item>$load_registry</item>\n      <item>$$lock_configuration</item>\n      <item>$lock_configuration</item>\n      <item>$$lock_object</item>\n      <item>$login_admin</item>\n      <item>$logged_in</item>\n      <item>$logout_admin</item>\n      <item>$maintain_hierarchy</item>\n      <item>$$monitor_global_status</item>\n      <item>$$move_design_object</item>\n      <item>$move_design_object</item>\n      <item>$$move_object</item>\n      <item>$move_object</item>\n      <item>$$object_complete</item>\n      <item>$$object_exists</item>\n      <item>$$open_configuration</item>\n      <item>$open_configuration_window</item>\n      <item>$$open_hierarchy</item>\n      <item>$open_navigator</item>\n      <item>$open_object</item>\n      <item>$open_read_only_editor</item>\n      <item>$open_session_monitor</item>\n      <item>$$open_tool</item>\n      <item>$open_tool</item>\n      <item>$open_tools_window</item>\n      <item>$open_trash_window</item>\n      <item>$open_types_window</item>\n      <item>$$open_versioned_object</item>\n      <item>$$prune_design_hierarchy</item>\n      <item>$$read_map</item>\n      <item>$read_map</item>\n      <item>$refresh_all</item>\n      <item>$$release_configuration</item>\n      <item>$release_configuration</item>\n      <item>$$release_object</item>\n      <item>$release_object</item>\n      <item>$$remove_configuration_entry</item>\n      <item>$remove_configuration_entry</item>\n      <item>$remove_external_library</item>\n      <item>$remove_toolbox</item>\n      <item>$report_configuration_info</item>\n      <item>$$report_configuration_references</item>\n      <item>$report_configuration_references</item>\n      <item>$report_entry_info</item>\n      <item>$$report_entry_verification</item>\n      <item>$report_entry_verification</item>\n      <item>$$report_global_status</item>\n      <item>$report_object_info</item>\n      <item>$report_reference_info</item>\n      <item>$report_tool_info</item>\n      <item>$report_type_info</item>\n      <item>$report_version_info</item>\n      <item>$$resolve_path</item>\n      <item>$$revert_version</item>\n      <item>$revert_version</item>\n      <item>$$salvage_object</item>\n      <item>$salvage_object</item>\n      <item>$$save_configuration</item>\n      <item>$save_configuration</item>\n      <item>$$save_configuration_as</item>\n      <item>$save_configuration_as</item>\n      <item>$$save_object</item>\n      <item>$save_toolbox_search_path</item>\n      <item>$search</item>\n      <item>$search_again</item>\n      <item>$select_all</item>\n      <item>$select_by_name</item>\n      <item>$select_by_library</item>\n      <item>$select_by_type</item>\n      <item>$select_config_entry</item>\n      <item>$select_object</item>\n      <item>$select_reference</item>\n      <item>$select_tool</item>\n      <item>$select_toolbox</item>\n      <item>$select_trash_object</item>\n      <item>$select_version</item>\n      <item>$set_build_rules</item>\n      <item>$$set_location_map_entry</item>\n      <item>$$set_monitor_flag</item>\n      <item>$$set_monitor_verbosity</item>\n      <item>$set_next_tool_env</item>\n      <item>$$set_object_path_filter</item>\n      <item>$$set_object_property</item>\n      <item>$$set_object_property_filter</item>\n      <item>$$set_object_type_filter</item>\n      <item>$set_project_refresh_heartbeat</item>\n      <item>$$set_protection</item>\n      <item>$$set_protection_numeric</item>\n      <item>$$set_reference_property</item>\n      <item>$$set_reference_property_filter</item>\n      <item>$$set_reference_property_handle</item>\n      <item>$$set_reference_traversal</item>\n      <item>$set_subinvoke_mode</item>\n      <item>$$set_target_path</item>\n      <item>$set_target_path</item>\n      <item>$set_technology</item>\n      <item>$set_toolbox_search_path</item>\n      <item>$$set_version_depth</item>\n      <item>$$set_version_property</item>\n      <item>$$set_working_directory</item>\n      <item>$set_working_directory</item>\n      <item>$setup_filter_active</item>\n      <item>$setup_filter_all</item>\n      <item>$setup_default_editor</item>\n      <item>$setup_iconic_window_layout</item>\n      <item>$setup_invoke_tool</item>\n      <item>$$setup_monitor</item>\n      <item>$setup_monitor</item>\n      <item>$setup_session_defaults</item>\n      <item>$setup_startup_windows</item>\n      <item>$show_all_files</item>\n      <item>$show_compiled_libs</item>\n      <item>$show_component_hierarchy</item>\n      <item>$show_custom_views</item>\n      <item>$show_directories</item>\n      <item>$show_ext_libs</item>\n      <item>$show_language_views</item>\n      <item>$show_layout_views</item>\n      <item>$$show_location_map</item>\n      <item>$show_location_map</item>\n      <item>$show_logic_views</item>\n      <item>$show_references</item>\n      <item>$show_monitor</item>\n      <item>$show_tech_libs</item>\n      <item>$show_versions</item>\n      <item>$trash_object</item>\n      <item>$$unfreeze_configuration</item>\n      <item>$unfreeze_configuration</item>\n      <item>$$unfreeze_version</item>\n      <item>$unfreeze_version</item>\n      <item>$$unlock_configuration</item>\n      <item>$unlock_configuration</item>\n      <item>$$unlock_object</item>\n      <item>$unselect_all</item>\n      <item>$unselect_by_name</item>\n      <item>$unselect_by_type</item>\n      <item>$unselect_config_entry</item>\n      <item>$unselect_object</item>\n      <item>$unselect_reference</item>\n      <item>$unselect_tool</item>\n      <item>$unselect_toolbox</item>\n      <item>$unselect_trash_object</item>\n      <item>$unselect_version</item>\n      <item>$unset_next_tool_env</item>\n      <item>$untrash_object</item>\n      <item>$$update_type</item>\n      <item>$update_window</item>\n      <item>$validate_technology</item>\n      <item>$view_by_icon</item>\n      <item>$view_by_name</item>\n      <item>$view_containment_hierarchy</item>\n      <item>$view_primary_hierarchy</item>\n      <item>$view_secondary_entries</item>\n      <item>$view_toolboxes</item>\n      <item>$view_tools</item>\n      <item>$write_default_startup_file</item>\n      <item>$$writeln_monitor</item>\n    </list>\n    <list name=\"idmefct\">\n      <item>$get_current_obj_hier_path</item>\n      <item>$get_current_obj_inst_list</item>\n      <item>$idw_dh_setup_display</item>\n      <item>$idw_report_hier</item>\n      <item>$idw_open_hierarchy_window</item>\n      <item>$inst_area_extend_selection</item>\n      <item>$inst_area_select_all_items</item>\n      <item>$inst_area_select_item</item>\n      <item>$inst_area_show_instances</item>\n      <item>$inst_area_unselect_all_items</item>\n      <item>$make_obj_current</item>\n      <item>$open_new_comp_hierarchy</item>\n      <item>$open_new_hierarchy</item>\n      <item>$select_obj</item>\n      <item>$show_instance</item>\n      <item>$show_n_levels</item>\n      <item>$set_font</item>\n      <item>$setup_comp_hierarchy_display</item>\n      <item>$setup_hierarchy_selection</item>\n      <item>$write_default_startup_file</item>\n      <item>$add_components</item>\n      <item>$add_labels_to_models</item>\n      <item>$collapse_object</item>\n      <item>$delete_labels_from_models</item>\n      <item>$delete_part_interfaces</item>\n      <item>$expand_object</item>\n      <item>$forget_components_edits</item>\n      <item>$hide_body_props</item>\n      <item>$hide_labels</item>\n      <item>$hide_model</item>\n      <item>$hide_pin_properties</item>\n      <item>$hide_pins</item>\n      <item>$register_models</item>\n      <item>$remove_components</item>\n      <item>$rename_part_interface</item>\n      <item>$report_body_prop_info</item>\n      <item>$report_component_info</item>\n      <item>$report_model_entry_info</item>\n      <item>$report_models_for_each_label</item>\n      <item>$report_model_info</item>\n      <item>$report_models_with_all_labels</item>\n      <item>$report_pin_info</item>\n      <item>$save_components_edits</item>\n      <item>$select_model_object</item>\n      <item>$select_object</item>\n      <item>$set_bgd_color</item>\n      <item>$set_bgd_color_title_items</item>\n      <item>$set_bgd_color_titles</item>\n      <item>$set_constraints</item>\n      <item>$set_default_part_interface</item>\n      <item>$set_fgd_color</item>\n      <item>$set_fgd_color_title_items</item>\n      <item>$set_fgd_color_titles</item>\n      <item>$set_font</item>\n      <item>$set_part_interface_font</item>\n      <item>$show_body_props</item>\n      <item>$show_labels</item>\n      <item>$show_model</item>\n      <item>$show_pins</item>\n      <item>$show_pin_properties</item>\n      <item>$unselect_model_object</item>\n      <item>$unselect_object</item>\n      <item>$validate_models</item>\n    </list>\n    <list name=\"fctattr\">\n      <item>quick_help</item>\n      <item>ref_help</item>\n    </list>\n\n    <list name=\"argqualifier\">\n      <item>optional</item>\n      <item>default</item>\n    </list>\n\n    <!-- plain IC AMPLE builtin types -->\n    <list name=\"types\">\n      <item>name</item>\n      <item>callable</item>\n      <item>enum</item>\n      <item>integer</item>\n      <item>location</item>\n      <item>name</item>\n      <item>number</item>\n      <item>pathname</item>\n      <item>polylocation</item>\n      <item>polyrectangle</item>\n      <item>real</item>\n      <item>rectangle</item>\n      <item>status</item>\n      <item>string</item>\n      <item>vector</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n\t<!-- org C definition: <RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\" beginRegion=\"PP\" firstNonSpace=\"true\" /> -->\n        <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"#pragma\"  firstNonSpace=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\n\n        <!-- use same coloring attributes of \"Data Type\" for now -->\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"argqualifier\"/>\n        <keyword attribute=\"Reserved Variables\" context=\"#stay\" String=\"resvar\"/>\n        <keyword attribute=\"Base Functions\"   context=\"#stay\" insensitive=\"true\" String=\"fctattr\" />\n\n        <keyword attribute=\"Base Functions\"      context=\"#stay\" String=\"builtinfct\" />\n        <keyword attribute=\"CUI Functions\"       context=\"#stay\" String=\"iccuifct\" />\n        <keyword attribute=\"Layout Functions\"    context=\"#stay\" String=\"icstnfct\" />\n        <keyword attribute=\"Schematic Functions\" context=\"#stay\" String=\"daicfct\" />\n        <keyword attribute=\"DVE Functions\"       context=\"#stay\" String=\"dveicfct\" />\n\n        <keyword attribute=\"CUI Functions\"       context=\"#stay\" String=\"idmefct\" />\n        <keyword attribute=\"CUI Functions\"       context=\"#stay\" String=\"dmefct\" />\n\n        <DetectIdentifier />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\"   endRegion=\"Brace1\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar      attribute=\"Char\"    context=\"#stay\"/>\n        <DetectChar   attribute=\"String\"  context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <AnyChar      attribute=\"Symbol\"  context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"meg\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"f\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"p\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"n\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"u\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"m\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"k\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"g\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Float\" context=\"#pop\" String=\"t\" insensitive=\"true\"/>\n      </context>\n\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"meg\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"f\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"p\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"n\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"u\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"m\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"k\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"g\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"t\" insensitive=\"true\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue  attribute=\"String\"      context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar    attribute=\"String\"      context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n<!--\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n-->\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <DetectSpaces />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <!-- <DetectChar attribute=\"String\" context=\"String\" char=\"&at;\"/> -->\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n\n      <itemData name=\"Reserved Variables\"  defStyleNum=\"dsBuiltIn\" />\n      <itemData name=\"Base Functions\"      defStyleNum=\"dsFunction\" />\n      <itemData name=\"CUI Functions\"       defStyleNum=\"dsFunction\" />\n      <itemData name=\"Layout Functions\"    defStyleNum=\"dsFunction\" />\n      <itemData name=\"Schematic Functions\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"DVE Functions\"       defStyleNum=\"dsFunction\" />\n\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\"/>\n<!--       <itemData name=\"Prep. Lib\"    defStyleNum=\"dsImport\"/> -->\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ansforth94.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  *************************************************************************\n\n  ANS Forth 94 syntax highlighting for Kate.\n\n  Copyright (C) 2011, Mark Corbin (mark@dibsco.co.uk)\n\n  *************************************************************************\n\n  This library is free software; you can redistribute it and/or modify it\n  under the terms of the GNU Lesser General Public License as published by\n  the Free Software Foundation; either version 2.1 of the License, or\n  (at your option) any later version.\n\n  This library 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 Lesser\n  General Public License for more details.\n\n  You should have received a copy of the GNU Lesser General Public License\n  along with this library; if not, write to the Free Software\n  Foundation, Inc., 51 Franklin Street, Fifth Floor,\n  Boston, MA  02110-1301  USA\n\n  *************************************************************************\n\n  Version 1.0 (23-11-11)\n    - Added additional file extensions.\n\n  Version 0.1 (08-11-11)\n    - Initial release for comment.\n\n  *************************************************************************\n-->\n<language name=\"ANS-Forth94\" version=\"4\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.4th;*.4TH;*.f;*.F;*.frt;*.FRT;*.fs;*.FS;*.fth;*.FTH;*.seq;*.SEQ\" mimetype=\"\" author=\"Mark Corbin (mark@dibsco.co.uk)\" license=\"LGPLv2.1+\" priority=\"5\">\n  <highlighting>\n    <list name=\"core-keywords\">\n      <item>!</item>\n      <item>#</item>\n      <item>#&gt;</item> <!-- #> -->\n      <item>#S</item>\n      <item>&apos;</item> <!-- ' -->\n      <item>(</item>\n      <item>*</item>\n      <item>*/</item>\n      <item>*/MOD</item>\n      <item>+</item>\n      <item>+!</item>\n      <item>+LOOP</item>\n      <item>,</item>\n      <item>-</item>\n      <item>.</item>\n      <item>.&quot;</item> <!-- .\" -->\n      <item>/</item>\n      <item>/MOD</item>\n      <item>0&lt;</item> <!-- 0< -->\n      <item>0=</item>\n      <item>1+</item>\n      <item>1-</item>\n      <item>2!</item>\n      <item>2*</item>\n      <item>2/</item>\n      <item>2@</item>\n      <item>2DROP</item>\n      <item>2DUP</item>\n      <item>2OVER</item>\n      <item>2SWAP</item>\n      <item>:</item>\n      <item>;</item>\n      <item>&lt;</item> <!-- < -->\n      <item>&lt;#</item> <!-- <# -->\n      <item>=</item>\n      <item>&gt;</item> <!-- > -->\n      <item>&gt;BODY</item> <!-- >BODY -->\n      <item>&gt;IN</item> <!-- >IN -->\n      <item>&gt;NUMBER</item> <!-- >NUMBER -->\n      <item>&gt;R</item> <!-- >R -->\n      <item>?DUP</item>\n      <item>@</item>\n      <item>ABORT</item>\n      <item>ABORT&quot;</item> <!-- ABORT\" -->\n      <item>ABS</item>\n      <item>ACCEPT</item>\n      <item>ALIGN</item>\n      <item>ALIGNED</item>\n      <item>ALLOT</item>\n      <item>AND</item>\n      <item>BASE</item>\n      <item>BEGIN</item>\n      <item>BL</item>\n      <item>C!</item>\n      <item>C,</item>\n      <item>C@</item>\n      <item>CELL+</item>\n      <item>CELLS</item>\n      <item>CHAR</item>\n      <item>CHAR+</item>\n      <item>CHARS</item>\n      <item>CONSTANT</item>\n      <item>COUNT</item>\n      <item>CR</item>\n      <item>CREATE</item>\n      <item>DECIMAL</item>\n      <item>DEPTH</item>\n      <item>DO</item>\n      <item>DOES&gt;</item> <!-- DOES> -->\n      <item>DROP</item>\n      <item>DUP</item>\n      <item>ELSE</item>\n      <item>EMIT</item>\n      <item>ENVIRONMENT?</item>\n      <item>EVALUATE</item>\n      <item>EXECUTE</item>\n      <item>EXIT</item>\n      <item>FILL</item>\n      <item>FIND</item>\n      <item>FM/MOD</item>\n      <item>HERE</item>\n      <item>HOLD</item>\n      <item>I</item>\n      <item>IF</item>\n      <item>IMMEDIATE</item>\n      <item>INVERT</item>\n      <item>J</item>\n      <item>KEY</item>\n      <item>LEAVE</item>\n      <item>LITERAL</item>\n      <item>LOOP</item>\n      <item>LSHIFT</item>\n      <item>M*</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>MOD</item>\n      <item>MOVE</item>\n      <item>NEGATE</item>\n      <item>OR</item>\n      <item>OVER</item>\n      <item>POSTPONE</item>\n      <item>QUIT</item>\n      <item>R&gt;</item> <!-- R> -->\n      <item>R@</item>\n      <item>RECURSE</item>\n      <item>REPEAT</item>\n      <item>ROT</item>\n      <item>RSHIFT</item>\n      <item>S&quot;</item> <!-- S\" -->\n      <item>S&gt;D</item> <!-- S>D -->\n      <item>SIGN</item>\n      <item>SM/REM</item>\n      <item>SOURCE</item>\n      <item>SPACE</item>\n      <item>SPACES</item>\n      <item>STATE</item>\n      <item>SWAP</item>\n      <item>THEN</item>\n      <item>TYPE</item>\n      <item>U.</item>\n      <item>U&lt;</item> <!-- U< -->\n      <item>UM*</item>\n      <item>UM/MOD</item>\n      <item>UNLOOP</item>\n      <item>UNTIL</item>\n      <item>VARIABLE</item>\n      <item>WHILE</item>\n      <item>WORD</item>\n      <item>XOR</item>\n      <item>[</item>\n      <item>[&apos;]</item> <!-- ['] -->\n      <item>[CHAR]</item>\n      <item>]</item>\n    </list>\n    <list name=\"core-ext-keywords\">\n      <item>.(</item>\n      <item>.R</item>\n      <item>0&lt;&gt;</item> <!-- 0<> -->\n      <item>0&gt;</item> <!-- 0> -->\n      <item>2&gt;R</item> <!-- 2>R -->\n      <item>2R&gt;</item> <!-- 2R> -->\n      <item>2R@</item>\n      <item>:NONAME</item>\n      <item>&lt;&gt;</item> <!-- <> -->\n      <item>?DO</item>\n      <item>AGAIN</item>\n      <item>C&quot;</item> <!-- C\" -->\n      <item>CASE</item>\n      <item>COMPILE,</item>\n      <item>ENDCASE</item>\n      <item>ENDOF</item>\n      <item>ERASE</item>\n      <item>FALSE</item>\n      <item>HEX</item>\n      <item>MARKER</item>\n      <item>NIP</item>\n      <item>OF</item>\n      <item>PAD</item>\n      <item>PARSE</item>\n      <item>PICK</item>\n      <item>REFILL</item>\n      <item>RESTORE-INPUT</item>\n      <item>ROLL</item>\n      <item>SAVE-INPUT</item>\n      <item>SOURCE-ID</item>\n      <item>TO</item>\n      <item>TRUE</item>\n      <item>TUCK</item>\n      <item>U.R</item>\n      <item>U&gt;</item> <!-- U> -->\n      <item>UNUSED</item>\n      <item>VALUE</item>\n      <item>WITHIN</item>\n      <item>[COMPILE]</item>\n      <item>\\</item>\n    </list>\n    <list name=\"obsolete-core-ext-keywords\">\n      <item>#TIB</item>\n      <item>CONVERT</item>\n      <item>EXPECT</item>\n      <item>QUERY</item>\n      <item>SPAN</item>\n      <item>TIB</item>\n    </list>\n    <list name=\"block-keywords\">\n      <item>BLK</item>\n      <item>BLOCK</item>\n      <item>BUFFER</item>\n      <item>EVALUATE</item>\n      <item>FLUSH</item>\n      <item>LOAD</item>\n      <item>SAVE-BUFFERS</item>\n      <item>UPDATE</item>\n    </list>\n    <list name=\"block-ext-keywords\">\n      <item>EMPTY-BUFFERS</item>\n      <item>LIST</item>\n      <item>REFILL</item>\n      <item>SCR</item>\n      <item>THRU</item>\n      <item>\\</item>\n    </list>\n    <list name=\"double-keywords\">\n      <item>2CONSTANT</item>\n      <item>2LITERAL</item>\n      <item>2VARIABLE</item>\n      <item>D+</item>\n      <item>D-</item>\n      <item>D.</item>\n      <item>D.R</item>\n      <item>D0&lt;</item> <!-- D0< -->\n      <item>D0=</item>\n      <item>D2*</item>\n      <item>D2/</item>\n      <item>D&lt;</item> <!-- D< -->\n      <item>D=</item>\n      <item>D&gt;S</item> <!-- D>S -->\n      <item>DABS</item>\n      <item>DMAX</item>\n      <item>DMIN</item>\n      <item>DNEGATE</item>\n      <item>M*/</item>\n      <item>M+</item>\n    </list>\n    <list name=\"double-ext-keywords\">\n      <item>2ROT</item>\n      <item>DU&lt;</item> <!-- DU< -->\n    </list>\n    <list name=\"exception-keywords\">\n      <item>CATCH</item>\n      <item>THROW</item>\n    </list>\n    <list name=\"exception-ext-keywords\">\n      <item>ABORT</item>\n      <item>ABORT&quot;</item> <!-- ABORT\" -->\n    </list>\n    <list name=\"facility-keywords\">\n      <item>AT-XY</item>\n      <item>KEY?</item>\n      <item>PAGE</item>\n    </list>\n    <list name=\"facility-ext-keywords\">\n      <item>EKEY</item>\n      <item>EKEY&gt;CHAR</item> <!-- EKEY>CHAR -->\n      <item>EKEY?</item>\n      <item>EMIT?</item>\n      <item>MS</item>\n      <item>TIME&amp;DATE</item> <!-- TIME&DATE -->\n    </list>\n    <list name=\"file-keywords\">\n      <item>(</item>\n      <item>BIN</item>\n      <item>CLOSE-FILE</item>\n      <item>CREATE-FILE</item>\n      <item>DELETE-FILE</item>\n      <item>FILE-POSITION</item>\n      <item>FILE-SIZE</item>\n      <item>INCLUDE-FILE</item>\n      <item>INCLUDED</item>\n      <item>OPEN-FILE</item>\n      <item>R/O</item>\n      <item>R/W</item>\n      <item>READ-FILE</item>\n      <item>READ-LINE</item>\n      <item>REPOSITION-FILE</item>\n      <item>RESIZE-FILE</item>\n      <item>S&quot;</item> <!-- S\" -->\n      <item>SOURCE-ID</item>\n      <item>W/O</item>\n      <item>WRITE-FILE</item>\n      <item>WRITE-LINE</item>\n    </list>\n    <list name=\"file-ext-keywords\">\n      <item>FILE-STATUS</item>\n      <item>FLUSH-FILE</item>\n      <item>REFILL</item>\n      <item>RENAME-FILE</item>\n    </list>\n    <list name=\"floating-keywords\">\n      <item>&gt;FLOAT</item> <!-- >FLOAT -->\n      <item>D&gt;F</item> <!-- D>F -->\n      <item>F!</item>\n      <item>F*</item>\n      <item>F+</item>\n      <item>F-</item>\n      <item>F/</item>\n      <item>F0&lt;</item> <!-- F0< -->\n      <item>F0=</item>\n      <item>F&lt;</item> <!-- F< -->\n      <item>F&gt;D</item> <!-- F>D -->\n      <item>F@</item>\n      <item>FALIGN</item>\n      <item>FALIGNED</item>\n      <item>FCONSTANT</item>\n      <item>FDEPTH</item>\n      <item>FDROP</item>\n      <item>FDUP</item>\n      <item>FLITERAL</item>\n      <item>FLOAT+</item>\n      <item>FLOATS</item>\n      <item>FLOOR</item>\n      <item>FMAX</item>\n      <item>FMIN</item>\n      <item>FNEGATE</item>\n      <item>FOVER</item>\n      <item>FROT</item>\n      <item>FROUND</item>\n      <item>FSWAP</item>\n      <item>FVARIABLE</item>\n      <item>REPRESENT</item>\n    </list>\n    <list name=\"floating-ext-keywords\">\n      <item>DF!</item>\n      <item>DF@</item>\n      <item>DFALIGN</item>\n      <item>DFALIGNED</item>\n      <item>DFLOAT+</item>\n      <item>DFLOATS</item>\n      <item>F**</item>\n      <item>F.</item>\n      <item>FABS</item>\n      <item>FACOS</item>\n      <item>FACOSH</item>\n      <item>FALOG</item>\n      <item>FASIN</item>\n      <item>FASINH</item>\n      <item>FATAN</item>\n      <item>FATAN2</item>\n      <item>FATANH</item>\n      <item>FCOS</item>\n      <item>FCOSH</item>\n      <item>FE.</item>\n      <item>FEXP</item>\n      <item>FEXPM1</item>\n      <item>FLN</item>\n      <item>FLNP1</item>\n      <item>FLOG</item>\n      <item>FS.</item>\n      <item>FSIN</item>\n      <item>FSINCOS</item>\n      <item>FSINH</item>\n      <item>FSQRT</item>\n      <item>FTAN</item>\n      <item>FTANH</item>\n      <item>F~</item>\n      <item>PRECISION</item>\n      <item>SET-PRECISION</item>\n      <item>SF!</item>\n      <item>SF@</item>\n      <item>SFALIGN</item>\n      <item>SFALIGNED</item>\n      <item>SFLOAT+</item>\n      <item>SFLOATS</item>\n    </list>\n    <list name=\"local-keywords\">\n      <item>(LOCAL)</item>\n      <item>TO</item>\n    </list>\n    <list name=\"local-ext-keywords\">\n      <item>LOCALS|</item>\n    </list>\n    <list name=\"memory-keywords\">\n      <item>ALLOCATE</item>\n      <item>FREE</item>\n      <item>RESIZE</item>\n    </list>\n    <list name=\"tools-keywords\">\n      <item>.S</item>\n      <item>?</item>\n      <item>DUMP</item>\n      <item>SEE</item>\n      <item>WORDS</item>\n    </list>\n    <list name=\"tools-ext-keywords\">\n      <item>;CODE</item>\n      <item>AHEAD</item>\n      <item>ASSEMBLER</item>\n      <item>BYE</item>\n      <item>CODE</item>\n      <item>CS-PICK</item>\n      <item>CS-ROLL</item>\n      <item>EDITOR</item>\n      <item>STATE</item>\n      <item>[ELSE]</item>\n      <item>[IF]</item>\n      <item>[THEN]</item>\n    </list>\n    <list name=\"obsolete-tools-ext-keywords\">\n      <item>FORGET</item>\n    </list>\n    <list name=\"search-keywords\">\n      <item>DEFINITIONS</item>\n      <item>FIND</item>\n      <item>FORTH-WORDLIST</item>\n      <item>GET-CURRENT</item>\n      <item>GET-ORDER</item>\n      <item>SEARCH-WORDLIST</item>\n      <item>SET-CURRENT</item>\n      <item>SET-ORDER</item>\n      <item>WORDLIST</item>\n    </list>\n    <list name=\"search-ext-keywords\">\n      <item>ALSO</item>\n      <item>FORTH</item>\n      <item>ONLY</item>\n      <item>ORDER</item>\n      <item>PREVIOUS</item>\n    </list>\n    <list name=\"string-keywords\">\n      <item>-TRAILING</item>\n      <item>/STRING</item>\n      <item>BLANK</item>\n      <item>CMOVE</item>\n      <item>CMOVE&gt;</item> <!-- CMOVE> -->\n      <item>COMPARE</item>\n      <item>SEARCH</item>\n      <item>SLITERAL</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t<DetectSpaces/>\n        <RegExpr attribute=\"Core Keyword\" context=\"Comment\" String=\"(^|\\s+)[\\(]($|\\s+)\" beginRegion=\"comment\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"Char\" insensitive=\"true\" String=\"(^|\\s+)(CHAR|[[]CHAR[]])($|\\s+)\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"#stay\" insensitive=\"true\" String=\"(^|\\s+)(BEGIN|DO|IF)($|\\s+)\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"#stay\" insensitive=\"true\" String=\"(^|\\s+)([;]|LOOP|[+]LOOP|THEN|REPEAT|UNTIL)($|\\s+)\" endRegion=\"block\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"Word\" insensitive=\"true\" String=\"(^|\\s+)([:])($|\\s+)\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"Word\" insensitive=\"true\" String=\"(^|\\s+)([']|CREATE|POSTPONE)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"#stay\" insensitive=\"true\" String=\"(^|\\s+)ELSE($|\\s+)\" endRegion=\"block\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"String\" insensitive=\"true\" String=\"(^|\\s+)([.]&quot;|ABORT&quot;|S&quot;)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"Parse String\" insensitive=\"true\" String=\"(^|\\s+)(WORD)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"Constant\" insensitive=\"true\" String=\"(^|\\s+)(CONSTANT)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Keyword\" context=\"Variable\" insensitive=\"true\" String=\"(^|\\s+)(VARIABLE)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"Single Comment\" String=\"(^|\\s+)[\\\\]($|\\s+)\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"#stay\" insensitive=\"true\" String=\"(^|\\s+)([?]DO|CASE|OF)($|\\s+)\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"#stay\" insensitive=\"true\" String=\"(^|\\s+)(AGAIN|ENDCASE|ENDOF)($|\\s+)\" endRegion=\"block\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"Word\" insensitive=\"true\" String=\"(^|\\s+)(MARKER|[[]COMPILE[]])($|\\s+)\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"String\" insensitive=\"true\" String=\"(^|\\s+)(C&quot;)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"Parse String\" insensitive=\"true\" String=\"(^|\\s+)(PARSE)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"Display String\" String=\"(^|\\s+)([\\.][\\(])($|\\s+)\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"Variable\" insensitive=\"true\" String=\"(^|\\s+)(TO)($|\\s+)\"/>\n        <RegExpr attribute=\"Core Ext Keyword\" context=\"Variable\" insensitive=\"true\" String=\"(^|\\s+)(VALUE)($|\\s+)\"/>\n        <RegExpr attribute=\"Double Keyword\" context=\"Constant\" insensitive=\"true\" String=\"(^|\\s+)(2CONSTANT)($|\\s+)\"/>\n        <RegExpr attribute=\"Double Keyword\" context=\"Variable\" insensitive=\"true\" String=\"(^|\\s+)(2VARIABLE)($|\\s+)\"/>\n        <RegExpr attribute=\"Floating Keyword\" context=\"Constant\" insensitive=\"true\" String=\"(^|\\s+)(FCONSTANT)($|\\s+)\"/>\n        <RegExpr attribute=\"Floating Keyword\" context=\"Variable\" insensitive=\"true\" String=\"(^|\\s+)(FVARIABLE)($|\\s+)\"/>\n        <RegExpr attribute=\"Local Ext Keyword\" context=\"Local\" insensitive=\"true\" String=\"(^|\\s+)(LOCALS\\|)($|\\s+)\"/>\n        <RegExpr attribute=\"Tools Keyword\" context=\"Word\" insensitive=\"true\" String=\"(^|\\s+)(SEE)($|\\s+)\"/>\n        <RegExpr attribute=\"Tools Ext Keyword\" context=\"Word\" insensitive=\"true\" String=\"(^|\\s+)(CODE)($|\\s+)\"/>\n        <RegExpr attribute=\"Obs Tools Ext Keyword\" context=\"Word\" insensitive=\"true\" String=\"(^|\\s+)(FORGET)($|\\s+)\"/>\n\n        <keyword attribute=\"Core Keyword\" context=\"#stay\" String=\"core-keywords\"/>\n        <keyword attribute=\"Core Ext Keyword\" context=\"#stay\" String=\"core-ext-keywords\"/>\n        <keyword attribute=\"Obs Core Ext Keyword\" context=\"#stay\" String=\"obsolete-core-ext-keywords\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"block-keywords\"/>\n        <keyword attribute=\"Block Ext Keyword\" context=\"#stay\" String=\"block-ext-keywords\"/>\n        <keyword attribute=\"Double Keyword\" context=\"#stay\" String=\"double-keywords\"/>\n        <keyword attribute=\"Double Ext Keyword\" context=\"#stay\" String=\"double-ext-keywords\"/>\n        <keyword attribute=\"Exception Keyword\" context=\"#stay\" String=\"exception-keywords\"/>\n        <keyword attribute=\"Exception Ext Keyword\" context=\"#stay\" String=\"exception-ext-keywords\"/>\n        <keyword attribute=\"Facility Keyword\" context=\"#stay\" String=\"facility-keywords\"/>\n        <keyword attribute=\"Facility Ext Keyword\" context=\"#stay\" String=\"facility-ext-keywords\"/>\n        <keyword attribute=\"File Keyword\" context=\"#stay\" String=\"file-keywords\"/>\n        <keyword attribute=\"File Ext Keyword\" context=\"#stay\" String=\"file-ext-keywords\"/>\n        <keyword attribute=\"Floating Keyword\" context=\"#stay\" String=\"floating-keywords\"/>\n        <keyword attribute=\"Floating Ext Keyword\" context=\"#stay\" String=\"floating-ext-keywords\"/>\n        <keyword attribute=\"Local Keyword\" context=\"#stay\" String=\"local-keywords\"/>\n        <keyword attribute=\"Local Ext Keyword\" context=\"#stay\" String=\"local-ext-keywords\"/>\n        <keyword attribute=\"Memory Keyword\" context=\"#stay\" String=\"memory-keywords\"/>\n        <keyword attribute=\"Tools Keyword\" context=\"#stay\" String=\"tools-keywords\"/>\n        <keyword attribute=\"Tools Ext Keyword\" context=\"#stay\" String=\"tools-ext-keywords\"/>\n        <keyword attribute=\"Obs Tools Ext Keyword\" context=\"#stay\" String=\"obsolete-tools-ext-keywords\"/>\n        <keyword attribute=\"Search Keyword\" context=\"#stay\" String=\"search-keywords\"/>\n        <keyword attribute=\"Search Ext Keyword\" context=\"#stay\" String=\"search-ext-keywords\"/>\n        <keyword attribute=\"String Keyword\" context=\"#stay\" String=\"string-keywords\"/>\n\n        <RegExpr attribute=\"Single Number\" context=\"#stay\" String=\"(^|\\s+)([-]?[0-9]+)($|\\s+)\"/>\n        <RegExpr attribute=\"Double Number\" context=\"#stay\" String=\"(^|\\s+)([-]?[0-9]+[.][0-9]*)($|\\s+)\"/>\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"(^|\\s+)([+]|[-])?([0-9]+[.]?[0-9]*)(E|e)([+]|[-])?([0-9]*)($|\\s+)\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment\">\n        <DetectChar attribute=\"Core Keyword\" context=\"#pop\" char=\")\" endRegion=\"comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Single Comment\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Display String\">\n        <DetectChar attribute=\"Core Keyword\" context=\"#pop\" char=\")\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <DetectChar attribute=\"Core Keyword\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"Parse String\">\n        <DetectChar attribute=\"Core Keyword\" context=\"#pop\" char=\" \"/>\n      </context>\n      <context attribute=\"Word\" lineEndContext=\"#pop\" name=\"Word\">\n        <DetectChar attribute=\"Word\" context=\"#pop\" char=\" \"/>\n      </context>\n      <context attribute=\"Char\" lineEndContext=\"#pop\" name=\"Char\">\n        <DetectChar attribute=\"Char\" context=\"#pop\" char=\" \"/>\n      </context>\n      <context attribute=\"Constant\" lineEndContext=\"#pop\" name=\"Constant\">\n        <DetectChar attribute=\"Constant\" context=\"#pop\" char=\" \"/>\n      </context>\n      <context attribute=\"Variable\" lineEndContext=\"#pop\" name=\"Variable\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\" \"/>\n      </context>\n      <context attribute=\"Local Variable\" lineEndContext=\"#pop\" name=\"Local\">\n        <DetectChar attribute=\"Local Ext Keyword\" context=\"#pop\" char=\"|\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Core Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Core Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Obs Core Ext Keyword\" defStyleNum=\"dsKeyword\" color=\"#ff0000\" spellChecking=\"false\"/>\n      <itemData name=\"Block Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Block Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Double Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Double Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Exception Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Exception Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Facility Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Facility Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"File Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"File Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Floating Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Floating Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Local Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Local Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Memory Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Tools Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Tools Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Obs Tools Ext Keyword\" defStyleNum=\"dsKeyword\" color=\"#ff0000\" spellChecking=\"false\"/>\n      <itemData name=\"Search Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Search Ext Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"String Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Single Number\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Double Number\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Word\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Local Variable\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" weakDeliminator=\"!£$%^&amp;#&apos;~|\\(){}*+,-./=@:;&lt;&gt;&quot;?[]\"/>\n    <comments>\n      <comment name=\"multiLine\" start=\"( \" end=\")\" region=\"comment\"/>\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ansic89.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"ANSI C89\" section=\"Sources\"\n          version=\"5\" kateversion=\"5.0\"\n          indenter=\"cstyle\"\n          extensions=\"*.c;*.C;*.h\"\n          mimetype=\"text/x-csrc;text/x-c++src;text/x-chdr\"\n          priority=\"2\"\n          author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>enum</item>\n      <item>extern</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>return</item>\n      <item>sizeof</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>typedef</item>\n      <item>union</item>\n      <item>while</item>\n    </list>\n    <list name=\"types\">\n      <item>auto</item>\n      <item>char</item>\n      <item>const</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>register</item>\n      <item>short</item>\n      <item>signed</item>\n      <item>static</item>\n      <item>unsigned</item>\n      <item>void</item>\n      <item>volatile</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\" beginRegion=\"Outscoped\" firstNonSpace=\"true\" />\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\" firstNonSpace=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <DetectIdentifier />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"*\" beginRegion=\"blockcomment\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"comment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"blockcomment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"Define\" String=\"define.*((?=\\\\))\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"define.*\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"*\" beginRegion=\"blockcomment\"/>\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"Outscoped\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*(endif|else|elif)\" endRegion=\"Outscoped\" firstNonSpace=\"true\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"Outscoped\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"Outscoped\" firstNonSpace=\"true\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Prep. Lib\"    defStyleNum=\"dsImport\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ansys.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Ansys\" version=\"6\" kateversion=\"5.0\" section=\"Scientific\" extensions=\"*.ans\" author=\"Giovanni Bacci (giovanni@castellodilari.it)\" license=\"LGPL\" >\n<highlighting>\n\t<list name=\"session_cmds\">\n\t\t<item>/BATCH</item>\n\t\t<item>/CONFIG</item>\n\t\t<item>/CWD</item>\n\t\t<item>/EOF</item>\n\t\t<item>/EXIT</item>\n\t\t<item>/FILNAME</item>\n\t\t<item>HELP</item>\n\t\t<item>/INPUT</item>\n\t\t<item>KEYW</item>\n\t\t<item>MEMM</item>\n\t\t<item>/MENU</item>\n\t\t<item>/MSTART</item>\n\t\t<item>/NERR</item>\n\t\t<item>/OUTPUT</item>\n\t\t<item>/STATUS</item>\n\t\t<item>/SYP</item>\n\t\t<item>/SYS</item>\n\t\t<item>/UI</item>\n\t\t<item>/UIS</item>\n\t\t<item>/AUX2</item>\n\t\t<item>/AUX3</item>\n\t\t<item>/AUX12</item>\n\t\t<item>/AUX15</item>\n\t\t<item>FINISH</item>\n\t\t<item>/OPT</item>\n\t\t<item>/POST1</item>\n\t\t<item>/POST26</item>\n\t\t<item>/PREP7</item>\n\t\t<item>/QUIT</item>\n\t\t<item>/RUNST</item>\n\t\t<item>/SOLU</item>\n\t\t<item>/ASSIGN</item>\n\t\t<item>/CLOG</item>\n\t\t<item>/COPY</item>\n\t\t<item>/DELETE</item>\n\t\t<item>/FDELE</item>\n\t\t<item>/FTYPE</item>\n\t\t<item>LGWRITE</item>\n\t\t<item>*LIST</item>\n\t\t<item>/RENAME</item>\n\t\t<item>/COM</item>\n\t\t<item>/GO</item>\n\t\t<item>/GOLIST</item>\n\t\t<item>/GOPR</item>\n\t\t<item>/NOLIST</item>\n\t\t<item>/NOPR</item>\n\t</list>\n\t<list name=\"database_cmds\">\n\t\t<item>/CLEAR</item>\n\t\t<item>RESUME</item>\n\t\t<item>SAVE</item>\n\t\t<item>/SMBC</item>\n\t\t<item>STAT</item>\n\t\t<item>/STITLE</item>\n\t\t<item>/TITLE</item>\n\t\t<item>UNDO</item>\n\t\t<item>/UNITS</item>\n\t\t<item>ALLSEL</item>\n\t\t<item>ASLL</item>\n\t\t<item>ASEL</item>\n\t\t<item>ASLV</item>\n\t\t<item>DOFSEL</item>\n\t\t<item>ESEL</item>\n\t\t<item>ESLA</item>\n\t\t<item>ESLL</item>\n\t\t<item>ESLN</item>\n\t\t<item>ESLV</item>\n\t\t<item>KSEL</item>\n\t\t<item>KSLL</item>\n\t\t<item>KSLN</item>\n\t\t<item>LSEL</item>\n\t\t<item>LSLA</item>\n\t\t<item>LSLK</item>\n\t\t<item>NSEL</item>\n\t\t<item>NSLA</item>\n\t\t<item>NSLE</item>\n\t\t<item>NSLK</item>\n\t\t<item>NSLL</item>\n\t\t<item>NSLV</item>\n\t\t<item>PARTSEL</item>\n\t\t<item>VSEL</item>\n\t\t<item>VSLA</item>\n\t\t<item>CM</item>\n\t\t<item>CMDELE</item>\n\t\t<item>CMEDIT</item>\n\t\t<item>CMGRP</item>\n\t\t<item>CMLIST</item>\n\t\t<item>CMMOD</item>\n\t\t<item>CMPLOT</item>\n\t\t<item>CMSEL</item>\n\t\t<item>KWPAVE</item>\n\t\t<item>KWPLAN</item>\n\t\t<item>LWPLAN</item>\n\t\t<item>NWPAVE</item>\n\t\t<item>NWPLAN</item>\n\t\t<item>WPAVE</item>\n\t\t<item>WPCSYS</item>\n\t\t<item>WPLANE</item>\n\t\t<item>WPOFFS</item>\n\t\t<item>WPROTA</item>\n\t\t<item>WPSTYL</item>\n\t\t<item>CLOCAL</item>\n\t\t<item>CS</item>\n\t\t<item>CSCIR</item>\n\t\t<item>CSDELE</item>\n\t\t<item>CSKP</item>\n\t\t<item>CSLIST</item>\n\t\t<item>CSWPLA</item>\n\t\t<item>CSYS</item>\n\t\t<item>LOCAL</item>\n\t\t<item>FITEM</item>\n\t\t<item>FLST</item>\n\t</list>\n\t<list name=\"graphic_cmds\">\n\t\t<item>/CMAP</item>\n\t\t<item>/COLOR</item>\n\t\t<item>/DEVICE</item>\n\t\t<item>DSYS</item>\n\t\t<item>/DV3D</item>\n\t\t<item>/ERASE</item>\n\t\t<item>ERASE</item>\n\t\t<item>/GCMD</item>\n\t\t<item>/GCOLUMN</item>\n\t\t<item>/GFILE</item>\n\t\t<item>GPLOT</item>\n\t\t<item>/GRAPHICS</item>\n\t\t<item>/GRESUME</item>\n\t\t<item>/GSAVE</item>\n\t\t<item>/GTYPE</item>\n\t\t<item>HPGL</item>\n\t\t<item>/IMAGE</item>\n\t\t<item>IMMED</item>\n\t\t<item>JPEG</item>\n\t\t<item>/MREP</item>\n\t\t<item>/NOERASE</item>\n\t\t<item>/PCOPY</item>\n\t\t<item>PNGR</item>\n\t\t<item>PSCR</item>\n\t\t<item>/PSTATUS</item>\n\t\t<item>/REPLOT</item>\n\t\t<item>/RESET</item>\n\t\t<item>/SEG</item>\n\t\t<item>/SHOW</item>\n\t\t<item>TIFF</item>\n\t\t<item>/WINDOW</item>\n\t\t<item>/ANGLE</item>\n\t\t<item>/AUTO</item>\n\t\t<item>/DIST</item>\n\t\t<item>/FOCUS</item>\n\t\t<item>/USER</item>\n\t\t<item>/VCONE</item>\n\t\t<item>/VIEW</item>\n\t\t<item>/VUP</item>\n\t\t<item>/XFRM</item>\n\t\t<item>/ZOOM</item>\n\t\t<item>/DSCALE</item>\n\t\t<item>/ICLWID</item>\n\t\t<item>/ICSCALE</item>\n\t\t<item>/RATIO</item>\n\t\t<item>/SHRINK</item>\n\t\t<item>/SSCALE</item>\n\t\t<item>/TXTRE</item>\n\t\t<item>/VSCALE</item>\n\t\t<item>/CPLANE</item>\n\t\t<item>/CTYPE</item>\n\t\t<item>/EDGE</item>\n\t\t<item>/ESHAPE</item>\n\t\t<item>/FACET</item>\n\t\t<item>/GLINE</item>\n\t\t<item>/GMARKER</item>\n\t\t<item>GMFACE</item>\n\t\t<item>/LIGHT</item>\n\t\t<item>/NORMAL</item>\n\t\t<item>/SHADE</item>\n\t\t<item>/TRLCY</item>\n\t\t<item>/TYPE</item>\n\t\t<item>/CFORMAT</item>\n\t\t<item>/CLABEL</item>\n\t\t<item>/CONTOUR</item>\n\t\t<item>/CVAL</item>\n\t\t<item>/GFORMAT</item>\n\t\t<item>/HBC</item>\n\t\t<item>/NUMBER</item>\n\t\t<item>/PBC</item>\n\t\t<item>/PBF</item>\n\t\t<item>PGSELE</item>\n\t\t<item>/PICE</item>\n\t\t<item>/PLOPTS</item>\n\t\t<item>/PNUM</item>\n\t\t<item>/PSF</item>\n\t\t<item>/PSYMB</item>\n\t\t<item>/TRIAD</item>\n\t\t<item>/UDOC</item>\n\t\t<item>/AXLAB</item>\n\t\t<item>/GRID</item>\n\t\t<item>/GROPT</item>\n\t\t<item>/GRTYP</item>\n\t\t<item>/GTHK</item>\n\t\t<item>/XRANGE</item>\n\t\t<item>/YRANGE</item>\n\t\t<item>/AN3D</item>\n\t\t<item>/ANNOT</item>\n\t\t<item>/ANUM</item>\n\t\t<item>/LARC</item>\n\t\t<item>/LINE</item>\n\t\t<item>/LSPEC</item>\n\t\t<item>/LSYMBOL</item>\n\t\t<item>/PCIRCLE</item>\n\t\t<item>/PMORE</item>\n\t\t<item>/POLYGON</item>\n\t\t<item>/PSPEC</item>\n\t\t<item>/PWEDGE</item>\n\t\t<item>/TLABEL</item>\n\t\t<item>/TSPEC</item>\n\t</list>\n\t<list name=\"APDL_commands\">\n\t\t<item>GET</item>\n\t\t<item>*ABBR</item>\n\t\t<item>ABBRES</item>\n\t\t<item>ABBSAV</item>\n\t\t<item>*AFUN</item>\n\t\t<item>*ASK</item>\n\t\t<item>*CFCLOS</item>\n\t\t<item>*CFOPEN</item>\n\t\t<item>*CFWRITE</item>\n\t\t<item>*CREATE</item>\n\t\t<item>*CYCLE</item>\n\t\t<item>*DEL</item>\n\t\t<item>/DFLAB</item>\n\t\t<item>*DIM</item>\n\t\t<item>/DIRECTORY</item>\n\t\t<item>*DO</item>\n\t\t<item>*DOWHILE</item>\n\t\t<item>*ELSE</item>\n\t\t<item>*ELSEIF</item>\n\t\t<item>*END</item>\n\t\t<item>*ENDDO</item>\n\t\t<item>*ENDIF</item>\n\t\t<item>*EXIT</item>\n\t\t<item>*GET</item>\n\t\t<item>*GO</item>\n\t\t<item>*IF</item>\n\t\t<item>/INQUIRE</item>\n\t\t<item>/MAIL</item>\n\t\t<item>*MFOURI</item>\n\t\t<item>*MFUN</item>\n\t\t<item>*MOPER</item>\n\t\t<item>*MSG</item>\n\t\t<item>*MWRITE</item>\n\t\t<item>PARRES</item>\n\t\t<item>PARSAV</item>\n\t\t<item>/PMACRO</item>\n\t\t<item>/PSEARCH</item>\n\t\t<item>*REPEAT</item>\n\t\t<item>*RETURN</item>\n\t\t<item>*SET</item>\n\t\t<item>*SREAD</item>\n\t\t<item>*STATUS</item>\n\t\t<item>*TAXIS</item>\n\t\t<item>/TEE</item>\n\t\t<item>*TOPER</item>\n\t\t<item>*TREAD</item>\n\t\t<item>/UCMD</item>\n\t\t<item>*ULIB</item>\n\t\t<item>*USE</item>\n\t\t<item>*VABS</item>\n\t\t<item>*VCOL</item>\n\t\t<item>*VCUM</item>\n\t\t<item>*VEDIT</item>\n\t\t<item>*VFACT</item>\n\t\t<item>*VFILL</item>\n\t\t<item>*VFUN</item>\n\t\t<item>*VGET</item>\n\t\t<item>*VITRP</item>\n\t\t<item>*VLEN</item>\n\t\t<item>*VMASK</item>\n\t\t<item>*VOPER</item>\n\t\t<item>*VPLOT</item>\n\t\t<item>*VPUT</item>\n\t\t<item>*VREAD</item>\n\t\t<item>*VSCFUN</item>\n\t\t<item>*VSTAT</item>\n\t\t<item>*VWRITE</item>\n\t\t<item>/WAIT</item>\n\t</list>\n\t<list name=\"prep7_commands\">\n\t\t<item>AFLIST</item>\n\t\t<item>CDREAD</item>\n\t\t<item>CDWRITE</item>\n\t\t<item>CDOPT</item>\n\t\t<item>CECHECK</item>\n\t\t<item>CHECK</item>\n\t\t<item>CNCHECK</item>\n\t\t<item>FC</item>\n\t\t<item>FCCHECK</item>\n\t\t<item>FCDELE</item>\n\t\t<item>FCLIST</item>\n\t\t<item>IGESOUT</item>\n\t\t<item>NOOFFSET</item>\n\t\t<item>NUMCMP</item>\n\t\t<item>NUMMRG</item>\n\t\t<item>NUMOFF</item>\n\t\t<item>NUMSTR</item>\n\t\t<item>DOF</item>\n\t\t<item>ET</item>\n\t\t<item>ETCONTROL</item>\n\t\t<item>ETDELE</item>\n\t\t<item>ETLIST</item>\n\t\t<item>KEYOPT</item>\n\t\t<item>NSVR</item>\n\t\t<item>R</item>\n\t\t<item>RDELE</item>\n\t\t<item>RLIST</item>\n\t\t<item>RMODIF</item>\n\t\t<item>RMORE</item>\n\t\t<item>SETFGAP</item>\n\t\t<item>EMUNIT</item>\n\t\t<item>*EVAL</item>\n\t\t<item>*MOONEY</item>\n\t\t<item>MP</item>\n\t\t<item>MPAMOD</item>\n\t\t<item>MPCHG</item>\n\t\t<item>MPCOPY</item>\n\t\t<item>MPDATA</item>\n\t\t<item>MPDELE</item>\n\t\t<item>MPDRES</item>\n\t\t<item>/MPLIB</item>\n\t\t<item>MPLIST</item>\n\t\t<item>MPPLOT</item>\n\t\t<item>MPREAD</item>\n\t\t<item>MPTEMP</item>\n\t\t<item>MPTGEN</item>\n\t\t<item>MPTRES</item>\n\t\t<item>MPWRITE</item>\n\t\t<item>TBFT</item>\n\t\t<item>UIMP</item>\n\t\t<item>TB</item>\n\t\t<item>TBCOPY</item>\n\t\t<item>TBDATA</item>\n\t\t<item>TBDELE</item>\n\t\t<item>TBFIELD</item>\n\t\t<item>TBLIST</item>\n\t\t<item>TBMODIF</item>\n\t\t<item>TBPLOT</item>\n\t\t<item>TBPT</item>\n\t\t<item>TBTEMP</item>\n\t\t<item>BLC4</item>\n\t\t<item>BLC5</item>\n\t\t<item>BLOCK</item>\n\t\t<item>CON4</item>\n\t\t<item>CONE</item>\n\t\t<item>CYL4</item>\n\t\t<item>CYL5</item>\n\t\t<item>CYLIND</item>\n\t\t<item>PCIRC</item>\n\t\t<item>POLY</item>\n\t\t<item>PRI2</item>\n\t\t<item>PRISM</item>\n\t\t<item>PTXY</item>\n\t\t<item>RECTNG</item>\n\t\t<item>RPOLY</item>\n\t\t<item>RPR4</item>\n\t\t<item>RPRISM</item>\n\t\t<item>SPH4</item>\n\t\t<item>SPH5</item>\n\t\t<item>SPHERE</item>\n\t\t<item>TORUS</item>\n\t\t<item>GSUM</item>\n\t\t<item>K</item>\n\t\t<item>KBETW</item>\n\t\t<item>KCENTER</item>\n\t\t<item>KDELE</item>\n\t\t<item>KDIST</item>\n\t\t<item>KFILL</item>\n\t\t<item>KGEN</item>\n\t\t<item>KL</item>\n\t\t<item>KLIST</item>\n\t\t<item>KMODIF</item>\n\t\t<item>KMOVE</item>\n\t\t<item>KNODE</item>\n\t\t<item>KPLOT</item>\n\t\t<item>KPSCALE</item>\n\t\t<item>KSCALE</item>\n\t\t<item>KSUM</item>\n\t\t<item>KSYMM</item>\n\t\t<item>KTRAN</item>\n\t\t<item>SOURCE</item>\n\t\t<item>HPTCREATE</item>\n\t\t<item>HPTDELETE</item>\n\t\t<item>BSPLIN</item>\n\t\t<item>CIRCLE</item>\n\t\t<item>GSUM</item>\n\t\t<item>L</item>\n\t\t<item>L2ANG</item>\n\t\t<item>L2TAN</item>\n\t\t<item>LANG</item>\n\t\t<item>LARC</item>\n\t\t<item>LAREA</item>\n\t\t<item>LCOMB</item>\n\t\t<item>LDELE</item>\n\t\t<item>LDIV</item>\n\t\t<item>LDRAG</item>\n\t\t<item>LEXTND</item>\n\t\t<item>LFILLT</item>\n\t\t<item>LGEN</item>\n\t\t<item>LLIST</item>\n\t\t<item>LPLOT</item>\n\t\t<item>LREVERSE</item>\n\t\t<item>LROTAT</item>\n\t\t<item>LSSCALE</item>\n\t\t<item>LSTR</item>\n\t\t<item>LSUM</item>\n\t\t<item>LSYMM</item>\n\t\t<item>LTAN</item>\n\t\t<item>LTRAN</item>\n\t\t<item>SPLINE</item>\n\t\t<item>SSLN</item>\n\t\t<item>A</item>\n\t\t<item>AATT</item>\n\t\t<item>ADELE</item>\n\t\t<item>ADGL</item>\n\t\t<item>ADRAG</item>\n\t\t<item>AFILLT</item>\n\t\t<item>AGEN</item>\n\t\t<item>AL</item>\n\t\t<item>ALIST</item>\n\t\t<item>ANORM</item>\n\t\t<item>AOFFST</item>\n\t\t<item>APLOT</item>\n\t\t<item>AREVERSE</item>\n\t\t<item>AROTAT</item>\n\t\t<item>ARSCALE</item>\n\t\t<item>ARSYM</item>\n\t\t<item>ASKIN</item>\n\t\t<item>ASUB</item>\n\t\t<item>ASUM</item>\n\t\t<item>ATRAN</item>\n\t\t<item>GSUM</item>\n\t\t<item>SPLOT</item>\n\t\t<item>EXTOPT</item>\n\t\t<item>GSUM</item>\n\t\t<item>V</item>\n\t\t<item>VA</item>\n\t\t<item>VDELE</item>\n\t\t<item>VDGL</item>\n\t\t<item>VDRAG</item>\n\t\t<item>VEXT</item>\n\t\t<item>VGEN</item>\n\t\t<item>VLIST</item>\n\t\t<item>VLSCALE</item>\n\t\t<item>VOFFST</item>\n\t\t<item>VPLOT</item>\n\t\t<item>VROTAT</item>\n\t\t<item>VSUM</item>\n\t\t<item>VSYMM</item>\n\t\t<item>VTRAN</item>\n\t\t<item>AADD</item>\n\t\t<item>AGLUE</item>\n\t\t<item>AINA</item>\n\t\t<item>AINP</item>\n\t\t<item>AINV</item>\n\t\t<item>AOVLAP</item>\n\t\t<item>APTN</item>\n\t\t<item>ASBA</item>\n\t\t<item>ASBL</item>\n\t\t<item>ASBV</item>\n\t\t<item>ASBW</item>\n\t\t<item>BOPTN</item>\n\t\t<item>BTOL</item>\n\t\t<item>LCSL</item>\n\t\t<item>LGLUE</item>\n\t\t<item>LINA</item>\n\t\t<item>LINL</item>\n\t\t<item>LINP</item>\n\t\t<item>LINV</item>\n\t\t<item>LOVLAP</item>\n\t\t<item>LPTN</item>\n\t\t<item>LSBA</item>\n\t\t<item>LSBL</item>\n\t\t<item>LSBV</item>\n\t\t<item>LSBW</item>\n\t\t<item>VADD</item>\n\t\t<item>VGLUE</item>\n\t\t<item>VINP</item>\n\t\t<item>VINV</item>\n\t\t<item>VOVLAP</item>\n\t\t<item>VPTN</item>\n\t\t<item>VSBA</item>\n\t\t<item>VSBV</item>\n\t\t<item>VSBW</item>\n\t\t<item>ACCAT</item>\n\t\t<item>ACLEAR</item>\n\t\t<item>AESIZE</item>\n\t\t<item>AMAP</item>\n\t\t<item>AMESH</item>\n\t\t<item>AREFINE</item>\n\t\t<item>CHKMSH</item>\n\t\t<item>CLRMSHLN</item>\n\t\t<item>CPCYC</item>\n\t\t<item>DESIZE</item>\n\t\t<item>EORIENT</item>\n\t\t<item>EREFINE</item>\n\t\t<item>ESIZE</item>\n\t\t<item>ESYS</item>\n\t\t<item>FVMESH</item>\n\t\t<item>GSGDATA</item>\n\t\t<item>IMESH</item>\n\t\t<item>KATTA</item>\n\t\t<item>KCLEAR</item>\n\t\t<item>KESIZE</item>\n\t\t<item>KMESH</item>\n\t\t<item>KREFINE</item>\n\t\t<item>KSCON</item>\n\t\t<item>LATT</item>\n\t\t<item>LCCAT</item>\n\t\t<item>LCLEAR</item>\n\t\t<item>LESIZE</item>\n\t\t<item>LMESH</item>\n\t\t<item>LREFINE</item>\n\t\t<item>MAT</item>\n\t\t<item>MCHECK</item>\n\t\t<item>MODMSH</item>\n\t\t<item>MOPT</item>\n\t\t<item>MSHAPE</item>\n\t\t<item>MSHCOPY</item>\n\t\t<item>MSHKEY</item>\n\t\t<item>MSHMID</item>\n\t\t<item>MSHPATTERN</item>\n\t\t<item>NREFINE</item>\n\t\t<item>PSMESH</item>\n\t\t<item>REAL</item>\n\t\t<item>RTHICK</item>\n\t\t<item>SHPP</item>\n\t\t<item>SMRTSIZE</item>\n\t\t<item>TCHG</item>\n\t\t<item>TIMP</item>\n\t\t<item>TYPE</item>\n\t\t<item>VATT</item>\n\t\t<item>VCLEAR</item>\n\t\t<item>VIMP</item>\n\t\t<item>VMESH</item>\n\t\t<item>VEORIENT</item>\n\t\t<item>VSWEEP</item>\n\t\t<item>CENTER</item>\n\t\t<item>FILL</item>\n\t\t<item>MOVE</item>\n\t\t<item>N</item>\n\t\t<item>NANG</item>\n\t\t<item>NDELE</item>\n\t\t<item>NDIST</item>\n\t\t<item>NGEN</item>\n\t\t<item>NKPT</item>\n\t\t<item>NLIST</item>\n\t\t<item>NMODIF</item>\n\t\t<item>NPLOT</item>\n\t\t<item>NREAD</item>\n\t\t<item>NROTAT</item>\n\t\t<item>NRRANG</item>\n\t\t<item>NSCALE</item>\n\t\t<item>NSMOOTH</item>\n\t\t<item>NSYM</item>\n\t\t<item>NWRITE</item>\n\t\t<item>QUAD</item>\n\t\t<item>SOURCE</item>\n\t\t<item>TRANSFER</item>\n\t\t<item>AFSURF</item>\n\t\t<item>E</item>\n\t\t<item>EDELE</item>\n\t\t<item>EGEN</item>\n\t\t<item>EINTF</item>\n\t\t<item>ELIST</item>\n\t\t<item>EMID</item>\n\t\t<item>EMODIF</item>\n\t\t<item>EMORE</item>\n\t\t<item>EMTGEN</item>\n\t\t<item>EN</item>\n\t\t<item>ENDRELEASE</item>\n\t\t<item>ENGEN</item>\n\t\t<item>ENORM</item>\n\t\t<item>ENSYM</item>\n\t\t<item>EORIENT</item>\n\t\t<item>EPLOT</item>\n\t\t<item>EREAD</item>\n\t\t<item>ERRANG</item>\n\t\t<item>ESURF</item>\n\t\t<item>ESYM</item>\n\t\t<item>ESYS</item>\n\t\t<item>EWRITE</item>\n\t\t<item>LAYLIST</item>\n\t\t<item>LAYPLOT</item>\n\t\t<item>LFSURF</item>\n\t\t<item>MAT</item>\n\t\t<item>NDSURF</item>\n\t\t<item>REAL</item>\n\t\t<item>SHSD</item>\n\t\t<item>SWADD</item>\n\t\t<item>SWDEL</item>\n\t\t<item>SWGEN</item>\n\t\t<item>SWLIST</item>\n\t\t<item>TSHAP</item>\n\t\t<item>TYPE</item>\n\t\t<item>UPGEOM</item>\n\t\t<item>SE</item>\n\t\t<item>SEDLIST</item>\n\t\t<item>SELISTL</item>\n\t\t<item>SESYMM</item>\n\t\t<item>SETRAN</item>\n\t\t<item>BELLOW</item>\n\t\t<item>BEND</item>\n\t\t<item>BRANCH</item>\n\t\t<item>FLANGE</item>\n\t\t<item>MITER</item>\n\t\t<item>PCORRO</item>\n\t\t<item>PDRAG</item>\n\t\t<item>PFLUID</item>\n\t\t<item>PGAP</item>\n\t\t<item>PINSUL</item>\n\t\t<item>POPT</item>\n\t\t<item>PPRES</item>\n\t\t<item>PSPEC</item>\n\t\t<item>PSPRNG</item>\n\t\t<item>PTEMP</item>\n\t\t<item>PUNIT</item>\n\t\t<item>REDUCE</item>\n\t\t<item>RUN</item>\n\t\t<item>TEE</item>\n\t\t<item>VALVE</item>\n\t\t<item>DIG</item>\n\t\t<item>DMOVE</item>\n\t\t<item>DSET</item>\n\t\t<item>DSURF</item>\n\t\t<item>CP</item>\n\t\t<item>CPDELE</item>\n\t\t<item>CPINTF</item>\n\t\t<item>CPLGEN</item>\n\t\t<item>CPLIST</item>\n\t\t<item>CPNGEN</item>\n\t\t<item>CPSGEN</item>\n\t\t<item>CE</item>\n\t\t<item>CECYC</item>\n\t\t<item>CEDELE</item>\n\t\t<item>CEINTF</item>\n\t\t<item>CELIST</item>\n\t\t<item>CERIG</item>\n\t\t<item>CESGEN</item>\n\t\t<item>RBE3</item>\n\t\t<item>NOORDER</item>\n\t\t<item>WAVES</item>\n\t\t<item>WERASE</item>\n\t\t<item>WFRONT</item>\n\t\t<item>WMID</item>\n\t\t<item>WMORE</item>\n\t\t<item>WSORT</item>\n\t\t<item>WSTART</item>\n\t\t<item>FLDATA</item>\n\t\t<item>FLDATA1</item>\n\t\t<item>FLDATA2</item>\n\t\t<item>FLDATA3</item>\n\t\t<item>FLDATA4</item>\n\t\t<item>FLDATA4A</item>\n\t\t<item>FLDATA5</item>\n\t\t<item>FLDATA6</item>\n\t\t<item>FLDATA7</item>\n\t\t<item>FLDATA8</item>\n\t\t<item>FLDATA9</item>\n\t\t<item>FLDATA10</item>\n\t\t<item>FLDATA11</item>\n\t\t<item>FLDATA12</item>\n\t\t<item>FLDATA13</item>\n\t\t<item>FLDATA14</item>\n\t\t<item>FLDATA15</item>\n\t\t<item>FLDATA16</item>\n\t\t<item>FLDATA17</item>\n\t\t<item>FLDATA18</item>\n\t\t<item>FLDATA19</item>\n\t\t<item>FLDATA20</item>\n\t\t<item>FLDATA20A</item>\n\t\t<item>FLDATA20B</item>\n\t\t<item>FLDATA21</item>\n\t\t<item>FLDATA22</item>\n\t\t<item>FLDATA23</item>\n\t\t<item>FLDATA24</item>\n\t\t<item>FLDATA24A</item>\n\t\t<item>FLDATA24B</item>\n\t\t<item>FLDATA24C</item>\n\t\t<item>FLDATA24D</item>\n\t\t<item>FLDATA24E</item>\n\t\t<item>FLDATA24F</item>\n\t\t<item>FLDATA24G</item>\n\t\t<item>FLDATA24H</item>\n\t\t<item>FLDATA40</item>\n\t\t<item>FLDATA25</item>\n\t\t<item>FLDATA26</item>\n\t\t<item>FLDATA34</item>\n\t\t<item>FLDATA27</item>\n\t\t<item>FLDATA28</item>\n\t\t<item>FLDATA29</item>\n\t\t<item>FLDATA30</item>\n\t\t<item>FLDATA31</item>\n\t\t<item>FLDATA32</item>\n\t\t<item>FLDATA33</item>\n\t\t<item>FLDATA35</item>\n\t\t<item>FLDATA36</item>\n\t\t<item>FLDATA37</item>\n\t\t<item>FLDATA38</item>\n\t\t<item>FLDATA39</item>\n\t\t<item>ICVFRC</item>\n\t\t<item>PLVFRC</item>\n\t\t<item>MSADV</item>\n\t\t<item>MSCAP</item>\n\t\t<item>MSDATA</item>\n\t\t<item>MSMASS</item>\n\t\t<item>MSMETH</item>\n\t\t<item>MSMIR</item>\n\t\t<item>MSNOMF</item>\n\t\t<item>MSPROP</item>\n\t\t<item>MSQUAD</item>\n\t\t<item>MSRELAX</item>\n\t\t<item>MSSOLU</item>\n\t\t<item>MSSPEC</item>\n\t\t<item>MSTERM</item>\n\t\t<item>MSVARY</item>\n\t\t<item>/CYCEXPAND</item>\n\t\t<item>CYCLIC</item>\n\t\t<item>CYCOPT</item>\n\t\t<item>EMSYM</item>\n\t\t<item>HFEREFINE</item>\n\t\t<item>PERBC2D</item>\n\t\t<item>PHYSICS</item>\n\t\t<item>RACE</item>\n\t\t<item>AREAS</item>\n\t\t<item>BOOL</item>\n\t\t<item>CEQN</item>\n\t\t<item>COUPLE</item>\n\t\t<item>DIGIT</item>\n\t\t<item>ELEM</item>\n\t\t<item>ETYPE</item>\n\t\t<item>FATIGUE</item>\n\t\t<item>FEBODY</item>\n\t\t<item>FECONS</item>\n\t\t<item>FEFOR</item>\n\t\t<item>FESURF</item>\n\t\t<item>FLOTRAN</item>\n\t\t<item>GEOMETRY</item>\n\t\t<item>KEYPTS</item>\n\t\t<item>LINE</item>\n\t\t<item>MATER</item>\n\t\t<item>MESHING</item>\n\t\t<item>NODES</item>\n\t\t<item>PIPE</item>\n\t\t<item>PMETH</item>\n\t\t<item>PRIM</item>\n\t\t<item>RCON</item>\n\t\t<item>REORDER</item>\n\t\t<item>SELM</item>\n\t\t<item>TBLE</item>\n\t\t<item>VOLUMES</item>\n\t\t<item>EDASMP</item>\n\t\t<item>EDBOUND</item>\n\t\t<item>EDBX</item>\n\t\t<item>EDCGEN</item>\n\t\t<item>EDCLIST</item>\n\t\t<item>EDCMORE</item>\n\t\t<item>EDCNSTR</item>\n\t\t<item>EDCONTACT</item>\n\t\t<item>EDCRB</item>\n\t\t<item>EDCURVE</item>\n\t\t<item>EDDBL</item>\n\t\t<item>EDDC</item>\n\t\t<item>EDIPART</item>\n\t\t<item>EDLCS</item>\n\t\t<item>EDMP</item>\n\t\t<item>EDNB</item>\n\t\t<item>EDNDTSD</item>\n\t\t<item>EDNROT</item>\n\t\t<item>EDPART</item>\n\t\t<item>EDPC</item>\n\t\t<item>EDSP</item>\n\t\t<item>EDWELD</item>\n\t\t<item>ALPFILL</item>\n\t\t<item>ARCOLLAPSE</item>\n\t\t<item>ARDETACH</item>\n\t\t<item>ARFILL</item>\n\t\t<item>ARMERGE</item>\n\t\t<item>ARSPLIT</item>\n\t\t<item>GAPFINISH</item>\n\t\t<item>GAPLIST</item>\n\t\t<item>GAPMERGE</item>\n\t\t<item>GAPOPT</item>\n\t\t<item>GAPPLOT</item>\n\t\t<item>LNCOLLAPSE</item>\n\t\t<item>LNDETACH</item>\n\t\t<item>LNFILL</item>\n\t\t<item>LNMERGE</item>\n\t\t<item>LNSPLIT</item>\n\t\t<item>SARPLOT</item>\n\t\t<item>SLPPLOT</item>\n\t\t<item>SLSPLOT</item>\n\t\t<item>VCVFILL</item>\n\t\t<item>BSAX</item>\n\t\t<item>BSM1</item>\n\t\t<item>BSM2</item>\n\t\t<item>BSMD</item>\n\t\t<item>BSS1</item>\n\t\t<item>BSS2</item>\n\t\t<item>BSTE</item>\n\t\t<item>BSTQ</item>\n\t\t<item>PRSSOL</item>\n\t\t<item>SDELETE</item>\n\t\t<item>SECDATA</item>\n\t\t<item>SECJOINT</item>\n\t\t<item>/SECLIB</item>\n\t\t<item>SECLOCK</item>\n\t\t<item>SECNUM</item>\n\t\t<item>SECOFFSET</item>\n\t\t<item>SECPLOT</item>\n\t\t<item>SECREAD</item>\n\t\t<item>SECSTOP</item>\n\t\t<item>SECTYPE</item>\n\t\t<item>SECWRITE</item>\n\t\t<item>SLIST</item>\n\t\t<item>SSBT</item>\n\t\t<item>SSMT</item>\n\t\t<item>SSPA</item>\n\t\t<item>SSPB</item>\n\t\t<item>SSPD</item>\n\t\t<item>SSPE</item>\n\t\t<item>SSPM</item>\n\t\t<item>MORPH</item>\n\t\t<item>DAMORPH</item>\n\t\t<item>DEMORPH</item>\n\t\t<item>DVMORPH</item>\n\t\t<item>TZAMESH</item>\n\t\t<item>TZDELE</item>\n\t\t<item>TZEGEN</item>\n\t\t<item>PMLOPT</item>\n\t\t<item>PMLSIZE</item>\n\t\t<item>FSAN</item>\n\t\t<item>FSCO</item>\n\t\t<item>FSDT</item>\n\t\t<item>FSIN</item>\n\t\t<item>FSIT</item>\n\t\t<item>FSOR</item>\n\t\t<item>FSOU</item>\n\t\t<item>FSRE</item>\n\t\t<item>FSSTAT</item>\n\t\t<item>FSTI</item>\n\t\t<item>FSTR</item>\n\t</list>\n\t<list name=\"solution_commands\">\n\t\t<item>ABEXTRACT</item>\n\t\t<item>ADAMS</item>\n\t\t<item>ADAPT</item>\n\t\t<item>ANTYPE</item>\n\t\t<item>BCSOPTION</item>\n\t\t<item>CECHECK</item>\n\t\t<item>CHECK</item>\n\t\t<item>CMATRIX</item>\n\t\t<item>CMSOPT</item>\n\t\t<item>CNCHECK</item>\n\t\t<item>CUTCONTROL</item>\n\t\t<item>CYCOPT</item>\n\t\t<item>DMPEXT</item>\n\t\t<item>DSPROC</item>\n\t\t<item>DSOPT</item>\n\t\t<item>EMATWRITE</item>\n\t\t<item>EQSLV</item>\n\t\t<item>ERESX</item>\n\t\t<item>ESCHECK</item>\n\t\t<item>ESSOLV</item>\n\t\t<item>EXPASS</item>\n\t\t<item>FSRS</item>\n\t\t<item>FSSOLV</item>\n\t\t<item>GAUGE</item>\n\t\t<item>GMATRIX</item>\n\t\t<item>HFEIGOPT</item>\n\t\t<item>HFPA</item>\n\t\t<item>HFPCSWP</item>\n\t\t<item>HFSCAT</item>\n\t\t<item>HFSWEEP</item>\n\t\t<item>LMATRIX</item>\n\t\t<item>LUMPM</item>\n\t\t<item>MONITOR</item>\n\t\t<item>MSAVE</item>\n\t\t<item>OPNCONTROL</item>\n\t\t<item>PRECISION</item>\n\t\t<item>PSCONTROL</item>\n\t\t<item>PSOLVE</item>\n\t\t<item>RATE</item>\n\t\t<item>RSTOFF</item>\n\t\t<item>SEEXP</item>\n\t\t<item>SEGEN</item>\n\t\t<item>SEOPT</item>\n\t\t<item>SOLCONTROL</item>\n\t\t<item>/SOLU</item>\n\t\t<item>SOLVE</item>\n\t\t<item>SPSCAN</item>\n\t\t<item>SPSWP</item>\n\t\t<item>STAOPT</item>\n\t\t<item>TOFFST</item>\n\t\t<item>PCONV</item>\n\t\t<item>PEXCLUDE</item>\n\t\t<item>PINCLUDE</item>\n\t\t<item>/PMETH</item>\n\t\t<item>PMOPTS</item>\n\t\t<item>PPRANGE</item>\n\t\t<item>ARCLENA</item>\n\t\t<item>ARCTRM</item>\n\t\t<item>BUCOPT</item>\n\t\t<item>CNVTOL</item>\n\t\t<item>CRPLIM</item>\n\t\t<item>/GST</item>\n\t\t<item>LNSRCH</item>\n\t\t<item>MXPAND</item>\n\t\t<item>NCNV</item>\n\t\t<item>NEQIT</item>\n\t\t<item>NLDIAG</item>\n\t\t<item>NLDPOST</item>\n\t\t<item>NLGEOM</item>\n\t\t<item>NLHIST</item>\n\t\t<item>NROPT</item>\n\t\t<item>PRED</item>\n\t\t<item>PSTRES</item>\n\t\t<item>SSTIF</item>\n\t\t<item>SUBOPT</item>\n\t\t<item>ALPHAD</item>\n\t\t<item>BETAD</item>\n\t\t<item>DMPRAT</item>\n\t\t<item>HARFRQ</item>\n\t\t<item>HREXP</item>\n\t\t<item>HROPT</item>\n\t\t<item>HROUT</item>\n\t\t<item>LVSCALE</item>\n\t\t<item>MDAMP</item>\n\t\t<item>MDPLOT</item>\n\t\t<item>MODOPT</item>\n\t\t<item>MXPAND</item>\n\t\t<item>RIGID</item>\n\t\t<item>SUBOPT</item>\n\t\t<item>TIMINT</item>\n\t\t<item>TINTP</item>\n\t\t<item>TRNOPT</item>\n\t\t<item>ADDAM</item>\n\t\t<item>COVAL</item>\n\t\t<item>CQC</item>\n\t\t<item>DSUM</item>\n\t\t<item>FREQ</item>\n\t\t<item>GRP</item>\n\t\t<item>NRLSUM</item>\n\t\t<item>PFACT</item>\n\t\t<item>PSDCOM</item>\n\t\t<item>PSDFRQ</item>\n\t\t<item>PSDGRAPH</item>\n\t\t<item>PSDSPL</item>\n\t\t<item>PSDUNIT</item>\n\t\t<item>PSDVAL</item>\n\t\t<item>PSDWAV</item>\n\t\t<item>QDVAL</item>\n\t\t<item>ROCK</item>\n\t\t<item>SED</item>\n\t\t<item>SPOPT</item>\n\t\t<item>SRSS</item>\n\t\t<item>SV</item>\n\t\t<item>SVTYP</item>\n\t\t<item>VDDAM</item>\n\t\t<item>AUTOTS</item>\n\t\t<item>CECMOD</item>\n\t\t<item>DELTIM</item>\n\t\t<item>EXPSOL</item>\n\t\t<item>HMAGSOLV</item>\n\t\t<item>KBC</item>\n\t\t<item>KUSE</item>\n\t\t<item>MAGOPT</item>\n\t\t<item>MAGSOLV</item>\n\t\t<item>MODE</item>\n\t\t<item>NSUBST</item>\n\t\t<item>NUMEXP</item>\n\t\t<item>TIME</item>\n\t\t<item>TREF</item>\n\t\t<item>TSRES</item>\n\t\t<item>UPCOORD</item>\n\t\t<item>USRCAL</item>\n\t\t<item>WRFULL</item>\n\t\t<item>DA</item>\n\t\t<item>DADELE</item>\n\t\t<item>DALIST</item>\n\t\t<item>DK</item>\n\t\t<item>DKDELE</item>\n\t\t<item>DKLIST</item>\n\t\t<item>DL</item>\n\t\t<item>DLDELE</item>\n\t\t<item>DLLIST</item>\n\t\t<item>DTRAN</item>\n\t\t<item>FK</item>\n\t\t<item>FKDELE</item>\n\t\t<item>FKLIST</item>\n\t\t<item>FTRAN</item>\n\t\t<item>SFA</item>\n\t\t<item>SFADELE</item>\n\t\t<item>SFALIST</item>\n\t\t<item>SFL</item>\n\t\t<item>SFLDELE</item>\n\t\t<item>SFLLIST</item>\n\t\t<item>SFTRAN</item>\n\t\t<item>BFA</item>\n\t\t<item>BFADELE</item>\n\t\t<item>BFALIST</item>\n\t\t<item>BFK</item>\n\t\t<item>BFKDELE</item>\n\t\t<item>BFKLIST</item>\n\t\t<item>BFL</item>\n\t\t<item>BFLDELE</item>\n\t\t<item>BFLLIST</item>\n\t\t<item>BFTRAN</item>\n\t\t<item>BFV</item>\n\t\t<item>BFVDELE</item>\n\t\t<item>BFVLIST</item>\n\t\t<item>ACEL</item>\n\t\t<item>CGLOC</item>\n\t\t<item>CGOMGA</item>\n\t\t<item>CMACEL</item>\n\t\t<item>CMDOMEGA</item>\n\t\t<item>CMOMEGA</item>\n\t\t<item>DCGOMG</item>\n\t\t<item>DOMEGA</item>\n\t\t<item>IRLF</item>\n\t\t<item>OMEGA</item>\n\t\t<item>BIOT</item>\n\t\t<item>FMAGBC</item>\n\t\t<item>HFPORT</item>\n\t\t<item>IC</item>\n\t\t<item>ICDELE</item>\n\t\t<item>ICE</item>\n\t\t<item>ICEDELE</item>\n\t\t<item>ICELIST</item>\n\t\t<item>ICLIST</item>\n\t\t<item>ISFILE</item>\n\t\t<item>MPCHG</item>\n\t\t<item>OUTPR</item>\n\t\t<item>OUTRES</item>\n\t\t<item>PGRAPH</item>\n\t\t<item>PGSAVE</item>\n\t\t<item>PGWRITE</item>\n\t\t<item>PLWAVE</item>\n\t\t<item>RESCONTROL</item>\n\t\t<item>SBCLIST</item>\n\t\t<item>SBCTRAN</item>\n\t\t<item>WSPRINGS</item>\n\t\t<item>LSCLEAR</item>\n\t\t<item>LSDELE</item>\n\t\t<item>LSREAD</item>\n\t\t<item>LSSOLVE</item>\n\t\t<item>LSWRITE</item>\n\t\t<item>M</item>\n\t\t<item>MDELE</item>\n\t\t<item>MGEN</item>\n\t\t<item>MLIST</item>\n\t\t<item>TOTAL</item>\n\t\t<item>GP</item>\n\t\t<item>GPDELE</item>\n\t\t<item>GPLIST</item>\n\t\t<item>REZONE</item>\n\t\t<item>MAPSOLVE</item>\n\t\t<item>REMESH</item>\n\t\t<item>AREMESH</item>\n\t\t<item>EALIVE</item>\n\t\t<item>EKILL</item>\n\t\t<item>ESTIF</item>\n\t\t<item>D</item>\n\t\t<item>DCUM</item>\n\t\t<item>DDELE</item>\n\t\t<item>DJ</item>\n\t\t<item>DJDELE</item>\n\t\t<item>DJLIST</item>\n\t\t<item>DLIST</item>\n\t\t<item>DSCALE</item>\n\t\t<item>DSYM</item>\n\t\t<item>GSBDATA</item>\n\t\t<item>GSLIST</item>\n\t\t<item>LDREAD</item>\n\t\t<item>F</item>\n\t\t<item>FCUM</item>\n\t\t<item>FDELE</item>\n\t\t<item>FJ</item>\n\t\t<item>FJDELE</item>\n\t\t<item>FJLIST</item>\n\t\t<item>FLIST</item>\n\t\t<item>FSCALE</item>\n\t\t<item>SF</item>\n\t\t<item>SFBEAM</item>\n\t\t<item>SFCUM</item>\n\t\t<item>SFDELE</item>\n\t\t<item>SFE</item>\n\t\t<item>SFEDELE</item>\n\t\t<item>SFELIST</item>\n\t\t<item>SFFUN</item>\n\t\t<item>SFGRAD</item>\n\t\t<item>SFLIST</item>\n\t\t<item>SFSCALE</item>\n\t\t<item>BF</item>\n\t\t<item>BFCUM</item>\n\t\t<item>BFDELE</item>\n\t\t<item>BFE</item>\n\t\t<item>BFECUM</item>\n\t\t<item>BFEDELE</item>\n\t\t<item>BFELIST</item>\n\t\t<item>BFESCAL</item>\n\t\t<item>BFLIST</item>\n\t\t<item>BFSCALE</item>\n\t\t<item>BFUNIF</item>\n\t\t<item>LDREAD</item>\n\t\t<item>RIMPORT</item>\n\t\t<item>TUNIF</item>\n\t\t<item>BIOOPT</item>\n\t\t<item>DEACT</item>\n\t\t<item>DYNOPT</item>\n\t\t<item>GAP</item>\n\t\t<item>GENOPT</item>\n\t\t<item>INRTIA</item>\n\t\t<item>LSOPER</item>\n\t\t<item>MASTER</item>\n\t\t<item>NLOPT</item>\n\t\t<item>OUTOPT</item>\n\t\t<item>SMBODY</item>\n\t\t<item>SMCONS</item>\n\t\t<item>SMFOR</item>\n\t\t<item>SMSURF</item>\n\t\t<item>SOLUOPT</item>\n\t\t<item>SPTOPT</item>\n\t\t<item>EDADAPT</item>\n\t\t<item>EDALE</item>\n\t\t<item>EDBVIS</item>\n\t\t<item>EDCADAPT</item>\n\t\t<item>EDCPU</item>\n\t\t<item>EDCSC</item>\n\t\t<item>EDCTS</item>\n\t\t<item>EDDAMP</item>\n\t\t<item>EDDRELAX</item>\n\t\t<item>EDDUMP</item>\n\t\t<item>EDENERGY</item>\n\t\t<item>EDFPLOT</item>\n\t\t<item>EDGCALE</item>\n\t\t<item>EDHGLS</item>\n\t\t<item>EDHIST</item>\n\t\t<item>EDHTIME</item>\n\t\t<item>EDINT</item>\n\t\t<item>EDIS</item>\n\t\t<item>EDLOAD</item>\n\t\t<item>EDOPT</item>\n\t\t<item>EDOUT</item>\n\t\t<item>EDPL</item>\n\t\t<item>EDPVEL</item>\n\t\t<item>EDRC</item>\n\t\t<item>EDRD</item>\n\t\t<item>EDRI</item>\n\t\t<item>EDRST</item>\n\t\t<item>EDRUN</item>\n\t\t<item>EDSHELL</item>\n\t\t<item>EDSOLV</item>\n\t\t<item>EDSTART</item>\n\t\t<item>EDTERM</item>\n\t\t<item>EDTP</item>\n\t\t<item>EDVEL</item>\n\t\t<item>EDWRITE</item>\n\t\t<item>REXPORT</item>\n\t\t<item>FLOCHECK</item>\n\t\t<item>PEMOPTS</item>\n\t\t<item>HEMIOPT</item>\n\t\t<item>RADOPT</item>\n\t\t<item>RDEC</item>\n\t\t<item>RSURF</item>\n\t\t<item>RSYMM</item>\n\t\t<item>SPCNOD</item>\n\t\t<item>SPCTEMP</item>\n\t\t<item>STEF</item>\n\t\t<item>V2DOPT</item>\n\t\t<item>VFCALC</item>\n\t\t<item>VFOPT</item>\n\t\t<item>QSOPT</item>\n\t\t<item>FSAN</item>\n\t\t<item>FSCO</item>\n\t\t<item>FSDT</item>\n\t\t<item>FSIN</item>\n\t\t<item>FSIT</item>\n\t\t<item>FSOR</item>\n\t\t<item>FSOU</item>\n\t\t<item>FSRE</item>\n\t\t<item>FSRS</item>\n\t\t<item>FSSTAT</item>\n\t\t<item>FSTI</item>\n\t\t<item>FSTR</item>\n\t\t<item>MFANALYSIS</item>\n\t\t<item>MFBUCKET</item>\n\t\t<item>MFCALC</item>\n\t\t<item>MFCLEAR</item>\n\t\t<item>MFCMMAND</item>\n\t\t<item>MFCONV</item>\n\t\t<item>MFDTIME</item>\n\t\t<item>MFELEM</item>\n\t\t<item>MFEM</item>\n\t\t<item>MFEXTER</item>\n\t\t<item>MFFNAME</item>\n\t\t<item>MFIMPORT</item>\n\t\t<item>MFINTER</item>\n\t\t<item>MFITER</item>\n\t\t<item>MFLIST</item>\n\t\t<item>MFMAP</item>\n\t\t<item>MFORDER</item>\n\t\t<item>MFOUTPUT</item>\n\t\t<item>MFRELAX</item>\n\t\t<item>MFRSTART</item>\n\t\t<item>MFSURFACE</item>\n\t\t<item>MFTIME</item>\n\t\t<item>MFTOL</item>\n\t\t<item>MFVOLUME</item>\n\t</list>\n\t<list name=\"POST1_commands\">\n\t\t<item>APPEND</item>\n\t\t<item>DETAB</item>\n\t\t<item>DNSOL</item>\n\t\t<item>FILE</item>\n\t\t<item>HRCPLX</item>\n\t\t<item>PGRSET</item>\n\t\t<item>/POST1</item>\n\t\t<item>RESET</item>\n\t\t<item>SET</item>\n\t\t<item>SUBSET</item>\n\t\t<item>AVPRIN</item>\n\t\t<item>AVRES</item>\n\t\t<item>/EFACET</item>\n\t\t<item>ERNORM</item>\n\t\t<item>FORCE</item>\n\t\t<item>INRES</item>\n\t\t<item>LAYER</item>\n\t\t<item>RSYS</item>\n\t\t<item>SHELL</item>\n\t\t<item>NSORT</item>\n\t\t<item>NUSORT</item>\n\t\t<item>PLCONV</item>\n\t\t<item>PLDISP</item>\n\t\t<item>PLESOL</item>\n\t\t<item>PLNSOL</item>\n\t\t<item>PLVECT</item>\n\t\t<item>PPLOT</item>\n\t\t<item>PRCONV</item>\n\t\t<item>PRESOL</item>\n\t\t<item>PRJSOL</item>\n\t\t<item>PRNLD</item>\n\t\t<item>PRNSOL</item>\n\t\t<item>PRRFOR</item>\n\t\t<item>PRRSOL</item>\n\t\t<item>PRSSOL</item>\n\t\t<item>PRVECT</item>\n\t\t<item>SUMTYPE</item>\n\t\t<item>DESOL</item>\n\t\t<item>ESORT</item>\n\t\t<item>ETABLE</item>\n\t\t<item>EUSORT</item>\n\t\t<item>PLETAB</item>\n\t\t<item>PLLS</item>\n\t\t<item>PLVECT</item>\n\t\t<item>PRETAB</item>\n\t\t<item>PRVECT</item>\n\t\t<item>SABS</item>\n\t\t<item>SADD</item>\n\t\t<item>SALLOW</item>\n\t\t<item>SEXP</item>\n\t\t<item>SFACT</item>\n\t\t<item>SFCALC</item>\n\t\t<item>SMAX</item>\n\t\t<item>SMIN</item>\n\t\t<item>SMULT</item>\n\t\t<item>SSUM</item>\n\t\t<item>TALLOW</item>\n\t\t<item>VCROSS</item>\n\t\t<item>VDOT</item>\n\t\t<item>/FORMAT</item>\n\t\t<item>/HEADER</item>\n\t\t<item>IRLIST</item>\n\t\t<item>/PAGE</item>\n\t\t<item>PRERR</item>\n\t\t<item>PRITER</item>\n\t\t<item>ANCNTR</item>\n\t\t<item>ANCUT</item>\n\t\t<item>ANDATA</item>\n\t\t<item>ANDSCL</item>\n\t\t<item>ANCYC</item>\n\t\t<item>ANDYNA</item>\n\t\t<item>/ANFILE</item>\n\t\t<item>ANFLOW</item>\n\t\t<item>ANHARM</item>\n\t\t<item>ANIM</item>\n\t\t<item>ANISOS</item>\n\t\t<item>ANMODE</item>\n\t\t<item>ANMRES</item>\n\t\t<item>ANTIME</item>\n\t\t<item>TRTIME</item>\n\t\t<item>PADELE</item>\n\t\t<item>PAGET</item>\n\t\t<item>PAPUT</item>\n\t\t<item>PARESU</item>\n\t\t<item>PASAVE</item>\n\t\t<item>PATH</item>\n\t\t<item>PCALC</item>\n\t\t<item>PCROSS</item>\n\t\t<item>PDEF</item>\n\t\t<item>PDOT</item>\n\t\t<item>PLPAGM</item>\n\t\t<item>PLPATH</item>\n\t\t<item>PLSECT</item>\n\t\t<item>PMAP</item>\n\t\t<item>PPATH</item>\n\t\t<item>PRANGE</item>\n\t\t<item>PRPATH</item>\n\t\t<item>PRSECT</item>\n\t\t<item>PSEL</item>\n\t\t<item>PVECT</item>\n\t\t<item>SUCALC</item>\n\t\t<item>SUCR</item>\n\t\t<item>SUDEL</item>\n\t\t<item>SUEVAL</item>\n\t\t<item>SUGET</item>\n\t\t<item>SUMAP</item>\n\t\t<item>SUPL</item>\n\t\t<item>SUPR</item>\n\t\t<item>SURESU</item>\n\t\t<item>SUSAVE</item>\n\t\t<item>SUSEL</item>\n\t\t<item>SUVECT</item>\n\t\t<item>LCABS</item>\n\t\t<item>LCASE</item>\n\t\t<item>LCDEF</item>\n\t\t<item>LCFACT</item>\n\t\t<item>LCFILE</item>\n\t\t<item>LCOPER</item>\n\t\t<item>LCSEL</item>\n\t\t<item>LCSUM</item>\n\t\t<item>LCWRITE</item>\n\t\t<item>LCZERO</item>\n\t\t<item>RAPPND</item>\n\t\t<item>CURR2D</item>\n\t\t<item>EMAGERR</item>\n\t\t<item>EMF</item>\n\t\t<item>EMFT</item>\n\t\t<item>FLUXV</item>\n\t\t<item>FMAGSUM</item>\n\t\t<item>FOR2D</item>\n\t\t<item>IMPD</item>\n\t\t<item>MMF</item>\n\t\t<item>PLF2D</item>\n\t\t<item>POWERH</item>\n\t\t<item>QFACT</item>\n\t\t<item>REFLCOEF</item>\n\t\t<item>SENERGY</item>\n\t\t<item>SPARM</item>\n\t\t<item>TORQ2D</item>\n\t\t<item>TORQC2D</item>\n\t\t<item>TORQSUM</item>\n\t\t<item>FE</item>\n\t\t<item>FELIST</item>\n\t\t<item>FL</item>\n\t\t<item>FLLIST</item>\n\t\t<item>FP</item>\n\t\t<item>FPLIST</item>\n\t\t<item>FS</item>\n\t\t<item>FSDELE</item>\n\t\t<item>FSLIST</item>\n\t\t<item>FSNODE</item>\n\t\t<item>FSPLOT</item>\n\t\t<item>FSSECT</item>\n\t\t<item>FTCALC</item>\n\t\t<item>FTSIZE</item>\n\t\t<item>FTWRITE</item>\n\t\t<item>PLTRAC</item>\n\t\t<item>TRPDEL</item>\n\t\t<item>TRPLIS</item>\n\t\t<item>TRPOIN</item>\n\t\t<item>FLREAD</item>\n\t\t<item>BFINT</item>\n\t\t<item>CBDOF</item>\n\t\t<item>CMSFILE</item>\n\t\t<item>/CYCEXPAND</item>\n\t\t<item>CYCPHASE</item>\n\t\t<item>/EXPAND</item>\n\t\t<item>EXPAND</item>\n\t\t<item>FSSPARM</item>\n\t\t<item>FSUM</item>\n\t\t<item>HFANG</item>\n\t\t<item>HFARRAY</item>\n\t\t<item>HFNEAR</item>\n\t\t<item>HFPOWER</item>\n\t\t<item>HFSYM</item>\n\t\t<item>INTSRF</item>\n\t\t<item>KCALC</item>\n\t\t<item>NFORCE</item>\n\t\t<item>PLCRACK</item>\n\t\t<item>PLHFFAR</item>\n\t\t<item>PLSCH</item>\n\t\t<item>PLSYZ</item>\n\t\t<item>PRHFFAR</item>\n\t\t<item>PRSYZ</item>\n\t\t<item>RMFLVEC</item>\n\t\t<item>RSPLIT</item>\n\t\t<item>SPOINT</item>\n\t\t<item>DATADEF</item>\n\t\t<item>DEFINE</item>\n\t\t<item>DISPLAY</item>\n\t\t<item>LCCALC</item>\n\t\t<item>POINT</item>\n\t\t<item>PRINT</item>\n\t\t<item>SORT</item>\n\t\t<item>SPEC</item>\n\t\t<item>FC</item>\n\t\t<item>FCCHECK</item>\n\t\t<item>FCDELE</item>\n\t\t<item>FCLIST</item>\n\t</list>\n\t<list name=\"POST26_commands\">\n\t\t<item>ANSOL</item>\n\t\t<item>DATA</item>\n\t\t<item>EDREAD</item>\n\t\t<item>ESOL</item>\n\t\t<item>FILE</item>\n\t\t<item>GAPF</item>\n\t\t<item>GSSOL</item>\n\t\t<item>JSOL</item>\n\t\t<item>NSOL</item>\n\t\t<item>NSTORE</item>\n\t\t<item>NUMVAR</item>\n\t\t<item>/POST26</item>\n\t\t<item>RESET</item>\n\t\t<item>RFORCE</item>\n\t\t<item>/RGB</item>\n\t\t<item>SOLU</item>\n\t\t<item>STORE</item>\n\t\t<item>TIMERANGE</item>\n\t\t<item>VARDEL</item>\n\t\t<item>VARNAM</item>\n\t\t<item>CFACT</item>\n\t\t<item>FORCE</item>\n\t\t<item>LAYERP26</item>\n\t\t<item>SHELL</item>\n\t\t<item>TVAR</item>\n\t\t<item>ABS</item>\n\t\t<item>ADD</item>\n\t\t<item>ATAN</item>\n\t\t<item>CLOG</item>\n\t\t<item>CONJUG</item>\n\t\t<item>DERIV</item>\n\t\t<item>EXP</item>\n\t\t<item>FILLDATA</item>\n\t\t<item>IMAGIN</item>\n\t\t<item>INT1</item>\n\t\t<item>LARGE</item>\n\t\t<item>NLOG</item>\n\t\t<item>PROD</item>\n\t\t<item>QUOT</item>\n\t\t<item>REALVAR</item>\n\t\t<item>SMALL</item>\n\t\t<item>SQRT</item>\n\t\t<item>PLCPLX</item>\n\t\t<item>PLTIME</item>\n\t\t<item>PLVAR</item>\n\t\t<item>SPREAD</item>\n\t\t<item>XVAR</item>\n\t\t<item>EXTREM</item>\n\t\t<item>LINES</item>\n\t\t<item>NPRINT</item>\n\t\t<item>PRCPLX</item>\n\t\t<item>PRTIME</item>\n\t\t<item>PRVAR</item>\n\t\t<item>CVAR</item>\n\t\t<item>PMGTRAN</item>\n\t\t<item>RESP</item>\n\t\t<item>RPSD</item>\n\t\t<item>SMOOTH</item>\n\t\t<item>VGET</item>\n\t\t<item>VPUT</item>\n\t\t<item>DEFINE</item>\n\t\t<item>OPERATE</item>\n\t\t<item>PLOTTING</item>\n\t\t<item>PRINT</item>\n\t</list>\n\t<list name=\"aux2_cmds\" >\n\t\t<item>/AUX2</item>\n\t\t<item>DUMP</item>\n\t\t<item>FILEAUX2</item>\n\t\t<item>FORM</item>\n\t\t<item>HBMAT</item>\n\t</list>\n\t<list name=\"aux3_cmds\">\n\t\t<item>/AUX3</item>\n\t\t<item>COMPRESS</item>\n\t\t<item>DELETE</item>\n\t\t<item>FILEAUX3</item>\n\t\t<item>LIST</item>\n\t\t<item>MODIFY</item>\n\t\t<item>UNDELETE</item>\n\t</list>\n\t<list name=\"aux12_cmds\">\n\t\t<item>/AUX12</item>\n\t\t<item>EMIS</item>\n\t\t<item>GEOM</item>\n\t\t<item>MPRINT</item>\n\t\t<item>SPACE</item>\n\t\t<item>STEF</item>\n\t\t<item>VFQUERY</item>\n\t\t<item>VTYPE</item>\n\t\t<item>WRITE</item>\n\t</list>\n\t<list name=\"aux15_cmds\">\n\t\t<item>/AUX15</item>\n\t\t<item>IGESIN</item>\n\t\t<item>IOPTN</item>\n\t</list>\n\t<list name=\"runstats_cmds\">\n\t\t<item>RALL</item>\n\t\t<item>RFILSZ</item>\n\t\t<item>RITER</item>\n\t\t<item>RMEMRY</item>\n\t\t<item>RSPEED</item>\n\t\t<item>RSTAT</item>\n\t\t<item>RTIMST</item>\n\t\t<item>/RUNST</item>\n\t\t<item>RWFRNT</item>\n\t</list>\n\t<list name=\"optimization_cmds\">\n\t\t<item>/OPT</item>\n\t\t<item>OPEQN</item>\n\t\t<item>OPFACT</item>\n\t\t<item>OPFRST</item>\n\t\t<item>OPGRAD</item>\n\t\t<item>OPKEEP</item>\n\t\t<item>OPLOOP</item>\n\t\t<item>OPPRNT</item>\n\t\t<item>OPRAND</item>\n\t\t<item>OPSUBP</item>\n\t\t<item>OPSWEEP</item>\n\t\t<item>OPTYPE</item>\n\t\t<item>OPUSER</item>\n\t\t<item>OPVAR</item>\n\t\t<item>TOCOMP</item>\n\t\t<item>TODEF</item>\n\t\t<item>TOFREQ</item>\n\t\t<item>TOTYPE</item>\n\t\t<item>TOVAR</item>\n\t\t<item>OPADD</item>\n\t\t<item>OPCLR</item>\n\t\t<item>OPDEL</item>\n\t\t<item>OPMAKE</item>\n\t\t<item>OPSEL</item>\n\t\t<item>OPANL</item>\n\t\t<item>OPDATA</item>\n\t\t<item>OPRESU</item>\n\t\t<item>OPSAVE</item>\n\t\t<item>OPEXE</item>\n\t\t<item>TOEXE</item>\n\t\t<item>TOLOOP</item>\n\t\t<item>OPLFA</item>\n\t\t<item>OPLGR</item>\n\t\t<item>OPLIST</item>\n\t\t<item>OPLSW</item>\n\t\t<item>OPRFA</item>\n\t\t<item>OPRGR</item>\n\t\t<item>OPRSW</item>\n\t\t<item>PLVAROPT</item>\n\t\t<item>PRVAROPT</item>\n\t\t<item>TOGRAPH</item>\n\t\t<item>TOLIST</item>\n\t\t<item>TOPLOT</item>\n\t\t<item>TOPRINT</item>\n\t\t<item>TOSTAT</item>\n\t\t<item>XVAROPT</item>\n\t</list>\n\t<list name=\"probabilistic_cmds\">\n\t\t<item>/PDS</item>\n\t\t<item>PDANL</item>\n\t\t<item>PDCORR</item>\n\t\t<item>PDINQR</item>\n\t\t<item>PDPLOT</item>\n\t\t<item>PDVAR</item>\n\t\t<item>PDDOEL</item>\n\t\t<item>PDDMCS</item>\n\t\t<item>PDMETH</item>\n\t\t<item>PDUSER</item>\n\t\t<item>PDEXE</item>\n\t\t<item>PDCDF</item>\n\t\t<item>PDCMAT</item>\n\t\t<item>PDHIST</item>\n\t\t<item>PDPINV</item>\n\t\t<item>PDPROB</item>\n\t\t<item>PDROPT</item>\n\t\t<item>PDSCAT</item>\n\t\t<item>PDSENS</item>\n\t\t<item>PDSHIS</item>\n\t\t<item>PDWRITE</item>\n\t\t<item>PDCLR</item>\n\t\t<item>PDRESU</item>\n\t\t<item>PDSAVE</item>\n\t\t<item>RSFIT</item>\n\t\t<item>RSPLOT</item>\n\t\t<item>RSPRNT</item>\n\t\t<item>RSSIMS</item>\n\t</list>\n\t<list name=\"display_cmds\">\n\t\t<item>/CMAP</item>\n\t\t<item>/DEVDISP</item>\n\t\t<item>FILEDISP</item>\n\t\t<item>HELPDISP</item>\n\t\t<item>NOCOLOR</item>\n\t\t<item>/SEG</item>\n\t\t<item>/SHOWDISP</item>\n\t\t<item>TRANS</item>\n\t\t<item>GRPH</item>\n\t\t<item>TERM</item>\n\t\t<item>FINISH</item>\n\t\t<item>PLOT</item>\n\t\t<item>STAT</item>\n\t</list>\n\t<list name=\"reduced_order_cmds\">\n\t\t<item>RMRESUME</item>\n\t\t<item>RMSAVE</item>\n\t\t<item>RMNDISP</item>\n\t\t<item>RMNEVEC</item>\n\t\t<item>RMALIST</item>\n\t\t<item>RMANL</item>\n\t\t<item>RMASTER</item>\n\t\t<item>RMCAP</item>\n\t\t<item>RMCLIST</item>\n\t\t<item>RMMLIST</item>\n\t\t<item>RMMRANGE</item>\n\t\t<item>RMMSELECT</item>\n\t\t<item>RMPORDER</item>\n\t\t<item>RMRGENERATE</item>\n\t\t<item>RMROPTIONS</item>\n\t\t<item>RMRPLOT</item>\n\t\t<item>RMRSTATUS</item>\n\t\t<item>RMSMPLE</item>\n\t\t<item>RMXPORT</item>\n\t\t<item>DCVSWP</item>\n\t\t<item>RMLVSCALE</item>\n\t\t<item>RMUSE</item>\n\t</list>\n\t<list name=\"parametric_functions\">\n\t\t<item>ABS</item>\n\t\t<item>SIGN</item>\n\t\t<item>EXP</item>\n\t\t<item>LOG</item>\n\t\t<item>LOG10</item>\n\t\t<item>SQRT</item>\n\t\t<item>NINT</item>\n\t\t<item>MOD</item>\n\t\t<item>RAND</item>\n\t\t<item>GDIS</item>\n\t\t<item>SIN</item>\n\t\t<item>COS</item>\n\t\t<item>TAN</item>\n\t\t<item>SINH</item>\n\t\t<item>COSH</item>\n\t\t<item>TANH</item>\n\t\t<item>ASIN</item>\n\t\t<item>ACOS</item>\n\t\t<item>ATAN</item>\n\t\t<item>ATAN2</item>\n\t\t<item>VALCHR</item>\n\t\t<item>CHRVAL</item>\n\t\t<item>UPCASE</item>\n\t\t<item>LWCASE</item>\n\t</list>\n\t<list name=\"elements\">\n\t\t<item>LINK1</item>\n\t\t<item>PLANE2</item>\n\t\t<item>BEAM3</item>\n\t\t<item>BEAM4</item>\n\t\t<item>SOLID5</item>\n\t\t<item>COMBIN7</item>\n\t\t<item>LINK8</item>\n\t\t<item>INFIN9</item>\n\t\t<item>LINK10</item>\n\t\t<item>LINK11</item>\n\t\t<item>CONTAC12</item>\n\t\t<item>PLANE13</item>\n\t\t<item>COMBIN14</item>\n\t\t<item>PIPE16</item>\n\t\t<item>PIPE17</item>\n\t\t<item>PIPE18</item>\n\t\t<item>PIPE20</item>\n\t\t<item>MASS21</item>\n\t\t<item>BEAM23</item>\n\t\t<item>BEAM24</item>\n\t\t<item>PLANE25</item>\n\t\t<item>MATRIX27</item>\n\t\t<item>SHELL28</item>\n\t\t<item>FLUID29</item>\n\t\t<item>FLUID30</item>\n\t\t<item>LINK31</item>\n\t\t<item>LINK32</item>\n\t\t<item>LINK33</item>\n\t\t<item>LINK34</item>\n\t\t<item>PLANE35</item>\n\t\t<item>SOURC36</item>\n\t\t<item>COMBIN37</item>\n\t\t<item>FLUID38</item>\n\t\t<item>COMBIN39</item>\n\t\t<item>COMBIN40</item>\n\t\t<item>SHELL41</item>\n\t\t<item>PLANE42</item>\n\t\t<item>SHELL43</item>\n\t\t<item>BEAM44</item>\n\t\t<item>SOLID45</item>\n\t\t<item>SOLID46</item>\n\t\t<item>INFIN47</item>\n\t\t<item>MATRIX50</item>\n\t\t<item>SHELL51</item>\n\t\t<item>CONTAC52</item>\n\t\t<item>PLANE53</item>\n\t\t<item>BEAM54</item>\n\t\t<item>PLANE55</item>\n\t\t<item>HYPER56</item>\n\t\t<item>SHELL57</item>\n\t\t<item>HYPER58</item>\n\t\t<item>PIPE59</item>\n\t\t<item>PIPE60</item>\n\t\t<item>SHELL61</item>\n\t\t<item>SOLID62</item>\n\t\t<item>SHELL63</item>\n\t\t<item>SOLID64</item>\n\t\t<item>SOLID65</item>\n\t\t<item>PLANE67</item>\n\t\t<item>LINK68</item>\n\t\t<item>SOLID69</item>\n\t\t<item>SOLID70</item>\n\t\t<item>MASS71</item>\n\t\t<item>HYPER74</item>\n\t\t<item>PLANE75</item>\n\t\t<item>PLANE77</item>\n\t\t<item>PLANE78</item>\n\t\t<item>FLUID79</item>\n\t\t<item>FLUID80</item>\n\t\t<item>FLUID81</item>\n\t\t<item>PLANE82</item>\n\t\t<item>PLANE83</item>\n\t\t<item>HYPER84</item>\n\t\t<item>HYPER86</item>\n\t\t<item>SOLID87</item>\n\t\t<item>VISCO88</item>\n\t\t<item>VISCO89</item>\n\t\t<item>SOLID90</item>\n\t\t<item>SHELL91</item>\n\t\t<item>SOLID92</item>\n\t\t<item>SHELL93</item>\n\t\t<item>CIRCU94</item>\n\t\t<item>SOLID95</item>\n\t\t<item>SOLID96</item>\n\t\t<item>SOLID97</item>\n\t\t<item>SOLID98</item>\n\t\t<item>SHELL99</item>\n\t\t<item>VISCO106</item>\n\t\t<item>VISCO107</item>\n\t\t<item>VISCO108</item>\n\t\t<item>TRANS109</item>\n\t\t<item>INFIN110</item>\n\t\t<item>INFIN111</item>\n\t\t<item>INTER115</item>\n\t\t<item>FLUID116</item>\n\t\t<item>SOLID117</item>\n\t\t<item>HF118</item>\n\t\t<item>HF119</item>\n\t\t<item>HF120</item>\n\t\t<item>PLANE121</item>\n\t\t<item>SOLID122</item>\n\t\t<item>SOLID123</item>\n\t\t<item>CIRCU124</item>\n\t\t<item>CIRCU125</item>\n\t\t<item>TRANS126</item>\n\t\t<item>SOLID127</item>\n\t\t<item>SOLID128</item>\n\t\t<item>FLUID129</item>\n\t\t<item>FLUID130</item>\n\t\t<item>SHELL131</item>\n\t\t<item>SHELL132</item>\n\t\t<item>FLUID136</item>\n\t\t<item>FLUID138</item>\n\t\t<item>FLUID139</item>\n\t\t<item>FLUID141</item>\n\t\t<item>FLUID142</item>\n\t\t<item>SHELL143</item>\n\t\t<item>ROM144</item>\n\t\t<item>PLANE145</item>\n\t\t<item>PLANE146</item>\n\t\t<item>SOLID147</item>\n\t\t<item>SOLID148</item>\n\t\t<item>SHELL150</item>\n\t\t<item>SURF151</item>\n\t\t<item>SURF152</item>\n\t\t<item>SURF153</item>\n\t\t<item>SURF154</item>\n\t\t<item>SHELL157</item>\n\t\t<item>HYPER158</item>\n\t\t<item>LINK160</item>\n\t\t<item>BEAM161</item>\n\t\t<item>PLANE162</item>\n\t\t<item>SHELL163</item>\n\t\t<item>SOLID164</item>\n\t\t<item>COMBI165</item>\n\t\t<item>MASS166</item>\n\t\t<item>LINK167</item>\n\t\t<item>SOLID168</item>\n\t\t<item>TARGE169</item>\n\t\t<item>TARGE170</item>\n\t\t<item>CONTA171</item>\n\t\t<item>CONTA172</item>\n\t\t<item>CONTA173</item>\n\t\t<item>CONTA174</item>\n\t\t<item>CONTA175</item>\n\t\t<item>CONTA178</item>\n\t\t<item>PRETS179</item>\n\t\t<item>LINK180</item>\n\t\t<item>SHELL181</item>\n\t\t<item>PLANE182</item>\n\t\t<item>PLANE183</item>\n\t\t<item>MPC184</item>\n\t\t<item>SOLID185</item>\n\t\t<item>SOLID186</item>\n\t\t<item>SOLID187</item>\n\t\t<item>BEAM188</item>\n\t\t<item>BEAM189</item>\n\t\t<item>SOLSH190</item>\n\t\t<item>SOLID191</item>\n\t\t<item>INTER192</item>\n\t\t<item>INTER193</item>\n\t\t<item>INTER194</item>\n\t\t<item>INTER195</item>\n\t\t<item>MESH200</item>\n\t\t<item>FOLLW201</item>\n\t\t<item>SHELL208</item>\n\t\t<item>SHELL209</item>\n\t\t<item>PLANE223</item>\n\t\t<item>SOLID226</item>\n\t\t<item>SOLID227</item>\n\t\t<item>PLANE230</item>\n\t\t<item>SOLID231</item>\n\t\t<item>SOLID232</item>\n\t\t<item>SURF251</item>\n\t\t<item>SURF252</item>\n\t</list>\n\t<list name=\"material_properties\">\n\t\t<item>EX</item>\n\t\t<item>EY</item>\n\t\t<item>EZ</item>\n\t\t<item>GXY</item>\n\t\t<item>NUXY</item>\n\t\t<item>ALPX</item>\n\t\t<item>ALPY</item>\n\t\t<item>ALPZ</item>\n\t\t<item>CTEX</item>\n\t\t<item>CTEY</item>\n\t\t<item>CTEZ</item>\n\t\t<item>THSX</item>\n\t\t<item>THSY</item>\n\t\t<item>THSZ</item>\n\t\t<item>REFT</item>\n\t\t<item>PRXY</item>\n\t\t<item>PRYZ</item>\n\t\t<item>PRXZ</item>\n\t\t<item>NUXY</item>\n\t\t<item>NUYZ</item>\n\t\t<item>NUXZ</item>\n\t\t<item>GXY</item>\n\t\t<item>GYZ</item>\n\t\t<item>GXZ</item>\n\t\t<item>DAMP</item>\n\t\t<item>DMPR</item>\n\t\t<item>MU</item>\n\t\t<item>DENS</item>\n\t\t<item>C</item>\n\t\t<item>ENTH</item>\n\t\t<item>KXX</item>\n\t\t<item>KYY</item>\n\t\t<item>KZZ</item>\n\t\t<item>HF</item>\n\t\t<item>EMIS</item>\n\t\t<item>QRATE</item>\n\t\t<item>VISC</item>\n\t\t<item>SONC</item>\n\t\t<item>RSVX</item>\n\t\t<item>RSVY</item>\n\t\t<item>RSVZ</item>\n\t\t<item>PERX</item>\n\t\t<item>MURX</item>\n\t\t<item>MURY</item>\n\t\t<item>MURZ</item>\n\t\t<item>MGXX</item>\n\t\t<item>MGYY</item>\n\t\t<item>MGZZ</item>\n\t\t<item>LSST</item>\n\t\t<item>SBKX</item>\n\t</list>\n\t<list name=\"force-displacement-labels\">\n\t\t<item>UX</item>\n\t\t<item>UY</item>\n\t\t<item>UZ</item>\n\t\t<item>FX</item>\n\t\t<item>FY</item>\n\t\t<item>FZ</item>\n\t\t<item>MX</item>\n\t\t<item>MY</item>\n\t\t<item>MZ</item>\n\t\t<item>HEAT</item>\n\t\t<item>HBOT</item>\n\t\t<item>HE2</item>\n\t\t<item>HE3</item>\n\t\t<item>HTOP</item>\n\t\t<item>FLOW</item>\n\t\t<item>AMPS</item>\n\t\t<item>CHRG</item>\n\t\t<item>CSGX</item>\n\t\t<item>CSGY</item>\n\t\t<item>CSGZ</item>\n\t\t<item>ROTX</item>\n\t\t<item>ROTY</item>\n\t\t<item>ROTZ</item>\n\t\t<item>WARP</item>\n\t\t<item>TEMP</item>\n\t\t<item>TBOT</item>\n\t\t<item>TE2</item>\n\t\t<item>TE3</item>\n\t\t<item>TTOP</item>\n\t\t<item>PRES</item>\n\t\t<item>VX</item>\n\t\t<item>VY</item>\n\t\t<item>VZ</item>\n\t\t<item>ENKE</item>\n\t\t<item>ENDS</item>\n\t\t<item>SP01</item>\n\t\t<item>SP02</item>\n\t\t<item>SP03</item>\n\t\t<item>SP04</item>\n\t\t<item>SP05</item>\n\t\t<item>SP06</item>\n\t\t<item>VOLT</item>\n\t\t<item>MAG</item>\n\t\t<item>AX</item>\n\t\t<item>AYAZ</item>\n\t</list>\n\t<list name=\"antype_flag\">\n\t\t<item>STATIC</item>\n\t\t<item>BUCKLE</item>\n\t\t<item>MODAL</item>\n\t\t<item>HARMIC</item>\n\t\t<item>TRANS</item>\n\t\t<item>SUBSTR</item>\n\t\t<item>SPECTR</item>\n\t</list>\n\t<list name=\"various_labels\">\n\t\t<!-- possibili etichette varie, tipo SMISC per ETABLE -->\n\t\t<!-- abbreviazioni del comando *GET,param,NODE,node_num,LOC,{x,y,z} -->\n\t\t<!--<item>NODE</item> ToDO: PER QUESTO BISOGNA DISTINGUERE TRA NODE e NODE(x,y,z) -->\n\t\t<item>NX</item>\n\t\t<item>NY</item>\n\t\t<item>NZ</item>\n\t</list>\n\n\t<contexts>\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n\t\t\t<StringDetect attribute=\"comment\" context=\"comment\" String=\"C***\" insensitive=\"true\" firstNonSpace=\"true\" />\n\t\t\t<DetectChar attribute =\"comment\" context=\"comment\" char=\"!\" />\n\t\t\t<keyword attribute=\"MatProp\" context=\"#stay\" String=\"various_labels\" />\n\t\t\t<RangeDetect attribute=\"Normal Text\" context=\"#stay\" char=\"(\" char1=\")\" />\n\t\t\t<DetectChar attribute=\"error\" context=\"open_parentesis\" char=\"(\" />\n\t\t\t<!-- the next one highlight variable assignements as normal text, to avoid F,,FY,1 been highlighted as F=10 -->\n\t\t\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"^[A-Za-z0-9]+\\=\" />\n\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"elements\" />\n\t\t\t<keyword attribute=\"MatProp\" context=\"#stay\" String=\"material_properties\" />\n\t\t\t<keyword attribute=\"Labels\" context=\"#stay\" String=\"force-displacement-labels\" />\n\t\t\t<keyword attribute=\"Labels\" context=\"#stay\" String=\"antype_flag\" />\n\t\t\t<keyword attribute=\"Commands\" context=\"#stay\" String=\"parametric_functions\" />\n\t\t\t<keyword attribute=\"SESSIONcmd\" context=\"#stay\" String=\"session_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"DBcmd\" context=\"#stay\" String=\"database_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"GRPH_cmds\" context=\"#stay\" String=\"graphic_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"APDLcmd\" context=\"#stay\" String=\"APDL_commands\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"PREP7Commands\" context=\"#stay\" String=\"prep7_commands\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"SOLUCommands\" context=\"#stay\" String=\"solution_commands\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"POST1Commands\" context=\"#stay\" String=\"POST1_commands\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"POST26Commands\" context=\"#stay\" String=\"POST26_commands\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"AUX2cmds\" context=\"#stay\" String=\"aux2_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"AUX3cmds\" context=\"#stay\" String=\"aux3_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"AUX12cmds\" context=\"#stay\" String=\"aux12_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"AUX15cmds\" context=\"#stay\" String=\"aux15_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"RUNSTATcmds\" context=\"#stay\" String=\"runstats_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"OPTIMIZATIONcmds\" context=\"#stay\" String=\"optimization_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"PROBcmds\" context=\"#stay\" String=\"probabilistic_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"DISPLAYcmds\" context=\"#stay\" String=\"display_cmds\" firstNonSpace=\"true\" />\n\t\t\t<keyword attribute=\"REDUORDERcmds\" context=\"#stay\" String=\"reduced_order_cmds\" firstNonSpace=\"true\" />\n\t\t\t<DetectChar attribute=\"String\" context=\"doublequotestring\" char=\"&quot;\" />\n\t\t\t<RangeDetect attribute=\"String\" context=\"#stay\" char=\"'\" char1=\"'\" />\n\t\t\t<RangeDetect attribute=\"variable\" context=\"#stay\" char=\"%\" char1=\"%\" />\n\t\t\t<keyword attribute=\"MatProp\" context=\"#stay\" String=\"APDL_commands\" />\n\t\t\t<Float attribute=\"NumFloat\" context=\"#stay\" />\n\t\t\t<Int attribute=\"NumInt\" context=\"Int Suffixes\" />\n\t\t</context>\n      <context name=\"Int Suffixes\" attribute=\"NumInt\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"NumInt\" context=\"#pop\" String=\"**\" />\n      </context>\n\t\t<context attribute=\"String\" name=\"doublequotestring\" lineEndContext=\"#stay\" >\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n\t\t</context>\n\t\t<context attribute=\"parentesis_not_closed\" name=\"open_parentesis\" lineEndContext=\"#pop\" >\n\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n\t\t</context>\n\t\t<context attribute=\"comment\" name=\"comment\" lineEndContext=\"#pop\" />\n\t</contexts>\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t\t<itemData name=\"MatProp\" defStyleNum=\"dsDataType\" />\n\t\t<itemData name=\"Labels\" defStyleNum=\"dsChar\" />\n\t\t<itemData name=\"APDLcmd\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"SESSIONcmd\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"DBcmd\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"GRPH_cmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"PREP7Commands\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"SOLUCommands\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"POST1Commands\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"POST26Commands\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"AUX2cmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"AUX3cmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"AUX12cmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"AUX15cmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"RUNSTATcmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"OPTIMIZATIONcmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"PROBcmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"DISPLAYcmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"REDUORDERcmds\" defStyleNum=\"dsFunction\" />\n\t\t<itemData name=\"Commands\" defStyleNum=\"dsOthers\" />\n\t\t<itemData name=\"variable\" defStyleNum=\"dsOthers\" />\n\t\t<itemData name=\"String\" defStyleNum=\"dsString\" />\n\t\t<itemData name=\"NumInt\" defStyleNum=\"dsDecVal\" />\n\t\t<itemData name=\"NumFloat\" defStyleNum=\"dsFloat\" />\n\t\t<itemData name=\"comment\" defStyleNum=\"dsComment\" />\n\t\t<itemData name=\"parentesis_not_closed\" defStyleNum=\"dsRegionMarker\" />\n\t\t<itemData name=\"error\" defStyleNum=\"dsError\" />\n\t</itemDatas>\n</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"!\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"0\" weakDeliminator=\"/*\" />\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/apache.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!-- Changelog:\n\nv1.1:\n- improved Syntax\n- added support for Apache 2.2 Directives\n- .ht* files may now automaticaly be highlighted\n\nv1.0:\n- first Release\n-->\n\n<language name=\"Apache Configuration\" section=\"Configuration\"\n          version=\"3\" kateversion=\"5.0\"\n          extensions=\"httpd.conf;httpd2.conf;apache.conf;apache2.conf;.htaccess*;.htpasswd*\"\n          mimetype=\"\"\n          author=\"Jan Janssen (medhefgo@googlemail.com)\" license=\"LGPL\">\n\n<highlighting>\n<list name=\"String Directives\">\n<item>AcceptFilter</item>\n<item>AccessFileName</item>\n<item>Action</item>\n<item>AddAlt</item>\n<item>AddAltByEncoding</item>\n<item>AddAltByType</item>\n<item>AddCharset</item>\n<item>AddDefaultCharset</item>\n<item>AddDescription</item>\n<item>AddEncoding</item>\n<item>AddHandler</item>\n<item>AddIcon</item>\n<item>AddIconByEncoding</item>\n<item>AddIconByType</item>\n<item>AddInputFilter</item>\n<item>AddLanguage</item>\n<item>AddModuleInfo</item>\n<item>AddOutputFilter</item>\n<item>AddOutputFilterByType</item>\n<item>AddType</item>\n<item>Alias</item>\n<item>AliasMatch</item>\n<item>Allow</item>\n<item>Anonymous</item>\n<item>AuthBasicProvider</item>\n<item>AuthDBMGroupFile</item>\n<item>AuthDBMUserFile</item>\n<item>AuthDigestDomain</item>\n<item>AuthDigestFile</item>\n<item>AuthDigestGroupFile</item>\n<item>AuthDigestNonceFormat</item>\n<item>AuthDigestProvider</item>\n<item>AuthGroupFile</item>\n<item>AuthLDAPBindDN</item>\n<item>AuthLDAPBindPassword</item>\n<item>AuthLDAPCharsetConfig</item>\n<item>AuthLDAPGroupAttribute</item>\n<item>AuthLDAPUrl</item>\n<item>AuthName</item>\n<item>AuthUserFile</item>\n<item>BrowserMatch</item>\n<item>BrowserMatchNoCase</item>\n<item>BS2000Account</item>\n<item>CacheDisable</item>\n<item>CacheEnable</item>\n<item>CacheFile</item>\n<item>CacheGcClean</item>\n<item>CacheGcUnused</item>\n<item>CacheRoot</item>\n<item>CGIMapExtension</item>\n<item>CharsetDefault</item>\n<item>CharsetOptions</item>\n<item>CharsetSourceEnc</item>\n<item>CookieDomain</item>\n<item>CookieLog</item>\n<item>CookieName</item>\n<item>CoreDumpDirectory</item>\n<item>CustomLog</item>\n<item>Dav</item>\n<item>DavGenericLockDB</item>\n<item>DavLockDB</item>\n<item>DBDParams</item>\n<item>DBDPrepareSQL</item>\n<item>DBDriver</item>\n<item>DefaultIcon</item>\n<item>DefaultLanguage</item>\n<item>DefaultType</item>\n<item>DeflateFilterNote</item>\n<item>Deny</item>\n<item>DirectoryIndex</item>\n<item>DocumentRoot</item>\n<item>ErrorDocument</item>\n<item>ErrorLog</item>\n<item>Example</item>\n<item>ExpiresByType</item>\n<item>ExpiresDefault</item>\n<item>ExtFilterDefine</item>\n<item>ExtFilterOptions</item>\n<item>FilterChain</item>\n<item>FilterDeclare</item>\n<item>FilterProtocol</item>\n<item>FilterProvider</item>\n<item>FilterTrace</item>\n<item>ForceType</item>\n<item>ForensicLog</item>\n<item>Group</item>\n<item>Header</item>\n<item>HeaderName</item>\n<item>ImapBase</item>\n<item>Include</item>\n<item>IndexIgnore</item>\n<item>IndexOptions</item>\n<item>IndexStyleSheet</item>\n<item>ISAPICacheFile</item>\n<item>LanguagePriority</item>\n<item>LDAPSharedCacheFile</item>\n<item>LDAPTrustedCA</item>\n<item>LDAPTrustedCAType</item>\n<item>LDAPTrustedClientCert</item>\n<item>LDAPTrustedGlobalCert</item>\n<item>Listen</item>\n<item>LoadFile</item>\n<item>LoadModule</item>\n<item>LockFile</item>\n<item>LogFormat</item>\n<item>MetaDir</item>\n<item>MetaSuffix</item>\n<item>MimeMagicFile</item>\n<item>MMapFile</item>\n<item>NameVirtualHost</item>\n<item>NoProxy</item>\n<item>NWSSLTrustedCerts</item>\n<item>NWSSLUpgradeable</item>\n<item>PassEnv</item>\n<item>PidFile</item>\n<item>ProxyBlock</item>\n<item>ProxyDomain</item>\n<item>ProxyPass</item>\n<item>ProxyPassReverse</item>\n<item>ProxyPassReverseCookieDomain</item>\n<item>ProxyPassReverseCookiePath</item>\n<item>ProxyRemote</item>\n<item>ProxyRemoteMatch</item>\n<item>ReadmeName</item>\n<item>Redirect</item>\n<item>RedirectMatch</item>\n<item>RedirectPermanent</item>\n<item>RedirectTemp</item>\n<item>RemoveCharset</item>\n<item>RemoveEncoding</item>\n<item>RemoveHandler</item>\n<item>RemoveInputFilter</item>\n<item>RemoveLanguage</item>\n<item>RemoveOutputFilter</item>\n<item>RemoveType</item>\n<item>RequestHeader</item>\n<item>Require</item>\n<item>RewriteBase</item>\n<item>RewriteCond</item>\n<item>RewriteLock</item>\n<item>RewriteLog</item>\n<item>RewriteMap</item>\n<item>RewriteRule</item>\n<item>ScoreBoardFile</item>\n<item>Script</item>\n<item>ScriptAlias</item>\n<item>ScriptAliasMatch</item>\n<item>ScriptLog</item>\n<item>ScriptSock</item>\n<item>SecureListen</item>\n<item>ServerAdmin</item>\n<item>ServerAlias</item>\n<item>ServerName</item>\n<item>ServerPath</item>\n<item>ServerRoot</item>\n<item>SetEnv</item>\n<item>SetEnvIf</item>\n<item>SetEnvIfNoCase</item>\n<item>SetHandler</item>\n<item>SetInputFilter</item>\n<item>SetOutputFilter</item>\n<item>SSIEndTag</item>\n<item>SSIErrorMsg</item>\n<item>SSIStartTag</item>\n<item>SSITimeFormat</item>\n<item>SSIUndefinedEcho</item>\n<item>SSLCACertificateFile</item>\n<item>SSLCACertificatePath</item>\n<item>SSLCADNRequestFile</item>\n<item>SSLCADNRequestPath</item>\n<item>SSLCARevocationFile</item>\n<item>SSLCARevocationPath</item>\n<item>SSLCertificateChainFile</item>\n<item>SSLCertificateFile</item>\n<item>SSLCertificateKeyFile</item>\n<item>SSLCipherSuite</item>\n<item>SSLCryptoDevice</item>\n<item>SSLHonorCiperOrder</item>\n<item>SSLPassPhraseDialog</item>\n<item>SSLProxyCACertificateFile</item>\n<item>SSLProxyCACertificatePath</item>\n<item>SSLProxyCARevocationFile</item>\n<item>SSLProxyCARevocationPath</item>\n<item>SSLProxyCipherSuite</item>\n<item>SSLProxyMachineCertificateFile</item>\n<item>SSLProxyMachineCertificatePath</item>\n<item>SSLProxyProtocol</item>\n<item>SSLRandomSeed</item>\n<item>SSLRequire</item>\n<item>SSLRequireSSL</item>\n<item>SSLUserName</item>\n<item>SuexecUserGroup</item>\n<item>TransferLog</item>\n<item>TypesConfig</item>\n<item>UnsetEnv</item>\n<item>User</item>\n<item>UserDir</item>\n<item>VirtualDocumentRoot</item>\n<item>VirtualDocumentRootIP</item>\n<item>VirtualScriptAlias</item>\n<item>VirtualScriptAliasIP</item>\n<item>Win32DisableAcceptEx</item>\n</list>\n\n<list name=\"Integer Directives\">\n<item>AllowCONNECT</item>\n<item>AssignUserID</item>\n<item>AuthDigestNonceLifetime</item>\n<item>AuthDigestShmemSize</item>\n<item>CacheDefaultExpire</item>\n<item>CacheDirLength</item>\n<item>CacheDirLevels</item>\n<item>CacheForceCompletion</item>\n<item>CacheGcDaily</item>\n<item>CacheGcInterval</item>\n<item>CacheGcMemUsage</item>\n<item>CacheLastModifiedFactor</item>\n<item>CacheMaxExpire</item>\n<item>CacheMaxFileSize</item>\n<item>CacheMinFileSize</item>\n<item>CacheSize</item>\n<item>CacheTimeMargin</item>\n<item>ChildPerUserID</item>\n<item>CookieExpires</item>\n<item>DavMinTimeout</item>\n<item>DBDExptime</item>\n<item>DBDKeep</item>\n<item>DBDMax</item>\n<item>DBDMin</item>\n<item>DBDPersist</item>\n<item>DeflateBufferSize</item>\n<item>DeflateCompressionLevel</item>\n<item>DeflateMemLevel</item>\n<item>DeflateWindowSize</item>\n<item>IdentityCheckTimeout</item>\n<item>ISAPIReadAheadBuffer</item>\n<item>KeepAliveTimeout</item>\n<item>LDAPCacheEntries</item>\n<item>LDAPCacheTTL</item>\n<item>LDAPConnectionTimeout</item>\n<item>LDAPOpCacheEntries</item>\n<item>LDAPOpCacheTTL</item>\n<item>LDAPSharedCacheSize</item>\n<item>LimitInternalRecursion</item>\n<item>LimitRequestBody</item>\n<item>LimitRequestFields</item>\n<item>LimitRequestFieldsize</item>\n<item>LimitRequestLine</item>\n<item>LimitXMLRequestBody</item>\n<item>ListenBacklog</item>\n<item>MaxClients</item>\n<item>MaxKeepAliveRequests</item>\n<item>MaxMemFree</item>\n<item>MaxRequestsPerChild</item>\n<item>MaxRequestsPerThread</item>\n<item>MaxSpareServers</item>\n<item>MaxSpareThreads</item>\n<item>MaxThreads</item>\n<item>MaxThreadsPerChild</item>\n<item>MCacheMaxObjectCount</item>\n<item>MCacheMaxObjectSize</item>\n<item>MCacheMaxStreamingBuffer</item>\n<item>MCacheMinObjectSize</item>\n<item>MCacheSize</item>\n<item>MinSpareServers</item>\n<item>MinSpareThreads</item>\n<item>NumServers</item>\n<item>ProxyIOBufferSize</item>\n<item>ProxyMaxForwards</item>\n<item>ProxyReceiveBufferSize</item>\n<item>ProxyTimeout</item>\n<item>RewriteLogLevel</item>\n<item>RLimitCPU</item>\n<item>RLimitMEM</item>\n<item>RLimitNPROC</item>\n<item>ScriptLogBuffer</item>\n<item>ScriptLogLength</item>\n<item>SendBufferSize</item>\n<item>ServerLimit</item>\n<item>SSLProxyVerifyDepth</item>\n<item>SSLSessionCacheTimeout</item>\n<item>SSLVerifyDepth</item>\n<item>StartServers</item>\n<item>StartThreads</item>\n<item>ThreadLimit</item>\n<item>ThreadsPerChild</item>\n<item>ThreadStackSize</item>\n<item>TimeOut</item>\n</list>\n\n<list name=\"Alternative Directives\">\n<item>AcceptMutex</item>\n<item>AcceptPathInfo</item>\n<item>AllowEncodedSlashes</item>\n<item>AllowOverride</item>\n<item>Anonymous_Authoritative</item>\n<item>Anonymous_LogEmail</item>\n<item>Anonymous_MustGiveEmail</item>\n<item>Anonymous_NoUserID</item>\n<item>Anonymous_VerifyEmail</item>\n<item>AuthAuthoritative</item>\n<item>AuthBasicAuthoritative</item>\n<item>AuthBasicProvider</item>\n<item>AuthDBMAuthoritative</item>\n<item>AuthDBMType</item>\n<item>AuthDefaultAuthoritative</item>\n<item>AuthDigestAlgorithm</item>\n<item>AuthDigestNcCheck</item>\n<item>AuthDigestQop</item>\n<item>AuthLDAPAuthoritative</item>\n<item>AuthLDAPCompareDNOnServer</item>\n<item>AuthLDAPDereferenceAliases</item>\n<item>AuthLDAPEnabled</item>\n<item>AuthLDAPFrontPageHack</item>\n<item>AuthLDAPGroupAttributeIsDN</item>\n<item>AuthLDAPRemoteUserIsDN</item>\n<item>AuthType</item>\n<item>AuthzDBMAuthoritative</item>\n<item>AuthzDBMType</item>\n<item>AuthzDefaultAuthoritative</item>\n<item>AuthzGroupFileAuthoritative</item>\n<item>AuthzLDAPAuthoritative</item>\n<item>AuthzOwnerAuthoritative</item>\n<item>AuthzUserAuthoritative</item>\n<item>BufferedLogs</item>\n<item>CacheExpiryCheck</item>\n<item>CacheIgnoreCacheControl</item>\n<item>CacheIgnoreHeaders</item>\n<item>CacheIgnoreNoLastMod</item>\n<item>CacheNegotiatedDocs</item>\n<item>CacheStoreNoStore</item>\n<item>CacheStorePrivate</item>\n<item>CheckSpelling</item>\n<item>ContentDigest</item>\n<item>CookieStyle</item>\n<item>CookieTracking</item>\n<item>CoreDumpDirectory</item>\n<item>CustomLog</item>\n<item>DavDepthInfinity</item>\n<item>DirectorySlash</item>\n<item>DumpIOInput</item>\n<item>DumpIOOutput</item>\n<item>EnableExceptionHook</item>\n<item>EnableMMAP</item>\n<item>EnableSendfile</item>\n<item>ExpiresActive</item>\n<item>ExtendedStatus</item>\n<item>FileETag</item>\n<item>ForceLanguagePriority</item>\n<item>HostnameLookups</item>\n<item>IdentityCheck</item>\n<item>ImapDefault</item>\n<item>ImapMenu</item>\n<item>IndexOrderDefault</item>\n<item>ISAPIAppendLogToErrors</item>\n<item>ISAPIAppendLogToQuery</item>\n<item>ISAPIFakeAsync</item>\n<item>ISAPILogNotSupported</item>\n<item>KeepAlive</item>\n<item>LDAPTrustedMode</item>\n<item>LDAPVerifyServerCert</item>\n<item>LogLevel</item>\n<item>MCacheRemovalAlgorithm</item>\n<item>MetaFiles</item>\n<item>ModMimeUsePathInfo</item>\n<item>MultiviewsMatch</item>\n<item>Options</item>\n<item>Order</item>\n<item>ProtocolEcho</item>\n<item>ProxyBadHeader</item>\n<item>ProxyErrorOverride</item>\n<item>ProxyPreserveHost</item>\n<item>ProxyRequests</item>\n<item>ProxyVia</item>\n<item>RewriteEngine</item>\n<item>RewriteOptions</item>\n<item>Satisfy</item>\n<item>ScriptInterpreterSource</item>\n<item>ServerSignature</item>\n<item>ServerTokens</item>\n<item>SSLEngine</item>\n<item>SSLHonorCipherOrder</item>\n<item>SSLMutex</item>\n<item>SSLOptions</item>\n<item>SSLProtocol</item>\n<item>SSLProxyEngine</item>\n<item>SSLProxyVerify</item>\n<item>SSLSessionCache</item>\n<item>SSLVerifyClient</item>\n<item>UseCanonicalName</item>\n<item>XBitHack</item>\n</list>\n\n<list name=\"Alternates\">\n<item>On</item>\n<item>Off</item>\n<item>Default</item>\n<item>flock</item>\n<item>fcntl</item>\n<item>posixsem</item>\n<item>pthread</item>\n<item>sysvsem</item>\n<item>All</item>\n<item>None</item>\n<item>AuthConfig</item>\n<item>FileInfo</item>\n<item>Indexes</item>\n<item>Limit</item>\n<item>Options</item>\n\n<item>ExecCGI</item>\n<item>FollowSymLinks</item>\n<item>Includes</item>\n<item>IncludesNOEXEC</item>\n<item>Indexes</item>\n<item>MultiViews</item>\n<item>SymLinksIfOwnerMatch</item>\n<item>StdEnvVars</item>\n<item>CompatEnvVars</item>\n<item>ExportCertData</item>\n<item>FakeBasicAuth</item>\n<item>StrictRequire</item>\n<item>OptRenegotiate</item>\n\n<item>SDBM</item>\n<item>GDBM</item>\n<item>NDBM</item>\n<item>DB</item>\n<item>MD5</item>\n<item>MD5-sess</item>\n<item>auth</item>\n<item>auth-int</item>\n<item>never</item>\n<item>searching</item>\n<item>finding</item>\n<item>always</item>\n<item>Basic</item>\n<item>Digest</item>\n<item>Connection</item>\n<item>Keep-Alive</item>\n<item>Proxy-Authenticate</item>\n<item>Proxy-Authorization</item>\n<item>TE</item>\n<item>Trailers</item>\n<item>Transfer-Encoding</item>\n<item>Upgrade</item>\n<item>Netscape</item>\n<item>Cookie</item>\n<item>Cookie2</item>\n<item>RFC2109</item>\n<item>RFC2965</item>\n<item>INode</item>\n<item>MTime</item>\n<item>Size</item>\n<item>Prefer</item>\n<item>Fallback</item>\n<item>Double</item>\n<item>error</item>\n<item>nocontent</item>\n<item>map</item>\n<item>referer</item>\n<item>formatted</item>\n<item>semiformatted</item>\n<item>unformatted</item>\n<item>Ascending</item>\n<item>Descending</item>\n<item>Name</item>\n<item>Date</item>\n<item>Size</item>\n<item>Description</item>\n<item>SSL</item>\n<item>TLS</item>\n<item>STARTTLS</item>\n<item>emerg</item>\n<item>alert</item>\n<item>crit</item>\n<item>error</item>\n<item>warn</item>\n<item>notice</item>\n<item>info</item>\n<item>debug</item>\n<item>LRU</item>\n<item>GDSF</item>\n<item>Any</item>\n<item>NegotiatedOnly</item>\n<item>Filters</item>\n<item>Handlers</item>\n<item>Deny,Allow</item>\n<item>Allow,Deny</item>\n<item>Mutual-failure</item>\n<item>IsError</item>\n<item>Ignore</item>\n<item>StartBody</item>\n<item>Full</item>\n<item>Block</item>\n<item>inherit</item>\n<item>Registry</item>\n<item>Registry-Strict</item>\n<item>Script</item>\n<item>EMail</item>\n<item>Major</item>\n<item>Minor</item>\n<item>Min</item>\n<item>Minimal</item>\n<item>Prod</item>\n<item>ProductOnly</item>\n<item>OS</item>\n<item>Full</item>\n<item>optional</item>\n<item>posixsem</item>\n<item>sysvsem</item>\n<item>sem</item>\n<item>pthread</item>\n<item>fcntl:</item>\n<item>flock:</item>\n<item>file:</item>\n<item>yes</item>\n<item>no</item>\n<item>SSLv2</item>\n<item>SSLv3</item>\n<item>TLSv1</item>\n<item>require</item>\n<item>optional_no_ca</item>\n<item>nonenotnull</item>\n<item>dbm:</item>\n<item>shm:</item>\n<item>dc:</item>\n<item>DNS</item>\n</list>\n\n\n<contexts>\n <context name=\"apache\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n  <keyword context=\"String Directives\" String=\"String Directives\" />\n  <keyword attribute=\"Directives\" context=\"Integer Directives\" String=\"Integer Directives\" />\n  <keyword attribute=\"Directives\" context=\"Alternative Directives\" String=\"Alternative Directives\" />\n\n  <RegExpr attribute=\"Container\" context=\"Container Open\" String=\"&lt;\\w+\" beginRegion=\"Container\" />\n  <RegExpr attribute=\"Container\" context=\"Container Close\" String=\"&lt;/\\w+\" endRegion=\"Container\" />\n  <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" firstNonSpace=\"true\" />\n </context>\n\n <!--\tDirectives - separated after String, Integer and Alternatives -->\n <context name=\"String Directives\" attribute=\"Directives\" lineEndContext=\"#pop\">\n  <RegExpr attribute=\"String\" context=\"#stay\" String=\"[^#]*\" />\n  <IncludeRules context=\"Comment Alert\" />\n </context>\n\n <context name=\"Integer Directives\" attribute=\"Other\" lineEndContext=\"#pop\">\n  <Float attribute=\"Float\" context=\"Integer Directives\" />\n  <Int attribute=\"Int\" context=\"Integer Directives\" />\n  <IncludeRules context=\"Comment Alert\" />\n </context>\n\n <context name=\"Alternative Directives\" attribute=\"Other\" lineEndContext=\"#pop\">\n  <keyword attribute=\"Alternates\" context=\"#stay\" String=\"Alternates\" />\n  <DetectChar attribute=\"Alternates\" context=\"#stay\" char=\"-\" />\n  <DetectChar attribute=\"Alternates\" context=\"#stay\" char=\"+\" />\n  <IncludeRules context=\"Comment Alert\" />\n </context>\n\n<!--\tOther -->\n <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n  <DetectSpaces />\n  <IncludeRules context=\"##Alerts\" />\n  <DetectIdentifier />\n </context>\n\n<!--\tContainer -->\n <context name=\"Container Open\" attribute=\"Container\" lineEndContext=\"#pop\">\n  <DetectChar attribute=\"Container\" context=\"Alert\" char=\"&gt;\" />\n  <RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"[^#&gt;]*\" />\n  <IncludeRules context=\"Comment Alert\" />\n </context>\n\n <context name=\"Container Close\" attribute=\"Container\" lineEndContext=\"#pop\">\n  <DetectChar attribute=\"Container\" context=\"Alert\" char=\"&gt;\" />\n </context>\n\n<!--\tAlerts -->\n <context name=\"Comment Alert\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n  <DetectChar attribute=\"Alert\" context=\"Alert\" char=\"#\" />\n </context>\n\n <context name=\"Alert\" attribute=\"Alert\" lineEndContext=\"#pop\" />\n</contexts>\n\n<itemDatas>\n <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n <itemData name=\"Directives\" defStyleNum=\"dsExtension\" bold=\"true\" spellChecking=\"false\"/>\n <itemData name=\"String\" defStyleNum=\"dsString\" />\n <itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n <itemData name=\"Int\" defStyleNum=\"dsFloat\" />\n <itemData name=\"Alternates\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n <itemData name=\"Alert\" defStyleNum=\"dsError\" />\n <itemData name=\"Container\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n <itemData name=\"Attribute\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n <itemData name=\"Other\" defStyleNum=\"dsChar\" />\n</itemDatas>\n</highlighting>\n\n\n<general>\n <comments>\n  <comment name=\"singleLine\" start=\"#\" />\n </comments>\n <keywords casesensitive=\"0\" weakDeliminator=\",\" />\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/apparmor.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY varName     \"[A-Za-z]\\w*\">\n\t<!ENTITY variable    \"@\\{&varName;\\}\">\n\t<!ENTITY exec        \"[pPcC]?[iuU]?x\">\n\t<!ENTITY globbChars  \"*?\">\n\t<!-- Characters not allowed in a path -->\n\t<!ENTITY noPathChar  \"\\s\\)&quot;\">\n\t<!ENTITY noPathCharWithoutSpace \")&quot;\">\n\t<!ENTITY endPath     \",([\\s&quot;]|$)\">\n]>\n\n<!--\n  AppArmor Profiles Syntax Highlighting Definition for the KDE KSyntaxHighlighting Framework\n  ==========================================================================================\n   This file is part of the KDE's KSyntaxHighlighting framework.\n\n   Copyright (c) 2017-2019 Nibaldo González S. (nibgonz@gmail.com)\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy of this\n   software and associated documentation files (the \"Software\"), to deal in the Software\n   without restriction, including without limitation the rights to use, copy, modify, merge,\n   publish, distribute, sublicense, and/or sell copies of the Software, and to permit\n   persons to whom the Software is furnished to do so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included\n   in all copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n   PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n   AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n  ==========================================================================================\n\n  Last update:\n    Syntax highlighting based on AppArmor 2.13.3\n    For more details about the syntax of AppArmor profiles, visit:\n      https://gitlab.com/apparmor/apparmor/wikis/Documentation\n      https://manpages.ubuntu.com/manpages/disco/en/man5/apparmor.d.5.html\n\n  Change log:\n   * Version 9 [20-Jun-2019]: (AppArmor 2.13.3):\n      - Add new network domain keywords.\n      - Fixes: drop unsupported 'to' operator for link rules and only highlight the 'in'\n        operator in mount rules. Only highlight valid numbers in rlimit rules.\n   * Version 8 [02-Apr-2019]: (AppArmor 2.13.2)\n      - Do not highlight variable assignments and alias rules within profiles.\n      - Add keywords of \"tunables/share\" variables.\n      - Change style of \"Other Option\" attribute and remove one indentation.\n   * Version 7 [15-Sep-2018]:\n      - Update itemData's style for the new Solarized color schemes.\n      - Fixes in \"_end_rule_irnc\".\n   * Version 6 [24-Jul-2018, by Nibaldo G.]: (AppArmor 2.13.0)\n      - Fixes for Include rules, add 'if exists'. Fix escapes & globbing in text quoted.\n      - Improvements in paths that start with variables, hats, comments and variable\n        assignments and others. Add some abstractions & filesystems.\n   * Version 4 [25-Jan-2018, by Nibaldo G.]: (AppArmor 2.12.0)\n      - New keywords: network and mount rules, default abstractions, variables and others.\n      - Multiple improvements and fixes.\n      - Do not allow comments within rules and in variable assignment lines.\n   * Version 3 [24-Sep-2017, by Nibaldo G.]:\n      - Fix incorrect highlighting of the DBus rule 'name' keyword.\n   * Version 2 [29-Aug-2017, by Nibaldo G.]:\n      - Improvements and bug fixes.\n      - Each rule has its own context.\n      - The profile name is highlighted in the profile header and profile transition rules.\n   * Version 1 [22-Feb-2017, by Nibaldo González]:\n      - Initial version. Support for profile syntax of Apparmor 2.11.\n-->\n\n<language name=\"AppArmor Security Profile\"\n          version=\"9\"\n          kateversion=\"5.0\"\n          section=\"Markup\"\n          extensions=\"usr.bin.*;usr.sbin.*;bin.*;sbin.*;usr.lib.*;usr.lib64.*;usr.lib32.*;usr.libx32.*;usr.libexec.*;usr.local.bin.*;usr.local.sbin.*;usr.local.lib*;opt.*;etc.cron.*;snap.*;snap-update-ns.*;snap-confine.*\"\n          priority=\"0\"\n          mimetype=\"\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\"\n          license=\"MIT\">\n\n<highlighting>\n\n\t<!-- Profile Header -->\n\t<list name=\"profile_head\">\n\t\t<item>profile</item>\n\t\t<item>hat</item>\n\t</list>\n\t<list name=\"profile_options\">\n\t\t<item>flags</item>\n\t\t<item>xattrs</item>\n\t</list>\n\t<list name=\"profile_flags\">\n\t\t<item>audit</item>\n\t\t<item>complain</item>\n\t\t<item>enforce</item>\n\t\t<item>mediate_deleted</item>\n\t\t<item>attach_disconnected</item>\n\t\t<item>chroot_relative</item>\n\t\t<item>chroot_attach</item>\n\t\t<item>chroot_no_attach</item>\n\t\t<item>delegate_deleted</item>\n\t\t<item>no_attach_disconnected</item>\n\t\t<item>namespace_relative</item>\n\t</list>\n\n\t<!-- Rule Qualifiers -->\n\t<list name=\"access_types\">\n\t\t<item>allow</item>\n\t\t<item>deny</item>\n\t</list>\n\t<list name=\"file_qualifiers\">\n\t\t<item>owner</item>\n\t\t<item>other</item>\n\t</list>\n\t<list name=\"qualifiers\">\n\t\t<item>audit</item>\n\t\t<!-- noaudit/quiet, defined, not -->\n\t</list>\n\t<!-- Conditional: if, else -->\n\n\t<!-- Capabilities, Capability Rule.\n\t     Lowercase capability name without 'CAP_' prefix.\n\t     http://man7.org/linux/man-pages/man7/capabilities.7.html -->\n\t<list name=\"rule_capability\">\n\t\t<item>audit_control</item>\n\t\t<item>audit_read</item>\n\t\t<item>audit_write</item>\n\t\t<item>block_suspend</item>\n\t\t<item>chown</item>\n\t\t<item>dac_override</item>\n\t\t<item>dac_read_search</item>\n\t\t<item>fowner</item>\n\t\t<item>fsetid</item>\n\t\t<item>ipc_lock</item>\n\t\t<item>ipc_owner</item>\n\t\t<item>kill</item>\n\t\t<item>lease</item>\n\t\t<item>linux_immutable</item>\n\t\t<item>mac_admin</item>\n\t\t<item>mac_override</item>\n\t\t<item>mknod</item>\n\t\t<item>net_admin</item>\n\t\t<item>net_bind_service</item>\n\t\t<item>net_broadcast</item>\n\t\t<item>net_raw</item>\n\t\t<item>setgid</item>\n\t\t<item>setfcap</item>\n\t\t<item>setpcap</item>\n\t\t<item>setuid</item>\n\t\t<item>sys_admin</item>\n\t\t<item>sys_boot</item>\n\t\t<item>sys_chroot</item>\n\t\t<item>sys_module</item>\n\t\t<item>sys_nice</item>\n\t\t<item>sys_pacct</item>\n\t\t<item>sys_ptrace</item>\n\t\t<item>sys_rawio</item>\n\t\t<item>sys_resource</item>\n\t\t<item>sys_time</item>\n\t\t<item>sys_tty_config</item>\n\t\t<item>syslog</item>\n\t\t<item>wake_alarm</item>\n\t</list>\n\n\t<!-- Network Rule -->\n\t<list name=\"rule_network\">\n\t\t<!-- Domain.\n\t\t     Also: unix -->\n\t\t<item>inet</item>\n\t\t<item>ax25</item>\n\t\t<item>ipx</item>\n\t\t<item>appletalk</item>\n\t\t<item>netrom</item>\n\t\t<item>bridge</item>\n\t\t<item>atmpvc</item>\n\t\t<item>x25</item>\n\t\t<item>inet6</item>\n\t\t<item>rose</item>\n\t\t<item>netbeui</item>\n\t\t<item>security</item>\n\t\t<item>key</item>\n\t\t<item>packet</item>\n\t\t<item>ash</item>\n\t\t<item>econet</item>\n\t\t<item>atmsvc</item>\n\t\t<item>sna</item>\n\t\t<item>irda</item>\n\t\t<item>pppox</item>\n\t\t<item>wanpipe</item>\n\t\t<item>bluetooth</item>\n\t\t<item>netlink</item>\n\t\t<item>rds</item>\n\t\t<item>llc</item>\n\t\t<item>can</item>\n\t\t<item>tipc</item>\n\t\t<item>iucv</item>\n\t\t<item>rxrpc</item>\n\t\t<item>isdn</item>\n\t\t<item>phonet</item>\n\t\t<item>ieee802154</item>\n\t\t<item>caif</item>\n\t\t<item>alg</item>\n\t\t<item>nfc</item>\n\t\t<item>vsock</item>\n\t\t<item>mpls</item>\n\t\t<item>ib</item>\n\t\t<item>kcm</item>\n\t\t<item>smc</item>\n\t\t<item>qipcrtr</item>\n\t\t<item>xdp</item>\n\n\t\t<!-- Type.\n\t\t     Also: packet -->\n\t\t<item>stream</item>\n\t\t<item>dgram</item>\n\t\t<item>seqpacket</item>\n\t\t<item>rdm</item>\n\t\t<item>raw</item>\n\n\t\t<!-- Protocol -->\n\t\t<item>tcp</item>\n\t\t<item>udp</item>\n\t\t<item>icmp</item>\n\t</list>\n\t<list name=\"rule_network_unix\">\n\t\t<!-- NOTE: This keyword is placed in a separate list,\n\t\t     to avoid conflicts with the 'unix' rule name. -->\n\t\t<item>unix</item>\n\t</list>\n\n\t<!-- Mount Rule -->\n\t<list name=\"rule_mount_options\">\n\t\t<item>fstype</item>\n\t\t<item>vfstype</item>\n\t\t<item>options</item>\n\t\t<item>option</item>\n\t</list>\n\t<list name=\"rule_mount_flags\">\n\t\t<item>r</item>\n\t\t<item>w</item>\n\t\t<item>rw</item>\n\t\t<item>ro</item>\n\t\t<item>read-only</item>\n\t\t<item>suid</item>\n\t\t<item>nosuid</item>\n\t\t<item>dev</item>\n\t\t<item>nodev</item>\n\t\t<item>exec</item>\n\t\t<item>noexec</item>\n\t\t<item>sync</item>\n\t\t<item>async</item>\n\t\t<item>remount</item>\n\t\t<item>mand</item>\n\t\t<item>nomand</item>\n\t\t<item>dirsync</item>\n\t\t<item>atime</item>\n\t\t<item>noatime</item>\n\t\t<item>diratime</item>\n\t\t<item>nodiratime</item>\n\t\t<item>bind</item>\n\t\t<item>B</item>\n\t\t<item>move</item>\n\t\t<item>M</item>\n\t\t<item>rbind</item>\n\t\t<item>R</item>\n\t\t<item>verbose</item>\n\t\t<item>silent</item>\n\t\t<item>loud</item>\n\t\t<item>acl</item>\n\t\t<item>noacl</item>\n\t\t<item>unbindable</item>\n\t\t<item>make-unbindable</item>\n\t\t<item>runbindable</item>\n\t\t<item>make-runbindable</item>\n\t\t<item>private</item>\n\t\t<item>make-private</item>\n\t\t<item>rprivate</item>\n\t\t<item>make-rprivate</item>\n\t\t<item>slave</item>\n\t\t<item>make-slave</item>\n\t\t<item>rslave</item>\n\t\t<item>make-rslave</item>\n\t\t<item>shared</item>\n\t\t<item>make-shared</item>\n\t\t<item>rshared</item>\n\t\t<item>make-rshared</item>\n\t\t<item>relatime</item>\n\t\t<item>norelatime</item>\n\t\t<item>iversion</item>\n\t\t<item>noiversion</item>\n\t\t<item>strictatime</item>\n\t\t<item>user</item>\n\t\t<item>nouser</item>\n\t</list>\n\t<list name=\"rule_mount_fstypes\">\n\t\t<item>ecryptfs</item>\n\t\t<item>overlayfs</item>\n\t\t<item>unionfs</item>\n\t\t<item>shm</item>\n\t\t<!-- VFS Types -->\n\t\t<item>cryfs</item>\n\t\t<item>encfs</item>\n\t\t<item>apparmorfs</item>\n\t\t<item>autofs</item>\n\t\t<item>bdev</item>\n\t\t<item>bpf</item>\n\t\t<item>cachefs</item>\n\t\t<item>cgroup</item>\n\t\t<item>cgroup2</item>\n\t\t<item>cifs</item>\n\t\t<item>coherent</item>\n\t\t<item>configfs</item>\n\t\t<item>cpuset</item>\n\t\t<item>cramfs</item>\n\t\t<item>debugfs</item>\n\t\t<item>devfs</item>\n\t\t<item>devpts</item>\n\t\t<item>devtmpfs</item>\n\t\t<item>efs</item>\n\t\t<item>fuse</item>\n\t\t<item>fuseblk</item>\n\t\t<item>fusectl</item>\n\t\t<item>futexfs</item>\n\t\t<item>hugetlbfs</item>\n\t\t<item>kernfs</item>\n\t\t<item>mqueue</item>\n\t\t<item>pipefs</item>\n\t\t<item>proc</item>\n\t\t<item>procfs</item>\n\t\t<item>pstorefs</item>\n\t\t<item>pstore</item>\n\t\t<item>ramfs</item>\n\t\t<item>romfs</item>\n\t\t<item>rootfs</item>\n\t\t<item>sdcardfs</item>\n\t\t<item>securityfs</item>\n\t\t<item>selinuxfs</item>\n\t\t<item>sockfs</item>\n\t\t<item>specfs</item>\n\t\t<item>squashfs</item>\n\t\t<item>swapfs</item>\n\t\t<item>sysfs</item>\n\t\t<item>sysv</item>\n\t\t<item>tmpfs</item>\n\t\t<item>usbfs</item>\n\t\t<item>vfat</item>\n\t\t<item>functionfs</item>\n\t\t<item>inotifyfs</item>\n\t\t<item>labeledfs</item>\n\t\t<item>oemfs</item>\n\t\t<!-- FS Types -->\n\t\t<item>adfs</item>\n\t\t<item>affs</item>\n\t\t<item>afs</item>\n\t\t<item>apfs</item>\n\t\t<item>bfs</item>\n\t\t<item>btrfs</item>\n\t\t<item>ceph</item>\n\t\t<item>coda</item>\n\t\t<item>exfat</item>\n\t\t<item>ext2</item>\n\t\t<item>ext3</item>\n\t\t<item>ext4</item>\n\t\t<item>f2fs</item>\n\t\t<item>fatx</item>\n\t\t<item>gfs</item>\n\t\t<item>hfs</item>\n\t\t<item>hfsplus</item>\n\t\t<item>hpfs</item>\n\t\t<item>ifs</item>\n\t\t<item>iso9660</item>\n\t\t<item>jffs2</item>\n\t\t<item>jffs</item>\n\t\t<item>jfs</item>\n\t\t<item>lvm2</item>\n\t\t<item>minix</item>\n\t\t<item>msdos</item>\n\t\t<item>ncpfs</item>\n\t\t<item>nilfs</item>\n\t\t<item>nilfs2</item>\n\t\t<item>nfs</item>\n\t\t<item>nfs4</item>\n\t\t<item>ntfs-3g</item>\n\t\t<item>ntfs</item>\n\t\t<item>ocfs</item>\n\t\t<item>qnx4</item>\n\t\t<item>qnx6</item>\n\t\t<item>reiser4</item>\n\t\t<item>reiserfs</item>\n\t\t<item>smbfs</item>\n\t\t<item>swap</item>\n\t\t<item>tracefs</item>\n\t\t<item>ubifs</item>\n\t\t<item>udf</item>\n\t\t<item>ufs</item>\n\t\t<item>umsdos</item>\n\t\t<item>urefs</item>\n\t\t<item>xenix</item>\n\t\t<item>yaffs2</item>\n\t\t<item>yaffs</item>\n\t\t<item>xfs</item>\n\t\t<item>zfs</item>\n\t\t<!-- Not included: ext, usbdevfs, xiafs -->\n\t</list>\n\n\t<!-- Pivot Root Rule -->\n\t<list name=\"rule_pivotroot_options\">\n\t\t<item>oldroot</item>\n\t</list>\n\n\t<!-- Ptrace Rule -->\n\t<list name=\"rule_ptrace_options\">\n\t\t<item>peer</item>\n\t</list>\n\t<list name=\"rule_ptrace_access\">\n\t\t<!-- Also: r, w, rw, read -->\n\t\t<item>readby</item>\n\t\t<item>trace</item>\n\t\t<item>tracedby</item>\n\t</list>\n\n\t<!-- Signal Rule -->\n\t<list name=\"rule_signal_options\">\n\t\t<item>set</item>\n\t\t<item>peer</item>\n\t</list>\n\t<list name=\"rule_signal\">\n\t\t<!-- Also: rtmin+0 ... rtmin+32 -->\n\t\t<item>bus</item>\n\t\t<item>hup</item>\n\t\t<item>int</item>\n\t\t<item>quit</item>\n\t\t<item>ill</item>\n\t\t<item>trap</item>\n\t\t<item>abrt</item>\n\t\t<item>fpe</item>\n\t\t<item>kill</item>\n\t\t<item>usr1</item>\n\t\t<item>segv</item>\n\t\t<item>usr2</item>\n\t\t<item>pipe</item>\n\t\t<item>alrm</item>\n\t\t<item>term</item>\n\t\t<item>stkflt</item>\n\t\t<item>chld</item>\n\t\t<item>cont</item>\n\t\t<item>stop</item>\n\t\t<item>stp</item>\n\t\t<item>ttin</item>\n\t\t<item>ttou</item>\n\t\t<item>urg</item>\n\t\t<item>xcpu</item>\n\t\t<item>xfsz</item>\n\t\t<item>vtalrm</item>\n\t\t<item>prof</item>\n\t\t<item>winch</item>\n\t\t<item>io</item>\n\t\t<item>pwr</item>\n\t\t<item>sys</item>\n\t\t<item>emt</item>\n\t\t<item>exists</item>\n\t</list>\n\t<list name=\"rule_signal_access\">\n\t\t<!-- Also: r, w, rw, read, write -->\n\t\t<item>send</item>\n\t\t<item>receive</item>\n\t</list>\n\n\t<!-- DBus Rule -->\n\t<list name=\"rule_dbus_options\">\n\t\t<item>peer</item>\n\t\t<item>bus</item>\n\t\t<item>path</item>\n\t\t<item>interface</item>\n\t\t<item>member</item>\n\t\t<item>name</item>\n\t</list>\n\t<list name=\"rule_dbus_peer\">\n\t\t<item>name</item>\n\t\t<item>label</item>\n\t</list>\n\t<list name=\"rule_dbus_access\">\n\t\t<!-- Also: r, w, rw, read, write -->\n\t\t<item>send</item>\n\t\t<item>receive</item>\n\t\t<item>bind</item>\n\t\t<item>eavesdrop</item>\n\t</list>\n\t<list name=\"rule_dbus_bus\">\n\t\t<item>system</item>\n\t\t<item>session</item>\n\t</list>\n\n\t<!-- Unix Rule -->\n\t<list name=\"rule_unix_options\">\n\t\t<item>peer</item>\n\t\t<item>set</item>\n\t\t<item>label</item>\n\t\t<item>type</item>\n\t\t<item>protocol</item>\n\t\t<item>addr</item>\n\t\t<item>attr</item>\n\t\t<item>opt</item>\n\t</list>\n\t<list name=\"rule_unix_access\">\n\t\t<!-- Also: r, w, rw, read, write -->\n\t\t<item>send</item>\n\t\t<item>receive</item>\n\t\t<item>bind</item>\n\t\t<item>create</item>\n\t\t<item>listen</item>\n\t\t<item>accept</item>\n\t\t<item>connect</item>\n\t\t<item>shutdown</item>\n\t\t<item>getattr</item>\n\t\t<item>setattr</item>\n\t\t<item>getopt</item>\n\t\t<item>setopt</item>\n\t</list>\n\n\t<!-- Rlimit Rule -->\n\t<list name=\"rule_rlimit\">\n\t\t<item>cpu</item>\n\t\t<item>fsize</item>\n\t\t<item>data</item>\n\t\t<item>stack</item>\n\t\t<item>core</item>\n\t\t<item>rss</item>\n\t\t<item>nofile</item>\n\t\t<item>ofile</item>\n\t\t<item>as</item>\n\t\t<item>nproc</item>\n\t\t<item>memlock</item>\n\t\t<item>locks</item>\n\t\t<item>sigpending</item>\n\t\t<item>msgqueue</item>\n\t\t<item>nice</item>\n\t\t<item>rtprio</item>\n\t\t<item>rttime</item>\n\t</list>\n\n\t<!-- Link Rule -->\n\t<list name=\"rule_link\">\n\t\t<item>subset</item>\n\t</list>\n\n\t<!-- Change Profile Rule -->\n\t<list name=\"rule_changeprofile\">\n\t\t<item>safe</item>\n\t\t<item>unsafe</item>\n\t</list>\n\n\t<!-- Include Rule -->\n\t<list name=\"rule_include\">\n\t\t<item>if</item>\n\t\t<item>exists</item>\n\t</list>\n\n\t<!-- Permissions -->\n\t<list name=\"base_accesses\">\n\t\t<item>rw</item>\n\t\t<item>r</item>\n\t\t<item>w</item>\n\t\t<item>read</item>\n\t\t<item>write</item>\n\t</list>\n\n\t<!-- Abstractions and variables defined in the provided AppArmor policy.\n\t     NOTE: The following keywords are not used for highlighting. The purpose of these\n\t     is to provide autocomplete suggestions when writing Include rules and variables. -->\n\t<list name=\"default_variables\">\n\t\t<item>profile_name</item> <!-- Special variable -->\n\n\t\t<item>HOME</item>\n\t\t<item>HOMEDIRS</item>\n\t\t<item>multiarch</item>\n\t\t<item>pid</item>\n\t\t<item>pids</item>\n\t\t<item>PROC</item>\n\t\t<item>securityfs</item>\n\t\t<item>apparmorfs</item>\n\t\t<item>sys</item>\n\t\t<item>tid</item>\n\t\t<item>XDG_DESKTOP_DIR</item>\n\t\t<item>XDG_DOWNLOAD_DIR</item>\n\t\t<item>XDG_TEMPLATES_DIR</item>\n\t\t<item>XDG_PUBLICSHARE_DIR</item>\n\t\t<item>XDG_DOCUMENTS_DIR</item>\n\t\t<item>XDG_MUSIC_DIR</item>\n\t\t<item>XDG_PICTURES_DIR</item>\n\t\t<item>XDG_VIDEOS_DIR</item>\n\t\t<item>flatpak_exports_root</item>\n\t\t<item>system_share_dirs</item>\n\t\t<item>user_share_dirs</item>\n\t</list>\n\t<list name=\"default_abstractions\">\n\t\t<item>abstractions/</item>\n\t\t<item>apache2-common</item>\n\t\t<item>aspell</item>\n\t\t<item>audio</item>\n\t\t<item>authentication</item>\n\t\t<item>base</item>\n\t\t<item>bash</item>\n\t\t<item>consoles</item>\n\t\t<item>cups-client</item>\n\t\t<item>dbus</item>\n\t\t<item>dbus-accessibility</item>\n\t\t<item>dbus-accessibility-strict</item>\n\t\t<item>dbus-session</item>\n\t\t<item>dbus-session-strict</item>\n\t\t<item>dbus-strict</item>\n\t\t<item>dconf</item>\n\t\t<item>dovecot-common</item>\n\t\t<item>dri-common</item>\n\t\t<item>dri-enumerate</item>\n\t\t<item>enchant</item>\n\t\t<item>fcitx</item>\n\t\t<item>fcitx-strict</item>\n\t\t<item>fonts</item>\n\t\t<item>freedesktop.org</item>\n\t\t<item>gnome</item>\n\t\t<item>gnupg</item>\n\t\t<item>ibus</item>\n\t\t<item>kde-icon-cache-write</item>\n\t\t<item>kde-globals-write</item>\n\t\t<item>kde-language-write</item>\n\t\t<item>kde</item>\n\t\t<item>kerberosclient</item>\n\t\t<item>launchpad-integration</item>\n\t\t<item>ldapclient</item>\n\t\t<item>libpam-systemd</item>\n\t\t<item>likewise</item>\n\t\t<item>mdns</item>\n\t\t<item>mesa</item>\n\t\t<item>mir</item>\n\t\t<item>mozc</item>\n\t\t<item>mysql</item>\n\t\t<item>nameservice</item>\n\t\t<item>nis</item>\n\t\t<item>nvidia</item>\n\t\t<item>opencl</item>\n\t\t<item>opencl-common</item>\n\t\t<item>opencl-intel</item>\n\t\t<item>opencl-mesa</item>\n\t\t<item>opencl-nvidia</item>\n\t\t<item>opencl-pocl</item>\n\t\t<item>openssl</item>\n\t\t<item>orbit2</item>\n\t\t<item>p11-kit</item>\n\t\t<item>perl</item>\n\t\t<item>php</item>\n\t\t<item>php5</item>\n\t\t<item>postfix-common</item>\n\t\t<item>private-files</item>\n\t\t<item>private-files-strict</item>\n\t\t<item>python</item>\n\t\t<item>qt5-compose-cache-write</item>\n\t\t<item>qt5-settings-write</item>\n\t\t<item>qt5</item>\n\t\t<item>recent-documents-write</item>\n\t\t<item>ruby</item>\n\t\t<item>samba</item>\n\t\t<item>smbpass</item>\n\t\t<item>ssl_certs</item>\n\t\t<item>ssl_keys</item>\n\t\t<item>svn-repositories</item>\n\t\t<item>ubuntu-bittorrent-clients</item>\n\t\t<item>ubuntu-browsers</item>\n\t\t<item>ubuntu-console-browsers</item>\n\t\t<item>ubuntu-console-email</item>\n\t\t<item>ubuntu-email</item>\n\t\t<item>ubuntu-feed-readers</item>\n\t\t<item>ubuntu-gnome-terminal</item>\n\t\t<item>ubuntu-helpers</item>\n\t\t<item>ubuntu-konsole</item>\n\t\t<item>ubuntu-media-players</item>\n\t\t<item>ubuntu-unity7-base</item>\n\t\t<item>ubuntu-unity7-launcher</item>\n\t\t<item>ubuntu-unity7-messaging</item>\n\t\t<item>ubuntu-xterm</item>\n\t\t<item>user-download</item>\n\t\t<item>user-mail</item>\n\t\t<item>user-manpages</item>\n\t\t<item>user-tmp</item>\n\t\t<item>user-write</item>\n\t\t<item>video</item>\n\t\t<item>vulkan</item>\n\t\t<item>wayland</item>\n\t\t<item>web-data</item>\n\t\t<item>winbind</item>\n\t\t<item>wutmp</item>\n\t\t<item>X</item>\n\t\t<item>xad</item>\n\t\t<item>xdg-desktop</item>\n\n\t\t<item>ubuntu-browsers.d/</item>\n\t\t<item>java</item>\n\t\t<item>mailto</item>\n\t\t<item>multimedia</item>\n\t\t<item>plugins-common</item>\n\t\t<item>productivity</item>\n\t\t<item>text-editors</item>\n\t\t<item>ubuntu-integration</item>\n\t\t<item>ubuntu-integration-xul</item>\n\t\t<item>user-files</item>\n\n\t\t<item>apparmor_api/</item>\n\t\t<item>change_profile</item>\n\t\t<item>examine</item>\n\t\t<item>find_mountpoint</item>\n\t\t<item>introspect</item>\n\t\t<item>is_enabled</item>\n\n\t\t<item>tunables/</item>\n\t\t<item>alias</item>\n\t\t<item>apparmorfs</item>\n\t\t<item>dovecot</item>\n\t\t<item>global</item>\n\t\t<item>home</item>\n\t\t<item>kernelvars</item>\n\t\t<item>multiarch</item>\n\t\t<item>ntpd</item>\n\t\t<item>proc</item>\n\t\t<item>securityfs</item>\n\t\t<item>sys</item>\n\t\t<item>xdg-user-dirs</item>\n\t\t<item>home.d/</item>\n\t\t<item>multiarch.d/</item>\n\t\t<item>xdg-user-dirs.d/</item>\n\t\t<item>site.local</item>\n\n\t\t<item>local/</item>\n\t</list>\n\n\t<list name=\"boolean\">\n\t\t<item>true</item>\n\t\t<item>false</item>\n\t</list>\n\t<list name=\"other_words\">\n\t\t<item>unspec</item>\n\t\t<item>none</item>\n\t\t<item>unconfined</item>\n\t</list>\n\n\t<!-- Rule Names.\n\t     NOTE:\n\t      - Each rule name is a keyword in separate lists, since each\n\t        has a different context and for a correct delimitation of the words.\n\t      - The content of a rule is found in the contexts \"_default_rule\"\n\t        and \"_default_rule_with_comments\".\n\t      - When adding a new rule, add it also in \"_end_rule_irnc\"! -->\n\t<list name=\"rule_name_mount\">\n\t\t<item>mount</item>\n\t\t<item>remount</item>\n\t\t<item>umount</item>\n\t</list>\n\t<list name=\"rule_name_alias\"><item>alias</item></list>\n\t<list name=\"rule_name_file\"><item>file</item></list>\n\t<list name=\"rule_name_capability\"><item>capability</item></list>\n\t<list name=\"rule_name_network\"><item>network</item></list>\n\t<list name=\"rule_name_pivotroot\"><item>pivot_root</item></list>\n\t<list name=\"rule_name_ptrace\"><item>ptrace</item></list>\n\t<list name=\"rule_name_signal\"><item>signal</item></list>\n\t<list name=\"rule_name_dbus\"><item>dbus</item></list>\n\t<list name=\"rule_name_unix\"><item>unix</item></list>\n\t<list name=\"rule_name_link\"><item>link</item></list>\n\t<list name=\"rule_name_changeprofile\"><item>change_profile</item></list>\n\t<list name=\"rule_name_rlimit\"><item>rlimit</item></list>\n\t<list name=\"rule_name_set\"><item>set</item></list>\n\n\t<!-- AppArmor 2.12.0: Keywords not currently supported:\n\t     if, else, not, defined, other, rewrite, quiet, kill, nokill -->\n\n\t<contexts>\n\n\t\t<context name=\"_normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Preamble -->\n\n\t\t\t<!-- Variable Assignment.\n\t\t\t     NOTE:\n\t\t\t      - Variable assignments are not allowed within profiles (when writing assignments within\n\t\t\t        profiles, the parser shows an error because it does not allow + or = after a variable).\n\t\t\t      - [Jul 24, 2018] Variables of type \"@VAR\" will only be highlighted in assignments, as long\n\t\t\t        as they are not fully supported (apparently, they will be used in conditional expressions). -->\n\t\t\t<Detect2Chars context=\"_variable_assignment\" attribute=\"Variable\" char=\"@\" char1=\"{\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<RegExpr context=\"_variable_assignment_operator\" attribute=\"Variable\" String=\"@&varName;(?=\\s*(\\+?\\=|$|\\s#))\" firstNonSpace=\"true\"/>\n\t\t\t<DetectChar context=\"_variable_assignment_line_general\" attribute=\"Operator 1\" char=\"=\" firstNonSpace=\"true\"/>\n\t\t\t<Detect2Chars context=\"_variable_assignment_line\" attribute=\"Operator 1\" char=\"+\" char1=\"=\" firstNonSpace=\"true\"/>\n\t\t\t<!-- Alias rule -->\n\t\t\t<keyword context=\"_default_rule_with_comments\" attribute=\"Rule\" String=\"rule_name_alias\" beginRegion=\"Rule\"/>\n\n\t\t\t<!-- Profile Content (also highlight rules, for abstractions) -->\n\t\t\t<IncludeRules context=\"_default_profile\"/>\n\t\t</context>\n\n\t\t<!-- Profile Content, within { ... } -->\n\t\t<context name=\"_profile\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Operator 1\" char=\"}\" endRegion=\"Profile\"/>\n\t\t\t<Detect2Chars context=\"_variable_assignment_error\" attribute=\"Variable\" char=\"@\" char1=\"{\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<IncludeRules context=\"_default_profile\"/>\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Error\" String=\"alias\"/> <!-- rule_name_alias -->\n\t\t</context>\n\n\t\t<context name=\"_default_profile\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Profile Header -->\n\t\t\t<keyword context=\"_profile_name\" attribute=\"Profile Head\" String=\"profile_head\"/>\n\t\t\t<RegExpr context=\"_profile_name\" attribute=\"Profile Head\" String=\"(^|\\s)\\^(?=\\S)\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Option\" String=\"profile_options\"/>\n\n\t\t\t<!-- Line Rules -->\n\t\t\t<StringDetect context=\"_include\" attribute=\"Preprocessor\" String=\"#include\" insensitive=\"true\"/>\n\t\t\t<RegExpr context=\"_include\" attribute=\"Preprocessor\" String=\"(^|\\s)include(?=\\s)\"/>\n\t\t\t<DetectChar context=\"_comment\" attribute=\"Comment\" char=\"#\"/>\n\n\t\t\t<!-- Variables -->\n\t\t\t<Detect2Chars context=\"_variable\" attribute=\"Variable\" char=\"@\" char1=\"{\" lookAhead=\"true\"/>\n\t\t\t<Detect2Chars context=\"_boolean\" attribute=\"Variable\" char=\"$\" char1=\"{\" lookAhead=\"true\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Option\" String=\"boolean\" insensitive=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Variable\" String=\"\\$&varName;(?=[\\s\\(\\)\\{\\}&quot;@\\$#\\=\\+]|$)\"/>\n\n\t\t\t<!-- Brackets -->\n\t\t\t<IncludeRules context=\"_brackets_error\"/> <!-- {} -->\n\t\t\t<DetectChar context=\"_profile\" attribute=\"Operator 1\" char=\"{\" beginRegion=\"Profile\"/>\n\t\t\t<DetectChar context=\"_parentheses_block_profile\" attribute=\"Normal Text\" char=\"(\"/>\n\t\t\t<DetectChar context=\"_r_square_brackets\" attribute=\"Globbing Brackets\" char=\"[\"/>\n\n\t\t\t<!-- Rule Qualifiers -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Access Qualifier\" String=\"access_types\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Qualifier\" String=\"qualifiers\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"File Qualifier\" String=\"file_qualifiers\"/>\n\n\t\t\t<!-- Rules -->\n\t\t\t<keyword context=\"_rule_file\" attribute=\"Rule\" String=\"rule_name_file\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_mount\" attribute=\"Rule\" String=\"rule_name_mount\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_capability\" attribute=\"Rule\" String=\"rule_name_capability\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_network\" attribute=\"Rule\" String=\"rule_name_network\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_pivotroot\" attribute=\"Rule\" String=\"rule_name_pivotroot\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_ptrace\" attribute=\"Rule\" String=\"rule_name_ptrace\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_signal\" attribute=\"Rule\" String=\"rule_name_signal\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_dbus\" attribute=\"Rule\" String=\"rule_name_dbus\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_unix\" attribute=\"Rule\" String=\"rule_name_unix\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_link\" attribute=\"Rule\" String=\"rule_name_link\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_changeprofile\" attribute=\"Rule\" String=\"rule_name_changeprofile\" beginRegion=\"Rule\"/>\n\t\t\t<keyword context=\"_rule_rlimit\" attribute=\"Rule Error\" String=\"rule_name_rlimit\" beginRegion=\"Rule\"/> <!-- set rlimit -->\n\t\t\t<keyword context=\"_rule_set\" attribute=\"Rule\" String=\"rule_name_set\"/>\n\n\t\t\t<!-- Paths, text in quotes, file permissions and others -->\n\t\t\t<IncludeRules context=\"_operators\"/>\n\t\t\t<IncludeRules context=\"_find_path\"/>\n\t\t\t<IncludeRules context=\"_find_text_quoted\"/>\n\t\t\t<IncludeRules context=\"_file_rule_permissions\"/>\n\t\t\t<keyword context=\"#stay\" String=\"default_variables\"/>\n\t\t</context>\n\n\t\t<!-- Within rules and blocks of parentheses -->\n\t\t<context name=\"_common\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<StringDetect context=\"#stay\" attribute=\"Error\" String=\"#include\" insensitive=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"include(?=\\s)\" firstNonSpace=\"true\"/>\n\t\t\t<IncludeRules context=\"_brackets_error\"/>\n\n\t\t\t<IncludeRules context=\"_operators\"/>\n\t\t\t<IncludeRules context=\"_find_text_quoted\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Data\" String=\"other_words\" insensitive=\"true\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Data\" String=\"boolean\" insensitive=\"true\"/>\n\t\t</context>\n\n\t\t<!-- Comment -->\n\t\t<context name=\"_comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<LineContinue context=\"#pop\" attribute=\"Comment\"/>\n\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t<IncludeRules context=\"##Modelines\"/>\n\t\t\t<!-- URL -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"URL in Comment\" String=\"\\bhttps?://[^\\s&lt;&gt;&quot;&apos;`]*[^\\s&lt;&gt;&quot;&apos;`\\}\\)\\]\\.,;\\|]\"/>\n\t\t\t<!-- Email (Source: http://emailregex.com) -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"URL in Comment\" String=\"(([^&lt;&gt;\\(\\)\\[\\]\\\\\\.,;:\\s@&quot;]+(\\.[^&lt;&gt;\\(\\)\\[\\]\\\\\\.,;:\\s@&quot;]+)*)|(&quot;[^&quot;]+&quot;))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}])|(([a-zA-Z\\-\\d]+\\.)+[a-zA-Z]{2,}))\\b\"/>\n\t\t</context>\n\n\t\t<!-- Profile Header:\n\t\t     Highlight the name of the profile.\n\t\t     The profile name label is optional. This is written after the hat character (^) or a profile keyword. -->\n\t\t<context name=\"_profile_name\" attribute=\"Profile Name\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces context=\"#stay\" attribute=\"Normal Text\"/>\n\t\t\t<!-- Not highlighting paths and paths quoted.\n\t\t\t     NOTE: Some profile labels may contain \"/\" (like [/]). These cases are not considered. -->\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Normal Text\" String=\"&quot;([^/&quot;\\\\]|\\\\.)*/\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop!_path_content\" attribute=\"Path\" String=\"([^\\s&quot;\\\\]|\\\\.)*/\" lookAhead=\"true\"/>\n\t\t\t<DetectChar context=\"#pop!_profile_name_quoted\" attribute=\"Profile Name\" char=\"&quot;\"/>\n\t\t\t<!-- First word (the profile name) -->\n\t\t\t<RegExpr context=\"#pop!_profile_name_content\" attribute=\"Normal Text\" String=\"[^\\s/\\^\\{]\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_profile_name_content\" attribute=\"Profile Name\" lineEndContext=\"#pop\">\n\t\t\t<!-- NOTE: \"(\" generates errors when calling \"get_profiles()\" (apparmor_status). This forces to put a space before. -->\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Error\" String=\"\\(\\S*\\)?\"/>\n\t\t\t<!-- End of the profile name label -->\n\t\t\t<DetectSpaces context=\"#pop\" attribute=\"Normal Text\" lookAhead=\"true\"/>\n\t\t\t<!-- The quote ends the profile name, but it is ideal to put a space before -->\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Normal Text\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Profile Name Error\" String=\"[^\\s\\(\\\\](?=[&quot;\\(])\"/>\n\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Error\" String=\"#include\" insensitive=\"true\"/>\n\t\t\t<IncludeRules context=\"_variable_simple\"/>\n\t\t\t<IncludeRules context=\"_escape\"/>\n\t\t</context>\n\t\t<context name=\"_profile_name_quoted\" attribute=\"Profile Name\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Profile Name\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_variable_simple\"/>\n\t\t\t<IncludeRules context=\"_escape\"/>\n\t\t</context>\n\n\t\t<!-- Include Rule: include <abstraction/path> -->\n\t\t<context name=\"_include\" attribute=\"Preprocessor\" lineEndContext=\"#pop\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Error\" char=\"&quot;\" char1=\"&quot;\"/>\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Error\" char=\"&lt;\" char1=\"&gt;\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"&lt;+(?=[&lt;\\s])\"/>\n\t\t\t<RegExpr context=\"#pop!_include_preplib_thanquot\" attribute=\"Prep. Lib\" String=\"&lt;\\s*(?=&quot;)\"/> <!-- <\"path\"> -->\n\t\t\t<DetectChar context=\"#pop!_include_preplib_than\" attribute=\"Prep. Lib\" char=\"&lt;\" lookAhead=\"true\"/> <!-- <magic/path> -->\n\t\t\t<DetectChar context=\"#pop!_include_preplib_quot\" attribute=\"Prep. Lib\" char=\"&quot;\"/> <!-- \"/abs/path\" -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Preprocessor\" String=\"rule_include\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Prep. Lib\" String=\"[^\\s/&quot;&lt;&gt;]*/\\S*(?=\\s|$)\"/> <!-- /abs/path -->\n\t\t</context>\n\t\t<context name=\"_include_preplib_than\" attribute=\"Prep. Lib\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Prep. Lib\" char=\"&gt;\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Prep. Lib\" String=\"default_abstractions\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Open Prep. Lib\" String=\"[^&gt;\\s](?=\\s*$)\"/>\n\t\t</context>\n\t\t<context name=\"_include_preplib_quot\" attribute=\"Prep. Lib\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Prep. Lib\" char=\"&quot;\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Prep. Lib\" String=\"default_abstractions\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Open Prep. Lib\" String=\"[^&quot;\\s](?=\\s*$)\"/>\n\t\t</context>\n\t\t<context name=\"_include_preplib_thanquot\" attribute=\"Prep. Lib\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"_include_preplib_quot\" attribute=\"Prep. Lib\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_include_preplib_than\"/>\n\t\t</context>\n\n\t\t<!-- @{VARIABLE} -->\n\t\t<context name=\"_variable\" attribute=\"Variable\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_find_path_after_variable\" attribute=\"Variable\" String=\"&variable;\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Error\" char=\"@\"/>\n\t\t</context>\n\t\t<context name=\"_parentheses_variable\" attribute=\"Variable\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_parentheses_find_path_after_variable\" attribute=\"Variable\" String=\"&variable;\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Error\" char=\"@\"/>\n\t\t</context>\n\t\t<context name=\"_variable_simple\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Variable\" String=\"&variable;\"/>\n\t\t</context>\n\n\t\t<!-- Find path after a variable -->\n\t\t<context name=\"_find_path_after_variable\" attribute=\"Path\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_path_content\">\n\t\t\t<DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<AnyChar context=\"#pop\" String=\"&noPathCharWithoutSpace;]}=\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop\" String=\"[[:cntrl:]]\" lookAhead=\"true\"/> <!-- It is necessary? -->\n\t\t</context>\n\t\t<context name=\"_parentheses_find_path_after_variable\" attribute=\"Path\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_parentheses_path_content\">\n\t\t\t<DetectChar context=\"#pop\" char=\",\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_find_path_after_variable\"/>\n\t\t</context>\n\n\t\t<!-- @{VARIABLE} = A B C -->\n\t\t<context name=\"_variable_assignment\" attribute=\"Variable\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_variable_assignment_operator\" attribute=\"Variable\" String=\"&variable;\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Error\" char=\"@\"/>\n\t\t</context>\n\t\t<context name=\"_variable_assignment_operator\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_path_content\">\n\t\t\t<!-- After the operator, highlighting as \"Path\" the entire line -->\n\t\t\t<RegExpr context=\"#pop!_variable_assignment_line\" attribute=\"Operator 1\" String=\"\\s*\\+?\\=\"/>\n\t\t\t<DetectChar context=\"#pop!_path_content\" attribute=\"Error\" char=\"+\"/>\n\t\t\t<IncludeRules context=\"_find_path_after_variable\"/>\n\t\t</context>\n\t\t<context name=\"_variable_assignment_line\" attribute=\"Path\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_variable_assignment_line_content\">\n\t\t\t<DetectChar context=\"#pop!_variable_assignment_line_content\" attribute=\"Error\" char=\"#\"/> <!-- Comment -->\n\t\t</context>\n\t\t<context name=\"_variable_assignment_line_content\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<LineContinue context=\"#stay\" attribute=\"Escape Char\"/>\n\t\t\t<IncludeRules context=\"_path_globbing\"/>\n\t\t\t<IncludeRules context=\"_find_text_quoted\"/>\n\t\t\t<IncludeRules context=\"_variable_simple\"/>\n\t\t\t<Detect2Chars context=\"_hat_path\" char=\"/\" char1=\"/\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\",(?=[\\s&quot;]|$)\"/> <!-- End of rule comma (&endPath;) -->\n\t\t\t<StringDetect context=\"#stay\" attribute=\"Error\" String=\"#include\" insensitive=\"true\"/>\n\n\t\t\t<!-- NOTE: [V4][Jan 06, 2018] AppArmor does not detect comments in variable assignment lines\n\t\t\t     (these are carried through to the policy). This is an AppArmor bug, therefore, the hash\n\t\t\t     character after a space is highlighted as \"Error\". Check this when the bug has been fixed. -->\n\t\t\t<RegExpr context=\"_comment_variable_assignment_line\" attribute=\"Path\" String=\"\\s(?=#)\"/>\n\t\t</context>\n\t\t<context name=\"_comment_variable_assignment_line\" attribute=\"Error\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Error\" char=\"#\"/>\n\t\t</context>\n\t\t<context name=\"_variable_assignment_line_general\" attribute=\"Path\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_variable_assignment_line\">\n\t\t\t<keyword context=\"#pop!_variable_assignment_line\" attribute=\"Other Option\" String=\"boolean\" insensitive=\"true\"/>\n\t\t\t<DetectSpaces context=\"#stay\"/>\n\t\t</context>\n\n\t\t<!-- Within the profiles, highlight as \"Error\" the operators of variable assignment (= and +=) -->\n\t\t<context name=\"_variable_assignment_error\" attribute=\"Variable\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_variable_assignment_error_operator\" attribute=\"Variable\" String=\"&variable;\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Error\" char=\"@\"/>\n\t\t</context>\n\t\t<context name=\"_variable_assignment_error_operator\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_find_path_after_variable\">\n\t\t\t<DetectChar context=\"#pop!_find_path_after_variable\" attribute=\"Error\" char=\"=\"/>\n\t\t\t<Detect2Chars context=\"#pop!_find_path_after_variable\" attribute=\"Error\" char=\"+\" char1=\"=\"/>\n\t\t\t<RegExpr context=\"#pop!_variable_assignment_error_operator_after_spaces\" String=\"\\s+(?=\\+?\\=)\"/>\n\t\t</context>\n\t\t<context name=\"_variable_assignment_error_operator_after_spaces\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Error\" char=\"=\"/>\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Error\" char=\"+\" char1=\"=\"/>\n\t\t</context>\n\n\t\t<!-- ${BOOLEAN} -->\n\t\t<context name=\"_boolean\" attribute=\"Variable\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Variable\" String=\"\\$\\{&varName;\\}\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Error\" char=\"$\"/>\n\t\t</context>\n\n\t\t<!-- Access Modes / File Permissions -->\n\t\t<context name=\"_permissions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_permissions_correction\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Permissions\" String=\"(^|\\s)([rwkml]|&exec;)+(?=[\\s,]|$)\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Permissions\" String=\"(^|\\s)([rakml]|&exec;)+(?=[\\s,]|$)\"/>\n\t\t</context>\n\t\t<context name=\"_file_rule_permissions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_permissions_correction\"/>\n\t\t\t<RegExpr context=\"_rule_file\" attribute=\"Permissions\" String=\"(^|\\s)([rwkml]|&exec;)+(?=[\\s,]|$)\"/>\n\t\t\t<RegExpr context=\"_rule_file\" attribute=\"Permissions\" String=\"(^|\\s)([rakml]|&exec;)+(?=[\\s,]|$)\"/>\n\t\t</context>\n\t\t<context name=\"_permissions_correction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Incompatible execution modes -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*p[iUu]?x([rwakml]|p[iUu]?x)*[PcC]?[iUu]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- p -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*P[iUu]?x([rwakml]|P[iUu]?x)*[pcC]?[iUu]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- P -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*c[iUu]?x([rwakml]|c[iUu]?x)*[PpC]?[iUu]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- c -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*C[iUu]?x([rwakml]|C[iUu]?x)*[Ppc]?[iUu]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- C -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*[PpCc]?ix([rwakml]|[PpCc]?ix)*[PpCc]?[Uu]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- i -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*[PpCc]?ux([rwakml]|[PpCc]?ux)*[PpCc]?[iU]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- u -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*[PpCc]?Ux([rwakml]|[PpCc]?Ux)*[PpCc]?[iu]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- U -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*[iuU]?x([rwakml]|[iuU]?x)*[PpCc][iuU]?x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- x, ix, ux or Ux followed by P, p, C or c -->\n\t\t\t<RegExpr context=\"_perm_correction_in\" String=\"(^|\\s)[rwakml]*x[rwakmlx]*[iuU]x([rwakml]|&exec;)*([\\s,]|$)\" lookAhead=\"true\"/> <!-- x followed by ix, ux or Ux -->\n\t\t</context>\n\t\t<context name=\"_perm_correction_in\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<!-- Highlight the previous space or the full permission -->\n\t\t\t<DetectSpaces context=\"#pop\"/>\n\t\t\t<DetectIdentifier context=\"#pop\"/>\n\t\t</context>\n\n\t\t<!-- Operators -->\n\t\t<context name=\"_operators\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Operator 1\" char=\"=\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator 1\" char=\"+\" char1=\"=\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator 2\" char=\"-\" char1=\"&gt;\"/>\n\t\t</context>\n\t\t<context name=\"_operators_in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Only in mount rules -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Operator 2\" String=\"\\b(in)(?=[\\s\\(\\{\\[&quot;/@\\$]|$)\"/>\n\t\t</context>\n\n\t\t<!-- RULES -->\n\n\t\t<!-- For all rules -->\n\t\t<!-- Also see: _default_parentheses_block_rule -->\n\t\t<context name=\"_common_rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Highlight as path the text after the '=' operator, except keywords or simple words ([\\w\\-\\+]+) -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\=(?=\\s*($|&endPath;))\"/>\n\t\t\t<RegExpr context=\"_path_content\" attribute=\"Operator 1\" String=\"\\=\\s*(?=[^\\s&quot;\\(]*([^&noPathChar;\\]\\}\\=\\w\\+\\-\\(,]|,[^&noPathChar;]))\"/>\n\t\t\t<Detect2Chars context=\"_variable\" attribute=\"Variable\" char=\"@\" char1=\"{\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_find_path\"/>\n\n\t\t\t<IncludeRules context=\"_common\"/>\n\t\t\t<DetectChar context=\"_r_curly_brackets\" attribute=\"Globbing Brackets\" char=\"{\"/>\n\t\t\t<DetectChar context=\"_r_square_brackets\" attribute=\"Globbing Brackets\" char=\"[\"/>\n\t\t\t<!-- This must be at the end of each context (to avoid conflicts with some keywords) -->\n\t\t\t<IncludeRules context=\"_end_rule\"/>\n\t\t</context>\n\t\t<context name=\"_default_rule_without_parentheses\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_common_rule\"/>\n\t\t\t<!-- AppArmor does not detect comments within rules (except in file & alias rules) -->\n\t\t\t<IncludeRules context=\"_comment_not_allowed\"/>\n\t\t</context>\n\t\t<context name=\"_default_rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_without_parentheses\"/>\n\t\t\t<DetectChar context=\"_default_parentheses_block_rule\" attribute=\"Normal Text\" char=\"(\"/>\n\t\t</context>\n\t\t<context name=\"_default_rule_with_comments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_common_rule\"/>\n\t\t\t<DetectChar context=\"_comment\" attribute=\"Comment\" char=\"#\"/>\n\t\t</context>\n\n\t\t<context name=\"_comment_not_allowed\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"_comment\" attribute=\"Error\" char=\"#\" firstNonSpace=\"true\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\" char=\"#\"/>\n\t\t</context>\n\n\t\t<!-- Network Rule -->\n\t\t<context name=\"_rule_network\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Data\" String=\"rule_network\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Data\" String=\"rule_network_unix\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\n\t\t<!-- Capability Rule -->\n\t\t<context name=\"_rule_capability\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Data\" String=\"rule_capability\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\n\t\t<!-- Mount Rule -->\n\t\t<context name=\"_rule_mount\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Option\" String=\"rule_mount_options\"/>\n\t\t\t<IncludeRules context=\"_mount_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_rule_without_parentheses\"/>\n\t\t\t<DetectChar context=\"_mount_parentheses_block\" attribute=\"Normal Text\" char=\"(\"/>\n\t\t</context>\n\t\t<context name=\"_mount_parentheses_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_mount_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_parentheses_block_rule\"/>\n\t\t</context>\n\t\t<context name=\"_mount_rule_keywords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"rule_mount_flags\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Flags\" String=\"rule_mount_fstypes\"/>\n\t\t\t<IncludeRules context=\"_operators_in\"/>\n\t\t</context>\n\n\t\t<!-- Pivot Root Rule -->\n\t\t<context name=\"_rule_pivotroot\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Option\" String=\"rule_pivotroot_options\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\n\t\t<!-- Ptrace Rule -->\n\t\t<context name=\"_rule_ptrace\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Option\" String=\"rule_ptrace_options\"/>\n\t\t\t<IncludeRules context=\"_ptrace_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_rule_without_parentheses\"/>\n\t\t\t<DetectChar context=\"_ptrace_parentheses_block\" attribute=\"Normal Text\" char=\"(\"/>\n\t\t</context>\n\t\t<context name=\"_ptrace_parentheses_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Option\" String=\"rule_ptrace_options\"/>\n\t\t\t<IncludeRules context=\"_ptrace_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_parentheses_block_rule\"/>\n\t\t</context>\n\t\t<context name=\"_ptrace_rule_keywords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"rule_ptrace_access\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"base_accesses\"/>\n\t\t</context>\n\n\t\t<!-- Signal Rule -->\n\t\t<context name=\"_rule_signal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Option\" String=\"rule_signal_options\"/>\n\t\t\t<IncludeRules context=\"_signal_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_rule_without_parentheses\"/>\n\t\t\t<DetectChar context=\"_signal_parentheses_block\" attribute=\"Normal Text\" char=\"(\"/>\n\t\t</context>\n\t\t<context name=\"_signal_parentheses_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_signal_rule_keywords\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Option\" String=\"rule_signal_options\"/>\n\t\t\t<IncludeRules context=\"_default_parentheses_block_rule\"/>\n\t\t</context>\n\t\t<context name=\"_signal_rule_keywords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Flags\" String=\"rule_signal\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"rule_signal_access\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"base_accesses\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Flags\" String=\"\\b(rtmin\\+)0*(3[012]|[12]?\\d)\\b\"/>\n\t\t</context>\n\n\t\t<!-- DBus Rule -->\n\t\t<context name=\"_rule_dbus\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Option\" String=\"rule_dbus_options\"/>\n\t\t\t<IncludeRules context=\"_dbus_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_rule_without_parentheses\"/>\n\t\t\t<DetectChar context=\"_dbus_parentheses_block\" attribute=\"Normal Text\" char=\"(\"/>\n\t\t</context>\n\t\t<context name=\"_dbus_parentheses_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Option\" String=\"rule_dbus_peer\"/>\n\t\t\t<IncludeRules context=\"_dbus_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_parentheses_block_rule\"/>\n\t\t</context>\n\t\t<context name=\"_dbus_rule_keywords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Data\" String=\"rule_dbus_bus\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"rule_dbus_access\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"base_accesses\"/>\n\t\t</context>\n\n\t\t<!-- Unix Rule -->\n\t\t<context name=\"_rule_unix\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Option\" String=\"rule_unix_options\"/>\n\t\t\t<IncludeRules context=\"_unix_rule_keywords\"/>\n\t\t\t<IncludeRules context=\"_default_rule_without_parentheses\"/>\n\t\t\t<DetectChar context=\"_path_content\" attribute=\"Path\" char=\"@\" lookAhead=\"true\"/> <!-- Socket -->\n\t\t\t<DetectChar context=\"_unix_parentheses_block\" attribute=\"Normal Text\" char=\"(\"/>\n\t\t</context>\n\t\t<context name=\"_unix_parentheses_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_unix_rule_keywords\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Option\" String=\"rule_unix_options\"/>\n\t\t\t<IncludeRules context=\"_default_parentheses_block_rule\"/>\n\t\t\t<DetectChar context=\"_parentheses_path_content\" attribute=\"Path\" char=\"@\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_unix_rule_keywords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"rule_unix_access\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Permissions\" String=\"base_accesses\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Data\" String=\"rule_network\"/>\n\t\t</context>\n\n\t\t<!-- Rlimit Rule -->\n\t\t<context name=\"_rule_set\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword context=\"#pop!_rule_rlimit\" attribute=\"Rule\" String=\"rule_name_rlimit\" beginRegion=\"Rule\"/>\n\t\t\t<DetectSpaces context=\"#stay\" attribute=\"Normal Text\"/>\n\t\t\t<RegExpr context=\"_comment\" attribute=\"Comment\" String=\"#(?!include)\" insensitive=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_rule_rlimit\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Data\" String=\"rule_rlimit\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator 2\" char=\"&lt;\" char1=\"=\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Number\" String=\"\\-(20|1?\\d)\\b\"/>\n\t\t\t<RegExpr context=\"_number_unit\" attribute=\"Number\" String=\"\\b\\d+\"/> <!-- Rules Int don't use '-' as a delimiter -->\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Number\" String=\"infinity\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Numerical Unit\" String=\"\\b([KMG]B?|[shd]|us|ms|min|sec|(minute|day|hour|week|second)(s?)|(milli|micro)second(s?))\\b\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_number_unit\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Numerical Unit\" String=\"([KMG]B?|[shd]|us|ms|min|sec|(minute|day|hour|week|second)(s?)|(milli|micro)second(s?))\\b\"/>\n\t\t</context>\n\n\t\t<!-- Link Rule -->\n\t\t<context name=\"_rule_link\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Data\" String=\"rule_link\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\n\t\t<!-- Change Profile Rule -->\n\t\t<context name=\"_rule_changeprofile\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop!_profile_transition\" attribute=\"Operator 2\" char=\"-\" char1=\"&gt;\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Data\" String=\"rule_changeprofile\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\n\t\t<!-- File Rule -->\n\t\t<context name=\"_rule_file\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop!_profile_transition\" attribute=\"Operator 2\" char=\"-\" char1=\"&gt;\"/>\n\t\t\t<IncludeRules context=\"_default_rule_with_comments\"/>\n\t\t\t<IncludeRules context=\"_permissions\"/>\n\t\t</context>\n\n\t\t<!-- Profile Transition:\n\t\t     Highlight the profile name in File Rules (Execute Mode) and Change Profile Rules. -->\n\t\t<context name=\"_profile_transition\" attribute=\"Transition Profile Name\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces context=\"#stay\" attribute=\"Normal Text\"/>\n\t\t\t<!-- Not highlighting paths and paths quoted -->\n\t\t\t<RegExpr context=\"#pop!_default_rule_with_comments\" attribute=\"Path\" String=\"([^\\s/\\[\\\\]|//|\\\\.|\\[([^\\s\\]\\\\]|\\\\.)*\\])*/($|[^/])\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop!_default_rule_with_comments\" attribute=\"Normal Text\" String=\"&quot;([^/&quot;\\[\\\\]|//|\\\\.|\\[([^&quot;\\]\\\\]|\\\\.)*\\])*/($|[^/])\" lookAhead=\"true\"/>\n\n\t\t\t<DetectChar context=\"#pop!_t_profile_name_quoted\" attribute=\"Transition Profile Name\" char=\"&quot;\"/>\n\t\t\t<RegExpr context=\"#pop!_profile_transition_content\" attribute=\"Normal Text\" String=\"[^\\s/]\" lookAhead=\"true\"/> <!-- First word -->\n\t\t</context>\n\t\t<context name=\"_profile_transition_content\" attribute=\"Transition Profile Name\" lineEndContext=\"#pop!_default_rule_with_comments\">\n\t\t\t<RegExpr context=\"#pop!_default_rule_with_comments\" attribute=\"Error\" String=\"\\(\\S*(?=,([&noPathChar;]|$))\"/>\n\t\t\t<RegExpr context=\"#pop!_default_rule_with_comments\" attribute=\"Normal Text\" String=\"&endPath;\" lookAhead=\"true\"/> <!-- End rule -->\n\t\t\t<DetectSpaces context=\"#pop\" attribute=\"Normal Text\" lookAhead=\"true\"/> <!-- End of the profile name -->\n\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\" char=\"&quot;\"/>\n\t\t\t<StringDetect context=\"#pop!_default_rule_with_comments\" attribute=\"Error\" String=\"#include\" insensitive=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" String=\"//(?=&endPath;)\"/>\n\t\t\t<IncludeRules context=\"_default_profile_transition\"/>\n\t\t</context>\n\t\t<context name=\"_t_profile_name_quoted\" attribute=\"Transition Profile Name\" lineEndContext=\"#pop!_default_rule_with_comments\">\n\t\t\t<DetectChar context=\"#pop!_default_rule_with_comments\" attribute=\"Transition Profile Name\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_default_profile_transition\"/>\n\t\t</context>\n\t\t<context name=\"_default_profile_transition\" attribute=\"Transition Profile Name\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_variable_simple\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Globbing Char in Tran. Prof.\" String=\"&globbChars;\"/>\n\t\t\t<IncludeRules context=\"_profile_transition_escape\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Hat Operator in Tran. Prof.\" String=\"//(?=[^&noPathChar;/])\"/>\n\t\t</context>\n\n\t\t<!-- Change Hat / Child Profile (name//HAT).\n\t\t     NOTE: Old style (name^HAT) not included -->\n\t\t<context name=\"_hat_path\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Path\" String=\"/(?=/&endPath;)\"/>\n\t\t\t<RegExpr context=\"#pop!_hat_path_content\" attribute=\"SubProfile/Hat Operator\" String=\"//(?=([^\\s&quot;/\\\\]|\\\\.)+([\\s&quot;]|$))\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Path\" char=\"/\"/>\n\t\t</context>\n\t\t<context name=\"_hat_path_parentheses\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_hat_path_parentheses_content\" attribute=\"SubProfile/Hat Operator\" String=\"//(?=([^&noPathChar;/\\\\,]|\\\\.)+([&noPathChar;,]|$))\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Path\" char=\"/\"/>\n\t\t</context>\n\t\t<context name=\"_hat_path_quoted\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_hat_path_quoted_content\" attribute=\"SubProfile/Hat Operator\" String=\"//(?=([^&quot;/\\\\]|\\\\.)+&quot;)\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"/\"/>\n\t\t</context>\n\n\t\t<context name=\"_hat_path_content\" attribute=\"SubProfile/Hat\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" String=\"&endPath;\" lookAhead=\"true\"/> <!-- End Path -->\n\t\t\t<IncludeRules context=\"_default_path\"/>\n\t\t</context>\n\t\t<context name=\"_hat_path_parentheses_content\" attribute=\"SubProfile/Hat\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" char=\",\" lookAhead=\"true\"/> <!-- End Path -->\n\t\t\t<IncludeRules context=\"_default_path\"/>\n\t\t</context>\n\t\t<context name=\"_hat_path_quoted_content\" attribute=\"SubProfile/Hat\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_default_quoted\"/>\n\t\t</context>\n\n\t\t<!-- Parentheses Block: ( )\n\t\t     NOTE: Here special contexts are used for paths, strings and brackets. The \",\" character acts as a delimiter. -->\n\t\t<context name=\"_common_parentheses_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Normal Text\" char=\")\"/>\n\t\t\t<!-- Highlight as path the text after the '=' operator, except keywords or simple words ([\\w\\-\\+]+) -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\=(?=\\s*($|[,\\)]))\"/>\n\t\t\t<RegExpr context=\"_parentheses_path_content\" attribute=\"Operator 1\" String=\"\\=\\s*(?=[^\\s&quot;\\(\\),]*[^&noPathChar;\\]\\}\\=\\w\\+\\-\\(,])\"/>\n\t\t\t<DetectChar context=\"_parentheses_path_content\" attribute=\"Path\" char=\"/\" lookAhead=\"true\"/>\n\t\t\t<Detect2Chars context=\"_parentheses_variable\" attribute=\"Variable\" char=\"@\" char1=\"{\" lookAhead=\"true\"/>\n\n\t\t\t<IncludeRules context=\"_common\"/>\n\t\t\t<DetectChar context=\"_round_brackets\" attribute=\"Globbing Brackets\" char=\"(\"/>\n\t\t\t<DetectChar context=\"_p_curly_brackets\" attribute=\"Globbing Brackets\" char=\"{\"/>\n\t\t\t<DetectChar context=\"_p_square_brackets\" attribute=\"Globbing Brackets\" char=\"[\"/>\n\t\t\t<IncludeRules context=\"_comment_not_allowed\"/>\n\t\t</context>\n\t\t<context name=\"_parentheses_block_profile\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Flags\" String=\"profile_flags\"/>\n\t\t\t<!-- Used by xattrs -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Other Option\" String=\"\\b[a-zA-Z](\\.?[\\w\\-])*(?=\\s*\\=)\"/>\n\t\t\t<IncludeRules context=\"_common_parentheses_block\"/>\n\t\t\t<IncludeRules context=\"_end_rule_irnc\"/>\n\t\t</context>\n\t\t<!-- Parentheses Block within Rules -->\n\t\t<context name=\"_default_parentheses_block_rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_common_parentheses_block\"/>\n\t\t\t<IncludeRules context=\"_end_rule_irnc_parentheses_rule\"/>\n\t\t</context>\n\n\t\t<!-- Finding the end of a rule -->\n\t\t<context name=\"_end_rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\",(?=(\\)|[\\w\\-]+[^\\s\\w\\-,#\\(&quot;]))\"/> <!-- Fix possible incorrect rule closures -->\n\t\t\t<DetectChar  context=\"#pop\" attribute=\"End of Rule Char\" char=\",\" endRegion=\"Rule\"/>\n\t\t\t<IncludeRules context=\"_end_rule_irnc\"/>\n\t\t</context>\n\t\t<!-- Rule/Profile on new line, in rule not closed -->\n\t\t<context name=\"_end_rule_irnc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword String=\"profile_head\" context=\"#pop!_profile_name\" attribute=\"Profile Head Error\" firstNonSpace=\"true\" endRegion=\"Rule\"/>\n\t\t\t<keyword String=\"access_types\"          context=\"#pop\" attribute=\"Access Qualifier Error\"  firstNonSpace=\"true\" endRegion=\"Rule\"/>\n\t\t\t<keyword String=\"qualifiers\"            context=\"#pop\" attribute=\"Qualifier Error\"         firstNonSpace=\"true\" endRegion=\"Rule\"/>\n\t\t\t<keyword String=\"file_qualifiers\"       context=\"#pop\" attribute=\"File Qualifier Error\"    firstNonSpace=\"true\" endRegion=\"Rule\"/>\n\t\t\t<RegExpr String=\"set(?=\\s+rlimit\\b)\"    context=\"#pop\" attribute=\"Rule Error\"              firstNonSpace=\"true\" endRegion=\"Rule\"/>\n\n\t\t\t<keyword String=\"rule_name_file\"          context=\"#pop!_rule_file\"          attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_capability\"    context=\"#pop!_rule_capability\"    attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_network\"       context=\"#pop!_rule_network\"       attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_pivotroot\"     context=\"#pop!_rule_pivotroot\"     attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_ptrace\"        context=\"#pop!_rule_ptrace\"        attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_signal\"        context=\"#pop!_rule_signal\"        attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_dbus\"          context=\"#pop!_rule_dbus\"          attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_link\"          context=\"#pop!_rule_link\"          attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_changeprofile\" context=\"#pop!_rule_changeprofile\" attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_rlimit\"        context=\"#pop!_rule_rlimit\"        attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<!-- This must be at the end of each rule context, to avoid replacing the 'unix' & 'remount' keywords\n\t\t\t     ('unix' is also a domain of the network rule; 'remount' is also a flag of the mount rule). -->\n\t\t\t<keyword String=\"rule_name_mount\" context=\"#pop!_rule_mount\" attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<keyword String=\"rule_name_unix\"  context=\"#pop!_rule_unix\"  attribute=\"Rule Error\" firstNonSpace=\"true\" endRegion=\"Rule\" beginRegion=\"Rule\"/>\n\t\t\t<!-- Not included: alias rule -->\n\t\t</context>\n\t\t<!-- For blocks of parentheses within rules (the same keywords as \"_end_rule_irnc\"!) -->\n\t\t<context name=\"_end_rule_irnc_parentheses_rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword String=\"profile_head\"            context=\"#pop\" attribute=\"Profile Head Error\"     lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"access_types\"            context=\"#pop\" attribute=\"Access Qualifier Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"qualifiers\"              context=\"#pop\" attribute=\"Qualifier Error\"        lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"file_qualifiers\"         context=\"#pop\" attribute=\"File Qualifier Error\"   lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<RegExpr String=\"set(?=\\s+rlimit\\b)\"      context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_file\"          context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_capability\"    context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_network\"       context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_pivotroot\"     context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_ptrace\"        context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_signal\"        context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_dbus\"          context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_link\"          context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_changeprofile\" context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_rlimit\"        context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<!-- Keep at the end to avoid conflicts! -->\n\t\t\t<keyword String=\"rule_name_mount\" context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<keyword String=\"rule_name_unix\"  context=\"#pop\" attribute=\"Rule Error\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\t\t\t<!-- Not included: alias rule -->\n\t\t</context>\n\n\t\t<!-- Paths & File Globals -->\n\n\t\t<context name=\"_find_path\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"_path_content\" attribute=\"Path\" char=\"/\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"_path_content\" String=\":([^:&noPathChar;\\(\\\\]|\\\\.)+:\" lookAhead=\"true\"/> <!-- :namespace: -->\n\t\t</context>\n\t\t<context name=\"_path_content\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" String=\"&endPath;\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_default_path\"/>\n\t\t\t<Detect2Chars context=\"_hat_path\" char=\"/\" char1=\"/\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_parentheses_path_content\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" char=\",\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_default_path\"/>\n\t\t\t<Detect2Chars context=\"_hat_path_parentheses\" char=\"/\" char1=\"/\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_default_path\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<AnyChar context=\"#pop\" String=\"&noPathCharWithoutSpace;\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_variable_simple\"/>\n\t\t\t<IncludeRules context=\"_path_globbing\"/>\n\t\t</context>\n\n\t\t<!-- Globbing -->\n\t\t<context name=\"_path_globbing\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_brackets_error\"/>\n\t\t\t<DetectChar context=\"_curly_brackets\" attribute=\"Globbing Brackets\" char=\"{\"/>\n\t\t\t<DetectChar context=\"_square_brackets\" attribute=\"Globbing Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets\" attribute=\"Globbing Brackets\" char=\"(\"/>\n\t\t\t<IncludeRules context=\"_path_globbing_chars\"/>\n\t\t</context>\n\t\t<context name=\"_path_globbing_chars\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Globbing Char\" String=\"&globbChars;\"/>\n\t\t\t<IncludeRules context=\"_escape\"/>\n\t\t</context>\n\t\t<!-- Escapes: Hexadecimal (\\xNN), decimal (\\dNNN) & octal (\\NNN). Also make literal any character.\n\t\t     NOTE: Reserved character escape sequences: \\\\&quot;aefnrt0 -->\n\t\t<context name=\"_escape\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\(x[a-fA-F\\d]{1,2}|d\\d{1,3}|[0-3][0-7]{0,2}|[4-7][0-7]?|.)\"/>\n\t\t</context>\n\t\t<context name=\"_profile_transition_escape\" attribute=\"Transition Profile Name\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Globbing Char in Tran. Prof.\" String=\"\\\\(x[a-fA-F\\d]{1,2}|d\\d{1,3}|[0-3][0-7]{0,2}|[4-7][0-7]?|.)\"/>\n\t\t</context>\n\n\t\t<!-- Groups of brackets: { }, [ ] and ( ) -->\n\t\t<context name=\"_curly_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Globbing Brackets\" char=\"}\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open Globbing Brackets\" String=\"[^&noPathChar;\\(\\[\\{\\}\\\\](?=[&noPathChar;]|$)\"/>\n\t\t\t<IncludeRules context=\"_default_path\"/>\n\t\t\t<IncludeRules context=\"_default_curly_brackets\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_square_brackets_content\">\n\t\t\t<RegExpr context=\"#pop!_square_brackets_content\" attribute=\"Globbing Char of Brackets\" String=\"\\^(?=[^\\s\\]&quot;])\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_content\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Globbing Brackets\" char=\"]\"/>\n\t\t\t<DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/> <!-- &noPathChar; -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open Globbing Brackets\" String=\"[^\\s\\[\\]\\\\](?=[&quot;\\s]|$)\"/> <!-- &noPathChar; -->\n\t\t\t<IncludeRules context=\"_default_square_brackets\"/>\n\t\t</context>\n\t\t<context name=\"_round_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Globbing Brackets\" char=\")\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open Globbing Brackets\" String=\"[^&noPathChar;\\(\\[\\{\\\\](?=[&quot;\\s]|$)\"/> <!-- &noPathChar; -->\n\t\t\t<IncludeRules context=\"_default_path\"/>\n\t\t\t<IncludeRules context=\"_default_round_brackets\"/>\n\t\t</context>\n\n\t\t<!-- Brackets quoted (allow spaces and line breaks) -->\n\t\t<context name=\"_curly_brackets_quoted\" attribute=\"Globbing Brackets\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Globbing Brackets\" char=\"}\"/>\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open Globbing Brackets\" String=\"[^\\s&quot;\\(\\[\\{\\}\\\\](?=\\s*&quot;)\"/>\n\t\t\t<IncludeRules context=\"_default_quoted\"/>\n\t\t\t<IncludeRules context=\"_default_curly_brackets\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_quoted\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop!_square_brackets_content_quoted\" fallthrough=\"true\" fallthroughContext=\"#pop!_square_brackets_content_quoted\">\n\t\t\t<RegExpr context=\"#pop!_square_brackets_content_quoted\" attribute=\"Globbing Char of Brackets\" String=\"\\^(?=[^\\]&quot;])\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_content_quoted\" attribute=\"Globbing Brackets\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Globbing Brackets\" char=\"]\"/>\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open Globbing Brackets\" String=\"[^\\s&quot;\\[\\]\\\\](?=\\s*&quot;)\"/>\n\t\t\t<IncludeRules context=\"_default_square_brackets\"/>\n\t\t</context>\n\t\t<context name=\"_round_brackets_quoted\" attribute=\"Globbing Brackets\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Globbing Brackets\" char=\")\"/>\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open Globbing Brackets\" String=\"[^\\s&quot;\\[\\{\\(\\)\\\\](?=\\s*&quot;)\"/>\n\t\t\t<IncludeRules context=\"_default_quoted\"/>\n\t\t\t<IncludeRules context=\"_default_round_brackets\"/>\n\t\t</context>\n\n\t\t<context name=\"_default_curly_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Globbing Char of Brackets\" char=\",\"/>\n\t\t\t<keyword context=\"#stay\" String=\"default_variables\"/>\n\t\t</context>\n\t\t<context name=\"_default_round_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Globbing Char of Brackets\" char=\"|\"/>\n\t\t</context>\n\t\t<context name=\"_default_square_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_variable_simple\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\" char=\"[\"/>\n\t\t\t<IncludeRules context=\"_path_globbing_chars\"/>\n\t\t</context>\n\t\t<context name=\"_brackets_error\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Error\" char=\"[\" char1=\"]\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Error\" char=\"{\" char1=\"}\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Error\" char=\"(\" char1=\")\"/>\n\t\t</context>\n\n\t\t<!-- If the brackets are outside a path -->\n\t\t<context name=\"_r_curly_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_find_path_after_variable\" attribute=\"Globbing Brackets\" char=\"}\"/>\n\t\t\t<IncludeRules context=\"_curly_brackets\"/>\n\t\t</context>\n\t\t<context name=\"_r_square_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_find_path_after_variable\" attribute=\"Globbing Brackets\" char=\"]\"/>\n\t\t\t<IncludeRules context=\"_square_brackets\"/>\n\t\t</context>\n\t\t<!-- In block of parentheses... -->\n\t\t<context name=\"_p_curly_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_parentheses_find_path_after_variable\" attribute=\"Globbing Brackets\" char=\"}\"/>\n\t\t\t<IncludeRules context=\"_curly_brackets\"/>\n\t\t</context>\n\t\t<context name=\"_p_square_brackets\" attribute=\"Globbing Brackets\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_parentheses_find_path_after_variable\" attribute=\"Globbing Brackets\" char=\"]\"/>\n\t\t\t<IncludeRules context=\"_square_brackets\"/>\n\t\t</context>\n\n\t\t<!-- Path Quoted -->\n\t\t<context name=\"_find_text_quoted\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"_quoted\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t</context>\n\t\t<context name=\"_quoted\" attribute=\"Text Quoted\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_default_quoted\"/>\n\t\t\t<Detect2Chars context=\"_hat_path_quoted\" char=\"/\" char1=\"/\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_default_quoted\" attribute=\"Text Quoted\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_variable_simple\"/>\n\t\t\t<IncludeRules context=\"_brackets_error\"/>\n\t\t\t<DetectChar context=\"_curly_brackets_quoted\" attribute=\"Globbing Brackets\" char=\"{\"/>\n\t\t\t<DetectChar context=\"_square_brackets_quoted\" attribute=\"Globbing Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets_quoted\" attribute=\"Globbing Brackets\" char=\"(\"/>\n\t\t\t<IncludeRules context=\"_path_globbing_chars\"/>\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"       spellChecking=\"false\"/>\n\t\t<itemData name=\"Path\"           defStyleNum=\"dsNormal\"       bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Text Quoted\"    defStyleNum=\"dsString\"       bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Comment\"        defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"URL in Comment\" defStyleNum=\"dsComment\"      underline=\"1\" spellChecking=\"false\" />\n\t\t<itemData name=\"Preprocessor\"   defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Prep. Lib\"      defStyleNum=\"dsImport\"       underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Open Prep. Lib\" defStyleNum=\"dsImport\"       underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Variable\"       defStyleNum=\"dsInformation\"  bold=\"0\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Profile Head\"     defStyleNum=\"dsFunction\"  bold=\"1\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Profile Name\"     defStyleNum=\"dsFunction\"  bold=\"0\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Qualifier\"        defStyleNum=\"dsKeyword\"   bold=\"1\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Access Qualifier\" defStyleNum=\"dsWarning\"   bold=\"1\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"File Qualifier\"   defStyleNum=\"dsVariable\"  bold=\"1\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Rule\"             defStyleNum=\"dsVariable\"  bold=\"1\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Data\"             defStyleNum=\"dsVariable\"  bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Other Data\"       defStyleNum=\"dsNormal\"    bold=\"0\" italic=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Permissions\"      defStyleNum=\"dsNormal\"    bold=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Option\"                  defStyleNum=\"dsOthers\"        bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Other Option\"            defStyleNum=\"dsAttribute\"     bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Flags\"                   defStyleNum=\"dsVerbatimString\"         spellChecking=\"false\"/>\n\t\t<itemData name=\"SubProfile/Hat\"          defStyleNum=\"dsAnnotation\"    bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"SubProfile/Hat Operator\" defStyleNum=\"dsAnnotation\"    bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Operator 1\"              defStyleNum=\"dsOperator\"      spellChecking=\"false\"/>\n\t\t<itemData name=\"Operator 2\"              defStyleNum=\"dsWarning\"       bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Number\"                  defStyleNum=\"dsDecVal\"        spellChecking=\"false\"/>\n\t\t<itemData name=\"Numerical Unit\"          defStyleNum=\"dsDecVal\"        bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"End of Rule Char\"        defStyleNum=\"dsNormal\"        spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Escape Char\"               defStyleNum=\"dsSpecialChar\"    bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Globbing Char\"             defStyleNum=\"dsSpecialChar\"    bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Globbing Char of Brackets\" defStyleNum=\"dsBuiltIn\"        bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Globbing Brackets\"         defStyleNum=\"dsVerbatimString\" bold=\"0\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Open Globbing Brackets\"    defStyleNum=\"dsVerbatimString\" bold=\"0\" underline=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Transition Profile Name\"      defStyleNum=\"dsFunction\"    bold=\"0\" italic=\"1\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Globbing Char in Tran. Prof.\" defStyleNum=\"dsSpecialChar\" bold=\"0\" italic=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Hat Operator in Tran. Prof.\"  defStyleNum=\"dsAnnotation\"  bold=\"1\" italic=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Rule Error\"             defStyleNum=\"dsVariable\" bold=\"1\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Qualifier Error\"        defStyleNum=\"dsNormal\"   bold=\"1\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Access Qualifier Error\" defStyleNum=\"dsWarning\"  bold=\"1\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"File Qualifier Error\"   defStyleNum=\"dsVariable\" bold=\"1\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Profile Head Error\"     defStyleNum=\"dsFunction\" bold=\"1\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Profile Name Error\"     defStyleNum=\"dsFunction\" bold=\"0\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Error\"                  defStyleNum=\"dsError\"    spellChecking=\"false\"/>\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<!-- Keyword delimiters: .()<>=/\\[]{},\"'^;:| -->\n\t<keywords casesensitive=\"true\" additionalDeliminator=\"&quot;&apos;\" weakDeliminator=\"!+-%*?~&amp;\"/>\n\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\"/>\n\t</comments>\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/asciidoc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n    <!-- alphabetic -->\n    <!ENTITY alp \"a-zA-Z\">\n    <!-- alphanumeric -->\n    <!ENTITY aln \"&alp;0-9\">\n    <!ENTITY id \"\\w[\\w-]+\">\n    <!-- percent symbol, needs to be encoded inside an entity definition -->\n    <!ENTITY perc \"&#x0025;\">\n\n    <!ENTITY admonition_names \"CAUTION|IMPORTANT|NOTE|TIP|WARNING\">\n\n    <!-- regular expression parts to identify anchors -->\n    <!ENTITY anchor_mid \"&id;(?:,.+?)?\">\n    <!ENTITY anchor_phrase \"#\\S(?:.*?\\S)?#\">\n\n    <!-- block delimiters -->\n    <!ENTITY block_dels_comment \"/{4,}\">\n    <!ENTITY block_dels_normal \"={4,}|_{4,}|\\*{4,}|-{2}|&quot;{2}\">\n    <!ENTITY block_dels_pass \"\\+{4,}\">\n    <!ENTITY block_dels_verbatim \"`{3}|-{4,}|\\.{4,}\">\n    <!-- postfix/trailing part of block name -->\n    <!ENTITY block_name_post \"(?:[#&perc;].+)?\\s*(,.*)?\\]\\s*$\">\n    <!-- block end delimiter, dynamic matching: \"^%1\\s*$\" -->\n    <!ENTITY block_end_del \"^&perc;1\\s*$\">\n\n    <!-- unicode character reference, decimal and hexadecimal -->\n    <!ENTITY char_ref \"&amp;#(?:\\d{2,4}|x[\\da-fA-F]{2,4});\">\n\n    <!-- email - inline -->\n    <!ENTITY email \"\\w[\\w.&perc;+-]*@[&aln;][&aln;.-]*\\.[&alp;]{2,4}\\b\">\n\n    <!-- link macro and mailto: -->\n    <!ENTITY link_mailto \"(?:link|mailto):[^:\\s\\[][^\\s\\[]*\\[(?:\\]|.*?[^\\\\]\\])\">\n\n    <!-- parts to build regular expressions to identify quoted (formatted) text\n         E.g. emphasized, marked, strong. -->\n    <!-- prefix/leading part -->\n    <!ENTITY quoted_pre \"(?&lt;=^|[^\\w;:}])\">\n    <!ENTITY quoted_pre_pass \"(?&lt;=^|\\W)\">\n    <!-- central part -->\n    <!ENTITY quoted \"\\S(?:.*?\\S)??\">\n    <!-- postfix/trailing part -->\n    <!ENTITY quoted_post \"(?=\\W|$)\">\n\n    <!-- section (title) -->\n    <!ENTITY sectionL0 \"^(?:=|#)\\s+(?=\\S)\">\n    <!ENTITY sectionL1 \"^(?:={2}|#{2})\\s+(?=\\S)\">\n    <!ENTITY sectionL2 \"^(?:={3}|#{3})\\s+(?=\\S)\">\n    <!ENTITY sectionL3 \"^(?:={4}|#{4})\\s+(?=\\S)\">\n    <!ENTITY sectionL4 \"^(?:={5}|#{5})\\s+(?=\\S)\">\n    <!ENTITY sectionL5 \"^(?:={6}|#{6})\\s+(?=\\S)\">\n]>\n<language author=\"Andreas Gratzer\" extensions=\"*.ad;*.adoc;*.asciidoc\" kateversion=\"5.0\" mimetype=\"text/asciidoc\" name=\"AsciiDoc\" license=\"MIT\" section=\"Markup\" version=\"3\">\n    <highlighting>\n        <list name=\"macro\">\n            <item>anchor</item>\n            <item>btn</item>\n            <item>footnote</item>\n            <item>footnoteref</item>\n            <item>icon</item>\n            <item>image</item>\n            <item>indexterm</item>\n            <item>indexterm2</item>\n            <item>kbd</item>\n            <item>menu</item>\n            <item>pass</item>\n            <item>toc</item>\n            <item>xref</item>\n        </list>\n\n        <contexts>\n            <context name=\"start\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- main title, first level 0 section title -->\n                <RegExpr String=\"&sectionL0;\" attribute=\"Main Title\" context=\"main title\" beginRegion=\"section\"/>\n                <IncludeRules context=\"R section\"/>\n            </context>\n\n            <!-- attribute value definition, may span multiple lines -->\n            <context name=\"attribute value\" attribute=\"Normal\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n                <!-- line with continuation -->\n                <RegExpr String=\".*?(?=\\s+(\\+\\s+)?\\\\\\s*$)\" attribute=\"Attribute Value\" context=\"continuation\"/>\n                <!-- line without continuation, terminates value definition -->\n                <RegExpr String=\".*\" attribute=\"Attribute Value\" context=\"#pop\"/>\n            </context>\n            <!-- inline attribute value definition -->\n            <context name=\"attribute value inline\" attribute=\"Attribute Value\" lineEndContext=\"#stay\">\n                <!-- the leading `:` is part of the definition syntax and should not be highlighted as value -->\n                <DetectChar char=\":\" attribute=\"Attribute\" context=\"attribute value inline L2\"/>\n                <DetectChar char=\"}\" attribute=\"Attribute\" context=\"#pop\"/>\n            </context>\n            <context name=\"attribute value inline L2\" attribute=\"Attribute Value\" lineEndContext=\"#stay\">\n                <DetectChar char=\"}\" attribute=\"Attribute\" context=\"#pop#pop\"/>\n            </context>\n\n            <!-- backlash, may function as an escape -->\n            <context name=\"backlash\" attribute=\"Normal\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <!-- anchor, consuming leading char will make anchor matches fail -->\n                <DetectChar char=\"[\" attribute=\"Normal\" context=\"#pop\"/>\n                <!-- cross reference -->\n                <DetectChar char=\"&lt;\" attribute=\"Normal\" context=\"#pop\"/>\n                <!-- email - inline, needs to be ordered after mailto: -->\n                <RegExpr String=\"&email;\" attribute=\"Normal\" context=\"#pop\"/>\n                <!-- attribute usage\n                     formatted/quoted text\n                     replacement of apostrophe\n                     table separator (default)\n                -->\n                <AnyChar String=\"_#`+*~^'|{\" attribute=\"Normal\" context=\"#pop\"/>\n                <!-- indexterm, consuming leading char will make matches fail -->\n                <DetectChar char=\"(\" attribute=\"Normal\" context=\"#pop\"/>\n                <!-- link and mailto macros, note that ftp, irc, http(s) don't match with leading `\\` anyway -->\n                <RegExpr String=\"&link_mailto;\" attribute=\"Normal\" context=\"#pop\"/>\n                <!-- macro -->\n                <keyword String=\"macro\" attribute=\"Normal\" context=\"#pop\"/>\n                <!-- replacement (besides apostrophe -->\n                <StringDetect String=\"(C)\" attribute=\"Normal\" context=\"#pop\"/>\n                <StringDetect String=\"(R)\" attribute=\"Normal\" context=\"#pop\"/>\n                <StringDetect String=\"(TM)\" attribute=\"Normal\" context=\"#pop\"/>\n                <Detect2Chars char=\"-\" char1=\"-\" attribute=\"Normal\" context=\"#pop\"/>\n                <StringDetect String=\"...\" attribute=\"Normal\" context=\"#pop\"/>\n                <Detect2Chars char=\"&lt;\" char1=\"-\" attribute=\"Normal\" context=\"#pop\"/>\n                <Detect2Chars char=\"-\" char1=\"&gt;\" attribute=\"Normal\" context=\"#pop\"/>\n                <Detect2Chars char=\"&lt;\" char1=\"=\" attribute=\"Normal\" context=\"#pop\"/>\n                <Detect2Chars char=\"=\" char1=\"&gt;\" attribute=\"Normal\" context=\"#pop\"/>\n                <RegExpr String=\"&char_ref;\" attribute=\"Normal\" context=\"#pop\"/>\n            </context>\n\n            <context name=\"block title\" attribute=\"Block Title\" lineEndContext=\"#pop\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n                <RegExpr String=\"^(&block_dels_comment;)\\s*$\" attribute=\"Comment\" context=\"#pop!comment delimited\" beginRegion=\"comment\"/>\n                <IncludeRules context=\"R anchor\"/>\n                <IncludeRules context=\"R block title\"/>\n                <IncludeRules context=\"##Alerts\" />\n            </context>\n            <context name=\"comment delimited\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&block_end_del;\" dynamic=\"true\" attribute=\"Comment\" context=\"#pop\" endRegion=\"comment\"/>\n                <IncludeRules context=\"##Alerts\" />\n            </context>\n            <context name=\"comment single-line\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <IncludeRules context=\"##Alerts\" />\n            </context>\n\n            <!-- continuation, both for normal text and attribute value definition\n                 The allowed pattern must already by validated.\n                 Here only the possible characters are highlighted. -->\n            <context name=\"continuation\" attribute=\"Normal\" lineEndContext=\"#pop\">\n                <AnyChar String=\"+\\\" attribute=\"Control\"/>\n            </context>\n\n            <context name=\"main title\" attribute=\"Main Title\" lineEndContext=\"#pop!section L0\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"normal\" attribute=\"Normal\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n                <RegExpr String=\"^(-{2}|&block_dels_normal;)\\s*$\" attribute=\"Delimiter\" context=\"#pop!normal delimited\" beginRegion=\"block\"/>\n                <IncludeRules context=\"R block title\"/>\n                <!-- shared rules includes anchor rules, so we do not need to include that separately -->\n                <IncludeRules context=\"R shared\"/>\n            </context>\n            <context name=\"normal delimited\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&block_end_del;\" dynamic=\"true\" attribute=\"Delimiter\" context=\"#pop\" endRegion=\"block\"/>\n                <IncludeRules context=\"R admonition\"/>\n                <IncludeRules context=\"R block\"/>\n                <!-- shared rules includes anchor rules, so we do not need to include that separately -->\n                <IncludeRules context=\"R shared\"/>\n            </context>\n\n            <context name=\"passthrough\" attribute=\"Passthrough\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n                <RegExpr String=\"^(&block_dels_pass;)\\s*$\" attribute=\"Delimiter\" context=\"#pop!passthrough delimited\" beginRegion=\"block\"/>\n                <IncludeRules context=\"R anchor\"/>\n                <IncludeRules context=\"R block title\"/>\n                <IncludeRules context=\"R include\"/>\n            </context>\n            <context name=\"passthrough delimited\" attribute=\"Passthrough\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&block_end_del;\" dynamic=\"true\" attribute=\"Delimiter\" context=\"#pop\" endRegion=\"block\"/>\n                <IncludeRules context=\"R include\"/>\n            </context>\n\n            <context name=\"section L0\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&sectionL5;\" attribute=\"Section Title\" context=\"section title L5\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL4;\" attribute=\"Section Title\" context=\"section title L4\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL3;\" attribute=\"Section Title\" context=\"section title L3\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL2;\" attribute=\"Section Title\" context=\"section title L2\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL1;\" attribute=\"Section Title\" context=\"section title L1\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL0;\" lookAhead=\"true\" attribute=\"Section Title\" context=\"section title L0\" endRegion=\"section\" beginRegion=\"section\"/>\n                <IncludeRules context=\"R section\"/>\n            </context>\n\n            <context name=\"section L1\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&sectionL5;\" attribute=\"Section Title\" context=\"section title L5\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL4;\" attribute=\"Section Title\" context=\"section title L4\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL3;\" attribute=\"Section Title\" context=\"section title L3\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL2;\" attribute=\"Section Title\" context=\"section title L2\" beginRegion=\"section\"/>\n                <RegExpr String=\"^(?:={1,2}|#{1,2})\\s+\\S\" lookAhead=\"true\" attribute=\"Section Title\" context=\"#pop\" endRegion=\"section\"/>\n                <IncludeRules context=\"R section\"/>\n            </context>\n\n            <context name=\"section L2\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&sectionL5;\" attribute=\"Section Title\" context=\"section title L5\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL4;\" attribute=\"Section Title\" context=\"section title L4\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL3;\" attribute=\"Section Title\" context=\"section title L3\" beginRegion=\"section\"/>\n                <RegExpr String=\"^(?:={1,3}|#{1,3})\\s+\\S\" lookAhead=\"true\" attribute=\"Section Title\" context=\"#pop\" endRegion=\"section\"/>\n                <IncludeRules context=\"R section\"/>\n            </context>\n\n            <context name=\"section L3\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&sectionL5;\" attribute=\"Section Title\" context=\"section title L5\" beginRegion=\"section\"/>\n                <RegExpr String=\"&sectionL4;\" attribute=\"Section Title\" context=\"section title L4\" beginRegion=\"section\"/>\n                <RegExpr String=\"^(?:={1,4}|#{1,4})\\s+\\S\" lookAhead=\"true\" attribute=\"Section Title\" context=\"#pop\" endRegion=\"section\"/>\n                <IncludeRules context=\"R section\"/>\n            </context>\n\n            <context name=\"section L4\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&sectionL5;\" attribute=\"Section Title\" context=\"section title L5\" beginRegion=\"section\"/>\n                <RegExpr String=\"^(?:={1,5}|#{1,5})\\s+\\S\" lookAhead=\"true\" attribute=\"Section Title\" context=\"#pop\" endRegion=\"section\"/>\n                <IncludeRules context=\"R section\"/>\n            </context>\n\n            <context name=\"section L5\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"^(?:={1,6}|#{1,6})\\s+\\S\" lookAhead=\"true\" attribute=\"Section Title\" context=\"#pop\" endRegion=\"section\"/>\n                <IncludeRules context=\"R section\"/>\n            </context>\n\n            <context name=\"section title L0\" attribute=\"Section Title\" lineEndContext=\"#pop!section L0\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"section title L1\" attribute=\"Section Title\" lineEndContext=\"#pop!section L1\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"section title L2\" attribute=\"Section Title\" lineEndContext=\"#pop!section L2\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"section title L3\" attribute=\"Section Title\" lineEndContext=\"#pop!section L3\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"section title L4\" attribute=\"Section Title\" lineEndContext=\"#pop!section L4\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"section title L5\" attribute=\"Section Title\" lineEndContext=\"#pop!section L5\">\n                <IncludeRules context=\"R title\"/>\n            </context>\n\n            <context name=\"table\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&block_end_del;\" dynamic=\"true\" attribute=\"Delimiter\" context=\"#pop\" endRegion=\"block\"/>\n                <!-- `|` with prefix for alignment, style etc. -->\n                <RegExpr String=\"(?&lt;=^|\\s)(?:(\\d*\\.)?\\d+\\+|\\d+\\*)?(?:[&lt;&gt;^]?\\.?[&lt;&gt;^])?[adehlmsv]?\\|\" attribute=\"Delimiter\"/>\n                <!-- simple `|` without alignment, style etc. -->\n                <DetectChar char=\"|\" attribute=\"Delimiter\"/>\n                <IncludeRules context=\"R shared\"/>\n            </context>\n\n            <context name=\"verbatim\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n                <RegExpr String=\"^(-{2}|&block_dels_verbatim;)\\s*$\" attribute=\"Delimiter\" context=\"#pop!verbatim delimited\" beginRegion=\"block\"/>\n                <IncludeRules context=\"R anchor\"/>\n                <IncludeRules context=\"R block title\"/>\n                <IncludeRules context=\"R comment\"/>\n                <IncludeRules context=\"R include\"/>\n                <RegExpr String=\"^.\" attribute=\"Verbatim\" context=\"#pop!verbatim paragraph\"/>\n            </context>\n            <context name=\"verbatim delimited\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n                <RegExpr String=\"&block_end_del;\" dynamic=\"true\" attribute=\"Delimiter\" context=\"#pop\" endRegion=\"block\"/>\n                <IncludeRules context=\"R include\"/>\n            </context>\n            <context name=\"verbatim paragraph\" attribute=\"Verbatim\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n                <IncludeRules context=\"R include\"/>\n            </context>\n\n            <!-- contexts to be used for IncludeRules only -->\n\n            <context name=\"R admonition\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- admonition - simple form, block form is part of block rules -->\n                <RegExpr String=\"^(?:&admonition_names;):(?=\\s+\\S)\" attribute=\"Preprocessor\" context=\"normal\"/>\n            </context>\n\n            <context name=\"R anchor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- bibliographic anchor -->\n                <RegExpr String=\"\\[{3}&anchor_mid;\\]{3}\" attribute=\"Anchor\"/>\n                <!-- normal form -->\n                <RegExpr String=\"\\[{2}&anchor_mid;\\]{2}\" attribute=\"Anchor\"/>\n                <!-- shorthand form at line start -->\n                <RegExpr String=\"^\\[#&anchor_mid;\\](&anchor_phrase;|\\s*$)\" attribute=\"Anchor\"/>\n                <!-- shorthand form inline -->\n                <RegExpr String=\"(?&lt;=\\S\\s)\\s*\\[\\s*#&anchor_mid;\\s*\\]&anchor_phrase;\" attribute=\"Anchor\"/>\n            </context>\n\n            <context name=\"R attribute\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- attribute definition without value / unset attribute -->\n                <RegExpr String=\"^:!?&id;!?:$\" attribute=\"Attribute\"/>\n                <!-- attribute definition with value -->\n                <RegExpr String=\"^:!?&id;!?:\\s(?=\\S)\" attribute=\"Attribute\" context=\"attribute value\"/>\n                <!-- attribute inline definition -->\n                <RegExpr String=\"\\{set:&id;(?=(:.*)?\\})\" minimal=\"true\" attribute=\"Attribute\" context=\"attribute value inline\"/>\n                <IncludeRules context=\"R attribute usage\"/>\n            </context>\n\n            <context name=\"R attribute usage\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"\\{&id;\\}\" attribute=\"Attribute\"/>\n            </context>\n\n            <context name=\"R block\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <IncludeRules context=\"R block title\"/>\n\n                <!-- name matching -->\n                <RegExpr String=\"^\\[(?:&admonition_names;)&block_name_post;\" attribute=\"Preprocessor\" context=\"normal\"/>\n                <RegExpr String=\"^\\[(?:example|quote|sidebar|verse)&block_name_post;\" attribute=\"Preprocessor\" context=\"normal\"/>\n                <RegExpr String=\"^\\[(?:pass|stem)&block_name_post;\" attribute=\"Preprocessor\" context=\"passthrough\"/>\n                <RegExpr String=\"^\\[(?:listing|literal|source)&block_name_post;\" attribute=\"Preprocessor\" context=\"verbatim\"/>\n\n                <!-- delimiter matching -->\n                <RegExpr String=\"^(&block_dels_normal;)\\s*$\" attribute=\"Delimiter\" context=\"normal delimited\" beginRegion=\"block\"/>\n                <RegExpr String=\"^(&block_dels_pass;)\\s*$\" attribute=\"Delimiter\" context=\"passthrough delimited\" beginRegion=\"block\"/>\n                <RegExpr String=\"^(\\|={3,})\\s*$\" attribute=\"Delimiter\" context=\"table\" beginRegion=\"block\"/>\n                <RegExpr String=\"^(&block_dels_verbatim;)\\s*$\" attribute=\"Delimiter\" context=\"verbatim delimited\" beginRegion=\"block\"/>\n            </context>\n\n            <context name=\"R block title\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- not more than 3 leading dots followed by a non-dot, otherwise it would conflict with the delimited literal block -->\n                <RegExpr String=\"^\\.{1,3}(?=[^\\.\\s])\" attribute=\"Block Title\" context=\"block title\"/>\n            </context>\n\n            <context name=\"R comment\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- comment - multi-line, named block -->\n                <RegExpr String=\"^\\[comment&block_name_post;\" attribute=\"Preprocessor\" context=\"comment\"/>\n                <!-- comment - multi-line, delimited block -->\n                <RegExpr String=\"^(&block_dels_comment;)\\s*$\" attribute=\"Comment\" context=\"comment delimited\" beginRegion=\"comment\"/>\n                <!-- comment - single line -->\n                <RegExpr String=\"^/{2}([^/]|$)\" attribute=\"Comment\" context=\"comment single-line\"/>\n            </context>\n\n            <context name=\"R formatted\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- custom style, e.g. [underline]#underlined text# -->\n                <RegExpr String=\"(?&lt;=^|\\W)\\[[^\\]]+?\\]((#|_|`|\\*){1,2})&quoted;\\g1&quoted_post;\" attribute=\"Preprocessor\"/>\n\n                <!-- combined highlighting must be ordered before simple highlighting -->\n\n                <!-- emphasized monospaced strong unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"`{2}\\*_.*_\\*`{2}\" minimal=\"true\" attribute=\"Emphasized Monospaced Strong\"/>\n                <!-- emphasized monospaced strong - constrained must be ordered after unconstrained -->\n                <RegExpr String=\"&quoted_pre;`\\*_&quoted;_\\*`&quoted_post;\" attribute=\"Emphasized Monospaced Strong\"/>\n\n                <!-- emphasized strong unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"\\*{2}_.*_\\*{2}\" minimal=\"true\" attribute=\"Emphasized Strong\"/>\n                <!-- emphasized strong constrained - must be ordered after unconstrained -->\n                <RegExpr String=\"&quoted_pre;\\*_&quoted;_\\*&quoted_post;\" attribute=\"Emphasized Strong\"/>\n\n                <!-- monospaced strong unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"`{2}\\*.*\\*`{2}\" minimal=\"true\" attribute=\"Monospaced Strong\"/>\n                <!-- monospaced strong constrained - must be ordered after unconstrained -->\n                <RegExpr String=\"&quoted_pre;`\\*&quoted;\\*`&quoted_post;\" attribute=\"Monospaced Strong\"/>\n\n                <!-- emphasized monospaced unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"`{2}_.*_`{2}\" minimal=\"true\" attribute=\"Emphasized Monospaced\"/>\n                <!-- emphasized monospaced constrained - must be ordered after unconstrained -->\n                <RegExpr String=\"&quoted_pre;`_&quoted;_`&quoted_post;\" attribute=\"Emphasized Monospaced\"/>\n\n                <!-- strong unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"\\*{2}[^*].*\\*{2}\" minimal=\"true\" attribute=\"Strong\"/>\n                <!-- strong constrained - must be ordered after unconstrained -->\n                <RegExpr String=\"&quoted_pre;\\*&quoted;\\*&quoted_post;\" attribute=\"Strong\"/>\n\n                <!-- emphasized unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"_{2}[^_].*_{2}\" minimal=\"true\" attribute=\"Emphasized\"/>\n                <!-- emphasized constrained - must be ordered after unconstrained\n                     Can't use &quoted_pre; as that excludes \\w which excludes `_` too. -->\n                <RegExpr String=\"(?&lt;=^|[^&alp;;:}])_&quoted;_&quoted_post;\" attribute=\"Emphasized\"/>\n\n                <IncludeRules context=\"R marked\"/>\n                <IncludeRules context=\"R monospaced\"/>\n\n                <!-- subscript -->\n                <RegExpr String=\"~\\S+~\" minimal=\"true\" attribute=\"Subscript\"/>\n                <!-- superscript -->\n                <RegExpr String=\"\\^\\S+\\^\" minimal=\"true\" attribute=\"Superscript\"/>\n            </context>\n\n            <context name=\"R include\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"^include::.*\\[.*?\\](?=\\s*$)\" attribute=\"Preprocessor\"/>\n            </context>\n\n            <context name=\"R macro\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <RegExpr String=\"(?:anchor|xref):&id;\\[.*?\\]\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"(?:btn|footnote(ref)?|kbd):\\[.*?\\]\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"pass:\\w*\\[.*?\\]\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"(?:icon|image|menu):[^:].*?\\[.*?\\]\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"toc::\\[\\]\" attribute=\"Preprocessor\"/>\n            </context>\n\n            <context name=\"R marked\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- marked unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"#{2}.+#{2}\" minimal=\"true\" attribute=\"Marked\"/>\n                <!-- marked constrained - must be ordered after unconstrained -->\n                <RegExpr String=\"&quoted_pre;#&quoted;#&quoted_post;\" attribute=\"Marked\"/>\n            </context>\n\n            <context name=\"R monospaced\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- monospaced unconstrained - must be ordered before constrained -->\n                <RegExpr String=\"`{2}[^`].*`{2}\" minimal=\"true\" attribute=\"Monospaced\"/>\n                <!-- monospaced constrained - must be ordered after unconstrained -->\n                <RegExpr String=\"&quoted_pre;`&quoted;`&quoted_post;\" attribute=\"Monospaced\"/>\n            </context>\n\n            <!-- replacements -->\n            <context name=\"R replacement\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- copyright -->\n                <StringDetect String=\"(C)\" attribute=\"Replacement\"/>\n                <!-- registered -->\n                <StringDetect String=\"(R)\" attribute=\"Replacement\"/>\n                <!-- trademark -->\n                <StringDetect String=\"(TM)\" attribute=\"Replacement\"/>\n                <!-- apostrophe, only when between alphabetic characters -->\n                <RegExpr String=\"(?&lt;=[&alp;])'(?=[&alp;])\" attribute=\"Replacement\"/>\n                <!-- ellipses -->\n                <StringDetect String=\"...\" attribute=\"Replacement\"/>\n                <!-- mdash -->\n                <Detect2Chars char=\"-\" char1=\"-\" attribute=\"Replacement\"/>\n                <!-- left single arrow -->\n                <Detect2Chars char=\"&lt;\" char1=\"-\" attribute=\"Replacement\"/>\n                <!-- right single arrow -->\n                <Detect2Chars char=\"-\" char1=\"&gt;\" attribute=\"Replacement\"/>\n                <!-- left double arrow -->\n                <Detect2Chars char=\"&lt;\" char1=\"=\" attribute=\"Replacement\"/>\n                <!-- right double arrow -->\n                <Detect2Chars char=\"=\" char1=\"&gt;\" attribute=\"Replacement\"/>\n                <!-- unicode character reference -->\n                <RegExpr String=\"&char_ref;\" attribute=\"Replacement\"/>\n            </context>\n\n            <context name=\"R section\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- callout as being used below a source code block -->\n                <RegExpr String=\"^&lt;(?:\\.|\\d+)&gt;(?=\\s+\\S)\" attribute=\"Callout\"/>\n                <IncludeRules context=\"R admonition\"/>\n                <IncludeRules context=\"R block\"/>\n                <IncludeRules context=\"R shared\"/>\n                <!-- literal paragraph started by a line with leading spaces\n                     This must be ordered after lists, as list items may be indented -->\n                <RegExpr String=\"^\\s+\\S\" attribute=\"Verbatim\" context=\"verbatim paragraph\"/>\n            </context>\n\n            <context name=\"R shared\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- the escaped forms must be ordered before the not escaped forms -->\n                <DetectChar char=\"\\\" attribute=\"Normal\" context=\"backlash\"/>\n\n                <!-- passthrough - inline, must be ordered before other rules\n                     The macro form pass: is part of \"R macro\" context -->\n                <RegExpr String=\"&quoted_pre_pass;(\\+{1,3})&quoted;\\g1&quoted_post;\" attribute=\"Passthrough\"/>\n\n                <IncludeRules context=\"R anchor\"/>\n                <IncludeRules context=\"R attribute\"/>\n                <IncludeRules context=\"R comment\"/>\n                <IncludeRules context=\"R include\"/>\n                <IncludeRules context=\"R macro\"/>\n\n                <!-- counter and counter2 -->\n                <RegExpr String=\"\\{counter2?:\\s*&id;\\s*(?::\\s*(\\d+|[&alp;])\\s*)?\\}\" minimal=\"true\" attribute=\"Attribute\"/>\n\n                <!-- horizontal rules and page break -->\n                <!-- to enable highlighting of the horizontal rules using \"- - -\" or \"* * *\",\n                     keep this before the checklist and unnumbered list definition -->\n                <RegExpr String=\"^(?:'{3}|-{3}|\\*{3}|- - -|\\* \\* \\*|&lt;{3})\\s*$\" attribute=\"Control\"/>\n\n                <!-- cross reference -->\n                <RegExpr String=\"&lt;&lt;[^&lt;\\s].*?&gt;&gt;\" attribute=\"Link\"/>\n\n                <!-- index term -->\n                <RegExpr String=\"\\({3}.+?\\){3}\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"\\({2}.+?\\){2}\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"indexterm2?:\\[.+?\\]\" attribute=\"Preprocessor\"/>\n\n                <!-- marker for description list -->\n                <RegExpr String=\"^\\s*\\S.+::(?=\\s|$)\" attribute=\"List Marker\"/>\n                <!-- marker for numbered list -->\n                <RegExpr String=\"^\\s*(?:\\.+|\\d+\\.)(?=\\s+\\S)\" attribute=\"List Marker\"/>\n                <!-- marker for checklist and bulleted/unnumbered list\n                     To enable highlighting of the horizontal rules using \"- - -\" or \"* * *\",\n                     keep this after the horizontal rules definition -->\n                <RegExpr String=\"^\\s*(?:-|\\*+)(?:\\s+\\[[*x ]\\])?(?=\\s+\\S)\" attribute=\"List Marker\"/>\n\n                <!-- media - block format -->\n                <RegExpr String=\"^(?:audio|image|video)::.*\\[.*?\\](?=\\s*$)\" attribute=\"Preprocessor\"/>\n\n                <!-- links -->\n                <RegExpr String=\"(?&lt;=^|[\\s\\[\\]();&lt;&gt;])(?:ftp|https?|irc)://[^\\s\\[]*(?:\\[\\]|\\[.*[^\\\\]\\]|(?=([\\[\\]]|[\\.,;:]?(\\s|$))))\" minimal=\"true\" attribute=\"Link\"/>\n                <RegExpr String=\"&link_mailto;\" attribute=\"Link\"/>\n                <!-- email - inline,  needs to be ordered after mailto:\n                     For some reason, Asciidoctor recognizes emails with leading : or / but does not render them as link -->\n                <RegExpr String=\"[:/]&email;\" attribute=\"Normal\"/>\n                <RegExpr String=\"&email;\" attribute=\"Link\"/>\n\n                <!-- preprocessor -->\n                <RegExpr String=\"^ifn?def::&id;(?:[,\\+]&id;)*\\[.*\\]\" minimal=\"true\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"^ifeval::\\[.*\\]\" minimal=\"true\" attribute=\"Preprocessor\"/>\n                <RegExpr String=\"^endif::(?:&id;)?\\[\\]\" attribute=\"Preprocessor\"/>\n\n                <!-- general meta data attribute list - must be ordered after other rules matching for lines of the form of [some content] -->\n                <RegExpr String=\"^\\[[^\\s\\[].*\\](?=\\s*$)\" attribute=\"Preprocessor\"/>\n\n                <!-- continuation `+`, both at end of line and on a line on its own -->\n                <RegExpr String=\"(?:^|\\s)\\s*\\+\\s*$\" lookAhead=\"true\" attribute=\"Normal\" context=\"continuation\"/>\n\n                <!-- formatted/quoted must be ordered after unnumbered list -->\n                <IncludeRules context=\"R formatted\"/>\n                <!-- replacements are done only if nothing else matched -->\n                <IncludeRules context=\"R replacement\"/>\n            </context>\n\n            <!-- common rules for main title, section title, block title -->\n            <context name=\"R title\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                <!-- the escaped forms must be ordered before the not escaped forms -->\n                <DetectChar char=\"\\\" attribute=\"Section Title\" context=\"backlash\"/>\n                <IncludeRules context=\"R anchor\"/>\n                <IncludeRules context=\"R attribute usage\"/>\n                <IncludeRules context=\"R marked\"/>\n                <IncludeRules context=\"R monospaced\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Anchor\" defStyleNum=\"dsFunction\"/>\n            <itemData name=\"Attribute\" defStyleNum=\"dsVariable\"/>\n            <itemData name=\"Attribute Value\" defStyleNum=\"dsVariable\" italic=\"true\"/>\n            <itemData name=\"Block Title\" defStyleNum=\"dsString\" italic=\"true\"/>\n            <itemData name=\"Callout\" defStyleNum=\"dsNormal\" bold=\"true\" underline=\"true\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Control\" defStyleNum=\"dsControlFlow\" bold=\"true\" underline=\"true\"/>\n            <itemData name=\"Delimiter\" defStyleNum=\"dsPreprocessor\" bold=\"true\"/>\n            <itemData name=\"Emphasized\" defStyleNum=\"dsNormal\" italic=\"true\"/>\n            <itemData name=\"Emphasized Monospaced\" defStyleNum=\"dsDocumentation\" italic=\"true\"/>\n            <itemData name=\"Emphasized Monospaced Strong\" defStyleNum=\"dsDocumentation\" bold=\"true\" italic=\"true\"/>\n            <itemData name=\"Emphasized Strong\" defStyleNum=\"dsNormal\" bold=\"true\" italic=\"true\"/>\n            <itemData name=\"Link\" defStyleNum=\"dsVariable\" underline=\"true\"/>\n            <itemData name=\"List Marker\" defStyleNum=\"dsNormal\" bold=\"true\"/>\n            <itemData name=\"Main Title\" defStyleNum=\"dsNormal\" bold=\"true\"/>\n            <itemData name=\"Marked\" defStyleNum=\"dsFloat\"/>\n            <itemData name=\"Monospaced\" defStyleNum=\"dsDocumentation\"/>\n            <itemData name=\"Monospaced Strong\" defStyleNum=\"dsDocumentation\" bold=\"true\"/>\n            <itemData name=\"Normal\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Passthrough\" defStyleNum=\"dsSpecialString\"/>\n            <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\"/>\n            <itemData name=\"Replacement\" defStyleNum=\"dsNormal\" bold=\"true\" underline=\"true\"/>\n            <itemData name=\"Section Title\" defStyleNum=\"dsString\" bold=\"true\"/>\n            <itemData name=\"Strong\" defStyleNum=\"dsNormal\" bold=\"true\"/>\n            <itemData name=\"Subscript\" defStyleNum=\"dsNormal\" underline=\"true\"/>\n            <itemData name=\"Superscript\" defStyleNum=\"dsNormal\" bold=\"true\" underline=\"true\"/>\n            <itemData name=\"Verbatim\" defStyleNum=\"dsDocumentation\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"//\"/>\n            <comment name=\"multiLine\" start=\"////\" end=\"////\"/>\n        </comments>\n        <keywords casesensitive=\"1\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/asm-avr.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\n*************************************************************************\n*                                                                       *\n*               Syntax highlighting for the AVR Assembler               *\n*                   Copyright (C) 2004, Roland Nagy                     *\n*                                                                       *\n*************************************************************************\n\nAuthor:   Rolanf Nagy <R.Nagy@pknc.com>\nDate:     18th May, 2004\nVersion:  1.0\n\nThis file contains the XML syntax highlighting description for the AVR\nAssembler, for KATE, the KDE Advanced Editor.  Keywords have been taken\ndirectly from the AVR Assembler source code.\n\nThis program, including associated files, is free software.  You may\ndistribute it and/or modify it under the terms of the GNU General Public\nLicense as published by the Free Software Foundation; either Version 2 of\nthe license, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\nor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\nfor more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n-->\n\n<language name=\"AVR Assembler\" version=\"3\" kateversion=\"5.0\" section=\"Assembler\" extensions=\"*.asm;*.ASM;*.asm-avr\" mimetype=\"text/x-asm;text/x-asm-avr\" author=\"Roland Nagy\" license=\"GPLv2+\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>adc</item>\n      <item>add</item>\n      <item>adiw</item>\n      <item>and</item>\n      <item>andi</item>\n      <item>asr</item>\n      <item>bclr</item>\n      <item>bld</item>\n      <item>brbc</item>\n      <item>brbs</item>\n      <item>brcc</item>\n      <item>brcs</item>\n      <item>break</item>\n      <item>breq</item>\n      <item>brge</item>\n      <item>brhc</item>\n      <item>brhs</item>\n      <item>brid</item>\n      <item>brie</item>\n      <item>brlo</item>\n      <item>brlt</item>\n      <item>brmi</item>\n      <item>brne</item>\n      <item>brpl</item>\n      <item>brsh</item>\n      <item>brtc</item>\n      <item>brts</item>\n      <item>brvc</item>\n      <item>brvs</item>\n      <item>bset</item>\n      <item>bst</item>\n      <item>call</item>\n      <item>cbi</item>\n      <item>cbr</item>\n      <item>clc</item>\n      <item>clh</item>\n      <item>cli</item>\n      <item>cln</item>\n      <item>clr</item>\n      <item>cls</item>\n      <item>clt</item>\n      <item>clv</item>\n      <item>clz</item>\n      <item>com</item>\n      <item>cp</item>\n      <item>cpc</item>\n      <item>cpi</item>\n      <item>cpse</item>\n      <item>dec</item>\n      <item>eicall</item>\n      <item>eijmp</item>\n      <item>elpm</item>\n      <item>eor</item>\n      <item>fmul</item>\n      <item>fmuls</item>\n      <item>fmulsu</item>\n      <item>icall</item>\n      <item>ijmp</item>\n      <item>in</item>\n      <item>inc</item>\n      <item>jmp</item>\n      <item>ld</item>\n      <item>ldd</item>\n      <item>ldi</item>\n      <item>lds</item>\n      <item>lpm</item>\n      <item>lsl</item>\n      <item>lsr</item>\n      <item>mov</item>\n      <item>movw</item>\n      <item>mul</item>\n      <item>muls</item>\n      <item>mulsu</item>\n      <item>neg</item>\n      <item>nop</item>\n      <item>or</item>\n      <item>ori</item>\n      <item>out</item>\n      <item>pop</item>\n      <item>push</item>\n      <item>rcall</item>\n      <item>ret</item>\n      <item>reti</item>\n      <item>rjmp</item>\n      <item>rol</item>\n      <item>ror</item>\n      <item>sbc</item>\n      <item>sbr</item>\n      <item>sbrc</item>\n      <item>sbrs</item>\n      <item>sec</item>\n      <item>seh</item>\n      <item>sbi</item>\n      <item>sbci</item>\n      <item>sbic</item>\n      <item>sbis</item>\n      <item>sbiw</item>\n      <item>sei</item>\n      <item>sen</item>\n      <item>ser</item>\n      <item>ses</item>\n      <item>set</item>\n      <item>sev</item>\n      <item>sez</item>\n      <item>sleep</item>\n      <item>spm</item>\n      <item>st</item>\n      <item>std</item>\n      <item>sts</item>\n      <item>sub</item>\n      <item>subi</item>\n      <item>swap</item>\n      <item>tst</item>\n      <item>wdr</item>\n  </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr      attribute=\"Label\" context=\"#stay\" String=\"[A-Za-z0-9_.$]+:\" firstNonSpace=\"true\"/>\n        <keyword      attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <HlCOct       attribute=\"Octal\" context=\"#stay\" />\n        <HlCHex       attribute=\"Hex\" context=\"#stay\" />\n        <RegExpr      attribute=\"Binary\" context=\"#stay\" String=\"0[bB][01]+\" />\n        <Int          attribute=\"Decimal\" context=\"#stay\" />\n        <RegExpr      attribute=\"Float\" context=\"#stay\" String=\"0[fFeEdD][-+]?[0-9]*\\.?[0-9]*[eE]?[-+]?[0-9]+\" />\n        <RegExpr      attribute=\"Normal Text\" context=\"#stay\" String=\"[A-Za-z_.$][A-Za-z0-9_.$]*\" />\n        <RegExpr      attribute=\"Char\" context=\"#stay\" String=\"'(\\\\x[0-9a-fA-F][0-9a-fA-F]?|\\\\[0-7]?[0-7]?[0-7]?|\\\\.|.)\" />\n        <DetectChar   attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"*\" />\n        <DetectChar   attribute=\"Comment\" context=\"Commentar 2\" char=\"@\" />\n        <DetectChar   attribute=\"Comment\" context=\"Commentar 2\" char=\";\" />\n        <AnyChar      attribute=\"Symbol\" context=\"#stay\" String=\"!#%&amp;*()+,-&lt;=&gt;?/:[]^{|}~\" />\n        <RegExpr      attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"^#\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 1\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 2\" />\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\" />\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue  attribute=\"String\" context=\"Some Context\" />\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\" />\n        <DetectChar    attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Some Context\" />\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Label\"        defStyleNum=\"dsFunction\" />\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"  />\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"   />\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Binary\"       defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"    />\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"     />\n      <itemData name=\"String\"       defStyleNum=\"dsString\"   />\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\" />\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"  />\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\";\" />\n      <comment name=\"singleLine\" start=\"@\" />\n      <comment name=\"multiLine\"  start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"_.$\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/asm-dsp56k.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"Motorola DSP56k\" section=\"Assembler\" version=\"2\" kateversion=\"5.0\"  extensions=\"*.asm;*.inc;*.ASM;*.INC\" author=\"Miro Kropacek (miro.kropacek@gmail.com)\" license=\"LGPL\">\n\n  <highlighting>\n    <list name=\"Data Registers\">\n      <item>x</item>\n      <item>x0</item>\n      <item>x1</item>\n      <item>y</item>\n      <item>y0</item>\n      <item>y1</item>\n      <item>a2</item>\n      <item>a1</item>\n      <item>a0</item>\n      <item>a</item>\n      <item>a10</item>\n      <item>ab</item>\n      <item>b2</item>\n      <item>b1</item>\n      <item>b0</item>\n      <item>b</item>\n      <item>b10</item>\n      <item>ba</item>\n    </list>\n\n    <list name=\"Address Registers\">\n      <item>r0</item>\n      <item>r1</item>\n      <item>r2</item>\n      <item>r3</item>\n      <item>r4</item>\n      <item>r5</item>\n      <item>r6</item>\n      <item>r7</item>\n    </list>\n\n    <list name=\"Offset Registers\">\n\t    <item>n0</item>\n\t    <item>n1</item>\n\t    <item>n2</item>\n\t    <item>n3</item>\n\t    <item>n4</item>\n\t    <item>n5</item>\n\t    <item>n6</item>\n\t    <item>n7</item>\n    </list>\n\n    <list name=\"Modifier Registers\">\n\t    <item>m0</item>\n\t    <item>m1</item>\n\t    <item>m2</item>\n\t    <item>m3</item>\n\t    <item>m4</item>\n\t    <item>m5</item>\n\t    <item>m6</item>\n\t    <item>m7</item>\n    </list>\n\n    <list name=\"Control Registers\">\n\t    <item>la</item>\n\t    <item>lc</item>\n\t    <item>pc</item>\n\t    <item>ssh</item>\n\t    <item>ssl</item>\n\t    <item>omr</item>\n\t    <item>sr</item>\n\t    <item>sp</item>\n\t    <item>mr</item>\n\t    <item>ccr</item>\n    </list>\n\n    <list name=\"Instructions\">\n\t    <item>abs</item>\n\t    <item>adc</item>\n\t    <item>add</item>\n\t    <item>addl</item>\n\t    <item>addr</item>\n\t    <item>and</item>\n\t    <item>andi</item>\n\t    <item>asl</item>\n\t    <item>asr</item>\n\t    <item>bchg</item>\n\t    <item>bclr</item>\n\t    <item>bset</item>\n\t    <item>btst</item>\n\t    <item>clr</item>\n\t    <item>cmp</item>\n\t    <item>cmpm</item>\n\t    <item>div</item>\n\t    <item>do</item>\n\t    <item>enddo</item>\n\t    <item>eor</item>\n\t    <item>illegal</item>\n\t    <item>jcc</item>\n\t    <item>jhs</item>\n\t    <item>jcs</item>\n\t    <item>jls</item>\n\t    <item>jec</item>\n\t    <item>jeq</item>\n\t    <item>jes</item>\n\t    <item>jge</item>\n\t    <item>jgt</item>\n\t    <item>jlc</item>\n\t    <item>jle</item>\n\t    <item>jls</item>\n\t    <item>jlt</item>\n\t    <item>jmi</item>\n\t    <item>jne</item>\n\t    <item>jnr</item>\n\t    <item>jpl</item>\n\t    <item>jnn</item>\n\t    <item>jclr</item>\n\t    <item>jmp</item>\n\t    <item>jscc</item>\n\t    <item>jshs</item>\n\t    <item>jscs</item>\n\t    <item>jsls</item>\n\t    <item>jsec</item>\n\t    <item>jseq</item>\n\t    <item>jses</item>\n\t    <item>jsge</item>\n\t    <item>jsgt</item>\n\t    <item>jslc</item>\n\t    <item>jsle</item>\n\t    <item>jsls</item>\n\t    <item>jslt</item>\n\t    <item>jsmi</item>\n\t    <item>jsne</item>\n\t    <item>jsnr</item>\n\t    <item>jspl</item>\n\t    <item>jsnn</item>\n\t    <item>jsclr</item>\n\t    <item>jset</item>\n\t    <item>jsr</item>\n\t    <item>jsset</item>\n\t    <item>lsl</item>\n\t    <item>lsr</item>\n\t    <item>lua</item>\n\t    <item>mac</item>\n\t    <item>macr</item>\n\t    <item>move</item>\n\t    <item>movec</item>\n\t    <item>movem</item>\n\t    <item>movep</item>\n\t    <item>mpy</item>\n\t    <item>mpyr</item>\n\t    <item>neg</item>\n\t    <item>nop</item>\n\t    <item>norm</item>\n\t    <item>not</item>\n\t    <item>or</item>\n\t    <item>ori</item>\n\t    <item>rep</item>\n\t    <item>reset</item>\n\t    <item>rnd</item>\n\t    <item>rol</item>\n\t    <item>ror</item>\n\t    <item>rti</item>\n\t    <item>rts</item>\n\t    <item>sbc</item>\n\t    <item>stop</item>\n\t    <item>sub</item>\n\t    <item>subl</item>\n\t    <item>subr</item>\n\t    <item>swi</item>\n\t    <item>tcc</item>\n\t    <item>ths</item>\n\t    <item>tcs</item>\n\t    <item>tls</item>\n\t    <item>tec</item>\n\t    <item>teq</item>\n\t    <item>tes</item>\n\t    <item>tge</item>\n\t    <item>tgt</item>\n\t    <item>tlc</item>\n\t    <item>tle</item>\n\t    <item>tls</item>\n\t    <item>tlt</item>\n\t    <item>tmi</item>\n\t    <item>tne</item>\n\t    <item>tnr</item>\n\t    <item>tpl</item>\n\t    <item>snn</item>\n\t    <item>tfr</item>\n\t    <item>tst</item>\n\t    <item>wait</item>\n    </list>\n\n    <list name=\"Directives\">\n\t    <item>endif</item>\n\t    <item>endc</item>\n\t    <item>else</item>\n\t    <item>ifne</item>\n\t    <item>if</item>\n\t    <item>ifeq</item>\n\t    <item>ifle</item>\n\t    <item>iflt</item>\n\t    <item>ifge</item>\n\t    <item>ifgt</item>\n\t    <item>include</item>\n\t    <item>incbin</item>\n\t    <item>printval</item>\n\t    <item>pass1val</item>\n\t    <item>pass2val</item>\n\t    <item>fail</item>\n\t    <item>endm</item>\n\t    <item>end</item>\n\t    <item>org</item>\n\t    <item>ds</item>\n\t    <item>dsm</item>\n\t    <item>list</item>\n\t    <item>nolist</item>\n\t    <item>macro</item>\n\t    <item>dc</item>\n\t    <item>equ</item>\n    </list>\n\n    <contexts>\n      <!-- name = name of context, attribute = name of item data -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n\t<RegExpr attribute=\"Memory\" context=\"#stay\" String=\"[xylpXYLP]:\"/>\n\t<keyword attribute=\"Data Registers\" context=\"#stay\" String=\"Data Registers\"/>\n\t<keyword attribute=\"Address Registers\" context=\"#stay\" String=\"Address Registers\"/>\n\t<keyword attribute=\"Offset Registers\" context=\"#stay\" String=\"Offset Registers\"/>\n\t<keyword attribute=\"Modifier Registers\" context=\"#stay\" String=\"Modifier Registers\"/>\n\t<keyword attribute=\"Control Registers\" context=\"#stay\" String=\"Control Registers\"/>\n\t<keyword attribute=\"Instructions\" context=\"#stay\" String=\"Instructions\"/>\n\t<keyword attribute=\"Directives\" context=\"#stay\" String=\"Directives\"/>\n\n\t<RegExpr attribute=\"Label\" context=\"#stay\" String=\"^[A-Za-z][A-Za-z_.0-9]*:?\"/>\n\t<RegExpr attribute=\"Local label\" context=\"#stay\" String=\"^_[A-Za-z_][A-Za-z_.0-9]*:?\"/>\n\n\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"*\" firstNonSpace=\"true\"/>\n\t<DetectChar attribute=\"Constant\" context=\"Constant\" char=\"#\"/>\n\t<DetectChar attribute=\"BaseN\" context=\"Number16\" char=\"$\"/>\n\t<DetectChar attribute=\"BaseN\" context=\"Number2\" char=\"%\"/>\n\t<DetectChar attribute=\"BaseN\" context=\"Number8\" char=\"@\"/>\n\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t<Int attribute=\"Number\" context=\"#stay\"/>\n\t<RangeDetect attribute=\"Char\" context=\"#stay\" char=\"'\"  char1=\"'\"/>\n\t<AnyChar attribute=\"String\" context=\"String\" String=\"&quot;'\"/>\n      </context>\n\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n\t      <AnyChar attribute=\"String\" context=\"#pop\" String=\"&quot;'\"/>\n      </context>\n\n      <context name=\"Constant\" attribute=\"Constant\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"[0-9]+\"/>\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"\\$[A-Fa-f0-9]+\"/>\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"@[0-7]+\"/>\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"%[01]+\"/>\n\t      <RegExpr attribute=\"Label\" context=\"Operators\" String=\"[A-Za-z_][A-Za-z_.0-9]*\"/>\n\t      <RegExpr attribute=\"Local label\" context=\"Operators\" String=\"\\.[A-Za-z_][A-Za-z_.0-9]*\"/>\n\t      <RangeDetect attribute=\"Char\" context=\"#pop\" char=\"'\"  char1=\"'\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop\"/>\n\t      <DetectSpaces attribute=\"Normal Text\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Operators\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t      <DetectChar attribute=\"Normal Text\" char=\"|\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"&amp;\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"^\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"*\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"+\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"-\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"/\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"~\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"!\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"%\" context=\"#pop\"/>\n\t      <Detect2Chars attribute=\"Normal Text\" char=\"&lt;\" char1=\"&lt;\" context=\"#pop\"/>\n\t      <Detect2Chars attribute=\"Normal Text\" char=\"&gt;\" char1=\"&gt;\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop#pop\"/>\n\t      <DetectSpaces attribute=\"Normal Text\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Number16\" attribute=\"BaseN\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"BaseN\" context=\"#pop\" String=\"[A-Fa-f0-9]+\"/>\n      </context>\n\n      <context name=\"Number2\" attribute=\"BaseN\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"BaseN\" context=\"#pop\" String=\"[01]+\"/>\n      </context>\n\n      <context name=\"Number8\" attribute=\"BaseN\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"BaseN\" context=\"#pop\" String=\"[0-7]+\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <!-- keywords -->\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Data Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Address Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Offset Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Modifier Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Control Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Instructions\" bold=\"true\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Directives\" bold=\"true\" defStyleNum=\"dsControlFlow\"/>\n      <itemData name=\"Memory\" bold=\"true\" defStyleNum=\"dsOthers\"/>\n      <!-- defined in contexts -->\n      <itemData name=\"Comment\" italic=\"false\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Label\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Local label\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsConstant\"/>\n      <itemData name=\"BaseN\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n    </itemDatas>\n  </highlighting>\n\n  <general>\n\t  <keywords casesensitive=\"0\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";\"/>\n    </comments>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/asm-m68k.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"Motorola 68k (VASM/Devpac)\" section=\"Assembler\" version=\"2\" kateversion=\"5.0\"  extensions=\"*.s;*.i;*.S;*.I\" author=\"Miro Kropacek (miro.kropacek@gmail.com)\" license=\"LGPL\">\n\n  <highlighting>\n    <list name=\"Data Registers\">\n      <item>d0</item>\n      <item>d1</item>\n      <item>d2</item>\n      <item>d3</item>\n      <item>d4</item>\n      <item>d5</item>\n      <item>d6</item>\n      <item>d7</item>\n    </list>\n\n    <list name=\"Address Registers\">\n      <item>a0</item>\n      <item>a1</item>\n      <item>a2</item>\n      <item>a3</item>\n      <item>a4</item>\n      <item>a5</item>\n      <item>a6</item>\n      <item>a7</item>\n      <item>sp</item>\n    </list>\n\n    <list name=\"Control Registers\">\n      <item>ccr</item>\n      <item>sr</item>\n      <item>pc</item>\n      <item>zpc</item>\n      <item>ssp</item>\n      <item>usp</item>\n      <item>msp</item>\n      <item>isp</item>\n      <item>dfc</item>\n      <item>cacr</item>\n      <item>caar</item>\n      <item>vbr</item>\n      <item>crp</item>\n      <item>srp</item>\n      <item>urp</item>\n      <item>tc</item>\n      <item>tt0</item>\n      <item>tt1</item>\n      <item>mmusr</item>\n      <item>itt0</item>\n      <item>itt1</item>\n      <item>dtt0</item>\n      <item>dtt1</item>\n      <item>buscr</item>\n      <item>pcr</item>\n      <item>ic</item>\n      <!-- <item>dc</item> -->\n      <item>bc</item>\n    </list>\n\n    <list name=\"FPU Registers\">\n      <item>fp0</item>\n      <item>fp1</item>\n      <item>fp2</item>\n      <item>fp3</item>\n      <item>fp4</item>\n      <item>fp5</item>\n      <item>fp6</item>\n      <item>fp7</item>\n      <item>fpcr></item>\n      <item>fpsr</item>\n      <item>fpiar</item>\n    </list>\n\n    <list name=\"Instructions (CPU)\">\n      <item>abcd</item>\n      <item>adda</item>\n      <item>addi</item>\n      <item>add</item>\n      <item>addq</item>\n      <item>addx</item>\n      <item>andi</item>\n      <item>and</item>\n      <item>asl</item>\n      <item>asr</item>\n      <item>bcc</item>\n      <item>bchg</item>\n      <item>bclr</item>\n      <item>bcs</item>\n      <item>beq</item>\n      <item>bfchg</item>\n      <item>bfclr</item>\n      <item>bfexts</item>\n      <item>bfextu</item>\n      <item>bfffo</item>\n      <item>bfins</item>\n      <item>bfset</item>\n      <item>bftst</item>\n      <item>bge</item>\n      <item>bgt</item>\n      <item>bhi</item>\n      <item>bhs</item>\n      <item>bkpt</item>\n      <item>ble</item>\n      <item>blo</item>\n      <item>bls</item>\n      <item>blt</item>\n      <item>bmi</item>\n      <item>bne</item>\n      <item>bpl</item>\n      <item>bra</item>\n      <item>bset</item>\n      <item>bsr</item>\n      <item>btst</item>\n      <item>bvc</item>\n      <item>bvs</item>\n      <item>callm</item>\n      <item>cas2</item>\n      <item>cas</item>\n      <item>chk2</item>\n      <item>chk</item>\n      <item>cinva</item>\n      <item>cinvl</item>\n      <item>cinvp</item>\n      <item>clr</item>\n      <item>cmp2</item>\n      <item>cmpa</item>\n      <item>cmpi</item>\n      <item>cmp</item>\n      <item>cmpm</item>\n      <item>cpusha</item>\n      <item>cpushl</item>\n      <item>cpushp</item>\n      <item>dbcc</item>\n      <item>dbcs</item>\n      <item>dbeq</item>\n      <item>dbf</item>\n      <item>dbge</item>\n      <item>dbgt</item>\n      <item>dbhi</item>\n      <item>dbhs</item>\n      <item>dble</item>\n      <item>dblo</item>\n      <item>dbls</item>\n      <item>dblt</item>\n      <item>dbmi</item>\n      <item>dbne</item>\n      <item>dbpl</item>\n      <item>dbra</item>\n      <item>dbt</item>\n      <item>dbvc</item>\n      <item>dbvs</item>\n      <item>divs</item>\n      <item>divsl</item>\n      <item>divu</item>\n      <item>divul</item>\n      <item>eori</item>\n      <item>eor</item>\n      <item>exg</item>\n      <item>extb</item>\n      <item>ext</item>\n      <item>illegal</item>\n      <item>jmp</item>\n      <item>jsr</item>\n      <item>lea</item>\n      <item>link</item>\n      <item>lpstop</item>\n      <item>lsl</item>\n      <item>lsr</item>\n      <item>move16</item>\n      <item>movea</item>\n      <item>movec</item>\n      <item>move</item>\n      <item>movem</item>\n      <item>movep</item>\n      <item>moveq</item>\n      <item>moves</item>\n      <item>muls</item>\n      <item>mulu</item>\n      <item>nbcd</item>\n      <item>neg</item>\n      <item>negx</item>\n      <item>nop</item>\n      <item>not</item>\n      <item>ori</item>\n      <item>or</item>\n      <item>pack</item>\n      <item>pea</item>\n      <item>pflusha</item>\n      <item>pflushan</item>\n      <item>pflush</item>\n      <item>pflushn</item>\n      <item>ploadr</item>\n      <item>ploadw</item>\n      <item>plpa</item>\n      <item>pmovefd</item>\n      <item>pmove</item>\n      <item>ptestr</item>\n      <item>ptestw</item>\n      <item>reset</item>\n      <item>rol</item>\n      <item>ror</item>\n      <item>roxl</item>\n      <item>roxr</item>\n      <item>rtd</item>\n      <item>rte</item>\n      <item>rtm</item>\n      <item>rtr</item>\n      <item>rts</item>\n      <item>sbcd</item>\n      <item>scc</item>\n      <item>scs</item>\n      <item>seq</item>\n      <item>sf</item>\n      <item>sge</item>\n      <item>sgt</item>\n      <item>shi</item>\n      <item>shs</item>\n      <item>sle</item>\n      <item>slo</item>\n      <item>sls</item>\n      <item>slt</item>\n      <item>smi</item>\n      <item>sne</item>\n      <item>spl</item>\n      <item>st</item>\n      <item>stop</item>\n      <item>suba</item>\n      <item>subi</item>\n      <item>sub</item>\n      <item>subq</item>\n      <item>subx</item>\n      <item>svc</item>\n      <item>svs</item>\n      <item>swap</item>\n      <item>tas</item>\n      <item>trapcc</item>\n      <item>trapcs</item>\n      <item>trapeq</item>\n      <item>trapf</item>\n      <item>trapge</item>\n      <item>trapgt</item>\n      <item>traphi</item>\n      <item>traphs</item>\n      <item>trap</item>\n      <item>traple</item>\n      <item>traplo</item>\n      <item>trapls</item>\n      <item>traplt</item>\n      <item>trapmi</item>\n      <item>trapne</item>\n      <item>trappl</item>\n      <item>trapt</item>\n      <item>trapvc</item>\n      <item>trapvc</item>\n      <item>trapv</item>\n      <item>tst</item>\n      <item>unlk</item>\n      <item>unpk</item>\n    </list>\n\n    <list name=\"Instructions (FPU)\">\n      <item>fabs</item>\n      <item>facos</item>\n      <item>fadd</item>\n      <item>fasin</item>\n      <item>fatanh</item>\n      <item>fatan</item>\n      <item>fbeq</item>\n      <item>fbf</item>\n      <item>fbge</item>\n      <item>fbgle</item>\n      <item>fbgl</item>\n      <item>fbgt</item>\n      <item>fble</item>\n      <item>fblt</item>\n      <item>fbne</item>\n      <item>fbnge</item>\n      <item>fbngle</item>\n      <item>fbngl</item>\n      <item>fbngt</item>\n      <item>fbnle</item>\n      <item>fbnlt</item>\n      <item>fboge</item>\n      <item>fbogl</item>\n      <item>fbogt</item>\n      <item>fbole</item>\n      <item>fbolt</item>\n      <item>fbor</item>\n      <item>fbseq</item>\n      <item>fbsf</item>\n      <item>fbsne</item>\n      <item>fbst</item>\n      <item>fbt</item>\n      <item>fbueq</item>\n      <item>fbuge</item>\n      <item>fbugt</item>\n      <item>fbule</item>\n      <item>fbult</item>\n      <item>fbun</item>\n      <item>fcmp</item>\n      <item>fcosh</item>\n      <item>fcos</item>\n      <item>fdabs</item>\n      <item>fdadd</item>\n      <item>fdbeq</item>\n      <item>fdbf</item>\n      <item>fdbge</item>\n      <item>fdbgle</item>\n      <item>fdbgl</item>\n      <item>fdbgt</item>\n      <item>fdble</item>\n      <item>fdblt</item>\n      <item>fdbne</item>\n      <item>fdbnge</item>\n      <item>fdbngle</item>\n      <item>fdbngl</item>\n      <item>fdbngt</item>\n      <item>fdbnle</item>\n      <item>fdbnlt</item>\n      <item>fdboge</item>\n      <item>fdbogl</item>\n      <item>fdbogt</item>\n      <item>fdbole</item>\n      <item>fdbolt</item>\n      <item>fdbor</item>\n      <item>fdbseq</item>\n      <item>fdbsf</item>\n      <item>fdbsne</item>\n      <item>fdbst</item>\n      <item>fdbt</item>\n      <item>fdbueq</item>\n      <item>fdbuge</item>\n      <item>fdbugt</item>\n      <item>fdbule</item>\n      <item>fdbult</item>\n      <item>fdbun</item>\n      <item>fddiv</item>\n      <item>fdiv</item>\n      <item>fdmove</item>\n      <item>fdmul</item>\n      <item>fdneg</item>\n      <item>fdsqrt</item>\n      <item>fdsub</item>\n      <item>fetox</item>\n      <item>fetoxm1</item>\n      <item>fgetexp</item>\n      <item>fgetman</item>\n      <item>fint</item>\n      <item>fintrz</item>\n      <item>flog10</item>\n      <item>flog2</item>\n      <item>flogn</item>\n      <item>flognp1</item>\n      <item>fmod</item>\n      <item>fmovecr</item>\n      <item>fmove</item>\n      <item>fmovem</item>\n      <item>fmul</item>\n      <item>fneg</item>\n      <item>fnop</item>\n      <item>frem</item>\n      <item>frestore</item>\n      <item>fsabs</item>\n      <item>fsadd</item>\n      <item>fsave</item>\n      <item>fscale</item>\n      <item>fsdiv</item>\n      <item>fseq</item>\n      <item>fsf</item>\n      <item>fsge</item>\n      <item>fsgldiv</item>\n      <item>fsgle</item>\n      <item>fsgl</item>\n      <item>fsglmul</item>\n      <item>fsgt</item>\n      <item>fsincos</item>\n      <item>fsinh</item>\n      <item>fsin</item>\n      <item>fsle</item>\n      <item>fslt</item>\n      <item>fsmove</item>\n      <item>fsmul</item>\n      <item>fsneg</item>\n      <item>fsne</item>\n      <item>fsnge</item>\n      <item>fsngle</item>\n      <item>fsngl</item>\n      <item>fsngt</item>\n      <item>fsnle</item>\n      <item>fsnlt</item>\n      <item>fsoge</item>\n      <item>fsogl</item>\n      <item>fsogt</item>\n      <item>fsole</item>\n      <item>fsolt</item>\n      <item>fsor</item>\n      <item>fsqrt</item>\n      <item>fsseq</item>\n      <item>fssf</item>\n      <item>fssne</item>\n      <item>fssqrt</item>\n      <item>fsst</item>\n      <item>fssub</item>\n      <item>fst</item>\n      <item>fsub</item>\n      <item>fsueq</item>\n      <item>fsuge</item>\n      <item>fsugt</item>\n      <item>fsule</item>\n      <item>fsult</item>\n      <item>fsun</item>\n      <item>ftanh</item>\n      <item>ftan</item>\n      <item>ftentox</item>\n      <item>ftrapeq</item>\n      <item>ftrapf</item>\n      <item>ftrapge</item>\n      <item>ftrapgle</item>\n      <item>ftrapgl</item>\n      <item>ftrapgt</item>\n      <item>ftraple</item>\n      <item>ftraplt</item>\n      <item>ftrapne</item>\n      <item>ftrapnge</item>\n      <item>ftrapngle</item>\n      <item>ftrapngl</item>\n      <item>ftrapngt</item>\n      <item>ftrapnle</item>\n      <item>ftrapnlt</item>\n      <item>ftrapoge</item>\n      <item>ftrapogl</item>\n      <item>ftrapogt</item>\n      <item>ftrapole</item>\n      <item>ftrapolt</item>\n      <item>ftrapor</item>\n      <item>ftrapseq</item>\n      <item>ftrapsf</item>\n      <item>ftrapsne</item>\n      <item>ftrapst</item>\n      <item>ftrapt</item>\n      <item>ftrapueq</item>\n      <item>ftrapuge</item>\n      <item>ftrapugt</item>\n      <item>ftrapule</item>\n      <item>ftrapult</item>\n      <item>ftrapun</item>\n      <item>ftst</item>\n      <item>ftwotox</item>\n    </list>\n\n    <list name=\"Directives\">\n      <item>align</item>\n      <item>blk</item>\n      <item>bss</item>\n      <item>clrfo</item>\n      <item>clrso</item>\n      <item>cnop</item>\n      <item>code</item>\n      <item>cseg</item>\n      <item>data</item>\n      <item>dc</item>\n      <item>dcb</item>\n      <item>ds</item>\n      <item>dseg</item>\n      <item>else</item>\n      <item>end</item>\n      <item>endc</item>\n      <item>endif</item>\n      <item>endm</item>\n      <item>endr</item>\n      <item>equ</item>\n      <item>even</item>\n      <item>fo</item>\n      <item>idnt</item>\n      <item>if</item>\n      <item>ifeq</item>\n      <item>ifne</item>\n      <item>ifgt</item>\n      <item>ifge</item>\n      <item>iflt</item>\n      <item>ifle</item>\n      <item>ifd</item>\n      <item>ifnd</item>\n      <item>ifc</item>\n      <item>ifnc</item>\n      <item>incbin</item>\n      <item>incdir</item>\n      <item>include</item>\n      <item>macro</item>\n      <item>org</item>\n      <item>public</item>\n      <item>rept</item>\n      <item>rs</item>\n      <item>rsreset</item>\n      <item>rsset</item>\n      <item>section</item>\n      <item>set</item>\n      <item>setfo</item>\n      <item>setso</item>\n      <item>so</item>\n      <item>text</item>\n      <item>ttl</item>\n      <item>xdef</item>\n      <item>xref</item>\n      <item>sdreg</item>\n      <item>cpu32</item>\n      <item>far</item>\n      <item>fpu</item>\n      <item>machine</item>\n      <item>mc68000</item>\n      <item>mc68010</item>\n      <item>mc68020</item>\n      <item>mc68030</item>\n      <item>mc68040</item>\n      <item>mc68060</item>\n      <item>mcf5200</item>\n      <item>mcf5206</item>\n      <item>mcf5307</item>\n      <item>mcf5407</item>\n      <item>near</item>\n      <item>opt</item>\n      <item>equr</item>\n      <item>equrl</item>\n      <item>fequr</item>\n      <item>fequrl</item>\n      <item>freg</item>\n      <item>reg</item>\n    </list>\n\n    <contexts>\n      <!-- name = name of context, attribute = name of item data -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n\t<keyword attribute=\"Data Registers\" context=\"#stay\" String=\"Data Registers\"/>\n\t<keyword attribute=\"Address Registers\" context=\"#stay\" String=\"Address Registers\"/>\n\t<keyword attribute=\"Control Registers\" context=\"#stay\" String=\"Control Registers\"/>\n\t<keyword attribute=\"FPU Registers\" context=\"#stay\" String=\"FPU Registers\"/>\n\t<keyword attribute=\"Instructions (CPU)\" context=\"#stay\" String=\"Instructions (CPU)\"/>\n\t<keyword attribute=\"Instructions (FPU)\" context=\"#stay\" String=\"Instructions (FPU)\"/>\n\t<keyword attribute=\"Directives\" context=\"#stay\" String=\"Directives\"/>\n\n\t<!-- precedes \".[bwlsdqpx]\" match -->\n\t<RegExpr attribute=\"Label\" context=\"#stay\" String=\"^[A-Za-z_][A-Za-z_.0-9]*:?\"/>\n\t<RegExpr attribute=\"Local label\" context=\"#stay\" String=\"^\\.[A-Za-z_][A-Za-z_.0-9]*:?\"/>\n\n\t<RegExpr attribute=\"Operand sizes (CPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.b[\\s,]\"/>\n\t<RegExpr attribute=\"Operand sizes (CPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.w[\\s,]\"/>\n\t<RegExpr attribute=\"Operand sizes (CPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.l[\\s,]\"/>\n\t<RegExpr attribute=\"Operand sizes (FPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.s[\\s,]\"/>\n\t<RegExpr attribute=\"Operand sizes (FPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.d[\\s,]\"/>\n\t<RegExpr attribute=\"Operand sizes (FPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.p[\\s,]\"/>\n\t<RegExpr attribute=\"Operand sizes (FPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.q[\\s,]\"/>\n\t<RegExpr attribute=\"Operand sizes (FPU)\" context=\"#stay\" insensitive=\"true\" String=\"\\.x[\\s,]\"/>\n\n\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"*\" firstNonSpace=\"true\"/>\n\t<DetectChar attribute=\"Constant\" context=\"Constant\" char=\"#\"/>\n\t<DetectChar attribute=\"BaseN\" context=\"Number16\" char=\"$\"/>\n\t<DetectChar attribute=\"BaseN\" context=\"Number2\" char=\"%\"/>\n\t<DetectChar attribute=\"BaseN\" context=\"Number8\" char=\"@\"/>\n\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t<Int attribute=\"Number\" context=\"#stay\"/>\n\t<RangeDetect attribute=\"Char\" context=\"#stay\" char=\"'\"  char1=\"'\"/>\n\t<AnyChar attribute=\"String\" context=\"String\" String=\"&quot;'\"/>\n      </context>\n\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n\t      <AnyChar attribute=\"String\" context=\"#pop\" String=\"&quot;'\"/>\n      </context>\n\n      <context name=\"Constant\" attribute=\"Constant\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"[0-9]+\"/>\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"\\$[A-Fa-f0-9]+\"/>\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"@[0-7]+\"/>\n\t      <RegExpr attribute=\"Constant\" context=\"Operators\" String=\"%[01]+\"/>\n\t      <RegExpr attribute=\"Label\" context=\"Operators\" String=\"[A-Za-z_][A-Za-z_.0-9]*\"/>\n\t      <RegExpr attribute=\"Local label\" context=\"Operators\" String=\"\\.[A-Za-z_][A-Za-z_.0-9]*\"/>\n\t      <RangeDetect attribute=\"Char\" context=\"#pop\" char=\"'\"  char1=\"'\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop\"/>\n\t      <DetectSpaces attribute=\"Normal Text\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Operators\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t      <DetectChar attribute=\"Normal Text\" char=\"|\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"&amp;\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"^\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"*\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"+\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"-\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"/\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"~\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"!\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\"%\" context=\"#pop\"/>\n\t      <Detect2Chars attribute=\"Normal Text\" char=\"&lt;\" char1=\"&lt;\" context=\"#pop\"/>\n\t      <Detect2Chars attribute=\"Normal Text\" char=\"&gt;\" char1=\"&gt;\" context=\"#pop\"/>\n\t      <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop#pop\"/>\n\t      <DetectSpaces attribute=\"Normal Text\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Number16\" attribute=\"BaseN\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"BaseN\" context=\"#pop\" String=\"[A-Fa-f0-9]+\"/>\n      </context>\n\n      <context name=\"Number2\" attribute=\"BaseN\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"BaseN\" context=\"#pop\" String=\"[01]+\"/>\n      </context>\n\n      <context name=\"Number8\" attribute=\"BaseN\" lineEndContext=\"#pop\">\n\t      <RegExpr attribute=\"BaseN\" context=\"#pop\" String=\"[0-7]+\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <!-- keywords -->\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Data Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Address Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Control Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"FPU Registers\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Instructions (CPU)\" bold=\"true\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Instructions (FPU)\" bold=\"true\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Directives\" bold=\"true\" defStyleNum=\"dsBuiltIn\"/>\n      <!-- defined in contexts -->\n      <itemData name=\"Operand sizes (CPU)\" bold=\"true\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Operand sizes (FPU)\" bold=\"true\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" italic=\"false\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Label\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Local label\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsConstant\"/>\n      <itemData name=\"BaseN\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"0\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";\"/>\n      <comment name=\"singleLine\" start=\"*\"/>\n    </comments>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/asm6502.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Asm6502\" version=\"3\" kateversion=\"5.0\" section=\"Assembler\" extensions=\"*.asm\" mimetype=\"text/x-asm6502\">\n        <highlighting>\n\n                <contexts>\n                        <context name = \"Base\" attribute = \"Normal Text\" lineEndContext = \"#stay\">\n\n\n\t\t\t\t<RegExpr String= \"#define.*$\" attribute = \"Preprocessor\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"#include .*$\" attribute = \"Preprocessor\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \";.*$\" attribute = \"Comment\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.byte\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.byt\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.word\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.asc\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.dsb\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.fopt\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.text\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.data\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.bss\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.zero\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\.align\" attribute = \"Data Type\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \"\\$[A-Za-z0-9]*\" attribute = \"Hex\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String= \",x$\" attribute = \"Keyword\" context=\"#stay\"  insensitive=\"true\"/>\n\t\t\t\t<RegExpr String= \",y$\" attribute = \"Keyword\" context=\"#stay\"  insensitive=\"true\"/>\n\t\t\t\t<RegExpr String= \"#\" attribute = \"Keyword\" context=\"#stay\"  insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"TAX\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"ADC\" insensitive=\"true\"/>\n\t \t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"AND\" insensitive=\"true\"/>\n \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"ASL\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BCC\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BCS\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BEQ\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BIT\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BMI\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BNE\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BPL\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BRK\" insensitive=\"true\"/>\n \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BVC\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"BVS\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"CLC\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"CLD\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"CLI\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"CLV\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"CMP\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"CPX\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"CPY\" insensitive=\"true\"/>\n \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"DEC\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"DEX\" insensitive=\"true\"/>\n\t  \t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"DEY\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"EOR\" insensitive=\"true\"/>\n \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"INC\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"INX\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"INY\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"JMP\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"JSR\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"LDA\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"LDX\" insensitive=\"true\"/>\n \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"LDY\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"LSR\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"NOP\" insensitive=\"true\"/>\n     \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"ORA\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"PHA\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"PHP\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"PLA\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"PLP\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"ROL\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"ROR\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"RTI\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"RTS\" insensitive=\"true\"/>\n  \t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"SBC\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"SEC\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"SED\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"SEI\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"STA\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"STX\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"STY\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"TAY\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"TSX\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"TXA\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"TXS\" insensitive=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"TYA\" insensitive=\"true\"/>\n\n\t\t\t\t<RegExpr String= \"\\*=\" attribute = \"Decimal\" context=\"#stay\"/>\n\t\t\t\t<RangeDetect char = \"&quot;\" char1 = \"&quot;\" attribute = \"String\" context = \"#stay\"/>\n\t\t\t\t<AnyChar String = \"-+&lt;&gt;=;\" attribute = \"Operator\" context = \"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\n\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t</context>\n                </contexts>\n\n\t\t<itemDatas>\n                        <itemData name = \"Normal Text\" defStyleNum = \"dsNormal\"/>\n                        <itemData name = \"Keyword\" defStyleNum = \"dsKeyword\"/>\n\t\t\t<itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Hex\"  defStyleNum=\"dsBaseN\"/>\n                        <itemData name = \"String\" defStyleNum = \"dsString\"/>\n                        <itemData name = \"Comment\" defStyleNum = \"dsComment\"/>\n \t\t\t<itemData name=\"Preprocessor\"  defStyleNum=\"dsPreprocessor\"/>\n                        <itemData name = \"Operator\" defStyleNum = \"dsOperator\"/>\n                </itemDatas>\n        </highlighting>\n        <general>\n                <comments>\n                        <comment name=\"singleLine\" start=\";\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t\t</comments>\n                <keywords casesensitive=\"1\"/>\n        </general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/asn1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n        You'll find the \"Writing a Kate Highlighting XML File HOWTO\" at http://kate.kde.org/doc/hlhowto.php\n        This is a template for the XML format used for syntax highlight descriptions\n        for the Kate text editor (http://kate.kde.org), which is part of the KDE\n        desktop environment (http://www.kde.org).\n\n        Use it as the base for your own syntax files.\n\n        Look at language.dtd for some documentation of the allowed elements and their attributes.\n        There is also a description of how to validate your syntax file.\n\n        You'll find the \"Writing a Kate Highlighting XML File HOWTO\" at http://kate.kde.org/doc/hlhowto.php\n-->\n<language name=\"ASN.1\" section=\"Markup\" version=\"3\" kateversion=\"2.3\" extensions=\"*.asn;*.asn1\" mimetype=\"\" author=\"Philippe Rigault\" license=\"GPL\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>DEFINITIONS</item>\n      <item>BEGIN</item>\n      <item>END</item>\n      <item>EXPORTS</item>\n      <item>IMPORTS</item>\n      <item>FROM</item>\n      <item>APPLICATION</item>\n      <item>PRIVATE</item>\n      <item>UNIVERSAL</item>\n      <item>DEFAULT</item>\n      <item>OPTIONAL</item>\n      <item>FALSE</item>\n      <item>TRUE</item>\n    </list>\n    <list name=\"types\">\n      <item>BOOLEAN</item>\n      <item>INTEGER</item>\n      <item>OCTET</item>\n      <item>STRING</item>\n      <item>NULL</item>\n      <item>REAL</item>\n      <item>ENUMERATED</item>\n      <item>SEQUENCE</item>\n      <item>SET</item>\n      <item>CHOICE</item>\n      <item>OF</item>\n      <item>VisibleString</item>\n      <item>StringStore</item>\n    </list>\n    \n    <contexts>\n      <context name=\"Normal Text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"-\" char1=\"-\"/>      \n      </context>\n      \n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n      </context>\n    </contexts>\n    \n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n      <itemData name=\"Data Type\"   defStyleNum=\"dsDataType\"/>\n    </itemDatas>\n  </highlighting>\n</language>\n<!--\n// kate: space-indent on; indent-width 2; replace-tabs on;\n-->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/asp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE  language SYSTEM \"language.dtd\">\n<language name=\"ASP\" version=\"4\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.asp;\" mimetype=\"text/x-asp-src;text/x-asp-src\" author=\"Antonio Salazar (savedfastcool@gmail.com)\" license=\"LGPL\">\n    <highlighting>\n        <list name=\"control structures\">\n            <item>select</item>\n            <item>case</item>\n            <item>end select</item>\n\n            <item>if</item>\n            <item>then</item>\n            <item>else</item>\n            <item>elseif</item>\n            <item>end if</item>\n\n\n            <item>while</item>\n            <item>do</item>\n            <item>until</item>\n            <item>loop</item>\n            <item>wend</item>\n\n            <item>for</item>\n            <item>each</item>\n            <item>to</item>\n            <item>in</item>\n            <item>next</item>\n\n            <item>exit</item>\n            <item>continue</item>\n        </list>\n        <list name=\"keywords\">\n            <item>dim</item>\n            <item>redim</item>\n            <item>preserve</item>\n\n            <item>const</item>\n            <item>erase</item>\n            <item>nothing</item>\n            <item>set</item>\n\n            <item>new</item>\n            <item>me</item>\n\n\n            <item>function</item>\n            <item>sub</item>\n            <item>call</item>\n\n            <item>class</item>\n            <item>private</item>\n            <item>public</item>\n            <item>with</item>\n\n            <item>randomize</item>\n\n            <item>open</item>\n            <item>close</item>\n            <item>movenext</item>\n            <item>execute</item>\n            <item>eof</item>\n\n            <item>not</item>\n            <item>true</item>\n            <item>false</item>\n            <item>or</item>\n            <item>and</item>\n            <item>xor</item>\n        </list>\n        <list name=\"functions\">\n            <item>response</item>\n            <item>write</item>\n            <item>redirect</item>\n            <item>end</item>\n\n            <item>request</item>\n            <item>form</item>\n            <item>querystring</item>\n            <item>servervariables</item>\n            <item>cookies</item>\n\n            <item>session</item>\n\n            <item>server</item>\n            <item>createobject</item>\n\n            <item>abs</item>\n            <item>array</item>\n            <item>asc</item>\n            <item>atn</item>\n            <item>cbool</item>\n            <item>cbyte</item>\n            <item>ccur</item>\n            <item>cdate</item>\n            <item>cdbl</item>\n            <item>chr</item>\n            <item>cint</item>\n            <item>clng</item>\n            <item>cos</item>\n            <item>csng</item>\n            <item>cstr</item>\n            <item>date</item>\n            <item>dateadd</item>\n\n            <item>DateDiff</item>\n            <item>DatePart</item>\n            <item>DateSerial</item>\n            <item>DateValue</item>\n            <item>Date</item>\n            <item>Day</item>\n            <item>Exp</item>\n            <item>Filter</item>\n            <item>Fix</item>\n            <item>FormatCurrency</item>\n            <item>FormatDateTime</item>\n            <item>FormatNumber</item>\n            <item>FormatPercent</item>\n\n            <item>GetObject</item>\n            <item>Hex</item>\n            <item>Hour</item>\n            <item>InputBox</item>\n            <item>InStr</item>\n            <item>InStrRev</item>\n            <item>Int</item>\n            <item>IsArray</item>\n            <item>IsDate</item>\n            <item>IsEmpty</item>\n            <item>IsNull</item>\n            <item>IsNumeric</item>\n            <item>IsObject</item>\n            <item>Join</item>\n            <item>LBound</item>\n            <item>LCase</item>\n\n            <item>Left</item>\n            <item>Len</item>\n            <item>LoadPicture</item>\n            <item>Log</item>\n            <item>LTrim</item>\n            <item>Mid</item>\n            <item>Minute</item>\n            <item>Month</item>\n            <item>MonthName</item>\n            <item>MsgBox</item>\n            <item>Now</item>\n            <item>Oct</item>\n            <item>Replace</item>\n\n            <item>RGB</item>\n            <item>Right</item>\n            <item>Rnd</item>\n            <item>Round</item>\n            <item>RTrim</item>\n\n            <item>ScriptEngine</item>\n            <item>ScriptEngineBuildVersion</item>\n            <item>ScriptEngineMajorVersion</item>\n            <item>ScriptEngineMinorVersion</item>\n            <item>Second</item>\n            <item>Sgn</item>\n            <item>Sin</item>\n            <item>Space</item>\n            <item>Split</item>\n            <item>Sqr</item>\n            <item>StrComp</item>\n            <item>StrReverse</item>\n            <item>String</item>\n            <item>Tan</item>\n            <item>Time</item>\n            <item>Timer</item>\n            <item>TimeSerial</item>\n            <item>TimeValue</item>\n            <item>Trim</item>\n            <item>TypeName</item>\n            <item>UBound</item>\n            <item>UCase</item>\n            <item>VarType</item>\n            <item>Weekday</item>\n            <item>WeekdayName</item>\n            <item>Year</item>\n\n            <item>Add</item>\n            <item>AddFolders</item>\n            <item>BuildPath</item>\n            <item>Clear</item>\n            <item>Close</item>\n            <item>Copy</item>\n            <item>CopyFile</item>\n            <item>CopyFolder</item>\n            <item>CreateFolder</item>\n            <item>CreateTextFile</item>\n            <item>Delete</item>\n            <item>DeleteFile</item>\n            <item>DeleteFolder</item>\n            <item>DriveExists</item>\n            <item>Exists</item>\n            <item>FileExists</item>\n            <item>FolderExists</item>\n            <item>GetAbsolutePathName</item>\n            <item>GetBaseName</item>\n            <item>GetDrive</item>\n            <item>GetDriveName</item>\n            <item>GetExtensionName</item>\n            <item>GetFile</item>\n            <item>GetFileName</item>\n            <item>GetFolder</item>\n            <item>GetParentFolderName</item>\n\n            <item>GetSpecialFolder</item>\n            <item>GetTempName</item>\n            <item>Items</item>\n            <item>item</item>\n            <item>Keys</item>\n            <item>Move</item>\n            <item>MoveFile</item>\n            <item>MoveFolder</item>\n            <item>OpenAsTextStream</item>\n            <item>OpenTextFile</item>\n            <item>Raise</item>\n            <item>Read</item>\n            <item>ReadAll</item>\n            <item>ReadLine</item>\n            <item>Remove</item>\n            <item>RemoveAll</item>\n            <item>Skip</item>\n            <item>SkipLine</item>\n            <item>Write</item>\n            <item>WriteBlankLines</item>\n            <item>WriteLine</item>\n        </list>\n            <contexts>\n            <context name=\"nosource\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <RegExpr attribute=\"HTML Tag\" context=\"aspsource\" String=\"&lt;\\s*script\\s*language=&quot;VBScript&quot;[^&gt;]*&gt;\" insensitive=\"true\" />\n                <RegExpr attribute=\"HTML Tag\" context=\"scripts\" String=\"&lt;\\s*script(\\s|&gt;)\" insensitive=\"true\" />\n                <RegExpr attribute=\"HTML Tag\" context=\"htmltag\" String=\"&lt;\\s*\\/?\\s*[a-zA-Z_:][a-zA-Z0-9._:-]*\" />\n                <StringDetect attribute=\"HTML Comment\" context=\"htmlcomment\" String=\"&lt;!--\" />\n            </context>\n\n            <context name=\"aspsource\" attribute=\"ASP Text\" lineEndContext=\"#stay\">\n                <StringDetect attribute=\"Keyword\" context=\"#pop\" String=\"%&gt;\" />\n                <RegExpr attribute=\"HTML Tag\" context=\"#pop\" String=\"&lt;\\s*\\/\\s*script\\s*&gt;\" insensitive=\"true\" />\n                <DetectChar attribute=\"Comment\" context=\"asp_onelinecomment\" char=\"'\" />\n                <DetectChar attribute=\"String\" context=\"doublequotestring\" char=\"&quot;\" />\n                <DetectChar attribute=\"String\" context=\"singlequotestring\" char=\"&#39;\" />\n                <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"&amp;\" />\n                <RegExpr attribute=\"String\" context=\"#stay\" String=\"[0123456789]*\\.\\.\\.[0123456789]*\" />\n                <HlCOct attribute=\"Octal\" context=\"#stay\" />\n                <HlCHex attribute=\"Hex\" context=\"#stay\" />\n                <Float attribute=\"Float\" context=\"#stay\" />\n                <Int attribute=\"Decimal\" context=\"#stay\" />\n                <AnyChar attribute=\"Other\" context=\"#stay\" String=\";()}{:,[]\" />\n\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\belseif\\b\" insensitive=\"true\" beginRegion=\"iffi1\" endRegion=\"iffi1\"/>\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\belse\\b\" insensitive=\"true\" beginRegion=\"iffi1\" endRegion=\"iffi1\"/>\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bif\\b\" insensitive=\"true\" beginRegion=\"iffi1\"/>\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bend if\\b\" insensitive=\"true\" endRegion=\"iffi1\"/>\n\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bexit function\\b\" insensitive=\"true\" />\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bfunction\\b\" insensitive=\"true\" beginRegion=\"funendfun1\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend function\\b\" insensitive=\"true\" endRegion=\"funendfun1\"/>\n\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bexit sub\\b\" insensitive=\"true\" />\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bsub\\b\" insensitive=\"true\" beginRegion=\"subendsub1\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend sub\\b\" insensitive=\"true\" endRegion=\"subendsub1\"/>\n\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bclass\\b\" insensitive=\"true\" beginRegion=\"classendclass1\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend class\\b\" insensitive=\"true\" endRegion=\"classendclass1\"/>\n\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bexit do\\b\" insensitive=\"true\" />\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bdo(\\s+(while))?\\b\" insensitive=\"true\" beginRegion=\"doloop1\"/>\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bloop\\b\" insensitive=\"true\" endRegion=\"doloop1\"/>\n\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bexit while\\b\" insensitive=\"true\" />\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bwhile\\b\" insensitive=\"true\" beginRegion=\"whilewend1\"/>\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bwend\\b\" insensitive=\"true\" endRegion=\"whilewend1\"/>\n\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bexit for\\b\" insensitive=\"true\" />\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bfor\\b\" insensitive=\"true\" beginRegion=\"fornext1\"/>\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bnext\\b\" insensitive=\"true\" endRegion=\"fornext1\"/>\n\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bselect case\\b\" insensitive=\"true\" beginRegion=\"selcase1\"/>\n                <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"\\bend select\\b\" insensitive=\"true\" endRegion=\"selcase1\"/>\n\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n                <keyword attribute=\"Control Structures\" context=\"#stay\" String=\"control structures\" />\n                <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n            </context>\n            <context name=\"asp_onelinecomment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <StringDetect attribute=\"Keyword\" context=\"#pop#pop\" String=\"%&gt;\" />\n            </context>\n            <context name=\"doublequotestring\" attribute=\"String\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Escape Code\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\" />\n                <RegExpr attribute=\"Escape Code\" context=\"#stay\" String=\"\\\\[0-7]{1,3}\" />\n                <RegExpr attribute=\"Escape Code\" context=\"#stay\" String=\"\\\\x[0-9A-Fa-f]{1,2}\" />\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n            </context>\n            <context name=\"singlequotestring\" attribute=\"String\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Escape Code\" context=\"#stay\" char=\"'\" char1=\"'\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n            </context>\n            <context name=\"htmltag\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"HTML Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n                <DetectChar attribute=\"HTML Tag\" context=\"#pop\" char=\"&gt;\"/>\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <RegExpr attribute=\"Identifier\" context=\"identifiers\" String=\"\\s*=\\s*\"/>\n            </context>\n            <context name=\"htmlcomment\" attribute=\"HTML Comment\" lineEndContext=\"#stay\">\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <StringDetect attribute=\"HTML Comment\" context=\"#pop\" String=\"--&gt;\" />\n                <RegExpr attribute=\"Normal Text\" context=\"identifiers\" String=\"\\s*=\\s*\"/>\n            </context>\n            <context name=\"identifiers\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"String\" context=\"#pop\" String=\"\\s*#?[a-zA-Z0-9]*\" />\n                <DetectChar attribute=\"Types\" context=\"types1\" char=\"'\" />\n                <DetectChar attribute=\"Types\" context=\"types2\" char=\"&quot;\" />\n            </context>\n\n            <context name=\"types1\" attribute=\"Types\" lineEndContext=\"#stay\">\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"'\" />\n            </context>\n\n            <context name=\"types2\" attribute=\"Types\" lineEndContext=\"#stay\">\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\" />\n                <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"&quot;\" />\n            </context>\n\n            <context name=\"scripts\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Comment\" context=\"scripts_onelinecomment\" char=\"/\" char1=\"/\" />\n                <Detect2Chars attribute=\"Comment\" context=\"twolinecomment\" char=\"/\" char1=\"*\" />\n                <keyword attribute=\"Control Structures\" context=\"#stay\" String=\"control structures\" />\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n                <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n                <StringDetect attribute=\"Keyword\" context=\"aspsource\" String=\"&lt;%\"/>\n                <RegExpr attribute=\"HTML Tag\" context=\"#pop\" String=\"&lt;\\s*\\/\\s*script\\s*&gt;\" insensitive=\"true\" />\n\n                <DetectChar attribute=\"String\" context=\"doublequotestring\" char=\"&quot;\" />\n                <DetectChar attribute=\"String\" context=\"singlequotestring\" char=\"&#39;\" />\n                <HlCOct attribute=\"Octal\" context=\"#stay\" />\n                <HlCHex attribute=\"Hex\" context=\"#stay\" />\n                <Float attribute=\"Float\" context=\"#stay\" />\n                <Int attribute=\"Decimal\" context=\"#stay\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n                <AnyChar attribute=\"Other\" context=\"#stay\" String=\";()}{:,[]\" />\n            </context>\n            <context name=\"scripts_onelinecomment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <RegExpr attribute=\"HTML Tag\" context=\"#pop#pop\" String=\"&lt;\\s*\\/\\s*script\\s*&gt;\" insensitive=\"true\" />\n            </context>\n            <context name=\"twolinecomment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\" />\n            </context>\n\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n            <itemData name=\"ASP Text\" defStyleNum=\"dsNormal\" />\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" />\n            <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" />\n            <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" />\n            <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" />\n            <itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n            <itemData name=\"String\" defStyleNum=\"dsString\" />\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Control Structures\" defStyleNum=\"dsControlFlow\" bold=\"0\" />\n            <itemData name=\"Escape Code\" defStyleNum=\"dsKeyword\" color=\"#0F0F8F\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n            <itemData name=\"Other\" defStyleNum=\"dsOthers\" />\n\n            <itemData name=\"HTML Tag\" defStyleNum=\"dsKeyword\" color=\"#0F0000\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n            <itemData name=\"HTML Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Identifier\" defStyleNum=\"dsOthers\" />\n            <itemData name=\"Types\" defStyleNum=\"dsDataType\" />\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"'\" />\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n        </comments>\n        <keywords casesensitive=\"0\" weakDeliminator=\"\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/awk.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"AWK\" version=\"3\" kateversion=\"5.0\" section=\"Scripts\"\n  extensions=\"*.awk\" mimetype=\"text/x-awk\" indenter=\"cstyle\"\n  license=\"LGPL\">\n<!-- patched by igli#kate@irc:chat.freenode.net -->\n  <highlighting>\n    <list name=\"controlflow\">\n      <item>if</item>\n      <item>else</item>\n      <item>while</item>\n      <item>do</item>\n      <item>for</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>case</item>\n      <item>default</item>\n      <item>exit</item>\n    </list>\n    <list name=\"keywords\">\n      <item>in</item>\n      <item>delete</item>\n      <item>print</item>\n      <item>printf</item>\n      <item>getline</item>\n      <item>function</item>\n      <item>next</item>\n      <item>nextfile</item>\n      <item>@include</item>\n      <item>@load</item>\n    </list>\n    <list name=\"builtins\">\n      <item>ARGC</item>\n      <item>ARGIND</item>\n      <item>ARGV</item>\n      <item>BINMODE</item>\n      <item>CONVFMT</item>\n      <item>ENVIRON</item>\n      <item>ERRNO</item>\n      <item>FIELDWIDTHS</item>\n      <item>FILENAME</item>\n      <item>FNR</item>\n      <item>FPAT</item>\n      <item>FS</item>\n      <item>FUNCTAB</item>\n      <item>IGNORECASE</item>\n      <item>LINT</item>\n      <item>NF</item>\n      <item>NR</item>\n      <item>OFMT</item>\n      <item>OFS</item>\n      <item>ORS</item>\n      <item>PREC</item>\n      <item>PROCINFO</item>\n      <item>ROUNDMODE</item>\n      <item>RS</item>\n      <item>RT</item>\n      <item>RSTART</item>\n      <item>RLENGTH</item>\n      <item>SUBSEP</item>\n      <item>SYMTAB</item>\n      <item>TEXTDOMAIN</item>\n    </list>\n    <list name=\"functions\">\n      <!-- I/O -->\n      <item>close</item>\n      <item>fflush</item>\n      <item>system</item>\n      <!-- Arithmetic -->\n      <item>atan2</item>\n      <item>cos</item>\n      <item>exp</item>\n      <item>int</item>\n      <item>log</item>\n      <item>rand</item>\n      <item>sin</item>\n      <item>sqrt</item>\n      <item>srand</item>\n      <!-- String -->\n      <item>asort</item>\n      <item>asorti</item>\n      <item>gensub</item>\n      <item>gsub</item>\n      <item>index</item>\n      <item>length</item>\n      <item>match</item>\n      <item>patsplit</item>\n      <item>split</item>\n      <item>sprintf</item>\n      <item>strtonum</item>\n      <item>sub</item>\n      <item>substr</item>\n      <item>tolower</item>\n      <item>toupper</item>\n      <!-- Time -->\n      <item>mktime</item>\n      <item>strftime</item>\n      <item>systime</item>\n      <!-- Bit Manipulationse -->\n      <item>and</item>\n      <item>compl</item>\n      <item>lshift</item>\n      <item>or</item>\n      <item>rshift</item>\n      <item>xor</item>\n      <!-- Type -->\n      <item>isarray</item>\n      <item>typeof</item>\n      <!-- Internationalization -->\n      <item>bindtextdomain</item>\n      <item>dcgettext</item>\n      <item>dcngettext</item>\n    </list>\n    <list name=\"special\">\n      <item>BEGIN</item>\n      <item>BEGINFILE</item>\n      <item>END</item>\n      <item>ENDFILE</item>\n    </list>\n    <list name=\"charclass\">\n      <item>alpha</item>\n      <item>alnum</item>\n      <item>blank</item>\n      <item>cntrl</item>\n      <item>digit</item>\n      <item>graph</item>\n      <item>lower</item>\n      <item>print</item>\n      <item>punct</item>\n      <item>space</item>\n      <item>upper</item>\n      <item>xdigit</item>\n    </list>\n\n<contexts>\n<!-- START CONTEXTS -->\n<context name=\"Pattern\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t<DetectSpaces />\n\t<DetectChar char=\"{\" attribute=\"Symbol\" context=\"Block\" beginRegion=\"block\" />\n\t<DetectChar char=\"}\" attribute=\"Error\" context=\"#stay\"/>\n\t<DetectChar char=\"/\" attribute=\"Regex Op\" firstNonSpace=\"true\" context=\"Regex\"/>\n\t<IncludeRules context=\"base\" />\n\t<keyword String=\"special\" attribute=\"Special\" context=\"#stay\"/>\n</context>\n\n<context name=\"Block\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t<DetectSpaces />\n\t<DetectChar char=\"}\" attribute=\"Symbol\" context=\"#pop\" endRegion=\"block\" />\n\t<DetectChar char=\"{\" attribute=\"Symbol\" context=\"Block\" beginRegion=\"block\" />\n\t<IncludeRules context=\"base\" />\n\t<keyword String=\"special\" attribute=\"Error\" context=\"#stay\"/>\n</context>\n\n<context name=\"base\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t<DetectChar char=\")\" attribute=\"Symbol\" context=\"#stay\"/>\n\t<DetectChar char=\"(\" attribute=\"Symbol\" context=\"Match\"/>\n\t<AnyChar String=\"=~\" attribute=\"Operator\" context=\"Match\"/>\n\t<DetectChar char=\",\" attribute=\"Separator Symbol\" context=\"ArgSep\"/>\n\t<DetectChar char=\"&quot;\" attribute=\"String\" context=\"String\"/>\n\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\"/>\n\t<AnyChar String=\"@!%&amp;*+-/:&lt;&gt;?^|\" attribute=\"Operator\" context=\"#stay\"/>\n\t<keyword String=\"controlflow\" attribute=\"ControlFlow\" context=\"#stay\"/>\n\t<keyword String=\"keywords\" attribute=\"Keyword\" context=\"#stay\"/>\n\t<keyword String=\"builtins\" attribute=\"Builtin\" context=\"#stay\"/>\n\t<keyword String=\"functions\" attribute=\"Function\" context=\"#stay\"/>\n\t<Float attribute=\"Float\"   context=\"#stay\"/>\n\t<Int   attribute=\"Decimal\" context=\"#stay\"/>\n\t<RegExpr String=\"\\$[A-Za-z0-9_]+\" attribute=\"Field\" context=\"#stay\"/>\n\t<DetectChar char=\";\" attribute=\"Separator Symbol\" context=\"#stay\"/>\n</context>\n\n<context name=\"ArgSep\" attribute=\"Normal\" lineEndContext=\"#stay\"\n   fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<IncludeRules context=\"Match\" />\n</context>\n\n<context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n\t<DetectChar char=\"&quot;\" attribute=\"String\" context=\"#pop\"/>\n\t<DetectChar char=\"\\\" context=\"Escape\" attribute=\"Escape\"/>\n</context>\n\n<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t<IncludeRules context=\"##Alerts\"/>\n</context>\n\n<context name=\"Escape\" attribute=\"Error\" lineEndContext=\"#pop\">\n\t<RegExpr String=\"[\\\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}\" attribute=\"Escape\" context=\"#pop\"/>\n\t<RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n</context>\n\n<context name=\"Match\" attribute=\"Normal\" lineEndContext=\"#pop\"\n   fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces />\n\t<DetectChar char=\"/\" attribute=\"Regex Op\" context=\"#pop!Regex\"/>\n</context>\n\n<context name=\"Regex\" attribute=\"Regex\" lineEndContext=\"#pop\">\n\t<IncludeRules context=\"regex\"/>\n\t<DetectChar char=\"/\" context=\"#pop\" attribute=\"Regex Op\"/>\n</context>\n\n<context name=\"regex\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t<Detect2Chars char=\"[\" char1=\"^\" context=\"RegexChar\" attribute=\"Regex Op\"/>\n\t<DetectChar char=\"[\" context=\"RegexChar\" attribute=\"Regex Op\"/>\n\t<AnyChar String=\"^$.+?*()|\" context=\"#stay\" attribute=\"Regex Op\"/>\n\t<DetectChar char=\"\\\" context=\"Regex Escape\" attribute=\"Regex Op\"/>\n</context>\n\n<context name=\"Regex Escape\" attribute=\"Normal\" lineEndContext=\"#pop\">\n\t<RegExpr String=\"[&lt;&gt;sSwW`'[\\]{}^$.+?*()|/\\\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}\" attribute=\"Escape\" context=\"#pop\"/>\n\t<RegExpr String=\".\" attribute=\"Regex\" context=\"#pop\"/>\n</context>\n\n<context name=\"RegexChar\" attribute=\"Regex\" lineEndContext=\"#pop\"\n   fallthrough=\"true\" fallthroughContext=\"InChar\">\n\t<AnyChar String=\"-]\" context=\"InChar\" attribute=\"Regex\"/>\n</context>\n\n<context name=\"InChar\" attribute=\"Regex\" lineEndContext=\"#pop#pop\">\n\t<Detect2Chars char=\"-\" char1=\"]\" context=\"InCharEnd\" attribute=\"Regex\" lookAhead=\"true\"/>\n\t<DetectChar char=\"-\" context=\"#stay\" attribute=\"Regex Op\"/>\n\t<DetectChar char=\"\\\" context=\"Regex Escape\" attribute=\"Regex Op\"/>\n\t<DetectChar char=\"[\" context=\"CharClassSelect\" attribute=\"Regex\" lookAhead=\"true\"/>\n\t<DetectChar char=\"]\" context=\"#pop#pop\" attribute=\"Regex Op\"/>\n</context>\n\n<context name=\"InCharEnd\" attribute=\"Regex Op\" lineEndContext=\"#stay\">\n\t<DetectChar char=\"-\" context=\"#stay\" attribute=\"Regex\"/>\n\t<DetectChar char=\"]\" context=\"#pop#pop#pop\" attribute=\"Regex Op\"/>\n</context>\n\n<context name=\"CharClassSelect\" attribute=\"Custom\" lineEndContext=\"#pop#pop#pop#pop\">\n\t<Detect2Chars char=\"[\" char1=\":\" context=\"#pop!CharClass\" attribute=\"CharClass\"/>\n\t<Detect2Chars char=\"[\" char1=\".\" context=\"#pop!CollatingSymbols\" attribute=\"CharClass\"/>\n\t<Detect2Chars char=\"[\" char1=\"=\" context=\"#pop!EquivalenceClass\" attribute=\"CharClass\"/>\n\t<DetectChar char=\"[\" context=\"#pop\" attribute=\"Regex\"/>\n</context>\n\n<context name=\"CharClass\" attribute=\"Custom\" lineEndContext=\"#pop#pop#pop#pop\">\n\t<keyword String=\"charclass\" attribute=\"CharClass\" context=\"#stay\"/>\n\t<Detect2Chars char=\":\" char1=\"]\" attribute=\"CharClass\" context=\"#pop\"/>\n\t<DetectChar char=\"]\" attribute=\"Error\" context=\"#pop\"/>\n</context>\n\n<context name=\"CollatingSymbols\" attribute=\"Custom\" lineEndContext=\"#pop#pop#pop#pop\">\n\t<Detect2Chars char=\".\" char1=\"]\" attribute=\"CharClass\" context=\"#pop\"/>\n\t<DetectChar char=\"]\" attribute=\"Error\" context=\"#pop\"/>\n</context>\n\n<context name=\"EquivalenceClass\" attribute=\"Custom\" lineEndContext=\"#pop#pop#pop#pop\">\n\t<Detect2Chars char=\"=\" char1=\"]\" attribute=\"CharClass\" context=\"#pop\"/>\n\t<DetectChar char=\"]\" attribute=\"Error\" context=\"#pop\"/>\n</context>\n\n<!-- END OF CONTEXTS -->\n</contexts>\n    <itemDatas>\n      <itemData name=\"Normal\"   defStyleNum=\"dsNormal\"/>\n      <itemData name=\"ControlFlow\" defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Builtin\"  defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"    defStyleNum=\"dsFloat\"/>\n      <itemData name=\"String\"   defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Escape\"   defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Field\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Error\"    defStyleNum=\"dsError\"/>\n      <itemData name=\"Special\"  defStyleNum=\"dsControlFlow\" bold=\"0\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\"/>\n      <itemData name=\"Symbol\"   defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Separator Symbol\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Regex\"    defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n      <itemData name=\"Regex Op\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"CharClass\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n      <itemData name=\"Custom\"   defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"@\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/bash.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n        <!ENTITY funcname \"[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*\">\n        <!ENTITY varname  \"[A-Za-z_][A-Za-z0-9_]*\">\n        <!ENTITY word     \"[^|&amp;;()&lt;&gt;\\s]+\">    <!-- see man bash -->\n        <!ENTITY eos      \"(?=($|\\s))\">                 <!-- eol or space following -->\n        <!ENTITY noword   \"(?![\\w$+-])\">                <!-- no word, $, + or - following -->\n        <!ENTITY pathpart \"([\\w_@.&#37;*?+-]|\\\\ )\">     <!-- valid character in a file name -->\n]>\n<language name=\"Bash\" version=\"9\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.sh;*.bash;*.ebuild;*.eclass;*.nix;.bashrc;.bash_profile;.bash_login;.profile;PKGBUILD;APKBUILD\" mimetype=\"application/x-shellscript\" casesensitive=\"1\" author=\"Wilbert Berendsen (wilbert@kde.nl)\" license=\"LGPL\">\n\n<!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl)\n    Changes by Matthew Woehlke (mw_triad@users.sourceforge.net)\n    Changes by Sebastian Pipping (webmaster@hartwork.org)\n    Changes by Luiz Angelo Daros de Luca (luizluca@gmail.com)\n    Released under the LGPL, part of kdelibs/kate -->\n\n  <highlighting>\n    <list name=\"keywords\">\n      <item>else</item>\n      <item>for</item>\n      <item>function</item>\n      <item>in</item>\n      <item>select</item>\n      <item>until</item>\n      <item>while</item>\n      <item>elif</item>\n      <item>then</item>\n      <item>set</item>\n    </list>\n\n    <list name=\"builtins\">\n      <item>:</item>\n      <item>source</item>\n      <item>alias</item>\n      <item>bg</item>\n      <item>bind</item>\n      <item>break</item>\n      <item>builtin</item>\n      <item>cd</item>\n      <item>caller</item>\n      <item>command</item>\n      <item>compgen</item>\n      <item>complete</item>\n      <item>continue</item>\n      <item>dirs</item>\n      <item>disown</item>\n      <item>echo</item>\n      <item>enable</item>\n      <item>eval</item>\n      <item>exec</item>\n      <item>exit</item>\n      <item>fc</item>\n      <item>fg</item>\n      <item>getopts</item>\n      <item>hash</item>\n      <item>help</item>\n      <item>history</item>\n      <item>jobs</item>\n      <item>kill</item>\n      <item>let</item>\n      <item>logout</item>\n      <item>popd</item>\n      <item>printf</item>\n      <item>pushd</item>\n      <item>pwd</item>\n      <item>return</item>\n      <item>set</item>\n      <item>shift</item>\n      <item>shopt</item>\n      <item>suspend</item>\n      <item>test</item>\n      <item>time</item>\n      <item>times</item>\n      <item>trap</item>\n      <item>type</item>\n      <item>ulimit</item>\n      <item>umask</item>\n      <item>unalias</item>\n      <item>wait</item>\n    </list>\n\n    <list name=\"builtins_var\">\n      <item>export</item>\n      <item>unset</item>\n      <item>declare</item>\n      <item>typeset</item>\n      <item>local</item>\n      <item>read</item>\n      <item>readonly</item>\n    </list>\n\n    <list name=\"unixcommands\">\n      <!-- /bin -->\n      <item>arch</item>\n      <item>awk</item>\n      <item>bash</item>\n      <item>bunzip2</item>\n      <item>bzcat</item>\n      <item>bzcmp</item>\n      <item>bzdiff</item>\n      <item>bzegrep</item>\n      <item>bzfgrep</item>\n      <item>bzgrep</item>\n      <item>bzip2</item>\n      <item>bzip2recover</item>\n      <item>bzless</item>\n      <item>bzmore</item>\n      <item>cat</item>\n      <item>chattr</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chown</item>\n      <item>chvt</item>\n      <item>cp</item>\n      <item>date</item>\n      <item>dd</item>\n      <item>deallocvt</item>\n      <item>df</item>\n      <item>dir</item>\n      <item>dircolors</item>\n      <item>dmesg</item>\n      <item>dnsdomainname</item>\n      <item>domainname</item>\n      <item>du</item>\n      <item>dumpkeys</item>\n      <item>echo</item>\n      <item>ed</item>\n      <item>egrep</item>\n      <item>false</item>\n      <item>fgconsole</item>\n      <item>fgrep</item>\n      <item>fuser</item>\n      <item>gawk</item>\n      <item>getkeycodes</item>\n      <item>gocr</item>\n      <item>grep</item>\n      <item>groff</item>\n      <item>groups</item>\n      <item>gunzip</item>\n      <item>gzexe</item>\n      <item>gzip</item>\n      <item>hostname</item>\n      <item>igawk</item>\n      <item>install</item>\n      <item>kbd_mode</item>\n      <item>kbdrate</item>\n      <item>killall</item>\n      <item>last</item>\n      <item>lastb</item>\n      <item>link</item>\n      <item>ln</item>\n      <item>loadkeys</item>\n      <item>loadunimap</item>\n      <item>login</item>\n      <item>ls</item>\n      <item>lsattr</item>\n      <item>lsmod</item>\n      <item>lsmod.old</item>\n      <item>lzcat</item>\n      <item>lzcmp</item>\n      <item>lzdiff</item>\n      <item>lzegrep</item>\n      <item>lzfgrep</item>\n      <item>lzgrep</item>\n      <item>lzless</item>\n      <item>lzcat</item>\n      <item>lzma</item>\n      <item>lzmainfo</item>\n      <item>lzmore</item>\n      <item>mapscrn</item>\n      <item>mesg</item>\n      <item>mkdir</item>\n      <item>mkfifo</item>\n      <item>mknod</item>\n      <item>mktemp</item>\n      <item>more</item>\n      <item>mount</item>\n      <item>mv</item>\n      <item>nano</item>\n      <item>netstat</item>\n      <item>nisdomainname</item>\n      <item>nroff</item>\n      <item>openvt</item>\n      <item>pgawk</item>\n      <item>pidof</item>\n      <item>ping</item>\n      <item>ps</item>\n      <item>pstree</item>\n      <item>pwd</item>\n      <item>rbash</item>\n      <item>readlink</item>\n      <item>red</item>\n      <item>resizecons</item>\n      <item>rm</item>\n      <item>rmdir</item>\n      <item>run-parts</item>\n      <item>sash</item>\n      <item>sed</item>\n      <item>setfont</item>\n      <item>setkeycodes</item>\n      <item>setleds</item>\n      <item>setmetamode</item>\n      <item>setserial</item>\n      <item>sh</item>\n      <item>showkey</item>\n      <item>shred</item>\n      <item>sleep</item>\n      <item>ssed</item>\n      <item>stat</item>\n      <item>stty</item>\n      <item>su</item>\n      <item>sync</item>\n      <item>tar</item>\n      <item>tempfile</item>\n      <item>touch</item>\n      <item>troff</item>\n      <item>true</item>\n      <item>umount</item>\n      <item>uname</item>\n      <item>unicode_start</item>\n      <item>unicode_stop</item>\n      <item>unlink</item>\n      <item>unlzma</item>\n      <item>unxz</item>\n      <item>utmpdump</item>\n      <item>uuidgen</item>\n      <item>vdir</item>\n      <item>wall</item>\n      <item>wc</item>\n      <item>xz</item>\n      <item>xzcat</item>\n      <item>ypdomainname</item>\n      <item>zcat</item>\n      <item>zcmp</item>\n      <item>zdiff</item>\n      <item>zegrep</item>\n      <item>zfgrep</item>\n      <item>zforce</item>\n      <item>zgrep</item>\n      <item>zless</item>\n      <item>zmore</item>\n      <item>znew</item>\n      <item>zsh</item>\n\n      <!-- some from /usr/bin -->\n      <item>aclocal</item>\n      <item>aconnect</item>\n      <item>aplay</item>\n      <item>apm</item>\n      <item>apmsleep</item>\n      <item>apropos</item>\n      <item>ar</item>\n      <item>arecord</item>\n      <item>as</item>\n      <item>as86</item>\n      <item>autoconf</item>\n      <item>autoheader</item>\n      <item>automake</item>\n      <item>awk</item>\n      <item>basename</item>\n      <item>bc</item>\n      <item>bison</item>\n      <item>c++</item>\n      <item>cal</item>\n      <item>cat</item>\n      <item>cc</item>\n      <item>cdda2wav</item>\n      <item>cdparanoia</item>\n      <item>cdrdao</item>\n      <item>cd-read</item>\n      <item>cdrecord</item>\n      <item>chfn</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chown</item>\n      <item>chroot</item>\n      <item>chsh</item>\n      <item>clear</item>\n      <item>cmp</item>\n      <item>co</item>\n      <item>col</item>\n      <item>comm</item>\n      <item>cp</item>\n      <item>cpio</item>\n      <item>cpp</item>\n      <item>cut</item>\n      <item>dc</item>\n      <item>dd</item>\n      <item>df</item>\n      <item>diff</item>\n      <item>diff3</item>\n      <item>dir</item>\n      <item>dircolors</item>\n      <item>directomatic</item>\n      <item>dirname</item>\n      <item>du</item>\n      <item>env</item>\n      <item>expr</item>\n      <item>fbset</item>\n      <item>file</item>\n      <item>find</item>\n      <item>flex</item>\n      <item>flex++</item>\n      <item>fmt</item>\n      <item>free</item>\n      <item>ftp</item>\n      <item>funzip</item>\n      <item>fuser</item>\n      <item>g++</item>\n      <item>gawk</item>\n      <item>gc</item>\n      <item>gcc</item>\n      <item>clang</item>\n      <item>valgrind</item>\n      <item>xdg-open</item>\n      <item>cmake</item>\n      <item>qmake</item>\n      <item>svn</item>\n      <item>git</item>\n      <item>rsync</item>\n      <item>gdb</item>\n      <item>getent</item>\n      <item>getopt</item>\n      <item>gettext</item>\n      <item>gettextize</item>\n      <item>gimp</item>\n      <item>gimp-remote</item>\n      <item>gimptool</item>\n      <item>gmake</item>\n      <item>gs</item>\n      <item>head</item>\n      <item>hexdump</item>\n      <item>id</item>\n      <item>install</item>\n      <item>join</item>\n      <item>kill</item>\n      <item>killall</item>\n      <item>ld</item>\n      <item>ld86</item>\n      <item>ldd</item>\n      <item>less</item>\n      <item>lex</item>\n      <item>ln</item>\n      <item>locate</item>\n      <item>lockfile</item>\n      <item>logname</item>\n      <item>lp</item>\n      <item>lpr</item>\n      <item>ls</item>\n      <item>lynx</item>\n      <item>m4</item>\n      <item>make</item>\n      <item>man</item>\n      <item>mkdir</item>\n      <item>mknod</item>\n      <item>msgfmt</item>\n      <item>mv</item>\n      <item>namei</item>\n      <item>nasm</item>\n      <item>nawk</item>\n      <item>nice</item>\n      <item>nl</item>\n      <item>nm</item>\n      <item>nm86</item>\n      <item>nmap</item>\n      <item>nohup</item>\n      <item>nop</item>\n      <item>od</item>\n      <item>passwd</item>\n      <item>patch</item>\n      <item>pcregrep</item>\n      <item>pcretest</item>\n      <item>perl</item>\n      <item>perror</item>\n      <item>pidof</item>\n      <item>pr</item>\n      <item>printf</item>\n      <item>procmail</item>\n      <item>prune</item>\n      <item>ps2ascii</item>\n      <item>ps2epsi</item>\n      <item>ps2frag</item>\n      <item>ps2pdf</item>\n      <item>ps2ps</item>\n      <item>psbook</item>\n      <item>psmerge</item>\n      <item>psnup</item>\n      <item>psresize</item>\n      <item>psselect</item>\n      <item>pstops</item>\n      <item>rcs</item>\n      <item>rev</item>\n      <item>rm</item>\n      <item>scp</item>\n      <item>sed</item>\n      <item>seq</item>\n      <item>setterm</item>\n      <item>shred</item>\n      <item>size</item>\n      <item>size86</item>\n      <item>skill</item>\n      <item>slogin</item>\n      <item>snice</item>\n      <item>sort</item>\n      <item>sox</item>\n      <item>split</item>\n      <item>ssh</item>\n      <item>ssh-add</item>\n      <item>ssh-agent</item>\n      <item>ssh-keygen</item>\n      <item>ssh-keyscan</item>\n      <item>stat</item>\n      <item>strings</item>\n      <item>strip</item>\n      <item>sudo</item>\n      <item>suidperl</item>\n      <item>sum</item>\n      <item>tac</item>\n      <item>tail</item>\n      <item>tee</item>\n      <item>test</item>\n      <item>tr</item>\n      <item>uniq</item>\n      <item>unlink</item>\n      <item>unzip</item>\n      <item>updatedb</item>\n      <item>updmap</item>\n      <item>uptime</item>\n      <item>users</item>\n      <item>vmstat</item>\n      <item>w</item>\n      <item>wc</item>\n      <item>wget</item>\n      <item>whatis</item>\n      <item>whereis</item>\n      <item>which</item>\n      <item>who</item>\n      <item>whoami</item>\n      <item>write</item>\n      <item>xargs</item>\n      <item>yacc</item>\n      <item>yes</item>\n      <item>zip</item>\n      <item>zsoelim</item>\n\n      <!-- others -->\n      <item>dcop</item>\n      <item>kdialog</item>\n      <item>kfile</item>\n      <item>xhost</item>\n      <item>xmodmap</item>\n      <item>xset</item>\n    </list>\n\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Start\">\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n<!-- ====== The following rulessets are meant to be included ======== -->\n      <!-- FindAll tries to interpret everything -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindAll\">\n        <IncludeRules context=\"FindComments\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- FindMost tries to interpret anything except commands -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindMost\">\n        <IncludeRules context=\"FindComments\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n\n      <!-- FindComments consumes shell comments till EOL -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindComments\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"Comment\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindCommentsParen\">\n        <DetectChar attribute=\"Comment\" context=\"CommentParen\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"CommentParen\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentParen\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"[^)](?=\\))\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindCommentsBackq\">\n        <DetectChar attribute=\"Comment\" context=\"CommentBackq\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"CommentBackq\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentBackq\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"[^`](?=`)\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n\n      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindCommands\">\n        <IncludeRules context=\"FindSpecialCommands\" />\n        <IncludeRules context=\"FindNormalCommands\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindSpecialCommands\">\n        <!-- start expression in double parentheses -->\n        <Detect2Chars attribute=\"Keyword\" context=\"ExprDblParen\" char=\"(\" char1=\"(\" beginRegion=\"expression\" />\n        <!-- start expression in double brackets -->\n        <RegExpr attribute=\"Keyword\" context=\"ExprDblBracket\" String=\"\\[\\[&eos;\" beginRegion=\"expression\" column=\"0\"/>\n        <RegExpr attribute=\"Keyword\" context=\"ExprDblBracket\" String=\"\\s\\[\\[&eos;\" beginRegion=\"expression\" />\n        <!-- start expression in single brackets -->\n        <RegExpr attribute=\"Builtin\" context=\"ExprBracket\" String=\"\\[&eos;\" beginRegion=\"expression\" column=\"0\"/>\n        <RegExpr attribute=\"Builtin\" context=\"ExprBracket\" String=\"\\s\\[&eos;\" beginRegion=\"expression\" />\n        <!-- start a group command with { -->\n        <RegExpr attribute=\"Keyword\" context=\"Group\" String=\"\\{&eos;\" beginRegion=\"group\" />\n        <!-- start a subshell -->\n        <DetectChar attribute=\"Keyword\" context=\"SubShell\" char=\"(\" beginRegion=\"subshell\" />\n        <!-- match do and if blocks -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bdo&noword;\" beginRegion=\"do\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bdone&noword;\" endRegion=\"do\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bif&eos;\" beginRegion=\"if\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bfi&noword;\" endRegion=\"if\" />\n        <!-- handle case as a special case -->\n        <RegExpr attribute=\"Keyword\" context=\"Case\" String=\"\\bcase&noword;\" beginRegion=\"case\" />\n        <!-- handle variable assignments -->\n        <RegExpr attribute=\"Variable\" context=\"Assign\" String=\"\\b&varname;\\+?=\" />\n        <RegExpr attribute=\"Variable\" context=\"AssignSubscr\" String=\"\\b&varname;(?=\\[.+\\]\\+?=)\" />\n        <!-- handle functions with function keyword before keywords -->\n        <StringDetect attribute=\"Function\" context=\"#stay\" String=\":()\" />\n        <WordDetect attribute=\"Keyword\" context=\"FunctionDef\" String=\"function\" />\n        <!-- mark function definitions without function keyword -->\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"&funcname;\\s*\\(\\)\" />\n        <!-- handle keywords -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <RegExpr attribute=\"Builtin\" context=\"#stay\" String=\"\\.(?=\\s)\" />\n        <!-- handle commands that have variable names as argument -->\n        <keyword attribute=\"Builtin\" context=\"VarName\" String=\"builtins_var\" />\n        <!-- handle here-string -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"\\d*&lt;&lt;&lt;\" />\n        <!-- handle here document -->\n        <Detect2Chars attribute=\"Redirection\" context=\"HereDoc\" char=\"&lt;\" char1=\"&lt;\" lookAhead=\"true\" />\n        <!-- handle process subst -->\n        <RegExpr attribute=\"Redirection\" context=\"ProcessSubst\" String=\"[&lt;&gt;]\\(\" />\n        <!-- handle redirection -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)\" />\n        <!-- handle &, &&, | and || -->\n        <RegExpr attribute=\"Control\" context=\"#stay\" String=\"([|&amp;])\\1?\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindNormalCommands\">\n        <keyword attribute=\"Builtin\" context=\"CommandArgs\" String=\"builtins\" />\n        <keyword attribute=\"Command\" context=\"CommandArgs\" String=\"unixcommands\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"#stay\" String=\"&pathpart;*(?=/)\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"#stay\" String=\"~\\w*\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"#stay\" String=\"/&pathpart;*(?=([/);$`'&quot;]|$))\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"CommandArgs\" String=\"/&pathpart;*(?=([\\s);$`'&quot;]|$))\" />\n        <!-- This list is not complete. ie, \":\" is missing but as it is in bash completition. -->\n        <RegExpr attribute=\"OtherCommand\" context=\"CommandArgs\" String=\"&pathpart;*\" />\n      </context>\n\n      <!-- CommandArgs matches the items after a command -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"CommandArgs\">\n        <LineContinue />\n        <IncludeRules context=\"FindMost\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\\\$\" />\n        <!-- handle keywords -->\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"\\.(?=\\s)\" />\n        <!-- handle here-string -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"\\d*&lt;&lt;&lt;\" />\n        <!-- handle here document -->\n        <Detect2Chars attribute=\"Redirection\" context=\"HereDoc\" char=\"&lt;\" char1=\"&lt;\" lookAhead=\"true\" />\n        <!-- handle process subst -->\n        <RegExpr attribute=\"Redirection\" context=\"ProcessSubst\" String=\"[&lt;&gt;]\\(\" />\n        <!-- handle redirection -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)\" />\n        <!-- handle &, &&, | and || -->\n        <RegExpr attribute=\"Control\" context=\"#pop\" String=\"([|&amp;;])\\1?\" />\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[a-zA-Z_]+-[A-Za-z0-9_-]*\" />\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"-?-[a-zA-Z_][A-Za-z0-9_-]*\" />\n        <keyword attribute=\"Option\" context=\"#stay\" String=\"keywords\" />\n        <AnyChar String=\")}\" context=\"#pop\" lookAhead=\"true\"/>\n      </context>\n\n      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc, when inside a Backquote -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindCommandsBackq\">\n        <IncludeRules context=\"FindSpecialCommands\" />\n        <IncludeRules context=\"FindNormalCommandsBackq\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindNormalCommandsBackq\">\n        <keyword attribute=\"Builtin\" context=\"CommandArgsBackq\" String=\"builtins\" />\n        <keyword attribute=\"Command\" context=\"CommandArgsBackq\" String=\"unixcommands\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"#stay\" String=\"&pathpart;*(?=/)\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"#stay\" String=\"~\\w*\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"#stay\" String=\"/&pathpart;*(?=([/);$`'&quot;]|$))\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"CommandArgsBackq\" String=\"/&pathpart;*(?=([\\s);$`'&quot;]|$))\" />\n        <RegExpr attribute=\"OtherCommand\" context=\"CommandArgsBackq\" String=\"&pathpart;*\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"CommandArgsBackq\">\n        <LineContinue />\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"`\" lookAhead=\"true\"/>\n        <IncludeRules context=\"CommandArgs\" />\n      </context>\n\n      <!-- FindOthers contains various rules to mark different shell input -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindOthers\">\n        <IncludeRules context=\"Escapes\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\\\$\" />\n        <!-- Only highlighting closed braces. The \"BraceExpansion\" context corrects\n             the closure of braces and allows recursive braces (bug #387915). -->\n        <RegExpr attribute=\"Escape\" context=\"BraceExpansion\" String=\"\\{(?=(\\\\[ \\{\\}]|[^\\s\\{\\}]|\\{(\\\\[ ]|\\S)*\\})+\\})\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"&pathpart;*(?=/)\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"~\\w*\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"/&pathpart;*(?=([\\s/):;$`'&quot;]|$))\" />\n        <!-- TODO: shell globs beside * and ? (in Path's) -->\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Escapes\">\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\[][;\\\\$`{}()|&amp;&lt;&gt;* ]\" />\n      </context>\n      <context attribute=\"Escape\" lineEndContext=\"#pop\" name=\"BraceExpansion\">\n        <DetectSpaces context=\"#pop\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Escape\" context=\"#pop\" char=\"}\" />\n        <DetectChar attribute=\"Escape\" context=\"BraceExpansion\" char=\"{\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"[^\\s\\{\\}\\\\](?=\\s|$)\" />\n        <IncludeRules context=\"Escapes\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindStrings\">\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"\\\" char1=\"'\" />\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String SingleQ\" context=\"StringSQ\" char=\"'\" />\n        <DetectChar attribute=\"String DoubleQ\" context=\"StringDQ\" char=\"&quot;\" />\n        <Detect2Chars attribute=\"String SingleQ\" context=\"StringEsc\" char=\"$\" char1=\"'\" />\n        <Detect2Chars attribute=\"String Transl.\" context=\"StringDQ\" char=\"$\" char1=\"&quot;\" />\n      </context>\n\n      <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindSubstitutions\">\n        <RegExpr attribute=\"Variable\" context=\"Subscript\" String=\"\\$&varname;\\[\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[*@#?$!_0-9-]\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{[*@#?$!_0-9-]\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{#&varname;(\\[[*@]\\])?\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{!&varname;(\\[[*@]\\]|[*@])?\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{#[0-9]+\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"VarBrace\" String=\"\\$\\{&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"VarBrace\" String=\"\\$\\{[*@#?$!_0-9-](?=[:#%/=?+-])\" />\n        <StringDetect attribute=\"Variable\" context=\"ExprDblParenSubst\" String=\"$((\" beginRegion=\"expression\" />\n        <StringDetect attribute=\"Redirection\" context=\"SubstFile\" String=\"$(&lt;\" />\n        <Detect2Chars attribute=\"Variable\" context=\"SubstCommand\" char=\"$\" char1=\"(\" />\n        <DetectChar attribute=\"Backquote\" context=\"SubstBackq\" char=\"`\" />\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\[`$\\\\]\" />\n      </context>\n\n      <!-- FindTests finds operators valid in tests -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindTests\">\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-[abcdefghkprstuwxOGLSNozn](?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-([no]t|ef)(?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"([!=]=?|[&gt;&lt;])(?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-(eq|ne|[gl][te])(?=\\s)\"/>\n      </context>\n\n\n<!-- ====== These are the contexts that can be branched to ======= -->\n\n      <!-- ExprDblParen consumes an expression started in command mode till )) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblParen\">\n        <Detect2Chars attribute=\"Keyword\" context=\"#pop\" char=\")\" char1=\")\" endRegion=\"expression\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblParenSubst\">\n        <Detect2Chars attribute=\"Variable\" context=\"#pop\" char=\")\" char1=\")\" endRegion=\"expression\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprSubParen consumes an expression till ) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprSubParen\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprBracket consumes an expression till ] -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprBracket\">\n        <RegExpr attribute=\"Builtin\" context=\"#pop\" String=\"\\s\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" />\n        <RegExpr attribute=\"Builtin\" context=\"#pop\" String=\"\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" column=\"0\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindTests\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprDblBracket consumes an expression till ]] -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblBracket\">\n        <RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"\\s\\]\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" />\n        <RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"\\]\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" column=\"0\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindTests\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- Group consumes shell input till } -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Group\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"}\" endRegion=\"group\" />\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- SubShell consumes shell input till ) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubShell\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\")\" endRegion=\"subshell\" />\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- Assign consumes an expression till EOL or whitespace -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Assign\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Variable\" context=\"AssignArray\" char=\"(\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\w:,+_./-]\" />\n      </context>\n\n      <!-- AssignArray consumes everything till ), marking assignments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"AssignArray\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\")\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"AssignSubscr\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <Detect2Chars attribute=\"Variable\" context=\"Assign\" char=\"+\" char1=\"=\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- Subscript consumes anything till ], marks as Variable -->\n      <context attribute=\"Variable\" lineEndContext=\"#stay\" name=\"Subscript\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\"]\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->\n      <context attribute=\"Function\" lineEndContext=\"#pop\" name=\"FunctionDef\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\s+&funcname;(\\s*\\(\\))?\" />\n      </context>\n\n      <!-- VarName consumes spare variable names and assignments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"VarName\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- handle command line options -->\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"-[A-Za-z0-9]+\" />\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"--[a-z][A-Za-z0-9_-]*\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\b&varname;\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindMost\" />\n        <!-- stay here in spaces and other safe characters -->\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[^]})|;`&amp;&gt;&lt;]\" />\n      </context>\n\n      <!-- ProcessSubst handles <(command) and >(command) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ProcessSubst\">\n        <DetectChar attribute=\"Redirection\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- StringSQ consumes anything till ' -->\n      <context attribute=\"String SingleQ\" lineEndContext=\"#stay\" name=\"StringSQ\">\n        <DetectChar attribute=\"String SingleQ\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- StringDQ consumes anything till \", substitutes vars and expressions -->\n      <context attribute=\"String DoubleQ\" lineEndContext=\"#stay\" name=\"StringDQ\">\n        <DetectChar attribute=\"String DoubleQ\" context=\"#pop\" char=\"&quot;\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\[`&quot;\\\\$\\n]\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- StringEsc eats till ', but escaping many characters -->\n      <context attribute=\"String SingleQ\" lineEndContext=\"#stay\" name=\"StringEsc\">\n        <DetectChar attribute=\"String SingleQ\" context=\"#pop\" char=\"'\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\[abefnrtv\\\\']\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)\" />\n      </context>\n\n      <!-- VarBrace is called as soon as ${xxx is encoutered -->\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"VarBrace\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\"}\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <RegExpr attribute=\"Variable\" context=\"VarAlt\" String=\"(:?[-=?+@]|##?|%%?|\\^\\^?|,,?)\" />\n        <RegExpr attribute=\"Variable\" context=\"VarSubst\" String=\"//?\" />\n        <DetectChar attribute=\"Variable\" context=\"VarSub\" char=\":\" />\n      </context>\n\n      <!-- VarAlt is to handle default/alternate/etc values of variables -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"VarAlt\">\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop\" char=\"}\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- VarSubst is to handle substitutions on variables -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"VarSubst\">\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop\" char=\"}\" />\n        <DetectChar attribute=\"Variable\" context=\"VarSubst2\" char=\"/\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"VarSubst2\">\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop#pop\" char=\"}\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- VarSub is to substrings of variables -->\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"VarSub\">\n        <DetectSpaces attribute=\"Variable\" context=\"#stay\" />\n        <DetectChar attribute=\"Variable\" context=\"VarSub2\" char=\":\" />\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop\" char=\"}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"([\\-\\+]\\s*)?[0-9]+\\s*(?=[:}])\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"VarSub2\">\n        <DetectSpaces attribute=\"Variable\" context=\"#stay\" />\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop#pop\" char=\"}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"([\\-\\+]\\s*)?[0-9]+\\s*(?=[:}])\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n\n      <!-- SubstFile is called after a <( or >( is encoutered -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstFile\">\n        <DetectChar attribute=\"Redirection\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- SubstCommand is called after a $( is encountered -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstCommand\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- SubstBackq is called when a backquote is encountered -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstBackq\">\n        <DetectChar attribute=\"Backquote\" context=\"#pop\" char=\"`\" />\n        <IncludeRules context=\"FindCommentsBackq\" />\n        <IncludeRules context=\"FindCommandsBackq\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- Case is called after the case keyword is encoutered. We handle this because of\n           the lonely closing parentheses that would otherwise disturb the expr matching -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Case\">\n        <RegExpr attribute=\"Keyword\" context=\"CaseIn\" String=\"\\sin\\b\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- CaseIn is called when the construct 'case ... in' has been found. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"CaseIn\">\n        <RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"\\besac(?=$|[\\s;)])\" endRegion=\"case\" />\n        <DetectChar attribute=\"Keyword\" context=\"CaseExpr\" char=\")\" beginRegion=\"caseexpr\" />\n        <AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"(|\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- CaseExpr eats shell input till ;; -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"CaseExpr\">\n        <Detect2Chars attribute=\"Keyword\" context=\"#pop\" char=\";\" char1=\";\" endRegion=\"caseexpr\" />\n        <RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"esac(?=$|[\\s;)])\" lookAhead=\"true\" firstNonSpace=\"true\" endRegion=\"caseexpr\"/>\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- HereDoc consumes Here-documents. It is called at the beginning of the \"<<\" construct. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDoc\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocIQ\"  String=\"(&lt;&lt;-\\s*&quot;(&word;)&quot;)\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocIQ\"  String=\"(&lt;&lt;-\\s*'(&word;)')\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocIQ\"  String=\"(&lt;&lt;-\\s*\\\\(&word;))\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocINQ\" String=\"(&lt;&lt;-\\s*(&word;))\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocQ\"   String=\"(&lt;&lt;\\s*&quot;(&word;)&quot;)\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocQ\"   String=\"(&lt;&lt;\\s*'(&word;)')\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocQ\"   String=\"(&lt;&lt;\\s*\\\\(&word;))\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocNQ\"  String=\"(&lt;&lt;\\s*(&word;))\" lookAhead=\"true\" />\n        <Detect2Chars attribute=\"Redirection\" context=\"#pop\"  char=\"&lt;\" char1=\"&lt;\" /><!-- always met -->\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"HereDocRemainder\">\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^%2\\b\" dynamic=\"true\" column=\"0\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocNQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^%2\\b\" dynamic=\"true\" column=\"0\"/>\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocIQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^\\t*%2\\b\" dynamic=\"true\" column=\"0\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocINQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^\\t*%2\\b\" dynamic=\"true\" column=\"0\"/>\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"\tdefStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"\t\tdefStyleNum=\"dsComment\" />\n      <itemData name=\"Keyword\"\t\tdefStyleNum=\"dsKeyword\" />\n      <itemData name=\"Control\"\t\tdefStyleNum=\"dsKeyword\" />\n      <itemData name=\"Builtin\"\t\tdefStyleNum=\"dsBuiltIn\" />\n      <itemData name=\"Command\"\t\tdefStyleNum=\"dsFunction\" />\n      <itemData name=\"OtherCommand\"\tdefStyleNum=\"dsExtension\" />\n      <itemData name=\"Redirection\"\tdefStyleNum=\"dsOperator\" />\n      <itemData name=\"Escape\"\t\tdefStyleNum=\"dsDataType\" />\n      <itemData name=\"String SingleQ\"\tdefStyleNum=\"dsString\" />\n      <itemData name=\"String DoubleQ\"\tdefStyleNum=\"dsString\" />\n      <itemData name=\"Backquote\"\tdefStyleNum=\"dsKeyword\" />\n      <itemData name=\"String Transl.\"\tdefStyleNum=\"dsString\" />\n      <itemData name=\"String Escape\"\tdefStyleNum=\"dsDataType\" />\n      <itemData name=\"Variable\" \tdefStyleNum=\"dsVariable\" />\n      <itemData name=\"Expression\"\tdefStyleNum=\"dsOthers\" />\n      <itemData name=\"Function\" \tdefStyleNum=\"dsFunction\" />\n      <itemData name=\"Path\"\t\tdefStyleNum=\"dsNormal\" />\n      <itemData name=\"Option\"\t\tdefStyleNum=\"dsNormal\" />\n      <itemData name=\"Error\"\t\tdefStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"^%#[]$._{}:-/\" additionalDeliminator=\"`\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/bibtex.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n\t  [\n\t  <!ENTITY stringVariable   \t\"[a-zA-Z0-9\\-]+\">\n\t  <!ENTITY fieldFormat    \t\"[a-zA-Z0-9\\-_\\.]+\">\n\t  <!ENTITY latexCmd\t  \t\"\\\\([a-zA-Z@]+|[^ ])\">\n\t  <!ENTITY refKeyFormat  \t\"[a-zA-Z0-9_@\\\\-\\\\:]+\"> <!--taken from kile 2.0.3-->\n\t  ]>\n<language name=\"BibTeX\" version=\"2\" kateversion=\"5.0\" extensions=\"*.bib\" section=\"Markup\" mimetype=\"text/x-bib\" casesensitive=\"1\" author=\"Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"kw_entry\">\n      <item>@article</item> \n      <item>@book</item> \n      <item>@booklet</item> \n      <item>@conference</item> \n      <item>@collection</item>\n      <item>@electronic</item>\n      <item>@inbook</item> \n      <item>@incollection</item> \n      <item>@inproceedings</item> \n      <item>@manual</item> \n      <item>@mastersthesis</item> \n      <item>@misc</item>\n      <item>@online</item>\n      <item>@patent</item>\n      <item>@periodical</item>\n      <item>@proceedings</item>\n      <item>@report</item>\n      <item>@phdthesis</item>\n      <item>@set</item>\n      <item>@thesis</item> \n      <item>@techreport</item> \n      <item>@unpublished</item>\n      <item>@www</item>\n      <item>@person</item> <!--all three from the directory package-->\n      <item>@company</item>\n      <item>@place</item>\n    </list>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <keyword String=\"kw_entry\" attribute=\"Entry\" context=\"Entry\"/>\n\t<StringDetect String=\"@string\" attribute=\"Command\" insensitive=\"true\" context=\"StringCommand\"/>\n\t<StringDetect String=\"@preamble\" attribute=\"Command\" insensitive=\"true\" context=\"PreambleCommand\"/>\n\t<StringDetect String=\"@comment\" attribute=\"Comment\" insensitive=\"true\" context=\"#stay\"/> <!--nothing special needed here-->\n    </context>\n\n\t<context name=\"PreambleCommand\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#stay\" >\n\t\t<DetectChar char=\"{\" context=\"CurlyBracket\" />\n\t</context>\n\t\n\t<context name=\"StringCommand\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#stay\" >\n\t\t<DetectChar char=\"{\" context=\"CurlyBracket\" />\n\t\t<RegExpr String=\"&stringVariable;\" attribute=\"String\" context=\"CurlyBracket\"/>\n      </context>\n\n      <context name=\"Entry\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <DetectChar char=\"{\"  context=\"#stay\" beginRegion=\"block\" />\n\t      <RegExpr String=\"&refKeyFormat;\" attribute=\"Ref Key\" context=\"#stay\"/>\n\t      <DetectChar char=\",\" context=\"Field\"/>\n\t      <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\" endRegion=\"block\" />\n      </context>\n\n      <context name=\"Field\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <RegExpr String=\"&fieldFormat;\" attribute=\"Field\" firstNonSpace=\"true\"/>\n\t      <DetectSpaces/>\n\t      <DetectChar char=\"=\" context=\"#stay\"/>\n\t      <DetectSpaces/>\n\t      <DetectChar char=\"{\" context=\"CurlyBracket\"/>\n\t      <DetectChar char=\"}\" context=\"#pop\" lookAhead=\"true\"/>\n\t      <DetectChar char=\"&quot;\"  attribute=\"Normal Text\" context=\"QuotedText\"/>\n\t      <DetectChar char=\",\" context=\"#stay\"/>\n\t      <DetectChar char=\"#\" context=\"#stay\"/> <!-- the bibtex string concatenate character -->\n\t      <RegExpr String=\"[0-9]+\" context=\"#stay\"/>\n\t      <RegExpr String=\"&stringVariable;\" attribute=\"String\" /> <!-- assume this is a variable created with @String -->\n\t      <DetectSpaces/>\n\t      <RegExpr String=\".\" attribute=\"Error\" context=\"#stay\"/> <!--this rule catches all errors-->\n      </context>\n\n      <context name=\"CurlyBracket\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <DetectChar char=\"{\" context=\"CurlyBracket\"/>\n\t      <RegExpr String=\"&latexCmd;\" attribute=\"LatexCommand\" context=\"#stay\"/>\n\t      <RegExpr String=\"}$\" context=\"#pop#pop\"/>\n\t      <DetectChar char=\"}\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"QuotedText\" attribute=\"String\" lineEndContext=\"#stay\">\n\t      <DetectChar char=\"&quot;\" attribute=\"Normal Text\" context=\"#pop\"/>\n\t      <RegExpr String=\"&latexCmd;\" attribute=\"LatexCommand\" context=\"#stay\"/>\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Entry\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n      <itemData name=\"Command\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Field\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Ref Key\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"LatexCommand\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"false\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"true\"/>\n</itemDatas>\n  </highlighting>\n  <general>\n   <keywords casesensitive=\"0\" weakDeliminator=\"\\\" wordWrapDeliminator=\",{}[]\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/bitbake.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  ====================================================================\n  Bitbake syntax highlighting file for the Kate and QtCreator\n  ====================================================================\n\n  Author: Ivan Koveshnikov\n-->\n\n<language name=\"Bitbake\" section=\"Sources\"\n          version=\"5\" kateversion=\"2.4\"\n          extensions=\"*.bb;*.bbappend;*.bbclass;*.inc\"\n          license=\"GPL\" author=\"Ivan Koveshnikov\">\n\n  <highlighting>\n\n    <list name=\"keywords\">\n      <item>after</item>\n      <item>before</item>\n      <item>python</item>\n      <item>branch</item>\n      <item>bareclone</item>\n      <item>protocol</item>\n      <item>name</item>\n      <item>if</item>\n      <item>fi</item>\n      <item>then</item>\n      <item>rm</item>\n      <item>ln</item>\n      <item>cp</item>\n      <item>for</item>\n      <item>done</item>\n      <item>cat</item>\n    </list>\n\n    <list name=\"oe_functions\">\n      <item>do_build</item>\n      <item>do_compile</item>\n      <item>do_compile_append</item>\n      <item>do_compile_prepend</item>\n      <item>do_compile_ptest_base</item>\n      <item>do_configure</item>\n      <item>do_configure_append</item>\n      <item>do_configure_prepend</item>\n      <item>do_configure_ptest_base</item>\n      <item>do_deploy</item>\n      <item>do_fetch</item>\n      <item>do_install</item>\n      <item>do_install_append</item>\n      <item>do_install_prepend</item>\n      <item>do_install_ptest_base</item>\n      <item>do_package</item>\n      <item>do_package_qa</item>\n      <item>do_package_write_deb</item>\n      <item>do_package_write_ipk</item>\n      <item>do_package_write_rpm</item>\n      <item>do_package_write_tar</item>\n      <item>do_packagedata</item>\n      <item>do_patch</item>\n      <item>do_populate_lic</item>\n      <item>do_populate_sdk</item>\n      <item>do_populate_sysroot</item>\n      <item>do_rm_work</item>\n      <item>do_rm_work_all</item>\n      <item>do_unpack</item>\n      <item>do_checkuri</item>\n      <item>do_checkuriall</item>\n      <item>do_clean</item>\n      <item>do_cleanall</item>\n      <item>do_cleansstate</item>\n      <item>do_devshell</item>\n      <item>do_fetchall</item>\n      <item>do_listtasks</item>\n      <item>do_package_index</item>\n      <item>do_bootimg</item>\n      <item>do_bundle_initramfs</item>\n      <item>do_rootfs</item>\n      <item>do_testimage</item>\n      <item>do_testimage_auto</item>\n      <item>do_vmdkimg</item>\n      <item>do_compile_kernelmodules</item>\n      <item>do_diffconfig</item>\n      <item>do_kernel_checkout</item>\n      <item>do_kernel_configcheck</item>\n      <item>do_kernel_configme</item>\n      <item>do_kernel_link_vmlinux</item>\n      <item>do_menuconfig</item>\n      <item>do_savedefconfig</item>\n      <item>do_sizecheck</item>\n      <item>do_strip</item>\n      <item>do_uboot_mkimage</item>\n      <item>do_validate_branches</item>\n      <item>do_generate_qt_config_file</item>\n      <item>do_spdx</item>\n      <item>oe_runmake</item>\n      <item>export</item>\n      <item>install</item>\n      <item>kernel_configme</item>\n      <item>validate_branches</item>\n\n    </list>\n\n    <list name=\"dependencies\">\n      <item>inherit</item>\n      <item>include</item>\n      <item>require</item>\n      <item>addtask</item>\n      <item>deltask</item>\n      <item>addhandler</item>\n      <item>EXPORT_FUNCTIONS</item>\n    </list>\n\n    <contexts>\n\n      <context name=\"Normal Text\" attribute=\"Normal Text\" lineEndContext=\"#pop\" >\n        <DetectSpaces/>\n        <DetectChar                         context=\"bbComment\" char=\"#\" />\n        <keyword attribute=\"Keyword\"        context=\"#stay\"     String=\"keywords\" />\n        <keyword attribute=\"OEFunction\"     context=\"#stay\"     String=\"oe_functions\" />\n        <keyword attribute=\"Dependency\"     context=\"#stay\"     String=\"dependencies\" />\n        <DetectChar attribute=\"String\"      context=\"bbString\"  char=\"&quot;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{[A-Za-z0-9_-]+\\}\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"([A-Z]+)[0-9_]*\" />\n      </context>\n\n      <context name=\"bbString\" attribute=\"String\" lineEndContext=\"bbError\" >\n        <keyword    attribute=\"Keyword\"     context=\"#stay\" String=\"keywords\" />\n        <DetectChar attribute=\"String\"      context=\"#pop\"  char=\"&quot;\" />\n        <LineContinue  attribute=\"Escape\"   context=\"#stay\"  />\n        <AnyChar    attribute=\"Normal Text\" context=\"#stay\" String=\"=|;,\" />\n        <RegExpr    attribute=\"BBFunction\"  context=\"#stay\" String=\"\\$\\{@[a-zA-Z0-9._\\-\\(\\), &quot;/]+\\}\" />\n        <RegExpr    attribute=\"Variable\"    context=\"#stay\" String=\"\\$\\{[A-Za-z0-9_-]+\\}\" />\n      </context>\n\n      <context name=\"bbComment\" attribute=\"Comment\" lineEndContext=\"#pop\" />\n\n      <context name=\"bbError\" attribute=\"Error\" lineEndContext=\"#stay\" >\n        <DetectChar attribute=\"Error\"      context=\"#pop\"  char=\"&quot;\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n    <!--\n        dsNormal, used for normal text.\n        dsKeyword, used for keywords.\n        dsDataType, used for data types.\n        dsDecVal, used for decimal values.\n        dsBaseN, used for values with a base other than 10.\n        dsFloat, used for float values.\n        dsChar, used for a character.\n        dsString, used for strings.\n        dsComment, used for comments.\n        dsOthers, used for ‘other’ things.\n        dsAlert, used for warning messages.\n        dsFunction, used for function calls.\n        dsRegionMarker, used for region markers.\n        dsError, used for error highlighting and wrong syntax.\n    -->\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"      spellChecking=\"false\" />\n      <itemData name=\"String\"         defStyleNum=\"dsString\"      spellChecking=\"true\" />\n      <itemData name=\"Keyword\"        defStyleNum=\"dsKeyword\"     spellChecking=\"false\" />\n      <itemData name=\"Variable\"       defStyleNum=\"dsOthers\"      spellChecking=\"false\" color=\"darkred\" />\n      <itemData name=\"Comment\"        defStyleNum=\"dsComment\"     spellChecking=\"true\" />\n      <itemData name=\"Dependency\"     defStyleNum=\"dsDataType\"    spellChecking=\"false\"/>\n      <itemData name=\"BBFunction\"     defStyleNum=\"dsOthers\"      spellChecking=\"false\" color=\"darkblue\" />\n      <itemData name=\"OEFunction\"     defStyleNum=\"dsBaseN\"       spellChecking=\"false\" />\n      <itemData name=\"Escape\"         defStyleNum=\"dsOthers\"      spellChecking=\"false\" color=\"grey\" />\n      <itemData name=\"Error\"          defStyleNum=\"dsError\"       spellChecking=\"false\" />\n\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n  </general>\n\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/bmethod.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"B-Method\" version=\"1\" kateversion=\"5.0\" section=\"Scientific\" extensions=\"*.mch;*.imp;*.ref\" author=\"Ivo Anjo (knuckles@gmail.com)\" license=\"LGPL\">\n\n<highlighting>\n\t<list name=\"sections\">\n\t\t<item>MACHINE</item>\n\t\t<item>SETS</item>\n\t\t<item>CONSTANTS</item>\n\t\t<item>PROPERTIES</item>\n\t\t<item>PROMOTES</item>\n\t\t<item>INCLUDES</item>\n\t\t<item>USES</item>\n\t\t<item>SEES</item>\n\t\t<item>VARIABLES</item>\n\t\t<item>INVARIANT</item>\n\t\t<item>INITIALISATION</item>\n\t\t<item>REFINEMENT</item>\n\t\t<item>REFINES</item>\n\t\t<item>CONSTRAINTS</item>\n\t\t<item>IMPLEMENTATION</item>\n\t\t<item>IMPORTS</item>\n\t</list>\n\t<list name=\"sectionsBlockStart\">\n\t\t<item>OPERATIONS</item>\n\t</list>\n\t<list name=\"sectionsBlockEnd\">\n\t\t<item>END</item>\n\t</list>\n\t<list name=\"operationSections\">\n\t\t<item>THEN</item>\n\t\t<item>WHEN</item>\n\t\t<item>ELSE</item>\n\t\t<item>OR</item>\n\t\t<item>WHERE</item>\n\t\t<item>INVARIANT</item>\n\t\t<item>DO</item>\n\t\t<item>VARIANT</item>\n\t\t<item>IN</item>\n\t\t<item>ELSIF</item>\n\t</list>\n\t<list name=\"operationSectionsBlockStart\">\n\t\t<item>PRE</item>\n\t\t<item>IF</item>\n\t\t<item>ANY</item>\n\t\t<item>LET</item>\n\t\t<item>CHOICE</item>\n\t\t<item>CASE</item>\n\t\t<item>SELECT</item>\n\t\t<item>VAR</item>\n\t\t<item>WHILE</item>\n\t\t<item>BEGIN</item>\n\t</list>\n\t<list name=\"operationSectionsBlockEnd\">\n\t\t<item>END</item>\n\t</list>\n\t<list name=\"types\">\n\t\t<item>NAT</item>\n\t\t<item>NAT1</item>\n\t</list>\n\t<contexts>\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\">\n\t\t\t<keyword attribute=\"SectionKeyword\" context=\"#stay\" String=\"sections\" column=\"0\"/>\n\t\t\t<keyword attribute=\"SectionKeyword\" context=\"#stay\" String=\"sectionsBlockStart\" column=\"0\" beginRegion=\"sectionsBlock\"/>\n\t\t\t<keyword attribute=\"SectionKeyword\" context=\"#stay\" String=\"sectionsBlockEnd\" column=\"0\" endRegion=\"sectionsBlock\"/>\n\t\t\t<keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n\t\t\t<Int attribute=\"Decimal\" context=\"#stay\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t<keyword attribute=\"OperationKeyword\" context=\"#stay\" String=\"operationSections\"/>\n\t\t\t<keyword attribute=\"OperationKeyword\" context=\"#stay\" String=\"operationSectionsBlockStart\" beginRegion=\"CodeBlock\"/>\n\t\t\t<keyword attribute=\"OperationKeyword\" context=\"#stay\" String=\"operationSectionsBlockEnd\" endRegion=\"CodeBlock\"/>\n\t\t</context>\n\t\t\n\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment\">\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t<IncludeRules context=\"##Alerts\"/>\n      \t\t</context>\n\t</contexts>\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"0\"/>\n\t\t<itemData name=\"SectionKeyword\" defStyleNum=\"dsBuiltIn\" spellChecking=\"0\"/>\n\t\t<itemData name=\"OperationKeyword\" defStyleNum=\"dsControlFlow\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Data Type\" defStyleNum=\"dsDataType\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"0\"/>\n\t</itemDatas>\n</highlighting>\n\n<general>\n\t<comments>\n\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t</comments>\n\t<keywords casesensitive=\"1\"/>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/boo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language>\n<!-- Based on Python syntax highlighting v1.99 by Primoz Anzur, Paul Giannaros, Michael Bueker, Per Wigren -->\n<!-- Also based on boo.lang from gtksourceview -->\n<language name=\"Boo\" version=\"3\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.boo\" mimetype=\"text/x-boo\" casesensitive=\"1\" author=\"Marc Dassonneville\" license=\"LGPL\">\n\t<highlighting>\n\t\t<list name=\"namespace\">\n\t\t\t<item>import</item>\n\t\t\t<item>from</item>\n\t\t\t<item>as</item>\n\t\t\t<item>namespace</item>\n\t\t</list>\n\n\t\t<list name=\"operators\">\n\t\t\t<item>and</item>\n\t\t\t<item>assert</item>\n\t\t\t<item>in</item>\n\t\t\t<item>is</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t</list>\n\n\t\t<list name=\"primitive\">\n\t\t\t<item>bool</item>\n\t\t\t<item>byte</item>\n\t\t\t<item>sbyte</item>\n\t\t\t<item>double</item>\n\t\t\t<item>decimal</item>\n\t\t\t<item>single</item>\n\t\t\t<item>short</item>\n\t\t\t<item>ushort</item>\n\t\t\t<item>int</item>\n\t\t\t<item>char</item>\n\t\t\t<item>uint</item>\n\t\t\t<item>long</item>\n\t\t\t<item>ulong</item>\n\t\t\t<item>object</item>\n\t\t\t<item>duck</item>\n\t\t\t<item>string</item>\n\t\t\t<item>regex</item>\n\t\t\t<item>date</item>\n\t\t\t<item>timespan</item>\n\t\t</list>\n\n\t\t<list name=\"definition\">\n\t\t\t<item>abstract</item>\n\t\t\t<item>virtual</item>\n\t\t\t<item>override</item>\n\t\t\t<item>static</item>\n\t\t\t<item>final</item>\n\t\t\t<item>transient</item>\n\t\t\t<item>macro</item>\n\n\t\t\t<item>protected</item>\n\t\t\t<item>private</item>\n\t\t\t<item>public</item>\n\t\t\t<item>internal</item>\n\t\t\t<item>partial</item>\n\n\t\t\t<item>class</item>\n\t\t\t<item>struct</item>\n\t\t\t<item>interface</item>\n\t\t\t<item>enum</item>\n\t\t\t<item>callable</item>\n\t\t\t<item>of</item>\n\n\t\t\t<item>def</item>\n\t\t\t<item>constructor</item>\n\t\t\t<item>destructor</item>\n\n\t\t\t<item>do</item>\n\t\t\t<item>get</item>\n\t\t\t<item>set</item>\n\t\t\t<item>event</item>\n\n\t\t\t<item>return</item>\n\t\t\t<item>yield</item>\n\t\t</list>\n\n\t\t<list name=\"boolean\">\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\t\t</list>\n\n\t\t<list name=\"literals\">\n\t\t\t<item>null</item>\n\t\t\t<item>self</item>\n\t\t\t<item>super</item>\n\t\t</list>\n\n\t\t<list name=\"keywords\">\n\t\t\t<item>and</item>\n\t\t\t<item>break</item>\n\t\t\t<item>cast</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>elif</item>\n\t\t\t<item>else</item>\n\t\t\t<item>except</item>\n\t\t\t<item>ensure</item>\n\t\t\t<item>for</item>\n\t\t\t<item>given</item>\n\t\t\t<item>goto</item>\n\t\t\t<item>if</item>\n\t\t\t<item>in</item>\n\t\t\t<item>is</item>\n\t\t\t<item>isa</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t\t<item>otherwise</item>\n\t\t\t<item>pass</item>\n\t\t\t<item>raise</item>\n\t\t\t<item>try</item>\n\t\t\t<item>unless</item>\n\t\t\t<item>when</item>\n\t\t\t<item>while</item>\n\t\t\t<item>ref</item>\n\t\t</list>\n\n\t\t<list name=\"builtins\">\n\t\t\t<item>assert</item>\n\t\t\t<item>__eval__</item>\n\t\t\t<item>__switch__</item>\n\t\t\t<item>enumerate</item>\n\t\t\t<item>filter</item>\n\t\t\t<item>len</item>\n\t\t\t<item>typeof</item>\n\t\t\t<item>map</item>\n\t\t\t<item>max</item>\n\t\t\t<item>min</item>\n\t\t\t<item>property</item>\n\t\t\t<item>using</item>\n\t\t\t<item>getter</item>\n\t\t\t<item>required</item>\n\t\t\t<item>lock</item>\n\t\t\t<item>range</item>\n\t\t\t<item>zip</item>\n\t\t\t<item>checked</item>\n\t\t\t<item>unchecked</item>\n\t\t\t<item>rawArrayIndexing</item>\n\t\t\t<item>normalArrayIndexing</item>\n\t\t\t<item>print</item>\n\t\t\t<item>array</item>\n\t\t\t<item>matrix</item>\n\t\t\t<item>yieldAll</item>\n\t\t</list>\n\n\t\t<contexts>\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<keyword attribute=\"Preprocessor\" String=\"namespace\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Definition Keyword\" String=\"definition\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Operator\" String=\"operators\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Flow Control Keyword\" String=\"keywords\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Builtin Function\" String=\"builtins\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Special Variable\" String=\"literals\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Special Variable\" String=\"boolean\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Data Type\" String=\"primitive\" context=\"#stay\" />\n\t\t\t\t<RegExpr attribute=\"Normal Text\" String=\"[a-zA-Z_][a-zA-Z_0-9]+\" context=\"#stay\"/>\n\n\t\t\t\t<RegExpr attribute=\"Complex\" String=\" ((([0-9]*\\.[0-9]+|[0-9]+\\.)|([0-9]+|([0-9]*\\.[0-9]+|[0-9]+\\.))[eE](\\+|-)?[0-9]+)|[0-9]+)[jJ]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Float\" String=\"([0-9]+\\.[0-9]*|\\.[0-9]+)([eE][0-9]+)?\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Int\" String=\"([1-9][0-9]*([eE][0-9]+)?|0)\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Long\" String=\"[1-9][0-9]*([eE][0-9.]+)?[Ll]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Hex\" String=\"0[Xx][0-9a-fA-F]+\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Octal\" String=\"0[1-9][0-9]*\" context=\"#stay\"/>\n\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"[rR]'''\" context=\"Raw Tripple A-string\"/>\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"[rR]&quot;&quot;&quot;\" context=\"Raw Tripple Q-string\"/>\n\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"[rR]'\" context=\"Raw A-string\"/>\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"[rR]&quot;\" context=\"Raw Q-string\"/>\n\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"#.*$\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"^\\s*u?'''\" context=\"Tripple A-comment\" beginRegion=\"Tripple A-region\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"^\\s*u?&quot;&quot;&quot;\" context=\"Tripple Q-comment\" beginRegion=\"Tripple Q-region\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" char=\"/\" char1=\"/\" context=\"Comment SlashSlash\"/>\n\n\t\t\t\t<StringDetect attribute=\"String\" String=\"'''\" context=\"Tripple A-string\" beginRegion=\"Tripple A-region\"/>\n\t\t\t\t<StringDetect attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"Tripple Q-string\" beginRegion=\"Tripple Q-region\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"'\" context=\"Single A-string\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"Single Q-string\"/>\n\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\"(\" context=\"parenthesised\" beginRegion=\"parenthesis\"/>\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\")\" context=\"#pop\" endRegion=\"parenthesis\"/>\n\n\t\t\t\t<StringDetect attribute=\"Operator\" String=\"[|\" context=\"Quasi-Quotation\" beginRegion=\"qq\"/>\n\t\t\t\t<StringDetect attribute=\"Operator\" String=\"|]\" context=\"#pop\" endRegion=\"qq\"/>\n\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"[+*/%\\|=;\\!&lt;&gt;!^&amp;~-]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"parenthesised\" attribute=\"Normal Text\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"Normal\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"Quasi-Quotation\" attribute=\"Operator\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"Normal\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"Tripple A-comment\" attribute=\"Comment\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<StringDetect attribute=\"Comment\" String=\"'''\" context=\"#pop\" endRegion=\"Tripple A-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Tripple Q-comment\" attribute=\"Comment\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCChar attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"&quot;&quot;&quot;\" context=\"#pop\" endRegion=\"Tripple Q-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Tripple A-string\" attribute=\"String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String\" String=\"'''\" context=\"#pop\" endRegion=\"Tripple A-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Tripple A-string\" attribute=\"Raw String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String\" String=\"'''\" context=\"#pop\" endRegion=\"Tripple A-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Tripple Q-string\" attribute=\"String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"#pop\" endRegion=\"Tripple Q-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Tripple Q-string\" attribute=\"Raw String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"#pop\" endRegion=\"Tripple Q-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Comment SlashSlash\" attribute=\"Comment\" lineEndContext=\"#pop\" >\n\t\t\t\t<LineContinue attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Single A-string\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"'\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Single Q-string\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw A-string\" attribute=\"Raw String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" char=\"'\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Q-string\" attribute=\"Raw String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%\\([a-zA-Z0-9_]+\\)[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%[a-zA-Z]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" char=\"&quot;\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t</contexts>\n\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Definition Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Operator\" defStyleNum=\"dsOperator\" />\n\t\t\t<itemData name=\"String Substitution\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Flow Control Keyword\" defStyleNum=\"dsControlFlow\"/>\n\t\t\t<itemData name=\"Builtin Function\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Special Variable\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Preprocessor\" defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"String Char\" defStyleNum=\"dsSpecialChar\"/>\n\t\t\t<itemData name=\"Long\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Int\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Hex\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Octal\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Complex\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Raw String\" defStyleNum=\"dsVerbatimString\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<folding indentationsensitive=\"1\" />\n\t\t<emptyLines>\n\t\t\t<emptyLine regexpr=\"\\s+\" casesensitive=\"false\"/>\n\t\t\t<emptyLine regexpr=\"\\s*#.*$\" casesensitive=\"false\"/>\n\t\t</emptyLines>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\" position=\"afterwhitespace\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" />\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/brightscript.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language\n\tname=\"BrightScript\"\n\tsection=\"Scripts\"\n\textensions=\"*.brs\"\n\tversion=\"5\"\n\tkateversion=\"5.0\"\n\tauthor=\"Daniel Levin (dendy.ua@gmail.com)\"\n\tlicense=\"MIT\">\n\n<highlighting>\n\n\n\n\n<list name=\"library\"><item>library</item></list>\n\n<list name=\"function\"><item>function</item></list>\n<list name=\"endfunction\"><item>endfunction</item></list>\n<list name=\"sub\"><item>sub</item></list>\n<list name=\"endsub\"><item>endsub</item></list>\n<list name=\"as\"><item>as</item></list>\n\n<list name=\"exit\"><item>exit</item></list>\n\n<list name=\"if\"><item>if</item></list>\n<list name=\"endif\"><item>endif</item></list>\n<list name=\"then\"><item>then</item></list>\n<list name=\"else\"><item>else</item></list>\n<list name=\"elseif\"><item>elseif</item></list>\n\n<list name=\"while\"><item>while</item></list>\n<list name=\"endwhile\"><item>endwhile</item></list>\n<list name=\"exitwhile\"><item>exitwhile</item></list>\n\n<list name=\"for\"><item>for</item></list>\n<list name=\"endfor\"><item>endfor</item></list>\n<list name=\"each\"><item>each</item></list>\n<list name=\"in\"><item>in</item></list>\n<list name=\"to\"><item>to</item></list>\n<list name=\"step\"><item>step</item></list>\n<list name=\"next\"><item>next</item></list>\n\n<list name=\"print\"><item>print</item></list>\n<list name=\"return\"><item>return</item></list>\n\n<list name=\"dim\"><item>dim</item></list>\n<list name=\"stop\"><item>stop</item></list>\n<list name=\"goto\"><item>goto</item></list>\n\n<list name=\"m\"><item>m</item></list>\n<list name=\"top\">\n\t<item>top</item>\n\t<item>global</item>\n</list>\n\n<list name=\"end_of_scope\">\n\t<item>then</item>\n\t<item>end</item>\n\t<item>exit</item>\n</list>\n\n<list name=\"unary\">\n\t<item>not</item>\n</list>\n\n<list name=\"builtin_functions\">\n\t<item>tab</item>\n\t<item>pos</item>\n\t<item>CreateObject</item>\n\t<item>Type</item>\n\t<item>GetGlobalAA</item>\n\t<item>Box</item>\n\t<item>Run</item>\n\t<item>Eval</item>\n\t<item>GetLastRunCompileError</item>\n\t<item>GetLastRunRuntimeError</item>\n\t<item>ObjFun</item>\n</list>\n\n<list name=\"utility_functions\">\n\t<item>Sleep</item>\n\t<item>Wait</item>\n\t<item>GetInterface</item>\n\t<item>FindMemberFunction</item>\n\t<item>UpTime</item>\n\t<item>RebootSystem</item>\n\t<item>ListDir</item>\n\t<item>ReadAsciiFile</item>\n\t<item>WriteAsciiFile</item>\n\t<item>CopyFile</item>\n\t<item>MoveFile</item>\n\t<item>MatchFiles</item>\n\t<item>DeleteFile</item>\n\t<item>DeleteDirectory</item>\n\t<item>CreateDirectory</item>\n\t<item>FormatDrive</item>\n\t<item>StrToI</item>\n\t<item>RunGarbageCollector</item>\n\t<item>ParseJson</item>\n\t<item>FormatJson</item>\n\t<item>Tr</item>\n</list>\n\n<list name=\"string_functions\">\n\t<item>UCase</item>\n\t<item>LCase</item>\n\t<item>Asc</item>\n\t<item>Chr</item>\n\t<item>Instr</item>\n\t<item>Left</item>\n\t<item>Len</item>\n\t<item>Mid</item>\n\t<item>Str</item>\n\t<item>StrI</item>\n\t<item>String</item>\n\t<item>StringI</item>\n\t<item>Val</item>\n\t<item>Substitute</item>\n</list>\n\n<list name=\"math_functions\">\n\t<item>Abs</item>\n\t<item>Atn</item>\n\t<item>Cdbl</item>\n\t<item>Cint</item>\n\t<item>Cos</item>\n\t<item>Csng</item>\n\t<item>Exp</item>\n\t<item>Fix</item>\n\t<item>Int</item>\n\t<item>Log</item>\n\t<item>Rnd</item>\n\t<item>Sgn</item>\n\t<item>Sin</item>\n\t<item>Sqr</item>\n\t<item>Tan</item>\n</list>\n\n<list name=\"comments\">\n\t<item>rem</item>\n</list>\n\n<list name=\"types\">\n\t<item>invalid</item>\n\t<item>void</item>\n\t<item>dynamic</item>\n\t<item>boolean</item>\n\t<item>integer</item>\n\t<item>longinteger</item>\n\t<item>float</item>\n\t<item>double</item>\n\t<item>string</item>\n\t<item>object</item>\n\t<item>function</item>\n\t<item>interface</item>\n</list>\n\n<list name=\"constants\">\n\t<item>true</item>\n\t<item>false</item>\n\t<item>invalid</item>\n\t<item>LINE_NUM</item>\n</list>\n\n\n\n\n<contexts>\n\n<!-- Contexts starting with @ are for inclusion only. -->\n\n<context name=\"global\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectSpaces/>\n\t<keyword String=\"library\" attribute=\"import\" context=\"library\"/>\n\t<IncludeRules context=\"@comment\"/>\n\t<IncludeRules context=\"@macro\"/>\n\t<IncludeRules context=\"@function\"/>\n\t<IncludeRules context=\"@sub\"/>\n</context>\n\n\n<!-- Import statement, which might appear at the global context:\n         library \"mylibname.brs\"\n-->\n<context name=\"library\" attribute=\"import\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectChar char=\"&quot;\" attribute=\"string\" context=\"#pop!string\"/>\n</context>\n\n\n<!-- Comments have higher priority over anything else. -->\n<context name=\"@comment\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectSpaces/>\n\t<DetectChar char=\"'\" attribute=\"comment\" context=\"comment\"/>\n\t<keyword String=\"comments\" attribute=\"comment\" context=\"comment\"/>\n</context>\n\n<context name=\"comment\" attribute=\"comment\" lineEndContext=\"#pop\">\n</context>\n\n\n<!-- Macro statement starts with # and might appear anywhere in the code:\n         #if foo\n             ...\n         #else\n             ...\n         #endif\n-->\n<context name=\"@macro\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectChar char=\"#\" attribute=\"macro\" context=\"macro_line\"/>\n</context>\n\n<context name=\"macro_line\" attribute=\"macro\" lineEndContext=\"#pop\">\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n\n<!-- Colon starts a new line. -->\n<context name=\"line_break\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<IncludeRules context=\"@line_break\"/>\n</context>\n\n<context name=\"@line_break\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectChar char=\":\" attribute=\"line_break\" context=\"#pop\"/>\n</context>\n\n\n<!-- Common rules for function and sub. -->\n<context name=\"@code_end\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<RegExpr String=\"end\\s+(if|for|while)\" insensitive=\"true\" attribute=\"control\"/>\n</context>\n\n<context name=\"arg_as_type\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectIdentifier attribute=\"var\" context=\"#pop!arg_params\"/>\n</context>\n\n<context name=\"arg_params\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces/>\n\t<keyword String=\"as\" context=\"as_type\" lookAhead=\"true\"/>\n\t<DetectChar char=\"=\" attribute=\"assign\" context=\"rvalue\"/>\n</context>\n\n<context name=\"as_type\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<keyword String=\"as\" attribute=\"keyword\" context=\"as_type_value\"/>\n</context>\n\n<context name=\"as_type_value\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<keyword String=\"types\" attribute=\"type\" context=\"#pop#pop\"/>\n\t<DetectIdentifier attribute=\"invalid\" context=\"#pop#pop\"/>\n</context>\n\n\n<!-- Regular function definition. -->\n<context name=\"@function\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<keyword String=\"function\" attribute=\"keyword\" context=\"function\" beginRegion=\"function\"/>\n</context>\n\n<context name=\"function\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"function_name\">\n</context>\n\n<context name=\"function_name\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!function_code\">\n\t<DetectSpaces/>\n\t<DetectIdentifier attribute=\"func\" context=\"#pop!func_open_brace\"/>\n\t<DetectChar char=\"(\" context=\"#pop!func_open_brace\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"func_open_brace\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!function_code\">\n\t<DetectSpaces/>\n\t<DetectChar char=\"(\" attribute=\"scope\" context=\"func_args\"/>\n</context>\n\n<context name=\"func_args\" attribute=\"g\" lineEndContext=\"#stay\" fallthroughContext=\"#pop#pop!function_code\">\n\t<DetectSpaces/>\n\t<DetectIdentifier context=\"arg_as_type\" lookAhead=\"true\"/>\n\t<DetectChar char=\")\" attribute=\"scope\" context=\"#pop#pop!function_ret\"/>\n\t<DetectChar char=\",\" attribute=\"coma\" context=\"arg_as_type\"/>\n</context>\n\n<context name=\"function_ret\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!function_code\">\n\t<DetectChar char=\" \" context=\"#stay\"/>\n\t<keyword String=\"as\" context=\"as_type\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"function_code\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectSpaces/>\n\t<RegExpr String=\"end\\s+function\" insensitive=\"true\" context=\"#pop!function_solid_end\" lookAhead=\"true\"/>\n\t<keyword String=\"endfunction\" context=\"#pop!function_solid_end\" lookAhead=\"true\"/>\n\t<IncludeRules context=\"@code\"/>\n</context>\n\n<context name=\"function_solid_end\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<StringDetect String=\"end\" insensitive=\"true\" attribute=\"keyword\" context=\"#pop!function_end\"/>\n</context>\n\n<context name=\"function_end\" attribute=\"keyword\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n\t<DetectSpaces/>\n\t<StringDetect String=\"function\" insensitive=\"true\" attribute=\"keyword\" context=\"#pop#pop\" endRegion=\"function\"/>\n</context>\n\n\n<!-- sub is a function with void return type. -->\n<context name=\"@sub\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<keyword String=\"sub\" attribute=\"keyword\" context=\"sub\" beginRegion=\"sub\"/>\n</context>\n\n<context name=\"sub\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"sub_name\">\n</context>\n\n<context name=\"sub_name\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!sub_code\">\n\t<DetectSpaces/>\n\t<DetectIdentifier attribute=\"func\" context=\"#pop!sub_open_brace\"/>\n\t<DetectChar char=\"(\" context=\"#pop!sub_open_brace\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"sub_open_brace\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!sub_code\">\n\t<DetectSpaces/>\n\t<DetectChar char=\"(\" attribute=\"scope\" context=\"sub_args\"/>\n</context>\n\n<context name=\"sub_args\" attribute=\"g\" lineEndContext=\"#stay\" fallthroughContext=\"#pop#pop!sub_code\">\n\t<DetectSpaces/>\n\t<DetectIdentifier context=\"arg_as_type\" lookAhead=\"true\"/>\n\t<DetectChar char=\")\" attribute=\"scope\" context=\"#pop#pop!sub_ret\"/>\n\t<DetectChar char=\",\" attribute=\"coma\" context=\"arg_as_type\"/>\n</context>\n\n<context name=\"sub_ret\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!sub_code\">\n\t<DetectChar char=\" \" context=\"#stay\"/>\n\t<keyword String=\"as\" context=\"as_type\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"sub_code\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectSpaces/>\n\t<RegExpr String=\"end\\s+sub\" insensitive=\"true\" context=\"#pop!sub_solid_end\" lookAhead=\"true\"/>\n\t<keyword String=\"endsub\" context=\"#pop!sub_solid_end\" lookAhead=\"true\"/>\n\t<IncludeRules context=\"@code\"/>\n</context>\n\n<context name=\"sub_solid_end\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<StringDetect String=\"end\" insensitive=\"true\" attribute=\"keyword\" context=\"#pop!sub_end\"/>\n</context>\n\n<context name=\"sub_end\" attribute=\"keyword\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n\t<DetectSpaces/>\n\t<StringDetect String=\"sub\" insensitive=\"true\" attribute=\"keyword\" context=\"#pop#pop\" endRegion=\"sub\"/>\n</context>\n\n\n<!-- @code represents execution body, including function and sub contents.\n-->\n<context name=\"@code\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectSpaces/>\n\t<IncludeRules context=\"@macro\"/>\n\t<IncludeRules context=\"@comment\"/>\n\t<IncludeRules context=\"@code_end\"/>\n\n\t<keyword String=\"print\" attribute=\"print\" context=\"print\"/>\n\t<keyword String=\"goto\" attribute=\"keyword\" context=\"goto\"/>\n\t<keyword String=\"return\" attribute=\"control\" context=\"rvalue\"/>\n\t<keyword String=\"stop\" attribute=\"keyword\"/>\n\n\t<keyword String=\"dim\" attribute=\"keyword\" context=\"dim\"/>\n\n\t<keyword String=\"if\" attribute=\"control\" context=\"rvalue\"/>\n\t<keyword String=\"then\" attribute=\"control\"/>\n\t<keyword String=\"else\" attribute=\"control\"/>\n\t<keyword String=\"elseif\" attribute=\"control\"/>\n\t<keyword String=\"endif\" attribute=\"control\"/>\n\n\t<keyword String=\"while\" attribute=\"control\" context=\"rvalue\"/>\n\t<keyword String=\"endwhile\" attribute=\"control\"/>\n\t<keyword String=\"exitwhile\" attribute=\"control\"/>\n\n\t<keyword String=\"for\" attribute=\"control\" context=\"for\"/>\n\t<keyword String=\"endfor\" attribute=\"control\"/>\n\t<keyword String=\"next\" attribute=\"control\"/>\n\n\t<keyword String=\"exit\" attribute=\"control\" context=\"exit\"/>\n\n\t<DetectChar char=\":\" context=\"line_break\" lookAhead=\"true\"/>\n\n\t<DetectIdentifier context=\"lvalue\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"print\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"rvalue\">\n\t<DetectChar char=\",\" attribute=\"coma\"/>\n\t<DetectChar char=\";\" attribute=\"coma\"/>\n\t<IncludeRules context=\"@line_break\"/>\n</context>\n\n<context name=\"goto\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectIdentifier attribute=\"label\" context=\"#pop\"/>\n</context>\n\n<context name=\"dim\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectIdentifier attribute=\"var\" context=\"#pop!dim_array\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"dim_array\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectChar char=\"[\" attribute=\"operator\" context=\"#pop!array\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"for\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!for_var\">\n\t<DetectSpaces/>\n\t<keyword String=\"each\" attribute=\"control\" context=\"#pop!for_each\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"for_each\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectIdentifier attribute=\"var\" context=\"#pop!for_in\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"for_in\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<keyword String=\"in\" attribute=\"control\" context=\"#pop!rvalue\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"for_var\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"lvalue\">\n\t<DetectSpaces/>\n\t<keyword String=\"to\" attribute=\"control\" context=\"#pop!for_to\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"for_to\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"rvalue\">\n\t<DetectSpaces/>\n\t<keyword String=\"step\" attribute=\"control\" context=\"#pop!rvalue\"/>\n</context>\n\n<context name=\"exit\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<keyword String=\"for\" attribute=\"control\" context=\"#pop\"/>\n\t<keyword String=\"while\" attribute=\"control\" context=\"#pop\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n\n\n<!-- Builtin functions are reserved keywords. They cannot be used as a local variable names.\n     Thus doing something like below is an error and will be highlighted with 'invalid':\n         eval = 1\n         foo = eval\n     It is still valid to use any word, including reserved ones, as an variable parameter:\n         foo.eval = 1\n         foo = bar.eval\n         foo.eval()\n-->\n<context name=\"@lvalue_builtin_functions\" attribute=\"g\" lineEndContext=\"#stay\">\n    <keyword String=\"builtin_functions\" context=\"#pop!lvalue_builtin_function\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"lvalue_builtin_function\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<RegExpr String=\"[a-zA-Z_][a-zA-Z0-1_]*\\s*\\(\" context=\"#pop!lvalue_builtin_call\" lookAhead=\"true\"/>\n\t<DetectIdentifier attribute=\"invalid\" context=\"#pop\"/>\n</context>\n\n<context name=\"lvalue_builtin_call\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectIdentifier attribute=\"builtin_func\" context=\"#pop!lvalue_call_open_brace\"/>\n</context>\n\n\n<context name=\"@rvalue_builtin_functions\" attribute=\"g\" lineEndContext=\"#stay\">\n    <keyword String=\"builtin_functions\" context=\"#pop!rvalue_builtin_function\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"rvalue_builtin_function\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<RegExpr String=\"[a-zA-Z_][a-zA-Z0-1_]*\\s*\\(\" context=\"#pop!rvalue_builtin_call\" lookAhead=\"true\"/>\n\t<DetectIdentifier attribute=\"invalid\" context=\"#pop\"/>\n</context>\n\n<context name=\"rvalue_builtin_call\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectIdentifier attribute=\"builtin_func\" context=\"#pop!rvalue_call_open_brace\"/>\n</context>\n\n\n<!-- Library functions have nothing special comparing to other functions. They just have different\n     highlighting colors. It is valid to shadow function with a variable with the same name,\n     although it is not recommended and might be considered as a warning by various linters.\n-->\n<context name=\"@lvalue_library_functions\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<keyword String=\"utility_functions\" context=\"#pop!lvalue_library_function\" lookAhead=\"true\"/>\n\t<keyword String=\"string_functions\" context=\"#pop!lvalue_library_function\" lookAhead=\"true\"/>\n\t<keyword String=\"math_functions\" context=\"#pop!lvalue_library_function\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"lvalue_library_function\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!lvalue_var\">\n\t<RegExpr String=\"[a-zA-Z_][a-zA-Z0-1_]*\\s*\\(\" context=\"#pop!lvalue_library_call\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"lvalue_library_call\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectIdentifier attribute=\"library_func\" context=\"#pop!lvalue_call_open_brace\"/>\n</context>\n\n\n<context name=\"@rvalue_library_functions\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<keyword String=\"utility_functions\" context=\"#pop!rvalue_library_function\" lookAhead=\"true\"/>\n\t<keyword String=\"string_functions\" context=\"#pop!rvalue_library_function\" lookAhead=\"true\"/>\n\t<keyword String=\"math_functions\" context=\"#pop!rvalue_library_function\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"rvalue_library_function\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!rvalue_var\">\n\t<RegExpr String=\"[a-zA-Z_][a-zA-Z0-1_]*\\s*\\(\" context=\"#pop!rvalue_library_call\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"rvalue_library_call\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectIdentifier attribute=\"library_func\" context=\"#pop!rvalue_call_open_brace\"/>\n</context>\n\n\n<!-- lvalue contexts represent expressions of the left side of the assignment operators or\n\t standalone function calls.\n-->\n<context name=\"lvalue\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!lvalue_exp\">\n\t<DetectSpaces/>\n\t<keyword String=\"m\" attribute=\"m\" context=\"#pop!lvalue_m_dot\"/>\n\t<IncludeRules context=\"@lvalue_builtin_functions\"/>\n\t<IncludeRules context=\"@lvalue_library_functions\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"lvalue_exp\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<RegExpr String=\"[a-zA-Z_][a-zA-Z0-1_]*\\s*\\(\" context=\"#pop!lvalue_call\" lookAhead=\"true\"/>\n\t<RegExpr String=\"[a-zA-Z_][a-zA-Z0-1_]*:\" attribute=\"label\" context=\"#pop\"/>\n\t<DetectIdentifier context=\"#pop!lvalue_var\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"lvalue_m_dot\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectChar char=\".\" attribute=\"operator\" context=\"#pop!lvalue_top\"/>\n\t<IncludeRules context=\"@comment\"/>\n\t<IncludeRules context=\"@lvalue_ops\"/>\n</context>\n\n<context name=\"lvalue_top\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<keyword String=\"top\" attribute=\"top\" context=\"#pop!lvalue_operator\"/>\n\t<DetectIdentifier context=\"#pop!lvalue_exp\" lookAhead=\"true\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"lvalue_var\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectIdentifier attribute=\"var\" context=\"#pop!lvalue_var_postfix\"/>\n</context>\n\n<context name=\"lvalue_var_postfix\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!lvalue_operator\">\n\t<AnyChar String=\"$%&amp;!#\" attribute=\"var\" context=\"#pop!lvalue_operator\"/>\n</context>\n\n<context name=\"lvalue_operator\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectChar char=\".\" attribute=\"operator\" context=\"#pop!lvalue_exp\"/>\n\t<IncludeRules context=\"@lvalue_ops\"/>\n</context>\n\n<context name=\"@lvalue_ops\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<IncludeRules context=\"@lvalue_call_open_brace\"/>\n\t<DetectChar char=\"[\" attribute=\"operator\" context=\"lvalue_array\"/>\n\t<RegExpr String=\"(=|\\+=|\\-=|\\*=|/=|\\\\=|&lt;&lt;=|&gt;&gt;=)\" attribute=\"assign\" context=\"#pop!rvalue\"/>\n</context>\n\n<context name=\"lvalue_array\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"rvalue\">\n\t<DetectSpaces/>\n\t<DetectChar char=\",\" attribute=\"coma\"/>\n\t<DetectChar char=\"]\" attribute=\"operator\" context=\"#pop!lvalue_operator\"/>\n</context>\n\n<context name=\"lvalue_call\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectIdentifier attribute=\"func\" context=\"#pop!lvalue_call_open_brace\"/>\n</context>\n\n<context name=\"lvalue_call_open_brace\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<IncludeRules context=\"@lvalue_call_open_brace\"/>\n</context>\n\n<context name=\"@lvalue_call_open_brace\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectChar char=\"(\" attribute=\"scope\" context=\"lvalue_call_args\"/>\n</context>\n\n<context name=\"lvalue_call_args\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"rvalue\">\n\t<DetectSpaces/>\n\t<DetectChar char=\")\" attribute=\"scope\" context=\"#pop#pop!lvalue_operator\"/>\n\t<DetectChar char=\",\" attribute=\"coma\"/>\n</context>\n\n\n<!-- rvalue contexts represent expressions on the right side of assignment operators and arguments\n\t to other functions, 'print' calls, object keys, array values, etc.\n-->\n<context name=\"rvalue\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces/>\n\t<DetectChar char=\"-\" attribute=\"unary\"/>\n\t<DetectChar char=\"+\" attribute=\"unary\"/>\n\t<IncludeRules context=\"@comment\"/>\n\t<IncludeRules context=\"@function\"/>\n\t<IncludeRules context=\"@sub\"/>\n\t<keyword String=\"unary\" attribute=\"unary\"/>\n\t<keyword String=\"end_of_scope\" context=\"#pop#pop\" lookAhead=\"true\"/>\n\t<DetectChar char=\"&quot;\" attribute=\"string\" context=\"#pop!string\"/>\n\t<DetectChar char=\"[\" attribute=\"operator\" context=\"#pop!array\"/>\n\t<DetectChar char=\"(\" attribute=\"scope\" context=\"#pop!rvalue_scope\"/>\n\t<DetectChar char=\"{\" attribute=\"operator\" context=\"#pop!object\"/>\n\t<keyword String=\"constants\" attribute=\"constant\" context=\"#pop!rvalue_operator\"/>\n\t<RegExpr String=\"[-+]?[0-9]*\\.[0-9]\" context=\"#pop!float\" lookAhead=\"true\"/>\n\t<RegExpr String=\"[-+]?[0-9]\" context=\"#pop!int\" lookAhead=\"true\"/>\n\t<StringDetect String=\"&amp;h\" insensitive=\"true\" attribute=\"dec\" context=\"#pop!hex\"/>\n\t<keyword String=\"m\" attribute=\"m\" context=\"#pop!rvalue_m_dot\"/>\n\t<IncludeRules context=\"@rvalue_builtin_functions\"/>\n\t<IncludeRules context=\"@rvalue_library_functions\"/>\n\t<IncludeRules context=\"@rvalue_dot\"/>\n</context>\n\n<context name=\"rvalue_var\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectIdentifier attribute=\"var\" context=\"#pop!rvalue_var_postfix\"/>\n</context>\n\n<context name=\"rvalue_var_postfix\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!rvalue_operator\">\n\t<AnyChar String=\"$%&amp;!#\" attribute=\"var\" context=\"#pop!rvalue_operator\"/>\n</context>\n\n<context name=\"rvalue_operator\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!rvalue_end\">\n\t<DetectSpaces/>\n\t<DetectChar char=\".\" attribute=\"operator\" context=\"#pop!rvalue_dot\"/>\n\t<DetectChar char=\"@\" attribute=\"operator\" context=\"#pop!rvalue_dot\"/>\n\t<IncludeRules context=\"@rvalue_ops\"/>\n</context>\n\n<context name=\"@rvalue_ops\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<IncludeRules context=\"@rvalue_call_open_brace\"/>\n\t<DetectChar char=\"[\" attribute=\"operator\" context=\"#pop!array\"/>\n</context>\n\n<context name=\"rvalue_end\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces/>\n\t<RegExpr String=\"(=|&lt;&gt;|&lt;&lt;|&gt;&gt;|&lt;=|&gt;=|&lt;|&gt;|\\^|\\-|\\+|\\*|\\/|\\\\)\" context=\"#pop!rvalue_binary\" lookAhead=\"true\"/>\n\t<RegExpr String=\"(and|or|mod)[\\W]\" insensitive=\"true\" context=\"#pop!rvalue_binary\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"rvalue_binary\" attribute=\"invalid\" lineEndContext=\"#stay\">\n\t<DetectSpaces/>\n\t<RegExpr String=\"(=|&lt;&gt;|&lt;&lt;|&gt;&gt;|&lt;=|&gt;=|&lt;|&gt;|\\^|\\-|\\+|\\*|\\/|\\\\|and|or|mod)\" insensitive=\"true\" attribute=\"binary\" context=\"#pop!rvalue\"/>\n</context>\n\n<context name=\"rvalue_m_dot\" attribute=\"g\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!rvalue_end\">\n\t<DetectSpaces/>\n\t<DetectChar char=\".\" attribute=\"operator\" context=\"#pop!rvalue_top\"/>\n\t<IncludeRules context=\"@comment\"/>\n\t<IncludeRules context=\"@rvalue_ops\"/>\n</context>\n\n<context name=\"rvalue_top\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<keyword String=\"top\" attribute=\"top\" context=\"#pop!rvalue_operator\"/>\n\t<DetectIdentifier context=\"#pop!rvalue_dot\" lookAhead=\"true\"/>\n\t<IncludeRules context=\"@comment\"/>\n</context>\n\n<context name=\"rvalue_scope\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"rvalue\">\n\t<DetectSpaces/>\n\t<DetectChar char=\")\" attribute=\"scope\" context=\"#pop!rvalue_operator\"/>\n</context>\n\n<context name=\"rvalue_dot\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<IncludeRules context=\"@rvalue_dot\"/>\n</context>\n\n<context name=\"@rvalue_dot\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<RegExpr String=\"[a-zA-Z_][a-zA-Z0-1_]*\\s*\\(\" context=\"#pop!rvalue_call\" lookAhead=\"true\"/>\n\t<DetectIdentifier context=\"#pop!rvalue_var\" lookAhead=\"true\"/>\n</context>\n\n\n<!-- Other rvalue expressions. -->\n<context name=\"string\" attribute=\"string\" lineEndContext=\"#pop#pop\">\n\t<DetectChar char=\"&quot;\" attribute=\"string\" context=\"#pop!rvalue_operator\"/>\n</context>\n\n<context name=\"array\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"rvalue\">\n\t<DetectSpaces/>\n\t<DetectChar char=\",\" attribute=\"coma\"/>\n\t<DetectChar char=\"]\" attribute=\"operator\" context=\"#pop!rvalue_operator\"/>\n</context>\n\n<context name=\"object\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectSpaces/>\n\t<IncludeRules context=\"@comment\"/>\n\t<DetectChar char=\",\" attribute=\"coma\"/>\n\t<DetectChar char=\"}\" attribute=\"operator\" context=\"#pop!rvalue_operator\"/>\n\t<DetectChar char=\"&quot;\" attribute=\"var\" context=\"object_param_string\"/>\n\t<DetectIdentifier attribute=\"var\" context=\"object_param_colon\"/>\n</context>\n\n<context name=\"object_param_string\" attribute=\"var\" lineEndContext=\"#pop\">\n\t<DetectChar char=\"&quot;\" attribute=\"var\" context=\"#pop!object_param_colon\"/>\n</context>\n\n<context name=\"object_param_colon\" attribute=\"g\" lineEndContext=\"#pop\">\n\t<DetectSpaces/>\n\t<IncludeRules context=\"@comment\"/>\n\t<DetectChar char=\":\" attribute=\"operator\" context=\"#pop!rvalue\"/>\n</context>\n\n<context name=\"float\" attribute=\"float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<!-- documentation says this is a valid string, but implementation gives compile error -->\n\t<!--<RegExpr String=\"[-+]?[0-9]*\\.[0-9]+([eE][-+]?[0-9]+)?\\$\" attribute=\"string\" context=\"postfix_delimiter\"/>-->\n\t<!--<RegExpr String=\"[-+]?[0-9]*\\.[0-9]+([eE][-+]?[0-9]+)?[%&amp;]\" attribute=\"dec\" context=\"postfix_delimiter\"/>-->\n\t<RegExpr String=\"[-+]?[0-9]*\\.[0-9]+([eE][-+]?[0-9]+)?[!#]?\" attribute=\"float\" context=\"postfix_delimiter\"/>\n</context>\n\n<context name=\"int\" attribute=\"dec\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<!-- documentation says this is a valid string, but implementation gives compile error -->\n\t<!--<RegExpr String=\"[-+]?[0-9]*\\$\" attribute=\"string\" context=\"postfix_delimiter\"/>-->\n\t<RegExpr String=\"[-+]?[0-9]*[!#]\" attribute=\"float\" context=\"postfix_delimiter\"/>\n\t<RegExpr String=\"[-+]?[0-9]*[%&amp;]?\" attribute=\"dec\" context=\"postfix_delimiter\"/>\n</context>\n\n<context name=\"hex\" attribute=\"invalid\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr String=\"[0-9a-fA-F]+\" insensitive=\"true\" attribute=\"dec\" context=\"#pop\"/>\n</context>\n\n<context name=\"postfix_delimiter\" attribute=\"g\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n\t<RegExpr String=\"[\\s\\W]\" context=\"#pop#pop!rvalue_operator\" lookAhead=\"true\"/>\n</context>\n\n<context name=\"rvalue_call\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectIdentifier attribute=\"func\" context=\"#pop!rvalue_call_open_brace\"/>\n</context>\n\n<context name=\"rvalue_call_open_brace\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<IncludeRules context=\"@rvalue_call_open_brace\"/>\n</context>\n\n<context name=\"@rvalue_call_open_brace\" attribute=\"g\" lineEndContext=\"#stay\">\n\t<DetectChar char=\"(\" attribute=\"scope\" context=\"rvalue_call_args\"/>\n</context>\n\n<context name=\"rvalue_call_args\" attribute=\"g\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"rvalue\">\n\t<DetectSpaces/>\n\t<DetectChar char=\")\" attribute=\"scope\" context=\"#pop#pop!rvalue_operator\"/>\n\t<DetectChar char=\",\" attribute=\"coma\"/>\n</context>\n\n</contexts>\n\n\n\n\n<itemDatas>\n\t<itemData name=\"g\"            defStyleNum=\"dsNormal\"/>\n\t<itemData name=\"import\"       defStyleNum=\"dsImport\"/>\n\t<itemData name=\"func\"         defStyleNum=\"dsFunction\"/>\n\t<itemData name=\"keyword\"      defStyleNum=\"dsKeyword\"/>\n\t<itemData name=\"control\"      defStyleNum=\"dsControlFlow\"/>\n\t<itemData name=\"assign\"       defStyleNum=\"dsOperator\"/>\n\t<itemData name=\"binary\"       defStyleNum=\"dsOperator\"/>\n\t<itemData name=\"unary\"        defStyleNum=\"dsOperator\"/>\n\t<itemData name=\"operator\"     defStyleNum=\"dsOperator\"/>\n\t<itemData name=\"scope\"        defStyleNum=\"dsOperator\"/>\n\t<itemData name=\"coma\"         defStyleNum=\"dsOperator\"/>\n\t<itemData name=\"type\"         defStyleNum=\"dsDataType\"/>\n\t<itemData name=\"var\"          defStyleNum=\"dsVariable\"/>\n\t<itemData name=\"comment\"      defStyleNum=\"dsComment\"/>\n\t<itemData name=\"print\"        defStyleNum=\"dsBuiltIn\"/>\n\t<itemData name=\"builtin_func\" defStyleNum=\"dsBuiltIn\"/>\n\t<itemData name=\"library_func\" defStyleNum=\"dsBuiltIn\"/>\n\t<itemData name=\"dec\"          defStyleNum=\"dsDecVal\"/>\n\t<itemData name=\"float\"        defStyleNum=\"dsFloat\"/>\n\t<itemData name=\"string\"       defStyleNum=\"dsString\"/>\n\t<itemData name=\"constant\"     defStyleNum=\"dsConstant\"/>\n\t<itemData name=\"macro\"        defStyleNum=\"dsPreprocessor\"/>\n\t<itemData name=\"label\"        defStyleNum=\"dsSpecialChar\"/>\n\t<itemData name=\"line_break\"   defStyleNum=\"dsSpecialChar\"/>\n\t<itemData name=\"m\"            defStyleNum=\"dsExtension\"/>\n\t<itemData name=\"top\"          defStyleNum=\"dsExtension\"/>\n\t<itemData name=\"invalid\"      defStyleNum=\"dsError\"/>\n</itemDatas>\n\n</highlighting>\n\n\n\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"'\"/>\n\t</comments>\n\n\t<keywords casesensitive=\"0\" additionalDeliminator=\"'\"/>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/c.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY int \"(?:[0-9](?:'?[0-9]+)*)\">\n    <!ENTITY hex_int \"(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f]+)*)\">\n    <!ENTITY exp_float \"(?:[eE][+-]?&int;)\">\n    <!ENTITY exp_hexfloat \"(?:[pP][-+]?&int;)\">\n\n    <!ENTITY ispphash \"(?:#|&#37;\\:|\\?\\?=)\">\n    <!ENTITY pphash \"&ispphash;\\s*\">\n]>\n<language name=\"C\" section=\"Sources\"\n          version=\"7\" kateversion=\"5.0\"\n          indenter=\"cstyle\"\n          extensions=\"*.c;*.C;*.h\"\n          mimetype=\"text/x-csrc;text/x-c++src;text/x-chdr\"\n          priority=\"5\">\n<!--\n\n    Fixes by Sebastian Pipping (webmaster@hartwork.org)\n\n    NOTE: Keep in sync with C++ highlighter! (cpp.xml)\n\n    Version 6: add more versatile numbers highlighting, taken from isocpp.xml\n-->\n  <highlighting>\n    <list name=\"controlflow\">\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>while</item>\n    </list>\n    <list name=\"keywords\">\n      <item>enum</item>\n      <item>extern</item>\n      <item>inline</item>\n      <item>sizeof</item>\n      <item>struct</item>\n      <item>typedef</item>\n      <item>union</item>\n      <item>_Alignas</item>\n      <item>_Alignof</item>\n      <item>_Atomic</item>\n      <item>_Noreturn</item>\n      <item>_Static_assert</item>\n      <item>_Thread_local</item>\n    </list>\n    <list name=\"types\">\n      <item>auto</item>\n      <item>char</item>\n      <item>const</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>register</item>\n      <item>restrict</item>\n      <item>short</item>\n      <item>signed</item>\n      <item>static</item>\n      <item>unsigned</item>\n      <item>void</item>\n      <item>volatile</item>\n      <item>int8_t</item>\n      <item>int16_t</item>\n      <item>int32_t</item>\n      <item>int64_t</item>\n      <item>uint8_t</item>\n      <item>uint16_t</item>\n      <item>uint32_t</item>\n      <item>uint64_t</item>\n      <item>int_least8_t</item>\n      <item>int_least16_t</item>\n      <item>int_least32_t</item>\n      <item>int_least64_t</item>\n      <item>uint_least8_t</item>\n      <item>uint_least16_t</item>\n      <item>uint_least32_t</item>\n      <item>uint_least64_t</item>\n      <item>int_fast8_t</item>\n      <item>int_fast16_t</item>\n      <item>int_fast32_t</item>\n      <item>int_fast64_t</item>\n      <item>uint_fast8_t</item>\n      <item>uint_fast16_t</item>\n      <item>uint_fast32_t</item>\n      <item>uint_fast64_t</item>\n      <item>size_t</item>\n      <item>ssize_t</item>\n      <item>wchar_t</item>\n      <item>intptr_t</item>\n      <item>uintptr_t</item>\n      <item>intmax_t</item>\n      <item>uintmax_t</item>\n      <item>ptrdiff_t</item>\n      <item>sig_atomic_t</item>\n      <item>wint_t</item>\n      <item>_Bool</item>\n      <item>bool</item>\n      <item>_Complex</item>\n      <item>complex</item>\n      <item>_Imaginary</item>\n      <item>imaginary</item>\n      <item>_Generic</item>\n      <item>va_list</item>\n      <item>FILE</item>\n      <item>fpos_t</item>\n      <item>time_t</item>\n      <item>max_align_t</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n\t<RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"&pphash;if\\s+0\\s*$\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr context=\"AfterHash\" String=\"&ispphash;\" firstNonSpace=\"true\" lookAhead=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlflow\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <DetectIdentifier />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"&lt;\" char1=\"%\" beginRegion=\"Brace1\" /> <!-- Digraph: { -->\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"%\" char1=\"&gt;\" endRegion=\"Brace1\" /> <!-- Digraph: } -->\n\n        <!-- Match numbers -->\n        <RegExpr attribute=\"Decimal\" context=\"Number\" String=\"\\.?[0-9]\" lookAhead=\"true\" />\n\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Region Marker\" lineEndContext=\"#pop\" name=\"Region Marker\">\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"AfterHash\">\n        <RegExpr attribute=\"Preprocessor\" context=\"Include\" String=\"&pphash;(?:include|include_next)\" insensitive=\"true\" firstNonSpace=\"true\" />\n\n        <!-- define, elif, else, endif, error, if, ifdef, ifndef, line, pragma, undef, warning -->\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"&pphash;if(?:def|ndef)?(?=\\s+\\S)\" insensitive=\"true\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"&pphash;endif\" insensitive=\"true\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Define\" String=\"&pphash;define.*((?=\\\\))\" insensitive=\"true\" firstNonSpace=\"true\" />\n\n        <!-- folding for apple style #pragma mark - label -->\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"&pphash;pragma\\s+mark\\s+-\\s*$\" insensitive=\"true\" firstNonSpace=\"true\" endRegion=\"pragma_mark\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"&pphash;pragma\\s+mark\" insensitive=\"true\" firstNonSpace=\"true\" endRegion=\"pragma_mark\" beginRegion=\"pragma_mark\" />\n\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"&pphash;(?:el(?:se|if)|define|undef|line|error|warning|pragma)\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"&ispphash;\\s+[0-9]+\" insensitive=\"true\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Include\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"Preprocessor\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"&pphash;if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"&pphash;el(?:se|if)\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"&pphash;endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"&pphash;if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"&pphash;endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n\n      <context name=\"Number\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Float\" context=\"FloatSuffix\" String=\"\\.&int;&exp_float;?|&int;(?:&exp_float;|\\.&int;?&exp_float;?)|0[xX](?:\\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\\.&hex_int;?&exp_hexfloat;?))\" />\n        <IncludeRules context=\"Integer\" />\n      </context>\n\n      <context name=\"Integer\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Hex\" context=\"IntSuffix\" String=\"0[xX]&hex_int;\" />\n        <RegExpr attribute=\"Binary\" context=\"IntSuffix\" String=\"0[Bb][01](?:'?[01]+)*\" />\n        <RegExpr attribute=\"Octal\" context=\"IntSuffix\" String=\"0(?:'?[0-7]+)+\" />\n        <RegExpr attribute=\"Decimal\" context=\"IntSuffix\" String=\"0(?![xXbB0-9])|[1-9](?:'?[0-9]+)*\" />\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\"[._0-9A-Za-z']+\" />\n      </context>\n\n      <context name=\"IntSuffix\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"NumericSuffixError\">\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"'\" />\n        <AnyChar attribute=\"Error\" context=\"#pop!IntSuffixPattern\" String=\"uUlLimunshyd_\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"IntSuffixPattern\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"NumericSuffixError\">\n        <RegExpr attribute=\"Standard Suffix\" context=\"NumericSuffixError\" String=\"[Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?\" />\n      </context>\n\n      <context name=\"FloatSuffix\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"NumericSuffixError\">\n        <AnyChar attribute=\"Standard Suffix\" context=\"NumericSuffixError\" String=\"fFlL\" />\n      </context>\n\n      <context name=\"NumericSuffixError\" attribute=\"Error\" lineEndContext=\"#pop#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop\">\n        <RegExpr attribute=\"Error\" context=\"#pop#pop#pop\" String=\"\\.[_0-9A-Za-z]*|[_0-9A-Za-z]+\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Control Flow\" defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Binary\"       defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Standard Suffix\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\" />\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n      <itemData name=\"Prep. Lib\"    defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n      <itemData name=\"Error\"        defStyleNum=\"dsError\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" additionalDeliminator=\"'&quot;\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/carto-css.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!-- Kate syntax highlighting definition for Mapbox CartoCSS -->\n\n<language name=\"CartoCSS\" version=\"1\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.mss\" author=\"Lukas Sommer\" license=\"CC0 Public Domain Dedication, version 1.0, as published by Creative Commons\">\n\n\t<highlighting>\n\n\t\t<list name=\"list_boolean\">\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\t\t</list>\n\n\t\t<list name=\"list_colornames\"> <!-- The 141 official CSS colors -->\n\t\t\t<item>AliceBlue</item>\n\t\t\t<item>AntiqueWhite</item>\n\t\t\t<item>Aqua</item>\n\t\t\t<item>Aquamarine</item>\n\t\t\t<item>Azure</item>\n\t\t\t<item>Beige</item>\n\t\t\t<item>Bisque</item>\n\t\t\t<item>Black</item>\n\t\t\t<item>BlanchedAlmond</item>\n\t\t\t<item>Blue</item>\n\t\t\t<item>BlueViolet</item>\n\t\t\t<item>Brown</item>\n\t\t\t<item>BurlyWood</item>\n\t\t\t<item>CadetBlue</item>\n\t\t\t<item>Chartreuse</item>\n\t\t\t<item>Chocolate</item>\n\t\t\t<item>Coral</item>\n\t\t\t<item>CornflowerBlue</item>\n\t\t\t<item>Cornsilk</item>\n\t\t\t<item>Crimson</item>\n\t\t\t<item>Cyan</item>\n\t\t\t<item>DarkBlue</item>\n\t\t\t<item>DarkCyan</item>\n\t\t\t<item>DarkGoldenRod</item>\n\t\t\t<item>DarkGray</item>\n\t\t\t<item>DarkGreen</item>\n\t\t\t<item>DarkKhaki</item>\n\t\t\t<item>DarkMagenta</item>\n\t\t\t<item>DarkOliveGreen</item>\n\t\t\t<item>DarkOrange</item>\n\t\t\t<item>DarkOrchid</item>\n\t\t\t<item>DarkRed</item>\n\t\t\t<item>DarkSalmon</item>\n\t\t\t<item>DarkSeaGreen</item>\n\t\t\t<item>DarkSlateBlue</item>\n\t\t\t<item>DarkSlateGray</item>\n\t\t\t<item>DarkTurquoise</item>\n\t\t\t<item>DarkViolet</item>\n\t\t\t<item>DeepPink</item>\n\t\t\t<item>DeepSkyBlue</item>\n\t\t\t<item>DimGray</item>\n\t\t\t<item>DodgerBlue</item>\n\t\t\t<item>FireBrick</item>\n\t\t\t<item>FloralWhite</item>\n\t\t\t<item>ForestGreen</item>\n\t\t\t<item>Fuchsia</item>\n\t\t\t<item>Gainsboro</item>\n\t\t\t<item>GhostWhite</item>\n\t\t\t<item>Gold</item>\n\t\t\t<item>GoldenRod</item>\n\t\t\t<item>Gray</item>\n\t\t\t<item>Green</item>\n\t\t\t<item>GreenYellow</item>\n\t\t\t<item>HoneyDew</item>\n\t\t\t<item>HotPink</item>\n\t\t\t<item>IndianRed</item>\n\t\t\t<item>Indigo</item>\n\t\t\t<item>Ivory</item>\n\t\t\t<item>Khaki</item>\n\t\t\t<item>Lavender</item>\n\t\t\t<item>LavenderBlush</item>\n\t\t\t<item>LawnGreen</item>\n\t\t\t<item>LemonChiffon</item>\n\t\t\t<item>LightBlue</item>\n\t\t\t<item>LightCoral</item>\n\t\t\t<item>LightCyan</item>\n\t\t\t<item>LightGoldenRodYellow</item>\n\t\t\t<item>LightGray</item>\n\t\t\t<item>LightGreen</item>\n\t\t\t<item>LightPink</item>\n\t\t\t<item>LightSalmon</item>\n\t\t\t<item>LightSeaGreen</item>\n\t\t\t<item>LightSkyBlue</item>\n\t\t\t<item>LightSlateGray</item>\n\t\t\t<item>LightSteelBlue</item>\n\t\t\t<item>LightYellow</item>\n\t\t\t<item>Lime</item>\n\t\t\t<item>LimeGreen</item>\n\t\t\t<item>Linen</item>\n\t\t\t<item>Magenta</item>\n\t\t\t<item>Maroon</item>\n\t\t\t<item>MediumAquaMarine</item>\n\t\t\t<item>MediumBlue</item>\n\t\t\t<item>MediumOrchid</item>\n\t\t\t<item>MediumPurple</item>\n\t\t\t<item>MediumSeaGreen</item>\n\t\t\t<item>MediumSlateBlue</item>\n\t\t\t<item>MediumSpringGreen</item>\n\t\t\t<item>MediumTurquoise</item>\n\t\t\t<item>MediumVioletRed</item>\n\t\t\t<item>MidnightBlue</item>\n\t\t\t<item>MintCream</item>\n\t\t\t<item>MistyRose</item>\n\t\t\t<item>Moccasin</item>\n\t\t\t<item>NavajoWhite</item>\n\t\t\t<item>Navy</item>\n\t\t\t<item>OldLace</item>\n\t\t\t<item>Olive</item>\n\t\t\t<item>OliveDrab</item>\n\t\t\t<item>Orange</item>\n\t\t\t<item>OrangeRed</item>\n\t\t\t<item>Orchid</item>\n\t\t\t<item>PaleGoldenRod</item>\n\t\t\t<item>PaleGreen</item>\n\t\t\t<item>PaleTurquoise</item>\n\t\t\t<item>PaleVioletRed</item>\n\t\t\t<item>PapayaWhip</item>\n\t\t\t<item>PeachPuff</item>\n\t\t\t<item>Peru</item>\n\t\t\t<item>Pink</item>\n\t\t\t<item>Plum</item>\n\t\t\t<item>PowderBlue</item>\n\t\t\t<item>Purple</item>\n\t\t\t<item>Red</item>\n\t\t\t<item>RosyBrown</item>\n\t\t\t<item>RoyalBlue</item>\n\t\t\t<item>SaddleBrown</item>\n\t\t\t<item>Salmon</item>\n\t\t\t<item>SandyBrown</item>\n\t\t\t<item>SeaGreen</item>\n\t\t\t<item>SeaShell</item>\n\t\t\t<item>Sienna</item>\n\t\t\t<item>Silver</item>\n\t\t\t<item>SkyBlue</item>\n\t\t\t<item>SlateBlue</item>\n\t\t\t<item>SlateGray</item>\n\t\t\t<item>Snow</item>\n\t\t\t<item>SpringGreen</item>\n\t\t\t<item>SteelBlue</item>\n\t\t\t<item>Tan</item>\n\t\t\t<item>Teal</item>\n\t\t\t<item>Thistle</item>\n\t\t\t<item>Tomato</item>\n\t\t\t<item>Turquoise</item>\n\t\t\t<item>Violet</item>\n\t\t\t<item>Wheat</item>\n\t\t\t<item>White</item>\n\t\t\t<item>WhiteSmoke</item>\n\t\t\t<item>Yellow</item>\n\t\t\t<item>YellowGreen</item>\n\t\t</list>\n\n\t\t\t<list name=\"list_properties\"> <!-- Based on https://github.com/mapbox/carto/blob/master/docs/latest.md (date: 19. december 2014) -->\n\n\t\t\t<!-- Value type: boolean -->\n\t\t\t<item>line-clip</item> <!-- Element type: line -->\n\t\t\t<item>line-pattern-clip</item> <!-- Element type: line-pattern -->\n\t\t\t<item>marker-allow-overlap</item> <!-- Element type: markers -->\n\t\t\t<item>marker-clip</item> <!-- Element type: markers -->\n\t\t\t<item>marker-ignore-placement</item> <!-- Element type: markers -->\n\t\t\t<item>point-allow-overlap</item> <!-- Element type: point -->\n\t\t\t<item>point-ignore-placement</item> <!-- Element type: point -->\n\t\t\t<item>polygon-clip</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-pattern-clip</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>shield-allow-overlap</item> <!-- Element type: shield -->\n\t\t\t<item>shield-avoid-edges</item> <!-- Element type: shield -->\n\t\t\t<item>shield-clip</item> <!-- Element type: shield -->\n\t\t\t<item>shield-unlock-image</item> <!-- Element type: shield -->\n\t\t\t<item>shield-wrap-before</item> <!-- Element type: shield -->\n\t\t\t<item>text-allow-overlap</item> <!-- Element type: text -->\n\t\t\t<item>text-avoid-edges</item> <!-- Element type: text -->\n\t\t\t<item>text-clip</item> <!-- Element type: text -->\n\n\t\t\t<!-- Value type: color -->\n\t\t\t<item>building-fill</item> <!-- Element type: building -->\n\t\t\t<item>line-color</item> <!-- Element type: line -->\n\t\t\t<item>background-color</item> <!-- Element type: map -->\n\t\t\t<item>marker-fill</item> <!-- Element type: markers -->\n\t\t\t<item>marker-line-color</item> <!-- Element type: markers -->\n\t\t\t<item>polygon-fill</item> <!-- Element type: polygon -->\n\t\t\t<item>raster-colorizer-default-color</item> <!-- Element type: raster -->\n\t\t\t<item>shield-fill</item> <!-- Element type: shield -->\n\t\t\t<item>shield-halo-fill</item> <!-- Element type: shield -->\n\t\t\t<item>text-fill</item> <!-- Element type: text -->\n\t\t\t<item>text-halo-fill</item> <!-- Element type: text -->\n\n\t\t\t<!-- Value type: expression -->\n\t\t\t<item>building-height</item> <!-- Element type: building -->\n\t\t\t<item>marker-height</item> <!-- Element type: markers -->\n\t\t\t<item>marker-width</item> <!-- Element type: markers -->\n\t\t\t<item>shield-name</item> <!-- Element type: shield -->\n\t\t\t<item>text-name</item> <!-- Element type: text -->\n\t\t\t<item>text-orientation</item> <!-- Element type: text -->\n\n\t\t\t<!-- Value type: float -->\n\t\t\t<item>opacity</item> <!-- Element type: All elements -->\n\t\t\t<item>building-fill-opacity</item> <!-- Element type: building -->\n\t\t\t<item>line-gamma</item> <!-- Element type: line -->\n\t\t\t<item>line-miterlimit</item> <!-- Element type: line -->\n\t\t\t<item>line-offset</item> <!-- Element type: line -->\n\t\t\t<item>line-opacity</item> <!-- Element type: line -->\n\t\t\t<item>line-simplify</item> <!-- Element type: line -->\n\t\t\t<item>line-smooth</item> <!-- Element type: line -->\n\t\t\t<item>line-width</item> <!-- Element type: line -->\n\t\t\t<item>line-pattern-offset</item> <!-- Element type: line-pattern -->\n\t\t\t<item>line-pattern-simplify</item> <!-- Element type: line-pattern -->\n\t\t\t<item>line-pattern-smooth</item> <!-- Element type: line-pattern -->\n\t\t\t<item>background-image-opacity</item> <!-- Element type: map -->\n\t\t\t<item>buffer-size</item> <!-- Element type: map -->\n\t\t\t<item>marker-fill-opacity</item> <!-- Element type: markers -->\n\t\t\t<item>marker-line-opacity</item> <!-- Element type: markers -->\n\t\t\t<item>marker-line-width</item> <!-- Element type: markers -->\n\t\t\t<item>marker-max-error</item> <!-- Element type: markers -->\n\t\t\t<item>marker-opacity</item> <!-- Element type: markers -->\n\t\t\t<item>marker-smooth</item> <!-- Element type: markers -->\n\t\t\t<item>marker-spacing</item> <!-- Element type: markers -->\n\t\t\t<item>point-opacity</item> <!-- Element type: point -->\n\t\t\t<item>polygon-gamma</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-opacity</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-simplify</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-smooth</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-pattern-gamma</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>polygon-pattern-opacity</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>polygon-pattern-simplify</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>polygon-pattern-smooth</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>raster-colorizer-epsilon</item> <!-- Element type: raster -->\n\t\t\t<item>raster-filter-factor</item> <!-- Element type: raster -->\n\t\t\t<item>raster-opacity</item> <!-- Element type: raster -->\n\t\t\t<item>shield-dx</item> <!-- Element type: shield -->\n\t\t\t<item>shield-dy</item> <!-- Element type: shield -->\n\t\t\t<item>shield-halo-radius</item> <!-- Element type: shield -->\n\t\t\t<item>shield-min-distance</item> <!-- Element type: shield -->\n\t\t\t<item>shield-min-padding</item> <!-- Element type: shield -->\n\t\t\t<item>shield-opacity</item> <!-- Element type: shield -->\n\t\t\t<item>shield-size</item> <!-- Element type: shield -->\n\t\t\t<item>shield-spacing</item> <!-- Element type: shield -->\n\t\t\t<item>shield-text-dx</item> <!-- Element type: shield -->\n\t\t\t<item>shield-text-dy</item> <!-- Element type: shield -->\n\t\t\t<item>shield-text-opacity</item> <!-- Element type: shield -->\n\t\t\t<item>text-character-spacing</item> <!-- Element type: text -->\n\t\t\t<item>text-dx</item> <!-- Element type: text -->\n\t\t\t<item>text-dy</item> <!-- Element type: text -->\n\t\t\t<item>text-halo-radius</item> <!-- Element type: text -->\n\t\t\t<item>text-max-char-angle-delta</item> <!-- Element type: text -->\n\t\t\t<item>text-min-distance</item> <!-- Element type: text -->\n\t\t\t<item>text-min-padding</item> <!-- Element type: text -->\n\t\t\t<item>text-min-path-length</item> <!-- Element type: text -->\n\t\t\t<item>text-opacity</item> <!-- Element type: text -->\n\t\t\t<item>text-size</item> <!-- Element type: text -->\n\n\t\t\t<!-- Value type: functions -->\n\t\t\t<item>direct-image-filters</item> <!-- Element type: All elements -->\n\t\t\t<item>image-filters</item> <!-- Element type: All elements -->\n\t\t\t<item>line-geometry-transform</item> <!-- Element type: line -->\n\t\t\t<item>line-pattern-geometry-transform</item> <!-- Element type: line-pattern -->\n\t\t\t<item>marker-geometry-transform</item> <!-- Element type: markers -->\n\t\t\t<item>marker-transform</item> <!-- Element type: markers -->\n\t\t\t<item>point-transform</item> <!-- Element type: point -->\n\t\t\t<item>polygon-geometry-transform</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-pattern-geometry-transform</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>shield-transform</item> <!-- Element type: shield -->\n\n\t\t\t<!-- Value type: keyword -->\n\t\t\t<item>comp-op</item> <!-- Element type: All elements -->\n\t\t\t<item>line-cap</item> <!-- Element type: line -->\n\t\t\t<item>line-comp-op</item> <!-- Element type: line -->\n\t\t\t<item>line-gamma-method</item> <!-- Element type: line -->\n\t\t\t<item>line-join</item> <!-- Element type: line -->\n\t\t\t<item>line-rasterizer</item> <!-- Element type: line -->\n\t\t\t<item>line-simplify-algorithm</item> <!-- Element type: line -->\n\t\t\t<item>line-pattern-comp-op</item> <!-- Element type: line-pattern -->\n\t\t\t<item>line-pattern-simplify-algorithm</item> <!-- Element type: line-pattern -->\n\t\t\t<item>background-image-comp-op</item> <!-- Element type: map -->\n\t\t\t<item>marker-comp-op</item> <!-- Element type: markers -->\n\t\t\t<item>marker-multi-policy</item> <!-- Element type: markers -->\n\t\t\t<item>marker-placement</item> <!-- Element type: markers -->\n\t\t\t<item>marker-type</item> <!-- Element type: markers -->\n\t\t\t<item>point-comp-op</item> <!-- Element type: point -->\n\t\t\t<item>point-placement</item> <!-- Element type: point -->\n\t\t\t<item>polygon-comp-op</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-gamma-method</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-simplify-algorithm</item> <!-- Element type: polygon -->\n\t\t\t<item>polygon-pattern-alignment</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>polygon-pattern-comp-op</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>polygon-pattern-simplify-algorithm</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>raster-colorizer-default-mode</item> <!-- Element type: raster -->\n\t\t\t<item>raster-comp-op</item> <!-- Element type: raster -->\n\t\t\t<item>raster-scaling</item> <!-- Element type: raster -->\n\t\t\t<item>shield-comp-op</item> <!-- Element type: shield -->\n\t\t\t<item>shield-horizontal-alignment</item> <!-- Element type: shield -->\n\t\t\t<item>shield-justify-alignment</item> <!-- Element type: shield -->\n\t\t\t<item>shield-placement</item> <!-- Element type: shield -->\n\t\t\t<item>shield-placement-type</item> <!-- Element type: shield -->\n\t\t\t<item>shield-text-transform</item> <!-- Element type: shield -->\n\t\t\t<item>shield-vertical-alignment</item> <!-- Element type: shield -->\n\t\t\t<item>text-align</item> <!-- Element type: text -->\n\t\t\t<item>text-comp-op</item> <!-- Element type: text -->\n\t\t\t<item>text-halo-rasterizer</item> <!-- Element type: text -->\n\t\t\t<item>text-horizontal-alignment</item> <!-- Element type: text -->\n\t\t\t<item>text-placement</item> <!-- Element type: text -->\n\t\t\t<item>text-placement-type</item> <!-- Element type: text -->\n\t\t\t<item>text-transform</item> <!-- Element type: text -->\n\t\t\t<item>text-vertical-alignment</item> <!-- Element type: text -->\n\n\t\t\t<!-- Value type: numbers -->\n\t\t\t<item>line-dash-offset</item> <!-- Element type: line -->\n\t\t\t<item>line-dasharray</item> <!-- Element type: line -->\n\n\t\t\t<!-- Value type: string -->\n\t\t\t<item>debug-mode</item> <!-- Element type: debug -->\n\t\t\t<item>base</item> <!-- Element type: map -->\n\t\t\t<item>srs</item> <!-- Element type: map -->\n\t\t\t<item>shield-face-name</item> <!-- Element type: shield -->\n\t\t\t<item>shield-placements</item> <!-- Element type: shield -->\n\t\t\t<item>shield-wrap-character</item> <!-- Element type: shield -->\n\t\t\t<item>text-face-name</item> <!-- Element type: text -->\n\t\t\t<item>text-placements</item> <!-- Element type: text -->\n\t\t\t<item>text-wrap-character</item> <!-- Element type: text -->\n\n\t\t\t<!-- Value type: tags -->\n\t\t\t<item>raster-colorizer-stops</item> <!-- Element type: raster -->\n\n\t\t\t<!-- Value type: unsigned -->\n\t\t\t<item>raster-mesh-size</item> <!-- Element type: raster -->\n\t\t\t<item>shield-character-spacing</item> <!-- Element type: shield -->\n\t\t\t<item>shield-line-spacing</item> <!-- Element type: shield -->\n\t\t\t<item>shield-wrap-width</item> <!-- Element type: shield -->\n\t\t\t<item>text-label-position-tolerance</item> <!-- Element type: text -->\n\t\t\t<item>text-line-spacing</item> <!-- Element type: text -->\n\t\t\t<item>text-ratio</item> <!-- Element type: text -->\n\t\t\t<item>text-spacing</item> <!-- Element type: text -->\n\t\t\t<item>text-wrap-width</item> <!-- Element type: text -->\n\n\t\t\t<!-- Value type: uri -->\n\t\t\t<item>line-pattern-file</item> <!-- Element type: line-pattern -->\n\t\t\t<item>background-image</item> <!-- Element type: map -->\n\t\t\t<item>font-directory</item> <!-- Element type: map -->\n\t\t\t<item>marker-file</item> <!-- Element type: markers -->\n\t\t\t<item>point-file</item> <!-- Element type: point -->\n\t\t\t<item>polygon-pattern-file</item> <!-- Element type: polygon-pattern -->\n\t\t\t<item>shield-file</item> <!-- Element type: shield -->\n\n\t\t</list>\n\n\t\t<contexts>\n\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"context_default\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"context_comment_multiline\" char=\"/\" char1=\"*\" lookAhead=\"true\" beginRegion=\"region_comment\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"context_comment_singleline\" char=\"/\" char1=\"/\" lookAhead=\"true\" />\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\"{\" beginRegion=\"region_braces\"/>\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\"}\" endRegion=\"region_braces\"/>\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\";:,!/*-+[]=&gt;&lt;()\"/>\n\t\t\t\t<keyword attribute=\"Property\" context=\"#stay\" String=\"list_properties\" />\n\t\t\t\t<keyword attribute=\"Boolean\" context=\"#stay\" String=\"list_boolean\" />\n\t\t\t\t<RegExpr attribute=\"Number\" String=\"((\\d+(\\.\\d+)?)|(\\.\\d+))%?\" />\n\t\t\t\t<RegExpr attribute=\"Variable\" String=\"@[\\w_-]+\" />\n\t\t\t\t<RegExpr attribute=\"Color\" String=\"(#[\\dabcdefABCDEF]{3}|#[\\dabcdefABCDEF]{6})(?=(\\W|$))\" />\n\t\t\t\t<keyword attribute=\"Color\" context=\"#stay\" String=\"list_colornames\" />\n\t\t\t\t<RegExpr attribute=\"Layer ID\" String=\"#[\\w_-]+\"/>\n\t\t\t\t<RegExpr attribute=\"Class\" String=\"\\.[\\w_-]+\" />\n\t\t\t\t<RangeDetect char=\"&quot;\"  char1=\"&quot;\" attribute=\"String\" />\n\t\t\t\t<RangeDetect char=\"'\"  char1=\"'\" attribute=\"String\" />\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"context_comment_multiline\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"region_comment\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"context_comment_singleline\">\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t</context>\n\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Operator\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Variable\"  defStyleNum=\"dsVariable\"/>\n\t\t\t<itemData name=\"Class\"  defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Layer ID\" defStyleNum=\"dsDataType\" />\n\t\t\t<itemData name=\"Property\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"String\"  defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Number\"  defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Color\" defStyleNum=\"dsOthers\" />\n\t\t\t<itemData name=\"Boolean\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\t\t</itemDatas>\n\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"region_comment\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"false\" weakDeliminator=\"-\"/>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ccss.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- http://www.w3.org/TR/CSS21/syndata.html#tokenization -->\n  <!ENTITY nmstart \"[_a-zA-Z]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n  <!ENTITY nmchar  \"[_a-zA-Z0-9-]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n]>\n\n<language name=\"CleanCSS\" version=\"3\" kateversion=\"3.4\" section=\"Markup\" extensions=\"*.ccss\" author=\"Massimiliano Torromeo\" license=\"BSD\">\n\n<highlighting>\n\t<list name=\"properties\">\n\t\t<!-- CSS2 -->\n\t\t<item>azimuth</item>\n\t\t<item>background</item>\n\t\t<item>background-attachment</item>\n\t\t<item>background-color</item>\n\t\t<item>background-image</item>\n\t\t<item>background-position</item>\n\t\t<item>background-repeat</item>\n\t\t<item>border</item>\n\t\t<item>border-bottom</item>\n\t\t<item>border-bottom-color</item>\n\t\t<item>border-bottom-style</item>\n\t\t<item>border-bottom-width</item>\n\t\t<item>border-collapse</item>\n\t\t<item>border-color</item>\n\t\t<item>border-left</item>\n\t\t<item>border-left-color</item>\n\t\t<item>border-left-style</item>\n\t\t<item>border-left-width</item>\n\t\t<item>border-right</item>\n\t\t<item>border-right-color</item>\n\t\t<item>border-right-style</item>\n\t\t<item>border-right-width</item>\n\t\t<item>border-spacing</item>\n\t\t<item>border-style</item>\n\t\t<item>border-top</item>\n\t\t<item>border-top-color</item>\n\t\t<item>border-top-style</item>\n\t\t<item>border-top-width</item>\n\t\t<item>border-width</item>\n\t\t<item>bottom</item>\n\t\t<item>caption-side</item>\n\t\t<item>clear</item>\n\t\t<item>clip</item>\n\t\t<item>color</item>\n\t\t<item>content</item>\n\t\t<item>counter-increment</item>\n\t\t<item>counter-reset</item>\n\t\t<item>cue</item>\n\t\t<item>cue-after</item>\n\t\t<item>cue-before</item>\n\t\t<item>cursor</item>\n\t\t<item>direction</item>\n\t\t<item>display</item>\n\t\t<item>elevation</item>\n\t\t<item>empty-cells</item>\n\t\t<item>float</item>\n\t\t<item>font</item>\n\t\t<item>font-family</item>\n\t\t<item>font-size</item>\n\t\t<item>font-size-adjust</item>\n\t\t<item>font-stretch</item>\n\t\t<item>font-style</item>\n\t\t<item>font-variant</item>\n\t\t<item>font-weight</item>\n\t\t<item>height</item>\n\t\t<item>left</item>\n\t\t<item>letter-spacing</item>\n\t\t<item>line-height</item>\n\t\t<item>list-style</item>\n\t\t<item>list-style-image</item>\n\t\t<item>list-style-keyword</item>\n\t\t<item>list-style-position</item>\n\t\t<item>list-style-type</item>\n\t\t<item>margin</item>\n\t\t<item>margin-bottom</item>\n\t\t<item>margin-left</item>\n\t\t<item>margin-right</item>\n\t\t<item>margin-top</item>\n\t\t<item>marker-offset</item>\n\t\t<item>max-height</item>\n\t\t<item>max-width</item>\n\t\t<item>min-height</item>\n\t\t<item>min-width</item>\n\t\t<item>orphans</item>\n\t\t<item>outline</item>\n\t\t<item>outline-color</item>\n\t\t<item>outline-style</item>\n\t\t<item>outline-width</item>\n\t\t<item>overflow</item>\n\t\t<item>padding</item>\n\t\t<item>padding-bottom</item>\n\t\t<item>padding-left</item>\n\t\t<item>padding-right</item>\n\t\t<item>padding-top</item>\n\t\t<item>page</item>\n\t\t<item>page-break-after</item>\n\t\t<item>page-break-before</item>\n\t\t<item>page-break-inside</item>\n\t\t<item>pause</item>\n\t\t<item>pause-after</item>\n\t\t<item>pause-before</item>\n\t\t<item>pitch</item>\n\t\t<item>pitch-range</item>\n\t\t<item>play-during</item>\n\t\t<item>position</item>\n\t\t<item>quotes</item>\n\t\t<item>richness</item>\n\t\t<item>right</item>\n\t\t<item>size</item>\n\t\t<item>speak</item>\n\t\t<item>speak-header</item>\n\t\t<item>speak-numeral</item>\n\t\t<item>speak-punctuation</item>\n\t\t<item>speech-rate</item>\n\t\t<item>stress</item>\n\t\t<item>table-layout</item>\n\t\t<item>text-align</item>\n\t\t<item>text-decoration</item>\n\t\t<item>text-decoration-color</item>\n\t\t<item>text-indent</item>\n\t\t<item>text-shadow</item>\n\t\t<item>text-transform</item>\n\t\t<item>top</item>\n\t\t<item>unicode-bidi</item>\n\t\t<item>vertical-align</item>\n\t\t<item>visibility</item>\n\t\t<item>voice-family</item>\n\t\t<item>volume</item>\n\t\t<item>white-space</item>\n\t\t<item>widows</item>\n\t\t<item>width</item>\n\t\t<item>word-spacing</item>\n\t\t<item>z-index</item>\n\n\t\t<!-- CSS3 -->\n\t\t<item>border-bottom-image</item>\n\t\t<item>border-bottom-left-image</item>\n\t\t<item>border-bottom-left-radius</item>\n\t\t<item>border-bottom-right-image</item>\n\t\t<item>border-bottom-right-radius</item>\n\t\t<item>border-corner-image</item>\n\t\t<item>border-image</item>\n\t\t<item>border-left-image</item>\n\t\t<item>border-radius</item>\n\t\t<item>border-right-image</item>\n\t\t<item>border-top-image</item>\n\t\t<item>border-top-left-image</item>\n\t\t<item>border-top-left-radius</item>\n\t\t<item>border-top-right-image</item>\n\t\t<item>border-top-right-radius</item>\n\t\t<item>box-align</item>\n\t\t<item>box-shadow</item>\n\t\t<item>box-sizing</item>\n\t\t<item>box-orient</item>\n\t\t<item>box-pack</item>\n\t\t<item>opacity</item>\n\t\t<item>outline-offset</item>\n\t\t<item>overflow-x</item>\n\t\t<item>overflow-y</item>\n\t\t<item>text-overflow</item>\n\t\t<item>text-shadow</item>\n\n\t\t<!-- Gecko rendering engine CSS property extensions -->\n\t\t<item>-moz-border-bottom-colors</item>\n\t\t<item>-moz-border-left-colors</item>\n\t\t<item>-moz-border-radius</item>\n\t\t<item>-moz-border-right-colors</item>\n\t\t<item>-moz-border-top-colors</item>\n\t\t<item>-moz-box-flex</item>\n\n\t\t<!-- Opera rendering engine CSS property extensions -->\n\t\t<item>-o-background-size</item>\n\t\t<item>-o-text-overflow</item>\n\n\t\t<!-- konq specific -->\n\t\t<item>-khtml-background-size</item>\n\t\t<item>konq_bgpos_x</item>\n\t\t<item>konq_bgpos_y</item>\n\n\t\t<!-- Webkit rendering engine CSS property extensions -->\n\t\t<item>-webkit-background-size</item>\n\t\t<item>-webkit-border-radius</item>\n\n\t\t<!-- MS rendering engine CSS properties -->\n\t\t<item>filter</item>\n\t\t<item>-ms-filter</item>\n\n\t\t<!-- font properties in @font-face -->\n\t\t<item>font-family</item>\n\t\t<item>font-size</item>\n\t\t<item>font-stretch</item>\n\t\t<item>font-style</item>\n\t\t<item>font-variant</item>\n\t\t<item>font-weight</item>\n\t\t<item>unicode-range</item>\n\t\t<item>units-per-em</item>\n\t\t<item>src</item>\n\t\t<item>panose-1</item>\n\t\t<item>stemv</item>\n\t\t<item>stemh</item>\n\t\t<item>slope</item>\n\t\t<item>cap-height</item>\n\t\t<item>x-height</item>\n\t\t<item>ascent</item>\n\t\t<item>descent</item>\n\t\t<item>widths</item>\n\t\t<item>bbox</item>\n\t\t<item>definition-src</item>\n\t\t<item>baseline</item>\n\t\t<item>centerline</item>\n\t\t<item>mathline</item>\n\t\t<item>topline</item>\n\t</list>\n\n\t<list name=\"types\">\n\t\t<item>inherit</item>\n\t\t<item>none</item>\n\t\t<item>hidden</item>\n\t\t<item>dotted</item>\n\t\t<item>dashed</item>\n\t\t<item>solid</item>\n\t\t<item>double</item>\n\t\t<item>groove</item>\n\t\t<item>ridge</item>\n\t\t<item>inset</item>\n\t\t<item>outset</item>\n\t\t<item>xx-small</item>\n\t\t<item>x-small</item>\n\t\t<item>small</item>\n\t\t<item>medium</item>\n\t\t<item>large</item>\n\t\t<item>x-large</item>\n\t\t<item>xx-large</item>\n\t\t<item>smaller</item>\n\t\t<item>larger</item>\n\t\t<item>italic</item>\n\t\t<item>oblique</item>\n\t\t<item>small-caps</item>\n\t\t<item>normal</item>\n\t\t<item>bold</item>\n\t\t<item>bolder</item>\n\t\t<item>lighter</item>\n\t\t<item>light</item>\n\t\t<item>100</item>\n\t\t<item>200</item>\n\t\t<item>300</item>\n\t\t<item>400</item>\n\t\t<item>500</item>\n\t\t<item>600</item>\n\t\t<item>700</item>\n\t\t<item>800</item>\n\t\t<item>900</item>\n\t\t<item>transparent</item>\n\t\t<item>repeat</item>\n\t\t<item>repeat-x</item>\n\t\t<item>repeat-y</item>\n\t\t<item>no-repeat</item>\n\t\t<item>baseline</item>\n\t\t<item>sub</item>\n\t\t<item>super</item>\n\t\t<item>top</item>\n\t\t<item>text-top</item>\n\t\t<item>middle</item>\n\t\t<item>bottom</item>\n\t\t<item>text-bottom</item>\n\t\t<item>left</item>\n\t\t<item>right</item>\n\t\t<item>center</item>\n\t\t<item>justify</item>\n\t\t<item>konq-center</item>\n\t\t<item>disc</item>\n\t\t<item>circle</item>\n\t\t<item>square</item>\n\t\t<item>box</item>\n\t\t<item>decimal</item>\n\t\t<item>decimal-leading-zero</item>\n\t\t<item>lower-roman</item>\n\t\t<item>upper-roman</item>\n\t\t<item>lower-greek</item>\n\t\t<item>lower-alpha</item>\n\t\t<item>lower-latin</item>\n\t\t<item>upper-alpha</item>\n\t\t<item>upper-latin</item>\n\t\t<item>hebrew</item>\n\t\t<item>armenian</item>\n\t\t<item>georgian</item>\n\t\t<item>cjk-ideographic</item>\n\t\t<item>hiragana</item>\n\t\t<item>katakana</item>\n\t\t<item>hiragana-iroha</item>\n\t\t<item>katakana-iroha</item>\n\t\t<item>inline</item>\n\t\t<item>inline-block</item>\n\t\t<item>block</item>\n\t\t<item>list-item</item>\n\t\t<item>run-in</item>\n\t\t<item>compact</item>\n\t\t<item>marker</item>\n\t\t<item>table</item>\n\t\t<item>inline-table</item>\n\t\t<item>table-row-group</item>\n\t\t<item>table-header-group</item>\n\t\t<item>table-footer-group</item>\n\t\t<item>table-row</item>\n\t\t<item>table-column-group</item>\n\t\t<item>table-column</item>\n\t\t<item>table-cell</item>\n\t\t<item>table-caption</item>\n\t\t<item>auto</item>\n\t\t<item>crosshair</item>\n\t\t<item>default</item>\n\t\t<item>pointer</item>\n\t\t<item>move</item>\n\t\t<item>e-resize</item>\n\t\t<item>ne-resize</item>\n\t\t<item>nw-resize</item>\n\t\t<item>n-resize</item>\n\t\t<item>se-resize</item>\n\t\t<item>sw-resize</item>\n\t\t<item>s-resize</item>\n\t\t<item>w-resize</item>\n\t\t<item>text</item>\n\t\t<item>wait</item>\n\t\t<item>help</item>\n\t\t<item>above</item>\n\t\t<item>absolute</item>\n\t\t<item>always</item>\n\t\t<item>avoid</item>\n\t\t<item>below</item>\n\t\t<item>bidi-override</item>\n\t\t<item>blink</item>\n\t\t<item>both</item>\n\t\t<item>capitalize</item>\n\t\t<item>caption</item>\n\t\t<item>clip</item>\n\t\t<item>close-quote</item>\n\t\t<item>collapse</item>\n\t\t<item>condensed</item>\n\t\t<item>crop</item>\n\t\t<item>cross</item>\n\t\t<item>ellipsis</item>\n\t\t<item>ellipsis-word</item>\n\t\t<item>embed</item>\n\t\t<item>expanded</item>\n\t\t<item>extra-condensed</item>\n\t\t<item>extra-expanded</item>\n\t\t<item>fixed</item>\n\t\t<item>hand</item>\n\t\t<item>hide</item>\n\t\t<item>higher</item>\n\t\t<item>icon</item>\n\t\t<item>inside</item>\n\t\t<item>invert</item>\n\t\t<item>landscape</item>\n\t\t<item>level</item>\n\t\t<item>line-through</item>\n\t\t<item>loud</item>\n\t\t<item>lower</item>\n\t\t<item>lowercase</item>\n\t\t<item>ltr</item>\n\t\t<item>menu</item>\n\t\t<item>message-box</item>\n\t\t<item>mix</item>\n\t\t<item>narrower</item>\n\t\t<item>no-close-quote</item>\n\t\t<item>no-open-quote</item>\n\t\t<item>nowrap</item>\n\t\t<item>open-quote</item>\n\t\t<item>outside</item>\n\t\t<item>overline</item>\n\t\t<item>portrait</item>\n\t\t<item>pre</item>\n\t\t<item>pre-line</item>\n\t\t<item>pre-wrap</item>\n\t\t<item>relative</item>\n\t\t<item>rtl</item>\n\t\t<item>scroll</item>\n\t\t<item>semi-condensed</item>\n\t\t<item>semi-expanded</item>\n\t\t<item>separate</item>\n\t\t<item>show</item>\n\t\t<item>small-caption</item>\n\t\t<item>static</item>\n\t\t<item>static-position</item>\n\t\t<item>status-bar</item>\n\t\t<item>thick</item>\n\t\t<item>thin</item>\n\t\t<item>ultra-condensed</item>\n\t\t<item>ultra-expanded</item>\n\t\t<item>underline</item>\n\t\t<item>uppercase</item>\n\t\t<item>visible</item>\n\t\t<item>wider</item>\n\t\t<item>break</item>\n\t\t<item>serif</item>\n\t\t<item>sans-serif</item>\n\t\t<item>cursive</item>\n\t\t<item>fantasy</item>\n\t\t<item>monospace</item>\n\t\t<item>border-box</item>\n\t\t<item>content-box</item>\n\t\t<item>horizontal</item>\n\n\t\t<!-- Gecko rendering engine CSS value extensions -->\n\t\t<item>-moz-box</item>\n\n\t\t<!-- Webkit rendering engine CSS value extensions -->\n\t\t<item>linear</item>\n\t\t<item>radial</item>\n\n\t</list>\n\n\n\t<list name=\"colors\">\n\t\t<item>aqua</item>\n\t\t<item>black</item>\n\t\t<item>blue</item>\n\t\t<item>fuchsia</item>\n\t\t<item>gray</item>\n\t\t<item>green</item>\n\t\t<item>lime</item>\n\t\t<item>maroon</item>\n\t\t<item>navy</item>\n\t\t<item>olive</item>\n\t\t<item>purple</item>\n\t\t<item>red</item>\n\t\t<item>silver</item>\n\t\t<item>teal</item>\n\t\t<item>white</item>\n\t\t<item>yellow</item>\n\t\t<item>ActiveBorder</item>\n\t\t<item>ActiveCaption</item>\n\t\t<item>AppWorkspace</item>\n\t\t<item>Background</item>\n\t\t<item>ButtonFace</item>\n\t\t<item>ButtonHighlight</item>\n\t\t<item>ButtonShadow</item>\n\t\t<item>ButtonText</item>\n\t\t<item>CaptionText</item>\n\t\t<item>GrayText</item>\n\t\t<item>Highlight</item>\n\t\t<item>HighlightText</item>\n\t\t<item>InactiveBorder</item>\n\t\t<item>InactiveCaption</item>\n\t\t<item>InactiveCaptionText</item>\n\t\t<item>InfoBackground</item>\n\t\t<item>InfoText</item>\n\t\t<item>Menu</item>\n\t\t<item>MenuText</item>\n\t\t<item>Scrollbar</item>\n\t\t<item>ThreeDDarkShadow</item>\n\t\t<item>ThreeDFace</item>\n\t\t<item>ThreeDHighlight</item>\n\t\t<item>ThreeDLightShadow</item>\n\t\t<item>ThreeDShadow</item>\n\t\t<item>Window</item>\n\t\t<item>WindowFrame</item>\n\t\t<item>WindowText</item>\n\t</list>\n\n\t<list name=\"paren\">\n\t\t<item>url</item>\n\t\t<item>attr</item>\n\t\t<item>rect</item>\n\t\t<item>rgb</item>\n\t\t<item>rgba</item>\n\t\t<item>hsl</item>\n\t\t<item>hsla</item>\n\t\t<item>counter</item>\n\t\t<item>counters</item>\n\n\t\t<!-- in @font-face -->\n\t\t<item>local</item>\n\t\t<item>format</item>\n\n\t\t<!-- Webkit rendering engine CSS value extensions -->\n\t\t<item>-webkit-gradient</item>\n\t\t<item>color-stop</item>\n\n\t\t<!-- Gecko rendering engine CSS value extensions -->\n\t\t<item>-moz-linear-gradient</item>\n\t\t<item>-moz-radial-gradient</item>\n\n\t\t<!-- Trident (a.k.a., MSHTML) rendering engine functional notation extensions -->\n\t\t<item>expression</item>\n\t\t<item>progid:DXImageTransform.Microsoft.gradient</item>\n\n\t</list>\n\n\t<list name=\"mediatypes\">\n\t\t<item>all</item>\n\t\t<item>aural</item>\n\t\t<item>braille</item>\n\t\t<item>embossed</item>\n\t\t<item>handheld</item>\n\t\t<item>print</item>\n\t\t<item>projection</item>\n\t\t<item>screen</item>\n\t\t<item>tty</item>\n\t\t<item>tv</item>\n\t</list>\n\n\t<list name=\"pseudoclasses\">\n\t\t<item>hover</item>\n\t\t<item>link</item>\n\t\t<item>visited</item>\n\t\t<item>active</item>\n\t\t<item>focus</item>\n\t\t<item>first-child</item>\n\t\t<item>last-child</item>\n\t\t<item>only-child</item>\n\t\t<item>first-of-type</item>\n\t\t<item>last-of-type</item>\n\t\t<item>only-of-type</item>\n\t\t<item>first-letter</item>\n\t\t<item>first-line</item>\n\t\t<item>before</item>\n\t\t<item>after</item>\n\t\t<item>selection</item>\n\t\t<item>root</item>\n\t\t<item>empty</item>\n\t\t<item>target</item>\n\t\t<item>enabled</item>\n\t\t<item>disabled</item>\n\t\t<item>checked</item>\n\t\t<item>indeterminate</item>\n\t\t<item>nth-child</item>\n\t\t<item>nth-last-child</item>\n\t\t<item>nth-of-type</item>\n\t\t<item>nth-last-of-type</item>\n\t\t<item>not</item>\n\t</list>\n\n\t<contexts>\n\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars attribute=\"Comment\" char=\"/\" char1=\"/\" context=\"Comment\" />\n\t\t\t<RegExpr attribute=\"Normal Text\" String=\".*\\S.*:\\s*$\" context=\"Selector\" lookAhead=\"true\" />\n\t\t\t<RegExpr attribute=\"Normal Text\" String=\".*\\S.*:.*\\S.*$\" context=\"RuleSet\" lookAhead=\"true\" />\n\t\t\t<RegExpr attribute=\"Property\" String=\"[a-z\\-]+-&gt;\\s*$\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t\t<!--<keyword attribute=\"Property\" context=\"Rule\" String=\"properties\" />\n\t\t\t<keyword attribute=\"Property\" context=\"Rule\" String=\"properties\" />-->\n\t\t\t<!--<keyword attribute=\"Value\" context=\"#stay\" String=\"types\" />\n\t\t\t<keyword attribute=\"Value\" context=\"#stay\" String=\"colors\" />-->\n\t\t\t<!--<keyword attribute=\"Value\" context=\"PropParen\" String=\"paren\" />-->\n\t\t</context>\n\n\t\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\" />\n\n\t\t<context name=\"Selector\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar attribute=\"Selector Attr\" context=\"SelAttr\" char=\"[\" />\n\t\t\t<RegExpr attribute=\"Selector Id\" context=\"#stay\" String=\"#(-)?(&nmstart;)(&nmchar;)*\" />\n\t\t\t<RegExpr attribute=\"Selector Class\" context=\"#stay\" String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\" />\n\t\t\t<DetectChar attribute=\"Selector Pseudo\" context=\"SelPseudo\" char=\":\" />\n\t\t\t<keyword attribute=\"Media\" context=\"#stay\" String=\"mediatypes\" />\n\t\t</context>\n\n\t\t<context name=\"SelAttr\" attribute=\"Selector Attr\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar attribute=\"Selector Attr\" context=\"#pop\" char=\"]\" />\n\t\t\t<IncludeRules context=\"FindStrings\" />\n\t\t</context>\n\n\t\t<context name=\"SelPseudo\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword attribute=\"Selector Pseudo\" context=\"#pop\" String=\"pseudoclasses\" />\n\t\t</context>\n\n\t\t<context name=\"RuleSet\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<keyword attribute=\"Property\" context=\"Rule\" String=\"properties\" />\n\t\t\t<RegExpr attribute=\"Unknown Property\" context=\"Rule\" String=\"-?[A-Za-z_-]+(?=\\s*:)\" />\n\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<context name=\"Rule\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar attribute=\"Property\" context=\"Rule2\" char=\":\" />\n\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<context name=\"Rule2\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<keyword attribute=\"Value\" context=\"#stay\" String=\"types\" />\n\t\t\t<keyword attribute=\"Value\" context=\"#stay\" String=\"colors\" />\n\t\t\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"#([0-9A-Fa-f]{3}){1,4}\\b\" />\n\t\t\t<keyword attribute=\"Value\" context=\"PropParen\" String=\"paren\" />\n\t\t\t<RegExpr attribute=\"Important\" context=\"#stay\" String=\"!important\\b\" />\n\t\t\t<IncludeRules context=\"FindValues\" />\n\t\t\t<IncludeRules context=\"FindStrings\" />\n\t\t</context>\n\n\t\t<context name=\"PropParen\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar attribute=\"Value\" context=\"PropParen2\" char=\"(\" />\n\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<context name=\"PropParen2\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"Rule2\" />\n\t\t\t<DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\")\" />\n\t\t\t<IncludeRules context=\"FindValues\" />\n\t\t\t<IncludeRules context=\"FindStrings\" />\n\t\t</context>\n\n\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindValues\">\n\t\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"[-+]?[0-9.]+(em|ex|px|in|cm|mm|pt|pc|deg|rad|grad|ms|s|Hz|kHz)\\b\" />\n\t\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"[-+]?[0-9.]+[%]?\" />\n\t\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\w\\-]+\" />\n\t</context>\n\n\t\t<context name=\"FindStrings\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar attribute=\"String\" context=\"StringDQ\" char=\"&quot;\" />\n\t\t\t<DetectChar attribute=\"String\" context=\"StringSQ\" char=\"'\" />\n\t\t</context>\n\n      <!-- string contexts -->\n\t\t<context name=\"StringDQ\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n\t\t\t<IncludeRules context=\"InsideString\" />\n\t\t</context>\n\n\t\t<context name=\"StringSQ\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n\t\t\t<IncludeRules context=\"InsideString\" />\n\t\t</context>\n\n\t\t<context name=\"InsideString\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr attribute=\"String\" context=\"#stay\" String=\"\\\\[&quot;']\" />\n\t\t\t<DetectIdentifier/>\n\t\t</context>\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Property\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Unknown Property\"  defStyleNum=\"dsKeyword\" italic=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Media\"  defStyleNum=\"dsDecVal\" bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"String\"  defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"Value\"  defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Important\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Selector Attr\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Selector Id\"  defStyleNum=\"dsFloat\" bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Selector Class\"  defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Selector Pseudo\"  defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\t\t<itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n\t</itemDatas>\n</highlighting>\n<general>\n\t<folding indentationsensitive=\"1\" />\n\t<keywords casesensitive=\"0\" weakDeliminator=\"-%\"/>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\" position=\"afterwhitespace\"/>\n\t\t<comment name=\"singleLine\" start=\"//\" position=\"afterwhitespace\"/>\n\t</comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!--\n\t** Cg Syntax Rules **\n\t\n\tNOTES:\n\t- some stuff stolen from c.xml\n\t\n\tTODO:\n\t- some exotic keywords are missing, find out which; the spec is a bloody mess\n\n2004-05-25\n\t* Initial release\n2004-05-27\n\t* Added swizzle highlighting\n\t* Added stdlib function highlighting\n2004-12-07 (julien.antille at kdemail.net)\n\t* Added COLOR1 through COLOR3 output sementics, for Multiple Render Targets (MRTs).\n\t* Added FACE sementic for the new fp40 profile\n-->\n\n<language name=\"Cg\" section=\"Sources\" extensions=\"*.cg;*.cgfx\" mimetype=\"text/x-cgsrc\" version=\"5\" kateversion=\"5.0\" author=\"Florian Schanda (florian.schanda@schanda.de)\" license=\"LGPL\">\n\t<highlighting>\n\t\t<list name=\"binding\">\n\t\t\t<item>POSITION</item>\n\t\t\t<item>COLOR</item>\n\t\t\t<item>COLOR0</item>\n\t\t\t<item>COLOR1</item>\n\t\t\t<item>COLOR2</item>\n\t\t\t<item>COLOR3</item>\n\t\t\t<item>TEXCOORD0</item>\n\t\t\t<item>TEXCOORD1</item>\n\t\t\t<item>TEXCOORD2</item>\n\t\t\t<item>TEXCOORD3</item>\n\t\t\t<item>TEXCOORD4</item>\n\t\t\t<item>TEXCOORD5</item>\n\t\t\t<item>TEXCOORD6</item>\n\t\t\t<item>TEXCOORD7</item>\n\t\t\t<item>TEXCOORD8</item>\n\t\t\t<item>TEXCOORD9</item>\n\t\t\t<item>TEXCOORD10</item>\n\t\t\t<item>TEXCOORD11</item>\n\t\t\t<item>TEXCOORD12</item>\n\t\t\t<item>TEXCOORD13</item>\n\t\t\t<item>TEXCOORD14</item>\n\t\t\t<item>TEXCOORD15</item>\n\t\t\t<item>TEXUNIT0</item>\n\t\t\t<item>TEXUNIT1</item>\n\t\t\t<item>TEXUNIT2</item>\n\t\t\t<item>TEXUNIT3</item>\n\t\t\t<item>TEXUNIT4</item>\n\t\t\t<item>TEXUNIT5</item>\n\t\t\t<item>TEXUNIT6</item>\n\t\t\t<item>TEXUNIT7</item>\n\t\t\t<item>TEXUNIT8</item>\n\t\t\t<item>TEXUNIT9</item>\n\t\t\t<item>TEXUNIT10</item>\n\t\t\t<item>TEXUNIT11</item>\n\t\t\t<item>TEXUNIT12</item>\n\t\t\t<item>TEXUNIT13</item>\n\t\t\t<item>TEXUNIT14</item>\n\t\t\t<item>TEXUNIT15</item>\n\t\t\t<item>WPOS</item>\n\t\t\t<item>DEPTH</item>\n\t\t\t<item>BLENDWEIGHT</item>\n\t\t\t<item>NORMAL</item>\n\t\t\t<item>TESSFACTOR</item>\n\t\t\t<item>FOGCOORD</item>\n\t\t\t<item>PSIZE</item>\n\t\t\t<item>BLENDINDICES</item>\n\t\t\t<item>TANGENT</item>\n\t\t\t<item>BINORMAL</item>\n\t\t\t<item>FOG</item>\n\t\t\t<item>BCOL0</item>\n\t\t\t<item>BCOL1</item>\n\t\t\t<item>FACE</item>\n\t\t</list>\n\t\t<list name=\"keywords\">\n\t\t\t<item>do</item>\n\t\t\t<item>while</item>\n\t\t\t<item>if</item>\n\t\t\t<item>else</item>\n\t\t\t<item>for</item>\n\t\t\t<item>struct</item>\n\t\t\t<item>return</item>\n\t\t\t<item>static</item>\n\t\t\t<item>typedef</item>\n\t\t\t<item>discard</item>\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\t\t</list>\n\t\t<list name=\"types\">\n\t\t\t<item>bool</item>\n\t\t\t<item>int</item>\n\t\t\t<item>fixed</item>\n\t\t\t<item>half</item>\n\t\t\t<item>float</item>\n            \n\t\t\t<item>void</item>\n\t\t\t<item>sampler</item>\n\t\t\t<item>sampler1D</item>\n\t\t\t<item>sampler2D</item>\n\t\t\t<item>sampler3D</item>\n\t\t\t<item>samplerCUBE</item>\n\t\t\t<item>samplerRECT</item>\n\t\t\t\n\t\t\t<item>packed</item>\n\t\t\t<item>const</item>\n\t\t\t<item>uniform</item>\n\t\t\t<item>in</item>\n\t\t\t<item>out</item>\n\t\t\t<item>inout</item>\n\t\t</list>\n\t\t<list name=\"attention\">\n\t\t\t<item>FIXME</item>\n\t\t\t<item>TODO</item>\n\t\t\t<item>BUG</item>\n\t\t</list>\n\t\t<list name=\"stdlib\">\n\t\t\t<item>abs</item>\n\t\t\t<item>acos</item>\n\t\t\t<item>all</item>\n\t\t\t<item>any</item>\n\t\t\t<item>asin</item>\n\t\t\t<item>atan</item>\n\t\t\t<item>atan2</item>\n\t\t\t<item>ceil</item>\n\t\t\t<item>clamp</item>\n\t\t\t<item>cos</item>\n\t\t\t<item>cosh</item>\n\t\t\t<item>cross</item>\n\t\t\t<item>degrees</item> <!-- the spec got this wrong... -->\n\t\t\t<item>determinant</item>\n\t\t\t<item>dot</item>\n\t\t\t<item>exp</item>\n\t\t\t<item>exp2</item>\n\t\t\t<item>floor</item>\n\t\t\t<item>fmod</item>\n\t\t\t<item>frac</item>\n\t\t\t<item>frexp</item>\n\t\t\t<item>isfinite</item>\n\t\t\t<item>isinf</item>\n\t\t\t<item>isnan</item>\n\t\t\t<item>ldexp</item>\n\t\t\t<item>lerp</item>\n\t\t\t<item>lit</item>\n\t\t\t<item>log</item>\n\t\t\t<item>log2</item>\n\t\t\t<item>log10</item>\n\t\t\t<item>max</item>\n\t\t\t<item>min</item>\n\t\t\t<item>modf</item>\n\t\t\t<item>mul</item>\n\t\t\t<item>noise</item>\n\t\t\t<item>pow</item>\n\t\t\t<item>radians</item>\n\t\t\t<item>round</item>\n\t\t\t<item>rsqrt</item>\n\t\t\t<item>saturate</item>\n\t\t\t<item>sign</item>\n\t\t\t<item>sin</item>\n\t\t\t<item>sincos</item>\n\t\t\t<item>sinh</item>\n\t\t\t<item>smoothstep</item>\n\t\t\t<item>step</item>\n\t\t\t<item>sqrt</item>\n\t\t\t<item>tan</item>\n\t\t\t<item>tanh</item>\n\t\t\t<item>transpose</item>\n\t\t\t<item>distance</item>\n\t\t\t<item>faceforward</item>\n\t\t\t<item>length</item>\n\t\t\t<item>normalize</item>\n\t\t\t<item>reflect</item>\n\t\t\t<item>refract</item>\n\t\t\t<item>tex1D</item>\n\t\t\t<item>tex1Dproj</item>\n\t\t\t<item>tex2D</item>\n\t\t\t<item>tex2Dproj</item>\n\t\t\t<item>texRECT</item>\n\t\t\t<item>texRECTproj</item>\n\t\t\t<item>tex3D</item>\n\t\t\t<item>tex3Dproj</item>\n\t\t\t<item>texCUBE</item>\n\t\t\t<item>texCUBEproj</item>\n\t\t\t<item>ddx</item>\n\t\t\t<item>ddy</item>\n\t\t\t<item>debug</item>\n\t\t\t<item>pack_2half</item>\n\t\t\t<item>unpack_2half</item>\n\t\t\t<item>pack_2ushort</item>\n\t\t\t<item>unpack_2ushort</item>\n\t\t\t<item>pack_4byte</item>\n\t\t\t<item>unpack_4byte</item>\n\t\t\t<item>pack_4ubyte</item>\n\t\t\t<item>unpack_4ubyte</item>\n\t\t</list>\n\t\t<list name=\"stdstruct\">\n\t\t\t<item>fragout</item>\n\t\t\t<item>fragout_float</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<keyword String=\"keywords\" attribute=\"Keyword\" context=\"#stay\" />\n\t\t\t\t<keyword String=\"binding\" attribute=\"Binding\" context=\"#stay\" />\n\t\t\t\t<keyword String=\"attention\" attribute=\"Alert\" context=\"#stay\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n\t\t\t\t\n\t\t\t\t<RegExpr String=\"float[1234](x[1234])?\" attribute=\"Data Type\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"half[1234](x[1234])?\" attribute=\"Data Type\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"fixed[1234](x[1234])?\" attribute=\"Data Type\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"bool[1234](x[1234])?\" attribute=\"Data Type\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"int[1234](x[1234])?\" attribute=\"Data Type\" context=\"#stay\" />\n\t\t\t\t<keyword String=\"types\" attribute=\"Data Type\" context=\"#stay\" />\n\t\t\t\t<keyword String=\"stdstruct\" attribute=\"Data Type\" context=\"#stay\" />\n\t\t\t\t\n\t\t\t\t<RegExpr String=\"[0123456789]*[.][0123456789]+f\" attribute=\"Float\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"[0123456789]*[.][0123456789]+h\" attribute=\"Half\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"[0123456789]*[.][0123456789]+x\" attribute=\"Fixed\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"[0123456789]*[.][0123456789]+\" attribute=\"Float\" context=\"#stay\" />\n\t\t\t\t<Int attribute=\"Decimal\" context=\"#stay\" />\n\t\t\t\t\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t\t\n\t\t\t\t<keyword String=\"stdlib\" attribute=\"StdFunction\" context=\"#stay\" />\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*[(])\" />\n\t\t\t\n\t\t\t\t<RegExpr attribute=\"Swizzle\" context=\"#stay\" String=\"[.]{1,1}[rgbaxyzw]+(?=[\\s/*-+&lt;&gt;])\" />\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n\t\t\t</context>\n\t\t\t<context name=\"Member\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*)\" />\n\t\t\t</context>\n\t\t\t<context name=\"Commentar 1\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n\t\t\t</context>\n\t\t\t<context name=\"Commentar 2\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t\t<keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n\t\t\t</context>\n\t        </contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Binding\"      defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Function\"     defStyleNum=\"dsFunction\" bold=\"0\"/>\n\t\t\t<itemData name=\"StdFunction\"  defStyleNum=\"dsBuiltIn\" bold=\"1\"/>\n\t\t\t<itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Half\"         defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Fixed\"        defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Swizzle\"      defStyleNum=\"dsNormal\" bold=\"1\"/>\n\t\t\t<itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Alert\"        defStyleNum=\"dsAlert\" />\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" />\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cgis.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"CGiS\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.cgis\" mimetype=\"\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>1D</item>\n      <item>2D</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>do</item>\n      <item>else</item>\n      <item>extern</item>\n      <item>for</item>\n      <item>forall</item>\n      <item>foreach</item>\n      <item>function</item>\n      <item>if</item>\n      <item>in</item>\n      <item>inout</item>\n      <item>internal</item>\n      <item>out</item>\n      <item>reduction</item>\n      <item>return</item>\n      <item>struct</item>\n      <item>typedef</item>\n      <item>while</item>\n    </list>\n    <list name=\"types\">\n      <item>bool</item>\n      <item>bool2</item>\n      <item>bool3</item>\n      <item>bool4</item>\n      <item>int</item>\n      <item>int2</item>\n      <item>int3</item>\n      <item>int4</item>\n      <item>half</item>\n      <item>half2</item>\n      <item>half3</item>\n      <item>half4</item>\n      <item>float</item>\n      <item>float2</item>\n      <item>float3</item>\n      <item>float4</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"PROGRAM\" />\n        <StringDetect attribute=\"Keyword\" context=\"Interface\" String=\"INTERFACE\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Interface\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Keyword\" context=\"Control\" String=\"CONTROL\" />\n        <StringDetect attribute=\"Keyword\" context=\"Code\" String=\"CODE\" />\n\n        <IncludeRules context=\"Common\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Code\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Keyword\" context=\"Control\" String=\"CONTROL\" />\n\n        <StringDetect attribute=\"Hint\" context=\"Hint\" String=\"#HINT\" />\n\n        <IncludeRules context=\"Common\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Control\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Keyword\" context=\"Code\" String=\"CODE\" />\n\n        <IncludeRules context=\"Common\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Common\">\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <DetectIdentifier />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n      </context>\n\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n\n      <context attribute=\"Hint\" lineEndContext=\"#stay\" name=\"Hint\">\n        <DetectSpaces />\n        <DetectChar attribute=\"Hint\" context=\"#pop\" char=\")\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Region Marker\" lineEndContext=\"#pop\" name=\"Region Marker\" />\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" />\n      <itemData name=\"Hint\"         defStyleNum=\"dsOthers\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/changelog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"ChangeLog\" version=\"3\" kateversion=\"2.4\" section=\"Other\" extensions=\"ChangeLog\" mimetype=\"\" author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\">\n  <highlighting>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectChar attribute=\"Entry\" context=\"entry\" char=\"*\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Date\" context=\"line\" String=\"\\d\\d\\d\\d\\s*-\\s*\\d\\d\\s*-\\s*\\d\\d\\s*\" column=\"0\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"line\">\n        <RegExpr attribute=\"Name\" context=\"#stay\" String=\"(\\w\\s*)+\"/>\n        <RegExpr attribute=\"E-Mail\" context=\"#pop\" String=\"&lt;.*&gt;\\s*$\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"entry\">\n        <RegExpr attribute=\"Entry\" context=\"#pop\" String=\".*:\" minimal=\"true\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Name\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"E-Mail\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Date\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Entry\" defStyleNum=\"dsDecVal\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/chicken.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  This file is part of KDE's kate project.\n\n  copyright   : (C) 2004-2005 by Dominik Haumann\n  email       : dhdev at gmx dot de\n\n\n  copyright   : (C) 2004 by Goffart Olivier\n  email       : ogoffart @ kde.org\n      (brackets coloration)\n\n\n **********************************************************************\n * This library is free software; you can redistribute it and/or      *\n * modify it under the terms of the GNU Library General Public        *\n * License as published by the Free Software Foundation; either       *\n * version 2 of the License, or (at your option) any later version.   *\n *                                                                    *\n * This library is distributed in the hope that it will be useful,    *\n * but WITHOUT ANY WARRANTY; without even the implied warranty of     *\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *\n * Library General Public License for more details.                   *\n *                                                                    *\n * You should have received a copy of the GNU Library General Public  *\n * License along with this library; if not, write to the              *\n * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,   *\n * Boston, MA  02110-1301, USA.                                       *\n **********************************************************************\n NOTE:\n   This file defines highlighting rules for both Scheme AND Guile.\n   Scheme usually has no block comments. Guile has block comments: #! !#\n   I support these block comments: \"Good design means good compromises\" :)\n   Singleline comments are introduced through ';'. In reality EVERY\n   scheme/guile developer use ';;'. It is indented in emacs in a special way.\n   That's why I set <comment singleLine=\";;\">.\n\n   As a guile guru tole me it would not make sense to highlight all scheme and\n   guile procedures (cause then almost everything would be highlighted) I\n   removed some to have a rather small but \"senseful\" list of highlighted words.\n-->\n<language version=\"4\" kateversion=\"3.3\"\n          name=\"Chicken\" section=\"Scripts\"\n          extensions=\"*.chicken;*.scm;*.ss;*.scheme;*.meta\" \n          indenter=\"lisp\"\n          mimetype=\"text/x-scheme\" \n          author=\"Dominik Haumann (dhdev@gmx.de) [modified for Chicken by Nick Zarczynski (jacktradespublic@gmail.com)]\"\n          license=\"LGPLv2+\">\n  <highlighting>\n    <list name=\"operators\">\n      <item>&lt;=</item>\n      <item>&lt;</item>\n      <item>=</item>\n      <item>=&gt;</item>\n      <item>&gt;=</item>\n      <item>&gt;</item>\n      <item>-</item>\n      <item>/</item>\n      <item>*,*</item>\n      <item>*)</item>\n      <item>+</item>\n    </list>\n    <list name=\"characters\">\n      <item>#\\nul</item>\n      <item>#\\soh</item>\n      <item>#\\stx</item>\n      <item>#\\etx</item>\n      <item>#\\eot</item>\n      <item>#\\enq</item>\n      <item>#\\ack</item>\n      <item>#\\bel</item>\n      <item>#\\bs</item>\n      <item>#\\ht</item>\n      <item>#\\nl</item>\n      <item>#\\vt</item>\n      <item>#\\np</item>\n      <item>#\\cr</item>\n      <item>#\\so</item>\n      <item>#\\si</item>\n      <item>#\\dle</item>\n      <item>#\\dc1</item>\n      <item>#\\dc2</item>\n      <item>#\\dc3</item>\n      <item>#\\dc4</item>\n      <item>#\\nak</item>\n      <item>#\\syn</item>\n      <item>#\\etb</item>\n      <item>#\\can</item>\n      <item>#\\em</item>\n      <item>#\\sub</item>\n      <item>#\\esc</item>\n      <item>#\\fs</item>\n      <item>#\\gs</item>\n      <item>#\\rs</item>\n      <item>#\\us</item>\n      <item>#\\space</item>\n      <item>#\\sp</item>\n      <item>#\\newline</item>\n      <item>#\\nl</item>\n      <item>#\\tab</item>\n      <item>#\\ht</item>\n      <item>#\\backspace</item>\n      <item>#\\bs</item>\n      <item>#\\return</item>\n      <item>#\\cr</item>\n      <item>#\\page</item>\n      <item>#\\np</item>\n      <item>#\\null</item>\n      <item>#\\nul</item>\n    </list>\n    <list name=\"defines\">\n      <item>define</item>\n      <item>define*</item>\n      <item>define-accessor</item>\n      <item>define-class</item>\n      <item>defined?</item>\n      <item>define-generic</item>\n      <item>define-macro</item>\n      <item>define-method</item>\n      <item>define-module</item>\n      <item>define-private</item>\n      <item>define-public</item>\n      <item>define*-public</item>\n      <item>define-reader-ctor</item>\n      <item>define-syntax</item>\n      <item>define-syntax-macro</item>\n      <item>defmacro</item>\n      <item>defmacro*</item>\n      <item>defmacro*-public</item>\n    </list>\n    <list name=\"keywords\">\n      <item>abs</item>\n      <item>acos</item>\n      <item>and</item>\n      <item>angle</item>\n      <item>append</item>\n      <item>applymap</item>\n      <item>asin</item>\n      <item>assoc</item>\n      <item>assq</item>\n      <item>assv</item>\n      <item>atan</item>\n      <item>begin</item>\n      <item>boolean?</item>\n      <item>break</item>\n      <item>caaaar</item>\n      <item>caaadr</item>\n      <item>caaar</item>\n      <item>caadar</item>\n      <item>caaddr</item>\n      <item>caadr</item>\n      <item>caar</item>\n      <item>cadaar</item>\n      <item>cadadr</item>\n      <item>cadar</item>\n      <item>caddar</item>\n      <item>cadddr</item>\n      <item>caddr</item>\n      <item>cadr</item>\n      <item>call/cc</item>\n      <item>call-with-current-continuation</item>\n      <item>call-with-input-file</item>\n      <item>call-with-output-file</item>\n      <item>call-with-values</item>\n      <item>car</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>cdaaar</item>\n      <item>cdaadr</item>\n      <item>cdaar</item>\n      <item>cdadar</item>\n      <item>cdaddr</item>\n      <item>cdadr</item>\n      <item>cdar</item>\n      <item>cddaar</item>\n      <item>cddadr</item>\n      <item>cddar</item>\n      <item>cdddar</item>\n      <item>cddddr</item>\n      <item>cdddr</item>\n      <item>cddr</item>\n      <item>cdr</item>\n      <item>ceiling</item>\n      <item>char-alphabetic?</item>\n      <item>char-ci&gt;=?</item>\n      <item>char-ci&gt;?</item>\n      <item>char-ci=?</item>\n      <item>char-ci&lt;=?</item>\n      <item>char-downcase</item>\n      <item>char-&gt;integer</item>\n      <item>char&gt;=?</item>\n      <item>char&gt;?</item>\n      <item>char=?</item>\n      <item>char?</item>\n      <item>char-lower-case?</item>\n      <item>char&lt;?c</item>\n      <item>char&lt;=?</item>\n      <item>char-numeric?</item>\n      <item>char-ready?</item>\n      <item>char-upcase</item>\n      <item>char-upper-case?</item>\n      <item>char-whitespace?</item>\n      <item>close-input-port</item>\n      <item>close-output-port</item>\n      <item>complex?</item>\n      <item>cond</item>\n      <item>cons</item>\n      <item>continue</item>\n      <item>cos</item>\n      <item>current-input-port</item>\n      <item>current-output-port</item>\n      <item>denominator</item>\n      <item>display</item>\n      <item>do</item>\n      <item>dynamic-wind</item>\n      <item>else</item>\n      <item>eof-object?</item>\n      <item>eq?</item>\n      <item>equal?</item>\n      <item>eqv?</item>\n      <item>eval</item>\n      <item>even?</item>\n      <item>exact->inexact</item>\n      <item>exact?</item>\n      <item>exp</item>\n      <item>expt</item>\n      <item>floor</item>\n      <item>force</item>\n      <item>for-each</item>\n      <item>gcd</item>\n      <item>har-ci&lt;?</item>\n      <item>if</item>\n      <item>imag-part</item>\n      <item>inexact-&gt;exact</item>\n      <item>inexact?</item>\n      <item>input-port?</item>\n      <item>integer-&gt;char</item>\n      <item>integer?</item>\n      <item>interaction-environment</item>\n      <item>lambda</item>\n      <item>lcm</item>\n      <item>length</item>\n      <item>let</item>\n      <item>let*</item>\n      <item>letrec</item>\n      <item>letrec-syntax</item>\n      <item>let-syntax</item>\n      <item>list-&gt;string</item>\n      <item>list</item>\n      <item>list?</item>\n      <item>list-ref</item>\n      <item>list-tail</item>\n      <item>load</item>\n      <item>log</item>\n      <item>magnitude</item>\n      <item>make-polar</item>\n      <item>make-rectangular</item>\n      <item>make-string</item>\n      <item>make-vector</item>\n      <item>max</item>\n      <item>member</item>\n      <item>memq</item>\n      <item>memv</item>\n      <item>min</item>\n      <item>modulo</item>\n      <item>negative?</item>\n      <item>newline</item>\n      <item>not</item>\n      <item>null-environment</item>\n      <item>null?</item>\n      <item>number?</item>\n      <item>number->string</item>\n      <item>numerator</item>\n      <item>odd?</item>\n      <item>open-input-file</item>\n      <item>open-output-file</item>\n      <item>or</item>\n      <item>output-port?</item>\n      <item>pair?</item>\n      <item>peek-char</item>\n      <item>port?</item>\n      <item>positive?</item>\n      <item>procedure?</item>\n      <item>quotient</item>\n      <item>rational?</item>\n      <item>rationalize</item>\n      <item>read-char</item>\n      <item>read</item>\n      <item>real?</item>\n      <item>real-part</item>\n      <item>remainder</item>\n      <item>reverse</item>\n      <item>round</item>\n      <item>scheme-report-environment</item>\n      <item>set-car!</item>\n      <item>set-cdr!</item>\n      <item>sin</item>\n      <item>sqrt</item>\n      <item>string-append</item>\n      <item>string-ci&gt;=?</item>\n      <item>string-ci&gt;?</item>\n      <item>string-ci=?</item>\n      <item>string-ci&lt;=?</item>\n      <item>string-ci&lt;?</item>\n      <item>string-copy</item>\n      <item>string-fill!</item>\n      <item>string&gt;=?</item>\n      <item>string&gt;?</item>\n      <item>string-&gt;list</item>\n      <item>string-&gt;number</item>\n      <item>string-&gt;symbol</item>\n      <item>string=?</item>\n      <item>string</item>\n      <item>string?</item>\n      <item>string-length</item>\n      <item>string&lt;=?</item>\n      <item>string&lt;?</item>\n      <item>string-ref</item>\n      <item>string-set!</item>\n      <item>substring</item>\n      <item>symbol-&gt;string</item>\n      <item>symbol?</item>\n      <item>syntax-rules</item>\n      <item>tan</item>\n      <item>transcript-off</item>\n      <item>transcript-on</item>\n      <item>truncate</item>\n      <item>values</item>\n      <item>vector-fill!</item>\n      <item>vector-&gt;listlist->vector</item>\n      <item>vector</item>\n      <item>vector?</item>\n      <item>vector-length</item>\n      <item>vector-ref</item>\n      <item>vector-set!</item>\n      <item>while</item>\n      <item>with-input-from-file</item>\n      <item>with-output-to-file</item>\n      <item>write-char</item>\n      <item>write</item>\n      <item>zero?</item>\n    </list>\n    <contexts>\n      <context name=\"Level0\" attribute=\"Normal\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n            <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Default\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\";+\\s*BEGIN.*$\" beginRegion=\"region\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\";+\\s*END.*$\" endRegion=\"region\"/>\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\";.*$\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\"/>\n        <keyword attribute=\"Definition\" context=\"function_decl\" String=\"defines\"/>\n        <keyword attribute=\"Char\" context=\"#stay\" String=\"characters\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Char\" context=\"SpecialNumber\" String=\"#[bodxei]\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"#[tf]\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n      </context>\n      <context name=\"SpecialNumber\" attribute=\"Normal\" fallthrough=\"true\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Decimal\" context=\"#pop\" String=\"\\d*(\\.\\d+)?\"/>\n      </context>\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Char\" context=\"#stay\" String=\"characters\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n        <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"function_decl\" attribute=\"Function\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\s*[A-Za-z0-9-+\\&lt;\\&gt;//\\*]*\\s*\" />\n      </context>\n      <context name=\"Level1\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets2\" context=\"Level2\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets1\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level2\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets3\" context=\"Level3\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets2\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level3\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets4\" context=\"Level4\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets3\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level4\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets5\" context=\"Level5\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets4\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level5\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets6\" context=\"Level6\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets5\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level6\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets6\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\"      defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Definition\"  defStyleNum=\"dsKeyword\" color=\"#d22811\"/>\n      <itemData name=\"Operator\"    defStyleNum=\"dsKeyword\" color=\"#d22811\"/>\n      <itemData name=\"Function\"    defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"       defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"        defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"      defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n      <itemData name=\"Brackets1\"    defStyleNum=\"dsNormal\" color=\"#ff0000\" selColor=\"#000000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Brackets2\"    defStyleNum=\"dsNormal\" color=\"#ff8800\" selColor=\"#000000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Brackets3\"    defStyleNum=\"dsNormal\" color=\"#888800\" selColor=\"#000000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Brackets4\"    defStyleNum=\"dsNormal\" color=\"#008800\" selColor=\"#000000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Brackets5\"    defStyleNum=\"dsNormal\" color=\"#000088\" selColor=\"#000000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Brackets6\"    defStyleNum=\"dsNormal\" color=\"#880088\" selColor=\"#000000\" bold=\"1\" italic=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" weakDeliminator=\"-+*?!&lt;&gt;=/:#\\\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";;\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cil.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Highlighting for Common Intermediate Language (CIL) files\n     https://en.wikipedia.org/wiki/Common_Intermediate_Language\n-->\n<language name=\"Common Intermediate Language (CIL)\" version=\"1\" kateversion=\"5.0\" section=\"Assembler\" extensions=\"*.il\" author=\"Volker Krause (vkrause@kde.org)\" license=\"MIT\">\n    <highlighting>\n        <list name=\"keyword-list\">\n            <item>cil</item>\n            <item>class</item>\n            <item>catch</item>\n            <item>default</item>\n            <item>extends</item>\n            <item>extern</item>\n            <item>finally</item>\n            <item>instance</item>\n            <item>managed</item>\n            <item>method</item>\n            <item>private</item>\n            <item>public</item>\n            <item>static</item>\n            <item>try</item>\n            <item>virtual</item>\n        </list>\n        <list name=\"type-list\">\n            <item>bool</item>\n            <item>float32</item>\n            <item>float64</item>\n            <item>int8</item>\n            <item>int32</item>\n            <item>int64</item>\n            <item>object</item>\n            <item>string</item>\n            <item>unsigned</item>\n            <item>void</item>\n        </list>\n        <list name=\"meta-list\">\n            <item>assembly</item>\n            <item>custom</item>\n            <item>entrypoint</item>\n            <item>field</item>\n            <item>locals</item>\n            <item>namespace</item>\n            <item>maxstack</item>\n            <item>module</item>\n            <item>property</item>\n        </list>\n        <!-- see https://en.wikipedia.org/wiki/List_of_CIL_instructions -->\n        <list name=\"op-list\">\n            <item>add</item>\n            <item>and</item>\n            <item>arglist</item>\n            <item>beq</item>\n            <item>bge</item>\n            <item>bgt</item>\n            <item>ble</item>\n            <item>blt</item>\n            <item>bne</item>\n            <item>box</item>\n            <item>br</item>\n            <item>break</item>\n            <item>brfalse</item>\n            <item>brinst</item>\n            <item>brnull</item>\n            <item>brtrue</item>\n            <item>brzero</item>\n            <item>call</item>\n            <item>calli</item>\n            <item>callvirt</item>\n            <item>castclass</item>\n            <item>ceq</item>\n            <item>cgt</item>\n            <item>ckfinite</item>\n            <item>clt</item>\n            <item>constrained</item>\n            <item>conv</item>\n            <item>cpblk</item>\n            <item>cpobj</item>\n            <item>div</item>\n            <item>dup</item>\n            <item>endfault</item>\n            <item>endfilter</item>\n            <item>endfinally</item>\n            <item>initblk</item>\n            <item>initobj</item>\n            <item>isinst</item>\n            <item>jmp</item>\n            <item>ldarg</item>\n            <item>ldarga</item>\n            <item>ldc</item>\n            <item>ldelem</item>\n            <item>ldelema</item>\n            <item>ldfld</item>\n            <item>ldflda</item>\n            <item>ldftn</item>\n            <item>ldind</item>\n            <item>ldlen</item>\n            <item>ldloc</item>\n            <item>ldloca</item>\n            <item>ldnull</item>\n            <item>ldobj</item>\n            <item>ldsfld</item>\n            <item>ldsflda</item>\n            <item>ldstr</item>\n            <item>ldtoken</item>\n            <item>ldvirtftn</item>\n            <item>leave</item>\n            <item>localloc</item>\n            <item>mkrefany</item>\n            <item>mul</item>\n            <item>neg</item>\n            <item>newarr</item>\n            <item>newobj</item>\n            <item>nop</item>\n            <item>not</item>\n            <item>or</item>\n            <item>pop</item>\n            <item>readonly</item>\n            <item>refanytype</item>\n            <item>refanyval</item>\n            <item>rem</item>\n            <item>ret</item>\n            <item>rethrow</item>\n            <item>shl</item>\n            <item>shr</item>\n            <item>sizeof</item>\n            <item>starg</item>\n            <item>stelem</item>\n            <item>stfld</item>\n            <item>stind</item>\n            <item>stloc</item>\n            <item>stobj</item>\n            <item>stsfld</item>\n            <item>sub</item>\n            <item>switch</item>\n            <item>tail</item>\n            <item>throw</item>\n            <item>unaligned</item>\n            <item>unbox</item>\n            <item>volatile</item>\n            <item>xor</item>\n        </list>\n\n        <contexts>\n            <context name=\"normal-context\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Comment\" char=\"/\" char1=\"/\" context=\"comment-context\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"multiline-comment-context\" char=\"/\" char1=\"*\" beginRegion=\"CommentRegion\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keyword-list\"/>\n                <keyword attribute=\"Data Type\" context=\"#stay\" String=\"type-list\"/>\n                <keyword attribute=\"Meta Data\" context=\"#stay\" String=\"meta-list\"/>\n                <keyword attribute=\"Instructions\" context=\"#stay\" String=\"op-list\"/>\n                <DetectChar context=\"#stay\" char=\"{\" beginRegion=\"BlockRegion\"/>\n                <DetectChar context=\"#stay\" char=\"}\" endRegion=\"BlockRegion\"/>\n                <DetectChar attribute=\"String\" context=\"string-context\" char=\"&quot;\"/>\n                <RegExpr attribute=\"Label\" context=\"#stay\" String=\"IL_[\\da-f]+:\"/>\n            </context>\n\n            <context name=\"string-context\" attribute=\"String\" lineEndContext=\"#pop\">\n                <HlCStringChar attribute=\"Special Character\" context=\"#stay\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n\n            <context name=\"comment-context\" lineEndContext=\"#pop\" attribute=\"Comment\">\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n            <context name=\"multiline-comment-context\" lineEndContext=\"#stay\" attribute=\"Comment\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"CommentRegion\"/>\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Data Type\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n            <itemData name=\"Special Character\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Label\" defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n            <itemData name=\"Meta Data\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n            <itemData name=\"Instructions\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"CommentRegion\"/>\n            <comment name=\"singleLine\" start=\"//\"/>\n        </comments>\n        <keywords casesensitive=\"1\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cisco.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Cisco\" version=\"5\" kateversion=\"5.0\" section=\"Configuration\" extensions=\"*.cis\" mimetype=\"text/cisco\" author=\"Raphaël GRAPINET\" license=\"LGPL\">\n\t<highlighting>\n\t\t<list name = \"commands\">\n\t\t\t<item>aaa</item>\n\t\t\t<item>access-list</item>\n\t\t\t<item>address</item>\n\t\t\t<item>alias</item>\n\t\t\t<item>arp</item>\n\t\t\t<item>async-bootp</item>\n\t\t\t<item>banner</item>\n\t\t\t<item>boot</item>\n\t\t\t<item>bridge</item>\n\t\t\t<item>buffers</item>\n\t\t\t<item>busy-message</item>\n\t\t\t<item>call-history-mib</item>\n\t\t\t<item>cdp</item>\n\t\t\t<item>chat-script</item>\n\t\t\t<item>class-map</item>\n\t\t\t<item>clock</item>\n\t\t\t<item>cns</item>\n\t\t\t<item>config-register</item>\n\t\t\t<item>controller</item>\n\t\t\t<item>crypto</item>\n\t\t\t<item>default</item>\n\t\t\t<item>default-value</item>\n\t\t\t<item>dialer</item>\n\t\t\t<item>dialer-list</item>\n\t\t\t<item>dnsix-dmdp</item>\n\t\t\t<item>dnsix-nat</item>\n\t\t\t<item>downward-compatible-config</item>\n\t\t\t<item>enable</item>\n\t\t\t<item>end</item>\n\t\t\t<item>exception</item>\n\t\t\t<item>exit</item>\n\t\t\t<item>file</item>\n\t\t\t<item>frame-relay</item>\n\t\t\t<item>help</item>\n\t\t\t<item>hostname</item>\n\t\t\t<item>interface</item>\n\t\t\t<item>ip</item>\n\t\t\t<item>isdn</item>\n\t\t\t<item>isdn-mib</item>\n\t\t\t<item>kerberos</item>\n\t\t\t<item>key</item>\n\t\t\t<item>line</item>\n\t\t\t<item>logging</item>\n\t\t\t<item>login-string</item>\n\t\t\t<item>map-class</item>\n\t\t\t<item>map-list</item>\n\t\t\t<item>memory-size</item>\n\t\t\t<item>menu</item>\n\t\t\t<item>modemcap</item>\n\t\t\t<item>multilink</item>\n\t\t\t<item>netbios</item>\n\t\t\t<item>no</item>\n\t\t\t<item>ntp</item>\n\t\t\t<item>partition</item>\n\t\t\t<item>policy-map</item>\n\t\t\t<item>priority-list</item>\n\t\t\t<item>privilege</item>\n\t\t\t<item>process-max-time</item>\n\t\t\t<item>prompt</item>\n\t\t\t<item>queue-list</item>\n\t\t\t<item>resume-string</item>\n\t\t\t<item>rlogin</item>\n\t\t\t<item>rmon</item>\n\t\t\t<item>route-map</item>\n\t\t\t<item>router</item>\n\t\t\t<item>rtr</item>\n\t\t\t<item>scheduler</item>\n\t\t\t<item>service</item>\n\t\t\t<item>snmp-server</item>\n\t\t\t<item>sntp</item>\n\t\t\t<item>stackmaker</item>\n\t\t\t<item>state-machine</item>\n\t\t\t<item>subscriber-policy</item>\n\t\t\t<item>tacacs-server</item>\n\t\t\t<item>template</item>\n\t\t\t<item>terminal-queue</item>\n\t\t\t<item>tftp-server</item>\n\t\t\t<item>time-range</item>\n\t\t\t<item>username</item>\n\t\t\t<item>virtual-profile</item>\n\t\t\t<item>virtual-template</item>\n\t\t\t<item>vpdn</item>\n\t\t\t<item>vpdn-group</item>\n\t\t\t<item>x25</item>\n\t\t\t<item>x29</item>\n\t\t</list>\n\t\t<list name = \"parameters\">\n\t\t\t<item>accounting</item>\n\t\t\t<item>accounting-list</item>\n\t\t\t<item>accounting-threshold</item>\n\t\t\t<item>accounting-transits</item>\n\t\t\t<item>address-pool</item>\n\t\t\t<item>as-path</item>\n\t\t\t<item>audit</item>\n\t\t\t<item>auth-proxy</item>\n\t\t\t<item>authentication</item>\n\t\t\t<item>authorization</item>\n\t\t\t<item>bgp-community</item>\n\t\t\t<item>bootp</item>\n\t\t\t<item>cef</item>\n\t\t\t<item>classless</item>\n\t\t\t<item>community-list</item>\n\t\t\t<item>default-gateway</item>\n\t\t\t<item>default-network</item>\n\t\t\t<item>dhcp</item>\n\t\t\t<item>dhcp-server</item>\n\t\t\t<item>domain-list</item>\n\t\t\t<item>domain-lookup</item>\n\t\t\t<item>domain-name</item>\n\t\t\t<item>dvmrp</item>\n\t\t\t<item>exec-callback</item>\n\t\t\t<item>extcommunity-list</item>\n\t\t\t<item>finger</item>\n\t\t\t<item>flow-aggregation</item>\n\t\t\t<item>flow-cache</item>\n\t\t\t<item>flow-export</item>\n\t\t\t<item>forward-protocol</item>\n\t\t\t<item>ftp</item>\n\t\t\t<item>gratuitous-arps</item>\n\t\t\t<item>host</item>\n\t\t\t<item>host-routing</item>\n\t\t\t<item>hp-host</item>\n\t\t\t<item>http</item>\n\t\t\t<item>icmp</item>\n\t\t\t<item>inspect</item>\n\t\t\t<item>local</item>\n\t\t\t<item>mrm</item>\n\t\t\t<item>mroute</item>\n\t\t\t<item>msdp</item>\n\t\t\t<item>multicast</item>\n\t\t\t<item>multicast-routing</item>\n\t\t\t<item>name-server</item>\n\t\t\t<item>nat</item>\n\t\t\t<item>new-model</item>\n\t\t\t<item>ospf</item>\n\t\t\t<item>password</item>\n\t\t\t<item>password-encryption</item>\n\t\t\t<item>pgm</item>\n\t\t\t<item>pim</item>\n\t\t\t<item>port-map</item>\n\t\t\t<item>prefix-list</item>\n\t\t\t<item>radius</item>\n\t\t\t<item>rcmd</item>\n\t\t\t<item>reflexive-list</item>\n\t\t\t<item>route</item>\n\t\t\t<item>routing</item>\n\t\t\t<item>rsvp</item>\n\t\t\t<item>rtcp</item>\n\t\t\t<item>sap</item>\n\t\t\t<item>sdr</item>\n\t\t\t<item>security</item>\n\t\t\t<item>source-route</item>\n\t\t\t<item>subnet-zero</item>\n\t\t\t<item>tacacs</item>\n\t\t\t<item>tcp</item>\n\t\t\t<item>tcp-small-servers</item>\n\t\t\t<item>telnet</item>\n\t\t\t<item>tftp</item>\n\t\t\t<item>timestamps</item>\n\t\t\t<item>udp-small-servers</item>\n\t\t\t<item>vrf</item>\n\t\t\t<item>wccp</item>\n\t\t</list>\n\t\t<list name = \"options\">\n\t\t\t<item>accounting</item>\n\t\t\t<item>accounting-list</item>\n\t\t\t<item>accounting-threshold</item>\n\t\t\t<item>accounting-transits</item>\n\t\t\t<item>address-pool</item>\n\t\t\t<item>as-path</item>\n\t\t\t<item>audit</item>\n\t\t\t<item>auth-proxy</item>\n\t\t\t<item>authentication</item>\n\t\t\t<item>authorization</item>\n\t\t\t<item>bgp-community</item>\n\t\t\t<item>bootp</item>\n\t\t\t<item>cef</item>\n\t\t\t<item>classless</item>\n\t\t\t<item>community-list</item>\n\t\t\t<item>default-gateway</item>\n\t\t\t<item>default-network</item>\n\t\t\t<item>dhcp</item>\n\t\t\t<item>dhcp-server</item>\n\t\t\t<item>domain-list</item>\n\t\t\t<item>domain-lookup</item>\n\t\t\t<item>domain-name</item>\n\t\t\t<item>dvmrp</item>\n\t\t\t<item>exec-callback</item>\n\t\t\t<item>extcommunity-list</item>\n\t\t\t<item>finger</item>\n\t\t\t<item>flow-aggregation</item>\n\t\t\t<item>flow-cache</item>\n\t\t\t<item>flow-export</item>\n\t\t\t<item>forward-protocol</item>\n\t\t\t<item>ftp</item>\n\t\t\t<item>gratuitous-arps</item>\n\t\t\t<item>host</item>\n\t\t\t<item>host-routing</item>\n\t\t\t<item>hp-host</item>\n\t\t\t<item>http</item>\n\t\t\t<item>icmp</item>\n\t\t\t<item>inspect</item>\n\t\t\t<item>local</item>\n\t\t\t<item>mrm</item>\n\t\t\t<item>mroute</item>\n\t\t\t<item>msdp</item>\n\t\t\t<item>multicast</item>\n\t\t\t<item>multicast-routing</item>\n\t\t\t<item>name-server</item>\n\t\t\t<item>nat</item>\n\t\t\t<item>new-model</item>\n\t\t\t<item>ospf</item>\n\t\t\t<item>password</item>\n\t\t\t<item>password-encryption</item>\n\t\t\t<item>pgm</item>\n\t\t\t<item>pim</item>\n\t\t\t<item>port-map</item>\n\t\t\t<item>prefix-list</item>\n\t\t\t<item>radius</item>\n\t\t\t<item>rcmd</item>\n\t\t\t<item>reflexive-list</item>\n\t\t\t<item>route</item>\n\t\t\t<item>routing</item>\n\t\t\t<item>rsvp</item>\n\t\t\t<item>rtcp</item>\n\t\t\t<item>sap</item>\n\t\t\t<item>sdr</item>\n\t\t\t<item>security</item>\n\t\t\t<item>source-route</item>\n\t\t\t<item>subnet-zero</item>\n\t\t\t<item>tacacs</item>\n\t\t\t<item>tcp</item>\n\t\t\t<item>tcp-small-servers</item>\n\t\t\t<item>telnet</item>\n\t\t\t<item>tftp</item>\n\t\t\t<item>timestamps</item>\n\t\t\t<item>udp-small-servers</item>\n\t\t\t<item>vrf</item>\n\t\t\t<item>wccp</item>\n\t\t</list>\n\t\t<contexts>\n                        <context name = \"Base\" attribute = \"Normal Text\" lineEndContext = \"#stay\">\n                                <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"done\" insensitive=\"true\" endRegion=\"dodone1\"/>\n                                <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"do\" insensitive=\"true\" beginRegion=\"dodone1\"/>\n                                <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"elif\" insensitive=\"true\" beginRegion=\"iffi1\" endRegion=\"iffi1\"/>\n                                <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"if\" insensitive=\"true\" beginRegion=\"iffi1\"/>\n                                <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"fi\" insensitive=\"true\" endRegion=\"iffi1\"/>\n                                <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"case\" insensitive=\"true\" beginRegion=\"case1\"/>\n                                <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"esac\" insensitive=\"true\" endRegion=\"case1\"/>\n                                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"[^()]+\\)\" insensitive=\"true\" beginRegion=\"subcase1\" column=\"0\"/>\n                                <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\";\" char1=\";\" endRegion=\"subcase1\"/>\n                                <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"{\" beginRegion=\"func1\"/>\n                                <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"}\" endRegion=\"func1\"/>\n\n                                <keyword String = \"commands\" attribute = \"Command\" context = \"#stay\"/>\n                                <keyword String = \"parameters\" attribute = \"Parameter\" context = \"#stay\"/>\n                                <keyword String = \"options\" attribute = \"Keyword\" context = \"#stay\"/>\n                                <Int attribute = \"Decimal\" context = \"#stay\"/>\n                                <RegExpr String = \"\\$[A-Za-z0-9_?{}!]+\" attribute = \"Parameter\" context = \"#stay\"/>\n                                <RangeDetect char = \"&quot;\" char1 = \"&quot;\" attribute = \"String\" context = \"#stay\"/>\n                                <AnyChar String = \"|&lt;&gt;=;\" attribute = \"Operator\" context = \"#stay\"/>\n                                <DetectChar char=\"'\" attribute = \"String\" context = \"Single Quote\"/>\n                                <DetectChar char=\"`\" attribute = \"Substitution\" context = \"Substitution\"/>\n                                <Detect2Chars attribute = \"Normal Text\" context = \"#stay\" char = \"\\\" char1 = \"#\"/>\n                                <RegExpr String= \"#.*$\" attribute = \"Comment\" context=\"#stay\"/>\n\n                        </context>\n\t\t\t<context name = \"Single Quote\" attribute = \"String\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"\\\" attribute = \"String\" context = \"#stay\"/>\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"'\" attribute = \"String\" context = \"#stay\"/>\n\t\t\t\t<DetectChar char = \"'\" attribute = \"String\" context = \"#pop\"/>\n                        </context>\n                        <context name = \"Substitution\" attribute = \"Substitution\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"\\\" attribute = \"String\" context = \"#stay\"/>\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"`\" attribute = \"String\" context = \"#stay\"/>\n                                <DetectChar char = \"`\" attribute = \"Substitution\" context = \"#pop\"/>\n                        </context>\n                </contexts>\n                <itemDatas>\n                        <itemData name = \"Normal Text\" defStyleNum = \"dsNormal\"/>\n                        <itemData name = \"Keyword\" defStyleNum = \"dsKeyword\"/>\n                        <itemData name = \"Decimal\" defStyleNum = \"dsDecVal\"/>\n                        <itemData name = \"String\" defStyleNum = \"dsString\"/>\n                        <itemData name = \"Comment\" defStyleNum = \"dsComment\"/>\n                        <itemData name = \"Substitution\" defStyleNum = \"dsOthers\"/>\n                        <itemData name = \"Parameter\" defStyleNum = \"dsVariable\"/>\n                        <itemData name = \"Operator\" defStyleNum = \"dsOperator\"/>\n                        <itemData name = \"Command\" defStyleNum = \"dsNormal\"/>\n                </itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"!\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"0\"/>\n\t\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/clipper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Clipper\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.prg;*.PRG;*.ch\" mimetype=\"text/x-clipper-src\" priority=\"2\" author=\"Andrey Cherepanov (sibskull@mail.ru)\" license=\"GPL\">\n  <highlighting>\n\n    <list name=\"keywords\">\n    <!-- compiler directives and structures -->\n      <item>.and.</item>\n      <item>announce</item>\n      <item>begin</item>\n      <item>case</item>\n      <item>command</item>\n      <item>define</item>\n      <item>do</item>\n      <item>elseif</item>\n      <item>else</item>\n      <item>endcase</item>\n      <item>enddo</item>\n      <item>endif</item>\n      <item>error</item>\n      <item>exit</item>\n      <item>field</item>\n      <item>.f.</item>\n      <item>for</item>\n      <item>function</item>\n      <item>ifdef</item>\n      <item>if</item>\n      <item>include</item>\n      <item>init</item>\n      <item>inndef</item>\n      <item>local</item>\n      <item>memvar</item>\n      <item>next</item>\n      <item>nil</item>\n      <item>.not.</item>\n      <item>.or.</item>\n      <item>other</item>\n      <item>parameters</item>\n      <item>private</item>\n      <item>procedure</item>\n      <item>public</item>\n      <item>request</item>\n      <item>return</item>\n      <item>sequence</item>\n      <item>static</item>\n      <item>stdout</item>\n      <item>.t.</item>\n      <item>traslate</item>\n      <item>undef</item>\n      <item>while</item>\n      <item>xcommand</item>\n      <item>xtranslate</item>\n    </list>\n\n    <list name=\"commands\">\n    <!-- Commands -->\n      <item>accept</item>\n      <item>all</item>\n      <item>alternate</item>\n      <item>append</item>\n      <item>ascending</item>\n      <item>average</item>\n      <item>bell</item>\n      <item>blank</item>\n      <item>box</item>\n      <item>century</item>\n      <item>clear</item>\n      <item>close</item>\n      <item>coclor</item>\n      <item>color</item>\n      <item>commit</item>\n      <item>confirm</item>\n      <item>console</item>\n      <item>continue</item>\n      <item>copy</item>\n      <item>count</item>\n      <item>create</item>\n      <item>cursor</item>\n      <item>date</item>\n      <item>decimals</item>\n      <item>default</item>\n      <item>deleted</item>\n      <item>delete</item>\n      <item>delimiters</item>\n      <item>descending</item>\n      <item>device</item>\n      <item>display</item>\n      <item>do</item>\n      <item>eject</item>\n      <item>epoch</item>\n      <item>erase</item>\n      <item>escape</item>\n      <item>eval</item>\n      <item>every</item>\n      <item>exact</item>\n      <item>extended</item>\n      <item>file</item>\n      <item>filter</item>\n      <item>fixed</item>\n      <item>form</item>\n      <item>from</item>\n      <item>get</item>\n      <item>gets</item>\n      <item>go</item>\n      <item>goto</item>\n      <item>index</item>\n      <item>input</item>\n      <item>intensity</item>\n      <item>?</item>\n      <item>??</item>\n      <item>@</item>\n      <item>join</item>\n      <item>keyboard</item>\n      <item>key</item>\n      <item>label</item>\n      <item>list</item>\n      <item>locate</item>\n      <item>margin</item>\n      <item>memory</item>\n      <item>menu</item>\n      <item>message</item>\n      <item>new</item>\n      <item>on</item>\n      <item>order</item>\n      <item>pack</item>\n      <item>path</item>\n      <item>pict</item>\n      <item>printer</item>\n      <item>prompt</item>\n      <item>quit</item>\n      <item>range</item>\n      <item>read</item>\n      <item>recall</item>\n      <item>record</item>\n      <item>reindex</item>\n      <item>relation</item>\n      <item>release</item>\n      <item>rename</item>\n      <item>replace</item>\n      <item>report</item>\n      <item>rest</item>\n      <item>restore</item>\n      <item>run</item>\n      <item>save</item>\n      <item>say</item>\n      <item>scoreboard</item>\n      <item>seek</item>\n      <item>select</item>\n      <item>set</item>\n      <item>skip</item>\n      <item>softseek</item>\n      <item>sort</item>\n      <item>structure</item>\n      <item>sum</item>\n      <item>tag</item>\n      <item>to</item>\n      <item>total</item>\n      <item>typeahead</item>\n      <item>type</item>\n      <item>unique</item>\n      <item>unlock</item>\n      <item>update</item>\n      <item>use</item>\n      <item>valid</item>\n      <item>wait</item>\n      <item>when</item>\n      <item>with</item>\n      <item>wrap</item>\n      <item>zap</item>\n    </list>\n\n    <list name=\"functions\">\n    <!-- Functions -->\n      <item>aadd</item>\n      <item>abs</item>\n      <item>achoice</item>\n      <item>aclone</item>\n      <item>acopy</item>\n      <item>adel</item>\n      <item>aeval</item>\n      <item>afill</item>\n      <item>ains</item>\n      <item>alert</item>\n      <item>alias</item>\n      <item>alltrim</item>\n      <item>altd</item>\n      <item>array</item>\n      <item>ascan</item>\n      <item>asize</item>\n      <item>asort</item>\n      <item>atail</item>\n      <item>at</item>\n      <item>bin2i</item>\n      <item>bin2l</item>\n      <item>bin2w</item>\n      <item>bof</item>\n      <item>break</item>\n      <item>browse</item>\n      <item>cdowchr</item>\n      <item>chr</item>\n      <item>cmonth</item>\n      <item>col</item>\n      <item>colorselect</item>\n      <item>ctod</item>\n      <item>curdir</item>\n      <item>date</item>\n      <item>day</item>\n      <item>dbappend</item>\n      <item>dbclearall</item>\n      <item>dbclearfilter</item>\n      <item>dbclearindex</item>\n      <item>dbclearrelation</item>\n      <item>dbcloseall</item>\n      <item>dbclosearea</item>\n      <item>dbcommitall</item>\n      <item>dbcommit</item>\n      <item>dbcreateindex</item>\n      <item>dbcreate</item>\n      <item>dbdelete</item>\n      <item>dbedit</item>\n      <item>dbeval</item>\n      <item>dbfilter</item>\n      <item>dbf</item>\n      <item>dbgobottom</item>\n      <item>dbgoto</item>\n      <item>dbgotop</item>\n      <item>dbrecall</item>\n      <item>dbreindex</item>\n      <item>dbrelation</item>\n      <item>dbrlock</item>\n      <item>dbrlocklist</item>\n      <item>dbrselect</item>\n      <item>dbrunlock</item>\n      <item>dbseek</item>\n      <item>dbselectarea</item>\n      <item>dbsetfilter</item>\n      <item>dbsetindex</item>\n      <item>dbsetorder</item>\n      <item>dbsetrelation</item>\n      <item>dbskip</item>\n      <item>dbstruct</item>\n      <item>dbunlockall</item>\n      <item>dbunlock</item>\n      <item>dbusearea</item>\n      <item>deleted</item>\n      <item>descend</item>\n      <item>devout</item>\n      <item>devpos</item>\n      <item>directory</item>\n      <item>dispbegin</item>\n      <item>dispbox</item>\n      <item>dispcount</item>\n      <item>dispend</item>\n      <item>dispout</item>\n      <item>dispspace</item>\n      <item>doserror</item>\n      <item>dow</item>\n      <item>dtoc</item>\n      <item>dtos</item>\n      <item>empty</item>\n      <item>eof</item>\n      <item>errorblock</item>\n      <item>errorinhandler</item>\n      <item>errorlevel</item>\n      <item>eval</item>\n      <item>exp</item>\n      <item>fclose</item>\n      <item>fcount</item>\n      <item>fcreate</item>\n      <item>ferase</item>\n      <item>ferror</item>\n      <item>fieldblock</item>\n      <item>fieldget</item>\n      <item>field</item>\n      <item>fieldname</item>\n      <item>fieldpos</item>\n      <item>fieldput</item>\n      <item>fieldwblock</item>\n      <item>file</item>\n      <item>flock</item>\n      <item>fopen</item>\n      <item>found</item>\n      <item>fread</item>\n      <item>freadstr</item>\n      <item>frename</item>\n      <item>fseek</item>\n      <item>fwrite</item>\n      <item>getactive</item>\n      <item>getenv</item>\n      <item>hardcr</item>\n      <item>header</item>\n      <item>i2bin</item>\n      <item>iif</item>\n      <item>indexext</item>\n      <item>indexkey</item>\n      <item>indexord</item>\n      <item>inkey</item>\n      <item>int</item>\n      <item>isalpha</item>\n      <item>iscolor</item>\n      <item>isdigit</item>\n      <item>islower</item>\n      <item>isprinter</item>\n      <item>isupper</item>\n      <item>l2bin</item>\n      <item>lastkey</item>\n      <item>lastrec</item>\n      <item>left</item>\n      <item>len</item>\n      <item>lock</item>\n      <item>log</item>\n      <item>lower</item>\n      <item>ltrim</item>\n      <item>lupdate</item>\n      <item>maxcol</item>\n      <item>max</item>\n      <item>maxrow</item>\n      <item>memoedit</item>\n      <item>memoline</item>\n      <item>memoread</item>\n      <item>memory</item>\n      <item>memotran</item>\n      <item>memowrit</item>\n      <item>memvarblock</item>\n      <item>min</item>\n      <item>mlcount</item>\n      <item>mlctopos</item>\n      <item>mlpos</item>\n      <item>mod</item>\n      <item>month</item>\n      <item>mpostolc</item>\n      <item>neterr</item>\n      <item>netname</item>\n      <item>nextkey</item>\n      <item>nosnow</item>\n      <item>ordbagext</item>\n      <item>ordbagname</item>\n      <item>ordcreate</item>\n      <item>orddestroy</item>\n      <item>ordfor</item>\n      <item>ordkey</item>\n      <item>ordlistadd</item>\n      <item>ordlistclear</item>\n      <item>ordlistrebuild</item>\n      <item>ordname</item>\n      <item>ordnumber</item>\n      <item>ordsetfocus</item>\n      <item>os</item>\n      <item>outerr</item>\n      <item>outstd</item>\n      <item>padc</item>\n      <item>padl</item>\n      <item>padr</item>\n      <item>pcol</item>\n      <item>pcount</item>\n      <item>proclineprocname</item>\n      <item>prow</item>\n      <item>qout</item>\n      <item>qqout</item>\n      <item>rat</item>\n      <item>rddlist</item>\n      <item>rddname</item>\n      <item>rddsetdefault</item>\n      <item>readexit</item>\n      <item>readinsert</item>\n      <item>readmodal</item>\n      <item>readvar</item>\n      <item>reccount</item>\n      <item>recno</item>\n      <item>recsize</item>\n      <item>replicate</item>\n      <item>restscreen</item>\n      <item>right</item>\n      <item>rlock</item>\n      <item>round</item>\n      <item>row</item>\n      <item>rtrim</item>\n      <item>savesreen</item>\n      <item>scroll</item>\n      <item>seconds</item>\n      <item>select</item>\n      <item>setblink</item>\n      <item>setcancel</item>\n      <item>setcolor</item>\n      <item>setcursor</item>\n      <item>setkey</item>\n      <item>setmode</item>\n      <item>setpos</item>\n      <item>setprc</item>\n      <item>soundex</item>\n      <item>space</item>\n      <item>sqrt</item>\n      <item>str</item>\n      <item>strtran</item>\n      <item>stuff</item>\n      <item>substr</item>\n      <item>time</item>\n      <item>tone</item>\n      <item>transform</item>\n      <item>trim</item>\n      <item>updated</item>\n      <item>upper</item>\n      <item>used</item>\n      <item>val</item>\n      <item>valtype</item>\n      <item>version</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"function\" insensitive=\"true\" beginRegion=\"regFunction\" />\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" column=\"0\" String=\"return\" insensitive=\"true\" endRegion=\"regFunction\" />\n\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bbegin\\s+sequence\\b\" insensitive=\"true\" beginRegion=\"regSequence\" />\n\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+sequence\\b\" insensitive=\"true\" endRegion=\"regSequence\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bdo\\s+case\\b\" insensitive=\"true\" beginRegion=\"regDoCase\" />\n    <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"endcase\" insensitive=\"true\" endRegion=\"regDoCase\" />\n\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bdo\\s+while\\b\" insensitive=\"true\" beginRegion=\"regDoWhile\" />\n\t<WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"enddo\" insensitive=\"true\" endRegion=\"regDoWhile\" />\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"for\" insensitive=\"true\" beginRegion=\"regFor\" />\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"next\" insensitive=\"true\" endRegion=\"regFor\" />\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"if\" insensitive=\"true\" beginRegion=\"regIf\" />\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"elseif\" insensitive=\"true\" endRegion=\"regIf\" beginRegion=\"regIf\" />\n\t<WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"else\" insensitive=\"true\" endRegion=\"regIf\" beginRegion=\"regIf\" />\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"endif\" insensitive=\"true\" endRegion=\"regIf\" />\n\t<WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"switch\" insensitive=\"true\" beginRegion=\"regSwitch\" />\n\t<WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"endswitch\" insensitive=\"true\" endRegion=\"regSwitch\" />\n\n\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Command\" context=\"#stay\" String=\"commands\"/>\n        <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\"/>\n        <HlCHex  attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"regMarker\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"regMarker\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"LineComment\" char=\"/\" char1=\"/\"/>\n\t<RegExpr attribute=\"Comment\" context=\"LineComment\" String=\"^\\s*\\*.*$\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;:=&gt;[]^~\"/>\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\"/>\n        <Detect2Chars attribute=\"Eval Block\" context=\"EvalBlock\" char=\"{\" char1=\"|\"/>\n        <DetectChar attribute=\"String\" context=\"String2\" char=\"'\"/>\n\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"LineComment\">\n        <RegExpr attribute=\"Command\" context=\"#stay\" String=\"(FIXME|TODO|NOT(IC)?E)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"BlockComment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n        <RegExpr attribute=\"Command\" context=\"#stay\" String=\"(FIXME|TODO|NOT(IC)?E)\" />\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"regMarker\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"regMarker\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"LineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n      </context>\n      <context attribute=\"Eval Block\" lineEndContext=\"#stay\" name=\"EvalBlock\">\n        <LineContinue attribute=\"Eval Block\" context=\"#stay\"/>\n        <DetectChar attribute=\"Eval Block\" context=\"#pop\" char=\"}\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String2\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" \tdefStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  \tdefStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Command\"  \tdefStyleNum=\"dsDataType\"/>\n      <itemData name=\"Function\"  \tdefStyleNum=\"dsFunction\"/>\n      <itemData name=\"String\"  \t\tdefStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"  \tdefStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  \t\tdefStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\"\tdefStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Prep. Lib\"  \tdefStyleNum=\"dsImport\"/>\n      <itemData name=\"Eval Block\"  \tdefStyleNum=\"dsOthers\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"*\" />\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\"?.\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/clist.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"CLIST\" version=\"1\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.clist;*.CLIST\" mimetype=\"\" license=\"MIT\">\n    <!--\n      Command LIST, or CLIST, is the scripting language for TSO (Time Sharing Option) on IBM mainframes running z/OS.\n      Developers can use CLISTs to automate repetitive tasks or to automate complex TSO commands.\n    -->\n  <highlighting>\n    <list name=\"control\">\n        <item>ATTN</item>\n        <item>CONTROL</item>\n        <item>DATA-ENDDATA</item>\n        <item>DATA-PROMPT</item>\n        <item>ERROR</item>\n        <item>EXIT</item>\n        <item>GLOBAL</item>\n        <item>GOTO</item>\n        <item>NGLOBAL</item>\n        <item>PROC</item>\n        <item>RETURN</item>\n        <item>SYSCALL</item>\n        <item>SYSREF</item>\n        <item>TERMIN</item>\n        <item>WRITE</item>\n        <item>WRITENR</item>\n    </list>\n    <list name=\"assignment\">\n        <item>READ</item>\n        <item>READDVAL</item>\n        <item>SET</item>\n        <item>LISTDSI</item>\n    </list>\n    <list name=\"flowcontrol\">\n        <item>DO</item>\n        <item>IF</item>\n        <item>TO</item>\n        <item>THEN</item>\n        <item>END</item>\n        <item>ELSE</item>\n        <item>SELECT</item>\n    </list>\n    <list name=\"IO\">\n        <item>CLOSFILE</item>\n        <item>GETFILE</item>\n        <item>OPENFILE</item>\n        <item>PUTFILE</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Control\"      context=\"#stay\" String=\"control\" />\n        <keyword attribute=\"Assignment\"   context=\"#stay\" String=\"assignment\" />\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"flowcontrol\" />\n        <keyword attribute=\"inputOutput\"  context=\"#stay\" String=\"IO\" />\n        <RegExpr attribute=\"Variable\"     context=\"#stay\" insensitive=\"true\" String=\"&amp;+[A-Z0-9]*\"/>\n        <RegExpr attribute=\"Number\"       context=\"#stay\" insensitive=\"true\" String=\"\\b(\\d+)\\b\"/>\n        <RegExpr attribute=\"String\"       context=\"#stay\" insensitive=\"true\" String=\"(?&lt;=WRITE).*\"/>\n        <DetectChar attribute=\"String\"    context=\"String\" char=\"&apos;\"/>\n        <DetectChar attribute=\"String\"    context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"comments\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"comments\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&apos;\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Control\"      defStyleNum=\"dsControlFlow\"/>\n      <itemData name=\"Assignment\"   defStyleNum=\"dsBuiltIn\"/>\n      <itemData name=\"Control Flow\" defStyleNum=\"dsControlFlow\"/>\n      <itemData name=\"inputOutput\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Variable\"     defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Number\"       defStyleNum=\"dsDataType\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"/*\"/>\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/clojure.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  This file is part of KDE's kate project.\n\n  copyright   : (C) 2004 by Dominik Haumann, (C) 2011 by Caspar Hasenclever\n\n **********************************************************************\n * This library is free software; you can redistribute it and/or      *\n * modify it under the terms of the GNU Library General Public        *\n * License as published by the Free Software Foundation; either       *\n * version 2 of the License, or (at your option) any later version.   *\n *                                                                    *\n * This library is distributed in the hope that it will be useful,    *\n * but WITHOUT ANY WARRANTY; without even the implied warranty of     *\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *\n * Library General Public License for more details.                   *\n *                                                                    *\n * You should have received a copy of the GNU Library General Public  *\n * License along with this library; if not, write to the              *\n * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,   *\n * Boston, MA  02110-1301, USA.                                       *\n **********************************************************************\n -->\n<language version=\"10\" kateversion=\"5.0\" name=\"Clojure\" section=\"Sources\" extensions=\"*.clj;*.cljs;*.cljc\" mimetype=\"\" author=\"Dominik Haumann [lisp] modified for clojure by Caspar Hasenclever\" license=\"LGPLv2+\">\n  <highlighting>\n    <list name=\"definitions\">\n      <item>def</item>\n      <item>def-</item>\n      <item>defalias</item>\n      <item>defhinted</item>\n      <item>definline</item>\n      <item>defmethod</item>\n      <item>defmulti</item>\n      <item>defnk</item>\n      <item>defn-memo</item>\n      <item>defonce</item>\n      <item>defonce-</item>\n      <item>defprotocol</item>\n      <item>defrecord</item>\n      <item>defstruct</item>\n      <item>defstruct-</item>\n      <item>deftest</item>\n      <item>deftest-</item>\n      <item>deftype</item>\n      <item>defunbound</item>\n      <item>defunbound-</item>\n      <item>defvar</item>\n      <item>defvar-</item>\n    </list>\n    <list name=\"documentable_definitions\">\n      <item>defn</item>\n      <item>defn-</item>\n      <item>defmacro</item>\n      <item>defmacro-</item>\n    </list>\n    <list name=\"keywords\">\n      <item>&lt;</item>\n      <item>&lt;=</item>\n      <item>=</item>\n      <item>==</item>\n      <item>&gt;</item>\n      <item>&gt;=</item>\n      <item>-</item>\n      <item>-'</item>\n      <item>-&gt;</item>\n      <item>-&gt;&gt;</item>\n      <item>/</item>\n      <item>.</item>\n      <item>..</item>\n      <item>*</item>\n      <item>*'</item>\n      <item>+</item>\n      <item>+'</item>\n      <item>accessor</item>\n      <item>aclone</item>\n      <item>add-classpath</item>\n      <item>add-watch</item>\n      <item>agent</item>\n      <item>agent-errors</item>\n      <item>aget</item>\n      <item>alength</item>\n      <item>alias</item>\n      <item>all-ns</item>\n      <item>alter</item>\n      <item>alter-meta!</item>\n      <item>alter-var-root</item>\n      <item>amap</item>\n      <item>ancestors</item>\n      <item>and</item>\n      <item>append-child</item>\n      <item>apply</item>\n      <item>apply-template</item>\n      <item>are</item>\n      <item>areduce</item>\n      <item>array-map</item>\n      <item>as-&gt;</item>\n      <item>aset</item>\n      <item>aset-boolean</item>\n      <item>aset-byte</item>\n      <item>aset-char</item>\n      <item>aset-double</item>\n      <item>aset-float</item>\n      <item>aset-int</item>\n      <item>aset-long</item>\n      <item>aset-short</item>\n      <item>assert</item>\n      <item>assert-any</item>\n      <item>assert-expr</item>\n      <item>assert-predicate</item>\n      <item>assoc</item>\n      <item>assoc!</item>\n      <item>associative?</item>\n      <item>assoc-in</item>\n      <item>atom</item>\n      <item>atom?</item>\n      <item>attrs</item>\n      <item>await</item>\n      <item>await1</item>\n      <item>await-for</item>\n      <item>bases</item>\n      <item>bean</item>\n      <item>bigdec</item>\n      <item>bigint</item>\n      <item>binding</item>\n      <item>bit-and</item>\n      <item>bit-and-not</item>\n      <item>bit-clear</item>\n      <item>bit-flip</item>\n      <item>bit-not</item>\n      <item>bit-or</item>\n      <item>bit-set</item>\n      <item>bit-shift-left</item>\n      <item>bit-shift-right</item>\n      <item>bit-test</item>\n      <item>bit-xor</item>\n      <item>boolean</item>\n      <item>boolean-array</item>\n      <item>booleans</item>\n      <item>bound-fn</item>\n      <item>bound-fn*</item>\n      <item>branch?</item>\n      <item>butlast</item>\n      <item>byte</item>\n      <item>byte-array</item>\n      <item>bytes</item>\n      <item>case</item>\n      <item>cast</item>\n      <item>catch</item>\n      <item>char</item>\n      <item>char?</item>\n      <item>char-array</item>\n      <item>char-escape-string</item>\n      <item>char-name-string</item>\n      <item>chars</item>\n      <item>children</item>\n      <item>chunk</item>\n      <item>chunk-append</item>\n      <item>chunk-buffer</item>\n      <item>chunk-cons</item>\n      <item>chunked-seq?</item>\n      <item>chunk-first</item>\n      <item>chunk-next</item>\n      <item>chunk-rest</item>\n      <item>class</item>\n      <item>class?</item>\n      <item>clear-agent-errors</item>\n      <item>clojure-version</item>\n      <item>coll?</item>\n      <item>collection-tag</item>\n      <item>comment</item>\n      <item>commute</item>\n      <item>comp</item>\n      <item>comparator</item>\n      <item>compare</item>\n      <item>compare-and-set!</item>\n      <item>compile</item>\n      <item>complement</item>\n      <item>compose-fixtures</item>\n      <item>concat</item>\n      <item>cond</item>\n      <item>condp</item>\n      <item>conj</item>\n      <item>conj!</item>\n      <item>cons</item>\n      <item>constantly</item>\n      <item>construct-proxy</item>\n      <item>contains?</item>\n      <item>content</item>\n      <item>content-handler</item>\n      <item>count</item>\n      <item>counted?</item>\n      <item>create-ns</item>\n      <item>create-struct</item>\n      <item>cycle</item>\n      <item>dec</item>\n      <item>dec'</item>\n      <item>decimal?</item>\n      <item>declare</item>\n      <item>delay</item>\n      <item>delay?</item>\n      <item>deliver</item>\n      <item>deref</item>\n      <item>derive</item>\n      <item>descendants</item>\n      <item>destructure</item>\n      <item>difference</item>\n      <item>disj</item>\n      <item>disj!</item>\n      <item>dissoc</item>\n      <item>dissoc!</item>\n      <item>distinct</item>\n      <item>distinct?</item>\n      <item>do</item>\n      <item>doall</item>\n      <item>doc</item>\n      <item>dorun</item>\n      <item>doseq</item>\n      <item>dosync</item>\n      <item>do-template</item>\n      <item>dotimes</item>\n      <item>doto</item>\n      <item>double</item>\n      <item>double-array</item>\n      <item>doubles</item>\n      <item>down</item>\n      <item>drop</item>\n      <item>drop-last</item>\n      <item>drop-while</item>\n      <item>e</item>\n      <item>edit</item>\n      <item>element</item>\n      <item>emit</item>\n      <item>emit-element</item>\n      <item>empty</item>\n      <item>empty?</item>\n      <item>end?</item>\n      <item>ensure</item>\n      <item>enumeration-seq</item>\n      <item>eval</item>\n      <item>even?</item>\n      <item>every?</item>\n      <item>extend</item>\n      <item>extenders</item>\n      <item>extend-protocol</item>\n      <item>extends?</item>\n      <item>extend-type</item>\n      <item>false?</item>\n      <item>ffirst</item>\n      <item>file-position</item>\n      <item>file-seq</item>\n      <item>filter</item>\n      <item>filterv</item>\n      <item>finally</item>\n      <item>find</item>\n      <item>find-doc</item>\n      <item>find-ns</item>\n      <item>find-var</item>\n      <item>first</item>\n      <item>float</item>\n      <item>float?</item>\n      <item>float-array</item>\n      <item>floats</item>\n      <item>flush</item>\n      <item>fn</item>\n      <item>fn?</item>\n      <item>fnext</item>\n      <item>fnil</item>\n      <item>for</item>\n      <item>force</item>\n      <item>format</item>\n      <item>frequencies</item>\n      <item>function?</item>\n      <item>future</item>\n      <item>future?</item>\n      <item>future-call</item>\n      <item>future-cancel</item>\n      <item>future-cancelled?</item>\n      <item>future-done?</item>\n      <item>gen-and-load-class</item>\n      <item>gen-and-save-class</item>\n      <item>gen-class</item>\n      <item>gen-interface</item>\n      <item>gensym</item>\n      <item>get</item>\n      <item>get-child</item>\n      <item>get-child-count</item>\n      <item>get-in</item>\n      <item>get-method</item>\n      <item>get-possibly-unbound-var</item>\n      <item>get-proxy-class</item>\n      <item>get-thread-bindings</item>\n      <item>get-validator</item>\n      <item>group-by</item>\n      <item>handle</item>\n      <item>handler-case</item>\n      <item>hash</item>\n      <item>hash-map</item>\n      <item>hash-set</item>\n      <item>identical?</item>\n      <item>identity</item>\n      <item>if</item>\n      <item>if-let</item>\n      <item>ifn?</item>\n      <item>if-not</item>\n      <item>import</item>\n      <item>inc</item>\n      <item>inc'</item>\n      <item>inc-report-counter</item>\n      <item>index</item>\n      <item>init-proxy</item>\n      <item>in-ns</item>\n      <item>insert-child</item>\n      <item>insert-left</item>\n      <item>insert-right</item>\n      <item>inspect</item>\n      <item>inspect-table</item>\n      <item>inspect-tree</item>\n      <item>instance?</item>\n      <item>int</item>\n      <item>int-array</item>\n      <item>integer?</item>\n      <item>interleave</item>\n      <item>intern</item>\n      <item>interpose</item>\n      <item>intersection</item>\n      <item>into</item>\n      <item>into-array</item>\n      <item>ints</item>\n      <item>io!</item>\n      <item>is</item>\n      <item>isa?</item>\n      <item>is-leaf</item>\n      <item>iterate</item>\n      <item>iterator-seq</item>\n      <item>join</item>\n      <item>join-fixtures</item>\n      <item>juxt</item>\n      <item>key</item>\n      <item>keys</item>\n      <item>keyword</item>\n      <item>keyword?</item>\n      <item>keywordize-keys</item>\n      <item>last</item>\n      <item>lazy-cat</item>\n      <item>lazy-seq</item>\n      <item>left</item>\n      <item>leftmost</item>\n      <item>lefts</item>\n      <item>let</item>\n      <item>letfn</item>\n      <item>line-seq</item>\n      <item>list</item>\n      <item>list*</item>\n      <item>list?</item>\n      <item>list-model</item>\n      <item>list-provider</item>\n      <item>load</item>\n      <item>loaded-libs</item>\n      <item>load-file</item>\n      <item>load-reader</item>\n      <item>load-script</item>\n      <item>load-string</item>\n      <item>locking</item>\n      <item>long</item>\n      <item>long-array</item>\n      <item>longs</item>\n      <item>loop</item>\n      <item>macroexpand</item>\n      <item>macroexpand-1</item>\n      <item>macroexpand-all</item>\n      <item>main</item>\n      <item>make-array</item>\n      <item>make-hierarchy</item>\n      <item>make-node</item>\n      <item>map</item>\n      <item>map?</item>\n      <item>mapcat</item>\n      <item>mapv</item>\n      <item>map-invert</item>\n      <item>max</item>\n      <item>max-key</item>\n      <item>memfn</item>\n      <item>memoize</item>\n      <item>merge</item>\n      <item>merge-with</item>\n      <item>meta</item>\n      <item>methods</item>\n      <item>method-sig</item>\n      <item>min</item>\n      <item>min-key</item>\n      <item>mod</item>\n      <item>name</item>\n      <item>namespace</item>\n      <item>neg?</item>\n      <item>newline</item>\n      <item>next</item>\n      <item>nfirst</item>\n      <item>nil?</item>\n      <item>nnext</item>\n      <item>node</item>\n      <item>not</item>\n      <item>not=</item>\n      <item>not-any?</item>\n      <item>not-empty</item>\n      <item>not-every?</item>\n      <item>ns</item>\n      <item>ns-aliases</item>\n      <item>ns-imports</item>\n      <item>ns-interns</item>\n      <item>ns-map</item>\n      <item>ns-name</item>\n      <item>ns-publics</item>\n      <item>ns-refers</item>\n      <item>ns-resolve</item>\n      <item>ns-unalias</item>\n      <item>ns-unmap</item>\n      <item>nth</item>\n      <item>nthnext</item>\n      <item>num</item>\n      <item>number?</item>\n      <item>odd?</item>\n      <item>or</item>\n      <item>parents</item>\n      <item>partial</item>\n      <item>partition</item>\n      <item>path</item>\n      <item>pcalls</item>\n      <item>peek</item>\n      <item>persistent!</item>\n      <item>pmap</item>\n      <item>pop</item>\n      <item>pop!</item>\n      <item>pop-thread-bindings</item>\n      <item>pos?</item>\n      <item>postwalk</item>\n      <item>postwalk-demo</item>\n      <item>postwalk-replace</item>\n      <item>pr</item>\n      <item>prefer-method</item>\n      <item>prefers</item>\n      <item>prev</item>\n      <item>prewalk</item>\n      <item>prewalk-demo</item>\n      <item>prewalk-replace</item>\n      <item>primitives-classnames</item>\n      <item>print</item>\n      <item>print-cause-trace</item>\n      <item>print-ctor</item>\n      <item>print-doc</item>\n      <item>print-dup</item>\n      <item>printf</item>\n      <item>println</item>\n      <item>println-str</item>\n      <item>print-method</item>\n      <item>print-namespace-doc</item>\n      <item>print-simple</item>\n      <item>print-special-doc</item>\n      <item>print-stack-trace</item>\n      <item>print-str</item>\n      <item>print-throwable</item>\n      <item>print-trace-element</item>\n      <item>prn</item>\n      <item>prn-str</item>\n      <item>project</item>\n      <item>promise</item>\n      <item>proxy</item>\n      <item>proxy-call-with-super</item>\n      <item>proxy-mappings</item>\n      <item>proxy-name</item>\n      <item>proxy-super</item>\n      <item>pr-str</item>\n      <item>push-thread-bindings</item>\n      <item>pvalues</item>\n      <item>quot</item>\n      <item>rand</item>\n      <item>rand-int</item>\n      <item>rand-nth</item>\n      <item>range</item>\n      <item>ratio?</item>\n      <item>rational?</item>\n      <item>rationalize</item>\n      <item>read</item>\n      <item>read-line</item>\n      <item>read-string</item>\n      <item>recur</item>\n      <item>reduce</item>\n      <item>ref</item>\n      <item>refer</item>\n      <item>refer-clojure</item>\n      <item>ref-history-count</item>\n      <item>re-find</item>\n      <item>ref-max-history</item>\n      <item>ref-min-history</item>\n      <item>ref-set</item>\n      <item>re-groups</item>\n      <item>reify</item>\n      <item>release-pending-sends</item>\n      <item>rem</item>\n      <item>re-matcher</item>\n      <item>re-matches</item>\n      <item>remove</item>\n      <item>remove-method</item>\n      <item>remove-ns</item>\n      <item>remove-watch</item>\n      <item>rename</item>\n      <item>rename-keys</item>\n      <item>re-pattern</item>\n      <item>repeat</item>\n      <item>repeatedly</item>\n      <item>repl</item>\n      <item>replace</item>\n      <item>repl-caught</item>\n      <item>repl-exception</item>\n      <item>replicate</item>\n      <item>repl-prompt</item>\n      <item>repl-read</item>\n      <item>report</item>\n      <item>require</item>\n      <item>re-seq</item>\n      <item>reset!</item>\n      <item>reset-meta!</item>\n      <item>resolve</item>\n      <item>rest</item>\n      <item>resultset-seq</item>\n      <item>reverse</item>\n      <item>reversible?</item>\n      <item>right</item>\n      <item>rightmost</item>\n      <item>rights</item>\n      <item>root</item>\n      <item>rseq</item>\n      <item>rsubseq</item>\n      <item>run-all-tests</item>\n      <item>run-tests</item>\n      <item>satisfies?</item>\n      <item>second</item>\n      <item>select</item>\n      <item>select-keys</item>\n      <item>send</item>\n      <item>send-off</item>\n      <item>seq</item>\n      <item>seq?</item>\n      <item>seque</item>\n      <item>sequence</item>\n      <item>sequential?</item>\n      <item>seq-zip</item>\n      <item>set</item>\n      <item>set?</item>\n      <item>set-test</item>\n      <item>set-validator!</item>\n      <item>short</item>\n      <item>short-array</item>\n      <item>shorts</item>\n      <item>shutdown-agents</item>\n      <item>skip-if-eol</item>\n      <item>skip-whitespace</item>\n      <item>slurp</item>\n      <item>some</item>\n      <item>sort</item>\n      <item>sort-by</item>\n      <item>sorted?</item>\n      <item>sorted-map</item>\n      <item>sorted-map-by</item>\n      <item>sorted-set</item>\n      <item>sorted-set-by</item>\n      <item>special-form-anchor</item>\n      <item>special-symbol?</item>\n      <item>split-at</item>\n      <item>split-with</item>\n      <item>str</item>\n      <item>stream?</item>\n      <item>string?</item>\n      <item>stringify-keys</item>\n      <item>struct</item>\n      <item>struct-map</item>\n      <item>subs</item>\n      <item>subseq</item>\n      <item>subvec</item>\n      <item>successful?</item>\n      <item>supers</item>\n      <item>swap!</item>\n      <item>symbol</item>\n      <item>symbol?</item>\n      <item>sync</item>\n      <item>syntax-symbol-anchor</item>\n      <item>take</item>\n      <item>take-last</item>\n      <item>take-nth</item>\n      <item>take-while</item>\n      <item>test</item>\n      <item>test-all-vars</item>\n      <item>testing</item>\n      <item>testing-contexts-str</item>\n      <item>testing-vars-str</item>\n      <item>test-ns</item>\n      <item>test-var</item>\n      <item>the-ns</item>\n      <item>throw</item>\n      <item>time</item>\n      <item>to-array</item>\n      <item>to-array-2d</item>\n      <item>trampoline</item>\n      <item>transient</item>\n      <item>tree-seq</item>\n      <item>true?</item>\n      <item>try</item>\n      <item>try-expr</item>\n      <item>type</item>\n      <item>unchecked-add</item>\n      <item>unchecked-dec</item>\n      <item>unchecked-divide</item>\n      <item>unchecked-inc</item>\n      <item>unchecked-multiply</item>\n      <item>unchecked-negate</item>\n      <item>unchecked-remainder</item>\n      <item>unchecked-subtract</item>\n      <item>underive</item>\n      <item>unimport</item>\n      <item>union</item>\n      <item>unquote</item>\n      <item>unquote-splicing</item>\n      <item>up</item>\n      <item>update</item>\n      <item>update-in</item>\n      <item>update-proxy</item>\n      <item>use</item>\n      <item>use-fixtures</item>\n      <item>val</item>\n      <item>vals</item>\n      <item>var?</item>\n      <item>var-get</item>\n      <item>var-set</item>\n      <item>vary-meta</item>\n      <item>vec</item>\n      <item>vector</item>\n      <item>vector?</item>\n      <item>vector-of</item>\n      <item>walk</item>\n      <item>when</item>\n      <item>when-first</item>\n      <item>when-let</item>\n      <item>when-not</item>\n      <item>while</item>\n      <item>with-bindings</item>\n      <item>with-bindings*</item>\n      <item>with-in-str</item>\n      <item>with-loading-context</item>\n      <item>with-local-vars</item>\n      <item>with-meta</item>\n      <item>with-open</item>\n      <item>with-out-str</item>\n      <item>with-precision</item>\n      <item>with-test</item>\n      <item>with-test-out</item>\n      <item>xml-seq</item>\n      <item>zero?</item>\n      <item>zipmap</item>\n    </list>\n    <list name=\"variables\">\n      <item>*1</item>\n      <item>*2</item>\n      <item>*3</item>\n      <item>*agent*</item>\n      <item>*allow-unresolved-vars*</item>\n      <item>*assert*</item>\n      <item>*clojure-version*</item>\n      <item>*command-line-args*</item>\n      <item>*compile-files*</item>\n      <item>*compile-path*</item>\n      <item>*current*</item>\n      <item>*e</item>\n      <item>*err*</item>\n      <item>*file*</item>\n      <item>*flush-on-newline*</item>\n      <item>*in*</item>\n      <item>*initial-report-counters*</item>\n      <item>*load-tests*</item>\n      <item>*macro-meta*</item>\n      <item>*math-context*</item>\n      <item>*ns*</item>\n      <item>*out*</item>\n      <item>*print-dup*</item>\n      <item>*print-length*</item>\n      <item>*print-level*</item>\n      <item>*print-meta*</item>\n      <item>*print-readably*</item>\n      <item>*read-eval*</item>\n      <item>*report-counters*</item>\n      <item>*sb*</item>\n      <item>*source-path*</item>\n      <item>*stack*</item>\n      <item>*stack-trace-depth*</item>\n      <item>*state*</item>\n      <item>*testing-contexts*</item>\n      <item>*testing-vars*</item>\n      <item>*test-out*</item>\n      <item>*use-context-classloader*</item>\n      <item>*warn-on-reflection*</item>\n      <item>*warn-on-reflection*</item>\n      <item>false</item>\n      <item>nil</item>\n      <item>true</item>\n    </list>\n    <contexts>\n      <context name=\"Level0\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"'\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"`\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"#\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"@\" char1=\"(\"/>\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Default\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"#\" char1=\"_\"/>\n        <RegExpr attribute=\"Readermacro\" context=\"#stay\" String=\"#\\?@?\"/>\n        <RegExpr attribute=\"Modifier\" context=\"#stay\" String=\"[@~'`][^\\s\\(\\)\\{\\}\\[\\]]+\"/>\n        <RegExpr attribute=\"Modifier\" context=\"#stay\" String=\"[^\\s&quot;\\(\\)\\{\\}\\[\\]]+#\"/>\n        <RegExpr attribute=\"Modifier2\" context=\"#stay\" String=\"::?[a-zA-Z0-9\\-\\./]+\"/>\n        <Detect2Chars attribute=\"BracketsSet\" context=\"BracketsSet\" char=\"#\" char1=\"{\"/>\n        <Detect2Chars attribute=\"BracketsMeta\" context=\"BracketsMeta\" char=\"^\" char1=\"{\"/>\n        <DetectChar attribute=\"BracketsMap\" context=\"BracketsMap\" char=\"{\"/>\n        <DetectChar attribute=\"BracketsSquare\" context=\"#stay\" char=\"[\"/>\n        <DetectChar attribute=\"BracketsSquare\" context=\"#stay\" char=\"]\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"#'[^\\s\\(\\)\\{\\}\\[\\]]+\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"%[0-9]*\"/>\n        <keyword attribute=\"Variable\" context=\"#stay\" String=\"variables\"/>\n        <keyword attribute=\"Definition\" context=\"function_decl_documentable\" String=\"documentable_definitions\"/>\n        <keyword attribute=\"Definition\" context=\"function_decl\" String=\"definitions\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"\\\\u[0-9A-Fa-f]+|\\\\o[0-7]+|\\\\backspace|\\\\formfeed|\\\\newline|\\\\space|\\\\tab|\\\\[^\\s\\(\\)\\{\\}\\[\\]]\"/>\n        <Detect2Chars attribute=\"Regexpr\" context=\"Regexpr\" char=\"#\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"[0-9]+/[0-9]+\"/>\n        <RegExpr attribute=\"BaseN\" context=\"#stay\" String=\"0[xX][0-9A-Fa-f]+\"/>\n        <RegExpr attribute=\"BaseN\" context=\"#stay\" String=\"([12]?[0-9]|3[0-6])[rR][0-9a-zA-Z]+\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"(3[7-9]|[0-9]*[4-9][0-9]+)[rR][0-9a-zA-Z]+\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n            <StringDetect attribute=\"Float\" context=\"#pop\" String=\"M\" insensitive=\"false\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"N\" insensitive=\"false\"/>\n      </context>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <RegExpr String=\"(FIXME|TODO):?\" attribute=\"Alert\" context=\"#stay\"/>\n      </context>\n      <context name=\"function_decl_documentable\" attribute=\"Function\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Function\" context=\"#pop!DocumentationPossible\" String=\"\\s*[A-Za-z0-9-+\\&lt;\\&gt;//\\*!\\?']*\\s*\"/>\n      </context>\n      <context name=\"function_decl\" attribute=\"Function\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\s*[A-Za-z0-9-+\\&lt;\\&gt;//\\*!\\?']*\\s*\"/>\n      </context>\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"Regexpr\" attribute=\"Regexpr\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Regexpr\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"DocumentationPossible\" attribute=\"Normal\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n        <DetectChar attribute=\"Documentation\" context=\"#pop!Documentation\" char=\"&quot;\"/>\n      </context>\n      <context name=\"Documentation\" attribute=\"Documentation\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <HlCStringChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Documentation\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"BracketsSet\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"BracketsSet\" context=\"#pop\" char=\"}\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"BracketsMeta\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"BracketsMeta\" context=\"#pop\" char=\"}\" />\n        <DetectChar attribute=\"Documentation\" context=\"Documentation\" char=\"&quot;\"/>\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"BracketsMap\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"BracketsMap\" context=\"#pop\" char=\"}\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level1\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets2\" context=\"Level2\" char=\"(\"/>\n        <Detect2Chars attribute=\"Brackets2\" context=\"Level2\" char=\"'\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets2\" context=\"Level2\" char=\"`\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets2\" context=\"Level2\" char=\"#\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets2\" context=\"Level2\" char=\"@\" char1=\"(\"/>\n        <DetectChar attribute=\"Brackets1\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level2\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets3\" context=\"Level3\" char=\"(\"/>\n        <Detect2Chars attribute=\"Brackets3\" context=\"Level3\" char=\"'\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets3\" context=\"Level3\" char=\"`\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets3\" context=\"Level3\" char=\"#\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets3\" context=\"Level3\" char=\"@\" char1=\"(\"/>\n        <DetectChar attribute=\"Brackets2\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level3\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets4\" context=\"Level4\" char=\"(\"/>\n        <Detect2Chars attribute=\"Brackets4\" context=\"Level4\" char=\"'\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets4\" context=\"Level4\" char=\"`\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets4\" context=\"Level4\" char=\"#\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets4\" context=\"Level4\" char=\"@\" char1=\"(\"/>\n        <DetectChar attribute=\"Brackets3\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level4\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets5\" context=\"Level5\" char=\"(\"/>\n        <Detect2Chars attribute=\"Brackets5\" context=\"Level5\" char=\"'\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets5\" context=\"Level5\" char=\"`\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets5\" context=\"Level5\" char=\"#\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets5\" context=\"Level5\" char=\"@\" char1=\"(\"/>\n        <DetectChar attribute=\"Brackets4\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level5\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets6\" context=\"Level6\" char=\"(\"/>\n        <Detect2Chars attribute=\"Brackets6\" context=\"Level6\" char=\"'\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets6\" context=\"Level6\" char=\"`\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets6\" context=\"Level6\" char=\"#\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets6\" context=\"Level6\" char=\"@\" char1=\"(\"/>\n        <DetectChar attribute=\"Brackets5\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level6\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"'\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"`\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"#\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Brackets1\" context=\"Level1\" char=\"@\" char1=\"(\"/>\n        <DetectChar attribute=\"Brackets6\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"Default\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Modifier\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n      <itemData name=\"Modifier2\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n      <itemData name=\"Definition\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"BaseN\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\" defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Regexpr\" defStyleNum=\"dsSpecialString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Documentation\" defStyleNum=\"dsDocumentation\"/>\n      <itemData name=\"Alert\" defStyleNum=\"dsAlert\" spellChecking=\"false\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n      <itemData name=\"Readermacro\" defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"BracketsSet\" defStyleNum=\"dsNormal\" color=\"#0000ff\" selColor=\"#00ff00\"/>\n      <itemData name=\"BracketsMeta\" defStyleNum=\"dsNormal\" color=\"#0000ff\" selColor=\"#00ff00\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"BracketsMap\" defStyleNum=\"dsNormal\" color=\"#206620\" selColor=\"#219921\"/>\n      <itemData name=\"BracketsSquare\" defStyleNum=\"dsNormal\" color=\"#3333ff\" selColor=\"#3333aa\"/>\n      <itemData name=\"Brackets1\" defStyleNum=\"dsNormal\" color=\"#ff0000\" selColor=\"#ffaa00\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Brackets2\" defStyleNum=\"dsNormal\" color=\"#ff8800\" selColor=\"#ffff00\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Brackets3\" defStyleNum=\"dsNormal\" color=\"#888800\" selColor=\"#888888\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Brackets4\" defStyleNum=\"dsNormal\" color=\"#008800\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Brackets5\" defStyleNum=\"dsNormal\" color=\"#000088\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Brackets6\" defStyleNum=\"dsNormal\" color=\"#880088\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" weakDeliminator=\"-+*?!&lt;&gt;=/:#\\\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";;\"/>\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cmake.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY id_re \"[_A-Za-z][\\-_0-9A-Za-z]*\">\n]>\n<!--\n  This file is part of KDE's kate project.\n\n  Copyright 2004 Alexander Neundorf (neundorf@kde.org)\n  Copyright 2005 Dominik Haumann (dhdev@gmx.de)\n  Copyright 2007,2008,2013,2014 Matthew Woehlke (mw_triad@users.sourceforge.net)\n  Copyright 2013-2015,2017-2019 Alex Turbov (i.zaufi@gmail.com)\n\n **********************************************************************\n * This library is free software; you can redistribute it and/or      *\n * modify it under the terms of the GNU Lesser General Public         *\n * License as published by the Free Software Foundation; either       *\n * version 2 of the License, or (at your option) any later version.   *\n *                                                                    *\n * This library is distributed in the hope that it will be useful,    *\n * but WITHOUT ANY WARRANTY; without even the implied warranty of     *\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *\n * Lesser General Public License for more details.                    *\n *                                                                    *\n * You should have received a copy of the GNU Lesser General Public   *\n * License along with this library; if not, write to the              *\n * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,   *\n * Boston, MA  02110-1301, USA.                                       *\n **********************************************************************\n -->\n\n<language\n    name=\"CMake\"\n    version=\"16\"\n    kateversion=\"2.4\"\n    section=\"Other\"\n    extensions=\"CMakeLists.txt;*.cmake;*.cmake.in\"\n    style=\"CMake\"\n    mimetype=\"text/x-cmake\"\n    author=\"Alex Turbov (i.zaufi@gmail.com)\"\n    license=\"LGPLv2+\"\n  >\n  <highlighting>\n\n    <list name=\"commands\">\n        <item>break</item>\n        <item>cmake_host_system_information</item>\n        <item>cmake_minimum_required</item>\n        <item>cmake_parse_arguments</item>\n        <item>cmake_policy</item>\n        <item>configure_file</item>\n        <item>continue</item>\n        <item>elseif</item>\n        <item>else</item>\n        <item>endforeach</item>\n        <item>endfunction</item>\n        <item>endif</item>\n        <item>endmacro</item>\n        <item>endwhile</item>\n        <item>execute_process</item>\n        <item>file</item>\n        <item>find_file</item>\n        <item>find_library</item>\n        <item>find_package</item>\n        <item>find_path</item>\n        <item>find_program</item>\n        <item>foreach</item>\n        <item>function</item>\n        <item>get_cmake_property</item>\n        <item>get_directory_property</item>\n        <item>get_filename_component</item>\n        <item>get_property</item>\n        <item>if</item>\n        <item>include</item>\n        <item>include_guard</item>\n        <item>list</item>\n        <item>macro</item>\n        <item>mark_as_advanced</item>\n        <item>math</item>\n        <item>message</item>\n        <item>option</item>\n        <item>return</item>\n        <item>separate_arguments</item>\n        <item>set_directory_properties</item>\n        <item>set_property</item>\n        <item>set</item>\n        <item>site_name</item>\n        <item>string</item>\n        <item>unset</item>\n        <item>variable_watch</item>\n        <item>while</item>\n        <item>add_compile_definitions</item>\n        <item>add_compile_options</item>\n        <item>add_custom_command</item>\n        <item>add_custom_target</item>\n        <item>add_definitions</item>\n        <item>add_dependencies</item>\n        <item>add_executable</item>\n        <item>add_library</item>\n        <item>add_link_options</item>\n        <item>add_subdirectory</item>\n        <item>add_test</item>\n        <item>aux_source_directory</item>\n        <item>build_command</item>\n        <item>create_test_sourcelist</item>\n        <item>define_property</item>\n        <item>enable_language</item>\n        <item>enable_testing</item>\n        <item>export</item>\n        <item>fltk_wrap_ui</item>\n        <item>get_source_file_property</item>\n        <item>get_target_property</item>\n        <item>get_test_property</item>\n        <item>include_directories</item>\n        <item>include_external_msproject</item>\n        <item>include_regular_expression</item>\n        <item>install</item>\n        <item>link_directories</item>\n        <item>link_libraries</item>\n        <item>load_cache</item>\n        <item>project</item>\n        <item>qt_wrap_cpp</item>\n        <item>qt_wrap_ui</item>\n        <item>remove_definitions</item>\n        <item>set_source_files_properties</item>\n        <item>set_target_properties</item>\n        <item>set_tests_properties</item>\n        <item>source_group</item>\n        <item>target_compile_definitions</item>\n        <item>target_compile_features</item>\n        <item>target_compile_options</item>\n        <item>target_include_directories</item>\n        <item>target_link_directories</item>\n        <item>target_link_libraries</item>\n        <item>target_link_options</item>\n        <item>target_sources</item>\n        <item>try_compile</item>\n        <item>try_run</item>\n        <item>ctest_build</item>\n        <item>ctest_configure</item>\n        <item>ctest_coverage</item>\n        <item>ctest_empty_binary_directory</item>\n        <item>ctest_memcheck</item>\n        <item>ctest_read_custom_files</item>\n        <item>ctest_run_script</item>\n        <item>ctest_sleep</item>\n        <item>ctest_start</item>\n        <item>ctest_submit</item>\n        <item>ctest_test</item>\n        <item>ctest_update</item>\n        <item>ctest_upload</item>\n    </list>\n    \n    <list name=\"cmake_host_system_information_nargs\">\n      <item>QUERY</item>\n      <item>RESULT</item>\n    </list>\n    <list name=\"cmake_host_system_information_sargs\">\n      <item>AVAILABLE_PHYSICAL_MEMORY</item>\n      <item>AVAILABLE_VIRTUAL_MEMORY</item>\n      <item>FQDN</item>\n      <item>HAS_AMD_3DNOW</item>\n      <item>HAS_AMD_3DNOW_PLUS</item>\n      <item>HAS_FPU</item>\n      <item>HAS_IA64</item>\n      <item>HAS_MMX</item>\n      <item>HAS_MMX_PLUS</item>\n      <item>HAS_SERIAL_NUMBER</item>\n      <item>HAS_SSE</item>\n      <item>HAS_SSE2</item>\n      <item>HAS_SSE_FP</item>\n      <item>HAS_SSE_MMX</item>\n      <item>HOSTNAME</item>\n      <item>IS_64BIT</item>\n      <item>NUMBER_OF_LOGICAL_CORES</item>\n      <item>NUMBER_OF_PHYSICAL_CORES</item>\n      <item>OS_NAME</item>\n      <item>OS_PLATFORM</item>\n      <item>OS_RELEASE</item>\n      <item>OS_VERSION</item>\n      <item>PROCESSOR_DESCRIPTION</item>\n      <item>PROCESSOR_NAME</item>\n      <item>PROCESSOR_SERIAL_NUMBER</item>\n      <item>TOTAL_PHYSICAL_MEMORY</item>\n      <item>TOTAL_VIRTUAL_MEMORY</item>\n    </list>\n    <list name=\"cmake_minimum_required_nargs\">\n      <item>FATAL_ERROR</item>\n      <item>VERSION</item>\n    </list>\n    <list name=\"cmake_parse_arguments_nargs\">\n      <item>PARSE_ARGV</item>\n    </list>\n    <list name=\"cmake_policy_nargs\">\n      <item>GET</item>\n      <item>POP</item>\n      <item>PUSH</item>\n      <item>SET</item>\n      <item>VERSION</item>\n    </list>\n    <list name=\"cmake_policy_sargs\">\n      <item>NEW</item>\n      <item>OLD</item>\n    </list>\n    <list name=\"configure_file_nargs\">\n      <item>@ONLY</item>\n      <item>COPYONLY</item>\n      <item>ESCAPE_QUOTES</item>\n      <item>NEWLINE_STYLE</item>\n    </list>\n    <list name=\"configure_file_sargs\">\n      <item>CRLF</item>\n      <item>DOS</item>\n      <item>LF</item>\n      <item>UNIX</item>\n      <item>WIN32</item>\n    </list>\n    <list name=\"elseif_nargs\">\n      <item>AND</item>\n      <item>DEFINED</item>\n      <item>EQUAL</item>\n      <item>EXISTS</item>\n      <item>GREATER</item>\n      <item>GREATER_EQUAL</item>\n      <item>IN_LIST</item>\n      <item>IS_ABSOLUTE</item>\n      <item>IS_DIRECTORY</item>\n      <item>IS_NEWER_THAN</item>\n      <item>IS_SYMLINK</item>\n      <item>LESS</item>\n      <item>LESS_EQUAL</item>\n      <item>MATCHES</item>\n      <item>NOT</item>\n      <item>OR</item>\n      <item>POLICY</item>\n      <item>STREQUAL</item>\n      <item>STRGREATER</item>\n      <item>STRGREATER_EQUAL</item>\n      <item>STRLESS</item>\n      <item>STRLESS_EQUAL</item>\n      <item>TARGET</item>\n      <item>TEST</item>\n      <item>VERSION_EQUAL</item>\n      <item>VERSION_GREATER</item>\n      <item>VERSION_GREATER_EQUAL</item>\n      <item>VERSION_LESS</item>\n      <item>VERSION_LESS_EQUAL</item>\n    </list>\n    <list name=\"execute_process_nargs\">\n      <item>COMMAND</item>\n      <item>COMMAND_ECHO</item>\n      <item>ENCODING</item>\n      <item>ERROR_FILE</item>\n      <item>ERROR_QUIET</item>\n      <item>ERROR_STRIP_TRAILING_WHITESPACE</item>\n      <item>ERROR_VARIABLE</item>\n      <item>INPUT_FILE</item>\n      <item>OUTPUT_FILE</item>\n      <item>OUTPUT_QUIET</item>\n      <item>OUTPUT_STRIP_TRAILING_WHITESPACE</item>\n      <item>OUTPUT_VARIABLE</item>\n      <item>RESULTS_VARIABLE</item>\n      <item>RESULT_VARIABLE</item>\n      <item>TIMEOUT</item>\n      <item>WORKING_DIRECTORY</item>\n    </list>\n    <list name=\"execute_process_sargs\">\n      <item>ANSI</item>\n      <item>AUTO</item>\n      <item>NONE</item>\n      <item>OEM</item>\n      <item>STDERR</item>\n      <item>STDOUT</item>\n      <item>UTF8</item>\n    </list>\n    <list name=\"file_nargs\">\n      <item>APPEND</item>\n      <item>CONDITION</item>\n      <item>CONFIGURE_DEPENDS</item>\n      <item>CONTENT</item>\n      <item>COPY</item>\n      <item>DESTINATION</item>\n      <item>DIRECTORY</item>\n      <item>DIRECTORY_PERMISSIONS</item>\n      <item>DOWNLOAD</item>\n      <item>ENCODING</item>\n      <item>EXCLUDE</item>\n      <item>EXPECTED_HASH</item>\n      <item>EXPECTED_MD5</item>\n      <item>FILES_MATCHING</item>\n      <item>FILE_PERMISSIONS</item>\n      <item>FOLLOW_SYMLINKS</item>\n      <item>FOLLOW_SYMLINK_CHAIN</item>\n      <item>GENERATE</item>\n      <item>GLOB</item>\n      <item>GLOB_RECURSE</item>\n      <item>GUARD</item>\n      <item>HEX</item>\n      <item>HTTPHEADER</item>\n      <item>INACTIVITY_TIMEOUT</item>\n      <item>INPUT</item>\n      <item>INSTALL</item>\n      <item>LENGTH_MAXIMUM</item>\n      <item>LENGTH_MINIMUM</item>\n      <item>LIMIT</item>\n      <item>LIMIT_COUNT</item>\n      <item>LIMIT_INPUT</item>\n      <item>LIMIT_OUTPUT</item>\n      <item>LIST_DIRECTORIES</item>\n      <item>LOCK</item>\n      <item>LOG</item>\n      <item>MAKE_DIRECTORY</item>\n      <item>MD5</item>\n      <item>NETRC</item>\n      <item>NETRC_FILE</item>\n      <item>NEWLINE_CONSUME</item>\n      <item>NO_HEX_CONVERSION</item>\n      <item>NO_SOURCE_PERMISSIONS</item>\n      <item>OFFSET</item>\n      <item>OUTPUT</item>\n      <item>PATTERN</item>\n      <item>PERMISSIONS</item>\n      <item>READ</item>\n      <item>READ_SYMLINK</item>\n      <item>REGEX</item>\n      <item>RELATIVE</item>\n      <item>RELATIVE_PATH</item>\n      <item>RELEASE</item>\n      <item>REMOVE</item>\n      <item>REMOVE_RECURSE</item>\n      <item>RENAME</item>\n      <item>RESULT_VARIABLE</item>\n      <item>SHA1</item>\n      <item>SHA224</item>\n      <item>SHA256</item>\n      <item>SHA384</item>\n      <item>SHA3_224</item>\n      <item>SHA3_256</item>\n      <item>SHA3_384</item>\n      <item>SHA3_512</item>\n      <item>SHA512</item>\n      <item>SHOW_PROGRESS</item>\n      <item>SIZE</item>\n      <item>STATUS</item>\n      <item>STRINGS</item>\n      <item>TIMEOUT</item>\n      <item>TIMESTAMP</item>\n      <item>TLS_CAINFO</item>\n      <item>TLS_VERIFY</item>\n      <item>TOUCH</item>\n      <item>TOUCH_NOCREATE</item>\n      <item>TO_CMAKE_PATH</item>\n      <item>TO_NATIVE_PATH</item>\n      <item>UPLOAD</item>\n      <item>USERPWD</item>\n      <item>USE_SOURCE_PERMISSIONS</item>\n      <item>UTC</item>\n      <item>WRITE</item>\n    </list>\n    <list name=\"file_sargs\">\n      <item>FILE</item>\n      <item>FUNCTION</item>\n      <item>GROUP_EXECUTE</item>\n      <item>GROUP_READ</item>\n      <item>GROUP_WRITE</item>\n      <item>IGNORED</item>\n      <item>OPTIONAL</item>\n      <item>OWNER_EXECUTE</item>\n      <item>OWNER_READ</item>\n      <item>OWNER_WRITE</item>\n      <item>PROCESS</item>\n      <item>REQUIRED</item>\n      <item>SETGID</item>\n      <item>SETUID</item>\n      <item>UTF-16BE</item>\n      <item>UTF-16LE</item>\n      <item>UTF-32B</item>\n      <item>UTF-32LE</item>\n      <item>UTF-8</item>\n      <item>WORLD_EXECUTE</item>\n      <item>WORLD_READ</item>\n      <item>WORLD_WRITE</item>\n    </list>\n    <list name=\"find_file_nargs\">\n      <item>CMAKE_FIND_ROOT_PATH_BOTH</item>\n      <item>DOC</item>\n      <item>HINTS</item>\n      <item>NAMES</item>\n      <item>NO_CMAKE_ENVIRONMENT_PATH</item>\n      <item>NO_CMAKE_FIND_ROOT_PATH</item>\n      <item>NO_CMAKE_PATH</item>\n      <item>NO_CMAKE_SYSTEM_PATH</item>\n      <item>NO_DEFAULT_PATH</item>\n      <item>NO_PACKAGE_ROOT_PATH</item>\n      <item>NO_SYSTEM_ENVIRONMENT_PATH</item>\n      <item>ONLY_CMAKE_FIND_ROOT_PATH</item>\n      <item>PATHS</item>\n      <item>PATH_SUFFIXES</item>\n    </list>\n    <list name=\"find_library_nargs\">\n      <item>CMAKE_FIND_ROOT_PATH_BOTH</item>\n      <item>DOC</item>\n      <item>HINTS</item>\n      <item>NAMES</item>\n      <item>NAMES_PER_DIR</item>\n      <item>NO_CMAKE_ENVIRONMENT_PATH</item>\n      <item>NO_CMAKE_FIND_ROOT_PATH</item>\n      <item>NO_CMAKE_PATH</item>\n      <item>NO_CMAKE_SYSTEM_PATH</item>\n      <item>NO_DEFAULT_PATH</item>\n      <item>NO_PACKAGE_ROOT_PATH</item>\n      <item>NO_SYSTEM_ENVIRONMENT_PATH</item>\n      <item>ONLY_CMAKE_FIND_ROOT_PATH</item>\n      <item>PATHS</item>\n      <item>PATH_SUFFIXES</item>\n    </list>\n    <list name=\"find_package_nargs\">\n      <item>CMAKE_FIND_ROOT_PATH_BOTH</item>\n      <item>COMPONENTS</item>\n      <item>CONFIG</item>\n      <item>CONFIGS</item>\n      <item>EXACT</item>\n      <item>HINTS</item>\n      <item>MODULE</item>\n      <item>NAMES</item>\n      <item>NO_CMAKE_ENVIRONMENT_PATH</item>\n      <item>NO_CMAKE_FIND_ROOT_PATH</item>\n      <item>NO_CMAKE_PACKAGE_REGISTRY</item>\n      <item>NO_CMAKE_PATH</item>\n      <item>NO_CMAKE_SYSTEM_PACKAGE_REGISTRY</item>\n      <item>NO_CMAKE_SYSTEM_PATH</item>\n      <item>NO_DEFAULT_PATH</item>\n      <item>NO_MODULE</item>\n      <item>NO_PACAKGE_ROOT_PATH</item>\n      <item>NO_POLICY_SCOPE</item>\n      <item>NO_SYSTEM_ENVIRONMENT_PATH</item>\n      <item>ONLY_CMAKE_FIND_ROOT_PATH</item>\n      <item>OPTIONAL_COMPONENTS</item>\n      <item>PATHS</item>\n      <item>PATH_SUFFIXES</item>\n      <item>QUIET</item>\n      <item>REQUIRED</item>\n    </list>\n    <list name=\"find_path_nargs\">\n      <item>CMAKE_FIND_ROOT_PATH_BOTH</item>\n      <item>DOC</item>\n      <item>HINTS</item>\n      <item>NAMES</item>\n      <item>NO_CMAKE_ENVIRONMENT_PATH</item>\n      <item>NO_CMAKE_FIND_ROOT_PATH</item>\n      <item>NO_CMAKE_PATH</item>\n      <item>NO_CMAKE_SYSTEM_PATH</item>\n      <item>NO_DEFAULT_PATH</item>\n      <item>NO_PACKAGE_ROOT_PATH</item>\n      <item>NO_SYSTEM_ENVIRONMENT_PATH</item>\n      <item>ONLY_CMAKE_FIND_ROOT_PATH</item>\n      <item>PATHS</item>\n      <item>PATH_SUFFIXES</item>\n    </list>\n    <list name=\"find_program_nargs\">\n      <item>CMAKE_FIND_ROOT_PATH_BOTH</item>\n      <item>DOC</item>\n      <item>HINTS</item>\n      <item>NAMES</item>\n      <item>NAMES_PER_DIR</item>\n      <item>NO_CMAKE_ENVIRONMENT_PATH</item>\n      <item>NO_CMAKE_FIND_ROOT_PATH</item>\n      <item>NO_CMAKE_PATH</item>\n      <item>NO_CMAKE_SYSTEM_PATH</item>\n      <item>NO_DEFAULT_PATH</item>\n      <item>NO_PACKAGE_ROOT_PATH</item>\n      <item>NO_SYSTEM_ENVIRONMENT_PATH</item>\n      <item>ONLY_CMAKE_FIND_ROOT_PATH</item>\n      <item>PATHS</item>\n      <item>PATH_SUFFIXES</item>\n    </list>\n    <list name=\"foreach_nargs\">\n      <item>IN</item>\n      <item>ITEMS</item>\n      <item>LISTS</item>\n      <item>RANGE</item>\n    </list>\n    <list name=\"get_directory_property_nargs\">\n      <item>DEFINITION</item>\n      <item>DIRECTORY</item>\n    </list>\n    <list name=\"get_filename_component_nargs\">\n      <item>ABSOLUTE</item>\n      <item>BASE_DIR</item>\n      <item>CACHE</item>\n      <item>DIRECTORY</item>\n      <item>EXT</item>\n      <item>LAST_EXT</item>\n      <item>NAME</item>\n      <item>NAME_WE</item>\n      <item>NAME_WLE</item>\n      <item>PATH</item>\n      <item>PROGRAM</item>\n      <item>PROGRAM_ARGS</item>\n      <item>REALPATH</item>\n    </list>\n    <list name=\"get_property_nargs\">\n      <item>BRIEF_DOCS</item>\n      <item>CACHE</item>\n      <item>DEFINED</item>\n      <item>DIRECTORY</item>\n      <item>FULL_DOCS</item>\n      <item>GLOBAL</item>\n      <item>INSTALL</item>\n      <item>PROPERTY</item>\n      <item>SET</item>\n      <item>SOURCE</item>\n      <item>TARGET</item>\n      <item>TEST</item>\n      <item>VARIABLE</item>\n    </list>\n    <list name=\"if_nargs\">\n      <item>AND</item>\n      <item>DEFINED</item>\n      <item>EQUAL</item>\n      <item>EXISTS</item>\n      <item>GREATER</item>\n      <item>GREATER_EQUAL</item>\n      <item>IN_LIST</item>\n      <item>IS_ABSOLUTE</item>\n      <item>IS_DIRECTORY</item>\n      <item>IS_NEWER_THAN</item>\n      <item>IS_SYMLINK</item>\n      <item>LESS</item>\n      <item>LESS_EQUAL</item>\n      <item>MATCHES</item>\n      <item>NOT</item>\n      <item>OR</item>\n      <item>POLICY</item>\n      <item>STREQUAL</item>\n      <item>STRGREATER</item>\n      <item>STRGREATER_EQUAL</item>\n      <item>STRLESS</item>\n      <item>STRLESS_EQUAL</item>\n      <item>TARGET</item>\n      <item>TEST</item>\n      <item>VERSION_EQUAL</item>\n      <item>VERSION_GREATER</item>\n      <item>VERSION_GREATER_EQUAL</item>\n      <item>VERSION_LESS</item>\n      <item>VERSION_LESS_EQUAL</item>\n    </list>\n    <list name=\"include_nargs\">\n      <item>NO_POLICY_SCOPE</item>\n      <item>OPTIONAL</item>\n      <item>RESULT_VARIABLE</item>\n    </list>\n    <list name=\"include_guard_nargs\">\n      <item>DIRECTORY</item>\n      <item>GLOBAL</item>\n    </list>\n    <list name=\"list_nargs\">\n      <item>APPEND</item>\n      <item>AT</item>\n      <item>CASE</item>\n      <item>COMPARE</item>\n      <item>EXCLUDE</item>\n      <item>FILTER</item>\n      <item>FIND</item>\n      <item>FOR</item>\n      <item>GENEX_STRIP</item>\n      <item>GET</item>\n      <item>INCLUDE</item>\n      <item>INSERT</item>\n      <item>JOIN</item>\n      <item>LENGTH</item>\n      <item>ORDER</item>\n      <item>OUTPUT_VARIABLE</item>\n      <item>POP_BACK</item>\n      <item>POP_FRONT</item>\n      <item>PREPEND</item>\n      <item>REGEX</item>\n      <item>REMOVE_AT</item>\n      <item>REMOVE_DUPLICATES</item>\n      <item>REMOVE_ITEM</item>\n      <item>REPLACE</item>\n      <item>REVERSE</item>\n      <item>SORT</item>\n      <item>STRIP</item>\n      <item>SUBLIST</item>\n      <item>TOLOWER</item>\n      <item>TRANSFORM</item>\n    </list>\n    <list name=\"list_sargs\">\n      <item>ASCENDING</item>\n      <item>DESCENDING</item>\n      <item>FILE_BASENAME</item>\n      <item>INSENSITIVE</item>\n      <item>SENSITIVE</item>\n      <item>STRING</item>\n    </list>\n    <list name=\"mark_as_advanced_nargs\">\n      <item>CLEAR</item>\n      <item>FORCE</item>\n    </list>\n    <list name=\"math_nargs\">\n      <item>EXPR</item>\n      <item>OUTPUT_FORMAT</item>\n    </list>\n    <list name=\"math_sargs\">\n      <item>DECIMAL</item>\n      <item>HEXADECIMAL</item>\n    </list>\n    <list name=\"message_nargs\">\n      <item>AUTHOR_WARNING</item>\n      <item>DEBUG</item>\n      <item>DEPRECATION</item>\n      <item>FATAL_ERROR</item>\n      <item>NOTICE</item>\n      <item>SEND_ERROR</item>\n      <item>STATUS</item>\n      <item>TRACE</item>\n      <item>VERBOSE</item>\n      <item>WARNING</item>\n    </list>\n    <list name=\"separate_arguments_nargs\">\n      <item>NATIVE_COMMAND</item>\n      <item>UNIX_COMMAND</item>\n      <item>WINDOWS_COMMAND</item>\n    </list>\n    <list name=\"set_directory_properties_nargs\">\n      <item>PROPERTIES</item>\n    </list>\n    <list name=\"set_property_nargs\">\n      <item>APPEND</item>\n      <item>APPEND_STRING</item>\n      <item>CACHE</item>\n      <item>DIRECTORY</item>\n      <item>GLOBAL</item>\n      <item>INSTALL</item>\n      <item>PROPERTY</item>\n      <item>SOURCE</item>\n      <item>TARGET</item>\n      <item>TEST</item>\n      <item>VARIABLE</item>\n    </list>\n    <list name=\"set_nargs\">\n      <item>CACHE</item>\n      <item>FORCE</item>\n      <item>PARENT_SCOPE</item>\n    </list>\n    <list name=\"set_sargs\">\n      <item>BOOL</item>\n      <item>FILEPATH</item>\n      <item>INTERNAL</item>\n      <item>PATH</item>\n      <item>STATIC</item>\n      <item>STRING</item>\n    </list>\n    <list name=\"string_nargs\">\n      <item>@ONLY</item>\n      <item>ALPHABET</item>\n      <item>APPEND</item>\n      <item>ASCII</item>\n      <item>COMPARE</item>\n      <item>CONCAT</item>\n      <item>CONFIGURE</item>\n      <item>EQUAL</item>\n      <item>ESCAPE_QUOTES</item>\n      <item>FIND</item>\n      <item>GENEX_STRIP</item>\n      <item>GREATER</item>\n      <item>GREATER_EQUAL</item>\n      <item>JOIN</item>\n      <item>LENGTH</item>\n      <item>LESS</item>\n      <item>LESS_EQUAL</item>\n      <item>MAKE_C_IDENTIFIER</item>\n      <item>MATCH</item>\n      <item>MATCHALL</item>\n      <item>MD5</item>\n      <item>NAME</item>\n      <item>NAMESPACE</item>\n      <item>NOTEQUAL</item>\n      <item>PREPEND</item>\n      <item>RANDOM</item>\n      <item>RANDOM_SEED</item>\n      <item>REGEX</item>\n      <item>REPEAT</item>\n      <item>REPLACE</item>\n      <item>REVERSE</item>\n      <item>SHA1</item>\n      <item>SHA224</item>\n      <item>SHA256</item>\n      <item>SHA384</item>\n      <item>SHA3_224</item>\n      <item>SHA3_256</item>\n      <item>SHA3_384</item>\n      <item>SHA3_512</item>\n      <item>SHA512</item>\n      <item>STRIP</item>\n      <item>SUBSTRING</item>\n      <item>TIMESTAMP</item>\n      <item>TOLOWER</item>\n      <item>TOUPPER</item>\n      <item>TYPE</item>\n      <item>UPPER</item>\n      <item>UTC</item>\n      <item>UUID</item>\n    </list>\n    <list name=\"unset_nargs\">\n      <item>CACHE</item>\n      <item>PARENT_SCOPE</item>\n    </list>\n    <list name=\"while_nargs\">\n      <item>AND</item>\n      <item>DEFINED</item>\n      <item>EQUAL</item>\n      <item>EXISTS</item>\n      <item>GREATER</item>\n      <item>GREATER_EQUAL</item>\n      <item>IN_LIST</item>\n      <item>IS_ABSOLUTE</item>\n      <item>IS_DIRECTORY</item>\n      <item>IS_NEWER_THAN</item>\n      <item>IS_SYMLINK</item>\n      <item>LESS</item>\n      <item>LESS_EQUAL</item>\n      <item>MATCHES</item>\n      <item>NOT</item>\n      <item>OR</item>\n      <item>POLICY</item>\n      <item>STREQUAL</item>\n      <item>STRGREATER</item>\n      <item>STRGREATER_EQUAL</item>\n      <item>STRLESS</item>\n      <item>STRLESS_EQUAL</item>\n      <item>TARGET</item>\n      <item>TEST</item>\n      <item>VERSION_EQUAL</item>\n      <item>VERSION_GREATER</item>\n      <item>VERSION_GREATER_EQUAL</item>\n      <item>VERSION_LESS</item>\n      <item>VERSION_LESS_EQUAL</item>\n    </list>\n    <list name=\"add_custom_command_nargs\">\n      <item>APPEND</item>\n      <item>ARGS</item>\n      <item>BYPRODUCTS</item>\n      <item>COMMAND</item>\n      <item>COMMAND_EXPAND_LISTS</item>\n      <item>COMMENT</item>\n      <item>DEPENDS</item>\n      <item>DEPFILE</item>\n      <item>IMPLICIT_DEPENDS</item>\n      <item>JOB_POOL</item>\n      <item>MAIN_DEPENDENCY</item>\n      <item>OUTPUT</item>\n      <item>POST_BUILD</item>\n      <item>PRE_BUILD</item>\n      <item>PRE_LINK</item>\n      <item>TARGET</item>\n      <item>USES_TERMINAL</item>\n      <item>VERBATIM</item>\n      <item>WORKING_DIRECTORY</item>\n    </list>\n    <list name=\"add_custom_target_nargs\">\n      <item>ALL</item>\n      <item>APPEND</item>\n      <item>BYPRODUCTS</item>\n      <item>COMMAND</item>\n      <item>COMMAND_EXPAND_LISTS</item>\n      <item>COMMENT</item>\n      <item>DEPENDS</item>\n      <item>DEPFILE</item>\n      <item>IMPLICIT_DEPENDS</item>\n      <item>JOB_POOL</item>\n      <item>SOURCES</item>\n      <item>USES_TERMINAL</item>\n      <item>VERBATIM</item>\n      <item>WORKING_DIRECTORY</item>\n    </list>\n    <list name=\"add_executable_nargs\">\n      <item>ALIAS</item>\n      <item>EXCLUDE_FROM_ALL</item>\n      <item>GLOBAL</item>\n      <item>IMPORTED</item>\n      <item>MACOSX_BUNDLE</item>\n      <item>WIN32</item>\n    </list>\n    <list name=\"add_library_nargs\">\n      <item>ALIAS</item>\n      <item>EXCLUDE_FROM_ALL</item>\n      <item>GLOBAL</item>\n      <item>IMPORTED</item>\n      <item>INTERFACE</item>\n      <item>MODULE</item>\n      <item>OBJECT</item>\n      <item>SHARED</item>\n      <item>STATIC</item>\n      <item>UNKNOWN</item>\n    </list>\n    <list name=\"add_subdirectory_nargs\">\n      <item>EXCLUDE_FROM_ALL</item>\n    </list>\n    <list name=\"add_test_nargs\">\n      <item>COMMAND</item>\n      <item>CONFIGURATIONS</item>\n      <item>NAME</item>\n      <item>WORKING_DIRECTORY</item>\n    </list>\n    <list name=\"build_command_nargs\">\n      <item>CONFIGURATION</item>\n      <item>TARGET</item>\n    </list>\n    <list name=\"create_test_sourcelist_nargs\">\n      <item>EXTRA_INCLUDE</item>\n      <item>FUNCTION</item>\n    </list>\n    <list name=\"define_property_nargs\">\n      <item>BRIEF_DOCS</item>\n      <item>CACHED_VARIABLE</item>\n      <item>DIRECTORY</item>\n      <item>FULL_DOCS</item>\n      <item>GLOBAL</item>\n      <item>INHERITED</item>\n      <item>PROPERTY</item>\n      <item>SOURCE</item>\n      <item>TEST</item>\n      <item>VARIABLE</item>\n    </list>\n    <list name=\"enable_language_nargs\">\n      <item>OPTIONAL</item>\n    </list>\n    <list name=\"enable_language_sargs\">\n      <item>C</item>\n      <item>CXX</item>\n      <item>Fortran</item>\n      <item>RC</item>\n    </list>\n    <list name=\"export_nargs\">\n      <item>ANDROID_MK</item>\n      <item>APPEND</item>\n      <item>EXPORT</item>\n      <item>EXPORT_LINK_INTERFACE_LIBRARIES</item>\n      <item>FILE</item>\n      <item>NAMESPACE</item>\n      <item>TARGETS</item>\n    </list>\n    <list name=\"include_directories_nargs\">\n      <item>AFTER</item>\n      <item>BEFORE</item>\n      <item>SYSTEM</item>\n    </list>\n    <list name=\"include_external_msproject_nargs\">\n      <item>GUID</item>\n      <item>PLATFORM</item>\n      <item>TYPE</item>\n    </list>\n    <list name=\"install_nargs\">\n      <item>ARCHIVE</item>\n      <item>BUNDLE</item>\n      <item>CODE</item>\n      <item>COMPONENT</item>\n      <item>CONFIGURATIONS</item>\n      <item>DESTINATION</item>\n      <item>DIRECTORY</item>\n      <item>DIRECTORY_PERMISSIONS</item>\n      <item>EXCLUDE</item>\n      <item>EXCLUDE_FROM_ALL</item>\n      <item>EXPORT</item>\n      <item>EXPORT_ANDROID_MK</item>\n      <item>EXPORT_LINK_INTERFACE_LIBRARIES</item>\n      <item>FILE</item>\n      <item>FILES</item>\n      <item>FILES_MATCHING</item>\n      <item>FILE_PERMISSIONS</item>\n      <item>FRAMEWORK</item>\n      <item>INCLUDES</item>\n      <item>LIBRARY</item>\n      <item>MESSAGE_NEVER</item>\n      <item>NAMELINK_COMPONENT</item>\n      <item>NAMELINK_ONLY</item>\n      <item>NAMELINK_SKIP</item>\n      <item>NAMESPACE</item>\n      <item>OBJECTS</item>\n      <item>OPTIONAL</item>\n      <item>PATTERN</item>\n      <item>PERMISSIONS</item>\n      <item>PRIVATE_HEADER</item>\n      <item>PROGRAMS</item>\n      <item>PUBLIC_HEADER</item>\n      <item>REGEX</item>\n      <item>RENAME</item>\n      <item>RESOURCE</item>\n      <item>RUNTIME</item>\n      <item>SCRIPT</item>\n      <item>TARGETS</item>\n      <item>USE_SOURCE_PERMISSIONS</item>\n    </list>\n    <list name=\"install_sargs\">\n      <item>GROUP_EXECUTE</item>\n      <item>GROUP_READ</item>\n      <item>GROUP_WRITE</item>\n      <item>OWNER_EXECUTE</item>\n      <item>OWNER_READ</item>\n      <item>OWNER_WRITE</item>\n      <item>SETGID</item>\n      <item>SETUID</item>\n      <item>WORLD_EXECUTE</item>\n      <item>WORLD_READ</item>\n      <item>WORLD_WRITE</item>\n    </list>\n    <list name=\"link_directories_nargs\">\n      <item>AFTER</item>\n      <item>BEFORE</item>\n    </list>\n    <list name=\"link_libraries_nargs\">\n      <item>debug</item>\n      <item>general</item>\n      <item>optimized</item>\n    </list>\n    <list name=\"load_cache_nargs\">\n      <item>EXCLUDE</item>\n      <item>INCLUDE_INTERNALS</item>\n      <item>READ_WITH_PREFIX</item>\n    </list>\n    <list name=\"project_nargs\">\n      <item>DESCRIPTION</item>\n      <item>HOMEPAGE_URL</item>\n      <item>LANGUAGES</item>\n      <item>VERSION</item>\n    </list>\n    <list name=\"project_sargs\">\n      <item>ASM</item>\n      <item>C</item>\n      <item>CUDA</item>\n      <item>CXX</item>\n      <item>Fortran</item>\n      <item>NONE</item>\n      <item>RC</item>\n    </list>\n    <list name=\"set_source_files_properties_nargs\">\n      <item>PROPERTIES</item>\n    </list>\n    <list name=\"set_target_properties_nargs\">\n      <item>PROPERTIES</item>\n    </list>\n    <list name=\"set_tests_properties_nargs\">\n      <item>PROPERTIES</item>\n    </list>\n    <list name=\"source_group_nargs\">\n      <item>FILES</item>\n      <item>PREFIX</item>\n      <item>REGULAR_EXPRESSION</item>\n      <item>TREE</item>\n    </list>\n    <list name=\"target_compile_definitions_nargs\">\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n    </list>\n    <list name=\"target_compile_features_nargs\">\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n    </list>\n    <list name=\"target_compile_features_sargs\">\n      <item>c_function_prototypes</item>\n      <item>c_restrict</item>\n      <item>c_static_assert</item>\n      <item>c_std_11</item>\n      <item>c_std_90</item>\n      <item>c_std_99</item>\n      <item>c_variadic_macros</item>\n      <item>cxx_aggregate_default_initializers</item>\n      <item>cxx_alias_templates</item>\n      <item>cxx_alignas</item>\n      <item>cxx_alignof</item>\n      <item>cxx_attribute_deprecated</item>\n      <item>cxx_attributes</item>\n      <item>cxx_auto_type</item>\n      <item>cxx_binary_literals</item>\n      <item>cxx_constexpr</item>\n      <item>cxx_contextual_conversions</item>\n      <item>cxx_decltype</item>\n      <item>cxx_decltype_auto</item>\n      <item>cxx_decltype_incomplete_return_types</item>\n      <item>cxx_default_function_template_args</item>\n      <item>cxx_defaulted_functions</item>\n      <item>cxx_defaulted_move_initializers</item>\n      <item>cxx_delegating_constructors</item>\n      <item>cxx_deleted_functions</item>\n      <item>cxx_digit_separators</item>\n      <item>cxx_enum_forward_declarations</item>\n      <item>cxx_explicit_conversions</item>\n      <item>cxx_extended_friend_declarations</item>\n      <item>cxx_extern_templates</item>\n      <item>cxx_final</item>\n      <item>cxx_func_identifier</item>\n      <item>cxx_generalized_initializers</item>\n      <item>cxx_generic_lambdas</item>\n      <item>cxx_inheriting_constructors</item>\n      <item>cxx_inline_namespaces</item>\n      <item>cxx_lambda_init_captures</item>\n      <item>cxx_lambdas</item>\n      <item>cxx_local_type_template_args</item>\n      <item>cxx_long_long_type</item>\n      <item>cxx_noexcept</item>\n      <item>cxx_nonstatic_member_init</item>\n      <item>cxx_nullptr</item>\n      <item>cxx_override</item>\n      <item>cxx_range_for</item>\n      <item>cxx_raw_string_literals</item>\n      <item>cxx_reference_qualified_functions</item>\n      <item>cxx_relaxed_constexpr</item>\n      <item>cxx_return_type_deduction</item>\n      <item>cxx_right_angle_brackets</item>\n      <item>cxx_rvalue_references</item>\n      <item>cxx_sizeof_member</item>\n      <item>cxx_static_assert</item>\n      <item>cxx_std_11</item>\n      <item>cxx_std_14</item>\n      <item>cxx_std_17</item>\n      <item>cxx_std_20</item>\n      <item>cxx_std_98</item>\n      <item>cxx_strong_enums</item>\n      <item>cxx_template_template_parameters</item>\n      <item>cxx_thread_local</item>\n      <item>cxx_trailing_return_types</item>\n      <item>cxx_unicode_literals</item>\n      <item>cxx_uniform_initialization</item>\n      <item>cxx_unrestricted_unions</item>\n      <item>cxx_user_literals</item>\n      <item>cxx_variable_templates</item>\n      <item>cxx_variadic_macros</item>\n      <item>cxx_variadic_templates</item>\n    </list>\n    <list name=\"target_compile_options_nargs\">\n      <item>BEFORE</item>\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n    </list>\n    <list name=\"target_include_directories_nargs\">\n      <item>BEFORE</item>\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n      <item>SYSTEM</item>\n    </list>\n    <list name=\"target_link_directories_nargs\">\n      <item>BEFORE</item>\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n    </list>\n    <list name=\"target_link_libraries_nargs\">\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n    </list>\n    <list name=\"target_link_options_nargs\">\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n    </list>\n    <list name=\"target_sources_nargs\">\n      <item>INTERFACE</item>\n      <item>PRIVATE</item>\n      <item>PUBLIC</item>\n    </list>\n    <list name=\"try_compile_nargs\">\n      <item>CMAKE_FLAGS</item>\n      <item>COMPILE_DEFINITIONS</item>\n      <item>COPY_FILE</item>\n      <item>COPY_FILE_ERROR</item>\n      <item>LINK_LIBRARIES</item>\n      <item>LINK_OPTIONS</item>\n      <item>OUTPUT_VARIABLE</item>\n      <item>RESULT_VAR</item>\n      <item>SOURCES</item>\n    </list>\n    <list name=\"try_run_nargs\">\n      <item>ARGS</item>\n      <item>CMAKE_FLAGS</item>\n      <item>COMPILE_DEFINITIONS</item>\n      <item>COMPILE_OUTPUT_VARIABLE</item>\n      <item>COMPILE_RESULT_VAR</item>\n      <item>LINK_LIBRARIES</item>\n      <item>LINK_OPTIONS</item>\n      <item>OUTPUT_VARIABLE</item>\n      <item>RUN_OUTPUT_VARIABLE</item>\n      <item>RUN_RESULT_VAR</item>\n    </list>\n    <list name=\"ctest_build_nargs\">\n      <item>APPEND</item>\n      <item>BUILD</item>\n      <item>CAPTURE_CMAKE_ERROR</item>\n      <item>CONFIGURATION</item>\n      <item>FLAGS</item>\n      <item>NUMBER_ERRORS</item>\n      <item>NUMBER_WARNINGS</item>\n      <item>PROJECT_NAME</item>\n      <item>RETURN_VALUE</item>\n      <item>TARGET</item>\n    </list>\n    <list name=\"ctest_configure_nargs\">\n      <item>APPEND</item>\n      <item>BUILD</item>\n      <item>CAPTURE_CMAKE_ERROR</item>\n      <item>OPTIONS</item>\n      <item>QUIET</item>\n      <item>RETURN_VALUE</item>\n      <item>SOURCE</item>\n    </list>\n    <list name=\"ctest_coverage_nargs\">\n      <item>APPEND</item>\n      <item>BUILD</item>\n      <item>CAPTURE_CMAKE_ERROR</item>\n      <item>LABELS</item>\n      <item>QUIET</item>\n      <item>RETURN_VALUE</item>\n    </list>\n    <list name=\"ctest_memcheck_nargs\">\n      <item>APPEND</item>\n      <item>BUILD</item>\n      <item>DEFECT_COUNT</item>\n      <item>END</item>\n      <item>EXCLUDE</item>\n      <item>EXCLUDE_FIXTURE</item>\n      <item>EXCLUDE_FIXTURE_CLEANUP</item>\n      <item>EXCLUDE_FIXTURE_SETUP</item>\n      <item>EXCLUDE_LABEL</item>\n      <item>INCLUDE</item>\n      <item>INCLUDE_LABEL</item>\n      <item>PARALLEL_LEVEL</item>\n      <item>QUIET</item>\n      <item>RETURN_VALUE</item>\n      <item>SCHEDULE_RANDOM</item>\n      <item>START</item>\n      <item>STOP_TIME</item>\n      <item>STRIDE</item>\n      <item>TEST_LOAD</item>\n    </list>\n    <list name=\"ctest_run_script_nargs\">\n      <item>NEW_PROCESS</item>\n      <item>RETURN_VALUE</item>\n    </list>\n    <list name=\"ctest_start_nargs\">\n      <item>APPEND</item>\n      <item>QUIET</item>\n      <item>TRACK</item>\n    </list>\n    <list name=\"ctest_submit_nargs\">\n      <item>BUILD_ID</item>\n      <item>CDASH_UPLOAD</item>\n      <item>CDASH_UPLOAD_TYPE</item>\n      <item>FILES</item>\n      <item>HTTPHEADER</item>\n      <item>PARTS</item>\n      <item>QUIET</item>\n      <item>RETRY_COUNT</item>\n      <item>RETRY_DELAY</item>\n      <item>RETURN_VALUE</item>\n      <item>SUBMIT_URL</item>\n    </list>\n    <list name=\"ctest_test_nargs\">\n      <item>APPEND</item>\n      <item>BUILD</item>\n      <item>CAPTURE_CMAKE_ERROR</item>\n      <item>END</item>\n      <item>EXCLUDE</item>\n      <item>EXCLUDE_FIXTURE</item>\n      <item>EXCLUDE_FIXTURE_CLEANUP</item>\n      <item>EXCLUDE_FIXTURE_SETUP</item>\n      <item>EXCLUDE_LABEL</item>\n      <item>INCLUDE</item>\n      <item>INCLUDE_LABEL</item>\n      <item>PARALLEL_LEVEL</item>\n      <item>QUIET</item>\n      <item>RETURN_VALUE</item>\n      <item>SCHEDULE_RANDOM</item>\n      <item>START</item>\n      <item>STOP_TIME</item>\n      <item>STRIDE</item>\n      <item>TEST_LOAD</item>\n    </list>\n    <list name=\"ctest_update_nargs\">\n      <item>QUIET</item>\n      <item>RETURN_VALUE</item>\n      <item>SOURCE</item>\n    </list>\n    <list name=\"ctest_upload_nargs\">\n      <item>CAPTURE_CMAKE_ERROR</item>\n      <item>FILES</item>\n      <item>QUIET</item>\n    </list>\n\n    <list name=\"variables\">\n      <item>ANDROID</item>\n      <item>APPLE</item>\n      <item>BORLAND</item>\n      <item>BUILD_SHARED_LIBS</item>\n      <item>BUILD_TESTING</item>\n      <item>CMAKE_ABSOLUTE_DESTINATION_FILES</item>\n      <item>CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS</item>\n      <item>CMAKE_ANDROID_API</item>\n      <item>CMAKE_ANDROID_API_MIN</item>\n      <item>CMAKE_ANDROID_ARCH</item>\n      <item>CMAKE_ANDROID_ARCH_ABI</item>\n      <item>CMAKE_ANDROID_ARM_MODE</item>\n      <item>CMAKE_ANDROID_ARM_NEON</item>\n      <item>CMAKE_ANDROID_ASSETS_DIRECTORIES</item>\n      <item>CMAKE_ANDROID_GUI</item>\n      <item>CMAKE_ANDROID_JAR_DEPENDENCIES</item>\n      <item>CMAKE_ANDROID_JAR_DIRECTORIES</item>\n      <item>CMAKE_ANDROID_JAVA_SOURCE_DIR</item>\n      <item>CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES</item>\n      <item>CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES</item>\n      <item>CMAKE_ANDROID_NDK</item>\n      <item>CMAKE_ANDROID_NDK_DEPRECATED_HEADERS</item>\n      <item>CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG</item>\n      <item>CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION</item>\n      <item>CMAKE_ANDROID_PROCESS_MAX</item>\n      <item>CMAKE_ANDROID_PROGUARD</item>\n      <item>CMAKE_ANDROID_PROGUARD_CONFIG_PATH</item>\n      <item>CMAKE_ANDROID_SECURE_PROPS_PATH</item>\n      <item>CMAKE_ANDROID_SKIP_ANT_STEP</item>\n      <item>CMAKE_ANDROID_STANDALONE_TOOLCHAIN</item>\n      <item>CMAKE_ANDROID_STL_TYPE</item>\n      <item>CMAKE_ANSI_CXXFLAGS</item>\n      <item>CMAKE_APPBUNDLE_PATH</item>\n      <item>CMAKE_AR</item>\n      <item>CMAKE_ARCHIVE_OUTPUT_DIRECTORY</item>\n      <item>CMAKE_ARGC</item>\n      <item>CMAKE_AUTOGEN_ORIGIN_DEPENDS</item>\n      <item>CMAKE_AUTOGEN_PARALLEL</item>\n      <item>CMAKE_AUTOGEN_VERBOSE</item>\n      <item>CMAKE_AUTOMOC</item>\n      <item>CMAKE_AUTOMOC_DEPEND_FILTERS</item>\n      <item>CMAKE_AUTOMOC_MOC_OPTIONS</item>\n      <item>CMAKE_AUTOMOC_RELAXED_MODE</item>\n      <item>CMAKE_AUTORCC</item>\n      <item>CMAKE_AUTORCC_OPTIONS</item>\n      <item>CMAKE_AUTOUIC</item>\n      <item>CMAKE_AUTOUIC_OPTIONS</item>\n      <item>CMAKE_AUTOUIC_SEARCH_PATHS</item>\n      <item>CMAKE_BACKWARDS_COMPATIBILITY</item>\n      <item>CMAKE_BINARY_DIR</item>\n      <item>CMAKE_BUILD_RPATH</item>\n      <item>CMAKE_BUILD_RPATH_USE_ORIGIN</item>\n      <item>CMAKE_BUILD_TOOL</item>\n      <item>CMAKE_BUILD_TYPE</item>\n      <item>CMAKE_BUILD_WITH_INSTALL_NAME_DIR</item>\n      <item>CMAKE_BUILD_WITH_INSTALL_RPATH</item>\n      <item>CMAKE_CACHEFILE_DIR</item>\n      <item>CMAKE_CACHE_MAJOR_VERSION</item>\n      <item>CMAKE_CACHE_MINOR_VERSION</item>\n      <item>CMAKE_CACHE_PATCH_VERSION</item>\n      <item>CMAKE_CFG_INTDIR</item>\n      <item>CMAKE_CL_64</item>\n      <item>CMAKE_CODEBLOCKS_COMPILER_ID</item>\n      <item>CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES</item>\n      <item>CMAKE_CODELITE_USE_TARGETS</item>\n      <item>CMAKE_COLOR_MAKEFILE</item>\n      <item>CMAKE_COMMAND</item>\n      <item>CMAKE_COMPILER_2005</item>\n      <item>CMAKE_COMPILER_IS_GNUCC</item>\n      <item>CMAKE_COMPILER_IS_GNUCXX</item>\n      <item>CMAKE_COMPILER_IS_GNUG77</item>\n      <item>CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY</item>\n      <item>CMAKE_CONFIGURATION_TYPES</item>\n      <item>CMAKE_CROSSCOMPILING</item>\n      <item>CMAKE_CROSSCOMPILING_EMULATOR</item>\n      <item>CMAKE_CTEST_COMMAND</item>\n      <item>CMAKE_CUDA_EXTENSIONS</item>\n      <item>CMAKE_CUDA_SEPARABLE_COMPILATION</item>\n      <item>CMAKE_CUDA_STANDARD</item>\n      <item>CMAKE_CUDA_STANDARD_REQUIRED</item>\n      <item>CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES</item>\n      <item>CMAKE_CURRENT_BINARY_DIR</item>\n      <item>CMAKE_CURRENT_LIST_DIR</item>\n      <item>CMAKE_CURRENT_LIST_FILE</item>\n      <item>CMAKE_CURRENT_LIST_LINE</item>\n      <item>CMAKE_CURRENT_SOURCE_DIR</item>\n      <item>CMAKE_CXX_COMPILE_FEATURES</item>\n      <item>CMAKE_CXX_EXTENSIONS</item>\n      <item>CMAKE_CXX_STANDARD</item>\n      <item>CMAKE_CXX_STANDARD_REQUIRED</item>\n      <item>CMAKE_C_COMPILE_FEATURES</item>\n      <item>CMAKE_C_EXTENSIONS</item>\n      <item>CMAKE_C_STANDARD</item>\n      <item>CMAKE_C_STANDARD_REQUIRED</item>\n      <item>CMAKE_DEBUG_POSTFIX</item>\n      <item>CMAKE_DEBUG_TARGET_PROPERTIES</item>\n      <item>CMAKE_DEPENDS_IN_PROJECT_ONLY</item>\n      <item>CMAKE_DIRECTORY_LABELS</item>\n      <item>CMAKE_DL_LIBS</item>\n      <item>CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION</item>\n      <item>CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES</item>\n      <item>CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT</item>\n      <item>CMAKE_ECLIPSE_MAKE_ARGUMENTS</item>\n      <item>CMAKE_ECLIPSE_VERSION</item>\n      <item>CMAKE_EDIT_COMMAND</item>\n      <item>CMAKE_ENABLE_EXPORTS</item>\n      <item>CMAKE_ERROR_DEPRECATED</item>\n      <item>CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION</item>\n      <item>CMAKE_EXECUTABLE_SUFFIX</item>\n      <item>CMAKE_EXECUTE_PROCESS_COMMAND_ECHO</item>\n      <item>CMAKE_EXE_LINKER_FLAGS</item>\n      <item>CMAKE_EXE_LINKER_FLAGS_INIT</item>\n      <item>CMAKE_EXPORT_COMPILE_COMMANDS</item>\n      <item>CMAKE_EXPORT_NO_PACKAGE_REGISTRY</item>\n      <item>CMAKE_EXPORT_PACKAGE_REGISTRY</item>\n      <item>CMAKE_EXTRA_GENERATOR</item>\n      <item>CMAKE_EXTRA_INCLUDE_FILES</item>\n      <item>CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES</item>\n      <item>CMAKE_FIND_APPBUNDLE</item>\n      <item>CMAKE_FIND_FRAMEWORK</item>\n      <item>CMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS</item>\n      <item>CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX</item>\n      <item>CMAKE_FIND_LIBRARY_PREFIXES</item>\n      <item>CMAKE_FIND_LIBRARY_SUFFIXES</item>\n      <item>CMAKE_FIND_NO_INSTALL_PREFIX</item>\n      <item>CMAKE_FIND_PACKAGE_NAME</item>\n      <item>CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY</item>\n      <item>CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY</item>\n      <item>CMAKE_FIND_PACKAGE_PREFER_CONFIG</item>\n      <item>CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS</item>\n      <item>CMAKE_FIND_PACKAGE_SORT_DIRECTION</item>\n      <item>CMAKE_FIND_PACKAGE_SORT_ORDER</item>\n      <item>CMAKE_FIND_PACKAGE_WARN_NO_MODULE</item>\n      <item>CMAKE_FIND_ROOT_PATH</item>\n      <item>CMAKE_FIND_ROOT_PATH_MODE_INCLUDE</item>\n      <item>CMAKE_FIND_ROOT_PATH_MODE_LIBRARY</item>\n      <item>CMAKE_FIND_ROOT_PATH_MODE_PACKAGE</item>\n      <item>CMAKE_FIND_ROOT_PATH_MODE_PROGRAM</item>\n      <item>CMAKE_FOLDER</item>\n      <item>CMAKE_FRAMEWORK</item>\n      <item>CMAKE_FRAMEWORK_PATH</item>\n      <item>CMAKE_Fortran_FORMAT</item>\n      <item>CMAKE_Fortran_MODDIR_DEFAULT</item>\n      <item>CMAKE_Fortran_MODDIR_FLAG</item>\n      <item>CMAKE_Fortran_MODOUT_FLAG</item>\n      <item>CMAKE_Fortran_MODULE_DIRECTORY</item>\n      <item>CMAKE_GENERATOR</item>\n      <item>CMAKE_GENERATOR_INSTANCE</item>\n      <item>CMAKE_GENERATOR_PLATFORM</item>\n      <item>CMAKE_GENERATOR_TOOLSET</item>\n      <item>CMAKE_GLOBAL_AUTOGEN_TARGET</item>\n      <item>CMAKE_GLOBAL_AUTOGEN_TARGET_NAME</item>\n      <item>CMAKE_GLOBAL_AUTORCC_TARGET</item>\n      <item>CMAKE_GLOBAL_AUTORCC_TARGET_NAME</item>\n      <item>CMAKE_GNUtoMS</item>\n      <item>CMAKE_HAS_ANSI_STRING_STREAM</item>\n      <item>CMAKE_HOME_DIRECTORY</item>\n      <item>CMAKE_HOST_APPLE</item>\n      <item>CMAKE_HOST_SOLARIS</item>\n      <item>CMAKE_HOST_SYSTEM</item>\n      <item>CMAKE_HOST_SYSTEM_NAME</item>\n      <item>CMAKE_HOST_SYSTEM_PROCESSOR</item>\n      <item>CMAKE_HOST_SYSTEM_VERSION</item>\n      <item>CMAKE_HOST_UNIX</item>\n      <item>CMAKE_HOST_WIN32</item>\n      <item>CMAKE_HP_PTHREADS_INIT</item>\n      <item>CMAKE_IGNORE_PATH</item>\n      <item>CMAKE_IMPORT_LIBRARY_PREFIX</item>\n      <item>CMAKE_IMPORT_LIBRARY_SUFFIX</item>\n      <item>CMAKE_INCLUDE_CURRENT_DIR</item>\n      <item>CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE</item>\n      <item>CMAKE_INCLUDE_DIRECTORIES_BEFORE</item>\n      <item>CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE</item>\n      <item>CMAKE_INCLUDE_PATH</item>\n      <item>CMAKE_INSTALL_BINDIR</item>\n      <item>CMAKE_INSTALL_DATADIR</item>\n      <item>CMAKE_INSTALL_DATAROOTDIR</item>\n      <item>CMAKE_INSTALL_DEBUG_LIBRARIES</item>\n      <item>CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY</item>\n      <item>CMAKE_INSTALL_DEFAULT_COMPONENT_NAME</item>\n      <item>CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS</item>\n      <item>CMAKE_INSTALL_DOCDIR</item>\n      <item>CMAKE_INSTALL_FULL_BINDIR</item>\n      <item>CMAKE_INSTALL_FULL_DATADIR</item>\n      <item>CMAKE_INSTALL_FULL_DATAROOTDIR</item>\n      <item>CMAKE_INSTALL_FULL_DOCDIR</item>\n      <item>CMAKE_INSTALL_FULL_INCLUDEDIR</item>\n      <item>CMAKE_INSTALL_FULL_INFODIR</item>\n      <item>CMAKE_INSTALL_FULL_LIBDIR</item>\n      <item>CMAKE_INSTALL_FULL_LIBEXECDIR</item>\n      <item>CMAKE_INSTALL_FULL_LOCALEDIR</item>\n      <item>CMAKE_INSTALL_FULL_LOCALSTATEDIR</item>\n      <item>CMAKE_INSTALL_FULL_MANDIR</item>\n      <item>CMAKE_INSTALL_FULL_OLDINCLUDEDIR</item>\n      <item>CMAKE_INSTALL_FULL_RUNSTATEDIR</item>\n      <item>CMAKE_INSTALL_FULL_SBINDIR</item>\n      <item>CMAKE_INSTALL_FULL_SHAREDSTATEDIR</item>\n      <item>CMAKE_INSTALL_FULL_SYSCONFDIR</item>\n      <item>CMAKE_INSTALL_INCLUDEDIR</item>\n      <item>CMAKE_INSTALL_INFODIR</item>\n      <item>CMAKE_INSTALL_LIBDIR</item>\n      <item>CMAKE_INSTALL_LIBEXECDIR</item>\n      <item>CMAKE_INSTALL_LOCALEDIR</item>\n      <item>CMAKE_INSTALL_LOCALSTATEDIR</item>\n      <item>CMAKE_INSTALL_MANDIR</item>\n      <item>CMAKE_INSTALL_MESSAGE</item>\n      <item>CMAKE_INSTALL_MFC_LIBRARIES</item>\n      <item>CMAKE_INSTALL_NAME_DIR</item>\n      <item>CMAKE_INSTALL_OLDINCLUDEDIR</item>\n      <item>CMAKE_INSTALL_OPENMP_LIBRARIES</item>\n      <item>CMAKE_INSTALL_PREFIX</item>\n      <item>CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT</item>\n      <item>CMAKE_INSTALL_RPATH</item>\n      <item>CMAKE_INSTALL_RPATH_USE_LINK_PATH</item>\n      <item>CMAKE_INSTALL_RUNSTATEDIR</item>\n      <item>CMAKE_INSTALL_SBINDIR</item>\n      <item>CMAKE_INSTALL_SHAREDSTATEDIR</item>\n      <item>CMAKE_INSTALL_SYSCONFDIR</item>\n      <item>CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT</item>\n      <item>CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION</item>\n      <item>CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS</item>\n      <item>CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS</item>\n      <item>CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP</item>\n      <item>CMAKE_INSTALL_UCRT_LIBRARIES</item>\n      <item>CMAKE_INTERNAL_PLATFORM_ABI</item>\n      <item>CMAKE_INTERPROCEDURAL_OPTIMIZATION</item>\n      <item>CMAKE_IOS_INSTALL_COMBINED</item>\n      <item>CMAKE_JOB_POOLS</item>\n      <item>CMAKE_JOB_POOL_COMPILE</item>\n      <item>CMAKE_JOB_POOL_LINK</item>\n      <item>CMAKE_LIBRARY_ARCHITECTURE</item>\n      <item>CMAKE_LIBRARY_ARCHITECTURE_REGEX</item>\n      <item>CMAKE_LIBRARY_OUTPUT_DIRECTORY</item>\n      <item>CMAKE_LIBRARY_PATH</item>\n      <item>CMAKE_LIBRARY_PATH_FLAG</item>\n      <item>CMAKE_LINK_DEF_FILE_FLAG</item>\n      <item>CMAKE_LINK_DEPENDS_NO_SHARED</item>\n      <item>CMAKE_LINK_DIRECTORIES_BEFORE</item>\n      <item>CMAKE_LINK_INTERFACE_LIBRARIES</item>\n      <item>CMAKE_LINK_LIBRARY_FILE_FLAG</item>\n      <item>CMAKE_LINK_LIBRARY_FLAG</item>\n      <item>CMAKE_LINK_LIBRARY_SUFFIX</item>\n      <item>CMAKE_LINK_SEARCH_END_STATIC</item>\n      <item>CMAKE_LINK_SEARCH_START_STATIC</item>\n      <item>CMAKE_LINK_WHAT_YOU_USE</item>\n      <item>CMAKE_MACOSX_BUNDLE</item>\n      <item>CMAKE_MACOSX_RPATH</item>\n      <item>CMAKE_MAJOR_VERSION</item>\n      <item>CMAKE_MAKE_PROGRAM</item>\n      <item>CMAKE_MATCH_COUNT</item>\n      <item>CMAKE_MAXIMUM_RECURSION_DEPTH</item>\n      <item>CMAKE_MFC_FLAG</item>\n      <item>CMAKE_MINIMUM_REQUIRED_VERSION</item>\n      <item>CMAKE_MINOR_VERSION</item>\n      <item>CMAKE_MODULE_LINKER_FLAGS</item>\n      <item>CMAKE_MODULE_LINKER_FLAGS_INIT</item>\n      <item>CMAKE_MODULE_PATH</item>\n      <item>CMAKE_MSVCIDE_RUN_PATH</item>\n      <item>CMAKE_MSVC_RUNTIME_LIBRARY</item>\n      <item>CMAKE_NETRC</item>\n      <item>CMAKE_NETRC_FILE</item>\n      <item>CMAKE_NINJA_OUTPUT_PATH_PREFIX</item>\n      <item>CMAKE_NOT_USING_CONFIG_FLAGS</item>\n      <item>CMAKE_NO_ANSI_FOR_SCOPE</item>\n      <item>CMAKE_NO_ANSI_STREAM_HEADERS</item>\n      <item>CMAKE_NO_ANSI_STRING_STREAM</item>\n      <item>CMAKE_NO_BUILTIN_CHRPATH</item>\n      <item>CMAKE_NO_STD_NAMESPACE</item>\n      <item>CMAKE_NO_SYSTEM_FROM_IMPORTED</item>\n      <item>CMAKE_OBJECT_PATH_MAX</item>\n      <item>CMAKE_OSX_ARCHITECTURES</item>\n      <item>CMAKE_OSX_DEPLOYMENT_TARGET</item>\n      <item>CMAKE_OSX_SYSROOT</item>\n      <item>CMAKE_PARENT_LIST_FILE</item>\n      <item>CMAKE_PATCH_VERSION</item>\n      <item>CMAKE_PDB_OUTPUT_DIRECTORY</item>\n      <item>CMAKE_POSITION_INDEPENDENT_CODE</item>\n      <item>CMAKE_PREFIX_PATH</item>\n      <item>CMAKE_PROGRAM_PATH</item>\n      <item>CMAKE_PROJECT_DESCRIPTION</item>\n      <item>CMAKE_PROJECT_HOMEPAGE_URL</item>\n      <item>CMAKE_PROJECT_INCLUDE</item>\n      <item>CMAKE_PROJECT_INCLUDE_BEFORE</item>\n      <item>CMAKE_PROJECT_NAME</item>\n      <item>CMAKE_PROJECT_VERSION</item>\n      <item>CMAKE_PROJECT_VERSION_MAJOR</item>\n      <item>CMAKE_PROJECT_VERSION_MINOR</item>\n      <item>CMAKE_PROJECT_VERSION_PATCH</item>\n      <item>CMAKE_PROJECT_VERSION_TWEAK</item>\n      <item>CMAKE_RANLIB</item>\n      <item>CMAKE_REQUIRED_DEFINITIONS</item>\n      <item>CMAKE_REQUIRED_FLAGS</item>\n      <item>CMAKE_REQUIRED_INCLUDES</item>\n      <item>CMAKE_REQUIRED_LIBRARIES</item>\n      <item>CMAKE_REQUIRED_LINK_OPTIONS</item>\n      <item>CMAKE_REQUIRED_QUIET</item>\n      <item>CMAKE_ROOT</item>\n      <item>CMAKE_RUNTIME_OUTPUT_DIRECTORY</item>\n      <item>CMAKE_SCRIPT_MODE_FILE</item>\n      <item>CMAKE_SHARED_LIBRARY_PREFIX</item>\n      <item>CMAKE_SHARED_LIBRARY_SUFFIX</item>\n      <item>CMAKE_SHARED_LINKER_FLAGS</item>\n      <item>CMAKE_SHARED_LINKER_FLAGS_INIT</item>\n      <item>CMAKE_SHARED_MODULE_PREFIX</item>\n      <item>CMAKE_SHARED_MODULE_SUFFIX</item>\n      <item>CMAKE_SIZEOF_VOID_P</item>\n      <item>CMAKE_SKIP_BUILD_RPATH</item>\n      <item>CMAKE_SKIP_INSTALL_ALL_DEPENDENCY</item>\n      <item>CMAKE_SKIP_INSTALL_RPATH</item>\n      <item>CMAKE_SKIP_INSTALL_RULES</item>\n      <item>CMAKE_SKIP_RPATH</item>\n      <item>CMAKE_SOURCE_DIR</item>\n      <item>CMAKE_STAGING_PREFIX</item>\n      <item>CMAKE_STATIC_LIBRARY_PREFIX</item>\n      <item>CMAKE_STATIC_LIBRARY_SUFFIX</item>\n      <item>CMAKE_STATIC_LINKER_FLAGS</item>\n      <item>CMAKE_STATIC_LINKER_FLAGS_INIT</item>\n      <item>CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS</item>\n      <item>CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE</item>\n      <item>CMAKE_SUPPRESS_DEVELOPER_ERRORS</item>\n      <item>CMAKE_SUPPRESS_DEVELOPER_WARNINGS</item>\n      <item>CMAKE_SUPPRESS_REGENERATION</item>\n      <item>CMAKE_SWIG_FLAGS</item>\n      <item>CMAKE_SWIG_OUTDIR</item>\n      <item>CMAKE_SYSROOT</item>\n      <item>CMAKE_SYSROOT_COMPILE</item>\n      <item>CMAKE_SYSROOT_LINK</item>\n      <item>CMAKE_SYSTEM</item>\n      <item>CMAKE_SYSTEM_APPBUNDLE_PATH</item>\n      <item>CMAKE_SYSTEM_FRAMEWORK_PATH</item>\n      <item>CMAKE_SYSTEM_IGNORE_PATH</item>\n      <item>CMAKE_SYSTEM_INCLUDE_PATH</item>\n      <item>CMAKE_SYSTEM_LIBRARY_PATH</item>\n      <item>CMAKE_SYSTEM_NAME</item>\n      <item>CMAKE_SYSTEM_PREFIX_PATH</item>\n      <item>CMAKE_SYSTEM_PROCESSOR</item>\n      <item>CMAKE_SYSTEM_PROGRAM_PATH</item>\n      <item>CMAKE_SYSTEM_VERSION</item>\n      <item>CMAKE_Swift_LANGUAGE_VERSION</item>\n      <item>CMAKE_Swift_MODULE_DIRECTORY</item>\n      <item>CMAKE_THREAD_LIBS_INIT</item>\n      <item>CMAKE_THREAD_PREFER_PTHREAD</item>\n      <item>CMAKE_TOOLCHAIN_FILE</item>\n      <item>CMAKE_TRY_COMPILE_CONFIGURATION</item>\n      <item>CMAKE_TRY_COMPILE_PLATFORM_VARIABLES</item>\n      <item>CMAKE_TRY_COMPILE_TARGET_TYPE</item>\n      <item>CMAKE_TWEAK_VERSION</item>\n      <item>CMAKE_USER_MAKE_RULES_OVERRIDE</item>\n      <item>CMAKE_USE_PTHREADS_INIT</item>\n      <item>CMAKE_USE_RELATIVE_PATHS</item>\n      <item>CMAKE_USE_SPROC_INIT</item>\n      <item>CMAKE_USE_WIN32_THREADS_INIT</item>\n      <item>CMAKE_VERBOSE_MAKEFILE</item>\n      <item>CMAKE_VERSION</item>\n      <item>CMAKE_VISIBILITY_INLINES_HIDDEN</item>\n      <item>CMAKE_VS_DEVENV_COMMAND</item>\n      <item>CMAKE_VS_GLOBALS</item>\n      <item>CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD</item>\n      <item>CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD</item>\n      <item>CMAKE_VS_INTEL_Fortran_PROJECT_VERSION</item>\n      <item>CMAKE_VS_JUST_MY_CODE_DEBUGGING</item>\n      <item>CMAKE_VS_MSBUILD_COMMAND</item>\n      <item>CMAKE_VS_NsightTegra_VERSION</item>\n      <item>CMAKE_VS_PLATFORM_NAME</item>\n      <item>CMAKE_VS_PLATFORM_TOOLSET</item>\n      <item>CMAKE_VS_PLATFORM_TOOLSET_CUDA</item>\n      <item>CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE</item>\n      <item>CMAKE_VS_SDK_EXCLUDE_DIRECTORIES</item>\n      <item>CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES</item>\n      <item>CMAKE_VS_SDK_INCLUDE_DIRECTORIES</item>\n      <item>CMAKE_VS_SDK_LIBRARY_DIRECTORIES</item>\n      <item>CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES</item>\n      <item>CMAKE_VS_SDK_REFERENCE_DIRECTORIES</item>\n      <item>CMAKE_VS_SDK_SOURCE_DIRECTORIES</item>\n      <item>CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION</item>\n      <item>CMAKE_WARN_DEPRECATED</item>\n      <item>CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION</item>\n      <item>CMAKE_WIN32_EXECUTABLE</item>\n      <item>CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS</item>\n      <item>CMAKE_XCODE_GENERATE_SCHEME</item>\n      <item>CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY</item>\n      <item>CMAKE_XCODE_PLATFORM_TOOLSET</item>\n      <item>CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER</item>\n      <item>CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN</item>\n      <item>CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER</item>\n      <item>CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS</item>\n      <item>CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE</item>\n      <item>CMAKE_XCODE_SCHEME_GUARD_MALLOC</item>\n      <item>CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP</item>\n      <item>CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES</item>\n      <item>CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE</item>\n      <item>CMAKE_XCODE_SCHEME_MALLOC_STACK</item>\n      <item>CMAKE_XCODE_SCHEME_THREAD_SANITIZER</item>\n      <item>CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP</item>\n      <item>CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER</item>\n      <item>CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP</item>\n      <item>CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS</item>\n      <item>CPACK_ABSOLUTE_DESTINATION_FILES</item>\n      <item>CPACK_ARCHIVE_COMPONENT_INSTALL</item>\n      <item>CPACK_ARCHIVE_FILE_NAME</item>\n      <item>CPACK_BUILD_SOURCE_DIRS</item>\n      <item>CPACK_BUNDLE_APPLE_CERT_APP</item>\n      <item>CPACK_BUNDLE_APPLE_CODESIGN_FILES</item>\n      <item>CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER</item>\n      <item>CPACK_BUNDLE_APPLE_ENTITLEMENTS</item>\n      <item>CPACK_BUNDLE_ICON</item>\n      <item>CPACK_BUNDLE_NAME</item>\n      <item>CPACK_BUNDLE_PLIST</item>\n      <item>CPACK_BUNDLE_STARTUP_COMMAND</item>\n      <item>CPACK_CMAKE_GENERATOR</item>\n      <item>CPACK_COMMAND_CODESIGN</item>\n      <item>CPACK_COMMAND_HDIUTIL</item>\n      <item>CPACK_COMMAND_PKGBUILD</item>\n      <item>CPACK_COMMAND_PRODUCTBUILD</item>\n      <item>CPACK_COMMAND_REZ</item>\n      <item>CPACK_COMMAND_SETFILE</item>\n      <item>CPACK_COMPONENTS_ALL</item>\n      <item>CPACK_COMPONENTS_GROUPING</item>\n      <item>CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY</item>\n      <item>CPACK_CREATE_DESKTOP_LINKS</item>\n      <item>CPACK_CYGWIN_BUILD_SCRIPT</item>\n      <item>CPACK_CYGWIN_PATCH_FILE</item>\n      <item>CPACK_CYGWIN_PATCH_NUMBER</item>\n      <item>CPACK_DEBIAN_ARCHIVE_TYPE</item>\n      <item>CPACK_DEBIAN_COMPRESSION_TYPE</item>\n      <item>CPACK_DEBIAN_DEBUGINFO_PACKAGE</item>\n      <item>CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS</item>\n      <item>CPACK_DEBIAN_FILE_NAME</item>\n      <item>CPACK_DEBIAN_PACKAGE_ARCHITECTURE</item>\n      <item>CPACK_DEBIAN_PACKAGE_BREAKS</item>\n      <item>CPACK_DEBIAN_PACKAGE_CONFLICTS</item>\n      <item>CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA</item>\n      <item>CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION</item>\n      <item>CPACK_DEBIAN_PACKAGE_DEBUG</item>\n      <item>CPACK_DEBIAN_PACKAGE_DEPENDS</item>\n      <item>CPACK_DEBIAN_PACKAGE_DESCRIPTION</item>\n      <item>CPACK_DEBIAN_PACKAGE_ENHANCES</item>\n      <item>CPACK_DEBIAN_PACKAGE_EPOCH</item>\n      <item>CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS</item>\n      <item>CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY</item>\n      <item>CPACK_DEBIAN_PACKAGE_HOMEPAGE</item>\n      <item>CPACK_DEBIAN_PACKAGE_MAINTAINER</item>\n      <item>CPACK_DEBIAN_PACKAGE_NAME</item>\n      <item>CPACK_DEBIAN_PACKAGE_PREDEPENDS</item>\n      <item>CPACK_DEBIAN_PACKAGE_PRIORITY</item>\n      <item>CPACK_DEBIAN_PACKAGE_PROVIDES</item>\n      <item>CPACK_DEBIAN_PACKAGE_RECOMMENDS</item>\n      <item>CPACK_DEBIAN_PACKAGE_RELEASE</item>\n      <item>CPACK_DEBIAN_PACKAGE_REPLACES</item>\n      <item>CPACK_DEBIAN_PACKAGE_SECTION</item>\n      <item>CPACK_DEBIAN_PACKAGE_SHLIBDEPS</item>\n      <item>CPACK_DEBIAN_PACKAGE_SOURCE</item>\n      <item>CPACK_DEBIAN_PACKAGE_SUGGESTS</item>\n      <item>CPACK_DEBIAN_PACKAGE_VERSION</item>\n      <item>CPACK_DEB_COMPONENT_INSTALL</item>\n      <item>CPACK_DMG_BACKGROUND_IMAGE</item>\n      <item>CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK</item>\n      <item>CPACK_DMG_DS_STORE</item>\n      <item>CPACK_DMG_DS_STORE_SETUP_SCRIPT</item>\n      <item>CPACK_DMG_FORMAT</item>\n      <item>CPACK_DMG_SLA_DIR</item>\n      <item>CPACK_DMG_SLA_LANGUAGES</item>\n      <item>CPACK_DMG_VOLUME_NAME</item>\n      <item>CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION</item>\n      <item>CPACK_EXT_ENABLE_STAGING</item>\n      <item>CPACK_EXT_PACKAGE_SCRIPT</item>\n      <item>CPACK_EXT_REQUESTED_VERSIONS</item>\n      <item>CPACK_GENERATOR</item>\n      <item>CPACK_IFW_ADMIN_TARGET_DIRECTORY</item>\n      <item>CPACK_IFW_BINARYCREATOR_EXECUTABLE</item>\n      <item>CPACK_IFW_DEVTOOL_EXECUTABLE</item>\n      <item>CPACK_IFW_DOWNLOAD_ALL</item>\n      <item>CPACK_IFW_FRAMEWORK_VERSION</item>\n      <item>CPACK_IFW_INSTALLERBASE_EXECUTABLE</item>\n      <item>CPACK_IFW_PACKAGES_DIRECTORIES</item>\n      <item>CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS</item>\n      <item>CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH</item>\n      <item>CPACK_IFW_PACKAGE_BACKGROUND</item>\n      <item>CPACK_IFW_PACKAGE_BANNER</item>\n      <item>CPACK_IFW_PACKAGE_CONTROL_SCRIPT</item>\n      <item>CPACK_IFW_PACKAGE_GROUP</item>\n      <item>CPACK_IFW_PACKAGE_ICON</item>\n      <item>CPACK_IFW_PACKAGE_LOGO</item>\n      <item>CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE</item>\n      <item>CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME</item>\n      <item>CPACK_IFW_PACKAGE_NAME</item>\n      <item>CPACK_IFW_PACKAGE_PUBLISHER</item>\n      <item>CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR</item>\n      <item>CPACK_IFW_PACKAGE_RESOURCES</item>\n      <item>CPACK_IFW_PACKAGE_START_MENU_DIRECTORY</item>\n      <item>CPACK_IFW_PACKAGE_STYLE_SHEET</item>\n      <item>CPACK_IFW_PACKAGE_TITLE</item>\n      <item>CPACK_IFW_PACKAGE_TITLE_COLOR</item>\n      <item>CPACK_IFW_PACKAGE_WATERMARK</item>\n      <item>CPACK_IFW_PACKAGE_WINDOW_ICON</item>\n      <item>CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT</item>\n      <item>CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH</item>\n      <item>CPACK_IFW_PACKAGE_WIZARD_STYLE</item>\n      <item>CPACK_IFW_PRODUCT_URL</item>\n      <item>CPACK_IFW_REPOGEN_EXECUTABLE</item>\n      <item>CPACK_IFW_REPOSITORIES_ALL</item>\n      <item>CPACK_IFW_RESOLVE_DUPLICATE_NAMES</item>\n      <item>CPACK_IFW_ROOT</item>\n      <item>CPACK_IFW_TARGET_DIRECTORY</item>\n      <item>CPACK_IFW_VERBOSE</item>\n      <item>CPACK_INCLUDE_TOPLEVEL_DIRECTORY</item>\n      <item>CPACK_INSTALLED_DIRECTORIES</item>\n      <item>CPACK_INSTALL_CMAKE_PROJECTS</item>\n      <item>CPACK_INSTALL_COMMANDS</item>\n      <item>CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS</item>\n      <item>CPACK_INSTALL_SCRIPT</item>\n      <item>CPACK_MONOLITHIC_INSTALL</item>\n      <item>CPACK_NSIS_COMPRESSOR</item>\n      <item>CPACK_NSIS_CONTACT</item>\n      <item>CPACK_NSIS_CREATE_ICONS_EXTRA</item>\n      <item>CPACK_NSIS_DELETE_ICONS_EXTRA</item>\n      <item>CPACK_NSIS_DISPLAY_NAME</item>\n      <item>CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL</item>\n      <item>CPACK_NSIS_EXECUTABLES_DIRECTORY</item>\n      <item>CPACK_NSIS_EXTRA_INSTALL_COMMANDS</item>\n      <item>CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS</item>\n      <item>CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS</item>\n      <item>CPACK_NSIS_HELP_LINK</item>\n      <item>CPACK_NSIS_INSTALLED_ICON_NAME</item>\n      <item>CPACK_NSIS_INSTALLER_MUI_ICON_CODE</item>\n      <item>CPACK_NSIS_INSTALL_ROOT</item>\n      <item>CPACK_NSIS_MENU_LINKS</item>\n      <item>CPACK_NSIS_MODIFY_PATH</item>\n      <item>CPACK_NSIS_MUI_FINISHPAGE_RUN</item>\n      <item>CPACK_NSIS_MUI_ICON</item>\n      <item>CPACK_NSIS_MUI_UNIICON</item>\n      <item>CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP</item>\n      <item>CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP</item>\n      <item>CPACK_NSIS_PACKAGE_NAME</item>\n      <item>CPACK_NSIS_URL_INFO_ABOUT</item>\n      <item>CPACK_NUGET_COMPONENT_INSTALL</item>\n      <item>CPACK_NUGET_PACKAGE_AUTHORS</item>\n      <item>CPACK_NUGET_PACKAGE_COPYRIGHT</item>\n      <item>CPACK_NUGET_PACKAGE_DEBUG</item>\n      <item>CPACK_NUGET_PACKAGE_DEPENDENCIES</item>\n      <item>CPACK_NUGET_PACKAGE_DESCRIPTION</item>\n      <item>CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY</item>\n      <item>CPACK_NUGET_PACKAGE_HOMEPAGE_URL</item>\n      <item>CPACK_NUGET_PACKAGE_ICONURL</item>\n      <item>CPACK_NUGET_PACKAGE_LICENSEURL</item>\n      <item>CPACK_NUGET_PACKAGE_NAME</item>\n      <item>CPACK_NUGET_PACKAGE_OWNERS</item>\n      <item>CPACK_NUGET_PACKAGE_RELEASE_NOTES</item>\n      <item>CPACK_NUGET_PACKAGE_TAGS</item>\n      <item>CPACK_NUGET_PACKAGE_TITLE</item>\n      <item>CPACK_NUGET_PACKAGE_VERSION</item>\n      <item>CPACK_OSX_PACKAGE_VERSION</item>\n      <item>CPACK_OUTPUT_CONFIG_FILE</item>\n      <item>CPACK_PACKAGE_CHECKSUM</item>\n      <item>CPACK_PACKAGE_CONTACT</item>\n      <item>CPACK_PACKAGE_DESCRIPTION</item>\n      <item>CPACK_PACKAGE_DESCRIPTION_FILE</item>\n      <item>CPACK_PACKAGE_DESCRIPTION_SUMMARY</item>\n      <item>CPACK_PACKAGE_DIRECTORY</item>\n      <item>CPACK_PACKAGE_EXECUTABLES</item>\n      <item>CPACK_PACKAGE_FILE_NAME</item>\n      <item>CPACK_PACKAGE_HOMEPAGE_URL</item>\n      <item>CPACK_PACKAGE_ICON</item>\n      <item>CPACK_PACKAGE_INSTALL_DIRECTORY</item>\n      <item>CPACK_PACKAGE_INSTALL_REGISTRY_KEY</item>\n      <item>CPACK_PACKAGE_NAME</item>\n      <item>CPACK_PACKAGE_VENDOR</item>\n      <item>CPACK_PACKAGE_VERSION</item>\n      <item>CPACK_PACKAGE_VERSION_MAJOR</item>\n      <item>CPACK_PACKAGE_VERSION_MINOR</item>\n      <item>CPACK_PACKAGE_VERSION_PATCH</item>\n      <item>CPACK_PACKAGING_INSTALL_PREFIX</item>\n      <item>CPACK_PKGBUILD_IDENTITY_NAME</item>\n      <item>CPACK_PKGBUILD_KEYCHAIN_PATH</item>\n      <item>CPACK_PRODUCTBUILD_IDENTITY_NAME</item>\n      <item>CPACK_PRODUCTBUILD_KEYCHAIN_PATH</item>\n      <item>CPACK_PRODUCTBUILD_RESOURCES_DIR</item>\n      <item>CPACK_PROJECT_CONFIG_FILE</item>\n      <item>CPACK_RESOURCE_FILE_LICENSE</item>\n      <item>CPACK_RESOURCE_FILE_README</item>\n      <item>CPACK_RESOURCE_FILE_WELCOME</item>\n      <item>CPACK_RPM_ADDITIONAL_MAN_DIRS</item>\n      <item>CPACK_RPM_BUILDREQUIRES</item>\n      <item>CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX</item>\n      <item>CPACK_RPM_CHANGELOG_FILE</item>\n      <item>CPACK_RPM_COMPONENT_INSTALL</item>\n      <item>CPACK_RPM_COMPRESSION_TYPE</item>\n      <item>CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS</item>\n      <item>CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION</item>\n      <item>CPACK_RPM_DEBUGINFO_FILE_NAME</item>\n      <item>CPACK_RPM_DEBUGINFO_PACKAGE</item>\n      <item>CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE</item>\n      <item>CPACK_RPM_DEFAULT_DIR_PERMISSIONS</item>\n      <item>CPACK_RPM_DEFAULT_FILE_PERMISSIONS</item>\n      <item>CPACK_RPM_DEFAULT_GROUP</item>\n      <item>CPACK_RPM_DEFAULT_USER</item>\n      <item>CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST</item>\n      <item>CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION</item>\n      <item>CPACK_RPM_FILE_NAME</item>\n      <item>CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE</item>\n      <item>CPACK_RPM_INSTALL_WITH_EXEC</item>\n      <item>CPACK_RPM_MAIN_COMPONENT</item>\n      <item>CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION</item>\n      <item>CPACK_RPM_PACKAGE_ARCHITECTURE</item>\n      <item>CPACK_RPM_PACKAGE_AUTOPROV</item>\n      <item>CPACK_RPM_PACKAGE_AUTOREQ</item>\n      <item>CPACK_RPM_PACKAGE_AUTOREQPROV</item>\n      <item>CPACK_RPM_PACKAGE_CONFLICTS</item>\n      <item>CPACK_RPM_PACKAGE_DEBUG</item>\n      <item>CPACK_RPM_PACKAGE_DESCRIPTION</item>\n      <item>CPACK_RPM_PACKAGE_EPOCH</item>\n      <item>CPACK_RPM_PACKAGE_GROUP</item>\n      <item>CPACK_RPM_PACKAGE_LICENSE</item>\n      <item>CPACK_RPM_PACKAGE_NAME</item>\n      <item>CPACK_RPM_PACKAGE_OBSOLETES</item>\n      <item>CPACK_RPM_PACKAGE_PROVIDES</item>\n      <item>CPACK_RPM_PACKAGE_RELEASE</item>\n      <item>CPACK_RPM_PACKAGE_RELEASE_DIST</item>\n      <item>CPACK_RPM_PACKAGE_RELOCATABLE</item>\n      <item>CPACK_RPM_PACKAGE_REQUIRES</item>\n      <item>CPACK_RPM_PACKAGE_REQUIRES_POST</item>\n      <item>CPACK_RPM_PACKAGE_REQUIRES_POSTUN</item>\n      <item>CPACK_RPM_PACKAGE_REQUIRES_PRE</item>\n      <item>CPACK_RPM_PACKAGE_REQUIRES_PREUN</item>\n      <item>CPACK_RPM_PACKAGE_SOURCES</item>\n      <item>CPACK_RPM_PACKAGE_SUGGESTS</item>\n      <item>CPACK_RPM_PACKAGE_SUMMARY</item>\n      <item>CPACK_RPM_PACKAGE_URL</item>\n      <item>CPACK_RPM_PACKAGE_VENDOR</item>\n      <item>CPACK_RPM_PACKAGE_VERSION</item>\n      <item>CPACK_RPM_POST_INSTALL_SCRIPT_FILE</item>\n      <item>CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE</item>\n      <item>CPACK_RPM_PRE_INSTALL_SCRIPT_FILE</item>\n      <item>CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE</item>\n      <item>CPACK_RPM_RELOCATION_PATHS</item>\n      <item>CPACK_RPM_SOURCE_PKG_BUILD_PARAMS</item>\n      <item>CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX</item>\n      <item>CPACK_RPM_SPEC_INSTALL_POST</item>\n      <item>CPACK_RPM_SPEC_MORE_DEFINE</item>\n      <item>CPACK_RPM_USER_BINARY_SPECFILE</item>\n      <item>CPACK_RPM_USER_FILELIST</item>\n      <item>CPACK_SET_DESTDIR</item>\n      <item>CPACK_SOURCE_GENERATOR</item>\n      <item>CPACK_SOURCE_IGNORE_FILES</item>\n      <item>CPACK_SOURCE_OUTPUT_CONFIG_FILE</item>\n      <item>CPACK_SOURCE_PACKAGE_FILE_NAME</item>\n      <item>CPACK_SOURCE_STRIP_FILES</item>\n      <item>CPACK_STRIP_FILES</item>\n      <item>CPACK_SYSTEM_NAME</item>\n      <item>CPACK_TOPLEVEL_TAG</item>\n      <item>CPACK_VERBATIM_VARIABLES</item>\n      <item>CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION</item>\n      <item>CPACK_WIX_CMAKE_PACKAGE_REGISTRY</item>\n      <item>CPACK_WIX_CULTURES</item>\n      <item>CPACK_WIX_EXTENSIONS</item>\n      <item>CPACK_WIX_EXTRA_OBJECTS</item>\n      <item>CPACK_WIX_EXTRA_SOURCES</item>\n      <item>CPACK_WIX_LICENSE_RTF</item>\n      <item>CPACK_WIX_PATCH_FILE</item>\n      <item>CPACK_WIX_PRODUCT_GUID</item>\n      <item>CPACK_WIX_PRODUCT_ICON</item>\n      <item>CPACK_WIX_PROGRAM_MENU_FOLDER</item>\n      <item>CPACK_WIX_ROOT</item>\n      <item>CPACK_WIX_ROOT_FEATURE_DESCRIPTION</item>\n      <item>CPACK_WIX_ROOT_FEATURE_TITLE</item>\n      <item>CPACK_WIX_ROOT_FOLDER_ID</item>\n      <item>CPACK_WIX_SKIP_PROGRAM_FOLDER</item>\n      <item>CPACK_WIX_TEMPLATE</item>\n      <item>CPACK_WIX_UI_BANNER</item>\n      <item>CPACK_WIX_UI_DIALOG</item>\n      <item>CPACK_WIX_UI_REF</item>\n      <item>CPACK_WIX_UPGRADE_GUID</item>\n      <item>CTEST_BINARY_DIRECTORY</item>\n      <item>CTEST_BUILD_COMMAND</item>\n      <item>CTEST_BUILD_NAME</item>\n      <item>CTEST_BZR_COMMAND</item>\n      <item>CTEST_BZR_UPDATE_OPTIONS</item>\n      <item>CTEST_CHANGE_ID</item>\n      <item>CTEST_CHECKOUT_COMMAND</item>\n      <item>CTEST_CONFIGURATION_TYPE</item>\n      <item>CTEST_CONFIGURE_COMMAND</item>\n      <item>CTEST_COVERAGE_COMMAND</item>\n      <item>CTEST_COVERAGE_EXTRA_FLAGS</item>\n      <item>CTEST_CURL_OPTIONS</item>\n      <item>CTEST_CUSTOM_COVERAGE_EXCLUDE</item>\n      <item>CTEST_CUSTOM_ERROR_EXCEPTION</item>\n      <item>CTEST_CUSTOM_ERROR_MATCH</item>\n      <item>CTEST_CUSTOM_ERROR_POST_CONTEXT</item>\n      <item>CTEST_CUSTOM_ERROR_PRE_CONTEXT</item>\n      <item>CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE</item>\n      <item>CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS</item>\n      <item>CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS</item>\n      <item>CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE</item>\n      <item>CTEST_CUSTOM_MEMCHECK_IGNORE</item>\n      <item>CTEST_CUSTOM_POST_MEMCHECK</item>\n      <item>CTEST_CUSTOM_POST_TEST</item>\n      <item>CTEST_CUSTOM_PRE_MEMCHECK</item>\n      <item>CTEST_CUSTOM_PRE_TEST</item>\n      <item>CTEST_CUSTOM_TEST_IGNORE</item>\n      <item>CTEST_CUSTOM_WARNING_EXCEPTION</item>\n      <item>CTEST_CUSTOM_WARNING_MATCH</item>\n      <item>CTEST_CVS_CHECKOUT</item>\n      <item>CTEST_CVS_COMMAND</item>\n      <item>CTEST_CVS_UPDATE_OPTIONS</item>\n      <item>CTEST_DROP_LOCATION</item>\n      <item>CTEST_DROP_METHOD</item>\n      <item>CTEST_DROP_SITE</item>\n      <item>CTEST_DROP_SITE_CDASH</item>\n      <item>CTEST_DROP_SITE_PASSWORD</item>\n      <item>CTEST_DROP_SITE_USER</item>\n      <item>CTEST_EXTRA_COVERAGE_GLOB</item>\n      <item>CTEST_GIT_COMMAND</item>\n      <item>CTEST_GIT_INIT_SUBMODULES</item>\n      <item>CTEST_GIT_UPDATE_CUSTOM</item>\n      <item>CTEST_GIT_UPDATE_OPTIONS</item>\n      <item>CTEST_HG_COMMAND</item>\n      <item>CTEST_HG_UPDATE_OPTIONS</item>\n      <item>CTEST_LABELS_FOR_SUBPROJECTS</item>\n      <item>CTEST_MEMORYCHECK_COMMAND</item>\n      <item>CTEST_MEMORYCHECK_COMMAND_OPTIONS</item>\n      <item>CTEST_MEMORYCHECK_SANITIZER_OPTIONS</item>\n      <item>CTEST_MEMORYCHECK_SUPPRESSIONS_FILE</item>\n      <item>CTEST_MEMORYCHECK_TYPE</item>\n      <item>CTEST_NIGHTLY_START_TIME</item>\n      <item>CTEST_P4_CLIENT</item>\n      <item>CTEST_P4_COMMAND</item>\n      <item>CTEST_P4_OPTIONS</item>\n      <item>CTEST_P4_UPDATE_OPTIONS</item>\n      <item>CTEST_SCP_COMMAND</item>\n      <item>CTEST_SITE</item>\n      <item>CTEST_SOURCE_DIRECTORY</item>\n      <item>CTEST_SUBMIT_URL</item>\n      <item>CTEST_SVN_COMMAND</item>\n      <item>CTEST_SVN_OPTIONS</item>\n      <item>CTEST_SVN_UPDATE_OPTIONS</item>\n      <item>CTEST_TEST_LOAD</item>\n      <item>CTEST_TEST_TIMEOUT</item>\n      <item>CTEST_TRIGGER_SITE</item>\n      <item>CTEST_UPDATE_COMMAND</item>\n      <item>CTEST_UPDATE_OPTIONS</item>\n      <item>CTEST_UPDATE_VERSION_ONLY</item>\n      <item>CTEST_UPDATE_VERSION_OVERRIDE</item>\n      <item>CTEST_USE_LAUNCHERS</item>\n      <item>CYGWIN</item>\n      <item>EXECUTABLE_OUTPUT_PATH</item>\n      <item>ExternalData_BINARY_ROOT</item>\n      <item>ExternalData_CUSTOM_ERROR</item>\n      <item>ExternalData_CUSTOM_FILE</item>\n      <item>ExternalData_CUSTOM_LOCATION</item>\n      <item>ExternalData_LINK_CONTENT</item>\n      <item>ExternalData_NO_SYMLINKS</item>\n      <item>ExternalData_OBJECT_STORES</item>\n      <item>ExternalData_SERIES_MATCH</item>\n      <item>ExternalData_SERIES_PARSE</item>\n      <item>ExternalData_SERIES_PARSE_NUMBER</item>\n      <item>ExternalData_SERIES_PARSE_PREFIX</item>\n      <item>ExternalData_SERIES_PARSE_SUFFIX</item>\n      <item>ExternalData_SOURCE_ROOT</item>\n      <item>ExternalData_TIMEOUT_ABSOLUTE</item>\n      <item>ExternalData_TIMEOUT_INACTIVITY</item>\n      <item>ExternalData_URL_TEMPLATES</item>\n      <item>GHS-MULTI</item>\n      <item>GRAPHVIZ_EXECUTABLES</item>\n      <item>GRAPHVIZ_EXTERNAL_LIBS</item>\n      <item>GRAPHVIZ_GENERATE_PER_TARGET</item>\n      <item>GRAPHVIZ_GRAPH_HEADER</item>\n      <item>GRAPHVIZ_GRAPH_NAME</item>\n      <item>GRAPHVIZ_GRAPH_TYPE</item>\n      <item>GRAPHVIZ_IGNORE_TARGETS</item>\n      <item>GRAPHVIZ_MODULE_LIBS</item>\n      <item>GRAPHVIZ_NODE_PREFIX</item>\n      <item>GRAPHVIZ_SHARED_LIBS</item>\n      <item>GRAPHVIZ_STATIC_LIBS</item>\n      <item>LIBRARY_OUTPUT_PATH</item>\n      <item>MINGW</item>\n      <item>MSVC</item>\n      <item>MSVC10</item>\n      <item>MSVC11</item>\n      <item>MSVC12</item>\n      <item>MSVC14</item>\n      <item>MSVC60</item>\n      <item>MSVC70</item>\n      <item>MSVC71</item>\n      <item>MSVC80</item>\n      <item>MSVC90</item>\n      <item>MSVC_IDE</item>\n      <item>MSVC_TOOLSET_VERSION</item>\n      <item>MSVC_VERSION</item>\n      <item>PACKAGE_FIND_NAME</item>\n      <item>PACKAGE_FIND_VERSION</item>\n      <item>PACKAGE_FIND_VERSION_COUNT</item>\n      <item>PACKAGE_FIND_VERSION_MAJOR</item>\n      <item>PACKAGE_FIND_VERSION_MINOR</item>\n      <item>PACKAGE_FIND_VERSION_PATCH</item>\n      <item>PACKAGE_FIND_VERSION_TWEAK</item>\n      <item>PACKAGE_VERSION</item>\n      <item>PACKAGE_VERSION_COMPATIBLE</item>\n      <item>PACKAGE_VERSION_EXACT</item>\n      <item>PACKAGE_VERSION_UNSUITABLE</item>\n      <item>PKG_CONFIG_EXECUTABLE</item>\n      <item>PKG_CONFIG_USE_CMAKE_PREFIX_PATH</item>\n      <item>PKG_CONFIG_VERSION_STRING</item>\n      <item>PROJECT_BINARY_DIR</item>\n      <item>PROJECT_DESCRIPTION</item>\n      <item>PROJECT_HOMEPAGE_URL</item>\n      <item>PROJECT_NAME</item>\n      <item>PROJECT_SOURCE_DIR</item>\n      <item>PROJECT_VERSION</item>\n      <item>PROJECT_VERSION_MAJOR</item>\n      <item>PROJECT_VERSION_MINOR</item>\n      <item>PROJECT_VERSION_PATCH</item>\n      <item>PROJECT_VERSION_TWEAK</item>\n      <item>QTIFWDIR</item>\n      <item>SWIG_OUTFILE_DIR</item>\n      <item>SWIG_SOURCE_FILE_EXTENSIONS</item>\n      <item>THREADS_PREFER_PTHREAD_FLAG</item>\n      <item>UNIX</item>\n      <item>WIN32</item>\n      <item>WINCE</item>\n      <item>WINDOWS_PHONE</item>\n      <item>WINDOWS_STORE</item>\n      <item>XCODE</item>\n      <item>XCODE_VERSION</item>\n    </list>\n\n    <list name=\"environment-variables\">\n      <item>CC</item>\n      <item>CFLAGS</item>\n      <item>CMAKE_APPBUNDLE_PATH</item>\n      <item>CMAKE_BUILD_PARALLEL_LEVEL</item>\n      <item>CMAKE_CONFIG_TYPE</item>\n      <item>CMAKE_FRAMEWORK_PATH</item>\n      <item>CMAKE_GENERATOR</item>\n      <item>CMAKE_GENERATOR_INSTANCE</item>\n      <item>CMAKE_GENERATOR_PLATFORM</item>\n      <item>CMAKE_GENERATOR_TOOLSET</item>\n      <item>CMAKE_MSVCIDE_RUN_PATH</item>\n      <item>CMAKE_NO_VERBOSE</item>\n      <item>CMAKE_OSX_ARCHITECTURES</item>\n      <item>CMAKE_PREFIX_PATH</item>\n      <item>CSFLAGS</item>\n      <item>CTEST_INTERACTIVE_DEBUG_MODE</item>\n      <item>CTEST_OUTPUT_ON_FAILURE</item>\n      <item>CTEST_PARALLEL_LEVEL</item>\n      <item>CTEST_PROGRESS_OUTPUT</item>\n      <item>CTEST_USE_LAUNCHERS_DEFAULT</item>\n      <item>CUDACXX</item>\n      <item>CUDAFLAGS</item>\n      <item>CUDAHOSTCXX</item>\n      <item>CXX</item>\n      <item>CXXFLAGS</item>\n      <item>DASHBOARD_TEST_FROM_CTEST</item>\n      <item>DESTDIR</item>\n      <item>FC</item>\n      <item>FFLAGS</item>\n      <item>LDFLAGS</item>\n      <item>MACOSX_DEPLOYMENT_TARGET</item>\n      <item>PATH</item>\n      <item>RC</item>\n      <item>RCFLAGS</item>\n      <item>SWIFTC</item>\n      <item>VERBOSE</item>\n    </list>\n    <list name=\"global-properties\">\n      <item>ALLOW_DUPLICATE_CUSTOM_TARGETS</item>\n      <item>AUTOGEN_SOURCE_GROUP</item>\n      <item>AUTOGEN_TARGETS_FOLDER</item>\n      <item>AUTOMOC_SOURCE_GROUP</item>\n      <item>AUTOMOC_TARGETS_FOLDER</item>\n      <item>AUTORCC_SOURCE_GROUP</item>\n      <item>CMAKE_CXX_KNOWN_FEATURES</item>\n      <item>CMAKE_C_KNOWN_FEATURES</item>\n      <item>CMAKE_ROLE</item>\n      <item>DEBUG_CONFIGURATIONS</item>\n      <item>DISABLED_FEATURES</item>\n      <item>ECLIPSE_EXTRA_NATURES</item>\n      <item>ENABLED_FEATURES</item>\n      <item>ENABLED_LANGUAGES</item>\n      <item>FIND_LIBRARY_USE_LIB32_PATHS</item>\n      <item>FIND_LIBRARY_USE_LIB64_PATHS</item>\n      <item>FIND_LIBRARY_USE_LIBX32_PATHS</item>\n      <item>FIND_LIBRARY_USE_OPENBSD_VERSIONING</item>\n      <item>FeatureSummary_DEFAULT_PKG_TYPE</item>\n      <item>FeatureSummary_PKG_TYPES</item>\n      <item>FeatureSummary_REQUIRED_PKG_TYPES</item>\n      <item>GENERATOR_IS_MULTI_CONFIG</item>\n      <item>GLOBAL_DEPENDS_DEBUG_MODE</item>\n      <item>GLOBAL_DEPENDS_NO_CYCLES</item>\n      <item>IN_TRY_COMPILE</item>\n      <item>JOB_POOLS</item>\n      <item>PACKAGES_FOUND</item>\n      <item>PACKAGES_NOT_FOUND</item>\n      <item>PREDEFINED_TARGETS_FOLDER</item>\n      <item>REPORT_UNDEFINED_PROPERTIES</item>\n      <item>RULE_LAUNCH_COMPILE</item>\n      <item>RULE_LAUNCH_CUSTOM</item>\n      <item>RULE_LAUNCH_LINK</item>\n      <item>RULE_MESSAGES</item>\n      <item>TARGET_ARCHIVES_MAY_BE_SHARED_LIBS</item>\n      <item>TARGET_MESSAGES</item>\n      <item>TARGET_SUPPORTS_SHARED_LIBS</item>\n      <item>USE_FOLDERS</item>\n      <item>XCODE_EMIT_EFFECTIVE_PLATFORM_NAME</item>\n    </list>\n    <list name=\"directory-properties\">\n      <item>ADDITIONAL_CLEAN_FILES</item>\n      <item>ADDITIONAL_MAKE_CLEAN_FILES</item>\n      <item>BINARY_DIR</item>\n      <item>BUILDSYSTEM_TARGETS</item>\n      <item>CACHE_VARIABLES</item>\n      <item>CLEAN_NO_CUSTOM</item>\n      <item>CMAKE_CONFIGURE_DEPENDS</item>\n      <item>COMPILE_DEFINITIONS</item>\n      <item>COMPILE_OPTIONS</item>\n      <item>DEFINITIONS</item>\n      <item>EXCLUDE_FROM_ALL</item>\n      <item>IMPLICIT_DEPENDS_INCLUDE_TRANSFORM</item>\n      <item>INCLUDE_DIRECTORIES</item>\n      <item>INCLUDE_REGULAR_EXPRESSION</item>\n      <item>INTERPROCEDURAL_OPTIMIZATION</item>\n      <item>LABELS</item>\n      <item>LINK_DIRECTORIES</item>\n      <item>LINK_OPTIONS</item>\n      <item>LISTFILE_STACK</item>\n      <item>MACROS</item>\n      <item>PARENT_DIRECTORY</item>\n      <item>RULE_LAUNCH_COMPILE</item>\n      <item>RULE_LAUNCH_CUSTOM</item>\n      <item>RULE_LAUNCH_LINK</item>\n      <item>SOURCE_DIR</item>\n      <item>SUBDIRECTORIES</item>\n      <item>TESTS</item>\n      <item>TEST_INCLUDE_FILE</item>\n      <item>TEST_INCLUDE_FILES</item>\n      <item>VARIABLES</item>\n      <item>VS_STARTUP_PROJECT</item>\n    </list>\n    <list name=\"target-properties\">\n      <item>ADDITIONAL_CLEAN_FILES</item>\n      <item>ALIASED_TARGET</item>\n      <item>ANDROID_ANT_ADDITIONAL_OPTIONS</item>\n      <item>ANDROID_API</item>\n      <item>ANDROID_API_MIN</item>\n      <item>ANDROID_ARCH</item>\n      <item>ANDROID_ASSETS_DIRECTORIES</item>\n      <item>ANDROID_GUI</item>\n      <item>ANDROID_JAR_DEPENDENCIES</item>\n      <item>ANDROID_JAR_DIRECTORIES</item>\n      <item>ANDROID_JAVA_SOURCE_DIR</item>\n      <item>ANDROID_NATIVE_LIB_DEPENDENCIES</item>\n      <item>ANDROID_NATIVE_LIB_DIRECTORIES</item>\n      <item>ANDROID_PROCESS_MAX</item>\n      <item>ANDROID_PROGUARD</item>\n      <item>ANDROID_PROGUARD_CONFIG_PATH</item>\n      <item>ANDROID_SECURE_PROPS_PATH</item>\n      <item>ANDROID_SKIP_ANT_STEP</item>\n      <item>ANDROID_STL_TYPE</item>\n      <item>ARCHIVE_OUTPUT_DIRECTORY</item>\n      <item>ARCHIVE_OUTPUT_NAME</item>\n      <item>AUTOGEN_BUILD_DIR</item>\n      <item>AUTOGEN_ORIGIN_DEPENDS</item>\n      <item>AUTOGEN_TARGET_DEPENDS</item>\n      <item>AUTOMOC</item>\n      <item>AUTOMOC_COMPILER_PREDEFINES</item>\n      <item>AUTOMOC_DEPEND_FILTERS</item>\n      <item>AUTOMOC_EXECUTABLE</item>\n      <item>AUTOMOC_MACRO_NAMES</item>\n      <item>AUTOMOC_MOC_OPTIONS</item>\n      <item>AUTORCC</item>\n      <item>AUTORCC_EXECUTABLE</item>\n      <item>AUTORCC_OPTIONS</item>\n      <item>AUTOUIC</item>\n      <item>AUTOUIC_EXECUTABLE</item>\n      <item>AUTOUIC_OPTIONS</item>\n      <item>AUTOUIC_SEARCH_PATHS</item>\n      <item>BINARY_DIR</item>\n      <item>BUILD_RPATH</item>\n      <item>BUILD_RPATH_USE_ORIGIN</item>\n      <item>BUILD_WITH_INSTALL_NAME_DIR</item>\n      <item>BUILD_WITH_INSTALL_RPATH</item>\n      <item>BUNDLE</item>\n      <item>BUNDLE_EXTENSION</item>\n      <item>COMMON_LANGUAGE_RUNTIME</item>\n      <item>COMPATIBLE_INTERFACE_BOOL</item>\n      <item>COMPATIBLE_INTERFACE_NUMBER_MAX</item>\n      <item>COMPATIBLE_INTERFACE_NUMBER_MIN</item>\n      <item>COMPATIBLE_INTERFACE_STRING</item>\n      <item>COMPILE_DEFINITIONS</item>\n      <item>COMPILE_FEATURES</item>\n      <item>COMPILE_FLAGS</item>\n      <item>COMPILE_OPTIONS</item>\n      <item>COMPILE_PDB_NAME</item>\n      <item>COMPILE_PDB_OUTPUT_DIRECTORY</item>\n      <item>CROSSCOMPILING_EMULATOR</item>\n      <item>CUDA_EXTENSIONS</item>\n      <item>CUDA_PTX_COMPILATION</item>\n      <item>CUDA_RESOLVE_DEVICE_SYMBOLS</item>\n      <item>CUDA_SEPARABLE_COMPILATION</item>\n      <item>CUDA_STANDARD</item>\n      <item>CUDA_STANDARD_REQUIRED</item>\n      <item>CXX_EXTENSIONS</item>\n      <item>CXX_STANDARD</item>\n      <item>CXX_STANDARD_REQUIRED</item>\n      <item>C_EXTENSIONS</item>\n      <item>C_STANDARD</item>\n      <item>C_STANDARD_REQUIRED</item>\n      <item>DEFINE_SYMBOL</item>\n      <item>DEPLOYMENT_ADDITIONAL_FILES</item>\n      <item>DEPLOYMENT_REMOTE_DIRECTORY</item>\n      <item>DOTNET_TARGET_FRAMEWORK_VERSION</item>\n      <item>ENABLE_EXPORTS</item>\n      <item>EXCLUDE_FROM_ALL</item>\n      <item>EXCLUDE_FROM_DEFAULT_BUILD</item>\n      <item>EXPORT_NAME</item>\n      <item>EXPORT_PROPERTIES</item>\n      <item>EchoString</item>\n      <item>FOLDER</item>\n      <item>FRAMEWORK</item>\n      <item>FRAMEWORK_VERSION</item>\n      <item>Fortran_FORMAT</item>\n      <item>Fortran_MODULE_DIRECTORY</item>\n      <item>GENERATOR_FILE_NAME</item>\n      <item>GNUtoMS</item>\n      <item>HAS_CXX</item>\n      <item>IMPLICIT_DEPENDS_INCLUDE_TRANSFORM</item>\n      <item>IMPORTED</item>\n      <item>IMPORTED_COMMON_LANGUAGE_RUNTIME</item>\n      <item>IMPORTED_CONFIGURATIONS</item>\n      <item>IMPORTED_GLOBAL</item>\n      <item>IMPORTED_IMPLIB</item>\n      <item>IMPORTED_LIBNAME</item>\n      <item>IMPORTED_LINK_DEPENDENT_LIBRARIES</item>\n      <item>IMPORTED_LINK_INTERFACE_LANGUAGES</item>\n      <item>IMPORTED_LINK_INTERFACE_LIBRARIES</item>\n      <item>IMPORTED_LINK_INTERFACE_MULTIPLICITY</item>\n      <item>IMPORTED_LOCATION</item>\n      <item>IMPORTED_NO_SONAME</item>\n      <item>IMPORTED_OBJECTS</item>\n      <item>IMPORTED_SONAME</item>\n      <item>IMPORT_PREFIX</item>\n      <item>IMPORT_SUFFIX</item>\n      <item>INCLUDE_DIRECTORIES</item>\n      <item>INSTALL_NAME_DIR</item>\n      <item>INSTALL_RPATH</item>\n      <item>INSTALL_RPATH_USE_LINK_PATH</item>\n      <item>INTERFACE_AUTOUIC_OPTIONS</item>\n      <item>INTERFACE_COMPILE_DEFINITIONS</item>\n      <item>INTERFACE_COMPILE_FEATURES</item>\n      <item>INTERFACE_COMPILE_OPTIONS</item>\n      <item>INTERFACE_INCLUDE_DIRECTORIES</item>\n      <item>INTERFACE_LINK_DEPENDS</item>\n      <item>INTERFACE_LINK_DIRECTORIES</item>\n      <item>INTERFACE_LINK_LIBRARIES</item>\n      <item>INTERFACE_LINK_OPTIONS</item>\n      <item>INTERFACE_POSITION_INDEPENDENT_CODE</item>\n      <item>INTERFACE_SOURCES</item>\n      <item>INTERFACE_SYSTEM_INCLUDE_DIRECTORIES</item>\n      <item>INTERPROCEDURAL_OPTIMIZATION</item>\n      <item>IOS_INSTALL_COMBINED</item>\n      <item>JOB_POOL_COMPILE</item>\n      <item>JOB_POOL_LINK</item>\n      <item>LABELS</item>\n      <item>LIBRARY_OUTPUT_DIRECTORY</item>\n      <item>LIBRARY_OUTPUT_NAME</item>\n      <item>LINKER_LANGUAGE</item>\n      <item>LINK_DEPENDS</item>\n      <item>LINK_DEPENDS_NO_SHARED</item>\n      <item>LINK_DIRECTORIES</item>\n      <item>LINK_FLAGS</item>\n      <item>LINK_INTERFACE_LIBRARIES</item>\n      <item>LINK_INTERFACE_MULTIPLICITY</item>\n      <item>LINK_LIBRARIES</item>\n      <item>LINK_OPTIONS</item>\n      <item>LINK_SEARCH_END_STATIC</item>\n      <item>LINK_SEARCH_START_STATIC</item>\n      <item>LINK_WHAT_YOU_USE</item>\n      <item>LOCATION</item>\n      <item>MACOSX_BUNDLE</item>\n      <item>MACOSX_BUNDLE_INFO_PLIST</item>\n      <item>MACOSX_FRAMEWORK_INFO_PLIST</item>\n      <item>MACOSX_RPATH</item>\n      <item>MANUALLY_ADDED_DEPENDENCIES</item>\n      <item>MSVC_RUNTIME_LIBRARY</item>\n      <item>NAME</item>\n      <item>NO_SONAME</item>\n      <item>NO_SYSTEM_FROM_IMPORTED</item>\n      <item>OSX_ARCHITECTURES</item>\n      <item>OUTPUT_NAME</item>\n      <item>PDB_NAME</item>\n      <item>PDB_OUTPUT_DIRECTORY</item>\n      <item>POSITION_INDEPENDENT_CODE</item>\n      <item>PREFIX</item>\n      <item>PRIVATE_HEADER</item>\n      <item>PROJECT_LABEL</item>\n      <item>PUBLIC_HEADER</item>\n      <item>RESOURCE</item>\n      <item>RULE_LAUNCH_COMPILE</item>\n      <item>RULE_LAUNCH_CUSTOM</item>\n      <item>RULE_LAUNCH_LINK</item>\n      <item>RUNTIME_OUTPUT_DIRECTORY</item>\n      <item>RUNTIME_OUTPUT_NAME</item>\n      <item>SKIP_BUILD_RPATH</item>\n      <item>SOURCES</item>\n      <item>SOURCE_DIR</item>\n      <item>SOVERSION</item>\n      <item>STATIC_LIBRARY_FLAGS</item>\n      <item>STATIC_LIBRARY_OPTIONS</item>\n      <item>SUFFIX</item>\n      <item>Swift_DEPENDENCIES_FILE</item>\n      <item>Swift_MODULE_DIRECTORY</item>\n      <item>Swift_MODULE_NAME</item>\n      <item>TYPE</item>\n      <item>VERSION</item>\n      <item>VISIBILITY_INLINES_HIDDEN</item>\n      <item>VS_CONFIGURATION_TYPE</item>\n      <item>VS_DEBUGGER_COMMAND</item>\n      <item>VS_DEBUGGER_COMMAND_ARGUMENTS</item>\n      <item>VS_DEBUGGER_ENVIRONMENT</item>\n      <item>VS_DEBUGGER_WORKING_DIRECTORY</item>\n      <item>VS_DESKTOP_EXTENSIONS_VERSION</item>\n      <item>VS_DOTNET_REFERENCES</item>\n      <item>VS_DOTNET_REFERENCES_COPY_LOCAL</item>\n      <item>VS_DOTNET_TARGET_FRAMEWORK_VERSION</item>\n      <item>VS_GLOBAL_KEYWORD</item>\n      <item>VS_GLOBAL_PROJECT_TYPES</item>\n      <item>VS_GLOBAL_ROOTNAMESPACE</item>\n      <item>VS_IOT_EXTENSIONS_VERSION</item>\n      <item>VS_IOT_STARTUP_TASK</item>\n      <item>VS_JUST_MY_CODE_DEBUGGING</item>\n      <item>VS_KEYWORD</item>\n      <item>VS_MOBILE_EXTENSIONS_VERSION</item>\n      <item>VS_NO_SOLUTION_DEPLOY</item>\n      <item>VS_PACKAGE_REFERENCES</item>\n      <item>VS_PROJECT_IMPORT</item>\n      <item>VS_SCC_AUXPATH</item>\n      <item>VS_SCC_LOCALPATH</item>\n      <item>VS_SCC_PROJECTNAME</item>\n      <item>VS_SCC_PROVIDER</item>\n      <item>VS_SDK_REFERENCES</item>\n      <item>VS_USER_PROPS</item>\n      <item>VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION</item>\n      <item>VS_WINRT_COMPONENT</item>\n      <item>VS_WINRT_EXTENSIONS</item>\n      <item>VS_WINRT_REFERENCES</item>\n      <item>WIN32_EXECUTABLE</item>\n      <item>WINDOWS_EXPORT_ALL_SYMBOLS</item>\n      <item>XCODE_EXPLICIT_FILE_TYPE</item>\n      <item>XCODE_GENERATE_SCHEME</item>\n      <item>XCODE_PRODUCT_TYPE</item>\n      <item>XCODE_SCHEME_ADDRESS_SANITIZER</item>\n      <item>XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN</item>\n      <item>XCODE_SCHEME_ARGUMENTS</item>\n      <item>XCODE_SCHEME_DEBUG_AS_ROOT</item>\n      <item>XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER</item>\n      <item>XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS</item>\n      <item>XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE</item>\n      <item>XCODE_SCHEME_ENVIRONMENT</item>\n      <item>XCODE_SCHEME_EXECUTABLE</item>\n      <item>XCODE_SCHEME_GUARD_MALLOC</item>\n      <item>XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP</item>\n      <item>XCODE_SCHEME_MALLOC_GUARD_EDGES</item>\n      <item>XCODE_SCHEME_MALLOC_SCRIBBLE</item>\n      <item>XCODE_SCHEME_MALLOC_STACK</item>\n      <item>XCODE_SCHEME_THREAD_SANITIZER</item>\n      <item>XCODE_SCHEME_THREAD_SANITIZER_STOP</item>\n      <item>XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER</item>\n      <item>XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP</item>\n      <item>XCODE_SCHEME_ZOMBIE_OBJECTS</item>\n      <item>XCTEST</item>\n    </list>\n    <list name=\"source-properties\">\n      <item>ABSTRACT</item>\n      <item>AUTORCC_OPTIONS</item>\n      <item>AUTOUIC_OPTIONS</item>\n      <item>COMPILE_DEFINITIONS</item>\n      <item>COMPILE_FLAGS</item>\n      <item>COMPILE_OPTIONS</item>\n      <item>EXTERNAL_OBJECT</item>\n      <item>Fortran_FORMAT</item>\n      <item>GENERATED</item>\n      <item>HEADER_FILE_ONLY</item>\n      <item>INCLUDE_DIRECTORIES</item>\n      <item>KEEP_EXTENSION</item>\n      <item>LABELS</item>\n      <item>LANGUAGE</item>\n      <item>LOCATION</item>\n      <item>MACOSX_PACKAGE_LOCATION</item>\n      <item>OBJECT_DEPENDS</item>\n      <item>OBJECT_OUTPUTS</item>\n      <item>SKIP_AUTOGEN</item>\n      <item>SKIP_AUTOMOC</item>\n      <item>SKIP_AUTORCC</item>\n      <item>SKIP_AUTOUIC</item>\n      <item>SYMBOLIC</item>\n      <item>Swift_DEPENDENCIES_FILE</item>\n      <item>Swift_DIAGNOSTICS_FILE</item>\n      <item>VS_COPY_TO_OUT_DIR</item>\n      <item>VS_DEPLOYMENT_CONTENT</item>\n      <item>VS_DEPLOYMENT_LOCATION</item>\n      <item>VS_INCLUDE_IN_VSIX</item>\n      <item>VS_RESOURCE_GENERATOR</item>\n      <item>VS_SHADER_DISABLE_OPTIMIZATIONS</item>\n      <item>VS_SHADER_ENABLE_DEBUG</item>\n      <item>VS_SHADER_ENTRYPOINT</item>\n      <item>VS_SHADER_FLAGS</item>\n      <item>VS_SHADER_MODEL</item>\n      <item>VS_SHADER_OBJECT_FILE_NAME</item>\n      <item>VS_SHADER_OUTPUT_HEADER_FILE</item>\n      <item>VS_SHADER_TYPE</item>\n      <item>VS_SHADER_VARIABLE_NAME</item>\n      <item>VS_TOOL_OVERRIDE</item>\n      <item>VS_XAML_TYPE</item>\n      <item>WRAP_EXCLUDE</item>\n      <item>XCODE_EXPLICIT_FILE_TYPE</item>\n      <item>XCODE_FILE_ATTRIBUTES</item>\n      <item>XCODE_LAST_KNOWN_FILE_TYPE</item>\n    </list>\n    <list name=\"test-properties\">\n      <item>ATTACHED_FILES</item>\n      <item>ATTACHED_FILES_ON_FAIL</item>\n      <item>COST</item>\n      <item>DEPENDS</item>\n      <item>DISABLED</item>\n      <item>ENVIRONMENT</item>\n      <item>FAIL_REGULAR_EXPRESSION</item>\n      <item>FIXTURES_CLEANUP</item>\n      <item>FIXTURES_REQUIRED</item>\n      <item>FIXTURES_SETUP</item>\n      <item>LABELS</item>\n      <item>MEASUREMENT</item>\n      <item>PASS_REGULAR_EXPRESSION</item>\n      <item>PROCESSORS</item>\n      <item>PROCESSOR_AFFINITY</item>\n      <item>REQUIRED_FILES</item>\n      <item>RESOURCE_LOCK</item>\n      <item>RUN_SERIAL</item>\n      <item>SKIP_RETURN_CODE</item>\n      <item>TIMEOUT</item>\n      <item>TIMEOUT_AFTER_MATCH</item>\n      <item>WILL_FAIL</item>\n      <item>WORKING_DIRECTORY</item>\n    </list>\n    <list name=\"cache-properties\">\n      <item>ADVANCED</item>\n      <item>HELPSTRING</item>\n      <item>MODIFIED</item>\n      <item>STRINGS</item>\n      <item>TYPE</item>\n      <item>VALUE</item>\n    </list>\n    <list name=\"install-properties\">\n      <item>CPACK_DESKTOP_SHORTCUTS</item>\n      <item>CPACK_NEVER_OVERWRITE</item>\n      <item>CPACK_PERMANENT</item>\n      <item>CPACK_STARTUP_SHORTCUTS</item>\n      <item>CPACK_START_MENU_SHORTCUTS</item>\n      <item>CPACK_WIX_ACL</item>\n    </list>\n\n    <list name=\"generator-expressions\">\n      <item>0</item>\n      <item>1</item>\n      <item>BOOL</item>\n      <item>AND</item>\n      <item>OR</item>\n      <item>NOT</item>\n      <item>STREQUAL</item>\n      <item>EQUAL</item>\n      <item>IN_LIST</item>\n      <item>VERSION_LESS</item>\n      <item>VERSION_GREATER</item>\n      <item>VERSION_EQUAL</item>\n      <item>VERSION_LESS_EQUAL</item>\n      <item>VERSION_GREATER_EQUAL</item>\n      <item>TARGET_EXISTS</item>\n      <item>CONFIG</item>\n      <item>PLATFORM_ID</item>\n      <item>C_COMPILER_ID</item>\n      <item>CXX_COMPILER_ID</item>\n      <item>CUDA_COMPILER_ID</item>\n      <item>Fortran_COMPILER_ID</item>\n      <item>C_COMPILER_VERSION</item>\n      <item>CXX_COMPILER_VERSION</item>\n      <item>CUDA_COMPILER_VERSION</item>\n      <item>Fortran_COMPILER_VERSION</item>\n      <item>TARGET_POLICY</item>\n      <item>COMPILE_FEATURES</item>\n      <item>COMPILE_LANG_AND_ID</item>\n      <item>COMPILE_LANGUAGE</item>\n      <item>ANGLE-R</item>\n      <item>COMMA</item>\n      <item>SEMICOLON</item>\n      <item>IF</item>\n      <item>JOIN</item>\n      <item>REMOVE_DUPLICATES</item>\n      <item>FILTER</item>\n      <item>LOWER_CASE</item>\n      <item>UPPER_CASE</item>\n      <item>GENEX_EVAL</item>\n      <item>TARGET_GENEX_EVAL</item>\n      <item>TARGET_NAME_IF_EXISTS</item>\n      <item>TARGET_FILE</item>\n      <item>TARGET_FILE_BASE_NAME</item>\n      <item>TARGET_FILE_PREFIX</item>\n      <item>TARGET_FILE_SUFFIX</item>\n      <item>TARGET_FILE_NAME</item>\n      <item>TARGET_FILE_DIR</item>\n      <item>TARGET_LINKER_FILE</item>\n      <item>TARGET_LINKER_FILE_BASE_NAME</item>\n      <item>TARGET_LINKER_FILE_PREFIX</item>\n      <item>TARGET_LINKER_FILE_SUFFIX</item>\n      <item>TARGET_LINKER_FILE_NAME</item>\n      <item>TARGET_LINKER_FILE_DIR</item>\n      <item>TARGET_SONAME_FILE</item>\n      <item>TARGET_SONAME_FILE</item>\n      <item>TARGET_SONAME_FILE_NAME</item>\n      <item>TARGET_SONAME_FILE_DIR</item>\n      <item>TARGET_PDB_FILE</item>\n      <item>TARGET_PDB_FILE_BASE_NAME</item>\n      <item>TARGET_PDB_FILE_NAME</item>\n      <item>TARGET_PDB_FILE_DIR</item>\n      <item>TARGET_BUNDLE_DIR</item>\n      <item>TARGET_BUNDLE_CONTENT_DIR</item>\n      <item>TARGET_PROPERTY</item>\n      <item>INSTALL_PREFIX</item>\n      <item>TARGET_NAME</item>\n      <item>LINK_ONLY</item>\n      <item>INSTALL_INTERFACE</item>\n      <item>BUILD_INTERFACE</item>\n      <item>MAKE_C_IDENTIFIER</item>\n      <item>TARGET_OBJECTS</item>\n      <item>SHELL_PATH</item>\n    </list>\n\n    <contexts>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\">\n        <DetectSpaces/>\n        <WordDetect String=\"break\" insensitive=\"true\" attribute=\"Command\" context=\"break_ctx\" />\n        <WordDetect String=\"cmake_host_system_information\" insensitive=\"true\" attribute=\"Command\" context=\"cmake_host_system_information_ctx\" />\n        <WordDetect String=\"cmake_minimum_required\" insensitive=\"true\" attribute=\"Command\" context=\"cmake_minimum_required_ctx\" />\n        <WordDetect String=\"cmake_parse_arguments\" insensitive=\"true\" attribute=\"Command\" context=\"cmake_parse_arguments_ctx\" />\n        <WordDetect String=\"cmake_policy\" insensitive=\"true\" attribute=\"Command\" context=\"cmake_policy_ctx\" />\n        <WordDetect String=\"configure_file\" insensitive=\"true\" attribute=\"Command\" context=\"configure_file_ctx\" />\n        <WordDetect String=\"continue\" insensitive=\"true\" attribute=\"Command\" context=\"continue_ctx\" />\n        <WordDetect String=\"elseif\" insensitive=\"true\" attribute=\"Command\" context=\"elseif_ctx\" />\n        <WordDetect String=\"else\" insensitive=\"true\" attribute=\"Command\" context=\"else_ctx\" />\n        <WordDetect String=\"endforeach\" insensitive=\"true\" attribute=\"Command\" context=\"endforeach_ctx\" />\n        <WordDetect String=\"endfunction\" insensitive=\"true\" attribute=\"Command\" context=\"endfunction_ctx\" />\n        <WordDetect String=\"endif\" insensitive=\"true\" attribute=\"Command\" context=\"endif_ctx\" />\n        <WordDetect String=\"endmacro\" insensitive=\"true\" attribute=\"Command\" context=\"endmacro_ctx\" />\n        <WordDetect String=\"endwhile\" insensitive=\"true\" attribute=\"Command\" context=\"endwhile_ctx\" />\n        <WordDetect String=\"execute_process\" insensitive=\"true\" attribute=\"Command\" context=\"execute_process_ctx\" />\n        <WordDetect String=\"file\" insensitive=\"true\" attribute=\"Command\" context=\"file_ctx\" />\n        <WordDetect String=\"find_file\" insensitive=\"true\" attribute=\"Command\" context=\"find_file_ctx\" />\n        <WordDetect String=\"find_library\" insensitive=\"true\" attribute=\"Command\" context=\"find_library_ctx\" />\n        <WordDetect String=\"find_package\" insensitive=\"true\" attribute=\"Command\" context=\"find_package_ctx\" />\n        <WordDetect String=\"find_path\" insensitive=\"true\" attribute=\"Command\" context=\"find_path_ctx\" />\n        <WordDetect String=\"find_program\" insensitive=\"true\" attribute=\"Command\" context=\"find_program_ctx\" />\n        <WordDetect String=\"foreach\" insensitive=\"true\" attribute=\"Command\" context=\"foreach_ctx\" />\n        <WordDetect String=\"function\" insensitive=\"true\" attribute=\"Command\" context=\"function_ctx\" />\n        <WordDetect String=\"get_cmake_property\" insensitive=\"true\" attribute=\"Command\" context=\"get_cmake_property_ctx\" />\n        <WordDetect String=\"get_directory_property\" insensitive=\"true\" attribute=\"Command\" context=\"get_directory_property_ctx\" />\n        <WordDetect String=\"get_filename_component\" insensitive=\"true\" attribute=\"Command\" context=\"get_filename_component_ctx\" />\n        <WordDetect String=\"get_property\" insensitive=\"true\" attribute=\"Command\" context=\"get_property_ctx\" />\n        <WordDetect String=\"if\" insensitive=\"true\" attribute=\"Command\" context=\"if_ctx\" />\n        <WordDetect String=\"include\" insensitive=\"true\" attribute=\"Command\" context=\"include_ctx\" />\n        <WordDetect String=\"include_guard\" insensitive=\"true\" attribute=\"Command\" context=\"include_guard_ctx\" />\n        <WordDetect String=\"list\" insensitive=\"true\" attribute=\"Command\" context=\"list_ctx\" />\n        <WordDetect String=\"macro\" insensitive=\"true\" attribute=\"Command\" context=\"macro_ctx\" />\n        <WordDetect String=\"mark_as_advanced\" insensitive=\"true\" attribute=\"Command\" context=\"mark_as_advanced_ctx\" />\n        <WordDetect String=\"math\" insensitive=\"true\" attribute=\"Command\" context=\"math_ctx\" />\n        <WordDetect String=\"message\" insensitive=\"true\" attribute=\"Command\" context=\"message_ctx\" />\n        <WordDetect String=\"option\" insensitive=\"true\" attribute=\"Command\" context=\"option_ctx\" />\n        <WordDetect String=\"return\" insensitive=\"true\" attribute=\"Command\" context=\"return_ctx\" />\n        <WordDetect String=\"separate_arguments\" insensitive=\"true\" attribute=\"Command\" context=\"separate_arguments_ctx\" />\n        <WordDetect String=\"set_directory_properties\" insensitive=\"true\" attribute=\"Command\" context=\"set_directory_properties_ctx\" />\n        <WordDetect String=\"set_property\" insensitive=\"true\" attribute=\"Command\" context=\"set_property_ctx\" />\n        <WordDetect String=\"set\" insensitive=\"true\" attribute=\"Command\" context=\"set_ctx\" />\n        <WordDetect String=\"site_name\" insensitive=\"true\" attribute=\"Command\" context=\"site_name_ctx\" />\n        <WordDetect String=\"string\" insensitive=\"true\" attribute=\"Command\" context=\"string_ctx\" />\n        <WordDetect String=\"unset\" insensitive=\"true\" attribute=\"Command\" context=\"unset_ctx\" />\n        <WordDetect String=\"variable_watch\" insensitive=\"true\" attribute=\"Command\" context=\"variable_watch_ctx\" />\n        <WordDetect String=\"while\" insensitive=\"true\" attribute=\"Command\" context=\"while_ctx\" />\n        <WordDetect String=\"add_compile_definitions\" insensitive=\"true\" attribute=\"Command\" context=\"add_compile_definitions_ctx\" />\n        <WordDetect String=\"add_compile_options\" insensitive=\"true\" attribute=\"Command\" context=\"add_compile_options_ctx\" />\n        <WordDetect String=\"add_custom_command\" insensitive=\"true\" attribute=\"Command\" context=\"add_custom_command_ctx\" />\n        <WordDetect String=\"add_custom_target\" insensitive=\"true\" attribute=\"Command\" context=\"add_custom_target_ctx\" />\n        <WordDetect String=\"add_definitions\" insensitive=\"true\" attribute=\"Command\" context=\"add_definitions_ctx\" />\n        <WordDetect String=\"add_dependencies\" insensitive=\"true\" attribute=\"Command\" context=\"add_dependencies_ctx\" />\n        <WordDetect String=\"add_executable\" insensitive=\"true\" attribute=\"Command\" context=\"add_executable_ctx\" />\n        <WordDetect String=\"add_library\" insensitive=\"true\" attribute=\"Command\" context=\"add_library_ctx\" />\n        <WordDetect String=\"add_link_options\" insensitive=\"true\" attribute=\"Command\" context=\"add_link_options_ctx\" />\n        <WordDetect String=\"add_subdirectory\" insensitive=\"true\" attribute=\"Command\" context=\"add_subdirectory_ctx\" />\n        <WordDetect String=\"add_test\" insensitive=\"true\" attribute=\"Command\" context=\"add_test_ctx\" />\n        <WordDetect String=\"aux_source_directory\" insensitive=\"true\" attribute=\"Command\" context=\"aux_source_directory_ctx\" />\n        <WordDetect String=\"build_command\" insensitive=\"true\" attribute=\"Command\" context=\"build_command_ctx\" />\n        <WordDetect String=\"create_test_sourcelist\" insensitive=\"true\" attribute=\"Command\" context=\"create_test_sourcelist_ctx\" />\n        <WordDetect String=\"define_property\" insensitive=\"true\" attribute=\"Command\" context=\"define_property_ctx\" />\n        <WordDetect String=\"enable_language\" insensitive=\"true\" attribute=\"Command\" context=\"enable_language_ctx\" />\n        <WordDetect String=\"enable_testing\" insensitive=\"true\" attribute=\"Command\" context=\"enable_testing_ctx\" />\n        <WordDetect String=\"export\" insensitive=\"true\" attribute=\"Command\" context=\"export_ctx\" />\n        <WordDetect String=\"fltk_wrap_ui\" insensitive=\"true\" attribute=\"Command\" context=\"fltk_wrap_ui_ctx\" />\n        <WordDetect String=\"get_source_file_property\" insensitive=\"true\" attribute=\"Command\" context=\"get_source_file_property_ctx\" />\n        <WordDetect String=\"get_target_property\" insensitive=\"true\" attribute=\"Command\" context=\"get_target_property_ctx\" />\n        <WordDetect String=\"get_test_property\" insensitive=\"true\" attribute=\"Command\" context=\"get_test_property_ctx\" />\n        <WordDetect String=\"include_directories\" insensitive=\"true\" attribute=\"Command\" context=\"include_directories_ctx\" />\n        <WordDetect String=\"include_external_msproject\" insensitive=\"true\" attribute=\"Command\" context=\"include_external_msproject_ctx\" />\n        <WordDetect String=\"include_regular_expression\" insensitive=\"true\" attribute=\"Command\" context=\"include_regular_expression_ctx\" />\n        <WordDetect String=\"install\" insensitive=\"true\" attribute=\"Command\" context=\"install_ctx\" />\n        <WordDetect String=\"link_directories\" insensitive=\"true\" attribute=\"Command\" context=\"link_directories_ctx\" />\n        <WordDetect String=\"link_libraries\" insensitive=\"true\" attribute=\"Command\" context=\"link_libraries_ctx\" />\n        <WordDetect String=\"load_cache\" insensitive=\"true\" attribute=\"Command\" context=\"load_cache_ctx\" />\n        <WordDetect String=\"project\" insensitive=\"true\" attribute=\"Command\" context=\"project_ctx\" />\n        <WordDetect String=\"qt_wrap_cpp\" insensitive=\"true\" attribute=\"Command\" context=\"qt_wrap_cpp_ctx\" />\n        <WordDetect String=\"qt_wrap_ui\" insensitive=\"true\" attribute=\"Command\" context=\"qt_wrap_ui_ctx\" />\n        <WordDetect String=\"remove_definitions\" insensitive=\"true\" attribute=\"Command\" context=\"remove_definitions_ctx\" />\n        <WordDetect String=\"set_source_files_properties\" insensitive=\"true\" attribute=\"Command\" context=\"set_source_files_properties_ctx\" />\n        <WordDetect String=\"set_target_properties\" insensitive=\"true\" attribute=\"Command\" context=\"set_target_properties_ctx\" />\n        <WordDetect String=\"set_tests_properties\" insensitive=\"true\" attribute=\"Command\" context=\"set_tests_properties_ctx\" />\n        <WordDetect String=\"source_group\" insensitive=\"true\" attribute=\"Command\" context=\"source_group_ctx\" />\n        <WordDetect String=\"target_compile_definitions\" insensitive=\"true\" attribute=\"Command\" context=\"target_compile_definitions_ctx\" />\n        <WordDetect String=\"target_compile_features\" insensitive=\"true\" attribute=\"Command\" context=\"target_compile_features_ctx\" />\n        <WordDetect String=\"target_compile_options\" insensitive=\"true\" attribute=\"Command\" context=\"target_compile_options_ctx\" />\n        <WordDetect String=\"target_include_directories\" insensitive=\"true\" attribute=\"Command\" context=\"target_include_directories_ctx\" />\n        <WordDetect String=\"target_link_directories\" insensitive=\"true\" attribute=\"Command\" context=\"target_link_directories_ctx\" />\n        <WordDetect String=\"target_link_libraries\" insensitive=\"true\" attribute=\"Command\" context=\"target_link_libraries_ctx\" />\n        <WordDetect String=\"target_link_options\" insensitive=\"true\" attribute=\"Command\" context=\"target_link_options_ctx\" />\n        <WordDetect String=\"target_sources\" insensitive=\"true\" attribute=\"Command\" context=\"target_sources_ctx\" />\n        <WordDetect String=\"try_compile\" insensitive=\"true\" attribute=\"Command\" context=\"try_compile_ctx\" />\n        <WordDetect String=\"try_run\" insensitive=\"true\" attribute=\"Command\" context=\"try_run_ctx\" />\n        <WordDetect String=\"ctest_build\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_build_ctx\" />\n        <WordDetect String=\"ctest_configure\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_configure_ctx\" />\n        <WordDetect String=\"ctest_coverage\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_coverage_ctx\" />\n        <WordDetect String=\"ctest_empty_binary_directory\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_empty_binary_directory_ctx\" />\n        <WordDetect String=\"ctest_memcheck\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_memcheck_ctx\" />\n        <WordDetect String=\"ctest_read_custom_files\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_read_custom_files_ctx\" />\n        <WordDetect String=\"ctest_run_script\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_run_script_ctx\" />\n        <WordDetect String=\"ctest_sleep\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_sleep_ctx\" />\n        <WordDetect String=\"ctest_start\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_start_ctx\" />\n        <WordDetect String=\"ctest_submit\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_submit_ctx\" />\n        <WordDetect String=\"ctest_test\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_test_ctx\" />\n        <WordDetect String=\"ctest_update\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_update_ctx\" />\n        <WordDetect String=\"ctest_upload\" insensitive=\"true\" attribute=\"Command\" context=\"ctest_upload_ctx\" />\n        <RegExpr attribute=\"Region Marker\" context=\"RST Documentation\" String=\"^#\\[(=*)\\[\\.rst:\" column=\"0\" />\n        <RegExpr attribute=\"Comment\" context=\"Bracketed Comment\" String=\"#\\[(=*)\\[\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" />\n        <DetectIdentifier attribute=\"User Function/Macro\" context=\"User Function\" />\n        <RegExpr attribute=\"@Variable Substitution\" context=\"@VarSubst\" String=\"@&id_re;@\" lookAhead=\"true\" />\n        <!-- Include keywords matching for language autocompleter work -->\n        <keyword attribute=\"Command\" context=\"#stay\" String=\"commands\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"break_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"break_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"break_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_host_system_information_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"cmake_host_system_information_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_host_system_information_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"cmake_host_system_information_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"cmake_host_system_information_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_minimum_required_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"cmake_minimum_required_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_minimum_required_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"cmake_minimum_required_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_parse_arguments_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"cmake_parse_arguments_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_parse_arguments_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"cmake_parse_arguments_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_policy_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"cmake_policy_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake_policy_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"cmake_policy_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"cmake_policy_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n        <!-- NOTE Handle CMP<NNN> as a special arg of `cmake_policy` command -->\n        <RegExpr attribute=\"Special Args\" context=\"#stay\" String=\"\\bCMP[0-9]+\\b\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"configure_file_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"configure_file_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"configure_file_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"configure_file_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"configure_file_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"continue_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"continue_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"continue_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"elseif_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"elseif_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"elseif_ctx_op\">\n        <DetectChar attribute=\"Normal Text\" context=\"elseif_ctx_op_nested\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"elseif_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"elseif_ctx_op_nested\">\n        <IncludeRules context=\"EndCmdPop\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"elseif_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"else_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"else_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"else_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endforeach_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"endforeach_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endforeach_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endfunction_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"endfunction_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endfunction_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endif_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"endif_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endif_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endmacro_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"endmacro_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endmacro_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endwhile_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"endwhile_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"endwhile_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"execute_process_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"execute_process_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"execute_process_ctx_op\">\n        <DetectChar attribute=\"Normal Text\" context=\"execute_process_ctx_op_nested\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"execute_process_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"execute_process_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"execute_process_ctx_op_nested\">\n        <IncludeRules context=\"EndCmdPop\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"execute_process_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"execute_process_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"file_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"file_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"file_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"file_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"file_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_file_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"find_file_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_file_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"find_file_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_library_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"find_library_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_library_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"find_library_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_package_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"find_package_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_package_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"find_package_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_path_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"find_path_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_path_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"find_path_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_program_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"find_program_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_program_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"find_program_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"foreach_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"foreach_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"foreach_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"foreach_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"function_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"function_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"function_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_cmake_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"get_cmake_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_cmake_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"global-properties\" />\n        <IncludeRules context=\"Detect More global-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_directory_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"get_directory_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_directory_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"get_directory_property_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"directory-properties\" />\n        <IncludeRules context=\"Detect More directory-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_filename_component_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"get_filename_component_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_filename_component_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"get_filename_component_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"get_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"get_property_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"cache-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"directory-properties\" />\n        <IncludeRules context=\"Detect More directory-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"global-properties\" />\n        <IncludeRules context=\"Detect More global-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"install-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"source-properties\" />\n        <IncludeRules context=\"Detect More source-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"target-properties\" />\n        <IncludeRules context=\"Detect More target-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"test-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"if_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"if_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"if_ctx_op\">\n        <DetectChar attribute=\"Normal Text\" context=\"if_ctx_op_nested\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"if_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"if_ctx_op_nested\">\n        <IncludeRules context=\"EndCmdPop\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"if_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"include_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"include_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_guard_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"include_guard_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_guard_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"include_guard_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"list_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"list_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"list_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"list_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"list_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"macro_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"macro_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"macro_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"mark_as_advanced_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"mark_as_advanced_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"mark_as_advanced_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"mark_as_advanced_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"math_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"math_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"math_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"math_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"math_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"message_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"message_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"message_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"message_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"option_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"option_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"option_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"return_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"return_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"return_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"separate_arguments_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"separate_arguments_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"separate_arguments_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"separate_arguments_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_directory_properties_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"set_directory_properties_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_directory_properties_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"set_directory_properties_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"cache-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"directory-properties\" />\n        <IncludeRules context=\"Detect More directory-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"global-properties\" />\n        <IncludeRules context=\"Detect More global-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"install-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"source-properties\" />\n        <IncludeRules context=\"Detect More source-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"target-properties\" />\n        <IncludeRules context=\"Detect More target-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"test-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"set_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"set_property_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"cache-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"directory-properties\" />\n        <IncludeRules context=\"Detect More directory-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"global-properties\" />\n        <IncludeRules context=\"Detect More global-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"install-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"source-properties\" />\n        <IncludeRules context=\"Detect More source-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"target-properties\" />\n        <IncludeRules context=\"Detect More target-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"test-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"set_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"set_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"set_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"site_name_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"site_name_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"site_name_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"string_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"string_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"string_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"string_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"unset_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"unset_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"unset_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"unset_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"variable_watch_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"variable_watch_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"variable_watch_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"while_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"while_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"while_ctx_op\">\n        <DetectChar attribute=\"Normal Text\" context=\"while_ctx_op_nested\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"while_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"while_ctx_op_nested\">\n        <IncludeRules context=\"EndCmdPop\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"while_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_compile_definitions_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_compile_definitions_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_compile_definitions_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_compile_options_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_compile_options_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_compile_options_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_custom_command_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_custom_command_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_custom_command_ctx_op\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_custom_command_ctx_op_nested\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_custom_command_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_custom_command_ctx_op_nested\">\n        <IncludeRules context=\"EndCmdPop\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_custom_command_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_custom_target_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_custom_target_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_custom_target_ctx_op\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_custom_target_ctx_op_nested\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_custom_target_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_custom_target_ctx_op_nested\">\n        <IncludeRules context=\"EndCmdPop\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_custom_target_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_definitions_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_definitions_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_definitions_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_dependencies_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_dependencies_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_dependencies_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_executable_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_executable_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_executable_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_executable_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_library_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_library_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_library_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_library_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_link_options_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_link_options_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_link_options_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_subdirectory_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_subdirectory_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_subdirectory_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_subdirectory_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_test_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_test_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_test_ctx_op\">\n        <DetectChar attribute=\"Normal Text\" context=\"add_test_ctx_op_nested\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_test_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"add_test_ctx_op_nested\">\n        <IncludeRules context=\"EndCmdPop\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"add_test_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"aux_source_directory_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"aux_source_directory_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"aux_source_directory_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"build_command_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"build_command_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"build_command_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"build_command_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"create_test_sourcelist_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"create_test_sourcelist_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"create_test_sourcelist_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"create_test_sourcelist_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"define_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"define_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"define_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"define_property_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"cache-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"directory-properties\" />\n        <IncludeRules context=\"Detect More directory-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"global-properties\" />\n        <IncludeRules context=\"Detect More global-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"install-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"source-properties\" />\n        <IncludeRules context=\"Detect More source-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"target-properties\" />\n        <IncludeRules context=\"Detect More target-properties\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"test-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"enable_language_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"enable_language_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"enable_language_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"enable_language_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"enable_language_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"enable_testing_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"enable_testing_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"enable_testing_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"export_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"export_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"export_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"export_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"fltk_wrap_ui_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"fltk_wrap_ui_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"fltk_wrap_ui_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_source_file_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"get_source_file_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_source_file_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"source-properties\" />\n        <IncludeRules context=\"Detect More source-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_target_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"get_target_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_target_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"target-properties\" />\n        <IncludeRules context=\"Detect More target-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_test_property_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"get_test_property_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"get_test_property_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"test-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_directories_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"include_directories_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_directories_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"include_directories_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_external_msproject_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"include_external_msproject_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_external_msproject_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"include_external_msproject_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_regular_expression_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"include_regular_expression_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"include_regular_expression_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"install_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"install_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"install_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"install_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"install_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"link_directories_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"link_directories_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"link_directories_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"link_directories_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"link_libraries_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"link_libraries_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"link_libraries_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"link_libraries_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"load_cache_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"load_cache_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"load_cache_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"load_cache_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"project_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"project_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"project_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"project_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"project_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"qt_wrap_cpp_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"qt_wrap_cpp_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"qt_wrap_cpp_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"qt_wrap_ui_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"qt_wrap_ui_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"qt_wrap_ui_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"remove_definitions_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"remove_definitions_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"remove_definitions_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_source_files_properties_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"set_source_files_properties_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_source_files_properties_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"set_source_files_properties_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"source-properties\" />\n        <IncludeRules context=\"Detect More source-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_target_properties_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"set_target_properties_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_target_properties_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"set_target_properties_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"target-properties\" />\n        <IncludeRules context=\"Detect More target-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_tests_properties_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"set_tests_properties_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"set_tests_properties_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"set_tests_properties_nargs\" />\n        <keyword attribute=\"Property\" context=\"#stay\" String=\"test-properties\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"source_group_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"source_group_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"source_group_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"source_group_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_compile_definitions_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_compile_definitions_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_compile_definitions_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_compile_definitions_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_compile_features_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_compile_features_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_compile_features_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_compile_features_nargs\" />\n        <keyword attribute=\"Special Args\" context=\"#stay\" String=\"target_compile_features_sargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_compile_options_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_compile_options_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_compile_options_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_compile_options_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_include_directories_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_include_directories_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_include_directories_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_include_directories_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_link_directories_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_link_directories_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_link_directories_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_link_directories_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_link_libraries_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_link_libraries_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_link_libraries_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_link_libraries_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_link_options_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_link_options_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_link_options_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_link_options_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_sources_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"target_sources_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"target_sources_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"target_sources_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"try_compile_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"try_compile_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"try_compile_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"try_compile_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"try_run_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"try_run_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"try_run_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"try_run_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_build_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_build_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_build_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_build_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_configure_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_configure_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_configure_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_configure_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_coverage_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_coverage_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_coverage_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_coverage_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_empty_binary_directory_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_empty_binary_directory_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_empty_binary_directory_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_memcheck_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_memcheck_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_memcheck_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_memcheck_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_read_custom_files_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_read_custom_files_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_read_custom_files_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_run_script_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_run_script_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_run_script_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_run_script_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_sleep_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_sleep_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_sleep_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_start_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_start_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_start_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_start_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_submit_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_submit_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_submit_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_submit_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_test_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_test_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_test_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_test_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_update_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_update_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_update_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_update_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_upload_ctx\">\n        <DetectChar attribute=\"Normal Text\" context=\"ctest_upload_ctx_op\" char=\"(\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctest_upload_ctx_op\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <keyword attribute=\"Named Args\" context=\"#stay\" String=\"ctest_upload_nargs\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect More global-properties\">\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bFeatureSummary_&id_re;_DESCRIPTION\\b\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect More directory-properties\">\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bINTERPROCEDURAL_OPTIMIZATION_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bVS_GLOBAL_SECTION_POST_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bVS_GLOBAL_SECTION_PRE_&id_re;\\b\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect More target-properties\">\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bARCHIVE_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bARCHIVE_OUTPUT_NAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bCOMPILE_PDB_NAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bCOMPILE_PDB_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_OUTPUT_NAME\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_POSTFIX\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bEXCLUDE_FROM_DEFAULT_BUILD_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_IMPLIB_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_LIBNAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_LINK_DEPENDENT_LIBRARIES_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_LINK_INTERFACE_LANGUAGES_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_LINK_INTERFACE_LIBRARIES_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_LINK_INTERFACE_MULTIPLICITY_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_LOCATION_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_NO_SONAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_OBJECTS_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bIMPORTED_SONAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bINTERPROCEDURAL_OPTIMIZATION_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_CLANG_TIDY\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_COMPILER_LAUNCHER\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_CPPCHECK\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_CPPLINT\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_INCLUDE_WHAT_YOU_USE\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\b&id_re;_VISIBILITY_PRESET\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bLIBRARY_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bLIBRARY_OUTPUT_NAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bLINK_FLAGS_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bLINK_INTERFACE_LIBRARIES_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bLINK_INTERFACE_MULTIPLICITY_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bLOCATION_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bMAP_IMPORTED_CONFIG_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bOSX_ARCHITECTURES_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bOUTPUT_NAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bPDB_NAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bPDB_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bRUNTIME_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bRUNTIME_OUTPUT_NAME_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bSTATIC_LIBRARY_FLAGS_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bVS_DOTNET_REFERENCE_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bVS_DOTNET_REFERENCEPROP_&id_re;_TAG_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bVS_GLOBAL_&id_re;\\b\" />\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bXCODE_ATTRIBUTE_&id_re;\\b\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect More source-properties\">\n        <RegExpr attribute=\"Property\" context=\"#stay\" String=\"\\bVS_CSHARP_&id_re;\\b\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"EndCmdPop\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"EndCmdPop2\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\")\" />\n      </context>\n\n      <context attribute=\"User Function/Macro\" lineEndContext=\"#stay\" name=\"User Function\">\n        <DetectChar attribute=\"Normal Text\" context=\"User Function Opened\" char=\"(\" />\n        <IncludeRules context=\"EndCmdPop2\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"User Function Opened\">\n        <IncludeRules context=\"EndCmdPop2\" />\n        <IncludeRules context=\"User Function Args\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect Builtin Variables\">\n        <keyword attribute=\"Builtin Variable\" context=\"#stay\" String=\"variables\" insensitive=\"false\" />\n        <IncludeRules context=\"Detect More Builtin Variables\" />\n        <RegExpr attribute=\"Internal Name\" context=\"#stay\" String=\"\\b_&id_re;\\b\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect More Builtin Variables\">\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_BINARY_DIR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_SOURCE_DIR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_VERSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_VERSION_MAJOR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_VERSION_MINOR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_VERSION_PATCH\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_VERSION_TWEAK\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_ROOT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;__TRYRUN_OUTPUT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_CONSIDERED_CONFIGS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_CONSIDERED_VERSIONS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_COMPONENTS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_QUIETLY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_REQUIRED\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_REQUIRED_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_VERSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_VERSION_COUNT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_VERSION_EXACT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_VERSION_MAJOR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_VERSION_MINOR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_VERSION_PATCH\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FIND_VERSION_TWEAK\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_FOUND\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_INCLUDE_DIRS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_LIBRARIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_LIBRARY_DIRS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_VERSION_COUNT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\b&id_re;_VERSION_STRING\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_POSTFIX\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_ANDROID_TOOLCHAIN_MACHINE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_ANDROID_TOOLCHAIN_PREFIX\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_ANDROID_TOOLCHAIN_SUFFIX\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_ARCHIVE_APPEND\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_ARCHIVE_CREATE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_ARCHIVE_FINISH\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_CLANG_TIDY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_ABI\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_AR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_EXTERNAL_TOOLCHAIN\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_ID\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_LAUNCHER\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_LOADED\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_RANLIB\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_TARGET\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILER_VERSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_COMPILE_OBJECT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_CPPCHECK\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_CPPLINT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_CREATE_SHARED_LIBRARY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_CREATE_SHARED_MODULE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_CREATE_STATIC_LIBRARY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_DEBUG\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_DEBUG_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_MINSIZEREL\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_MINSIZEREL_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_RELEASE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_RELEASE_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_RELWITHDEBINFO\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_FLAGS_RELWITHDEBINFO_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_GHS_KERNEL_FLAGS_DEBUG\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_GHS_KERNEL_FLAGS_MINSIZEREL\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_GHS_KERNEL_FLAGS_RELEASE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_GHS_KERNEL_FLAGS_RELWITHDEBINFO\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_IGNORE_EXTENSIONS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_IMPLICIT_INCLUDE_DIRECTORIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_IMPLICIT_LINK_DIRECTORIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_IMPLICIT_LINK_LIBRARIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_INCLUDE_WHAT_YOU_USE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_LIBRARY_ARCHITECTURE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_LINKER_PREFERENCE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_LINKER_PREFERENCE_PROPAGATES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_LINKER_WRAPPER_FLAG\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_LINKER_WRAPPER_FLAG_SEP\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_LINK_EXECUTABLE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_OUTPUT_EXTENSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_PLATFORM_ID\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_SIMULATE_ID\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_SIMULATE_VERSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_SIZEOF_DATA_PTR\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_SOURCE_FILE_EXTENSIONS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_STANDARD_INCLUDE_DIRECTORIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_STANDARD_LIBRARIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_&id_re;_VISIBILITY_PRESET\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_ARCHIVE_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_ARGV[0-9]+\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_DISABLE_FIND_PACKAGE_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_EXE_LINKER_FLAGS_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_EXE_LINKER_FLAGS_&id_re;_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_INTERPROCEDURAL_OPTIMIZATION_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_LIBRARY_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_MAP_IMPORTED_CONFIG_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_MATCH_[0-9]+\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_MODULE_LINKER_FLAGS_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_MODULE_LINKER_FLAGS_&id_re;_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_PDB_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_POLICY_DEFAULT_CMP&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_POLICY_WARNING_CMP&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_PROJECT_&id_re;_INCLUDE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_RUNTIME_OUTPUT_DIRECTORY_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_SHARED_LINKER_FLAGS_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_SHARED_LINKER_FLAGS_&id_re;_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_STATIC_LINKER_FLAGS_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_STATIC_LINKER_FLAGS_&id_re;_INIT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_USER_MAKE_RULES_OVERRIDE_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCMAKE_XCODE_ATTRIBUTE_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_&id_re;_COMPONENT_INSTALL\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_ARCHIVE_&id_re;_FILE_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_BINARY_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_DEPENDS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_DESCRIPTION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_DISABLED\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_DISPLAY_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_GROUP\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_HIDDEN\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_REQUIRED\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_COMPONENT_&id_re;_DESCRIPTION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_FILE_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_ARCHITECTURE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_BREAKS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_CONFLICTS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_CONTROL_EXTRA\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_CONTROL_STRICT_PERMISSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_DEPENDS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_ENHANCES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_PREDEPENDS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_PRIORITY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_PROVIDES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_RECOMMENDS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_REPLACES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_SECTION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_SHLIBDEPS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_SOURCE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_PACKAGE_SUGGESTS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_DEBIAN_&id_re;_DEBUGINFO_PACKAGE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NSIS_&id_re;_INSTALL_DIRECTORY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_AUTHORS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_COPYRIGHT\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_DEPENDENCIES_&id_re;_VERSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_DESCRIPTION_SUMMARY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_HOMEPAGE_URL\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_ICONURL\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_LICENSEURL\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_OWNERS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_RELEASE_NOTES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_TAGS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_TITLE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_&id_re;_PACKAGE_VERSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_NUGET_PACKAGE_DEPENDENCIES_&id_re;_VERSION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_DEFAULT_DIR_PERMISSIONS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_DEFAULT_FILE_PERMISSIONS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_DEFAULT_GROUP\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_DEFAULT_USER\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_BUILD_SOURCE_DIRS_PREFIX\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_DEBUGINFO_FILE_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_DEBUGINFO_PACKAGE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_FILE_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_ARCHITECTURE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_AUTOPROV\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_AUTOREQ\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_AUTOREQPROV\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_CONFLICTS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_DESCRIPTION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_GROUP\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_NAME\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_OBSOLETES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_PREFIX\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_PROVIDES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_REQUIRES\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_REQUIRES_POST\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_REQUIRES_POSTUN\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_REQUIRES_PRE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_REQUIRES_PREUN\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_SUGGESTS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_SUMMARY\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_PACKAGE_URL\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_USER_FILELIST\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_&id_re;_USER_BINARY_SPECFILE\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_RPM_NO_&id_re;_INSTALL_PREFIX_RELOCATION\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_WIX_&id_re;_EXTENSIONS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_WIX_&id_re;_EXTRA_FLAGS\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bCPACK_WIX_PROPERTY_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bDOXYGEN_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bExternalData_CUSTOM_SCRIPT_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bExternalData_URL_ALGO_&id_re;_&id_re;\\b\" />\n        <RegExpr attribute=\"Builtin Variable\" context=\"#stay\" String=\"\\bSWIG_MODULE_&id_re;_EXTRA_DEPS\\b\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect Variable Substitutions\">\n        <RegExpr attribute=\"Cache Variable Substitution\" context=\"#stay\" String=\"\\$CACHE\\{\\s*[\\w-]+\\s*\\}\" />\n        <RegExpr attribute=\"Environment Variable Substitution\" context=\"EnvVarSubst\" String=\"\\$ENV\\{\\s*[\\w-]+\\s*\\}\" lookAhead=\"true\" />\n        <Detect2Chars attribute=\"Variable Substitution\" context=\"VarSubst\" char=\"$\" char1=\"{\" />\n        <RegExpr attribute=\"@Variable Substitution\" context=\"@VarSubst\" String=\"@&id_re;@\" lookAhead=\"true\" />\n      </context>\n\n      <context attribute=\"Environment Variable Substitution\" lineEndContext=\"#pop\" name=\"EnvVarSubst\">\n        <DetectIdentifier />\n        <DetectChar attribute=\"Environment Variable Substitution\" context=\"EnvVarSubstVar\" char=\"{\" />\n        <DetectChar attribute=\"Environment Variable Substitution\" context=\"#pop\" char=\"}\" />\n      </context>\n\n      <context attribute=\"Environment Variable Substitution\" lineEndContext=\"#pop\" name=\"EnvVarSubstVar\">\n        <keyword attribute=\"Standard Environment Variable\" context=\"#stay\" String=\"environment-variables\" insensitive=\"false\" />\n        <RegExpr attribute=\"Standard Environment Variable\" context=\"#stay\" String=\"\\b&id_re;_DIR\\b\" />\n        <RegExpr attribute=\"Standard Environment Variable\" context=\"#stay\" String=\"\\b&id_re;_ROOT\\b\" />\n        <RegExpr attribute=\"Standard Environment Variable\" context=\"#stay\" String=\"\\bASM&id_re;\\b\" />\n        <RegExpr attribute=\"Standard Environment Variable\" context=\"#stay\" String=\"\\bASM&id_re;FLAGS\\b\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"Environment Variable Substitution\" context=\"#pop#pop\" char=\"}\" />\n      </context>\n\n      <context attribute=\"Variable Substitution\" lineEndContext=\"#pop\" name=\"VarSubst\">\n        <IncludeRules context=\"Detect Builtin Variables\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"Variable Substitution\" context=\"#pop\" char=\"}\" />\n        <IncludeRules context=\"Detect Variable Substitutions\" />\n      </context>\n\n      <context attribute=\"@Variable Substitution\" lineEndContext=\"#pop\" name=\"@VarSubst\">\n        <DetectChar attribute=\"@Variable Substitution\" context=\"VarSubst@\" char=\"@\" />\n      </context>\n\n      <context attribute=\"@Variable Substitution\" lineEndContext=\"#pop#pop\" name=\"VarSubst@\">\n        <IncludeRules context=\"Detect Builtin Variables\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"@Variable Substitution\" context=\"#pop#pop\" char=\"@\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"User Function Args\">\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"\\\" char1=\"(\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"\\\" char1=\")\" />\n        <RegExpr attribute=\"Escapes\" context=\"#stay\" String=\"\\\\[&quot;$n\\\\]\" />\n        <DetectChar attribute=\"Strings\" context=\"String\" char=\"&quot;\" />\n        <RegExpr attribute=\"Strings\" context=\"Bracketed String\" String=\"\\[(=*)\\[\" />\n        <RegExpr attribute=\"Comment\" context=\"Bracketed Comment\" String=\"#\\[(=*)\\[\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" />\n        <IncludeRules context=\"Detect Builtin Variables\" />\n        <IncludeRules context=\"Detect Variable Substitutions\" />\n        <IncludeRules context=\"Detect Special Values\" />\n        <IncludeRules context=\"Detect Aliased Targets\" />\n        <IncludeRules context=\"Detect Generator Expressions\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect Special Values\">\n        <RegExpr attribute=\"True Special Arg\" context=\"#stay\" String=\"\\b(TRUE|ON)\\b\" />\n        <RegExpr attribute=\"False Special Arg\" context=\"#stay\" String=\"\\b(FALSE|OFF|(&id_re;-)?NOTFOUND)\\b\" />\n        <RegExpr attribute=\"Special Args\" context=\"#stay\" String=\"\\bCMP[0-9][0-9][0-9]\\b\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect Aliased Targets\">\n        <RegExpr attribute=\"Aliased Targets\" context=\"#stay\" String=\"\\b&id_re;::&id_re;(::&id_re;)*\\b\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <LineContinue attribute=\"Comment\" context=\"#pop\" />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"RST Documentation\" dynamic=\"true\">\n        <RegExpr attribute=\"Region Marker\" context=\"#pop\" String=\"^#?\\]%1\\]\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"##reStructuredText\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Bracketed Comment\" dynamic=\"true\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\".*\\]%1\\]\" dynamic=\"true\" />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <context attribute=\"Strings\" lineEndContext=\"#stay\" name=\"String\">\n        <RegExpr attribute=\"Strings\" context=\"#pop\" String=\"&quot;(?=[ );]|$)\" />\n        <RegExpr attribute=\"Escapes\" context=\"#stay\" String=\"\\\\[&quot;$nrt\\\\]\" />\n        <IncludeRules context=\"Detect Variable Substitutions\" />\n        <IncludeRules context=\"Detect Generator Expressions\" />\n      </context>\n\n      <context attribute=\"Strings\" lineEndContext=\"#stay\" name=\"Bracketed String\" dynamic=\"true\">\n        <RegExpr attribute=\"Strings\" context=\"#pop\" String=\"\\]%1\\]\" dynamic=\"true\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Detect Generator Expressions\">\n        <Detect2Chars attribute=\"Generator Expression\" context=\"Generator Expression\" char=\"$\" char1=\"&lt;\" />\n      </context>\n\n      <context attribute=\"Generator Expression\" lineEndContext=\"#stay\" name=\"Generator Expression\">\n        <IncludeRules context=\"Detect Generator Expressions\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" />\n        <DetectChar attribute=\"Generator Expression\" context=\"#pop\" char=\"&gt;\" />\n        <keyword attribute=\"Generator Expression Keyword\" context=\"#stay\" String=\"generator-expressions\" insensitive=\"false\" />\n        <IncludeRules context=\"Detect Aliased Targets\" />\n        <IncludeRules context=\"Detect Variable Substitutions\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"Command\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"User Function/Macro\"  defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n      <itemData name=\"Property\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"Aliased Targets\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Named Args\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"Special Args\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"True Special Arg\" defStyleNum=\"dsOthers\" color=\"#30a030\" selColor=\"#30a030\" spellChecking=\"false\" />\n      <itemData name=\"False Special Arg\" defStyleNum=\"dsOthers\" color=\"#e05050\" selColor=\"#e05050\" spellChecking=\"false\" />\n      <itemData name=\"Strings\" defStyleNum=\"dsString\" spellChecking=\"true\" />\n      <itemData name=\"Escapes\" defStyleNum=\"dsChar\" spellChecking=\"false\" />\n      <itemData name=\"Builtin Variable\" defStyleNum=\"dsDecVal\" color=\"#c09050\" selColor=\"#c09050\" spellChecking=\"false\" />\n      <itemData name=\"Internal Name\" defStyleNum=\"dsDecVal\" color=\"#303030\" selColor=\"#303030\" spellChecking=\"false\" />\n      <itemData name=\"Variable Substitution\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"@Variable Substitution\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Cache Variable Substitution\" defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n      <itemData name=\"Environment Variable Substitution\" defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n      <itemData name=\"Standard Environment Variable\" defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n      <itemData name=\"Generator Expression Keyword\" defStyleNum=\"dsKeyword\" color=\"#b84040\" selColor=\"#b84040\" spellChecking=\"false\" />\n      <itemData name=\"Generator Expression\" defStyleNum=\"dsOthers\" color=\"#b86050\" selColor=\"#b86050\" spellChecking=\"false\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"true\" />\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\" />\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n\n<!-- kate: indent-width 2; tab-width 2; -->\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/coffee.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"CoffeeScript\"\n          version=\"9\"\n          kateversion=\"5.0\"\n          section=\"Scripts\"\n          extensions=\"Cakefile;*.coffee;*.coco;*.cson\"\n          mimetype=\"text/x-coffeescript;application/x-coffeescript;application/vnd.coffeescript\"\n          indenter=\"python\"\n          casesensitive=\"1\"\n          author=\"Max Shawabkeh (max99x@gmail.com)\"\n          license=\"MIT\">\n  <highlighting>\n    <!-- Built-in constants. -->\n    <list name=\"value_keywords\">\n      <item>false</item>\n      <item>true</item>\n      <item>yes</item>\n      <item>no</item>\n      <item>on</item>\n      <item>off</item>\n      <item>undefined</item>\n      <item>null</item>\n      <item>NaN</item>\n      <item>Infinity</item>\n    </list>\n    <!-- Generic keywords. -->\n    <list name=\"keywords\">\n      <item>return</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>throw</item>\n      <item>for</item>\n      <item>while</item>\n      <item>until</item>\n      <item>loop</item>\n      <item>if</item>\n      <item>else</item>\n      <item>unless</item>\n      <item>switch</item>\n      <item>when</item>\n      <item>then</item>\n      <item>and</item>\n      <item>or</item>\n      <item>in</item>\n      <item>do</item>\n      <item>of</item>\n      <item>by</item>\n      <item>is</item>\n      <item>isnt</item>\n      <item>not</item>\n      <item>typeof</item>\n      <item>delete</item>\n      <item>where</item>\n      <item>super</item>\n      <item>try</item>\n      <item>catch</item>\n      <item>finally</item>\n      <item>try</item>\n      <item>catch</item>\n      <item>finally</item>\n      <item>constructor</item>\n    </list>\n    <!-- Keywords which are always followed by a class name. -->\n    <list name=\"class_keywords\">\n      <item>class</item>\n      <item>extends</item>\n      <item>new</item>\n      <item>instanceof</item>\n    </list>\n    <!-- Reserved words. -->\n    <list name=\"reserved\">\n      <item>case</item>\n      <item>default</item>\n      <item>function</item>\n      <item>var</item>\n      <item>void</item>\n      <item>with</item>\n      <item>const</item>\n      <item>let</item>\n      <item>enum</item>\n      <item>export</item>\n      <item>import</item>\n      <item>native</item>\n      <item>__hasProp</item>\n      <item>__extends</item>\n      <item>__slice</item>\n      <item>__bind</item>\n      <item>__indexOf</item>\n    </list>\n    <!-- Built-in globals provided in most contexts. -->\n    <list name=\"globals\">\n      <item>Object</item>\n      <item>Number</item>\n      <item>Boolean</item>\n      <item>Array</item>\n      <item>String</item>\n      <item>RegExp</item>\n      <item>Function</item>\n      <item>Date</item>\n      <item>Math</item>\n      <item>eval</item>\n      <item>setInterval</item>\n      <item>clearInterval</item>\n      <item>setTimeout</item>\n      <item>clearTimeout</item>\n      <item>isFinite</item>\n      <item>isNaN</item>\n      <item>parseFloat</item>\n      <item>parseInt</item>\n      <item>escape</item>\n      <item>unescape</item>\n      <item>console</item>\n      <item>encodeURI</item>\n      <item>encodeURIComponent</item>\n      <item>decodeURI</item>\n      <item>decodeURIComponent</item>\n    </list>\n    <!-- Built-in globals provided in browser context. -->\n    <list name=\"browser_globals\">\n      <item>window</item>\n      <item>document</item>\n      <item>navigator</item>\n      <item>location</item>\n      <item>history</item>\n      <item>screen</item>\n      <item>alert</item>\n      <item>prompt</item>\n    </list>\n    <!-- Built-in globals provided in Node.js context. -->\n    <list name=\"nodejs_globals\">\n      <item>process</item>\n      <item>GLOBAL</item>\n      <item>require</item>\n      <item>exports</item>\n    </list>\n    <!-- Context-sensitive highlighting rules. -->\n    <contexts>\n      <!-- Generic code. -->\n      <context name=\"Normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <!-- Numbers. -->\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <HlCOct attribute=\"Oct\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <!-- Keywords. -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Keyword\" context=\"Class\" String=\"class_keywords\"/>\n        <keyword attribute=\"Value Keywords\" context=\"#stay\" String=\"value_keywords\"/>\n        <keyword attribute=\"Reserved\" context=\"#stay\" String=\"reserved\"/>\n        <!-- Globals. -->\n        <keyword attribute=\"Globals\" context=\"#stay\" String=\"globals\"/>\n        <keyword attribute=\"Browser Globals\" context=\"#stay\" String=\"browser_globals\"/>\n        <keyword attribute=\"Node.js Globals\" context=\"#stay\" String=\"nodejs_globals\"/>\n        <!-- Member accessors. -->\n        <RegExpr attribute=\"Accessor\" context=\"#stay\" String=\"(@[_$a-zA-Z][$\\w]*|\\bthis)\\b\" insensitive=\"false\"/>\n        <!-- Function definitions. Matches an optional argument list followed by a function arrow (normal or fat). -->\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"(\\((\\'[^']*'|&quot;[^&quot;]*&quot;|[^()])*\\))?\\s*(-|=)&gt;\" insensitive=\"true\"/>\n        <!-- Generic identifiers. -->\n        <RegExpr attribute=\"Identifier\" context=\"#stay\" String=\"[_$a-z][$\\w]*\\b\" insensitive=\"true\"/>\n        <!-- Strings. -->\n        <StringDetect attribute=\"String\" context=\"Heredoc\" String=\"'''\" beginRegion=\"Heredoc\"/>\n        <StringDetect attribute=\"String\" context=\"Rich Heredoc\" String=\"&quot;&quot;&quot;\" beginRegion=\"Rich Heredoc\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"'\"/>\n        <DetectChar attribute=\"String\" context=\"Rich String\" char=\"&quot;\"/>\n        <!-- Embedded JavaScript. -->\n        <StringDetect attribute=\"Javascript\" context=\"Javascript Triple Backticks\" String=\"```\" beginRegion=\"Javascript TB\"/>\n        <DetectChar attribute=\"Javascript\" context=\"Javascript\" char=\"`\" beginRegion=\"Javascript\"/>\n        <!-- Comments. -->\n        <StringDetect attribute=\"Comment\" context=\"Multiline Comment\" String=\"###\" beginRegion=\"Comment\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <!-- Regular expressions. -->\n        <StringDetect attribute=\"Regex\" context=\"Multiline Regex\" String=\"///\" beginRegion=\"Multiline Regex\"/>\n        <RegExpr attribute=\"Regex\" context=\"#stay\" String=\"/([^/\\\\\\r\\n]|\\\\.)*/[mig]{0,3}\"/>\n        <!-- Member objects. -->\n        <DetectChar attribute=\"Symbol\" context=\"Member Object\" char=\".\"/>\n        <!-- Operators and other non-alphanumeric symbols. -->\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"():!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;{}\"/>\n      </context>\n      <!-- Multiline regular expressions. -->\n      <context name=\"Multiline Regex\" attribute=\"Regex\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <HlCStringChar attribute=\"Regex\" context=\"#stay\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <RegExpr attribute=\"Regex\" context=\"#pop\" String=\"///[mig]{0,3}\" endRegion=\"Multiline Regex\"/>\n      </context>\n      <!-- Class names. -->\n      <context name=\"Class\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Class\" context=\"#pop\" String=\"[@$:.\\w\\[\\]]+\"/>\n      </context>\n      <!-- Member objects. -->\n      <context name=\"Member Object\" attribute=\"Normal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Identifier\" context=\"#pop\" String=\"\\s*[_$a-z][$\\w]*\" insensitive=\"true\"/>\n      </context>\n      <!-- Comments. -->\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n      <context name=\"Multiline Comment\" attribute=\"Comment\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"###\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n      <!-- Single-line strings. -->\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"Escape\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <context name=\"Rich String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"Escape\"/>\n        <Detect2Chars attribute=\"Embedding\" context=\"Embedding\" char=\"#\" char1=\"{\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <!-- Multi-line strings. -->\n      <context name=\"Heredoc\" attribute=\"String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <IncludeRules context=\"Escape\"/>\n        <StringDetect attribute=\"String\" context=\"#pop\" String=\"'''\" endRegion=\"Heredoc\"/>\n      </context>\n      <context name=\"Rich Heredoc\" attribute=\"String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <IncludeRules context=\"Escape\"/>\n        <Detect2Chars attribute=\"Embedding\" context=\"Embedding\" char=\"#\" char1=\"{\"/>\n        <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\" endRegion=\"Rich Heredoc\"/>\n      </context>\n      <!-- Escaped characters. -->\n      <context name=\"Escape\" attribute=\"String\" lineEndContext=\"#stay\">\n        <!-- Hexadecimal, unicode & reserved character escape sequences. -->\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u\\{[0-9a-fA-F]+\\}|[\\\\0bfnrtv&quot;&apos;])\"/>\n        <!-- Invalid escapes. Octal escape sequences are not allowed. -->\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\\\[ux1-7]\"/>\n        <!-- Make any character literal. -->\n        <RegExpr attribute=\"Literal Character Escape\" context=\"#stay\" String=\"\\\\.\"/>\n        <LineContinue attribute=\"Escape\" context=\"#stay\"/>\n      </context>\n      <!-- Expressions embedded in strings. -->\n      <context name=\"Embedding\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Embedding\" context=\"#pop\" char=\"}\"/>\n      </context>\n\n      <!-- Embedded Javascript (one backtick). -->\n      <context name=\"Javascript\" attribute=\"Normal\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <DetectChar attribute=\"Javascript\" context=\"#pop\" char=\"`\" endRegion=\"Javascript\"/>\n        <!-- NOTE: This hides errors where a backtick is embedded in a JS string or a comment. -->\n        <IncludeRules context=\"Overwrite Javascript\"/>\n        <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n      </context>\n      <!-- Allow template strings in JavaScript embedded code (with one backtick). -->\n      <context name=\"Overwrite Javascript\" attribute=\"Javascript\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <!-- JavaScript Template. -->\n        <Detect2Chars attribute=\"JavaScript Template\" context=\"Javascript Template\" char=\"\\\" char1=\"`\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"String\\.raw(?=`)\"/>\n        <StringDetect attribute=\"JavaScript Template\" context=\"Javascript RawTemplate\" String=\"String.raw\\`\"/>\n        <!-- Contexts of javascript.xml. -->\n        <DetectChar attribute=\"JavaScript Symbol\" context=\"JavaScript Object\" char=\"{\" beginRegion=\"Brace\" />\n      </context>\n      <context name=\"JavaScript Object\" attribute=\"Normal\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <DetectChar context=\"#pop\" char=\"`\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"JavaScript Symbol\" context=\"#pop\" char=\"}\" endRegion=\"Brace\"/>\n        <IncludeRules context=\"Overwrite Javascript\"/>\n        <IncludeRules context=\"Object##JavaScript\"/>\n      </context>\n      <context name=\"Javascript Template\" attribute=\"JavaScript Template\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\\\\\\\\\`\"/>\n        <Detect2Chars attribute=\"JavaScript Template\" context=\"#pop\" char=\"\\\" char1=\"`\"/> <!-- End template. -->\n        <DetectChar context=\"#pop\" char=\"`\" lookAhead=\"true\"/>\n        <Detect2Chars attribute=\"JavaScript Substitution\" context=\"Javascript Substitution\" char=\"$\" char1=\"{\"/>\n        <IncludeRules context=\"Template##JavaScript\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"([^\\\\\\s](?=`)|\\S(?=\\s+`))\"/>\n      </context>\n      <context name=\"Javascript RawTemplate\" attribute=\"JavaScript Template\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"JavaScript Template\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <Detect2Chars attribute=\"JavaScript Template\" context=\"#pop\" char=\"\\\" char1=\"`\"/>\n        <DetectChar context=\"#pop\" char=\"`\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"([^\\\\\\s](?=`)|\\S(?=\\s+`))\"/>\n      </context>\n      <context name=\"Javascript Substitution\" attribute=\"Normal\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <DetectChar attribute=\"Javascript\" context=\"#pop\" char=\"`\" lookAhead=\"true\"/>\n        <DetectChar context=\"#pop\" attribute=\"JavaScript Substitution\" char=\"}\"/>\n        <IncludeRules context=\"Overwrite Javascript\"/>\n        <IncludeRules context=\"Substitution##JavaScript\"/>\n      </context>\n      <!-- Embedded Javascript (triple backticks). -->\n      <context name=\"Javascript Triple Backticks\" attribute=\"Normal\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <StringDetect attribute=\"Javascript\" context=\"#pop\" String=\"```\" endRegion=\"Javascript TB\"/>\n        <DetectChar attribute=\"JavaScript Symbol\" context=\"JavaScript-TB Object\" char=\"{\" beginRegion=\"Brace\"/>\n        <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n      </context>\n      <context name=\"JavaScript-TB Object\" attribute=\"Normal\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"1\">\n        <StringDetect attribute=\"Javascript\" context=\"#pop\" String=\"```\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"JavaScript Symbol\" context=\"#pop\" char=\"}\" endRegion=\"Brace\"/>\n        <DetectChar attribute=\"JavaScript Symbol\" context=\"JavaScript-TB Object\" char=\"{\" beginRegion=\"Brace\"/>\n        <IncludeRules context=\"Object##JavaScript\"/>\n      </context>\n    </contexts>\n    <!-- Style mappings. -->\n    <itemDatas>\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Identifier\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Oct\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"true\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Embedding\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Accessor\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Class\" defStyleNum=\"dsDataType\" spellChecking=\"false\" bold=\"1\"/>\n      <itemData name=\"Javascript\" defStyleNum=\"dsAlert\" spellChecking=\"false\" italic=\"1\"/>\n      <itemData name=\"Regex\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n      <itemData name=\"Reserved\" defStyleNum=\"dsAlert\" spellChecking=\"false\"/>\n      <itemData name=\"Value Keywords\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Globals\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <!-- Context-sensitive globals - not styled by default. -->\n      <itemData name=\"Browser Globals\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Node.js Globals\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Escape\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n      <itemData name=\"Literal Character Escape\" defStyleNum=\"dsChar\" spellChecking=\"false\" />\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n\n      <itemData name=\"JavaScript Symbol\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"JavaScript Template\" defStyleNum=\"dsVerbatimString\"/>\n      <itemData name=\"JavaScript Substitution\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <!-- Global settings. -->\n  <general>\n    <folding indentationsensitive=\"1\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n      <comment name=\"multiLine\" start=\"###\" end=\"###\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"1\" additionalDeliminator=\"#'`\"/>\n    <emptyLines>\n      <emptyLine regexpr=\"(?:\\s+|\\s*#.*)\"/>\n    </emptyLines>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/coldfusion.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"ColdFusion\" version=\"3\" kateversion=\"2.2\" section=\"Markup\" extensions=\"*.cfm;*.cfc;*.cfml;*.dbm\" mimetype=\"text/x-coldfusion\">\n\n\t<highlighting>\n\n\t\t<list name=\"Script Keywords\">\n\n\t\t\t<item>if</item>\n\t\t\t<item>else</item>\n\t\t\t<item>for</item>\n\t\t\t<item>in</item>\n\t\t\t<item>while</item>\n\t\t\t<item>do</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>break</item>\n\t\t\t<item>with</item>\n\t\t\t<item>try</item>\n\t\t\t<item>catch</item>\n\t\t\t<item>switch</item>\n\t\t\t<item>case</item>\n\t\t\t<item>new</item>\n\t\t\t<item>var</item>\n\t\t\t<item>function</item>\n\t\t\t<item>return</item>\n\t\t\t<item>this</item>\n\t\t\t<item>delete</item>\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\t\t\t<item>void</item>\n\t\t\t<item>throw</item>\n\t\t\t<item>typeof</item>\n\t\t\t<item>const</item>\n\t\t\t<item>default</item>\n\n\t\t</list>\n\n\t\t<list name=\"Script Objects\">\n\n\t\t\t<item>Anchor</item>\n\t\t\t<item>Applet</item>\n\t\t\t<item>Area</item>\n\t\t\t<item>Array</item>\n\t\t\t<item>Boolean</item>\n\t\t\t<item>Button</item>\n\t\t\t<item>Checkbox</item>\n\t\t\t<item>Date</item>\n\t\t\t<item>Document</item>\n\t\t\t<item>Event</item>\n\t\t\t<item>FileUpload</item>\n\t\t\t<item>Form</item>\n\t\t\t<item>Frame</item>\n\t\t\t<item>Function</item>\n\t\t\t<item>Hidden</item>\n\t\t\t<item>History</item>\n\t\t\t<item>Image</item>\n\t\t\t<item>Layer</item>\n\t\t\t<item>Linke</item>\n\t\t\t<item>Location</item>\n\t\t\t<item>Math</item>\n\t\t\t<item>Navigator</item>\n\t\t\t<item>Number</item>\n\t\t\t<item>Object</item>\n\t\t\t<item>Option</item>\n\t\t\t<item>Password</item>\n\t\t\t<item>Radio</item>\n\t\t\t<item>RegExp</item>\n\t\t\t<item>Reset</item>\n\t\t\t<item>Screen</item>\n\t\t\t<item>Select</item>\n\t\t\t<item>String</item>\n\t\t\t<item>Submit</item>\n\t\t\t<item>Text</item>\n\t\t\t<item>Textarea</item>\n\t\t\t<item>Window</item>\n\n\t\t</list>\n\n\t\t<list name=\"Script Methods\">\n\n\t\t\t<item>abs</item>\n\t\t\t<item>acos</item>\n\t\t\t<item>alert</item>\n\t\t\t<item>anchor</item>\n\t\t\t<item>apply</item>\n\t\t\t<item>asin</item>\n\t\t\t<item>atan</item>\n\t\t\t<item>atan2</item>\n\t\t\t<item>back</item>\n\t\t\t<item>blur</item>\n\t\t\t<item>call</item>\n\t\t\t<item>captureEvents</item>\n\t\t\t<item>ceil</item>\n\t\t\t<item>charAt</item>\n\t\t\t<item>charCodeAt</item>\n\t\t\t<item>clearInterval</item>\n\t\t\t<item>clearTimeout</item>\n\t\t\t<item>click</item>\n\t\t\t<item>close</item>\n\t\t\t<item>compile</item>\n\t\t\t<item>concat</item>\n\t\t\t<item>confirm</item>\n\t\t\t<item>cos</item>\n\t\t\t<item>disableExternalCapture</item>\n\t\t\t<item>enableExternalCapture</item>\n\t\t\t<item>eval</item>\n\t\t\t<item>exec</item>\n\t\t\t<item>exp</item>\n\t\t\t<item>find</item>\n\t\t\t<item>floor</item>\n\t\t\t<item>focus</item>\n\t\t\t<item>forward</item>\n\t\t\t<item>fromCharCode</item>\n\t\t\t<item>getDate</item>\n\t\t\t<item>getDay</item>\n\t\t\t<item>getFullYear</item>\n\t\t\t<item>getHours</item>\n\t\t\t<item>getMilliseconds</item>\n\t\t\t<item>getMinutes</item>\n\t\t\t<item>getMonth</item>\n\t\t\t<item>getSeconds</item>\n\t\t\t<item>getSelection</item>\n\t\t\t<item>getTime</item>\n\t\t\t<item>getTimezoneOffset</item>\n\t\t\t<item>getUTCDate</item>\n\t\t\t<item>getUTCDay</item>\n\t\t\t<item>getUTCFullYear</item>\n\t\t\t<item>getUTCHours</item>\n\t\t\t<item>getUTCMilliseconds</item>\n\t\t\t<item>getUTCMinutes</item>\n\t\t\t<item>getUTCMonth</item>\n\t\t\t<item>getUTCSeconds</item>\n\t\t\t<item>go</item>\n\t\t\t<item>handleEvent</item>\n\t\t\t<item>home</item>\n\t\t\t<item>indexOf</item>\n\t\t\t<item>javaEnabled</item>\n\t\t\t<item>join</item>\n\t\t\t<item>lastIndexOf</item>\n\t\t\t<item>link</item>\n\t\t\t<item>load</item>\n\t\t\t<item>log</item>\n\t\t\t<item>match</item>\n\t\t\t<item>max</item>\n\t\t\t<item>min</item>\n\t\t\t<item>moveAbove</item>\n\t\t\t<item>moveBelow</item>\n\t\t\t<item>moveBy</item>\n\t\t\t<item>moveTo</item>\n\t\t\t<item>moveToAbsolute</item>\n\t\t\t<item>open</item>\n\t\t\t<item>parse</item>\n\t\t\t<item>plugins.refresh</item>\n\t\t\t<item>pop</item>\n\t\t\t<item>pow</item>\n\t\t\t<item>preference</item>\n\t\t\t<item>print</item>\n\t\t\t<item>prompt</item>\n\t\t\t<item>push</item>\n\t\t\t<item>random</item>\n\t\t\t<item>releaseEvents</item>\n\t\t\t<item>reload</item>\n\t\t\t<item>replace</item>\n\t\t\t<item>reset</item>\n\t\t\t<item>resizeBy</item>\n\t\t\t<item>resizeTo</item>\n\t\t\t<item>reverse</item>\n\t\t\t<item>round</item>\n\t\t\t<item>routeEvent</item>\n\t\t\t<item>scrollBy</item>\n\t\t\t<item>scrollTo</item>\n\t\t\t<item>search</item>\n\t\t\t<item>select</item>\n\t\t\t<item>setDate</item>\n\t\t\t<item>setFullYear</item>\n\t\t\t<item>setHours</item>\n\t\t\t<item>setInterval</item>\n\t\t\t<item>setMilliseconds</item>\n\t\t\t<item>setMinutes</item>\n\t\t\t<item>setMonth</item>\n\t\t\t<item>setSeconds</item>\n\t\t\t<item>setTime</item>\n\t\t\t<item>setTimeout</item>\n\t\t\t<item>setUTCDate</item>\n\t\t\t<item>setUTCFullYear</item>\n\t\t\t<item>setUTCHours</item>\n\t\t\t<item>setUTCMilliseconds</item>\n\t\t\t<item>setUTCMinutes</item>\n\t\t\t<item>setUTCMonth</item>\n\t\t\t<item>setUTCSeconds</item>\n\t\t\t<item>shift</item>\n\t\t\t<item>sin</item>\n\t\t\t<item>slice</item>\n\t\t\t<item>sort</item>\n\t\t\t<item>splice</item>\n\t\t\t<item>split</item>\n\t\t\t<item>sqrt</item>\n\t\t\t<item>stop</item>\n\t\t\t<item>submit</item>\n\t\t\t<item>substr</item>\n\t\t\t<item>substring</item>\n\t\t\t<item>taintEnabled</item>\n\t\t\t<item>tan</item>\n\t\t\t<item>test</item>\n\t\t\t<item>toLocaleString</item>\n\t\t\t<item>toLowerCase</item>\n\t\t\t<item>toSource</item>\n\t\t\t<item>toString</item>\n\t\t\t<item>toUpperCase</item>\n\t\t\t<item>toUTCString</item>\n\t\t\t<item>unshift</item>\n\t\t\t<item>unwatch</item>\n\t\t\t<item>UTC</item>\n\t\t\t<item>valueOf</item>\n\t\t\t<item>watch</item>\n\t\t\t<item>write</item>\n\t\t\t<item>writeln</item>\n\n\t\t</list>\n\n\t\t<list name=\"CFSCRIPT Keywords\">\n\n\t\t\t<item>break</item>\n\t\t\t<item>case</item>\n\t\t\t<item>catch</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>default</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>for</item>\n\t\t\t<item>function</item>\n\t\t\t<item>if</item>\n\t\t\t<item>in</item>\n\t\t\t<item>return</item>\n\t\t\t<item>switch</item>\n\t\t\t<item>try</item>\n\t\t\t<item>var</item>\n\t\t\t<item>while</item>\n\n\t\t</list>\n\n\t\t<list name=\"CFSCRIPT Functions\">\n\n\t\t\t<item>Abs</item>\n\t\t\t<item>ACos</item>\n\t\t\t<item>ArrayAppend</item>\n\t\t\t<item>ArrayAvg</item>\n\t\t\t<item>ArrayClear</item>\n\t\t\t<item>ArrayDeleteAt</item>\n\t\t\t<item>ArrayInsertAt</item>\n\t\t\t<item>ArrayIsEmpty</item>\n\t\t\t<item>ArrayLen</item>\n\t\t\t<item>ArrayMax</item>\n\t\t\t<item>ArrayMin</item>\n\t\t\t<item>ArrayNew</item>\n\t\t\t<item>ArrayPrepend</item>\n\t\t\t<item>ArrayResize</item>\n\t\t\t<item>ArraySet</item>\n\t\t\t<item>ArraySort</item>\n\t\t\t<item>ArraySum</item>\n\t\t\t<item>ArraySwap</item>\n\t\t\t<item>ArrayToList</item>\n\t\t\t<item>Asc</item>\n\t\t\t<item>ASin</item>\n\t\t\t<item>Atn</item>\n\t\t\t<item>BitAnd</item>\n\t\t\t<item>BitMaskClear</item>\n\t\t\t<item>BitMaskRead</item>\n\t\t\t<item>BitMaskSet</item>\n\t\t\t<item>BitNot</item>\n\t\t\t<item>BitOr</item>\n\t\t\t<item>BitSHLN</item>\n\t\t\t<item>BitSHRN</item>\n\t\t\t<item>BitXor</item>\n\t\t\t<item>Ceiling</item>\n\t\t\t<item>Chr</item>\n\t\t\t<item>CJustify</item>\n\t\t\t<item>Compare</item>\n\t\t\t<item>CompareNoCase</item>\n\t\t\t<item>Cos</item>\n\t\t\t<item>CreateDate</item>\n\t\t\t<item>CreateDateTime</item>\n\t\t\t<item>CreateObject</item>\n\t\t\t<item>CreateODBCDate</item>\n\t\t\t<item>CreateODBCDateTime</item>\n\t\t\t<item>CreateODBCTime</item>\n\t\t\t<item>CreateTime</item>\n\t\t\t<item>CreateTimeSpan</item>\n\t\t\t<item>CreateUUID</item>\n\t\t\t<item>DateAdd</item>\n\t\t\t<item>DateCompare</item>\n\t\t\t<item>DateConvert</item>\n\t\t\t<item>DateDiff</item>\n\t\t\t<item>DateFormat</item>\n\t\t\t<item>DatePart</item>\n\t\t\t<item>Day</item>\n\t\t\t<item>DayOfWeek</item>\n\t\t\t<item>DayOfWeekAsString</item>\n\t\t\t<item>DayOfYear</item>\n\t\t\t<item>DaysInMonth</item>\n\t\t\t<item>DaysInYear</item>\n\t\t\t<item>DE</item>\n\t\t\t<item>DecimalFormat</item>\n\t\t\t<item>DecrementValue</item>\n\t\t\t<item>Decrypt</item>\n\t\t\t<item>DeleteClientVariable</item>\n\t\t\t<item>DirectoryExists</item>\n\t\t\t<item>DollarFormat</item>\n\t\t\t<item>Duplicate</item>\n\t\t\t<item>Encrypt</item>\n\t\t\t<item>Evaluate</item>\n\t\t\t<item>Exp</item>\n\t\t\t<item>ExpandPath</item>\n\t\t\t<item>FileExists</item>\n\t\t\t<item>Find</item>\n\t\t\t<item>FindNoCase</item>\n\t\t\t<item>FindOneOf</item>\n\t\t\t<item>FirstDayOfMonth</item>\n\t\t\t<item>Fix</item>\n\t\t\t<item>FormatBaseN</item>\n\t\t\t<item>GetAuthUser</item>\n\t\t\t<item>GetBaseTagData</item>\n\t\t\t<item>GetBaseTagList</item>\n\t\t\t<item>GetBaseTemplatePath</item>\n\t\t\t<item>GetClientVariablesList</item>\n\t\t\t<item>GetCurrentTemplatePath</item>\n\t\t\t<item>GetDirectoryFromPath</item>\n\t\t\t<item>GetException</item>\n\t\t\t<item>GetFileFromPath</item>\n\t\t\t<item>GetFunctionList</item>\n\t\t\t<item>GetHttpRequestData</item>\n\t\t\t<item>GetHttpTimeString</item>\n\t\t\t<item>GetK2ServerDocCount</item>\n\t\t\t<item>GetK2ServerDocCountLimit</item>\n\t\t\t<item>GetLocale</item>\n\t\t\t<item>GetMetaData</item>\n\t\t\t<item>GetMetricData</item>\n\t\t\t<item>GetPageContext</item>\n\t\t\t<item>GetProfileSections</item>\n\t\t\t<item>GetProfileString</item>\n\t\t\t<item>GetServiceSettings</item>\n\t\t\t<item>GetTempDirectory</item>\n\t\t\t<item>GetTempFile</item>\n\t\t\t<item>GetTemplatePath</item>\n\t\t\t<item>GetTickCount</item>\n\t\t\t<item>GetTimeZoneInfo</item>\n\t\t\t<item>GetToken</item>\n\t\t\t<item>Hash</item>\n\t\t\t<item>Hour</item>\n\t\t\t<item>HTMLCodeFormat</item>\n\t\t\t<item>HTMLEditFormat</item>\n\t\t\t<item>IIf</item>\n\t\t\t<item>IncrementValue</item>\n\t\t\t<item>InputBaseN</item>\n\t\t\t<item>Insert</item>\n\t\t\t<item>Int</item>\n\t\t\t<item>IsArray</item>\n\t\t\t<item>IsBinary</item>\n\t\t\t<item>IsBoolean</item>\n\t\t\t<item>IsCustomFunction</item>\n\t\t\t<item>IsDate</item>\n\t\t\t<item>IsDebugMode</item>\n\t\t\t<item>IsDefined</item>\n\t\t\t<item>IsK2ServerABroker</item>\n\t\t\t<item>IsK2ServerDocCountExceeded</item>\n\t\t\t<item>IsK2ServerOnline</item>\n\t\t\t<item>IsLeapYear</item>\n\t\t\t<item>IsNumeric</item>\n\t\t\t<item>IsNumericDate</item>\n\t\t\t<item>IsObject</item>\n\t\t\t<item>IsQuery</item>\n\t\t\t<item>IsSimpleValue</item>\n\t\t\t<item>IsStruct</item>\n\t\t\t<item>IsUserInRole</item>\n\t\t\t<item>IsWDDX</item>\n\t\t\t<item>IsXmlDoc</item>\n\t\t\t<item>IsXmlElement</item>\n\t\t\t<item>IsXmlRoot</item>\n\t\t\t<item>JavaCast</item>\n\t\t\t<item>JSStringFormat</item>\n\t\t\t<item>LCase</item>\n\t\t\t<item>Left</item>\n\t\t\t<item>Len</item>\n\t\t\t<item>ListAppend</item>\n\t\t\t<item>ListChangeDelims</item>\n\t\t\t<item>ListContains</item>\n\t\t\t<item>ListContainsNoCase</item>\n\t\t\t<item>ListDeleteAt</item>\n\t\t\t<item>ListFind</item>\n\t\t\t<item>ListFindNoCase</item>\n\t\t\t<item>ListFirst</item>\n\t\t\t<item>ListGetAt</item>\n\t\t\t<item>ListInsertAt</item>\n\t\t\t<item>ListLast</item>\n\t\t\t<item>ListLen</item>\n\t\t\t<item>ListPrepend</item>\n\t\t\t<item>ListQualify</item>\n\t\t\t<item>ListRest</item>\n\t\t\t<item>ListSetAt</item>\n\t\t\t<item>ListSort</item>\n\t\t\t<item>ListToArray</item>\n\t\t\t<item>ListValueCount</item>\n\t\t\t<item>ListValueCountNoCase</item>\n\t\t\t<item>LJustify</item>\n\t\t\t<item>Log</item>\n\t\t\t<item>Log10</item>\n\t\t\t<item>LSCurrencyFormat</item>\n\t\t\t<item>LSDateFormat</item>\n\t\t\t<item>LSEuroCurrencyFormat</item>\n\t\t\t<item>LSIsCurrency</item>\n\t\t\t<item>LSIsDate</item>\n\t\t\t<item>LSIsNumeric</item>\n\t\t\t<item>LSNumberFormat</item>\n\t\t\t<item>LSParseCurrency</item>\n\t\t\t<item>LSParseDateTime</item>\n\t\t\t<item>LSParseEuroCurrency</item>\n\t\t\t<item>LSParseNumber</item>\n\t\t\t<item>LSTimeFormat</item>\n\t\t\t<item>LTrim</item>\n\t\t\t<item>Max</item>\n\t\t\t<item>Mid</item>\n\t\t\t<item>Min</item>\n\t\t\t<item>Minute</item>\n\t\t\t<item>Month</item>\n\t\t\t<item>MonthAsString</item>\n\t\t\t<item>Now</item>\n\t\t\t<item>NumberFormat</item>\n\t\t\t<item>ParagraphFormat</item>\n\t\t\t<item>ParameterExists</item>\n\t\t\t<item>ParseDateTime</item>\n\t\t\t<item>Pi</item>\n\t\t\t<item>PreserveSingleQuotes</item>\n\t\t\t<item>Quarter</item>\n\t\t\t<item>QueryAddColumn</item>\n\t\t\t<item>QueryAddRow</item>\n\t\t\t<item>QueryNew</item>\n\t\t\t<item>QuerySetCell</item>\n\t\t\t<item>QuotedValueList</item>\n\t\t\t<item>Rand</item>\n\t\t\t<item>Randomize</item>\n\t\t\t<item>RandRange</item>\n\t\t\t<item>REFind</item>\n\t\t\t<item>REFindNoCase</item>\n\t\t\t<item>RemoveChars</item>\n\t\t\t<item>RepeatString</item>\n\t\t\t<item>Replace</item>\n\t\t\t<item>ReplaceList</item>\n\t\t\t<item>ReplaceNoCase</item>\n\t\t\t<item>REReplace</item>\n\t\t\t<item>REReplaceNoCase</item>\n\t\t\t<item>Reverse</item>\n\t\t\t<item>Right</item>\n\t\t\t<item>RJustify</item>\n\t\t\t<item>Round</item>\n\t\t\t<item>RTrim</item>\n\t\t\t<item>Second</item>\n\t\t\t<item>SetEncoding</item>\n\t\t\t<item>SetLocale</item>\n\t\t\t<item>SetProfileString</item>\n\t\t\t<item>SetVariable</item>\n\t\t\t<item>Sgn</item>\n\t\t\t<item>Sin</item>\n\t\t\t<item>SpanExcluding</item>\n\t\t\t<item>SpanIncluding</item>\n\t\t\t<item>Sqr</item>\n\t\t\t<item>StripCR</item>\n\t\t\t<item>StructAppend</item>\n\t\t\t<item>StructClear</item>\n\t\t\t<item>StructCopy</item>\n\t\t\t<item>StructCount</item>\n\t\t\t<item>StructDelete</item>\n\t\t\t<item>StructFind</item>\n\t\t\t<item>StructFindKey</item>\n\t\t\t<item>StructFindValue</item>\n\t\t\t<item>StructGet</item>\n\t\t\t<item>StructInsert</item>\n\t\t\t<item>StructIsEmpty</item>\n\t\t\t<item>StructKeyArray</item>\n\t\t\t<item>StructKeyExists</item>\n\t\t\t<item>StructKeyList</item>\n\t\t\t<item>StructNew</item>\n\t\t\t<item>StructSort</item>\n\t\t\t<item>StructUpdate</item>\n\t\t\t<item>Tan</item>\n\t\t\t<item>TimeFormat</item>\n\t\t\t<item>ToBase64</item>\n\t\t\t<item>ToBinary</item>\n\t\t\t<item>ToString</item>\n\t\t\t<item>Trim</item>\n\t\t\t<item>UCase</item>\n\t\t\t<item>URLDecode</item>\n\t\t\t<item>URLEncodedFormat</item>\n\t\t\t<item>URLSessionFormat</item>\n\t\t\t<item>Val</item>\n\t\t\t<item>ValueList</item>\n\t\t\t<item>Week</item>\n\t\t\t<item>WriteOutput</item>\n\t\t\t<item>XmlChildPos</item>\n\t\t\t<item>XmlElemNew</item>\n\t\t\t<item>XmlFormat</item>\n\t\t\t<item>XmlNew</item>\n\t\t\t<item>XmlParse</item>\n\t\t\t<item>XmlSearch</item>\n\t\t\t<item>XmlTransform</item>\n\t\t\t<item>Year</item>\n\t\t\t<item>YesNoFormat</item>\n\n\t\t</list>\n\n\t\t<contexts>\n\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\">\n\t\t\t\t<StringDetect attribute=\"CF Comment\" context=\"ctxCF Comment\" String=\"&lt;!---\" />\n\t\t\t\t<StringDetect attribute=\"HTML Comment\" context=\"ctxHTML Comment\" String=\"&lt;!--\" />\n\t\t\t\t<RegExpr attribute=\"Script Tags\" context=\"ctxCFSCRIPT Tag\" String=\"&lt;[cC][fF][sS][cC][rR][iI][pP][tT]\" />\n\t\t\t\t<RegExpr attribute=\"Script Tags\" context=\"ctxSCRIPT Tag\" String=\"&lt;[sS][cC][rR][iI][pP][tT]\" />\n\t\t\t\t<RegExpr attribute=\"Style Tags\" context=\"ctxSTYLE Tag\" String=\"&lt;[sS][tT][yY][lL][eE]\" />\n\t\t\t\t<DetectChar attribute=\"HTML Entities\" context=\"ctxHTML Entities\" char=\"&amp;\" />\n\t\t\t\t<RegExpr attribute=\"Custom Tags\" context=\"ctxCustom Tag\" String=\"&lt;\\/?[cC][fF]_\" />\n\t\t\t\t<RegExpr attribute=\"CFX Tags\" context=\"ctxCFX Tag\" String=\"&lt;\\/?[cC][fF][xX]_\" />\n\t\t\t\t<RegExpr attribute=\"CF Tags\" context=\"ctxCF Tag\" String=\"&lt;\\/?[cC][fF]\" />\n\t\t\t\t<RegExpr attribute=\"Table Tags\" context=\"ctxTable Tag\" String=\"&lt;\\/?([tT][aAhHbBfFrRdD])|([cC][aA][pP][tT])\" />\n\t\t\t\t<RegExpr attribute=\"Anchor Tags\" context=\"ctxAnchor Tag\" String=\"&lt;\\/?[aA] \" />\n\t\t\t\t<RegExpr attribute=\"Image Tags\" context=\"ctxImage Tag\" String=\"&lt;\\/?[iI][mM][gG] \" />\n\t\t\t\t<RegExpr attribute=\"Tags\" context=\"ctxTag\" String=\"&lt;!?\\/?[a-zA-Z0-9_]+\" />\n\t\t\t</context>\n\n\n\n\t\t\t<context name=\"ctxCFSCRIPT Tag\" attribute=\"Script Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Script Tags\" context=\"ctxCFSCRIPT Block\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxSCRIPT Tag\" attribute=\"Script Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Script Tags\" context=\"ctxSCRIPT Block\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxSTYLE Tag\" attribute=\"Style Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Style Tags\" context=\"ctxSTYLE Block\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\n\n\t\t\t<context name=\"ctxTag\" attribute=\"Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Tags\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxTable Tag\" attribute=\"Table Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Table Tags\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxAnchor Tag\" attribute=\"Anchor Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Anchor Tags\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxImage Tag\" attribute=\"Image Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Image Tags\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxCF Tag\" attribute=\"CF Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"CF Tags\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxCustom Tag\" attribute=\"Custom Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Custom Tags\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxCFX Tag\" attribute=\"CFX Tags\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"CFX Tags\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"=\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\n\n\t\t\t<context name=\"ctxHTML Comment\" attribute=\"HTML Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<StringDetect attribute=\"CF Comment\" context=\"ctxCF Comment\" String=\"&lt;!---\" />\n\t\t\t\t<StringDetect attribute=\"HTML Comment\" context=\"#pop\" String=\"--&gt;\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxCF Comment\" attribute=\"CF Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<StringDetect attribute=\"CF Comment\" context=\"#pop\" String=\"---&gt;\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxC Style Comment\" attribute=\"Script Comment\" lineEndContext=\"#stay\">\n        \t\t<Detect2Chars attribute=\"Script Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxOne Line Comment\" attribute=\"Script Comment\" lineEndContext=\"#pop\" />\n\n\t\t\t<context name=\"ctxHTML Entities\" attribute=\"HTML Entities\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"HTML Entities\" context=\"#pop\" char=\";\" />\n\t\t\t</context>\n\n\n\n\t\t\t<context name=\"ctxCFSCRIPT Block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Script Comment\" context=\"ctxC Style Comment\" char=\"/\" char1=\"*\" />\n\t\t\t\t<Detect2Chars attribute=\"Script Comment\" context=\"ctxOne Line Comment\" char=\"/\" char1=\"/\" />\n\t\t\t\t<RegExpr attribute=\"Script Strings\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Script Strings\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t\t<Int attribute=\"Script Numbers\" context=\"#stay\" />\n\t\t\t\t<Float attribute=\"Script Numbers\" context=\"#stay\" />\n\t\t\t\t<AnyChar attribute=\"Script Operators\" context=\"#stay\" String=\"[()[\\]=+-*/]+\" />\n\t\t\t\t<AnyChar attribute=\"Brackets\" context=\"#stay\" String=\"{}\" />\n\n\t\t\t\t<keyword attribute=\"Script Keywords\" context=\"#stay\" String=\"CFSCRIPT Keywords\" />\n\t\t\t\t<keyword attribute=\"Script Functions\" context=\"#stay\" String=\"CFSCRIPT Functions\" />\n\t\t\t\t<RegExpr attribute=\"Script Tags\" context=\"#pop#pop\" String=\"&lt;/[cC][fF][sS][cC][rR][iI][pP][tT]&gt;\" />\n\t\t\t</context>\n\n\n\n\t\t\t<context name=\"ctxSCRIPT Block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Script Comment\" context=\"ctxC Style Comment\" char=\"/\" char1=\"*\" />\n\t\t\t\t<Detect2Chars attribute=\"Script Comment\" context=\"ctxOne Line Comment\" char=\"/\" char1=\"/\" />\n\t\t\t\t<RegExpr attribute=\"Script Strings\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Script Strings\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t\t<Int attribute=\"Script Numbers\" context=\"#stay\" />\n\t\t\t\t<Float attribute=\"Script Numbers\" context=\"#stay\" />\n\t\t\t\t<AnyChar attribute=\"Script Operators\" context=\"#stay\" String=\"[()[\\]=+-*/]+\" />\n\t\t\t\t<AnyChar attribute=\"Brackets\" context=\"#stay\" String=\"{}\" />\n\n\t\t\t\t<keyword attribute=\"Script Keywords\" context=\"#stay\" String=\"Script Keywords\" />\n\t\t\t\t<keyword attribute=\"Script Objects\" context=\"#stay\" String=\"Script Objects\" />\n\t\t\t\t<keyword attribute=\"Script Functions\" context=\"#stay\" String=\"Script Methods\" />\n\t\t\t\t<RegExpr attribute=\"Script Tags\" context=\"#pop#pop\" String=\"&lt;/[sS][cC][rR][iI][pP][tT]&gt;\" />\n\t\t\t</context>\n\n\n\n\t\t\t<context name=\"ctxSTYLE Block\" attribute=\"Style Selectors\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Script Comment\" context=\"ctxC Style Comment\" char=\"/\" char1=\"*\" />\n\t\t\t\t<DetectChar attribute=\"Brackets\" context=\"ctxStyle Properties\" char=\"{\" />\n\t\t\t\t<RegExpr attribute=\"Style Tags\" context=\"#pop#pop\" String=\"&lt;/[sS][tT][yY][lL][eE]&gt;\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxStyle Properties\" attribute=\"Style Properties\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Brackets\" context=\"#pop\" char=\"}\" />\n\t\t\t\t<Detect2Chars attribute=\"Script Comment\" context=\"ctxC Style Comment\" char=\"/\" char1=\"*\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"ctxStyle Values\" char=\":\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ctxStyle Values\" attribute=\"Style Values\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\",\" />\n\t\t\t\t<Int attribute=\"Numbers\" context=\"#stay\" />\n\t\t\t\t<Float attribute=\"Numbers\" context=\"#stay\" />\n\t\t\t\t<RegExpr attribute=\"Numbers\" context=\"#stay\" String=\"#([0-9a-fA-F]{3})|([0-9a-fA-F]{6})\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Attribute Values\" context=\"#stay\" String=\"'[^']*'\" />\n\t\t\t</context>\n\n\t\t</contexts>\n\n\t\t<itemDatas>\n\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\t\t\t<itemData name=\"Tags\" defStyleNum=\"dsNormal\"\t\t\t\tcolor=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Table Tags\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#008080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Script Tags\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#800000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Image Tags\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#800080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Style Tags\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#800080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Anchor Tags\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#008000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Attribute Values\" defStyleNum=\"dsNormal\"\tcolor=\"#0000ff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"HTML Comment\" defStyleNum=\"dsComment\"\t\tcolor=\"#008000\" selColor=\"#999999\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"CF Comment\" defStyleNum=\"dsComment\"\t\t\tcolor=\"#ff9900\" selColor=\"#999999\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Script Comment\" defStyleNum=\"dsComment\"\t\tcolor=\"#ff9900\" selColor=\"#999999\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"CF Tags\" defStyleNum=\"dsNormal\"\t\t\t\tcolor=\"#800000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Custom Tags\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#cc6666\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"CFX Tags\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#008000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Numbers\" defStyleNum=\"dsNormal\"\t\t\t\tcolor=\"#0000ff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"HTML Entities\" defStyleNum=\"dsNormal\"\t\tcolor=\"#000000\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n\t\t\t<itemData name=\"Style Selectors\" defStyleNum=\"dsNormal\"\t\tcolor=\"#ff00ff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Style Properties\" defStyleNum=\"dsNormal\"\tcolor=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Style Values\" defStyleNum=\"dsNormal\"\t\tcolor=\"#ff0000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Brackets\" defStyleNum=\"dsNormal\"\t\t\tcolor=\"#000080\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n\t\t\t<itemData name=\"Script Numbers\" defStyleNum=\"dsNormal\"\t\tcolor=\"#ff00ff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Script Strings\" defStyleNum=\"dsNormal\"\t\tcolor=\"#008080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Script Operators\" defStyleNum=\"dsNormal\"\tcolor=\"#0000ff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Script Keywords\" defStyleNum=\"dsNormal\"\t\tcolor=\"#0000cc\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n\t\t\t<itemData name=\"Script Functions\" defStyleNum=\"dsFunction\"\tbold=\"1\" />\n\t\t\t<itemData name=\"Script Objects\" defStyleNum=\"dsNormal\"\t\tcolor=\"#0000cc\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n\n\t\t</itemDatas>\n\n\t</highlighting>\n\n\t<general>\n\n\t\t<comments>\n\n\t\t\t<comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t\t\t<comment name=\"singleLine\" start=\"//\" />\n\n\t\t</comments>\n\n\t\t<keywords casesensitive=\"0\" weakDeliminator=\"-\" />\n\n\t</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/commonlisp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language version=\"6\" kateversion=\"5.0\" name=\"Common Lisp\" section=\"Sources\" extensions=\"*.lisp;*.cl;*.lsp\" mimetype=\"\" author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"symbols\">\n      <item>&lt;</item>\n      <item>&lt;=</item>\n      <item>=</item>\n      <item>&gt;</item>\n      <item>&gt;=</item>\n      <item>=&gt;</item>\n      <item>-</item> \n      <item>/</item> \n      <item>/=</item> \n      <item>//</item> \n      <item>///</item> \n      <item>*</item> \n      <item>**</item> \n      <item>***</item> \n      <item>+</item> \n      <item>++</item> \n      <item>+++</item> \n      <item>1-</item> \n      <item>1+</item> \n    </list>\n    <list name=\"definitions\">\n      <item>defclass</item> \n      <item>defconstant</item> \n      <item>defgeneric</item> \n      <item>define-compiler-macro</item> \n      <item>define-condition</item> \n      <item>define-method-combination</item> \n      <item>define-modify-macro</item> \n      <item>define-setf-expander</item> \n      <item>define-setf-method</item> \n      <item>define-symbol-macro</item> \n      <item>defmacro</item> \n      <item>defmethod</item> \n      <item>defpackage</item> \n      <item>defparameter</item> \n      <item>defsetf</item> \n      <item>deftype</item> \n      <item>defvar</item> \n      <item>defun</item> \n      <item>defstruct</item> \n    </list>\n    <list name=\"keywords\">\n      <item>abort</item> \n      <item>abs</item> \n      <item>access</item> \n      <item>acons</item> \n      <item>acos</item> \n      <item>acosh</item> \n      <item>add-method</item> \n      <item>adjoin</item> \n      <item>adjustable-array-p</item> \n      <item>adjust-array</item> \n      <item>allocate-instance</item> \n      <item>alpha-char-p</item> \n      <item>alphanumericp</item> \n      <item>and</item> \n      <item>append</item> \n      <item>apply</item> \n      <item>applyhook</item> \n      <item>apropos</item> \n      <item>apropos-list</item> \n      <item>aref</item> \n      <item>arithmetic-error</item> \n      <item>arithmetic-error-operands</item> \n      <item>arithmetic-error-operation</item> \n      <item>array</item> \n      <item>array-dimension</item> \n      <item>array-dimension-limit</item> \n      <item>array-dimensions</item> \n      <item>array-displacement</item> \n      <item>array-element-type</item> \n      <item>array-has-fill-pointer-p</item> \n      <item>array-in-bounds-p</item> \n      <item>arrayp</item> \n      <item>array-rank</item> \n      <item>array-rank-limit</item> \n      <item>array-row-major-index</item> \n      <item>array-total-size</item> \n      <item>array-total-size-limit</item> \n      <item>ash</item> \n      <item>asin</item> \n      <item>asinh</item> \n      <item>assert</item> \n      <item>assoc</item> \n      <item>assoc-if</item> \n      <item>assoc-if-not</item> \n      <item>atan</item> \n      <item>atanh</item> \n      <item>atom</item> \n      <item>base-char</item> \n      <item>base-string</item> \n      <item>bignum</item> \n      <item>bit</item> \n      <item>bit-and</item> \n      <item>bit-andc1</item> \n      <item>bit-andc2</item> \n      <item>bit-eqv</item> \n      <item>bit-ior</item> \n      <item>bit-nand</item> \n      <item>bit-nor</item> \n      <item>bit-not</item> \n      <item>bit-orc1</item> \n      <item>bit-orc2</item> \n      <item>bit-vector</item> \n      <item>bit-vector-p</item> \n      <item>bit-xor</item> \n      <item>block</item> \n      <item>boole</item> \n      <item>boole-1</item> \n      <item>boole-2</item> \n      <item>boolean</item> \n      <item>boole-and</item> \n      <item>boole-andc1</item> \n      <item>boole-andc2</item> \n      <item>boole-c1</item> \n      <item>boole-c2</item> \n      <item>boole-clr</item> \n      <item>boole-eqv</item> \n      <item>boole-ior</item> \n      <item>boole-nand</item> \n      <item>boole-nor</item> \n      <item>boole-orc1</item> \n      <item>boole-orc2</item> \n      <item>boole-set</item> \n      <item>boole-xor</item> \n      <item>both-case-p</item> \n      <item>boundp</item> \n      <item>break</item> \n      <item>broadcast-stream</item> \n      <item>broadcast-stream-streams</item> \n      <item>built-in-class</item> \n      <item>butlast</item> \n      <item>byte</item> \n      <item>byte-position</item> \n      <item>byte-size</item> \n      <item>caaaar</item>\n      <item>caaadr</item>\n      <item>caaar</item> \n      <item>caadar</item>\n      <item>caaddr</item>\n      <item>caadr</item> \n      <item>caar</item> \n      <item>cadaar</item>\n      <item>cadadr</item>\n      <item>cadar</item> \n      <item>caddar</item>\n      <item>cadddr</item>\n      <item>caddr</item> \n      <item>cadr</item> \n      <item>call-arguments-limit</item> \n      <item>call-method</item> \n      <item>call-next-method</item> \n      <item>capitalize</item> \n      <item>car</item> \n      <item>case</item> \n      <item>catch</item> \n      <item>ccase</item> \n      <item>cdaaar</item> \n      <item>cdaadr</item> \n      <item>cdaar</item> \n      <item>cdadar</item> \n      <item>cdaddr</item> \n      <item>cdadr</item> \n      <item>cdar</item> \n      <item>cddaar</item> \n      <item>cddadr</item> \n      <item>cddar</item> \n      <item>cdddar</item> \n      <item>cddddr</item> \n      <item>cdddr</item> \n      <item>cddr</item> \n      <item>cdr</item> \n      <item>ceiling</item> \n      <item>cell-error</item> \n      <item>cell-error-name</item> \n      <item>cerror</item> \n      <item>change-class</item> \n      <item>char</item> \n      <item>char&lt;</item> \n      <item>char&lt;=</item> \n      <item>char=</item> \n      <item>char&gt;</item> \n      <item>char&gt;=</item> \n      <item>char/=</item> \n      <item>character</item> \n      <item>characterp</item> \n      <item>char-bit</item> \n      <item>char-bits</item> \n      <item>char-bits-limit</item> \n      <item>char-code</item> \n      <item>char-code-limit</item> \n      <item>char-control-bit</item> \n      <item>char-downcase</item> \n      <item>char-equal</item> \n      <item>char-font</item> \n      <item>char-font-limit</item> \n      <item>char-greaterp</item> \n      <item>char-hyper-bit</item> \n      <item>char-int</item> \n      <item>char-lessp</item> \n      <item>char-meta-bit</item> \n      <item>char-name</item> \n      <item>char-not-equal</item> \n      <item>char-not-greaterp</item> \n      <item>char-not-lessp</item> \n      <item>char-super-bit</item> \n      <item>char-upcase</item> \n      <item>check-type</item> \n      <item>cis</item> \n      <item>class</item> \n      <item>class-name</item> \n      <item>class-of</item> \n      <item>clear-input</item> \n      <item>clear-output</item> \n      <item>close</item> \n      <item>clrhash</item> \n      <item>code-char</item> \n      <item>coerce</item> \n      <item>commonp</item> \n      <item>compilation-speed</item> \n      <item>compile</item> \n      <item>compiled-function</item> \n      <item>compiled-function-p</item> \n      <item>compile-file</item> \n      <item>compile-file-pathname</item> \n      <item>compiler-let</item> \n      <item>compiler-macro</item> \n      <item>compiler-macro-function</item> \n      <item>complement</item> \n      <item>complex</item> \n      <item>complexp</item> \n      <item>compute-applicable-methods</item> \n      <item>compute-restarts</item> \n      <item>concatenate</item> \n      <item>concatenated-stream</item> \n      <item>concatenated-stream-streams</item> \n      <item>cond</item> \n      <item>condition</item> \n      <item>conjugate</item> \n      <item>cons</item> \n      <item>consp</item> \n      <item>constantly</item> \n      <item>constantp</item> \n      <item>continue</item> \n      <item>control-error</item> \n      <item>copy-alist</item> \n      <item>copy-list</item> \n      <item>copy-pprint-dispatch</item> \n      <item>copy-readtable</item> \n      <item>copy-seq</item> \n      <item>copy-structure</item> \n      <item>copy-symbol</item> \n      <item>copy-tree</item> \n      <item>cos</item> \n      <item>cosh</item> \n      <item>count</item> \n      <item>count-if</item> \n      <item>count-if-not</item> \n      <item>ctypecase</item> \n      <item>debug</item> \n      <item>decf</item> \n      <item>declaim</item> \n      <item>declaration</item> \n      <item>declare</item> \n      <item>decode-float</item> \n      <item>decode-universal-time</item> \n      <item>delete</item> \n      <item>delete-duplicates</item> \n      <item>delete-file</item> \n      <item>delete-if</item> \n      <item>delete-if-not</item> \n      <item>delete-package</item> \n      <item>denominator</item> \n      <item>deposit-field</item> \n      <item>describe</item> \n      <item>describe-object</item> \n      <item>destructuring-bind</item> \n      <item>digit-char</item> \n      <item>digit-char-p</item> \n      <item>directory</item> \n      <item>directory-namestring</item> \n      <item>disassemble</item> \n      <item>division-by-zero</item> \n      <item>do</item> \n      <item>do*</item> \n      <item>do-all-symbols</item> \n      <item>documentation</item> \n      <item>do-exeternal-symbols</item> \n      <item>do-external-symbols</item> \n      <item>dolist</item> \n      <item>do-symbols</item> \n      <item>dotimes</item> \n      <item>double-float</item> \n      <item>double-float-epsilon</item> \n      <item>double-float-negative-epsilon</item> \n      <item>dpb</item> \n      <item>dribble</item> \n      <item>dynamic-extent</item> \n      <item>ecase</item> \n      <item>echo-stream</item> \n      <item>echo-stream-input-stream</item> \n      <item>echo-stream-output-stream</item> \n      <item>ed</item> \n      <item>eighth</item> \n      <item>elt</item> \n      <item>encode-universal-time</item> \n      <item>end-of-file</item> \n      <item>endp</item> \n      <item>enough-namestring</item> \n      <item>ensure-directories-exist</item> \n      <item>ensure-generic-function</item> \n      <item>eq</item> \n      <item>eql</item> \n      <item>equal</item> \n      <item>equalp</item> \n      <item>error</item> \n      <item>etypecase</item> \n      <item>eval</item> \n      <item>evalhook</item> \n      <item>eval-when</item> \n      <item>evenp</item> \n      <item>every</item> \n      <item>exp</item> \n      <item>export</item> \n      <item>expt</item> \n      <item>extended-char</item> \n      <item>fboundp</item> \n      <item>fceiling</item> \n      <item>fdefinition</item> \n      <item>ffloor</item> \n      <item>fifth</item> \n      <item>file-author</item> \n      <item>file-error</item> \n      <item>file-error-pathname</item> \n      <item>file-length</item> \n      <item>file-namestring</item> \n      <item>file-position</item> \n      <item>file-stream</item> \n      <item>file-string-length</item> \n      <item>file-write-date</item> \n      <item>fill</item> \n      <item>fill-pointer</item> \n      <item>find</item> \n      <item>find-all-symbols</item> \n      <item>find-class</item> \n      <item>find-if</item> \n      <item>find-if-not</item> \n      <item>find-method</item> \n      <item>find-package</item> \n      <item>find-restart</item> \n      <item>find-symbol</item> \n      <item>finish-output</item> \n      <item>first</item> \n      <item>fixnum</item> \n      <item>flet</item> \n      <item>float</item> \n      <item>float-digits</item> \n      <item>floating-point-inexact</item> \n      <item>floating-point-invalid-operation</item> \n      <item>floating-point-overflow</item> \n      <item>floating-point-underflow</item> \n      <item>floatp</item> \n      <item>float-precision</item> \n      <item>float-radix</item> \n      <item>float-sign</item> \n      <item>floor</item> \n      <item>fmakunbound</item> \n      <item>force-output</item> \n      <item>format</item> \n      <item>formatter</item> \n      <item>fourth</item> \n      <item>fresh-line</item> \n      <item>fround</item> \n      <item>ftruncate</item> \n      <item>ftype</item> \n      <item>funcall</item> \n      <item>function</item> \n      <item>function-keywords</item> \n      <item>function-lambda-expression</item> \n      <item>functionp</item> \n      <item>gbitp</item> \n      <item>gcd</item> \n      <item>generic-function</item> \n      <item>gensym</item> \n      <item>gentemp</item> \n      <item>get</item> \n      <item>get-decoded-time</item> \n      <item>get-dispatch-macro-character</item> \n      <item>getf</item> \n      <item>gethash</item> \n      <item>get-internal-real-time</item> \n      <item>get-internal-run-time</item> \n      <item>get-macro-character</item> \n      <item>get-output-stream-string</item> \n      <item>get-properties</item> \n      <item>get-setf-expansion</item> \n      <item>get-setf-method</item> \n      <item>get-universal-time</item> \n      <item>go</item> \n      <item>graphic-char-p</item> \n      <item>handler-bind</item> \n      <item>handler-case</item> \n      <item>hash-table</item> \n      <item>hash-table-count</item> \n      <item>hash-table-p</item> \n      <item>hash-table-rehash-size</item> \n      <item>hash-table-rehash-threshold</item> \n      <item>hash-table-size</item> \n      <item>hash-table-test</item> \n      <item>host-namestring</item> \n      <item>identity</item> \n      <item>if</item> \n      <item>if-exists</item> \n      <item>ignorable</item> \n      <item>ignore</item> \n      <item>ignore-errors</item> \n      <item>imagpart</item> \n      <item>import</item> \n      <item>incf</item> \n      <item>initialize-instance</item> \n      <item>inline</item> \n      <item>in-package</item> \n      <item>in-package</item> \n      <item>input-stream-p</item> \n      <item>inspect</item> \n      <item>int-char</item> \n      <item>integer</item> \n      <item>integer-decode-float</item> \n      <item>integer-length</item> \n      <item>integerp</item> \n      <item>interactive-stream-p</item> \n      <item>intern</item> \n      <item>internal-time-units-per-second</item> \n      <item>intersection</item> \n      <item>invalid-method-error</item> \n      <item>invoke-debugger</item> \n      <item>invoke-restart</item> \n      <item>invoke-restart-interactively</item> \n      <item>isqrt</item> \n      <item>keyword</item> \n      <item>keywordp</item> \n      <item>labels</item> \n      <item>lambda</item> \n      <item>lambda-list-keywords</item> \n      <item>lambda-parameters-limit</item> \n      <item>last</item> \n      <item>lcm</item> \n      <item>ldb</item> \n      <item>ldb-test</item> \n      <item>ldiff</item> \n      <item>least-negative-double-float</item> \n      <item>least-negative-long-float</item> \n      <item>least-negative-normalized-double-float</item> \n      <item>least-negative-normalized-long-float</item> \n      <item>least-negative-normalized-short-float</item> \n      <item>least-negative-normalized-single-float</item> \n      <item>least-negative-short-float</item> \n      <item>least-negative-single-float</item> \n      <item>least-positive-double-float</item> \n      <item>least-positive-long-float</item> \n      <item>least-positive-normalized-double-float</item> \n      <item>least-positive-normalized-long-float</item> \n      <item>least-positive-normalized-short-float</item> \n      <item>least-positive-normalized-single-float</item> \n      <item>least-positive-short-float</item> \n      <item>least-positive-single-float</item> \n      <item>length</item> \n      <item>let</item> \n      <item>let*</item> \n      <item>lisp</item> \n      <item>lisp-implementation-type</item> \n      <item>lisp-implementation-version</item> \n      <item>list</item> \n      <item>list*</item> \n      <item>list-all-packages</item> \n      <item>listen</item> \n      <item>list-length</item> \n      <item>listp</item> \n      <item>load</item> \n      <item>load-logical-pathname-translations</item> \n      <item>load-time-value</item> \n      <item>locally</item> \n      <item>log</item> \n      <item>logand</item> \n      <item>logandc1</item> \n      <item>logandc2</item> \n      <item>logbitp</item> \n      <item>logcount</item> \n      <item>logeqv</item> \n      <item>logical-pathname</item> \n      <item>logical-pathname-translations</item> \n      <item>logior</item> \n      <item>lognand</item> \n      <item>lognor</item> \n      <item>lognot</item> \n      <item>logorc1</item> \n      <item>logorc2</item> \n      <item>logtest</item> \n      <item>logxor</item> \n      <item>long-float</item> \n      <item>long-float-epsilon</item> \n      <item>long-float-negative-epsilon</item> \n      <item>long-site-name</item> \n      <item>loop</item> \n      <item>loop-finish</item> \n      <item>lower-case-p</item> \n      <item>machine-instance</item> \n      <item>machine-type</item> \n      <item>machine-version</item> \n      <item>macroexpand</item> \n      <item>macroexpand-1</item> \n      <item>macroexpand-l</item> \n      <item>macro-function</item> \n      <item>macrolet</item> \n      <item>make-array</item> \n      <item>make-array</item> \n      <item>make-broadcast-stream</item> \n      <item>make-char</item> \n      <item>make-concatenated-stream</item> \n      <item>make-condition</item> \n      <item>make-dispatch-macro-character</item> \n      <item>make-echo-stream</item> \n      <item>make-hash-table</item> \n      <item>make-instance</item> \n      <item>make-instances-obsolete</item> \n      <item>make-list</item> \n      <item>make-load-form</item> \n      <item>make-load-form-saving-slots</item> \n      <item>make-method</item> \n      <item>make-package</item> \n      <item>make-pathname</item> \n      <item>make-random-state</item> \n      <item>make-sequence</item> \n      <item>make-string</item> \n      <item>make-string-input-stream</item> \n      <item>make-string-output-stream</item> \n      <item>make-symbol</item> \n      <item>make-synonym-stream</item> \n      <item>make-two-way-stream</item> \n      <item>makunbound</item> \n      <item>map</item> \n      <item>mapc</item> \n      <item>mapcan</item> \n      <item>mapcar</item> \n      <item>mapcon</item> \n      <item>maphash</item> \n      <item>map-into</item> \n      <item>mapl</item> \n      <item>maplist</item> \n      <item>mask-field</item> \n      <item>max</item> \n      <item>member</item> \n      <item>member-if</item> \n      <item>member-if-not</item> \n      <item>merge</item> \n      <item>merge-pathname</item> \n      <item>merge-pathnames</item> \n      <item>method</item> \n      <item>method-combination</item> \n      <item>method-combination-error</item> \n      <item>method-qualifiers</item> \n      <item>min</item> \n      <item>minusp</item> \n      <item>mismatch</item> \n      <item>mod</item> \n      <item>most-negative-double-float</item> \n      <item>most-negative-fixnum</item> \n      <item>most-negative-long-float</item> \n      <item>most-negative-short-float</item> \n      <item>most-negative-single-float</item> \n      <item>most-positive-double-float</item> \n      <item>most-positive-fixnum</item> \n      <item>most-positive-long-float</item> \n      <item>most-positive-short-float</item> \n      <item>most-positive-single-float</item> \n      <item>muffle-warning</item> \n      <item>multiple-value-bind</item> \n      <item>multiple-value-call</item> \n      <item>multiple-value-list</item> \n      <item>multiple-value-prog1</item> \n      <item>multiple-value-seteq</item> \n      <item>multiple-value-setq</item> \n      <item>multiple-values-limit</item> \n      <item>name-char</item> \n      <item>namestring</item> \n      <item>nbutlast</item> \n      <item>nconc</item> \n      <item>next-method-p</item> \n      <item>nil</item> \n      <item>nintersection</item> \n      <item>ninth</item> \n      <item>no-applicable-method</item> \n      <item>no-next-method</item> \n      <item>not</item> \n      <item>notany</item> \n      <item>notevery</item> \n      <item>notinline</item> \n      <item>nreconc</item> \n      <item>nreverse</item> \n      <item>nset-difference</item> \n      <item>nset-exclusive-or</item> \n      <item>nstring</item> \n      <item>nstring-capitalize</item> \n      <item>nstring-downcase</item> \n      <item>nstring-upcase</item> \n      <item>nsublis</item> \n      <item>nsubst</item> \n      <item>nsubst-if</item> \n      <item>nsubst-if-not</item> \n      <item>nsubstitute</item> \n      <item>nsubstitute-if</item> \n      <item>nsubstitute-if-not</item> \n      <item>nth</item> \n      <item>nthcdr</item> \n      <item>nth-value</item> \n      <item>null</item> \n      <item>number</item> \n      <item>numberp</item> \n      <item>numerator</item> \n      <item>nunion</item> \n      <item>oddp</item> \n      <item>open</item> \n      <item>open-stream-p</item> \n      <item>optimize</item> \n      <item>or</item> \n      <item>otherwise</item> \n      <item>output-stream-p</item> \n      <item>package</item> \n      <item>package-error</item> \n      <item>package-error-package</item> \n      <item>package-name</item> \n      <item>package-nicknames</item> \n      <item>packagep</item> \n      <item>package-shadowing-symbols</item> \n      <item>package-used-by-list</item> \n      <item>package-use-list</item> \n      <item>pairlis</item> \n      <item>parse-error</item> \n      <item>parse-integer</item> \n      <item>parse-namestring</item> \n      <item>pathname</item> \n      <item>pathname-device</item> \n      <item>pathname-directory</item> \n      <item>pathname-host</item> \n      <item>pathname-match-p</item> \n      <item>pathname-name</item> \n      <item>pathnamep</item> \n      <item>pathname-type</item> \n      <item>pathname-version</item> \n      <item>peek-char</item> \n      <item>phase</item> \n      <item>pi</item> \n      <item>plusp</item> \n      <item>pop</item> \n      <item>position</item> \n      <item>position-if</item> \n      <item>position-if-not</item> \n      <item>pprint</item> \n      <item>pprint-dispatch</item> \n      <item>pprint-exit-if-list-exhausted</item> \n      <item>pprint-fill</item> \n      <item>pprint-indent</item> \n      <item>pprint-linear</item> \n      <item>pprint-logical-block</item> \n      <item>pprint-newline</item> \n      <item>pprint-pop</item> \n      <item>pprint-tab</item> \n      <item>pprint-tabular</item> \n      <item>prin1</item> \n      <item>prin1-to-string</item> \n      <item>princ</item> \n      <item>princ-to-string</item> \n      <item>print</item> \n      <item>print-not-readable</item> \n      <item>print-not-readable-object</item> \n      <item>print-object</item> \n      <item>print-unreadable-object</item> \n      <item>probe-file</item> \n      <item>proclaim</item> \n      <item>prog</item> \n      <item>prog*</item> \n      <item>prog1</item> \n      <item>prog2</item> \n      <item>progn</item> \n      <item>program-error</item> \n      <item>progv</item> \n      <item>provide</item> \n      <item>psetf</item> \n      <item>psetq</item> \n      <item>push</item> \n      <item>pushnew</item> \n      <item>putprop</item> \n      <item>quote</item> \n      <item>random</item> \n      <item>random-state</item> \n      <item>random-state-p</item> \n      <item>rassoc</item> \n      <item>rassoc-if</item> \n      <item>rassoc-if-not</item> \n      <item>ratio</item> \n      <item>rational</item> \n      <item>rationalize</item> \n      <item>rationalp</item> \n      <item>read</item> \n      <item>read-byte</item> \n      <item>read-char</item> \n      <item>read-char-no-hang</item> \n      <item>read-delimited-list</item> \n      <item>reader-error</item> \n      <item>read-eval-print</item> \n      <item>read-from-string</item> \n      <item>read-line</item> \n      <item>read-preserving-whitespace</item> \n      <item>read-sequence</item> \n      <item>readtable</item> \n      <item>readtable-case</item> \n      <item>readtablep</item> \n      <item>real</item> \n      <item>realp</item> \n      <item>realpart</item> \n      <item>reduce</item> \n      <item>reinitialize-instance</item> \n      <item>rem</item> \n      <item>remf</item> \n      <item>remhash</item> \n      <item>remove</item> \n      <item>remove-duplicates</item> \n      <item>remove-if</item> \n      <item>remove-if-not</item> \n      <item>remove-method</item> \n      <item>remprop</item> \n      <item>rename-file</item> \n      <item>rename-package</item> \n      <item>replace</item> \n      <item>require</item> \n      <item>rest</item> \n      <item>restart</item> \n      <item>restart-bind</item> \n      <item>restart-case</item> \n      <item>restart-name</item> \n      <item>return</item> \n      <item>return-from</item> \n      <item>revappend</item> \n      <item>reverse</item> \n      <item>room</item> \n      <item>rotatef</item> \n      <item>round</item> \n      <item>row-major-aref</item> \n      <item>rplaca</item> \n      <item>rplacd</item> \n      <item>safety</item> \n      <item>satisfies</item> \n      <item>sbit</item> \n      <item>scale-float</item> \n      <item>schar</item> \n      <item>search</item> \n      <item>second</item> \n      <item>sequence</item> \n      <item>serious-condition</item> \n      <item>set</item> \n      <item>set-char-bit</item> \n      <item>set-difference</item> \n      <item>set-dispatch-macro-character</item> \n      <item>set-exclusive-or</item> \n      <item>setf</item> \n      <item>set-macro-character</item> \n      <item>set-pprint-dispatch</item> \n      <item>setq</item> \n      <item>set-syntax-from-char</item> \n      <item>seventh</item> \n      <item>shadow</item> \n      <item>shadowing-import</item> \n      <item>shared-initialize</item> \n      <item>shiftf</item> \n      <item>short-float</item> \n      <item>short-float-epsilon</item> \n      <item>short-float-negative-epsilon</item> \n      <item>short-site-name</item> \n      <item>signal</item> \n      <item>signed-byte</item> \n      <item>signum</item> \n      <item>simle-condition</item> \n      <item>simple-array</item> \n      <item>simple-base-string</item> \n      <item>simple-bit-vector</item> \n      <item>simple-bit-vector-p</item> \n      <item>simple-condition-format-arguments</item> \n      <item>simple-condition-format-control</item> \n      <item>simple-error</item> \n      <item>simple-string</item> \n      <item>simple-string-p</item> \n      <item>simple-type-error</item> \n      <item>simple-vector</item> \n      <item>simple-vector-p</item> \n      <item>simple-warning</item> \n      <item>sin</item> \n      <item>single-flaot-epsilon</item> \n      <item>single-float</item> \n      <item>single-float-epsilon</item> \n      <item>single-float-negative-epsilon</item> \n      <item>sinh</item> \n      <item>sixth</item> \n      <item>sleep</item> \n      <item>slot-boundp</item> \n      <item>slot-exists-p</item> \n      <item>slot-makunbound</item> \n      <item>slot-missing</item> \n      <item>slot-unbound</item> \n      <item>slot-value</item> \n      <item>software-type</item> \n      <item>software-version</item> \n      <item>some</item> \n      <item>sort</item> \n      <item>space</item> \n      <item>special</item> \n      <item>special-form-p</item> \n      <item>special-operator-p</item> \n      <item>speed</item> \n      <item>sqrt</item> \n      <item>stable-sort</item> \n      <item>standard</item> \n      <item>standard-char</item> \n      <item>standard-char-p</item> \n      <item>standard-class</item> \n      <item>standard-generic-function</item> \n      <item>standard-method</item> \n      <item>standard-object</item> \n      <item>step</item> \n      <item>storage-condition</item> \n      <item>store-value</item> \n      <item>stream</item> \n      <item>stream-element-type</item> \n      <item>stream-error</item> \n      <item>stream-error-stream</item> \n      <item>stream-external-format</item> \n      <item>streamp</item> \n      <item>streamup</item> \n      <item>string</item> \n      <item>string&lt;</item> \n      <item>string&lt;=</item> \n      <item>string=</item> \n      <item>string&gt;</item> \n      <item>string&gt;=</item> \n      <item>string/=</item> \n      <item>string-capitalize</item> \n      <item>string-char</item> \n      <item>string-char-p</item> \n      <item>string-downcase</item> \n      <item>string-equal</item> \n      <item>string-greaterp</item> \n      <item>string-left-trim</item> \n      <item>string-lessp</item> \n      <item>string-not-equal</item> \n      <item>string-not-greaterp</item> \n      <item>string-not-lessp</item> \n      <item>stringp</item> \n      <item>string-right-strim</item> \n      <item>string-right-trim</item> \n      <item>string-stream</item> \n      <item>string-trim</item> \n      <item>string-upcase</item> \n      <item>structure</item> \n      <item>structure-class</item> \n      <item>structure-object</item> \n      <item>style-warning</item> \n      <item>sublim</item> \n      <item>sublis</item> \n      <item>subseq</item> \n      <item>subsetp</item> \n      <item>subst</item> \n      <item>subst-if</item> \n      <item>subst-if-not</item> \n      <item>substitute</item> \n      <item>substitute-if</item> \n      <item>substitute-if-not</item> \n      <item>subtypep</item> \n      <item>svref</item> \n      <item>sxhash</item> \n      <item>symbol</item> \n      <item>symbol-function</item> \n      <item>symbol-macrolet</item> \n      <item>symbol-name</item> \n      <item>symbolp</item> \n      <item>symbol-package</item> \n      <item>symbol-plist</item> \n      <item>symbol-value</item> \n      <item>synonym-stream</item> \n      <item>synonym-stream-symbol</item> \n      <item>sys</item> \n      <item>system</item> \n      <item>t</item> \n      <item>tagbody</item> \n      <item>tailp</item> \n      <item>tan</item> \n      <item>tanh</item> \n      <item>tenth</item> \n      <item>terpri</item> \n      <item>the</item> \n      <item>third</item> \n      <item>throw</item> \n      <item>time</item> \n      <item>trace</item> \n      <item>translate-logical-pathname</item> \n      <item>translate-pathname</item> \n      <item>tree-equal</item> \n      <item>truename</item> \n      <item>truncase</item> \n      <item>truncate</item> \n      <item>two-way-stream</item> \n      <item>two-way-stream-input-stream</item> \n      <item>two-way-stream-output-stream</item> \n      <item>type</item> \n      <item>typecase</item> \n      <item>type-error</item> \n      <item>type-error-datum</item> \n      <item>type-error-expected-type</item> \n      <item>type-of</item> \n      <item>typep</item> \n      <item>unbound-slot</item> \n      <item>unbound-slot-instance</item> \n      <item>unbound-variable</item> \n      <item>undefined-function</item> \n      <item>unexport</item> \n      <item>unintern</item> \n      <item>union</item> \n      <item>unless</item> \n      <item>unread</item> \n      <item>unread-char</item> \n      <item>unsigned-byte</item> \n      <item>untrace</item> \n      <item>unuse-package</item> \n      <item>unwind-protect</item> \n      <item>update-instance-for-different-class</item> \n      <item>update-instance-for-redefined-class</item> \n      <item>upgraded-array-element-type</item> \n      <item>upgraded-complex-part-type</item> \n      <item>upper-case-p</item> \n      <item>use-package</item> \n      <item>user</item> \n      <item>user-homedir-pathname</item> \n      <item>use-value</item> \n      <item>values</item> \n      <item>values-list</item> \n      <item>vector</item> \n      <item>vectorp</item> \n      <item>vector-pop</item> \n      <item>vector-push</item> \n      <item>vector-push-extend</item> \n      <item>warn</item> \n      <item>warning</item> \n      <item>when</item> \n      <item>wild-pathname-p</item> \n      <item>with-accessors</item> \n      <item>with-compilation-unit</item> \n      <item>with-condition-restarts</item> \n      <item>with-hash-table-iterator</item> \n      <item>with-input-from-string</item> \n      <item>with-open-file</item> \n      <item>with-open-stream</item> \n      <item>with-output-to-string</item> \n      <item>with-package-iterator</item> \n      <item>with-simple-restart</item> \n      <item>with-slots</item> \n      <item>with-standard-io-syntax</item> \n      <item>write</item> \n      <item>write-byte</item> \n      <item>write-char</item> \n      <item>write-line</item> \n      <item>write-sequence</item> \n      <item>write-string</item> \n      <item>write-to-string</item> \n      <item>yes-or-no-p</item> \n      <item>y-or-n-p</item> \n      <item>zerop</item> \n    </list>\n\n    <list name=\"modifiers\">\n      <item>:abort</item> \n      <item>:adjustable</item> \n      <item>:append</item> \n      <item>:array</item> \n      <item>:base</item> \n      <item>:case</item> \n      <item>:circle</item> \n      <item>:conc-name</item> \n      <item>:constructor</item> \n      <item>:copier</item> \n      <item>:count</item> \n      <item>:create</item> \n      <item>:default</item> \n      <item>:defaults</item> \n      <item>:device</item> \n      <item>:direction</item> \n      <item>:directory</item> \n      <item>:displaced-index-offset</item> \n      <item>:displaced-to</item> \n      <item>:element-type</item> \n      <item>:end1</item> \n      <item>:end2</item> \n      <item>:end</item> \n      <item>:error</item> \n      <item>:escape</item> \n      <item>:external</item> \n      <item>:from-end</item> \n      <item>:gensym</item> \n      <item>:host</item> \n      <item>:if-does-not-exist:pretty</item> \n      <item>:if-exists:print</item> \n      <item>:include:print-function</item> \n      <item>:index</item> \n      <item>:inherited</item> \n      <item>:initial-contents</item> \n      <item>:initial-element</item> \n      <item>:initial-offset</item> \n      <item>:initial-value</item> \n      <item>:input</item> \n      <item>:internal:size</item> \n      <item>:io</item> \n      <item>:junk-allowed</item> \n      <item>:key</item> \n      <item>:length</item> \n      <item>:level</item> \n      <item>:named</item> \n      <item>:name</item> \n      <item>:new-version</item> \n      <item>:nicknames</item> \n      <item>:output-file</item> \n      <item>:output</item> \n      <item>:overwrite</item> \n      <item>:predicate</item> \n      <item>:preserve-whitespace</item> \n      <item>:probe</item> \n      <item>:radix</item> \n      <item>:read-only</item> \n      <item>:rehash-size</item> \n      <item>:rehash-threshold</item> \n      <item>:rename-and-delete</item> \n      <item>:rename</item> \n      <item>:start1</item> \n      <item>:start2</item> \n      <item>:start</item> \n      <item>:stream</item> \n      <item>:supersede</item> \n      <item>:test</item> \n      <item>:test-not</item> \n      <item>:type</item> \n      <item>:use</item> \n      <item>:verbose</item> \n      <item>:version</item> \n    </list>\n    <list name=\"variables\">\n      <item>*applyhook*</item>\n      <item>*break-on-signals*</item>\n      <item>*break-on-signals*</item>\n      <item>*break-on-warnings*</item>\n      <item>*compile-file-pathname*</item>\n      <item>*compile-file-pathname*</item>\n      <item>*compile-file-truename*</item>\n      <item>*compile-file-truename*</item>\n      <item>*compile-print*</item>\n      <item>*compile-verbose*</item>\n      <item>*compile-verbose*</item>\n      <item>*debugger-hook*</item>\n      <item>*debug-io*</item>\n      <item>*default-pathname-defaults*</item>\n      <item>*error-output*</item>\n      <item>*evalhook*</item>\n      <item>*features*</item>\n      <item>*gensym-counter*</item>\n      <item>*load-pathname*</item>\n      <item>*load-print*</item>\n      <item>*load-truename*</item>\n      <item>*load-verbose*</item>\n      <item>*macroexpand-hook*</item>\n      <item>*modules*</item>\n      <item>*package*</item>\n      <item>*print-array*</item>\n      <item>*print-base*</item>\n      <item>*print-case*</item>\n      <item>*print-circle*</item>\n      <item>*print-escape*</item>\n      <item>*print-gensym*</item>\n      <item>*print-length*</item>\n      <item>*print-level*</item>\n      <item>*print-lines*</item>\n      <item>*print-miser-width*</item>\n      <item>*print-miser-width*</item>\n      <item>*print-pprint-dispatch*</item>\n      <item>*print-pprint-dispatch*</item>\n      <item>*print-pretty*</item>\n      <item>*print-radix*</item>\n      <item>*print-readably*</item>\n      <item>*print-right-margin*</item>\n      <item>*print-right-margin*</item>\n      <item>*query-io*</item>\n      <item>*random-state*</item>\n      <item>*read-base*</item>\n      <item>*read-default-float-format*</item>\n      <item>*read-eval*</item>\n      <item>*read-suppress*</item>\n      <item>*readtable*</item>\n      <item>*standard-input*</item>\n      <item>*standard-output*</item>\n      <item>*terminal-io*</item>\n      <item>*trace-output*</item>\n    </list>\n\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\";+\\s*BEGIN.*$\" beginRegion=\"region\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\";+\\s*END.*$\" endRegion=\"region\"/>\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\";.*$\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"#\" char1=\"|\" beginRegion=\"region\"/>\n        <DetectChar attribute=\"Brackets\" context=\"#stay\" char=\"(\"/>\n        <DetectChar attribute=\"Brackets\" context=\"#stay\" char=\")\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"symbols\"/>\n        <keyword attribute=\"Modifier\" context=\"#stay\" String=\"modifiers\"/>\n        <keyword attribute=\"Variable\" context=\"#stay\" String=\"variables\"/>\n        <keyword attribute=\"Definition\" context=\"function_decl\" String=\"definitions\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Char\" context=\"SpecialNumber\" String=\"#[bodxei]\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"#[tf]\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n      </context>\n      <context name=\"MultiLineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"|\" char1=\"#\" endRegion=\"region\"/>\n      </context>\n      <context name=\"function_decl\" attribute=\"Function\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\s*[A-Za-z0-9-+\\&lt;\\&gt;//\\*]*\\s*\" />\n      </context>\n      <context name=\"SpecialNumber\" attribute=\"Normal\" lineEndContext=\"#pop\">\n        <Float attribute=\"Float\" context=\"#pop\"/>\n        <Int attribute=\"Decimal\" context=\"#pop\"/>\n        <HlCOct attribute=\"BaseN\" context=\"#pop\"/>\n        <HlCHex attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\"      defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Operator\"    defStyleNum=\"dsOperator\"/>\n      <itemData name=\"Modifier\"    defStyleNum=\"dsBuiltIn\"/>\n      <itemData name=\"Variable\"    defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Definition\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"BaseN\"       defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"       defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Function\"    defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Char\"        defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"      defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\" defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n      <itemData name=\"Brackets\"    defStyleNum=\"dsNormal\" color=\"#0000ff\" selColor=\"#00ff00\" bold=\"1\" italic=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" weakDeliminator=\"-+*?!&lt;&gt;=/:#\\\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";;\" />\n      <comment name=\"multiLine\" start=\"#|\" end=\"|#\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/component-pascal.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Author: Werner Braun <wb@o3-software.de> -->\n<!-- 29.05.2003 wb mailed to the kate-team (cullmann) -->\n<!-- 23.05.2003 wb added *.bro File-Type for GPCP Browser output-->\n<!-- 09.05.2003 wb nested comments allowed (maximum two level nesting) -->\n<!-- 07.04.2003 wb IN Problem solved -->\n<!-- 06.05.2003 wb NEW without ( -->\n<!-- 22.04.2003 wb Minor bugfixes -->\n<!-- 19.04.2003 wb Some more Enhancements -->\n<!-- 18.04.2003 wb Enhancenment for Maior / Minor Comments and Full / ReadOnly Exports, Folds for Procedures, Records, Comments -->\n<!-- 17.04.2003 wb Enhancements for Relation and Operators -->\n<language name=\"Component-Pascal\" version=\"2\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.cp;*.bro\" mimetype=\"text/x-component-pascal\" author=\"Werner Braun (wb@o3-software.de)\" license=\"\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>BEGIN</item>\n\t\t\t<item>BY</item>\n\t\t\t<item>CASE</item>\n\t\t\t<item>CLOSE</item>\n\t\t\t<item>CONST</item>\n\t\t\t<item>DO</item>\n\t\t\t<item>ELSE</item>\n\t\t\t<item>ELSIF</item>\n\t\t\t<item>END</item>\n\t\t\t<item>FOR</item>\n\t\t\t<item>IF</item>\n\t\t\t<item>IMPORT</item>\n\t\t\t<item>LOOP</item>\n\t\t\t<item>MODULE</item>\n\t\t\t<item>NEW</item>\n\t\t\t<item>OF</item>\n\t\t\t<item>OUT</item>\n\t\t\t<item>PROCEDURE</item>\n\t\t\t<item>REPEAT</item>\n\t\t\t<item>THEN</item>\n\t\t\t<item>TO</item>\n\t\t\t<item>TYPE</item>\n\t\t\t<item>UNTIL</item>\n\t\t\t<item>VAR</item>\n\t\t\t<item>WHILE</item>\n\t\t\t<item>WITH</item>\n\t\t</list>\n\t\t<list name=\"exits\">\n\t\t\t<item>ASSERT</item>\n\t\t\t<item>EXIT</item>\n\t\t\t<item>HALT</item>\n\t\t\t<item>RETURN</item>\n\t\t</list>\n\t\t<list name=\"types\">\n\t\t\t<item>ANYPTR</item>\n\t\t\t<item>ANYREC</item>\n\t\t\t<item>ARRAY</item>\n\t\t\t<item>BOOLEAN</item>\n\t\t\t<item>SHORTCHAR</item>\n\t\t\t<item>CHAR</item>\n\t\t\t<item>BYTE</item>\n\t\t\t<item>SHORTINT</item>\n\t\t\t<item>INTEGER</item>\n\t\t\t<item>LONGINT</item>\n\t\t\t<item>POINTER</item>\n\t\t\t<item>RECORD</item>\n\t\t\t<item>SHORTREAL</item>\n\t\t\t<item>REAL</item>\n\t\t\t<item>SET</item>\n\t\t</list>\n\t\t<list name=\"attributes\">\n\t\t\t<item>ABSTRACT</item>\n\t\t\t<item>EMPTY</item>\n\t\t\t<item>EXTENSIBLE</item>\n\t\t\t<item>LIMITED</item>\n\t\t</list>\n\t\t<list name=\"builtins\">\n\t\t\t<item>ABS</item>\n\t\t\t<item>ASH</item>\n\t\t\t<item>BITS</item>\n\t\t\t<item>CAP</item>\n\t\t\t<item>CHR</item>\n\t\t\t<item>DEC</item>\n\t\t\t<item>ENTIER</item>\n\t\t\t<item>EXCL</item>\n\t\t\t<item>INC</item>\n\t\t\t<item>INCL</item>\n\t\t\t<item>LEN</item>\n\t\t\t<item>LONG</item>\n\t\t\t<item>MAX</item>\n\t\t\t<item>MIN</item>\n\t\t\t<item>ODD</item>\n\t\t\t<item>ORD</item>\n\t\t\t<item>SHORT</item>\n\t\t\t<item>SIZE</item>\n\t\t</list>\n\t\t<list name=\"specials\">\n\t\t\t<item>FALSE</item>\n\t\t\t<item>INF</item>\n\t\t\t<item>NIL</item>\n\t\t\t<item>TRUE</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<StringDetect attribute=\"CommentMaior\" context=\"Comment1\" String=\"(**\" beginRegion=\"Comment\"/>\n\t\t\t\t<Detect2Chars attribute=\"CommentMinor\" context=\"Comment2\" char=\"(\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String1\" char=\"&quot;\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String2\" char=\"'\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"PROCEDURE\\s\" beginRegion=\"Proc\"/>\n\t\t\t\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"ABSTRACT;|EMPTY;|END\\s*[A-Za-z][A-Za-z0-9_]*\\;\" endRegion=\"Proc\"/>\n\t\t\t\t<RegExpr attribute=\"Type\" context=\"#stay\" String=\"RECORD\" beginRegion=\"Rec\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"END\" endRegion=\"Rec\"/>\n\t\t\t\t<StringDetect attribute=\"MemAlloc\" context=\"#stay\" String=\"NEW\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t\t<keyword attribute=\"Exit\" context=\"#stay\" String=\"exits\"/>\n\t\t\t\t<keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n\t\t\t\t<keyword attribute=\"Attribute\" context=\"#stay\" String=\"attributes\"/>\n\t\t\t\t<keyword attribute=\"Builtin\" context=\"#stay\" String=\"builtins\"/>\n\t\t\t\t<keyword attribute=\"SpecialValues\" context=\"#stay\" String=\"specials\"/>\n\t\t\t\t<RegExpr attribute=\"Integer\" context=\"#stay\" String=\"\\s[\\+|\\-]{0,1}[0-9]([0-9]*|[0-9A-F]*(H|L))\"/>\n\t\t\t\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Char\" context=\"#stay\" String=\"\\s[0-9][0-9A-F]*X\"/>\n\t\t\t\t<RegExpr attribute=\"ExportFull\" context=\"#stay\" String=\"[A-Za-z][A-Za-z0-9_]*\\*\"/>\n\t\t\t\t<RegExpr attribute=\"ExportReadOnly\" context=\"#stay\" String=\"[A-Za-z][A-Za-z0-9_]*\\-\"/>\n\t\t\t\t<RegExpr attribute=\"Relation\" context=\"#stay\" String=\"\\s(=|#|&lt;|&lt;=|&gt;|&gt;=|IN\\s|IS)\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"#stay\" String=\"\\s(\\+|\\-|OR|\\*|/|DIV|MOD|\\&amp;)\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"CommentMaior\" lineEndContext=\"#stay\" name=\"Comment1\">\n\t\t\t\t<Detect2Chars attribute=\"CommentMaior\" context=\"#pop\" char=\"*\" char1=\")\" endRegion=\"Comment\"/>\n\t\t\t\t<Detect2Chars attribute=\"CommentMinor\" context=\"CommentN\" char=\"(\" char1=\"*\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"CommentMinor\" lineEndContext=\"#stay\" name=\"Comment2\">\n\t\t\t\t<Detect2Chars attribute=\"CommentMinor\" context=\"#pop\" char=\"*\" char1=\")\" endRegion=\"Comment\"/>\n\t\t\t\t<Detect2Chars attribute=\"CommentMinor\" context=\"CommentN\" char=\"(\" char1=\"*\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"CommentMinor\" lineEndContext=\"#stay\" name=\"CommentN\">\n\t\t\t\t<Detect2Chars attribute=\"CommentMinor\" context=\"#pop\" char=\"*\" char1=\")\"/>\n\t\t\t\t<Detect2Chars attribute=\"CommentMinor\" context=\"CommentN2\" char=\"(\" char1=\"*\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"CommentMinor\" lineEndContext=\"#stay\" name=\"CommentN2\">\n\t\t\t\t<Detect2Chars attribute=\"CommentMinor\" context=\"#pop\" char=\"*\" char1=\")\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String1\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String2\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\t\t\t<itemData name=\"CommentMaior\" defStyleNum=\"dsComment\" />\n\t\t\t<itemData name=\"CommentMinor\" defStyleNum=\"dsComment\" />\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\" />\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"MemAlloc\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Exit\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Type\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Attribute\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Builtin\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Integer\" defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n\t\t\t<itemData name=\"Char\" defStyleNum=\"dsChar\" />\n\t\t\t<itemData name=\"SpecialValues\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"ExportFull\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"ExportReadOnly\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Relation\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Operator\" defStyleNum=\"dsNormal\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<keywords casesensitive=\"1\" />\n\t\t<comments>\n\t\t\t<comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n\t\t</comments>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/context.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"ConTeXt\" version=\"4\" section=\"Markup\" kateversion=\"3.4\" priority=\"8\" extensions=\"*.ctx\" mimetype=\"text/x-tex\" casesensitive=\"1\" author=\"Philipp A. (flying-sheep@web.de)\" license=\"GPL\" >\n\t<highlighting>\n\t\t<list name=\"titles\">\n\t\t\t<item>\\part</item>\n\t\t\t<item>\\chapter</item>\n\t\t\t<item>\\section</item>\n\t\t\t<item>\\subsection</item>\n\t\t\t<item>\\subsubsection</item>\n\t\t\t<item>\\title</item>\n\t\t\t<item>\\subject</item>\n\t\t\t<item>\\subsubject</item>\n\t\t\t<item>\\subsubsubject</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<!-- Normal text -->\n\t\t\t<context name=\"Normal Text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar   char=\"$\"               attribute=\"Block\" context=\"MathMode\"/>\n\t\t\t\t<Detect2Chars char=\"$\" char1=\"$\"     attribute=\"Block\" context=\"MathModeDisplay\"/>\n\t\t\t\t<RegExpr String=\"\\\\math(ematics)?\"   attribute=\"Block\" context=\"MathModeMacroFind\"/>\n\t\t\t\t<StringDetect String=\"\\startformula\" attribute=\"Block\" context=\"MathModeFormula\"/>\n\t\t\t\t<StringDetect String=\"\\starttyping\"  attribute=\"Block\" context=\"Verbatim\"/>\n\t\t\t\t<keyword String=\"titles\"             attribute=\"Section\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"Common\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Macro -->\n\t\t\t<context name=\"Macro\" attribute=\"Macro\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"[a-zA-Z_]+[a-zA-Z@_]*\" attribute=\"Macro\" context=\"#pop\"/>\n\t\t\t\t<RegExpr String=\"[^a-zA-Z_]\"            attribute=\"Macro\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Comment -->\n\t\t\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr String=\"(FIXME|TODO):?\" attribute=\"Alert\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Math Modes -->\n\t\t\t<context name=\"MathMode\" attribute=\"Math\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar   char=\"$\"               attribute=\"Block\" context=\"#pop\"/>\n\t\t\t\t<Detect2Chars char=\"$\" char1=\"$\"     attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<StringDetect String=\"\\stopformula\"  attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"MathModeCommon\"/>\n\t\t\t</context>\n\t\t\t<context name=\"MathModeMacroFind\" attribute=\"Math\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar   char=\"{\"               attribute=\"Brace\" context=\"#popMathModeMacro\"/>\n\t\t\t</context>\n\t\t\t<context name=\"MathModeMacro\" attribute=\"Math\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar   char=\"{\"               attribute=\"Brace\" context=\"MathModeMacro\"/>\n\t\t\t\t<DetectChar   char=\"}\"               attribute=\"Brace\" context=\"#pop\"/>\n\t\t\t\t<DetectChar   char=\"$\"               attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars char=\"$\" char1=\"$\"     attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<StringDetect String=\"\\stopformula\"  attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"MathModeCommon\"/>\n\t\t\t</context>\n\t\t\t<context name=\"MathModeDisplay\" attribute=\"Math\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar   char=\"$\"               attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars char=\"$\" char1=\"$\"     attribute=\"Block\" context=\"#pop\"/>\n\t\t\t\t<StringDetect String=\"\\stopformula\"  attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"MathModeCommon\"/>\n\t\t\t</context>\n\t\t\t<context name=\"MathModeFormula\" attribute=\"Math\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar   char=\"$\"               attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars char=\"$\" char1=\"$\"     attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<StringDetect String=\"\\stopformula\"  attribute=\"Block\" context=\"#pop\"/>\n\t\t\t\t<IncludeRules context=\"MathModeCommon\"/>\n\t\t\t</context>\n\t\t\t<context name=\"MathModeCommon\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar   char=\"^\"               attribute=\"Brace\" context=\"#stay\"/>\n\t\t\t\t<DetectChar   char=\"_\"               attribute=\"Brace\" context=\"#stay\"/>\n\t\t\t\t<StringDetect String=\"\\startformula\" attribute=\"Error\" context=\"#stay\"/>\n\t\t\t\t<StringDetect String=\"\\text\"         attribute=\"Block\" context=\"MathModeTextFind\"/>\n\t\t\t\t<IncludeRules context=\"Common\"/>\n\t\t\t</context>\n\t\t\t<!--Math text-->\n\t\t\t<context name=\"MathModeTextFind\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar char=\"{\" attribute=\"Brace\" context=\"#popMathModeText\"/>\n\t\t\t</context>\n\t\t\t<context name=\"MathModeText\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar char=\"{\" attribute=\"Brace\" context=\"MathModeText\"/>\n\t\t\t\t<DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\"/>\n\t\t\t\t<IncludeRules context=\"Normal Text\"/>\n\t\t\t</context>\n\n\t\t\t<!--Verbatim TODO: \\startC support-->\n\t\t\t<context name=\"Verbatim\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n\t\t\t\t<StringDetect String=\"\\stoptyping\"  attribute=\"Block\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<!--Common-->\n\t\t\t<context name=\"Common\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n\t\t\t\t<RegExpr String=\"\\\\start([a-zA-Z_]+)\" attribute=\"Block\" context=\"#stay\" beginRegion=\"block\"/>\n\t\t\t\t<RegExpr String=\"\\\\stop([a-zA-Z_]+)\"  attribute=\"Block\" context=\"#stay\" endRegion=\"block\"/>\n\t\t\t\t<DetectChar char=\"\\\" attribute=\"Macro\"   context=\"Macro\"/>\n\t\t\t\t<DetectChar char=\"{\" attribute=\"Brace\"   context=\"#stay\" beginRegion=\"block\"/>\n\t\t\t\t<DetectChar char=\"}\" attribute=\"Brace\"   context=\"#stay\" endRegion=\"block\"/>\n\t\t\t</context>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"                            /><!--(Hi, I’m text)-->\n\t\t\t<itemData name=\"Comment\"     defStyleNum=\"dsComment\"                           /><!--(%Comment)-->\n\t\t\t<itemData name=\"Section\"     defStyleNum=\"dsKeyword\"                           /><!--\\section{(Fancy!)}-->\n\t\t\t<itemData name=\"Alert\"       defStyleNum=\"dsAlert\"        spellChecking=\"false\"/><!--%(TODO):do sth.!-->\n\t\t\t<itemData name=\"Brace\"       defStyleNum=\"dsChar\"         spellChecking=\"false\"/><!--({})-->\n\t\t\t<itemData name=\"Math\"        defStyleNum=\"dsOthers\"       spellChecking=\"false\"/><!--($5$)-->\n\t\t\t<itemData name=\"Macro\"       defStyleNum=\"dsFunction\"     spellChecking=\"false\"/><!--(\\foo)-->\n\t\t\t<itemData name=\"Block\"       defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/><!--\\start(bar), \\stop(bar)-->\n\t\t\t<itemData name=\"Error\"       defStyleNum=\"dsError\"        spellChecking=\"false\"/><!--$($$)-->\n\t\t\t<itemData name=\"Verbatim\"    defStyleNum=\"dsString\"       spellChecking=\"false\"/><!--\\starttyping(eggs)\\stoptyping, \\definetyping[C] \\startC(umm…)\\stopC-->\n\t\t</itemDatas>\n\t</highlighting>\n\n\t<general>\n\t\t<keywords weakDeliminator=\"\\\" wordWrapDeliminator=\",{}[]\"/>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"%\" />\n\t\t</comments>\n\t</general>\n\n\t<spellchecking>\n\t\t<encodings>\n\t\t\t<encoding string=\"''\" ignored=\"true\" />\n\t\t</encodings>\n\t</spellchecking>\n</language>\n\n<!-- kate: space-indent off; indent-width 4; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cpp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY space \" \">\n    <!ENTITY separators \",&#59;\">\n    <!ENTITY ns_punctuators \"!&#37;&space;&amp;()+-/.*&lt;=&gt;?[]{|}~^&separators;\">\n]>\n<!--\n  Copyright (c) 2012 by Alex Turbov (i.zaufi@gmail.com)\n  -->\n<language\n    name=\"C++\"\n    section=\"Sources\"\n    version=\"7\"\n    kateversion=\"5.0\"\n    indenter=\"cstyle\"\n    style=\"C++\"\n    mimetype=\"text/x-c++src;text/x-c++hdr;text/x-chdr\"\n    extensions=\"*.c++;*.cxx;*.cpp;*.cc;*.C;*.cu;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;*.cuh;*.ino;*.pde;*.moc\"\n    author=\"Alex Turbov (i.zaufi@gmail.com)\"\n    license=\"LGPL\"\n    priority=\"9\"\n  >\n<!--\n  The main purpose of this file is to hold Qt extensions syntax in a single place,\n  so later it can be included (using IncludeRules) to other (C++ based) syntaxes.\n\n  Based on Qt 5 documentation (http://doc.qt.io/qt-5)\n-->\n<highlighting>\n  <list name=\"QtMacros\">\n    <item>emit</item>\n    <item>signals</item>\n    <item>slots</item>\n    <item>foreach</item>\n    <item>forever</item>\n    <item>SIGNAL</item>\n    <item>SLOT</item>\n    <!-- http://doc.qt.io/qt-5/qapplication.html#macros -->\n    <item>qApp</item>\n    <!-- http://doc.qt.io/qt-5/qcoreapplication.html#macros -->\n    <item>Q_COREAPP_STARTUP_FUNCTION</item>\n    <item>Q_DECLARE_TR_FUNCTIONS</item>\n    <!-- QObject related macros from http://doc.qt.io/qt-5/qobject.html#macros -->\n    <item>QT_NO_NARROWING_CONVERSIONS_IN_CONNECT</item>\n    <item>Q_CLASSINFO</item>\n    <item>Q_DISABLE_COPY</item>\n    <item>Q_EMIT</item>\n    <item>Q_ENUM</item>\n    <item>Q_ENUMS</item>\n    <item>Q_FLAG</item>\n    <item>Q_FLAGS</item>\n    <item>Q_GADGET</item>\n    <item>Q_INTERFACES</item>\n    <item>Q_INVOKABLE</item>\n    <item>Q_OBJECT</item>\n    <item>Q_PROPERTY</item>\n    <item>Q_REVISION</item>\n    <item>Q_SET_OBJECT_NAME</item>\n    <item>Q_SIGNAL</item>\n    <item>Q_SIGNALS</item>\n    <item>Q_SLOT</item>\n    <item>Q_SLOTS</item>\n    <!-- Various macros from:\n        http://doc.qt.io/qt-5/qmetatype.html#macros\n        http://doc.qt.io/qt-5/qbytearray.html#macros\n        http://doc.qt.io/qt-5/qstring.html#macros\n        http://doc.qt.io/qt-5/qurl.html#macros\n      -->\n    <item>Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE</item>\n    <item>Q_DECLARE_METATYPE</item>\n    <item>Q_DECLARE_OPAQUE_POINTER</item>\n    <item>Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE</item>\n    <item>Q_DECLARE_SMART_POINTER_METATYPE</item>\n    <item>QT_NO_CAST_FROM_BYTEARRAY</item>\n    <item>QT_NO_CAST_FROM_ASCII</item>\n    <item>QT_NO_CAST_TO_ASCII</item>\n    <item>QT_RESTRICTED_CAST_FROM_ASCII</item>\n    <item>QT_NO_URL_CAST_FROM_STRING</item>\n    <item>QT_USE_QSTRINGBUILDER</item>\n    <!-- QtTest macros: http://doc.qt.io/qt-5/qtest.html#macros -->\n    <item>QBENCHMARK</item>\n    <item>QBENCHMARK_ONCE</item>\n    <item>QCOMPARE</item>\n    <item>QEXPECT_FAIL</item>\n    <item>QFAIL</item>\n    <item>QFETCH</item>\n    <item>QFINDTESTDATA</item>\n    <item>QSKIP</item>\n    <item>QTEST</item>\n    <item>QTEST_APPLESS_MAIN</item>\n    <item>QTEST_GUILESS_MAIN</item>\n    <item>QTEST_MAIN</item>\n    <item>QTRY_COMPARE</item>\n    <item>QTRY_COMPARE_WITH_TIMEOUT</item>\n    <item>QTRY_VERIFY2</item>\n    <item>QTRY_VERIFY</item>\n    <item>QTRY_VERIFY2_WITH_TIMEOUT</item>\n    <item>QTRY_VERIFY_WITH_TIMEOUT</item>\n    <item>QVERIFY2</item>\n    <item>QVERIFY</item>\n    <item>QVERIFY_EXCEPTION_THROWN</item>\n    <item>QWARN</item>\n    <!-- http://doc.qt.io/qt-5/qaxfactory.html#macros -->\n    <item>QAXCLASS</item>\n    <item>QAXFACTORY_BEGIN</item>\n    <item>QAXFACTORY_DEFAULT</item>\n    <item>QAXFACTORY_END</item>\n    <item>QAXFACTORY_EXPORT</item>\n    <item>QAXTYPE</item>\n    <!-- http://doc.qt.io/qt-5/qdesignercustomwidgetinterface.html#macros -->\n    <item>QDESIGNER_WIDGET_EXPORT</item>\n    <!-- http://doc.qt.io/qt-5/qqmlengine.html#macros -->\n    <item>QML_DECLARE_TYPE</item>\n    <item>QML_DECLARE_TYPEINFO</item>\n    <!-- http://doc.qt.io/qt-5/qmetaobject.html#macros -->\n    <item>Q_ARG</item>\n    <item>Q_RETURN_ARG</item>\n    <!-- http://doc.qt.io/qt-5/qatomicpointer.html#macros -->\n    <item>Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_SOMETIMES_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_WAIT_FREE</item>\n    <item>Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_NOT_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_SOMETIMES_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE</item>\n    <item>Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE</item>\n    <item>Q_ATOMIC_POINTER_TEST_AND_SET_IS_WAIT_FREE</item>\n    <!-- http://doc.qt.io/qt-5/qextensionmanager.html#macros -->\n    <item>Q_DECLARE_EXTENSION_INTERFACE</item>\n    <!-- http://doc.qt.io/qt-5/qtplugin.html#macros -->\n    <item>Q_DECLARE_INTERFACE</item>\n    <item>Q_IMPORT_PLUGIN</item>\n    <item>Q_PLUGIN_METADATA</item>\n    <!-- http://doc.qt.io/qt-5/qdbusabstractadaptor.html#macros -->\n    <item>Q_NOREPLY</item>\n    <!-- http://doc.qt.io/qt-5/qscriptengine.html#macros -->\n    <item>Q_SCRIPT_DECLARE_QMETAOBJECT</item>\n    <!-- http://doc.qt.io/qt-5/qwidget.html#macros -->\n    <item>QWIDGETSIZE_MAX</item>\n    <!-- List of Qt macros obtained by\n         part/syntax/data/get-Qt-macros.sh for qglobal.h qfeatures.h qconfig.h\n      -->\n    <item>QT_ASCII_CAST_WARN</item>\n    <item>QT_CATCH</item>\n    <item>QT_COMPILER_SUPPORTS_AVX</item>\n    <item>QT_COMPILER_SUPPORTS_AVX2</item>\n    <item>QT_COMPILER_SUPPORTS_SSE2</item>\n    <item>QT_COMPILER_SUPPORTS_SSE3</item>\n    <item>QT_COMPILER_SUPPORTS_SSE4_1</item>\n    <item>QT_COMPILER_SUPPORTS_SSE4_2</item>\n    <item>QT_COMPILER_SUPPORTS_SSSE3</item>\n    <item>QT_DEBUG</item>\n    <item>QT_DEPRECATED</item>\n    <item>QT_DEPRECATED_CONSTRUCTOR</item>\n    <item>QT_DEPRECATED_SINCE</item>\n    <item>QT_DEPRECATED_VARIABLE</item>\n    <item>QT_DEPRECATED_X</item>\n    <item>QT_DISABLE_DEPRECATED_BEFORE</item>\n    <item>QT_EMULATED_ALIGNOF</item>\n    <item>QT_ENSURE_STACK_ALIGNED_FOR_SSE</item>\n    <item>QT_FASTCALL</item>\n    <item>QT_FORWARD_DECLARE_CLASS</item>\n    <item>QT_FORWARD_DECLARE_STRUCT</item>\n    <item>QT_IOS_DEPLOYMENT_TARGET_BELOW</item>\n    <item>QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE</item>\n    <item>QT_LARGEFILE_SUPPORT</item>\n    <item>QT_LINKED_OPENSSL</item>\n    <item>QT_MAC_DEPLOYMENT_TARGET_BELOW</item>\n    <item>QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE</item>\n    <item>QT_MOC_COMPAT</item>\n    <item>QT_MODULE</item>\n    <item>QT_NO_ACCESSIBILITY</item>\n    <item>QT_NO_ANIMATION</item>\n    <item>QT_NO_BEARERMANAGEMENT</item>\n    <item>QT_NO_BIG_CODECS</item>\n    <item>QT_NO_BUTTONGROUP</item>\n    <item>QT_NO_CALENDARWIDGET</item>\n    <item>QT_NO_CODECS</item>\n    <item>QT_NO_COLORDIALOG</item>\n    <item>QT_NO_COLUMNVIEW</item>\n    <item>QT_NO_COMBOBOX</item>\n    <item>QT_NO_COMPLETER</item>\n    <item>QT_NO_CONTEXTMENU</item>\n    <item>QT_NO_CRASHHANDLER</item>\n    <item>QT_NO_CUPS</item>\n    <item>QT_NO_DATAWIDGETMAPPER</item>\n    <item>QT_NO_DATESTRING</item>\n    <item>QT_NO_DATETIMEEDIT</item>\n    <item>QT_NO_DBUS</item>\n    <item>QT_NO_DIAL</item>\n    <item>QT_NO_DIRMODEL</item>\n    <item>QT_NO_DOCKWIDGET</item>\n    <item>QT_NO_DRAGANDDROP</item>\n    <item>QT_NO_ERRORMESSAGE</item>\n    <item>QT_NO_EXCEPTIONS</item>\n    <item>QT_NO_FILEDIALOG</item>\n    <item>QT_NO_FILESYSTEMWATCHER</item>\n    <item>QT_NO_FONTCOMBOBOX</item>\n    <item>QT_NO_FONTDIALOG</item>\n    <item>QT_NO_FSCOMPLETER</item>\n    <item>QT_NO_FTP</item>\n    <item>QT_NO_GRAPHICSEFFECT</item>\n    <item>QT_NO_GRAPHICSVIEW</item>\n    <item>QT_NO_ICONV</item>\n    <item>QT_NO_IDENTITYPROXYMODEL</item>\n    <item>QT_NO_IM</item>\n    <item>QT_NO_IMAGEFORMATPLUGIN</item>\n    <item>QT_NO_IMAGEFORMAT_JPEG</item>\n    <item>QT_NO_INPUTDIALOG</item>\n    <item>QT_NO_ITEMVIEWS</item>\n    <item>QT_NO_KEYSEQUENCEEDIT</item>\n    <item>QT_NO_LISTVIEW</item>\n    <item>QT_NO_LISTWIDGET</item>\n    <item>QT_NO_LOCALSERVER</item>\n    <item>QT_NO_MAINWINDOW</item>\n    <item>QT_NO_MDIAREA</item>\n    <item>QT_NO_MENU</item>\n    <item>QT_NO_MENUBAR</item>\n    <item>QT_NO_MULTIPROCESS</item>\n    <item>QT_NO_NETWORKDISKCACHE</item>\n    <item>QT_NO_NETWORKPROXY</item>\n    <item>QT_NO_OPENVG</item>\n    <item>QT_NO_PAINT_DEBUG</item>\n    <item>QT_NO_PDF</item>\n    <item>QT_NO_PRINTDIALOG</item>\n    <item>QT_NO_PRINTER</item>\n    <item>QT_NO_PRINTPREVIEWDIALOG</item>\n    <item>QT_NO_PRINTPREVIEWWIDGET</item>\n    <item>QT_NO_PROCESS</item>\n    <item>QT_NO_PROGRESSDIALOG</item>\n    <item>QT_NO_PROXYMODEL</item>\n    <item>QT_NO_SCROLLAREA</item>\n    <item>QT_NO_SCROLLBAR</item>\n    <item>QT_NO_SHAREDMEMORY</item>\n    <item>QT_NO_SOCKETNOTIFIER</item>\n    <item>QT_NO_SOCKS5</item>\n    <item>QT_NO_SORTFILTERPROXYMODEL</item>\n    <item>QT_NO_SPINBOX</item>\n    <item>QT_NO_SPLITTER</item>\n    <item>QT_NO_STANDARDITEMMODEL</item>\n    <item>QT_NO_STATEMACHINE</item>\n    <item>QT_NO_STRINGLISTMODEL</item>\n    <item>QT_NO_STYLE_FUSION</item>\n    <item>QT_NO_STYLE_STYLESHEET</item>\n    <item>QT_NO_STYLE_WINDOWSCE</item>\n    <item>QT_NO_STYLE_WINDOWSMOBILE</item>\n    <item>QT_NO_STYLE_WINDOWSVISTA</item>\n    <item>QT_NO_STYLE_WINDOWSXP</item>\n    <item>QT_NO_SYNTAXHIGHLIGHTER</item>\n    <item>QT_NO_SYSTEMSEMAPHORE</item>\n    <item>QT_NO_TABBAR</item>\n    <item>QT_NO_TABLEVIEW</item>\n    <item>QT_NO_TABLEWIDGET</item>\n    <item>QT_NO_TABWIDGET</item>\n    <item>QT_NO_TEXTBROWSER</item>\n    <item>QT_NO_TEXTEDIT</item>\n    <item>QT_NO_TEXTODFWRITER</item>\n    <item>QT_NO_TOOLBAR</item>\n    <item>QT_NO_TOOLBOX</item>\n    <item>QT_NO_TOOLBUTTON</item>\n    <item>QT_NO_TREEVIEW</item>\n    <item>QT_NO_TREEWIDGET</item>\n    <item>QT_NO_UNDOGROUP</item>\n    <item>QT_NO_UNDOSTACK</item>\n    <item>QT_NO_UNDOVIEW</item>\n    <item>QT_NO_UNSHARABLE_CONTAINERS</item>\n    <item>QT_NO_WARNINGS</item>\n    <item>QT_NO_WHATSTHIS</item>\n    <item>QT_NO_WIZARD</item>\n    <item>QT_NO_XMLSTREAMREADER</item>\n    <item>QT_NO_XMLSTREAMWRITER</item>\n    <item>QT_NO_ZLIB</item>\n    <item>QT_OSX_DEPLOYMENT_TARGET_BELOW</item>\n    <item>QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE</item>\n    <item>QT_POINTER_SIZE</item>\n    <item>QT_PREPEND_NAMESPACE</item>\n    <item>QT_QPA_DEFAULT_PLATFORM_NAME</item>\n    <item>QT_REDUCE_RELOCATIONS</item>\n    <item>QT_REQUIRE_VERSION</item>\n    <item>QT_RETHROW</item>\n    <item>QT_SHARED</item>\n    <item>QT_STATIC</item>\n    <item>QT_STRINGIFY</item>\n    <item>QT_STRINGIFY2</item>\n    <item>QT_SUPPORTS</item>\n    <item>QT_TERMINATE_ON_EXCEPTION</item>\n    <item>QT_THREADSAFE_CLOEXEC</item>\n    <item>QT_THROW</item>\n    <item>QT_TRANSLATE_NOOP</item>\n    <item>QT_TRANSLATE_NOOP3</item>\n    <item>QT_TRANSLATE_NOOP3_UTF8</item>\n    <item>QT_TRANSLATE_NOOP_UTF8</item>\n    <item>QT_TRID_NOOP</item>\n    <item>QT_TRY</item>\n    <item>QT_TR_NOOP</item>\n    <item>QT_TR_NOOP_UTF8</item>\n    <item>QT_USE_NAMESPACE</item>\n    <item>QT_VERSION</item>\n    <item>QT_VERSION_CHECK</item>\n    <item>QT_VERSION_MAJOR</item>\n    <item>QT_VERSION_MINOR</item>\n    <item>QT_VERSION_PATCH</item>\n    <item>QT_VERSION_STR</item>\n    <item>QT_VISIBILITY_AVAILABLE</item>\n    <item>QT_WIN_CALLBACK</item>\n    <item>Q_ALIGNOF</item>\n    <item>Q_ALWAYS_INLINE</item>\n    <item>Q_ASSERT</item>\n    <item>Q_ASSERT_X</item>\n    <item>Q_ASSUME</item>\n    <item>Q_ATTRIBUTE_FORMAT_PRINTF</item>\n    <item>Q_BIG_ENDIAN</item>\n    <item>Q_BYTE_ORDER</item>\n    <item>Q_CC_BOR</item>\n    <item>Q_CC_CDS</item>\n    <item>Q_CC_COMEAU</item>\n    <item>Q_CC_DEC</item>\n    <item>Q_CC_EDG</item>\n    <item>Q_CC_GHS</item>\n    <item>Q_CC_GNU</item>\n    <item>Q_CC_HIGHC</item>\n    <item>Q_CC_HPACC</item>\n    <item>Q_CC_INTEL</item>\n    <item>Q_CC_KAI</item>\n    <item>Q_CC_MIPS</item>\n    <item>Q_CC_MSVC</item>\n    <item>Q_CC_OC</item>\n    <item>Q_CC_PGI</item>\n    <item>Q_CC_SUN</item>\n    <item>Q_CC_SYM</item>\n    <item>Q_CC_USLC</item>\n    <item>Q_CC_WAT</item>\n    <item>Q_CHECK_PTR</item>\n    <item>Q_CHECK_PTRx</item>\n    <item>Q_CLEANUP_RESOURCE</item>\n    <item>Q_CONSTRUCTOR_FUNCTION</item>\n    <item>Q_CONSTRUCTOR_FUNCTION0</item>\n    <item>Q_D</item>\n    <item>Q_DECLARE_PRIVATE</item>\n    <item>Q_DECLARE_PRIVATE_D</item>\n    <item>Q_DECLARE_PUBLIC</item>\n    <item>Q_DECLARE_TYPEINFO</item>\n    <item>Q_DECL_CONSTEXPR</item>\n    <item>Q_DECL_EXPORT</item>\n    <item>Q_DECL_FINAL</item>\n    <item>Q_DECL_IMPORT</item>\n    <item>Q_DECL_NOEXCEPT</item>\n    <item>Q_DECL_NOEXCEPT_EXPR</item>\n    <item>Q_DECL_NOTHROW</item>\n    <item>Q_DECL_OVERRIDE</item>\n    <item>Q_DECL_RELAXED_CONSTEXPR</item>\n    <item>Q_DESTRUCTOR_FUNCTION</item>\n    <item>Q_DESTRUCTOR_FUNCTION0</item>\n    <item>Q_DISABLE_COPY</item>\n    <item>Q_DUMMY_COMPARISON_OPERATOR</item>\n    <item>Q_FALLTHROUGH</item>\n    <item>Q_FOREACH</item>\n    <item>Q_FOREVER</item>\n    <item>Q_FORWARD_DECLARE_CF_TYPE</item>\n    <item>Q_FORWARD_DECLARE_MUTABLE_CF_TYPE</item>\n    <item>Q_FORWARD_DECLARE_OBJC_CLASS</item>\n    <item>Q_FUNC_INFO</item>\n    <item>Q_INIT_RESOURCE</item>\n    <item>Q_INLINE_TEMPLATE</item>\n    <item>Q_INT64_C</item>\n    <item>Q_LIKELY</item>\n    <item>Q_LITTLE_ENDIAN</item>\n    <item>Q_NEVER_INLINE</item>\n    <item>Q_OF_ELF</item>\n    <item>Q_OF_MACH_O</item>\n    <item>Q_OS_AIX</item>\n    <item>Q_OS_ANDROID</item>\n    <item>Q_OS_BSD4</item>\n    <item>Q_OS_BSDI</item>\n    <item>Q_OS_CYGWIN</item>\n    <item>Q_OS_DARWIN</item>\n    <item>Q_OS_DGUX</item>\n    <item>Q_OS_DYNIX</item>\n    <item>Q_OS_FREEBSD</item>\n    <item>Q_OS_HPUX</item>\n    <item>Q_OS_HURD</item>\n    <item>Q_OS_IOS</item>\n    <item>Q_OS_IRIX</item>\n    <item>Q_OS_LINUX</item>\n    <item>Q_OS_LYNX</item>\n    <item>Q_OS_MAC</item>\n    <item>Q_OS_MACOS</item>\n    <item>Q_OS_NETBSD</item>\n    <item>Q_OS_OPENBSD</item>\n    <item>Q_OS_OSF</item>\n    <item>Q_OS_OSX</item>\n    <item>Q_OS_QNX</item>\n    <item>Q_OS_RELIANT</item>\n    <item>Q_OS_SCO</item>\n    <item>Q_OS_SOLARIS</item>\n    <item>Q_OS_TVOS</item>\n    <item>Q_OS_ULTRIX</item>\n    <item>Q_OS_UNIX</item>\n    <item>Q_OS_UNIXWARE</item>\n    <item>Q_OS_WATCHOS</item>\n    <item>Q_OS_WIN</item>\n    <item>Q_OS_WIN32</item>\n    <item>Q_OS_WIN64</item>\n    <item>Q_OS_WINPHONE</item>\n    <item>Q_OS_WINRT</item>\n    <item>Q_OUTOFLINE_TEMPLATE</item>\n    <item>Q_PROCESSOR_ALPHA</item>\n    <item>Q_PROCESSOR_ARM</item>\n    <item>Q_PROCESSOR_ARM_V5</item>\n    <item>Q_PROCESSOR_ARM_V6</item>\n    <item>Q_PROCESSOR_ARM_V7</item>\n    <item>Q_PROCESSOR_AVR32</item>\n    <item>Q_PROCESSOR_BLACKFIN</item>\n    <item>Q_PROCESSOR_IA64</item>\n    <item>Q_PROCESSOR_MIPS</item>\n    <item>Q_PROCESSOR_MIPS_32</item>\n    <item>Q_PROCESSOR_MIPS_64</item>\n    <item>Q_PROCESSOR_MIPS_I</item>\n    <item>Q_PROCESSOR_MIPS_II</item>\n    <item>Q_PROCESSOR_MIPS_III</item>\n    <item>Q_PROCESSOR_MIPS_IV</item>\n    <item>Q_PROCESSOR_MIPS_V</item>\n    <item>Q_PROCESSOR_POWER</item>\n    <item>Q_PROCESSOR_POWER_32</item>\n    <item>Q_PROCESSOR_POWER_64</item>\n    <item>Q_PROCESSOR_S390</item>\n    <item>Q_PROCESSOR_S390_X</item>\n    <item>Q_PROCESSOR_SH</item>\n    <item>Q_PROCESSOR_SH_4A</item>\n    <item>Q_PROCESSOR_SPARC</item>\n    <item>Q_PROCESSOR_SPARC_V9</item>\n    <item>Q_PROCESSOR_X86</item>\n    <item>Q_PROCESSOR_X86_32</item>\n    <item>Q_PROCESSOR_X86_64</item>\n    <item>Q_Q</item>\n    <item>Q_STATIC_ASSERT</item>\n    <item>Q_STATIC_ASSERT_PRIVATE_JOIN</item>\n    <item>Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL</item>\n    <item>Q_STATIC_ASSERT_X</item>\n    <item>Q_UINT64_C</item>\n    <item>Q_UNIMPLEMENTED</item>\n    <item>Q_UNLIKELY</item>\n    <item>Q_UNREACHABLE</item>\n    <item>Q_UNUSED</item>\n    <!-- arguments for Q_DECLARE_TYPEINFO, not really macros but good if highlighted like that -->\n    <item>Q_COMPLEX_TYPE</item>\n    <item>Q_PRIMITIVE_TYPE</item>\n    <item>Q_STATIC_TYPE</item>\n    <item>Q_MOVABLE_TYPE</item>\n    <item>Q_DUMMY_TYPE</item>\n    <item>Q_RELOCATABLE_TYPE</item>\n  </list>\n\n  <list name=\"QtFunc\">\n    <!-- Global functions list from http://doc.qt.io/qt-5/qobject.html#static-public-members -->\n    <item>connect</item>\n    <item>disconnect</item>\n    <item>staticMetaObject</item>\n    <item>tr</item>\n    <item>trUtf8</item>\n    <!-- Global functions list from http://doc.qt.io/qt-5/qobject.html#related-non-members -->\n    <item>qFindChildren</item>\n    <item>qobject_cast</item>\n    <!-- Global functions list http://doc.qt.io/qt-5/qtglobal.html -->\n    <item>qAbs</item>\n    <item>qAsConst</item>\n    <item>qBound</item>\n    <item>qConstOverload</item>\n    <item>qCritical</item>\n    <item>qDebug</item>\n    <item>qEnvironmentVariableIntValue</item>\n    <item>qEnvironmentVariableIsEmpty</item>\n    <item>qEnvironmentVariableIsSet</item>\n    <item>qFloatDistance</item>\n    <item>qFormatLogMessage</item>\n    <item>qFatal</item>\n    <item>qFuzzyCompare</item>\n    <item>qFuzzyIsNull</item>\n    <item>qInfo</item>\n    <item>qMove</item>\n    <item>qInstallMessageHandler</item>\n    <item>qIsFinite</item>\n    <item>qIsInf</item>\n    <item>qIsNaN</item>\n    <item>qMakePair</item>\n    <item>qMax</item>\n    <item>qMin</item>\n    <item>qNonConstOverload</item>\n    <item>qOverload</item>\n    <item>qPrintable</item>\n    <item>qQNaN</item>\n    <item>qUtf16Printable</item>\n    <item>qUtf8Printable</item>\n    <item>qRound64</item>\n    <item>qRound</item>\n    <item>qSNaN</item>\n    <item>qSetMessagePattern</item>\n    <item>qVersion</item>\n    <item>qWarning</item>\n    <item>q_check_ptr</item>\n    <item>qgetenv</item>\n    <item>qrand</item>\n    <item>qsrand</item>\n    <item>qtTrId</item>\n    <item>qt_set_sequence_auto_mnemonic</item>\n      <!-- Global functions list from http://qt-project.org/doc/qt-4.8/qtalgorithms.html -->\n    <item>qCountLeadingZeroBits</item>\n    <item>qCountTrailingZeroBits</item>\n    <item>qBinaryFind</item>\n    <item>qCopy</item>\n    <item>qCopyBackward</item>\n    <item>qCount</item>\n    <item>qDeleteAll</item>\n    <item>qPopulationCount</item>\n    <item>qEqual</item>\n    <item>qFill</item>\n    <item>qFind</item>\n    <item>qGreater</item>\n    <item>qLess</item>\n    <item>qLowerBound</item>\n    <item>qSort</item>\n    <item>qStableSort</item>\n    <item>qSwap</item>\n    <item>qUpperBound</item>\n    <!-- Related non-members from http://doc.qt.io/qt-5/qbytearray.html#related-non-members -->\n    <item>qChecksum</item>\n    <item>qCompress</item>\n    <item>qUncompress</item>\n    <item>qsnprintf</item>\n    <item>qstrcmp</item>\n    <item>qstrcpy</item>\n    <item>qstrdup</item>\n    <item>qstricmp</item>\n    <item>qstrlen</item>\n    <item>qstrncmp</item>\n    <item>qstrncpy</item>\n    <item>qstrnicmp</item>\n    <item>qstrnlen</item>\n    <item>qvsnprintf</item>\n    <!-- http://doc.qt.io/qt-5/qhash.html#related-non-members -->\n    <item>qGlobalQHashSeed</item>\n    <item>qHash</item>\n    <item>qHashBits</item>\n    <item>qHashRange</item>\n    <item>qHashRangeCommutative</item>\n    <item>qSetGlobalQHashSeed</item>\n    <!-- http://doc.qt.io/qt-5/qmetatype.html#related-non-members -->\n    <item>qMetaTypeId</item>\n    <item>qRegisterMetaType</item>\n    <item>qRegisterMetaTypeStreamOperators</item>\n    <!-- http://doc.qt.io/qt-5/qcolor.html#related-non-members -->\n    <item>qAlpha</item>\n    <item>qBlue</item>\n    <item>qGray</item>\n    <item>qGreen</item>\n    <item>qPremultiply</item>\n    <item>qRed</item>\n    <item>qRgb</item>\n    <item>qRgba</item>\n    <item>qRgba</item>\n    <item>qRgba64</item>\n    <item>qUnpremultiply</item>\n    <!-- http://doc.qt.io/qt-5/qcoreapplication.html#related-non-members -->\n    <item>qAddPostRoutine</item>\n    <item>qRemovePostRoutine</item>\n    <!-- http://doc.qt.io/qt-5/qqmlengine.html#related-non-members -->\n    <item>qmlAttachedPropertiesObject</item>\n    <item>qmlClearTypeRegistrations</item>\n    <item>qmlContext</item>\n    <item>qmlEngine</item>\n    <item>qmlInfo</item>\n    <item>qmlProtectModule</item>\n    <item>qmlRegisterExtendedType</item>\n    <item>qmlRegisterExtendedUncreatableType</item>\n    <item>qmlRegisterInterface</item>\n    <item>qmlRegisterRevision</item>\n    <item>qmlRegisterSingletonType</item>\n    <item>qmlRegisterType</item>\n    <item>qmlRegisterTypeNotAvailable</item>\n    <item>qmlRegisterUncreatableType</item>\n    <!-- http://doc.qt.io/qt-5/qextensionmanager.html#related-non-members -->\n    <item>qt_extension</item>\n    <!-- http://doc.qt.io/qt-5/qdbusargument.html#related-non-members -->\n    <item>qDBusRegisterMetaType</item>\n    <item>qdbus_cast</item>\n  </list>\n\n  <!-- Types list from http://doc.qt.io/qt-5/qtglobal.html -->\n  <list name=\"QtTypes\">\n    <item>QtFunctionPointer</item>\n    <item>QtMessageHandler</item>\n    <item>QtMsgType</item>\n    <item>qint8</item>\n    <item>qint16</item>\n    <item>qint32</item>\n    <item>qint64</item>\n    <item>qlonglong</item>\n    <item>qptrdiff</item>\n    <item>qreal</item>\n    <item>quint8</item>\n    <item>quint16</item>\n    <item>quint32</item>\n    <item>quint64</item>\n    <item>quintptr</item>\n    <item>qulonglong</item>\n    <item>uchar</item>\n    <item>uint</item>\n    <item>ulong</item>\n    <item>ushort</item>\n    <!-- http://doc.qt.io/qt-5/qprocess.html#Q_PID-typedef -->\n    <item>Q_PID</item>\n    <!-- http://doc.qt.io/qt-5/qcolor.html#related-non-members -->\n    <item>QRgb</item>\n    <!-- http://doc.qt.io/qt-5/qscriptengine.html#related-non-members -->\n    <item>qScriptConnect</item>\n    <item>qScriptDisconnect</item>\n    <item>qScriptRegisterMetaType</item>\n    <item>qScriptRegisterSequenceMetaType</item>\n    <item>qScriptValueFromSequence</item>\n    <item>qScriptValueToSequence</item>\n  </list>\n\n  <!-- List of Qt5 classes, obtained from http://doc.qt.io/qt-5/classes.html -->\n  <list name=\"QtClasses\">\n    <!-- Extracted with regular expression  Q[A-Z0-9][A-Za-z0-9]*  -->\n    <item>Q3DBars</item>\n    <item>Q3DCamera</item>\n    <item>Q3DInputHandler</item>\n    <item>Q3DLight</item>\n    <item>Q3DObject</item>\n    <item>Q3DScatter</item>\n    <item>Q3DScene</item>\n    <item>Q3DSurface</item>\n    <item>Q3DTheme</item>\n    <item>QAbstract3DAxis</item>\n    <item>QAbstract3DGraph</item>\n    <item>QAbstract3DInputHandler</item>\n    <item>QAbstract3DSeries</item>\n    <item>QAbstractAnimation</item>\n    <item>QAbstractAxis</item>\n    <item>QAbstractBarSeries</item>\n    <item>QAbstractButton</item>\n    <item>QAbstractDataProxy</item>\n    <item>QAbstractEventDispatcher</item>\n    <item>QAbstractExtensionFactory</item>\n    <item>QAbstractExtensionManager</item>\n    <item>QAbstractFormBuilder</item>\n    <item>QAbstractGraphicsShapeItem</item>\n    <item>QAbstractItemDelegate</item>\n    <item>QAbstractItemModel</item>\n    <item>QAbstractItemView</item>\n    <item>QAbstractListModel</item>\n    <item>QAbstractMessageHandler</item>\n    <item>QAbstractNativeEventFilter</item>\n    <item>QAbstractNetworkCache</item>\n    <item>QAbstractOAuth</item>\n    <item>QAbstractOAuth2</item>\n    <item>QAbstractOAuthReplyHandler</item>\n    <item>QAbstractOpenGLFunctions</item>\n    <item>QAbstractPlanarVideoBuffer</item>\n    <item>QAbstractPrintDialog</item>\n    <item>QAbstractProxyModel</item>\n    <item>QAbstractScrollArea</item>\n    <item>QAbstractSeries</item>\n    <item>QAbstractSlider</item>\n    <item>QAbstractSocket</item>\n    <item>QAbstractSpinBox</item>\n    <item>QAbstractState</item>\n    <item>QAbstractTableModel</item>\n    <item>QAbstractTextDocumentLayout</item>\n    <item>QAbstractTransition</item>\n    <item>QAbstractUriResolver</item>\n    <item>QAbstractVideoBuffer</item>\n    <item>QAbstractVideoFilter</item>\n    <item>QAbstractVideoSurface</item>\n    <item>QAbstractXmlNodeModel</item>\n    <item>QAbstractXmlReceiver</item>\n    <item>QAccelerometer</item>\n    <item>QAccelerometerFilter</item>\n    <item>QAccelerometerReading</item>\n    <item>QAccessible</item>\n    <item>QAccessibleActionInterface</item>\n    <item>QAccessibleEditableTextInterface</item>\n    <item>QAccessibleEvent</item>\n    <item>QAccessibleInterface</item>\n    <item>QAccessibleObject</item>\n    <item>QAccessiblePlugin</item>\n    <item>QAccessibleStateChangeEvent</item>\n    <item>QAccessibleTableCellInterface</item>\n    <item>QAccessibleTableInterface</item>\n    <item>QAccessibleTableModelChangeEvent</item>\n    <item>QAccessibleTextCursorEvent</item>\n    <item>QAccessibleTextInsertEvent</item>\n    <item>QAccessibleTextInterface</item>\n    <item>QAccessibleTextRemoveEvent</item>\n    <item>QAccessibleTextSelectionEvent</item>\n    <item>QAccessibleTextUpdateEvent</item>\n    <item>QAccessibleValueChangeEvent</item>\n    <item>QAccessibleValueInterface</item>\n    <item>QAccessibleWidget</item>\n    <item>QAction</item>\n    <item>QActionEvent</item>\n    <item>QActionGroup</item>\n    <item>QAltimeter</item>\n    <item>QAltimeterFilter</item>\n    <item>QAltimeterReading</item>\n    <item>QAmbientLightFilter</item>\n    <item>QAmbientLightReading</item>\n    <item>QAmbientLightSensor</item>\n    <item>QAmbientTemperatureFilter</item>\n    <item>QAmbientTemperatureReading</item>\n    <item>QAmbientTemperatureSensor</item>\n    <item>QAndroidActivityResultReceiver</item>\n    <item>QAndroidJniEnvironment</item>\n    <item>QAndroidJniObject</item>\n    <item>QAnimationGroup</item>\n    <item>QApplication</item>\n    <item>QAreaLegendMarker</item>\n    <item>QAreaSeries</item>\n    <item>QAssociativeIterable</item>\n    <item>QAtomicInt</item>\n    <item>QAtomicInteger</item>\n    <item>QAtomicPointer</item>\n    <item>QAudioBuffer</item>\n    <item>QAudioDecoder</item>\n    <item>QAudioDecoderControl</item>\n    <item>QAudioDeviceInfo</item>\n    <item>QAudioEncoderSettings</item>\n    <item>QAudioEncoderSettingsControl</item>\n    <item>QAudioFormat</item>\n    <item>QAudioInput</item>\n    <item>QAudioInputSelectorControl</item>\n    <item>QAudioOutput</item>\n    <item>QAudioOutputSelectorControl</item>\n    <item>QAudioProbe</item>\n    <item>QAudioRecorder</item>\n    <item>QAudioRoleControl</item>\n    <item>QAuthenticator</item>\n    <item>QAxAggregated</item>\n    <item>QAxBase</item>\n    <item>QAxBindable</item>\n    <item>QAxFactory</item>\n    <item>QAxObject</item>\n    <item>QAxScript</item>\n    <item>QAxScriptEngine</item>\n    <item>QAxScriptManager</item>\n    <item>QAxSelect</item>\n    <item>QAxWidget</item>\n    <item>QBackingStore</item>\n    <item>QBar3DSeries</item>\n    <item>QBarCategoryAxis</item>\n    <item>QBarDataItem</item>\n    <item>QBarDataProxy</item>\n    <item>QBarLegendMarker</item>\n    <item>QBarSeries</item>\n    <item>QBarSet</item>\n    <item>QBasicTimer</item>\n    <item>QBitArray</item>\n    <item>QBitmap</item>\n    <item>QBluetoothAddress</item>\n    <item>QBluetoothDeviceDiscoveryAgent</item>\n    <item>QBluetoothDeviceInfo</item>\n    <item>QBluetoothHostInfo</item>\n    <item>QBluetoothLocalDevice</item>\n    <item>QBluetoothServer</item>\n    <item>QBluetoothServiceDiscoveryAgent</item>\n    <item>QBluetoothServiceInfo</item>\n    <item>QBluetoothSocket</item>\n    <item>QBluetoothTransferManager</item>\n    <item>QBluetoothTransferReply</item>\n    <item>QBluetoothTransferRequest</item>\n    <item>QBluetoothUuid</item>\n    <item>QBoxLayout</item>\n    <item>QBoxPlotLegendMarker</item>\n    <item>QBoxPlotSeries</item>\n    <item>QBoxSet</item>\n    <item>QBrush</item>\n    <item>QBuffer</item>\n    <item>QButtonGroup</item>\n    <item>QByteArray</item>\n    <item>QByteArrayList</item>\n    <item>QByteArrayMatcher</item>\n    <item>QCache</item>\n    <item>QCalendarWidget</item>\n    <item>QCamera</item>\n    <item>QCameraCaptureBufferFormatControl</item>\n    <item>QCameraCaptureDestinationControl</item>\n    <item>QCameraControl</item>\n    <item>QCameraExposure</item>\n    <item>QCameraExposureControl</item>\n    <item>QCameraFeedbackControl</item>\n    <item>QCameraFlashControl</item>\n    <item>QCameraFocus</item>\n    <item>QCameraFocusControl</item>\n    <item>QCameraFocusZone</item>\n    <item>QCameraImageCapture</item>\n    <item>QCameraImageCaptureControl</item>\n    <item>QCameraImageProcessing</item>\n    <item>QCameraImageProcessingControl</item>\n    <item>QCameraInfo</item>\n    <item>QCameraInfoControl</item>\n    <item>QCameraLocksControl</item>\n    <item>QCameraViewfinder</item>\n    <item>QCameraViewfinderSettings</item>\n    <item>QCameraViewfinderSettingsControl</item>\n    <item>QCameraViewfinderSettingsControl2</item>\n    <item>QCameraZoomControl</item>\n    <item>QCanBus</item>\n    <item>QCanBusDevice</item>\n    <item>QCanBusFactory</item>\n    <item>QCanBusFrame</item>\n    <item>QCandlestickLegendMarker</item>\n    <item>QCandlestickModelMapper</item>\n    <item>QCandlestickSeries</item>\n    <item>QCandlestickSet</item>\n    <item>QCategory3DAxis</item>\n    <item>QCategoryAxis</item>\n    <item>QChar</item>\n    <item>QChart</item>\n    <item>QChartView</item>\n    <item>QCheckBox</item>\n    <item>QChildEvent</item>\n    <item>QClipboard</item>\n    <item>QCloseEvent</item>\n    <item>QCocoaNativeContext</item>\n    <item>QCocoaWindowFunctions</item>\n    <item>QCollator</item>\n    <item>QCollatorSortKey</item>\n    <item>QColor</item>\n    <item>QColorDialog</item>\n    <item>QColormap</item>\n    <item>QColumnView</item>\n    <item>QComboBox</item>\n    <item>QCommandLineOption</item>\n    <item>QCommandLineParser</item>\n    <item>QCommandLinkButton</item>\n    <item>QCommonStyle</item>\n    <item>QCompass</item>\n    <item>QCompassFilter</item>\n    <item>QCompassReading</item>\n    <item>QCompleter</item>\n    <item>QConicalGradient</item>\n    <item>QContextMenuEvent</item>\n    <item>QContiguousCache</item>\n    <item>QCoreApplication</item>\n    <item>QCryptographicHash</item>\n    <item>QCursor</item>\n    <item>QCustom3DItem</item>\n    <item>QCustom3DLabel</item>\n    <item>QCustom3DVolume</item>\n    <item>QDataStream</item>\n    <item>QDataWidgetMapper</item>\n    <item>QDate</item>\n    <item>QDateEdit</item>\n    <item>QDateTime</item>\n    <item>QDateTimeAxis</item>\n    <item>QDateTimeEdit</item>\n    <item>QDBusAbstractAdaptor</item>\n    <item>QDBusAbstractInterface</item>\n    <item>QDBusArgument</item>\n    <item>QDBusConnection</item>\n    <item>QDBusConnectionInterface</item>\n    <item>QDBusContext</item>\n    <item>QDBusError</item>\n    <item>QDBusInterface</item>\n    <item>QDBusMessage</item>\n    <item>QDBusObjectPath</item>\n    <item>QDBusPendingCall</item>\n    <item>QDBusPendingCallWatcher</item>\n    <item>QDBusPendingReply</item>\n    <item>QDBusReply</item>\n    <item>QDBusServer</item>\n    <item>QDBusServiceWatcher</item>\n    <item>QDBusSignature</item>\n    <item>QDBusUnixFileDescriptor</item>\n    <item>QDBusVariant</item>\n    <item>QDBusVirtualObject</item>\n    <item>QDeadlineTimer</item>\n    <item>QDebug</item>\n    <item>QDebugStateSaver</item>\n    <item>QDesignerActionEditorInterface</item>\n    <item>QDesignerContainerExtension</item>\n    <item>QDesignerCustomWidgetCollectionInterface</item>\n    <item>QDesignerCustomWidgetInterface</item>\n    <item>QDesignerDynamicPropertySheetExtension</item>\n    <item>QDesignerFormEditorInterface</item>\n    <item>QDesignerFormWindowCursorInterface</item>\n    <item>QDesignerFormWindowInterface</item>\n    <item>QDesignerFormWindowManagerInterface</item>\n    <item>QDesignerMemberSheetExtension</item>\n    <item>QDesignerObjectInspectorInterface</item>\n    <item>QDesignerPropertyEditorInterface</item>\n    <item>QDesignerPropertySheetExtension</item>\n    <item>QDesignerTaskMenuExtension</item>\n    <item>QDesignerWidgetBoxInterface</item>\n    <item>QDesktopServices</item>\n    <item>QDesktopWidget</item>\n    <item>QDial</item>\n    <item>QDialog</item>\n    <item>QDialogButtonBox</item>\n    <item>QDir</item>\n    <item>QDirIterator</item>\n    <item>QDirModel</item>\n    <item>QDistanceFilter</item>\n    <item>QDistanceReading</item>\n    <item>QDistanceSensor</item>\n    <item>QDnsDomainNameRecord</item>\n    <item>QDnsHostAddressRecord</item>\n    <item>QDnsLookup</item>\n    <item>QDnsMailExchangeRecord</item>\n    <item>QDnsServiceRecord</item>\n    <item>QDnsTextRecord</item>\n    <item>QDockWidget</item>\n    <item>QDomAttr</item>\n    <item>QDomCDATASection</item>\n    <item>QDomCharacterData</item>\n    <item>QDomComment</item>\n    <item>QDomDocument</item>\n    <item>QDomDocumentFragment</item>\n    <item>QDomDocumentType</item>\n    <item>QDomElement</item>\n    <item>QDomEntity</item>\n    <item>QDomEntityReference</item>\n    <item>QDomImplementation</item>\n    <item>QDomNamedNodeMap</item>\n    <item>QDomNode</item>\n    <item>QDomNodeList</item>\n    <item>QDomNotation</item>\n    <item>QDomProcessingInstruction</item>\n    <item>QDomText</item>\n    <item>QDoubleSpinBox</item>\n    <item>QDoubleValidator</item>\n    <item>QDrag</item>\n    <item>QDragEnterEvent</item>\n    <item>QDragLeaveEvent</item>\n    <item>QDragMoveEvent</item>\n    <item>QDropEvent</item>\n    <item>QDynamicPropertyChangeEvent</item>\n    <item>QEasingCurve</item>\n    <item>QEglFSFunctions</item>\n    <item>QEGLNativeContext</item>\n    <item>QElapsedTimer</item>\n    <item>QEnableSharedFromThis</item>\n    <item>QEnterEvent</item>\n    <item>QErrorMessage</item>\n    <item>QEvent</item>\n    <item>QEventLoop</item>\n    <item>QEventLoopLocker</item>\n    <item>QEventTransition</item>\n    <item>QException</item>\n    <item>QExplicitlySharedDataPointer</item>\n    <item>QExposeEvent</item>\n    <item>QExtensionFactory</item>\n    <item>QExtensionManager</item>\n    <item>QFile</item>\n    <item>QFileDevice</item>\n    <item>QFileDialog</item>\n    <item>QFileIconProvider</item>\n    <item>QFileInfo</item>\n    <item>QFileOpenEvent</item>\n    <item>QFileSelector</item>\n    <item>QFileSystemModel</item>\n    <item>QFileSystemWatcher</item>\n    <item>QFinalState</item>\n    <item>QFlag</item>\n    <item>QFlags</item>\n    <item>QFocusEvent</item>\n    <item>QFocusFrame</item>\n    <item>QFont</item>\n    <item>QFontComboBox</item>\n    <item>QFontDatabase</item>\n    <item>QFontDialog</item>\n    <item>QFontInfo</item>\n    <item>QFontMetrics</item>\n    <item>QFontMetricsF</item>\n    <item>QFormBuilder</item>\n    <item>QFormLayout</item>\n    <item>QFrame</item>\n    <item>QFuture</item>\n    <item>QFutureIterator</item>\n    <item>QFutureSynchronizer</item>\n    <item>QFutureWatcher</item>\n    <item>QGamepad</item>\n    <item>QGenericArgument</item>\n    <item>QGenericMatrix</item>\n    <item>QGenericPlugin</item>\n    <item>QGenericPluginFactory</item>\n    <item>QGenericReturnArgument</item>\n    <item>QGeoAddress</item>\n    <item>QGeoAreaMonitorInfo</item>\n    <item>QGeoAreaMonitorSource</item>\n    <item>QGeoCircle</item>\n    <item>QGeoCodeReply</item>\n    <item>QGeoCodingManager</item>\n    <item>QGeoCodingManagerEngine</item>\n    <item>QGeoCoordinate</item>\n    <item>QGeoLocation</item>\n    <item>QGeoManeuver</item>\n    <item>QGeoPositionInfo</item>\n    <item>QGeoPositionInfoSource</item>\n    <item>QGeoPositionInfoSourceFactory</item>\n    <item>QGeoRectangle</item>\n    <item>QGeoRoute</item>\n    <item>QGeoRouteReply</item>\n    <item>QGeoRouteRequest</item>\n    <item>QGeoRouteSegment</item>\n    <item>QGeoRoutingManager</item>\n    <item>QGeoRoutingManagerEngine</item>\n    <item>QGeoSatelliteInfo</item>\n    <item>QGeoSatelliteInfoSource</item>\n    <item>QGeoServiceProvider</item>\n    <item>QGeoServiceProviderFactory</item>\n    <item>QGeoShape</item>\n    <item>QGesture</item>\n    <item>QGestureEvent</item>\n    <item>QGestureRecognizer</item>\n    <item>QGLBuffer</item>\n    <item>QGLColormap</item>\n    <item>QGLContext</item>\n    <item>QGLFormat</item>\n    <item>QGLFramebufferObject</item>\n    <item>QGLFramebufferObjectFormat</item>\n    <item>QGLFunctions</item>\n    <item>QGlobalStatic</item>\n    <item>QGLPixelBuffer</item>\n    <item>QGLShader</item>\n    <item>QGLShaderProgram</item>\n    <item>QGLWidget</item>\n    <item>QGLXNativeContext</item>\n    <item>QGlyphRun</item>\n    <item>QGradient</item>\n    <item>QGraphicsAnchor</item>\n    <item>QGraphicsAnchorLayout</item>\n    <item>QGraphicsBlurEffect</item>\n    <item>QGraphicsColorizeEffect</item>\n    <item>QGraphicsDropShadowEffect</item>\n    <item>QGraphicsEffect</item>\n    <item>QGraphicsEllipseItem</item>\n    <item>QGraphicsGridLayout</item>\n    <item>QGraphicsItem</item>\n    <item>QGraphicsItemAnimation</item>\n    <item>QGraphicsItemGroup</item>\n    <item>QGraphicsLayout</item>\n    <item>QGraphicsLayoutItem</item>\n    <item>QGraphicsLinearLayout</item>\n    <item>QGraphicsLineItem</item>\n    <item>QGraphicsObject</item>\n    <item>QGraphicsOpacityEffect</item>\n    <item>QGraphicsPathItem</item>\n    <item>QGraphicsPixmapItem</item>\n    <item>QGraphicsPolygonItem</item>\n    <item>QGraphicsProxyWidget</item>\n    <item>QGraphicsRectItem</item>\n    <item>QGraphicsRotation</item>\n    <item>QGraphicsScale</item>\n    <item>QGraphicsScene</item>\n    <item>QGraphicsSceneContextMenuEvent</item>\n    <item>QGraphicsSceneDragDropEvent</item>\n    <item>QGraphicsSceneEvent</item>\n    <item>QGraphicsSceneHelpEvent</item>\n    <item>QGraphicsSceneHoverEvent</item>\n    <item>QGraphicsSceneMouseEvent</item>\n    <item>QGraphicsSceneMoveEvent</item>\n    <item>QGraphicsSceneResizeEvent</item>\n    <item>QGraphicsSceneWheelEvent</item>\n    <item>QGraphicsSimpleTextItem</item>\n    <item>QGraphicsSvgItem</item>\n    <item>QGraphicsTextItem</item>\n    <item>QGraphicsTransform</item>\n    <item>QGraphicsVideoItem</item>\n    <item>QGraphicsView</item>\n    <item>QGraphicsWidget</item>\n    <item>QGridLayout</item>\n    <item>QGroupBox</item>\n    <item>QGuiApplication</item>\n    <item>QGyroscope</item>\n    <item>QGyroscopeFilter</item>\n    <item>QGyroscopeReading</item>\n    <item>QHash</item>\n    <item>QHashIterator</item>\n    <item>QHBarModelMapper</item>\n    <item>QHBoxLayout</item>\n    <item>QHBoxPlotModelMapper</item>\n    <item>QHCandlestickModelMapper</item>\n    <item>QHeaderView</item>\n    <item>QHeightMapSurfaceDataProxy</item>\n    <item>QHelpContentItem</item>\n    <item>QHelpContentModel</item>\n    <item>QHelpContentWidget</item>\n    <item>QHelpEngine</item>\n    <item>QHelpEngineCore</item>\n    <item>QHelpEvent</item>\n    <item>QHelpIndexModel</item>\n    <item>QHelpIndexWidget</item>\n    <item>QHelpSearchEngine</item>\n    <item>QHelpSearchQuery</item>\n    <item>QHelpSearchQueryWidget</item>\n    <item>QHelpSearchResultWidget</item>\n    <item>QHideEvent</item>\n    <item>QHistoryState</item>\n    <item>QHolsterFilter</item>\n    <item>QHolsterReading</item>\n    <item>QHolsterSensor</item>\n    <item>QHorizontalBarSeries</item>\n    <item>QHorizontalPercentBarSeries</item>\n    <item>QHorizontalStackedBarSeries</item>\n    <item>QHostAddress</item>\n    <item>QHostInfo</item>\n    <item>QHoverEvent</item>\n    <item>QHPieModelMapper</item>\n    <item>QHttpMultiPart</item>\n    <item>QHttpPart</item>\n    <item>QHXYModelMapper</item>\n    <item>QIcon</item>\n    <item>QIconDragEvent</item>\n    <item>QIconEngine</item>\n    <item>QIconEnginePlugin</item>\n    <item>QIdentityProxyModel</item>\n    <item>QImage</item>\n    <item>QImageEncoderControl</item>\n    <item>QImageEncoderSettings</item>\n    <item>QImageIOHandler</item>\n    <item>QImageIOPlugin</item>\n    <item>QImageReader</item>\n    <item>QImageWriter</item>\n    <item>QInAppProduct</item>\n    <item>QInAppStore</item>\n    <item>QInAppTransaction</item>\n    <item>QInputDialog</item>\n    <item>QInputEvent</item>\n    <item>QInputMethod</item>\n    <item>QInputMethodEvent</item>\n    <item>QInputMethodQueryEvent</item>\n    <item>QIntValidator</item>\n    <item>QIODevice</item>\n    <item>QIRProximityFilter</item>\n    <item>QIRProximityReading</item>\n    <item>QIRProximitySensor</item>\n    <item>QItemDelegate</item>\n    <item>QItemEditorCreator</item>\n    <item>QItemEditorCreatorBase</item>\n    <item>QItemEditorFactory</item>\n    <item>QItemModelBarDataProxy</item>\n    <item>QItemModelScatterDataProxy</item>\n    <item>QItemModelSurfaceDataProxy</item>\n    <item>QItemSelection</item>\n    <item>QItemSelectionModel</item>\n    <item>QItemSelectionRange</item>\n    <item>QJSEngine</item>\n    <item>QJsonArray</item>\n    <item>QJsonDocument</item>\n    <item>QJsonObject</item>\n    <item>QJsonParseError</item>\n    <item>QJsonValue</item>\n    <item>QJSValue</item>\n    <item>QJSValueIterator</item>\n    <item>QKeyEvent</item>\n    <item>QKeyEventTransition</item>\n    <item>QKeySequence</item>\n    <item>QKeySequenceEdit</item>\n    <item>QLabel</item>\n    <item>QLatin1Char</item>\n    <item>QLatin1String</item>\n    <item>QLayout</item>\n    <item>QLayoutItem</item>\n    <item>QLCDNumber</item>\n    <item>QLegend</item>\n    <item>QLegendMarker</item>\n    <item>QLibrary</item>\n    <item>QLibraryInfo</item>\n    <item>QLightFilter</item>\n    <item>QLightReading</item>\n    <item>QLightSensor</item>\n    <item>QLine</item>\n    <item>QLinearGradient</item>\n    <item>QLineEdit</item>\n    <item>QLineF</item>\n    <item>QLineSeries</item>\n    <item>QLinkedList</item>\n    <item>QLinkedListIterator</item>\n    <item>QList</item>\n    <item>QListIterator</item>\n    <item>QListView</item>\n    <item>QListWidget</item>\n    <item>QListWidgetItem</item>\n    <item>QLocale</item>\n    <item>QLocalServer</item>\n    <item>QLocalSocket</item>\n    <item>QLockFile</item>\n    <item>QLoggingCategory</item>\n    <item>QLogValue3DAxisFormatter</item>\n    <item>QLogValueAxis</item>\n    <item>QLowEnergyAdvertisingData</item>\n    <item>QLowEnergyAdvertisingParameters</item>\n    <item>QLowEnergyCharacteristic</item>\n    <item>QLowEnergyCharacteristicData</item>\n    <item>QLowEnergyConnectionParameters</item>\n    <item>QLowEnergyController</item>\n    <item>QLowEnergyDescriptor</item>\n    <item>QLowEnergyDescriptorData</item>\n    <item>QLowEnergyService</item>\n    <item>QLowEnergyServiceData</item>\n    <item>QMacCocoaViewContainer</item>\n    <item>QMacNativeWidget</item>\n    <item>QMacPasteboardMime</item>\n    <item>QMacToolBar</item>\n    <item>QMacToolBarItem</item>\n    <item>QMagnetometer</item>\n    <item>QMagnetometerFilter</item>\n    <item>QMagnetometerReading</item>\n    <item>QMainWindow</item>\n    <item>QMap</item>\n    <item>QMapIterator</item>\n    <item>QMargins</item>\n    <item>QMarginsF</item>\n    <item>QMaskGenerator</item>\n    <item>QMatrix</item>\n    <item>QMatrix4x4</item>\n    <item>QMdiArea</item>\n    <item>QMdiSubWindow</item>\n    <item>QMediaAudioProbeControl</item>\n    <item>QMediaAvailabilityControl</item>\n    <item>QMediaBindableInterface</item>\n    <item>QMediaContainerControl</item>\n    <item>QMediaContent</item>\n    <item>QMediaControl</item>\n    <item>QMediaGaplessPlaybackControl</item>\n    <item>QMediaNetworkAccessControl</item>\n    <item>QMediaObject</item>\n    <item>QMediaPlayer</item>\n    <item>QMediaPlayerControl</item>\n    <item>QMediaPlaylist</item>\n    <item>QMediaRecorder</item>\n    <item>QMediaRecorderControl</item>\n    <item>QMediaResource</item>\n    <item>QMediaService</item>\n    <item>QMediaServiceCameraInfoInterface</item>\n    <item>QMediaServiceDefaultDeviceInterface</item>\n    <item>QMediaServiceFeaturesInterface</item>\n    <item>QMediaServiceProviderPlugin</item>\n    <item>QMediaServiceSupportedDevicesInterface</item>\n    <item>QMediaServiceSupportedFormatsInterface</item>\n    <item>QMediaStreamsControl</item>\n    <item>QMediaTimeInterval</item>\n    <item>QMediaTimeRange</item>\n    <item>QMediaVideoProbeControl</item>\n    <item>QMenu</item>\n    <item>QMenuBar</item>\n    <item>QMessageAuthenticationCode</item>\n    <item>QMessageBox</item>\n    <item>QMessageLogContext</item>\n    <item>QMessageLogger</item>\n    <item>QMetaClassInfo</item>\n    <item>QMetaDataReaderControl</item>\n    <item>QMetaDataWriterControl</item>\n    <item>QMetaEnum</item>\n    <item>QMetaMethod</item>\n    <item>QMetaObject</item>\n    <item>QMetaProperty</item>\n    <item>QMetaType</item>\n    <item>QMimeData</item>\n    <item>QMimeDatabase</item>\n    <item>QMimeType</item>\n    <item>QModbusClient</item>\n    <item>QModbusDataUnit</item>\n    <item>QModbusDevice</item>\n    <item>QModbusDeviceIdentification</item>\n    <item>QModbusExceptionResponse</item>\n    <item>QModbusPdu</item>\n    <item>QModbusReply</item>\n    <item>QModbusRequest</item>\n    <item>QModbusResponse</item>\n    <item>QModbusRtuSerialMaster</item>\n    <item>QModbusRtuSerialSlave</item>\n    <item>QModbusServer</item>\n    <item>QModbusTcpClient</item>\n    <item>QModbusTcpServer</item>\n    <item>QModelIndex</item>\n    <item>QMouseEvent</item>\n    <item>QMouseEventTransition</item>\n    <item>QMoveEvent</item>\n    <item>QMovie</item>\n    <item>QMultiHash</item>\n    <item>QMultiMap</item>\n    <item>QMutableHashIterator</item>\n    <item>QMutableLinkedListIterator</item>\n    <item>QMutableListIterator</item>\n    <item>QMutableMapIterator</item>\n    <item>QMutableSetIterator</item>\n    <item>QMutableVectorIterator</item>\n    <item>QMutex</item>\n    <item>QMutexLocker</item>\n    <item>QNativeGestureEvent</item>\n    <item>QNdefFilter</item>\n    <item>QNdefMessage</item>\n    <item>QNdefNfcSmartPosterRecord</item>\n    <item>QNdefNfcTextRecord</item>\n    <item>QNdefNfcUriRecord</item>\n    <item>QNdefRecord</item>\n    <item>QNearFieldManager</item>\n    <item>QNearFieldShareManager</item>\n    <item>QNearFieldShareTarget</item>\n    <item>QNearFieldTarget</item>\n    <item>QNetworkAccessManager</item>\n    <item>QNetworkAddressEntry</item>\n    <item>QNetworkCacheMetaData</item>\n    <item>QNetworkConfiguration</item>\n    <item>QNetworkConfigurationManager</item>\n    <item>QNetworkCookie</item>\n    <item>QNetworkCookieJar</item>\n    <item>QNetworkDatagram</item>\n    <item>QNetworkDiskCache</item>\n    <item>QNetworkInterface</item>\n    <item>QNetworkProxy</item>\n    <item>QNetworkProxyFactory</item>\n    <item>QNetworkProxyQuery</item>\n    <item>QNetworkReply</item>\n    <item>QNetworkRequest</item>\n    <item>QNetworkSession</item>\n    <item>QNmeaPositionInfoSource</item>\n    <item>QObject</item>\n    <item>QObjectCleanupHandler</item>\n    <item>QOffscreenSurface</item>\n    <item>QOpenGLBuffer</item>\n    <item>QOpenGLContext</item>\n    <item>QOpenGLContextGroup</item>\n    <item>QOpenGLDebugLogger</item>\n    <item>QOpenGLDebugMessage</item>\n    <item>QOpenGLExtraFunctions</item>\n    <item>QOpenGLFramebufferObject</item>\n    <item>QOpenGLFramebufferObjectFormat</item>\n    <item>QOpenGLFunctions</item>\n    <item>QOpenGLFunctions_1_0</item>\n    <item>QOpenGLFunctions_1_1</item>\n    <item>QOpenGLFunctions_1_2</item>\n    <item>QOpenGLFunctions_1_3</item>\n    <item>QOpenGLFunctions_1_4</item>\n    <item>QOpenGLFunctions_1_5</item>\n    <item>QOpenGLFunctions_2_0</item>\n    <item>QOpenGLFunctions_2_1</item>\n    <item>QOpenGLFunctions_3_0</item>\n    <item>QOpenGLFunctions_3_1</item>\n    <item>QOpenGLFunctions_3_2_Compatibility</item>\n    <item>QOpenGLFunctions_3_2_Core</item>\n    <item>QOpenGLFunctions_3_3_Compatibility</item>\n    <item>QOpenGLFunctions_3_3_Core</item>\n    <item>QOpenGLFunctions_4_0_Compatibility</item>\n    <item>QOpenGLFunctions_4_0_Core</item>\n    <item>QOpenGLFunctions_4_1_Compatibility</item>\n    <item>QOpenGLFunctions_4_1_Core</item>\n    <item>QOpenGLFunctions_4_2_Compatibility</item>\n    <item>QOpenGLFunctions_4_2_Core</item>\n    <item>QOpenGLFunctions_4_3_Compatibility</item>\n    <item>QOpenGLFunctions_4_3_Core</item>\n    <item>QOpenGLFunctions_4_4_Compatibility</item>\n    <item>QOpenGLFunctions_4_4_Core</item>\n    <item>QOpenGLFunctions_4_5_Compatibility</item>\n    <item>QOpenGLFunctions_4_5_Core</item>\n    <item>QOpenGLFunctions_ES2</item>\n    <item>QOpenGLPaintDevice</item>\n    <item>QOpenGLPixelTransferOptions</item>\n    <item>QOpenGLShader</item>\n    <item>QOpenGLShaderProgram</item>\n    <item>QOpenGLTexture</item>\n    <item>QOpenGLTextureBlitter</item>\n    <item>QOpenGLTimeMonitor</item>\n    <item>QOpenGLTimerQuery</item>\n    <item>QOpenGLVersionProfile</item>\n    <item>QOpenGLVertexArrayObject</item>\n    <item>QOpenGLWidget</item>\n    <item>QOpenGLWindow</item>\n    <item>QOrientationFilter</item>\n    <item>QOrientationReading</item>\n    <item>QOrientationSensor</item>\n    <item>QPagedPaintDevice</item>\n    <item>QPageLayout</item>\n    <item>QPageSetupDialog</item>\n    <item>QPageSize</item>\n    <item>QPaintDevice</item>\n    <item>QPaintDeviceWindow</item>\n    <item>QPaintEngine</item>\n    <item>QPaintEngineState</item>\n    <item>QPainter</item>\n    <item>QPainterPath</item>\n    <item>QPainterPathStroker</item>\n    <item>QPaintEvent</item>\n    <item>QPair</item>\n    <item>QPalette</item>\n    <item>QPanGesture</item>\n    <item>QParallelAnimationGroup</item>\n    <item>QPauseAnimation</item>\n    <item>QPdfWriter</item>\n    <item>QPen</item>\n    <item>QPercentBarSeries</item>\n    <item>QPersistentModelIndex</item>\n    <item>QPicture</item>\n    <item>QPictureFormatPlugin</item>\n    <item>QPictureIO</item>\n    <item>QPieLegendMarker</item>\n    <item>QPieSeries</item>\n    <item>QPieSlice</item>\n    <item>QPinchGesture</item>\n    <item>QPixelFormat</item>\n    <item>QPixmap</item>\n    <item>QPixmapCache</item>\n    <item>QPlace</item>\n    <item>QPlaceAttribute</item>\n    <item>QPlaceCategory</item>\n    <item>QPlaceContactDetail</item>\n    <item>QPlaceContent</item>\n    <item>QPlaceContentReply</item>\n    <item>QPlaceContentRequest</item>\n    <item>QPlaceDetailsReply</item>\n    <item>QPlaceEditorial</item>\n    <item>QPlaceIcon</item>\n    <item>QPlaceIdReply</item>\n    <item>QPlaceImage</item>\n    <item>QPlaceManager</item>\n    <item>QPlaceManagerEngine</item>\n    <item>QPlaceMatchReply</item>\n    <item>QPlaceMatchRequest</item>\n    <item>QPlaceProposedSearchResult</item>\n    <item>QPlaceRatings</item>\n    <item>QPlaceReply</item>\n    <item>QPlaceResult</item>\n    <item>QPlaceReview</item>\n    <item>QPlaceSearchReply</item>\n    <item>QPlaceSearchRequest</item>\n    <item>QPlaceSearchResult</item>\n    <item>QPlaceSearchSuggestionReply</item>\n    <item>QPlaceSupplier</item>\n    <item>QPlaceUser</item>\n    <item>QPlainTextDocumentLayout</item>\n    <item>QPlainTextEdit</item>\n    <item>QPlatformGraphicsBuffer</item>\n    <item>QPlatformSurfaceEvent</item>\n    <item>QPlatformSystemTrayIcon</item>\n    <item>QPluginLoader</item>\n    <item>QPoint</item>\n    <item>QPointer</item>\n    <item>QPointF</item>\n    <item>QPointingDeviceUniqueId</item>\n    <item>QPolarChart</item>\n    <item>QPolygon</item>\n    <item>QPolygonF</item>\n    <item>QPressureFilter</item>\n    <item>QPressureReading</item>\n    <item>QPressureSensor</item>\n    <item>QPrintDialog</item>\n    <item>QPrintEngine</item>\n    <item>QPrinter</item>\n    <item>QPrinterInfo</item>\n    <item>QPrintPreviewDialog</item>\n    <item>QPrintPreviewWidget</item>\n    <item>QProcess</item>\n    <item>QProcessEnvironment</item>\n    <item>QProgressBar</item>\n    <item>QProgressDialog</item>\n    <item>QPropertyAnimation</item>\n    <item>QProximityFilter</item>\n    <item>QProximityReading</item>\n    <item>QProximitySensor</item>\n    <item>QProxyStyle</item>\n    <item>QPushButton</item>\n    <item>QQmlAbstractUrlInterceptor</item>\n    <item>QQmlApplicationEngine</item>\n    <item>QQmlComponent</item>\n    <item>QQmlContext</item>\n    <item>QQmlEngine</item>\n    <item>QQmlError</item>\n    <item>QQmlExpression</item>\n    <item>QQmlExtensionPlugin</item>\n    <item>QQmlFileSelector</item>\n    <item>QQmlImageProviderBase</item>\n    <item>QQmlIncubationController</item>\n    <item>QQmlIncubator</item>\n    <item>QQmlListProperty</item>\n    <item>QQmlListReference</item>\n    <item>QQmlNdefRecord</item>\n    <item>QQmlNetworkAccessManagerFactory</item>\n    <item>QQmlParserStatus</item>\n    <item>QQmlProperty</item>\n    <item>QQmlPropertyMap</item>\n    <item>QQmlPropertyValueSource</item>\n    <item>QQmlScriptString</item>\n    <item>QQuaternion</item>\n    <item>QQueue</item>\n    <item>QQuickAsyncImageProvider</item>\n    <item>QQuickFramebufferObject</item>\n    <item>QQuickImageProvider</item>\n    <item>QQuickImageResponse</item>\n    <item>QQuickItem</item>\n    <item>QQuickItemGrabResult</item>\n    <item>QQuickPaintedItem</item>\n    <item>QQuickRenderControl</item>\n    <item>QQuickStyle</item>\n    <item>QQuickTextDocument</item>\n    <item>QQuickTextureFactory</item>\n    <item>QQuickView</item>\n    <item>QQuickWebEngineProfile</item>\n    <item>QQuickWidget</item>\n    <item>QQuickWindow</item>\n    <item>QRadialGradient</item>\n    <item>QRadioButton</item>\n    <item>QRadioData</item>\n    <item>QRadioDataControl</item>\n    <item>QRadioTuner</item>\n    <item>QRadioTunerControl</item>\n    <item>QRasterPaintEngine</item>\n    <item>QRasterWindow</item>\n    <item>QRawFont</item>\n    <item>QReadLocker</item>\n    <item>QReadWriteLock</item>\n    <item>QRect</item>\n    <item>QRectF</item>\n    <item>QRegExp</item>\n    <item>QRegExpValidator</item>\n    <item>QRegion</item>\n    <item>QRegularExpression</item>\n    <item>QRegularExpressionMatch</item>\n    <item>QRegularExpressionMatchIterator</item>\n    <item>QRegularExpressionValidator</item>\n    <item>QResizeEvent</item>\n    <item>QResource</item>\n    <item>QRgba64</item>\n    <item>QRotationFilter</item>\n    <item>QRotationReading</item>\n    <item>QRotationSensor</item>\n    <item>QRubberBand</item>\n    <item>QRunnable</item>\n    <item>QSaveFile</item>\n    <item>QScatter3DSeries</item>\n    <item>QScatterDataItem</item>\n    <item>QScatterDataProxy</item>\n    <item>QScatterSeries</item>\n    <item>QScopedArrayPointer</item>\n    <item>QScopedPointer</item>\n    <item>QScopedValueRollback</item>\n    <item>QScreen</item>\n    <item>QScriptable</item>\n    <item>QScriptClass</item>\n    <item>QScriptClassPropertyIterator</item>\n    <item>QScriptContext</item>\n    <item>QScriptContextInfo</item>\n    <item>QScriptEngine</item>\n    <item>QScriptEngineAgent</item>\n    <item>QScriptEngineDebugger</item>\n    <item>QScriptExtensionPlugin</item>\n    <item>QScriptProgram</item>\n    <item>QScriptString</item>\n    <item>QScriptSyntaxCheckResult</item>\n    <item>QScriptValue</item>\n    <item>QScriptValueIterator</item>\n    <item>QScrollArea</item>\n    <item>QScrollBar</item>\n    <item>QScroller</item>\n    <item>QScrollerProperties</item>\n    <item>QScrollEvent</item>\n    <item>QScrollPrepareEvent</item>\n    <item>QSctpServer</item>\n    <item>QSctpSocket</item>\n    <item>QScxmlCompiler</item>\n    <item>QScxmlCppDataModel</item>\n    <item>QScxmlDataModel</item>\n    <item>QScxmlDynamicScxmlServiceFactory</item>\n    <item>QScxmlEcmaScriptDataModel</item>\n    <item>QScxmlError</item>\n    <item>QScxmlEvent</item>\n    <item>QScxmlInvokableService</item>\n    <item>QScxmlInvokableServiceFactory</item>\n    <item>QScxmlNullDataModel</item>\n    <item>QScxmlStateMachine</item>\n    <item>QScxmlStaticScxmlServiceFactory</item>\n    <item>QScxmlTableData</item>\n    <item>QSemaphore</item>\n    <item>QSensor</item>\n    <item>QSensorBackend</item>\n    <item>QSensorBackendFactory</item>\n    <item>QSensorChangesInterface</item>\n    <item>QSensorFilter</item>\n    <item>QSensorGesture</item>\n    <item>QSensorGestureManager</item>\n    <item>QSensorGesturePluginInterface</item>\n    <item>QSensorGestureRecognizer</item>\n    <item>QSensorManager</item>\n    <item>QSensorPluginInterface</item>\n    <item>QSensorReading</item>\n    <item>QSequentialAnimationGroup</item>\n    <item>QSequentialIterable</item>\n    <item>QSerialPort</item>\n    <item>QSerialPortInfo</item>\n    <item>QSessionManager</item>\n    <item>QSet</item>\n    <item>QSetIterator</item>\n    <item>QSettings</item>\n    <item>QSGAbstractRenderer</item>\n    <item>QSGBasicGeometryNode</item>\n    <item>QSGClipNode</item>\n    <item>QSGDynamicTexture</item>\n    <item>QSGEngine</item>\n    <item>QSGFlatColorMaterial</item>\n    <item>QSGGeometry</item>\n    <item>QSGGeometryNode</item>\n    <item>QSGImageNode</item>\n    <item>QSGMaterial</item>\n    <item>QSGMaterialShader</item>\n    <item>QSGMaterialType</item>\n    <item>QSGNode</item>\n    <item>QSGOpacityNode</item>\n    <item>QSGOpaqueTextureMaterial</item>\n    <item>QSGRectangleNode</item>\n    <item>QSGRendererInterface</item>\n    <item>QSGRenderNode</item>\n    <item>QSGSimpleMaterial</item>\n    <item>QSGSimpleMaterialShader</item>\n    <item>QSGSimpleRectNode</item>\n    <item>QSGSimpleTextureNode</item>\n    <item>QSGTexture</item>\n    <item>QSGTextureMaterial</item>\n    <item>QSGTextureProvider</item>\n    <item>QSGTransformNode</item>\n    <item>QSGVertexColorMaterial</item>\n    <item>QSharedData</item>\n    <item>QSharedDataPointer</item>\n    <item>QSharedMemory</item>\n    <item>QSharedPointer</item>\n    <item>QShortcut</item>\n    <item>QShortcutEvent</item>\n    <item>QShowEvent</item>\n    <item>QSignalBlocker</item>\n    <item>QSignalMapper</item>\n    <item>QSignalSpy</item>\n    <item>QSignalTransition</item>\n    <item>QSimpleXmlNodeModel</item>\n    <item>QSize</item>\n    <item>QSizeF</item>\n    <item>QSizeGrip</item>\n    <item>QSizePolicy</item>\n    <item>QSlider</item>\n    <item>QSocketNotifier</item>\n    <item>QSortFilterProxyModel</item>\n    <item>QSound</item>\n    <item>QSoundEffect</item>\n    <item>QSourceLocation</item>\n    <item>QSpacerItem</item>\n    <item>QSpinBox</item>\n    <item>QSplashScreen</item>\n    <item>QSplineSeries</item>\n    <item>QSplitter</item>\n    <item>QSplitterHandle</item>\n    <item>QSqlDatabase</item>\n    <item>QSqlDriver</item>\n    <item>QSqlDriverCreator</item>\n    <item>QSqlDriverCreatorBase</item>\n    <item>QSqlDriverPlugin</item>\n    <item>QSqlError</item>\n    <item>QSqlField</item>\n    <item>QSqlIndex</item>\n    <item>QSqlQuery</item>\n    <item>QSqlQueryModel</item>\n    <item>QSqlRecord</item>\n    <item>QSqlRelation</item>\n    <item>QSqlRelationalDelegate</item>\n    <item>QSqlRelationalTableModel</item>\n    <item>QSqlResult</item>\n    <item>QSqlTableModel</item>\n    <item>QSslCertificate</item>\n    <item>QSslCertificateExtension</item>\n    <item>QSslCipher</item>\n    <item>QSslConfiguration</item>\n    <item>QSslDiffieHellmanParameters</item>\n    <item>QSslEllipticCurve</item>\n    <item>QSslError</item>\n    <item>QSslKey</item>\n    <item>QSslPreSharedKeyAuthenticator</item>\n    <item>QSslSocket</item>\n    <item>QStack</item>\n    <item>QStackedBarSeries</item>\n    <item>QStackedLayout</item>\n    <item>QStackedWidget</item>\n    <item>QStandardItem</item>\n    <item>QStandardItemEditorCreator</item>\n    <item>QStandardItemModel</item>\n    <item>QStandardPaths</item>\n    <item>QState</item>\n    <item>QStateMachine</item>\n    <item>QStaticPlugin</item>\n    <item>QStaticText</item>\n    <item>QStatusBar</item>\n    <item>QStatusTipEvent</item>\n    <item>QStorageInfo</item>\n    <item>QString</item>\n    <item>QStringList</item>\n    <item>QStringListModel</item>\n    <item>QStringMatcher</item>\n    <item>QStringRef</item>\n    <item>QStyle</item>\n    <item>QStyledItemDelegate</item>\n    <item>QStyleFactory</item>\n    <item>QStyleHintReturn</item>\n    <item>QStyleHintReturnMask</item>\n    <item>QStyleHintReturnVariant</item>\n    <item>QStyleHints</item>\n    <item>QStyleOption</item>\n    <item>QStyleOptionButton</item>\n    <item>QStyleOptionComboBox</item>\n    <item>QStyleOptionComplex</item>\n    <item>QStyleOptionDockWidget</item>\n    <item>QStyleOptionFocusRect</item>\n    <item>QStyleOptionFrame</item>\n    <item>QStyleOptionGraphicsItem</item>\n    <item>QStyleOptionGroupBox</item>\n    <item>QStyleOptionHeader</item>\n    <item>QStyleOptionMenuItem</item>\n    <item>QStyleOptionProgressBar</item>\n    <item>QStyleOptionRubberBand</item>\n    <item>QStyleOptionSizeGrip</item>\n    <item>QStyleOptionSlider</item>\n    <item>QStyleOptionSpinBox</item>\n    <item>QStyleOptionTab</item>\n    <item>QStyleOptionTabBarBase</item>\n    <item>QStyleOptionTabWidgetFrame</item>\n    <item>QStyleOptionTitleBar</item>\n    <item>QStyleOptionToolBar</item>\n    <item>QStyleOptionToolBox</item>\n    <item>QStyleOptionToolButton</item>\n    <item>QStyleOptionViewItem</item>\n    <item>QStylePainter</item>\n    <item>QStylePlugin</item>\n    <item>QSupportedWritingSystems</item>\n    <item>QSurface</item>\n    <item>QSurface3DSeries</item>\n    <item>QSurfaceDataItem</item>\n    <item>QSurfaceDataProxy</item>\n    <item>QSurfaceFormat</item>\n    <item>QSvgGenerator</item>\n    <item>QSvgRenderer</item>\n    <item>QSvgWidget</item>\n    <item>QSwipeGesture</item>\n    <item>QSyntaxHighlighter</item>\n    <item>QSysInfo</item>\n    <item>QSystemSemaphore</item>\n    <item>QSystemTrayIcon</item>\n    <item>QTabBar</item>\n    <item>QTabletEvent</item>\n    <item>QTableView</item>\n    <item>QTableWidget</item>\n    <item>QTableWidgetItem</item>\n    <item>QTableWidgetSelectionRange</item>\n    <item>QTabWidget</item>\n    <item>QTapAndHoldGesture</item>\n    <item>QTapFilter</item>\n    <item>QTapGesture</item>\n    <item>QTapReading</item>\n    <item>QTapSensor</item>\n    <item>QTcpServer</item>\n    <item>QTcpSocket</item>\n    <item>QTemporaryDir</item>\n    <item>QTemporaryFile</item>\n    <item>QTestEventList</item>\n    <item>QTextBlock</item>\n    <item>QTextBlockFormat</item>\n    <item>QTextBlockGroup</item>\n    <item>QTextBlockUserData</item>\n    <item>QTextBoundaryFinder</item>\n    <item>QTextBrowser</item>\n    <item>QTextCharFormat</item>\n    <item>QTextCodec</item>\n    <item>QTextCursor</item>\n    <item>QTextDecoder</item>\n    <item>QTextDocument</item>\n    <item>QTextDocumentFragment</item>\n    <item>QTextDocumentWriter</item>\n    <item>QTextEdit</item>\n    <item>QTextEncoder</item>\n    <item>QTextFormat</item>\n    <item>QTextFragment</item>\n    <item>QTextFrame</item>\n    <item>QTextFrameFormat</item>\n    <item>QTextImageFormat</item>\n    <item>QTextInlineObject</item>\n    <item>QTextItem</item>\n    <item>QTextLayout</item>\n    <item>QTextLength</item>\n    <item>QTextLine</item>\n    <item>QTextList</item>\n    <item>QTextListFormat</item>\n    <item>QTextObject</item>\n    <item>QTextObjectInterface</item>\n    <item>QTextOption</item>\n    <item>QTextStream</item>\n    <item>QTextTable</item>\n    <item>QTextTableCell</item>\n    <item>QTextTableCellFormat</item>\n    <item>QTextTableFormat</item>\n    <item>QTextToSpeech</item>\n    <item>QTextToSpeechPlugin</item>\n    <item>QThread</item>\n    <item>QThreadPool</item>\n    <item>QThreadStorage</item>\n    <item>QTileRules</item>\n    <item>QTiltFilter</item>\n    <item>QTiltReading</item>\n    <item>QTiltSensor</item>\n    <item>QTime</item>\n    <item>QTimeEdit</item>\n    <item>QTimeLine</item>\n    <item>QTimer</item>\n    <item>QTimerEvent</item>\n    <item>QTimeZone</item>\n    <item>QToolBar</item>\n    <item>QToolBox</item>\n    <item>QToolButton</item>\n    <item>QToolTip</item>\n    <item>QTouch3DInputHandler</item>\n    <item>QTouchDevice</item>\n    <item>QTouchEvent</item>\n    <item>QTransform</item>\n    <item>QTranslator</item>\n    <item>QTreeView</item>\n    <item>QTreeWidget</item>\n    <item>QTreeWidgetItem</item>\n    <item>QTreeWidgetItemIterator</item>\n    <item>QUdpSocket</item>\n    <item>QUiLoader</item>\n    <item>QUndoCommand</item>\n    <item>QUndoGroup</item>\n    <item>QUndoStack</item>\n    <item>QUndoView</item>\n    <item>QUnhandledException</item>\n    <item>QUrl</item>\n    <item>QUrlQuery</item>\n    <item>QUuid</item>\n    <item>QValidator</item>\n    <item>QValue3DAxis</item>\n    <item>QValue3DAxisFormatter</item>\n    <item>QValueAxis</item>\n    <item>QVariant</item>\n    <item>QVariantAnimation</item>\n    <item>QVarLengthArray</item>\n    <item>QVBarModelMapper</item>\n    <item>QVBoxLayout</item>\n    <item>QVBoxPlotModelMapper</item>\n    <item>QVCandlestickModelMapper</item>\n    <item>QVector</item>\n    <item>QVector2D</item>\n    <item>QVector3D</item>\n    <item>QVector4D</item>\n    <item>QVectorIterator</item>\n    <item>QVersionNumber</item>\n    <item>QVideoDeviceSelectorControl</item>\n    <item>QVideoEncoderSettings</item>\n    <item>QVideoEncoderSettingsControl</item>\n    <item>QVideoFilterRunnable</item>\n    <item>QVideoFrame</item>\n    <item>QVideoProbe</item>\n    <item>QVideoRendererControl</item>\n    <item>QVideoSurfaceFormat</item>\n    <item>QVideoWidget</item>\n    <item>QVideoWidgetControl</item>\n    <item>QVideoWindowControl</item>\n    <item>QVPieModelMapper</item>\n    <item>QVXYModelMapper</item>\n    <item>QWaitCondition</item>\n    <item>QWaylandBufferRef</item>\n    <item>QWaylandClient</item>\n    <item>QWaylandCompositor</item>\n    <item>QWaylandIviSurface</item>\n    <item>QWaylandKeyboard</item>\n    <item>QWaylandOutput</item>\n    <item>QWaylandOutputMode</item>\n    <item>QWaylandPointer</item>\n    <item>QWaylandQuickItem</item>\n    <item>QWaylandQuickShellSurfaceItem</item>\n    <item>QWaylandSeat</item>\n    <item>QWaylandSurface</item>\n    <item>QWaylandSurfaceGrabber</item>\n    <item>QWaylandTouch</item>\n    <item>QWaylandView</item>\n    <item>QWaylandWlShell</item>\n    <item>QWaylandWlShellSurface</item>\n    <item>QWaylandXdgPopupV5</item>\n    <item>QWaylandXdgSurfaceV5</item>\n    <item>QWeakPointer</item>\n    <item>QWebChannel</item>\n    <item>QWebChannelAbstractTransport</item>\n    <item>QWebEngineCertificateError</item>\n    <item>QWebEngineContextMenuData</item>\n    <item>QWebEngineCookieStore</item>\n    <item>QWebEngineDownloadItem</item>\n    <item>QWebEngineFullScreenRequest</item>\n    <item>QWebEngineHistory</item>\n    <item>QWebEngineHistoryItem</item>\n    <item>QWebEnginePage</item>\n    <item>QWebEngineProfile</item>\n    <item>QWebEngineScript</item>\n    <item>QWebEngineScriptCollection</item>\n    <item>QWebEngineSettings</item>\n    <item>QWebEngineUrlRequestInfo</item>\n    <item>QWebEngineUrlRequestInterceptor</item>\n    <item>QWebEngineUrlRequestJob</item>\n    <item>QWebEngineUrlSchemeHandler</item>\n    <item>QWebEngineView</item>\n    <item>QWebSocket</item>\n    <item>QWebSocketCorsAuthenticator</item>\n    <item>QWebSocketServer</item>\n    <item>QWGLNativeContext</item>\n    <item>QWhatsThis</item>\n    <item>QWhatsThisClickedEvent</item>\n    <item>QWheelEvent</item>\n    <item>QWidget</item>\n    <item>QWidgetAction</item>\n    <item>QWidgetItem</item>\n    <item>QWindow</item>\n    <item>QWindowStateChangeEvent</item>\n    <item>QWindowsWindowFunctions</item>\n    <item>QWinEventNotifier</item>\n    <item>QWinJumpList</item>\n    <item>QWinJumpListCategory</item>\n    <item>QWinJumpListItem</item>\n    <item>QWinMime</item>\n    <item>QWinTaskbarButton</item>\n    <item>QWinTaskbarProgress</item>\n    <item>QWinThumbnailToolBar</item>\n    <item>QWinThumbnailToolButton</item>\n    <item>QWizard</item>\n    <item>QWizardPage</item>\n    <item>QWriteLocker</item>\n    <item>QX11Info</item>\n    <item>QXcbWindowFunctions</item>\n    <item>QXmlAttributes</item>\n    <item>QXmlContentHandler</item>\n    <item>QXmlDeclHandler</item>\n    <item>QXmlDefaultHandler</item>\n    <item>QXmlDTDHandler</item>\n    <item>QXmlEntityResolver</item>\n    <item>QXmlErrorHandler</item>\n    <item>QXmlFormatter</item>\n    <item>QXmlInputSource</item>\n    <item>QXmlItem</item>\n    <item>QXmlLexicalHandler</item>\n    <item>QXmlLocator</item>\n    <item>QXmlName</item>\n    <item>QXmlNamePool</item>\n    <item>QXmlNamespaceSupport</item>\n    <item>QXmlNodeModelIndex</item>\n    <item>QXmlParseException</item>\n    <item>QXmlQuery</item>\n    <item>QXmlReader</item>\n    <item>QXmlResultItems</item>\n    <item>QXmlSchema</item>\n    <item>QXmlSchemaValidator</item>\n    <item>QXmlSerializer</item>\n    <item>QXmlSimpleReader</item>\n    <item>QXmlStreamAttribute</item>\n    <item>QXmlStreamAttributes</item>\n    <item>QXmlStreamEntityDeclaration</item>\n    <item>QXmlStreamEntityResolver</item>\n    <item>QXmlStreamNamespaceDeclaration</item>\n    <item>QXmlStreamNotationDeclaration</item>\n    <item>QXmlStreamReader</item>\n    <item>QXmlStreamWriter</item>\n    <item>QXYLegendMarker</item>\n    <item>QXYSeries</item>\n    <!-- Not actually classes, but used like those -->\n    <item>QStringLiteral</item>\n    <!-- Not actually classes, but namespaces -->\n    <item>Qt</item>\n    <item>QTest</item>\n    <item>QtConcurrent</item>\n    <item>Phonon</item>\n    <!-- Some public types, but not listed in main class list -->\n    <item>QFileInfoList</item>\n    <item>QMutableStringListIterator</item>\n    <item>QTouchEventSequence</item>                      <!-- QTest -->\n    <item>QStringListIterator</item>\n    <item>QStringBuilder</item>\n  </list>\n\n  <contexts>\n    <!-- Base context for C++ and Qt highlighting to be used as standalone syntax -->\n    <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n      <IncludeRules context=\"DetectQtExtensions\" />\n      <IncludeRules context=\"##ISO C++\" />\n    </context>\n\n    <!-- This context can be used from other (alternative) C++ syntax files\n         To use it just <IncludeRules context=\"DetectQtExtensions##Qt/C++\" />\n      -->\n    <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"DetectQtExtensions\">\n      <keyword attribute=\"Qt Types\" context=\"#stay\" String=\"QtTypes\" />\n      <keyword attribute=\"Qt Classes\" context=\"Qt5ClassMember\" String=\"QtClasses\" />\n      <keyword attribute=\"Qt Functions\" context=\"#stay\" String=\"QtFunc\" />\n      <keyword attribute=\"Qt Macros\" context=\"#stay\" String=\"QtMacros\" />\n    </context>\n\n    <context attribute=\"Qt Classes\" lineEndContext=\"#pop\" name=\"Qt5ClassMember\">\n      <IncludeRules context=\"DetectNSEnd\" />\n    </context>\n\n    <context lineEndContext=\"#pop\" name=\"DetectNSEnd\" attribute=\"Normal Text\">\n      <DetectIdentifier context=\"#stay\" />\n      <AnyChar context=\"#pop\" String=\"&ns_punctuators;\" lookAhead=\"true\" />\n    </context>\n\n  </contexts>\n\n  <itemDatas>\n    <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n    <itemData name=\"Qt Macros\" defStyleNum=\"dsExtension\" spellChecking=\"false\" bold=\"1\" italic=\"0\" />\n    <itemData name=\"Qt Types\" defStyleNum=\"dsExtension\" spellChecking=\"false\" />\n    <itemData name=\"Qt Classes\" defStyleNum=\"dsExtension\" spellChecking=\"false\" />\n    <itemData name=\"Qt Functions\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n  </itemDatas>\n</highlighting>\n\n<general>\n  <comments>\n    <comment name=\"singleLine\" start=\"//\" />\n    <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n  </comments>\n  <keywords casesensitive=\"1\" />\n</general>\n\n</language>\n<!-- kate: indent-width 2; tab-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/crk.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Crack\" version=\"4\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.crk\" mimetype=\"\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>catch</item>\n      <item>class</item>\n      <item>continue</item>\n      <item>else</item>\n      <item>false</item>\n      <item>for</item>\n      <item>if</item>\n      <item>in</item>\n      <item>is</item>\n      <item>null</item>\n      <item>oper</item>\n      <item>return</item>\n      <item>this</item>\n      <item>true</item>\n      <item>try</item>\n      <item>typeof</item>\n      <item>while</item>\n    </list>\n    <list name=\"types\">\n      <item>bool</item>\n      <item>byte</item>\n      <item>int16</item>\n      <item>int32</item>\n      <item>int64</item>\n      <item>uint16</item>\n      <item>uint32</item>\n      <item>uint64</item>\n      <item>float32</item>\n      <item>float64</item>\n      <item>int</item>\n      <item>uint</item>\n      <item>intz</item>\n      <item>uintz</item>\n      <item>float</item>\n      <item>void</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <StringDetect attribute=\"Keyword\" context=\"Package\" String=\"import\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <DetectChar attribute=\"String\" context=\"Single quoted String\" char=\"'\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"Backtick String\" char=\"`\"/>\n        <Detect2Chars attribute=\"Char\" context=\"Char\" char=\"b\" char1=\"'\" />\n        <IncludeRules context=\"##Doxygen\" />\n        <DetectChar attribute=\"Comment\" context=\"Commentar 1\" char=\"#\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 3\" char=\"/\" char1=\"*\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"block1\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"block1\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*[(])\" />\n        <RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n        <RegExpr attribute=\"Annotation\" context=\"#stay\" String=\"@\\w+\" />\n      </context>\n\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#pop\"/>\n        <HlCStringChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"Single quoted String\">\n        <LineContinue attribute=\"String\" context=\"#pop\"/>\n        <HlCStringChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Backtick String\">\n        <HlCStringChar attribute=\"Char\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Substitution\" char=\"$\" char1=\"(\" context=\"Subst\"/>\n        <DetectChar attribute=\"Substitution\" char=\"$\" context=\"Short Subst\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"`\"/>\n      </context>\n\n      <context attribute=\"Char\" lineEndContext=\"#pop\" name=\"Char\">\n        <HlCStringChar attribute=\"Char\" context=\"#stay\" />\n        <DetectChar attribute=\"Char\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <context name=\"Braces\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop\"/>\n        <!-- Highlight everything inside as code. -->\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <context name=\"Subst\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- Switch to a new context when encountering an lbrace so that we don't #pop too early. -->\n        <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"Braces\"/>\n        <DetectChar attribute=\"Substitution\" char=\")\" context=\"#pop\"/>\n        <!-- Highlight substitution as code. -->\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <context name=\"Short Subst\" attribute=\"Substitution\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Substitution\" String=\"\\w(?!\\w)\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Package\" attribute=\"Package\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Package\" String=\"[\\w\\\\.]+\" context=\"#pop\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*)\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 2\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 3\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Substitution\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Package\"      defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Annotation\"   defStyleNum=\"dsAttribute\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cs.xml",
    "content": "<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"C#\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.cs\" mimetype=\"text/x-csharp-src;text/x-csharp-hde\" indenter=\"cstyle\" style=\"C++\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>abstract</item>\n      <item>as</item>\n      <item>base</item>\n      <item>break</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>class</item>\n      <item>checked</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>delegate</item>\n      <item>do</item>\n      <item>else</item>\n      <item>enum</item>\n      <item>event</item>\n      <item>explicit</item>\n      <item>extern</item>\n      <item>false</item>\n      <item>for</item>\n      <item>foreach</item>\n      <item>finally</item>\n      <item>fixed</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>implicit</item>\n      <item>in</item>\n      <item>interface</item>\n      <item>internal</item>\n      <item>is</item>\n      <item>lock</item>\n      <item>namespace</item>\n      <item>new</item>\n      <item>null</item>\n      <item>operator</item>\n      <item>out</item>\n      <item>override</item>\n      <item>params</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>readonly</item>\n      <item>ref</item>\n      <item>return</item>\n      <item>sealed</item>\n      <item>sizeof</item>\n      <item>stackalloc</item>\n      <item>static</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>this</item>\n      <item>throw</item>\n      <item>true</item>\n      <item>try</item>\n      <item>typeof</item>\n      <item>unchecked</item>\n      <item>unsafe</item>\n      <item>using</item>\n      <item>virtual</item>\n      <item>while</item>\n      <item>#if</item>\n      <item>#else</item>\n      <item>#elif</item>\n      <item>#endif</item>\n      <item>#define</item>\n      <item>#undef</item>\n      <item>#warning</item>\n      <item>#error</item>\n      <item>#line</item>\n    </list>\n    <list name=\"types\">\n      <item>bool</item>\n      <item>byte</item>\n      <item>char</item>\n      <item>const</item>\n      <item>decimal</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>object</item>\n      <item>uint</item>\n      <item>ushort</item>\n      <item>ulong</item>\n      <item>sbyte</item>\n      <item>short</item>\n      <item>string</item>\n      <item>void</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"block1\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"block1\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bpartial(?=\\s+(class|struct|interface|void))\"/>\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"\\bvar(?=\\s+\\w+)\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\byield(?=\\s+(return|break))\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(set|get)(?=\\s*[;{])\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bglobal(?=\\s*::\\s*\\w+)\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"#region.*$\" beginRegion=\"Region1\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"#endregion.*$\" endRegion=\"Region1\"/>\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*[(])\" />\n        <RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#pop\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/css.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- https://www.w3.org/TR/CSS22/syndata.html#tokenization -->\n  <!ENTITY nmstart \"[_a-zA-Z]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n  <!ENTITY nmchar  \"[_a-zA-Z0-9-]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n]>\n\n<!--\n\nKate CSS syntax highlighting definition\n\nChangelog:\n\n- Version 8, by Jonathan Poelen\n- fix some Operator and Selector Tag highlighting\n\n- Version 7, by Jonathan Poelen\n- fix tag followed by a pseudo-class in a nested rule (@media, ...)\n- fix constraint in a rule\n- fix Kate auto-completion for properties and rules\n- New highlighting categories: Keyword, Operator, Separator Symbol, SpecialChar, Variable, Value Keyword, Color, Number, Unit, Selector Tag\n\n- Version 4, by Guo Yunhe guoyunhebrave@gmail.com\n- Remake for complex CSS syntax, avoid errors\n\n- Version 2.13, by Guo Yunhe\n- Add all W3C Work Draft properties\n\n- Version 2.06, by Mte90:\n- CSS3 tag\n\n- Version 2.03, by Milian Wolff:\n- Make it spelling aware\n\n- Version 2.08, Joseph Wenninger:\n- CSS3 media queries\n\n-->\n\n<language name=\"CSS\" version=\"9\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.css\" indenter=\"cstyle\" mimetype=\"text/css\" author=\"Wilbert Berendsen (wilbert@kde.nl)\" license=\"LGPL\" priority=\"10\">\n    <!-- https://www.w3.org/Style/CSS/current-work -->\n\n    <highlighting>\n        <list name=\"properties\">\n            <!-- W3C > Work Draft, from https://www.w3.org/Style/CSS/all-properties -->\n            <item>align-content</item>\n            <item>align-items</item>\n            <item>alignment-baseline</item>\n            <item>align-self</item>\n            <item>all</item>\n            <item>animation</item>\n            <item>animation-delay</item>\n            <item>animation-direction</item>\n            <item>animation-duration</item>\n            <item>animation-fill-mode</item>\n            <item>animation-iteration-count</item>\n            <item>animation-name</item>\n            <item>animation-play-state</item>\n            <item>animation-timing-function</item>\n            <item>appearance</item>\n            <item>azimuth</item>\n            <item>backface-visibility</item>\n            <item>background</item>\n            <item>background-attachment</item>\n            <item>background-blend-mode</item>\n            <item>background-clip</item>\n            <item>background-color</item>\n            <item>background-image</item>\n            <item>background-image-transform</item>\n            <item>background-origin</item>\n            <item>background-position</item>\n            <item>background-repeat</item>\n            <item>background-size</item>\n            <item>baseline-shift</item>\n            <item>block-size</item>\n            <item>block-step</item>\n            <item>block-step-align</item>\n            <item>block-step-insert</item>\n            <item>block-step-round</item>\n            <item>block-step-size</item>\n            <item>bookmark-label</item>\n            <item>bookmark-level</item>\n            <item>bookmark-state</item>\n            <item>border</item>\n            <item>border-block</item>\n            <item>border-block-color</item>\n            <item>border-block-end</item>\n            <item>border-block-end-color</item>\n            <item>border-block-end-style</item>\n            <item>border-block-end-width</item>\n            <item>border-block-start</item>\n            <item>border-block-start-color</item>\n            <item>border-block-start-style</item>\n            <item>border-block-start-width</item>\n            <item>border-block-style</item>\n            <item>border-block-width</item>\n            <item>border-bottom</item>\n            <item>border-bottom-color</item>\n            <item>border-bottom-left-radius</item>\n            <item>border-bottom-right-radius</item>\n            <item>border-bottom-style</item>\n            <item>border-bottom-width</item>\n            <item>border-boundary</item>\n            <item>border-collapse</item>\n            <item>border-color</item>\n            <item>border-image</item>\n            <item>border-image-outset</item>\n            <item>border-image-repeat</item>\n            <item>border-image-slice</item>\n            <item>border-image-source</item>\n            <item>border-image-transform</item>\n            <item>border-image-width</item>\n            <item>border-inline</item>\n            <item>border-inline-color</item>\n            <item>border-inline-end</item>\n            <item>border-inline-end-color</item>\n            <item>border-inline-end-style</item>\n            <item>border-inline-end-width</item>\n            <item>border-inline-start</item>\n            <item>border-inline-start-color</item>\n            <item>border-inline-start-style</item>\n            <item>border-inline-start-width</item>\n            <item>border-inline-style</item>\n            <item>border-inline-width</item>\n            <item>border-left</item>\n            <item>border-left-color</item>\n            <item>border-left-style</item>\n            <item>border-left-width</item>\n            <item>border-radius</item>\n            <item>border-right</item>\n            <item>border-right-color</item>\n            <item>border-right-style</item>\n            <item>border-right-width</item>\n            <item>border-spacing</item>\n            <item>border-style</item>\n            <item>border-top</item>\n            <item>border-top-color</item>\n            <item>border-top-left-radius</item>\n            <item>border-top-right-radius</item>\n            <item>border-top-style</item>\n            <item>border-top-width</item>\n            <item>border-width</item>\n            <item>bottom</item>\n            <item>box-decoration-break</item>\n            <item>box-shadow</item>\n            <item>box-sizing</item>\n            <item>box-snap</item>\n            <item>break-after</item>\n            <item>break-before</item>\n            <item>break-inside</item>\n            <item>caption-side</item>\n            <item>caret</item>\n            <item>caret-color</item>\n            <item>caret-shape</item>\n            <item>clear</item>\n            <item>clip</item>\n            <item>clip-path</item>\n            <item>clip-rule</item>\n            <item>color</item>\n            <item>color-adjust</item>\n            <item>color-interpolation-filters</item>\n            <item>columns</item>\n            <item>column-count</item>\n            <item>column-fill</item>\n            <item>column-gap</item>\n            <item>column-rule</item>\n            <item>column-rule-color</item>\n            <item>column-rule-style</item>\n            <item>column-rule-width</item>\n            <item>column-span</item>\n            <item>column-width</item>\n            <item>contain</item>\n            <item>content</item>\n            <item>continue</item>\n            <item>counter-increment</item>\n            <item>counter-reset</item>\n            <item>counter-set</item>\n            <item>cue</item>\n            <item>cue-after</item>\n            <item>cue-before</item>\n            <item>cursor</item>\n            <item>direction</item>\n            <item>display</item>\n            <item>dominant-baseline</item>\n            <item>elevation</item>\n            <item>empty-cells</item>\n            <item>fill</item>\n            <item>fill-break</item>\n            <item>fill-color</item>\n            <item>fill-image</item>\n            <item>fill-opacity</item>\n            <item>fill-origin</item>\n            <item>fill-position</item>\n            <item>fill-repeat</item>\n            <item>fill-rule</item>\n            <item>fill-size</item>\n            <item>filter</item>\n            <item>flex</item>\n            <item>flex-basis</item>\n            <item>flex-direction</item>\n            <item>flex-flow</item>\n            <item>flex-grow</item>\n            <item>flex-shrink</item>\n            <item>flex-wrap</item>\n            <item>float</item>\n            <item>float-defer</item>\n            <item>float-offset</item>\n            <item>float-reference</item>\n            <item>flood-color</item>\n            <item>flood-opacity</item>\n            <item>flow-from</item>\n            <item>flow-into</item>\n            <item>font</item>\n            <item>font-family</item>\n            <item>font-feature-settings</item>\n            <item>font-kerning</item>\n            <item>font-language-override</item>\n            <item>font-max-size</item>\n            <item>font-min-size</item>\n            <item>font-optical-sizing</item>\n            <item>font-palette</item>\n            <item>font-size</item>\n            <item>font-size-adjust</item>\n            <item>font-stretch</item>\n            <item>font-style</item>\n            <item>font-synthesis</item>\n            <item>font-variant</item>\n            <item>font-variant-alternates</item>\n            <item>font-variant-caps</item>\n            <item>font-variant-east-asian</item>\n            <item>font-variant-emoji</item>\n            <item>font-variant-ligatures</item>\n            <item>font-variant-numeric</item>\n            <item>font-variant-position</item>\n            <item>font-variation-settings</item>\n            <item>font-weight</item>\n            <item>footnote-display</item>\n            <item>footnote-policy</item>\n            <item>gap</item>\n            <item>glyph-orientation-vertical</item>\n            <item>grid</item>\n            <item>grid-area</item>\n            <item>grid-auto-columns</item>\n            <item>grid-auto-flow</item>\n            <item>grid-auto-rows</item>\n            <item>grid-column</item>\n            <item>grid-column-end</item>\n            <item>grid-column-gap</item>\n            <item>grid-column-start</item>\n            <item>grid-gap</item>\n            <item>grid-row</item>\n            <item>grid-row-end</item>\n            <item>grid-row-gap</item>\n            <item>grid-row-start</item>\n            <item>grid-template</item>\n            <item>grid-template-areas</item>\n            <item>grid-template-columns</item>\n            <item>grid-template-rows</item>\n            <item>hanging-punctuation</item>\n            <item>height</item>\n            <item>hyphenate-character</item>\n            <item>hyphenate-limit-chars</item>\n            <item>hyphenate-limit-last</item>\n            <item>hyphenate-limit-lines</item>\n            <item>hyphenate-limit-zone</item>\n            <item>hyphens</item>\n            <item>image-orientation</item>\n            <item>image-rendering</item>\n            <item>image-resolution</item>\n            <item>initial-letter</item>\n            <item>initial-letter-align</item>\n            <item>initial-letter-wrap</item>\n            <item>inline-size</item>\n            <item>inset</item>\n            <item>inset-block</item>\n            <item>inset-block-end</item>\n            <item>inset-block-start</item>\n            <item>inset-inline</item>\n            <item>inset-inline-end</item>\n            <item>inset-inline-start</item>\n            <item>isolation</item>\n            <item>justify-content</item>\n            <item>justify-items</item>\n            <item>justify-self</item>\n            <item>left</item>\n            <item>letter-spacing</item>\n            <item>lighting-color</item>\n            <item>line-break</item>\n            <item>line-grid</item>\n            <item>line-height</item>\n            <item>line-height-step</item>\n            <item>line-snap</item>\n            <item>list-style</item>\n            <item>list-style-image</item>\n            <item>list-style-position</item>\n            <item>list-style-type</item>\n            <item>margin</item>\n            <item>margin-block</item>\n            <item>margin-block-end</item>\n            <item>margin-block-start</item>\n            <item>margin-bottom</item>\n            <item>margin-inline</item>\n            <item>margin-inline-end</item>\n            <item>margin-inline-start</item>\n            <item>margin-left</item>\n            <item>margin-right</item>\n            <item>margin-top</item>\n            <item>marker</item>\n            <item>marker-end</item>\n            <item>marker-knockout-left</item>\n            <item>marker-knockout-right</item>\n            <item>marker-mid</item>\n            <item>marker-pattern</item>\n            <item>marker-segment</item>\n            <item>marker-side</item>\n            <item>marker-start</item>\n            <item>marquee-direction</item>\n            <item>marquee-loop</item>\n            <item>marquee-speed</item>\n            <item>marquee-style</item>\n            <item>mask</item>\n            <item>mask-border</item>\n            <item>mask-border-mode</item>\n            <item>mask-border-outset</item>\n            <item>mask-border-repeat</item>\n            <item>mask-border-slice</item>\n            <item>mask-border-source</item>\n            <item>mask-border-width</item>\n            <item>mask-clip</item>\n            <item>mask-composite</item>\n            <item>mask-image</item>\n            <item>mask-mode</item>\n            <item>mask-origin</item>\n            <item>mask-position</item>\n            <item>mask-repeat</item>\n            <item>mask-size</item>\n            <item>mask-type</item>\n            <item>max-block-size</item>\n            <item>max-height</item>\n            <item>max-inline-size</item>\n            <item>max-lines</item>\n            <item>max-width</item>\n            <item>min-block-size</item>\n            <item>min-height</item>\n            <item>min-inline-size</item>\n            <item>min-width</item>\n            <item>mix-blend-mode</item>\n            <item>nav-up</item>\n            <item>nav-down</item>\n            <item>nav-left</item>\n            <item>nav-right</item>\n            <item>object-fit</item>\n            <item>object-position</item>\n            <item>offset</item>\n            <item>offset-after</item>\n            <item>offset-anchor</item>\n            <item>offset-before</item>\n            <item>offset-distance</item>\n            <item>offset-end</item>\n            <item>offset-path</item>\n            <item>offset-position</item>\n            <item>offset-rotate</item>\n            <item>offset-start</item>\n            <item>opacity</item>\n            <item>order</item>\n            <item>orphans</item>\n            <item>outline</item>\n            <item>outline-color</item>\n            <item>outline-offset</item>\n            <item>outline-style</item>\n            <item>outline-width</item>\n            <item>overflow</item>\n            <item>overflow-style</item>\n            <item>overflow-wrap</item>\n            <item>overflow-x</item>\n            <item>overflow-y</item>\n            <item>padding</item>\n            <item>padding-block</item>\n            <item>padding-block-end</item>\n            <item>padding-block-start</item>\n            <item>padding-bottom</item>\n            <item>padding-inline</item>\n            <item>padding-inline-end</item>\n            <item>padding-inline-start</item>\n            <item>padding-left</item>\n            <item>padding-right</item>\n            <item>padding-top</item>\n            <item>page</item>\n            <item>page-break-after</item>\n            <item>page-break-before</item>\n            <item>page-break-inside</item>\n            <item>pause</item>\n            <item>pause-after</item>\n            <item>pause-before</item>\n            <item>perspective</item>\n            <item>perspective-origin</item>\n            <item>pitch</item>\n            <item>pitch-range</item>\n            <item>place-content</item>\n            <item>place-items</item>\n            <item>place-self</item>\n            <item>play-during</item>\n            <item>pointer-events</item>\n            <item>position</item>\n            <item>quotes</item>\n            <item>region-fragment</item>\n            <item>resize</item>\n            <item>richness</item>\n            <item>right</item>\n            <item>rotation</item>\n            <item>rotation-point</item>\n            <item>row-gap</item>\n            <item>ruby-align</item>\n            <item>ruby-merge</item>\n            <item>ruby-position</item>\n            <item>running</item>\n            <item>scrollbar-gutter</item>\n            <item>shape-image-threshold</item>\n            <item>shape-inside</item>\n            <item>shape-margin</item>\n            <item>shape-outside</item>\n            <item>size</item>\n            <item>speak</item>\n            <item>speak-header</item>\n            <item>speak-numeral</item>\n            <item>speak-punctuation</item>\n            <item>speech-rate</item>\n            <item>stress</item>\n            <item>string-set</item>\n            <item>table-layout</item>\n            <item>tab-size</item>\n            <item>text-align-all</item>\n            <item>text-align</item>\n            <item>text-align-last</item>\n            <item>text-combine-upright</item>\n            <item>text-decoration-color</item>\n            <item>text-decoration</item>\n            <item>text-decoration-line</item>\n            <item>text-decoration-skip</item>\n            <item>text-decoration-skip-ink</item>\n            <item>text-decoration-style</item>\n            <item>text-decoration-width</item>\n            <item>text-emphasis</item>\n            <item>text-emphasis-color</item>\n            <item>text-emphasis-position</item>\n            <item>text-emphasis-skip</item>\n            <item>text-emphasis-style</item>\n            <item>text-indent</item>\n            <item>text-justify</item>\n            <item>text-orientation</item>\n            <item>text-overflow</item>\n            <item>text-shadow</item>\n            <item>text-space-collapse</item>\n            <item>text-space-trim</item>\n            <item>text-spacing</item>\n            <item>text-transform</item>\n            <item>text-underline-offset</item>\n            <item>text-underline-position</item>\n            <item>text-wrap</item>\n            <item>top</item>\n            <item>transform</item>\n            <item>transform-box</item>\n            <item>transform-origin</item>\n            <item>transform-style</item>\n            <item>transition</item>\n            <item>transition-delay</item>\n            <item>transition-duration</item>\n            <item>transition-property</item>\n            <item>transition-timing-function</item>\n            <item>unicode-bidi</item>\n            <item>user-select</item>\n            <item>vertical-align</item>\n            <item>visibility</item>\n            <item>voice-family</item>\n            <item>volume</item>\n            <item>white-space</item>\n            <item>widows</item>\n            <item>width</item>\n            <item>will-change</item>\n            <item>word-break</item>\n            <item>word-spacing</item>\n            <item>word-wrap</item>\n            <item>wrap-after</item>\n            <item>wrap-before</item>\n            <item>wrap-flow</item>\n            <item>wrap-inside</item>\n            <item>wrap-through</item>\n            <item>writing-mode</item>\n            <item>z-index</item>\n\n            <!-- Gecko rendering engine CSS property extensions -->\n            <item>-moz-animation</item>\n            <item>-moz-animation-delay</item>\n            <item>-moz-animation-direction</item>\n            <item>-moz-animation-duration</item>\n            <item>-moz-animation-fill-mode</item>\n            <item>-moz-animation-iteration-count</item>\n            <item>-moz-animation-name</item>\n            <item>-moz-animation-play-state</item>\n            <item>-moz-animation-timing-function</item>\n            <item>-moz-appearance</item>\n            <item>-moz-background-clip</item>\n            <item>-moz-background-origin</item>\n            <item>-moz-background-size</item>\n            <item>-moz-border-image</item>\n            <item>-moz-border-radius</item>\n            <item>-moz-border-radius-bottomleft</item>\n            <item>-moz-border-radius-bottomright</item>\n            <item>-moz-border-radius-topleft</item>\n            <item>-moz-border-radius-topright</item>\n            <item>-moz-box-align</item>\n            <item>-moz-box-direction</item>\n            <item>-moz-box-flex</item>\n            <item>-moz-box-flex-group</item>\n            <item>-moz-box-ordinal-group</item>\n            <item>-moz-box-orient</item>\n            <item>-moz-box-pack</item>\n            <item>-moz-box-shadow</item>\n            <item>-moz-box-sizing</item>\n            <item>-moz-box</item>\n            <item>-moz-column-count</item>\n            <item>-moz-column-fill</item>\n            <item>-moz-column-gap</item>\n            <item>-moz-column-rule</item>\n            <item>-moz-column-rule-color</item>\n            <item>-moz-column-rule-style</item>\n            <item>-moz-column-rule-width</item>\n            <item>-moz-columns</item>\n            <item>-moz-column-width</item>\n            <item>-moz-hyphens</item>\n            <item>-moz-opacity</item>\n            <item>-moz-outline-style</item>\n            <item>-moz-perspective</item>\n            <item>-moz-resize</item>\n            <item>-moz-text-align-last</item>\n            <item>-moz-text-decoration-color</item>\n            <item>-moz-text-decoration-line</item>\n            <item>-moz-text-decoration-style</item>\n            <item>-moz-transform</item>\n            <item>-moz-transform-origin</item>\n            <item>-moz-transform-style</item>\n            <item>-moz-transition</item>\n            <item>-moz-transition-delay</item>\n            <item>-moz-transition-duration</item>\n            <item>-moz-transition-property</item>\n            <item>-moz-transition-timing-function</item>\n            <item>-moz-user-select</item>\n\n            <!-- Opera rendering engine CSS property extensions -->\n            <item>-o-background-size</item>\n            <item>-o-linear-gradient</item>\n            <item>-o-text-overflow</item>\n            <item>-o-transition</item>\n            <item>-o-transform-origin</item>\n\n            <!-- konq specific -->\n            <item>konq_bgpos_x</item>\n            <item>konq_bgpos_y</item>\n            <item>-khtml-background-size</item>\n            <item>-khtml-border-top-left-radius</item>\n            <item>-khtml-border-top-right-radius</item>\n            <item>-khtml-border-bottom-left-radius</item>\n            <item>-khtml-border-bottom-right-radius</item>\n            <item>-khtml-border-radius</item>\n            <item>-khtml-box-shadow</item>\n            <item>-khtml-opacity</item>\n\n            <!-- Webkit rendering engine CSS property extensions -->\n            <item>-webkit-appearance</item>\n            <item>-webkit-animation</item>\n            <item>-webkit-animation-name</item>\n            <item>-webkit-animation-duration</item>\n            <item>-webkit-animation-iteration</item>\n            <item>-webkit-animation-direction</item>\n            <item>-webkit-animation-delay</item>\n            <item>-webkit-animation-play-state</item>\n            <item>-webkit-animation-fill-mode</item>\n            <item>-webkit-background-size</item>\n            <item>-webkit-backface-visibility</item>\n            <item>-webkit-border-image</item>\n            <item>-webkit-border-bottom-colors</item>\n            <item>-webkit-border-left-colors</item>\n            <item>-webkit-border-radius</item>\n            <item>-webkit-border-right-colors</item>\n            <item>-webkit-border-top-colors</item>\n            <item>-webkit-border-top-left-radius</item>\n            <item>-webkit-border-top-right-radius</item>\n            <item>-webkit-border-bottom-left-radius</item>\n            <item>-webkit-border-bottom-right-radius</item>\n            <item>-webkit-border-radius-bottomleft</item>\n            <item>-webkit-border-radius-bottomright</item>\n            <item>-webkit-box-align</item>\n            <item>-webkit-box-direction</item>\n            <item>-webkit-box-flex</item>\n            <item>-webkit-box-ordinal-group</item>\n            <item>-webkit-box-orient</item>\n            <item>-webkit-box-pack</item>\n            <item>-webkit-box-reflect</item>\n            <item>-webkit-box-shadow</item>\n            <item>-webkit-box-sizing</item>\n            <item>-webkit-column-count</item>\n            <item>-webkit-column-gap</item>\n            <item>-webkit-hyphens</item>\n            <item>-webkit-linear-gradient</item>\n            <item>-webkit-gradient</item>\n            <item>-webkit-overflow-scrolling</item>\n            <item>-webkit-perspective</item>\n            <item>-webkit-text-decoration</item>\n            <item>-webkit-text-decoration-skip</item>\n            <item>-webkit-text-fill-color</item>\n            <item>-webkit-text-stroke-color</item>\n            <item>-webkit-text-stroke-width</item>\n            <item>-webkit-text-size-adjust</item>\n            <item>-webkit-tap-highlight-color</item>\n            <item>-webkit-transform</item>\n            <item>-webkit-transform-origin</item>\n            <item>-webkit-transform-style</item>\n            <item>-webkit-transition</item>\n            <item>-webkit-transition-property</item>\n            <item>-webkit-transition-delay</item>\n            <item>-webkit-transition-duration</item>\n            <item>-webkit-user-select</item>\n\n            <!-- Trident (a.k.a., MSHTML) CSS property extensions -->\n            <item>zoom</item>\n            <item>-ms-animation-name</item>\n            <item>-ms-animation-duration</item>\n            <item>-ms-animation-iteration</item>\n            <item>-ms-animation-direction</item>\n            <item>-ms-animation-delay</item>\n            <item>-ms-animation-play-state</item>\n            <item>-ms-animation-fill-mode</item>\n            <item>-ms-box-sizing</item>\n            <item>-ms-filter</item>\n            <item>-ms-flex</item>\n            <item>-ms-flex-align</item>\n            <item>-ms-flex-direction</item>\n            <item>-ms-flex-flow</item>\n            <item>-ms-flex-item-align</item>\n            <item>-ms-flex-line-pack</item>\n            <item>-ms-flex-negative</item>\n            <item>-ms-flex-order</item>\n            <item>-ms-flex-pack</item>\n            <item>-ms-flex-positive</item>\n            <item>-ms-flex-position</item>\n            <item>-ms-flex-preferred-size</item>\n            <item>-ms-flex-wrap</item>\n            <item>-ms-interpolation-mode</item>\n            <item>-ms-linear-gradient</item>\n            <item>-ms-overflow-style</item>\n            <item>-ms-text-size-adjust</item>\n            <item>-ms-transform</item>\n            <item>-ms-transition</item>\n            <item>-ms-user-select</item>\n        </list>\n\n        <list name=\"value keywords\">\n            <item>inherit</item>\n            <item>unset</item>\n            <item>auto</item>\n            <!-- <item>revert</item> -->\n        </list>\n\n        <list name=\"values\">\n            <item>none</item>\n            <item>hidden</item>\n            <item>dotted</item>\n            <item>dashed</item>\n            <item>solid</item>\n            <item>double</item>\n            <item>groove</item>\n            <item>ridge</item>\n            <item>inset</item>\n            <item>outset</item>\n            <item>xx-small</item>\n            <item>x-small</item>\n            <item>small</item>\n            <item>medium</item>\n            <item>large</item>\n            <item>x-large</item>\n            <item>xx-large</item>\n            <item>smaller</item>\n            <item>larger</item>\n            <item>italic</item>\n            <item>oblique</item>\n            <item>small-caps</item>\n            <item>normal</item>\n            <item>bold</item>\n            <item>bolder</item>\n            <item>lighter</item>\n            <item>light</item>\n            <item>transparent</item>\n            <item>repeat</item>\n            <item>repeat-x</item>\n            <item>repeat-y</item>\n            <item>no-repeat</item>\n            <item>baseline</item>\n            <item>sub</item>\n            <item>super</item>\n            <item>top</item>\n            <item>text-top</item>\n            <item>middle</item>\n            <item>bottom</item>\n            <item>text-bottom</item>\n            <item>left</item>\n            <item>right</item>\n            <item>center</item>\n            <item>justify</item>\n            <item>konq-center</item>\n            <item>disc</item>\n            <item>circle</item>\n            <item>square</item>\n            <item>box</item>\n            <item>decimal</item>\n            <item>decimal-leading-zero</item>\n            <item>lower-roman</item>\n            <item>upper-roman</item>\n            <item>lower-greek</item>\n            <item>lower-alpha</item>\n            <item>lower-latin</item>\n            <item>upper-alpha</item>\n            <item>upper-latin</item>\n            <item>hebrew</item>\n            <item>armenian</item>\n            <item>georgian</item>\n            <item>cjk-ideographic</item>\n            <item>hiragana</item>\n            <item>katakana</item>\n            <item>hiragana-iroha</item>\n            <item>katakana-iroha</item>\n            <item>inline</item>\n            <item>inline-block</item>\n            <item>block</item>\n            <item>list-item</item>\n            <item>run-in</item>\n            <item>compact</item>\n            <item>marker</item>\n            <item>table</item>\n            <item>inline-table</item>\n            <item>table-row-group</item>\n            <item>table-header-group</item>\n            <item>table-footer-group</item>\n            <item>table-row</item>\n            <item>table-column-group</item>\n            <item>table-column</item>\n            <item>table-cell</item>\n            <item>table-caption</item>\n            <item>crosshair</item>\n            <item>default</item>\n            <item>pointer</item>\n            <item>move</item>\n            <item>e-resize</item>\n            <item>ne-resize</item>\n            <item>nw-resize</item>\n            <item>n-resize</item>\n            <item>se-resize</item>\n            <item>sw-resize</item>\n            <item>s-resize</item>\n            <item>w-resize</item>\n            <item>text</item>\n            <item>wait</item>\n            <item>help</item>\n            <item>above</item>\n            <item>absolute</item>\n            <item>always</item>\n            <item>avoid</item>\n            <item>below</item>\n            <item>bidi-override</item>\n            <item>blink</item>\n            <item>both</item>\n            <item>capitalize</item>\n            <item>caption</item>\n            <item>clip</item>\n            <item>close-quote</item>\n            <item>collapse</item>\n            <item>condensed</item>\n            <item>crop</item>\n            <item>cross</item>\n            <item>ellipsis</item>\n            <item>ellipsis-word</item>\n            <item>embed</item>\n            <item>expanded</item>\n            <item>extra-condensed</item>\n            <item>extra-expanded</item>\n            <item>fixed</item>\n            <item>hand</item>\n            <item>hide</item>\n            <item>higher</item>\n            <item>icon</item>\n            <item>inside</item>\n            <item>invert</item>\n            <item>landscape</item>\n            <item>level</item>\n            <item>line-through</item>\n            <item>loud</item>\n            <item>lower</item>\n            <item>lowercase</item>\n            <item>ltr</item>\n            <item>menu</item>\n            <item>message-box</item>\n            <item>mix</item>\n            <item>narrower</item>\n            <item>no-close-quote</item>\n            <item>no-open-quote</item>\n            <item>nowrap</item>\n            <item>open-quote</item>\n            <item>outside</item>\n            <item>overline</item>\n            <item>portrait</item>\n            <item>pre</item>\n            <item>pre-line</item>\n            <item>pre-wrap</item>\n            <item>relative</item>\n            <item>rtl</item>\n            <item>scroll</item>\n            <item>semi-condensed</item>\n            <item>semi-expanded</item>\n            <item>separate</item>\n            <item>show</item>\n            <item>small-caption</item>\n            <item>static</item>\n            <item>static-position</item>\n            <item>status-bar</item>\n            <item>thick</item>\n            <item>thin</item>\n            <item>ultra-condensed</item>\n            <item>ultra-expanded</item>\n            <item>underline</item>\n            <item>uppercase</item>\n            <item>visible</item>\n            <item>wider</item>\n            <item>break</item>\n            <item>serif</item>\n            <item>sans-serif</item>\n            <item>cursive</item>\n            <item>fantasy</item>\n            <item>monospace</item>\n            <item>border-box</item>\n            <item>content-box</item>\n            <item>-epub-hyphens</item>\n            <item>contain</item>\n            <item>cover</item>\n\n            <!-- transition and animation -->\n            <item>all</item>\n            <item>ease</item>\n            <item>ease-in</item>\n            <item>ease-out</item>\n            <item>ease-in-out</item>\n            <item>step-start</item>\n            <item>step-end</item>\n            <item>linear</item>\n\n            <!-- animation -->\n            <item>infinite</item>\n            <item>reverse</item>\n            <item>alternate</item>\n            <item>alternate-reverse</item>\n            <item>forwards</item>\n            <item>backwards</item>\n            <item>running</item>\n            <item>paused</item>\n        </list>\n\n        <list name=\"colors\">\n            <item>black</item>\n            <item>silver</item>\n            <item>gray</item>\n            <item>white</item>\n            <item>maroon</item>\n            <item>red</item>\n            <item>purple</item>\n            <item>fuchsia</item>\n            <item>green</item>\n            <item>lime</item>\n            <item>olive</item>\n            <item>yellow</item>\n            <item>navy</item>\n            <item>blue</item>\n            <item>teal</item>\n            <item>aqua</item>\n            <item>orange</item>\n            <item>aliceblue</item>\n            <item>antiquewhite</item>\n            <item>aquamarine</item>\n            <item>azure</item>\n            <item>beige</item>\n            <item>bisque</item>\n            <item>blanchedalmond</item>\n            <item>blueviolet</item>\n            <item>brown</item>\n            <item>burlywood</item>\n            <item>cadetblue</item>\n            <item>chartreuse</item>\n            <item>chocolate</item>\n            <item>coral</item>\n            <item>cornflowerblue</item>\n            <item>cornsilk</item>\n            <item>crimson</item>\n            <item>cyan</item>\n            <item>aqua</item>\n            <item>darkblue</item>\n            <item>darkcyan</item>\n            <item>darkgoldenrod</item>\n            <item>darkgray</item>\n            <item>darkgreen</item>\n            <item>darkgrey</item>\n            <item>darkkhaki</item>\n            <item>darkmagenta</item>\n            <item>darkolivegreen</item>\n            <item>darkorange</item>\n            <item>darkorchid</item>\n            <item>darkred</item>\n            <item>darksalmon</item>\n            <item>darkseagreen</item>\n            <item>darkslateblue</item>\n            <item>darkslategray</item>\n            <item>darkslategrey</item>\n            <item>darkturquoise</item>\n            <item>darkviolet</item>\n            <item>deeppink</item>\n            <item>deepskyblue</item>\n            <item>dimgray</item>\n            <item>dimgrey</item>\n            <item>dodgerblue</item>\n            <item>firebrick</item>\n            <item>floralwhite</item>\n            <item>forestgreen</item>\n            <item>gainsboro</item>\n            <item>ghostwhite</item>\n            <item>gold</item>\n            <item>goldenrod</item>\n            <item>greenyellow</item>\n            <item>grey</item>\n            <item>honeydew</item>\n            <item>hotpink</item>\n            <item>indianred</item>\n            <item>indigo</item>\n            <item>ivory</item>\n            <item>khaki</item>\n            <item>lavender</item>\n            <item>lavenderblush</item>\n            <item>lawngreen</item>\n            <item>lemonchiffon</item>\n            <item>lightblue</item>\n            <item>lightcoral</item>\n            <item>lightcyan</item>\n            <item>lightgoldenrodyellow</item>\n            <item>lightgray</item>\n            <item>lightgreen</item>\n            <item>lightgrey</item>\n            <item>lightpink</item>\n            <item>lightsalmon</item>\n            <item>lightseagreen</item>\n            <item>lightskyblue</item>\n            <item>lightslategray</item>\n            <item>lightslategrey</item>\n            <item>lightsteelblue</item>\n            <item>lightyellow</item>\n            <item>limegreen</item>\n            <item>linen</item>\n            <item>magenta</item>\n            <item>fuchsia</item>\n            <item>mediumaquamarine</item>\n            <item>mediumblue</item>\n            <item>mediumorchid</item>\n            <item>mediumpurple</item>\n            <item>mediumseagreen</item>\n            <item>mediumslateblue</item>\n            <item>mediumspringgreen</item>\n            <item>mediumturquoise</item>\n            <item>mediumvioletred</item>\n            <item>midnightblue</item>\n            <item>mintcream</item>\n            <item>mistyrose</item>\n            <item>moccasin</item>\n            <item>navajowhite</item>\n            <item>oldlace</item>\n            <item>olivedrab</item>\n            <item>orangered</item>\n            <item>orchid</item>\n            <item>palegoldenrod</item>\n            <item>palegreen</item>\n            <item>paleturquoise</item>\n            <item>palevioletred</item>\n            <item>papayawhip</item>\n            <item>peachpuff</item>\n            <item>peru</item>\n            <item>pink</item>\n            <item>plum</item>\n            <item>powderblue</item>\n            <item>rosybrown</item>\n            <item>royalblue</item>\n            <item>saddlebrown</item>\n            <item>salmon</item>\n            <item>sandybrown</item>\n            <item>seagreen</item>\n            <item>seashell</item>\n            <item>sienna</item>\n            <item>skyblue</item>\n            <item>slateblue</item>\n            <item>slategray</item>\n            <item>slategrey</item>\n            <item>snow</item>\n            <item>springgreen</item>\n            <item>steelblue</item>\n            <item>tan</item>\n            <item>thistle</item>\n            <item>tomato</item>\n            <item>turquoise</item>\n            <item>violet</item>\n            <item>wheat</item>\n            <item>whitesmoke</item>\n            <item>yellowgreen</item>\n            <item>rebeccapurple</item>\n\n            <item>ActiveBorder</item>\n            <item>ActiveCaption</item>\n            <item>AppWorkspace</item>\n            <item>Background</item>\n            <item>ButtonFace</item>\n            <item>ButtonHighlight</item>\n            <item>ButtonShadow</item>\n            <item>ButtonText</item>\n            <item>CaptionText</item>\n            <item>GrayText</item>\n            <item>Highlight</item>\n            <item>HighlightText</item>\n            <item>InactiveBorder</item>\n            <item>InactiveCaption</item>\n            <item>InactiveCaptionText</item>\n            <item>InfoBackground</item>\n            <item>InfoText</item>\n            <item>Menu</item>\n            <item>MenuText</item>\n            <item>Scrollbar</item>\n            <item>ThreeDDarkShadow</item>\n            <item>ThreeDFace</item>\n            <item>ThreeDHighlight</item>\n            <item>ThreeDLightShadow</item>\n            <item>ThreeDShadow</item>\n            <item>Window</item>\n            <item>WindowFrame</item>\n            <item>WindowText</item>\n        </list>\n\n        <list name=\"functions\">\n            <item>attr</item>\n            <item>calc</item>\n            <item>hsl</item>\n            <item>hsla</item>\n            <item>linear-gradient</item>\n            <item>radial-gradient</item>\n            <item>repeating-linear-gradient</item>\n            <item>repeating-radial-gradient</item>\n            <item>rgb</item>\n            <item>rgba</item>\n            <item>var</item>\n            <item>url</item>\n\n            <!-- clip -->\n            <item>rect</item>\n\n            <!-- shape-outside and clip-path -->\n            <item>inset</item>\n            <item>circle</item>\n            <item>ellipse</item>\n            <item>polygon</item>\n\n            <!-- filter and backdrop-filter -->\n            <item>blur</item>\n            <item>brightness</item>\n            <item>contrast</item>\n            <item>drop-shadow</item>\n            <item>grayscale</item>\n            <item>hue-rotate</item>\n            <item>invert</item>\n            <item>opacity</item>\n            <item>saturate</item>\n            <item>sepia</item>\n\n            <!-- grid-template-columns and grid-template-rows -->\n            <item>max-content</item>\n            <item>min-content</item>\n            <item>minmax</item>\n            <item>fix-content</item>\n            <item>repeat</item>\n\n            <!-- transition and animation -->\n            <item>cubic-bezier</item>\n            <item>frames</item>\n            <item>steps</item>\n\n            <!-- transform -->\n            <item>matrix</item>\n            <item>matrix3d</item>\n            <item>perspective</item>\n            <item>rotate</item>\n            <item>rotate3d</item>\n            <item>rotateX</item>\n            <item>rotateY</item>\n            <item>rotateZ</item>\n            <item>scale</item>\n            <item>scale3d</item>\n            <item>scaleX</item>\n            <item>scaleY</item>\n            <item>scaleZ</item>\n            <item>skew</item>\n            <item>skewX</item>\n            <item>skewY</item>\n            <item>translate</item>\n            <item>translate3d</item>\n            <item>translateX</item>\n            <item>translateY</item>\n            <item>translateZ</item>\n\n            <!-- inner @font-face -->\n            <item>local</item>\n            <item>format</item>\n        </list>\n\n        <list name=\"medias\">\n            <!-- types -->\n            <item>all</item>\n            <item>print</item>\n            <item>screen</item>\n            <item>speech</item>\n\n            <!-- features -->\n            <item>any-pointer</item>\n            <item>any-hover</item>\n            <item>aspect-ratio</item>\n            <item>color</item>\n            <item>color-gamut</item>\n            <item>color-index</item>\n            <item>display-mode</item>\n            <item>grid</item>\n            <item>height</item>\n            <item>hover</item>\n            <item>max-aspect-ratio</item>\n            <item>max-color</item>\n            <item>max-color-index</item>\n            <item>max-device-aspect-ratio</item>\n            <item>max-device-height</item>\n            <item>max-device-width</item>\n            <item>max-height</item>\n            <item>max-monochrome</item>\n            <item>max-resolution</item>\n            <item>max-width</item>\n            <item>min-aspect-ratio</item>\n            <item>min-color</item>\n            <item>min-color-index</item>\n            <item>min-device-aspect-ratio</item>\n            <item>min-device-height</item>\n            <item>min-device-width</item>\n            <item>min-height</item>\n            <item>min-monochrome</item>\n            <item>min-resolution</item>\n            <item>min-width</item>\n            <item>monochrome</item>\n            <item>orientation</item>\n            <item>pointer</item>\n            <item>resolution</item>\n            <item>scan</item>\n            <item>update</item>\n            <item>width</item>\n        </list>\n\n        <!-- prefixed by :: -->\n        <list name=\"pseudoelements\">\n            <item>after</item>\n            <item>before</item>\n            <item>cue</item>\n            <item>first-letter</item>\n            <item>first-line</item>\n            <item>selection</item>\n\n            <!-- experimental -->\n            <item>backdrop</item>\n            <item>placeholder</item>\n            <!-- <item>marker</item> -->\n            <item>slotted</item>\n            <!-- <item>spelling-error</item> -->\n            <!-- <item>grammar-error</item> -->\n\n            <!-- UI pseudo-classes -->\n            <item>value</item>\n            <item>choices</item>\n            <item>repeat-item</item>\n            <item>repeat-index</item>\n\n            <item>-moz-progress-bar</item>\n            <item>-moz-range-progress</item>\n            <item>-moz-range-thumb</item>\n            <item>-moz-range-track</item>\n            <item>-moz-selection</item>\n            <item>-ms-fill</item>\n            <item>-ms-fill-lower</item>\n            <item>-ms-fill-upper</item>\n            <item>-ms-thumb</item>\n            <item>-ms-track</item>\n            <item>-webkit-progress-bar</item>\n            <item>-webkit-progress-value</item>\n            <item>-webkit-slider-runnable-track</item>\n            <item>-webkit-slider-thumb</item>\n        </list>\n\n        <!-- prefixed by : -->\n        <list name=\"pseudoclasses\">\n            <item>active</item>\n            <item>any-link</item>\n            <item>checked</item>\n            <item>default</item>\n            <item>defined</item>\n            <!-- <item>dir</item> -->\n            <item>disabled</item>\n            <item>empty</item>\n            <item>enabled</item>\n            <item>first-child</item>\n            <item>first-of-type</item>\n            <item>fullscreen</item>\n            <item>focus</item>\n            <item>focus-within</item>\n            <item>host</item>\n            <item>hover</item>\n            <item>in-range</item>\n            <item>indeterminate</item>\n            <item>invalid</item>\n            <item>lang</item>\n            <item>last-child</item>\n            <item>last-of-type</item>\n            <item>link</item>\n            <item>not</item>\n            <item>nth-child</item>\n            <item>nth-last-child</item>\n            <item>nth-last-of-type</item>\n            <item>nth-of-type</item>\n            <item>only-child</item>\n            <item>only-of-type</item>\n            <item>optional</item>\n            <item>out-of-range</item>\n            <item>placeholder-shown</item>\n            <item>read-only</item>\n            <item>read-write</item>\n            <item>required</item>\n            <item>root</item>\n            <item>scope</item>\n            <item>target</item>\n            <item>valid</item>\n            <item>visited</item>\n\n            <!-- pseudo-elements -->\n            <item>after</item>\n            <item>before</item>\n            <item>cue</item>\n            <item>first-letter</item>\n            <item>first-line</item>\n            <item>selection</item>\n        </list>\n\n        <list name=\"pseudoclass-selector\">\n            <item>not</item>\n            <item>matches</item>\n        </list>\n\n        <list name=\"pseudoclasses-@page\">\n            <item>blank</item>\n            <item>first</item>\n            <item>left</item>\n            <item>recto</item>\n            <item>right</item>\n            <item>verso</item>\n        </list>\n\n        <list name=\"at-rules\">\n            <item>@character</item>\n            <item>@charset</item>\n            <item>@import</item>\n            <item>@namespace</item>\n        </list>\n\n        <list name=\"nested at-rules\">\n            <item>@document</item>\n            <item>@media</item>\n            <item>@supports</item>\n        </list>\n\n        <list name=\"@viewport\">\n            <item>@viewport</item>\n        </list>\n\n        <list name=\"within-@viewport\">\n            <item>min-width</item>\n            <item>max-width</item>\n            <item>width</item>\n            <item>min-height</item>\n            <item>max-height</item>\n            <item>height</item>\n            <item>zoom</item>\n            <item>min-zoom</item>\n            <item>max-zoom</item>\n            <item>user-zoom</item>\n            <item>orientation</item>\n            <item>viewport-fit</item>\n        </list>\n\n        <list name=\"@page\">\n            <item>@page</item>\n        </list>\n\n        <list name=\"within-@page\">\n            <item>size</item>\n            <item>marks</item>\n            <item>bleed</item>\n        </list>\n\n        <list name=\"@font-face\">\n            <item>@font-face</item>\n        </list>\n\n        <list name=\"within-@font-face\">\n            <item>font-display</item>\n            <item>font-family</item>\n            <item>font-stretch</item>\n            <item>font-style</item>\n            <item>font-weight</item>\n            <item>font-variant</item>\n            <item>font-feature-settings</item>\n            <item>font-variation-settings</item>\n            <item>src</item>\n            <item>unicode-range</item>\n        </list>\n\n        <list name=\"@keyframes\">\n            <item>@keyframes</item>\n        </list>\n\n        <list name=\"within-@keyframes\">\n            <item>from</item>\n            <item>to</item>\n        </list>\n\n        <list name=\"media operators\">\n            <item>and</item>\n            <item>only</item>\n            <item>not</item>\n        </list>\n\n        <contexts>\n            <context name=\"Base\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <DetectChar attribute=\"At Rule\" context=\"SelectAtRule\" char=\"@\" lookAhead=\"true\" />\n                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type=\"search\"] -->\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" char=\":\" />\n                <DetectChar attribute=\"Selector Attribute\" context=\"SelectorAttr\" char=\"[\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"*>+~|\" />\n                <RegExpr attribute=\"Selector Id\" context=\"#stay\" String=\"#[-]?(&nmstart;)(&nmchar;)*\" />\n                <RegExpr attribute=\"Selector Class\" context=\"#stay\" String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\" />\n                <RegExpr attribute=\"Selector Tag\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*\" />\n            </context>\n\n            <context name=\"FindSelector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <IncludeRules context=\"FindComments\" />\n                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type=\"search\"] -->\n                <DetectChar attribute=\"Selector Attribute\" context=\"SelectorAttr\" char=\"[\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"*>+~|\" />\n                <RegExpr attribute=\"Selector Id\" context=\"#stay\" String=\"#[-]?(&nmstart;)(&nmchar;)*\" />\n                <RegExpr attribute=\"Selector Class\" context=\"#stay\" String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\" />\n                <RegExpr attribute=\"Selector Tag\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*\" />\n            </context>\n\n            <!-- find functions // rgba(255,255,255,0.75) -->\n            <context name=\"FindFunctions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"Function\" context=\"Function\" String=\"[a-z\\-]{2,}\\(\" lookAhead=\"true\" />\n            </context>\n\n            <!-- find values //  10px 12pt 2.5em 1rem 75% #ffcc99 red solid -->\n            <context name=\"FindValues\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Annotation\" context=\"Annotation\" char=\"!\" />\n                <keyword attribute=\"Value Keyword\" context=\"#stay\" String=\"value keywords\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"values\" />\n                <keyword attribute=\"Color\" context=\"#stay\" String=\"colors\" />\n                <RegExpr attribute=\"Color\" context=\"#stay\" String=\"#([0-9A-Fa-f]{3,4}){1,2}\\b\" />\n                <RegExpr attribute=\"Number\" context=\"FindUnits\" String=\"[-+]?([0-9]+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?(?![-+])\" />\n                <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*\" />\n            </context>\n\n            <context name=\"Annotation\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <WordDetect attribute=\"Annotation\" context=\"#pop\" String=\"important\" />\n            </context>\n\n            <context name=\"FindUnits\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <!-- https://drafts.csswg.org/css-values-4/#lengths -->\n                <RegExpr attribute=\"Unit\" context=\"#stay\" String=\"(%|(em|ex|cap|ch|ic|rem|lh|rlh|vw|vh|vi|vb|vmin|vmax|cm|mm|Q|in|pc|pt|px|deg|rad|grad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|x)\\b)(?![-+])\" />\n            </context>\n\n            <!-- find strings // \"some words\" 'some words' -->\n            <context name=\"FindStrings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"StringDQ\" char=\"&quot;\" />\n                <DetectChar attribute=\"String\" context=\"StringSQ\" char=\"'\" />\n            </context>\n\n            <!-- find comments // /* comment */ -->\n            <context name=\"FindComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Comment\" context=\"IsComments\" char=\"/\" char1=\"*\" lookAhead=\"true\"/>\n                <Detect2Chars attribute=\"Error\" context=\"Error\" char=\"/\" char1=\"/\" />\n            </context>\n\n            <context name=\"Error\" attribute=\"Error\" lineEndContext=\"#pop\">\n                <RegExpr attribute=\"Error\" context=\"#pop\" String=\".*\" />\n            </context>\n\n            <context name=\"IsComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"Region Marker\" context=\"#pop\" String=\"/\\*\\s*BEGIN\\b.*\\*/\" beginRegion=\"UserDefined\" />\n                <RegExpr attribute=\"Region Marker\" context=\"#pop\" String=\"/\\*\\s*END\\b.*\\*/\" endRegion=\"UserDefined\" />\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"*\" beginRegion=\"comment\" />\n            </context>\n\n            <context name=\"SelectAtRule\" attribute=\"At Rule\" lineEndContext=\"#pop\">\n                <keyword attribute=\"At Rule\" context=\"#pop!NestedAtRule\" String=\"nested at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!AtRule\" String=\"at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@keyframes\" String=\"@keyframes\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@viewport\" String=\"@viewport\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@font-face\" String=\"@font-face\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@page\" String=\"@page\" />\n                <RegExpr attribute=\"At Rule\" context=\"#pop!UnknownAtRule\" String=\"@[a-zA-Z0-9\\-_]+\\b\" />\n            </context>\n\n            <context name=\"@keyframes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"Within-@keyframes\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"Within-@keyframes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <DetectChar attribute=\"Normal Text\" context=\"RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"within-@keyframes\" />\n                <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[-+]?[0-9.]+%\" />\n            </context>\n\n            <context name=\"@viewport\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" char=\":\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!Within-@viewport\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"Within-@viewport\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <keyword attribute=\"Property\" context=\"IsProperty\" String=\"within-@viewport\" />\n                <IncludeRules context=\"RuleSet\" />\n            </context>\n\n            <context name=\"@font-face\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!Within-@font-face\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"Within-@font-face\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <keyword attribute=\"Property\" context=\"IsProperty\" String=\"within-@font-face\" />\n                <RegExpr attribute=\"Unknown Property\" context=\"IsProperty\" String=\"[A-Za-z_-]+\\b\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"@page\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo-@page\" char=\":\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!Within-@page\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"SelectorPseudo-@page\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop\">\n                <keyword attribute=\"Selector Pseudo\" context=\"#pop\" String=\"pseudoclasses-@page\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"#pop\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"Within-@page\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <keyword attribute=\"Property\" context=\"IsProperty\" String=\"within-@page\" />\n                <IncludeRules context=\"RuleSet\" />\n            </context>\n\n            <context name=\"IsProperty\" attribute=\"Error\" lineEndContext=\"#stay\">\n                <DetectSpaces attribute=\"Normal Text\" />\n                <DetectChar attribute=\"Normal Text\" context=\"RuleParameters\" char=\":\" />\n            </context>\n\n            <context name=\"NestedAtRule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"NestedBase\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"AtRuleValue\" />\n            </context>\n\n            <context name=\"NestedBase\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <IncludeRules context=\"Base\" />\n            </context>\n\n            <context name=\"AtRule\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#pop\" char=\";\" />\n                <IncludeRules context=\"AtRuleValue\" />\n            </context>\n\n            <context name=\"UnknownAtRule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#pop\" char=\";\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <IncludeRules context=\"AtRuleValue\" />\n            </context>\n\n            <context name=\"AtRuleValue\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"media operators\" />\n                <RegExpr attribute=\"Property\" context=\"#stay\" String=\"[A-Za-z_-]+(?=\\s*:)\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"medias\" />\n                <IncludeRules context=\"FindValues\" />\n            </context>\n\n            <context name=\"SelectorAttr\" attribute=\"Selector Attribute\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Selector Attribute\" context=\"#pop\" char=\"]\" />\n                <IncludeRules context=\"FindStrings\" />\n                <DetectChar   attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"~\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"^\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"$\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"*\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"|\" char1=\"=\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"SelectorAttrValue\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Selector Attribute\" context=\"#pop#pop\" char=\"]\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"SelectorPseudo\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoElements\" char=\":\" />\n                <keyword attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueSelector\" String=\"pseudoclass-selector\" />\n                <keyword attribute=\"Selector Pseudo\" context=\"SelectorPseudoValue\" String=\"pseudoclasses\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"SelectorPseudoValue\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"SelectorPseudoElements\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\">\n                <keyword attribute=\"Selector Pseudo\" context=\"#pop!SelectorPseudoValue\" String=\"pseudoelements\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"#pop!SelectorPseudoValue\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"SelectorPseudoValueSelector\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueCloseSelector\" char=\"(\" />\n            </context>\n\n            <context name=\"SelectorPseudoValueCloseSelector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"#pop#pop#pop\" char=\")\" />\n                <DetectChar attribute=\"Error\" context=\"#pop#pop#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"FindSelector\" />\n            </context>\n\n            <context name=\"SelectorPseudoValue\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueClose\" char=\"(\" />\n            </context>\n\n            <context name=\"SelectorPseudoValueClose\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"#pop#pop#pop\" char=\")\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <Detect2Chars attribute=\"Comment\" context=\"#pop#pop\" char=\"*\" char1=\"/\" endRegion=\"comment\" />\n                <IncludeRules context=\"##Alerts\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"RuleSet\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <RegExpr attribute=\"Property\" context=\"Rule\" String=\"[A-Za-z_-]+(?=\\s*:)\" lookAhead=\"true\" />\n                <IncludeRules context=\"Base\" />\n                <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[A-Za-z_-]+\" />\n                <!-- auto-completion only, includes by previous rule -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"properties\" />\n            </context>\n\n            <context name=\"Rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Normal Text\" context=\"RuleParameters\" char=\":\" />\n                <Detect2Chars attribute=\"Variable\" context=\"IsVariable\" char=\"-\" char1=\"-\" />\n                <keyword attribute=\"Property\" context=\"#stay\" String=\"properties\" />\n                <RegExpr attribute=\"Unknown Property\" context=\"#stay\" String=\"[^:]+\" />\n            </context>\n\n            <context name=\"IsVariable\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleParameters\" char=\":\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[^:]+\" />\n            </context>\n\n            <context name=\"RuleParameters\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- Jump out conditions -->\n                <DetectChar attribute=\"Separator Symbol\" context=\"#pop#pop\" char=\";\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"Function\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Function\" context=\"FunctionParameters\" char=\"(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionVar\" String=\"var(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionUrl\" String=\"url(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionCalc\" String=\"calc(\" />\n                <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n                <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"FunctionVar\" attribute=\"Variable\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!FunctionParameters\">\n                <DetectSpaces />\n                <RegExpr attribute=\"Variable\" context=\"#pop!FunctionParameters\" String=\"--[^ \\t\\),]+\" />\n            </context>\n\n            <context name=\"FunctionCalc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n                <IncludeRules context=\"Calc\" />\n            </context>\n\n            <context name=\"NestedCalc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n                <IncludeRules context=\"Calc\" />\n            </context>\n\n            <context name=\"Calc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Normal Text\" context=\"NestedCalc\" char=\"(\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"[-](?=$|[ \\t(,;])|[+](?=$|[^0-9)])|[/*]\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"FunctionUrl\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"UrlValue\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindStrings\" />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n            </context>\n\n            <context name=\"UrlValue\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Function\" context=\"#pop#pop#pop\" char=\")\" />\n            </context>\n\n            <context name=\"FunctionParameters\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindValues\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n            </context>\n\n            <!-- string contexts -->\n            <context name=\"StringDQ\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n                <IncludeRules context=\"InsideString\" />\n            </context>\n\n            <context name=\"StringSQ\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n                <IncludeRules context=\"InsideString\" />\n            </context>\n\n            <context name=\"InsideString\" attribute=\"String\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"SpecialChar\" context=\"#stay\" String=\"\\\\([0-9A-Fa-f]{1,6}|.?)\" />\n                <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\\\?[^&quot;'\\\\]+\" />\n            </context>\n\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"At Rule\" defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Property\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Unknown Property\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\"/>\n            <itemData name=\"SpecialChar\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n            <itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Separator Symbol\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Value\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"Number\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"Value Keyword\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Color\" defStyleNum=\"dsConstant\" spellChecking=\"false\"/>\n            <itemData name=\"Unit\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Annotation\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Id\" defStyleNum=\"dsPreprocessor\" bold=\"1\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Class\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Attribute\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Pseudo\" defStyleNum=\"dsInformation\" italic=\"1\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Tag\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n            <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <keywords casesensitive=\"0\" weakDeliminator=\"-%@\" />\n        <comments>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n        </comments>\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cubescript.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n        This is an attempt to write a quick and dirty syntax file for Cubescript.\n        This will only document a subset of available keywords and internal commands, partly due to the various forks and the little overlap they have.\n        Some effort has been taken to highlight and mark errors where possible.\n\n        List values which are current ignored by the keyword identifier are commented.\n-->\n<language name=\"CubeScript\" section=\"Scripts\" version=\"2\" kateversion=\"5.0\" extensions=\"*.cfg\" mimetype=\"\" casesensitive=\"true\" author=\"Kevin Meyer\" license=\"zlib/libpng\" indenter=\"normal\">\n  <highlighting>\n    <!--\n        There are far more commands than these, these are just guaranteed to be in all forks.\n    -->\n    <list name=\"commands\">\n      <item>?</item>\n      <item>alias</item>\n      <item>at</item>\n      <item>case</item>\n      <item>casef</item>\n      <item>cases</item>\n      <item>clearconsole</item>\n      <item>clearsleep</item>\n      <item>complete</item>\n      <item>concat</item>\n      <item>concatword</item>\n      <item>cond</item>\n      <item>conskip</item>\n      <item>do</item>\n      <item>echo</item>\n      <item>error</item>\n      <item>escape</item>\n      <item>exec</item>\n      <item>format</item>\n      <item>getalias</item>\n      <item>getfvarmin</item>\n      <item>getfvarmax</item>\n      <item>getvarmin</item>\n      <item>getvarmax</item>\n      <item>history</item>\n      <item>if</item>\n      <item>indexof</item>\n      <item>inputcommand</item>\n      <item>keymap</item>\n      <item>listcomplete</item>\n      <item>listdel</item>\n      <item>listfind</item>\n      <item>listlen</item>\n      <item>listsplice</item>\n      <item>local</item>\n      <item>loop</item>\n      <item>loopconcat</item>\n      <item>loopconcatword</item>\n      <item>loopfiles</item>\n      <item>looplist</item>\n      <item>loopwhile</item>\n      <item>miniconskip</item>\n      <item>nodebug</item>\n      <item>onrelease</item>\n      <item>prettylist</item>\n      <item>push</item>\n      <item>resetvar</item>\n      <item>result</item>\n      <item>rnd</item>\n      <item>saycommand</item>\n      <item>searchbinds</item>\n      <item>searcheditbinds</item>\n      <item>searchspecbinds</item>\n      <item>sleep</item>\n      <item>strcmp</item>\n      <item>strlen</item>\n      <item>strreplace</item>\n      <item>strstr</item>\n      <item>sublist</item>\n      <item>substr</item>\n      <item>tabify</item>\n      <item>toggleconsole</item>\n      <item>unescape</item>\n      <item>while</item>\n      <item>writecfg</item>\n    </list>\n    <list name=\"bindcommands\">\n      <item>bind</item>\n      <item>editbind</item>\n      <item>specbind</item>\n      <item>getbind</item>\n      <item>geteditbind</item>\n      <item>getspecbind</item>\n    </list>\n    <list name=\"operators\">\n      <!--\n        listed in the same order as in src/engine/command.cpp\n        Includes all available operators, both basic and advanced\n      -->\n      <item>+</item>\n      <item>*</item>\n      <item>-</item>\n      <item>+f</item>\n      <item>*f</item>\n      <item>-f</item>\n      <item>=</item>\n      <item>!=</item>\n      <item>&gt;</item>\n      <item>&lt;</item>\n      <item>&gt;=</item>\n      <item>&lt;=</item>\n      <item>=f</item>\n      <item>!=f</item>\n      <item>&gt;f</item>\n      <item>&lt;f</item>\n      <item>&gt;=f</item>\n      <item>&lt;=f</item>\n      <item>^</item>\n      <item>!</item>\n      <item>&amp;</item>\n      <item>|</item>\n      <item>~</item>\n      <item>^~</item>\n      <item>&amp;~</item>\n      <item>|~</item>\n      <item>&lt;&lt;</item>\n      <item>&gt;&gt;</item>\n      <item>&amp;&amp;</item>\n      <item>||</item>\n      <item>abs</item>\n      <item>absf</item>\n      <item>div</item>\n      <item>mod</item>\n      <item>divf</item>\n      <item>modf</item>\n      <item>sin</item>\n      <item>cos</item>\n      <item>tan</item>\n      <item>asin</item>\n      <item>acos</item>\n      <item>atan</item>\n      <item>sqrt</item>\n      <item>pow</item>\n      <item>loge</item>\n      <item>log2</item>\n      <item>log10</item>\n      <item>exp</item>\n      <item>min</item>\n      <item>max</item>\n      <item>minf</item>\n      <item>maxf</item>\n      <item>=s</item>\n      <item>!=s</item>\n      <item>&lt;s</item>\n      <item>&gt;s</item>\n      <item>&lt;=s</item>\n      <item>&gt;=s</item>\n    </list>\n    <list name=\"keys\">\n      <!-- SDL 2.0 Standard Mose Buttons -->\n      <item>MOUSELEFT</item>\n      <item>MOUSEMIDDLE</item>\n      <item>MOUSERIGHT</item>\n      <item>MOUSEWHEELUP</item>\n      <item>MOUSEWHEELDOWN</item>\n      <item>MOUSEX1</item>\n      <item>MOUSEX2</item>\n\n      <!-- SDL 1.2, Standard Mouse Buttons -->\n      <item>MOUSE1</item>\n      <item>MOUSE2</item>\n      <item>MOUSE3</item>\n      <item>MOUSE4</item>\n      <item>MOUSE5</item>\n\n\n      <item>BACKSPACE</item>\n      <item>TAB</item>\n      <item>CLEAR</item>\n      <item>RETURN</item>\n      <item>PAUSE</item>\n      <item>ESCAPE</item>\n      <item>SPACE</item>\n      <item>EXCLAIM</item>\n      <item>QUOTEDBL</item>\n      <item>HASH</item>\n      <item>DOLLAR</item>\n      <item>AMPERSAND</item>\n      <item>QUOTE</item>\n      <item>LEFTPAREN</item>\n      <item>RIGHTPAREN</item>\n      <item>ASTERISK</item>\n      <item>PLUS</item>\n      <item>COMMA</item>\n      <item>MINUS</item>\n      <item>PERIOD</item>\n      <item>SLASH</item>\n      <item>0</item>\n      <item>1</item>\n      <item>2</item>\n      <item>3</item>\n      <item>4</item>\n      <item>5</item>\n      <item>6</item>\n      <item>7</item>\n      <item>8</item>\n      <item>9</item>\n      <item>COLON</item>\n      <item>SEMICOLON</item>\n      <item>LESS</item>\n      <item>EQUALS</item>\n      <item>GREATER</item>\n      <item>QUESTION</item>\n      <item>AT</item>\n      <item>LEFTBRACKET</item>\n      <item>BACKSLASH</item>\n      <item>RIGHTBRACKET</item>\n      <item>CARET</item>\n      <item>UNDERSCORE</item>\n      <item>BACKQUOTE</item>\n      <item>A</item>\n      <item>B</item>\n      <item>C</item>\n      <item>D</item>\n      <item>E</item>\n      <item>F</item>\n      <item>G</item>\n      <item>H</item>\n      <item>I</item>\n      <item>J</item>\n      <item>K</item>\n      <item>L</item>\n      <item>M</item>\n      <item>N</item>\n      <item>O</item>\n      <item>P</item>\n      <item>Q</item>\n      <item>R</item>\n      <item>S</item>\n      <item>T</item>\n      <item>U</item>\n      <item>V</item>\n      <item>W</item>\n      <item>X</item>\n      <item>Y</item>\n      <item>Z</item>\n      <item>DELETE</item>\n      <item>KP0</item>\n      <item>KP1</item>\n      <item>KP2</item>\n      <item>KP3</item>\n      <item>KP4</item>\n      <item>KP5</item>\n      <item>KP6</item>\n      <item>KP7</item>\n      <item>KP8</item>\n      <item>KP9</item>\n      <item>KP_PERIOD</item>\n      <item>KP_DIVIDE</item>\n      <item>KP_MULTIPLY</item>\n      <item>KP_MINUS</item>\n      <item>KP_PLUS</item>\n      <item>KP_ENTER</item>\n      <item>KP_EQUALS</item>\n      <item>UP</item>\n      <item>DOWN</item>\n      <item>RIGHT</item>\n      <item>LEFT</item>\n      <item>INSERT</item>\n      <item>HOME</item>\n      <item>END</item>\n      <item>PAGEUP</item>\n      <item>PAGEDOWN</item>\n      <item>F1</item>\n      <item>F2</item>\n      <item>F3</item>\n      <item>F4</item>\n      <item>F5</item>\n      <item>F6</item>\n      <item>F7</item>\n      <item>F8</item>\n      <item>F9</item>\n      <item>F10</item>\n      <item>F11</item>\n      <item>F12</item>\n      <item>F13</item>\n      <item>F14</item>\n      <item>F15</item>\n      <item>NUMLOCK</item>\n      <item>CAPSLOCK</item>\n      <item>SCROLLOCK</item>\n      <item>RSHIFT</item>\n      <item>LSHIFT</item>\n      <item>RCTRL</item>\n      <item>LCTRL</item>\n      <item>RALT</item>\n      <item>LALT</item>\n      <item>RMETA</item>\n      <item>LMETA</item>\n      <item>LSUPER</item>\n      <item>RSUPER</item>\n      <item>MODE</item>\n      <item>COMPOSE</item>\n      <item>HELP</item>\n      <item>PRINT</item>\n      <item>SYSREQ</item>\n      <item>BREAK</item>\n      <item>MENU</item>\n    </list>\n    <!-- Reserved aliases. -->\n    <list name=\"aliases\">\n      <item>commandbuf</item>\n      <item>editing</item>\n      <item>mainmenu</item>\n      <item>numargs</item>\n    </list>\n    <!--\n        TODO list for Cubescript contexts\n        1) Add GLSL support for shader commands, It's vanilla GLSL, the cubescript witchcraft aside.\n        2) Improve alias highlighting eg foo@[bar]baz; do not highlight baz, but make sure to still highlight all of $foo[bar]baz, will probably need a special context.\n\n    -->\n\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"]\"/>\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\")\"/>\n        <IncludeRules context=\"__Basic\" />\n      </context>\n\n      <context name=\"Block\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets\" context=\"#pop\" char=\"]\" endRegion=\"Block\" />\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\")\"/>\n        <IncludeRules context=\"__Basic\" />\n      </context>\n\n      <context name=\"Brackets\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"]\"/>\n        <DetectChar attribute=\"Brackets\" context=\"#pop\" char=\")\"/>\n        <IncludeRules context=\"__Basic\" />\n      </context>\n\n      <context name=\"__Basic\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n        <DetectChar attribute=\"Brackets\" context=\"Block\" char=\"[\" beginRegion=\"Block\" />\n        <DetectChar attribute=\"Brackets\" context=\"Brackets\" char=\"(\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <AnyChar lookAhead=\"true\" context=\"Lookup\" String=\"$@\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"commands\"/>\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\"/>\n        <keyword attribute=\"Keyword\" context=\"Bind\" String=\"bindcommands\" />\n        <HlCHex attribute=\"IntOther\" context=\"#stay\"/>\n        <HlCOct attribute=\"IntOther\" context=\"#stay\"/>\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <Int attribute=\"Int10\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context name=\"__Lookup\" attribute=\"Lookup\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <DetectChar attribute=\"LookupBrackets\" context=\"LookupEncBlock\" char=\"[\" />\n        <DetectChar attribute=\"LookupBrackets\" context=\"LookupEncBrackets\" char=\"(\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"[^\\$\\s]+\\$[^\\[\\]\\(\\)\\s]*\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S+(?![\\s\\[\\(])[^\\$@](?=[\\[\\(])\" />\n        <RegExpr attribute=\"Key\" context=\"#stay\" String=\"[@\\$]*arg[0-9]+\" />\n      </context>\n\n      <context name=\"Lookup\" attribute=\"Lookup\" lineEndContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal\" context=\"#pop\" />\n        <AnyChar lookAhead=\"true\" context=\"#pop\" String=\")];\" />\n        <Detect2Chars lookAhead=\"true\" context=\"#pop\" char=\"/\" char1=\"/\"/>\n        <keyword attribute=\"Key\" context=\"#stay\" String=\"aliases\" />\n        <IncludeRules context=\"__Lookup\" />\n      </context>\n\n      <context name=\"LookupEncBrackets\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"LookupBrackets\" context=\"#pop\" char=\")\" />\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"]\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n        <IncludeRules context=\"__Basic\" />\n      </context>\n\n      <context name=\"LookupEncBlock\" attribute=\"Lookup\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\")\" />\n        <DetectChar attribute=\"LookupBrackets\" context=\"#pop\" char=\"]\" />\n        <keyword attribute=\"Key\" context=\"#stay\" String=\"aliases\" />\n        <IncludeRules context=\"__Lookup\" />\n      </context>\n\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n        <!-- Escape newlines. -->\n        <LineContinue attribute=\"Escaped\" context=\"#stay\" char=\"^\" />\n        <DetectChar attribute=\"Escaped\" context=\"Escaped\" char=\"^\" />\n      </context>\n\n      <context name=\"Escaped\" attribute=\"Escaped\" lineEndContext=\"#stay\" >\n        <!-- Cubescript treats any character following a \"^\" in a string is escaped. -->\n        <Detect2Chars char=\"f\" char1=\"0\" attribute=\"String0\" context=\"#pop\"/>\n        <Detect2Chars char=\"f\" char1=\"1\" attribute=\"String1\" context=\"#pop\"/>\n        <Detect2Chars char=\"f\" char1=\"2\" attribute=\"String2\" context=\"#pop\"/>\n        <Detect2Chars char=\"f\" char1=\"3\" attribute=\"String3\" context=\"#pop\"/>\n        <Detect2Chars char=\"f\" char1=\"4\" attribute=\"String4\" context=\"#pop\"/>\n        <Detect2Chars char=\"f\" char1=\"5\" attribute=\"String5\" context=\"#pop\"/>\n        <Detect2Chars char=\"f\" char1=\"6\" attribute=\"String6\" context=\"#pop\"/>\n        <Detect2Chars char=\"f\" char1=\"7\" attribute=\"String7\" context=\"#pop\"/>\n        <RegExpr String=\"f?.\" attribute=\"Escaped\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Bind\" attribute=\"Error\" lineEndContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal\" />\n        <AnyChar lookAhead=\"true\" context=\"#pop\" String=\"[]();&quot;$@\" />\n        <keyword insensitive=\"true\" attribute=\"Key\" context=\"#pop\" String=\"keys\" />\n        <Detect2Chars lookAhead=\"true\" context=\"#pop\" char=\"/\" char1=\"/\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal\"      defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Lookup\"      defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Error\"       defStyleNum=\"dsError\" spellChecking=\"false\"/>\n      <itemData name=\"Int10\"       defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"IntOther\"    defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"       defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"String\"      defStyleNum=\"dsString\"/>\n      <itemData name=\"Escaped\"     defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n      <itemData name=\"Keyword\"     defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\"    defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Key\"         defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"LookupBrackets\"    defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n      <itemData name=\"Brackets\"    defStyleNum=\"dsNormal\" bold=\"1\" spellChecking=\"false\"/>\n      <!-- These are for the ^f# format tokens, the background colour is explicitly set to try and guarantee visibility at all times -->\n      <itemData name=\"String0\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#40FF80\" backgroundColor=\"#3F3F3F\" spellChecking=\"false\"/>\n      <itemData name=\"String1\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#60A0FF\" backgroundColor=\"#DFDFDF\" spellChecking=\"false\"/>\n      <itemData name=\"String2\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#FFC040\" backgroundColor=\"#3F3F3F\" spellChecking=\"false\"/>\n      <itemData name=\"String3\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#FF4040\" backgroundColor=\"#DFDFDF\" spellChecking=\"false\"/>\n      <itemData name=\"String4\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#808080\" backgroundColor=\"#DFDFDF\" spellChecking=\"false\"/>\n      <itemData name=\"String5\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#A040A0\" backgroundColor=\"#DFDFDF\" spellChecking=\"false\"/>\n      <itemData name=\"String6\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#FF8000\" backgroundColor=\"#DFDFDF\" spellChecking=\"false\"/>\n      <itemData name=\"String7\"     defStyleNum=\"dsString\" bold=\"1\" color=\"#FFFFFF\" backgroundColor=\"#3F3F3F\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"true\" wordWrapDeliminator=\"[(;\" additionalDeliminator=\"$@\" weakDeliminator=\"!=&lt;&gt;|&amp;^~+*\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n    </comments>\n  </general>\n</language>\n<!--\n// kate: space-indent on; indent-width 2; replace-tabs on;\n-->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/cue.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"CUE Sheet\" version=\"1\" kateversion=\"5.0\" section=\"Other\" extensions=\"*.cue\" mimetype=\"application/x-cue\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>CATALOG</item>\n      <item>CDTEXTFILE</item>\n      <item>FILE</item>\n      <item>FLAGS</item>\n      <item>INDEX</item>\n      <item>ISRC</item>\n      <item>PERFORMER</item>\n      <item>PREGAP</item>\n      <item>POSTGAP</item>\n      <item>REM</item>\n      <item>SONGWRITER</item>\n      <item>TITLE</item>\n      <item>TRACK</item>\n    </list>\n    <list name=\"format\">\n      <item>AIFF</item>\n      <item>WAVE</item>\n      <item>MP3</item>\n      <item>BINARY</item>\n      <item>MOTOTOLA</item>\n    </list>\n    <list name=\"mode\">\n      <item>AUDIO</item>\n      <item>CDG</item>\n      <item>CDI</item>\n      <item>MODE1</item>\n      <item>MODE2</item>\n      <item>RAW</item>\n    </list>\n    <list name=\"flags\">\n      <item>4CH</item>\n      <item>DCP</item>\n      <item>PRE</item>\n      <item>SCMS</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Format\" context=\"#stay\" String=\"format\" />\n        <keyword attribute=\"Mode\" context=\"#stay\" String=\"mode\" />\n        <keyword attribute=\"Flags\" context=\"#stay\" String=\"flags\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\" />\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Format\"       defStyleNum=\"dsImport\"/>\n      <itemData name=\"Mode\"         defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Flags\"        defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\";\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/curry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- qualification of entities -->\n  <!ENTITY qualify     \"([A-Z][a-zA-Z0-9_']*\\.)*\">\n  <!-- identifier -->\n  <!ENTITY ident       \"[a-z][a-zA-Z0-9_']*\">\n  <!-- Type -->\n  <!ENTITY type        \"[A-Z][a-zA-Z0-9_']*\">\n  <!-- infix operator characters -->\n  <!ENTITY infixchar   \"~!@#\\$&#37;\\^&amp;\\*\\+\\-=&lt;&gt;\\?\\./\\|&backslash;:\">\n  <!-- identifier in prefix notation, e.g.: id, ($) -->\n  <!ENTITY prefixIdent \"(&ident;|\\([&infixchar;]+\\))\">\n\n  <!-- Characters allowed in character escape sequence, e.g., \\n -->\n  <!ENTITY escSeqChar  \"abfnrtv\\&quot;'\" >\n  <!-- Ascii escape sequence, e.g., \\NUL -->\n  <!ENTITY escSeqAscii \"NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL\" >\n  <!-- Control escape sequence, e.g., \\^X -->\n  <!ENTITY escSeqCntrl \"\\^[A-Z@\\[&backslash;\\]\\^_]\" >\n\n  <!-- octal number -->\n  <!ENTITY octal       \"[0-7]+\" >\n  <!-- decimal number -->\n  <!ENTITY decimal     \"[0-9]+\" >\n  <!-- hexadecimal number -->\n  <!ENTITY hexadecimal \"[0-9a-fA-F]+\" >\n  <!-- a backslash, escaped for use in regular expressions -->\n  <!ENTITY backslash   \"\\\\\" >\n  <!-- dashes introducing a currydoc comment -->\n  <!ENTITY currydoc    \"---\" >\n]>\n<language name=\"Curry\" version=\"1\" kateversion=\"5.0\"\n          section=\"Sources\" extensions=\"*.curry\" mimetype=\"text/x-curry\"\n          author=\"Björn Peemöller (bjp@informatik.uni-kiel.de)\" license=\"LGPL\"\n          indenter=\"haskell\">\n  <highlighting>\n  <list name=\"keywords\">\n    <item>case</item>\n    <item>data</item>\n    <item>do</item>\n    <item>else</item>\n    <item>external</item>\n    <item>fcase</item>\n    <item>free</item>\n    <item>if</item>\n<!-- Although import is a keyword, it is handled in a special context\n     to highlight \"qualified\", \"as\" and \"hiding\" in keyword style,\n     albeit these lexemes are no keywords.\n    <item>import</item>\n  -->\n    <item>in</item>\n    <item>infix</item>\n    <item>infixl</item>\n    <item>infixr</item>\n    <item>let</item>\n    <item>module</item>\n    <item>of</item>\n    <item>then</item>\n    <item>type</item>\n    <item>where</item>\n  </list>\n  <list name=\"Prelude Func\">\n    <item>and</item>\n    <item>all</item>\n    <item>any</item>\n    <item>appendFile</item>\n    <item>best</item>\n    <item>break</item>\n    <item>browse</item>\n    <item>browseList</item>\n    <item>chr</item>\n    <item>concat</item>\n    <item>concatMap</item>\n    <item>const</item>\n    <item>curry</item>\n    <item>div</item>\n    <item>done</item>\n    <item>doSolve</item>\n    <item>drop</item>\n    <item>dropWhile</item>\n    <item>either</item>\n    <item>elem</item>\n    <item>ensureNotFree</item>\n    <item>ensureSpine</item>\n    <item>enumFrom</item>\n    <item>enumFromThen</item>\n    <item>enumFromTo</item>\n    <item>enumFromThenTo</item>\n    <item>error</item>\n    <item>failed</item>\n    <item>filter</item>\n    <item>findall</item>\n    <item>flip</item>\n    <item>foldl</item>\n    <item>foldl1</item>\n    <item>foldr</item>\n    <item>foldr1</item>\n    <item>fst</item>\n    <item>getChar</item>\n    <item>getLine</item>\n    <item>id</item>\n    <item>if_then_else</item>\n    <item>iterate</item>\n    <item>head</item>\n    <item>length</item>\n    <item>lines</item>\n    <item>lookup</item>\n    <item>map</item>\n    <item>mapIO</item>\n    <item>mapIO_</item>\n    <item>max</item>\n    <item>maybe</item>\n    <item>min</item>\n    <item>mod</item>\n    <item>negate</item>\n    <item>not</item>\n    <item>notElem</item>\n    <item>null</item>\n    <item>once</item>\n    <item>or</item>\n    <item>ord</item>\n    <item>otherwise</item>\n    <item>print</item>\n    <item>putChar</item>\n    <item>putStr</item>\n    <item>putStrLn</item>\n    <item>readFile</item>\n    <item>repeat</item>\n    <item>replicate</item>\n    <item>return</item>\n    <item>reverse</item>\n    <item>seq</item>\n    <item>sequenceIO</item>\n    <item>sequenceIO_</item>\n    <item>show</item>\n    <item>snd</item>\n    <item>solveAll</item>\n    <item>span</item>\n    <item>splitAt</item>\n    <item>success</item>\n    <item>tail</item>\n    <item>take</item>\n    <item>takeWhile</item>\n    <item>try</item>\n    <item>uncurry</item>\n    <item>unknown</item>\n    <item>unlines</item>\n    <item>unpack</item>\n    <item>until</item>\n    <item>unwords</item>\n    <item>unzip</item>\n    <item>unzip3</item>\n    <item>writeFile</item>\n    <item>words</item>\n    <item>zip</item>\n    <item>zip3</item>\n    <item>zipWith</item>\n    <item>zipWith3</item>\n  </list>\n  <list name=\"Prelude Type\">\n    <item>Bool</item>\n    <item>Char</item>\n    <item>Either</item>\n    <item>Float</item>\n    <item>Int</item>\n    <item>IO</item>\n    <item>Maybe</item>\n    <item>Ordering</item>\n    <item>String</item>\n    <item>Success</item>\n  </list>\n  <list name=\"Prelude Cons\">\n    <item>False</item>\n    <item>True</item>\n    <item>Left</item>\n    <item>Right</item>\n    <item>Just</item>\n    <item>Nothing</item>\n    <item>EQ</item>\n    <item>LT</item>\n    <item>GT</item>\n  </list>\n  <contexts>\n    <context name=\"Normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n      <!-- pragmas, currydoc, comments -->\n      <StringDetect attribute=\"Pragma\"   context=\"Pragma\"            String=\"{-#\"        beginRegion=\"Pragma\"  />\n      <Detect2Chars attribute=\"Comment\"  context=\"Multiline Comment\" char=\"{\" char1=\"-\"  beginRegion=\"Multiline Comment\" />\n      <StringDetect attribute=\"Currydoc\" context=\"Currydoc\"          String=\"&currydoc;\" />\n      <Detect2Chars attribute=\"Comment\"  context=\"Comment\"           char=\"-\" char1=\"-\"  />\n\n      <!-- keywords, Prelude entities -->\n      <keyword      attribute=\"Keyword\"             context=\"#stay\"   String=\"keywords\" />\n      <keyword      attribute=\"Prelude Function\"    context=\"#stay\"   String=\"Prelude Func\" />\n      <keyword      attribute=\"Prelude Type\"        context=\"#stay\"   String=\"Prelude Type\" />\n      <keyword      attribute=\"Prelude Constructor\" context=\"#stay\"   String=\"Prelude Cons\" />\n      <RegExpr      attribute=\"Keyword\"             context=\"Import\"  String=\"import\\s+(qualified)?\" />\n\n      <!-- Literals -->\n      <Float        attribute=\"Float\"   context=\"#stay\"   />\n      <RegExpr      attribute=\"Octal\"   context=\"#stay\"   String=\"0(o|O)&octal;\" />\n      <HlCHex       attribute=\"Hex\"     context=\"#stay\"   />\n      <Int          attribute=\"Decimal\" context=\"#stay\"   />\n      <DetectChar   attribute=\"Char\"    context=\"Char\"    char=\"'\" />\n      <DetectChar   attribute=\"String\"  context=\"String\"  char=\"&quot;\" />\n\n      <!-- Others -->\n      <RegExpr      attribute=\"Special Symbol\"    context=\"#stay\"   String=\"(::|:=|:&gt;|\\-&gt;|&lt;\\-|\\.\\.)\" />\n      <RegExpr      attribute=\"Signature\"         context=\"#stay\"   String=\"\\s*&prefixIdent;\\s*(,\\s*&prefixIdent;)*\\s*(?=::[^&infixchar;])\" />\n      <RegExpr      attribute=\"Function\"          context=\"#stay\"   String=\"&qualify;&ident;\" />\n      <RegExpr      attribute=\"Operator\"          context=\"#stay\"   String=\"&qualify;[&infixchar;]+\" />\n      <RegExpr      attribute=\"Type, Constructor\" context=\"#stay\"   String=\"&qualify;&type;\" />\n      <DetectChar   attribute=\"Infix Application\" context=\"Infix\"   char=\"`\" />\n\n      <!-- Folding of braces -->\n      <DetectChar char=\"(\" context=\"#stay\" beginRegion=\"nested\" attribute=\"Braces\" />\n      <DetectChar char=\")\" context=\"#stay\" endRegion=\"nested\"   attribute=\"Braces\" />\n      <DetectChar char=\"[\" context=\"#stay\" beginRegion=\"list\"   attribute=\"Braces\" />\n      <DetectChar char=\"]\" context=\"#stay\" endRegion=\"list\"     attribute=\"Braces\" />\n      <DetectChar char=\"{\" context=\"#stay\" beginRegion=\"curly\"  attribute=\"Braces\" />\n      <DetectChar char=\"}\" context=\"#stay\" endRegion=\"curly\"    attribute=\"Braces\" />\n    </context>\n\n    <!-- Pragma -->\n    <context name=\"Pragma\" attribute=\"Pragma\" lineEndContext=\"#stay\" >\n      <StringDetect attribute=\"Pragma\" context=\"#pop\" String=\"#-}\" endRegion=\"Pragma\" />\n    </context>\n\n    <!-- Multiline comment -->\n    <context name=\"Multiline Comment\" attribute=\"Comment\" lineEndContext=\"#stay\" >\n      <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"}\" endRegion=\"Multiline Comment\" />\n    </context>\n\n    <!-- Currydoc -->\n    <context name=\"Currydoc\" attribute=\"Currydoc\" lineEndContext=\"#pop\" />\n\n    <!-- Single line comment -->\n    <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\" />\n\n    <!-- Import section -->\n    <context name=\"Import\" attribute=\"Normal\" lineEndContext=\"#pop\" >\n      <!-- pragmas, currydoc, comments -->\n      <StringDetect attribute=\"Pragma\"   context=\"Pragma\"            String=\"{-#\"        beginRegion=\"Pragma\"  />\n      <Detect2Chars attribute=\"Comment\"  context=\"Multiline Comment\" char=\"{\" char1=\"-\"  beginRegion=\"Multiline Comment\" />\n      <StringDetect attribute=\"Currydoc\" context=\"Currydoc\"          String=\"&currydoc;\" />\n      <Detect2Chars attribute=\"Comment\"  context=\"Comment\"           char=\"-\" char1=\"-\"  />\n\n      <RegExpr      attribute=\"Type, Constructor\" context=\"#stay\" String=\"&qualify;&type;\" />\n      <Detect2Chars attribute=\"Keyword\"           context=\"#stay\" char=\"a\" char1=\"s\" />\n      <StringDetect attribute=\"Keyword\"           context=\"#stay\" String=\"hiding\" />\n      <!-- Pop context at open paren to highlight imported entities -->\n      <DetectChar   attribute=\"Braces\"            context=\"#pop\"   char=\"(\" beginRegion=\"nested\" />\n      <RegExpr      attribute=\"Syntax Error\"      context=\"#stay\"  String=\"\\S+\" />\n    </context>\n\n    <!-- A single characters, with escape sequences -->\n    <context name=\"Char\" attribute=\"Char\" lineEndContext=\"CharSyntaxError\" >\n      <DetectChar attribute=\"Syntax Error\" context=\"#pop\"       char=\"'\" />\n      <DetectChar attribute=\"Char\"         context=\"CharEscape\" char=\"\\\" />\n      <RegExpr    attribute=\"Char\"         context=\"CharEnd\"    String=\"[^'&backslash;]\" />\n    </context>\n\n    <!-- Character escape sequence -->\n    <context name=\"CharEscape\" attribute=\"Char\" lineEndContext=\"#popCharSyntaxError\" >\n      <AnyChar attribute=\"Char\"         context=\"#popCharEnd\" String=\"&escSeqChar;\"   />\n      <RegExpr attribute=\"Char\"         context=\"#popCharEnd\" String=\"o&octal;\"       />\n      <RegExpr attribute=\"Char\"         context=\"#popCharEnd\" String=\"&decimal;\"      />\n      <RegExpr attribute=\"Char\"         context=\"#popCharEnd\" String=\"x&hexadecimal;\" />\n      <RegExpr attribute=\"Char\"         context=\"#popCharEnd\" String=\"&escSeqCntrl;\"  />\n      <RegExpr attribute=\"Char\"         context=\"#popCharEnd\" String=\"&escSeqAscii;\"  />\n      <RegExpr attribute=\"Syntax Error\" context=\"#popCharEnd\" String=\".\"              />\n    </context>\n\n    <!-- Ending quote of character literal -->\n    <context name=\"CharEnd\" attribute=\"Char\" lineEndContext=\"#popCharSyntaxError\" >\n      <DetectChar attribute=\"Char\"         context=\"#pop#pop\" char=\"'\" />\n      <RegExpr    attribute=\"Syntax Error\" context=\"#stay\"    String=\".\" />\n    </context>\n\n    <!-- Character syntax error: Newline inside literal -->\n    <context name=\"CharSyntaxError\" attribute=\"Syntax Error\" lineEndContext=\"#stay\" >\n      <DetectChar attribute=\"Syntax Error\" context=\"#pop#pop\" char=\"'\" />\n    </context>\n\n    <!-- A string, with escape sequences -->\n    <context name=\"String\" attribute=\"String\" lineEndContext=\"StringSyntaxError\" >\n      <DetectChar   attribute=\"String\"        context=\"#pop\"         char=\"&quot;\" />\n      <DetectChar   attribute=\"String Escape\" context=\"StringEscape\" char=\"\\\" />\n      <RegExpr      attribute=\"String\"        context=\"#stay\"        String=\"[^&quot;&backslash;]*\" />\n    </context>\n\n    <!-- String escape sequence -->\n    <context name=\"StringEscape\" attribute=\"String\" lineEndContext=\"StringGap\" >\n      <AnyChar      attribute=\"String Escape\"  context=\"#pop\"      String=\"&escSeqChar;&amp;\" />\n      <RegExpr      attribute=\"String Escape\"  context=\"#pop\"      String=\"o&octal;\"          />\n      <RegExpr      attribute=\"String Escape\"  context=\"#pop\"      String=\"&decimal;\"         />\n      <RegExpr      attribute=\"String Escape\"  context=\"#pop\"      String=\"x&hexadecimal;\"    />\n      <RegExpr      attribute=\"String Escape\"  context=\"#pop\"      String=\"&escSeqCntrl;\"     />\n      <RegExpr      attribute=\"String Escape\"  context=\"#pop\"      String=\"&escSeqAscii;\"     />\n      <DetectSpaces attribute=\"String Escape\"  context=\"StringGap\"                            />\n      <RegExpr      attribute=\"Syntax Error\"   context=\"#pop\"      String=\".\"                 />\n    </context>\n\n    <context name=\"StringGap\" attribute=\"String\" lineEndContext=\"#stay\" >\n      <DetectSpaces attribute=\"String Escape\" context=\"#stay\" />\n      <DetectChar   attribute=\"String Escape\" context=\"#pop#pop#popString\" char=\"\\\"      />\n      <DetectChar   attribute=\"Syntax Error\"  context=\"#pop#pop#pop\"       char=\"&quot;\" />\n      <RegExpr      attribute=\"Syntax Error\"  context=\"#stay\"              String=\".\"    />\n    </context>\n\n    <!-- String syntax error: Newline inside literal -->\n    <context name=\"StringSyntaxError\" attribute=\"Syntax Error\" lineEndContext=\"#stay\" >\n      <DetectChar attribute=\"Syntax Error\" context=\"#pop#pop\" char=\"&quot;\" />\n    </context>\n\n    <!-- Infix application -->\n    <context name=\"Infix\" attribute=\"Infix Application\" lineEndContext=\"#stay\" >\n      <DetectChar attribute=\"Infix Application\" context=\"#pop\" char=\"`\"/>\n    </context>\n  </contexts>\n\n  <itemDatas>\n    <itemData name=\"Normal\"              defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n\n    <!-- Comments -->\n    <itemData name=\"Pragma\"              defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n    <itemData name=\"Comment\"             defStyleNum=\"dsComment\"  />\n    <itemData name=\"Currydoc\"            defStyleNum=\"dsDocumentation\" />\n\n    <!-- Keywords, predefined entities -->\n    <itemData name=\"Keyword\"             defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n    <itemData name=\"Prelude Type\"        defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    <itemData name=\"Prelude Function\"    defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n    <itemData name=\"Prelude Constructor\" defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n\n    <!-- Literals -->\n    <itemData name=\"Float\"               defStyleNum=\"dsFloat\"    spellChecking=\"false\" />\n    <itemData name=\"Octal\"               defStyleNum=\"dsBaseN\"    spellChecking=\"false\" />\n    <itemData name=\"Hex\"                 defStyleNum=\"dsBaseN\"    spellChecking=\"false\" />\n    <itemData name=\"Decimal\"             defStyleNum=\"dsDecVal\"   spellChecking=\"false\" />\n    <itemData name=\"Char\"                defStyleNum=\"dsChar\"     spellChecking=\"false\" />\n    <itemData name=\"String Escape\"       defStyleNum=\"dsChar\"     spellChecking=\"false\" />\n    <itemData name=\"String\"              defStyleNum=\"dsString\"   />\n\n    <!-- Others -->\n    <itemData name=\"Braces\"              defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n    <itemData name=\"Signature\"           defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n    <itemData name=\"Function\"            defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n    <itemData name=\"Operator\"            defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n    <itemData name=\"Type, Constructor\"   defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    <itemData name=\"Special Symbol\"      defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n    <itemData name=\"Infix Application\"   defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n    <itemData name=\"Syntax Error\"        defStyleNum=\"dsError\"    spellChecking=\"false\" />\n  </itemDatas>\n  </highlighting>\n  <general>\n    <folding indentationsensitive=\"1\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n      <comment name=\"multiLine\" start=\"{-\" end=\"-}\" region=\"Multiline Comment\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/d.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  ========================================================================\n\n  D.XML supports syntax highlighting for the D programming language under Kate.\n\n  Updated 2007-2008 - Diggory Hardy <diggory.hardy@gmail.com> (copyright kate project).\n  Copyright (C) 2007 - Aziz Köksal <aziz.koeksal@gmail.com>\n  Copyright (C) 2007 - Jari-Matti Mäkelä <jmjm@iki.fi>\n  Copyright (C) 2004 - Simon J Mackenzie <project.katedxml@smackoz.fastmail.fm>\n\n  This code is released under the LGPL as part of kdelibs/kate.\n\n  ========================================================================\n\n  D is a next generation language written by Walter Bright of Digital Mars fame.\n  Digital Mars C, C++ and D Compilers can be obtained from http://www.digitalmars.com/d/\n\n  ========================================================================\n\n  UPDATE HISTORY:-\n  2008.09.22 - d.xml 1.61 - D 1.035/2.019 - Fix for identifiers starting _ and containing numbers.\n  2008.08.01 - d.xml 1.60 - D 1.033/2.017 - Merging ddoc.xml 1.14 since there is no advantage to having it separate.\n  2008.07.14 - uncommited                 - Added properties: .tupleof, .offsetof\n  2008.06.14 - D.XML 1.53 - D 1.030/2.014 - Added user keyword highlighting.\n  2008.06.06 - D.XML 1.53 - D 1.030/2.014 - Small fix involving floats starting . in embedded Ddoc.\n                                          - Added nothrow and pure attributes (D2.0 only).\n  2008.04.09 - D.XML 1.52 - D 1.028/2.012 - Added properties (especially for arrays).\n                                          - Added rules for C-Style indenter (thanks vektorboson!)\n  2008.02.22 - D.XML 1.51 - D 1.027/2.011 - Changed char rule behaviour on line end.\n                                          - Added support for strings ending with c, w or d (must have got lost at some point).\n  2008.02.22 - ddoc.xml 1.14              - Fixes/improvements for macros. Highlights first symbol and non-symbols\n                                            before as errors; matches embedded brackets () properly.\n  2008.01.09 - D.XML 1.50 - D 1.025/2.009 - Changed pragma, version, deprecated matching to use keyword not DetectString.\n  2007.12.18 - D.XML 1.49 - D 1.025/2.009 - Fixed some bugs to make the StartingLetter context exit correctly and match identifiers properly.\n  2007.12.12 - D.XML 1.48 - D 1.024/2.008 - Adjusted existing contexts somewhat (mostly cleanup).\n                                          - Implemented scope context to hightlight exit in scope(exit) etc.\n                                          - Adjusted deprecated keyword highlighting.\n                                          - Changed layout somewhat.\n                                          - Implemented extra highlighting rules for expressions, attributes, etc.\n                                          - Changed a lot of colours.\n  2007.11.15 - D.XML 1.47 - D 1.023/2.007 - Fixed a few unapperent \"bugs\" found by checkdtd.\n  2007.11.15 - ddoc.xml 1.13              - Fixed a couple of bugs found by checkdtd and changed the version number format.\n  2007.11.5  - ddoc.xml 1.12              - Fixed: correct matching of things like /***/ .\n  2007.10.11 - ddoc.xml 1.11              - Safety catch: check for unterminated code sections (i.e. check for end of\n                                            ddoc comment even in code sections).\n                                          - Used DetectIdentifier to (presumably) improve performance.\n  2007.10.09 - uncommited - ditto         - Changed some context=\"#pop\" tags to context=\"#stay\" within the normal\n                                            context (bugfix for ddoc embedded code highlighting).\n  2007.10.9  - ddoc.xml 1.10              - Enabled embedded ddoc code highlighting\n  2007.10.9  - ddoc.xml 1.00              - Initial version\n  2007.10.08 - D.XML 1.46 - D 1.022/2.005 - Stole Alert and Region Marker highlighting from C++ syntax.\n                                          - Added support for DDoc highlighting.\n                                          - Reviewed the float regexps again! Tried to make the best of both versions.\n  2007.09.17 - D.XML 1.45 - D 1.021/2.004 - Reverted back to old regexps (but fixed hex floats).\n                                            Can't combine all float regexps into a single RegExpr element using the '|' operator.\n                                            It creates strange problems (like program lock-ups and wrong matches).\n                                          - Fix: '=' is allowed in import statements now.\n                                          - Fix: character literals are matched correctly now.\n                                          - The #line special token sequence is matched fully now (the filespec string needs special handling).\n  2007.09.10 - D.XML 1.44 - D 1.021/2.004 - Added __EOF__ to specialtokens.\n                                          - Replaced float regexps with more accurate ones. Not sure about speed.\n                                          - Fixed Octal regexp not to match 0_ .\n  2007.07.24 - D.XML 1.43 - D 1.020/2.003 - Added System to ltypes.\n                                          - Improved matching of version declarations.\n                                          - Fixed matching of hexadecimal floats.\n                                          - Deprecated style is stroked out again.\n  2007.07.21 - D.XML 1.42 - D 1.018/2.002 - d.xml validates again according to language.xml.\n                                          - HTML entities are highlighted now.\n                                          - Numbers before and after the slice operator are not highl. as floats anymore.\n                                          - Added C++ to ltypes.\n                                          - Improved matching of module/import declarations.\n  2007.07.01 - D.XML 1.41 - D 1.017/2.001 - fixed matching of numbers, added deprecated style, minor changes to styles, updated authors line\n  2007.07.01 - D.XML 1.40 - D 1.017/2.001 - matches now .di extensions, removed phobos-specific printf/writef and added\n                                          - library defined symbols string, wstring, dstring, size_t, ptrdiff_t, hash_t,\n                                          - Error, Exception, Object, TypeInfo and ClassInfo\n  2007.06.30 - D.XML 1.39 - D 1.017 - matching is much faster now, added \"lib\" to pragma types, added special tokens,\n                                    - /+ +/ can be nested now, numbers are matched more correctly, character literals don't span multiple lines anymore\n                                    - escape sequences inside strings and character literals are highlighted,\n                                    - non-hex characters in hex strings are highlighted with the Error style,\n                                    - using more default styles instead of custom ones\n  2007.04.11 - D.XML 1.38 - D 1.011 - ref, macro keywords are now supported, fixed \\\\ inside a string, updated author\n  2007.02.12 - D.XML 1.37 - D 1.006 - bool, foreach_reverse, lazy, scope and typeid keywords are now supported, fixed \\\"\n                                    - inside a string, fixed ending of wysiwyg strings.\n  2004.08.15 - D.XML 1.36 - D 0.98  - Current release of D.\n                                    - package, writef(strictly speaking writef isn't a keyword) - keywords are now supported.\n  2004.??.?? - D.XML 1.35 - D 0.??  - Not sure how this release got posted!\n  2004.05.23 - D.XML 1.34 - D 0.90  - updated.\n  2004.05.19 - D.XML 1.33 - D 0.89  - mixin - keyword is now supported.\n  2004.05.19 - D.XML 1.32 - D 0.77  - pragma, typeof - keywords are now supported.\n  2004.05.19 - D.XML 1.31 - D 0.76  - is - keyword is now supported.\n  2003.09.06 - D.XML 1.30 - D 0.71  - foreach - keyword is now supported.\n  2003.08.18 - D.XML 1.20 - D 0.69  - floats are now supported.\n                                    - embedded underscores in integer and float literals are now supported.\n  2003.08.11 - D.XML 1.10           - updated.\n  2003.07.18 - D.XML 1.00           - First released.\n\n   ========================================================================\n-->\n\n<language name=\"D\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.d;*.D;*.di;*.DI;\" mimetype=\"text/x-dsrc\" casesensitive=\"true\" author=\"Diggory Hardy (diggory.hardy@gmail.com), Aziz Köksal (aziz.koeksal@gmail.com), Jari-Matti Mäkelä (jmjm@iki.fi), Simon J Mackenzie (project.katedxml@smackoz.fastmail.fm)\" license=\"LGPL\">\n  <highlighting>\n    <!-- User-defined keywords (add identifiers you'd like highlighted here) -->\n    <list name=\"userkeywords\">\n    </list>\n    <list name=\"statements\">\n      <item>asm</item>\n      <item>body</item>\n      <item>break</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>finally</item>\n      <item>for</item>\n      <item>foreach</item>\n      <item>foreach_reverse</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>mixin</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>throw</item>\n      <item>try</item>\n      <item>while</item>\n      <item>with</item>\n      \n      <!-- these are statements according to the spec, although I might call them attributes -->\n      <item>synchronized</item>\n\n    </list>\n\n    <list name=\"attributes\">\n      <!-- also storage classes -->\n      <item>abstract</item>\n      <item>align</item>\n      <item>auto</item>\n      <item>const</item>\n      <item>export</item>\n      <item>final</item>\n      <item>immutable</item>\n      <item>inout</item>\n      <item>invariant</item>\n      <item>lazy</item>\n      <item>nothrow</item>\n      <item>override</item>\n      <item>package</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>pure</item>\n      <item>ref</item>\n      <item>shared</item>\n      <item>static</item>\n      \n      <!-- these may be statements -->\n      <!-- in (more common to use as an expression since in attribute is only ever the default) -->\n      <item>out</item>\n      <item>scope</item>\n      \n      <item>__gshared</item>\n    </list>\n    \n    <list name=\"expressions\">\n      <!-- primary expressions -->\n      <item>false</item>\n      <item>null</item>\n      <item>super</item>\n      <item>this</item>\n      <item>true</item>\n      <item>typeid</item>\n      \n      <!-- other expressions -->\n      <item>assert</item>\n      <item>cast</item>\n      <item>is</item>\n      <item>new</item>\n      <item>delete</item>\n      <item>in</item> <!-- also an attribute and a statement -->\n      \n      <!-- sometimes declarators -->\n      <item>delegate</item>\n      <item>function</item>\n    </list>\n    \n    <list name=\"modules\">\n      <item>module</item>\n      <item>import</item> <!-- also an expression -->\n    </list>\n\n    <list name=\"declarators\">\n      <item>alias</item>\n      <item>enum</item>\n      <item>typedef</item>\n      <item>class</item>\n      <item>interface</item>\n      <item>struct</item>\n      <item>union</item>\n    </list>\n    \n    <list name=\"types\">\n      <item>typeof</item>\n      \n      <item>void</item>\n      <item>bool</item>\n      <item>byte</item>\n      <item>ubyte</item>\n      <item>short</item>\n      <item>ushort</item>\n      <item>int</item>\n      <item>uint</item>\n      <item>long</item>\n      <item>ulong</item>\n      <item>cent</item>\n      <item>ucent</item>\n      <item>float</item>\n      <item>double</item>\n      <item>real</item>\n      <item>ireal</item>\n      <item>ifloat</item>\n      <item>idouble</item>\n      <item>creal</item>\n      <item>cfloat</item>\n      <item>cdouble</item>\n      <item>char</item>\n      <item>wchar</item>\n      <item>dchar</item>\n    </list>\n\n    <list name=\"templates\">\n      <item>macro</item> <!-- what's this? just reserved? -->\n      <item>template</item>\n    </list>\n    \n    <list name=\"properties\">\n      <item>init</item>\n      <item>sizeof</item>\n      <item>alignof</item>\n      <item>mangleof</item>\n      <item>stringof</item>\n      <item>tupleof</item>\n      <item>offsetof</item>\n      <item>max</item>\n      <item>min</item>\n      <item>infinity</item>\n      <item>nan</item>\n      <item>dig</item>\n      <item>epsilon</item>\n      <item>mant_dig</item>\n      <item>max_10_exp</item>\n      <item>max_exp</item>\n      <item>min_10_exp</item>\n      <item>min_exp</item>\n      <item>re</item>\n      <item>im</item>\n      <item>length</item>\n      <item>ptr</item>\n      <item>dup</item>\n      <item>idup</item>\n      <item>reverse</item>\n      <item>sort</item>\n      <item>keys</item>\n      <item>values</item>\n      <item>rehash</item>\n    </list>\n    \n    <list name=\"libsymbols\">\n      <!-- these are only symbols defined in object.d(i) -->\n      <item>size_t</item>\n      <item>ptrdiff_t</item>\n      <item>hash_t</item>\n      <item>Error</item>\n      <item>Exception</item>\n      <item>Object</item>\n      <item>TypeInfo</item>\n      <item>ClassInfo</item>\n      <item>ModuleInfo</item>\n      <item>Interface</item>\n      <item>OffsetTypeInfo</item>\n      <item>TypeInfo_Typedef</item>\n      <item>TypeInfo_Enum</item>\n      <item>TypeInfo_Pointer</item>\n      <item>TypeInfo_Array</item>\n      <item>TypeInfo_StaticArray</item>\n      <item>TypeInfo_AssociativeArray</item>\n      <item>TypeInfo_Function</item>\n      <item>TypeInfo_Delegate</item>\n      <item>TypeInfo_Class</item>\n      <item>TypeInfo_Interface</item>\n      <item>TypeInfo_Struct</item>\n      <item>TypeInfo_Tuple</item>\n      \n      <!-- phobos only as of tango 0.99.3 -->\n      <item>string</item>\n      <item>wstring</item>\n      <item>dstring</item>\n      <item>bit</item>\n      <item>TypeInfo_Const</item>\n      <item>TypeInfo_Invariant</item>\n    </list>\n\n    <list name=\"linkage\">\n      <item>extern</item>\n    </list>\n    <list name=\"ltypes\">\n      <item>C</item>\n      <!-- <item>C++</item> --><!-- is handled specially in Linkage rule -->\n      <item>D</item>\n      <item>Windows</item>\n      <item>Pascal</item>\n      <item>System</item>\n      <!-- <item>Objective-C</item> --><!-- is handled specially in Linkage rule -->\n    </list>\n\n    <list name=\"ptypes\">\n      <item>inline</item>\n      <item>lib</item>\n      <item>linkerDirective</item>\n      <item>mangle</item>\n      <item>msg</item>\n      <item>startaddress</item>\n    </list>\n    \n    <list name=\"scope_keywords\">\n      <item>exit</item>\n      <item>success</item>\n      <item>failure</item>\n    </list>\n\n    <list name=\"vtypes\">\n      <item>DigitalMars</item>\n      <item>X86</item>\n      <item>X86_64</item>\n      <item>Windows</item>\n      <item>Win32</item>\n      <item>Win64</item>\n      <item>linux</item>\n      <item>LittleEndian</item>\n      <item>BigEndian</item>\n      <item>D_Coverage</item>\n      <item>D_InlineAsm_X86</item>\n      <item>unittest</item>\n      <item>D_Version2</item>\n      <item>none</item>\n      <item>all</item>\n    </list>\n\n    <list name=\"specialtokens\">\n      <item>__FILE__</item>\n      <item>__LINE__</item>\n      <item>__DATE__</item>\n      <item>__TIME__</item>\n      <item>__TIMESTAMP__</item>\n      <item>__VENDOR__</item>\n      <item>__VERSION__</item>\n      <item>__EOF__</item>\n    </list>\n    \n    <list name=\"tests\">\n      <item>debug</item>\n      <item>unittest</item>\n    </list>\n    \n    <list name=\"pragma\">\n        <item>pragma</item>\n    </list>\n\n    <list name=\"version\">\n        <item>version</item>\n    </list>\n    \n    <list name=\"deprecated\">\n        <item>deprecated</item>\n        <item>volatile</item> <!-- has been deprecated -->\n    </list>\n    \n    <contexts>\n      <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <!-- Performance improvement (probably): anything starting with a letter is matched separately -->\n        <RegExpr String=\"[a-zA-Z_]\" attribute=\"Normal Text\" context=\"StartingLetter\" lookAhead=\"true\"/>\n\n        <HlCStringChar attribute=\"EscapeSequence\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"EscapeSequence\" context=\"UnicodeShort\"   char=\"\\\" char1=\"u\"/>\n        <Detect2Chars attribute=\"EscapeSequence\" context=\"UnicodeLong\"   char=\"\\\" char1=\"U\"/>\n        <Detect2Chars attribute=\"EscapeSequence\" context=\"HTMLEntity\"   char=\"\\\" char1=\"&amp;\"/>\n\n        <DetectChar attribute=\"Char\"     context=\"CharLiteral\" char=\"'\"/>\n        <DetectChar attribute=\"String\"   context=\"String\"      char=\"&quot;\"/>\n        <DetectChar attribute=\"BQString\" context=\"BQString\"    char=\"`\"/>\n\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n        <IncludeRules context=\"CommentRules\" />\n\n        <!-- Match ... and .. before numbers are matched. -->\n        <!-- Now in symbols keywords section\t-->\n        <StringDetect attribute=\"Normal Text\" context=\"#stay\" String=\"...\"/>\n        <Detect2Chars attribute=\"Normal Text\"   char=\".\" char1=\".\"/>\n        \n        <!-- Float starting with a dot -->\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\.\\d[\\d_]*([eE][-+]?\\d[\\d_]*)?[fFL]?i?\"/>\n        \n        <!-- Try to match various built-in properties -->\n        <DetectChar char=\".\" attribute=\"Normal Text\" context=\"Properties\"/>\n\n        <!-- Look ahead for a digit and switch to NumberLiteral context if found. -->\n        <RegExpr context=\"NumberLiteral\" String=\"\\d\" attribute=\"Normal Text\" lookAhead=\"true\"/>\n\n        <!-- #line Integer [Filespec] -->\n        <StringDetect attribute=\"Pragma\" context=\"LinePragma\" String=\"#line\"/>\n        \n        <!-- Rules for the C-style indenter. Currently problems with /// and /++ comments. -->\n        <DetectChar attribute=\"Symbol\" context=\"BraceA\" char=\"{\" beginRegion=\"BraceA\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n\n      <context name=\"BraceA\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"}\" endRegion=\"BraceA\" />\n        <IncludeRules context=\"normal\"/>\n      </context>\n\n      <context name=\"StartingLetter\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n          <DetectSpaces />\n          <!-- fall-through should work now that DetectIdentifier is used (without infinite loops) -->\n          <!-- maybe not... got an infinite loop -->\n          <RegExpr String=\"[^a-zA-Z_]\" attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\"/>\n          \n          <!-- detect whether scope, in, out, etc. are used as attributes or statements (etc.) -->\n          <!-- rules cannot match across newlines unfortunately -->\n          <RegExpr String=\"in\\s*(?=\\{)\"    attribute=\"Statement\"       context=\"#stay\"     />\n          <RegExpr String=\"out\\s*(?=(\\(([a-zA-Z_][\\w_]*)?\\)\\s*)?\\{)\" attribute=\"Statement\" context=\"#stay\" />\n          <RegExpr String=\"scope\\s*(?=\\()\" attribute=\"Statement\"       context=\"Scope\"     />\n          <RegExpr String=\"import\\s*(?=\\()\" attribute=\"Expression\"     context=\"#stay\"     />\n          <RegExpr String=\"function\\s*(?=\\()\" attribute=\"Declarator\"   context=\"#stay\"     />\n          <RegExpr String=\"delegate\\s*(?=\\()\" attribute=\"Declarator\"   context=\"#stay\"     />\n          \n          <keyword String=\"statements\"      attribute=\"Statement\"      context=\"#stay\"     />\n          <keyword String=\"attributes\"      attribute=\"Attribute\"      context=\"#stay\"     />\n          <keyword String=\"expressions\"     attribute=\"Expression\"     context=\"#stay\"     />\n          <keyword String=\"declarators\"     attribute=\"Declarator\"     context=\"#stay\"     />\n          <keyword String=\"templates\"       attribute=\"Template\"       context=\"#stay\"     />\n          <keyword String=\"modules\"         attribute=\"Module\"         context=\"ModuleName\"/>\n          <keyword String=\"types\"           attribute=\"Type\"           context=\"#stay\"     />\n          <keyword String=\"libsymbols\"      attribute=\"LibrarySymbols\" context=\"#stay\"     />\n          <keyword String=\"linkage\"         attribute=\"Linkage\"        context=\"Linkage\"   />\n          <keyword String=\"specialtokens\"   attribute=\"SpecialTokens\"  context=\"#stay\"     />\n          <keyword String=\"tests\"           attribute=\"Tests\"          context=\"#stay\"     />\n          <!-- These must use keyword not DetectString: DetectString does not check for word-break after string. -->\n          <keyword String=\"pragma\"          attribute=\"Pragma\"         context=\"Pragma\"    />\n          <keyword String=\"version\"         attribute=\"Version\"        context=\"Version\"   />\n          <keyword String=\"deprecated\"      attribute=\"Deprecated\"     context=\"#stay\"     />\n          \n          <Detect2Chars attribute=\"RawString\" context=\"RawString\" char=\"r\" char1=\"&quot;\"/>\n          <Detect2Chars attribute=\"HexString\" context=\"HexString\" char=\"x\" char1=\"&quot;\"/>\n          <Detect2Chars attribute=\"Token String Delimiter\" context=\"TokenString\" char=\"q\" char1=\"{\"/>\n          <RegExpr attribute=\"Delimited String Delimiter\" context=\"DelimStrHeredoc\" String=\"q&quot;([A-Za-z_][A-Za-z0-9_]*)$\" />\n          <StringDetect attribute=\"Delimited String Delimiter\" context=\"DelimStrBracket\" String=\"q&quot;[\" />\n          <StringDetect attribute=\"Delimited String Delimiter\" context=\"DelimStrParen\" String=\"q&quot;(\" />\n          <StringDetect attribute=\"Delimited String Delimiter\" context=\"DelimStrLtGt\" String=\"q&quot;&lt;\" />\n          <StringDetect attribute=\"Delimited String Delimiter\" context=\"DelimStrBrace\" String=\"q&quot;{\" />\n          <RegExpr attribute=\"Delimited String Delimiter\" context=\"DelimStrSimple\" String=\"q&quot;([^A-Za-z_[(&lt;{])\" />\n          \n          <!-- user highlighting: last so as not to interfere with anything else -->\n          <keyword String=\"userkeywords\"    attribute=\"UserKeywords\"   context=\"#stay\"     />\n          \n          <DetectIdentifier />\n      </context>\n      \n      <context name=\"Properties\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <keyword String=\"properties\" attribute=\"Property\" context=\"#pop\" />\n      </context>\n      <context name=\"NumberLiteral\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- Float literals -->\n        <!-- Floats must be matched before Binary|Octal|Hex|DecInteger -->\n        <RegExpr attribute=\"Float\" context=\"#pop\" String=\"0[xX][\\da-fA-F_]*(\\.[\\da-fA-F_]*)?[pP][-+]?\\d[\\d_]*[fFL]?i?\"/>\n        <!-- Float starting with a dot is matched in main context -->\n        <!-- All floats except integers -->\n        <!-- RegExpr is branched rather than using look aheads for efficiency at the expense of extra length -->\n        <RegExpr attribute=\"Float\" context=\"#pop\" String=\"\\d[_\\d]*(\\.(?!\\.)[_\\d]*([eE][-+]?\\d[_\\d]*)?[fFL]?i?|[eE][-+]?\\d[_\\d]*[fFL]?i?|[fF]i?|[fFL]?i)\"/>\n        \n        <!-- Binary|Octal|Hex|DecInteger -->\n        <!-- Common, optional suffix: (L[uU]?|[uU]L?)? -->\n        <RegExpr attribute=\"Binary\"  context=\"#pop\" String=\"0[bB]_*[01][01_]*(L[uU]?|[uU]L?)?\"/>\n        <!-- Octal must be matched before DecInteger -->\n        <RegExpr attribute=\"Octal\"   context=\"#pop\" String=\"0[0-7_]+(L[uU]?|[uU]L?)?\"/>\n        <RegExpr attribute=\"Hex\"     context=\"#pop\" String=\"0[xX]_*[\\da-fA-F][\\da-fA-F_]*(L[uU]?|[uU]L?)?\"/>\n        <!-- Decimal integers must be matched last -->\n        <RegExpr attribute=\"Integer\" context=\"#pop\" String=\"\\d+[\\d_]*(L[uU]?|[uU]L?)?\"/>\n      </context>\n\n      <context name=\"LinePragma\" attribute=\"Pragma\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <!-- Match an Integer -->\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"((0([0-7_]+|[bB]_*[01][01_]*|[xX]_*[\\da-fA-F][\\da-fA-F_]*))|\\d+[\\d_]*)(L[uU]?|[uU]L?)?\"/>\n        <RegExpr attribute=\"String\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\"/>\n        <keyword attribute=\"SpecialTokens\"  context=\"#stay\"      String=\"specialtokens\"/>\n        <IncludeRules context=\"CommentRules\" />\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\".+\"/>\n      </context>\n\n      <!-- \\u 4HexDigits -->\n      <context name=\"UnicodeShort\" attribute=\"EscapeSequence\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"EscapeSequence\" context=\"#pop\" String=\"[\\da-fA-F]{4}\"/>\n      </context>\n      <!-- \\U 8HexDigits -->\n      <context name=\"UnicodeLong\" attribute=\"EscapeSequence\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"EscapeSequence\" context=\"#pop\" String=\"[\\da-fA-F]{8}\"/>\n      </context>\n      <!-- \\& Alpha Alphanumerical+ ; -->\n      <context name=\"HTMLEntity\" attribute=\"EscapeSequence\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"EscapeSequence\" context=\"#pop\" String=\"[a-zA-Z]\\w+;\"/>\n      </context>\n\n      <context name=\"ModuleName\" attribute=\"Module Name\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"CommentRules\" />\n        <RegExpr context=\"#pop\" String=\"[^\\s\\w.:,=]\" lookAhead=\"true\"/>\n      </context>\n\n      <context name=\"Linkage\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" context=\"Linkage2\" char=\"(\"/>\n        <IncludeRules context=\"CommentRules\" />\n      </context>\n      <context name=\"Linkage2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <StringDetect attribute=\"Linkage Type\" context=\"Linkage-C++\" String=\"C++\"/>\n        <StringDetect attribute=\"Linkage Type\" context=\"#stay\" String=\"Objective-C\"/>\n        <keyword    attribute=\"Linkage Type\" context=\"#stay\" String=\"ltypes\"/>\n        <IncludeRules context=\"CommentRules\" />\n        <!-- Fall-through rules, highlighting errors: -->\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <RegExpr String=\"[^)\\s\\n]+\" attribute=\"Error\" context=\"#pop#pop\"/>\n      </context>\n      <context name=\"Linkage-C++\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"CommentRules\" />\n        <DetectChar char=\",\" attribute=\"Normal Text\" context=\"Linkage-C++2\"/>\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop#pop\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n      <context name=\"Linkage-C++2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"CommentRules\" />\n        <DetectIdentifier attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\".\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop#pop\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Version\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" context=\"VersionSpec\" char=\"=\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"VersionCond\" char=\"(\"/>\n        <IncludeRules context=\"CommentRules\" />\n        <!-- Fall-through rules, highlighting errors: -->\n        <RegExpr String=\"[^\\s\\n]+\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n      <context name=\"VersionSpec\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"\\d+[\\d_]*(L[uU]?|[uU]L?)?\"/>\n        <DetectChar char=\";\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop#pop\"/>\n      </context>\n      <context name=\"VersionCond\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <keyword    attribute=\"Version Type\" context=\"#stay\" String=\"vtypes\"/>\n        <DetectIdentifier attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"\\d+[\\d_]*(L[uU]?|[uU]L?)?\"/>\n        <IncludeRules context=\"CommentRules\" />\n        <!-- Fall-through rules, highlighting errors: -->\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <RegExpr String=\"[^)\\s\\n]+\" attribute=\"Error\" context=\"#pop#pop\"/>\n      </context>\n      \n      <context name=\"Scope\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" context=\"Scope2\" char=\"(\"/>\n        <IncludeRules context=\"CommentRules\" />\n      </context>\n      <context name=\"Scope2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <keyword String=\"scope_keywords\" attribute=\"Expression\" context=\"#stay\"/>\n        <IncludeRules context=\"CommentRules\" />\n        <!-- Fall-through rules, highlighting errors: -->\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <RegExpr String=\"[^)\\s\\n]+\" attribute=\"Error\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Pragma\" attribute=\"Pragma\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\"  context=\"Pragma2\" char=\"(\"/>\n        <IncludeRules context=\"CommentRules\" />\n        <!-- Fall-through rules, highlighting errors: -->\n        <RegExpr String=\"[^\\s\\n]+\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n      <context name=\"Pragma2\" attribute=\"Pragma\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <keyword    attribute=\"Version Type\" context=\"Pragma3\" String=\"ptypes\"/>\n        <DetectIdentifier attribute=\"Normal Text\" context=\"Pragma3\"/>\n        <IncludeRules context=\"CommentRules\" />\n        <!-- Fall-through rules, highlighting errors: -->\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <RegExpr String=\"[^)\\s\\n]+\" attribute=\"Error\" context=\"#pop#pop\"/>\n      </context>\n      <context name=\"Pragma3\" attribute=\"Pragma\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\",\" attribute=\"Normal Text\" context=\"Pragma4\"/>\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop#pop\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop#pop#pop\"/>\n      </context>\n      <context name=\"Pragma4\" attribute=\"Pragma\" lineEndContext=\"#stay\">\n        <DetectChar char=\"(\" attribute=\"Normal Text\" context=\"Parenthetical\"/>\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop#pop#pop#pop\"/>\n        <IncludeRules context=\"normal\" />\n      </context>\n      <context name=\"Parenthetical\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"(\" attribute=\"Normal Text\" context=\"Parenthetical\"/>\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop\"/>\n        <IncludeRules context=\"normal\" />\n      </context>\n\n      <!-- Strings -->\n      <!-- r\"...\" -->\n      <context name=\"RawString\" attribute=\"RawString\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"RawString\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <!-- `...` -->\n      <context name=\"BQString\" attribute=\"BQString\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"BQString\" context=\"#pop\" char=\"`\"/>\n      </context>\n      <!-- x\"...\" -->\n      <context name=\"HexString\" attribute=\"HexString\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HexString\" context=\"#pop\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"[^\\sa-fA-F\\d&quot;]+\" />\n      </context>\n      <!-- '...' -->\n      <context name=\"CharLiteral\" attribute=\"Char\" lineEndContext=\"CharLiteralClosing\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- Empty '' -->\n        <DetectChar   attribute=\"Char\" context=\"#pop\"  char=\"'\"/>\n        <!-- \\t \\n \\r etc. -->\n        <HlCStringChar attribute=\"EscapeSequence\" context=\"CharLiteralClosing\"/>\n        <!-- \\u 4HexDigits | \\U 8HexDigits | HTMLEntity -->\n        <RegExpr attribute=\"EscapeSequence\" context=\"CharLiteralClosing\" String=\"\\\\(u[\\da-fA-F]{4}|U[\\da-fA-F]{8}|&amp;[a-zA-Z]\\w+;)\"/>\n        <!-- Invalid escape sequences -->\n        <RegExpr attribute=\"Error\" context=\"CharLiteralClosing\" String=\"\\\\.\"/>\n        <!-- Any character -->\n        <RegExpr attribute=\"Char\" context=\"CharLiteralClosing\" String=\".\"/>\n      </context>\n      <!-- Anything other than a closing ' is now be an error -->\n      <context name=\"CharLiteralClosing\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectChar attribute=\"Char\" context=\"#pop#pop\"  char=\"'\"/>\n      </context>\n      <!-- \"...\" -->\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <HlCStringChar attribute=\"EscapeSequence\"/>\n        <Detect2Chars attribute=\"String\" context=\"#pop\" char=\"&quot;\" char1=\"c\"/>\n        <Detect2Chars attribute=\"String\" context=\"#pop\" char=\"&quot;\" char1=\"w\"/>\n        <Detect2Chars attribute=\"String\" context=\"#pop\" char=\"&quot;\" char1=\"d\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"EscapeSequence\" context=\"UnicodeShort\"   char=\"\\\" char1=\"u\"/>\n        <Detect2Chars attribute=\"EscapeSequence\" context=\"UnicodeLong\"   char=\"\\\" char1=\"U\"/>\n        <Detect2Chars attribute=\"EscapeSequence\" context=\"HTMLEntity\"   char=\"\\\" char1=\"&amp;\"/>\n      </context>\n      <!-- token strings: q{...} -->\n      <context name=\"TokenString\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Token String Delimiter\" context=\"#pop\" char=\"}\" />\n        <IncludeRules context=\"normal\" />\n      </context>\n      <!-- delimited strings -->\n      <!-- q\"IDENTIFIER...IDENTIFIER\" -->\n      <context name=\"DelimStrHeredoc\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Delimited String Delimiter\" context=\"#pop\" String=\"^%1&quot;\" dynamic=\"true\" />\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\"^%1\" dynamic=\"true\" />\n      </context>\n      <!-- q\"[...]\" -->\n      <context name=\"DelimStrBracket\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrBracket2\" char=\"[\" />\n        <Detect2Chars attribute=\"Delimited String Delimiter\" context=\"#pop\" char=\"]\" char1=\"&quot;\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"]\" />\n      </context>\n      <context name=\"DelimStrBracket2\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrBracket2\" char=\"[\" />\n        <DetectChar attribute=\"Delimited String Content\" context=\"#pop\" char=\"]\" />\n      </context>\n      <!-- q\"(...)\" -->\n      <context name=\"DelimStrParen\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrParen2\" char=\"(\" />\n        <Detect2Chars attribute=\"Delimited String Delimiter\" context=\"#pop\" char=\")\" char1=\"&quot;\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\")\" />\n      </context>\n      <context name=\"DelimStrParen2\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrParen2\" char=\"(\" />\n        <DetectChar attribute=\"Delimited String Content\" context=\"#pop\" char=\")\" />\n      </context>\n      <!-- q\"<...>\" -->\n      <context name=\"DelimStrLtGt\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrLtGt2\" char=\"&lt;\" />\n        <Detect2Chars attribute=\"Delimited String Delimiter\" context=\"#pop\" char=\"&gt;\" char1=\"&quot;\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"&gt;\" />\n      </context>\n      <context name=\"DelimStrLtGt2\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrLtGt2\" char=\"&lt;\" />\n        <DetectChar attribute=\"Delimited String Content\" context=\"#pop\" char=\"&gt;\" />\n      </context>\n      <!-- q\"{...}\" -->\n      <context name=\"DelimStrBrace\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrBrace2\" char=\"{\" />\n        <Detect2Chars attribute=\"Delimited String Delimiter\" context=\"#pop\" char=\"}\" char1=\"&quot;\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"}\" />\n      </context>\n      <context name=\"DelimStrBrace2\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Delimited String Content\" context=\"DelimStrBrace2\" char=\"{\" />\n        <DetectChar attribute=\"Delimited String Content\" context=\"#pop\" char=\"}\" />\n      </context>\n      <!-- q\"*...*\" -->\n      <context name=\"DelimStrSimple\" attribute=\"Delimited String Content\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Delimited String Delimiter\" context=\"#pop\" String=\"%1&quot;\" dynamic=\"true\" />\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\"%1\" dynamic=\"true\" />\n      </context>\n\n      <!-- Comments -->\n      <context name=\"CommentRules\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"DdocNormal\" />\n        <Detect2Chars attribute=\"Comment\" context=\"CommentLine\"   char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"CommentBlock\" char=\"/\" char1=\"*\" beginRegion=\"CommentBlock\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"CommentNested\" char=\"/\" char1=\"+\" beginRegion=\"CommentNested\"/>\n        <!-- This context is only for including rules from. -->\n      </context>\n      <context name=\"Region Marker\" attribute=\"Region Marker\" lineEndContext=\"#pop\">\n      </context>\n      <context name=\"CommentLine\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context name=\"CommentBlock\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"CommentBlock\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context name=\"CommentNested\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n       <Detect2Chars attribute=\"Comment\" context=\"CommentNested\" char=\"/\" char1=\"+\" beginRegion=\"CommentNested\"/>\n       <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"+\" char1=\"/\" endRegion=\"CommentNested\"/>\n       <IncludeRules context=\"##Alerts\" />\n      </context>\n      \n      \n      <!-- Ddoc contexts -->\n      <context name=\"DdocNormal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"DdocLine\" String=\"/{3,}\"/>\n        <RegExpr attribute=\"Comment\" context=\"DdocBlock\" String=\"/\\*{2,}(?!/)\" beginRegion=\"DdocBlock\"/>\n        <RegExpr attribute=\"Comment\" context=\"DdocNested\" String=\"/\\+{2,}(?!/)\" beginRegion=\"DdocNested\"/>\n      </context>\n      \n      <context name=\"DdocLine\" attribute=\"Ddoc\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <DetectIdentifier attribute=\"Ddoc\"/>\n        <Detect2Chars attribute=\"Macros\" context=\"DdocMacro\" char=\"$\" char1=\"(\" />\n        <RegExpr attribute=\"DdocSection\" context=\"#stay\" String=\"[\\w_]+:($|\\s)\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      \n      <context name=\"DdocBlock\" attribute=\"Ddoc\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectIdentifier attribute=\"Ddoc\"/>\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"\\*+/\" endRegion=\"DdocBlock\"/>\n        <DetectChar attribute=\"Comment\" context=\"#stay\" char=\"*\" firstNonSpace=\"true\" />\n        \n        <Detect2Chars attribute=\"Macros\" context=\"DdocMacro\" char=\"$\" char1=\"(\" />\n        <RegExpr attribute=\"DdocSection\" context=\"#stay\" String=\"[\\w_]+:($|\\s)\" />\n        <IncludeRules context=\"##Alerts\" />\n        \n        <!-- Avoid matching this; do it this way since (^|\\s)-* always matches .- and \\s-* never\n             matches .- (spaces have already been matched); however -*($|\\s) matches just fine.\n             Also can't use \\b since - is not a word character. -->\n        <RegExpr attribute=\"Ddoc\" context=\"#stay\" String=\"[^-]-{3,}\" />\n        <RegExpr attribute=\"Comment\" context=\"DdocBlockCode\" String=\"-{3,}($|\\s)\" />\n      </context>\n      \n      <context name=\"DdocNested\" attribute=\"Ddoc\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectIdentifier attribute=\"Ddoc\"/>\n        <!-- Ddoc recognises nested comments/ddoc, but ignores them as far as formatting is concerned. -->\n        <Detect2Chars attribute=\"Ddoc\" context=\"DdocNested2\" char=\"/\" char1=\"+\"/>\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"\\++/\" endRegion=\"DdocNested\"/>\n        <DetectChar attribute=\"Comment\" context=\"#stay\" char=\"+\" firstNonSpace=\"true\" />\n        \n        <Detect2Chars attribute=\"Macros\" context=\"DdocMacro\" char=\"$\" char1=\"(\" />\n        <RegExpr attribute=\"DdocSection\" context=\"#stay\" String=\"[\\w_]+:($|\\s)\" />\n        <IncludeRules context=\"##Alerts\" />\n        \n        <!-- As above. -->\n        <RegExpr attribute=\"Ddoc\" context=\"#stay\" String=\"[^-]-{3,}\" />\n        <RegExpr attribute=\"Comment\" context=\"DdocNestedCode\" String=\"-{3,}($|\\s)\" />\n      </context>\n      \n      <context name=\"DdocNested2\" attribute=\"Ddoc\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectIdentifier attribute=\"Ddoc\"/>\n        <!-- Identical to DdocNested except that nested comments don't receive any formatting -->\n        <RegExpr attribute=\"Ddoc\" context=\"#pop\" String=\"\\++/\"/>\n        <!-- The above rules should match before the unwanted rule in DdocNested -->\n        <IncludeRules context=\"DdocNested\" />\n      </context>\n      \n      <!-- When entering a macro: provides highlighting for first symbol (macro name) -->\n      <context name=\"DdocMacro\" attribute=\"Error\" lineEndContext=\"#stay\">\n        <DetectSpaces attribute=\"Macro Text\" /> <!-- avoid showing space as an error -->\n        \n        <DetectChar attribute=\"Macros\" context=\"#pop\" char=\")\" /> <!-- early end of macro -->\n        <IncludeRules context=\"MacroRules\" />\n        \n        <!-- first symbol of macro -->\n        <DetectIdentifier attribute=\"Macros\" context=\"DdocMacro2\" />\n      </context>\n      <!-- For rest of macro -->\n      <context name=\"DdocMacro2\" attribute=\"Macro Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Macros\" context=\"#pop#pop\" char=\")\" /> <!-- end of macro -->\n        <IncludeRules context=\"MacroRules\" />\n      </context>\n      <!-- For embedded brackets (yeah, extra work to ignore them) -->\n      <context name=\"DdocMacro3\" attribute=\"Macro Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Macro Text\" context=\"#pop\" char=\")\" /> <!-- end of embedded brackets -->\n        <IncludeRules context=\"MacroRules\" />\n      </context>\n      <!-- Rules common to all macros -->\n      <context name=\"MacroRules\" attribute=\"Macro Text\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Macros\" context=\"DdocMacro\" char=\"$\" char1=\"(\" /> <!-- embedded -->\n        <DetectChar attribute=\"Macro Text\" context=\"DdocMacro3\" char=\"(\" /> <!-- extra brackets -->\n        \n        <DetectChar attribute=\"Comment\" context=\"#stay\" char=\"*\" firstNonSpace=\"true\" />\n      </context>\n      \n      <context name=\"DdocBlockCode\" attribute=\"DdocCode\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <!-- See update 1.11 -->\n        <RegExpr attribute=\"Comment\" context=\"#pop#pop\" String=\"\\*+/\" endRegion=\"DdocBlock\"/>\n        <DetectChar attribute=\"Comment\" context=\"#stay\" char=\"*\" firstNonSpace=\"true\" />\n        <!-- As above. -->\n        <RegExpr attribute=\"DdocCode\" context=\"#stay\" String=\"[^-]-{3,}\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"-{3,}($|\\s)\" />\n        <IncludeRules context=\"##D\" />\n      </context>\n      <context name=\"DdocNestedCode\" attribute=\"DdocCode\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <!-- See update 1.11 -->\n        <RegExpr attribute=\"Comment\" context=\"#pop#pop\" String=\"\\++/\" endRegion=\"DdocNested\"/>\n        <DetectChar attribute=\"Comment\" context=\"#stay\" char=\"+\" firstNonSpace=\"true\" />\n        <!-- As above. -->\n        <RegExpr attribute=\"DdocCode\" context=\"#stay\" String=\"[^-]-{3,}\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"-{3,}($|\\s)\" />\n        <IncludeRules context=\"##D\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Symbol\"         defStyleNum=\"dsNormal\"/>\n      \n      <!-- keywords -->\n      <itemData name=\"Statement\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Expression\"     defStyleNum=\"dsKeyword\"  color=\"#000080\"/>\n      <itemData name=\"Declarator\"     defStyleNum=\"dsKeyword\"  color=\"#800000\"/>\n      <itemData name=\"Template\"       defStyleNum=\"dsKeyword\"  color=\"#008000\"/>\n      \n      <itemData name=\"Attribute\"      defStyleNum=\"dsKeyword\"  color=\"#800080\"/>\n      <itemData name=\"Deprecated\"     defStyleNum=\"dsKeyword\"  color=\"#800080\" strikeOut=\"true\"/>\n      \n      <itemData name=\"Property\"       defStyleNum=\"dsDataType\" color=\"#000080\"/>\n      \n      <itemData name=\"Type\"           defStyleNum=\"dsDataType\"/>\n      <itemData name=\"LibrarySymbols\" defStyleNum=\"dsBuiltIn\" italic=\"1\"/>\n\n      <itemData name=\"UserKeywords\"   defStyleNum=\"dsDataType\" italic=\"1\"/>\n\n      <!-- module, import -->\n      <itemData name=\"Module\"         defStyleNum=\"dsKeyword\"  color=\"#008000\"/>\n      <itemData name=\"Module Name\"    defStyleNum=\"dsNormal\"   color=\"#008000\"/>\n\n      <!-- pragma, special tokens -->\n      <itemData name=\"SpecialTokens\"  defStyleNum=\"dsNormal\"   color=\"#00aa00\"/>\n      <itemData name=\"Pragma\"         defStyleNum=\"dsKeyword\"  color=\"#00aa00\"/>\n\n      <!-- version, extern -->\n      <itemData name=\"Version\"        defStyleNum=\"dsKeyword\"  color=\"#808000\"/>\n      <itemData name=\"Version Type\"   defStyleNum=\"dsNormal\"   bold=\"1\"/>\n      <itemData name=\"Linkage\"        defStyleNum=\"dsKeyword\"  color=\"#808000\"/>\n      <itemData name=\"Linkage Type\"   defStyleNum=\"dsNormal\"   bold=\"1\"/>\n\n      <itemData name=\"Tests\"        defStyleNum=\"dsKeyword\"    color=\"#ff00ff\"/>\n\n      <itemData name=\"Comment\"        defStyleNum=\"dsComment\"/>\n      <itemData name=\"Region Marker\"  defStyleNum=\"dsRegionMarker\" />\n      \n      <itemData name=\"Error\"          defStyleNum=\"dsError\"/>\n      \n      <!-- literals -->\n      <itemData name=\"Integer\"        defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Binary\"         defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Octal\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"            defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"          defStyleNum=\"dsFloat\"/>\n      \n      <itemData name=\"EscapeSequence\" defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"String\"         defStyleNum=\"dsString\"/>\n      <itemData name=\"Char\"           defStyleNum=\"dsChar\"/>\n      <itemData name=\"RawString\"      defStyleNum=\"dsVerbatimString\"/>\n      <itemData name=\"BQString\"       defStyleNum=\"dsSpecialString\"/>\n      <itemData name=\"HexString\"      defStyleNum=\"dsSpecialString\"/>\n      <itemData name=\"Token String Delimiter\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Delimited String Content\" defStyleNum=\"dsVerbatimString\"/>\n      <itemData name=\"Delimited String Delimiter\" defStyleNum=\"dsKeyword\"/>\n      \n      <!-- Ddoc specific -->\n      <itemData name=\"Macros\"      defStyleNum=\"dsOthers\" color=\"#bf5fbf\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Macro Text\"  defStyleNum=\"dsNormal\" color=\"#bf7fff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Ddoc\"        defStyleNum=\"dsComment\" color=\"#7f7fff\" />\n      <itemData name=\"DdocSection\" defStyleNum=\"dsKeyword\" color=\"#7f7fff\" bold=\"1\" />\n      <itemData name=\"DdocCode\"    defStyleNum=\"dsNormal\" italic=\"1\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"/>\n      <comment name=\"multiLine\"  start=\"/+\" end=\"+/\" region=\"CommentNested\"/>\n    </comments>\n    <keywords casesensitive=\"true\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/debianchangelog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Debian Changelog\" version=\"8\" kateversion=\"2.4\" section=\"Other\" extensions=\"\" mimetype=\"\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>urgency</item>\n        </list>\n\n        <list name=\"distributions\">\n            <item>oldstable</item>\n            <item>oldstable-security</item>\n            <item>oldstable-proposed-updates</item>\n            <item>stable</item>\n            <item>stable-security</item>\n            <item>stable-proposed-updates</item>\n            <item>testing</item>\n            <item>testing-security</item>\n            <item>testing-proposed-updates</item>\n            <item>frozen</item>\n            <item>unstable</item>\n            <item>sid</item>\n            <item>experimental</item>\n            <item>UNRELEASED</item>\n            <!-- Debian releases -->\n            <item>sarge</item>\n            <item>sarge-backports</item>\n            <item>sarge-volatile</item>\n            <item>etch</item>\n            <item>etch-backports</item>\n            <item>etch-volatile</item>\n            <item>lenny</item>\n            <item>lenny-backports</item>\n            <item>lenny-backports-sloppy</item>\n            <item>lenny-volatile</item>\n            <item>squeeze</item>\n            <item>squeeze-backports</item>\n            <item>squeeze-backports-sloppy</item>\n            <item>squeeze-volatile</item>\n            <item>wheezy</item>\n            <item>wheezy-backports</item>\n            <item>wheezy-backports-sloppy</item>\n            <item>jessie</item>\n            <item>jessie-backports</item>\n            <item>jessie-backports-sloppy</item>\n            <item>stretch</item>\n            <item>stretch-backports</item>\n            <item>stretch-backports-sloppy</item>\n            <item>buster</item>\n            <item>buster-backports</item>\n            <item>buster-backports-sloppy</item>\n            <item>bullseye</item>\n            <item>bullseye-backports</item>\n            <item>bullseye-backports-sloppy</item>\n            <item>bookworm</item>\n            <item>bookworm-backports</item>\n            <item>bookworm-backports-sloppy</item>\n            <!-- Ubuntu releases -->\n            <item>dapper</item>\n            <item>dapper-security</item>\n            <item>dapper-proposed</item>\n            <item>dapper-updates</item>\n            <item>dapper-backports</item>\n            <item>dapper-commercial</item>\n            <item>edgy</item>\n            <item>edgy-security</item>\n            <item>edgy-proposed</item>\n            <item>edgy-updates</item>\n            <item>edgy-backports</item>\n            <item>edgy-commercial</item>\n            <item>feisty</item>\n            <item>feisty-security</item>\n            <item>feisty-proposed</item>\n            <item>feisty-updates</item>\n            <item>feisty-backports</item>\n            <item>feisty-commercial</item>\n            <item>gutsy</item>\n            <item>gutsy-security</item>\n            <item>gutsy-proposed</item>\n            <item>gutsy-updates</item>\n            <item>gutsy-backports</item>\n            <item>gutsy-partner</item>\n            <item>hardy</item>\n            <item>hardy-security</item>\n            <item>hardy-proposed</item>\n            <item>hardy-updates</item>\n            <item>hardy-backports</item>\n            <item>hardy-partner</item>\n            <item>intrepid</item>\n            <item>intrepid-security</item>\n            <item>intrepid-proposed</item>\n            <item>intrepid-updates</item>\n            <item>intrepid-backports</item>\n            <item>intrepid-partner</item>\n            <item>jaunty</item>\n            <item>jaunty-security</item>\n            <item>jaunty-proposed</item>\n            <item>jaunty-updates</item>\n            <item>jaunty-backports</item>\n            <item>jaunty-partner</item>\n            <item>karmic</item>\n            <item>karmic-security</item>\n            <item>karmic-proposed</item>\n            <item>karmic-updates</item>\n            <item>karmic-backports</item>\n            <item>lucid</item>\n            <item>lucid-security</item>\n            <item>lucid-proposed</item>\n            <item>lucid-updates</item>\n            <item>lucid-backports</item>\n            <item>maverick</item>\n            <item>maverick-security</item>\n            <item>maverick-proposed</item>\n            <item>maverick-updates</item>\n            <item>maverick-backports</item>\n            <item>natty</item>\n            <item>natty-security</item>\n            <item>natty-proposed</item>\n            <item>natty-updates</item>\n            <item>natty-backports</item>\n            <item>oneiric</item>\n            <item>oneiric-security</item>\n            <item>oneiric-proposed</item>\n            <item>oneiric-updates</item>\n            <item>oneiric-backports</item>\n            <item>precise</item>\n            <item>precise-security</item>\n            <item>precise-proposed</item>\n            <item>precise-updates</item>\n            <item>precise-backports</item>\n            <item>quantal</item>\n            <item>quantal-security</item>\n            <item>quantal-proposed</item>\n            <item>quantal-updates</item>\n            <item>quantal-backports</item>\n            <item>raring</item>\n            <item>raring-security</item>\n            <item>raring-proposed</item>\n            <item>raring-updates</item>\n            <item>raring-backports</item>\n            <item>saucy</item>\n            <item>saucy-security</item>\n            <item>saucy-proposed</item>\n            <item>saucy-updates</item>\n            <item>saucy-backports</item>\n            <item>trusty</item>\n            <item>trusty-security</item>\n            <item>trusty-proposed</item>\n            <item>trusty-updates</item>\n            <item>trusty-backports</item>\n            <item>utopic</item>\n            <item>utopic-security</item>\n            <item>utopic-proposed</item>\n            <item>utopic-updates</item>\n            <item>utopic-backports</item>\n            <item>vivid</item>\n            <item>vivid-security</item>\n            <item>vivid-proposed</item>\n            <item>vivid-updates</item>\n            <item>vivid-backports</item>\n            <item>wily</item>\n            <item>wily-security</item>\n            <item>wily-proposed</item>\n            <item>wily-updates</item>\n            <item>wily-backports</item>\n            <item>xenial</item>\n            <item>xenial-security</item>\n            <item>xenial-proposed</item>\n            <item>xenial-updates</item>\n            <item>xenial-backports</item>\n            <item>yakkety</item>\n            <item>yakkety-security</item>\n            <item>yakkety-proposed</item>\n            <item>yakkety-updates</item>\n            <item>yakkety-backports</item>\n            <item>zesty</item>\n            <item>zesty-security</item>\n            <item>zesty-proposed</item>\n            <item>zesty-updates</item>\n            <item>zesty-backports</item>\n            <item>artful</item>\n            <item>artful-security</item>\n            <item>artful-proposed</item>\n            <item>artful-updates</item>\n            <item>artful-backports</item>\n            <item>bionic</item>\n            <item>bionic-security</item>\n            <item>bionic-proposed</item>\n            <item>bionic-updates</item>\n            <item>bionic-backports</item>\n            <item>cosmic</item>\n            <item>cosmic-security</item>\n            <item>cosmic-proposed</item>\n            <item>cosmic-updates</item>\n            <item>cosmic-backports</item>\n            <item>disco</item>\n            <item>disco-security</item>\n            <item>disco-proposed</item>\n            <item>disco-updates</item>\n            <item>disco-backports</item>\n            <item>eoan</item>\n            <item>eoan-security</item>\n            <item>eoan-proposed</item>\n            <item>eoan-updates</item>\n            <item>eoan-backports</item>\n        </list>\n\n        <list name=\"urgencies\">\n            <item>low</item>\n            <item>medium</item>\n            <item>high</item>\n            <item>emergency</item>\n            <item>bug</item>\n            <item>critical</item>\n        </list>\n\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"INIT\">\n                <RegExpr attribute=\"Keyword\" context=\"Head\" String=\"[^ ]*\" column=\"0\"/>\n                <RegExpr attribute=\"Email\" context=\"#stay\" String=\"&lt;.*@.*&gt;\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\" \\-\\-\" column=\"0\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"  \\*\" column=\"0\"/>\n                <RegExpr attribute=\"Bug\" context=\"#stay\" String=\"closes:[\\s]*((bug\\s*)?#\\s*\\d+)(\\s*, *(bug\\s*)?#\\s*\\d+)*\" insensitive=\"true\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Head\">\n                <DetectChar attribute=\"Keyword\" context=\"Version\" char=\"(\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"[,;=]\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                <keyword attribute=\"Data\" context=\"#stay\" String=\"distributions\"/>\n                <keyword attribute=\"Data\" context=\"#stay\" String=\"urgencies\"/>\n            </context>\n\n            <context attribute=\"Version\" lineEndContext=\"#pop\" name=\"Version\">\n                <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\")\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"Version\"  defStyleNum=\"dsDataType\"/>\n            <itemData name=\"Data\" defStyleNum=\"dsDataType\"/>\n            <itemData name=\"Bug\"  defStyleNum=\"dsDataType\"/>\n            <itemData name=\"Email\" defStyleNum=\"dsOthers\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <keywords casesensitive=\"1\" weakDeliminator=\"-\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/debiancontrol.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Debian Control\" version=\"1\" kateversion=\"5.0\" section=\"Other\" extensions=\"control\" mimetype=\"\">\n    <highlighting>\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"INIT\">\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Depends:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Recommends:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Suggests:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Conflicts:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Provides:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Replaces:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Enhances:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Pre-Depends:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Build-Depends:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Build-Depends-Indep:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Build-Conflicts:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Build-Conflicts-Indep:\"/>\n                <StringDetect attribute=\"Keyword\" context=\"DependencyField\" String=\"Breaks:\"/>\n                <RegExpr attribute=\"Keyword\" context=\"Field\" minimal=\"true\" String=\"[^ ]*:\" column=\"0\"/>\n                <DetectChar attribute=\"Value\" context=\"Field\" char=\" \" column=\"0\"/>\n            </context>\n\n            <context attribute=\"Value\" lineEndContext=\"#pop\" name=\"Field\">\n                <RegExpr attribute=\"Email\" context=\"#stay\" String=\"&lt;.*@.*&gt;\" minimal=\"true\"/>\n                <Detect2Chars attribute=\"Keyword\" context=\"Variable\" char=\"$\" char1=\"{\"/>\n            </context>\n\n            <context attribute=\"Variable\" lineEndContext=\"#pop\" name=\"Variable\">\n                <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"}\"/>\n            </context>\n\n            <context attribute=\"Value\" lineEndContext=\"#pop\" name=\"DependencyField\">\n                <RegExpr attribute=\"Email\" context=\"#stay\" String=\"&lt;.*@.*&gt;\" minimal=\"true\"/>\n                <Detect2Chars attribute=\"Keyword\" context=\"Variable\" char=\"$\" char1=\"{\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"[,\\|]\"/>\n                <DetectChar attribute=\"Keyword\" context=\"Constrain\" char=\"(\"/>\n                <DetectChar attribute=\"Keyword\" context=\"Constrain\" char=\"[\"/>\n            </context>\n\n            <context attribute=\"Version\" lineEndContext=\"#stay\" name=\"Constrain\">\n                <Detect2Chars attribute=\"Keyword\" context=\"Variable\" char=\"$\" char1=\"{\"/>\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"[!&lt;=&gt;]\"/>\n                <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\")\"/>\n                <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"]\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"Version\"  defStyleNum=\"dsDecVal\"/>\n            <itemData name=\"Value\"  defStyleNum=\"dsDataType\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsVariable\"/>\n            <itemData name=\"Email\" defStyleNum=\"dsOthers\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\"/>\n        </comments>\n        <keywords casesensitive=\"1\" />\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/desktop.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\".desktop\" version=\"2\" kateversion=\"2.4\"\n          section=\"Configuration\" extensions=\"*.desktop;*.kdelnk;*.desktop.cmake\"\n          mimetype=\"application/x-desktop\">\n  <highlighting>\n    <contexts>\n      <context attribute=\"Key\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr String=\"\\[.*\\]$\" attribute=\"Section\" context=\"#stay\" beginRegion=\"Section\" endRegion=\"Section\" column=\"0\"/>\n        <RegExpr String=\"\\[.*\\]\" attribute=\"Language\" context=\"Value\"/>\n        <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\" firstNonSpace=\"true\"/>\n        <DetectChar char=\"=\" attribute=\"Normal Text\" context=\"Value\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Value\"/>\n      <context attribute=\"Comment\"     lineEndContext=\"#pop\" name=\"Comment\"/>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Section\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Key\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Language\"  defStyleNum=\"dsDecVal\" bold=\"1\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/diff.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY file  \"(====|\\*\\*\\*|\\-\\-\\-|diff|Only in .*:).*$\">\n  <!ENTITY chunk \"(\\@\\@|\\d).*$\">\n  <!ENTITY csep  \"(\\+\\+\\+|\\-\\-\\-).*$\">\n  <!ENTITY index  \"Index:.*\">\n]>\n<!--\n    2006-08-02: 1.10 Matthew Woehlke <mw_triad@sourceforge.net>\n      Added folding. Context diff changes are now identified as old/new (using\n      seperate attributes). Recognize 'Only in' from 'diff -r' output.\n      There is currently a bug (KATE limitation?) where regions may sometimes\n      pick up one line too many.\n    2008-02-13: 1.11 Eduardo Robles Elvira <edulix AT gmail DOT com>\n     Fixed folding.\n-->\n<language name=\"Diff\" version=\"4\" kateversion=\"5.0\" section=\"Other\" extensions=\"*.diff;*patch\" mimetype=\"text/x-patch\">\n\n  <highlighting>\n\n    <contexts>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr attribute=\"Header\" context=\"Chunk\" String=\"&chunk;\" beginRegion=\"chunk\" column=\"0\"/>\n        <RegExpr attribute=\"Header\" context=\"RChunk\" String=\"\\*+$\" beginRegion=\"chunk\" column=\"0\"/>\n        <RegExpr attribute=\"File\" context=\"#stay\" String=\"Only in .*:.*$\" column=\"0\"/>\n        <RegExpr attribute=\"File\" context=\"RFile\" String=\"diff.*$\" beginRegion=\"chunk\" column=\"0\"/>\n        <RegExpr attribute=\"File\" context=\"#stay\" String=\"====.*$\" column=\"0\"/>\n        <RegExpr attribute=\"File\" context=\"File\" String=\"(\\*\\*\\*|\\-\\-\\-).*$\" beginRegion=\"chunk\" column=\"0\"/>\n        <IncludeRules context=\"FindDiff\"/>\n        <DetectChar attribute=\"Changed line (old)\" context=\"ChangedOld\" char=\"!\" column=\"0\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindDiff\">\n        <RegExpr attribute=\"File\" context=\"#stay\" String=\"\\-\\-\\-.*$\" column=\"0\"/>\n        <RegExpr attribute=\"Header\" context=\"#stay\" String=\"&csep;\" column=\"0\"/>\n        <AnyChar attribute=\"Added line\" context=\"Added\" String=\"+&gt;\" column=\"0\"/>\n        <AnyChar attribute=\"Removed line\" context=\"Removed\" String=\"-&lt;\" column=\"0\"/>\n      </context>\n\n      <!-- block contexts -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"File\">\n        <IncludeRules context=\"FindDiff\"/>\n        <RegExpr attribute=\"Header\" context=\"ChunkInFile\" String=\"&chunk;\" beginRegion=\"chunk\" column=\"0\"/>\n        <RegExpr attribute=\"Header\" context=\"RChunkInFile\" String=\"\\*+$\" beginRegion=\"chunk\" column=\"0\"/>\n        <RegExpr attribute=\"File\" context=\"#pop\" String=\"&file;\" endRegion=\"chunk\" column=\"0\"/>\n        <DetectChar attribute=\"Changed line (old)\" context=\"ChangedOld\" char=\"!\" column=\"0\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Chunk\">\n        <IncludeRules context=\"FindDiff\"/>\n        <RegExpr attribute=\"Header\" context=\"#pop\" String=\"&chunk;\" endRegion=\"chunk\" lookAhead=\"true\" column=\"0\"/>\n        <DetectChar attribute=\"Changed line (old)\" context=\"ChangedOld\" char=\"!\" column=\"0\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ChunkInFile\">\n        <IncludeRules context=\"FindDiff\"/>\n        <RegExpr attribute=\"Header\" context=\"#pop\" String=\"&chunk;\" endRegion=\"chunk\" lookAhead=\"true\" column=\"0\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"&index;\" endRegion=\"chunk\" column=\"0\"/>\n        <RegExpr attribute=\"File\" context=\"#pop\" String=\"&file;\" endRegion=\"chunk\" lookAhead=\"true\" column=\"0\"/>\n        <DetectChar attribute=\"Changed line (old)\" context=\"ChangedOld\" char=\"!\" column=\"0\"/>\n      </context>\n\n      <!-- block contexts (diff -r) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"RFile\">\n        <RegExpr attribute=\"File\" context=\"#pop\" String=\"(diff|Only in .*:).*$\" endRegion=\"chunk\" lookAhead=\"true\" column=\"0\"/>\n        <RegExpr attribute=\"Header\" context=\"#stay\" String=\"&file;\" column=\"0\"/>\n        <RegExpr attribute=\"Header\" context=\"RChunkInFile\" String=\"\\*+$\" beginRegion=\"chunk\" column=\"0\"/>\n        <IncludeRules context=\"File\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"RChunk\">\n        <RegExpr attribute=\"Header\" context=\"#stay\" String=\"\\*\\*\\* .* \\*\\*\\*\\*$\" column=\"0\"/>\n        <RegExpr attribute=\"Header\" context=\"RChunkNew\" String=\"\\-\\-\\- .* \\-\\-\\-\\-$\" column=\"0\"/>\n        <IncludeRules context=\"Chunk\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"RChunkInFile\">\n        <RegExpr attribute=\"Header\" context=\"#stay\" String=\"\\*\\*\\* .* \\*\\*\\*\\*$\" column=\"0\"/>\n        <RegExpr attribute=\"Header\" context=\"RChunkInFileNew\" String=\"\\-\\-\\- .* \\-\\-\\-\\-$\" column=\"0\"/>\n        <IncludeRules context=\"ChunkInFile\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"RChunkNew\">\n        <RegExpr attribute=\"Header\" context=\"#pop#pop\" String=\"&chunk;\" lookAhead=\"true\" column=\"0\"/>\n        <DetectChar attribute=\"Changed line (new)\" context=\"ChangedNew\" char=\"!\" column=\"0\"/>\n        <IncludeRules context=\"FindDiff\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"RChunkInFileNew\">\n        <RegExpr attribute=\"Header\" context=\"#pop#pop\" String=\"&chunk;\" lookAhead=\"true\" column=\"0\"/>\n        <RegExpr attribute=\"File\" context=\"#pop#pop\" String=\"&file;\" endRegion=\"chunk\" lookAhead=\"true\" column=\"0\"/>\n        <DetectChar attribute=\"Changed line (new)\" context=\"ChangedNew\" char=\"!\" column=\"0\"/>\n        <IncludeRules context=\"FindDiff\"/>\n      </context>\n\n      <!-- line contexts -->\n      <context attribute=\"Removed line\" lineEndContext=\"#pop\" name=\"Removed\"/>\n      <context attribute=\"Added line\" lineEndContext=\"#pop\" name=\"Added\"/>\n      <context attribute=\"Changed line (old)\" lineEndContext=\"#pop\" name=\"ChangedOld\"/>\n      <context attribute=\"Changed line (new)\" lineEndContext=\"#pop\" name=\"ChangedNew\"/>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"File\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Header\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Removed line\"  defStyleNum=\"dsString\" />\n      <itemData name=\"Added line\"  defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Changed line (old)\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"Changed line (new)\"  defStyleNum=\"dsVariable\"/>\n    </itemDatas>\n\n  </highlighting>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/djangotemplate.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY name    \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n]>\n<language name=\"Django HTML Template\" version=\"4\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.htm;*.html\" mimetype=\"text/html\"  author=\"Matthew Marshall (matthew@matthewmarshall.org)\" license=\"LGPL\" priority=\"9\">\n\n<!--\n    Based off of the katepart html syntax highlighting by Wilbert Berendsen.\n\n    Email me with any bugs/suggestions/requests!\n-->\n\n<highlighting>\n\n<list name=\"blocktags\">\n    <item>for</item>\n    <item>block</item>\n    <item>if</item>\n    <item>ifequal</item>\n    <item>ifnotequal</item>\n    <item>ifchanged</item>\n    <item>blocktrans</item>\n    <item>spaceless</item>\n    <item>autoescape</item>\n</list>\n\n<list name=\"endblocktags\">\n    <item>endfor</item>\n    <item>endblock</item>\n    <item>endif</item>\n    <item>endifequal</item>\n    <item>endifnotequal</item>\n    <item>endifchanged</item>\n    <item>endblocktrans</item>\n    <item>endspaceless</item>\n    <item>endautoescape</item>\n</list>\n\n<contexts>\n  <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Mismatched Block Tag\" context=\"#stay\" String=\"\\{%\\s*end[a-z]+\\s*%\\}\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"FindHTML\" />\n  </context>\n\n  <context name=\"In Block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr context=\"#pop\" String=\"\\{%\\s*end[a-z]+\\s*%\\}\" lookAhead=\"true\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"FindHTML\" />\n  </context>\n\n  <context name=\"FindTemplate\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Template Comment\" context=\"Template Comment\" String=\"\\{%\\s*comment\\s*%\\}\" beginRegion=\"templatecomment\" />\n    <Detect2Chars attribute=\"Template Var\" context=\"Template Var\" char=\"{\" char1=\"{\" />\n    <Detect2Chars attribute=\"Template Tag\" context=\"Template Tag\" char=\"{\" char1=\"%\" />\n  </context>\n\n  <context name=\"Template Comment\" attribute=\"Template Comment\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Template Comment\" context=\"#pop\" String=\"\\{%\\s*endcomment\\s*%\\}\" endRegion=\"templatecomment\" />\n  </context>\n\n  <context name=\"Template Var\" attribute=\"Template Var\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Template Var\" context=\"#pop\" char=\"}\" char1=\"}\" />\n    <DetectChar attribute=\"Template Filter\" context=\"Template Filter\" char='|' />\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"{\" char1=\"{\" />\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"{\" char1=\"%\" />\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"%\" char1=\"}\" />\n  </context>\n\n  <context name=\"Template Filter\" attribute=\"Template Filter\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Template Var\" context=\"#pop#pop\" char=\"}\" char1=\"}\" />\n    <DetectChar attribute=\"Template String\" char=\"'\" context=\"Single A-string\"/>\n    <DetectChar attribute=\"Template String\" char=\"&quot;\" context=\"Single Q-string\"/>\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"{\" char1=\"{\" />\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"{\" char1=\"%\" />\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"%\" char1=\"}\" />\n  </context>\n\n  <context name=\"Template Tag\" attribute=\"Template Tag\" lineEndContext=\"#stay\">\n      <keyword String=\"blocktags\" context=\"Found Block Tag\" lookAhead=\"true\" attribute=\"Template Tag\" />\n      <DetectIdentifier attribute=\"Template Tag\" context=\"In Template Tag\" />\n  </context>\n\n  <context name=\"Found Block Tag\" attribute=\"Template Tag\" lineEndContext=\"#stay\">\n    <!-- This context is entered when a matching block tag was found through lookAhead.  We need to capture it in an re, so that it can be matched with the end[blockname] tag later -->\n    <RegExpr attribute=\"Template Tag\" String=\"(&name;)\" context=\"In Block Tag\"/>\n  </context>\n\n  <context name=\"In Block Tag\" attribute=\"Template Tag Argument\" dynamic=\"true\" lineEndContext=\"#stay\" >\n    <RegExpr context=\"#pop#pop#pop\" String=\"\\{%\\s*end%1\\s*%\\}\" dynamic=\"true\" attribute=\"Template Tag\"/>\n    <RegExpr context=\"Non Matching Tag\" String=\"\\{%\\s*end[a-z]+\\s*%\\}\" lookAhead=\"true\" />\n    <Detect2Chars attribute=\"Template Tag\" context=\"In Block\" char=\"%\" char1=\"}\" />\n    <IncludeRules context=\"In Template Tag\" />\n  </context>\n\n  <context name=\"Non Matching Tag\" attribute=\"Template Tag\" lineEndContext=\"#stay\">\n    <keyword String=\"endblocktags\" attribute=\"Mismatched Block Tag\" context=\"#pop\" />\n    <!-- If the mismatched tag is one we don't know about, ignore it. -->\n    <DetectIdentifier attribute=\"Template Tag\" context=\"#pop\" />\n  </context>\n\n  <context name=\"In Template Tag\" attribute=\"Template Tag Argument\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Template Tag\" context=\"#pop#pop\" char=\"%\" char1=\"}\" />\n    <DetectChar attribute=\"Template String\" char=\"'\" context=\"Single A-string\"/>\n    <DetectChar attribute=\"Template String\" char=\"&quot;\" context=\"Single Q-string\"/>\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"{\" char1=\"{\" />\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"{\" char1=\"%\" />\n    <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"}\" char1=\"}\" />\n  </context>\n\n  <context name=\"Single A-string\" attribute=\"Template String\" lineEndContext=\"#stay\">\n    <HlCStringChar attribute=\"Template String\" context=\"#stay\"/>\n<!--       <RegExpr attribute=\"Operator\" String=\"%[a-zA-Z]\" context=\"#stay\"/> -->\n    <DetectChar attribute=\"Template String\" char=\"'\" context=\"#pop\"/>\n  </context>\n\n  <context name=\"Single Q-string\" attribute=\"Template String\" lineEndContext=\"#stay\">\n    <HlCStringChar attribute=\"Template String\" context=\"#stay\"/>\n<!--       <RegExpr attribute=\"Operator\" String=\"%[a-zA-Z]\" context=\"#stay\"/> -->\n    <DetectChar attribute=\"Template String\" char=\"&quot;\" context=\"#pop\"/>\n  </context>\n\n\n\n  <context name=\"FindHTML\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectSpaces/>\n    <DetectIdentifier/>\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <StringDetect attribute=\"CDATA\" context=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n    <RegExpr attribute=\"Doctype\" context=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" beginRegion=\"doctype\" />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n    <RegExpr attribute=\"Element\" context=\"CSS\" String=\"&lt;style\\b\" insensitive=\"true\" beginRegion=\"style\" />\n    <RegExpr attribute=\"Element\" context=\"JS\" String=\"&lt;script\\b\" insensitive=\"true\" beginRegion=\"script\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;pre\\b\" insensitive=\"true\" beginRegion=\"pre\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;div\\b\" insensitive=\"true\" beginRegion=\"div\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;table\\b\" insensitive=\"true\" beginRegion=\"table\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;&name;\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/pre\\b\" insensitive=\"true\" endRegion=\"pre\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/div\\b\" insensitive=\"true\" endRegion=\"div\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/table\\b\" insensitive=\"true\" endRegion=\"table\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/&name;\" />\n    <!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context=\"FindDTDRules\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <context name=\"FindEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;&lt;\" />\n  </context>\n\n  <context name=\"FindPEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <RegExpr attribute=\"PEntityRef\" context=\"#stay\" String=\"%&name;;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;%\" />\n  </context>\n\n  <context name=\"FindAttributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"&name;\" column=\"0\"/>\n    <RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"\\s+&name;\" />\n    <DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\" />\n  </context>\n\n  <context name=\"FindDTDRules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Doctype\" context=\"Doctype Markupdecl\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n  </context>\n\n\n  <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <DetectSpaces/>\n    <IncludeRules context=\"##Alerts\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <DetectIdentifier/>\n    <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"-(-(?!-&gt;))+\" />\n  </context>\n\n  <context name=\"CDATA\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectSpaces/>\n    <DetectIdentifier/>\n    <StringDetect attribute=\"CDATA\" context=\"#pop\" String=\"]]&gt;\" endRegion=\"cdata\" />\n    <StringDetect attribute=\"EntityRef\" context=\"#stay\" String=\"]]&amp;gt;\" />\n  </context>\n\n  <context name=\"PI\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n  </context>\n\n  <context name=\"Doctype\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" endRegion=\"doctype\" />\n    <DetectChar attribute=\"Doctype\" context=\"Doctype Internal Subset\" char=\"[\" beginRegion=\"int_subset\" />\n  </context>\n\n  <context name=\"Doctype Internal Subset\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"]\" endRegion=\"int_subset\" />\n    <IncludeRules context=\"FindDTDRules\" />\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"El Open\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n    <DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n    <IncludeRules context=\"FindAttributes\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Close\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Close 2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Close 3\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop#pop#pop#pop\" char=\"&gt;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"CSS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"style\" />\n    <DetectChar attribute=\"Element\" context=\"CSS content\" char=\"&gt;\" />\n    <IncludeRules context=\"FindAttributes\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"CSS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/style\\b\" insensitive=\"true\" endRegion=\"style\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"##CSS\" includeAttrib=\"true\"/>\n  </context>\n\n  <context name=\"JS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"script\" />\n    <DetectChar attribute=\"Element\" context=\"JS content\" char=\"&gt;\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"FindAttributes\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"JS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n    <RegExpr attribute=\"Comment\" context=\"JS comment close\" String=\"//(?=.*&lt;/script\\b)\" insensitive=\"true\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n  </context>\n\n  <context name=\"JS comment close\" attribute=\"Comment\" lineEndContext=\"#pop\">\n    <RegExpr attribute=\"Element\" context=\"El Close 3\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"##Alerts\" />\n  </context>\n\n  <context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"Value NQ\">\n    <DetectChar attribute=\"Value\" context=\"Value DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Value SQ\" char=\"&apos;\" />\n    <DetectSpaces />\n  </context>\n\n  <context name=\"Value NQ\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n    <IncludeRules context=\"FindEntityRefs\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <RegExpr attribute=\"Value\" context=\"#stay\" String=\"/(?!&gt;)\" />\n    <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[^/&gt;&lt;&quot;&apos;\\s]\" />\n  </context>\n\n  <context name=\"Value DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <context name=\"Value SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindTemplate\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n</contexts>\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n  <itemData name=\"CDATA\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n  <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" />\n  <itemData name=\"Element\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Attribute\" defStyleNum=\"dsOthers\" />\n  <itemData name=\"Value\" defStyleNum=\"dsString\" />\n  <itemData name=\"EntityRef\" defStyleNum=\"dsDecVal\" />\n  <itemData name=\"PEntityRef\" defStyleNum=\"dsDecVal\" />\n  <itemData name=\"Error\" defStyleNum=\"dsError\" />\n  <itemData name=\"Template Var\" defStyleNum=\"dsFunction\" />\n  <itemData name=\"Template Tag\" defStyleNum=\"dsFunction\" />\n  <itemData name=\"Template Tag Argument\" defStyleNum=\"dsFunction\" />\n  <itemData name=\"Template String\" defStyleNum=\"dsString\" />\n  <itemData name=\"Template Comment\" defStyleNum=\"dsComment\" />\n  <itemData name=\"Template Filter\" defStyleNum=\"dsOthers\" />\n  <itemData name=\"Mismatched Block Tag\" defStyleNum=\"dsError\" />\n</itemDatas>\n\n</highlighting>\n<general>\n  <comments>\n      <comment name=\"multiLine\" start=\"{% comment %}\" end=\"{% endcomment %}\" region=\"templatecomment\" />\n  </comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/dockerfile.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Dockerfile syntaxfile v1.0 by James Turnbull <james@lovedthanlost.net> -->\n<language name=\"Dockerfile\" section=\"Other\" version=\"7\" kateversion=\"3.4\" extensions=\"Dockerfile\" author=\"James Turnbull (james@lovedthanlost.net)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>ADD</item>\n      <item>ARG</item>\n      <item>CMD</item>\n      <item>COPY</item>\n      <item>ENTRYPOINT</item>\n      <item>ENV</item>\n      <item>EXPOSE</item>\n      <item>FROM</item>\n      <item>HEALTHCHECK</item>\n      <item>LABEL</item>\n      <item>MAINTAINER</item>\n      <item>ONBUILD</item>\n      <item>RUN</item>\n      <item>SHELL</item>\n      <item>STOPSIGNAL</item>\n      <item>USER</item>\n      <item>VOLUME</item>\n      <item>WORKDIR</item>\n    </list>\n\n    <contexts>\n      <context name=\"normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <keyword attribute=\"Keyword\"  context=\"#stay\" String=\"keywords\"/>\n        <DetectIdentifier/>\n        <DetectChar attribute=\"String\" context=\"string&quot;\" char=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"string'\" char=\"'\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context name=\"string&quot;\" attribute=\"String\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Operator\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context name=\"string'\" attribute=\"String\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\"  defStyleNum=\"dsNormal\"  spellChecking=\"0\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" />\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"0\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"  spellChecking=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name = \"singleLine\" start = \"#\"/>\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/dosbat.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n        <!ENTITY label    \"[^\\s]+\">\n        <!ENTITY eos      \"(?=($|\\s))\">                         <!-- eol or space following -->\n        <!ENTITY noword   \"(?![\\w$+-])\">                        <!-- no word, $, + or - following -->\n        <!ENTITY varname  \"[A-Za-z_][A-Za-z0-9_]*\">             <!-- valid character in a variable name -->\n        <!ENTITY eop      \"(?=([\\s\\\\;&quot;&#37;]|$))\">         <!-- end of path -->\n        <!ENTITY pathpart \"[^\\s\\\\&#37;;/:\\*\\?&quot;&gt;&lt;\\|]\"> <!-- valid character in a file name -->\n]>\n<language name=\"MS-DOS Batch\" version=\"3\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.bat\" mimetype=\"application/x-dos\" casesensitive=\"0\" author=\"Matthew Woehlke (mw_triad@users.sourceforge.net)\" license=\"LGPL\">\n\n<!-- (c) 2006, 2009, 2010 Matthew Woehlke (mw_triad@users.sourceforge.net)\n    Released under the LGPL -->\n\n  <highlighting>\n    <list name=\"builtins\">\n      <item>assoc</item>\n      <item>break</item>\n      <item>call</item>\n      <item>cd</item>\n      <item>chdir</item>\n      <item>cls</item>\n      <item>color</item>\n      <item>copy</item>\n      <item>date</item>\n      <item>del</item>\n      <item>dir</item>\n      <item>endlocal</item>\n      <item>erase</item>\n      <item>exit</item>\n      <item>ftype</item>\n      <item>md</item>\n      <item>mkdir</item>\n      <item>move</item>\n      <item>path</item>\n      <item>pause</item>\n      <item>popd</item>\n      <item>prompt</item>\n      <item>pushd</item>\n      <item>rd</item>\n      <item>ren</item>\n      <item>rename</item>\n      <item>rmdir</item>\n      <item>setlocal</item>\n      <item>shift</item>\n      <item>start</item>\n      <item>time</item>\n      <item>title</item>\n      <item>type</item>\n      <item>ver</item>\n      <item>verify</item>\n      <item>vol</item>\n    </list>\n\n    <!-- these need special handling -->\n    <list name=\"echo\"><item>echo</item></list>\n    <list name=\"else\"><item>else</item></list>\n    <list name=\"for\"><item>for</item></list>\n    <list name=\"in\"><item>in</item></list>\n    <list name=\"do\"><item>do</item></list>\n    <list name=\"goto\"><item>goto</item></list>\n    <list name=\"if\"><item>if</item></list>\n    <list name=\"not\"><item>not</item></list>\n    <list name=\"set\"><item>set</item></list>\n\n    <list name=\"commands\">\n      <!-- the basics -->\n      <item>at</item>\n      <item>attrib</item>\n      <item>break</item>\n      <item>cacls</item>\n      <item>chcp</item>\n      <item>chkdsk</item>\n      <item>chkntfs</item>\n      <item>cmd</item>\n      <item>comp</item>\n      <item>compact</item>\n      <item>convert</item>\n      <item>diskcomp</item>\n      <item>diskcopy</item>\n      <item>doskey</item>\n      <item>fc</item>\n      <item>find</item>\n      <item>findstr</item>\n      <item>format</item>\n      <item>graftabl</item>\n      <item>help</item>\n      <item>label</item>\n      <item>mode</item>\n      <item>more</item>\n      <item>print</item>\n      <item>recover</item>\n      <item>replace</item>\n      <item>sort</item>\n      <item>subst</item>\n      <item>tree</item>\n      <item>xcopy</item>\n    </list>\n\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Start\">\n        <!-- general syntactical stuff -->\n        <RegExpr attribute=\"Comment\" context=\"Comment\" String=\"^\\s*[Rr][Ee][Mm](\\s|$)\"/>\n        <keyword attribute=\"Builtin\" context=\"Command\" String=\"builtins\"/>\n        <keyword attribute=\"Command\" context=\"Command\" String=\"commands\"/>\n        <DetectChar attribute=\"Label\" context=\"Label\" char=\":\" firstNonSpace=\"true\"/>\n        <!-- special built-ins -->\n        <RegExpr attribute=\"Builtin\" context=\"#stay\" String=\"\\b[Ee][Cc][Hh][Oo]\\s+[Oo]([Ff][Ff]|[Nn])\\s*$\"/>\n        <keyword attribute=\"Builtin\" context=\"CmdEcho\" String=\"echo\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"if\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"not\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"else\"/>\n        <keyword attribute=\"Keyword\" context=\"CmdFor\" String=\"for\"/>\n        <keyword attribute=\"Keyword\" context=\"Label\" String=\"goto\"/>\n        <keyword attribute=\"Builtin\" context=\"CmdSet\" String=\"set\"/>\n        <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"@\"/>\n        <!-- other syntaxes -->\n        <IncludeRules context=\"FindMost\"/>\n      </context>\n\n      <!-- the following contexts are meant to be included -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindMost\">\n        <IncludeRules context=\"FindStrings\"/>\n        <IncludeRules context=\"FindSubstitutions\"/>\n        <!-- handle command line options -->\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"[/-][A-Za-z0-9][A-Za-z0-9_]*:?\"/>\n        <!-- handle redirection -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"[0-9]*(&gt;&gt;?|&lt;)(&amp;[0-9]+)\"/>\n        <RegExpr attribute=\"Redirection\" context=\"Path\" String=\"[0-9]*(&gt;&gt;?|&lt;)\\s*\"/>\n        <DetectChar attribute=\"Redirection\" context=\"Start\" char=\"|\"/>\n        <!-- handle paths -->\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"[.]+&eop;\"/>\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"[A-Za-z][A-Za-z.]*:\"/>\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"&pathpart;+(?=\\\\)\"/>\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"[.]*\\\\+&pathpart;*&eop;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindStrings\">\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindSubstitutions\">\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"&#37;\" char1=\"&#37;\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"([&#37;!])[^&#37;\\s!]+\\1\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[&#37;!][a-z0-9]\" insensitive=\"true\"/>\n      </context>\n\n      <!-- basic sub-contexts -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        <IncludeRules context=\"FindSubstitutions\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Command\">\n        <IncludeRules context=\"FindMost\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"Label\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Label\" context=\"Comment\" String=\"&label;&eos;\"/>\n      </context>\n\n      <context attribute=\"Path\" lineEndContext=\"#pop\" name=\"Path\">\n        <IncludeRules context=\"FindStrings\"/>\n        <IncludeRules context=\"FindSubstitutions\"/>\n        <AnyChar attribute=\"Normal Text\" context=\"#pop\" String=\" &#9;\\&#37;/:*?&quot;&gt;&lt;|\" lookAhead=\"true\"/>\n      </context>\n\n      <!-- special sub-contexts -->\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdSet\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Variable\" context=\"#pop\" String=\"&varname;=\"/>\n      </context>\n\n      <context attribute=\"Echoed Text\" lineEndContext=\"#pop\" name=\"CmdEcho\">\n        <IncludeRules context=\"FindSubstitutions\"/>\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\^.\"/>\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"[0-9]*(&gt;&gt;?|&lt;)(&amp;[0-9]+)\"/>\n        <RegExpr attribute=\"Redirection\" context=\"Path\" String=\"[0-9]*(&gt;&gt;?|&lt;)\\s*\"/>\n        <DetectChar attribute=\"Redirection\" context=\"Start\" char=\"|\"/>\n      </context>\n\n      <!-- 'for' sub-contexts -->\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdFor\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Variable\" context=\"CmdForIn\" String=\"%%[a-z]\" insensitive=\"true\"/>\n        <Detect2Chars attribute=\"Option\" context=\"#stay\" char=\"/\" char1=\"D\"/>\n        <Detect2Chars attribute=\"Option\" context=\"CmdForR\" char=\"/\" char1=\"R\"/>\n        <Detect2Chars attribute=\"Option\" context=\"CmdForL\" char=\"/\" char1=\"L\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForIn\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <keyword attribute=\"Keyword\" context=\"CmdForList\" String=\"in\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForList\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar attribute=\"Keyword\" context=\"CmdForListBody\" char=\"(\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"CmdForListBody\">\n        <IncludeRules context=\"FindStrings\"/>\n        <IncludeRules context=\"FindSubstitutions\"/>\n        <DetectChar attribute=\"Keyword\" context=\"CmdForDo\" char=\")\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForDo\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <keyword attribute=\"Keyword\" context=\"CmdForCommands\" String=\"do\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"CmdForCommands\">\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"%%(~([fdpnxsatz]|\\$&varname;:)*)?[a-z]\" insensitive=\"true\"/>\n        <IncludeRules context=\"Start\"/>\n        <DetectChar attribute=\"Keyword\" context=\"CmdForNestedCommands\" char=\"(\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"CmdForNestedCommands\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\")\"/>\n        <IncludeRules context=\"CmdForCommands\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForR\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"([a-z][a-z.]*:)?[.]*\\\\*&pathpart;*&eop;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Variable\" context=\"CmdForIn\" String=\"%%[a-z]\" insensitive=\"true\"/>\n      </context>\n\n      <!-- 'for /L' sub-contexts -->\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForL\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Variable\" context=\"CmdForLIn\" String=\"%%[a-z]\" insensitive=\"true\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLIn\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <keyword attribute=\"Keyword\" context=\"CmdForLRange\" String=\"in\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLRange\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar attribute=\"Keyword\" context=\"CmdForLStart\" char=\"(\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLStart\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Number\" context=\"CmdForLStartComma\" String=\"-?[0-9]+\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLStartComma\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar attribute=\"Keyword\" context=\"CmdForLStep\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLStep\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Number\" context=\"CmdForLStepComma\" String=\"-?[0-9]+\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLStepComma\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar attribute=\"Keyword\" context=\"CmdForLEnd\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLEnd\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Number\" context=\"CmdForLEndParen\" String=\"-?[0-9]+\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"CmdForLEndParen\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar attribute=\"Keyword\" context=\"CmdForDo\" char=\")\"/>\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Number\"       defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Label\"        defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Builtin\"      defStyleNum=\"dsBuiltIn\"/>\n      <itemData name=\"Command\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Redirection\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"Escape\"       defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Echoed Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Variable\"     defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Path\"         defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Option\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Error\"        defStyleNum=\"dsError\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"rem \"/>\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\"@\" additionalDeliminator=\"@\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/dot.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Adapted from the VIM highlighter, by Markus Mottl (markus@oefai.at) -->\n<language name=\"dot\" version=\"3\" kateversion=\"5.0\" section=\"Scientific\" extensions=\"*.dot\" mimetype=\"text/x-dot\" author=\"Postula Loïs (lois.postula@live.be)\" priority=\"0\">\n\n  <highlighting>\n\n    <list name=\"keywords\">\n      <item>digraph</item>\n      <item>node</item>\n      <item>edge</item>\n      <item>subgraph</item>\n    </list>\n\n    <list name=\"attributes\">\n      <!-- Graph attributes -->\n      <item>center</item>\n      <item>layers</item>\n      <item>margin</item>\n      <item>mclimit</item>\n      <item>name</item>\n      <item>nodesep</item>\n      <item>nslimit</item>\n      <item>ordering</item>\n      <item>page</item>\n      <item>pagedir</item>\n      <item>rank</item>\n      <item>rankdir</item>\n      <item>ranksep</item>\n      <item>ratio</item>\n      <item>rotate</item>\n      <item>size</item>\n      <!-- Node attributes -->\n      <item>distortion</item>\n      <item>fillcolor</item>\n      <item>fontcolor</item>\n      <item>fontname</item>\n      <item>fontsize</item>\n      <item>height</item>\n      <item>layer</item>\n      <item>orientation</item>\n      <item>peripheries</item>\n      <item>regular</item>\n      <item>shape</item>\n      <item>shapefile</item>\n      <item>sides</item>\n      <item>skew</item>\n      <item>width</item>\n      <!-- Edge attributes -->\n      <item>arrowhead</item>\n      <item>arrowsize</item>\n      <item>arrowtail</item>\n      <item>constraint</item>\n      <item>decorateP</item>\n      <item>dir</item>\n      <item>headclip</item>\n      <item>headlabel</item>\n      <item>labelangle</item>\n      <item>labeldistance</item>\n      <item>labelfontcolor</item>\n      <item>labelfontname</item>\n      <item>labelfontsize</item>\n      <item>minlen</item>\n      <item>port_label_distance</item>\n      <item>samehead</item>\n      <item>sametail</item>\n      <item>tailclip</item>\n      <item>taillabel</item>\n      <item>weight</item>\n      <!-- Shared attributes (graphs, nodes, edges) -->\n      <item>color</item>\n      <!-- Shared attributes (graphs and edges) -->\n      <item>bgcolor</item>\n      <item>label</item>\n      <item>URL</item>\n      <!-- Shared attributes (nodes and edges) -->\n      <item>fontcolor</item>\n      <item>fontname</item>\n      <item>fontsize</item>\n      <item>layer</item>\n      <item>style</item>\n    </list>\n\n    <contexts>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <IncludeRules context=\"DetectAll\"/>\n      </context>\n\n      <!-- detector contexts -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"DetectAll\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Attribute\" context=\"#stay\" String=\"attributes\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\";=\"/>\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"-\" char1=\"&gt;\"/>\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <RegExpr attribute=\"Identifier\" context=\"#stay\" String=\"\\b\\w+\\b\"/>\n        <IncludeRules context=\"DetectComments\"/>\n        <DetectChar attribute=\"Symbol\" context=\"RegionCurly\" char=\"{\" beginRegion=\"curly\"/>\n        <DetectChar attribute=\"Symbol\" context=\"RegionSquare\" char=\"[\" beginRegion=\"square\"/>\n        <DetectChar attribute=\"Symbol\" context=\"RegionParen\" char=\"(\" beginRegion=\"paren\"/>\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\")]}\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"DetectComments\">\n        <Detect2Chars attribute=\"Comment\" context=\"CommentSL\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"CommentML\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n      </context>\n\n      <!-- region contexts -->\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"RegionCurly\">\n        <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"}\" endRegion=\"curly\"/>\n        <IncludeRules context=\"DetectAll\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"RegionSquare\">\n        <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"]\" endRegion=\"square\"/>\n        <IncludeRules context=\"DetectAll\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"RegionParen\">\n        <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\" endRegion=\"paren\"/>\n        <IncludeRules context=\"DetectAll\"/>\n      </context>\n\n      <!-- other contexts -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <Detect2Chars attribute=\"String Char\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <Detect2Chars attribute=\"String Char\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentSL\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"CommentML\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Attribute\"    defStyleNum=\"dsAttribute\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Number\"       defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Identifier\"   defStyleNum=\"dsVariable\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Error\"        defStyleNum=\"dsError\"/>\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n\n    <keywords casesensitive=\"1\"/>\n\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/doxyfile.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n    This file is part of the KDE KSyntaxHighlighting framework.\n\n    Copyright 2016-2017 Ernst Maurer <ernst.maurer@gmail.com>\n\n    Permission to use, copy, modify, and distribute this software\n    and its documentation for any purpose and without fee is hereby\n    granted, provided that the above copyright notice appear in all\n    copies and that both that the copyright notice and this\n    permission notice and warranty disclaimer appear in supporting\n    documentation, and that the name of the author not be used in\n    advertising or publicity pertaining to distribution of the\n    software without specific, written prior permission.\n\n    The author disclaim all warranties with regard to this\n    software, including all implied warranties of merchantability\n    and fitness.  In no event shall the author be liable for any\n    special, indirect or consequential damages or any damages\n    whatsoever resulting from loss of use, data or profits, whether\n    in an action of contract, negligence or other tortious action,\n    arising out of or in connection with the use or performance of\n    this software.\n -->\n<language name=\"Doxyfile\"\n          section=\"Configuration\"\n          extensions=\"Doxyfile;Doxyfile.*\"\n          mimetype=\"\"\n          version=\"2\"\n          kateversion=\"5.0\"\n          author=\"Ernst Maurer (ernst.maurer@gmail.com)\"\n          license=\"MIT\">\n\n    <highlighting>\n        <list name=\"keywords\">\n            <item>ABBREVIATE_BRIEF</item>\n            <item>ALIASES</item>\n            <item>ALLEXTERNALS</item>\n            <item>ALLOW_UNICODE_NAMES</item>\n            <item>ALPHABETICAL_INDEX</item>\n            <item>ALWAYS_DETAILED_SEC</item>\n            <item>AUTOLINK_SUPPORT</item>\n            <item>BINARY_TOC</item>\n            <item>BRIEF_MEMBER_DESC</item>\n            <item>BUILTIN_STL_SUPPORT</item>\n            <item>CALLER_GRAPH</item>\n            <item>CALL_GRAPH</item>\n            <item>CASE_SENSE_NAMES</item>\n            <item>CHM_FILE</item>\n            <item>CHM_INDEX_ENCODING</item>\n            <item>CITE_BIB_FILES</item>\n            <item>CLANG_ASSISTED_PARSING</item>\n            <item>CLANG_OPTIONS</item>\n            <item>CLASS_DIAGRAMS</item>\n            <item>CLASS_GRAPH</item>\n            <item>COLLABORATION_GRAPH</item>\n            <item>COLS_IN_ALPHA_INDEX</item>\n            <item>COMPACT_LATEX</item>\n            <item>COMPACT_RTF</item>\n            <item>CPP_CLI_SUPPORT</item>\n            <item>CREATE_SUBDIRS</item>\n            <item>DIAFILE_DIRS</item>\n            <item>DIA_PATH</item>\n            <item>DIRECTORY_GRAPH</item>\n            <item>DISABLE_INDEX</item>\n            <item>DISTRIBUTE_GROUP_DOC</item>\n            <item>DOCBOOK_OUTPUT</item>\n            <item>DOCBOOK_PROGRAMLISTING</item>\n            <item>DOCSET_BUNDLE_ID</item>\n            <item>DOCSET_FEEDNAME</item>\n            <item>DOCSET_PUBLISHER_ID</item>\n            <item>DOCSET_PUBLISHER_NAME</item>\n            <item>DOTFILE_DIRS</item>\n            <item>DOT_CLEANUP</item>\n            <item>DOT_FONTNAME</item>\n            <item>DOT_FONTPATH</item>\n            <item>DOT_FONTSIZE</item>\n            <item>DOT_GRAPH_MAX_NODES</item>\n            <item>DOT_IMAGE_FORMAT</item>\n            <item>DOT_MULTI_TARGETS</item>\n            <item>DOT_NUM_THREADS</item>\n            <item>DOT_PATH</item>\n            <item>DOT_TRANSPARENT</item>\n            <item>DOXYFILE_ENCODING</item>\n            <item>ECLIPSE_DOC_ID</item>\n            <item>ENABLED_SECTIONS</item>\n            <item>ENABLE_PREPROCESSING</item>\n            <item>ENUM_VALUES_PER_LINE</item>\n            <item>EXAMPLE_PATH</item>\n            <item>EXAMPLE_PATTERNS</item>\n            <item>EXAMPLE_RECURSIVE</item>\n            <item>EXCLUDE</item>\n            <item>EXCLUDE_PATTERNS</item>\n            <item>EXCLUDE_SYMBOLS</item>\n            <item>EXCLUDE_SYMLINKS</item>\n            <item>EXPAND_AS_DEFINED</item>\n            <item>EXPAND_ONLY_PREDEF</item>\n            <item>EXTENSION_MAPPING</item>\n            <item>EXTERNAL_GROUPS</item>\n            <item>EXTERNAL_PAGES</item>\n            <item>EXTERNAL_SEARCH</item>\n            <item>EXTERNAL_SEARCH_ID</item>\n            <item>EXTRACT_ALL</item>\n            <item>EXTRACT_ANON_NSPACES</item>\n            <item>EXTRACT_LOCAL_CLASSES</item>\n            <item>EXTRACT_LOCAL_METHODS</item>\n            <item>EXTRACT_PACKAGE</item>\n            <item>EXTRACT_PRIVATE</item>\n            <item>EXTRACT_STATIC</item>\n            <item>EXTRA_PACKAGES</item>\n            <item>EXTRA_SEARCH_MAPPINGS</item>\n            <item>EXT_LINKS_IN_WINDOW</item>\n            <item>FILE_PATTERNS</item>\n            <item>FILE_VERSION_FILTER</item>\n            <item>FILTER_PATTERNS</item>\n            <item>FILTER_SOURCE_FILES</item>\n            <item>FILTER_SOURCE_PATTERNS</item>\n            <item>FORCE_LOCAL_INCLUDES</item>\n            <item>FORMULA_FONTSIZE</item>\n            <item>FORMULA_TRANSPARENT</item>\n            <item>FULL_PATH_NAMES</item>\n            <item>GENERATE_AUTOGEN_DEF</item>\n            <item>GENERATE_BUGLIST</item>\n            <item>GENERATE_CHI</item>\n            <item>GENERATE_DEPRECATEDLIST</item>\n            <item>GENERATE_DOCBOOK</item>\n            <item>GENERATE_DOCSET</item>\n            <item>GENERATE_ECLIPSEHELP</item>\n            <item>GENERATE_HTML</item>\n            <item>GENERATE_HTMLHELP</item>\n            <item>GENERATE_LATEX</item>\n            <item>GENERATE_LEGEND</item>\n            <item>GENERATE_MAN</item>\n            <item>GENERATE_PERLMOD</item>\n            <item>GENERATE_QHP</item>\n            <item>GENERATE_RTF</item>\n            <item>GENERATE_TAGFILE</item>\n            <item>GENERATE_TESTLIST</item>\n            <item>GENERATE_TODOLIST</item>\n            <item>GENERATE_TREEVIEW</item>\n            <item>GENERATE_XML</item>\n            <item>GRAPHICAL_HIERARCHY</item>\n            <item>GROUP_GRAPHS</item>\n            <item>GROUP_NESTED_COMPOUNDS</item>\n            <item>HAVE_DOT</item>\n            <item>HHC_LOCATION</item>\n            <item>HIDE_COMPOUND_REFERENCE</item>\n            <item>HIDE_FRIEND_COMPOUNDS</item>\n            <item>HIDE_IN_BODY_DOCS</item>\n            <item>HIDE_SCOPE_NAMES</item>\n            <item>HIDE_UNDOC_CLASSES</item>\n            <item>HIDE_UNDOC_MEMBERS</item>\n            <item>HIDE_UNDOC_RELATIONS</item>\n            <item>HTML_COLORSTYLE_GAMMA</item>\n            <item>HTML_COLORSTYLE_HUE</item>\n            <item>HTML_COLORSTYLE_SAT</item>\n            <item>HTML_DYNAMIC_SECTIONS</item>\n            <item>HTML_EXTRA_FILES</item>\n            <item>HTML_EXTRA_STYLESHEET</item>\n            <item>HTML_FILE_EXTENSION</item>\n            <item>HTML_FOOTER</item>\n            <item>HTML_HEADER</item>\n            <item>HTML_INDEX_NUM_ENTRIES</item>\n            <item>HTML_OUTPUT</item>\n            <item>HTML_STYLESHEET</item>\n            <item>HTML_TIMESTAMP</item>\n            <item>IDL_PROPERTY_SUPPORT</item>\n            <item>IGNORE_PREFIX</item>\n            <item>IMAGE_PATH</item>\n            <item>INCLUDED_BY_GRAPH</item>\n            <item>INCLUDE_FILE_PATTERNS</item>\n            <item>INCLUDE_GRAPH</item>\n            <item>INCLUDE_PATH</item>\n            <item>INHERIT_DOCS</item>\n            <item>INLINE_GROUPED_CLASSES</item>\n            <item>INLINE_INFO</item>\n            <item>INLINE_INHERITED_MEMB</item>\n            <item>INLINE_SIMPLE_STRUCTS</item>\n            <item>INLINE_SOURCES</item>\n            <item>INPUT</item>\n            <item>INPUT_ENCODING</item>\n            <item>INPUT_FILTER</item>\n            <item>INTERACTIVE_SVG</item>\n            <item>INTERNAL_DOCS</item>\n            <item>JAVADOC_AUTOBRIEF</item>\n            <item>LATEX_BATCHMODE</item>\n            <item>LATEX_BIB_STYLE</item>\n            <item>LATEX_CMD_NAME</item>\n            <item>LATEX_EXTRA_FILES</item>\n            <item>LATEX_EXTRA_STYLESHEET</item>\n            <item>LATEX_FOOTER</item>\n            <item>LATEX_HEADER</item>\n            <item>LATEX_HIDE_INDICES</item>\n            <item>LATEX_OUTPUT</item>\n            <item>LATEX_SOURCE_CODE</item>\n            <item>LATEX_TIMESTAMP</item>\n            <item>LAYOUT_FILE</item>\n            <item>LOOKUP_CACHE_SIZE</item>\n            <item>MACRO_EXPANSION</item>\n            <item>MAKEINDEX_CMD_NAME</item>\n            <item>MAN_EXTENSION</item>\n            <item>MAN_LINKS</item>\n            <item>MAN_OUTPUT</item>\n            <item>MAN_SUBDIR</item>\n            <item>MARKDOWN_SUPPORT</item>\n            <item>MATHJAX_CODEFILE</item>\n            <item>MATHJAX_EXTENSIONS</item>\n            <item>MATHJAX_FORMAT</item>\n            <item>MATHJAX_RELPATH</item>\n            <item>MAX_DOT_GRAPH_DEPTH</item>\n            <item>MAX_INITIALIZER_LINES</item>\n            <item>MSCFILE_DIRS</item>\n            <item>MSCGEN_PATH</item>\n            <item>MULTILINE_CPP_IS_BRIEF</item>\n            <item>OPTIMIZE_FOR_FORTRAN</item>\n            <item>OPTIMIZE_OUTPUT_FOR_C</item>\n            <item>OPTIMIZE_OUTPUT_JAVA</item>\n            <item>OPTIMIZE_OUTPUT_VHDL</item>\n            <item>OUTPUT_DIRECTORY</item>\n            <item>OUTPUT_LANGUAGE</item>\n            <item>PAPER_TYPE</item>\n            <item>PDF_HYPERLINKS</item>\n            <item>PERLMOD_LATEX</item>\n            <item>PERLMOD_MAKEVAR_PREFIX</item>\n            <item>PERLMOD_PRETTY</item>\n            <item>PERL_PATH</item>\n            <item>PLANTUML_INCLUDE_PATH</item>\n            <item>PLANTUML_JAR_PATH</item>\n            <item>PREDEFINED</item>\n            <item>PROJECT_BRIEF</item>\n            <item>PROJECT_LOGO</item>\n            <item>PROJECT_NAME</item>\n            <item>PROJECT_NUMBER</item>\n            <item>QCH_FILE</item>\n            <item>QHG_LOCATION</item>\n            <item>QHP_CUST_FILTER_ATTRS</item>\n            <item>QHP_CUST_FILTER_NAME</item>\n            <item>QHP_NAMESPACE</item>\n            <item>QHP_SECT_FILTER_ATTRS</item>\n            <item>QHP_VIRTUAL_FOLDER</item>\n            <item>QT_AUTOBRIEF</item>\n            <item>QUIET</item>\n            <item>RECURSIVE</item>\n            <item>REFERENCED_BY_RELATION</item>\n            <item>REFERENCES_LINK_SOURCE</item>\n            <item>REFERENCES_RELATION</item>\n            <item>REPEAT_BRIEF</item>\n            <item>RTF_EXTENSIONS_FILE</item>\n            <item>RTF_HYPERLINKS</item>\n            <item>RTF_OUTPUT</item>\n            <item>RTF_SOURCE_CODE</item>\n            <item>RTF_STYLESHEET_FILE</item>\n            <item>SEARCHDATA_FILE</item>\n            <item>SEARCHENGINE</item>\n            <item>SEARCHENGINE_URL</item>\n            <item>SEARCH_INCLUDES</item>\n            <item>SEPARATE_MEMBER_PAGES</item>\n            <item>SERVER_BASED_SEARCH</item>\n            <item>SHORT_NAMES</item>\n            <item>SHOW_FILES</item>\n            <item>SHOW_GROUPED_MEMB_INC</item>\n            <item>SHOW_INCLUDE_FILES</item>\n            <item>SHOW_NAMESPACES</item>\n            <item>SHOW_USED_FILES</item>\n            <item>SIP_SUPPORT</item>\n            <item>SKIP_FUNCTION_MACROS</item>\n            <item>SORT_BRIEF_DOCS</item>\n            <item>SORT_BY_SCOPE_NAME</item>\n            <item>SORT_GROUP_NAMES</item>\n            <item>SORT_MEMBERS_CTORS_1ST</item>\n            <item>SORT_MEMBER_DOCS</item>\n            <item>SOURCE_BROWSER</item>\n            <item>SOURCE_TOOLTIPS</item>\n            <item>STRICT_PROTO_MATCHING</item>\n            <item>STRIP_CODE_COMMENTS</item>\n            <item>STRIP_FROM_INC_PATH</item>\n            <item>STRIP_FROM_PATH</item>\n            <item>SUBGROUPING</item>\n            <item>TAB_SIZE</item>\n            <item>TAGFILES</item>\n            <item>TCL_SUBST</item>\n            <item>TEMPLATE_RELATIONS</item>\n            <item>TOC_EXPAND</item>\n            <item>TREEVIEW_WIDTH</item>\n            <item>TYPEDEF_HIDES_STRUCT</item>\n            <item>UML_LIMIT_NUM_FIELDS</item>\n            <item>UML_LOOK</item>\n            <item>USE_HTAGS</item>\n            <item>USE_MATHJAX</item>\n            <item>USE_MDFILE_AS_MAINPAGE</item>\n            <item>USE_PDFLATEX</item>\n            <item>VERBATIM_HEADERS</item>\n            <item>WARNINGS</item>\n            <item>WARN_AS_ERROR</item>\n            <item>WARN_FORMAT</item>\n            <item>WARN_IF_DOC_ERROR</item>\n            <item>WARN_IF_UNDOCUMENTED</item>\n            <item>WARN_LOGFILE</item>\n            <item>WARN_NO_PARAMDOC</item>\n            <item>XML_OUTPUT</item>\n            <item>XML_PROGRAMLISTING</item>\n        </list>\n\n        <contexts>\n            <context name=\"doxy\" attribute=\"Error\" lineEndContext=\"#stay\">\n                <keyword attribute=\"Keyword\" String=\"keywords\" context=\"Assignment\"/>\n                <DetectChar char=\"#\" context=\"Comment\" firstNonSpace=\"true\" />\n            </context>\n\n            <context name=\"Assignment\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Assignment\" context=\"Value\" char=\"=\" />\n            </context>\n            <context name=\"Value\" attribute=\"UntypedValue\" lineEndContext=\"#pop\" >\n                <WordDetect attribute=\"ValueYes\" insensitive=\"true\" String=\"YES\" />\n                <WordDetect attribute=\"ValueNo\" insensitive=\"true\" String=\"NO\" />\n                <RegExpr attribute=\"Parameter\" String=\"@.*@\" />\n                <DetectChar char=\"#\" context=\"Comment\" />\n                <LineContinue />\n            </context>\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <keyword attribute=\"KeywordInComment\" String=\"keywords\" context=\"#stay\"/>\n                <DetectSpaces />\n                <DetectIdentifier />\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"0\" />\n            <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"0\" />\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Assignment\" defStyleNum=\"dsOperator\" spellChecking=\"0\" />\n            <itemData name=\"ValueYes\" defStyleNum=\"dsOthers\" spellChecking=\"0\" />\n            <itemData name=\"ValueNo\" defStyleNum=\"dsString\" spellChecking=\"0\" />\n            <itemData name=\"UntypedValue\" defStyleNum=\"dsString\" spellChecking=\"0\" />\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"0\" />\n            <itemData name=\"KeywordInComment\" defStyleNum=\"dsCommentVar\" spellChecking=\"0\" />\n            <itemData name=\"Parameter\" defStyleNum=\"dsOthers\" spellChecking=\"0\" />\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\" />\n            <comment name=\"singleLine\" start=\";\" />\n        </comments>\n        <keywords casesensitive=\"0\" />\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/doxygen.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY wordsep \"([][,?;()]|\\.$|\\.?\\s)\">     <!-- things that end a TagWord -->\n]>\n<language name=\"Doxygen\"\n          version=\"6\"\n          kateversion=\"5.0\"\n          section=\"Markup\"\n          extensions=\"*.dox;*.doxygen\"\n          mimetype=\"text/x-doxygen\"\n          author=\"Dominik Haumann (dhaumann@kde.org)\"\n          license=\"MIT\"\n          priority=\"9\">\n  <highlighting>\n    <!-- NOTE: all tags may begin with a \\ or @ char\n         so if you add/change tags you have to do it twice -->\n    <!-- NOTE: Tags @code/@endcode, @dot/@enddot, @vermatim/@endverbatim, @msc/@endmsc, @f[/@f]\n         do not present in keywords due separate handle rules...\n    -->\n    <list name=\"TagOnly\">\n      <item>\\arg</item>              <item>@arg</item>\n      <item>\\author</item>           <item>@author</item>\n      <item>\\authors</item>          <item>@authors</item>\n      <item>\\brief</item>            <item>@brief</item>\n      <item>\\callgraph</item>        <item>@callgraph</item>\n      <item>\\callergraph</item>      <item>@callergraph</item>\n      <item>\\date</item>             <item>@date</item>\n      <item>\\deprecated</item>       <item>@deprecated</item>\n      <item>\\details</item>          <item>@details</item>\n      <item>\\docbookonly</item>      <item>@docbookonly</item>\n      <item>\\else</item>             <item>@else</item>\n      <item>\\endcond</item>          <item>@endcond</item>\n      <item>\\enddocbookonly</item>   <item>@enddocbookonly</item>\n      <item>\\endhtmlonly</item>      <item>@endhtmlonly</item>\n      <item>\\endif</item>            <item>@endif</item>\n      <item>\\endinternal</item>      <item>@endinternal</item>\n      <item>\\endlatexonly</item>     <item>@endlatexonly</item>\n      <item>\\endlink</item>          <item>@endlink</item>\n      <item>\\endmanonly</item>       <item>@endmanonly</item>\n      <item>\\endparblock</item>      <item>@endparblock</item>\n      <item>\\endrtfonly</item>       <item>@endrtfonly</item>\n      <item>\\endsecreflist</item>    <item>@endsecreflist</item>\n      <item>\\endxmlonly</item>       <item>@endxmlonly</item>\n      <item>\\f[</item>               <item>@f[</item>\n      <item>\\f]</item>               <item>@f]</item>\n      <item>\\f$</item>               <item>@f$</item>\n      <!-- TODO Add @f{environment}{ and @f} -->\n      <item>\\hideinitializer</item>  <item>@hideinitializer</item>\n      <item>\\htmlonly</item>         <item>@htmlonly</item>\n      <!-- TODO @internal is a candidate to be handled separately, cuz may introduce folding region -->\n      <item>\\internal</item>         <item>@internal</item>\n      <item>\\invariant</item>        <item>@invariant</item>\n      <item>\\latexonly</item>        <item>@latexonly</item>\n      <item>\\li</item>               <item>@li</item>\n      <item>\\manonly</item>          <item>@manonly</item>\n      <item>\\n</item>                <item>@n</item>\n      <item>\\nosubgrouping</item>    <item>@nosubgrouping</item>\n      <item>\\only</item>             <item>@only</item>\n      <item>\\parblock</item>         <item>@parblock</item>\n      <item>\\post</item>             <item>@post</item>\n      <item>\\pre</item>              <item>@pre</item>\n      <item>\\private</item>          <item>@pivate</item>\n      <item>\\privatesection</item>   <item>@pivatesection</item>\n      <item>\\protected</item>        <item>@protected</item>\n      <item>\\protectedsection</item> <item>@protectedsection</item>\n      <item>\\public</item>           <item>@public</item>\n      <item>\\publicsection</item>    <item>@publicsection</item>\n      <item>\\pure</item>             <item>@pure</item>\n      <item>\\remark</item>           <item>@remark</item>\n      <item>\\remarks</item>          <item>@remarks</item>\n      <item>\\return</item>           <item>@return</item>\n      <item>\\returns</item>          <item>@returns</item>\n      <item>\\result</item>           <item>@result</item>\n      <item>\\rtfonly</item>          <item>@rtfonly</item>\n      <item>\\sa</item>               <item>@sa</item>\n      <item>\\secreflist</item>       <item>@secreflist</item>\n      <item>\\see</item>              <item>@see</item>\n      <item>\\short</item>            <item>@short</item>\n      <item>\\showinitializer</item>  <item>@showinitializer</item>\n      <item>\\since</item>            <item>@since</item>\n      <item>\\static</item>           <item>@static</item>\n      <item>\\tableofcontents</item>  <item>@tableofcontents</item>\n      <item>\\test</item>             <item>@test</item>\n      <item>\\version</item>          <item>@version</item>\n      <item>\\xmlonly</item>          <item>@xmlonly</item>\n      <!-- TODO Introduce separate context for @~ ? -->\n      <item>\\#</item>                <item>@#</item>\n      <item>\\$</item>                <item>@$</item>\n      <item>\\%</item>                <item>@%</item>\n      <item>\\&amp;</item>            <item>@&amp;</item>\n      <item>\\&gt;</item>             <item>@&gt;</item>\n      <item>\\&lt;</item>             <item>@&lt;</item>\n      <item>\\&quot;</item>           <item>@&quot;</item>\n      <item>\\::</item>               <item>@::</item>\n      <item>\\@</item>                <item>@@</item>\n      <item>\\\\</item>                <item>@\\</item>\n      <item>\\~</item>                <item>@~</item>\n      <item>\\.</item>                <item>@.</item>\n      <item>\\--</item>               <item>@--</item>\n      <item>\\---</item>              <item>@---</item>\n    </list>\n\n    <list name=\"TagWord\">\n      <item>\\a</item>                <item>@a</item>\n      <item>\\anchor</item>           <item>@anchor</item>\n      <item>\\b</item>                <item>@b</item>\n      <item>\\c</item>                <item>@c</item>\n      <item>\\cite</item>             <item>@cite</item>\n      <item>\\cond</item>             <item>@cond</item>\n      <item>\\copybrief</item>        <item>@copybrief</item>\n      <item>\\copydetails</item>      <item>@copydetails</item>\n      <item>\\copydoc</item>          <item>@copydoc</item>\n      <item>\\def</item>              <item>@def</item>\n      <item>\\dir</item>              <item>@dir</item>\n      <item>\\dontinclude</item>      <item>@dontinclude</item>\n      <item>\\e</item>                <item>@e</item>\n      <item>\\elseif</item>           <item>@elseif</item>\n      <item>\\em</item>               <item>@em</item>\n      <item>\\enum</item>             <item>@enum</item>\n      <item>\\example</item>          <item>@example</item>\n      <item>\\exception</item>        <item>@exception</item>\n      <item>\\exceptions</item>       <item>@exceptions</item>\n      <item>\\extends</item>          <item>@extends</item>\n      <item>\\file</item>             <item>@file</item>\n      <item>\\htmlinclude</item>      <item>@htmlinclude</item>\n      <item>\\idlexcept</item>        <item>@idlexcept</item>\n      <item>\\if</item>               <item>@if</item>\n      <item>\\ifnot</item>            <item>@ifnot</item>\n      <item>\\implements</item>       <item>@implements</item>\n      <item>\\include</item>          <item>@include</item>\n      <item>\\includelineno</item>    <item>@includelineno</item>\n      <item>\\latexinclude</item>     <item>@latexinclude</item>\n      <item>\\link</item>             <item>@link</item>\n      <item>\\memberof</item>         <item>@memberof</item>\n      <item>\\namespace</item>        <item>@namespace</item>\n      <item>\\p</item>                <item>@p</item>\n      <item>\\package</item>          <item>@package</item>\n      <item>\\property</item>         <item>@property</item>\n      <item>\\relatedalso</item>      <item>@relatedalso</item>\n      <item>\\relatesalso</item>      <item>@relatesalso</item>\n      <item>\\related</item>          <item>@related</item>\n      <item>\\relates</item>          <item>@relates</item>\n      <item>\\retval</item>           <item>@retval</item>\n      <item>\\throw</item>            <item>@throw</item>\n      <item>\\throws</item>           <item>@throws</item>\n      <item>\\verbinclude</item>      <item>@verbinclude</item>\n      <item>\\version</item>          <item>@version</item>\n      <!-- TODO Introduce separate context for @xrefitem? -->\n      <item>\\xrefitem</item>         <item>@xrefitem</item>\n    </list>\n    <list name=\"TagParam\">\n      <item>\\param</item>            <item>@param</item>\n      <!-- TODO @tparam has no optional direction actually! -->\n      <item>\\tparam</item>           <item>@tparam</item>\n    </list>\n    <!-- TODO Better (separate?) highlighting for @image required -->\n    <list name=\"TagWordWord\">\n      <item>\\image</item>            <item>@image</item>\n    </list>\n      <!-- TODO @union, @struct, @protocol, @interface, @class, @category\n           actually takes 3 params, 1 mandatory and 2 optional\n        -->\n      <!-- TODO @headerfile actually takes 2 params, where last one is optional -->\n    <list name=\"TagWordString\">\n      <item>\\addtogroup</item>       <item>@addtogroup</item>\n      <item>\\category</item>         <item>@category</item>\n      <item>\\class</item>            <item>@class</item>\n      <item>\\diafile</item>          <item>@diafile</item>\n      <item>\\dotfile</item>          <item>@dotfile</item>\n      <item>\\defgroup</item>         <item>@defgroup</item>\n      <item>\\interface</item>        <item>@interface</item>\n      <item>\\headerfile</item>       <item>@headerfile</item>\n      <item>\\mscfile</item>          <item>@mscfile</item>\n      <item>\\page</item>             <item>@page</item>\n      <item>\\paragraph</item>        <item>@paragraph</item>\n      <item>\\protocol</item>         <item>@prtocol</item>\n      <item>\\ref</item>              <item>@ref</item>\n      <item>\\section</item>          <item>@section</item>\n      <item>\\snippet</item>          <item>@snippet</item>\n      <item>\\struct</item>           <item>@struct</item>\n      <item>\\subpage</item>          <item>@subpage</item>\n      <item>\\subsection</item>       <item>@subsection</item>\n      <item>\\subsubsection</item>    <item>@subsubsection</item>\n      <item>\\union</item>            <item>@union</item>\n      <item>\\weakgroup</item>        <item>@weakgroup</item>\n    </list>\n    <list name=\"TagString\">\n      <item>\\addindex</item>         <item>@addindex</item>\n      <item>\\copyright</item>        <item>@copyright</item>\n      <item>\\fn</item>               <item>@fn</item>\n      <item>\\ingroup</item>          <item>@ingroup</item>\n      <item>\\line</item>             <item>@line</item>\n      <item>\\mainpage</item>         <item>@mainpage</item>\n      <item>\\name</item>             <item>@name</item>\n      <item>\\overload</item>         <item>@overload</item>\n      <item>\\par</item>              <item>@par</item>\n      <item>\\skip</item>             <item>@skip</item>\n      <item>\\skipline</item>         <item>@skipline</item>\n      <item>\\typedef</item>          <item>@typedef</item>\n      <item>\\until</item>            <item>@until</item>\n      <item>\\var</item>              <item>@var</item>\n      <item>\\vhdlflow</item>         <item>@vhdlflow</item>\n    </list>\n    <list name=\"Note\">\n      <item>\\note</item>             <item>@note</item>\n    </list>\n    <list name=\"Warning\">\n      <item>\\warning</item>          <item>@warning</item>\n    </list>\n    <list name=\"Attention\">\n      <item>\\attention</item>        <item>@attention</item>\n      <item>\\bug</item>              <item>@bug</item>\n    </list>\n    <list name=\"Todo\">\n      <item>\\todo</item>             <item>@todo</item>\n    </list>\n\n    <contexts>\n    <!--\n      Different types of recognized command formats:\n      (w/ params specified according doxygen manual (http://www.stack.nl/~dimitri/doxygen/commands.html))\n\n      @tag                       : TagOnly\n      @tag <word>                : TagWord\n      @tag (rest_of_line)        : TagString\n      @tag {paragraph}           : TagOnly\n      @tag <word> <word>         : TagWordWord\n      @tag <word> (rest_of_line) : TagWordString\n\n      TODO Not all commands are handled properly nowadays :( Need few more contexts...\n    -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr attribute=\"Comment\" context=\"LineComment\" String=\"//(!|(/(?=[^/]|$)))&lt;?\" />\n        <RegExpr attribute=\"Comment\" context=\"BlockComment\" String=\"/\\*(\\*[^*/]|!|[*!]&lt;|\\*$)\" beginRegion=\"BlockComment\" />\n        <RegExpr attribute=\"Region\" context=\"#stay\" String=\"//\\s*@\\{\\s*$\" beginRegion=\"MemberGroup\" />\n        <RegExpr attribute=\"Region\" context=\"#stay\" String=\"//\\s*@\\}\\s*$\"   endRegion=\"MemberGroup\" />\n        <RegExpr attribute=\"Region\" context=\"#stay\" String=\"/\\*\\s*@\\{\\s*\\*/\" beginRegion=\"MemberGroup\" />\n        <RegExpr attribute=\"Region\" context=\"#stay\" String=\"/\\*\\s*@\\}\\s*\\*/\"   endRegion=\"MemberGroup\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"LineComment\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\" />\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"SL_DetectEnv\" />\n        <keyword attribute=\"Tags\" context=\"#stay\" String=\"TagOnly\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagWord\" String=\"TagWord\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagParam\" String=\"TagParam\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagWordWord\" String=\"TagWordWord\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagString\" String=\"TagString\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagWordString\" String=\"TagWordString\" />\n        <RegExpr attribute=\"Custom Tags\" context=\"#stay\" String=\"[@\\\\][^@\\\\ \\t]+\" />\n        <DetectIdentifier />\n        <StringDetect attribute=\"HTML Comment\" context=\"SL_htmlcomment\" String=\"&lt;!--\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"SL_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"BlockComment\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"BlockComment\" />\n        <IncludeRules context=\"##Alerts\" />\n        <Detect2Chars attribute=\"Region\" context=\"#stay\" char=\"@\" char1=\"{\" beginRegion=\"Group\" />\n        <Detect2Chars attribute=\"Region\" context=\"#stay\" char=\"@\" char1=\"}\" endRegion=\"Group\" />\n        <IncludeRules context=\"SL_DetectEnv\" />\n        <keyword attribute=\"Tags\" context=\"#stay\" String=\"TagOnly\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagWord\" String=\"TagWord\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagParam\" String=\"TagParam\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagWordWord\" String=\"TagWordWord\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagString\" String=\"TagString\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagWordString\" String=\"TagWordString\" />\n        <RegExpr attribute=\"Custom Tags\" context=\"#stay\" String=\"[@\\\\]([^@\\\\ \\t\\*]|\\*(?!/))+\" />\n        <DetectIdentifier />\n        <RegExpr attribute=\"Tags\" context=\"#stay\" String=\"\\\\(&lt;|&gt;)\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"ML_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"ML_htmlcomment\" String=\"&lt;!--\" />\n      </context>\n\n      <!-- NOTE: all contexts beginning with ML_ are for multiline comments\n                 The following contexts contain a Detect2Chars that looks for a */ sequence\n                 to end multiline comments. Singleline comments do not have this limitation -\n                 that's why all contexts are copy&pasted and the line <Detect2Chars ... */> is removed.\n                 <IncludeRules context=\"acontext\"> could be used instead but it would make context switching\n                 much more complex and very hard to understand! (But use IncludeRules where the rules don't\n                 refer to another SL_*/ML_* context, to help maintainability.)\n      -->\n      <!-- tag contexts -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"ML_TagWord\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <IncludeRules context=\"SL_TagWord\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"ML_TagParam\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <DetectSpaces />\n        <StringDetect attribute=\"Tags\" context=\"ML_Tag2ndWord\" String=\"[in]\" />\n        <StringDetect attribute=\"Tags\" context=\"ML_Tag2ndWord\" String=\"[out]\" />\n        <StringDetect attribute=\"Tags\" context=\"ML_Tag2ndWord\" String=\"[in,out]\" />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"ML_TagWordWord\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"ML_Tag2ndWord\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <!-- TODO for kate 2.x, convert references to \"#pop!ML_TagWord\" -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop#pop\" name=\"ML_Tag2ndWord\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <IncludeRules context=\"SL_Tag2ndWord\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"ML_TagString\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"ML_htmlcomment\" String=\"&lt;!--\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"ML_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n        <RegExpr attribute=\"Description\" context=\"#stay\" String=\".\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"ML_TagWordString\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <IncludeRules context=\"SL_TagWordString\" />\n      </context>\n\n      <!-- html contexts -->\n      <context name=\"ML_htmltag\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <Detect2Chars attribute=\"HTML Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n        <DetectChar attribute=\"HTML Tag\" context=\"#pop\" char=\"&gt;\" />\n        <RegExpr attribute=\"Identifier\" context=\"ML_identifiers\" String=\"\\s*=\\s*\" />\n      </context>\n      <context name=\"ML_htmlcomment\" attribute=\"HTML Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <IncludeRules context=\"##Alerts\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"#pop\" String=\"--&gt;\" />\n      </context>\n      <context name=\"ML_identifiers\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Identifier\" context=\"#pop\" String=\"\\s*#?[a-zA-Z0-9]*\" />\n        <DetectChar attribute=\"Types\" context=\"ML_types1\" char=\"'\" />\n        <DetectChar attribute=\"Types\" context=\"ML_types2\" char=\"&quot;\" />\n      </context>\n      <context name=\"ML_types1\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"'\" />\n      </context>\n      <context name=\"ML_types2\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"&quot;\" />\n      </context>\n\n      <!-- NOTE: all contexts beginning with SL_ are for singleline comments -->\n      <!-- tag contexts -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagWord\">\n        <DetectSpaces />\n        <keyword attribute=\"Tags\" context=\"#pop\" String=\"TagWord\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagParam\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Tags\" context=\"SL_Tag2ndWord\" String=\"[in]\" />\n        <StringDetect attribute=\"Tags\" context=\"SL_Tag2ndWord\" String=\"[out]\" />\n        <StringDetect attribute=\"Tags\" context=\"SL_Tag2ndWord\" String=\"[in,out]\" />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagWordWord\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"SL_Tag2ndWord\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <!-- TODO for kate 2.x, convert references to \"#pop!SL_TagWord\" -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop#pop\" name=\"SL_Tag2ndWord\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"#pop#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagString\">\n        <DetectSpaces />\n        <StringDetect attribute=\"HTML Comment\" context=\"SL_htmlcomment\" String=\"&lt;!--\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"SL_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n        <RegExpr attribute=\"Description\" context=\"#stay\" String=\".\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagWordString\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n\n      <!-- html contexts -->\n      <context name=\"SL_htmltag\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"HTML Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n        <DetectChar attribute=\"HTML Tag\" context=\"#pop\" char=\"&gt;\" />\n        <RegExpr attribute=\"Identifier\" context=\"SL_identifiers\" String=\"\\s*=\\s*\" />\n      </context>\n      <context name=\"SL_htmlcomment\" attribute=\"HTML Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"#pop\" String=\"--&gt;\" />\n      </context>\n      <context name=\"SL_identifiers\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Identifier\" context=\"#pop\" String=\"\\s*#?[a-zA-Z0-9]*\" />\n        <DetectChar attribute=\"Types\" context=\"SL_types1\" char=\"'\" />\n        <DetectChar attribute=\"Types\" context=\"SL_types2\" char=\"&quot;\" />\n      </context>\n      <context name=\"SL_types1\" attribute=\"Types\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"'\" />\n      </context>\n      <context name=\"SL_types2\" attribute=\"Types\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"&quot;\" />\n      </context>\n\n      <context attribute=\"Comment\" name=\"SL_DetectEnv\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Tags\" context=\"Code\" String=\"[@\\\\]code\\b\" beginRegion=\"Code\" />\n        <RegExpr attribute=\"Tags\" context=\"Verbatim\" String=\"[@\\\\]verbatim\\b\" beginRegion=\"Verbatim\" />\n        <RegExpr attribute=\"Tags\" context=\"Formula\" String=\"[@\\\\]f\\[\" beginRegion=\"Formula\" />\n        <RegExpr attribute=\"Tags\" context=\"Msc\" String=\"[@\\\\]msc\\b\" beginRegion=\"Msc\" />\n        <RegExpr attribute=\"Tags\" context=\"Dot\" String=\"[@\\\\]dot\\b\" beginRegion=\"Dot\" />\n        <keyword attribute=\"Note\" context=\"#stay\" String=\"Note\" />\n        <keyword attribute=\"Warning\" context=\"#stay\" String=\"Warning\" />\n        <keyword attribute=\"Attention\" context=\"#stay\" String=\"Attention\" />\n        <keyword attribute=\"Todo\" context=\"#stay\" String=\"Todo\" />\n        <RegExpr attribute=\"Entities\" context=\"#stay\" String=\"&amp;[A-Za-z]+&#59;\" />\n      </context>\n\n      <context attribute=\"Comment\" name=\"SL_DetectComment\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop#pop\" char=\"*\" char1=\"/\" endRegion=\"BlockComment\" />\n        <DetectChar attribute=\"Comment\" context=\"#stay\" char=\"*\" />\n        <StringDetect attribute=\"Comment\" context=\"#stay\" String=\"///\" />\n      </context>\n\n      <context attribute=\"Code\" lineEndContext=\"#stay\" name=\"Code\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]endcode\\b\" endRegion=\"Code\" />\n      </context>\n\n      <context attribute=\"Verbatim\" lineEndContext=\"#stay\" name=\"Verbatim\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]endverbatim\\b\" endRegion=\"Verbatim\" />\n      </context>\n\n      <context attribute=\"Formulas\" lineEndContext=\"#stay\" name=\"Formula\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]f\\]\" endRegion=\"Formula\" />\n        <!-- TODO: How to force LaTeX math context here?? -->\n        <!-- <IncludeRules context=\"##LaTeX\" /> -->\n      </context>\n\n      <context attribute=\"Message Sequence Chart\" lineEndContext=\"#stay\" name=\"Msc\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]endmsc\\b\" endRegion=\"Msc\" />\n      </context>\n\n      <context attribute=\"Dot Graph\" lineEndContext=\"#stay\" name=\"Dot\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]enddot\\b\" endRegion=\"Dot\" />\n      </context>\n\n  </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" />\n      <itemData name=\"Tags\"         defStyleNum=\"dsAnnotation\" bold=\"1\" />\n      <itemData name=\"Custom Tags\"  defStyleNum=\"dsAnnotation\" />\n      <itemData name=\"Word\"         defStyleNum=\"dsCommentVar\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"HTML Tag\"     defStyleNum=\"dsKeyword\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Entities\"     defStyleNum=\"dsOthers\" color=\"#4086C0\" bold=\"1\" italic=\"1\" />\n      <itemData name=\"Description\"  defStyleNum=\"dsDocumentation\" />\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\" />\n      <itemData name=\"Region\"       defStyleNum=\"dsRegionMarker\" />\n      <itemData name=\"Identifier\"   defStyleNum=\"dsOthers\" />\n      <itemData name=\"HTML Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Types\"        defStyleNum=\"dsDataType\" />\n      <itemData name=\"Code\"         defStyleNum=\"dsComment\" />\n      <itemData name=\"Dot Graph\"    defStyleNum=\"dsComment\" color=\"#00A000\" selColor=\"#ffffff\" italic=\"1\" />\n      <itemData name=\"Formulas\"     defStyleNum=\"dsComment\" color=\"#00A000\" selColor=\"#ffffff\" italic=\"1\" />\n      <itemData name=\"Message Sequence Chart\" defStyleNum=\"dsComment\" color=\"#00A000\" selColor=\"#ffffff\" italic=\"1\" />\n      <itemData name=\"Verbatim\"     defStyleNum=\"dsComment\" />\n      <itemData name=\"Note\"         defStyleNum=\"dsInformation\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Warning\"      defStyleNum=\"dsWarning\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Attention\"    defStyleNum=\"dsAnnotation\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Todo\"         defStyleNum=\"dsAnnotation\" bold=\"1\" italic=\"0\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" weakDeliminator=\"\\$~\" />\n  </general>\n</language>\n<!-- kate: indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/doxygenlua.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY wordsep \"([][,?;()]|\\.$|\\.?\\s)\">     <!-- things that end a TagWord -->\n]>\n<!--\nsed -E '\n  s/<Detect2Chars(.*)char=\"\\*\" char1=\"\\/\"(.*)/<StringDetect\\1String=\"]%1]\" dynamic=\"true\"\\2/\n  s/ (name=\"ML_|name=\"BlockComment\")/ dynamic=\"true\" \\1/\n' doxygen.xml > doxygenlua.xml\n\n+ edit\n- <language>\n- \"Normal Text\" context\n- grep '\\\\\\*' doxygenlua.xml\n-->\n<language name=\"DoxygenLua\"\n          version=\"6\"\n          kateversion=\"5.0\"\n          section=\"Markup\"\n          extensions=\"\"\n          mimetype=\"\"\n          author=\"Dominik Haumann (dhaumann@kde.org)\"\n          license=\"MIT\">\n  <highlighting>\n    <!-- NOTE: all tags may begin with a \\ or @ char\n         so if you add/change tags you have to do it twice -->\n    <!-- NOTE: Tags @code/@endcode, @dot/@enddot, @vermatim/@endverbatim, @msc/@endmsc, @f[/@f]\n         do not present in keywords due separate handle rules...\n    -->\n    <list name=\"TagOnly\">\n      <item>\\arg</item>              <item>@arg</item>\n      <item>\\author</item>           <item>@author</item>\n      <item>\\authors</item>          <item>@authors</item>\n      <item>\\brief</item>            <item>@brief</item>\n      <item>\\callgraph</item>        <item>@callgraph</item>\n      <item>\\callergraph</item>      <item>@callergraph</item>\n      <item>\\date</item>             <item>@date</item>\n      <item>\\deprecated</item>       <item>@deprecated</item>\n      <item>\\details</item>          <item>@details</item>\n      <item>\\docbookonly</item>      <item>@docbookonly</item>\n      <item>\\else</item>             <item>@else</item>\n      <item>\\endcond</item>          <item>@endcond</item>\n      <item>\\enddocbookonly</item>   <item>@enddocbookonly</item>\n      <item>\\endhtmlonly</item>      <item>@endhtmlonly</item>\n      <item>\\endif</item>            <item>@endif</item>\n      <item>\\endinternal</item>      <item>@endinternal</item>\n      <item>\\endlatexonly</item>     <item>@endlatexonly</item>\n      <item>\\endlink</item>          <item>@endlink</item>\n      <item>\\endmanonly</item>       <item>@endmanonly</item>\n      <item>\\endparblock</item>      <item>@endparblock</item>\n      <item>\\endrtfonly</item>       <item>@endrtfonly</item>\n      <item>\\endsecreflist</item>    <item>@endsecreflist</item>\n      <item>\\endxmlonly</item>       <item>@endxmlonly</item>\n      <item>\\f[</item>               <item>@f[</item>\n      <item>\\f]</item>               <item>@f]</item>\n      <item>\\f$</item>               <item>@f$</item>\n      <!-- TODO Add @f{environment}{ and @f} -->\n      <item>\\hideinitializer</item>  <item>@hideinitializer</item>\n      <item>\\htmlonly</item>         <item>@htmlonly</item>\n      <!-- TODO @internal is a candidate to be handled separately, cuz may introduce folding region -->\n      <item>\\internal</item>         <item>@internal</item>\n      <item>\\invariant</item>        <item>@invariant</item>\n      <item>\\latexonly</item>        <item>@latexonly</item>\n      <item>\\li</item>               <item>@li</item>\n      <item>\\manonly</item>          <item>@manonly</item>\n      <item>\\n</item>                <item>@n</item>\n      <item>\\nosubgrouping</item>    <item>@nosubgrouping</item>\n      <item>\\only</item>             <item>@only</item>\n      <item>\\parblock</item>         <item>@parblock</item>\n      <item>\\post</item>             <item>@post</item>\n      <item>\\pre</item>              <item>@pre</item>\n      <item>\\private</item>          <item>@pivate</item>\n      <item>\\privatesection</item>   <item>@pivatesection</item>\n      <item>\\protected</item>        <item>@protected</item>\n      <item>\\protectedsection</item> <item>@protectedsection</item>\n      <item>\\public</item>           <item>@public</item>\n      <item>\\publicsection</item>    <item>@publicsection</item>\n      <item>\\pure</item>             <item>@pure</item>\n      <item>\\remark</item>           <item>@remark</item>\n      <item>\\remarks</item>          <item>@remarks</item>\n      <item>\\return</item>           <item>@return</item>\n      <item>\\returns</item>          <item>@returns</item>\n      <item>\\result</item>           <item>@result</item>\n      <item>\\rtfonly</item>          <item>@rtfonly</item>\n      <item>\\sa</item>               <item>@sa</item>\n      <item>\\secreflist</item>       <item>@secreflist</item>\n      <item>\\see</item>              <item>@see</item>\n      <item>\\short</item>            <item>@short</item>\n      <item>\\showinitializer</item>  <item>@showinitializer</item>\n      <item>\\since</item>            <item>@since</item>\n      <item>\\static</item>           <item>@static</item>\n      <item>\\tableofcontents</item>  <item>@tableofcontents</item>\n      <item>\\test</item>             <item>@test</item>\n      <item>\\version</item>          <item>@version</item>\n      <item>\\xmlonly</item>          <item>@xmlonly</item>\n      <!-- TODO Introduce separate context for @~ ? -->\n      <item>\\#</item>                <item>@#</item>\n      <item>\\$</item>                <item>@$</item>\n      <item>\\%</item>                <item>@%</item>\n      <item>\\&amp;</item>            <item>@&amp;</item>\n      <item>\\&gt;</item>             <item>@&gt;</item>\n      <item>\\&lt;</item>             <item>@&lt;</item>\n      <item>\\&quot;</item>           <item>@&quot;</item>\n      <item>\\::</item>               <item>@::</item>\n      <item>\\@</item>                <item>@@</item>\n      <item>\\\\</item>                <item>@\\</item>\n      <item>\\~</item>                <item>@~</item>\n      <item>\\.</item>                <item>@.</item>\n      <item>\\--</item>               <item>@--</item>\n      <item>\\---</item>              <item>@---</item>\n    </list>\n\n    <list name=\"TagWord\">\n      <item>\\a</item>                <item>@a</item>\n      <item>\\anchor</item>           <item>@anchor</item>\n      <item>\\b</item>                <item>@b</item>\n      <item>\\c</item>                <item>@c</item>\n      <item>\\cite</item>             <item>@cite</item>\n      <item>\\cond</item>             <item>@cond</item>\n      <item>\\copybrief</item>        <item>@copybrief</item>\n      <item>\\copydetails</item>      <item>@copydetails</item>\n      <item>\\copydoc</item>          <item>@copydoc</item>\n      <item>\\def</item>              <item>@def</item>\n      <item>\\dir</item>              <item>@dir</item>\n      <item>\\dontinclude</item>      <item>@dontinclude</item>\n      <item>\\e</item>                <item>@e</item>\n      <item>\\elseif</item>           <item>@elseif</item>\n      <item>\\em</item>               <item>@em</item>\n      <item>\\enum</item>             <item>@enum</item>\n      <item>\\example</item>          <item>@example</item>\n      <item>\\exception</item>        <item>@exception</item>\n      <item>\\exceptions</item>       <item>@exceptions</item>\n      <item>\\extends</item>          <item>@extends</item>\n      <item>\\file</item>             <item>@file</item>\n      <item>\\htmlinclude</item>      <item>@htmlinclude</item>\n      <item>\\idlexcept</item>        <item>@idlexcept</item>\n      <item>\\if</item>               <item>@if</item>\n      <item>\\ifnot</item>            <item>@ifnot</item>\n      <item>\\implements</item>       <item>@implements</item>\n      <item>\\include</item>          <item>@include</item>\n      <item>\\includelineno</item>    <item>@includelineno</item>\n      <item>\\latexinclude</item>     <item>@latexinclude</item>\n      <item>\\link</item>             <item>@link</item>\n      <item>\\memberof</item>         <item>@memberof</item>\n      <item>\\namespace</item>        <item>@namespace</item>\n      <item>\\p</item>                <item>@p</item>\n      <item>\\package</item>          <item>@package</item>\n      <item>\\property</item>         <item>@property</item>\n      <item>\\relatedalso</item>      <item>@relatedalso</item>\n      <item>\\relatesalso</item>      <item>@relatesalso</item>\n      <item>\\related</item>          <item>@related</item>\n      <item>\\relates</item>          <item>@relates</item>\n      <item>\\retval</item>           <item>@retval</item>\n      <item>\\throw</item>            <item>@throw</item>\n      <item>\\throws</item>           <item>@throws</item>\n      <item>\\verbinclude</item>      <item>@verbinclude</item>\n      <item>\\version</item>          <item>@version</item>\n      <!-- TODO Introduce separate context for @xrefitem? -->\n      <item>\\xrefitem</item>         <item>@xrefitem</item>\n    </list>\n    <list name=\"TagParam\">\n      <item>\\param</item>            <item>@param</item>\n      <!-- TODO @tparam has no optional direction actually! -->\n      <item>\\tparam</item>           <item>@tparam</item>\n    </list>\n    <!-- TODO Better (separate?) highlighting for @image required -->\n    <list name=\"TagWordWord\">\n      <item>\\image</item>            <item>@image</item>\n    </list>\n      <!-- TODO @union, @struct, @protocol, @interface, @class, @category\n           actually takes 3 params, 1 mandatory and 2 optional\n        -->\n      <!-- TODO @headerfile actually takes 2 params, where last one is optional -->\n    <list name=\"TagWordString\">\n      <item>\\addtogroup</item>       <item>@addtogroup</item>\n      <item>\\category</item>         <item>@category</item>\n      <item>\\class</item>            <item>@class</item>\n      <item>\\diafile</item>          <item>@diafile</item>\n      <item>\\dotfile</item>          <item>@dotfile</item>\n      <item>\\defgroup</item>         <item>@defgroup</item>\n      <item>\\interface</item>        <item>@interface</item>\n      <item>\\headerfile</item>       <item>@headerfile</item>\n      <item>\\mscfile</item>          <item>@mscfile</item>\n      <item>\\page</item>             <item>@page</item>\n      <item>\\paragraph</item>        <item>@paragraph</item>\n      <item>\\protocol</item>         <item>@prtocol</item>\n      <item>\\ref</item>              <item>@ref</item>\n      <item>\\section</item>          <item>@section</item>\n      <item>\\snippet</item>          <item>@snippet</item>\n      <item>\\struct</item>           <item>@struct</item>\n      <item>\\subpage</item>          <item>@subpage</item>\n      <item>\\subsection</item>       <item>@subsection</item>\n      <item>\\subsubsection</item>    <item>@subsubsection</item>\n      <item>\\union</item>            <item>@union</item>\n      <item>\\weakgroup</item>        <item>@weakgroup</item>\n    </list>\n    <list name=\"TagString\">\n      <item>\\addindex</item>         <item>@addindex</item>\n      <item>\\copyright</item>        <item>@copyright</item>\n      <item>\\fn</item>               <item>@fn</item>\n      <item>\\ingroup</item>          <item>@ingroup</item>\n      <item>\\line</item>             <item>@line</item>\n      <item>\\mainpage</item>         <item>@mainpage</item>\n      <item>\\name</item>             <item>@name</item>\n      <item>\\overload</item>         <item>@overload</item>\n      <item>\\par</item>              <item>@par</item>\n      <item>\\skip</item>             <item>@skip</item>\n      <item>\\skipline</item>         <item>@skipline</item>\n      <item>\\typedef</item>          <item>@typedef</item>\n      <item>\\until</item>            <item>@until</item>\n      <item>\\var</item>              <item>@var</item>\n      <item>\\vhdlflow</item>         <item>@vhdlflow</item>\n    </list>\n    <list name=\"Note\">\n      <item>\\note</item>             <item>@note</item>\n    </list>\n    <list name=\"Warning\">\n      <item>\\warning</item>          <item>@warning</item>\n    </list>\n    <list name=\"Attention\">\n      <item>\\attention</item>        <item>@attention</item>\n      <item>\\bug</item>              <item>@bug</item>\n    </list>\n    <list name=\"Todo\">\n      <item>\\todo</item>             <item>@todo</item>\n    </list>\n\n    <contexts>\n    <!--\n      Different types of recognized command formats:\n      (w/ params specified according doxygen manual (http://www.stack.nl/~dimitri/doxygen/commands.html))\n\n      @tag                       : TagOnly\n      @tag <word>                : TagWord\n      @tag (rest_of_line)        : TagString\n      @tag {paragraph}           : TagOnly\n      @tag <word> <word>         : TagWordWord\n      @tag <word> (rest_of_line) : TagWordString\n\n      TODO Not all commands are handled properly nowadays :( Need few more contexts...\n    -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr attribute=\"Region\" context=\"#stay\" String=\"--\\s*@\\{\\s*$\" beginRegion=\"MemberGroup\" />\n        <RegExpr attribute=\"Region\" context=\"#stay\" String=\"--\\s*@\\}\\s*$\" endRegion=\"MemberGroup\" />\n        <RegExpr attribute=\"Comment\" context=\"BlockComment\" String=\"--\\[(=*)\\[\" beginRegion=\"BlockComment\" dynamic=\"true\" />\n        <Detect2Chars attribute=\"Comment\" context=\"LineComment\" char=\"-\" char1=\"-\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"LineComment\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\" />\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"SL_DetectEnv\" />\n        <keyword attribute=\"Tags\" context=\"#stay\" String=\"TagOnly\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagWord\" String=\"TagWord\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagParam\" String=\"TagParam\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagWordWord\" String=\"TagWordWord\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagString\" String=\"TagString\" />\n        <keyword attribute=\"Tags\" context=\"SL_TagWordString\" String=\"TagWordString\" />\n        <RegExpr attribute=\"Custom Tags\" context=\"#stay\" String=\"[@\\\\][^@\\\\ \\t]+\" />\n        <DetectIdentifier />\n        <StringDetect attribute=\"HTML Comment\" context=\"SL_htmlcomment\" String=\"&lt;!--\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"SL_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" dynamic=\"true\" name=\"BlockComment\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" endRegion=\"BlockComment\" />\n        <IncludeRules context=\"##Alerts\" />\n        <Detect2Chars attribute=\"Region\" context=\"#stay\" char=\"@\" char1=\"{\" beginRegion=\"Group\" />\n        <Detect2Chars attribute=\"Region\" context=\"#stay\" char=\"@\" char1=\"}\" endRegion=\"Group\" />\n        <IncludeRules context=\"SL_DetectEnv\" />\n        <keyword attribute=\"Tags\" context=\"#stay\" String=\"TagOnly\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagWord\" String=\"TagWord\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagParam\" String=\"TagParam\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagWordWord\" String=\"TagWordWord\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagString\" String=\"TagString\" />\n        <keyword attribute=\"Tags\" context=\"ML_TagWordString\" String=\"TagWordString\" />\n        <RegExpr attribute=\"Custom Tags\" context=\"#stay\" String=\"[@\\\\]([^@\\\\ \\t])+\" />\n        <DetectIdentifier />\n        <RegExpr attribute=\"Tags\" context=\"#stay\" String=\"\\\\(&lt;|&gt;)\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"ML_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"ML_htmlcomment\" String=\"&lt;!--\" />\n      </context>\n\n      <!-- NOTE: all contexts beginning with ML_ are for multiline comments\n                 The following contexts contain a Detect2Chars that looks for a */ sequence\n                 to end multiline comments. Singleline comments do not have this limitation -\n                 that's why all contexts are copy&pasted and the line <Detect2Chars ... */> is removed.\n                 <IncludeRules context=\"acontext\"> could be used instead but it would make context switching\n                 much more complex and very hard to understand! (But use IncludeRules where the rules don't\n                 refer to another SL_*/ML_* context, to help maintainability.)\n      -->\n      <!-- tag contexts -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" dynamic=\"true\" name=\"ML_TagWord\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <IncludeRules context=\"SL_TagWord\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" dynamic=\"true\" name=\"ML_TagParam\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <DetectSpaces />\n        <StringDetect attribute=\"Tags\" context=\"ML_Tag2ndWord\" String=\"[in]\" />\n        <StringDetect attribute=\"Tags\" context=\"ML_Tag2ndWord\" String=\"[out]\" />\n        <StringDetect attribute=\"Tags\" context=\"ML_Tag2ndWord\" String=\"[in,out]\" />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" dynamic=\"true\" name=\"ML_TagWordWord\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"ML_Tag2ndWord\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <!-- TODO for kate 2.x, convert references to \"#pop!ML_TagWord\" -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop#pop\" dynamic=\"true\" name=\"ML_Tag2ndWord\">\n        <StringDetect attribute=\"Comment\" context=\"#pop#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <IncludeRules context=\"SL_Tag2ndWord\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" dynamic=\"true\" name=\"ML_TagString\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"ML_htmlcomment\" String=\"&lt;!--\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"ML_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n        <RegExpr attribute=\"Description\" context=\"#stay\" String=\".\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" dynamic=\"true\" name=\"ML_TagWordString\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <IncludeRules context=\"SL_TagWordString\" />\n      </context>\n\n      <!-- html contexts -->\n      <context dynamic=\"true\" name=\"ML_htmltag\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <Detect2Chars attribute=\"HTML Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n        <DetectChar attribute=\"HTML Tag\" context=\"#pop\" char=\"&gt;\" />\n        <RegExpr attribute=\"Identifier\" context=\"ML_identifiers\" String=\"\\s*=\\s*\" />\n      </context>\n      <context dynamic=\"true\" name=\"ML_htmlcomment\" attribute=\"HTML Comment\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <IncludeRules context=\"##Alerts\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"#pop\" String=\"--&gt;\" />\n      </context>\n      <context dynamic=\"true\" name=\"ML_identifiers\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Identifier\" context=\"#pop\" String=\"\\s*#?[a-zA-Z0-9]*\" />\n        <DetectChar attribute=\"Types\" context=\"ML_types1\" char=\"'\" />\n        <DetectChar attribute=\"Types\" context=\"ML_types2\" char=\"&quot;\" />\n      </context>\n      <context dynamic=\"true\" name=\"ML_types1\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"'\" />\n      </context>\n      <context dynamic=\"true\" name=\"ML_types2\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"]%1]\" dynamic=\"true\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"&quot;\" />\n      </context>\n\n      <!-- NOTE: all contexts beginning with SL_ are for singleline comments -->\n      <!-- tag contexts -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagWord\">\n        <DetectSpaces />\n        <keyword attribute=\"Tags\" context=\"#pop\" String=\"TagWord\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagParam\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Tags\" context=\"SL_Tag2ndWord\" String=\"[in]\" />\n        <StringDetect attribute=\"Tags\" context=\"SL_Tag2ndWord\" String=\"[out]\" />\n        <StringDetect attribute=\"Tags\" context=\"SL_Tag2ndWord\" String=\"[in,out]\" />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagWordWord\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"SL_Tag2ndWord\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <!-- TODO for kate 2.x, convert references to \"#pop!SL_TagWord\" -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop#pop\" name=\"SL_Tag2ndWord\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"#pop#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagString\">\n        <DetectSpaces />\n        <StringDetect attribute=\"HTML Comment\" context=\"SL_htmlcomment\" String=\"&lt;!--\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"HTML Tag\" context=\"SL_htmltag\" String=\"&lt;\\/?[-\\w0-9._:@]+\" />\n        <RegExpr attribute=\"Description\" context=\"#stay\" String=\".\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SL_TagWordString\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Word\" context=\"#pop\" String=\"\\S(?=&wordsep;)\" />\n        <RegExpr attribute=\"Word\" context=\"#stay\" String=\"\\S\" />\n      </context>\n\n      <!-- html contexts -->\n      <context name=\"SL_htmltag\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"HTML Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n        <DetectChar attribute=\"HTML Tag\" context=\"#pop\" char=\"&gt;\" />\n        <RegExpr attribute=\"Identifier\" context=\"SL_identifiers\" String=\"\\s*=\\s*\" />\n      </context>\n      <context name=\"SL_htmlcomment\" attribute=\"HTML Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n        <StringDetect attribute=\"HTML Comment\" context=\"#pop\" String=\"--&gt;\" />\n      </context>\n      <context name=\"SL_identifiers\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Identifier\" context=\"#pop\" String=\"\\s*#?[a-zA-Z0-9]*\" />\n        <DetectChar attribute=\"Types\" context=\"SL_types1\" char=\"'\" />\n        <DetectChar attribute=\"Types\" context=\"SL_types2\" char=\"&quot;\" />\n      </context>\n      <context name=\"SL_types1\" attribute=\"Types\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"'\" />\n      </context>\n      <context name=\"SL_types2\" attribute=\"Types\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"&quot;\" />\n      </context>\n\n      <context attribute=\"Comment\" name=\"SL_DetectEnv\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Tags\" context=\"Code\" String=\"[@\\\\]code\\b\" beginRegion=\"Code\" />\n        <RegExpr attribute=\"Tags\" context=\"Verbatim\" String=\"[@\\\\]verbatim\\b\" beginRegion=\"Verbatim\" />\n        <RegExpr attribute=\"Tags\" context=\"Formula\" String=\"[@\\\\]f\\[\" beginRegion=\"Formula\" />\n        <RegExpr attribute=\"Tags\" context=\"Msc\" String=\"[@\\\\]msc\\b\" beginRegion=\"Msc\" />\n        <RegExpr attribute=\"Tags\" context=\"Dot\" String=\"[@\\\\]dot\\b\" beginRegion=\"Dot\" />\n        <keyword attribute=\"Note\" context=\"#stay\" String=\"Note\" />\n        <keyword attribute=\"Warning\" context=\"#stay\" String=\"Warning\" />\n        <keyword attribute=\"Attention\" context=\"#stay\" String=\"Attention\" />\n        <keyword attribute=\"Todo\" context=\"#stay\" String=\"Todo\" />\n        <RegExpr attribute=\"Entities\" context=\"#stay\" String=\"&amp;[A-Za-z]+&#59;\" />\n      </context>\n\n      <context attribute=\"Comment\" name=\"SL_DetectComment\" lineEndContext=\"#pop\">\n        <StringDetect attribute=\"Comment\" context=\"#pop#pop\" String=\"]%1]\" dynamic=\"true\" endRegion=\"BlockComment\" />\n        <DetectChar attribute=\"Comment\" context=\"#stay\" char=\"*\" />\n        <StringDetect attribute=\"Comment\" context=\"#stay\" String=\"///\" />\n      </context>\n\n      <context attribute=\"Code\" lineEndContext=\"#stay\" name=\"Code\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]endcode\\b\" endRegion=\"Code\" />\n      </context>\n\n      <context attribute=\"Verbatim\" lineEndContext=\"#stay\" name=\"Verbatim\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]endverbatim\\b\" endRegion=\"Verbatim\" />\n      </context>\n\n      <context attribute=\"Formulas\" lineEndContext=\"#stay\" name=\"Formula\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]f\\]\" endRegion=\"Formula\" />\n        <!-- TODO: How to force LaTeX math context here?? -->\n        <!-- <IncludeRules context=\"##LaTeX\" /> -->\n      </context>\n\n      <context attribute=\"Message Sequence Chart\" lineEndContext=\"#stay\" name=\"Msc\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]endmsc\\b\" endRegion=\"Msc\" />\n      </context>\n\n      <context attribute=\"Dot Graph\" lineEndContext=\"#stay\" name=\"Dot\">\n        <IncludeRules context=\"SL_DetectComment\" />\n        <RegExpr attribute=\"Tags\" context=\"#pop\" String=\"[@\\\\]enddot\\b\" endRegion=\"Dot\" />\n      </context>\n\n  </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" />\n      <itemData name=\"Tags\"         defStyleNum=\"dsAnnotation\" bold=\"1\" />\n      <itemData name=\"Custom Tags\"  defStyleNum=\"dsAnnotation\" />\n      <itemData name=\"Word\"         defStyleNum=\"dsCommentVar\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"HTML Tag\"     defStyleNum=\"dsKeyword\" color=\"#000000\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Entities\"     defStyleNum=\"dsOthers\" color=\"#4086C0\" bold=\"1\" italic=\"1\" />\n      <itemData name=\"Description\"  defStyleNum=\"dsDocumentation\" />\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\" />\n      <itemData name=\"Region\"       defStyleNum=\"dsRegionMarker\" />\n      <itemData name=\"Identifier\"   defStyleNum=\"dsOthers\" />\n      <itemData name=\"HTML Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Types\"        defStyleNum=\"dsDataType\" />\n      <itemData name=\"Code\"         defStyleNum=\"dsComment\" />\n      <itemData name=\"Dot Graph\"    defStyleNum=\"dsComment\" color=\"#00A000\" selColor=\"#ffffff\" italic=\"1\" />\n      <itemData name=\"Formulas\"     defStyleNum=\"dsComment\" color=\"#00A000\" selColor=\"#ffffff\" italic=\"1\" />\n      <itemData name=\"Message Sequence Chart\" defStyleNum=\"dsComment\" color=\"#00A000\" selColor=\"#ffffff\" italic=\"1\" />\n      <itemData name=\"Verbatim\"     defStyleNum=\"dsComment\" />\n      <itemData name=\"Note\"         defStyleNum=\"dsInformation\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Warning\"      defStyleNum=\"dsWarning\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Attention\"    defStyleNum=\"dsAnnotation\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Todo\"         defStyleNum=\"dsAnnotation\" bold=\"1\" italic=\"0\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" weakDeliminator=\"\\$~\" />\n  </general>\n</language>\n<!-- kate: indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/dtd.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"[\n  <!ENTITY nmtoken \"[\\-\\w\\d\\.:_]+\">\n  <!ENTITY entref  \"(#[0-9]+|#[xX][0-9A-Fa-f]+|&nmtoken;);\">\n]>\n<language name=\"DTD\" version=\"2\" kateversion=\"3.4\" section=\"Markup\" extensions=\"*.dtd\" mimetype=\"application/xml-dtd\" author=\"Andriy Lesyuk (s-andy@in.if.ua)\" license=\"LGPL\">\n  <highlighting>\n\n    <list name=\"Category\">\n      <item>EMPTY</item>\n      <item>ANY</item>\n      <item>CDATA</item>\n      <item>ID</item>\n      <item>IDREF</item>\n      <item>IDREFS</item>\n      <item>NMTOKEN</item>\n      <item>NMTOKENS</item>\n      <item>ENTITY</item>\n      <item>ENTITIES</item>\n      <item>NOTATION</item>\n      <item>PUBLIC</item>\n      <item>SYSTEM</item>\n      <item>NDATA</item>\n    </list>\n\n    <list name=\"Keywords\">\n      <item>#PCDATA</item>\n      <item>#REQUIRED</item>\n      <item>#IMPLIED</item>\n      <item>#FIXED</item>\n    </list>\n\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n        <StringDetect attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;?xml\" beginRegion=\"pi\" />\n        <StringDetect attribute=\"Declaration\" context=\"Declaration\" String=\"&lt;!ELEMENT\" beginRegion=\"declaration\" />\n        <StringDetect attribute=\"Declaration\" context=\"Declaration\" String=\"&lt;!ATTLIST\" beginRegion=\"declaration\" />\n        <StringDetect attribute=\"Declaration\" context=\"Declaration\" String=\"&lt;!NOTATION\" beginRegion=\"declaration\" />\n        <StringDetect attribute=\"Declaration\" context=\"Declaration\" String=\"&lt;!ENTITY\" beginRegion=\"declaration\" />\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"PI\" attribute=\"Other\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n      </context>\n\n      <context name=\"Declaration\" attribute=\"Other\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n        <Detect2Chars attribute=\"Comment\" context=\"InlineComment\" char=\"-\" char1=\"-\" />\n        <DetectChar attribute=\"Declaration\" context=\"#pop\" char=\"&gt;\" endRegion=\"declaration\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <RegExpr attribute=\"Declaration\" context=\"#stay\" String=\"(-|O)\\s(-|O)\" />\n        <AnyChar attribute=\"Delimiter\" context=\"#stay\" String=\"(|),\" />\n        <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"(%|&amp;)&entref;\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"?*+-&amp;\" />\n        <RegExpr attribute=\"Local\" context=\"#stay\" String=\"%\\s\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"Category\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"Keywords\" />\n        <RegExpr attribute=\"Name\" context=\"#stay\" String=\"\\b&nmtoken;\\b\" />\n      </context>\n\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n        <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"%&nmtoken;;\" />\n      </context>\n\n      <context name=\"InlineComment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"-\" />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Other\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Declaration\" defStyleNum=\"dsDataType\" bold=\"1\" spellChecking=\"false\" />\n      <itemData name=\"Name\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n      <itemData name=\"Delimiter\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"Symbol\" defStyleNum=\"dsFloat\" bold=\"1\" spellChecking=\"false\" />\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n      <itemData name=\"Entity\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"Local\" defStyleNum=\"dsDecVal\" bold=\"1\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n    </comments>\n  </general>\n\n</language>\n<!-- kate: indent-width 2; indent-mode normal; tab-indents on; -->\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/e.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"E Language\" version=\"3\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.e\" mimetype=\"text/x-e-src\">\n    <highlighting>\n        <list name=\"Type\">\n            <item>FALSE</item>\n            <item>MAX_INT</item>\n            <item>MIN_INT</item>\n            <item>NULL</item>\n            <item>TRUE</item>\n            <item>UNDEF</item>\n            <item>bit</item>\n            <item>bits</item>\n            <item>body</item>\n            <item>bool</item>\n            <item>byte</item>\n            <item>byte_array</item>\n            <item>continue</item>\n            <item>copy</item>\n            <item>default</item>\n            <item>external_pointer</item>\n            <item>files</item>\n            <item>file</item>\n            <item>form</item>\n            <item>global</item>\n            <item>index</item>\n            <item>init</item>\n            <item>int</item>\n            <item>it</item>\n            <item>list</item>\n            <item>load</item>\n            <item>long</item>\n            <item>me</item>\n            <item>method</item>\n            <item>module</item>\n            <item>ntv</item>\n            <item>of</item>\n            <item>pat</item>\n            <item>print</item>\n            <item>result</item>\n            <item>source_ref</item>\n            <item>string</item>\n            <item>symtab</item>\n            <item>sys</item>\n            <item>test</item>\n            <item>uint</item>\n            <item>untyped</item>\n            <item>vec</item>\n         </list>\n        <list name=\"Function\">\n            <item>run</item>\n            <item>init</item>\n            <item>pre_generate</item>\n            <item>dut_error</item>\n            <item>pack</item>\n            <item>unpack</item>\n            <item>post_generate</item>\n            <item>pre_generate</item>\n            <item>set_config</item>\n            <item>hex</item>\n            <item>stop_run</item>\n            <item>append</item>\n            <item>size</item>\n            <item>delete</item>\n            <item>is_empty</item>\n            <item>deep_compare</item>\n            <item>deep_compare_physical</item>\n            <item>clear</item>\n            <item>pop0</item>\n            <item>setup</item>\n            <item>crc_32</item>\n        </list>\n        <list name=\"Statement\">\n            <item>chars</item>\n            <item>define</item>\n            <item>extend</item>\n            <item>event</item>\n            <item>ECHO</item>\n            <item>DOECHO</item>\n            <item>import</item>\n            <item>initialize</item>\n            <item>non_terminal</item>\n            <item>struct</item>\n            <item>unit</item>\n            <item>script</item>\n            <item>testgroup</item>\n            <item>type</item>\n         </list>\n        <list name=\"Action\">\n            <item>C</item>\n            <item>add</item>\n            <item>also</item>\n            <item>and</item>\n            <item>as</item>\n            <item>as_a</item>\n            <item>break</item>\n            <item>code</item>\n            <item>compute</item>\n            <item>computed</item>\n            <item>delayed</item>\n            <item>do</item>\n            <item>else</item>\n            <item>each</item>\n            <item>emit</item>\n            <item>empty</item>\n            <item>end</item>\n            <item>exit</item>\n            <item>finish</item>\n            <item>for</item>\n            <item>from</item>\n            <item>if</item>\n            <item>in</item>\n            <item>is</item>\n            <item>like</item>\n            <item>log</item>\n            <item>new</item>\n            <item>no</item>\n            <item>not</item>\n            <item>only</item>\n            <item>or</item>\n            <item>out</item>\n            <item>read</item>\n            <item>repeat</item>\n            <item>return</item>\n            <item>reverse</item>\n            <item>routine</item>\n            <item>step</item>\n            <item>then</item>\n            <item>to</item>\n            <item>traceable</item>\n            <item>untraceable</item>\n            <item>var</item>\n            <item>when</item>\n            <item>while</item>\n            <item>with</item>\n            <item>write</item>\n            <item>xor</item>\n         </list>\n        <list name=\"Generation\">\n            <item>before</item>\n            <item>by</item>\n            <item>choose</item>\n            <item>gen</item>\n            <item>keep</item>\n            <item>keeping</item>\n            <item>matches</item>\n            <item>next</item>\n            <item>select</item>\n            <item>sequence</item>\n            <item>soft</item>\n            <item>using</item>\n        </list>\n        <list name=\"Cover\">\n            <item>address</item>\n            <item>cover</item>\n            <item>error</item>\n            <item>events</item>\n            <item>event</item>\n            <item>length</item>\n            <item>kind</item>\n            <item>ranges</item>\n            <item>range</item>\n            <item>sample</item>\n            <item>text</item>\n            <item>value</item>\n            <item>item</item>\n            <item>transition</item>\n            <item>illegal</item>\n         </list>\n        <list name=\"Simulator\">\n            <item>always</item>\n            <item>all</item>\n            <item>basic</item>\n            <item>call</item>\n            <item>cycles</item>\n            <item>cycle</item>\n            <item>clock</item>\n            <item>change</item>\n            <item>check</item>\n            <item>expect</item>\n            <item>fall</item>\n            <item>first</item>\n            <item>forever</item>\n            <item>idle</item>\n            <item>initial</item>\n            <item>negedge</item>\n            <item>others</item>\n            <item>on</item>\n            <item>posedge</item>\n            <item>rise</item>\n            <item>start</item>\n            <item>that</item>\n            <item>time</item>\n            <item>task</item>\n            <item>until</item>\n            <item>verilog</item>\n            <item>vhdl</item>\n            <item>wait</item>\n            <item>within</item>\n         </list>\n        <contexts>\n\n            <context name=\"out_comment\" attribute=\"OutSide E code\"  lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Normal Text\" context=\"normal\" char=\"&lt;\" char1=\"'\" />\n            </context>\n\n            <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Operators\" context=\"#stay\" char=\"{\" beginRegion=\"Region1\"/>\n                <DetectChar attribute=\"Operators\" context=\"#stay\" char=\"}\" endRegion=\"Region1\"/>\n                <HlCHex attribute=\"Integer\" context=\"#stay\" />\n                <HlCOct attribute=\"Integer\" context=\"#stay\" />\n                <Int attribute=\"Integer\" context=\"#stay\" />\n                <Detect2Chars attribute=\"Normal Text\" context=\"out_comment\" char=\"'\" char1=\"&gt;\" />\n                <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"-\" char1=\"-\" />\n                <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"/\" />\n                <DetectChar attribute=\"Vector\" context=\"string\" char=\"&quot;\" />\n                <AnyChar attribute=\"Operators\" context=\"#stay\" String=\"'[&amp;&gt;&lt;=:+\\-*\\|].,;\" />\n                <keyword attribute=\"Data Type\" context=\"#stay\"  String=\"Type\"/>\n                <keyword attribute=\"Function\" context=\"#stay\"  String=\"Function\"/>\n                <keyword attribute=\"Statement\" context=\"#stay\"  String=\"Statement\"/>\n                <keyword attribute=\"Action\" context=\"#stay\"  String=\"Action\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\"  String=\"Generation\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\"  String=\"Cover\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\"  String=\"Simulator\"/>\n\n            </context>\n\n\n            <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\" />\n\n            <context name=\"string\" attribute=\"Vector\" lineEndContext=\"#stay\" >\n                <DetectChar attribute=\"Vector\" context=\"#pop\" char=\"&quot;\" />\n            </context>\n\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"OutSide E code\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" bold=\"1\"/>\n            <itemData name=\"Statement\" defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\" />\n            <itemData name=\"Action\" defStyleNum=\"dsExtension\" bold=\"1\" italic=\"0\" />\n            <itemData name=\"Data Type\" defStyleNum=\"dsDataType\" />\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Integer\" defStyleNum=\"dsDecVal\" />\n            <itemData name=\"Vector\" defStyleNum=\"dsString\" />\n            <itemData name=\"Operators\" defStyleNum=\"dsOperator\" bold=\"0\" italic=\"0\" />\n        </itemDatas>\n\n    </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/eiffel.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\nEiffel syntax highlighting for Kate and Kwrite editors\n\nChange log:\n2003-12-16 \tRevised existing version by adding several missing keywords. Added predefined\n\t\t\t\tentities as a separate word list. Moved from numeric to named contexts.\n\t\t\t\tChanged version to 1.02.\n\nAuthor of version 1.02: Sebastian Vuorinen\n-->\n<language name=\"Eiffel\" version=\"2\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.e\" mimetype=\"text/x-eiffel-src\" author=\"Sebastian Vuorinen\" license=\"\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>agent</item>\n\t\t\t<item>alias</item>\n\t\t\t<item>all</item>\n\t\t\t<item>and</item>\n\t\t\t<item>as</item>\n\t\t\t<item>assign</item>\n\t\t\t<item>class</item>\n\t\t\t<item>convert</item>\n\t\t\t<item>create</item>\n\t\t\t<item>creation</item>\n\t\t\t<item>debug</item>\n\t\t\t<item>deferred</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>elseif</item>\n\t\t\t<item>end</item>\n\t\t\t<item>expanded</item>\n\t\t\t<item>export</item>\n\t\t\t<item>external</item>\n\t\t\t<item>feature</item>\n\t\t\t<item>from</item>\n\t\t\t<item>frozen</item>\n\t\t\t<item>if</item>\n\t\t\t<item>implies</item>\n\t\t\t<item>indexing</item>\n\t\t\t<item>infix</item>\n\t\t\t<item>inherit</item>\n\t\t\t<item>inspect</item>\n\t\t\t<item>is</item>\n\t\t\t<item>like</item>\n\t\t\t<item>local</item>\n\t\t\t<item>loop</item>\n\t\t\t<item>not</item>\n\t\t\t<item>obsolete</item>\n\t\t\t<item>old</item>\n\t\t\t<item>once</item>\n\t\t\t<item>or</item>\n\t\t\t<item>prefix</item>\n\t\t\t<item>pure</item>\n\t\t\t<item>redefine</item>\n\t\t\t<item>reference</item>\n\t\t\t<item>rename</item>\n\t\t\t<item>rescue</item>\n\t\t\t<item>retry</item>\n\t\t\t<item>separate</item>\n\t\t\t<item>then</item>\n\t\t\t<item>undefine</item>\n\t\t</list>\n\n\t\t<list name=\"predefined-entities\">\n\t\t\t<item>Current</item>\n\t\t\t<item>False</item>\n\t\t\t<item>Precursor</item>\n\t\t\t<item>Result</item>\n\t\t\t<item>True</item>\n\t\t\t<item>TUPLE</item>\n\t\t</list>\n\n\t\t<list name=\"assertions\">\n\t\t\t<item>check</item>\n\t\t\t<item>ensure</item>\n\t\t\t<item>require</item>\n\t\t\t<item>variant</item>\n\t\t\t<item>invariant</item>\n\t\t</list>\n\n\t\t<contexts>\n\t\t\t<context name = \"Normal\" attribute = \"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<keyword attribute = \"Keyword\" String = \"keywords\" context=\"#stay\" />\n\t\t\t\t<keyword attribute = \"Predefined entities\" String = \"predefined-entities\" context=\"#stay\" />\n\t\t\t\t<keyword attribute = \"Assertions\" String = \"assertions\" context=\"#stay\" />\n\n\t\t\t\t<Int attribute = \"Decimal\" context=\"#stay\" />\n\t\t\t\t<Float attribute = \"Float\" context=\"#stay\" />\n\t\t\t\t<HlCChar attribute = \"Char\" context=\"#stay\" />\n\t\t\t\t<DetectChar attribute = \"String\" char = \"&quot;\" context=\"Quoted String\" />\n\n\t\t\t\t<Detect2Chars attribute = \"Comment\" char = \"-\" char1 = \"-\" context=\"Documentation\" />\n\t\t\t</context>\n\n\t\t\t<context name = \"Quoted String\" attribute = \"String\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar attribute = \"String\" char = \"&quot;\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name = \"Documentation\" attribute=\"Comment\" lineEndContext=\"#pop\" />\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\n\t\t\t<itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Predefined entities\" defStyleNum=\"dsConstant\" />\n\t\t\t<itemData name=\"Assertions\"  defStyleNum=\"dsOthers\" />\n\n\t\t\t<itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\" />\n\t\t\t<itemData name=\"Float\"       defStyleNum=\"dsFloat\" />\n\t\t\t<itemData name=\"Char\"        defStyleNum=\"dsChar\" />\n\t\t\t<itemData name=\"String\"      defStyleNum=\"dsString\" />\n\n\t\t\t<itemData name=\"Comment\"     defStyleNum=\"dsComment\" />\n\t\t</itemDatas>\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"--\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" />\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/elixir.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language\n  SYSTEM 'language.dtd'>\n<!--\n  Elixir syntax highlighting definition for Kate.\n\n  Copyright (C) 2014  by Rubén Caro (ruben.caro.estevez@gmail.com)\n  Copyright (C) 2016  by Boris Egorov (egorov@linux.com)\n\n  This library is free software; you can redistribute it and/or\n  modify it under the terms of the GNU Library General Public\n  License as published by the Free Software Foundation; either\n  version 2 of the License, or (at your option) any later version.\n  This library is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n  Library General Public License for more details.\n  You should have received a copy of the GNU Library General Public\n  License along with this library; if not, write to the\n  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n  Boston, MA  02110-1301, USA.\n-->\n<!-- Hold the \"language\" opening tag on a single line, as mentioned in \"language.dtd\". -->\n<language author=\"Rubén Caro (ruben.caro.estevez@gmail.com), Boris Egorov (egorov@linux.com)\"\n          extensions=\"*.ex;*.exs;*.eex;*.xml.eex;*.js.eex\"\n          indenter=\"elixir\"\n          kateversion=\"5.53\"\n          license=\"LGPLv2+\"\n          mimetype=\"text/x-elixir\"\n          name=\"Elixir\"\n          section=\"Sources\"\n          style=\"elixir\"\n          version=\"5\">\n  <highlighting>\n    <list name=\"control-flow\">\n      <item>catch</item>\n      <item>cond</item>\n      <item>else</item>\n      <item>if</item>\n      <item>raise</item>\n      <item>rescue</item>\n      <item>throw</item>\n      <item>try</item>\n      <item>unless</item>\n    </list>\n    <list name=\"keywords\">\n      <item>do</item>\n      <item>end</item>\n      <item>case</item>\n      <item>bc</item>\n      <item>lc</item>\n      <item>for</item>\n      <item>receive</item>\n      <item>exit</item>\n      <item>after</item>\n      <item>quote</item>\n      <item>unquote</item>\n      <item>super</item>\n      <item>and</item>\n      <item>not</item>\n      <item>or</item>\n      <item>when</item>\n      <item>xor</item>\n      <item>in</item>\n      <item>inlist</item>\n      <item>inbits</item>\n    </list>\n    <list name=\"pseudo-variables\">\n      <item>nil</item>\n      <item>true</item>\n      <item>false</item>\n    </list>\n    <list name=\"definitions\">\n      <item>fn</item>\n      <item>defmodule</item>\n      <item>def</item>\n      <item>defp</item>\n      <item>defprotocol</item>\n      <item>defimpl</item>\n      <item>defrecord</item>\n      <item>defstruct</item>\n      <item>defmacro</item>\n      <item>defmacrop</item>\n      <item>defdelegate</item>\n      <item>defcallback</item>\n      <item>defmacrocallback</item>\n      <item>defexception</item>\n      <item>defoverridable</item>\n    </list>\n    <list name=\"mixin-macros\">\n      <item>import</item>\n      <item>require</item>\n      <item>alias</item>\n      <item>use</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <!-- \"shebang\" line -->\n        <RegExpr String=\"#!\\/.*\" attribute=\"Keyword\" column=\"0\" context=\"#stay\"/>\n\n        <!-- Defined words -->\n        <keyword String=\"keywords\" attribute=\"Keyword\" context=\"#stay\"/>\n        <keyword String=\"control-flow\" attribute=\"Control Flow\" context=\"#stay\"/>\n        <keyword String=\"definitions\" attribute=\"Definition\" context=\"#stay\"/>\n        <keyword String=\"pseudo-variables\" attribute=\"Pseudo variable\" context=\"#stay\"/>\n        <keyword String=\"mixin-macros\" attribute=\"Mixin macros\" context=\"#stay\"/>\n\n        <!-- special-character globals -->\n        <RegExpr String=\"\\b[_A-Z]+[A-Z_0-9]+\\b\" attribute=\"Global Constant\" context=\"#stay\"/>\n\n        <!-- Generally a module or class name like \"File\", \"MyModule_1\", .. -->\n        <RegExpr String=\"\\b[A-Z]+_*([0-9]|[a-z])[_a-zA-Z0-9]*\\b\" attribute=\"Constant\" context=\"#stay\"/>\n\n        <!-- Numeric values. Note that we have to allow underscores between two digits (thus the creepy regular expressions). -->\n        <RegExpr String=\"\\b\\-?0[xX]([0-9a-fA-F]|_[0-9a-fA-F])+\" attribute=\"Hex\" context=\"#stay\"/>\n        <RegExpr String=\"\\b\\-?0[bB]([01]|_[01])+\" attribute=\"Bin\" context=\"#stay\"/>\n        <RegExpr String=\"\\b\\-?0[1-7]([0-7]|_[0-7])*\" attribute=\"Octal\" context=\"#stay\"/>\n        <RegExpr String=\"\\b\\-?[0-9]([0-9]|_[0-9])*\\.[0-9]([0-9]|_[0-9])*([eE]\\-?[1-9]([0-9]|_[0-9])*(\\.[0-9]*)?)?\" attribute=\"Float\" context=\"#stay\"/>\n        <RegExpr String=\"\\b\\-?[1-9]([0-9]|_[0-9])*\\b\" attribute=\"Dec\" context=\"#stay\"/>\n        <Int attribute=\"Dec\" context=\"#stay\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\".\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"&amp;\" char1=\"&amp;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"|\" char1=\"|\" context=\"#stay\"/>\n        <RegExpr String=\"\\s[\\?\\:\\%]\\s\" attribute=\"Operator\" context=\"#stay\"/>\n        <RegExpr String=\"[|&amp;&lt;&gt;\\^\\+*~\\-=/]+\" attribute=\"Operator\" context=\"#stay\"/>\n        <!-- regexp hack -->\n        <RegExpr String=\"\\s!\" attribute=\"Operator\" context=\"#stay\"/>\n        <RegExpr String=\"/=\\s\" attribute=\"Operator\" context=\"#stay\" insensitive=\"0\"/>\n        <StringDetect String=\"%=\" attribute=\"Operator\" context=\"#stay\" insensitive=\"0\"/>\n        <RegExpr String=\":(@{1,2}|\\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?\" attribute=\"Symbol\" context=\"#stay\"/>\n        <RegExpr String=\"\\b(@{1,2}|\\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?:\" attribute=\"Symbol\" context=\"#stay\"/>\n        <RegExpr String=\":\\[\\]=?\" attribute=\"Symbol\" context=\"#stay\"/>\n        <RegExpr String=\"@(module)?doc\\s+&quot;&quot;&quot;\" attribute=\"Attribute\" context=\"Documentation\"/>\n        <StringDetect String=\"&quot;&quot;&quot;\" attribute=\"String\" context=\"Triple Quoted String\"/>\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"Quoted String\"/>\n        <DetectChar attribute=\"Raw String\" char=\"'\" context=\"Apostrophed String\"/>\n        <StringDetect String=\"?#\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar attribute=\"Comment\" char=\"#\" context=\"General Comment\"/>\n        <DetectChar attribute=\"Delimiter\" char=\"[\" context=\"#stay\"/>\n        <DetectChar attribute=\"Delimiter\" char=\"]\" context=\"#stay\"/>\n        <RegExpr String=\"@[a-zA-Z_0-9]+\" attribute=\"Attribute\" context=\"#stay\"/>\n        <!-- handle the different regular expression formats -->\n        <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#stay\"/>\n        <DetectIdentifier attribute=\"Normal Text\" context=\"#stay\"/>\n      </context>\n      <context attribute=\"DocComment\" lineEndContext=\"#stay\" name=\"Documentation\">\n        <StringDetect String=\"&quot;&quot;&quot;\" attribute=\"Attribute\" context=\"#pop\"/>\n        <RegExpr attribute=\"MarkdownHead\" String=\"^\\s*#+\\s.*[#]?$\"/>\n        <RegExpr attribute=\"MarkdownBullet\" String=\"^\\s*[\\*\\+\\-]\\s\"/>\n        <RegExpr attribute=\"MarkdownNumlist\" String=\"^\\s*[\\d]+\\.\\s\"/>\n        <RegExpr attribute=\"MarkdownCode\" context=\"Markdown Code\" String=\"^\\s*\\`\\`\\`\\s*$\"/>\n        <DetectSpaces />\n        <IncludeRules context=\"Normal Text##Markdown\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Triple Quoted String\">\n        <StringDetect String=\"&quot;&quot;&quot;\" attribute=\"String\" context=\"#pop\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Quoted String\">\n        <StringDetect String=\"\\\\\" attribute=\"String\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\\\&quot;\" attribute=\"String\" context=\"#stay\"/>\n        <RegExpr String=\"#@{1,2}\" attribute=\"Substitution\" context=\"Short Subst\"/>\n        <Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\"/>\n      </context>\n      <context attribute=\"Raw String\" lineEndContext=\"#stay\" name=\"Apostrophed String\">\n        <StringDetect String=\"\\\\\" attribute=\"String\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\\\'\" attribute=\"String\" context=\"#stay\"/>\n        <DetectChar attribute=\"Raw String\" char=\"'\" context=\"#pop\"/>\n      </context>\n      <!-- Substitutions can be nested -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Subst\">\n        <DetectChar attribute=\"Substitution\" char=\"}\" context=\"#pop\"/>\n        <!-- Highlight substitution as code. -->\n        <IncludeRules context=\"Normal\"/>\n      </context>\n      <context attribute=\"Substitution\" lineEndContext=\"#pop\" name=\"Short Subst\">\n        <!-- Check for e.g.: \"#@var#@@xy\" -->\n        <RegExpr String=\"#@{1,2}\" attribute=\"Substitution\" context=\"#stay\"/>\n        <RegExpr String=\"\\w(?!\\w)\" attribute=\"Substitution\" context=\"#pop\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"General Comment\">\n      </context>\n      <context attribute=\"MarkdownCode\" lineEndContext=\"#stay\" name=\"Markdown Code\">\n        <RegExpr String=\"^\\s*\\`\\`\\`\\s*$\" attribute=\"MarkdownCode\" context=\"#pop\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Global Constant\" defStyleNum=\"dsConstant\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsConstant\"/>\n      <itemData defStyleNum=\"dsNormal\" name=\"Normal Text\"/>\n      <itemData defStyleNum=\"dsKeyword\" name=\"Keyword\"/>\n      <itemData defStyleNum=\"dsControlFlow\" name=\"Control Flow\"/>\n      <itemData defStyleNum=\"dsKeyword\" name=\"Definition\"/>\n      <itemData defStyleNum=\"dsImport\" name=\"Mixin macros\"/>\n      <itemData defStyleNum=\"dsConstant\" name=\"Pseudo variable\"/>\n      <itemData defStyleNum=\"dsDecVal\" name=\"Dec\"/>\n      <itemData defStyleNum=\"dsFloat\" name=\"Float\"/>\n      <itemData defStyleNum=\"dsChar\" name=\"Char\"/>\n      <itemData defStyleNum=\"dsBaseN\" name=\"Octal\"/>\n      <itemData defStyleNum=\"dsBaseN\" name=\"Hex\"/>\n      <itemData defStyleNum=\"dsBaseN\" name=\"Bin\"/>\n      <itemData defStyleNum=\"dsVariable\" name=\"Symbol\"/>\n      <itemData defStyleNum=\"dsString\" name=\"String\"/>\n      <itemData defStyleNum=\"dsVerbatimString\" name=\"Raw String\"/>\n      <itemData defStyleNum=\"dsOthers\" name=\"Substitution\"/>\n      <itemData defStyleNum=\"dsOthers\" name=\"Attribute\"/>\n      <itemData defStyleNum=\"dsComment\" name=\"Comment\"/>\n      <itemData defStyleNum=\"dsComment\" name=\"DocComment\"/>\n      <!-- use these to mark errors and alerts things -->\n      <itemData color=\"#FF9FEC\" defStyleNum=\"dsNormal\" name=\"Delimiter\"/>\n      <itemData defStyleNum=\"dsOperator\" name=\"Operator\"/>\n      <itemData name=\"MarkdownHead\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"MarkdownBullet\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"MarkdownNumlist\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"MarkdownCode\" defStyleNum=\"dsFunction\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"!?\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/elm.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Elm\" version=\"1\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.elm\" author=\"Bonghyun Kim (bonghyun.d.kim@gmail.com)\" license=\"MIT\" style=\"elm\">\n  <highlighting>\n    <list name=\"declarations\">\n      <item>type</item>\n      <item>alias</item>\n      <item>port</item>\n    </list>\n    <list name=\"controlFlows\">\n      <item>case</item>\n      <item>of</item>\n      <item>if</item>\n      <item>else</item>\n      <item>then</item>\n    </list>\n    <list name=\"letExpressions\">\n      <item>let</item>\n      <item>in</item>\n    </list>\n    <list name=\"imports\">\n      <item>module</item>\n      <item>exposing</item>\n      <item>import</item>\n      <item>as</item>\n    </list>\n    <list name=\"infixes\">\n      <item>infix</item>\n      <item>left</item>\n      <item>right</item>\n      <item>non</item>\n    </list>\n    <list name=\"effects\">\n      <item>effect</item>\n      <item>where</item>\n      <item>command</item>\n      <item>subscription</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"code\">\n        <Detect2Chars attribute=\"Comment\" context=\"comments\" char=\"{\" char1=\"-\" />\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"-\" char1=\"-\" />\n        <WordDetect attribute=\"Comment\" context=\"documentation\" String=\"{-|\" />\n\n        <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"declarations\" />\n        <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"letExpressions\" />\n        <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"effects\" />\n        <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"imports\" />\n        <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"infixes\" />\n        <keyword attribute=\"ControlFlowKeyword\"          context=\"#stay\" String=\"controlFlows\" />\n\n        <WordDetect attribute=\"Import\" context=\"module\" String=\"module\" />\n        <WordDetect attribute=\"Port\" context=\"port\" String=\"port\" />\n        <WordDetect attribute=\"Import\" context=\"import\" String=\"import\" />\n\n        <RegExpr attribute=\"Name\"         context=\"#stay\" String=\"(\\b[a-z]\\w*|\\b_\\b)\" />\n        <RegExpr attribute=\"Operator\"         context=\"#stay\" String=\"(-&gt;|::|\\/\\/|\\.\\.|&amp;&amp;|\\|\\||\\+\\+|\\|&gt;|&lt;\\||&gt;&gt;|&lt;&lt;|==|\\/=|&lt;=|&gt;=)\" />\n        <RegExpr attribute=\"Operator\"         context=\"#stay\" String=\"[+-\\/*%=&gt;&lt;^\\|!]\" />\n        <RegExpr attribute=\"Operator\"         context=\"#stay\" String=\"[@\\#$&amp;~?]\" />\n\n        <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"\\b[A-Z][\\w]*\" />\n\n        <Int        attribute=\"Decimal\" context=\"#stay\" />\n        <RegExpr    attribute=\"Hex\"     context=\"#stay\" String=\"0x[\\da-f]+\" insensitive=\"true\" />\n        <RegExpr    attribute=\"Float\"   context=\"#stay\" String=\"\\d+\\.\\d+(e[+-]?\\d+)?\" insensitive=\"true\" />\n\n        <RegExpr    attribute=\"Char\"    context=\"#stay\" String=\"'(.|\\\\'|\\\\n|\\\\r|\\\\t|\\\\&quot;|\\\\\\\\|\\\\u\\{(10|0?[0-9])[0-9a-fA-F]{4}\\})'\" />\n        <DetectChar attribute=\"String\"  context=\"string\" char=\"&quot;\" />\n        <RegExpr attribute=\"String\"     context=\"multilineString\" String=\"&quot;&quot;&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"comments\">\n        <Detect2Chars attribute=\"Comment\" context=\"comments\" char=\"{\" char1=\"-\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"}\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\">\n        <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\\\.\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"multilineString\">\n        <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\s*\" />\n        <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\.*\" />\n        <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"module\">\n        <DetectChar attribute=\"Normal\" context=\"moduleParentheses\" char=\"(\" />\n        <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"imports\" />\n        <RegExpr attribute=\"Name\"         context=\"#stay\" String=\"\\b[a-z][\\w]*\" />\n        <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"\\b[A-Z][\\w]*\" />\n        <DetectChar attribute=\"Normal\" context=\"#pop\" char=\")\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"moduleParentheses\">\n        <DetectChar attribute=\"Normal\" context=\"moduleParentheses\" char=\"(\" />\n        <RegExpr attribute=\"Name\"         context=\"#stay\" String=\"\\b[a-z][\\w]*\" />\n        <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"\\b[A-Z][\\w]*\" />\n        <DetectChar attribute=\"Normal\" context=\"#pop\" char=\")\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"port\">\n        <WordDetect attribute=\"Import\" context=\"module\" String=\"imports\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"import\">\n        <DetectChar attribute=\"Normal\" context=\"moduleParentheses\" char=\"(\" />\n        <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"imports\" />\n        <RegExpr attribute=\"Name\"         context=\"#stay\" String=\"\\b[a-z][\\w]*\" />\n        <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"\\b[A-Z][\\w]*\" />\n        <DetectChar attribute=\"Normal\" context=\"#pop\" char=\")\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"documentation\">\n        <WordDetect attribute=\"Comment\" context=\"#stay\" String=\"@docs\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"}\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal\"           defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n      <itemData name=\"Comment\"          defStyleNum=\"dsComment\" />\n\n      <itemData name=\"Keyword\"          defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n      <itemData name=\"ControlFlowKeyword\" defStyleNum=\"dsControlFlow\"  spellChecking=\"false\" />\n\n      <itemData name=\"Name\"         defStyleNum=\"dsFunction\"   spellChecking=\"false\" />\n      <itemData name=\"Port\"         defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n      <itemData name=\"Import\"         defStyleNum=\"dsImport\"   spellChecking=\"false\" />\n      <itemData name=\"Operator\"         defStyleNum=\"dsOperator\" spellChecking=\"false\" />\n      <itemData name=\"Type\"             defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n\n      <itemData name=\"Decimal\"          defStyleNum=\"dsDecVal\"   spellChecking=\"false\" />\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"   spellChecking=\"false\" />\n      <itemData name=\"Float\"            defStyleNum=\"dsFloat\"    spellChecking=\"false\" />\n      <itemData name=\"Char\"             defStyleNum=\"dsChar\"     spellChecking=\"false\" />\n      <itemData name=\"String\"           defStyleNum=\"dsString\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <folding indentationsensitive=\"1\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n      <comment name=\"multiLine\" start=\"{-\" end=\"-}\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/email.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Email\" version=\"5\" kateversion=\"5.0\" extensions=\"*.eml;*.email;*.emlx;*.mbox;*.mbx\" section=\"Other\" mimetype=\"message/rfc822\" casesensitive=\"0\" author=\"Volker Krause (vkrause@kde.org)\" license=\"MIT\">\n    <highlighting>\n        <list name=\"header-names\">\n            <item>Authentication-Results:</item>\n            <item>Bcc:</item>\n            <item>Cc:</item>\n            <item>Comments:</item>\n            <item>Content-Description:</item>\n            <item>Content-Disposition:</item>\n            <item>Content-Transfer-Encoding:</item>\n            <item>Content-Type:</item>\n            <item>Date:</item>\n            <item>Delivered-To:</item>\n            <item>DKIM-Signature:</item>\n            <item>Errors-To:</item>\n            <item>From:</item>\n            <item>In-Reply-To:</item>\n            <item>Keywords:</item>\n            <item>Lines:</item>\n            <item>Message-Id:</item>\n            <item>List-Archive:</item>\n            <item>List-Id:</item>\n            <item>List-Help:</item>\n            <item>List-Post:</item>\n            <item>List-Unsubscribe:</item>\n            <item>List-Subscribe:</item>\n            <item>MIME-Version:</item>\n            <item>Organization:</item>\n            <item>Precedence:</item>\n            <item>Received:</item>\n            <item>Received-SPF:</item>\n            <item>References:</item>\n            <item>Resent-Bcc:</item>\n            <item>Resent-Cc:</item>\n            <item>Resent-Date:</item>\n            <item>Resent-From:</item>\n            <item>Resent-Message-Id:</item>\n            <item>Return-Path:</item>\n            <item>Resent-Reply-To:</item>\n            <item>Resent-Sender:</item>\n            <item>Resent-To:</item>\n            <item>Reply-To:</item>\n            <item>Sender:</item>\n            <item>Subject:</item>\n            <item>Supersedes:</item>\n            <item>To:</item>\n            <item>User-Agent:</item>\n        </list>\n\n        <contexts>\n            <context name=\"header\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop!body-context\">\n                <WordDetect attribute=\"Common Header\" context=\"header-subject\" String=\"Subject:\" column=\"0\"/>\n                <keyword attribute=\"Common Header\" context=\"header-structured-content\" String=\"header-names\" column=\"0\"/>\n                <RegExpr attribute=\"Other Header\" context=\"header-content\" String=\"[0-9a-zA-Z-]+:\\s\" column=\"0\"/>\n            </context>\n\n            <context name=\"header-subject\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop#pop!body-context\">\n                <RegExpr context=\"#pop\" String=\"\\S\" column=\"0\" lookAhead=\"true\"/>\n                <DetectChar attribute=\"String\" context=\"string-context\" char=\"&quot;\"/>\n            </context>\n\n            <context name=\"header-structured-content\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop#pop!body-context\">\n                <RegExpr context=\"#pop\" String=\"\\S\" column=\"0\" lookAhead=\"true\"/>\n                <DetectChar attribute=\"String\" context=\"string-context\" char=\"&quot;\"/>\n                <DetectChar attribute=\"Comment\" context=\"comment-context\" char=\"(\"/>\n                <RegExpr attribute=\"Address\" context=\"#stay\" String=\"&lt;?[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+&gt;?\"/>\n            </context>\n\n            <context name=\"header-content\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop#pop!body-context\">\n                <RegExpr context=\"#pop\" String=\"\\S\" column=\"0\" lookAhead=\"true\"/>\n            </context>\n\n            <context name=\"string-context\" attribute=\"String\" lineEndContext=\"#stay\">\n                <HlCStringChar/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n\n            <context name=\"comment-context\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Comment\" context=\"#pop\" char=\")\"/>\n            </context>\n\n            <context name=\"body-context\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"Content Boundary\" context=\"#pop!header\" String=\"--[0-9a-zA-Z._=-]{10,}(--)?$\" column=\"0\"/>\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Common Header\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Other Header\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n            <itemData name=\"Address\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"false\"/>\n            <itemData name=\"Content Boundary\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <keywords casesensitive=\"0\" weakDeliminator=\":-\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/erlang.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n          <!ENTITY atomstr    \"\\b[a-z][_a-z@-Z0-9]*(?:(?=[^_a-z@-Z0-9])|$)\" >\n          <!ENTITY varstr    \"\\b[_A-Z][_a-z@-Z0-9]*(?:(?=[^_a-z@-Z0-9])|$)\" >\n          <!-- pragmas defined here, because \"keyword\" can't handle the leading '-' -->\n          <!ENTITY pragmas \n             \"^(?:-module|-export|-define|-undef|-ifdef|-ifndef|-else|-endif|-include|-include_lib)\" >\n          <!--  same with separators: (from s3.9 p 24 of erlang spec) -->\n          <!ENTITY separators \"(?:\\(|\\)|\\{|\\}|\\[|\\]|\\.|\\:|\\||\\|\\||;|\\,|\\?|-&gt;|\\#)\" >\n          <!--  and operators - although words are dealt with separately -->\n          <!ENTITY opsymbols \n                   \"(?:\\+|-|\\*|\\/|==|\\/=|=:=|=\\/=|&lt;|=&lt;|&gt;|&gt;=|\\+\\+|--|=|!|&lt;-)\" >\n]\n>\n<!--\n    Copyright (C) 2007 Bill Ross <bill@emailme.net.au>\n\n    \n    This library is free software; you can redistribute it and/or\n   modify it under the terms of the GNU Library General Public\n   License version 2 as published by the Free Software Foundation.\n\n   This library is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n   Library General Public License for more details.\n\n   You should have received a copy of the GNU Library General Public License\n   along with this library; see the file COPYING.LIB.  If not, write to\n   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n   Boston, MA 02110-1301, USA.\n  \n   Changes \n   v1-0-2 (2008-01-10) - fixed to '_\" in atom and variable names (thanks to Vito De Tullio)\n                                   - fixed highlighting problem when '@' at end of atom/variable\n-->\n\n<language name=\"Erlang\" version=\"3\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.erl\" mimetype=\"\" author=\"Bill Ross (bill@emailme.net.au)\" license=\"LGPLv2\">\n  <highlighting>\n    <list name=\"keywords\">\n      <!-- ====== s3.8 p 24 of erlang spec ===== -->\n      <item>after</item>\n      <item>begin</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>cond</item>\n      <item>end</item>\n      <item>fun</item>\n      <item>if</item>\n      <item>let</item>\n      <item>of</item>\n      <item>query</item>\n      <item>receive</item>\n      <item>all_true</item>\n      <item>some_true</item>\n    </list>\n    <list name=\"operators\">\n      <!-- operators: s3.9 p 24 of erlang spec -->\n      <!-- see also opsymbols for the symbols -->\n      <item>div</item>\n      <item>rem</item>\n      <item>or</item>\n      <item>xor</item>\n      <item>bor</item>\n      <item>bxor</item>\n      <item>bsl</item>\n      <item>bsr</item>\n      <item>and</item>\n      <item>band</item>\n      <item>not</item>\n      <item>bnot</item>\n    </list>\n    <list name=\"functions\">\n      <!-- all standard (erlang) functions are here, -->\n      <!-- except those defined as erlang:function (those will show as functions anyway -->\n      <item>abs</item>\n      <item>accept</item>\n      <item>alarm</item>\n      <item>apply</item>\n      <item>atom_to_list</item>\n      <item>binary_to_list</item>\n      <item>binary_to_term</item>\n      <item>check_process_code</item>\n      <item>concat_binary</item>\n      <item>date</item>\n      <item>delete_module</item>\n      <item>disconnect_node</item>\n      <item>element</item>\n      <item>erase</item>\n      <item>exit</item>\n      <item>float</item>\n      <item>float_to_list</item>\n      <item>garbage_collect</item>\n      <item>get</item>\n      <item>get_keys</item>\n      <item>group_leader</item>\n      <item>halt</item>\n      <item>hd</item>\n      <item>integer_to_list</item>\n      <item>is_alive</item>\n      <item>is_atom</item>\n      <item>is_binary</item>\n      <item>is_boolean</item>\n      <item>is_float</item>\n      <item>is_function</item>\n      <item>is_integer</item>\n      <item>is_list</item>\n      <item>is_number</item>\n      <item>is_pid</item>\n      <item>is_port</item>\n      <item>is_process_alive</item>\n      <item>is_record</item>\n      <item>is_reference</item>\n      <item>is_tuple</item>\n      <item>length</item>\n      <item>link</item>\n      <item>list_to_atom</item>\n      <item>list_to_binary</item>\n      <item>list_to_float</item>\n      <item>list_to_integer</item>\n      <item>list_to_pid</item>\n      <item>list_to_tuple</item>\n      <item>load_module</item>\n      <item>loaded</item>\n      <item>localtime</item>\n      <item>make_ref</item>\n      <item>module_loaded</item>\n      <item>node</item>\n      <item>nodes</item>\n      <item>now</item>\n      <item>open_port</item>\n      <item>pid_to_list</item>\n      <item>port_close</item>\n      <item>port_command</item>\n      <item>port_connect</item>\n      <item>port_control</item>\n      <item>ports</item>\n      <item>pre_loaded</item>\n      <item>process_flag</item>\n      <item>process_info</item>\n      <item>processes</item>\n      <item>purge_module</item>\n      <item>put</item>\n      <item>register</item>\n      <item>registered</item>\n      <item>round</item>\n      <item>self</item>\n      <item>setelement</item>\n      <item>size</item>\n      <item>spawn</item>\n      <item>spawn_link</item>\n      <item>spawn_opt</item>\n      <item>split_binary</item>\n      <item>statistics</item>\n      <item>term_to_binary</item>\n      <item>throw</item>\n      <item>time</item>\n      <item>tl</item>\n      <item>trunc</item>\n      <item>tuple_to_list</item>\n      <item>unlink</item>\n      <item>unregister</item>\n      <item>whereis</item>\n   </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n        <RegExpr attribute=\"Pragma\" context=\"#stay\" column=\"0\" String=\"&pragmas;\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\" />\n        <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"&opsymbols;\" />\n        <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n        <RegExpr attribute=\"Separator\" context=\"#stay\" String=\"&separators;\" />\n        <DetectSpaces />\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"%\" />\n\n        <!-- Functions (in addition to named functions dealt with above) -->\n        <!-- simple version - got to be in form module:function -->\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"&atomstr;:&atomstr;\" />\n        <RegExpr attribute=\"Function\" context=\"isfunction\" String=\"&atomstr;\\(\" lookAhead=\"true\" />\n\n        <!-- Variables - begin with upper case, or between single quotes -->\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&varstr;\" />\n\n        <!-- atoms - begin with lower case (letters, numbers, @), \n             or anything between single quotes -->\n        <DetectChar attribute=\"Atom\" context=\"atomquote\" char=\"'\" /> \n        <RegExpr attribute=\"Atom\" context=\"#stay\" String=\"&atomstr;\" />\n        \n        <DetectChar attribute=\"String\" context=\"stringquote\" char=\"&quot;\" />\n        \n        <!-- numbers - these work -->\n        <!-- integers have three forms 7, 3#22, $A -->\n        <!-- float must have a number after the decimal point, or it doesn't count -->\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"[0-9]+\\.[0-9]+(?:[eE][+-]?[0-9]+)?\" />\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\d+#[a-zA-Z0-9]+\" />\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"\\$\\S\" />\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"[0-9]+\" />\n\n      </context>\n\n      <!-- isfunction -->\n      <!-- confirm that this is a function and capture name for formatting -->\n      <!-- lookahead for '(' already performed by the time we are here -->\n      <context name=\"isfunction\" attribute=\"Function\" lineEndContext=\"#pop\"  >\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"&atomstr;\" />\n      </context>\n\n      <!-- finish off the atom in quoted string (allow for escaped single quotes -->\n      <context name=\"atomquote\" attribute=\"Atom\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Atom\" context=\"#pop\" String=\"(?:(?:\\\\')?[^']*)*'\" />\n      </context>\n\n      <!-- finish off the atom in quoted string (allow for escaped single quotes -->\n      <context name=\"stringquote\" attribute=\"String\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"String\" context=\"#pop\" String=\"(?:(?:\\\\&quot;)?[^&quot;]*)*&quot;\" />\n      </context>\n      \n      <!-- finish off the comment (allows for alerts) -->\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Pragma\"                    defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Function\"                  defStyleNum=\"dsFunction\" />\n      <itemData name=\"Separator\"                 defStyleNum=\"dsFunction\" />\n      <itemData name=\"Operator\"                  defStyleNum=\"dsOperator\"  />\n      <itemData name=\"Variable\"                  defStyleNum=\"dsVariable\" />\n      <itemData name=\"Integer\"                   defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Number\"                    defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Float\"                     defStyleNum=\"dsFloat\" />\n      <itemData name=\"Atom\"                      defStyleNum=\"dsChar\" />\n      <itemData name=\"String\"                    defStyleNum=\"dsString\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"%\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/euphoria.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\n  This file is part of KDE's kate project.\n\n  copyright   : (C) 2004 by Irv Mullins\n  email       : irvm at ellijay dot com\n\n  last change : 2004-04-24\n\n\n  This library is free software; you can redistribute it and/or\n  modify it under the terms of the GNU Library General Public\n  License as published by the Free Software Foundation; either\n  version 2 of the License, or (at your option) any later version.\n\n  This library is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n  Library General Public License for more details.\n\n  You should have received a copy of the GNU Library General Public\n  License along with this library; if not, write to the\n  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n  Boston, MA  02110-1301, USA.\n\n-->\n\n<!-- Store this in /usr/share/apps/katepart/syntax -->\n\n<language name=\"Euphoria\" version=\"6\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.e;*.ex;*.exw;*.exu\" mimetype=\"text/x-euphoria\" author=\"Irv Mullins (irvm@ellijay.com)\" license=\"LGPLv2+\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>abort</item>\n      <item>allocate</item>\n      <item>allocate_string</item>\n      <item>allow_break</item>\n      <item>and</item>\n      <item>and_bits</item>\n      <item>append</item>\n      <item>arccos</item>\n      <item>arcsin</item>\n      <item>arctan</item>\n      <item>atom_to_float32</item>\n      <item>atom_to_float64</item>\n      <item>as</item>\n      <item>begin</item>\n      <item>bits_to_int</item>\n      <item>bytes_to_int</item>\n      <item>c_func</item>\n      <item>c_proc</item>\n      <item>call</item>\n      <item>call_back</item>\n      <item>call_func</item>\n      <item>call_proc</item>\n      <item>check_break</item>\n      <item>chdir</item>\n      <item>clear_screen</item>\n      <item>close</item>\n      <item>command_line</item>\n      <item>compare</item>\n      <item>cos</item>\n      <item>crash_file</item>\n      <item>crash_message</item>\n      <item>current_dir</item>\n      <item>custom_sort</item>\n      <item>date</item>\n      <item>define_c_func</item>\n      <item>define_c_proc</item>\n      <item>define_c_var</item>\n      <item>dir</item>\n      <item>display_text_image</item>\n      <item>do</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>end</item>\n      <item>equal</item>\n      <item>exit</item>\n      <item>find</item>\n      <item>float32_to_atom</item>\n      <item>float64_to_atom</item>\n      <item>floor</item>\n      <item>flush</item>\n      <item>for</item>\n      <item>free</item>\n      <item>free_console</item>\n      <item>function</item>\n      <item>get_bytes</item>\n      <item>get_key</item>\n      <item>get_mouse</item>\n      <item>get_position</item>\n      <item>get_screen_char</item>\n      <item>getc</item>\n      <item>getenv</item>\n      <item>gets</item>\n      <item>if</item>\n      <item>include</item>\n      <item>int_to_bits</item>\n      <item>int_to_bytes</item>\n      <item>length</item>\n      <item>lock_file</item>\n      <item>log</item>\n      <item>lower</item>\n      <item>machine_func</item>\n      <item>machine_proc</item>\n      <item>match</item>\n      <item>mem_copy</item>\n      <item>mem_set</item>\n      <item>mouse_events</item>\n      <item>mouse_pointer</item>\n      <item>not</item>\n      <item>not_bits</item>\n      <item>of</item>\n      <item>open</item>\n      <item>open_dll</item>\n      <item>or</item>\n      <item>or_bits</item>\n      <item>peek</item>\n      <item>peek4</item>\n      <item>peek4s</item>\n      <item>peek4u</item>\n      <item>platform</item>\n      <item>poke</item>\n      <item>poke4</item>\n      <item>position</item>\n      <item>power</item>\n      <item>prepend</item>\n      <item>print</item>\n      <item>printf</item>\n      <item>procedure</item>\n      <item>profile</item>\n      <item>prompt_number</item>\n      <item>prompt_string</item>\n      <item>put_screen_char</item>\n      <item>puts</item>\n      <item>rand</item>\n      <item>read_bitmap</item>\n      <item>register_block</item>\n      <item>remainder</item>\n      <item>repeat</item>\n      <item>return</item>\n      <item>reverse</item>\n      <item>routine_id</item>\n      <item>save_bitmap</item>\n      <item>save_text_image</item>\n      <item>scroll</item>\n      <item>seek</item>\n      <item>set_rand</item>\n      <item>sin</item>\n      <item>sleep</item>\n      <item>sort</item>\n      <item>sprint</item>\n      <item>sprintf</item>\n      <item>sqrt</item>\n      <item>system</item>\n      <item>system_exec</item>\n      <item>tan</item>\n      <item>text_color</item>\n      <item>then</item>\n      <item>time</item>\n      <item>to</item>\n      <item>trace</item>\n      <item>type</item>\n      <item>unlock_file</item>\n      <item>unregister_block</item>\n      <item>upper</item>\n      <item>value</item>\n      <item>video_config</item>\n      <item>wait_key</item>\n      <item>walk_dir</item>\n      <item>where</item>\n      <item>while</item>\n      <item>wildcard_file</item>\n      <item>wildcard_match</item>\n      <item>with</item>\n      <item>without</item>\n      <item>wrap</item>\n      <item>xor</item>\n      <item>xor_bits</item>\n      <item>?</item>\n    </list>\n\n    <list name=\"types\">\n      <item>atom</item>\n      <item>constant</item>\n      <item>global</item>\n      <item>integer</item>\n      <item>object</item>\n      <item>sequence</item>\n      <item>type</item>\n    </list>\n\n    <list name=\"constants\">\n      <item>PI</item>\n      <item>GET_SUCCESS</item>\n    </list>\n\n    <list name=\"GtkKeywords\">\n      <item>addto</item>\n      <item>adjustment</item>\n      <item>alignment</item>\n      <item>appendto</item>\n      <item>append_page</item>\n      <item>arrow</item>\n      <item>aspect_frame</item>\n      <item>button</item>\n      <item>calendar</item>\n      <item>cell_renderer_text</item>\n      <item>cell_renderer_toggle</item>\n      <item>check</item>\n      <item>checkbutton</item>\n      <item>check_menu_item</item>\n      <item>choice</item>\n      <item>combo</item>\n      <item>connect</item>\n      <item>drawingarea</item>\n      <item>draw_arc</item>\n      <item>draw_image</item>\n      <item>draw_line</item>\n      <item>draw_polygon</item>\n      <item>draw_point</item>\n      <item>draw_rectangle</item>\n      <item>end_submenu</item>\n      <item>entry</item>\n      <item>euget</item>\n      <item>event_box</item>\n      <item>flatten</item>\n      <item>font</item>\n      <item>frame</item>\n      <item>get</item>\n      <item>getImage</item>\n      <item>getSize</item>\n      <item>g_list</item>\n      <item>g_list_to_sequence</item>\n      <item>deallocate_strings</item>\n      <item>draw_line</item>\n      <item>hbox</item>\n      <item>hbuttonbox</item>\n      <item>hpaned</item>\n      <item>hscrollbar</item>\n      <item>hseparator</item>\n      <item>hscale</item>\n      <item>idle_add</item>\n      <item>image</item>\n      <item>image_menu_item</item>\n      <item>init</item>\n      <item>label</item>\n      <item>limit</item>\n      <item>list_store</item>\n      <item>list_view</item>\n      <item>list_view_column</item>\n      <item>main</item>\n      <item>mark_day</item>\n      <item>menu</item>\n      <item>menubar</item>\n      <item>menu_item</item>\n      <item>mouse_button</item>\n      <item>new_gc</item>\n      <item>new_group</item>\n      <item>new_menu_group</item>\n      <item>notebook</item>\n      <item>option</item>\n      <item>option_menu</item>\n      <item>pack</item>\n      <item>path</item>\n      <item>pop</item>\n      <item>progress_bar</item>\n      <item>push</item>\n      <item>quit</item>\n      <item>radio</item>\n      <item>radiobutton</item>\n      <item>radio_menu_item</item>\n      <item>rc_parse</item>\n      <item>run</item>\n      <item>separator_menu_item</item>\n      <item>set</item>\n      <item>set_submenu</item>\n      <item>str</item>\n      <item>scrolled_window</item>\n      <item>seq_to_str</item>\n      <item>setfg</item>\n      <item>setProperty</item>\n      <item>show</item>\n      <item>spinbutton</item>\n      <item>statusbar</item>\n      <item>table</item>\n      <item>textbox</item>\n      <item>timer</item>\n      <item>togglebutton</item>\n      <item>toolbar</item>\n      <item>tooltip</item>\n      <item>tree_store</item>\n      <item>tree_view</item>\n      <item>tree_view_column</item>\n      <item>vbox</item>\n      <item>vbuttonbox</item>\n      <item>vpaned</item>\n      <item>vscale</item>\n      <item>vscrollbar</item>\n      <item>vseparator</item>\n      <item>when</item>\n      <item>window</item>\n      <item>NULL</item>\n      <item>TRUE</item>\n      <item>FALSE</item>\n      <item>color_selection</item>\n      <item>file_selection</item>\n      <item>font_selection_dialog</item>\n      <item>Error</item>\n      <item>Info</item>\n      <item>Question</item>\n      <item>Warn</item>\n      <item>YesNo</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+for\\b\" endRegion=\"regFor\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bfor\\b\" beginRegion=\"regFor\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+if\\b\" endRegion=\"regIf\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bif\\b\" beginRegion=\"regIf\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+function\\b\" endRegion=\"regFunction\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bfunction\\b\" beginRegion=\"regFunction\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+procedure\\b\" endRegion=\"regProcedure\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bprocedure\\b\" beginRegion=\"regProcedure\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+while\\b\" endRegion=\"regWhile\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bwhile\\b\" beginRegion=\"regWhile\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s+type\\b\" endRegion=\"regType\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\btype\\b\" beginRegion=\"regType\"/>\n\n        <keyword attribute=\"Constants\" context=\"#stay\" String=\"constants\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"GtkKeyword\" context=\"#stay\" String=\"GtkKeywords\"/>\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"--\\s*BEGIN.*\" beginRegion=\"regMarker\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"--\\s*END.*\" endRegion=\"regMarker\" firstNonSpace=\"true\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"-\" char1=\"-\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"     defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keyword\"         defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Constants\"       defStyleNum=\"dsConstant\" />\n      <itemData name=\"GtkKeyword\"      defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Type\"            defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Number\"          defStyleNum=\"dsDecVal\" />\n      <itemData name=\"String\"          defStyleNum=\"dsString\" />\n      <itemData name=\"Comment\"         defStyleNum=\"dsComment\" />\n      <itemData name=\"Region Marker\"   defStyleNum=\"dsRegionMarker\" />\n    </itemDatas>\n\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n       <comment name=\"singleLine\" start=\"--\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fasm.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\"Intel x86 (FASM)\" is based on ver. 1.3 of \"Intel x86 (NASM)\" by Nicola Gigante and Bogdan Drozdowski\n\nKnown issues:\n* Does not include all 64-bit registers and instructions\n* \"near\" and \"far\" as in \"jmp near MyLabel\" is unhandeled.\n* Confuses and,or,not,xor,shl instructions,with operators with same name, e.g. \"2 shl 4\"\n* May confuse ah,bh,ch,dh with hexadecimal numbers.\n\nNotes:\n* \"used\" and \"defined\" are treated opperators and are not highlighted.\n-->\n\n<language name=\"Intel x86 (FASM)\" section=\"Assembler\" version=\"2\" kateversion=\"5.0\" extensions=\"*.asm;*.inc;*.fasm\" mimetype=\"\" author=\"rCX (rCX12@yahoo.com)\" license=\"GPL\">\n  <highlighting>\n    <list name=\"registers\">\n      <!-- General purpose registers -->\n      <item>rax</item>\n      <item>eax</item>\n      <item>ax</item>\n      <item>ah</item>\n      <item>al</item>\n      <item>rbx</item>\n      <item>ebx</item>\n      <item>bx</item>\n      <item>bh</item>\n      <item>bl</item>\n      <item>rcx</item>\n      <item>ecx</item>\n      <item>cx</item>\n      <item>ch</item>\n      <item>cl</item>\n      <item>rdx</item>\n      <item>edx</item>\n      <item>dx</item>\n      <item>dh</item>\n      <item>dl</item>\n      <item>rbp</item>\n      <item>ebp</item>\n      <item>bp</item>\n      <item>rsi</item>\n      <item>esi</item>\n      <item>si</item>\n      <item>rdi</item>\n      <item>edi</item>\n      <item>di</item>\n      <item>rsp</item>\n      <item>esp</item>\n      <item>sp</item>\n      <item>r8</item>\n      <item>r9</item>\n      <item>r10</item>\n      <item>r11</item>\n      <item>r12</item>\n      <item>r13</item>\n      <item>r14</item>\n      <item>r15</item>\n      <!-- Segmentation registers -->\n      <item>cs</item>\n      <item>ds</item>\n      <item>es</item>\n      <item>fs</item>\n      <item>gs</item>\n      <item>ss</item>\n      <!-- Control registers -->\n      <item>cr0</item>\n      <!--<item>cr1</item>-->\n      <item>cr2</item>\n      <item>cr3</item>\n      <item>cr4</item>\n      <!-- Debug registers -->\n      <item>dr0</item>\n      <item>dr1</item>\n      <item>dr2</item>\n      <item>dr3</item>\n      <item>dr6</item>\n      <item>dr7</item>\n      <!-- x87 FPU Registers -->\n      <item>st</item>\n      <!-- MMX registers -->\n      <item>mm0</item>\n      <item>mm1</item>\n      <item>mm2</item>\n      <item>mm3</item>\n      <item>mm4</item>\n      <item>mm5</item>\n      <item>mm6</item>\n      <item>mm7</item>\n      <!-- XMM registers -->\n      <item>xmm0</item>\n      <item>xmm1</item>\n      <item>xmm2</item>\n      <item>xmm3</item>\n      <item>xmm4</item>\n      <item>xmm5</item>\n      <item>xmm6</item>\n      <item>xmm7</item>\n    </list>\n    <list name=\"instructions\">\n      <item>aaa</item>\n      <item>aad</item>\n      <item>aam</item>\n      <item>aas</item>\n      <item>adc</item>\n      <item>add</item>\n      <item>addpd</item>\n      <item>addps</item>\n      <item>addsd</item>\n      <item>addss</item>\n      <item>addsubpd</item>\n      <item>addsubps</item>\n      <item>and</item>\n      <item>andnpd</item>\n      <item>andnps</item>\n      <item>andpd</item>\n      <item>andps</item>\n      <item>arpl</item>\n      <item>bound</item>\n      <item>bsf</item>\n      <item>bsr</item>\n      <item>bswap</item>\n      <item>bt</item>\n      <item>btc</item>\n      <item>btr</item>\n      <item>bts</item>\n      <item>call</item>\n      <item>cbw</item>\n      <item>cwde</item>\n      <item>cwd</item>\n      <item>cdq</item>\n      <item>cdqe</item>\n      <item>cqo</item>\n      <item>clc</item>\n      <item>cld</item>\n      <item>clgi</item>\n      <item>cli</item>\n      <item>clts</item>\n      <item>clflush</item>\n      <item>cmc</item>\n      <item>cmova</item>\n      <item>cmovae</item>\n      <item>cmovb</item>\n      <item>cmovbe</item>\n      <item>cmovc</item>\n      <item>cmove</item>\n      <item>cmovg</item>\n      <item>cmovge</item>\n      <item>cmovl</item>\n      <item>cmovle</item>\n      <item>cmovna</item>\n      <item>cmovnae</item>\n      <item>cmovnb</item>\n      <item>cmovnbe</item>\n      <item>cmovnc</item>\n      <item>cmovne</item>\n      <item>cmovng</item>\n      <item>cmovnge</item>\n      <item>cmovnl</item>\n      <item>cmovnle</item>\n      <item>cmovno</item>\n      <item>cmovnp</item>\n      <item>cmovns</item>\n      <item>cmovnz</item>\n      <item>cmovo</item>\n      <item>cmovp</item>\n      <item>cmovpe</item>\n      <item>cmovpo</item>\n      <item>cmovs</item>\n      <item>cmovz</item>\n      <item>cmp</item>\n      <item>cmpeqpd</item>\n      <item>cmpeqps</item>\n      <item>cmpeqsd</item>\n      <item>cmpeqss</item>\n      <item>cmplepd</item>\n      <item>cmpleps</item>\n      <item>cmplesd</item>\n      <item>cmpless</item>\n      <item>cmpltpd</item>\n      <item>cmpltps</item>\n      <item>cmpltsd</item>\n      <item>cmpltss</item>\n      <item>cmpneqpd</item>\n      <item>cmpneqps</item>\n      <item>cmpneqsd</item>\n      <item>cmpneqss</item>\n      <item>cmpnlepd</item>\n      <item>cmpnleps</item>\n      <item>cmpnlesd</item>\n      <item>cmpnless</item>\n      <item>cmpnltpd</item>\n      <item>cmpnltps</item>\n      <item>cmpnltsd</item>\n      <item>cmpnltss</item>\n      <item>cmpordpd</item>\n      <item>cmpordps</item>\n      <item>cmpordsd</item>\n      <item>cmpordss</item>\n      <item>cmppd</item>\n      <item>cmpps</item>\n      <item>cmps</item>\n      <item>cmpsb</item>\n      <item>cmpsd</item>\n      <item>cmpss</item>\n      <item>cmpsw</item>\n      <item>cmpunordpd</item>\n      <item>cmpunordps</item>\n      <item>cmpunordsd</item>\n      <item>cmpunordss</item>\n      <item>cmpxchg</item>\n      <item>cmpxchg486</item>\n      <item>cmpxchg8b</item>\n      <item>cmpxchg16b</item>\n      <item>comisd</item>\n      <item>comiss</item>\n      <item>cpuid</item>\n      <item>cvtdq2pd</item>\n      <item>cvtdq2ps</item>\n      <item>cvtpd2dq</item>\n      <item>cvtpd2pi</item>\n      <item>cvtpd2ps</item>\n      <item>cvtpi2pd</item>\n      <item>cvtpi2ps</item>\n      <item>cvtps2dq</item>\n      <item>cvtps2pd</item>\n      <item>cvtps2pi</item>\n      <item>cvtsd2si</item>\n      <item>cvtsd2ss</item>\n      <item>cvtsi2sd</item>\n      <item>cvtsi2ss</item>\n      <item>cvtss2sd</item>\n      <item>cvtss2si</item>\n      <item>cvttpd2dq</item>\n      <item>cvttpd2pi</item>\n      <item>cvttps2dq</item>\n      <item>cvttps2pi</item>\n      <item>cvttsd2si</item>\n      <item>cvttss2si</item>\n      <item>daa</item>\n      <item>das</item>\n      <item>dec</item>\n      <item>div</item>\n      <item>divpd</item>\n      <item>divps</item>\n      <item>divsd</item>\n      <item>divss</item>\n      <item>emms</item>\n      <item>enter</item>\n      <item>f2xm1</item>\n      <item>fabs</item>\n      <item>fadd</item>\n      <item>faddp</item>\n      <item>fbld</item>\n      <item>fbstp</item>\n      <item>fchs</item>\n      <item>fclex</item>\n      <item>fnclex</item>\n      <item>fcmovb</item>\n      <item>fcmovbe</item>\n      <item>fcmove</item>\n      <item>fcmovnb</item>\n      <item>fcmovnbe</item>\n      <item>fcmovne</item>\n      <item>fcmovnu</item>\n      <item>fcmovu</item>\n      <item>fcom</item>\n      <item>fcomp</item>\n      <item>fcompp</item>\n      <item>fcomi</item>\n      <item>fcomip</item>\n      <item>fcos</item>\n      <item>fdecstp</item>\n      <item>fdisi</item>\n      <item>feni</item>\n      <item>fdiv</item>\n      <item>fdivr</item>\n      <item>fdivp</item>\n      <item>fdivrp</item>\n      <item>femms</item>\n      <item>ffree</item>\n      <item>ffreep</item>\n      <item>fiadd</item>\n      <item>ficom</item>\n      <item>ficomp</item>\n      <item>fidiv</item>\n      <item>fidivr</item>\n      <item>fild</item>\n      <item>fimul</item>\n      <item>fincstp</item>\n      <item>finit</item>\n      <item>fist</item>\n      <item>fistp</item>\n      <item>fisttp</item>\n      <item>fisub</item>\n      <item>fisubr</item>\n      <item>fld</item>\n      <item>fld1</item>\n      <item>fldl2e</item>\n      <item>fldl2t</item>\n      <item>fldlg2</item>\n      <item>fldln2</item>\n      <item>fldcw</item>\n      <item>fldenv</item>\n      <item>fldpi</item>\n      <item>fldz</item>\n      <item>fmul</item>\n      <item>fmulp</item>\n      <item>fndisi</item>\n      <item>fneni</item>\n      <item>fninit</item>\n      <item>fnop</item>\n      <item>fnsave</item>\n      <item>fnstcw</item>\n      <item>fnstenv</item>\n      <item>fnstsw</item>\n      <item>fnwait</item>\n      <item>fpatan</item>\n      <item>fptan</item>\n      <item>fprem</item>\n      <item>fprem1</item>\n      <item>frndint</item>\n      <item>frstor</item>\n      <item>fsave</item>\n      <item>fscale</item>\n      <item>fsetpm</item>\n      <item>fsin</item>\n      <item>fsincos</item>\n      <item>fsqrt</item>\n      <item>fst</item>\n      <item>fstp</item>\n      <item>fstcw</item>\n      <item>fstenv</item>\n      <item>fstsw</item>\n      <item>fsub</item>\n      <item>fsubr</item>\n      <item>fsubp</item>\n      <item>fsubrp</item>\n      <item>ftst</item>\n      <item>fucom</item>\n      <item>fucomp</item>\n      <item>fucompp</item>\n      <item>fucomi</item>\n      <item>fucomip</item>\n      <item>fwait</item>\n      <item>fxam</item>\n      <item>fxch</item>\n      <item>fxrstor</item>\n      <item>fxsave</item>\n      <item>fxtract</item>\n      <item>fyl2x</item>\n      <item>fyl2xp1</item>\n      <item>haddpd</item>\n      <item>haddps</item>\n      <item>hlt</item>\n      <item>hsubpd</item>\n      <item>hsubps</item>\n      <item>ibts</item>\n      <item>idiv</item>\n      <item>imul</item>\n      <item>in</item>\n      <item>inc</item>\n      <item>ins</item>\n      <item>insb</item>\n      <item>insd</item>\n      <item>insw</item>\n      <item>int</item>\n      <item>int1</item>\n      <item>int3</item>\n      <item>into</item>\n      <item>invd</item>\n      <item>invlpg</item>\n      <item>invlpga</item>\n      <item>iret</item>\n      <item>iretd</item>\n      <item>iretq</item>\n      <item>iretw</item>\n      <item>ja</item>\n      <item>jae</item>\n      <item>jb</item>\n      <item>jbe</item>\n      <item>jc</item>\n      <item>je</item>\n      <item>jg</item>\n      <item>jge</item>\n      <item>jl</item>\n      <item>jle</item>\n      <item>jna</item>\n      <item>jnae</item>\n      <item>jnb</item>\n      <item>jnbe</item>\n      <item>jnc</item>\n      <item>jne</item>\n      <item>jng</item>\n      <item>jnge</item>\n      <item>jnl</item>\n      <item>jnle</item>\n      <item>jno</item>\n      <item>jnp</item>\n      <item>jns</item>\n      <item>jnz</item>\n      <item>jo</item>\n      <item>jp</item>\n      <item>jpe</item>\n      <item>jpo</item>\n      <item>js</item>\n      <item>jz</item>\n      <item>jcxz</item>\n      <item>jecxz</item>\n      <item>jrcxz</item>\n      <item>jmp</item>\n      <item>lahf</item>\n      <item>lar</item>\n      <item>lddqu</item>\n      <item>ldmxcsr</item>\n      <item>lds</item>\n      <item>les</item>\n      <item>lea</item>\n      <item>leave</item>\n      <item>lfence</item>\n      <item>lfs</item>\n      <item>lgdt</item>\n      <item>lgs</item>\n      <item>lidt</item>\n      <item>lldt</item>\n      <item>lmsw</item>\n      <item>loadall</item>\n      <item>loadall286</item>\n      <item>lods</item>\n      <item>lodsb</item>\n      <item>lodsd</item>\n      <item>lodsq</item>\n      <item>lodsw</item>\n      <item>loop</item>\n      <item>loope</item>\n      <item>loopne</item>\n      <item>loopnz</item>\n      <item>loopz</item>\n      <item>lsl</item>\n      <item>lss</item>\n      <item>ltr</item>\n      <item>maskmovdqu</item>\n      <item>maskmovq</item>\n      <item>maxpd</item>\n      <item>maxps</item>\n      <item>maxsd</item>\n      <item>maxss</item>\n      <item>mfence</item>\n      <item>minpd</item>\n      <item>minps</item>\n      <item>minsd</item>\n      <item>minss</item>\n      <item>monitor</item>\n      <item>mov</item>\n      <item>movapd</item>\n      <item>movaps</item>\n      <item>movd</item>\n      <item>movddup</item>\n      <item>movdq2q</item>\n      <item>movdqa</item>\n      <item>movdqu</item>\n      <item>movhlps</item>\n      <item>movhpd</item>\n      <item>movhps</item>\n      <item>movlhps</item>\n      <item>movlpd</item>\n      <item>movlps</item>\n      <item>movmskpd</item>\n      <item>movmskps</item>\n      <item>movntdq</item>\n      <item>movnti</item>\n      <item>movntpd</item>\n      <item>movntps</item>\n      <item>movntq</item>\n      <item>movq</item>\n      <item>movq2dq</item>\n      <item>movs</item>\n      <item>movsb</item>\n      <item>movsd</item>\n      <item>movshdup</item>\n      <item>movsldup</item>\n      <item>movsq</item>\n      <item>movss</item>\n      <item>movsx</item>\n      <item>movsxd</item>\n      <item>movsw</item>\n      <item>movupd</item>\n      <item>movups</item>\n      <item>movzx</item>\n      <item>mul</item>\n      <item>mulpd</item>\n      <item>mulps</item>\n      <item>mulsd</item>\n      <item>mulss</item>\n      <item>mwait</item>\n      <item>neg</item>\n      <item>nop</item>\n      <item>not</item>\n      <item>or</item>\n      <item>orpd</item>\n      <item>orps</item>\n      <item>out</item>\n      <item>outs</item>\n      <item>outsb</item>\n      <item>outsw</item>\n      <item>outsd</item>\n      <item>packssdw</item>\n      <item>packsswb</item>\n      <item>packuswb</item>\n      <item>paddb</item>\n      <item>paddd</item>\n      <item>paddq</item>\n      <item>paddsb</item>\n      <item>paddsw</item>\n      <item>paddusb</item>\n      <item>paddusw</item>\n      <item>paddw</item>\n      <item>pand</item>\n      <item>pandn</item>\n      <item>pause</item>\n      <item>pavgb</item>\n      <item>pavgusb</item>\n      <item>pavgw</item>\n      <item>pcmpeqb</item>\n      <item>pcmpeqw</item>\n      <item>pcmpeqd</item>\n      <item>pcmpgtb</item>\n      <item>pcmpgtw</item>\n      <item>pcmpgtd</item>\n      <item>pdistib</item>\n      <item>pextrw</item>\n      <item>pf2id</item>\n      <item>pf2iw</item>\n      <item>pfacc</item>\n      <item>pfadd</item>\n      <item>pfcmpeq</item>\n      <item>pfcmpge</item>\n      <item>pfcmpgt</item>\n      <item>pfmax</item>\n      <item>pfmin</item>\n      <item>pfmul</item>\n      <item>pfnacc</item>\n      <item>pfpnacc</item>\n      <item>pfrcp</item>\n      <item>pfrcpit1</item>\n      <item>pfrcpit2</item>\n      <item>pfrsqit1</item>\n      <item>pfrsqrt</item>\n      <item>pfsub</item>\n      <item>pfsubr</item>\n      <item>pi2fd</item>\n      <item>pi2fw</item>\n      <item>pinsrw</item>\n      <item>pmachriw</item>\n      <item>pmaddwd</item>\n      <item>pmagw</item>\n      <item>pmaxsw</item>\n      <item>pmaxub</item>\n      <item>pminsw</item>\n      <item>pminub</item>\n      <item>pmovmskb</item>\n      <item>pmulhrw</item>\n      <item>pmulhuw</item>\n      <item>pmulhw</item>\n      <item>pmullw</item>\n      <item>pmuludq</item>\n      <item>pmvgezb</item>\n      <item>pmvlzb</item>\n      <item>pmvnzb</item>\n      <item>pmvzb</item>\n      <item>pop</item>\n      <item>popa</item>\n      <item>popaw</item>\n      <item>popad</item>\n      <item>popf</item>\n      <item>popfw</item>\n      <item>popfd</item>\n      <item>popfq</item>\n      <item>por</item>\n      <item>prefetch</item>\n      <item>prefetchnta</item>\n      <item>prefetcht0</item>\n      <item>prefetcht1</item>\n      <item>prefetcht2</item>\n      <item>prefetchw</item>\n      <item>psadbw</item>\n      <item>pshufd</item>\n      <item>pshufhw</item>\n      <item>pshuflw</item>\n      <item>pshufw</item>\n      <item>pslld</item>\n      <item>pslldq</item>\n      <item>psllq</item>\n      <item>psllw</item>\n      <item>psrad</item>\n      <item>psraw</item>\n      <item>psrld</item>\n      <item>psrldq</item>\n      <item>psrlq</item>\n      <item>psrlw</item>\n      <item>psubb</item>\n      <item>psubd</item>\n      <item>psubq</item>\n      <item>psubsb</item>\n      <item>psubsiw</item>\n      <item>psubsw</item>\n      <item>psubusb</item>\n      <item>psubusw</item>\n      <item>psubw</item>\n      <item>pswapd</item>\n      <item>punpckhbw</item>\n      <item>punpckhdq</item>\n      <item>punpckhqdq</item>\n      <item>punpckhwd</item>\n      <item>punpcklbw</item>\n      <item>punpckldq</item>\n      <item>punpcklqdq</item>\n      <item>punpcklwd</item>\n      <item>push</item>\n      <item>pusha</item>\n      <item>pushad</item>\n      <item>pushaw</item>\n      <item>pushf</item>\n      <item>pushfd</item>\n      <item>pushfq</item>\n      <item>pushfw</item>\n      <item>pxor</item>\n      <item>rcl</item>\n      <item>rcr</item>\n      <item>rcpps</item>\n      <item>rcpss</item>\n      <item>rdmsr</item>\n      <item>rdpmc</item>\n      <item>rdshr</item>\n      <item>rdtsc</item>\n      <item>rdtscp</item>\n      <item>ret</item>\n      <item>retf</item>\n      <item>retn</item>\n      <item>rol</item>\n      <item>ror</item>\n      <item>rsdc</item>\n      <item>rsldt</item>\n      <item>rsm</item>\n      <item>rsqrtps</item>\n      <item>rsqrtss</item>\n      <item>rsts</item>\n      <item>sahf</item>\n      <item>sal</item>\n      <item>sar</item>\n      <item>salc</item>\n      <item>sbb</item>\n      <item>scas</item>\n      <item>scasb</item>\n      <item>scasd</item>\n      <item>scasq</item>\n      <item>scasw</item>\n      <item>seta</item>\n      <item>setae</item>\n      <item>setb</item>\n      <item>setbe</item>\n      <item>setc</item>\n      <item>sete</item>\n      <item>setg</item>\n      <item>setge</item>\n      <item>setl</item>\n      <item>setle</item>\n      <item>setna</item>\n      <item>setnae</item>\n      <item>setnb</item>\n      <item>setnbe</item>\n      <item>setnc</item>\n      <item>setne</item>\n      <item>setng</item>\n      <item>setnge</item>\n      <item>setnl</item>\n      <item>setnle</item>\n      <item>setno</item>\n      <item>setnp</item>\n      <item>setns</item>\n      <item>setnz</item>\n      <item>seto</item>\n      <item>setp</item>\n      <item>setpe</item>\n      <item>setpo</item>\n      <item>sets</item>\n      <item>setz</item>\n      <item>sfence</item>\n      <item>sgdt</item>\n      <item>shl</item>\n      <item>shld</item>\n      <item>shr</item>\n      <item>shrd</item>\n      <item>shufpd</item>\n      <item>shufps</item>\n      <item>sidt</item>\n      <item>skinit</item>\n      <item>sldt</item>\n      <item>smi</item>\n      <item>smint</item>\n      <item>smintold</item>\n      <item>smsw</item>\n      <item>sqrtpd</item>\n      <item>sqrtps</item>\n      <item>sqrtsd</item>\n      <item>sqrtss</item>\n      <item>stc</item>\n      <item>std</item>\n      <item>stgi</item>\n      <item>sti</item>\n      <item>stmxcsr</item>\n      <item>stos</item>\n      <item>stosb</item>\n      <item>stosd</item>\n      <item>stosq</item>\n      <item>stosw</item>\n      <item>str</item>\n      <item>sub</item>\n      <item>subpd</item>\n      <item>subps</item>\n      <item>subsd</item>\n      <item>subss</item>\n      <item>svdc</item>\n      <item>svldt</item>\n      <item>svts</item>\n      <item>swapgs</item>\n      <item>syscall</item>\n      <item>sysenter</item>\n      <item>sysexit</item>\n      <item>sysret</item>\n      <item>test</item>\n      <item>ucomisd</item>\n      <item>ucomiss</item>\n      <item>ud0</item>\n      <item>ud1</item>\n      <item>ud2</item>\n      <item>umov</item>\n      <item>unpckhpd</item>\n      <item>unpckhps</item>\n      <item>unpcklpd</item>\n      <item>unpcklps</item>\n      <item>verr</item>\n      <item>verw</item>\n      <item>vmload</item>\n      <item>vmmcall</item>\n      <item>vmrun</item>\n      <item>vmsave</item>\n      <item>wait</item>\n      <item>wbinvd</item>\n      <item>wrmsr</item>\n      <item>wrshr</item>\n      <item>xadd</item>\n      <item>xbts</item>\n      <item>xchg</item>\n      <item>xlat</item>\n      <item>xlatb</item>\n      <item>xor</item>\n      <item>xorpd</item>\n      <item>xorps</item>\n    </list>\n\n    <list name=\"Data\">\n      <!-- Initialized data (1.2.2)-->\n      <item>db</item>\n      <item>dw</item>\n      <item>du</item>\n      <item>dd</item>\n      <item>dp</item>\n      <item>df</item>\n      <item>dq</item>\n      <item>dt</item>\n      <!-- Uninitialized data (1.2.2)-->\n      <item>rb</item>\n      <item>rw</item>\n      <item>rd</item>\n      <item>rp</item>\n      <item>rf</item>\n      <item>rq</item>\n      <item>rt</item>\n      <!-- binary file include (1.2.2)-->\n      <item>file</item>\n      <!-- operand size from (1.2.1)-->\n      <item>byte</item>\n      <item>word</item>\n      <item>dword</item>\n      <item>pword</item>\n      <item>qword</item>\n      <item>tbyte</item>\n      <item>tword</item>\n      <item>dqword</item>\n      <item>ptr</item>\n    </list>\n\n    <list name=\"Preprocessor Keywords\"> <!-- Contains keywords for macros, structures, etc... -->\n      <item>append</item>\n      <item>at</item>   <!-- As in \"virtual at\"-->\n      <item>break</item>\n      <item>common</item>\n      <item>display</item>\n      <item>else</item>\n      <item>end</item> <!-- As in \"end if\"-->\n      <item>equ</item>\n      <item>fix</item>\n      <item>foward</item>\n      <item>if</item>\n      <item>irp</item>\n      <item>irps</item>\n      <item>label</item>\n      <item>local</item>\n      <item>match</item>\n      <item>macro</item>\n      <item>purge</item>\n      <item>repeat</item>\n      <item>rept</item>\n      <item>reverse</item>\n      <item>restore</item>\n      <item>struc</item>\n      <item>times</item>\n      <item>while</item>\n      <item>virtual</item>\n    </list>\n\n    <list name=\"Instruction-like Keywords\"> <!-- Contains instruction-like keywords -->\n      <item>align</item>\n      <item>entry</item>\n      <item>extrn</item>\n      <item>format</item>\n      <item>include</item>\n      <item>invoke</item>\n      <item>data</item>\n      <item>load</item>\n      <item>from</item>\n      <item>heap</item>\n      <item>org</item>\n      <item>proc</item>\n      <item>public</item>\n      <item>section</item>\n      <item>segment</item>\n      <item>stack</item>\n      <item>store</item>\n      <item>use16</item>\n      <item>use32</item>\n      <item>use64</item>\n    </list>\n\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Registers\" context=\"#stay\" String=\"registers\"/>\n        <keyword attribute=\"Data\" context=\"#stay\" String=\"Data\"/>\n        <keyword attribute=\"Instructions\" context=\"#stay\" String=\"instructions\"/>\n        <keyword attribute=\"Instructions\" context=\"#stay\" String=\"Instruction-like Keywords\"/>\n        <keyword attribute=\"Preprocessor\" context=\"#stay\" String=\"Preprocessor Keywords\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n        <AnyChar attribute=\"String\" context=\"String\" String=\"&quot;'\"/>\n        <RegExpr attribute=\"Label\" context=\"#stay\" String=\"^\\s*[A-Za-z0-9@_.$?]+:\"/>\n        <!-- Conditional instructions -->\n        <RegExpr attribute=\"Instructions\" context=\"#stay\" String=\"(cmov|fcmov|j|loop|set)(a|ae|b|be|c|e|g|ge|l|le|na|nae|nb|nbe|nc|ne|ng|nge|nl|nle|no|np|ns|nz|o|p|pe|po|s|z)\"/>\n        <!-- hexadecimal numbers -->\n        <RegExpr attribute=\"BaseN\" context=\"#stay\" insensitive=\"true\" String=\"(^|[ \\t,]+)((\\$|0x){1}[0-9]+[a-f0-9]*|[a-f0-9]+h)([ \\t,]+|$)\"/>\n        <!-- octal and binary numbers -->\n        <RegExpr attribute=\"BaseN\" context=\"#stay\" insensitive=\"true\" String=\"(^|[ \\t,]+)([0-7]+(q|o)|[01]+b)([ \\t,]+|$)\"/>\n        <DetectChar attribute=\"Number\" context=\"#stay\" char=\"$\"/>\n        <HlCOct attribute=\"BaseN\" context=\"#stay\"/>\n        <HlCHex attribute=\"BaseN\" context=\"#stay\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n      </context>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n        <AnyChar attribute=\"String\" context=\"#pop\" String=\"&quot;'\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Registers\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Instructions\" defStyleNum=\"dsBuiltIn\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Label\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Data\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"BaseN\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";\"/>\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fastq.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"FASTQ\" version=\"2\" kateversion=\"5.0\" section=\"Scientific\" extensions=\"*.fastq;*.fq;*.fastq.gz;*.fq.gz\" mimetype=\"text/x-fastq\" author=\"Philipp A\" license=\"GPL\">\n\t<highlighting>\n\t\t<contexts>\n\t\t\t<context attribute=\"SeqStart\" lineEndContext=\"#stay\" name=\"SeqStart\">\n\t\t\t\t<DetectChar attribute=\"SeqHeaderStart\" context=\"#pop!SeqHeader\" char=\"@\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"SeqHeader\" lineEndContext=\"#pop!Seq\" name=\"SeqHeader\" />\n\t\t\t<context attribute=\"Seq\" lineEndContext=\"#pop!QualStart\" name=\"Seq\">\n\t\t\t\t<RegExpr attribute=\"Error\" String=\"[^ATGCNatgcn]\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"QualStart\" lineEndContext=\"#stay\" name=\"QualStart\">\n\t\t\t\t<DetectChar attribute=\"QualHeaderStart\" context=\"#pop!QualHeader\" char=\"+\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"QualHeader\" lineEndContext=\"#pop!Qual\" name=\"QualHeader\" />\n\t\t\t<context attribute=\"Qual\" lineEndContext=\"#pop\" name=\"Qual\">\n\t\t\t\t<RegExpr attribute=\"Error\" String=\"[^!&quot;#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\[\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~]\" />\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"SeqStart\"        defStyleNum=\"dsError\"         spellChecking=\"false\" />\n\t\t\t<itemData name=\"SeqHeaderStart\"  defStyleNum=\"dsSpecialChar\"   spellChecking=\"false\" />\n\t\t\t<itemData name=\"SeqHeader\"       defStyleNum=\"dsVariable\"      spellChecking=\"false\" />\n\t\t\t<itemData name=\"Seq\"             defStyleNum=\"dsString\"        spellChecking=\"false\" />\n\t\t\t<itemData name=\"QualStart\"       defStyleNum=\"dsError\"         spellChecking=\"false\" />\n\t\t\t<itemData name=\"QualHeaderStart\" defStyleNum=\"dsSpecialChar\"   spellChecking=\"false\" />\n\t\t\t<itemData name=\"QualHeader\"      defStyleNum=\"dsComment\"       spellChecking=\"false\" />\n\t\t\t<itemData name=\"Qual\"            defStyleNum=\"dsSpecialString\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"Error\"           defStyleNum=\"dsError\"         spellChecking=\"false\" />\n\t\t</itemDatas>\n\t</highlighting>\n</language>\n\n<!-- kate: tab-width 2; replace-tabs off; indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ferite.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"ferite\" version=\"4\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.fe;*.feh\" mimetype=\"text/x-ferite-src\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>else</item>\n      <item>for</item>\n      <item>if</item>\n      <item>do</item>\n      <item>function</item>\n      <item>namespace</item>\n      <item>while</item>\n      <item>class</item>\n      <item>new</item>\n      <item>uses</item>\n      <item>global</item>\n      <item>return</item>\n      <item>self</item>\n      <item>super</item>\n      <item>null</item>\n      <item>iferr</item>\n      <item>fix</item>\n    </list>\n    <list name=\"types\">\n      <item>number</item>\n      <item>void</item>\n      <item>string</item>\n      <item>array</item>\n      <item>object</item>\n      <item>final</item>\n      <item>static</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Default\" >\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\" />\n        <HlCHex attribute=\"Hex\" context=\"#stay\" />\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Multiline Comment\" char=\"/\" char1=\"*\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^{|}~\"/>\n        <StringDetect attribute=\"Comment\" context=\"Undeffed\" String=\"#if 0\" insensitive=\"false\"/>\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\" column=\"0\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multiline Comment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Multiline Comment 2\" char=\"/\" char1=\"*\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multiline Comment 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Undeffed\">\n          <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n          <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"#endif\" column=\"0\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Prep. Lib\"  defStyleNum=\"dsImport\"/>\n      <itemData name=\"Alert\"        defStyleNum=\"dsAlert\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fgl-4gl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"4GL\" version=\"4\" kateversion=\"5.0\" section=\"Database\" extensions=\"*.4gl;*.4GL;*.err\" mimetype=\"text/x-4glsrc;text/x-4glerr\" author=\"Andrej Falout (andrej@falout.org)\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>at</item>\n      <item>by</item>\n      <item>go</item>\n      <item>if</item>\n      <item>in</item>\n      <item>is</item>\n      <item>no</item>\n      <item>of</item>\n      <item>on</item>\n      <item>or</item>\n      <item>to</item>\n      <item>up</item>\n\n      <item>add</item>\n      <item>ALL</item>\n      <item>and</item>\n      <item>ANY</item>\n      <item>avg</item>\n      <item>day</item>\n      <item>end</item>\n      <item>ESC</item>\n      <item>for</item>\n      <item>key</item>\n      <item>let</item>\n      <item>log</item>\n      <item>max</item>\n      <item>mdy</item>\n      <item>min</item>\n      <item>not</item>\n      <item>put</item>\n      <item>red</item>\n      <item>row</item>\n      <item>run</item>\n      <item>set</item>\n      <item>sum</item>\n      <item>top</item>\n\n      <item>blue</item>\n      <item>BOLD</item>\n      <item>call</item>\n      <item>case</item>\n      <item>cyan</item>\n      <item>desc</item>\n      <item>DROP</item>\n      <item>else</item>\n      <item>exit</item>\n      <item>file</item>\n      <item>form</item>\n      <item>FREE</item>\n      <item>from</item>\n      <item>goto</item>\n      <item>help</item>\n      <item>HIDE</item>\n      <item>HOLD</item>\n      <item>HOUR</item>\n      <item>into</item>\n      <item>last</item>\n      <item>left</item>\n      <item>like</item>\n      <item>line</item>\n      <item>load</item>\n      <item>LOCK</item>\n      <item>main</item>\n      <item>menu</item>\n      <item>MODE</item>\n      <item>name</item>\n      <item>NEED</item>\n      <item>next</item>\n      <item>null</item>\n      <item>open</item>\n      <item>page</item>\n      <item>PIPE</item>\n      <item>quit</item>\n      <item>READ</item>\n      <item>rows</item>\n      <item>show</item>\n      <item>skip</item>\n      <item>sort</item>\n      <item>STEP</item>\n      <item>STOP</item>\n      <item>TEMP</item>\n      <item>text</item>\n      <item>then</item>\n      <item>thru</item>\n      <item>true</item>\n      <item>user</item>\n      <item>WAIT</item>\n      <item>when</item>\n      <item>with</item>\n      <item>WORK</item>\n      <item>WRAP</item>\n      <item>year</item>\n\n      <item>after</item>\n      <item>alter</item>\n      <item>ascii</item>\n      <item>BEGIN</item>\n      <item>blink</item>\n      <item>clear</item>\n      <item>close</item>\n      <item>count</item>\n      <item>DEFER</item>\n      <item>DIRTY</item>\n      <item>error</item>\n      <item>every</item>\n      <item>false</item>\n      <item>fetch</item>\n      <item>field</item>\n      <item>first</item>\n      <item>flush</item>\n      <item>green</item>\n      <item>GROUP</item>\n      <item>index</item>\n      <item>input</item>\n      <item>label</item>\n      <item>lines</item>\n      <item>month</item>\n      <item>order</item>\n      <item>outer</item>\n      <item>pause</item>\n      <item>print</item>\n      <item>right</item>\n      <item>share</item>\n      <item>sleep</item>\n      <item>space</item>\n      <item>start</item>\n      <item>TABLE</item>\n      <item>today</item>\n      <item>union</item>\n      <item>UNITS</item>\n      <item>using</item>\n      <item>where</item>\n      <item>WHILE</item>\n      <item>white</item>\n\n      <item>ACCEPT</item>\n      <item>before</item>\n      <item>border</item>\n      <item>bottom</item>\n      <item>column</item>\n      <item>commit</item>\n      <item>create</item>\n      <item>cursor</item>\n      <item>define</item>\n      <item>delete</item>\n      <item>enable</item>\n      <item>ESCAPE</item>\n      <item>exists</item>\n      <item>finish</item>\n      <item>format</item>\n      <item>HAVING</item>\n      <item>header</item>\n      <item>insert</item>\n      <item>length</item>\n      <item>locate</item>\n      <item>margin</item>\n      <item>MINUTE</item>\n      <item>MODIFY</item>\n      <item>normal</item>\n      <item>option</item>\n      <item>output</item>\n      <item>PAGENO</item>\n      <item>prompt</item>\n      <item>record</item>\n      <item>report</item>\n      <item>return</item>\n      <item>revoke</item>\n      <item>SCREEN</item>\n      <item>scroll</item>\n      <item>SECOND</item>\n      <item>select</item>\n      <item>spaces</item>\n      <item>status</item>\n      <item>UNIQUE</item>\n      <item>UNLOAD</item>\n      <item>update</item>\n      <item>values</item>\n      <item>window</item>\n      <item>yellow</item>\n\n      <item>between</item>\n      <item>clipped</item>\n      <item>cluster</item>\n      <item>columns</item>\n      <item>command</item>\n      <item>comment</item>\n      <item>connect</item>\n      <item>CURRENT</item>\n      <item>declare</item>\n      <item>display</item>\n      <item>execute</item>\n      <item>foreach</item>\n      <item>globals</item>\n      <item>infield</item>\n      <item>MAGENTA</item>\n      <item>matches</item>\n      <item>message</item>\n      <item>options</item>\n      <item>prepare</item>\n      <item>printer</item>\n      <item>program</item>\n      <item>reverse</item>\n      <item>trailer</item>\n      <item>upshift</item>\n      <item>waiting</item>\n      <item>without</item>\n\n      <item>ABSOLUTE</item>\n      <item>continue</item>\n      <item>database</item>\n      <item>defaults</item>\n      <item>DISTINCT</item>\n      <item>EXTERNAL</item>\n      <item>function</item>\n      <item>INT_FLAG</item>\n      <item>NOTFOUND</item>\n      <item>previous</item>\n      <item>ROLLBACK</item>\n      <item>whenever</item>\n      <item>wordwrap</item>\n\n      <item>attribute</item>\n      <item>committed</item>\n      <item>construct</item>\n      <item>delimiter</item>\n      <item>downshift</item>\n      <item>exclusive</item>\n      <item>INTERRUPT</item>\n      <item>ISOLATION</item>\n      <item>otherwise</item>\n      <item>quit_flag</item>\n      <item>returning</item>\n\n      <item>attributes</item>\n      <item>CONSTRAINT</item>\n      <item>initialize</item>\n      <item>statistics</item>\n\n      <item>fgl_lastkey</item>\n      <item>formhandler</item>\n\n      <item>fgl_lastkey()</item>\n\n\n    </list>\n    <list name=\"types\">\n      <item>char</item>\n      <item>date</item>\n      <item>array</item>\n      <item>float</item>\n      <item>money</item>\n      <item>serial</item>\n      <item>DECIMAL</item>\n      <item>integer</item>\n      <item>NUMERIC</item>\n      <item>VARCHAR</item>\n      <item>DATETIME</item>\n      <item>FRACTION</item>\n      <item>INTERVAL</item>\n      <item>smallint</item>\n    </list>\n   <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text 1\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 1\" char=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 2\" char=\"{\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 1\" char=\"-\" char1=\"-\"/>\n<!--        <Detect2Chars attribute=\"Comment\" context=\"Comment 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 2\" char=\"/\" char1=\"*\"/>//-->\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^|~\"/>\n         <StringDetect attribute=\"Preprocessor\" context=\"Comment 4\" String=\"#if 0\" insensitive=\"false\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment 1\">\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 2\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"}\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 1\" char=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 2\" char=\"{\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 3\" char=\"/\" char1=\"*\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 3\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"}\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 4\">\n          <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n          <RegExpr attribute=\"Comment\" context=\"Comment 5\" String=\"#if\" />\n          <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#endif\" />\n          <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#else\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 5\">\n          <RegExpr attribute=\"Comment\" context=\"Comment 5\" String=\"#if\" />\n          <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#endif\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Prep. Lib\"  defStyleNum=\"dsImport\"/>\n      <itemData name=\"Alert\"        defStyleNum=\"dsAlert\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"{\" end=\"}\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n\n\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fgl-per.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"4GL-PER\" version=\"4\" kateversion=\"5.0\" section=\"Database\" extensions=\"*.per;*.PER;*.per.err\" mimetype=\"text/x-4glper;text/x-4glpererr\" author=\"Andrej Falout (andrej@falout.org)\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>by</item>\n      <item>to</item>\n\n      <item>end</item>\n      <item>not</item>\n      <item>red</item>\n\n      <item>blue</item>\n      <item>cyan</item>\n      <item>keys</item>\n      <item>like</item>\n      <item>null</item>\n      <item>size</item>\n      <item>type</item>\n\n      <item>black</item>\n      <item>color</item>\n      <item>green</item>\n      <item>input</item>\n      <item>today</item>\n      <item>white</item>\n\n      <item>format</item>\n      <item>record</item>\n      <item>screen</item>\n      <item>tables</item>\n      <item>yellow</item>\n\n      <item>default</item>\n      <item>display</item>\n      <item>include</item>\n      <item>magenta</item>\n      <item>noentry</item>\n      <item>picture</item>\n      <item>reverse</item>\n      <item>through</item>\n      <item>UPSHIFT</item>\n      <item>without</item>\n\n      <item>autonext</item>\n      <item>comments</item>\n      <item>COMPRESS</item>\n      <item>database</item>\n      <item>formonly</item>\n      <item>noupdate</item>\n      <item>required</item>\n      <item>WORDWRAP</item>\n\n      <item>character</item>\n      <item>downshift</item>\n      <item>invisible</item>\n      <item>underline</item>\n\n      <item>attributes</item>\n      <item>delimiters</item>\n\n      <item>instructions</item>\n    </list>\n    <list name=\"types\">\n      <item>char</item>\n      <item>date</item>\n      <item>array</item>\n      <item>float</item>\n      <item>money</item>\n      <item>serial</item>\n      <item>DECIMAL</item>\n      <item>integer</item>\n      <item>NUMERIC</item>\n      <item>VARCHAR</item>\n      <item>DATETIME</item>\n      <item>FRACTION</item>\n      <item>INTERVAL</item>\n      <item>smallint</item>\n    </list>\n   <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text 1\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 1\" char=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 2\" char=\"{\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 2\" char=\"/\" char1=\"*\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^|~\"/>\n         <StringDetect attribute=\"Preprocessor\" context=\"Comment 4\" String=\"#if 0\" insensitive=\"false\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment 1\">\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 2\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"}\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 1\" char=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment 2\" char=\"{\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 3\" char=\"/\" char1=\"*\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 3\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"}\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 4\">\n          <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n          <RegExpr attribute=\"Comment\" context=\"Comment 5\" String=\"#if\" />\n          <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#endif\" />\n          <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#else\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment 5\">\n          <RegExpr attribute=\"Comment\" context=\"Comment 5\" String=\"#if\" />\n          <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#endif\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Prep. Lib\"  defStyleNum=\"dsImport\"/>\n      <itemData name=\"Alert\"        defStyleNum=\"dsAlert\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"{\" end=\"}\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fish.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n        <!ENTITY white             \"\t \">                            <!-- first is tab -->\n        <!ENTITY eocommand         \"&white;&lt;&gt;^\">                 <!-- end of command separator -->\n        <!ENTITY allchars          \"[&white;!&quot;#$&#37;&amp;'()*+,-./0-9:;&lt;=&gt;?@A-Z[\\]\\\\^_`a-z{}|~]\"> <!--&percent; doesn't work -> &#37; -->\n        <!ENTITY separator         \"&white;|&amp;;&lt;&gt;()'&quot;\">  <!-- token separator as char list -->\n        <!ENTITY commandsep        \"|&amp;;\">                          <!-- command separator as char list -->\n        <!ENTITY special           \"{}*/.?\\\\$&amp;\">                   <!-- not allowed in function names -->\n        <!ENTITY portable_filename \"A-Za-z0-9\\._-\">\n        <!ENTITY funcname_first    \"a-zA-Z+:=!.@_`\">\n        <!ENTITY funcname_last     \"a-zA-Z0-9+,-:=!.@#&#37;^_`~\">\n        <!ENTITY funcname          \"[&funcname_first;]([&funcname_last;]|\\\\ )*\">\n        <!ENTITY varname           \"[A-Za-z0-9_]+\">\n        <!ENTITY alnumdash         \"[A-Za-z0-9-]\">                     <!-- option chars, dashes for GNU long opts -->\n        <!ENTITY testoptsfile      \"[bcdefgGkLOprsStuwx]\">             <!-- test operators for file testing -->\n        <!ENTITY testoptsother     \"[nzao]\">                           <!-- other test operators -->\n        <!ENTITY braceelement      \"[!#&#37;+\\-\\./0-9:=@A-Z^_`a-z~]\">\n        <!ENTITY escapechars       \"[abefnrtv $\\\\*?~&#37;#(){}[\\]&lt;&gt;\\^&amp;;&quot;&apos;]\">   <!-- escape chars -->\n        <!ENTITY white_or_eol      \"([&white;]|$)\">\n        <!ENTITY homedir           \"~[&portable_filename;]*\">\n        <!ENTITY pathdetect        \"((\\.\\.|\\.|&homedir;)&white_or_eol;|([^$\\\\{}&separator;/\\*\\?]|\\\\&escapechars;)*(/|\\*|\\*\\*|\\?))\">\n        <!ENTITY pathpart          \"(([^&separator;/]|\\\\&escapechars;)*)?(/|(?=&quot;)|(?='))\">\n]>\n\n\n<language name=\"Fish\" version=\"1\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.fish;fishd.*\" mimetype=\"application/x-fish\" casesensitive=\"1\" author=\"Arnd Diestelhorst (adiestelhorst@m-xchg.de)\" license=\"LGPL\">\n\n\n  <highlighting>\n\n    <list name= \"commands\">\n      <item>abbr</item>\n      <item>alias</item>\n      <item>argparse</item>\n      <item>bg</item>\n      <item>bind</item>\n      <item>block</item>\n      <item>cd</item>\n      <item>cdh</item>\n      <item>commandline</item>\n      <item>complete</item>\n      <item>contains</item>\n      <item>count</item>\n      <item>dirs</item>\n      <item>disown</item>\n      <item>echo</item>\n      <item>emit</item>\n      <item>end</item>\n      <item>exit</item>\n      <item>fg</item>\n      <item>fish</item>\n      <item>fish_config</item>\n      <item>fish_indent</item>\n      <item>fish_key_reader</item>\n      <item>fish_mode_prompt</item>\n      <item>fish_opt</item>\n      <item>fish_prompt</item>\n      <item>fish_right_prompt</item>\n      <item>fish_update_completions</item>\n      <item>fish_vi_mode</item>\n      <item>funced</item>\n      <item>funcsave</item>\n      <item>functions</item>\n      <item>help</item>\n      <item>history</item>\n      <item>isatty</item>\n      <item>jobs</item>\n      <item>math</item>\n      <item>nextd</item>\n      <item>open</item>\n      <item>prevd</item>\n      <item>printf</item>\n      <item>psub</item>\n      <item>pushd</item>\n      <item>random</item>\n      <item>realpath</item>\n      <item>return</item>\n      <item>set_color</item>\n      <item>source</item>\n      <item>status</item>\n      <item>suspend</item>\n      <item>trap</item>\n      <item>type</item>\n      <item>ulimit</item>\n      <item>umask</item>\n      <item>vared</item>\n    </list>\n\n    <list name=\"commandsnoargs\">\n      <item>break</item>\n      <item>breakpoint</item>\n      <item>continue</item>\n      <item>dirh</item>\n      <item>false</item> \n      <item>popd</item>\n      <item>prompt_pwd</item>\n      <item>pwd</item>\n      <item>true</item>\n    </list>\n\n    <list name=\"commandsstay\">\n      <item>and</item>\n      <item>not</item>\n      <item>or</item>\n    </list>\n\n    <list name=\"stringsubcommands\">\n      <item>escape</item>\n      <item>join</item>\n      <item>length</item>\n      <item>lower</item>\n      <item>match</item>\n      <item>repeat</item>\n      <item>replace</item>\n      <item>split</item>\n      <item>sub</item>\n      <item>trim</item>\n      <item>unescape</item>\n      <item>upper</item>\n    </list>\n\n    <list name=\"unixcommands\">\n      <item>aclocal</item>\n      <item>aconnect</item>\n      <item>aplay</item>\n      <item>apm</item>\n      <item>apmsleep</item>\n      <item>apropos</item>\n      <item>arch</item>\n      <item>arecord</item>\n      <item>ar</item>\n      <item>as86</item>\n      <item>as</item>\n      <item>autoconf</item>\n      <item>autoheader</item>\n      <item>automake</item>\n      <item>awk</item>\n      <item>basename</item>\n      <item>bash</item>\n      <item>bc</item>\n      <item>bison</item>\n      <item>bunzip2</item>\n      <item>bzcat</item>\n      <item>bzcmp</item>\n      <item>bzdiff</item>\n      <item>bzegrep</item>\n      <item>bzfgrep</item>\n      <item>bzgrep</item>\n      <item>bzip2</item>\n      <item>bzip2recover</item>\n      <item>bzless</item>\n      <item>bzmore</item>\n      <item>cal</item>\n      <item>cat</item>\n      <item>cc</item>\n      <item>cdda2wav</item>\n      <item>cdparanoia</item>\n      <item>cdrdao</item>\n      <item>cd-read</item>\n      <item>cdrecord</item>\n      <item>chattr</item>\n      <item>chfn</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chown</item>\n      <item>chroot</item>\n      <item>chsh</item>\n      <item>chvt</item>\n      <item>c++</item>\n      <item>clang</item>\n      <item>clear</item>\n      <item>cmake</item>\n      <item>cmp</item>\n      <item>co</item>\n      <item>col</item>\n      <item>comm</item>\n      <item>cpio</item>\n      <item>cp</item>\n      <item>cpp</item>\n      <item>cut</item>\n      <item>date</item>\n      <item>dc</item>\n      <item>dcop</item>\n      <item>dd</item>\n      <item>deallocvt</item>\n      <item>df</item>\n      <item>diff3</item>\n      <item>diff</item>\n      <item>dircolors</item>\n      <item>directomatic</item>\n      <item>dir</item>\n      <item>dirname</item>\n      <item>dmesg</item>\n      <item>dnsdomainname</item>\n      <item>domainname</item>\n      <item>du</item>\n      <item>dumpkeys</item>\n      <item>echo</item>\n      <item>ed</item>\n      <item>egrep</item>\n      <item>env</item>\n      <item>expr</item>\n      <item>false</item>\n      <item>fbset</item>\n      <item>fgconsole</item>\n      <item>fgrep</item>\n      <item>file</item>\n      <item>find</item>\n      <item>flex</item>\n      <item>flex++</item>\n      <item>fmt</item>\n      <item>free</item>\n      <item>ftp</item>\n      <item>funzip</item>\n      <item>fuser</item>\n      <item>gawk</item>\n      <item>gcc</item>\n      <item>gc</item>\n      <item>gdb</item>\n      <item>getent</item>\n      <item>getkeycodes</item>\n      <item>getopt</item>\n      <item>gettext</item>\n      <item>gettextize</item>\n      <item>gimp</item>\n      <item>gimp-remote</item>\n      <item>gimptool</item>\n      <item>g++</item>\n      <item>git</item>\n      <item>gmake</item>\n      <item>gocr</item>\n      <item>grep</item>\n      <item>groff</item>\n      <item>groups</item>\n      <item>gs</item>\n      <item>gunzip</item>\n      <item>gzexe</item>\n      <item>gzip</item>\n      <item>head</item>\n      <item>hexdump</item>\n      <item>hostname</item>\n      <item>id</item>\n      <item>igawk</item>\n      <item>install</item>\n      <item>join</item>\n      <item>kbd_mode</item>\n      <item>kbdrate</item>\n      <item>kdialog</item>\n      <item>kfile</item>\n      <item>killall</item>\n      <item>kill</item>\n      <item>lastb</item>\n      <item>last</item>\n      <item>ld86</item>\n      <item>ldd</item>\n      <item>ld</item>\n      <item>less</item>\n      <item>lex</item>\n      <item>link</item>\n      <item>ln</item>\n      <item>ln</item>\n      <item>loadkeys</item>\n      <item>loadunimap</item>\n      <item>locate</item>\n      <item>lockfile</item>\n      <item>login</item>\n      <item>logname</item>\n      <item>lp</item>\n      <item>lpr</item>\n      <item>lsattr</item>\n      <item>ls</item>\n      <item>lsmod</item>\n      <item>lsmod.old</item>\n      <item>lynx</item>\n      <item>lzcat</item>\n      <item>lzcmp</item>\n      <item>lzdiff</item>\n      <item>lzegrep</item>\n      <item>lzfgrep</item>\n      <item>lzgrep</item>\n      <item>lzless</item>\n      <item>lzmainfo</item>\n      <item>lzma</item>\n      <item>lzmore</item>\n      <item>m4</item>\n      <item>make</item>\n      <item>man</item>\n      <item>mapscrn</item>\n      <item>mesg</item>\n      <item>mkdir</item>\n      <item>mkfifo</item>\n      <item>mknod</item>\n      <item>mktemp</item>\n      <item>more</item>\n      <item>mount</item>\n      <item>msgfmt</item>\n      <item>mv</item>\n      <item>namei</item>\n      <item>nano</item>\n      <item>nasm</item>\n      <item>nawk</item>\n      <item>netstat</item>\n      <item>nice</item>\n      <item>nisdomainname</item>\n      <item>nl</item>\n      <item>nm86</item>\n      <item>nmap</item>\n      <item>nm</item>\n      <item>nohup</item>\n      <item>nop</item>\n      <item>nroff</item>\n      <item>od</item>\n      <item>openvt</item>\n      <item>passwd</item>\n      <item>patch</item>\n      <item>pcregrep</item>\n      <item>pcretest</item>\n      <item>perl</item>\n      <item>perror</item>\n      <item>pgawk</item>\n      <item>pidof</item>\n      <item>ping</item>\n      <item>printf</item>\n      <item>pr</item>\n      <item>procmail</item>\n      <item>prune</item>\n      <item>ps2ascii</item>\n      <item>ps2epsi</item>\n      <item>ps2frag</item>\n      <item>ps2pdf</item>\n      <item>ps2ps</item>\n      <item>psbook</item>\n      <item>ps</item>\n      <item>psmerge</item>\n      <item>psnup</item>\n      <item>psresize</item>\n      <item>psselect</item>\n      <item>pstops</item>\n      <item>pstree</item>\n      <item>pwd</item>\n      <item>qmake</item>\n      <item>rbash</item>\n      <item>rcs</item>\n      <item>readlink</item>\n      <item>red</item>\n      <item>resizecons</item>\n      <item>rev</item>\n      <item>rmdir</item>\n      <item>rm</item>\n      <item>rsync</item>\n      <item>run-parts</item>\n      <item>sash</item>\n      <item>scp</item>\n      <item>sed</item>\n      <item>seq</item>\n      <item>setfont</item>\n      <item>setkeycodes</item>\n      <item>setleds</item>\n      <item>setmetamode</item>\n      <item>setserial</item>\n      <item>setterm</item>\n      <item>sh</item>\n      <item>showkey</item>\n      <item>shred</item>\n      <item>size86</item>\n      <item>size</item>\n      <item>skill</item>\n      <item>sleep</item>\n      <item>slogin</item>\n      <item>snice</item>\n      <item>sort</item>\n      <item>sox</item>\n      <item>split</item>\n      <item>ssed</item>\n      <item>ssh-add</item>\n      <item>ssh-agent</item>\n      <item>ssh</item>\n      <item>ssh-keygen</item>\n      <item>ssh-keyscan</item>\n      <item>stat</item>\n      <item>strings</item>\n      <item>strip</item>\n      <item>stty</item>\n      <item>sudo</item>\n      <item>suidperl</item>\n      <item>su</item>\n      <item>sum</item>\n      <item>svn</item>\n      <item>sync</item>\n      <item>tac</item>\n      <item>tail</item>\n      <item>tar</item>\n      <item>tee</item>\n      <item>tempfile</item>\n      <item>test</item>\n      <item>touch</item>\n      <item>tr</item>\n      <item>troff</item>\n      <item>true</item>\n      <item>truncate</item>\n      <item>umount</item>\n      <item>uname</item>\n      <item>unicode_start</item>\n      <item>unicode_stop</item>\n      <item>uniq</item>\n      <item>unlink</item>\n      <item>unlzma</item>\n      <item>unxz</item>\n      <item>unzip</item>\n      <item>updatedb</item>\n      <item>updmap</item>\n      <item>uptime</item>\n      <item>users</item>\n      <item>utmpdump</item>\n      <item>uuidgen</item>\n      <item>valgrind</item>\n      <item>vdir</item>\n      <item>vmstat</item>\n      <item>wall</item>\n      <item>wc</item>\n      <item>wget</item>\n      <item>whatis</item>\n      <item>whereis</item>\n      <item>which</item>\n      <item>whoami</item>\n      <item>who</item>\n      <item>w</item>\n      <item>write</item>\n      <item>xargs</item>\n      <item>xdg-open</item>\n      <item>xhost</item>\n      <item>xmodmap</item>\n      <item>xset</item>\n      <item>xzcat</item>\n      <item>xz</item>\n      <item>yacc</item>\n      <item>yes</item>\n      <item>ypdomainname</item>\n      <item>zcat</item>\n      <item>zcmp</item>\n      <item>zdiff</item>\n      <item>zegrep</item>\n      <item>zfgrep</item>\n      <item>zforce</item>\n      <item>zgrep</item>\n      <item>zip</item>\n      <item>zless</item>\n      <item>zmore</item>\n      <item>znew</item>\n      <item>zsh</item>\n      <item>zsoelim</item>\n    </list>\n\n\n\n    <contexts>\n      <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"Root\">\n        <DetectChar attribute=\"Error\" context=\"DropRestOfLine\" char=\")\"/>\n      </context>\n\n      <context name=\"DropRestOfLine\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <RegExpr attribute=\"Normal Text\" String=\"[^#]*\" />\n      </context>\n\n      <!-- Root starts at a new line (not continuation) -->\n      <context name=\"Root\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <DetectChar context=\"#pop\" char=\")\" lookAhead=\"true\" />\n        <IncludeRules context=\"FindCommands\" />\n      </context>\n\n      <!--\n      fish interprets closing parenthesis inside comments as end of command substitution, if the comment starts\n      inside of a command substitution!\n\n      fish does not interpret them this way, when\n        they are escaped by a \\ or\n        they are matched by an earlier opening parenthesis inside the same comment.\n      This behaviour is replicated here.\n\n      Command substitutions may span several lines, so the closing parenthesis may be on a different line,\n      than the opening one. In the interactive shell you need a continuation line for this, not so in scripts.\n      Blocks of code with multiline command substitutions may be commented out. This should not lead to visual artifacts.\n\n      There is one case, where the following solution fails: a lonely closing \")\", which is marked as an error.\n      -->\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Comment\" char=\"\\\" char1=\"(\" />\n        <Detect2Chars attribute=\"Comment\" char=\"\\\" char1=\")\" />\n        <DetectChar context=\"CommentParenSub\" char=\"(\" />\n        <DetectChar context=\"#pop\" char=\")\" lookAhead=\"true\" />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <context name=\"CommentParenSub\" attribute=\"Comment\" lineEndContext=\"BlockComment\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"Comment\" />\n      </context>\n\n      <context name=\"BlockComment\" attribute=\"Comment\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"#\" firstNonSpace=\"true\"/>\n      </context>\n\n      <!-- FindCommands matches Fish and Unix commands -->\n      <!--   order is important, factor out common rules did'nt work because of order of rules-->\n      <context name=\"FindCommands\" attribute=\"Command\" lineEndContext=\"#stay\">\n        <DetectSpaces attribute=\"Normal Text\" />\n        <AnyChar attribute=\"Error\" context=\"#pop!DropRestOfLine\" String=\"(&lt;&gt;\"/>\n        <AnyChar attribute=\"Separator\" String=\"&commandsep;\" />\n        <keyword attribute=\"Builtin\" context=\"Arguments\" String=\"commands\" /> <!--simple commands first-->\n        <keyword attribute=\"Builtin\" context=\"ArgumentsNone\" String=\"commandsnoargs\" />\n        <keyword attribute=\"Control Flow\" String=\"commandsstay\" />\n        <Detect2Chars attribute=\"Builtin\" context=\"Arguments\" char=\".\" char1=\" \" />\n        <RegExpr attribute=\"CommandPath\" context=\"CommandPart\" String=\"&pathdetect;\" />\n        <IncludeRules context=\"FindSpecialCommands\" /> <!--before unixcommands, because f test, but after path detection-->\n        <keyword attribute=\"UnixCommand\" context=\"Arguments\" String=\"unixcommands\"/>\n        <RegExpr attribute=\"Command\" context=\"CommandPart\" String=\"&funcname;\" />\n        <DetectChar context=\"CommandPart\" char=\"&quot;\" lookAhead=\"true\"/>\n      </context>\n\n      <context name=\"CommandPart\" attribute=\"Command\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <AnyChar context=\"#pop\" String=\")#\" lookAhead=\"true\"/>\n        <AnyChar attribute=\"Separator\" context=\"#pop\" String=\"&commandsep;\" />\n        <AnyChar context=\"#pop!Arguments\" String=\"&eocommand;\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"CommandPath\" String=\"&pathpart;\" />\n        <keyword attribute=\"UnixCommand\" String=\"unixcommands\"/>\n        <RegExpr attribute=\"Command\" String=\"&funcname;\" />\n        <IncludeRules context=\"FindStrings\" />\n        <RegExpr attribute=\"Error\" String=\".\" />\n      </context>\n\n      <context name=\"FindSpecialCommands\" attribute=\"Builtin\" lineEndContext=\"#stay\">\n        <WordDetect attribute=\"Builtin\" String=\"command\" context=\"command_builtin\" />\n        <WordDetect attribute=\"Builtin\" String=\"builtin\" context=\"command_builtin\" />\n        <WordDetect attribute=\"Builtin\" String=\"eval\" context=\"eval_exec\" />\n        <WordDetect attribute=\"Builtin\" String=\"exec\" context=\"eval_exec\" />\n        <WordDetect attribute=\"Builtin\" String=\"set\" context=\"set\" />\n        <WordDetect attribute=\"Builtin\" String=\"string\" context=\"string\" />\n        <WordDetect attribute=\"Builtin\" String=\"read\" context=\"read_vared\" />\n        <WordDetect attribute=\"Builtin\" String=\"vared\" context=\"read_vared\" />\n        <WordDetect attribute=\"Builtin\" String=\"test\" context=\"ArgumentsTest\" />\n        <RegExpr    attribute=\"Builtin\" String=\"\\[\\s\" context=\"ArgumentsTestBrack\" />\n        <WordDetect attribute=\"Control Flow\" String=\"begin\" context=\"begin\" beginRegion=\"begin\" />\n        <WordDetect attribute=\"Control Flow\" String=\"for\" context=\"for\" beginRegion=\"for\" />\n        <WordDetect attribute=\"Control Flow\" String=\"function\" context=\"function\" beginRegion=\"function\" />\n        <WordDetect attribute=\"Control Flow\" String=\"if\" context=\"if\" beginRegion=\"if\" />\n        <WordDetect attribute=\"Control Flow\" String=\"switch\" context=\"switch\" beginRegion=\"switch\" />\n        <WordDetect attribute=\"Control Flow\" String=\"while\" context=\"while\" beginRegion=\"while\" />\n      </context>\n\n      <context name=\"command_builtin\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <RegExpr attribute=\"Option\" String=\"-&alnumdash;*\" />\n        <AnyChar attribute=\"Separator\" context=\"#pop\" String=\"&commandsep;\" />\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"eval_exec\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar context=\"#pop\" char=\")\" lookAhead=\"true\"/>\n        <AnyChar attribute=\"Separator\" context=\"#pop\" String=\"&commandsep;\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindBraceExpansion\" />\n        <IncludeRules context=\"FindPaths\" />\n        <IncludeRules context=\"FindEscapes\" />\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"set\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <AnyChar attribute=\"Separator\" context=\"#pop\" String=\"&commandsep;\" />\n        <RegExpr attribute=\"Option\" String=\"-&alnumdash;*\" />\n        <RegExpr attribute=\"Variable\" String=\"&varname;\" context=\"Arguments\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n      </context>\n\n      <context name=\"string\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" />\n        <keyword attribute=\"Builtin\" context=\"#pop!Arguments\" String=\"stringsubcommands\" />\n        <RegExpr attribute=\"Error\" String=\".\" />\n      </context>\n\n      <context name=\"read_vared\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <RegExpr attribute=\"Option\" String=\"-&alnumdash;*\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <AnyChar attribute=\"Separator\" context=\"#pop\" String=\"&commandsep;\" />\n        <DetectChar context=\"#pop\" char=\")\" lookAhead=\"true\"/>\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindBraceExpansion\" />\n        <IncludeRules context=\"FindEscapes\" />\n        <RegExpr attribute=\"Variable\" String=\"&varname;\" />\n      </context>\n\n      <context name=\"ArgumentsTestBrack\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n\t\t<Detect2Chars attribute=\"Builtin\" char=\" \" char1=\"]\" context=\"#pop!ArgumentsNonePre\" />\n        <AnyChar attribute=\"Error\" context=\"#pop!DropRestOfLine\" String=\"#&commandsep;&amp;\"/>\n        <IncludeRules context=\"ArgumentsTest\" />\n      </context>\n\n      <context name=\"ArgumentsTest\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectChar context=\"#pop\" char=\"#\" lookAhead=\"true\" />\n        <IncludeRules context=\"ArgumentsTest_common\" />\n      </context>\n\n      <context name=\"ArgumentsTest_common\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Operator\" context=\"DirectPath\" String=\"-&testoptsfile; \" />\n        <RegExpr attribute=\"Operator\" String=\"-&testoptsother; \" />\n        <RegExpr attribute=\"Operator\" String=\"(!|=|!=| -eq | -ne | -gt | -ge | -lt | -le )\"/>\n        <AnyChar context=\"#pop\" String=\"&commandsep;\" lookAhead=\"true\"/>\n        <IncludeRules context=\"FindArgumentsCommon\" />\n      </context>\n\n      <context name=\"begin\" attribute=\"Normal Text\" lineEndContext=\"beginbody\">\n        <DetectSpaces attribute=\"Normal Text\" />\n        <DetectChar attribute=\"Separator\" context=\"beginbody\" char=\";\" />\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"beginbody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <StringDetect attribute=\"Control Flow\" String=\"end\" context=\"#pop#pop\" endRegion=\"begin\" />\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"for\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" />\n        <Detect2Chars attribute=\"Control Flow\" char=\"i\" char1=\"n\" context=\"forargs\" />\n        <RegExpr attribute=\"Variable\" String=\"&varname;\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <RegExpr attribute=\"Error\" String=\".\"/>\n      </context>\n\n      <context name=\"forargs\" attribute=\"Normal Text\" lineEndContext=\"forbody\">\n        <DetectChar attribute=\"Separator\" context=\"forbody\" char=\";\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <IncludeRules context=\"FindArgumentsCommon\" />\n      </context>\n\n      <context name=\"forbody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <StringDetect attribute=\"Control Flow\" String=\"end\" context=\"#pop#pop#pop\" endRegion=\"for\" />\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"function\" attribute=\"Normal Text\" lineEndContext=\"funcbody\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" />\n        <DetectChar attribute=\"Comment\" context=\"func_comment\" char=\"#\"/>\n        <DetectChar context=\"funcopts\" char=\"-\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Separator\" context=\"funcbody\" char=\";\" />\n        <RegExpr attribute=\"Command\" String=\"&funcname;\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <RegExpr attribute=\"Error\" String=\".\"/>\n      </context>\n\n      <context name=\"func_comment\" attribute=\"Comment\" lineEndContext=\"#pop!funcbody\">\n      </context>\n\n      <context name=\"funcopts\" attribute=\"Normal Text\" lineEndContext=\"#pop!funcbody\">\n        <DetectChar attribute=\"Comment\" context=\"#pop!func_comment\" char=\"#\"/>\n        <RegExpr attribute=\"Option\" String=\"(-d[&white;]*|--description=)(?=('|&quot;))\" context=\"funcdesc\" beginRegion=\"doc\"/>\n        <RegExpr attribute=\"Option\" String=\"-&alnumdash;*\" />\n        <DetectChar attribute=\"Separator\" context=\"#pop!funcbody\" char=\";\" />\n        <IncludeRules context=\"FindArgumentsCommon\" />\n      </context>\n\n      <context name=\"funcdesc\" attribute=\"Function Doc\" lineEndContext=\"#stay\">\n        <DetectChar context=\"DocstringSQ\" char=\"'\" />\n        <DetectChar context=\"DocstringDQ\" char=\"&quot;\" />\n      </context>\n\n      <!-- StringSQ consumes anything till ' -->\n      <context name=\"DocstringSQ\" attribute=\"Function Doc\" lineEndContext=\"#stay\">\n        <!--no line continuation here-->\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"'\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"\\\" />\n        <DetectChar attribute=\"Function Doc\" context=\"#pop#pop\" char=\"'\" endRegion=\"doc\"/>\n      </context>\n\n      <!-- StringDQ consumes anything till \", substitutes vars and expressions -->\n      <context name=\"DocstringDQ\" attribute=\"Function Doc\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"&quot;\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"$\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"\\\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <DetectChar attribute=\"Function Doc\" context=\"#pop#pop\" char=\"&quot;\" endRegion=\"doc\"/>\n      </context>\n\n      <context name=\"funcbody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <StringDetect attribute=\"Control Flow\" String=\"end\" context=\"#pop#pop\" endRegion=\"function\" />\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"if\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <RegExpr attribute=\"Control Flow\" String=\"\\s*(else\\s*if|else)\" />\n        <StringDetect attribute=\"Control Flow\" String=\"end\" context=\"#pop\" endRegion=\"if\"/>\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"else\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <RegExpr String=\"\\s*(else|end|else\\s*if)\" context=\"#pop\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Control Flow\" String=\"\\s*(else\\s*if|else)\" context=\"else\" />\n        <StringDetect attribute=\"Control Flow\" String=\"end\" context=\"#pop#pop\" endRegion=\"if\"/>\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"switch\" attribute=\"Normal Text\" lineEndContext=\"switchbody\">\n        <DetectChar attribute=\"Separator\" context=\"switchbody\" char=\";\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <IncludeRules context=\"FindArgumentsCommon\" />\n      </context>\n\n      <context name=\"switchbody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <RegExpr attribute=\"Control Flow\" String=\"\\s*case\" context=\"case\" beginRegion=\"case\" />\n        <StringDetect attribute=\"Control Flow\" String=\"end\" context=\"#pop#pop\" endRegion=\"switch\"/>\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"case\" attribute=\"Normal Text\" lineEndContext=\"casebody\">\n        <DetectChar attribute=\"Separator\" context=\"casebody\" char=\";\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <IncludeRules context=\"FindArgumentsCommon\" />\n      </context>\n\n      <context name=\"casebody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <!-- next: don't consume anything, otherwise the end of folding hides the next case -->\n        <RegExpr String=\"^\\s*(case|end)\" context=\"#pop#pop\" endRegion=\"case\" lookAhead=\"true\"/>\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <context name=\"while\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <StringDetect attribute=\"Control Flow\" String=\"end\" context=\"#pop\" endRegion=\"while\"/>\n        <IncludeRules context=\"Root\" />\n      </context>\n\n      <!--Argument Rules match the items after a command\n            this one is a collection with the common part for inclusion-->\n      <context name=\"Arguments\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <AnyChar context=\"#pop\" String=\"&commandsep;\" lookAhead=\"true\"/>\n        <DetectChar context=\"#pop\" char=\")\" lookAhead=\"true\"/>\n        <IncludeRules context=\"FindArgumentsCommon\" />\n      </context>\n\n      <context name=\"FindArgumentsCommon\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" />\n        <RegExpr attribute=\"Option\" String=\"-&alnumdash;*\" />\n        <RegExpr attribute=\"Redirection\" context=\"Redirect\" String=\"[0-9]*(&gt;{1,2}|&lt;|\\^{1,2})\" />\n        <DetectChar attribute=\"Operator\" char=\"=\"/>\n        <DetectChar attribute=\"Index\" context=\"Subscript\" char=\"[\"/>\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindBraceExpansion\" />\n        <IncludeRules context=\"FindProcessExpansion\" />\n        <IncludeRules context=\"FindPaths\" />\n        <IncludeRules context=\"FindEscapes\" />\n        <RegExpr attribute=\"Normal Text\" String=\"[^&separator;&special;]*\" />  <!--unknown token-->\n      </context>\n\n      <context name=\"ArgumentsNonePre\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" context=\"#pop!ArgumentsNone\" />\n        <AnyChar context=\"#pop\" String=\"&commandsep;\" lookAhead=\"true\"/> <!--consumed on the \"Find\"-Level-->\n        <RegExpr attribute=\"Error\" String=\"[^&commandsep;]\"/>\n      </context>\n\n      <context name=\"ArgumentsNone\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <RegExpr attribute=\"Redirection\" context=\"Redirect\" String=\"[0-9]*(&gt;{1,2}|&lt;|\\^{1,2})\" />\n        <AnyChar context=\"#pop\" String=\"&commandsep;\" lookAhead=\"true\"/> <!--consumed on the \"Find\"-Level-->\n        <DetectChar context=\"#pop\" char=\")\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Error\" String=\"[^&commandsep;#]*\"/>\n      </context>\n\n      <context name=\"TokEnd\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" context=\"#pop\"/>\n        <AnyChar context=\"#pop\" String=\"&commandsep;\" lookAhead=\"true\"/> <!--consumed on the \"Find\"-Level-->\n        <RegExpr attribute=\"Error\" String=\".\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Redirect\" attribute=\"Redirection\" fallthrough=\"true\" fallthroughContext=\"#pop!DirectPath\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectChar attribute=\"Redirection\" context=\"#pop!DirectPath\" char=\"?\"/>\n        <DetectChar attribute=\"Redirection\" context=\"#pop#pop\" char=\"|\"/>\n        <RegExpr    attribute=\"Redirection\" context=\"#pop!TokEnd\" String=\"(&amp;[0-9]+|&amp;-)\" />\n      </context>\n\n      <context name=\"Subscript\" attribute=\"Index\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <Detect2Chars char=\"]\" char1=\"[\" />\n        <DetectChar attribute=\"Index\" context=\"#pop\" char=\"]\" />\n        <Detect2Chars char=\".\" char1=\".\" />\n        <RegExpr attribute=\"Index\" String=\" *-?\\d+\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <DetectSpaces attribute=\"Normal Text\" />\n        <RegExpr attribute=\"Error\" String=\"[^\\]]\" />\n      </context>\n\n      <!-- FindStrings looks for single and double quoted strings -->\n      <context name=\"FindStrings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar context=\"StringSQ\" char=\"'\" />\n        <DetectChar context=\"StringDQ\" char=\"&quot;\" />\n      </context>\n\n      <!-- StringSQ consumes anything till ' -->\n      <context name=\"StringSQ\" attribute=\"String SingleQ\" lineEndContext=\"#stay\">\n        <!--no line continuation here-->\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"'\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"\\\" />\n        <DetectChar attribute=\"String SingleQ\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- StringDQ consumes anything till \", substitutes vars and expressions -->\n      <context name=\"StringDQ\" attribute=\"String DoubleQ\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"&quot;\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"$\" />\n        <Detect2Chars attribute=\"Escape\" char=\"\\\" char1=\"\\\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <DetectChar attribute=\"String DoubleQ\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n\n      <!-- FindVarExpansion goes after anything starting with $ and and their escapes -->\n      <context name=\"FindVarExpansion\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Variable\" context=\"CheckSubscript\" String=\"\\$+&varname;\" />\n      </context>\n\n      <!-- Subscript consumes anything till ], marks as Variable -->\n      <context name=\"CheckSubscript\" attribute=\"Index\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectChar attribute=\"Index\" context=\"Subscript\" char=\"[\"/>\n      </context>\n\n      <!-- Command Substitution -->\n      <context name=\"FindSubstitutions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Keychar\" context=\"CommandSubstitution\" String=\"(\" />\n      </context>\n\n      <context name=\"CommandSubstitution\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"Root\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectChar attribute=\"Keychar\" context=\"#pop\" char=\")\" />\n      </context>\n\n      <!--\tBrace Expansion consumes anything till } -->\n      <context name=\"FindBraceExpansion\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Keychar\" context=\"BraceList\" char=\"{\" />\n        <DetectChar attribute=\"Error\" char=\"}\" />\n      </context>\n\n      <context name=\"BraceList\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectChar attribute=\"Keychar\" context=\"#pop\" char=\"}\" />\n        <DetectChar attribute=\"Separator\" char=\",\" />\n        <RegExpr attribute=\"Normal Text\" String=\"&braceelement;*\"/>\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindBraceExpansion\" />\n        <IncludeRules context=\"FindPaths\" />\n        <IncludeRules context=\"FindEscapes\" />\n        <RegExpr attribute=\"Error\" String=\".\"/>\n      </context>\n\n      <!--\tProcess Expansion -->\n      <context name=\"FindProcessExpansion\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Keychar\" context=\"ProcessArg\" char=\"%\" />\n      </context>\n\n      <context name=\"ProcessArg\" attribute=\"Process\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <AnyChar context=\"#pop\" String=\"&white;\" />\n        <AnyChar context=\"#pop\" String=\"&separator;\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindBraceExpansion\" />\n        <IncludeRules context=\"FindEscapes\" />\n      </context>\n\n      <!-- FindPaths for parts which might be a path. Uses the matching of a / as heuristic -->\n      <!-- Might be fooled with quotes -->\n      <context name=\"FindPaths\" attribute=\"Path\" lineEndContext=\"#stay\">\n        <RegExpr context=\"DirectPath\" String=\"&pathdetect;\" lookAhead=\"true\" />\n      </context>\n\n      <!-- DirectPath is used at places where the next part is definitely a path -->\n      <context name=\"DirectPath\" attribute=\"Path\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!PathHead\" >\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces attribute=\"Normal Text\" />\n        <AnyChar attribute=\"Error\" context=\"#pop\" String=\"#&commandsep;&lt;&gt;^\" />\n      </context>\n\n      <context name=\"PathHead\" attribute=\"Path\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!Path\" >\n        <LineContinue attribute=\"Escape\" />\n        <RegExpr attribute=\"HomeDir\" context=\"#pop\" String=\"&homedir;&white_or_eol;\" />\n        <RegExpr attribute=\"HomeDir\" context=\"#pop!Path\" String=\"&homedir;\" />\n      </context>\n\n      <context name=\"Path\" attribute=\"Path\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectSpaces context=\"#pop\" lookAhead=\"true\" />\n        <AnyChar context=\"#pop\" String=\"#&commandsep;&lt;&gt;^)\" lookAhead=\"true\" />\n        <AnyChar attribute=\"Glob\" String=\"*?\" />\n        <DetectChar attribute=\"Path\" char=\"/\" />\n        <DetectChar attribute=\"Keychar\" context=\"PathBrace\" char=\"{\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"}\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindEscapes\" />\n        <RegExpr attribute=\"Path\" String=\"[^$\\*\\?\\\\{}&separator;/]*\" /> <!--consume everything until next special-->\n      </context>\n\n      <context name=\"PathBrace\" attribute=\"Path\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Escape\" />\n        <DetectChar attribute=\"Keychar\" context=\"#pop\" char=\"}\" />\n        <DetectChar attribute=\"Separator\" char=\",\" />\n        <AnyChar attribute=\"Error\" String=\" #&commandsep;&lt;&gt;^)\" />\n        <AnyChar attribute=\"Glob\" String=\"*?\" />\n        <DetectChar attribute=\"Path\" char=\"/\" />\n        <DetectChar attribute=\"Keychar\" context=\"PathBrace\" char=\"{\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindVarExpansion\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindEscapes\" />\n        <RegExpr attribute=\"Path\" String=\"[^$\\*\\?\\\\,{}&separator;/]*\" />\n      </context>\n\n      <!-- FindEscapes contains various rules to mark different shell input -->\n      <context name=\"FindEscapes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Escape\" String=\"\\\\&escapechars;\" />\n        <RegExpr attribute=\"Escape\" String=\"\\\\([0-7]{1,3}|[xX][A-Fa-f0-9]{1,2}|u[A-Fa-f0-9]{1,4}|U[A-Fa-f0-9]{1,8}|c.)\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\" />\n      <itemData name=\"Path\"           defStyleNum=\"dsNormal\" />\n      <itemData name=\"Option\"         defStyleNum=\"dsNormal\" />\n      <itemData name=\"Escape\"         defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Separator\"      defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Glob\"           defStyleNum=\"dsKeyword\" />\n      <itemData name=\"HomeDir\"        defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Keychar\"        defStyleNum=\"dsSpecialChar\" />\n      <itemData name=\"Command\"        defStyleNum=\"dsFunction\" />\n      <itemData name=\"UnixCommand\"    defStyleNum=\"dsFunction\" />\n      <itemData name=\"CommandPath\"    defStyleNum=\"dsExtension\" />\n      <itemData name=\"Variable\"       defStyleNum=\"dsVariable\" />\n      <itemData name=\"Control Flow\"   defStyleNum=\"dsControlFlow\" />\n      <itemData name=\"Operator\"       defStyleNum=\"dsOperator\" />\n      <itemData name=\"Redirection\"    defStyleNum=\"dsOperator\" />\n      <itemData name=\"Builtin\"        defStyleNum=\"dsBuiltIn\" />\n      <itemData name=\"Index\"          defStyleNum=\"dsAttribute\" />\n\n      <itemData name=\"String SingleQ\" defStyleNum=\"dsString\" />\n      <itemData name=\"String DoubleQ\" defStyleNum=\"dsString\" />\n      <itemData name=\"Process\"        defStyleNum=\"dsImport\" />\n\n\n      <itemData name=\"Comment\"        defStyleNum=\"dsComment\" />\n      <itemData name=\"Function Doc\"   defStyleNum=\"dsDocumentation\" />\n\n      <itemData name=\"Error\"          defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <!-- no / as weakDeliminator, otherwwise in /usr/bin/ls ls is not recognized as UnixCommand -->\n      <keywords casesensitive=\"1\" weakDeliminator=\"\\+,-:=!.@#&#37;^_`~\"  wordWrapDeliminator=\"&separator;\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/flatbuffers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"FlatBuffers\" section=\"Sources\"\n    version=\"1\" kateversion=\"5.0\"\n    indenter=\"cstyle\"\n    extensions=\"*.fbs\"\n    priority=\"5\"\n    author=\"Harald Fernengel\"\n    license=\"MIT\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>namespace</item>\n            <item>attribute</item>\n            <item>table</item>\n            <item>struct</item>\n            <item>enum</item>\n            <item>union</item>\n            <item>rpc_service</item>\n            <item>root_type</item>\n            <item>include</item>\n            <item>file_identifier</item>\n            <item>file_extension</item>\n        </list>\n        <list name=\"types\">\n            <item>bool</item>\n            <item>byte</item>\n            <item>ubyte</item>\n            <item>short</item>\n            <item>ushort</item>\n            <item>int</item>\n            <item>uint</item>\n            <item>float</item>\n            <item>long</item>\n            <item>ulong</item>\n            <item>double</item>\n            <item>int8</item>\n            <item>uint8</item>\n            <item>int16</item>\n            <item>uint16</item>\n            <item>int32</item>\n            <item>uint32</item>\n            <item>int64</item>\n            <item>uint64</item>\n            <item>float32</item>\n            <item>float64</item>\n            <item>string</item>\n        </list>\n        <list name=\"integers\">\n            <item>true</item>\n            <item>false</item>\n        </list>\n        <list name=\"attributes\">\n            <item>deprecated</item>\n            <item>required</item>\n            <item>key</item>\n            <item>hash</item>\n            <item>id</item>\n            <item>force_align</item>\n            <item>bit_flags</item>\n            <item>original_order</item>\n            <item>nested_flatbuffer</item>\n            <item>csharp_partial</item>\n            <item>streaming</item>\n            <item>idempotent</item>\n            <item>cpp_type</item>\n            <item>cpp_ptr_type</item>\n            <item>native_inline</item>\n        </list>\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"attributes\"/>\n                <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n                <keyword attribute=\"Integer Constants\" context=\"#stay\" String=\"integers\"/>\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n                <Float attribute=\"Float\" context=\"#stay\"/>\n                <Int attribute=\"Decimal\" context=\"#stay\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment1\" char=\"/\" char1=\"/\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n            </context>\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment1\">\n                <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n            </context>\n\n            <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n                <LineContinue attribute=\"String\" context=\"#stay\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n\n            <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment2\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n            </context>\n\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n            <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n            <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n            <itemData name=\"Integer Constants\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"//\" />\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n        </comments>\n        <keywords casesensitive=\"1\" />\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fortran-fixed.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Fortran (Fixed Format)\" version=\"6\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.f;*.F;*.for;*.FOR;*.fpp;*.FPP;\" mimetype=\"text/x-fortran-src\" casesensitive=\"0\" author=\"Franchin Matteo (fnch@libero.it)\" license=\"MIT\" priority=\"9\">\n<!-- by Franchin Matteo, fnch@libero.it -->\n<!-- NOTE: Keep in sync with the \"Fortran (Free Format)\" highlighter! (fortran-free.xml) -->\n  <highlighting>\n\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n<!-- *                              L I S T S                            *  -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n    <list name=\"keywords\">\n      <item>allocate</item>\n      <item>break</item>\n      <item>call</item>\n      <item>common</item>\n      <item>continue</item>\n      <item>cycle</item>\n      <item>deallocate</item>\n      <item>forall</item>\n      <item>where</item>\n      <item>elsewhere</item>\n      <item>equivalence</item>\n      <item>exit</item>\n      <item>external</item>\n      <item>for</item>\n      <item>go</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>implicit</item>\n      <item>include</item>\n      <item>interface</item>\n      <item>intrinsic</item>\n      <item>namelist</item>\n      <item>none</item>\n      <item>nullify</item>\n      <item>operator</item>\n      <item>assignment</item>\n      <item>pause</item>\n      <item>procedure</item>\n      <item>pure</item>\n      <item>elemental</item>\n      <item>record</item>\n      <item>recursive</item>\n      <item>result</item>\n      <item>return</item>\n      <item>stop</item>\n      <item>to</item>\n      <item>use</item>\n      <item>only</item>\n      <item>entry</item>\n      <item>while</item>\n      <!-- Others keywords:\n           case, default, select, selectcase,\n           contains, do, elseif, else, then -->\n    </list>\n    <list name=\"io_functions\">\n      <item>access</item>\n      <item>backspace</item>\n      <item>close</item>\n      <item>inquire</item>\n      <item>open</item>\n      <item>print</item>\n      <item>read</item>\n      <item>rewind</item>\n      <item>write</item>\n      <item>format</item>\n    </list>\n    <!-- Keywords inside read(...), write(...), backspace(...),\n          rewind(...), endfile(...), close(...) -->\n    <list name=\"io_keywords\">\n      <item>unit</item>\n      <item>end</item>\n      <item>err</item>\n      <item>fmt</item>\n      <item>iostat</item>\n      <item>status</item>\n      <item>advance</item>\n      <item>size</item>\n      <item>eor</item>\n    </list>\n    <!-- Keywords inside open(...) -->\n    <list name=\"open_keywords\">\n      <item>unit</item>\n      <item>iostat</item>\n      <item>err</item>\n      <item>file</item>\n      <item>status</item>\n      <item>access</item>\n      <item>form</item>\n      <item>recl</item>\n      <item>blank</item>\n      <item>position</item>\n      <item>action</item>\n      <item>delim</item>\n      <item>pad</item>\n    </list>\n    <!-- Keywords inside inquire(...) -->\n    <list name=\"inquire_keywords\">\n      <item>unit</item>\n      <item>iostat</item>\n      <item>err</item>\n      <item>file</item>\n      <item>exist</item>\n      <item>opened</item>\n      <item>number</item>\n      <item>named</item>\n      <item>name</item>\n      <item>access</item>\n      <item>sequential</item>\n      <item>direct</item>\n      <item>form</item>\n      <item>formatted</item>\n      <item>unformatted</item>\n      <item>recl</item>\n      <item>nextrec</item>\n      <item>blank</item>\n      <item>position</item>\n      <item>action</item>\n      <item>read</item>\n      <item>write</item>\n      <item>readwrite</item>\n      <item>delim</item>\n      <item>pad</item>\n    </list>\n    <list name=\"types\">\n      <item>parameter</item>\n      <item>save</item>\n      <item>pointer</item>\n      <item>public</item>\n      <item>private</item>\n      <item>target</item>\n      <item>allocatable</item>\n      <item>optional</item>\n      <item>sequence</item>\n      <!-- Others types: double, precision -->\n    </list>\n\n<!-- There are 4 types of intrinsic procedures in Fortran 90:\n   1) Elemental procedures (elemental_procs);\n   2) Inquiry functions (inquiry_fn);\n   3) Transformational functions (transform_fn);\n   4) Non elemental subroutines (non_elem_subr);\n  Often mathematical functions have one generic form and many specific names!\n  If you use the generic form, the compiler will select the right function\n  to use depending on the type of the arguments.\n  But you can use also the specific names!\n  -->\n\n<!-- E L E M E N T A L    P R O C E D U R E S -->\n    <list name=\"elemental_procs\">\n    <!-- Elemental functions that may convert -->\n      <item>abs</item>   <!-- Generic form: abs -->\n      <item>cabs</item>  <!-- Specific names for abs -->\n      <item>dabs</item>\n      <item>iabs</item>\n      <item>aimag</item>\n      <item>aint</item>  <!-- Generic form: aint -->\n      <item>dint</item>  <!-- Specific name for aint -->\n      <item>anint</item> <!-- Generic form: anint -->\n      <item>dnint</item> <!-- Specific name for anint -->\n      <item>ceiling</item>\n      <item>cmplx</item>\n      <item>dcmplx</item> <!-- (non standard) -->\n      <item>dimag</item>  <!-- (non standard) -->\n      <item>floor</item>\n      <item>nint</item>  <!-- Generic form: nint -->\n      <item>idnint</item><!-- Specific name for nint -->\n      <item>int</item>   <!-- Generic form: int -->\n      <item>idint</item> <!-- Specific names for int -->\n      <item>ifix</item>\n      <item>real</item>  <!-- Generic form: real -->\n      <item>float</item> <!-- Specific names for real -->\n      <item>sngl</item>\n      <item>dble</item>\n      <item>dreal</item> <!-- (non standard) -->\n      <item>aprime</item> <!-- 5 functions from fortran.xml -->\n      <item>dconjg</item> <!-- I don't know if they really belong to -->\n      <item>dfloat</item> <!-- the fortran 90/95 standard! -->\n      <item>ddmim</item>\n      <item>rand</item>\n    <!-- Elemental functions that do not convert -->\n      <item>modulo</item>\n      <item>conjg</item>\n      <item>dprod</item>  <!-- dprod(x, y) is the specific name for x*y -->\n      <item>dim</item>    <!-- Generic form: dim -->\n      <item>ddim</item>   <!-- Specific names for dim -->\n      <item>idim</item>\n      <item>max</item>    <!-- Generic form: max -->\n      <item>amax0</item>  <!-- Specific names for max -->\n      <item>amax1</item>\n      <item>max0</item>\n      <item>max1</item>\n      <item>dmax1</item>\n      <item>min</item>    <!-- Generic form: min -->\n      <item>amin0</item>  <!-- Specific names for min -->\n      <item>amin1</item>\n      <item>min0</item>\n      <item>min1</item>\n      <item>dmin1</item>\n      <item>mod</item>    <!-- Generic form: mod -->\n      <item>amod</item>   <!-- Specific names for mod -->\n      <item>dmod</item>\n      <item>sign</item>   <!-- Generic form: sign -->\n      <item>dsign</item>  <!-- Specific names for sign -->\n      <item>isign</item>\n    <!-- Elemental mathematical functions -->\n      <item>acos</item>    <!-- Generic form: acos -->\n      <item>dacos</item>   <!-- Specific names for acos -->\n      <item>asin</item>    <!-- Generic form: asin -->\n      <item>dasin</item>   <!-- Specific names for asin -->\n      <item>atan</item>    <!-- Generic form: atan -->\n      <item>datan</item>   <!-- Specific names for atan -->\n      <item>atan2</item>   <!-- Generic form: atan2 -->\n      <item>datan2</item>  <!-- Specific names for atan2 -->\n      <item>cos</item>     <!-- Generic form: cos -->\n      <item>ccos</item>    <!-- Specific names for cos -->\n      <item>dcos</item>\n      <item>cosh</item>    <!-- Generic form: cosh -->\n      <item>dcosh</item>   <!-- Specific names for cosh -->\n      <item>exp</item>     <!-- Generic form: exp -->\n      <item>cexp</item>    <!-- Specific names for exp -->\n      <item>dexp</item>\n      <item>log</item>     <!-- Generic form: log -->\n      <item>alog</item>    <!-- Specific names for log -->\n      <item>dlog</item>\n      <item>clog</item>\n      <item>log10</item>   <!-- Generic form: log10 -->\n      <item>alog10</item>  <!-- Specific names for log10 -->\n      <item>dlog10</item>\n      <item>sin</item>     <!-- Generic form: sin -->\n      <item>csin</item>    <!-- Specific names for sin -->\n      <item>dsin</item>\n      <item>sinh</item>    <!-- Generic form: sinh -->\n      <item>dsinh</item>   <!-- Specific name for sinh -->\n      <item>sqrt</item>    <!-- Generic form: sqrt -->\n      <item>csqrt</item>   <!-- Specific names for sqrt -->\n      <item>dsqrt</item>\n      <item>tan</item>     <!-- Generic form: tan -->\n      <item>dtan</item>    <!-- Generic form: dtan -->\n      <item>tanh</item>    <!-- Generic form: tanh -->\n      <item>dtanh</item>   <!-- Specific names for tanh -->\n    <!-- Elemental character and logical functions -->\n    <!-- Character-integer conversions -->\n      <item>achar</item>\n      <item>char</item>\n      <item>iachar</item>\n      <item>ichar</item>\n    <!-- Lexical comparison functions -->\n      <item>lge</item>\n      <item>lgt</item>\n      <item>lle</item>\n      <item>llt</item>\n    <!-- String-handling elemental functions -->\n      <item>adjustl</item>\n      <item>adjustr</item>\n      <item>index</item>\n      <item>len_trim</item>\n      <item>scan</item>\n      <item>verify</item>\n    <!-- Logical conversion -->\n      <item>logical</item>\n    <!-- Elemental functions to manipulate reals -->\n      <item>exponent</item>\n      <item>fraction</item>\n      <item>nearest</item>\n      <item>rrspacing</item>\n      <item>scale</item>\n      <item>set_exponent</item>\n      <item>spacing</item>\n    <!-- Bit manipulation elemental functions -->\n      <item>btest</item>\n      <item>iand</item>\n      <item>ibclr</item>\n      <item>ibits</item>\n      <item>ibset</item>\n      <item>ieor</item>\n      <item>ior</item>\n      <item>ishft</item>\n      <item>ishftc</item>\n      <item>not</item>\n    <!-- Bit manipulation elemental subroutine -->\n      <item>mvbits</item>\n    <!-- Merge elemental function -->\n      <item>merge</item>\n    </list>\n\n<!-- I N Q U I R Y    F U N C T I O N S -->\n    <list name=\"inquiry_fn\">\n    <!-- Inquiry functions for any type -->\n      <item>associated</item>\n      <item>present</item>\n      <item>kind</item>\n    <!-- String-handling inquiry function -->\n      <item>len</item>\n    <!-- Numeric inquiry functions -->\n      <item>digits</item>\n      <item>epsilon</item>\n      <item>huge</item>\n      <item>maxexponent</item>\n      <item>minexponent</item>\n      <item>precision</item>\n      <item>radix</item>\n      <item>range</item>\n      <item>tiny</item>\n    <!-- Bit inquiry function -->\n      <item>bit_size</item>\n    <!-- Array inquiry functions -->\n      <item>allocated</item>\n      <item>lbound</item>\n      <item>ubound</item>\n      <item>shape</item>\n      <item>size</item>\n    </list>\n\n<!-- T R A N S F O R M A T I O N A L    F U N C T I O N S -->\n    <list name=\"transform_fn\">\n    <!-- String-handling transformational functions -->\n      <item>repeat</item>\n      <item>trim</item>\n    <!-- Transformational functions for kind values -->\n      <item>selected_int_kind</item>\n      <item>selected_real_kind</item>\n    <!-- Transfer function -->\n      <item>transfer</item>\n    <!-- Vector and matrix multiplication functions -->\n      <item>dot_product</item>\n      <item>matmul</item>\n    <!-- Transformational functions that reduce arrays -->\n      <item>all</item>\n      <item>any</item>\n      <item>count</item>\n      <item>maxval</item>\n      <item>minval</item>\n      <item>product</item>\n      <item>sum</item>\n    <!-- Packing and unpacking arrays -->\n      <item>pack</item>\n      <item>unpack</item>\n    <!-- Transformational function for reshaping an array -->\n      <item>reshape</item>\n    <!-- Transformational function for replication -->\n      <item>spread</item>\n    <!-- Array shifting functions -->\n      <item>cshift</item>\n      <item>eoshift</item>\n    <!-- Matrix transpose -->\n      <item>transpose</item>\n    <!-- Transformational functions for geometric location -->\n      <item>maxloc</item>\n      <item>minloc</item>\n    </list>\n\n<!-- N O N    E L E M E N T A L    S U B R O U T I N E S -->\n    <list name=\"non_elem_subr\">\n    <!-- Real time clock -->\n      <item>date_and_time</item>\n      <item>system_clock</item>\n    <!-- Random numbers -->\n      <item>random_number</item>\n      <item>random_seed</item>\n    </list>\n\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n<!-- *                           C O N T E X T S                         *  -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"default\" >\n        <IncludeRules context=\"find_preprocessor\" />\n        <IncludeRules context=\"find_comments\" />\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"find_decls\" />\n        <IncludeRules context=\"find_intrinsics\" />\n        <IncludeRules context=\"find_io_stmnts\" />\n        <IncludeRules context=\"find_op_and_log\" />\n        <IncludeRules context=\"find_numbers\" />\n        <IncludeRules context=\"find_continue\" />\n        <IncludeRules context=\"find_symbols\" />\n        <IncludeRules context=\"find_begin_stmnts\" />\n        <IncludeRules context=\"find_end_stmnts\" />\n        <IncludeRules context=\"find_mid_stmnts\" />\n      </context>\n<!--************************END OF THE MAIN CONTEXT*************************-->\n\n\n<!-- IMPORTANT: If you modify something, do it also in \"fortran-free.xml\"! -->\n\n<!-- This context highlights preprocessor lines -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_preprocessor\">\n        <DetectChar attribute=\"Preprocessor\" context=\"preprocessor\" char=\"#\" column=\"0\"/>\n        <StringDetect attribute=\"Preprocessor\" context=\"preprocessor\" String=\"cDEC$\" column=\"0\"/>\n        <StringDetect attribute=\"Preprocessor\" context=\"preprocessor\" String=\"CDEC$\" column=\"0\"/>\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"preprocessor\" />\n\n<!-- This context highlights operators and the logical values .true. .false. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_op_and_log\">\n        <StringDetect attribute=\"Logical\" context=\"#stay\" String=\".true.\" insensitive=\"true\"/>\n        <StringDetect attribute=\"Logical\" context=\"#stay\" String=\".false.\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"\\.[A-Za-z]+\\.\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"=\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"/\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"&lt;\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"&gt;\" char1=\"=\"/>\n        <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"&lt;&gt;\"/>\n      </context>\n\n<!-- This context highlights comments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_comments\">\n        <AnyChar attribute=\"Comment\" context=\"comment\" String=\"cC*\" column=\"0\"/>\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"!\"/>\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\".\" column=\"72\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n        <IncludeRules context=\"##Alerts\"/>\n        <IncludeRules context=\"##Modelines\"/>\n      </context>\n\n<!-- This context highlights symbols -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_symbols\">\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"*\" char1=\"*\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"(\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"/\" char1=\")\"/>\n        <AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"&amp;+-*/=?[]^{|}~\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"(),\"/>\n      </context>\n\n<!-- This context highlights the continuation character -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_continue\">\n        <RegExpr attribute=\"Continuation character\" context=\"#stay\" String=\"^     [^0-9\\s]\"/>\n      </context>\n\n<!-- This context highlights items inside the parentesis of a function -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"inside_func_paren\">\n        <DetectChar attribute=\"Normal Text\" context=\"inside_func_paren\" char=\"(\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\"/>\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"find_intrinsics\" />\n        <IncludeRules context=\"find_numbers\" />\n      </context>\n\n<!-- The following two contexts match input/output statements -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_io_stmnts\">\n        <RegExpr attribute=\"IO Function\" context=\"find_io_paren\" String=\"\\b(read|write|backspace|rewind|end\\s*file|close|open|inquire)\\s*[(]\" insensitive=\"true\"/>\n        <RegExpr attribute=\"IO Function\" context=\"format_stmnt\" String=\"\\bformat\\s*[(]\" insensitive=\"true\"/>\n        <RegExpr attribute=\"IO Function\" context=\"#stay\" String=\"\\bend\\s*file\\b\" insensitive=\"true\"/>\n        <keyword attribute=\"IO Function\" context=\"#stay\" String=\"io_functions\"/>\n      </context>\n<!-- This context matches parenthesis for the read, write, ... statements -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_io_paren\">\n        <DetectChar attribute=\"IO Function\" context=\"#stay\" char=\"*\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"inside_func_paren\" char=\"(\"/>\n        <DetectChar attribute=\"IO Function\" context=\"#pop\" char=\")\"/>\n        <keyword attribute=\"IO Function\"  context=\"#stay\" String=\"io_keywords\"/>\n        <keyword attribute=\"IO Function\"  context=\"#stay\" String=\"inquire_keywords\"/>\n        <keyword attribute=\"IO Function\"  context=\"#stay\" String=\"open_keywords\"/>\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"find_intrinsics\" />\n        <IncludeRules context=\"find_numbers\" />\n        <IncludeRules context=\"find_symbols\" />\n      </context>\n<!-- This context highlights the text inside the parenthesis of fortran statement -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"format_stmnt\">\n        <DetectChar attribute=\"IO Function\" context=\"format_stmnt\" char=\"(\"/>\n        <DetectChar attribute=\"IO Function\" context=\"#pop\" char=\")\"/>\n        <RegExpr attribute=\"IO Function\" context=\"#stay\" String=\"[0-9]*/\" insensitive=\"true\"/>\n        <DetectChar attribute=\"IO Function\" context=\"#stay\" char=\":\"/>\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"find_symbols\" />\n      </context>\n\n<!-- The following context matches the begin of program units -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_begin_stmnts\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bmodule\\s+procedure\\b\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(subroutine|function|block\\s*data|program|module)\\b\" insensitive=\"true\" beginRegion=\"Routine\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(then|do|select\\s+case)\\b\" insensitive=\"true\" beginRegion=\"Block\"/>\n      </context>\n<!-- The following context matches the end of program units -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_end_stmnts\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(subroutine|function|block\\s*data|program|module)\\b\" insensitive=\"true\" endRegion=\"Routine\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(do|if)\\b\" insensitive=\"true\" endRegion=\"Block\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(select|where|forall|interface)\\b\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\belse\\s*if\\b\" insensitive=\"true\" endRegion=\"Block\"/>\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"end\" insensitive=\"true\" endRegion=\"Routine\"/>\n      </context>\n<!-- The following context matches the mid of program units -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_mid_stmnts\">\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"else\" insensitive=\"true\" endRegion=\"Block\" beginRegion=\"Block\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bcase(\\s+default)?\\b\" insensitive=\"true\" endRegion=\"Block\" beginRegion=\"Block\"/>\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"contains\" insensitive=\"true\" endRegion=\"Routine\" beginRegion=\"Routine\"/>\n      </context>\n\n<!-- The following two contexts match declarations -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_decls\">\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"\\b(integer|real|complex)[\\*]\\d{1,2}\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"\\bend\\s*type\\b\" insensitive=\"true\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <WordDetect attribute=\"Data Type\" context=\"#stay\" String=\"data\" firstNonSpace=\"true\" insensitive=\"true\"/>\n        <!--<RegExpr attribute=\"Data Type\" context=\"find_paren\" String=\"real\\s*[(]\" firstNonSpace=\"true\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"real(?![\\w\\*])\" firstNonSpace=\"true\" insensitive=\"true\"/>-->\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"\\bcharacter[*][0-9]+\\b\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Data Type\" context=\"find_paren\" String=\"\\b(type|integer|real|complex|character|logical|intent|dimension)\\s*[(]\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"\\b(type|integer|real|complex|character|logical|double\\s*precision|intent|dimension)\\b\" insensitive=\"true\"/>\n        <Detect2Chars attribute=\"Data Type\" context=\"#stay\" char=\":\" char1=\":\"/>\n      </context>\n<!-- This context matches parenthesis in data type declarations, such as in 'real(...)'-->\n      <context attribute=\"Data Type\" lineEndContext=\"#pop\" name=\"find_paren\">\n        <DetectChar attribute=\"Data Type\" context=\"find_paren\" char=\"(\"/>\n        <DetectChar attribute=\"Data Type\" context=\"#pop\" char=\")\"/>\n      </context>\n\n<!-- The following context matches intrinsic procedures -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_intrinsics\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n      <!-- INTRINSIC PROCEDURES -->\n        <keyword attribute=\"Elemental Procedure\"       context=\"#stay\" String=\"elemental_procs\"/>\n        <keyword attribute=\"Inquiry Function\"          context=\"#stay\" String=\"inquiry_fn\"/>\n        <keyword attribute=\"Transformational Function\" context=\"#stay\" String=\"transform_fn\"/>\n        <keyword attribute=\"Non elemental subroutine\"  context=\"#stay\" String=\"non_elem_subr\"/>\n      </context>\n\n<!-- The following context matches integer and real numbers -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_numbers\">\n        <!-- Floating-point numbers with optional kind -->\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"[0-9]*\\.[0-9]+([de][+-]?[0-9]+)?([_]([0-9]+|[a-z][\\w_]*))?\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\b[0-9]+\\.[0-9]*([de][+-]?[0-9]+)?([_]([0-9]+|[a-z][\\w_]*))?(?![a-z])\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\b[0-9]+[de][+-]?[0-9]+([_]([0-9]+|[a-z][\\w_]*))?\" insensitive=\"true\"/>\n        <!-- Integers with optional kind specifier -->\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"\\b[0-9]+([_]([0-9]+|[a-zA-Z][\\w_]*))?\"/>\n        <!-- Integers in binary, octal and hexadecimal notations -->\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"\\b[bozx]([&apos;][0-9a-f]+[&apos;]|[&quot;][0-9a-f]+[&quot;])\" insensitive=\"true\"/>\n      </context>\n\n<!-- The following four contexts implement the complex string multi-line declarations -->\n      <!-- Matches STRINGS (there are 2 types of strings: '...' and \"...\") -->\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"find_strings\">\n        <DetectChar attribute=\"String\" context=\"string_1\" char=\"&apos;\"/>\n        <DetectChar attribute=\"String\" context=\"string_2\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string_1\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"String\" context=\"#pop\" String=\"[^&apos;]*&apos;\"/>\n        <RegExpr attribute=\"Keyword\" context=\"end_of_string\" String=\"&amp;\\s*$\"/>\n        <RegExpr attribute=\"String\" context=\"end_of_string\" String=\".*(?=&amp;\\s*$)\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string_2\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"String\" context=\"#pop\" String=\"[^&quot;]*&quot;\"/>\n        <RegExpr attribute=\"Keyword\" context=\"end_of_string\" String=\"&amp;\\s*$\"/>\n        <RegExpr attribute=\"String\" context=\"end_of_string\" String=\".*(?=&amp;\\s*$)\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"end_of_string\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"&amp;\\s*$\"/>\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"&amp;\" firstNonSpace=\"true\"/>\n        <AnyChar attribute=\"Comment\" context=\"comment\" String=\"cC*\" column=\"0\"/>\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"!\" firstNonSpace=\"true\"/>\n      </context>\n    </contexts>\n\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n<!-- *             S T Y L E   I T E M   D E F I N I T I O N S           *  -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Logical\" defStyleNum=\"dsConstant\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"IO Function\" defStyleNum=\"dsFunction\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Elemental Procedure\" defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Continuation character\" defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Inquiry Function\" defStyleNum=\"dsFunction\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"Transformational Function\" defStyleNum=\"dsFunction\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Non elemental subroutine\" defStyleNum=\"dsFunction\" bold=\"1\" italic=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"c\"/>\n    </comments>\n    <keywords casesensitive=\"0\"/>\n  </general>\n</language>\n<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fortran-free.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Fortran (Free Format)\" version=\"2\" kateversion=\"5.53\" section=\"Sources\" extensions=\"*.f90;*.F90;*.f95;*.F95;*.f03;*.F03;*.f08;*.F08;\" mimetype=\"text/x-fortran-src\" casesensitive=\"0\" author=\"Franchin Matteo (fnch@libero.it), Janus Weil\" license=\"MIT\" priority=\"10\">\n<!-- Original author: Franchin Matteo (fnch@libero.it).\n     Adaptation to free & fixed format: Janus Weil.\n-->\n<!-- NOTE: Keep in sync with the \"Fortran (Fixed Format)\" highlighter! (fortran-fixed.xml) -->\n  <highlighting>\n\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n<!-- *                              L I S T S                            *  -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n    <list name=\"keywords\">\n      <include>keywords##Fortran (Fixed Format)</include>\n      <item>associate</item>\n      <item>import</item>\n      <item>impure</item>\n    </list>\n    <list name=\"io_functions\">\n      <include>io_functions##Fortran (Fixed Format)</include>\n    </list>\n    <!-- Keywords inside read(...), write(...), backspace(...),\n          rewind(...), endfile(...), close(...) -->\n    <list name=\"io_keywords\">\n      <include>io_keywords##Fortran (Fixed Format)</include>\n    </list>\n    <!-- Keywords inside open(...) -->\n    <list name=\"open_keywords\">\n      <include>open_keywords##Fortran (Fixed Format)</include>\n    </list>\n    <!-- Keywords inside inquire(...) -->\n    <list name=\"inquire_keywords\">\n      <include>inquire_keywords##Fortran (Fixed Format)</include>\n    </list>\n    <list name=\"types\">\n      <include>types##Fortran (Fixed Format)</include>\n      <item>abstract</item>\n      <item>asynchronous</item>\n      <item>bind</item>\n      <item>contiguous</item>\n      <item>deferred</item>\n      <item>enum</item>\n      <item>enumerator</item>\n      <item>final</item>\n      <item>generic</item>\n      <item>nopass</item>\n      <item>non_overridable</item>\n      <item>protected</item>\n      <item>value</item>\n      <item>volatile</item>\n    </list>\n\n<!-- There are 4 types of intrinsic procedures in Fortran 90:\n   1) Elemental procedures (elemental_procs);\n   2) Inquiry functions (inquiry_fn);\n   3) Transformational functions (transform_fn);\n   4) Non elemental subroutines (non_elem_subr);\n  Often mathematical functions have one generic form and many specific names!\n  If you use the generic form, the compiler will select the right function\n  to use depending on the type of the arguments.\n  But you can use also the specific names!\n  -->\n\n<!-- E L E M E N T A L    P R O C E D U R E S -->\n    <list name=\"elemental_procs\">\n      <include>elemental_procs##Fortran (Fixed Format)</include>\n    <!-- Elemental mathematical functions -->\n      <item>acosh</item>\n      <item>asinh</item>\n      <item>atanh</item>\n      <item>bessel_j0</item>\n      <item>bessel_j1</item>\n      <item>bessel_jn</item>\n      <item>bessel_y0</item>\n      <item>bessel_y1</item>\n      <item>bessel_yn</item>\n      <item>erf</item>\n      <item>erfc</item>\n      <item>erfc_scaled</item>\n      <item>gamma</item>\n      <item>log_gamma</item>\n      <item>hypot</item>\n    </list>\n\n<!-- I N Q U I R Y    F U N C T I O N S -->\n    <list name=\"inquiry_fn\">\n      <include>inquiry_fn##Fortran (Fixed Format)</include>\n    <!-- Inquiry functions for any type -->\n      <item>extends_type_of</item>\n      <item>same_type_as</item>\n      <item>storage_size</item>\n    <!-- Coarray inquiry functions -->\n      <item>lcobound</item>\n      <item>ucobound</item>\n      <item>image_index</item>\n    </list>\n\n<!-- T R A N S F O R M A T I O N A L    F U N C T I O N S -->\n    <list name=\"transform_fn\">\n      <include>transform_fn##Fortran (Fixed Format)</include>\n    <!-- Transformational functions for kind values -->\n      <item>selected_char_kind</item>\n    <!-- Transformational functions that reduce arrays -->\n      <item>parity</item>\n      <item>iall</item>\n      <item>iany</item>\n      <item>iparity</item>\n    <!-- Coarray transformational functions -->\n      <item>num_images</item>\n      <item>this_image</item>\n    </list>\n\n<!-- N O N    E L E M E N T A L    S U B R O U T I N E S -->\n    <list name=\"non_elem_subr\">\n      <include>non_elem_subr##Fortran (Fixed Format)</include>\n    <!-- Real time clock -->\n      <item>cpu_time</item>\n    <!-- System commands -->\n      <item>execute_command_line</item>\n      <item>get_environment_variable</item>\n    </list>\n\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n<!-- *                           C O N T E X T S                         *  -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"default\" >\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"find_io_stmnts\" />\n        <IncludeRules context=\"find_op_and_log##Fortran (Fixed Format)\" />\n        <IncludeRules context=\"find_numbers##Fortran (Fixed Format)\" />\n        <IncludeRules context=\"find_preprocessor##Fortran (Fixed Format)\" />\n        <IncludeRules context=\"find_comments\" />\n        <IncludeRules context=\"find_symbols##Fortran (Fixed Format)\" />\n        <IncludeRules context=\"find_begin_stmnts\" />\n        <IncludeRules context=\"find_mid_stmnts\" />\n        <IncludeRules context=\"find_end_stmnts\" />\n        <IncludeRules context=\"find_decls\" />\n        <IncludeRules context=\"find_intrinsics\" />\n      </context>\n<!--************************END OF THE MAIN CONTEXT*************************-->\n\n\n<!-- IMPORTANT: If you modify something, do it also in \"fortran-fixed.xml\"! -->\n\n<!-- This context highlights comments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_comments\">\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"!\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n        <IncludeRules context=\"##Alerts\"/>\n        <IncludeRules context=\"##Modelines\"/>\n      </context>\n\n<!-- This context highlights items inside the parentesis of a function -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"inside_func_paren\">\n      <!-- inside_func_paren##Fortran (Fixed Format) -->\n        <DetectChar attribute=\"Normal Text\" context=\"inside_func_paren\" char=\"(\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\"/>\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"find_intrinsics\" />\n        <IncludeRules context=\"find_numbers##Fortran (Fixed Format)\" />\n      </context>\n\n<!-- The following two contexts match input/output statements -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_io_stmnts\">\n        <RegExpr attribute=\"IO Function\" context=\"find_io_paren\" String=\"\\b(flush|wait)\\s*[(]\" insensitive=\"true\"/>\n      <!-- find_io_stmnts##Fortran (Fixed Format) -->\n        <RegExpr attribute=\"IO Function\" context=\"find_io_paren\" String=\"\\b(read|write|backspace|rewind|end\\s*file|close|open|inquire)\\s*[(]\" insensitive=\"true\"/>\n        <RegExpr attribute=\"IO Function\" context=\"format_stmnt\" String=\"\\bformat\\s*[(]\" insensitive=\"true\"/>\n        <RegExpr attribute=\"IO Function\" context=\"#stay\" String=\"\\bend\\s*file\\b\" insensitive=\"true\"/>\n        <keyword attribute=\"IO Function\" context=\"#stay\" String=\"io_functions\"/>\n      </context>\n<!-- This context matches parenthesis for the read, write, ... statements -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_io_paren\">\n      <!-- find_io_paren##Fortran (Fixed Format) -->\n        <DetectChar attribute=\"IO Function\" context=\"#stay\" char=\"*\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"inside_func_paren\" char=\"(\"/>\n        <DetectChar attribute=\"IO Function\" context=\"#pop\" char=\")\"/>\n        <keyword attribute=\"IO Function\"  context=\"#stay\" String=\"io_keywords\"/>\n        <keyword attribute=\"IO Function\"  context=\"#stay\" String=\"inquire_keywords\"/>\n        <keyword attribute=\"IO Function\"  context=\"#stay\" String=\"open_keywords\"/>\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"find_intrinsics\" />\n        <IncludeRules context=\"find_numbers##Fortran (Fixed Format)\" />\n        <IncludeRules context=\"find_symbols##Fortran (Fixed Format)\" />\n      </context>\n<!-- This context highlights the text inside the parenthesis of fortran statement -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"format_stmnt\">\n        <DetectChar attribute=\"IO Function\" context=\"format_stmnt\" char=\"(\"/>\n        <DetectChar attribute=\"IO Function\" context=\"#pop\" char=\")\"/>\n        <IncludeRules context=\"find_strings\" />\n        <IncludeRules context=\"format_stmnt##Fortran (Fixed Format)\" />\n      </context>\n\n<!-- FIXME: beginRegion/endRegion don't work well with IncludeRules. When this is corrected, use IncludeRules instead of replicating rules. -->\n<!-- The following context matches the begin of program units -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_begin_stmnts\">\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"submodule\" insensitive=\"true\" beginRegion=\"Routine\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(do\\s*(,|\\s)\\s*concurrent|select\\s+type|block|critical)\\b\" insensitive=\"true\" beginRegion=\"Block\"/>\n      <!-- Here IncludeRules: find_begin_stmnts##Fortran (Fixed Format) -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bmodule\\s+procedure\\b\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(subroutine|function|block\\s*data|program|module)\\b\" insensitive=\"true\" beginRegion=\"Routine\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(then|do|select\\s+case)\\b\" insensitive=\"true\" beginRegion=\"Block\"/>\n      </context>\n<!-- The following context matches the end of program units -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_end_stmnts\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(procedure|submodule)\\b\" insensitive=\"true\" endRegion=\"Routine\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(block|critical)\\b\" insensitive=\"true\" endRegion=\"Block\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(associate)\\b\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"\\bend\\s*(type|enum)\\b\" insensitive=\"true\"/>\n      <!-- Here IncludeRules: find_end_stmnts##Fortran (Fixed Format) -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(subroutine|function|block\\s*data|program|module)\\b\" insensitive=\"true\" endRegion=\"Routine\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(do|if)\\b\" insensitive=\"true\" endRegion=\"Block\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend\\s*(select|where|forall|interface)\\b\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\belse\\s*if\\b\" insensitive=\"true\" endRegion=\"Block\"/>\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"end\" insensitive=\"true\" endRegion=\"Routine\"/>\n      </context>\n<!-- The following context matches the mid of program units -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_mid_stmnts\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(type\\s+is|class\\s+(is|default))\\b\" insensitive=\"true\" endRegion=\"Block\" beginRegion=\"Block\"/>\n      <!-- Here IncludeRules: find_mid_stmnts##Fortran (Fixed Format) -->\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"else\" insensitive=\"true\" endRegion=\"Block\" beginRegion=\"Block\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bcase(\\s+default)?\\b\" insensitive=\"true\" endRegion=\"Block\" beginRegion=\"Block\"/>\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"contains\" insensitive=\"true\" endRegion=\"Routine\" beginRegion=\"Routine\"/>\n      </context>\n\n<!-- The following two contexts match declarations -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_decls\">\n        <RegExpr attribute=\"Data Type\" context=\"find_paren\" String=\"\\b(class|extends|procedure|pass|codimension)\\s*[(]\" insensitive=\"true\"/>\n        <WordDetect attribute=\"Data Type\" context=\"#stay\" String=\"codimension\" insensitive=\"true\"/>\n        <WordDetect attribute=\"Data Type\" context=\"#stay\" String=\"procedure\" insensitive=\"true\"/>\n        <WordDetect attribute=\"Data Type\" context=\"#stay\" String=\"pass\" insensitive=\"true\"/>\n      <!-- find_decls##Fortran (Fixed Format) -->\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <!--<RegExpr attribute=\"Data Type\" context=\"find_paren\" String=\"real\\s*[(]\" firstNonSpace=\"true\" insensitive=\"true\"/>-->\n        <RegExpr attribute=\"Data Type\" context=\"find_paren\" String=\"\\b(type|integer|real|complex|character|logical|intent|dimension)\\s*[(]\" insensitive=\"true\"/>\n        <IncludeRules context=\"find_decls##Fortran (Fixed Format)\"/>\n      </context>\n<!-- This context matches parenthesis in data type declarations, such as in 'real(...)'-->\n      <context attribute=\"Data Type\" lineEndContext=\"#pop\" name=\"find_paren\">\n      <!-- find_paren##Fortran (Fixed Format) -->\n        <DetectChar attribute=\"Data Type\" context=\"find_paren\" char=\"(\"/>\n        <DetectChar attribute=\"Data Type\" context=\"find_paren\" char=\"[\"/>\n        <DetectChar attribute=\"Data Type\" context=\"#pop\" char=\")\"/>\n        <DetectChar attribute=\"Data Type\" context=\"#pop\" char=\"]\"/>\n      </context>\n\n<!-- The following context matches intrinsic procedures -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find_intrinsics\">\n      <!-- find_intrinsics##Fortran (Fixed Format) -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n      <!-- INTRINSIC PROCEDURES -->\n        <keyword attribute=\"Elemental Procedure\"       context=\"#stay\" String=\"elemental_procs\"/>\n        <keyword attribute=\"Inquiry Function\"          context=\"#stay\" String=\"inquiry_fn\"/>\n        <keyword attribute=\"Transformational Function\" context=\"#stay\" String=\"transform_fn\"/>\n        <keyword attribute=\"Non elemental subroutine\"  context=\"#stay\" String=\"non_elem_subr\"/>\n      </context>\n\n<!-- The following four contexts implement the complex string multi-line declarations -->\n<!-- NOTE: Contexts replicated from \"Fortran (Fixed Format)\" -->\n      <!-- Matches STRINGS (there are 2 types of strings: '...' and \"...\") -->\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"find_strings\">\n        <DetectChar attribute=\"String\" context=\"string_1\" char=\"&apos;\"/>\n        <DetectChar attribute=\"String\" context=\"string_2\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string_1\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"String\" context=\"#pop\" String=\"[^&apos;]*&apos;\"/>\n        <RegExpr attribute=\"Keyword\" context=\"end_of_string\" String=\"&amp;\\s*$\"/>\n        <RegExpr attribute=\"String\" context=\"end_of_string\" String=\".*(?=&amp;\\s*$)\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string_2\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"String\" context=\"#pop\" String=\"[^&quot;]*&quot;\"/>\n        <RegExpr attribute=\"Keyword\" context=\"end_of_string\" String=\"&amp;\\s*$\"/>\n        <RegExpr attribute=\"String\" context=\"end_of_string\" String=\".*(?=&amp;\\s*$)\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"end_of_string\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"&amp;\\s*$\"/>\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"&amp;\" firstNonSpace=\"true\"/>\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"!\" firstNonSpace=\"true\"/>\n      </context>\n    </contexts>\n\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n<!-- *             S T Y L E   I T E M   D E F I N I T I O N S           *  -->\n<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"IO Function\" defStyleNum=\"dsFunction\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Elemental Procedure\" defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Inquiry Function\" defStyleNum=\"dsFunction\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"Transformational Function\" defStyleNum=\"dsFunction\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Non elemental subroutine\" defStyleNum=\"dsFunction\" bold=\"1\" italic=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"!\"/>\n    </comments>\n    <keywords casesensitive=\"0\"/>\n  </general>\n</language>\n<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/freebasic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"FreeBASIC\" version=\"4\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.bas;*.bi;*.BAS;*.BI\" mimetype=\"text/x-freebasic\" author=\"Chris Neugebauer (chrisjrn@gmail.com)\" license=\"GPL\">\n  <highlighting>\n    <list name=\"preproc\">\n    \n      <item>#DEFINE</item>\n      <item>#ELSE</item>\n      <item>#ELSEIF</item>\n      <item>#ENDIF</item>\n      <item>#IF</item>\n      <item>#IFDEF</item>\n      <item>#IFNDEF</item>\n      <item>#UNDEF</item>\n      <item>$DYNAMIC</item>\n      <item>$INCLIB</item>\n      <item>$INCLUDE</item>\n      <item>$STATIC</item>\n    \n    </list>\n    \n    <list name=\"keywords\">\n      <item>Declare</item>\n      \n      <item>Open</item>\n      \n      <item>For</item>\n      <item>Input</item>\n      <item>Output</item>\n      <item>Binary</item>\n      <item>Random</item>\n\n      <item>Close</item>\n      \n      <item>To</item>\n      <item>Step</item>\n      <item>Next</item>\n      <item>As</item>\n      <item>Break</item>\n      <item>Exit</item>\n      <item>If</item>\n      <item>Then</item>\n      <item>Else</item>\n      <item>Until</item>\n      <item>Select</item>\n      <item>System</item>\n      <item>Case</item>\n      <item>Default</item>\n      <item>EndSelect</item>\n      <item>Do</item>\n      <item>Loop</item>\n      <item>While</item>\n      <item>Wend</item>\n      <item>End</item>\n      <item>Type</item>\n      <item>DefType</item>\n      <item>Dim</item>\n      <item>Global</item>\n      <item>Function</item>\n      <item>Sub</item>\n      <item>Shared</item>\n      <item>Protected</item>\n      <item>Static</item>\n      <item>Declare</item>\n\n      <item>Unsigned</item>\n      \n      <item>Data</item>\n      <item>Restore</item>\n      <item>Read</item>\n\n\n      <item>Goto</item>\n      <item>Gosub</item>\n      <item>Return</item>\n      \n      <item>DEFBYTE</item>\n      <item>DEFDBL</item>\n      <item>DEFINT</item>\n      <item>DEFLNG</item>\n      <item>DEFSHORT</item>\n      <item>DEFSNG</item>\n      <item>DEFSTR</item>\n      <item>DEFUBYTE</item>\n      <item>DEFUINT</item>\n      <item>DEFUSHORT</item>\n    </list>\n\n    <list name=\"Data Types\">  \n      <item>Integer</item>\n      <item>Long</item>\n      <item>Single</item>\n      <item>Double</item>\n      <item>String</item>\n      <item>PTR</item>\n      <item>Byte</item>\n      <item>Dword</item>\n      <item>Qword</item>\n      <item>Word</item>\n    </list>\n        \n    <list name=\"functions\">\n      <item>AAA</item>\n      <item>AAD</item>\n      <item>AAM</item>\n      <item>AAS</item>\n      <item>ABS</item>\n      <item>ACOS</item>\n      <item>ADC</item>\n      <item>ADD</item>\n      <item>ALLOCATE</item>\n      <item>AND</item>\n      <item>AND</item>\n      <item>ARPL</item>\n      <item>ASC</item>\n      <item>ASIN</item>\n      <item>ASM</item>\n      <item>ATAN2</item>\n      <item>ATN</item>\n      <item>BASE</item>\n      <item>BEEP</item>\n      <item>BIN$</item>\n      <item>BLOAD</item>\n      <item>BOUND</item>\n      <item>BREAK</item>\n      <item>BSAVE</item>\n      <item>BSF</item>\n      <item>BSR</item>\n      <item>BSWAP</item>\n      <item>BT</item>\n      <item>BTC</item>\n      <item>BTR</item>\n      <item>BTS</item>\n      <item>BYREF</item>\n      <item>CALL</item>\n      <item>CALLOCATE</item>\n      <item>CALLS</item>\n      <item>CBW</item>\n      <item>CBYTE</item>\n      <item>CDBL</item>\n      <item>CDQ</item>\n      <item>CHAIN</item>\n      <item>CHDIR</item>\n      <item>CHR$</item>\n      <item>CINT</item>\n      <item>CIRCLE</item>\n      <item>CLC</item>\n      <item>CLD</item>\n      <item>CLEAR</item>\n      <item>CLI</item>\n      <item>CLNG</item>\n      <item>CLOSE</item>\n      <item>CLTS</item>\n      <item>CMC</item>\n      <item>CMP</item>\n      <item>CMPS</item>\n      <item>CMPSB</item>\n      <item>CMPSD</item>\n      <item>CMPSW</item>\n      <item>CMPXCHG</item>\n      <item>COLOR</item>\n      <item>COMMAND$</item>\n      <item>COMMON</item>\n      <item>CONST</item>\n      <item>CONTINUE</item>\n      <item>COS</item>\n      <item>CSHORT</item>\n      <item>CSIGN</item>\n      <item>CSNG</item>\n      <item>CUNSG</item>\n      <item>CURDIR$</item>\n      <item>CVD</item>\n      <item>CVI</item>\n      <item>CVL</item>\n      <item>CVS</item>\n      <item>CWD</item>\n      <item>CWDE</item>\n      <item>DAA</item>\n      <item>DAS</item>\n      <item>DATA</item>\n      <item>DATE$</item>\n      <item>DEALLOCATE</item>\n      <item>DEC</item>\n      <item>DIM</item>\n      <item>DIR$</item>\n      <item>DIV</item>\n      <item>DRAW</item>\n      <item>END</item>\n      <item>ENTER</item>\n      <item>ENUM</item>\n      <item>ENVIRON</item>\n      <item>ENVIRON$</item>\n      <item>EOF</item>\n      <item>EQV</item>\n      <item>ERASE</item>\n      <item>EXEC</item>\n      <item>EXEPATH</item>\n      <item>EXP</item>\n      <item>FIX</item>\n      <item>FLIP</item>\n      <item>FRE</item>\n      <item>FREEFILE</item>\n      <item>GET</item>\n      <item>GETKEY</item>\n      <item>GETMOUSE</item>\n      <item>HEX$</item>\n      <item>HLT</item>\n      <item>IDIV</item>\n      <item>IMP</item>\n      <item>IMUL</item>\n      <item>IN</item>\n      <item>INC</item>\n      <item>INKEY$</item>\n      <item>INP</item>\n      <item>INPUT</item>\n      <item>INPUT$</item>\n      <item>INS</item>\n      <item>INSB</item>\n      <item>INSD</item>\n      <item>INSTR</item>\n      <item>INT</item>\n      <item>INT</item>\n      <item>INTO</item>\n      <item>INVD</item>\n      <item>INVLPG</item>\n      <item>IRET</item>\n      <item>IRETD</item>\n      <item>JA</item>\n      <item>JAE</item>\n      <item>JB</item>\n      <item>JBE</item>\n      <item>JC</item>\n      <item>JCXZ</item>\n      <item>JE</item>\n      <item>JECXZ</item>\n      <item>JG</item>\n      <item>JGE</item>\n      <item>JL</item>\n      <item>JLE</item>\n      <item>JMP</item>\n      <item>JNA</item>\n      <item>JNAE</item>\n      <item>JNB</item>\n      <item>JNBE</item>\n      <item>JNC</item>\n      <item>JNE</item>\n      <item>JNG</item>\n      <item>JNGE</item>\n      <item>JNL</item>\n      <item>JNLE</item>\n      <item>JNO</item>\n      <item>JNP</item>\n      <item>JNS</item>\n      <item>JNZ</item>\n      <item>JO</item>\n      <item>JP</item>\n      <item>JPE</item>\n      <item>JPO</item>\n      <item>JS</item>\n      <item>JUMP</item>\n      <item>JZ</item>\n      <item>KILL</item>\n      <item>LAHF</item>\n      <item>LAR</item>\n      <item>LBOUND</item>\n      <item>LCASE$</item>\n      <item>LDS</item>\n      <item>LEA</item>\n      <item>LEAVE</item>\n      <item>LEAVED</item>\n      <item>LEAVEW</item>\n      <item>LEFT$</item>\n      <item>LEN</item>\n      <item>LES</item>\n      <item>LET</item>\n      <item>LFS</item>\n      <item>LGDT</item>\n      <item>LGS</item>\n      <item>LIB</item>\n      <item>LIDT</item>\n      <item>LINE</item>\n      <item>LLDT</item>\n      <item>LMSW</item>\n      <item>LOC</item>\n      <item>LOCK</item>\n      <item>LOCK</item>\n      <item>LODS</item>\n      <item>LODSB</item>\n      <item>LODSD</item>\n      <item>LODSW</item>\n      <item>LOF</item>\n      <item>LOG</item>\n      <item>LOOPD</item>\n      <item>LOOPDE</item>\n      <item>LOOPDNE</item>\n      <item>LOOPDNZ</item>\n      <item>LOOPDZ</item>\n      <item>LOOPE</item>\n      <item>LOOPNE</item>\n      <item>LOOPNZ</item>\n      <item>LOOPW</item>\n      <item>LOOPWE</item>\n      <item>LOOPWNE</item>\n      <item>LOOPWNZ</item>\n      <item>LOOPWZ</item>\n      <item>LOOPZ</item>\n      <item>LSET</item>\n      <item>LSL</item>\n      <item>LSS</item>\n      <item>LTR</item>\n      <item>LTRIM$</item>\n      <item>MID$</item>\n      <item>MKD$</item>\n      <item>MKDIR</item>\n      <item>MKI$</item>\n      <item>MKL$</item>\n      <item>MKS$</item>\n      <item>MOD</item>\n      <item>MOV</item>\n      <item>MOVS</item>\n      <item>MOVSB</item>\n      <item>MOVSD</item>\n      <item>MOVSW</item>\n      <item>MOVSX</item>\n      <item>MOVZX</item>\n      <item>MUL</item>\n      <item>MULTIKEY</item>\n      <item>NAME</item>\n      <item>NEG</item>\n      <item>NOP</item>\n      <item>NOT</item>\n      <item>NOTHING</item>\n      <item>OCT$</item>\n      <item>OPTION</item>\n      <item>OR</item>\n      <item>OUT</item>\n      <item>OUTS</item>\n      <item>OUTSB</item>\n      <item>OUTSD</item>\n      <item>OUTSW</item>\n      <item>PAINT</item>\n      <item>PALETTE</item>\n      <item>PCOPY</item>\n      <item>PEEK</item>\n      <item>PEEKI</item>\n      <item>PEEKS</item>\n      <item>PMAP</item>\n      <item>POINT</item>\n      <item>POKE</item>\n      <item>POKEI</item>\n      <item>POKES</item>\n      <item>POP</item>\n      <item>POPA</item>\n      <item>POPAD</item>\n      <item>POPF</item>\n      <item>POPFD</item>\n      <item>POS</item>\n      <item>PRESERVE</item>\n      <item>PRESET</item>\n      <item>PRINT</item>\n      <item>PRIVATE</item>\n      <item>PROCPTR</item>\n      <item>PSET</item>\n      <item>PTR</item>\n      <item>PUBLIC</item>\n      <item>PUSH</item>\n      <item>PUSHA</item>\n      <item>PUSHAD</item>\n      <item>PUSHF</item>\n      <item>PUSHFD</item>\n      <item>PUT</item>\n      <item>RANDOMIZE</item>\n      <item>RCL</item>\n      <item>RCR</item>\n      <item>REALLOCATE</item>\n      <item>REDIM</item>\n      <item>REM</item>\n      <item>REP</item>\n      <item>REPE</item>\n      <item>REPNE</item>\n      <item>REPNZ</item>\n      <item>REPZ</item>\n      <item>RESET</item>\n      <item>RET</item>\n      <item>RETURN</item>\n      <item>RGB</item>\n      <item>RIGHT$</item>\n      <item>RMDIR</item>\n      <item>RND</item>\n      <item>ROL</item>\n      <item>ROR</item>\n      <item>RSET</item>\n      <item>RTRIM$</item>\n      <item>RUN</item>\n      <item>SADD</item>\n      <item>SAHF</item>\n      <item>SAL</item>\n      <item>SAR</item>\n      <item>SBB</item>\n      <item>SCAS</item>\n      <item>SCASB</item>\n      <item>SCASD</item>\n      <item>SCASW</item>\n      <item>SCREEN</item>\n      <item>SCREENCOPY</item>\n      <item>SCREENINFO</item>\n      <item>SCREENLOCK</item>\n      <item>SCREENPTR</item>\n      <item>SCREENSET</item>\n      <item>SCREENUNLOCK</item>\n      <item>SEEK</item>\n      <item>SETA</item>\n      <item>SETAE</item>\n      <item>SETB</item>\n      <item>SETBE</item>\n      <item>SETC</item>\n      <item>SETDATE</item>\n      <item>SETE</item>\n      <item>SETENVIRON</item>\n      <item>SETG</item>\n      <item>SETGE</item>\n      <item>SETL</item>\n      <item>SETLE</item>\n      <item>SETNA</item>\n      <item>SETNAE</item>\n      <item>SETNB</item>\n      <item>SETNBE</item>\n      <item>SETNC</item>\n      <item>SETNE</item>\n      <item>SETNG</item>\n      <item>SETNGE</item>\n      <item>SETNL</item>\n      <item>SETNLE</item>\n      <item>SETNO</item>\n      <item>SETNP</item>\n      <item>SETNS</item>\n      <item>SETNZ</item>\n      <item>SETO</item>\n      <item>SETP</item>\n      <item>SETPE</item>\n      <item>SETPO</item>\n      <item>SETS</item>\n      <item>SETZ</item>\n      <item>SGDT</item>\n      <item>SGN</item>\n      <item>SHARED</item>\n      <item>SHELL</item>\n      <item>SHL</item>\n      <item>SHLD</item>\n      <item>SHR</item>\n      <item>SHRD</item>\n      <item>SIDT</item>\n      <item>SIN</item>\n      <item>SLDT</item>\n      <item>SLEEP</item>\n      <item>SMSW</item>\n      <item>SPACE$</item>\n      <item>SQR</item>\n      <item>STATIC</item>\n      <item>STC</item>\n      <item>STD</item>\n      <item>STI</item>\n      <item>STOP</item>\n      <item>STOS</item>\n      <item>STOSB</item>\n      <item>STOSD</item>\n      <item>STOSW</item>\n      <item>STR</item>\n      <item>STR$</item>\n      <item>STRING$</item>\n      <item>SWAP</item>\n      <item>TAN</item>\n      <item>TEST</item>\n      <item>TIME$</item>\n      <item>TIMER</item>\n      <item>TRIM$</item>\n      <item>TYPE</item>\n      <item>UBOUND</item>\n      <item>UCASE$</item>\n      <item>UNION</item>\n      <item>UNLOCK</item>\n      <item>VAL</item>\n      <item>VARPTR</item>\n      <item>VERR</item>\n      <item>VERW</item>\n      <item>VIEW</item>\n      <item>WAIT</item>\n      <item>WINDOWTITLE</item>\n      <item>WRITE</item>\n      <item>XADD</item>\n      <item>XCHG</item>\n      <item>XLAT</item>\n      <item>XLATB</item>\n      <item>XOR</item>\n    \n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(exit (function|sub|for|do|while|type|select))([\\s]|$)\" insensitive=\"true\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(declare (function|sub))([\\s]|$)\" insensitive=\"true\" />\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(while)([\\s]|$)\" insensitive=\"true\" beginRegion=\"WhileRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(wend)([\\s]|$)\" insensitive=\"true\" endRegion=\"WhileRegion\"/>\n        \n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(do)([\\s]|$)\" insensitive=\"true\" beginRegion=\"DoRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(loop)([\\s]|$)\" insensitive=\"true\" endRegion=\"DoRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(select)([\\s]|$)\" insensitive=\"true\" beginRegion=\"SelectRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(end select)([\\s]|$)\" insensitive=\"true\" endRegion=\"SelectRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(for (input|output|binary|random))([\\s]|$)\" insensitive=\"true\" />\n                \n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(for)([\\s]|$)\" insensitive=\"true\" beginRegion=\"ForRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(next)([\\s]|$)\" insensitive=\"true\" endRegion=\"ForRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(function)([.\\s]|$)\" insensitive=\"true\" beginRegion=\"fProcedureRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(end function)([\\s]|$)\" insensitive=\"true\" endRegion=\"fProcedureRegion\"/>\n        \n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(sub)([.\\s]|$)\" insensitive=\"true\" beginRegion=\"sProcedureRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(end sub)([\\s]|$)\" insensitive=\"true\" endRegion=\"sProcedureRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(type)([\\s]|$)\" insensitive=\"true\" beginRegion=\"StructureRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(end type)([\\s]|$)\" insensitive=\"true\" endRegion=\"StructureRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(if)([\\s]|$)\" insensitive=\"true\" beginRegion=\"IfRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(then )[a-zA-Z_\\x7f-\\xff].\" insensitive=\"true\" endRegion=\"IfRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(end if)([\\s]|$)\" insensitive=\"true\" endRegion=\"IfRegion\"/>\n\n\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Types\" context=\"#stay\" String=\"Data Types\"/>\n        <keyword attribute=\"Preprocessor\" context=\"#stay\" String=\"preproc\"/>\n         \n        <keyword attribute=\"Functions\" context=\"#stay\" String=\"functions\"/>\n        <RegExpr attribute=\"Constant\" context=\"#stay\" String=\"\\#+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\"/>\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"^\\s*;+\\s*BEGIN.*$\" beginRegion=\"marker\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"^\\s*;+\\s*END.*$\" endRegion=\"marker\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment1\" char=\"'\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment1\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Functions\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Data Types\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsConstant\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"'\" />\n    </comments>\n  </general>\n</language>\n<!-- // kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fsharp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Kate syntax highlighting for F# based on the OCAML syntax by Glyn Webster (glyn@wave.co.nz). -->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!-- Regular expresion constants: -->\n<!ENTITY LETTER \"A-Za-z\\300-\\326\\330-\\366\\370-\\377\">                <!-- Latin-1 letters. -->\n<!ENTITY IDENT  \"[&LETTER;_][&LETTER;0-9_']*\">                      <!-- OCaml identifiers. -->\n<!ENTITY MIDENT \"[A-Z][&LETTER;0-9_']*\">                            <!-- OCaml uppercase identifiers. -->\n<!ENTITY ESC    \"(\\\\[ntbr'&quot;\\\\]|\\\\[0-9]{3}|\\\\x[0-9A-Fa-f]{2})\"> <!-- OCaml character code escapes. -->\n<!ENTITY DEC    \"[0-9][0-9_]*\">                                     <!-- Decimal digits with underscores. -->\n]>\n<language name=\"FSharp\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.fs;*.fsi;*.fsx\" mimetype=\"\" priority=\"10\" author=\"Bas Bossink (bas.bossink@gmail.com)\" license=\"LGPL\">\n\n  <highlighting>\n    <list name=\"keywords\">\n      <item>abstract</item>\n      <item>and</item>\n      <item>as</item>\n      <item>assert</item>\n      <item>base</item>\n<!--       <item>begin</item> -->\n      <item>class</item>\n      <item>delegate</item>\n<!--       <item>do</item> -->\n<!--       <item>done</item> -->\n      <item>dowcast</item>\n      <item>downto</item>\n      <item>elif</item>\n      <item>else</item>\n<!--       <item>end</item> -->\n      <item>exception</item>\n      <item>extern</item>\n      <item>false</item>\n      <item>for</item>\n      <item>fun</item>\n      <item>function</item>\n      <item>functor</item>\n      <item>global</item>\n      <item>if</item>\n      <item>in</item>\n<!--       <item>include</item> -->\n      <item>inherit</item>\n      <item>inline</item>\n      <item>interfaece</item>\n      <item>internal</item>\n      <item>lazy</item>\n      <item>let</item>\n      <item>match</item>\n      <item>member</item>\n<!--       <item>module</item> -->\n      <item>mutable</item>\n      <item>namespace</item>\n      <item>new</item>\n      <item>not</item>\n      <item>null</item>\n<!--       <item>object</item> -->\n      <item>of</item>\n<!--       <item>open</item> -->\n      <item>or</item>\n      <item>override</item>\n      <item>private</item>\n      <item>public</item>\n      <item>rec</item>\n      <item>ref</item>\n      <item>return</item>\n<!--       <item>sig</item> -->\n      <item>static</item>\n<!--       <item>struct</item> -->\n      <item>then</item>\n      <item>to</item>\n      <item>true</item>\n      <item>try</item>\n      <item>type</item>\n      <item>upcast</item>\n      <item>use</item>\n      <item>val</item>\n      <item>void</item>\n      <item>when</item>\n      <item>while</item>\n      <item>with</item>\n      <item>yield</item>\n    </list>\n    <list name=\"core types\">\n      <item>bool</item>\n      <item>byte</item>\n      <item>sbyte</item>\n      <item>int16</item>\n      <item>uint16</item>\n      <item>int</item>\n      <item>uint32</item>\n      <item>int64</item>\n      <item>uint64</item>\n      <item>nativeint</item>\n      <item>unativeint</item>\n      <item>char</item>\n      <item>string</item>\n      <item>decimal</item>\n      <item>unit</item>\n      <item>void</item>\n      <item>float32</item>\n      <item>single</item>\n      <item>float</item>\n      <item>double</item>\n      <item>bigint</item>\n      <item>option</item>\n      <item>seq</item>\n    </list>\n    <list name=\"end\">\n      <item>end</item>\n    </list>\n    <list name=\"sig\">\n      <item>sig</item>\n    </list>\n    <list name=\"struct\">\n      <item>struct</item>\n    </list>\n    <list name=\"object\">\n      <item>object</item>\n    </list>\n    <list name=\"begin\">\n      <item>begin</item>\n    </list>\n    <list name=\"do\">\n      <item>do</item>\n    </list>\n    <list name=\"done\">\n      <item>done</item>\n    </list>\n    <list name=\"module_environment\">\n      <item>module</item>\n      <item>open</item>\n    </list>\n    <contexts>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\n        <Detect2Chars attribute=\"Comment\" context=\"Multiline Comment\" char=\"(\" char1=\"*\" beginRegion=\"comment\" />\n        <Detect2Chars context=\"Singleline Comment\" char=\"/\" char1=\"/\" />\n\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"(\" beginRegion=\"paren\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\")\" endRegion=\"paren\"/>\n\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"record\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"record\"/>\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"[\" char1=\"&lt;\" beginRegion=\"attribute\"/>\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"&gt;\" char1=\"]\" endRegion=\"attribute\"/>\n\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"[\" char1=\"|\" beginRegion=\"array\"/>\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"|\" char1=\"]\" endRegion=\"array\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"[\" beginRegion=\"list\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"]\" endRegion=\"list\"/>\n\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"do\" beginRegion=\"loop\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"done\" endRegion=\"loop\"/>\n        <keyword attribute=\"Directive\" context=\"ModuleEnv\" String=\"module_environment\"/>\n        <keyword attribute=\"Region Marker\" context=\"Block\" String=\"begin\" beginRegion=\"block\"/>\n        <keyword attribute=\"Region Marker\" context=\"Object\" String=\"object\" beginRegion=\"object\"/>\n        <keyword attribute=\"Region Marker\" context=\"Sig\" String=\"sig\" beginRegion=\"sig\"/>\n        <keyword attribute=\"Region Marker\" context=\"Struct\" String=\"struct\" beginRegion=\"struct\"/>\n\n        <RegExpr attribute=\"Constructor\" context=\"#stay\" String=\"`\\s*&IDENT;\"/>\n        <RegExpr attribute=\"Module\" lookAhead=\"true\" context=\"ModuleEnv2\" String=\"&MIDENT;\\s*\\.\"/>\n        <RegExpr attribute=\"Constructor\" context=\"#stay\" String=\"&MIDENT;\"/>\n\n        <!-- Interpreter directives. -->\n        <!-- (These are lines where the first symbol is a '#' followed by an identifier. -->\n        <!-- Such lines could also be part of a method call split over two lines but     -->\n        <!-- it's unlikey anyone would code like that.)                                  -->\n        <RegExpr attribute=\"Directive\" context=\"#stay\" String=\"#&IDENT;.*$\" firstNonSpace=\"true\"/>\n\n        <!-- String, character and Camlp4 \"quotation\" constants.              -->\n        <!-- Note: If you must modify the pattern for characters be precise:  -->\n        <!-- single quotes have several meanings in Ocaml.                    -->\n        <DetectChar attribute=\"String\" context=\"String Constant\" char=\"&quot;\" />\n        <RegExpr attribute=\"Character\" context=\"#stay\" String=\"'(&ESC;|[^'])'\" />\n        <Detect2Chars attribute=\"Camlp4 Quotation\" context=\"Camlp4 Quotation Constant\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"Camlp4 Quotation\" context=\"Camlp4 Quotation Constant\" String=\"&lt;:&IDENT;&lt;\" />\n\n        <!-- Identifiers and keywords. -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Core Data Type\" context=\"#stay\" String=\"core types\" />\n        <RegExpr attribute=\"Identifier\" context=\"#stay\" String=\"&IDENT;\" />\n\n        <!-- Numeric constants. -->\n        <!-- Note that they may contain underscores. -->\n        <RegExpr attribute=\"Hexadecimal\" context=\"#stay\" String=\"-?0[xX][0-9A-Fa-f_]+\" />\n        <RegExpr attribute=\"Octal\" context=\"#stay\" String=\"-?0[oO][0-7_]+\" />\n        <RegExpr attribute=\"Binary\" context=\"#stay\" String=\"-?0[bB][01_]+\" />\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"-?&DEC;((\\.(&DEC;)?([eE][-+]?&DEC;)?)|([eE][-+]?&DEC;))\" />\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"-?&DEC;\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Singleline Comment\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multiline Comment\">\n        <!-- Support for nested comments -->\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\")\" endRegion=\"comment\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Multiline Comment\" char=\"(\" char1=\"*\" beginRegion=\"comment\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String Constant\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n        <RegExpr attribute=\"Escaped characters\" context=\"#stay\" String=\"&ESC;\" />\n        <!-- An underscore at the end of a line in a string indicates  -->\n        <!-- that the string will continue on the next line.           -->\n        <RegExpr attribute=\"Escaped characters\" context=\"#stay\" String=\"\\\\$\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Block\">\n        <keyword attribute=\"Region Marker\" context=\"#pop\" String=\"end\" endRegion=\"block\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Sig\">\n        <keyword attribute=\"Region Marker\" context=\"#pop\" String=\"end\" endRegion=\"sig\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Struct\">\n        <keyword attribute=\"Region Marker\" context=\"#pop\" String=\"end\" endRegion=\"struct\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Object\">\n        <keyword attribute=\"Region Marker\" context=\"#pop\" String=\"end\" endRegion=\"object\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ModuleEnv\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr attribute=\"Module\" lookAhead=\"true\" context=\"ModuleEnv2\" String=\"&MIDENT;\\s*\\.\"/>\n        <RegExpr attribute=\"Module\" context=\"#pop\" String=\"&MIDENT;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ModuleEnv2\">\n        <RegExpr attribute=\"Module\" context=\"#stay\" String=\"&MIDENT;\"/>\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n        <StringDetect attribute=\"Keyword\" context=\"#pop\" String=\".\"/>\n      </context>\n\n      <!-- Camlp4 Quotations. These are source code literals used by the Campl4 preprocessor.           -->\n      <!-- The only escapes allowed in a Camlp4 quotation are for the quotation start and stop symbols. -->\n      <context attribute=\"Camlp4 Quotation\" lineEndContext=\"#stay\" name=\"Camlp4 Quotation Constant\">\n        <Detect2Chars attribute=\"Camlp4 Quotation\" context=\"#pop\" char=\"&gt;\" char1=\"&gt;\" />\n        <Detect2Chars attribute=\"Camlp4 Quotation\" context=\"Camlp4 Quotation Constant\" char=\"&lt;\" char1=\"&lt;\" />\n        <RegExpr attribute=\"Camlp4 Quotation\" context=\"Camlp4 Quotation Constant\" String=\"&lt;:&IDENT;&lt;\" />\n        <RegExpr attribute=\"Escaped characters\" context=\"#stay\" String=\"\\\\(\\\\|&gt;&gt;|&lt;&lt;)\" />\n        <RegExpr attribute=\"Escaped characters\" context=\"#stay\" String=\"\\\\&lt;:&IDENT;&lt;\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Identifier\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Core Data Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Hexadecimal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Binary\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Character\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"Escaped characters\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Camlp4 Quotation\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"Directive\"  defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Constructor\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Module\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsKeyword\"/>\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"singleLine\" start=\"///\" />\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/fstab.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"fstab\" version=\"2\" kateversion=\"5.0\" section=\"Configuration\" extensions=\"fstab;mtab\" author=\"Diego Iastrubni (elcuco@kde.org)\" license=\"Public Domain\" >\n\t<highlighting>\n\t\t<list name=\"valid_fs\">\n\t\t\t<item>ext2</item>\n\t\t\t<item>ext3</item>\n\t\t\t<item>fat</item>\n\t\t\t<item>vfat</item>\n\t\t\t<item>reiser</item>\n\t\t\t<item>proc</item>\n\t\t\t<item>none</item>\n\t\t\t<item>sysfs</item>\n\t\t\t<item>ntfs</item>\n\t\t\t<item>umsdos</item>\n\t\t\t<item>swap</item>\n\t\t\t<item>minix</item>\n\t\t\t<item>iso9660</item>\n\t\t</list>\n\t\t\n\t\t<contexts>\n\t\t\t<!-- <file system> <mount point> <type> <options> <dump>  <pass>  -->\n\t\t\t<context name=\"device\"      attribute=\"Device\"      lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" firstNonSpace=\"1\" />\n\t\t\t\t<RegExpr context=\"mount_point\" String=\"[\\s]*\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"mount_point\" attribute=\"Mount Point\" lineEndContext=\"device\" >\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" firstNonSpace=\"1\" />\n\t\t\t\t<RegExpr context=\"_type\" String=\"[\\s]*\" />\n\t\t\t</context>\n\t\t\t\t\t\t\n\t\t\t<context name=\"_type\" attribute=\"Normal\" lineEndContext=\"device\" >\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" firstNonSpace=\"1\" />\n\t\t\t\t<RegExpr context=\"type\" String=\"[\\S]*\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"type\" attribute=\"Type\" lineEndContext=\"device\" >\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" firstNonSpace=\"1\" />\n\t\t\t\t<keyword    context=\"#stay\"  attribute=\"Valid FileSystem\" String=\"valid_fs\" />\n\t\t\t\t<RegExpr context=\"options\" String=\"[\\s]*\"/>\n\t\t\t</context>\n\t\t\t\t\n\t\t\t<context name=\"options\" attribute=\"Options\" lineEndContext=\"device\" >\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" firstNonSpace=\"1\" />\n\t\t\t\t<RegExpr context=\"dump\" String=\"[\\s]*\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"dump\" attribute=\"Dump\" lineEndContext=\"device\" >\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" firstNonSpace=\"1\" />\n\t\t\t\t<RegExpr context=\"pass\" String=\"[\\s]*\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"pass\" attribute=\"Pass\" lineEndContext=\"device\" >\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" firstNonSpace=\"1\" />\n\t\t\t\t<RegExpr context=\"__error\" String=\"[\\s]*\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"__error\" attribute=\"Pass\" lineEndContext=\"device\" >\n\t\t\t\t<DetectChar context=\"comment\"  char=\"#\" />\n\t\t\t\t<RegExpr context=\"error\" String=\"[\\S]*\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- error -->\n\t\t\t<context name=\"error\" attribute=\"Error\" lineEndContext=\"device\" >\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- comment -->\n\t\t\t<context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\" >\n\t\t\t</context>\n\t\t</contexts>\n\t\t\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Device\"     defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Mount Point\" defStyleNum=\"dsDataType\"  />\n\t\t\t<itemData name=\"Type\"       defStyleNum=\"dsFunction\"  />\n\t\t\t<itemData name=\"Options\"    defStyleNum=\"dsAttribute\"  />\n\t\t\t<itemData name=\"Dump\"       defStyleNum=\"dsDecVal\"  />\n\t\t\t<itemData name=\"Pass\"       defStyleNum=\"dsDecVal\"  />\n\t\t\t\n\t\t\t<itemData name=\"Valid FileSystem\" defStyleNum=\"dsDataType\" italic=\"1\"/>\n\t\t\t\n\t\t\t<itemData name=\"Normal\"     defStyleNum=\"dsNormal\" />\n\t\t\t<itemData name=\"Comment\"    defStyleNum=\"dsComment\" />\n\t\t\t<itemData name=\"Error\"      defStyleNum=\"dsError\" />\n\t\t</itemDatas>\n\t</highlighting>\n\t\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\" />\n\t\t</comments>\n\t</general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ftl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"FTL\" version=\"3\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.ftl\" license=\"LGPLv2+\" author=\"Radomir Svancer (svancer@gmail.com), Robert Kratky (kratky@rob.cz>), Matthias Mailänder (matthias.mailaender@vogella.com)\">\n  <highlighting>\n    <contexts>\n        <context name=\"comment start\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <StringDetect attribute=\"Comment\" context=\"comment end\" String=\"&lt;!--\"/>\n            <StringDetect attribute=\"FTLComment\" context=\"comment ending\" String=\"&lt;#--\"/>\n            <RegExpr attribute=\"FTLKeyword\" context=\"syntax start\" String=\"&lt;\\s*\\/?\\s*[#@][a-zA-Z0-9_]*\" />\n            <StringDetect attribute=\"FTLMark\" context=\"variable end\" String=\"${\" />\n            <RegExpr attribute=\"Keyword\" context=\"logic end\" String=\"&lt;\\s*\\/?\\s*[a-zA-Z0-9_]*\" />\n        </context>\n\n        <context name=\"logic end\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"&gt;\"/>\n            <RegExpr attribute=\"NormalText\" context=\"logic\" String=\"\\s*=\\s*\"/>\n            <StringDetect attribute=\"FTLComment\" context=\"comment ending\" String=\"&lt;#--\"/>\n            <RegExpr attribute=\"FTLKeyword\" context=\"syntax start\" String=\"&lt;\\s*\\/?\\s*[#@][a-zA-Z0-9_]*\" />\n            <StringDetect attribute=\"FTLMark\" context=\"variable end\" String=\"${\" />\n        </context>\n\n        <context name=\"logic\" attribute=\"Types\" lineEndContext=\"#stay\">\n            <RegExpr attribute=\"Types\" context=\"#pop\" String=\"\\s*#?[a-zA-Z0-9]*\" />\n            <DetectChar attribute=\"Types\" context=\"logic start\" char=\"&quot;\" />\n        </context>\n\n        <context name=\"logic start\" attribute=\"Types\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"&quot;\" />\n            <StringDetect attribute=\"FTLComment\" context=\"comment ending\" String=\"&lt;#--\"/>\n            <RegExpr attribute=\"FTLKeyword\" context=\"syntax start\" String=\"&lt;\\s*\\/?\\s*[#@][a-zA-Z0-9_]*\" />\n            <StringDetect attribute=\"FTLMark\" context=\"variable end\" String=\"${\" />\n        </context>\n\n        <context name=\"comment end\" attribute=\"Comment\" lineEndContext=\"#stay\">\n            <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\"/>\n            <StringDetect attribute=\"FTLComment\" context=\"comment ending\" String=\"&lt;#--\"/>\n            <RegExpr attribute=\"FTLKeyword\" context=\"syntax start\" String=\"&lt;\\s*\\/?\\s*[#@][a-zA-Z0-9_]*\" />\n            <StringDetect attribute=\"FTLMark\" context=\"variable end\" String=\"${\" />\n        </context>\n\n        <context name=\"comment ending\" attribute=\"FTLComment\" lineEndContext=\"#stay\">\n            <StringDetect attribute=\"FTLComment\" context=\"#pop\" String=\"--&gt;\"/>\n        </context>\n\n        <context name=\"syntax start\" attribute=\"FTLKeyword\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"FTLKeyword\" context=\"#pop\" char=\"&gt;\"/>\n            <DetectChar attribute=\"FTLQuot\" context=\"comment string\" char=\"&quot;\" />\n            <RegExpr attribute=\"FTLIdentifier\" context=\"syntax end\" String=\"\\s*\"/>\n        </context>\n\n        <context name=\"comment string\" attribute=\"FTLQuot\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"FTLQuot\" context=\"#pop#pop\" char=\"&quot;\" />\n        </context>\n\n        <context name=\"syntax end\" attribute=\"FTLIdentifier\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"FTLKeyword\" context=\"#pop#pop\" char=\"&gt;\"/>\n            <DetectChar attribute=\"FTLQuot\" context=\"comment string\" char=\"&quot;\" />\n        </context>\n\n        <context name=\"variable end\" attribute=\"FTLIdentifier\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"FTLMark\" context=\"#pop\" char=\"}\"/>\n            <DetectChar attribute=\"FTLQuot\" context=\"comment string\" char=\"&quot;\" />\n        </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"NormalText\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Identifier\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Types\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"FTLComment\" defStyleNum=\"dsDocumentation\" bold=\"0\" italic=\"1\"/>\n      <itemData name=\"FTLKeyword\" defStyleNum=\"dsKeyword\" color=\"#0000cc\" selColor=\"#00ff00\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"FTLQuot\" defStyleNum=\"dsOthers\" color=\"#ff0044\" selColor=\"#00ff00\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"FTLIdentifier\" defStyleNum=\"dsOthers\" color=\"#0022bb\" selColor=\"#00ff00\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"FTLMark\" defStyleNum=\"dsOthers\" color=\"#0000cc\" selColor=\"#00ff00\" bold=\"1\" italic=\"1\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;#--\" end=\"--&gt;\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\t====================================================================\n\tGAP syntax highlighting file for the KDE editors Kate and Kwrite\n\t====================================================================\n\n\tThe Strings, Two Char Operators, Variable, Number and Operator1\n\t(and commentary color) rules were taken from the octave syntax highlighting\n\tfile by Luis Silvestre and Federico Zenith.\n\tThanks go to them!\n\n\tAuthor: Jose Joao Morais\n\t-->\n\n\n<language name=\"GAP\" section=\"Scientific\" extensions=\"*.gd;*.gi;*.g\" mimetype=\"text/gap\" version=\"3\" kateversion=\"5.0\" author=\"Jose Joao Morais\" license=\"GPL\">\n\n\t<highlighting>\n\n\t\t<!-- Reserved keywords in GAP -->\n\n\t\t<list name=\"controlstatements\">\n\t\t\t<item>break</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>do</item>\n\t\t\t<item>elif</item>\n\t\t\t<item>else</item>\n\t\t\t<!-- <item>fi</item> -->\n\t\t\t<!-- <item>for</item> -->\n\t\t\t<!-- <item>if</item> -->\n\t\t\t<!-- <item>od</item> -->\n\t\t\t<!-- <item>repeat</item> -->\n\t\t\t<item>then</item>\n\t\t\t<!-- <item>until</item> -->\n\t\t\t<!-- <item>while</item> -->\n\t\t</list>\n\n\t\t<list name=\"logicoperators\">\n\t\t\t<item>and</item>\n\t\t\t<item>fail</item>\n\t\t\t<item>false</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t\t<item>true</item>\n\t\t</list>\n\n\t\t<list name=\"gapkeywords\">\n\t\t\t<!-- <item>function</item> -->\n\t\t\t<!-- <item>end</item> -->\n\t\t\t<item>in</item>\n\t\t\t<item>local</item>\n\t\t\t<item>rec</item>\n\t\t\t<item>return</item>\n\t\t</list>\n\n\t\t<list name=\"mathoperators\">\n\t\t\t<item>mod</item>\n\t\t</list>\n\n\t\t<list name=\"builtinfunctions\">\n\t\t\t<item>AClosVecLib</item>\n\t\t\t<item>AClosestVectorCombinationsMatFFEVecFFE</item>\n\t\t\t<item>AClosestVectorCombinationsMatFFEVecFFECoords</item>\n\t\t\t<item>AClosestVectorDriver</item>\n\t\t\t<item>ANFAutomorphism</item>\n\t\t\t<item>ANonReesCongruenceOfSemigroup</item>\n\t\t\t<item>APolyProd</item>\n\t\t\t<item>AbelianGroup</item>\n\t\t\t<item>AbelianGroupCons</item>\n\t\t\t<item>AbelianInvariants</item>\n\t\t\t<item>AbelianInvariantsMultiplier</item>\n\t\t\t<item>AbelianInvariantsNormalClosureFpGroup</item>\n\t\t\t<item>AbelianInvariantsNormalClosureFpGroupRrs</item>\n\t\t\t<item>AbelianInvariantsOfList</item>\n\t\t\t<item>AbelianInvariantsSubgroupFpGroup</item>\n\t\t\t<item>AbelianInvariantsSubgroupFpGroupMtc</item>\n\t\t\t<item>AbelianInvariantsSubgroupFpGroupRrs</item>\n\t\t\t<item>AbelianNumberField</item>\n\t\t\t<item>AbelianNumberFieldByReducedGaloisStabilizerInfo</item>\n\t\t\t<item>AbelianPQuotient</item>\n\t\t\t<item>AbelianSubfactorAction</item>\n\t\t\t<item>AbsAndIrredModules</item>\n\t\t\t<item>AbsInt</item>\n\t\t\t<item>AbsolutIrreducibleModules</item>\n\t\t\t<item>AbsoluteIrreducibleModules</item>\n\t\t\t<item>AbsoluteValue</item>\n\t\t\t<item>AbstractWordTietzeWord</item>\n\t\t\t<item>AbstractWordTzWord</item>\n\t\t\t<item>ActingAlgebra</item>\n\t\t\t<item>ActingDomain</item>\n\t\t\t<item>Action</item>\n\t\t\t<item>ActionAbelianCSPG</item>\n\t\t\t<item>ActionHomomorphism</item>\n\t\t\t<item>ActionHomomorphismAttr</item>\n\t\t\t<item>ActionHomomorphismConstructor</item>\n\t\t\t<item>ActionKernelExternalSet</item>\n\t\t\t<item>ActionSubspacesElementaryAbelianGroup</item>\n\t\t\t<item>ActorOfExternalSet</item>\n\t\t\t<item>Add</item>\n\t\t\t<item>AddAbelianRelator</item>\n\t\t\t<item>AddCoeffs</item>\n\t\t\t<item>AddCosetInfoStabChain</item>\n\t\t\t<item>AddDictionary</item>\n\t\t\t<item>AddEquationsSQ</item>\n\t\t\t<item>AddGenerator</item>\n\t\t\t<item>AddGenerators</item>\n\t\t\t<item>AddGeneratorsExtendSchreierTree</item>\n\t\t\t<item>AddGeneratorsGenimagesExtendSchreierTree</item>\n\t\t\t<item>AddHashEntry</item>\n\t\t\t<item>AddImage</item>\n\t\t\t<item>AddImageNC</item>\n\t\t\t<item>AddNaturalHomomorphismsPool</item>\n\t\t\t<item>AddNormalizingElementPcgs</item>\n\t\t\t<item>AddPageNumbersToSix</item>\n\t\t\t<item>AddParagraphNumbersGapDocTree</item>\n\t\t\t<item>AddRefinement</item>\n\t\t\t<item>AddRelator</item>\n\t\t\t<item>AddRootParseTree</item>\n\t\t\t<item>AddRowVector</item>\n\t\t\t<item>AddRule</item>\n\t\t\t<item>AddRuleReduced</item>\n\t\t\t<item>AddSet</item>\n\t\t\t<item>AddToListEntries</item>\n\t\t\t<item>AddVectorLTM</item>\n\t\t\t<item>AddendumSCTable</item>\n\t\t\t<item>AdditiveCoset</item>\n\t\t\t<item>AdditiveElementAsMultiplicativeElement</item>\n\t\t\t<item>AdditiveElementsAsMultiplicativeElementsFamily</item>\n\t\t\t<item>AdditiveGroup</item>\n\t\t\t<item>AdditiveGroupByGenerators</item>\n\t\t\t<item>AdditiveInverse</item>\n\t\t\t<item>AdditiveInverseAttr</item>\n\t\t\t<item>AdditiveInverseImmutable</item>\n\t\t\t<item>AdditiveInverseMutable</item>\n\t\t\t<item>AdditiveInverseOp</item>\n\t\t\t<item>AdditiveInverseSM</item>\n\t\t\t<item>AdditiveInverseSameMutability</item>\n\t\t\t<item>AdditiveMagma</item>\n\t\t\t<item>AdditiveMagmaByGenerators</item>\n\t\t\t<item>AdditiveMagmaWithInverses</item>\n\t\t\t<item>AdditiveMagmaWithInversesByGenerators</item>\n\t\t\t<item>AdditiveMagmaWithZero</item>\n\t\t\t<item>AdditiveMagmaWithZeroByGenerators</item>\n\t\t\t<item>AdditiveNeutralElement</item>\n\t\t\t<item>AdditivelyActingDomain</item>\n\t\t\t<item>AdjointAssociativeAlgebra</item>\n\t\t\t<item>AdjointBasis</item>\n\t\t\t<item>AdjointMatrix</item>\n\t\t\t<item>AdjointModule</item>\n\t\t\t<item>AffineAction</item>\n\t\t\t<item>AffineActionByMatrixGroup</item>\n\t\t\t<item>AffineActionLayer</item>\n\t\t\t<item>AffineOperation</item>\n\t\t\t<item>AffineOperationLayer</item>\n\t\t\t<item>Agemo</item>\n\t\t\t<item>AgemoAbove</item>\n\t\t\t<item>AgemoOp</item>\n\t\t\t<item>AlgExtElm</item>\n\t\t\t<item>AlgExtEmbeddedPol</item>\n\t\t\t<item>AlgExtFactSQFree</item>\n\t\t\t<item>AlgExtSquareHensel</item>\n\t\t\t<item>AlgFacUPrep</item>\n\t\t\t<item>Algebra</item>\n\t\t\t<item>AlgebraByGenerators</item>\n\t\t\t<item>AlgebraByStructureConstants</item>\n\t\t\t<item>AlgebraByStructureConstantsArg</item>\n\t\t\t<item>AlgebraGeneralMappingByImages</item>\n\t\t\t<item>AlgebraHomomorphismByImages</item>\n\t\t\t<item>AlgebraHomomorphismByImagesNC</item>\n\t\t\t<item>AlgebraWithOne</item>\n\t\t\t<item>AlgebraWithOneByGenerators</item>\n\t\t\t<item>AlgebraWithOneGeneralMappingByImages</item>\n\t\t\t<item>AlgebraWithOneHomomorphismByImages</item>\n\t\t\t<item>AlgebraWithOneHomomorphismByImagesNC</item>\n\t\t\t<item>AlgebraicElementsFamilies</item>\n\t\t\t<item>AlgebraicElementsFamily</item>\n\t\t\t<item>AlgebraicExtension</item>\n\t\t\t<item>AlgebraicPolynomialModP</item>\n\t\t\t<item>AllBlocks</item>\n\t\t\t<item>AllGroups</item>\n\t\t\t<item>AllIrreducibleMonicPolynomialCoeffsOfDegree</item>\n\t\t\t<item>AllIrreducibleMonicPolynomials</item>\n\t\t\t<item>AllIrreducibleSolvableGroups</item>\n\t\t\t<item>AllLibTomNames</item>\n\t\t\t<item>AllModulesSQ</item>\n\t\t\t<item>AllMonicPolynomialCoeffsOfDegree</item>\n\t\t\t<item>AllPrimitiveGroups</item>\n\t\t\t<item>AllSmallGroups</item>\n\t\t\t<item>AllTransitiveGroups</item>\n\t\t\t<item>AllowableSubgroup</item>\n\t\t\t<item>Alpha</item>\n\t\t\t<item>AlternatingDegree</item>\n\t\t\t<item>AlternatingGroup</item>\n\t\t\t<item>AlternatingGroupCons</item>\n\t\t\t<item>AlternatingSubgroup</item>\n\t\t\t<item>AntiSymmetricParts</item>\n\t\t\t<item>Append</item>\n\t\t\t<item>AppendCollectedList</item>\n\t\t\t<item>AppendTo</item>\n\t\t\t<item>ApplicableMethod</item>\n\t\t\t<item>ApplicableMethodTypes</item>\n\t\t\t<item>Apply</item>\n\t\t\t<item>ApplyGeneratorsToPoint</item>\n\t\t\t<item>ApplyGeneratorsToPointsList</item>\n\t\t\t<item>ApplyRel</item>\n\t\t\t<item>ApplySimpleReflection</item>\n\t\t\t<item>ApplyToNodesParseTree</item>\n\t\t\t<item>ApproxRational</item>\n\t\t\t<item>ApproxRootBound</item>\n\t\t\t<item>ApproximateRoot</item>\n\t\t\t<item>ApproximateSuborbitsStabilizerPermGroup</item>\n\t\t\t<item>ArithmeticElementCreator</item>\n\t\t\t<item>Arrangements</item>\n\t\t\t<item>ArrangementsA</item>\n\t\t\t<item>ArrangementsK</item>\n\t\t\t<item>AsAlgebra</item>\n\t\t\t<item>AsAlgebraWithOne</item>\n\t\t\t<item>AsBinaryRelationOnPoints</item>\n\t\t\t<item>AsBlockMatrix</item>\n\t\t\t<item>AsCharacterMorphismFunction</item>\n\t\t\t<item>AsDivisionRing</item>\n\t\t\t<item>AsDuplicateFreeList</item>\n\t\t\t<item>AsFLMLOR</item>\n\t\t\t<item>AsFLMLORWithOne</item>\n\t\t\t<item>AsField</item>\n\t\t\t<item>AsFreeLeftModule</item>\n\t\t\t<item>AsGroup</item>\n\t\t\t<item>AsGroupGeneralMappingByImages</item>\n\t\t\t<item>AsInducedPcgs</item>\n\t\t\t<item>AsLeftIdeal</item>\n\t\t\t<item>AsLeftMagmaIdeal</item>\n\t\t\t<item>AsLeftModule</item>\n\t\t\t<item>AsLeftModuleGeneralMappingByImages</item>\n\t\t\t<item>AsLieAlgebra</item>\n\t\t\t<item>AsList</item>\n\t\t\t<item>AsListOfFreeLeftModule</item>\n\t\t\t<item>AsListSorted</item>\n\t\t\t<item>AsMagma</item>\n\t\t\t<item>AsMagmaIdeal</item>\n\t\t\t<item>AsMonoid</item>\n\t\t\t<item>AsNearRing</item>\n\t\t\t<item>AsPerm</item>\n\t\t\t<item>AsPlist</item>\n\t\t\t<item>AsPolynomial</item>\n\t\t\t<item>AsRightIdeal</item>\n\t\t\t<item>AsRightMagmaIdeal</item>\n\t\t\t<item>AsRing</item>\n\t\t\t<item>AsSSortedList</item>\n\t\t\t<item>AsSSortedListList</item>\n\t\t\t<item>AsSSortedListNonstored</item>\n\t\t\t<item>AsSemigroup</item>\n\t\t\t<item>AsSemiring</item>\n\t\t\t<item>AsSemiringWithOne</item>\n\t\t\t<item>AsSemiringWithOneAndZero</item>\n\t\t\t<item>AsSemiringWithZero</item>\n\t\t\t<item>AsSet</item>\n\t\t\t<item>AsSortedList</item>\n\t\t\t<item>AsSubFLMLOR</item>\n\t\t\t<item>AsSubFLMLORWithOne</item>\n\t\t\t<item>AsSubalgebra</item>\n\t\t\t<item>AsSubalgebraWithOne</item>\n\t\t\t<item>AsSubgroup</item>\n\t\t\t<item>AsSubgroupOfWholeGroupByQuotient</item>\n\t\t\t<item>AsSubmagma</item>\n\t\t\t<item>AsSubmonoid</item>\n\t\t\t<item>AsSubsemigroup</item>\n\t\t\t<item>AsSubspace</item>\n\t\t\t<item>AsTransformation</item>\n\t\t\t<item>AsTransformationNC</item>\n\t\t\t<item>AsTwoSidedIdeal</item>\n\t\t\t<item>AsVectorSpace</item>\n\t\t\t<item>AscendingChain</item>\n\t\t\t<item>AscendingChainOp</item>\n\t\t\t<item>Assert</item>\n\t\t\t<item>AssertionLevel</item>\n\t\t\t<item>AssignGeneratorVariables</item>\n\t\t\t<item>AssignNiceMonomorphismAutomorphismGroup</item>\n\t\t\t<item>AssocBWorLetRepPow</item>\n\t\t\t<item>AssocWWorLetRepPow</item>\n\t\t\t<item>AssocWord</item>\n\t\t\t<item>AssocWordByLetterRep</item>\n\t\t\t<item>AssociatedPartition</item>\n\t\t\t<item>AssociatedReesMatrixSemigroupOfDClass</item>\n\t\t\t<item>AssociatedSemigroup</item>\n\t\t\t<item>Associates</item>\n\t\t\t<item>AtlasIrrationality</item>\n\t\t\t<item>AttributeMethodByNiceMonomorphism</item>\n\t\t\t<item>AttributeMethodByNiceMonomorphismCollColl</item>\n\t\t\t<item>AttributeMethodByNiceMonomorphismCollElm</item>\n\t\t\t<item>AttributeMethodByNiceMonomorphismElmColl</item>\n\t\t\t<item>AttributeValueNotSet</item>\n\t\t\t<item>AugmentationIdeal</item>\n\t\t\t<item>AugmentedCosetTableInWholeGroup</item>\n\t\t\t<item>AugmentedCosetTableMtc</item>\n\t\t\t<item>AugmentedCosetTableMtcInWholeGroup</item>\n\t\t\t<item>AugmentedCosetTableNormalClosure</item>\n\t\t\t<item>AugmentedCosetTableNormalClosureInWholeGroup</item>\n\t\t\t<item>AugmentedCosetTableRrs</item>\n\t\t\t<item>AugmentedCosetTableRrsInWholeGroup</item>\n\t\t\t<item>AutoloadPackages</item>\n\t\t\t<item>AutomorphismDomain</item>\n\t\t\t<item>AutomorphismGroup</item>\n\t\t\t<item>AutomorphismGroupAbelianGroup</item>\n\t\t\t<item>AutomorphismGroupElAbGroup</item>\n\t\t\t<item>AutomorphismGroupFrattFreeGroup</item>\n\t\t\t<item>AutomorphismGroupPermGroup</item>\n\t\t\t<item>AutomorphismGroupSolvableGroup</item>\n\t\t\t<item>AutomorphismRepresentingGroup</item>\n\t\t\t<item>AutomorphismsOfTable</item>\n\t\t\t<item>AvoidedLayers</item>\n\t\t\t<item>BPolyProd</item>\n\t\t\t<item>BagStats</item>\n\t\t\t<item>BarPartitions</item>\n\t\t\t<item>BaseFixedSpace</item>\n\t\t\t<item>BaseImage</item>\n\t\t\t<item>BaseIntMat</item>\n\t\t\t<item>BaseIntersectionIntMats</item>\n\t\t\t<item>BaseMat</item>\n\t\t\t<item>BaseMatDestructive</item>\n\t\t\t<item>BaseOfBasicImageGroup</item>\n\t\t\t<item>BaseOfElt</item>\n\t\t\t<item>BaseOfGroup</item>\n\t\t\t<item>BaseOrthogonalSpaceMat</item>\n\t\t\t<item>BasePoint</item>\n\t\t\t<item>BasePointOfSchreierTransversal</item>\n\t\t\t<item>BaseShortVectors</item>\n\t\t\t<item>BaseStabChain</item>\n\t\t\t<item>BaseSteinitzVectors</item>\n\t\t\t<item>BasicImageEltRepFamily</item>\n\t\t\t<item>BasicImageGroup</item>\n\t\t\t<item>BasicImageGroupElement</item>\n\t\t\t<item>BasicWreathProductOrdering</item>\n\t\t\t<item>BasicWreathProductOrderingNC</item>\n\t\t\t<item>Basis</item>\n\t\t\t<item>BasisForFreeModuleByNiceBasis</item>\n\t\t\t<item>BasisNC</item>\n\t\t\t<item>BasisNullspaceModN</item>\n\t\t\t<item>BasisOfAlgebraModule</item>\n\t\t\t<item>BasisOfHomCosetAddMatrixGroup</item>\n\t\t\t<item>BasisOfHomCosetAddMatrixGroupFnc</item>\n\t\t\t<item>BasisOfMonomialSpace</item>\n\t\t\t<item>BasisOfSparseRowSpace</item>\n\t\t\t<item>BasisOfWeightRepSpace</item>\n\t\t\t<item>BasisVectors</item>\n\t\t\t<item>BasisVectorsForMatrixAction</item>\n\t\t\t<item>BasisWithReplacedLeftModule</item>\n\t\t\t<item>BaumClausenInfo</item>\n\t\t\t<item>BaumClausenInfoDebug</item>\n\t\t\t<item>BeauzamyBound</item>\n\t\t\t<item>BeauzamyBoundGcd</item>\n\t\t\t<item>Bell</item>\n\t\t\t<item>Bernoulli</item>\n\t\t\t<item>BestQuoInt</item>\n\t\t\t<item>BestSplittingMatrix</item>\n\t\t\t<item>BetaSet</item>\n\t\t\t<item>BiAlgebraModule</item>\n\t\t\t<item>BiAlgebraModuleByGenerators</item>\n\t\t\t<item>BilinearFormMat</item>\n\t\t\t<item>BinaryRelationByElements</item>\n\t\t\t<item>BinaryRelationByListOfImages</item>\n\t\t\t<item>BinaryRelationByListOfImagesNC</item>\n\t\t\t<item>BinaryRelationOnPoints</item>\n\t\t\t<item>BinaryRelationOnPointsNC</item>\n\t\t\t<item>BinaryRelationTransformation</item>\n\t\t\t<item>BindGlobal</item>\n\t\t\t<item>Binomial</item>\n\t\t\t<item>BlistList</item>\n\t\t\t<item>BlistStringDecode</item>\n\t\t\t<item>BlockMatrix</item>\n\t\t\t<item>BlockStabilizer</item>\n\t\t\t<item>Blocks</item>\n\t\t\t<item>BlocksAttr</item>\n\t\t\t<item>BlocksInfo</item>\n\t\t\t<item>BlocksOp</item>\n\t\t\t<item>BlowUpCocycleSQ</item>\n\t\t\t<item>BlowUpIsomorphism</item>\n\t\t\t<item>BlownUpMat</item>\n\t\t\t<item>BlownUpMatrix</item>\n\t\t\t<item>BlownUpModule</item>\n\t\t\t<item>BlownUpVector</item>\n\t\t\t<item>BombieriNorm</item>\n\t\t\t<item>BooleanFamily</item>\n\t\t\t<item>BrauerCharacterValue</item>\n\t\t\t<item>BrauerTable</item>\n\t\t\t<item>BrauerTableOp</item>\n\t\t\t<item>BravaisGroup</item>\n\t\t\t<item>BravaisSubgroups</item>\n\t\t\t<item>BravaisSupergroups</item>\n\t\t\t<item>BuildIsomorphismReesMatrixSemigroupWithMap</item>\n\t\t\t<item>CIUnivPols</item>\n\t\t\t<item>COAffineBlocks</item>\n\t\t\t<item>COComplements</item>\n\t\t\t<item>COComplementsMain</item>\n\t\t\t<item>CONextCentral</item>\n\t\t\t<item>CONextCentralizer</item>\n\t\t\t<item>CONextCocycles</item>\n\t\t\t<item>CONextComplements</item>\n\t\t\t<item>CalcDoubleCosets</item>\n\t\t\t<item>CalcOrder</item>\n\t\t\t<item>CallFuncList</item>\n\t\t\t<item>CallFuncTrapError</item>\n\t\t\t<item>CanComputeIndex</item>\n\t\t\t<item>CanComputeIsSubset</item>\n\t\t\t<item>CanComputeSize</item>\n\t\t\t<item>CanComputeSizeAnySubgroup</item>\n\t\t\t<item>CanEasilyCompareElements</item>\n\t\t\t<item>CanEasilyCompareElementsFamily</item>\n\t\t\t<item>CanEasilyComputePcgs</item>\n\t\t\t<item>CanEasilySortElements</item>\n\t\t\t<item>CanEasilySortElementsFamily</item>\n\t\t\t<item>CanEasilyTestMembership</item>\n\t\t\t<item>CanFindGeneratorOfCyclicGroup</item>\n\t\t\t<item>CanFindNilpotentClassTwoElement</item>\n\t\t\t<item>CanonicalBasis</item>\n\t\t\t<item>CanonicalElt</item>\n\t\t\t<item>CanonicalGenerators</item>\n\t\t\t<item>CanonicalNiceMonomorphism</item>\n\t\t\t<item>CanonicalPcElement</item>\n\t\t\t<item>CanonicalPcgs</item>\n\t\t\t<item>CanonicalPcgsByGeneratorsWithImages</item>\n\t\t\t<item>CanonicalPcgsWrtFamilyPcgs</item>\n\t\t\t<item>CanonicalPcgsWrtHomePcgs</item>\n\t\t\t<item>CanonicalPcgsWrtSpecialPcgs</item>\n\t\t\t<item>CanonicalRelator</item>\n\t\t\t<item>CanonicalRepresentativeDeterminatorOfExternalSet</item>\n\t\t\t<item>CanonicalRepresentativeOfExternalSet</item>\n\t\t\t<item>CanonicalRightCosetElement</item>\n\t\t\t<item>CanonicalSubgroupRepresentativePcGroup</item>\n\t\t\t<item>CartanMatrix</item>\n\t\t\t<item>CartanSubalgebra</item>\n\t\t\t<item>Cartesian</item>\n\t\t\t<item>CasesCSPG</item>\n\t\t\t<item>CategoriesOfObject</item>\n\t\t\t<item>CategoryCollections</item>\n\t\t\t<item>CategoryFamily</item>\n\t\t\t<item>CayleyGraphDualSemigroup</item>\n\t\t\t<item>CayleyGraphSemigroup</item>\n\t\t\t<item>Cell</item>\n\t\t\t<item>CellNoPoint</item>\n\t\t\t<item>CellNoPoints</item>\n\t\t\t<item>Cells</item>\n\t\t\t<item>Center</item>\n\t\t\t<item>CenterOfCharacter</item>\n\t\t\t<item>CentralCharacter</item>\n\t\t\t<item>CentralIdempotentsOfAlgebra</item>\n\t\t\t<item>CentralIdempotentsOfSemiring</item>\n\t\t\t<item>CentralNormalSeriesByPcgs</item>\n\t\t\t<item>CentralProductOfMatrixGroups</item>\n\t\t\t<item>CentralRelations</item>\n\t\t\t<item>CentralStelClEANSNonsolv</item>\n\t\t\t<item>CentralStepClEANS</item>\n\t\t\t<item>CentralStepConjugatingElement</item>\n\t\t\t<item>CentralStepRatClPGroup</item>\n\t\t\t<item>Centralizer</item>\n\t\t\t<item>CentralizerInAssociativeGaussianMatrixAlgebra</item>\n\t\t\t<item>CentralizerInFiniteDimensionalAlgebra</item>\n\t\t\t<item>CentralizerInGLnZ</item>\n\t\t\t<item>CentralizerInParent</item>\n\t\t\t<item>CentralizerModulo</item>\n\t\t\t<item>CentralizerNormalCSPG</item>\n\t\t\t<item>CentralizerNormalTransCSPG</item>\n\t\t\t<item>CentralizerOp</item>\n\t\t\t<item>CentralizerOrder</item>\n\t\t\t<item>CentralizerSizeLimitConsiderFunction</item>\n\t\t\t<item>CentralizerSolvableGroup</item>\n\t\t\t<item>CentralizerTransSymmCSPG</item>\n\t\t\t<item>CentralizerWreath</item>\n\t\t\t<item>Centre</item>\n\t\t\t<item>CentreFromSCTable</item>\n\t\t\t<item>CentreOfCharacter</item>\n\t\t\t<item>CentrePcGroup</item>\n\t\t\t<item>ChaNuPol</item>\n\t\t\t<item>ChainHomomorphicImage</item>\n\t\t\t<item>ChainStatistics</item>\n\t\t\t<item>ChainSubgroup</item>\n\t\t\t<item>ChainSubgroupByDirectProduct</item>\n\t\t\t<item>ChainSubgroupByHomomorphism</item>\n\t\t\t<item>ChainSubgroupByPSubgroupOfAbelian</item>\n\t\t\t<item>ChainSubgroupByProjectionFunction</item>\n\t\t\t<item>ChainSubgroupBySiftFunction</item>\n\t\t\t<item>ChainSubgroupByStabiliser</item>\n\t\t\t<item>ChainSubgroupByStabilizer</item>\n\t\t\t<item>ChainSubgroupByTrivialSubgroup</item>\n\t\t\t<item>ChainSubgroupQuotient</item>\n\t\t\t<item>ChangeStabChain</item>\n\t\t\t<item>ChangeTypeObj</item>\n\t\t\t<item>ChangedBaseGroup</item>\n\t\t\t<item>CharTableAlternating</item>\n\t\t\t<item>CharTableDoubleCoverAlternating</item>\n\t\t\t<item>CharTableDoubleCoverSymmetric</item>\n\t\t\t<item>CharTableSymmetric</item>\n\t\t\t<item>CharTableWeylB</item>\n\t\t\t<item>CharTableWeylD</item>\n\t\t\t<item>CharValueDoubleCoverSymmetric</item>\n\t\t\t<item>CharValueSymmetric</item>\n\t\t\t<item>CharValueWeylB</item>\n\t\t\t<item>CharValueWreathSymmetric</item>\n\t\t\t<item>Character</item>\n\t\t\t<item>CharacterDegreePool</item>\n\t\t\t<item>CharacterDegrees</item>\n\t\t\t<item>CharacterMorphismGroup</item>\n\t\t\t<item>CharacterMorphismOrbits</item>\n\t\t\t<item>CharacterNames</item>\n\t\t\t<item>CharacterParameters</item>\n\t\t\t<item>CharacterString</item>\n\t\t\t<item>CharacterTable</item>\n\t\t\t<item>CharacterTableDirectProduct</item>\n\t\t\t<item>CharacterTableDisplayPrintLegendDefault</item>\n\t\t\t<item>CharacterTableDisplayStringEntryDataDefault</item>\n\t\t\t<item>CharacterTableDisplayStringEntryDefault</item>\n\t\t\t<item>CharacterTableFactorGroup</item>\n\t\t\t<item>CharacterTableFromLibrary</item>\n\t\t\t<item>CharacterTableHeadOfFactorGroupByFusion</item>\n\t\t\t<item>CharacterTableIsoclinic</item>\n\t\t\t<item>CharacterTableOfNormalSubgroup</item>\n\t\t\t<item>CharacterTableQuaternionic</item>\n\t\t\t<item>CharacterTableRegular</item>\n\t\t\t<item>CharacterTableWithSortedCharacters</item>\n\t\t\t<item>CharacterTableWithSortedClasses</item>\n\t\t\t<item>CharacterTableWreathSymmetric</item>\n\t\t\t<item>Characteristic</item>\n\t\t\t<item>CharacteristicPolynomial</item>\n\t\t\t<item>CharacteristicPolynomialMatrixNC</item>\n\t\t\t<item>CharsFamily</item>\n\t\t\t<item>CheckAndCleanGapDocTree</item>\n\t\t\t<item>CheckAuto</item>\n\t\t\t<item>CheckCompletionFiles</item>\n\t\t\t<item>CheckConsistencyOfDefinitions</item>\n\t\t\t<item>CheckCosetTableFpGroup</item>\n\t\t\t<item>CheckFixedPoints</item>\n\t\t\t<item>CheckForHandlingByNiceBasis</item>\n\t\t\t<item>CheckGlobalName</item>\n\t\t\t<item>CheckPackageLoading</item>\n\t\t\t<item>CheckPermChar</item>\n\t\t\t<item>CheckSchreierTreeInternalConsistency</item>\n\t\t\t<item>ChevalleyBasis</item>\n\t\t\t<item>ChiefNormalSeriesByPcgs</item>\n\t\t\t<item>ChiefSeries</item>\n\t\t\t<item>ChiefSeriesOfGroup</item>\n\t\t\t<item>ChiefSeriesThrough</item>\n\t\t\t<item>ChiefSeriesUnderAction</item>\n\t\t\t<item>ChineseRem</item>\n\t\t\t<item>Chomp</item>\n\t\t\t<item>ChooseNextBasePoint</item>\n\t\t\t<item>ClassComparison</item>\n\t\t\t<item>ClassElementLargeGroup</item>\n\t\t\t<item>ClassElementLattice</item>\n\t\t\t<item>ClassElementSmallGroup</item>\n\t\t\t<item>ClassFunction</item>\n\t\t\t<item>ClassFunctionSameType</item>\n\t\t\t<item>ClassMultiplicationCoefficient</item>\n\t\t\t<item>ClassNames</item>\n\t\t\t<item>ClassNamesTom</item>\n\t\t\t<item>ClassNumbersElements</item>\n\t\t\t<item>ClassOrbit</item>\n\t\t\t<item>ClassParameters</item>\n\t\t\t<item>ClassPermutation</item>\n\t\t\t<item>ClassPositionsOfAgemo</item>\n\t\t\t<item>ClassPositionsOfCentre</item>\n\t\t\t<item>ClassPositionsOfDerivedSubgroup</item>\n\t\t\t<item>ClassPositionsOfDirectProductDecompositions</item>\n\t\t\t<item>ClassPositionsOfElementaryAbelianSeries</item>\n\t\t\t<item>ClassPositionsOfFittingSubgroup</item>\n\t\t\t<item>ClassPositionsOfKernel</item>\n\t\t\t<item>ClassPositionsOfLowerCentralSeries</item>\n\t\t\t<item>ClassPositionsOfMaximalNormalSubgroups</item>\n\t\t\t<item>ClassPositionsOfNormalClosure</item>\n\t\t\t<item>ClassPositionsOfNormalSubgroup</item>\n\t\t\t<item>ClassPositionsOfNormalSubgroups</item>\n\t\t\t<item>ClassPositionsOfSolvableResiduum</item>\n\t\t\t<item>ClassPositionsOfSupersolvableResiduum</item>\n\t\t\t<item>ClassPositionsOfUpperCentralSeries</item>\n\t\t\t<item>ClassRepsPermutedTuples</item>\n\t\t\t<item>ClassRoots</item>\n\t\t\t<item>ClassStructureCharTable</item>\n\t\t\t<item>ClassTypesTom</item>\n\t\t\t<item>ClassesSolvableGroup</item>\n\t\t\t<item>CleanedTailPcElement</item>\n\t\t\t<item>ClearCacheStats</item>\n\t\t\t<item>ClearCentralRelations</item>\n\t\t\t<item>ClearDefinitionNC</item>\n\t\t\t<item>ClearPQuotientStatistics</item>\n\t\t\t<item>ClearProfile</item>\n\t\t\t<item>CloseMutableBasis</item>\n\t\t\t<item>CloseNaturalHomomorphismsPool</item>\n\t\t\t<item>CloseStream</item>\n\t\t\t<item>ClosedStreamType</item>\n\t\t\t<item>ClosureAdditiveGroup</item>\n\t\t\t<item>ClosureAdditiveMagmaDefault</item>\n\t\t\t<item>ClosureAdditiveMagmaWithInverses</item>\n\t\t\t<item>ClosureAlgebra</item>\n\t\t\t<item>ClosureDivisionRing</item>\n\t\t\t<item>ClosureField</item>\n\t\t\t<item>ClosureGroup</item>\n\t\t\t<item>ClosureGroupAddElm</item>\n\t\t\t<item>ClosureGroupCompare</item>\n\t\t\t<item>ClosureGroupDefault</item>\n\t\t\t<item>ClosureGroupIntest</item>\n\t\t\t<item>ClosureLeftModule</item>\n\t\t\t<item>ClosureLeftOperatorRing</item>\n\t\t\t<item>ClosureMagmaDefault</item>\n\t\t\t<item>ClosureNearAdditiveGroup</item>\n\t\t\t<item>ClosureNearAdditiveMagmaWithInverses</item>\n\t\t\t<item>ClosureRandomPermGroup</item>\n\t\t\t<item>ClosureRing</item>\n\t\t\t<item>ClosureSemiring</item>\n\t\t\t<item>ClosureSubgroup</item>\n\t\t\t<item>ClosureSubgroupNC</item>\n\t\t\t<item>CntOp</item>\n\t\t\t<item>CoKernel</item>\n\t\t\t<item>CoKernelGensIterator</item>\n\t\t\t<item>CoKernelGensPermHom</item>\n\t\t\t<item>CoKernelOfAdditiveGeneralMapping</item>\n\t\t\t<item>CoKernelOfMultiplicativeGeneralMapping</item>\n\t\t\t<item>CoSuFp</item>\n\t\t\t<item>Coboundaries</item>\n\t\t\t<item>CocGroup</item>\n\t\t\t<item>Cochain</item>\n\t\t\t<item>CochainSpace</item>\n\t\t\t<item>CocycleSQ</item>\n\t\t\t<item>CocycleToRelVector</item>\n\t\t\t<item>Cocycles</item>\n\t\t\t<item>CodeGenerators</item>\n\t\t\t<item>CodePcGroup</item>\n\t\t\t<item>CodePcgs</item>\n\t\t\t<item>CoefficientTaylorSeries</item>\n\t\t\t<item>Coefficients</item>\n\t\t\t<item>CoefficientsAndMagmaElements</item>\n\t\t\t<item>CoefficientsFamily</item>\n\t\t\t<item>CoefficientsMultiadic</item>\n\t\t\t<item>CoefficientsOfLaurentPolynomial</item>\n\t\t\t<item>CoefficientsOfUnivariateLaurentPolynomial</item>\n\t\t\t<item>CoefficientsOfUnivariatePolynomial</item>\n\t\t\t<item>CoefficientsOfUnivariateRationalFunction</item>\n\t\t\t<item>CoefficientsOfVector</item>\n\t\t\t<item>CoefficientsQadic</item>\n\t\t\t<item>CoefficientsRing</item>\n\t\t\t<item>CoeffsCyc</item>\n\t\t\t<item>CoeffsMod</item>\n\t\t\t<item>CollFamRangeEqFamElms</item>\n\t\t\t<item>CollFamSourceEqFamElms</item>\n\t\t\t<item>CollapsedMat</item>\n\t\t\t<item>CollectPolycyclic</item>\n\t\t\t<item>CollectUEALatticeElement</item>\n\t\t\t<item>CollectWord</item>\n\t\t\t<item>CollectWordOrFail</item>\n\t\t\t<item>Collected</item>\n\t\t\t<item>CollectedPartition</item>\n\t\t\t<item>CollectedWordSQ</item>\n\t\t\t<item>CollectionsFamily</item>\n\t\t\t<item>CollectorSQ</item>\n\t\t\t<item>ColorPrompt</item>\n\t\t\t<item>ColumnIndexOfReesMatrixSemigroupElement</item>\n\t\t\t<item>ColumnIndexOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>ColumnsOfReesMatrixSemigroup</item>\n\t\t\t<item>ColumnsOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>Combinations</item>\n\t\t\t<item>CombinationsA</item>\n\t\t\t<item>CombinationsK</item>\n\t\t\t<item>CombinatorialCollector</item>\n\t\t\t<item>CombinatorialCollectorByGenerators</item>\n\t\t\t<item>CombinatoricSplit</item>\n\t\t\t<item>Comm</item>\n\t\t\t<item>CommutGenImgs</item>\n\t\t\t<item>CommutativeDiagram</item>\n\t\t\t<item>CommutatorFactorGroup</item>\n\t\t\t<item>CommutatorLength</item>\n\t\t\t<item>CommutatorSubgroup</item>\n\t\t\t<item>Compacted</item>\n\t\t\t<item>CompanionMat</item>\n\t\t\t<item>CompareVersionNumbers</item>\n\t\t\t<item>CompatibleConjugacyClasses</item>\n\t\t\t<item>CompatibleConjugacyClassesDefault</item>\n\t\t\t<item>CompatiblePairs</item>\n\t\t\t<item>CompileFunc</item>\n\t\t\t<item>ComplementIntMat</item>\n\t\t\t<item>ComplementSystem</item>\n\t\t\t<item>Complementclasses</item>\n\t\t\t<item>ComplementclassesEA</item>\n\t\t\t<item>ComplementclassesSolvableNC</item>\n\t\t\t<item>ComplementclassesSolvableWBG</item>\n\t\t\t<item>CompleteChain</item>\n\t\t\t<item>CompleteGaloisGroupPElement</item>\n\t\t\t<item>CompleteOrdersOfRws</item>\n\t\t\t<item>CompleteSchreierTransversal</item>\n\t\t\t<item>CompletionBar</item>\n\t\t\t<item>ComplexConjugate</item>\n\t\t\t<item>ComplexificationQuat</item>\n\t\t\t<item>ComponentsOfTuplesFamily</item>\n\t\t\t<item>ComposedXMLString</item>\n\t\t\t<item>CompositionMapping</item>\n\t\t\t<item>CompositionMaps</item>\n\t\t\t<item>CompositionOfStraightLinePrograms</item>\n\t\t\t<item>CompositionSeries</item>\n\t\t\t<item>Compress</item>\n\t\t\t<item>ComputeTails</item>\n\t\t\t<item>ComputedAgemos</item>\n\t\t\t<item>ComputedAscendingChains</item>\n\t\t\t<item>ComputedBrauerTables</item>\n\t\t\t<item>ComputedClassFusions</item>\n\t\t\t<item>ComputedCyclicExtensionsTom</item>\n\t\t\t<item>ComputedHallSubgroups</item>\n\t\t\t<item>ComputedIndicators</item>\n\t\t\t<item>ComputedIsPNilpotents</item>\n\t\t\t<item>ComputedIsPSolvableCharacterTables</item>\n\t\t\t<item>ComputedIsPSolvables</item>\n\t\t\t<item>ComputedOmegas</item>\n\t\t\t<item>ComputedPCentralSeriess</item>\n\t\t\t<item>ComputedPCores</item>\n\t\t\t<item>ComputedPRumps</item>\n\t\t\t<item>ComputedPowerMaps</item>\n\t\t\t<item>ComputedPrimeBlockss</item>\n\t\t\t<item>ComputedSylowComplements</item>\n\t\t\t<item>ComputedSylowSubgroups</item>\n\t\t\t<item>ConcatSubos</item>\n\t\t\t<item>Concatenation</item>\n\t\t\t<item>Conductor</item>\n\t\t\t<item>ConfluentRws</item>\n\t\t\t<item>Congruences</item>\n\t\t\t<item>ConjugacyClass</item>\n\t\t\t<item>ConjugacyClassSubgroups</item>\n\t\t\t<item>ConjugacyClasses</item>\n\t\t\t<item>ConjugacyClassesByOrbits</item>\n\t\t\t<item>ConjugacyClassesByRandomSearch</item>\n\t\t\t<item>ConjugacyClassesFittingFreeGroup</item>\n\t\t\t<item>ConjugacyClassesForSmallGroup</item>\n\t\t\t<item>ConjugacyClassesMaximalSubgroups</item>\n\t\t\t<item>ConjugacyClassesOfNaturalGroup</item>\n\t\t\t<item>ConjugacyClassesPerfectSubgroups</item>\n\t\t\t<item>ConjugacyClassesSubgroups</item>\n\t\t\t<item>ConjugacyClassesSubwreath</item>\n\t\t\t<item>ConjugacyClassesTry</item>\n\t\t\t<item>ConjugacyClassesViaRadical</item>\n\t\t\t<item>ConjugateDominantWeight</item>\n\t\t\t<item>ConjugateDominantWeightWithWord</item>\n\t\t\t<item>ConjugateGroup</item>\n\t\t\t<item>ConjugateMatrixActionToLinearAction</item>\n\t\t\t<item>ConjugateMatrixGroupToLinearAction</item>\n\t\t\t<item>ConjugateMatrixGroupToLinearGroup</item>\n\t\t\t<item>ConjugateStabChain</item>\n\t\t\t<item>ConjugateSubgroup</item>\n\t\t\t<item>ConjugateSubgroups</item>\n\t\t\t<item>ConjugatedModule</item>\n\t\t\t<item>Conjugates</item>\n\t\t\t<item>ConjugatingElement</item>\n\t\t\t<item>ConjugatorAutomorphism</item>\n\t\t\t<item>ConjugatorAutomorphismNC</item>\n\t\t\t<item>ConjugatorInnerAutomorphism</item>\n\t\t\t<item>ConjugatorIsomorphism</item>\n\t\t\t<item>ConjugatorOfConjugatorIsomorphism</item>\n\t\t\t<item>ConnectGroupAndCharacterTable</item>\n\t\t\t<item>ConsiderKernels</item>\n\t\t\t<item>ConsiderSmallerPowerMaps</item>\n\t\t\t<item>ConsiderStructureConstants</item>\n\t\t\t<item>ConsiderTableAutomorphisms</item>\n\t\t\t<item>ConstantInBaseRingPol</item>\n\t\t\t<item>ConstantTimeAccessList</item>\n\t\t\t<item>ConstituentsCompositionMapping</item>\n\t\t\t<item>ConstituentsOfCharacter</item>\n\t\t\t<item>ConstituentsPolynomial</item>\n\t\t\t<item>ContainedCharacters</item>\n\t\t\t<item>ContainedDecomposables</item>\n\t\t\t<item>ContainedMaps</item>\n\t\t\t<item>ContainedPossibleCharacters</item>\n\t\t\t<item>ContainedPossibleVirtualCharacters</item>\n\t\t\t<item>ContainedSpecialVectors</item>\n\t\t\t<item>ContainedTom</item>\n\t\t\t<item>ContainingTom</item>\n\t\t\t<item>ContinuedFractionApproximationOfRoot</item>\n\t\t\t<item>ContinuedFractionExpansionOfRoot</item>\n\t\t\t<item>ConvertBasicImageGroupElement</item>\n\t\t\t<item>ConvertToCharacterTable</item>\n\t\t\t<item>ConvertToCharacterTableNC</item>\n\t\t\t<item>ConvertToLibTom</item>\n\t\t\t<item>ConvertToLibraryCharacterTableNC</item>\n\t\t\t<item>ConvertToMatrixRep</item>\n\t\t\t<item>ConvertToMatrixRepNC</item>\n\t\t\t<item>ConvertToNormalFormMonomialElement</item>\n\t\t\t<item>ConvertToRangeRep</item>\n\t\t\t<item>ConvertToSiftGroup</item>\n\t\t\t<item>ConvertToStringRep</item>\n\t\t\t<item>ConvertToTableOfMarks</item>\n\t\t\t<item>ConvertToVectorRep</item>\n\t\t\t<item>ConvertToVectorRepNC</item>\n\t\t\t<item>ConwayCandidates</item>\n\t\t\t<item>ConwayPol</item>\n\t\t\t<item>ConwayPolynomial</item>\n\t\t\t<item>CopiedAugmentedCosetTable</item>\n\t\t\t<item>CopyMappingAttributes</item>\n\t\t\t<item>CopyOptionsDefaults</item>\n\t\t\t<item>CopyRel</item>\n\t\t\t<item>CopyStabChain</item>\n\t\t\t<item>Core</item>\n\t\t\t<item>CoreInParent</item>\n\t\t\t<item>CoreOp</item>\n\t\t\t<item>CorestEval</item>\n\t\t\t<item>CorrectConjugacyClass</item>\n\t\t\t<item>CorrespondingGeneratorsByModuloPcgs</item>\n\t\t\t<item>CorrespondingPermutations</item>\n\t\t\t<item>CosetLeadersInner</item>\n\t\t\t<item>CosetLeadersMatFFE</item>\n\t\t\t<item>CosetNumber</item>\n\t\t\t<item>CosetRepAsWord</item>\n\t\t\t<item>CosetTable</item>\n\t\t\t<item>CosetTableBySubgroup</item>\n\t\t\t<item>CosetTableDefaultLimit</item>\n\t\t\t<item>CosetTableDefaultMaxLimit</item>\n\t\t\t<item>CosetTableFpHom</item>\n\t\t\t<item>CosetTableFromGensAndRels</item>\n\t\t\t<item>CosetTableInWholeGroup</item>\n\t\t\t<item>CosetTableNormalClosure</item>\n\t\t\t<item>CosetTableNormalClosureInWholeGroup</item>\n\t\t\t<item>CosetTableOfFpSemigroup</item>\n\t\t\t<item>CosetTableStandard</item>\n\t\t\t<item>CoveringTriplesCharacters</item>\n\t\t\t<item>CrcFile</item>\n\t\t\t<item>CreateAllCycleStructures</item>\n\t\t\t<item>CreateCompletionFiles</item>\n\t\t\t<item>CreateKnuthBendixRewritingSystem</item>\n\t\t\t<item>CreateOrderingByLtFunction</item>\n\t\t\t<item>CreateOrderingByLteqFunction</item>\n\t\t\t<item>CrystGroupDefaultAction</item>\n\t\t\t<item>CurrentAssertionLevel</item>\n\t\t\t<item>CycList</item>\n\t\t\t<item>Cycle</item>\n\t\t\t<item>CycleByPosOp</item>\n\t\t\t<item>CycleIndex</item>\n\t\t\t<item>CycleIndexOp</item>\n\t\t\t<item>CycleLength</item>\n\t\t\t<item>CycleLengthOp</item>\n\t\t\t<item>CycleLengthPermInt</item>\n\t\t\t<item>CycleLengths</item>\n\t\t\t<item>CycleLengthsOp</item>\n\t\t\t<item>CycleOp</item>\n\t\t\t<item>CyclePermInt</item>\n\t\t\t<item>CycleStructureClass</item>\n\t\t\t<item>CycleStructurePerm</item>\n\t\t\t<item>CycleStructuresGroup</item>\n\t\t\t<item>Cycles</item>\n\t\t\t<item>CyclesOp</item>\n\t\t\t<item>CyclicExtensionsTom</item>\n\t\t\t<item>CyclicExtensionsTomOp</item>\n\t\t\t<item>CyclicGroup</item>\n\t\t\t<item>CyclicGroupCons</item>\n\t\t\t<item>CyclicTopExtensions</item>\n\t\t\t<item>CyclotomicField</item>\n\t\t\t<item>CyclotomicPol</item>\n\t\t\t<item>CyclotomicPolynomial</item>\n\t\t\t<item>Cyclotomics</item>\n\t\t\t<item>CyclotomicsFamily</item>\n\t\t\t<item>DMYDay</item>\n\t\t\t<item>DMYhmsSeconds</item>\n\t\t\t<item>DTCommutator</item>\n\t\t\t<item>DTConjugate</item>\n\t\t\t<item>DTMultiply</item>\n\t\t\t<item>DTPower</item>\n\t\t\t<item>DTQuotient</item>\n\t\t\t<item>DTSolution</item>\n\t\t\t<item>DataObj</item>\n\t\t\t<item>DataType</item>\n\t\t\t<item>DayDMY</item>\n\t\t\t<item>DaysInMonth</item>\n\t\t\t<item>DaysInYear</item>\n\t\t\t<item>DeclareAttribute</item>\n\t\t\t<item>DeclareAttributeKernel</item>\n\t\t\t<item>DeclareAttributeSuppCT</item>\n\t\t\t<item>DeclareAutoPackage</item>\n\t\t\t<item>DeclareAutoreadableVariables</item>\n\t\t\t<item>DeclareCategory</item>\n\t\t\t<item>DeclareCategoryCollections</item>\n\t\t\t<item>DeclareCategoryFamily</item>\n\t\t\t<item>DeclareCategoryKernel</item>\n\t\t\t<item>DeclareComponent</item>\n\t\t\t<item>DeclareConstructor</item>\n\t\t\t<item>DeclareConstructorKernel</item>\n\t\t\t<item>DeclareFilter</item>\n\t\t\t<item>DeclareGlobalFunction</item>\n\t\t\t<item>DeclareGlobalVariable</item>\n\t\t\t<item>DeclareHandlingByNiceBasis</item>\n\t\t\t<item>DeclareInfoClass</item>\n\t\t\t<item>DeclareOperation</item>\n\t\t\t<item>DeclareOperationKernel</item>\n\t\t\t<item>DeclarePackage</item>\n\t\t\t<item>DeclarePackageAutoDocumentation</item>\n\t\t\t<item>DeclarePackageDocumentation</item>\n\t\t\t<item>DeclareProperty</item>\n\t\t\t<item>DeclarePropertyKernel</item>\n\t\t\t<item>DeclarePropertySuppCT</item>\n\t\t\t<item>DeclareRepresentation</item>\n\t\t\t<item>DeclareRepresentationKernel</item>\n\t\t\t<item>DeclareSynonym</item>\n\t\t\t<item>DeclareSynonymAttr</item>\n\t\t\t<item>DecodeTree</item>\n\t\t\t<item>DecodedTreeEntry</item>\n\t\t\t<item>DecomposeEltIntoPElts</item>\n\t\t\t<item>DecomposeTensorProduct</item>\n\t\t\t<item>DecomposedFixedPointVector</item>\n\t\t\t<item>DecomposedRationalClass</item>\n\t\t\t<item>Decomposition</item>\n\t\t\t<item>DecompositionInt</item>\n\t\t\t<item>DecompositionMatrix</item>\n\t\t\t<item>DecompositionTypes</item>\n\t\t\t<item>DecompositionTypesOfGroup</item>\n\t\t\t<item>Decreased</item>\n\t\t\t<item>DeepThoughtCollector</item>\n\t\t\t<item>DeepThoughtCollectorByGenerators</item>\n\t\t\t<item>DefaultField</item>\n\t\t\t<item>DefaultFieldByGenerators</item>\n\t\t\t<item>DefaultFieldOfMatrix</item>\n\t\t\t<item>DefaultFieldOfMatrixGroup</item>\n\t\t\t<item>DefaultHashLength</item>\n\t\t\t<item>DefaultPackageBannerString</item>\n\t\t\t<item>DefaultRing</item>\n\t\t\t<item>DefaultRingByGenerators</item>\n\t\t\t<item>DefaultSparseHashRepType</item>\n\t\t\t<item>DefaultSparseHashWithIKRepType</item>\n\t\t\t<item>DefaultStabChainOptions</item>\n\t\t\t<item>DefectApproximation</item>\n\t\t\t<item>DefineNewGenerators</item>\n\t\t\t<item>DefiningPcgs</item>\n\t\t\t<item>DefiningPolynomial</item>\n\t\t\t<item>DefiningQuotientHomomorphism</item>\n\t\t\t<item>Degree</item>\n\t\t\t<item>DegreeAction</item>\n\t\t\t<item>DegreeFFE</item>\n\t\t\t<item>DegreeIndeterminate</item>\n\t\t\t<item>DegreeNaturalHomomorphismsPool</item>\n\t\t\t<item>DegreeOfBinaryRelation</item>\n\t\t\t<item>DegreeOfCharacter</item>\n\t\t\t<item>DegreeOfLaurentPolynomial</item>\n\t\t\t<item>DegreeOfMatrixGroup</item>\n\t\t\t<item>DegreeOfTransformation</item>\n\t\t\t<item>DegreeOfTransformationSemigroup</item>\n\t\t\t<item>DegreeOfUnivariateLaurentPolynomial</item>\n\t\t\t<item>DegreeOperation</item>\n\t\t\t<item>DegreeOverPrimeField</item>\n\t\t\t<item>DeleteImage</item>\n\t\t\t<item>Delta</item>\n\t\t\t<item>DenominatorCyc</item>\n\t\t\t<item>DenominatorOfModuloPcgs</item>\n\t\t\t<item>DenominatorOfRationalFunction</item>\n\t\t\t<item>DenominatorRat</item>\n\t\t\t<item>DenseHashTable</item>\n\t\t\t<item>DenseIntKey</item>\n\t\t\t<item>DepthOfPcElement</item>\n\t\t\t<item>DepthOfUpperTriangularMatrix</item>\n\t\t\t<item>DepthSchreierTrees</item>\n\t\t\t<item>Derangements</item>\n\t\t\t<item>DerangementsK</item>\n\t\t\t<item>Derivations</item>\n\t\t\t<item>Derivative</item>\n\t\t\t<item>DerivedLength</item>\n\t\t\t<item>DerivedSeries</item>\n\t\t\t<item>DerivedSeriesOfGroup</item>\n\t\t\t<item>DerivedSubgroup</item>\n\t\t\t<item>DerivedSubgroupTom</item>\n\t\t\t<item>DerivedSubgroupsTom</item>\n\t\t\t<item>DerivedSubgroupsTomPossible</item>\n\t\t\t<item>DerivedSubgroupsTomUnique</item>\n\t\t\t<item>DescendingListWithElementRemoved</item>\n\t\t\t<item>DescriptionOfNormalizedUEAElement</item>\n\t\t\t<item>DescriptionOfRootOfUnity</item>\n\t\t\t<item>Determinant</item>\n\t\t\t<item>DeterminantIntMat</item>\n\t\t\t<item>DeterminantMat</item>\n\t\t\t<item>DeterminantMatDestructive</item>\n\t\t\t<item>DeterminantMatDivFree</item>\n\t\t\t<item>DeterminantOfCharacter</item>\n\t\t\t<item>DiagonalMat</item>\n\t\t\t<item>DiagonalOfMat</item>\n\t\t\t<item>DiagonalSocleAction</item>\n\t\t\t<item>DiagonalizeIntMat</item>\n\t\t\t<item>DiagonalizeIntMatNormDriven</item>\n\t\t\t<item>DiagonalizeMat</item>\n\t\t\t<item>DictionariesFamily</item>\n\t\t\t<item>DictionaryByList</item>\n\t\t\t<item>DictionaryByPosition</item>\n\t\t\t<item>DictionaryBySort</item>\n\t\t\t<item>DiffCoc</item>\n\t\t\t<item>Difference</item>\n\t\t\t<item>DifferenceBlist</item>\n\t\t\t<item>DifferenceLists</item>\n\t\t\t<item>DifferenceOfPcElement</item>\n\t\t\t<item>DigitsNumber</item>\n\t\t\t<item>DihedralGenerators</item>\n\t\t\t<item>DihedralGroup</item>\n\t\t\t<item>DihedralGroupCons</item>\n\t\t\t<item>Dimension</item>\n\t\t\t<item>DimensionOfHighestWeightModule</item>\n\t\t\t<item>DimensionOfMatrixGroup</item>\n\t\t\t<item>DimensionOfVectors</item>\n\t\t\t<item>DimensionsLoewyFactors</item>\n\t\t\t<item>DimensionsMat</item>\n\t\t\t<item>DirProdTransversal</item>\n\t\t\t<item>DirectFactorsOfGroup</item>\n\t\t\t<item>DirectProduct</item>\n\t\t\t<item>DirectProductDecompositionsLocal</item>\n\t\t\t<item>DirectProductInfo</item>\n\t\t\t<item>DirectProductOp</item>\n\t\t\t<item>DirectSumDecomposition</item>\n\t\t\t<item>DirectSumMat</item>\n\t\t\t<item>DirectSumOfAlgebraModules</item>\n\t\t\t<item>DirectSumOfAlgebras</item>\n\t\t\t<item>DirectoriesFamily</item>\n\t\t\t<item>DirectoriesLibrary</item>\n\t\t\t<item>DirectoriesPackageLibrary</item>\n\t\t\t<item>DirectoriesPackagePrograms</item>\n\t\t\t<item>DirectoriesSystemPrograms</item>\n\t\t\t<item>Directory</item>\n\t\t\t<item>DirectoryContents</item>\n\t\t\t<item>DirectoryCurrent</item>\n\t\t\t<item>DirectoryTemporary</item>\n\t\t\t<item>DirectoryType</item>\n\t\t\t<item>DisableAttributeValueStoring</item>\n\t\t\t<item>Discriminant</item>\n\t\t\t<item>Display</item>\n\t\t\t<item>DisplayCacheStats</item>\n\t\t\t<item>DisplayCompositionSeries</item>\n\t\t\t<item>DisplayEggBoxOfDClass</item>\n\t\t\t<item>DisplayImfInvariants</item>\n\t\t\t<item>DisplayImfReps</item>\n\t\t\t<item>DisplayInformationPerfectGroups</item>\n\t\t\t<item>DisplayOptions</item>\n\t\t\t<item>DisplayOptionsStack</item>\n\t\t\t<item>DisplayProfile</item>\n\t\t\t<item>DisplayRevision</item>\n\t\t\t<item>DisplaySemigroup</item>\n\t\t\t<item>DisplayXMLStructure</item>\n\t\t\t<item>DistVecClosVecLib</item>\n\t\t\t<item>DistanceVecFFE</item>\n\t\t\t<item>DistancesDistributionMatFFEVecFFE</item>\n\t\t\t<item>DistancesDistributionVecFFEsVecFFE</item>\n\t\t\t<item>DivisionRingByGenerators</item>\n\t\t\t<item>DivisorsInt</item>\n\t\t\t<item>DivisorsIntCache</item>\n\t\t\t<item>DixonInit</item>\n\t\t\t<item>DixonRecord</item>\n\t\t\t<item>DixonRepChi</item>\n\t\t\t<item>DixonRepGHchi</item>\n\t\t\t<item>DixonSplit</item>\n\t\t\t<item>DixontinI</item>\n\t\t\t<item>DnLattice</item>\n\t\t\t<item>DnLatticeIterative</item>\n\t\t\t<item>DoAlgebraicExt</item>\n\t\t\t<item>DoCentralSeriesPcgsIfNilpot</item>\n\t\t\t<item>DoCheapActionImages</item>\n\t\t\t<item>DoCheapOperationImages</item>\n\t\t\t<item>DoClosurePrmGp</item>\n\t\t\t<item>DoEASLS</item>\n\t\t\t<item>DoExponentsConjLayerFampcgs</item>\n\t\t\t<item>DoFactorCosetAction</item>\n\t\t\t<item>DoGaloisType</item>\n\t\t\t<item>DoImmutableMatrix</item>\n\t\t\t<item>DoInducedPcgsByPcSequenceNC</item>\n\t\t\t<item>DoLogModRho</item>\n\t\t\t<item>DoLowIndexSubgroupsFpGroup</item>\n\t\t\t<item>DoMulExt</item>\n\t\t\t<item>DoNFIM</item>\n\t\t\t<item>DoNormalClosurePermGroup</item>\n\t\t\t<item>DoNormalizerSA</item>\n\t\t\t<item>DoPcgsElementaryAbelianSeries</item>\n\t\t\t<item>DoPcgsOrbitOp</item>\n\t\t\t<item>DoPrintUnivariateLaurent</item>\n\t\t\t<item>DoReadPkg</item>\n\t\t\t<item>DoRereadPkg</item>\n\t\t\t<item>DoRightTransversalPc</item>\n\t\t\t<item>DoShortwordBasepoint</item>\n\t\t\t<item>DoSnAnGiantTest</item>\n\t\t\t<item>DoSparseActionHomomorphism</item>\n\t\t\t<item>DoSparseLinearActionOnFaithfulSubset</item>\n\t\t\t<item>DoTest</item>\n\t\t\t<item>DoUnivTestRatfun</item>\n\t\t\t<item>Domain</item>\n\t\t\t<item>DomainByGenerators</item>\n\t\t\t<item>DomainForAction</item>\n\t\t\t<item>DominantCharacter</item>\n\t\t\t<item>DominantWeights</item>\n\t\t\t<item>DoubleCentralizerOrbit</item>\n\t\t\t<item>DoubleCoset</item>\n\t\t\t<item>DoubleCosetRepsAndSizes</item>\n\t\t\t<item>DoubleCosets</item>\n\t\t\t<item>DoubleCosetsNC</item>\n\t\t\t<item>DoubleCosetsPcGroup</item>\n\t\t\t<item>DoubleHashArraySize</item>\n\t\t\t<item>DoubleHashDictSize</item>\n\t\t\t<item>DownEnv</item>\n\t\t\t<item>DualGModule</item>\n\t\t\t<item>DumpWorkspace</item>\n\t\t\t<item>DuplicateFreeList</item>\n\t\t\t<item>DxActiveCols</item>\n\t\t\t<item>DxCalcAllPowerMaps</item>\n\t\t\t<item>DxCalcPrimeClasses</item>\n\t\t\t<item>DxDegreeCandidates</item>\n\t\t\t<item>DxEigenbase</item>\n\t\t\t<item>DxFrobSchurInd</item>\n\t\t\t<item>DxGaloisOrbits</item>\n\t\t\t<item>DxGeneratePrimeCyclotomic</item>\n\t\t\t<item>DxIncludeIrreducibles</item>\n\t\t\t<item>DxIsInSpace</item>\n\t\t\t<item>DxLiftCharacter</item>\n\t\t\t<item>DxLinearCharacters</item>\n\t\t\t<item>DxModProduct</item>\n\t\t\t<item>DxModularValuePol</item>\n\t\t\t<item>DxNiceBasis</item>\n\t\t\t<item>DxPreparation</item>\n\t\t\t<item>DxRegisterModularChar</item>\n\t\t\t<item>DxSplitDegree</item>\n\t\t\t<item>EANormalSeriesByPcgs</item>\n\t\t\t<item>EAPrimeLayerSQ</item>\n\t\t\t<item>ERepAssWorInv</item>\n\t\t\t<item>ERepAssWorProd</item>\n\t\t\t<item>ERepLettWord</item>\n\t\t\t<item>Earns</item>\n\t\t\t<item>Edit</item>\n\t\t\t<item>EggBoxOfDClass</item>\n\t\t\t<item>EichlerTransformation</item>\n\t\t\t<item>Eigenspaces</item>\n\t\t\t<item>Eigenvalues</item>\n\t\t\t<item>EigenvaluesChar</item>\n\t\t\t<item>Eigenvectors</item>\n\t\t\t<item>ElementByRws</item>\n\t\t\t<item>ElementOfFpAlgebra</item>\n\t\t\t<item>ElementOfFpGroup</item>\n\t\t\t<item>ElementOfFpMonoid</item>\n\t\t\t<item>ElementOfFpSemigroup</item>\n\t\t\t<item>ElementOfMagmaRing</item>\n\t\t\t<item>ElementOrdersPowerMap</item>\n\t\t\t<item>ElementProperty</item>\n\t\t\t<item>ElementTestFunction</item>\n\t\t\t<item>ElementaryAbelianGroup</item>\n\t\t\t<item>ElementaryAbelianGroupCons</item>\n\t\t\t<item>ElementaryAbelianSeries</item>\n\t\t\t<item>ElementaryAbelianSeriesLargeSteps</item>\n\t\t\t<item>ElementaryAbelianSubseries</item>\n\t\t\t<item>ElementaryDivisorsMat</item>\n\t\t\t<item>ElementaryDivisorsMatDestructive</item>\n\t\t\t<item>Elements</item>\n\t\t\t<item>ElementsFamily</item>\n\t\t\t<item>ElementsStabChain</item>\n\t\t\t<item>EliminatedWord</item>\n\t\t\t<item>EliminationOrdering</item>\n\t\t\t<item>ElmDivRingElm</item>\n\t\t\t<item>ElmTimesRingElm</item>\n\t\t\t<item>ElmWPObj</item>\n\t\t\t<item>ElsymsPowersums</item>\n\t\t\t<item>Embedding</item>\n\t\t\t<item>EmptyBinaryRelation</item>\n\t\t\t<item>EmptyMatrix</item>\n\t\t\t<item>EmptyRBase</item>\n\t\t\t<item>EmptyRowVector</item>\n\t\t\t<item>EmptySCTable</item>\n\t\t\t<item>EmptyStabChain</item>\n\t\t\t<item>EmptyTuplesFamily</item>\n\t\t\t<item>EnableAttributeValueStoring</item>\n\t\t\t<item>End</item>\n\t\t\t<item>EndoMappingByTransformation</item>\n\t\t\t<item>EnumerateIndependentAbelianProducts</item>\n\t\t\t<item>Enumerator</item>\n\t\t\t<item>EnumeratorByBasis</item>\n\t\t\t<item>EnumeratorByFunctions</item>\n\t\t\t<item>EnumeratorByPcgs</item>\n\t\t\t<item>EnumeratorOfAdditiveMagma</item>\n\t\t\t<item>EnumeratorOfGroup</item>\n\t\t\t<item>EnumeratorOfIdeal</item>\n\t\t\t<item>EnumeratorOfMagma</item>\n\t\t\t<item>EnumeratorOfMagmaIdeal</item>\n\t\t\t<item>EnumeratorOfNormedRowVectors</item>\n\t\t\t<item>EnumeratorOfPrimeField</item>\n\t\t\t<item>EnumeratorOfRing</item>\n\t\t\t<item>EnumeratorOfSemigroupIdeal</item>\n\t\t\t<item>EnumeratorOfSubset</item>\n\t\t\t<item>EnumeratorOfTrivialAdditiveMagmaWithZero</item>\n\t\t\t<item>EnumeratorOfTrivialMagmaWithOne</item>\n\t\t\t<item>EnumeratorOfTuples</item>\n\t\t\t<item>EnumeratorOfZmodnZ</item>\n\t\t\t<item>EnumeratorSorted</item>\n\t\t\t<item>EnvelopingAlgebra</item>\n\t\t\t<item>EpiPcByModpcgs</item>\n\t\t\t<item>EpimorphismNilpotentQuotient</item>\n\t\t\t<item>EpimorphismNilpotentQuotientOp</item>\n\t\t\t<item>EpimorphismPGroup</item>\n\t\t\t<item>EpimorphismQuotientSystem</item>\n\t\t\t<item>EpimorphismSchurCover</item>\n\t\t\t<item>EqualBoxedObj</item>\n\t\t\t<item>EquivalenceClassOfElement</item>\n\t\t\t<item>EquivalenceClassOfElementNC</item>\n\t\t\t<item>EquivalenceClassRelation</item>\n\t\t\t<item>EquivalenceClasses</item>\n\t\t\t<item>EquivalenceRelationByPairs</item>\n\t\t\t<item>EquivalenceRelationByPairsNC</item>\n\t\t\t<item>EquivalenceRelationByPartition</item>\n\t\t\t<item>EquivalenceRelationByPartitionNC</item>\n\t\t\t<item>EquivalenceRelationByProperty</item>\n\t\t\t<item>EquivalenceRelationByRelation</item>\n\t\t\t<item>EquivalenceRelationPartition</item>\n\t\t\t<item>EquivalenceType</item>\n\t\t\t<item>Error</item>\n\t\t\t<item>ErrorCount</item>\n\t\t\t<item>EspaceBasePoints</item>\n\t\t\t<item>EuclideanDegree</item>\n\t\t\t<item>EuclideanQuotient</item>\n\t\t\t<item>EuclideanRemainder</item>\n\t\t\t<item>EulerianFunction</item>\n\t\t\t<item>EulerianFunctionByTom</item>\n\t\t\t<item>EvalF</item>\n\t\t\t<item>EvalFpCoc</item>\n\t\t\t<item>EvalStraightLineProgElm</item>\n\t\t\t<item>EvalString</item>\n\t\t\t<item>EvaluateConsistency</item>\n\t\t\t<item>EvaluateOverlapANA</item>\n\t\t\t<item>EvaluateOverlapBAN</item>\n\t\t\t<item>EvaluateOverlapBNA</item>\n\t\t\t<item>EvaluateOverlapCBA</item>\n\t\t\t<item>EvaluateRelation</item>\n\t\t\t<item>EvaluateRelators</item>\n\t\t\t<item>EvectBasePoints</item>\n\t\t\t<item>ExactSizeConsiderFunction</item>\n\t\t\t<item>ExcludeFromAutoload</item>\n\t\t\t<item>ExcludedOrders</item>\n\t\t\t<item>Exec</item>\n\t\t\t<item>ExecuteProcess</item>\n\t\t\t<item>ExpPcElmSortedFun</item>\n\t\t\t<item>Exponent</item>\n\t\t\t<item>ExponentOfPcElement</item>\n\t\t\t<item>ExponentOfPowering</item>\n\t\t\t<item>ExponentSumWord</item>\n\t\t\t<item>ExponentSums</item>\n\t\t\t<item>ExponentSyllable</item>\n\t\t\t<item>ExponentsConjugateLayer</item>\n\t\t\t<item>ExponentsOfCommutator</item>\n\t\t\t<item>ExponentsOfConjugate</item>\n\t\t\t<item>ExponentsOfPcElement</item>\n\t\t\t<item>ExponentsOfPcElementPermGroup</item>\n\t\t\t<item>ExponentsOfRelativePower</item>\n\t\t\t<item>ExportToKernelFinished</item>\n\t\t\t<item>ExtOrbStabDom</item>\n\t\t\t<item>ExtRepByTailVector</item>\n\t\t\t<item>ExtRepDenominatorRatFun</item>\n\t\t\t<item>ExtRepNumeratorRatFun</item>\n\t\t\t<item>ExtRepOfObj</item>\n\t\t\t<item>ExtRepPolynomialRatFun</item>\n\t\t\t<item>ExtendRepresentation</item>\n\t\t\t<item>ExtendSchreierTransversal</item>\n\t\t\t<item>ExtendSchreierTransversalShortCube</item>\n\t\t\t<item>ExtendSchreierTransversalShortTree</item>\n\t\t\t<item>ExtendSeriesPermGroup</item>\n\t\t\t<item>ExtendStabChain</item>\n\t\t\t<item>ExtendToBasis</item>\n\t\t\t<item>ExtendedGroup</item>\n\t\t\t<item>ExtendedIntersectionSumPcgs</item>\n\t\t\t<item>ExtendedPcgs</item>\n\t\t\t<item>ExtendedT</item>\n\t\t\t<item>ExtendedVectors</item>\n\t\t\t<item>Extension</item>\n\t\t\t<item>ExtensionNC</item>\n\t\t\t<item>ExtensionOnBlocks</item>\n\t\t\t<item>ExtensionRepresentatives</item>\n\t\t\t<item>ExtensionSQ</item>\n\t\t\t<item>Extensions</item>\n\t\t\t<item>ExtensionsOfModule</item>\n\t\t\t<item>ExteriorPower</item>\n\t\t\t<item>ExteriorPowerOfAlgebraModule</item>\n\t\t\t<item>ExternalOrbit</item>\n\t\t\t<item>ExternalOrbitOp</item>\n\t\t\t<item>ExternalOrbits</item>\n\t\t\t<item>ExternalOrbitsStabilizers</item>\n\t\t\t<item>ExternalSet</item>\n\t\t\t<item>ExternalSetByFilterConstructor</item>\n\t\t\t<item>ExternalSetByTypeConstructor</item>\n\t\t\t<item>ExternalSubset</item>\n\t\t\t<item>ExternalSubsetOp</item>\n\t\t\t<item>Extract</item>\n\t\t\t<item>ExtraspecialGroup</item>\n\t\t\t<item>ExtraspecialGroupCons</item>\n\t\t\t<item>FFEFamily</item>\n\t\t\t<item>FFPFactors</item>\n\t\t\t<item>FFPOrderKnownDividend</item>\n\t\t\t<item>FFPPowerModCheck</item>\n\t\t\t<item>FFPUpperBoundOrder</item>\n\t\t\t<item>FLMLORByGenerators</item>\n\t\t\t<item>FLMLORFromFFE</item>\n\t\t\t<item>FLMLORWithOne</item>\n\t\t\t<item>FLMLORWithOneByGenerators</item>\n\t\t\t<item>FMRRemoveZero</item>\n\t\t\t<item>FactorCosetAction</item>\n\t\t\t<item>FactorCosetOperation</item>\n\t\t\t<item>FactorFreeAlgebraByRelators</item>\n\t\t\t<item>FactorFreeGroupByRelators</item>\n\t\t\t<item>FactorFreeMonoidByRelations</item>\n\t\t\t<item>FactorFreeSemigroupByRelations</item>\n\t\t\t<item>FactorGroup</item>\n\t\t\t<item>FactorGroupFpGroupByRels</item>\n\t\t\t<item>FactorGroupNC</item>\n\t\t\t<item>FactorGroupNormalSubgroupClasses</item>\n\t\t\t<item>FactorGroupTom</item>\n\t\t\t<item>FactorSemigroup</item>\n\t\t\t<item>FactorSemigroupByClosure</item>\n\t\t\t<item>Factorial</item>\n\t\t\t<item>Factorization</item>\n\t\t\t<item>Factors</item>\n\t\t\t<item>FactorsCommonDegreePol</item>\n\t\t\t<item>FactorsInt</item>\n\t\t\t<item>FactorsOfDirectProduct</item>\n\t\t\t<item>FactorsRho</item>\n\t\t\t<item>FactorsSquarefree</item>\n\t\t\t<item>FaithfulModule</item>\n\t\t\t<item>FamElmEqFamRange</item>\n\t\t\t<item>FamElmEqFamSource</item>\n\t\t\t<item>FamMapFamSourceFamRange</item>\n\t\t\t<item>FamRangeEqFamElm</item>\n\t\t\t<item>FamRangeNotEqFamElm</item>\n\t\t\t<item>FamSourceEqFamElm</item>\n\t\t\t<item>FamSourceNotEqFamElm</item>\n\t\t\t<item>FamSourceRgtEqFamsLft</item>\n\t\t\t<item>FamiliesOfGeneralMappingsAndRanges</item>\n\t\t\t<item>FamiliesOfRows</item>\n\t\t\t<item>FamilyForOrdering</item>\n\t\t\t<item>FamilyForRewritingSystem</item>\n\t\t\t<item>FamilyObj</item>\n\t\t\t<item>FamilyOfFamilies</item>\n\t\t\t<item>FamilyOfTypes</item>\n\t\t\t<item>FamilyPcgs</item>\n\t\t\t<item>FamilyRange</item>\n\t\t\t<item>FamilySource</item>\n\t\t\t<item>FamilyType</item>\n\t\t\t<item>FastExtSQ</item>\n\t\t\t<item>Fibonacci</item>\n\t\t\t<item>FibonacciGroup</item>\n\t\t\t<item>Field</item>\n\t\t\t<item>FieldByGenerators</item>\n\t\t\t<item>FieldExtension</item>\n\t\t\t<item>FieldOfMatrixGroup</item>\n\t\t\t<item>FieldOfMatrixList</item>\n\t\t\t<item>FieldOverItselfByGenerators</item>\n\t\t\t<item>FileDescriptorOfStream</item>\n\t\t\t<item>FileString</item>\n\t\t\t<item>Filename</item>\n\t\t\t<item>FilterSGMLMarkup</item>\n\t\t\t<item>Filtered</item>\n\t\t\t<item>FilteredOp</item>\n\t\t\t<item>FinIndexCyclicSubgroupGenerator</item>\n\t\t\t<item>FindActionKernel</item>\n\t\t\t<item>FindBag</item>\n\t\t\t<item>FindLayer</item>\n\t\t\t<item>FindNewReps</item>\n\t\t\t<item>FindNormalCSPG</item>\n\t\t\t<item>FindOperationKernel</item>\n\t\t\t<item>FindRegularNormalCSPG</item>\n\t\t\t<item>FindWindowId</item>\n\t\t\t<item>Fingerprint</item>\n\t\t\t<item>FingerprintFF</item>\n\t\t\t<item>FingerprintLarge</item>\n\t\t\t<item>FingerprintMedium</item>\n\t\t\t<item>FingerprintPerm</item>\n\t\t\t<item>FingerprintSmall</item>\n\t\t\t<item>FiniteField</item>\n\t\t\t<item>First</item>\n\t\t\t<item>FirstOp</item>\n\t\t\t<item>FittingSubgroup</item>\n\t\t\t<item>FixcellPoint</item>\n\t\t\t<item>Fixcells</item>\n\t\t\t<item>FixcellsCell</item>\n\t\t\t<item>FixedPointSpace</item>\n\t\t\t<item>FixpointCellNo</item>\n\t\t\t<item>FlagsFamily</item>\n\t\t\t<item>FlagsObj</item>\n\t\t\t<item>FlagsType</item>\n\t\t\t<item>Flat</item>\n\t\t\t<item>FlatBlockMat</item>\n\t\t\t<item>FlatHashParams</item>\n\t\t\t<item>FloatsFamily</item>\n\t\t\t<item>FlushCaches</item>\n\t\t\t<item>ForAll</item>\n\t\t\t<item>ForAllOp</item>\n\t\t\t<item>ForAny</item>\n\t\t\t<item>ForAnyOp</item>\n\t\t\t<item>FormatParagraph</item>\n\t\t\t<item>FormattedString</item>\n\t\t\t<item>FpAlgebraByGeneralizedCartanMatrix</item>\n\t\t\t<item>FpElmComparisonMethod</item>\n\t\t\t<item>FpElmEqualityMethod</item>\n\t\t\t<item>FpElmKBRWS</item>\n\t\t\t<item>FpGroupPcGroupSQ</item>\n\t\t\t<item>FpGroupPresentation</item>\n\t\t\t<item>FpGrpMonSmgOfFpGrpMonSmgElement</item>\n\t\t\t<item>FpLieAlgebraByCartanMatrix</item>\n\t\t\t<item>FpLieAlgebraEnumeration</item>\n\t\t\t<item>FpMonoidOfElementOfFpMonoid</item>\n\t\t\t<item>FpOfModules</item>\n\t\t\t<item>FpSemigroupOfElementOfFpSemigroup</item>\n\t\t\t<item>FptoSCAMorphismImageElm</item>\n\t\t\t<item>FrattiniSubgroup</item>\n\t\t\t<item>FrattinifactorId</item>\n\t\t\t<item>FrattinifactorSize</item>\n\t\t\t<item>FreeAlgebra</item>\n\t\t\t<item>FreeAlgebraConstructor</item>\n\t\t\t<item>FreeAlgebraOfFpAlgebra</item>\n\t\t\t<item>FreeAlgebraWithOne</item>\n\t\t\t<item>FreeAssociativeAlgebra</item>\n\t\t\t<item>FreeAssociativeAlgebraWithOne</item>\n\t\t\t<item>FreeGeneratorsOfFpAlgebra</item>\n\t\t\t<item>FreeGeneratorsOfFpGroup</item>\n\t\t\t<item>FreeGeneratorsOfFpMonoid</item>\n\t\t\t<item>FreeGeneratorsOfFpSemigroup</item>\n\t\t\t<item>FreeGeneratorsOfWholeGroup</item>\n\t\t\t<item>FreeGroup</item>\n\t\t\t<item>FreeGroupOfBasicImageGroup</item>\n\t\t\t<item>FreeGroupOfElt</item>\n\t\t\t<item>FreeGroupOfFpGroup</item>\n\t\t\t<item>FreeLeftModule</item>\n\t\t\t<item>FreeLieAlgebra</item>\n\t\t\t<item>FreeMagma</item>\n\t\t\t<item>FreeMagmaRing</item>\n\t\t\t<item>FreeMagmaWithOne</item>\n\t\t\t<item>FreeMonoid</item>\n\t\t\t<item>FreeMonoidNatHomByGeneratorsNC</item>\n\t\t\t<item>FreeMonoidOfFpMonoid</item>\n\t\t\t<item>FreeMonoidOfRewritingSystem</item>\n\t\t\t<item>FreeSemigroup</item>\n\t\t\t<item>FreeSemigroupNatHomByGeneratorsNC</item>\n\t\t\t<item>FreeSemigroupOfFpSemigroup</item>\n\t\t\t<item>FreeSemigroupOfRewritingSystem</item>\n\t\t\t<item>FreeStructureOfRewritingSystem</item>\n\t\t\t<item>FrobeniusAutomorphism</item>\n\t\t\t<item>FrobeniusAutomorphismI</item>\n\t\t\t<item>FrobeniusCharacterValue</item>\n\t\t\t<item>FullMatrixAlgebra</item>\n\t\t\t<item>FullMatrixAlgebraCentralizer</item>\n\t\t\t<item>FullMatrixFLMLOR</item>\n\t\t\t<item>FullMatrixLieAlgebra</item>\n\t\t\t<item>FullMatrixLieFLMLOR</item>\n\t\t\t<item>FullMatrixModule</item>\n\t\t\t<item>FullMatrixSpace</item>\n\t\t\t<item>FullRowModule</item>\n\t\t\t<item>FullRowSpace</item>\n\t\t\t<item>FullSparseRowSpace</item>\n\t\t\t<item>FullTransformationSemigroup</item>\n\t\t\t<item>FunctionAction</item>\n\t\t\t<item>FunctionsFamily</item>\n\t\t\t<item>FusionCharTableTom</item>\n\t\t\t<item>FusionConjugacyClasses</item>\n\t\t\t<item>FusionConjugacyClassesOp</item>\n\t\t\t<item>FusionRationalClassesPSubgroup</item>\n\t\t\t<item>FusionsAllowedByRestrictions</item>\n\t\t\t<item>FusionsOfLibTom</item>\n\t\t\t<item>FusionsToLibTom</item>\n\t\t\t<item>FusionsTom</item>\n\t\t\t<item>GAPDocManualLab</item>\n\t\t\t<item>GAPInfo</item>\n\t\t\t<item>GInverses</item>\n\t\t\t<item>GLDegree</item>\n\t\t\t<item>GLUnderlyingField</item>\n\t\t\t<item>GModuleByMats</item>\n\t\t\t<item>GPartitions</item>\n\t\t\t<item>GPartitionsEasy</item>\n\t\t\t<item>GPartitionsGreatestEQ</item>\n\t\t\t<item>GPartitionsGreatestEQHelper</item>\n\t\t\t<item>GPartitionsGreatestLE</item>\n\t\t\t<item>GPartitionsGreatestLEEasy</item>\n\t\t\t<item>GPartitionsNrParts</item>\n\t\t\t<item>GPartitionsNrPartsHelper</item>\n\t\t\t<item>GQuotients</item>\n\t\t\t<item>GaloisConjugates</item>\n\t\t\t<item>GaloisCyc</item>\n\t\t\t<item>GaloisDiffResolvent</item>\n\t\t\t<item>GaloisField</item>\n\t\t\t<item>GaloisGroup</item>\n\t\t\t<item>GaloisMat</item>\n\t\t\t<item>GaloisSetResolvent</item>\n\t\t\t<item>GaloisStabilizer</item>\n\t\t\t<item>GaloisType</item>\n\t\t\t<item>GapInputPcGroup</item>\n\t\t\t<item>GapInputSCTable</item>\n\t\t\t<item>GasmanLimits</item>\n\t\t\t<item>GasmanMessageStatus</item>\n\t\t\t<item>GasmanStatistics</item>\n\t\t\t<item>GaussianIntegers</item>\n\t\t\t<item>GaussianRationals</item>\n\t\t\t<item>Gcd</item>\n\t\t\t<item>GcdCoeffs</item>\n\t\t\t<item>GcdInt</item>\n\t\t\t<item>GcdOp</item>\n\t\t\t<item>GcdRepresentation</item>\n\t\t\t<item>GcdRepresentationOp</item>\n\t\t\t<item>Gcdex</item>\n\t\t\t<item>GeneralLinearGroup</item>\n\t\t\t<item>GeneralLinearGroupCons</item>\n\t\t\t<item>GeneralMappingByElements</item>\n\t\t\t<item>GeneralMappingsFamily</item>\n\t\t\t<item>GeneralOrthogonalGroup</item>\n\t\t\t<item>GeneralOrthogonalGroupCons</item>\n\t\t\t<item>GeneralStepClEANS</item>\n\t\t\t<item>GeneralStepClEANSNonsolv</item>\n\t\t\t<item>GeneralUnitaryGroup</item>\n\t\t\t<item>GeneralUnitaryGroupCons</item>\n\t\t\t<item>GeneralisedEigenspaces</item>\n\t\t\t<item>GeneralisedEigenvalues</item>\n\t\t\t<item>GeneralizedEigenspaces</item>\n\t\t\t<item>GeneralizedEigenvalues</item>\n\t\t\t<item>GeneralizedPcgs</item>\n\t\t\t<item>GeneratingPairsOfLeftMagmaCongruence</item>\n\t\t\t<item>GeneratingPairsOfMagmaCongruence</item>\n\t\t\t<item>GeneratingPairsOfRightMagmaCongruence</item>\n\t\t\t<item>GeneratingPairsOfSemigroupCongruence</item>\n\t\t\t<item>GeneratingSetIsComplete</item>\n\t\t\t<item>GeneratorNumberOfQuotient</item>\n\t\t\t<item>GeneratorOfCyclicGroup</item>\n\t\t\t<item>GeneratorSyllable</item>\n\t\t\t<item>GeneratorTranslationAugmentedCosetTable</item>\n\t\t\t<item>GeneratorsCenterPGroup</item>\n\t\t\t<item>GeneratorsCentrePGroup</item>\n\t\t\t<item>GeneratorsListTom</item>\n\t\t\t<item>GeneratorsOfAdditiveGroup</item>\n\t\t\t<item>GeneratorsOfAdditiveMagma</item>\n\t\t\t<item>GeneratorsOfAdditiveMagmaWithInverses</item>\n\t\t\t<item>GeneratorsOfAdditiveMagmaWithZero</item>\n\t\t\t<item>GeneratorsOfAlgebra</item>\n\t\t\t<item>GeneratorsOfAlgebraModule</item>\n\t\t\t<item>GeneratorsOfAlgebraWithOne</item>\n\t\t\t<item>GeneratorsOfDivisionRing</item>\n\t\t\t<item>GeneratorsOfDomain</item>\n\t\t\t<item>GeneratorsOfEquivalenceRelationPartition</item>\n\t\t\t<item>GeneratorsOfExtASet</item>\n\t\t\t<item>GeneratorsOfExtLSet</item>\n\t\t\t<item>GeneratorsOfExtRSet</item>\n\t\t\t<item>GeneratorsOfExtUSet</item>\n\t\t\t<item>GeneratorsOfFLMLOR</item>\n\t\t\t<item>GeneratorsOfFLMLORWithOne</item>\n\t\t\t<item>GeneratorsOfField</item>\n\t\t\t<item>GeneratorsOfGroup</item>\n\t\t\t<item>GeneratorsOfIdeal</item>\n\t\t\t<item>GeneratorsOfLayer</item>\n\t\t\t<item>GeneratorsOfLeftIdeal</item>\n\t\t\t<item>GeneratorsOfLeftMagmaIdeal</item>\n\t\t\t<item>GeneratorsOfLeftModule</item>\n\t\t\t<item>GeneratorsOfLeftOperatorAdditiveGroup</item>\n\t\t\t<item>GeneratorsOfLeftOperatorRing</item>\n\t\t\t<item>GeneratorsOfLeftOperatorRingWithOne</item>\n\t\t\t<item>GeneratorsOfLeftVectorSpace</item>\n\t\t\t<item>GeneratorsOfMagma</item>\n\t\t\t<item>GeneratorsOfMagmaIdeal</item>\n\t\t\t<item>GeneratorsOfMagmaWithInverses</item>\n\t\t\t<item>GeneratorsOfMagmaWithOne</item>\n\t\t\t<item>GeneratorsOfMonoid</item>\n\t\t\t<item>GeneratorsOfNearAdditiveGroup</item>\n\t\t\t<item>GeneratorsOfNearAdditiveMagma</item>\n\t\t\t<item>GeneratorsOfNearAdditiveMagmaWithInverses</item>\n\t\t\t<item>GeneratorsOfNearAdditiveMagmaWithZero</item>\n\t\t\t<item>GeneratorsOfPresentation</item>\n\t\t\t<item>GeneratorsOfRightIdeal</item>\n\t\t\t<item>GeneratorsOfRightMagmaIdeal</item>\n\t\t\t<item>GeneratorsOfRightModule</item>\n\t\t\t<item>GeneratorsOfRightOperatorAdditiveGroup</item>\n\t\t\t<item>GeneratorsOfRing</item>\n\t\t\t<item>GeneratorsOfRingForIdeal</item>\n\t\t\t<item>GeneratorsOfRingWithOne</item>\n\t\t\t<item>GeneratorsOfRws</item>\n\t\t\t<item>GeneratorsOfSemigroup</item>\n\t\t\t<item>GeneratorsOfSemiring</item>\n\t\t\t<item>GeneratorsOfSemiringWithOne</item>\n\t\t\t<item>GeneratorsOfSemiringWithOneAndZero</item>\n\t\t\t<item>GeneratorsOfSemiringWithZero</item>\n\t\t\t<item>GeneratorsOfTwoSidedIdeal</item>\n\t\t\t<item>GeneratorsOfVectorSpace</item>\n\t\t\t<item>GeneratorsOverIntersection</item>\n\t\t\t<item>GeneratorsPrimeResidues</item>\n\t\t\t<item>GeneratorsSmallest</item>\n\t\t\t<item>GeneratorsSmallestStab</item>\n\t\t\t<item>GeneratorsSubgroupsTom</item>\n\t\t\t<item>GenericFindActionKernel</item>\n\t\t\t<item>GetChars</item>\n\t\t\t<item>GetCommutatorNC</item>\n\t\t\t<item>GetConjugateNC</item>\n\t\t\t<item>GetDefinitionNC</item>\n\t\t\t<item>GetETag</item>\n\t\t\t<item>GetElement</item>\n\t\t\t<item>GetEnt</item>\n\t\t\t<item>GetFusionMap</item>\n\t\t\t<item>GetHashEntry</item>\n\t\t\t<item>GetHashEntryAtLastIndex</item>\n\t\t\t<item>GetHashEntryIndex</item>\n\t\t\t<item>GetMax</item>\n\t\t\t<item>GetNaturalHomomorphismsPool</item>\n\t\t\t<item>GetNumRight</item>\n\t\t\t<item>GetPols</item>\n\t\t\t<item>GetPowerNC</item>\n\t\t\t<item>GetSTag</item>\n\t\t\t<item>GetWord</item>\n\t\t\t<item>GiveNumbersNIndeterminates</item>\n\t\t\t<item>GlasbyCover</item>\n\t\t\t<item>GlasbyIntersection</item>\n\t\t\t<item>GlasbyShift</item>\n\t\t\t<item>GlasbyStabilizer</item>\n\t\t\t<item>GlobalPartitionOfClasses</item>\n\t\t\t<item>Grading</item>\n\t\t\t<item>GreensDClassOfElement</item>\n\t\t\t<item>GreensDClasses</item>\n\t\t\t<item>GreensDRelation</item>\n\t\t\t<item>GreensHClassOfElement</item>\n\t\t\t<item>GreensHClasses</item>\n\t\t\t<item>GreensHRelation</item>\n\t\t\t<item>GreensJClassOfElement</item>\n\t\t\t<item>GreensJClasses</item>\n\t\t\t<item>GreensJRelation</item>\n\t\t\t<item>GreensLClassOfElement</item>\n\t\t\t<item>GreensLClasses</item>\n\t\t\t<item>GreensLRelation</item>\n\t\t\t<item>GreensRClassOfElement</item>\n\t\t\t<item>GreensRClasses</item>\n\t\t\t<item>GreensRRelation</item>\n\t\t\t<item>GroebnerBasis</item>\n\t\t\t<item>GroebnerBasisNC</item>\n\t\t\t<item>Group</item>\n\t\t\t<item>GroupByGenerators</item>\n\t\t\t<item>GroupByMultiplicationTable</item>\n\t\t\t<item>GroupByNiceMonomorphism</item>\n\t\t\t<item>GroupByPcgs</item>\n\t\t\t<item>GroupByPrimeResidues</item>\n\t\t\t<item>GroupByQuotientSystem</item>\n\t\t\t<item>GroupByRws</item>\n\t\t\t<item>GroupByRwsNC</item>\n\t\t\t<item>GroupFromAdditiveGroup</item>\n\t\t\t<item>GroupGeneralMappingByImages</item>\n\t\t\t<item>GroupHClassOfGreensDClass</item>\n\t\t\t<item>GroupHomomorphismByFunction</item>\n\t\t\t<item>GroupHomomorphismByImages</item>\n\t\t\t<item>GroupHomomorphismByImagesNC</item>\n\t\t\t<item>GroupMethodByNiceMonomorphism</item>\n\t\t\t<item>GroupMethodByNiceMonomorphismCollColl</item>\n\t\t\t<item>GroupMethodByNiceMonomorphismCollElm</item>\n\t\t\t<item>GroupMethodByNiceMonomorphismCollOther</item>\n\t\t\t<item>GroupOfPcgs</item>\n\t\t\t<item>GroupOnSubgroupsOrbit</item>\n\t\t\t<item>GroupRing</item>\n\t\t\t<item>GroupSeriesMethodByNiceMonomorphism</item>\n\t\t\t<item>GroupSeriesMethodByNiceMonomorphismCollColl</item>\n\t\t\t<item>GroupSeriesMethodByNiceMonomorphismCollElm</item>\n\t\t\t<item>GroupSeriesMethodByNiceMonomorphismCollOther</item>\n\t\t\t<item>GroupStabChain</item>\n\t\t\t<item>GroupString</item>\n\t\t\t<item>GroupToAdditiveGroupHomomorphismByFunction</item>\n\t\t\t<item>GroupWithGenerators</item>\n\t\t\t<item>HMSMSec</item>\n\t\t\t<item>HallSubgroup</item>\n\t\t\t<item>HallSubgroupOp</item>\n\t\t\t<item>HallSystem</item>\n\t\t\t<item>HasANonReesCongruenceOfSemigroup</item>\n\t\t\t<item>HasAbelianFactorGroup</item>\n\t\t\t<item>HasAbelianInvariants</item>\n\t\t\t<item>HasAbelianInvariantsOfList</item>\n\t\t\t<item>HasAbsoluteValue</item>\n\t\t\t<item>HasActingDomain</item>\n\t\t\t<item>HasActionHomomorphismAttr</item>\n\t\t\t<item>HasActionKernelExternalSet</item>\n\t\t\t<item>HasActorOfExternalSet</item>\n\t\t\t<item>HasAdditiveElementAsMultiplicativeElement</item>\n\t\t\t<item>HasAdditiveElementsAsMultiplicativeElementsFamily</item>\n\t\t\t<item>HasAdditiveInverse</item>\n\t\t\t<item>HasAdditiveInverseAttr</item>\n\t\t\t<item>HasAdditiveInverseImmutable</item>\n\t\t\t<item>HasAdditiveNeutralElement</item>\n\t\t\t<item>HasAdditivelyActingDomain</item>\n\t\t\t<item>HasAdjointBasis</item>\n\t\t\t<item>HasAdjointModule</item>\n\t\t\t<item>HasAlgebraicElementsFamilies</item>\n\t\t\t<item>HasAllBlocks</item>\n\t\t\t<item>HasAlpha</item>\n\t\t\t<item>HasAlternatingDegree</item>\n\t\t\t<item>HasAlternatingSubgroup</item>\n\t\t\t<item>HasAsDuplicateFreeList</item>\n\t\t\t<item>HasAsGroup</item>\n\t\t\t<item>HasAsGroupGeneralMappingByImages</item>\n\t\t\t<item>HasAsLeftModuleGeneralMappingByImages</item>\n\t\t\t<item>HasAsList</item>\n\t\t\t<item>HasAsMagma</item>\n\t\t\t<item>HasAsMonoid</item>\n\t\t\t<item>HasAsNearRing</item>\n\t\t\t<item>HasAsPolynomial</item>\n\t\t\t<item>HasAsRing</item>\n\t\t\t<item>HasAsSSortedList</item>\n\t\t\t<item>HasAsSemigroup</item>\n\t\t\t<item>HasAsSemiring</item>\n\t\t\t<item>HasAsSemiringWithOne</item>\n\t\t\t<item>HasAsSemiringWithOneAndZero</item>\n\t\t\t<item>HasAsSemiringWithZero</item>\n\t\t\t<item>HasAsSortedList</item>\n\t\t\t<item>HasAsSubgroupOfWholeGroupByQuotient</item>\n\t\t\t<item>HasAssociatedReesMatrixSemigroupOfDClass</item>\n\t\t\t<item>HasAssociatedSemigroup</item>\n\t\t\t<item>HasAugmentationIdeal</item>\n\t\t\t<item>HasAugmentedCosetTableMtcInWholeGroup</item>\n\t\t\t<item>HasAugmentedCosetTableNormalClosureInWholeGroup</item>\n\t\t\t<item>HasAugmentedCosetTableRrsInWholeGroup</item>\n\t\t\t<item>HasAutomorphismDomain</item>\n\t\t\t<item>HasAutomorphismGroup</item>\n\t\t\t<item>HasAutomorphismsOfTable</item>\n\t\t\t<item>HasBaseIntMat</item>\n\t\t\t<item>HasBaseMat</item>\n\t\t\t<item>HasBaseOfBasicImageGroup</item>\n\t\t\t<item>HasBaseOfGroup</item>\n\t\t\t<item>HasBaseOrthogonalSpaceMat</item>\n\t\t\t<item>HasBasis</item>\n\t\t\t<item>HasBasisOfHomCosetAddMatrixGroup</item>\n\t\t\t<item>HasBasisVectors</item>\n\t\t\t<item>HasBaumClausenInfo</item>\n\t\t\t<item>HasBilinearFormMat</item>\n\t\t\t<item>HasBlocksAttr</item>\n\t\t\t<item>HasBlocksInfo</item>\n\t\t\t<item>HasBrauerCharacterValue</item>\n\t\t\t<item>HasBravaisGroup</item>\n\t\t\t<item>HasBravaisSubgroups</item>\n\t\t\t<item>HasBravaisSupergroups</item>\n\t\t\t<item>HasCanEasilyCompareElements</item>\n\t\t\t<item>HasCanEasilySortElements</item>\n\t\t\t<item>HasCanFindNilpotentClassTwoElement</item>\n\t\t\t<item>HasCanonicalBasis</item>\n\t\t\t<item>HasCanonicalElt</item>\n\t\t\t<item>HasCanonicalGenerators</item>\n\t\t\t<item>HasCanonicalNiceMonomorphism</item>\n\t\t\t<item>HasCanonicalPcgs</item>\n\t\t\t<item>HasCanonicalPcgsWrtFamilyPcgs</item>\n\t\t\t<item>HasCanonicalPcgsWrtHomePcgs</item>\n\t\t\t<item>HasCanonicalPcgsWrtSpecialPcgs</item>\n\t\t\t<item>HasCanonicalRepresentativeDeterminatorOfExternalSet</item>\n\t\t\t<item>HasCanonicalRepresentativeOfExternalSet</item>\n\t\t\t<item>HasCartanMatrix</item>\n\t\t\t<item>HasCartanSubalgebra</item>\n\t\t\t<item>HasCayleyGraphDualSemigroup</item>\n\t\t\t<item>HasCayleyGraphSemigroup</item>\n\t\t\t<item>HasCenter</item>\n\t\t\t<item>HasCentralCharacter</item>\n\t\t\t<item>HasCentralIdempotentsOfSemiring</item>\n\t\t\t<item>HasCentralNormalSeriesByPcgs</item>\n\t\t\t<item>HasCentralizerInGLnZ</item>\n\t\t\t<item>HasCentralizerInParent</item>\n\t\t\t<item>HasCentre</item>\n\t\t\t<item>HasCentreOfCharacter</item>\n\t\t\t<item>HasChainHomomorphicImage</item>\n\t\t\t<item>HasChainSubgroup</item>\n\t\t\t<item>HasChainSubgroupQuotient</item>\n\t\t\t<item>HasCharacterDegrees</item>\n\t\t\t<item>HasCharacterNames</item>\n\t\t\t<item>HasCharacterParameters</item>\n\t\t\t<item>HasCharacteristic</item>\n\t\t\t<item>HasCharacteristicPolynomial</item>\n\t\t\t<item>HasChevalleyBasis</item>\n\t\t\t<item>HasChiefNormalSeriesByPcgs</item>\n\t\t\t<item>HasChiefSeries</item>\n\t\t\t<item>HasClassNames</item>\n\t\t\t<item>HasClassNamesTom</item>\n\t\t\t<item>HasClassParameters</item>\n\t\t\t<item>HasClassPermutation</item>\n\t\t\t<item>HasClassPositionsOfCentre</item>\n\t\t\t<item>HasClassPositionsOfDerivedSubgroup</item>\n\t\t\t<item>HasClassPositionsOfDirectProductDecompositions</item>\n\t\t\t<item>HasClassPositionsOfElementaryAbelianSeries</item>\n\t\t\t<item>HasClassPositionsOfFittingSubgroup</item>\n\t\t\t<item>HasClassPositionsOfKernel</item>\n\t\t\t<item>HasClassPositionsOfLowerCentralSeries</item>\n\t\t\t<item>HasClassPositionsOfMaximalNormalSubgroups</item>\n\t\t\t<item>HasClassPositionsOfNormalSubgroups</item>\n\t\t\t<item>HasClassPositionsOfSolvableResiduum</item>\n\t\t\t<item>HasClassPositionsOfSupersolvableResiduum</item>\n\t\t\t<item>HasClassPositionsOfUpperCentralSeries</item>\n\t\t\t<item>HasClassRoots</item>\n\t\t\t<item>HasClassTypesTom</item>\n\t\t\t<item>HasCoKernelOfAdditiveGeneralMapping</item>\n\t\t\t<item>HasCoKernelOfMultiplicativeGeneralMapping</item>\n\t\t\t<item>HasCoefficientsAndMagmaElements</item>\n\t\t\t<item>HasCoefficientsFamily</item>\n\t\t\t<item>HasCoefficientsOfLaurentPolynomial</item>\n\t\t\t<item>HasCoefficientsOfUnivariatePolynomial</item>\n\t\t\t<item>HasCoefficientsOfUnivariateRationalFunction</item>\n\t\t\t<item>HasCoefficientsRing</item>\n\t\t\t<item>HasCollectionsFamily</item>\n\t\t\t<item>HasColumnIndexOfReesMatrixSemigroupElement</item>\n\t\t\t<item>HasColumnIndexOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>HasColumnsOfReesMatrixSemigroup</item>\n\t\t\t<item>HasColumnsOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>HasCommutatorFactorGroup</item>\n\t\t\t<item>HasCommutatorLength</item>\n\t\t\t<item>HasComplementSystem</item>\n\t\t\t<item>HasComplexConjugate</item>\n\t\t\t<item>HasComponentsOfTuplesFamily</item>\n\t\t\t<item>HasCompositionSeries</item>\n\t\t\t<item>HasComputedAgemos</item>\n\t\t\t<item>HasComputedAscendingChains</item>\n\t\t\t<item>HasComputedBrauerTables</item>\n\t\t\t<item>HasComputedClassFusions</item>\n\t\t\t<item>HasComputedCyclicExtensionsTom</item>\n\t\t\t<item>HasComputedHallSubgroups</item>\n\t\t\t<item>HasComputedIndicators</item>\n\t\t\t<item>HasComputedIsPNilpotents</item>\n\t\t\t<item>HasComputedIsPSolvableCharacterTables</item>\n\t\t\t<item>HasComputedIsPSolvables</item>\n\t\t\t<item>HasComputedOmegas</item>\n\t\t\t<item>HasComputedPCentralSeriess</item>\n\t\t\t<item>HasComputedPCores</item>\n\t\t\t<item>HasComputedPRumps</item>\n\t\t\t<item>HasComputedPowerMaps</item>\n\t\t\t<item>HasComputedPrimeBlockss</item>\n\t\t\t<item>HasComputedSylowComplements</item>\n\t\t\t<item>HasComputedSylowSubgroups</item>\n\t\t\t<item>HasConductor</item>\n\t\t\t<item>HasConfluentRws</item>\n\t\t\t<item>HasConjugacyClasses</item>\n\t\t\t<item>HasConjugacyClassesMaximalSubgroups</item>\n\t\t\t<item>HasConjugacyClassesPerfectSubgroups</item>\n\t\t\t<item>HasConjugacyClassesSubgroups</item>\n\t\t\t<item>HasConjugates</item>\n\t\t\t<item>HasConjugatorInnerAutomorphism</item>\n\t\t\t<item>HasConjugatorOfConjugatorIsomorphism</item>\n\t\t\t<item>HasConstantTimeAccessList</item>\n\t\t\t<item>HasConstituentsOfCharacter</item>\n\t\t\t<item>HasConvertBasicImageGroupElement</item>\n\t\t\t<item>HasCoreInParent</item>\n\t\t\t<item>HasCosetTableFpHom</item>\n\t\t\t<item>HasCosetTableInWholeGroup</item>\n\t\t\t<item>HasCosetTableNormalClosureInWholeGroup</item>\n\t\t\t<item>HasCosetTableOfFpSemigroup</item>\n\t\t\t<item>HasCycleStructurePerm</item>\n\t\t\t<item>HasCyclicExtensionsTom</item>\n\t\t\t<item>HasDecompositionMatrix</item>\n\t\t\t<item>HasDecompositionTypesOfGroup</item>\n\t\t\t<item>HasDefaultFieldOfMatrix</item>\n\t\t\t<item>HasDefaultFieldOfMatrixGroup</item>\n\t\t\t<item>HasDefectApproximation</item>\n\t\t\t<item>HasDefiningPcgs</item>\n\t\t\t<item>HasDefiningPolynomial</item>\n\t\t\t<item>HasDegreeAction</item>\n\t\t\t<item>HasDegreeOfBinaryRelation</item>\n\t\t\t<item>HasDegreeOfCharacter</item>\n\t\t\t<item>HasDegreeOfLaurentPolynomial</item>\n\t\t\t<item>HasDegreeOfMatrixGroup</item>\n\t\t\t<item>HasDegreeOfTransformation</item>\n\t\t\t<item>HasDegreeOfTransformationSemigroup</item>\n\t\t\t<item>HasDegreeOperation</item>\n\t\t\t<item>HasDegreeOverPrimeField</item>\n\t\t\t<item>HasDelta</item>\n\t\t\t<item>HasDenominatorOfModuloPcgs</item>\n\t\t\t<item>HasDenominatorOfRationalFunction</item>\n\t\t\t<item>HasDepthOfUpperTriangularMatrix</item>\n\t\t\t<item>HasDerivations</item>\n\t\t\t<item>HasDerivative</item>\n\t\t\t<item>HasDerivedLength</item>\n\t\t\t<item>HasDerivedSeriesOfGroup</item>\n\t\t\t<item>HasDerivedSubgroup</item>\n\t\t\t<item>HasDerivedSubgroupsTomPossible</item>\n\t\t\t<item>HasDerivedSubgroupsTomUnique</item>\n\t\t\t<item>HasDeterminantMat</item>\n\t\t\t<item>HasDeterminantOfCharacter</item>\n\t\t\t<item>HasDihedralGenerators</item>\n\t\t\t<item>HasDimension</item>\n\t\t\t<item>HasDimensionOfMatrixGroup</item>\n\t\t\t<item>HasDimensionOfVectors</item>\n\t\t\t<item>HasDimensionsLoewyFactors</item>\n\t\t\t<item>HasDimensionsMat</item>\n\t\t\t<item>HasDirectFactorsOfGroup</item>\n\t\t\t<item>HasDirectProductInfo</item>\n\t\t\t<item>HasDirectSumDecomposition</item>\n\t\t\t<item>HasDisplayOptions</item>\n\t\t\t<item>HasDixonRecord</item>\n\t\t\t<item>HasEANormalSeriesByPcgs</item>\n\t\t\t<item>HasEarns</item>\n\t\t\t<item>HasEggBoxOfDClass</item>\n\t\t\t<item>HasElementTestFunction</item>\n\t\t\t<item>HasElementaryAbelianFactorGroup</item>\n\t\t\t<item>HasElementaryAbelianSeries</item>\n\t\t\t<item>HasElementaryAbelianSeriesLargeSteps</item>\n\t\t\t<item>HasElementaryAbelianSubseries</item>\n\t\t\t<item>HasElementsFamily</item>\n\t\t\t<item>HasEmptyRowVector</item>\n\t\t\t<item>HasEnumerator</item>\n\t\t\t<item>HasEnumeratorByBasis</item>\n\t\t\t<item>HasEnumeratorSorted</item>\n\t\t\t<item>HasEquivalenceClassRelation</item>\n\t\t\t<item>HasEquivalenceClasses</item>\n\t\t\t<item>HasEquivalenceRelationPartition</item>\n\t\t\t<item>HasExponent</item>\n\t\t\t<item>HasExponentOfPowering</item>\n\t\t\t<item>HasExtRepDenominatorRatFun</item>\n\t\t\t<item>HasExtRepNumeratorRatFun</item>\n\t\t\t<item>HasExtRepPolynomialRatFun</item>\n\t\t\t<item>HasExternalOrbits</item>\n\t\t\t<item>HasExternalOrbitsStabilizers</item>\n\t\t\t<item>HasExternalSet</item>\n\t\t\t<item>HasFactorsOfDirectProduct</item>\n\t\t\t<item>HasFaithfulModule</item>\n\t\t\t<item>HasFamiliesOfGeneralMappingsAndRanges</item>\n\t\t\t<item>HasFamilyForOrdering</item>\n\t\t\t<item>HasFamilyForRewritingSystem</item>\n\t\t\t<item>HasFamilyPcgs</item>\n\t\t\t<item>HasFamilyRange</item>\n\t\t\t<item>HasFamilySource</item>\n\t\t\t<item>HasFieldOfMatrixGroup</item>\n\t\t\t<item>HasFittingSubgroup</item>\n\t\t\t<item>HasFpElmComparisonMethod</item>\n\t\t\t<item>HasFpElmEqualityMethod</item>\n\t\t\t<item>HasFpElmKBRWS</item>\n\t\t\t<item>HasFrattiniSubgroup</item>\n\t\t\t<item>HasFrattinifactorId</item>\n\t\t\t<item>HasFrattinifactorSize</item>\n\t\t\t<item>HasFreeAlgebraOfFpAlgebra</item>\n\t\t\t<item>HasFreeGeneratorsOfFpAlgebra</item>\n\t\t\t<item>HasFreeGeneratorsOfFpGroup</item>\n\t\t\t<item>HasFreeGeneratorsOfFpMonoid</item>\n\t\t\t<item>HasFreeGeneratorsOfFpSemigroup</item>\n\t\t\t<item>HasFreeGroupOfBasicImageGroup</item>\n\t\t\t<item>HasFreeGroupOfFpGroup</item>\n\t\t\t<item>HasFreeMonoidOfFpMonoid</item>\n\t\t\t<item>HasFreeMonoidOfRewritingSystem</item>\n\t\t\t<item>HasFreeSemigroupOfFpSemigroup</item>\n\t\t\t<item>HasFreeSemigroupOfRewritingSystem</item>\n\t\t\t<item>HasFrobeniusAutomorphism</item>\n\t\t\t<item>HasFunctionAction</item>\n\t\t\t<item>HasFusionConjugacyClassesOp</item>\n\t\t\t<item>HasFusionsOfLibTom</item>\n\t\t\t<item>HasFusionsToLibTom</item>\n\t\t\t<item>HasFusionsTom</item>\n\t\t\t<item>HasGLDegree</item>\n\t\t\t<item>HasGLUnderlyingField</item>\n\t\t\t<item>HasGaloisGroup</item>\n\t\t\t<item>HasGaloisMat</item>\n\t\t\t<item>HasGaloisStabilizer</item>\n\t\t\t<item>HasGaloisType</item>\n\t\t\t<item>HasGeneralizedPcgs</item>\n\t\t\t<item>HasGeneratingPairsOfLeftMagmaCongruence</item>\n\t\t\t<item>HasGeneratingPairsOfMagmaCongruence</item>\n\t\t\t<item>HasGeneratingPairsOfRightMagmaCongruence</item>\n\t\t\t<item>HasGeneratingSetIsComplete</item>\n\t\t\t<item>HasGeneratorOfCyclicGroup</item>\n\t\t\t<item>HasGeneratorsOfAdditiveGroup</item>\n\t\t\t<item>HasGeneratorsOfAdditiveMagma</item>\n\t\t\t<item>HasGeneratorsOfAdditiveMagmaWithInverses</item>\n\t\t\t<item>HasGeneratorsOfAdditiveMagmaWithZero</item>\n\t\t\t<item>HasGeneratorsOfAlgebra</item>\n\t\t\t<item>HasGeneratorsOfAlgebraModule</item>\n\t\t\t<item>HasGeneratorsOfAlgebraWithOne</item>\n\t\t\t<item>HasGeneratorsOfDivisionRing</item>\n\t\t\t<item>HasGeneratorsOfDomain</item>\n\t\t\t<item>HasGeneratorsOfEquivalenceRelationPartition</item>\n\t\t\t<item>HasGeneratorsOfExtASet</item>\n\t\t\t<item>HasGeneratorsOfExtLSet</item>\n\t\t\t<item>HasGeneratorsOfExtRSet</item>\n\t\t\t<item>HasGeneratorsOfExtUSet</item>\n\t\t\t<item>HasGeneratorsOfFLMLOR</item>\n\t\t\t<item>HasGeneratorsOfFLMLORWithOne</item>\n\t\t\t<item>HasGeneratorsOfField</item>\n\t\t\t<item>HasGeneratorsOfGroup</item>\n\t\t\t<item>HasGeneratorsOfIdeal</item>\n\t\t\t<item>HasGeneratorsOfLeftIdeal</item>\n\t\t\t<item>HasGeneratorsOfLeftMagmaIdeal</item>\n\t\t\t<item>HasGeneratorsOfLeftModule</item>\n\t\t\t<item>HasGeneratorsOfLeftOperatorAdditiveGroup</item>\n\t\t\t<item>HasGeneratorsOfLeftOperatorRing</item>\n\t\t\t<item>HasGeneratorsOfLeftOperatorRingWithOne</item>\n\t\t\t<item>HasGeneratorsOfLeftVectorSpace</item>\n\t\t\t<item>HasGeneratorsOfMagma</item>\n\t\t\t<item>HasGeneratorsOfMagmaIdeal</item>\n\t\t\t<item>HasGeneratorsOfMagmaWithInverses</item>\n\t\t\t<item>HasGeneratorsOfMagmaWithOne</item>\n\t\t\t<item>HasGeneratorsOfMonoid</item>\n\t\t\t<item>HasGeneratorsOfNearAdditiveGroup</item>\n\t\t\t<item>HasGeneratorsOfNearAdditiveMagma</item>\n\t\t\t<item>HasGeneratorsOfNearAdditiveMagmaWithInverses</item>\n\t\t\t<item>HasGeneratorsOfNearAdditiveMagmaWithZero</item>\n\t\t\t<item>HasGeneratorsOfRightIdeal</item>\n\t\t\t<item>HasGeneratorsOfRightMagmaIdeal</item>\n\t\t\t<item>HasGeneratorsOfRightModule</item>\n\t\t\t<item>HasGeneratorsOfRightOperatorAdditiveGroup</item>\n\t\t\t<item>HasGeneratorsOfRing</item>\n\t\t\t<item>HasGeneratorsOfRingWithOne</item>\n\t\t\t<item>HasGeneratorsOfRws</item>\n\t\t\t<item>HasGeneratorsOfSemigroup</item>\n\t\t\t<item>HasGeneratorsOfSemiring</item>\n\t\t\t<item>HasGeneratorsOfSemiringWithOne</item>\n\t\t\t<item>HasGeneratorsOfSemiringWithOneAndZero</item>\n\t\t\t<item>HasGeneratorsOfSemiringWithZero</item>\n\t\t\t<item>HasGeneratorsOfTwoSidedIdeal</item>\n\t\t\t<item>HasGeneratorsOfVectorSpace</item>\n\t\t\t<item>HasGeneratorsSmallest</item>\n\t\t\t<item>HasGeneratorsSubgroupsTom</item>\n\t\t\t<item>HasGlobalPartitionOfClasses</item>\n\t\t\t<item>HasGrading</item>\n\t\t\t<item>HasGreensDRelation</item>\n\t\t\t<item>HasGreensHRelation</item>\n\t\t\t<item>HasGreensJRelation</item>\n\t\t\t<item>HasGreensLRelation</item>\n\t\t\t<item>HasGreensRRelation</item>\n\t\t\t<item>HasGroupByPcgs</item>\n\t\t\t<item>HasGroupHClassOfGreensDClass</item>\n\t\t\t<item>HasGroupOfPcgs</item>\n\t\t\t<item>HasHallSystem</item>\n\t\t\t<item>HasHirschLength</item>\n\t\t\t<item>HasHomCosetFamily</item>\n\t\t\t<item>HasHomFromFreeOfBasicImageGroup</item>\n\t\t\t<item>HasHomeEnumerator</item>\n\t\t\t<item>HasHomePcgs</item>\n\t\t\t<item>HasIBr</item>\n\t\t\t<item>HasIdGroup</item>\n\t\t\t<item>HasIdempotents</item>\n\t\t\t<item>HasIdempotentsTom</item>\n\t\t\t<item>HasIdempotentsTomInfo</item>\n\t\t\t<item>HasIdentificationOfConjugacyClasses</item>\n\t\t\t<item>HasIdentifier</item>\n\t\t\t<item>HasIdentity</item>\n\t\t\t<item>HasIdentityMapping</item>\n\t\t\t<item>HasImageElt</item>\n\t\t\t<item>HasImageListOfTransformation</item>\n\t\t\t<item>HasImageSetOfTransformation</item>\n\t\t\t<item>HasImagesSmallestGenerators</item>\n\t\t\t<item>HasImagesSource</item>\n\t\t\t<item>HasImfRecord</item>\n\t\t\t<item>HasIndependentGeneratorsOfAbelianGroup</item>\n\t\t\t<item>HasIndependentGeneratorsOfAbelianMatrixGroup</item>\n\t\t\t<item>HasIndeterminateName</item>\n\t\t\t<item>HasIndeterminateNumberOfLaurentPolynomial</item>\n\t\t\t<item>HasIndeterminateNumberOfUnivariateLaurentPolynomial</item>\n\t\t\t<item>HasIndeterminateNumberOfUnivariateRationalFunction</item>\n\t\t\t<item>HasIndeterminateOfUnivariateRationalFunction</item>\n\t\t\t<item>HasIndeterminatesOfPolynomialRing</item>\n\t\t\t<item>HasIndexInParent</item>\n\t\t\t<item>HasIndexInWholeGroup</item>\n\t\t\t<item>HasIndicesCentralNormalSteps</item>\n\t\t\t<item>HasIndicesChiefNormalSteps</item>\n\t\t\t<item>HasIndicesEANormalSteps</item>\n\t\t\t<item>HasIndicesInvolutaryGenerators</item>\n\t\t\t<item>HasIndicesNormalSteps</item>\n\t\t\t<item>HasIndicesOfAdjointBasis</item>\n\t\t\t<item>HasIndicesPCentralNormalStepsPGroup</item>\n\t\t\t<item>HasInducedPcgsWrtFamilyPcgs</item>\n\t\t\t<item>HasInducedPcgsWrtHomePcgs</item>\n\t\t\t<item>HasInducedPcgsWrtSpecialPcgs</item>\n\t\t\t<item>HasInfoText</item>\n\t\t\t<item>HasInjectionZeroMagma</item>\n\t\t\t<item>HasInnerAutomorphismsAutomorphismGroup</item>\n\t\t\t<item>HasInt</item>\n\t\t\t<item>HasInternalRepresentative</item>\n\t\t\t<item>HasInvariantBilinearForm</item>\n\t\t\t<item>HasInvariantConjugateSubgroup</item>\n\t\t\t<item>HasInvariantForm</item>\n\t\t\t<item>HasInvariantLattice</item>\n\t\t\t<item>HasInvariantQuadraticForm</item>\n\t\t\t<item>HasInvariantSesquilinearForm</item>\n\t\t\t<item>HasInverse</item>\n\t\t\t<item>HasInverseAttr</item>\n\t\t\t<item>HasInverseClasses</item>\n\t\t\t<item>HasInverseGeneralMapping</item>\n\t\t\t<item>HasInverseImmutable</item>\n\t\t\t<item>HasIrr</item>\n\t\t\t<item>HasIrrBaumClausen</item>\n\t\t\t<item>HasIrrConlon</item>\n\t\t\t<item>HasIrrDixonSchneider</item>\n\t\t\t<item>HasIrrFacsPol</item>\n\t\t\t<item>HasIrreducibleRepresentations</item>\n\t\t\t<item>HasIsAbelian</item>\n\t\t\t<item>HasIsAbelianNumberField</item>\n\t\t\t<item>HasIsAbelianTom</item>\n\t\t\t<item>HasIsAdditiveGroupGeneralMapping</item>\n\t\t\t<item>HasIsAdditiveGroupHomomorphism</item>\n\t\t\t<item>HasIsAdditiveGroupToGroupGeneralMapping</item>\n\t\t\t<item>HasIsAdditiveGroupToGroupHomomorphism</item>\n\t\t\t<item>HasIsAdditivelyCommutative</item>\n\t\t\t<item>HasIsAlgebraGeneralMapping</item>\n\t\t\t<item>HasIsAlgebraHomomorphism</item>\n\t\t\t<item>HasIsAlgebraModule</item>\n\t\t\t<item>HasIsAlgebraWithOneGeneralMapping</item>\n\t\t\t<item>HasIsAlgebraWithOneHomomorphism</item>\n\t\t\t<item>HasIsAlternatingGroup</item>\n\t\t\t<item>HasIsAnticommutative</item>\n\t\t\t<item>HasIsAntisymmetricBinaryRelation</item>\n\t\t\t<item>HasIsAssociative</item>\n\t\t\t<item>HasIsAutomorphismGroup</item>\n\t\t\t<item>HasIsBasicWreathProductOrdering</item>\n\t\t\t<item>HasIsBergerCondition</item>\n\t\t\t<item>HasIsBijective</item>\n\t\t\t<item>HasIsBravaisGroup</item>\n\t\t\t<item>HasIsBuiltFromAdditiveMagmaWithInverses</item>\n\t\t\t<item>HasIsBuiltFromGroup</item>\n\t\t\t<item>HasIsBuiltFromMagma</item>\n\t\t\t<item>HasIsBuiltFromMagmaWithInverses</item>\n\t\t\t<item>HasIsBuiltFromMagmaWithOne</item>\n\t\t\t<item>HasIsBuiltFromMonoid</item>\n\t\t\t<item>HasIsBuiltFromSemigroup</item>\n\t\t\t<item>HasIsCanonicalBasis</item>\n\t\t\t<item>HasIsCanonicalBasisFullMatrixModule</item>\n\t\t\t<item>HasIsCanonicalBasisFullRowModule</item>\n\t\t\t<item>HasIsCanonicalBasisFullSCAlgebra</item>\n\t\t\t<item>HasIsCanonicalNiceMonomorphism</item>\n\t\t\t<item>HasIsCanonicalPcgs</item>\n\t\t\t<item>HasIsCanonicalPcgsWrtSpecialPcgs</item>\n\t\t\t<item>HasIsChainTypeGroup</item>\n\t\t\t<item>HasIsCharacter</item>\n\t\t\t<item>HasIsCharacteristicMatrixPGroup</item>\n\t\t\t<item>HasIsCommutative</item>\n\t\t\t<item>HasIsCommutativeFamily</item>\n\t\t\t<item>HasIsConfluent</item>\n\t\t\t<item>HasIsConjugatorAutomorphism</item>\n\t\t\t<item>HasIsConjugatorIsomorphism</item>\n\t\t\t<item>HasIsConstantRationalFunction</item>\n\t\t\t<item>HasIsConstantTimeAccessGeneralMapping</item>\n\t\t\t<item>HasIsCycInt</item>\n\t\t\t<item>HasIsCyclic</item>\n\t\t\t<item>HasIsCyclicTom</item>\n\t\t\t<item>HasIsCyclotomicField</item>\n\t\t\t<item>HasIsDihedralGroup</item>\n\t\t\t<item>HasIsDistributive</item>\n\t\t\t<item>HasIsDivisionRing</item>\n\t\t\t<item>HasIsDuplicateFree</item>\n\t\t\t<item>HasIsDuplicateFreeList</item>\n\t\t\t<item>HasIsElementaryAbelian</item>\n\t\t\t<item>HasIsEmpty</item>\n\t\t\t<item>HasIsEndoGeneralMapping</item>\n\t\t\t<item>HasIsEndoMapping</item>\n\t\t\t<item>HasIsEquivalenceRelation</item>\n\t\t\t<item>HasIsFFEMatrixGroupOverLargeSpace</item>\n\t\t\t<item>HasIsFamilyPcgs</item>\n\t\t\t<item>HasIsField</item>\n\t\t\t<item>HasIsFieldHomomorphism</item>\n\t\t\t<item>HasIsFinite</item>\n\t\t\t<item>HasIsFiniteDimensional</item>\n\t\t\t<item>HasIsFiniteOrdersPcgs</item>\n\t\t\t<item>HasIsFiniteSemigroupGreensRelation</item>\n\t\t\t<item>HasIsFinitelyGeneratedGroup</item>\n\t\t\t<item>HasIsFrattiniFree</item>\n\t\t\t<item>HasIsFreeMonoid</item>\n\t\t\t<item>HasIsFreeSemigroup</item>\n\t\t\t<item>HasIsFullFpAlgebra</item>\n\t\t\t<item>HasIsFullHomModule</item>\n\t\t\t<item>HasIsFullMatrixModule</item>\n\t\t\t<item>HasIsFullRowModule</item>\n\t\t\t<item>HasIsFullSCAlgebra</item>\n\t\t\t<item>HasIsFullSubgroupGLorSLRespectingBilinearForm</item>\n\t\t\t<item>HasIsFullSubgroupGLorSLRespectingQuadraticForm</item>\n\t\t\t<item>HasIsFullSubgroupGLorSLRespectingSesquilinearForm</item>\n\t\t\t<item>HasIsFullTransformationSemigroup</item>\n\t\t\t<item>HasIsGL</item>\n\t\t\t<item>HasIsGeneralLinearGroup</item>\n\t\t\t<item>HasIsGeneralizedCartanMatrix</item>\n\t\t\t<item>HasIsGeneratorsOfMagmaWithInverses</item>\n\t\t\t<item>HasIsGreensClass</item>\n\t\t\t<item>HasIsGreensDClass</item>\n\t\t\t<item>HasIsGreensDRelation</item>\n\t\t\t<item>HasIsGreensHClass</item>\n\t\t\t<item>HasIsGreensHRelation</item>\n\t\t\t<item>HasIsGreensJClass</item>\n\t\t\t<item>HasIsGreensJRelation</item>\n\t\t\t<item>HasIsGreensLClass</item>\n\t\t\t<item>HasIsGreensLRelation</item>\n\t\t\t<item>HasIsGreensRClass</item>\n\t\t\t<item>HasIsGreensRRelation</item>\n\t\t\t<item>HasIsGreensRelation</item>\n\t\t\t<item>HasIsGroupGeneralMapping</item>\n\t\t\t<item>HasIsGroupHClass</item>\n\t\t\t<item>HasIsGroupHomomorphism</item>\n\t\t\t<item>HasIsGroupOfAutomorphisms</item>\n\t\t\t<item>HasIsGroupOfAutomorphismsFiniteGroup</item>\n\t\t\t<item>HasIsGroupRing</item>\n\t\t\t<item>HasIsGroupToAdditiveGroupGeneralMapping</item>\n\t\t\t<item>HasIsGroupToAdditiveGroupHomomorphism</item>\n\t\t\t<item>HasIsHandledByNiceMonomorphism</item>\n\t\t\t<item>HasIsHasseDiagram</item>\n\t\t\t<item>HasIsHomCosetOfAdditiveElt</item>\n\t\t\t<item>HasIsHomCosetOfFp</item>\n\t\t\t<item>HasIsHomCosetOfMatrix</item>\n\t\t\t<item>HasIsHomCosetOfPerm</item>\n\t\t\t<item>HasIsHomCosetOfTuple</item>\n\t\t\t<item>HasIsIdealInParent</item>\n\t\t\t<item>HasIsIdempotent</item>\n\t\t\t<item>HasIsImpossible</item>\n\t\t\t<item>HasIsInducedFromNormalSubgroup</item>\n\t\t\t<item>HasIsInducedPcgsWrtSpecialPcgs</item>\n\t\t\t<item>HasIsInjective</item>\n\t\t\t<item>HasIsInnerAutomorphism</item>\n\t\t\t<item>HasIsIntegerMatrixGroup</item>\n\t\t\t<item>HasIsIntegralBasis</item>\n\t\t\t<item>HasIsIntegralCyclotomic</item>\n\t\t\t<item>HasIsIntegralRing</item>\n\t\t\t<item>HasIsIrreducibleCharacter</item>\n\t\t\t<item>HasIsJacobianRing</item>\n\t\t\t<item>HasIsLDistributive</item>\n\t\t\t<item>HasIsLatticeOrderBinaryRelation</item>\n\t\t\t<item>HasIsLaurentPolynomial</item>\n\t\t\t<item>HasIsLeftActedOnByDivisionRing</item>\n\t\t\t<item>HasIsLeftAlgebraModule</item>\n\t\t\t<item>HasIsLeftIdealInParent</item>\n\t\t\t<item>HasIsLeftModuleGeneralMapping</item>\n\t\t\t<item>HasIsLeftModuleHomomorphism</item>\n\t\t\t<item>HasIsLeftSemigroupCongruence</item>\n\t\t\t<item>HasIsLeftSemigroupIdeal</item>\n\t\t\t<item>HasIsLieAbelian</item>\n\t\t\t<item>HasIsLieAlgebra</item>\n\t\t\t<item>HasIsLieNilpotent</item>\n\t\t\t<item>HasIsLieSolvable</item>\n\t\t\t<item>HasIsLinearlyPrimitive</item>\n\t\t\t<item>HasIsMagmaHomomorphism</item>\n\t\t\t<item>HasIsMapping</item>\n\t\t\t<item>HasIsMatrixModule</item>\n\t\t\t<item>HasIsMinimalNonmonomial</item>\n\t\t\t<item>HasIsMonoid</item>\n\t\t\t<item>HasIsMonomialCharacter</item>\n\t\t\t<item>HasIsMonomialCharacterTable</item>\n\t\t\t<item>HasIsMonomialGroup</item>\n\t\t\t<item>HasIsMonomialMatrix</item>\n\t\t\t<item>HasIsMonomialNumber</item>\n\t\t\t<item>HasIsNaturalAlternatingGroup</item>\n\t\t\t<item>HasIsNaturalGL</item>\n\t\t\t<item>HasIsNaturalSL</item>\n\t\t\t<item>HasIsNaturalSymmetricGroup</item>\n\t\t\t<item>HasIsNearRing</item>\n\t\t\t<item>HasIsNearRingWithOne</item>\n\t\t\t<item>HasIsNilpQuotientSystem</item>\n\t\t\t<item>HasIsNilpotentCharacterTable</item>\n\t\t\t<item>HasIsNilpotentGroup</item>\n\t\t\t<item>HasIsNilpotentTom</item>\n\t\t\t<item>HasIsNonTrivial</item>\n\t\t\t<item>HasIsNoncharacteristicMatrixPGroup</item>\n\t\t\t<item>HasIsNormalBasis</item>\n\t\t\t<item>HasIsNormalForm</item>\n\t\t\t<item>HasIsNormalInParent</item>\n\t\t\t<item>HasIsNumberField</item>\n\t\t\t<item>HasIsNumeratorParentPcgsFamilyPcgs</item>\n\t\t\t<item>HasIsOne</item>\n\t\t\t<item>HasIsOrderingOnFamilyOfAssocWords</item>\n\t\t\t<item>HasIsPGroup</item>\n\t\t\t<item>HasIsPQuotientSystem</item>\n\t\t\t<item>HasIsPSL</item>\n\t\t\t<item>HasIsParentPcgsFamilyPcgs</item>\n\t\t\t<item>HasIsPartialOrderBinaryRelation</item>\n\t\t\t<item>HasIsPcgsCentralSeries</item>\n\t\t\t<item>HasIsPcgsChiefSeries</item>\n\t\t\t<item>HasIsPcgsElementaryAbelianSeries</item>\n\t\t\t<item>HasIsPcgsPCentralSeriesPGroup</item>\n\t\t\t<item>HasIsPerfectCharacterTable</item>\n\t\t\t<item>HasIsPerfectGroup</item>\n\t\t\t<item>HasIsPerfectTom</item>\n\t\t\t<item>HasIsPolycyclicGroup</item>\n\t\t\t<item>HasIsPolynomial</item>\n\t\t\t<item>HasIsPositionsList</item>\n\t\t\t<item>HasIsPreOrderBinaryRelation</item>\n\t\t\t<item>HasIsPrimeField</item>\n\t\t\t<item>HasIsPrimeOrdersPcgs</item>\n\t\t\t<item>HasIsPrimitive</item>\n\t\t\t<item>HasIsPrimitiveAffine</item>\n\t\t\t<item>HasIsPrimitiveCharacter</item>\n\t\t\t<item>HasIsPrimitiveMatrixGroup</item>\n\t\t\t<item>HasIsPseudoCanonicalBasisFullHomModule</item>\n\t\t\t<item>HasIsQuasiDihedralGroup</item>\n\t\t\t<item>HasIsQuasiPrimitive</item>\n\t\t\t<item>HasIsQuaternionGroup</item>\n\t\t\t<item>HasIsRDistributive</item>\n\t\t\t<item>HasIsRationalMatrixGroup</item>\n\t\t\t<item>HasIsRectangularTable</item>\n\t\t\t<item>HasIsReduced</item>\n\t\t\t<item>HasIsReesCongruence</item>\n\t\t\t<item>HasIsReesCongruenceSemigroup</item>\n\t\t\t<item>HasIsReesMatrixSemigroup</item>\n\t\t\t<item>HasIsReesZeroMatrixSemigroup</item>\n\t\t\t<item>HasIsReflexiveBinaryRelation</item>\n\t\t\t<item>HasIsRegular</item>\n\t\t\t<item>HasIsRegularDClass</item>\n\t\t\t<item>HasIsRegularSemigroup</item>\n\t\t\t<item>HasIsRelativelySM</item>\n\t\t\t<item>HasIsRestrictedLieAlgebra</item>\n\t\t\t<item>HasIsRightAlgebraModule</item>\n\t\t\t<item>HasIsRightIdealInParent</item>\n\t\t\t<item>HasIsRightSemigroupCongruence</item>\n\t\t\t<item>HasIsRightSemigroupIdeal</item>\n\t\t\t<item>HasIsRing</item>\n\t\t\t<item>HasIsRingGeneralMapping</item>\n\t\t\t<item>HasIsRingHomomorphism</item>\n\t\t\t<item>HasIsRingWithOne</item>\n\t\t\t<item>HasIsRingWithOneGeneralMapping</item>\n\t\t\t<item>HasIsRingWithOneHomomorphism</item>\n\t\t\t<item>HasIsRowModule</item>\n\t\t\t<item>HasIsSL</item>\n\t\t\t<item>HasIsSSortedList</item>\n\t\t\t<item>HasIsSemiEchelonized</item>\n\t\t\t<item>HasIsSemiRegular</item>\n\t\t\t<item>HasIsSemigroup</item>\n\t\t\t<item>HasIsSemigroupCongruence</item>\n\t\t\t<item>HasIsSemigroupIdeal</item>\n\t\t\t<item>HasIsSemiring</item>\n\t\t\t<item>HasIsSemiringWithOne</item>\n\t\t\t<item>HasIsSemiringWithOneAndZero</item>\n\t\t\t<item>HasIsSemiringWithZero</item>\n\t\t\t<item>HasIsShortLexOrdering</item>\n\t\t\t<item>HasIsSimpleAlgebra</item>\n\t\t\t<item>HasIsSimpleCharacterTable</item>\n\t\t\t<item>HasIsSimpleGroup</item>\n\t\t\t<item>HasIsSimpleSemigroup</item>\n\t\t\t<item>HasIsSingleValued</item>\n\t\t\t<item>HasIsSkewFieldFamily</item>\n\t\t\t<item>HasIsSmallList</item>\n\t\t\t<item>HasIsSolvableCharacterTable</item>\n\t\t\t<item>HasIsSolvableGroup</item>\n\t\t\t<item>HasIsSolvableTom</item>\n\t\t\t<item>HasIsSortedList</item>\n\t\t\t<item>HasIsSpecialLinearGroup</item>\n\t\t\t<item>HasIsSpecialPcgs</item>\n\t\t\t<item>HasIsSporadicSimpleCharacterTable</item>\n\t\t\t<item>HasIsSporadicSimpleGroup</item>\n\t\t\t<item>HasIsStabChainViaChainSubgroup</item>\n\t\t\t<item>HasIsSubgroupSL</item>\n\t\t\t<item>HasIsSubmonoidFpMonoid</item>\n\t\t\t<item>HasIsSubnormallyMonomial</item>\n\t\t\t<item>HasIsSubsemigroupFpSemigroup</item>\n\t\t\t<item>HasIsSubsemigroupReesMatrixSemigroup</item>\n\t\t\t<item>HasIsSubsemigroupReesZeroMatrixSemigroup</item>\n\t\t\t<item>HasIsSubsetLocallyFiniteGroup</item>\n\t\t\t<item>HasIsSupersolvableCharacterTable</item>\n\t\t\t<item>HasIsSupersolvableGroup</item>\n\t\t\t<item>HasIsSurjective</item>\n\t\t\t<item>HasIsSymmetricBinaryRelation</item>\n\t\t\t<item>HasIsSymmetricGroup</item>\n\t\t\t<item>HasIsTotal</item>\n\t\t\t<item>HasIsTotalOrdering</item>\n\t\t\t<item>HasIsTransformationMonoid</item>\n\t\t\t<item>HasIsTransformationSemigroup</item>\n\t\t\t<item>HasIsTransitive</item>\n\t\t\t<item>HasIsTransitiveBinaryRelation</item>\n\t\t\t<item>HasIsTranslationInvariantOrdering</item>\n\t\t\t<item>HasIsTrivial</item>\n\t\t\t<item>HasIsTwoSidedIdealInParent</item>\n\t\t\t<item>HasIsUFDFamily</item>\n\t\t\t<item>HasIsUniformMatrixGroup</item>\n\t\t\t<item>HasIsUnivariatePolynomial</item>\n\t\t\t<item>HasIsUnivariateRationalFunction</item>\n\t\t\t<item>HasIsVectorSpaceHomomorphism</item>\n\t\t\t<item>HasIsVirtualCharacter</item>\n\t\t\t<item>HasIsWeightLexOrdering</item>\n\t\t\t<item>HasIsWellFoundedOrdering</item>\n\t\t\t<item>HasIsWeylGroup</item>\n\t\t\t<item>HasIsWholeFamily</item>\n\t\t\t<item>HasIsWreathProductOrdering</item>\n\t\t\t<item>HasIsZero</item>\n\t\t\t<item>HasIsZeroGroup</item>\n\t\t\t<item>HasIsZeroMultiplicationRing</item>\n\t\t\t<item>HasIsZeroRationalFunction</item>\n\t\t\t<item>HasIsZeroSimpleSemigroup</item>\n\t\t\t<item>HasIsZeroSquaredRing</item>\n\t\t\t<item>HasIsomorphismFpAlgebra</item>\n\t\t\t<item>HasIsomorphismFpFLMLOR</item>\n\t\t\t<item>HasIsomorphismFpGroup</item>\n\t\t\t<item>HasIsomorphismFpMonoid</item>\n\t\t\t<item>HasIsomorphismFpSemigroup</item>\n\t\t\t<item>HasIsomorphismMatrixAlgebra</item>\n\t\t\t<item>HasIsomorphismMatrixFLMLOR</item>\n\t\t\t<item>HasIsomorphismPcGroup</item>\n\t\t\t<item>HasIsomorphismPermGroup</item>\n\t\t\t<item>HasIsomorphismReesMatrixSemigroup</item>\n\t\t\t<item>HasIsomorphismRefinedPcGroup</item>\n\t\t\t<item>HasIsomorphismSCAlgebra</item>\n\t\t\t<item>HasIsomorphismSCFLMLOR</item>\n\t\t\t<item>HasIsomorphismSimplifiedFpGroup</item>\n\t\t\t<item>HasIsomorphismSpecialPcGroup</item>\n\t\t\t<item>HasIsomorphismTransformationSemigroup</item>\n\t\t\t<item>HasJenningsLieAlgebra</item>\n\t\t\t<item>HasJenningsSeries</item>\n\t\t\t<item>HasJordanDecomposition</item>\n\t\t\t<item>HasKernelOfAdditiveGeneralMapping</item>\n\t\t\t<item>HasKernelOfCharacter</item>\n\t\t\t<item>HasKernelOfMultiplicativeGeneralMapping</item>\n\t\t\t<item>HasKernelOfTransformation</item>\n\t\t\t<item>HasKillingMatrix</item>\n\t\t\t<item>HasKnowsHowToDecompose</item>\n\t\t\t<item>HasLClassOfHClass</item>\n\t\t\t<item>HasLGFirst</item>\n\t\t\t<item>HasLGHeads</item>\n\t\t\t<item>HasLGLayers</item>\n\t\t\t<item>HasLGLength</item>\n\t\t\t<item>HasLGTails</item>\n\t\t\t<item>HasLGWeights</item>\n\t\t\t<item>HasLargestElementGroup</item>\n\t\t\t<item>HasLargestMovedPoint</item>\n\t\t\t<item>HasLargestMovedPointPerm</item>\n\t\t\t<item>HasLatticeGeneratorsInUEA</item>\n\t\t\t<item>HasLatticeSubgroups</item>\n\t\t\t<item>HasLeadCoeffsIGS</item>\n\t\t\t<item>HasLeftActingAlgebra</item>\n\t\t\t<item>HasLeftActingDomain</item>\n\t\t\t<item>HasLeftActingGroup</item>\n\t\t\t<item>HasLeftActingRingOfIdeal</item>\n\t\t\t<item>HasLeftDerivations</item>\n\t\t\t<item>HasLength</item>\n\t\t\t<item>HasLengthsTom</item>\n\t\t\t<item>HasLessThanFunction</item>\n\t\t\t<item>HasLessThanOrEqualFunction</item>\n\t\t\t<item>HasLetterRepWordsLessFunc</item>\n\t\t\t<item>HasLevelsOfGenerators</item>\n\t\t\t<item>HasLeviMalcevDecomposition</item>\n\t\t\t<item>HasLieAlgebraByDomain</item>\n\t\t\t<item>HasLieCenter</item>\n\t\t\t<item>HasLieCentralizerInParent</item>\n\t\t\t<item>HasLieCentre</item>\n\t\t\t<item>HasLieDerivedSeries</item>\n\t\t\t<item>HasLieDerivedSubalgebra</item>\n\t\t\t<item>HasLieFamily</item>\n\t\t\t<item>HasLieLowerCentralSeries</item>\n\t\t\t<item>HasLieNilRadical</item>\n\t\t\t<item>HasLieNormalizerInParent</item>\n\t\t\t<item>HasLieObject</item>\n\t\t\t<item>HasLieSolvableRadical</item>\n\t\t\t<item>HasLieUpperCentralSeries</item>\n\t\t\t<item>HasLinearActionBasis</item>\n\t\t\t<item>HasLinearCharacters</item>\n\t\t\t<item>HasLinesOfStraightLineProgram</item>\n\t\t\t<item>HasLongestWeylWordPerm</item>\n\t\t\t<item>HasLowerCentralSeriesOfGroup</item>\n\t\t\t<item>HasMagmaGeneratorsOfFamily</item>\n\t\t\t<item>HasMappingGeneratorsImages</item>\n\t\t\t<item>HasMappingOfWhichItIsAsGGMBI</item>\n\t\t\t<item>HasMarksTom</item>\n\t\t\t<item>HasMatTom</item>\n\t\t\t<item>HasMatrixByBlockMatrix</item>\n\t\t\t<item>HasMatrixDimension</item>\n\t\t\t<item>HasMaximalAbelianQuotient</item>\n\t\t\t<item>HasMaximalBlocksAttr</item>\n\t\t\t<item>HasMaximalNormalSubgroups</item>\n\t\t\t<item>HasMaximalSubgroupClassReps</item>\n\t\t\t<item>HasMaximalSubgroups</item>\n\t\t\t<item>HasMaximalSubgroupsLattice</item>\n\t\t\t<item>HasMaximalSubgroupsTom</item>\n\t\t\t<item>HasMinimalBlockDimension</item>\n\t\t\t<item>HasMinimalGeneratingSet</item>\n\t\t\t<item>HasMinimalNormalSubgroups</item>\n\t\t\t<item>HasMinimalStabChain</item>\n\t\t\t<item>HasMinimalSupergroupsLattice</item>\n\t\t\t<item>HasMinimizedBombieriNorm</item>\n\t\t\t<item>HasModuleOfExtension</item>\n\t\t\t<item>HasModulusOfZmodnZObj</item>\n\t\t\t<item>HasMoebiusTom</item>\n\t\t\t<item>HasMolienSeriesInfo</item>\n\t\t\t<item>HasMonoidOfRewritingSystem</item>\n\t\t\t<item>HasMonomialComparisonFunction</item>\n\t\t\t<item>HasMonomialExtrepComparisonFun</item>\n\t\t\t<item>HasMovedPoints</item>\n\t\t\t<item>HasMultiplicationTable</item>\n\t\t\t<item>HasMultiplicativeNeutralElement</item>\n\t\t\t<item>HasMultiplicativeZero</item>\n\t\t\t<item>HasName</item>\n\t\t\t<item>HasNameIsomorphismClass</item>\n\t\t\t<item>HasNamesLibTom</item>\n\t\t\t<item>HasNamesOfFusionSources</item>\n\t\t\t<item>HasNaturalCharacter</item>\n\t\t\t<item>HasNaturalHomomorphismByNormalSubgroupNCInParent</item>\n\t\t\t<item>HasNaturalHomomorphismsPool</item>\n\t\t\t<item>HasNegativeRootVectors</item>\n\t\t\t<item>HasNegativeRoots</item>\n\t\t\t<item>HasNestingDepthA</item>\n\t\t\t<item>HasNestingDepthM</item>\n\t\t\t<item>HasNiceAlgebraMonomorphism</item>\n\t\t\t<item>HasNiceBasis</item>\n\t\t\t<item>HasNiceFreeLeftModule</item>\n\t\t\t<item>HasNiceFreeLeftModuleInfo</item>\n\t\t\t<item>HasNiceMonomorphism</item>\n\t\t\t<item>HasNiceNormalFormByExtRepFunction</item>\n\t\t\t<item>HasNiceObject</item>\n\t\t\t<item>HasNilpotencyClassOfGroup</item>\n\t\t\t<item>HasNilpotentClassTwoElement</item>\n\t\t\t<item>HasNonLieNilpotentElement</item>\n\t\t\t<item>HasNonNilpotentElement</item>\n\t\t\t<item>HasNorm</item>\n\t\t\t<item>HasNormalBase</item>\n\t\t\t<item>HasNormalClosureInParent</item>\n\t\t\t<item>HasNormalMaximalSubgroups</item>\n\t\t\t<item>HasNormalSeriesByPcgs</item>\n\t\t\t<item>HasNormalSubgroupClassesInfo</item>\n\t\t\t<item>HasNormalSubgroups</item>\n\t\t\t<item>HasNormalizerInGLnZ</item>\n\t\t\t<item>HasNormalizerInGLnZBravaisGroup</item>\n\t\t\t<item>HasNormalizerInHomePcgs</item>\n\t\t\t<item>HasNormalizerInParent</item>\n\t\t\t<item>HasNormalizersTom</item>\n\t\t\t<item>HasNormedRowVector</item>\n\t\t\t<item>HasNormedRowVectors</item>\n\t\t\t<item>HasNormedVectors</item>\n\t\t\t<item>HasNotifiedFusionsOfLibTom</item>\n\t\t\t<item>HasNotifiedFusionsToLibTom</item>\n\t\t\t<item>HasNrConjugacyClasses</item>\n\t\t\t<item>HasNrInputsOfStraightLineProgram</item>\n\t\t\t<item>HasNrMovedPoints</item>\n\t\t\t<item>HasNrMovedPointsPerm</item>\n\t\t\t<item>HasNrSubsTom</item>\n\t\t\t<item>HasNrSyllables</item>\n\t\t\t<item>HasNullAlgebra</item>\n\t\t\t<item>HasNullspaceIntMat</item>\n\t\t\t<item>HasNullspaceMat</item>\n\t\t\t<item>HasNumberGeneratorsOfRws</item>\n\t\t\t<item>HasNumberSyllables</item>\n\t\t\t<item>HasNumeratorOfModuloPcgs</item>\n\t\t\t<item>HasNumeratorOfRationalFunction</item>\n\t\t\t<item>HasONanScottType</item>\n\t\t\t<item>HasOccuringVariableIndices</item>\n\t\t\t<item>HasOmegaAndLowerPCentralSeries</item>\n\t\t\t<item>HasOmegaSeries</item>\n\t\t\t<item>HasOne</item>\n\t\t\t<item>HasOneAttr</item>\n\t\t\t<item>HasOneImmutable</item>\n\t\t\t<item>HasOneOfPcgs</item>\n\t\t\t<item>HasOperatorOfExternalSet</item>\n\t\t\t<item>HasOrbitGeneratorsOfGroup</item>\n\t\t\t<item>HasOrbitLengths</item>\n\t\t\t<item>HasOrbitLengthsDomain</item>\n\t\t\t<item>HasOrbitStabilizingParentGroup</item>\n\t\t\t<item>HasOrbits</item>\n\t\t\t<item>HasOrbitsDomain</item>\n\t\t\t<item>HasOrder</item>\n\t\t\t<item>HasOrderingOfRewritingSystem</item>\n\t\t\t<item>HasOrderingOnGenerators</item>\n\t\t\t<item>HasOrderingsFamily</item>\n\t\t\t<item>HasOrdersClassRepresentatives</item>\n\t\t\t<item>HasOrdersTom</item>\n\t\t\t<item>HasOrdinaryCharacterTable</item>\n\t\t\t<item>HasOrthogonalSpaceInFullRowSpace</item>\n\t\t\t<item>HasPCentralLieAlgebra</item>\n\t\t\t<item>HasPCentralNormalSeriesByPcgsPGroup</item>\n\t\t\t<item>HasPClassPGroup</item>\n\t\t\t<item>HasPSLDegree</item>\n\t\t\t<item>HasPSLUnderlyingField</item>\n\t\t\t<item>HasParent</item>\n\t\t\t<item>HasParentAttr</item>\n\t\t\t<item>HasParentPcgs</item>\n\t\t\t<item>HasPartialClosureOfCongruence</item>\n\t\t\t<item>HasPartialOrderOfHasseDiagram</item>\n\t\t\t<item>HasPcGroupWithPcgs</item>\n\t\t\t<item>HasPcSeries</item>\n\t\t\t<item>HasPcgs</item>\n\t\t\t<item>HasPcgsCentralSeries</item>\n\t\t\t<item>HasPcgsChiefSeries</item>\n\t\t\t<item>HasPcgsElementaryAbelianSeries</item>\n\t\t\t<item>HasPcgsPCentralSeriesPGroup</item>\n\t\t\t<item>HasPerfectIdentification</item>\n\t\t\t<item>HasPerfectResiduum</item>\n\t\t\t<item>HasPermutationTom</item>\n\t\t\t<item>HasPositiveRootVectors</item>\n\t\t\t<item>HasPositiveRoots</item>\n\t\t\t<item>HasPositiveRootsAsWeights</item>\n\t\t\t<item>HasPowerS</item>\n\t\t\t<item>HasPowerSubalgebraSeries</item>\n\t\t\t<item>HasPreBasis</item>\n\t\t\t<item>HasPreImagesRange</item>\n\t\t\t<item>HasPreferredGenerators</item>\n\t\t\t<item>HasPrefrattiniSubgroup</item>\n\t\t\t<item>HasPresentation</item>\n\t\t\t<item>HasPrimaryGeneratorWords</item>\n\t\t\t<item>HasPrimeField</item>\n\t\t\t<item>HasPrimePGroup</item>\n\t\t\t<item>HasPrimePowerComponents</item>\n\t\t\t<item>HasPrimitiveElement</item>\n\t\t\t<item>HasPrimitiveIdentification</item>\n\t\t\t<item>HasPrimitiveRoot</item>\n\t\t\t<item>HasProjectiveOrder</item>\n\t\t\t<item>HasPseudoRandomSeed</item>\n\t\t\t<item>HasPthPowerImages</item>\n\t\t\t<item>HasQuasiDihedralGenerators</item>\n\t\t\t<item>HasQuaternionGenerators</item>\n\t\t\t<item>HasQuotientGroup</item>\n\t\t\t<item>HasQuotientGroupHom</item>\n\t\t\t<item>HasQuotientSemigroupCongruence</item>\n\t\t\t<item>HasQuotientSemigroupHomomorphism</item>\n\t\t\t<item>HasQuotientSemigroupPreimage</item>\n\t\t\t<item>HasRClassOfHClass</item>\n\t\t\t<item>HasRadicalGroup</item>\n\t\t\t<item>HasRadicalOfAlgebra</item>\n\t\t\t<item>HasRange</item>\n\t\t\t<item>HasRankAction</item>\n\t\t\t<item>HasRankMat</item>\n\t\t\t<item>HasRankOfTransformation</item>\n\t\t\t<item>HasRankPGroup</item>\n\t\t\t<item>HasRat</item>\n\t\t\t<item>HasRationalClasses</item>\n\t\t\t<item>HasRationalFunctionsFamily</item>\n\t\t\t<item>HasRationalizedMat</item>\n\t\t\t<item>HasRealClasses</item>\n\t\t\t<item>HasRecNames</item>\n\t\t\t<item>HasReducedConfluentRewritingSystem</item>\n\t\t\t<item>HasReesCongruenceOfSemigroupIdeal</item>\n\t\t\t<item>HasReesZeroMatrixSemigroupElementIsZero</item>\n\t\t\t<item>HasRefinedPcGroup</item>\n\t\t\t<item>HasRegularActionHomomorphism</item>\n\t\t\t<item>HasRelationsOfFpMonoid</item>\n\t\t\t<item>HasRelationsOfFpSemigroup</item>\n\t\t\t<item>HasRelativeOrders</item>\n\t\t\t<item>HasRelatorsOfFpAlgebra</item>\n\t\t\t<item>HasRelatorsOfFpGroup</item>\n\t\t\t<item>HasRepresentative</item>\n\t\t\t<item>HasRepresentativeSmallest</item>\n\t\t\t<item>HasRepresentativesContainedRightCosets</item>\n\t\t\t<item>HasRepresentativesMinimalBlocksAttr</item>\n\t\t\t<item>HasRepresentativesPerfectSubgroups</item>\n\t\t\t<item>HasRepresentativesSimpleSubgroups</item>\n\t\t\t<item>HasRespectsAddition</item>\n\t\t\t<item>HasRespectsAdditiveInverses</item>\n\t\t\t<item>HasRespectsInverses</item>\n\t\t\t<item>HasRespectsMultiplication</item>\n\t\t\t<item>HasRespectsOne</item>\n\t\t\t<item>HasRespectsScalarMultiplication</item>\n\t\t\t<item>HasRespectsZero</item>\n\t\t\t<item>HasRightActingAlgebra</item>\n\t\t\t<item>HasRightActingDomain</item>\n\t\t\t<item>HasRightActingGroup</item>\n\t\t\t<item>HasRightActingRingOfIdeal</item>\n\t\t\t<item>HasRightDerivations</item>\n\t\t\t<item>HasRightTransversalInParent</item>\n\t\t\t<item>HasRootOfDefiningPolynomial</item>\n\t\t\t<item>HasRootSystem</item>\n\t\t\t<item>HasRowIndexOfReesMatrixSemigroupElement</item>\n\t\t\t<item>HasRowIndexOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>HasRowsOfReesMatrixSemigroup</item>\n\t\t\t<item>HasRowsOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>HasRules</item>\n\t\t\t<item>HasSLDegree</item>\n\t\t\t<item>HasSLUnderlyingField</item>\n\t\t\t<item>HasSandwichMatrixOfReesMatrixSemigroup</item>\n\t\t\t<item>HasSandwichMatrixOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>HasSemiEchelonBasis</item>\n\t\t\t<item>HasSemiEchelonMat</item>\n\t\t\t<item>HasSemiEchelonMatTransformation</item>\n\t\t\t<item>HasSemiSimpleType</item>\n\t\t\t<item>HasSemidirectFactorsOfGroup</item>\n\t\t\t<item>HasSemidirectProductInfo</item>\n\t\t\t<item>HasSemigroupOfRewritingSystem</item>\n\t\t\t<item>HasSiftFunction</item>\n\t\t\t<item>HasSiftGroup</item>\n\t\t\t<item>HasSignPerm</item>\n\t\t\t<item>HasSimpleSystem</item>\n\t\t\t<item>HasSimsNo</item>\n\t\t\t<item>HasSize</item>\n\t\t\t<item>HasSizesCentralizers</item>\n\t\t\t<item>HasSizesConjugacyClasses</item>\n\t\t\t<item>HasSmallGeneratingSet</item>\n\t\t\t<item>HasSmallestGeneratorPerm</item>\n\t\t\t<item>HasSmallestMovedPoint</item>\n\t\t\t<item>HasSmallestMovedPointPerm</item>\n\t\t\t<item>HasSocle</item>\n\t\t\t<item>HasSocleComplement</item>\n\t\t\t<item>HasSocleDimensions</item>\n\t\t\t<item>HasSocleTypePrimitiveGroup</item>\n\t\t\t<item>HasSortingPerm</item>\n\t\t\t<item>HasSource</item>\n\t\t\t<item>HasSparseCartanMatrix</item>\n\t\t\t<item>HasSpecialPcgs</item>\n\t\t\t<item>HasSplittingField</item>\n\t\t\t<item>HasStabChainImmutable</item>\n\t\t\t<item>HasStabChainMutable</item>\n\t\t\t<item>HasStabChainOptions</item>\n\t\t\t<item>HasStabilizerOfExternalSet</item>\n\t\t\t<item>HasStandardGeneratorsInfo</item>\n\t\t\t<item>HasStoredExcludedOrders</item>\n\t\t\t<item>HasStoredGroebnerBasis</item>\n\t\t\t<item>HasStraightLineProgElmType</item>\n\t\t\t<item>HasStraightLineProgramsTom</item>\n\t\t\t<item>HasString</item>\n\t\t\t<item>HasStructureConstantsTable</item>\n\t\t\t<item>HasStructureDescription</item>\n\t\t\t<item>HasSubdirectProductInfo</item>\n\t\t\t<item>HasSubfields</item>\n\t\t\t<item>HasSubnormalSeriesInParent</item>\n\t\t\t<item>HasSubsTom</item>\n\t\t\t<item>HasSubspaces</item>\n\t\t\t<item>HasSubspacesAll</item>\n\t\t\t<item>HasSuccessors</item>\n\t\t\t<item>HasSupersolvableResiduum</item>\n\t\t\t<item>HasSurjectiveActionHomomorphismAttr</item>\n\t\t\t<item>HasSylowSystem</item>\n\t\t\t<item>HasSymmetricDegree</item>\n\t\t\t<item>HasSymmetricParentGroup</item>\n\t\t\t<item>HasTableOfMarks</item>\n\t\t\t<item>HasTestMonomial</item>\n\t\t\t<item>HasTestMonomialQuick</item>\n\t\t\t<item>HasTestQuasiPrimitive</item>\n\t\t\t<item>HasTestRelativelySM</item>\n\t\t\t<item>HasTestSubnormallyMonomial</item>\n\t\t\t<item>HasTietzeOrigin</item>\n\t\t\t<item>HasTrace</item>\n\t\t\t<item>HasTranformsOneIntoZero</item>\n\t\t\t<item>HasTransformationRepresentation</item>\n\t\t\t<item>HasTransformsAdditionIntoMultiplication</item>\n\t\t\t<item>HasTransformsAdditiveInversesIntoInverses</item>\n\t\t\t<item>HasTransformsInversesIntoAdditiveInverses</item>\n\t\t\t<item>HasTransformsMultiplicationIntoAddition</item>\n\t\t\t<item>HasTransformsZeroIntoOne</item>\n\t\t\t<item>HasTransitiveIdentification</item>\n\t\t\t<item>HasTransitivity</item>\n\t\t\t<item>HasTransposedMat</item>\n\t\t\t<item>HasTransposedMatAttr</item>\n\t\t\t<item>HasTransposedMatImmutable</item>\n\t\t\t<item>HasTransposedMatrixGroup</item>\n\t\t\t<item>HasTransversal</item>\n\t\t\t<item>HasTriangulizedNullspaceMat</item>\n\t\t\t<item>HasTrivialCharacter</item>\n\t\t\t<item>HasTrivialSubFLMLOR</item>\n\t\t\t<item>HasTrivialSubadditiveMagmaWithZero</item>\n\t\t\t<item>HasTrivialSubalgebra</item>\n\t\t\t<item>HasTrivialSubgroup</item>\n\t\t\t<item>HasTrivialSubmagmaWithOne</item>\n\t\t\t<item>HasTrivialSubmodule</item>\n\t\t\t<item>HasTrivialSubmonoid</item>\n\t\t\t<item>HasTrivialSubnearAdditiveMagmaWithZero</item>\n\t\t\t<item>HasTrivialSubspace</item>\n\t\t\t<item>HasTwoClosure</item>\n\t\t\t<item>HasTzOptions</item>\n\t\t\t<item>HasTzRules</item>\n\t\t\t<item>HasUnderlyingCharacterTable</item>\n\t\t\t<item>HasUnderlyingCharacteristic</item>\n\t\t\t<item>HasUnderlyingCollection</item>\n\t\t\t<item>HasUnderlyingElementOfReesMatrixSemigroupElement</item>\n\t\t\t<item>HasUnderlyingElementOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>HasUnderlyingExternalSet</item>\n\t\t\t<item>HasUnderlyingFamily</item>\n\t\t\t<item>HasUnderlyingField</item>\n\t\t\t<item>HasUnderlyingGeneralMapping</item>\n\t\t\t<item>HasUnderlyingGroup</item>\n\t\t\t<item>HasUnderlyingLeftModule</item>\n\t\t\t<item>HasUnderlyingLieAlgebra</item>\n\t\t\t<item>HasUnderlyingMagma</item>\n\t\t\t<item>HasUnderlyingRelation</item>\n\t\t\t<item>HasUnderlyingSemigroupOfReesMatrixSemigroup</item>\n\t\t\t<item>HasUnderlyingSemigroupOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>HasUnderlyingVectorSpace</item>\n\t\t\t<item>HasUnits</item>\n\t\t\t<item>HasUniversalEnvelopingAlgebra</item>\n\t\t\t<item>HasUpperActingDomain</item>\n\t\t\t<item>HasUpperCentralSeriesOfGroup</item>\n\t\t\t<item>HasValuesOfClassFunction</item>\n\t\t\t<item>HasWeightOfGenerators</item>\n\t\t\t<item>HasWeightsTom</item>\n\t\t\t<item>HasWeylGroup</item>\n\t\t\t<item>HasWreathProductInfo</item>\n\t\t\t<item>HasZClassRepsQClass</item>\n\t\t\t<item>HasZero</item>\n\t\t\t<item>HasZeroAttr</item>\n\t\t\t<item>HasZeroCoefficient</item>\n\t\t\t<item>HasZeroImmutable</item>\n\t\t\t<item>HasZuppos</item>\n\t\t\t<item>HashDictAddDictionary</item>\n\t\t\t<item>HashFunct</item>\n\t\t\t<item>HashKeyBag</item>\n\t\t\t<item>HashKeyEnumerator</item>\n\t\t\t<item>HashTable</item>\n\t\t\t<item>HasnpeGL</item>\n\t\t\t<item>HasnpePSL</item>\n\t\t\t<item>HasnpeSL</item>\n\t\t\t<item>HasseDiagramBinaryRelation</item>\n\t\t\t<item>HeadPcElementByNumber</item>\n\t\t\t<item>HeadsInfoOfSemiEchelonizedMat</item>\n\t\t\t<item>HeadsInfoOfSemiEchelonizedMats</item>\n\t\t\t<item>HenselBound</item>\n\t\t\t<item>HermiteNormalFormIntegerMat</item>\n\t\t\t<item>HermiteNormalFormIntegerMatTransform</item>\n\t\t\t<item>HermiteNormalFormIntegerMatTransforms</item>\n\t\t\t<item>HeuGcdIntPolsCoeffs</item>\n\t\t\t<item>HeuGcdIntPolsExtRep</item>\n\t\t\t<item>HeuristicCancelPolynomialsExtRep</item>\n\t\t\t<item>HexBlistSetup</item>\n\t\t\t<item>HexStringBlist</item>\n\t\t\t<item>HexStringBlistEncode</item>\n\t\t\t<item>HexStringInt</item>\n\t\t\t<item>HideGlobalVariables</item>\n\t\t\t<item>HighestWeightModule</item>\n\t\t\t<item>HirschLength</item>\n\t\t\t<item>Hom</item>\n\t\t\t<item>HomCoset</item>\n\t\t\t<item>HomCosetFamily</item>\n\t\t\t<item>HomCosetWithImage</item>\n\t\t\t<item>HomFromFree</item>\n\t\t\t<item>HomFromFreeOfBasicImageGroup</item>\n\t\t\t<item>HomTransversal</item>\n\t\t\t<item>HomeEnumerator</item>\n\t\t\t<item>HomePcgs</item>\n\t\t\t<item>HomomorphicCanonicalPcgs</item>\n\t\t\t<item>HomomorphicInducedPcgs</item>\n\t\t\t<item>Homomorphism</item>\n\t\t\t<item>HomomorphismFactorSemigroup</item>\n\t\t\t<item>HomomorphismFactorSemigroupByClosure</item>\n\t\t\t<item>HomomorphismQuotientSemigroup</item>\n\t\t\t<item>HomomorphismTransformationSemigroup</item>\n\t\t\t<item>HomomorphismsSeries</item>\n\t\t\t<item>HumanReadableDefinition</item>\n\t\t\t<item>IBr</item>\n\t\t\t<item>IMFList</item>\n\t\t\t<item>IMFLoad</item>\n\t\t\t<item>IMFRec</item>\n\t\t\t<item>IdFunc</item>\n\t\t\t<item>IdGroup</item>\n\t\t\t<item>IdSmallGroup</item>\n\t\t\t<item>Ideal</item>\n\t\t\t<item>IdealByGenerators</item>\n\t\t\t<item>IdealByGeneratorsForLieAlgebra</item>\n\t\t\t<item>IdealNC</item>\n\t\t\t<item>Idempotents</item>\n\t\t\t<item>IdempotentsTom</item>\n\t\t\t<item>IdempotentsTomInfo</item>\n\t\t\t<item>IdentificationGenericGroup</item>\n\t\t\t<item>IdentificationOfConjugacyClasses</item>\n\t\t\t<item>IdentificationPermGroup</item>\n\t\t\t<item>IdentificationSolvableGroup</item>\n\t\t\t<item>Identifier</item>\n\t\t\t<item>IdentifierLetters</item>\n\t\t\t<item>Identity</item>\n\t\t\t<item>IdentityBinaryRelation</item>\n\t\t\t<item>IdentityFromSCTable</item>\n\t\t\t<item>IdentityMapping</item>\n\t\t\t<item>IdentityMat</item>\n\t\t\t<item>IdentityTransformation</item>\n\t\t\t<item>IdsOfAllGroups</item>\n\t\t\t<item>IdsOfAllSmallGroups</item>\n\t\t\t<item>Ignore</item>\n\t\t\t<item>Image</item>\n\t\t\t<item>ImageElm</item>\n\t\t\t<item>ImageElmActionHomomorphism</item>\n\t\t\t<item>ImageElt</item>\n\t\t\t<item>ImageGroup</item>\n\t\t\t<item>ImageInWord</item>\n\t\t\t<item>ImageKernelBlocksHomomorphism</item>\n\t\t\t<item>ImageListOfTransformation</item>\n\t\t\t<item>ImageMat</item>\n\t\t\t<item>ImageOnAbelianCSPG</item>\n\t\t\t<item>ImageSetOfTransformation</item>\n\t\t\t<item>ImageSiftedBaseImage</item>\n\t\t\t<item>ImageUnderWord</item>\n\t\t\t<item>Images</item>\n\t\t\t<item>ImagesElm</item>\n\t\t\t<item>ImagesListOfBinaryRelation</item>\n\t\t\t<item>ImagesRepresentative</item>\n\t\t\t<item>ImagesRepresentativeGMBIByElementsList</item>\n\t\t\t<item>ImagesSet</item>\n\t\t\t<item>ImagesSmallestGenerators</item>\n\t\t\t<item>ImagesSource</item>\n\t\t\t<item>ImfInvariants</item>\n\t\t\t<item>ImfMatrixGroup</item>\n\t\t\t<item>ImfNumberQClasses</item>\n\t\t\t<item>ImfNumberQQClasses</item>\n\t\t\t<item>ImfNumberZClasses</item>\n\t\t\t<item>ImfPositionNumber</item>\n\t\t\t<item>ImfRecord</item>\n\t\t\t<item>ImgElmSLP</item>\n\t\t\t<item>ImgElmSLPNonrecursive</item>\n\t\t\t<item>ImmediateImplicationsIdentityMapping</item>\n\t\t\t<item>ImmediateImplicationsZeroMapping</item>\n\t\t\t<item>Immutable</item>\n\t\t\t<item>ImmutableBasis</item>\n\t\t\t<item>ImmutableMatrix</item>\n\t\t\t<item>ImproveActionDegreeByBlocks</item>\n\t\t\t<item>ImproveMaps</item>\n\t\t\t<item>ImproveOperationDegreeByBlocks</item>\n\t\t\t<item>InParentFOA</item>\n\t\t\t<item>IncorporateCentralRelations</item>\n\t\t\t<item>IncreaseCounter</item>\n\t\t\t<item>IndPcgsWrtSpecFromFamOrHome</item>\n\t\t\t<item>IndependentGeneratorsAbelianPPermGroup</item>\n\t\t\t<item>IndependentGeneratorsOfAbelianGroup</item>\n\t\t\t<item>IndependentGeneratorsOfAbelianMatrixGroup</item>\n\t\t\t<item>Indeterminate</item>\n\t\t\t<item>IndeterminateName</item>\n\t\t\t<item>IndeterminateNumberOfLaurentPolynomial</item>\n\t\t\t<item>IndeterminateNumberOfUnivariateLaurentPolynomial</item>\n\t\t\t<item>IndeterminateNumberOfUnivariateRationalFunction</item>\n\t\t\t<item>IndeterminateOfLaurentPolynomial</item>\n\t\t\t<item>IndeterminateOfUnivariateRationalFunction</item>\n\t\t\t<item>Indeterminateness</item>\n\t\t\t<item>IndeterminatenessInfo</item>\n\t\t\t<item>IndeterminatesOfPolynomialRing</item>\n\t\t\t<item>Index</item>\n\t\t\t<item>IndexCosetTab</item>\n\t\t\t<item>IndexInParent</item>\n\t\t\t<item>IndexInWholeGroup</item>\n\t\t\t<item>IndexNC</item>\n\t\t\t<item>IndexOp</item>\n\t\t\t<item>Indicator</item>\n\t\t\t<item>IndicatorOp</item>\n\t\t\t<item>IndicesCentralNormalSteps</item>\n\t\t\t<item>IndicesChiefNormalSteps</item>\n\t\t\t<item>IndicesEANormalSteps</item>\n\t\t\t<item>IndicesInvolutaryGenerators</item>\n\t\t\t<item>IndicesNormalSteps</item>\n\t\t\t<item>IndicesOfAdjointBasis</item>\n\t\t\t<item>IndicesPCentralNormalStepsPGroup</item>\n\t\t\t<item>IndicesStabChain</item>\n\t\t\t<item>Indirected</item>\n\t\t\t<item>Induced</item>\n\t\t\t<item>InducedActionAutGroup</item>\n\t\t\t<item>InducedActionFactor</item>\n\t\t\t<item>InducedAutomorphism</item>\n\t\t\t<item>InducedClassFunction</item>\n\t\t\t<item>InducedClassFunctions</item>\n\t\t\t<item>InducedClassFunctionsByFusionMap</item>\n\t\t\t<item>InducedCyclic</item>\n\t\t\t<item>InducedGModule</item>\n\t\t\t<item>InducedLinearAction</item>\n\t\t\t<item>InducedModule</item>\n\t\t\t<item>InducedModuleByFieldReduction</item>\n\t\t\t<item>InducedPcgs</item>\n\t\t\t<item>InducedPcgsByGenerators</item>\n\t\t\t<item>InducedPcgsByGeneratorsNC</item>\n\t\t\t<item>InducedPcgsByGeneratorsWithImages</item>\n\t\t\t<item>InducedPcgsByPcSequence</item>\n\t\t\t<item>InducedPcgsByPcSequenceAndGenerators</item>\n\t\t\t<item>InducedPcgsByPcSequenceNC</item>\n\t\t\t<item>InducedPcgsWrtFamilyPcgs</item>\n\t\t\t<item>InducedPcgsWrtHomePcgs</item>\n\t\t\t<item>InducedPcgsWrtSpecialPcgs</item>\n\t\t\t<item>InducedRepFpGroup</item>\n\t\t\t<item>InducedRepresentation</item>\n\t\t\t<item>InducedRepresentationImagesRepresentative</item>\n\t\t\t<item>InduciblePairs</item>\n\t\t\t<item>InductionScheme</item>\n\t\t\t<item>Inequalities</item>\n\t\t\t<item>InertiaSubgroup</item>\n\t\t\t<item>InfiniteListOfGenerators</item>\n\t\t\t<item>InfiniteListOfNames</item>\n\t\t\t<item>Inflated</item>\n\t\t\t<item>Info</item>\n\t\t\t<item>InfoAction</item>\n\t\t\t<item>InfoAlgebra</item>\n\t\t\t<item>InfoAttributes</item>\n\t\t\t<item>InfoAutGrp</item>\n\t\t\t<item>InfoBasicImage</item>\n\t\t\t<item>InfoBckt</item>\n\t\t\t<item>InfoChain</item>\n\t\t\t<item>InfoCharacterTable</item>\n\t\t\t<item>InfoClassFamily</item>\n\t\t\t<item>InfoClasses</item>\n\t\t\t<item>InfoCoh</item>\n\t\t\t<item>InfoCompPairs</item>\n\t\t\t<item>InfoComplement</item>\n\t\t\t<item>InfoConfluence</item>\n\t\t\t<item>InfoCoset</item>\n\t\t\t<item>InfoData</item>\n\t\t\t<item>InfoDebug</item>\n\t\t\t<item>InfoDecision</item>\n\t\t\t<item>InfoDoPrint</item>\n\t\t\t<item>InfoExtReps</item>\n\t\t\t<item>InfoFactor</item>\n\t\t\t<item>InfoFpGroup</item>\n\t\t\t<item>InfoGalois</item>\n\t\t\t<item>InfoGlobal</item>\n\t\t\t<item>InfoGroebner</item>\n\t\t\t<item>InfoGroup</item>\n\t\t\t<item>InfoHash</item>\n\t\t\t<item>InfoHashTables</item>\n\t\t\t<item>InfoHomClass</item>\n\t\t\t<item>InfoIdgroup</item>\n\t\t\t<item>InfoImf</item>\n\t\t\t<item>InfoKnuthBendix</item>\n\t\t\t<item>InfoLattice</item>\n\t\t\t<item>InfoLevel</item>\n\t\t\t<item>InfoMatInt</item>\n\t\t\t<item>InfoMatOrb</item>\n\t\t\t<item>InfoMatrix</item>\n\t\t\t<item>InfoMeatAxe</item>\n\t\t\t<item>InfoMethodSelection</item>\n\t\t\t<item>InfoMonomial</item>\n\t\t\t<item>InfoMorph</item>\n\t\t\t<item>InfoNumtheor</item>\n\t\t\t<item>InfoOperation</item>\n\t\t\t<item>InfoOptions</item>\n\t\t\t<item>InfoOverGr</item>\n\t\t\t<item>InfoPcGroup</item>\n\t\t\t<item>InfoPcNormalizer</item>\n\t\t\t<item>InfoPcSubgroup</item>\n\t\t\t<item>InfoPerformance</item>\n\t\t\t<item>InfoPoly</item>\n\t\t\t<item>InfoPrimeInt</item>\n\t\t\t<item>InfoQuotientGroup</item>\n\t\t\t<item>InfoQuotientSystem</item>\n\t\t\t<item>InfoRSS</item>\n\t\t\t<item>InfoRandIso</item>\n\t\t\t<item>InfoSQ</item>\n\t\t\t<item>InfoSchur</item>\n\t\t\t<item>InfoSearchTable</item>\n\t\t\t<item>InfoSpecPcgs</item>\n\t\t\t<item>InfoTeaching</item>\n\t\t\t<item>InfoText</item>\n\t\t\t<item>InfoTiming</item>\n\t\t\t<item>InfoTom</item>\n\t\t\t<item>InfoTransversal</item>\n\t\t\t<item>InfoTuples</item>\n\t\t\t<item>InfoWarning</item>\n\t\t\t<item>InfoZLattice</item>\n\t\t\t<item>InitAbsAndIrredModules</item>\n\t\t\t<item>InitEpimorphismSQ</item>\n\t\t\t<item>InitFusion</item>\n\t\t\t<item>InitPowerMap</item>\n\t\t\t<item>InitialiseCentralRelations</item>\n\t\t\t<item>InitializePackagesInfoRecords</item>\n\t\t\t<item>InitializeSchreierTree</item>\n\t\t\t<item>Injection</item>\n\t\t\t<item>InjectionZeroMagma</item>\n\t\t\t<item>InnerAutomorphism</item>\n\t\t\t<item>InnerAutomorphismNC</item>\n\t\t\t<item>InnerAutomorphismsAutomorphismGroup</item>\n\t\t\t<item>InnerSubdirectProducts</item>\n\t\t\t<item>InputLogTo</item>\n\t\t\t<item>InputOutputLocalProcess</item>\n\t\t\t<item>InputOutputStreamByPtyDefaultType</item>\n\t\t\t<item>InputTextFile</item>\n\t\t\t<item>InputTextFileStillOpen</item>\n\t\t\t<item>InputTextFileType</item>\n\t\t\t<item>InputTextNone</item>\n\t\t\t<item>InputTextNoneType</item>\n\t\t\t<item>InputTextString</item>\n\t\t\t<item>InputTextStringType</item>\n\t\t\t<item>InputTextUser</item>\n\t\t\t<item>Insert</item>\n\t\t\t<item>InsertElmList</item>\n\t\t\t<item>InsertTrivialStabilizer</item>\n\t\t\t<item>InstallAccessToGenerators</item>\n\t\t\t<item>InstallAtExit</item>\n\t\t\t<item>InstallAttributeFunction</item>\n\t\t\t<item>InstallAttributeMethodByGroupGeneralMappingByImages</item>\n\t\t\t<item>InstallCharReadHookFunc</item>\n\t\t\t<item>InstallEqMethodForMappingsFromGenerators</item>\n\t\t\t<item>InstallFactorMaintenance</item>\n\t\t\t<item>InstallFlushableValue</item>\n\t\t\t<item>InstallGlobalFunction</item>\n\t\t\t<item>InstallHandlingByNiceBasis</item>\n\t\t\t<item>InstallHiddenTrueMethod</item>\n\t\t\t<item>InstallImmediateMethod</item>\n\t\t\t<item>InstallIsomorphismMaintenance</item>\n\t\t\t<item>InstallIsomorphismMaintenanceFunction</item>\n\t\t\t<item>InstallMethod</item>\n\t\t\t<item>InstallMonomialOrdering</item>\n\t\t\t<item>InstallOtherMethod</item>\n\t\t\t<item>InstallPcgsSeriesFromIndices</item>\n\t\t\t<item>InstallSubsetMaintenance</item>\n\t\t\t<item>InstallTrueMethod</item>\n\t\t\t<item>InstallTrueMethodNewFilter</item>\n\t\t\t<item>InstallValue</item>\n\t\t\t<item>InstalledPackageVersion</item>\n\t\t\t<item>Int</item>\n\t\t\t<item>IntFFE</item>\n\t\t\t<item>IntFFESymm</item>\n\t\t\t<item>IntHexString</item>\n\t\t\t<item>IntScalarProducts</item>\n\t\t\t<item>IntVecFFE</item>\n\t\t\t<item>Integers</item>\n\t\t\t<item>IntegralizedMat</item>\n\t\t\t<item>IntegratedStraightLineProgram</item>\n\t\t\t<item>IntermediateGroup</item>\n\t\t\t<item>IntermediateSubgroups</item>\n\t\t\t<item>InternalRepresentative</item>\n\t\t\t<item>InterpolatedPolynomial</item>\n\t\t\t<item>IntersectBlist</item>\n\t\t\t<item>IntersectSet</item>\n\t\t\t<item>Intersection</item>\n\t\t\t<item>IntersectionBlist</item>\n\t\t\t<item>IntersectionNormalClosurePermGroup</item>\n\t\t\t<item>IntersectionSet</item>\n\t\t\t<item>IntersectionSumPcgs</item>\n\t\t\t<item>IntersectionsTom</item>\n\t\t\t<item>InvariantBilinearForm</item>\n\t\t\t<item>InvariantElementaryAbelianSeries</item>\n\t\t\t<item>InvariantForm</item>\n\t\t\t<item>InvariantLattice</item>\n\t\t\t<item>InvariantQuadraticForm</item>\n\t\t\t<item>InvariantSesquilinearForm</item>\n\t\t\t<item>InvariantSubgroupsElementaryAbelianGroup</item>\n\t\t\t<item>InvariantSubspaceOrCyclicGroup</item>\n\t\t\t<item>InvariantSubspaceOrUniformCyclicPGroup</item>\n\t\t\t<item>Inverse</item>\n\t\t\t<item>InverseAsWord</item>\n\t\t\t<item>InverseAttr</item>\n\t\t\t<item>InverseClasses</item>\n\t\t\t<item>InverseGeneralMapping</item>\n\t\t\t<item>InverseImmutable</item>\n\t\t\t<item>InverseMap</item>\n\t\t\t<item>InverseMatMod</item>\n\t\t\t<item>InverseMutable</item>\n\t\t\t<item>InverseOp</item>\n\t\t\t<item>InversePcgs</item>\n\t\t\t<item>InverseRepresentative</item>\n\t\t\t<item>InverseRepresentativeWord</item>\n\t\t\t<item>InverseSLPElm</item>\n\t\t\t<item>InverseSM</item>\n\t\t\t<item>InverseSameMutability</item>\n\t\t\t<item>Irr</item>\n\t\t\t<item>IrrBaumClausen</item>\n\t\t\t<item>IrrConlon</item>\n\t\t\t<item>IrrDixonSchneider</item>\n\t\t\t<item>IrrFacsPol</item>\n\t\t\t<item>IrredSolGroupList</item>\n\t\t\t<item>IrredSolJSGens</item>\n\t\t\t<item>IrreducibleDifferences</item>\n\t\t\t<item>IrreducibleModules</item>\n\t\t\t<item>IrreducibleRepresentations</item>\n\t\t\t<item>IrreducibleRepresentationsByBaumClausen</item>\n\t\t\t<item>IrreducibleRepresentationsDixon</item>\n\t\t\t<item>IrreducibleSolvableGroup</item>\n\t\t\t<item>IrreducibleSolvableGroupMS</item>\n\t\t\t<item>IsANFAutomorphism</item>\n\t\t\t<item>IsANFAutomorphismRep</item>\n\t\t\t<item>IsAbelian</item>\n\t\t\t<item>IsAbelianNumberField</item>\n\t\t\t<item>IsAbelianNumberFieldPolynomialRing</item>\n\t\t\t<item>IsAbelianTom</item>\n\t\t\t<item>IsActionHomomorphism</item>\n\t\t\t<item>IsActionHomomorphismAutomGroup</item>\n\t\t\t<item>IsActionHomomorphismByActors</item>\n\t\t\t<item>IsActionHomomorphismByBase</item>\n\t\t\t<item>IsActionHomomorphismSubset</item>\n\t\t\t<item>IsAdditiveCoset</item>\n\t\t\t<item>IsAdditiveCosetDefaultRep</item>\n\t\t\t<item>IsAdditiveElement</item>\n\t\t\t<item>IsAdditiveElementAsMultiplicativeElementRep</item>\n\t\t\t<item>IsAdditiveElementCollColl</item>\n\t\t\t<item>IsAdditiveElementCollCollColl</item>\n\t\t\t<item>IsAdditiveElementCollection</item>\n\t\t\t<item>IsAdditiveElementList</item>\n\t\t\t<item>IsAdditiveElementTable</item>\n\t\t\t<item>IsAdditiveElementWithInverse</item>\n\t\t\t<item>IsAdditiveElementWithInverseCollColl</item>\n\t\t\t<item>IsAdditiveElementWithInverseCollCollColl</item>\n\t\t\t<item>IsAdditiveElementWithInverseCollection</item>\n\t\t\t<item>IsAdditiveElementWithInverseList</item>\n\t\t\t<item>IsAdditiveElementWithInverseTable</item>\n\t\t\t<item>IsAdditiveElementWithZero</item>\n\t\t\t<item>IsAdditiveElementWithZeroCollColl</item>\n\t\t\t<item>IsAdditiveElementWithZeroCollCollColl</item>\n\t\t\t<item>IsAdditiveElementWithZeroCollection</item>\n\t\t\t<item>IsAdditiveElementWithZeroList</item>\n\t\t\t<item>IsAdditiveElementWithZeroTable</item>\n\t\t\t<item>IsAdditiveGroup</item>\n\t\t\t<item>IsAdditiveGroupGeneralMapping</item>\n\t\t\t<item>IsAdditiveGroupHomomorphism</item>\n\t\t\t<item>IsAdditiveGroupToGroupGeneralMapping</item>\n\t\t\t<item>IsAdditiveGroupToGroupHomomorphism</item>\n\t\t\t<item>IsAdditiveMagma</item>\n\t\t\t<item>IsAdditiveMagmaWithInverses</item>\n\t\t\t<item>IsAdditiveMagmaWithZero</item>\n\t\t\t<item>IsAdditivelyCommutative</item>\n\t\t\t<item>IsAdditivelyCommutativeElement</item>\n\t\t\t<item>IsAdditivelyCommutativeElementCollColl</item>\n\t\t\t<item>IsAdditivelyCommutativeElementCollection</item>\n\t\t\t<item>IsAdditivelyCommutativeElementFamily</item>\n\t\t\t<item>IsAlgBFRep</item>\n\t\t\t<item>IsAlgExtRep</item>\n\t\t\t<item>IsAlgebra</item>\n\t\t\t<item>IsAlgebraGeneralMapping</item>\n\t\t\t<item>IsAlgebraGeneralMappingByImagesDefaultRep</item>\n\t\t\t<item>IsAlgebraHomomorphism</item>\n\t\t\t<item>IsAlgebraHomomorphismFromFpRep</item>\n\t\t\t<item>IsAlgebraModule</item>\n\t\t\t<item>IsAlgebraModuleElement</item>\n\t\t\t<item>IsAlgebraModuleElementCollection</item>\n\t\t\t<item>IsAlgebraModuleElementFamily</item>\n\t\t\t<item>IsAlgebraWithOne</item>\n\t\t\t<item>IsAlgebraWithOneGeneralMapping</item>\n\t\t\t<item>IsAlgebraWithOneHomomorphism</item>\n\t\t\t<item>IsAlgebraicElement</item>\n\t\t\t<item>IsAlgebraicElementCollColl</item>\n\t\t\t<item>IsAlgebraicElementCollCollColl</item>\n\t\t\t<item>IsAlgebraicElementCollection</item>\n\t\t\t<item>IsAlgebraicElementFamily</item>\n\t\t\t<item>IsAlgebraicExtension</item>\n\t\t\t<item>IsAlgebraicExtensionDefaultRep</item>\n\t\t\t<item>IsAlgebraicExtensionPolynomialRing</item>\n\t\t\t<item>IsAlphaChar</item>\n\t\t\t<item>IsAlternatingGroup</item>\n\t\t\t<item>IsAnticommutative</item>\n\t\t\t<item>IsAntisymmetricBinaryRelation</item>\n\t\t\t<item>IsAssocWord</item>\n\t\t\t<item>IsAssocWordCollection</item>\n\t\t\t<item>IsAssocWordFamily</item>\n\t\t\t<item>IsAssocWordWithInverse</item>\n\t\t\t<item>IsAssocWordWithInverseCollection</item>\n\t\t\t<item>IsAssocWordWithInverseFamily</item>\n\t\t\t<item>IsAssocWordWithOne</item>\n\t\t\t<item>IsAssocWordWithOneCollection</item>\n\t\t\t<item>IsAssocWordWithOneFamily</item>\n\t\t\t<item>IsAssociated</item>\n\t\t\t<item>IsAssociative</item>\n\t\t\t<item>IsAssociativeAOpDSum</item>\n\t\t\t<item>IsAssociativeAOpESum</item>\n\t\t\t<item>IsAssociativeElement</item>\n\t\t\t<item>IsAssociativeElementCollColl</item>\n\t\t\t<item>IsAssociativeElementCollection</item>\n\t\t\t<item>IsAssociativeLOpDProd</item>\n\t\t\t<item>IsAssociativeLOpEProd</item>\n\t\t\t<item>IsAssociativeROpDProd</item>\n\t\t\t<item>IsAssociativeROpEProd</item>\n\t\t\t<item>IsAssociativeUOpDProd</item>\n\t\t\t<item>IsAssociativeUOpEProd</item>\n\t\t\t<item>IsAttributeStoringRep</item>\n\t\t\t<item>IsAttributeStoringRepFlags</item>\n\t\t\t<item>IsAutomorphismGroup</item>\n\t\t\t<item>IsBLetterAssocWordRep</item>\n\t\t\t<item>IsBLetterWordsFamily</item>\n\t\t\t<item>IsBasicImageEltRep</item>\n\t\t\t<item>IsBasicImageEltRepCollection</item>\n\t\t\t<item>IsBasicImageGroup</item>\n\t\t\t<item>IsBasicWreathLessThanOrEqual</item>\n\t\t\t<item>IsBasicWreathProductOrdering</item>\n\t\t\t<item>IsBasis</item>\n\t\t\t<item>IsBasisByNiceBasis</item>\n\t\t\t<item>IsBasisFiniteFieldRep</item>\n\t\t\t<item>IsBasisOfAlgebraModuleElementSpace</item>\n\t\t\t<item>IsBasisOfMonomialSpaceRep</item>\n\t\t\t<item>IsBasisOfSparseRowSpaceRep</item>\n\t\t\t<item>IsBasisOfWeightRepElementSpace</item>\n\t\t\t<item>IsBasisWithReplacedLeftModuleRep</item>\n\t\t\t<item>IsBergerCondition</item>\n\t\t\t<item>IsBijective</item>\n\t\t\t<item>IsBinaryRelation</item>\n\t\t\t<item>IsBinaryRelationDefaultRep</item>\n\t\t\t<item>IsBinaryRelationOnPointsRep</item>\n\t\t\t<item>IsBlist</item>\n\t\t\t<item>IsBlistRep</item>\n\t\t\t<item>IsBlockMatrixRep</item>\n\t\t\t<item>IsBlocksHomomorphism</item>\n\t\t\t<item>IsBlocksOfActionHomomorphism</item>\n\t\t\t<item>IsBlowUpIsomorphism</item>\n\t\t\t<item>IsBool</item>\n\t\t\t<item>IsBound</item>\n\t\t\t<item>IsBoundElmWPObj</item>\n\t\t\t<item>IsBoundGlobal</item>\n\t\t\t<item>IsBracketRep</item>\n\t\t\t<item>IsBrauerTable</item>\n\t\t\t<item>IsBravaisGroup</item>\n\t\t\t<item>IsBuiltFromAdditiveMagmaWithInverses</item>\n\t\t\t<item>IsBuiltFromGroup</item>\n\t\t\t<item>IsBuiltFromMagma</item>\n\t\t\t<item>IsBuiltFromMagmaWithInverses</item>\n\t\t\t<item>IsBuiltFromMagmaWithOne</item>\n\t\t\t<item>IsBuiltFromMonoid</item>\n\t\t\t<item>IsBuiltFromSemigroup</item>\n\t\t\t<item>IsCanonicalBasis</item>\n\t\t\t<item>IsCanonicalBasisAbelianNumberFieldRep</item>\n\t\t\t<item>IsCanonicalBasisAlgebraicExtension</item>\n\t\t\t<item>IsCanonicalBasisCyclotomicFieldRep</item>\n\t\t\t<item>IsCanonicalBasisFreeMagmaRingRep</item>\n\t\t\t<item>IsCanonicalBasisFullMatrixModule</item>\n\t\t\t<item>IsCanonicalBasisFullRowModule</item>\n\t\t\t<item>IsCanonicalBasisFullSCAlgebra</item>\n\t\t\t<item>IsCanonicalBasisGaussianIntegersRep</item>\n\t\t\t<item>IsCanonicalBasisIntegersRep</item>\n\t\t\t<item>IsCanonicalBasisRationals</item>\n\t\t\t<item>IsCanonicalNiceMonomorphism</item>\n\t\t\t<item>IsCanonicalPcgs</item>\n\t\t\t<item>IsCanonicalPcgsWrtSpecialPcgs</item>\n\t\t\t<item>IsCentral</item>\n\t\t\t<item>IsCentralFromGenerators</item>\n\t\t\t<item>IsChainTypeGroup</item>\n\t\t\t<item>IsChar</item>\n\t\t\t<item>IsCharCollection</item>\n\t\t\t<item>IsCharacter</item>\n\t\t\t<item>IsCharacterTable</item>\n\t\t\t<item>IsCharacterTableInProgress</item>\n\t\t\t<item>IsCharacteristicMatrixPGroup</item>\n\t\t\t<item>IsCharacteristicSubgroup</item>\n\t\t\t<item>IsCheapConwayPolynomial</item>\n\t\t\t<item>IsClassFunction</item>\n\t\t\t<item>IsClassFunctionsSpace</item>\n\t\t\t<item>IsClassFusionOfNormalSubgroup</item>\n\t\t\t<item>IsClosedStream</item>\n\t\t\t<item>IsCochain</item>\n\t\t\t<item>IsCochainCollection</item>\n\t\t\t<item>IsCochainsSpace</item>\n\t\t\t<item>IsCocycle</item>\n\t\t\t<item>IsCoeffsElms</item>\n\t\t\t<item>IsCollCollsElms</item>\n\t\t\t<item>IsCollCollsElmsElms</item>\n\t\t\t<item>IsCollCollsElmsElmsX</item>\n\t\t\t<item>IsCollLieCollsElms</item>\n\t\t\t<item>IsCollection</item>\n\t\t\t<item>IsCollectionFamily</item>\n\t\t\t<item>IsCollsCollsElms</item>\n\t\t\t<item>IsCollsCollsElmsX</item>\n\t\t\t<item>IsCollsCollsElmsXX</item>\n\t\t\t<item>IsCollsElms</item>\n\t\t\t<item>IsCollsElmsColls</item>\n\t\t\t<item>IsCollsElmsElms</item>\n\t\t\t<item>IsCollsElmsElmsElms</item>\n\t\t\t<item>IsCollsElmsElmsX</item>\n\t\t\t<item>IsCollsElmsX</item>\n\t\t\t<item>IsCollsElmsXElms</item>\n\t\t\t<item>IsCollsElmsXX</item>\n\t\t\t<item>IsCollsXElms</item>\n\t\t\t<item>IsCollsXElmsX</item>\n\t\t\t<item>IsCombinatorialCollectorRep</item>\n\t\t\t<item>IsCommutative</item>\n\t\t\t<item>IsCommutativeElement</item>\n\t\t\t<item>IsCommutativeElementCollColl</item>\n\t\t\t<item>IsCommutativeElementCollection</item>\n\t\t\t<item>IsCommutativeFamily</item>\n\t\t\t<item>IsCommutativeFromGenerators</item>\n\t\t\t<item>IsCompatiblePair</item>\n\t\t\t<item>IsComponentObjectRep</item>\n\t\t\t<item>IsCompositionMappingRep</item>\n\t\t\t<item>IsConfluent</item>\n\t\t\t<item>IsCongruenceClass</item>\n\t\t\t<item>IsConjugacyClassGroupRep</item>\n\t\t\t<item>IsConjugacyClassPermGroupRep</item>\n\t\t\t<item>IsConjugacyClassSubgroupsByStabilizerRep</item>\n\t\t\t<item>IsConjugacyClassSubgroupsRep</item>\n\t\t\t<item>IsConjugate</item>\n\t\t\t<item>IsConjugatorAutomorphism</item>\n\t\t\t<item>IsConjugatorIsomorphism</item>\n\t\t\t<item>IsConsistentPolynomial</item>\n\t\t\t<item>IsConstantRationalFunction</item>\n\t\t\t<item>IsConstantTimeAccessGeneralMapping</item>\n\t\t\t<item>IsConstantTimeAccessList</item>\n\t\t\t<item>IsConstituentHomomorphism</item>\n\t\t\t<item>IsContainedInSpan</item>\n\t\t\t<item>IsCopyable</item>\n\t\t\t<item>IsCyc</item>\n\t\t\t<item>IsCycInt</item>\n\t\t\t<item>IsCyclic</item>\n\t\t\t<item>IsCyclicTom</item>\n\t\t\t<item>IsCyclotomic</item>\n\t\t\t<item>IsCyclotomicCollColl</item>\n\t\t\t<item>IsCyclotomicCollCollColl</item>\n\t\t\t<item>IsCyclotomicCollection</item>\n\t\t\t<item>IsCyclotomicField</item>\n\t\t\t<item>IsCyclotomicMatrixGroup</item>\n\t\t\t<item>IsDataObjectRep</item>\n\t\t\t<item>IsDeepThoughtCollectorRep</item>\n\t\t\t<item>IsDefaultGeneralMappingRep</item>\n\t\t\t<item>IsDefaultRhsTypeSingleCollector</item>\n\t\t\t<item>IsDefaultTupleRep</item>\n\t\t\t<item>IsDenseCoeffVectorRep</item>\n\t\t\t<item>IsDenseHashRep</item>\n\t\t\t<item>IsDenseList</item>\n\t\t\t<item>IsDiagonalMat</item>\n\t\t\t<item>IsDictionary</item>\n\t\t\t<item>IsDictionaryDefaultRep</item>\n\t\t\t<item>IsDigitChar</item>\n\t\t\t<item>IsDihedralGroup</item>\n\t\t\t<item>IsDirectSumElement</item>\n\t\t\t<item>IsDirectSumElementCollection</item>\n\t\t\t<item>IsDirectSumElementFamily</item>\n\t\t\t<item>IsDirectSumElementsSpace</item>\n\t\t\t<item>IsDirectory</item>\n\t\t\t<item>IsDirectoryPath</item>\n\t\t\t<item>IsDirectoryRep</item>\n\t\t\t<item>IsDistributive</item>\n\t\t\t<item>IsDistributiveLOpDProd</item>\n\t\t\t<item>IsDistributiveLOpDSum</item>\n\t\t\t<item>IsDistributiveLOpEProd</item>\n\t\t\t<item>IsDistributiveLOpESum</item>\n\t\t\t<item>IsDistributiveROpDProd</item>\n\t\t\t<item>IsDistributiveROpDSum</item>\n\t\t\t<item>IsDistributiveROpEProd</item>\n\t\t\t<item>IsDistributiveROpESum</item>\n\t\t\t<item>IsDistributiveUOpDProd</item>\n\t\t\t<item>IsDistributiveUOpDSum</item>\n\t\t\t<item>IsDistributiveUOpEProd</item>\n\t\t\t<item>IsDistributiveUOpESum</item>\n\t\t\t<item>IsDivisionRing</item>\n\t\t\t<item>IsDocumentedVariable</item>\n\t\t\t<item>IsDomain</item>\n\t\t\t<item>IsDoneIterator</item>\n\t\t\t<item>IsDoubleCoset</item>\n\t\t\t<item>IsDoubleCosetDefaultRep</item>\n\t\t\t<item>IsDuplicateFree</item>\n\t\t\t<item>IsDuplicateFreeCollection</item>\n\t\t\t<item>IsDuplicateFreeList</item>\n\t\t\t<item>IsDxLargeGroup</item>\n\t\t\t<item>IsElementFinitePolycyclicGroup</item>\n\t\t\t<item>IsElementFinitePolycyclicGroupCollection</item>\n\t\t\t<item>IsElementOfFpAlgebra</item>\n\t\t\t<item>IsElementOfFpAlgebraCollection</item>\n\t\t\t<item>IsElementOfFpAlgebraFamily</item>\n\t\t\t<item>IsElementOfFpGroup</item>\n\t\t\t<item>IsElementOfFpGroupCollection</item>\n\t\t\t<item>IsElementOfFpGroupFamily</item>\n\t\t\t<item>IsElementOfFpMonoid</item>\n\t\t\t<item>IsElementOfFpMonoidCollection</item>\n\t\t\t<item>IsElementOfFpMonoidFamily</item>\n\t\t\t<item>IsElementOfFpSemigroup</item>\n\t\t\t<item>IsElementOfFpSemigroupCollection</item>\n\t\t\t<item>IsElementOfFpSemigroupFamily</item>\n\t\t\t<item>IsElementOfFreeGroup</item>\n\t\t\t<item>IsElementOfFreeGroupFamily</item>\n\t\t\t<item>IsElementOfFreeMagmaRing</item>\n\t\t\t<item>IsElementOfFreeMagmaRingCollection</item>\n\t\t\t<item>IsElementOfFreeMagmaRingFamily</item>\n\t\t\t<item>IsElementOfMagmaRingModuloRelations</item>\n\t\t\t<item>IsElementOfMagmaRingModuloRelationsCollection</item>\n\t\t\t<item>IsElementOfMagmaRingModuloRelationsFamily</item>\n\t\t\t<item>IsElementOfMagmaRingModuloSpanOfZeroFamily</item>\n\t\t\t<item>IsElementaryAbelian</item>\n\t\t\t<item>IsElementsFamilyByRws</item>\n\t\t\t<item>IsElmsCoeffs</item>\n\t\t\t<item>IsElmsCollColls</item>\n\t\t\t<item>IsElmsCollCollsX</item>\n\t\t\t<item>IsElmsCollLieColls</item>\n\t\t\t<item>IsElmsColls</item>\n\t\t\t<item>IsElmsCollsX</item>\n\t\t\t<item>IsElmsCollsXX</item>\n\t\t\t<item>IsElmsLieColls</item>\n\t\t\t<item>IsEmbeddingDirectProductPermGroup</item>\n\t\t\t<item>IsEmbeddingImprimitiveWreathProductPermGroup</item>\n\t\t\t<item>IsEmbeddingMagmaMagmaRing</item>\n\t\t\t<item>IsEmbeddingProductActionWreathProductPermGroup</item>\n\t\t\t<item>IsEmbeddingRingMagmaRing</item>\n\t\t\t<item>IsEmbeddingWreathProductPermGroup</item>\n\t\t\t<item>IsEmpty</item>\n\t\t\t<item>IsEmptyRowVectorRep</item>\n\t\t\t<item>IsEmptyString</item>\n\t\t\t<item>IsEndOfStream</item>\n\t\t\t<item>IsEndoGeneralMapping</item>\n\t\t\t<item>IsEndoMapping</item>\n\t\t\t<item>IsEnumeratorByFunctions</item>\n\t\t\t<item>IsEnumeratorByFunctionsRep</item>\n\t\t\t<item>IsEnumeratorByPcgsRep</item>\n\t\t\t<item>IsEqualSet</item>\n\t\t\t<item>IsEquivalenceClass</item>\n\t\t\t<item>IsEquivalenceClassDefaultRep</item>\n\t\t\t<item>IsEquivalenceRelation</item>\n\t\t\t<item>IsEquivalenceRelationDefaultRep</item>\n\t\t\t<item>IsEquivalentByFp</item>\n\t\t\t<item>IsEuclideanRing</item>\n\t\t\t<item>IsEvenInt</item>\n\t\t\t<item>IsExecutableFile</item>\n\t\t\t<item>IsExistingFile</item>\n\t\t\t<item>IsExtAElement</item>\n\t\t\t<item>IsExtAElementCollColl</item>\n\t\t\t<item>IsExtAElementCollection</item>\n\t\t\t<item>IsExtAElementList</item>\n\t\t\t<item>IsExtAElementTable</item>\n\t\t\t<item>IsExtASet</item>\n\t\t\t<item>IsExtLElement</item>\n\t\t\t<item>IsExtLElementCollColl</item>\n\t\t\t<item>IsExtLElementCollection</item>\n\t\t\t<item>IsExtLElementList</item>\n\t\t\t<item>IsExtLElementTable</item>\n\t\t\t<item>IsExtLSet</item>\n\t\t\t<item>IsExtRElement</item>\n\t\t\t<item>IsExtRElementCollColl</item>\n\t\t\t<item>IsExtRElementCollection</item>\n\t\t\t<item>IsExtRElementList</item>\n\t\t\t<item>IsExtRElementTable</item>\n\t\t\t<item>IsExtRSet</item>\n\t\t\t<item>IsExtUSet</item>\n\t\t\t<item>IsExtensibleGeneralMapping</item>\n\t\t\t<item>IsExtensiblePartialMapping</item>\n\t\t\t<item>IsExternalOrbit</item>\n\t\t\t<item>IsExternalOrbitByStabilizerRep</item>\n\t\t\t<item>IsExternalSet</item>\n\t\t\t<item>IsExternalSetByActorsRep</item>\n\t\t\t<item>IsExternalSetByOperatorsRep</item>\n\t\t\t<item>IsExternalSetByPcgs</item>\n\t\t\t<item>IsExternalSetDefaultRep</item>\n\t\t\t<item>IsExternalSubset</item>\n\t\t\t<item>IsFFE</item>\n\t\t\t<item>IsFFECollColl</item>\n\t\t\t<item>IsFFECollCollColl</item>\n\t\t\t<item>IsFFECollection</item>\n\t\t\t<item>IsFFEFamily</item>\n\t\t\t<item>IsFFEMatrixGroup</item>\n\t\t\t<item>IsFFEMatrixGroupOverLargeSpace</item>\n\t\t\t<item>IsFLMLOR</item>\n\t\t\t<item>IsFLMLORWithOne</item>\n\t\t\t<item>IsFamFamFam</item>\n\t\t\t<item>IsFamFamFamX</item>\n\t\t\t<item>IsFamFamX</item>\n\t\t\t<item>IsFamFamXY</item>\n\t\t\t<item>IsFamLieFam</item>\n\t\t\t<item>IsFamXFam</item>\n\t\t\t<item>IsFamXFamY</item>\n\t\t\t<item>IsFamXYFamZ</item>\n\t\t\t<item>IsFamily</item>\n\t\t\t<item>IsFamilyDefaultRep</item>\n\t\t\t<item>IsFamilyElementOfFreeLieAlgebra</item>\n\t\t\t<item>IsFamilyOfFamilies</item>\n\t\t\t<item>IsFamilyOfTypes</item>\n\t\t\t<item>IsFamilyOverFullCoefficientsFamily</item>\n\t\t\t<item>IsFamilyPcgs</item>\n\t\t\t<item>IsField</item>\n\t\t\t<item>IsFieldControlledByGaloisGroup</item>\n\t\t\t<item>IsFieldElementsSpace</item>\n\t\t\t<item>IsFieldHomomorphism</item>\n\t\t\t<item>IsFilter</item>\n\t\t\t<item>IsFinite</item>\n\t\t\t<item>IsFiniteBasisDefault</item>\n\t\t\t<item>IsFiniteDimensional</item>\n\t\t\t<item>IsFiniteFieldPolynomialRing</item>\n\t\t\t<item>IsFiniteOrderElement</item>\n\t\t\t<item>IsFiniteOrderElementCollColl</item>\n\t\t\t<item>IsFiniteOrderElementCollection</item>\n\t\t\t<item>IsFiniteOrdersPcgs</item>\n\t\t\t<item>IsFiniteSemigroupGreensRelation</item>\n\t\t\t<item>IsFinitelyGeneratedGroup</item>\n\t\t\t<item>IsFixedStabilizer</item>\n\t\t\t<item>IsFlatHashTable</item>\n\t\t\t<item>IsFlexibleGeneralMapping</item>\n\t\t\t<item>IsFlexiblePartialMapping</item>\n\t\t\t<item>IsFpAlgebraElementsSpace</item>\n\t\t\t<item>IsFpGroup</item>\n\t\t\t<item>IsFpMonoid</item>\n\t\t\t<item>IsFpSemigroup</item>\n\t\t\t<item>IsFptoSCAMorphism</item>\n\t\t\t<item>IsFrattiniFree</item>\n\t\t\t<item>IsFreeGroup</item>\n\t\t\t<item>IsFreeLeftModule</item>\n\t\t\t<item>IsFreeMagma</item>\n\t\t\t<item>IsFreeMagmaRing</item>\n\t\t\t<item>IsFreeMagmaRingWithOne</item>\n\t\t\t<item>IsFreeMonoid</item>\n\t\t\t<item>IsFreeSemigroup</item>\n\t\t\t<item>IsFrobeniusAutomorphism</item>\n\t\t\t<item>IsFromFpGroupGeneralMapping</item>\n\t\t\t<item>IsFromFpGroupGeneralMappingByImages</item>\n\t\t\t<item>IsFromFpGroupHomomorphism</item>\n\t\t\t<item>IsFromFpGroupHomomorphismByImages</item>\n\t\t\t<item>IsFromFpGroupStdGensGeneralMappingByImages</item>\n\t\t\t<item>IsFromFpGroupStdGensHomomorphismByImages</item>\n\t\t\t<item>IsFullFpAlgebra</item>\n\t\t\t<item>IsFullHomModule</item>\n\t\t\t<item>IsFullMatrixModule</item>\n\t\t\t<item>IsFullRowModule</item>\n\t\t\t<item>IsFullSCAlgebra</item>\n\t\t\t<item>IsFullSubgroupGLorSLRespectingBilinearForm</item>\n\t\t\t<item>IsFullSubgroupGLorSLRespectingQuadraticForm</item>\n\t\t\t<item>IsFullSubgroupGLorSLRespectingSesquilinearForm</item>\n\t\t\t<item>IsFullTransformationSemigroup</item>\n\t\t\t<item>IsFunction</item>\n\t\t\t<item>IsGL</item>\n\t\t\t<item>IsGaussInt</item>\n\t\t\t<item>IsGaussRat</item>\n\t\t\t<item>IsGaussianIntegers</item>\n\t\t\t<item>IsGaussianMatrixSpace</item>\n\t\t\t<item>IsGaussianRationals</item>\n\t\t\t<item>IsGaussianRowSpace</item>\n\t\t\t<item>IsGaussianSpace</item>\n\t\t\t<item>IsGeneralLinearGroup</item>\n\t\t\t<item>IsGeneralMapping</item>\n\t\t\t<item>IsGeneralMappingCollection</item>\n\t\t\t<item>IsGeneralMappingFamily</item>\n\t\t\t<item>IsGeneralPcgs</item>\n\t\t\t<item>IsGeneralizedCartanMatrix</item>\n\t\t\t<item>IsGeneralizedDomain</item>\n\t\t\t<item>IsGeneralizedRowVector</item>\n\t\t\t<item>IsGeneratorsOfMagmaWithInverses</item>\n\t\t\t<item>IsGenericCharacterTableRep</item>\n\t\t\t<item>IsGenericFiniteSpace</item>\n\t\t\t<item>IsGreensClass</item>\n\t\t\t<item>IsGreensDClass</item>\n\t\t\t<item>IsGreensDRelation</item>\n\t\t\t<item>IsGreensHClass</item>\n\t\t\t<item>IsGreensHRelation</item>\n\t\t\t<item>IsGreensJClass</item>\n\t\t\t<item>IsGreensJRelation</item>\n\t\t\t<item>IsGreensLClass</item>\n\t\t\t<item>IsGreensLRelation</item>\n\t\t\t<item>IsGreensLessThanOrEqual</item>\n\t\t\t<item>IsGreensRClass</item>\n\t\t\t<item>IsGreensRRelation</item>\n\t\t\t<item>IsGreensRelation</item>\n\t\t\t<item>IsGroup</item>\n\t\t\t<item>IsGroupGeneralMapping</item>\n\t\t\t<item>IsGroupGeneralMappingByAsGroupGeneralMappingByImages</item>\n\t\t\t<item>IsGroupGeneralMappingByImages</item>\n\t\t\t<item>IsGroupGeneralMappingByPcgs</item>\n\t\t\t<item>IsGroupHClass</item>\n\t\t\t<item>IsGroupHomomorphism</item>\n\t\t\t<item>IsGroupOfAutomorphisms</item>\n\t\t\t<item>IsGroupOfAutomorphismsFiniteGroup</item>\n\t\t\t<item>IsGroupOfFamily</item>\n\t\t\t<item>IsGroupRing</item>\n\t\t\t<item>IsGroupToAdditiveGroupGeneralMapping</item>\n\t\t\t<item>IsGroupToAdditiveGroupHomomorphism</item>\n\t\t\t<item>IsHandledByNiceBasis</item>\n\t\t\t<item>IsHandledByNiceMonomorphism</item>\n\t\t\t<item>IsHash</item>\n\t\t\t<item>IsHashTable</item>\n\t\t\t<item>IsHasseDiagram</item>\n\t\t\t<item>IsHomCoset</item>\n\t\t\t<item>IsHomCosetCollection</item>\n\t\t\t<item>IsHomCosetOfAdditiveElt</item>\n\t\t\t<item>IsHomCosetOfFp</item>\n\t\t\t<item>IsHomCosetOfMatrix</item>\n\t\t\t<item>IsHomCosetOfPerm</item>\n\t\t\t<item>IsHomCosetOfTuple</item>\n\t\t\t<item>IsHomCosetToAdditiveElt</item>\n\t\t\t<item>IsHomCosetToAdditiveEltCollection</item>\n\t\t\t<item>IsHomCosetToAdditiveEltRep</item>\n\t\t\t<item>IsHomCosetToFp</item>\n\t\t\t<item>IsHomCosetToFpCollection</item>\n\t\t\t<item>IsHomCosetToFpRep</item>\n\t\t\t<item>IsHomCosetToMatrix</item>\n\t\t\t<item>IsHomCosetToMatrixCollection</item>\n\t\t\t<item>IsHomCosetToMatrixRep</item>\n\t\t\t<item>IsHomCosetToObjectRep</item>\n\t\t\t<item>IsHomCosetToPerm</item>\n\t\t\t<item>IsHomCosetToPermCollection</item>\n\t\t\t<item>IsHomCosetToPermRep</item>\n\t\t\t<item>IsHomCosetToTuple</item>\n\t\t\t<item>IsHomCosetToTupleCollection</item>\n\t\t\t<item>IsHomCosetToTupleRep</item>\n\t\t\t<item>IsHomQuotientGroup</item>\n\t\t\t<item>IsHomogeneousList</item>\n\t\t\t<item>IsIdeal</item>\n\t\t\t<item>IsIdealInParent</item>\n\t\t\t<item>IsIdealOp</item>\n\t\t\t<item>IsIdempotent</item>\n\t\t\t<item>IsIdenticalObj</item>\n\t\t\t<item>IsIdenticalObjFamiliesColObjObj</item>\n\t\t\t<item>IsIdenticalObjFamiliesColObjObjObj</item>\n\t\t\t<item>IsIdenticalObjFamiliesColXXXObj</item>\n\t\t\t<item>IsIdenticalObjFamiliesColXXXXXXObj</item>\n\t\t\t<item>IsIdenticalObjFamiliesRwsObj</item>\n\t\t\t<item>IsIdenticalObjFamiliesRwsObjObj</item>\n\t\t\t<item>IsIdenticalObjFamiliesRwsObjXXX</item>\n\t\t\t<item>IsIdenticalObjObjObjX</item>\n\t\t\t<item>IsIdenticalObjObjXObj</item>\n\t\t\t<item>IsImfMatrixGroup</item>\n\t\t\t<item>IsImpossible</item>\n\t\t\t<item>IsInBasicOrbit</item>\n\t\t\t<item>IsInCenter</item>\n\t\t\t<item>IsInCentre</item>\n\t\t\t<item>IsInChain</item>\n\t\t\t<item>IsIncomparableUnder</item>\n\t\t\t<item>IsInducedFromNormalSubgroup</item>\n\t\t\t<item>IsInducedPcgs</item>\n\t\t\t<item>IsInducedPcgsRep</item>\n\t\t\t<item>IsInducedPcgsWrtSpecialPcgs</item>\n\t\t\t<item>IsInfBitsAssocWord</item>\n\t\t\t<item>IsInfBitsFamily</item>\n\t\t\t<item>IsInfiniteListOfGeneratorsRep</item>\n\t\t\t<item>IsInfiniteListOfNamesRep</item>\n\t\t\t<item>IsInfinity</item>\n\t\t\t<item>IsInfoClass</item>\n\t\t\t<item>IsInfoClassCollection</item>\n\t\t\t<item>IsInfoClassListRep</item>\n\t\t\t<item>IsInfoSelector</item>\n\t\t\t<item>IsInjective</item>\n\t\t\t<item>IsInnerAutomorphism</item>\n\t\t\t<item>IsInputOutputStream</item>\n\t\t\t<item>IsInputOutputStreamByPtyRep</item>\n\t\t\t<item>IsInputStream</item>\n\t\t\t<item>IsInputTextFileRep</item>\n\t\t\t<item>IsInputTextNone</item>\n\t\t\t<item>IsInputTextNoneRep</item>\n\t\t\t<item>IsInputTextStream</item>\n\t\t\t<item>IsInputTextStringRep</item>\n\t\t\t<item>IsInt</item>\n\t\t\t<item>IsIntegerMatrixGroup</item>\n\t\t\t<item>IsIntegers</item>\n\t\t\t<item>IsIntegralBasis</item>\n\t\t\t<item>IsIntegralCyclotomic</item>\n\t\t\t<item>IsIntegralRing</item>\n\t\t\t<item>IsInternalRep</item>\n\t\t\t<item>IsInternallyConsistent</item>\n\t\t\t<item>IsInverseGeneralMappingRep</item>\n\t\t\t<item>IsIrreducible</item>\n\t\t\t<item>IsIrreducibleCharacter</item>\n\t\t\t<item>IsIrreducibleRingElement</item>\n\t\t\t<item>IsIterator</item>\n\t\t\t<item>IsIteratorByFunctions</item>\n\t\t\t<item>IsIteratorByFunctionsRep</item>\n\t\t\t<item>IsJacobianElement</item>\n\t\t\t<item>IsJacobianElementCollColl</item>\n\t\t\t<item>IsJacobianElementCollection</item>\n\t\t\t<item>IsJacobianRing</item>\n\t\t\t<item>IsKernelPcWord</item>\n\t\t\t<item>IsKnuthBendixRewritingSystem</item>\n\t\t\t<item>IsKnuthBendixRewritingSystemRep</item>\n\t\t\t<item>IsLDistributive</item>\n\t\t\t<item>IsLatticeOrderBinaryRelation</item>\n\t\t\t<item>IsLatticeSubgroupsRep</item>\n\t\t\t<item>IsLaurentPolynomial</item>\n\t\t\t<item>IsLaurentPolynomialDefaultRep</item>\n\t\t\t<item>IsLaurentPolynomialsFamily</item>\n\t\t\t<item>IsLaurentPolynomialsFamilyElement</item>\n\t\t\t<item>IsLeftActedOnByDivisionRing</item>\n\t\t\t<item>IsLeftActedOnByRing</item>\n\t\t\t<item>IsLeftActedOnBySuperset</item>\n\t\t\t<item>IsLeftAlgebraModule</item>\n\t\t\t<item>IsLeftAlgebraModuleElement</item>\n\t\t\t<item>IsLeftAlgebraModuleElementCollection</item>\n\t\t\t<item>IsLeftIdeal</item>\n\t\t\t<item>IsLeftIdealFromGenerators</item>\n\t\t\t<item>IsLeftIdealInParent</item>\n\t\t\t<item>IsLeftIdealOp</item>\n\t\t\t<item>IsLeftMagmaCongruence</item>\n\t\t\t<item>IsLeftMagmaIdeal</item>\n\t\t\t<item>IsLeftModule</item>\n\t\t\t<item>IsLeftModuleGeneralMapping</item>\n\t\t\t<item>IsLeftModuleHomomorphism</item>\n\t\t\t<item>IsLeftOperatorAdditiveGroup</item>\n\t\t\t<item>IsLeftOperatorRing</item>\n\t\t\t<item>IsLeftOperatorRingWithOne</item>\n\t\t\t<item>IsLeftSemigroupCongruence</item>\n\t\t\t<item>IsLeftSemigroupIdeal</item>\n\t\t\t<item>IsLeftVectorSpace</item>\n\t\t\t<item>IsLessThanOrEqualUnder</item>\n\t\t\t<item>IsLessThanUnder</item>\n\t\t\t<item>IsLetterAssocWordRep</item>\n\t\t\t<item>IsLetterWordsFamily</item>\n\t\t\t<item>IsLexicographicallyLess</item>\n\t\t\t<item>IsLibTomRep</item>\n\t\t\t<item>IsLibraryCharacterTableRep</item>\n\t\t\t<item>IsLieAbelian</item>\n\t\t\t<item>IsLieAlgebra</item>\n\t\t\t<item>IsLieEmbeddingRep</item>\n\t\t\t<item>IsLieFamFam</item>\n\t\t\t<item>IsLieMatrix</item>\n\t\t\t<item>IsLieNilpotent</item>\n\t\t\t<item>IsLieNilpotentElement</item>\n\t\t\t<item>IsLieObject</item>\n\t\t\t<item>IsLieObjectCollection</item>\n\t\t\t<item>IsLieObjectsModule</item>\n\t\t\t<item>IsLieSolvable</item>\n\t\t\t<item>IsLinearActionHomomorphism</item>\n\t\t\t<item>IsLinearGeneralMappingByImagesDefaultRep</item>\n\t\t\t<item>IsLinearMapping</item>\n\t\t\t<item>IsLinearMappingByMatrixDefaultRep</item>\n\t\t\t<item>IsLinearMappingsModule</item>\n\t\t\t<item>IsLinearlyIndependent</item>\n\t\t\t<item>IsLinearlyPrimitive</item>\n\t\t\t<item>IsList</item>\n\t\t\t<item>IsListDefault</item>\n\t\t\t<item>IsListDictionary</item>\n\t\t\t<item>IsListHashTable</item>\n\t\t\t<item>IsListLookupDictionary</item>\n\t\t\t<item>IsListOrCollection</item>\n\t\t\t<item>IsLockedRepresentationVector</item>\n\t\t\t<item>IsLookupDictionary</item>\n\t\t\t<item>IsLowerAlphaChar</item>\n\t\t\t<item>IsLowerTriangularMat</item>\n\t\t\t<item>IsMagma</item>\n\t\t\t<item>IsMagmaByMultiplicationTableObj</item>\n\t\t\t<item>IsMagmaCollsMagmaRingColls</item>\n\t\t\t<item>IsMagmaCongruence</item>\n\t\t\t<item>IsMagmaHomomorphism</item>\n\t\t\t<item>IsMagmaIdeal</item>\n\t\t\t<item>IsMagmaRingModuloRelations</item>\n\t\t\t<item>IsMagmaRingModuloSpanOfZero</item>\n\t\t\t<item>IsMagmaRingObjDefaultRep</item>\n\t\t\t<item>IsMagmaRingsMagmas</item>\n\t\t\t<item>IsMagmaRingsRings</item>\n\t\t\t<item>IsMagmaWithInverses</item>\n\t\t\t<item>IsMagmaWithInversesIfNonzero</item>\n\t\t\t<item>IsMagmaWithMultiplicativeZeroAdjoinedElementRep</item>\n\t\t\t<item>IsMagmaWithOne</item>\n\t\t\t<item>IsMagmasMagmaRings</item>\n\t\t\t<item>IsMapping</item>\n\t\t\t<item>IsMappingByFunctionRep</item>\n\t\t\t<item>IsMappingByFunctionWithInverseRep</item>\n\t\t\t<item>IsMatchingSublist</item>\n\t\t\t<item>IsMatrix</item>\n\t\t\t<item>IsMatrixCollection</item>\n\t\t\t<item>IsMatrixFLMLOR</item>\n\t\t\t<item>IsMatrixGroup</item>\n\t\t\t<item>IsMatrixModule</item>\n\t\t\t<item>IsMatrixSpace</item>\n\t\t\t<item>IsMemberPcSeriesPermGroup</item>\n\t\t\t<item>IsMinimalNonmonomial</item>\n\t\t\t<item>IsModuloPcgs</item>\n\t\t\t<item>IsModuloPcgsFpGroupRep</item>\n\t\t\t<item>IsModuloPcgsPermGroupRep</item>\n\t\t\t<item>IsModuloPcgsRep</item>\n\t\t\t<item>IsModuloTailPcgsByListRep</item>\n\t\t\t<item>IsModuloTailPcgsRep</item>\n\t\t\t<item>IsModulusRep</item>\n\t\t\t<item>IsMonoid</item>\n\t\t\t<item>IsMonomial</item>\n\t\t\t<item>IsMonomialCharacter</item>\n\t\t\t<item>IsMonomialCharacterTable</item>\n\t\t\t<item>IsMonomialElement</item>\n\t\t\t<item>IsMonomialElementCollection</item>\n\t\t\t<item>IsMonomialElementFamily</item>\n\t\t\t<item>IsMonomialElementRep</item>\n\t\t\t<item>IsMonomialGroup</item>\n\t\t\t<item>IsMonomialMatrix</item>\n\t\t\t<item>IsMonomialNumber</item>\n\t\t\t<item>IsMonomialOrdering</item>\n\t\t\t<item>IsMonomialOrderingDefaultRep</item>\n\t\t\t<item>IsMultiplicativeElement</item>\n\t\t\t<item>IsMultiplicativeElementCollColl</item>\n\t\t\t<item>IsMultiplicativeElementCollCollColl</item>\n\t\t\t<item>IsMultiplicativeElementCollection</item>\n\t\t\t<item>IsMultiplicativeElementList</item>\n\t\t\t<item>IsMultiplicativeElementTable</item>\n\t\t\t<item>IsMultiplicativeElementWithInverse</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseByPolycyclicCollector</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseByPolycyclicCollectorCollection</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseByRws</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseCollColl</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseCollCollColl</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseCollection</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseList</item>\n\t\t\t<item>IsMultiplicativeElementWithInverseTable</item>\n\t\t\t<item>IsMultiplicativeElementWithOne</item>\n\t\t\t<item>IsMultiplicativeElementWithOneCollColl</item>\n\t\t\t<item>IsMultiplicativeElementWithOneCollCollColl</item>\n\t\t\t<item>IsMultiplicativeElementWithOneCollection</item>\n\t\t\t<item>IsMultiplicativeElementWithOneList</item>\n\t\t\t<item>IsMultiplicativeElementWithOneTable</item>\n\t\t\t<item>IsMultiplicativeElementWithZero</item>\n\t\t\t<item>IsMultiplicativeElementWithZeroCollection</item>\n\t\t\t<item>IsMultiplicativeGeneralizedRowVector</item>\n\t\t\t<item>IsMultiplicativeZero</item>\n\t\t\t<item>IsMutable</item>\n\t\t\t<item>IsMutableBasis</item>\n\t\t\t<item>IsMutableBasisByImmutableBasisRep</item>\n\t\t\t<item>IsMutableBasisOfGaussianMatrixSpaceRep</item>\n\t\t\t<item>IsMutableBasisOfGaussianRowSpaceRep</item>\n\t\t\t<item>IsMutableBasisViaNiceMutableBasisRep</item>\n\t\t\t<item>IsMutableBasisViaUnderlyingMutableBasisRep</item>\n\t\t\t<item>IsNBitsPcWordRep</item>\n\t\t\t<item>IsNameOfNoninstalledTableOfMarks</item>\n\t\t\t<item>IsNaturalAlternatingGroup</item>\n\t\t\t<item>IsNaturalGL</item>\n\t\t\t<item>IsNaturalGLnZ</item>\n\t\t\t<item>IsNaturalHomomorphismPcGroupRep</item>\n\t\t\t<item>IsNaturalSL</item>\n\t\t\t<item>IsNaturalSLnZ</item>\n\t\t\t<item>IsNaturalSymmetricGroup</item>\n\t\t\t<item>IsNearAdditiveElement</item>\n\t\t\t<item>IsNearAdditiveElementCollColl</item>\n\t\t\t<item>IsNearAdditiveElementCollCollColl</item>\n\t\t\t<item>IsNearAdditiveElementCollection</item>\n\t\t\t<item>IsNearAdditiveElementList</item>\n\t\t\t<item>IsNearAdditiveElementTable</item>\n\t\t\t<item>IsNearAdditiveElementWithInverse</item>\n\t\t\t<item>IsNearAdditiveElementWithInverseCollColl</item>\n\t\t\t<item>IsNearAdditiveElementWithInverseCollCollColl</item>\n\t\t\t<item>IsNearAdditiveElementWithInverseCollection</item>\n\t\t\t<item>IsNearAdditiveElementWithInverseList</item>\n\t\t\t<item>IsNearAdditiveElementWithInverseTable</item>\n\t\t\t<item>IsNearAdditiveElementWithZero</item>\n\t\t\t<item>IsNearAdditiveElementWithZeroCollColl</item>\n\t\t\t<item>IsNearAdditiveElementWithZeroCollCollColl</item>\n\t\t\t<item>IsNearAdditiveElementWithZeroCollection</item>\n\t\t\t<item>IsNearAdditiveElementWithZeroList</item>\n\t\t\t<item>IsNearAdditiveElementWithZeroTable</item>\n\t\t\t<item>IsNearAdditiveGroup</item>\n\t\t\t<item>IsNearAdditiveMagma</item>\n\t\t\t<item>IsNearAdditiveMagmaWithInverses</item>\n\t\t\t<item>IsNearAdditiveMagmaWithZero</item>\n\t\t\t<item>IsNearRing</item>\n\t\t\t<item>IsNearRingElement</item>\n\t\t\t<item>IsNearRingElementCollColl</item>\n\t\t\t<item>IsNearRingElementCollCollColl</item>\n\t\t\t<item>IsNearRingElementCollection</item>\n\t\t\t<item>IsNearRingElementFamily</item>\n\t\t\t<item>IsNearRingElementList</item>\n\t\t\t<item>IsNearRingElementTable</item>\n\t\t\t<item>IsNearRingElementWithInverse</item>\n\t\t\t<item>IsNearRingElementWithInverseCollColl</item>\n\t\t\t<item>IsNearRingElementWithInverseCollCollColl</item>\n\t\t\t<item>IsNearRingElementWithInverseCollection</item>\n\t\t\t<item>IsNearRingElementWithInverseList</item>\n\t\t\t<item>IsNearRingElementWithInverseTable</item>\n\t\t\t<item>IsNearRingElementWithOne</item>\n\t\t\t<item>IsNearRingElementWithOneCollColl</item>\n\t\t\t<item>IsNearRingElementWithOneCollCollColl</item>\n\t\t\t<item>IsNearRingElementWithOneCollection</item>\n\t\t\t<item>IsNearRingElementWithOneList</item>\n\t\t\t<item>IsNearRingElementWithOneTable</item>\n\t\t\t<item>IsNearRingWithOne</item>\n\t\t\t<item>IsNearlyCharacterTable</item>\n\t\t\t<item>IsNegInt</item>\n\t\t\t<item>IsNegRat</item>\n\t\t\t<item>IsNiceMonomorphism</item>\n\t\t\t<item>IsNilpQuotientSystem</item>\n\t\t\t<item>IsNilpotent</item>\n\t\t\t<item>IsNilpotentCharacterTable</item>\n\t\t\t<item>IsNilpotentElement</item>\n\t\t\t<item>IsNilpotentGroup</item>\n\t\t\t<item>IsNilpotentTom</item>\n\t\t\t<item>IsNoImmediateMethodsObject</item>\n\t\t\t<item>IsNonGaussianMatrixSpace</item>\n\t\t\t<item>IsNonGaussianRowSpace</item>\n\t\t\t<item>IsNonSPGeneralMapping</item>\n\t\t\t<item>IsNonSPMappingByFunctionRep</item>\n\t\t\t<item>IsNonSPMappingByFunctionWithInverseRep</item>\n\t\t\t<item>IsNonTrivial</item>\n\t\t\t<item>IsNonassocWord</item>\n\t\t\t<item>IsNonassocWordCollection</item>\n\t\t\t<item>IsNonassocWordFamily</item>\n\t\t\t<item>IsNonassocWordWithOne</item>\n\t\t\t<item>IsNonassocWordWithOneCollection</item>\n\t\t\t<item>IsNonassocWordWithOneFamily</item>\n\t\t\t<item>IsNoncharacteristicMatrixPGroup</item>\n\t\t\t<item>IsNonnegativeIntegers</item>\n\t\t\t<item>IsNormal</item>\n\t\t\t<item>IsNormalBasis</item>\n\t\t\t<item>IsNormalForm</item>\n\t\t\t<item>IsNormalInParent</item>\n\t\t\t<item>IsNormalOp</item>\n\t\t\t<item>IsNotElmsColls</item>\n\t\t\t<item>IsNotIdenticalObj</item>\n\t\t\t<item>IsNullMapMatrix</item>\n\t\t\t<item>IsNumberField</item>\n\t\t\t<item>IsNumeratorParentForExponentsRep</item>\n\t\t\t<item>IsNumeratorParentPcgsFamilyPcgs</item>\n\t\t\t<item>IsObjToBePrinted</item>\n\t\t\t<item>IsObject</item>\n\t\t\t<item>IsOddAdditiveNestingDepthFamily</item>\n\t\t\t<item>IsOddAdditiveNestingDepthObject</item>\n\t\t\t<item>IsOddInt</item>\n\t\t\t<item>IsOne</item>\n\t\t\t<item>IsOperation</item>\n\t\t\t<item>IsOperationAlgebraHomomorphismDefaultRep</item>\n\t\t\t<item>IsOrdering</item>\n\t\t\t<item>IsOrderingOnFamilyOfAssocWords</item>\n\t\t\t<item>IsOrdinaryMatrix</item>\n\t\t\t<item>IsOrdinaryMatrixCollection</item>\n\t\t\t<item>IsOrdinaryTable</item>\n\t\t\t<item>IsOutputStream</item>\n\t\t\t<item>IsOutputTextFileRep</item>\n\t\t\t<item>IsOutputTextNone</item>\n\t\t\t<item>IsOutputTextNoneRep</item>\n\t\t\t<item>IsOutputTextStream</item>\n\t\t\t<item>IsOutputTextStringRep</item>\n\t\t\t<item>IsPGroup</item>\n\t\t\t<item>IsPNilpotent</item>\n\t\t\t<item>IsPNilpotentOp</item>\n\t\t\t<item>IsPQuotientSystem</item>\n\t\t\t<item>IsPSL</item>\n\t\t\t<item>IsPSolvable</item>\n\t\t\t<item>IsPSolvableCharacterTable</item>\n\t\t\t<item>IsPSolvableCharacterTableOp</item>\n\t\t\t<item>IsPSolvableOp</item>\n\t\t\t<item>IsPackedElementDefaultRep</item>\n\t\t\t<item>IsPadicExtensionNumber</item>\n\t\t\t<item>IsPadicExtensionNumberFamily</item>\n\t\t\t<item>IsPadicNumber</item>\n\t\t\t<item>IsPadicNumberCollColl</item>\n\t\t\t<item>IsPadicNumberCollection</item>\n\t\t\t<item>IsPadicNumberFamily</item>\n\t\t\t<item>IsPadicNumberList</item>\n\t\t\t<item>IsPadicNumberTable</item>\n\t\t\t<item>IsParentPcgsFamilyPcgs</item>\n\t\t\t<item>IsPartialOrderBinaryRelation</item>\n\t\t\t<item>IsPartition</item>\n\t\t\t<item>IsPcGroup</item>\n\t\t\t<item>IsPcGroupGeneralMappingByImages</item>\n\t\t\t<item>IsPcGroupHomomorphismByImages</item>\n\t\t\t<item>IsPcgs</item>\n\t\t\t<item>IsPcgsCentralSeries</item>\n\t\t\t<item>IsPcgsChiefSeries</item>\n\t\t\t<item>IsPcgsDefaultRep</item>\n\t\t\t<item>IsPcgsElementaryAbelianSeries</item>\n\t\t\t<item>IsPcgsFamily</item>\n\t\t\t<item>IsPcgsPCentralSeriesPGroup</item>\n\t\t\t<item>IsPcgsPermGroupRep</item>\n\t\t\t<item>IsPcgsToPcgsGeneralMappingByImages</item>\n\t\t\t<item>IsPcgsToPcgsHomomorphism</item>\n\t\t\t<item>IsPerfect</item>\n\t\t\t<item>IsPerfectCharacterTable</item>\n\t\t\t<item>IsPerfectGroup</item>\n\t\t\t<item>IsPerfectLibraryGroup</item>\n\t\t\t<item>IsPerfectTom</item>\n\t\t\t<item>IsPerm</item>\n\t\t\t<item>IsPermCollColl</item>\n\t\t\t<item>IsPermCollection</item>\n\t\t\t<item>IsPermGroup</item>\n\t\t\t<item>IsPermGroupGeneralMappingByImages</item>\n\t\t\t<item>IsPermGroupHomomorphismByImages</item>\n\t\t\t<item>IsPermOnEnumerator</item>\n\t\t\t<item>IsPlistRep</item>\n\t\t\t<item>IsPolycyclicCollector</item>\n\t\t\t<item>IsPolycyclicGroup</item>\n\t\t\t<item>IsPolynomial</item>\n\t\t\t<item>IsPolynomialDefaultRep</item>\n\t\t\t<item>IsPolynomialFunction</item>\n\t\t\t<item>IsPolynomialFunctionCollection</item>\n\t\t\t<item>IsPolynomialFunctionsFamily</item>\n\t\t\t<item>IsPolynomialFunctionsFamilyElement</item>\n\t\t\t<item>IsPolynomialRing</item>\n\t\t\t<item>IsPolynomialRingIdeal</item>\n\t\t\t<item>IsPosInt</item>\n\t\t\t<item>IsPosRat</item>\n\t\t\t<item>IsPositionDictionary</item>\n\t\t\t<item>IsPositionLookupDictionary</item>\n\t\t\t<item>IsPositionalObjectRep</item>\n\t\t\t<item>IsPositionsList</item>\n\t\t\t<item>IsPositiveIntegers</item>\n\t\t\t<item>IsPowerCommutatorCollector</item>\n\t\t\t<item>IsPowerConjugateCollector</item>\n\t\t\t<item>IsPreOrderBinaryRelation</item>\n\t\t\t<item>IsPreimagesByAsGroupGeneralMappingByImages</item>\n\t\t\t<item>IsPresentation</item>\n\t\t\t<item>IsPresentationDefaultRep</item>\n\t\t\t<item>IsPrimGrpIterRep</item>\n\t\t\t<item>IsPrime</item>\n\t\t\t<item>IsPrimeField</item>\n\t\t\t<item>IsPrimeInt</item>\n\t\t\t<item>IsPrimeOrdersPcgs</item>\n\t\t\t<item>IsPrimePowerInt</item>\n\t\t\t<item>IsPrimitive</item>\n\t\t\t<item>IsPrimitiveAffine</item>\n\t\t\t<item>IsPrimitiveCharacter</item>\n\t\t\t<item>IsPrimitiveMatrixGroup</item>\n\t\t\t<item>IsPrimitivePolynomial</item>\n\t\t\t<item>IsPrimitiveRootMod</item>\n\t\t\t<item>IsProbablyPrimeInt</item>\n\t\t\t<item>IsProbablyPrimeIntWithFail</item>\n\t\t\t<item>IsProjectionDirectProductPermGroup</item>\n\t\t\t<item>IsProjectionSubdirectProductPermGroup</item>\n\t\t\t<item>IsPseudoCanonicalBasisFullHomModule</item>\n\t\t\t<item>IsPurePadicNumber</item>\n\t\t\t<item>IsPurePadicNumberFamily</item>\n\t\t\t<item>IsQuasiDihedralGroup</item>\n\t\t\t<item>IsQuasiPrimitive</item>\n\t\t\t<item>IsQuaternion</item>\n\t\t\t<item>IsQuaternionCollColl</item>\n\t\t\t<item>IsQuaternionCollection</item>\n\t\t\t<item>IsQuaternionGroup</item>\n\t\t\t<item>IsQuickPositionList</item>\n\t\t\t<item>IsQuotientSemigroup</item>\n\t\t\t<item>IsQuotientSystem</item>\n\t\t\t<item>IsQuotientToAdditiveGroup</item>\n\t\t\t<item>IsQuotientToFpGroup</item>\n\t\t\t<item>IsQuotientToMatrixGroup</item>\n\t\t\t<item>IsQuotientToPermGroup</item>\n\t\t\t<item>IsQuotientToTupleGroup</item>\n\t\t\t<item>IsRDistributive</item>\n\t\t\t<item>IsRange</item>\n\t\t\t<item>IsRangeRep</item>\n\t\t\t<item>IsRat</item>\n\t\t\t<item>IsRationalClassGroupRep</item>\n\t\t\t<item>IsRationalClassPermGroupRep</item>\n\t\t\t<item>IsRationalFunction</item>\n\t\t\t<item>IsRationalFunctionCollection</item>\n\t\t\t<item>IsRationalFunctionDefaultRep</item>\n\t\t\t<item>IsRationalFunctionOverField</item>\n\t\t\t<item>IsRationalFunctionsFamily</item>\n\t\t\t<item>IsRationalFunctionsFamilyElement</item>\n\t\t\t<item>IsRationalMatrixGroup</item>\n\t\t\t<item>IsRationals</item>\n\t\t\t<item>IsRationalsPolynomialRing</item>\n\t\t\t<item>IsReadOnlyGVar</item>\n\t\t\t<item>IsReadOnlyGlobal</item>\n\t\t\t<item>IsReadableFile</item>\n\t\t\t<item>IsRecord</item>\n\t\t\t<item>IsRecordCollColl</item>\n\t\t\t<item>IsRecordCollection</item>\n\t\t\t<item>IsRectangularTable</item>\n\t\t\t<item>IsRectangularTablePlist</item>\n\t\t\t<item>IsReduced</item>\n\t\t\t<item>IsReducedConfluentRewritingSystem</item>\n\t\t\t<item>IsReducedForm</item>\n\t\t\t<item>IsReductionOrdering</item>\n\t\t\t<item>IsReesCongruence</item>\n\t\t\t<item>IsReesCongruenceSemigroup</item>\n\t\t\t<item>IsReesMatrixSemigroup</item>\n\t\t\t<item>IsReesMatrixSemigroupElement</item>\n\t\t\t<item>IsReesMatrixSemigroupElementCollection</item>\n\t\t\t<item>IsReesMatrixSemigroupElementRep</item>\n\t\t\t<item>IsReesZeroMatrixSemigroup</item>\n\t\t\t<item>IsReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>IsReesZeroMatrixSemigroupElementCollection</item>\n\t\t\t<item>IsReflexiveBinaryRelation</item>\n\t\t\t<item>IsRegular</item>\n\t\t\t<item>IsRegularDClass</item>\n\t\t\t<item>IsRegularSemigroup</item>\n\t\t\t<item>IsRegularSemigroupElement</item>\n\t\t\t<item>IsRelativeBasisDefaultRep</item>\n\t\t\t<item>IsRelativelySM</item>\n\t\t\t<item>IsRestrictedLieAlgebra</item>\n\t\t\t<item>IsRewritingSystem</item>\n\t\t\t<item>IsRightActedOnByDivisionRing</item>\n\t\t\t<item>IsRightActedOnByRing</item>\n\t\t\t<item>IsRightActedOnBySuperset</item>\n\t\t\t<item>IsRightAlgebraModule</item>\n\t\t\t<item>IsRightAlgebraModuleElement</item>\n\t\t\t<item>IsRightAlgebraModuleElementCollection</item>\n\t\t\t<item>IsRightCoset</item>\n\t\t\t<item>IsRightCosetDefaultRep</item>\n\t\t\t<item>IsRightIdeal</item>\n\t\t\t<item>IsRightIdealFromGenerators</item>\n\t\t\t<item>IsRightIdealInParent</item>\n\t\t\t<item>IsRightIdealOp</item>\n\t\t\t<item>IsRightMagmaCongruence</item>\n\t\t\t<item>IsRightMagmaIdeal</item>\n\t\t\t<item>IsRightModule</item>\n\t\t\t<item>IsRightOperatorAdditiveGroup</item>\n\t\t\t<item>IsRightSemigroupCongruence</item>\n\t\t\t<item>IsRightSemigroupIdeal</item>\n\t\t\t<item>IsRightTransversal</item>\n\t\t\t<item>IsRightTransversalCollection</item>\n\t\t\t<item>IsRightTransversalFpGroupRep</item>\n\t\t\t<item>IsRightTransversalPcGroupRep</item>\n\t\t\t<item>IsRightTransversalPermGroupRep</item>\n\t\t\t<item>IsRightTransversalRep</item>\n\t\t\t<item>IsRightTransversalViaCosetsRep</item>\n\t\t\t<item>IsRing</item>\n\t\t\t<item>IsRingCollsMagmaRingColls</item>\n\t\t\t<item>IsRingElement</item>\n\t\t\t<item>IsRingElementCollColl</item>\n\t\t\t<item>IsRingElementCollCollColl</item>\n\t\t\t<item>IsRingElementCollection</item>\n\t\t\t<item>IsRingElementFamily</item>\n\t\t\t<item>IsRingElementList</item>\n\t\t\t<item>IsRingElementTable</item>\n\t\t\t<item>IsRingElementWithInverse</item>\n\t\t\t<item>IsRingElementWithInverseCollColl</item>\n\t\t\t<item>IsRingElementWithInverseCollCollColl</item>\n\t\t\t<item>IsRingElementWithInverseCollection</item>\n\t\t\t<item>IsRingElementWithInverseList</item>\n\t\t\t<item>IsRingElementWithInverseTable</item>\n\t\t\t<item>IsRingElementWithOne</item>\n\t\t\t<item>IsRingElementWithOneCollColl</item>\n\t\t\t<item>IsRingElementWithOneCollCollColl</item>\n\t\t\t<item>IsRingElementWithOneCollection</item>\n\t\t\t<item>IsRingElementWithOneList</item>\n\t\t\t<item>IsRingElementWithOneTable</item>\n\t\t\t<item>IsRingGeneralMapping</item>\n\t\t\t<item>IsRingHomomorphism</item>\n\t\t\t<item>IsRingWithOne</item>\n\t\t\t<item>IsRingWithOneGeneralMapping</item>\n\t\t\t<item>IsRingWithOneHomomorphism</item>\n\t\t\t<item>IsRingsMagmaRings</item>\n\t\t\t<item>IsRootSystem</item>\n\t\t\t<item>IsRootSystemFromLieAlgebra</item>\n\t\t\t<item>IsRowModule</item>\n\t\t\t<item>IsRowSpace</item>\n\t\t\t<item>IsRowVector</item>\n\t\t\t<item>IsSCAlgebraObj</item>\n\t\t\t<item>IsSCAlgebraObjCollColl</item>\n\t\t\t<item>IsSCAlgebraObjCollCollColl</item>\n\t\t\t<item>IsSCAlgebraObjCollection</item>\n\t\t\t<item>IsSCAlgebraObjFamily</item>\n\t\t\t<item>IsSCAlgebraObjSpace</item>\n\t\t\t<item>IsSL</item>\n\t\t\t<item>IsSPGeneralMapping</item>\n\t\t\t<item>IsSPMappingByFunctionRep</item>\n\t\t\t<item>IsSPMappingByFunctionWithInverseRep</item>\n\t\t\t<item>IsSSortedList</item>\n\t\t\t<item>IsScalar</item>\n\t\t\t<item>IsScalarCollColl</item>\n\t\t\t<item>IsScalarCollection</item>\n\t\t\t<item>IsScalarList</item>\n\t\t\t<item>IsScalarTable</item>\n\t\t\t<item>IsSearchTable</item>\n\t\t\t<item>IsSemiEchelonBasisOfGaussianMatrixSpaceRep</item>\n\t\t\t<item>IsSemiEchelonBasisOfGaussianRowSpaceRep</item>\n\t\t\t<item>IsSemiEchelonized</item>\n\t\t\t<item>IsSemiRegular</item>\n\t\t\t<item>IsSemigroup</item>\n\t\t\t<item>IsSemigroupCongruence</item>\n\t\t\t<item>IsSemigroupIdeal</item>\n\t\t\t<item>IsSemiring</item>\n\t\t\t<item>IsSemiringWithOne</item>\n\t\t\t<item>IsSemiringWithOneAndZero</item>\n\t\t\t<item>IsSemiringWithZero</item>\n\t\t\t<item>IsSet</item>\n\t\t\t<item>IsShortLexLessThanOrEqual</item>\n\t\t\t<item>IsShortLexOrdering</item>\n\t\t\t<item>IsSimple</item>\n\t\t\t<item>IsSimpleAlgebra</item>\n\t\t\t<item>IsSimpleCharacterTable</item>\n\t\t\t<item>IsSimpleGroup</item>\n\t\t\t<item>IsSimpleSemigroup</item>\n\t\t\t<item>IsSingleCollectorRep</item>\n\t\t\t<item>IsSingleValued</item>\n\t\t\t<item>IsSkewFieldFamily</item>\n\t\t\t<item>IsSlicedPerm</item>\n\t\t\t<item>IsSlicedPermInv</item>\n\t\t\t<item>IsSmallIntRep</item>\n\t\t\t<item>IsSmallList</item>\n\t\t\t<item>IsSolvable</item>\n\t\t\t<item>IsSolvableCharacterTable</item>\n\t\t\t<item>IsSolvableGroup</item>\n\t\t\t<item>IsSolvableTom</item>\n\t\t\t<item>IsSortDictionary</item>\n\t\t\t<item>IsSortLookupDictionary</item>\n\t\t\t<item>IsSortedList</item>\n\t\t\t<item>IsSortedPcgsRep</item>\n\t\t\t<item>IsSpaceOfElementsOfMagmaRing</item>\n\t\t\t<item>IsSpaceOfRationalFunctions</item>\n\t\t\t<item>IsSpaceOfUEAElements</item>\n\t\t\t<item>IsSparseHashRep</item>\n\t\t\t<item>IsSparseRowSpaceElement</item>\n\t\t\t<item>IsSparseRowSpaceElementCollection</item>\n\t\t\t<item>IsSparseRowSpaceElementFamily</item>\n\t\t\t<item>IsSpecialLinearGroup</item>\n\t\t\t<item>IsSpecialPcgs</item>\n\t\t\t<item>IsSporadicSimple</item>\n\t\t\t<item>IsSporadicSimpleCharacterTable</item>\n\t\t\t<item>IsSporadicSimpleGroup</item>\n\t\t\t<item>IsStabChainViaChainSubgroup</item>\n\t\t\t<item>IsStandardGeneratorsOfGroup</item>\n\t\t\t<item>IsStandardized</item>\n\t\t\t<item>IsStraightLineProgElm</item>\n\t\t\t<item>IsStraightLineProgram</item>\n\t\t\t<item>IsStream</item>\n\t\t\t<item>IsString</item>\n\t\t\t<item>IsStringRep</item>\n\t\t\t<item>IsSubalgebraFpAlgebra</item>\n\t\t\t<item>IsSubgroup</item>\n\t\t\t<item>IsSubgroupFgGroup</item>\n\t\t\t<item>IsSubgroupFpGroup</item>\n\t\t\t<item>IsSubgroupOfWholeGroupByQuotientRep</item>\n\t\t\t<item>IsSubgroupSL</item>\n\t\t\t<item>IsSubmonoidFpMonoid</item>\n\t\t\t<item>IsSubnormal</item>\n\t\t\t<item>IsSubnormallyMonomial</item>\n\t\t\t<item>IsSubsemigroupFpSemigroup</item>\n\t\t\t<item>IsSubsemigroupReesMatrixSemigroup</item>\n\t\t\t<item>IsSubsemigroupReesZeroMatrixSemigroup</item>\n\t\t\t<item>IsSubset</item>\n\t\t\t<item>IsSubsetBlist</item>\n\t\t\t<item>IsSubsetInducedNumeratorModuloTailPcgsRep</item>\n\t\t\t<item>IsSubsetInducedPcgsRep</item>\n\t\t\t<item>IsSubsetLocallyFiniteGroup</item>\n\t\t\t<item>IsSubsetSet</item>\n\t\t\t<item>IsSubspace</item>\n\t\t\t<item>IsSubspacesFullRowSpaceDefaultRep</item>\n\t\t\t<item>IsSubspacesVectorSpace</item>\n\t\t\t<item>IsSubspacesVectorSpaceDefaultRep</item>\n\t\t\t<item>IsSupersolvable</item>\n\t\t\t<item>IsSupersolvableCharacterTable</item>\n\t\t\t<item>IsSupersolvableGroup</item>\n\t\t\t<item>IsSurjective</item>\n\t\t\t<item>IsSyllableAssocWordRep</item>\n\t\t\t<item>IsSyllableWordsFamily</item>\n\t\t\t<item>IsSymmetricBinaryRelation</item>\n\t\t\t<item>IsSymmetricGroup</item>\n\t\t\t<item>IsSymmetricPowerElement</item>\n\t\t\t<item>IsSymmetricPowerElementCollection</item>\n\t\t\t<item>IsTable</item>\n\t\t\t<item>IsTableOfMarks</item>\n\t\t\t<item>IsTableOfMarksWithGens</item>\n\t\t\t<item>IsTailInducedPcgsRep</item>\n\t\t\t<item>IsTensorElement</item>\n\t\t\t<item>IsTensorElementCollection</item>\n\t\t\t<item>IsToBeDefinedObj</item>\n\t\t\t<item>IsToFpGroupGeneralMappingByImages</item>\n\t\t\t<item>IsToFpGroupHomomorphismByImages</item>\n\t\t\t<item>IsToPcGroupGeneralMappingByImages</item>\n\t\t\t<item>IsToPcGroupHomomorphismByImages</item>\n\t\t\t<item>IsToPermGroupGeneralMappingByImages</item>\n\t\t\t<item>IsToPermGroupHomomorphismByImages</item>\n\t\t\t<item>IsTotal</item>\n\t\t\t<item>IsTotalOrdering</item>\n\t\t\t<item>IsTransformation</item>\n\t\t\t<item>IsTransformationCollection</item>\n\t\t\t<item>IsTransformationMonoid</item>\n\t\t\t<item>IsTransformationRep</item>\n\t\t\t<item>IsTransformationRepOfEndo</item>\n\t\t\t<item>IsTransformationSemigroup</item>\n\t\t\t<item>IsTransitive</item>\n\t\t\t<item>IsTransitiveBinaryRelation</item>\n\t\t\t<item>IsTranslationInvariantOrdering</item>\n\t\t\t<item>IsTransvByDirProd</item>\n\t\t\t<item>IsTransvByDirProdCollection</item>\n\t\t\t<item>IsTransvByHomomorphism</item>\n\t\t\t<item>IsTransvByHomomorphismCollection</item>\n\t\t\t<item>IsTransvBySchreierTree</item>\n\t\t\t<item>IsTransvBySchreierTreeCollection</item>\n\t\t\t<item>IsTransvBySiftFunct</item>\n\t\t\t<item>IsTransvBySiftFunctCollection</item>\n\t\t\t<item>IsTransvByTrivSubgrp</item>\n\t\t\t<item>IsTransvByTrivSubgrpCollection</item>\n\t\t\t<item>IsTrivial</item>\n\t\t\t<item>IsTrivialAOpEZero</item>\n\t\t\t<item>IsTrivialHomCoset</item>\n\t\t\t<item>IsTrivialLOpEOne</item>\n\t\t\t<item>IsTrivialLOpEZero</item>\n\t\t\t<item>IsTrivialRBase</item>\n\t\t\t<item>IsTrivialROpEOne</item>\n\t\t\t<item>IsTrivialROpEZero</item>\n\t\t\t<item>IsTrivialUOpEOne</item>\n\t\t\t<item>IsTrivialUOpEZero</item>\n\t\t\t<item>IsTuple</item>\n\t\t\t<item>IsTupleCollection</item>\n\t\t\t<item>IsTupleFamily</item>\n\t\t\t<item>IsTwoSidedIdeal</item>\n\t\t\t<item>IsTwoSidedIdealInParent</item>\n\t\t\t<item>IsTwoSidedIdealOp</item>\n\t\t\t<item>IsType</item>\n\t\t\t<item>IsTypeDefaultRep</item>\n\t\t\t<item>IsUEALatticeElement</item>\n\t\t\t<item>IsUEALatticeElementCollection</item>\n\t\t\t<item>IsUEALatticeElementFamily</item>\n\t\t\t<item>IsUFDFamily</item>\n\t\t\t<item>IsUniformMatrixGroup</item>\n\t\t\t<item>IsUniqueFactorizationRing</item>\n\t\t\t<item>IsUnit</item>\n\t\t\t<item>IsUnivariatePolynomial</item>\n\t\t\t<item>IsUnivariatePolynomialRing</item>\n\t\t\t<item>IsUnivariatePolynomialsFamily</item>\n\t\t\t<item>IsUnivariatePolynomialsFamilyElement</item>\n\t\t\t<item>IsUnivariateRationalFunction</item>\n\t\t\t<item>IsUnivariateRationalFunctionDefaultRep</item>\n\t\t\t<item>IsUnknown</item>\n\t\t\t<item>IsUnknownDefaultRep</item>\n\t\t\t<item>IsUnsortedPcgsRep</item>\n\t\t\t<item>IsUpToDatePolycyclicCollector</item>\n\t\t\t<item>IsUpperActedOnByGroup</item>\n\t\t\t<item>IsUpperActedOnBySuperset</item>\n\t\t\t<item>IsUpperAlphaChar</item>\n\t\t\t<item>IsUpperTriangularMat</item>\n\t\t\t<item>IsValidIdentifier</item>\n\t\t\t<item>IsVector</item>\n\t\t\t<item>IsVectorCollColl</item>\n\t\t\t<item>IsVectorCollection</item>\n\t\t\t<item>IsVectorList</item>\n\t\t\t<item>IsVectorSearchTable</item>\n\t\t\t<item>IsVectorSearchTableDefaultRep</item>\n\t\t\t<item>IsVectorSpace</item>\n\t\t\t<item>IsVectorSpaceHomomorphism</item>\n\t\t\t<item>IsVectorTable</item>\n\t\t\t<item>IsVirtualCharacter</item>\n\t\t\t<item>IsWLetterAssocWordRep</item>\n\t\t\t<item>IsWLetterWordsFamily</item>\n\t\t\t<item>IsWPObj</item>\n\t\t\t<item>IsWeakPointerObject</item>\n\t\t\t<item>IsWedgeElement</item>\n\t\t\t<item>IsWedgeElementCollection</item>\n\t\t\t<item>IsWeightLexOrdering</item>\n\t\t\t<item>IsWeightRepElement</item>\n\t\t\t<item>IsWeightRepElementCollection</item>\n\t\t\t<item>IsWeightRepElementFamily</item>\n\t\t\t<item>IsWellFoundedOrdering</item>\n\t\t\t<item>IsWeylGroup</item>\n\t\t\t<item>IsWholeFamily</item>\n\t\t\t<item>IsWord</item>\n\t\t\t<item>IsWordCollection</item>\n\t\t\t<item>IsWordWithInverse</item>\n\t\t\t<item>IsWordWithOne</item>\n\t\t\t<item>IsWreathProductElement</item>\n\t\t\t<item>IsWreathProductElementCollection</item>\n\t\t\t<item>IsWreathProductElementDefaultRep</item>\n\t\t\t<item>IsWreathProductOrdering</item>\n\t\t\t<item>IsWritableFile</item>\n\t\t\t<item>IsZDFRE</item>\n\t\t\t<item>IsZDFRECollColl</item>\n\t\t\t<item>IsZDFRECollection</item>\n\t\t\t<item>IsZero</item>\n\t\t\t<item>IsZeroCochainRep</item>\n\t\t\t<item>IsZeroCyc</item>\n\t\t\t<item>IsZeroGroup</item>\n\t\t\t<item>IsZeroMultiplicationRing</item>\n\t\t\t<item>IsZeroRationalFunction</item>\n\t\t\t<item>IsZeroSimpleSemigroup</item>\n\t\t\t<item>IsZeroSquaredElement</item>\n\t\t\t<item>IsZeroSquaredElementCollColl</item>\n\t\t\t<item>IsZeroSquaredElementCollection</item>\n\t\t\t<item>IsZeroSquaredRing</item>\n\t\t\t<item>IsZmodnZObj</item>\n\t\t\t<item>IsZmodnZObjNonprime</item>\n\t\t\t<item>IsZmodnZObjNonprimeCollColl</item>\n\t\t\t<item>IsZmodnZObjNonprimeCollCollColl</item>\n\t\t\t<item>IsZmodnZObjNonprimeCollection</item>\n\t\t\t<item>IsZmodnZObjNonprimeFamily</item>\n\t\t\t<item>IsZmodpZObj</item>\n\t\t\t<item>IsZmodpZObjLarge</item>\n\t\t\t<item>IsZmodpZObjSmall</item>\n\t\t\t<item>IsolatePoint</item>\n\t\t\t<item>IsomorphicSubgroups</item>\n\t\t\t<item>IsomorphismAbelianGroups</item>\n\t\t\t<item>IsomorphismFpAlgebra</item>\n\t\t\t<item>IsomorphismFpFLMLOR</item>\n\t\t\t<item>IsomorphismFpGroup</item>\n\t\t\t<item>IsomorphismFpGroupByCompositionSeries</item>\n\t\t\t<item>IsomorphismFpGroupByGenerators</item>\n\t\t\t<item>IsomorphismFpGroupByGeneratorsNC</item>\n\t\t\t<item>IsomorphismFpGroupByPcgs</item>\n\t\t\t<item>IsomorphismFpGroupBySubnormalSeries</item>\n\t\t\t<item>IsomorphismFpMonoid</item>\n\t\t\t<item>IsomorphismFpSemigroup</item>\n\t\t\t<item>IsomorphismGroups</item>\n\t\t\t<item>IsomorphismMatrixAlgebra</item>\n\t\t\t<item>IsomorphismMatrixFLMLOR</item>\n\t\t\t<item>IsomorphismPcGroup</item>\n\t\t\t<item>IsomorphismPermGroup</item>\n\t\t\t<item>IsomorphismPermGroupImfGroup</item>\n\t\t\t<item>IsomorphismPermGroupOrFailFpGroup</item>\n\t\t\t<item>IsomorphismPermGroups</item>\n\t\t\t<item>IsomorphismReesMatrixSemigroup</item>\n\t\t\t<item>IsomorphismRefinedPcGroup</item>\n\t\t\t<item>IsomorphismSCAlgebra</item>\n\t\t\t<item>IsomorphismSCFLMLOR</item>\n\t\t\t<item>IsomorphismSimplifiedFpGroup</item>\n\t\t\t<item>IsomorphismSolvableSmallGroups</item>\n\t\t\t<item>IsomorphismSpecialPcGroup</item>\n\t\t\t<item>IsomorphismToFullRowSpace</item>\n\t\t\t<item>IsomorphismTransformationSemigroup</item>\n\t\t\t<item>IsomorphismTypeInfoFiniteSimpleGroup</item>\n\t\t\t<item>Iterated</item>\n\t\t\t<item>Iterator</item>\n\t\t\t<item>IteratorByBasis</item>\n\t\t\t<item>IteratorByFunctions</item>\n\t\t\t<item>IteratorList</item>\n\t\t\t<item>IteratorSorted</item>\n\t\t\t<item>IteratorsFamily</item>\n\t\t\t<item>Jacobi</item>\n\t\t\t<item>JenningsLieAlgebra</item>\n\t\t\t<item>JenningsSeries</item>\n\t\t\t<item>JoinEquivalenceRelations</item>\n\t\t\t<item>JoinMagmaCongruences</item>\n\t\t\t<item>JoinSemigroupCongruences</item>\n\t\t\t<item>JoinStringsWithSeparator</item>\n\t\t\t<item>JordanDecomposition</item>\n\t\t\t<item>KBOverlaps</item>\n\t\t\t<item>KappaPerp</item>\n\t\t\t<item>Kernel</item>\n\t\t\t<item>KernelHcommaC</item>\n\t\t\t<item>KernelOfAdditiveGeneralMapping</item>\n\t\t\t<item>KernelOfCharacter</item>\n\t\t\t<item>KernelOfHomQuotientGroup</item>\n\t\t\t<item>KernelOfMultiplicativeGeneralMapping</item>\n\t\t\t<item>KernelOfTransformation</item>\n\t\t\t<item>KernelUnderDualAction</item>\n\t\t\t<item>KeyDependentOperation</item>\n\t\t\t<item>KillingMatrix</item>\n\t\t\t<item>KnownAttributesOfObject</item>\n\t\t\t<item>KnownNaturalHomomorphismsPool</item>\n\t\t\t<item>KnownPropertiesOfObject</item>\n\t\t\t<item>KnownTruePropertiesOfObject</item>\n\t\t\t<item>KnowsDictionary</item>\n\t\t\t<item>KnowsHowToDecompose</item>\n\t\t\t<item>KnuthBendixRewritingSystem</item>\n\t\t\t<item>KroneckerProduct</item>\n\t\t\t<item>KuKGenerators</item>\n\t\t\t<item>LClassOfHClass</item>\n\t\t\t<item>LGFirst</item>\n\t\t\t<item>LGHeads</item>\n\t\t\t<item>LGLayers</item>\n\t\t\t<item>LGLength</item>\n\t\t\t<item>LGTails</item>\n\t\t\t<item>LGWeights</item>\n\t\t\t<item>LLLReducedBasis</item>\n\t\t\t<item>LLLReducedGramMat</item>\n\t\t\t<item>LLLint</item>\n\t\t\t<item>LMPSLPSeed</item>\n\t\t\t<item>LaTeX</item>\n\t\t\t<item>LaTeXObj</item>\n\t\t\t<item>LaTeXStringDecompositionMatrix</item>\n\t\t\t<item>LaTeXToHTMLString</item>\n\t\t\t<item>LabsLims</item>\n\t\t\t<item>Lambda</item>\n\t\t\t<item>LargeGaloisField</item>\n\t\t\t<item>LargestElementGroup</item>\n\t\t\t<item>LargestElementStabChain</item>\n\t\t\t<item>LargestMovedPoint</item>\n\t\t\t<item>LargestMovedPointPerm</item>\n\t\t\t<item>LargestMovedPointPerms</item>\n\t\t\t<item>LargestUnknown</item>\n\t\t\t<item>LastHashIndex</item>\n\t\t\t<item>LastReadValue</item>\n\t\t\t<item>LastSystemError</item>\n\t\t\t<item>LatticeByCyclicExtension</item>\n\t\t\t<item>LatticeGeneratorsInUEA</item>\n\t\t\t<item>LatticeSubgroups</item>\n\t\t\t<item>LatticeSubgroupsByTom</item>\n\t\t\t<item>LaurentPolynomialByCoefficients</item>\n\t\t\t<item>LaurentPolynomialByExtRep</item>\n\t\t\t<item>Lcm</item>\n\t\t\t<item>LcmInt</item>\n\t\t\t<item>LcmOp</item>\n\t\t\t<item>LcmPP</item>\n\t\t\t<item>LeadCoeffsIGS</item>\n\t\t\t<item>LeadingCoefficient</item>\n\t\t\t<item>LeadingCoefficientOfPolynomial</item>\n\t\t\t<item>LeadingExponentOfPcElement</item>\n\t\t\t<item>LeadingMonomial</item>\n\t\t\t<item>LeadingMonomialOfPolynomial</item>\n\t\t\t<item>LeadingMonomialPosExtRep</item>\n\t\t\t<item>LeadingTermOfPolynomial</item>\n\t\t\t<item>LeadingUEALatticeMonomial</item>\n\t\t\t<item>LeastBadComplementLayer</item>\n\t\t\t<item>LeastBadHallLayer</item>\n\t\t\t<item>LeftActingAlgebra</item>\n\t\t\t<item>LeftActingDomain</item>\n\t\t\t<item>LeftActingGroup</item>\n\t\t\t<item>LeftActingRingOfIdeal</item>\n\t\t\t<item>LeftAction</item>\n\t\t\t<item>LeftAlgebraModule</item>\n\t\t\t<item>LeftAlgebraModuleByGenerators</item>\n\t\t\t<item>LeftDerivations</item>\n\t\t\t<item>LeftIdeal</item>\n\t\t\t<item>LeftIdealByGenerators</item>\n\t\t\t<item>LeftIdealNC</item>\n\t\t\t<item>LeftMagmaCongruence</item>\n\t\t\t<item>LeftMagmaCongruenceByGeneratingPairs</item>\n\t\t\t<item>LeftMagmaIdeal</item>\n\t\t\t<item>LeftMagmaIdealByGenerators</item>\n\t\t\t<item>LeftModuleByGenerators</item>\n\t\t\t<item>LeftModuleByHomomorphismToMatAlg</item>\n\t\t\t<item>LeftModuleGeneralMappingByImages</item>\n\t\t\t<item>LeftModuleGeneratorsForIdealFromGenerators</item>\n\t\t\t<item>LeftModuleHomomorphismByImages</item>\n\t\t\t<item>LeftModuleHomomorphismByImagesNC</item>\n\t\t\t<item>LeftModuleHomomorphismByMatrix</item>\n\t\t\t<item>LeftNormedComm</item>\n\t\t\t<item>LeftQuotient</item>\n\t\t\t<item>LeftQuotientPowerPcgsElement</item>\n\t\t\t<item>LeftReduceUEALatticeElement</item>\n\t\t\t<item>LeftSemigroupCongruenceByGeneratingPairs</item>\n\t\t\t<item>LeftSemigroupIdealEnumeratorDataGetElement</item>\n\t\t\t<item>LeftShiftRowVector</item>\n\t\t\t<item>Legendre</item>\n\t\t\t<item>Length</item>\n\t\t\t<item>LengthOfDescendingSeries</item>\n\t\t\t<item>LengthOfLongestCommonPrefixOfTwoAssocWords</item>\n\t\t\t<item>LengthWPObj</item>\n\t\t\t<item>LengthsTom</item>\n\t\t\t<item>LenstraBase</item>\n\t\t\t<item>LessBoxedObj</item>\n\t\t\t<item>LessThanFunction</item>\n\t\t\t<item>LessThanOrEqualFunction</item>\n\t\t\t<item>LetterRepAssocWord</item>\n\t\t\t<item>LetterRepWordsLessFunc</item>\n\t\t\t<item>LevelsOfGenerators</item>\n\t\t\t<item>LeviMalcevDecomposition</item>\n\t\t\t<item>LexicographicOrdering</item>\n\t\t\t<item>LexicographicOrderingNC</item>\n\t\t\t<item>LieAlgebra</item>\n\t\t\t<item>LieAlgebraByDomain</item>\n\t\t\t<item>LieAlgebraByStructureConstants</item>\n\t\t\t<item>LieBracket</item>\n\t\t\t<item>LieCenter</item>\n\t\t\t<item>LieCentralizer</item>\n\t\t\t<item>LieCentralizerInParent</item>\n\t\t\t<item>LieCentre</item>\n\t\t\t<item>LieCoboundaryOperator</item>\n\t\t\t<item>LieDerivedSeries</item>\n\t\t\t<item>LieDerivedSubalgebra</item>\n\t\t\t<item>LieFamily</item>\n\t\t\t<item>LieLowerCentralSeries</item>\n\t\t\t<item>LieNilRadical</item>\n\t\t\t<item>LieNormalizer</item>\n\t\t\t<item>LieNormalizerInParent</item>\n\t\t\t<item>LieObject</item>\n\t\t\t<item>LieSolvableRadical</item>\n\t\t\t<item>LieUpperCentralSeries</item>\n\t\t\t<item>LiftAbsAndIrredModules</item>\n\t\t\t<item>LiftEpimorphism</item>\n\t\t\t<item>LiftEpimorphismSQ</item>\n\t\t\t<item>LiftInduciblePair</item>\n\t\t\t<item>LiftedInducedPcgs</item>\n\t\t\t<item>LiftedPcElement</item>\n\t\t\t<item>LineNumberStringPosition</item>\n\t\t\t<item>LinearAction</item>\n\t\t\t<item>LinearActionBasis</item>\n\t\t\t<item>LinearActionLayer</item>\n\t\t\t<item>LinearCharacters</item>\n\t\t\t<item>LinearCombination</item>\n\t\t\t<item>LinearCombinationPcgs</item>\n\t\t\t<item>LinearCombinationVecs</item>\n\t\t\t<item>LinearGroupParameters</item>\n\t\t\t<item>LinearIndependentColumns</item>\n\t\t\t<item>LinearOperation</item>\n\t\t\t<item>LinearOperationLayer</item>\n\t\t\t<item>LinesOfStraightLineProgram</item>\n\t\t\t<item>List</item>\n\t\t\t<item>ListBlist</item>\n\t\t\t<item>ListHashParams</item>\n\t\t\t<item>ListN</item>\n\t\t\t<item>ListOp</item>\n\t\t\t<item>ListPerm</item>\n\t\t\t<item>ListSorted</item>\n\t\t\t<item>ListStabChain</item>\n\t\t\t<item>ListWithIdenticalEntries</item>\n\t\t\t<item>ListX</item>\n\t\t\t<item>ListXHelp</item>\n\t\t\t<item>ListsFamily</item>\n\t\t\t<item>LoadAllPackages</item>\n\t\t\t<item>LoadDynamicModule</item>\n\t\t\t<item>LoadPackage</item>\n\t\t\t<item>LoadPackageDocumentation</item>\n\t\t\t<item>LoadStaticModule</item>\n\t\t\t<item>LoadedModules</item>\n\t\t\t<item>LockNaturalHomomorphismsPool</item>\n\t\t\t<item>Log</item>\n\t\t\t<item>LogFFE</item>\n\t\t\t<item>LogInputTo</item>\n\t\t\t<item>LogInt</item>\n\t\t\t<item>LogMod</item>\n\t\t\t<item>LogModRhoIterate</item>\n\t\t\t<item>LogModShanks</item>\n\t\t\t<item>LogOutputTo</item>\n\t\t\t<item>LogTo</item>\n\t\t\t<item>LongestWeylWordPerm</item>\n\t\t\t<item>LookupDictionary</item>\n\t\t\t<item>LowIndexSubgroupsFpGroup</item>\n\t\t\t<item>LowerCentralSeries</item>\n\t\t\t<item>LowerCentralSeriesOfGroup</item>\n\t\t\t<item>LowerTriangularMatrix</item>\n\t\t\t<item>LowercaseString</item>\n\t\t\t<item>Lucas</item>\n\t\t\t<item>MATINTbezout</item>\n\t\t\t<item>MATINTmgcdex</item>\n\t\t\t<item>MATINTrgcd</item>\n\t\t\t<item>MATINTsplit</item>\n\t\t\t<item>Magma</item>\n\t\t\t<item>MagmaByGenerators</item>\n\t\t\t<item>MagmaByMultiplicationTable</item>\n\t\t\t<item>MagmaByMultiplicationTableCreator</item>\n\t\t\t<item>MagmaCongruenceByGeneratingPairs</item>\n\t\t\t<item>MagmaCongruencePartition</item>\n\t\t\t<item>MagmaElement</item>\n\t\t\t<item>MagmaGeneratorsOfFamily</item>\n\t\t\t<item>MagmaHomomorphismByFunctionNC</item>\n\t\t\t<item>MagmaIdeal</item>\n\t\t\t<item>MagmaIdealByGenerators</item>\n\t\t\t<item>MagmaInputString</item>\n\t\t\t<item>MagmaIsomorphismByFunctionsNC</item>\n\t\t\t<item>MagmaRingModuloSpanOfZero</item>\n\t\t\t<item>MagmaWithInverses</item>\n\t\t\t<item>MagmaWithInversesByGenerators</item>\n\t\t\t<item>MagmaWithInversesByMultiplicationTable</item>\n\t\t\t<item>MagmaWithOne</item>\n\t\t\t<item>MagmaWithOneByGenerators</item>\n\t\t\t<item>MagmaWithOneByMultiplicationTable</item>\n\t\t\t<item>MakeCanonical</item>\n\t\t\t<item>MakeConfluent</item>\n\t\t\t<item>MakeConsequences</item>\n\t\t\t<item>MakeConsequencesPres</item>\n\t\t\t<item>MakeFormulaVector</item>\n\t\t\t<item>MakeGAPDocDoc</item>\n\t\t\t<item>MakeHomChain</item>\n\t\t\t<item>MakeImagesInfoLinearGeneralMappingByImages</item>\n\t\t\t<item>MakeImmutable</item>\n\t\t\t<item>MakeKnuthBendixRewritingSystemConfluent</item>\n\t\t\t<item>MakeLIBTOMLIST</item>\n\t\t\t<item>MakeMagmaWithInversesByFiniteGenerators</item>\n\t\t\t<item>MakeMapping</item>\n\t\t\t<item>MakeMonomialOrdering</item>\n\t\t\t<item>MakePreImagesInfoLinearGeneralMappingByImages</item>\n\t\t\t<item>MakePreImagesInfoLinearMappingByMatrix</item>\n\t\t\t<item>MakePreImagesInfoOperationAlgebraHomomorphism</item>\n\t\t\t<item>MakeReadOnlyGVar</item>\n\t\t\t<item>MakeReadOnlyGlobal</item>\n\t\t\t<item>MakeReadWriteGVar</item>\n\t\t\t<item>MakeReadWriteGlobal</item>\n\t\t\t<item>MakeStabChainLong</item>\n\t\t\t<item>ManageableQuotientOfAbelianPGroup</item>\n\t\t\t<item>ManageableQuotientOfNilpotentGroup</item>\n\t\t\t<item>MappedExpression</item>\n\t\t\t<item>MappedExpressionForElementOfFreeAssociativeAlgebra</item>\n\t\t\t<item>MappedPcElement</item>\n\t\t\t<item>MappedVector</item>\n\t\t\t<item>MappedWord</item>\n\t\t\t<item>MappedWordSyllableAssocWord</item>\n\t\t\t<item>MappingByFunction</item>\n\t\t\t<item>MappingGeneratorsImages</item>\n\t\t\t<item>MappingOfWhichItIsAsGGMBI</item>\n\t\t\t<item>MappingPermListList</item>\n\t\t\t<item>MarksTom</item>\n\t\t\t<item>MatAlgebra</item>\n\t\t\t<item>MatAutomorphismsFamily</item>\n\t\t\t<item>MatCharsWreathSymmetric</item>\n\t\t\t<item>MatClassMultCoeffsCharTable</item>\n\t\t\t<item>MatLieAlgebra</item>\n\t\t\t<item>MatOrbs</item>\n\t\t\t<item>MatOrbsApprox</item>\n\t\t\t<item>MatScalarProducts</item>\n\t\t\t<item>MatSpace</item>\n\t\t\t<item>MatTom</item>\n\t\t\t<item>MathieuGroup</item>\n\t\t\t<item>MathieuGroupCons</item>\n\t\t\t<item>MatricesOfRelator</item>\n\t\t\t<item>MatrixAlgebra</item>\n\t\t\t<item>MatrixAutomorphisms</item>\n\t\t\t<item>MatrixByBlockMatrix</item>\n\t\t\t<item>MatrixDimension</item>\n\t\t\t<item>MatrixLieAlgebra</item>\n\t\t\t<item>MatrixNewBasePoint</item>\n\t\t\t<item>MatrixOfAction</item>\n\t\t\t<item>MatrixOperationOfCP</item>\n\t\t\t<item>MatrixOperationOfCPGroup</item>\n\t\t\t<item>MatrixSpace</item>\n\t\t\t<item>MatrixSpinCharsSn</item>\n\t\t\t<item>MaxHashViewSize</item>\n\t\t\t<item>MaxNumeratorCoeffAlgElm</item>\n\t\t\t<item>MaximalAbelianQuotient</item>\n\t\t\t<item>MaximalBlocks</item>\n\t\t\t<item>MaximalBlocksAttr</item>\n\t\t\t<item>MaximalBlocksOp</item>\n\t\t\t<item>MaximalNormalSubgroups</item>\n\t\t\t<item>MaximalSubgroupClassReps</item>\n\t\t\t<item>MaximalSubgroupClassesRepsLayer</item>\n\t\t\t<item>MaximalSubgroups</item>\n\t\t\t<item>MaximalSubgroupsLattice</item>\n\t\t\t<item>MaximalSubgroupsSymmAlt</item>\n\t\t\t<item>MaximalSubgroupsTom</item>\n\t\t\t<item>Maximum</item>\n\t\t\t<item>MaximumList</item>\n\t\t\t<item>MeetEquivalenceRelations</item>\n\t\t\t<item>MeetMagmaCongruences</item>\n\t\t\t<item>MeetMaps</item>\n\t\t\t<item>MeetPartitionStrat</item>\n\t\t\t<item>MeetPartitionStratCell</item>\n\t\t\t<item>MeetSemigroupCongruences</item>\n\t\t\t<item>MembershipTestKnownBase</item>\n\t\t\t<item>MinimalBlockDimension</item>\n\t\t\t<item>MinimalElementCosetStabChain</item>\n\t\t\t<item>MinimalGeneratingSet</item>\n\t\t\t<item>MinimalGensLayer</item>\n\t\t\t<item>MinimalNonmonomialGroup</item>\n\t\t\t<item>MinimalNormalSubgroups</item>\n\t\t\t<item>MinimalPolynomial</item>\n\t\t\t<item>MinimalPolynomialMatrixNC</item>\n\t\t\t<item>MinimalStabChain</item>\n\t\t\t<item>MinimalSupergroupsLattice</item>\n\t\t\t<item>MinimalSupergroupsTom</item>\n\t\t\t<item>MinimizeExplicitTransversal</item>\n\t\t\t<item>MinimizedBombieriNorm</item>\n\t\t\t<item>Minimum</item>\n\t\t\t<item>MinimumGroupOnSubgroupsOrbit</item>\n\t\t\t<item>MinimumList</item>\n\t\t\t<item>MinusCharacter</item>\n\t\t\t<item>ModGauss</item>\n\t\t\t<item>ModifyMinGens</item>\n\t\t\t<item>ModifyPcgs</item>\n\t\t\t<item>ModularCharacterDegree</item>\n\t\t\t<item>ModuleByRestriction</item>\n\t\t\t<item>ModuleOfExtension</item>\n\t\t\t<item>ModuloPcgs</item>\n\t\t\t<item>ModuloPcgsByPcSequence</item>\n\t\t\t<item>ModuloPcgsByPcSequenceNC</item>\n\t\t\t<item>ModuloTailPcgsByList</item>\n\t\t\t<item>ModulusOfZmodnZObj</item>\n\t\t\t<item>MoebiusMu</item>\n\t\t\t<item>MoebiusTom</item>\n\t\t\t<item>MolienSeries</item>\n\t\t\t<item>MolienSeriesInfo</item>\n\t\t\t<item>MolienSeriesWithGivenDenominator</item>\n\t\t\t<item>Monoid</item>\n\t\t\t<item>MonoidByGenerators</item>\n\t\t\t<item>MonoidByMultiplicationTable</item>\n\t\t\t<item>MonoidOfRewritingSystem</item>\n\t\t\t<item>MonomialComparisonFunction</item>\n\t\t\t<item>MonomialExtGrlexLess</item>\n\t\t\t<item>MonomialExtrepComparisonFun</item>\n\t\t\t<item>MonomialGrevlexOrdering</item>\n\t\t\t<item>MonomialGrlexOrdering</item>\n\t\t\t<item>MonomialLexOrdering</item>\n\t\t\t<item>MonomialOrderingsFamily</item>\n\t\t\t<item>MonomialTotalDegreeLess</item>\n\t\t\t<item>MorClassLoop</item>\n\t\t\t<item>MorClassOrbs</item>\n\t\t\t<item>MorFindGeneratingSystem</item>\n\t\t\t<item>MorFroWords</item>\n\t\t\t<item>MorMaxFusClasses</item>\n\t\t\t<item>MorRatClasses</item>\n\t\t\t<item>Morphium</item>\n\t\t\t<item>MorrisRecursion</item>\n\t\t\t<item>MostFrequentGeneratorFpGroup</item>\n\t\t\t<item>MovedPoints</item>\n\t\t\t<item>MovedPointsPerms</item>\n\t\t\t<item>MulExt</item>\n\t\t\t<item>MultCoeffs</item>\n\t\t\t<item>MultMatrixPadicNumbersByCoefficientsList</item>\n\t\t\t<item>MultRowVector</item>\n\t\t\t<item>MultiplicationTable</item>\n\t\t\t<item>MultiplicativeElementsWithInversesFamilyByRws</item>\n\t\t\t<item>MultiplicativeNeutralElement</item>\n\t\t\t<item>MultiplicativeZero</item>\n\t\t\t<item>MultiplicativeZeroOp</item>\n\t\t\t<item>Multiply</item>\n\t\t\t<item>MutableBasis</item>\n\t\t\t<item>MutableBasisOfClosureUnderAction</item>\n\t\t\t<item>MutableBasisOfIdealInNonassociativeAlgebra</item>\n\t\t\t<item>MutableBasisOfNonassociativeAlgebra</item>\n\t\t\t<item>MutableBasisOfProductSpace</item>\n\t\t\t<item>MutableCopyMat</item>\n\t\t\t<item>MutableIdentityMat</item>\n\t\t\t<item>MutableNullMat</item>\n\t\t\t<item>MutableTransposedMat</item>\n\t\t\t<item>MutableTransposedMatDestructive</item>\n\t\t\t<item>MyFingerprint</item>\n\t\t\t<item>MyIntCoefficients</item>\n\t\t\t<item>Naive</item>\n\t\t\t<item>Name</item>\n\t\t\t<item>NameFunction</item>\n\t\t\t<item>NameIsomorphismClass</item>\n\t\t\t<item>NameMonth</item>\n\t\t\t<item>NameRNam</item>\n\t\t\t<item>NameWeekDay</item>\n\t\t\t<item>NamesFilter</item>\n\t\t\t<item>NamesGVars</item>\n\t\t\t<item>NamesLibTom</item>\n\t\t\t<item>NamesLocalVariablesFunction</item>\n\t\t\t<item>NamesOfComponents</item>\n\t\t\t<item>NamesOfFusionSources</item>\n\t\t\t<item>NamesSystemGVars</item>\n\t\t\t<item>NamesUserGVars</item>\n\t\t\t<item>NaturalActedSpace</item>\n\t\t\t<item>NaturalCharacter</item>\n\t\t\t<item>NaturalHomomorphismByFixedPointSubspace</item>\n\t\t\t<item>NaturalHomomorphismByGenerators</item>\n\t\t\t<item>NaturalHomomorphismByHomVW</item>\n\t\t\t<item>NaturalHomomorphismByIdeal</item>\n\t\t\t<item>NaturalHomomorphismByInvariantSubspace</item>\n\t\t\t<item>NaturalHomomorphismByNilpotentClassTwoElement</item>\n\t\t\t<item>NaturalHomomorphismByNormalSubgroup</item>\n\t\t\t<item>NaturalHomomorphismByNormalSubgroupInParent</item>\n\t\t\t<item>NaturalHomomorphismByNormalSubgroupNC</item>\n\t\t\t<item>NaturalHomomorphismByNormalSubgroupNCInParent</item>\n\t\t\t<item>NaturalHomomorphismByNormalSubgroupNCOp</item>\n\t\t\t<item>NaturalHomomorphismByNormalSubgroupNCOrig</item>\n\t\t\t<item>NaturalHomomorphismByNormalSubgroupOp</item>\n\t\t\t<item>NaturalHomomorphismBySubAlgebraModule</item>\n\t\t\t<item>NaturalHomomorphismBySubspace</item>\n\t\t\t<item>NaturalHomomorphismBySubspaceOntoFullRowSpace</item>\n\t\t\t<item>NaturalHomomorphismsPool</item>\n\t\t\t<item>NaturalIsomorphismByPcgs</item>\n\t\t\t<item>NearAdditiveGroup</item>\n\t\t\t<item>NearAdditiveGroupByGenerators</item>\n\t\t\t<item>NearAdditiveMagma</item>\n\t\t\t<item>NearAdditiveMagmaByGenerators</item>\n\t\t\t<item>NearAdditiveMagmaWithInverses</item>\n\t\t\t<item>NearAdditiveMagmaWithInversesByGenerators</item>\n\t\t\t<item>NearAdditiveMagmaWithZero</item>\n\t\t\t<item>NearAdditiveMagmaWithZeroByGenerators</item>\n\t\t\t<item>NearlyCharacterTablesFamily</item>\n\t\t\t<item>NegativeRootVectors</item>\n\t\t\t<item>NegativeRoots</item>\n\t\t\t<item>NestingDepthA</item>\n\t\t\t<item>NestingDepthM</item>\n\t\t\t<item>NewAttribute</item>\n\t\t\t<item>NewCategory</item>\n\t\t\t<item>NewConstructor</item>\n\t\t\t<item>NewDictionary</item>\n\t\t\t<item>NewFamily</item>\n\t\t\t<item>NewFilter</item>\n\t\t\t<item>NewInfoClass</item>\n\t\t\t<item>NewOperation</item>\n\t\t\t<item>NewProperty</item>\n\t\t\t<item>NewRepresentation</item>\n\t\t\t<item>NewToBeDefinedObj</item>\n\t\t\t<item>NewType</item>\n\t\t\t<item>NewmanInfinityCriterion</item>\n\t\t\t<item>NextIterator</item>\n\t\t\t<item>NextLevelRegularGroups</item>\n\t\t\t<item>NextPrimeInt</item>\n\t\t\t<item>NextRBasePoint</item>\n\t\t\t<item>NextStepCentralizer</item>\n\t\t\t<item>NiceAlgebraMonomorphism</item>\n\t\t\t<item>NiceBasis</item>\n\t\t\t<item>NiceBasisFiltersInfo</item>\n\t\t\t<item>NiceBasisNC</item>\n\t\t\t<item>NiceFreeLeftModule</item>\n\t\t\t<item>NiceFreeLeftModuleForFLMLOR</item>\n\t\t\t<item>NiceFreeLeftModuleInfo</item>\n\t\t\t<item>NiceMonomorphism</item>\n\t\t\t<item>NiceMonomorphismAutomGroup</item>\n\t\t\t<item>NiceNormalFormByExtRepFunction</item>\n\t\t\t<item>NiceObject</item>\n\t\t\t<item>NiceVector</item>\n\t\t\t<item>NicomorphismOfFFEMatrixGroup</item>\n\t\t\t<item>NicomorphismOfGeneralMatrixGroup</item>\n\t\t\t<item>NilpotencyClassOfGroup</item>\n\t\t\t<item>NilpotentClassTwoElement</item>\n\t\t\t<item>NilpotentQuotientOfFpLieAlgebra</item>\n\t\t\t<item>NinKernelCSPG</item>\n\t\t\t<item>NonLieNilpotentElement</item>\n\t\t\t<item>NonNilpotentElement</item>\n\t\t\t<item>NonPerfectCSPG</item>\n\t\t\t<item>NonSplitExtensions</item>\n\t\t\t<item>NonTrivialRightHandSides</item>\n\t\t\t<item>NonassocWord</item>\n\t\t\t<item>NonnegIntScalarProducts</item>\n\t\t\t<item>NonnegativeIntegers</item>\n\t\t\t<item>NorSerPermPcgs</item>\n\t\t\t<item>Norm</item>\n\t\t\t<item>NormalBase</item>\n\t\t\t<item>NormalClosure</item>\n\t\t\t<item>NormalClosureByChain</item>\n\t\t\t<item>NormalClosureInParent</item>\n\t\t\t<item>NormalClosureOp</item>\n\t\t\t<item>NormalFormIntMat</item>\n\t\t\t<item>NormalIntersection</item>\n\t\t\t<item>NormalIntersectionPcgs</item>\n\t\t\t<item>NormalMaximalSubgroups</item>\n\t\t\t<item>NormalSeriesByPcgs</item>\n\t\t\t<item>NormalSubgroupClasses</item>\n\t\t\t<item>NormalSubgroupClassesInfo</item>\n\t\t\t<item>NormalSubgroups</item>\n\t\t\t<item>NormalSubgroupsAbove</item>\n\t\t\t<item>NormalSubgroupsCalc</item>\n\t\t\t<item>NormalizeNameAndKey</item>\n\t\t\t<item>NormalizeWhitespace</item>\n\t\t\t<item>NormalizedArgList</item>\n\t\t\t<item>NormalizedElementOfMagmaRingModuloRelations</item>\n\t\t\t<item>NormalizedNameAndKey</item>\n\t\t\t<item>NormalizedWhitespace</item>\n\t\t\t<item>Normalizer</item>\n\t\t\t<item>NormalizerInGLnZ</item>\n\t\t\t<item>NormalizerInGLnZBravaisGroup</item>\n\t\t\t<item>NormalizerInHomePcgs</item>\n\t\t\t<item>NormalizerInParent</item>\n\t\t\t<item>NormalizerOp</item>\n\t\t\t<item>NormalizerParentSA</item>\n\t\t\t<item>NormalizerStabCSPG</item>\n\t\t\t<item>NormalizerTom</item>\n\t\t\t<item>NormalizersTom</item>\n\t\t\t<item>NormalizingReducedGL</item>\n\t\t\t<item>NormedRowVector</item>\n\t\t\t<item>NormedRowVectors</item>\n\t\t\t<item>NormedVectors</item>\n\t\t\t<item>NotifiedFusionsOfLibTom</item>\n\t\t\t<item>NotifiedFusionsToLibTom</item>\n\t\t\t<item>NrAffinePrimitiveGroups</item>\n\t\t\t<item>NrArrangements</item>\n\t\t\t<item>NrArrangementsMSetA</item>\n\t\t\t<item>NrArrangementsMSetK</item>\n\t\t\t<item>NrArrangementsSetA</item>\n\t\t\t<item>NrArrangementsSetK</item>\n\t\t\t<item>NrArrangementsX</item>\n\t\t\t<item>NrBasisVectors</item>\n\t\t\t<item>NrBitsInt</item>\n\t\t\t<item>NrCombinations</item>\n\t\t\t<item>NrCombinationsMSetA</item>\n\t\t\t<item>NrCombinationsMSetK</item>\n\t\t\t<item>NrCombinationsSetA</item>\n\t\t\t<item>NrCombinationsSetK</item>\n\t\t\t<item>NrCombinationsX</item>\n\t\t\t<item>NrCompatiblePolynomials</item>\n\t\t\t<item>NrConjugacyClasses</item>\n\t\t\t<item>NrConjugacyClassesGL</item>\n\t\t\t<item>NrConjugacyClassesGU</item>\n\t\t\t<item>NrConjugacyClassesInSupergroup</item>\n\t\t\t<item>NrConjugacyClassesPGL</item>\n\t\t\t<item>NrConjugacyClassesPGU</item>\n\t\t\t<item>NrConjugacyClassesPSL</item>\n\t\t\t<item>NrConjugacyClassesPSU</item>\n\t\t\t<item>NrConjugacyClassesSL</item>\n\t\t\t<item>NrConjugacyClassesSLIsogeneous</item>\n\t\t\t<item>NrConjugacyClassesSU</item>\n\t\t\t<item>NrConjugacyClassesSUIsogeneous</item>\n\t\t\t<item>NrDerangements</item>\n\t\t\t<item>NrDerangementsK</item>\n\t\t\t<item>NrInputsOfStraightLineProgram</item>\n\t\t\t<item>NrIrreducibleSolvableGroups</item>\n\t\t\t<item>NrMovedPoints</item>\n\t\t\t<item>NrMovedPointsPerm</item>\n\t\t\t<item>NrMovedPointsPerms</item>\n\t\t\t<item>NrOrderedPartitions</item>\n\t\t\t<item>NrPartitionTuples</item>\n\t\t\t<item>NrPartitions</item>\n\t\t\t<item>NrPartitionsSet</item>\n\t\t\t<item>NrPerfectGroups</item>\n\t\t\t<item>NrPerfectLibraryGroups</item>\n\t\t\t<item>NrPermutationsList</item>\n\t\t\t<item>NrPolyhedralSubgroups</item>\n\t\t\t<item>NrPrimitiveGroups</item>\n\t\t\t<item>NrRestrictedPartitions</item>\n\t\t\t<item>NrRestrictedPartitionsK</item>\n\t\t\t<item>NrSmallGroups</item>\n\t\t\t<item>NrSolvableAffinePrimitiveGroups</item>\n\t\t\t<item>NrSubsTom</item>\n\t\t\t<item>NrSyllables</item>\n\t\t\t<item>NrTransitiveGroups</item>\n\t\t\t<item>NrTuples</item>\n\t\t\t<item>NrUnorderedTuples</item>\n\t\t\t<item>NthChainSubgroup</item>\n\t\t\t<item>NthFundamentalOrbit</item>\n\t\t\t<item>NthRoot</item>\n\t\t\t<item>NthSchreierTransversalOfChainSubgroup</item>\n\t\t\t<item>NthSiftOneLevel</item>\n\t\t\t<item>Nucleus</item>\n\t\t\t<item>NullAlgebra</item>\n\t\t\t<item>NullMapMatrix</item>\n\t\t\t<item>NullMat</item>\n\t\t\t<item>NullspaceIntMat</item>\n\t\t\t<item>NullspaceMat</item>\n\t\t\t<item>NullspaceMatDestructive</item>\n\t\t\t<item>NullspaceModQ</item>\n\t\t\t<item>NumBol</item>\n\t\t\t<item>Number</item>\n\t\t\t<item>NumberArgumentsFunction</item>\n\t\t\t<item>NumberCells</item>\n\t\t\t<item>NumberCoset</item>\n\t\t\t<item>NumberDigits</item>\n\t\t\t<item>NumberFFVector</item>\n\t\t\t<item>NumberField</item>\n\t\t\t<item>NumberGeneratorsOfRws</item>\n\t\t\t<item>NumberIrreducibleSolvableGroups</item>\n\t\t\t<item>NumberOfCommutators</item>\n\t\t\t<item>NumberOfNewGenerators</item>\n\t\t\t<item>NumberOp</item>\n\t\t\t<item>NumberPerfectGroups</item>\n\t\t\t<item>NumberPerfectLibraryGroups</item>\n\t\t\t<item>NumberSmallGroups</item>\n\t\t\t<item>NumberSyllables</item>\n\t\t\t<item>NumeratorOfModuloPcgs</item>\n\t\t\t<item>NumeratorOfRationalFunction</item>\n\t\t\t<item>NumeratorRat</item>\n\t\t\t<item>OCAddBigMatrices</item>\n\t\t\t<item>OCAddCentralizer</item>\n\t\t\t<item>OCAddComplement</item>\n\t\t\t<item>OCAddGenerators</item>\n\t\t\t<item>OCAddGeneratorsGeneral</item>\n\t\t\t<item>OCAddGeneratorsPcgs</item>\n\t\t\t<item>OCAddMatrices</item>\n\t\t\t<item>OCAddRelations</item>\n\t\t\t<item>OCAddSumMatrices</item>\n\t\t\t<item>OCAddToFunctions</item>\n\t\t\t<item>OCConjugatingWord</item>\n\t\t\t<item>OCCoprimeComplement</item>\n\t\t\t<item>OCEquationMatrix</item>\n\t\t\t<item>OCEquationVector</item>\n\t\t\t<item>OCNormalRelations</item>\n\t\t\t<item>OCOneCoboundaries</item>\n\t\t\t<item>OCOneCocycles</item>\n\t\t\t<item>OCSmallEquationMatrix</item>\n\t\t\t<item>OCSmallEquationVector</item>\n\t\t\t<item>OCTestRelations</item>\n\t\t\t<item>OCTestRelators</item>\n\t\t\t<item>ONanScottType</item>\n\t\t\t<item>ObjByExponents</item>\n\t\t\t<item>ObjByExtRep</item>\n\t\t\t<item>ObjByVector</item>\n\t\t\t<item>Objectify</item>\n\t\t\t<item>ObjectifyWithAttributes</item>\n\t\t\t<item>OccuringVariableIndices</item>\n\t\t\t<item>OctaveAlgebra</item>\n\t\t\t<item>OddSpinVals</item>\n\t\t\t<item>OldGeneratorsOfPresentation</item>\n\t\t\t<item>OldKernelHcommaC</item>\n\t\t\t<item>OldSubspaceVectorSpaceGroup</item>\n\t\t\t<item>Omega</item>\n\t\t\t<item>OmegaAndLowerPCentralSeries</item>\n\t\t\t<item>OmegaOp</item>\n\t\t\t<item>OmegaSeries</item>\n\t\t\t<item>OminusEven</item>\n\t\t\t<item>OnBreak</item>\n\t\t\t<item>OnBreakMessage</item>\n\t\t\t<item>OnCharReadHookExcFds</item>\n\t\t\t<item>OnCharReadHookExcFuncs</item>\n\t\t\t<item>OnCharReadHookExcStreams</item>\n\t\t\t<item>OnCharReadHookInFds</item>\n\t\t\t<item>OnCharReadHookInFuncs</item>\n\t\t\t<item>OnCharReadHookInStreams</item>\n\t\t\t<item>OnCharReadHookOutFds</item>\n\t\t\t<item>OnCharReadHookOutFuncs</item>\n\t\t\t<item>OnCharReadHookOutStreams</item>\n\t\t\t<item>OnCocycle</item>\n\t\t\t<item>OnIndeterminates</item>\n\t\t\t<item>OnLeftAntiOperation</item>\n\t\t\t<item>OnLeftInverse</item>\n\t\t\t<item>OnLines</item>\n\t\t\t<item>OnPairs</item>\n\t\t\t<item>OnPoints</item>\n\t\t\t<item>OnQuit</item>\n\t\t\t<item>OnRelVector</item>\n\t\t\t<item>OnRight</item>\n\t\t\t<item>OnSets</item>\n\t\t\t<item>OnSetsDisjointSets</item>\n\t\t\t<item>OnSetsSets</item>\n\t\t\t<item>OnSetsTuples</item>\n\t\t\t<item>OnSubspacesByCanonicalBasis</item>\n\t\t\t<item>OnTuples</item>\n\t\t\t<item>OnTuplesSets</item>\n\t\t\t<item>OnTuplesTuples</item>\n\t\t\t<item>One</item>\n\t\t\t<item>OneAttr</item>\n\t\t\t<item>OneCoboundaries</item>\n\t\t\t<item>OneCocycles</item>\n\t\t\t<item>OneFactorBound</item>\n\t\t\t<item>OneGroup</item>\n\t\t\t<item>OneImmutable</item>\n\t\t\t<item>OneIrreducibleSolvableGroup</item>\n\t\t\t<item>OneMutable</item>\n\t\t\t<item>OneNormalizerfixedBlockSystem</item>\n\t\t\t<item>OneOfPcgs</item>\n\t\t\t<item>OneOp</item>\n\t\t\t<item>OnePrimitiveGroup</item>\n\t\t\t<item>OneSM</item>\n\t\t\t<item>OneSameMutability</item>\n\t\t\t<item>OneSmallGroup</item>\n\t\t\t<item>OneTransitiveGroup</item>\n\t\t\t<item>OperationAlgebraHomomorphism</item>\n\t\t\t<item>OperatorOfExternalSet</item>\n\t\t\t<item>OplusEven</item>\n\t\t\t<item>OpmOdd</item>\n\t\t\t<item>OpmSmall</item>\n\t\t\t<item>OptionsStack</item>\n\t\t\t<item>Orbit</item>\n\t\t\t<item>OrbitByPosOp</item>\n\t\t\t<item>OrbitChar</item>\n\t\t\t<item>OrbitFusions</item>\n\t\t\t<item>OrbitGenerators</item>\n\t\t\t<item>OrbitGeneratorsInv</item>\n\t\t\t<item>OrbitGeneratorsOfGroup</item>\n\t\t\t<item>OrbitLength</item>\n\t\t\t<item>OrbitLengthOp</item>\n\t\t\t<item>OrbitLengths</item>\n\t\t\t<item>OrbitLengthsDomain</item>\n\t\t\t<item>OrbitOp</item>\n\t\t\t<item>OrbitPerms</item>\n\t\t\t<item>OrbitPowerMaps</item>\n\t\t\t<item>OrbitRepresentativesCharacters</item>\n\t\t\t<item>OrbitShortVectors</item>\n\t\t\t<item>OrbitSplit</item>\n\t\t\t<item>OrbitStabChain</item>\n\t\t\t<item>OrbitStabilizer</item>\n\t\t\t<item>OrbitStabilizerAlgorithm</item>\n\t\t\t<item>OrbitStabilizerOp</item>\n\t\t\t<item>OrbitStabilizingParentGroup</item>\n\t\t\t<item>OrbitalPartition</item>\n\t\t\t<item>OrbitishFO</item>\n\t\t\t<item>OrbitishReq</item>\n\t\t\t<item>Orbits</item>\n\t\t\t<item>OrbitsByPosOp</item>\n\t\t\t<item>OrbitsCharacters</item>\n\t\t\t<item>OrbitsDomain</item>\n\t\t\t<item>OrbitsPartition</item>\n\t\t\t<item>OrbitsPerms</item>\n\t\t\t<item>OrbitsishOperation</item>\n\t\t\t<item>OrbitsishReq</item>\n\t\t\t<item>Order</item>\n\t\t\t<item>OrderKnownDividendList</item>\n\t\t\t<item>OrderMatLimit</item>\n\t\t\t<item>OrderMatTrial</item>\n\t\t\t<item>OrderMod</item>\n\t\t\t<item>OrderModK</item>\n\t\t\t<item>OrderOfRewritingSystem</item>\n\t\t\t<item>OrderOfSchurLift</item>\n\t\t\t<item>OrderPerm</item>\n\t\t\t<item>OrderedPartitions</item>\n\t\t\t<item>OrderedPartitionsA</item>\n\t\t\t<item>OrderedPartitionsK</item>\n\t\t\t<item>OrderingByLessThanFunctionNC</item>\n\t\t\t<item>OrderingByLessThanOrEqualFunctionNC</item>\n\t\t\t<item>OrderingOfRewritingSystem</item>\n\t\t\t<item>OrderingOnGenerators</item>\n\t\t\t<item>OrderingsFamily</item>\n\t\t\t<item>OrdersClassRepresentatives</item>\n\t\t\t<item>OrdersTom</item>\n\t\t\t<item>Ordinal</item>\n\t\t\t<item>OrdinaryCharacterTable</item>\n\t\t\t<item>OrthogonalComponents</item>\n\t\t\t<item>OrthogonalEmbeddings</item>\n\t\t\t<item>OrthogonalEmbeddingsSpecialDimension</item>\n\t\t\t<item>OrthogonalSpaceInFullRowSpace</item>\n\t\t\t<item>OrthogonalityDefectEuclideanLattice</item>\n\t\t\t<item>OutdatePolycyclicCollector</item>\n\t\t\t<item>OutputLogTo</item>\n\t\t\t<item>OutputTextFile</item>\n\t\t\t<item>OutputTextFileStillOpen</item>\n\t\t\t<item>OutputTextFileType</item>\n\t\t\t<item>OutputTextNone</item>\n\t\t\t<item>OutputTextNoneType</item>\n\t\t\t<item>OutputTextString</item>\n\t\t\t<item>OutputTextStringType</item>\n\t\t\t<item>OutputTextUser</item>\n\t\t\t<item>OzeroEven</item>\n\t\t\t<item>OzeroOdd</item>\n\t\t\t<item>PBIsMinimal</item>\n\t\t\t<item>PCentralLieAlgebra</item>\n\t\t\t<item>PCentralNormalSeriesByPcgsPGroup</item>\n\t\t\t<item>PCentralSeries</item>\n\t\t\t<item>PCentralSeriesOp</item>\n\t\t\t<item>PClassPGroup</item>\n\t\t\t<item>PCore</item>\n\t\t\t<item>PCoreOp</item>\n\t\t\t<item>PCover</item>\n\t\t\t<item>PERFRec</item>\n\t\t\t<item>PGroupGeneratorsOfAbelianGroup</item>\n\t\t\t<item>PMultiplicator</item>\n\t\t\t<item>PQStatistics</item>\n\t\t\t<item>PQuotient</item>\n\t\t\t<item>PRIMGrp</item>\n\t\t\t<item>PRump</item>\n\t\t\t<item>PRumpOp</item>\n\t\t\t<item>PSLDegree</item>\n\t\t\t<item>PSLUnderlyingField</item>\n\t\t\t<item>PSp</item>\n\t\t\t<item>PackageInfo</item>\n\t\t\t<item>PackageVariablesInfo</item>\n\t\t\t<item>PadicCoefficients</item>\n\t\t\t<item>PadicExpansionByRat</item>\n\t\t\t<item>PadicExtensionNumberFamily</item>\n\t\t\t<item>PadicNumber</item>\n\t\t\t<item>Page</item>\n\t\t\t<item>PageDisplay</item>\n\t\t\t<item>Pager</item>\n\t\t\t<item>Parametrized</item>\n\t\t\t<item>Parent</item>\n\t\t\t<item>ParentAttr</item>\n\t\t\t<item>ParentPcgs</item>\n\t\t\t<item>ParityPol</item>\n\t\t\t<item>ParseArguments</item>\n\t\t\t<item>ParseBibFiles</item>\n\t\t\t<item>ParseError</item>\n\t\t\t<item>ParseTreeXMLString</item>\n\t\t\t<item>PartialClosureOfCongruence</item>\n\t\t\t<item>PartialOrderByOrderingFunction</item>\n\t\t\t<item>PartialOrderOfHasseDiagram</item>\n\t\t\t<item>Partition</item>\n\t\t\t<item>PartitionBacktrack</item>\n\t\t\t<item>PartitionSortedPoints</item>\n\t\t\t<item>PartitionStabilizerPermGroup</item>\n\t\t\t<item>PartitionTuples</item>\n\t\t\t<item>Partitions</item>\n\t\t\t<item>PartitionsA</item>\n\t\t\t<item>PartitionsGreatestEQ</item>\n\t\t\t<item>PartitionsGreatestLE</item>\n\t\t\t<item>PartitionsK</item>\n\t\t\t<item>PartitionsRecursively</item>\n\t\t\t<item>PartitionsSet</item>\n\t\t\t<item>PartitionsSetA</item>\n\t\t\t<item>PartitionsSetK</item>\n\t\t\t<item>PartitionsTest</item>\n\t\t\t<item>PcElementByExponents</item>\n\t\t\t<item>PcElementByExponentsNC</item>\n\t\t\t<item>PcGroupClassMatrixColumn</item>\n\t\t\t<item>PcGroupCode</item>\n\t\t\t<item>PcGroupCodeRec</item>\n\t\t\t<item>PcGroupFpGroup</item>\n\t\t\t<item>PcGroupFpGroupNC</item>\n\t\t\t<item>PcGroupWithPcgs</item>\n\t\t\t<item>PcSeries</item>\n\t\t\t<item>Pcgs</item>\n\t\t\t<item>PcgsByIndependentGeneratorsOfAbelianGroup</item>\n\t\t\t<item>PcgsByPcSequence</item>\n\t\t\t<item>PcgsByPcSequenceCons</item>\n\t\t\t<item>PcgsByPcSequenceNC</item>\n\t\t\t<item>PcgsCentralSeries</item>\n\t\t\t<item>PcgsChiefSeries</item>\n\t\t\t<item>PcgsElAbSerFromSpecPcgs</item>\n\t\t\t<item>PcgsElementaryAbelianSeries</item>\n\t\t\t<item>PcgsHomSoImPow</item>\n\t\t\t<item>PcgsMemberPcSeriesPermGroup</item>\n\t\t\t<item>PcgsPCentralSeriesPGroup</item>\n\t\t\t<item>PcgsStabChainSeries</item>\n\t\t\t<item>PcgsSystemLGSeries</item>\n\t\t\t<item>PcgsSystemWithComplementSystem</item>\n\t\t\t<item>PcgsSystemWithHallSystem</item>\n\t\t\t<item>PcgsSystemWithWf</item>\n\t\t\t<item>PerfGrpConst</item>\n\t\t\t<item>PerfGrpLoad</item>\n\t\t\t<item>PerfectCSPG</item>\n\t\t\t<item>PerfectCentralProduct</item>\n\t\t\t<item>PerfectGroup</item>\n\t\t\t<item>PerfectIdentification</item>\n\t\t\t<item>PerfectResiduum</item>\n\t\t\t<item>PerfectSubdirectProduct</item>\n\t\t\t<item>PerfectSubgroupsAlternatingGroup</item>\n\t\t\t<item>Perform</item>\n\t\t\t<item>PermBounds</item>\n\t\t\t<item>PermCandidates</item>\n\t\t\t<item>PermCandidatesFaithful</item>\n\t\t\t<item>PermCharInfo</item>\n\t\t\t<item>PermCharInfoRelative</item>\n\t\t\t<item>PermChars</item>\n\t\t\t<item>PermCharsTom</item>\n\t\t\t<item>PermComb</item>\n\t\t\t<item>PermLeftQuoTransformation</item>\n\t\t\t<item>PermList</item>\n\t\t\t<item>PermListList</item>\n\t\t\t<item>PermMatrixGroup</item>\n\t\t\t<item>PermNatAnTestDetect</item>\n\t\t\t<item>PermNewBasePoint</item>\n\t\t\t<item>PermOnEnumerator</item>\n\t\t\t<item>Permanent</item>\n\t\t\t<item>PermgpContainsAn</item>\n\t\t\t<item>PermpcgsPcGroupPcgs</item>\n\t\t\t<item>Permut</item>\n\t\t\t<item>Permutation</item>\n\t\t\t<item>PermutationCharacter</item>\n\t\t\t<item>PermutationCycle</item>\n\t\t\t<item>PermutationCycleOp</item>\n\t\t\t<item>PermutationGModule</item>\n\t\t\t<item>PermutationMat</item>\n\t\t\t<item>PermutationOp</item>\n\t\t\t<item>PermutationToSortCharacters</item>\n\t\t\t<item>PermutationToSortClasses</item>\n\t\t\t<item>PermutationTom</item>\n\t\t\t<item>PermutationsFamily</item>\n\t\t\t<item>PermutationsList</item>\n\t\t\t<item>PermutationsListK</item>\n\t\t\t<item>Permuted</item>\n\t\t\t<item>Phi</item>\n\t\t\t<item>PlainListCopy</item>\n\t\t\t<item>PlainListCopyOp</item>\n\t\t\t<item>PointInCellNo</item>\n\t\t\t<item>PolycyclicFactorGroup</item>\n\t\t\t<item>PolycyclicFactorGroupByRelators</item>\n\t\t\t<item>PolycyclicFactorGroupByRelatorsNC</item>\n\t\t\t<item>PolycyclicFactorGroupNC</item>\n\t\t\t<item>PolynomialByExtRep</item>\n\t\t\t<item>PolynomialByExtRepNC</item>\n\t\t\t<item>PolynomialCoefficientsOfPolynomial</item>\n\t\t\t<item>PolynomialDivisionAlgorithm</item>\n\t\t\t<item>PolynomialModP</item>\n\t\t\t<item>PolynomialReducedRemainder</item>\n\t\t\t<item>PolynomialReduction</item>\n\t\t\t<item>PolynomialRing</item>\n\t\t\t<item>PopOptions</item>\n\t\t\t<item>PosSublOdd</item>\n\t\t\t<item>PosVecEnumFF</item>\n\t\t\t<item>Position</item>\n\t\t\t<item>PositionBound</item>\n\t\t\t<item>PositionCanonical</item>\n\t\t\t<item>PositionFirstComponent</item>\n\t\t\t<item>PositionMatchingDelimiter</item>\n\t\t\t<item>PositionNonZero</item>\n\t\t\t<item>PositionNot</item>\n\t\t\t<item>PositionNthOccurrence</item>\n\t\t\t<item>PositionNthTrueBlist</item>\n\t\t\t<item>PositionProperty</item>\n\t\t\t<item>PositionSet</item>\n\t\t\t<item>PositionSorted</item>\n\t\t\t<item>PositionStream</item>\n\t\t\t<item>PositionSublist</item>\n\t\t\t<item>PositionWord</item>\n\t\t\t<item>PositionsTrueBlist</item>\n\t\t\t<item>PositiveExponentsPresentationFpHom</item>\n\t\t\t<item>PositiveIntegers</item>\n\t\t\t<item>PositiveRootVectors</item>\n\t\t\t<item>PositiveRoots</item>\n\t\t\t<item>PositiveRootsAsWeights</item>\n\t\t\t<item>PossibleClassFusions</item>\n\t\t\t<item>PossibleFusionsCharTableTom</item>\n\t\t\t<item>PossiblePowerMaps</item>\n\t\t\t<item>PostMakeImmutable</item>\n\t\t\t<item>Pover</item>\n\t\t\t<item>PowerDecompositions</item>\n\t\t\t<item>PowerMap</item>\n\t\t\t<item>PowerMapByComposition</item>\n\t\t\t<item>PowerMapOfGroup</item>\n\t\t\t<item>PowerMapOfGroupWithInvariants</item>\n\t\t\t<item>PowerMapOp</item>\n\t\t\t<item>PowerMapsAllowedBySymmetrisations</item>\n\t\t\t<item>PowerMapsAllowedBySymmetrizations</item>\n\t\t\t<item>PowerMod</item>\n\t\t\t<item>PowerModCoeffs</item>\n\t\t\t<item>PowerModEvalPol</item>\n\t\t\t<item>PowerModInt</item>\n\t\t\t<item>PowerPartition</item>\n\t\t\t<item>PowerPcgsElement</item>\n\t\t\t<item>PowerS</item>\n\t\t\t<item>PowerSi</item>\n\t\t\t<item>PowerSubalgebraSeries</item>\n\t\t\t<item>PowerWreath</item>\n\t\t\t<item>PowersumsElsyms</item>\n\t\t\t<item>PreBasis</item>\n\t\t\t<item>PreImage</item>\n\t\t\t<item>PreImageElm</item>\n\t\t\t<item>PreImageSetStabBlocksHomomorphism</item>\n\t\t\t<item>PreImageWord</item>\n\t\t\t<item>PreImages</item>\n\t\t\t<item>PreImagesElm</item>\n\t\t\t<item>PreImagesRange</item>\n\t\t\t<item>PreImagesRepresentative</item>\n\t\t\t<item>PreImagesRepresentativeOperationAlgebraHomomorphism</item>\n\t\t\t<item>PreImagesSet</item>\n\t\t\t<item>PreOrbishProcessing</item>\n\t\t\t<item>PreferredGenerators</item>\n\t\t\t<item>PrefrattiniSubgroup</item>\n\t\t\t<item>PreimagesOfTransformation</item>\n\t\t\t<item>Presentation</item>\n\t\t\t<item>PresentationAugmentedCosetTable</item>\n\t\t\t<item>PresentationFpGroup</item>\n\t\t\t<item>PresentationNormalClosure</item>\n\t\t\t<item>PresentationNormalClosureRrs</item>\n\t\t\t<item>PresentationRegularPermutationGroup</item>\n\t\t\t<item>PresentationRegularPermutationGroupNC</item>\n\t\t\t<item>PresentationSubgroup</item>\n\t\t\t<item>PresentationSubgroupMtc</item>\n\t\t\t<item>PresentationSubgroupRrs</item>\n\t\t\t<item>PresentationViaCosetTable</item>\n\t\t\t<item>PresentationsFamily</item>\n\t\t\t<item>PrevPrimeInt</item>\n\t\t\t<item>PriGroItNext</item>\n\t\t\t<item>PrimGrpLoad</item>\n\t\t\t<item>PrimaryGeneratorWords</item>\n\t\t\t<item>PrimeBlocks</item>\n\t\t\t<item>PrimeBlocksOp</item>\n\t\t\t<item>PrimeField</item>\n\t\t\t<item>PrimeOfPGroup</item>\n\t\t\t<item>PrimePGroup</item>\n\t\t\t<item>PrimePowerComponent</item>\n\t\t\t<item>PrimePowerComponents</item>\n\t\t\t<item>PrimePowerPcSequence</item>\n\t\t\t<item>PrimePowersInt</item>\n\t\t\t<item>PrimeResidues</item>\n\t\t\t<item>PrimeResiduesCache</item>\n\t\t\t<item>Primes</item>\n\t\t\t<item>PrimitiveElement</item>\n\t\t\t<item>PrimitiveFacExtRepRatPol</item>\n\t\t\t<item>PrimitiveGroup</item>\n\t\t\t<item>PrimitiveGroupSims</item>\n\t\t\t<item>PrimitiveGroupsIterator</item>\n\t\t\t<item>PrimitiveIdentification</item>\n\t\t\t<item>PrimitiveIndexIrreducibleSolvableGroup</item>\n\t\t\t<item>PrimitivePolynomial</item>\n\t\t\t<item>PrimitiveRoot</item>\n\t\t\t<item>PrimitiveRootMod</item>\n\t\t\t<item>Print</item>\n\t\t\t<item>PrintAmbiguity</item>\n\t\t\t<item>PrintArray</item>\n\t\t\t<item>PrintBibAsBib</item>\n\t\t\t<item>PrintBibAsHTML</item>\n\t\t\t<item>PrintBibAsText</item>\n\t\t\t<item>PrintCharacterTable</item>\n\t\t\t<item>PrintCounters</item>\n\t\t\t<item>PrintFactorsInt</item>\n\t\t\t<item>PrintFormattedString</item>\n\t\t\t<item>PrintFormattingStatus</item>\n\t\t\t<item>PrintGAPDocElementTemplates</item>\n\t\t\t<item>PrintHashWithNames</item>\n\t\t\t<item>PrintObj</item>\n\t\t\t<item>PrintPadicExpansion</item>\n\t\t\t<item>PrintRecIndent</item>\n\t\t\t<item>PrintSixFile</item>\n\t\t\t<item>PrintTo</item>\n\t\t\t<item>ProbabilityShapes</item>\n\t\t\t<item>Process</item>\n\t\t\t<item>ProcessFixpoint</item>\n\t\t\t<item>ProdCoefRatfun</item>\n\t\t\t<item>ProdCoeffLaurpol</item>\n\t\t\t<item>ProdCoeffUnivfunc</item>\n\t\t\t<item>Product</item>\n\t\t\t<item>ProductCoeffs</item>\n\t\t\t<item>ProductMod</item>\n\t\t\t<item>ProductOp</item>\n\t\t\t<item>ProductPP</item>\n\t\t\t<item>ProductPol</item>\n\t\t\t<item>ProductRootsPol</item>\n\t\t\t<item>ProductSpace</item>\n\t\t\t<item>ProductX</item>\n\t\t\t<item>ProductXHelp</item>\n\t\t\t<item>ProfileFunctions</item>\n\t\t\t<item>ProfileFunctionsInGlobalVariables</item>\n\t\t\t<item>ProfileGlobalFunctions</item>\n\t\t\t<item>ProfileMethods</item>\n\t\t\t<item>ProfileOperations</item>\n\t\t\t<item>ProfileOperationsAndMethods</item>\n\t\t\t<item>ProfileOperationsAndMethodsOff</item>\n\t\t\t<item>ProfileOperationsAndMethodsOn</item>\n\t\t\t<item>ProfileOperationsOff</item>\n\t\t\t<item>ProfileOperationsOn</item>\n\t\t\t<item>ProjectedInducedPcgs</item>\n\t\t\t<item>ProjectedPcElement</item>\n\t\t\t<item>Projection</item>\n\t\t\t<item>ProjectionMap</item>\n\t\t\t<item>ProjectionOntoFullRowSpace</item>\n\t\t\t<item>ProjectionOntoVectorSubspace</item>\n\t\t\t<item>ProjectiveActionHomomorphismMatrixGroup</item>\n\t\t\t<item>ProjectiveActionOnFullSpace</item>\n\t\t\t<item>ProjectiveCharDeg</item>\n\t\t\t<item>ProjectiveGeneralLinearGroup</item>\n\t\t\t<item>ProjectiveGeneralLinearGroupCons</item>\n\t\t\t<item>ProjectiveGeneralUnitaryGroup</item>\n\t\t\t<item>ProjectiveGeneralUnitaryGroupCons</item>\n\t\t\t<item>ProjectiveOrder</item>\n\t\t\t<item>ProjectiveSpecialLinearGroup</item>\n\t\t\t<item>ProjectiveSpecialLinearGroupCons</item>\n\t\t\t<item>ProjectiveSpecialUnitaryGroup</item>\n\t\t\t<item>ProjectiveSpecialUnitaryGroupCons</item>\n\t\t\t<item>ProjectiveSymplecticGroup</item>\n\t\t\t<item>ProjectiveSymplecticGroupCons</item>\n\t\t\t<item>PropertyMethodByNiceMonomorphism</item>\n\t\t\t<item>PropertyMethodByNiceMonomorphismCollColl</item>\n\t\t\t<item>PropertyMethodByNiceMonomorphismCollElm</item>\n\t\t\t<item>PropertyMethodByNiceMonomorphismElmColl</item>\n\t\t\t<item>PseudoRandom</item>\n\t\t\t<item>PseudoRandomSeed</item>\n\t\t\t<item>PthPowerImage</item>\n\t\t\t<item>PthPowerImages</item>\n\t\t\t<item>PullBack</item>\n\t\t\t<item>PullbackCSPG</item>\n\t\t\t<item>PullbackKernelCSPG</item>\n\t\t\t<item>PurePadicNumberFamily</item>\n\t\t\t<item>PushOptions</item>\n\t\t\t<item>Quadratic</item>\n\t\t\t<item>QuasiDihedralGenerators</item>\n\t\t\t<item>QuaternionAlgebra</item>\n\t\t\t<item>QuaternionGenerators</item>\n\t\t\t<item>QuickInverseRepresentative</item>\n\t\t\t<item>QuoInt</item>\n\t\t\t<item>QuotRemLaurpols</item>\n\t\t\t<item>QuotRemPolList</item>\n\t\t\t<item>QuotSysDefinitionByIndex</item>\n\t\t\t<item>QuotSysIndexByDefinition</item>\n\t\t\t<item>Quotient</item>\n\t\t\t<item>QuotientFromSCTable</item>\n\t\t\t<item>QuotientGroup</item>\n\t\t\t<item>QuotientGroupByChainHomomorphicImage</item>\n\t\t\t<item>QuotientGroupByHomomorphism</item>\n\t\t\t<item>QuotientGroupByImages</item>\n\t\t\t<item>QuotientGroupByImagesNC</item>\n\t\t\t<item>QuotientGroupHom</item>\n\t\t\t<item>QuotientMod</item>\n\t\t\t<item>QuotientPolynomialsExtRep</item>\n\t\t\t<item>QuotientRemainder</item>\n\t\t\t<item>QuotientSemigroupCongruence</item>\n\t\t\t<item>QuotientSemigroupHomomorphism</item>\n\t\t\t<item>QuotientSemigroupPreimage</item>\n\t\t\t<item>QuotientSystem</item>\n\t\t\t<item>RBaseGroupsBloxPermGroup</item>\n\t\t\t<item>RClassOfHClass</item>\n\t\t\t<item>RNamObj</item>\n\t\t\t<item>RPFactorsModPrime</item>\n\t\t\t<item>RPGcdCRT</item>\n\t\t\t<item>RPGcdModPrime</item>\n\t\t\t<item>RPGcdRepresentationModPrime</item>\n\t\t\t<item>RPIFactors</item>\n\t\t\t<item>RPIGcd</item>\n\t\t\t<item>RPQuotientModPrime</item>\n\t\t\t<item>RPSquareHensel</item>\n\t\t\t<item>RRefine</item>\n\t\t\t<item>RSSDefaultOptions</item>\n\t\t\t<item>RadicalGroup</item>\n\t\t\t<item>RadicalOfAlgebra</item>\n\t\t\t<item>RanImgSrcSurjBloho</item>\n\t\t\t<item>RanImgSrcSurjTraho</item>\n\t\t\t<item>Random</item>\n\t\t\t<item>RandomBinaryRelationOnPoints</item>\n\t\t\t<item>RandomByPcs</item>\n\t\t\t<item>RandomCommutatorSubproduct</item>\n\t\t\t<item>RandomElmAsWord</item>\n\t\t\t<item>RandomHashKey</item>\n\t\t\t<item>RandomInvertibleMat</item>\n\t\t\t<item>RandomIsomorphismTest</item>\n\t\t\t<item>RandomList</item>\n\t\t\t<item>RandomMat</item>\n\t\t\t<item>RandomNormalSubproduct</item>\n\t\t\t<item>RandomPcgsSylowSubgroup</item>\n\t\t\t<item>RandomPol</item>\n\t\t\t<item>RandomPrimitivePolynomial</item>\n\t\t\t<item>RandomSchreierSims</item>\n\t\t\t<item>RandomSpecialPcgsCoded</item>\n\t\t\t<item>RandomSubprod</item>\n\t\t\t<item>RandomTransformation</item>\n\t\t\t<item>RandomUnimodularMat</item>\n\t\t\t<item>Range</item>\n\t\t\t<item>Rank</item>\n\t\t\t<item>RankAction</item>\n\t\t\t<item>RankFilter</item>\n\t\t\t<item>RankMat</item>\n\t\t\t<item>RankMatDestructive</item>\n\t\t\t<item>RankOfTransformation</item>\n\t\t\t<item>RankPGroup</item>\n\t\t\t<item>RanksOfDescendingSeries</item>\n\t\t\t<item>Rat</item>\n\t\t\t<item>RatClasPElmArrangeClasses</item>\n\t\t\t<item>RatPairString</item>\n\t\t\t<item>RationalClass</item>\n\t\t\t<item>RationalClasses</item>\n\t\t\t<item>RationalClassesInEANS</item>\n\t\t\t<item>RationalClassesPElements</item>\n\t\t\t<item>RationalClassesPermGroup</item>\n\t\t\t<item>RationalClassesSolvableGroup</item>\n\t\t\t<item>RationalClassesTry</item>\n\t\t\t<item>RationalFunctionByExtRep</item>\n\t\t\t<item>RationalFunctionByExtRepWithCancellation</item>\n\t\t\t<item>RationalFunctionsFamily</item>\n\t\t\t<item>RationalIdentificationPermGroup</item>\n\t\t\t<item>RationalizedMat</item>\n\t\t\t<item>Rationals</item>\n\t\t\t<item>ReObjectify</item>\n\t\t\t<item>Read</item>\n\t\t\t<item>ReadAll</item>\n\t\t\t<item>ReadAllIoStreamByPty</item>\n\t\t\t<item>ReadAllLine</item>\n\t\t\t<item>ReadAndCheckFunc</item>\n\t\t\t<item>ReadAsFunction</item>\n\t\t\t<item>ReadByte</item>\n\t\t\t<item>ReadGapRoot</item>\n\t\t\t<item>ReadGrp</item>\n\t\t\t<item>ReadLib</item>\n\t\t\t<item>ReadLine</item>\n\t\t\t<item>ReadOrComplete</item>\n\t\t\t<item>ReadPackage</item>\n\t\t\t<item>ReadPkg</item>\n\t\t\t<item>ReadPrim</item>\n\t\t\t<item>ReadSmall</item>\n\t\t\t<item>ReadSmallLib</item>\n\t\t\t<item>ReadTest</item>\n\t\t\t<item>ReadTom</item>\n\t\t\t<item>ReadTrans</item>\n\t\t\t<item>RealClasses</item>\n\t\t\t<item>RealizableBrauerCharacters</item>\n\t\t\t<item>RecFields</item>\n\t\t\t<item>RecNames</item>\n\t\t\t<item>RecordsFamily</item>\n\t\t\t<item>RecurseSchreierTree</item>\n\t\t\t<item>RedispatchOnCondition</item>\n\t\t\t<item>ReduceCoefficientsOfRws</item>\n\t\t\t<item>ReduceCoeffs</item>\n\t\t\t<item>ReduceCoeffsMod</item>\n\t\t\t<item>ReduceLetterRepWordsRewSys</item>\n\t\t\t<item>ReduceRules</item>\n\t\t\t<item>ReduceStabChain</item>\n\t\t\t<item>ReduceWordUsingRewritingSystem</item>\n\t\t\t<item>Reduced</item>\n\t\t\t<item>ReducedAdditiveInverse</item>\n\t\t\t<item>ReducedByIsomorphisms</item>\n\t\t\t<item>ReducedCharacters</item>\n\t\t\t<item>ReducedClassFunctions</item>\n\t\t\t<item>ReducedComm</item>\n\t\t\t<item>ReducedConfluentRewritingSystem</item>\n\t\t\t<item>ReducedConfluentRwsFromKbrwsNC</item>\n\t\t\t<item>ReducedConjugate</item>\n\t\t\t<item>ReducedDifference</item>\n\t\t\t<item>ReducedForm</item>\n\t\t\t<item>ReducedGaloisStabilizerInfo</item>\n\t\t\t<item>ReducedGroebnerBasis</item>\n\t\t\t<item>ReducedInverse</item>\n\t\t\t<item>ReducedLeftQuotient</item>\n\t\t\t<item>ReducedOne</item>\n\t\t\t<item>ReducedOrdinary</item>\n\t\t\t<item>ReducedPcElement</item>\n\t\t\t<item>ReducedPower</item>\n\t\t\t<item>ReducedProduct</item>\n\t\t\t<item>ReducedQuotient</item>\n\t\t\t<item>ReducedRrsWord</item>\n\t\t\t<item>ReducedSCTable</item>\n\t\t\t<item>ReducedScalarProduct</item>\n\t\t\t<item>ReducedSum</item>\n\t\t\t<item>ReducedVectorLTM</item>\n\t\t\t<item>ReducedZero</item>\n\t\t\t<item>Ree</item>\n\t\t\t<item>ReeGroup</item>\n\t\t\t<item>ReeGroupCons</item>\n\t\t\t<item>ReesCongruenceOfSemigroupIdeal</item>\n\t\t\t<item>ReesMatrixSemigroup</item>\n\t\t\t<item>ReesMatrixSemigroupElement</item>\n\t\t\t<item>ReesMatrixSemigroupEnumeratorGetElement</item>\n\t\t\t<item>ReesZeroMatrixSemigroup</item>\n\t\t\t<item>ReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>ReesZeroMatrixSemigroupElementIsZero</item>\n\t\t\t<item>ReesZeroMatrixSemigroupEnumeratorGetElement</item>\n\t\t\t<item>RefinedChain</item>\n\t\t\t<item>RefinedPcGroup</item>\n\t\t\t<item>RefinedSymmetrisations</item>\n\t\t\t<item>RefinedSymmetrizations</item>\n\t\t\t<item>Refinements</item>\n\t\t\t<item>ReflectionMat</item>\n\t\t\t<item>ReflexiveClosureBinaryRelation</item>\n\t\t\t<item>RegisterRBasePoint</item>\n\t\t\t<item>RegularActionHomomorphism</item>\n\t\t\t<item>RegularModule</item>\n\t\t\t<item>RegularModuleByGens</item>\n\t\t\t<item>RegularNinKernelCSPG</item>\n\t\t\t<item>RelVectorToCocycle</item>\n\t\t\t<item>RelationsOfFpMonoid</item>\n\t\t\t<item>RelationsOfFpSemigroup</item>\n\t\t\t<item>RelativeBasis</item>\n\t\t\t<item>RelativeBasisNC</item>\n\t\t\t<item>RelativeOrderOfPcElement</item>\n\t\t\t<item>RelativeOrders</item>\n\t\t\t<item>RelatorFixedMultiplier</item>\n\t\t\t<item>RelatorMatrixAbelianizedNormalClosure</item>\n\t\t\t<item>RelatorMatrixAbelianizedNormalClosureRrs</item>\n\t\t\t<item>RelatorMatrixAbelianizedSubgroup</item>\n\t\t\t<item>RelatorMatrixAbelianizedSubgroupMtc</item>\n\t\t\t<item>RelatorMatrixAbelianizedSubgroupRrs</item>\n\t\t\t<item>RelatorRepresentatives</item>\n\t\t\t<item>RelatorsCode</item>\n\t\t\t<item>RelatorsOfFpAlgebra</item>\n\t\t\t<item>RelatorsOfFpGroup</item>\n\t\t\t<item>RelatorsPermGroupHom</item>\n\t\t\t<item>RelsSortedByStartGen</item>\n\t\t\t<item>RelsViaCosetTable</item>\n\t\t\t<item>RemInt</item>\n\t\t\t<item>RemoveCharacters</item>\n\t\t\t<item>RemoveElmList</item>\n\t\t\t<item>RemoveFile</item>\n\t\t\t<item>RemoveOuterCoeffs</item>\n\t\t\t<item>RemoveRelator</item>\n\t\t\t<item>RemoveRootParseTree</item>\n\t\t\t<item>RemoveSet</item>\n\t\t\t<item>RemoveStabChain</item>\n\t\t\t<item>RenumberHighestWeightGenerators</item>\n\t\t\t<item>RenumberTree</item>\n\t\t\t<item>RenumberedWord</item>\n\t\t\t<item>RepOpElmTuplesPermGroup</item>\n\t\t\t<item>RepOpSetsPermGroup</item>\n\t\t\t<item>RepeatedString</item>\n\t\t\t<item>ReplacedString</item>\n\t\t\t<item>RepresentationsOfMatrix</item>\n\t\t\t<item>RepresentationsOfObject</item>\n\t\t\t<item>Representative</item>\n\t\t\t<item>RepresentativeAction</item>\n\t\t\t<item>RepresentativeActionOp</item>\n\t\t\t<item>RepresentativeFromGenerators</item>\n\t\t\t<item>RepresentativeLinearOperation</item>\n\t\t\t<item>RepresentativeSmallest</item>\n\t\t\t<item>RepresentativeTom</item>\n\t\t\t<item>RepresentativeTomByGenerators</item>\n\t\t\t<item>RepresentativeTomByGeneratorsNC</item>\n\t\t\t<item>RepresentativesContainedRightCosets</item>\n\t\t\t<item>RepresentativesFusions</item>\n\t\t\t<item>RepresentativesMinimalBlocks</item>\n\t\t\t<item>RepresentativesMinimalBlocksAttr</item>\n\t\t\t<item>RepresentativesMinimalBlocksOp</item>\n\t\t\t<item>RepresentativesPerfectSubgroups</item>\n\t\t\t<item>RepresentativesPowerMaps</item>\n\t\t\t<item>RepresentativesSimpleSubgroups</item>\n\t\t\t<item>RepsPerfSimpSub</item>\n\t\t\t<item>RequirePackage</item>\n\t\t\t<item>Reread</item>\n\t\t\t<item>RereadAndCheckFunc</item>\n\t\t\t<item>RereadGrp</item>\n\t\t\t<item>RereadLib</item>\n\t\t\t<item>RereadPackage</item>\n\t\t\t<item>RereadPkg</item>\n\t\t\t<item>RereadPrim</item>\n\t\t\t<item>RereadSmall</item>\n\t\t\t<item>RereadTrans</item>\n\t\t\t<item>ResetFilterObj</item>\n\t\t\t<item>ResetOptionsStack</item>\n\t\t\t<item>ResizeFlatHashTable</item>\n\t\t\t<item>ResizeListHashTable</item>\n\t\t\t<item>RespectsAddition</item>\n\t\t\t<item>RespectsAdditiveInverses</item>\n\t\t\t<item>RespectsInverses</item>\n\t\t\t<item>RespectsMultiplication</item>\n\t\t\t<item>RespectsOne</item>\n\t\t\t<item>RespectsScalarMultiplication</item>\n\t\t\t<item>RespectsZero</item>\n\t\t\t<item>RestoreStateRandom</item>\n\t\t\t<item>Restricted</item>\n\t\t\t<item>RestrictedClassFunction</item>\n\t\t\t<item>RestrictedClassFunctions</item>\n\t\t\t<item>RestrictedExternalSet</item>\n\t\t\t<item>RestrictedMapping</item>\n\t\t\t<item>RestrictedNiceMonomorphism</item>\n\t\t\t<item>RestrictedPartitions</item>\n\t\t\t<item>RestrictedPartitionsA</item>\n\t\t\t<item>RestrictedPartitionsK</item>\n\t\t\t<item>RestrictedPerm</item>\n\t\t\t<item>RestrictedTransformation</item>\n\t\t\t<item>ResultOfLineOfStraightLineProgram</item>\n\t\t\t<item>ResultOfStraightLineProgram</item>\n\t\t\t<item>Resultant</item>\n\t\t\t<item>ReturnFail</item>\n\t\t\t<item>ReturnFalse</item>\n\t\t\t<item>ReturnNextBasePoint</item>\n\t\t\t<item>ReturnPopOptions</item>\n\t\t\t<item>ReturnTrue</item>\n\t\t\t<item>Reversed</item>\n\t\t\t<item>ReversedOp</item>\n\t\t\t<item>Revision</item>\n\t\t\t<item>RewindStream</item>\n\t\t\t<item>RewriteAbelianizedSubgroupRelators</item>\n\t\t\t<item>RewriteSubgroupRelators</item>\n\t\t\t<item>RewriteWord</item>\n\t\t\t<item>RightActingAlgebra</item>\n\t\t\t<item>RightActingDomain</item>\n\t\t\t<item>RightActingGroup</item>\n\t\t\t<item>RightActingRingOfIdeal</item>\n\t\t\t<item>RightAction</item>\n\t\t\t<item>RightAlgebraModule</item>\n\t\t\t<item>RightAlgebraModuleByGenerators</item>\n\t\t\t<item>RightCoset</item>\n\t\t\t<item>RightCosetCanonicalRepresentativeDeterminator</item>\n\t\t\t<item>RightCosets</item>\n\t\t\t<item>RightCosetsNC</item>\n\t\t\t<item>RightDerivations</item>\n\t\t\t<item>RightIdeal</item>\n\t\t\t<item>RightIdealByGenerators</item>\n\t\t\t<item>RightIdealNC</item>\n\t\t\t<item>RightMagmaCongruence</item>\n\t\t\t<item>RightMagmaCongruenceByGeneratingPairs</item>\n\t\t\t<item>RightMagmaIdeal</item>\n\t\t\t<item>RightMagmaIdealByGenerators</item>\n\t\t\t<item>RightModuleByHomomorphismToMatAlg</item>\n\t\t\t<item>RightSemigroupCongruenceByGeneratingPairs</item>\n\t\t\t<item>RightSemigroupIdealEnumeratorDataGetElement</item>\n\t\t\t<item>RightShiftRowVector</item>\n\t\t\t<item>RightTransversal</item>\n\t\t\t<item>RightTransversalInParent</item>\n\t\t\t<item>RightTransversalOp</item>\n\t\t\t<item>RightTransversalPermGroupConstructor</item>\n\t\t\t<item>Ring</item>\n\t\t\t<item>RingByGenerators</item>\n\t\t\t<item>RingElmTimesElm</item>\n\t\t\t<item>RingFromFFE</item>\n\t\t\t<item>RingWithOne</item>\n\t\t\t<item>RingWithOneByGenerators</item>\n\t\t\t<item>Root</item>\n\t\t\t<item>RootBound</item>\n\t\t\t<item>RootInt</item>\n\t\t\t<item>RootMod</item>\n\t\t\t<item>RootModPrime</item>\n\t\t\t<item>RootModPrimePower</item>\n\t\t\t<item>RootOfDefiningPolynomial</item>\n\t\t\t<item>RootSystem</item>\n\t\t\t<item>RootsMod</item>\n\t\t\t<item>RootsModPrime</item>\n\t\t\t<item>RootsModPrimePower</item>\n\t\t\t<item>RootsOfUPol</item>\n\t\t\t<item>RootsRepresentativeFFPol</item>\n\t\t\t<item>RootsUnityMod</item>\n\t\t\t<item>RootsUnityModPrime</item>\n\t\t\t<item>RootsUnityModPrimePower</item>\n\t\t\t<item>RoundCyc</item>\n\t\t\t<item>RoundCycDown</item>\n\t\t\t<item>RowEchelonFormLTM</item>\n\t\t\t<item>RowIndexOfReesMatrixSemigroupElement</item>\n\t\t\t<item>RowIndexOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>RowSpace</item>\n\t\t\t<item>RowsOfReesMatrixSemigroup</item>\n\t\t\t<item>RowsOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>Rules</item>\n\t\t\t<item>RunImmediateMethods</item>\n\t\t\t<item>Runtime</item>\n\t\t\t<item>Runtimes</item>\n\t\t\t<item>SCMinSmaGens</item>\n\t\t\t<item>SCRExtend</item>\n\t\t\t<item>SCRExtendRecord</item>\n\t\t\t<item>SCRMakeStabStrong</item>\n\t\t\t<item>SCRNotice</item>\n\t\t\t<item>SCRRandomPerm</item>\n\t\t\t<item>SCRRandomString</item>\n\t\t\t<item>SCRRandomSubproduct</item>\n\t\t\t<item>SCRRestoredRecord</item>\n\t\t\t<item>SCRSchTree</item>\n\t\t\t<item>SCRSift</item>\n\t\t\t<item>SCRStrongGenTest</item>\n\t\t\t<item>SCTableEntry</item>\n\t\t\t<item>SCTableProduct</item>\n\t\t\t<item>SLDegree</item>\n\t\t\t<item>SLUnderlyingField</item>\n\t\t\t<item>SNFofREF</item>\n\t\t\t<item>SPolynomial</item>\n\t\t\t<item>SSortedList</item>\n\t\t\t<item>SSortedListList</item>\n\t\t\t<item>STDOut</item>\n\t\t\t<item>STGSelFunc</item>\n\t\t\t<item>SameBlock</item>\n\t\t\t<item>SandwichMatrixOfReesMatrixSemigroup</item>\n\t\t\t<item>SandwichMatrixOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>SaveWorkspace</item>\n\t\t\t<item>ScalarProduct</item>\n\t\t\t<item>SchreierTransversal</item>\n\t\t\t<item>SchreierTreeDepth</item>\n\t\t\t<item>SchreierTreeInternalConsistencyCheck</item>\n\t\t\t<item>SchuMu</item>\n\t\t\t<item>SchurCover</item>\n\t\t\t<item>SchurCoverFP</item>\n\t\t\t<item>ScriptFromString</item>\n\t\t\t<item>Search</item>\n\t\t\t<item>SecHMSM</item>\n\t\t\t<item>SecondaryGeneratorWordsAugmentedCosetTable</item>\n\t\t\t<item>SecondaryImagesAugmentedCosetTable</item>\n\t\t\t<item>SecondsDMYhms</item>\n\t\t\t<item>SeekPositionStream</item>\n\t\t\t<item>SelectSmallGroups</item>\n\t\t\t<item>SelectTransitiveGroups</item>\n\t\t\t<item>SemiEchelonBasis</item>\n\t\t\t<item>SemiEchelonBasisNC</item>\n\t\t\t<item>SemiEchelonMat</item>\n\t\t\t<item>SemiEchelonMatDestructive</item>\n\t\t\t<item>SemiEchelonMatTransformation</item>\n\t\t\t<item>SemiEchelonMatTransformationDestructive</item>\n\t\t\t<item>SemiEchelonMats</item>\n\t\t\t<item>SemiEchelonMatsDestructive</item>\n\t\t\t<item>SemiEchelonMatsNoCo</item>\n\t\t\t<item>SemiSimpleType</item>\n\t\t\t<item>SemidirectFactorsOfGroup</item>\n\t\t\t<item>SemidirectProduct</item>\n\t\t\t<item>SemidirectProductInfo</item>\n\t\t\t<item>Semigroup</item>\n\t\t\t<item>SemigroupByGenerators</item>\n\t\t\t<item>SemigroupByMultiplicationTable</item>\n\t\t\t<item>SemigroupCongruenceByGeneratingPairs</item>\n\t\t\t<item>SemigroupIdealByGenerators</item>\n\t\t\t<item>SemigroupIdealEnumeratorDataGetElement</item>\n\t\t\t<item>SemigroupOfRewritingSystem</item>\n\t\t\t<item>SemigroupTCInitialTableSize</item>\n\t\t\t<item>SemigroupToddCoxeterInfo</item>\n\t\t\t<item>Semiring</item>\n\t\t\t<item>SemiringByGenerators</item>\n\t\t\t<item>SemiringWithOne</item>\n\t\t\t<item>SemiringWithOneAndZero</item>\n\t\t\t<item>SemiringWithOneAndZeroByGenerators</item>\n\t\t\t<item>SemiringWithOneByGenerators</item>\n\t\t\t<item>SemiringWithZero</item>\n\t\t\t<item>SemiringWithZeroByGenerators</item>\n\t\t\t<item>SeqsOrbits</item>\n\t\t\t<item>Set</item>\n\t\t\t<item>SetANonReesCongruenceOfSemigroup</item>\n\t\t\t<item>SetAbelianInvariants</item>\n\t\t\t<item>SetAbelianInvariantsOfList</item>\n\t\t\t<item>SetAbsoluteValue</item>\n\t\t\t<item>SetActingDomain</item>\n\t\t\t<item>SetActionHomomorphismAttr</item>\n\t\t\t<item>SetActionKernelExternalSet</item>\n\t\t\t<item>SetActorOfExternalSet</item>\n\t\t\t<item>SetActualLibFileName</item>\n\t\t\t<item>SetAdditiveElementAsMultiplicativeElement</item>\n\t\t\t<item>SetAdditiveElementsAsMultiplicativeElementsFamily</item>\n\t\t\t<item>SetAdditiveInverse</item>\n\t\t\t<item>SetAdditiveInverseAttr</item>\n\t\t\t<item>SetAdditiveInverseImmutable</item>\n\t\t\t<item>SetAdditiveNeutralElement</item>\n\t\t\t<item>SetAdditivelyActingDomain</item>\n\t\t\t<item>SetAdjointBasis</item>\n\t\t\t<item>SetAdjointModule</item>\n\t\t\t<item>SetAlgebraicElementsFamilies</item>\n\t\t\t<item>SetAllBlocks</item>\n\t\t\t<item>SetAllInfoLevels</item>\n\t\t\t<item>SetAlpha</item>\n\t\t\t<item>SetAlternatingDegree</item>\n\t\t\t<item>SetAlternatingSubgroup</item>\n\t\t\t<item>SetAsDuplicateFreeList</item>\n\t\t\t<item>SetAsGroup</item>\n\t\t\t<item>SetAsGroupGeneralMappingByImages</item>\n\t\t\t<item>SetAsLeftModuleGeneralMappingByImages</item>\n\t\t\t<item>SetAsList</item>\n\t\t\t<item>SetAsMagma</item>\n\t\t\t<item>SetAsMonoid</item>\n\t\t\t<item>SetAsNearRing</item>\n\t\t\t<item>SetAsPolynomial</item>\n\t\t\t<item>SetAsRing</item>\n\t\t\t<item>SetAsSSortedList</item>\n\t\t\t<item>SetAsSemigroup</item>\n\t\t\t<item>SetAsSemiring</item>\n\t\t\t<item>SetAsSemiringWithOne</item>\n\t\t\t<item>SetAsSemiringWithOneAndZero</item>\n\t\t\t<item>SetAsSemiringWithZero</item>\n\t\t\t<item>SetAsSortedList</item>\n\t\t\t<item>SetAsSubgroupOfWholeGroupByQuotient</item>\n\t\t\t<item>SetAssertionLevel</item>\n\t\t\t<item>SetAssociatedReesMatrixSemigroupOfDClass</item>\n\t\t\t<item>SetAssociatedSemigroup</item>\n\t\t\t<item>SetAugmentationIdeal</item>\n\t\t\t<item>SetAugmentedCosetTableMtcInWholeGroup</item>\n\t\t\t<item>SetAugmentedCosetTableNormalClosureInWholeGroup</item>\n\t\t\t<item>SetAugmentedCosetTableRrsInWholeGroup</item>\n\t\t\t<item>SetAutomorphismDomain</item>\n\t\t\t<item>SetAutomorphismGroup</item>\n\t\t\t<item>SetAutomorphismsOfTable</item>\n\t\t\t<item>SetBaseIntMat</item>\n\t\t\t<item>SetBaseMat</item>\n\t\t\t<item>SetBaseOfBasicImageGroup</item>\n\t\t\t<item>SetBaseOfGroup</item>\n\t\t\t<item>SetBaseOrthogonalSpaceMat</item>\n\t\t\t<item>SetBasis</item>\n\t\t\t<item>SetBasisOfHomCosetAddMatrixGroup</item>\n\t\t\t<item>SetBasisVectors</item>\n\t\t\t<item>SetBaumClausenInfo</item>\n\t\t\t<item>SetBilinearFormMat</item>\n\t\t\t<item>SetBlocksAttr</item>\n\t\t\t<item>SetBlocksInfo</item>\n\t\t\t<item>SetBrauerCharacterValue</item>\n\t\t\t<item>SetBravaisGroup</item>\n\t\t\t<item>SetBravaisSubgroups</item>\n\t\t\t<item>SetBravaisSupergroups</item>\n\t\t\t<item>SetCanEasilyCompareElements</item>\n\t\t\t<item>SetCanEasilySortElements</item>\n\t\t\t<item>SetCanFindNilpotentClassTwoElement</item>\n\t\t\t<item>SetCanonicalBasis</item>\n\t\t\t<item>SetCanonicalElt</item>\n\t\t\t<item>SetCanonicalGenerators</item>\n\t\t\t<item>SetCanonicalNiceMonomorphism</item>\n\t\t\t<item>SetCanonicalPcgs</item>\n\t\t\t<item>SetCanonicalPcgsWrtFamilyPcgs</item>\n\t\t\t<item>SetCanonicalPcgsWrtHomePcgs</item>\n\t\t\t<item>SetCanonicalPcgsWrtSpecialPcgs</item>\n\t\t\t<item>SetCanonicalRepresentativeDeterminatorOfExternalSet</item>\n\t\t\t<item>SetCanonicalRepresentativeOfExternalOrbitByPcgs</item>\n\t\t\t<item>SetCanonicalRepresentativeOfExternalSet</item>\n\t\t\t<item>SetCartanMatrix</item>\n\t\t\t<item>SetCartanSubalgebra</item>\n\t\t\t<item>SetCayleyGraphDualSemigroup</item>\n\t\t\t<item>SetCayleyGraphSemigroup</item>\n\t\t\t<item>SetCenter</item>\n\t\t\t<item>SetCentralCharacter</item>\n\t\t\t<item>SetCentralIdempotentsOfSemiring</item>\n\t\t\t<item>SetCentralNormalSeriesByPcgs</item>\n\t\t\t<item>SetCentralizerInGLnZ</item>\n\t\t\t<item>SetCentralizerInParent</item>\n\t\t\t<item>SetCentre</item>\n\t\t\t<item>SetCentreOfCharacter</item>\n\t\t\t<item>SetChainSubgroup</item>\n\t\t\t<item>SetChainSubgroupQuotient</item>\n\t\t\t<item>SetCharacterDegrees</item>\n\t\t\t<item>SetCharacterNames</item>\n\t\t\t<item>SetCharacterParameters</item>\n\t\t\t<item>SetCharacteristic</item>\n\t\t\t<item>SetCharacteristicPolynomial</item>\n\t\t\t<item>SetChevalleyBasis</item>\n\t\t\t<item>SetChiefNormalSeriesByPcgs</item>\n\t\t\t<item>SetChiefSeries</item>\n\t\t\t<item>SetClassNames</item>\n\t\t\t<item>SetClassNamesTom</item>\n\t\t\t<item>SetClassParameters</item>\n\t\t\t<item>SetClassPermutation</item>\n\t\t\t<item>SetClassPositionsOfCentre</item>\n\t\t\t<item>SetClassPositionsOfDerivedSubgroup</item>\n\t\t\t<item>SetClassPositionsOfDirectProductDecompositions</item>\n\t\t\t<item>SetClassPositionsOfElementaryAbelianSeries</item>\n\t\t\t<item>SetClassPositionsOfFittingSubgroup</item>\n\t\t\t<item>SetClassPositionsOfKernel</item>\n\t\t\t<item>SetClassPositionsOfLowerCentralSeries</item>\n\t\t\t<item>SetClassPositionsOfMaximalNormalSubgroups</item>\n\t\t\t<item>SetClassPositionsOfNormalSubgroups</item>\n\t\t\t<item>SetClassPositionsOfSolvableResiduum</item>\n\t\t\t<item>SetClassPositionsOfSupersolvableResiduum</item>\n\t\t\t<item>SetClassPositionsOfUpperCentralSeries</item>\n\t\t\t<item>SetClassRoots</item>\n\t\t\t<item>SetClassTypesTom</item>\n\t\t\t<item>SetCoKernelOfAdditiveGeneralMapping</item>\n\t\t\t<item>SetCoKernelOfMultiplicativeGeneralMapping</item>\n\t\t\t<item>SetCoefficientsAndMagmaElements</item>\n\t\t\t<item>SetCoefficientsFamily</item>\n\t\t\t<item>SetCoefficientsOfLaurentPolynomial</item>\n\t\t\t<item>SetCoefficientsOfUnivariatePolynomial</item>\n\t\t\t<item>SetCoefficientsOfUnivariateRationalFunction</item>\n\t\t\t<item>SetCoefficientsRing</item>\n\t\t\t<item>SetCollectionsFamily</item>\n\t\t\t<item>SetColumnIndexOfReesMatrixSemigroupElement</item>\n\t\t\t<item>SetColumnIndexOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>SetColumnsOfReesMatrixSemigroup</item>\n\t\t\t<item>SetColumnsOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>SetCommutator</item>\n\t\t\t<item>SetCommutatorANC</item>\n\t\t\t<item>SetCommutatorFactorGroup</item>\n\t\t\t<item>SetCommutatorLength</item>\n\t\t\t<item>SetCommutatorNC</item>\n\t\t\t<item>SetComplementSystem</item>\n\t\t\t<item>SetComplexConjugate</item>\n\t\t\t<item>SetComponentsOfTuplesFamily</item>\n\t\t\t<item>SetCompositionSeries</item>\n\t\t\t<item>SetComputedAgemos</item>\n\t\t\t<item>SetComputedAscendingChains</item>\n\t\t\t<item>SetComputedBrauerTables</item>\n\t\t\t<item>SetComputedClassFusions</item>\n\t\t\t<item>SetComputedCyclicExtensionsTom</item>\n\t\t\t<item>SetComputedHallSubgroups</item>\n\t\t\t<item>SetComputedIndicators</item>\n\t\t\t<item>SetComputedIsPNilpotents</item>\n\t\t\t<item>SetComputedIsPSolvableCharacterTables</item>\n\t\t\t<item>SetComputedIsPSolvables</item>\n\t\t\t<item>SetComputedOmegas</item>\n\t\t\t<item>SetComputedPCentralSeriess</item>\n\t\t\t<item>SetComputedPCores</item>\n\t\t\t<item>SetComputedPRumps</item>\n\t\t\t<item>SetComputedPowerMaps</item>\n\t\t\t<item>SetComputedPrimeBlockss</item>\n\t\t\t<item>SetComputedSylowComplements</item>\n\t\t\t<item>SetComputedSylowSubgroups</item>\n\t\t\t<item>SetConductor</item>\n\t\t\t<item>SetConfluentRws</item>\n\t\t\t<item>SetConjugacyClasses</item>\n\t\t\t<item>SetConjugacyClassesMaximalSubgroups</item>\n\t\t\t<item>SetConjugacyClassesPerfectSubgroups</item>\n\t\t\t<item>SetConjugacyClassesSubgroups</item>\n\t\t\t<item>SetConjugate</item>\n\t\t\t<item>SetConjugateANC</item>\n\t\t\t<item>SetConjugateNC</item>\n\t\t\t<item>SetConjugates</item>\n\t\t\t<item>SetConjugatorInnerAutomorphism</item>\n\t\t\t<item>SetConjugatorOfConjugatorIsomorphism</item>\n\t\t\t<item>SetConstantTimeAccessList</item>\n\t\t\t<item>SetConstituentsOfCharacter</item>\n\t\t\t<item>SetConvertBasicImageGroupElement</item>\n\t\t\t<item>SetCoreInParent</item>\n\t\t\t<item>SetCosetTableFpHom</item>\n\t\t\t<item>SetCosetTableInWholeGroup</item>\n\t\t\t<item>SetCosetTableNormalClosureInWholeGroup</item>\n\t\t\t<item>SetCosetTableOfFpSemigroup</item>\n\t\t\t<item>SetCrystGroupDefaultAction</item>\n\t\t\t<item>SetCycleStructurePerm</item>\n\t\t\t<item>SetCyclicExtensionsTom</item>\n\t\t\t<item>SetDataType</item>\n\t\t\t<item>SetDecompositionMatrix</item>\n\t\t\t<item>SetDecompositionTypesOfGroup</item>\n\t\t\t<item>SetDefaultFieldOfMatrix</item>\n\t\t\t<item>SetDefaultFieldOfMatrixGroup</item>\n\t\t\t<item>SetDefectApproximation</item>\n\t\t\t<item>SetDefiningPcgs</item>\n\t\t\t<item>SetDefiningPolynomial</item>\n\t\t\t<item>SetDefinitionNC</item>\n\t\t\t<item>SetDegreeAction</item>\n\t\t\t<item>SetDegreeOfBinaryRelation</item>\n\t\t\t<item>SetDegreeOfCharacter</item>\n\t\t\t<item>SetDegreeOfLaurentPolynomial</item>\n\t\t\t<item>SetDegreeOfMatrixGroup</item>\n\t\t\t<item>SetDegreeOfTransformation</item>\n\t\t\t<item>SetDegreeOfTransformationSemigroup</item>\n\t\t\t<item>SetDegreeOperation</item>\n\t\t\t<item>SetDegreeOverPrimeField</item>\n\t\t\t<item>SetDelta</item>\n\t\t\t<item>SetDenominatorOfModuloPcgs</item>\n\t\t\t<item>SetDenominatorOfRationalFunction</item>\n\t\t\t<item>SetDepthOfUpperTriangularMatrix</item>\n\t\t\t<item>SetDerivations</item>\n\t\t\t<item>SetDerivative</item>\n\t\t\t<item>SetDerivedLength</item>\n\t\t\t<item>SetDerivedSeriesOfGroup</item>\n\t\t\t<item>SetDerivedSubgroup</item>\n\t\t\t<item>SetDerivedSubgroupsTomPossible</item>\n\t\t\t<item>SetDerivedSubgroupsTomUnique</item>\n\t\t\t<item>SetDeterminantMat</item>\n\t\t\t<item>SetDeterminantOfCharacter</item>\n\t\t\t<item>SetDihedralGenerators</item>\n\t\t\t<item>SetDimension</item>\n\t\t\t<item>SetDimensionOfMatrixGroup</item>\n\t\t\t<item>SetDimensionOfVectors</item>\n\t\t\t<item>SetDimensionsLoewyFactors</item>\n\t\t\t<item>SetDimensionsMat</item>\n\t\t\t<item>SetDirectFactorsOfGroup</item>\n\t\t\t<item>SetDirectProductInfo</item>\n\t\t\t<item>SetDirectSumDecomposition</item>\n\t\t\t<item>SetDisplayOptions</item>\n\t\t\t<item>SetDixonRecord</item>\n\t\t\t<item>SetEANormalSeriesByPcgs</item>\n\t\t\t<item>SetEarns</item>\n\t\t\t<item>SetEggBoxOfDClass</item>\n\t\t\t<item>SetElementTestFunction</item>\n\t\t\t<item>SetElementaryAbelianSeries</item>\n\t\t\t<item>SetElementaryAbelianSeriesLargeSteps</item>\n\t\t\t<item>SetElementaryAbelianSubseries</item>\n\t\t\t<item>SetElementsFamily</item>\n\t\t\t<item>SetElmWPObj</item>\n\t\t\t<item>SetEmptyRowVector</item>\n\t\t\t<item>SetEntrySCTable</item>\n\t\t\t<item>SetEnumerator</item>\n\t\t\t<item>SetEnumeratorByBasis</item>\n\t\t\t<item>SetEnumeratorSorted</item>\n\t\t\t<item>SetEquivalenceClassRelation</item>\n\t\t\t<item>SetEquivalenceClasses</item>\n\t\t\t<item>SetEquivalenceRelationPartition</item>\n\t\t\t<item>SetErrorHandler</item>\n\t\t\t<item>SetExponent</item>\n\t\t\t<item>SetExponentOfPowering</item>\n\t\t\t<item>SetExtRepDenominatorRatFun</item>\n\t\t\t<item>SetExtRepNumeratorRatFun</item>\n\t\t\t<item>SetExtRepPolynomialRatFun</item>\n\t\t\t<item>SetExternalOrbits</item>\n\t\t\t<item>SetExternalOrbitsStabilizers</item>\n\t\t\t<item>SetExternalSet</item>\n\t\t\t<item>SetFactorsOfDirectProduct</item>\n\t\t\t<item>SetFaithfulModule</item>\n\t\t\t<item>SetFamiliesOfGeneralMappingsAndRanges</item>\n\t\t\t<item>SetFamilyForOrdering</item>\n\t\t\t<item>SetFamilyForRewritingSystem</item>\n\t\t\t<item>SetFamilyPcgs</item>\n\t\t\t<item>SetFamilyRange</item>\n\t\t\t<item>SetFamilySource</item>\n\t\t\t<item>SetFeatureObj</item>\n\t\t\t<item>SetFieldOfMatrixGroup</item>\n\t\t\t<item>SetFilterObj</item>\n\t\t\t<item>SetFittingSubgroup</item>\n\t\t\t<item>SetFpElmComparisonMethod</item>\n\t\t\t<item>SetFpElmEqualityMethod</item>\n\t\t\t<item>SetFpElmKBRWS</item>\n\t\t\t<item>SetFrattiniSubgroup</item>\n\t\t\t<item>SetFrattinifactorId</item>\n\t\t\t<item>SetFrattinifactorSize</item>\n\t\t\t<item>SetFreeAlgebraOfFpAlgebra</item>\n\t\t\t<item>SetFreeGeneratorsOfFpAlgebra</item>\n\t\t\t<item>SetFreeGeneratorsOfFpGroup</item>\n\t\t\t<item>SetFreeGeneratorsOfFpMonoid</item>\n\t\t\t<item>SetFreeGeneratorsOfFpSemigroup</item>\n\t\t\t<item>SetFreeGroupOfBasicImageGroup</item>\n\t\t\t<item>SetFreeGroupOfFpGroup</item>\n\t\t\t<item>SetFreeMonoidOfFpMonoid</item>\n\t\t\t<item>SetFreeMonoidOfRewritingSystem</item>\n\t\t\t<item>SetFreeSemigroupOfFpSemigroup</item>\n\t\t\t<item>SetFreeSemigroupOfRewritingSystem</item>\n\t\t\t<item>SetFrobeniusAutomorphism</item>\n\t\t\t<item>SetFunctionAction</item>\n\t\t\t<item>SetFusionConjugacyClassesOp</item>\n\t\t\t<item>SetFusionsOfLibTom</item>\n\t\t\t<item>SetFusionsToLibTom</item>\n\t\t\t<item>SetFusionsTom</item>\n\t\t\t<item>SetGLDegree</item>\n\t\t\t<item>SetGLUnderlyingField</item>\n\t\t\t<item>SetGaloisGroup</item>\n\t\t\t<item>SetGaloisMat</item>\n\t\t\t<item>SetGaloisStabilizer</item>\n\t\t\t<item>SetGaloisType</item>\n\t\t\t<item>SetGapDocHTMLOptions</item>\n\t\t\t<item>SetGapDocLaTeXOptions</item>\n\t\t\t<item>SetGapDocTxtOptions</item>\n\t\t\t<item>SetGasmanMessageStatus</item>\n\t\t\t<item>SetGeneralizedPcgs</item>\n\t\t\t<item>SetGeneratingPairsOfLeftMagmaCongruence</item>\n\t\t\t<item>SetGeneratingPairsOfMagmaCongruence</item>\n\t\t\t<item>SetGeneratingPairsOfRightMagmaCongruence</item>\n\t\t\t<item>SetGeneratingSetIsComplete</item>\n\t\t\t<item>SetGeneratorOfCyclicGroup</item>\n\t\t\t<item>SetGeneratorsOfAdditiveGroup</item>\n\t\t\t<item>SetGeneratorsOfAdditiveMagma</item>\n\t\t\t<item>SetGeneratorsOfAdditiveMagmaWithInverses</item>\n\t\t\t<item>SetGeneratorsOfAdditiveMagmaWithZero</item>\n\t\t\t<item>SetGeneratorsOfAlgebra</item>\n\t\t\t<item>SetGeneratorsOfAlgebraModule</item>\n\t\t\t<item>SetGeneratorsOfAlgebraWithOne</item>\n\t\t\t<item>SetGeneratorsOfDivisionRing</item>\n\t\t\t<item>SetGeneratorsOfDomain</item>\n\t\t\t<item>SetGeneratorsOfEquivalenceRelationPartition</item>\n\t\t\t<item>SetGeneratorsOfExtASet</item>\n\t\t\t<item>SetGeneratorsOfExtLSet</item>\n\t\t\t<item>SetGeneratorsOfExtRSet</item>\n\t\t\t<item>SetGeneratorsOfExtUSet</item>\n\t\t\t<item>SetGeneratorsOfFLMLOR</item>\n\t\t\t<item>SetGeneratorsOfFLMLORWithOne</item>\n\t\t\t<item>SetGeneratorsOfField</item>\n\t\t\t<item>SetGeneratorsOfGroup</item>\n\t\t\t<item>SetGeneratorsOfIdeal</item>\n\t\t\t<item>SetGeneratorsOfLeftIdeal</item>\n\t\t\t<item>SetGeneratorsOfLeftMagmaIdeal</item>\n\t\t\t<item>SetGeneratorsOfLeftModule</item>\n\t\t\t<item>SetGeneratorsOfLeftOperatorAdditiveGroup</item>\n\t\t\t<item>SetGeneratorsOfLeftOperatorRing</item>\n\t\t\t<item>SetGeneratorsOfLeftOperatorRingWithOne</item>\n\t\t\t<item>SetGeneratorsOfLeftVectorSpace</item>\n\t\t\t<item>SetGeneratorsOfMagma</item>\n\t\t\t<item>SetGeneratorsOfMagmaIdeal</item>\n\t\t\t<item>SetGeneratorsOfMagmaWithInverses</item>\n\t\t\t<item>SetGeneratorsOfMagmaWithOne</item>\n\t\t\t<item>SetGeneratorsOfMonoid</item>\n\t\t\t<item>SetGeneratorsOfNearAdditiveGroup</item>\n\t\t\t<item>SetGeneratorsOfNearAdditiveMagma</item>\n\t\t\t<item>SetGeneratorsOfNearAdditiveMagmaWithInverses</item>\n\t\t\t<item>SetGeneratorsOfNearAdditiveMagmaWithZero</item>\n\t\t\t<item>SetGeneratorsOfRightIdeal</item>\n\t\t\t<item>SetGeneratorsOfRightMagmaIdeal</item>\n\t\t\t<item>SetGeneratorsOfRightModule</item>\n\t\t\t<item>SetGeneratorsOfRightOperatorAdditiveGroup</item>\n\t\t\t<item>SetGeneratorsOfRing</item>\n\t\t\t<item>SetGeneratorsOfRingWithOne</item>\n\t\t\t<item>SetGeneratorsOfRws</item>\n\t\t\t<item>SetGeneratorsOfSemigroup</item>\n\t\t\t<item>SetGeneratorsOfSemiring</item>\n\t\t\t<item>SetGeneratorsOfSemiringWithOne</item>\n\t\t\t<item>SetGeneratorsOfSemiringWithOneAndZero</item>\n\t\t\t<item>SetGeneratorsOfSemiringWithZero</item>\n\t\t\t<item>SetGeneratorsOfTwoSidedIdeal</item>\n\t\t\t<item>SetGeneratorsOfVectorSpace</item>\n\t\t\t<item>SetGeneratorsSmallest</item>\n\t\t\t<item>SetGeneratorsSubgroupsTom</item>\n\t\t\t<item>SetGlobalPartitionOfClasses</item>\n\t\t\t<item>SetGrading</item>\n\t\t\t<item>SetGreensDRelation</item>\n\t\t\t<item>SetGreensHRelation</item>\n\t\t\t<item>SetGreensJRelation</item>\n\t\t\t<item>SetGreensLRelation</item>\n\t\t\t<item>SetGreensRRelation</item>\n\t\t\t<item>SetGroupByPcgs</item>\n\t\t\t<item>SetGroupHClassOfGreensDClass</item>\n\t\t\t<item>SetGroupOfPcgs</item>\n\t\t\t<item>SetHallSystem</item>\n\t\t\t<item>SetHashEntry</item>\n\t\t\t<item>SetHashEntryAtLastIndex</item>\n\t\t\t<item>SetHelpViewer</item>\n\t\t\t<item>SetHirschLength</item>\n\t\t\t<item>SetHomCosetFamily</item>\n\t\t\t<item>SetHomFromFreeOfBasicImageGroup</item>\n\t\t\t<item>SetHomeEnumerator</item>\n\t\t\t<item>SetHomePcgs</item>\n\t\t\t<item>SetIBr</item>\n\t\t\t<item>SetIdGroup</item>\n\t\t\t<item>SetIdempotents</item>\n\t\t\t<item>SetIdempotentsTom</item>\n\t\t\t<item>SetIdempotentsTomInfo</item>\n\t\t\t<item>SetIdentificationOfConjugacyClasses</item>\n\t\t\t<item>SetIdentifier</item>\n\t\t\t<item>SetIdentity</item>\n\t\t\t<item>SetIdentityMapping</item>\n\t\t\t<item>SetImage</item>\n\t\t\t<item>SetImageElt</item>\n\t\t\t<item>SetImageListOfTransformation</item>\n\t\t\t<item>SetImageSetOfTransformation</item>\n\t\t\t<item>SetImagesSmallestGenerators</item>\n\t\t\t<item>SetImagesSource</item>\n\t\t\t<item>SetImfRecord</item>\n\t\t\t<item>SetIndependentGeneratorsOfAbelianGroup</item>\n\t\t\t<item>SetIndependentGeneratorsOfAbelianMatrixGroup</item>\n\t\t\t<item>SetIndeterminateName</item>\n\t\t\t<item>SetIndeterminateNumberOfLaurentPolynomial</item>\n\t\t\t<item>SetIndeterminateNumberOfUnivariateLaurentPolynomial</item>\n\t\t\t<item>SetIndeterminateNumberOfUnivariateRationalFunction</item>\n\t\t\t<item>SetIndeterminateOfUnivariateRationalFunction</item>\n\t\t\t<item>SetIndeterminatesOfPolynomialRing</item>\n\t\t\t<item>SetIndexInParent</item>\n\t\t\t<item>SetIndexInWholeGroup</item>\n\t\t\t<item>SetIndicesCentralNormalSteps</item>\n\t\t\t<item>SetIndicesChiefNormalSteps</item>\n\t\t\t<item>SetIndicesEANormalSteps</item>\n\t\t\t<item>SetIndicesInvolutaryGenerators</item>\n\t\t\t<item>SetIndicesNormalSteps</item>\n\t\t\t<item>SetIndicesOfAdjointBasis</item>\n\t\t\t<item>SetIndicesPCentralNormalStepsPGroup</item>\n\t\t\t<item>SetInducedPcgs</item>\n\t\t\t<item>SetInducedPcgsWrtFamilyPcgs</item>\n\t\t\t<item>SetInducedPcgsWrtHomePcgs</item>\n\t\t\t<item>SetInducedPcgsWrtSpecialPcgs</item>\n\t\t\t<item>SetInfoLevel</item>\n\t\t\t<item>SetInfoText</item>\n\t\t\t<item>SetInjectionZeroMagma</item>\n\t\t\t<item>SetInnerAutomorphismsAutomorphismGroup</item>\n\t\t\t<item>SetInt</item>\n\t\t\t<item>SetInternalRepresentative</item>\n\t\t\t<item>SetInvariantBilinearForm</item>\n\t\t\t<item>SetInvariantForm</item>\n\t\t\t<item>SetInvariantLattice</item>\n\t\t\t<item>SetInvariantQuadraticForm</item>\n\t\t\t<item>SetInvariantSesquilinearForm</item>\n\t\t\t<item>SetInverse</item>\n\t\t\t<item>SetInverseAttr</item>\n\t\t\t<item>SetInverseClasses</item>\n\t\t\t<item>SetInverseGeneralMapping</item>\n\t\t\t<item>SetInverseImmutable</item>\n\t\t\t<item>SetIrr</item>\n\t\t\t<item>SetIrrBaumClausen</item>\n\t\t\t<item>SetIrrConlon</item>\n\t\t\t<item>SetIrrDixonSchneider</item>\n\t\t\t<item>SetIrrFacsPol</item>\n\t\t\t<item>SetIrreducibleRepresentations</item>\n\t\t\t<item>SetIsAbelian</item>\n\t\t\t<item>SetIsAbelianNumberField</item>\n\t\t\t<item>SetIsAbelianTom</item>\n\t\t\t<item>SetIsAdditiveGroupGeneralMapping</item>\n\t\t\t<item>SetIsAdditiveGroupHomomorphism</item>\n\t\t\t<item>SetIsAdditiveGroupToGroupGeneralMapping</item>\n\t\t\t<item>SetIsAdditiveGroupToGroupHomomorphism</item>\n\t\t\t<item>SetIsAdditivelyCommutative</item>\n\t\t\t<item>SetIsAlgebraGeneralMapping</item>\n\t\t\t<item>SetIsAlgebraHomomorphism</item>\n\t\t\t<item>SetIsAlgebraModule</item>\n\t\t\t<item>SetIsAlgebraWithOneGeneralMapping</item>\n\t\t\t<item>SetIsAlgebraWithOneHomomorphism</item>\n\t\t\t<item>SetIsAlternatingGroup</item>\n\t\t\t<item>SetIsAnticommutative</item>\n\t\t\t<item>SetIsAntisymmetricBinaryRelation</item>\n\t\t\t<item>SetIsAssociative</item>\n\t\t\t<item>SetIsAutomorphismGroup</item>\n\t\t\t<item>SetIsBasicWreathProductOrdering</item>\n\t\t\t<item>SetIsBergerCondition</item>\n\t\t\t<item>SetIsBijective</item>\n\t\t\t<item>SetIsBravaisGroup</item>\n\t\t\t<item>SetIsBuiltFromAdditiveMagmaWithInverses</item>\n\t\t\t<item>SetIsBuiltFromGroup</item>\n\t\t\t<item>SetIsBuiltFromMagma</item>\n\t\t\t<item>SetIsBuiltFromMagmaWithInverses</item>\n\t\t\t<item>SetIsBuiltFromMagmaWithOne</item>\n\t\t\t<item>SetIsBuiltFromMonoid</item>\n\t\t\t<item>SetIsBuiltFromSemigroup</item>\n\t\t\t<item>SetIsCanonicalBasis</item>\n\t\t\t<item>SetIsCanonicalBasisFullMatrixModule</item>\n\t\t\t<item>SetIsCanonicalBasisFullRowModule</item>\n\t\t\t<item>SetIsCanonicalBasisFullSCAlgebra</item>\n\t\t\t<item>SetIsCanonicalNiceMonomorphism</item>\n\t\t\t<item>SetIsCanonicalPcgs</item>\n\t\t\t<item>SetIsCanonicalPcgsWrtSpecialPcgs</item>\n\t\t\t<item>SetIsChainTypeGroup</item>\n\t\t\t<item>SetIsCharacter</item>\n\t\t\t<item>SetIsCharacteristicMatrixPGroup</item>\n\t\t\t<item>SetIsCommutative</item>\n\t\t\t<item>SetIsCommutativeFamily</item>\n\t\t\t<item>SetIsConfluent</item>\n\t\t\t<item>SetIsConjugatorAutomorphism</item>\n\t\t\t<item>SetIsConjugatorIsomorphism</item>\n\t\t\t<item>SetIsConstantRationalFunction</item>\n\t\t\t<item>SetIsConstantTimeAccessGeneralMapping</item>\n\t\t\t<item>SetIsCycInt</item>\n\t\t\t<item>SetIsCyclic</item>\n\t\t\t<item>SetIsCyclicTom</item>\n\t\t\t<item>SetIsCyclicWithSize</item>\n\t\t\t<item>SetIsCyclotomicField</item>\n\t\t\t<item>SetIsDihedralGroup</item>\n\t\t\t<item>SetIsDistributive</item>\n\t\t\t<item>SetIsDivisionRing</item>\n\t\t\t<item>SetIsDuplicateFree</item>\n\t\t\t<item>SetIsDuplicateFreeList</item>\n\t\t\t<item>SetIsElementaryAbelian</item>\n\t\t\t<item>SetIsEmpty</item>\n\t\t\t<item>SetIsEndoGeneralMapping</item>\n\t\t\t<item>SetIsEndoMapping</item>\n\t\t\t<item>SetIsEquivalenceRelation</item>\n\t\t\t<item>SetIsFFEMatrixGroupOverLargeSpace</item>\n\t\t\t<item>SetIsFamilyPcgs</item>\n\t\t\t<item>SetIsField</item>\n\t\t\t<item>SetIsFieldHomomorphism</item>\n\t\t\t<item>SetIsFinite</item>\n\t\t\t<item>SetIsFiniteDimensional</item>\n\t\t\t<item>SetIsFiniteOrdersPcgs</item>\n\t\t\t<item>SetIsFiniteSemigroupGreensRelation</item>\n\t\t\t<item>SetIsFinitelyGeneratedGroup</item>\n\t\t\t<item>SetIsFrattiniFree</item>\n\t\t\t<item>SetIsFreeMonoid</item>\n\t\t\t<item>SetIsFreeSemigroup</item>\n\t\t\t<item>SetIsFullFpAlgebra</item>\n\t\t\t<item>SetIsFullHomModule</item>\n\t\t\t<item>SetIsFullMatrixModule</item>\n\t\t\t<item>SetIsFullRowModule</item>\n\t\t\t<item>SetIsFullSCAlgebra</item>\n\t\t\t<item>SetIsFullSubgroupGLorSLRespectingBilinearForm</item>\n\t\t\t<item>SetIsFullSubgroupGLorSLRespectingQuadraticForm</item>\n\t\t\t<item>SetIsFullSubgroupGLorSLRespectingSesquilinearForm</item>\n\t\t\t<item>SetIsFullTransformationSemigroup</item>\n\t\t\t<item>SetIsGL</item>\n\t\t\t<item>SetIsGeneralLinearGroup</item>\n\t\t\t<item>SetIsGeneralizedCartanMatrix</item>\n\t\t\t<item>SetIsGeneratorsOfMagmaWithInverses</item>\n\t\t\t<item>SetIsGreensClass</item>\n\t\t\t<item>SetIsGreensDClass</item>\n\t\t\t<item>SetIsGreensDRelation</item>\n\t\t\t<item>SetIsGreensHClass</item>\n\t\t\t<item>SetIsGreensHRelation</item>\n\t\t\t<item>SetIsGreensJClass</item>\n\t\t\t<item>SetIsGreensJRelation</item>\n\t\t\t<item>SetIsGreensLClass</item>\n\t\t\t<item>SetIsGreensLRelation</item>\n\t\t\t<item>SetIsGreensRClass</item>\n\t\t\t<item>SetIsGreensRRelation</item>\n\t\t\t<item>SetIsGreensRelation</item>\n\t\t\t<item>SetIsGroupGeneralMapping</item>\n\t\t\t<item>SetIsGroupHClass</item>\n\t\t\t<item>SetIsGroupHomomorphism</item>\n\t\t\t<item>SetIsGroupOfAutomorphisms</item>\n\t\t\t<item>SetIsGroupOfAutomorphismsFiniteGroup</item>\n\t\t\t<item>SetIsGroupRing</item>\n\t\t\t<item>SetIsGroupToAdditiveGroupGeneralMapping</item>\n\t\t\t<item>SetIsGroupToAdditiveGroupHomomorphism</item>\n\t\t\t<item>SetIsHandledByNiceMonomorphism</item>\n\t\t\t<item>SetIsHasseDiagram</item>\n\t\t\t<item>SetIsHomCosetOfAdditiveElt</item>\n\t\t\t<item>SetIsHomCosetOfFp</item>\n\t\t\t<item>SetIsHomCosetOfMatrix</item>\n\t\t\t<item>SetIsHomCosetOfPerm</item>\n\t\t\t<item>SetIsHomCosetOfTuple</item>\n\t\t\t<item>SetIsIdealInParent</item>\n\t\t\t<item>SetIsIdempotent</item>\n\t\t\t<item>SetIsImpossible</item>\n\t\t\t<item>SetIsInducedFromNormalSubgroup</item>\n\t\t\t<item>SetIsInducedPcgsWrtSpecialPcgs</item>\n\t\t\t<item>SetIsInjective</item>\n\t\t\t<item>SetIsInnerAutomorphism</item>\n\t\t\t<item>SetIsIntegerMatrixGroup</item>\n\t\t\t<item>SetIsIntegralBasis</item>\n\t\t\t<item>SetIsIntegralCyclotomic</item>\n\t\t\t<item>SetIsIntegralRing</item>\n\t\t\t<item>SetIsIrreducibleCharacter</item>\n\t\t\t<item>SetIsJacobianRing</item>\n\t\t\t<item>SetIsLDistributive</item>\n\t\t\t<item>SetIsLatticeOrderBinaryRelation</item>\n\t\t\t<item>SetIsLaurentPolynomial</item>\n\t\t\t<item>SetIsLeftActedOnByDivisionRing</item>\n\t\t\t<item>SetIsLeftAlgebraModule</item>\n\t\t\t<item>SetIsLeftIdealInParent</item>\n\t\t\t<item>SetIsLeftModuleGeneralMapping</item>\n\t\t\t<item>SetIsLeftModuleHomomorphism</item>\n\t\t\t<item>SetIsLeftSemigroupCongruence</item>\n\t\t\t<item>SetIsLeftSemigroupIdeal</item>\n\t\t\t<item>SetIsLieAbelian</item>\n\t\t\t<item>SetIsLieAlgebra</item>\n\t\t\t<item>SetIsLieNilpotent</item>\n\t\t\t<item>SetIsLieSolvable</item>\n\t\t\t<item>SetIsLinearlyPrimitive</item>\n\t\t\t<item>SetIsMagmaHomomorphism</item>\n\t\t\t<item>SetIsMapping</item>\n\t\t\t<item>SetIsMatrixModule</item>\n\t\t\t<item>SetIsMinimalNonmonomial</item>\n\t\t\t<item>SetIsMonoid</item>\n\t\t\t<item>SetIsMonomialCharacter</item>\n\t\t\t<item>SetIsMonomialCharacterTable</item>\n\t\t\t<item>SetIsMonomialGroup</item>\n\t\t\t<item>SetIsMonomialMatrix</item>\n\t\t\t<item>SetIsMonomialNumber</item>\n\t\t\t<item>SetIsNaturalAlternatingGroup</item>\n\t\t\t<item>SetIsNaturalGL</item>\n\t\t\t<item>SetIsNaturalSL</item>\n\t\t\t<item>SetIsNaturalSymmetricGroup</item>\n\t\t\t<item>SetIsNearRing</item>\n\t\t\t<item>SetIsNearRingWithOne</item>\n\t\t\t<item>SetIsNilpQuotientSystem</item>\n\t\t\t<item>SetIsNilpotentCharacterTable</item>\n\t\t\t<item>SetIsNilpotentGroup</item>\n\t\t\t<item>SetIsNilpotentTom</item>\n\t\t\t<item>SetIsNonTrivial</item>\n\t\t\t<item>SetIsNoncharacteristicMatrixPGroup</item>\n\t\t\t<item>SetIsNormalBasis</item>\n\t\t\t<item>SetIsNormalForm</item>\n\t\t\t<item>SetIsNormalInParent</item>\n\t\t\t<item>SetIsNumberField</item>\n\t\t\t<item>SetIsNumeratorParentPcgsFamilyPcgs</item>\n\t\t\t<item>SetIsOne</item>\n\t\t\t<item>SetIsOrderingOnFamilyOfAssocWords</item>\n\t\t\t<item>SetIsPGroup</item>\n\t\t\t<item>SetIsPQuotientSystem</item>\n\t\t\t<item>SetIsPSL</item>\n\t\t\t<item>SetIsParentPcgsFamilyPcgs</item>\n\t\t\t<item>SetIsPartialOrderBinaryRelation</item>\n\t\t\t<item>SetIsPcgsCentralSeries</item>\n\t\t\t<item>SetIsPcgsChiefSeries</item>\n\t\t\t<item>SetIsPcgsElementaryAbelianSeries</item>\n\t\t\t<item>SetIsPcgsPCentralSeriesPGroup</item>\n\t\t\t<item>SetIsPerfectCharacterTable</item>\n\t\t\t<item>SetIsPerfectGroup</item>\n\t\t\t<item>SetIsPerfectTom</item>\n\t\t\t<item>SetIsPolycyclicGroup</item>\n\t\t\t<item>SetIsPolynomial</item>\n\t\t\t<item>SetIsPositionsList</item>\n\t\t\t<item>SetIsPreOrderBinaryRelation</item>\n\t\t\t<item>SetIsPrimeField</item>\n\t\t\t<item>SetIsPrimeOrdersPcgs</item>\n\t\t\t<item>SetIsPrimitive</item>\n\t\t\t<item>SetIsPrimitiveAffine</item>\n\t\t\t<item>SetIsPrimitiveCharacter</item>\n\t\t\t<item>SetIsPrimitiveMatrixGroup</item>\n\t\t\t<item>SetIsPseudoCanonicalBasisFullHomModule</item>\n\t\t\t<item>SetIsQuasiDihedralGroup</item>\n\t\t\t<item>SetIsQuasiPrimitive</item>\n\t\t\t<item>SetIsQuaternionGroup</item>\n\t\t\t<item>SetIsRDistributive</item>\n\t\t\t<item>SetIsRationalMatrixGroup</item>\n\t\t\t<item>SetIsRectangularTable</item>\n\t\t\t<item>SetIsReduced</item>\n\t\t\t<item>SetIsReesCongruence</item>\n\t\t\t<item>SetIsReesCongruenceSemigroup</item>\n\t\t\t<item>SetIsReesMatrixSemigroup</item>\n\t\t\t<item>SetIsReesZeroMatrixSemigroup</item>\n\t\t\t<item>SetIsReflexiveBinaryRelation</item>\n\t\t\t<item>SetIsRegular</item>\n\t\t\t<item>SetIsRegularDClass</item>\n\t\t\t<item>SetIsRegularSemigroup</item>\n\t\t\t<item>SetIsRelativelySM</item>\n\t\t\t<item>SetIsRestrictedLieAlgebra</item>\n\t\t\t<item>SetIsRightAlgebraModule</item>\n\t\t\t<item>SetIsRightIdealInParent</item>\n\t\t\t<item>SetIsRightSemigroupCongruence</item>\n\t\t\t<item>SetIsRightSemigroupIdeal</item>\n\t\t\t<item>SetIsRing</item>\n\t\t\t<item>SetIsRingGeneralMapping</item>\n\t\t\t<item>SetIsRingHomomorphism</item>\n\t\t\t<item>SetIsRingWithOne</item>\n\t\t\t<item>SetIsRingWithOneGeneralMapping</item>\n\t\t\t<item>SetIsRingWithOneHomomorphism</item>\n\t\t\t<item>SetIsRowModule</item>\n\t\t\t<item>SetIsSL</item>\n\t\t\t<item>SetIsSSortedList</item>\n\t\t\t<item>SetIsSemiEchelonized</item>\n\t\t\t<item>SetIsSemiRegular</item>\n\t\t\t<item>SetIsSemigroup</item>\n\t\t\t<item>SetIsSemigroupCongruence</item>\n\t\t\t<item>SetIsSemigroupIdeal</item>\n\t\t\t<item>SetIsSemiring</item>\n\t\t\t<item>SetIsSemiringWithOne</item>\n\t\t\t<item>SetIsSemiringWithOneAndZero</item>\n\t\t\t<item>SetIsSemiringWithZero</item>\n\t\t\t<item>SetIsShortLexOrdering</item>\n\t\t\t<item>SetIsSimpleAlgebra</item>\n\t\t\t<item>SetIsSimpleCharacterTable</item>\n\t\t\t<item>SetIsSimpleGroup</item>\n\t\t\t<item>SetIsSimpleSemigroup</item>\n\t\t\t<item>SetIsSingleValued</item>\n\t\t\t<item>SetIsSkewFieldFamily</item>\n\t\t\t<item>SetIsSmallList</item>\n\t\t\t<item>SetIsSolvableCharacterTable</item>\n\t\t\t<item>SetIsSolvableGroup</item>\n\t\t\t<item>SetIsSolvableTom</item>\n\t\t\t<item>SetIsSortedList</item>\n\t\t\t<item>SetIsSpecialLinearGroup</item>\n\t\t\t<item>SetIsSpecialPcgs</item>\n\t\t\t<item>SetIsSporadicSimpleCharacterTable</item>\n\t\t\t<item>SetIsSporadicSimpleGroup</item>\n\t\t\t<item>SetIsStabChainViaChainSubgroup</item>\n\t\t\t<item>SetIsSubgroupSL</item>\n\t\t\t<item>SetIsSubmonoidFpMonoid</item>\n\t\t\t<item>SetIsSubnormallyMonomial</item>\n\t\t\t<item>SetIsSubsemigroupFpSemigroup</item>\n\t\t\t<item>SetIsSubsemigroupReesMatrixSemigroup</item>\n\t\t\t<item>SetIsSubsemigroupReesZeroMatrixSemigroup</item>\n\t\t\t<item>SetIsSubsetLocallyFiniteGroup</item>\n\t\t\t<item>SetIsSupersolvableCharacterTable</item>\n\t\t\t<item>SetIsSupersolvableGroup</item>\n\t\t\t<item>SetIsSurjective</item>\n\t\t\t<item>SetIsSymmetricBinaryRelation</item>\n\t\t\t<item>SetIsSymmetricGroup</item>\n\t\t\t<item>SetIsTotal</item>\n\t\t\t<item>SetIsTotalOrdering</item>\n\t\t\t<item>SetIsTransformationMonoid</item>\n\t\t\t<item>SetIsTransformationSemigroup</item>\n\t\t\t<item>SetIsTransitive</item>\n\t\t\t<item>SetIsTransitiveBinaryRelation</item>\n\t\t\t<item>SetIsTranslationInvariantOrdering</item>\n\t\t\t<item>SetIsTrivial</item>\n\t\t\t<item>SetIsTwoSidedIdealInParent</item>\n\t\t\t<item>SetIsUFDFamily</item>\n\t\t\t<item>SetIsUniformMatrixGroup</item>\n\t\t\t<item>SetIsUnivariatePolynomial</item>\n\t\t\t<item>SetIsUnivariateRationalFunction</item>\n\t\t\t<item>SetIsVectorSpaceHomomorphism</item>\n\t\t\t<item>SetIsVirtualCharacter</item>\n\t\t\t<item>SetIsWeightLexOrdering</item>\n\t\t\t<item>SetIsWellFoundedOrdering</item>\n\t\t\t<item>SetIsWeylGroup</item>\n\t\t\t<item>SetIsWholeFamily</item>\n\t\t\t<item>SetIsWreathProductOrdering</item>\n\t\t\t<item>SetIsZero</item>\n\t\t\t<item>SetIsZeroGroup</item>\n\t\t\t<item>SetIsZeroMultiplicationRing</item>\n\t\t\t<item>SetIsZeroRationalFunction</item>\n\t\t\t<item>SetIsZeroSimpleSemigroup</item>\n\t\t\t<item>SetIsZeroSquaredRing</item>\n\t\t\t<item>SetIsomorphismFpAlgebra</item>\n\t\t\t<item>SetIsomorphismFpFLMLOR</item>\n\t\t\t<item>SetIsomorphismFpGroup</item>\n\t\t\t<item>SetIsomorphismFpMonoid</item>\n\t\t\t<item>SetIsomorphismFpSemigroup</item>\n\t\t\t<item>SetIsomorphismMatrixAlgebra</item>\n\t\t\t<item>SetIsomorphismMatrixFLMLOR</item>\n\t\t\t<item>SetIsomorphismPcGroup</item>\n\t\t\t<item>SetIsomorphismPermGroup</item>\n\t\t\t<item>SetIsomorphismReesMatrixSemigroup</item>\n\t\t\t<item>SetIsomorphismRefinedPcGroup</item>\n\t\t\t<item>SetIsomorphismSCAlgebra</item>\n\t\t\t<item>SetIsomorphismSCFLMLOR</item>\n\t\t\t<item>SetIsomorphismSimplifiedFpGroup</item>\n\t\t\t<item>SetIsomorphismSpecialPcGroup</item>\n\t\t\t<item>SetIsomorphismTransformationSemigroup</item>\n\t\t\t<item>SetJenningsLieAlgebra</item>\n\t\t\t<item>SetJenningsSeries</item>\n\t\t\t<item>SetJordanDecomposition</item>\n\t\t\t<item>SetKernelOfAdditiveGeneralMapping</item>\n\t\t\t<item>SetKernelOfCharacter</item>\n\t\t\t<item>SetKernelOfMultiplicativeGeneralMapping</item>\n\t\t\t<item>SetKernelOfTransformation</item>\n\t\t\t<item>SetKillingMatrix</item>\n\t\t\t<item>SetKnowsHowToDecompose</item>\n\t\t\t<item>SetLClassOfHClass</item>\n\t\t\t<item>SetLGFirst</item>\n\t\t\t<item>SetLGHeads</item>\n\t\t\t<item>SetLGLayers</item>\n\t\t\t<item>SetLGLength</item>\n\t\t\t<item>SetLGTails</item>\n\t\t\t<item>SetLGWeights</item>\n\t\t\t<item>SetLargestElementGroup</item>\n\t\t\t<item>SetLargestMovedPoint</item>\n\t\t\t<item>SetLargestMovedPointPerm</item>\n\t\t\t<item>SetLatticeGeneratorsInUEA</item>\n\t\t\t<item>SetLatticeSubgroups</item>\n\t\t\t<item>SetLeadCoeffsIGS</item>\n\t\t\t<item>SetLeftActingAlgebra</item>\n\t\t\t<item>SetLeftActingDomain</item>\n\t\t\t<item>SetLeftActingGroup</item>\n\t\t\t<item>SetLeftActingRingOfIdeal</item>\n\t\t\t<item>SetLeftDerivations</item>\n\t\t\t<item>SetLength</item>\n\t\t\t<item>SetLengthsTom</item>\n\t\t\t<item>SetLessThanFunction</item>\n\t\t\t<item>SetLessThanOrEqualFunction</item>\n\t\t\t<item>SetLetterRepWordsLessFunc</item>\n\t\t\t<item>SetLevelsOfGenerators</item>\n\t\t\t<item>SetLeviMalcevDecomposition</item>\n\t\t\t<item>SetLieAlgebraByDomain</item>\n\t\t\t<item>SetLieCenter</item>\n\t\t\t<item>SetLieCentralizerInParent</item>\n\t\t\t<item>SetLieCentre</item>\n\t\t\t<item>SetLieDerivedSeries</item>\n\t\t\t<item>SetLieDerivedSubalgebra</item>\n\t\t\t<item>SetLieFamily</item>\n\t\t\t<item>SetLieLowerCentralSeries</item>\n\t\t\t<item>SetLieNilRadical</item>\n\t\t\t<item>SetLieNormalizerInParent</item>\n\t\t\t<item>SetLieObject</item>\n\t\t\t<item>SetLieSolvableRadical</item>\n\t\t\t<item>SetLieUpperCentralSeries</item>\n\t\t\t<item>SetLinearActionBasis</item>\n\t\t\t<item>SetLinearCharacters</item>\n\t\t\t<item>SetLinesOfStraightLineProgram</item>\n\t\t\t<item>SetLongestWeylWordPerm</item>\n\t\t\t<item>SetLowerCentralSeriesOfGroup</item>\n\t\t\t<item>SetMagmaGeneratorsOfFamily</item>\n\t\t\t<item>SetMappingGeneratorsImages</item>\n\t\t\t<item>SetMappingOfWhichItIsAsGGMBI</item>\n\t\t\t<item>SetMarksTom</item>\n\t\t\t<item>SetMatTom</item>\n\t\t\t<item>SetMatrixByBlockMatrix</item>\n\t\t\t<item>SetMatrixDimension</item>\n\t\t\t<item>SetMaximalAbelianQuotient</item>\n\t\t\t<item>SetMaximalBlocksAttr</item>\n\t\t\t<item>SetMaximalNormalSubgroups</item>\n\t\t\t<item>SetMaximalSubgroupClassReps</item>\n\t\t\t<item>SetMaximalSubgroups</item>\n\t\t\t<item>SetMaximalSubgroupsLattice</item>\n\t\t\t<item>SetMaximalSubgroupsTom</item>\n\t\t\t<item>SetMinimalBlockDimension</item>\n\t\t\t<item>SetMinimalGeneratingSet</item>\n\t\t\t<item>SetMinimalNormalSubgroups</item>\n\t\t\t<item>SetMinimalStabChain</item>\n\t\t\t<item>SetMinimalSupergroupsLattice</item>\n\t\t\t<item>SetMinimizedBombieriNorm</item>\n\t\t\t<item>SetModuleOfExtension</item>\n\t\t\t<item>SetModulusOfZmodnZObj</item>\n\t\t\t<item>SetMoebiusTom</item>\n\t\t\t<item>SetMolienSeriesInfo</item>\n\t\t\t<item>SetMonoidOfRewritingSystem</item>\n\t\t\t<item>SetMonomialComparisonFunction</item>\n\t\t\t<item>SetMonomialExtrepComparisonFun</item>\n\t\t\t<item>SetMovedPoints</item>\n\t\t\t<item>SetMultipleAttributes</item>\n\t\t\t<item>SetMultiplicationTable</item>\n\t\t\t<item>SetMultiplicativeNeutralElement</item>\n\t\t\t<item>SetMultiplicativeZero</item>\n\t\t\t<item>SetName</item>\n\t\t\t<item>SetNameIsomorphismClass</item>\n\t\t\t<item>SetNamesLibTom</item>\n\t\t\t<item>SetNamesOfFusionSources</item>\n\t\t\t<item>SetNaturalCharacter</item>\n\t\t\t<item>SetNaturalHomomorphismByNormalSubgroupNCInParent</item>\n\t\t\t<item>SetNaturalHomomorphismsPool</item>\n\t\t\t<item>SetNegativeRootVectors</item>\n\t\t\t<item>SetNegativeRoots</item>\n\t\t\t<item>SetNestingDepthA</item>\n\t\t\t<item>SetNestingDepthM</item>\n\t\t\t<item>SetNiceAlgebraMonomorphism</item>\n\t\t\t<item>SetNiceBasis</item>\n\t\t\t<item>SetNiceFreeLeftModule</item>\n\t\t\t<item>SetNiceFreeLeftModuleInfo</item>\n\t\t\t<item>SetNiceMonomorphism</item>\n\t\t\t<item>SetNiceNormalFormByExtRepFunction</item>\n\t\t\t<item>SetNiceObject</item>\n\t\t\t<item>SetNilpotencyClassOfGroup</item>\n\t\t\t<item>SetNilpotentClassTwoElement</item>\n\t\t\t<item>SetNonLieNilpotentElement</item>\n\t\t\t<item>SetNonNilpotentElement</item>\n\t\t\t<item>SetNorm</item>\n\t\t\t<item>SetNormalBase</item>\n\t\t\t<item>SetNormalClosureInParent</item>\n\t\t\t<item>SetNormalMaximalSubgroups</item>\n\t\t\t<item>SetNormalSeriesByPcgs</item>\n\t\t\t<item>SetNormalSubgroupClassesInfo</item>\n\t\t\t<item>SetNormalSubgroups</item>\n\t\t\t<item>SetNormalizerInGLnZ</item>\n\t\t\t<item>SetNormalizerInGLnZBravaisGroup</item>\n\t\t\t<item>SetNormalizerInHomePcgs</item>\n\t\t\t<item>SetNormalizerInParent</item>\n\t\t\t<item>SetNormalizersTom</item>\n\t\t\t<item>SetNormedRowVector</item>\n\t\t\t<item>SetNormedRowVectors</item>\n\t\t\t<item>SetNormedVectors</item>\n\t\t\t<item>SetNotifiedFusionsOfLibTom</item>\n\t\t\t<item>SetNotifiedFusionsToLibTom</item>\n\t\t\t<item>SetNrConjugacyClasses</item>\n\t\t\t<item>SetNrInputsOfStraightLineProgram</item>\n\t\t\t<item>SetNrMovedPoints</item>\n\t\t\t<item>SetNrMovedPointsPerm</item>\n\t\t\t<item>SetNrSubsTom</item>\n\t\t\t<item>SetNrSyllables</item>\n\t\t\t<item>SetNullAlgebra</item>\n\t\t\t<item>SetNullspaceIntMat</item>\n\t\t\t<item>SetNullspaceMat</item>\n\t\t\t<item>SetNumberGeneratorsOfRws</item>\n\t\t\t<item>SetNumberSyllables</item>\n\t\t\t<item>SetNumeratorOfModuloPcgs</item>\n\t\t\t<item>SetNumeratorOfRationalFunction</item>\n\t\t\t<item>SetONanScottType</item>\n\t\t\t<item>SetOccuringVariableIndices</item>\n\t\t\t<item>SetOmegaAndLowerPCentralSeries</item>\n\t\t\t<item>SetOmegaSeries</item>\n\t\t\t<item>SetOne</item>\n\t\t\t<item>SetOneAttr</item>\n\t\t\t<item>SetOneImmutable</item>\n\t\t\t<item>SetOneOfPcgs</item>\n\t\t\t<item>SetOperatorOfExternalSet</item>\n\t\t\t<item>SetOrbitGeneratorsOfGroup</item>\n\t\t\t<item>SetOrbitLengths</item>\n\t\t\t<item>SetOrbitLengthsDomain</item>\n\t\t\t<item>SetOrbitStabilizingParentGroup</item>\n\t\t\t<item>SetOrbits</item>\n\t\t\t<item>SetOrbitsDomain</item>\n\t\t\t<item>SetOrder</item>\n\t\t\t<item>SetOrderingOfRewritingSystem</item>\n\t\t\t<item>SetOrderingOnGenerators</item>\n\t\t\t<item>SetOrderingsFamily</item>\n\t\t\t<item>SetOrdersClassRepresentatives</item>\n\t\t\t<item>SetOrdersTom</item>\n\t\t\t<item>SetOrdinaryCharacterTable</item>\n\t\t\t<item>SetOrthogonalSpaceInFullRowSpace</item>\n\t\t\t<item>SetPCentralLieAlgebra</item>\n\t\t\t<item>SetPCentralNormalSeriesByPcgsPGroup</item>\n\t\t\t<item>SetPClassPGroup</item>\n\t\t\t<item>SetPSLDegree</item>\n\t\t\t<item>SetPSLUnderlyingField</item>\n\t\t\t<item>SetPackageInfo</item>\n\t\t\t<item>SetParent</item>\n\t\t\t<item>SetParentAttr</item>\n\t\t\t<item>SetParentPcgs</item>\n\t\t\t<item>SetPartialClosureOfCongruence</item>\n\t\t\t<item>SetPartialOrderOfHasseDiagram</item>\n\t\t\t<item>SetPcGroupWithPcgs</item>\n\t\t\t<item>SetPcSeries</item>\n\t\t\t<item>SetPcgs</item>\n\t\t\t<item>SetPcgsCentralSeries</item>\n\t\t\t<item>SetPcgsChiefSeries</item>\n\t\t\t<item>SetPcgsElementaryAbelianSeries</item>\n\t\t\t<item>SetPcgsPCentralSeriesPGroup</item>\n\t\t\t<item>SetPerfectIdentification</item>\n\t\t\t<item>SetPerfectResiduum</item>\n\t\t\t<item>SetPermutationTom</item>\n\t\t\t<item>SetPositiveRootVectors</item>\n\t\t\t<item>SetPositiveRoots</item>\n\t\t\t<item>SetPositiveRootsAsWeights</item>\n\t\t\t<item>SetPower</item>\n\t\t\t<item>SetPowerANC</item>\n\t\t\t<item>SetPowerNC</item>\n\t\t\t<item>SetPowerS</item>\n\t\t\t<item>SetPowerSubalgebraSeries</item>\n\t\t\t<item>SetPreBasis</item>\n\t\t\t<item>SetPreImagesRange</item>\n\t\t\t<item>SetPreferredGenerators</item>\n\t\t\t<item>SetPrefrattiniSubgroup</item>\n\t\t\t<item>SetPresentation</item>\n\t\t\t<item>SetPrimaryGeneratorWords</item>\n\t\t\t<item>SetPrimeField</item>\n\t\t\t<item>SetPrimePGroup</item>\n\t\t\t<item>SetPrimePowerComponents</item>\n\t\t\t<item>SetPrimitiveElement</item>\n\t\t\t<item>SetPrimitiveIdentification</item>\n\t\t\t<item>SetPrimitiveRoot</item>\n\t\t\t<item>SetPrintFormattingStatus</item>\n\t\t\t<item>SetProjectiveOrder</item>\n\t\t\t<item>SetPseudoRandomSeed</item>\n\t\t\t<item>SetPthPowerImages</item>\n\t\t\t<item>SetQuasiDihedralGenerators</item>\n\t\t\t<item>SetQuaternionGenerators</item>\n\t\t\t<item>SetQuotientGroup</item>\n\t\t\t<item>SetQuotientGroupHom</item>\n\t\t\t<item>SetQuotientSemigroupCongruence</item>\n\t\t\t<item>SetQuotientSemigroupHomomorphism</item>\n\t\t\t<item>SetQuotientSemigroupPreimage</item>\n\t\t\t<item>SetRClassOfHClass</item>\n\t\t\t<item>SetRadicalGroup</item>\n\t\t\t<item>SetRadicalOfAlgebra</item>\n\t\t\t<item>SetRange</item>\n\t\t\t<item>SetRankAction</item>\n\t\t\t<item>SetRankMat</item>\n\t\t\t<item>SetRankOfTransformation</item>\n\t\t\t<item>SetRankPGroup</item>\n\t\t\t<item>SetRat</item>\n\t\t\t<item>SetRationalClasses</item>\n\t\t\t<item>SetRationalFunctionsFamily</item>\n\t\t\t<item>SetRationalizedMat</item>\n\t\t\t<item>SetRealClasses</item>\n\t\t\t<item>SetRecNames</item>\n\t\t\t<item>SetRecursionTrapInterval</item>\n\t\t\t<item>SetReducedConfluentRewritingSystem</item>\n\t\t\t<item>SetReducedMultiplication</item>\n\t\t\t<item>SetReesCongruenceOfSemigroupIdeal</item>\n\t\t\t<item>SetReesZeroMatrixSemigroupElementIsZero</item>\n\t\t\t<item>SetRefinedPcGroup</item>\n\t\t\t<item>SetRegularActionHomomorphism</item>\n\t\t\t<item>SetRelationsOfFpMonoid</item>\n\t\t\t<item>SetRelationsOfFpSemigroup</item>\n\t\t\t<item>SetRelativeOrder</item>\n\t\t\t<item>SetRelativeOrderNC</item>\n\t\t\t<item>SetRelativeOrders</item>\n\t\t\t<item>SetRelatorsOfFpAlgebra</item>\n\t\t\t<item>SetRelatorsOfFpGroup</item>\n\t\t\t<item>SetRepresentative</item>\n\t\t\t<item>SetRepresentativeSmallest</item>\n\t\t\t<item>SetRepresentativesContainedRightCosets</item>\n\t\t\t<item>SetRepresentativesMinimalBlocksAttr</item>\n\t\t\t<item>SetRepresentativesPerfectSubgroups</item>\n\t\t\t<item>SetRepresentativesSimpleSubgroups</item>\n\t\t\t<item>SetRespectsAddition</item>\n\t\t\t<item>SetRespectsAdditiveInverses</item>\n\t\t\t<item>SetRespectsInverses</item>\n\t\t\t<item>SetRespectsMultiplication</item>\n\t\t\t<item>SetRespectsOne</item>\n\t\t\t<item>SetRespectsScalarMultiplication</item>\n\t\t\t<item>SetRespectsZero</item>\n\t\t\t<item>SetRightActingAlgebra</item>\n\t\t\t<item>SetRightActingDomain</item>\n\t\t\t<item>SetRightActingGroup</item>\n\t\t\t<item>SetRightActingRingOfIdeal</item>\n\t\t\t<item>SetRightDerivations</item>\n\t\t\t<item>SetRightTransversalInParent</item>\n\t\t\t<item>SetRootOfDefiningPolynomial</item>\n\t\t\t<item>SetRootSystem</item>\n\t\t\t<item>SetRowIndexOfReesMatrixSemigroupElement</item>\n\t\t\t<item>SetRowIndexOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>SetRowsOfReesMatrixSemigroup</item>\n\t\t\t<item>SetRowsOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>SetRules</item>\n\t\t\t<item>SetSLDegree</item>\n\t\t\t<item>SetSLUnderlyingField</item>\n\t\t\t<item>SetSandwichMatrixOfReesMatrixSemigroup</item>\n\t\t\t<item>SetSandwichMatrixOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>SetSemiEchelonBasis</item>\n\t\t\t<item>SetSemiEchelonMat</item>\n\t\t\t<item>SetSemiEchelonMatTransformation</item>\n\t\t\t<item>SetSemiSimpleType</item>\n\t\t\t<item>SetSemidirectFactorsOfGroup</item>\n\t\t\t<item>SetSemidirectProductInfo</item>\n\t\t\t<item>SetSemigroupOfRewritingSystem</item>\n\t\t\t<item>SetSiftFunction</item>\n\t\t\t<item>SetSiftGroup</item>\n\t\t\t<item>SetSignPerm</item>\n\t\t\t<item>SetSimpleSystem</item>\n\t\t\t<item>SetSimsNo</item>\n\t\t\t<item>SetSize</item>\n\t\t\t<item>SetSizesCentralizers</item>\n\t\t\t<item>SetSizesConjugacyClasses</item>\n\t\t\t<item>SetSmallGeneratingSet</item>\n\t\t\t<item>SetSmallestGeneratorPerm</item>\n\t\t\t<item>SetSmallestMovedPoint</item>\n\t\t\t<item>SetSmallestMovedPointPerm</item>\n\t\t\t<item>SetSocle</item>\n\t\t\t<item>SetSocleComplement</item>\n\t\t\t<item>SetSocleDimensions</item>\n\t\t\t<item>SetSocleTypePrimitiveGroup</item>\n\t\t\t<item>SetSortingPerm</item>\n\t\t\t<item>SetSource</item>\n\t\t\t<item>SetSparseCartanMatrix</item>\n\t\t\t<item>SetSpecialPcgs</item>\n\t\t\t<item>SetSplittingField</item>\n\t\t\t<item>SetStabChainImmutable</item>\n\t\t\t<item>SetStabChainMutable</item>\n\t\t\t<item>SetStabChainOptions</item>\n\t\t\t<item>SetStabilizerOfExternalSet</item>\n\t\t\t<item>SetStandardGeneratorsInfo</item>\n\t\t\t<item>SetStoredExcludedOrders</item>\n\t\t\t<item>SetStoredGroebnerBasis</item>\n\t\t\t<item>SetStraightLineProgElmType</item>\n\t\t\t<item>SetStraightLineProgramsTom</item>\n\t\t\t<item>SetString</item>\n\t\t\t<item>SetStructureConstantsTable</item>\n\t\t\t<item>SetStructureDescription</item>\n\t\t\t<item>SetSubdirectProductInfo</item>\n\t\t\t<item>SetSubfields</item>\n\t\t\t<item>SetSubnormalSeriesInParent</item>\n\t\t\t<item>SetSubsTom</item>\n\t\t\t<item>SetSubspaces</item>\n\t\t\t<item>SetSubspacesAll</item>\n\t\t\t<item>SetSuccessors</item>\n\t\t\t<item>SetSupersolvableResiduum</item>\n\t\t\t<item>SetSurjectiveActionHomomorphismAttr</item>\n\t\t\t<item>SetSylowSystem</item>\n\t\t\t<item>SetSymmetricDegree</item>\n\t\t\t<item>SetSymmetricParentGroup</item>\n\t\t\t<item>SetTableOfMarks</item>\n\t\t\t<item>SetTestMonomial</item>\n\t\t\t<item>SetTestMonomialQuick</item>\n\t\t\t<item>SetTestQuasiPrimitive</item>\n\t\t\t<item>SetTestRelativelySM</item>\n\t\t\t<item>SetTestSubnormallyMonomial</item>\n\t\t\t<item>SetTietzeOrigin</item>\n\t\t\t<item>SetTrace</item>\n\t\t\t<item>SetTranformsOneIntoZero</item>\n\t\t\t<item>SetTransformationRepresentation</item>\n\t\t\t<item>SetTransformsAdditionIntoMultiplication</item>\n\t\t\t<item>SetTransformsAdditiveInversesIntoInverses</item>\n\t\t\t<item>SetTransformsInversesIntoAdditiveInverses</item>\n\t\t\t<item>SetTransformsMultiplicationIntoAddition</item>\n\t\t\t<item>SetTransformsZeroIntoOne</item>\n\t\t\t<item>SetTransitiveIdentification</item>\n\t\t\t<item>SetTransitivity</item>\n\t\t\t<item>SetTransposedMat</item>\n\t\t\t<item>SetTransposedMatAttr</item>\n\t\t\t<item>SetTransposedMatImmutable</item>\n\t\t\t<item>SetTransposedMatrixGroup</item>\n\t\t\t<item>SetTransversal</item>\n\t\t\t<item>SetTriangulizedNullspaceMat</item>\n\t\t\t<item>SetTrivialCharacter</item>\n\t\t\t<item>SetTrivialSubFLMLOR</item>\n\t\t\t<item>SetTrivialSubadditiveMagmaWithZero</item>\n\t\t\t<item>SetTrivialSubalgebra</item>\n\t\t\t<item>SetTrivialSubgroup</item>\n\t\t\t<item>SetTrivialSubmagmaWithOne</item>\n\t\t\t<item>SetTrivialSubmodule</item>\n\t\t\t<item>SetTrivialSubmonoid</item>\n\t\t\t<item>SetTrivialSubnearAdditiveMagmaWithZero</item>\n\t\t\t<item>SetTrivialSubspace</item>\n\t\t\t<item>SetTwoClosure</item>\n\t\t\t<item>SetTypeObj</item>\n\t\t\t<item>SetTzOptions</item>\n\t\t\t<item>SetTzRules</item>\n\t\t\t<item>SetUnderlyingCharacterTable</item>\n\t\t\t<item>SetUnderlyingCharacteristic</item>\n\t\t\t<item>SetUnderlyingCollection</item>\n\t\t\t<item>SetUnderlyingElementOfReesMatrixSemigroupElement</item>\n\t\t\t<item>SetUnderlyingElementOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>SetUnderlyingExternalSet</item>\n\t\t\t<item>SetUnderlyingFamily</item>\n\t\t\t<item>SetUnderlyingField</item>\n\t\t\t<item>SetUnderlyingGeneralMapping</item>\n\t\t\t<item>SetUnderlyingGroup</item>\n\t\t\t<item>SetUnderlyingLeftModule</item>\n\t\t\t<item>SetUnderlyingLieAlgebra</item>\n\t\t\t<item>SetUnderlyingMagma</item>\n\t\t\t<item>SetUnderlyingRelation</item>\n\t\t\t<item>SetUnderlyingSemigroupOfReesMatrixSemigroup</item>\n\t\t\t<item>SetUnderlyingSemigroupOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>SetUnderlyingVectorSpace</item>\n\t\t\t<item>SetUnits</item>\n\t\t\t<item>SetUniversalEnvelopingAlgebra</item>\n\t\t\t<item>SetUpperActingDomain</item>\n\t\t\t<item>SetUpperCentralSeriesOfGroup</item>\n\t\t\t<item>SetValueOption</item>\n\t\t\t<item>SetValuesOfClassFunction</item>\n\t\t\t<item>SetWeightOfGenerators</item>\n\t\t\t<item>SetWeightsTom</item>\n\t\t\t<item>SetWeylGroup</item>\n\t\t\t<item>SetWreathProductInfo</item>\n\t\t\t<item>SetX</item>\n\t\t\t<item>SetXHelp</item>\n\t\t\t<item>SetZClassRepsQClass</item>\n\t\t\t<item>SetZero</item>\n\t\t\t<item>SetZeroAttr</item>\n\t\t\t<item>SetZeroCoefficient</item>\n\t\t\t<item>SetZeroImmutable</item>\n\t\t\t<item>SetZuppos</item>\n\t\t\t<item>SetnpeGL</item>\n\t\t\t<item>SetnpePSL</item>\n\t\t\t<item>SetnpeSL</item>\n\t\t\t<item>SetsOrbits</item>\n\t\t\t<item>Setter</item>\n\t\t\t<item>ShallowCopy</item>\n\t\t\t<item>ShapeFrequencies</item>\n\t\t\t<item>SharedObj</item>\n\t\t\t<item>SharedType</item>\n\t\t\t<item>ShiftedCoeffs</item>\n\t\t\t<item>ShiftedPadicNumber</item>\n\t\t\t<item>ShortLexOrdering</item>\n\t\t\t<item>ShortLexOrderingNC</item>\n\t\t\t<item>ShortestVectors</item>\n\t\t\t<item>ShowArgument</item>\n\t\t\t<item>ShowArguments</item>\n\t\t\t<item>ShowDetails</item>\n\t\t\t<item>ShowImpliedFilters</item>\n\t\t\t<item>ShowMethods</item>\n\t\t\t<item>ShowOtherMethods</item>\n\t\t\t<item>ShowPackageVariables</item>\n\t\t\t<item>ShrinkCoeffs</item>\n\t\t\t<item>ShrinkRowVector</item>\n\t\t\t<item>ShrinkableHashTable</item>\n\t\t\t<item>ShrinkableSingleValuedHashTable</item>\n\t\t\t<item>Sift</item>\n\t\t\t<item>SiftAsWord</item>\n\t\t\t<item>SiftForStrongGenerator</item>\n\t\t\t<item>SiftFunction</item>\n\t\t\t<item>SiftGroup</item>\n\t\t\t<item>SiftOneLevel</item>\n\t\t\t<item>SiftVector</item>\n\t\t\t<item>SiftedPcElement</item>\n\t\t\t<item>SiftedPermutation</item>\n\t\t\t<item>SiftedVector</item>\n\t\t\t<item>SiftedVectorForGaussianMatrixSpace</item>\n\t\t\t<item>SiftedVectorForGaussianRowSpace</item>\n\t\t\t<item>SiftedWord</item>\n\t\t\t<item>Sigma</item>\n\t\t\t<item>SignInt</item>\n\t\t\t<item>SignPartition</item>\n\t\t\t<item>SignPerm</item>\n\t\t\t<item>SignPermGroup</item>\n\t\t\t<item>SimpleLieAlgebra</item>\n\t\t\t<item>SimpleLieAlgebraTypeH</item>\n\t\t\t<item>SimpleLieAlgebraTypeK</item>\n\t\t\t<item>SimpleLieAlgebraTypeS</item>\n\t\t\t<item>SimpleLieAlgebraTypeW</item>\n\t\t\t<item>SimpleSystem</item>\n\t\t\t<item>SimplifiedFpGroup</item>\n\t\t\t<item>SimplifyPresentation</item>\n\t\t\t<item>SimsName</item>\n\t\t\t<item>SimsNo</item>\n\t\t\t<item>SimultaneousEigenvalues</item>\n\t\t\t<item>SingleCollector</item>\n\t\t\t<item>SingleCollectorByGenerators</item>\n\t\t\t<item>SingleCollectorByRelators</item>\n\t\t\t<item>SingleValuedHashTable</item>\n\t\t\t<item>Size</item>\n\t\t\t<item>SizeBlist</item>\n\t\t\t<item>SizeConsiderFunction</item>\n\t\t\t<item>SizeGL</item>\n\t\t\t<item>SizeNumbersPerfectGroups</item>\n\t\t\t<item>SizeOfChainOfGroup</item>\n\t\t\t<item>SizeOfFieldOfDefinition</item>\n\t\t\t<item>SizeOfGLdZmodmZ</item>\n\t\t\t<item>SizePSL</item>\n\t\t\t<item>SizePolynomialUnipotentClassGL</item>\n\t\t\t<item>SizeSL</item>\n\t\t\t<item>SizeScreen</item>\n\t\t\t<item>SizeStabChain</item>\n\t\t\t<item>SizeUpperBound</item>\n\t\t\t<item>SizesCentralizers</item>\n\t\t\t<item>SizesConjugacyClasses</item>\n\t\t\t<item>SizesPerfectGroups</item>\n\t\t\t<item>Sleep</item>\n\t\t\t<item>SmallGeneratingSet</item>\n\t\t\t<item>SmallGroup</item>\n\t\t\t<item>SmallGroupsInformation</item>\n\t\t\t<item>SmallSpaceCutoff</item>\n\t\t\t<item>SmallerDegreePermutationRepresentation</item>\n\t\t\t<item>SmallestGeneratorPerm</item>\n\t\t\t<item>SmallestMovedPoint</item>\n\t\t\t<item>SmallestMovedPointPerm</item>\n\t\t\t<item>SmallestMovedPointPerms</item>\n\t\t\t<item>SmallestPrimeDivisor</item>\n\t\t\t<item>SmallestRootInt</item>\n\t\t\t<item>SmithNormalFormIntegerMat</item>\n\t\t\t<item>SmithNormalFormIntegerMatTransforms</item>\n\t\t\t<item>SmithNormalFormSQ</item>\n\t\t\t<item>Socle</item>\n\t\t\t<item>SocleComplement</item>\n\t\t\t<item>SocleDimensions</item>\n\t\t\t<item>SocleTypePrimitiveGroup</item>\n\t\t\t<item>SolutionIntMat</item>\n\t\t\t<item>SolutionMat</item>\n\t\t\t<item>SolutionMatDestructive</item>\n\t\t\t<item>SolutionMatNoCo</item>\n\t\t\t<item>SolutionNullspaceIntMat</item>\n\t\t\t<item>SolutionSQ</item>\n\t\t\t<item>SolvableNormalClosurePermGroup</item>\n\t\t\t<item>SolvableQuotient</item>\n\t\t\t<item>SomeVerbalSubgroups</item>\n\t\t\t<item>Sort</item>\n\t\t\t<item>SortParallel</item>\n\t\t\t<item>SortRationalClasses</item>\n\t\t\t<item>SortRelsSortedByStartGen</item>\n\t\t\t<item>SortedCharacterTable</item>\n\t\t\t<item>SortedCharacters</item>\n\t\t\t<item>SortedList</item>\n\t\t\t<item>SortedSparseActionHomomorphism</item>\n\t\t\t<item>SortedSparseActionHomomorphismOp</item>\n\t\t\t<item>SortedTom</item>\n\t\t\t<item>Sortex</item>\n\t\t\t<item>SortingPerm</item>\n\t\t\t<item>Source</item>\n\t\t\t<item>SourceElt</item>\n\t\t\t<item>Sp</item>\n\t\t\t<item>SpanOfMatrixGroup</item>\n\t\t\t<item>SpanningTree</item>\n\t\t\t<item>SparseActionHomomorphism</item>\n\t\t\t<item>SparseActionHomomorphismOp</item>\n\t\t\t<item>SparseCartanMatrix</item>\n\t\t\t<item>SparseHashTable</item>\n\t\t\t<item>SparseIntKey</item>\n\t\t\t<item>SpecialLinearGroup</item>\n\t\t\t<item>SpecialLinearGroupCons</item>\n\t\t\t<item>SpecialOrthogonalGroup</item>\n\t\t\t<item>SpecialOrthogonalGroupCons</item>\n\t\t\t<item>SpecialPcgs</item>\n\t\t\t<item>SpecialPcgsFactor</item>\n\t\t\t<item>SpecialPcgsSubgroup</item>\n\t\t\t<item>SpecialUnitaryGroup</item>\n\t\t\t<item>SpecialUnitaryGroupCons</item>\n\t\t\t<item>SpecializedExtRepPol</item>\n\t\t\t<item>SpinInductionScheme</item>\n\t\t\t<item>SpinorNorm</item>\n\t\t\t<item>SplitCell</item>\n\t\t\t<item>SplitCharacters</item>\n\t\t\t<item>SplitExtension</item>\n\t\t\t<item>SplitStep</item>\n\t\t\t<item>SplitString</item>\n\t\t\t<item>SplitStringInternal</item>\n\t\t\t<item>SplitTwoSpace</item>\n\t\t\t<item>SplitUpSublistsByFpFunc</item>\n\t\t\t<item>SplitWordTail</item>\n\t\t\t<item>SplittingField</item>\n\t\t\t<item>Sqrt</item>\n\t\t\t<item>SquareRoots</item>\n\t\t\t<item>StabChain</item>\n\t\t\t<item>StabChainBaseStrongGenerators</item>\n\t\t\t<item>StabChainForcePoint</item>\n\t\t\t<item>StabChainImmutable</item>\n\t\t\t<item>StabChainMutable</item>\n\t\t\t<item>StabChainOp</item>\n\t\t\t<item>StabChainOptions</item>\n\t\t\t<item>StabChainPermGroupToPermGroupGeneralMappingByImages</item>\n\t\t\t<item>StabChainRandomPermGroup</item>\n\t\t\t<item>StabChainStrong</item>\n\t\t\t<item>StabChainSwap</item>\n\t\t\t<item>Stabilizer</item>\n\t\t\t<item>StabilizerByMatrixOperation</item>\n\t\t\t<item>StabilizerFunc</item>\n\t\t\t<item>StabilizerFuncOp</item>\n\t\t\t<item>StabilizerOfBlockNC</item>\n\t\t\t<item>StabilizerOfExternalSet</item>\n\t\t\t<item>StabilizerOp</item>\n\t\t\t<item>StabilizerPcgs</item>\n\t\t\t<item>StandardAssociate</item>\n\t\t\t<item>StandardClassMatrixColumn</item>\n\t\t\t<item>StandardGeneratorsFunctions</item>\n\t\t\t<item>StandardGeneratorsInfo</item>\n\t\t\t<item>StandardGeneratorsOfFullHomModule</item>\n\t\t\t<item>StandardGeneratorsOfFullMatrixModule</item>\n\t\t\t<item>StandardGeneratorsOfGroup</item>\n\t\t\t<item>StandardScalarProduct</item>\n\t\t\t<item>StandardizeTable</item>\n\t\t\t<item>StandardizeTableC</item>\n\t\t\t<item>StarCyc</item>\n\t\t\t<item>StateRandom</item>\n\t\t\t<item>StatusRandom</item>\n\t\t\t<item>StepModGauss</item>\n\t\t\t<item>StopNumConsecSiftToOne</item>\n\t\t\t<item>StopNumSift</item>\n\t\t\t<item>StopSize</item>\n\t\t\t<item>StoreAlgExtFam</item>\n\t\t\t<item>StoreFactorsPol</item>\n\t\t\t<item>StoreFusion</item>\n\t\t\t<item>StoreInfoFreeMagma</item>\n\t\t\t<item>StoredExcludedOrders</item>\n\t\t\t<item>StoredGroebnerBasis</item>\n\t\t\t<item>StraightLineProgElm</item>\n\t\t\t<item>StraightLineProgElmType</item>\n\t\t\t<item>StraightLineProgGens</item>\n\t\t\t<item>StraightLineProgram</item>\n\t\t\t<item>StraightLineProgramElmRankFilter</item>\n\t\t\t<item>StraightLineProgramNC</item>\n\t\t\t<item>StraightLineProgramsDefaultType</item>\n\t\t\t<item>StraightLineProgramsFamily</item>\n\t\t\t<item>StraightLineProgramsTom</item>\n\t\t\t<item>StratMeetPartition</item>\n\t\t\t<item>StreamsFamily</item>\n\t\t\t<item>StretchImportantSLPElement</item>\n\t\t\t<item>String</item>\n\t\t\t<item>StringDate</item>\n\t\t\t<item>StringFamily</item>\n\t\t\t<item>StringFile</item>\n\t\t\t<item>StringImType</item>\n\t\t\t<item>StringOfResultOfLineOfStraightLineProgram</item>\n\t\t\t<item>StringOfResultOfStraightLineProgram</item>\n\t\t\t<item>StringOfUnivariateRationalPolynomialByCoefficients</item>\n\t\t\t<item>StringPP</item>\n\t\t\t<item>StringPrint</item>\n\t\t\t<item>StringStreamInputTextFile</item>\n\t\t\t<item>StringTime</item>\n\t\t\t<item>StringToStraightLineProgram</item>\n\t\t\t<item>StringUnivariateLaurent</item>\n\t\t\t<item>StringView</item>\n\t\t\t<item>StripBeginEnd</item>\n\t\t\t<item>StripEscapeSequences</item>\n\t\t\t<item>StrongGeneratorsStabChain</item>\n\t\t\t<item>StrongGens</item>\n\t\t\t<item>StronglyConnectedComponents</item>\n\t\t\t<item>StructuralCopy</item>\n\t\t\t<item>StructureConstantsPadicNumbers</item>\n\t\t\t<item>StructureConstantsTable</item>\n\t\t\t<item>StructureDescription</item>\n\t\t\t<item>SuPeRfail</item>\n\t\t\t<item>SubAlgebraModule</item>\n\t\t\t<item>SubFLMLOR</item>\n\t\t\t<item>SubFLMLORNC</item>\n\t\t\t<item>SubFLMLORWithOne</item>\n\t\t\t<item>SubFLMLORWithOneNC</item>\n\t\t\t<item>SubGModLeadPos</item>\n\t\t\t<item>SubSyllables</item>\n\t\t\t<item>SubadditiveGroup</item>\n\t\t\t<item>SubadditiveGroupNC</item>\n\t\t\t<item>SubadditiveMagma</item>\n\t\t\t<item>SubadditiveMagmaNC</item>\n\t\t\t<item>SubadditiveMagmaWithInverses</item>\n\t\t\t<item>SubadditiveMagmaWithInversesNC</item>\n\t\t\t<item>SubadditiveMagmaWithZero</item>\n\t\t\t<item>SubadditiveMagmaWithZeroNC</item>\n\t\t\t<item>Subalgebra</item>\n\t\t\t<item>SubalgebraNC</item>\n\t\t\t<item>SubalgebraWithOne</item>\n\t\t\t<item>SubalgebraWithOneNC</item>\n\t\t\t<item>SubdirProdPcGroups</item>\n\t\t\t<item>SubdirectDiagonalPerms</item>\n\t\t\t<item>SubdirectProduct</item>\n\t\t\t<item>SubdirectProductInfo</item>\n\t\t\t<item>SubdirectProductOp</item>\n\t\t\t<item>SubdirectProducts</item>\n\t\t\t<item>Subfield</item>\n\t\t\t<item>SubfieldNC</item>\n\t\t\t<item>Subfields</item>\n\t\t\t<item>SubgpConjSymmgp</item>\n\t\t\t<item>Subgroup</item>\n\t\t\t<item>SubgroupByPcgs</item>\n\t\t\t<item>SubgroupByProperty</item>\n\t\t\t<item>SubgroupGeneratorsCosetTable</item>\n\t\t\t<item>SubgroupMethodByNiceMonomorphism</item>\n\t\t\t<item>SubgroupMethodByNiceMonomorphismCollColl</item>\n\t\t\t<item>SubgroupMethodByNiceMonomorphismCollElm</item>\n\t\t\t<item>SubgroupMethodByNiceMonomorphismCollOther</item>\n\t\t\t<item>SubgroupNC</item>\n\t\t\t<item>SubgroupOfWholeGroupByCosetTable</item>\n\t\t\t<item>SubgroupOfWholeGroupByQuotientSubgroup</item>\n\t\t\t<item>SubgroupProperty</item>\n\t\t\t<item>SubgroupShell</item>\n\t\t\t<item>SubgroupsMethodByNiceMonomorphism</item>\n\t\t\t<item>SubgroupsOrbitsAndNormalizers</item>\n\t\t\t<item>SubgroupsSolvableGroup</item>\n\t\t\t<item>Submagma</item>\n\t\t\t<item>SubmagmaNC</item>\n\t\t\t<item>SubmagmaWithInverses</item>\n\t\t\t<item>SubmagmaWithInversesNC</item>\n\t\t\t<item>SubmagmaWithOne</item>\n\t\t\t<item>SubmagmaWithOneNC</item>\n\t\t\t<item>Submodule</item>\n\t\t\t<item>SubmoduleNC</item>\n\t\t\t<item>Submonoid</item>\n\t\t\t<item>SubmonoidNC</item>\n\t\t\t<item>SubnearAdditiveGroup</item>\n\t\t\t<item>SubnearAdditiveGroupNC</item>\n\t\t\t<item>SubnearAdditiveMagma</item>\n\t\t\t<item>SubnearAdditiveMagmaNC</item>\n\t\t\t<item>SubnearAdditiveMagmaWithInverses</item>\n\t\t\t<item>SubnearAdditiveMagmaWithInversesNC</item>\n\t\t\t<item>SubnearAdditiveMagmaWithZero</item>\n\t\t\t<item>SubnearAdditiveMagmaWithZeroNC</item>\n\t\t\t<item>SubnormalSeries</item>\n\t\t\t<item>SubnormalSeriesInParent</item>\n\t\t\t<item>SubnormalSeriesOp</item>\n\t\t\t<item>SuboLiBli</item>\n\t\t\t<item>SuboSiBli</item>\n\t\t\t<item>SuboTruePos</item>\n\t\t\t<item>SuboUniteBlist</item>\n\t\t\t<item>Suborbits</item>\n\t\t\t<item>Subring</item>\n\t\t\t<item>SubringNC</item>\n\t\t\t<item>SubringWithOne</item>\n\t\t\t<item>SubringWithOneNC</item>\n\t\t\t<item>SubsTom</item>\n\t\t\t<item>Subsemigroup</item>\n\t\t\t<item>SubsemigroupNC</item>\n\t\t\t<item>Subsemiring</item>\n\t\t\t<item>SubsemiringNC</item>\n\t\t\t<item>SubsemiringWithOne</item>\n\t\t\t<item>SubsemiringWithOneAndZero</item>\n\t\t\t<item>SubsemiringWithOneAndZeroNC</item>\n\t\t\t<item>SubsemiringWithOneNC</item>\n\t\t\t<item>SubsemiringWithZero</item>\n\t\t\t<item>SubsemiringWithZeroNC</item>\n\t\t\t<item>Subspace</item>\n\t\t\t<item>SubspaceNC</item>\n\t\t\t<item>SubspaceVectorSpaceGroup</item>\n\t\t\t<item>Subspaces</item>\n\t\t\t<item>SubspacesAll</item>\n\t\t\t<item>SubspacesDim</item>\n\t\t\t<item>SubstitutedWord</item>\n\t\t\t<item>SubstitutionSublist</item>\n\t\t\t<item>SubtractBlist</item>\n\t\t\t<item>SubtractBlistOrbitStabChain</item>\n\t\t\t<item>SubtractSet</item>\n\t\t\t<item>Subtype</item>\n\t\t\t<item>Subword</item>\n\t\t\t<item>Successors</item>\n\t\t\t<item>SuggestUpgrades</item>\n\t\t\t<item>Sum</item>\n\t\t\t<item>SumCoefPolynomial</item>\n\t\t\t<item>SumCoefRatfun</item>\n\t\t\t<item>SumCoeffLaurpol</item>\n\t\t\t<item>SumCoeffUnivfunc</item>\n\t\t\t<item>SumFactorizationFunctionPcgs</item>\n\t\t\t<item>SumIntersectionMat</item>\n\t\t\t<item>SumOfMBMAndMapping</item>\n\t\t\t<item>SumOfMappingAndMBM</item>\n\t\t\t<item>SumOfPcElement</item>\n\t\t\t<item>SumOp</item>\n\t\t\t<item>SumPcgs</item>\n\t\t\t<item>SumRootsPol</item>\n\t\t\t<item>SumRootsPolComp</item>\n\t\t\t<item>SumX</item>\n\t\t\t<item>SumXHelp</item>\n\t\t\t<item>SummandMolienSeries</item>\n\t\t\t<item>SupType</item>\n\t\t\t<item>SupersolvableResiduum</item>\n\t\t\t<item>SupersolvableResiduumDefault</item>\n\t\t\t<item>SupportedCharacterTableInfo</item>\n\t\t\t<item>SupportedLibraryTableComponents</item>\n\t\t\t<item>SurjectiveActionHomomorphismAttr</item>\n\t\t\t<item>SuzukiGroup</item>\n\t\t\t<item>SuzukiGroupCons</item>\n\t\t\t<item>SyllableRepAssocWord</item>\n\t\t\t<item>SyllableWordObjByExtRep</item>\n\t\t\t<item>SylowComplement</item>\n\t\t\t<item>SylowComplementOp</item>\n\t\t\t<item>SylowSubgroup</item>\n\t\t\t<item>SylowSubgroupOp</item>\n\t\t\t<item>SylowSubgroupPermGroup</item>\n\t\t\t<item>SylowSystem</item>\n\t\t\t<item>SymAdic</item>\n\t\t\t<item>SymmetricClosureBinaryRelation</item>\n\t\t\t<item>SymmetricDegree</item>\n\t\t\t<item>SymmetricGroup</item>\n\t\t\t<item>SymmetricGroupCons</item>\n\t\t\t<item>SymmetricParentGroup</item>\n\t\t\t<item>SymmetricParts</item>\n\t\t\t<item>SymmetricPower</item>\n\t\t\t<item>SymmetricPowerOfAlgebraModule</item>\n\t\t\t<item>Symmetrisations</item>\n\t\t\t<item>Symmetrizations</item>\n\t\t\t<item>SymplecticComponents</item>\n\t\t\t<item>SymplecticGroup</item>\n\t\t\t<item>SymplecticGroupCons</item>\n\t\t\t<item>SyzygyCriterion</item>\n\t\t\t<item>Sz</item>\n\t\t\t<item>TRANSGrp</item>\n\t\t\t<item>TRANSProperties</item>\n\t\t\t<item>TableAutomorphisms</item>\n\t\t\t<item>TableHasIntKeyFun</item>\n\t\t\t<item>TableOfMarks</item>\n\t\t\t<item>TableOfMarksByLattice</item>\n\t\t\t<item>TableOfMarksComponents</item>\n\t\t\t<item>TableOfMarksCyclic</item>\n\t\t\t<item>TableOfMarksDihedral</item>\n\t\t\t<item>TableOfMarksFamily</item>\n\t\t\t<item>TableOfMarksFrobenius</item>\n\t\t\t<item>TableOfMarksFromLibrary</item>\n\t\t\t<item>TailOfPcgsPermGroup</item>\n\t\t\t<item>TailsInverses</item>\n\t\t\t<item>Tau</item>\n\t\t\t<item>TeX</item>\n\t\t\t<item>TeXObj</item>\n\t\t\t<item>TemporaryGlobalVarName</item>\n\t\t\t<item>TensorProduct</item>\n\t\t\t<item>TensorProductGModule</item>\n\t\t\t<item>TensorProductOfAlgebraModules</item>\n\t\t\t<item>TensorWreathProductOfMatrixGroup</item>\n\t\t\t<item>Tensored</item>\n\t\t\t<item>TestConsistencyMaps</item>\n\t\t\t<item>TestHomogeneous</item>\n\t\t\t<item>TestInducedFromNormalSubgroup</item>\n\t\t\t<item>TestJacobi</item>\n\t\t\t<item>TestMonomial</item>\n\t\t\t<item>TestMonomialFromLattice</item>\n\t\t\t<item>TestMonomialQuick</item>\n\t\t\t<item>TestMonomialUseLattice</item>\n\t\t\t<item>TestPackageAvailability</item>\n\t\t\t<item>TestQuasiPrimitive</item>\n\t\t\t<item>TestRelativelySM</item>\n\t\t\t<item>TestRelativelySMFun</item>\n\t\t\t<item>TestRow</item>\n\t\t\t<item>TestSubnormallyMonomial</item>\n\t\t\t<item>Tester</item>\n\t\t\t<item>TextAttr</item>\n\t\t\t<item>TextM</item>\n\t\t\t<item>TietzeOrigin</item>\n\t\t\t<item>TietzeWordAbstractWord</item>\n\t\t\t<item>TmpDirectory</item>\n\t\t\t<item>TmpName</item>\n\t\t\t<item>ToBeDefinedObjFamily</item>\n\t\t\t<item>ToBeDefinedObjType</item>\n\t\t\t<item>ToggleEcho</item>\n\t\t\t<item>TopExtensionsByAutomorphism</item>\n\t\t\t<item>Trace</item>\n\t\t\t<item>TraceDefinition</item>\n\t\t\t<item>TraceImmediateMethods</item>\n\t\t\t<item>TraceMat</item>\n\t\t\t<item>TraceMethods</item>\n\t\t\t<item>TraceModQF</item>\n\t\t\t<item>TracePolynomial</item>\n\t\t\t<item>TracedCosetFpGroup</item>\n\t\t\t<item>TrailingEntriesLTM</item>\n\t\t\t<item>TranformsOneIntoZero</item>\n\t\t\t<item>TransArrange</item>\n\t\t\t<item>TransCombinat</item>\n\t\t\t<item>TransGrpLoad</item>\n\t\t\t<item>TransStabCSPG</item>\n\t\t\t<item>TransferDiagram</item>\n\t\t\t<item>TransferPcgsInfo</item>\n\t\t\t<item>TransferedExtensionPol</item>\n\t\t\t<item>Transformation</item>\n\t\t\t<item>TransformationData</item>\n\t\t\t<item>TransformationFamily</item>\n\t\t\t<item>TransformationNC</item>\n\t\t\t<item>TransformationRelation</item>\n\t\t\t<item>TransformationRepresentation</item>\n\t\t\t<item>TransformationType</item>\n\t\t\t<item>TransformingPermutationFamily</item>\n\t\t\t<item>TransformingPermutations</item>\n\t\t\t<item>TransformingPermutationsCharacterTables</item>\n\t\t\t<item>TransformsAdditionIntoMultiplication</item>\n\t\t\t<item>TransformsAdditiveInversesIntoInverses</item>\n\t\t\t<item>TransformsInversesIntoAdditiveInverses</item>\n\t\t\t<item>TransformsMultiplicationIntoAddition</item>\n\t\t\t<item>TransformsZeroIntoOne</item>\n\t\t\t<item>TransitiveClosureBinaryRelation</item>\n\t\t\t<item>TransitiveGroup</item>\n\t\t\t<item>TransitiveIdentification</item>\n\t\t\t<item>Transitivity</item>\n\t\t\t<item>TranslateString</item>\n\t\t\t<item>TranslatorSubalgebra</item>\n\t\t\t<item>TransposedMat</item>\n\t\t\t<item>TransposedMatAttr</item>\n\t\t\t<item>TransposedMatDestructive</item>\n\t\t\t<item>TransposedMatImmutable</item>\n\t\t\t<item>TransposedMatMutable</item>\n\t\t\t<item>TransposedMatOp</item>\n\t\t\t<item>TransposedMatrixGroup</item>\n\t\t\t<item>TransvByDirProdFamily</item>\n\t\t\t<item>TransvByHomomorphismFamily</item>\n\t\t\t<item>TransvBySchreierTreeFamily</item>\n\t\t\t<item>TransvBySiftFunctFamily</item>\n\t\t\t<item>TransvByTrivSubgrpFamily</item>\n\t\t\t<item>Transversal</item>\n\t\t\t<item>TransversalBySiftFunction</item>\n\t\t\t<item>TransversalByTrivial</item>\n\t\t\t<item>TransversalElt</item>\n\t\t\t<item>TransversalOfChainSubgroup</item>\n\t\t\t<item>TreeEntry</item>\n\t\t\t<item>TreeRepresentedWord</item>\n\t\t\t<item>TrialQuotientRPF</item>\n\t\t\t<item>TriangulizeIntegerMat</item>\n\t\t\t<item>TriangulizeMat</item>\n\t\t\t<item>TriangulizeMonomialElementList</item>\n\t\t\t<item>TriangulizeWeightRepElementList</item>\n\t\t\t<item>TriangulizedGeneratorsByMatrix</item>\n\t\t\t<item>TriangulizedIntegerMat</item>\n\t\t\t<item>TriangulizedIntegerMatTransform</item>\n\t\t\t<item>TriangulizedIntegerMatTransforms</item>\n\t\t\t<item>TriangulizedNullspaceMat</item>\n\t\t\t<item>TriangulizedNullspaceMatDestructive</item>\n\t\t\t<item>TriangulizedNullspaceMatNT</item>\n\t\t\t<item>TrivialCharacter</item>\n\t\t\t<item>TrivialGModule</item>\n\t\t\t<item>TrivialGroup</item>\n\t\t\t<item>TrivialGroupCons</item>\n\t\t\t<item>TrivialIterator</item>\n\t\t\t<item>TrivialModule</item>\n\t\t\t<item>TrivialPartition</item>\n\t\t\t<item>TrivialQuotientSubgroup</item>\n\t\t\t<item>TrivialSubFLMLOR</item>\n\t\t\t<item>TrivialSubadditiveMagmaWithZero</item>\n\t\t\t<item>TrivialSubalgebra</item>\n\t\t\t<item>TrivialSubgroup</item>\n\t\t\t<item>TrivialSubmagmaWithOne</item>\n\t\t\t<item>TrivialSubmodule</item>\n\t\t\t<item>TrivialSubmonoid</item>\n\t\t\t<item>TrivialSubnearAdditiveMagmaWithZero</item>\n\t\t\t<item>TrivialSubspace</item>\n\t\t\t<item>TryCombinations</item>\n\t\t\t<item>TryConwayPolynomialForFrobeniusCharacterValue</item>\n\t\t\t<item>TryCosetTableInWholeGroup</item>\n\t\t\t<item>TryGcdCancelExtRepPolynomials</item>\n\t\t\t<item>TryLayerSQ</item>\n\t\t\t<item>TryModuleSQ</item>\n\t\t\t<item>TryNextMethod</item>\n\t\t\t<item>TryPcgsPermGroup</item>\n\t\t\t<item>TrySecondaryImages</item>\n\t\t\t<item>Tschirnhausen</item>\n\t\t\t<item>Tuple</item>\n\t\t\t<item>TupleNC</item>\n\t\t\t<item>Tuples</item>\n\t\t\t<item>TuplesFamily</item>\n\t\t\t<item>TuplesK</item>\n\t\t\t<item>TwoClosure</item>\n\t\t\t<item>TwoClosurePermGroup</item>\n\t\t\t<item>TwoCoboundaries</item>\n\t\t\t<item>TwoCoboundariesSQ</item>\n\t\t\t<item>TwoCocycles</item>\n\t\t\t<item>TwoCocyclesSQ</item>\n\t\t\t<item>TwoCohomology</item>\n\t\t\t<item>TwoCohomologySQ</item>\n\t\t\t<item>TwoSeqPol</item>\n\t\t\t<item>TwoSidedIdeal</item>\n\t\t\t<item>TwoSidedIdealByGenerators</item>\n\t\t\t<item>TwoSidedIdealNC</item>\n\t\t\t<item>TwoSquares</item>\n\t\t\t<item>TypeObj</item>\n\t\t\t<item>TypeOfDefaultGeneralMapping</item>\n\t\t\t<item>TypeOfFamilies</item>\n\t\t\t<item>TypeOfFamilyOfFamilies</item>\n\t\t\t<item>TypeOfFamilyOfTypes</item>\n\t\t\t<item>TypeOfTypes</item>\n\t\t\t<item>TzCheckRecord</item>\n\t\t\t<item>TzEliminate</item>\n\t\t\t<item>TzEliminateFromTree</item>\n\t\t\t<item>TzEliminateGen</item>\n\t\t\t<item>TzEliminateGens</item>\n\t\t\t<item>TzFindCyclicJoins</item>\n\t\t\t<item>TzGeneratorExponents</item>\n\t\t\t<item>TzGo</item>\n\t\t\t<item>TzGoGo</item>\n\t\t\t<item>TzImagesOldGens</item>\n\t\t\t<item>TzInitGeneratorImages</item>\n\t\t\t<item>TzMostFrequentPairs</item>\n\t\t\t<item>TzNewGenerator</item>\n\t\t\t<item>TzOccurrences</item>\n\t\t\t<item>TzOccurrencesPairs</item>\n\t\t\t<item>TzOptionNames</item>\n\t\t\t<item>TzOptions</item>\n\t\t\t<item>TzPreImagesNewGens</item>\n\t\t\t<item>TzPrint</item>\n\t\t\t<item>TzPrintGeneratorImages</item>\n\t\t\t<item>TzPrintGenerators</item>\n\t\t\t<item>TzPrintLengths</item>\n\t\t\t<item>TzPrintOptions</item>\n\t\t\t<item>TzPrintPairs</item>\n\t\t\t<item>TzPrintPresentation</item>\n\t\t\t<item>TzPrintRelators</item>\n\t\t\t<item>TzPrintStatus</item>\n\t\t\t<item>TzRelator</item>\n\t\t\t<item>TzRemoveGenerators</item>\n\t\t\t<item>TzRenumberGens</item>\n\t\t\t<item>TzReplaceGens</item>\n\t\t\t<item>TzRules</item>\n\t\t\t<item>TzSearch</item>\n\t\t\t<item>TzSearchC</item>\n\t\t\t<item>TzSearchEqual</item>\n\t\t\t<item>TzSort</item>\n\t\t\t<item>TzSortC</item>\n\t\t\t<item>TzSubstitute</item>\n\t\t\t<item>TzSubstituteCyclicJoins</item>\n\t\t\t<item>TzSubstituteGen</item>\n\t\t\t<item>TzSubstituteWord</item>\n\t\t\t<item>TzTestInitialSetup</item>\n\t\t\t<item>TzUpdateGeneratorImages</item>\n\t\t\t<item>TzWordAbstractWord</item>\n\t\t\t<item>UNIXSelect</item>\n\t\t\t<item>UglyVector</item>\n\t\t\t<item>UnInstallCharReadHookFunc</item>\n\t\t\t<item>UnSetImage</item>\n\t\t\t<item>Unbind</item>\n\t\t\t<item>UnbindElmWPObj</item>\n\t\t\t<item>UnbindGlobal</item>\n\t\t\t<item>UnderlyingCharacterTable</item>\n\t\t\t<item>UnderlyingCharacteristic</item>\n\t\t\t<item>UnderlyingCollection</item>\n\t\t\t<item>UnderlyingDomainOfBinaryRelation</item>\n\t\t\t<item>UnderlyingElement</item>\n\t\t\t<item>UnderlyingElementOfReesMatrixSemigroupElement</item>\n\t\t\t<item>UnderlyingElementOfReesZeroMatrixSemigroupElement</item>\n\t\t\t<item>UnderlyingExternalSet</item>\n\t\t\t<item>UnderlyingFamily</item>\n\t\t\t<item>UnderlyingField</item>\n\t\t\t<item>UnderlyingGeneralMapping</item>\n\t\t\t<item>UnderlyingGroup</item>\n\t\t\t<item>UnderlyingLeftModule</item>\n\t\t\t<item>UnderlyingLieAlgebra</item>\n\t\t\t<item>UnderlyingMagma</item>\n\t\t\t<item>UnderlyingRelation</item>\n\t\t\t<item>UnderlyingSemigroupOfReesMatrixSemigroup</item>\n\t\t\t<item>UnderlyingSemigroupOfReesZeroMatrixSemigroup</item>\n\t\t\t<item>UnderlyingVectorSpace</item>\n\t\t\t<item>UndoRefinement</item>\n\t\t\t<item>UnhideGlobalVariables</item>\n\t\t\t<item>Union</item>\n\t\t\t<item>UnionBlist</item>\n\t\t\t<item>UnionSet</item>\n\t\t\t<item>UnipotentSubgroup</item>\n\t\t\t<item>Unique</item>\n\t\t\t<item>UniteBlist</item>\n\t\t\t<item>UniteBlistList</item>\n\t\t\t<item>UniteSet</item>\n\t\t\t<item>Units</item>\n\t\t\t<item>UnivariateLaurentPolynomialByCoefficients</item>\n\t\t\t<item>UnivariatePolynomial</item>\n\t\t\t<item>UnivariatePolynomialByCoefficients</item>\n\t\t\t<item>UnivariatePolynomialRing</item>\n\t\t\t<item>UnivariateRationalFunctionByCoefficients</item>\n\t\t\t<item>UnivariateRationalFunctionByExtRep</item>\n\t\t\t<item>UnivariatenessTestRationalFunction</item>\n\t\t\t<item>UniversalEnvelopingAlgebra</item>\n\t\t\t<item>Unknown</item>\n\t\t\t<item>UnknownsType</item>\n\t\t\t<item>UnloadSmallGroupsData</item>\n\t\t\t<item>UnlockNaturalHomomorphismsPool</item>\n\t\t\t<item>UnmarkTree</item>\n\t\t\t<item>UnorderedTuples</item>\n\t\t\t<item>UnorderedTuplesK</item>\n\t\t\t<item>UnprofileFunctions</item>\n\t\t\t<item>UnprofileMethods</item>\n\t\t\t<item>UntraceMethods</item>\n\t\t\t<item>UpEnv</item>\n\t\t\t<item>UpdateMap</item>\n\t\t\t<item>UpdatePolycyclicCollector</item>\n\t\t\t<item>UpdateWeightInfo</item>\n\t\t\t<item>UpperActingDomain</item>\n\t\t\t<item>UpperCentralSeries</item>\n\t\t\t<item>UpperCentralSeriesOfGroup</item>\n\t\t\t<item>UpperSubdiagonal</item>\n\t\t\t<item>UseBasis</item>\n\t\t\t<item>UseFactorRelation</item>\n\t\t\t<item>UseIsomorphismRelation</item>\n\t\t\t<item>UseMatrixChainSubgroups</item>\n\t\t\t<item>UsePermChainSubgroups</item>\n\t\t\t<item>UseStabChainViaChainSubgroup</item>\n\t\t\t<item>UseSubsetRelation</item>\n\t\t\t<item>UseSubsetRelationNC</item>\n\t\t\t<item>VPActionHom</item>\n\t\t\t<item>VSTInsertToLeft</item>\n\t\t\t<item>VSTNode</item>\n\t\t\t<item>ValidatePackageInfo</item>\n\t\t\t<item>Valuation</item>\n\t\t\t<item>Value</item>\n\t\t\t<item>ValueCochain</item>\n\t\t\t<item>ValueGlobal</item>\n\t\t\t<item>ValueMolienSeries</item>\n\t\t\t<item>ValueOption</item>\n\t\t\t<item>ValuePol</item>\n\t\t\t<item>ValuesOfClassFunction</item>\n\t\t\t<item>VectorOfRelator</item>\n\t\t\t<item>VectorSearchTable</item>\n\t\t\t<item>VectorSpace</item>\n\t\t\t<item>VectorSpaceByPcgsOfElementaryAbelianGroup</item>\n\t\t\t<item>VerifySGS</item>\n\t\t\t<item>VerifyStabilizer</item>\n\t\t\t<item>View</item>\n\t\t\t<item>ViewFullHomModule</item>\n\t\t\t<item>ViewLength</item>\n\t\t\t<item>ViewMolienSeries</item>\n\t\t\t<item>ViewObj</item>\n\t\t\t<item>VirtualCharacter</item>\n\t\t\t<item>WallForm</item>\n\t\t\t<item>WeakPointerObj</item>\n\t\t\t<item>WedgeGModule</item>\n\t\t\t<item>WeekDay</item>\n\t\t\t<item>WeightLexOrdering</item>\n\t\t\t<item>WeightLexOrderingNC</item>\n\t\t\t<item>WeightOfGenerators</item>\n\t\t\t<item>WeightVecFFE</item>\n\t\t\t<item>WeightsTom</item>\n\t\t\t<item>WeylGroup</item>\n\t\t\t<item>WeylOrbitIterator</item>\n\t\t\t<item>Where</item>\n\t\t\t<item>WindowCmd</item>\n\t\t\t<item>Word</item>\n\t\t\t<item>WordAlp</item>\n\t\t\t<item>WordsString</item>\n\t\t\t<item>WreathElm</item>\n\t\t\t<item>WreathProduct</item>\n\t\t\t<item>WreathProductImprimitiveAction</item>\n\t\t\t<item>WreathProductInfo</item>\n\t\t\t<item>WreathProductOfMatrixGroup</item>\n\t\t\t<item>WreathProductOrdering</item>\n\t\t\t<item>WreathProductProductAction</item>\n\t\t\t<item>WriteAll</item>\n\t\t\t<item>WriteBibFile</item>\n\t\t\t<item>WriteByte</item>\n\t\t\t<item>WriteLine</item>\n\t\t\t<item>ZClassRepsQClass</item>\n\t\t\t<item>ZOp</item>\n\t\t\t<item>ZassenhausIntersection</item>\n\t\t\t<item>Zero</item>\n\t\t\t<item>ZeroAttr</item>\n\t\t\t<item>ZeroCoefficient</item>\n\t\t\t<item>ZeroCoefficientRatFun</item>\n\t\t\t<item>ZeroImmutable</item>\n\t\t\t<item>ZeroMapping</item>\n\t\t\t<item>ZeroMutable</item>\n\t\t\t<item>ZeroOp</item>\n\t\t\t<item>ZeroSM</item>\n\t\t\t<item>ZeroSameMutability</item>\n\t\t\t<item>ZevData</item>\n\t\t\t<item>ZevDataValue</item>\n\t\t\t<item>ZippedListQuotient</item>\n\t\t\t<item>ZippedProduct</item>\n\t\t\t<item>ZippedSum</item>\n\t\t\t<item>ZmodnZ</item>\n\t\t\t<item>ZmodnZObj</item>\n\t\t\t<item>ZmodpZ</item>\n\t\t\t<item>ZmodpZNC</item>\n\t\t\t<item>ZumbroichBase</item>\n\t\t\t<item>Zuppos</item>\n\t\t</list>\n\n\n\t\t<contexts>\n\n\t\t\t<context name=\"Top_Level\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces />\n\n\t\t\t\t<IncludeRules context=\"Strings\" />\n\t\t\t\t<IncludeRules context=\"Code_Folding\" />\n\t\t\t\t<IncludeRules context=\"Two Char Operators\" />\n\n\t\t\t\t<DetectChar   context=\"Commentary\"   char=\"#\" />\n\n\t\t\t\t<AnyChar      context=\"#stay\"        attribute=\"Operator1\"          String=\"!%*+,/;=>|;-:&lt;&gt;\\^\" />\n\n\n\n\t\t\t\t<keyword      context=\"#stay\"        attribute=\"Builtin Functions\"  String=\"builtinfunctions\" />\n\t\t\t\t<keyword      context=\"#stay\"        attribute=\"Control Statements\" String=\"controlstatements\" />\n\t\t\t\t<keyword      context=\"#stay\"        attribute=\"GAP Keywords\"       String=\"gapkeywords\" />\n\t\t\t\t<keyword      context=\"#stay\"        attribute=\"Logic Operators\"    String=\"logicoperators\" />\n\t\t\t\t<keyword      context=\"#stay\"        attribute=\"Math Operators\"    String=\"mathoperators\" />\n\n\t\t\t\t<RegExpr      context=\"#stay\"        attribute=\"Number\"             String=\"(\\d+(\\.\\d+)?|\\.\\d+)([eE][+-]?\\d+)?[ij]?\" />\n\t\t\t\t<RegExpr      context=\"#stay\"        attribute=\"Variable\"           String=\"[a-zA-Z]\\w*\" />\n\t\t\t</context>\n\n\n\t\t\t<context name=\"Commentary\" attribute=\"Commentary\" lineEndContext=\"#pop\">\n\t\t\t</context>\n\n\n\t\t\t<context name=\"Code_Folding\" attribute=\"Normal Text\" lineEndContext=\"Top_Level\">\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Control Statements\" String=\"for\" beginRegion=\"do_block\" />\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Control Statements\" String=\"while\" beginRegion=\"do_block\" />\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Control Statements\" String=\"od\" endRegion=\"do_block\" />\n\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Control Statements\" String=\"repeat\" beginRegion=\"repeat_block\" />\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Control Statements\" String=\"until\" endRegion=\"repeat_block\" />\n\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Control Statements\" String=\"if\" beginRegion=\"if_block\" />\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Control Statements\" String=\"fi\" endRegion=\"if_block\" />\n\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Function\" String=\"function\" beginRegion=\"func_block\" />\n\t\t\t\t<WordDetect context=\"#stay\" attribute=\"Function\" String=\"end\" endRegion=\"func_block\" />\n\t\t\t</context>\n\n\n\n\t\t\t<context name=\"Two Char Operators\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator2\" char=\".\" char1=\".\"/>\n\t\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator2\" char=\"!\" char1=\".\"/>\n\t\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator2\" char=\":\" char1=\"=\"/>\n\t\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator2\" char=\"-\" char1=\"&gt;\"/>\n\t\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator2\" char=\"&lt;\" char1=\"=\"/>\n\t\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator2\" char=\"&gt;\" char1=\"=\"/>\n\t\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator2\" char=\"&lt;\" char1=\"&gt;\"/>\n\t\t\t</context>\n\n\n\t\t\t<context name=\"Strings\"    attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr context=\"#stay\" attribute=\"String\" String=\"'([^'\\\\]|''|\\\\'|\\\\[^'])*'(?=[^']|$)\" />\n\t\t\t\t<RegExpr context=\"#stay\" attribute=\"Incomplete String\" String=\"'([^']|''|\\\\')*\" />\n\t\t\t\t<RegExpr context=\"#stay\" attribute=\"String\" String=\"&quot;([^&quot;\\\\]|&quot;&quot;|\\\\&quot;|\\\\[^&quot;])*&quot;(?=[^&quot;]|$)\" />\n\t\t\t\t<RegExpr context=\"#stay\" attribute=\"Incomplete String\" String=\"&quot;([^&quot;]|&quot;&quot;|\\\\&quot;)*\" />\n\t\t\t</context>\n\t\t</contexts>\n\n\n\t\t<!-- ======== Item Data ======== -->\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Builtin Functions\"   defStyleNum=\"dsBuiltIn\" italic=\"1\" bold=\"1\" />\n\t\t\t<itemData name=\"Commentary\"          defStyleNum=\"dsComment\" italic=\"1\" />\n\t\t\t<itemData name=\"Control Statements\"  defStyleNum=\"dsControlFlow\" />\n\t\t\t<itemData name=\"Function\"            defStyleNum=\"dsFunction\"/>\n\t\t\t<itemData name=\"GAP Keywords\"        defStyleNum=\"dsExtension\"/>\n\t\t\t<itemData name=\"Incomplete String\"   defStyleNum=\"dsSpecialString\"/>\n\t\t\t<itemData name=\"Logic Operators\"     defStyleNum=\"dsConstant\"/>\n\t\t\t<itemData name=\"Math Operators\"      defStyleNum=\"dsOthers\"  />\n\t\t\t<itemData name=\"Normal Text\"         defStyleNum=\"dsNormal\"  />\n\t\t\t<itemData name=\"Number\"              defStyleNum=\"dsFloat\"   />\n\t\t\t<itemData name=\"Operator1\"           defStyleNum=\"dsOperator\"/>\n\t\t\t<itemData name=\"Operator2\"           defStyleNum=\"dsOperator\" bold=\"1\" />\n\t\t\t<itemData name=\"String\"              defStyleNum=\"dsString\"  />\n\t\t\t<itemData name=\"Variable\"            defStyleNum=\"dsVariable\"/>\n\t\t</itemDatas>\n\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"true\" />\n\t</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gcc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY space \" \">\n    <!ENTITY separators \",&#59;\">\n    <!ENTITY ns_punctuators \"!&#37;&space;&amp;()+-/.*&lt;=&gt;?[]{|}~^&separators;\">\n    <!ENTITY punctuators \":&ns_punctuators;\">\n]>\n<!--\n  Copyright (c) 2012-2014 by Alex Turbov (i.zaufi@gmail.com)\n\n  Homepage: http://kde-files.org/content/show.php?content=90660\n  -->\n<language\n    name=\"GCCExtensions\"\n    version=\"4\"\n    kateversion=\"5.0\"\n    section=\"Sources\"\n    extensions=\"*.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;\"\n    mimetype=\"text/x-c++src;text/x-c++hdr;text/x-chdr;text/x-csrc\"\n    author=\"Alex Turbov (i.zaufi@gmail.com)\"\n    license=\"LGPL\"\n    hidden=\"true\"\n    priority=\"5\"\n  >\n<!--\n  The main purpose of this file is to hold GNU gcc extensions syntax in a single place,\n  so later it can be included to other (C++ based) syntaxes.\n\n  NOTE Default colors are set to 'Normal Text', so if u don't want to highight it,\n  just leave colors as is...\n\n  Based on GCC documentation\n-->\n<highlighting>\n  <list name=\"GNUTypes\">\n    <!-- NOTE From gcc's info: 6.10 Additional Floating Types -->\n    <item>__float80</item>\n    <item>__float128</item>\n    <!-- NOTE From gcc's 4.7.1 info: 6.13 Decimal Floating Types -->\n    <item>_Decimal32</item>\n    <item>_Decimal64</item>\n    <item>_Decimal128</item>\n    <!-- NOTE From gcc's info: 6.8 128-bits integers -->\n    <item>__int128</item>\n    <!-- NOTE From gcc's 4.7.1 info: 6.12 Half-Precision Floating Point -->\n    <item>__fp16</item>\n    <!-- NOTE From gcc's 4.7.1 info: 6.15 Fixed-Point Types -->\n    <item>_Fract</item>\n    <item>_Sat</item>\n    <item>_Accum</item>\n  </list>\n  <list name=\"GNUKeywords\">\n    <!-- NOTE that __attribute__ handled separately -->\n    <item>__asm__</item>\n    <item>__const__</item>\n    <item>__extension__</item>\n    <item>__inline__</item>\n    <item>__label__</item>\n    <item>__complex__</item>\n    <item>__real__</item>\n    <item>__restrict__</item>\n    <item>__restrict</item>\n    <item>__imag__</item>\n    <!-- NOTE From gcc's info: 6.6 Referring to a Type with `typeof' -->\n    <item>__typeof__</item>\n    <item>typeof</item>\n    <!-- NOTE From gcc's 4.7.1 info: 6.38 -->\n    <item>__alignof__</item>\n    <!-- NOTE From gcc's info: 6.59 Thread-Local storage -->\n    <item>__thread</item>\n  </list>\n  <!-- NOTE Everything started from `__builtin_' handled separately -->\n  <list name=\"GNUFunctions\">\n    <!-- NOTE From gcc's info: 7.9 Type Traits -->\n    <item>__has_nothrow_assign</item>\n    <item>__has_nothrow_copy</item>\n    <item>__has_nothrow_constructor</item>\n    <item>__has_trivial_assign</item>\n    <item>__has_trivial_copy</item>\n    <item>__has_trivial_constructor</item>\n    <item>__has_trivial_destructor</item>\n    <item>__has_virtual_destructor</item>\n    <item>__is_abstract</item>\n    <item>__is_base_of</item>\n    <item>__is_class</item>\n    <item>__is_empty</item>\n    <item>__is_enum</item>\n    <item>__is_pod</item>\n    <item>__is_polymorphic</item>\n    <item>__is_union</item>\n    <!-- NOTE From gcc's info: 6.49 -->\n    <item>__sync_fetch_and_add</item>\n    <item>__sync_fetch_and_sub</item>\n    <item>__sync_fetch_and_or</item>\n    <item>__sync_fetch_and_and</item>\n    <item>__sync_fetch_and_xor</item>\n    <item>__sync_fetch_and_nand</item>\n    <item>__sync_add_and_fetch</item>\n    <item>__sync_sub_and_fetch</item>\n    <item>__sync_or_and_fetch</item>\n    <item>__sync_and_and_fetch</item>\n    <item>__sync_xor_and_fetch</item>\n    <item>__sync_nand_and_fetch</item>\n    <item>__sync_bool_compare_and_swap</item>\n    <item>__sync_val_compare_and_swap</item>\n    <item>__sync_synchronize</item>\n    <item>__sync_lock_test_and_set</item>\n    <item>__sync_lock_release</item>\n    <!-- NOTE From gcc 4.7.x info: 6.52 -->\n    <item>__atomic_load_n</item>\n    <item>__atomic_load</item>\n    <item>__atomic_store_n</item>\n    <item>__atomic_store</item>\n    <item>__atomic_exchange_n</item>\n    <item>__atomic_exchange</item>\n    <item>__atomic_compare_exchange_n</item>\n    <item>__atomic_compare_exchange</item>\n    <item>__atomic_add_fetch</item>\n    <item>__atomic_sub_fetch</item>\n    <item>__atomic_and_fetch</item>\n    <item>__atomic_or_fetch</item>\n    <item>__atomic_xor_fetch</item>\n    <item>__atomic_nand_fetch</item>\n    <item>__atomic_fetch_add</item>\n    <item>__atomic_fetch_sub</item>\n    <item>__atomic_fetch_and</item>\n    <item>__atomic_fetch_or</item>\n    <item>__atomic_fetch_xor</item>\n    <item>__atomic_fetch_nand</item>\n    <item>__atomic_test_and_set</item>\n    <item>__atomic_clear</item>\n    <item>__atomic_signal_fence</item>\n    <item>__atomic_thread_fence</item>\n    <item>__atomic_always_lock_free</item>\n    <item>__atomic_is_lock_free</item>\n  </list>\n  <!-- From http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html\n        plus a lot of platform specific predefines found by my script\n        git@github.com:zaufi/kate-stuff.git/support/genpredefmacrolist.sh\n    -->\n  <list name=\"GNUMacros\">\n    <item>_FORTIFY_SOURCE</item>\n    <item>_GNU_SOURCE</item>\n    <item>_ILP32</item>\n    <item>_LP64</item>\n    <item>_REENTRANT</item>\n    <item>_STDC_PREDEF_H</item>\n    <item>__3dNOW_A__</item>\n    <item>__3dNOW__</item>\n    <item>__ABM__</item>\n    <item>__ADX__</item>\n    <item>__AES__</item>\n    <item>__ATOMIC_ACQUIRE</item>\n    <item>__ATOMIC_ACQ_REL</item>\n    <item>__ATOMIC_CONSUME</item>\n    <item>__ATOMIC_HLE_ACQUIRE</item>\n    <item>__ATOMIC_HLE_RELEASE</item>\n    <item>__ATOMIC_RELAXED</item>\n    <item>__ATOMIC_RELEASE</item>\n    <item>__ATOMIC_SEQ_CST</item>\n    <item>__AVX2__</item>\n    <item>__AVX__</item>\n    <item>__BASE_FILE__</item>\n    <item>__BIGGEST_ALIGNMENT__</item>\n    <item>__BMI2__</item>\n    <item>__BMI__</item>\n    <item>__BYTE_ORDER__</item>\n    <item>__CHAR16_TYPE__</item>\n    <item>__CHAR32_TYPE__</item>\n    <item>__CHAR_BIT__</item>\n    <item>__CHAR_UNSIGNED__</item>\n    <item>__COUNTER__</item>\n    <item>__DBL_DECIMAL_DIG__</item>\n    <item>__DBL_DENORM_MIN__</item>\n    <item>__DBL_DIG__</item>\n    <item>__DBL_EPSILON__</item>\n    <item>__DBL_HAS_DENORM__</item>\n    <item>__DBL_HAS_INFINITY__</item>\n    <item>__DBL_HAS_QUIET_NAN__</item>\n    <item>__DBL_MANT_DIG__</item>\n    <item>__DBL_MAX_10_EXP__</item>\n    <item>__DBL_MAX_EXP__</item>\n    <item>__DBL_MAX__</item>\n    <item>__DBL_MIN_10_EXP__</item>\n    <item>__DBL_MIN_EXP__</item>\n    <item>__DBL_MIN__</item>\n    <item>__DEC128_EPSILON__</item>\n    <item>__DEC128_MANT_DIG__</item>\n    <item>__DEC128_MAX_EXP__</item>\n    <item>__DEC128_MAX__</item>\n    <item>__DEC128_MIN_EXP__</item>\n    <item>__DEC128_MIN__</item>\n    <item>__DEC128_SUBNORMAL_MIN__</item>\n    <item>__DEC32_EPSILON__</item>\n    <item>__DEC32_MANT_DIG__</item>\n    <item>__DEC32_MAX_EXP__</item>\n    <item>__DEC32_MAX__</item>\n    <item>__DEC32_MIN_EXP__</item>\n    <item>__DEC32_MIN__</item>\n    <item>__DEC32_SUBNORMAL_MIN__</item>\n    <item>__DEC64_EPSILON__</item>\n    <item>__DEC64_MANT_DIG__</item>\n    <item>__DEC64_MAX_EXP__</item>\n    <item>__DEC64_MAX__</item>\n    <item>__DEC64_MIN_EXP__</item>\n    <item>__DEC64_MIN__</item>\n    <item>__DEC64_SUBNORMAL_MIN__</item>\n    <item>__DECIMAL_BID_FORMAT__</item>\n    <item>__DECIMAL_DIG__</item>\n    <item>__DEC_EVAL_METHOD__</item>\n    <item>__DEPRECATED</item>\n    <item>__ELF__</item>\n    <item>__EXCEPTIONS</item>\n    <item>__F16C__</item>\n    <item>__FAST_MATH__</item>\n    <item>__FINITE_MATH_ONLY__</item>\n    <item>__FLOAT_WORD_ORDER__</item>\n    <item>__FLT_DECIMAL_DIG__</item>\n    <item>__FLT_DENORM_MIN__</item>\n    <item>__FLT_DIG__</item>\n    <item>__FLT_EPSILON__</item>\n    <item>__FLT_EVAL_METHOD__</item>\n    <item>__FLT_HAS_DENORM__</item>\n    <item>__FLT_HAS_INFINITY__</item>\n    <item>__FLT_HAS_QUIET_NAN__</item>\n    <item>__FLT_MANT_DIG__</item>\n    <item>__FLT_MAX_10_EXP__</item>\n    <item>__FLT_MAX_EXP__</item>\n    <item>__FLT_MAX__</item>\n    <item>__FLT_MIN_10_EXP__</item>\n    <item>__FLT_MIN_EXP__</item>\n    <item>__FLT_MIN__</item>\n    <item>__FLT_RADIX__</item>\n    <item>__FMA4__</item>\n    <item>__FMA__</item>\n    <item>__FP_FAST_FMA</item>\n    <item>__FP_FAST_FMAF</item>\n    <item>__FSGSBASE__</item>\n    <item>__FUNCTION__</item>\n    <item>__FXSR__</item>\n    <item>__GCC_ATOMIC_BOOL_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_CHAR16_T_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_CHAR32_T_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_CHAR_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_INT_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_LLONG_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_LONG_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_POINTER_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_SHORT_LOCK_FREE</item>\n    <item>__GCC_ATOMIC_TEST_AND_SET_TRUEVAL</item>\n    <item>__GCC_ATOMIC_WCHAR_T_LOCK_FREE</item>\n    <item>__GCC_HAVE_DWARF2_CFI_ASM</item>\n    <item>__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1</item>\n    <item>__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16</item>\n    <item>__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2</item>\n    <item>__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4</item>\n    <item>__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8</item>\n    <item>__GFORTRAN__</item>\n    <item>__GNUC_GNU_INLINE__</item>\n    <item>__GNUC_MINOR__</item>\n    <item>__GNUC_PATCHLEVEL__</item>\n    <item>__GNUC_STDC_INLINE__</item>\n    <item>__GNUC__</item>\n    <item>__GNUG__</item>\n    <item>__GXX_ABI_VERSION</item>\n    <item>__GXX_EXPERIMENTAL_CXX0X__</item>\n    <item>__GXX_RTTI</item>\n    <item>__GXX_WEAK__</item>\n    <item>__ILP32__</item>\n    <item>__INCLUDE_LEVEL__</item>\n    <item>__INT16_C</item>\n    <item>__INT16_MAX__</item>\n    <item>__INT16_TYPE__</item>\n    <item>__INT32_C</item>\n    <item>__INT32_MAX__</item>\n    <item>__INT32_TYPE__</item>\n    <item>__INT64_C</item>\n    <item>__INT64_MAX__</item>\n    <item>__INT64_TYPE__</item>\n    <item>__INT8_C</item>\n    <item>__INT8_MAX__</item>\n    <item>__INT8_TYPE__</item>\n    <item>__INTMAX_C</item>\n    <item>__INTMAX_MAX__</item>\n    <item>__INTMAX_TYPE__</item>\n    <item>__INTPTR_MAX__</item>\n    <item>__INTPTR_TYPE__</item>\n    <item>__INT_FAST16_MAX__</item>\n    <item>__INT_FAST16_TYPE__</item>\n    <item>__INT_FAST32_MAX__</item>\n    <item>__INT_FAST32_TYPE__</item>\n    <item>__INT_FAST64_MAX__</item>\n    <item>__INT_FAST64_TYPE__</item>\n    <item>__INT_FAST8_MAX__</item>\n    <item>__INT_FAST8_TYPE__</item>\n    <item>__INT_LEAST16_MAX__</item>\n    <item>__INT_LEAST16_TYPE__</item>\n    <item>__INT_LEAST32_MAX__</item>\n    <item>__INT_LEAST32_TYPE__</item>\n    <item>__INT_LEAST64_MAX__</item>\n    <item>__INT_LEAST64_TYPE__</item>\n    <item>__INT_LEAST8_MAX__</item>\n    <item>__INT_LEAST8_TYPE__</item>\n    <item>__INT_MAX__</item>\n    <item>__LDBL_DENORM_MIN__</item>\n    <item>__LDBL_DIG__</item>\n    <item>__LDBL_EPSILON__</item>\n    <item>__LDBL_HAS_DENORM__</item>\n    <item>__LDBL_HAS_INFINITY__</item>\n    <item>__LDBL_HAS_QUIET_NAN__</item>\n    <item>__LDBL_MANT_DIG__</item>\n    <item>__LDBL_MAX_10_EXP__</item>\n    <item>__LDBL_MAX_EXP__</item>\n    <item>__LDBL_MAX__</item>\n    <item>__LDBL_MIN_10_EXP__</item>\n    <item>__LDBL_MIN_EXP__</item>\n    <item>__LDBL_MIN__</item>\n    <item>__LONG_LONG_MAX__</item>\n    <item>__LONG_MAX__</item>\n    <item>__LP64__</item>\n    <item>__LWP__</item>\n    <item>__LZCNT__</item>\n    <item>__MMX__</item>\n    <item>__NEXT_RUNTIME__</item>\n    <item>__NO_INLINE__</item>\n    <item>__OPTIMIZE_SIZE__</item>\n    <item>__OPTIMIZE__</item>\n    <item>__ORDER_BIG_ENDIAN__</item>\n    <item>__ORDER_LITTLE_ENDIAN__</item>\n    <item>__ORDER_PDP_ENDIAN__</item>\n    <item>__PCLMUL__</item>\n    <item>__PIC__</item>\n    <item>__PIE__</item>\n    <item>__POPCNT__</item>\n    <item>__PRAGMA_REDEFINE_EXTNAME</item>\n    <item>__PRETTY_FUNCTION__</item>\n    <item>__PRFCHW__</item>\n    <item>__PTRDIFF_MAX__</item>\n    <item>__PTRDIFF_TYPE__</item>\n    <item>__RDRND__</item>\n    <item>__RDSEED__</item>\n    <item>__REGISTER_PREFIX__</item>\n    <item>__RTM__</item>\n    <item>__SANITIZE_ADDRESS__</item>\n    <item>__SCHAR_MAX__</item>\n    <item>__SHRT_MAX__</item>\n    <item>__SIG_ATOMIC_MAX__</item>\n    <item>__SIG_ATOMIC_MIN__</item>\n    <item>__SIG_ATOMIC_TYPE__</item>\n    <item>__SIZEOF_DOUBLE__</item>\n    <item>__SIZEOF_FLOAT__</item>\n    <item>__SIZEOF_INT128__</item>\n    <item>__SIZEOF_INT__</item>\n    <item>__SIZEOF_LONG_DOUBLE__</item>\n    <item>__SIZEOF_LONG_LONG__</item>\n    <item>__SIZEOF_LONG__</item>\n    <item>__SIZEOF_POINTER__</item>\n    <item>__SIZEOF_PTRDIFF_T__</item>\n    <item>__SIZEOF_SHORT__</item>\n    <item>__SIZEOF_SIZE_T__</item>\n    <item>__SIZEOF_WCHAR_T__</item>\n    <item>__SIZEOF_WINT_T__</item>\n    <item>__SIZE_MAX__</item>\n    <item>__SIZE_TYPE__</item>\n    <item>__SSE2_MATH__</item>\n    <item>__SSE2__</item>\n    <item>__SSE3__</item>\n    <item>__SSE4A__</item>\n    <item>__SSE4_1__</item>\n    <item>__SSE4_2__</item>\n    <item>__SSE_MATH__</item>\n    <item>__SSE__</item>\n    <item>__SSP_ALL__</item>\n    <item>__SSP__</item>\n    <item>__SSSE3__</item>\n    <item>__STDC_HOSTED__</item>\n    <item>__STDC_IEC_559_COMPLEX__</item>\n    <item>__STDC_IEC_559__</item>\n    <item>__STDC_ISO_10646__</item>\n    <item>__STDC_NO_THREADS__</item>\n    <item>__STDC_UTF_16__</item>\n    <item>__STDC_UTF_32__</item>\n    <item>__STDC_VERSION__</item>\n    <item>__STDC__</item>\n    <item>__STRICT_ANSI__</item>\n    <item>__TBM__</item>\n    <item>__TIMESTAMP__</item>\n    <item>__UINT16_C</item>\n    <item>__UINT16_MAX__</item>\n    <item>__UINT16_TYPE__</item>\n    <item>__UINT32_C</item>\n    <item>__UINT32_MAX__</item>\n    <item>__UINT32_TYPE__</item>\n    <item>__UINT64_C</item>\n    <item>__UINT64_MAX__</item>\n    <item>__UINT64_TYPE__</item>\n    <item>__UINT8_C</item>\n    <item>__UINT8_MAX__</item>\n    <item>__UINT8_TYPE__</item>\n    <item>__UINTMAX_C</item>\n    <item>__UINTMAX_MAX__</item>\n    <item>__UINTMAX_TYPE__</item>\n    <item>__UINTPTR_MAX__</item>\n    <item>__UINTPTR_TYPE__</item>\n    <item>__UINT_FAST16_MAX__</item>\n    <item>__UINT_FAST16_TYPE__</item>\n    <item>__UINT_FAST32_MAX__</item>\n    <item>__UINT_FAST32_TYPE__</item>\n    <item>__UINT_FAST64_MAX__</item>\n    <item>__UINT_FAST64_TYPE__</item>\n    <item>__UINT_FAST8_MAX__</item>\n    <item>__UINT_FAST8_TYPE__</item>\n    <item>__UINT_LEAST16_MAX__</item>\n    <item>__UINT_LEAST16_TYPE__</item>\n    <item>__UINT_LEAST32_MAX__</item>\n    <item>__UINT_LEAST32_TYPE__</item>\n    <item>__UINT_LEAST64_MAX__</item>\n    <item>__UINT_LEAST64_TYPE__</item>\n    <item>__UINT_LEAST8_MAX__</item>\n    <item>__UINT_LEAST8_TYPE__</item>\n    <item>__USER_LABEL_PREFIX__</item>\n    <item>__USING_SJLJ_EXCEPTIONS__</item>\n    <item>__VERSION__</item>\n    <item>__WCHAR_MAX__</item>\n    <item>__WCHAR_MIN__</item>\n    <item>__WCHAR_TYPE__</item>\n    <item>__WCHAR_UNSIGNED__</item>\n    <item>__WINT_MAX__</item>\n    <item>__WINT_MIN__</item>\n    <item>__WINT_TYPE__</item>\n    <item>__XOP__</item>\n    <item>__XSAVEOPT__</item>\n    <item>__XSAVE__</item>\n    <item>__amd64</item>\n    <item>__amd64__</item>\n    <item>__amdfam10</item>\n    <item>__amdfam10__</item>\n    <item>__athlon</item>\n    <item>__athlon__</item>\n    <item>__athlon_sse__</item>\n    <item>__atom</item>\n    <item>__atom__</item>\n    <item>__bdver1</item>\n    <item>__bdver1__</item>\n    <item>__bdver2</item>\n    <item>__bdver2__</item>\n    <item>__bdver3</item>\n    <item>__bdver3__</item>\n    <item>__btver1</item>\n    <item>__btver1__</item>\n    <item>__btver2</item>\n    <item>__btver2__</item>\n    <item>__code_model_32__</item>\n    <item>__code_model_small__</item>\n    <item>__core2</item>\n    <item>__core2__</item>\n    <item>__core_avx2</item>\n    <item>__core_avx2__</item>\n    <item>__corei7</item>\n    <item>__corei7__</item>\n    <item>__cplusplus</item>\n    <item>__geode</item>\n    <item>__geode__</item>\n    <item>__gnu_linux__</item>\n    <item>__i386</item>\n    <item>__i386__</item>\n    <item>__i486</item>\n    <item>__i486__</item>\n    <item>__i586</item>\n    <item>__i586__</item>\n    <item>__i686</item>\n    <item>__i686__</item>\n    <item>__k6</item>\n    <item>__k6_2__</item>\n    <item>__k6_3__</item>\n    <item>__k6__</item>\n    <item>__k8</item>\n    <item>__k8__</item>\n    <item>__linux</item>\n    <item>__linux__</item>\n    <item>__nocona</item>\n    <item>__nocona__</item>\n    <item>__pentium</item>\n    <item>__pentium4</item>\n    <item>__pentium4__</item>\n    <item>__pentium__</item>\n    <item>__pentium_mmx__</item>\n    <item>__pentiumpro</item>\n    <item>__pentiumpro__</item>\n    <item>__pic__</item>\n    <item>__pie__</item>\n    <item>__tune_amdfam10__</item>\n    <item>__tune_athlon__</item>\n    <item>__tune_athlon_sse__</item>\n    <item>__tune_atom__</item>\n    <item>__tune_bdver1__</item>\n    <item>__tune_bdver2__</item>\n    <item>__tune_bdver3__</item>\n    <item>__tune_btver1__</item>\n    <item>__tune_btver2__</item>\n    <item>__tune_core2__</item>\n    <item>__tune_core_avx2__</item>\n    <item>__tune_corei7__</item>\n    <item>__tune_geode__</item>\n    <item>__tune_i386__</item>\n    <item>__tune_i486__</item>\n    <item>__tune_i586__</item>\n    <item>__tune_i686__</item>\n    <item>__tune_k6_2__</item>\n    <item>__tune_k6_3__</item>\n    <item>__tune_k6__</item>\n    <item>__tune_k8__</item>\n    <item>__tune_nocona__</item>\n    <item>__tune_pentium2__</item>\n    <item>__tune_pentium3__</item>\n    <item>__tune_pentium4__</item>\n    <item>__tune_pentium__</item>\n    <item>__tune_pentium_mmx__</item>\n    <item>__tune_pentiumpro__</item>\n    <item>__unix</item>\n    <item>__unix__</item>\n    <item>__x86_64</item>\n    <item>__x86_64__</item>\n    <item>i386</item>\n    <item>linux</item>\n    <item>unix</item>\n  </list>\n  <contexts>\n    <context name=\"DetectGccExtensions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n      <keyword attribute=\"GNU Macros\" context=\"#stay\" String=\"GNUMacros\" />\n      <keyword attribute=\"GNU Functions\" context=\"#stay\" String=\"GNUFunctions\" />\n      <keyword attribute=\"GNU Types\" context=\"#stay\" String=\"GNUTypes\" />\n      <WordDetect attribute=\"GNU Extensions\" context=\"AttrArgs\" String=\"__attribute__\" />\n      <WordDetect attribute=\"GNU Extensions\" context=\"AttrArgs\" String=\"__declspec\" />\n      <keyword attribute=\"GNU Extensions\" context=\"#stay\" String=\"GNUKeywords\" />\n      <RegExpr attribute=\"GNU Functions\" context=\"#stay\" String=\"__builtin_[a-zA-Z0-9_]+\" />\n    </context>\n\n    <context name=\"DetectGccExtensionsInPP\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n      <keyword attribute=\"GNU Macros\" context=\"#stay\" String=\"GNUMacros\" />\n      <keyword attribute=\"GNU Functions\" context=\"#stay\" String=\"GNUFunctions\" />\n      <keyword attribute=\"GNU Types\" context=\"#stay\" String=\"GNUTypes\" />\n      <WordDetect attribute=\"GNU Extensions\" context=\"AttrArgsInPP\" String=\"__attribute__\" />\n      <WordDetect attribute=\"GNU Extensions\" context=\"AttrArgsInPP\" String=\"__declspec\" />\n      <keyword attribute=\"GNU Extensions\" context=\"#stay\" String=\"GNUKeywords\" />\n      <RegExpr attribute=\"GNU Functions\" context=\"#stay\" String=\"__builtin_[a-zA-Z0-9_]+\" />\n    </context>\n\n    <context name=\"GNUMacros\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n      <keyword attribute=\"GNU Macros\" context=\"#stay\" String=\"GNUMacros\" />\n    </context>\n\n    <context name=\"AttrArgs\" attribute=\"GNU Extensions\" lineEndContext=\"#pop\">\n      <Detect2Chars attribute=\"GNU Extensions\" context=\"#stay\" char=\"(\" char1=\"(\" />\n      <Detect2Chars attribute=\"GNU Extensions\" context=\"#pop\" char=\")\" char1=\")\" />\n      <DetectChar attribute=\"GNU Extensions\" context=\"Close\" char=\"(\" />\n    </context>\n\n    <context name=\"AttrArgsInPP\" attribute=\"GNU Extensions\" lineEndContext=\"#pop\">\n      <DetectChar attribute=\"Error\" context=\"#pop\" char=\"\\\" lookAhead=\"true\" />\n      <IncludeRules context=\"AttrArgs\" />\n    </context>\n\n    <context name=\"Close\" attribute=\"GNU Extensions\" lineEndContext=\"#stay\">\n      <DetectChar attribute=\"GNU Extensions\" context=\"#pop\" char=\")\" />\n      <DetectChar attribute=\"String\" context=\"AttrStringArg\" char=\"&quot;\" />\n    </context>\n\n    <context name=\"AttrStringArg\" attribute=\"String\" lineEndContext=\"#stay\">\n      <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n    </context>\n\n\n    <context name=\"DetectGccAttributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n      <StringDetect attribute=\"GNU Extensions\" context=\"CppAttr\" String=\"gnu::\" />\n      <StringDetect attribute=\"GNU Extensions\" context=\"CppAttr\" String=\"clang::\" />\n    </context>\n\n    <context name=\"DetectNamespaceGccAttributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n      <WordDetect attribute=\"GNU Extensions\" context=\"#pop\" String=\"gnu\" />\n      <WordDetect attribute=\"GNU Extensions\" context=\"#pop\" String=\"clang\" />\n    </context>\n\n    <context name=\"CppAttr\" attribute=\"Error\" lineEndContext=\"#stay\">\n      <DetectSpaces/>\n      <DetectIdentifier attribute=\"GNU Extensions\" context=\"#pop\" />\n    </context>\n\n  </contexts>\n\n  <itemDatas>\n    <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"    spellChecking=\"false\" />\n    <itemData name=\"GNU Extensions\" defStyleNum=\"dsExtension\" spellChecking=\"false\" italic=\"1\" />\n    <itemData name=\"GNU Functions\"  defStyleNum=\"dsFunction\"  spellChecking=\"false\" />\n    <itemData name=\"GNU Macros\"     defStyleNum=\"dsOthers\"    spellChecking=\"false\" />\n    <itemData name=\"GNU Types\"      defStyleNum=\"dsDataType\"  spellChecking=\"false\" />\n    <itemData name=\"String\"         defStyleNum=\"dsString\"    spellChecking=\"false\" />\n    <itemData name=\"Error\"          defStyleNum=\"dsError\"     spellChecking=\"false\" />\n  </itemDatas>\n</highlighting>\n\n<general>\n  <comments>\n    <comment name=\"singleLine\" start=\"//\"/>\n  </comments>\n  <keywords casesensitive=\"1\"/>\n</general>\n</language>\n<!-- kate: indent-width 2; tab-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gcode.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\n  G-code syntax highlighting for KatePart\n\n  Copy this file to :  ~/.kde/share/apps/katepart/syntax/\n\n  Copyright © 2016 by Fernand Veilleux (fernveilleux@gmail.com)\n\n  This library is free software; you can redistribute it and/or\n\tmodify it under the terms of the GNU Library General Public\n\tLicense as published by the Free Software Foundation; either\n\tversion 2 of the License, or (at your option) any later version.\n\n\tThis library is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n\tLibrary General Public License for more details.\n\n\tYou should have received a copy of the GNU Library General Public\n\tLicense along with this library; if not, write to the\n\tFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n\tBoston, MA  02110-1301, USA.\n\n-->\n<language name=\"G-Code\"\n\tversion=\"4\"\n\tkateversion=\"3.8\"\n\tsection=\"3D\"\n\textensions=\"*.ngc\"\n\tmimetype=\"text/ngc\"\n\tauthor=\"Fernand Veilleux (fernveilleux@gmail.com)\"\n\tlicense=\"LGPLv2+\">\n\n  <highlighting>\n    <list name=\"operators\">\n      <item>and</item>\n      <item>or</item>\n      <item>xor</item>\n      <item>eq</item>\n      <item>ne</item>\n      <item>gt</item>\n      <item>ge</item>\n      <item>lt</item>\n      <item>le</item>\n      <item>mod</item>\n    </list>\n\n    <list name=\"functions\">\n      <item>atan</item>\n      <item>abs</item>\n      <item>acos</item>\n      <item>asin</item>\n      <item>cos</item>\n      <item>exp</item>\n      <item>exists</item>\n      <item>fix</item>\n      <item>fup</item>\n      <item>ln</item>\n      <item>round</item>\n      <item>sin</item>\n      <item>sqrt</item>\n      <item>tan</item>\n    </list>\n\n    <list name=\"o_sub\">\n      <item>sub</item>\n      <item>endsub</item>\n      <item>call</item>\n      <item>return</item>\n    </list>\n\n    <list name=\"keyword\">\n      <item>do</item>\n      <item>while</item>\n      <item>endwhile</item>\n      <item>repeat</item>\n      <item>endrepeat</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>if</item>\n      <item>elseif</item>\n      <item>else</item>\n      <item>endif</item>\n    </list>\n\n    <contexts>\n      <context name=\"Alert\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"^[\\s\\t]*[nN][\\s\\t]*[\\d]{1,5}\" attribute=\"Line Number\"/>\n        <DetectSpaces attribute=\"Normal Text\"/>\n\t\t\t\t<DetectChar char=\"%\" attribute=\"M-word\"/>\n\t\t\t\t<DetectChar char=\"[\" attribute=\"Brackets\"/>\n        <DetectChar char=\"]\" attribute=\"Brackets\"/>\n        <DetectChar char=\"(\" lookAhead=\"1\" context=\"parenthese\"/>\n        <DetectChar char=\"#\" lookAhead=\"1\" context=\"hash1\"/>\n        <RegExpr String=\"[.][\\d\\s\\t]*[.]\" lookAhead=\"1\" context=\"alert\"/>\n        <RegExpr String=\"[.][\\d\\s\\t]*\" attribute=\"Number\"/>\n        <RegExpr String=\"[\\d][\\d\\s\\t]*[.][\\d\\s\\t]*[.]\" lookAhead=\"1\" context=\"alert\"/>\n        <RegExpr String=\"[\\d][\\d\\s\\t]*[.]?[\\d\\s\\t]*\" attribute=\"Number\"/>\n        <RegExpr String=\"[+\\-*/=]\" attribute=\"Operator\"/>\n        <RegExpr String=\";.*$\" attribute=\"Comment\"/>\n        <keyword String=\"functions\" attribute=\"Function\"/>\n        <keyword String=\"operators\" attribute=\"Operator\"/>\n        <keyword String=\"o_sub\" attribute=\"Sub-program\"/>\n        <keyword String=\"keyword\" attribute=\"Keyword\"/>\n        <RegExpr String=\"[oO][\\s\\t]*&lt;[\\s\\t]*&gt;\" lookAhead=\"1\" context=\"alert\"/>\n\t\t\t\t<RegExpr String=\"[oO][\\s\\t]*([\\d]+|&lt;[^>]*&gt;)\" attribute=\"O-word\"/>\n        <RegExpr String=\"[abcu-z][\\s\\t]*[+\\-\\d#\\[.]\" insensitive=\"1\" lookAhead=\"1\" context=\"coords\"/>\n        <RegExpr String=\"[abcu-z].*$\" insensitive=\"1\" attribute=\"Alert\"/>\n        <RegExpr String=\"[deh-lpqr@^][\\s\\t]*[+\\-\\d#\\[.]\" insensitive=\"1\" lookAhead=\"1\" context=\"opts\"/>\n        <RegExpr String=\"[deh-lpqr@^].*$\" insensitive=\"1\" attribute=\"Alert\"/>\n        <RegExpr String=\"[gG][\\s\\t]*[\\d]+[\\s\\t]*[.]?[\\s\\t]*[\\d]*\" attribute=\"G-word\"/>\n        <RegExpr String=\"[gG][\\s\\t]*[\\[#]\" lookAhead=\"1\" context=\"gword\"/>\n        <RegExpr String=\"[tsTS][\\s\\t]*[+\\d#\\[]\" lookAhead=\"1\" context=\"tools\"/>\n        <RegExpr String=\"[fF][\\s\\t]*[+\\d#\\[.]\" lookAhead=\"1\" context=\"feed\"/>\n        <RegExpr String=\"[mM][\\s\\t]*[1][\\s\\t]*[\\d][\\s\\t]*[\\d]\" attribute=\"M-word (user)\"/>\n        <RegExpr String=\"[mM][\\s\\t]*([\\d][\\s\\t]*[\\d]?|[+#\\[])\" lookAhead=\"1\" context=\"mword\"/>\n        <RegExpr String=\".*$\" attribute=\"Alert\"/>\n      </context>\n\n      <context name=\"feed\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"[fF]\" attribute=\"Tool\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"tools\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"[tsTS]\" attribute=\"Tool\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"gword\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"[gG]\" attribute=\"G-word\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"mword\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"[mM]\" attribute=\"M-word\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"coords\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"[abcu-z]\" insensitive=\"1\" attribute=\"Coordinate\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"opts\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"[deh-lpqr@^]\" insensitive=\"1\" attribute=\"G-options\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"parenthese\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"\\([\\s\\t]*(PRINT|DEBUG|MSG|AXIS|(PROBE(CLOSE|OPEN))|(LOG(OPEN|CLOSE|APPEND|[\\s]|[\\,])))[^\\)]*\\)\"\n          insensitive=\"1\" attribute=\"Message\" context=\"#pop\"/>\n        <RegExpr String=\"\\([^\\)]*\\)\" attribute=\"Comment\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"hash1\" attribute=\"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"#[\\s\\t]*&lt;[\\s\\t]*&gt;\" context=\"alert\"/>\n\t\t\t\t<RegExpr String=\"#[\\s\\t]*[\\d]{1,4}\" attribute=\"Param (global)\" context=\"#pop\"/>\n\t\t\t\t<RegExpr String=\"#[\\s\\t]*&lt;[\\s\\t]*_[^>]*&gt;\" attribute=\"Param (global)\" context=\"#pop\"/>\n\t\t\t\t<RegExpr String=\"#[\\s\\t]*&lt;[^>]*&gt;\" attribute=\"Param (local)\" context=\"#pop\"/>\n        <RegExpr String=\"[#][\\s\\t]*[#][\\s\\t]*[#]+\" lookAhead=\"1\" context=\"alert\"/>\n        <RegExpr String=\"#[\\s\\t]*#[\\s\\t]*[&lt;\\[]\" lookAhead=\"1\" context=\"hash2\"/>\n        <RegExpr String=\"#[\\s\\t]*#\" attribute=\"Param (local)\" context=\"#pop\"/>\n        <RegExpr String=\"#[\\s\\t]*\\[\" lookAhead=\"1\" context=\"hash2\"/>\n      </context>\n\n      <context name=\"hash2\" attribute= \"Alert\" lineEndContext=\"#pop\">\n        <RegExpr String=\"#\" attribute=\"Param (local)\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"alert\" attribute=\"Alert\" lineEndContext=\"#pop\">\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Brackets\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Coordinate\" defStyleNum=\"dsNormal\" color=\"#A57800\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsFunction\" color=\"#800080\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"G-options\" defStyleNum=\"dsNormal\" color=\"#800080\"  bold=\"1\" italic=\"0\"/>\n      <itemData name=\"G-word\" defStyleNum=\"dsNormal\" selColor=\"#FFFFFF\"  bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsNormal\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"Line Number\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Message\" defStyleNum=\"dsNormal\" italic=\"1\" />\n      <itemData name=\"M-word\" defStyleNum=\"dsNormal\" color=\"#A07400\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"M-word (user)\" defStyleNum=\"dsNormal\" color=\"#A07400\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\" color=\"#A64C00\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" color=\"#000080\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"O-word\" defStyleNum=\"dsControlFlow\" color=\"#BB7B40\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Param (global)\" defStyleNum=\"dsVariable\" color=\"#149E05\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Param (local)\" defStyleNum=\"dsVariable\" color=\"#0950AB\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Sub-program\" defStyleNum=\"dsKeyword\" color=\"#700070\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Tool\" defStyleNum=\"dsNormal\" color=\"#0000D6\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Alert\" defStyleNum=\"dsError\"/>\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <folding indentationsensitive=\"1\"/>\n    <comments>\n      <comment name=\"multiLine\" start=\"(\" end=\")\"/>\n    </comments>\n    <keywords casesensitive=\"0\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gdb-bt.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"GDB Backtrace\" section=\"Other\"\n          version=\"2\" kateversion=\"3.4\"\n          extensions=\"*.kcrash;*.crash;*.bt\"\n          mimetype=\"\"\n          author=\"Milian Wolff (mail@milianw.de)\" license=\"LGPL\">\n\n<highlighting>\n\n  <contexts>\n    <context name=\"apache\" attribute=\"Normal\" lineEndContext=\"#stay\">\n      <DetectChar char=\"#\" context=\"stackframe\" firstNonSpace=\"true\" />\n      <IncludeRules context=\"oneliners\" />\n    </context>\n    <context name=\"oneliners\" attribute=\"Normal\" lineEndContext=\"#pop\">\n      <StringDetect attribute=\"Crash\" context=\"#stay\" String=\"[KCrash Handler]\" />\n      <StringDetect String=\"Thread\" firstNonSpace=\"true\" context=\"thread\" />\n      <StringDetect String=\"[Current thread\" firstNonSpace=\"true\" context=\"thread\" />\n    </context>\n    <context name=\"stackframe\" attribute=\"Normal\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"Normal\" context=\"identifier\"  String=\"((?:[^ ]|&lt;.+&gt;)+::)?([^ :]+)\\s*\\(\" lookAhead=\"true\" />\n      <StringDetect attribute=\"Normal\" String=\"at\" context=\"file\" />\n      <StringDetect attribute=\"Normal\" String=\"from\" context=\"file\" />\n      <IncludeRules context=\"oneliners\" />\n    </context>\n    <context name=\"identifier\" attribute=\"Normal\" lineEndContext=\"#stay\" dynamic=\"true\">\n      <StringDetect attribute=\"QualifiedIdentifier\" String=\"%1\" dynamic=\"true\" />\n      <StringDetect attribute=\"Function\" String=\"%2\" dynamic=\"true\" />\n      <RegExpr attribute=\"Crash\" String=\"\\b0x0\\b\" />\n      <DetectChar char=\")\" context=\"#pop\" />\n    </context>\n    <context name=\"file\" attribute=\"File\" lineEndContext=\"#pop#pop\">\n      <DetectChar char=\":\" context=\"#pop#pop\" attribute=\"Normal\" />\n    </context>\n    <context name=\"thread\" attribute=\"Thread\" lineEndContext=\"#pop\">\n    </context>\n  </contexts>\n\n  <itemDatas>\n    <itemData name=\"Normal\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n    <itemData name=\"Crash\" defStyleNum=\"dsError\" spellChecking=\"false\" underline=\"false\" bold=\"true\" />\n    <itemData name=\"QualifiedIdentifier\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n    <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\" bold=\"true\" />\n    <itemData name=\"File\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    <itemData name=\"Thread\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n  </itemDatas>\n</highlighting>\n\n</language>\n\n<!-- kate: replace-tabs: on; tab-width: 4; indent-width: 4; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gdb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"GDB\" section=\"Other\"\n          version=\"2\" kateversion=\"3.4\"\n          extensions=\"*.gdb\"\n          mimetype=\"\"\n          author=\"Milian Wolff (mail@milianw.de)\" license=\"LGPL\">\n\n<highlighting>\n  <list name=\"commands\">\n    <item>break</item>\n    <item>run</item>\n    <item>continue</item>\n    <item>backtrace</item>\n    <item>detach</item>\n    <item>quit</item>\n    <item>up</item>\n    <item>down</item>\n    <item>frame</item>\n    <item>where</item>\n    <item>info</item>\n    <item>ptype</item>\n    <item>print</item>\n    <item>call</item>\n    <item>catch</item>\n    <item>condition</item>\n    <item>command</item>\n    <item>set</item>\n    <item>awatch</item>\n    <item>thread</item>\n    <item>list</item>\n    <item>dprintf</item>\n    <item>target</item>\n    <item>end</item>\n    <item>source</item>\n    <item>next</item>\n    <item>nexti</item>\n    <item>step</item>\n    <item>stepi</item>\n    <item>finish</item>\n    <item>start</item>\n    <item>reverse-continue</item>\n    <item>reverse-next</item>\n    <item>reverse-step</item>\n    <item>reverse-nexti</item>\n    <item>reverse-stepi</item>\n    <item>reverse-finish</item>\n    <item>checkpoint</item>\n    <item>restart</item>\n  </list>\n  <contexts>\n    <context name=\"default\" attribute=\"Normal\" lineEndContext=\"#stay\">\n      <Detect2Chars char=\"#\" char1=\" \" context=\"comment\" />\n      <!-- highlight GDB command listings -->\n      <StringDetect String=\"(gdb)\" context=\"gdb\" firstNonSpace=\"true\" />\n      <StringDetect String=\"(rr)\" context=\"gdb\" firstNonSpace=\"true\" />\n      <!-- continuation of commands -->\n      <DetectChar char=\">\" context=\"gdb\" firstNonSpace=\"true\" />\n      <!-- output of backtrace-generating commands -->\n      <IncludeRules context=\"##GDB Backtrace\" />\n    </context>\n    <context name=\"gdb\" attribute=\"CommandLine\" lineEndContext=\"#pop\">\n      <keyword attribute=\"Command\" String=\"commands\" context=\"args\" />\n      <WordDetect String=\"python\" context=\"python\" attribute=\"Command\" />\n      <DetectChar char=\"#\" context=\"comment\" />\n    </context>\n    <context name=\"args\" attribute=\"CommandLine\" lineEndContext=\"#pop\">\n      <DetectChar char=\"#\" context=\"comment\" />\n    </context>\n    <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n    </context>\n    <context name=\"python\" attribute=\"Normal\" lineEndContext=\"#stay\">\n      <WordDetect String=\"end\" context=\"#pop\" attribute=\"Command\" />\n      <IncludeRules context=\"##Python\" />\n    </context>\n  </contexts>\n  <itemDatas>\n    <itemData name=\"Normal\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n    <itemData name=\"CommandLine\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n    <itemData name=\"Command\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n    <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"false\" />\n  </itemDatas>\n</highlighting>\n\n</language>\n\n<!-- kate: replace-tabs: on; tab-width: 4; indent-width: 4; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gdbinit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"GDB Init\" section=\"Other\"\n          version=\"2\" kateversion=\"3.4\"\n          extensions=\"*.gdbinit\"\n          mimetype=\"\"\n          author=\"Milian Wolff (mail@milianw.de)\" license=\"LGPL\">\n\n<highlighting>\n  <contexts>\n    <context name=\"default\" attribute=\"Normal\" lineEndContext=\"#stay\">\n      <!-- highlight gdbinit files without leading (gdb) -->\n      <IncludeRules context=\"gdb##GDB\" />\n    </context>\n  </contexts>\n  <itemDatas>\n    <itemData name=\"Normal\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n  </itemDatas>\n</highlighting>\n\n</language>\n\n<!-- kate: replace-tabs: on; tab-width: 4; indent-width: 4; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gdl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"GDL\" version=\"2\" kateversion=\"2.2\" section=\"Scientific\" extensions=\"*.gdl;*.vcg;*.GDL;*.VCG\" mimetype=\"\" author=\"Christoph Cullmann (cullmann@absint.com)\" license=\"MIT\">\n <highlighting>\n  <list name=\"colors\">\n   <item>white</item>\n   <item>blue</item>\n   <item>red</item>\n   <item>green</item>\n   <item>yellow</item>\n   <item>magenta</item>\n   <item>cyan</item>\n   <item>darkgrey</item>\n   <item>darkgray</item>\n   <item>darkblue</item>\n   <item>darkred</item>\n   <item>darkgreen</item>\n   <item>darkyellow</item>\n   <item>darkmagenta</item>\n   <item>darkcyan</item>\n   <item>gold</item>\n   <item>lightgrey</item>\n   <item>lightgray</item>\n   <item>lightblue</item>\n   <item>lightred</item>\n   <item>lightgreen</item>\n   <item>lightyellow</item>\n   <item>lightmagenta</item>\n   <item>lightcyan</item>\n   <item>lilac</item>\n   <item>turquoise</item>\n   <item>aquamarine</item>\n   <item>khaki</item>\n   <item>purple</item>\n   <item>yellowgreen</item>\n   <item>pink</item>\n   <item>orange</item>\n   <item>orchid</item>\n   <item>black</item>\n  </list>\n  <list name=\"shapes\">\n   <item>box</item>\n   <item>triangle</item>\n   <item>circle</item>\n   <item>ellipse</item>\n   <item>hexagon</item>\n   <item>rhomb</item>\n   <item>rhomboid</item>\n   <item>trapeze</item>\n   <item>uptrapeze</item>\n   <item>trapezoid</item>\n   <item>uptrapezoid</item>\n   <item>lparallelogram</item>\n   <item>rparallelogram</item>\n  </list>\n  <list name=\"states\">\n   <item>unfolded</item>\n   <item>folded</item>\n   <item>boxed</item>\n   <item>clustered</item>\n   <item>wrapped</item>\n   <item>exclusive</item>\n   <item>white</item>\n  </list>\n  <list name=\"algorithms\">\n   <item>normal</item>\n   <item>tree</item>\n   <item>forcedir</item>\n   <item>dfs</item>\n   <item>minbackward</item>\n   <item>maxdepth</item>\n   <item>maxdepthslow</item>\n   <item>mindepth</item>\n   <item>mindepthslow</item>\n   <item>minindegree</item>\n   <item>minoutdegree</item>\n   <item>maxindegree</item>\n   <item>maxoutdegree</item>\n   <item>maxdegree</item>\n   <item>mindegree</item>\n  </list>\n  <list name=\"forcedir\">\n   <item>attraction</item>\n   <item>repulsion</item>\n   <item>randomfactor</item>\n   <item>randomimpulse</item>\n   <item>randomrounds</item>\n   <item>tempscheme</item>\n   <item>temptreshold</item>\n   <item>tempmin</item>\n   <item>tempmax</item>\n  </list>\n  <list name=\"magnetic\">\n   <item>no</item>\n   <item>polar</item>\n   <item>circular</item>\n   <item>polcircular</item>\n   <item>orthogonal</item>\n  </list>\n  <list name=\"orientation\">\n   <item>toptobottom</item>\n   <item>bottomtotop</item>\n   <item>lefttoright</item>\n   <item>righttoleft</item>\n   <item>top_to_bottom</item>\n   <item>bottom_to_top</item>\n   <item>left_to_right</item>\n   <item>right_to_left</item>\n  </list>\n  <list name=\"lines\">\n   <item>solid</item>\n   <item>continuous</item>\n   <item>dashed</item>\n   <item>dotted</item>\n   <item>double</item>\n   <item>triple</item>\n   <item>invisible</item>\n  </list>\n  <list name=\"fisheye\">\n   <item>pfish</item>\n   <item>cfish</item>\n   <item>fpfish</item>\n   <item>fcfish</item>\n   <item>dpfish</item>\n   <item>dcfish</item>\n  </list>\n  <contexts>\n   <context name=\"default\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Comment\" context=\"ccomment\" char=\"/\" char1=\"/\"/>\n    <Detect2Chars attribute=\"Comment\" context=\"cppcomment\" char=\"/\" char1=\"*\"/>\n    <StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"focus\"/>\n    <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"(graph|edge|node|region|backedge|(left|right|)(bent|)nearedge):\"/>\n    <RegExpr attribute=\"Value\" context=\"#stay\" String=\"loc *:\"/>\n    <StringDetect attribute=\"Value\" context=\"centry\" String=\"colorentry\"/>\n    <RegExpr attribute=\"Value\" context=\"arrowmode\" String=\"arrow_?mode *:\"/>\n    <RegExpr attribute=\"Value\" context=\"colorid\" String=\"(foldnode.|node.|)(text|border|)color *:\"/>\n    <RegExpr attribute=\"Value\" context=\"colorid\" String=\"(foldedge.|edge.|)(arrow|backarrow|)color *:\"/>\n    <RegExpr attribute=\"Value\" context=\"arrow\" String=\"(foldedge.|edge.|)(arrow|backarrow)style *:\"/>\n    <RegExpr attribute=\"Value\" context=\"lineid\" String=\"(foldedge.|edge.|)linestyle *:\"/>\n    <RegExpr attribute=\"Value\" context=\"lineid\" String=\"(foldnode.|node.|)borderstyle *:\"/>\n    <RegExpr attribute=\"Value\" context=\"fishid\" String=\"view *:\"/>\n    <RegExpr attribute=\"Value\" context=\"shapeid\" String=\"(foldnode.|node.|)shape\"/>\n    <RegExpr attribute=\"Value\" context=\"lquote\" String=\"(source|target)(name|)\"/>\n    <RegExpr attribute=\"Value\" context=\"lquote\" String=\"title *:\"/>\n    <RegExpr attribute=\"Value\" context=\"lquote\" String=\"(foldnode.|node.|foldedge.|edge.|)label *:\"/>\n    <RegExpr attribute=\"Value\" context=\"fontlq\" String=\"(foldnode.|node.|foldedge.|edge.|)fontname *:\"/>\n    <RegExpr attribute=\"Value\" context=\"lquote\" String=\"infoname(1|2|3) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"lquote\" String=\"(foldnode.|node.|)info(1|2|3) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"spreadlevel *:\"/>\n    <RegExpr attribute=\"Value\" context=\"nodelevel\" String=\"(foldnode.|node.|)(level|vertical_?order) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(foldnode.|node.|foldedge.|edge.|)horizontal_?order *:\"/>\n    <RegExpr attribute=\"Value\" context=\"stateid\" String=\"stat(e|us) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"algid\" String=\"layout_?algorithm *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"crossing_?optimization *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"crossing_?phase2 *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"(dirty_edge_|display_edge_|displayedge|late_edge_|subgraph_?)labels *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"s?manhatt(a|e)n_?edges *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"(nodes|near_?edges|edges|splines) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"classname\" String=\"classname\"/>\n    <RegExpr attribute=\"Value\" context=\"orient\" String=\"orientation *:\"/>\n    <RegExpr attribute=\"Value\" context=\"nodealign\" String=\"node_alignment *:\"/>\n    <RegExpr attribute=\"Value\" context=\"textmode\" String=\"(foldnode.|node.|)textmode *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"equal_y_dist *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"equal_?ydist *:\"/>\n    <RegExpr attribute=\"Value\" context=\"weight\" String=\"crossing_?weight *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"(fast_?|)icons *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"fine_?tuning *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"(f?straight_?|priority_)phase *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"ignore_?singles *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"(in|out|)port_?sharing *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"linear_?segments *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(foldnode.|node.|)(height|width|borderwidth|stretch|shrink) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(foldedge.|edge.|)(arrowsize|backarrowsize|thickness|class|priority) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"anchor *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"iconcolors *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"hidden *:\"/>\n    <RegExpr attribute=\"Value\" context=\"boolean\" String=\"energetic *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"layout_(up|down|near|spline)factor *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"border +(x|y) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"splinefactor *:\"/>\n    <RegExpr attribute=\"Value\" context=\"floatval\" String=\"(gravity|tempfactor|treefactor) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(xspace|xbase|xmax|xraster|x) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(yspace|ybase|ymax|yraster|y) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(xlraster|xlspace) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"magnetic_force(1|2) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"magnor\" String=\"magnetic_field(1|2) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(a|b|c|fd|p|r|s)(max) *:\"/>\n    <RegExpr attribute=\"Value\" context=\"intval\" String=\"(c|p|r)(min) *:\"/>\n    <keyword attribute=\"Value\" context=\"intval\" String=\"forcedir\"/>\n    <RegExpr attribute=\"Value\" context=\"scaling\" String=\"scaling *:\"/>\n    <RegExpr attribute=\"Value\" context=\"lquote\" String=\"useraction(name|cmd)(1|2|3|4) *:\"/>\n   </context>\n   <context name=\"string\" attribute=\"String\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"String\" context=\"default\" char=\"&quot;\"/>\n    <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n    <RegExpr attribute=\"Char\" context=\"#stay\" String=\"\\\\(n|a|t|b)\"/>\n    <RegExpr attribute=\"Char\" context=\"#stay\" String=\"\\\\fi(0|1|2)[0-9][0-9]\"/>\n    <RegExpr attribute=\"Char\" context=\"#stay\" String=\"\\\\f(u|I|b|B|n|[0-9][0-9])\"/>\n   </context>\n   <context name=\"scaling\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <StringDetect attribute=\"Datatype\" context=\"default\" String=\"maxspect\"/>\n    <Float attribute=\"Float\" context=\"default\"/>\n   </context>\n   <context name=\"ccomment\" attribute=\"Comment\" lineEndContext=\"default\">\n   </context>\n   <context name=\"cppcomment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Comment\" context=\"default\" char=\"*\" char1=\"/\"/>\n   </context>\n   <context name=\"colorid\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"colors\"/>\n    <RegExpr attribute=\"Datatype\" context=\"default\" String=\"[0-9][0-9]?\"/>\n   </context>\n   <context name=\"shapeid\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"shapes\"/>\n   </context>\n   <context name=\"lquote\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\"/>\n   </context>\n   <context name=\"stateid\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"states\"/>\n   </context>\n   <context name=\"algid\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"algorithms\"/>\n   </context>\n   <context name=\"fishid\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"fisheye\"/>\n   </context>\n   <context name=\"boolean\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"default\" String=\"(yes|no)\"/>\n   </context>\n   <context name=\"lineid\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"lines\"/>\n   </context>\n   <context name=\"intval\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <Int attribute=\"Integer\" context=\"longint\"/>\n   </context>\n   <context name=\"longint\" attribute=\"Normal\" lineEndContext=\"default\">\n    <Int attribute=\"Integer\" context=\"longint\"/>\n    <RegExpr attribute=\"Normal\" context=\"default\" String=\"\\ \"/>\n   </context>\n   <context name=\"centry\" attribute=\"Normal\" lineEndContext=\"default\">\n    <RegExpr attribute=\"Value\" context=\"cecolon\" String=\"[0-9][0-9]?\"/>\n   </context>\n   <context name=\"rgb\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Integer\" context=\"default\" String=\"[0-9][0-9]?[0-9]? +[0-9][0-9]?[0-9]? +[0-9][0-9]?[0-9]?\"/>\n   </context>\n   <context name=\"floatval\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <Float attribute=\"Float\" context=\"default\"/>\n   </context>\n   <context name=\"fontlq\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Datatype\" context=\"fontbase\" char=\"&quot;\"/>\n   </context>\n   <context name=\"fontbase\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"fontsize\" String=\"((tim|ncen)(R|B|I|BI)|(cour|helv)(R|B|O|BO)|symb)\"/>\n   </context>\n   <context name=\"fontsize\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"#stay\" String=\"(08|10|12|14|18|24)(.vcf|)\"/>\n    <DetectChar attribute=\"Datatype\" context=\"default\" char=\"&quot;\"/>\n   </context>\n   <context name=\"arrow\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"default\" String=\"(solid|line|none)\"/>\n   </context>\n   <context name=\"arrowmode\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"default\" String=\"(free|fixed)\"/>\n   </context>\n   <context name=\"magnor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"magnetic\"/>\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"orientation\"/>\n   </context>\n   <context name=\"orient\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Datatype\" context=\"default\" String=\"orientation\"/>\n   </context>\n   <context name=\"nodealign\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"default\" String=\"(top|center|bottom)\"/>\n   </context>\n   <context name=\"nodelevel\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <StringDetect attribute=\"Datatype\" context=\"default\" String=\"maxlevel\"/>\n    <Int attribute=\"Integer\" context=\"longint\"/>\n   </context>\n   <context name=\"classname\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[0-9]+\"/>\n    <DetectChar attribute=\"Value\" context=\"lquote\" char=\":\"/>\n   </context>\n   <context name=\"cecolon\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"rgb\" char=\":\"/>\n   </context>\n   <context name=\"weight\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"default\" String=\"(medianbary|barymedian|bary|median)\"/>\n   </context>\n   <context name=\"textmode\" attribute=\"Normal\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Datatype\" context=\"default\" String=\"(center|left_justify|right_justify)\"/>\n   </context>\n  </contexts>\n  <itemDatas>\n   <itemData name=\"Normal\" defStyleNum=\"dsNormal\"/>\n   <itemData name=\"String\" defStyleNum=\"dsString\"/>\n   <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n   <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n   <itemData name=\"Integer\" defStyleNum=\"dsDecVal\"/>\n   <itemData name=\"Datatype\" defStyleNum=\"dsDataType\"/>\n   <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n   <itemData name=\"Value\" defStyleNum=\"dsOthers\"/>\n   <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n  </itemDatas>\n </highlighting>\n <general>\n  <comments>\n   <comment name=\"singleLine\" start=\"//\" />\n   <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n  </comments>\n  <keywords casesensitive=\"1\"/>\n </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gettext.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- from xml.xml -->\n  <!ENTITY name    \"(?![0-9])[\\w_:][\\w.:_-]*\">\n  <!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n]>\n<language name=\"GNU Gettext\" version=\"7\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.po;*.pot\" mimetype=\"text/x-gettext-translation\" author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>msgid</item>\n      <item>msgid_plural</item>\n      <item>msgctxt</item>\n    </list>\n\n    <list name=\"translate\">\n      <item>msgstr</item>\n    </list>\n\n    <list name=\"fuzzy\">\n      <item>fuzzy</item>\n    </list>\n\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <keyword String=\"keywords\" attribute=\"Keyword\" context=\"#stay\" firstNonSpace=\"true\"/>\n        <keyword String=\"translate\" attribute=\"Keyword\" context=\"Msgstr\" firstNonSpace=\"true\"/>\n        <Detect2Chars char=\"#\" char1=\".\" attribute=\"Automatic Comment\" context=\"AutomaticComment\" firstNonSpace=\"true\"/>\n        <Detect2Chars char=\"#\" char1=\":\" attribute=\"Reference\" context=\"References\" firstNonSpace=\"true\"/>\n        <Detect2Chars char=\"#\" char1=\",\" attribute=\"Flag\" context=\"Flags\" firstNonSpace=\"true\"/>\n        <Detect2Chars char=\"#\" char1=\"|\" attribute=\"StringPrevious\" context=\"Previous\" firstNonSpace=\"true\"/>\n        <Detect2Chars char=\"#\" char1=\" \" attribute=\"Translator Comment\" context=\"TranslatorComment\" firstNonSpace=\"true\"/>\n        <DetectChar char=\"#\" attribute=\"Extension Comment\" context=\"ExtensionComment\" firstNonSpace=\"true\"/>\n        <DetectChar char=\"&quot;\" attribute=\"String\" context=\"String\"/>\n      </context>\n\n      <context name=\"Msgstr\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"MsgstrString\">\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"Index\" context=\"MsgstrString\"/>\n      </context>\n\n      <context name=\"MsgstrString\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"&quot;\" attribute=\"Translated String\" context=\"Translated String\"/>\n      </context>\n\n      <context name=\"TranslatorComment\" attribute=\"Translator Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"CommonComment\"/>\n      </context>\n\n      <context name=\"ExtensionComment\" attribute=\"Extension Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"CommonComment\"/>\n      </context>\n\n      <context name=\"AutomaticComment\" attribute=\"Automatic Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"CommonComment\"/>\n      </context>\n\n      <context name=\"References\" attribute=\"Reference\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"CommonComment\"/>\n      </context>\n\n      <context name=\"Flags\" attribute=\"Flag\" lineEndContext=\"#pop\">\n        <!-- Make fuzzy-flag stand out from the rest, being the most important. -->\n        <keyword String=\"fuzzy\" attribute=\"FlagFuzzy\" context=\"#stay\"/>\n        <IncludeRules context=\"CommonComment\"/>\n      </context>\n\n      <context name=\"CommonComment\" attribute=\"Translator Comment\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"{\" char1=\"+\" attribute=\"StringDiffNewWrapComment\" context=\"StringDiffNewComment\"/>\n        <Detect2Chars char=\"{\" char1=\"-\" attribute=\"StringDiffOldWrapComment\" context=\"StringDiffOldComment\"/>\n      </context>\n      <context name=\"StringDiffNewComment\" attribute=\"StringDiffNewComment\" lineEndContext=\"#pop\">\n        <Detect2Chars char=\"+\" char1=\"}\" attribute=\"StringDiffNewWrapComment\" context=\"#pop\"/>\n      </context>\n      <context name=\"StringDiffOldComment\" attribute=\"StringDiffOldComment\" lineEndContext=\"#pop\">\n        <Detect2Chars char=\"-\" char1=\"}\" attribute=\"StringDiffOldWrapComment\" context=\"#pop\"/>\n      </context>\n\n      <!--\n        Tag-context should be carried over if split by string continuation,\n        to not lose markup highlighting when that happens.\n      -->\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop!Error\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"{\" char1=\"+\" attribute=\"StringDiffNewWrap\" context=\"StringDiffNew\"/>\n        <Detect2Chars char=\"{\" char1=\"-\" attribute=\"StringDiffOldWrap\" context=\"StringDiffOld\"/>\n        <RegExpr String=\"&lt;/?[a-zA-Z][-_:0-9a-zA-Z]*>\" attribute=\"StringTag\" context=\"#stay\"/>\n        <DetectChar char=\"&quot;\" attribute=\"String\" context=\"#pop\"/>\n        <RegExpr String=\"\\\\.\" attribute=\"Char\" context=\"#stay\"/>\n        <RegExpr String=\"&entref;\" attribute=\"Entity\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Translated String\" attribute=\"Translated String\" lineEndContext=\"#pop!Error\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"{\" char1=\"+\" attribute=\"StringDiffNewWrap\" context=\"StringDiffNew\"/>\n        <Detect2Chars char=\"{\" char1=\"-\" attribute=\"StringDiffOldWrap\" context=\"StringDiffOld\"/>\n        <RegExpr String=\"&lt;/?[a-zA-Z][-_:0-9a-zA-Z]*>\" attribute=\"StringTag\" context=\"#stay\"/>\n        <DetectChar char=\"&quot;\" attribute=\"Translated String\" context=\"#pop\"/>\n        <RegExpr String=\"\\\\.\" attribute=\"Char\" context=\"#stay\"/>\n        <RegExpr String=\"&entref;\" attribute=\"Entity\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Error\" attribute=\"Error\" lineEndContext=\"#stay\">\n        <RegExpr String=\".+\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"StringDiffNew\" attribute=\"StringDiffNew\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"+\" char1=\"}\" attribute=\"StringDiffNewWrap\" context=\"#pop\"/>\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"StringWrapSub\"/>\n        <RegExpr attribute=\"Char\" String=\"\\\\.\" context=\"#stay\"/>\n      </context>\n      <context name=\"StringDiffOld\" attribute=\"StringDiffOld\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"-\" char1=\"}\" attribute=\"StringDiffOldWrap\" context=\"#pop\"/>\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"StringWrapSub\"/>\n        <RegExpr attribute=\"Char\" String=\"\\\\.\" context=\"#stay\"/>\n      </context>\n      <context name=\"StringWrapSub\" attribute=\"String\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop\">\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\"/>\n      </context>\n\n      <!--\n        Previous strings are those in #| comments, introduced by Gettext 0.16.\n        They should have all the same highlight types as normal strings.\n        A special addition are embedded diff-segments: {+...+} and {-...-},\n        which are not Gettext standard, but some tools can produce them.\n      -->\n      <context name=\"Previous\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <keyword String=\"keywords\" attribute=\"KeywordPrevious\" context=\"#stay\"/>\n        <DetectChar char=\"&quot;\" attribute=\"StringPrevious\" context=\"StringPrevious\"/>\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"IndexPrevious\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"StringPrevious\" attribute=\"StringPrevious\" lineEndContext=\"#pop#pop!Error\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"{\" char1=\"+\" attribute=\"StringDiffNewWrapPrevious\" context=\"StringDiffNewPrevious\"/>\n        <Detect2Chars char=\"{\" char1=\"-\" attribute=\"StringDiffOldWrapPrevious\" context=\"StringDiffOldPrevious\"/>\n        <RegExpr String=\"&lt;/?[a-zA-Z][-_:0-9a-zA-Z]*>\" attribute=\"StringTagPrevious\" context=\"#stay\"/>\n        <DetectChar char=\"&quot;\" attribute=\"StringPrevious\" context=\"StringWrapPrevious\"/>\n        <RegExpr String=\"\\\\.\" attribute=\"CharPrevious\" context=\"#stay\"/>\n        <RegExpr String=\"&entref;\" attribute=\"EntityPrevious\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"StringDiffNewPrevious\" attribute=\"StringDiffNewPrevious\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"+\" char1=\"}\" attribute=\"StringDiffNewWrapPrevious\" context=\"#pop\"/>\n        <DetectChar attribute=\"StringPrevious\" char=\"&quot;\" context=\"StringWrapSubPrevious\"/>\n        <RegExpr attribute=\"CharPrevious\" String=\"\\\\.\" context=\"#stay\"/>\n      </context>\n      <context name=\"StringDiffOldPrevious\" attribute=\"StringDiffOldPrevious\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <Detect2Chars char=\"-\" char1=\"}\" attribute=\"StringDiffOldWrapPrevious\" context=\"#pop\"/>\n        <DetectChar attribute=\"StringPrevious\" char=\"&quot;\" context=\"StringWrapSubPrevious\"/>\n        <RegExpr attribute=\"CharPrevious\" String=\"\\\\.\" context=\"#stay\"/>\n      </context>\n      <context name=\"StringWrapSubPrevious\" attribute=\"StringPrevious\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop#pop!Error\">\n        <DetectSpaces/>\n        <RegExpr String=\"#\\| *&quot;\" attribute=\"StringPrevious\" context=\"#pop\" firstNonSpace=\"true\"/>\n        <DetectChar char=\"&quot;\" attribute=\"StringPrevious\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"StringWrapPrevious\" attribute=\"StringPrevious\" lineEndContext=\"#pop#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop!Error\">\n        <DetectSpaces/>\n        <DetectChar char=\"&quot;\" attribute=\"StringPrevious\" context=\"#pop\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"KeywordPrevious\" defStyleNum=\"dsKeyword\" italic=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n      <itemData name=\"StringPrevious\" defStyleNum=\"dsString\" italic=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Translated String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Translator Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Extension Comment\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n      <itemData name=\"Automatic Comment\" defStyleNum=\"dsComment\" spellChecking=\"false\"/>\n      <itemData name=\"Reference\" defStyleNum=\"dsComment\" spellChecking=\"false\"/>\n      <itemData name=\"Flag\" defStyleNum=\"dsComment\" spellChecking=\"false\"/>\n      <itemData name=\"FlagFuzzy\" defStyleNum=\"dsComment\" bold=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"CharPrevious\" defStyleNum=\"dsChar\" italic=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Entity\" defStyleNum=\"dsString\" bold=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"EntityPrevious\" defStyleNum=\"dsString\" bold=\"true\" italic=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"StringTag\" defStyleNum=\"dsString\" bold=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"StringTagPrevious\" defStyleNum=\"dsString\" bold=\"true\" italic=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Index\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"IndexPrevious\" defStyleNum=\"dsDecVal\" italic=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"StringDiffNewWrap\" defStyleNum=\"dsString\"/>\n      <itemData name=\"StringDiffOldWrap\" defStyleNum=\"dsString\"/>\n      <itemData name=\"StringDiffNew\" defStyleNum=\"dsString\" underline=\"true\"/>\n      <itemData name=\"StringDiffOld\" defStyleNum=\"dsString\" underline=\"true\"/>\n      <itemData name=\"StringDiffNewWrapComment\" defStyleNum=\"dsString\" italic=\"true\"/>\n      <itemData name=\"StringDiffOldWrapComment\" defStyleNum=\"dsString\" italic=\"true\"/>\n      <itemData name=\"StringDiffNewComment\" defStyleNum=\"dsString\" italic=\"true\"/>\n      <itemData name=\"StringDiffOldComment\" defStyleNum=\"dsString\" italic=\"true\"/>\n      <itemData name=\"StringDiffNewWrapPrevious\" defStyleNum=\"dsString\" italic=\"true\"/>\n      <itemData name=\"StringDiffOldWrapPrevious\" defStyleNum=\"dsString\" italic=\"true\"/>\n      <itemData name=\"StringDiffNewPrevious\" defStyleNum=\"dsString\" italic=\"true\"/>\n      <itemData name=\"StringDiffOldPrevious\" defStyleNum=\"dsString\" italic=\"true\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/git-ignore.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Git Ignore\" version=\"2\" kateversion=\"2.4\" section=\"Configuration\"  extensions=\".gitignore*;\" mimetype=\"text/x-git-ignore\" license=\"LGPL\">\n    <highlighting>\n        <contexts>\n           \n            <context name=\"ini\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\" />\n                <RegExpr attribute=\"Include\" String=\"^!.*\" context=\"Include\"/>\n                <RegExpr attribute=\"Exclude\" String=\".*\"  context=\"Exclude\" />\n            </context>\n            \n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n            </context>                                                                                          \n        \n            <context name=\"Include\" attribute=\"Include\" lineEndContext=\"#pop\">\n            </context>\n\n            <context name=\"Exclude\" attribute=\"Exclude\" lineEndContext=\"#pop\">\n            </context>\n        \n        </contexts>\n        \n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Exclude\" defStyleNum=\"dsString\" />\n            <itemData name=\"Include\" defStyleNum=\"dsChar\" />\n        </itemDatas>\n    \n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\" />\n        </comments>\n        <keywords casesensitive=\"0\" />\n    </general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/git-rebase.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Git Rebase\" version=\"2\" kateversion=\"2.4\" section=\"Other\" extensions=\"git-rebase-todo\" license=\"LGPL\" mimetype=\"text/vnd.git.rebase\" author=\"Orgad Shaneh (orgads@gmail.com)\">\n  <highlighting>\n    <list name=\"pick\">\n      <item>p</item>\n      <item>pick</item>\n    </list>\n    <list name=\"reword\">\n      <item>r</item>\n      <item>reword</item>\n    </list>\n    <list name=\"edit\">\n      <item>e</item>\n      <item>edit</item>\n    </list>\n    <list name=\"squash\">\n      <item>s</item>\n      <item>squash</item>\n    </list>\n    <list name=\"fixup\">\n      <item>f</item>\n      <item>fixup</item>\n    </list>\n    <list name=\"exec\">\n      <item>x</item>\n      <item>exec</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Normal\">\n    <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\" column=\"0\"/>\n    <keyword attribute=\"Pick\" context=\"Commit\" String=\"pick\" />\n    <keyword attribute=\"Reword\" context=\"Commit\" String=\"reword\" />\n    <keyword attribute=\"Edit\" context=\"Commit\" String=\"edit\" />\n    <keyword attribute=\"Squash\" context=\"Commit\" String=\"squash\" />\n    <keyword attribute=\"Fixup\" context=\"Commit\" String=\"fixup\" />\n    <keyword attribute=\"Exec\" context=\"Commit\" String=\"exec\" />\n      </context>\n      <context attribute=\"Commit\" lineEndContext=\"#pop\" name=\"Commit\">\n        <RegExpr attribute=\"Commit\" context=\"Summary\" String=\"[0-9a-f]{7,40}\" />\n      </context>\n      <context attribute=\"Summary\" lineEndContext=\"#pop\" name=\"Summary\" />\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <RegExpr attribute=\"Commit\" context=\"#stay\" String=\"[0-9a-f]{7,40}\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Pick\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Reword\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Edit\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Squash\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"Fixup\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Exec\"  defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Commit\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Summary\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gitolite.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language version=\"2\" kateversion=\"3.4\" name=\"Gitolite\" section=\"Configuration\" extensions=\"gitolite.conf\" author=\"Andor Dávid (david-andor@kozpontiagy.hu)\" license=\"GPL\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>repo</item>\n    </list>\n\n    <contexts>\n      <context name=\"Normal Text\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar                     context=\"SingleLineComment\" char=\"#\" />\n        <keyword attribute=\"Keyword\"    context=\"#stay\"   String=\"keywords\" />\n        <RegExpr attribute=\"Group\"      context=\"#stay\"   String=\"\\@[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\" />\n        <RegExpr attribute=\"Symbol\"     context=\"Value\"   String=\"=\" />\n      </context>\n\n      <context name=\"SingleLineComment\" attribute=\"Comment (Single)\" lineEndContext=\"#pop\" />\n\n      <context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Group\"       context=\"#stay\" String=\"\\@[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"      defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Comment (Single)\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Keyword\"          defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Group\"            defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n <!-- <itemData name=\"Refs\"             defStyleNum=\"dsKeyword\" spellChecking=\"false\" /> -->\n      <itemData name=\"Symbol\"           defStyleNum=\"dsString\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"1\" />\n\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n\n  </general>\n\n  <!-- kate: space-indent on indent-width 2 replace-tabs on indent-mode xml -->\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/glosstex.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"GlossTex\" version=\"2\" kateversion=\"5.0\" extensions=\"*.gdf\" section=\"Markup\" mimetype=\"text/x-gdf\" casesensitive=\"1\" author=\"Thomas Braun(braun@physik.fu-berlin.de)\" license=\"LGPL\">\n  <highlighting>\n    <contexts>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n      <StringDetect String=\"@entry\" attribute=\"Entry\" context=\"Entry\"/>\n      </context>\n      <context name=\"Entry\"  attribute=\"Entry\" lineEndContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"Label\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Text\"/>\n      </context>\n      <context name=\"Label\"  attribute=\"Label\" lineEndContext=\"#pop\">\n      <DetectChar char=\",\" attribute=\"Normal Text\" context=\"Abbrev\"/>\n      <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Text\"/>\n      </context>\n      <context name=\"Abbrev\" attribute=\"Abbrev\" lineEndContext=\"#pop\">\n        <RegExpr String=\"\\{[^\\{\\}]*\\}\" attribute=\"Abbrev\" context=\"#stay\"/>\n        <DetectChar char=\",\" attribute=\"Normal Text\" context=\"Full\"/>\n\t<DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Text\"/>\n      </context>\n        <context name=\"Full\" attribute=\"Full\" lineEndContext=\"#pop\">\n\t<RegExpr String=\"\\{[^\\{\\}]*\\}\" attribute=\"Full\" context=\"#stay\"/>\n\t<DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Text\"/>\n      </context>\n      <context name=\"Text\" attribute=\"Normal Text\" lineEndContext=\"Comment\">\n      <IncludeRules context=\"##LaTeX\" includeAttrib=\"true\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Entry\" defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Label\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Abbrev\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Full\" defStyleNum=\"dsString\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n   <keywords casesensitive=\"0\" weakDeliminator=\"\\\" wordWrapDeliminator=\",{}[]\"/>\n      <comments>\n      <comment name=\"singleLine\" start=\"%\" />\n    </comments>\n    </general>\n  </language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/glsl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"GLSL\" section=\"3D\" extensions=\"*.glsl;*.vert;*.vs;*.frag;*.fs;*.geom;*.gs;*.tcs;*.tes\" mimetype=\"text/x-glslsrc\" version=\"4\" kateversion=\"5.0\" author=\"Oliver Richers (o.richers@tu-bs.de)\" license=\"LGPL\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>break</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>do</item>\n\t\t\t<item>for</item>\n\t\t\t<item>while</item>\n\t\t\t\n\t\t\t<item>if</item>\n\t\t\t<item>else</item>\n\t\t\t\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\t\t\t\n\t\t\t<item>discard</item>\n\t\t\t<item>return</item>\n\t\t\t\n\t\t\t<item>struct</item>\n\t\t\t<item>subroutine</item>\n\t\t\t<item>layout</item>\n\t\t\t<item>uniform</item>\n\t\t\t<item>buffer</item>\n\t\t\t<item>invariant</item>\n\t\t</list>\n\t\t<list name=\"types\">\n\t\t\t<item>float</item>\n\t\t\t<item>int</item>\n\t\t\t<item>void</item>\n\t\t\t<item>bool</item>\n\n\t\t\t<item>mat2</item>\n\t\t\t<item>mat3</item>\n\t\t\t<item>mat4</item>\n\t\t\t\n\t\t\t<item>vec2</item>\n\t\t\t<item>vec3</item>\n\t\t\t<item>vec4</item>\n\t\t\t<item>ivec2</item>\n\t\t\t<item>ivec3</item>\n\t\t\t<item>ivec4</item>\n\t\t\t<item>bvec2</item>\n\t\t\t<item>bvec3</item>\n\t\t\t<item>bvec4</item>\n\t\t\t\n\t\t\t<item>sampler1D</item>\n\t\t\t<item>sampler2D</item>\n\t\t\t<item>sampler3D</item>\n\t\t\t<item>samplerCube</item>\n\t\t\t<item>sampler2DRect</item>\n\t\t\t<item>sampler1DArray</item>\n\t\t\t<item>sampler2DArray</item>\n\t\t\t<item>samplerCubeArray</item>\n\t\t\t<item>samplerBuffer</item>\n\t\t\t<item>sampler2DMS</item>\n\t\t\t<item>sampler2DMSArray</item>\n\n\t\t\t<item>sampler1DShadow</item>\n\t\t\t<item>sampler2DShadow</item>\n\t\t\t<item>samplerCubeShadow</item>\n\t\t\t<item>sampler2DRectShadow</item>\n\t\t\t<item>sampler1DArrayShadow</item>\n\t\t\t<item>sampler2DArrayShadow</item>\n\t\t\t<item>samplerCubeArrayShadow</item>\n\n\t\t\t<item>isampler1D</item>\n\t\t\t<item>isampler2D</item>\n\t\t\t<item>isampler3D</item>\n\t\t\t<item>isamplerCube</item>\n\t\t\t<item>isampler2DRect</item>\n\t\t\t<item>isampler1DArray</item>\n\t\t\t<item>isampler2DArray</item>\n\t\t\t<item>isamplerCubeArray</item>\n\t\t\t<item>isamplerBuffer</item>\n\t\t\t<item>isampler2DMS</item>\n\t\t\t<item>isampler2DMSArray</item>\n\n\t\t\t<item>isampler1DShadow</item>\n\t\t\t<item>isampler2DShadow</item>\n\t\t\t<item>isamplerCubeShadow</item>\n\t\t\t<item>isampler2DRectShadow</item>\n\t\t\t<item>isampler1DArrayShadow</item>\n\t\t\t<item>isampler2DArrayShadow</item>\n\t\t\t<item>isamplerCubeArrayShadow</item>\n\n\t\t\t<item>usampler1D</item>\n\t\t\t<item>usampler2D</item>\n\t\t\t<item>usampler3D</item>\n\t\t\t<item>usamplerCube</item>\n\t\t\t<item>usampler2DRect</item>\n\t\t\t<item>usampler1DArray</item>\n\t\t\t<item>usampler2DArray</item>\n\t\t\t<item>usamplerCubeArray</item>\n\t\t\t<item>usamplerBuffer</item>\n\t\t\t<item>usampler2DMS</item>\n\t\t\t<item>usampler2DMSArray</item>\n\n\t\t\t<item>usampler1DShadow</item>\n\t\t\t<item>usampler2DShadow</item>\n\t\t\t<item>usamplerCubeShadow</item>\n\t\t\t<item>usampler2DRectShadow</item>\n\t\t\t<item>usampler1DArrayShadow</item>\n\t\t\t<item>usampler2DArrayShadow</item>\n\t\t\t<item>usamplerCubeArrayShadow</item>\n\n\t\t\t<item>atomic_uint</item>\n\t\t</list>\n\t\t<list name=\"typequal\">\n\t\t\t<item>attribute</item>\n\t\t\t<item>const</item>\n\t\t\t<item>varying</item>\n\t\t\t\n\t\t\t<item>in</item>\n\t\t\t<item>out</item>\n\t\t\t<item>inout</item>\n\n\t\t\t<!-- interpolation qualifiers -->\n\t\t\t<item>flat</item>\n\t\t\t<item>noperspective</item>\n\t\t\t<item>smooth</item>\n\n\t\t\t<!-- layout qualifiers -->\n\t\t\t<item>location</item>\n\t\t\t<item>component</item>\n\t\t\t<item>binding</item>\n\t\t\t<item>index</item>\n\t\t\t<item>offset</item>\n\n\t\t\t<!-- interface block -->\n\t\t\t<item>row_major</item>\n\t\t\t<item>packed</item>\n\t\t\t<item>shared</item>\n\t\t\t<item>std140</item>\n\t\t\t<item>std430</item>\n\n\t\t\t<!-- force feedback -->\n\t\t\t<item>xfb_buffer</item>\n\t\t\t<item>xfb_offset</item>\n\t\t\t<item>xfb_stride</item>\n\n\t\t\t<!-- fragment shader -->\n\t\t\t<item>origin_upper_left</item>\n\t\t\t<item>pixel_center_integer</item>\n\t\t\t<item>early_fragment_tests</item>\n\n\t\t\t<!-- geometry shader-->\n\t\t\t<item>points</item>\n\t\t\t<item>lines</item>\n\t\t\t<item>lines_adjacency</item>\n\t\t\t<item>triangles</item>\n\t\t\t<item>triangles_adjacency</item>\n\t\t\t<item>line_strip</item>\n\t\t\t<item>triangle_strip</item>\n\t\t\t<item>max_vertices</item>\n\t\t\t<item>invocations</item>\n\t\t\t<item>stream</item>\n\n\t\t\t<!-- tesselation -->\n\t\t\t<item>isolines</item>\n\t\t\t<item>triangles</item>\n\t\t\t<item>quads</item>\n\t\t\t<item>point_mode</item>\n\t\t\t<item>equal_spacing</item>\n\t\t\t<item>fractional_even_spacing</item>\n\t\t\t<item>fractional_odd_spacing</item>\n\t\t\t<item>cw</item>\n\t\t\t<item>ccw</item>\n\t\t\t<item>vertices</item>\n\n\t\t\t<!-- memory qualifiers -->\n\t\t\t<item>coherent</item>\n\t\t\t<item>volatile</item>\n\t\t\t<item>restrict</item>\n\t\t\t<item>readonly</item>\n\t\t\t<item>writeonly</item>\n\t\t</list>\n\t\t<list name=\"attention\">\n\t\t\t<item>FIXME</item>\n\t\t\t<item>TODO</item>\n\t\t\t<item>BUG</item>\n\t\t</list>\n\t\t<list name=\"stdlib\">\n\t\t\t<!-- see also: https://www.opengl.org/sdk/docs/man4/ -->\n\t\t\t<item>abs</item>\n\t\t\t<item>acos</item>\n\t\t\t<item>acosh</item>\n\t\t\t<item>glActiveShaderProgram</item>\n\t\t\t<item>glActiveTexture</item>\n\t\t\t<item>all</item>\n\t\t\t<item>any</item>\n\t\t\t<item>asin</item>\n\t\t\t<item>asinh</item>\n\t\t\t<item>atan</item>\n\t\t\t<item>atanh</item>\n\t\t\t<item>atomicAdd</item>\n\t\t\t<item>atomicAnd</item>\n\t\t\t<item>atomicCompSwap</item>\n\t\t\t<item>atomicCounter</item>\n\t\t\t<item>atomicCounterDecrement</item>\n\t\t\t<item>atomicCounterIncrement</item>\n\t\t\t<item>atomicExchange</item>\n\t\t\t<item>atomicMax</item>\n\t\t\t<item>atomicMin</item>\n\t\t\t<item>atomicOr</item>\n\t\t\t<item>atomicXor</item>\n\t\t\t<item>glAttachShader</item>\n\t\t\t<item>barrier</item>\n\t\t\t<item>glBeginConditionalRender</item>\n\t\t\t<item>glBeginQuery</item>\n\t\t\t<item>glBeginQueryIndexed</item>\n\t\t\t<item>glBeginTransformFeedback</item>\n\t\t\t<item>glBindAttribLocation</item>\n\t\t\t<item>glBindBuffer</item>\n\t\t\t<item>glBindBufferBase</item>\n\t\t\t<item>glBindBufferRange</item>\n\t\t\t<item>glBindBuffersBase</item>\n\t\t\t<item>glBindBuffersRange</item>\n\t\t\t<item>glBindFragDataLocation</item>\n\t\t\t<item>glBindFragDataLocationIndexed</item>\n\t\t\t<item>glBindFramebuffer</item>\n\t\t\t<item>glBindImageTexture</item>\n\t\t\t<item>glBindImageTextures</item>\n\t\t\t<item>glBindProgramPipeline</item>\n\t\t\t<item>glBindRenderbuffer</item>\n\t\t\t<item>glBindSampler</item>\n\t\t\t<item>glBindSamplers</item>\n\t\t\t<item>glBindTexture</item>\n\t\t\t<item>glBindTextures</item>\n\t\t\t<item>glBindTextureUnit</item>\n\t\t\t<item>glBindTransformFeedback</item>\n\t\t\t<item>glBindVertexArray</item>\n\t\t\t<item>glBindVertexBuffer</item>\n\t\t\t<item>glBindVertexBuffers</item>\n\t\t\t<item>bitCount</item>\n\t\t\t<item>bitfieldExtract</item>\n\t\t\t<item>bitfieldInsert</item>\n\t\t\t<item>bitfieldReverse</item>\n\t\t\t<item>glBlendColor</item>\n\t\t\t<item>glBlendEquation</item>\n\t\t\t<item>glBlendEquationi</item>\n\t\t\t<item>glBlendEquationSeparate</item>\n\t\t\t<item>glBlendEquationSeparatei</item>\n\t\t\t<item>glBlendFunc</item>\n\t\t\t<item>glBlendFunci</item>\n\t\t\t<item>glBlendFuncSeparate</item>\n\t\t\t<item>glBlendFuncSeparatei</item>\n\t\t\t<item>glBlitFramebuffer</item>\n\t\t\t<item>glBlitNamedFramebuffer</item>\n\t\t\t<item>glBufferData</item>\n\t\t\t<item>glBufferStorage</item>\n\t\t\t<item>glBufferSubData</item>\n\t\t\t<item>ceil</item>\n\t\t\t<item>glCheckFramebufferStatus</item>\n\t\t\t<item>glCheckNamedFramebufferStatus</item>\n\t\t\t<item>clamp</item>\n\t\t\t<item>glClampColor</item>\n\t\t\t<item>glClear</item>\n\t\t\t<item>glClearBuffer</item>\n\t\t\t<item>glClearBufferData</item>\n\t\t\t<item>glClearBufferfi</item>\n\t\t\t<item>glClearBufferfv</item>\n\t\t\t<item>glClearBufferiv</item>\n\t\t\t<item>glClearBufferSubData</item>\n\t\t\t<item>glClearBufferuiv</item>\n\t\t\t<item>glClearColor</item>\n\t\t\t<item>glClearDepth</item>\n\t\t\t<item>glClearDepthf</item>\n\t\t\t<item>glClearNamedBufferData</item>\n\t\t\t<item>glClearNamedBufferSubData</item>\n\t\t\t<item>glClearNamedFramebufferfi</item>\n\t\t\t<item>glClearNamedFramebufferfv</item>\n\t\t\t<item>glClearNamedFramebufferiv</item>\n\t\t\t<item>glClearNamedFramebufferuiv</item>\n\t\t\t<item>glClearStencil</item>\n\t\t\t<item>glClearTexImage</item>\n\t\t\t<item>glClearTexSubImage</item>\n\t\t\t<item>glClientWaitSync</item>\n\t\t\t<item>glClipControl</item>\n\t\t\t<item>glColorMask</item>\n\t\t\t<item>glColorMaski</item>\n\t\t\t<item>glCompileShader</item>\n\t\t\t<item>glCompressedTexImage1D</item>\n\t\t\t<item>glCompressedTexImage2D</item>\n\t\t\t<item>glCompressedTexImage3D</item>\n\t\t\t<item>glCompressedTexSubImage1D</item>\n\t\t\t<item>glCompressedTexSubImage2D</item>\n\t\t\t<item>glCompressedTexSubImage3D</item>\n\t\t\t<item>glCompressedTextureSubImage1D</item>\n\t\t\t<item>glCompressedTextureSubImage2D</item>\n\t\t\t<item>glCompressedTextureSubImage3D</item>\n\t\t\t<item>glCopyBufferSubData</item>\n\t\t\t<item>glCopyImageSubData</item>\n\t\t\t<item>glCopyNamedBufferSubData</item>\n\t\t\t<item>glCopyTexImage1D</item>\n\t\t\t<item>glCopyTexImage2D</item>\n\t\t\t<item>glCopyTexSubImage1D</item>\n\t\t\t<item>glCopyTexSubImage2D</item>\n\t\t\t<item>glCopyTexSubImage3D</item>\n\t\t\t<item>glCopyTextureSubImage1D</item>\n\t\t\t<item>glCopyTextureSubImage2D</item>\n\t\t\t<item>glCopyTextureSubImage3D</item>\n\t\t\t<item>cos</item>\n\t\t\t<item>cosh</item>\n\t\t\t<item>glCreateBuffers</item>\n\t\t\t<item>glCreateFramebuffers</item>\n\t\t\t<item>glCreateProgram</item>\n\t\t\t<item>glCreateProgramPipelines</item>\n\t\t\t<item>glCreateQueries</item>\n\t\t\t<item>glCreateRenderbuffers</item>\n\t\t\t<item>glCreateSamplers</item>\n\t\t\t<item>glCreateShader</item>\n\t\t\t<item>glCreateShaderProgram</item>\n\t\t\t<item>glCreateShaderProgramv</item>\n\t\t\t<item>glCreateTextures</item>\n\t\t\t<item>glCreateTransformFeedbacks</item>\n\t\t\t<item>glCreateVertexArrays</item>\n\t\t\t<item>cross</item>\n\t\t\t<item>glCullFace</item>\n\t\t\t<item>glDebugMessageCallback</item>\n\t\t\t<item>glDebugMessageControl</item>\n\t\t\t<item>glDebugMessageInsert</item>\n\t\t\t<item>degrees</item>\n\t\t\t<item>glDeleteBuffers</item>\n\t\t\t<item>glDeleteFramebuffers</item>\n\t\t\t<item>glDeleteProgram</item>\n\t\t\t<item>glDeleteProgramPipelines</item>\n\t\t\t<item>glDeleteQueries</item>\n\t\t\t<item>glDeleteRenderbuffers</item>\n\t\t\t<item>glDeleteSamplers</item>\n\t\t\t<item>glDeleteShader</item>\n\t\t\t<item>glDeleteSync</item>\n\t\t\t<item>glDeleteTextures</item>\n\t\t\t<item>glDeleteTransformFeedbacks</item>\n\t\t\t<item>glDeleteVertexArrays</item>\n\t\t\t<item>glDepthFunc</item>\n\t\t\t<item>glDepthMask</item>\n\t\t\t<item>glDepthRange</item>\n\t\t\t<item>glDepthRangeArray</item>\n\t\t\t<item>glDepthRangeArrayv</item>\n\t\t\t<item>glDepthRangef</item>\n\t\t\t<item>glDepthRangeIndexed</item>\n\t\t\t<item>glDetachShader</item>\n\t\t\t<item>determinant</item>\n\t\t\t<item>dFdx</item>\n\t\t\t<item>dFdxCoarse</item>\n\t\t\t<item>dFdxFine</item>\n\t\t\t<item>dFdy</item>\n\t\t\t<item>dFdyCoarse</item>\n\t\t\t<item>dFdyFine</item>\n\t\t\t<item>glDisable</item>\n\t\t\t<item>glDisablei</item>\n\t\t\t<item>glDisableVertexArrayAttrib</item>\n\t\t\t<item>glDisableVertexAttribArray</item>\n\t\t\t<item>glDispatchCompute</item>\n\t\t\t<item>glDispatchComputeIndirect</item>\n\t\t\t<item>distance</item>\n\t\t\t<item>dot</item>\n\t\t\t<item>glDrawArrays</item>\n\t\t\t<item>glDrawArraysIndirect</item>\n\t\t\t<item>glDrawArraysInstanced</item>\n\t\t\t<item>glDrawArraysInstancedBaseInstance</item>\n\t\t\t<item>glDrawBuffer</item>\n\t\t\t<item>glDrawBuffers</item>\n\t\t\t<item>glDrawElements</item>\n\t\t\t<item>glDrawElementsBaseVertex</item>\n\t\t\t<item>glDrawElementsIndirect</item>\n\t\t\t<item>glDrawElementsInstanced</item>\n\t\t\t<item>glDrawElementsInstancedBaseInstance</item>\n\t\t\t<item>glDrawElementsInstancedBaseVertex</item>\n\t\t\t<item>glDrawElementsInstancedBaseVertexBaseInstance</item>\n\t\t\t<item>glDrawRangeElements</item>\n\t\t\t<item>glDrawRangeElementsBaseVertex</item>\n\t\t\t<item>glDrawTransformFeedback</item>\n\t\t\t<item>glDrawTransformFeedbackInstanced</item>\n\t\t\t<item>glDrawTransformFeedbackStream</item>\n\t\t\t<item>glDrawTransformFeedbackStreamInstanced</item>\n\t\t\t<item>EmitStreamVertex</item>\n\t\t\t<item>EmitVertex</item>\n\t\t\t<item>glEnable</item>\n\t\t\t<item>glEnablei</item>\n\t\t\t<item>glEnableVertexArrayAttrib</item>\n\t\t\t<item>glEnableVertexAttribArray</item>\n\t\t\t<item>glEndConditionalRender</item>\n\t\t\t<item>EndPrimitive</item>\n\t\t\t<item>glEndQuery</item>\n\t\t\t<item>glEndQueryIndexed</item>\n\t\t\t<item>EndStreamPrimitive</item>\n\t\t\t<item>glEndTransformFeedback</item>\n\t\t\t<item>equal</item>\n\t\t\t<item>exp</item>\n\t\t\t<item>exp2</item>\n\t\t\t<item>faceforward</item>\n\t\t\t<item>glFenceSync</item>\n\t\t\t<item>findLSB</item>\n\t\t\t<item>findMSB</item>\n\t\t\t<item>glFinish</item>\n\t\t\t<item>floatBitsToInt</item>\n\t\t\t<item>floatBitsToUint</item>\n\t\t\t<item>floor</item>\n\t\t\t<item>glFlush</item>\n\t\t\t<item>glFlushMappedBufferRange</item>\n\t\t\t<item>glFlushMappedNamedBufferRange</item>\n\t\t\t<item>fma</item>\n\t\t\t<item>fract</item>\n\t\t\t<item>glFramebufferParameteri</item>\n\t\t\t<item>glFramebufferRenderbuffer</item>\n\t\t\t<item>glFramebufferTexture</item>\n\t\t\t<item>glFramebufferTexture1D</item>\n\t\t\t<item>glFramebufferTexture2D</item>\n\t\t\t<item>glFramebufferTexture3D</item>\n\t\t\t<item>glFramebufferTextureLayer</item>\n\t\t\t<item>frexp</item>\n\t\t\t<item>glFrontFace</item>\n\t\t\t<item>fwidth</item>\n\t\t\t<item>fwidthCoarse</item>\n\t\t\t<item>fwidthFine</item>\n\t\t\t<item>glGenBuffers</item>\n\t\t\t<item>glGenerateMipmap</item>\n\t\t\t<item>glGenerateTextureMipmap</item>\n\t\t\t<item>glGenFramebuffers</item>\n\t\t\t<item>glGenProgramPipelines</item>\n\t\t\t<item>glGenQueries</item>\n\t\t\t<item>glGenRenderbuffers</item>\n\t\t\t<item>glGenSamplers</item>\n\t\t\t<item>glGenTextures</item>\n\t\t\t<item>glGenTransformFeedbacks</item>\n\t\t\t<item>glGenVertexArrays</item>\n\t\t\t<item>glGet</item>\n\t\t\t<item>glGetActiveAtomicCounterBufferiv</item>\n\t\t\t<item>glGetActiveAttrib</item>\n\t\t\t<item>glGetActiveSubroutineName</item>\n\t\t\t<item>glGetActiveSubroutineUniform</item>\n\t\t\t<item>glGetActiveSubroutineUniformiv</item>\n\t\t\t<item>glGetActiveSubroutineUniformName</item>\n\t\t\t<item>glGetActiveUniform</item>\n\t\t\t<item>glGetActiveUniformBlock</item>\n\t\t\t<item>glGetActiveUniformBlockiv</item>\n\t\t\t<item>glGetActiveUniformBlockName</item>\n\t\t\t<item>glGetActiveUniformName</item>\n\t\t\t<item>glGetActiveUniformsiv</item>\n\t\t\t<item>glGetAttachedShaders</item>\n\t\t\t<item>glGetAttribLocation</item>\n\t\t\t<item>glGetBooleani_v</item>\n\t\t\t<item>glGetBooleanv</item>\n\t\t\t<item>glGetBufferParameter</item>\n\t\t\t<item>glGetBufferParameteri64v</item>\n\t\t\t<item>glGetBufferParameteriv</item>\n\t\t\t<item>glGetBufferPointerv</item>\n\t\t\t<item>glGetBufferSubData</item>\n\t\t\t<item>glGetCompressedTexImage</item>\n\t\t\t<item>glGetCompressedTextureImage</item>\n\t\t\t<item>glGetCompressedTextureSubImage</item>\n\t\t\t<item>glGetDebugMessageLog</item>\n\t\t\t<item>glGetDoublei_v</item>\n\t\t\t<item>glGetDoublev</item>\n\t\t\t<item>glGetError</item>\n\t\t\t<item>glGetFloati_v</item>\n\t\t\t<item>glGetFloatv</item>\n\t\t\t<item>glGetFragDataIndex</item>\n\t\t\t<item>glGetFragDataLocation</item>\n\t\t\t<item>glGetFramebufferAttachmentParameter</item>\n\t\t\t<item>glGetFramebufferAttachmentParameteriv</item>\n\t\t\t<item>glGetFramebufferParameter</item>\n\t\t\t<item>glGetFramebufferParameteriv</item>\n\t\t\t<item>glGetGraphicsResetStatus</item>\n\t\t\t<item>glGetInteger64i_v</item>\n\t\t\t<item>glGetInteger64v</item>\n\t\t\t<item>glGetIntegeri_v</item>\n\t\t\t<item>glGetIntegerv</item>\n\t\t\t<item>glGetInternalformat</item>\n\t\t\t<item>glGetInternalformati64v</item>\n\t\t\t<item>glGetInternalformativ</item>\n\t\t\t<item>glGetMultisample</item>\n\t\t\t<item>glGetMultisamplefv</item>\n\t\t\t<item>glGetNamedBufferParameteri64v</item>\n\t\t\t<item>glGetNamedBufferParameteriv</item>\n\t\t\t<item>glGetNamedBufferPointerv</item>\n\t\t\t<item>glGetNamedBufferSubData</item>\n\t\t\t<item>glGetNamedFramebufferAttachmentParameteriv</item>\n\t\t\t<item>glGetNamedFramebufferParameteriv</item>\n\t\t\t<item>glGetNamedRenderbufferParameteriv</item>\n\t\t\t<item>glGetnCompressedTexImage</item>\n\t\t\t<item>glGetnTexImage</item>\n\t\t\t<item>glGetnUniformdv</item>\n\t\t\t<item>glGetnUniformfv</item>\n\t\t\t<item>glGetnUniformiv</item>\n\t\t\t<item>glGetnUniformuiv</item>\n\t\t\t<item>glGetObjectLabel</item>\n\t\t\t<item>glGetObjectPtrLabel</item>\n\t\t\t<item>glGetPointerv</item>\n\t\t\t<item>glGetProgram</item>\n\t\t\t<item>glGetProgramBinary</item>\n\t\t\t<item>glGetProgramInfoLog</item>\n\t\t\t<item>glGetProgramInterface</item>\n\t\t\t<item>glGetProgramInterfaceiv</item>\n\t\t\t<item>glGetProgramiv</item>\n\t\t\t<item>glGetProgramPipeline</item>\n\t\t\t<item>glGetProgramPipelineInfoLog</item>\n\t\t\t<item>glGetProgramPipelineiv</item>\n\t\t\t<item>glGetProgramResource</item>\n\t\t\t<item>glGetProgramResourceIndex</item>\n\t\t\t<item>glGetProgramResourceiv</item>\n\t\t\t<item>glGetProgramResourceLocation</item>\n\t\t\t<item>glGetProgramResourceLocationIndex</item>\n\t\t\t<item>glGetProgramResourceName</item>\n\t\t\t<item>glGetProgramStage</item>\n\t\t\t<item>glGetProgramStageiv</item>\n\t\t\t<item>glGetQueryIndexed</item>\n\t\t\t<item>glGetQueryIndexediv</item>\n\t\t\t<item>glGetQueryiv</item>\n\t\t\t<item>glGetQueryObject</item>\n\t\t\t<item>glGetQueryObjecti64v</item>\n\t\t\t<item>glGetQueryObjectiv</item>\n\t\t\t<item>glGetQueryObjectui64v</item>\n\t\t\t<item>glGetQueryObjectuiv</item>\n\t\t\t<item>glGetRenderbufferParameter</item>\n\t\t\t<item>glGetRenderbufferParameteriv</item>\n\t\t\t<item>glGetSamplerParameter</item>\n\t\t\t<item>glGetSamplerParameterfv</item>\n\t\t\t<item>glGetSamplerParameterIiv</item>\n\t\t\t<item>glGetSamplerParameterIuiv</item>\n\t\t\t<item>glGetSamplerParameteriv</item>\n\t\t\t<item>glGetShader</item>\n\t\t\t<item>glGetShaderInfoLog</item>\n\t\t\t<item>glGetShaderiv</item>\n\t\t\t<item>glGetShaderPrecisionFormat</item>\n\t\t\t<item>glGetShaderSource</item>\n\t\t\t<item>glGetString</item>\n\t\t\t<item>glGetStringi</item>\n\t\t\t<item>glGetSubroutineIndex</item>\n\t\t\t<item>glGetSubroutineUniformLocation</item>\n\t\t\t<item>glGetSync</item>\n\t\t\t<item>glGetSynciv</item>\n\t\t\t<item>glGetTexImage</item>\n\t\t\t<item>glGetTexLevelParameter</item>\n\t\t\t<item>glGetTexLevelParameterfv</item>\n\t\t\t<item>glGetTexLevelParameteriv</item>\n\t\t\t<item>glGetTexParameter</item>\n\t\t\t<item>glGetTexParameterfv</item>\n\t\t\t<item>glGetTexParameterIiv</item>\n\t\t\t<item>glGetTexParameterIuiv</item>\n\t\t\t<item>glGetTexParameteriv</item>\n\t\t\t<item>glGetTextureImage</item>\n\t\t\t<item>glGetTextureLevelParameterfv</item>\n\t\t\t<item>glGetTextureLevelParameteriv</item>\n\t\t\t<item>glGetTextureParameterfv</item>\n\t\t\t<item>glGetTextureParameterIiv</item>\n\t\t\t<item>glGetTextureParameterIuiv</item>\n\t\t\t<item>glGetTextureParameteriv</item>\n\t\t\t<item>glGetTextureSubImage</item>\n\t\t\t<item>glGetTransformFeedback</item>\n\t\t\t<item>glGetTransformFeedbacki64_v</item>\n\t\t\t<item>glGetTransformFeedbacki_v</item>\n\t\t\t<item>glGetTransformFeedbackiv</item>\n\t\t\t<item>glGetTransformFeedbackVarying</item>\n\t\t\t<item>glGetUniform</item>\n\t\t\t<item>glGetUniformBlockIndex</item>\n\t\t\t<item>glGetUniformdv</item>\n\t\t\t<item>glGetUniformfv</item>\n\t\t\t<item>glGetUniformIndices</item>\n\t\t\t<item>glGetUniformiv</item>\n\t\t\t<item>glGetUniformLocation</item>\n\t\t\t<item>glGetUniformSubroutine</item>\n\t\t\t<item>glGetUniformSubroutineuiv</item>\n\t\t\t<item>glGetUniformuiv</item>\n\t\t\t<item>glGetVertexArrayIndexed</item>\n\t\t\t<item>glGetVertexArrayIndexed64iv</item>\n\t\t\t<item>glGetVertexArrayIndexediv</item>\n\t\t\t<item>glGetVertexArrayiv</item>\n\t\t\t<item>glGetVertexAttrib</item>\n\t\t\t<item>glGetVertexAttribdv</item>\n\t\t\t<item>glGetVertexAttribfv</item>\n\t\t\t<item>glGetVertexAttribIiv</item>\n\t\t\t<item>glGetVertexAttribIuiv</item>\n\t\t\t<item>glGetVertexAttribiv</item>\n\t\t\t<item>glGetVertexAttribLdv</item>\n\t\t\t<item>glGetVertexAttribPointerv</item>\n\t\t\t<item>gl_ClipDistance</item>\n\t\t\t<item>gl_CullDistance</item>\n\t\t\t<item>gl_FragCoord</item>\n\t\t\t<item>gl_FragDepth</item>\n\t\t\t<item>gl_FrontFacing</item>\n\t\t\t<item>gl_GlobalInvocationID</item>\n\t\t\t<item>gl_HelperInvocation</item>\n\t\t\t<item>gl_InstanceID</item>\n\t\t\t<item>gl_InvocationID</item>\n\t\t\t<item>gl_Layer</item>\n\t\t\t<item>gl_LocalInvocationID</item>\n\t\t\t<item>gl_LocalInvocationIndex</item>\n\t\t\t<item>gl_NumSamples</item>\n\t\t\t<item>gl_NumWorkGroups</item>\n\t\t\t<item>gl_PatchVerticesIn</item>\n\t\t\t<item>gl_PointCoord</item>\n\t\t\t<item>gl_PointSize</item>\n\t\t\t<item>gl_Position</item>\n\t\t\t<item>gl_PrimitiveID</item>\n\t\t\t<item>gl_PrimitiveIDIn</item>\n\t\t\t<item>gl_SampleID</item>\n\t\t\t<item>gl_SampleMask</item>\n\t\t\t<item>gl_SampleMaskIn</item>\n\t\t\t<item>gl_SamplePosition</item>\n\t\t\t<item>gl_TessCoord</item>\n\t\t\t<item>gl_TessLevelInner</item>\n\t\t\t<item>gl_TessLevelOuter</item>\n\t\t\t<item>gl_VertexID</item>\n\t\t\t<item>gl_ViewportIndex</item>\n\t\t\t<item>gl_WorkGroupID</item>\n\t\t\t<item>gl_WorkGroupSize</item>\n\t\t\t<item>greaterThan</item>\n\t\t\t<item>greaterThanEqual</item>\n\t\t\t<item>groupMemoryBarrier</item>\n\t\t\t<item>glHint</item>\n\t\t\t<item>imageAtomicAdd</item>\n\t\t\t<item>imageAtomicAnd</item>\n\t\t\t<item>imageAtomicCompSwap</item>\n\t\t\t<item>imageAtomicExchange</item>\n\t\t\t<item>imageAtomicMax</item>\n\t\t\t<item>imageAtomicMin</item>\n\t\t\t<item>imageAtomicOr</item>\n\t\t\t<item>imageAtomicXor</item>\n\t\t\t<item>imageLoad</item>\n\t\t\t<item>imageSamples</item>\n\t\t\t<item>imageSize</item>\n\t\t\t<item>imageStore</item>\n\t\t\t<item>imulExtended</item>\n\t\t\t<item>intBitsToFloat</item>\n\t\t\t<item>interpolateAtCentroid</item>\n\t\t\t<item>interpolateAtOffset</item>\n\t\t\t<item>interpolateAtSample</item>\n\t\t\t<item>glInvalidateBufferData</item>\n\t\t\t<item>glInvalidateBufferSubData</item>\n\t\t\t<item>glInvalidateFramebuffer</item>\n\t\t\t<item>glInvalidateNamedFramebufferData</item>\n\t\t\t<item>glInvalidateNamedFramebufferSubData</item>\n\t\t\t<item>glInvalidateSubFramebuffer</item>\n\t\t\t<item>glInvalidateTexImage</item>\n\t\t\t<item>glInvalidateTexSubImage</item>\n\t\t\t<item>inverse</item>\n\t\t\t<item>inversesqrt</item>\n\t\t\t<item>glIsBuffer</item>\n\t\t\t<item>glIsEnabled</item>\n\t\t\t<item>glIsEnabledi</item>\n\t\t\t<item>glIsFramebuffer</item>\n\t\t\t<item>isinf</item>\n\t\t\t<item>isnan</item>\n\t\t\t<item>glIsProgram</item>\n\t\t\t<item>glIsProgramPipeline</item>\n\t\t\t<item>glIsQuery</item>\n\t\t\t<item>glIsRenderbuffer</item>\n\t\t\t<item>glIsSampler</item>\n\t\t\t<item>glIsShader</item>\n\t\t\t<item>glIsSync</item>\n\t\t\t<item>glIsTexture</item>\n\t\t\t<item>glIsTransformFeedback</item>\n\t\t\t<item>glIsVertexArray</item>\n\t\t\t<item>ldexp</item>\n\t\t\t<item>length</item>\n\t\t\t<item>lessThan</item>\n\t\t\t<item>lessThanEqual</item>\n\t\t\t<item>glLineWidth</item>\n\t\t\t<item>glLinkProgram</item>\n\t\t\t<item>log</item>\n\t\t\t<item>log2</item>\n\t\t\t<item>glLogicOp</item>\n\t\t\t<item>glMapBuffer</item>\n\t\t\t<item>glMapBufferRange</item>\n\t\t\t<item>glMapNamedBuffer</item>\n\t\t\t<item>glMapNamedBufferRange</item>\n\t\t\t<item>matrixCompMult</item>\n\t\t\t<item>max</item>\n\t\t\t<item>memoryBarrier</item>\n\t\t\t<item>glMemoryBarrier</item>\n\t\t\t<item>memoryBarrierAtomicCounter</item>\n\t\t\t<item>memoryBarrierBuffer</item>\n\t\t\t<item>glMemoryBarrierByRegion</item>\n\t\t\t<item>memoryBarrierImage</item>\n\t\t\t<item>memoryBarrierShared</item>\n\t\t\t<item>min</item>\n\t\t\t<item>glMinSampleShading</item>\n\t\t\t<item>mix</item>\n\t\t\t<item>mod</item>\n\t\t\t<item>modf</item>\n\t\t\t<item>glMultiDrawArrays</item>\n\t\t\t<item>glMultiDrawArraysIndirect</item>\n\t\t\t<item>glMultiDrawElements</item>\n\t\t\t<item>glMultiDrawElementsBaseVertex</item>\n\t\t\t<item>glMultiDrawElementsIndirect</item>\n\t\t\t<item>glNamedBufferData</item>\n\t\t\t<item>glNamedBufferStorage</item>\n\t\t\t<item>glNamedBufferSubData</item>\n\t\t\t<item>glNamedFramebufferDrawBuffer</item>\n\t\t\t<item>glNamedFramebufferDrawBuffers</item>\n\t\t\t<item>glNamedFramebufferParameteri</item>\n\t\t\t<item>glNamedFramebufferReadBuffer</item>\n\t\t\t<item>glNamedFramebufferRenderbuffer</item>\n\t\t\t<item>glNamedFramebufferTexture</item>\n\t\t\t<item>glNamedFramebufferTextureLayer</item>\n\t\t\t<item>glNamedRenderbufferStorage</item>\n\t\t\t<item>glNamedRenderbufferStorageMultisample</item>\n\t\t\t<item>noise</item>\n\t\t\t<item>noise1</item>\n\t\t\t<item>noise2</item>\n\t\t\t<item>noise3</item>\n\t\t\t<item>noise4</item>\n\t\t\t<item>normalize</item>\n\t\t\t<item>not</item>\n\t\t\t<item>notEqual</item>\n\t\t\t<item>glObjectLabel</item>\n\t\t\t<item>glObjectPtrLabel</item>\n\t\t\t<item>outerProduct</item>\n\t\t\t<item>packDouble2x32</item>\n\t\t\t<item>packHalf2x16</item>\n\t\t\t<item>packSnorm2x16</item>\n\t\t\t<item>packSnorm4x8</item>\n\t\t\t<item>packUnorm</item>\n\t\t\t<item>packUnorm2x16</item>\n\t\t\t<item>packUnorm4x8</item>\n\t\t\t<item>glPatchParameter</item>\n\t\t\t<item>glPatchParameterfv</item>\n\t\t\t<item>glPatchParameteri</item>\n\t\t\t<item>glPauseTransformFeedback</item>\n\t\t\t<item>glPixelStore</item>\n\t\t\t<item>glPixelStoref</item>\n\t\t\t<item>glPixelStorei</item>\n\t\t\t<item>glPointParameter</item>\n\t\t\t<item>glPointParameterf</item>\n\t\t\t<item>glPointParameterfv</item>\n\t\t\t<item>glPointParameteri</item>\n\t\t\t<item>glPointParameteriv</item>\n\t\t\t<item>glPointSize</item>\n\t\t\t<item>glPolygonMode</item>\n\t\t\t<item>glPolygonOffset</item>\n\t\t\t<item>glPopDebugGroup</item>\n\t\t\t<item>pow</item>\n\t\t\t<item>glPrimitiveRestartIndex</item>\n\t\t\t<item>glProgramBinary</item>\n\t\t\t<item>glProgramParameter</item>\n\t\t\t<item>glProgramParameteri</item>\n\t\t\t<item>glProgramUniform</item>\n\t\t\t<item>glProgramUniform1f</item>\n\t\t\t<item>glProgramUniform1fv</item>\n\t\t\t<item>glProgramUniform1i</item>\n\t\t\t<item>glProgramUniform1iv</item>\n\t\t\t<item>glProgramUniform1ui</item>\n\t\t\t<item>glProgramUniform1uiv</item>\n\t\t\t<item>glProgramUniform2f</item>\n\t\t\t<item>glProgramUniform2fv</item>\n\t\t\t<item>glProgramUniform2i</item>\n\t\t\t<item>glProgramUniform2iv</item>\n\t\t\t<item>glProgramUniform2ui</item>\n\t\t\t<item>glProgramUniform2uiv</item>\n\t\t\t<item>glProgramUniform3f</item>\n\t\t\t<item>glProgramUniform3fv</item>\n\t\t\t<item>glProgramUniform3i</item>\n\t\t\t<item>glProgramUniform3iv</item>\n\t\t\t<item>glProgramUniform3ui</item>\n\t\t\t<item>glProgramUniform3uiv</item>\n\t\t\t<item>glProgramUniform4f</item>\n\t\t\t<item>glProgramUniform4fv</item>\n\t\t\t<item>glProgramUniform4i</item>\n\t\t\t<item>glProgramUniform4iv</item>\n\t\t\t<item>glProgramUniform4ui</item>\n\t\t\t<item>glProgramUniform4uiv</item>\n\t\t\t<item>glProgramUniformMatrix2fv</item>\n\t\t\t<item>glProgramUniformMatrix2x3fv</item>\n\t\t\t<item>glProgramUniformMatrix2x4fv</item>\n\t\t\t<item>glProgramUniformMatrix3fv</item>\n\t\t\t<item>glProgramUniformMatrix3x2fv</item>\n\t\t\t<item>glProgramUniformMatrix3x4fv</item>\n\t\t\t<item>glProgramUniformMatrix4fv</item>\n\t\t\t<item>glProgramUniformMatrix4x2fv</item>\n\t\t\t<item>glProgramUniformMatrix4x3fv</item>\n\t\t\t<item>glProvokingVertex</item>\n\t\t\t<item>glPushDebugGroup</item>\n\t\t\t<item>glQueryCounter</item>\n\t\t\t<item>radians</item>\n\t\t\t<item>glReadBuffer</item>\n\t\t\t<item>glReadnPixels</item>\n\t\t\t<item>glReadPixels</item>\n\t\t\t<item>reflect</item>\n\t\t\t<item>refract</item>\n\t\t\t<item>glReleaseShaderCompiler</item>\n\t\t\t<item>removedTypes</item>\n\t\t\t<item>glRenderbufferStorage</item>\n\t\t\t<item>glRenderbufferStorageMultisample</item>\n\t\t\t<item>glResumeTransformFeedback</item>\n\t\t\t<item>round</item>\n\t\t\t<item>roundEven</item>\n\t\t\t<item>glSampleCoverage</item>\n\t\t\t<item>glSampleMaski</item>\n\t\t\t<item>glSamplerParameter</item>\n\t\t\t<item>glSamplerParameterf</item>\n\t\t\t<item>glSamplerParameterfv</item>\n\t\t\t<item>glSamplerParameteri</item>\n\t\t\t<item>glSamplerParameterIiv</item>\n\t\t\t<item>glSamplerParameterIuiv</item>\n\t\t\t<item>glSamplerParameteriv</item>\n\t\t\t<item>glScissor</item>\n\t\t\t<item>glScissorArray</item>\n\t\t\t<item>glScissorArrayv</item>\n\t\t\t<item>glScissorIndexed</item>\n\t\t\t<item>glScissorIndexedv</item>\n\t\t\t<item>glShaderBinary</item>\n\t\t\t<item>glShaderSource</item>\n\t\t\t<item>glShaderStorageBlockBinding</item>\n\t\t\t<item>sign</item>\n\t\t\t<item>sin</item>\n\t\t\t<item>sinh</item>\n\t\t\t<item>smoothstep</item>\n\t\t\t<item>sqrt</item>\n\t\t\t<item>glStencilFunc</item>\n\t\t\t<item>glStencilFuncSeparate</item>\n\t\t\t<item>glStencilMask</item>\n\t\t\t<item>glStencilMaskSeparate</item>\n\t\t\t<item>glStencilOp</item>\n\t\t\t<item>glStencilOpSeparate</item>\n\t\t\t<item>step</item>\n\t\t\t<item>tan</item>\n\t\t\t<item>tanh</item>\n\t\t\t<item>glTexBuffer</item>\n\t\t\t<item>glTexBufferRange</item>\n\t\t\t<item>texelFetch</item>\n\t\t\t<item>texelFetchOffset</item>\n\t\t\t<item>glTexImage1D</item>\n\t\t\t<item>glTexImage2D</item>\n\t\t\t<item>glTexImage2DMultisample</item>\n\t\t\t<item>glTexImage3D</item>\n\t\t\t<item>glTexImage3DMultisample</item>\n\t\t\t<item>glTexParameter</item>\n\t\t\t<item>glTexParameterf</item>\n\t\t\t<item>glTexParameterfv</item>\n\t\t\t<item>glTexParameteri</item>\n\t\t\t<item>glTexParameterIiv</item>\n\t\t\t<item>glTexParameterIuiv</item>\n\t\t\t<item>glTexParameteriv</item>\n\t\t\t<item>glTexStorage1D</item>\n\t\t\t<item>glTexStorage2D</item>\n\t\t\t<item>glTexStorage2DMultisample</item>\n\t\t\t<item>glTexStorage3D</item>\n\t\t\t<item>glTexStorage3DMultisample</item>\n\t\t\t<item>glTexSubImage1D</item>\n\t\t\t<item>glTexSubImage2D</item>\n\t\t\t<item>glTexSubImage3D</item>\n\t\t\t<item>texture</item>\n\t\t\t<item>glTextureBarrier</item>\n\t\t\t<item>glTextureBuffer</item>\n\t\t\t<item>glTextureBufferRange</item>\n\t\t\t<item>textureGather</item>\n\t\t\t<item>textureGatherOffset</item>\n\t\t\t<item>textureGatherOffsets</item>\n\t\t\t<item>textureGrad</item>\n\t\t\t<item>textureGradOffset</item>\n\t\t\t<item>textureLod</item>\n\t\t\t<item>textureLodOffset</item>\n\t\t\t<item>textureOffset</item>\n\t\t\t<item>glTextureParameterf</item>\n\t\t\t<item>glTextureParameterfv</item>\n\t\t\t<item>glTextureParameteri</item>\n\t\t\t<item>glTextureParameterIiv</item>\n\t\t\t<item>glTextureParameterIuiv</item>\n\t\t\t<item>glTextureParameteriv</item>\n\t\t\t<item>textureProj</item>\n\t\t\t<item>textureProjGrad</item>\n\t\t\t<item>textureProjGradOffset</item>\n\t\t\t<item>textureProjLod</item>\n\t\t\t<item>textureProjLodOffset</item>\n\t\t\t<item>textureProjOffset</item>\n\t\t\t<item>textureQueryLevels</item>\n\t\t\t<item>textureQueryLod</item>\n\t\t\t<item>textureSamples</item>\n\t\t\t<item>textureSize</item>\n\t\t\t<item>glTextureStorage1D</item>\n\t\t\t<item>glTextureStorage2D</item>\n\t\t\t<item>glTextureStorage2DMultisample</item>\n\t\t\t<item>glTextureStorage3D</item>\n\t\t\t<item>glTextureStorage3DMultisample</item>\n\t\t\t<item>glTextureSubImage1D</item>\n\t\t\t<item>glTextureSubImage2D</item>\n\t\t\t<item>glTextureSubImage3D</item>\n\t\t\t<item>glTextureView</item>\n\t\t\t<item>glTransformFeedbackBufferBase</item>\n\t\t\t<item>glTransformFeedbackBufferRange</item>\n\t\t\t<item>glTransformFeedbackVaryings</item>\n\t\t\t<item>transpose</item>\n\t\t\t<item>trunc</item>\n\t\t\t<item>uaddCarry</item>\n\t\t\t<item>uintBitsToFloat</item>\n\t\t\t<item>umulExtended</item>\n\t\t\t<item>glUniform</item>\n\t\t\t<item>glUniform1f</item>\n\t\t\t<item>glUniform1fv</item>\n\t\t\t<item>glUniform1i</item>\n\t\t\t<item>glUniform1iv</item>\n\t\t\t<item>glUniform1ui</item>\n\t\t\t<item>glUniform1uiv</item>\n\t\t\t<item>glUniform2f</item>\n\t\t\t<item>glUniform2fv</item>\n\t\t\t<item>glUniform2i</item>\n\t\t\t<item>glUniform2iv</item>\n\t\t\t<item>glUniform2ui</item>\n\t\t\t<item>glUniform2uiv</item>\n\t\t\t<item>glUniform3f</item>\n\t\t\t<item>glUniform3fv</item>\n\t\t\t<item>glUniform3i</item>\n\t\t\t<item>glUniform3iv</item>\n\t\t\t<item>glUniform3ui</item>\n\t\t\t<item>glUniform3uiv</item>\n\t\t\t<item>glUniform4f</item>\n\t\t\t<item>glUniform4fv</item>\n\t\t\t<item>glUniform4i</item>\n\t\t\t<item>glUniform4iv</item>\n\t\t\t<item>glUniform4ui</item>\n\t\t\t<item>glUniform4uiv</item>\n\t\t\t<item>glUniformBlockBinding</item>\n\t\t\t<item>glUniformMatrix2fv</item>\n\t\t\t<item>glUniformMatrix2x3fv</item>\n\t\t\t<item>glUniformMatrix2x4fv</item>\n\t\t\t<item>glUniformMatrix3fv</item>\n\t\t\t<item>glUniformMatrix3x2fv</item>\n\t\t\t<item>glUniformMatrix3x4fv</item>\n\t\t\t<item>glUniformMatrix4fv</item>\n\t\t\t<item>glUniformMatrix4x2fv</item>\n\t\t\t<item>glUniformMatrix4x3fv</item>\n\t\t\t<item>glUniformSubroutines</item>\n\t\t\t<item>glUniformSubroutinesuiv</item>\n\t\t\t<item>glUnmapBuffer</item>\n\t\t\t<item>glUnmapNamedBuffer</item>\n\t\t\t<item>unpackDouble2x32</item>\n\t\t\t<item>unpackHalf2x16</item>\n\t\t\t<item>unpackSnorm2x16</item>\n\t\t\t<item>unpackSnorm4x8</item>\n\t\t\t<item>unpackUnorm</item>\n\t\t\t<item>unpackUnorm2x16</item>\n\t\t\t<item>unpackUnorm4x8</item>\n\t\t\t<item>glUseProgram</item>\n\t\t\t<item>glUseProgramStages</item>\n\t\t\t<item>usubBorrow</item>\n\t\t\t<item>glValidateProgram</item>\n\t\t\t<item>glValidateProgramPipeline</item>\n\t\t\t<item>glVertexArrayAttribBinding</item>\n\t\t\t<item>glVertexArrayAttribFormat</item>\n\t\t\t<item>glVertexArrayAttribIFormat</item>\n\t\t\t<item>glVertexArrayAttribLFormat</item>\n\t\t\t<item>glVertexArrayBindingDivisor</item>\n\t\t\t<item>glVertexArrayElementBuffer</item>\n\t\t\t<item>glVertexArrayVertexBuffer</item>\n\t\t\t<item>glVertexArrayVertexBuffers</item>\n\t\t\t<item>glVertexAttrib</item>\n\t\t\t<item>glVertexAttrib1d</item>\n\t\t\t<item>glVertexAttrib1dv</item>\n\t\t\t<item>glVertexAttrib1f</item>\n\t\t\t<item>glVertexAttrib1fv</item>\n\t\t\t<item>glVertexAttrib1s</item>\n\t\t\t<item>glVertexAttrib1sv</item>\n\t\t\t<item>glVertexAttrib2d</item>\n\t\t\t<item>glVertexAttrib2dv</item>\n\t\t\t<item>glVertexAttrib2f</item>\n\t\t\t<item>glVertexAttrib2fv</item>\n\t\t\t<item>glVertexAttrib2s</item>\n\t\t\t<item>glVertexAttrib2sv</item>\n\t\t\t<item>glVertexAttrib3d</item>\n\t\t\t<item>glVertexAttrib3dv</item>\n\t\t\t<item>glVertexAttrib3f</item>\n\t\t\t<item>glVertexAttrib3fv</item>\n\t\t\t<item>glVertexAttrib3s</item>\n\t\t\t<item>glVertexAttrib3sv</item>\n\t\t\t<item>glVertexAttrib4bv</item>\n\t\t\t<item>glVertexAttrib4d</item>\n\t\t\t<item>glVertexAttrib4dv</item>\n\t\t\t<item>glVertexAttrib4f</item>\n\t\t\t<item>glVertexAttrib4fv</item>\n\t\t\t<item>glVertexAttrib4iv</item>\n\t\t\t<item>glVertexAttrib4Nbv</item>\n\t\t\t<item>glVertexAttrib4Niv</item>\n\t\t\t<item>glVertexAttrib4Nsv</item>\n\t\t\t<item>glVertexAttrib4Nub</item>\n\t\t\t<item>glVertexAttrib4Nubv</item>\n\t\t\t<item>glVertexAttrib4Nuiv</item>\n\t\t\t<item>glVertexAttrib4Nusv</item>\n\t\t\t<item>glVertexAttrib4s</item>\n\t\t\t<item>glVertexAttrib4sv</item>\n\t\t\t<item>glVertexAttrib4ubv</item>\n\t\t\t<item>glVertexAttrib4uiv</item>\n\t\t\t<item>glVertexAttrib4usv</item>\n\t\t\t<item>glVertexAttribBinding</item>\n\t\t\t<item>glVertexAttribDivisor</item>\n\t\t\t<item>glVertexAttribFormat</item>\n\t\t\t<item>glVertexAttribI1i</item>\n\t\t\t<item>glVertexAttribI1iv</item>\n\t\t\t<item>glVertexAttribI1ui</item>\n\t\t\t<item>glVertexAttribI1uiv</item>\n\t\t\t<item>glVertexAttribI2i</item>\n\t\t\t<item>glVertexAttribI2iv</item>\n\t\t\t<item>glVertexAttribI2ui</item>\n\t\t\t<item>glVertexAttribI2uiv</item>\n\t\t\t<item>glVertexAttribI3i</item>\n\t\t\t<item>glVertexAttribI3iv</item>\n\t\t\t<item>glVertexAttribI3ui</item>\n\t\t\t<item>glVertexAttribI3uiv</item>\n\t\t\t<item>glVertexAttribI4bv</item>\n\t\t\t<item>glVertexAttribI4i</item>\n\t\t\t<item>glVertexAttribI4iv</item>\n\t\t\t<item>glVertexAttribI4sv</item>\n\t\t\t<item>glVertexAttribI4ubv</item>\n\t\t\t<item>glVertexAttribI4ui</item>\n\t\t\t<item>glVertexAttribI4uiv</item>\n\t\t\t<item>glVertexAttribI4usv</item>\n\t\t\t<item>glVertexAttribIFormat</item>\n\t\t\t<item>glVertexAttribIPointer</item>\n\t\t\t<item>glVertexAttribL1d</item>\n\t\t\t<item>glVertexAttribL1dv</item>\n\t\t\t<item>glVertexAttribL2d</item>\n\t\t\t<item>glVertexAttribL2dv</item>\n\t\t\t<item>glVertexAttribL3d</item>\n\t\t\t<item>glVertexAttribL3dv</item>\n\t\t\t<item>glVertexAttribL4d</item>\n\t\t\t<item>glVertexAttribL4dv</item>\n\t\t\t<item>glVertexAttribLFormat</item>\n\t\t\t<item>glVertexAttribLPointer</item>\n\t\t\t<item>glVertexAttribP1ui</item>\n\t\t\t<item>glVertexAttribP2ui</item>\n\t\t\t<item>glVertexAttribP3ui</item>\n\t\t\t<item>glVertexAttribP4ui</item>\n\t\t\t<item>glVertexAttribPointer</item>\n\t\t\t<item>glVertexBindingDivisor</item>\n\t\t\t<item>glViewport</item>\n\t\t\t<item>glViewportArray</item>\n\t\t\t<item>glViewportArrayv</item>\n\t\t\t<item>glViewportIndexed</item>\n\t\t\t<item>glViewportIndexedf</item>\n\t\t\t<item>glViewportIndexedfv</item>\n\t\t\t<item>glWaitSync</item>\n\t\t</list>\n\t\t<list name=\"stdvar\">\n\t\t\t<!-- Vertex Shader Special Variables -->\n\t\t\t<item>gl_Position</item>\n\t\t\t<item>gl_PointSize</item>\n\t\t\t<item>gl_ClipVertex</item>\n\n\t\t\t<!-- Fragment Shader Special Variables -->\n\t\t\t<item>gl_FragCoord</item>\n\t\t\t<item>gl_FragFacing</item>\n\t\t\t<item>gl_FragColor</item>\n\t\t\t<item>gl_FragData</item>\n\t\t\t<item>gl_FragDepth</item>\n\n\t\t\t<!-- Vertex Shader Built-in Attributes -->\n\t\t\t<item>gl_Color</item>\n\t\t\t<item>gl_SecondaryColor</item>\n\t\t\t<item>gl_Normal</item>\n\t\t\t<item>gl_Vertex</item>\n\t\t\t<item>gl_MultiTexCoord0</item>\n\t\t\t<item>gl_MultiTexCoord1</item>\n\t\t\t<item>gl_MultiTexCoord2</item>\n\t\t\t<item>gl_MultiTexCoord2</item>\n\t\t\t<item>gl_MultiTexCoord3</item>\n\t\t\t<item>gl_MultiTexCoord4</item>\n\t\t\t<item>gl_MultiTexCoord5</item>\n\t\t\t<item>gl_MultiTexCoord6</item>\n\t\t\t<item>gl_MultiTexCoord7</item>\n\t\t\t<item>gl_FogColor</item>\n\n\t\t\t<!-- Geometry Shader Built-in Attributes -->\n\t\t\t<item>gl_ClipDistance</item>\n\t\t\t<item>gl_PrimitiveIDIn</item>\n\t\t\t<item>gl_InvocationID</item>\n\t\t\t<item>gl_PrimitiveID</item>\n\t\t\t<item>gl_Layer</item>\n\t\t\t<item>gl_ViewportIndex</item>\n\n\t\t\t<!-- Tesselation Shader Built-In Attributes -->\n\t\t\t<item>gl_TessCoord</item>\n\t\t\t<item>gl_PatchVerticesIn</item>\n\t\t\t<item>gl_TessLevelOuter</item>\n\t\t\t<item>gl_TessLevelInner</item>\n\t\t\t<item>gl_MaxPatchVertices</item>\n\t\t\t<item>gl_in</item>\n\t\t\t<item>gl_out</item>\n\n\t\t\t<!-- Built-in Constants -->\n\t\t\t<item>gl_MaxLights</item>\n\t\t\t<item>gl_MaxClipPlanes</item>\n\t\t\t<item>gl_MaxTextureUnits</item>\n\t\t\t<item>gl_MaxTextureCoords</item>\n\t\t\t<item>gl_MaxVertexAttributes</item>\n\t\t\t<item>gl_MaxVertexUniformComponents</item>\n\t\t\t<item>gl_MaxVaryingFloats</item>\n\t\t\t<item>gl_MaxVertexTextureImageUnits</item>\n\t\t\t<item>gl_MaxCombinedTextureImageUnits</item>\n\t\t\t<item>gl_MaxTextureImageUnits</item>\n\t\t\t<item>gl_MaxFragmentUniformComponents</item>\n\t\t\t<item>gl_MaxDrawBuffers</item>\n\n\t\t\t<!-- Built-in Uniform State -->\n\t\t\t<item>gl_ModelViewMatrix</item>\n\t\t\t<item>gl_ProjectionMatrix</item>\n\t\t\t<item>gl_ModelViewProjectionMatrix</item>\n\t\t\t<item>gl_TextureMatrix</item>\n\t\t\t<item>gl_NormalMatrix</item>\n\t\t\t<item>gl_ModelViewMatrixInverse</item>\n\t\t\t<item>gl_ProjectionMatrixInverse</item>\n\t\t\t<item>gl_ModelViewProjectionMatrixInverse</item>\n\t\t\t<item>gl_TextureMatrixInverse</item>\n\t\t\t<item>gl_ModelViewMatrixTranspose</item>\n\t\t\t<item>gl_ProjectionMatrixTranspose</item>\n\t\t\t<item>gl_ModelViewProjectionMatrixTranspose</item>\n\t\t\t<item>gl_TextureMatrixTranspose</item>\n\t\t\t<item>gl_ModelViewMatrixInverseTranspose</item>\n\t\t\t<item>gl_ProjectionMatrixInverseTranspose</item>\n\t\t\t<item>gl_ModelViewProjectionMatrixInverseTranspose</item>\n\t\t\t<item>gl_TextureMatrixInverseTranspose</item>\n\t\t\t<item>gl_NormScale</item>\n\t\t\t<item>gl_DepthRangeParameters</item>\n\t\t\t<item>gl_DepthRange</item>\n\t\t\t<item>gl_ClipPlane</item>\n\t\t\t<item>gl_PointParameters</item>\n\t\t\t<item>gl_Point</item>\n\t\t\t<item>gl_MaterialParameters</item>\n\t\t\t<item>gl_FrontMaterial</item>\n\t\t\t<item>gl_BackMaterial</item>\n\t\t\t<item>gl_LightSourceParameters</item>\n\t\t\t<item>gl_LightSource</item>\n\t\t\t<item>gl_LightModelParameters</item>\n\t\t\t<item>gl_LightModel</item>\n\t\t\t<item>gl_LightModelProducts</item>\n\t\t\t<item>gl_FrontLightModelProduct</item>\n\t\t\t<item>gl_BackLightModelProduct</item>\n\t\t\t<item>gl_LightProducts</item>\n\t\t\t<item>gl_FrontLightProduct</item>\n\t\t\t<item>gl_BackLightProduct</item>\n\t\t\t<item>gl_TextureEnvColor</item>\n\t\t\t<item>gl_EyePlaneS</item>\n\t\t\t<item>gl_EyePlaneT</item>\n\t\t\t<item>gl_EyePlaneR</item>\n\t\t\t<item>gl_EyePlaneQ</item>\n\t\t\t<item>gl_ObjectPlaneS</item>\n\t\t\t<item>gl_ObjectPlaneT</item>\n\t\t\t<item>gl_ObjectPlaneR</item>\n\t\t\t<item>gl_ObjectPlaneQ</item>\n\t\t\t<item>gl_FogParameters</item>\n\t\t\t<item>gl_Fog</item>\n\n\t\t\t<!-- Varying Variables -->\n\t\t\t<item>gl_FrontColor</item>\n\t\t\t<item>gl_BackColor</item>\n\t\t\t<item>gl_FrontSecondaryColor</item>\n\t\t\t<item>gl_BackSecondaryColor</item>\n\t\t\t<item>gl_TexCoord</item>\n\t\t\t<item>gl_FogFragCoord</item>\n\t\t\t<item>gl_Color</item>\n\t\t\t<item>gl_SecondaryColor</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\" />\n\t\t\t\t<keyword attribute=\"Data Type\" String=\"types\" context=\"#stay\" />\n\t\t\t\t<keyword attribute=\"Type Qualifier\" String=\"typequal\" context=\"#stay\" />\n\t\t\t\t<keyword attribute=\"StdFunction\" String=\"stdlib\" context=\"#stay\" />\n\t\t\t\t<keyword attribute=\"StdVariable\" String=\"stdvar\" context=\"#stay\" />\n\t\t\t\t\n\t\t\t\t<Float attribute=\"Float\" context=\"#stay\" />\n\t\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Decimal\" context=\"#stay\" />\n\t\t\t\t\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\" firstNonSpace=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*[(])\" />\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\".+-/*%&lt;&gt;[]()^|&amp;~=!:;,?&#59;\" />\n\t\t\t</context>\n\t\t\t<context name=\"Member\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*)\" />\n\t\t\t</context>\n\t\t\t<context name=\"Commentar 1\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n\t\t\t</context>\n\t\t\t<context name=\"Commentar 2\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t\t<keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n\t\t\t</context>\n\t\t\t<context name=\"Preprocessor\" attribute=\"Preprocessor\" lineEndContext=\"#pop\">\n\t\t\t</context>\n\t        </contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Keyword\"        defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Function\"       defStyleNum=\"dsFunction\" bold=\"0\"/>\n\t\t\t<itemData name=\"StdFunction\"    defStyleNum=\"dsBuiltIn\" bold=\"1\"/>\n\t\t\t<itemData name=\"StdVariable\"    defStyleNum=\"dsVariable\" bold=\"0\"/>\n\t\t\t<itemData name=\"Data Type\"      defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Type Qualifier\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Decimal\"        defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Octal\"          defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Hex\"            defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Float\"          defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Symbol\"         defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Preprocessor\"   defStyleNum=\"dsPreprocessor\"/>\n\t\t\t<itemData name=\"Comment\"        defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Alert\"          defStyleNum=\"dsAlert\" />\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" />\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gnuassembler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\n*************************************************************************\n*                                                                       *\n*               Syntax highlighting for the GNU Assembler               *\n*                   Copyright (C) 2002, John Zaitseff                   *\n*                                                                       *\n*************************************************************************\n\nUpdated:  Miquel Sabaté <mikisabate@gmail.com>\nDate:     14th September, 2010\nVersion:  1.02\n\nUpdated:  Roland Pabel <roland@pabel.name>\nDate:     15th August, 2002\nVersion:  1.01\n\nAuthor:   John Zaitseff <J.Zaitseff@zap.org.au>\nDate:     15th April, 2002\nVersion:  1.0\n\nThis file contains the XML syntax highlighting description for the GNU\nAssembler, for KATE, the KDE Advanced Editor.  Keywords have been taken\ndirectly from the GNU Assembler source code (read.c).\n\nKnown problems: Floating point highlighting does not work correctly.\n\nThis program, including associated files, is free software.  You may\ndistribute it and/or modify it under the terms of the GNU General Public\nLicense as published by the Free Software Foundation; either Version 2 of\nthe license, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\nor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\nfor more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n-->\n\n<language name=\"GNU Assembler\" version=\"3\" kateversion=\"5.0\" section=\"Assembler\" extensions=\"*.s;*.S\" mimetype=\"text/x-asm\" author=\"John Zaitseff (J.Zaitseff@zap.org.au), Roland Pabel (roland@pabel.name), Miquel Sabaté (mikisabate@gmail.com)\" license=\"GPLv2+\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>.abort</item>\n      <item>.align</item>\n      <item>.app-file</item>\n      <item>.appline</item>\n      <item>.ascii</item>\n      <item>.asciz</item>\n      <item>.att_syntax</item>\n      <item>.balign</item>\n      <item>.balignl</item>\n      <item>.balignw</item>\n      <item>.byte</item>\n      <item>.code16</item>\n      <item>.code32</item>\n      <item>.comm</item>\n      <item>.common.s</item>\n      <item>.common</item>\n      <item>.data</item>\n      <item>.dc.b</item>\n      <item>.dc.d</item>\n      <item>.dc.l</item>\n      <item>.dc.s</item>\n      <item>.dc.w</item>\n      <item>.dc.x</item>\n      <item>.dc</item>\n      <item>.dcb.b</item>\n      <item>.dcb.d</item>\n      <item>.dcb.l</item>\n      <item>.dcb.s</item>\n      <item>.dcb.w</item>\n      <item>.dcb.x</item>\n      <item>.dcb</item>\n      <item>.debug</item>\n      <item>.def</item>\n      <item>.desc</item>\n      <item>.dim</item>\n      <item>.double</item>\n      <item>.ds.b</item>\n      <item>.ds.d</item>\n      <item>.ds.l</item>\n      <item>.ds.p</item>\n      <item>.ds.s</item>\n      <item>.ds.w</item>\n      <item>.ds.x</item>\n      <item>.ds</item>\n      <item>.dsect</item>\n      <item>.eject</item>\n      <item>.else</item>\n      <item>.elsec</item>\n      <item>.elseif</item>\n      <item>.end</item>\n      <item>.endc</item>\n      <item>.endef</item>\n      <item>.endfunc</item>\n      <item>.endif</item>\n      <item>.endm</item>\n      <item>.endr</item>\n      <item>.equ</item>\n      <item>.equiv</item>\n      <item>.err</item>\n      <item>.exitm</item>\n      <item>.extend</item>\n      <item>.extern</item>\n      <item>.fail</item>\n      <item>.file</item>\n      <item>.fill</item>\n      <item>.float</item>\n      <item>.format</item>\n      <item>.func</item>\n      <item>.global</item>\n      <item>.globl</item>\n      <item>.hidden</item>\n      <item>.hword</item>\n      <item>.ident</item>\n      <item>.if</item>\n      <item>.ifc</item>\n      <item>.ifdef</item>\n      <item>.ifeq</item>\n      <item>.ifeqs</item>\n      <item>.ifge</item>\n      <item>.ifgt</item>\n      <item>.ifle</item>\n      <item>.iflt</item>\n      <item>.ifnc</item>\n      <item>.ifndef</item>\n      <item>.ifne</item>\n      <item>.ifnes</item>\n      <item>.ifnotdef</item>\n      <item>.include</item>\n      <item>.int</item>\n      <item>.intel_syntax</item>\n      <item>.internal</item>\n      <item>.irep</item>\n      <item>.irepc</item>\n      <item>.irp</item>\n      <item>.irpc</item>\n      <item>.lcomm</item>\n      <item>.lflags</item>\n      <item>.line</item>\n      <item>.linkonce</item>\n      <item>.list</item>\n      <item>.llen</item>\n      <item>.ln</item>\n      <item>.long</item>\n      <item>.lsym</item>\n      <item>.macro</item>\n      <item>.mexit</item>\n      <item>.name</item>\n      <item>.noformat</item>\n      <item>.nolist</item>\n      <item>.nopage</item>\n      <item>noprefix</item>\n      <item>.octa</item>\n      <item>.offset</item>\n      <item>.org</item>\n      <item>.p2align</item>\n      <item>.p2alignl</item>\n      <item>.p2alignw</item>\n      <item>.page</item>\n      <item>.plen</item>\n      <item>.popsection</item>\n      <item>.previous</item>\n      <item>.print</item>\n      <item>.protected</item>\n      <item>.psize</item>\n      <item>.purgem</item>\n      <item>.pushsection</item>\n      <item>.quad</item>\n      <item>.rodata</item>\n      <item>.rep</item>\n      <item>.rept</item>\n      <item>.rva</item>\n      <item>.sbttl</item>\n      <item>.scl</item>\n      <item>.sect.s</item>\n      <item>.sect</item>\n      <item>.section.s</item>\n      <item>.section</item>\n      <item>.set</item>\n      <item>.short</item>\n      <item>.single</item>\n      <item>.size</item>\n      <item>.skip</item>\n      <item>.sleb128</item>\n      <item>.space</item>\n      <item>.spc</item>\n      <item>.stabd</item>\n      <item>.stabn</item>\n      <item>.stabs</item>\n      <item>.string</item>\n      <item>.struct</item>\n      <item>.subsection</item>\n      <item>.symver</item>\n      <item>.tag</item>\n      <item>.text</item>\n      <item>.title</item>\n      <item>.ttl</item>\n      <item>.type</item>\n      <item>.uleb128</item>\n      <item>.use</item>\n      <item>.val</item>\n      <item>.version</item>\n      <item>.vtable_entry</item>\n      <item>.vtable_inherit</item>\n      <item>.weak</item>\n      <item>.word</item>\n      <item>.xcom</item>\n      <item>.xdef</item>\n      <item>.xref</item>\n      <item>.xstabs</item>\n      <item>.zero</item>\n      <!-- Directives specific to ARM -->\n      <item>.arm</item>\n      <item>.bss</item>\n      <item>.code</item>\n      <item>.even</item>\n      <item>.force_thumb</item>\n      <item>.ldouble</item>\n      <item>.loc</item>\n      <item>.ltorg</item>\n      <item>.packed</item>\n      <item>.pool</item>\n      <item>.req</item>\n      <item>.thumb</item>\n      <item>.thumb_func</item>\n      <item>.thumb_set</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr      attribute=\"Label\" context=\"#stay\" String=\"[_\\w\\d-]*\\s*:\" />\n        <keyword      attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <HlCOct       attribute=\"Octal\" context=\"#stay\" />\n        <HlCHex       attribute=\"Hex\" context=\"#stay\" />\n        <RegExpr      attribute=\"Binary\" context=\"#stay\" String=\"0[bB][01]+\" />\n        <Int          attribute=\"Decimal\" context=\"#stay\" />\n        <RegExpr      attribute=\"Float\" context=\"#stay\" String=\"0[fFeEdD][-+]?[0-9]*\\.?[0-9]*[eE]?[-+]?[0-9]+\" />\n        <RegExpr      attribute=\"Normal Text\" context=\"#stay\" String=\"[A-Za-z_.$][A-Za-z0-9_.$]*\" />\n        <HlCChar      attribute=\"Char\" context=\"#stay\" />\n        <RegExpr      attribute=\"Char\" context=\"#stay\" String=\"'(\\\\x[0-9a-fA-F][0-9a-fA-F]?|\\\\[0-7]?[0-7]?[0-7]?|\\\\.|.)\" />\n        <DetectChar   attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <RegExpr      attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*if(?:def|ndef)?(?=\\s+\\S)\" insensitive=\"true\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr      attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*endif\" insensitive=\"true\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr      attribute=\"Preprocessor\" context=\"Define\" String=\"#\\s*define.*((?=\\\\))\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr      attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)\" firstNonSpace=\"true\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"*\" />\n        <AnyChar      attribute=\"Comment\" context=\"Commentar 2\" String=\"@;#\" />\n        <AnyChar      attribute=\"Symbol\" context=\"#stay\" String=\"!#%&amp;*()+,-&lt;=&gt;?/:[]^{|}~\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 1\">\n        <IncludeRules context=\"##Alerts\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 2\" >\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue  attribute=\"String\" context=\"Some Context\" />\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\" />\n        <DetectChar    attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\" />\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Some Context\" />\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Label\"        defStyleNum=\"dsKeyword\"  />\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"  />\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"   />\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Binary\"       defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"    />\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"     />\n      <itemData name=\"String\"       defStyleNum=\"dsString\"   />\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\" />\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"  />\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <comments>\n      <!--<comment name=\"singleLine\" start=\";\" />\n      <comment name=\"singleLine\" start=\"@\" />\n      <comment name=\"singleLine\" start=\"#\" />-->\n      <comment name=\"multiLine\"  start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"_.$\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/gnuplot.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Gnuplot\" version=\"4\" kateversion=\"5.0\" section=\"Scientific\" extensions=\"*.gnuplot;*.gp;*.gplt;*.plt\" casesensitive=\"1\" >\n  <highlighting>\n    <list name=\"set_no_keywords\">\n      <item>noarrow</item>\n      <item>noborder</item>\n      <item>noclabel</item>\n      <item>noclip</item>\n      <item>nocontour</item>\n      <item>nodgrid3d</item>\n      <item>nogrid</item>\n      <item>nohidden3d</item>\n      <item>nokey</item>\n      <item>nolabel</item>\n      <item>nolinestyle</item>\n      <item>nomultiplot</item>\n      <item>nomx2tics</item>\n      <item>nomxtics</item>\n      <item>nomy2tics</item>\n      <item>nomytics</item>\n      <item>nomztics</item>\n      <item>nooffsets</item>\n      <item>noparametric</item>\n      <item>nopolar</item>\n      <item>nosurface</item>\n      <item>notimestamp</item>\n      <item>nox2dtics</item>\n      <item>nox2mtics</item>\n      <item>nox2tics</item>\n      <item>nox2zeroaxis</item>\n      <item>noxdtics</item>\n      <item>noxmtics</item>\n      <item>noxtics</item>\n      <item>noxzeroaxis</item>\n      <item>noy2dtics</item>\n      <item>noy2mtics</item>\n      <item>noy2tics</item>\n      <item>noy2zeroaxis</item>\n      <item>noydtics</item>\n      <item>noymtics</item>\n      <item>noytics</item>\n      <item>noyzeroaxis</item>\n      <item>nozdtics</item>\n      <item>nozeroaxis</item>\n      <item>nozmtics</item>\n      <item>noztics</item>\n    </list>\n\n    <list name=\"set_simple_keywords\">\n      <item>grid</item>\n      <item>parametric</item>\n    </list>\n\n    <list name=\"showkeywords\">\n      <item>angles</item>\n      <item>arrow</item>\n      <item>bar</item>\n      <item>border</item>\n      <item>boxwidth</item>\n      <item>clip</item>\n      <item>cntrparam</item>\n      <item>data</item>\n      <item>dgrid3d</item>\n      <item>dummy</item>\n      <item>encoding</item>\n      <item>format</item>\n      <item>function</item>\n      <item>functions</item>\n      <item>hidden3d</item>\n      <item>isosamples</item>\n      <item>label</item>\n      <item>linestyle</item>\n      <item>mapping</item>\n      <item>margin</item>\n      <item>mx2tics</item>\n      <item>mxtics</item>\n      <item>my2tics</item>\n      <item>mytics</item>\n      <item>mztics</item>\n      <item>offsets</item>\n      <item>origin</item>\n      <item>parametric</item>\n      <item>pointsize</item>\n      <item>polar</item>\n      <item>samples</item>\n      <item>size</item>\n      <item>surface</item>\n      <item>tics</item>\n      <item>ticscale</item>\n      <item>ticslevel</item>\n      <item>timefmt</item>\n      <item>timestamp</item>\n      <item>variables</item>\n      <item>version</item>\n      <item>view</item>\n      <item>x2data</item>\n      <item>x2dtics</item>\n      <item>x2label</item>\n      <item>x2mtics</item>\n      <item>x2tics</item>\n      <item>x2zeroaxis</item>\n      <item>xdata</item>\n      <item>xdtics</item>\n      <item>xmtics</item>\n      <item>xtics</item>\n      <item>xzeroaxis</item>\n      <item>y2data</item>\n      <item>y2dtics</item>\n      <item>y2mtics</item>\n      <item>y2tics</item>\n      <item>y2zeroaxis</item>\n      <item>ydata</item>\n      <item>ydtics</item>\n      <item>ymtics</item>\n      <item>ytics</item>\n      <item>yzeroaxis</item>\n      <item>zdata</item>\n      <item>zdtics</item>\n      <item>zero</item>\n      <item>zeroaxis</item>\n      <item>zmtics</item>\n      <item>ztics</item>\n    </list>\n\n    <list name=\"set_label_keywords\">\n      <item>clabel</item>\n      <item>title</item>\n      <item>xlabel</item>\n      <item>x2label</item>\n      <item>ylabel</item>\n      <item>y2label</item>\n      <item>zlabel</item>\n    </list>\n\n    <list name=\"set_range_keywords\">\n      <item>rrange</item>\n      <item>trange</item>\n      <item>urange</item>\n      <item>vrange</item>\n      <item>x2range</item>\n      <item>xrange</item>\n      <item>y2range</item>\n      <item>yrange</item>\n      <item>zrange</item>\n    </list>\n\n    <list name=\"set_contour_keywords\">\n      <item>base</item>\n      <item>surface</item>\n      <item>both</item>\n    </list>\n\n    <list name=\"set_key_keywords\">\n      <item>left</item>\n      <item>right</item>\n      <item>top</item>\n      <item>bottom</item>\n      <item>outside</item>\n      <item>below</item>\n      <item>Left</item>\n      <item>Right</item>\n      <item>noreverse</item>\n      <item>reverse</item>\n    </list>\n\n    <list name=\"set_scale_keywords\">\n      <item>noautoscale</item>\n      <item>autoscale</item>\n      <item>nologscale</item>\n    </list>\n\n    <list name=\"set_scale_axes_keywords\">\n      <item>x</item>\n      <item>y</item>\n      <item>z</item>\n      <item>x2</item>\n      <item>y2</item>\n      <item>xy</item>\n    </list>\n\n    <list name=\"set_terminal_keywords\">\n      <item>aed512</item>\n      <item>aed767</item>\n      <item>aifm</item>\n      <item>bitgraph</item>\n      <item>cgm</item>\n      <item>dumb</item>\n      <item>dxf</item>\n      <item>dxy800a</item>\n      <item>eepic</item>\n      <item>epson-180dpi</item>\n      <item>epson-60dpi</item>\n      <item>epson-lx800</item>\n      <item>excl</item>\n      <item>gpic</item>\n      <item>hp2623a</item>\n      <item>hp2648</item>\n      <item>kc-tek40xx</item>\n      <item>km-tek40xx</item>\n      <item>kyo</item>\n      <item>mf</item>\n      <item>mif</item>\n      <item>mp</item>\n      <item>nec-cp6</item>\n      <item>okidata</item>\n      <item>prescribe</item>\n      <item>pstricks</item>\n      <item>qms</item>\n      <item>regis</item>\n      <item>rgip</item>\n      <item>selanar</item>\n      <item>starc</item>\n      <item>table</item>\n      <item>tandy-60dpi</item>\n      <item>tek40xx</item>\n      <item>tek410x</item>\n      <item>texdraw</item>\n      <item>uniplex</item>\n      <item>unixplot</item>\n      <item>vttek</item>\n      <item>vx384</item>\n      <item>x11</item>\n    </list>\n\n    <list name=\"set_terminal_ps_keywords\">\n      <item>landscape</item>\n      <item>portrait</item>\n      <item>eps</item>\n      <item>default</item>\n      <item>enhanced</item>\n      <item>noenhanced</item>\n      <item>solid</item>\n      <item>dashed</item>\n      <item>defaultplex</item>\n      <item>simplex</item>\n      <item>duplex</item>\n    </list>\n\n    <list name=\"set_terminal_latex_keywords\">\n      <item>courier</item>\n      <item>roman</item>\n      <item>default</item>\n    </list>\n\n    <list name=\"set_terminal_pstex_keywords\">\n      <item>color</item>\n      <item>monochrome</item>\n      <item>dashed</item>\n      <item>rotate</item>\n      <item>norotate</item>\n      <item>auxfile</item>\n    </list>\n\n    <list name=\"set_terminal_png_keywords\">\n      <item>transparent</item>\n      <item>notransparent</item>\n    </list>\n\n    <list name=\"set_terminal_pbm_keywords\">\n      <item>small</item>\n      <item>medium</item>\n      <item>large</item>\n      <item>monochrome</item>\n      <item>gray</item>\n      <item>color</item>\n    </list>\n\n    <list name=\"set_terminal_tgif_keywords\">\n      <item>landscape</item>\n      <item>portrait</item>\n      <item>solid</item>\n      <item>dashed</item>\n    </list>\n\n    <list name=\"set_terminal_fig_keywords\">\n      <item>monochrome</item>\n      <item>color</item>\n      <item>small</item>\n      <item>big</item>\n      <item>pointsmax</item>\n      <item>landscape</item>\n      <item>portrait</item>\n      <item>metric</item>\n      <item>inches</item>\n      <item>fontsize</item>\n      <item>size</item>\n      <item>thickness</item>\n      <item>depth</item>\n    </list>\n\n    <list name=\"set_terminal_corel_keywords\">\n      <item>monochrome</item>\n      <item>color</item>\n    </list>\n\n    <list name=\"set_terminal_hppj_keywords\">\n      <item>FNT5X9</item>\n      <item>FNT9X17</item>\n      <item>FNT13X25</item>\n    </list>\n\n    <list name=\"set_terminal_pcl5_keywords\">\n      <item>mode</item>\n      <item>landscape</item>\n      <item>portrait</item>\n      <item>monochrome</item>\n      <item>color</item>\n      <item>solid</item>\n      <item>dashed</item>\n      <item>letter</item>\n      <item>legal</item>\n      <item>noextended</item>\n      <item>extended</item>\n      <item>stick</item>\n      <item>univers</item>\n      <item>cg_times</item>\n      <item>zapf_dingbats</item>\n      <item>antique_olive</item>\n      <item>arial</item>\n      <item>courier</item>\n      <item>garamond_antigua</item>\n      <item>letter_gothic</item>\n      <item>cg_omega</item>\n      <item>albertus</item>\n      <item>times_new_roman</item>\n      <item>clarendon</item>\n      <item>coronet</item>\n      <item>marigold</item>\n      <item>truetype_symbols</item>\n      <item>wingdings</item>\n    </list>\n\n    <list name=\"set_terminal_hpdj_keywords\">\n      <item>75</item>\n      <item>100</item>\n      <item>150</item>\n      <item>300</item>\n    </list>\n\n    <list name=\"set_terminal_imagen_keywords\">\n      <item>landscape</item>\n      <item>portrait</item>\n    </list>\n\n    <list name=\"plot_smooth_keywords\">\n      <item>acsplines</item>\n      <item>bezier</item>\n      <item>csplines</item>\n      <item>sbezier</item>\n      <item>unique</item>\n    </list>\n\n    <list name=\"plot_axes_keywords\">\n      <item>x1y1</item>\n      <item>x2y1</item>\n      <item>x1y2</item>\n      <item>x2y2</item>\n    </list>\n\n    <list name=\"splot_style_keywords\">\n      <item>lines</item>\n      <item>l</item>\n      <item>points</item>\n      <item>p</item>\n      <item>linespoints</item>\n      <item>linesp</item>\n      <item>impulses</item>\n      <item>i</item>\n      <item>dots</item>\n      <item>d</item>\n      <item>steps</item>\n      <item>fsteps</item>\n      <item>histeps</item>\n    </list>\n\n    <list name=\"plot_style_keywords\">\n      <item>errorbars</item>\n      <item>xerrorbars</item>\n      <item>yerrorbars</item>\n      <item>xyerrorbars</item>\n      <item>boxes</item>\n      <item>boxerrorbars</item>\n      <item>boxxyerrorbars</item>\n      <item>financebars</item>\n      <item>candlesticks</item>\n      <item>vector</item>\n    </list>\n\n    <list name=\"plot_astyle_keywords\">\n      <item>linestyle</item>\n      <item>ls</item>\n      <item>linetype</item>\n      <item>lt</item>\n      <item>linewidth</item>\n      <item>lw</item>\n      <item>pointtype</item>\n      <item>pt</item>\n      <item>pointsize</item>\n      <item>ps</item>\n    </list>\n\n    <list name=\"simple_commands\">\n      <item>replot</item>\n      <item>exit</item>\n      <item>quit</item>\n      <item>clear</item>\n      <item>reset</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" name=\"default\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"^#!\\/.*\" />\n        <StringDetect attribute=\"Keyword\" context=\"show\" String=\"show\" />\n        <StringDetect attribute=\"Keyword\" context=\"set\" String=\"set\" />\n        <StringDetect attribute=\"Keyword\" context=\"plot\" String=\"plot\" />\n        <StringDetect attribute=\"Keyword\" context=\"splot\" String=\"splot\" />\n        <StringDetect attribute=\"Keyword\" context=\"pause\" String=\"pause\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"simple_commands\"/>\n        <StringDetect attribute=\"Keyword\" context=\"pause_1\" String=\"load\"/>\n        <StringDetect attribute=\"Keyword\" context=\"save\" String=\"save\"/>\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"#\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"pause\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"pause_1\" />\n        <Detect2Chars attribute=\"Decimal\" context=\"pause_1\" char=\"-\" char1=\"1\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"pause_1\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Data Type\" context=\"label_string1\" char=\"'\"/>\n        <DetectChar attribute=\"Data Type\" context=\"label_string2\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"save\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"save1\" String=\"functions\"/>\n        <StringDetect attribute=\"Function\" context=\"save1\" String=\"var\"/>\n        <StringDetect attribute=\"Function\" context=\"save1\" String=\"variables\"/>\n        <StringDetect attribute=\"Function\" context=\"save1\" String=\"set\"/>\n        <DetectChar attribute=\"Data Type\" context=\"label_string1\" char=\"'\"/>\n        <DetectChar attribute=\"Data Type\" context=\"label_string2\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"save1\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"label_string1\" char=\"'\"/>\n        <DetectChar attribute=\"Data Type\" context=\"label_string2\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"show\" lineEndContext=\"default\">\n        <RegExpr attribute=\"Function\" context=\"default\" String=\"\\b(data|function) style\\b\"/>\n        <keyword attribute=\"Function\" context=\"default\" String=\"showkeywords\" />\n        <keyword attribute=\"Function\" context=\"default\" String=\"set_label_keywords\" />\n        <keyword attribute=\"Function\" context=\"default\" String=\"set_simple_keywords\" />\n        <keyword attribute=\"Function\" context=\"default\" String=\"set_range_keywords\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"contour\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"terminal\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"term\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"all\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"autoscale\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"logscale\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"key\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set\" lineEndContext=\"default\">\n        <RegExpr attribute=\"Function\" context=\"set_2\" String=\"\\b(data|function) style\\b\"/>\n        <keyword attribute=\"Function\" context=\"set_2\" String=\"showkeywords\" />\n        <keyword attribute=\"Function\" context=\"set_label\" String=\"set_label_keywords\" />\n        <keyword attribute=\"Function\" context=\"set_range\" String=\"set_range_keywords\" />\n        <keyword attribute=\"Function\" context=\"default\" String=\"set_simple_keywords\" />\n        <keyword attribute=\"Function\" context=\"default\" String=\"set_no_keywords\" />\n        <keyword attribute=\"Function\" context=\"set_autoscale\" String=\"set_scale_keywords\" />\n        <StringDetect attribute=\"Function\" context=\"set_contour\" String=\"contour\" />\n        <StringDetect attribute=\"Function\" context=\"set_terminal\" String=\"terminal\" />\n        <StringDetect attribute=\"Function\" context=\"set_terminal\" String=\"term\" />\n        <StringDetect attribute=\"Function\" context=\"set_logscale\" String=\"logscale\" />\n        <StringDetect attribute=\"Function\" context=\"set_key\" String=\"key\" />\n      </context>\n\n      <context attribute=\"Data Type\" name=\"set_2\" lineEndContext=\"default\" />\n\n      <context attribute=\"Normal Text\" name=\"set_label\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"label_string1\" char=\"'\"/>\n        <DetectChar attribute=\"Data Type\" context=\"label_string2\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"label_string1\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Data Type\" context=\"default\" char=\"'\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"label_string2\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Data Type\" context=\"default\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set_range\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"set_range_1\" char=\"[\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"set_range_1\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"default\" char=\"]\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set_key\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_key_keywords\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_1\" String=\"samplen\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_2\" String=\"spacing\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_3\" String=\"with\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_4\" String=\"title\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"nobox\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_5\" String=\"box\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_1\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"set_key_11\" />\n        <Float attribute=\"Data Type\" context=\"set_key_11\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_11\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"set_key_2\" String=\"spacing\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_3\" String=\"with\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_4\" String=\"title\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"nobox\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_5\" String=\"box\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_2\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"set_key_21\" />\n        <Float attribute=\"Data Type\" context=\"set_key_21\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_21\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"set_key_3\" String=\"with\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_4\" String=\"title\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"nobox\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_5\" String=\"box\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_3\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"set_key_31\" />\n        <Float attribute=\"Data Type\" context=\"set_key_31\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_31\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"set_key_4\" String=\"title\" />\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"nobox\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_5\" String=\"box\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_4\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"set_key_41\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"set_key_41\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"set_key_42\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"set_key_42\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"default\" String=\"nobox\" />\n        <StringDetect attribute=\"Function\" context=\"set_key_5\" String=\"box\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_key_5\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"plot_astyle_keywords\" />\n        <Int attribute=\"Data Type\" context=\"#stay\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set_contour\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"default\" String=\"set_contour_keywords\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set_autoscale\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"set_autoscale_1\" String=\"set_scale_axes_keywords\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_autoscale_1\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Data Type\" context=\"default\" String=\"min\" />\n        <StringDetect attribute=\"Data Type\" context=\"default\" String=\"max\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set_logscale\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_scale_axes_keywords\"/>\n        <Int attribute=\"Data Type\" context=\"default\" />\n        <Float attribute=\"Data Type\" context=\"default\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set_terminal\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"default\" String=\"set_terminal_keywords\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_ps\" String=\"postscript\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_ps\" String=\"post\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_latex\" String=\"latex\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_latex\" String=\"emtex\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_pstex\" String=\"pslatex\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_pstex\" String=\"pstex\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_tpic\" String=\"tpic\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_png\" String=\"png\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_pbm\" String=\"pbm\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_tgif\" String=\"tgif\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_fig\" String=\"fig\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_corel\" String=\"corel\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_hpgl\" String=\"hpgl\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_pcl5\" String=\"pcl5\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_hpdj\" String=\"hpdj\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_hpdj\" String=\"hpljii\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_hp500c\" String=\"hp500c\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_hppj\" String=\"hppj\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_imagen\" String=\"imagen\" />\n        <StringDetect attribute=\"Data Type\" context=\"set_terminal_tkcanvas\" String=\"tkcanvas\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"set_terminal_ps\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_ps_keywords\" />\n        <Int attribute=\"Decimal\" context=\"default\" />\n        <DetectChar attribute=\"Data Type\" context=\"set_terminal_ps_font\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"set_terminal_ps_font\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Data Type\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_latex\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_latex_keywords\" />\n        <Int attribute=\"Decimal\" context=\"default\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_png\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_png_keywords\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_pbm_keywords\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_pbm\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_pbm_keywords\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_pstex\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_pstex_keywords\" />\n        <Int attribute=\"Decimal\" context=\"default\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_tgif\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_tgif_keywords\" />\n        <Int attribute=\"Decimal\" context=\"default\" />\n        <DetectChar attribute=\"Data Type\" context=\"set_terminal_ps_font\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_tpic\" lineEndContext=\"default\">\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <Float attribute=\"Decimal\" context=\"#stay\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_fig\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_fig_keywords\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_corel\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_corel_keywords\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <Float attribute=\"Decimal\" context=\"#stay\" />\n        <DetectChar attribute=\"Data Type\" context=\"set_terminal_ps_font\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_hpgl\" lineEndContext=\"default\">\n        <StringDetect  attribute=\"Data Type\" context=\"default\" String=\"eject\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_pcl5\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_pcl5_keywords\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_hpdj\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_hpdj_keywords\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_hp500c\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_hpdj_keywords\" />\n        <StringDetect  attribute=\"Data Type\" context=\"#stay\" String=\"color\" />\n        <StringDetect  attribute=\"Data Type\" context=\"#stay\" String=\"compression\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_hppj\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"default\" String=\"set_terminal_hppj_keywords\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_imagen\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"set_terminal_imagen_keywords\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <DetectChar attribute=\"Decimal\" context=\"#stay\" char=\"[\"/>\n        <DetectChar attribute=\"Decimal\" context=\"default\" char=\"]\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"set_terminal_tkcanvas\" lineEndContext=\"default\">\n        <StringDetect  attribute=\"Data Type\" context=\"#stay\" String=\"perltk\" />\n        <StringDetect  attribute=\"Data Type\" context=\"#stay\" String=\"interactive\" />\n      </context>\n\n      <context attribute=\"FloatFunc\" name=\"plot\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"plot_range\" char=\"[\"/>\n        <DetectChar attribute=\"String\" context=\"plot_string1\" char=\"'\"/>\n        <DetectChar attribute=\"String\" context=\"plot_string2\" char=\"&quot;\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\"axes\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\" a \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_label_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\" w \\\"/>\n        <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\",\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"plot_range\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"#pop\" char=\"]\"/>\n      </context>\n\n      <context attribute=\"String\" name=\"plot_string1\" lineEndContext=\"default\">\n        <DetectChar attribute=\"String\" context=\"plot_string_end\" char=\"'\"/>\n      </context>\n      <context attribute=\"String\" name=\"plot_string2\" lineEndContext=\"default\">\n        <DetectChar attribute=\"String\" context=\"plot_string_end\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"String\" name=\"plot_string_end\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"plot_index\" String=\"index\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_using\" String=\"using\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_using\" String=\" u \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_smooth\" String=\"smooth\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_smooth\" String=\" s \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\"axes\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\" a \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_label_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"plot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"plot_using\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"#stay\" />\n        <DetectChar attribute=\"Data Type\" context=\"#stay\" char=\":\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_index\" String=\"index\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_smooth\" String=\"smooth\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_smooth\" String=\" s \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\"axes\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\" a \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_label_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"plot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"plot_index\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"#stay\" />\n        <DetectChar attribute=\"Data Type\" context=\"#stay\" char=\":\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_using\" String=\"using\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_smooth\" String=\"smooth\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_smooth\" String=\" s \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\"axes\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\" a \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_label_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"plot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"plot_smooth\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"plot_smooth_end\" String=\"plot_smooth_keywords\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"plot_smooth_end\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\"axes\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_axes\" String=\" a \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_label_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"plot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"plot_axes\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"plot_axes_end\" String=\"plot_axes_keywords\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"plot_axes_end\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"plot_label_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"plot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"plot_title\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"plot_label_string1\" char=\"'\"/>\n        <DetectChar attribute=\"Data Type\" context=\"plot_label_string2\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"plot_label_string1\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"plot_label_end\" char=\"'\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"plot_label_string2\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"plot_label_end\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"plot_label_end\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"plot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"plot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"plot_with\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"plot_with_1\" String=\"plot_style_keywords\" />\n        <keyword attribute=\"Data Type\" context=\"plot_with_1\" String=\"splot_style_keywords\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"plot_with_1\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"plot_astyle_keywords\" />\n        <Int attribute=\"Data Type\" context=\"#stay\" />\n        <DetectChar attribute=\"Keyword\" context=\"plot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"FloatFunc\" name=\"splot\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"plot_range\" char=\"[\"/>\n        <DetectChar attribute=\"String\" context=\"splot_string1\" char=\"'\"/>\n        <DetectChar attribute=\"String\" context=\"splot_string2\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"String\" name=\"splot_string1\" lineEndContext=\"default\">\n        <DetectChar attribute=\"String\" context=\"splot_string_end\" char=\"'\"/>\n      </context>\n      <context attribute=\"String\" name=\"splot_string2\" lineEndContext=\"default\">\n        <DetectChar attribute=\"String\" context=\"splot_string_end\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"String\" name=\"splot_string_end\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"#stay\" String=\"binary\"/>\n        <StringDetect attribute=\"Function\" context=\"#stay\" String=\"matrix\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_index\" String=\"index\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_using\" String=\"using\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"splot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"splot_using\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"#stay\" />\n        <DetectChar attribute=\"Data Type\" context=\"#stay\" char=\":\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_index\" String=\"index\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"splot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"splot_index\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"#stay\" />\n        <DetectChar attribute=\"Data Type\" context=\"#stay\" char=\":\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_using\" String=\"using\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title\" String=\"title\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title\" String=\" t \"/>\n        <StringDetect attribute=\"Function\" context=\"splot_title_end\" String=\"notitle\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"splot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"splot_title\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"splot_label_string1\" char=\"'\"/>\n        <DetectChar attribute=\"Data Type\" context=\"splot_label_string2\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"splot_label_string1\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"splot_title_end\" char=\"'\"/>\n      </context>\n      <context attribute=\"Data Type\" name=\"splot_label_string2\" lineEndContext=\"default\">\n        <DetectChar attribute=\"Data Type\" context=\"splot_title_end\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"splot_title_end\" lineEndContext=\"default\">\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\"with\"/>\n        <StringDetect attribute=\"Function\" context=\"splot_with\" String=\" w \"/>\n        <DetectChar attribute=\"Keyword\" context=\"splot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"splot_with\" lineEndContext=\"default\">\n        <keyword attribute=\"Data Type\" context=\"splot_with_1\" String=\"splot_style_keywords\" />\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"splot_with_1\" lineEndContext=\"default\">\n        <Int attribute=\"Data Type\" context=\"#stay\" />\n        <DetectChar attribute=\"Keyword\" context=\"splot\" char=\",\"/>\n      </context>\n\n      <context attribute=\"Comment\" name=\"comment\" lineEndContext=\"#pop\" />\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Function\"                  defStyleNum=\"dsFunction\" />\n      <itemData name=\"Data Type\"                 defStyleNum=\"dsDataType\" />\n      <itemData name=\"String\"                    defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Decimal\"                   defStyleNum=\"dsDecVal\" />\n      <itemData name=\"FloatFunc\"                 defStyleNum=\"dsFloat\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n\n</language>\n\n<!-- kate: replace-tabs: on; tab-width: 4; indent-width: 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/go.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!--\nThis file is part of KDE's Kate project\n\nGO.XML supports syntax highlighting for the Go programming language\nunder Kate. Go is a compiled, garbage-collected, concurrent programming\nlanguage developed by Google Inc.\n\nCopyright (C) 2010, Miquel Sabaté <mikisabate@gmail.com>\n\nThis program, including associated files, is free software.  You may\ndistribute it and/or modify it under the terms of the GNU General Public\nLicense as published by the Free Software Foundation; either Version 2 of\nthe license, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\nor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\nfor more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n-->\n\n\n<language name=\"Go\" version=\"4\" kateversion=\"5.0\" section=\"Sources\" indenter=\"cstyle\" extensions=\"*.go\" author=\"Miquel Sabaté (mikisabate@gmail.com)\" license=\"GPLv2+\">\n    <highlighting>\n    <list name=\"keywords\">\n<!-- Keywords have been taken from The Go Programming Language Specification -> Keywords section -->\n      <item>break</item>\n      <item>case</item>\n      <item>chan</item>\n      <item>const</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>defer</item>\n      <item>else</item>\n      <item>fallthrough</item>\n      <item>for</item>\n      <item>func</item>\n      <item>go</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>import</item>\n      <item>interface</item>\n      <item>map</item>\n      <item>package</item>\n      <item>range</item>\n      <item>return</item>\n      <item>select</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>type</item>\n      <item>var</item>\n    </list>\n    <list name=\"types\">\n      <item>bool</item>\n      <item>byte</item>\n      <item>complex64</item>\n      <item>complex128</item>\n      <item>error</item>\n      <item>float32</item>\n      <item>float64</item>\n      <item>int</item>\n      <item>int8</item>\n      <item>int16</item>\n      <item>int32</item>\n      <item>int64</item>\n      <item>rune</item>\n      <item>string</item>\n      <item>uint</item>\n      <item>uintptr</item>\n      <item>uint8</item>\n      <item>uint16</item>\n      <item>uint32</item>\n      <item>uint64</item>\n    </list>\n    <list name=\"builtin\">\n      <item>append</item>\n      <item>cap</item>\n      <item>close</item>\n      <item>complex</item>\n      <item>copy</item>\n      <item>delete</item>\n      <item>imag</item>\n      <item>len</item>\n      <item>make</item>\n      <item>new</item>\n      <item>panic</item>\n      <item>print</item>\n      <item>println</item>\n      <item>real</item>\n      <item>recover</item>\n    </list>\n    <list name=\"predeclared\">\n      <item>false</item>\n      <item>nil</item>\n      <item>true</item>\n      <item>iota</item>\n    </list>\n    <contexts>\n      <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Predeclared Identifier\" context=\"#stay\" String=\"predeclared\"  />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"       />\n        <keyword attribute=\"Builtin Function\" context=\"#stay\" String=\"builtin\"  />\n        <DetectIdentifier />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"   />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"   />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\"   />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"Multiline String\" char=\"`\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue  attribute=\"String\" context=\"#stay\" />\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\" />\n        <DetectChar    attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Multiline String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"`\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"   spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"  spellChecking=\"false\"/>\n      <itemData name=\"Predeclared Identifier\" defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n      <itemData name=\"Builtin Function\"       defStyleNum=\"dsBuiltIn\" spellChecking=\"false\" />\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsChar\"    />\n      <itemData name=\"String\"       defStyleNum=\"dsString\"  />\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\" />\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"   spellChecking=\"false\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n    </itemDatas>\n    </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"1\" additionalDeliminator=\"'&quot;\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/grammar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  Syntax definition for kdev-pg/kdev-pg-qt grammars.\n-->\n<language name=\"KDev-PG[-Qt] Grammar\" version=\"2\" kateversion=\"3.4\" section=\"Sources\" extensions=\"*.g\" casesensitive=\"1\" author=\"Milian Wolff (mail@milianw.de), Jonathan Schmidt-Dominé (devel@the-user.org)\" license=\"\">\n  <highlighting>\n    <list name=\"macros\">\n      <item>ast_extra_members</item>\n      <item>export_macro</item>\n      <item>export_macro_header</item>\n      <item>namespace</item>\n      <item>parserclass</item>\n      <item>token</item>\n      <item>token_stream</item>\n      <item>parser_declaration_header</item>\n      <item>parser_bits_header</item>\n      <item>ast_header</item>\n      <item>ast_base</item>\n      <item>parser_base</item>\n      <item>bin</item>\n      <item>pre</item>\n      <item>post</item>\n      <item>tern</item>\n      <item>paren</item>\n      <item>left</item>\n      <item>right</item>\n      <item>&lt;</item>\n      <item>&gt;</item>\n    </list>\n    <list name=\"keywords\">\n      <item>try/rollback</item>\n      <item>try/recover</item>\n      <item>catch</item>\n    </list>\n    <list name=\"access\">\n      <item>public</item>\n      <item>protected</item>\n      <item>private</item>\n    </list>\n    <list name=\"locations\">\n      <item>declaration</item>\n      <item>destructor</item>\n      <item>constructor</item>\n    </list>\n    \n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- keywords -->\n        <DetectChar attribute=\"Keyword\" context=\"Macros\" char=\"%\" firstNonSpace=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Access\" context=\"#stay\" String=\"access\" />\n        <keyword attribute=\"Location\" context=\"#stay\" String=\"locations\" />\n        <!-- numbers -->\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <!-- strings -->\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <!-- comments -->\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"-\" char1=\"-\" />\n        <!-- code segments -->\n        <Detect2Chars attribute=\"Code Segment\" context=\"CodeSegment\" char=\"[\" char1=\":\" beginRegion=\"code\" />\n        <!-- tokens are all-uppercase -->\n        <RegExpr attribute=\"Token\" insensitive=\"false\" context=\"#stay\" String=\"\\b[A-Z_]+\\b\" />\n        <!-- simple use of an ASTNode without assigning it -->\n        <RegExpr attribute=\"AstNode\" insensitive=\"true\" context=\"#stay\" String=\"\\b[a-z]+\\b(?!=)\" />\n        <!-- member=ASTNode -->\n        <DetectChar attribute=\"Symbol\" context=\"MemberAst\" char=\"=\" />\n        <!-- -> ASTNode -->\n        <Detect2Chars attribute=\"Symbol\" context=\"AstDecl\" char=\"-\" char1=\">\" />\n        <!-- symbols -->\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\";[()]->|=*#@:?\" />\n      </context>\n      <!-- keywords -->\n      <context name=\"Macros\" attribute=\"Keyword\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"macros\" />\n        <Detect2Chars lookAhead=\"true\" context=\"#pop\" attribute=\"Normal Text\" char=\"[\" char1=\":\" />\n        <Detect2Chars context=\"#pop\" attribute=\"Keyword\" char=\";\" char1=\";\" />\n      </context>\n      <!-- \"string\" -->\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <!-- comments -->\n      <context name=\"SingleLineComment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <!-- code segments -->\n      <context name=\"CodeSegment\" attribute=\"Code Segment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Code Segment\" context=\"#pop\" char=\":\" char1=\"]\" endRegion=\"code\" />\n        <IncludeRules context=\"##C++\" />\n      </context>\n      <!-- memberVar=AstNode -->\n      <context name=\"MemberAst\" attribute=\"AstNode\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <!-- tokens are all-uppercase -->\n        <RegExpr attribute=\"Token\" insensitive=\"false\" context=\"#pop\" String=\"\\b[A-Z_]+\\b\" />\n        <DetectIdentifier attribute=\"AstNode\" context=\"#pop\" />\n      </context>\n      <!-- -> AstNode -->\n      <context name=\"AstDecl\" attribute=\"Error\" lineEndContext=\"#stay\">\n        <DetectSpaces attribute=\"Normal Text\" />\n        <DetectIdentifier attribute=\"AstNode\" />\n        <DetectChar char=\"[\" attribute=\"Symbol\" context=\"AstMemberDecl\" />\n        <Detect2Chars char=\";\" char1=\";\" attribute=\"Symbol\" context=\"#pop\" />\n      </context>\n      <!-- member or temporary variables -->\n      <context name=\"AstMemberDecl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Keyword\" String=\"\\b(member|temporary)\\s+variable\\b\" />\n        <DetectIdentifier attribute=\"AstMember\" />\n        <DetectChar attribute=\"Symbol\" char=\":\" context=\"AstMemberType\" />\n        <DetectChar attribute=\"Symbol\" char=\"]\" context=\"#pop\" />\n      </context>\n      <context name=\"AstMemberType\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectIdentifier attribute=\"AstMemberType\" />\n        <DetectChar attribute=\"Symbol\" char=\";\" context=\"#pop\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Access\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"Location\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"String Char\" defStyleNum=\"dsChar\" spellChecking=\"false\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Symbol\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Code Segment\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"Token\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"AstNode\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\" />\n      <itemData name=\"AstMember\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"AstMemberType\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n    </comments>\n    <keywords casesensitive=\"true\" weakDeliminator=\"/\" />\n  </general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/groovy.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n    Based on the java syntax file 1.19 by Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)\n-->\n<language name=\"Groovy\" version=\"6\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.groovy;*.gradle;*.gvy;Jenkinsfile\" license=\"LGPL\" author=\"Chris Reeves (chris@ev-soft.net)\">\n\t<highlighting>\n\t\t<list name=\"java15\">\n\t\t\t<item>ACTIVE</item>\n\t\t\t<item>ACTIVITY_COMPLETED</item>\n\t\t\t<item>ACTIVITY_REQUIRED</item>\n\t\t\t<item>ARG_IN</item>\n\t\t\t<item>ARG_INOUT</item>\n\t\t\t<item>ARG_OUT</item>\n\t\t\t<item>AWTError</item>\n\t\t\t<item>AWTEvent</item>\n\t\t\t<item>AWTEventListener</item>\n\t\t\t<item>AWTEventListenerProxy</item>\n\t\t\t<item>AWTEventMulticaster</item>\n\t\t\t<item>AWTException</item>\n\t\t\t<item>AWTKeyStroke</item>\n\t\t\t<item>AWTPermission</item>\n\t\t\t<item>AbstractAction</item>\n\t\t\t<item>AbstractBorder</item>\n\t\t\t<item>AbstractButton</item>\n\t\t\t<item>AbstractCellEditor</item>\n\t\t\t<item>AbstractCollection</item>\n\t\t\t<item>AbstractColorChooserPanel</item>\n\t\t\t<item>AbstractDocument</item>\n\t\t\t<item>AbstractDocument.AttributeContext</item>\n\t\t\t<item>AbstractDocument.Content</item>\n\t\t\t<item>AbstractDocument.ElementEdit</item>\n\t\t\t<item>AbstractExecutorService</item>\n\t\t\t<item>AbstractInterruptibleChannel</item>\n\t\t\t<item>AbstractLayoutCache</item>\n\t\t\t<item>AbstractLayoutCache.NodeDimensions</item>\n\t\t\t<item>AbstractList</item>\n\t\t\t<item>AbstractListModel</item>\n\t\t\t<item>AbstractMap</item>\n\t\t\t<item>AbstractMethodError</item>\n\t\t\t<item>AbstractPreferences</item>\n\t\t\t<item>AbstractQueue</item>\n\t\t\t<item>AbstractQueuedSynchronizer</item>\n\t\t\t<item>AbstractSelectableChannel</item>\n\t\t\t<item>AbstractSelectionKey</item>\n\t\t\t<item>AbstractSelector</item>\n\t\t\t<item>AbstractSequentialList</item>\n\t\t\t<item>AbstractSet</item>\n\t\t\t<item>AbstractSpinnerModel</item>\n\t\t\t<item>AbstractTableModel</item>\n\t\t\t<item>AbstractUndoableEdit</item>\n\t\t\t<item>AbstractWriter</item>\n\t\t\t<item>AccessControlContext</item>\n\t\t\t<item>AccessControlException</item>\n\t\t\t<item>AccessController</item>\n\t\t\t<item>AccessException</item>\n\t\t\t<item>Accessible</item>\n\t\t\t<item>AccessibleAction</item>\n\t\t\t<item>AccessibleAttributeSequence</item>\n\t\t\t<item>AccessibleBundle</item>\n\t\t\t<item>AccessibleComponent</item>\n\t\t\t<item>AccessibleContext</item>\n\t\t\t<item>AccessibleEditableText</item>\n\t\t\t<item>AccessibleExtendedComponent</item>\n\t\t\t<item>AccessibleExtendedTable</item>\n\t\t\t<item>AccessibleExtendedText</item>\n\t\t\t<item>AccessibleHyperlink</item>\n\t\t\t<item>AccessibleHypertext</item>\n\t\t\t<item>AccessibleIcon</item>\n\t\t\t<item>AccessibleKeyBinding</item>\n\t\t\t<item>AccessibleObject</item>\n\t\t\t<item>AccessibleRelation</item>\n\t\t\t<item>AccessibleRelationSet</item>\n\t\t\t<item>AccessibleResourceBundle</item>\n\t\t\t<item>AccessibleRole</item>\n\t\t\t<item>AccessibleSelection</item>\n\t\t\t<item>AccessibleState</item>\n\t\t\t<item>AccessibleStateSet</item>\n\t\t\t<item>AccessibleStreamable</item>\n\t\t\t<item>AccessibleTable</item>\n\t\t\t<item>AccessibleTableModelChange</item>\n\t\t\t<item>AccessibleText</item>\n\t\t\t<item>AccessibleTextSequence</item>\n\t\t\t<item>AccessibleValue</item>\n\t\t\t<item>AccountException</item>\n\t\t\t<item>AccountExpiredException</item>\n\t\t\t<item>AccountLockedException</item>\n\t\t\t<item>AccountNotFoundException</item>\n\t\t\t<item>Acl</item>\n\t\t\t<item>AclEntry</item>\n\t\t\t<item>AclNotFoundException</item>\n\t\t\t<item>Action</item>\n\t\t\t<item>ActionEvent</item>\n\t\t\t<item>ActionListener</item>\n\t\t\t<item>ActionMap</item>\n\t\t\t<item>ActionMapUIResource</item>\n\t\t\t<item>Activatable</item>\n\t\t\t<item>ActivateFailedException</item>\n\t\t\t<item>ActivationDesc</item>\n\t\t\t<item>ActivationException</item>\n\t\t\t<item>ActivationGroup</item>\n\t\t\t<item>ActivationGroupDesc</item>\n\t\t\t<item>ActivationGroupDesc.CommandEnvironment</item>\n\t\t\t<item>ActivationGroupID</item>\n\t\t\t<item>ActivationGroup_Stub</item>\n\t\t\t<item>ActivationID</item>\n\t\t\t<item>ActivationInstantiator</item>\n\t\t\t<item>ActivationMonitor</item>\n\t\t\t<item>ActivationSystem</item>\n\t\t\t<item>Activator</item>\n\t\t\t<item>ActiveEvent</item>\n\t\t\t<item>ActivityCompletedException</item>\n\t\t\t<item>ActivityRequiredException</item>\n\t\t\t<item>AdapterActivator</item>\n\t\t\t<item>AdapterActivatorOperations</item>\n\t\t\t<item>AdapterAlreadyExists</item>\n\t\t\t<item>AdapterAlreadyExistsHelper</item>\n\t\t\t<item>AdapterInactive</item>\n\t\t\t<item>AdapterInactiveHelper</item>\n\t\t\t<item>AdapterManagerIdHelper</item>\n\t\t\t<item>AdapterNameHelper</item>\n\t\t\t<item>AdapterNonExistent</item>\n\t\t\t<item>AdapterNonExistentHelper</item>\n\t\t\t<item>AdapterStateHelper</item>\n\t\t\t<item>AddressHelper</item>\n\t\t\t<item>Adjustable</item>\n\t\t\t<item>AdjustmentEvent</item>\n\t\t\t<item>AdjustmentListener</item>\n\t\t\t<item>Adler32</item>\n\t\t\t<item>AffineTransform</item>\n\t\t\t<item>AffineTransformOp</item>\n\t\t\t<item>AlgorithmParameterGenerator</item>\n\t\t\t<item>AlgorithmParameterGeneratorSpi</item>\n\t\t\t<item>AlgorithmParameterSpec</item>\n\t\t\t<item>AlgorithmParameters</item>\n\t\t\t<item>AlgorithmParametersSpi</item>\n\t\t\t<item>AllPermission</item>\n\t\t\t<item>AlphaComposite</item>\n\t\t\t<item>AlreadyBound</item>\n\t\t\t<item>AlreadyBoundException</item>\n\t\t\t<item>AlreadyBoundHelper</item>\n\t\t\t<item>AlreadyBoundHolder</item>\n\t\t\t<item>AlreadyConnectedException</item>\n\t\t\t<item>AncestorEvent</item>\n\t\t\t<item>AncestorListener</item>\n\t\t\t<item>AnnotatedElement</item>\n\t\t\t<item>Annotation</item>\n\t\t\t<item>Annotation</item>\n\t\t\t<item>AnnotationFormatError</item>\n\t\t\t<item>AnnotationTypeMismatchException</item>\n\t\t\t<item>Any</item>\n\t\t\t<item>AnyHolder</item>\n\t\t\t<item>AnySeqHelper</item>\n\t\t\t<item>AnySeqHelper</item>\n\t\t\t<item>AnySeqHolder</item>\n\t\t\t<item>AppConfigurationEntry</item>\n\t\t\t<item>AppConfigurationEntry.LoginModuleControlFlag</item>\n\t\t\t<item>Appendable</item>\n\t\t\t<item>Applet</item>\n\t\t\t<item>AppletContext</item>\n\t\t\t<item>AppletInitializer</item>\n\t\t\t<item>AppletStub</item>\n\t\t\t<item>ApplicationException</item>\n\t\t\t<item>Arc2D</item>\n\t\t\t<item>Arc2D.Double</item>\n\t\t\t<item>Arc2D.Float</item>\n\t\t\t<item>Area</item>\n\t\t\t<item>AreaAveragingScaleFilter</item>\n\t\t\t<item>ArithmeticException</item>\n\t\t\t<item>Array</item>\n\t\t\t<item>Array</item>\n\t\t\t<item>ArrayBlockingQueue</item>\n\t\t\t<item>ArrayIndexOutOfBoundsException</item>\n\t\t\t<item>ArrayList</item>\n\t\t\t<item>ArrayStoreException</item>\n\t\t\t<item>ArrayType</item>\n\t\t\t<item>Arrays</item>\n\t\t\t<item>AssertionError</item>\n\t\t\t<item>AsyncBoxView</item>\n\t\t\t<item>AsynchronousCloseException</item>\n\t\t\t<item>AtomicBoolean</item>\n\t\t\t<item>AtomicInteger</item>\n\t\t\t<item>AtomicIntegerArray</item>\n\t\t\t<item>AtomicIntegerFieldUpdater</item>\n\t\t\t<item>AtomicLong</item>\n\t\t\t<item>AtomicLongArray</item>\n\t\t\t<item>AtomicLongFieldUpdater</item>\n\t\t\t<item>AtomicMarkableReference</item>\n\t\t\t<item>AtomicReference</item>\n\t\t\t<item>AtomicReferenceArray</item>\n\t\t\t<item>AtomicReferenceFieldUpdater</item>\n\t\t\t<item>AtomicStampedReference</item>\n\t\t\t<item>Attr</item>\n\t\t\t<item>Attribute</item>\n\t\t\t<item>Attribute</item>\n\t\t\t<item>Attribute</item>\n\t\t\t<item>AttributeChangeNotification</item>\n\t\t\t<item>AttributeChangeNotificationFilter</item>\n\t\t\t<item>AttributeException</item>\n\t\t\t<item>AttributeInUseException</item>\n\t\t\t<item>AttributeList</item>\n\t\t\t<item>AttributeList</item>\n\t\t\t<item>AttributeList</item>\n\t\t\t<item>AttributeListImpl</item>\n\t\t\t<item>AttributeModificationException</item>\n\t\t\t<item>AttributeNotFoundException</item>\n\t\t\t<item>AttributeSet</item>\n\t\t\t<item>AttributeSet</item>\n\t\t\t<item>AttributeSet.CharacterAttribute</item>\n\t\t\t<item>AttributeSet.ColorAttribute</item>\n\t\t\t<item>AttributeSet.FontAttribute</item>\n\t\t\t<item>AttributeSet.ParagraphAttribute</item>\n\t\t\t<item>AttributeSetUtilities</item>\n\t\t\t<item>AttributeValueExp</item>\n\t\t\t<item>AttributedCharacterIterator</item>\n\t\t\t<item>AttributedCharacterIterator.Attribute</item>\n\t\t\t<item>AttributedString</item>\n\t\t\t<item>Attributes</item>\n\t\t\t<item>Attributes</item>\n\t\t\t<item>Attributes</item>\n\t\t\t<item>Attributes.Name</item>\n\t\t\t<item>Attributes2</item>\n\t\t\t<item>Attributes2Impl</item>\n\t\t\t<item>AttributesImpl</item>\n\t\t\t<item>AudioClip</item>\n\t\t\t<item>AudioFileFormat</item>\n\t\t\t<item>AudioFileFormat.Type</item>\n\t\t\t<item>AudioFileReader</item>\n\t\t\t<item>AudioFileWriter</item>\n\t\t\t<item>AudioFormat</item>\n\t\t\t<item>AudioFormat.Encoding</item>\n\t\t\t<item>AudioInputStream</item>\n\t\t\t<item>AudioPermission</item>\n\t\t\t<item>AudioSystem</item>\n\t\t\t<item>AuthPermission</item>\n\t\t\t<item>AuthProvider</item>\n\t\t\t<item>AuthenticationException</item>\n\t\t\t<item>AuthenticationException</item>\n\t\t\t<item>AuthenticationNotSupportedException</item>\n\t\t\t<item>Authenticator</item>\n\t\t\t<item>Authenticator.RequestorType</item>\n\t\t\t<item>AuthorizeCallback</item>\n\t\t\t<item>Autoscroll</item>\n\t\t\t<item>BAD_CONTEXT</item>\n\t\t\t<item>BAD_INV_ORDER</item>\n\t\t\t<item>BAD_OPERATION</item>\n\t\t\t<item>BAD_PARAM</item>\n\t\t\t<item>BAD_POLICY</item>\n\t\t\t<item>BAD_POLICY_TYPE</item>\n\t\t\t<item>BAD_POLICY_VALUE</item>\n\t\t\t<item>BAD_QOS</item>\n\t\t\t<item>BAD_TYPECODE</item>\n\t\t\t<item>BMPImageWriteParam</item>\n\t\t\t<item>BackingStoreException</item>\n\t\t\t<item>BadAttributeValueExpException</item>\n\t\t\t<item>BadBinaryOpValueExpException</item>\n\t\t\t<item>BadKind</item>\n\t\t\t<item>BadLocationException</item>\n\t\t\t<item>BadPaddingException</item>\n\t\t\t<item>BadStringOperationException</item>\n\t\t\t<item>BandCombineOp</item>\n\t\t\t<item>BandedSampleModel</item>\n\t\t\t<item>BaseRowSet</item>\n\t\t\t<item>BasicArrowButton</item>\n\t\t\t<item>BasicAttribute</item>\n\t\t\t<item>BasicAttributes</item>\n\t\t\t<item>BasicBorders</item>\n\t\t\t<item>BasicBorders.ButtonBorder</item>\n\t\t\t<item>BasicBorders.FieldBorder</item>\n\t\t\t<item>BasicBorders.MarginBorder</item>\n\t\t\t<item>BasicBorders.MenuBarBorder</item>\n\t\t\t<item>BasicBorders.RadioButtonBorder</item>\n\t\t\t<item>BasicBorders.RolloverButtonBorder</item>\n\t\t\t<item>BasicBorders.SplitPaneBorder</item>\n\t\t\t<item>BasicBorders.ToggleButtonBorder</item>\n\t\t\t<item>BasicButtonListener</item>\n\t\t\t<item>BasicButtonUI</item>\n\t\t\t<item>BasicCheckBoxMenuItemUI</item>\n\t\t\t<item>BasicCheckBoxUI</item>\n\t\t\t<item>BasicColorChooserUI</item>\n\t\t\t<item>BasicComboBoxEditor</item>\n\t\t\t<item>BasicComboBoxEditor.UIResource</item>\n\t\t\t<item>BasicComboBoxRenderer</item>\n\t\t\t<item>BasicComboBoxRenderer.UIResource</item>\n\t\t\t<item>BasicComboBoxUI</item>\n\t\t\t<item>BasicComboPopup</item>\n\t\t\t<item>BasicControl</item>\n\t\t\t<item>BasicDesktopIconUI</item>\n\t\t\t<item>BasicDesktopPaneUI</item>\n\t\t\t<item>BasicDirectoryModel</item>\n\t\t\t<item>BasicEditorPaneUI</item>\n\t\t\t<item>BasicFileChooserUI</item>\n\t\t\t<item>BasicFormattedTextFieldUI</item>\n\t\t\t<item>BasicGraphicsUtils</item>\n\t\t\t<item>BasicHTML</item>\n\t\t\t<item>BasicIconFactory</item>\n\t\t\t<item>BasicInternalFrameTitlePane</item>\n\t\t\t<item>BasicInternalFrameUI</item>\n\t\t\t<item>BasicLabelUI</item>\n\t\t\t<item>BasicListUI</item>\n\t\t\t<item>BasicLookAndFeel</item>\n\t\t\t<item>BasicMenuBarUI</item>\n\t\t\t<item>BasicMenuItemUI</item>\n\t\t\t<item>BasicMenuUI</item>\n\t\t\t<item>BasicOptionPaneUI</item>\n\t\t\t<item>BasicOptionPaneUI.ButtonAreaLayout</item>\n\t\t\t<item>BasicPanelUI</item>\n\t\t\t<item>BasicPasswordFieldUI</item>\n\t\t\t<item>BasicPermission</item>\n\t\t\t<item>BasicPopupMenuSeparatorUI</item>\n\t\t\t<item>BasicPopupMenuUI</item>\n\t\t\t<item>BasicProgressBarUI</item>\n\t\t\t<item>BasicRadioButtonMenuItemUI</item>\n\t\t\t<item>BasicRadioButtonUI</item>\n\t\t\t<item>BasicRootPaneUI</item>\n\t\t\t<item>BasicScrollBarUI</item>\n\t\t\t<item>BasicScrollPaneUI</item>\n\t\t\t<item>BasicSeparatorUI</item>\n\t\t\t<item>BasicSliderUI</item>\n\t\t\t<item>BasicSpinnerUI</item>\n\t\t\t<item>BasicSplitPaneDivider</item>\n\t\t\t<item>BasicSplitPaneUI</item>\n\t\t\t<item>BasicStroke</item>\n\t\t\t<item>BasicTabbedPaneUI</item>\n\t\t\t<item>BasicTableHeaderUI</item>\n\t\t\t<item>BasicTableUI</item>\n\t\t\t<item>BasicTextAreaUI</item>\n\t\t\t<item>BasicTextFieldUI</item>\n\t\t\t<item>BasicTextPaneUI</item>\n\t\t\t<item>BasicTextUI</item>\n\t\t\t<item>BasicTextUI.BasicCaret</item>\n\t\t\t<item>BasicTextUI.BasicHighlighter</item>\n\t\t\t<item>BasicToggleButtonUI</item>\n\t\t\t<item>BasicToolBarSeparatorUI</item>\n\t\t\t<item>BasicToolBarUI</item>\n\t\t\t<item>BasicToolTipUI</item>\n\t\t\t<item>BasicTreeUI</item>\n\t\t\t<item>BasicViewportUI</item>\n\t\t\t<item>BatchUpdateException</item>\n\t\t\t<item>BeanContext</item>\n\t\t\t<item>BeanContextChild</item>\n\t\t\t<item>BeanContextChildComponentProxy</item>\n\t\t\t<item>BeanContextChildSupport</item>\n\t\t\t<item>BeanContextContainerProxy</item>\n\t\t\t<item>BeanContextEvent</item>\n\t\t\t<item>BeanContextMembershipEvent</item>\n\t\t\t<item>BeanContextMembershipListener</item>\n\t\t\t<item>BeanContextProxy</item>\n\t\t\t<item>BeanContextServiceAvailableEvent</item>\n\t\t\t<item>BeanContextServiceProvider</item>\n\t\t\t<item>BeanContextServiceProviderBeanInfo</item>\n\t\t\t<item>BeanContextServiceRevokedEvent</item>\n\t\t\t<item>BeanContextServiceRevokedListener</item>\n\t\t\t<item>BeanContextServices</item>\n\t\t\t<item>BeanContextServicesListener</item>\n\t\t\t<item>BeanContextServicesSupport</item>\n\t\t\t<item>BeanContextServicesSupport.BCSSServiceProvider</item>\n\t\t\t<item>BeanContextSupport</item>\n\t\t\t<item>BeanContextSupport.BCSIterator</item>\n\t\t\t<item>BeanDescriptor</item>\n\t\t\t<item>BeanInfo</item>\n\t\t\t<item>Beans</item>\n\t\t\t<item>BevelBorder</item>\n\t\t\t<item>Bidi</item>\n\t\t\t<item>BigDecimal</item>\n\t\t\t<item>BigInteger</item>\n\t\t\t<item>BinaryRefAddr</item>\n\t\t\t<item>BindException</item>\n\t\t\t<item>Binding</item>\n\t\t\t<item>Binding</item>\n\t\t\t<item>BindingHelper</item>\n\t\t\t<item>BindingHolder</item>\n\t\t\t<item>BindingIterator</item>\n\t\t\t<item>BindingIteratorHelper</item>\n\t\t\t<item>BindingIteratorHolder</item>\n\t\t\t<item>BindingIteratorOperations</item>\n\t\t\t<item>BindingIteratorPOA</item>\n\t\t\t<item>BindingListHelper</item>\n\t\t\t<item>BindingListHolder</item>\n\t\t\t<item>BindingType</item>\n\t\t\t<item>BindingTypeHelper</item>\n\t\t\t<item>BindingTypeHolder</item>\n\t\t\t<item>BitSet</item>\n\t\t\t<item>Blob</item>\n\t\t\t<item>BlockView</item>\n\t\t\t<item>BlockingQueue</item>\n\t\t\t<item>Book</item>\n\t\t\t<item>Boolean</item>\n\t\t\t<item>BooleanControl</item>\n\t\t\t<item>BooleanControl.Type</item>\n\t\t\t<item>BooleanHolder</item>\n\t\t\t<item>BooleanSeqHelper</item>\n\t\t\t<item>BooleanSeqHolder</item>\n\t\t\t<item>Border</item>\n\t\t\t<item>BorderFactory</item>\n\t\t\t<item>BorderLayout</item>\n\t\t\t<item>BorderUIResource</item>\n\t\t\t<item>BorderUIResource.BevelBorderUIResource</item>\n\t\t\t<item>BorderUIResource.CompoundBorderUIResource</item>\n\t\t\t<item>BorderUIResource.EmptyBorderUIResource</item>\n\t\t\t<item>BorderUIResource.EtchedBorderUIResource</item>\n\t\t\t<item>BorderUIResource.LineBorderUIResource</item>\n\t\t\t<item>BorderUIResource.MatteBorderUIResource</item>\n\t\t\t<item>BorderUIResource.TitledBorderUIResource</item>\n\t\t\t<item>BoundedRangeModel</item>\n\t\t\t<item>Bounds</item>\n\t\t\t<item>Bounds</item>\n\t\t\t<item>Box</item>\n\t\t\t<item>Box.Filler</item>\n\t\t\t<item>BoxLayout</item>\n\t\t\t<item>BoxView</item>\n\t\t\t<item>BoxedValueHelper</item>\n\t\t\t<item>BreakIterator</item>\n\t\t\t<item>BrokenBarrierException</item>\n\t\t\t<item>Buffer</item>\n\t\t\t<item>BufferCapabilities</item>\n\t\t\t<item>BufferCapabilities.FlipContents</item>\n\t\t\t<item>BufferOverflowException</item>\n\t\t\t<item>BufferStrategy</item>\n\t\t\t<item>BufferUnderflowException</item>\n\t\t\t<item>BufferedImage</item>\n\t\t\t<item>BufferedImageFilter</item>\n\t\t\t<item>BufferedImageOp</item>\n\t\t\t<item>BufferedInputStream</item>\n\t\t\t<item>BufferedOutputStream</item>\n\t\t\t<item>BufferedReader</item>\n\t\t\t<item>BufferedWriter</item>\n\t\t\t<item>Button</item>\n\t\t\t<item>ButtonGroup</item>\n\t\t\t<item>ButtonModel</item>\n\t\t\t<item>ButtonUI</item>\n\t\t\t<item>Byte</item>\n\t\t\t<item>ByteArrayInputStream</item>\n\t\t\t<item>ByteArrayOutputStream</item>\n\t\t\t<item>ByteBuffer</item>\n\t\t\t<item>ByteChannel</item>\n\t\t\t<item>ByteHolder</item>\n\t\t\t<item>ByteLookupTable</item>\n\t\t\t<item>ByteOrder</item>\n\t\t\t<item>CDATASection</item>\n\t\t\t<item>CMMException</item>\n\t\t\t<item>CODESET_INCOMPATIBLE</item>\n\t\t\t<item>COMM_FAILURE</item>\n\t\t\t<item>CRC32</item>\n\t\t\t<item>CRL</item>\n\t\t\t<item>CRLException</item>\n\t\t\t<item>CRLSelector</item>\n\t\t\t<item>CSS</item>\n\t\t\t<item>CSS.Attribute</item>\n\t\t\t<item>CTX_RESTRICT_SCOPE</item>\n\t\t\t<item>CacheRequest</item>\n\t\t\t<item>CacheResponse</item>\n\t\t\t<item>CachedRowSet</item>\n\t\t\t<item>Calendar</item>\n\t\t\t<item>Callable</item>\n\t\t\t<item>CallableStatement</item>\n\t\t\t<item>Callback</item>\n\t\t\t<item>CallbackHandler</item>\n\t\t\t<item>CancelablePrintJob</item>\n\t\t\t<item>CancellationException</item>\n\t\t\t<item>CancelledKeyException</item>\n\t\t\t<item>CannotProceed</item>\n\t\t\t<item>CannotProceedException</item>\n\t\t\t<item>CannotProceedHelper</item>\n\t\t\t<item>CannotProceedHolder</item>\n\t\t\t<item>CannotRedoException</item>\n\t\t\t<item>CannotUndoException</item>\n\t\t\t<item>Canvas</item>\n\t\t\t<item>CardLayout</item>\n\t\t\t<item>Caret</item>\n\t\t\t<item>CaretEvent</item>\n\t\t\t<item>CaretListener</item>\n\t\t\t<item>CellEditor</item>\n\t\t\t<item>CellEditorListener</item>\n\t\t\t<item>CellRendererPane</item>\n\t\t\t<item>CertPath</item>\n\t\t\t<item>CertPath.CertPathRep</item>\n\t\t\t<item>CertPathBuilder</item>\n\t\t\t<item>CertPathBuilderException</item>\n\t\t\t<item>CertPathBuilderResult</item>\n\t\t\t<item>CertPathBuilderSpi</item>\n\t\t\t<item>CertPathParameters</item>\n\t\t\t<item>CertPathTrustManagerParameters</item>\n\t\t\t<item>CertPathValidator</item>\n\t\t\t<item>CertPathValidatorException</item>\n\t\t\t<item>CertPathValidatorResult</item>\n\t\t\t<item>CertPathValidatorSpi</item>\n\t\t\t<item>CertSelector</item>\n\t\t\t<item>CertStore</item>\n\t\t\t<item>CertStoreException</item>\n\t\t\t<item>CertStoreParameters</item>\n\t\t\t<item>CertStoreSpi</item>\n\t\t\t<item>Certificate</item>\n\t\t\t<item>Certificate</item>\n\t\t\t<item>Certificate</item>\n\t\t\t<item>Certificate.CertificateRep</item>\n\t\t\t<item>CertificateEncodingException</item>\n\t\t\t<item>CertificateEncodingException</item>\n\t\t\t<item>CertificateException</item>\n\t\t\t<item>CertificateException</item>\n\t\t\t<item>CertificateExpiredException</item>\n\t\t\t<item>CertificateExpiredException</item>\n\t\t\t<item>CertificateFactory</item>\n\t\t\t<item>CertificateFactorySpi</item>\n\t\t\t<item>CertificateNotYetValidException</item>\n\t\t\t<item>CertificateNotYetValidException</item>\n\t\t\t<item>CertificateParsingException</item>\n\t\t\t<item>CertificateParsingException</item>\n\t\t\t<item>ChangeEvent</item>\n\t\t\t<item>ChangeListener</item>\n\t\t\t<item>ChangedCharSetException</item>\n\t\t\t<item>Channel</item>\n\t\t\t<item>ChannelBinding</item>\n\t\t\t<item>Channels</item>\n\t\t\t<item>CharArrayReader</item>\n\t\t\t<item>CharArrayWriter</item>\n\t\t\t<item>CharBuffer</item>\n\t\t\t<item>CharConversionException</item>\n\t\t\t<item>CharHolder</item>\n\t\t\t<item>CharSeqHelper</item>\n\t\t\t<item>CharSeqHolder</item>\n\t\t\t<item>CharSequence</item>\n\t\t\t<item>Character</item>\n\t\t\t<item>Character.Subset</item>\n\t\t\t<item>Character.UnicodeBlock</item>\n\t\t\t<item>CharacterCodingException</item>\n\t\t\t<item>CharacterData</item>\n\t\t\t<item>CharacterIterator</item>\n\t\t\t<item>Charset</item>\n\t\t\t<item>CharsetDecoder</item>\n\t\t\t<item>CharsetEncoder</item>\n\t\t\t<item>CharsetProvider</item>\n\t\t\t<item>Checkbox</item>\n\t\t\t<item>CheckboxGroup</item>\n\t\t\t<item>CheckboxMenuItem</item>\n\t\t\t<item>CheckedInputStream</item>\n\t\t\t<item>CheckedOutputStream</item>\n\t\t\t<item>Checksum</item>\n\t\t\t<item>Choice</item>\n\t\t\t<item>ChoiceCallback</item>\n\t\t\t<item>ChoiceFormat</item>\n\t\t\t<item>Chromaticity</item>\n\t\t\t<item>Cipher</item>\n\t\t\t<item>CipherInputStream</item>\n\t\t\t<item>CipherOutputStream</item>\n\t\t\t<item>CipherSpi</item>\n\t\t\t<item>Class</item>\n\t\t\t<item>ClassCastException</item>\n\t\t\t<item>ClassCircularityError</item>\n\t\t\t<item>ClassDefinition</item>\n\t\t\t<item>ClassDesc</item>\n\t\t\t<item>ClassFileTransformer</item>\n\t\t\t<item>ClassFormatError</item>\n\t\t\t<item>ClassLoader</item>\n\t\t\t<item>ClassLoaderRepository</item>\n\t\t\t<item>ClassLoadingMXBean</item>\n\t\t\t<item>ClassNotFoundException</item>\n\t\t\t<item>ClientRequestInfo</item>\n\t\t\t<item>ClientRequestInfoOperations</item>\n\t\t\t<item>ClientRequestInterceptor</item>\n\t\t\t<item>ClientRequestInterceptorOperations</item>\n\t\t\t<item>Clip</item>\n\t\t\t<item>Clipboard</item>\n\t\t\t<item>ClipboardOwner</item>\n\t\t\t<item>Clob</item>\n\t\t\t<item>CloneNotSupportedException</item>\n\t\t\t<item>Cloneable</item>\n\t\t\t<item>Closeable</item>\n\t\t\t<item>ClosedByInterruptException</item>\n\t\t\t<item>ClosedChannelException</item>\n\t\t\t<item>ClosedSelectorException</item>\n\t\t\t<item>CodeSets</item>\n\t\t\t<item>CodeSigner</item>\n\t\t\t<item>CodeSource</item>\n\t\t\t<item>Codec</item>\n\t\t\t<item>CodecFactory</item>\n\t\t\t<item>CodecFactoryHelper</item>\n\t\t\t<item>CodecFactoryOperations</item>\n\t\t\t<item>CodecOperations</item>\n\t\t\t<item>CoderMalfunctionError</item>\n\t\t\t<item>CoderResult</item>\n\t\t\t<item>CodingErrorAction</item>\n\t\t\t<item>CollationElementIterator</item>\n\t\t\t<item>CollationKey</item>\n\t\t\t<item>Collator</item>\n\t\t\t<item>Collection</item>\n\t\t\t<item>CollectionCertStoreParameters</item>\n\t\t\t<item>Collections</item>\n\t\t\t<item>Color</item>\n\t\t\t<item>ColorChooserComponentFactory</item>\n\t\t\t<item>ColorChooserUI</item>\n\t\t\t<item>ColorConvertOp</item>\n\t\t\t<item>ColorModel</item>\n\t\t\t<item>ColorSelectionModel</item>\n\t\t\t<item>ColorSpace</item>\n\t\t\t<item>ColorSupported</item>\n\t\t\t<item>ColorType</item>\n\t\t\t<item>ColorUIResource</item>\n\t\t\t<item>ComboBoxEditor</item>\n\t\t\t<item>ComboBoxModel</item>\n\t\t\t<item>ComboBoxUI</item>\n\t\t\t<item>ComboPopup</item>\n\t\t\t<item>Comment</item>\n\t\t\t<item>CommunicationException</item>\n\t\t\t<item>Comparable</item>\n\t\t\t<item>Comparator</item>\n\t\t\t<item>CompilationMXBean</item>\n\t\t\t<item>Compiler</item>\n\t\t\t<item>CompletionService</item>\n\t\t\t<item>CompletionStatus</item>\n\t\t\t<item>CompletionStatusHelper</item>\n\t\t\t<item>Component</item>\n\t\t\t<item>ComponentAdapter</item>\n\t\t\t<item>ComponentColorModel</item>\n\t\t\t<item>ComponentEvent</item>\n\t\t\t<item>ComponentIdHelper</item>\n\t\t\t<item>ComponentInputMap</item>\n\t\t\t<item>ComponentInputMapUIResource</item>\n\t\t\t<item>ComponentListener</item>\n\t\t\t<item>ComponentOrientation</item>\n\t\t\t<item>ComponentSampleModel</item>\n\t\t\t<item>ComponentUI</item>\n\t\t\t<item>ComponentView</item>\n\t\t\t<item>Composite</item>\n\t\t\t<item>CompositeContext</item>\n\t\t\t<item>CompositeData</item>\n\t\t\t<item>CompositeDataSupport</item>\n\t\t\t<item>CompositeName</item>\n\t\t\t<item>CompositeType</item>\n\t\t\t<item>CompositeView</item>\n\t\t\t<item>CompoundBorder</item>\n\t\t\t<item>CompoundControl</item>\n\t\t\t<item>CompoundControl.Type</item>\n\t\t\t<item>CompoundEdit</item>\n\t\t\t<item>CompoundName</item>\n\t\t\t<item>Compression</item>\n\t\t\t<item>ConcurrentHashMap</item>\n\t\t\t<item>ConcurrentLinkedQueue</item>\n\t\t\t<item>ConcurrentMap</item>\n\t\t\t<item>ConcurrentModificationException</item>\n\t\t\t<item>Condition</item>\n\t\t\t<item>Configuration</item>\n\t\t\t<item>ConfigurationException</item>\n\t\t\t<item>ConfirmationCallback</item>\n\t\t\t<item>ConnectException</item>\n\t\t\t<item>ConnectException</item>\n\t\t\t<item>ConnectIOException</item>\n\t\t\t<item>Connection</item>\n\t\t\t<item>ConnectionEvent</item>\n\t\t\t<item>ConnectionEventListener</item>\n\t\t\t<item>ConnectionPendingException</item>\n\t\t\t<item>ConnectionPoolDataSource</item>\n\t\t\t<item>ConsoleHandler</item>\n\t\t\t<item>Constructor</item>\n\t\t\t<item>Container</item>\n\t\t\t<item>ContainerAdapter</item>\n\t\t\t<item>ContainerEvent</item>\n\t\t\t<item>ContainerListener</item>\n\t\t\t<item>ContainerOrderFocusTraversalPolicy</item>\n\t\t\t<item>ContentHandler</item>\n\t\t\t<item>ContentHandler</item>\n\t\t\t<item>ContentHandlerFactory</item>\n\t\t\t<item>ContentModel</item>\n\t\t\t<item>Context</item>\n\t\t\t<item>Context</item>\n\t\t\t<item>ContextList</item>\n\t\t\t<item>ContextNotEmptyException</item>\n\t\t\t<item>ContextualRenderedImageFactory</item>\n\t\t\t<item>Control</item>\n\t\t\t<item>Control</item>\n\t\t\t<item>Control.Type</item>\n\t\t\t<item>ControlFactory</item>\n\t\t\t<item>ControllerEventListener</item>\n\t\t\t<item>ConvolveOp</item>\n\t\t\t<item>CookieHandler</item>\n\t\t\t<item>CookieHolder</item>\n\t\t\t<item>Copies</item>\n\t\t\t<item>CopiesSupported</item>\n\t\t\t<item>CopyOnWriteArrayList</item>\n\t\t\t<item>CopyOnWriteArraySet</item>\n\t\t\t<item>CountDownLatch</item>\n\t\t\t<item>CounterMonitor</item>\n\t\t\t<item>CounterMonitorMBean</item>\n\t\t\t<item>CredentialException</item>\n\t\t\t<item>CredentialExpiredException</item>\n\t\t\t<item>CredentialNotFoundException</item>\n\t\t\t<item>CropImageFilter</item>\n\t\t\t<item>CubicCurve2D</item>\n\t\t\t<item>CubicCurve2D.Double</item>\n\t\t\t<item>CubicCurve2D.Float</item>\n\t\t\t<item>Currency</item>\n\t\t\t<item>Current</item>\n\t\t\t<item>Current</item>\n\t\t\t<item>Current</item>\n\t\t\t<item>CurrentHelper</item>\n\t\t\t<item>CurrentHelper</item>\n\t\t\t<item>CurrentHelper</item>\n\t\t\t<item>CurrentHolder</item>\n\t\t\t<item>CurrentOperations</item>\n\t\t\t<item>CurrentOperations</item>\n\t\t\t<item>CurrentOperations</item>\n\t\t\t<item>Cursor</item>\n\t\t\t<item>CustomMarshal</item>\n\t\t\t<item>CustomValue</item>\n\t\t\t<item>Customizer</item>\n\t\t\t<item>CyclicBarrier</item>\n\t\t\t<item>DATA_CONVERSION</item>\n\t\t\t<item>DESKeySpec</item>\n\t\t\t<item>DESedeKeySpec</item>\n\t\t\t<item>DGC</item>\n\t\t\t<item>DHGenParameterSpec</item>\n\t\t\t<item>DHKey</item>\n\t\t\t<item>DHParameterSpec</item>\n\t\t\t<item>DHPrivateKey</item>\n\t\t\t<item>DHPrivateKeySpec</item>\n\t\t\t<item>DHPublicKey</item>\n\t\t\t<item>DHPublicKeySpec</item>\n\t\t\t<item>DISCARDING</item>\n\t\t\t<item>DOMConfiguration</item>\n\t\t\t<item>DOMError</item>\n\t\t\t<item>DOMErrorHandler</item>\n\t\t\t<item>DOMException</item>\n\t\t\t<item>DOMImplementation</item>\n\t\t\t<item>DOMImplementationLS</item>\n\t\t\t<item>DOMImplementationList</item>\n\t\t\t<item>DOMImplementationRegistry</item>\n\t\t\t<item>DOMImplementationSource</item>\n\t\t\t<item>DOMLocator</item>\n\t\t\t<item>DOMLocator</item>\n\t\t\t<item>DOMResult</item>\n\t\t\t<item>DOMSource</item>\n\t\t\t<item>DOMStringList</item>\n\t\t\t<item>DSAKey</item>\n\t\t\t<item>DSAKeyPairGenerator</item>\n\t\t\t<item>DSAParameterSpec</item>\n\t\t\t<item>DSAParams</item>\n\t\t\t<item>DSAPrivateKey</item>\n\t\t\t<item>DSAPrivateKeySpec</item>\n\t\t\t<item>DSAPublicKey</item>\n\t\t\t<item>DSAPublicKeySpec</item>\n\t\t\t<item>DTD</item>\n\t\t\t<item>DTDConstants</item>\n\t\t\t<item>DTDHandler</item>\n\t\t\t<item>DataBuffer</item>\n\t\t\t<item>DataBufferByte</item>\n\t\t\t<item>DataBufferDouble</item>\n\t\t\t<item>DataBufferFloat</item>\n\t\t\t<item>DataBufferInt</item>\n\t\t\t<item>DataBufferShort</item>\n\t\t\t<item>DataBufferUShort</item>\n\t\t\t<item>DataFlavor</item>\n\t\t\t<item>DataFormatException</item>\n\t\t\t<item>DataInput</item>\n\t\t\t<item>DataInputStream</item>\n\t\t\t<item>DataInputStream</item>\n\t\t\t<item>DataLine</item>\n\t\t\t<item>DataLine.Info</item>\n\t\t\t<item>DataOutput</item>\n\t\t\t<item>DataOutputStream</item>\n\t\t\t<item>DataOutputStream</item>\n\t\t\t<item>DataSource</item>\n\t\t\t<item>DataTruncation</item>\n\t\t\t<item>DatabaseMetaData</item>\n\t\t\t<item>DatagramChannel</item>\n\t\t\t<item>DatagramPacket</item>\n\t\t\t<item>DatagramSocket</item>\n\t\t\t<item>DatagramSocketImpl</item>\n\t\t\t<item>DatagramSocketImplFactory</item>\n\t\t\t<item>DatatypeConfigurationException</item>\n\t\t\t<item>DatatypeConstants</item>\n\t\t\t<item>DatatypeConstants.Field</item>\n\t\t\t<item>DatatypeFactory</item>\n\t\t\t<item>Date</item>\n\t\t\t<item>Date</item>\n\t\t\t<item>DateFormat</item>\n\t\t\t<item>DateFormat.Field</item>\n\t\t\t<item>DateFormatSymbols</item>\n\t\t\t<item>DateFormatter</item>\n\t\t\t<item>DateTimeAtCompleted</item>\n\t\t\t<item>DateTimeAtCreation</item>\n\t\t\t<item>DateTimeAtProcessing</item>\n\t\t\t<item>DateTimeSyntax</item>\n\t\t\t<item>DebugGraphics</item>\n\t\t\t<item>DecimalFormat</item>\n\t\t\t<item>DecimalFormatSymbols</item>\n\t\t\t<item>DeclHandler</item>\n\t\t\t<item>DefaultBoundedRangeModel</item>\n\t\t\t<item>DefaultButtonModel</item>\n\t\t\t<item>DefaultCaret</item>\n\t\t\t<item>DefaultCellEditor</item>\n\t\t\t<item>DefaultColorSelectionModel</item>\n\t\t\t<item>DefaultComboBoxModel</item>\n\t\t\t<item>DefaultDesktopManager</item>\n\t\t\t<item>DefaultEditorKit</item>\n\t\t\t<item>DefaultEditorKit.BeepAction</item>\n\t\t\t<item>DefaultEditorKit.CopyAction</item>\n\t\t\t<item>DefaultEditorKit.CutAction</item>\n\t\t\t<item>DefaultEditorKit.DefaultKeyTypedAction</item>\n\t\t\t<item>DefaultEditorKit.InsertBreakAction</item>\n\t\t\t<item>DefaultEditorKit.InsertContentAction</item>\n\t\t\t<item>DefaultEditorKit.InsertTabAction</item>\n\t\t\t<item>DefaultEditorKit.PasteAction</item>\n\t\t\t<item>DefaultFocusManager</item>\n\t\t\t<item>DefaultFocusTraversalPolicy</item>\n\t\t\t<item>DefaultFormatter</item>\n\t\t\t<item>DefaultFormatterFactory</item>\n\t\t\t<item>DefaultHandler</item>\n\t\t\t<item>DefaultHandler2</item>\n\t\t\t<item>DefaultHighlighter</item>\n\t\t\t<item>DefaultHighlighter.DefaultHighlightPainter</item>\n\t\t\t<item>DefaultKeyboardFocusManager</item>\n\t\t\t<item>DefaultListCellRenderer</item>\n\t\t\t<item>DefaultListCellRenderer.UIResource</item>\n\t\t\t<item>DefaultListModel</item>\n\t\t\t<item>DefaultListSelectionModel</item>\n\t\t\t<item>DefaultLoaderRepository</item>\n\t\t\t<item>DefaultLoaderRepository</item>\n\t\t\t<item>DefaultMenuLayout</item>\n\t\t\t<item>DefaultMetalTheme</item>\n\t\t\t<item>DefaultMutableTreeNode</item>\n\t\t\t<item>DefaultPersistenceDelegate</item>\n\t\t\t<item>DefaultSingleSelectionModel</item>\n\t\t\t<item>DefaultStyledDocument</item>\n\t\t\t<item>DefaultStyledDocument.AttributeUndoableEdit</item>\n\t\t\t<item>DefaultStyledDocument.ElementSpec</item>\n\t\t\t<item>DefaultTableCellRenderer</item>\n\t\t\t<item>DefaultTableCellRenderer.UIResource</item>\n\t\t\t<item>DefaultTableColumnModel</item>\n\t\t\t<item>DefaultTableModel</item>\n\t\t\t<item>DefaultTextUI</item>\n\t\t\t<item>DefaultTreeCellEditor</item>\n\t\t\t<item>DefaultTreeCellRenderer</item>\n\t\t\t<item>DefaultTreeModel</item>\n\t\t\t<item>DefaultTreeSelectionModel</item>\n\t\t\t<item>DefinitionKind</item>\n\t\t\t<item>DefinitionKindHelper</item>\n\t\t\t<item>Deflater</item>\n\t\t\t<item>DeflaterOutputStream</item>\n\t\t\t<item>DelayQueue</item>\n\t\t\t<item>Delayed</item>\n\t\t\t<item>Delegate</item>\n\t\t\t<item>Delegate</item>\n\t\t\t<item>Delegate</item>\n\t\t\t<item>DelegationPermission</item>\n\t\t\t<item>Deprecated</item>\n\t\t\t<item>Descriptor</item>\n\t\t\t<item>DescriptorAccess</item>\n\t\t\t<item>DescriptorSupport</item>\n\t\t\t<item>DesignMode</item>\n\t\t\t<item>DesktopIconUI</item>\n\t\t\t<item>DesktopManager</item>\n\t\t\t<item>DesktopPaneUI</item>\n\t\t\t<item>Destination</item>\n\t\t\t<item>DestroyFailedException</item>\n\t\t\t<item>Destroyable</item>\n\t\t\t<item>Dialog</item>\n\t\t\t<item>Dictionary</item>\n\t\t\t<item>DigestException</item>\n\t\t\t<item>DigestInputStream</item>\n\t\t\t<item>DigestOutputStream</item>\n\t\t\t<item>Dimension</item>\n\t\t\t<item>Dimension2D</item>\n\t\t\t<item>DimensionUIResource</item>\n\t\t\t<item>DirContext</item>\n\t\t\t<item>DirObjectFactory</item>\n\t\t\t<item>DirStateFactory</item>\n\t\t\t<item>DirStateFactory.Result</item>\n\t\t\t<item>DirectColorModel</item>\n\t\t\t<item>DirectoryManager</item>\n\t\t\t<item>DisplayMode</item>\n\t\t\t<item>DnDConstants</item>\n\t\t\t<item>Doc</item>\n\t\t\t<item>DocAttribute</item>\n\t\t\t<item>DocAttributeSet</item>\n\t\t\t<item>DocFlavor</item>\n\t\t\t<item>DocFlavor.BYTE_ARRAY</item>\n\t\t\t<item>DocFlavor.CHAR_ARRAY</item>\n\t\t\t<item>DocFlavor.INPUT_STREAM</item>\n\t\t\t<item>DocFlavor.READER</item>\n\t\t\t<item>DocFlavor.SERVICE_FORMATTED</item>\n\t\t\t<item>DocFlavor.STRING</item>\n\t\t\t<item>DocFlavor.URL</item>\n\t\t\t<item>DocPrintJob</item>\n\t\t\t<item>Document</item>\n\t\t\t<item>Document</item>\n\t\t\t<item>DocumentBuilder</item>\n\t\t\t<item>DocumentBuilderFactory</item>\n\t\t\t<item>DocumentEvent</item>\n\t\t\t<item>DocumentEvent.ElementChange</item>\n\t\t\t<item>DocumentEvent.EventType</item>\n\t\t\t<item>DocumentFilter</item>\n\t\t\t<item>DocumentFilter.FilterBypass</item>\n\t\t\t<item>DocumentFragment</item>\n\t\t\t<item>DocumentHandler</item>\n\t\t\t<item>DocumentListener</item>\n\t\t\t<item>DocumentName</item>\n\t\t\t<item>DocumentParser</item>\n\t\t\t<item>DocumentType</item>\n\t\t\t<item>Documented</item>\n\t\t\t<item>DomainCombiner</item>\n\t\t\t<item>DomainManager</item>\n\t\t\t<item>DomainManagerOperations</item>\n\t\t\t<item>Double</item>\n\t\t\t<item>DoubleBuffer</item>\n\t\t\t<item>DoubleHolder</item>\n\t\t\t<item>DoubleSeqHelper</item>\n\t\t\t<item>DoubleSeqHolder</item>\n\t\t\t<item>DragGestureEvent</item>\n\t\t\t<item>DragGestureListener</item>\n\t\t\t<item>DragGestureRecognizer</item>\n\t\t\t<item>DragSource</item>\n\t\t\t<item>DragSourceAdapter</item>\n\t\t\t<item>DragSourceContext</item>\n\t\t\t<item>DragSourceDragEvent</item>\n\t\t\t<item>DragSourceDropEvent</item>\n\t\t\t<item>DragSourceEvent</item>\n\t\t\t<item>DragSourceListener</item>\n\t\t\t<item>DragSourceMotionListener</item>\n\t\t\t<item>Driver</item>\n\t\t\t<item>DriverManager</item>\n\t\t\t<item>DriverPropertyInfo</item>\n\t\t\t<item>DropTarget</item>\n\t\t\t<item>DropTarget.DropTargetAutoScroller</item>\n\t\t\t<item>DropTargetAdapter</item>\n\t\t\t<item>DropTargetContext</item>\n\t\t\t<item>DropTargetDragEvent</item>\n\t\t\t<item>DropTargetDropEvent</item>\n\t\t\t<item>DropTargetEvent</item>\n\t\t\t<item>DropTargetListener</item>\n\t\t\t<item>DuplicateFormatFlagsException</item>\n\t\t\t<item>DuplicateName</item>\n\t\t\t<item>DuplicateNameHelper</item>\n\t\t\t<item>Duration</item>\n\t\t\t<item>DynAny</item>\n\t\t\t<item>DynAny</item>\n\t\t\t<item>DynAnyFactory</item>\n\t\t\t<item>DynAnyFactoryHelper</item>\n\t\t\t<item>DynAnyFactoryOperations</item>\n\t\t\t<item>DynAnyHelper</item>\n\t\t\t<item>DynAnyOperations</item>\n\t\t\t<item>DynAnySeqHelper</item>\n\t\t\t<item>DynArray</item>\n\t\t\t<item>DynArray</item>\n\t\t\t<item>DynArrayHelper</item>\n\t\t\t<item>DynArrayOperations</item>\n\t\t\t<item>DynEnum</item>\n\t\t\t<item>DynEnum</item>\n\t\t\t<item>DynEnumHelper</item>\n\t\t\t<item>DynEnumOperations</item>\n\t\t\t<item>DynFixed</item>\n\t\t\t<item>DynFixed</item>\n\t\t\t<item>DynFixedHelper</item>\n\t\t\t<item>DynFixedOperations</item>\n\t\t\t<item>DynSequence</item>\n\t\t\t<item>DynSequence</item>\n\t\t\t<item>DynSequenceHelper</item>\n\t\t\t<item>DynSequenceOperations</item>\n\t\t\t<item>DynStruct</item>\n\t\t\t<item>DynStruct</item>\n\t\t\t<item>DynStructHelper</item>\n\t\t\t<item>DynStructOperations</item>\n\t\t\t<item>DynUnion</item>\n\t\t\t<item>DynUnion</item>\n\t\t\t<item>DynUnionHelper</item>\n\t\t\t<item>DynUnionOperations</item>\n\t\t\t<item>DynValue</item>\n\t\t\t<item>DynValue</item>\n\t\t\t<item>DynValueBox</item>\n\t\t\t<item>DynValueBoxOperations</item>\n\t\t\t<item>DynValueCommon</item>\n\t\t\t<item>DynValueCommonOperations</item>\n\t\t\t<item>DynValueHelper</item>\n\t\t\t<item>DynValueOperations</item>\n\t\t\t<item>DynamicImplementation</item>\n\t\t\t<item>DynamicImplementation</item>\n\t\t\t<item>DynamicMBean</item>\n\t\t\t<item>ECField</item>\n\t\t\t<item>ECFieldF2m</item>\n\t\t\t<item>ECFieldFp</item>\n\t\t\t<item>ECGenParameterSpec</item>\n\t\t\t<item>ECKey</item>\n\t\t\t<item>ECParameterSpec</item>\n\t\t\t<item>ECPoint</item>\n\t\t\t<item>ECPrivateKey</item>\n\t\t\t<item>ECPrivateKeySpec</item>\n\t\t\t<item>ECPublicKey</item>\n\t\t\t<item>ECPublicKeySpec</item>\n\t\t\t<item>ENCODING_CDR_ENCAPS</item>\n\t\t\t<item>EOFException</item>\n\t\t\t<item>EditorKit</item>\n\t\t\t<item>Element</item>\n\t\t\t<item>Element</item>\n\t\t\t<item>Element</item>\n\t\t\t<item>ElementIterator</item>\n\t\t\t<item>ElementType</item>\n\t\t\t<item>Ellipse2D</item>\n\t\t\t<item>Ellipse2D.Double</item>\n\t\t\t<item>Ellipse2D.Float</item>\n\t\t\t<item>EllipticCurve</item>\n\t\t\t<item>EmptyBorder</item>\n\t\t\t<item>EmptyStackException</item>\n\t\t\t<item>EncodedKeySpec</item>\n\t\t\t<item>Encoder</item>\n\t\t\t<item>Encoding</item>\n\t\t\t<item>EncryptedPrivateKeyInfo</item>\n\t\t\t<item>Entity</item>\n\t\t\t<item>Entity</item>\n\t\t\t<item>EntityReference</item>\n\t\t\t<item>EntityResolver</item>\n\t\t\t<item>EntityResolver2</item>\n\t\t\t<item>Enum</item>\n\t\t\t<item>EnumConstantNotPresentException</item>\n\t\t\t<item>EnumControl</item>\n\t\t\t<item>EnumControl.Type</item>\n\t\t\t<item>EnumMap</item>\n\t\t\t<item>EnumSet</item>\n\t\t\t<item>EnumSyntax</item>\n\t\t\t<item>Enumeration</item>\n\t\t\t<item>Environment</item>\n\t\t\t<item>Error</item>\n\t\t\t<item>ErrorHandler</item>\n\t\t\t<item>ErrorListener</item>\n\t\t\t<item>ErrorManager</item>\n\t\t\t<item>EtchedBorder</item>\n\t\t\t<item>Event</item>\n\t\t\t<item>EventContext</item>\n\t\t\t<item>EventDirContext</item>\n\t\t\t<item>EventHandler</item>\n\t\t\t<item>EventListener</item>\n\t\t\t<item>EventListenerList</item>\n\t\t\t<item>EventListenerProxy</item>\n\t\t\t<item>EventObject</item>\n\t\t\t<item>EventQueue</item>\n\t\t\t<item>EventSetDescriptor</item>\n\t\t\t<item>Exception</item>\n\t\t\t<item>ExceptionDetailMessage</item>\n\t\t\t<item>ExceptionInInitializerError</item>\n\t\t\t<item>ExceptionList</item>\n\t\t\t<item>ExceptionListener</item>\n\t\t\t<item>Exchanger</item>\n\t\t\t<item>ExecutionException</item>\n\t\t\t<item>Executor</item>\n\t\t\t<item>ExecutorCompletionService</item>\n\t\t\t<item>ExecutorService</item>\n\t\t\t<item>Executors</item>\n\t\t\t<item>ExemptionMechanism</item>\n\t\t\t<item>ExemptionMechanismException</item>\n\t\t\t<item>ExemptionMechanismSpi</item>\n\t\t\t<item>ExpandVetoException</item>\n\t\t\t<item>ExportException</item>\n\t\t\t<item>Expression</item>\n\t\t\t<item>ExtendedRequest</item>\n\t\t\t<item>ExtendedResponse</item>\n\t\t\t<item>Externalizable</item>\n\t\t\t<item>FREE_MEM</item>\n\t\t\t<item>FactoryConfigurationError</item>\n\t\t\t<item>FailedLoginException</item>\n\t\t\t<item>FeatureDescriptor</item>\n\t\t\t<item>Fidelity</item>\n\t\t\t<item>Field</item>\n\t\t\t<item>FieldNameHelper</item>\n\t\t\t<item>FieldNameHelper</item>\n\t\t\t<item>FieldPosition</item>\n\t\t\t<item>FieldView</item>\n\t\t\t<item>File</item>\n\t\t\t<item>FileCacheImageInputStream</item>\n\t\t\t<item>FileCacheImageOutputStream</item>\n\t\t\t<item>FileChannel</item>\n\t\t\t<item>FileChannel.MapMode</item>\n\t\t\t<item>FileChooserUI</item>\n\t\t\t<item>FileDescriptor</item>\n\t\t\t<item>FileDialog</item>\n\t\t\t<item>FileFilter</item>\n\t\t\t<item>FileFilter</item>\n\t\t\t<item>FileHandler</item>\n\t\t\t<item>FileImageInputStream</item>\n\t\t\t<item>FileImageOutputStream</item>\n\t\t\t<item>FileInputStream</item>\n\t\t\t<item>FileLock</item>\n\t\t\t<item>FileLockInterruptionException</item>\n\t\t\t<item>FileNameMap</item>\n\t\t\t<item>FileNotFoundException</item>\n\t\t\t<item>FileOutputStream</item>\n\t\t\t<item>FilePermission</item>\n\t\t\t<item>FileReader</item>\n\t\t\t<item>FileSystemView</item>\n\t\t\t<item>FileView</item>\n\t\t\t<item>FileWriter</item>\n\t\t\t<item>FilenameFilter</item>\n\t\t\t<item>Filter</item>\n\t\t\t<item>FilterInputStream</item>\n\t\t\t<item>FilterOutputStream</item>\n\t\t\t<item>FilterReader</item>\n\t\t\t<item>FilterWriter</item>\n\t\t\t<item>FilteredImageSource</item>\n\t\t\t<item>FilteredRowSet</item>\n\t\t\t<item>Finishings</item>\n\t\t\t<item>FixedHeightLayoutCache</item>\n\t\t\t<item>FixedHolder</item>\n\t\t\t<item>FlatteningPathIterator</item>\n\t\t\t<item>FlavorEvent</item>\n\t\t\t<item>FlavorException</item>\n\t\t\t<item>FlavorListener</item>\n\t\t\t<item>FlavorMap</item>\n\t\t\t<item>FlavorTable</item>\n\t\t\t<item>Float</item>\n\t\t\t<item>FloatBuffer</item>\n\t\t\t<item>FloatControl</item>\n\t\t\t<item>FloatControl.Type</item>\n\t\t\t<item>FloatHolder</item>\n\t\t\t<item>FloatSeqHelper</item>\n\t\t\t<item>FloatSeqHolder</item>\n\t\t\t<item>FlowLayout</item>\n\t\t\t<item>FlowView</item>\n\t\t\t<item>FlowView.FlowStrategy</item>\n\t\t\t<item>Flushable</item>\n\t\t\t<item>FocusAdapter</item>\n\t\t\t<item>FocusEvent</item>\n\t\t\t<item>FocusListener</item>\n\t\t\t<item>FocusManager</item>\n\t\t\t<item>FocusTraversalPolicy</item>\n\t\t\t<item>Font</item>\n\t\t\t<item>FontFormatException</item>\n\t\t\t<item>FontMetrics</item>\n\t\t\t<item>FontRenderContext</item>\n\t\t\t<item>FontUIResource</item>\n\t\t\t<item>FormSubmitEvent</item>\n\t\t\t<item>FormSubmitEvent.MethodType</item>\n\t\t\t<item>FormView</item>\n\t\t\t<item>Format</item>\n\t\t\t<item>Format.Field</item>\n\t\t\t<item>FormatConversionProvider</item>\n\t\t\t<item>FormatFlagsConversionMismatchException</item>\n\t\t\t<item>FormatMismatch</item>\n\t\t\t<item>FormatMismatchHelper</item>\n\t\t\t<item>Formattable</item>\n\t\t\t<item>FormattableFlags</item>\n\t\t\t<item>Formatter</item>\n\t\t\t<item>Formatter</item>\n\t\t\t<item>FormatterClosedException</item>\n\t\t\t<item>ForwardRequest</item>\n\t\t\t<item>ForwardRequest</item>\n\t\t\t<item>ForwardRequestHelper</item>\n\t\t\t<item>ForwardRequestHelper</item>\n\t\t\t<item>Frame</item>\n\t\t\t<item>Future</item>\n\t\t\t<item>FutureTask</item>\n\t\t\t<item>GSSContext</item>\n\t\t\t<item>GSSCredential</item>\n\t\t\t<item>GSSException</item>\n\t\t\t<item>GSSManager</item>\n\t\t\t<item>GSSName</item>\n\t\t\t<item>GZIPInputStream</item>\n\t\t\t<item>GZIPOutputStream</item>\n\t\t\t<item>GapContent</item>\n\t\t\t<item>GarbageCollectorMXBean</item>\n\t\t\t<item>GatheringByteChannel</item>\n\t\t\t<item>GaugeMonitor</item>\n\t\t\t<item>GaugeMonitorMBean</item>\n\t\t\t<item>GeneralPath</item>\n\t\t\t<item>GeneralSecurityException</item>\n\t\t\t<item>GenericArrayType</item>\n\t\t\t<item>GenericDeclaration</item>\n\t\t\t<item>GenericSignatureFormatError</item>\n\t\t\t<item>GlyphJustificationInfo</item>\n\t\t\t<item>GlyphMetrics</item>\n\t\t\t<item>GlyphVector</item>\n\t\t\t<item>GlyphView</item>\n\t\t\t<item>GlyphView.GlyphPainter</item>\n\t\t\t<item>GradientPaint</item>\n\t\t\t<item>GraphicAttribute</item>\n\t\t\t<item>Graphics</item>\n\t\t\t<item>Graphics2D</item>\n\t\t\t<item>GraphicsConfigTemplate</item>\n\t\t\t<item>GraphicsConfiguration</item>\n\t\t\t<item>GraphicsDevice</item>\n\t\t\t<item>GraphicsEnvironment</item>\n\t\t\t<item>GrayFilter</item>\n\t\t\t<item>GregorianCalendar</item>\n\t\t\t<item>GridBagConstraints</item>\n\t\t\t<item>GridBagLayout</item>\n\t\t\t<item>GridLayout</item>\n\t\t\t<item>Group</item>\n\t\t\t<item>Guard</item>\n\t\t\t<item>GuardedObject</item>\n\t\t\t<item>HOLDING</item>\n\t\t\t<item>HTML</item>\n\t\t\t<item>HTML.Attribute</item>\n\t\t\t<item>HTML.Tag</item>\n\t\t\t<item>HTML.UnknownTag</item>\n\t\t\t<item>HTMLDocument</item>\n\t\t\t<item>HTMLDocument.Iterator</item>\n\t\t\t<item>HTMLEditorKit</item>\n\t\t\t<item>HTMLEditorKit.HTMLFactory</item>\n\t\t\t<item>HTMLEditorKit.HTMLTextAction</item>\n\t\t\t<item>HTMLEditorKit.InsertHTMLTextAction</item>\n\t\t\t<item>HTMLEditorKit.LinkController</item>\n\t\t\t<item>HTMLEditorKit.Parser</item>\n\t\t\t<item>HTMLEditorKit.ParserCallback</item>\n\t\t\t<item>HTMLFrameHyperlinkEvent</item>\n\t\t\t<item>HTMLWriter</item>\n\t\t\t<item>Handler</item>\n\t\t\t<item>HandlerBase</item>\n\t\t\t<item>HandshakeCompletedEvent</item>\n\t\t\t<item>HandshakeCompletedListener</item>\n\t\t\t<item>HasControls</item>\n\t\t\t<item>HashAttributeSet</item>\n\t\t\t<item>HashDocAttributeSet</item>\n\t\t\t<item>HashMap</item>\n\t\t\t<item>HashPrintJobAttributeSet</item>\n\t\t\t<item>HashPrintRequestAttributeSet</item>\n\t\t\t<item>HashPrintServiceAttributeSet</item>\n\t\t\t<item>HashSet</item>\n\t\t\t<item>Hashtable</item>\n\t\t\t<item>HeadlessException</item>\n\t\t\t<item>HierarchyBoundsAdapter</item>\n\t\t\t<item>HierarchyBoundsListener</item>\n\t\t\t<item>HierarchyEvent</item>\n\t\t\t<item>HierarchyListener</item>\n\t\t\t<item>Highlighter</item>\n\t\t\t<item>Highlighter.Highlight</item>\n\t\t\t<item>Highlighter.HighlightPainter</item>\n\t\t\t<item>HostnameVerifier</item>\n\t\t\t<item>HttpRetryException</item>\n\t\t\t<item>HttpURLConnection</item>\n\t\t\t<item>HttpsURLConnection</item>\n\t\t\t<item>HyperlinkEvent</item>\n\t\t\t<item>HyperlinkEvent.EventType</item>\n\t\t\t<item>HyperlinkListener</item>\n\t\t\t<item>ICC_ColorSpace</item>\n\t\t\t<item>ICC_Profile</item>\n\t\t\t<item>ICC_ProfileGray</item>\n\t\t\t<item>ICC_ProfileRGB</item>\n\t\t\t<item>IDLEntity</item>\n\t\t\t<item>IDLType</item>\n\t\t\t<item>IDLTypeHelper</item>\n\t\t\t<item>IDLTypeOperations</item>\n\t\t\t<item>ID_ASSIGNMENT_POLICY_ID</item>\n\t\t\t<item>ID_UNIQUENESS_POLICY_ID</item>\n\t\t\t<item>IIOByteBuffer</item>\n\t\t\t<item>IIOException</item>\n\t\t\t<item>IIOImage</item>\n\t\t\t<item>IIOInvalidTreeException</item>\n\t\t\t<item>IIOMetadata</item>\n\t\t\t<item>IIOMetadataController</item>\n\t\t\t<item>IIOMetadataFormat</item>\n\t\t\t<item>IIOMetadataFormatImpl</item>\n\t\t\t<item>IIOMetadataNode</item>\n\t\t\t<item>IIOParam</item>\n\t\t\t<item>IIOParamController</item>\n\t\t\t<item>IIOReadProgressListener</item>\n\t\t\t<item>IIOReadUpdateListener</item>\n\t\t\t<item>IIOReadWarningListener</item>\n\t\t\t<item>IIORegistry</item>\n\t\t\t<item>IIOServiceProvider</item>\n\t\t\t<item>IIOWriteProgressListener</item>\n\t\t\t<item>IIOWriteWarningListener</item>\n\t\t\t<item>IMPLICIT_ACTIVATION_POLICY_ID</item>\n\t\t\t<item>IMP_LIMIT</item>\n\t\t\t<item>INACTIVE</item>\n\t\t\t<item>INITIALIZE</item>\n\t\t\t<item>INTERNAL</item>\n\t\t\t<item>INTF_REPOS</item>\n\t\t\t<item>INVALID_ACTIVITY</item>\n\t\t\t<item>INVALID_TRANSACTION</item>\n\t\t\t<item>INV_FLAG</item>\n\t\t\t<item>INV_IDENT</item>\n\t\t\t<item>INV_OBJREF</item>\n\t\t\t<item>INV_POLICY</item>\n\t\t\t<item>IOException</item>\n\t\t\t<item>IOR</item>\n\t\t\t<item>IORHelper</item>\n\t\t\t<item>IORHolder</item>\n\t\t\t<item>IORInfo</item>\n\t\t\t<item>IORInfoOperations</item>\n\t\t\t<item>IORInterceptor</item>\n\t\t\t<item>IORInterceptorOperations</item>\n\t\t\t<item>IORInterceptor_3_0</item>\n\t\t\t<item>IORInterceptor_3_0Helper</item>\n\t\t\t<item>IORInterceptor_3_0Holder</item>\n\t\t\t<item>IORInterceptor_3_0Operations</item>\n\t\t\t<item>IRObject</item>\n\t\t\t<item>IRObjectOperations</item>\n\t\t\t<item>Icon</item>\n\t\t\t<item>IconUIResource</item>\n\t\t\t<item>IconView</item>\n\t\t\t<item>IdAssignmentPolicy</item>\n\t\t\t<item>IdAssignmentPolicyOperations</item>\n\t\t\t<item>IdAssignmentPolicyValue</item>\n\t\t\t<item>IdUniquenessPolicy</item>\n\t\t\t<item>IdUniquenessPolicyOperations</item>\n\t\t\t<item>IdUniquenessPolicyValue</item>\n\t\t\t<item>IdentifierHelper</item>\n\t\t\t<item>Identity</item>\n\t\t\t<item>IdentityHashMap</item>\n\t\t\t<item>IdentityScope</item>\n\t\t\t<item>IllegalAccessError</item>\n\t\t\t<item>IllegalAccessException</item>\n\t\t\t<item>IllegalArgumentException</item>\n\t\t\t<item>IllegalBlockSizeException</item>\n\t\t\t<item>IllegalBlockingModeException</item>\n\t\t\t<item>IllegalCharsetNameException</item>\n\t\t\t<item>IllegalClassFormatException</item>\n\t\t\t<item>IllegalComponentStateException</item>\n\t\t\t<item>IllegalFormatCodePointException</item>\n\t\t\t<item>IllegalFormatConversionException</item>\n\t\t\t<item>IllegalFormatException</item>\n\t\t\t<item>IllegalFormatFlagsException</item>\n\t\t\t<item>IllegalFormatPrecisionException</item>\n\t\t\t<item>IllegalFormatWidthException</item>\n\t\t\t<item>IllegalMonitorStateException</item>\n\t\t\t<item>IllegalPathStateException</item>\n\t\t\t<item>IllegalSelectorException</item>\n\t\t\t<item>IllegalStateException</item>\n\t\t\t<item>IllegalThreadStateException</item>\n\t\t\t<item>Image</item>\n\t\t\t<item>ImageCapabilities</item>\n\t\t\t<item>ImageConsumer</item>\n\t\t\t<item>ImageFilter</item>\n\t\t\t<item>ImageGraphicAttribute</item>\n\t\t\t<item>ImageIO</item>\n\t\t\t<item>ImageIcon</item>\n\t\t\t<item>ImageInputStream</item>\n\t\t\t<item>ImageInputStreamImpl</item>\n\t\t\t<item>ImageInputStreamSpi</item>\n\t\t\t<item>ImageObserver</item>\n\t\t\t<item>ImageOutputStream</item>\n\t\t\t<item>ImageOutputStreamImpl</item>\n\t\t\t<item>ImageOutputStreamSpi</item>\n\t\t\t<item>ImageProducer</item>\n\t\t\t<item>ImageReadParam</item>\n\t\t\t<item>ImageReader</item>\n\t\t\t<item>ImageReaderSpi</item>\n\t\t\t<item>ImageReaderWriterSpi</item>\n\t\t\t<item>ImageTranscoder</item>\n\t\t\t<item>ImageTranscoderSpi</item>\n\t\t\t<item>ImageTypeSpecifier</item>\n\t\t\t<item>ImageView</item>\n\t\t\t<item>ImageWriteParam</item>\n\t\t\t<item>ImageWriter</item>\n\t\t\t<item>ImageWriterSpi</item>\n\t\t\t<item>ImagingOpException</item>\n\t\t\t<item>ImplicitActivationPolicy</item>\n\t\t\t<item>ImplicitActivationPolicyOperations</item>\n\t\t\t<item>ImplicitActivationPolicyValue</item>\n\t\t\t<item>IncompatibleClassChangeError</item>\n\t\t\t<item>IncompleteAnnotationException</item>\n\t\t\t<item>InconsistentTypeCode</item>\n\t\t\t<item>InconsistentTypeCode</item>\n\t\t\t<item>InconsistentTypeCodeHelper</item>\n\t\t\t<item>IndexColorModel</item>\n\t\t\t<item>IndexOutOfBoundsException</item>\n\t\t\t<item>IndexedPropertyChangeEvent</item>\n\t\t\t<item>IndexedPropertyDescriptor</item>\n\t\t\t<item>IndirectionException</item>\n\t\t\t<item>Inet4Address</item>\n\t\t\t<item>Inet6Address</item>\n\t\t\t<item>InetAddress</item>\n\t\t\t<item>InetSocketAddress</item>\n\t\t\t<item>Inflater</item>\n\t\t\t<item>InflaterInputStream</item>\n\t\t\t<item>InheritableThreadLocal</item>\n\t\t\t<item>Inherited</item>\n\t\t\t<item>InitialContext</item>\n\t\t\t<item>InitialContextFactory</item>\n\t\t\t<item>InitialContextFactoryBuilder</item>\n\t\t\t<item>InitialDirContext</item>\n\t\t\t<item>InitialLdapContext</item>\n\t\t\t<item>InlineView</item>\n\t\t\t<item>InputContext</item>\n\t\t\t<item>InputEvent</item>\n\t\t\t<item>InputMap</item>\n\t\t\t<item>InputMapUIResource</item>\n\t\t\t<item>InputMethod</item>\n\t\t\t<item>InputMethodContext</item>\n\t\t\t<item>InputMethodDescriptor</item>\n\t\t\t<item>InputMethodEvent</item>\n\t\t\t<item>InputMethodHighlight</item>\n\t\t\t<item>InputMethodListener</item>\n\t\t\t<item>InputMethodRequests</item>\n\t\t\t<item>InputMismatchException</item>\n\t\t\t<item>InputSource</item>\n\t\t\t<item>InputStream</item>\n\t\t\t<item>InputStream</item>\n\t\t\t<item>InputStream</item>\n\t\t\t<item>InputStreamReader</item>\n\t\t\t<item>InputSubset</item>\n\t\t\t<item>InputVerifier</item>\n\t\t\t<item>Insets</item>\n\t\t\t<item>InsetsUIResource</item>\n\t\t\t<item>InstanceAlreadyExistsException</item>\n\t\t\t<item>InstanceNotFoundException</item>\n\t\t\t<item>InstantiationError</item>\n\t\t\t<item>InstantiationException</item>\n\t\t\t<item>Instrument</item>\n\t\t\t<item>Instrumentation</item>\n\t\t\t<item>InsufficientResourcesException</item>\n\t\t\t<item>IntBuffer</item>\n\t\t\t<item>IntHolder</item>\n\t\t\t<item>Integer</item>\n\t\t\t<item>IntegerSyntax</item>\n\t\t\t<item>Interceptor</item>\n\t\t\t<item>InterceptorOperations</item>\n\t\t\t<item>InternalError</item>\n\t\t\t<item>InternalFrameAdapter</item>\n\t\t\t<item>InternalFrameEvent</item>\n\t\t\t<item>InternalFrameFocusTraversalPolicy</item>\n\t\t\t<item>InternalFrameListener</item>\n\t\t\t<item>InternalFrameUI</item>\n\t\t\t<item>InternationalFormatter</item>\n\t\t\t<item>InterruptedException</item>\n\t\t\t<item>InterruptedIOException</item>\n\t\t\t<item>InterruptedNamingException</item>\n\t\t\t<item>InterruptibleChannel</item>\n\t\t\t<item>IntrospectionException</item>\n\t\t\t<item>IntrospectionException</item>\n\t\t\t<item>Introspector</item>\n\t\t\t<item>Invalid</item>\n\t\t\t<item>InvalidActivityException</item>\n\t\t\t<item>InvalidAddress</item>\n\t\t\t<item>InvalidAddressHelper</item>\n\t\t\t<item>InvalidAddressHolder</item>\n\t\t\t<item>InvalidAlgorithmParameterException</item>\n\t\t\t<item>InvalidApplicationException</item>\n\t\t\t<item>InvalidAttributeIdentifierException</item>\n\t\t\t<item>InvalidAttributeValueException</item>\n\t\t\t<item>InvalidAttributeValueException</item>\n\t\t\t<item>InvalidAttributesException</item>\n\t\t\t<item>InvalidClassException</item>\n\t\t\t<item>InvalidDnDOperationException</item>\n\t\t\t<item>InvalidKeyException</item>\n\t\t\t<item>InvalidKeyException</item>\n\t\t\t<item>InvalidKeySpecException</item>\n\t\t\t<item>InvalidMarkException</item>\n\t\t\t<item>InvalidMidiDataException</item>\n\t\t\t<item>InvalidName</item>\n\t\t\t<item>InvalidName</item>\n\t\t\t<item>InvalidName</item>\n\t\t\t<item>InvalidNameException</item>\n\t\t\t<item>InvalidNameHelper</item>\n\t\t\t<item>InvalidNameHelper</item>\n\t\t\t<item>InvalidNameHolder</item>\n\t\t\t<item>InvalidObjectException</item>\n\t\t\t<item>InvalidOpenTypeException</item>\n\t\t\t<item>InvalidParameterException</item>\n\t\t\t<item>InvalidParameterSpecException</item>\n\t\t\t<item>InvalidPolicy</item>\n\t\t\t<item>InvalidPolicyHelper</item>\n\t\t\t<item>InvalidPreferencesFormatException</item>\n\t\t\t<item>InvalidPropertiesFormatException</item>\n\t\t\t<item>InvalidRelationIdException</item>\n\t\t\t<item>InvalidRelationServiceException</item>\n\t\t\t<item>InvalidRelationTypeException</item>\n\t\t\t<item>InvalidRoleInfoException</item>\n\t\t\t<item>InvalidRoleValueException</item>\n\t\t\t<item>InvalidSearchControlsException</item>\n\t\t\t<item>InvalidSearchFilterException</item>\n\t\t\t<item>InvalidSeq</item>\n\t\t\t<item>InvalidSlot</item>\n\t\t\t<item>InvalidSlotHelper</item>\n\t\t\t<item>InvalidTargetObjectTypeException</item>\n\t\t\t<item>InvalidTransactionException</item>\n\t\t\t<item>InvalidTypeForEncoding</item>\n\t\t\t<item>InvalidTypeForEncodingHelper</item>\n\t\t\t<item>InvalidValue</item>\n\t\t\t<item>InvalidValue</item>\n\t\t\t<item>InvalidValueHelper</item>\n\t\t\t<item>InvocationEvent</item>\n\t\t\t<item>InvocationHandler</item>\n\t\t\t<item>InvocationTargetException</item>\n\t\t\t<item>InvokeHandler</item>\n\t\t\t<item>IstringHelper</item>\n\t\t\t<item>ItemEvent</item>\n\t\t\t<item>ItemListener</item>\n\t\t\t<item>ItemSelectable</item>\n\t\t\t<item>Iterable</item>\n\t\t\t<item>Iterator</item>\n\t\t\t<item>IvParameterSpec</item>\n\t\t\t<item>JApplet</item>\n\t\t\t<item>JButton</item>\n\t\t\t<item>JCheckBox</item>\n\t\t\t<item>JCheckBoxMenuItem</item>\n\t\t\t<item>JColorChooser</item>\n\t\t\t<item>JComboBox</item>\n\t\t\t<item>JComboBox.KeySelectionManager</item>\n\t\t\t<item>JComponent</item>\n\t\t\t<item>JDesktopPane</item>\n\t\t\t<item>JDialog</item>\n\t\t\t<item>JEditorPane</item>\n\t\t\t<item>JFileChooser</item>\n\t\t\t<item>JFormattedTextField</item>\n\t\t\t<item>JFormattedTextField.AbstractFormatter</item>\n\t\t\t<item>JFormattedTextField.AbstractFormatterFactory</item>\n\t\t\t<item>JFrame</item>\n\t\t\t<item>JInternalFrame</item>\n\t\t\t<item>JInternalFrame.JDesktopIcon</item>\n\t\t\t<item>JLabel</item>\n\t\t\t<item>JLayeredPane</item>\n\t\t\t<item>JList</item>\n\t\t\t<item>JMException</item>\n\t\t\t<item>JMRuntimeException</item>\n\t\t\t<item>JMXAuthenticator</item>\n\t\t\t<item>JMXConnectionNotification</item>\n\t\t\t<item>JMXConnector</item>\n\t\t\t<item>JMXConnectorFactory</item>\n\t\t\t<item>JMXConnectorProvider</item>\n\t\t\t<item>JMXConnectorServer</item>\n\t\t\t<item>JMXConnectorServerFactory</item>\n\t\t\t<item>JMXConnectorServerMBean</item>\n\t\t\t<item>JMXConnectorServerProvider</item>\n\t\t\t<item>JMXPrincipal</item>\n\t\t\t<item>JMXProviderException</item>\n\t\t\t<item>JMXServerErrorException</item>\n\t\t\t<item>JMXServiceURL</item>\n\t\t\t<item>JMenu</item>\n\t\t\t<item>JMenuBar</item>\n\t\t\t<item>JMenuItem</item>\n\t\t\t<item>JOptionPane</item>\n\t\t\t<item>JPEGHuffmanTable</item>\n\t\t\t<item>JPEGImageReadParam</item>\n\t\t\t<item>JPEGImageWriteParam</item>\n\t\t\t<item>JPEGQTable</item>\n\t\t\t<item>JPanel</item>\n\t\t\t<item>JPasswordField</item>\n\t\t\t<item>JPopupMenu</item>\n\t\t\t<item>JPopupMenu.Separator</item>\n\t\t\t<item>JProgressBar</item>\n\t\t\t<item>JRadioButton</item>\n\t\t\t<item>JRadioButtonMenuItem</item>\n\t\t\t<item>JRootPane</item>\n\t\t\t<item>JScrollBar</item>\n\t\t\t<item>JScrollPane</item>\n\t\t\t<item>JSeparator</item>\n\t\t\t<item>JSlider</item>\n\t\t\t<item>JSpinner</item>\n\t\t\t<item>JSpinner.DateEditor</item>\n\t\t\t<item>JSpinner.DefaultEditor</item>\n\t\t\t<item>JSpinner.ListEditor</item>\n\t\t\t<item>JSpinner.NumberEditor</item>\n\t\t\t<item>JSplitPane</item>\n\t\t\t<item>JTabbedPane</item>\n\t\t\t<item>JTable</item>\n\t\t\t<item>JTable.PrintMode</item>\n\t\t\t<item>JTableHeader</item>\n\t\t\t<item>JTextArea</item>\n\t\t\t<item>JTextComponent</item>\n\t\t\t<item>JTextComponent.KeyBinding</item>\n\t\t\t<item>JTextField</item>\n\t\t\t<item>JTextPane</item>\n\t\t\t<item>JToggleButton</item>\n\t\t\t<item>JToggleButton.ToggleButtonModel</item>\n\t\t\t<item>JToolBar</item>\n\t\t\t<item>JToolBar.Separator</item>\n\t\t\t<item>JToolTip</item>\n\t\t\t<item>JTree</item>\n\t\t\t<item>JTree.DynamicUtilTreeNode</item>\n\t\t\t<item>JTree.EmptySelectionModel</item>\n\t\t\t<item>JViewport</item>\n\t\t\t<item>JWindow</item>\n\t\t\t<item>JarEntry</item>\n\t\t\t<item>JarException</item>\n\t\t\t<item>JarFile</item>\n\t\t\t<item>JarInputStream</item>\n\t\t\t<item>JarOutputStream</item>\n\t\t\t<item>JarURLConnection</item>\n\t\t\t<item>JdbcRowSet</item>\n\t\t\t<item>JobAttributes</item>\n\t\t\t<item>JobAttributes.DefaultSelectionType</item>\n\t\t\t<item>JobAttributes.DestinationType</item>\n\t\t\t<item>JobAttributes.DialogType</item>\n\t\t\t<item>JobAttributes.MultipleDocumentHandlingType</item>\n\t\t\t<item>JobAttributes.SidesType</item>\n\t\t\t<item>JobHoldUntil</item>\n\t\t\t<item>JobImpressions</item>\n\t\t\t<item>JobImpressionsCompleted</item>\n\t\t\t<item>JobImpressionsSupported</item>\n\t\t\t<item>JobKOctets</item>\n\t\t\t<item>JobKOctetsProcessed</item>\n\t\t\t<item>JobKOctetsSupported</item>\n\t\t\t<item>JobMediaSheets</item>\n\t\t\t<item>JobMediaSheetsCompleted</item>\n\t\t\t<item>JobMediaSheetsSupported</item>\n\t\t\t<item>JobMessageFromOperator</item>\n\t\t\t<item>JobName</item>\n\t\t\t<item>JobOriginatingUserName</item>\n\t\t\t<item>JobPriority</item>\n\t\t\t<item>JobPrioritySupported</item>\n\t\t\t<item>JobSheets</item>\n\t\t\t<item>JobState</item>\n\t\t\t<item>JobStateReason</item>\n\t\t\t<item>JobStateReasons</item>\n\t\t\t<item>JoinRowSet</item>\n\t\t\t<item>Joinable</item>\n\t\t\t<item>KerberosKey</item>\n\t\t\t<item>KerberosPrincipal</item>\n\t\t\t<item>KerberosTicket</item>\n\t\t\t<item>Kernel</item>\n\t\t\t<item>Key</item>\n\t\t\t<item>KeyAdapter</item>\n\t\t\t<item>KeyAgreement</item>\n\t\t\t<item>KeyAgreementSpi</item>\n\t\t\t<item>KeyAlreadyExistsException</item>\n\t\t\t<item>KeyEvent</item>\n\t\t\t<item>KeyEventDispatcher</item>\n\t\t\t<item>KeyEventPostProcessor</item>\n\t\t\t<item>KeyException</item>\n\t\t\t<item>KeyFactory</item>\n\t\t\t<item>KeyFactorySpi</item>\n\t\t\t<item>KeyGenerator</item>\n\t\t\t<item>KeyGeneratorSpi</item>\n\t\t\t<item>KeyListener</item>\n\t\t\t<item>KeyManagementException</item>\n\t\t\t<item>KeyManager</item>\n\t\t\t<item>KeyManagerFactory</item>\n\t\t\t<item>KeyManagerFactorySpi</item>\n\t\t\t<item>KeyPair</item>\n\t\t\t<item>KeyPairGenerator</item>\n\t\t\t<item>KeyPairGeneratorSpi</item>\n\t\t\t<item>KeyRep</item>\n\t\t\t<item>KeyRep.Type</item>\n\t\t\t<item>KeySpec</item>\n\t\t\t<item>KeyStore</item>\n\t\t\t<item>KeyStore.Builder</item>\n\t\t\t<item>KeyStore.CallbackHandlerProtection</item>\n\t\t\t<item>KeyStore.Entry</item>\n\t\t\t<item>KeyStore.LoadStoreParameter</item>\n\t\t\t<item>KeyStore.PasswordProtection</item>\n\t\t\t<item>KeyStore.PrivateKeyEntry</item>\n\t\t\t<item>KeyStore.ProtectionParameter</item>\n\t\t\t<item>KeyStore.SecretKeyEntry</item>\n\t\t\t<item>KeyStore.TrustedCertificateEntry</item>\n\t\t\t<item>KeyStoreBuilderParameters</item>\n\t\t\t<item>KeyStoreException</item>\n\t\t\t<item>KeyStoreSpi</item>\n\t\t\t<item>KeyStroke</item>\n\t\t\t<item>KeyboardFocusManager</item>\n\t\t\t<item>Keymap</item>\n\t\t\t<item>LDAPCertStoreParameters</item>\n\t\t\t<item>LIFESPAN_POLICY_ID</item>\n\t\t\t<item>LOCATION_FORWARD</item>\n\t\t\t<item>LSException</item>\n\t\t\t<item>LSInput</item>\n\t\t\t<item>LSLoadEvent</item>\n\t\t\t<item>LSOutput</item>\n\t\t\t<item>LSParser</item>\n\t\t\t<item>LSParserFilter</item>\n\t\t\t<item>LSProgressEvent</item>\n\t\t\t<item>LSResourceResolver</item>\n\t\t\t<item>LSSerializer</item>\n\t\t\t<item>LSSerializerFilter</item>\n\t\t\t<item>Label</item>\n\t\t\t<item>LabelUI</item>\n\t\t\t<item>LabelView</item>\n\t\t\t<item>LanguageCallback</item>\n\t\t\t<item>LastOwnerException</item>\n\t\t\t<item>LayeredHighlighter</item>\n\t\t\t<item>LayeredHighlighter.LayerPainter</item>\n\t\t\t<item>LayoutFocusTraversalPolicy</item>\n\t\t\t<item>LayoutManager</item>\n\t\t\t<item>LayoutManager2</item>\n\t\t\t<item>LayoutQueue</item>\n\t\t\t<item>LdapContext</item>\n\t\t\t<item>LdapName</item>\n\t\t\t<item>LdapReferralException</item>\n\t\t\t<item>Lease</item>\n\t\t\t<item>Level</item>\n\t\t\t<item>LexicalHandler</item>\n\t\t\t<item>LifespanPolicy</item>\n\t\t\t<item>LifespanPolicyOperations</item>\n\t\t\t<item>LifespanPolicyValue</item>\n\t\t\t<item>LimitExceededException</item>\n\t\t\t<item>Line</item>\n\t\t\t<item>Line.Info</item>\n\t\t\t<item>Line2D</item>\n\t\t\t<item>Line2D.Double</item>\n\t\t\t<item>Line2D.Float</item>\n\t\t\t<item>LineBorder</item>\n\t\t\t<item>LineBreakMeasurer</item>\n\t\t\t<item>LineEvent</item>\n\t\t\t<item>LineEvent.Type</item>\n\t\t\t<item>LineListener</item>\n\t\t\t<item>LineMetrics</item>\n\t\t\t<item>LineNumberInputStream</item>\n\t\t\t<item>LineNumberReader</item>\n\t\t\t<item>LineUnavailableException</item>\n\t\t\t<item>LinkException</item>\n\t\t\t<item>LinkLoopException</item>\n\t\t\t<item>LinkRef</item>\n\t\t\t<item>LinkageError</item>\n\t\t\t<item>LinkedBlockingQueue</item>\n\t\t\t<item>LinkedHashMap</item>\n\t\t\t<item>LinkedHashSet</item>\n\t\t\t<item>LinkedList</item>\n\t\t\t<item>List</item>\n\t\t\t<item>List</item>\n\t\t\t<item>ListCellRenderer</item>\n\t\t\t<item>ListDataEvent</item>\n\t\t\t<item>ListDataListener</item>\n\t\t\t<item>ListIterator</item>\n\t\t\t<item>ListModel</item>\n\t\t\t<item>ListResourceBundle</item>\n\t\t\t<item>ListSelectionEvent</item>\n\t\t\t<item>ListSelectionListener</item>\n\t\t\t<item>ListSelectionModel</item>\n\t\t\t<item>ListUI</item>\n\t\t\t<item>ListView</item>\n\t\t\t<item>ListenerNotFoundException</item>\n\t\t\t<item>LoaderHandler</item>\n\t\t\t<item>LocalObject</item>\n\t\t\t<item>Locale</item>\n\t\t\t<item>LocateRegistry</item>\n\t\t\t<item>Locator</item>\n\t\t\t<item>Locator2</item>\n\t\t\t<item>Locator2Impl</item>\n\t\t\t<item>LocatorImpl</item>\n\t\t\t<item>Lock</item>\n\t\t\t<item>LockSupport</item>\n\t\t\t<item>LogManager</item>\n\t\t\t<item>LogRecord</item>\n\t\t\t<item>LogStream</item>\n\t\t\t<item>Logger</item>\n\t\t\t<item>LoggingMXBean</item>\n\t\t\t<item>LoggingPermission</item>\n\t\t\t<item>LoginContext</item>\n\t\t\t<item>LoginException</item>\n\t\t\t<item>LoginModule</item>\n\t\t\t<item>Long</item>\n\t\t\t<item>LongBuffer</item>\n\t\t\t<item>LongHolder</item>\n\t\t\t<item>LongLongSeqHelper</item>\n\t\t\t<item>LongLongSeqHolder</item>\n\t\t\t<item>LongSeqHelper</item>\n\t\t\t<item>LongSeqHolder</item>\n\t\t\t<item>LookAndFeel</item>\n\t\t\t<item>LookupOp</item>\n\t\t\t<item>LookupTable</item>\n\t\t\t<item>MARSHAL</item>\n\t\t\t<item>MBeanAttributeInfo</item>\n\t\t\t<item>MBeanConstructorInfo</item>\n\t\t\t<item>MBeanException</item>\n\t\t\t<item>MBeanFeatureInfo</item>\n\t\t\t<item>MBeanInfo</item>\n\t\t\t<item>MBeanNotificationInfo</item>\n\t\t\t<item>MBeanOperationInfo</item>\n\t\t\t<item>MBeanParameterInfo</item>\n\t\t\t<item>MBeanPermission</item>\n\t\t\t<item>MBeanRegistration</item>\n\t\t\t<item>MBeanRegistrationException</item>\n\t\t\t<item>MBeanServer</item>\n\t\t\t<item>MBeanServerBuilder</item>\n\t\t\t<item>MBeanServerConnection</item>\n\t\t\t<item>MBeanServerDelegate</item>\n\t\t\t<item>MBeanServerDelegateMBean</item>\n\t\t\t<item>MBeanServerFactory</item>\n\t\t\t<item>MBeanServerForwarder</item>\n\t\t\t<item>MBeanServerInvocationHandler</item>\n\t\t\t<item>MBeanServerNotification</item>\n\t\t\t<item>MBeanServerNotificationFilter</item>\n\t\t\t<item>MBeanServerPermission</item>\n\t\t\t<item>MBeanTrustPermission</item>\n\t\t\t<item>MGF1ParameterSpec</item>\n\t\t\t<item>MLet</item>\n\t\t\t<item>MLetMBean</item>\n\t\t\t<item>Mac</item>\n\t\t\t<item>MacSpi</item>\n\t\t\t<item>MalformedInputException</item>\n\t\t\t<item>MalformedLinkException</item>\n\t\t\t<item>MalformedObjectNameException</item>\n\t\t\t<item>MalformedParameterizedTypeException</item>\n\t\t\t<item>MalformedURLException</item>\n\t\t\t<item>ManageReferralControl</item>\n\t\t\t<item>ManagementFactory</item>\n\t\t\t<item>ManagementPermission</item>\n\t\t\t<item>ManagerFactoryParameters</item>\n\t\t\t<item>Manifest</item>\n\t\t\t<item>Map</item>\n\t\t\t<item>Map.Entry</item>\n\t\t\t<item>MappedByteBuffer</item>\n\t\t\t<item>MarshalException</item>\n\t\t\t<item>MarshalledObject</item>\n\t\t\t<item>MaskFormatter</item>\n\t\t\t<item>MatchResult</item>\n\t\t\t<item>Matcher</item>\n\t\t\t<item>Math</item>\n\t\t\t<item>MathContext</item>\n\t\t\t<item>MatteBorder</item>\n\t\t\t<item>Media</item>\n\t\t\t<item>MediaName</item>\n\t\t\t<item>MediaPrintableArea</item>\n\t\t\t<item>MediaSize</item>\n\t\t\t<item>MediaSize.Engineering</item>\n\t\t\t<item>MediaSize.ISO</item>\n\t\t\t<item>MediaSize.JIS</item>\n\t\t\t<item>MediaSize.NA</item>\n\t\t\t<item>MediaSize.Other</item>\n\t\t\t<item>MediaSizeName</item>\n\t\t\t<item>MediaTracker</item>\n\t\t\t<item>MediaTray</item>\n\t\t\t<item>Member</item>\n\t\t\t<item>MemoryCacheImageInputStream</item>\n\t\t\t<item>MemoryCacheImageOutputStream</item>\n\t\t\t<item>MemoryHandler</item>\n\t\t\t<item>MemoryImageSource</item>\n\t\t\t<item>MemoryMXBean</item>\n\t\t\t<item>MemoryManagerMXBean</item>\n\t\t\t<item>MemoryNotificationInfo</item>\n\t\t\t<item>MemoryPoolMXBean</item>\n\t\t\t<item>MemoryType</item>\n\t\t\t<item>MemoryUsage</item>\n\t\t\t<item>Menu</item>\n\t\t\t<item>MenuBar</item>\n\t\t\t<item>MenuBarUI</item>\n\t\t\t<item>MenuComponent</item>\n\t\t\t<item>MenuContainer</item>\n\t\t\t<item>MenuDragMouseEvent</item>\n\t\t\t<item>MenuDragMouseListener</item>\n\t\t\t<item>MenuElement</item>\n\t\t\t<item>MenuEvent</item>\n\t\t\t<item>MenuItem</item>\n\t\t\t<item>MenuItemUI</item>\n\t\t\t<item>MenuKeyEvent</item>\n\t\t\t<item>MenuKeyListener</item>\n\t\t\t<item>MenuListener</item>\n\t\t\t<item>MenuSelectionManager</item>\n\t\t\t<item>MenuShortcut</item>\n\t\t\t<item>MessageDigest</item>\n\t\t\t<item>MessageDigestSpi</item>\n\t\t\t<item>MessageFormat</item>\n\t\t\t<item>MessageFormat.Field</item>\n\t\t\t<item>MessageProp</item>\n\t\t\t<item>MetaEventListener</item>\n\t\t\t<item>MetaMessage</item>\n\t\t\t<item>MetalBorders</item>\n\t\t\t<item>MetalBorders.ButtonBorder</item>\n\t\t\t<item>MetalBorders.Flush3DBorder</item>\n\t\t\t<item>MetalBorders.InternalFrameBorder</item>\n\t\t\t<item>MetalBorders.MenuBarBorder</item>\n\t\t\t<item>MetalBorders.MenuItemBorder</item>\n\t\t\t<item>MetalBorders.OptionDialogBorder</item>\n\t\t\t<item>MetalBorders.PaletteBorder</item>\n\t\t\t<item>MetalBorders.PopupMenuBorder</item>\n\t\t\t<item>MetalBorders.RolloverButtonBorder</item>\n\t\t\t<item>MetalBorders.ScrollPaneBorder</item>\n\t\t\t<item>MetalBorders.TableHeaderBorder</item>\n\t\t\t<item>MetalBorders.TextFieldBorder</item>\n\t\t\t<item>MetalBorders.ToggleButtonBorder</item>\n\t\t\t<item>MetalBorders.ToolBarBorder</item>\n\t\t\t<item>MetalButtonUI</item>\n\t\t\t<item>MetalCheckBoxIcon</item>\n\t\t\t<item>MetalCheckBoxUI</item>\n\t\t\t<item>MetalComboBoxButton</item>\n\t\t\t<item>MetalComboBoxEditor</item>\n\t\t\t<item>MetalComboBoxEditor.UIResource</item>\n\t\t\t<item>MetalComboBoxIcon</item>\n\t\t\t<item>MetalComboBoxUI</item>\n\t\t\t<item>MetalDesktopIconUI</item>\n\t\t\t<item>MetalFileChooserUI</item>\n\t\t\t<item>MetalIconFactory</item>\n\t\t\t<item>MetalIconFactory.FileIcon16</item>\n\t\t\t<item>MetalIconFactory.FolderIcon16</item>\n\t\t\t<item>MetalIconFactory.PaletteCloseIcon</item>\n\t\t\t<item>MetalIconFactory.TreeControlIcon</item>\n\t\t\t<item>MetalIconFactory.TreeFolderIcon</item>\n\t\t\t<item>MetalIconFactory.TreeLeafIcon</item>\n\t\t\t<item>MetalInternalFrameTitlePane</item>\n\t\t\t<item>MetalInternalFrameUI</item>\n\t\t\t<item>MetalLabelUI</item>\n\t\t\t<item>MetalLookAndFeel</item>\n\t\t\t<item>MetalMenuBarUI</item>\n\t\t\t<item>MetalPopupMenuSeparatorUI</item>\n\t\t\t<item>MetalProgressBarUI</item>\n\t\t\t<item>MetalRadioButtonUI</item>\n\t\t\t<item>MetalRootPaneUI</item>\n\t\t\t<item>MetalScrollBarUI</item>\n\t\t\t<item>MetalScrollButton</item>\n\t\t\t<item>MetalScrollPaneUI</item>\n\t\t\t<item>MetalSeparatorUI</item>\n\t\t\t<item>MetalSliderUI</item>\n\t\t\t<item>MetalSplitPaneUI</item>\n\t\t\t<item>MetalTabbedPaneUI</item>\n\t\t\t<item>MetalTextFieldUI</item>\n\t\t\t<item>MetalTheme</item>\n\t\t\t<item>MetalToggleButtonUI</item>\n\t\t\t<item>MetalToolBarUI</item>\n\t\t\t<item>MetalToolTipUI</item>\n\t\t\t<item>MetalTreeUI</item>\n\t\t\t<item>Method</item>\n\t\t\t<item>MethodDescriptor</item>\n\t\t\t<item>MidiChannel</item>\n\t\t\t<item>MidiDevice</item>\n\t\t\t<item>MidiDevice.Info</item>\n\t\t\t<item>MidiDeviceProvider</item>\n\t\t\t<item>MidiEvent</item>\n\t\t\t<item>MidiFileFormat</item>\n\t\t\t<item>MidiFileReader</item>\n\t\t\t<item>MidiFileWriter</item>\n\t\t\t<item>MidiMessage</item>\n\t\t\t<item>MidiSystem</item>\n\t\t\t<item>MidiUnavailableException</item>\n\t\t\t<item>MimeTypeParseException</item>\n\t\t\t<item>MinimalHTMLWriter</item>\n\t\t\t<item>MissingFormatArgumentException</item>\n\t\t\t<item>MissingFormatWidthException</item>\n\t\t\t<item>MissingResourceException</item>\n\t\t\t<item>Mixer</item>\n\t\t\t<item>Mixer.Info</item>\n\t\t\t<item>MixerProvider</item>\n\t\t\t<item>ModelMBean</item>\n\t\t\t<item>ModelMBeanAttributeInfo</item>\n\t\t\t<item>ModelMBeanConstructorInfo</item>\n\t\t\t<item>ModelMBeanInfo</item>\n\t\t\t<item>ModelMBeanInfoSupport</item>\n\t\t\t<item>ModelMBeanNotificationBroadcaster</item>\n\t\t\t<item>ModelMBeanNotificationInfo</item>\n\t\t\t<item>ModelMBeanOperationInfo</item>\n\t\t\t<item>ModificationItem</item>\n\t\t\t<item>Modifier</item>\n\t\t\t<item>Monitor</item>\n\t\t\t<item>MonitorMBean</item>\n\t\t\t<item>MonitorNotification</item>\n\t\t\t<item>MonitorSettingException</item>\n\t\t\t<item>MouseAdapter</item>\n\t\t\t<item>MouseDragGestureRecognizer</item>\n\t\t\t<item>MouseEvent</item>\n\t\t\t<item>MouseInfo</item>\n\t\t\t<item>MouseInputAdapter</item>\n\t\t\t<item>MouseInputListener</item>\n\t\t\t<item>MouseListener</item>\n\t\t\t<item>MouseMotionAdapter</item>\n\t\t\t<item>MouseMotionListener</item>\n\t\t\t<item>MouseWheelEvent</item>\n\t\t\t<item>MouseWheelListener</item>\n\t\t\t<item>MultiButtonUI</item>\n\t\t\t<item>MultiColorChooserUI</item>\n\t\t\t<item>MultiComboBoxUI</item>\n\t\t\t<item>MultiDesktopIconUI</item>\n\t\t\t<item>MultiDesktopPaneUI</item>\n\t\t\t<item>MultiDoc</item>\n\t\t\t<item>MultiDocPrintJob</item>\n\t\t\t<item>MultiDocPrintService</item>\n\t\t\t<item>MultiFileChooserUI</item>\n\t\t\t<item>MultiInternalFrameUI</item>\n\t\t\t<item>MultiLabelUI</item>\n\t\t\t<item>MultiListUI</item>\n\t\t\t<item>MultiLookAndFeel</item>\n\t\t\t<item>MultiMenuBarUI</item>\n\t\t\t<item>MultiMenuItemUI</item>\n\t\t\t<item>MultiOptionPaneUI</item>\n\t\t\t<item>MultiPanelUI</item>\n\t\t\t<item>MultiPixelPackedSampleModel</item>\n\t\t\t<item>MultiPopupMenuUI</item>\n\t\t\t<item>MultiProgressBarUI</item>\n\t\t\t<item>MultiRootPaneUI</item>\n\t\t\t<item>MultiScrollBarUI</item>\n\t\t\t<item>MultiScrollPaneUI</item>\n\t\t\t<item>MultiSeparatorUI</item>\n\t\t\t<item>MultiSliderUI</item>\n\t\t\t<item>MultiSpinnerUI</item>\n\t\t\t<item>MultiSplitPaneUI</item>\n\t\t\t<item>MultiTabbedPaneUI</item>\n\t\t\t<item>MultiTableHeaderUI</item>\n\t\t\t<item>MultiTableUI</item>\n\t\t\t<item>MultiTextUI</item>\n\t\t\t<item>MultiToolBarUI</item>\n\t\t\t<item>MultiToolTipUI</item>\n\t\t\t<item>MultiTreeUI</item>\n\t\t\t<item>MultiViewportUI</item>\n\t\t\t<item>MulticastSocket</item>\n\t\t\t<item>MultipleComponentProfileHelper</item>\n\t\t\t<item>MultipleComponentProfileHolder</item>\n\t\t\t<item>MultipleDocumentHandling</item>\n\t\t\t<item>MultipleMaster</item>\n\t\t\t<item>MutableAttributeSet</item>\n\t\t\t<item>MutableComboBoxModel</item>\n\t\t\t<item>MutableTreeNode</item>\n\t\t\t<item>NON_EXISTENT</item>\n\t\t\t<item>NO_IMPLEMENT</item>\n\t\t\t<item>NO_MEMORY</item>\n\t\t\t<item>NO_PERMISSION</item>\n\t\t\t<item>NO_RESOURCES</item>\n\t\t\t<item>NO_RESPONSE</item>\n\t\t\t<item>NVList</item>\n\t\t\t<item>Name</item>\n\t\t\t<item>NameAlreadyBoundException</item>\n\t\t\t<item>NameCallback</item>\n\t\t\t<item>NameClassPair</item>\n\t\t\t<item>NameComponent</item>\n\t\t\t<item>NameComponentHelper</item>\n\t\t\t<item>NameComponentHolder</item>\n\t\t\t<item>NameDynAnyPair</item>\n\t\t\t<item>NameDynAnyPairHelper</item>\n\t\t\t<item>NameDynAnyPairSeqHelper</item>\n\t\t\t<item>NameHelper</item>\n\t\t\t<item>NameHolder</item>\n\t\t\t<item>NameList</item>\n\t\t\t<item>NameNotFoundException</item>\n\t\t\t<item>NameParser</item>\n\t\t\t<item>NameValuePair</item>\n\t\t\t<item>NameValuePair</item>\n\t\t\t<item>NameValuePairHelper</item>\n\t\t\t<item>NameValuePairHelper</item>\n\t\t\t<item>NameValuePairSeqHelper</item>\n\t\t\t<item>NamedNodeMap</item>\n\t\t\t<item>NamedValue</item>\n\t\t\t<item>NamespaceChangeListener</item>\n\t\t\t<item>NamespaceContext</item>\n\t\t\t<item>NamespaceSupport</item>\n\t\t\t<item>Naming</item>\n\t\t\t<item>NamingContext</item>\n\t\t\t<item>NamingContextExt</item>\n\t\t\t<item>NamingContextExtHelper</item>\n\t\t\t<item>NamingContextExtHolder</item>\n\t\t\t<item>NamingContextExtOperations</item>\n\t\t\t<item>NamingContextExtPOA</item>\n\t\t\t<item>NamingContextHelper</item>\n\t\t\t<item>NamingContextHolder</item>\n\t\t\t<item>NamingContextOperations</item>\n\t\t\t<item>NamingContextPOA</item>\n\t\t\t<item>NamingEnumeration</item>\n\t\t\t<item>NamingEvent</item>\n\t\t\t<item>NamingException</item>\n\t\t\t<item>NamingExceptionEvent</item>\n\t\t\t<item>NamingListener</item>\n\t\t\t<item>NamingManager</item>\n\t\t\t<item>NamingSecurityException</item>\n\t\t\t<item>NavigationFilter</item>\n\t\t\t<item>NavigationFilter.FilterBypass</item>\n\t\t\t<item>NegativeArraySizeException</item>\n\t\t\t<item>NetPermission</item>\n\t\t\t<item>NetworkInterface</item>\n\t\t\t<item>NoClassDefFoundError</item>\n\t\t\t<item>NoConnectionPendingException</item>\n\t\t\t<item>NoContext</item>\n\t\t\t<item>NoContextHelper</item>\n\t\t\t<item>NoInitialContextException</item>\n\t\t\t<item>NoPermissionException</item>\n\t\t\t<item>NoRouteToHostException</item>\n\t\t\t<item>NoServant</item>\n\t\t\t<item>NoServantHelper</item>\n\t\t\t<item>NoSuchAlgorithmException</item>\n\t\t\t<item>NoSuchAttributeException</item>\n\t\t\t<item>NoSuchElementException</item>\n\t\t\t<item>NoSuchFieldError</item>\n\t\t\t<item>NoSuchFieldException</item>\n\t\t\t<item>NoSuchMethodError</item>\n\t\t\t<item>NoSuchMethodException</item>\n\t\t\t<item>NoSuchObjectException</item>\n\t\t\t<item>NoSuchPaddingException</item>\n\t\t\t<item>NoSuchProviderException</item>\n\t\t\t<item>Node</item>\n\t\t\t<item>NodeChangeEvent</item>\n\t\t\t<item>NodeChangeListener</item>\n\t\t\t<item>NodeList</item>\n\t\t\t<item>NonReadableChannelException</item>\n\t\t\t<item>NonWritableChannelException</item>\n\t\t\t<item>NoninvertibleTransformException</item>\n\t\t\t<item>NotActiveException</item>\n\t\t\t<item>NotBoundException</item>\n\t\t\t<item>NotCompliantMBeanException</item>\n\t\t\t<item>NotContextException</item>\n\t\t\t<item>NotEmpty</item>\n\t\t\t<item>NotEmptyHelper</item>\n\t\t\t<item>NotEmptyHolder</item>\n\t\t\t<item>NotFound</item>\n\t\t\t<item>NotFoundHelper</item>\n\t\t\t<item>NotFoundHolder</item>\n\t\t\t<item>NotFoundReason</item>\n\t\t\t<item>NotFoundReasonHelper</item>\n\t\t\t<item>NotFoundReasonHolder</item>\n\t\t\t<item>NotOwnerException</item>\n\t\t\t<item>NotSerializableException</item>\n\t\t\t<item>NotYetBoundException</item>\n\t\t\t<item>NotYetConnectedException</item>\n\t\t\t<item>Notation</item>\n\t\t\t<item>Notification</item>\n\t\t\t<item>NotificationBroadcaster</item>\n\t\t\t<item>NotificationBroadcasterSupport</item>\n\t\t\t<item>NotificationEmitter</item>\n\t\t\t<item>NotificationFilter</item>\n\t\t\t<item>NotificationFilterSupport</item>\n\t\t\t<item>NotificationListener</item>\n\t\t\t<item>NotificationResult</item>\n\t\t\t<item>NullCipher</item>\n\t\t\t<item>NullPointerException</item>\n\t\t\t<item>Number</item>\n\t\t\t<item>NumberFormat</item>\n\t\t\t<item>NumberFormat.Field</item>\n\t\t\t<item>NumberFormatException</item>\n\t\t\t<item>NumberFormatter</item>\n\t\t\t<item>NumberOfDocuments</item>\n\t\t\t<item>NumberOfInterveningJobs</item>\n\t\t\t<item>NumberUp</item>\n\t\t\t<item>NumberUpSupported</item>\n\t\t\t<item>NumericShaper</item>\n\t\t\t<item>OAEPParameterSpec</item>\n\t\t\t<item>OBJECT_NOT_EXIST</item>\n\t\t\t<item>OBJ_ADAPTER</item>\n\t\t\t<item>OMGVMCID</item>\n\t\t\t<item>ORB</item>\n\t\t\t<item>ORB</item>\n\t\t\t<item>ORBIdHelper</item>\n\t\t\t<item>ORBInitInfo</item>\n\t\t\t<item>ORBInitInfoOperations</item>\n\t\t\t<item>ORBInitializer</item>\n\t\t\t<item>ORBInitializerOperations</item>\n\t\t\t<item>ObjID</item>\n\t\t\t<item>Object</item>\n\t\t\t<item>Object</item>\n\t\t\t<item>ObjectAlreadyActive</item>\n\t\t\t<item>ObjectAlreadyActiveHelper</item>\n\t\t\t<item>ObjectChangeListener</item>\n\t\t\t<item>ObjectFactory</item>\n\t\t\t<item>ObjectFactoryBuilder</item>\n\t\t\t<item>ObjectHelper</item>\n\t\t\t<item>ObjectHolder</item>\n\t\t\t<item>ObjectIdHelper</item>\n\t\t\t<item>ObjectIdHelper</item>\n\t\t\t<item>ObjectImpl</item>\n\t\t\t<item>ObjectImpl</item>\n\t\t\t<item>ObjectInput</item>\n\t\t\t<item>ObjectInputStream</item>\n\t\t\t<item>ObjectInputStream.GetField</item>\n\t\t\t<item>ObjectInputValidation</item>\n\t\t\t<item>ObjectInstance</item>\n\t\t\t<item>ObjectName</item>\n\t\t\t<item>ObjectNotActive</item>\n\t\t\t<item>ObjectNotActiveHelper</item>\n\t\t\t<item>ObjectOutput</item>\n\t\t\t<item>ObjectOutputStream</item>\n\t\t\t<item>ObjectOutputStream.PutField</item>\n\t\t\t<item>ObjectReferenceFactory</item>\n\t\t\t<item>ObjectReferenceFactoryHelper</item>\n\t\t\t<item>ObjectReferenceFactoryHolder</item>\n\t\t\t<item>ObjectReferenceTemplate</item>\n\t\t\t<item>ObjectReferenceTemplateHelper</item>\n\t\t\t<item>ObjectReferenceTemplateHolder</item>\n\t\t\t<item>ObjectReferenceTemplateSeqHelper</item>\n\t\t\t<item>ObjectReferenceTemplateSeqHolder</item>\n\t\t\t<item>ObjectStreamClass</item>\n\t\t\t<item>ObjectStreamConstants</item>\n\t\t\t<item>ObjectStreamException</item>\n\t\t\t<item>ObjectStreamField</item>\n\t\t\t<item>ObjectView</item>\n\t\t\t<item>Observable</item>\n\t\t\t<item>Observer</item>\n\t\t\t<item>OceanTheme</item>\n\t\t\t<item>OctetSeqHelper</item>\n\t\t\t<item>OctetSeqHolder</item>\n\t\t\t<item>Oid</item>\n\t\t\t<item>OpenDataException</item>\n\t\t\t<item>OpenMBeanAttributeInfo</item>\n\t\t\t<item>OpenMBeanAttributeInfoSupport</item>\n\t\t\t<item>OpenMBeanConstructorInfo</item>\n\t\t\t<item>OpenMBeanConstructorInfoSupport</item>\n\t\t\t<item>OpenMBeanInfo</item>\n\t\t\t<item>OpenMBeanInfoSupport</item>\n\t\t\t<item>OpenMBeanOperationInfo</item>\n\t\t\t<item>OpenMBeanOperationInfoSupport</item>\n\t\t\t<item>OpenMBeanParameterInfo</item>\n\t\t\t<item>OpenMBeanParameterInfoSupport</item>\n\t\t\t<item>OpenType</item>\n\t\t\t<item>OpenType</item>\n\t\t\t<item>OperatingSystemMXBean</item>\n\t\t\t<item>Operation</item>\n\t\t\t<item>OperationNotSupportedException</item>\n\t\t\t<item>OperationsException</item>\n\t\t\t<item>Option</item>\n\t\t\t<item>OptionPaneUI</item>\n\t\t\t<item>OptionalDataException</item>\n\t\t\t<item>OrientationRequested</item>\n\t\t\t<item>OutOfMemoryError</item>\n\t\t\t<item>OutputDeviceAssigned</item>\n\t\t\t<item>OutputKeys</item>\n\t\t\t<item>OutputStream</item>\n\t\t\t<item>OutputStream</item>\n\t\t\t<item>OutputStream</item>\n\t\t\t<item>OutputStreamWriter</item>\n\t\t\t<item>OverlappingFileLockException</item>\n\t\t\t<item>OverlayLayout</item>\n\t\t\t<item>Override</item>\n\t\t\t<item>Owner</item>\n\t\t\t<item>PBEKey</item>\n\t\t\t<item>PBEKeySpec</item>\n\t\t\t<item>PBEParameterSpec</item>\n\t\t\t<item>PDLOverrideSupported</item>\n\t\t\t<item>PERSIST_STORE</item>\n\t\t\t<item>PKCS8EncodedKeySpec</item>\n\t\t\t<item>PKIXBuilderParameters</item>\n\t\t\t<item>PKIXCertPathBuilderResult</item>\n\t\t\t<item>PKIXCertPathChecker</item>\n\t\t\t<item>PKIXCertPathValidatorResult</item>\n\t\t\t<item>PKIXParameters</item>\n\t\t\t<item>POA</item>\n\t\t\t<item>POAHelper</item>\n\t\t\t<item>POAManager</item>\n\t\t\t<item>POAManagerOperations</item>\n\t\t\t<item>POAOperations</item>\n\t\t\t<item>PRIVATE_MEMBER</item>\n\t\t\t<item>PSSParameterSpec</item>\n\t\t\t<item>PSource</item>\n\t\t\t<item>PSource.PSpecified</item>\n\t\t\t<item>PUBLIC_MEMBER</item>\n\t\t\t<item>Pack200</item>\n\t\t\t<item>Pack200.Packer</item>\n\t\t\t<item>Pack200.Unpacker</item>\n\t\t\t<item>Package</item>\n\t\t\t<item>PackedColorModel</item>\n\t\t\t<item>PageAttributes</item>\n\t\t\t<item>PageAttributes.ColorType</item>\n\t\t\t<item>PageAttributes.MediaType</item>\n\t\t\t<item>PageAttributes.OrientationRequestedType</item>\n\t\t\t<item>PageAttributes.OriginType</item>\n\t\t\t<item>PageAttributes.PrintQualityType</item>\n\t\t\t<item>PageFormat</item>\n\t\t\t<item>PageRanges</item>\n\t\t\t<item>Pageable</item>\n\t\t\t<item>PagedResultsControl</item>\n\t\t\t<item>PagedResultsResponseControl</item>\n\t\t\t<item>PagesPerMinute</item>\n\t\t\t<item>PagesPerMinuteColor</item>\n\t\t\t<item>Paint</item>\n\t\t\t<item>PaintContext</item>\n\t\t\t<item>PaintEvent</item>\n\t\t\t<item>Panel</item>\n\t\t\t<item>PanelUI</item>\n\t\t\t<item>Paper</item>\n\t\t\t<item>ParagraphView</item>\n\t\t\t<item>ParagraphView</item>\n\t\t\t<item>Parameter</item>\n\t\t\t<item>ParameterBlock</item>\n\t\t\t<item>ParameterDescriptor</item>\n\t\t\t<item>ParameterMetaData</item>\n\t\t\t<item>ParameterMode</item>\n\t\t\t<item>ParameterModeHelper</item>\n\t\t\t<item>ParameterModeHolder</item>\n\t\t\t<item>ParameterizedType</item>\n\t\t\t<item>ParseException</item>\n\t\t\t<item>ParsePosition</item>\n\t\t\t<item>Parser</item>\n\t\t\t<item>Parser</item>\n\t\t\t<item>ParserAdapter</item>\n\t\t\t<item>ParserConfigurationException</item>\n\t\t\t<item>ParserDelegator</item>\n\t\t\t<item>ParserFactory</item>\n\t\t\t<item>PartialResultException</item>\n\t\t\t<item>PasswordAuthentication</item>\n\t\t\t<item>PasswordCallback</item>\n\t\t\t<item>PasswordView</item>\n\t\t\t<item>Patch</item>\n\t\t\t<item>PathIterator</item>\n\t\t\t<item>Pattern</item>\n\t\t\t<item>PatternSyntaxException</item>\n\t\t\t<item>Permission</item>\n\t\t\t<item>Permission</item>\n\t\t\t<item>PermissionCollection</item>\n\t\t\t<item>Permissions</item>\n\t\t\t<item>PersistenceDelegate</item>\n\t\t\t<item>PersistentMBean</item>\n\t\t\t<item>PhantomReference</item>\n\t\t\t<item>Pipe</item>\n\t\t\t<item>Pipe.SinkChannel</item>\n\t\t\t<item>Pipe.SourceChannel</item>\n\t\t\t<item>PipedInputStream</item>\n\t\t\t<item>PipedOutputStream</item>\n\t\t\t<item>PipedReader</item>\n\t\t\t<item>PipedWriter</item>\n\t\t\t<item>PixelGrabber</item>\n\t\t\t<item>PixelInterleavedSampleModel</item>\n\t\t\t<item>PlainDocument</item>\n\t\t\t<item>PlainView</item>\n\t\t\t<item>Point</item>\n\t\t\t<item>Point2D</item>\n\t\t\t<item>Point2D.Double</item>\n\t\t\t<item>Point2D.Float</item>\n\t\t\t<item>PointerInfo</item>\n\t\t\t<item>Policy</item>\n\t\t\t<item>Policy</item>\n\t\t\t<item>Policy</item>\n\t\t\t<item>PolicyError</item>\n\t\t\t<item>PolicyErrorCodeHelper</item>\n\t\t\t<item>PolicyErrorHelper</item>\n\t\t\t<item>PolicyErrorHolder</item>\n\t\t\t<item>PolicyFactory</item>\n\t\t\t<item>PolicyFactoryOperations</item>\n\t\t\t<item>PolicyHelper</item>\n\t\t\t<item>PolicyHolder</item>\n\t\t\t<item>PolicyListHelper</item>\n\t\t\t<item>PolicyListHolder</item>\n\t\t\t<item>PolicyNode</item>\n\t\t\t<item>PolicyOperations</item>\n\t\t\t<item>PolicyQualifierInfo</item>\n\t\t\t<item>PolicyTypeHelper</item>\n\t\t\t<item>Polygon</item>\n\t\t\t<item>PooledConnection</item>\n\t\t\t<item>Popup</item>\n\t\t\t<item>PopupFactory</item>\n\t\t\t<item>PopupMenu</item>\n\t\t\t<item>PopupMenuEvent</item>\n\t\t\t<item>PopupMenuListener</item>\n\t\t\t<item>PopupMenuUI</item>\n\t\t\t<item>Port</item>\n\t\t\t<item>Port.Info</item>\n\t\t\t<item>PortUnreachableException</item>\n\t\t\t<item>PortableRemoteObject</item>\n\t\t\t<item>PortableRemoteObjectDelegate</item>\n\t\t\t<item>Position</item>\n\t\t\t<item>Position.Bias</item>\n\t\t\t<item>Predicate</item>\n\t\t\t<item>PreferenceChangeEvent</item>\n\t\t\t<item>PreferenceChangeListener</item>\n\t\t\t<item>Preferences</item>\n\t\t\t<item>PreferencesFactory</item>\n\t\t\t<item>PreparedStatement</item>\n\t\t\t<item>PresentationDirection</item>\n\t\t\t<item>Principal</item>\n\t\t\t<item>Principal</item>\n\t\t\t<item>PrincipalHolder</item>\n\t\t\t<item>PrintEvent</item>\n\t\t\t<item>PrintException</item>\n\t\t\t<item>PrintGraphics</item>\n\t\t\t<item>PrintJob</item>\n\t\t\t<item>PrintJobAdapter</item>\n\t\t\t<item>PrintJobAttribute</item>\n\t\t\t<item>PrintJobAttributeEvent</item>\n\t\t\t<item>PrintJobAttributeListener</item>\n\t\t\t<item>PrintJobAttributeSet</item>\n\t\t\t<item>PrintJobEvent</item>\n\t\t\t<item>PrintJobListener</item>\n\t\t\t<item>PrintQuality</item>\n\t\t\t<item>PrintRequestAttribute</item>\n\t\t\t<item>PrintRequestAttributeSet</item>\n\t\t\t<item>PrintService</item>\n\t\t\t<item>PrintServiceAttribute</item>\n\t\t\t<item>PrintServiceAttributeEvent</item>\n\t\t\t<item>PrintServiceAttributeListener</item>\n\t\t\t<item>PrintServiceAttributeSet</item>\n\t\t\t<item>PrintServiceLookup</item>\n\t\t\t<item>PrintStream</item>\n\t\t\t<item>PrintWriter</item>\n\t\t\t<item>Printable</item>\n\t\t\t<item>PrinterAbortException</item>\n\t\t\t<item>PrinterException</item>\n\t\t\t<item>PrinterGraphics</item>\n\t\t\t<item>PrinterIOException</item>\n\t\t\t<item>PrinterInfo</item>\n\t\t\t<item>PrinterIsAcceptingJobs</item>\n\t\t\t<item>PrinterJob</item>\n\t\t\t<item>PrinterLocation</item>\n\t\t\t<item>PrinterMakeAndModel</item>\n\t\t\t<item>PrinterMessageFromOperator</item>\n\t\t\t<item>PrinterMoreInfo</item>\n\t\t\t<item>PrinterMoreInfoManufacturer</item>\n\t\t\t<item>PrinterName</item>\n\t\t\t<item>PrinterResolution</item>\n\t\t\t<item>PrinterState</item>\n\t\t\t<item>PrinterStateReason</item>\n\t\t\t<item>PrinterStateReasons</item>\n\t\t\t<item>PrinterURI</item>\n\t\t\t<item>PriorityBlockingQueue</item>\n\t\t\t<item>PriorityQueue</item>\n\t\t\t<item>PrivateClassLoader</item>\n\t\t\t<item>PrivateCredentialPermission</item>\n\t\t\t<item>PrivateKey</item>\n\t\t\t<item>PrivateMLet</item>\n\t\t\t<item>PrivilegedAction</item>\n\t\t\t<item>PrivilegedActionException</item>\n\t\t\t<item>PrivilegedExceptionAction</item>\n\t\t\t<item>Process</item>\n\t\t\t<item>ProcessBuilder</item>\n\t\t\t<item>ProcessingInstruction</item>\n\t\t\t<item>ProfileDataException</item>\n\t\t\t<item>ProfileIdHelper</item>\n\t\t\t<item>ProgressBarUI</item>\n\t\t\t<item>ProgressMonitor</item>\n\t\t\t<item>ProgressMonitorInputStream</item>\n\t\t\t<item>Properties</item>\n\t\t\t<item>PropertyChangeEvent</item>\n\t\t\t<item>PropertyChangeListener</item>\n\t\t\t<item>PropertyChangeListenerProxy</item>\n\t\t\t<item>PropertyChangeSupport</item>\n\t\t\t<item>PropertyDescriptor</item>\n\t\t\t<item>PropertyEditor</item>\n\t\t\t<item>PropertyEditorManager</item>\n\t\t\t<item>PropertyEditorSupport</item>\n\t\t\t<item>PropertyPermission</item>\n\t\t\t<item>PropertyResourceBundle</item>\n\t\t\t<item>PropertyVetoException</item>\n\t\t\t<item>ProtectionDomain</item>\n\t\t\t<item>ProtocolException</item>\n\t\t\t<item>Provider</item>\n\t\t\t<item>Provider.Service</item>\n\t\t\t<item>ProviderException</item>\n\t\t\t<item>Proxy</item>\n\t\t\t<item>Proxy</item>\n\t\t\t<item>Proxy.Type</item>\n\t\t\t<item>ProxySelector</item>\n\t\t\t<item>PublicKey</item>\n\t\t\t<item>PushbackInputStream</item>\n\t\t\t<item>PushbackReader</item>\n\t\t\t<item>QName</item>\n\t\t\t<item>QuadCurve2D</item>\n\t\t\t<item>QuadCurve2D.Double</item>\n\t\t\t<item>QuadCurve2D.Float</item>\n\t\t\t<item>Query</item>\n\t\t\t<item>QueryEval</item>\n\t\t\t<item>QueryExp</item>\n\t\t\t<item>Queue</item>\n\t\t\t<item>QueuedJobCount</item>\n\t\t\t<item>RC2ParameterSpec</item>\n\t\t\t<item>RC5ParameterSpec</item>\n\t\t\t<item>REBIND</item>\n\t\t\t<item>REQUEST_PROCESSING_POLICY_ID</item>\n\t\t\t<item>RGBImageFilter</item>\n\t\t\t<item>RMIClassLoader</item>\n\t\t\t<item>RMIClassLoaderSpi</item>\n\t\t\t<item>RMIClientSocketFactory</item>\n\t\t\t<item>RMIConnection</item>\n\t\t\t<item>RMIConnectionImpl</item>\n\t\t\t<item>RMIConnectionImpl_Stub</item>\n\t\t\t<item>RMIConnector</item>\n\t\t\t<item>RMIConnectorServer</item>\n\t\t\t<item>RMICustomMaxStreamFormat</item>\n\t\t\t<item>RMIFailureHandler</item>\n\t\t\t<item>RMIIIOPServerImpl</item>\n\t\t\t<item>RMIJRMPServerImpl</item>\n\t\t\t<item>RMISecurityException</item>\n\t\t\t<item>RMISecurityManager</item>\n\t\t\t<item>RMIServer</item>\n\t\t\t<item>RMIServerImpl</item>\n\t\t\t<item>RMIServerImpl_Stub</item>\n\t\t\t<item>RMIServerSocketFactory</item>\n\t\t\t<item>RMISocketFactory</item>\n\t\t\t<item>RSAKey</item>\n\t\t\t<item>RSAKeyGenParameterSpec</item>\n\t\t\t<item>RSAMultiPrimePrivateCrtKey</item>\n\t\t\t<item>RSAMultiPrimePrivateCrtKeySpec</item>\n\t\t\t<item>RSAOtherPrimeInfo</item>\n\t\t\t<item>RSAPrivateCrtKey</item>\n\t\t\t<item>RSAPrivateCrtKeySpec</item>\n\t\t\t<item>RSAPrivateKey</item>\n\t\t\t<item>RSAPrivateKeySpec</item>\n\t\t\t<item>RSAPublicKey</item>\n\t\t\t<item>RSAPublicKeySpec</item>\n\t\t\t<item>RTFEditorKit</item>\n\t\t\t<item>Random</item>\n\t\t\t<item>RandomAccess</item>\n\t\t\t<item>RandomAccessFile</item>\n\t\t\t<item>Raster</item>\n\t\t\t<item>RasterFormatException</item>\n\t\t\t<item>RasterOp</item>\n\t\t\t<item>Rdn</item>\n\t\t\t<item>ReadOnlyBufferException</item>\n\t\t\t<item>ReadWriteLock</item>\n\t\t\t<item>Readable</item>\n\t\t\t<item>ReadableByteChannel</item>\n\t\t\t<item>Reader</item>\n\t\t\t<item>RealmCallback</item>\n\t\t\t<item>RealmChoiceCallback</item>\n\t\t\t<item>Receiver</item>\n\t\t\t<item>Rectangle</item>\n\t\t\t<item>Rectangle2D</item>\n\t\t\t<item>Rectangle2D.Double</item>\n\t\t\t<item>Rectangle2D.Float</item>\n\t\t\t<item>RectangularShape</item>\n\t\t\t<item>ReentrantLock</item>\n\t\t\t<item>ReentrantReadWriteLock</item>\n\t\t\t<item>ReentrantReadWriteLock.ReadLock</item>\n\t\t\t<item>ReentrantReadWriteLock.WriteLock</item>\n\t\t\t<item>Ref</item>\n\t\t\t<item>RefAddr</item>\n\t\t\t<item>Reference</item>\n\t\t\t<item>Reference</item>\n\t\t\t<item>ReferenceQueue</item>\n\t\t\t<item>ReferenceUriSchemesSupported</item>\n\t\t\t<item>Referenceable</item>\n\t\t\t<item>ReferralException</item>\n\t\t\t<item>ReflectPermission</item>\n\t\t\t<item>ReflectionException</item>\n\t\t\t<item>RefreshFailedException</item>\n\t\t\t<item>Refreshable</item>\n\t\t\t<item>Region</item>\n\t\t\t<item>RegisterableService</item>\n\t\t\t<item>Registry</item>\n\t\t\t<item>RegistryHandler</item>\n\t\t\t<item>RejectedExecutionException</item>\n\t\t\t<item>RejectedExecutionHandler</item>\n\t\t\t<item>Relation</item>\n\t\t\t<item>RelationException</item>\n\t\t\t<item>RelationNotFoundException</item>\n\t\t\t<item>RelationNotification</item>\n\t\t\t<item>RelationService</item>\n\t\t\t<item>RelationServiceMBean</item>\n\t\t\t<item>RelationServiceNotRegisteredException</item>\n\t\t\t<item>RelationSupport</item>\n\t\t\t<item>RelationSupportMBean</item>\n\t\t\t<item>RelationType</item>\n\t\t\t<item>RelationTypeNotFoundException</item>\n\t\t\t<item>RelationTypeSupport</item>\n\t\t\t<item>RemarshalException</item>\n\t\t\t<item>Remote</item>\n\t\t\t<item>RemoteCall</item>\n\t\t\t<item>RemoteException</item>\n\t\t\t<item>RemoteObject</item>\n\t\t\t<item>RemoteObjectInvocationHandler</item>\n\t\t\t<item>RemoteRef</item>\n\t\t\t<item>RemoteServer</item>\n\t\t\t<item>RemoteStub</item>\n\t\t\t<item>RenderContext</item>\n\t\t\t<item>RenderableImage</item>\n\t\t\t<item>RenderableImageOp</item>\n\t\t\t<item>RenderableImageProducer</item>\n\t\t\t<item>RenderedImage</item>\n\t\t\t<item>RenderedImageFactory</item>\n\t\t\t<item>Renderer</item>\n\t\t\t<item>RenderingHints</item>\n\t\t\t<item>RenderingHints.Key</item>\n\t\t\t<item>RepaintManager</item>\n\t\t\t<item>ReplicateScaleFilter</item>\n\t\t\t<item>RepositoryIdHelper</item>\n\t\t\t<item>Request</item>\n\t\t\t<item>RequestInfo</item>\n\t\t\t<item>RequestInfoOperations</item>\n\t\t\t<item>RequestProcessingPolicy</item>\n\t\t\t<item>RequestProcessingPolicyOperations</item>\n\t\t\t<item>RequestProcessingPolicyValue</item>\n\t\t\t<item>RequestingUserName</item>\n\t\t\t<item>RequiredModelMBean</item>\n\t\t\t<item>RescaleOp</item>\n\t\t\t<item>ResolutionSyntax</item>\n\t\t\t<item>ResolveResult</item>\n\t\t\t<item>Resolver</item>\n\t\t\t<item>ResourceBundle</item>\n\t\t\t<item>ResponseCache</item>\n\t\t\t<item>ResponseHandler</item>\n\t\t\t<item>Result</item>\n\t\t\t<item>ResultSet</item>\n\t\t\t<item>ResultSetMetaData</item>\n\t\t\t<item>Retention</item>\n\t\t\t<item>RetentionPolicy</item>\n\t\t\t<item>ReverbType</item>\n\t\t\t<item>Robot</item>\n\t\t\t<item>Role</item>\n\t\t\t<item>RoleInfo</item>\n\t\t\t<item>RoleInfoNotFoundException</item>\n\t\t\t<item>RoleList</item>\n\t\t\t<item>RoleNotFoundException</item>\n\t\t\t<item>RoleResult</item>\n\t\t\t<item>RoleStatus</item>\n\t\t\t<item>RoleUnresolved</item>\n\t\t\t<item>RoleUnresolvedList</item>\n\t\t\t<item>RootPaneContainer</item>\n\t\t\t<item>RootPaneUI</item>\n\t\t\t<item>RoundRectangle2D</item>\n\t\t\t<item>RoundRectangle2D.Double</item>\n\t\t\t<item>RoundRectangle2D.Float</item>\n\t\t\t<item>RoundingMode</item>\n\t\t\t<item>RowMapper</item>\n\t\t\t<item>RowSet</item>\n\t\t\t<item>RowSetEvent</item>\n\t\t\t<item>RowSetInternal</item>\n\t\t\t<item>RowSetListener</item>\n\t\t\t<item>RowSetMetaData</item>\n\t\t\t<item>RowSetMetaDataImpl</item>\n\t\t\t<item>RowSetReader</item>\n\t\t\t<item>RowSetWarning</item>\n\t\t\t<item>RowSetWriter</item>\n\t\t\t<item>RuleBasedCollator</item>\n\t\t\t<item>RunTime</item>\n\t\t\t<item>RunTimeOperations</item>\n\t\t\t<item>Runnable</item>\n\t\t\t<item>Runtime</item>\n\t\t\t<item>RuntimeErrorException</item>\n\t\t\t<item>RuntimeException</item>\n\t\t\t<item>RuntimeMBeanException</item>\n\t\t\t<item>RuntimeMXBean</item>\n\t\t\t<item>RuntimeOperationsException</item>\n\t\t\t<item>RuntimePermission</item>\n\t\t\t<item>SAXException</item>\n\t\t\t<item>SAXNotRecognizedException</item>\n\t\t\t<item>SAXNotSupportedException</item>\n\t\t\t<item>SAXParseException</item>\n\t\t\t<item>SAXParser</item>\n\t\t\t<item>SAXParserFactory</item>\n\t\t\t<item>SAXResult</item>\n\t\t\t<item>SAXSource</item>\n\t\t\t<item>SAXTransformerFactory</item>\n\t\t\t<item>SERVANT_RETENTION_POLICY_ID</item>\n\t\t\t<item>SQLData</item>\n\t\t\t<item>SQLException</item>\n\t\t\t<item>SQLInput</item>\n\t\t\t<item>SQLInputImpl</item>\n\t\t\t<item>SQLOutput</item>\n\t\t\t<item>SQLOutputImpl</item>\n\t\t\t<item>SQLPermission</item>\n\t\t\t<item>SQLWarning</item>\n\t\t\t<item>SSLContext</item>\n\t\t\t<item>SSLContextSpi</item>\n\t\t\t<item>SSLEngine</item>\n\t\t\t<item>SSLEngineResult</item>\n\t\t\t<item>SSLEngineResult.HandshakeStatus</item>\n\t\t\t<item>SSLEngineResult.Status</item>\n\t\t\t<item>SSLException</item>\n\t\t\t<item>SSLHandshakeException</item>\n\t\t\t<item>SSLKeyException</item>\n\t\t\t<item>SSLPeerUnverifiedException</item>\n\t\t\t<item>SSLPermission</item>\n\t\t\t<item>SSLProtocolException</item>\n\t\t\t<item>SSLServerSocket</item>\n\t\t\t<item>SSLServerSocketFactory</item>\n\t\t\t<item>SSLSession</item>\n\t\t\t<item>SSLSessionBindingEvent</item>\n\t\t\t<item>SSLSessionBindingListener</item>\n\t\t\t<item>SSLSessionContext</item>\n\t\t\t<item>SSLSocket</item>\n\t\t\t<item>SSLSocketFactory</item>\n\t\t\t<item>SUCCESSFUL</item>\n\t\t\t<item>SYNC_WITH_TRANSPORT</item>\n\t\t\t<item>SYSTEM_EXCEPTION</item>\n\t\t\t<item>SampleModel</item>\n\t\t\t<item>Sasl</item>\n\t\t\t<item>SaslClient</item>\n\t\t\t<item>SaslClientFactory</item>\n\t\t\t<item>SaslException</item>\n\t\t\t<item>SaslServer</item>\n\t\t\t<item>SaslServerFactory</item>\n\t\t\t<item>Savepoint</item>\n\t\t\t<item>Scanner</item>\n\t\t\t<item>ScatteringByteChannel</item>\n\t\t\t<item>ScheduledExecutorService</item>\n\t\t\t<item>ScheduledFuture</item>\n\t\t\t<item>ScheduledThreadPoolExecutor</item>\n\t\t\t<item>Schema</item>\n\t\t\t<item>SchemaFactory</item>\n\t\t\t<item>SchemaFactoryLoader</item>\n\t\t\t<item>SchemaViolationException</item>\n\t\t\t<item>ScrollBarUI</item>\n\t\t\t<item>ScrollPane</item>\n\t\t\t<item>ScrollPaneAdjustable</item>\n\t\t\t<item>ScrollPaneConstants</item>\n\t\t\t<item>ScrollPaneLayout</item>\n\t\t\t<item>ScrollPaneLayout.UIResource</item>\n\t\t\t<item>ScrollPaneUI</item>\n\t\t\t<item>Scrollable</item>\n\t\t\t<item>Scrollbar</item>\n\t\t\t<item>SealedObject</item>\n\t\t\t<item>SearchControls</item>\n\t\t\t<item>SearchResult</item>\n\t\t\t<item>SecretKey</item>\n\t\t\t<item>SecretKeyFactory</item>\n\t\t\t<item>SecretKeyFactorySpi</item>\n\t\t\t<item>SecretKeySpec</item>\n\t\t\t<item>SecureCacheResponse</item>\n\t\t\t<item>SecureClassLoader</item>\n\t\t\t<item>SecureRandom</item>\n\t\t\t<item>SecureRandomSpi</item>\n\t\t\t<item>Security</item>\n\t\t\t<item>SecurityException</item>\n\t\t\t<item>SecurityManager</item>\n\t\t\t<item>SecurityPermission</item>\n\t\t\t<item>Segment</item>\n\t\t\t<item>SelectableChannel</item>\n\t\t\t<item>SelectionKey</item>\n\t\t\t<item>Selector</item>\n\t\t\t<item>SelectorProvider</item>\n\t\t\t<item>Semaphore</item>\n\t\t\t<item>SeparatorUI</item>\n\t\t\t<item>Sequence</item>\n\t\t\t<item>SequenceInputStream</item>\n\t\t\t<item>Sequencer</item>\n\t\t\t<item>Sequencer.SyncMode</item>\n\t\t\t<item>SerialArray</item>\n\t\t\t<item>SerialBlob</item>\n\t\t\t<item>SerialClob</item>\n\t\t\t<item>SerialDatalink</item>\n\t\t\t<item>SerialException</item>\n\t\t\t<item>SerialJavaObject</item>\n\t\t\t<item>SerialRef</item>\n\t\t\t<item>SerialStruct</item>\n\t\t\t<item>Serializable</item>\n\t\t\t<item>SerializablePermission</item>\n\t\t\t<item>Servant</item>\n\t\t\t<item>ServantActivator</item>\n\t\t\t<item>ServantActivatorHelper</item>\n\t\t\t<item>ServantActivatorOperations</item>\n\t\t\t<item>ServantActivatorPOA</item>\n\t\t\t<item>ServantAlreadyActive</item>\n\t\t\t<item>ServantAlreadyActiveHelper</item>\n\t\t\t<item>ServantLocator</item>\n\t\t\t<item>ServantLocatorHelper</item>\n\t\t\t<item>ServantLocatorOperations</item>\n\t\t\t<item>ServantLocatorPOA</item>\n\t\t\t<item>ServantManager</item>\n\t\t\t<item>ServantManagerOperations</item>\n\t\t\t<item>ServantNotActive</item>\n\t\t\t<item>ServantNotActiveHelper</item>\n\t\t\t<item>ServantObject</item>\n\t\t\t<item>ServantRetentionPolicy</item>\n\t\t\t<item>ServantRetentionPolicyOperations</item>\n\t\t\t<item>ServantRetentionPolicyValue</item>\n\t\t\t<item>ServerCloneException</item>\n\t\t\t<item>ServerError</item>\n\t\t\t<item>ServerException</item>\n\t\t\t<item>ServerIdHelper</item>\n\t\t\t<item>ServerNotActiveException</item>\n\t\t\t<item>ServerRef</item>\n\t\t\t<item>ServerRequest</item>\n\t\t\t<item>ServerRequestInfo</item>\n\t\t\t<item>ServerRequestInfoOperations</item>\n\t\t\t<item>ServerRequestInterceptor</item>\n\t\t\t<item>ServerRequestInterceptorOperations</item>\n\t\t\t<item>ServerRuntimeException</item>\n\t\t\t<item>ServerSocket</item>\n\t\t\t<item>ServerSocketChannel</item>\n\t\t\t<item>ServerSocketFactory</item>\n\t\t\t<item>ServiceContext</item>\n\t\t\t<item>ServiceContextHelper</item>\n\t\t\t<item>ServiceContextHolder</item>\n\t\t\t<item>ServiceContextListHelper</item>\n\t\t\t<item>ServiceContextListHolder</item>\n\t\t\t<item>ServiceDetail</item>\n\t\t\t<item>ServiceDetailHelper</item>\n\t\t\t<item>ServiceIdHelper</item>\n\t\t\t<item>ServiceInformation</item>\n\t\t\t<item>ServiceInformationHelper</item>\n\t\t\t<item>ServiceInformationHolder</item>\n\t\t\t<item>ServiceNotFoundException</item>\n\t\t\t<item>ServicePermission</item>\n\t\t\t<item>ServiceRegistry</item>\n\t\t\t<item>ServiceRegistry.Filter</item>\n\t\t\t<item>ServiceUI</item>\n\t\t\t<item>ServiceUIFactory</item>\n\t\t\t<item>ServiceUnavailableException</item>\n\t\t\t<item>Set</item>\n\t\t\t<item>SetOfIntegerSyntax</item>\n\t\t\t<item>SetOverrideType</item>\n\t\t\t<item>SetOverrideTypeHelper</item>\n\t\t\t<item>Severity</item>\n\t\t\t<item>Shape</item>\n\t\t\t<item>ShapeGraphicAttribute</item>\n\t\t\t<item>SheetCollate</item>\n\t\t\t<item>Short</item>\n\t\t\t<item>ShortBuffer</item>\n\t\t\t<item>ShortBufferException</item>\n\t\t\t<item>ShortHolder</item>\n\t\t\t<item>ShortLookupTable</item>\n\t\t\t<item>ShortMessage</item>\n\t\t\t<item>ShortSeqHelper</item>\n\t\t\t<item>ShortSeqHolder</item>\n\t\t\t<item>Sides</item>\n\t\t\t<item>Signature</item>\n\t\t\t<item>SignatureException</item>\n\t\t\t<item>SignatureSpi</item>\n\t\t\t<item>SignedObject</item>\n\t\t\t<item>Signer</item>\n\t\t\t<item>SimpleAttributeSet</item>\n\t\t\t<item>SimpleBeanInfo</item>\n\t\t\t<item>SimpleDateFormat</item>\n\t\t\t<item>SimpleDoc</item>\n\t\t\t<item>SimpleFormatter</item>\n\t\t\t<item>SimpleTimeZone</item>\n\t\t\t<item>SimpleType</item>\n\t\t\t<item>SinglePixelPackedSampleModel</item>\n\t\t\t<item>SingleSelectionModel</item>\n\t\t\t<item>Size2DSyntax</item>\n\t\t\t<item>SizeLimitExceededException</item>\n\t\t\t<item>SizeRequirements</item>\n\t\t\t<item>SizeSequence</item>\n\t\t\t<item>Skeleton</item>\n\t\t\t<item>SkeletonMismatchException</item>\n\t\t\t<item>SkeletonNotFoundException</item>\n\t\t\t<item>SliderUI</item>\n\t\t\t<item>Socket</item>\n\t\t\t<item>SocketAddress</item>\n\t\t\t<item>SocketChannel</item>\n\t\t\t<item>SocketException</item>\n\t\t\t<item>SocketFactory</item>\n\t\t\t<item>SocketHandler</item>\n\t\t\t<item>SocketImpl</item>\n\t\t\t<item>SocketImplFactory</item>\n\t\t\t<item>SocketOptions</item>\n\t\t\t<item>SocketPermission</item>\n\t\t\t<item>SocketSecurityException</item>\n\t\t\t<item>SocketTimeoutException</item>\n\t\t\t<item>SoftBevelBorder</item>\n\t\t\t<item>SoftReference</item>\n\t\t\t<item>SortControl</item>\n\t\t\t<item>SortKey</item>\n\t\t\t<item>SortResponseControl</item>\n\t\t\t<item>SortedMap</item>\n\t\t\t<item>SortedSet</item>\n\t\t\t<item>SortingFocusTraversalPolicy</item>\n\t\t\t<item>Soundbank</item>\n\t\t\t<item>SoundbankReader</item>\n\t\t\t<item>SoundbankResource</item>\n\t\t\t<item>Source</item>\n\t\t\t<item>SourceDataLine</item>\n\t\t\t<item>SourceLocator</item>\n\t\t\t<item>SpinnerDateModel</item>\n\t\t\t<item>SpinnerListModel</item>\n\t\t\t<item>SpinnerModel</item>\n\t\t\t<item>SpinnerNumberModel</item>\n\t\t\t<item>SpinnerUI</item>\n\t\t\t<item>SplitPaneUI</item>\n\t\t\t<item>Spring</item>\n\t\t\t<item>SpringLayout</item>\n\t\t\t<item>SpringLayout.Constraints</item>\n\t\t\t<item>SslRMIClientSocketFactory</item>\n\t\t\t<item>SslRMIServerSocketFactory</item>\n\t\t\t<item>Stack</item>\n\t\t\t<item>StackOverflowError</item>\n\t\t\t<item>StackTraceElement</item>\n\t\t\t<item>StandardMBean</item>\n\t\t\t<item>StartTlsRequest</item>\n\t\t\t<item>StartTlsResponse</item>\n\t\t\t<item>State</item>\n\t\t\t<item>StateEdit</item>\n\t\t\t<item>StateEditable</item>\n\t\t\t<item>StateFactory</item>\n\t\t\t<item>Statement</item>\n\t\t\t<item>Statement</item>\n\t\t\t<item>StreamCorruptedException</item>\n\t\t\t<item>StreamHandler</item>\n\t\t\t<item>StreamPrintService</item>\n\t\t\t<item>StreamPrintServiceFactory</item>\n\t\t\t<item>StreamResult</item>\n\t\t\t<item>StreamSource</item>\n\t\t\t<item>StreamTokenizer</item>\n\t\t\t<item>Streamable</item>\n\t\t\t<item>StreamableValue</item>\n\t\t\t<item>StrictMath</item>\n\t\t\t<item>String</item>\n\t\t\t<item>StringBuffer</item>\n\t\t\t<item>StringBufferInputStream</item>\n\t\t\t<item>StringBuilder</item>\n\t\t\t<item>StringCharacterIterator</item>\n\t\t\t<item>StringContent</item>\n\t\t\t<item>StringHolder</item>\n\t\t\t<item>StringIndexOutOfBoundsException</item>\n\t\t\t<item>StringMonitor</item>\n\t\t\t<item>StringMonitorMBean</item>\n\t\t\t<item>StringNameHelper</item>\n\t\t\t<item>StringReader</item>\n\t\t\t<item>StringRefAddr</item>\n\t\t\t<item>StringSelection</item>\n\t\t\t<item>StringSeqHelper</item>\n\t\t\t<item>StringSeqHolder</item>\n\t\t\t<item>StringTokenizer</item>\n\t\t\t<item>StringValueExp</item>\n\t\t\t<item>StringValueHelper</item>\n\t\t\t<item>StringWriter</item>\n\t\t\t<item>Stroke</item>\n\t\t\t<item>Struct</item>\n\t\t\t<item>StructMember</item>\n\t\t\t<item>StructMemberHelper</item>\n\t\t\t<item>Stub</item>\n\t\t\t<item>StubDelegate</item>\n\t\t\t<item>StubNotFoundException</item>\n\t\t\t<item>Style</item>\n\t\t\t<item>StyleConstants</item>\n\t\t\t<item>StyleConstants.CharacterConstants</item>\n\t\t\t<item>StyleConstants.ColorConstants</item>\n\t\t\t<item>StyleConstants.FontConstants</item>\n\t\t\t<item>StyleConstants.ParagraphConstants</item>\n\t\t\t<item>StyleContext</item>\n\t\t\t<item>StyleSheet</item>\n\t\t\t<item>StyleSheet.BoxPainter</item>\n\t\t\t<item>StyleSheet.ListPainter</item>\n\t\t\t<item>StyledDocument</item>\n\t\t\t<item>StyledEditorKit</item>\n\t\t\t<item>StyledEditorKit.AlignmentAction</item>\n\t\t\t<item>StyledEditorKit.BoldAction</item>\n\t\t\t<item>StyledEditorKit.FontFamilyAction</item>\n\t\t\t<item>StyledEditorKit.FontSizeAction</item>\n\t\t\t<item>StyledEditorKit.ForegroundAction</item>\n\t\t\t<item>StyledEditorKit.ItalicAction</item>\n\t\t\t<item>StyledEditorKit.StyledTextAction</item>\n\t\t\t<item>StyledEditorKit.UnderlineAction</item>\n\t\t\t<item>Subject</item>\n\t\t\t<item>SubjectDelegationPermission</item>\n\t\t\t<item>SubjectDomainCombiner</item>\n\t\t\t<item>SupportedValuesAttribute</item>\n\t\t\t<item>SuppressWarnings</item>\n\t\t\t<item>SwingConstants</item>\n\t\t\t<item>SwingPropertyChangeSupport</item>\n\t\t\t<item>SwingUtilities</item>\n\t\t\t<item>SyncFactory</item>\n\t\t\t<item>SyncFactoryException</item>\n\t\t\t<item>SyncFailedException</item>\n\t\t\t<item>SyncProvider</item>\n\t\t\t<item>SyncProviderException</item>\n\t\t\t<item>SyncResolver</item>\n\t\t\t<item>SyncScopeHelper</item>\n\t\t\t<item>SynchronousQueue</item>\n\t\t\t<item>SynthConstants</item>\n\t\t\t<item>SynthContext</item>\n\t\t\t<item>SynthGraphicsUtils</item>\n\t\t\t<item>SynthLookAndFeel</item>\n\t\t\t<item>SynthPainter</item>\n\t\t\t<item>SynthStyle</item>\n\t\t\t<item>SynthStyleFactory</item>\n\t\t\t<item>Synthesizer</item>\n\t\t\t<item>SysexMessage</item>\n\t\t\t<item>System</item>\n\t\t\t<item>SystemColor</item>\n\t\t\t<item>SystemException</item>\n\t\t\t<item>SystemFlavorMap</item>\n\t\t\t<item>TAG_ALTERNATE_IIOP_ADDRESS</item>\n\t\t\t<item>TAG_CODE_SETS</item>\n\t\t\t<item>TAG_INTERNET_IOP</item>\n\t\t\t<item>TAG_JAVA_CODEBASE</item>\n\t\t\t<item>TAG_MULTIPLE_COMPONENTS</item>\n\t\t\t<item>TAG_ORB_TYPE</item>\n\t\t\t<item>TAG_POLICIES</item>\n\t\t\t<item>TAG_RMI_CUSTOM_MAX_STREAM_FORMAT</item>\n\t\t\t<item>TCKind</item>\n\t\t\t<item>THREAD_POLICY_ID</item>\n\t\t\t<item>TIMEOUT</item>\n\t\t\t<item>TRANSACTION_MODE</item>\n\t\t\t<item>TRANSACTION_REQUIRED</item>\n\t\t\t<item>TRANSACTION_ROLLEDBACK</item>\n\t\t\t<item>TRANSACTION_UNAVAILABLE</item>\n\t\t\t<item>TRANSIENT</item>\n\t\t\t<item>TRANSPORT_RETRY</item>\n\t\t\t<item>TabExpander</item>\n\t\t\t<item>TabSet</item>\n\t\t\t<item>TabStop</item>\n\t\t\t<item>TabableView</item>\n\t\t\t<item>TabbedPaneUI</item>\n\t\t\t<item>TableCellEditor</item>\n\t\t\t<item>TableCellRenderer</item>\n\t\t\t<item>TableColumn</item>\n\t\t\t<item>TableColumnModel</item>\n\t\t\t<item>TableColumnModelEvent</item>\n\t\t\t<item>TableColumnModelListener</item>\n\t\t\t<item>TableHeaderUI</item>\n\t\t\t<item>TableModel</item>\n\t\t\t<item>TableModelEvent</item>\n\t\t\t<item>TableModelListener</item>\n\t\t\t<item>TableUI</item>\n\t\t\t<item>TableView</item>\n\t\t\t<item>TabularData</item>\n\t\t\t<item>TabularDataSupport</item>\n\t\t\t<item>TabularType</item>\n\t\t\t<item>TagElement</item>\n\t\t\t<item>TaggedComponent</item>\n\t\t\t<item>TaggedComponentHelper</item>\n\t\t\t<item>TaggedComponentHolder</item>\n\t\t\t<item>TaggedProfile</item>\n\t\t\t<item>TaggedProfileHelper</item>\n\t\t\t<item>TaggedProfileHolder</item>\n\t\t\t<item>Target</item>\n\t\t\t<item>TargetDataLine</item>\n\t\t\t<item>TargetedNotification</item>\n\t\t\t<item>Templates</item>\n\t\t\t<item>TemplatesHandler</item>\n\t\t\t<item>Text</item>\n\t\t\t<item>TextAction</item>\n\t\t\t<item>TextArea</item>\n\t\t\t<item>TextAttribute</item>\n\t\t\t<item>TextComponent</item>\n\t\t\t<item>TextEvent</item>\n\t\t\t<item>TextField</item>\n\t\t\t<item>TextHitInfo</item>\n\t\t\t<item>TextInputCallback</item>\n\t\t\t<item>TextLayout</item>\n\t\t\t<item>TextLayout.CaretPolicy</item>\n\t\t\t<item>TextListener</item>\n\t\t\t<item>TextMeasurer</item>\n\t\t\t<item>TextOutputCallback</item>\n\t\t\t<item>TextSyntax</item>\n\t\t\t<item>TextUI</item>\n\t\t\t<item>TexturePaint</item>\n\t\t\t<item>Thread</item>\n\t\t\t<item>Thread.State</item>\n\t\t\t<item>Thread.UncaughtExceptionHandler</item>\n\t\t\t<item>ThreadDeath</item>\n\t\t\t<item>ThreadFactory</item>\n\t\t\t<item>ThreadGroup</item>\n\t\t\t<item>ThreadInfo</item>\n\t\t\t<item>ThreadLocal</item>\n\t\t\t<item>ThreadMXBean</item>\n\t\t\t<item>ThreadPolicy</item>\n\t\t\t<item>ThreadPolicyOperations</item>\n\t\t\t<item>ThreadPolicyValue</item>\n\t\t\t<item>ThreadPoolExecutor</item>\n\t\t\t<item>ThreadPoolExecutor.AbortPolicy</item>\n\t\t\t<item>ThreadPoolExecutor.CallerRunsPolicy</item>\n\t\t\t<item>ThreadPoolExecutor.DiscardOldestPolicy</item>\n\t\t\t<item>ThreadPoolExecutor.DiscardPolicy</item>\n\t\t\t<item>Throwable</item>\n\t\t\t<item>Tie</item>\n\t\t\t<item>TileObserver</item>\n\t\t\t<item>Time</item>\n\t\t\t<item>TimeLimitExceededException</item>\n\t\t\t<item>TimeUnit</item>\n\t\t\t<item>TimeZone</item>\n\t\t\t<item>TimeoutException</item>\n\t\t\t<item>Timer</item>\n\t\t\t<item>Timer</item>\n\t\t\t<item>Timer</item>\n\t\t\t<item>TimerAlarmClockNotification</item>\n\t\t\t<item>TimerMBean</item>\n\t\t\t<item>TimerNotification</item>\n\t\t\t<item>TimerTask</item>\n\t\t\t<item>Timestamp</item>\n\t\t\t<item>Timestamp</item>\n\t\t\t<item>TitledBorder</item>\n\t\t\t<item>TooManyListenersException</item>\n\t\t\t<item>ToolBarUI</item>\n\t\t\t<item>ToolTipManager</item>\n\t\t\t<item>ToolTipUI</item>\n\t\t\t<item>Toolkit</item>\n\t\t\t<item>Track</item>\n\t\t\t<item>TransactionRequiredException</item>\n\t\t\t<item>TransactionRolledbackException</item>\n\t\t\t<item>TransactionService</item>\n\t\t\t<item>TransactionalWriter</item>\n\t\t\t<item>TransferHandler</item>\n\t\t\t<item>Transferable</item>\n\t\t\t<item>TransformAttribute</item>\n\t\t\t<item>Transformer</item>\n\t\t\t<item>TransformerConfigurationException</item>\n\t\t\t<item>TransformerException</item>\n\t\t\t<item>TransformerFactory</item>\n\t\t\t<item>TransformerFactoryConfigurationError</item>\n\t\t\t<item>TransformerHandler</item>\n\t\t\t<item>Transmitter</item>\n\t\t\t<item>Transparency</item>\n\t\t\t<item>TreeCellEditor</item>\n\t\t\t<item>TreeCellRenderer</item>\n\t\t\t<item>TreeExpansionEvent</item>\n\t\t\t<item>TreeExpansionListener</item>\n\t\t\t<item>TreeMap</item>\n\t\t\t<item>TreeModel</item>\n\t\t\t<item>TreeModelEvent</item>\n\t\t\t<item>TreeModelListener</item>\n\t\t\t<item>TreeNode</item>\n\t\t\t<item>TreePath</item>\n\t\t\t<item>TreeSelectionEvent</item>\n\t\t\t<item>TreeSelectionListener</item>\n\t\t\t<item>TreeSelectionModel</item>\n\t\t\t<item>TreeSet</item>\n\t\t\t<item>TreeUI</item>\n\t\t\t<item>TreeWillExpandListener</item>\n\t\t\t<item>TrustAnchor</item>\n\t\t\t<item>TrustManager</item>\n\t\t\t<item>TrustManagerFactory</item>\n\t\t\t<item>TrustManagerFactorySpi</item>\n\t\t\t<item>Type</item>\n\t\t\t<item>TypeCode</item>\n\t\t\t<item>TypeCodeHolder</item>\n\t\t\t<item>TypeInfo</item>\n\t\t\t<item>TypeInfoProvider</item>\n\t\t\t<item>TypeMismatch</item>\n\t\t\t<item>TypeMismatch</item>\n\t\t\t<item>TypeMismatch</item>\n\t\t\t<item>TypeMismatchHelper</item>\n\t\t\t<item>TypeMismatchHelper</item>\n\t\t\t<item>TypeNotPresentException</item>\n\t\t\t<item>TypeVariable</item>\n\t\t\t<item>Types</item>\n\t\t\t<item>UID</item>\n\t\t\t<item>UIDefaults</item>\n\t\t\t<item>UIDefaults.ActiveValue</item>\n\t\t\t<item>UIDefaults.LazyInputMap</item>\n\t\t\t<item>UIDefaults.LazyValue</item>\n\t\t\t<item>UIDefaults.ProxyLazyValue</item>\n\t\t\t<item>UIManager</item>\n\t\t\t<item>UIManager.LookAndFeelInfo</item>\n\t\t\t<item>UIResource</item>\n\t\t\t<item>ULongLongSeqHelper</item>\n\t\t\t<item>ULongLongSeqHolder</item>\n\t\t\t<item>ULongSeqHelper</item>\n\t\t\t<item>ULongSeqHolder</item>\n\t\t\t<item>UNKNOWN</item>\n\t\t\t<item>UNKNOWN</item>\n\t\t\t<item>UNSUPPORTED_POLICY</item>\n\t\t\t<item>UNSUPPORTED_POLICY_VALUE</item>\n\t\t\t<item>URI</item>\n\t\t\t<item>URIException</item>\n\t\t\t<item>URIResolver</item>\n\t\t\t<item>URISyntax</item>\n\t\t\t<item>URISyntaxException</item>\n\t\t\t<item>URL</item>\n\t\t\t<item>URLClassLoader</item>\n\t\t\t<item>URLConnection</item>\n\t\t\t<item>URLDecoder</item>\n\t\t\t<item>URLEncoder</item>\n\t\t\t<item>URLStreamHandler</item>\n\t\t\t<item>URLStreamHandlerFactory</item>\n\t\t\t<item>URLStringHelper</item>\n\t\t\t<item>USER_EXCEPTION</item>\n\t\t\t<item>UShortSeqHelper</item>\n\t\t\t<item>UShortSeqHolder</item>\n\t\t\t<item>UTFDataFormatException</item>\n\t\t\t<item>UUID</item>\n\t\t\t<item>UndeclaredThrowableException</item>\n\t\t\t<item>UndoManager</item>\n\t\t\t<item>UndoableEdit</item>\n\t\t\t<item>UndoableEditEvent</item>\n\t\t\t<item>UndoableEditListener</item>\n\t\t\t<item>UndoableEditSupport</item>\n\t\t\t<item>UnexpectedException</item>\n\t\t\t<item>UnicastRemoteObject</item>\n\t\t\t<item>UnionMember</item>\n\t\t\t<item>UnionMemberHelper</item>\n\t\t\t<item>UnknownEncoding</item>\n\t\t\t<item>UnknownEncodingHelper</item>\n\t\t\t<item>UnknownError</item>\n\t\t\t<item>UnknownException</item>\n\t\t\t<item>UnknownFormatConversionException</item>\n\t\t\t<item>UnknownFormatFlagsException</item>\n\t\t\t<item>UnknownGroupException</item>\n\t\t\t<item>UnknownHostException</item>\n\t\t\t<item>UnknownHostException</item>\n\t\t\t<item>UnknownObjectException</item>\n\t\t\t<item>UnknownServiceException</item>\n\t\t\t<item>UnknownUserException</item>\n\t\t\t<item>UnknownUserExceptionHelper</item>\n\t\t\t<item>UnknownUserExceptionHolder</item>\n\t\t\t<item>UnmappableCharacterException</item>\n\t\t\t<item>UnmarshalException</item>\n\t\t\t<item>UnmodifiableClassException</item>\n\t\t\t<item>UnmodifiableSetException</item>\n\t\t\t<item>UnrecoverableEntryException</item>\n\t\t\t<item>UnrecoverableKeyException</item>\n\t\t\t<item>Unreferenced</item>\n\t\t\t<item>UnresolvedAddressException</item>\n\t\t\t<item>UnresolvedPermission</item>\n\t\t\t<item>UnsatisfiedLinkError</item>\n\t\t\t<item>UnsolicitedNotification</item>\n\t\t\t<item>UnsolicitedNotificationEvent</item>\n\t\t\t<item>UnsolicitedNotificationListener</item>\n\t\t\t<item>UnsupportedAddressTypeException</item>\n\t\t\t<item>UnsupportedAudioFileException</item>\n\t\t\t<item>UnsupportedCallbackException</item>\n\t\t\t<item>UnsupportedCharsetException</item>\n\t\t\t<item>UnsupportedClassVersionError</item>\n\t\t\t<item>UnsupportedEncodingException</item>\n\t\t\t<item>UnsupportedFlavorException</item>\n\t\t\t<item>UnsupportedLookAndFeelException</item>\n\t\t\t<item>UnsupportedOperationException</item>\n\t\t\t<item>UserDataHandler</item>\n\t\t\t<item>UserException</item>\n\t\t\t<item>Util</item>\n\t\t\t<item>UtilDelegate</item>\n\t\t\t<item>Utilities</item>\n\t\t\t<item>VMID</item>\n\t\t\t<item>VM_ABSTRACT</item>\n\t\t\t<item>VM_CUSTOM</item>\n\t\t\t<item>VM_NONE</item>\n\t\t\t<item>VM_TRUNCATABLE</item>\n\t\t\t<item>Validator</item>\n\t\t\t<item>ValidatorHandler</item>\n\t\t\t<item>ValueBase</item>\n\t\t\t<item>ValueBaseHelper</item>\n\t\t\t<item>ValueBaseHolder</item>\n\t\t\t<item>ValueExp</item>\n\t\t\t<item>ValueFactory</item>\n\t\t\t<item>ValueHandler</item>\n\t\t\t<item>ValueHandlerMultiFormat</item>\n\t\t\t<item>ValueInputStream</item>\n\t\t\t<item>ValueMember</item>\n\t\t\t<item>ValueMemberHelper</item>\n\t\t\t<item>ValueOutputStream</item>\n\t\t\t<item>VariableHeightLayoutCache</item>\n\t\t\t<item>Vector</item>\n\t\t\t<item>VerifyError</item>\n\t\t\t<item>VersionSpecHelper</item>\n\t\t\t<item>VetoableChangeListener</item>\n\t\t\t<item>VetoableChangeListenerProxy</item>\n\t\t\t<item>VetoableChangeSupport</item>\n\t\t\t<item>View</item>\n\t\t\t<item>ViewFactory</item>\n\t\t\t<item>ViewportLayout</item>\n\t\t\t<item>ViewportUI</item>\n\t\t\t<item>VirtualMachineError</item>\n\t\t\t<item>Visibility</item>\n\t\t\t<item>VisibilityHelper</item>\n\t\t\t<item>VoiceStatus</item>\n\t\t\t<item>Void</item>\n\t\t\t<item>VolatileImage</item>\n\t\t\t<item>WCharSeqHelper</item>\n\t\t\t<item>WCharSeqHolder</item>\n\t\t\t<item>WStringSeqHelper</item>\n\t\t\t<item>WStringSeqHolder</item>\n\t\t\t<item>WStringValueHelper</item>\n\t\t\t<item>WeakHashMap</item>\n\t\t\t<item>WeakReference</item>\n\t\t\t<item>WebRowSet</item>\n\t\t\t<item>WildcardType</item>\n\t\t\t<item>Window</item>\n\t\t\t<item>WindowAdapter</item>\n\t\t\t<item>WindowConstants</item>\n\t\t\t<item>WindowEvent</item>\n\t\t\t<item>WindowFocusListener</item>\n\t\t\t<item>WindowListener</item>\n\t\t\t<item>WindowStateListener</item>\n\t\t\t<item>WrappedPlainView</item>\n\t\t\t<item>WritableByteChannel</item>\n\t\t\t<item>WritableRaster</item>\n\t\t\t<item>WritableRenderedImage</item>\n\t\t\t<item>WriteAbortedException</item>\n\t\t\t<item>Writer</item>\n\t\t\t<item>WrongAdapter</item>\n\t\t\t<item>WrongAdapterHelper</item>\n\t\t\t<item>WrongPolicy</item>\n\t\t\t<item>WrongPolicyHelper</item>\n\t\t\t<item>WrongTransaction</item>\n\t\t\t<item>WrongTransactionHelper</item>\n\t\t\t<item>WrongTransactionHolder</item>\n\t\t\t<item>X500Principal</item>\n\t\t\t<item>X500PrivateCredential</item>\n\t\t\t<item>X509CRL</item>\n\t\t\t<item>X509CRLEntry</item>\n\t\t\t<item>X509CRLSelector</item>\n\t\t\t<item>X509CertSelector</item>\n\t\t\t<item>X509Certificate</item>\n\t\t\t<item>X509Certificate</item>\n\t\t\t<item>X509EncodedKeySpec</item>\n\t\t\t<item>X509ExtendedKeyManager</item>\n\t\t\t<item>X509Extension</item>\n\t\t\t<item>X509KeyManager</item>\n\t\t\t<item>X509TrustManager</item>\n\t\t\t<item>XAConnection</item>\n\t\t\t<item>XADataSource</item>\n\t\t\t<item>XAException</item>\n\t\t\t<item>XAResource</item>\n\t\t\t<item>XMLConstants</item>\n\t\t\t<item>XMLDecoder</item>\n\t\t\t<item>XMLEncoder</item>\n\t\t\t<item>XMLFilter</item>\n\t\t\t<item>XMLFilterImpl</item>\n\t\t\t<item>XMLFormatter</item>\n\t\t\t<item>XMLGregorianCalendar</item>\n\t\t\t<item>XMLParseException</item>\n\t\t\t<item>XMLReader</item>\n\t\t\t<item>XMLReaderAdapter</item>\n\t\t\t<item>XMLReaderFactory</item>\n\t\t\t<item>XPath</item>\n\t\t\t<item>XPathConstants</item>\n\t\t\t<item>XPathException</item>\n\t\t\t<item>XPathExpression</item>\n\t\t\t<item>XPathExpressionException</item>\n\t\t\t<item>XPathFactory</item>\n\t\t\t<item>XPathFactoryConfigurationException</item>\n\t\t\t<item>XPathFunction</item>\n\t\t\t<item>XPathFunctionException</item>\n\t\t\t<item>XPathFunctionResolver</item>\n\t\t\t<item>XPathVariableResolver</item>\n\t\t\t<item>Xid</item>\n\t\t\t<item>XmlReader</item>\n\t\t\t<item>XmlWriter</item>\n\t\t\t<item>ZipEntry</item>\n\t\t\t<item>ZipException</item>\n\t\t\t<item>ZipFile</item>\n\t\t\t<item>ZipInputStream</item>\n\t\t\t<item>ZipOutputStream</item>\n\t\t\t<item>ZoneView</item>\n\t\t\t<item>_BindingIteratorImplBase</item>\n\t\t\t<item>_BindingIteratorStub</item>\n\t\t\t<item>_DynAnyFactoryStub</item>\n\t\t\t<item>_DynAnyStub</item>\n\t\t\t<item>_DynArrayStub</item>\n\t\t\t<item>_DynEnumStub</item>\n\t\t\t<item>_DynFixedStub</item>\n\t\t\t<item>_DynSequenceStub</item>\n\t\t\t<item>_DynStructStub</item>\n\t\t\t<item>_DynUnionStub</item>\n\t\t\t<item>_DynValueStub</item>\n\t\t\t<item>_IDLTypeStub</item>\n\t\t\t<item>_NamingContextExtStub</item>\n\t\t\t<item>_NamingContextImplBase</item>\n\t\t\t<item>_NamingContextStub</item>\n\t\t\t<item>_PolicyStub</item>\n\t\t\t<item>_Remote_Stub</item>\n\t\t\t<item>_ServantActivatorStub</item>\n\t\t\t<item>_ServantLocatorStub</item>\n\n<!-- \t\t\tnew classes of jdk 6.0 -->\n\n\t\t\t<item>AbstractAnnotationValueVisitor6</item>\n\t\t\t<item>AbstractElementVisitor6</item>\n\t\t\t<item>AbstractMarshallerImpl</item>\n\t\t\t<item>AbstractOwnableSynchronizer</item>\n\t\t\t<item>AbstractProcessor</item>\n\t\t\t<item>AbstractQueuedLongSynchronizer</item>\n\t\t\t<item>AbstractScriptEngine</item>\n\t\t\t<item>AbstractTypeVisitor6</item>\n\t\t\t<item>AbstractUnmarshallerImpl</item>\n\t\t\t<item>ActivationDataFlavor</item>\n\t\t\t<item>AlgorithmMethod</item>\n\t\t\t<item>AnnotationMirror</item>\n\t\t\t<item>AnnotationValue</item>\n\t\t\t<item>AnnotationValueVisitor</item>\n\t\t\t<item>ArrayDeque</item>\n\t\t\t<item>AsyncHandler</item>\n\t\t\t<item>AttachmentMarshaller</item>\n\t\t\t<item>AttachmentPart</item>\n\t\t\t<item>AttachmentUnmarshaller</item>\n\t\t\t<item>Binder</item>\n\t\t\t<item>BindingProvider</item>\n\t\t\t<item>Bindings</item>\n\t\t\t<item>BlockingDeque</item>\n\t\t\t<item>BreakIteratorProvider</item>\n\t\t\t<item>C14NMethodParameterSpec</item>\n\t\t\t<item>CanonicalizationMethod</item>\n\t\t\t<item>Characters</item>\n\t\t\t<item>ClientInfoStatus</item>\n\t\t\t<item>CollapsedStringAdapter</item>\n\t\t\t<item>CollatorProvider</item>\n\t\t\t<item>CommandInfo</item>\n\t\t\t<item>CommandMap</item>\n\t\t\t<item>CommandObject</item>\n\t\t\t<item>CommonDataSource</item>\n\t\t\t<item>Compilable</item>\n\t\t\t<item>CompiledScript</item>\n\t\t\t<item>Completion</item>\n\t\t\t<item>Completions</item>\n\t\t\t<item>CompositeDataInvocationHandler</item>\n\t\t\t<item>CompositeDataView</item>\n\t\t\t<item>ConcurrentNavigableMap</item>\n\t\t\t<item>ConcurrentSkipListMap</item>\n\t\t\t<item>ConcurrentSkipListSet</item>\n\t\t\t<item>ConfigurationSpi</item>\n\t\t\t<item>Console</item>\n\t\t\t<item>ConstructorProperties</item>\n\t\t\t<item>CookieManager</item>\n\t\t\t<item>CookiePolicy</item>\n\t\t\t<item>CookieStore</item>\n\t\t\t<item>CurrencyNameProvider</item>\n\t\t\t<item>Data</item>\n\t\t\t<item>DataContentHandler</item>\n\t\t\t<item>DataContentHandlerFactory</item>\n\t\t\t<item>DataHandler</item>\n\t\t\t<item>DatatypeConverter</item>\n\t\t\t<item>DatatypeConverterInterface</item>\n\t\t\t<item>DateFormatProvider</item>\n\t\t\t<item>DateFormatSymbolsProvider</item>\n\t\t\t<item>DecimalFormatSymbolsProvider</item>\n\t\t\t<item>DeclaredType</item>\n\t\t\t<item>DefaultRowSorter</item>\n\t\t\t<item>DefaultValidationEventHandler</item>\n\t\t\t<item>DeflaterInputStream</item>\n\t\t\t<item>Deque</item>\n\t\t\t<item>DescriptorKey</item>\n\t\t\t<item>DescriptorRead</item>\n\t\t\t<item>Desktop</item>\n\t\t\t<item>Detail</item>\n\t\t\t<item>DetailEntry</item>\n\t\t\t<item>Diagnostic</item>\n\t\t\t<item>DiagnosticCollector</item>\n\t\t\t<item>DiagnosticListener</item>\n\t\t\t<item>DigestMethod</item>\n\t\t\t<item>DigestMethodParameterSpec</item>\n\t\t\t<item>Dispatch</item>\n\t\t\t<item>DOMCryptoContext</item>\n\t\t\t<item>DomHandler</item>\n\t\t\t<item>DOMSignContext</item>\n\t\t\t<item>DOMStructure</item>\n\t\t\t<item>DOMURIReference</item>\n\t\t\t<item>DOMValidateContext</item>\n\t\t\t<item>DropMode</item>\n\t\t\t<item>ElementFilter</item>\n\t\t\t<item>ElementKind</item>\n\t\t\t<item>ElementKindVisitor6</item>\n\t\t\t<item>Elements</item>\n\t\t\t<item>ElementScanner6</item>\n\t\t\t<item>ElementVisitor</item>\n\t\t\t<item>EndDocument</item>\n\t\t\t<item>EndElement</item>\n\t\t\t<item>Endpoint</item>\n\t\t\t<item>EntityDeclaration</item>\n\t\t\t<item>ErrorType</item>\n\t\t\t<item>EventException</item>\n\t\t\t<item>EventFilter</item>\n\t\t\t<item>EventReaderDelegate</item>\n\t\t\t<item>EventTarget</item>\n\t\t\t<item>ExcC14NParameterSpec</item>\n\t\t\t<item>ExecutableElement</item>\n\t\t\t<item>ExecutableType</item>\n\t\t\t<item>FileDataSource</item>\n\t\t\t<item>FileNameExtensionFilter</item>\n\t\t\t<item>FileObject</item>\n\t\t\t<item>Filer</item>\n\t\t\t<item>FilerException</item>\n\t\t\t<item>FileTypeMap</item>\n\t\t\t<item>ForwardingFileObject</item>\n\t\t\t<item>ForwardingJavaFileManager</item>\n\t\t\t<item>ForwardingJavaFileObject</item>\n\t\t\t<item>Generated</item>\n\t\t\t<item>GridBagLayoutInfo</item>\n\t\t\t<item>GroupLayout</item>\n\t\t\t<item>HandlerChain</item>\n\t\t\t<item>HandlerResolver</item>\n\t\t\t<item>HexBinaryAdapter</item>\n\t\t\t<item>HMACParameterSpec</item>\n\t\t\t<item>Holder</item>\n\t\t\t<item>HTTPBinding</item>\n\t\t\t<item>HttpCookie</item>\n\t\t\t<item>HTTPException</item>\n\t\t\t<item>IDN</item>\n\t\t\t<item>ImmutableDescriptor</item>\n\t\t\t<item>InflaterOutputStream</item>\n\t\t\t<item>InitParam</item>\n\t\t\t<item>InterfaceAddress</item>\n\t\t\t<item>Invocable</item>\n\t\t\t<item>IOError</item>\n\t\t\t<item>JavaCompiler</item>\n\t\t\t<item>JavaFileManager</item>\n\t\t\t<item>JavaFileObject</item>\n\t\t\t<item>JAXBContext</item>\n\t\t\t<item>JAXBElement</item>\n\t\t\t<item>JAXBException</item>\n\t\t\t<item>JAXBIntrospector</item>\n\t\t\t<item>JAXBResult</item>\n\t\t\t<item>JAXBSource</item>\n\t\t\t<item>JMX</item>\n\t\t\t<item>JMXAddressable</item>\n\t\t\t<item>KeyInfo</item>\n\t\t\t<item>KeyInfoFactory</item>\n\t\t\t<item>KeyName</item>\n\t\t\t<item>KeySelector</item>\n\t\t\t<item>KeySelectorException</item>\n\t\t\t<item>KeySelectorResult</item>\n\t\t\t<item>KeyValue</item>\n\t\t\t<item>LayoutPath</item>\n\t\t\t<item>LayoutStyle</item>\n\t\t\t<item>LinearGradientPaint</item>\n\t\t\t<item>LinkedBlockingDeque</item>\n\t\t\t<item>LocaleNameProvider</item>\n\t\t\t<item>LocaleServiceProvider</item>\n\t\t\t<item>Location</item>\n\t\t\t<item>LockInfo</item>\n\t\t\t<item>LogicalHandler</item>\n\t\t\t<item>LogicalMessage</item>\n\t\t\t<item>LogicalMessageContext</item>\n\t\t\t<item>MailcapCommandMap</item>\n\t\t\t<item>Marshaller</item>\n\t\t\t<item>MessageContext</item>\n\t\t\t<item>MessageFactory</item>\n\t\t\t<item>Messager</item>\n\t\t\t<item>MimeHeader</item>\n\t\t\t<item>MimeHeaders</item>\n\t\t\t<item>MimeType</item>\n\t\t\t<item>MimeTypeParameterList</item>\n\t\t\t<item>MimetypesFileTypeMap</item>\n\t\t\t<item>MirroredTypeException</item>\n\t\t\t<item>MirroredTypesException</item>\n\t\t\t<item>MLetContent</item>\n\t\t\t<item>MonitorInfo</item>\n\t\t\t<item>MultipleGradientPaint</item>\n\t\t\t<item>MutationEvent</item>\n\t\t\t<item>MXBean</item>\n\t\t\t<item>Namespace</item>\n\t\t\t<item>NavigableMap</item>\n\t\t\t<item>NavigableSet</item>\n\t\t\t<item>NClob</item>\n\t\t\t<item>NestingKind</item>\n\t\t\t<item>NodeSetData</item>\n\t\t\t<item>NormalizedStringAdapter</item>\n\t\t\t<item>Normalizer</item>\n\t\t\t<item>NoSuchMechanismException</item>\n\t\t\t<item>NotationDeclaration</item>\n\t\t\t<item>NotIdentifiableEvent</item>\n\t\t\t<item>NotIdentifiableEventImpl</item>\n\t\t\t<item>NoType</item>\n\t\t\t<item>NullType</item>\n\t\t\t<item>NumberFormatProvider</item>\n\t\t\t<item>OctetStreamData</item>\n\t\t\t<item>Oneway</item>\n\t\t\t<item>OptionChecker</item>\n\t\t\t<item>PackageElement</item>\n\t\t\t<item>ParseConversionEvent</item>\n\t\t\t<item>ParseConversionEventImpl</item>\n\t\t\t<item>Path2D</item>\n\t\t\t<item>PGPData</item>\n\t\t\t<item>PolicySpi</item>\n\t\t\t<item>PortInfo</item>\n\t\t\t<item>PostConstruct</item>\n\t\t\t<item>PreDestroy</item>\n\t\t\t<item>PrimitiveType</item>\n\t\t\t<item>PrintConversionEvent</item>\n\t\t\t<item>PrintConversionEventImpl</item>\n\t\t\t<item>ProcessingEnvironment</item>\n\t\t\t<item>Processor</item>\n\t\t\t<item>PropertyException</item>\n\t\t\t<item>RadialGradientPaint</item>\n\t\t\t<item>ReferenceType</item>\n\t\t\t<item>RequestWrapper</item>\n\t\t\t<item>Resource</item>\n\t\t\t<item>Resources</item>\n\t\t\t<item>Response</item>\n\t\t\t<item>ResponseWrapper</item>\n\t\t\t<item>RetrievalMethod</item>\n\t\t\t<item>RoundEnvironment</item>\n\t\t\t<item>RowFilter</item>\n\t\t\t<item>RowId</item>\n\t\t\t<item>RowIdLifetime</item>\n\t\t\t<item>RowSorter</item>\n\t\t\t<item>RowSorterEvent</item>\n\t\t\t<item>RowSorterListener</item>\n\t\t\t<item>RunnableFuture</item>\n\t\t\t<item>RunnableScheduledFuture</item>\n\t\t\t<item>SAAJMetaFactory</item>\n\t\t\t<item>SAAJResult</item>\n\t\t\t<item>SchemaOutputResolver</item>\n\t\t\t<item>ScriptContext</item>\n\t\t\t<item>ScriptEngine</item>\n\t\t\t<item>ScriptEngineFactory</item>\n\t\t\t<item>ScriptEngineManager</item>\n\t\t\t<item>ScriptException</item>\n\t\t\t<item>Service</item>\n\t\t\t<item>ServiceConfigurationError</item>\n\t\t\t<item>ServiceDelegate</item>\n\t\t\t<item>ServiceLoader</item>\n\t\t\t<item>ServiceMode</item>\n\t\t\t<item>SignatureMethod</item>\n\t\t\t<item>SignatureMethodParameterSpec</item>\n\t\t\t<item>SignatureProperties</item>\n\t\t\t<item>SignatureProperty</item>\n\t\t\t<item>SignedInfo</item>\n\t\t\t<item>SimpleAnnotationValueVisitor6</item>\n\t\t\t<item>SimpleBindings</item>\n\t\t\t<item>SimpleElementVisitor6</item>\n\t\t\t<item>SimpleJavaFileObject</item>\n\t\t\t<item>SimpleScriptContext</item>\n\t\t\t<item>SimpleTypeVisitor6</item>\n\t\t\t<item>SOAPBinding</item>\n\t\t\t<item>SOAPBinding</item>\n\t\t\t<item>SOAPBody</item>\n\t\t\t<item>SOAPBodyElement</item>\n\t\t\t<item>SOAPConnection</item>\n\t\t\t<item>SOAPConnectionFactory</item>\n\t\t\t<item>SOAPConstants</item>\n\t\t\t<item>SOAPElement</item>\n\t\t\t<item>SOAPElementFactory</item>\n\t\t\t<item>SOAPEnvelope</item>\n\t\t\t<item>SOAPException</item>\n\t\t\t<item>SOAPFactory</item>\n\t\t\t<item>SOAPFault</item>\n\t\t\t<item>SOAPFaultElement</item>\n\t\t\t<item>SOAPFaultException</item>\n\t\t\t<item>SOAPHandler</item>\n\t\t\t<item>SOAPHeader</item>\n\t\t\t<item>SOAPHeaderElement</item>\n\t\t\t<item>SOAPMessage</item>\n\t\t\t<item>SOAPMessageContext</item>\n\t\t\t<item>SOAPMessageHandler</item>\n\t\t\t<item>SOAPMessageHandlers</item>\n\t\t\t<item>SOAPPart</item>\n\t\t\t<item>SortOrder</item>\n\t\t\t<item>SourceVersion</item>\n\t\t\t<item>SplashScreen</item>\n\t\t\t<item>SQLClientInfoException</item>\n\t\t\t<item>SQLDataException</item>\n\t\t\t<item>SQLFeatureNotSupportedException</item>\n\t\t\t<item>SQLIntegrityConstraintViolationException</item>\n\t\t\t<item>SQLInvalidAuthorizationSpecException</item>\n\t\t\t<item>SQLNonTransientConnectionException</item>\n\t\t\t<item>SQLNonTransientException</item>\n\t\t\t<item>SQLRecoverableException</item>\n\t\t\t<item>SQLSyntaxErrorException</item>\n\t\t\t<item>SQLTimeoutException</item>\n\t\t\t<item>SQLTransactionRollbackException</item>\n\t\t\t<item>SQLTransientConnectionException</item>\n\t\t\t<item>SQLTransientException</item>\n\t\t\t<item>SQLXML</item>\n\t\t\t<item>SSLParameters</item>\n\t\t\t<item>StandardEmitterMBean</item>\n\t\t\t<item>StandardJavaFileManager</item>\n\t\t\t<item>StandardLocation</item>\n\t\t\t<item>StartDocument</item>\n\t\t\t<item>StartElement</item>\n\t\t\t<item>StatementEvent</item>\n\t\t\t<item>StatementEventListener</item>\n\t\t\t<item>StAXResult</item>\n\t\t\t<item>StAXSource</item>\n\t\t\t<item>StreamFilter</item>\n\t\t\t<item>StreamReaderDelegate</item>\n\t\t\t<item>SupportedAnnotationTypes</item>\n\t\t\t<item>SupportedOptions</item>\n\t\t\t<item>SupportedSourceVersion</item>\n\t\t\t<item>SwingWorker</item>\n\t\t\t<item>SystemTray</item>\n\t\t\t<item>TableRowSorter</item>\n\t\t\t<item>TableStringConverter</item>\n\t\t\t<item>TimeZoneNameProvider</item>\n\t\t\t<item>Tool</item>\n\t\t\t<item>ToolProvider</item>\n\t\t\t<item>Transform</item>\n\t\t\t<item>TransformException</item>\n\t\t\t<item>TransformParameterSpec</item>\n\t\t\t<item>TransformService</item>\n\t\t\t<item>TrayIcon</item>\n\t\t\t<item>TypeConstraintException</item>\n\t\t\t<item>TypeElement</item>\n\t\t\t<item>TypeKind</item>\n\t\t\t<item>TypeKindVisitor6</item>\n\t\t\t<item>TypeMirror</item>\n\t\t\t<item>TypeParameterElement</item>\n\t\t\t<item>TypeVisitor</item>\n\t\t\t<item>UIEvent</item>\n\t\t\t<item>UnknownAnnotationValueException</item>\n\t\t\t<item>UnknownElementException</item>\n\t\t\t<item>UnknownTypeException</item>\n\t\t\t<item>Unmarshaller</item>\n\t\t\t<item>UnmarshallerHandler</item>\n\t\t\t<item>UnsupportedDataTypeException</item>\n\t\t\t<item>URIDereferencer</item>\n\t\t\t<item>URIParameter</item>\n\t\t\t<item>URIReference</item>\n\t\t\t<item>URIReferenceException</item>\n\t\t\t<item>URLDataSource</item>\n\t\t\t<item>ValidationEvent</item>\n\t\t\t<item>ValidationEventCollector</item>\n\t\t\t<item>ValidationEventHandler</item>\n\t\t\t<item>ValidationEventImpl</item>\n\t\t\t<item>ValidationEventLocator</item>\n\t\t\t<item>ValidationEventLocatorImpl</item>\n\t\t\t<item>ValidationException</item>\n\t\t\t<item>VariableElement</item>\n\t\t\t<item>W3CDomHandler</item>\n\t\t\t<item>WebEndpoint</item>\n\t\t\t<item>WebFault</item>\n\t\t\t<item>WebMethod</item>\n\t\t\t<item>WebParam</item>\n\t\t\t<item>WebResult</item>\n\t\t\t<item>WebService</item>\n\t\t\t<item>WebServiceClient</item>\n\t\t\t<item>WebServiceContext</item>\n\t\t\t<item>WebServiceException</item>\n\t\t\t<item>WebServicePermission</item>\n\t\t\t<item>WebServiceProvider</item>\n\t\t\t<item>WebServiceRef</item>\n\t\t\t<item>WebServiceRefs</item>\n\t\t\t<item>Wrapper</item>\n\t\t\t<item>X509Data</item>\n\t\t\t<item>X509IssuerSerial</item>\n\t\t\t<item>XmlAccessOrder</item>\n\t\t\t<item>XmlAccessorOrder</item>\n\t\t\t<item>XmlAccessorType</item>\n\t\t\t<item>XmlAccessType</item>\n\t\t\t<item>XmlAdapter</item>\n\t\t\t<item>XmlAnyAttribute</item>\n\t\t\t<item>XmlAnyElement</item>\n\t\t\t<item>XmlAttachmentRef</item>\n\t\t\t<item>XmlAttribute</item>\n\t\t\t<item>XMLCryptoContext</item>\n\t\t\t<item>XmlElement</item>\n\t\t\t<item>XmlElementDecl</item>\n\t\t\t<item>XmlElementRef</item>\n\t\t\t<item>XmlElementRefs</item>\n\t\t\t<item>XmlElements</item>\n\t\t\t<item>XmlElementWrapper</item>\n\t\t\t<item>XmlEnum</item>\n\t\t\t<item>XmlEnumValue</item>\n\t\t\t<item>XMLEvent</item>\n\t\t\t<item>XMLEventAllocator</item>\n\t\t\t<item>XMLEventConsumer</item>\n\t\t\t<item>XMLEventFactory</item>\n\t\t\t<item>XMLEventReader</item>\n\t\t\t<item>XMLEventWriter</item>\n\t\t\t<item>XmlID</item>\n\t\t\t<item>XmlIDREF</item>\n\t\t\t<item>XmlInlineBinaryData</item>\n\t\t\t<item>XMLInputFactory</item>\n\t\t\t<item>XmlJavaTypeAdapter</item>\n\t\t\t<item>XmlJavaTypeAdapters</item>\n\t\t\t<item>XmlList</item>\n\t\t\t<item>XmlMimeType</item>\n\t\t\t<item>XmlMixed</item>\n\t\t\t<item>XmlNs</item>\n\t\t\t<item>XmlNsForm</item>\n\t\t\t<item>XMLObject</item>\n\t\t\t<item>XMLOutputFactory</item>\n\t\t\t<item>XmlRegistry</item>\n\t\t\t<item>XMLReporter</item>\n\t\t\t<item>XMLResolver</item>\n\t\t\t<item>XmlRootElement</item>\n\t\t\t<item>XmlSchema</item>\n\t\t\t<item>XmlSchemaType</item>\n\t\t\t<item>XmlSchemaTypes</item>\n\t\t\t<item>XMLSignature</item>\n\t\t\t<item>XMLSignatureException</item>\n\t\t\t<item>XMLSignatureFactory</item>\n\t\t\t<item>XMLSignContext</item>\n\t\t\t<item>XMLStreamConstants</item>\n\t\t\t<item>XMLStreamException</item>\n\t\t\t<item>XMLStreamReader</item>\n\t\t\t<item>XMLStreamWriter</item>\n\t\t\t<item>XMLStructure</item>\n\t\t\t<item>XmlTransient</item>\n\t\t\t<item>XmlType</item>\n\t\t\t<item>XMLValidateContext</item>\n\t\t\t<item>XmlValue</item>\n\t\t\t<item>XPathFilter2ParameterSpec</item>\n\t\t\t<item>XPathFilterParameterSpec</item>\n\t\t\t<item>XPathType</item>\n\t\t\t<item>XSLTTransformParameterSpec</item>\n\t\t\t<item>ZipError</item>\n\n<!-- \t\t\tend new classes -->\n\t\t</list>\n\t\t<list name=\"keywords\">\n            <item>as</item>\n            <item>in</item>\n\n\t\t\t<item>abstract</item>\n\t\t\t<item>break</item>\n\t\t\t<item>case</item>\n\t\t\t<item>catch</item>\n\t\t\t<item>class</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>default</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>enum</item>\n\t\t\t<item>extends</item>\n\t\t\t<item>false</item>\n\t\t\t<item>finally</item>\n\t\t\t<item>for</item>\n\t\t\t<item>goto</item>\n\t\t\t<item>if</item>\n\t\t\t<item>implements</item>\n\t\t\t<item>instanceof</item>\n\t\t\t<item>@interface</item>\n\t\t\t<item>interface</item>\n\t\t\t<item>native</item>\n\t\t\t<item>new</item>\n\t\t\t<item>null</item>\n\t\t\t<item>private</item>\n\t\t\t<item>protected</item>\n\t\t\t<item>public</item>\n\t\t\t<item>return</item>\n\t\t\t<item>super</item>\n\t\t\t<item>strictfp</item>\n\t\t\t<item>switch</item>\n\t\t\t<item>synchronized</item>\n\t\t\t<item>this</item>\n\t\t\t<item>throws</item>\n\t\t\t<item>throw</item>\n\t\t\t<item>transient</item>\n\t\t\t<item>true</item>\n\t\t\t<item>try</item>\n\t\t\t<item>volatile</item>\n\t\t\t<item>while</item>\n\t\t</list>\n\t\t<list name=\"types\">\n            <item>def</item>\n\n\t\t\t<item>boolean</item>\n\t\t\t<item>byte</item>\n\t\t\t<item>char</item>\n\t\t\t<item>const</item>\n\t\t\t<item>double</item>\n\t\t\t<item>final</item>\n\t\t\t<item>float</item>\n\t\t\t<item>int</item>\n\t\t\t<item>long</item>\n\t\t\t<item>short</item>\n\t\t\t<item>static</item>\n\t\t\t<item>void</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<!-- Comment next line if you don't use Javadoc tool -->\n\t\t\t\t<IncludeRules context=\"##Javadoc\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t\t<keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n\t\t\t\t<keyword attribute=\"Java15\" context=\"#stay\" String=\"java15\"/>\n\t\t\t\t<Float attribute=\"Float\" context=\"Float Suffixes\"/>\n\t\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n\t\t\t\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Char\" context=\"#stay\" String=\"'\\\\u[0-9a-fA-F]{4}'\"/>\n\t\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"Region1\"/>\n\t\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"Region1\"/>\n                <StringDetect attribute=\"String\" String=\"&apos;&apos;&apos;\" context=\"MultiLineSingleString\" beginRegion=\"MultiLineString\"/>\n                <StringDetect attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"MultiLineDoubleString\" beginRegion=\"MultiLineString\"/>\n                <DetectChar attribute=\"String\" context=\"SingleString\" char=\"&apos;\"/>\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"EnterPrintf\" String=\"\\.(format|printf)\\b\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\.{3,3}\\s+\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"StaticImports\" String=\"\\b(import\\s+static)\\b\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"Imports\" String=\"\\b(package|import)\\b\" />\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*(/\\*\\s*\\d+\\s*\\*/\\s*)?[(])\" />\n\t\t\t\t<RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"InFunctionCall\" char=\"(\"/>\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n\t\t\t</context>\n            <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n            </context>\n            <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n            </context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"InFunctionCall\">\n\t\t\t\t<IncludeRules context=\"Normal\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\u[0-9a-fA-F]{4}\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n            <context attribute=\"String\" lineEndContext=\"#pop\" name=\"SingleString\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&apos;\"/>\n            </context>\n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"MultiLineSingleString\">\n                <StringDetect attribute=\"String\" context=\"#pop\" String=\"&apos;&apos;&apos;\" endRegion=\"MultiLineString\"/>\n            </context>\n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"MultiLineDoubleString\">\n                <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\" endRegion=\"MultiLineString\"/>\n            </context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"EnterPrintf\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"Printf\" char=\"(\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Printf\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"PrintfString\" char=\"&quot;\"/>\n\t\t\t\t<IncludeRules context=\"InFunctionCall\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"PrintfString\" lineEndContext=\"#pop\" name=\"PrintfString\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(\\d+\\$)?(-|#|\\+|\\ |0|,|\\()*\\d*(\\.\\d+)?[a-hosxA-CEGHSX]\" />\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(\\d+\\$)?(-|#|\\+|\\ |0|,|\\()*\\d*(t|T)(a|A|b|B|c|C|d|D|e|F|h|H|I|j|k|l|L|m|M|N|p|P|Q|r|R|s|S|T|y|Y|z|Z)\" />\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(%|n)\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_a-zA-Z]\\w*(?=[\\s]*)\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"StaticImports\">\n\t\t\t\t<RegExpr attribute=\"StaticImports\" context=\"#pop\" String=\"\\s*.*;?\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Imports\">\n\t\t\t\t<RegExpr attribute=\"Imports\" context=\"#pop\" String=\"\\s*.*;?\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Function\"     defStyleNum=\"dsFunction\"/>\n\t\t\t<itemData name=\"StaticImports\" defStyleNum=\"dsImport\"/>\n\t\t\t<itemData name=\"Imports\"      defStyleNum=\"dsImport\"/>\n\t\t\t<itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"String\"       defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n\t\t\t<itemData name=\"PrintfString\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Java15\"       defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\"/>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/haml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Haml\" version=\"7\" kateversion=\"5.0\" section=\"Markup\"\n          extensions=\"*.haml\"\n          author=\"Cies Breijs (cies_at_kde_nl)\" license=\"LGPL\"\n          mimetype=\"text/x-haml\">\n<!--      mimetype=\"text/x-haml\"     this might be a problem as is doesn't exist -->\n\n<!-- learned and copied a lot from rhtml.xml -->\n<!-- ripped out some functionality from rhtml, like GDL, maybe put this back in some day... -->\n<!-- rhtml is rails specific, i ripped the rails helper keywords out as i'm a _merb_ guy... -->\n\n<!-- 1.1: fixed many many many buggers, clearly shows how arbitrary the title '1.0' was -->\n\n<!-- TODO: multi-line-based-on-indenting (comments, filters) don't work, mark more errors with error_hl_test.haml(?) (currently only unpaired spaces on indentation), give ruby code a little background, pipe character as a multiline splitter can use a little color (can it be escaped? \"\\|\"), use hamls unittests for inspiration for better *_test.haml files -->\n\n  <highlighting>\n\n    <list name=\"keywords\">\n      <item>BEGIN</item>\n      <item>END</item>\n      <item>and</item>\n      <item>begin</item>\n      <item>break</item>\n      <item>case</item>\n      <item>defined?</item>\n      <item>do</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>end</item>\n      <item>ensure</item>\n      <item>for</item>\n      <item>if</item>\n      <item>in</item>\n      <item>include</item>\n      <item>next</item>\n      <item>not</item>\n      <item>or</item>\n      <item>redo</item>\n      <item>rescue</item>\n      <item>retry</item>\n      <item>return</item>\n      <item>then</item>\n      <item>unless</item>\n      <item>until</item>\n      <item>when</item>\n      <item>while</item>\n      <item>yield</item>\n    </list>\n\n    <list name=\"access-control\">\n      <item>private_class_method</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public_class_method</item>\n      <item>public</item>\n    </list>\n\n    <list name=\"attribute-definitions\">\n      <item>attr_reader</item>\n      <item>attr_writer</item>\n      <item>attr_accessor</item>\n    </list>\n\n    <list name=\"definitions\">\n      <item>alias</item>\n      <item>module</item>\n      <item>class</item>\n      <item>def</item>\n      <item>undef</item>\n    </list>\n\n    <list name=\"pseudo-variables\">\n      <item>self</item>\n      <item>super</item>\n      <item>nil</item>\n      <item>false</item>\n      <item>true</item>\n      <item>caller</item>\n      <item>__FILE__</item>\n      <item>__LINE__</item>\n    </list>\n\n    <list name=\"default-globals\">\n      <item>$stdout</item>\n      <item>$defout</item>\n      <item>$stderr</item>\n      <item>$deferr</item>\n      <item>$stdin</item>\n    </list>\n\n    <!-- Kernel module methods.\n      NOTE: Methods ending in ? or !\n        are included below as regexes.\n    -->\n    <list name=\"kernel-methods\">\n      <!-- backquote ` -->\n      <item>abort</item>\n      <item>at_exit</item>\n      <item>autoload</item>\n      <item>autoload?</item>\n      <item>binding</item>\n      <item>block_given?</item>\n      <item>callcc</item>\n      <item>caller</item>\n      <item>catch</item>\n      <item>chomp</item>\n      <item>chomp!</item>\n      <item>chop</item>\n      <item>chop!</item>\n      <item>eval</item>\n      <item>exec</item>\n      <item>exit</item>\n      <item>exit!</item>\n      <item>fail</item>\n      <item>fork</item>\n      <item>format</item>\n      <item>getc</item>\n      <item>gets</item>\n      <item>global_variables</item>\n      <item>gsub</item>\n      <item>gsub!</item>\n      <item>iterator?</item>\n      <item>lambda</item>\n      <item>load</item>\n      <item>local_variables</item>\n      <item>loop</item>\n      <item>method_missing</item>\n      <item>open</item>\n      <item>p</item>\n      <item>print</item>\n      <item>printf</item>\n      <item>proc</item>\n      <item>putc</item>\n      <item>puts</item>\n      <item>raise</item>\n      <item>rand</item>\n      <item>readline</item>\n      <item>readlines</item>\n      <item>require</item>\n      <item>scan</item>\n      <item>select</item>\n      <item>set_trace_func</item>\n      <item>sleep</item>\n      <item>split</item>\n      <item>sprintf</item>\n      <item>srand</item>\n      <item>sub</item>\n      <item>sub!</item>\n      <item>syscall</item>\n      <item>system</item>\n      <item>test</item>\n      <item>throw</item>\n      <item>trace_var</item>\n      <item>trap</item>\n      <item>untrace_var</item>\n      <item>warn</item>\n    </list>\n\n    <list name=\"attention\">\n      <item>TODO</item>\n      <item>FIXME</item>\n      <item>NOTE</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"normal\" >\n        <RegExpr attribute=\"Error\" firstNonSpace=\"false\" context=\"#stay\" String=\"^[ ]{1}([ ]{2})*[^ ]+\" />\n        <RegExpr attribute=\"Doctype\" context=\"#stay\" String=\"^!!!.*$\"/>\n\n<!--         2 failed attempts to implement multiline comments -->\n\n<!--        <RegExpr attribute=\"Comment\" String=\"/.*$\" context=\"#stay\" beginRegion=\"comment0\" column=\"0\"/>\n        <RegExpr attribute=\"Comment\" String=\"[^ /]\" context=\"#stay\" endRegion=\"comment0\" column=\"0\"/>\n\n        <RegExpr attribute=\"Comment\" String=\"^[ ]{2}/.*$\" context=\"#stay\" beginRegion=\"comment2\" column=\"0\"/>\n        <RegExpr attribute=\"Comment\" String=\"^[^ ]{4}\" context=\"#stay\" endRegion=\"comment2\" column=\"0\"/>-->\n\n<!--        <RegExpr attribute=\"Comment\" context=\"comment0\" String=\"^/.*\" />\n        <RegExpr attribute=\"Comment\" context=\"comment2\" String=\"^[ ]{2}/.*\" />\n        <RegExpr attribute=\"Comment\" context=\"comment4\" String=\"^[ ]{4}/.*\" />-->\n\n        <DetectSpaces/>\n        <DetectChar attribute=\"Escaped Text\" context=\"escaped\" char=\"\\\" />\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"/\" />\n\n        <Detect2Chars attribute=\"Keyword\" context=\"unquoted\" char=\"=\" char1=\"=\" />\n        <DetectChar attribute=\"Keyword\" context=\"rubysourceline\" char=\"=\" />\n        <DetectChar attribute=\"Keyword\" context=\"rubysourceline\" char=\"-\" />\n        <DetectChar attribute=\"Keyword\" context=\"rubysourceline\" char=\"~\" />\n        <Detect2Chars attribute=\"Keyword\" context=\"rubysourceline\" char=\"!\" char1=\"=\" />\n        <Detect2Chars attribute=\"Keyword\" context=\"rubysourceline\" char=\"&amp;\" char1=\"=\" />\n\n        <DetectChar attribute=\"Operator\" context=\"array\" char=\"[\" beginRegion=\"Array\" />\n        <DetectChar attribute=\"Operator\" context=\"hash\" char=\"{\" beginRegion=\"Hash\" />\n\n        <RegExpr attribute=\"Filter\" firstNonSpace=\"true\" context=\"#stay\" String=\":[a-zA-Z0-9_\\-]*\" />\n        <RegExpr attribute=\"Tag\" firstNonSpace=\"true\" context=\"#stay\" String=\"%[a-zA-Z_][a-zA-Z0-9_\\-]*\" />\n        <RegExpr attribute=\"Div Id\" firstNonSpace=\"true\" context=\"#stay\" String=\"#[a-zA-Z_][a-zA-Z0-9_\\-]*\" />\n        <RegExpr attribute=\"Div Class\" firstNonSpace=\"true\" context=\"#stay\" String=\"\\.[a-zA-Z_][a-zA-Z0-9_\\-]*\" />\n        <RegExpr attribute=\"Element Id\" context=\"#stay\" String=\"#[a-zA-Z_][a-zA-Z0-9_\\-]*\" />\n        <RegExpr attribute=\"Element Class\" context=\"#stay\" String=\"\\.[a-zA-Z_][a-zA-Z0-9_\\-]*\" />\n        <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;[a-zA-Z]+;\" />\n      </context>\n\n      <context attribute=\"Operator\" lineEndContext=\"#stay\" name=\"array\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Operator\" context=\"#pop\" char=\"]\" endRegion=\"Array\" />\n        <IncludeRules context=\"rubysourceline\" />\n      </context>\n\n      <context attribute=\"Hash\" lineEndContext=\"#stay\" name=\"hash\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Operator\" context=\"#pop\" char=\"}\" endRegion=\"Hash\" />\n        <IncludeRules context=\"rubysourceline\" />\n      </context>\n\n      <context attribute=\"Unquoted String\" lineEndContext=\"#pop\" name=\"unquoted\">\n        <IncludeRules context=\"Quoted String\" />\n      </context>\n\n<!--      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment0\">\n        <DetectSpaces/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier/>\n<!- - was commented out         <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"^[^/ ]\" endRegion=\"comment\" />  attempt for multiline comments  - ->\n      </context>\n-->\n<!--      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment2\">\n        <DetectSpaces/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier/>\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"^[ ]{2}[^ /]\" endRegion=\"comment\" />\n      </context>-->\n\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n        <DetectSpaces/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier/>\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n      </context>\n\n      <context attribute=\"Escaped Text\" lineEndContext=\"#pop\" name=\"escaped\">\n      </context>\n\n      <context name=\"rubysourceline\" attribute=\"Ruby embedded in haml\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"rubysource\" />\n      </context>\n\n      <context name=\"rubysource\" attribute=\"Ruby embedded in haml\"  lineEndContext=\"#stay\">\n        <!-- ruby ignores newline after \\ -->\n        <LineContinue attribute=\"Ruby Normal Text\" context=\"Line Continue\"/>\n\n        <!-- \"def\" - \"end\" blocks -->\n        <!-- check for statement modifiers with regexes -->\n        <RegExpr attribute=\"Keyword\" String=\"(\\=|\\(|\\[|\\{)\\s*(if|unless|while|until)\\b\" context=\"#stay\" beginRegion=\"def block\"/>\n        <RegExpr attribute=\"Keyword\" String=\"(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Keyword\" String=\"\\;\\s*(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\"/>\n        <RegExpr attribute=\"Keyword\" String=\"(if|unless)\\b\" context=\"#stay\" beginRegion=\"def block\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Keyword\" String=\"\\;\\s*(if|unless)\\b\" context=\"#stay\" beginRegion=\"def block\"/>\n        <WordDetect attribute=\"Keyword\" String=\"class\" context=\"#stay\" beginRegion=\"def block\"/>\n        <WordDetect attribute=\"Keyword\" String=\"module\" context=\"#stay\" beginRegion=\"def block\"/>\n        <WordDetect attribute=\"Keyword\" String=\"begin\" context=\"#stay\" beginRegion=\"def block\"/>\n        <RegExpr attribute=\"Keyword\" String=\"\\bfor\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\"/>\n        <WordDetect attribute=\"Keyword\" String=\"case\" context=\"#stay\" beginRegion=\"def block\"/>\n        <WordDetect attribute=\"Keyword\" String=\"do\" context=\"#stay\" beginRegion=\"def block\"/>\n        <WordDetect attribute=\"Keyword\" String=\"def\" context=\"#stay\" beginRegion=\"def block\"/>\n        <WordDetect attribute=\"Keyword\" String=\"end\" context=\"#stay\" endRegion=\"def block\"/>\n        <!-- elsif/else close the current block and start a new one -->\n        <RegExpr attribute=\"Keyword\" String=\"(\\b|^\\s*)(else|elsif|rescue|ensure)(\\s+|$)\" context=\"#stay\" endRegion=\"def block\" beginRegion=\"def block\"/>\n\n        <StringDetect attribute=\"Operator\" String=\"...\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\".\" char1=\".\" context=\"#stay\"/>\n\n        <!-- marks a message (being sent, not defined) -->\n        <RegExpr attribute=\"Message\" String=\"\\.[_a-z][_a-zA-Z0-9]*(\\?|\\!|\\b)\" context=\"#stay\"/>\n\n        <!-- Check for \"ASCII code operator\". e.g.: ?a -->\n        <RegExpr attribute=\"Dec\" String=\"\\s\\?(\\\\M\\-)?(\\\\C\\-)?\\\\?\\S\" context=\"#stay\"/>\n\n        <keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n        <keyword attribute=\"Attribute Definition\" String=\"attribute-definitions\"  context=\"#stay\"/>\n        <keyword attribute=\"Access Control\" String=\"access-control\" context=\"#stay\"/>\n        <keyword attribute=\"Definition\" String=\"definitions\"  context=\"#stay\" />\n        <keyword attribute=\"Pseudo variable\" String=\"pseudo-variables\"  context=\"#stay\"/>\n        <keyword attribute=\"Default globals\" String=\"default-globals\" context=\"#stay\"/>\n        <keyword attribute=\"Kernel methods\" String=\"kernel-methods\" context=\"#stay\"/>\n\n        <!-- (global) vars starting with $\n          Match them before $_.\n          -->\n        <RegExpr attribute=\"Global Variable\" String=\"\\$[a-zA-Z_0-9]+\" context=\"#stay\"/>\n        <RegExpr attribute=\"Global Variable\" String=\"\\$\\-[a-zA-Z_]\\b\" context=\"#stay\"/>\n        <!-- special-character globals -->\n        <RegExpr attribute=\"Default globals\" String=\"\\$[\\d_*`\\!:?'/\\\\\\-\\&amp;]\" context=\"#stay\"/>\n        <RegExpr attribute=\"Global Constant\" String=\"\\b[_A-Z]+[A-Z_0-9]+\\b\" context=\"#stay\"/>\n        <!-- Generally a module or class name like \"File\", \"MyModule_1\", .. -->\n        <RegExpr attribute=\"Constant\" String=\"\\b[A-Z]+_*([0-9]|[a-z])[_a-zA-Z0-9]*\\b\" context=\"#stay\"/>\n\n        <RegExpr attribute=\"Hex\" String=\"\\b\\-?0[xX][_0-9a-fA-F]+\" context=\"#stay\"/>\n        <RegExpr attribute=\"Bin\" String=\"\\b\\-?0[bB][_01]+\" context=\"#stay\"/>\n        <RegExpr attribute=\"Octal\" String=\"\\b\\-?0[1-7][_0-7]*\" context=\"#stay\"/>\n        <RegExpr attribute=\"Float\" String=\"\\b\\-?[0-9][0-9_]*\\.[0-9][0-9_]*([eE]\\-?[1-9][0-9]*(\\.[0-9]*)?)?\" context=\"#stay\"/>\n        <RegExpr attribute=\"Dec\" String=\"\\b\\-?[1-9][0-9_]*\\b\" context=\"#stay\"/>\n        <Int attribute=\"Dec\" context=\"#stay\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n\n        <!-- Check for =begin before assignment operator. -->\n        <StringDetect attribute=\"Blockcomment\" String=\"=begin\" context=\"Embedded documentation\" beginRegion=\"comment block\" column=\"0\"/>\n\n        <DetectChar attribute=\"Operator\" char=\".\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"&amp;\" char1=\"&amp;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"|\" char1=\"|\" context=\"#stay\"/>\n        <RegExpr attribute=\"Operator\" String=\"\\s[\\?\\:\\%/]\\s\" context=\"#stay\"/>\n        <RegExpr attribute=\"Operator\" String=\"[|&amp;&lt;&gt;\\^\\+*~\\-=]+\" context=\"#stay\"/>\n        <!-- regexp hack -->\n        <RegExpr attribute=\"Operator\" String=\"\\s!\" context=\"#stay\"/>\n        <RegExpr attribute=\"Operator\" String=\"/=\\s\" context=\"#stay\" insensitive=\"0\"/>\n        <StringDetect attribute=\"Operator\" String=\"%=\" context=\"#stay\" insensitive=\"0\"/>\n        <Detect2Chars attribute=\"Operator\" char=\":\" char1=\":\" context=\"Member Access\"/>\n\n        <RegExpr attribute=\"Symbol\" String=\":[a-zA-Z_][a-zA-Z0-9_]*\" context=\"#stay\"/>\n\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"Quoted String\"/>\n        <DetectChar attribute=\"Raw String\" char=\"'\" context=\"Apostrophed String\"/>\n        <DetectChar attribute=\"Command\" char=\"`\" context=\"Command String\"/>\n\n        <StringDetect attribute=\"Normal Text\" String=\"?#\" context=\"#stay\"/>\n\n        <RegExpr attribute=\"Comment\" String=\"#\\s*BEGIN.*$\"  context=\"#stay\" beginRegion=\"marker\" column=\"0\"/>\n        <RegExpr attribute=\"Comment\" String=\"#\\s*END.*$\"  context=\"#stay\" endRegion=\"marker\" column=\"0\"/>\n        <RegExpr attribute=\"Comment\" String=\"#\"  context=\"General Comment\"/>\n\n        <RegExpr attribute=\"Delimiter\" String=\"[\\[\\]]+\"  context=\"#stay\"/>\n        <DetectChar attribute=\"Delimiter\" char=\"{\" context=\"#stay\" beginRegion=\"def block\"/>\n        <DetectChar attribute=\"Delimiter\" char=\"}\" context=\"#stay\" endRegion=\"def block\"/>\n\n        <RegExpr attribute=\"Instance Variable\" String=\"@[a-zA-Z_0-9]+\" context=\"#stay\"/>\n        <RegExpr attribute=\"Class Variable\" String=\"@@[a-zA-Z_0-9]+\" context=\"#stay\"/>\n\n        <!-- handle the different regular expression formats -->\n        <DetectChar attribute=\"Regular Expression\" char=\"/\" context=\"RegEx 1\"/>\n      </context>\n\n      <context name=\"Line Continue\" attribute=\"Ruby Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Keyword\" String=\"(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Keyword\" String=\"(if|unless)\\b\" context=\"#stay\" firstNonSpace=\"true\"/>\n        <IncludeRules context=\"rubysource\"/>\n      </context>\n\n      <context name=\"Quoted String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"String\" String=\"\\\\\" context=\"#stay\"/>\n        <RegExpr attribute=\"String\" String=\"\\\\\\&quot;\" context=\"#stay\"/>\n        <RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n        <Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n        <!--HlCChar attribute=\"Char\" context=\"#pop\"/-->\n        <DetectChar char=\"&quot;\" attribute=\"String\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Apostrophed String\" attribute=\"Raw String\" lineEndContext=\"#stay\">\n        <!-- <HlCChar attribute=\"Char\" context=\"#pop\"/> -->\n        <StringDetect attribute=\"String\" String=\"\\\\\" context=\"#stay\"/>\n        <RegExpr attribute=\"String\" String=\"\\\\\\'\" context=\"#stay\"/>\n        <DetectChar char=\"'\" attribute=\"Raw String\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Command String\" attribute=\"Command\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"String\" String=\"\\\\\" context=\"#stay\"/>\n        <RegExpr attribute=\"String\" String=\"\\\\\\`\" context=\"#stay\"/>\n        <RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n        <Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n        <HlCChar attribute=\"Char\" context=\"#pop\"/>\n        <DetectChar char=\"`\" attribute=\"Command\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Embedded documentation\" attribute=\"Ruby Comment\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Ruby Comment\" String=\"=end\" context=\"#pop\" endRegion=\"comment block\" column=\"0\"/>\n      </context>\n\n      <context name=\"RegEx 1\" attribute=\"Regular Expression\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Regular Expression\" String=\"\\\\\\/\" context=\"#stay\"/>\n        <RegExpr attribute=\"Regular Expression\" String=\"[^\\\\]$\" context=\"#pop\"/>\n        <RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n        <Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n        <RegExpr attribute=\"Regular Expression\" String=\"/[uiomxn]*\" context=\"#pop\"/>\n      </context>\n\n      <!-- Substitutions can be nested -->\n      <context name=\"Subst\" attribute=\"Ruby Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Substitution\" char=\"}\" context=\"#pop\"/>\n        <!-- Highlight substitution as code. -->\n        <IncludeRules context=\"rubysource\"/>\n      </context>\n\n      <context name=\"Short Subst\" attribute=\"Substitution\" lineEndContext=\"#pop\">\n        <!-- Check for e.g.: \"#@var#@@xy\" -->\n        <RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"#stay\"/>\n        <RegExpr attribute=\"Substitution\" String=\"\\w(?!\\w)\" context=\"#pop\"/>\n      </context>\n\n      <!-- This handles access of nested module classes and class methods -->\n      <context name=\"Member Access\" attribute=\"Member\" lineEndContext=\"#pop\">\n        <!-- marks a message (being sent, not defined) -->\n        <RegExpr attribute=\"Message\" String=\"\\.?[_a-z]\\w*(\\?|\\!)?(?=[^\\w\\d\\.\\:])\" context=\"#pop\"/>\n        <RegExpr attribute=\"Message\" String=\"\\.?[_a-z]\\w*(\\?|\\!)?\" context=\"#stay\"/>\n        <RegExpr attribute=\"Constant\" String=\"[A-Z]+_*(\\d|[a-z])\\w*(?=[^\\w\\d\\.\\:])\" context=\"#pop\"/>\n        <RegExpr attribute=\"Constant\" String=\"[A-Z]+_*([0-9]|[a-z])\\w*\" context=\"#stay\"/>\n        <RegExpr attribute=\"Constant Value\" String=\"[_A-Z][_A-Z0-9]*(?=[^\\w\\d\\.\\:])\" context=\"#pop\"/>\n        <RegExpr attribute=\"Constant Value\" String=\"[_A-Z][_A-Z0-9]*\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <DetectChar attribute=\"Member\" char=\".\" context=\"#stay\"/>\n\n        <AnyChar attribute=\"Operator\" String=\"=+-*/%|&amp;[]{}~\" context=\"#pop\"/>\n        <DetectChar attribute=\"Ruby Comment\" char=\"#\" context=\"#pop\"/>\n        <AnyChar attribute=\"Ruby Normal Text\" String=\"()\\\" context=\"#pop\"/>\n        <RegExpr attribute=\"Member\" String=\"\\W\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"General Comment\" attribute=\"Ruby Comment\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Dec\" String=\"attention\" context=\"#stay\"/>\n      </context>\n    </contexts>\n\n\n\n\n    <itemDatas>\n    <!-- Ruby itemData -->\n      <itemData name=\"Ruby Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Ruby embedded in haml\" defStyleNum=\"dsNormal\"/>\n\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Attribute Definition\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Access Control\" defStyleNum=\"dsKeyword\" color=\"#0000FF\"/>\n      <itemData name=\"Definition\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Pseudo variable\" defStyleNum=\"dsDecVal\"/>\n\n      <itemData name=\"Dec\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Bin\" defStyleNum=\"dsBaseN\"/>\n\n      <itemData name=\"Symbol\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Escaped Text\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Unquoted String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Raw String\" defStyleNum=\"dsString\" color=\"#DD4A4A\" selColor=\"#DD4A4A\"/>\n      <itemData name=\"Command\" defStyleNum=\"dsString\" color=\"#AA3000\"/>\n      <itemData name=\"Message\" defStyleNum=\"dsNormal\" color=\"#4000A7\"/> <!-- #4A00C0 -->\n      <itemData name=\"Regular Expression\" defStyleNum=\"dsOthers\" color=\"#4A5704\"/>\n      <itemData name=\"Substitution\" defStyleNum=\"dsOthers\"/>\n\n      <itemData name=\"Default globals\" defStyleNum=\"dsDataType\" color=\"#C00000\" bold=\"1\"/>\n      <itemData name=\"Global Variable\" defStyleNum=\"dsDataType\" color=\"#C00000\"/>\n      <itemData name=\"Global Constant\" defStyleNum=\"dsDataType\" color=\"#bb1188\" bold=\"1\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Constant Value\" defStyleNum=\"dsDataType\" color=\"#bb1188\"/>\n      <itemData name=\"Kernel methods\" defStyleNum=\"dsNormal\" color=\"#000080\" selColor=\"#ffffff\"/> <!-- #CC0E86 -->\n      <itemData name=\"Member\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Instance Variable\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Class Variable\" defStyleNum=\"dsOthers\"/>\n\n      <itemData name=\"Ruby Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Blockcomment\" defStyleNum=\"dsComment\"/>\n\n      <!-- use these to mark errors and alerts things -->\n      <itemData name=\"Error\" defStyleNum=\"dsError\" />\n\n      <itemData name=\"Delimiter\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsChar\"/>\n\n     <!-- HAML itemData -->\n\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Hash\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" />\n      <itemData name=\"Filter\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Element Id\" defStyleNum=\"dsFloat\" bold=\"1\" />\n      <itemData name=\"Element Class\" defStyleNum=\"dsFloat\" />\n      <itemData name=\"Div Id\" defStyleNum=\"dsDecVal\" bold=\"1\" />\n      <itemData name=\"Div Class\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Tag\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Entity\" defStyleNum=\"dsDecVal\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <folding indentationsensitive=\"1\" />\n    <emptyLines>\n      <emptyLine regexpr=\"\\s+\" casesensitive=\"false\"/>\n    </emptyLines>\n    <comments>\n      <comment name=\"singleLine\" start=\"/\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/hamlet.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- names must start with a letter, ideogram or underscore. \\w matches any\n  word character *or* a number, hence the lookahead -->\n  <!ENTITY name    \"(?![0-9])[\\w_:][\\w.:_-]*\">\n]>\n<language name=\"Hamlet\" version=\"3\" kateversion=\"2.4\" section=\"Markup\" extensions=\"*.hamlet\" author=\"Bastian Holst (bastianholst@gmx.de)\" license=\"LGPL\" indenter=\"haskell\">\n<highlighting>\n<contexts>\n  <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Normal Text\" >\n    <RegExpr attribute=\"Element\" context=\"element\" String=\"&lt;&name;\\b\" />\n    <!-- A widget -->\n    <StringDetect attribute=\"Code\" context=\"Code\" String=\"^{\"/>\n    <!-- Something implementing ToHtml -->\n    <StringDetect attribute=\"Code\" context=\"Code\" String=\"#{\"/>\n    <!-- An URL -->\n    <StringDetect attribute=\"Code\" context=\"Code\" String=\"@{\"/>\n    <!-- A Message -->\n    <StringDetect attribute=\"Code\" context=\"Code\" String=\"_{\"/>\n    <DetectChar attribute=\"Logic\" context=\"Logic\" firstNonSpace=\"true\" char=\"$\"/>\n  </context>\n\n  <context attribute=\"Element\" lineEndContext=\"#stay\" name=\"element\" >\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n    <DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n    <RegExpr attribute=\"Attribute\" context=\"Attribute\" String=\"&name;\" column=\"0\"/>\n    <RegExpr attribute=\"Attribute\" context=\"Attribute\" String=\"\\s+&name;\" />\n    <RegExpr attribute=\"Class\" context=\"#stay\" String=\"\\.&name;\"/>\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Logic\" lineEndContext=\"#pop\" attribute=\"Normal Text\">\n    <WordDetect attribute=\"Logic\" context=\"Codeline\" String=\"if\"/>\n    <WordDetect attribute=\"Logic\" context=\"Codeline\" String=\"elseif\"/>\n    <WordDetect attribute=\"Logic\" context=\"Assignment\" String=\"forall\"/>\n    <WordDetect attribute=\"Logic\" context=\"Assignment\" String=\"maybe\"/>\n    <WordDetect attribute=\"Logic\" context=\"#stay\" String=\"else\"/>\n    <WordDetect attribute=\"Logic\" context=\"#stay\" String=\"nothing\"/>\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Code\" context=\"#pop\" char=\"}\"/>\n    <IncludeRules context=\"##Haskell\" />\n  </context>\n\n  <context name=\"Codeline\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n    <IncludeRules context=\"##Haskell\" />\n  </context>\n\n  <context name=\"Assignment\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n    <StringDetect attribute=\"Assignment\" context=\"Codeline\" String=\"&lt;-\"/>\n    <IncludeRules context=\"##Haskell\" />\n  </context>\n\n  <context name=\"Attribute\" attribute=\"Attribute\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\" />\n    <DetectChar attribute=\"Element\" context=\"#pop#pop\" char=\"&gt;\"/>\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context attribute=\"Value\" lineEndContext=\"#stay\" name=\"Value\">\n    <DetectChar attribute=\"Value\" context=\"Value DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Value SQ\" char=\"&apos;\" />\n    <StringDetect attribute=\"Code\" context=\"Value Code\" String=\"@{\"/>\n    <StringDetect attribute=\"Code\" context=\"Value Code\" String=\"#{\"/>\n    <RegExpr attribute=\"Value\" context=\"#pop#pop\" String=\"[^&quot;&apos;&gt;\\s]+\"/>\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Value DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop#pop\" char=\"&quot;\" />\n  </context>\n\n  <context name=\"Value SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop#pop\" char=\"&apos;\" />\n  </context>\n  \n  <context name=\"Value Code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Code\" context=\"#pop#pop#pop\" char=\"}\"/>\n    <IncludeRules context=\"##Haskell\" />\n  </context>\n\n</contexts>\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Element\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Attribute\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n  <itemData name=\"Class\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n  <itemData name=\"Value\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n  <itemData name=\"Logic\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n  <itemData name=\"Code\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n  <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\" />\n  <itemData name=\"Assignment\" defStyleNum=\"dsOthers\"  spellChecking=\"false\" />\n</itemDatas>\n</highlighting> \n<general>\n  <comments>\n    <comment name=\"singleLine\" start=\"#\"/>\n  </comments>\n  <keywords casesensitive=\"1\"/>\n</general> \n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/haskell.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Haskell\" version=\"13\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.hs;*.chs;*.hs-boot\" mimetype=\"text/x-haskell\" author=\"Nicolas Wu (zenzike@gmail.com)\" license=\"LGPL\" indenter=\"haskell\" style=\"haskell\">\n  <highlighting>\n  <list name=\"keywords\">\n    <item>case</item>\n    <item>class</item>\n    <item>data</item>\n    <item>deriving</item>\n    <item>do</item>\n    <item>else</item>\n    <item>family</item>\n    <item>forall</item>\n    <item>if</item>\n    <item>in</item>\n    <item>infixl</item>\n    <item>infixr</item>\n    <item>instance</item>\n    <item>let</item>\n    <item>module</item>\n    <item>newtype</item>\n    <item>of</item>\n    <item>pattern</item>\n    <item>primitive</item>\n    <item>then</item>\n    <item>type</item>\n    <item>where</item>\n  </list>\n  <list name=\"prelude function\">\n    <item>abs</item>\n    <item>acos</item>\n    <item>acosh</item>\n    <item>all</item>\n    <item>and</item>\n    <item>any</item>\n    <item>appendFile</item>\n    <item>approxRational</item>\n    <item>asTypeOf</item>\n    <item>asin</item>\n    <item>asinh</item>\n    <item>atan</item>\n    <item>atan2</item>\n    <item>atanh</item>\n    <item>basicIORun</item>\n    <item>break</item>\n    <item>catch</item>\n    <item>ceiling</item>\n    <item>chr</item>\n    <item>compare</item>\n    <item>concat</item>\n    <item>concatMap</item>\n    <item>const</item>\n    <item>cos</item>\n    <item>cosh</item>\n    <item>curry</item>\n    <item>cycle</item>\n    <item>decodeFloat</item>\n    <item>denominator</item>\n    <item>digitToInt</item>\n    <item>div</item>\n    <item>divMod</item>\n    <item>drop</item>\n    <item>dropWhile</item>\n    <item>either</item>\n    <item>elem</item>\n    <item>encodeFloat</item>\n    <item>enumFrom</item>\n    <item>enumFromThen</item>\n    <item>enumFromThenTo</item>\n    <item>enumFromTo</item>\n    <item>error</item>\n    <item>even</item>\n    <item>exp</item>\n    <item>exponent</item>\n    <item>fail</item>\n    <item>filter</item>\n    <item>flip</item>\n    <item>floatDigits</item>\n    <item>floatRadix</item>\n    <item>floatRange</item>\n    <item>floor</item>\n    <item>fmap</item>\n    <item>foldl</item>\n    <item>foldl1</item>\n    <item>foldMap</item>\n    <item>foldr</item>\n    <item>foldr1</item>\n    <item>fromDouble</item>\n    <item>fromEnum</item>\n    <item>fromInt</item>\n    <item>fromInteger</item>\n    <item>fromIntegral</item>\n    <item>fromRational</item>\n    <item>fst</item>\n    <item>gcd</item>\n    <item>getChar</item>\n    <item>getContents</item>\n    <item>getLine</item>\n    <item>group</item>\n    <item>head</item>\n    <item>id</item>\n    <item>inRange</item>\n    <item>index</item>\n    <item>init</item>\n    <item>intToDigit</item>\n    <item>interact</item>\n    <item>ioError</item>\n    <item>isAlpha</item>\n    <item>isAlphaNum</item>\n    <item>isAscii</item>\n    <item>isControl</item>\n    <item>isDenormalized</item>\n    <item>isDigit</item>\n    <item>isHexDigit</item>\n    <item>isIEEE</item>\n    <item>isInfinite</item>\n    <item>isLower</item>\n    <item>isNaN</item>\n    <item>isNegativeZero</item>\n    <item>isOctDigit</item>\n    <item>isPrint</item>\n    <item>isSpace</item>\n    <item>isUpper</item>\n    <item>iterate</item>\n    <item>last</item>\n    <item>lcm</item>\n    <item>length</item>\n    <item>lex</item>\n    <item>lexDigits</item>\n    <item>lexLitChar</item>\n    <item>lines</item>\n    <item>log</item>\n    <item>logBase</item>\n    <item>lookup</item>\n    <item>map</item>\n    <item>mappend</item>\n    <item>mapM</item>\n    <item>mapM_</item>\n    <item>max</item>\n    <item>maxBound</item>\n    <item>maximum</item>\n    <item>maybe</item>\n    <item>mconcat</item>\n    <item>mempty</item>\n    <item>min</item>\n    <item>minBound</item>\n    <item>minimum</item>\n    <item>mod</item>\n    <item>negate</item>\n    <item>not</item>\n    <item>notElem</item>\n    <item>null</item>\n    <item>numerator</item>\n    <item>odd</item>\n    <item>or</item>\n    <item>ord</item>\n    <item>otherwise</item>\n    <item>pack</item>\n    <item>pi</item>\n    <item>pred</item>\n    <item>primExitWith</item>\n    <item>print</item>\n    <item>product</item>\n    <item>properFraction</item>\n    <item>pure</item>\n    <item>putChar</item>\n    <item>putStr</item>\n    <item>putStrLn</item>\n    <item>quot</item>\n    <item>quotRem</item>\n    <item>range</item>\n    <item>rangeSize</item>\n    <item>read</item>\n    <item>readDec</item>\n    <item>readFile</item>\n    <item>readFloat</item>\n    <item>readHex</item>\n    <item>readIO</item>\n    <item>readInt</item>\n    <item>readList</item>\n    <item>readLitChar</item>\n    <item>readLn</item>\n    <item>readOct</item>\n    <item>readParen</item>\n    <item>readSigned</item>\n    <item>reads</item>\n    <item>readsPrec</item>\n    <item>realToFrac</item>\n    <item>recip</item>\n    <item>rem</item>\n    <item>repeat</item>\n    <item>replicate</item>\n    <item>return</item>\n    <item>reverse</item>\n    <item>round</item>\n    <item>scaleFloat</item>\n    <item>scanl</item>\n    <item>scanl1</item>\n    <item>scanr</item>\n    <item>scanr1</item>\n    <item>seq</item>\n    <item>sequence</item>\n    <item>sequenceA</item>\n    <item>sequence_</item>\n    <item>show</item>\n    <item>showChar</item>\n    <item>showInt</item>\n    <item>showList</item>\n    <item>showLitChar</item>\n    <item>showParen</item>\n    <item>showSigned</item>\n    <item>showString</item>\n    <item>shows</item>\n    <item>showsPrec</item>\n    <item>significand</item>\n    <item>signum</item>\n    <item>sin</item>\n    <item>sinh</item>\n    <item>snd</item>\n    <item>sort</item>\n    <item>span</item>\n    <item>splitAt</item>\n    <item>sqrt</item>\n    <item>subtract</item>\n    <item>succ</item>\n    <item>sum</item>\n    <item>tail</item>\n    <item>take</item>\n    <item>takeWhile</item>\n    <item>tan</item>\n    <item>tanh</item>\n    <item>threadToIOResult</item>\n    <item>toEnum</item>\n    <item>toInt</item>\n    <item>toInteger</item>\n    <item>toLower</item>\n    <item>toRational</item>\n    <item>toUpper</item>\n    <item>traverse</item>\n    <item>truncate</item>\n    <item>uncurry</item>\n    <item>undefined</item>\n    <item>unlines</item>\n    <item>until</item>\n    <item>unwords</item>\n    <item>unzip</item>\n    <item>unzip3</item>\n    <item>userError</item>\n    <item>words</item>\n    <item>writeFile</item>\n    <item>zip</item>\n    <item>zip3</item>\n    <item>zipWith</item>\n    <item>zipWith3</item>\n  </list>\n  <list name=\"prelude class\">\n    <item>Applicative</item>\n    <item>Bounded</item>\n    <item>Enum</item>\n    <item>Eq</item>\n    <item>Floating</item>\n    <item>Foldable</item>\n    <item>Fractional</item>\n    <item>Functor</item>\n    <item>Integral</item>\n    <item>Ix</item>\n    <item>Monad</item>\n    <item>Monoid</item>\n    <item>Num</item>\n    <item>Ord</item>\n    <item>Read</item>\n    <item>Real</item>\n    <item>RealFloat</item>\n    <item>RealFrac</item>\n    <item>Show</item>\n    <item>Traversable</item>\n  </list>\n  <list name=\"prelude type\">\n    <item>Bool</item>\n    <item>ByteString</item>\n    <item>Char</item>\n    <item>Double</item>\n    <item>Either</item>\n    <item>FilePath</item>\n    <item>Float</item>\n    <item>Int</item>\n    <item>Integer</item>\n    <item>IO</item>\n    <item>IOError</item>\n    <item>Maybe</item>\n    <item>Ordering</item>\n    <item>Ratio</item>\n    <item>Rational</item>\n    <item>ReadS</item>\n    <item>ShowS</item>\n    <item>String</item>\n    <item>Word</item>\n  </list>\n  <list name=\"prelude data\">\n    <item>False</item>\n    <item>True</item>\n    <item>Left</item>\n    <item>Right</item>\n    <item>Just</item>\n    <item>Nothing</item>\n    <item>EQ</item>\n    <item>LT</item>\n    <item>GT</item>\n  </list>\n  <list name=\"cpp_keywords\">\n    <item>defined</item>\n    <item>if</item>\n    <item>ifdef</item>\n    <item>ifndef</item>\n    <item>include</item>\n    <item>undef</item>\n  </list>\n  <list name=\"c2hs_keywords\">\n    <item>qualified</item>\n    <item>lib</item>\n    <item>prefix</item>\n    <item>as</item>\n    <item>with</item>\n    <item>call</item>\n    <item>pure</item>\n    <item>unsafe</item>\n    <item>get</item>\n    <item>set</item>\n    <item>foreign</item>\n    <item>stable</item>\n    <item>nocode</item>\n  </list>\n  <list name=\"import_keywords\">\n    <item>as</item>\n    <item>qualified</item>\n    <item>hiding</item>\n  </list>\n  <list name=\"language_pragmas\">\n    <item>AllowAmbiguousTypes</item>\n    <item>ApplicativeDo</item>\n    <item>Arrows</item>\n    <item>AutoDeriveTypeable</item>\n    <item>BangPatterns</item>\n    <item>BinaryLiterals</item>\n    <item>CApiFFI</item>\n    <item>CPP</item>\n    <item>ConstrainedClassMethods</item>\n    <item>ConstraintKinds</item>\n    <item>DataKinds</item>\n    <item>DatatypeContexts</item>\n    <item>DefaultSignatures</item>\n    <item>DeriveAnyClass</item>\n    <item>DeriveDataTypeable</item>\n    <item>DeriveFoldable</item>\n    <item>DeriveFunctor</item>\n    <item>DeriveGeneric</item>\n    <item>DeriveLift</item>\n    <item>DeriveTraversable</item>\n    <item>DisambiguateRecordFields</item>\n    <item>DoAndIfThenElse</item>\n    <item>DoRec</item>\n    <item>DuplicateRecordFields</item>\n    <item>EmptyCase</item>\n    <item>EmptyDataDecls</item>\n    <item>ExistentialQuantification</item>\n    <item>ExplicitForAll</item>\n    <item>ExplicitNamespaces</item>\n    <item>ExtendedDefaultRules</item>\n    <item>ExtensibleRecords</item>\n    <item>FlexibleContexts</item>\n    <item>FlexibleInstances</item>\n    <item>ForeignFunctionInterface</item>\n    <item>FunctionalDependencies</item>\n    <item>GADTSyntax</item>\n    <item>GADTs</item>\n    <item>GHCForeignImportPrim</item>\n    <item>GeneralizedNewtypeDeriving</item>\n    <item>Generics</item>\n    <item>HereDocuments</item>\n    <item>ImplicitParams</item>\n    <item>ImplicitPrelude</item>\n    <item>ImpredicativeTypes</item>\n    <item>IncoherentInstances</item>\n    <item>InstanceSigs</item>\n    <item>InterruptibleFFI</item>\n    <item>JavaScriptFFI</item>\n    <item>KindSignatures</item>\n    <item>LambdaCase</item>\n    <item>LiberalTypeSynonyms</item>\n    <item>MagicHash</item>\n    <item>MonadComprehensions</item>\n    <item>MonadFailDesugaring</item>\n    <item>MonoLocalBinds</item>\n    <item>MonoPatBinds</item>\n    <item>MonomorphismRestriction</item>\n    <item>MultiParamTypeClasses</item>\n    <item>MultiWayIf</item>\n    <item>NPlusKPatterns</item>\n    <item>NamedFieldPuns</item>\n    <item>NamedWildCards</item>\n    <item>NegativeLiterals</item>\n    <item>NewQualifiedOperators</item>\n    <item>NondecreasingIndentation</item>\n    <item>NullaryTypeClasses</item>\n    <item>NumDecimals</item>\n    <item>OverlappingInstances</item>\n    <item>OverloadedLabels</item>\n    <item>OverloadedLists</item>\n    <item>OverloadedStrings</item>\n    <item>PackageImports</item>\n    <item>ParallelArrays</item>\n    <item>ParallelListComp</item>\n    <item>PartialTypeSignatures</item>\n    <item>PatternGuards</item>\n    <item>PatternSignatures</item>\n    <item>PatternSynonyms</item>\n    <item>PolyKinds</item>\n    <item>PolymorphicComponents</item>\n    <item>PostfixOperators</item>\n    <item>QuasiQuotes</item>\n    <item>Rank2Types</item>\n    <item>RankNTypes</item>\n    <item>RebindableSyntax</item>\n    <item>RecordPuns</item>\n    <item>RecordWildCards</item>\n    <item>RecursiveDo</item>\n    <item>RegularPatterns</item>\n    <item>RelaxedPolyRec</item>\n    <item>RestrictedTypeSynonyms</item>\n    <item>RoleAnnotations</item>\n    <item>Safe</item>\n    <item>SafeImports</item>\n    <item>ScopedTypeVariables</item>\n    <item>StandaloneDeriving</item>\n    <item>StaticPointers</item>\n    <item>Strict</item>\n    <item>StrictData</item>\n    <item>TemplateHaskell</item>\n    <item>TemplateHaskellQuotes</item>\n    <item>TraditionalRecordSyntax</item>\n    <item>TransformListComp</item>\n    <item>Trustworthy</item>\n    <item>TupleSections</item>\n    <item>TypeApplications</item>\n    <item>TypeFamilies</item>\n    <item>TypeInType</item>\n    <item>TypeOperators</item>\n    <item>TypeSynonymInstances</item>\n    <item>UnboxedTuples</item>\n    <item>UndecidableInstances</item>\n    <item>UndecidableSuperClasses</item>\n    <item>UnicodeSyntax</item>\n    <item>UnliftedFFITypes</item>\n    <item>Unsafe</item>\n    <item>ViewPatterns</item>\n    <item>XmlSyntax</item>\n  </list>\n  <contexts>\n    <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"code\">\n      <StringDetect attribute=\"Pragma\"  context=\"pragma\" String=\"{-#\"/>\n      <StringDetect attribute=\"Comment\" context=\"#stay\" String=\"{--}\"/>\n      <RegExpr attribute=\"Comment\" context=\"comments\" String=\"\\{-[^#]?\" />\n      <RegExpr attribute=\"Comment\" context=\"comment\"  String=\"--[\\-]*([^!#\\$%&amp;\\*\\+\\./&lt;=&gt;\\?@&#92;\\^\\|\\-~:]|$)\" />\n      <WordDetect attribute=\"Keyword\" context=\"import\"   String=\"import\" />\n      <Detect2Chars attribute=\"C2HS Directive\" context=\"c2hs directive\" char=\"{\" char1=\"#\"/>\n      <DetectChar attribute=\"C Preprocessor\" context=\"C Preprocessor\" char=\"#\" column=\"0\"/>\n\n      <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"keywords\" />\n      <keyword attribute=\"Function Prelude\" context=\"#stay\" String=\"prelude function\" />\n      <keyword attribute=\"Type Prelude\"     context=\"#stay\" String=\"prelude type\" />\n      <keyword attribute=\"Data Prelude\"     context=\"#stay\" String=\"prelude data\" />\n      <keyword attribute=\"Class Prelude\"    context=\"#stay\" String=\"prelude class\" />\n\n      <RegExpr attribute=\"Special\"          context=\"#stay\" String=\"(::|=&gt;|\\-&gt;|&lt;\\-|=)(?![\\-!#\\$%&amp;\\*\\+/&lt;=&gt;\\?&#92;@\\^\\|~\\.:])\" />\n      <AnyChar attribute=\"Special\"          context=\"#stay\" String=\"∷⇒→←∀∃\" />\n      <RegExpr attribute=\"Signature\"        context=\"#stay\" String=\"\\s*[a-z_][a-zA-Z0-9_']*\\s*(?=::([^\\-!#\\$%&amp;\\*\\+/&lt;=&gt;\\?&#92;@\\^\\|~\\.:]|$))\" />\n      <RegExpr attribute=\"Signature\"        context=\"#stay\" String=\"\\s*(\\([\\-!#\\$%&amp;\\*\\+/&lt;=&gt;\\?&#92;@\\^\\|~\\.:]*\\))*\\s*(?=::[^\\-!#\\$%&amp;\\*\\+/&lt;=&gt;\\?&#92;@\\^\\|~\\.:])\" />\n      <RegExpr attribute=\"Function\"         context=\"#stay\" String=\"([A-Z][a-zA-Z0-9_']*\\.)*[a-z_][a-zA-Z0-9_']*\" />\n      <RegExpr attribute=\"Operator\"         context=\"#stay\" String=\"([A-Z][a-zA-Z0-0_']*\\.)*[\\-!#\\$%&amp;\\*\\+/&lt;=&gt;\\?&#92;@\\^\\|~\\.:]+\" />\n      <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*\" />\n      <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"'(?![A-Z]')([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*\" />\n\n      <RegExpr    attribute=\"Float\"   context=\"#stay\" String =\"\\d+\\.\\d+([Ee][+-]?\\d+)?|\\d+[Ee][+-]?\\d+\"/>\n      <RegExpr    attribute=\"Octal\"   context=\"#stay\" String=\"0[Oo][0-7]+\"/>\n      <RegExpr    attribute=\"Hex\"     context=\"#stay\" String=\"0[Xx][0-9A-Fa-f]+\"/>\n      <Int        attribute=\"Decimal\" context=\"#stay\" />\n      <DetectChar attribute=\"Char\"    context=\"char\" char=\"'\" />\n      <DetectChar attribute=\"String\"  context=\"string\" char=\"&quot;\" />\n\n      <DetectChar attribute=\"Function Infix\" context=\"infix\" char=\"`\"/>\n      <Detect2Chars attribute=\"EnumFromTo\" context=\"#stay\" char =\".\" char1=\".\" />\n      <AnyChar      attribute=\"EnumFromTo\" context=\"#stay\" String=\"‥\" />\n\n      <RegExpr attribute=\"Normal\" context=\"Hamlet\" String=\"\\[[wxs]?hamlet\\|\" />\n      <RegExpr attribute=\"Normal\" context=\"Julius\" String=\"\\[julius\\|\" />\n      <RegExpr attribute=\"Normal\" context=\"QuasiQuote\" String=\"\\[[a-zA-Z_'](\\w|[_'])*\\|\" />\n    </context>\n    <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"QuasiQuote\">\n      <Detect2Chars attribute=\"Normal\" context=\"#pop\" char=\"|\" char1=\"]\"/>\n    </context>\n    <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Julius\">\n      <IncludeRules context=\"QuasiQuote\"/>\n      <IncludeRules context=\"Normal##JavaScript\" />\n    </context>\n    <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Hamlet\">\n      <IncludeRules context=\"QuasiQuote\"/>\n      <IncludeRules context=\"##Hamlet\" />\n    </context>\n    <context attribute=\"Pragma\" lineEndContext=\"#stay\" name=\"pragma\">\n      <keyword attribute=\"Pragma\" context=\"#stay\" String=\"language_pragmas\" />\n      <StringDetect attribute=\"Pragma\"  context=\"#pop\" String=\"#-}\"/>\n    </context>\n    <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n      <IncludeRules context=\"Haddock\" />\n    </context>\n    <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"comments\">\n      <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"{\" char1=\"-\" />\n      <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"}\" />\n      <IncludeRules context=\"Haddock\" />\n    </context>\n    <context attribute=\"Char\" lineEndContext=\"#pop\" name=\"char\">\n      <RegExpr attribute=\"Char\" context=\"#stay\" String=\"\\\\.\" />\n      <DetectChar attribute=\"Char\" context=\"#pop\" char=\"'\" />\n    </context>\n    <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\">\n      <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\\\.\" />\n      <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n    </context>\n    <context attribute=\"Function Infix\" lineEndContext=\"#stay\" name=\"infix\">\n      <DetectChar attribute=\"Function Infix\" context=\"#pop\" char=\"`\"/>\n    </context>\n    <context attribute=\"Normal\" lineEndContext=\"#pop\" name=\"import\">\n      <keyword attribute=\"Keyword\"          context=\"#stay\" String=\"import_keywords\" />\n      <RegExpr attribute=\"Function\"         context=\"#stay\" String=\"([A-Z][a-zA-Z0-9_']*\\.)*[a-z][a-zA-Z0-9_']*\" />\n      <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*\" />\n\n      <RegExpr attribute=\"Pragma\"  context=\"#stay\" String=\"\\{-#.*#-\\}\"/>\n      <RegExpr attribute=\"Comment\" context=\"comments\" String=\"\\{-[^#]?\" />\n      <RegExpr attribute=\"Comment\" context=\"comment\"  String=\"--([^\\-!#\\$%&amp;\\*\\+/&lt;=&gt;\\?&#92;@\\^\\|~\\.:].*)?$\" />\n    </context>\n\n    <!-- Haddock -->\n    <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Haddock\">\n      <RegExpr attribute=\"Haddock Hyperlink\" context=\"#stay\" String=\"'([A-Z][a-zA-Z0-9_']*\\.)*[a-z_][a-zA-Z0-9_']*'\" />\n      <RegExpr attribute=\"Haddock Module\" context=\"#stay\" String=\"&quot;([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*&quot;\" />\n      <RegExpr attribute=\"Haddock Emphasis\" context=\"Start Haddock Emphasis\" lookAhead=\"true\" String=\"/.*/\" />\n      <RegExpr attribute=\"Haddock Bold\" context=\"Start Haddock Bold\" lookAhead=\"true\" String=\"__.*__\" />\n    </context>\n    <context attribute=\"Haddock Emphasis\" lineEndContext=\"#pop\" name=\"Start Haddock Emphasis\">\n      <DetectChar attribute=\"Haddock Emphasis\" context=\"Haddock Emphasis\" char=\"/\" />\n    </context>\n    <context attribute=\"Haddock Emphasis\" lineEndContext=\"#pop\" name=\"Haddock Emphasis\">\n      <DetectChar attribute=\"Haddock Emphasis\" context=\"#pop#pop\" char=\"/\" />\n      <IncludeRules context=\"Haddock\"/>\n    </context>\n    <context attribute=\"Haddock Bold\" lineEndContext=\"#pop\" name=\"Start Haddock Bold\">\n      <Detect2Chars attribute=\"Haddock Bold\" context=\"Haddock Bold\" char=\"_\" char1=\"_\" />\n    </context>\n    <context attribute=\"Haddock Bold\" lineEndContext=\"#pop\" name=\"Haddock Bold\">\n      <Detect2Chars attribute=\"Haddock Bold\" context=\"#pop#pop\" char=\"_\" char1=\"_\" />\n      <IncludeRules context=\"Haddock\"/>\n    </context>\n\n    <!-- C Preprocessor -->\n    <context attribute=\"C Preprocessor\" lineEndContext=\"#pop\" name=\"C Preprocessor\">\n      <keyword attribute=\"C Preprocessor Keyword\" context=\"#stay\" String=\"cpp_keywords\" />\n      <RegExpr                          context=\"#stay\" String=\".*>$\" />\n    </context>\n\n    <!-- C2Hs -->\n    <context attribute=\"C2HS Directive\" lineEndContext=\"#stay\" name=\"c2hs directive\">\n      <Detect2Chars attribute=\"C2HS Directive\" context=\"#pop\" char=\"#\" char1=\"}\" />\n      <keyword attribute=\"Keyword\" context=\"#stay\"          String=\"c2hs_keywords\" />\n      <RegExpr attribute=\"Keyword\" context=\"#stay\"          String=\"context\" />\n      <RegExpr attribute=\"Keyword\" context=\"#stay\"          String=\"call\" />\n      <RegExpr attribute=\"Keyword\" context=\"#stay\"          String=\"sizeof\" />\n      <RegExpr attribute=\"Keyword\" context=\"#stay\"          String=\"alignof\" />\n      <RegExpr attribute=\"Keyword\" context=\"c2hs fun\"       String=\"fun\" />\n      <RegExpr attribute=\"Keyword\" context=\"c2hs pointer\"   String=\"pointer\" />\n      <RegExpr attribute=\"Keyword\" context=\"c2hs enum\"      String=\"enum\" />\n      <RegExpr attribute=\"Keyword\" context=\"c2hs import\"    String=\"import\" />\n    </context>\n    <context attribute=\"C2HS Directive\" lineEndContext=\"#stay\" name=\"c2hs import\">\n      <RegExpr attribute=\"Type\"    context=\"#stay\" String=\"([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*\" />\n      <Detect2Chars attribute=\"C2HS Directive\" context=\"#pop#pop\" char=\"#\" char1=\"}\" />\n    </context>\n    <context attribute=\"C2HS Directive\" lineEndContext=\"#stay\" name=\"c2hs pointer\">\n      <keyword attribute=\"Keyword\" context=\"#stay\" String=\"c2hs_keywords\" />\n      <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"newtype\" />\n      <RegExpr attribute=\"Type\"    context=\"#stay\" String=\"([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*\" />\n      <Detect2Chars attribute=\"C2HS Directive\" context=\"#pop#pop\" char=\"#\" char1=\"}\" />\n    </context>\n    <context attribute=\"C2HS Directive\" lineEndContext=\"#stay\" name=\"c2hs fun\">\n      <keyword attribute=\"Keyword\" context=\"#stay\" String=\"c2hs_keywords\" />\n      <RegExpr attribute=\"Type\" context=\"#stay\" String=\"`[^']*'\" />\n      <Detect2Chars attribute=\"C2HS Directive\" context=\"#pop#pop\" char=\"#\" char1=\"}\" />\n    </context>\n    <context attribute=\"C2HS Directive\" lineEndContext=\"#stay\" name=\"c2hs enum\">\n      <RegExpr attribute=\"Type\"             context=\"#stay\" String=\"([A-Z][a-zA-Z0-9_']*\\.)*[A-Z][a-zA-Z0-9_']*\" />\n      <Detect2Chars attribute=\"C2HS Directive\" context=\"#pop#pop\" char=\"#\" char1=\"}\" />\n    </context>\n  </contexts>\n  <itemDatas>\n    <itemData name=\"Normal\"           defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n    <itemData name=\"Comment\"          defStyleNum=\"dsComment\" />\n    <itemData name=\"Pragma\"           defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n\n    <itemData name=\"Keyword\"          defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n    <itemData name=\"Type Prelude\"     defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    <itemData name=\"Function Prelude\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n    <itemData name=\"Data Prelude\"     defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    <itemData name=\"Class Prelude\"    defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n\n    <itemData name=\"Signature\"        defStyleNum=\"dsOthers\"  spellChecking=\"false\" />\n    <itemData name=\"Function\"         defStyleNum=\"dsNormal\"   spellChecking=\"false\" />\n    <itemData name=\"Operator\"         defStyleNum=\"dsOperator\" spellChecking=\"false\" />\n    <itemData name=\"Type\"             defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    <itemData name=\"Special\"          defStyleNum=\"dsOthers\"  spellChecking=\"false\" />\n\n    <itemData name=\"Octal\"            defStyleNum=\"dsBaseN\"    spellChecking=\"false\" />\n    <itemData name=\"Hex\"              defStyleNum=\"dsBaseN\"    spellChecking=\"false\" />\n    <itemData name=\"Decimal\"          defStyleNum=\"dsDecVal\"   spellChecking=\"false\" />\n    <itemData name=\"Float\"            defStyleNum=\"dsFloat\"    spellChecking=\"false\" />\n    <itemData name=\"Char\"             defStyleNum=\"dsChar\"     spellChecking=\"false\" />\n    <itemData name=\"String\"           defStyleNum=\"dsString\" />\n\n    <itemData name=\"Function Infix\"   defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n    <itemData name=\"EnumFromTo\"       defStyleNum=\"dsOthers\"   spellChecking=\"false\" />\n\n    <itemData name=\"C Preprocessor\"   defStyleNum=\"dsPreprocessor\"   spellChecking=\"false\" />\n    <itemData name=\"C Preprocessor Keyword\" defStyleNum=\"dsPreprocessor\"   spellChecking=\"false\" />\n\n    <itemData name=\"Haddock Hyperlink\" defStyleNum=\"dsComment\" spellChecking=\"false\" underline=\"true\" />\n    <itemData name=\"Haddock Module\" defStyleNum=\"dsComment\" spellChecking=\"false\" underline=\"true\" />\n    <itemData name=\"Haddock Emphasis\" defStyleNum=\"dsComment\" italic=\"true\"/>\n    <itemData name=\"Haddock Bold\" defStyleNum=\"dsComment\" bold=\"true\"/>\n\n    <itemData name=\"C2HS Directive\"   defStyleNum=\"dsString\"   spellChecking=\"false\" />\n  </itemDatas>\n  </highlighting>\n  <general>\n    <folding indentationsensitive=\"1\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n      <comment name=\"multiLine\" start=\"{-\" end=\"-}\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/haxe.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  ========================================================================\n\n  Haxe Language highlighting.\n\n  ========================================================================\n  \n  Author: Chad Joan\n  \n  ========================================================================\n-->\n\n<language name=\"Haxe\" section=\"Sources\" extensions=\"*.hx;*.Hx;*.hX;*.HX;\" mimetype=\"text/x-hxsrc\" version=\"2\" kateversion=\"2.4\" casesensitive=\"true\" author=\"Chad Joan\" license=\"MIT\">\n  <highlighting>\n    <list name=\"keywords\">\n    \n      <item>break</item>\n      \n      <item>case</item>\n      <item>cast</item>\n      <item>catch</item>\n      <item>class</item>\n      <item>continue</item>\n      \n      <item>default</item>\n\n      <item>else</item>\n      <item>enum</item>\n      <item>extends</item>\n      \n      <item>false</item>\n      <item>for</item>\n      <item>function</item>\n      \n      <item>if</item>\n      <item>implements</item>\n      <item>in</item>\n      <item>inline</item>\n      <item>interface</item>\n      \n      <item>new</item>\n      <item>null</item>\n      \n      <item>override</item>\n      \n      <item>private</item>\n      <item>public</item>\n      \n      <item>return</item>\n      \n      <item>static</item>\n      <item>super</item>\n      <item>switch</item>\n      \n      <item>this</item>\n      <item>throw</item>\n      <item>trace</item>\n      <item>true</item>\n      <item>try</item>\n      <item>typedef</item>\n      \n      <item>untyped</item>\n      \n      <item>var</item>\n      \n      <item>while</item>\n\n    </list>\n\n    <list name=\"modules\">\n      <item>package</item>\n      <item>import</item>\n    </list>\n\n    <list name=\"types\">\n      <item>Array</item>\n      <item>Void</item>\n      <item>Bool</item>\n      <item>Int</item>\n      <item>UInt</item>\n      <item>Float</item>\n      <item>Dynamic</item>\n      <item>String</item>\n      <item>List</item>\n      <item>Error</item>\n      <item>Unknown</item>\n      <item>Type</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"normal\">\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#if(\\s+\\w+)?\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#(else|elseif|end|error)\" />\n\n        <keyword attribute=\"Keyword\"        context=\"#stay\"      String=\"keywords\"/>\n        <keyword attribute=\"Module\"         context=\"ModuleName\" String=\"modules\"/>\n        <keyword attribute=\"Type\"           context=\"#stay\"      String=\"types\"/>\n      \n        <DetectIdentifier attribute=\"Normal Text\"/>\n\n        <HlCStringChar attribute=\"EscapeSequence\" context=\"#pop\"/>\n\n        <DetectChar attribute=\"RawString\" context=\"RawString\"   char=\"'\"/>\n        <DetectChar attribute=\"String\"    context=\"String\"      char=\"&quot;\"/>\n\n        <Detect2Chars attribute=\"Comment\" context=\"CommentLine\"   char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"CommentBlock\" char=\"/\" char1=\"*\" beginRegion=\"CommentBlock\"/>\n\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"BraceA\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"BraceA\" />\n\n        <!-- Match ... and .. before numbers are matched. -->\n        <StringDetect attribute=\"Normal Text\" context=\"#pop\" String=\"...\"/>\n        <Detect2Chars attribute=\"Normal Text\"   char=\".\" char1=\".\"/>\n\n        <!-- Float -->\n        <!-- Floats must be matched before Binary|Octal|Hex|Integer -->\n        <!-- All floats except integers -->\n        <RegExpr attribute=\"Float\" context=\"#pop\" String=\"[\\d][\\d]*(\\.(?!\\.)[\\d]*([eE][-+]?[\\d]+)?)\"/>\n        <RegExpr attribute=\"Float\" context=\"#pop\" String=\"\\.[\\d][\\d]*([eE][-+]?[\\d]+)?\"/>\n\n        <!-- Hex|Integer -->\n        <RegExpr attribute=\"Hex\"     context=\"#pop\" String=\"0[xX][\\da-fA-F]+\"/>\n        <RegExpr attribute=\"Integer\" context=\"#pop\" String=\"\\d+\"/>\n      </context>\n\n      <context attribute=\"Module Name\" lineEndContext=\"#stay\" name=\"ModuleName\">\n        <Detect2Chars attribute=\"Comment\"     context=\"CommentLine\"   char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\"     context=\"CommentBlock\" char=\"/\" char1=\"*\" beginRegion=\"CommentBlock\"/>\n        <RegExpr context=\"#pop\" String=\"[^\\s\\w.:,]\"/>\n      </context>\n\n      <!-- Strings -->\n      <!-- '...' -->\n      <context attribute=\"RawString\" lineEndContext=\"#stay\" name=\"RawString\">\n        <DetectChar attribute=\"RawString\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <!-- \"...\" -->\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        <HlCStringChar attribute=\"EscapeSequence\"/>\n        <RegExpr attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\\\(u[\\da-fA-F]{4}|U[\\da-fA-F]{8}|&amp;[a-zA-Z]\\w+;)\" />\n      </context>\n\n      <!-- Comments -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentLine\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"CommentBlock\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"CommentBlock\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"        defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Type\"           defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Integer\"        defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Hex\"            defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"          defStyleNum=\"dsFloat\"/>\n\n      <itemData name=\"Module\"         defStyleNum=\"dsKeyword\"  color=\"#0000ff\" selColor=\"#ffffff\"/>\n      <itemData name=\"Module Name\"    defStyleNum=\"dsNormal\"  color=\"#0000ff\" selColor=\"#ffffff\"/>\n\n      <itemData name=\"EscapeSequence\" defStyleNum=\"dsString\" color=\"#00aa88\" selColor=\"#ff0000\"/>\n      <itemData name=\"String\"         defStyleNum=\"dsString\"/>\n      <itemData name=\"RawString\"      defStyleNum=\"dsString\"/>\n\n      <itemData name=\"Comment\"        defStyleNum=\"dsComment\"/>\n      \n      <itemData name=\"Preprocessor\"   defStyleNum=\"dsOthers\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"true\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/html.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY name          \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY attributeName \"[A-Za-z_:*#\\(\\[][\\)\\]\\w.:_-]*\">\n\t<!ENTITY entref        \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n]>\n<language name=\"HTML\" version=\"8\" kateversion=\"5.53\" section=\"Markup\" extensions=\"*.htm;*.html;*.shtml;*.shtm\" mimetype=\"text/html\"  author=\"Wilbert Berendsen (wilbert@kde.nl)\" license=\"LGPL\" priority=\"10\">\n\n<highlighting>\n<contexts>\n  <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"FindHTML\" />\n  </context>\n\n  <context name=\"FindHTML\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectSpaces/>\n    <DetectIdentifier/>\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <StringDetect attribute=\"CDATA\" context=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n    <RegExpr attribute=\"Doctype\" context=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" insensitive=\"true\" beginRegion=\"doctype\"  />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n    <RegExpr attribute=\"Element\" context=\"CSS\" String=\"&lt;style\\b\" insensitive=\"true\" beginRegion=\"style\" />\n    <RegExpr attribute=\"Element\" context=\"JS\" String=\"&lt;script\\b\" insensitive=\"true\" beginRegion=\"script\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;pre\\b\" insensitive=\"true\" beginRegion=\"pre\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;div\\b\" insensitive=\"true\" beginRegion=\"div\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;table\\b\" insensitive=\"true\" beginRegion=\"table\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;ul\\b\" insensitive=\"true\" beginRegion=\"ul\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;ol\\b\" insensitive=\"true\" beginRegion=\"ol\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;dl\\b\" insensitive=\"true\" beginRegion=\"dl\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;article\\b\" insensitive=\"true\" beginRegion=\"article\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;aside\\b\" insensitive=\"true\" beginRegion=\"aside\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;details\\b\" insensitive=\"true\" beginRegion=\"details\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;figure\\b\" insensitive=\"true\" beginRegion=\"figure\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;footer\\b\" insensitive=\"true\" beginRegion=\"footer\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;header\\b\" insensitive=\"true\" beginRegion=\"header\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;main\\b\" insensitive=\"true\" beginRegion=\"main\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;nav\\b\" insensitive=\"true\" beginRegion=\"nav\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;section\\b\" insensitive=\"true\" beginRegion=\"section\" />\n    <RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;&name;\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/pre\\b\" insensitive=\"true\" endRegion=\"pre\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/div\\b\" insensitive=\"true\" endRegion=\"div\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/table\\b\" insensitive=\"true\" endRegion=\"table\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/ul\\b\" insensitive=\"true\" endRegion=\"ul\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/ol\\b\" insensitive=\"true\" endRegion=\"ol\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/dl\\b\" insensitive=\"true\" endRegion=\"dl\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/article\\b\" insensitive=\"true\" endRegion=\"article\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/aside\\b\" insensitive=\"true\" endRegion=\"aside\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/details\\b\" insensitive=\"true\" endRegion=\"details\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/figure\\b\" insensitive=\"true\" endRegion=\"figure\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/footer\\b\" insensitive=\"true\" endRegion=\"footer\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/header\\b\" insensitive=\"true\" endRegion=\"header\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/main\\b\" insensitive=\"true\" endRegion=\"main\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/nav\\b\" insensitive=\"true\" endRegion=\"nav\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/section\\b\" insensitive=\"true\" endRegion=\"section\" />\n    <RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/&name;\" />\n    <!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context=\"FindDTDRules\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <context name=\"FindEntityRefs\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;&lt;\" />\n  </context>\n\n  <context name=\"FindPEntityRefs\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <RegExpr attribute=\"PEntityRef\" context=\"#stay\" String=\"%&name;;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;%\" />\n  </context>\n\n  <context name=\"FindAttributes\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"&attributeName;\" column=\"0\"/>\n    <RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"\\s+&attributeName;\" />\n    <DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\" />\n  </context>\n\n  <context name=\"FindDTDRules\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Doctype\" context=\"Doctype Markupdecl\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n  </context>\n\n\n  <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <DetectSpaces/>\n    <IncludeRules context=\"##Alerts\" />\n    <DetectIdentifier/>\n    <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"-(-(?!-&gt;))+\" />\n  </context>\n\n  <context name=\"CDATA\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectSpaces/>\n    <DetectIdentifier/>\n    <StringDetect attribute=\"CDATA\" context=\"#pop\" String=\"]]&gt;\" endRegion=\"cdata\" />\n    <StringDetect attribute=\"EntityRef\" context=\"#stay\" String=\"]]&amp;gt;\" />\n  </context>\n\n  <context name=\"PI\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n  </context>\n\n  <context name=\"Doctype\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" endRegion=\"doctype\" />\n    <DetectChar attribute=\"Doctype\" context=\"Doctype Internal Subset\" char=\"[\" beginRegion=\"int_subset\" />\n  </context>\n\n  <context name=\"Doctype Internal Subset\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"]\" endRegion=\"int_subset\" />\n    <IncludeRules context=\"FindDTDRules\" />\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"El Open\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n    <DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n    <IncludeRules context=\"FindAttributes\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Close\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Close 2\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Close 3\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop#pop#pop#pop\" char=\"&gt;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"CSS\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"style\" />\n    <DetectChar attribute=\"Element\" context=\"CSS content\" char=\"&gt;\" />\n    <IncludeRules context=\"FindAttributes\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"CSS content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/style\\b\" insensitive=\"true\" endRegion=\"style\" />\n    <IncludeRules context=\"##CSS\" includeAttrib=\"true\"/>\n  </context>\n\n  <context name=\"JS\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Attribute\" context=\"Script-Type\" String=\"(\\s+|^)type(?=\\=|\\s|$)\" insensitive=\"true\"/>\n    <DetectChar attribute=\"Element\" context=\"JS content\" char=\"&gt;\" />\n    <IncludeRules context=\"DefaultJS\" />\n  </context>\n  <context name=\"DefaultJS\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"script\" />\n    <IncludeRules context=\"FindAttributes\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"JS content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Default JS content\"/>\n    <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n  </context>\n  <context name=\"Default JS content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n    <RegExpr attribute=\"Comment\" context=\"JS comment close\" String=\"//(?=.*&lt;/script\\b)\" insensitive=\"true\" />\n  </context>\n\n  <context name=\"JS comment close\" attribute=\"Comment\" lineEndContext=\"#pop\">\n    <RegExpr attribute=\"Element\" context=\"El Close 3\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n    <IncludeRules context=\"##Alerts\" />\n  </context>\n\n  <context name=\"Value\" attribute=\"Other Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"Value NQ\">\n    <DetectChar attribute=\"Value\" context=\"Value DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Value SQ\" char=\"&apos;\" />\n    <DetectSpaces />\n  </context>\n\n  <context name=\"Value NQ\" attribute=\"Other Text\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n    <IncludeRules context=\"FindEntityRefs\" />\n    <RegExpr attribute=\"Value\" context=\"#stay\" String=\"/(?!&gt;)\" />\n    <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[^/&gt;&lt;&quot;&apos;\\s]\" />\n  </context>\n\n  <context name=\"Value DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <context name=\"Value SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <!-- Read content from the \"type\" attribute to change the language to\n       highlight in the <script> tag. The default language is JavaScript. -->\n\n  <context name=\"Script-Type\" attribute=\"Other Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n    <DetectSpaces />\n    <DetectChar attribute=\"Attribute\" context=\"#pop!Script-Type Value\" char=\"=\" />\n  </context>\n  <context name=\"Script-Type Value\" attribute=\"Other Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Value\">\n    <DetectSpaces />\n    <!-- TypeScript -->\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!TypeScript\" String=\"&quot;text/typescript&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!TypeScript\" String=\"&apos;text/typescript&apos;\"/>\n    <!-- JSX (JavaScript React) -->\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!JSX\" String=\"&quot;text/jsx&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!JSX\" String=\"&apos;text/jsx&apos;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!JSX\" String=\"&quot;text/babel&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!JSX\" String=\"&apos;text/babel&apos;\"/>\n    <!-- MustacheJS / HandlebarsJS / RactiveJS -->\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&quot;x-tmpl-mustache&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&apos;x-tmpl-mustache&apos;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&quot;text/mustache&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&apos;text/mustache&apos;\"/>    \n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&quot;text/x-mustache-template&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&apos;text/x-mustache-template&apos;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&quot;text/x-handlebars-template&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&apos;text/x-handlebars-template&apos;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&quot;text/ractive&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!MustacheJS\" String=\"&apos;text/ractive&apos;\"/>\n    <!-- HTML templates -->\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!Script HTML template\" String=\"&quot;text/html&quot;\"/>\n    <StringDetect attribute=\"Value\" context=\"#pop#pop!Script HTML template\" String=\"&apos;text/html&apos;\"/>\n  </context>\n\n  <context name=\"JSX\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"JSX content\" char=\"&gt;\" />\n    <IncludeRules context=\"DefaultJS\" />\n  </context>\n  <context name=\"JSX content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Default JS content\"/>\n    <IncludeRules context=\"Normal##JavaScript React\" includeAttrib=\"true\"/>\n  </context>\n\n  <context name=\"TypeScript\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"TypeScript content\" char=\"&gt;\" />\n    <IncludeRules context=\"DefaultJS\" />\n  </context>\n  <context name=\"TypeScript content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Default JS content\"/>\n    <IncludeRules context=\"Normal##TypeScript\" includeAttrib=\"true\"/>\n  </context>\n\n  <context name=\"MustacheJS\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"MustacheJS content\" char=\"&gt;\" />\n    <IncludeRules context=\"DefaultJS\" />\n  </context>\n  <context name=\"MustacheJS content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n    <StringDetect attribute=\"Error\" context=\"#stay\" String=\"&lt;script&gt;\" insensitive=\"true\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"&lt;script\\b\" insensitive=\"true\" />\n    <IncludeRules context=\"Base##Mustache/Handlebars (HTML)\" includeAttrib=\"true\"/>\n  </context>\n\n  <context name=\"Script HTML template\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"Script HTML template content\" char=\"&gt;\" />\n    <IncludeRules context=\"DefaultJS\" />\n  </context>\n  <context name=\"Script HTML template content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n    <StringDetect attribute=\"Error\" context=\"#stay\" String=\"&lt;script&gt;\" insensitive=\"true\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"&lt;script\\b\" insensitive=\"true\" />\n    <IncludeRules context=\"FindHTML\" />\n  </context>\n\n</contexts>\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Other Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n  <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n  <itemData name=\"CDATA\" defStyleNum=\"dsBaseN\" bold=\"1\" spellChecking=\"false\" />\n  <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n  <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" spellChecking=\"false\" />\n  <itemData name=\"Element\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n  <itemData name=\"Attribute\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n  <itemData name=\"Value\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n  <itemData name=\"EntityRef\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n  <itemData name=\"PEntityRef\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n  <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\" />\n</itemDatas>\n\n</highlighting>\n<general>\n  <comments>\n    <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n  </comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/hunspell-aff.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" >\n<!--\nLicense: LGPL version 2.1, or version 3 or later versions approved by the membership of KDE e.V.; or any other license appoved by the memembership of KDE e.V.\n-->\n<language name=\"Hunspell Affix File\" section=\"Other\" extensions=\"*.aff\" priority=\"-9\" version=\"2\" kateversion=\"2.4\" author=\"Lukas Sommer\" license=\"LGPLv2.1+KDE e.V.\">\n\n<highlighting>\n\n<!-- This list is commented out. We use a simple fallback rule instead …\n<list name=\"list_keywordsWithNumbersOrFlags\">\n\n\t<!- - keywords without options: - - >\n\t<item>ONLYMAXDIFF</item>\n\t<item>NOSPLITSUGS</item>\n\t<item>SUGSWITHDOTS</item>\n\t<item>FORBIDWARN</item>\n\t<item>CHECKCOMPOUNDDUP</item>\n\t<item>CHECKCOMPOUNDREP</item>\n\t<item>CHECKCOMPOUNDCASE</item>\n\t<item>CHECKCOMPOUNDTRIPLE</item>\n\t<item>SIMPLIFIEDTRIPLE</item>\n\t<item>FULLSTRIP</item>\n\t<item>CHECKSHARPS</item>\n\t<item>COMPLEXPREFIXES</item>\n\t\n\t<!- - keywords with flags: - - >\n\t<item>COMPOUNDFLAG</item>\n\t<item>COMPOUNDBEGIN</item>\n\t<item>COMPOUNDLAST</item>\n\t<item>COMPOUNDMIDDLE</item>\n\t<item>ONLYINCOMPOUND</item>\n\t<item>COMPOUNDPERMITFLAG</item>\n\t<item>COMPOUNDFORBIDFLAG</item>\n\t<item>COMPOUNDROOT</item>\n\t<item>COMPOUNDROOT</item>\n\t<item>FORCEUCASE</item>\n\t<item>SYLLABLENUM</item>\n\t<item>CIRCUMFIX</item>\n\t<item>FORBIDDENWORD</item>\n\t<item>KEEPCASE</item>\n\t<item>LEMMA_PRESENT</item>\n\t<item>NEEDAFFIX</item>\n\t<!- - PSEUDOROOT is deprecated. (Former name of the NEEDAFFIX option.) - - >\n\t<item>SUBSTANDARD</item>\n\t<item>NOSUGGEST</item>\n\t<item>WARN</item>\n\t\n\t<!- - keywords with number: - - >\n\t<item>MAXCPDSUGS</item>\n\t<item>MAXNGRAMSUGS</item>\n\t<item>MAXDIFF</item>\n\t<item>COMPOUNDMIN</item>\n\t<item>COMPOUNDWORDMAX</item>\n\t\n\t<!- - keywords with number or flags: - - >\n\t<item>AF</item>\n\t\n</list>\n-->\n\n<list name=\"list_keywordsWithEnum\">\n\t<item>SET</item>\n\t<item>FLAG</item>\n\t<item>LANG</item>\n</list>\n\n<list name=\"list_keywordsWithCharacters\">\n\t<item>TRY</item>\n\t<item>WORDCHARS</item>\n\t<item>IGNORE</item>\n</list>\n\n<list name=\"list_keywordsWithNumbersOrStrings\">\n\t<item>BREAK</item>\n\t<item>COMPOUNDSYLLABLE</item>\n</list>\n\n<list name=\"list_keywordsForAffixes\">\n\t<item>SFX</item>\n\t<item>PFX</item>\n</list>\n\n<list name=\"list_keywordsWithPattern\">\n    <!-- TODO Maybe we could implement a special highlighting for each of these pattern types? -->\n\t<item>COMPOUNDRULE</item>\n\t<item>PHONE</item>\n\t<item>ICONV</item>\n\t<item>OCONV</item>\n\t<item>KEY</item>\n\t<item>MAP</item>\n</list>\n\n<contexts>\n\n\t<context name=\"aff\" attribute=\"Undefined\" lineEndContext=\"#stay\">\n\t\t<DetectSpaces />\n\t\t<keyword attribute=\"Keyword\" context=\"context_flag_stripping_affix_condition_morphologicalFields\" String=\"list_keywordsForAffixes\" column=\"0\" />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<StringDetect String=\"REP\" insensitive=\"true\" attribute=\"Keyword\" context=\"context_replace\" column=\"0\" /> \n\t\t<StringDetect String=\"CHECKCOMPOUNDPATTERN\" insensitive=\"true\" attribute=\"Keyword\" context=\"context_stringsWithFlags\" column=\"0\" />\n\t\t<keyword attribute=\"Keyword\" context=\"context_numbersOrString\" String=\"list_keywordsWithNumbersOrStrings\" column=\"0\" />\n\t\t<keyword attribute=\"Keyword\" context=\"context_characters\" String=\"list_keywordsWithCharacters\" column=\"0\" />\n\t\t<keyword attribute=\"Keyword\" context=\"context_pattern\" String=\"list_keywordsWithPattern\" column=\"0\" />\n\t\t<keyword attribute=\"Keyword\" context=\"context_enum\" String=\"list_keywordsWithEnum\" column=\"0\" />\n\t\t<!-- Fallback rule: -->\n\t\t<DetectIdentifier  attribute=\"Keyword\" context=\"context_numbersOrFlags\" column=\"0\" />\n\t</context>\n\t\n\t<context name=\"context_stringsWithFlags\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<DetectChar char=\"/\" attribute=\"Keyword\" context=\"context_stringsWithFlags_flagHelper\" />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t</context>\n\t\n\t<context name=\"context_stringsWithFlags_flagHelper\" attribute=\"Flags\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces context=\"context_stringsWithFlags\" />\n\t</context>\n\t\n\t<context name=\"context_characters\" attribute=\"Characters\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t</context>\n\t\n\t<context name=\"context_enum\" attribute=\"Choice\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t</context>\n\t\n\t<context name=\"context_replace\" attribute=\"Keyword\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<Int attribute=\"Number\" context=\"#stay\" />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<RegExpr context=\"context_numbersOrString\" attribute=\"Pattern\" String=\"\\S*\" />\n\t</context>\n\t\n\t<context name=\"context_pattern\" attribute=\"Pattern\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t</context>\n\t\n\t<context name=\"context_numbersOrFlags\" attribute=\"Flags\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<Int attribute=\"Number\" context=\"#stay\" />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t</context>\n\t\n\t<context name=\"context_numbersOrString\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<Int attribute=\"Number\" context=\"#stay\" />\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t</context>\n\t\n\t<context name=\"context_flag_stripping_affix_condition_morphologicalFields\" attribute=\"Keyword\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces/>\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<RegExpr context=\"context_stripping_affix_condition_morphologicalFields\" attribute=\"Flags\" String=\"\\S*\" />\n\t</context>\n\t\n\t<context name=\"context_stripping_affix_condition_morphologicalFields\" attribute=\"Flags\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces/>\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<DetectChar char=\"0\" attribute=\"Skipped parameter\" context=\"context_affix_condition_morphologicalFields\" />\n\t\t<RegExpr context=\"context_numbersOrString\" attribute=\"Choice\" String=\"(Y|N)\\s*(?![^\\d])\" />\n\t\t<RegExpr context=\"context_affix_condition_morphologicalFields\" attribute=\"Stripping\" String=\"\\S*\" />\n\t</context>\n\t\n\t<context name=\"context_affix_condition_morphologicalFields\" attribute=\"Stripping\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces/>\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<RegExpr context=\"context_slash_flags_condition_morphologicalFields\" attribute=\"Skipped parameter\" String=\"0(?=/)\" />\n\t\t<DetectChar char=\"0\" attribute=\"Skipped parameter\" context=\"context_condition_morphologicalFields\" />\n\t\t<RegExpr context=\"context_slash_flags_condition_morphologicalFields\" attribute=\"Affix\" String=\"[^\\s/]*(?=/)\" />\n\t\t<DetectChar char=\"/\" context=\"context_slash_flags_condition_morphologicalFields\" lookAhead=\"true\"  />\n\t\t<RegExpr context=\"context_condition_morphologicalFields\" attribute=\"Affix\" String=\"\\S*\" />\n\t</context>\n\t\n\t<context name=\"context_slash_flags_condition_morphologicalFields\" attribute=\"Stripping\" lineEndContext=\"#pop\">\n\t\t<DetectChar char=\"/\" attribute=\"Keyword\"  />\n\t\t<RegExpr attribute=\"Flags\" String=\"\\S*\" />\n\t\t<DetectSpaces context=\"context_condition_morphologicalFields\" />\n\t</context>\n\t\n\t<context name=\"context_condition_morphologicalFields\" attribute=\"Stripping\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces/>\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<RegExpr attribute=\"Skipped parameter\" String=\"\\.(?!\\S)\" context=\"context_morphologicalFields\" />\n\t\t<RegExpr context=\"context_notSkippedCondition_morphologicalFields\" lookAhead=\"true\" String=\"\\S\" />\n\t</context>\n\t\n\t<context name=\"context_notSkippedCondition_morphologicalFields\" attribute=\"Stripping\" lineEndContext=\"#pop\">\n\t\t<RegExpr attribute=\"Pattern\" String=\"\\S*\" />\n\t\t<DetectSpaces context=\"context_morphologicalFields\" />\n\t</context>\n\t\n\t<context name=\"context_morphologicalFields\" attribute=\"Keyword\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces/>\n\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<DetectChar char=\":\" attribute=\"Keyword\" context=\"context_morphologicalFieldsContent\" />\n\t</context>\n\t\n\t<context name=\"context_morphologicalFieldsContent\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces context=\"context_morphologicalFields\" />\n\t</context>\n\t\n\t<context name=\"context_comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<IncludeRules context=\"##Alerts\" />\n\t\t<DetectIdentifier />\n\t</context>\n\n</contexts>\n\n\n<itemDatas>\n\t<itemData name=\"Undefined\" defStyleNum=\"dsNormal\" />\n\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t<itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\t<itemData name=\"Number\" defStyleNum=\"dsDecVal\" />\n\t<itemData name=\"Stripping\" defStyleNum=\"dsString\" />\n\t<itemData name=\"Affix\" defStyleNum=\"dsString\" />\n\t<itemData name=\"String\" defStyleNum=\"dsString\" />\n\t<itemData name=\"Flags\" defStyleNum=\"dsChar\" />\n\t<itemData name=\"Skipped parameter\" defStyleNum=\"dsKeyword\" />\n\t<itemData name=\"Pattern\" defStyleNum=\"dsOthers\" />\n\t<itemData name=\"Characters\" defStyleNum=\"dsChar\" />\n\t<itemData name=\"Choice\" defStyleNum=\"dsDataType\" />\n</itemDatas>\n\n</highlighting>\n\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\" />\n\t</comments>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/hunspell-dat.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" >\n<language name=\"Hunspell Thesaurus File\" section=\"Other\" extensions=\"*.dat\" priority=\"-9\" version=\"1\" kateversion=\"2.4\" author=\"Lukas Sommer\" license=\"LGPL version 2.1, or version 3 or later versions approved by the membership of KDE e.V.; or any other license appoved by the emembership of KDE e.V.\">\n\n<highlighting>\n\n<contexts>\n\n\t<context name=\"context_dat\" fallthrough=\"true\" fallthroughContext=\"context_content\" attribute=\"Undefined\" lineEndContext=\"context_content\" >\n\t\t<RegExpr attribute=\"Encoding\" context=\"context_content\" String=\".*\" />\n\t</context>\n\t\n\t<context name=\"context_content\" attribute=\"Entry\" lineEndContext=\"#stay\">\n\t\t<DetectChar char=\"-\" attribute=\"Keyword\" column=\"0\" context=\"context_list\" />\n\t\t<DetectChar char=\"|\" attribute=\"Keyword\" context=\"context_number\" />\n\t</context>\n\t\n\t<context name=\"context_list\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t<DetectChar char=\"|\" attribute=\"Keyword\" context=\"#stay\" />\n\t\t<RangeDetect char=\"(\" char1=\")\" attribute=\"Hint\" />\n\t</context>\n\t\n\t<context name=\"context_number\" attribute=\"Number\" lineEndContext=\"#pop\">\n\t</context>\n\n</contexts>\n\n\n<itemDatas>\n\t<itemData name=\"Undefined\" defStyleNum=\"dsNormal\" />\n\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t<itemData name=\"Number\" defStyleNum=\"dsDecVal\" />\n\t<itemData name=\"String\" defStyleNum=\"dsString\" />\n\t<itemData name=\"Hint\" defStyleNum=\"dsOthers\" />\n\t<itemData name=\"Encoding\" defStyleNum=\"dsDataType\" />\n\t<itemData name=\"Entry\" defStyleNum=\"dsFunction\" />\n</itemDatas>\n\n</highlighting>\n\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\" />\n\t</comments>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/hunspell-dic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" >\n<language name=\"Hunspell Dictionary File\" section=\"Other\" extensions=\"*.dic\" priority=\"-9\" version=\"1\" kateversion=\"2.4\" author=\"Lukas Sommer\" license=\"LGPL version 2.1, or version 3 or later versions approved by the membership of KDE e.V.; or any other license appoved by the emembership of KDE e.V.\">\n\n<highlighting>\n\n<list name=\"list_hyphenKeywords\">\n\t<item>LEFTHYPHENMIN</item>\n\t<item>RIGHTHYPHENMIN</item>\n\t<item>COMPOUNDLEFTHYPHENMIN</item>\n\t<item>COMPOUNDRIGHTHYPHENMIN</item>\n\t<item>NEXTWORD</item>\n\t<item>NOHYPHEN</item>\n\t<item>NEXTLEVEL</item>\n</list>\n\n<contexts>\n\n\t<context name=\"context_dic\" attribute=\"Undefined\" lineEndContext=\"context_spell\" >\n\t\t<!-- detect in the first line wether this is a hyphen dictionary (continue with context_hyphen) or a spell check dictionary (continue with context_spell) -->\n\t\t<Int attribute=\"Number\" context=\"context_spell\" column=\"0\" />\n\t\t<RegExpr attribute=\"Encoding\" context=\"context_hyphen\" String=\".*\" />\n\t</context>\n\t\n\t<context name=\"context_hyphen\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t<AnyChar String=\"0123456789\" attribute=\"Number\" context=\"#stay\" />\n\t\t<DetectChar char=\".\" attribute=\"Keyword\" context=\"#stay\" />\n\t\t<DetectChar char=\"/\" attribute=\"Keyword\" context=\"context_hyphen_parameters\" />\n\t\t<AnyChar String=\"#%\" column=\"0\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"list_hyphenKeywords\" column=\"0\" />\n\t</context>\n\t\n\t<context name=\"context_hyphen_parameters\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t<AnyChar String=\",=\" attribute=\"Keyword\" context=\"#stay\" />\n\t\t<AnyChar String=\"0123456789\" attribute=\"Number\" context=\"#stay\" />\n\t</context>\n\t\n\t<context name=\"context_spell\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t<DetectChar char=\"#\" column=\"0\" attribute=\"Comment\" context=\"context_comment\" />\n\t\t<DetectChar char=\"/\" attribute=\"Keyword\" context=\"context_spell_flags\" />\n\t\t<DetectSpaces context=\"context_spell_options\" />\n\t</context>\n\t\n\t<context name=\"context_spell_flags\" attribute=\"Flags\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces context=\"context_spell_options\" />\n\t</context>\n\t\n\t<context name=\"context_spell_options\" attribute=\"Keyword\" lineEndContext=\"#pop\">\n\t\t<DetectChar char=\":\" attribute=\"Keyword\" context=\"context_spell_parameter\" />\n\t\t<DetectChar char=\"#\" column=\"0\" attribute=\"Comment\" context=\"context_comment\" />\n\t</context>\n\t\n\t<context name=\"context_spell_parameter\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces context=\"#pop\" />\n\t</context>\n\t\n\t<context name=\"context_comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t<DetectSpaces />\n\t\t<IncludeRules context=\"##Alerts\" />\n\t\t<DetectIdentifier />\n\t</context>\n\n</contexts>\n\n\n<itemDatas>\n\t<itemData name=\"Undefined\" defStyleNum=\"dsNormal\" />\n\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t<itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\t<itemData name=\"Number\" defStyleNum=\"dsDecVal\" />\n\t<itemData name=\"String\" defStyleNum=\"dsString\" />\n\t<itemData name=\"Flags\" defStyleNum=\"dsChar\" />\n\t<itemData name=\"Encoding\" defStyleNum=\"dsDataType\" />\n</itemDatas>\n\n</highlighting>\n\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\" />\n\t</comments>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/hunspell-idx.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" >\n<language name=\"Hunspell Thesaurus Index File\" section=\"Other\" extensions=\"*.idx\" priority=\"-9\" version=\"1\" kateversion=\"2.3\" author=\"Lukas Sommer\" license=\"LGPL version 2.1, or version 3 or later versions approved by the membership of KDE e.V.; or any other license appoved by the emembership of KDE e.V.\">\n\n<highlighting>\n\n<contexts>\n\n\t<context name=\"context_dat\" fallthrough=\"true\" fallthroughContext=\"context_content\" attribute=\"Undefined\" lineEndContext=\"context_content\" >\n\t\t<RegExpr attribute=\"Encoding\" context=\"context_content\" String=\".*\" />\n\t</context>\n\t\n\t<context name=\"context_content\" attribute=\"Entry\" lineEndContext=\"#stay\">\n\t\t<DetectChar char=\"|\" attribute=\"Keyword\" context=\"context_number\" />\n\t</context>\n\t\n\t<context name=\"context_number\" attribute=\"Number\" lineEndContext=\"#pop\">\n\t</context>\n\n</contexts>\n\n\n<itemDatas>\n\t<itemData name=\"Undefined\" defStyleNum=\"dsNormal\" />\n\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t<itemData name=\"Number\" defStyleNum=\"dsDecVal\" />\n\t<itemData name=\"Encoding\" defStyleNum=\"dsDataType\" />\n\t<itemData name=\"Entry\" defStyleNum=\"dsFunction\" />\n</itemDatas>\n\n</highlighting>\n\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\" />\n\t</comments>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/idconsole.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Quake Script\" version=\"4\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.cfg\" mimetype=\"\">\n\n<highlighting>\n<list name=\"Commands\">\n<item>ForceCloseComman</item>\n<item>_config_com_baud</item>\n<item>_config_com_modem</item>\n<item>_vid_default_mode</item>\n<item>_vid_default_mode_win</item>\n<item>_vid_wait_override</item>\n<item>_windowed_mouse</item>\n<item>addip</item>\n<item>addressbook</item>\n<item>adjust_crosshair</item>\n<item>advancedupdate</item>\n<item>allow_download</item>\n<item>allow_download_maps</item>\n<item>allow_download_models</item>\n<item>allow_download_skins</item>\n<item>allow_download_sounds</item>\n<item>allskins</item>\n<item>appenddemo</item>\n<item>autosave</item>\n<item>ban</item>\n<item>banClient</item>\n<item>banUser</item>\n<item>banid</item>\n<item>baseskin</item>\n<item>begin</item>\n<item>bf</item>\n<item>bgetmod</item>\n<item>bindlist</item>\n<item>block_switch</item>\n<item>bottomcolor</item>\n<item>buyNow</item>\n<item>buyequip</item>\n<item>cache_endgather</item>\n<item>cache_flush</item>\n<item>cache_mapchange</item>\n<item>cache_print</item>\n<item>cache_profile</item>\n<item>cache_setindex</item>\n<item>cache_startgather</item>\n<item>cache_usedfile</item>\n<item>cancelselect</item>\n<item>cd</item>\n<item>centerview</item>\n<item>changeVectors</item>\n<item>changelevel</item>\n<item>changelevel2</item>\n<item>changing</item>\n<item>chase_active</item>\n<item>cinematic</item>\n<item>cl_deadbodyfilter</item>\n<item>cl_gibfilter</item>\n<item>cl_hightrack</item>\n<item>cl_hudswap</item>\n<item>cl_messages</item>\n<item>cl_nodelta</item>\n<item>cl_nolerp</item>\n<item>cl_nopred</item>\n<item>cl_predict_players</item>\n<item>cl_rate</item>\n<item>cl_sbar</item>\n<item>cl_sbar_separator</item>\n<item>cl_shownet</item>\n<item>cl_sidespeed</item>\n<item>cl_solid_players</item>\n<item>cl_warncmd</item>\n<item>cl_writecfg</item>\n<item>clear</item>\n<item>clearplayers</item>\n<item>clientinfo</item>\n<item>clientkick</item>\n<item>cmd</item>\n<item>cmdline</item>\n<item>cmdlist</item>\n<item>color</item>\n<item>commands</item>\n<item>condebug</item>\n<item>condump</item>\n<item>configstrings</item>\n<item>confirm_quit</item>\n<item>connect</item>\n<item>contimes</item>\n<item>coop</item>\n<item>crash</item>\n<item>credits</item>\n<item>cropimages</item>\n<item>crosshair</item>\n<item>cvar_restart</item>\n<item>cvarlist</item>\n<item>d_mipcap</item>\n<item>d_subdiv16</item>\n<item>deathmatch</item>\n<item>delta_clear</item>\n<item>delta_stats</item>\n<item>demo</item>\n<item>demolist</item>\n<item>demomap</item>\n<item>demos</item>\n<item>developer</item>\n<item>devmap</item>\n<item>dir</item>\n<item>disconnect</item>\n<item>dlfile</item>\n<item>dmoptions</item>\n<item>download</item>\n<item>drawradar</item>\n<item>drop</item>\n<item>dropclient</item>\n<item>dumpuser</item>\n<item>edict</item>\n<item>edictcount</item>\n<item>edicts</item>\n<item>endmovie</item>\n<item>entities</item>\n<item>envmap</item>\n<item>error</item>\n<item>escape</item>\n<item>exec</item>\n<item>exit</item>\n<item>fastsprites</item>\n<item>fdir</item>\n<item>filterban</item>\n<item>firstperson</item>\n<item>floodprot</item>\n<item>floodprotmsg</item>\n<item>flush</item>\n<item>fly</item>\n<item>force_centerview</item>\n<item>fov</item>\n<item>fraglogfile</item>\n<item>freelook</item>\n<item>freeze</item>\n<item>front</item>\n<item>fs_openedList</item>\n<item>fs_referencedList</item>\n<item>fullinfo</item>\n<item>fullserverinfo</item>\n<item>game</item>\n<item>gameCompleteStatus</item>\n<item>gamedir</item>\n<item>gamemap</item>\n<item>gameversion</item>\n<item>getcertificate</item>\n<item>gfxinfo</item>\n<item>gg</item>\n<item>gib</item>\n<item>gibload</item>\n<item>gibstats</item>\n<item>give</item>\n<item>gl_affinemodels</item>\n<item>gl_clear</item>\n<item>gl_colorlights</item>\n<item>gl_constretch</item>\n<item>gl_cull</item>\n<item>gl_dlight_lightmap</item>\n<item>gl_dlight_polyblend</item>\n<item>gl_dlight_smooth</item>\n<item>gl_fb_bmodels</item>\n<item>gl_fb_models</item>\n<item>gl_finish</item>\n<item>gl_fires</item>\n<item>gl_flashblend</item>\n<item>gl_keeptjunctions</item>\n<item>gl_lerp_anim</item>\n<item>gl_lightmode</item>\n<item>gl_max_size</item>\n<item>gl_multitexture</item>\n<item>gl_nobind</item>\n<item>gl_nocolors</item>\n<item>gl_picmip</item>\n<item>gl_playermip</item>\n<item>gl_polyblend</item>\n<item>gl_reportjunctions</item>\n<item>gl_sky_clip</item>\n<item>gl_skymultipass</item>\n<item>gl_smoothmodels</item>\n<item>gl_texsort</item>\n<item>gl_texturemode</item>\n<item>gl_triplebuffer</item>\n<item>gl_ztrick</item>\n<item>globalservers</item>\n<item>god</item>\n<item>gun</item>\n<item>gun_model</item>\n<item>gun_next</item>\n<item>gun_prev</item>\n<item>gunsmoke</item>\n<item>heartbeat</item>\n<item>help</item>\n<item>hideconsole</item>\n<item>hideradar</item>\n<item>host_speeds</item>\n<item>hostname</item>\n<item>hpkextract</item>\n<item>hpklist</item>\n<item>hpkremove</item>\n<item>hpkval</item>\n<item>hud_centerid</item>\n<item>imagelist</item>\n<item>impulse</item>\n<item>imt</item>\n<item>in_bind</item>\n<item>in_paste_buffer</item>\n<item>in_restart</item>\n<item>in_unbind</item>\n<item>info</item>\n<item>interp</item>\n<item>invdrop</item>\n<item>inven</item>\n<item>invnext</item>\n<item>invnextp</item>\n<item>invnextw</item>\n<item>invprev</item>\n<item>invprevp</item>\n<item>invprevw</item>\n<item>invuse</item>\n<item>joinserver</item>\n<item>joy</item>\n<item>joy_advancedupdate</item>\n<item>joy_enable</item>\n<item>joyadvanced</item>\n<item>joyadvancedupdat</item>\n<item>joyadvancedupdate</item>\n<item>joyname</item>\n<item>joystick</item>\n<item>keys</item>\n<item>kick</item>\n<item>kill</item>\n<item>killserver</item>\n<item>lefthand</item>\n<item>link</item>\n<item>list</item>\n<item>listdemo</item>\n<item>listen</item>\n<item>listid</item>\n<item>listip</item>\n<item>listmaps</item>\n<item>load</item>\n<item>loadas8bit</item>\n<item>loadgame</item>\n<item>loading</item>\n<item>loadsky</item>\n<item>loadtranslations</item>\n<item>loc</item>\n<item>localinfo</item>\n<item>localservers</item>\n<item>log</item>\n<item>logaddress</item>\n<item>logfile</item>\n<item>lookspring</item>\n<item>lookstrafe</item>\n<item>m_filter</item>\n<item>main</item>\n<item>map</item>\n<item>map_restart</item>\n<item>maplist</item>\n<item>maps</item>\n<item>maxplayers</item>\n<item>max_smokepuffs</item>\n<item>max_shells</item>\n<item>mcache</item>\n<item>meminfo</item>\n<item>menu</item>\n<item>menu_addressbook</item>\n<item>menu_credits</item>\n<item>menu_help</item>\n<item>menu_keys</item>\n<item>menu_load</item>\n<item>menu_loadgame</item>\n<item>menu_main</item>\n<item>menu_multiplayer</item>\n<item>menu_options</item>\n<item>menu_playerconfig</item>\n<item>menu_quit</item>\n<item>menu_save</item>\n<item>menu_savegame</item>\n<item>menu_setup</item>\n<item>menu_select</item>\n<item>menu_singleplayer</item>\n<item>menu_startserver</item>\n<item>menu_video</item>\n<item>menu_dmoptions</item>\n<item>menu_game</item>\n<item>menu_joinserver</item>\n<item>messagemode</item>\n<item>messagemode2</item>\n<item>messagemode3</item>\n<item>messagemode4</item>\n<item>model</item>\n<item>modelist</item>\n<item>modellist</item>\n<item>msg</item>\n<item>multiplayer</item>\n<item>music</item>\n<item>name</item>\n<item>net_stats</item>\n<item>new</item>\n<item>next</item>\n<item>nextul</item>\n<item>nightvision</item>\n<item>no_pogo_stick</item>\n<item>noaim</item>\n<item>noclip</item>\n<item>noexit</item>\n<item>nomonsters</item>\n<item>noskins</item>\n<item>nosound</item>\n<item>notarget</item>\n<item>options</item>\n<item>packet</item>\n<item>password</item>\n<item>path</item>\n<item>pausable</item>\n<item>pause</item>\n<item>paused</item>\n<item>ping</item>\n<item>pingservers</item>\n<item>play</item>\n<item>playdemo</item>\n<item>playerconfig</item>\n<item>players</item>\n<item>playvol</item>\n<item>pushlatency</item>\n<item>pointfile</item>\n<item>ppdemostart</item>\n<item>pr_boundscheck</item>\n<item>precache</item>\n<item>prespawn</item>\n<item>prev</item>\n<item>profile</item>\n<item>profilequit</item>\n<item>prog</item>\n<item>quit</item>\n<item>r_drawentities</item>\n<item>r_drawflat</item>\n<item>r_draworder</item>\n<item>r_drawviewmodel</item>\n<item>r_dspeeds</item>\n<item>r_dynamic</item>\n<item>r_fullbright</item>\n<item>r_lightmap</item>\n<item>r_netgraph</item>\n<item>r_netgraph_box</item>\n<item>r_norefresh</item>\n<item>r_novis</item>\n<item>r_numedges</item>\n<item>r_numsurfs</item>\n<item>r_particles</item>\n<item>r_polymodelstats</item>\n<item>r_reportsurfout</item>\n<item>r_shadows</item>\n<item>r_speeds</item>\n<item>r_timegraph</item>\n<item>r_wateralpha</item>\n<item>r_waterripple</item>\n<item>r_waterwarp</item>\n<item>r_zgraph</item>\n<item>rcon</item>\n<item>rcon_password</item>\n<item>reconnect</item>\n<item>record</item>\n<item>registered</item>\n<item>reload</item>\n<item>removedemo</item>\n<item>removeid</item>\n<item>removeip</item>\n<item>rerecord</item>\n<item>reset</item>\n<item>resetrcon</item>\n<item>restart</item>\n<item>retry</item>\n<item>s_disable_a3d</item>\n<item>s_enable_a3d</item>\n<item>s_info</item>\n<item>s_list</item>\n<item>s_stop</item>\n<item>samelevel</item>\n<item>save</item>\n<item>savegame</item>\n<item>savetranslations</item>\n<item>score</item>\n<item>screenshot</item>\n<item>screenshotJPEG</item>\n<item>sectorlist</item>\n<item>sendents</item>\n<item>serverinfo</item>\n<item>serverprofile</item>\n<item>serverrecord</item>\n<item>serverstatus</item>\n<item>serverstop</item>\n<item>setRecommended</item>\n<item>setdemoinfo</item>\n<item>setenv</item>\n<item>setinfo</item>\n<item>setmaster</item>\n<item>setrom</item>\n<item>shaderlist</item>\n<item>show_fps</item>\n<item>show_time</item>\n<item>showdrop</item>\n<item>showinfo</item>\n<item>showip</item>\n<item>showpackets</item>\n<item>showpause</item>\n<item>showram</item>\n<item>showturtle</item>\n<item>shutdownserver</item>\n<item>singlePlayLink</item>\n<item>sizedown</item>\n<item>sizeup</item>\n<item>skill</item>\n<item>skin</item>\n<item>skinlist</item>\n<item>skins</item>\n<item>sky</item>\n<item>skyboxlist</item>\n<item>slist</item>\n<item>slot1</item>\n<item>slot10</item>\n<item>slot2</item>\n<item>slot3</item>\n<item>slot4</item>\n<item>slot5</item>\n<item>slot6</item>\n<item>slot7</item>\n<item>slot8</item>\n<item>slot9</item>\n<item>snap</item>\n<item>snapall</item>\n<item>snapshot</item>\n<item>snapto</item>\n<item>snd</item>\n<item>snd_noextraupdate</item>\n<item>snd_restart</item>\n<item>snd_show</item>\n<item>soundfade</item>\n<item>soundinfo</item>\n<item>soundlist</item>\n<item>spawn</item>\n<item>spdevmap</item>\n<item>speak</item>\n<item>special</item>\n<item>specmode</item>\n<item>spectator</item>\n<item>spectator_password</item>\n<item>spk</item>\n<item>spmap</item>\n<item>startLimboMode</item>\n<item>startSingleplayer</item>\n<item>startdemos</item>\n<item>startmovie</item>\n<item>startserver</item>\n<item>stat</item>\n<item>stats</item>\n<item>status</item>\n<item>stop</item>\n<item>stopLimboMode</item>\n<item>stopdemo</item>\n<item>stoprecord</item>\n<item>stopsound</item>\n<item>stopul</item>\n<item>streamingsound</item>\n<item>stuffcmd</item>\n<item>stuffcmds</item>\n<item>sv</item>\n<item>sv_allow_log</item>\n<item>sv_allow_pings</item>\n<item>sv_allow_status</item>\n<item>sv_gamedir</item>\n<item>sv_highchars</item>\n<item>sv_mapcheck</item>\n<item>sv_nostep</item>\n<item>sv_spectatormaxspeed</item>\n<item>sv_spetalk</item>\n<item>sv_maplist</item>\n<item>swapdemo</item>\n<item>sys_cpuid</item>\n<item>sys_dead_sleep</item>\n<item>sys_extrasleep</item>\n<item>sys_nostdout</item>\n<item>systeminfo</item>\n<item>taginfo</item>\n<item>team</item>\n<item>teamplay</item>\n<item>tell</item>\n<item>test</item>\n<item>test2</item>\n<item>time</item>\n<item>thirdperson</item>\n<item>timedemo</item>\n<item>timeleft</item>\n<item>timerefresh</item>\n<item>toggle</item>\n<item>togglebrowser</item>\n<item>togglechat</item>\n<item>toggleconsole</item>\n<item>togglemenu</item>\n<item>topcolor</item>\n<item>touchFile</item>\n<item>trackplayer</item>\n<item>ui_restart</item>\n<item>unalias</item>\n<item>unbindall</item>\n<item>updatehunkusage</item>\n<item>updatescreen</item>\n<item>upload</item>\n<item>use</item>\n<item>user</item>\n<item>userinfo</item>\n<item>users</item>\n<item>v_centerspeed</item>\n<item>v_cshift</item>\n<item>v_idlescale</item>\n<item>version</item>\n<item>vid</item>\n<item>vid_center</item>\n<item>vid_config_x</item>\n<item>vid_describecurrentmode</item>\n<item>vid_describemode</item>\n<item>vid_describemodes</item>\n<item>vid_forcemode</item>\n<item>vid_fullscreen</item>\n<item>vid_fullscreen_mode</item>\n<item>vid_minimize</item>\n<item>vid_nopageflip</item>\n<item>vid_nummodes</item>\n<item>vid_restart</item>\n<item>vid_stretch_by_2</item>\n<item>vid_testmode</item>\n<item>vid_windowed</item>\n<item>vid_windowed_mode</item>\n<item>vid_front</item>\n<item>video</item>\n<item>viewframe</item>\n<item>viewmodel</item>\n<item>viewnext</item>\n<item>viewpos</item>\n<item>viewprev</item>\n<item>vminfo</item>\n<item>vmprofile</item>\n<item>voice_showbanned</item>\n<item>votemap</item>\n<item>vstr</item>\n<item>wait</item>\n<item>watervis</item>\n<item>wave</item>\n<item>weapon</item>\n<item>weapon_knife</item>\n<item>weaplast</item>\n<item>weapnext</item>\n<item>weapprev</item>\n<item>windowsr_drawentities</item>\n<item>writecfg</item>\n<item>writeconfig</item>\n<item>writeid</item>\n<item>writeip</item>\n<item>z_stats</item>\n</list>\n\n\n<list name=\"Variables\">\n<item>ah</item>\n<item>ActiveAction</item>\n<item>_cl_color</item>\n<item>_cl_name</item>\n<item>_config_com_baud</item>\n<item>_config_com_irq</item>\n<item>_config_com_modem</item>\n<item>_config_com_port</item>\n<item>_config_modem_clear</item>\n<item>_config_modem_dialtype</item>\n<item>_config_modem_hangup</item>\n<item>_config_modem_init</item>\n<item>_snd_mixahead</item>\n<item>_vid_default_mode</item>\n<item>_vid_default_mode_win</item>\n<item>_vid_wait_override</item>\n<item>_windowed_mouse</item>\n<item>address</item>\n<item>adr</item>\n<item>adr0</item>\n<item>adr1</item>\n<item>adr2</item>\n<item>adr3</item>\n<item>adr4</item>\n<item>adr5</item>\n<item>adr6</item>\n<item>adr7</item>\n<item>adr8</item>\n<item>advanced</item>\n<item>advaxisr</item>\n<item>advaxisu</item>\n<item>advaxisv</item>\n<item>advaxisx</item>\n<item>advaxisy</item>\n<item>advaxisz</item>\n<item>airaccelerate</item>\n<item>allow</item>\n<item>allow_download_players</item>\n<item>ambient_fade</item>\n<item>ambient_level</item>\n<item>anglespeedkey</item>\n<item>arch</item>\n<item>array</item>\n<item>arrays</item>\n<item>att</item>\n<item>auto</item>\n<item>autoskins</item>\n<item>b</item>\n<item>bgmbuffer</item>\n<item>bgmvolume</item>\n<item>bit</item>\n<item>bitdepth</item>\n<item>blend</item>\n<item>bob</item>\n<item>bob_pitch</item>\n<item>bob_roll</item>\n<item>bob_up</item>\n<item>bot_aasoptimize</item>\n<item>bot_challenge</item>\n<item>bot_debug</item>\n<item>bot_developer</item>\n<item>bot_enable</item>\n<item>bot_fastchat</item>\n<item>bot_forceclustering</item>\n<item>bot_forcereachability</item>\n<item>bot_forcewrite</item>\n<item>bot_grapple</item>\n<item>bot_groundonly</item>\n<item>bot_interbreedbots</item>\n<item>bot_interbreedchar</item>\n<item>bot_interbreedcycle</item>\n<item>bot_interbreedwrite</item>\n<item>bot_maxdebugpolys</item>\n<item>bot_miniplayers</item>\n<item>bot_minplayers</item>\n<item>bot_nochat</item>\n<item>bot_pause</item>\n<item>bot_reachability</item>\n<item>bot_reloadcharacters</item>\n<item>bot_report</item>\n<item>bot_rocketjump</item>\n<item>bot_saveroutingcache</item>\n<item>bot_testclusters</item>\n<item>bot_testichat</item>\n<item>bot_testrchat</item>\n<item>bot_testsolid</item>\n<item>bot_thinktime</item>\n<item>bot_visualizejumppads</item>\n<item>brighten</item>\n<item>brightness</item>\n<item>broken</item>\n<item>cd</item>\n<item>cd_loopcount</item>\n<item>cd_looptrack</item>\n<item>cd_nocd</item>\n<item>cd_plugin</item>\n<item>centermove</item>\n<item>centerspeed</item>\n<item>centertime</item>\n<item>cg_autoactivate</item>\n<item>cg_autoswitch</item>\n<item>cg_blinktime</item>\n<item>cg_bloodTime</item>\n<item>cg_bobpitch</item>\n<item>cg_bobroll</item>\n<item>cg_bobup</item>\n<item>cg_brassTime</item>\n<item>cg_cameraOrbitDelay</item>\n<item>cg_clipboardName</item>\n<item>cg_coronafardist</item>\n<item>cg_coronas</item>\n<item>cg_crosshairAlpha</item>\n<item>cg_crosshairHealth</item>\n<item>cg_crosshairSize</item>\n<item>cg_crosshairX</item>\n<item>cg_crosshairY</item>\n<item>cg_currentSelectedPlayer</item>\n<item>cg_currentSelectedPlayerName</item>\n<item>cg_cursorHints</item>\n<item>cg_cycleAllWeaps</item>\n<item>cg_deferPlayers</item>\n<item>cg_descriptiveText</item>\n<item>cg_draw2D</item>\n<item>cg_draw3dIcons</item>\n<item>cg_drawAllWeaps</item>\n<item>cg_drawAmmoWarning</item>\n<item>cg_drawAttacker</item>\n<item>cg_drawCompass</item>\n<item>cg_drawCrosshair</item>\n<item>cg_drawCrosshairNames</item>\n<item>cg_drawCrosshairPickups</item>\n<item>cg_drawFPGun</item>\n<item>cg_drawFPS</item>\n<item>cg_drawFrags</item>\n<item>cg_drawGun</item>\n<item>cg_drawIcons</item>\n<item>cg_drawNotifyText</item>\n<item>cg_drawRewards</item>\n<item>cg_drawSnapshot</item>\n<item>cg_drawSpreadScale</item>\n<item>cg_drawStatus</item>\n<item>cg_drawTeamOverlay</item>\n<item>cg_drawTimer</item>\n<item>cg_emptyswitch</item>\n<item>cg_fov</item>\n<item>cg_forcemodel</item>\n<item>cg_gibs</item>\n<item>cg_hudAlpha</item>\n<item>cg_hudFiles</item>\n<item>cg_lagometer</item>\n<item>cg_marks</item>\n<item>cg_marktime</item>\n<item>cg_noplayeranims</item>\n<item>cg_nopredict</item>\n<item>cg_noTaunt</item>\n<item>cg_noVoiceChats</item>\n<item>cg_noVoiceText</item>\n<item>cg_particleDist</item>\n<item>cg_particleLOD</item>\n<item>cg_popupLimboMenu</item>\n<item>cg_predictItems</item>\n<item>cg_quickMessageAlt</item>\n<item>cg_railTrailTime</item>\n<item>cg_recoilPitch</item>\n<item>cg_reticleBrightness</item>\n<item>cg_reticleType</item>\n<item>cg_runpitch</item>\n<item>cg_runroll</item>\n<item>cg_scorePlums</item>\n<item>cg_selectedPlayer</item>\n<item>cg_selectedPlayerName</item>\n<item>cg_shadows</item>\n<item>cg_showblood</item>\n<item>cg_simpleItems</item>\n<item>cg_skybox</item>\n<item>cg_stereoSeparation</item>\n<item>cg_teamChatHeight</item>\n<item>cg_teamChatTime</item>\n<item>cg_teamChatsOnly</item>\n<item>cg_thirdperson</item>\n<item>cg_thirdpersonrange</item>\n<item>cg_thirdPersonAngle</item>\n<item>cg_useWeapsForZoom</item>\n<item>cg_uselessNostalgia</item>\n<item>cg_viewsize</item>\n<item>cg_voiceSpriteTime</item>\n<item>cg_weaponCycleDelay</item>\n<item>cg_wolfparticles</item>\n<item>cg_zoomDefaultBinoc</item>\n<item>cg_zoomDefaultFG</item>\n<item>cg_zoomDefaultSniper</item>\n<item>cg_zoomDefaultSnooper</item>\n<item>cg_zoomStepBinoc</item>\n<item>cg_zoomStepFG</item>\n<item>cg_zoomStepSnooper</item>\n<item>cg_zoomfov</item>\n<item>cg_zoomstepsniper</item>\n<item>chase_active</item>\n<item>chase_back</item>\n<item>chase_right</item>\n<item>chase_up</item>\n<item>cheats</item>\n<item>cl</item>\n<item>cl_allowDownload</item>\n<item>cl_anglespeedkey</item>\n<item>cl_anonymous</item>\n<item>cl_autoexec</item>\n<item>cl_autoskins</item>\n<item>cl_avidemo</item>\n<item>cl_backspeed</item>\n<item>cl_blend</item>\n<item>cl_bob</item>\n<item>cl_bobcycle</item>\n<item>cl_bobup</item>\n<item>cl_bypassMouseInput</item>\n<item>cl_cacheGathering</item>\n<item>cl_camera_maxpitch</item>\n<item>cl_camera_maxyaw</item>\n<item>cl_chasecam</item>\n<item>cl_chatmode</item>\n<item>cl_conXOffset</item>\n<item>cl_crossx</item>\n<item>cl_crossy</item>\n<item>cl_cshift_bonus</item>\n<item>cl_cshift_content</item>\n<item>cl_cshift_damage</item>\n<item>cl_cshift_powerup</item>\n<item>cl_debugMove</item>\n<item>cl_debugTranslation</item>\n<item>cl_demospeed</item>\n<item>cl_entities</item>\n<item>cl_footsteps</item>\n<item>cl_forceavidemo</item>\n<item>cl_forwardspeed</item>\n<item>cl_freelook</item>\n<item>cl_freezeDemo</item>\n<item>cl_gun</item>\n<item>cl_hidefrags</item>\n<item>cl_hightrack</item>\n<item>cl_hudswap</item>\n<item>cl_language</item>\n<item>cl_lights</item>\n<item>cl_maxPing</item>\n<item>cl_maxfps</item>\n<item>cl_maxpackets</item>\n<item>cl_motd</item>\n<item>cl_motdString</item>\n<item>cl_mouseAccel</item>\n<item>cl_movespeedkey</item>\n<item>cl_nodelta</item>\n<item>cl_nofake</item>\n<item>cl_nolerp</item>\n<item>cl_nopred</item>\n<item>cl_noprint</item>\n<item>cl_noskins</item>\n<item>cl_packetdup</item>\n<item>cl_parsesay</item>\n<item>cl_particles</item>\n<item>cl_paused</item>\n<item>cl_pitchspeed</item>\n<item>cl_predict</item>\n<item>cl_predict_players</item>\n<item>cl_predict_players2</item>\n<item>cl_observercrosshair</item>\n<item>cl_quakerc</item>\n<item>cl_rollangle</item>\n<item>cl_rollspeed</item>\n<item>cl_run</item>\n<item>cl_running</item>\n<item>cl_serverStatusResendTime</item>\n<item>cl_showfps</item>\n<item>cl_showSend</item>\n<item>cl_showServerCommands</item>\n<item>cl_showTimeDelta</item>\n<item>cl_showmiss</item>\n<item>cl_showmouserate</item>\n<item>cl_shownet</item>\n<item>cl_shownuments</item>\n<item>cl_sidespeed</item>\n<item>cl_stats</item>\n<item>cl_stereo</item>\n<item>cl_stereo_separation</item>\n<item>cl_testblend</item>\n<item>cl_testentities</item>\n<item>cl_testlights</item>\n<item>cl_testparticles</item>\n<item>cl_timeNudge</item>\n<item>cl_timeout</item>\n<item>cl_upspeed</item>\n<item>cl_verstring</item>\n<item>cl_visibleClients</item>\n<item>cl_vwep</item>\n<item>cl_waitForFire</item>\n<item>cl_wavefilerecord</item>\n<item>cl_yawspeed</item>\n<item>clear</item>\n<item>clearcolor</item>\n<item>clientport</item>\n<item>cm_playerCurveClip</item>\n<item>cmd_highchars</item>\n<item>cmd_warncmd</item>\n<item>cmdlist</item>\n<item>color</item>\n<item>color1</item>\n<item>color2</item>\n<item>com_blood</item>\n<item>com_buildScript</item>\n<item>com_cameraMode</item>\n<item>com_dropsim</item>\n<item>com_hunkMegs</item>\n<item>com_hunkused</item>\n<item>com_introplayed</item>\n<item>com_maxfps</item>\n<item>com_recommendedSet</item>\n<item>com_showtrace</item>\n<item>com_soundMegs</item>\n<item>com_speeds</item>\n<item>com_zoneMegs</item>\n<item>compiled</item>\n<item>con_debug</item>\n<item>con_notifytime</item>\n<item>con_restricted</item>\n<item>conspeed</item>\n<item>contrast</item>\n<item>coop</item>\n<item>crosshair</item>\n<item>crosshaircolor</item>\n<item>cull</item>\n<item>d_mipcap</item>\n<item>d_mipscale</item>\n<item>deathmatch</item>\n<item>debug_protocol</item>\n<item>debuggraph</item>\n<item>dedicated</item>\n<item>devdll</item>\n<item>developer</item>\n<item>dlabs</item>\n<item>dmflags</item>\n<item>dm</item>\n<item>down</item>\n<item>download</item>\n<item>drawall</item>\n<item>drawbuffer</item>\n<item>drawentities</item>\n<item>drawflat</item>\n<item>draworder</item>\n<item>drawworld</item>\n<item>driver</item>\n<item>dspeeds</item>\n<item>dynamic</item>\n<item>easter_eggs</item>\n<item>edgefriction</item>\n<item>empty</item>\n<item>enforcetime</item>\n<item>entities</item>\n<item>entlatency</item>\n<item>ext</item>\n<item>filter</item>\n<item>filterban</item>\n<item>finish</item>\n<item>fixedtime</item>\n<item>flashblend</item>\n<item>flood</item>\n<item>flood_msgs</item>\n<item>flood_persecond</item>\n<item>flood_waitdelay</item>\n<item>flushmap</item>\n<item>footsteps</item>\n<item>forward</item>\n<item>forwardsensitivity</item>\n<item>forwardspeed</item>\n<item>forwardthreshold</item>\n<item>fov</item>\n<item>fraglimit</item>\n<item>freelook</item>\n<item>fs_basegame</item>\n<item>fs_basepath</item>\n<item>fs_cdpath</item>\n<item>fs_copyfiles</item>\n<item>fs_debug</item>\n<item>fs_game</item>\n<item>fs_globalcfg</item>\n<item>fs_homepath</item>\n<item>fs_pluginpath</item>\n<item>fs_restrict</item>\n<item>fs_sharepath</item>\n<item>fs_skinbase</item>\n<item>fs_usercfg</item>\n<item>fs_userpath</item>\n<item>fullbright</item>\n<item>fullscreen</item>\n<item>g_allowvote</item>\n<item>g_altStopwatchMode</item>\n<item>g_arenasFile</item>\n<item>g_blueTeam</item>\n<item>g_botsFile</item>\n<item>g_complaintlimit</item>\n<item>g_currentRound</item>\n<item>g_friendlyFire</item>\n<item>g_gameskill</item>\n<item>g_gametype</item>\n<item>g_maxlives</item>\n<item>g_minGameClients</item>\n<item>g_missionStats</item>\n<item>g_nextTimeLimit</item>\n<item>g_noTeamSwitching</item>\n<item>g_redTeam</item>\n<item>g_select_empty</item>\n<item>g_spAwards</item>\n<item>g_spScores1</item>\n<item>g_spScores2</item>\n<item>g_spScores3</item>\n<item>g_spScores4</item>\n<item>g_spScores5</item>\n<item>g_spSkill</item>\n<item>g_spVideos</item>\n<item>g_userAlliedRespawnTime</item>\n<item>g_userAxisRespawnTime</item>\n<item>g_userTimeLimit</item>\n<item>game</item>\n<item>gamecfg</item>\n<item>gamedate</item>\n<item>gamedir</item>\n<item>gamename</item>\n<item>gamestate</item>\n<item>gamma</item>\n<item>gender</item>\n<item>gender_auto</item>\n<item>gl_3dlabs_broken</item>\n<item>gl_allow_software</item>\n<item>gl_bitdepth</item>\n<item>gl_clear</item>\n<item>gl_conalpha</item>\n<item>gl_conspin</item>\n<item>gl_cshiftpercent</item>\n<item>gl_cull</item>\n<item>gl_drawbuffer</item>\n<item>gl_driver</item>\n<item>gl_dynamic</item>\n<item>gl_ext_compiled_vertex_array</item>\n<item>gl_ext_multitexture</item>\n<item>gl_ext_palettedtexture</item>\n<item>gl_ext_pointparameters</item>\n<item>gl_ext_swapinterval</item>\n<item>gl_finish</item>\n<item>gl_flashblend</item>\n<item>gl_keeptjunctions</item>\n<item>gl_lightmap</item>\n<item>gl_lightmap_align</item>\n<item>gl_lightmap_subimage</item>\n<item>gl_lockpvs</item>\n<item>gl_log</item>\n<item>gl_max_size</item>\n<item>gl_mesh_cache</item>\n<item>gl_mode</item>\n<item>gl_modulate</item>\n<item>gl_monolightmap</item>\n<item>gl_nobind</item>\n<item>gl_nocolors</item>\n<item>gl_nosubimage</item>\n<item>gl_occlusion</item>\n<item>gl_particle_att_a</item>\n<item>gl_particle_att_b</item>\n<item>gl_particle_att_c</item>\n<item>gl_particle_max_size</item>\n<item>gl_particle_min_size</item>\n<item>gl_particle_mip</item>\n<item>gl_particle_size</item>\n<item>gl_picmip</item>\n<item>gl_playermip</item>\n<item>gl_polyblend</item>\n<item>gl_reporttjunctions</item>\n<item>gl_round_down</item>\n<item>gl_saturatelighting</item>\n<item>gl_screenshot_byte_swap</item>\n<item>gl_shadows</item>\n<item>gl_showtris</item>\n<item>gl_sky_debug</item>\n<item>gl_sky_divide</item>\n<item>gl_skymip</item>\n<item>gl_smoothmodels</item>\n<item>gl_subdivide_size</item>\n<item>gl_swapinterval</item>\n<item>gl_texsort</item>\n<item>gl_texturealphamode</item>\n<item>gl_texturemode</item>\n<item>gl_texturesolidmode</item>\n<item>gl_triplebuffer</item>\n<item>gl_vertex_arrays</item>\n<item>gl_ztrick</item>\n<item>graphheight</item>\n<item>graphscale</item>\n<item>graphshift</item>\n<item>gravity</item>\n<item>gun</item>\n<item>gun_x</item>\n<item>gun_y</item>\n<item>gun_z</item>\n<item>hand</item>\n<item>handicap</item>\n<item>head</item>\n<item>headModel</item>\n<item>headmodel</item>\n<item>host</item>\n<item>host_framerate</item>\n<item>host_speeds</item>\n<item>hostname</item>\n<item>hostport</item>\n<item>hud_fastswitch</item>\n<item>in</item>\n<item>in_amp</item>\n<item>in_bind_imt</item>\n<item>in_debugjoystick</item>\n<item>in_dga</item>\n<item>in_dga_mouseaccel</item>\n<item>in_dgamouse</item>\n<item>in_grab</item>\n<item>in_joystick</item>\n<item>in_midi</item>\n<item>in_mouse</item>\n<item>in_mouse_amp</item>\n<item>in_mouse_filter</item>\n<item>in_mouse_pre_amp</item>\n<item>in_pre_amp</item>\n<item>initsound</item>\n<item>intensity</item>\n<item>ip</item>\n<item>ip_clientport</item>\n<item>ip_hostport</item>\n<item>ipx</item>\n<item>ipx_clientport</item>\n<item>ipx_hostport</item>\n<item>journal</item>\n<item>joy</item>\n<item>joy_advanced</item>\n<item>joy_advaxisr</item>\n<item>joy_advaxisu</item>\n<item>joy_advaxisv</item>\n<item>joy_advaxisx</item>\n<item>joy_advaxisy</item>\n<item>joy_advaxisz</item>\n<item>joy_amp</item>\n<item>joy_device</item>\n<item>joy_forwardsensitivity</item>\n<item>joy_forwardthreshold</item>\n<item>joy_name</item>\n<item>joy_pitchsensitivity</item>\n<item>joy_pitchthreshold</item>\n<item>joy_pre_amp</item>\n<item>joy_sensitivity</item>\n<item>joy_sidesensitivity</item>\n<item>joy_sidethreshold</item>\n<item>joy_threshold</item>\n<item>joy_upsensitivity</item>\n<item>joy_upthreshold</item>\n<item>joy_yawsensitivity</item>\n<item>joy_yawthreshold</item>\n<item>joyadvanced</item>\n<item>joyadvaxisr</item>\n<item>joyadvaxisu</item>\n<item>joyadvaxisv</item>\n<item>joyadvaxisx</item>\n<item>joyadvaxisy</item>\n<item>joyadvaxisz</item>\n<item>joyaxis1</item>\n<item>joyaxis2</item>\n<item>joyaxis3</item>\n<item>joyaxis4</item>\n<item>joyaxis5</item>\n<item>joyaxis6</item>\n<item>joyaxis7</item>\n<item>joyaxis8</item>\n<item>joyforwardsensitivity</item>\n<item>joyforwardthreshold</item>\n<item>joyname</item>\n<item>joypitchsensitivity</item>\n<item>joypitchthreshold</item>\n<item>joysidesensitivity</item>\n<item>joysidethreshold</item>\n<item>joystick</item>\n<item>joywwhack1</item>\n<item>joywwhack2</item>\n<item>joyyawsensitivity</item>\n<item>joyyawthreshold</item>\n<item>khz</item>\n<item>lcd_x</item>\n<item>lcd_yaw</item>\n<item>lerpmodels</item>\n<item>lightmap</item>\n<item>lights</item>\n<item>limit</item>\n<item>listen</item>\n<item>loadas</item>\n<item>loadas8bit</item>\n<item>localid</item>\n<item>lockpvs</item>\n<item>log</item>\n<item>log_stats</item>\n<item>logfile</item>\n<item>lookspring</item>\n<item>lookstrafe</item>\n<item>loopcount</item>\n<item>looptrack</item>\n<item>m_filter</item>\n<item>m_forward</item>\n<item>m_pitch</item>\n<item>m_side</item>\n<item>m_yaw</item>\n<item>mapname</item>\n<item>maps</item>\n<item>max</item>\n<item>maxclients</item>\n<item>maxedges</item>\n<item>maxentities</item>\n<item>maxfps</item>\n<item>maxplayers</item>\n<item>maxspectators</item>\n<item>maxsurfs</item>\n<item>maxvelocity</item>\n<item>min</item>\n<item>mipcap</item>\n<item>mipscale</item>\n<item>mixahead</item>\n<item>mode</item>\n<item>model</item>\n<item>models</item>\n<item>modex</item>\n<item>modulate</item>\n<item>monolightmap</item>\n<item>mouse</item>\n<item>mp_currentPlayerType</item>\n<item>mp_currentTeam</item>\n<item>mp_playerType</item>\n<item>mp_team</item>\n<item>mp_weapon</item>\n<item>mp_autokick</item>\n<item>mp_autoteambalance</item>\n<item>mp_c4timer</item>\n<item>mp_flashlight</item>\n<item>mp_footsteps</item>\n<item>mp_forcechasecam</item>\n<item>mp_freezetime</item>\n<item>mp_friendlyfire</item>\n<item>mp_hostagepenalty</item>\n<item>mp_limitteams</item>\n<item>mp_logmessages</item>\n<item>mp_mapvoteration</item>\n<item>mp_roundtime</item>\n<item>mp_timelimit</item>\n<item>mp_tkpunish</item>\n<item>msg</item>\n<item>msgs</item>\n<item>multitexture</item>\n<item>name</item>\n<item>net_graph</item>\n<item>net_ip</item>\n<item>net_messagetimeout</item>\n<item>net_noudp</item>\n<item>net_port</item>\n<item>net_qport</item>\n<item>net_restart</item>\n<item>netdosexpire</item>\n<item>netdosvalues</item>\n<item>netgraph</item>\n<item>nextdemo</item>\n<item>nextmap</item>\n<item>nextserver</item>\n<item>noalttab</item>\n<item>nobind</item>\n<item>nocd</item>\n<item>nocull</item>\n<item>nodelta</item>\n<item>noexit</item>\n<item>nomonsters</item>\n<item>norefresh</item>\n<item>noreload</item>\n<item>noskins</item>\n<item>nosound</item>\n<item>nosubimage</item>\n<item>novis</item>\n<item>palettedtexture</item>\n<item>particle</item>\n<item>particles</item>\n<item>password</item>\n<item>pausable</item>\n<item>persecond</item>\n<item>picmip</item>\n<item>pitch</item>\n<item>pitchsensitivity</item>\n<item>pitchspeed</item>\n<item>pitchthreshold</item>\n<item>playermip</item>\n<item>players</item>\n<item>pointparameters</item>\n<item>polyblend</item>\n<item>polymodelstats</item>\n<item>port</item>\n<item>pr_checkextensions</item>\n<item>pr_deadbeef_ents</item>\n<item>pr_deadbeef_locals</item>\n<item>pr_debug</item>\n<item>pr_source_path</item>\n<item>precache</item>\n<item>predict</item>\n<item>primary</item>\n<item>printspeed</item>\n<item>protocol</item>\n<item>public</item>\n<item>pushlatency</item>\n<item>qport</item>\n<item>r_aliastransadj</item>\n<item>r_aliastransbase</item>\n<item>r_allowExtensions</item>\n<item>r_allowSoftwareGL</item>\n<item>r_ambient</item>\n<item>r_ambientScale</item>\n<item>r_bonesDebug</item>\n<item>r_cache</item>\n<item>r_cacheModels</item>\n<item>r_cacheShaders</item>\n<item>r_clear</item>\n<item>r_clearcolor</item>\n<item>r_colorMipLevels</item>\n<item>r_colorbits</item>\n<item>r_compressModels</item>\n<item>r_customaspect</item>\n<item>r_customheight</item>\n<item>r_customwidth</item>\n<item>r_debugSort</item>\n<item>r_debugSurface</item>\n<item>r_debuglight</item>\n<item>r_depthbits</item>\n<item>r_detailtextures</item>\n<item>r_directedScale</item>\n<item>r_displayRefresh</item>\n<item>r_dlightBacks</item>\n<item>r_dlight_lightmap</item>\n<item>r_dlight_max</item>\n<item>r_drawBuffer</item>\n<item>r_drawSun</item>\n<item>r_drawentities</item>\n<item>r_drawexplosions</item>\n<item>r_drawflat</item>\n<item>r_draworder</item>\n<item>r_drawviewmodel</item>\n<item>r_drawworld</item>\n<item>r_dspeeds</item>\n<item>r_dynamic</item>\n<item>r_dynamiclight</item>\n<item>r_explosionclip</item>\n<item>r_exportCompressedModels</item>\n<item>r_ext_compiled_vertex_array</item>\n<item>r_ext_compress_textures</item>\n<item>r_ext_compressed_textures</item>\n<item>r_ext_gamma_control</item>\n<item>r_ext_multitexture</item>\n<item>r_ext_texture_env_add</item>\n<item>r_facePlaneCull</item>\n<item>r_fastsky</item>\n<item>r_finish</item>\n<item>r_firecolor</item>\n<item>r_flareFade</item>\n<item>r_flareSize</item>\n<item>r_flares</item>\n<item>r_fullbright</item>\n<item>r_fullscreen</item>\n<item>r_gamma</item>\n<item>r_glDriver</item>\n<item>r_glIgnoreWicked3D</item>\n<item>r_graphheight</item>\n<item>r_highQualit</item>\n<item>r_highQualityVideo</item>\n<item>r_ignore</item>\n<item>r_ignoreFastPath</item>\n<item>r_ignoreGLErrors</item>\n<item>r_ignorehwgamma</item>\n<item>r_inGameVideo</item>\n<item>r_intensity</item>\n<item>r_lastValidRenderer</item>\n<item>r_lerpmodels</item>\n<item>r_lightmap</item>\n<item>r_lightmap_components</item>\n<item>r_lockpvs</item>\n<item>r_lodCurveError</item>\n<item>r_lodbias</item>\n<item>r_lodscale</item>\n<item>r_logFile</item>\n<item>r_lowMemTextureSize</item>\n<item>r_lowMemTextureThreshold</item>\n<item>r_mapOverBrightBits</item>\n<item>r_maxedges</item>\n<item>r_maxpolys</item>\n<item>r_maxpolyverts</item>\n<item>r_maxsurfs</item>\n<item>r_measureOverdraw</item>\n<item>r_mirroralpha</item>\n<item>r_mode</item>\n<item>r_netgraph</item>\n<item>r_netgraph_alpha</item>\n<item>r_nobind</item>\n<item>r_nocull</item>\n<item>r_nocurves</item>\n<item>r_noportals</item>\n<item>r_norefresh</item>\n<item>r_novis</item>\n<item>r_numedges</item>\n<item>r_numsurfs</item>\n<item>r_offsetfactor</item>\n<item>r_offsetunits</item>\n<item>r_overBrightBits</item>\n<item>r_particles_max</item>\n<item>r_particles_style</item>\n<item>r_picmip</item>\n<item>r_picmip2</item>\n<item>r_polymodelstats</item>\n<item>r_portalOnly</item>\n<item>r_preloadTextures</item>\n<item>r_previousglDriver</item>\n<item>r_primitives</item>\n<item>r_printShaders</item>\n<item>r_railCoreWidth</item>\n<item>r_railSegmentLength</item>\n<item>r_railWidth</item>\n<item>r_reportedgeout</item>\n<item>r_reportsurfout</item>\n<item>r_rmse</item>\n<item>r_roundImagesDown</item>\n<item>r_saveFontData</item>\n<item>r_shadows</item>\n<item>r_showImages</item>\n<item>r_showSmp</item>\n<item>r_showcluster</item>\n<item>r_shownormals</item>\n<item>r_showsky</item>\n<item>r_showtris</item>\n<item>r_simpleMipMaps</item>\n<item>r_singleShader</item>\n<item>r_skipBackEnd</item>\n<item>r_skyname</item>\n<item>r_smp</item>\n<item>r_speeds</item>\n<item>r_stencilbits</item>\n<item>r_stereo</item>\n<item>r_subdivisions</item>\n<item>r_swapInterval</item>\n<item>r_textureMode</item>\n<item>r_texturebits</item>\n<item>r_timegraph</item>\n<item>r_uiFullScreen</item>\n<item>r_verbose</item>\n<item>r_vertexLight</item>\n<item>r_wateralpha</item>\n<item>r_waterwarp</item>\n<item>r_wolffog</item>\n<item>r_zfar</item>\n<item>r_znear</item>\n<item>rate</item>\n<item>rcon</item>\n<item>rconAddress</item>\n<item>rconPassword</item>\n<item>rcon_address</item>\n<item>rcon_password</item>\n<item>reconnect</item>\n<item>ref</item>\n<item>registered</item>\n<item>reportedgeout</item>\n<item>reportsurfout</item>\n<item>roll</item>\n<item>rollangle</item>\n<item>rollspeed</item>\n<item>round</item>\n<item>run</item>\n<item>run_pitch</item>\n<item>run_roll</item>\n<item>s_compression</item>\n<item>s_defaultsound</item>\n<item>s_doppler</item>\n<item>s_initsound</item>\n<item>s_khz</item>\n<item>s_loadas8bit</item>\n<item>s_mixPreStep</item>\n<item>s_mixahead</item>\n<item>s_musicvolume</item>\n<item>s_mute</item>\n<item>s_nocompressed</item>\n<item>s_usingA3D</item>\n<item>s_primary</item>\n<item>s_separation</item>\n<item>s_show</item>\n<item>s_testsound</item>\n<item>s_volume</item>\n<item>s_wavonly</item>\n<item>samelevel</item>\n<item>saturatelighting</item>\n<item>saved1</item>\n<item>saved2</item>\n<item>saved3</item>\n<item>saved4</item>\n<item>savedgamecfg</item>\n<item>scr</item>\n<item>scr_centertime</item>\n<item>scr_consize</item>\n<item>scr_conspeed</item>\n<item>scr_drawall</item>\n<item>scr_ofsx</item>\n<item>scr_ofsy</item>\n<item>scr_ofsz</item>\n<item>scr_printspeed</item>\n<item>scr_showpause</item>\n<item>scr_showturtle</item>\n<item>scratch1</item>\n<item>scratch2</item>\n<item>scratch3</item>\n<item>scratch4</item>\n<item>screenshot</item>\n<item>select</item>\n<item>sensitivity</item>\n<item>separation</item>\n<item>server1</item>\n<item>server10</item>\n<item>server11</item>\n<item>server12</item>\n<item>server13</item>\n<item>server14</item>\n<item>server15</item>\n<item>server16</item>\n<item>server2</item>\n<item>server3</item>\n<item>server4</item>\n<item>server5</item>\n<item>server6</item>\n<item>server7</item>\n<item>server8</item>\n<item>server9</item>\n<item>serverprofile</item>\n<item>sex</item>\n<item>shadows</item>\n<item>show</item>\n<item>showclamp</item>\n<item>showdrop</item>\n<item>showmiss</item>\n<item>shownet</item>\n<item>showpackets</item>\n<item>showpause</item>\n<item>showram</item>\n<item>showtrace</item>\n<item>showtris</item>\n<item>showturtle</item>\n<item>side</item>\n<item>sidesensitivity</item>\n<item>sidespeed</item>\n<item>sidethreshold</item>\n<item>size</item>\n<item>skill</item>\n<item>skin</item>\n<item>skymip</item>\n<item>snaps</item>\n<item>snd_bits</item>\n<item>snd_device</item>\n<item>snd_interp</item>\n<item>snd_loadas8bit</item>\n<item>snd_mixahead</item>\n<item>snd_noextraupdate</item>\n<item>snd_oss_mmaped</item>\n<item>snd_output</item>\n<item>snd_phasesep</item>\n<item>snd_rate</item>\n<item>snd_render</item>\n<item>snd_show</item>\n<item>snd_stereo</item>\n<item>snd_volumesep</item>\n<item>sndbits</item>\n<item>sndchannels</item>\n<item>snddevice</item>\n<item>sndspeed</item>\n<item>software</item>\n<item>sounds</item>\n<item>spectator</item>\n<item>spectator_password</item>\n<item>speeds</item>\n<item>stats</item>\n<item>stereo</item>\n<item>stipplealpha</item>\n<item>surfcacheoverride</item>\n<item>sv</item>\n<item>sv_accelerate</item>\n<item>sv_aim</item>\n<item>sv_airaccelerate</item>\n<item>sv_allowAnonymous</item>\n<item>sv_allowDownload</item>\n<item>sv_cheats</item>\n<item>sv_enforcetime</item>\n<item>sv_floodProtect</item>\n<item>sv_fps</item>\n<item>sv_friction</item>\n<item>sv_gravity</item>\n<item>sv_hostname</item>\n<item>sv_idealpitchscale</item>\n<item>sv_keywords</item>\n<item>sv_killserver</item>\n<item>sv_mapChecksum</item>\n<item>sv_master1</item>\n<item>sv_master2</item>\n<item>sv_master3</item>\n<item>sv_master4</item>\n<item>sv_master5</item>\n<item>sv_maxPing</item>\n<item>sv_maxRate</item>\n<item>sv_maxclients</item>\n<item>sv_maxrate</item>\n<item>sv_maxspeed</item>\n<item>sv_maxtic</item>\n<item>sv_maxvelocity</item>\n<item>sv_minPing</item>\n<item>sv_minqfversion</item>\n<item>sv_mintic</item>\n<item>sv_netdosprotect</item>\n<item>sv_noreload</item>\n<item>sv_nostep</item>\n<item>sv_onlyVisibleClients</item>\n<item>sv_padPackets</item>\n<item>sv_pakNames</item>\n<item>sv_paks</item>\n<item>sv_paused</item>\n<item>sv_phs</item>\n<item>sv_privateClients</item>\n<item>sv_privatePassword</item>\n<item>sv_progs</item>\n<item>sv_pure</item>\n<item>sv_reconnect_limit</item>\n<item>sv_reconnectlimit</item>\n<item>sv_referencedPakNames</item>\n<item>sv_referencedPaks</item>\n<item>sv_restartround</item>\n<item>sv_rollangle</item>\n<item>sv_rollspeed</item>\n<item>sv_running</item>\n<item>sv_serverid</item>\n<item>sv_showAverageBPS</item>\n<item>sv_showloss</item>\n<item>sv_spectalk</item>\n<item>sv_stopspeed</item>\n<item>sv_timefmt</item>\n<item>sv_timekick</item>\n<item>sv_timekick_fuzz</item>\n<item>sv_timekick_interval</item>\n<item>sv_timeout</item>\n<item>sv_timestamps</item>\n<item>sv_wateraccelerate</item>\n<item>sv_waterfriction</item>\n<item>sv_zombietime</item>\n<item>sw</item>\n<item>sw_allow_modex</item>\n<item>sw_clearcolor</item>\n<item>sw_drawflat</item>\n<item>sw_draworder</item>\n<item>sw_maxedges</item>\n<item>sw_maxsurfs</item>\n<item>sw_mipcap</item>\n<item>sw_mipscale</item>\n<item>sw_mode</item>\n<item>sw_polymodelstats</item>\n<item>sw_reportedgeout</item>\n<item>sw_reportsurfout</item>\n<item>sw_stipplealpha</item>\n<item>sw_surfcacheoverride</item>\n<item>sw_waterwarp</item>\n<item>swapinterval</item>\n<item>sys_cpustring</item>\n<item>sys_nostdout</item>\n<item>sys_sleep</item>\n<item>sys_ticrate</item>\n<item>team</item>\n<item>team_headmodel</item>\n<item>team_model</item>\n<item>teamplay</item>\n<item>teamtask</item>\n<item>temp1</item>\n<item>testblend</item>\n<item>testentities</item>\n<item>testlights</item>\n<item>testparticles</item>\n<item>testsound</item>\n<item>texturealphamode</item>\n<item>texturemode</item>\n<item>texturesolidmode</item>\n<item>timedemo</item>\n<item>timegraph</item>\n<item>timelimit</item>\n<item>timeout</item>\n<item>timescale</item>\n<item>topcolor</item>\n<item>triplebuffer</item>\n<item>ttycon</item>\n<item>ui_Q3Model</item>\n<item>ui_actualNetGametype</item>\n<item>ui_bigFont</item>\n<item>ui_browserGameType</item>\n<item>ui_browserMaster</item>\n<item>ui_browserShowEmpty</item>\n<item>ui_browserShowFriendlyFire</item>\n<item>ui_browserShowFull</item>\n<item>ui_browserShowMaxlives</item>\n<item>ui_browserShowTourney</item>\n<item>ui_browserSortKey</item>\n<item>ui_cdkeychecked</item>\n<item>ui_class</item>\n<item>ui_cmd</item>\n<item>ui_ctf_capturelimit</item>\n<item>ui_ctf_friendly</item>\n<item>ui_ctf_timelimit</item>\n<item>ui_currentMap</item>\n<item>ui_currentNetMap</item>\n<item>ui_dedicated</item>\n<item>ui_ffa_fraglimit</item>\n<item>ui_ffa_timelimit</item>\n<item>ui_gametype</item>\n<item>ui_glCustom</item>\n<item>ui_isSpectator</item>\n<item>ui_joinGametype</item>\n<item>ui_limboMode</item>\n<item>ui_limboObjective</item>\n<item>ui_limboOptions</item>\n<item>ui_limboPrevOptions</item>\n<item>ui_mapIndex</item>\n<item>ui_master</item>\n<item>ui_menuFiles</item>\n<item>ui_mousePitch</item>\n<item>ui_netGametype</item>\n<item>ui_netSource</item>\n<item>ui_notebookCurrentPage</item>\n<item>ui_objective</item>\n<item>ui_prevClass</item>\n<item>ui_prevTeam</item>\n<item>ui_prevWeapon</item>\n<item>ui_serverStatusTimeOut</item>\n<item>ui_singlePlayerActive</item>\n<item>ui_smallFont</item>\n<item>ui_spSelection</item>\n<item>ui_team</item>\n<item>ui_teamArenaFirstRun</item>\n<item>ui_team_fraglimit</item>\n<item>ui_team_friendly</item>\n<item>ui_team_timelimit</item>\n<item>ui_tourney_fraglimit</item>\n<item>ui_tourney_timelimit</item>\n<item>ui_userAlliedRespawnTime</item>\n<item>ui_userAxisRespawnTime</item>\n<item>ui_userTimeLimit</item>\n<item>ui_weapon</item>\n<item>up</item>\n<item>upsensitivity</item>\n<item>upspeed</item>\n<item>upthreshold</item>\n<item>username</item>\n<item>v_centermove</item>\n<item>v_centerspeed</item>\n<item>v_idlescale</item>\n<item>v_ipitch_cycle</item>\n<item>v_ipitch_level</item>\n<item>v_iroll_cycle</item>\n<item>v_iroll_level</item>\n<item>v_iuaw_cycle</item>\n<item>v_iyaw_cycle</item>\n<item>v_iyaw_level</item>\n<item>v_kickpitch</item>\n<item>v_kickroll</item>\n<item>v_kicktime</item>\n<item>version</item>\n<item>vertex</item>\n<item>vid</item>\n<item>vid_config_x</item>\n<item>vid_config_y</item>\n<item>vid_fullscreen</item>\n<item>vid_fullscreen_mode</item>\n<item>vid_gamma</item>\n<item>vid_height</item>\n<item>vid_mode</item>\n<item>vid_nopageflip</item>\n<item>vid_ref</item>\n<item>vid_system_gamma</item>\n<item>vid_use8bit</item>\n<item>vid_wait</item>\n<item>vid_width</item>\n<item>vid_window_x</item>\n<item>vid_window_y</item>\n<item>vid_windowed_mode</item>\n<item>vid_xpos</item>\n<item>vid_ypos</item>\n<item>viewlog</item>\n<item>viewsize</item>\n<item>vm_cgame</item>\n<item>vm_game</item>\n<item>vm_ui</item>\n<item>volume</item>\n<item>vwep</item>\n<item>waitdelay</item>\n<item>waterwarp</item>\n<item>wavonly</item>\n<item>win</item>\n<item>win_noalttab</item>\n<item>win_hinstance</item>\n<item>win_wndproc</item>\n<item>xpos</item>\n<item>yaw</item>\n<item>yawsensitivity</item>\n<item>yawspeed</item>\n<item>yawthreshold</item>\n<item>ypos</item>\n<item>zombietime</item>\n<item>ztrick</item>\n</list>\n\n\n<list name=\"Actions\">\n<item>+attack</item>\n<item>+ttack2</item>\n<item>+alt1</item>\n<item>+activate</item>\n<item>+back</item>\n<item>+break</item>\n<item>+button0</item>\n<item>+button1</item>\n<item>+button10</item>\n<item>+button11</item>\n<item>+button12</item>\n<item>+button13</item>\n<item>+button14</item>\n<item>+button2</item>\n<item>+button3</item>\n<item>+button4</item>\n<item>+button5</item>\n<item>+button6</item>\n<item>+button7</item>\n<item>+button8</item>\n<item>+button9</item>\n<item>+camdistance</item>\n<item>+camin</item>\n<item>+cammousemove</item>\n<item>+camout</item>\n<item>+campitchdown</item>\n<item>+campitchup</item>\n<item>+camyawleft</item>\n<item>+camyawright</item>\n<item>+commandmenu</item>\n<item>+dropweapon</item>\n<item>+duck</item>\n<item>+forward</item>\n<item>+graph</item>\n<item>+jlook</item>\n<item>+jump</item>\n<item>+kick</item>\n<item>+klook</item>\n<item>+leanleft</item>\n<item>+leanright</item>\n<item>+left</item>\n<item>+lookdown</item>\n<item>+lookup</item>\n<item>+mlook</item>\n<item>+movedown</item>\n<item>+moveleft</item>\n<item>+moveright</item>\n<item>+moveup</item>\n<item>+nvgadjust</item>\n<item>+quickgren</item>\n<item>+reload</item>\n<item>+right</item>\n<item>+salute</item>\n<item>+score</item>\n<item>+showscores</item>\n<item>+speed</item>\n<item>+sprint</item>\n<item>+strafe</item>\n<item>+use</item>\n<item>+useitem</item>\n<item>+voicerecord</item>\n<item>+wbutton7</item>\n<item>+zoom</item>\n<item>-activate</item>\n<item>-alt1</item>\n<item>-attack</item>\n<item>-attack2</item>\n<item>-back</item>\n<item>-break</item>\n<item>-button0</item>\n<item>-button1</item>\n<item>-button10</item>\n<item>-button11</item>\n<item>-button12</item>\n<item>-button13</item>\n<item>-button14</item>\n<item>-button2</item>\n<item>-button3</item>\n<item>-button4</item>\n<item>-button5</item>\n<item>-button6</item>\n<item>-button7</item>\n<item>-button8</item>\n<item>-button9</item>\n<item>-camdistance</item>\n<item>-camin</item>\n<item>-cammousemove</item>\n<item>-camout</item>\n<item>-campitchdown</item>\n<item>-campitchup</item>\n<item>-camyawleft</item>\n<item>-camyawright</item>\n<item>-commandmenu</item>\n<item>-dropweapon</item>\n<item>-duck</item>\n<item>-forward</item>\n<item>-graph</item>\n<item>-jlook</item>\n<item>-jump</item>\n<item>-kick</item>\n<item>-klook</item>\n<item>-leanleft</item>\n<item>-leanright</item>\n<item>-left</item>\n<item>-lookdown</item>\n<item>-lookup</item>\n<item>-mlook</item>\n<item>-movedown</item>\n<item>-moveleft</item>\n<item>-moveright</item>\n<item>-moveup</item>\n<item>-nvgadjust</item>\n<item>-quickgren</item>\n<item>-reload</item>\n<item>-right</item>\n<item>-salute</item>\n<item>-score</item>\n<item>-showscores</item>\n<item>-speed</item>\n<item>-sprint</item>\n<item>-strafe</item>\n<item>-use</item>\n<item>-useitem</item>\n<item>-voicerecord</item>\n<item>-wbutton7</item>\n<item>-zoom</item>\n</list>\n\n\n<list name=\"KeyTypes\">\n<item>*</item>\n<item>[</item>\n<item>]</item>\n<item>\\</item>\n<item>/</item>\n<item>'</item>\n<item>=</item>\n<item>-</item>\n<item>+</item>\n<item>,</item>\n<item>.</item>\n<item>`</item>\n<item>~</item>\n<item>1</item>\n<item>2</item>\n<item>3</item>\n<item>4</item>\n<item>5</item>\n<item>6</item>\n<item>7</item>\n<item>8</item>\n<item>9</item>\n<item>0</item>\n<item>a</item>\n<item>b</item>\n<item>c</item>\n<item>d</item>\n<item>e</item>\n<item>f</item>\n<item>g</item>\n<item>h</item>\n<item>i</item>\n<item>j</item>\n<item>k</item>\n<item>l</item>\n<item>m</item>\n<item>n</item>\n<item>o</item>\n<item>p</item>\n<item>q</item>\n<item>r</item>\n<item>s</item>\n<item>t</item>\n<item>u</item>\n<item>v</item>\n<item>x</item>\n<item>w</item>\n<item>y</item>\n<item>z</item>\n<item>ALT</item>\n<item>AUX1</item>\n<item>AUX10</item>\n<item>AUX11</item>\n<item>AUX12</item>\n<item>AUX13</item>\n<item>AUX14</item>\n<item>AUX15</item>\n<item>AUX16</item>\n<item>AUX17</item>\n<item>AUX18</item>\n<item>AUX2</item>\n<item>AUX20</item>\n<item>AUX21</item>\n<item>AUX22</item>\n<item>AUX23</item>\n<item>AUX24</item>\n<item>AUX25</item>\n<item>AUX26</item>\n<item>AUX27</item>\n<item>AUX28</item>\n<item>AUX29</item>\n<item>AUX3</item>\n<item>AUX30</item>\n<item>AUX31</item>\n<item>AUX32</item>\n<item>AUX4</item>\n<item>AUX5</item>\n<item>AUX6</item>\n<item>AUX7</item>\n<item>AUX8</item>\n<item>AUX9</item>\n<item>BACKSPACE</item>\n<item>CTRL</item>\n<item>DEL</item>\n<item>DOWNARROW</item>\n<item>END</item>\n<item>ENTER</item>\n<item>ESCAPE</item>\n<item>F1</item>\n<item>F10</item>\n<item>F11</item>\n<item>F12</item>\n<item>F2</item>\n<item>F3</item>\n<item>F4</item>\n<item>F5</item>\n<item>F6</item>\n<item>F7</item>\n<item>F8</item>\n<item>F9</item>\n<item>HOME</item>\n<item>INS</item>\n<item>JOY1</item>\n<item>JOY2</item>\n<item>JOY3</item>\n<item>JOY4</item>\n<item>KP_SLASH</item>\n<item>KP_5</item>\n<item>KP_UPARROW</item>\n<item>KP_LEFTARROW</item>\n<item>KP_RIGHTARROW</item>\n<item>KP_DOWNARROW</item>\n<item>KP_HOME</item>\n<item>KP_END</item>\n<item>KP_PGUP</item>\n<item>KP_PGDN</item>\n<item>KP_INS</item>\n<item>KP_DEL</item>\n<item>LEFTARROW</item>\n<item>MOUSE1</item>\n<item>MOUSE2</item>\n<item>MOUSE3</item>\n<item>MWHEELDOWN</item>\n<item>MWHEELUP</item>\n<item>PAUSE</item>\n<item>PGDN</item>\n<item>PGUP</item>\n<item>RIGHTARROW</item>\n<item>SEMICOLON</item>\n<item>CAPSLOCK</item>\n<item>SHIFT</item>\n<item>SPACE</item>\n<item>TAB</item>\n<item>UPARROW</item>\n</list>\n\n  <list name=\"Symbols\">\n    <item>;</item>\n    <item>$</item>\n  </list>\n  <list name=\"BindFamily\">\n    <item>bind</item>\n    <item>unbind</item>\n  </list>\n  <list name=\"setFamily\">\n    <item>set</item>\n    <item>seta</item>\n    <item>setu</item>\n    <item>sets</item>\n  </list>\n  <list name=\"PrintsString\">\n     <item>echo</item>\n     <item>say_team</item>\n     <item>say</item>\n  </list>\n\n    <contexts>\n          <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\">\n                <keyword attribute=\"Command\" context=\"Arg area\" String=\"Commands\"/>\n                <keyword attribute=\"Variable\" context=\"Arg area\" String=\"Variables\"/>\n                <keyword attribute=\"Action\" context=\"#stay\" String=\"Actions\"/>\n                <keyword attribute=\"Symbol\" context=\"#stay\" String=\"Symbols\"/>\n                <keyword attribute=\"Command\" context=\"Bind phrase\" String=\"BindFamily\"/>\n                <keyword attribute=\"Command\" context=\"Alias phrase\" String=\"setFamily\"/>\n                <keyword attribute=\"Command\" context=\"Echo\" String=\"PrintsString\"/>\n                <StringDetect attribute=\"Command\" context=\"Alias phrase\" String=\"alias\" insensitive=\"true\"/>\n                <keyword attribute=\"Command\" context=\"Echo\" String=\"PrintsString\"/>\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"$\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n          </context>\n          <context attribute=\"Comment\" lineEndContext=\"Normal Text\" name=\"Comment\"/>\n          <context attribute=\"String\" lineEndContext=\"Normal Text\" name=\"String\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n          </context>\n          <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Arg area\">\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n                <Float attribute=\"Float\" context=\"#stay\"/>\n                <Int attribute=\"Int\" context=\"#stay\"/>\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n                <DetectChar attribute=\"Symbol\" context=\"Normal Text\" char=\"$\"/>\n          </context>\n          <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Arg area in sub phrase\">\n                <Float attribute=\"Float\" context=\"#stay\"/>\n                <Int attribute=\"Int\" context=\"#stay\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n          </context>\n          <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Sub phrase\">\n                <keyword attribute=\"Command\" context=\"Arg area in sub phrase\" String=\"Commands\"/>\n                <keyword attribute=\"Variable\" context=\"Arg area in sub phrase\" String=\"Variables\"/>\n                <keyword attribute=\"Action\" context=\"#stay\" String=\"Actions\"/>\n                <keyword attribute=\"Symbol\" context=\"#stay\" String=\"Symbols\"/>\n                <keyword attribute=\"Command\" context=\"Bind phrase\" String=\"BindFamily\"/>\n                <keyword attribute=\"Command\" context=\"Normal Text\" String=\"setFamily\"/>\n                <keyword attribute=\"Command\" context=\"Echo\" String=\"PrintsString\"/>\n                <StringDetect attribute=\"Command\" context=\"Alias phrase\" String=\"alias\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\";\"/>\n                <Int attribute=\"Int\" context=\"#stay\"/>\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n          </context>\n          <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Bind phrase\">\n                <keyword attribute=\"Hex\" context=\"Sub phrase\" String=\"KeyTypes\"/>\n          </context>\n          <context attribute=\"Identifier\" lineEndContext=\"Normal Text\" name=\"Alias phrase\">\n                <DetectChar attribute=\"Identifier\" context=\"Sub phrase\" char=\" \"/>\n          </context>\n          <context attribute=\"String\" lineEndContext=\"Normal Text\" name=\"Echo\">\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n          </context>\n    </contexts>\n    <itemDatas>\n          <itemData name=\"Command\"     defStyleNum=\"dsKeyword\"  />\n          <itemData name=\"Action\"      defStyleNum=\"dsExtension\"/>\n          <itemData name=\"Variable\"    defStyleNum=\"dsVariable\" />\n          <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"   />\n          <itemData name=\"Comment\"     defStyleNum=\"dsComment\"  />\n          <itemData name=\"Float\"       defStyleNum=\"dsFloat\"    />\n          <itemData name=\"Int\"         defStyleNum=\"dsFloat\"    />\n          <itemData name=\"String\"      defStyleNum=\"dsString\"   />\n          <itemData name=\"Hex\"         defStyleNum=\"dsBaseN\"    />\n          <itemData name=\"Symbol\"      defStyleNum=\"dsOthers\"   />\n          <itemData name=\"Identifier\"  defStyleNum=\"dsDataType\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n          <comment name=\"singleLine\" start=\"//\"/>\n    </comments>\n    <keywords weakDeliminator=\",+~-=/\\.[]$\" additionalDeliminator=\"&quot;;$\" casesensitive=\"0\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/idl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"IDL\" version=\"3\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.idl\" mimetype=\"text/x-idl-src\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>any</item>\n      <item>attribute</item>\n      <item>case</item>\n      <item>const</item>\n      <item>context</item>\n      <item>default</item>\n      <item>enum</item>\n      <item>exception</item>\n      <item>FALSE</item>\n      <item>fixed</item>\n      <item>public</item>\n      <item>in</item>\n      <item>inout</item>\n      <item>interface</item>\n      <item>module</item>\n      <item>Object</item>\n      <item>oneway</item>\n      <item>out</item>\n      <item>raises</item>\n      <item>readonly</item>\n      <item>sequence</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>TRUE</item>\n      <item>typedef</item>\n      <item>unsigned</item>\n      <item>union</item>\n    </list>\n    <list name=\"types\">\n      <item>boolean</item>\n      <item>char</item>\n      <item>double</item>\n      <item>float</item>\n      <item>long</item>\n      <item>octet</item>\n      <item>short</item>\n      <item>string</item>\n      <item>void</item>\n      <item>wchar</item>\n      <item>wstring</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^{|}~\"/>\n        <StringDetect attribute=\"Comment\" context=\"Some Context3\" String=\"#if 0\" insensitive=\"false\"/>\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\" column=\"0\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"Some Context\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"Some Context2\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Some Context\"/>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Some Context2\"/>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Some Context3\">\n          <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n          <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"#endif\" column=\"0\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Prep. Lib\"  defStyleNum=\"dsOthers\"/> <!--,Qt::darkYellow,Qt::yellow,false,false)); -->\n      <itemData name=\"Alert\"        defStyleNum=\"dsAlert\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ilerpg.xml",
    "content": "<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n    *************************************************************************\n    *                                                                       *\n    *               Syntax highlighting for IBM iSeries ILE RPG             *\n    *                   Copyright (C) 2003, Nick Roux                       *\n    *                                                                       *\n    *************************************************************************\n\n    Updated: Nick Roux <nick@sundown.homeip.net>\n    Date:    2006/04/12\n    Version: 1.05\n             Added support for compiler directives and especially /free\n\t     Added positional check for opcodes and validation of conditioning indicators\n\n    Author:  Nick Roux <nick@sundown.homeip.net>\n    Date:    Sometime during 2003\n    Version: 1.0\n\n\tThis file contains the XML syntax highlighting description for the IBM\n\tiSeries ILE RPG, for KATE, the KDE Advanced Editor.  \n\tBased on information from IBM publication SC09-2508-05\n\t\n\tKnown problems: \n\t 1) Calculation Specification Factor1 does not get highlighted\n\t 2) Calculation Specification Extended Factor2 Continuation Line does not work correctly\n\t 3) Everything from the start of Factor2 is assumed free format\n\t 4) Will make a total mess of compile time array data, but that seems rather fitting\n\t 5) Operation Code Extenders are not check/highlighted\n\t 6) It is slow\n\n\tThis program, including associated files, is free software.  You may\n\tdistribute it and/or modify it under the terms of the GNU General Public\n\tLicense as published by the Free Software Foundation; either Version 2 of\n\tthe license, or (at your option) any later version.\n\n\tThis program is distributed in the hope that it will be useful, but\n\tWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n\tor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n\tfor more details.\n\n\tYou should have received a copy of the GNU General Public License along\n\twith this program; if not, write to the Free Software Foundation, Inc.,\n\t51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\n-->\n\n<language name=\"ILERPG\" version=\"8\" kateversion=\"2.2\" section=\"Sources\" extensions=\"QRPG*.*;qrpg*.*\" mimetype=\"text/x-ilerpg-src\" casesensitive=\"0\" license=\"GPLv2+\" author=\"Nick Roux (nick@sundown.homeip.net)\">\n    <highlighting>\n    <list name=\"dkeywords\">\n\t    <item>EXTPROC</item>\n\t    <item>EXTPGM</item>\n\t    <item>OPDESC</item>\n\t    <item>DATFMT</item>\n\t    <item>DIM</item>\n\t    <item>LIKEDS</item>\n\t    <item>LIKEREC</item>\n\t    <item>LIKE</item>\n\t    <item>PROCPTR</item>\n\t    <item>TIMFMT</item>\n\t    <item>VARYING</item>\n\t    <item>ASCEND</item>\n\t    <item>CONST</item>\n\t    <item>NOOPT</item>\n\t    <item>OPTIONS</item>\n\t    <item>VALUE</item>\n\t    <item>QUALIFIED</item>\n\t    <item>INZ</item>\n\t    <item>BASED</item>\n    </list>\n    <list name=\"directives\">\n\t    <item>FREE</item>\n\t    <item>END-FREE</item>\n\t    <item>TITLE</item>\n\t    <item>EJECT</item>\n\t    <item>SPACE</item>\n\t    <item>COPY</item>\n\t    <item>INCLUDE</item>\n\t    <item>DEFINE</item>\n\t    <item>UNDEFINE</item>\n\t    <item>IF</item>\n\t    <item>ELSE</item>\n\t    <item>EXEC</item>\n\t    <item>END-EXEC</item>\n\t    <item>ELSEIF</item>\n\t    <item>ENDIF</item>\n\t    <item>EOF</item>\n    </list> \n    <list name=\"directives2\">\n\t    <item>NOT</item>\n\t    <item>DEFINED</item>\n    </list> \n    <list name=\"directives3\">\n\t    <item>DEFINED</item>\n    </list> \n    <list name=\"biffs\">\n\t    <item>ABS</item>\n\t    <item>ADDR</item>\n\t    <item>ALLOC</item>\n\t    <item>BITAND</item>\n\t    <item>BITNOT</item>\n\t    <item>BITOR</item>\n\t    <item>BITXOR</item>\n\t    <item>CHAR</item>\n\t    <item>CHECK</item>\n\t    <item>CHECKR</item>\n\t    <item>DATE</item>\n\t    <item>DAYS</item>\n\t    <item>DEC</item>\n\t    <item>DECH</item>\n\t    <item>DECPOS</item>\n\t    <item>DIFF</item>\n\t    <item>DIV</item>\n\t    <item>EDITC</item>\n\t    <item>EDITFLT</item>\n\t    <item>EDITW</item>\n\t    <item>ELEM</item>\n\t    <item>EOF</item>\n\t    <item>EQUAL</item>\n\t    <item>ERROR</item>\n\t    <item>FIELDS</item>\n\t    <item>FLOAT</item>\n\t    <item>FOUND</item>\n\t    <item>GRAPH</item>\n\t    <item>HOURS</item>\n\t    <item>INT</item>\n\t    <item>INTH</item>\n\t    <item>KDS</item>\n\t    <item>LEN</item>\n\t    <item>LOOKUP</item>\n\t    <item>LOOKUPLT</item>\n\t    <item>LOOKUPLE</item>\n\t    <item>LOOKUPGT</item>\n\t    <item>LOOKUPGE</item>\n\t    <item>MINUTES</item>\n\t    <item>MONTHS</item>\n\t    <item>MSECONDS</item>\n\t    <item>NULLIND</item>\n\t    <item>OCCUR</item>\n\t    <item>OPEN</item>\n\t    <item>PADDR</item>\n\t    <item>PARMS</item>\n\t    <item>REALLOC</item>\n\t    <item>REM</item>\n\t    <item>REPLACE</item>\n\t    <item>SCAN</item>\n\t    <item>SECONDS</item>\n\t    <item>SHTDN</item>\n\t    <item>SIZE</item>\n\t    <item>SQRT</item>\n\t    <item>STATUS</item>\n\t    <item>STR</item>\n\t    <item>SUBARR</item>\n\t    <item>SUBDT</item>\n\t    <item>SUBST</item>\n\t    <item>THIS</item>\n\t    <item>TIME</item>\n\t    <item>TIMESTAMP</item>\n\t    <item>TLOOKUP</item>\n\t    <item>TLOOKUPLT</item>\n\t    <item>TLOOKUPLE</item>\n\t    <item>TLOOKUPGT</item>\n\t    <item>TLOOKUPGE</item>\n\t    <item>TRIM</item>\n\t    <item>TRIML</item>\n\t    <item>TRIMR</item>\n\t    <item>UCS2</item>\n\t    <item>UNS</item>\n\t    <item>UNSH</item>\n\t    <item>XFOOT</item>\n\t    <item>XLATE</item>\n\t    <item>YEARS</item>\n         </list>\n\t <list name=\"evalopcodes2\">\n\t\t <item>IF</item>\n\t </list>\n\t <list name=\"evalopcodes3\">\n\t\t <item>DOW</item>\n\t\t <item>DOU</item>\n\t\t <item>FOR</item>\n\t </list>\n\t <list name=\"evalopcodes4\">\n\t\t <item>WHEN</item>\n\t\t <item>EVAL</item>\n\t </list>\n\t <list name=\"evalopcodes5\">\n\t\t <item>EVALR</item>\n\t </list>\n\t <list name=\"evalopcodes6\">\n\t\t <item>RETURN</item>\n\t </list>\n     <list name=\"nonevalopcodes2\">\n\t    <item>DO</item>\n\t    <item>IN</item>\n\t    <item>OR</item>\n\t </list>\n\t <list name=\"nonevalopcodes3\">\n            <item>ACQ</item>\n\t    <item>ADD</item>\n\t    <item>AND</item>\n\t    <item>CAB</item>\n\t    <item>CAS</item>\n\t    <item>CAT</item>\n\t    <item>DIV</item>\n\t    <item>DOU</item>\n\t    <item>END</item>\n\t    <item>MVR</item>\n\t    <item>OUT</item>\n\t    <item>REL</item>\n\t    <item>SUB</item>\n\t    <item>TAG</item>\n         </list>\n\t <list name=\"nonevalopcodes4\">\n\t    <item>CALL</item>\n\t    <item>COMP</item>\n\t    <item>DUMP</item>\n\t    <item>ELSE</item>\n\t    <item>EXSR</item>\n\t    <item>FEOD</item>\n\t    <item>GOTO</item>\n\t    <item>IFGT</item>\n\t    <item>IFLT</item>\n\t    <item>IFEQ</item>\n\t    <item>IFNE</item>\n\t    <item>IFGE</item>\n\t    <item>IFLE</item>\n\t    <item>ITER</item>\n\t    <item>KFLD</item>\n\t    <item>MOVE</item>\n\t    <item>MULT</item>\n\t    <item>NEXT</item>\n\t    <item>OPEN</item>\n\t    <item>ORGT</item>\n\t    <item>ORLT</item>\n\t    <item>OREQ</item>\n\t    <item>ORNE</item>\n\t    <item>ORGE</item>\n\t    <item>ORLE</item>\n\t    <item>PARM</item>\n\t    <item>POST</item>\n\t    <item>READ</item>\n\t    <item>SCAN</item>\n\t    <item>SQRT</item>\n\t    <item>TEST</item>\n\t    <item>TIME</item>\n         </list>\n\t <list name=\"nonevalopcodes5\">\n            <item>ALLOC</item>\n            <item>ANDGT</item>\n            <item>ANDLT</item>\n            <item>ANDEQ</item>\n            <item>ANDNE</item>\n            <item>ANDGE</item>\n            <item>ANDLE</item>\n            <item>BEGSR</item>\n            <item>BITON</item>\n            <item>CABGT</item>\n            <item>CABLT</item>\n            <item>CABEQ</item>\n            <item>CABNE</item>\n            <item>CABGE</item>\n            <item>CABLE</item>\n            <item>CALLB</item>\n            <item>CALLP</item>\n            <item>CASGT</item>\n            <item>CASLT</item>\n            <item>CASEQ</item>\n            <item>CASNE</item>\n            <item>CASGE</item>\n            <item>CASLE</item>\n\t    <item>CHAIN</item>\n\t    <item>CHECK</item>\n\t    <item>CLEAR</item>\n\t    <item>CLOSE</item>\n\t    <item>CHECK</item>\n\t    <item>CLEAR</item>\n\t    <item>CLOSE</item>\n\t    <item>DOWGT</item>\n\t    <item>DOWLT</item>\n\t    <item>DOWEQ</item>\n\t    <item>DOWNE</item>\n\t    <item>DOWGE</item>\n\t    <item>DOWLE</item>\n\t    <item>DOUGT</item>\n\t    <item>DOULT</item>\n\t    <item>DOUEQ</item>\n\t    <item>DOUNE</item>\n\t    <item>DOUGE</item>\n\t    <item>DOULE</item>\n\t    <item>DSPLY</item>\n\t    <item>ENDCS</item>\n\t    <item>ENDDO</item>\n\t    <item>ENDIF</item>\n\t    <item>ENDSL</item>\n\t    <item>ENDSR</item>\n\t    <item>EXFMT</item>\n\t    <item>FORCE</item>\n\t    <item>KLIST</item>\n\t    <item>LEAVE</item>\n\t    <item>MHHZO</item>\n\t    <item>MHLZO</item>\n\t    <item>MLHZO</item>\n\t    <item>MLLZO</item>\n\t    <item>MOVEA</item>\n\t    <item>MOVEL</item>\n\t    <item>OCCUR</item>\n\t    <item>OTHER</item>\n\t    <item>PLIST</item>\n\t    <item>READC</item>\n\t    <item>READE</item>\n\t    <item>READP</item>\n\t    <item>RESET</item>\n\t    <item>ROLBK</item>\n\t    <item>SETGT</item>\n\t    <item>SETLL</item>\n\t    <item>SETON</item>\n\t    <item>SHTDN</item>\n\t    <item>SORTA</item>\n\t    <item>SUBST</item>\n\t    <item>TESTB</item>\n\t    <item>TESTN</item>\n\t    <item>TESTZ</item>\n\t    <item>WRITE</item>\n\t    <item>XFOOT</item>\n\t    <item>XLATE</item>\n        </list>\n\t<list name=\"nonevalopcodes6\">\n\t    <item>ADDDUR</item>\n\t    <item>BITOFF</item>\n            <item>CHECKR</item>\n            <item>COMMIT</item>\n            <item>DEFINE</item>\n            <item>DELETE</item>\n\t    <item>EXCEPT</item>\n\t    <item>EXTRCT</item>\n            <item>LOOKUP</item>\n\t    <item>READPE</item>\n\t    <item>RETURN</item>\n\t    <item>SELECT</item>\n\t    <item>SETOFF</item>\n\t    <item>SUBDUR</item>\n            <item>UNLOCK</item>\n            <item>UPDATE</item>\n            <item>WHENGT</item>\n            <item>WHENLT</item>\n            <item>WHENEQ</item>\n            <item>WHENNR</item>\n            <item>WHENGE</item>\n            <item>WHENLE</item>\n        </list>\n\t<list name=\"nonevalopcodes7\">\n\t\t<item>DEALLOC</item>\n\t\t<item>REALLOC</item>\n\t</list>\n\t<list name=\"freeopcodes\">\n\t\t<item>ACQ</item>\n\t\t<item>BEGSR</item>\n\t\t<item>CALLP</item>\n\t\t<item>CHAIN</item>\n\t\t<item>CLEAR</item>\n\t\t<item>CLOSE</item>\n\t\t<item>COMMIT</item>\n\t\t<item>DEALLOC</item>\n\t\t<item>DELETE</item>\n\t\t<item>DOU</item>\n\t\t<item>DOW</item>\n\t\t<item>DSPLY</item>\n\t\t<item>DUMP</item>\n\t\t<item>ELSE</item>\n\t\t<item>ELSEIF</item>\n\t\t<item>ENDDO</item>\n\t\t<item>ENDFOR</item>\n\t\t<item>ENDIF</item>\n\t\t<item>ENDMON</item>\n\t\t<item>ENDSL</item>\n\t\t<item>ENDSR</item>\n\t\t<item>EVAL</item>\n\t\t<item>EVALR</item>\n\t\t<item>EXCEPT</item>\n\t\t<item>EXFMT</item>\n\t\t<item>EXSR</item>\n\t\t<item>FEOD</item>\n\t\t<item>FOR</item>\n\t\t<item>FORCE</item>\n\t\t<item>IF</item>\n\t\t<item>IN</item>\n\t\t<item>ITER</item>\n\t\t<item>LEAVE</item>\n\t\t<item>LEAVESR</item>\n\t\t<item>MONITOR</item>\n\t\t<item>NEXT</item>\n\t\t<item>ON-ERROR</item>\n\t\t<item>OPEN</item>\n\t\t<item>OTHER</item>\n\t\t<item>OUT</item>\n\t\t<item>POST</item>\n\t\t<item>READ</item>\n\t\t<item>READC</item>\n\t\t<item>READE</item>\n\t\t<item>READP</item>\n\t\t<item>READPE</item>\n\t\t<item>REL</item>\n\t\t<item>RESET</item>\n\t\t<item>RETURN</item>\n\t\t<item>ROLBK</item>\n\t\t<item>SELECT</item>\n\t\t<item>SETGT</item>\n\t\t<item>SETLL</item>\n\t\t<item>SORTA</item>\n\t\t<item>TEST</item>\n\t\t<item>UNLOCK</item>\n\t\t<item>UPDATE</item>\n\t\t<item>WHEN</item>\n\t\t<item>WRITE</item>\n\t</list>\n\n    <contexts>\n    \n<!-- Start here -->\n\t<!-- Form Type -->\n\t<context name=\"Default\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"Comment\" context=\"Comments\" String=\"[PpOoIiHhFfDdCc ]?\\*\"/>\n\t\t<RegExpr attribute=\"Directive\" context=\"Directives\" String=\"[PpOoIiHhFfDdCc ]?/\"/>\n\t\t<AnyChar attribute=\"Keyword\" context=\"AnyCode\" String=\"OoIiHhFf\"/>\n\t\t<AnyChar attribute=\"Keyword\" context=\"D\" String=\"Dd\"/>\n\t\t<AnyChar attribute=\"Keyword\" context=\"P\" String=\"Pp\"/>\n\t\t<AnyChar attribute=\"Keyword\" context=\"CControlLevel\" String=\"Cc\"/>\n\t</context>\n\t\n<!-- Calculation Specifications -->\n\t<!-- Control Level -->\n\t<context name=\"CControlLevel\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t<RegExpr attribute=\"Indicator\"   context=\"CIndicators\" String=\"\\ {2}\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CIndicators\" String=\"[L|l][0-9]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CIndicators\" String=\"[O|o|L|l|S|s][R|r]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CIndicators\" String=\"[A|a][N|n]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CIndicators\" String=\"[L|l|S|s][R|r]\"/>\n\t\t<RegExpr attribute=\"Alert\"   context=\"CIndicators\" String=\".{2}\"/>\n\t</context>\n\t\n\t<!-- Indicators -->\n\t<context name=\"CIndicators\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n\t\t<RegExpr attribute=\"Indicator\"   context=\"CFactor1\" String=\"\\ {3}\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][0-9]{2}\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][K|k][A-N|p-y]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][K|k][P-Y|p-y]}\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][L|l][1-9]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][L|l|M|m][R|r]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][R|r][T|t]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][U|u][1-8]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][O|o][A-G|a-g]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][O|o][V|v]\"/>\n\t\t<RegExpr attribute=\"Indicator\" context=\"CFactor1\" String=\"[\\ |N|n][H|h][1-9]\"/>\n\t\t<RegExpr attribute=\"Alert\" context=\"CFactor1\" String=\".{3}\"/>\n\t</context>\n\t\n\t<!-- Factor1 -->\n\t<context name=\"CFactor1\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop\">\n\t\t<!-- TODO -->\n\t\t<RegExpr attribute=\"Normal Text\" context=\"FindOC\" String=\".{14}\"/>\n\t</context>\n\t\n\t<!-- FindOpcode -->\n      <context name=\"FindOC\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <keyword attribute=\"Keyword\" context=\"NonEvalOC2\" String=\"nonevalopcodes2\"/>\n        <keyword attribute=\"Keyword\" context=\"NonEvalOC3\" String=\"nonevalopcodes3\"/>\n        <keyword attribute=\"Keyword\" context=\"NonEvalOC4\" String=\"nonevalopcodes4\"/>\n        <keyword attribute=\"Keyword\" context=\"NonEvalOC5\" String=\"nonevalopcodes5\"/>\n        <keyword attribute=\"Keyword\" context=\"NonEvalOC6\" String=\"nonevalopcodes6\"/>\n        <keyword attribute=\"Keyword\" context=\"NonEvalOC7\" String=\"nonevalopcodes7\"/>\n\t<RegExpr attribute=\"Keyword\" context=\"NonEvalOC5\" String=\"[Z|z]-([A|a][D|d]{2}|[S|s][U|u][B|b])\"/>\n\t<keyword attribute=\"Keyword\" context=\"EvalOC2\" String=\"evalopcodes2\"/>\n\t<keyword attribute=\"Keyword\" context=\"EvalOC3\" String=\"evalopcodes3\"/>\n\t<keyword attribute=\"Keyword\" context=\"EvalOC4\" String=\"evalopcodes4\"/>\n\t<keyword attribute=\"Keyword\" context=\"EvalOC5\" String=\"evalopcodes5\"/>\n\t<keyword attribute=\"Keyword\" context=\"EvalOC6\" String=\"evalopcodes6\"/>\n\t<RegExpr attribute=\"Keyword\" context=\"EvalOC8\" String=\"[O|o][N|n]-([E|e][R|r]{2}|[O|o][R|r])\"/>\n\t<RegExpr attribute=\"Normal Text\" context=\"CFactor2\" String=\"\\ {10}\"/>\n\t<RegExpr attribute=\"Alert\"   context=\"CFactor2\" String=\".{10}\"/>\n      </context>\n\n      <!-- Opcodes that can NOT be followed by evaluation expressions -->\n      <context name=\"NonEvalOC2\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CFactor2\" String=\"\\ {8}\"/>\n      </context>\n      <context name=\"NonEvalOC3\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CFactor2\" String=\"\\ {7}\"/>\n      </context>\n      <context name=\"NonEvalOC4\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CFactor2\" String=\"\\ {6}\"/>\n      </context>\n      <context name=\"NonEvalOC5\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CFactor2\" String=\"\\ {5}\"/>\n      </context>\n      <context name=\"NonEvalOC6\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CFactor2\" String=\"\\ {4}\"/>\n      </context>\n      <context name=\"NonEvalOC7\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CFactor2\" String=\"\\ {3}\"/>\n      </context>\n\n      <context name=\"CFactor2\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <DetectChar attribute=\"Biff\" context=\"Biffs\" char=\"%\"/>\n\t      <IncludeRules context=\"CommonCode\" />\n      </context>\n\n      <!-- Opcodes that can be followed by evaluation expressions -->\n      <context name=\"EvalOC2\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CExFactor2\" String=\"\\ {8}\"/>\n      </context>\n      <context name=\"EvalOC3\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CExFactor2\" String=\"\\ {7}\"/>\n      </context>\n      <context name=\"EvalOC4\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CExFactor2\" String=\"\\ {6}\"/>\n      </context>\n      <context name=\"EvalOC5\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CExFactor2\" String=\"\\ {5}\"/>\n      </context>\n      <context name=\"EvalOC6\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CExFactor2\" String=\"\\ {4}\"/>\n      </context>\n      <context name=\"EvalOC8\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Normal Text\" context=\"CExFactor2\" String=\"\\ {2}\"/>\n      </context>\n      \n      <context name=\"CExFactor2\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <DetectChar attribute=\"Biff\" context=\"Biffs\" char=\"%\"/>\n\t      <IncludeRules context=\"CommonCode\" />\n      </context>\n \n      <!-- Comments -->\n      <context name=\"Comments\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"BoldComment\" context=\"#stay\" String=\"\\(*(FIXME|TODO)\\)*\" />\n        <RegExpr attribute=\"BoldComment\" context=\"#stay\" String=\"\\(*(NOTE:)\\)*\" />\n        <RegExpr attribute=\"DivideComment\" context=\"#stay\" String=\"-|=\"/>\n      </context>\n\n      <!-- String Constants -->\n      <context name=\"StringConstants\" attribute=\"ConstantChar\" lineEndContext=\"#pop\">\n\t      <DetectChar attribute=\"ConstantChar\" context=\"#pop\" char=\"'\"/>\n      </context>\n\n      <!-- Compiler Directives -->\n      <context name=\"Directives\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <RegExpr attribute=\"Directive\" context=\"Free\" String=\"[F|f][R|r][E|e][E|e]\"/>\n\t      <RegExpr attribute=\"Directive\" context=\"Exec\" String=\"[E|e][X|x][E|e][C|c]\"/>\n\t      <keyword attribute=\"Directive\" context=\"Directives2\" String=\"directives\"/>\n      </context>\n      <context name=\"Directives2\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <keyword attribute=\"Directive\" context=\"Directives3\" String=\"directives2\"/>\n      </context>\n      <context name=\"Directives3\" attribute=\"Normal Text\" lineEndContext=\"Default\">\n\t      <keyword attribute=\"Directive\" context=\"#stay\" String=\"directives3\"/>\n      </context>\n\n      <!-- Free -->\n      <context name=\"Free\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <RegExpr attribute=\"Directive\" context=\"#pop\" String=\"[POIHFDC ]?/[E|e][N|n][D|d]-[F|f][R|r][E|e][E|e]\"/>\n\t      <IncludeRules context=\"CommonCode\" />\n\t      <DetectChar attribute=\"Biff\" context=\"Biffs\" char=\"%\"/>\n\t      <RegExpr attribute=\"Comment\" context=\"Comments\" String=\"//\"/>\n\t      <keyword attribute=\"Keyword\" context=\"#stay\" String=\"freeopcodes\"/>\n      </context>\n      \n      <!-- Exec -->\n      <context name=\"Exec\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <RegExpr attribute=\"Directive\" context=\"#pop\" String=\"[POIHFDC ]?/[E|e][N|n][D|d]-[E|e][X|x][E|e][C|c]\"/>\n      </context>\n      \n      <context name=\"Biffs\" attribute=\"Biff\" lineEndContext=\"#pop\">\n\t      <keyword attribute=\"Biff\" context=\"#pop\" String=\"biffs\"/>\n\t      <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\".\"/>\n      </context>\n\n      <!-- Stuff common to all code Use as Include -->\n      <context name=\"CommonCode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <IncludeRules context=\"ReservedWords\" />\n\t      <IncludeRules context=\"Indicators\" />\n\t      <DetectChar attribute=\"ConstantChar\" context=\"StringConstants\" char=\"'\"/>\n\t      <Float attribute=\"Float\" context=\"#stay\"/>\n\t      <RegExpr attribute=\"Hex\" context=\"#stay\" String=\"[Xx]'[0-9a-fA-F]{2,}'\"/>\n\t      <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n      </context>\n\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      \n      <!-- Reserved words - Use as include -->\n      <context name=\"Indicators\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?[0-9][0-9]\\)?\"/>\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?1[P|p]\\)?\"/>\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?[H|h|L|l][1-9]\\)?\"/>\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?[L|l|M|m][R|r]\\)?\"/>\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?[O|o][A-G|a-g|V|v]\\)?\"/>\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?[U|u][1-8]\\)?\"/>\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?[K|k][A-N|a-n|P-Y|p-y]\\)?\"/>\n\t      <RegExpr attribute=\"Indicator\" context=\"#stay\" String=\"\\*[I|i][N|n]\\(?[R|r][T|t]\\)?\"/>\n      </context>\n      \n      <!-- Reserved words - Use as include -->\n      <context name=\"ReservedWords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"[\\*|U|u][D|d][A|a][T|t][E|e]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"[\\*|U|u][M|m][O|o][N|n][T|t][H|h]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"[\\*|U|u][Y|y][E|e][A|a][R|r]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"[\\*|U|u][D|d][A|a][Y|y]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\ [P|p][A|a][G|g][E|e][1-7]?\"/>\n\t      <!-- *ALL(X/G) *BLANKS *ON *OFF *NULL *ZERO(s) *HIVAL *LOVAL *PSSR *END *START-->\n\t      <RegExpr attribute=\"Constant\" context=\"#stay\" String=\"\\*([A|a][A|l]{2}[X|x|G|g]?|[B|b][L|l][A|a][N|n][K|k][S|s]?|[O|o][N|n]|[O|o][F|f]{2}|[N|n][U|u][L|l]{2}|[Z|z][E|e][R|r][O|o][S|s]?|[H|h][I|i][V|v][A|a][L|l]|[L|l][O|o][V|v][A|a][L|l]|[P|p][S|s]{2}[R|r]|[E|e][N|n][D|d]|[S|s][T|t][A|a][R|r][T|t])\"/>\n\t      <!-- Date stuff -->\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[C|c][D|d][M|m][Y|y]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[C|c][M|m][D|d][Y|y]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[C|c][Y|y][M|m][D|d]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[D|d][M|m][Y|y]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[E|e][U|u][R|r]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[H|h][M|m][S|s]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[I|i][S|s][O|o]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[J|j][I|i][S|s]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[J|j][O|o][B|b]([R|r][U|u][N|n])?\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*([L|l][O|o][N|n][G|g])?[J|j][U|u][L|l]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[M|m][D|d][Y|y]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[S|s][Y|y][S|s]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[U|u][S|s][A|a]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[Y|y][M|m][D|d]\"/>\n\t      \n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[A|a][L|l][T|t][S|s][E|e][Q|q]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[E|e][Q|q][U|u][A|a][T|t][E|e]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[F|f][I|i][L|l][E|e]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[F|f][T|t][R|r][A|a][N|n][S|s]\"/>\n\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[I|i][L|l][E|e][R|r][P|p][G|g]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[C|c][R|r][T|t][B|b][N|n][D|d][R|r][P|p][G|g]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[C|c][R|r][T|t][R|r][P|p][G|g][M|m][O|o][D|d]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[V|v][0-9][R|r][0-9][M|m][0-9]\"/>\n\t      \n      </context>\n\n      <!-- AnyCode -->\n      <context name=\"AnyCode\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t      <IncludeRules context=\"CommonCode\" />\n      </context>\n      \n      <!-- D -->\n      <context name=\"D\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t      <keyword attribute=\"Keyword\" context=\"#stay\" String=\"dkeywords\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[N|n][O|o][P|p][A|a][S|s]{2}\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[O|o][M|m][I|i][T|t]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[V|v][A|a][R|r][S|s][I|i][Z|z][E|e]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[R|r][I|i][G|g][H|h][T|t][A|a][D|d][J|j]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[S|s][T|t][R|r][I|i][N|n][G|g]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[T|t][R|r][I|i][M|m]\"/>\n\t      <DetectChar attribute=\"Biff\" context=\"Biffs\" char=\"%\"/>\n\t      <IncludeRules context=\"CommonCode\" />\n      </context>\n      \n      <!-- P -->\n      <context name=\"P\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t      <keyword attribute=\"Keyword\" context=\"#stay\" String=\"dkeywords\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[N|n][O|o][P|p][A|a][S|s]{2}\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[O|o][M|m][I|i][T|t]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[V|v][A|a][R|r][S|s][I|i][Z|z][E|e]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[R|r][I|i][G|g][H|h][T|t][A|a][D|d][J|j]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[S|s][T|t][R|r][I|i][N|n][G|g]\"/>\n\t      <RegExpr attribute=\"Reserved\" context=\"#stay\" String=\"\\*[T|t][R|r][I|i][M|m]\"/>\n\t      <DetectChar attribute=\"Biff\" context=\"Biffs\" char=\"%\"/>\n\t      <IncludeRules context=\"CommonCode\" />\n      </context>\n      \n      \n    </contexts>\n    <itemDatas>\n      <itemData name=\"Alert\" \t\t defStyleNum=\"dsAlert\" />\n      <itemData name=\"Normal Text\"       defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keyword\"           defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Biff\"              defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Decimal\"           defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Float\"             defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Hex\"               defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"ConstantChar\"      defStyleNum=\"dsNormal\" color=\"#DD0022\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Constant\"          defStyleNum=\"dsNormal\" color=\"#CC2222\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Reserved\"          defStyleNum=\"dsNormal\" color=\"#BB1133\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Indicator\"         defStyleNum=\"dsNormal\" color=\"#CC0000\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Comment\"           defStyleNum=\"dsComment\"/>\n      <itemData name=\"BoldComment\"       defStyleNum=\"dsNormal\" color=\"#CD853F\" selColor=\"#808080\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"DivideComment\"     defStyleNum=\"dsComment\" bold=\"1\"/>\n      <itemData name=\"Directive\"         defStyleNum=\"dsOthers\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/inform.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- author: Giancarlo Niccolai (giancarlo@niccolai.ws) -->\n<!-- This file is released under GPL license 2.0 or any later version at your choice. -->\n<language name=\"Inform\" version=\"2\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.inf;*.h\" mimetype=\"text/x-inform-src\" author=\"Giancarlo Niccolai (giancarlo@niccolai.ws)\" license=\"GPL\">\n<highlighting>\n   <list name=\"keywords\">\n      <item>if</item>\n      <item>for</item>\n      <item>else</item>\n      <item>box</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>do</item>\n      <item>until</item>\n      <item>font</item>\n      <item>give</item>\n      <item>inversion</item>\n      <item>jump</item>\n      <item>on</item>\n      <item>to</item>\n      <item>move</item>\n      <item>new_line</item>\n      <item>objectloop</item>\n      <item>print</item>\n      <item>print_ret</item>\n      <item>quit</item>\n      <item>read</item>\n      <item>remove</item>\n      <item>restore</item>\n      <item>return</item>\n      <item>rtrue</item>\n      <item>rfalse</item>\n      <item>save</item>\n      <item>spaces</item>\n      <item>spring</item>\n      <item>style</item>\n      <item>switch</item>\n   </list>\n\n   <list name=\"functions\">\n      <item>metaclass</item>\n      <item>parent</item>\n      <item>child</item>\n      <item>children</item>\n      <item>Achieved</item>\n      <item>AddToScope</item>\n      <item>allowpushdir</item>\n      <item>CDefArt</item>\n      <item>ChangeDefault</item>\n      <item>DefArt</item>\n      <item>DoMenu</item>\n      <item>EnglishNumber</item>\n      <item>HasLightSource</item>\n      <item>InDefArt</item>\n      <item>Locale</item>\n      <item>LoopOverScope</item>\n      <item>NextWord</item>\n      <item>NextWordStopped</item>\n      <item>NounDomain</item>\n      <item>ObjectIsUntouchable</item>\n      <item>OffersLight</item>\n      <item>PlaceInScope</item>\n      <item>PlayerTo</item>\n      <item>PrintShortName</item>\n      <item>ScopeWithin</item>\n      <item>SetTime</item>\n      <item>StartDaemon</item>\n      <item>StartTimer</item>\n      <item>StopDaemon</item>\n      <item>StopTimer</item>\n      <item>TestScope</item>\n      <item>TryNumber</item>\n      <item>UnsignedCompare</item>\n      <item>WordAddress</item>\n      <item>WordLenght</item>\n      <item>WriteListFrom</item>\n      <item>YesOrNo</item>\n      <item>ZRegion</item>\n   </list>\n   <list name=\"actions\">\n      <item>Pronouns</item>\n      <item>Quit</item>\n      <item>Restore</item>\n      <item>Save</item>\n      <item>Verify</item>\n      <item>Restart</item>\n      <item>ScriptOn</item>\n      <item>ScriptOff</item>\n      <item>NotifyOn</item>\n      <item>NotifyOff</item>\n      <item>Places</item>\n      <item>Objects</item>\n      <item>Score</item>\n      <item>FullScore</item>\n      <item>Version</item>\n      <item>LMode1</item>\n      <item>LMode2</item>\n      <item>LMode3</item>\n      <item>Inv</item>\n\n\n      <item>Inv</item>\n      <item>InvTall</item>\n      <item>InvWide</item>\n      <item>Take</item>\n      <item>Drop</item>\n      <item>Empty</item>\n      <item>Enter</item>\n      <item>Exit</item>\n      <item>GetOff</item>\n      <item>Go</item>\n      <item>GoIn</item>\n      <item>Look</item>\n      <item>Examine</item>\n      <item>Search</item>\n      <item>Give</item>\n      <item>Show</item>\n      <item>Unlock</item>\n      <item>Lock</item>\n      <item>SwitchOn</item>\n      <item>SwitchOff</item>\n      <item>Open</item>\n      <item>Close</item>\n      <item>Disrobe</item>\n      <item>Wear</item>\n      <item>Eat</item>\n\n      <item>LetGo</item>\n      <item>Receive</item>\n      <item>Insert</item>\n      <item>PutOn</item>\n      <item>Transfer</item>\n      <item>Empty</item>\n      <item>EmptyT</item>\n      <item>GetOff</item>\n      <item>GoIn</item>\n      <item>Listen</item>\n      <item>Taste</item>\n      <item>Touch</item>\n\n      <item>Pull</item>\n      <item>Push</item>\n      <item>Wave</item>\n      <item>Turn</item>\n      <item>PushDir</item>\n      <item>ThrowAt</item>\n      <item>ThrownAt</item>\n      <item>JumpOn</item>\n      <item>Drink</item>\n      <item>Attack</item>\n      <item>Tie</item>\n      <item>Fill</item>\n      <item>Swing</item>\n      <item>Blow</item>\n      <item>Rub</item>\n      <item>Set</item>\n      <item>SetTo</item>\n      <item>Buy</item>\n      <item>Climb</item>\n      <item>Squeeze</item>\n      <item>Climb</item>\n      <item>Burn</item>\n      <item>Cut</item>\n      <item>Dig</item>\n\n      <item>Consult</item>\n      <item>Tell</item>\n      <item>Answer</item>\n      <item>Ask</item>\n      <item>AskFor</item>\n      <item>Kiss</item>\n\n      <item>Sleep</item>\n      <item>Sing</item>\n      <item>WaveHands</item>\n      <item>Swim</item>\n      <item>Sorry</item>\n      <item>Sing</item>\n      <item>Strong</item>\n      <item>Mild</item>\n      <item>Smell</item>\n      <item>Pray</item>\n      <item>Jump</item>\n      <item>Think</item>\n      <item>VagueGo</item>\n      <item>Yes</item>\n      <item>No</item>\n      <item>Sing</item>\n   </list>\n\n   <list name=\"special_vals\" >\n      <item>String</item>\n      <item>Routine</item>\n      <item>bold</item>\n      <item>roman</item>\n      <item>underline</item>\n      <item>fixed</item>\n      <item>nothing</item>\n      <item>true</item>\n      <item>false</item>\n      <item>on</item>\n      <item>off</item>\n      <item>sender</item>\n      <item>self</item>\n      <item>location</item>\n      <item>score</item>\n      <item>action</item>\n      <item>actor</item>\n      <item>noun</item>\n      <item>second</item>\n      <item>the_time</item>\n      <item>consult_from</item>\n      <item>consult_words</item>\n      <item>wn</item>\n      <item>actors_location</item>\n      <item>buffer</item>\n      <item>player</item>\n   </list>\n\n   <list name=\"pragmas\" >\n      <item>Ifdef</item>\n      <item>Ifndef</item>\n      <item>Iftrue</item>\n      <item>Iffalse</item>\n      <item>Ifnot</item>\n      <item>Endif</item>\n      <item>End</item>\n      <item>Abbreviate</item>\n      <item>Array</item>\n      <item>Attribute</item>\n      <item>Constant</item>\n      <item>Default</item>\n      <item>Extend</item>\n      <item>Global</item>\n      <item>Ifnot</item>\n      <item>Iftrue</item>\n      <item>Iffalse</item>\n      <item>Import</item>\n      <item>Include</item>\n      <item>Link</item>\n      <item>Lowstring</item>\n      <item>Message</item>\n      <item>Property</item>\n      <item>Release</item>\n      <item>Replace</item>\n      <item>Serial</item>\n      <item>Switches</item>\n      <item>Statusline</item>\n      <item>score</item>\n      <item>System_file</item>\n      <item>Verb</item>\n   </list>\n\n   <list name=\"inline_pragmas\" >\n      <item>#ifdef</item>\n      <item>#else</item>\n      <item>#ifndef</item>\n      <item>#endif</item>\n   </list>\n\n   <list name=\"operators\">\n      <item>has</item>\n      <item>hasn't</item>\n      <item>in</item>\n      <item>notin</item>\n      <item>provides</item>\n      <item>ofclass</item>\n      <item>or</item>\n   </list>\n\n   <list name=\"ClassDeclOps\">\n      <item>with</item>\n      <item>private</item>\n      <item>has</item>\n   </list>\n\n   <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"TopLevel\">\n         <DetectChar attribute=\"Comment\" context=\"comment\" char=\"!\" />\n         <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n         <RegExpr attribute=\"Function\" context=\"funcdef\" beginRegion=\"reg_function\"\n            String=\"[[]\\s*[a-zA-Z_]+\\w*\" />\n\n         <RegExpr String=\" *object | *class \" attribute=\"Pragma\"\n            context=\"ClassDecl\"\n            insensitive=\"true\" beginRegion=\"reg_class\" column=\"0\"/>\n\n         <keyword attribute=\"Pragma\" context=\"#stay\" String=\"pragmas\" />\n         <keyword attribute=\"Pragma\" context=\"#stay\" String=\"inline_pragmas\" />\n\n         <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"--?>\" />\n         <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[a-zA-Z_]+\\d*\" />\n         <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\$[0-9a-fA-F]{1,4}\" />\n         <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\d+\" />\n      </context>\n\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Comment\" context=\"comment\" char=\"!\" />\n         <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n         <DetectChar attribute=\"Word\" context=\"word\" char=\"'\" />\n         <keyword attribute=\"Pragma\" context=\"#stay\" String=\"inline_pragmas\" />\n         <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"--?>\" />\n         <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n         <keyword attribute=\"Actions\" context=\"#stay\" String=\"actions\" />\n         <keyword attribute=\"PredefFunction\" context=\"#stay\" String=\"functions\" />\n         <keyword attribute=\"Values\" context=\"#stay\" String=\"special_vals\" />\n         <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\" />\n         <RegExpr attribute=\"Actions\" context=\"#stay\" String=\"##[a-zA-Z_]+\\w*\" />\n         <RegExpr attribute=\"OpCode\" context=\"#stay\" String=\"@[a-zA-Z_]+\\w*\" />\n         <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\$[0-9a-fA-F]{1,4}\" />\n         <RegExpr String=\"[a-zA-Z_]+\\w*\" attribute=\"Normal Text\" context=\"#stay\" />\n         <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\d+\" />\n         <DetectChar char=\"{\" attribute=\"Keyword\" context=\"#stay\"\n               beginRegion=\"reg_compound\" />\n         <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#stay\"\n               endRegion=\"reg_compound\" />\n         <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"%&amp;()+-&lt;=&gt;{|}~\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"PropDefVal rules\">\n         <DetectChar attribute=\"Comment\" context=\"comment\" char=\"!\" />\n         <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n         <DetectChar attribute=\"Word\" context=\"word\" char=\"'\" />\n         <DetectChar attribute=\"Function\" context=\"prop_func_def\" char=\"[\" beginRegion=\"reg_prop_def_func\" />\n         <DetectChar attribute=\"Operator\" context=\"#pop\" char=\",\" />\n         <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\$[0-9a-fA-F]{1,4}\" />\n         <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\d+\" />\n      </context>\n\n\n      <context name=\"funcdef\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n         <IncludeRules context=\"Normal\" />\n         <Detect2Chars attribute=\"Function\" context=\"#pop\" char=\"]\" char1=\";\"\n            endRegion=\"reg_function\"/>\n      </context>\n\n     <context name=\"ClassDecl\" attribute=\"Normal Text\" lineEndContext=\"ClassDecl_1\">\n        <IncludeRules context=\"PropDefVal rules\" />\n     </context>\n\n     <context name=\"ClassDecl_1\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <RegExpr String=\"^[\\t ]*has \" attribute=\"Keyword\" context=\"has_decl\" insensitive=\"true\"/>\n         <keyword String=\"ClassDeclOps\" attribute=\"Keyword\" context=\"#stay\" />\n         <RegExpr String=\"[a-zA-Z_]+\\w*\" context = \"prop_def\"\n            attribute=\"Function\"/>\n         <DetectChar char=\";\" context=\"#pop\" attribute=\"Pragma\" endRegion=\"reg_class\"/>\n      </context>\n\n\n      <context attribute=\"Word\" lineEndContext=\"#pop\" name=\"word\">\n         <DetectChar attribute=\"Word\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\">\n         <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n\n      <context name=\"prop_func_def\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <DetectChar context=\"#pop\" char=\"]\" attribute=\"Function\"\n            endRegion=\"reg_prop_func\"/>\n         <IncludeRules context=\"Normal\" />\n      </context>\n\n      <context name=\"prop_def\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n         <DetectChar char=\",\" context=\"#pop\"  attribute=\"Function\"\n            endRegion=\"reg_prop\"/>\n         <DetectChar char=\";\" context=\"#pop#pop#pop\" attribute=\"Pragma\" endRegion=\"reg_class\"/>\n         <DetectChar char=\"[\" context=\"prop_func_def\"  attribute=\"Function\"\n            beginRegion=\"reg_prop_func\"/>\n         <IncludeRules context=\"PropDefVal rules\" />\n      </context>\n\n      <context name=\"has_decl\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n         <DetectChar char=\";\" context=\"#pop#pop#pop\"  attribute=\"Pragma\" endRegion=\"reg_class\"/>\n         <IncludeRules context=\"PropDefVal rules\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\"/>\n\n   </contexts>\n\n   <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Actions\"  defStyleNum=\"dsDataType\" color=\"#E06060\" selColor=\"#400000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Operator\"  defStyleNum=\"dsBaseN\" color=\"#A01060\" selColor=\"#400040\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Number\"  defStyleNum=\"dsDecVal\" color=\"#5050C0\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"OpCode\"  defStyleNum=\"dsDecVal\" color=\"#3015F0\" selColor=\"#000000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Values\"  defStyleNum=\"dsBaseN\" color=\"#7020F0\" selColor=\"#400000\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Pragma\"  defStyleNum=\"dsOthers\" color=\"#109010\" selColor=\"#400000\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"PredefFunction\"  defStyleNum=\"dsFunction\" />\n      <itemData name=\"Function\"        defStyleNum=\"dsFunction\" />\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\" color=\"#707070\" selColor=\"#ffffff\" bold=\"0\" italic=\"1\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\" color=\"#007000\" selColor=\"#007000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Word\"  defStyleNum=\"dsString\" color=\"#007000\" selColor=\"#007000\" bold=\"0\" italic=\"1\"/>\n   </itemDatas>\n</highlighting>\n<general>\n   <comments>\n      <comment name=\"singleLine\" start=\"!\" />\n   </comments>\n   <keywords casesensitive=\"1\" />\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ini.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"INI Files\" section=\"Configuration\" extensions=\"*.ini;*.pls;*.kcfgc\" mimetype=\"\" version=\"5\" kateversion=\"2.4\" author=\"Jan Janssen (medhefgo@web.de)\" license=\"LGPL\">\n\n<highlighting>\n<list name=\"keywords\">\n<item>On</item>\n<item>Off</item>\n<item>Default</item>\n<item>Defaults</item>\n<item>Localhost</item>\n<item>Null</item>\n<item>True</item>\n<item>False</item>\n<item>Yes</item>\n<item>No</item>\n<item>Normal</item>\n\n<!-- PHP Keywords -->\n<item>E_ALL</item>\n<item>E_ERROR</item>\n<item>E_WARNING</item>\n<item>E_PARSE</item>\n<item>E_NOTICE</item>\n<item>E_STRICT</item>\n<item>E_CORE_ERROR</item>\n<item>E_CORE_WARNING</item>\n<item>E_COMPILE_ERROR</item>\n<item>E_COMPILE_WARNING</item>\n<item>E_USER_ERROR</item>\n<item>E_USER_WARNING</item>\n<item>E_USER_NOTICE</item>\n</list>\n\n<contexts>\n <context name=\"ini\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n  <RangeDetect attribute=\"Section\" context=\"#stay\" char=\"[\"  char1=\"]\" beginRegion=\"Section\" endRegion=\"Section\" />\n  <DetectChar attribute=\"Assignment\" context=\"Value\" char=\"=\" />\n  <DetectChar char=\";\" attribute=\"Comment\" context=\"Comment\" firstNonSpace=\"true\" />\n  <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\" firstNonSpace=\"true\" />\n </context>\n\n <context name=\"Value\" attribute=\"Value\" lineEndContext=\"#pop\" >\n  <Float attribute=\"Float\" />\n  <Int attribute=\"Int\" />\n  <keyword attribute=\"Keyword\" String=\"keywords\" />\n </context>\n\n <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n  <DetectSpaces />\n  <IncludeRules context=\"##Alerts\" />\n  <DetectIdentifier />\n </context>\n</contexts>\n\n\n<itemDatas>\n <itemData name=\"Normal Text\" defStyleNum=\"dsDataType\" />\n <itemData name=\"Section\" defStyleNum=\"dsKeyword\" />\n <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n <itemData name=\"Assignment\" defStyleNum=\"dsOthers\" />\n <itemData name=\"Value\" defStyleNum=\"dsString\" />\n <itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n <itemData name=\"Int\" defStyleNum=\"dsDecVal\" />\n <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n</itemDatas>\n</highlighting>\n\n\n<general>\n <comments>\n  <comment name=\"singleLine\" start=\"#\" />\n  <comment name=\"singleLine\" start=\";\" />\n </comments>\n <keywords casesensitive=\"0\" />\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/intelhex.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Intel HEX\" section=\"Other\" extensions=\"*.hex;*.ihx\" version=\"1\" kateversion=\"5.0\" author=\"Miklos Marton (martonmiklosqdev@gmail.com)\" license=\"MIT\">\n  <highlighting>\n    <contexts>\n      <context name=\"Malformed\" attribute=\"Malformed\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" context=\"Startcode\"/>\n      </context>\n      <context name=\"Startcode\" attribute=\"Startcode\" lineEndContext=\"Malformed\">\n          <RegExpr String=\"[0-9A-F]{2}\" context=\"Bytecount\"/>\n      </context>\n      <context name=\"Bytecount\" attribute=\"Bytecount\" lineEndContext=\"Malformed\">\n          <RegExpr String=\"[0-9A-F]{4}\" context=\"Address\"/>\n      </context>\n      <context name=\"Address\" attribute=\"Address\" lineEndContext=\"Malformed\">\n        <RegExpr String=\"(00|01|02|03|04|05)\" context=\"RecordType\"/>\n        <RegExpr String=\"([1-9]|(06|07|08|09))\" context=\"Malformed\"/>\n      </context>\n      <context name=\"RecordType\" attribute=\"RecordType\" lineEndContext=\"Malformed\">\n        <RegExpr String=\"[0-9A-F]{2}$\" context=\"Checksum\"/>\n        <RegExpr String=\"[0-9A-F]{2}\" context=\"Data\"/>\n      </context>\n      <context name=\"Data\" attribute=\"Data\" lineEndContext=\"Malformed\">\n        <RegExpr String=\"[0-9A-F]{2}$\" context=\"Checksum\"/>\n      </context>\n      <context name=\"Checksum\" attribute=\"Checksum\" lineEndContext=\"Malformed\">\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Malformed\" defStyleNum=\"dsAlert\" spellChecking=\"false\"/>\n      <itemData name=\"Startcode\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n      <itemData name=\"Bytecount\" defStyleNum=\"dsCommentVar\" spellChecking=\"false\"/>\n      <itemData name=\"Address\" defStyleNum=\"dsConstant\" spellChecking=\"false\"/>\n      <itemData name=\"RecordType\" defStyleNum=\"dsAnnotation\" spellChecking=\"false\"/>\n      <itemData name=\"Data\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Checksum\" defStyleNum=\"dsAlert\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n</language>\n<!-- kate: indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/isocpp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY int \"(?:[0-9](?:'?[0-9]+)*)\">\n    <!ENTITY hex_int \"(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f]+)*)\">\n    <!ENTITY exp_float \"(?:[eE][+-]?&int;)\">\n    <!ENTITY exp_hexfloat \"(?:[pP][-+]?&int;)\">\n\n    <!ENTITY separators \",;\">\n    <!ENTITY ns_punctuators \"(){}[].+-/*&#37;=&lt;&gt;!|&amp;?~^\">\n    <!ENTITY punctuators \":&ns_punctuators;\">\n\n    <!-- printf-like format strings conversion specifiers -->\n    <!ENTITY printf_like \"&#37;(?:ll?|[zjtL]|hh?)?[diouxXeEfFgGaAcspn&#37;]\">\n\n    <!ENTITY ispphash \"(?:#|&#37;\\:|\\?\\?=)\">\n    <!ENTITY pphash \"&ispphash;\\s*\">\n    <!ENTITY ppemptypp \"($|(?=(/\\*([^*]|\\*[^/])*\\*/\\s*)?(//.*)?$))\">\n    <!ENTITY ppcond0 \"\\s+(?:0|false)\\s*&ppemptypp;\">\n    <!ENTITY ppcond1 \"\\s+(?:1|true)\\s*(\\|\\|([^/]|/[^*/])+)?&ppemptypp;\">\n]>\n<language\n    name=\"ISO C++\"\n    section=\"Sources\"\n    version=\"17\"\n    kateversion=\"5.0\"\n    indenter=\"cstyle\"\n    style=\"C++\"\n    mimetype=\"text/x-c++src;text/x-c++hdr;text/x-chdr\"\n    extensions=\"*.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;*.moc\"\n    author=\"Alex Turbov (i.zaufi@gmail.com)\"\n    license=\"LGPL\"\n    priority=\"6\"\n  >\n  <!--\n    Complete list of changes by Alex Turbov (I.zaufi@gmail.com)\n    can be found at:\n    http://kde-files.org/content/show.php?content=90660\n  -->\n  <highlighting>\n    <!-- https://en.cppreference.com/w/cpp/keyword -->\n    <list name=\"controlflow\">\n      <item>break</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>throw</item>\n      <item>try</item>\n      <item>while</item>\n    </list>\n\n    <list name=\"keywords\">\n      <item>alignof</item>\n      <item>alignas</item>\n      <item>asm</item>\n      <item>auto</item>\n      <item>class</item>\n      <item>consteval</item> <!-- C++20 -->\n      <item>constexpr</item>\n      <item>const_cast</item>\n      <item>decltype</item>\n      <item>delete</item>\n      <item>dynamic_cast</item>\n      <item>enum</item>\n      <item>explicit</item>\n      <item>false</item>\n      <item>final</item> <!-- According N3272 -->\n      <item>friend</item>\n      <item>inline</item>\n      <item>namespace</item>\n      <item>new</item>\n      <item>noexcept</item>\n      <item>nullptr</item>\n      <item>operator</item>\n      <item>override</item> <!-- According N3272 -->\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>reinterpret_cast</item>\n      <item>sizeof</item>\n      <item>static_assert</item>\n      <item>static_cast</item>\n      <item>struct</item>\n      <item>template</item>\n      <item>this</item>\n      <item>true</item>\n      <item>typedef</item>\n      <item>typeid</item>\n      <item>typename</item>\n      <item>union</item>\n      <item>using</item>\n      <item>virtual</item>\n      <!-- Alternative operators (see 2.12) -->\n      <item>and</item>\n      <item>and_eq</item>\n      <item>bitand</item>\n      <item>bitor</item>\n      <item>compl</item>\n      <item>not</item>\n      <item>not_eq</item>\n      <item>or</item>\n      <item>or_eq</item>\n      <item>xor</item>\n      <item>xor_eq</item>\n      <!-- Concept -->\n      <item>concept</item>\n      <item>requires</item>\n      <!-- TM TS -->\n      <!-- <item>atomic_cancel</item>\n      <item>atomic_commit</item>\n      <item>atomic_noexcept</item>\n      <item>synchronized</item>\n      <item>transaction_safe</item>\n      <item>transaction_safe_dynamic</item> -->\n      <!-- module -->\n      <item>import</item>\n      <item>module</item>\n      <item>export</item> <!-- Unused but reserved, keyword since c++20 -->\n      <!-- coroutine -->\n      <item>co_await</item>\n      <item>co_return</item>\n      <item>co_yield</item>\n      <!-- reflexion TS -->\n      <!-- <item>reflexpr</item> -->\n    </list>\n    <!-- This keyword may appear in InternalsNS context. For example in code:\n      details::some_class::template some_templated_static();\n      and it should be displayed as keyword, not like part of details namespace...\n      -->\n    <list name=\"template\">\n      <item>template</item>\n    </list>\n\n    <!-- 7.6 Attributes -->\n    <!-- http://en.cppreference.com/w/cpp/language/attributes -->\n    <list name=\"attributes\">\n      <!-- C++11 -->\n      <item>noreturn</item>\n      <item>carries_dependency</item>\n      <!-- C++14 -->\n      <item>deprecated</item>\n      <!-- C++17 -->\n      <item>fallthrough</item>\n      <item>nodiscard</item>\n      <item>maybe_unused</item>\n      <!-- C++20 -->\n      <item>likely</item>\n      <item>unlikely</item>\n      <item>no_unique_address</item>\n      <!-- TM TS -->\n      <!-- <item>optimize_for_synchronized</item> -->\n    </list>\n    <!-- This keyword may appear in Attribute context. For example in code:\n    [[using CC: opt(1), debug]]\n    and it should be displayed as keyword, not like part of attribute...\n    -->\n    <list name=\"using\">\n      <item>using</item>\n    </list>\n\n    <!-- https://en.cppreference.com/w/cpp/keyword -->\n    <list name=\"types\">\n      <item>bool</item>\n      <item>char</item>\n      <item>char8_t</item> <!-- C++20 -->\n      <item>char16_t</item>\n      <item>char32_t</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>short</item>\n      <item>signed</item>\n      <item>unsigned</item>\n      <item>void</item>\n      <item>int8_t</item>\n      <item>int16_t</item>\n      <item>int32_t</item>\n      <item>int64_t</item>\n      <item>uint8_t</item>\n      <item>uint16_t</item>\n      <item>uint32_t</item>\n      <item>uint64_t</item>\n      <item>int_least8_t</item>\n      <item>int_least16_t</item>\n      <item>int_least32_t</item>\n      <item>int_least64_t</item>\n      <item>uint_least8_t</item>\n      <item>uint_least16_t</item>\n      <item>uint_least32_t</item>\n      <item>uint_least64_t</item>\n      <item>int_fast8_t</item>\n      <item>int_fast16_t</item>\n      <item>int_fast32_t</item>\n      <item>int_fast64_t</item>\n      <item>uint_fast8_t</item>\n      <item>uint_fast16_t</item>\n      <item>uint_fast32_t</item>\n      <item>uint_fast64_t</item>\n      <item>size_t</item>\n      <item>ssize_t</item>\n      <item>wchar_t</item>\n      <item>intptr_t</item>\n      <item>uintptr_t</item>\n      <item>intmax_t</item>\n      <item>uintmax_t</item>\n      <item>ptrdiff_t</item>\n      <item>sig_atomic_t</item>\n      <item>wint_t</item>\n      <item>va_list</item>\n      <item>FILE</item>\n      <item>fpos_t</item>\n      <item>time_t</item>\n    </list>\n    <list name=\"modifiers\">\n      <item>const</item>\n      <item>extern</item>\n      <item>mutable</item>\n      <item>register</item> <!-- The keyword is unused and reserved (c++17) -->\n      <item>static</item>\n      <item>thread_local</item>\n      <item>volatile</item>\n    </list>\n    <!-- http://en.cppreference.com/w/cpp/preprocessor/replace -->\n    <list name=\"StdMacros\">\n      <item>__DATE__</item>\n      <item>__FILE__</item>\n      <item>__LINE__</item>\n      <item>__STDCPP_DEFAULT_NEW_ALIGNMENT__</item>\n      <item>__STDCPP_STRICT_POINTER_SAFETY__</item>\n      <item>__STDCPP_THREADS__</item>\n      <item>__STDC_HOSTED__</item>\n      <item>__STDC_ISO_10646__</item>\n      <item>__STDC_MB_MIGHT_NEQ_WC__</item>\n      <item>__STDC_VERSION__</item>\n      <item>__STDC__</item>\n      <item>__TIME__</item>\n      <item>__cplusplus</item>\n      <item>__func__</item>\n      <item>assert</item>\n      <item>_Pragma</item>\n      <!-- C++17 -->\n      <item>__has_include</item>\n      <!-- C++20 -->\n      <item>__has_cpp_attribute</item>\n    </list>\n    <list name=\"InMacro\">\n      <item>__VA_ARGS__</item>\n      <item>__VA_OPT__</item>\n    </list>\n    <list name=\"preprocessorIf\">\n      <item>if</item>\n    </list>\n    <list name=\"preprocessorIfDef\">\n      <item>ifdef</item>\n      <item>ifndef</item>\n    </list>\n    <list name=\"preprocessorElseIf\">\n      <item>elif</item>\n    </list>\n    <list name=\"preprocessorElse\">\n      <item>else</item>\n    </list>\n    <list name=\"preprocessorEndIf\">\n      <item>endif</item>\n    </list>\n    <list name=\"preprocessorDefine\">\n      <item>cmakedefine01</item>\n      <item>cmakedefine</item>\n      <item>define</item>\n    </list>\n    <list name=\"preprocessorInclude\">\n      <item>include</item>\n    </list>\n    <list name=\"preprocessorOther\">\n      <item>error</item>\n      <item>line</item>\n      <item>pragma</item>\n      <item>undef</item>\n      <item>warning</item>\n    </list>\n\n    <contexts>\n      <context name=\"Main\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <!-- Match scope regions -->\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"&lt;\" char1=\"%\" beginRegion=\"Brace1\" /> <!-- Digraph: { -->\n        <Detect2Chars attribute=\"Symbol\" context=\"#stay\" char=\"%\" char1=\"&gt;\" endRegion=\"Brace1\" /> <!-- Digraph: } -->\n        <!-- Detect attributes -->\n        <Detect2Chars attribute=\"Symbol\" context=\"Attribute\" char=\"[\" char1=\"[\" />\n        <StringDetect attribute=\"Symbol\" context=\"Attribute\" String=\"&lt;:&lt;:\" /> <!-- Digraph: [[ -->\n        <!-- Match numbers -->\n        <RegExpr attribute=\"Decimal\" context=\"Number\" String=\"\\.?[0-9]\" lookAhead=\"true\" />\n        <!-- Match comments -->\n        <IncludeRules context=\"match comments and region markers\" />\n        <!-- Match keywords -->\n        <IncludeRules context=\"match keywords\" />\n        <!-- Match string literals -->\n        <IncludeRules context=\"match string\" />\n        <!-- Match GCC extensions -->\n        <IncludeRules context=\"DetectGccExtensions##GCCExtensions\" />\n        <!-- Match most used namespaces and styles -->\n        <StringDetect attribute=\"Standard Classes\" context=\"Standard Classes\" String=\"std::\" />\n        <StringDetect attribute=\"Boost Stuff\" context=\"Boost Stuff\" String=\"boost::\" />\n        <StringDetect attribute=\"Boost Stuff\" context=\"Boost Stuff\" String=\"BOOST_\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS\" String=\"detail::\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS\" String=\"details::\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS\" String=\"aux::\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS\" String=\"internals::\" />\n        <IncludeRules context=\"match identifier\" />\n        <!-- Match preprocessor directives -->\n        <RegExpr attribute=\"Preprocessor\" context=\"AfterHash\" String=\"&ispphash;\" lookAhead=\"true\" />\n        <!-- Match punctuators -->\n        <AnyChar attribute=\"Separator Symbol\" context=\"#stay\" String=\"&separators;\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"&punctuators;\" />\n        <!-- Match invalid symbols -->\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"$@`\" />\n      </context>\n\n      <context name=\"match comments\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Comment\" context=\"MatchComment\" char=\"/\" char1=\"/\" lookAhead=\"true\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MatchComment\" char=\"/\" char1=\"*\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"MatchComment\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop!Comment 1\" char=\"/\" char1=\"/\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop!Comment 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\" />\n      </context>\n\n      <context name=\"match comments and region markers\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Comment\" context=\"MatchCommentAndRegionMarkers\" char=\"/\" char1=\"/\" lookAhead=\"true\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MatchCommentAndRegionMarkers\" char=\"/\" char1=\"*\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"MatchCommentAndRegionMarkers\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <StringDetect attribute=\"Region Marker\" context=\"#pop!Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"#pop!Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n        <IncludeRules context=\"MatchComment\" />\n      </context>\n\n      <context name=\"match keywords\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <WordDetect attribute=\"Keyword\" context=\"CheckUDLOperator\" String=\"operator\" />\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlflow\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n      </context>\n\n      <context name=\"match string\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <Detect2Chars attribute=\"String\" context=\"String32\" char=\"U\" char1=\"&quot;\" />\n        <Detect2Chars attribute=\"String\" context=\"String16\" char=\"u\" char1=\"&quot;\" />\n        <Detect2Chars attribute=\"String\" context=\"String16\" char=\"L\" char1=\"&quot;\" />\n        <StringDetect attribute=\"String\" context=\"String8\" String=\"u8&quot;\" />\n        <Detect2Chars attribute=\"String\" context=\"RawString\" char=\"R\" char1=\"&quot;\" />\n        <StringDetect attribute=\"String\" context=\"RawString\" String=\"uR&quot;\" />\n        <StringDetect attribute=\"String\" context=\"RawString\" String=\"UR&quot;\" />\n        <StringDetect attribute=\"String\" context=\"RawString\" String=\"LR&quot;\" />\n        <StringDetect attribute=\"String\" context=\"RawString\" String=\"u8R&quot;\" />\n        <DetectChar attribute=\"Char\" context=\"Char8 Literal\" char=\"'\" />\n        <Detect2Chars attribute=\"Char\" context=\"Char16 Literal\" char=\"L\" char1=\"'\" />\n        <Detect2Chars attribute=\"Char\" context=\"Char16 Literal\" char=\"u\" char1=\"'\" />\n        <Detect2Chars attribute=\"Char\" context=\"Char32 Literal\" char=\"U\" char1=\"'\" />\n        <StringDetect attribute=\"Char\" context=\"Char8 Literal\" String=\"u8'\" />\n      </context>\n\n      <context name=\"match identifier\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <keyword attribute=\"Type Modifiers\" context=\"#stay\" String=\"modifiers\" />\n        <keyword attribute=\"Standard Macros\" context=\"#stay\" String=\"StdMacros\" />\n        <RegExpr attribute=\"Internals\" context=\"#stay\" String=\"_[a-zA-Z0-9_]+|[a-zA-Z][a-zA-Z0-9_]*__\\b\" />\n        <RegExpr attribute=\"Data Members (m_*)\" context=\"#stay\" String=\"m_[a-zA-Z0-9_]+|[a-z][a-zA-Z0-9_]*_\\b\" />\n        <RegExpr attribute=\"Globals (g_*)\" context=\"#stay\" String=\"g_[a-zA-Z0-9_]+\" />\n        <RegExpr attribute=\"Statics (s_*)\" context=\"#stay\" String=\"s_[a-zA-Z0-9_]+\" />\n        <RegExpr attribute=\"CONSTS/MACROS\" context=\"#stay\" String=\"[A-Z][A-Z0-9_]{2,}\\b\" />\n        <RegExpr attribute=\"Types (*_t/*_type)\" context=\"#stay\" String=\"[a-zA-Z][a-zA-Z0-9_]*_t(ype)?\\b\" />\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"Number\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Float\" context=\"FloatSuffix\" String=\"\\.&int;&exp_float;?|&int;(?:&exp_float;|\\.&int;?&exp_float;?)|0[xX](?:\\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\\.&hex_int;?&exp_hexfloat;?))\" />\n        <IncludeRules context=\"Integer\" />\n      </context>\n\n      <context name=\"Integer\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Hex\" context=\"IntSuffix\" String=\"0[xX]&hex_int;\" />\n        <RegExpr attribute=\"Binary\" context=\"IntSuffix\" String=\"0[Bb][01](?:'?[01]+)*\" />\n        <RegExpr attribute=\"Octal\" context=\"IntSuffix\" String=\"0(?:'?[0-7]+)+\" />\n        <RegExpr attribute=\"Decimal\" context=\"IntSuffix\" String=\"0(?![xXbB0-9])|[1-9](?:'?[0-9]+)*\" />\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\"[._0-9A-Za-z']+\" />\n      </context>\n\n      <context name=\"IntSuffix\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"NumericSuffixError\">\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"'\" />\n        <AnyChar attribute=\"Error\" context=\"#pop!IntSuffixPattern\" String=\"uUlLimunshyd_\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"IntSuffixPattern\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"NumericSuffixError\">\n        <RegExpr attribute=\"Standard Suffix\" context=\"NumericSuffixError\" String=\"[Uu][Ll]{0,2}|[Ll]{0,2}[Uu]?\" />\n        <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->\n        <RegExpr attribute=\"Standard Classes\" context=\"NumericSuffixError\" String=\"(?:i[fl]?|min|[mun]?s|[hyd])\\b\" />\n        <DetectChar attribute=\"Error\" context=\"#pop!NumericUserSuffixPattern\" char=\"_\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"FloatSuffix\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"NumericSuffixError\">\n        <AnyChar attribute=\"Standard Suffix\" context=\"NumericSuffixError\" String=\"fFlL\" />\n        <!-- https://en.cppreference.com/w/cpp/language/user_literal#Standard_library -->\n        <RegExpr attribute=\"Standard Classes\" context=\"NumericSuffixError\" String=\"(?:i[fl]?|min|[mun]?s|h)\\b\" />\n        <DetectChar attribute=\"Error\" context=\"#pop!NumericUserSuffixPattern\" char=\"_\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"NumericUserSuffixPattern\" attribute=\"Error\" lineEndContext=\"#pop#pop\">\n        <!--\n        http://en.cppreference.com/w/cpp/language/user_literal#Notes\n        Due to maximal munch, user-defined integer and floating point literals ending in\n        p, P, (since C++17) e and E, when followed by the operators + or -,\n        must be separated from the operator with whitespace or parentheses in the source\n        -->\n        <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"_[eEpP][+-]\" />\n        <RegExpr attribute=\"UDL Numeric Suffix\" context=\"NumericSuffixError\" String=\"_[_[:alnum:]]*\" />\n      </context>\n\n      <context name=\"NumericSuffixError\" attribute=\"Error\" lineEndContext=\"#pop#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop\">\n        <RegExpr attribute=\"Error\" context=\"#pop#pop#pop\" String=\"\\.[_0-9A-Za-z]*|[_0-9A-Za-z]+\" />\n      </context>\n\n      <context name=\"CheckUDLOperator\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"String\" context=\"UDLOperatorName\" char=\"&quot;\" char1=\"&quot;\" />\n      </context>\n\n      <context name=\"UDLOperatorName\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!IdentifierError\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Normal Text\" context=\"#pop#pop\" String=\"_[_[:alnum:]]*\\b\" />\n      </context>\n\n      <context name=\"IdentifierError\" attribute=\"Error\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\".[^\\s()]*\" />\n      </context>\n\n\n      <context name=\"Char8 Literal\" attribute=\"Char\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"Char Literal Close\">\n        <RegExpr attribute=\"String Char\" context=\"Char Literal Close\" String=\"\\\\(?:[tnvbrfa'&quot;\\\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"'\" />\n        <RegExpr attribute=\"Char\" context=\"Char Literal Close\" String=\".\" />\n      </context>\n\n      <context name=\"Char16 Literal\" attribute=\"Char\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"Char Literal Close\">\n        <RegExpr attribute=\"String Char\" context=\"Char Literal Close\" String=\"\\\\(?:[tnvbrfa'&quot;\\\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4})\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"'\" />\n        <RegExpr attribute=\"Char\" context=\"Char Literal Close\" String=\".\" />\n      </context>\n\n      <context name=\"Char32 Literal\" attribute=\"Char\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"Char Literal Close\">\n        <RegExpr attribute=\"String Char\" context=\"Char Literal Close\" String=\"\\\\(?:[tnvbrfa'&quot;\\\\?]|[0-7]{1,3}|x[0-9A-Fa-f]{1,8}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})\" />\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"'\" />\n        <RegExpr attribute=\"Char\" context=\"Char Literal Close\" String=\".\" />\n      </context>\n\n      <context name=\"Char Literal Close\" attribute=\"Error\" lineEndContext=\"#pop#pop\">\n        <DetectChar attribute=\"Char\" context=\"#pop#pop\" char=\"'\" />\n      </context>\n\n\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"string normal char\" />\n        <RegExpr attribute=\"String Char\" context=\"StringNoHex\" String=\"\\\\x[0-9A-Fa-f]{1,8}\" />\n        <IncludeRules context=\"string special char\" />\n      </context>\n\n      <context name=\"String8\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"string normal char\" />\n        <RegExpr attribute=\"String Char\" context=\"StringNoHex\" String=\"\\\\x[0-9A-Fa-f]{1,2}\" />\n        <IncludeRules context=\"string special char\" />\n      </context>\n\n      <context name=\"String16\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"string normal char\" />\n        <RegExpr attribute=\"String Char\" context=\"StringNoHex\" String=\"\\\\x[0-9A-Fa-f]{1,4}\" />\n        <IncludeRules context=\"string special char\" />\n      </context>\n\n      <context name=\"String32\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"string normal char\" />\n        <RegExpr attribute=\"String Char\" context=\"StringNoHex\" String=\"\\\\x[0-9A-Fa-f]{1,8}\" />\n        <IncludeRules context=\"string special char\" />\n      </context>\n\n      <context name=\"StringNoHex\" attribute=\"Error\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\"[0-9A-Fa-f]{1,}\" />\n      </context>\n\n      <context name=\"string special char\" attribute=\"String\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\(?:[tnvbrfa'&quot;\\\\?]|[0-7]{1,3}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})|&printf_like;\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\\\(?:u[^&quot;]{0,3}|U[^&quot;]{0,7}|.)\" />\n        <LineContinue attribute=\"String\" context=\"#stay\" />\n      </context>\n\n      <context name=\"string normal char\" attribute=\"String\" lineEndContext=\"#pop\">\n        <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->\n        <RegExpr attribute=\"String\" context=\"#stay\" String=\"[^%\\\\&quot;]+\" />\n        <DetectChar attribute=\"String\" context=\"UDLStringSuffix\" char=\"&quot;\" />\n      </context>\n\n      <context name=\"UDLStringSuffix\" attribute=\"String\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\" lineEndContext=\"#pop#pop\">\n        <WordDetect attribute=\"Standard Classes\" context=\"#pop#pop\" String=\"sv\" />\n        <WordDetect attribute=\"Standard Classes\" context=\"#pop#pop\" String=\"s\" />\n        <RegExpr attribute=\"UDL String Suffix\" context=\"#pop#pop\" String=\"_[_0-9A-Za-z]*\\b\" />\n      </context>\n\n\n      <context name=\"Attribute\" attribute=\"Attribute\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <keyword attribute=\"Standard Attribute\" context=\"#stay\" String=\"attributes\" />\n        <Detect2Chars attribute=\"Symbol\" context=\"#pop\" char=\"]\" char1=\"]\" />\n        <StringDetect attribute=\"Symbol\" context=\"#pop\" String=\":&gt;:&gt;\" /> <!-- Digraph: ]] -->\n        <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"&punctuators;\" />\n        <!-- Attributes may contain some text: [[deprecated(\"Reason text\")]] -->\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <AnyChar attribute=\"Decimal\" context=\"Integer\" String=\"0123456789\" lookAhead=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"AttributeNamespace\" String=\"using\" />\n        <IncludeRules context=\"DetectGccAttributes##GCCExtensions\" />\n        <RegExpr attribute=\"CONSTS/MACROS\" context=\"#stay\" String=\"[A-Z][A-Z0-9_]{2,}\\b\" />\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"Attribute In PP\" attribute=\"Attribute\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"InPreprocessor\" />\n        <IncludeRules context=\"Attribute\" />\n      </context>\n\n      <context name=\"AttributeNamespace\" attribute=\"Attribute\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces />\n        <IncludeRules context=\"DetectNamespaceGccAttributes##GCCExtensions\" />\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"RawString\" attribute=\"String\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!LineError\">\n        <RegExpr attribute=\"String\" context=\"#pop!InRawString\" String=\"([^\\(]{0,16})\\(\" />\n      </context>\n\n      <context name=\"InRawString\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->\n        <RegExpr attribute=\"String\" context=\"#stay\" String=\"[^%)]+\" />\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"&printf_like;\" />\n        <StringDetect attribute=\"String\" context=\"#pop\" String=\")%1&quot;\" dynamic=\"true\"/>\n      </context>\n\n      <context name=\"Region Marker\" attribute=\"Region Marker\" lineEndContext=\"#pop\" />\n\n      <context name=\"DetectNSEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"template\" />\n        <DetectIdentifier context=\"#stay\" />\n        <AnyChar attribute=\"Separator Symbol\" context=\"#pop\" String=\"&separators;\" />\n        <AnyChar attribute=\"Symbol\" context=\"#pop\" String=\"&ns_punctuators; &#9;\" />\n      </context>\n\n      <context name=\"Standard Classes\" attribute=\"Standard Classes\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"DetectNSEnd\" />\n      </context>\n\n      <context name=\"Boost Stuff\" attribute=\"Boost Stuff\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"DetectNSEnd\" />\n      </context>\n\n      <context name=\"InternalsNS\" attribute=\"Internals\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"DetectNSEnd\" />\n      </context>\n\n      <context name=\"Standard Classes In PP\" attribute=\"Standard Classes\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"InPreprocessor\" />\n        <IncludeRules context=\"DetectNSEnd\" />\n      </context>\n\n      <context name=\"Boost Stuff In PP\" attribute=\"Boost Stuff\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"InPreprocessor\" />\n        <IncludeRules context=\"DetectNSEnd\" />\n      </context>\n\n      <context name=\"InternalsNS In PP\" attribute=\"Internals\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"InPreprocessor\" />\n        <IncludeRules context=\"DetectNSEnd\" />\n      </context>\n\n      <context name=\"Comment 1\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Error\" context=\"#stay\" />\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"Comment 2\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <LineContinue attribute=\"Comment\" context=\"#stay\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\" />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"AfterHash\" attribute=\"Error\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!AfterHashLineError\">\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!PreprocessorCmd\" String=\"&pphash;(?=.)\" firstNonSpace=\"true\" />\n      </context>\n\n      <context name=\"AfterHashLineError\" attribute=\"Region Marker\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Error\" context=\"#stay\" />\n        <RegExpr attribute=\"Error\" context=\"#pop!LineError\" String=\"[^\\\\]+\" />\n        <!-- for auto-completion in Kate editor -->\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorInclude\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorIfDef\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorIf\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorElseIf\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorElse\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorEndIf\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorOther\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!LineError\" String=\"preprocessorDefine\" />\n      </context>\n\n      <context name=\"LineError\" attribute=\"Error\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Error\" context=\"#stay\" />\n      </context>\n\n      <context name=\"PreprocessorCmd\" attribute=\"Error\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!AfterHashLineError\">\n        <keyword attribute=\"Preprocessor\" context=\"#pop!Include\" String=\"preprocessorInclude\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!PreprocessorIfDef\" String=\"preprocessorIfDef\" beginRegion=\"PP\" lookAhead=\"true\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!PreprocessorIf\" String=\"preprocessorIf\" beginRegion=\"PP\" lookAhead=\"true\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!PreprocessorIf\" String=\"preprocessorElseIf\" endRegion=\"PP\" beginRegion=\"PP\" lookAhead=\"true\" />\n        <keyword attribute=\"Preprocessor\" context=\"PreprocessorEndOfLineSpace\" String=\"preprocessorElse\" endRegion=\"PP\" beginRegion=\"PP\" />\n        <keyword attribute=\"Preprocessor\" context=\"PreprocessorEndOfLineSpace\" String=\"preprocessorEndIf\" endRegion=\"PP\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!Preprocessor\" String=\"preprocessorOther\" />\n        <keyword attribute=\"Preprocessor\" context=\"#pop!Define\" String=\"preprocessorDefine\" />\n        <!-- GCC extension -->\n        <WordDetect attribute=\"Preprocessor\" context=\"#pop!Include\" String=\"include_next\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!Preprocessor\" String=\"[0-9]+\" />\n      </context>\n\n      <context name=\"Include\" attribute=\"Preprocessor\" lineEndContext=\"#pop\" >\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\" />\n        <RangeDetect attribute=\"Prep. Lib\" context=\"PreprocessorEndOfLineSpace\" char=\"&quot;\" char1=\"&quot;\" />\n        <RangeDetect attribute=\"Prep. Lib\" context=\"PreprocessorEndOfLineSpace\" char=\"&lt;\" char1=\"&gt;\" />\n        <IncludeRules context=\"Preprocessor\" />\n      </context>\n\n      <context name=\"PreprocessorIfDef\" attribute=\"Preprocessor\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!LineError\">\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!Preprocessor\" String=\"\\w+\\s+([_A-Za-z][A-Za-z0-9]*\\s*|(?=//|/\\*))\" />\n      </context>\n\n      <context name=\"PreprocessorIf\" attribute=\"Preprocessor\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!LineError\">\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!Inscoped\" String=\"\\w+&ppcond1;\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!Outscoped\" String=\"\\w+&ppcond0;\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!Preprocessor\" String=\"\\w+\\s+(?=[^\\s])\" />\n      </context>\n\n      <context name=\"PreprocessorEndOfLineSpace\" attribute=\"Preprocessor\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop!LineError\">\n        <DetectSpaces />\n        <IncludeRules context=\"match comments\" />\n      </context>\n\n      <context name=\"Preprocessor\" attribute=\"Preprocessor\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\" />\n        <keyword attribute=\"Standard Macros\" context=\"#stay\" String=\"StdMacros\" />\n        <IncludeRules context=\"GNUMacros##GCCExtensions\" />\n        <IncludeRules context=\"match comments\" />\n      </context>\n\n      <context name=\"Define\" attribute=\"Preprocessor\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <!--\n        Old version: non-contextual macro\n        <IncludeRules context=\"InPreprocessor\" />\n        <keyword attribute=\"Standard Macros\" context=\"#stay\" String=\"StdMacros\" />\n        <keyword attribute=\"Standard Macros\" context=\"#stay\" String=\"InMacro\" />\n        <IncludeRules context=\"GNUMacros##GCCExtensions\" />\n        <IncludeRules context=\"match comments\" />\n        -->\n\n        <IncludeRules context=\"InPreprocessor\" />\n        <Detect2Chars attribute=\"Error\" context=\"#pop!LineError\" char=\"/\" char1=\"/\" />\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Comment 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\" />\n        <IncludeRules context=\"GNUMacros##GCCExtensions\" />\n        <DetectIdentifier attribute=\"Preprocessor\" context=\"#pop!In Define\"/>\n      </context>\n\n      <context name=\"In Define\" attribute=\"Preprocessor\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <IncludeRules context=\"InPreprocessor\" />\n        <!-- Match scope regions -->\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"{}\" />\n        <!-- Detect attributes -->\n        <Detect2Chars attribute=\"Symbol\" context=\"Attribute In PP\" char=\"[\" char1=\"[\" />\n        <StringDetect attribute=\"Symbol\" context=\"Attribute In PP\" String=\"&lt;:&lt;:\" /> <!-- Digraph: [[ -->\n        <!-- Match numbers -->\n        <RegExpr attribute=\"Decimal\" context=\"Number\" String=\"\\.?[0-9]\" lookAhead=\"true\" />\n        <!-- Match comments -->\n        <IncludeRules context=\"match comments\" />\n        <!-- Match punctuators -->\n        <AnyChar attribute=\"Separator Symbol\" context=\"#stay\" String=\"&separators;\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"&punctuators;\" />\n        <!-- Match keywords -->\n        <IncludeRules context=\"match keywords\" />\n        <!-- Match string literals -->\n        <IncludeRules context=\"match string\" />\n        <!-- Match GCC extensions -->\n        <IncludeRules context=\"DetectGccExtensionsInPP##GCCExtensions\" />\n        <!-- Match most used namespaces and styles -->\n        <StringDetect attribute=\"Standard Classes\" context=\"Standard Classes In PP\" String=\"std::\" />\n        <StringDetect attribute=\"Boost Stuff\" context=\"Boost Stuff In PP\" String=\"boost::\" />\n        <StringDetect attribute=\"Boost Stuff\" context=\"Boost Stuff In PP\" String=\"BOOST_\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS In PP\" String=\"detail::\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS In PP\" String=\"details::\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS In PP\" String=\"aux::\" />\n        <StringDetect attribute=\"Internals\" context=\"InternalsNS In PP\" String=\"internals::\" />\n        <keyword attribute=\"Standard Macros\" context=\"#stay\" String=\"InMacro\" />\n        <IncludeRules context=\"match identifier\" />\n        <!-- Match preprocessor directives -->\n        <DetectChar attribute=\"Preprocessor\" context=\"#stay\" char=\"#\" />\n        <!-- Match invalid symbols -->\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"$@`\" />\n      </context>\n\n      <context name=\"InPreprocessor\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Separator Symbol\" context=\"#stay\" />\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"\\\" />\n      </context>\n\n      <context name=\"Outscoped Common\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n        <DetectIdentifier />\n        <!-- prevent incorrect highlighting in case of not closed properly comment block -->\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"*\" char1=\"/\" />\n        <IncludeRules context=\"match comments\" />\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"&pphash;if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <LineContinue context=\"#stay\" />\n      </context>\n\n      <context name=\"Outscoped\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Preprocessor\" context=\"Outscoped AfterHash\" String=\"&ispphash;\" firstNonSpace=\"true\" lookAhead=\"true\" />\n        <IncludeRules context=\"Outscoped Common\" />\n      </context>\n\n      <context name=\"Outscoped AfterHash\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop#pop!PreprocessorEndOfLineSpace\" String=\"&pphash;endif\\b\" endRegion=\"PP\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop#pop!Inscoped\"          String=\"&pphash;else\\b\" endRegion=\"PP\" beginRegion=\"PP\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop!Outscoped intern\"           String=\"&pphash;if\" beginRegion=\"PP\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop#pop!Inscoped\"          String=\"&pphash;elif&ppcond1;\" endRegion=\"PP\" beginRegion=\"PP\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\"                       String=\"&pphash;elif&ppcond0;\" endRegion=\"PP\" beginRegion=\"PP\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop#pop!Preprocessor\"      String=\"&pphash;elif\\b\" endRegion=\"PP\" beginRegion=\"PP\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\"                            String=\"&pphash;\" />\n      </context>\n\n      <context name=\"Outscoped 2\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"Outscoped Common\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!PreprocessorEndOfLineSpace\" String=\"&pphash;endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n\n      <context name=\"Inscoped\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Preprocessor\" context=\"Inscoped AfterHash\" String=\"&ispphash;\" firstNonSpace=\"true\" lookAhead=\"true\" />\n        <IncludeRules context=\"Main\" />\n      </context>\n\n      <context name=\"Inscoped AfterHash\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!AfterHash\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop!Outscoped 2\" String=\"&pphash;el(?:se|if)\" endRegion=\"PP\" beginRegion=\"PP\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop#pop!PreprocessorEndOfLineSpace\" String=\"&pphash;endif\\b\" endRegion=\"PP\" />\n      </context>\n\n      <context name=\"Outscoped intern\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n        <DetectIdentifier />\n        <!-- prevent incorrect highlighting in case of not closed properly comment block -->\n        <Detect2Chars attribute=\"Comment\" context=\"#stay\" char=\"*\" char1=\"/\" />\n        <IncludeRules context=\"match comments\" />\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"&pphash;if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"&pphash;el(se|if)\" beginRegion=\"PP\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"PreprocessorEndOfLineSpace\" String=\"&pphash;endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"        defStyleNum=\"dsNormal\"    spellChecking=\"false\" />\n      <itemData name=\"Control Flow\"       defStyleNum=\"dsControlFlow\" spellChecking=\"false\" />\n      <itemData name=\"Keyword\"            defStyleNum=\"dsKeyword\"   spellChecking=\"false\" />\n      <itemData name=\"Data Type\"          defStyleNum=\"dsDataType\"  spellChecking=\"false\" />\n      <itemData name=\"Type Modifiers\"     defStyleNum=\"dsAttribute\" spellChecking=\"false\" />\n      <itemData name=\"Attribute\"          defStyleNum=\"dsAttribute\" spellChecking=\"false\" bold=\"false\" italic=\"true\" />\n      <itemData name=\"Standard Attribute\" defStyleNum=\"dsAttribute\" spellChecking=\"false\" bold=\"false\" italic=\"true\" />\n      <itemData name=\"Decimal\"            defStyleNum=\"dsDecVal\"    spellChecking=\"false\" />\n      <itemData name=\"Octal\"              defStyleNum=\"dsBaseN\"     spellChecking=\"false\" />\n      <itemData name=\"Hex\"                defStyleNum=\"dsBaseN\"     spellChecking=\"false\" />\n      <itemData name=\"Binary\"             defStyleNum=\"dsBaseN\"     spellChecking=\"false\" />\n      <itemData name=\"Float\"              defStyleNum=\"dsFloat\"     spellChecking=\"false\" />\n      <itemData name=\"Char\"               defStyleNum=\"dsChar\"      spellChecking=\"false\" />\n      <itemData name=\"String\"             defStyleNum=\"dsString\"    spellChecking=\"true\"  />\n      <itemData name=\"String Char\"        defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n      <itemData name=\"Comment\"            defStyleNum=\"dsComment\"   spellChecking=\"true\"  />\n      <itemData name=\"Symbol\"             defStyleNum=\"dsNormal\"    spellChecking=\"false\" />\n      <itemData name=\"Separator Symbol\"   defStyleNum=\"dsNormal\"    spellChecking=\"false\" />\n      <itemData name=\"Data Members (m_*)\" defStyleNum=\"dsVariable\"  spellChecking=\"false\" />\n      <itemData name=\"Globals (g_*)\"      defStyleNum=\"dsVariable\"  spellChecking=\"false\" />\n      <itemData name=\"Statics (s_*)\"      defStyleNum=\"dsVariable\"  spellChecking=\"false\" />\n      <itemData name=\"Types (*_t/*_type)\" defStyleNum=\"dsDataType\"  spellChecking=\"false\" />\n      <itemData name=\"CONSTS/MACROS\"      defStyleNum=\"dsNormal\"    spellChecking=\"false\" />\n      <itemData name=\"Preprocessor\"       defStyleNum=\"dsPreprocessor\" spellChecking=\"false\" />\n      <itemData name=\"Prep. Lib\"          defStyleNum=\"dsImport\"    spellChecking=\"false\" />\n      <itemData name=\"Standard Macros\"    defStyleNum=\"dsOthers\"    spellChecking=\"false\" />\n      <itemData name=\"Standard Classes\"   defStyleNum=\"dsBuiltIn\"   spellChecking=\"false\" />\n      <itemData name=\"Boost Stuff\"        defStyleNum=\"dsExtension\" spellChecking=\"false\" />\n      <itemData name=\"Internals\"          defStyleNum=\"dsNormal\"    spellChecking=\"false\" color=\"#808080\" selColor=\"#808080\" />\n      <itemData name=\"Region Marker\"      defStyleNum=\"dsRegionMarker\" spellChecking=\"false\" />\n      <itemData name=\"UDL Numeric Suffix\" defStyleNum=\"dsDecVal\"    spellChecking=\"false\" />\n      <itemData name=\"UDL String Suffix\"  defStyleNum=\"dsString\"    spellChecking=\"false\" />\n      <itemData name=\"Standard Suffix\"    defStyleNum=\"dsBuiltIn\"   spellChecking=\"false\" />\n      <itemData name=\"Error\"              defStyleNum=\"dsError\"     spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\" />\n    </comments>\n    <keywords casesensitive=\"1\" additionalDeliminator=\"#&quot;\" />\n  </general>\n</language>\n<!-- kate: indent-width 2; tab-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/j.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\nChanges:\n\nVersion 1.5 (2015-04-29) by Igor Zhuravlov\n- language/@kateversion upgraded from \"2.4\" to \"3.4\"\n\nVersion 1.4 (2015-04-20) by Igor Zhuravlov\n- merge versions 1.2 and 1.3\n- removed not used def and defc entities\n- approached color scheme to JQt\n- separated out color scheme to j14.katehlcolor file\n- dropped ExpArg: n. m. u. v. x. y.\n- reformatted a bit\n\nVersion 1.3 (2014-05-26) by greg heil\n- based on version 1.1\n- add Foldable feature\n- change color scheme\n- add def and defc entities\n- split long lines\n\nVersion 1.2 (2013-09-29) by Igor Zhuravlov\n- fix Adverb regexp's pattern\n- fix Verb regexp's pattern\n\nVersion 1.1 (2013-03-18) by Igor Zhuravlov\n- fix enum entity's exponent definition\n- rework String regexp's pattern\n- use entities in Number regexp's pattern\n- use entities in Control regexp's pattern\n\nVersion 1.0 (2012-03-21) by Igor Zhuravlov\n- initial release\n\n-->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY unum \"\\d+\">                                 <!-- Unsigned integer number -->\n  <!ENTITY anum \"[a-z\\d]+\">                            <!-- Non-10-based unsigned integer number, e.g. 1a -->\n  <!ENTITY bnum \"\\b&unum;b_?&anum;(\\.&anum;)\\b\">       <!-- Based integer number, e.g. 36b_1a.z2 -->\n  <!ENTITY inum \"_?&unum;\">                            <!-- Integer number -->\n  <!ENTITY xnum \"\\b&inum;x\\b\">                         <!-- Extended precision integer number, e.g. _123x -->\n  <!ENTITY rnum \"\\b&inum;r&inum;\\b\">                   <!-- Rational number, e.g. _1r23 -->\n  <!ENTITY fnum \"&inum;(\\.&unum;)?\">                   <!-- Floating point number, e.g. 1.23 -->\n  <!ENTITY enum \"(&fnum;(e&inum;)?|_?_|_\\.)\">          <!-- Exponential (scientific) notation, e.g. 1.2e_3 -->\n  <!ENTITY cnum \"&enum;((j|a[dr])&enum;)?\">            <!-- Complex number, e.g. 1.2e3j4.5e_6 -->\n  <!ENTITY pnum \"\\b&cnum;([px]&cnum;)?(?![a-z\\d_.])\">  <!-- Number based on pi or e, e.g. 1j2p3j4 -->\n  <!ENTITY name \"[a-zA-Z][a-zA-Z\\d_]*\">                <!-- Name -->\n  <!ENTITY lname \"\\b&name;_(&name;)?_\\b\">              <!-- Locative, a__ means a_base_ -->\n  <!ENTITY ilname \"\\b&name;__&name;\\b\">                <!-- Indirect locative -->\n]>\n<!--\n  j.xml syntax highlighting for J programming language under Kate\n\n  J is a modern, high-level, general-purpose, high-performance, portable programming language\n  http://www.jsoftware.com\n\n  Kate is a KDE Advanced Text Editor\n  http://kate.kde.org/\n-->\n<language name=\"J\"\n          section=\"Scripts\"\n          version=\"2\"\n          kateversion=\"3.4\"\n          extensions=\"*.ijs;*.ijt;*.IJS;*.IJT\"\n          mimetype=\"text/x-j;text/x-jsrc\"\n          author=\"Igor Zhuravlov (zhuravlov.ip@ya.ru), greg heil (gheil.j@gmail.com)\"\n          indenter=\"normal\"\n          license=\"GPL\">\n  <highlighting>\n    <contexts>\n      <context attribute=\"Sentence\" lineEndContext=\"#pop\" name=\"sentence\">\n        <DetectSpaces/>\n        <RegExpr      attribute=\"Foldable\"       context=\"#stay\"        String=\":\\s*0|\\bdefine\\b\" beginRegion=\"Fold\"/>\n        <RegExpr      attribute=\"Foldable\"       context=\"#stay\"        String=\"^\\)$\" endRegion=\"Fold\"/>\n        <StringDetect attribute=\"Comment\"        context=\"#stay\"        String=\"NB.(\" beginRegion=\"Fold\"/>\n        <StringDetect attribute=\"Comment\"        context=\"#stay\"        String=\"NB.)\" endRegion=\"Fold\"/>\n        <StringDetect attribute=\"Comment\"        context=\"comment line\" String=\"NB.\"/>\n        <RegExpr      attribute=\"String\"         context=\"#stay\"        String=\"&apos;([^&apos;]|&apos;&apos;)*&apos;\"/>\n        <RegExpr      attribute=\"Adverb\"         context=\"#stay\"        String=\"([/\\\\]\\.|\\b[bfMt]\\.|\\bt:|[~/\\\\}])(?![.:])\"/>\n        <RegExpr      attribute=\"Verb\"           context=\"#stay\"        String=\"(_?\\d:|p\\.\\.|[ACeEIjLor]\\.|[_/\\\\iqsux]:|\\{::|[=!\\]]|[-&lt;&gt;+*%$|,#\\{][.:]?|[;\\[]:?|[~}&quot;ip][.:]|[?^]\\.?)(?![.:])\"/>\n        <RegExpr      attribute=\"Number\"         context=\"#stay\"        String=\"&bnum;|&xnum;|&rnum;|&pnum;\"/>\n        <AnyChar      attribute=\"Parens\"         context=\"#stay\"        String=\"()\"/>\n        <RegExpr      attribute=\"Conjunction\"    context=\"#stay\"        String=\"(&quot;|[@&amp;][.:]?|[.:][.:]?|[!D][.:]|&amp;\\.:|[;dHT]\\.|`:?|[LS^]:)(?![.:])\"/>\n        <RegExpr      attribute=\"Control\"        context=\"#stay\"        String=\"\\b(assert|break|f?case|catch[dt]?|continue|do|else(if)?|end|for(_&name;)?|(goto|label)_&name;|if|return|select|throw|try|whil(e|st))\\.(?![.:])\"/>\n        <Detect2Chars attribute=\"Copulae Global\" context=\"#stay\"        char=\"=\" char1=\":\"/>\n        <Detect2Chars attribute=\"Copulae Local\"  context=\"#stay\"        char=\"=\" char1=\".\"/>\n        <RegExpr      attribute=\"ExpArg\"         context=\"#stay\"        String=\"\\b[nmuvxy](?![\\w:.])\"/>\n        <RegExpr      attribute=\"Noun\"           context=\"#stay\"        String=\"\\ba[.:](?![.:])\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment line\"/>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Sentence\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Adverb\"         defStyleNum=\"dsKeyword\"      spellChecking=\"false\"/>\n      <itemData name=\"Comment\"        defStyleNum=\"dsComment\"      spellChecking=\"true\"/>\n      <itemData name=\"Conjunction\"    defStyleNum=\"dsKeyword\"      spellChecking=\"false\"/>\n      <itemData name=\"Control\"        defStyleNum=\"dsKeyword\"      spellChecking=\"false\"/>\n      <itemData name=\"Copulae Global\" defStyleNum=\"dsKeyword\"      spellChecking=\"false\"/>\n      <itemData name=\"Copulae Local\"  defStyleNum=\"dsKeyword\"      spellChecking=\"false\"/>\n      <itemData name=\"ExpArg\"         defStyleNum=\"dsKeyword\"      spellChecking=\"false\" italic=\"true\"/>\n      <itemData name=\"Foldable\"       defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n      <itemData name=\"Noun\"           defStyleNum=\"dsKeyword\"      spellChecking=\"false\" bold=\"true\"/>\n      <itemData name=\"Number\"         defStyleNum=\"dsDecVal\"       spellChecking=\"false\"/>\n      <itemData name=\"Parens\"         defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n      <itemData name=\"String\"         defStyleNum=\"dsString\"       spellChecking=\"false\"/>\n      <itemData name=\"Verb\"           defStyleNum=\"dsKeyword\"      spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"NB.(\" end=\"NB.)\" region=\"Fold\"/>\n      <comment name=\"singleLine\" start=\"NB.\"/>\n    </comments>\n    <folding indentationsensitive=\"true\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/jam.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY ident \"([^\\t $&quot;\\\\]+|\\$(?!\\()|\\\\.)+\">\n]>\n<!--\nCopyright (C) 2006 Mildred <silkensedai@online.fr>.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n-->\n<language name=\"Jam\" version=\"5\" kateversion=\"5.0\" section=\"Other\" extensions=\"Jam*;*.jam\" mimetype=\"text/x-jam;text/x-Jamfile;text/x-Jamrules;text/x-Jambase\" author=\"Mildred (silkensedai@online.fr)\" license=\"MIT\">\n  <!--\n  Changelog\n    0.2\n      * now tokens like [ ] { } ( ) : ; are not detected if there is no whitespace before and after\n      * Jam* files are handled (example Jamrules or Jambase)\n      * different colors\n      * Subvariables are handled (example : $(varname[$(v)])\n      * Include bash highlighting inside actions blocks\n      * rules names are found in rules definitions\n      * highlight the variable reference in rule definitions after 'bind'\n    0.3\n      * because weakDelimiter isn't supported, it is not possible to just have some locals delimiters for the tokens and globals delimiters as default. So it's not possible to have our usual double click to select.\n      * 'actions action_name bind var' instead of 'actions bind var action_name'\n      * bun in syntax 'rule Rulename : param param ...' ':' is not recognized. fixed\n      * fixed some bugs found when looking at Jambase (peacemeal -> piecemeal, ...)\n      * variables recognized in strings\n      * named parameters for rules ... the syntax has changed : 'rule rulename param : param : param {'\n      * changed section from Scripts to Other\n  Feature request to Kate dev.\n    * returnContext attribute\n    * ability to enter a new context after a #pop\n    * when you include rules from foreign contexts (here Bash), having the ability to prepend some rules to all foreign contexts for example to terminate the included context before it naturally ends.\n\n    0.4\n      * fix `x=`: is a rule named `x=`, not a variable\n      * fix `exe onxxxxx`: is a rule call, not a variable\n      * fix `ifxxx`, `rulexxx`, etc: not keywords\n      * fix `variable default = xxx ;`\n      * fix keywords and operators in a condition: they must be separated by spaces\n      * fix `on target`\n      * fix `switch`\n      * fix `class` and `module`\n      * fix `for local x`\n      * new styles: Feature and FeatureOperator for `<xxx>`, `-<xxx>`, `<xxx>abc:<yyy>abc`, `<xxx>abc/<yyy>abc`, `<xxx>abc&&def`\n      * don't use black color in Rule\n\n    v5\n      * fix `local x ;`, `x` is a variable not a rule\n      * highlight subrule: `exe x : [ glob *.cpp ]`\n  -->\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>continue</item>\n      <item>else</item>\n    </list>\n    <list name=\"keywordIf\">\n      <item>if</item>\n      <item>while</item>\n    </list>\n    <list name=\"keywordAcceptRule\">\n      <item>include</item>\n      <item>return</item>\n    </list>\n    <list name=\"keywordClass\"><item>class</item></list>\n    <list name=\"keywordModule\"><item>module</item></list>\n    <list name=\"keywordSwitch\"><item>switch</item></list>\n    <list name=\"keywordActions\"><item>actions</item></list>\n    <list name=\"keywordRule\"><item>rule</item></list>\n    <list name=\"keywordFor\"><item>for</item></list>\n    <list name=\"keywordOn\"><item>on</item></list>\n    <list name=\"keywordReturn\"><item>return</item></list>\n    <list name=\"keywordIn\"><item>in</item></list>\n    <list name=\"keywordCase\"><item>case</item></list>\n    <list name=\"keywordLocal\"><item>local</item></list>\n\n    <list name=\"actionAttribute\">\n      <item>existing</item>\n      <item>ignore</item>\n      <item>piecemeal</item>\n      <item>quietly</item>\n      <item>together</item>\n      <item>updated</item>\n    </list>\n    <list name=\"actionAttributeBind\">\n      <item>bind</item>\n    </list>\n\n    <list name=\"onTarget\"><item>target</item></list>\n\n    <list name=\"features\">\n      <item>&lt;address-model&gt;</item>\n      <item>&lt;address-sanitizer&gt;</item>\n      <item>&lt;allow-system-cflags&gt;</item>\n      <item>&lt;allow-system-libs&gt;</item>\n      <item>&lt;architecture&gt;</item>\n      <item>&lt;archiver&gt;</item>\n      <item>&lt;asciidoctor-attribute&gt;</item>\n      <item>&lt;asciidoctor-backend&gt;</item>\n      <item>&lt;asciidoctor-doctype&gt;</item>\n      <item>&lt;assembler&gt;</item>\n      <item>&lt;boostbook&gt;</item>\n      <item>&lt;build&gt;</item>\n      <item>&lt;build-name&gt;</item>\n      <item>&lt;c++-template-depth&gt;</item>\n      <item>&lt;catalog&gt;</item>\n      <item>&lt;cflags&gt;</item>\n      <item>&lt;compileflags&gt;</item>\n      <item>&lt;compiler&gt;</item>\n      <item>&lt;compiler-filter&gt;</item>\n      <item>&lt;cxxflags&gt;</item>\n      <item>&lt;debug-symbols&gt;</item>\n      <item>&lt;def-file&gt;</item>\n      <item>&lt;define&gt;</item>\n      <item>&lt;dll-path&gt;</item>\n      <item>&lt;doxygen:param&gt;</item>\n      <item>&lt;doxygen:xml-imagedir&gt;</item>\n      <item>&lt;embed-manifest&gt;</item>\n      <item>&lt;embed-manifest-file&gt;</item>\n      <item>&lt;file&gt;</item>\n      <item>&lt;format&gt;</item>\n      <item>&lt;hardcode-dll-paths&gt;</item>\n      <item>&lt;idl-compiler&gt;</item>\n      <item>&lt;implicit-dependency&gt;</item>\n      <item>&lt;import&gt;</item>\n      <item>&lt;include&gt;</item>\n      <item>&lt;includes&gt;</item>\n      <item>&lt;inlining&gt;</item>\n      <item>&lt;install-dependencies&gt;</item>\n      <item>&lt;install-source-root&gt;</item>\n      <item>&lt;install-type&gt;</item>\n      <item>&lt;instruction-set&gt;</item>\n      <item>&lt;libdir&gt;</item>\n      <item>&lt;library&gt;</item>\n      <item>&lt;link&gt;</item>\n      <item>&lt;linker&gt;</item>\n      <item>&lt;linkflags&gt;</item>\n      <item>&lt;local-visibility&gt;</item>\n      <item>&lt;location&gt;</item>\n      <item>&lt;location-prefix&gt;</item>\n      <item>&lt;mc-compiler&gt;</item>\n      <item>&lt;name&gt;</item>\n      <item>&lt;optimization&gt;</item>\n      <item>&lt;parallelism&gt;</item>\n      <item>&lt;path&gt;</item>\n      <item>&lt;pkg-config&gt;</item>\n      <item>&lt;pkg-config-define&gt;</item>\n      <item>&lt;prefix&gt;</item>\n      <item>&lt;profiling&gt;</item>\n      <item>&lt;ranlib&gt;</item>\n      <item>&lt;rc&gt;</item>\n      <item>&lt;rc-type&gt;</item>\n      <item>&lt;reftitle&gt;</item>\n      <item>&lt;relevant&gt;</item>\n      <item>&lt;resource-compiler&gt;</item>\n      <item>&lt;root&gt;</item>\n      <item>&lt;runtime-debugging&gt;</item>\n      <item>&lt;runtime-link&gt;</item>\n      <item>&lt;sass-line-numbers&gt;</item>\n      <item>&lt;sass-style&gt;</item>\n      <item>&lt;search&gt;</item>\n      <item>&lt;setup&gt;</item>\n      <item>&lt;setup-amd64&gt;</item>\n      <item>&lt;setup-i386&gt;</item>\n      <item>&lt;setup-ia64&gt;</item>\n      <item>&lt;source&gt;</item>\n      <item>&lt;sysroot&gt;</item>\n      <item>&lt;target-os&gt;</item>\n      <item>&lt;testing.arg&gt;</item>\n      <item>&lt;testing.launcher&gt;</item>\n      <item>&lt;thread-sanitizer&gt;</item>\n      <item>&lt;threading&gt;</item>\n      <item>&lt;toolset&gt;</item>\n      <item>&lt;undefined-sanitizer&gt;</item>\n      <item>&lt;use&gt;</item>\n      <item>&lt;variable&gt;</item>\n      <item>&lt;variant&gt;</item>\n      <item>&lt;verbatim-options&gt;</item>\n      <item>&lt;version&gt;</item>\n      <item>&lt;visibility&gt;</item>\n      <item>&lt;warnings&gt;</item>\n      <item>&lt;warnings-as-errors&gt;</item>\n      <item>&lt;xsl:param&gt;</item>\n      <item>&lt;xsl:path&gt;</item>\n      <item>&lt;xslt&gt;</item>\n      <item>&lt;xslt-dir&gt;</item>\n    </list>\n\n    <contexts>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Normal\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Error\" context=\"#stay\" String=\"}\" endRegion=\"block\"/>\n        <IncludeRules context=\"Statement\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Block\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"}\" endRegion=\"block\"/>\n        <IncludeRules context=\"Statement\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Statement\">\n        <IncludeRules context=\"Preprocess\"/>\n        <keyword attribute=\"Keyword\" context=\"ActionDefinition\" String=\"keywordActions\"/>\n        <keyword attribute=\"Keyword\" context=\"RuleDefinition\" String=\"keywordRule\"/>\n        <keyword attribute=\"Keyword\" context=\"ForStatement\" String=\"keywordFor\"/>\n        <keyword attribute=\"Keyword\" context=\"IfStatement\" String=\"keywordIf\"/>\n        <keyword attribute=\"Keyword\" context=\"Rule\" String=\"keywordAcceptRule\"/>\n        <keyword attribute=\"Keyword\" context=\"OnPreStment\" String=\"keywordOn\"/>\n        <keyword attribute=\"Keyword\" context=\"SwitchStatement\" String=\"keywordSwitch\"/>\n        <keyword attribute=\"Keyword\" context=\"ClassStatement\" String=\"keywordClass\"/>\n        <keyword attribute=\"Keyword\" context=\"ModuleStatement\" String=\"keywordModule\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Keyword\" context=\"Local\" String=\"keywordLocal\"/>\n        <WordDetect attribute=\"Operator\" context=\"Block\" String=\"{\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"VarAssign\" context=\"Assignment\" String=\"[^\\t ]+[\\t ]+(?=([+?]?=|on|default)([\\t ]|$))\" />\n        <RegExpr attribute=\"Rule\" context=\"Rule\" String=\"([^\\t ][^\\t ]+|[^{}\\t ])\"/>\n      </context>\n\n      <!-- General instructions -->\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Rule\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#stay\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\";\"/>\n        <IncludeRules context=\"ValueIdentifier\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ValueIdentifier\">\n        <DetectChar attribute=\"Feature\" context=\"Feature\" char=\"&lt;\"/>\n        <RegExpr attribute=\"FeatureOperator\" context=\"#stay\" String=\"-(?=&lt;)\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"([^\\t $&amp;&quot;\\\\]+|\\$(?!\\()|&amp;(?!&amp;)|\\\\.)+\"/>\n        <!-- auto-completion only -->\n        <keyword attribute=\"Feature\" context=\"#stay\" String=\"features\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#pop\" name=\"Feature\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <AnyChar attribute=\"Error\" context=\"#pop\" String=\"&#9; \" />\n        <DetectChar attribute=\"Feature\" context=\"#pop!Property\" char=\">\"/>\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Feature\" context=\"#stay\" String=\"([^\\t $>&quot;#\\\\]+|\\$(?!\\()|\\\\.)+\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#pop\" name=\"Property\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <AnyChar attribute=\"Normal\" context=\"#pop\" String=\"&#9; \" />\n        <Detect2Chars attribute=\"FeatureOperator\" context=\"#pop\" char=\"&amp;\" char1=\"&amp;\"/>\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"FeatureOperator\" context=\"#pop!PropertyFeature\" String=\"[:/,](?=[&lt;\\t ]|$)\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"([^\\t $:&amp;&quot;:/,#\\\\]+|\\$(?!\\()|&amp;(?!&amp;)|[:/,](?!&lt;)|\\\\.)+\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#pop\" name=\"PropertyFeature\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Feature\" context=\"#pop!Feature\" char=\"&lt;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"OnPreStment\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <keyword attribute=\"Keyword\" context=\"OnTargetPreStment\" String=\"onTarget\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"OnTargetPreStment\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#stay\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop#pop\" String=\";\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ClassStatement\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop!ClassStatement2\" String=\"{\" beginRegion=\"block\"/>\n        <WordDetect attribute=\"Operator\" context=\"#stay\" String=\":\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ModuleStatement\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Normal\" context=\"#pop\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ClassStatement2\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <Detect2Chars attribute=\"CommentTitle\" context=\"CommentTitle\" char=\"#\" char1=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"}\" endRegion=\"block\"/>\n        <keyword attribute=\"Keyword\" context=\"MethodDefinition\" String=\"keywordRule\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"MethodDefinition\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Error\" context=\"#stay\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"MethodDefinition2\" String=\"{\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Rule\" context=\"VarnameList\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"MethodDefinition2\">\n        <DetectSpaces/>\n        <WordDetect attribute=\"Operator\" context=\"#pop#pop\" String=\"}\" endRegion=\"block\"/>\n        <IncludeRules context=\"Statement\"/>\n      </context>\n\n      <!-- Assignment -->\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Assignment\">\n        <DetectChar attribute=\"Operator\" context=\"Assignment2\" char=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"Assignment2\" char=\"+\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"Assignment2\" char=\"?\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"AssignmentOn\" char=\"o\" char1=\"n\"/>\n        <StringDetect attribute=\"Keyword\" context=\"AssignmentDefault\" String=\"default\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Assignment2\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop#pop\" String=\";\"/>\n        <IncludeRules context=\"ValueIdentifier\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"AssignmentOn\">\n        <IncludeRules context=\"Preprocess\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!Assignment2\" char=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#pop!Assignment2\" char=\"+\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#pop!Assignment2\" char=\"?\" char1=\"=\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"AssignmentDefault\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!Assignment2\" char=\"=\"/>\n      </context>\n\n      <!-- Sub statements -->\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"SubStatement\" fallthrough=\"true\" fallthroughContext=\"SubRule\">\n        <DetectSpaces/>\n        <Detect2Chars attribute=\"Keyword\" context=\"OnSubStatement\" char=\"o\" char1=\"n\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"OnSubStatement\" fallthrough=\"true\" fallthroughContext=\"OnSubStatement2\">\n        <DetectSpaces/>\n        <keyword attribute=\"Keyword\" context=\"#pop!SubRule\" String=\"onTarget\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"OnSubStatement2\">\n        <IncludeRules context=\"Preprocess\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywordReturn\"/>\n        <WordDetect attribute=\"Operator\" context=\"#stay\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop#pop#pop\" String=\"]\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"SubRule\" fallthrough=\"true\" fallthroughContext=\"#pop!SubRuleParam\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Rule\" context=\"#pop!SubRuleParam\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"SubRuleParam\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#stay\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop#pop\" String=\"]\"/>\n        <RegExpr attribute=\"Feature\" context=\"Property\" String=\"&lt;[^\\t >]+>\"/>\n        <!-- auto-completion only -->\n        <keyword attribute=\"Feature\" context=\"#stay\" String=\"features\"/>\n      </context>\n\n      <!-- Actions, Rules definitions -->\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ActionDefinition\">\n        <IncludeRules context=\"Preprocess\"/>\n        <keyword attribute=\"Error\" context=\"#stay\" String=\"actionAttributeBind\"/>\n        <keyword attribute=\"actionAttribute\" context=\"#stay\" String=\"actionAttribute\"/>\n        <WordDetect attribute=\"Operator\" context=\"ActionBody\" String=\"{\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Action\" context=\"ActionDefinitionFull\" String=\"&ident;\"/>\n        <DetectSpaces attribute=\"Normal\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"ActionDefinitionFull\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"{\" lookAhead=\"true\"/>\n        <keyword attribute=\"actionAttribute\" context=\"ActionDefinitionBind\" String=\"actionAttributeBind\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ActionDefinitionBind\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"{\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Varname\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"ActionText\" lineEndContext=\"#stay\" name=\"ActionBody\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop#pop\" String=\"}\" endRegion=\"block\"/>\n        <IncludeRules context=\"##Bash\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"RuleDefinition\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Error\" context=\"#stay\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"{\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Rule\" context=\"VarnameList\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"VarnameList\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"VarnameList\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"{\" lookAhead=\"true\"/>\n        <AnyChar attribute=\"VariableAttribute\" context=\"#stay\" String=\"?+*\"/>\n        <RegExpr attribute=\"Varname\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <!-- for, while, if, switch -->\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ForStatement\" fallthrough=\"true\" fallthroughContext=\"#pop!ForStatement2\">\n        <DetectSpaces/>\n        <keyword attribute=\"Keyword\" context=\"#pop!ForStatement2\" String=\"keywordLocal\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ForStatement2\">\n        <IncludeRules context=\"Preprocess\"/>\n        <keyword attribute=\"Operator\" context=\"ForList\" String=\"keywordIn\"/>\n        <RegExpr attribute=\"Varname\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"ForList\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop#pop\" String=\"{\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"IfStatement\">\n        <IncludeRules context=\"Preprocess\"/>\n        <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"([=&lt;>!]?=|[&lt;>!()]|&amp;&amp;|\\|\\||in)(?=[ \\t]|$)\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"{\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Feature\" context=\"Property\" String=\"&lt;[^\\t >]+>\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n        <!-- auto-completion only -->\n        <keyword attribute=\"Feature\" context=\"#stay\" String=\"features\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"SwitchStatement\">\n        <IncludeRules context=\"Preprocess\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop!SwitchStatement2\" String=\"{\" beginRegion=\"block\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"SwitchStatement2\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <Detect2Chars attribute=\"CommentTitle\" context=\"CommentTitle\" char=\"#\" char1=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\"}\" endRegion=\"block\"/>\n        <keyword attribute=\"Operator\" context=\"CaseCond\" String=\"keywordCase\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"CaseCond\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <Detect2Chars attribute=\"CommentTitle\" context=\"CommentTitle\" char=\"#\" char1=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop!CaseStatement\" String=\":\"/>\n        <WordDetect attribute=\"Error\" context=\"#pop\" String=\";\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"CaseStatement\">\n        <IncludeRules context=\"Preprocess\"/>\n        <WordDetect attribute=\"Operator\" context=\"#stay\" String=\":\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\";\"/>\n        <IncludeRules context=\"ValueIdentifier\"/>\n      </context>\n\n      <!-- local -->\n\n      <context attribute=\"Variable\" lineEndContext=\"#stay\" name=\"Local\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <keyword attribute=\"Keyword\" context=\"#pop!RuleDefinition\" String=\"keywordRule\"/>\n        <RegExpr attribute=\"VarAssign\" context=\"#pop!LocalInit\" String=\"&ident;\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\";\"/>\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"LocalInit\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <DetectChar attribute=\"Operator\" context=\"Assignment2\" char=\"=\"/>\n        <WordDetect attribute=\"Operator\" context=\"#pop\" String=\";\"/>\n      </context>\n\n      <!-- Variables, Strings, Comments -->\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"Preprocess\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <Detect2Chars attribute=\"CommentTitle\" context=\"CommentTitle\" char=\"#\" char1=\"#\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <WordDetect attribute=\"Operator\" context=\"SubStatement\" String=\"[\"/>\n      </context>\n\n      <context attribute=\"Variable\" lineEndContext=\"Error\" name=\"Variable\">\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <DetectChar attribute=\"VariableDelimiter\" context=\"#pop\" char=\")\"/>\n        <DetectChar attribute=\"VariableAttribute\" context=\"VariableRange\" char=\"[\"/>\n        <DetectChar attribute=\"VariableAttribute\" context=\"VariableAttribute\" char=\":\"/>\n      </context>\n\n      <context attribute=\"VariableAttribute\" lineEndContext=\"Error\" name=\"VariableRange\">\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <DetectChar attribute=\"VariableAttribute\" context=\"#pop\" char=\"]\"/>\n      </context>\n\n      <context attribute=\"VariableAttribute\" lineEndContext=\"Error\" name=\"VariableAttribute\">\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\")\" lookAhead=\"true\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <DetectSpaces/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier/>\n      </context>\n\n      <context attribute=\"CommentTitle\" lineEndContext=\"#pop\" name=\"CommentTitle\">\n        <IncludeRules context=\"Comment\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <Detect2Chars attribute=\"VariableDelimiter\" context=\"Variable\" char=\"$\" char1=\"(\"/>\n        <Detect2Chars attribute=\"EscapeSeq\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"EscapeSeq\" context=\"#stay\" char=\"\\\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <!-- Error -->\n\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"Error\"/>\n\n    </contexts>\n    <itemDatas>\n      <!-- action definition (shell script) -->\n      <itemData name=\"actionAttribute\" defStyleNum=\"dsAttribute\"/>\n      <itemData name=\"ActionText\" defStyleNum=\"dsNormal\"/>\n      <!-- rule / action call -->\n      <itemData name=\"Rule\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Action\" defStyleNum=\"dsNormal\"/>\n      <!-- variables with attributes -->\n      <itemData name=\"Variable\" defStyleNum=\"dsVariable\"/>\n      <itemData name=\"VariableDelimiter\" defStyleNum=\"dsOperator\"/>\n      <itemData name=\"VariableAttribute\" defStyleNum=\"dsAttribute\"/>\n      <itemData name=\"VarAssign\" defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Varname\" defStyleNum=\"dsVariable\"/>\n      <!-- common -->\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Feature\" defStyleNum=\"dsBuiltIn\"/>\n      <itemData name=\"FeatureOperator\" defStyleNum=\"dsOperator\" bold=\"1\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" bold=\"1\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"CommentTitle\" defStyleNum=\"dsComment\" bold=\"1\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"EscapeSeq\" defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n    <keywords weakDeliminator=\":;{}()[].!+,-&lt;=&gt;%&amp;/?^|~\\*,\" additionalDeliminator=\" \t\"/>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/java.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY int \"[0-9]([0-9_]*[0-9])?\">\n\t<!ENTITY hex \"[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?\">\n]>\n<language name=\"Java\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.java\" mimetype=\"text/x-java\" license=\"LGPL\" author=\"Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)\">\n\t<highlighting>\n\t\t<list name=\"java15\">\n\t\t\t<item>ACTIVE</item>\n\t\t\t<item>ACTIVITY_COMPLETED</item>\n\t\t\t<item>ACTIVITY_REQUIRED</item>\n\t\t\t<item>ARG_IN</item>\n\t\t\t<item>ARG_INOUT</item>\n\t\t\t<item>ARG_OUT</item>\n\t\t\t<item>AWTError</item>\n\t\t\t<item>AWTEvent</item>\n\t\t\t<item>AWTEventListener</item>\n\t\t\t<item>AWTEventListenerProxy</item>\n\t\t\t<item>AWTEventMulticaster</item>\n\t\t\t<item>AWTException</item>\n\t\t\t<item>AWTKeyStroke</item>\n\t\t\t<item>AWTPermission</item>\n\t\t\t<item>AbstractAction</item>\n\t\t\t<item>AbstractBorder</item>\n\t\t\t<item>AbstractButton</item>\n\t\t\t<item>AbstractCellEditor</item>\n\t\t\t<item>AbstractCollection</item>\n\t\t\t<item>AbstractColorChooserPanel</item>\n\t\t\t<item>AbstractDocument</item>\n\t\t\t<item>AbstractDocument.AttributeContext</item>\n\t\t\t<item>AbstractDocument.Content</item>\n\t\t\t<item>AbstractDocument.ElementEdit</item>\n\t\t\t<item>AbstractExecutorService</item>\n\t\t\t<item>AbstractInterruptibleChannel</item>\n\t\t\t<item>AbstractLayoutCache</item>\n\t\t\t<item>AbstractLayoutCache.NodeDimensions</item>\n\t\t\t<item>AbstractList</item>\n\t\t\t<item>AbstractListModel</item>\n\t\t\t<item>AbstractMap</item>\n\t\t\t<item>AbstractMethodError</item>\n\t\t\t<item>AbstractPreferences</item>\n\t\t\t<item>AbstractQueue</item>\n\t\t\t<item>AbstractQueuedSynchronizer</item>\n\t\t\t<item>AbstractSelectableChannel</item>\n\t\t\t<item>AbstractSelectionKey</item>\n\t\t\t<item>AbstractSelector</item>\n\t\t\t<item>AbstractSequentialList</item>\n\t\t\t<item>AbstractSet</item>\n\t\t\t<item>AbstractSpinnerModel</item>\n\t\t\t<item>AbstractTableModel</item>\n\t\t\t<item>AbstractUndoableEdit</item>\n\t\t\t<item>AbstractWriter</item>\n\t\t\t<item>AccessControlContext</item>\n\t\t\t<item>AccessControlException</item>\n\t\t\t<item>AccessController</item>\n\t\t\t<item>AccessException</item>\n\t\t\t<item>Accessible</item>\n\t\t\t<item>AccessibleAction</item>\n\t\t\t<item>AccessibleAttributeSequence</item>\n\t\t\t<item>AccessibleBundle</item>\n\t\t\t<item>AccessibleComponent</item>\n\t\t\t<item>AccessibleContext</item>\n\t\t\t<item>AccessibleEditableText</item>\n\t\t\t<item>AccessibleExtendedComponent</item>\n\t\t\t<item>AccessibleExtendedTable</item>\n\t\t\t<item>AccessibleExtendedText</item>\n\t\t\t<item>AccessibleHyperlink</item>\n\t\t\t<item>AccessibleHypertext</item>\n\t\t\t<item>AccessibleIcon</item>\n\t\t\t<item>AccessibleKeyBinding</item>\n\t\t\t<item>AccessibleObject</item>\n\t\t\t<item>AccessibleRelation</item>\n\t\t\t<item>AccessibleRelationSet</item>\n\t\t\t<item>AccessibleResourceBundle</item>\n\t\t\t<item>AccessibleRole</item>\n\t\t\t<item>AccessibleSelection</item>\n\t\t\t<item>AccessibleState</item>\n\t\t\t<item>AccessibleStateSet</item>\n\t\t\t<item>AccessibleStreamable</item>\n\t\t\t<item>AccessibleTable</item>\n\t\t\t<item>AccessibleTableModelChange</item>\n\t\t\t<item>AccessibleText</item>\n\t\t\t<item>AccessibleTextSequence</item>\n\t\t\t<item>AccessibleValue</item>\n\t\t\t<item>AccountException</item>\n\t\t\t<item>AccountExpiredException</item>\n\t\t\t<item>AccountLockedException</item>\n\t\t\t<item>AccountNotFoundException</item>\n\t\t\t<item>Acl</item>\n\t\t\t<item>AclEntry</item>\n\t\t\t<item>AclNotFoundException</item>\n\t\t\t<item>Action</item>\n\t\t\t<item>ActionEvent</item>\n\t\t\t<item>ActionListener</item>\n\t\t\t<item>ActionMap</item>\n\t\t\t<item>ActionMapUIResource</item>\n\t\t\t<item>Activatable</item>\n\t\t\t<item>ActivateFailedException</item>\n\t\t\t<item>ActivationDesc</item>\n\t\t\t<item>ActivationException</item>\n\t\t\t<item>ActivationGroup</item>\n\t\t\t<item>ActivationGroupDesc</item>\n\t\t\t<item>ActivationGroupDesc.CommandEnvironment</item>\n\t\t\t<item>ActivationGroupID</item>\n\t\t\t<item>ActivationGroup_Stub</item>\n\t\t\t<item>ActivationID</item>\n\t\t\t<item>ActivationInstantiator</item>\n\t\t\t<item>ActivationMonitor</item>\n\t\t\t<item>ActivationSystem</item>\n\t\t\t<item>Activator</item>\n\t\t\t<item>ActiveEvent</item>\n\t\t\t<item>ActivityCompletedException</item>\n\t\t\t<item>ActivityRequiredException</item>\n\t\t\t<item>AdapterActivator</item>\n\t\t\t<item>AdapterActivatorOperations</item>\n\t\t\t<item>AdapterAlreadyExists</item>\n\t\t\t<item>AdapterAlreadyExistsHelper</item>\n\t\t\t<item>AdapterInactive</item>\n\t\t\t<item>AdapterInactiveHelper</item>\n\t\t\t<item>AdapterManagerIdHelper</item>\n\t\t\t<item>AdapterNameHelper</item>\n\t\t\t<item>AdapterNonExistent</item>\n\t\t\t<item>AdapterNonExistentHelper</item>\n\t\t\t<item>AdapterStateHelper</item>\n\t\t\t<item>AddressHelper</item>\n\t\t\t<item>Adjustable</item>\n\t\t\t<item>AdjustmentEvent</item>\n\t\t\t<item>AdjustmentListener</item>\n\t\t\t<item>Adler32</item>\n\t\t\t<item>AffineTransform</item>\n\t\t\t<item>AffineTransformOp</item>\n\t\t\t<item>AlgorithmParameterGenerator</item>\n\t\t\t<item>AlgorithmParameterGeneratorSpi</item>\n\t\t\t<item>AlgorithmParameterSpec</item>\n\t\t\t<item>AlgorithmParameters</item>\n\t\t\t<item>AlgorithmParametersSpi</item>\n\t\t\t<item>AllPermission</item>\n\t\t\t<item>AlphaComposite</item>\n\t\t\t<item>AlreadyBound</item>\n\t\t\t<item>AlreadyBoundException</item>\n\t\t\t<item>AlreadyBoundHelper</item>\n\t\t\t<item>AlreadyBoundHolder</item>\n\t\t\t<item>AlreadyConnectedException</item>\n\t\t\t<item>AncestorEvent</item>\n\t\t\t<item>AncestorListener</item>\n\t\t\t<item>AnnotatedElement</item>\n\t\t\t<item>Annotation</item>\n\t\t\t<item>AnnotationFormatError</item>\n\t\t\t<item>AnnotationTypeMismatchException</item>\n\t\t\t<item>Any</item>\n\t\t\t<item>AnyHolder</item>\n\t\t\t<item>AnySeqHelper</item>\n\t\t\t<item>AnySeqHelper</item>\n\t\t\t<item>AnySeqHolder</item>\n\t\t\t<item>AppConfigurationEntry</item>\n\t\t\t<item>AppConfigurationEntry.LoginModuleControlFlag</item>\n\t\t\t<item>Appendable</item>\n\t\t\t<item>Applet</item>\n\t\t\t<item>AppletContext</item>\n\t\t\t<item>AppletInitializer</item>\n\t\t\t<item>AppletStub</item>\n\t\t\t<item>ApplicationException</item>\n\t\t\t<item>Arc2D</item>\n\t\t\t<item>Arc2D.Double</item>\n\t\t\t<item>Arc2D.Float</item>\n\t\t\t<item>Area</item>\n\t\t\t<item>AreaAveragingScaleFilter</item>\n\t\t\t<item>ArithmeticException</item>\n\t\t\t<item>Array</item>\n\t\t\t<item>Array</item>\n\t\t\t<item>ArrayBlockingQueue</item>\n\t\t\t<item>ArrayIndexOutOfBoundsException</item>\n\t\t\t<item>ArrayList</item>\n\t\t\t<item>ArrayStoreException</item>\n\t\t\t<item>ArrayType</item>\n\t\t\t<item>Arrays</item>\n\t\t\t<item>AssertionError</item>\n\t\t\t<item>AsyncBoxView</item>\n\t\t\t<item>AsynchronousCloseException</item>\n\t\t\t<item>AtomicBoolean</item>\n\t\t\t<item>AtomicInteger</item>\n\t\t\t<item>AtomicIntegerArray</item>\n\t\t\t<item>AtomicIntegerFieldUpdater</item>\n\t\t\t<item>AtomicLong</item>\n\t\t\t<item>AtomicLongArray</item>\n\t\t\t<item>AtomicLongFieldUpdater</item>\n\t\t\t<item>AtomicMarkableReference</item>\n\t\t\t<item>AtomicReference</item>\n\t\t\t<item>AtomicReferenceArray</item>\n\t\t\t<item>AtomicReferenceFieldUpdater</item>\n\t\t\t<item>AtomicStampedReference</item>\n\t\t\t<item>Attr</item>\n\t\t\t<item>Attribute</item>\n\t\t\t<item>Attribute</item>\n\t\t\t<item>Attribute</item>\n\t\t\t<item>AttributeChangeNotification</item>\n\t\t\t<item>AttributeChangeNotificationFilter</item>\n\t\t\t<item>AttributeException</item>\n\t\t\t<item>AttributeInUseException</item>\n\t\t\t<item>AttributeList</item>\n\t\t\t<item>AttributeList</item>\n\t\t\t<item>AttributeList</item>\n\t\t\t<item>AttributeListImpl</item>\n\t\t\t<item>AttributeModificationException</item>\n\t\t\t<item>AttributeNotFoundException</item>\n\t\t\t<item>AttributeSet</item>\n\t\t\t<item>AttributeSet</item>\n\t\t\t<item>AttributeSet.CharacterAttribute</item>\n\t\t\t<item>AttributeSet.ColorAttribute</item>\n\t\t\t<item>AttributeSet.FontAttribute</item>\n\t\t\t<item>AttributeSet.ParagraphAttribute</item>\n\t\t\t<item>AttributeSetUtilities</item>\n\t\t\t<item>AttributeValueExp</item>\n\t\t\t<item>AttributedCharacterIterator</item>\n\t\t\t<item>AttributedCharacterIterator.Attribute</item>\n\t\t\t<item>AttributedString</item>\n\t\t\t<item>Attributes</item>\n\t\t\t<item>Attributes</item>\n\t\t\t<item>Attributes</item>\n\t\t\t<item>Attributes.Name</item>\n\t\t\t<item>Attributes2</item>\n\t\t\t<item>Attributes2Impl</item>\n\t\t\t<item>AttributesImpl</item>\n\t\t\t<item>AudioClip</item>\n\t\t\t<item>AudioFileFormat</item>\n\t\t\t<item>AudioFileFormat.Type</item>\n\t\t\t<item>AudioFileReader</item>\n\t\t\t<item>AudioFileWriter</item>\n\t\t\t<item>AudioFormat</item>\n\t\t\t<item>AudioFormat.Encoding</item>\n\t\t\t<item>AudioInputStream</item>\n\t\t\t<item>AudioPermission</item>\n\t\t\t<item>AudioSystem</item>\n\t\t\t<item>AuthPermission</item>\n\t\t\t<item>AuthProvider</item>\n\t\t\t<item>AuthenticationException</item>\n\t\t\t<item>AuthenticationException</item>\n\t\t\t<item>AuthenticationNotSupportedException</item>\n\t\t\t<item>Authenticator</item>\n\t\t\t<item>Authenticator.RequestorType</item>\n\t\t\t<item>AuthorizeCallback</item>\n\t\t\t<item>Autoscroll</item>\n\t\t\t<item>BAD_CONTEXT</item>\n\t\t\t<item>BAD_INV_ORDER</item>\n\t\t\t<item>BAD_OPERATION</item>\n\t\t\t<item>BAD_PARAM</item>\n\t\t\t<item>BAD_POLICY</item>\n\t\t\t<item>BAD_POLICY_TYPE</item>\n\t\t\t<item>BAD_POLICY_VALUE</item>\n\t\t\t<item>BAD_QOS</item>\n\t\t\t<item>BAD_TYPECODE</item>\n\t\t\t<item>BMPImageWriteParam</item>\n\t\t\t<item>BackingStoreException</item>\n\t\t\t<item>BadAttributeValueExpException</item>\n\t\t\t<item>BadBinaryOpValueExpException</item>\n\t\t\t<item>BadKind</item>\n\t\t\t<item>BadLocationException</item>\n\t\t\t<item>BadPaddingException</item>\n\t\t\t<item>BadStringOperationException</item>\n\t\t\t<item>BandCombineOp</item>\n\t\t\t<item>BandedSampleModel</item>\n\t\t\t<item>BaseRowSet</item>\n\t\t\t<item>BasicArrowButton</item>\n\t\t\t<item>BasicAttribute</item>\n\t\t\t<item>BasicAttributes</item>\n\t\t\t<item>BasicBorders</item>\n\t\t\t<item>BasicBorders.ButtonBorder</item>\n\t\t\t<item>BasicBorders.FieldBorder</item>\n\t\t\t<item>BasicBorders.MarginBorder</item>\n\t\t\t<item>BasicBorders.MenuBarBorder</item>\n\t\t\t<item>BasicBorders.RadioButtonBorder</item>\n\t\t\t<item>BasicBorders.RolloverButtonBorder</item>\n\t\t\t<item>BasicBorders.SplitPaneBorder</item>\n\t\t\t<item>BasicBorders.ToggleButtonBorder</item>\n\t\t\t<item>BasicButtonListener</item>\n\t\t\t<item>BasicButtonUI</item>\n\t\t\t<item>BasicCheckBoxMenuItemUI</item>\n\t\t\t<item>BasicCheckBoxUI</item>\n\t\t\t<item>BasicColorChooserUI</item>\n\t\t\t<item>BasicComboBoxEditor</item>\n\t\t\t<item>BasicComboBoxEditor.UIResource</item>\n\t\t\t<item>BasicComboBoxRenderer</item>\n\t\t\t<item>BasicComboBoxRenderer.UIResource</item>\n\t\t\t<item>BasicComboBoxUI</item>\n\t\t\t<item>BasicComboPopup</item>\n\t\t\t<item>BasicControl</item>\n\t\t\t<item>BasicDesktopIconUI</item>\n\t\t\t<item>BasicDesktopPaneUI</item>\n\t\t\t<item>BasicDirectoryModel</item>\n\t\t\t<item>BasicEditorPaneUI</item>\n\t\t\t<item>BasicFileChooserUI</item>\n\t\t\t<item>BasicFormattedTextFieldUI</item>\n\t\t\t<item>BasicGraphicsUtils</item>\n\t\t\t<item>BasicHTML</item>\n\t\t\t<item>BasicIconFactory</item>\n\t\t\t<item>BasicInternalFrameTitlePane</item>\n\t\t\t<item>BasicInternalFrameUI</item>\n\t\t\t<item>BasicLabelUI</item>\n\t\t\t<item>BasicListUI</item>\n\t\t\t<item>BasicLookAndFeel</item>\n\t\t\t<item>BasicMenuBarUI</item>\n\t\t\t<item>BasicMenuItemUI</item>\n\t\t\t<item>BasicMenuUI</item>\n\t\t\t<item>BasicOptionPaneUI</item>\n\t\t\t<item>BasicOptionPaneUI.ButtonAreaLayout</item>\n\t\t\t<item>BasicPanelUI</item>\n\t\t\t<item>BasicPasswordFieldUI</item>\n\t\t\t<item>BasicPermission</item>\n\t\t\t<item>BasicPopupMenuSeparatorUI</item>\n\t\t\t<item>BasicPopupMenuUI</item>\n\t\t\t<item>BasicProgressBarUI</item>\n\t\t\t<item>BasicRadioButtonMenuItemUI</item>\n\t\t\t<item>BasicRadioButtonUI</item>\n\t\t\t<item>BasicRootPaneUI</item>\n\t\t\t<item>BasicScrollBarUI</item>\n\t\t\t<item>BasicScrollPaneUI</item>\n\t\t\t<item>BasicSeparatorUI</item>\n\t\t\t<item>BasicSliderUI</item>\n\t\t\t<item>BasicSpinnerUI</item>\n\t\t\t<item>BasicSplitPaneDivider</item>\n\t\t\t<item>BasicSplitPaneUI</item>\n\t\t\t<item>BasicStroke</item>\n\t\t\t<item>BasicTabbedPaneUI</item>\n\t\t\t<item>BasicTableHeaderUI</item>\n\t\t\t<item>BasicTableUI</item>\n\t\t\t<item>BasicTextAreaUI</item>\n\t\t\t<item>BasicTextFieldUI</item>\n\t\t\t<item>BasicTextPaneUI</item>\n\t\t\t<item>BasicTextUI</item>\n\t\t\t<item>BasicTextUI.BasicCaret</item>\n\t\t\t<item>BasicTextUI.BasicHighlighter</item>\n\t\t\t<item>BasicToggleButtonUI</item>\n\t\t\t<item>BasicToolBarSeparatorUI</item>\n\t\t\t<item>BasicToolBarUI</item>\n\t\t\t<item>BasicToolTipUI</item>\n\t\t\t<item>BasicTreeUI</item>\n\t\t\t<item>BasicViewportUI</item>\n\t\t\t<item>BatchUpdateException</item>\n\t\t\t<item>BeanContext</item>\n\t\t\t<item>BeanContextChild</item>\n\t\t\t<item>BeanContextChildComponentProxy</item>\n\t\t\t<item>BeanContextChildSupport</item>\n\t\t\t<item>BeanContextContainerProxy</item>\n\t\t\t<item>BeanContextEvent</item>\n\t\t\t<item>BeanContextMembershipEvent</item>\n\t\t\t<item>BeanContextMembershipListener</item>\n\t\t\t<item>BeanContextProxy</item>\n\t\t\t<item>BeanContextServiceAvailableEvent</item>\n\t\t\t<item>BeanContextServiceProvider</item>\n\t\t\t<item>BeanContextServiceProviderBeanInfo</item>\n\t\t\t<item>BeanContextServiceRevokedEvent</item>\n\t\t\t<item>BeanContextServiceRevokedListener</item>\n\t\t\t<item>BeanContextServices</item>\n\t\t\t<item>BeanContextServicesListener</item>\n\t\t\t<item>BeanContextServicesSupport</item>\n\t\t\t<item>BeanContextServicesSupport.BCSSServiceProvider</item>\n\t\t\t<item>BeanContextSupport</item>\n\t\t\t<item>BeanContextSupport.BCSIterator</item>\n\t\t\t<item>BeanDescriptor</item>\n\t\t\t<item>BeanInfo</item>\n\t\t\t<item>Beans</item>\n\t\t\t<item>BevelBorder</item>\n\t\t\t<item>Bidi</item>\n\t\t\t<item>BigDecimal</item>\n\t\t\t<item>BigInteger</item>\n\t\t\t<item>BinaryRefAddr</item>\n\t\t\t<item>BindException</item>\n\t\t\t<item>Binding</item>\n\t\t\t<item>Binding</item>\n\t\t\t<item>BindingHelper</item>\n\t\t\t<item>BindingHolder</item>\n\t\t\t<item>BindingIterator</item>\n\t\t\t<item>BindingIteratorHelper</item>\n\t\t\t<item>BindingIteratorHolder</item>\n\t\t\t<item>BindingIteratorOperations</item>\n\t\t\t<item>BindingIteratorPOA</item>\n\t\t\t<item>BindingListHelper</item>\n\t\t\t<item>BindingListHolder</item>\n\t\t\t<item>BindingType</item>\n\t\t\t<item>BindingTypeHelper</item>\n\t\t\t<item>BindingTypeHolder</item>\n\t\t\t<item>BitSet</item>\n\t\t\t<item>Blob</item>\n\t\t\t<item>BlockView</item>\n\t\t\t<item>BlockingQueue</item>\n\t\t\t<item>Book</item>\n\t\t\t<item>Boolean</item>\n\t\t\t<item>BooleanControl</item>\n\t\t\t<item>BooleanControl.Type</item>\n\t\t\t<item>BooleanHolder</item>\n\t\t\t<item>BooleanSeqHelper</item>\n\t\t\t<item>BooleanSeqHolder</item>\n\t\t\t<item>Border</item>\n\t\t\t<item>BorderFactory</item>\n\t\t\t<item>BorderLayout</item>\n\t\t\t<item>BorderUIResource</item>\n\t\t\t<item>BorderUIResource.BevelBorderUIResource</item>\n\t\t\t<item>BorderUIResource.CompoundBorderUIResource</item>\n\t\t\t<item>BorderUIResource.EmptyBorderUIResource</item>\n\t\t\t<item>BorderUIResource.EtchedBorderUIResource</item>\n\t\t\t<item>BorderUIResource.LineBorderUIResource</item>\n\t\t\t<item>BorderUIResource.MatteBorderUIResource</item>\n\t\t\t<item>BorderUIResource.TitledBorderUIResource</item>\n\t\t\t<item>BoundedRangeModel</item>\n\t\t\t<item>Bounds</item>\n\t\t\t<item>Bounds</item>\n\t\t\t<item>Box</item>\n\t\t\t<item>Box.Filler</item>\n\t\t\t<item>BoxLayout</item>\n\t\t\t<item>BoxView</item>\n\t\t\t<item>BoxedValueHelper</item>\n\t\t\t<item>BreakIterator</item>\n\t\t\t<item>BrokenBarrierException</item>\n\t\t\t<item>Buffer</item>\n\t\t\t<item>BufferCapabilities</item>\n\t\t\t<item>BufferCapabilities.FlipContents</item>\n\t\t\t<item>BufferOverflowException</item>\n\t\t\t<item>BufferStrategy</item>\n\t\t\t<item>BufferUnderflowException</item>\n\t\t\t<item>BufferedImage</item>\n\t\t\t<item>BufferedImageFilter</item>\n\t\t\t<item>BufferedImageOp</item>\n\t\t\t<item>BufferedInputStream</item>\n\t\t\t<item>BufferedOutputStream</item>\n\t\t\t<item>BufferedReader</item>\n\t\t\t<item>BufferedWriter</item>\n\t\t\t<item>Button</item>\n\t\t\t<item>ButtonGroup</item>\n\t\t\t<item>ButtonModel</item>\n\t\t\t<item>ButtonUI</item>\n\t\t\t<item>Byte</item>\n\t\t\t<item>ByteArrayInputStream</item>\n\t\t\t<item>ByteArrayOutputStream</item>\n\t\t\t<item>ByteBuffer</item>\n\t\t\t<item>ByteChannel</item>\n\t\t\t<item>ByteHolder</item>\n\t\t\t<item>ByteLookupTable</item>\n\t\t\t<item>ByteOrder</item>\n\t\t\t<item>CDATASection</item>\n\t\t\t<item>CMMException</item>\n\t\t\t<item>CODESET_INCOMPATIBLE</item>\n\t\t\t<item>COMM_FAILURE</item>\n\t\t\t<item>CRC32</item>\n\t\t\t<item>CRL</item>\n\t\t\t<item>CRLException</item>\n\t\t\t<item>CRLSelector</item>\n\t\t\t<item>CSS</item>\n\t\t\t<item>CSS.Attribute</item>\n\t\t\t<item>CTX_RESTRICT_SCOPE</item>\n\t\t\t<item>CacheRequest</item>\n\t\t\t<item>CacheResponse</item>\n\t\t\t<item>CachedRowSet</item>\n\t\t\t<item>Calendar</item>\n\t\t\t<item>Callable</item>\n\t\t\t<item>CallableStatement</item>\n\t\t\t<item>Callback</item>\n\t\t\t<item>CallbackHandler</item>\n\t\t\t<item>CancelablePrintJob</item>\n\t\t\t<item>CancellationException</item>\n\t\t\t<item>CancelledKeyException</item>\n\t\t\t<item>CannotProceed</item>\n\t\t\t<item>CannotProceedException</item>\n\t\t\t<item>CannotProceedHelper</item>\n\t\t\t<item>CannotProceedHolder</item>\n\t\t\t<item>CannotRedoException</item>\n\t\t\t<item>CannotUndoException</item>\n\t\t\t<item>Canvas</item>\n\t\t\t<item>CardLayout</item>\n\t\t\t<item>Caret</item>\n\t\t\t<item>CaretEvent</item>\n\t\t\t<item>CaretListener</item>\n\t\t\t<item>CellEditor</item>\n\t\t\t<item>CellEditorListener</item>\n\t\t\t<item>CellRendererPane</item>\n\t\t\t<item>CertPath</item>\n\t\t\t<item>CertPath.CertPathRep</item>\n\t\t\t<item>CertPathBuilder</item>\n\t\t\t<item>CertPathBuilderException</item>\n\t\t\t<item>CertPathBuilderResult</item>\n\t\t\t<item>CertPathBuilderSpi</item>\n\t\t\t<item>CertPathParameters</item>\n\t\t\t<item>CertPathTrustManagerParameters</item>\n\t\t\t<item>CertPathValidator</item>\n\t\t\t<item>CertPathValidatorException</item>\n\t\t\t<item>CertPathValidatorResult</item>\n\t\t\t<item>CertPathValidatorSpi</item>\n\t\t\t<item>CertSelector</item>\n\t\t\t<item>CertStore</item>\n\t\t\t<item>CertStoreException</item>\n\t\t\t<item>CertStoreParameters</item>\n\t\t\t<item>CertStoreSpi</item>\n\t\t\t<item>Certificate</item>\n\t\t\t<item>Certificate</item>\n\t\t\t<item>Certificate</item>\n\t\t\t<item>Certificate.CertificateRep</item>\n\t\t\t<item>CertificateEncodingException</item>\n\t\t\t<item>CertificateEncodingException</item>\n\t\t\t<item>CertificateException</item>\n\t\t\t<item>CertificateException</item>\n\t\t\t<item>CertificateExpiredException</item>\n\t\t\t<item>CertificateExpiredException</item>\n\t\t\t<item>CertificateFactory</item>\n\t\t\t<item>CertificateFactorySpi</item>\n\t\t\t<item>CertificateNotYetValidException</item>\n\t\t\t<item>CertificateNotYetValidException</item>\n\t\t\t<item>CertificateParsingException</item>\n\t\t\t<item>CertificateParsingException</item>\n\t\t\t<item>ChangeEvent</item>\n\t\t\t<item>ChangeListener</item>\n\t\t\t<item>ChangedCharSetException</item>\n\t\t\t<item>Channel</item>\n\t\t\t<item>ChannelBinding</item>\n\t\t\t<item>Channels</item>\n\t\t\t<item>CharArrayReader</item>\n\t\t\t<item>CharArrayWriter</item>\n\t\t\t<item>CharBuffer</item>\n\t\t\t<item>CharConversionException</item>\n\t\t\t<item>CharHolder</item>\n\t\t\t<item>CharSeqHelper</item>\n\t\t\t<item>CharSeqHolder</item>\n\t\t\t<item>CharSequence</item>\n\t\t\t<item>Character</item>\n\t\t\t<item>Character.Subset</item>\n\t\t\t<item>Character.UnicodeBlock</item>\n\t\t\t<item>CharacterCodingException</item>\n\t\t\t<item>CharacterData</item>\n\t\t\t<item>CharacterIterator</item>\n\t\t\t<item>Charset</item>\n\t\t\t<item>CharsetDecoder</item>\n\t\t\t<item>CharsetEncoder</item>\n\t\t\t<item>CharsetProvider</item>\n\t\t\t<item>Checkbox</item>\n\t\t\t<item>CheckboxGroup</item>\n\t\t\t<item>CheckboxMenuItem</item>\n\t\t\t<item>CheckedInputStream</item>\n\t\t\t<item>CheckedOutputStream</item>\n\t\t\t<item>Checksum</item>\n\t\t\t<item>Choice</item>\n\t\t\t<item>ChoiceCallback</item>\n\t\t\t<item>ChoiceFormat</item>\n\t\t\t<item>Chromaticity</item>\n\t\t\t<item>Cipher</item>\n\t\t\t<item>CipherInputStream</item>\n\t\t\t<item>CipherOutputStream</item>\n\t\t\t<item>CipherSpi</item>\n\t\t\t<item>Class</item>\n\t\t\t<item>ClassCastException</item>\n\t\t\t<item>ClassCircularityError</item>\n\t\t\t<item>ClassDefinition</item>\n\t\t\t<item>ClassDesc</item>\n\t\t\t<item>ClassFileTransformer</item>\n\t\t\t<item>ClassFormatError</item>\n\t\t\t<item>ClassLoader</item>\n\t\t\t<item>ClassLoaderRepository</item>\n\t\t\t<item>ClassLoadingMXBean</item>\n\t\t\t<item>ClassNotFoundException</item>\n\t\t\t<item>ClientRequestInfo</item>\n\t\t\t<item>ClientRequestInfoOperations</item>\n\t\t\t<item>ClientRequestInterceptor</item>\n\t\t\t<item>ClientRequestInterceptorOperations</item>\n\t\t\t<item>Clip</item>\n\t\t\t<item>Clipboard</item>\n\t\t\t<item>ClipboardOwner</item>\n\t\t\t<item>Clob</item>\n\t\t\t<item>CloneNotSupportedException</item>\n\t\t\t<item>Cloneable</item>\n\t\t\t<item>Closeable</item>\n\t\t\t<item>ClosedByInterruptException</item>\n\t\t\t<item>ClosedChannelException</item>\n\t\t\t<item>ClosedSelectorException</item>\n\t\t\t<item>CodeSets</item>\n\t\t\t<item>CodeSigner</item>\n\t\t\t<item>CodeSource</item>\n\t\t\t<item>Codec</item>\n\t\t\t<item>CodecFactory</item>\n\t\t\t<item>CodecFactoryHelper</item>\n\t\t\t<item>CodecFactoryOperations</item>\n\t\t\t<item>CodecOperations</item>\n\t\t\t<item>CoderMalfunctionError</item>\n\t\t\t<item>CoderResult</item>\n\t\t\t<item>CodingErrorAction</item>\n\t\t\t<item>CollationElementIterator</item>\n\t\t\t<item>CollationKey</item>\n\t\t\t<item>Collator</item>\n\t\t\t<item>Collection</item>\n\t\t\t<item>CollectionCertStoreParameters</item>\n\t\t\t<item>Collections</item>\n\t\t\t<item>Color</item>\n\t\t\t<item>ColorChooserComponentFactory</item>\n\t\t\t<item>ColorChooserUI</item>\n\t\t\t<item>ColorConvertOp</item>\n\t\t\t<item>ColorModel</item>\n\t\t\t<item>ColorSelectionModel</item>\n\t\t\t<item>ColorSpace</item>\n\t\t\t<item>ColorSupported</item>\n\t\t\t<item>ColorType</item>\n\t\t\t<item>ColorUIResource</item>\n\t\t\t<item>ComboBoxEditor</item>\n\t\t\t<item>ComboBoxModel</item>\n\t\t\t<item>ComboBoxUI</item>\n\t\t\t<item>ComboPopup</item>\n\t\t\t<item>Comment</item>\n\t\t\t<item>CommunicationException</item>\n\t\t\t<item>Comparable</item>\n\t\t\t<item>Comparator</item>\n\t\t\t<item>CompilationMXBean</item>\n\t\t\t<item>Compiler</item>\n\t\t\t<item>CompletionService</item>\n\t\t\t<item>CompletionStatus</item>\n\t\t\t<item>CompletionStatusHelper</item>\n\t\t\t<item>Component</item>\n\t\t\t<item>ComponentAdapter</item>\n\t\t\t<item>ComponentColorModel</item>\n\t\t\t<item>ComponentEvent</item>\n\t\t\t<item>ComponentIdHelper</item>\n\t\t\t<item>ComponentInputMap</item>\n\t\t\t<item>ComponentInputMapUIResource</item>\n\t\t\t<item>ComponentListener</item>\n\t\t\t<item>ComponentOrientation</item>\n\t\t\t<item>ComponentSampleModel</item>\n\t\t\t<item>ComponentUI</item>\n\t\t\t<item>ComponentView</item>\n\t\t\t<item>Composite</item>\n\t\t\t<item>CompositeContext</item>\n\t\t\t<item>CompositeData</item>\n\t\t\t<item>CompositeDataSupport</item>\n\t\t\t<item>CompositeName</item>\n\t\t\t<item>CompositeType</item>\n\t\t\t<item>CompositeView</item>\n\t\t\t<item>CompoundBorder</item>\n\t\t\t<item>CompoundControl</item>\n\t\t\t<item>CompoundControl.Type</item>\n\t\t\t<item>CompoundEdit</item>\n\t\t\t<item>CompoundName</item>\n\t\t\t<item>Compression</item>\n\t\t\t<item>ConcurrentHashMap</item>\n\t\t\t<item>ConcurrentLinkedQueue</item>\n\t\t\t<item>ConcurrentMap</item>\n\t\t\t<item>ConcurrentModificationException</item>\n\t\t\t<item>Condition</item>\n\t\t\t<item>Configuration</item>\n\t\t\t<item>ConfigurationException</item>\n\t\t\t<item>ConfirmationCallback</item>\n\t\t\t<item>ConnectException</item>\n\t\t\t<item>ConnectException</item>\n\t\t\t<item>ConnectIOException</item>\n\t\t\t<item>Connection</item>\n\t\t\t<item>ConnectionEvent</item>\n\t\t\t<item>ConnectionEventListener</item>\n\t\t\t<item>ConnectionPendingException</item>\n\t\t\t<item>ConnectionPoolDataSource</item>\n\t\t\t<item>ConsoleHandler</item>\n\t\t\t<item>Constructor</item>\n\t\t\t<item>Container</item>\n\t\t\t<item>ContainerAdapter</item>\n\t\t\t<item>ContainerEvent</item>\n\t\t\t<item>ContainerListener</item>\n\t\t\t<item>ContainerOrderFocusTraversalPolicy</item>\n\t\t\t<item>ContentHandler</item>\n\t\t\t<item>ContentHandler</item>\n\t\t\t<item>ContentHandlerFactory</item>\n\t\t\t<item>ContentModel</item>\n\t\t\t<item>Context</item>\n\t\t\t<item>Context</item>\n\t\t\t<item>ContextList</item>\n\t\t\t<item>ContextNotEmptyException</item>\n\t\t\t<item>ContextualRenderedImageFactory</item>\n\t\t\t<item>Control</item>\n\t\t\t<item>Control</item>\n\t\t\t<item>Control.Type</item>\n\t\t\t<item>ControlFactory</item>\n\t\t\t<item>ControllerEventListener</item>\n\t\t\t<item>ConvolveOp</item>\n\t\t\t<item>CookieHandler</item>\n\t\t\t<item>CookieHolder</item>\n\t\t\t<item>Copies</item>\n\t\t\t<item>CopiesSupported</item>\n\t\t\t<item>CopyOnWriteArrayList</item>\n\t\t\t<item>CopyOnWriteArraySet</item>\n\t\t\t<item>CountDownLatch</item>\n\t\t\t<item>CounterMonitor</item>\n\t\t\t<item>CounterMonitorMBean</item>\n\t\t\t<item>CredentialException</item>\n\t\t\t<item>CredentialExpiredException</item>\n\t\t\t<item>CredentialNotFoundException</item>\n\t\t\t<item>CropImageFilter</item>\n\t\t\t<item>CubicCurve2D</item>\n\t\t\t<item>CubicCurve2D.Double</item>\n\t\t\t<item>CubicCurve2D.Float</item>\n\t\t\t<item>Currency</item>\n\t\t\t<item>Current</item>\n\t\t\t<item>Current</item>\n\t\t\t<item>Current</item>\n\t\t\t<item>CurrentHelper</item>\n\t\t\t<item>CurrentHelper</item>\n\t\t\t<item>CurrentHelper</item>\n\t\t\t<item>CurrentHolder</item>\n\t\t\t<item>CurrentOperations</item>\n\t\t\t<item>CurrentOperations</item>\n\t\t\t<item>CurrentOperations</item>\n\t\t\t<item>Cursor</item>\n\t\t\t<item>CustomMarshal</item>\n\t\t\t<item>CustomValue</item>\n\t\t\t<item>Customizer</item>\n\t\t\t<item>CyclicBarrier</item>\n\t\t\t<item>DATA_CONVERSION</item>\n\t\t\t<item>DESKeySpec</item>\n\t\t\t<item>DESedeKeySpec</item>\n\t\t\t<item>DGC</item>\n\t\t\t<item>DHGenParameterSpec</item>\n\t\t\t<item>DHKey</item>\n\t\t\t<item>DHParameterSpec</item>\n\t\t\t<item>DHPrivateKey</item>\n\t\t\t<item>DHPrivateKeySpec</item>\n\t\t\t<item>DHPublicKey</item>\n\t\t\t<item>DHPublicKeySpec</item>\n\t\t\t<item>DISCARDING</item>\n\t\t\t<item>DOMConfiguration</item>\n\t\t\t<item>DOMError</item>\n\t\t\t<item>DOMErrorHandler</item>\n\t\t\t<item>DOMException</item>\n\t\t\t<item>DOMImplementation</item>\n\t\t\t<item>DOMImplementationLS</item>\n\t\t\t<item>DOMImplementationList</item>\n\t\t\t<item>DOMImplementationRegistry</item>\n\t\t\t<item>DOMImplementationSource</item>\n\t\t\t<item>DOMLocator</item>\n\t\t\t<item>DOMLocator</item>\n\t\t\t<item>DOMResult</item>\n\t\t\t<item>DOMSource</item>\n\t\t\t<item>DOMStringList</item>\n\t\t\t<item>DSAKey</item>\n\t\t\t<item>DSAKeyPairGenerator</item>\n\t\t\t<item>DSAParameterSpec</item>\n\t\t\t<item>DSAParams</item>\n\t\t\t<item>DSAPrivateKey</item>\n\t\t\t<item>DSAPrivateKeySpec</item>\n\t\t\t<item>DSAPublicKey</item>\n\t\t\t<item>DSAPublicKeySpec</item>\n\t\t\t<item>DTD</item>\n\t\t\t<item>DTDConstants</item>\n\t\t\t<item>DTDHandler</item>\n\t\t\t<item>DataBuffer</item>\n\t\t\t<item>DataBufferByte</item>\n\t\t\t<item>DataBufferDouble</item>\n\t\t\t<item>DataBufferFloat</item>\n\t\t\t<item>DataBufferInt</item>\n\t\t\t<item>DataBufferShort</item>\n\t\t\t<item>DataBufferUShort</item>\n\t\t\t<item>DataFlavor</item>\n\t\t\t<item>DataFormatException</item>\n\t\t\t<item>DataInput</item>\n\t\t\t<item>DataInputStream</item>\n\t\t\t<item>DataInputStream</item>\n\t\t\t<item>DataLine</item>\n\t\t\t<item>DataLine.Info</item>\n\t\t\t<item>DataOutput</item>\n\t\t\t<item>DataOutputStream</item>\n\t\t\t<item>DataOutputStream</item>\n\t\t\t<item>DataSource</item>\n\t\t\t<item>DataTruncation</item>\n\t\t\t<item>DatabaseMetaData</item>\n\t\t\t<item>DatagramChannel</item>\n\t\t\t<item>DatagramPacket</item>\n\t\t\t<item>DatagramSocket</item>\n\t\t\t<item>DatagramSocketImpl</item>\n\t\t\t<item>DatagramSocketImplFactory</item>\n\t\t\t<item>DatatypeConfigurationException</item>\n\t\t\t<item>DatatypeConstants</item>\n\t\t\t<item>DatatypeConstants.Field</item>\n\t\t\t<item>DatatypeFactory</item>\n\t\t\t<item>Date</item>\n\t\t\t<item>Date</item>\n\t\t\t<item>DateFormat</item>\n\t\t\t<item>DateFormat.Field</item>\n\t\t\t<item>DateFormatSymbols</item>\n\t\t\t<item>DateFormatter</item>\n\t\t\t<item>DateTimeAtCompleted</item>\n\t\t\t<item>DateTimeAtCreation</item>\n\t\t\t<item>DateTimeAtProcessing</item>\n\t\t\t<item>DateTimeSyntax</item>\n\t\t\t<item>DebugGraphics</item>\n\t\t\t<item>DecimalFormat</item>\n\t\t\t<item>DecimalFormatSymbols</item>\n\t\t\t<item>DeclHandler</item>\n\t\t\t<item>DefaultBoundedRangeModel</item>\n\t\t\t<item>DefaultButtonModel</item>\n\t\t\t<item>DefaultCaret</item>\n\t\t\t<item>DefaultCellEditor</item>\n\t\t\t<item>DefaultColorSelectionModel</item>\n\t\t\t<item>DefaultComboBoxModel</item>\n\t\t\t<item>DefaultDesktopManager</item>\n\t\t\t<item>DefaultEditorKit</item>\n\t\t\t<item>DefaultEditorKit.BeepAction</item>\n\t\t\t<item>DefaultEditorKit.CopyAction</item>\n\t\t\t<item>DefaultEditorKit.CutAction</item>\n\t\t\t<item>DefaultEditorKit.DefaultKeyTypedAction</item>\n\t\t\t<item>DefaultEditorKit.InsertBreakAction</item>\n\t\t\t<item>DefaultEditorKit.InsertContentAction</item>\n\t\t\t<item>DefaultEditorKit.InsertTabAction</item>\n\t\t\t<item>DefaultEditorKit.PasteAction</item>\n\t\t\t<item>DefaultFocusManager</item>\n\t\t\t<item>DefaultFocusTraversalPolicy</item>\n\t\t\t<item>DefaultFormatter</item>\n\t\t\t<item>DefaultFormatterFactory</item>\n\t\t\t<item>DefaultHandler</item>\n\t\t\t<item>DefaultHandler2</item>\n\t\t\t<item>DefaultHighlighter</item>\n\t\t\t<item>DefaultHighlighter.DefaultHighlightPainter</item>\n\t\t\t<item>DefaultKeyboardFocusManager</item>\n\t\t\t<item>DefaultListCellRenderer</item>\n\t\t\t<item>DefaultListCellRenderer.UIResource</item>\n\t\t\t<item>DefaultListModel</item>\n\t\t\t<item>DefaultListSelectionModel</item>\n\t\t\t<item>DefaultLoaderRepository</item>\n\t\t\t<item>DefaultLoaderRepository</item>\n\t\t\t<item>DefaultMenuLayout</item>\n\t\t\t<item>DefaultMetalTheme</item>\n\t\t\t<item>DefaultMutableTreeNode</item>\n\t\t\t<item>DefaultPersistenceDelegate</item>\n\t\t\t<item>DefaultSingleSelectionModel</item>\n\t\t\t<item>DefaultStyledDocument</item>\n\t\t\t<item>DefaultStyledDocument.AttributeUndoableEdit</item>\n\t\t\t<item>DefaultStyledDocument.ElementSpec</item>\n\t\t\t<item>DefaultTableCellRenderer</item>\n\t\t\t<item>DefaultTableCellRenderer.UIResource</item>\n\t\t\t<item>DefaultTableColumnModel</item>\n\t\t\t<item>DefaultTableModel</item>\n\t\t\t<item>DefaultTextUI</item>\n\t\t\t<item>DefaultTreeCellEditor</item>\n\t\t\t<item>DefaultTreeCellRenderer</item>\n\t\t\t<item>DefaultTreeModel</item>\n\t\t\t<item>DefaultTreeSelectionModel</item>\n\t\t\t<item>DefinitionKind</item>\n\t\t\t<item>DefinitionKindHelper</item>\n\t\t\t<item>Deflater</item>\n\t\t\t<item>DeflaterOutputStream</item>\n\t\t\t<item>DelayQueue</item>\n\t\t\t<item>Delayed</item>\n\t\t\t<item>Delegate</item>\n\t\t\t<item>Delegate</item>\n\t\t\t<item>Delegate</item>\n\t\t\t<item>DelegationPermission</item>\n\t\t\t<item>Deprecated</item>\n\t\t\t<item>Descriptor</item>\n\t\t\t<item>DescriptorAccess</item>\n\t\t\t<item>DescriptorSupport</item>\n\t\t\t<item>DesignMode</item>\n\t\t\t<item>DesktopIconUI</item>\n\t\t\t<item>DesktopManager</item>\n\t\t\t<item>DesktopPaneUI</item>\n\t\t\t<item>Destination</item>\n\t\t\t<item>DestroyFailedException</item>\n\t\t\t<item>Destroyable</item>\n\t\t\t<item>Dialog</item>\n\t\t\t<item>Dictionary</item>\n\t\t\t<item>DigestException</item>\n\t\t\t<item>DigestInputStream</item>\n\t\t\t<item>DigestOutputStream</item>\n\t\t\t<item>Dimension</item>\n\t\t\t<item>Dimension2D</item>\n\t\t\t<item>DimensionUIResource</item>\n\t\t\t<item>DirContext</item>\n\t\t\t<item>DirObjectFactory</item>\n\t\t\t<item>DirStateFactory</item>\n\t\t\t<item>DirStateFactory.Result</item>\n\t\t\t<item>DirectColorModel</item>\n\t\t\t<item>DirectoryManager</item>\n\t\t\t<item>DisplayMode</item>\n\t\t\t<item>DnDConstants</item>\n\t\t\t<item>Doc</item>\n\t\t\t<item>DocAttribute</item>\n\t\t\t<item>DocAttributeSet</item>\n\t\t\t<item>DocFlavor</item>\n\t\t\t<item>DocFlavor.BYTE_ARRAY</item>\n\t\t\t<item>DocFlavor.CHAR_ARRAY</item>\n\t\t\t<item>DocFlavor.INPUT_STREAM</item>\n\t\t\t<item>DocFlavor.READER</item>\n\t\t\t<item>DocFlavor.SERVICE_FORMATTED</item>\n\t\t\t<item>DocFlavor.STRING</item>\n\t\t\t<item>DocFlavor.URL</item>\n\t\t\t<item>DocPrintJob</item>\n\t\t\t<item>Document</item>\n\t\t\t<item>Document</item>\n\t\t\t<item>DocumentBuilder</item>\n\t\t\t<item>DocumentBuilderFactory</item>\n\t\t\t<item>DocumentEvent</item>\n\t\t\t<item>DocumentEvent.ElementChange</item>\n\t\t\t<item>DocumentEvent.EventType</item>\n\t\t\t<item>DocumentFilter</item>\n\t\t\t<item>DocumentFilter.FilterBypass</item>\n\t\t\t<item>DocumentFragment</item>\n\t\t\t<item>DocumentHandler</item>\n\t\t\t<item>DocumentListener</item>\n\t\t\t<item>DocumentName</item>\n\t\t\t<item>DocumentParser</item>\n\t\t\t<item>DocumentType</item>\n\t\t\t<item>Documented</item>\n\t\t\t<item>DomainCombiner</item>\n\t\t\t<item>DomainManager</item>\n\t\t\t<item>DomainManagerOperations</item>\n\t\t\t<item>Double</item>\n\t\t\t<item>DoubleBuffer</item>\n\t\t\t<item>DoubleHolder</item>\n\t\t\t<item>DoubleSeqHelper</item>\n\t\t\t<item>DoubleSeqHolder</item>\n\t\t\t<item>DragGestureEvent</item>\n\t\t\t<item>DragGestureListener</item>\n\t\t\t<item>DragGestureRecognizer</item>\n\t\t\t<item>DragSource</item>\n\t\t\t<item>DragSourceAdapter</item>\n\t\t\t<item>DragSourceContext</item>\n\t\t\t<item>DragSourceDragEvent</item>\n\t\t\t<item>DragSourceDropEvent</item>\n\t\t\t<item>DragSourceEvent</item>\n\t\t\t<item>DragSourceListener</item>\n\t\t\t<item>DragSourceMotionListener</item>\n\t\t\t<item>Driver</item>\n\t\t\t<item>DriverManager</item>\n\t\t\t<item>DriverPropertyInfo</item>\n\t\t\t<item>DropTarget</item>\n\t\t\t<item>DropTarget.DropTargetAutoScroller</item>\n\t\t\t<item>DropTargetAdapter</item>\n\t\t\t<item>DropTargetContext</item>\n\t\t\t<item>DropTargetDragEvent</item>\n\t\t\t<item>DropTargetDropEvent</item>\n\t\t\t<item>DropTargetEvent</item>\n\t\t\t<item>DropTargetListener</item>\n\t\t\t<item>DuplicateFormatFlagsException</item>\n\t\t\t<item>DuplicateName</item>\n\t\t\t<item>DuplicateNameHelper</item>\n\t\t\t<item>Duration</item>\n\t\t\t<item>DynAny</item>\n\t\t\t<item>DynAny</item>\n\t\t\t<item>DynAnyFactory</item>\n\t\t\t<item>DynAnyFactoryHelper</item>\n\t\t\t<item>DynAnyFactoryOperations</item>\n\t\t\t<item>DynAnyHelper</item>\n\t\t\t<item>DynAnyOperations</item>\n\t\t\t<item>DynAnySeqHelper</item>\n\t\t\t<item>DynArray</item>\n\t\t\t<item>DynArray</item>\n\t\t\t<item>DynArrayHelper</item>\n\t\t\t<item>DynArrayOperations</item>\n\t\t\t<item>DynEnum</item>\n\t\t\t<item>DynEnum</item>\n\t\t\t<item>DynEnumHelper</item>\n\t\t\t<item>DynEnumOperations</item>\n\t\t\t<item>DynFixed</item>\n\t\t\t<item>DynFixed</item>\n\t\t\t<item>DynFixedHelper</item>\n\t\t\t<item>DynFixedOperations</item>\n\t\t\t<item>DynSequence</item>\n\t\t\t<item>DynSequence</item>\n\t\t\t<item>DynSequenceHelper</item>\n\t\t\t<item>DynSequenceOperations</item>\n\t\t\t<item>DynStruct</item>\n\t\t\t<item>DynStruct</item>\n\t\t\t<item>DynStructHelper</item>\n\t\t\t<item>DynStructOperations</item>\n\t\t\t<item>DynUnion</item>\n\t\t\t<item>DynUnion</item>\n\t\t\t<item>DynUnionHelper</item>\n\t\t\t<item>DynUnionOperations</item>\n\t\t\t<item>DynValue</item>\n\t\t\t<item>DynValue</item>\n\t\t\t<item>DynValueBox</item>\n\t\t\t<item>DynValueBoxOperations</item>\n\t\t\t<item>DynValueCommon</item>\n\t\t\t<item>DynValueCommonOperations</item>\n\t\t\t<item>DynValueHelper</item>\n\t\t\t<item>DynValueOperations</item>\n\t\t\t<item>DynamicImplementation</item>\n\t\t\t<item>DynamicImplementation</item>\n\t\t\t<item>DynamicMBean</item>\n\t\t\t<item>ECField</item>\n\t\t\t<item>ECFieldF2m</item>\n\t\t\t<item>ECFieldFp</item>\n\t\t\t<item>ECGenParameterSpec</item>\n\t\t\t<item>ECKey</item>\n\t\t\t<item>ECParameterSpec</item>\n\t\t\t<item>ECPoint</item>\n\t\t\t<item>ECPrivateKey</item>\n\t\t\t<item>ECPrivateKeySpec</item>\n\t\t\t<item>ECPublicKey</item>\n\t\t\t<item>ECPublicKeySpec</item>\n\t\t\t<item>ENCODING_CDR_ENCAPS</item>\n\t\t\t<item>EOFException</item>\n\t\t\t<item>EditorKit</item>\n\t\t\t<item>Element</item>\n\t\t\t<item>Element</item>\n\t\t\t<item>Element</item>\n\t\t\t<item>ElementIterator</item>\n\t\t\t<item>ElementType</item>\n\t\t\t<item>Ellipse2D</item>\n\t\t\t<item>Ellipse2D.Double</item>\n\t\t\t<item>Ellipse2D.Float</item>\n\t\t\t<item>EllipticCurve</item>\n\t\t\t<item>EmptyBorder</item>\n\t\t\t<item>EmptyStackException</item>\n\t\t\t<item>EncodedKeySpec</item>\n\t\t\t<item>Encoder</item>\n\t\t\t<item>Encoding</item>\n\t\t\t<item>EncryptedPrivateKeyInfo</item>\n\t\t\t<item>Entity</item>\n\t\t\t<item>Entity</item>\n\t\t\t<item>EntityReference</item>\n\t\t\t<item>EntityResolver</item>\n\t\t\t<item>EntityResolver2</item>\n\t\t\t<item>Enum</item>\n\t\t\t<item>EnumConstantNotPresentException</item>\n\t\t\t<item>EnumControl</item>\n\t\t\t<item>EnumControl.Type</item>\n\t\t\t<item>EnumMap</item>\n\t\t\t<item>EnumSet</item>\n\t\t\t<item>EnumSyntax</item>\n\t\t\t<item>Enumeration</item>\n\t\t\t<item>Environment</item>\n\t\t\t<item>Error</item>\n\t\t\t<item>ErrorHandler</item>\n\t\t\t<item>ErrorListener</item>\n\t\t\t<item>ErrorManager</item>\n\t\t\t<item>EtchedBorder</item>\n\t\t\t<item>Event</item>\n\t\t\t<item>EventContext</item>\n\t\t\t<item>EventDirContext</item>\n\t\t\t<item>EventHandler</item>\n\t\t\t<item>EventListener</item>\n\t\t\t<item>EventListenerList</item>\n\t\t\t<item>EventListenerProxy</item>\n\t\t\t<item>EventObject</item>\n\t\t\t<item>EventQueue</item>\n\t\t\t<item>EventSetDescriptor</item>\n\t\t\t<item>Exception</item>\n\t\t\t<item>ExceptionDetailMessage</item>\n\t\t\t<item>ExceptionInInitializerError</item>\n\t\t\t<item>ExceptionList</item>\n\t\t\t<item>ExceptionListener</item>\n\t\t\t<item>Exchanger</item>\n\t\t\t<item>ExecutionException</item>\n\t\t\t<item>Executor</item>\n\t\t\t<item>ExecutorCompletionService</item>\n\t\t\t<item>ExecutorService</item>\n\t\t\t<item>Executors</item>\n\t\t\t<item>ExemptionMechanism</item>\n\t\t\t<item>ExemptionMechanismException</item>\n\t\t\t<item>ExemptionMechanismSpi</item>\n\t\t\t<item>ExpandVetoException</item>\n\t\t\t<item>ExportException</item>\n\t\t\t<item>Expression</item>\n\t\t\t<item>ExtendedRequest</item>\n\t\t\t<item>ExtendedResponse</item>\n\t\t\t<item>Externalizable</item>\n\t\t\t<item>FREE_MEM</item>\n\t\t\t<item>FactoryConfigurationError</item>\n\t\t\t<item>FailedLoginException</item>\n\t\t\t<item>FeatureDescriptor</item>\n\t\t\t<item>Fidelity</item>\n\t\t\t<item>Field</item>\n\t\t\t<item>FieldNameHelper</item>\n\t\t\t<item>FieldNameHelper</item>\n\t\t\t<item>FieldPosition</item>\n\t\t\t<item>FieldView</item>\n\t\t\t<item>File</item>\n\t\t\t<item>FileCacheImageInputStream</item>\n\t\t\t<item>FileCacheImageOutputStream</item>\n\t\t\t<item>FileChannel</item>\n\t\t\t<item>FileChannel.MapMode</item>\n\t\t\t<item>FileChooserUI</item>\n\t\t\t<item>FileDescriptor</item>\n\t\t\t<item>FileDialog</item>\n\t\t\t<item>FileFilter</item>\n\t\t\t<item>FileFilter</item>\n\t\t\t<item>FileHandler</item>\n\t\t\t<item>FileImageInputStream</item>\n\t\t\t<item>FileImageOutputStream</item>\n\t\t\t<item>FileInputStream</item>\n\t\t\t<item>FileLock</item>\n\t\t\t<item>FileLockInterruptionException</item>\n\t\t\t<item>FileNameMap</item>\n\t\t\t<item>FileNotFoundException</item>\n\t\t\t<item>FileOutputStream</item>\n\t\t\t<item>FilePermission</item>\n\t\t\t<item>FileReader</item>\n\t\t\t<item>FileSystemView</item>\n\t\t\t<item>FileView</item>\n\t\t\t<item>FileWriter</item>\n\t\t\t<item>FilenameFilter</item>\n\t\t\t<item>Filter</item>\n\t\t\t<item>FilterInputStream</item>\n\t\t\t<item>FilterOutputStream</item>\n\t\t\t<item>FilterReader</item>\n\t\t\t<item>FilterWriter</item>\n\t\t\t<item>FilteredImageSource</item>\n\t\t\t<item>FilteredRowSet</item>\n\t\t\t<item>Finishings</item>\n\t\t\t<item>FixedHeightLayoutCache</item>\n\t\t\t<item>FixedHolder</item>\n\t\t\t<item>FlatteningPathIterator</item>\n\t\t\t<item>FlavorEvent</item>\n\t\t\t<item>FlavorException</item>\n\t\t\t<item>FlavorListener</item>\n\t\t\t<item>FlavorMap</item>\n\t\t\t<item>FlavorTable</item>\n\t\t\t<item>Float</item>\n\t\t\t<item>FloatBuffer</item>\n\t\t\t<item>FloatControl</item>\n\t\t\t<item>FloatControl.Type</item>\n\t\t\t<item>FloatHolder</item>\n\t\t\t<item>FloatSeqHelper</item>\n\t\t\t<item>FloatSeqHolder</item>\n\t\t\t<item>FlowLayout</item>\n\t\t\t<item>FlowView</item>\n\t\t\t<item>FlowView.FlowStrategy</item>\n\t\t\t<item>Flushable</item>\n\t\t\t<item>FocusAdapter</item>\n\t\t\t<item>FocusEvent</item>\n\t\t\t<item>FocusListener</item>\n\t\t\t<item>FocusManager</item>\n\t\t\t<item>FocusTraversalPolicy</item>\n\t\t\t<item>Font</item>\n\t\t\t<item>FontFormatException</item>\n\t\t\t<item>FontMetrics</item>\n\t\t\t<item>FontRenderContext</item>\n\t\t\t<item>FontUIResource</item>\n\t\t\t<item>FormSubmitEvent</item>\n\t\t\t<item>FormSubmitEvent.MethodType</item>\n\t\t\t<item>FormView</item>\n\t\t\t<item>Format</item>\n\t\t\t<item>Format.Field</item>\n\t\t\t<item>FormatConversionProvider</item>\n\t\t\t<item>FormatFlagsConversionMismatchException</item>\n\t\t\t<item>FormatMismatch</item>\n\t\t\t<item>FormatMismatchHelper</item>\n\t\t\t<item>Formattable</item>\n\t\t\t<item>FormattableFlags</item>\n\t\t\t<item>Formatter</item>\n\t\t\t<item>Formatter</item>\n\t\t\t<item>FormatterClosedException</item>\n\t\t\t<item>ForwardRequest</item>\n\t\t\t<item>ForwardRequest</item>\n\t\t\t<item>ForwardRequestHelper</item>\n\t\t\t<item>ForwardRequestHelper</item>\n\t\t\t<item>Frame</item>\n\t\t\t<item>Future</item>\n\t\t\t<item>FutureTask</item>\n\t\t\t<item>GSSContext</item>\n\t\t\t<item>GSSCredential</item>\n\t\t\t<item>GSSException</item>\n\t\t\t<item>GSSManager</item>\n\t\t\t<item>GSSName</item>\n\t\t\t<item>GZIPInputStream</item>\n\t\t\t<item>GZIPOutputStream</item>\n\t\t\t<item>GapContent</item>\n\t\t\t<item>GarbageCollectorMXBean</item>\n\t\t\t<item>GatheringByteChannel</item>\n\t\t\t<item>GaugeMonitor</item>\n\t\t\t<item>GaugeMonitorMBean</item>\n\t\t\t<item>GeneralPath</item>\n\t\t\t<item>GeneralSecurityException</item>\n\t\t\t<item>GenericArrayType</item>\n\t\t\t<item>GenericDeclaration</item>\n\t\t\t<item>GenericSignatureFormatError</item>\n\t\t\t<item>GlyphJustificationInfo</item>\n\t\t\t<item>GlyphMetrics</item>\n\t\t\t<item>GlyphVector</item>\n\t\t\t<item>GlyphView</item>\n\t\t\t<item>GlyphView.GlyphPainter</item>\n\t\t\t<item>GradientPaint</item>\n\t\t\t<item>GraphicAttribute</item>\n\t\t\t<item>Graphics</item>\n\t\t\t<item>Graphics2D</item>\n\t\t\t<item>GraphicsConfigTemplate</item>\n\t\t\t<item>GraphicsConfiguration</item>\n\t\t\t<item>GraphicsDevice</item>\n\t\t\t<item>GraphicsEnvironment</item>\n\t\t\t<item>GrayFilter</item>\n\t\t\t<item>GregorianCalendar</item>\n\t\t\t<item>GridBagConstraints</item>\n\t\t\t<item>GridBagLayout</item>\n\t\t\t<item>GridLayout</item>\n\t\t\t<item>Group</item>\n\t\t\t<item>Guard</item>\n\t\t\t<item>GuardedObject</item>\n\t\t\t<item>HOLDING</item>\n\t\t\t<item>HTML</item>\n\t\t\t<item>HTML.Attribute</item>\n\t\t\t<item>HTML.Tag</item>\n\t\t\t<item>HTML.UnknownTag</item>\n\t\t\t<item>HTMLDocument</item>\n\t\t\t<item>HTMLDocument.Iterator</item>\n\t\t\t<item>HTMLEditorKit</item>\n\t\t\t<item>HTMLEditorKit.HTMLFactory</item>\n\t\t\t<item>HTMLEditorKit.HTMLTextAction</item>\n\t\t\t<item>HTMLEditorKit.InsertHTMLTextAction</item>\n\t\t\t<item>HTMLEditorKit.LinkController</item>\n\t\t\t<item>HTMLEditorKit.Parser</item>\n\t\t\t<item>HTMLEditorKit.ParserCallback</item>\n\t\t\t<item>HTMLFrameHyperlinkEvent</item>\n\t\t\t<item>HTMLWriter</item>\n\t\t\t<item>Handler</item>\n\t\t\t<item>HandlerBase</item>\n\t\t\t<item>HandshakeCompletedEvent</item>\n\t\t\t<item>HandshakeCompletedListener</item>\n\t\t\t<item>HasControls</item>\n\t\t\t<item>HashAttributeSet</item>\n\t\t\t<item>HashDocAttributeSet</item>\n\t\t\t<item>HashMap</item>\n\t\t\t<item>HashPrintJobAttributeSet</item>\n\t\t\t<item>HashPrintRequestAttributeSet</item>\n\t\t\t<item>HashPrintServiceAttributeSet</item>\n\t\t\t<item>HashSet</item>\n\t\t\t<item>Hashtable</item>\n\t\t\t<item>HeadlessException</item>\n\t\t\t<item>HierarchyBoundsAdapter</item>\n\t\t\t<item>HierarchyBoundsListener</item>\n\t\t\t<item>HierarchyEvent</item>\n\t\t\t<item>HierarchyListener</item>\n\t\t\t<item>Highlighter</item>\n\t\t\t<item>Highlighter.Highlight</item>\n\t\t\t<item>Highlighter.HighlightPainter</item>\n\t\t\t<item>HostnameVerifier</item>\n\t\t\t<item>HttpRetryException</item>\n\t\t\t<item>HttpURLConnection</item>\n\t\t\t<item>HttpsURLConnection</item>\n\t\t\t<item>HyperlinkEvent</item>\n\t\t\t<item>HyperlinkEvent.EventType</item>\n\t\t\t<item>HyperlinkListener</item>\n\t\t\t<item>ICC_ColorSpace</item>\n\t\t\t<item>ICC_Profile</item>\n\t\t\t<item>ICC_ProfileGray</item>\n\t\t\t<item>ICC_ProfileRGB</item>\n\t\t\t<item>IDLEntity</item>\n\t\t\t<item>IDLType</item>\n\t\t\t<item>IDLTypeHelper</item>\n\t\t\t<item>IDLTypeOperations</item>\n\t\t\t<item>ID_ASSIGNMENT_POLICY_ID</item>\n\t\t\t<item>ID_UNIQUENESS_POLICY_ID</item>\n\t\t\t<item>IIOByteBuffer</item>\n\t\t\t<item>IIOException</item>\n\t\t\t<item>IIOImage</item>\n\t\t\t<item>IIOInvalidTreeException</item>\n\t\t\t<item>IIOMetadata</item>\n\t\t\t<item>IIOMetadataController</item>\n\t\t\t<item>IIOMetadataFormat</item>\n\t\t\t<item>IIOMetadataFormatImpl</item>\n\t\t\t<item>IIOMetadataNode</item>\n\t\t\t<item>IIOParam</item>\n\t\t\t<item>IIOParamController</item>\n\t\t\t<item>IIOReadProgressListener</item>\n\t\t\t<item>IIOReadUpdateListener</item>\n\t\t\t<item>IIOReadWarningListener</item>\n\t\t\t<item>IIORegistry</item>\n\t\t\t<item>IIOServiceProvider</item>\n\t\t\t<item>IIOWriteProgressListener</item>\n\t\t\t<item>IIOWriteWarningListener</item>\n\t\t\t<item>IMPLICIT_ACTIVATION_POLICY_ID</item>\n\t\t\t<item>IMP_LIMIT</item>\n\t\t\t<item>INACTIVE</item>\n\t\t\t<item>INITIALIZE</item>\n\t\t\t<item>INTERNAL</item>\n\t\t\t<item>INTF_REPOS</item>\n\t\t\t<item>INVALID_ACTIVITY</item>\n\t\t\t<item>INVALID_TRANSACTION</item>\n\t\t\t<item>INV_FLAG</item>\n\t\t\t<item>INV_IDENT</item>\n\t\t\t<item>INV_OBJREF</item>\n\t\t\t<item>INV_POLICY</item>\n\t\t\t<item>IOException</item>\n\t\t\t<item>IOR</item>\n\t\t\t<item>IORHelper</item>\n\t\t\t<item>IORHolder</item>\n\t\t\t<item>IORInfo</item>\n\t\t\t<item>IORInfoOperations</item>\n\t\t\t<item>IORInterceptor</item>\n\t\t\t<item>IORInterceptorOperations</item>\n\t\t\t<item>IORInterceptor_3_0</item>\n\t\t\t<item>IORInterceptor_3_0Helper</item>\n\t\t\t<item>IORInterceptor_3_0Holder</item>\n\t\t\t<item>IORInterceptor_3_0Operations</item>\n\t\t\t<item>IRObject</item>\n\t\t\t<item>IRObjectOperations</item>\n\t\t\t<item>Icon</item>\n\t\t\t<item>IconUIResource</item>\n\t\t\t<item>IconView</item>\n\t\t\t<item>IdAssignmentPolicy</item>\n\t\t\t<item>IdAssignmentPolicyOperations</item>\n\t\t\t<item>IdAssignmentPolicyValue</item>\n\t\t\t<item>IdUniquenessPolicy</item>\n\t\t\t<item>IdUniquenessPolicyOperations</item>\n\t\t\t<item>IdUniquenessPolicyValue</item>\n\t\t\t<item>IdentifierHelper</item>\n\t\t\t<item>Identity</item>\n\t\t\t<item>IdentityHashMap</item>\n\t\t\t<item>IdentityScope</item>\n\t\t\t<item>IllegalAccessError</item>\n\t\t\t<item>IllegalAccessException</item>\n\t\t\t<item>IllegalArgumentException</item>\n\t\t\t<item>IllegalBlockSizeException</item>\n\t\t\t<item>IllegalBlockingModeException</item>\n\t\t\t<item>IllegalCharsetNameException</item>\n\t\t\t<item>IllegalClassFormatException</item>\n\t\t\t<item>IllegalComponentStateException</item>\n\t\t\t<item>IllegalFormatCodePointException</item>\n\t\t\t<item>IllegalFormatConversionException</item>\n\t\t\t<item>IllegalFormatException</item>\n\t\t\t<item>IllegalFormatFlagsException</item>\n\t\t\t<item>IllegalFormatPrecisionException</item>\n\t\t\t<item>IllegalFormatWidthException</item>\n\t\t\t<item>IllegalMonitorStateException</item>\n\t\t\t<item>IllegalPathStateException</item>\n\t\t\t<item>IllegalSelectorException</item>\n\t\t\t<item>IllegalStateException</item>\n\t\t\t<item>IllegalThreadStateException</item>\n\t\t\t<item>Image</item>\n\t\t\t<item>ImageCapabilities</item>\n\t\t\t<item>ImageConsumer</item>\n\t\t\t<item>ImageFilter</item>\n\t\t\t<item>ImageGraphicAttribute</item>\n\t\t\t<item>ImageIO</item>\n\t\t\t<item>ImageIcon</item>\n\t\t\t<item>ImageInputStream</item>\n\t\t\t<item>ImageInputStreamImpl</item>\n\t\t\t<item>ImageInputStreamSpi</item>\n\t\t\t<item>ImageObserver</item>\n\t\t\t<item>ImageOutputStream</item>\n\t\t\t<item>ImageOutputStreamImpl</item>\n\t\t\t<item>ImageOutputStreamSpi</item>\n\t\t\t<item>ImageProducer</item>\n\t\t\t<item>ImageReadParam</item>\n\t\t\t<item>ImageReader</item>\n\t\t\t<item>ImageReaderSpi</item>\n\t\t\t<item>ImageReaderWriterSpi</item>\n\t\t\t<item>ImageTranscoder</item>\n\t\t\t<item>ImageTranscoderSpi</item>\n\t\t\t<item>ImageTypeSpecifier</item>\n\t\t\t<item>ImageView</item>\n\t\t\t<item>ImageWriteParam</item>\n\t\t\t<item>ImageWriter</item>\n\t\t\t<item>ImageWriterSpi</item>\n\t\t\t<item>ImagingOpException</item>\n\t\t\t<item>ImplicitActivationPolicy</item>\n\t\t\t<item>ImplicitActivationPolicyOperations</item>\n\t\t\t<item>ImplicitActivationPolicyValue</item>\n\t\t\t<item>IncompatibleClassChangeError</item>\n\t\t\t<item>IncompleteAnnotationException</item>\n\t\t\t<item>InconsistentTypeCode</item>\n\t\t\t<item>InconsistentTypeCode</item>\n\t\t\t<item>InconsistentTypeCodeHelper</item>\n\t\t\t<item>IndexColorModel</item>\n\t\t\t<item>IndexOutOfBoundsException</item>\n\t\t\t<item>IndexedPropertyChangeEvent</item>\n\t\t\t<item>IndexedPropertyDescriptor</item>\n\t\t\t<item>IndirectionException</item>\n\t\t\t<item>Inet4Address</item>\n\t\t\t<item>Inet6Address</item>\n\t\t\t<item>InetAddress</item>\n\t\t\t<item>InetSocketAddress</item>\n\t\t\t<item>Inflater</item>\n\t\t\t<item>InflaterInputStream</item>\n\t\t\t<item>InheritableThreadLocal</item>\n\t\t\t<item>Inherited</item>\n\t\t\t<item>InitialContext</item>\n\t\t\t<item>InitialContextFactory</item>\n\t\t\t<item>InitialContextFactoryBuilder</item>\n\t\t\t<item>InitialDirContext</item>\n\t\t\t<item>InitialLdapContext</item>\n\t\t\t<item>InlineView</item>\n\t\t\t<item>InputContext</item>\n\t\t\t<item>InputEvent</item>\n\t\t\t<item>InputMap</item>\n\t\t\t<item>InputMapUIResource</item>\n\t\t\t<item>InputMethod</item>\n\t\t\t<item>InputMethodContext</item>\n\t\t\t<item>InputMethodDescriptor</item>\n\t\t\t<item>InputMethodEvent</item>\n\t\t\t<item>InputMethodHighlight</item>\n\t\t\t<item>InputMethodListener</item>\n\t\t\t<item>InputMethodRequests</item>\n\t\t\t<item>InputMismatchException</item>\n\t\t\t<item>InputSource</item>\n\t\t\t<item>InputStream</item>\n\t\t\t<item>InputStream</item>\n\t\t\t<item>InputStream</item>\n\t\t\t<item>InputStreamReader</item>\n\t\t\t<item>InputSubset</item>\n\t\t\t<item>InputVerifier</item>\n\t\t\t<item>Insets</item>\n\t\t\t<item>InsetsUIResource</item>\n\t\t\t<item>InstanceAlreadyExistsException</item>\n\t\t\t<item>InstanceNotFoundException</item>\n\t\t\t<item>InstantiationError</item>\n\t\t\t<item>InstantiationException</item>\n\t\t\t<item>Instrument</item>\n\t\t\t<item>Instrumentation</item>\n\t\t\t<item>InsufficientResourcesException</item>\n\t\t\t<item>IntBuffer</item>\n\t\t\t<item>IntHolder</item>\n\t\t\t<item>Integer</item>\n\t\t\t<item>IntegerSyntax</item>\n\t\t\t<item>Interceptor</item>\n\t\t\t<item>InterceptorOperations</item>\n\t\t\t<item>InternalError</item>\n\t\t\t<item>InternalFrameAdapter</item>\n\t\t\t<item>InternalFrameEvent</item>\n\t\t\t<item>InternalFrameFocusTraversalPolicy</item>\n\t\t\t<item>InternalFrameListener</item>\n\t\t\t<item>InternalFrameUI</item>\n\t\t\t<item>InternationalFormatter</item>\n\t\t\t<item>InterruptedException</item>\n\t\t\t<item>InterruptedIOException</item>\n\t\t\t<item>InterruptedNamingException</item>\n\t\t\t<item>InterruptibleChannel</item>\n\t\t\t<item>IntrospectionException</item>\n\t\t\t<item>IntrospectionException</item>\n\t\t\t<item>Introspector</item>\n\t\t\t<item>Invalid</item>\n\t\t\t<item>InvalidActivityException</item>\n\t\t\t<item>InvalidAddress</item>\n\t\t\t<item>InvalidAddressHelper</item>\n\t\t\t<item>InvalidAddressHolder</item>\n\t\t\t<item>InvalidAlgorithmParameterException</item>\n\t\t\t<item>InvalidApplicationException</item>\n\t\t\t<item>InvalidAttributeIdentifierException</item>\n\t\t\t<item>InvalidAttributeValueException</item>\n\t\t\t<item>InvalidAttributeValueException</item>\n\t\t\t<item>InvalidAttributesException</item>\n\t\t\t<item>InvalidClassException</item>\n\t\t\t<item>InvalidDnDOperationException</item>\n\t\t\t<item>InvalidKeyException</item>\n\t\t\t<item>InvalidKeyException</item>\n\t\t\t<item>InvalidKeySpecException</item>\n\t\t\t<item>InvalidMarkException</item>\n\t\t\t<item>InvalidMidiDataException</item>\n\t\t\t<item>InvalidName</item>\n\t\t\t<item>InvalidName</item>\n\t\t\t<item>InvalidName</item>\n\t\t\t<item>InvalidNameException</item>\n\t\t\t<item>InvalidNameHelper</item>\n\t\t\t<item>InvalidNameHelper</item>\n\t\t\t<item>InvalidNameHolder</item>\n\t\t\t<item>InvalidObjectException</item>\n\t\t\t<item>InvalidOpenTypeException</item>\n\t\t\t<item>InvalidParameterException</item>\n\t\t\t<item>InvalidParameterSpecException</item>\n\t\t\t<item>InvalidPolicy</item>\n\t\t\t<item>InvalidPolicyHelper</item>\n\t\t\t<item>InvalidPreferencesFormatException</item>\n\t\t\t<item>InvalidPropertiesFormatException</item>\n\t\t\t<item>InvalidRelationIdException</item>\n\t\t\t<item>InvalidRelationServiceException</item>\n\t\t\t<item>InvalidRelationTypeException</item>\n\t\t\t<item>InvalidRoleInfoException</item>\n\t\t\t<item>InvalidRoleValueException</item>\n\t\t\t<item>InvalidSearchControlsException</item>\n\t\t\t<item>InvalidSearchFilterException</item>\n\t\t\t<item>InvalidSeq</item>\n\t\t\t<item>InvalidSlot</item>\n\t\t\t<item>InvalidSlotHelper</item>\n\t\t\t<item>InvalidTargetObjectTypeException</item>\n\t\t\t<item>InvalidTransactionException</item>\n\t\t\t<item>InvalidTypeForEncoding</item>\n\t\t\t<item>InvalidTypeForEncodingHelper</item>\n\t\t\t<item>InvalidValue</item>\n\t\t\t<item>InvalidValue</item>\n\t\t\t<item>InvalidValueHelper</item>\n\t\t\t<item>InvocationEvent</item>\n\t\t\t<item>InvocationHandler</item>\n\t\t\t<item>InvocationTargetException</item>\n\t\t\t<item>InvokeHandler</item>\n\t\t\t<item>IstringHelper</item>\n\t\t\t<item>ItemEvent</item>\n\t\t\t<item>ItemListener</item>\n\t\t\t<item>ItemSelectable</item>\n\t\t\t<item>Iterable</item>\n\t\t\t<item>Iterator</item>\n\t\t\t<item>IvParameterSpec</item>\n\t\t\t<item>JApplet</item>\n\t\t\t<item>JButton</item>\n\t\t\t<item>JCheckBox</item>\n\t\t\t<item>JCheckBoxMenuItem</item>\n\t\t\t<item>JColorChooser</item>\n\t\t\t<item>JComboBox</item>\n\t\t\t<item>JComboBox.KeySelectionManager</item>\n\t\t\t<item>JComponent</item>\n\t\t\t<item>JDesktopPane</item>\n\t\t\t<item>JDialog</item>\n\t\t\t<item>JEditorPane</item>\n\t\t\t<item>JFileChooser</item>\n\t\t\t<item>JFormattedTextField</item>\n\t\t\t<item>JFormattedTextField.AbstractFormatter</item>\n\t\t\t<item>JFormattedTextField.AbstractFormatterFactory</item>\n\t\t\t<item>JFrame</item>\n\t\t\t<item>JInternalFrame</item>\n\t\t\t<item>JInternalFrame.JDesktopIcon</item>\n\t\t\t<item>JLabel</item>\n\t\t\t<item>JLayeredPane</item>\n\t\t\t<item>JList</item>\n\t\t\t<item>JMException</item>\n\t\t\t<item>JMRuntimeException</item>\n\t\t\t<item>JMXAuthenticator</item>\n\t\t\t<item>JMXConnectionNotification</item>\n\t\t\t<item>JMXConnector</item>\n\t\t\t<item>JMXConnectorFactory</item>\n\t\t\t<item>JMXConnectorProvider</item>\n\t\t\t<item>JMXConnectorServer</item>\n\t\t\t<item>JMXConnectorServerFactory</item>\n\t\t\t<item>JMXConnectorServerMBean</item>\n\t\t\t<item>JMXConnectorServerProvider</item>\n\t\t\t<item>JMXPrincipal</item>\n\t\t\t<item>JMXProviderException</item>\n\t\t\t<item>JMXServerErrorException</item>\n\t\t\t<item>JMXServiceURL</item>\n\t\t\t<item>JMenu</item>\n\t\t\t<item>JMenuBar</item>\n\t\t\t<item>JMenuItem</item>\n\t\t\t<item>JOptionPane</item>\n\t\t\t<item>JPEGHuffmanTable</item>\n\t\t\t<item>JPEGImageReadParam</item>\n\t\t\t<item>JPEGImageWriteParam</item>\n\t\t\t<item>JPEGQTable</item>\n\t\t\t<item>JPanel</item>\n\t\t\t<item>JPasswordField</item>\n\t\t\t<item>JPopupMenu</item>\n\t\t\t<item>JPopupMenu.Separator</item>\n\t\t\t<item>JProgressBar</item>\n\t\t\t<item>JRadioButton</item>\n\t\t\t<item>JRadioButtonMenuItem</item>\n\t\t\t<item>JRootPane</item>\n\t\t\t<item>JScrollBar</item>\n\t\t\t<item>JScrollPane</item>\n\t\t\t<item>JSeparator</item>\n\t\t\t<item>JSlider</item>\n\t\t\t<item>JSpinner</item>\n\t\t\t<item>JSpinner.DateEditor</item>\n\t\t\t<item>JSpinner.DefaultEditor</item>\n\t\t\t<item>JSpinner.ListEditor</item>\n\t\t\t<item>JSpinner.NumberEditor</item>\n\t\t\t<item>JSplitPane</item>\n\t\t\t<item>JTabbedPane</item>\n\t\t\t<item>JTable</item>\n\t\t\t<item>JTable.PrintMode</item>\n\t\t\t<item>JTableHeader</item>\n\t\t\t<item>JTextArea</item>\n\t\t\t<item>JTextComponent</item>\n\t\t\t<item>JTextComponent.KeyBinding</item>\n\t\t\t<item>JTextField</item>\n\t\t\t<item>JTextPane</item>\n\t\t\t<item>JToggleButton</item>\n\t\t\t<item>JToggleButton.ToggleButtonModel</item>\n\t\t\t<item>JToolBar</item>\n\t\t\t<item>JToolBar.Separator</item>\n\t\t\t<item>JToolTip</item>\n\t\t\t<item>JTree</item>\n\t\t\t<item>JTree.DynamicUtilTreeNode</item>\n\t\t\t<item>JTree.EmptySelectionModel</item>\n\t\t\t<item>JViewport</item>\n\t\t\t<item>JWindow</item>\n\t\t\t<item>JarEntry</item>\n\t\t\t<item>JarException</item>\n\t\t\t<item>JarFile</item>\n\t\t\t<item>JarInputStream</item>\n\t\t\t<item>JarOutputStream</item>\n\t\t\t<item>JarURLConnection</item>\n\t\t\t<item>JdbcRowSet</item>\n\t\t\t<item>JobAttributes</item>\n\t\t\t<item>JobAttributes.DefaultSelectionType</item>\n\t\t\t<item>JobAttributes.DestinationType</item>\n\t\t\t<item>JobAttributes.DialogType</item>\n\t\t\t<item>JobAttributes.MultipleDocumentHandlingType</item>\n\t\t\t<item>JobAttributes.SidesType</item>\n\t\t\t<item>JobHoldUntil</item>\n\t\t\t<item>JobImpressions</item>\n\t\t\t<item>JobImpressionsCompleted</item>\n\t\t\t<item>JobImpressionsSupported</item>\n\t\t\t<item>JobKOctets</item>\n\t\t\t<item>JobKOctetsProcessed</item>\n\t\t\t<item>JobKOctetsSupported</item>\n\t\t\t<item>JobMediaSheets</item>\n\t\t\t<item>JobMediaSheetsCompleted</item>\n\t\t\t<item>JobMediaSheetsSupported</item>\n\t\t\t<item>JobMessageFromOperator</item>\n\t\t\t<item>JobName</item>\n\t\t\t<item>JobOriginatingUserName</item>\n\t\t\t<item>JobPriority</item>\n\t\t\t<item>JobPrioritySupported</item>\n\t\t\t<item>JobSheets</item>\n\t\t\t<item>JobState</item>\n\t\t\t<item>JobStateReason</item>\n\t\t\t<item>JobStateReasons</item>\n\t\t\t<item>JoinRowSet</item>\n\t\t\t<item>Joinable</item>\n\t\t\t<item>KerberosKey</item>\n\t\t\t<item>KerberosPrincipal</item>\n\t\t\t<item>KerberosTicket</item>\n\t\t\t<item>Kernel</item>\n\t\t\t<item>Key</item>\n\t\t\t<item>KeyAdapter</item>\n\t\t\t<item>KeyAgreement</item>\n\t\t\t<item>KeyAgreementSpi</item>\n\t\t\t<item>KeyAlreadyExistsException</item>\n\t\t\t<item>KeyEvent</item>\n\t\t\t<item>KeyEventDispatcher</item>\n\t\t\t<item>KeyEventPostProcessor</item>\n\t\t\t<item>KeyException</item>\n\t\t\t<item>KeyFactory</item>\n\t\t\t<item>KeyFactorySpi</item>\n\t\t\t<item>KeyGenerator</item>\n\t\t\t<item>KeyGeneratorSpi</item>\n\t\t\t<item>KeyListener</item>\n\t\t\t<item>KeyManagementException</item>\n\t\t\t<item>KeyManager</item>\n\t\t\t<item>KeyManagerFactory</item>\n\t\t\t<item>KeyManagerFactorySpi</item>\n\t\t\t<item>KeyPair</item>\n\t\t\t<item>KeyPairGenerator</item>\n\t\t\t<item>KeyPairGeneratorSpi</item>\n\t\t\t<item>KeyRep</item>\n\t\t\t<item>KeyRep.Type</item>\n\t\t\t<item>KeySpec</item>\n\t\t\t<item>KeyStore</item>\n\t\t\t<item>KeyStore.Builder</item>\n\t\t\t<item>KeyStore.CallbackHandlerProtection</item>\n\t\t\t<item>KeyStore.Entry</item>\n\t\t\t<item>KeyStore.LoadStoreParameter</item>\n\t\t\t<item>KeyStore.PasswordProtection</item>\n\t\t\t<item>KeyStore.PrivateKeyEntry</item>\n\t\t\t<item>KeyStore.ProtectionParameter</item>\n\t\t\t<item>KeyStore.SecretKeyEntry</item>\n\t\t\t<item>KeyStore.TrustedCertificateEntry</item>\n\t\t\t<item>KeyStoreBuilderParameters</item>\n\t\t\t<item>KeyStoreException</item>\n\t\t\t<item>KeyStoreSpi</item>\n\t\t\t<item>KeyStroke</item>\n\t\t\t<item>KeyboardFocusManager</item>\n\t\t\t<item>Keymap</item>\n\t\t\t<item>LDAPCertStoreParameters</item>\n\t\t\t<item>LIFESPAN_POLICY_ID</item>\n\t\t\t<item>LOCATION_FORWARD</item>\n\t\t\t<item>LSException</item>\n\t\t\t<item>LSInput</item>\n\t\t\t<item>LSLoadEvent</item>\n\t\t\t<item>LSOutput</item>\n\t\t\t<item>LSParser</item>\n\t\t\t<item>LSParserFilter</item>\n\t\t\t<item>LSProgressEvent</item>\n\t\t\t<item>LSResourceResolver</item>\n\t\t\t<item>LSSerializer</item>\n\t\t\t<item>LSSerializerFilter</item>\n\t\t\t<item>Label</item>\n\t\t\t<item>LabelUI</item>\n\t\t\t<item>LabelView</item>\n\t\t\t<item>LanguageCallback</item>\n\t\t\t<item>LastOwnerException</item>\n\t\t\t<item>LayeredHighlighter</item>\n\t\t\t<item>LayeredHighlighter.LayerPainter</item>\n\t\t\t<item>LayoutFocusTraversalPolicy</item>\n\t\t\t<item>LayoutManager</item>\n\t\t\t<item>LayoutManager2</item>\n\t\t\t<item>LayoutQueue</item>\n\t\t\t<item>LdapContext</item>\n\t\t\t<item>LdapName</item>\n\t\t\t<item>LdapReferralException</item>\n\t\t\t<item>Lease</item>\n\t\t\t<item>Level</item>\n\t\t\t<item>LexicalHandler</item>\n\t\t\t<item>LifespanPolicy</item>\n\t\t\t<item>LifespanPolicyOperations</item>\n\t\t\t<item>LifespanPolicyValue</item>\n\t\t\t<item>LimitExceededException</item>\n\t\t\t<item>Line</item>\n\t\t\t<item>Line.Info</item>\n\t\t\t<item>Line2D</item>\n\t\t\t<item>Line2D.Double</item>\n\t\t\t<item>Line2D.Float</item>\n\t\t\t<item>LineBorder</item>\n\t\t\t<item>LineBreakMeasurer</item>\n\t\t\t<item>LineEvent</item>\n\t\t\t<item>LineEvent.Type</item>\n\t\t\t<item>LineListener</item>\n\t\t\t<item>LineMetrics</item>\n\t\t\t<item>LineNumberInputStream</item>\n\t\t\t<item>LineNumberReader</item>\n\t\t\t<item>LineUnavailableException</item>\n\t\t\t<item>LinkException</item>\n\t\t\t<item>LinkLoopException</item>\n\t\t\t<item>LinkRef</item>\n\t\t\t<item>LinkageError</item>\n\t\t\t<item>LinkedBlockingQueue</item>\n\t\t\t<item>LinkedHashMap</item>\n\t\t\t<item>LinkedHashSet</item>\n\t\t\t<item>LinkedList</item>\n\t\t\t<item>List</item>\n\t\t\t<item>List</item>\n\t\t\t<item>ListCellRenderer</item>\n\t\t\t<item>ListDataEvent</item>\n\t\t\t<item>ListDataListener</item>\n\t\t\t<item>ListIterator</item>\n\t\t\t<item>ListModel</item>\n\t\t\t<item>ListResourceBundle</item>\n\t\t\t<item>ListSelectionEvent</item>\n\t\t\t<item>ListSelectionListener</item>\n\t\t\t<item>ListSelectionModel</item>\n\t\t\t<item>ListUI</item>\n\t\t\t<item>ListView</item>\n\t\t\t<item>ListenerNotFoundException</item>\n\t\t\t<item>LoaderHandler</item>\n\t\t\t<item>LocalObject</item>\n\t\t\t<item>Locale</item>\n\t\t\t<item>LocateRegistry</item>\n\t\t\t<item>Locator</item>\n\t\t\t<item>Locator2</item>\n\t\t\t<item>Locator2Impl</item>\n\t\t\t<item>LocatorImpl</item>\n\t\t\t<item>Lock</item>\n\t\t\t<item>LockSupport</item>\n\t\t\t<item>LogManager</item>\n\t\t\t<item>LogRecord</item>\n\t\t\t<item>LogStream</item>\n\t\t\t<item>Logger</item>\n\t\t\t<item>LoggingMXBean</item>\n\t\t\t<item>LoggingPermission</item>\n\t\t\t<item>LoginContext</item>\n\t\t\t<item>LoginException</item>\n\t\t\t<item>LoginModule</item>\n\t\t\t<item>Long</item>\n\t\t\t<item>LongBuffer</item>\n\t\t\t<item>LongHolder</item>\n\t\t\t<item>LongLongSeqHelper</item>\n\t\t\t<item>LongLongSeqHolder</item>\n\t\t\t<item>LongSeqHelper</item>\n\t\t\t<item>LongSeqHolder</item>\n\t\t\t<item>LookAndFeel</item>\n\t\t\t<item>LookupOp</item>\n\t\t\t<item>LookupTable</item>\n\t\t\t<item>MARSHAL</item>\n\t\t\t<item>MBeanAttributeInfo</item>\n\t\t\t<item>MBeanConstructorInfo</item>\n\t\t\t<item>MBeanException</item>\n\t\t\t<item>MBeanFeatureInfo</item>\n\t\t\t<item>MBeanInfo</item>\n\t\t\t<item>MBeanNotificationInfo</item>\n\t\t\t<item>MBeanOperationInfo</item>\n\t\t\t<item>MBeanParameterInfo</item>\n\t\t\t<item>MBeanPermission</item>\n\t\t\t<item>MBeanRegistration</item>\n\t\t\t<item>MBeanRegistrationException</item>\n\t\t\t<item>MBeanServer</item>\n\t\t\t<item>MBeanServerBuilder</item>\n\t\t\t<item>MBeanServerConnection</item>\n\t\t\t<item>MBeanServerDelegate</item>\n\t\t\t<item>MBeanServerDelegateMBean</item>\n\t\t\t<item>MBeanServerFactory</item>\n\t\t\t<item>MBeanServerForwarder</item>\n\t\t\t<item>MBeanServerInvocationHandler</item>\n\t\t\t<item>MBeanServerNotification</item>\n\t\t\t<item>MBeanServerNotificationFilter</item>\n\t\t\t<item>MBeanServerPermission</item>\n\t\t\t<item>MBeanTrustPermission</item>\n\t\t\t<item>MGF1ParameterSpec</item>\n\t\t\t<item>MLet</item>\n\t\t\t<item>MLetMBean</item>\n\t\t\t<item>Mac</item>\n\t\t\t<item>MacSpi</item>\n\t\t\t<item>MalformedInputException</item>\n\t\t\t<item>MalformedLinkException</item>\n\t\t\t<item>MalformedObjectNameException</item>\n\t\t\t<item>MalformedParameterizedTypeException</item>\n\t\t\t<item>MalformedURLException</item>\n\t\t\t<item>ManageReferralControl</item>\n\t\t\t<item>ManagementFactory</item>\n\t\t\t<item>ManagementPermission</item>\n\t\t\t<item>ManagerFactoryParameters</item>\n\t\t\t<item>Manifest</item>\n\t\t\t<item>Map</item>\n\t\t\t<item>Map.Entry</item>\n\t\t\t<item>MappedByteBuffer</item>\n\t\t\t<item>MarshalException</item>\n\t\t\t<item>MarshalledObject</item>\n\t\t\t<item>MaskFormatter</item>\n\t\t\t<item>MatchResult</item>\n\t\t\t<item>Matcher</item>\n\t\t\t<item>Math</item>\n\t\t\t<item>MathContext</item>\n\t\t\t<item>MatteBorder</item>\n\t\t\t<item>Media</item>\n\t\t\t<item>MediaName</item>\n\t\t\t<item>MediaPrintableArea</item>\n\t\t\t<item>MediaSize</item>\n\t\t\t<item>MediaSize.Engineering</item>\n\t\t\t<item>MediaSize.ISO</item>\n\t\t\t<item>MediaSize.JIS</item>\n\t\t\t<item>MediaSize.NA</item>\n\t\t\t<item>MediaSize.Other</item>\n\t\t\t<item>MediaSizeName</item>\n\t\t\t<item>MediaTracker</item>\n\t\t\t<item>MediaTray</item>\n\t\t\t<item>Member</item>\n\t\t\t<item>MemoryCacheImageInputStream</item>\n\t\t\t<item>MemoryCacheImageOutputStream</item>\n\t\t\t<item>MemoryHandler</item>\n\t\t\t<item>MemoryImageSource</item>\n\t\t\t<item>MemoryMXBean</item>\n\t\t\t<item>MemoryManagerMXBean</item>\n\t\t\t<item>MemoryNotificationInfo</item>\n\t\t\t<item>MemoryPoolMXBean</item>\n\t\t\t<item>MemoryType</item>\n\t\t\t<item>MemoryUsage</item>\n\t\t\t<item>Menu</item>\n\t\t\t<item>MenuBar</item>\n\t\t\t<item>MenuBarUI</item>\n\t\t\t<item>MenuComponent</item>\n\t\t\t<item>MenuContainer</item>\n\t\t\t<item>MenuDragMouseEvent</item>\n\t\t\t<item>MenuDragMouseListener</item>\n\t\t\t<item>MenuElement</item>\n\t\t\t<item>MenuEvent</item>\n\t\t\t<item>MenuItem</item>\n\t\t\t<item>MenuItemUI</item>\n\t\t\t<item>MenuKeyEvent</item>\n\t\t\t<item>MenuKeyListener</item>\n\t\t\t<item>MenuListener</item>\n\t\t\t<item>MenuSelectionManager</item>\n\t\t\t<item>MenuShortcut</item>\n\t\t\t<item>MessageDigest</item>\n\t\t\t<item>MessageDigestSpi</item>\n\t\t\t<item>MessageFormat</item>\n\t\t\t<item>MessageFormat.Field</item>\n\t\t\t<item>MessageProp</item>\n\t\t\t<item>MetaEventListener</item>\n\t\t\t<item>MetaMessage</item>\n\t\t\t<item>MetalBorders</item>\n\t\t\t<item>MetalBorders.ButtonBorder</item>\n\t\t\t<item>MetalBorders.Flush3DBorder</item>\n\t\t\t<item>MetalBorders.InternalFrameBorder</item>\n\t\t\t<item>MetalBorders.MenuBarBorder</item>\n\t\t\t<item>MetalBorders.MenuItemBorder</item>\n\t\t\t<item>MetalBorders.OptionDialogBorder</item>\n\t\t\t<item>MetalBorders.PaletteBorder</item>\n\t\t\t<item>MetalBorders.PopupMenuBorder</item>\n\t\t\t<item>MetalBorders.RolloverButtonBorder</item>\n\t\t\t<item>MetalBorders.ScrollPaneBorder</item>\n\t\t\t<item>MetalBorders.TableHeaderBorder</item>\n\t\t\t<item>MetalBorders.TextFieldBorder</item>\n\t\t\t<item>MetalBorders.ToggleButtonBorder</item>\n\t\t\t<item>MetalBorders.ToolBarBorder</item>\n\t\t\t<item>MetalButtonUI</item>\n\t\t\t<item>MetalCheckBoxIcon</item>\n\t\t\t<item>MetalCheckBoxUI</item>\n\t\t\t<item>MetalComboBoxButton</item>\n\t\t\t<item>MetalComboBoxEditor</item>\n\t\t\t<item>MetalComboBoxEditor.UIResource</item>\n\t\t\t<item>MetalComboBoxIcon</item>\n\t\t\t<item>MetalComboBoxUI</item>\n\t\t\t<item>MetalDesktopIconUI</item>\n\t\t\t<item>MetalFileChooserUI</item>\n\t\t\t<item>MetalIconFactory</item>\n\t\t\t<item>MetalIconFactory.FileIcon16</item>\n\t\t\t<item>MetalIconFactory.FolderIcon16</item>\n\t\t\t<item>MetalIconFactory.PaletteCloseIcon</item>\n\t\t\t<item>MetalIconFactory.TreeControlIcon</item>\n\t\t\t<item>MetalIconFactory.TreeFolderIcon</item>\n\t\t\t<item>MetalIconFactory.TreeLeafIcon</item>\n\t\t\t<item>MetalInternalFrameTitlePane</item>\n\t\t\t<item>MetalInternalFrameUI</item>\n\t\t\t<item>MetalLabelUI</item>\n\t\t\t<item>MetalLookAndFeel</item>\n\t\t\t<item>MetalMenuBarUI</item>\n\t\t\t<item>MetalPopupMenuSeparatorUI</item>\n\t\t\t<item>MetalProgressBarUI</item>\n\t\t\t<item>MetalRadioButtonUI</item>\n\t\t\t<item>MetalRootPaneUI</item>\n\t\t\t<item>MetalScrollBarUI</item>\n\t\t\t<item>MetalScrollButton</item>\n\t\t\t<item>MetalScrollPaneUI</item>\n\t\t\t<item>MetalSeparatorUI</item>\n\t\t\t<item>MetalSliderUI</item>\n\t\t\t<item>MetalSplitPaneUI</item>\n\t\t\t<item>MetalTabbedPaneUI</item>\n\t\t\t<item>MetalTextFieldUI</item>\n\t\t\t<item>MetalTheme</item>\n\t\t\t<item>MetalToggleButtonUI</item>\n\t\t\t<item>MetalToolBarUI</item>\n\t\t\t<item>MetalToolTipUI</item>\n\t\t\t<item>MetalTreeUI</item>\n\t\t\t<item>Method</item>\n\t\t\t<item>MethodDescriptor</item>\n\t\t\t<item>MidiChannel</item>\n\t\t\t<item>MidiDevice</item>\n\t\t\t<item>MidiDevice.Info</item>\n\t\t\t<item>MidiDeviceProvider</item>\n\t\t\t<item>MidiEvent</item>\n\t\t\t<item>MidiFileFormat</item>\n\t\t\t<item>MidiFileReader</item>\n\t\t\t<item>MidiFileWriter</item>\n\t\t\t<item>MidiMessage</item>\n\t\t\t<item>MidiSystem</item>\n\t\t\t<item>MidiUnavailableException</item>\n\t\t\t<item>MimeTypeParseException</item>\n\t\t\t<item>MinimalHTMLWriter</item>\n\t\t\t<item>MissingFormatArgumentException</item>\n\t\t\t<item>MissingFormatWidthException</item>\n\t\t\t<item>MissingResourceException</item>\n\t\t\t<item>Mixer</item>\n\t\t\t<item>Mixer.Info</item>\n\t\t\t<item>MixerProvider</item>\n\t\t\t<item>ModelMBean</item>\n\t\t\t<item>ModelMBeanAttributeInfo</item>\n\t\t\t<item>ModelMBeanConstructorInfo</item>\n\t\t\t<item>ModelMBeanInfo</item>\n\t\t\t<item>ModelMBeanInfoSupport</item>\n\t\t\t<item>ModelMBeanNotificationBroadcaster</item>\n\t\t\t<item>ModelMBeanNotificationInfo</item>\n\t\t\t<item>ModelMBeanOperationInfo</item>\n\t\t\t<item>ModificationItem</item>\n\t\t\t<item>Modifier</item>\n\t\t\t<item>Monitor</item>\n\t\t\t<item>MonitorMBean</item>\n\t\t\t<item>MonitorNotification</item>\n\t\t\t<item>MonitorSettingException</item>\n\t\t\t<item>MouseAdapter</item>\n\t\t\t<item>MouseDragGestureRecognizer</item>\n\t\t\t<item>MouseEvent</item>\n\t\t\t<item>MouseInfo</item>\n\t\t\t<item>MouseInputAdapter</item>\n\t\t\t<item>MouseInputListener</item>\n\t\t\t<item>MouseListener</item>\n\t\t\t<item>MouseMotionAdapter</item>\n\t\t\t<item>MouseMotionListener</item>\n\t\t\t<item>MouseWheelEvent</item>\n\t\t\t<item>MouseWheelListener</item>\n\t\t\t<item>MultiButtonUI</item>\n\t\t\t<item>MultiColorChooserUI</item>\n\t\t\t<item>MultiComboBoxUI</item>\n\t\t\t<item>MultiDesktopIconUI</item>\n\t\t\t<item>MultiDesktopPaneUI</item>\n\t\t\t<item>MultiDoc</item>\n\t\t\t<item>MultiDocPrintJob</item>\n\t\t\t<item>MultiDocPrintService</item>\n\t\t\t<item>MultiFileChooserUI</item>\n\t\t\t<item>MultiInternalFrameUI</item>\n\t\t\t<item>MultiLabelUI</item>\n\t\t\t<item>MultiListUI</item>\n\t\t\t<item>MultiLookAndFeel</item>\n\t\t\t<item>MultiMenuBarUI</item>\n\t\t\t<item>MultiMenuItemUI</item>\n\t\t\t<item>MultiOptionPaneUI</item>\n\t\t\t<item>MultiPanelUI</item>\n\t\t\t<item>MultiPixelPackedSampleModel</item>\n\t\t\t<item>MultiPopupMenuUI</item>\n\t\t\t<item>MultiProgressBarUI</item>\n\t\t\t<item>MultiRootPaneUI</item>\n\t\t\t<item>MultiScrollBarUI</item>\n\t\t\t<item>MultiScrollPaneUI</item>\n\t\t\t<item>MultiSeparatorUI</item>\n\t\t\t<item>MultiSliderUI</item>\n\t\t\t<item>MultiSpinnerUI</item>\n\t\t\t<item>MultiSplitPaneUI</item>\n\t\t\t<item>MultiTabbedPaneUI</item>\n\t\t\t<item>MultiTableHeaderUI</item>\n\t\t\t<item>MultiTableUI</item>\n\t\t\t<item>MultiTextUI</item>\n\t\t\t<item>MultiToolBarUI</item>\n\t\t\t<item>MultiToolTipUI</item>\n\t\t\t<item>MultiTreeUI</item>\n\t\t\t<item>MultiViewportUI</item>\n\t\t\t<item>MulticastSocket</item>\n\t\t\t<item>MultipleComponentProfileHelper</item>\n\t\t\t<item>MultipleComponentProfileHolder</item>\n\t\t\t<item>MultipleDocumentHandling</item>\n\t\t\t<item>MultipleMaster</item>\n\t\t\t<item>MutableAttributeSet</item>\n\t\t\t<item>MutableComboBoxModel</item>\n\t\t\t<item>MutableTreeNode</item>\n\t\t\t<item>NON_EXISTENT</item>\n\t\t\t<item>NO_IMPLEMENT</item>\n\t\t\t<item>NO_MEMORY</item>\n\t\t\t<item>NO_PERMISSION</item>\n\t\t\t<item>NO_RESOURCES</item>\n\t\t\t<item>NO_RESPONSE</item>\n\t\t\t<item>NVList</item>\n\t\t\t<item>Name</item>\n\t\t\t<item>NameAlreadyBoundException</item>\n\t\t\t<item>NameCallback</item>\n\t\t\t<item>NameClassPair</item>\n\t\t\t<item>NameComponent</item>\n\t\t\t<item>NameComponentHelper</item>\n\t\t\t<item>NameComponentHolder</item>\n\t\t\t<item>NameDynAnyPair</item>\n\t\t\t<item>NameDynAnyPairHelper</item>\n\t\t\t<item>NameDynAnyPairSeqHelper</item>\n\t\t\t<item>NameHelper</item>\n\t\t\t<item>NameHolder</item>\n\t\t\t<item>NameList</item>\n\t\t\t<item>NameNotFoundException</item>\n\t\t\t<item>NameParser</item>\n\t\t\t<item>NameValuePair</item>\n\t\t\t<item>NameValuePair</item>\n\t\t\t<item>NameValuePairHelper</item>\n\t\t\t<item>NameValuePairHelper</item>\n\t\t\t<item>NameValuePairSeqHelper</item>\n\t\t\t<item>NamedNodeMap</item>\n\t\t\t<item>NamedValue</item>\n\t\t\t<item>NamespaceChangeListener</item>\n\t\t\t<item>NamespaceContext</item>\n\t\t\t<item>NamespaceSupport</item>\n\t\t\t<item>Naming</item>\n\t\t\t<item>NamingContext</item>\n\t\t\t<item>NamingContextExt</item>\n\t\t\t<item>NamingContextExtHelper</item>\n\t\t\t<item>NamingContextExtHolder</item>\n\t\t\t<item>NamingContextExtOperations</item>\n\t\t\t<item>NamingContextExtPOA</item>\n\t\t\t<item>NamingContextHelper</item>\n\t\t\t<item>NamingContextHolder</item>\n\t\t\t<item>NamingContextOperations</item>\n\t\t\t<item>NamingContextPOA</item>\n\t\t\t<item>NamingEnumeration</item>\n\t\t\t<item>NamingEvent</item>\n\t\t\t<item>NamingException</item>\n\t\t\t<item>NamingExceptionEvent</item>\n\t\t\t<item>NamingListener</item>\n\t\t\t<item>NamingManager</item>\n\t\t\t<item>NamingSecurityException</item>\n\t\t\t<item>NavigationFilter</item>\n\t\t\t<item>NavigationFilter.FilterBypass</item>\n\t\t\t<item>NegativeArraySizeException</item>\n\t\t\t<item>NetPermission</item>\n\t\t\t<item>NetworkInterface</item>\n\t\t\t<item>NoClassDefFoundError</item>\n\t\t\t<item>NoConnectionPendingException</item>\n\t\t\t<item>NoContext</item>\n\t\t\t<item>NoContextHelper</item>\n\t\t\t<item>NoInitialContextException</item>\n\t\t\t<item>NoPermissionException</item>\n\t\t\t<item>NoRouteToHostException</item>\n\t\t\t<item>NoServant</item>\n\t\t\t<item>NoServantHelper</item>\n\t\t\t<item>NoSuchAlgorithmException</item>\n\t\t\t<item>NoSuchAttributeException</item>\n\t\t\t<item>NoSuchElementException</item>\n\t\t\t<item>NoSuchFieldError</item>\n\t\t\t<item>NoSuchFieldException</item>\n\t\t\t<item>NoSuchMethodError</item>\n\t\t\t<item>NoSuchMethodException</item>\n\t\t\t<item>NoSuchObjectException</item>\n\t\t\t<item>NoSuchPaddingException</item>\n\t\t\t<item>NoSuchProviderException</item>\n\t\t\t<item>Node</item>\n\t\t\t<item>NodeChangeEvent</item>\n\t\t\t<item>NodeChangeListener</item>\n\t\t\t<item>NodeList</item>\n\t\t\t<item>NonReadableChannelException</item>\n\t\t\t<item>NonWritableChannelException</item>\n\t\t\t<item>NoninvertibleTransformException</item>\n\t\t\t<item>NotActiveException</item>\n\t\t\t<item>NotBoundException</item>\n\t\t\t<item>NotCompliantMBeanException</item>\n\t\t\t<item>NotContextException</item>\n\t\t\t<item>NotEmpty</item>\n\t\t\t<item>NotEmptyHelper</item>\n\t\t\t<item>NotEmptyHolder</item>\n\t\t\t<item>NotFound</item>\n\t\t\t<item>NotFoundHelper</item>\n\t\t\t<item>NotFoundHolder</item>\n\t\t\t<item>NotFoundReason</item>\n\t\t\t<item>NotFoundReasonHelper</item>\n\t\t\t<item>NotFoundReasonHolder</item>\n\t\t\t<item>NotOwnerException</item>\n\t\t\t<item>NotSerializableException</item>\n\t\t\t<item>NotYetBoundException</item>\n\t\t\t<item>NotYetConnectedException</item>\n\t\t\t<item>Notation</item>\n\t\t\t<item>Notification</item>\n\t\t\t<item>NotificationBroadcaster</item>\n\t\t\t<item>NotificationBroadcasterSupport</item>\n\t\t\t<item>NotificationEmitter</item>\n\t\t\t<item>NotificationFilter</item>\n\t\t\t<item>NotificationFilterSupport</item>\n\t\t\t<item>NotificationListener</item>\n\t\t\t<item>NotificationResult</item>\n\t\t\t<item>NullCipher</item>\n\t\t\t<item>NullPointerException</item>\n\t\t\t<item>Number</item>\n\t\t\t<item>NumberFormat</item>\n\t\t\t<item>NumberFormat.Field</item>\n\t\t\t<item>NumberFormatException</item>\n\t\t\t<item>NumberFormatter</item>\n\t\t\t<item>NumberOfDocuments</item>\n\t\t\t<item>NumberOfInterveningJobs</item>\n\t\t\t<item>NumberUp</item>\n\t\t\t<item>NumberUpSupported</item>\n\t\t\t<item>NumericShaper</item>\n\t\t\t<item>OAEPParameterSpec</item>\n\t\t\t<item>OBJECT_NOT_EXIST</item>\n\t\t\t<item>OBJ_ADAPTER</item>\n\t\t\t<item>OMGVMCID</item>\n\t\t\t<item>ORB</item>\n\t\t\t<item>ORB</item>\n\t\t\t<item>ORBIdHelper</item>\n\t\t\t<item>ORBInitInfo</item>\n\t\t\t<item>ORBInitInfoOperations</item>\n\t\t\t<item>ORBInitializer</item>\n\t\t\t<item>ORBInitializerOperations</item>\n\t\t\t<item>ObjID</item>\n\t\t\t<item>Object</item>\n\t\t\t<item>Object</item>\n\t\t\t<item>ObjectAlreadyActive</item>\n\t\t\t<item>ObjectAlreadyActiveHelper</item>\n\t\t\t<item>ObjectChangeListener</item>\n\t\t\t<item>ObjectFactory</item>\n\t\t\t<item>ObjectFactoryBuilder</item>\n\t\t\t<item>ObjectHelper</item>\n\t\t\t<item>ObjectHolder</item>\n\t\t\t<item>ObjectIdHelper</item>\n\t\t\t<item>ObjectIdHelper</item>\n\t\t\t<item>ObjectImpl</item>\n\t\t\t<item>ObjectImpl</item>\n\t\t\t<item>ObjectInput</item>\n\t\t\t<item>ObjectInputStream</item>\n\t\t\t<item>ObjectInputStream.GetField</item>\n\t\t\t<item>ObjectInputValidation</item>\n\t\t\t<item>ObjectInstance</item>\n\t\t\t<item>ObjectName</item>\n\t\t\t<item>ObjectNotActive</item>\n\t\t\t<item>ObjectNotActiveHelper</item>\n\t\t\t<item>ObjectOutput</item>\n\t\t\t<item>ObjectOutputStream</item>\n\t\t\t<item>ObjectOutputStream.PutField</item>\n\t\t\t<item>ObjectReferenceFactory</item>\n\t\t\t<item>ObjectReferenceFactoryHelper</item>\n\t\t\t<item>ObjectReferenceFactoryHolder</item>\n\t\t\t<item>ObjectReferenceTemplate</item>\n\t\t\t<item>ObjectReferenceTemplateHelper</item>\n\t\t\t<item>ObjectReferenceTemplateHolder</item>\n\t\t\t<item>ObjectReferenceTemplateSeqHelper</item>\n\t\t\t<item>ObjectReferenceTemplateSeqHolder</item>\n\t\t\t<item>ObjectStreamClass</item>\n\t\t\t<item>ObjectStreamConstants</item>\n\t\t\t<item>ObjectStreamException</item>\n\t\t\t<item>ObjectStreamField</item>\n\t\t\t<item>ObjectView</item>\n\t\t\t<item>Observable</item>\n\t\t\t<item>Observer</item>\n\t\t\t<item>OceanTheme</item>\n\t\t\t<item>OctetSeqHelper</item>\n\t\t\t<item>OctetSeqHolder</item>\n\t\t\t<item>Oid</item>\n\t\t\t<item>OpenDataException</item>\n\t\t\t<item>OpenMBeanAttributeInfo</item>\n\t\t\t<item>OpenMBeanAttributeInfoSupport</item>\n\t\t\t<item>OpenMBeanConstructorInfo</item>\n\t\t\t<item>OpenMBeanConstructorInfoSupport</item>\n\t\t\t<item>OpenMBeanInfo</item>\n\t\t\t<item>OpenMBeanInfoSupport</item>\n\t\t\t<item>OpenMBeanOperationInfo</item>\n\t\t\t<item>OpenMBeanOperationInfoSupport</item>\n\t\t\t<item>OpenMBeanParameterInfo</item>\n\t\t\t<item>OpenMBeanParameterInfoSupport</item>\n\t\t\t<item>OpenType</item>\n\t\t\t<item>OpenType</item>\n\t\t\t<item>OperatingSystemMXBean</item>\n\t\t\t<item>Operation</item>\n\t\t\t<item>OperationNotSupportedException</item>\n\t\t\t<item>OperationsException</item>\n\t\t\t<item>Option</item>\n\t\t\t<item>OptionPaneUI</item>\n\t\t\t<item>OptionalDataException</item>\n\t\t\t<item>OrientationRequested</item>\n\t\t\t<item>OutOfMemoryError</item>\n\t\t\t<item>OutputDeviceAssigned</item>\n\t\t\t<item>OutputKeys</item>\n\t\t\t<item>OutputStream</item>\n\t\t\t<item>OutputStream</item>\n\t\t\t<item>OutputStream</item>\n\t\t\t<item>OutputStreamWriter</item>\n\t\t\t<item>OverlappingFileLockException</item>\n\t\t\t<item>OverlayLayout</item>\n\t\t\t<item>Override</item>\n\t\t\t<item>Owner</item>\n\t\t\t<item>PBEKey</item>\n\t\t\t<item>PBEKeySpec</item>\n\t\t\t<item>PBEParameterSpec</item>\n\t\t\t<item>PDLOverrideSupported</item>\n\t\t\t<item>PERSIST_STORE</item>\n\t\t\t<item>PKCS8EncodedKeySpec</item>\n\t\t\t<item>PKIXBuilderParameters</item>\n\t\t\t<item>PKIXCertPathBuilderResult</item>\n\t\t\t<item>PKIXCertPathChecker</item>\n\t\t\t<item>PKIXCertPathValidatorResult</item>\n\t\t\t<item>PKIXParameters</item>\n\t\t\t<item>POA</item>\n\t\t\t<item>POAHelper</item>\n\t\t\t<item>POAManager</item>\n\t\t\t<item>POAManagerOperations</item>\n\t\t\t<item>POAOperations</item>\n\t\t\t<item>PRIVATE_MEMBER</item>\n\t\t\t<item>PSSParameterSpec</item>\n\t\t\t<item>PSource</item>\n\t\t\t<item>PSource.PSpecified</item>\n\t\t\t<item>PUBLIC_MEMBER</item>\n\t\t\t<item>Pack200</item>\n\t\t\t<item>Pack200.Packer</item>\n\t\t\t<item>Pack200.Unpacker</item>\n\t\t\t<item>Package</item>\n\t\t\t<item>PackedColorModel</item>\n\t\t\t<item>PageAttributes</item>\n\t\t\t<item>PageAttributes.ColorType</item>\n\t\t\t<item>PageAttributes.MediaType</item>\n\t\t\t<item>PageAttributes.OrientationRequestedType</item>\n\t\t\t<item>PageAttributes.OriginType</item>\n\t\t\t<item>PageAttributes.PrintQualityType</item>\n\t\t\t<item>PageFormat</item>\n\t\t\t<item>PageRanges</item>\n\t\t\t<item>Pageable</item>\n\t\t\t<item>PagedResultsControl</item>\n\t\t\t<item>PagedResultsResponseControl</item>\n\t\t\t<item>PagesPerMinute</item>\n\t\t\t<item>PagesPerMinuteColor</item>\n\t\t\t<item>Paint</item>\n\t\t\t<item>PaintContext</item>\n\t\t\t<item>PaintEvent</item>\n\t\t\t<item>Panel</item>\n\t\t\t<item>PanelUI</item>\n\t\t\t<item>Paper</item>\n\t\t\t<item>ParagraphView</item>\n\t\t\t<item>ParagraphView</item>\n\t\t\t<item>Parameter</item>\n\t\t\t<item>ParameterBlock</item>\n\t\t\t<item>ParameterDescriptor</item>\n\t\t\t<item>ParameterMetaData</item>\n\t\t\t<item>ParameterMode</item>\n\t\t\t<item>ParameterModeHelper</item>\n\t\t\t<item>ParameterModeHolder</item>\n\t\t\t<item>ParameterizedType</item>\n\t\t\t<item>ParseException</item>\n\t\t\t<item>ParsePosition</item>\n\t\t\t<item>Parser</item>\n\t\t\t<item>Parser</item>\n\t\t\t<item>ParserAdapter</item>\n\t\t\t<item>ParserConfigurationException</item>\n\t\t\t<item>ParserDelegator</item>\n\t\t\t<item>ParserFactory</item>\n\t\t\t<item>PartialResultException</item>\n\t\t\t<item>PasswordAuthentication</item>\n\t\t\t<item>PasswordCallback</item>\n\t\t\t<item>PasswordView</item>\n\t\t\t<item>Patch</item>\n\t\t\t<item>PathIterator</item>\n\t\t\t<item>Pattern</item>\n\t\t\t<item>PatternSyntaxException</item>\n\t\t\t<item>Permission</item>\n\t\t\t<item>Permission</item>\n\t\t\t<item>PermissionCollection</item>\n\t\t\t<item>Permissions</item>\n\t\t\t<item>PersistenceDelegate</item>\n\t\t\t<item>PersistentMBean</item>\n\t\t\t<item>PhantomReference</item>\n\t\t\t<item>Pipe</item>\n\t\t\t<item>Pipe.SinkChannel</item>\n\t\t\t<item>Pipe.SourceChannel</item>\n\t\t\t<item>PipedInputStream</item>\n\t\t\t<item>PipedOutputStream</item>\n\t\t\t<item>PipedReader</item>\n\t\t\t<item>PipedWriter</item>\n\t\t\t<item>PixelGrabber</item>\n\t\t\t<item>PixelInterleavedSampleModel</item>\n\t\t\t<item>PlainDocument</item>\n\t\t\t<item>PlainView</item>\n\t\t\t<item>Point</item>\n\t\t\t<item>Point2D</item>\n\t\t\t<item>Point2D.Double</item>\n\t\t\t<item>Point2D.Float</item>\n\t\t\t<item>PointerInfo</item>\n\t\t\t<item>Policy</item>\n\t\t\t<item>Policy</item>\n\t\t\t<item>Policy</item>\n\t\t\t<item>PolicyError</item>\n\t\t\t<item>PolicyErrorCodeHelper</item>\n\t\t\t<item>PolicyErrorHelper</item>\n\t\t\t<item>PolicyErrorHolder</item>\n\t\t\t<item>PolicyFactory</item>\n\t\t\t<item>PolicyFactoryOperations</item>\n\t\t\t<item>PolicyHelper</item>\n\t\t\t<item>PolicyHolder</item>\n\t\t\t<item>PolicyListHelper</item>\n\t\t\t<item>PolicyListHolder</item>\n\t\t\t<item>PolicyNode</item>\n\t\t\t<item>PolicyOperations</item>\n\t\t\t<item>PolicyQualifierInfo</item>\n\t\t\t<item>PolicyTypeHelper</item>\n\t\t\t<item>Polygon</item>\n\t\t\t<item>PooledConnection</item>\n\t\t\t<item>Popup</item>\n\t\t\t<item>PopupFactory</item>\n\t\t\t<item>PopupMenu</item>\n\t\t\t<item>PopupMenuEvent</item>\n\t\t\t<item>PopupMenuListener</item>\n\t\t\t<item>PopupMenuUI</item>\n\t\t\t<item>Port</item>\n\t\t\t<item>Port.Info</item>\n\t\t\t<item>PortUnreachableException</item>\n\t\t\t<item>PortableRemoteObject</item>\n\t\t\t<item>PortableRemoteObjectDelegate</item>\n\t\t\t<item>Position</item>\n\t\t\t<item>Position.Bias</item>\n\t\t\t<item>Predicate</item>\n\t\t\t<item>PreferenceChangeEvent</item>\n\t\t\t<item>PreferenceChangeListener</item>\n\t\t\t<item>Preferences</item>\n\t\t\t<item>PreferencesFactory</item>\n\t\t\t<item>PreparedStatement</item>\n\t\t\t<item>PresentationDirection</item>\n\t\t\t<item>Principal</item>\n\t\t\t<item>Principal</item>\n\t\t\t<item>PrincipalHolder</item>\n\t\t\t<item>PrintEvent</item>\n\t\t\t<item>PrintException</item>\n\t\t\t<item>PrintGraphics</item>\n\t\t\t<item>PrintJob</item>\n\t\t\t<item>PrintJobAdapter</item>\n\t\t\t<item>PrintJobAttribute</item>\n\t\t\t<item>PrintJobAttributeEvent</item>\n\t\t\t<item>PrintJobAttributeListener</item>\n\t\t\t<item>PrintJobAttributeSet</item>\n\t\t\t<item>PrintJobEvent</item>\n\t\t\t<item>PrintJobListener</item>\n\t\t\t<item>PrintQuality</item>\n\t\t\t<item>PrintRequestAttribute</item>\n\t\t\t<item>PrintRequestAttributeSet</item>\n\t\t\t<item>PrintService</item>\n\t\t\t<item>PrintServiceAttribute</item>\n\t\t\t<item>PrintServiceAttributeEvent</item>\n\t\t\t<item>PrintServiceAttributeListener</item>\n\t\t\t<item>PrintServiceAttributeSet</item>\n\t\t\t<item>PrintServiceLookup</item>\n\t\t\t<item>PrintStream</item>\n\t\t\t<item>PrintWriter</item>\n\t\t\t<item>Printable</item>\n\t\t\t<item>PrinterAbortException</item>\n\t\t\t<item>PrinterException</item>\n\t\t\t<item>PrinterGraphics</item>\n\t\t\t<item>PrinterIOException</item>\n\t\t\t<item>PrinterInfo</item>\n\t\t\t<item>PrinterIsAcceptingJobs</item>\n\t\t\t<item>PrinterJob</item>\n\t\t\t<item>PrinterLocation</item>\n\t\t\t<item>PrinterMakeAndModel</item>\n\t\t\t<item>PrinterMessageFromOperator</item>\n\t\t\t<item>PrinterMoreInfo</item>\n\t\t\t<item>PrinterMoreInfoManufacturer</item>\n\t\t\t<item>PrinterName</item>\n\t\t\t<item>PrinterResolution</item>\n\t\t\t<item>PrinterState</item>\n\t\t\t<item>PrinterStateReason</item>\n\t\t\t<item>PrinterStateReasons</item>\n\t\t\t<item>PrinterURI</item>\n\t\t\t<item>PriorityBlockingQueue</item>\n\t\t\t<item>PriorityQueue</item>\n\t\t\t<item>PrivateClassLoader</item>\n\t\t\t<item>PrivateCredentialPermission</item>\n\t\t\t<item>PrivateKey</item>\n\t\t\t<item>PrivateMLet</item>\n\t\t\t<item>PrivilegedAction</item>\n\t\t\t<item>PrivilegedActionException</item>\n\t\t\t<item>PrivilegedExceptionAction</item>\n\t\t\t<item>Process</item>\n\t\t\t<item>ProcessBuilder</item>\n\t\t\t<item>ProcessingInstruction</item>\n\t\t\t<item>ProfileDataException</item>\n\t\t\t<item>ProfileIdHelper</item>\n\t\t\t<item>ProgressBarUI</item>\n\t\t\t<item>ProgressMonitor</item>\n\t\t\t<item>ProgressMonitorInputStream</item>\n\t\t\t<item>Properties</item>\n\t\t\t<item>PropertyChangeEvent</item>\n\t\t\t<item>PropertyChangeListener</item>\n\t\t\t<item>PropertyChangeListenerProxy</item>\n\t\t\t<item>PropertyChangeSupport</item>\n\t\t\t<item>PropertyDescriptor</item>\n\t\t\t<item>PropertyEditor</item>\n\t\t\t<item>PropertyEditorManager</item>\n\t\t\t<item>PropertyEditorSupport</item>\n\t\t\t<item>PropertyPermission</item>\n\t\t\t<item>PropertyResourceBundle</item>\n\t\t\t<item>PropertyVetoException</item>\n\t\t\t<item>ProtectionDomain</item>\n\t\t\t<item>ProtocolException</item>\n\t\t\t<item>Provider</item>\n\t\t\t<item>Provider.Service</item>\n\t\t\t<item>ProviderException</item>\n\t\t\t<item>Proxy</item>\n\t\t\t<item>Proxy</item>\n\t\t\t<item>Proxy.Type</item>\n\t\t\t<item>ProxySelector</item>\n\t\t\t<item>PublicKey</item>\n\t\t\t<item>PushbackInputStream</item>\n\t\t\t<item>PushbackReader</item>\n\t\t\t<item>QName</item>\n\t\t\t<item>QuadCurve2D</item>\n\t\t\t<item>QuadCurve2D.Double</item>\n\t\t\t<item>QuadCurve2D.Float</item>\n\t\t\t<item>Query</item>\n\t\t\t<item>QueryEval</item>\n\t\t\t<item>QueryExp</item>\n\t\t\t<item>Queue</item>\n\t\t\t<item>QueuedJobCount</item>\n\t\t\t<item>RC2ParameterSpec</item>\n\t\t\t<item>RC5ParameterSpec</item>\n\t\t\t<item>REBIND</item>\n\t\t\t<item>REQUEST_PROCESSING_POLICY_ID</item>\n\t\t\t<item>RGBImageFilter</item>\n\t\t\t<item>RMIClassLoader</item>\n\t\t\t<item>RMIClassLoaderSpi</item>\n\t\t\t<item>RMIClientSocketFactory</item>\n\t\t\t<item>RMIConnection</item>\n\t\t\t<item>RMIConnectionImpl</item>\n\t\t\t<item>RMIConnectionImpl_Stub</item>\n\t\t\t<item>RMIConnector</item>\n\t\t\t<item>RMIConnectorServer</item>\n\t\t\t<item>RMICustomMaxStreamFormat</item>\n\t\t\t<item>RMIFailureHandler</item>\n\t\t\t<item>RMIIIOPServerImpl</item>\n\t\t\t<item>RMIJRMPServerImpl</item>\n\t\t\t<item>RMISecurityException</item>\n\t\t\t<item>RMISecurityManager</item>\n\t\t\t<item>RMIServer</item>\n\t\t\t<item>RMIServerImpl</item>\n\t\t\t<item>RMIServerImpl_Stub</item>\n\t\t\t<item>RMIServerSocketFactory</item>\n\t\t\t<item>RMISocketFactory</item>\n\t\t\t<item>RSAKey</item>\n\t\t\t<item>RSAKeyGenParameterSpec</item>\n\t\t\t<item>RSAMultiPrimePrivateCrtKey</item>\n\t\t\t<item>RSAMultiPrimePrivateCrtKeySpec</item>\n\t\t\t<item>RSAOtherPrimeInfo</item>\n\t\t\t<item>RSAPrivateCrtKey</item>\n\t\t\t<item>RSAPrivateCrtKeySpec</item>\n\t\t\t<item>RSAPrivateKey</item>\n\t\t\t<item>RSAPrivateKeySpec</item>\n\t\t\t<item>RSAPublicKey</item>\n\t\t\t<item>RSAPublicKeySpec</item>\n\t\t\t<item>RTFEditorKit</item>\n\t\t\t<item>Random</item>\n\t\t\t<item>RandomAccess</item>\n\t\t\t<item>RandomAccessFile</item>\n\t\t\t<item>Raster</item>\n\t\t\t<item>RasterFormatException</item>\n\t\t\t<item>RasterOp</item>\n\t\t\t<item>Rdn</item>\n\t\t\t<item>ReadOnlyBufferException</item>\n\t\t\t<item>ReadWriteLock</item>\n\t\t\t<item>Readable</item>\n\t\t\t<item>ReadableByteChannel</item>\n\t\t\t<item>Reader</item>\n\t\t\t<item>RealmCallback</item>\n\t\t\t<item>RealmChoiceCallback</item>\n\t\t\t<item>Receiver</item>\n\t\t\t<item>Rectangle</item>\n\t\t\t<item>Rectangle2D</item>\n\t\t\t<item>Rectangle2D.Double</item>\n\t\t\t<item>Rectangle2D.Float</item>\n\t\t\t<item>RectangularShape</item>\n\t\t\t<item>ReentrantLock</item>\n\t\t\t<item>ReentrantReadWriteLock</item>\n\t\t\t<item>ReentrantReadWriteLock.ReadLock</item>\n\t\t\t<item>ReentrantReadWriteLock.WriteLock</item>\n\t\t\t<item>Ref</item>\n\t\t\t<item>RefAddr</item>\n\t\t\t<item>Reference</item>\n\t\t\t<item>Reference</item>\n\t\t\t<item>ReferenceQueue</item>\n\t\t\t<item>ReferenceUriSchemesSupported</item>\n\t\t\t<item>Referenceable</item>\n\t\t\t<item>ReferralException</item>\n\t\t\t<item>ReflectPermission</item>\n\t\t\t<item>ReflectionException</item>\n\t\t\t<item>RefreshFailedException</item>\n\t\t\t<item>Refreshable</item>\n\t\t\t<item>Region</item>\n\t\t\t<item>RegisterableService</item>\n\t\t\t<item>Registry</item>\n\t\t\t<item>RegistryHandler</item>\n\t\t\t<item>RejectedExecutionException</item>\n\t\t\t<item>RejectedExecutionHandler</item>\n\t\t\t<item>Relation</item>\n\t\t\t<item>RelationException</item>\n\t\t\t<item>RelationNotFoundException</item>\n\t\t\t<item>RelationNotification</item>\n\t\t\t<item>RelationService</item>\n\t\t\t<item>RelationServiceMBean</item>\n\t\t\t<item>RelationServiceNotRegisteredException</item>\n\t\t\t<item>RelationSupport</item>\n\t\t\t<item>RelationSupportMBean</item>\n\t\t\t<item>RelationType</item>\n\t\t\t<item>RelationTypeNotFoundException</item>\n\t\t\t<item>RelationTypeSupport</item>\n\t\t\t<item>RemarshalException</item>\n\t\t\t<item>Remote</item>\n\t\t\t<item>RemoteCall</item>\n\t\t\t<item>RemoteException</item>\n\t\t\t<item>RemoteObject</item>\n\t\t\t<item>RemoteObjectInvocationHandler</item>\n\t\t\t<item>RemoteRef</item>\n\t\t\t<item>RemoteServer</item>\n\t\t\t<item>RemoteStub</item>\n\t\t\t<item>RenderContext</item>\n\t\t\t<item>RenderableImage</item>\n\t\t\t<item>RenderableImageOp</item>\n\t\t\t<item>RenderableImageProducer</item>\n\t\t\t<item>RenderedImage</item>\n\t\t\t<item>RenderedImageFactory</item>\n\t\t\t<item>Renderer</item>\n\t\t\t<item>RenderingHints</item>\n\t\t\t<item>RenderingHints.Key</item>\n\t\t\t<item>RepaintManager</item>\n\t\t\t<item>ReplicateScaleFilter</item>\n\t\t\t<item>RepositoryIdHelper</item>\n\t\t\t<item>Request</item>\n\t\t\t<item>RequestInfo</item>\n\t\t\t<item>RequestInfoOperations</item>\n\t\t\t<item>RequestProcessingPolicy</item>\n\t\t\t<item>RequestProcessingPolicyOperations</item>\n\t\t\t<item>RequestProcessingPolicyValue</item>\n\t\t\t<item>RequestingUserName</item>\n\t\t\t<item>RequiredModelMBean</item>\n\t\t\t<item>RescaleOp</item>\n\t\t\t<item>ResolutionSyntax</item>\n\t\t\t<item>ResolveResult</item>\n\t\t\t<item>Resolver</item>\n\t\t\t<item>ResourceBundle</item>\n\t\t\t<item>ResponseCache</item>\n\t\t\t<item>ResponseHandler</item>\n\t\t\t<item>Result</item>\n\t\t\t<item>ResultSet</item>\n\t\t\t<item>ResultSetMetaData</item>\n\t\t\t<item>Retention</item>\n\t\t\t<item>RetentionPolicy</item>\n\t\t\t<item>ReverbType</item>\n\t\t\t<item>Robot</item>\n\t\t\t<item>Role</item>\n\t\t\t<item>RoleInfo</item>\n\t\t\t<item>RoleInfoNotFoundException</item>\n\t\t\t<item>RoleList</item>\n\t\t\t<item>RoleNotFoundException</item>\n\t\t\t<item>RoleResult</item>\n\t\t\t<item>RoleStatus</item>\n\t\t\t<item>RoleUnresolved</item>\n\t\t\t<item>RoleUnresolvedList</item>\n\t\t\t<item>RootPaneContainer</item>\n\t\t\t<item>RootPaneUI</item>\n\t\t\t<item>RoundRectangle2D</item>\n\t\t\t<item>RoundRectangle2D.Double</item>\n\t\t\t<item>RoundRectangle2D.Float</item>\n\t\t\t<item>RoundingMode</item>\n\t\t\t<item>RowMapper</item>\n\t\t\t<item>RowSet</item>\n\t\t\t<item>RowSetEvent</item>\n\t\t\t<item>RowSetInternal</item>\n\t\t\t<item>RowSetListener</item>\n\t\t\t<item>RowSetMetaData</item>\n\t\t\t<item>RowSetMetaDataImpl</item>\n\t\t\t<item>RowSetReader</item>\n\t\t\t<item>RowSetWarning</item>\n\t\t\t<item>RowSetWriter</item>\n\t\t\t<item>RuleBasedCollator</item>\n\t\t\t<item>RunTime</item>\n\t\t\t<item>RunTimeOperations</item>\n\t\t\t<item>Runnable</item>\n\t\t\t<item>Runtime</item>\n\t\t\t<item>RuntimeErrorException</item>\n\t\t\t<item>RuntimeException</item>\n\t\t\t<item>RuntimeMBeanException</item>\n\t\t\t<item>RuntimeMXBean</item>\n\t\t\t<item>RuntimeOperationsException</item>\n\t\t\t<item>RuntimePermission</item>\n\t\t\t<item>SAXException</item>\n\t\t\t<item>SAXNotRecognizedException</item>\n\t\t\t<item>SAXNotSupportedException</item>\n\t\t\t<item>SAXParseException</item>\n\t\t\t<item>SAXParser</item>\n\t\t\t<item>SAXParserFactory</item>\n\t\t\t<item>SAXResult</item>\n\t\t\t<item>SAXSource</item>\n\t\t\t<item>SAXTransformerFactory</item>\n\t\t\t<item>SERVANT_RETENTION_POLICY_ID</item>\n\t\t\t<item>SQLData</item>\n\t\t\t<item>SQLException</item>\n\t\t\t<item>SQLInput</item>\n\t\t\t<item>SQLInputImpl</item>\n\t\t\t<item>SQLOutput</item>\n\t\t\t<item>SQLOutputImpl</item>\n\t\t\t<item>SQLPermission</item>\n\t\t\t<item>SQLWarning</item>\n\t\t\t<item>SSLContext</item>\n\t\t\t<item>SSLContextSpi</item>\n\t\t\t<item>SSLEngine</item>\n\t\t\t<item>SSLEngineResult</item>\n\t\t\t<item>SSLEngineResult.HandshakeStatus</item>\n\t\t\t<item>SSLEngineResult.Status</item>\n\t\t\t<item>SSLException</item>\n\t\t\t<item>SSLHandshakeException</item>\n\t\t\t<item>SSLKeyException</item>\n\t\t\t<item>SSLPeerUnverifiedException</item>\n\t\t\t<item>SSLPermission</item>\n\t\t\t<item>SSLProtocolException</item>\n\t\t\t<item>SSLServerSocket</item>\n\t\t\t<item>SSLServerSocketFactory</item>\n\t\t\t<item>SSLSession</item>\n\t\t\t<item>SSLSessionBindingEvent</item>\n\t\t\t<item>SSLSessionBindingListener</item>\n\t\t\t<item>SSLSessionContext</item>\n\t\t\t<item>SSLSocket</item>\n\t\t\t<item>SSLSocketFactory</item>\n\t\t\t<item>SUCCESSFUL</item>\n\t\t\t<item>SYNC_WITH_TRANSPORT</item>\n\t\t\t<item>SYSTEM_EXCEPTION</item>\n\t\t\t<item>SampleModel</item>\n\t\t\t<item>Sasl</item>\n\t\t\t<item>SaslClient</item>\n\t\t\t<item>SaslClientFactory</item>\n\t\t\t<item>SaslException</item>\n\t\t\t<item>SaslServer</item>\n\t\t\t<item>SaslServerFactory</item>\n\t\t\t<item>Savepoint</item>\n\t\t\t<item>Scanner</item>\n\t\t\t<item>ScatteringByteChannel</item>\n\t\t\t<item>ScheduledExecutorService</item>\n\t\t\t<item>ScheduledFuture</item>\n\t\t\t<item>ScheduledThreadPoolExecutor</item>\n\t\t\t<item>Schema</item>\n\t\t\t<item>SchemaFactory</item>\n\t\t\t<item>SchemaFactoryLoader</item>\n\t\t\t<item>SchemaViolationException</item>\n\t\t\t<item>ScrollBarUI</item>\n\t\t\t<item>ScrollPane</item>\n\t\t\t<item>ScrollPaneAdjustable</item>\n\t\t\t<item>ScrollPaneConstants</item>\n\t\t\t<item>ScrollPaneLayout</item>\n\t\t\t<item>ScrollPaneLayout.UIResource</item>\n\t\t\t<item>ScrollPaneUI</item>\n\t\t\t<item>Scrollable</item>\n\t\t\t<item>Scrollbar</item>\n\t\t\t<item>SealedObject</item>\n\t\t\t<item>SearchControls</item>\n\t\t\t<item>SearchResult</item>\n\t\t\t<item>SecretKey</item>\n\t\t\t<item>SecretKeyFactory</item>\n\t\t\t<item>SecretKeyFactorySpi</item>\n\t\t\t<item>SecretKeySpec</item>\n\t\t\t<item>SecureCacheResponse</item>\n\t\t\t<item>SecureClassLoader</item>\n\t\t\t<item>SecureRandom</item>\n\t\t\t<item>SecureRandomSpi</item>\n\t\t\t<item>Security</item>\n\t\t\t<item>SecurityException</item>\n\t\t\t<item>SecurityManager</item>\n\t\t\t<item>SecurityPermission</item>\n\t\t\t<item>Segment</item>\n\t\t\t<item>SelectableChannel</item>\n\t\t\t<item>SelectionKey</item>\n\t\t\t<item>Selector</item>\n\t\t\t<item>SelectorProvider</item>\n\t\t\t<item>Semaphore</item>\n\t\t\t<item>SeparatorUI</item>\n\t\t\t<item>Sequence</item>\n\t\t\t<item>SequenceInputStream</item>\n\t\t\t<item>Sequencer</item>\n\t\t\t<item>Sequencer.SyncMode</item>\n\t\t\t<item>SerialArray</item>\n\t\t\t<item>SerialBlob</item>\n\t\t\t<item>SerialClob</item>\n\t\t\t<item>SerialDatalink</item>\n\t\t\t<item>SerialException</item>\n\t\t\t<item>SerialJavaObject</item>\n\t\t\t<item>SerialRef</item>\n\t\t\t<item>SerialStruct</item>\n\t\t\t<item>Serializable</item>\n\t\t\t<item>SerializablePermission</item>\n\t\t\t<item>Servant</item>\n\t\t\t<item>ServantActivator</item>\n\t\t\t<item>ServantActivatorHelper</item>\n\t\t\t<item>ServantActivatorOperations</item>\n\t\t\t<item>ServantActivatorPOA</item>\n\t\t\t<item>ServantAlreadyActive</item>\n\t\t\t<item>ServantAlreadyActiveHelper</item>\n\t\t\t<item>ServantLocator</item>\n\t\t\t<item>ServantLocatorHelper</item>\n\t\t\t<item>ServantLocatorOperations</item>\n\t\t\t<item>ServantLocatorPOA</item>\n\t\t\t<item>ServantManager</item>\n\t\t\t<item>ServantManagerOperations</item>\n\t\t\t<item>ServantNotActive</item>\n\t\t\t<item>ServantNotActiveHelper</item>\n\t\t\t<item>ServantObject</item>\n\t\t\t<item>ServantRetentionPolicy</item>\n\t\t\t<item>ServantRetentionPolicyOperations</item>\n\t\t\t<item>ServantRetentionPolicyValue</item>\n\t\t\t<item>ServerCloneException</item>\n\t\t\t<item>ServerError</item>\n\t\t\t<item>ServerException</item>\n\t\t\t<item>ServerIdHelper</item>\n\t\t\t<item>ServerNotActiveException</item>\n\t\t\t<item>ServerRef</item>\n\t\t\t<item>ServerRequest</item>\n\t\t\t<item>ServerRequestInfo</item>\n\t\t\t<item>ServerRequestInfoOperations</item>\n\t\t\t<item>ServerRequestInterceptor</item>\n\t\t\t<item>ServerRequestInterceptorOperations</item>\n\t\t\t<item>ServerRuntimeException</item>\n\t\t\t<item>ServerSocket</item>\n\t\t\t<item>ServerSocketChannel</item>\n\t\t\t<item>ServerSocketFactory</item>\n\t\t\t<item>ServiceContext</item>\n\t\t\t<item>ServiceContextHelper</item>\n\t\t\t<item>ServiceContextHolder</item>\n\t\t\t<item>ServiceContextListHelper</item>\n\t\t\t<item>ServiceContextListHolder</item>\n\t\t\t<item>ServiceDetail</item>\n\t\t\t<item>ServiceDetailHelper</item>\n\t\t\t<item>ServiceIdHelper</item>\n\t\t\t<item>ServiceInformation</item>\n\t\t\t<item>ServiceInformationHelper</item>\n\t\t\t<item>ServiceInformationHolder</item>\n\t\t\t<item>ServiceNotFoundException</item>\n\t\t\t<item>ServicePermission</item>\n\t\t\t<item>ServiceRegistry</item>\n\t\t\t<item>ServiceRegistry.Filter</item>\n\t\t\t<item>ServiceUI</item>\n\t\t\t<item>ServiceUIFactory</item>\n\t\t\t<item>ServiceUnavailableException</item>\n\t\t\t<item>Set</item>\n\t\t\t<item>SetOfIntegerSyntax</item>\n\t\t\t<item>SetOverrideType</item>\n\t\t\t<item>SetOverrideTypeHelper</item>\n\t\t\t<item>Severity</item>\n\t\t\t<item>Shape</item>\n\t\t\t<item>ShapeGraphicAttribute</item>\n\t\t\t<item>SheetCollate</item>\n\t\t\t<item>Short</item>\n\t\t\t<item>ShortBuffer</item>\n\t\t\t<item>ShortBufferException</item>\n\t\t\t<item>ShortHolder</item>\n\t\t\t<item>ShortLookupTable</item>\n\t\t\t<item>ShortMessage</item>\n\t\t\t<item>ShortSeqHelper</item>\n\t\t\t<item>ShortSeqHolder</item>\n\t\t\t<item>Sides</item>\n\t\t\t<item>Signature</item>\n\t\t\t<item>SignatureException</item>\n\t\t\t<item>SignatureSpi</item>\n\t\t\t<item>SignedObject</item>\n\t\t\t<item>Signer</item>\n\t\t\t<item>SimpleAttributeSet</item>\n\t\t\t<item>SimpleBeanInfo</item>\n\t\t\t<item>SimpleDateFormat</item>\n\t\t\t<item>SimpleDoc</item>\n\t\t\t<item>SimpleFormatter</item>\n\t\t\t<item>SimpleTimeZone</item>\n\t\t\t<item>SimpleType</item>\n\t\t\t<item>SinglePixelPackedSampleModel</item>\n\t\t\t<item>SingleSelectionModel</item>\n\t\t\t<item>Size2DSyntax</item>\n\t\t\t<item>SizeLimitExceededException</item>\n\t\t\t<item>SizeRequirements</item>\n\t\t\t<item>SizeSequence</item>\n\t\t\t<item>Skeleton</item>\n\t\t\t<item>SkeletonMismatchException</item>\n\t\t\t<item>SkeletonNotFoundException</item>\n\t\t\t<item>SliderUI</item>\n\t\t\t<item>Socket</item>\n\t\t\t<item>SocketAddress</item>\n\t\t\t<item>SocketChannel</item>\n\t\t\t<item>SocketException</item>\n\t\t\t<item>SocketFactory</item>\n\t\t\t<item>SocketHandler</item>\n\t\t\t<item>SocketImpl</item>\n\t\t\t<item>SocketImplFactory</item>\n\t\t\t<item>SocketOptions</item>\n\t\t\t<item>SocketPermission</item>\n\t\t\t<item>SocketSecurityException</item>\n\t\t\t<item>SocketTimeoutException</item>\n\t\t\t<item>SoftBevelBorder</item>\n\t\t\t<item>SoftReference</item>\n\t\t\t<item>SortControl</item>\n\t\t\t<item>SortKey</item>\n\t\t\t<item>SortResponseControl</item>\n\t\t\t<item>SortedMap</item>\n\t\t\t<item>SortedSet</item>\n\t\t\t<item>SortingFocusTraversalPolicy</item>\n\t\t\t<item>Soundbank</item>\n\t\t\t<item>SoundbankReader</item>\n\t\t\t<item>SoundbankResource</item>\n\t\t\t<item>Source</item>\n\t\t\t<item>SourceDataLine</item>\n\t\t\t<item>SourceLocator</item>\n\t\t\t<item>SpinnerDateModel</item>\n\t\t\t<item>SpinnerListModel</item>\n\t\t\t<item>SpinnerModel</item>\n\t\t\t<item>SpinnerNumberModel</item>\n\t\t\t<item>SpinnerUI</item>\n\t\t\t<item>SplitPaneUI</item>\n\t\t\t<item>Spring</item>\n\t\t\t<item>SpringLayout</item>\n\t\t\t<item>SpringLayout.Constraints</item>\n\t\t\t<item>SslRMIClientSocketFactory</item>\n\t\t\t<item>SslRMIServerSocketFactory</item>\n\t\t\t<item>Stack</item>\n\t\t\t<item>StackOverflowError</item>\n\t\t\t<item>StackTraceElement</item>\n\t\t\t<item>StandardMBean</item>\n\t\t\t<item>StartTlsRequest</item>\n\t\t\t<item>StartTlsResponse</item>\n\t\t\t<item>State</item>\n\t\t\t<item>StateEdit</item>\n\t\t\t<item>StateEditable</item>\n\t\t\t<item>StateFactory</item>\n\t\t\t<item>Statement</item>\n\t\t\t<item>Statement</item>\n\t\t\t<item>StreamCorruptedException</item>\n\t\t\t<item>StreamHandler</item>\n\t\t\t<item>StreamPrintService</item>\n\t\t\t<item>StreamPrintServiceFactory</item>\n\t\t\t<item>StreamResult</item>\n\t\t\t<item>StreamSource</item>\n\t\t\t<item>StreamTokenizer</item>\n\t\t\t<item>Streamable</item>\n\t\t\t<item>StreamableValue</item>\n\t\t\t<item>StrictMath</item>\n\t\t\t<item>String</item>\n\t\t\t<item>StringBuffer</item>\n\t\t\t<item>StringBufferInputStream</item>\n\t\t\t<item>StringBuilder</item>\n\t\t\t<item>StringCharacterIterator</item>\n\t\t\t<item>StringContent</item>\n\t\t\t<item>StringHolder</item>\n\t\t\t<item>StringIndexOutOfBoundsException</item>\n\t\t\t<item>StringMonitor</item>\n\t\t\t<item>StringMonitorMBean</item>\n\t\t\t<item>StringNameHelper</item>\n\t\t\t<item>StringReader</item>\n\t\t\t<item>StringRefAddr</item>\n\t\t\t<item>StringSelection</item>\n\t\t\t<item>StringSeqHelper</item>\n\t\t\t<item>StringSeqHolder</item>\n\t\t\t<item>StringTokenizer</item>\n\t\t\t<item>StringValueExp</item>\n\t\t\t<item>StringValueHelper</item>\n\t\t\t<item>StringWriter</item>\n\t\t\t<item>Stroke</item>\n\t\t\t<item>Struct</item>\n\t\t\t<item>StructMember</item>\n\t\t\t<item>StructMemberHelper</item>\n\t\t\t<item>Stub</item>\n\t\t\t<item>StubDelegate</item>\n\t\t\t<item>StubNotFoundException</item>\n\t\t\t<item>Style</item>\n\t\t\t<item>StyleConstants</item>\n\t\t\t<item>StyleConstants.CharacterConstants</item>\n\t\t\t<item>StyleConstants.ColorConstants</item>\n\t\t\t<item>StyleConstants.FontConstants</item>\n\t\t\t<item>StyleConstants.ParagraphConstants</item>\n\t\t\t<item>StyleContext</item>\n\t\t\t<item>StyleSheet</item>\n\t\t\t<item>StyleSheet.BoxPainter</item>\n\t\t\t<item>StyleSheet.ListPainter</item>\n\t\t\t<item>StyledDocument</item>\n\t\t\t<item>StyledEditorKit</item>\n\t\t\t<item>StyledEditorKit.AlignmentAction</item>\n\t\t\t<item>StyledEditorKit.BoldAction</item>\n\t\t\t<item>StyledEditorKit.FontFamilyAction</item>\n\t\t\t<item>StyledEditorKit.FontSizeAction</item>\n\t\t\t<item>StyledEditorKit.ForegroundAction</item>\n\t\t\t<item>StyledEditorKit.ItalicAction</item>\n\t\t\t<item>StyledEditorKit.StyledTextAction</item>\n\t\t\t<item>StyledEditorKit.UnderlineAction</item>\n\t\t\t<item>Subject</item>\n\t\t\t<item>SubjectDelegationPermission</item>\n\t\t\t<item>SubjectDomainCombiner</item>\n\t\t\t<item>SupportedValuesAttribute</item>\n\t\t\t<item>SuppressWarnings</item>\n\t\t\t<item>SwingConstants</item>\n\t\t\t<item>SwingPropertyChangeSupport</item>\n\t\t\t<item>SwingUtilities</item>\n\t\t\t<item>SyncFactory</item>\n\t\t\t<item>SyncFactoryException</item>\n\t\t\t<item>SyncFailedException</item>\n\t\t\t<item>SyncProvider</item>\n\t\t\t<item>SyncProviderException</item>\n\t\t\t<item>SyncResolver</item>\n\t\t\t<item>SyncScopeHelper</item>\n\t\t\t<item>SynchronousQueue</item>\n\t\t\t<item>SynthConstants</item>\n\t\t\t<item>SynthContext</item>\n\t\t\t<item>SynthGraphicsUtils</item>\n\t\t\t<item>SynthLookAndFeel</item>\n\t\t\t<item>SynthPainter</item>\n\t\t\t<item>SynthStyle</item>\n\t\t\t<item>SynthStyleFactory</item>\n\t\t\t<item>Synthesizer</item>\n\t\t\t<item>SysexMessage</item>\n\t\t\t<item>System</item>\n\t\t\t<item>SystemColor</item>\n\t\t\t<item>SystemException</item>\n\t\t\t<item>SystemFlavorMap</item>\n\t\t\t<item>TAG_ALTERNATE_IIOP_ADDRESS</item>\n\t\t\t<item>TAG_CODE_SETS</item>\n\t\t\t<item>TAG_INTERNET_IOP</item>\n\t\t\t<item>TAG_JAVA_CODEBASE</item>\n\t\t\t<item>TAG_MULTIPLE_COMPONENTS</item>\n\t\t\t<item>TAG_ORB_TYPE</item>\n\t\t\t<item>TAG_POLICIES</item>\n\t\t\t<item>TAG_RMI_CUSTOM_MAX_STREAM_FORMAT</item>\n\t\t\t<item>TCKind</item>\n\t\t\t<item>THREAD_POLICY_ID</item>\n\t\t\t<item>TIMEOUT</item>\n\t\t\t<item>TRANSACTION_MODE</item>\n\t\t\t<item>TRANSACTION_REQUIRED</item>\n\t\t\t<item>TRANSACTION_ROLLEDBACK</item>\n\t\t\t<item>TRANSACTION_UNAVAILABLE</item>\n\t\t\t<item>TRANSIENT</item>\n\t\t\t<item>TRANSPORT_RETRY</item>\n\t\t\t<item>TabExpander</item>\n\t\t\t<item>TabSet</item>\n\t\t\t<item>TabStop</item>\n\t\t\t<item>TabableView</item>\n\t\t\t<item>TabbedPaneUI</item>\n\t\t\t<item>TableCellEditor</item>\n\t\t\t<item>TableCellRenderer</item>\n\t\t\t<item>TableColumn</item>\n\t\t\t<item>TableColumnModel</item>\n\t\t\t<item>TableColumnModelEvent</item>\n\t\t\t<item>TableColumnModelListener</item>\n\t\t\t<item>TableHeaderUI</item>\n\t\t\t<item>TableModel</item>\n\t\t\t<item>TableModelEvent</item>\n\t\t\t<item>TableModelListener</item>\n\t\t\t<item>TableUI</item>\n\t\t\t<item>TableView</item>\n\t\t\t<item>TabularData</item>\n\t\t\t<item>TabularDataSupport</item>\n\t\t\t<item>TabularType</item>\n\t\t\t<item>TagElement</item>\n\t\t\t<item>TaggedComponent</item>\n\t\t\t<item>TaggedComponentHelper</item>\n\t\t\t<item>TaggedComponentHolder</item>\n\t\t\t<item>TaggedProfile</item>\n\t\t\t<item>TaggedProfileHelper</item>\n\t\t\t<item>TaggedProfileHolder</item>\n\t\t\t<item>Target</item>\n\t\t\t<item>TargetDataLine</item>\n\t\t\t<item>TargetedNotification</item>\n\t\t\t<item>Templates</item>\n\t\t\t<item>TemplatesHandler</item>\n\t\t\t<item>Text</item>\n\t\t\t<item>TextAction</item>\n\t\t\t<item>TextArea</item>\n\t\t\t<item>TextAttribute</item>\n\t\t\t<item>TextComponent</item>\n\t\t\t<item>TextEvent</item>\n\t\t\t<item>TextField</item>\n\t\t\t<item>TextHitInfo</item>\n\t\t\t<item>TextInputCallback</item>\n\t\t\t<item>TextLayout</item>\n\t\t\t<item>TextLayout.CaretPolicy</item>\n\t\t\t<item>TextListener</item>\n\t\t\t<item>TextMeasurer</item>\n\t\t\t<item>TextOutputCallback</item>\n\t\t\t<item>TextSyntax</item>\n\t\t\t<item>TextUI</item>\n\t\t\t<item>TexturePaint</item>\n\t\t\t<item>Thread</item>\n\t\t\t<item>Thread.State</item>\n\t\t\t<item>Thread.UncaughtExceptionHandler</item>\n\t\t\t<item>ThreadDeath</item>\n\t\t\t<item>ThreadFactory</item>\n\t\t\t<item>ThreadGroup</item>\n\t\t\t<item>ThreadInfo</item>\n\t\t\t<item>ThreadLocal</item>\n\t\t\t<item>ThreadMXBean</item>\n\t\t\t<item>ThreadPolicy</item>\n\t\t\t<item>ThreadPolicyOperations</item>\n\t\t\t<item>ThreadPolicyValue</item>\n\t\t\t<item>ThreadPoolExecutor</item>\n\t\t\t<item>ThreadPoolExecutor.AbortPolicy</item>\n\t\t\t<item>ThreadPoolExecutor.CallerRunsPolicy</item>\n\t\t\t<item>ThreadPoolExecutor.DiscardOldestPolicy</item>\n\t\t\t<item>ThreadPoolExecutor.DiscardPolicy</item>\n\t\t\t<item>Throwable</item>\n\t\t\t<item>Tie</item>\n\t\t\t<item>TileObserver</item>\n\t\t\t<item>Time</item>\n\t\t\t<item>TimeLimitExceededException</item>\n\t\t\t<item>TimeUnit</item>\n\t\t\t<item>TimeZone</item>\n\t\t\t<item>TimeoutException</item>\n\t\t\t<item>Timer</item>\n\t\t\t<item>Timer</item>\n\t\t\t<item>Timer</item>\n\t\t\t<item>TimerAlarmClockNotification</item>\n\t\t\t<item>TimerMBean</item>\n\t\t\t<item>TimerNotification</item>\n\t\t\t<item>TimerTask</item>\n\t\t\t<item>Timestamp</item>\n\t\t\t<item>Timestamp</item>\n\t\t\t<item>TitledBorder</item>\n\t\t\t<item>TooManyListenersException</item>\n\t\t\t<item>ToolBarUI</item>\n\t\t\t<item>ToolTipManager</item>\n\t\t\t<item>ToolTipUI</item>\n\t\t\t<item>Toolkit</item>\n\t\t\t<item>Track</item>\n\t\t\t<item>TransactionRequiredException</item>\n\t\t\t<item>TransactionRolledbackException</item>\n\t\t\t<item>TransactionService</item>\n\t\t\t<item>TransactionalWriter</item>\n\t\t\t<item>TransferHandler</item>\n\t\t\t<item>Transferable</item>\n\t\t\t<item>TransformAttribute</item>\n\t\t\t<item>Transformer</item>\n\t\t\t<item>TransformerConfigurationException</item>\n\t\t\t<item>TransformerException</item>\n\t\t\t<item>TransformerFactory</item>\n\t\t\t<item>TransformerFactoryConfigurationError</item>\n\t\t\t<item>TransformerHandler</item>\n\t\t\t<item>Transmitter</item>\n\t\t\t<item>Transparency</item>\n\t\t\t<item>TreeCellEditor</item>\n\t\t\t<item>TreeCellRenderer</item>\n\t\t\t<item>TreeExpansionEvent</item>\n\t\t\t<item>TreeExpansionListener</item>\n\t\t\t<item>TreeMap</item>\n\t\t\t<item>TreeModel</item>\n\t\t\t<item>TreeModelEvent</item>\n\t\t\t<item>TreeModelListener</item>\n\t\t\t<item>TreeNode</item>\n\t\t\t<item>TreePath</item>\n\t\t\t<item>TreeSelectionEvent</item>\n\t\t\t<item>TreeSelectionListener</item>\n\t\t\t<item>TreeSelectionModel</item>\n\t\t\t<item>TreeSet</item>\n\t\t\t<item>TreeUI</item>\n\t\t\t<item>TreeWillExpandListener</item>\n\t\t\t<item>TrustAnchor</item>\n\t\t\t<item>TrustManager</item>\n\t\t\t<item>TrustManagerFactory</item>\n\t\t\t<item>TrustManagerFactorySpi</item>\n\t\t\t<item>Type</item>\n\t\t\t<item>TypeCode</item>\n\t\t\t<item>TypeCodeHolder</item>\n\t\t\t<item>TypeInfo</item>\n\t\t\t<item>TypeInfoProvider</item>\n\t\t\t<item>TypeMismatch</item>\n\t\t\t<item>TypeMismatch</item>\n\t\t\t<item>TypeMismatch</item>\n\t\t\t<item>TypeMismatchHelper</item>\n\t\t\t<item>TypeMismatchHelper</item>\n\t\t\t<item>TypeNotPresentException</item>\n\t\t\t<item>TypeVariable</item>\n\t\t\t<item>Types</item>\n\t\t\t<item>UID</item>\n\t\t\t<item>UIDefaults</item>\n\t\t\t<item>UIDefaults.ActiveValue</item>\n\t\t\t<item>UIDefaults.LazyInputMap</item>\n\t\t\t<item>UIDefaults.LazyValue</item>\n\t\t\t<item>UIDefaults.ProxyLazyValue</item>\n\t\t\t<item>UIManager</item>\n\t\t\t<item>UIManager.LookAndFeelInfo</item>\n\t\t\t<item>UIResource</item>\n\t\t\t<item>ULongLongSeqHelper</item>\n\t\t\t<item>ULongLongSeqHolder</item>\n\t\t\t<item>ULongSeqHelper</item>\n\t\t\t<item>ULongSeqHolder</item>\n\t\t\t<item>UNKNOWN</item>\n\t\t\t<item>UNKNOWN</item>\n\t\t\t<item>UNSUPPORTED_POLICY</item>\n\t\t\t<item>UNSUPPORTED_POLICY_VALUE</item>\n\t\t\t<item>URI</item>\n\t\t\t<item>URIException</item>\n\t\t\t<item>URIResolver</item>\n\t\t\t<item>URISyntax</item>\n\t\t\t<item>URISyntaxException</item>\n\t\t\t<item>URL</item>\n\t\t\t<item>URLClassLoader</item>\n\t\t\t<item>URLConnection</item>\n\t\t\t<item>URLDecoder</item>\n\t\t\t<item>URLEncoder</item>\n\t\t\t<item>URLStreamHandler</item>\n\t\t\t<item>URLStreamHandlerFactory</item>\n\t\t\t<item>URLStringHelper</item>\n\t\t\t<item>USER_EXCEPTION</item>\n\t\t\t<item>UShortSeqHelper</item>\n\t\t\t<item>UShortSeqHolder</item>\n\t\t\t<item>UTFDataFormatException</item>\n\t\t\t<item>UUID</item>\n\t\t\t<item>UndeclaredThrowableException</item>\n\t\t\t<item>UndoManager</item>\n\t\t\t<item>UndoableEdit</item>\n\t\t\t<item>UndoableEditEvent</item>\n\t\t\t<item>UndoableEditListener</item>\n\t\t\t<item>UndoableEditSupport</item>\n\t\t\t<item>UnexpectedException</item>\n\t\t\t<item>UnicastRemoteObject</item>\n\t\t\t<item>UnionMember</item>\n\t\t\t<item>UnionMemberHelper</item>\n\t\t\t<item>UnknownEncoding</item>\n\t\t\t<item>UnknownEncodingHelper</item>\n\t\t\t<item>UnknownError</item>\n\t\t\t<item>UnknownException</item>\n\t\t\t<item>UnknownFormatConversionException</item>\n\t\t\t<item>UnknownFormatFlagsException</item>\n\t\t\t<item>UnknownGroupException</item>\n\t\t\t<item>UnknownHostException</item>\n\t\t\t<item>UnknownHostException</item>\n\t\t\t<item>UnknownObjectException</item>\n\t\t\t<item>UnknownServiceException</item>\n\t\t\t<item>UnknownUserException</item>\n\t\t\t<item>UnknownUserExceptionHelper</item>\n\t\t\t<item>UnknownUserExceptionHolder</item>\n\t\t\t<item>UnmappableCharacterException</item>\n\t\t\t<item>UnmarshalException</item>\n\t\t\t<item>UnmodifiableClassException</item>\n\t\t\t<item>UnmodifiableSetException</item>\n\t\t\t<item>UnrecoverableEntryException</item>\n\t\t\t<item>UnrecoverableKeyException</item>\n\t\t\t<item>Unreferenced</item>\n\t\t\t<item>UnresolvedAddressException</item>\n\t\t\t<item>UnresolvedPermission</item>\n\t\t\t<item>UnsatisfiedLinkError</item>\n\t\t\t<item>UnsolicitedNotification</item>\n\t\t\t<item>UnsolicitedNotificationEvent</item>\n\t\t\t<item>UnsolicitedNotificationListener</item>\n\t\t\t<item>UnsupportedAddressTypeException</item>\n\t\t\t<item>UnsupportedAudioFileException</item>\n\t\t\t<item>UnsupportedCallbackException</item>\n\t\t\t<item>UnsupportedCharsetException</item>\n\t\t\t<item>UnsupportedClassVersionError</item>\n\t\t\t<item>UnsupportedEncodingException</item>\n\t\t\t<item>UnsupportedFlavorException</item>\n\t\t\t<item>UnsupportedLookAndFeelException</item>\n\t\t\t<item>UnsupportedOperationException</item>\n\t\t\t<item>UserDataHandler</item>\n\t\t\t<item>UserException</item>\n\t\t\t<item>Util</item>\n\t\t\t<item>UtilDelegate</item>\n\t\t\t<item>Utilities</item>\n\t\t\t<item>VMID</item>\n\t\t\t<item>VM_ABSTRACT</item>\n\t\t\t<item>VM_CUSTOM</item>\n\t\t\t<item>VM_NONE</item>\n\t\t\t<item>VM_TRUNCATABLE</item>\n\t\t\t<item>Validator</item>\n\t\t\t<item>ValidatorHandler</item>\n\t\t\t<item>ValueBase</item>\n\t\t\t<item>ValueBaseHelper</item>\n\t\t\t<item>ValueBaseHolder</item>\n\t\t\t<item>ValueExp</item>\n\t\t\t<item>ValueFactory</item>\n\t\t\t<item>ValueHandler</item>\n\t\t\t<item>ValueHandlerMultiFormat</item>\n\t\t\t<item>ValueInputStream</item>\n\t\t\t<item>ValueMember</item>\n\t\t\t<item>ValueMemberHelper</item>\n\t\t\t<item>ValueOutputStream</item>\n\t\t\t<item>VariableHeightLayoutCache</item>\n\t\t\t<item>Vector</item>\n\t\t\t<item>VerifyError</item>\n\t\t\t<item>VersionSpecHelper</item>\n\t\t\t<item>VetoableChangeListener</item>\n\t\t\t<item>VetoableChangeListenerProxy</item>\n\t\t\t<item>VetoableChangeSupport</item>\n\t\t\t<item>View</item>\n\t\t\t<item>ViewFactory</item>\n\t\t\t<item>ViewportLayout</item>\n\t\t\t<item>ViewportUI</item>\n\t\t\t<item>VirtualMachineError</item>\n\t\t\t<item>Visibility</item>\n\t\t\t<item>VisibilityHelper</item>\n\t\t\t<item>VoiceStatus</item>\n\t\t\t<item>Void</item>\n\t\t\t<item>VolatileImage</item>\n\t\t\t<item>WCharSeqHelper</item>\n\t\t\t<item>WCharSeqHolder</item>\n\t\t\t<item>WStringSeqHelper</item>\n\t\t\t<item>WStringSeqHolder</item>\n\t\t\t<item>WStringValueHelper</item>\n\t\t\t<item>WeakHashMap</item>\n\t\t\t<item>WeakReference</item>\n\t\t\t<item>WebRowSet</item>\n\t\t\t<item>WildcardType</item>\n\t\t\t<item>Window</item>\n\t\t\t<item>WindowAdapter</item>\n\t\t\t<item>WindowConstants</item>\n\t\t\t<item>WindowEvent</item>\n\t\t\t<item>WindowFocusListener</item>\n\t\t\t<item>WindowListener</item>\n\t\t\t<item>WindowStateListener</item>\n\t\t\t<item>WrappedPlainView</item>\n\t\t\t<item>WritableByteChannel</item>\n\t\t\t<item>WritableRaster</item>\n\t\t\t<item>WritableRenderedImage</item>\n\t\t\t<item>WriteAbortedException</item>\n\t\t\t<item>Writer</item>\n\t\t\t<item>WrongAdapter</item>\n\t\t\t<item>WrongAdapterHelper</item>\n\t\t\t<item>WrongPolicy</item>\n\t\t\t<item>WrongPolicyHelper</item>\n\t\t\t<item>WrongTransaction</item>\n\t\t\t<item>WrongTransactionHelper</item>\n\t\t\t<item>WrongTransactionHolder</item>\n\t\t\t<item>X500Principal</item>\n\t\t\t<item>X500PrivateCredential</item>\n\t\t\t<item>X509CRL</item>\n\t\t\t<item>X509CRLEntry</item>\n\t\t\t<item>X509CRLSelector</item>\n\t\t\t<item>X509CertSelector</item>\n\t\t\t<item>X509Certificate</item>\n\t\t\t<item>X509Certificate</item>\n\t\t\t<item>X509EncodedKeySpec</item>\n\t\t\t<item>X509ExtendedKeyManager</item>\n\t\t\t<item>X509Extension</item>\n\t\t\t<item>X509KeyManager</item>\n\t\t\t<item>X509TrustManager</item>\n\t\t\t<item>XAConnection</item>\n\t\t\t<item>XADataSource</item>\n\t\t\t<item>XAException</item>\n\t\t\t<item>XAResource</item>\n\t\t\t<item>XMLConstants</item>\n\t\t\t<item>XMLDecoder</item>\n\t\t\t<item>XMLEncoder</item>\n\t\t\t<item>XMLFilter</item>\n\t\t\t<item>XMLFilterImpl</item>\n\t\t\t<item>XMLFormatter</item>\n\t\t\t<item>XMLGregorianCalendar</item>\n\t\t\t<item>XMLParseException</item>\n\t\t\t<item>XMLReader</item>\n\t\t\t<item>XMLReaderAdapter</item>\n\t\t\t<item>XMLReaderFactory</item>\n\t\t\t<item>XPath</item>\n\t\t\t<item>XPathConstants</item>\n\t\t\t<item>XPathException</item>\n\t\t\t<item>XPathExpression</item>\n\t\t\t<item>XPathExpressionException</item>\n\t\t\t<item>XPathFactory</item>\n\t\t\t<item>XPathFactoryConfigurationException</item>\n\t\t\t<item>XPathFunction</item>\n\t\t\t<item>XPathFunctionException</item>\n\t\t\t<item>XPathFunctionResolver</item>\n\t\t\t<item>XPathVariableResolver</item>\n\t\t\t<item>Xid</item>\n\t\t\t<item>XmlReader</item>\n\t\t\t<item>XmlWriter</item>\n\t\t\t<item>ZipEntry</item>\n\t\t\t<item>ZipException</item>\n\t\t\t<item>ZipFile</item>\n\t\t\t<item>ZipInputStream</item>\n\t\t\t<item>ZipOutputStream</item>\n\t\t\t<item>ZoneView</item>\n\t\t\t<item>_BindingIteratorImplBase</item>\n\t\t\t<item>_BindingIteratorStub</item>\n\t\t\t<item>_DynAnyFactoryStub</item>\n\t\t\t<item>_DynAnyStub</item>\n\t\t\t<item>_DynArrayStub</item>\n\t\t\t<item>_DynEnumStub</item>\n\t\t\t<item>_DynFixedStub</item>\n\t\t\t<item>_DynSequenceStub</item>\n\t\t\t<item>_DynStructStub</item>\n\t\t\t<item>_DynUnionStub</item>\n\t\t\t<item>_DynValueStub</item>\n\t\t\t<item>_IDLTypeStub</item>\n\t\t\t<item>_NamingContextExtStub</item>\n\t\t\t<item>_NamingContextImplBase</item>\n\t\t\t<item>_NamingContextStub</item>\n\t\t\t<item>_PolicyStub</item>\n\t\t\t<item>_Remote_Stub</item>\n\t\t\t<item>_ServantActivatorStub</item>\n\t\t\t<item>_ServantLocatorStub</item>\n\t\t\t\n<!-- \t\t\tnew classes of jdk 6.0 -->\n\n\t\t\t<item>AbstractAnnotationValueVisitor6</item>\n\t\t\t<item>AbstractElementVisitor6</item>\n\t\t\t<item>AbstractMarshallerImpl</item>\n\t\t\t<item>AbstractOwnableSynchronizer</item>\n\t\t\t<item>AbstractProcessor</item>\n\t\t\t<item>AbstractQueuedLongSynchronizer</item>\n\t\t\t<item>AbstractScriptEngine</item>\n\t\t\t<item>AbstractTypeVisitor6</item>\n\t\t\t<item>AbstractUnmarshallerImpl</item>\n\t\t\t<item>ActivationDataFlavor</item>\n\t\t\t<item>AlgorithmMethod</item>\n\t\t\t<item>AnnotationMirror</item>\n\t\t\t<item>AnnotationValue</item>\n\t\t\t<item>AnnotationValueVisitor</item>\n\t\t\t<item>ArrayDeque</item>\n\t\t\t<item>AsyncHandler</item>\n\t\t\t<item>AttachmentMarshaller</item>\n\t\t\t<item>AttachmentPart</item>\n\t\t\t<item>AttachmentUnmarshaller</item>\n\t\t\t<item>Binder</item>\n\t\t\t<item>BindingProvider</item>\n\t\t\t<item>Bindings</item>\n\t\t\t<item>BlockingDeque</item>\n\t\t\t<item>BreakIteratorProvider</item>\n\t\t\t<item>C14NMethodParameterSpec</item>\n\t\t\t<item>CanonicalizationMethod</item>\n\t\t\t<item>Characters</item>\n\t\t\t<item>ClientInfoStatus</item>\n\t\t\t<item>CollapsedStringAdapter</item>\n\t\t\t<item>CollatorProvider</item>\n\t\t\t<item>CommandInfo</item>\n\t\t\t<item>CommandMap</item>\n\t\t\t<item>CommandObject</item>\n\t\t\t<item>CommonDataSource</item>\n\t\t\t<item>Compilable</item>\n\t\t\t<item>CompiledScript</item>\n\t\t\t<item>Completion</item>\n\t\t\t<item>Completions</item>\n\t\t\t<item>CompositeDataInvocationHandler</item>\n\t\t\t<item>CompositeDataView</item>\n\t\t\t<item>ConcurrentNavigableMap</item>\n\t\t\t<item>ConcurrentSkipListMap</item>\n\t\t\t<item>ConcurrentSkipListSet</item>\n\t\t\t<item>ConfigurationSpi</item>\n\t\t\t<item>Console</item>\n\t\t\t<item>ConstructorProperties</item>\n\t\t\t<item>CookieManager</item>\n\t\t\t<item>CookiePolicy</item>\n\t\t\t<item>CookieStore</item>\n\t\t\t<item>CurrencyNameProvider</item>\n\t\t\t<item>Data</item>\n\t\t\t<item>DataContentHandler</item>\n\t\t\t<item>DataContentHandlerFactory</item>\n\t\t\t<item>DataHandler</item>\n\t\t\t<item>DatatypeConverter</item>\n\t\t\t<item>DatatypeConverterInterface</item>\n\t\t\t<item>DateFormatProvider</item>\n\t\t\t<item>DateFormatSymbolsProvider</item>\n\t\t\t<item>DecimalFormatSymbolsProvider</item>\n\t\t\t<item>DeclaredType</item>\n\t\t\t<item>DefaultRowSorter</item>\n\t\t\t<item>DefaultValidationEventHandler</item>\n\t\t\t<item>DeflaterInputStream</item>\n\t\t\t<item>Deque</item>\n\t\t\t<item>DescriptorKey</item>\n\t\t\t<item>DescriptorRead</item>\n\t\t\t<item>Desktop</item>\n\t\t\t<item>Detail</item>\n\t\t\t<item>DetailEntry</item>\n\t\t\t<item>Diagnostic</item>\n\t\t\t<item>DiagnosticCollector</item>\n\t\t\t<item>DiagnosticListener</item>\n\t\t\t<item>DigestMethod</item>\n\t\t\t<item>DigestMethodParameterSpec</item>\n\t\t\t<item>Dispatch</item>\n\t\t\t<item>DOMCryptoContext</item>\n\t\t\t<item>DomHandler</item>\n\t\t\t<item>DOMSignContext</item>\n\t\t\t<item>DOMStructure</item>\n\t\t\t<item>DOMURIReference</item>\n\t\t\t<item>DOMValidateContext</item>\n\t\t\t<item>DropMode</item>\n\t\t\t<item>ElementFilter</item>\n\t\t\t<item>ElementKind</item>\n\t\t\t<item>ElementKindVisitor6</item>\n\t\t\t<item>Elements</item>\n\t\t\t<item>ElementScanner6</item>\n\t\t\t<item>ElementVisitor</item>\n\t\t\t<item>EndDocument</item>\n\t\t\t<item>EndElement</item>\n\t\t\t<item>Endpoint</item>\n\t\t\t<item>EntityDeclaration</item>\n\t\t\t<item>ErrorType</item>\n\t\t\t<item>EventException</item>\n\t\t\t<item>EventFilter</item>\n\t\t\t<item>EventReaderDelegate</item>\n\t\t\t<item>EventTarget</item>\n\t\t\t<item>ExcC14NParameterSpec</item>\n\t\t\t<item>ExecutableElement</item>\n\t\t\t<item>ExecutableType</item>\n\t\t\t<item>FileDataSource</item>\n\t\t\t<item>FileNameExtensionFilter</item>\n\t\t\t<item>FileObject</item>\n\t\t\t<item>Filer</item>\n\t\t\t<item>FilerException</item>\n\t\t\t<item>FileTypeMap</item>\n\t\t\t<item>ForwardingFileObject</item>\n\t\t\t<item>ForwardingJavaFileManager</item>\n\t\t\t<item>ForwardingJavaFileObject</item>\n\t\t\t<item>Generated</item>\n\t\t\t<item>GridBagLayoutInfo</item>\n\t\t\t<item>GroupLayout</item>\n\t\t\t<item>HandlerChain</item>\n\t\t\t<item>HandlerResolver</item>\n\t\t\t<item>HexBinaryAdapter</item>\n\t\t\t<item>HMACParameterSpec</item>\n\t\t\t<item>Holder</item>\n\t\t\t<item>HTTPBinding</item>\n\t\t\t<item>HttpCookie</item>\n\t\t\t<item>HTTPException</item>\n\t\t\t<item>IDN</item>\n\t\t\t<item>ImmutableDescriptor</item>\n\t\t\t<item>InflaterOutputStream</item>\n\t\t\t<item>InitParam</item>\n\t\t\t<item>InterfaceAddress</item>\n\t\t\t<item>Invocable</item>\n\t\t\t<item>IOError</item>\n\t\t\t<item>JavaCompiler</item>\n\t\t\t<item>JavaFileManager</item>\n\t\t\t<item>JavaFileObject</item>\n\t\t\t<item>JAXBContext</item>\n\t\t\t<item>JAXBElement</item>\n\t\t\t<item>JAXBException</item>\n\t\t\t<item>JAXBIntrospector</item>\n\t\t\t<item>JAXBResult</item>\n\t\t\t<item>JAXBSource</item>\n\t\t\t<item>JMX</item>\n\t\t\t<item>JMXAddressable</item>\n\t\t\t<item>KeyInfo</item>\n\t\t\t<item>KeyInfoFactory</item>\n\t\t\t<item>KeyName</item>\n\t\t\t<item>KeySelector</item>\n\t\t\t<item>KeySelectorException</item>\n\t\t\t<item>KeySelectorResult</item>\n\t\t\t<item>KeyValue</item>\n\t\t\t<item>LayoutPath</item>\n\t\t\t<item>LayoutStyle</item>\n\t\t\t<item>LinearGradientPaint</item>\n\t\t\t<item>LinkedBlockingDeque</item>\n\t\t\t<item>LocaleNameProvider</item>\n\t\t\t<item>LocaleServiceProvider</item>\n\t\t\t<item>Location</item>\n\t\t\t<item>LockInfo</item>\n\t\t\t<item>LogicalHandler</item>\n\t\t\t<item>LogicalMessage</item>\n\t\t\t<item>LogicalMessageContext</item>\n\t\t\t<item>MailcapCommandMap</item>\n\t\t\t<item>Marshaller</item>\n\t\t\t<item>MessageContext</item>\n\t\t\t<item>MessageFactory</item>\n\t\t\t<item>Messager</item>\n\t\t\t<item>MimeHeader</item>\n\t\t\t<item>MimeHeaders</item>\n\t\t\t<item>MimeType</item>\n\t\t\t<item>MimeTypeParameterList</item>\n\t\t\t<item>MimetypesFileTypeMap</item>\n\t\t\t<item>MirroredTypeException</item>\n\t\t\t<item>MirroredTypesException</item>\n\t\t\t<item>MLetContent</item>\n\t\t\t<item>MonitorInfo</item>\n\t\t\t<item>MultipleGradientPaint</item>\n\t\t\t<item>MutationEvent</item>\n\t\t\t<item>MXBean</item>\n\t\t\t<item>Namespace</item>\n\t\t\t<item>NavigableMap</item>\n\t\t\t<item>NavigableSet</item>\n\t\t\t<item>NClob</item>\n\t\t\t<item>NestingKind</item>\n\t\t\t<item>NodeSetData</item>\n\t\t\t<item>NormalizedStringAdapter</item>\n\t\t\t<item>Normalizer</item>\n\t\t\t<item>NoSuchMechanismException</item>\n\t\t\t<item>NotationDeclaration</item>\n\t\t\t<item>NotIdentifiableEvent</item>\n\t\t\t<item>NotIdentifiableEventImpl</item>\n\t\t\t<item>NoType</item>\n\t\t\t<item>NullType</item>\n\t\t\t<item>NumberFormatProvider</item>\n\t\t\t<item>OctetStreamData</item>\n\t\t\t<item>Oneway</item>\n\t\t\t<item>OptionChecker</item>\n\t\t\t<item>PackageElement</item>\n\t\t\t<item>ParseConversionEvent</item>\n\t\t\t<item>ParseConversionEventImpl</item>\n\t\t\t<item>Path2D</item>\n\t\t\t<item>PGPData</item>\n\t\t\t<item>PolicySpi</item>\n\t\t\t<item>PortInfo</item>\n\t\t\t<item>PostConstruct</item>\n\t\t\t<item>PreDestroy</item>\n\t\t\t<item>PrimitiveType</item>\n\t\t\t<item>PrintConversionEvent</item>\n\t\t\t<item>PrintConversionEventImpl</item>\n\t\t\t<item>ProcessingEnvironment</item>\n\t\t\t<item>Processor</item>\n\t\t\t<item>PropertyException</item>\n\t\t\t<item>RadialGradientPaint</item>\n\t\t\t<item>ReferenceType</item>\n\t\t\t<item>RequestWrapper</item>\n\t\t\t<item>Resource</item>\n\t\t\t<item>Resources</item>\n\t\t\t<item>Response</item>\n\t\t\t<item>ResponseWrapper</item>\n\t\t\t<item>RetrievalMethod</item>\n\t\t\t<item>RoundEnvironment</item>\n\t\t\t<item>RowFilter</item>\n\t\t\t<item>RowId</item>\n\t\t\t<item>RowIdLifetime</item>\n\t\t\t<item>RowSorter</item>\n\t\t\t<item>RowSorterEvent</item>\n\t\t\t<item>RowSorterListener</item>\n\t\t\t<item>RunnableFuture</item>\n\t\t\t<item>RunnableScheduledFuture</item>\n\t\t\t<item>SAAJMetaFactory</item>\n\t\t\t<item>SAAJResult</item>\n\t\t\t<item>SchemaOutputResolver</item>\n\t\t\t<item>ScriptContext</item>\n\t\t\t<item>ScriptEngine</item>\n\t\t\t<item>ScriptEngineFactory</item>\n\t\t\t<item>ScriptEngineManager</item>\n\t\t\t<item>ScriptException</item>\n\t\t\t<item>Service</item>\n\t\t\t<item>ServiceConfigurationError</item>\n\t\t\t<item>ServiceDelegate</item>\n\t\t\t<item>ServiceLoader</item>\n\t\t\t<item>ServiceMode</item>\n\t\t\t<item>SignatureMethod</item>\n\t\t\t<item>SignatureMethodParameterSpec</item>\n\t\t\t<item>SignatureProperties</item>\n\t\t\t<item>SignatureProperty</item>\n\t\t\t<item>SignedInfo</item>\n\t\t\t<item>SimpleAnnotationValueVisitor6</item>\n\t\t\t<item>SimpleBindings</item>\n\t\t\t<item>SimpleElementVisitor6</item>\n\t\t\t<item>SimpleJavaFileObject</item>\n\t\t\t<item>SimpleScriptContext</item>\n\t\t\t<item>SimpleTypeVisitor6</item>\n\t\t\t<item>SOAPBinding</item>\n\t\t\t<item>SOAPBinding</item>\n\t\t\t<item>SOAPBody</item>\n\t\t\t<item>SOAPBodyElement</item>\n\t\t\t<item>SOAPConnection</item>\n\t\t\t<item>SOAPConnectionFactory</item>\n\t\t\t<item>SOAPConstants</item>\n\t\t\t<item>SOAPElement</item>\n\t\t\t<item>SOAPElementFactory</item>\n\t\t\t<item>SOAPEnvelope</item>\n\t\t\t<item>SOAPException</item>\n\t\t\t<item>SOAPFactory</item>\n\t\t\t<item>SOAPFault</item>\n\t\t\t<item>SOAPFaultElement</item>\n\t\t\t<item>SOAPFaultException</item>\n\t\t\t<item>SOAPHandler</item>\n\t\t\t<item>SOAPHeader</item>\n\t\t\t<item>SOAPHeaderElement</item>\n\t\t\t<item>SOAPMessage</item>\n\t\t\t<item>SOAPMessageContext</item>\n\t\t\t<item>SOAPMessageHandler</item>\n\t\t\t<item>SOAPMessageHandlers</item>\n\t\t\t<item>SOAPPart</item>\n\t\t\t<item>SortOrder</item>\n\t\t\t<item>SourceVersion</item>\n\t\t\t<item>SplashScreen</item>\n\t\t\t<item>SQLClientInfoException</item>\n\t\t\t<item>SQLDataException</item>\n\t\t\t<item>SQLFeatureNotSupportedException</item>\n\t\t\t<item>SQLIntegrityConstraintViolationException</item>\n\t\t\t<item>SQLInvalidAuthorizationSpecException</item>\n\t\t\t<item>SQLNonTransientConnectionException</item>\n\t\t\t<item>SQLNonTransientException</item>\n\t\t\t<item>SQLRecoverableException</item>\n\t\t\t<item>SQLSyntaxErrorException</item>\n\t\t\t<item>SQLTimeoutException</item>\n\t\t\t<item>SQLTransactionRollbackException</item>\n\t\t\t<item>SQLTransientConnectionException</item>\n\t\t\t<item>SQLTransientException</item>\n\t\t\t<item>SQLXML</item>\n\t\t\t<item>SSLParameters</item>\n\t\t\t<item>StandardEmitterMBean</item>\n\t\t\t<item>StandardJavaFileManager</item>\n\t\t\t<item>StandardLocation</item>\n\t\t\t<item>StartDocument</item>\n\t\t\t<item>StartElement</item>\n\t\t\t<item>StatementEvent</item>\n\t\t\t<item>StatementEventListener</item>\n\t\t\t<item>StAXResult</item>\n\t\t\t<item>StAXSource</item>\n\t\t\t<item>StreamFilter</item>\n\t\t\t<item>StreamReaderDelegate</item>\n\t\t\t<item>SupportedAnnotationTypes</item>\n\t\t\t<item>SupportedOptions</item>\n\t\t\t<item>SupportedSourceVersion</item>\n\t\t\t<item>SwingWorker</item>\n\t\t\t<item>SystemTray</item>\n\t\t\t<item>TableRowSorter</item>\n\t\t\t<item>TableStringConverter</item>\n\t\t\t<item>TimeZoneNameProvider</item>\n\t\t\t<item>Tool</item>\n\t\t\t<item>ToolProvider</item>\n\t\t\t<item>Transform</item>\n\t\t\t<item>TransformException</item>\n\t\t\t<item>TransformParameterSpec</item>\n\t\t\t<item>TransformService</item>\n\t\t\t<item>TrayIcon</item>\n\t\t\t<item>TypeConstraintException</item>\n\t\t\t<item>TypeElement</item>\n\t\t\t<item>TypeKind</item>\n\t\t\t<item>TypeKindVisitor6</item>\n\t\t\t<item>TypeMirror</item>\n\t\t\t<item>TypeParameterElement</item>\n\t\t\t<item>TypeVisitor</item>\n\t\t\t<item>UIEvent</item>\n\t\t\t<item>UnknownAnnotationValueException</item>\n\t\t\t<item>UnknownElementException</item>\n\t\t\t<item>UnknownTypeException</item>\n\t\t\t<item>Unmarshaller</item>\n\t\t\t<item>UnmarshallerHandler</item>\n\t\t\t<item>UnsupportedDataTypeException</item>\n\t\t\t<item>URIDereferencer</item>\n\t\t\t<item>URIParameter</item>\n\t\t\t<item>URIReference</item>\n\t\t\t<item>URIReferenceException</item>\n\t\t\t<item>URLDataSource</item>\n\t\t\t<item>ValidationEvent</item>\n\t\t\t<item>ValidationEventCollector</item>\n\t\t\t<item>ValidationEventHandler</item>\n\t\t\t<item>ValidationEventImpl</item>\n\t\t\t<item>ValidationEventLocator</item>\n\t\t\t<item>ValidationEventLocatorImpl</item>\n\t\t\t<item>ValidationException</item>\n\t\t\t<item>VariableElement</item>\n\t\t\t<item>W3CDomHandler</item>\n\t\t\t<item>WebEndpoint</item>\n\t\t\t<item>WebFault</item>\n\t\t\t<item>WebMethod</item>\n\t\t\t<item>WebParam</item>\n\t\t\t<item>WebResult</item>\n\t\t\t<item>WebService</item>\n\t\t\t<item>WebServiceClient</item>\n\t\t\t<item>WebServiceContext</item>\n\t\t\t<item>WebServiceException</item>\n\t\t\t<item>WebServicePermission</item>\n\t\t\t<item>WebServiceProvider</item>\n\t\t\t<item>WebServiceRef</item>\n\t\t\t<item>WebServiceRefs</item>\n\t\t\t<item>Wrapper</item>\n\t\t\t<item>X509Data</item>\n\t\t\t<item>X509IssuerSerial</item>\n\t\t\t<item>XmlAccessOrder</item>\n\t\t\t<item>XmlAccessorOrder</item>\n\t\t\t<item>XmlAccessorType</item>\n\t\t\t<item>XmlAccessType</item>\n\t\t\t<item>XmlAdapter</item>\n\t\t\t<item>XmlAnyAttribute</item>\n\t\t\t<item>XmlAnyElement</item>\n\t\t\t<item>XmlAttachmentRef</item>\n\t\t\t<item>XmlAttribute</item>\n\t\t\t<item>XMLCryptoContext</item>\n\t\t\t<item>XmlElement</item>\n\t\t\t<item>XmlElementDecl</item>\n\t\t\t<item>XmlElementRef</item>\n\t\t\t<item>XmlElementRefs</item>\n\t\t\t<item>XmlElements</item>\n\t\t\t<item>XmlElementWrapper</item>\n\t\t\t<item>XmlEnum</item>\n\t\t\t<item>XmlEnumValue</item>\n\t\t\t<item>XMLEvent</item>\n\t\t\t<item>XMLEventAllocator</item>\n\t\t\t<item>XMLEventConsumer</item>\n\t\t\t<item>XMLEventFactory</item>\n\t\t\t<item>XMLEventReader</item>\n\t\t\t<item>XMLEventWriter</item>\n\t\t\t<item>XmlID</item>\n\t\t\t<item>XmlIDREF</item>\n\t\t\t<item>XmlInlineBinaryData</item>\n\t\t\t<item>XMLInputFactory</item>\n\t\t\t<item>XmlJavaTypeAdapter</item>\n\t\t\t<item>XmlJavaTypeAdapters</item>\n\t\t\t<item>XmlList</item>\n\t\t\t<item>XmlMimeType</item>\n\t\t\t<item>XmlMixed</item>\n\t\t\t<item>XmlNs</item>\n\t\t\t<item>XmlNsForm</item>\n\t\t\t<item>XMLObject</item>\n\t\t\t<item>XMLOutputFactory</item>\n\t\t\t<item>XmlRegistry</item>\n\t\t\t<item>XMLReporter</item>\n\t\t\t<item>XMLResolver</item>\n\t\t\t<item>XmlRootElement</item>\n\t\t\t<item>XmlSchema</item>\n\t\t\t<item>XmlSchemaType</item>\n\t\t\t<item>XmlSchemaTypes</item>\n\t\t\t<item>XMLSignature</item>\n\t\t\t<item>XMLSignatureException</item>\n\t\t\t<item>XMLSignatureFactory</item>\n\t\t\t<item>XMLSignContext</item>\n\t\t\t<item>XMLStreamConstants</item>\n\t\t\t<item>XMLStreamException</item>\n\t\t\t<item>XMLStreamReader</item>\n\t\t\t<item>XMLStreamWriter</item>\n\t\t\t<item>XMLStructure</item>\n\t\t\t<item>XmlTransient</item>\n\t\t\t<item>XmlType</item>\n\t\t\t<item>XMLValidateContext</item>\n\t\t\t<item>XmlValue</item>\n\t\t\t<item>XPathFilter2ParameterSpec</item>\n\t\t\t<item>XPathFilterParameterSpec</item>\n\t\t\t<item>XPathType</item>\n\t\t\t<item>XSLTTransformParameterSpec</item>\n\t\t\t<item>ZipError</item>\n\t\t\t\n<!-- \t\t\tend new classes -->\n\t\t</list>\n\t\t<list name=\"keywords\">\n\t\t\t<item>abstract</item>\n\t\t\t<item>break</item>\n\t\t\t<item>case</item>\n\t\t\t<item>catch</item>\n\t\t\t<item>class</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>default</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>enum</item>\n\t\t\t<item>extends</item>\n\t\t\t<item>false</item>\n\t\t\t<item>finally</item>\n\t\t\t<item>for</item>\n\t\t\t<item>goto</item>\n\t\t\t<item>if</item>\n\t\t\t<item>implements</item>\n\t\t\t<item>instanceof</item>\n\t\t\t<item>@interface</item>\n\t\t\t<item>interface</item>\n\t\t\t<item>native</item>\n\t\t\t<item>new</item>\n\t\t\t<item>null</item>\n\t\t\t<item>private</item>\n\t\t\t<item>protected</item>\n\t\t\t<item>public</item>\n\t\t\t<item>return</item>\n\t\t\t<item>super</item>\n\t\t\t<item>strictfp</item>\n\t\t\t<item>switch</item>\n\t\t\t<item>synchronized</item>\n\t\t\t<item>this</item>\n\t\t\t<item>throws</item>\n\t\t\t<item>throw</item>\n\t\t\t<item>transient</item>\n\t\t\t<item>true</item>\n\t\t\t<item>try</item>\n\t\t\t<item>volatile</item>\n\t\t\t<item>while</item>\n\t\t</list>\n\t\t<list name=\"types\">\n\t\t\t<item>boolean</item>\n\t\t\t<item>byte</item>\n\t\t\t<item>char</item>\n\t\t\t<item>const</item>\n\t\t\t<item>double</item>\n\t\t\t<item>final</item>\n\t\t\t<item>float</item>\n\t\t\t<item>int</item>\n\t\t\t<item>long</item>\n\t\t\t<item>short</item>\n\t\t\t<item>static</item>\n\t\t\t<item>void</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<!-- Comment next line if you don't use Javadoc tool -->\n\t\t\t\t<IncludeRules context=\"##Javadoc\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t\t<keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n\t\t\t\t<keyword attribute=\"Java15\" context=\"#stay\" String=\"java15\"/>\n\t\t\t\t<RegExpr attribute=\"Float\" context=\"#stay\" String=\"(\\b&int;\\.?|(\\b&int;)?\\.&int;)([eE][\\-\\+]?&int;[fFdD]?|[fFdD])\\b\"/>\n\t\t\t\t<RegExpr attribute=\"Float\" context=\"#stay\" String=\"(\\b&int;\\.|(\\b&int;)?\\.&int;\\b)\"/>\n\t\t\t\t<RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\b0[xX](&hex;\\.?|(&hex;)?\\.&hex;)[pP][\\-\\+]?&int;[fFdD]?\\b\"/>\n\t\t\t\t<RegExpr attribute=\"Hex\" context=\"#stay\" String=\"\\b0[xX]&hex;[lL]?\\b\"/>\n\t\t\t\t<RegExpr attribute=\"Binary\" context=\"#stay\" String=\"\\b0[bB][01]([01_]*[01])?[lL]?\\b\"/>\n\t\t\t\t<RegExpr attribute=\"Octal\" context=\"#stay\" String=\"\\b0[0-7]([0-7_]*[0-7])?[lL]?\\b\"/>\n\t\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"\\b(0|[1-9]([0-9_]*[0-9])?)[lL]?\\b\"/>\n\t\t\t\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Char\" context=\"#stay\" String=\"'\\\\u[0-9a-fA-F]{4}'\"/>\n\t\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"Region1\"/>\n\t\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"Region1\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"EnterPrintf\" String=\"\\.(format|printf)\\b\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\.{3,3}\\s+\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"StaticImports\" String=\"\\b(import\\s+static)\\b\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"Imports\" String=\"\\b(package|import)\\b\" />\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*(/\\*\\s*\\d+\\s*\\*/\\s*)?[(])\" />\n\t\t\t\t<RegExpr attribute=\"Annotation\" context=\"#stay\" String=\"@[_\\w][_\\w\\d]*\" />\n\t\t\t\t<RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"InFunctionCall\" char=\"(\"/>\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"InFunctionCall\">\n\t\t\t\t<IncludeRules context=\"Normal\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\u[0-9a-fA-F]{4}\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"EnterPrintf\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"Printf\" char=\"(\"/>\n\t\t\t\t<DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Printf\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"PrintfString\" char=\"&quot;\"/>\n\t\t\t\t<IncludeRules context=\"InFunctionCall\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"PrintfString\" lineEndContext=\"#pop\" name=\"PrintfString\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(\\d+\\$)?(-|#|\\+|\\ |0|,|\\()*\\d*(\\.\\d+)?[a-hosxA-CEGHSX]\" />\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(\\d+\\$)?(-|#|\\+|\\ |0|,|\\()*\\d*(t|T)(a|A|b|B|c|C|d|D|e|F|h|H|I|j|k|l|L|m|M|N|p|P|Q|r|R|s|S|T|y|Y|z|Z)\" />\n\t\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(%|n)\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_a-zA-Z]\\w*(?=[\\s]*)\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"StaticImports\">\n\t\t\t\t<RegExpr attribute=\"StaticImports\" context=\"#pop\" String=\"\\s*.*;\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Imports\">\n\t\t\t\t<RegExpr attribute=\"Imports\" context=\"#pop\" String=\"\\s*.*;\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Annotation\"   defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Function\"     defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"StaticImports\" defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Imports\"      defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Octal\"        defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Hex\"          defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Binary\"       defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Char\"         defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"String\"       defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"PrintfString\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Symbol\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Java15\"       defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\"/>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/javadoc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Javadoc\" version=\"3\" kateversion=\"5.0\" section=\"Markup\" extensions=\"\" license=\"LGPL\" author=\"Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)\">\n\t<highlighting>\n\t\t<contexts>\n\t\t\t<context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"FindJavadoc\" />\n\t\t\t</context>\n\t\t\t<context name=\"FindJavadoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<StringDetect attribute=\"JavadocFS\" context=\"#stay\" String=\"/**/\"/>\n\t\t\t\t<StringDetect attribute=\"JavadocFS\" context=\"JavadocFSar\" String=\"/**\" beginRegion=\"Javadoc\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"JavadocFS\" lineEndContext=\"#stay\" name=\"JavadocFSar\">\n\t\t\t\t<Detect2Chars attribute=\"JavadocFS\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Javadoc\"/>\n\t\t\t\t<RegExpr attribute=\"JavadocFS\" context=\"Javadocar\" String=\"(!|\\?)\" />\n\t\t\t\t<RegExpr attribute=\"JavadocFS\" context=\"Javadocar\" String=\"(\\.\\s*$)\" />\n\t\t\t\t<RegExpr attribute=\"JavadocFS\" context=\"Javadocar\" String=\"(\\.\\s)(?![\\da-z])\" />\n\t\t\t\t<RegExpr attribute=\"JavadocFS\" context=\"Javadocar\" String=\"\\**\\s*(?=@(author|deprecated|exception|param|return|see|serial|serialData|serialField|since|throws|version)(\\s|$))\" firstNonSpace=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@code \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@code&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"#stay\" String=\"{@docRoot}\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"#stay\" String=\"{@inheritDoc}\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@link \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@link&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@linkplain \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@linkplain&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@literal \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@literal&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"#stay\" String=\"{@value}\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@value \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@value&#009;\" />\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t\t<IncludeRules context=\"##HTML\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Javadoc\" lineEndContext=\"#stay\" name=\"Javadocar\">\n\t\t\t\t<Detect2Chars attribute=\"JavadocFS\" context=\"#pop#pop\" char=\"*\" char1=\"/\" endRegion=\"Javadoc\"/>\n\t\t\t\t<RegExpr attribute=\"JavadocFS\" context=\"#stay\" String=\"\\*+(?!/)\" firstNonSpace=\"true\"/>\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@author \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@deprecated \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"JavadocParam\" String=\"@exception \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"JavadocParam\" String=\"@param \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@return \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"SeeTag\" String=\"@see \"/>\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@serial \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@serialData \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@serialField \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@since \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"JavadocParam\" String=\"@throws \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@version \" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@author&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@deprecated&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"JavadocParam\" String=\"@exception&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"JavadocParam\" String=\"@param&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@return&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"SeeTag\" String=\"@see&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@serial&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@serialData&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@serialField&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@since&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"JavadocParam\" String=\"@throws&#009;\" />\n\t\t\t\t<StringDetect attribute=\"BlockTag\" context=\"#stay\" String=\"@version&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@code \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@code&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"#stay\" String=\"{@docRoot}\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"#stay\" String=\"{@inheritDoc}\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@link \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@link&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@linkplain \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@linkplain&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@literal \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"LiteralTagar\" String=\"{@literal&#009;\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"#stay\" String=\"{@value}\" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@value \" />\n\t\t\t\t<StringDetect attribute=\"InlineTag\" context=\"InlineTagar\" String=\"{@value&#009;\" />\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t\t<IncludeRules context=\"##HTML\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Javadoc\" lineEndContext=\"#pop\" name=\"JavadocParam\">\n\t\t\t\t<DetectSpaces />\n\t\t\t\t<RegExpr attribute=\"JavadocParam\" context=\"#pop#pop\" String=\"\\S*(?=\\*/)\" />\n\t\t\t\t<RegExpr attribute=\"JavadocParam\" context=\"#pop\" String=\"\\S*(\\s|$)\" />\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"InlineTag\" name=\"InlineTagar\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"InlineTag\" context=\"#pop\" char=\"}\" />\n\t\t\t\t<Detect2Chars attribute=\"JavadocFS\" context=\"#pop#pop#pop\" char=\"*\" char1=\"/\" />\n\t\t\t\t<IncludeRules context=\"##HTML\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"InlineTag\" name=\"LiteralTagar\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"InlineTag\" context=\"#pop\" char=\"}\" />\n\t\t\t\t<Detect2Chars attribute=\"JavadocFS\" context=\"#pop#pop#pop\" char=\"*\" char1=\"/\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"SeeTag\" lineEndContext=\"#pop\" name=\"SeeTag\">\n\t\t\t\t<Detect2Chars attribute=\"JavadocFS\" context=\"#pop#pop#pop\" char=\"*\" char1=\"/\" />\n\t\t\t\t<IncludeRules context=\"##HTML\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"BlockTag\"     defStyleNum=\"dsAnnotation\" bold=\"1\" italic=\"0\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"InlineTag\"    defStyleNum=\"dsAnnotation\" bold=\"0\" italic=\"0\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"JavadocParam\" defStyleNum=\"dsAnnotation\" bold=\"0\" italic=\"1\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"SeeTag\"       defStyleNum=\"dsAnnotation\" bold=\"0\" italic=\"1\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"JavadocFS\"    defStyleNum=\"dsComment\" bold=\"1\" italic=\"0\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Javadoc\"      defStyleNum=\"dsComment\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<keywords casesensitive=\"1\"/>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/javascript-react.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY simpleName \"([a-z][a-z\\d]*:)?[a-z][a-z\\d]*\">\n\t<!ENTITY baseName   \"([a-zA-Z_\\$]|[^[:ascii:]])(([\\w\\$\\-\\.]|[^[:ascii:]])*([\\w\\$]|[^[:ascii:]]))?\">\n\t<!ENTITY name       \"(&baseName;:)?&baseName;\">\n\t<!ENTITY baseNameWithBound \"(\\b[a-zA-Z_\\$]|[^[:ascii:]])(([\\w\\$\\-\\.]|[^[:ascii:]])*([\\w\\$]|[^[:ascii:]]))?\">\n\t<!ENTITY nameWithBound     \"(&baseNameWithBound;:)?&baseNameWithBound;\"> <!-- Use this instead of \"\\b&name;\" -->\n\n\t<!ENTITY simpleTag  \"&lt;\\s*&simpleName;\"> <!-- Element tag -->\n\t<!ENTITY tag        \"&lt;\\s*(&name;|&gt;)\">\n\t<!ENTITY entref     \"&amp;([a-zA-Z\\d]+|#\\d+|#x[a-fA-F\\d]+);\">\n\n\t<!ENTITY identifier \"([a-zA-Z_$]|[^[:ascii:]])([\\w$]|[^[:ascii:]])*\">\n]>\n\n<!--\n    ====================================================================\n\n      This file is part of the KDE's KSyntaxHighlighting framework.\n\n      Copyright 2018-2019 Nibaldo González S. (nibgonz@gmail.com)\n\n      This Source Code Form is subject to the terms of the MIT License.\n      If a copy of the license was not distributed with this file,\n      You can obtain one at: https://opensource.org/licenses/MIT\n\n    ====================================================================\n\n    This file is an extension of the JavaScript highlighter\n    (javascript.xml).\n    IMPORTANT: Keep sync with \"typescript-react.xml\".\n\n    Based on the XML syntax highlighting (v7), by Wilbert Berendsen\n    (wilbert@kde.nl), and the TypeScript React grammar files,\n    available at: https://github.com/Microsoft/TypeScript-TmLanguage\n\n    Change log:\n     * v5 [2019-02-20]: Don't highlight tags within declarations of\n                        types, variables, classes and interfaces.\n                        Fixes tags after substitutions in templates.\n                        Reorder part of the code.\n     * v4 [2018-12-30]: Allow type assertion in the tag name.\n                        Allow tags after the keywords \"await\" & \"yield\".\n                        Allow empty tags and non-ASCII tag name & attributes.\n     * v3 [2018-11-18]: Fix Doxygen comments & shebang. Remove TSX extension.\n     * v2 [2018-08-18]: Remove \"Conditional Expression\" context.\n     * v1 [2018-06-20]: Initial version\n-->\n\n<language name=\"JavaScript React\" version=\"5\" kateversion=\"5.0\" section=\"Scripts\" indenter=\"cstyle\"\n          priority=\"8\" extensions=\"*.jsx\" mimetype=\"text/jsx;text/x-jsx;application/jsx;application/x-jsx;\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\" license=\"MIT\">\n\n<highlighting>\n\n\t<contexts>\n\n\t\t<context name=\"Shebang\" attribute=\"Normal Text\" lineEndContext=\"#pop!Normal\" lineEmptyContext=\"#pop!Normal\" fallthrough=\"true\" fallthroughContext=\"#pop!Normal\">\n\t\t\t<Detect2Chars context=\"ShebangLine\" attribute=\"Comment\" char=\"#\" char1=\"!\" column=\"0\" />\n\t\t</context>\n\t\t<context name=\"ShebangLine\" attribute=\"Comment\" lineEndContext=\"#pop#pop!Normal\" />\n\n\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<IncludeRules context=\"Normal##JavaScript\" />\n\t\t</context>\n\n\t\t<!-- JavaScript -->\n\n\t\t<!-- Overwrite rules of 'javascript.xml'. These rules send to contexts\n\t\t     that contain: <IncludeRules context=\"Normal\"/> in the JavaScript XML file. -->\n\t\t<context name=\"OverwriteJavaScript\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"Template\" attribute=\"Template\" char=\"`\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"?\" />\n\t\t\t<!-- NOTE: The \"{\" character sends to the \"Object\" context (see the \"React\" context) -->\n\t\t</context>\n\t\t<context name=\"Object\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<IncludeRules context=\"Object##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"Template\" attribute=\"Template\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Template\" char=\"`\" />\n\t\t\t<!-- Find tags and send to the \"Substitution\" context -->\n\t\t\t<Detect2Chars context=\"Substitution-BeforeTag\" attribute=\"Substitution\" char=\"$\" char1=\"{\" />\n\t\t\t<IncludeRules context=\"Template##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"Substitution\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Substitution\" char=\"}\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<IncludeRules context=\"Substitution##JavaScript\" />\n\t\t</context>\n\n\t\t<!-- Do not highlight tags in some special contexts -->\n\t\t<context name=\"FindDeclarationsWithNoTags\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<WordDetect context=\"InterfaceDeclaration\" attribute=\"Reserved\" String=\"interface\" />\n\t\t\t<WordDetect context=\"ClassDeclaration\" attribute=\"Reserved\" String=\"class\" />\n\t\t\t<WordDetect context=\"VarDeclaration\" attribute=\"Reserved\" String=\"let\" />\n\t\t\t<WordDetect context=\"VarDeclaration\" attribute=\"Keyword\" String=\"var\" />\n\t\t\t<WordDetect context=\"VarDeclaration\" attribute=\"Keyword\" String=\"const\" />\n\t\t</context>\n\t\t<!-- Do not highlight tags after \":\" in variable declarations -->\n\t\t<context name=\"VarDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<DetectChar context=\"#pop!NoTag\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"&identifier;(?=\\s*([\\?!]\\s*)?:)\" />\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Symbol\" String=\"?!\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t</context>\n\t\t<context name=\"NoTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"&lt;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"[\\[\\(]\\s*(?=&lt;)\" />\n\t\t\t<RegExpr context=\"#pop!Object\" attribute=\"Symbol\" String=\"\\{\\s*&lt;\\s*/(?![\\*/])\" beginRegion=\"Brace\" />\n\t\t\t<RegExpr context=\"#pop!Object\" attribute=\"Symbol\" String=\"\\{\\s*&lt;\" beginRegion=\"Brace\" />\n\t\t</context>\n\t\t<!-- Do not highlight tags in interface declarations -->\n\t\t<context name=\"InterfaceDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!InterfaceContentDeclaration\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"}\" lookAhead=\"true\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"?\" />\n\t\t\t<IncludeRules context=\"Normal##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"InterfaceContentDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"?\" />\n\t\t\t<IncludeRules context=\"Object##JavaScript\" />\n\t\t</context>\n\t\t<!-- Do not highlight tags in class declarations -->\n\t\t<context name=\"ClassDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!ClassDeclarationContent\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"}\" lookAhead=\"true\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"?\" />\n\t\t\t<IncludeRules context=\"Normal##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"ClassDeclarationContent\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"NoTag\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<IncludeRules context=\"Object\" />\n\t\t</context>\n\n\t\t<!-- ReactJS -->\n\n\t\t<!-- Tags highlighting -->\n\t\t<context name=\"React\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Tag in new line -->\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Normal Text\" String=\"&tag;\" firstNonSpace=\"true\" lookAhead=\"true\" />\n\t\t\t<!-- Highlight tags only after some keywords -->\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"ControlFlow\" String=\"\\b(return|await)\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Module\" String=\"\\b(default)\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Reserved\" String=\"\\b(yield)\\s*(?=&tag;|/\\*)\" />\n\n\t\t\t<!-- Characters before a valid tag -->\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Special Operators\" String=\"\\=&gt;\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Symbol\" String=\"([,\\=&gt;:\\*\\?]|&amp;&amp;|\\|\\|)\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Normal Text\" String=\"[\\(\\[]\\s*(?=&tag;|/\\*)\" />\n\t\t\t<!-- The \"Object-BeforeTag\" context looks for a valid Tag and then sends the \"Object\" context -->\n\t\t\t<DetectChar context=\"Object-BeforeTag\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Symbol\" String=\"&lt;\\s*&gt;\\s*(?=&tag;|/\\*)\" />\n\n\t\t\t<!-- Tag after a comment on a new line -->\n\t\t\t<Detect2Chars context=\"ValidTag\" attribute=\"Comment\" char=\"/\" char1=\"*\" firstNonSpace=\"true\" lookAhead=\"true\" />\n\n\t\t\t<!-- Overwrite JavaScript rules to highlight tags within some contexts -->\n\t\t\t<IncludeRules context=\"FindDeclarationsWithNoTags\" />\n\t\t\t<IncludeRules context=\"OverwriteJavaScript\" />\n\t\t</context>\n\n\t\t<!-- Detect tags before starting a context -->\n\t\t<context name=\"Object-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Object\">\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\t\t<context name=\"Substitution-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Substitution\">\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\t\t<context name=\"EvaluatedCode-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!EvaluatedCode\">\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\n\t\t<!-- TAGS:\n\t\t     NOTE & TODO: The following code is common for 'javascript-react.xml' and 'typescript-react.xml'\n\t\t     and is replicated in both files. Look for some way to avoid having repeated code, for example,\n\t\t     with a common XML file or with a generator script. The only drawback is that the\n\t\t     \"EvaluatedCode\" context includes \"Normal\". -->\n\n\t\t<!-- Highlight nested tags with comments in between.\n\t\t     NOTE: The highlighting of Tags after a multiline comment does not work with: lineEndContext=\"#pop\" -->\n\t\t<context name=\"ValidTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\s+(?=&lt;|/\\*)\" />\n\t\t\t<IncludeRules context=\"FindTags\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t</context>\n\n\t\t<!-- Start tag -->\n\t\t<context name=\"FindTags\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Empty tag (element) -->\n\t\t\t<RegExpr context=\"ElementTagContent\" attribute=\"Element Tag\" String=\"&lt;\\s*&gt;\" beginRegion=\"Element\" />\n\t\t\t<!-- Detect non-ASCII character in the tag name (component). This prevents highlighting as Element,\n\t\t\t     tag names that don't start with a non-ASCII character. -->\n\t\t\t<RegExpr context=\"ComponentTagNonASCII\" attribute=\"Component Tag\" String=\"&lt;\\s*(?=([a-z][a-z\\d]*:)?([a-z][a-z\\d]*)?[^[:ascii:]])\" beginRegion=\"ComponentElement\" /> <!-- &simpleName; -->\n\t\t\t<!-- Element & component tags -->\n\t\t\t<RegExpr context=\"ElementTag\" attribute=\"Element Tag\" String=\"&simpleTag;(?=[^\\w\\$\\-\\.:]|$|[\\-\\.]+([^\\w\\$\\-\\.]|$)|:([^a-zA-Z_\\$]|$))\" beginRegion=\"Element\" />\n\t\t\t<RegExpr context=\"ComponentTagFindType\" attribute=\"Component Tag\" String=\"&tag;\" beginRegion=\"ComponentElement\" />\n\t\t</context>\n\t\t<context name=\"FindEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"EntityRef\" String=\"&entref;\" />\n\t\t</context>\n\n\t\t<!-- Highlight tag name with non-ASCII characters -->\n\t\t<context name=\"ComponentTagNonASCII\" attribute=\"Normal Text\" lineEndContext=\"#pop!ComponentTag\" fallthrough=\"true\" fallthroughContext=\"#pop!ComponentTag\">\n\t\t\t<RegExpr context=\"#pop!ComponentTagFindType\" attribute=\"Component Tag\" String=\"&name;\" />\n\t\t</context>\n\t\t<!-- Type after the tag name. Ex: <C<number> /> -->\n\t\t<context name=\"ComponentTagFindType\" attribute=\"Normal Text\" lineEndContext=\"#pop!ComponentTag\" fallthrough=\"true\" fallthroughContext=\"#pop!ComponentTag\">\n\t\t\t<DetectChar context=\"#pop!TypeInsideTag\" attribute=\"Symbol\" char=\"&lt;\" />\n\t\t</context>\n\n\t\t<!-- Type assertion after the tag name -->\n\t\t<context name=\"TypeInsideTag\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!ComponentTag\" attribute=\"Symbol\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"DefaultTypeInsideTag\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"TypeInsideTag-AngleBracket\" attribute=\"Symbol\" char=\"&lt;\" />\n\t\t\t<DetectChar context=\"TypeInsideTag-CurlyBracket\" attribute=\"Symbol\" char=\"{\" />\n\t\t\t<DetectChar context=\"TypeInsideTag-SquareBracket\" attribute=\"Symbol\" char=\"[\" />\n\t\t\t<DetectChar context=\"TypeInsideTag-RoundBracket\" attribute=\"Symbol\" char=\"(\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-AngleBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-CurlyBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-SquareBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"]\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-RoundBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\")\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\n\t\t<!-- Inside the tag -->\n\t\t<context name=\"ElementTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Element Tag\" char=\"/\" char1=\"&gt;\" endRegion=\"Element\" />\n\t\t\t<DetectChar context=\"#pop!ElementTagContent\" attribute=\"Element Tag\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTag\" />\n\t\t</context>\n\t\t<context name=\"ComponentTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Component Tag\" char=\"/\" char1=\"&gt;\" endRegion=\"ComponentElement\" />\n\t\t\t<DetectChar context=\"#pop!ComponentTagContent\" attribute=\"Component Tag\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTag\" />\n\t\t</context>\n\t\t<context name=\"DefaultTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"Attribute\" attribute=\"Attribute\" String=\"&nameWithBound;\" />\n\t\t\t<IncludeRules context=\"FindEvaluatedCode\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S+&name;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<!-- Tag content: <Tag> content </Tag> -->\n\t\t<context name=\"ElementTagContent\" attribute=\"Tag Content Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Element Tag\" String=\"&lt;/\\s*&gt;\" endRegion=\"Element\" />\n\t\t\t<RegExpr context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/\\s*&simpleName;\" />\n\t\t\t<RegExpr context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/\\s*(?=[A-Z_\\$])\" /> <!-- Component tag (error) -->\n\t\t\t<IncludeRules context=\"DefaultTagContent\" />\n\t\t</context>\n\t\t<context name=\"ComponentTagContent\" attribute=\"Tag Content Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Component Tag\" String=\"&lt;/\\s*&gt;\" endRegion=\"ComponentElement\" />\n\t\t\t<RegExpr context=\"ComponentTagEnd\" attribute=\"Component Tag\" String=\"&lt;/\\s*&name;\" />\n\t\t\t<IncludeRules context=\"DefaultTagContent\" />\n\t\t</context>\n\t\t<context name=\"DefaultTagContent\" attribute=\"Tag Content Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"FindTags\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t\t<IncludeRules context=\"FindEvaluatedCode\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\" char=\"&lt;\" />\n\t\t</context>\n\n\t\t<context name=\"ElementTagEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop#pop\" attribute=\"Element Tag\" char=\"&gt;\" endRegion=\"Element\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\t\t<context name=\"ComponentTagEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop#pop\" attribute=\"Component Tag\" char=\"&gt;\" endRegion=\"ComponentElement\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<!-- Tag attribute -->\n\t\t<context name=\"Attribute\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Error\" String=\"\\=(?=\\s*/?&gt;)\" />\n\t\t\t<DetectChar context=\"#pop!Value\" attribute=\"Symbol\" char=\"=\" />\n\t\t\t<IncludeRules context=\"FindEndTag\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"{\" lookAhead=\"true\" /> <!-- EvaluatedCode -->\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Attribute\" String=\"&nameWithBound;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S+&name;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!ValueDQ\" attribute=\"Value\" char=\"&quot;\" />\n\t\t\t<DetectChar context=\"#pop!ValueSQ\" attribute=\"Value\" char=\"&apos;\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"{\" lookAhead=\"true\" /> <!-- EvaluatedCode -->\n\t\t\t<IncludeRules context=\"FindEndTag\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\t\t<context name=\"ValueDQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Value\" char=\"&quot;\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t</context>\n\t\t<context name=\"ValueSQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Value\" char=\"&apos;\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t</context>\n\n\t\t<context name=\"FindEndTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" char=\"/\" char1=\"&gt;\" lookAhead=\"true\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"&gt;\" lookAhead=\"true\" />\n\t\t</context>\n\n\t\t<context name=\"FindEvaluatedCode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Find tags and send to the \"EvaluatedCode\" context -->\n\t\t\t<DetectChar context=\"EvaluatedCode-BeforeTag\" attribute=\"Code Brackets\" char=\"{\" beginRegion=\"Code\" />\n\t\t</context>\n\t\t<context name=\"EvaluatedCode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Code Brackets\" char=\"}\" endRegion=\"Code\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\n\t\t<context name=\"AllComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- TypeScript uses this for comments -->\n\t\t\t<IncludeRules context=\"FindComments##JavaScript\" />\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\"      defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Comment\"          defStyleNum=\"dsComment\" />\n\n\t\t<itemData name=\"Tag Content Text\" defStyleNum=\"dsNormal\" />\n\t\t<itemData name=\"Element Tag\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t<itemData name=\"Component Tag\"    defStyleNum=\"dsFunction\" bold=\"1\" spellChecking=\"false\" />\n\t\t<itemData name=\"Attribute\"        defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n\t\t<itemData name=\"Value\"            defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t<itemData name=\"EntityRef\"        defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Code Brackets\"    defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n\t\t<itemData name=\"Error\"            defStyleNum=\"dsError\" spellChecking=\"false\" />\n\n\t\t<!-- itemDatas in JavaScript XML file -->\n\t\t<itemData name=\"Symbol\"           defStyleNum=\"dsOperator\" />\n\t\t<itemData name=\"ControlFlow\"      defStyleNum=\"dsControlFlow\" spellChecking=\"false\" />\n\t\t<itemData name=\"Keyword\"          defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t<itemData name=\"Reserved\"         defStyleNum=\"dsKeyword\" italic=\"true\" spellChecking=\"false\" />\n\t\t<itemData name=\"Module\"           defStyleNum=\"dsImport\" spellChecking=\"false\" />\n\t\t<itemData name=\"Template\"         defStyleNum=\"dsVerbatimString\" />\n\t\t<itemData name=\"Substitution\"     defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n\t\t<itemData name=\"Special Operators\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<keywords casesensitive=\"1\" />\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t</comments>\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/javascript.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY identifier \"([a-zA-Z_$]|[^[:ascii:]])([\\w$]|[^[:ascii:]])*\">\n]>\n<!-- Author: Anders Lund <anders@alweb.dk> //-->\n<!-- Minor changes: Joseph Wenninger <jowenn@kde.org> //-->\n<!-- Full JavaScript 1.0 support by Whitehawk Stormchaser //-->\n<language name=\"JavaScript\" version=\"12\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.js;*.kwinscript;*.julius\"\n          mimetype=\"text/x-javascript;application/x-javascript;application/javascript;text/javascript\" indenter=\"cstyle\"\n          author=\"Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net)\" license=\"\">\n  <highlighting>\n    <list name=\"controlflow\">\n      <item>await</item>\n      <item>break</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>continue</item>\n      <item>debugger</item>\n      <item>do</item>\n      <item>else</item>\n      <item>finally</item>\n      <item>for</item>\n      <item>if</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>throw</item>\n      <item>try</item>\n      <item>while</item>\n      <item>with</item>\n    </list>\n    <list name=\"keywords\">\n      <item>const</item>\n      <item>delete</item>\n      <item>function</item>\n      <item>in</item>\n      <item>instanceof</item>\n      <item>new</item>\n      <item>of</item>\n      <item>this</item>\n      <item>typeof</item>\n      <item>var</item>\n      <item>void</item>\n    </list>\n    <list name=\"reserved\">\n      <item>async</item>\n      <item>class</item>\n      <item>enum</item>\n      <item>extends</item>\n      <item>super</item>\n\n      <!-- The following keywords are reserved only in strict-mode -->\n      <item>arguments</item>\n      <item>implements</item>\n      <item>interface</item>\n      <item>let</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>static</item>\n      <item>yield</item>\n    </list>\n    <list name=\"module\">\n      <item>import</item>\n      <item>from</item>\n      <item>as</item>\n      <item>default</item>\n      <item>export</item>\n      <item>package</item>\n    </list>\n    <list name=\"primitives\">\n      <item>Infinity</item>\n      <item>NaN</item>\n      <item>false</item>\n      <item>null</item>\n      <item>true</item>\n      <item>undefined</item>\n    </list>\n    <contexts>\n\n      <!-- Shebang: (\"#!\") Detect shebang and fallthrough to Normal -->\n      <!-- Based on the similar clause from prolog.xml.\n        This uses \"lineEmptyContext\" & \"lineEndContext\" to force the highlight only on the first line.\n      -->\n      <context name=\"Shebang\" attribute=\"Normal Text\" lineEndContext=\"Normal\" lineEmptyContext=\"Normal\" fallthrough=\"true\" fallthroughContext=\"Normal\" >\n        <Detect2Chars column=\"0\" char=\"#\" char1=\"!\" context=\"Shebang Line\" attribute=\"Comment\" />\n      </context>\n      <context name=\"Shebang Line\" attribute=\"Comment\" lineEndContext=\"#pop!Normal\">\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces/>\n\n        <Float attribute=\"Float\" context=\"NoRegExp\" />\n        <!-- Invalid Binary, Octal or Hex -->\n        <RegExpr attribute=\"Error\" context=\"NoRegExp\" String=\"\\b0(b[01]*[2-9a-z]|o[0-7]*[89a-z]|x[0-9a-f]*[g-z])\\w*\\b\" insensitive=\"true\" />\n        <HlCHex attribute=\"Hex\" context=\"NoRegExp\" />\n        <RegExpr attribute=\"Octal\" context=\"NoRegExp\" String=\"\\b0[oO][0-7]+\" />\n        <RegExpr attribute=\"Binary\" context=\"NoRegExp\" String=\"\\b0[bB][01]+\" />\n        <Int attribute=\"Decimal\" context=\"NoRegExp\" />\n        <AnyChar context=\"NoRegExp\" String=\"])\" />\n\n        <keyword attribute=\"ControlFlow\" String=\"controlflow\" />\n        <keyword attribute=\"Keyword\" String=\"keywords\" />\n        <keyword attribute=\"Reserved\" String=\"reserved\" />\n        <keyword attribute=\"Keyword\" context=\"NoRegExp\" String=\"primitives\" />\n        <keyword attribute=\"Module\" String=\"module\" />\n\n        <IncludeRules context=\"FindStrings\" />\n\n        <!--DetectIdentifier-->\n        <RegExpr attribute=\"Objects\" context=\"Object Member\" String=\"&identifier;(?=\\s*\\.)\" />\n        <!--DetectIdentifier-->\n        <RegExpr attribute=\"Object Member\" context=\"NoRegExp\" String=\"&identifier;(?=\\s*\\()\" />\n        <DetectChar context=\"Object Member\" char=\".\" />\n        <!--DetectIdentifier-->\n        <!-- Do not start RegExp after non-ASCII characters (see bug #393633) -->\n        <RegExpr context=\"NoRegExp\" String=\"&identifier;\" />\n        <RegExpr context=\"NoRegExp\" String=\"[a-zA-Z_$][\\w$]*\" />\n\n        <IncludeRules context=\"FindComments\" />\n\n        <!-- E4X extension (=xml inside JavaScript), see bug #373713 -->\n        <RegExpr attribute=\"Symbol\" context=\"#stay\" String=\"&lt;(?=/\\*|//)\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"NoRegExp\" char=\"&lt;\" char1=\"/\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"NoRegExp\" char=\"/\" char1=\"&gt;\" />\n        <DetectChar attribute=\"Regular Expression\" context=\"(regex caret first check)\" char=\"/\" />\n\n        <DetectChar attribute=\"Symbol\" context=\"Object\" char=\"{\" beginRegion=\"Brace\" />\n\n        <Detect2Chars context=\"#stay\" attribute=\"Special Operators\" char=\"=\" char1=\"&gt;\" />\n        <AnyChar attribute=\"Symbol\" String=\":!%&amp;+,-/.*&lt;=&gt;?|~^&#59;\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\" name=\"Object Member\">\n        <DetectChar context=\"#stay\" char=\".\" />\n        <!--DetectIdentifier-->\n        <RegExpr attribute=\"Objects\" context=\"#stay\" String=\"&identifier;(?=\\s*\\.)\" />\n        <!--DetectIdentifier-->\n        <RegExpr attribute=\"Object Member\" context=\"#pop!NoRegExp\" String=\"&identifier;\" />\n        <IncludeRules context=\"NoRegExp\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\" name=\"NoRegExp\">\n        <Detect2Chars context=\"#pop\" lookAhead=\"true\" char=\"/\" char1=\"/\" />\n        <Detect2Chars context=\"#pop\" lookAhead=\"true\" char=\"/\" char1=\"*\" />\n        <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"/\" />\n        <DetectSpaces/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Object\">\n        <!-- Mostly required for define: in switch blocks -->\n        <keyword attribute=\"Keyword\" String=\"keywords\" />\n        <RegExpr attribute=\"ControlFlow\" String=\"\\bdefault(?=\\s*:)\" />\n        <!--DetectIdentifier-->\n        <RegExpr attribute=\"JSON\" String=\"&identifier;\\s*(?=:)\" />\n        <DetectChar attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" context=\"#pop\" />\n        <IncludeRules context=\"Normal\" />\n      </context>\n\n      <context name=\"FindStrings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Template\" context=\"Template\" char=\"`\" />\n        <StringDetect attribute=\"Template\" context=\"RawTemplate\" String=\"String.raw`\" />\n\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"String SQ\" char=\"'\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <IncludeRules context=\"Escape\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String SQ\">\n        <IncludeRules context=\"Escape\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n      \n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Escape\">\n        <LineContinue attribute=\"Escape\" context=\"#stay\" />\n        <!-- Hexadecimal, unicode & octal -->\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u\\{[0-9a-fA-F]+\\}|[0-3][0-7]{1,2}|[4-7][0-7]|[1-7])\" />\n        <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"\\\" char1=\"x\" />\n        <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"\\\" char1=\"u\" />\n        <DetectChar attribute=\"Escape\" context=\"Character Escape\" char=\"\\\" />\n      </context>\n      <context attribute=\"Escape\" lineEndContext=\"#pop\" name=\"Character Escape\">\n        <AnyChar attribute=\"Reserved Char. Escape\" context=\"#pop\" String=\"0bfnrtv\" /> <!-- Reserved Char. Escape. Also: \"'/ -->\n        <RegExpr attribute=\"Escape\" context=\"#pop\" String=\".\" /> <!-- Literal Char. Escape -->\n      </context>\n\n      <context attribute=\"Template\" lineEndContext=\"#stay\" name=\"Template\">\n        <IncludeRules context=\"Escape\" />\n        <Detect2Chars attribute=\"Substitution\" context=\"Substitution\" char=\"$\" char1=\"{\" />\n        <DetectChar attribute=\"Template\" context=\"#pop\" char=\"`\" />\n      </context>\n      <context attribute=\"Template\" lineEndContext=\"#stay\" name=\"RawTemplate\">\n        <DetectChar attribute=\"Template\" context=\"#pop\" char=\"`\" />\n      </context>\n      <context name=\"Substitution\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n          <DetectChar attribute=\"Substitution\" char=\"}\" context=\"#pop\"/>\n          <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <context name=\"FindComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Region Marker\" context=\"region_marker\" String=\"//BEGIN\" beginRegion=\"Region1\" />\n        <StringDetect attribute=\"Region Marker\" context=\"region_marker\" String=\"//END\" endRegion=\"Region1\" />\n\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Multi/inline Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multi/inline Comment\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\" />\n      </context>\n\n      <context attribute=\"Regular Expression\" lineEndContext=\"#stay\" name=\"Regular Expression\">\n        <RegExpr attribute=\"Regular Expression\" context=\"#pop#pop\" String=\"/\\w*\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" String=\"\\{[\\d, ]+\\}\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" String=\"\\\\[bB]\" />\n        <RegExpr attribute=\"Pattern Character Class\" String=\"\\\\[nrtvfDdSsWw]\" />\n        <DetectChar attribute=\"Pattern Character Class\" context=\"(charclass caret first check)\" char=\"[\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" String=\"\\\\.\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" String=\"\\$(?=/)\" />\n        <AnyChar attribute=\"Pattern Internal Operator\" String=\"?+*()|\" />\n      </context>\n      <context attribute=\"Pattern Character Class\" lineEndContext=\"#stay\" name=\"Regular Expression Character Class\">\n        <RegExpr String=\"\\\\[\\[\\]]\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" String=\"\\\\.\" />\n        <DetectChar attribute=\"Pattern Character Class\" context=\"#pop#pop\" char=\"]\" />\n      </context>\n      <context attribute=\"Pattern Internal Operator\" lineEndContext=\"#pop\" name=\"(regex caret first check)\" fallthrough=\"true\" fallthroughContext=\"Regular Expression\">\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"Regular Expression\" char=\"^\" />\n      </context>\n      <context attribute=\"Pattern Internal Operator\" lineEndContext=\"#pop\" name=\"(charclass caret first check)\" fallthrough=\"true\" fallthroughContext=\"Regular Expression Character Class\">\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"Regular Expression Character Class\" char=\"^\" />\n      </context>\n\n      <context name=\"region_marker\" attribute=\"Region Marker\" lineEndContext=\"#pop\" >\n        <DetectIdentifier/>\n        <DetectSpaces/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"  spellChecking=\"false\" />\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"ControlFlow\"  defStyleNum=\"dsControlFlow\" spellChecking=\"false\" />\n      <itemData name=\"Reserved\"     defStyleNum=\"dsKeyword\" italic=\"true\" spellChecking=\"false\" />\n      <itemData name=\"Module\"       defStyleNum=\"dsImport\" spellChecking=\"false\" />\n      <itemData name=\"Objects\"      defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n      <itemData name=\"Object Member\" defStyleNum=\"dsAttribute\" spellChecking=\"false\" />\n      <itemData name=\"Special Operators\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Binary\"       defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n      <itemData name=\"Escape\"       defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n      <itemData name=\"Reserved Char. Escape\" defStyleNum=\"dsSpecialChar\" bold=\"1\" spellChecking=\"false\" />\n      <itemData name=\"String\"       defStyleNum=\"dsString\" />\n      <itemData name=\"Template\"     defStyleNum=\"dsVerbatimString\" />\n      <itemData name=\"Substitution\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\" />\n      <itemData name=\"Symbol\"       defStyleNum=\"dsOperator\" spellChecking=\"false\" />\n      <itemData name=\"Regular Expression\" defStyleNum=\"dsSpecialString\" spellChecking=\"false\" />\n      <itemData name=\"Pattern Internal Operator\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n      <itemData name=\"Pattern Character Class\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\" />\n      <itemData name=\"JSON\"         defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"Error\"        defStyleNum=\"dsError\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n\n<!-- kate: space-indent on; indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/jcl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"JCL\" version=\"2\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.JCL;*.jcl\" mimetype=\"\" license=\"MIT\">\n    <!-- \n         JCL, or Job Control Language, is the name for scripting languages used on IBM mainframe operating systems (z/OS, z/VM)\n         to instruct the system on how to run a batch job or start a subsystem.\n    -->\n  <highlighting>\n    <list name=\"jobCard\">\n        <item>JOB</item>\n        <item>CLASS</item>\n        <item>PRTY</item>\n        <item>NOTIFY</item>\n        <item>MSGCLASS</item>\n        <item>MSGLEVEL</item>\n        <item>TYPRUN</item>\n        <item>TIME</item>\n        <item>REGION</item>\n    </list>\n    <list name=\"controlFlow\">\n        <item>IF</item>\n        <item>THEN</item>\n        <item>ELSE</item>\n        <item>ENDIF</item>\n    </list>\n    <list name=\"operator\">\n        <item>AND</item>\n        <item>OR</item>\n        <item>GT</item>\n        <item>LT</item>\n        <item>RC</item>\n        <item>EQ</item>\n    </list>\n    <list name=\"instructions\">\n        <item>COND</item>\n        <item>MEMBER</item>\n        <item>ORDER</item>\n        <item>PARM</item>\n        <item>PGM</item>\n        <item>EXEC</item>\n        <item>PROC</item>\n        <item>RETAIN</item>\n        <item>SYSDA</item>\n        <item>DD</item>\n    </list>\n    <list name=\"builtin\">               \n        <item>ACCODE</item>\n        <item>AMP</item>\n        <item>AVGREC</item>\n        <item>SET</item>\n        <item>BLKSZLIM</item>\n        <item>BLKSIZE</item>\n        <item>BURST</item>\n        <item>CCSID</item>\n        <item>CHARS</item>\n        <item>CHKPT</item>\n        <item>CNTL</item>\n        <item>COPIES</item>\n        <item>DATA</item>\n        <item>DATACLAS</item>\n        <item>DCB</item>\n        <item>DDNAME</item>\n        <item>DEST</item>\n        <item>DISP</item>\n        <item>DLM</item>\n        <item>DSID</item>\n        <item>DSNAME</item>\n        <item>DSN</item>\n        <item>DSNTYPE</item>\n        <item>DSORG</item>\n        <item>DUMMY</item>\n        <item>DYNAM</item>\n        <item>EATTR</item>\n        <item>EXPDT</item>\n        <item>FCB</item>\n        <item>FILEDATA</item>\n        <item>FLASH</item>\n        <item>FREE</item>\n        <item>FREEVOL</item>\n        <item>GDGORDER</item>\n        <item>HOLD</item>\n        <item>KEYENCD1</item>\n        <item>KEYENCD2</item>\n        <item>KEYLABL1</item>\n        <item>KEYLABL2</item>\n        <item>KEYLEN</item>\n        <item>KEYOFF</item>\n        <item>LABEL</item>\n        <item>LGSTREAM</item>\n        <item>LIKE</item>\n        <item>LRECL</item>\n        <item>MAXGENS</item>\n        <item>MGMTCLAS</item>\n        <item>MODIFY</item>\n        <item>OUTLIM</item>\n        <item>OUTPUT</item>\n        <item>PATH</item>\n        <item>PATHDISP</item>\n        <item>PATHMODE</item>\n        <item>PATHOPTS</item>\n        <item>PROTECT</item>\n        <item>RECFM</item>\n        <item>RECORG</item>\n        <item>REFDD</item>\n        <item>RETPD</item>\n        <item>RLS</item>\n        <item>RLSE</item>\n        <item>SECMODEL</item>\n        <item>SEGMENT</item>\n        <item>SPACE</item>\n        <item>SPIN</item>\n        <item>STORCLAS</item>\n        <item>SUBSYS</item>\n        <item>SYMBOLS</item>\n        <item>SYMLIST</item>\n        <item>SYSOUT</item>\n        <item>TERM</item>\n        <item>UCS</item>\n        <item>UNIT</item>\n        <item>VOLUME</item>\n        <item>JCLLIB</item>\n        <item>STEPLIB</item>\n        <item>SYSEXEC</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Instructions\" context=\"#stay\" String=\"instructions\" />\n        <keyword attribute=\"Operators\"    context=\"#stay\" String=\"operator\" />\n        <keyword attribute=\"Job Card\"     context=\"#stay\" String=\"jobCard\" />\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlFlow\" />\n        <keyword attribute=\"Built In\"     context=\"#stay\" String=\"builtin\" />\n        <RegExpr attribute=\"InLine\"       context=\"#stay\" insensitive=\"true\" String=\"(?!\\/\\/).*\"  firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Step\"         context=\"#stay\" insensitive=\"true\" String=\".+?(?=EXEC)\" />\n        <RegExpr attribute=\"JCLopts\"      context=\"#stay\" insensitive=\"true\" String=\"((?!\\/\\/\\*).*)(\\/\\/).*?(?=\\s)\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Variable\"     context=\"#stay\" insensitive=\"true\" String=\"&amp;+[A-Z0-9]*\"/>\n        <RegExpr attribute=\"Dataset\"      context=\"#stay\" insensitive=\"true\" String=\"(?&lt;=DSN\\=|DSNAME\\=)([A-Z0-9.]*)\"/>\n        <RegExpr attribute=\"Comment\"      context=\"#pop\"  insensitive=\"true\" String=\"\\/\\/\\*.*\" firstNonSpace=\"true\"/>\n        <AnyChar attribute=\"Symbol\"       context=\"#stay\" String=\"|&amp;&lt;=&gt;\"/>\n        <DetectChar attribute=\"String\"    context=\"String\" char=\"&apos;\"/>\n        <DetectChar attribute=\"String\"    context=\"String\" char=\"&quot;\"/> \n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&apos;\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Instructions\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Operators\"    defStyleNum=\"dsControlFlow\" />\n      <itemData name=\"Job Card\"     defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Control Flow\" defStyleNum=\"dsControlFlow\"/>\n      <itemData name=\"Built In\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"JCLopts\"      defStyleNum=\"dsAttribute\"/>\n      <itemData name=\"Step\"         defStyleNum=\"dsInformation\" />\n      <itemData name=\"InLine\"       defStyleNum=\"dsFunction\" />\n      <itemData name=\"Variable\"     defStyleNum=\"dsControlFlow\"/>\n      <itemData name=\"Dataset\"      defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsOperator\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//*\"/>\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/jira.xml",
    "content": "<?xml version = '1.0' encoding = 'UTF-8'?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n\n  <!ENTITY citation \"(\\s|^)\\?\\?[^\\s]{1}[^?]+\\?\\?(?=\\s|\\.|,|;|:|\\-|$)\">\n  <!ENTITY deleted \"(\\s|^)\\-[^\\s]{1}[^\\-]+\\-(?=\\s|\\.|,|;|:|\\?|$)\">\n  <!ENTITY emphasis \"(\\s|^)_[^\\s]{1}[^_]+_(?=\\s|\\.|,|;|:|\\-|\\?|$)\">\n  <!ENTITY inserted \"(\\s|^)\\+[^\\s]{1}[^\\+]+\\+(?=\\s|\\.|,|;|:|\\-|\\?|$)\">\n  <!ENTITY monospaced \"(\\s|^)\\{\\{[^\\s]{1}[^}]+\\}\\}(?=\\s|\\.|,|;|:|\\-|$)\">\n  <!ENTITY strong \"(\\s|^)\\*[^\\s]{1}[^\\*]+\\*(?=\\s|\\.|,|;|:|\\-|\\?|$)\">\n  <!ENTITY subscript \"(\\s|^)~[^\\s]{1}[^~]+~(?=\\s|\\.|,|;|:|\\-|\\?|$)\">\n  <!ENTITY superscript \"(\\s|^)\\^[^\\s]{1}[^\\^]+\\^(?=\\s|\\.|,|;|:|\\-|\\?|$)\">\n\n  <!ENTITY attachment                       \"(\\s|^)\\[\\^[^]\\s]{1}[^]]+\\]\">\n  <!ENTITY bracketAnchor                    \"(\\s|^)\\[#[^]\\s]{1}[^]]+\\]\">\n  <!ENTITY taggedLink                       \"(\\s|^)\\[[^]\\s|]{1}[^]|]+\\]\">\n  <!ENTITY taggedLinkWithDisplayText        \"(\\s|^)\\[[^]\\s|]{1}[^]|]+\\|[^]\\s|]{1}[^]|]+\\]\">\n  <!ENTITY userTag                          \"(\\s|^)\\[~[^]\\s]{1}[^]]+\\]\">\n\n  <!ENTITY embeddedItem                     \"(\\s|^)![^!\\s]{1}[^!]+!\">\n  <!ENTITY embeddedItemAttributeAndValue    \"(\\s|^)\\w+=\\w+\">\n\n  <!ENTITY panel                    \"(\\s|^)\\{panel[^\\}]*\\}\">\n  <!ENTITY panelAttributeAndValue   \"(\\s|^)\\w+=[^\\}\\|]+\">\n\n  <!ENTITY code                     \"(\\s|^)\\{code[^\\}]*\\}\">\n  <!ENTITY codeAttribute            \"(\\s|^)[^\\}\\|]+\">\n  <!ENTITY codeAttributeAndValue    \"(\\s|^)\\w+=[^\\}\\|]+\">\n\n  <!ENTITY url \"(http:|https:|ftp:|mailto:)[^]|) ]*(?=$|[]|\\s|\\)])\">\n]>\n<language name=\"Jira\" section=\"Markup\" version=\"7\" kateversion=\"5.53\" extensions=\"*.jira\" mimetype=\"\" license=\"FDL\" >\n  <highlighting>\n\n    <!--\n    Documentation about the Jira syntax: https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=all\n    -->\n\n    <contexts>\n\n      <!-- Main Context -->\n      <context name=\"Start\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"FindIcons\" />\n        <IncludeRules context=\"FindTables\" />\n        <IncludeRules context=\"FindBlockQuote\" />\n        <IncludeRules context=\"FindColor\" />\n        <IncludeRules context=\"FindHeader\" />\n        <IncludeRules context=\"FindQuote\" />\n        <IncludeRules context=\"FindNoFormat\" />\n        <IncludeRules context=\"FindPanels\" />\n        <IncludeRules context=\"FindCode\" />\n        <IncludeRules context=\"FindTextBreaks\" />\n        <IncludeRules context=\"FindEmbeddedItems\" />\n        <IncludeRules context=\"FindLinks\" />\n        <IncludeRules context=\"FindListItem\" />\n        <IncludeRules context=\"FindTextEffects\" />\n        <IncludeRules context=\"FindEscapeSequences\" />\n        <IncludeRules context=\"FindLineBreaks\" />\n      </context>\n\n\n      <!-- Contexts -->\n\n      <!-- Headings -->\n      <context name=\"Header\" attribute=\"Header\" lineEndContext=\"#pop\" />\n\n      <!-- Links -->\n      <context name=\"BracketAnchor\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <Detect2Chars char=\"[\" char1=\"#\" attribute=\"Special Character\" context=\"BracketAnchorContent\" />\n      </context>\n      <context name=\"BracketAnchorContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\"]\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"AttachmentLink\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <Detect2Chars char=\"[\" char1=\"^\" attribute=\"Special Character\" context=\"AttachmentLinkContent\" />\n      </context>\n      <context name=\"AttachmentLinkContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\"]\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"EmbeddedItem\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"!\" attribute=\"Special Character\" context=\"EmbeddedItemContent\" />\n      </context>\n      <context name=\"EmbeddedItemContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"#stay\" />\n        <DetectChar char=\"^\" attribute=\"Special Character\" context=\"#stay\" />\n        <DetectChar char=\"|\" attribute=\"Special Character\" context=\"EmbeddedItemAttributes\" />\n        <DetectChar char=\"!\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n      <context name=\"EmbeddedItemAttributes\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&embeddedItemAttributeAndValue;\" context=\"EmbeddedItemAttributeAndValue\" lookAhead=\"true\" />\n        <RegExpr String=\"\\w+\" attribute=\"AttributeKeyword\" context=\"#stay\" />\n        <DetectChar char=\"!\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n      </context>\n      <context name=\"EmbeddedItemAttributeAndValue\" attribute=\"AttributeKeyword\" lineEndContext=\"#stay\">\n        <DetectChar char=\"=\" attribute=\"AttributeKeyword\" context=\"EmbeddedItemAttributeValue\" />\n        <DetectChar char=\"!\" attribute=\"Special Character\" context=\"#pop#pop#pop#pop\" />\n      </context>\n      <context name=\"EmbeddedItemAttributeValue\" attribute=\"AttributeValue\" lineEndContext=\"#stay\">\n        <DetectChar char=\",\" attribute=\"Normal\" context=\"#pop#pop\" />\n        <DetectChar char=\"!\" attribute=\"Special Character\" context=\"#pop#pop#pop#pop#pop\" />\n      </context>\n\n      <context name=\"Panel\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <StringDetect String=\"{panel\" attribute=\"Special Character\" context=\"PanelStartTagContent\" />\n      </context>\n      <context name=\"PanelStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"PanelAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"PanelContent\" />\n      </context>\n      <context name=\"PanelContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"FindTextEffects\" />\n        <StringDetect String=\"{panel}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n      </context>\n      <context name=\"PanelAttributes\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&panelAttributeAndValue;\" context=\"PanelAttributeAndValue\" lookAhead=\"true\" />\n        <DetectChar char=\"}\" context=\"#pop\" lookAhead=\"true\" />\n      </context>\n      <context name=\"PanelAttributeAndValue\" attribute=\"AttributeKeyword\" lineEndContext=\"#stay\">\n        <DetectChar char=\"=\" attribute=\"AttributeKeyword\" context=\"PanelAttributeValue\" />\n        <DetectChar char=\"}\" context=\"#pop#pop\" lookAhead=\"true\" />\n      </context>\n      <context name=\"PanelAttributeValue\" attribute=\"AttributeValue\" lineEndContext=\"#stay\">\n        <DetectChar char=\"|\" attribute=\"Special Character\" context=\"#pop#pop\" />\n        <DetectChar char=\"}\" context=\"#pop#pop#pop\" lookAhead=\"true\" />\n      </context>\n\n      <!-- See https://confluence.atlassian.com/display/DOC/Code+Block+Macro for keywords -->\n      <context name=\"CodeContext\" lineEndContext=\"#stay\" attribute=\"Normal\">\n          <!-- Note: Commented out lines are for languages that Jira supports but KTextEditor does not yet. -->\n<!--         <RegExpr String=\"\\{code:(?= *actionscript3 *(\\||\\}))\" attribute=\"Special Character\" context=\"JavaCodeStartTagContent\" /> -->\n        <RegExpr String=\"\\{code:(?= *bash *(\\||\\}))\" attribute=\"Special Character\" context=\"BashCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *csharp *(\\||\\}))\" attribute=\"Special Character\" context=\"CSharpCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *coldfusion *(\\||\\}))\" attribute=\"Special Character\" context=\"ColdFusionCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *cpp *(\\||\\}))\" attribute=\"Special Character\" context=\"CppCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *css *(\\||\\}))\" attribute=\"Special Character\" context=\"CssCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *delphi *(\\||\\}))\" attribute=\"Special Character\" context=\"PascalCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *diff *(\\||\\}))\" attribute=\"Special Character\" context=\"DiffCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *erlang *(\\||\\}))\" attribute=\"Special Character\" context=\"ErlangCodeStartTagContent\" />\n<!--         <RegExpr String=\"\\{code:(?= *groovy *(\\||\\}))\" attribute=\"Special Character\" context=\"JavaCodeStartTagContent\" /> -->\n        <RegExpr String=\"\\{code:(?= *html *(\\||\\}))\" attribute=\"Special Character\" context=\"HtmlCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *java *(\\||\\}))\" attribute=\"Special Character\" context=\"JavaCodeStartTagContent\" />\n<!--         <RegExpr String=\"\\{code:(?= *javafx *(\\||\\}))\" attribute=\"Special Character\" context=\"JavaCodeStartTagContent\" /> -->\n        <RegExpr String=\"\\{code:(?= *javascript *(\\||\\}))\" attribute=\"Special Character\" context=\"JavaScriptCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *none *(\\||\\}))\" attribute=\"Special Character\" context=\"NoneCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *perl *(\\||\\}))\" attribute=\"Special Character\" context=\"PerlCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *php *(\\||\\}))\" attribute=\"Special Character\" context=\"PhpCodeStartTagContent\" />\n<!--         <RegExpr String=\"\\{code:(?= *powershell *(\\||\\}))\" attribute=\"Special Character\" context=\"JavaCodeStartTagContent\" /> -->\n        <RegExpr String=\"\\{code:(?= *python *(\\||\\}))\" attribute=\"Special Character\" context=\"PythonCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *ruby *(\\||\\}))\" attribute=\"Special Character\" context=\"RubyCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *scala *(\\||\\}))\" attribute=\"Special Character\" context=\"ScalaCodeStartTagContent\" />\n        <RegExpr String=\"\\{code:(?= *sql *(\\||\\}))\" attribute=\"Special Character\" context=\"SqlCodeStartTagContent\" />\n<!--         <RegExpr String=\"\\{code:(?= *vb *(\\||\\}))\" attribute=\"Special Character\" context=\"JavaCodeStartTagContent\" /> -->\n        <RegExpr String=\"\\{code:(?= *xml *(\\||\\}))\" attribute=\"Special Character\" context=\"XmlCodeStartTagContent\" />\n        <StringDetect String=\"{code\" attribute=\"Special Character\" context=\"JavaCodeStartTagContent\" />\n      </context>\n\n      <context name=\"CodeAttributes\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&codeAttributeAndValue;\" context=\"CodeAttributeAndValue\" lookAhead=\"true\" />\n        <RegExpr String=\"&codeAttribute;\" attribute=\"AttributeKeyword\" />\n        <DetectChar char=\"}\" context=\"#pop\" lookAhead=\"true\" />\n      </context>\n      <context name=\"CodeAttributeAndValue\" attribute=\"AttributeKeyword\" lineEndContext=\"#stay\">\n        <DetectChar char=\"=\" attribute=\"AttributeKeyword\" context=\"CodeAttributeValue\" />\n        <DetectChar char=\"}\" context=\"#pop#pop\" lookAhead=\"true\" />\n      </context>\n      <context name=\"CodeAttributeValue\" attribute=\"AttributeValue\" lineEndContext=\"#stay\">\n        <DetectChar char=\"|\" attribute=\"Special Character\" context=\"#pop#pop\" />\n        <DetectChar char=\"}\" context=\"#pop#pop#pop\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"BashCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"BashCodeContent\" />\n      </context>\n      <context name=\"BashCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Start##Bash\" />\n      </context>\n\n      <context name=\"CSharpCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"CSharpCodeContent\" />\n      </context>\n      <context name=\"CSharpCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##C#\" />\n      </context>\n\n      <context name=\"ColdFusionCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"ColdFusionCodeContent\" />\n      </context>\n      <context name=\"ColdFusionCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal Text##ColdFusion\" />\n      </context>\n\n      <context name=\"CppCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"CppCodeContent\" />\n      </context>\n      <context name=\"CppCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##C++\" />\n      </context>\n\n      <context name=\"CssCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"CssCodeContent\" />\n      </context>\n      <context name=\"CssCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Base##CSS\" />\n      </context>\n\n      <context name=\"DiffCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"DiffCodeContent\" />\n      </context>\n      <context name=\"DiffCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##Diff\" />\n      </context>\n\n      <context name=\"ErlangCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"ErlangCodeContent\" />\n      </context>\n      <context name=\"ErlangCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal Text##Erlang\" />\n      </context>\n\n      <context name=\"HtmlCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"HtmlCodeContent\" />\n      </context>\n      <context name=\"HtmlCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Start##HTML\" />\n      </context>\n\n      <context name=\"JavaCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"JavaCodeContent\" />\n      </context>\n      <context name=\"JavaCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##Java\" />\n      </context>\n\n      <context name=\"JavaScriptCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"JavaScriptCodeContent\" />\n      </context>\n      <context name=\"JavaScriptCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##JavaScript\" />\n      </context>\n\n      <context name=\"NoneCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"NoneCodeContent\" />\n      </context>\n      <context name=\"NoneCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n      </context>\n\n      <context name=\"PascalCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"PascalCodeContent\" />\n      </context>\n      <context name=\"PascalCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##Pascal\" />\n      </context>\n\n      <context name=\"PerlCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"PerlCodeContent\" />\n      </context>\n      <context name=\"PerlCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"normal##Perl\" />\n      </context>\n\n      <context name=\"PhpCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"PhpCodeContent\" />\n      </context>\n      <context name=\"PhpCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"start##PHP/PHP\" />\n      </context>\n\n      <context name=\"PythonCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"PythonCodeContent\" />\n      </context>\n      <context name=\"PythonCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##Python\" />\n      </context>\n\n      <context name=\"RubyCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"RubyCodeContent\" />\n      </context>\n      <context name=\"RubyCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##Ruby\" />\n      </context>\n\n      <context name=\"ScalaCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"ScalaCodeContent\" />\n      </context>\n      <context name=\"ScalaCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##Scala\" />\n      </context>\n\n      <context name=\"SqlCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"SqlCodeContent\" />\n      </context>\n      <context name=\"SqlCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Normal##SQL\" />\n      </context>\n\n      <context name=\"XmlCodeStartTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\":\" attribute=\"Special Character\" context=\"CodeAttributes\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"XmlCodeContent\" />\n      </context>\n      <context name=\"XmlCodeContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{code}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n        <IncludeRules context=\"Start##XML\" />\n      </context>\n\n\n      <context name=\"UserTag\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <Detect2Chars char=\"[\" char1=\"~\" attribute=\"Special Character\" context=\"UserTagContent\" />\n      </context>\n      <context name=\"UserTagContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\"]\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"TaggedLink\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"[\" attribute=\"Special Character\" context=\"TaggedLinkContent\" />\n      </context>\n      <context name=\"TaggedLinkContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\"]\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"TaggedLinkWithDisplayText\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"[\" attribute=\"Special Character\" context=\"TaggedLinkDisplayText\" />\n      </context>\n      <context name=\"TaggedLinkDisplayText\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"|\" attribute=\"Special Character\" context=\"TaggedLinkUrl\" />\n      </context>\n      <context name=\"TaggedLinkUrl\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\"]\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n      </context>\n\n      <context name=\"BraceAnchor\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <StringDetect String=\"{anchor:\" attribute=\"Special Character\" context=\"BraceAnchorContent\" />\n      </context>\n      <context name=\"BraceAnchorContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n\n      <!-- Text Effects -->\n      <context name=\"BlockQuote\" lineEndContext=\"#pop\" attribute=\"Normal\"/>\n      <context name=\"Bold\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"*\" attribute=\"Special Character\" context=\"BoldContent\" />\n      </context>\n      <context name=\"BoldContent\" attribute=\"Bold\" lineEndContext=\"#stay\">\n        <DetectChar char=\"*\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n      <context name=\"Citation\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <Detect2Chars char=\"?\" char1=\"?\" attribute=\"Special Character\" context=\"CitationContent\" />\n      </context>\n      <context name=\"CitationContent\" attribute=\"Italic\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"?\" char1=\"?\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"Color\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{color:\" context=\"ColorTagColor\" attribute=\"Special Character\" />\n      </context>\n      <context name=\"ColorTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <!-- Black and White have been skipped on purpose. -->\n        <StringDetect String=\"silver}\"  context=\"ColorSilverTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"gray}\"  context=\"ColorGrayTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"red}\"  context=\"ColorRedTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"maroon}\"  context=\"ColorMaroonTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"yellow}\"  context=\"ColorYellowTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"olive}\"  context=\"ColorOliveTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"lime}\"  context=\"ColorLimeTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"green}\"  context=\"ColorGreenTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"aqua}\"  context=\"ColorAquaTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"teal}\"  context=\"ColorTealTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"blue}\"  context=\"ColorBlueTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"navy}\"  context=\"ColorNavyTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"fuchsia}\"  context=\"ColorFuchsiaTagColor\" lookAhead=\"true\" />\n        <StringDetect String=\"purple}\"  context=\"ColorPurpleTagColor\" lookAhead=\"true\" />\n        <DetectChar char=\"}\"  attribute=\"Special Character\" context=\"UnhighlightedColorContent\" />\n      </context>\n      <context name=\"UnhighlightedColorContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{color}\" attribute=\"Special Character\" context=\"#pop#pop#pop\" />\n      </context>\n      <context name=\"HighlightedColorContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{color}\" attribute=\"Special Character\" context=\"#pop#pop#pop#pop\" />\n      </context>\n      <context name=\"ColorSilverTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"silver\" attribute=\"Silver\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"SilverContent\" />\n      </context>\n      <context name=\"SilverContent\" attribute=\"Silver\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorGrayTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"gray\" attribute=\"Gray\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"GrayContent\" />\n      </context>\n      <context name=\"GrayContent\" attribute=\"Gray\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorRedTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"red\" attribute=\"Red\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"RedContent\" />\n      </context>\n      <context name=\"RedContent\" attribute=\"Red\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorMaroonTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"maroon\" attribute=\"Maroon\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"MaroonContent\" />\n      </context>\n      <context name=\"MaroonContent\" attribute=\"Maroon\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorYellowTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"yellow\" attribute=\"Yellow\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"YellowContent\" />\n      </context>\n      <context name=\"YellowContent\" attribute=\"Yellow\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorOliveTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"olive\" attribute=\"Olive\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"OliveContent\" />\n      </context>\n      <context name=\"OliveContent\" attribute=\"Olive\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorLimeTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"lime\" attribute=\"Lime\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"LimeContent\" />\n      </context>\n      <context name=\"LimeContent\" attribute=\"Lime\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorGreenTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"green\" attribute=\"Green\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"GreenContent\" />\n      </context>\n      <context name=\"GreenContent\" attribute=\"Green\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorAquaTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"aqua\" attribute=\"Aqua\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"AquaContent\" />\n      </context>\n      <context name=\"AquaContent\" attribute=\"Aqua\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorTealTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"teal\" attribute=\"Teal\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"TealContent\" />\n      </context>\n      <context name=\"TealContent\" attribute=\"Teal\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorBlueTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"blue\" attribute=\"Blue\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"BlueContent\" />\n      </context>\n      <context name=\"BlueContent\" attribute=\"Blue\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorNavyTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"navy\" attribute=\"Navy\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"NavyContent\" />\n      </context>\n      <context name=\"NavyContent\" attribute=\"Navy\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorFuchsiaTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"fuchsia\" attribute=\"Fuchsia\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"FuchsiaContent\" />\n      </context>\n      <context name=\"FuchsiaContent\" attribute=\"Fuchsia\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n      <context name=\"ColorPurpleTagColor\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"purple\" attribute=\"Purple\" />\n        <DetectChar char=\"}\" attribute=\"Special Character\" context=\"PurpleContent\" />\n      </context>\n      <context name=\"PurpleContent\" attribute=\"Purple\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightedColorContent\" />\n      </context>\n\n      <context name=\"Deleted\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"-\" attribute=\"Special Character\" context=\"DeletedContent\" />\n      </context>\n      <context name=\"DeletedContent\" attribute=\"Stroked Out\" lineEndContext=\"#stay\">\n        <DetectChar char=\"-\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n      <context name=\"Inserted\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"+\" attribute=\"Special Character\" context=\"InsertedContent\" />\n      </context>\n      <context name=\"InsertedContent\" attribute=\"Underlined\" lineEndContext=\"#stay\">\n        <DetectChar char=\"+\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n      <context name=\"Italic\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"_\" attribute=\"Special Character\" context=\"ItalicContent\" />\n      </context>\n      <context name=\"ItalicContent\" attribute=\"Italic\" lineEndContext=\"#stay\">\n        <DetectChar char=\"_\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n      <context name=\"Monospaced\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"}\" char1=\"}\" attribute=\"Special Character\" context=\"#pop\" />\n        <Detect2Chars char=\"{\" char1=\"{\" attribute=\"Special Character\" />\n      </context>\n      <context name=\"Quote\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"{quote}\" context=\"#pop\" attribute=\"Special Character\" />\n      </context>\n      <context name=\"Subscript\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"~\" attribute=\"Special Character\" context=\"SubscriptContent\" />\n      </context>\n      <context name=\"SubscriptContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"~\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n      <context name=\"Superscript\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"^\" attribute=\"Special Character\" context=\"SuperscriptContent\" />\n      </context>\n      <context name=\"SuperscriptContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar char=\"^\" attribute=\"Special Character\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"TableHeaderRow\" attribute=\"Bold\" lineEndContext=\"#pop\">\n        <Detect2Chars char=\"|\" char1=\"|\" attribute=\"Special Character\" context=\"#stay\" />\n      </context>\n      <context name=\"TableRegularRow\" attribute=\"Normal\" lineEndContext=\"#pop\">\n        <DetectChar char=\"|\" attribute=\"Special Character\" context=\"#stay\" />\n      </context>\n\n      <context name=\"NoFormat\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <StringDetect String=\"{noformat}\" attribute=\"Special Character\" context=\"#pop\" />\n      </context>\n\n\n      <!-- Rules to Include -->\n\n      <!-- BlockQuotes -->\n      <context name=\"FindBlockQuote\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"bq\\. \" context=\"BlockQuote\" attribute=\"Special Character\" column=\"0\" />\n      </context>\n\n      <!-- Colors -->\n      <context name=\"FindColor\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"\\{color:[^}]+\\}\" context=\"Color\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Headings -->\n      <context name=\"FindHeader\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"h[1-6]\\. \" context=\"Header\" attribute=\"Special Character\" column=\"0\" />\n      </context>\n\n      <!-- Quotes -->\n      <context name=\"FindQuote\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <StringDetect String=\"{quote}\" context=\"Quote\" attribute=\"Special Character\" />\n      </context>\n\n      <!-- Text Breaks -->\n      <context name=\"FindTextBreaks\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Special Character\" />\n        <StringDetect String=\"----\" attribute=\"Special Character\" />\n        <StringDetect String=\"---\" attribute=\"Special Character\" />\n        <Detect2Chars char=\"-\" char1=\"-\" attribute=\"Special Character\" />\n      </context>\n\n      <!-- Embedded Items -->\n      <context name=\"FindEmbeddedItems\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"&embeddedItem;\" context=\"EmbeddedItem\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Links -->\n      <context name=\"FindLinks\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"&bracketAnchor;\" context=\"BracketAnchor\" lookAhead=\"true\" />\n        <RegExpr String=\"&attachment;\" context=\"AttachmentLink\" lookAhead=\"true\" />\n        <RegExpr String=\"&userTag;\" context=\"UserTag\" lookAhead=\"true\" />\n        <RegExpr String=\"&taggedLink;\" context=\"TaggedLink\" lookAhead=\"true\" />\n        <RegExpr String=\"&taggedLinkWithDisplayText;\" context=\"TaggedLinkWithDisplayText\" lookAhead=\"true\" />\n        <RegExpr String=\"\\{anchor:[^}]+\\}\" context=\"BraceAnchor\" lookAhead=\"true\" />\n        <RegExpr String=\"&url;\" attribute=\"Green\" />\n      </context>\n\n      <!-- Lists -->\n      <context name=\"FindListItem\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"([*#]*[*#]+|-)\" attribute=\"Special Character\" context=\"#stay\" column=\"0\" />\n      </context>\n\n      <!-- Text Effects -->\n      <context name=\"FindTextEffects\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"&citation;\" context=\"Citation\" lookAhead=\"true\" />\n        <RegExpr String=\"&deleted;\" context=\"Deleted\" lookAhead=\"true\" />\n        <RegExpr String=\"&emphasis;\" context=\"Italic\" lookAhead=\"true\" />\n        <RegExpr String=\"&inserted;\" context=\"Inserted\" lookAhead=\"true\" />\n        <RegExpr String=\"&strong;\" context=\"Bold\" lookAhead=\"true\" />\n        <RegExpr String=\"&subscript;\" context=\"Subscript\" lookAhead=\"true\" />\n        <RegExpr String=\"&superscript;\" context=\"Superscript\" lookAhead=\"true\" />\n        <RegExpr String=\"&monospaced;\" context=\"Monospaced\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Tables -->\n      <context name=\"FindTables\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"^\\|\\|\" context=\"TableHeaderRow\" lookAhead=\"true\" />\n        <RegExpr String=\"^\\|\" context=\"TableRegularRow\" lookAhead=\"true\" />\n      </context>\n\n      <!-- No format -->\n      <context name=\"FindNoFormat\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <StringDetect String=\"{noformat}\" context=\"NoFormat\" attribute=\"Special Character\" />\n      </context>\n\n      <!-- Panels -->\n      <context name=\"FindPanels\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"&panel;\" context=\"Panel\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Code -->\n      <context name=\"FindCode\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"&code;\" context=\"CodeContext\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Escape Sequences -->\n      <context name=\"FindEscapeSequences\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"\\\\[^ \\\\]\" attribute=\"EscapeSequence\" />\n      </context>\n\n      <!-- Line Breaks -->\n      <context name=\"FindLineBreaks\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"\\\\$\" attribute=\"Special Character\" />\n      </context>\n\n      <!-- Icons -->\n      <context name=\"FindIcons\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <StringDetect String=\":)\" attribute=\"Special Character\" />\n        <StringDetect String=\":(\" attribute=\"Special Character\" />\n        <StringDetect String=\":P\" attribute=\"Special Character\" />\n        <StringDetect String=\":D\" attribute=\"Special Character\" />\n        <StringDetect String=\";)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(y)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(n)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(i)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(/)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(x)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(!)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(+)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(-)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(?)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(on)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(off)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(*)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(*r)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(*g)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(*b)\" attribute=\"Special Character\" />\n        <StringDetect String=\"(*y)\" attribute=\"Special Character\" />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\" /><!-- Must be first. -->\n\n      <itemData name=\"Bold\" defStyleNum=\"dsNormal\" bold=\"true\" />\n      <itemData name=\"Header\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Italic\" defStyleNum=\"dsNormal\" italic=\"true\" />\n      <itemData name=\"Special Character\" defStyleNum=\"dsDecVal\" bold=\"true\" />\n      <itemData name=\"Stroked Out\" defStyleNum=\"dsNormal\" strikeOut=\"true\" />\n      <itemData name=\"Underlined\" defStyleNum=\"dsNormal\" underline=\"true\" />\n      <itemData name=\"AttributeKeyword\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"AttributeValue\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n      <itemData name=\"EscapeSequence\" defStyleNum=\"dsChar\" spellChecking=\"false\" />\n\n      <!-- Colors -->\n      <itemData name=\"Silver\" defStyleNum=\"dsNormal\" color=\"silver\" />\n      <itemData name=\"Gray\" defStyleNum=\"dsNormal\" color=\"gray\" />\n      <itemData name=\"Red\" defStyleNum=\"dsNormal\" color=\"red\" />\n      <itemData name=\"Maroon\" defStyleNum=\"dsNormal\" color=\"maroon\" />\n      <itemData name=\"Yellow\" defStyleNum=\"dsNormal\" color=\"yellow\" />\n      <itemData name=\"Olive\" defStyleNum=\"dsNormal\" color=\"olive\" />\n      <itemData name=\"Lime\" defStyleNum=\"dsNormal\" color=\"lime\" />\n      <itemData name=\"Green\" defStyleNum=\"dsNormal\" color=\"green\" />\n      <itemData name=\"Aqua\" defStyleNum=\"dsNormal\" color=\"aqua\" />\n      <itemData name=\"Teal\" defStyleNum=\"dsNormal\" color=\"teal\" />\n      <itemData name=\"Blue\" defStyleNum=\"dsNormal\" color=\"blue\" />\n      <itemData name=\"Navy\" defStyleNum=\"dsNormal\" color=\"navy\" />\n      <itemData name=\"Fuchsia\" defStyleNum=\"dsNormal\" color=\"fuchsia\" />\n      <itemData name=\"Purple\" defStyleNum=\"dsNormal\" color=\"purple\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/json.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n ***************************************************************************\n ** Writing a Kate Highlighting XML File\n ** http://kate-editor.org/article/writing_a_kate_highlighting_xml_file\n **\n ** Introducing JSON\n ** http://www.json.org/\n **\n ** The application/json Media Type for JavaScript Object Notation (JSON)\n ** http://tools.ietf.org/html/rfc4627\n ***************************************************************************\n-->\n<language name=\"JSON\" section=\"Markup\" version=\"3\" kateversion=\"2.4\" extensions=\"*.json;.kateproject;.arcconfig;*.gltf\" mimetype=\"application/json\" author=\"Sebastian Pipping (sebastian@pipping.org)\" license=\"GPL\">\n  <highlighting>\n    <list name=\"Constants\">\n      <item>null</item>\n      <item>true</item>\n      <item>false</item>\n    </list>\n\n    <contexts>\n      <context name=\"Normal\" lineEndContext=\"#stay\" attribute=\"Style_Error\">\n        <DetectChar char=\"{\"       context=\"Pair\" beginRegion=\"Region_Object\" attribute=\"Style_Seperator_Pair\" />\n        <DetectChar char=\"[\"       context=\"Array\" beginRegion=\"Region_Array\" attribute=\"Style_Seperator_Array\" />\n\n        <DetectSpaces context=\"#stay\" attribute=\"Style_Normal\" />\n      </context>\n\n      <context name=\"Pair\" lineEndContext=\"#stay\" attribute=\"Style_Error\">\n        <DetectChar char=\"&quot;\"  context=\"String_Key\" attribute=\"Style_String_Key\" />\n        <DetectChar char=\":\"       context=\"Value\" attribute=\"Style_Seperator_Pair\" />\n        <DetectChar char=\"}\"       context=\"#pop\" endRegion=\"Region_Object\" attribute=\"Style_Seperator_Pair\" />\n        <DetectChar char=\",\"       context=\"#stay\" attribute=\"Style_Seperator_Pair\" />\n\n        <DetectSpaces context=\"#stay\" attribute=\"Style_Normal\" />\n      </context>\n\n      <context name=\"String_Key\" lineEndContext=\"#stay\" attribute=\"Style_String_Key\">\n        <DetectChar char=\"&quot;\"  context=\"#pop\" attribute=\"Style_String_Key\" />\n        <RegExpr String=\"\\\\(?:[&quot;\\\\/bfnrt]|u[0-9a-fA-f]{4})\" context=\"#stay\" insensitive=\"false\" minimal=\"false\" attribute=\"Style_String_Key_Char\" />\n      </context>\n\n      <context name=\"Value\" lineEndContext=\"#stay\" attribute=\"Style_Error\" >\n        <DetectChar char=\"&quot;\"  context=\"String_Value\" attribute=\"Style_String_Value\" />\n        <DetectChar char=\"{\"       context=\"Pair\" beginRegion=\"Region_Object\" attribute=\"Style_Seperator_Pair\" />\n        <DetectChar char=\"[\"       context=\"Array\" beginRegion=\"Region_Array\" attribute=\"Style_Seperator_Array\" />\n        <DetectChar char=\"}\"       context=\"#pop\" lookAhead=\"true\" />\n        <DetectChar char=\",\"       context=\"#pop\" lookAhead=\"true\" />\n\n        <DetectSpaces context=\"#stay\" attribute=\"Style_Normal\" />\n\n        <keyword String=\"Constants\" context=\"#stay\" attribute=\"Style_Keyword\" />\n\n        <RegExpr String=\"-?(?:[0-9]|[1-9][0-9]+)\\.[0-9]+(?:[eE][+-]?[0-9]+)?\" context=\"#stay\" insensitive=\"false\" minimal=\"false\" attribute=\"Style_Float\" />\n        <RegExpr String=\"-?(?:[0-9]|[1-9][0-9]+)(?:[eE][+-]?[0-9]+)?\" context=\"#stay\" insensitive=\"false\" minimal=\"false\" attribute=\"Style_Decimal\" />\n      </context>\n\n      <context name=\"String_Value\" lineEndContext=\"#stay\" attribute=\"Style_String_Value\">\n        <DetectChar char=\"&quot;\"  context=\"#pop\" attribute=\"Style_String_Value\" />\n        <RegExpr String=\"\\\\(?:[&quot;\\\\/bfnrt]|u[0-9a-fA-f]{4})\" context=\"#stay\" insensitive=\"false\" minimal=\"false\" attribute=\"Style_String_Value_Char\" />\n      </context>\n\n      <context name=\"Array\" lineEndContext=\"#stay\" attribute=\"Style_Error\">\n        <DetectChar char=\",\"       context=\"#stay\" attribute=\"Style_Seperator_Array\" />\n        <DetectChar char=\"]\"       context=\"#pop\" endRegion=\"Region_Array\" attribute=\"Style_Seperator_Array\" />\n\n        <DetectChar char=\"{\"       context=\"Pair\" beginRegion=\"Region_Object\" attribute=\"Style_Seperator_Pair\" />\n        <DetectChar char=\"[\"       context=\"Array\" beginRegion=\"Region_Array\" attribute=\"Style_Seperator_Array\" />\n        <DetectChar char=\"&quot;\"  context=\"String_Value\" attribute=\"Style_String_Value\" />\n\n        <DetectSpaces context=\"#stay\" attribute=\"Style_Normal\" />\n\n        <keyword String=\"Constants\" context=\"#stay\" attribute=\"Style_Keyword\" />\n\n        <RegExpr String=\"-?(?:[0-9]|[1-9][0-9]+)\\.[0-9]+(?:[eE][+-]?[0-9]+)?\" context=\"#stay\" insensitive=\"false\" minimal=\"false\" attribute=\"Style_Float\" />\n        <RegExpr String=\"-?(?:[0-9]|[1-9][0-9]+)(?:[eE][+-]?[0-9]+)?\" context=\"#stay\" insensitive=\"false\" minimal=\"false\" attribute=\"Style_Decimal\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Style_Normal\"             defStyleNum=\"dsNormal\" />\n\n      <itemData name=\"Style_Seperator_Pair\"     defStyleNum=\"dsFunction\" bold=\"true\" />\n      <itemData name=\"Style_Seperator_Array\"    defStyleNum=\"dsOthers\" bold=\"true\" />\n\n      <itemData name=\"Style_Decimal\"            defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Style_Float\"              defStyleNum=\"dsFloat\" />\n      <itemData name=\"Style_String_Key\"         defStyleNum=\"dsDataType\" />\n      <itemData name=\"Style_String_Value\"       defStyleNum=\"dsString\" />\n      <itemData name=\"Style_String_Key_Char\"    defStyleNum=\"dsChar\" />\n      <itemData name=\"Style_String_Value_Char\"  defStyleNum=\"dsChar\" />\n\n      <itemData name=\"Style_Keyword\"            defStyleNum=\"dsKeyword\" />\n\n      <itemData name=\"Style_Error\"              defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n</language>\n<!--\n// kate: space-indent on; indent-width 2; replace-tabs on;\n-->\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/jsp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language version=\"5\" kateversion=\"5.0\" name=\"JSP\" section=\"Markup\" extensions=\"*.jsp;*.JSP\" mimetype=\"text/html\" casesensitive=\"false\" author=\"Rob Martin (rob@gamepimp.com)\" license=\"LGPL\">\n  <highlighting>\n\n    <list name=\"jsp-reserved-words\">\n      <item>and</item>\n      <item>eq</item>\n      <item>gt</item>\n      <item>true</item>\n      <item>instanceof</item>\n      <item>or</item>\n      <item>ne</item>\n      <item>le</item>\n      <item>false</item>\n      <item>empty</item>\n      <item>not</item>\n      <item>lt</item>\n      <item>ge</item>\n      <item>null</item>\n      <item>div</item>\n      <item>mod</item>\n    </list>\n\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&lt;%@\\s*[a-zA-Z0-9_\\.]*\" attribute=\"Jsp Directive\" context=\"Jsp Standard Directive\"/>\n        <RegExpr String=\"&lt;\\s*jsp:(declaration|expression|scriptlet)\\s*&gt;\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <RegExpr String=\"&lt;\\s*\\/?s*jsp:[a-zA-Z0-9_\\.]*\" attribute=\"Jsp Directive\" context=\"Jsp Xml Directive\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <StringDetect String=\"&lt;!--\" attribute=\"Html Comment\" context=\"Html Comment\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <RegExpr String=\"&lt;\\s*\\/?\\s*\\$?[a-zA-Z0-9_]*:\\$?[a-zA-Z0-9_]*\" attribute=\"Keyword\" context=\"Jsp Custom Tag\"/>\n        <StringDetect String=\"&lt;![CDATA[\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <StringDetect String=\"]]&gt;\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <RegExpr String=\"&lt;script\\b\" attribute=\"Normal Text\" context=\"JS\" beginRegion=\"script\" />\n        <RegExpr String=\"&lt;style\\b\" attribute=\"Normal Text\" context=\"CSS\" beginRegion=\"style\" />\n        <RegExpr String=\"&lt;\\s*\\/?\\s*[a-zA-Z0-9_]*\" attribute=\"Normal Text\" context=\"Html Attribute\"/>\n      </context>\n\n      <context name=\"CSS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"CSS content\" char=\"&gt;\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"style\" />\n        <IncludeRules context=\"Html Attribute\" />\n      </context>\n\n      <context name=\"CSS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Normal Text\" context=\"#pop#pop\" String=\"&lt;/style>\" endRegion=\"style\" />\n        <IncludeRules context=\"##CSS\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"JS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"JS content\" char=\"&gt;\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"script\" />\n        <IncludeRules context=\"Html Attribute\" />\n      </context>\n\n      <context name=\"JS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Normal Text\" context=\"#pop#pop!Html Attribute\" String=\"&lt;/script\\b\" endRegion=\"script\" />\n        <RegExpr attribute=\"Jsp Comment\" context=\"JS comment close\" String=\"//(?=.*&lt;/script)\" />\n        <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n      </context>\n      <context name=\"JS comment close\" attribute=\"Jsp Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <StringDetect attribute=\"Normal Text\" context=\"#pop#pop#pop\" String=\"&lt;/script\" endRegion=\"script\" />\n      </context>\n\n      <context name=\"Jsp Standard Directive\" attribute=\"Jsp Param Name\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"%\" char1=\"&gt;\" attribute=\"Jsp Directive\" context=\"#pop\"/>\n        <RegExpr String=\"\\s*=\\s*\" attribute=\"Normal Text\" context=\"Jsp Standard Directive Value\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <RegExpr String=\"&lt;\\s*\\/?\\s*\\$?\\w*:\\$?\\w*\" attribute=\"Keyword\" context=\"Jsp Custom Tag\"/>\n      </context>\n\n      <context name=\"Jsp Xml Directive\" attribute=\"Jsp Param Name\" lineEndContext=\"#stay\">\n        <RegExpr String=\"\\s*\\/?\\s*&gt;\" attribute=\"Jsp Directive\" context=\"#pop\"/>\n        <RegExpr String=\"\\s*=\\s*\" attribute=\"Normal Text\" context=\"Jsp Xml Directive Value\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n      </context>\n\n      <context name=\"Jsp Comment\" attribute=\"Jsp Comment\" lineEndContext=\"#stay\">\n        <StringDetect String=\"--%&gt;\" attribute=\"Jsp Comment\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Jsp Custom Tag\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n        <RegExpr String=\"\\/?&gt;\" attribute=\"Keyword\" context=\"#pop\"/>\n        <RegExpr String=\"\\s*=\\s*\" attribute=\"Normal Text\" context=\"Jsp Custom Tag Value\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n      </context>\n\n      <context name=\"Jsp Standard Directive Value\" attribute=\"Jsp Param Value\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <DetectChar char=\"&quot;\" attribute=\"Jsp Param Value\" context=\"Jsp Double Quoted Param Value\"/>\n        <DetectChar char=\"'\" attribute=\"Jsp Param Value\" context=\"Jsp Single Quoted Param Value\"/>\n        <Detect2Chars char=\"%\" char1=\"&gt;\" attribute=\"Jsp Directive\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Jsp Xml Directive Value\" attribute=\"Jsp Param Value\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <DetectChar char=\"&quot;\" attribute=\"Jsp Param Value\" context=\"Jsp Double Quoted Param Value\"/>\n        <DetectChar char=\"'\" attribute=\"Jsp Param Value\" context=\"Jsp Single Quoted Param Value\"/>\n        <RegExpr String=\"\\s*\\/?\\s*&gt;\" attribute=\"Jsp Directive\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Jsp Custom Tag Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <DetectChar char=\"&quot;\" attribute=\"Types\" context=\"Jsp Double Quoted Custom Tag Value\"/>\n        <DetectChar char=\"'\" attribute=\"Types\" context=\"Jsp Single Quoted Custom Tag Value\"/>\n        <RegExpr String=\"\\/?&gt;\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Jsp Double Quoted Param Value\" attribute=\"Jsp Param Value\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" attribute=\"Jsp Param Value\" context=\"#pop#pop\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n      </context>\n\n      <context name=\"Jsp Single Quoted Param Value\" attribute=\"Jsp Param Value\" lineEndContext=\"#stay\">\n        <DetectChar char=\"'\" attribute=\"Jsp Param Value\" context=\"#pop#pop\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n      </context>\n\n      <context name=\"Jsp Double Quoted Custom Tag Value\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" attribute=\"Types\" context=\"#pop#pop\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n      </context>\n\n      <context name=\"Jsp Single Quoted Custom Tag Value\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <DetectChar char=\"'\" attribute=\"Types\" context=\"#pop#pop\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n      </context>\n\n      <context name=\"Jsp Scriptlet\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"%\" char1=\"&gt;\" attribute=\"Jsp Scriptlet\" context=\"#pop\"/>\n        <RegExpr String=\"&lt;\\s*jsp:(declaration|expression|scriptlet)\\s*&gt;\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <keyword String=\"jsp-reserved-words\" attribute=\"Keyword\" context=\"#stay\"/>\n        <IncludeRules context=\"##Java\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"Jsp Expression\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Jsp Expression\" context=\"#pop\"/>\n        <keyword String=\"jsp-reserved-words\" attribute=\"Keyword\" context=\"#stay\"/>\n        <IncludeRules context=\"##Java\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"Html Attribute\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n        <RegExpr String=\"\\/?&gt;\" attribute=\"Normal Text\" context=\"#pop\"/>\n        <RegExpr String=\"\\s*=\\s*\" attribute=\"Normal Text\" context=\"Html Value\"/>\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n      </context>\n\n      <context name=\"Html Value\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <RegExpr String=\"&lt;\\s*\\/?\\s*\\$?\\w*:\\$?\\w*\" attribute=\"Keyword\" context=\"Jsp Custom Tag\"/>\n        <RegExpr String=\"(&quot;|&amp;quot;|&amp;#34;)\" attribute=\"Types\" context=\"Html Double Quoted Value\"/>\n        <RegExpr String=\"('|&amp;#39;)\" attribute=\"Types\" context=\"Html Single Quoted Value\"/>\n        <RegExpr String=\"\\s*#?-?_?\\.?[a-zA-Z0-9]*\" attribute=\"Types\" context=\"Html Unquoted Value\"/>\n        <RegExpr String=\"\\/?&gt;\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Html Double Quoted Value\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <RegExpr String=\"&lt;\\s*\\/?\\s*\\$?\\w*:\\$?\\w*\" attribute=\"Keyword\" context=\"Jsp Custom Tag\"/>\n        <RegExpr String=\"(&quot;|&amp;quot;|&amp;#34;)\" attribute=\"Types\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Html Single Quoted Value\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <RegExpr String=\"&lt;\\s*\\/?\\s*\\$?\\w*:\\$?\\w*\" attribute=\"Keyword\" context=\"Jsp Custom Tag\"/>\n        <RegExpr String=\"('|&amp;#39;)\" attribute=\"Types\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Html Unquoted Value\" attribute=\"Types\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <RegExpr String=\"&lt;\\s*\\/?\\s*\\$?\\w*:\\$?\\w*\" attribute=\"Keyword\" context=\"Jsp Custom Tag\"/>\n        <RegExpr String=\"\\/?&gt;\" attribute=\"Normal Text\" context=\"#pop#pop#pop\"/>\n        <RegExpr String=\"\\s+\" attribute=\"Types\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"Html Comment\" attribute=\"Html Comment\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;%--\" attribute=\"Jsp Comment\" context=\"Jsp Comment\"/>\n        <RegExpr String=\"&lt;%(!|=)?\" attribute=\"Jsp Scriptlet\" context=\"Jsp Scriptlet\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"Jsp Expression\" context=\"Jsp Expression\"/>\n        <RegExpr String=\"\\/*--&gt;\" attribute=\"Html Comment\" context=\"#pop\"/>\n      </context>\n\n    </contexts>\n\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Identifier\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Types\" defStyleNum=\"dsDataType\"/>\n\n      <itemData name=\"Html Comment\" defStyleNum=\"dsComment\"/>\n\n      <itemData name=\"Jsp Directive\" defStyleNum=\"dsBuiltIn\" bold=\"true\" italic=\"true\"/>\n      <itemData name=\"Jsp Scriptlet\" defStyleNum=\"dsPreprocessor\" bold=\"true\" italic=\"false\"/>\n      <itemData name=\"Jsp Expression\" defStyleNum=\"dsPreprocessor\" bold=\"true\" italic=\"false\"/>\n      <itemData name=\"Jsp Comment\" defStyleNum=\"dsComment\"/>\n\n      <itemData name=\"Jsp Param Name\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Jsp Param Value\" defStyleNum=\"dsString\"/>\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;%-- \" end=\" --%&gt;\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/julia.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ====================================================================\n  Julia syntax highlighting file for the KDE editors Kate and Kwrite\n  ====================================================================\n\n  This was adapted from the Matlab syntax highlighting file\n\n  Most of this XML file is straightforward. Only the character ' (&apos;)\n  needs nontrivial treatment, since it is both a postfix operator indicating\n  complex conjugate transpose (adjoint) and a character delimiter. It is an\n  adjoint operator in the following positions:\n  1) immediately after an identifier (variable, function, but not keyword)\n  2) immediately after a number literal\n  3) immediately after the closing parenthesis ), ] and }\n  4) immediately after a simple transpose operator .'\n  5) immediately after another adjoint operator '\n  Otherwise it is a character delimiter.\n\n  This is implemented using look-ahead regexps. If one of the entities in the\n  above cases 1-4 (identifier, number literal, ...) matches and look-ahead\n  shows that it is followed by a ', the entity is highlighted and control is\n  passed to the special context _adjoint, whose sole purpose is to correctly\n  highlight a series of ' (thus covering case 5 as well). _adjoint immediately\n  returns to the default context _normal.\n\n  Author: Timothy E. Holy, Washington University in St. Louis\n-->\n\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY int \"[0-9]([0-9_]*[0-9])?\">\n  <!ENTITY hex \"[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?\">\n]>\n\n<language name=\"Julia\" section=\"Sources\" version=\"7\" kateversion=\"5.0\" extensions=\"*.jl\" casesensitive=\"1\" priority=\"5\" license=\"MIT\">\n\n  <highlighting>\n    <list name=\"block_begin\">\n      <item>begin</item>\n      <item>do</item>\n      <item>for</item>\n      <item>function</item>\n      <item>if</item>\n      <item>let</item>\n      <item>quote</item>\n      <item>try</item>\n      <item>type</item>\n      <item>while</item>\n    </list>\n    <list name=\"block_eb\">\n      <item>catch</item>\n      <item>finally</item>\n      <item>else</item>\n      <item>elseif</item>\n    </list>\n    <list name=\"block_end\">\n      <item>end</item>\n    </list>\n    <list name=\"keywords\">\n      <item>abstract</item>\n      <item>bitstype</item>\n      <item>break</item>\n      <item>ccall</item>\n      <item>const</item>\n      <item>continue</item>\n      <item>export</item>\n      <item>global</item>\n      <item>import</item>\n      <item>in</item>\n      <item>local</item>\n      <item>macro</item>\n      <item>module</item>\n      <item>return</item>\n      <item>typealias</item>\n      <item>importall</item>\n      <item>baremodule</item>\n      <item>using</item>\n      <item>where</item>\n      <item>new</item>\n      <item>in</item>\n      <item>struct</item>\n      <item>ans</item>\n      <!-- C Interface -->\n      <item>ccall</item>\n    </list>\n    <list name=\"types\">\n      <item>AbstractArray</item>\n      <item>AbstractMatrix</item>\n      <item>AbstractVector</item>\n      <item>Any</item>\n      <item>Array</item>\n      <item>ASCIIString</item>\n      <item>Associative</item>\n      <item>Bool</item>\n      <item>ByteString</item>\n      <item>Char</item>\n      <item>Complex</item>\n      <item>Complex64</item>\n      <item>Complex128</item>\n      <item>ComplexPair</item>\n      <item>DArray</item>\n      <item>Dict</item>\n      <item>Exception</item>\n      <item>Expr</item>\n      <item>Float</item>\n      <item>Float32</item>\n      <item>Float64</item>\n      <item>Function</item>\n      <item>ObjectIdDict</item>\n      <item>Int</item>\n      <item>Int8</item>\n      <item>Int16</item>\n      <item>Int32</item>\n      <item>Int64</item>\n      <item>Integer</item>\n      <item>IntSet</item>\n      <item>IO</item>\n      <item>IOStream</item>\n      <item>Matrix</item>\n      <item>Nothing</item>\n      <item>None</item>\n      <item>NTuple</item>\n      <item>Number</item>\n      <item>Ptr</item>\n      <item>Range</item>\n      <item>Range1</item>\n      <item>Ranges</item>\n      <item>Rational</item>\n      <item>Real</item>\n      <item>Regex</item>\n      <item>RegexMatch</item>\n      <item>Set</item>\n      <item>Signed</item>\n      <item>StridedArray</item>\n      <item>StridedMatrix</item>\n      <item>StridedVecOrMat</item>\n      <item>StridedVector</item>\n      <item>String</item>\n      <item>SubArray</item>\n      <item>SubString</item>\n      <item>Symbol</item>\n      <item>Task</item>\n      <item>Tuple</item>\n      <item>Type</item>\n      <item>UInt</item>\n      <item>UInt8</item>\n      <item>UInt16</item>\n      <item>UInt32</item>\n      <item>UInt64</item>\n      <item>Union</item>\n      <item>Unsigned</item>\n      <item>UTF8String</item>\n      <item>VecOrMat</item>\n      <item>Vector</item>\n      <item>Void</item>\n      <item>WeakRef</item>\n      <!-- Essentials -->\n      <item>Missing</item>\n      <item>Cmd</item>\n      <item>EnvDict</item>\n      <item>VersionNumber</item>\n      <item>ArgumentError</item>\n      <item>AssertionError</item>\n      <item>BoundsError</item>\n      <item>CompositeException</item>\n      <item>DimensionMismatch</item>\n      <item>DivideError</item>\n      <item>DomainError</item>\n      <item>EOFError</item>\n      <item>ErrorException</item>\n      <item>InexactError</item>\n      <item>InterruptException</item>\n      <item>KeyError</item>\n      <item>LoadError</item>\n      <item>MethodError</item>\n      <item>MissingException</item>\n      <item>OutOfMemoryError</item>\n      <item>ReadOnlyMemoryError</item>\n      <item>OverflowError</item>\n      <item>StackOverflowError</item>\n      <item>SystemError</item>\n      <item>TypeError</item>\n      <item>UndefKeywordError</item>\n      <item>UndefRefError</item>\n      <item>UndefVarError</item>\n      <item>StringIndexError</item>\n      <item>InitError</item>\n      <item>ExponentialBackOff</item>\n      <item>Timer</item>\n      <item>AsyncCondition</item>\n      <item>ParseError</item>\n      <!-- Collections and Data Structures -->\n      <item>IteratorEltype</item>\n      <item>AbstractRange</item>\n      <item>OrdinalRange</item>\n      <item>AbstractUnitRange</item>\n      <item>StepRange</item>\n      <item>UnitRange</item>\n      <item>LinRange</item>\n      <item>IdDict</item>\n      <item>WeakKeyDict</item>\n      <item>ImmutableDict</item>\n      <item>BitSet</item>\n      <item>Pair</item>\n      <!-- Math -->\n      <item>OneTo</item>\n      <item>StepRangeLen</item>\n      <item>RoundingMode</item>\n      <!-- Numbers -->\n      <item>AbstractFloat</item>\n      <item>AbstractIrrational</item>\n      <item>Float16</item>\n      <item>Float32</item>\n      <item>Float64</item>\n      <item>BigFloat</item>\n      <item>Int128</item>\n      <item>UInt128</item>\n      <item>BigInt</item>\n      <item>ComplexF16</item>\n      <item>ComplexF32</item>\n      <item>ComplexF64</item>\n      <item>Irrational</item>\n      <item>UnionAll</item>\n      <item>NamedTuple</item>\n      <item>Val</item>\n      <item>Vararg</item>\n      <item>Some</item>\n      <!-- String -->\n      <item>AbstractChar</item>\n      <item>SubstitutionString</item>\n      <item>AbstractString</item>\n      <!-- Array -->\n      <item>UndefInitializer</item>\n      <item>DenseArray</item>\n      <item>DenseVector</item>\n      <item>DenseMatrix</item>\n      <item>BitArray</item>\n      <item>IndexStyle</item>\n      <item>IndexLinear</item>\n      <item>IndexCartesian</item>\n      <item>BroadcastStyle</item>\n      <item>AbstractArrayStyle</item>\n      <item>ArrayStyle</item>\n      <item>DefaultArrayStyle</item>\n      <item>Colon</item>\n      <item>CartesianIndex</item>\n      <item>CartesianIndices</item>\n      <item>Dims</item>\n      <item>LinearIndices</item>\n      <item>PermutedDimsArray</item>\n      <!-- Tasks -->\n      <item>Condition</item>\n      <item>Channel</item>\n      <!-- Threads -->\n      <item>Atomic</item>\n      <item>AbstractLock</item>\n      <item>ReentrantLock</item>\n      <item>Mutex</item>\n      <item>SpinLock</item>\n      <item>RecursiveSpinLock</item>\n      <item>Semaphore</item>\n      <!-- Filesystem (Libc) -->\n      <item>RawFD</item>\n      <!-- I/O and Network -->\n      <item>IOBuffer</item>\n      <item>IOContext</item>\n      <item>TextDisplay</item>\n      <item>AbstractDisplay</item>\n      <!-- Sort -->\n      <item>PartialQuickSort</item>\n      <!-- Iteration utilities -->\n      <item>Stateful</item>\n      <!-- Iterators -->\n      <item>Pairs</item>\n      <!-- C Interface -->\n      <item>CFunction</item>\n      <item>Ptr</item>\n      <item>Ref</item>\n      <item>Cchar</item>\n      <item>Cuchar</item>\n      <item>Cshort</item>\n      <item>Cstring</item>\n      <item>Cushort</item>\n      <item>Cint</item>\n      <item>Cuint</item>\n      <item>Clong</item>\n      <item>Culong</item>\n      <item>Clonglong</item>\n      <item>Culonglong</item>\n      <item>Cintmax_t</item>\n      <item>Cuintmax_t</item>\n      <item>Csize_t</item>\n      <item>Cssize_t</item>\n      <item>Cptrdiff_t</item>\n      <item>Cwchar_t</item>\n      <item>Cwstring</item>\n      <item>Cfloat</item>\n      <item>Cdouble</item>\n      <!-- C Standard Library -->\n      <item>TmStruct</item>\n      <!-- StackTraces -->\n      <item>StackFrame</item>\n      <item>StackTrace</item>\n      <!-- Base64 -->\n      <item>Base64EncodePipe</item>\n      <item>Base64DecodePipe</item>\n      <!-- Dates -->\n      <item>Period</item>\n      <item>CompoundPeriod</item>\n      <item>Instant</item>\n      <item>UTInstant</item>\n      <item>TimeType</item>\n      <item>DateTime</item>\n      <item>Date</item>\n      <item>Time</item>\n      <item>DateFormat</item>\n      <!-- Base.CoreLogging -->\n      <item>LogLevel</item>\n      <item>AbstractLogger</item>\n      <item>NullLogger</item>\n      <item>ConsoleLogger</item>\n      <item>SimpleLogger</item>\n      <!-- Mmap -->\n      <item>Anonymous</item>\n      <!-- Random -->\n      <item>RandomDevice</item>\n      <item>MersenneTwister</item>\n      <!-- SharedArrays -->\n      <item>SharedArray</item>\n      <!-- Sockets -->\n      <item>IPv4</item>\n      <item>IPv6</item>\n      <item>TCPSocket</item>\n      <item>UDPSocket</item>\n      <!-- SparseArrays -->\n      <item>SparseVector</item>\n      <item>SparseMatrixCSC</item>\n      <!-- Others -->\n      <item>AbstractChannel</item>\n      <item>AbstractSet</item>\n      <item>AbstractDict</item>\n      <item>BitMatrix</item>\n      <item>BitVector</item>\n      <item>Enum</item>\n      <item>CapturedException</item>\n      <item>InvalidStateException</item>\n      <item>ProcessFailedException</item>\n    </list>\n\n    <list name=\"constants\">\n      <!-- Constants -->\n      <item>nothing</item>\n      <item>PROGRAM_FILE</item>\n      <item>ARGS</item>\n      <item>C_NULL</item>\n      <item>VERSION</item>\n      <item>LOAD_PATH</item>\n      <item>DEPOT_PATH</item>\n      <!-- Sys -->\n      <item>BINDIR</item>\n      <item>CPU_THREADS</item>\n      <item>WORD_SIZE</item>\n      <item>KERNEL</item>\n      <item>ARCH</item>\n      <item>MACHINE</item>\n      <!-- Essentials -->\n      <item>missing</item>\n      <item>devnull</item>\n      <item>ENV</item>\n      <!-- I/O and Network -->\n      <item>stdout</item>\n      <item>stderr</item>\n      <item>stdin</item>\n      <item>open</item>\n      <item>read</item>\n      <item>write</item>\n      <item>create</item>\n      <item>truncate</item>\n      <item>append</item>\n      <item>ENDIAN_BOM</item>\n      <!-- Numbers -->\n      <item>im</item>\n      <item>pi</item>\n      <item>e</item>\n      <item>catalan</item>\n      <item>eulergamma</item>\n      <item>golden</item>\n      <item>Inf</item>\n      <item>Inf64</item>\n      <item>Inf32</item>\n      <item>Inf16</item>\n      <item>NaN</item>\n      <item>NaN64</item>\n      <item>NaN32</item>\n      <item>NaN16</item>\n      <!-- Math -->\n      <item>RoundNearest</item>\n      <item>RoundNearestTiesAway</item>\n      <item>RoundNearestTiesUp</item>\n      <item>RoundToZero</item>\n      <item>RoundFromZero</item>\n      <item>RoundUp</item>\n      <item>RoundDown</item>\n      <!-- Array -->\n      <item>AbstractVecOrMat</item>\n      <item>undef</item>\n      <item>VecOrMat</item>\n      <item>DenseVecOrMat</item>\n      <item>StridedArray</item>\n      <item>StridedVector</item>\n      <item>StridedMatrix</item>\n      <item>StridedVecOrMat</item>\n      <!-- Sort -->\n      <item>InsertionSort</item>\n      <item>MergeSort</item>\n      <item>QuickSort</item>\n      <item>InsertionSort</item>\n      <!-- Libc -->\n      <item>MS_ASYNC</item>\n      <item>MS_INVALIDATE</item>\n      <item>MS_SYNC</item>\n    </list>\n    <list name=\"booleans\">\n      <item>true</item>\n      <item>false</item>\n    </list>\n    <list name=\"modules\">\n      <item>Base</item>\n      <item>Core</item>\n      <item>Main</item>\n      <item>Meta</item>\n      <item>StackTraces</item>\n      <item>Sys</item>\n      <item>Libc</item>\n      <item>Docs</item>\n      <item>Threads</item>\n      <item>Iterators</item>\n      <item>Broadcast</item>\n      <item>MathConstants</item>\n      <item>Math</item>\n      <item>Unicode</item>\n      <item>Sort</item>\n      <item>Base64</item>\n      <item>Dates</item>\n      <item>Mmap</item>\n      <item>Random</item>\n      <item>SharedArrays</item>\n      <item>Sockets</item>\n      <item>SparseArrays</item>\n      <item>CoreLogging</item>\n    </list>\n    <contexts>\n\n      <context name=\"_normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\n        <DetectSpaces />\n\n        <!-- Blocks -->\n        <keyword context=\"#stay\" attribute=\"Keyword\" String=\"block_begin\"\n                 beginRegion=\"block\" />\n        <keyword context=\"#stay\" attribute=\"Keyword\" String=\"block_eb\"\n                 endRegion=\"block\" beginRegion=\"block\" />\n        <keyword context=\"#stay\" attribute=\"Keyword\" String=\"block_end\"\n                 endRegion=\"block\" />\n        <StringDetect String=\"#BEGIN\" context=\"region_marker\" attribute=\"FoldingComment\" beginRegion=\"user_region\" />\n        <StringDetect String=\"#END\" context=\"region_marker\" attribute=\"FoldingComment\" endRegion=\"user_region\" />\n\n        <!-- Keywords, types, and comments -->\n        <RegExpr context=\"#stay\" attribute=\"Keyword\" String=\"\\b(abstract|primitive)\\s+type\\b\" />\n        <RegExpr context=\"#stay\" attribute=\"Keyword\" String=\"\\bmutable\\s+struct\\b\" />\n        <keyword context=\"#stay\" attribute=\"Keyword\" String=\"keywords\" />\n        <keyword context=\"#stay\" attribute=\"Data Type\" String=\"types\" />\n        <keyword context=\"#stay\" attribute=\"Boolean\" String=\"booleans\" />\n        <keyword context=\"#stay\" attribute=\"Constant\" String=\"constants\" />\n        <keyword context=\"#stay\" attribute=\"Module\" String=\"modules\" />\n        <Detect2Chars char=\"#\" char1=\"=\" context=\"block-comment\" attribute=\"Comment\" beginRegion=\"block-comment\"/>\n        <DetectChar char=\"#\" context=\"1-comment\" attribute=\"Comment\"/>\n\n        <!-- Lists and arrays -->\n        <!-- <DetectChar char=\"(\" context=\"nested\" beginRegion=\"nested\" attribute=\"Delimiter\" />\n        <DetectChar char=\"[\" context=\"squared\" beginRegion=\"squared\" attribute=\"Delimiter\" />\n        <DetectChar char=\"{\" context=\"curly\" beginRegion=\"curly\" attribute=\"Delimiter\" /> -->\n\n        <!-- Strings -->\n        <StringDetect attribute=\"String\" context=\"Block-String\" String=\"&quot;&quot;&quot;\" beginRegion=\"block-string\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <!-- Regular expressions -->\n        <StringDetect attribute=\"String\" context=\"Regex-Block-String\" String=\"r&quot;&quot;&quot;\" beginRegion=\"block-string\"/>\n        <Detect2Chars attribute=\"String\" context=\"Regex-String\" char=\"r\" char1=\"&quot;\"/>\n        <!-- Byte Arrays -->\n        <StringDetect attribute=\"String\" context=\"Block-String\" String=\"b&quot;&quot;&quot;\" beginRegion=\"block-string\"/>\n        <Detect2Chars attribute=\"String\" context=\"String\" char=\"b\" char1=\"&quot;\"/>\n        <!-- Version Number -->\n        <Detect2Chars attribute=\"String\" context=\"String\" char=\"v\" char1=\"&quot;\"/>\n        <!-- Raw Strings -->\n        <StringDetect attribute=\"String\" context=\"Raw-Block-String\" String=\"raw&quot;&quot;&quot;\" beginRegion=\"block-string\"/>\n        <StringDetect attribute=\"String\" context=\"Raw-String\" String=\"raw&quot;\"/>\n        <!-- Documentation -->\n        <StringDetect attribute=\"String\" context=\"Block-String\" String=\"doc&quot;&quot;&quot;\" beginRegion=\"block-string\"/>\n        <StringDetect attribute=\"String\" context=\"String\" String=\"doc&quot;\"/>\n\n        <!-- For Running External Programs -->\n        <StringDetect attribute=\"Command String\" context=\"Block-Backtick-String\" String=\"```\" beginRegion=\"block-string\"/>\n        <DetectChar attribute=\"Command String\" context=\"Backtick-String\" char=\"`\"/>\n\n        <!-- Multi-character operators -->\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"...\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\":\" char1=\":\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&gt;&gt;&gt;=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&gt;&gt;=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&lt;&lt;=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&gt;&gt;&gt;\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"&gt;\" char1=\"&gt;\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"&lt;\" char1=\"&lt;\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"=\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"!\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"&lt;\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"&gt;\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"&amp;\" char1=\"&amp;\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"|\" char1=\"|\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\".\" char1=\"*\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\".\" char1=\"^\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\".\" char1=\"/\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\".\" char1=\"'\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"+\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"-\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"*\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"/\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"&amp;\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"|\" char1=\"=\"/>\n        <Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"$\" char1=\"=\"/>\n\n        <!-- Look-ahead for adjoint ' after variable, number literal, closing braces and .' -->\n        <RegExpr context=\"_adjoint\" attribute=\"Variable\" String=\"[a-zA-Z]\\w*(?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Float\" String=\"(&int;(\\.&int;)?|\\.&int;)([eEfF][+-]?\\d+)?(im)?(?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Delimiter\" String=\"[\\)\\]}](?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Operator\" String=\"\\.'(?=')\" />\n\n        <!-- If ' is not the adjoint operator, it starts a character or an unterminated char -->\n        <RegExpr context=\"#stay\" attribute=\"Char\" String=\"'[^']*(''[^']*)*'(?=[^']|$)\" />\n        <RegExpr context=\"#stay\" attribute=\"Incomplete Char\" String=\"'[^']*(''[^']*)*\" />\n\n        <RegExpr context=\"#stay\" attribute=\"Macro\" String=\"@[a-zA-Z_]\\w*\" />\n        <RegExpr context=\"#stay\" attribute=\"Function\" String=\"\\b[A-Za-z_]\\w*(?=\\!?\\()\" />\n\n        <!-- Identifiers, numbers and braces -->\n        <!-- We can't use HlCHex, Int, and Float because we need to allow the \"im\" at the end of complex numbers -->\n        <DetectIdentifier context=\"#stay\" attribute=\"Variable\" />\n        <RegExpr context=\"#stay\" attribute=\"Float\" String=\"0x(&hex;\\.?|(&hex;)?\\.&hex;)[pP][+-]?\\d+(im)?\"/>\n        <RegExpr context=\"#stay\" attribute=\"Hex\" String=\"0x&hex;(im)?\" />\n        <RegExpr context=\"#stay\" attribute=\"Octal\" String=\"0o[0-7]([0-7_]*[0-7])?(im)?\" />\n        <RegExpr context=\"#stay\" attribute=\"Binary\" String=\"0b[01]([01_]*[01])?(im)?\" />\n        <RegExpr context=\"#stay\" attribute=\"Float\" String=\"(&int;(\\.&int;)?|\\.&int;)([eEfF][+-]?\\d+)?(im)?\" />\n        <AnyChar context=\"#stay\" attribute=\"Delimiter\" String=\"()[]{}\"/>\n\n        <!-- Single-character operators -->\n        <AnyChar context=\"#stay\" attribute=\"Operator\" String=\"*+-/\\&amp;|&lt;&gt;~$!^=,;:@\"/>\n\n      </context>\n\n      <!-- Context for user block (#BEGIN...#END) -->\n      <context name=\"region_marker\" lineEndContext=\"#pop\" attribute=\"FoldingComment\" >\n        <IncludeRules context=\"1-comment\" />\n      </context>\n\n      <!-- Contexts entered after beginning a list or array -->\n<!--      <context name=\"nested\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\")\" context=\"#pop\" endRegion=\"nested\" attribute=\"Delimiter\" />\n      </context>\n      <context name=\"squared\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"]\" context=\"#pop\" endRegion=\"squared\" attribute=\"Delimiter\" />\n      </context>\n      <context name=\"curly\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" context=\"#pop\" endRegion=\"curly\" attribute=\"Delimiter\" />\n      </context>-->\n\n      <!-- Context entered after encountering an ' adjoint operator -->\n      <context name=\"_adjoint\" attribute=\"Operator\" lineEndContext=\"#pop\">\n        <RegExpr context=\"#pop\" attribute=\"Operator\" String=\"'+\" />\n      </context>\n\n      <!-- Context entered after encountering an \" (string) -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectSpaces />\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Block-String\">\n        <DetectSpaces />\n        <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\" endRegion=\"block-string\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n      </context>\n      <!-- Raw String -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"Raw-String\">\n        <DetectSpaces />\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"(\\\\\\\\)*\\\\&quot;\"/>\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"(\\\\\\\\)+(?=&quot;)\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Raw-Block-String\">\n        <DetectSpaces />\n        <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\" endRegion=\"block-string\"/>\n      </context>\n      <!-- Command String -->\n      <context attribute=\"Command String\" lineEndContext=\"#pop\" name=\"Backtick-String\">\n        <DetectSpaces />\n        <LineContinue attribute=\"Command String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Command String\" context=\"#pop\" char=\"`\"/>\n      </context>\n      <context attribute=\"Command String\" lineEndContext=\"#stay\" name=\"Block-Backtick-String\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Command String\" context=\"#pop\" String=\"```\" endRegion=\"block-string\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n      </context>\n\n      <!-- Regular expressions -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"Regex-String\">\n        <RegExpr attribute=\"String\" context=\"#pop\" String=\"&quot;[imsx]{1,4}\"/>\n        <Detect2Chars attribute=\"Char\" context=\"Regex-Square-Bracket\" char=\"[\" char1=\"^\"/>\n        <DetectChar attribute=\"Char\" context=\"Regex-Square-Bracket\" char=\"[\"/>\n        <IncludeRules context=\"Default-Regex\"/>\n        <IncludeRules context=\"String\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Regex-Block-String\">\n        <RegExpr attribute=\"String\" context=\"#pop\" String=\"&quot;{3}[imsx]{1,4}\" endRegion=\"block-string\"/>\n        <Detect2Chars attribute=\"Char\" context=\"Block-Regex-Square-Bracket\" char=\"[\" char1=\"^\"/>\n        <DetectChar attribute=\"Char\" context=\"Block-Regex-Square-Bracket\" char=\"[\"/>\n        <IncludeRules context=\"Default-Regex\"/>\n        <IncludeRules context=\"Block-String\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"Regex-Square-Bracket\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\.\" />\n        <DetectChar attribute=\"Char\" context=\"#pop\" char=\"]\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Block-Regex-Square-Bracket\">\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\.\" />\n        <DetectChar attribute=\"Char\" context=\"#pop\" char=\"]\"/>\n        <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\" lookAhead=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"Default-Regex\">\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\.\" />\n        <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"(\" char1=\"?\"/>\n        <AnyChar attribute=\"Char\" context=\"#stay\" String=\"()|\"/>\n        <AnyChar attribute=\"String Char\" context=\"#stay\" String=\"?+*.\" />\n      </context>\n\n      <!-- 1-line comment: #pop@EOL  -->\n      <context name=\"1-comment\" lineEndContext=\"#pop\" attribute=\"Comment\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <context name=\"block-comment\" lineEndContext=\"#stay\" attribute=\"Comment\">\n        <DetectSpaces />\n        <Detect2Chars char=\"=\" char1=\"#\" context=\"#pop\" attribute=\"Comment\" endRegion=\"block-comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Variable\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Binary\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Delimiter\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\" defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Incomplete Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsConstant\"/>\n      <itemData name=\"Boolean\" defStyleNum=\"dsExtension\"/>\n      <itemData name=\"Macro\" defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Module\" defStyleNum=\"dsBuiltIn\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Command String\" defStyleNum=\"dsSpecialString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"FoldingComment\" defStyleNum=\"dsRegionMarker\" />\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n      <comment name=\"multiLine\" start=\"#=\" end=\"=#\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"\"/>\n  </general>\n\n</language>\n\n<!-- It's recommended to put the following line in the Variables field under Settings->Configure Kate->Open/Save->Modes&Filetypes -->\n<!-- kate: space-indent on; indent-width 2; mixed-indent off; indent-mode cstyle; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/k.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"k\" version=\"3\" kateversion=\"3.4\" section=\"Scripts\" extensions=\"*.k\" license=\"LGPLv2+\" author=\"James Schmitz (james.schmitz@gmail.com)\">\n<highlighting>\n    <list name=\"flowcontrol\" >\n      <item>while</item>\n      <item>if</item>\n      <item>do</item>\n    </list>\n    <list name=\"kkeywords\" >\n      <item>abs</item>\n      <item>acos</item>\n      <item>asin</item>\n      <item>atan</item>\n      <item>avg</item>\n      <item>bin</item>\n      <item>by</item>\n      <item>cos</item>\n      <item>delete</item>\n      <item>div</item>\n      <item>exec</item>\n      <item>exit</item>\n      <item>exp</item>\n      <item>from</item>\n      <item>getenv</item>\n      <item>i</item>\n      <item>in</item>\n      <item>insert</item>\n      <item>last</item>\n      <item>like</item>\n      <item>log</item>\n      <item>max</item>\n      <item>min</item>\n      <item>prd</item>\n      <item>select</item>\n      <item>setenv</item>\n      <item>sin</item>\n      <item>sqrt</item>\n      <item>ss</item>\n      <item>sum</item>\n      <item>tan</item>\n      <item>update</item>\n      <item>wavg</item>\n      <item>within</item>\n      <item>wsum</item>\n      <item>xexp</item>\n    </list>\n    <list name=\"DotQ\">\n      <item>.Q.addmonths</item>\n      <item>.Q.addr</item>\n      <item>.Q.host</item>\n      <item>.Q.chk</item>\n      <item>.Q.cn</item>\n      <item>.Q.dd</item>\n      <item>.Q.dpft</item>\n      <item>.Q.dsftg</item>\n      <item>.Q.def</item>\n      <item>.Q.en</item>\n      <item>.Q.fc</item>\n      <item>.Q.fk</item>\n      <item>.Q.fmt</item>\n      <item>.Q.foo</item>\n      <item>.Q.fs</item>\n      <item>.Q.ft</item>\n      <item>.Q.fu</item>\n      <item>.Q.gc</item>\n      <item>.Q.hdpf</item>\n      <item>.Q.ind</item>\n      <item>.Q.j10</item>\n      <item>.Q.x10</item>\n      <item>.Q.j12</item>\n      <item>.Q.x12</item>\n      <item>.Q.k</item>\n      <item>.Q.l</item>\n      <item>.Q.opt</item>\n      <item>.Q.par</item>\n      <item>.Q.qp</item>\n      <item>.Q.qt</item>\n      <item>.Q.s</item>\n      <item>.Q.s1</item>\n      <item>.Q.ty</item>\n      <item>.Q.v</item>\n      <item>.Q.V</item>\n      <item>.Q.view</item>\n      <item>.Q.w</item>\n      <item>.Q.M</item>\n      <item>.Q.pf</item>\n      <item>.Q.pt</item>\n      <item>.Q.PD</item>\n      <item>.Q.PV</item>\n      <item>.Q.pd</item>\n      <item>.Q.pv</item>\n      <item>.Q.pn</item>\n      <item>.Q.bv</item>\n      <item>.Q.vp</item>\n      <item>.Q.P</item>\n      <item>.Q.D</item>\n      <item>.Q.u</item>\n    </list>\n    <list name=\"Doth\" >\n      <item>.h.br</item>\n      <item>.h.c0</item>\n      <item>.h.c1</item>\n      <item>.h.cd</item>\n      <item>.h.code</item>\n      <item>.h.data</item>\n      <item>.h.eb</item>\n      <item>.h.ec</item>\n      <item>.h.ed</item>\n      <item>.h.edsn</item>\n      <item>.h.es</item>\n      <item>.h.ex</item>\n      <item>.h.fram</item>\n      <item>.h.ha</item>\n      <item>.h.hb</item>\n      <item>.h.hc</item>\n      <item>.h.he</item>\n      <item>.h.hn</item>\n      <item>.h.hp</item>\n      <item>.h.hr</item>\n      <item>.h.ht</item>\n      <item>.h.hta</item>\n      <item>.h.htac</item>\n      <item>.h.htc</item>\n      <item>.h.html</item>\n      <item>.h.http</item>\n      <item>.h.hu</item>\n      <item>.h.hug</item>\n      <item>.h.hy</item>\n      <item>.h.iso8601</item>\n      <item>.h.jx</item>\n      <item>.h.logo</item>\n      <item>.h.nbr</item>\n      <item>.h.pre</item>\n      <item>.h.text</item>\n      <item>.h.tx</item>\n      <item>.h.ty</item>\n      <item>.h.uh</item>\n      <item>.h.xd</item>\n      <item>.h.xmp</item>\n      <item>.h.xs</item>\n      <item>.h.xt</item>\n    </list>\n    <list name=\"Doto\" >\n      <item>.o.B0</item>\n      <item>.o.C0</item>\n      <item>.o.Cols</item>\n      <item>.o.Columns</item>\n      <item>.o.FG</item>\n      <item>.o.Fkey</item>\n      <item>.o.Gkey</item>\n      <item>.o.Key</item>\n      <item>.o.PS</item>\n      <item>.o.Special</item>\n      <item>.o.Stats</item>\n      <item>.o.T</item>\n      <item>.o.T0</item>\n      <item>.o.TI</item>\n      <item>.o.Tables</item>\n      <item>.o.Ts</item>\n      <item>.o.TypeInfo</item>\n      <item>.o.ex</item>\n      <item>.o.o</item>\n      <item>.o.t</item>\n    </list>\n    <list name=\"Dotz\" >\n      <item>.z.a</item>\n      <item>.z.ac</item>\n      <item>.z.b</item>\n      <item>.z.bm</item>\n      <item>.z.c</item>\n      <item>.z.exit</item>\n      <item>.z.f</item>\n      <item>.z.h</item>\n      <item>.z.i</item>\n      <item>.z.k</item>\n      <item>.z.K</item>\n      <item>.z.l</item>\n      <item>.z.n</item>\n      <item>.z.N</item>\n      <item>.z.o</item>\n      <item>.z.p</item>\n      <item>.z.P</item>\n      <item>.z.pc</item>\n      <item>.z.pg</item>\n      <item>.z.ph</item>\n      <item>.z.pi</item>\n      <item>.z.po</item>\n      <item>.z.pp</item>\n      <item>.z.ps</item>\n      <item>.z.pw</item>\n      <item>.z.q</item>\n      <item>.z.s</item>\n      <item>.z.ts</item>\n      <item>.z.u</item>\n      <item>.z.vs</item>\n      <item>.z.w</item>\n      <item>.z.W</item>\n      <item>.z.ws</item>\n      <item>.z.x</item>\n      <item>.z.z</item>\n      <item>.z.Z</item>\n      <item>.z.t</item>\n      <item>.z.T</item>\n      <item>.z.d</item>\n      <item>.z.D</item>\n      <item>.z.zd</item>\n    </list>\n    <list name=\"Dotq\" >\n      <item>.q.aj</item>\n      <item>.q.aj0</item>\n      <item>.q.all</item>\n      <item>.q.and</item>\n      <item>.q.any</item>\n      <item>.q.asc</item>\n      <item>.q.asof</item>\n      <item>.q.attr</item>\n      <item>.q.avgs</item>\n      <item>.q.ceiling</item>\n      <item>.q.cols</item>\n      <item>.q.cor</item>\n      <item>.q.count</item>\n      <item>.q.cov</item>\n      <item>.q.cross</item>\n      <item>.q.csv</item>\n      <item>.q.cut</item>\n      <item>.q.deltas</item>\n      <item>.q.desc</item>\n      <item>.q.dev</item>\n      <item>.q.differ</item>\n      <item>.q.distinct</item>\n      <item>.q.each</item>\n      <item>.q.ej</item>\n      <item>.q.enlist</item>\n      <item>.q.eval</item>\n      <item>.q.except</item>\n      <item>.q.fby</item>\n      <item>.q.fills</item>\n      <item>.q.first</item>\n      <item>.q.fkeys</item>\n      <item>.q.flip</item>\n      <item>.q.floor</item>\n      <item>.q.get</item>\n      <item>.q.group</item>\n      <item>.q.gtime</item>\n      <item>.q.hclose</item>\n      <item>.q.hcount</item>\n      <item>.q.hdel</item>\n      <item>.q.hopen</item>\n      <item>.q.hsym</item>\n      <item>.q.iasc</item>\n      <item>.q.idesc</item>\n      <item>.q.ij</item>\n      <item>.q.inter</item>\n      <item>.q.inv</item>\n      <item>.q.key</item>\n      <item>.q.keys</item>\n      <item>.q.lj</item>\n      <item>.q.load</item>\n      <item>.q.lower</item>\n      <item>.q.lsq</item>\n      <item>.q.ltime</item>\n      <item>.q.ltrim</item>\n      <item>.q.mavg</item>\n      <item>.q.maxs</item>\n      <item>.q.mcount</item>\n      <item>.q.md5</item>\n      <item>.q.mdev</item>\n      <item>.q.med</item>\n      <item>.q.meta</item>\n      <item>.q.mins</item>\n      <item>.q.mmax</item>\n      <item>.q.mmin</item>\n      <item>.q.mmu</item>\n      <item>.q.mod</item>\n      <item>.q.msum</item>\n      <item>.q.neg</item>\n      <item>.q.next</item>\n      <item>.q.not</item>\n      <item>.q.null</item>\n      <item>.q.or</item>\n      <item>.q.over</item>\n      <item>.q.parse</item>\n      <item>.q.peach</item>\n      <item>.q.pj</item>\n      <item>.q.plist</item>\n      <item>.q.prds</item>\n      <item>.q.prev</item>\n      <item>.q.prior</item>\n      <item>.q.rand</item>\n      <item>.q.rank</item>\n      <item>.q.ratios</item>\n      <item>.q.raze</item>\n      <item>.q.read0</item>\n      <item>.q.read1</item>\n      <item>.q.reciprocal</item>\n      <item>.q.reverse</item>\n      <item>.q.rload</item>\n      <item>.q.rotate</item>\n      <item>.q.rsave</item>\n      <item>.q.rtrim</item>\n      <item>.q.save</item>\n      <item>.q.scan</item>\n      <item>.q.set</item>\n      <item>.q.show</item>\n      <item>.q.signum</item>\n      <item>.q.ssr</item>\n      <item>.q.string</item>\n      <item>.q.sublist</item>\n      <item>.q.sums</item>\n      <item>.q.sv</item>\n      <item>.q.system</item>\n      <item>.q.tables</item>\n      <item>.q.til</item>\n      <item>.q.trim</item>\n      <item>.q.txf</item>\n      <item>.q.type</item>\n      <item>.q.uj</item>\n      <item>.q.ungroup</item>\n      <item>.q.union</item>\n      <item>.q.upper</item>\n      <item>.q.upsert</item>\n      <item>.q.value</item>\n      <item>.q.var</item>\n      <item>.q.view</item>\n      <item>.q.views</item>\n      <item>.q.vs</item>\n      <item>.q.where</item>\n      <item>.q.wj</item>\n      <item>.q.wj1</item>\n      <item>.q.xasc</item>\n      <item>.q.xbar</item>\n      <item>.q.xcol</item>\n      <item>.q.xcols</item>\n      <item>.q.xdesc</item>\n      <item>.q.xgroup</item>\n      <item>.q.xkey</item>\n      <item>.q.xlog</item>\n      <item>.q.xprev</item>\n      <item>.q.xrank</item>\n    </list>\n    <list name=\"todos\" >\n      <item>TODO</item>\n      <item>FIXME</item>\n      <item>FIX</item>\n      <item>HACK</item>\n      <item>XXX</item>\n      <item>NOTE</item>\n      <item>GOTCHA</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n        <RegExpr attribute=\"kSystemCommand\" String=\"^\\\\[^\\s].*$\" context=\"#stay\" />\n        <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n        <RegExpr attribute=\"kSeparators\" String=\"[{|(|[|\\]|)|}]\" context=\"#stay\" />\n        <RegExpr attribute=\"kHSym\" String=\"`:[\\w/:.]*\" context=\"#stay\" />\n        <RegExpr attribute=\"kSymbol\" String=\"(`[a-zA-Z\\d.][\\w:.]*|`|\\d[a-zA-Z\\d:.]*s)\" context=\"#stay\" />\n        <keyword attribute=\"FlowControl\" context=\"#stay\" String=\"flowcontrol\" />\n        <RegExpr attribute=\"FlowControl\" String=\"\\$(?=\\[)\" context=\"#stay\" />\n        <keyword attribute=\"kKeyword\" context=\"#stay\" String=\"kkeywords\" />\n        <keyword attribute=\"DotQfunctions\" context=\"#stay\" String=\"DotQ\" />\n        <keyword attribute=\"Dotzfunctions\" context=\"#stay\" String=\"Dotz\" />\n        <keyword attribute=\"Dothfunctions\" context=\"#stay\" String=\"Doth\" />\n        <keyword attribute=\"Dotofunctions\" context=\"#stay\" String=\"Doto\" />\n        <keyword attribute=\"Dotqfunctions\" context=\"#stay\" String=\"Dotq\" />\n        <RegExpr attribute=\"kIdentifier\" String=\"(?:[a-zA-Z][\\w.]*|\\.[a-zA-Z][\\w.]*)\" context=\"#stay\" />\n        <RegExpr attribute=\"kBool\" String=\"[0|1]+b\" context=\"#stay\" />\n        <RegExpr attribute=\"kByte\" String=\"0x[0-9a-fA-F]*\" context=\"#stay\" />\n        <RegExpr attribute=\"kGuid\" String=\"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\" context=\"#stay\" />\n        <RegExpr attribute=\"kDateTime\" String=\"(?:\\d{4}\\.\\d\\dm|\\d{4}\\.\\d\\d\\.\\d\\d(?:|[D|T](?:\\d*|\\d\\d:\\d\\d|\\d\\d:\\d\\d:\\d\\d|\\d\\d:\\d\\d:\\d\\d\\.\\d*)))\" context=\"#stay\" />\n        <RegExpr attribute=\"kDateTime\" String=\"\\d+D(?:\\d*|\\d\\d:\\d\\d|\\d\\d:\\d\\d:\\d\\d|\\d\\d:\\d\\d:\\d\\d\\.\\d*)\" context=\"#stay\" />\n        <RegExpr attribute=\"kDateTime\" String=\"(?:\\d+t|\\d\\d:\\d*|\\d\\d:\\d\\d:\\d\\d(?:|\\.\\d+))\" context=\"#stay\" />\n        <RegExpr attribute=\"kNumber\" String=\"[-]?(?:0(?:n|Ne|ne|Nf|nf)|(?:[\\d]+\\.[\\d]*|\\.?[\\d]+)e[-]?\\d+|(?:[\\d]+\\.[\\d]*[ef]?|\\.[\\d]+[ef]?|[\\d]+[ef]))\" context=\"#stay\" />\n        <RegExpr attribute=\"kNumber\" String=\"[-]?(?:0N[hj]?|[\\d]+[i|j|h]?)\" context=\"#stay\" />\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\" \" char1=\"/\" />\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\")\" char1=\"/\" />\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"}\" char1=\"/\" />\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"]\" char1=\"/\" />\n        <RegExpr String=\"^\\\\[\\s]*$\" attribute=\"CommentToEOF\" context=\"commentToEOF\" />\n        <RegExpr String=\"^/[\\s]*$\" attribute=\"MultiLineComment\" context=\"multicomment\" beginRegion=\"Comment\" />\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"/\" firstNonSpace=\"true\" /> \n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\" >\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\" >\n        <keyword attribute=\"Todos\" context=\"#stay\" String=\"todos\" />\n      </context>\n      <context name=\"multicomment\" attribute=\"MultiLineComment\" lineEndContext=\"#stay\" >\n        <keyword attribute=\"Todos\" context=\"#stay\" String=\"todos\" />\n        <RegExpr String=\"^\\\\[\\s]*$\" attribute=\"MultiLineComment\" context=\"#pop\" endRegion=\"Comment\" />\n      </context>\n      <context name=\"commentToEOF\" attribute=\"CommentToEOF\" lineEndContext=\"#stay\" >\n        <keyword attribute=\"Todos\" context=\"#stay\" String=\"todos\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" spellChecking=\"false\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"kSystemCommand\" spellChecking=\"false\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"kSeparators\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Todos\" defStyleNum=\"dsComment\" />\n      <itemData name=\"kSymbol\" spellChecking=\"false\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"kHSym\" spellChecking=\"false\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"FlowControl\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"kKeyword\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Dothfunctions\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"DotQfunctions\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Dotzfunctions\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Dotofunctions\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Dotqfunctions\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"kIdentifier\" spellChecking=\"false\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"kNumber\" spellChecking=\"false\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"kBool\" spellChecking=\"false\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"kGuid\" spellChecking=\"false\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"kByte\" spellChecking=\"false\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"String\" spellChecking=\"false\" defStyleNum=\"dsString\" />\n      <itemData name=\"kDateTime\" spellChecking=\"false\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Comment\" spellChecking=\"true\" defStyleNum=\"dsComment\" />\n      <itemData name=\"MultiLineComment\" spellChecking=\"true\" defStyleNum=\"dsComment\" />\n      <itemData name=\"CommentToEOF\" defStyleNum=\"dsComment\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"/\" />\n      <comment name=\"multiLine\" start=\"/\" end=\"\\\" region=\"Comment\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\".\" additionalDeliminator=\"`#'@$&quot;\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/kbasic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"KBasic\" version=\"3\" kateversion=\"2.2\" section=\"Sources\" extensions=\"*.kbasic\" mimetype=\"text/x-kbasic-src\">\n    <highlighting>\n        <list name=\"keywords\">\n        <item>For</item>\n        <item>Next</item>\n        <item>Do</item>\n        <item>Loop</item>\n        <item>While</item>\n        <item>Wend</item>\n        <item>Until</item>\n        <item>If</item>\n        <item>Else</item>\n        <item>End</item>\n        <item>Function</item>\n        <item>Goto</item>\n        <item>Sub</item>\n        <item>Implements</item>\n        <item>In</item>\n        <item>Sub</item>\n        <item>Private</item>\n        <item>Public</item>\n        <item>Global</item>\n        <item>As</item>\n        <item>Dim</item>\n        <item>Set</item>\n        <item>Let</item>\n        <item>Get</item>\n        <item>To</item>\n        <item>Property</item>\n        <item>True</item>\n        <item>False</item>\n        <item>Or</item>\n        <item>Not</item>\n        <item>Xor</item>\n        <item>And</item>\n        <item>Then</item>\n        <item>Exit</item>\n        <item>Put</item>\n        <item>Open</item>\n        <item>Close</item>\n        <item>Seek</item>\n        <item>Print</item>\n        <item>Input</item>\n        <item>Output</item>\n        <item>Repeat</item>\n        <item>Load</item>\n        <item>Unload</item>\n        <item>Declare</item>\n        <item>Option</item>\n        <item>Explicit</item>\n        </list>\n        <list name=\"types\">\n        <item>Integer</item>\n        <item>Long</item>\n        <item>Byte</item>\n        <item>Boolean</item>\n        <item>Variant</item>\n        <item>Single</item>\n        <item>Double</item>\n        <item>Currency</item>\n        <item>String</item>\n        <item>Object</item>\n        <item>Control</item>\n        </list>\n        <contexts>\n        <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Identifier\" context=\"#stay\" String=\"types\"/>\n        <Float attribute=\"String\" context=\"#stay\"/>\n        <Int attribute=\"Types\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"'\"/>\n        </context>\n        <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n        <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n        </context>\n        </contexts>\n        <itemDatas>\n        <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n        <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n        <itemData name=\"Identifier\" defStyleNum=\"dsOthers\"/>\n        <itemData name=\"Types\" defStyleNum=\"dsDataType\"/>\n        <itemData name=\"String\" defStyleNum=\"dsString\"/>\n        <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n        </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/kconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY n \"[A-Za-z0-9_]\">\n\t<!ENTITY n1 \"[A-Za-z0-9_/.-]\">\n\t<!ENTITY badCom \"[^ \\t#A-Za-z0-9_&quot;']\">\n\t<!ENTITY badParam \"[^ \\t#A-Za-z0-9_/.&quot;'&amp;&lt;&gt;\\|\\(\\)!=-]\">\n\t<!ENTITY ws \"[ \\t]\">\n\t<!ENTITY keyword \"mainmenu|menu|endmenu|source|choice|endchoice|comment|config|menuconfig|help|if|endif|depends|optional|default|prompt|tristate|def_tristate|bool|boolean|def_bool|int|hex|string|select|range|visible|option|on|modules|defconfig_list|env|allnoconfig_y\">\n\t<!ENTITY tab \"( ? ? ? ? ? ? ?\\t|        )\">\n]>\n\n<!--\n\nKate Kconfig highlighting definition\n\nThis is for Kconfig files of LKC (LinuxKernelConf), the configuration system\nthat is in use by and maintained with the Linux Kernel since release 2.5.45,\ni.e. in particular throughout all 2.6 release series and the 3.x releases so far\n(up to 3.15 as of this writing, or to be honest 3.15-rc5).\n\nThere have been several minor syntax modifications since Linux Kernel 2.5.45,\nand it is likely that there will be more in the future. Therefore, the version\nnumber of this file corresponds to the version number of the Linux Kernel with\nthe latest changes that have been adapted.\n\nWhen it comes to details, the language of LKC is extremely complicated. At the\nsame time this definition aims to be precise. As a result it is very long and\nmassively uses regular expressions. Hence you may notice high cpu usage when\nopening large files, depending on your hardware.\n\nWhen editing Kconfig files keep in mind that this definition targets the syntax\nas found in a specific release.\n\nThere are other projects that use the same configuration system:\nbusybox http://busybox.net/, uClibc (http://www.uclibc.org/),\nOpenWrt (https://openwrt.org/) and many more. Of course you can use this\ndefinition also for those configuration files, but be aware that the versions of\nLKC in those projects may be highly outdated. Sporadically you can even find\nproject specific syntax modifications that have never been part of upstream LKC.\n\nIf you are interested in the standalone configuration system (e.g. for your own\nproject) stripped from the Linux kernel, take a look at kconfig-frontends\n(http://ymorin.is-a-geek.org/projects/kconfig-frontends).\n(As of this writing that project is two releases behind, not sure if it is\nstill maintained.)\n\nNewer changes in the configuration language:\n\n2.6.18:\n- add \"option\" for config blocks (first options: \"modules\" and \"defconfig_list\")\n2.6.24:\n- remove \"requires\" (synonymous for \"depends on\", hardly ever used)\n- remove \"depends\" (without \"on\", also synonymous for \"depends on\", was rare)\n- remove \"def_boolean\" (synonymous for \"def_bool\", hardly ever used)\n2.6.25:\n- add option \"env=...\" to import values of environment variables\n- remove \"enable\" property (you have probably never seen this one)\n2.6.26\n- add named choice groups like choice \"FOO\" (hardly ever seen, buggy, avoid it)\n2.6.37:\n- reduce \"mainmenu\" to occur only as first statement\n- add \"visible if\" property to menus\n3.15:\n- add option \"allnoconfig_yes\"\n4.2:\n- add <=, >=, <, > operators\n\n-->\n\n<language name=\"Kconfig\" section=\"Configuration\" extensions=\"Kconfig*\" version=\"6\" kateversion=\"3.4\" casesensitive=\"true\" priority=\"0\" author=\"Martin Walch (walch.martin@web.de)\" license=\"GPLv3\">\n\n\t<highlighting>\n\t\t<contexts>\n\t\t\t<context name=\"input\" attribute=\"plain\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadComChars\" />\n\t\t\t\t<RegExpr String=\"&n;\" lookAhead=\"true\" context=\"#pop!start\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"start\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!stmt_list\">\n\t\t\t\t<RegExpr String=\"mainmenu(?!&n;)\" attribute=\"keyword\" context=\"#pop!mainmenuPrompt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"mainmenuPrompt\" attribute=\"plain\" lineEndContext=\"#pop!stmt_list.error\" fallthrough=\"true\" fallthroughContext=\"#pop!stmt_list.error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"unquotedMainmenuPrompt\" context=\"#pop!stmt_list.nl\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"quotedMainmenuPrompt\" context=\"#pop!stmt_list.nl.SQMainmenuPrompt\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"quotedMainmenuPrompt\" context=\"#pop!stmt_list.nl.DQMainmenuPrompt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"stmt_list.nl.SQMainmenuPrompt\" attribute=\"quotedMainmenuPrompt\" lineEndContext=\"#pop!stmt_list.error\">\n\t\t\t\t<RegExpr String=\"\\$&n;*\" attribute=\"symbolVar\" context=\"#stay\" />\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedMainmenuPrompt\" context=\"#pop!stmt_list.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"stmt_list.nl.DQMainmenuPrompt\" attribute=\"quotedMainmenuPrompt\" lineEndContext=\"#pop!stmt_list.error\">\n\t\t\t\t<RegExpr String=\"\\$&n;*\" attribute=\"symbolVar\" context=\"#stay\" />\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedMainmenuPrompt\" context=\"#pop!stmt_list.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"stmt_list.nl\" attribute=\"plain\" lineEndContext=\"#pop!stmt_list\" fallthrough=\"true\" fallthroughContext=\"#pop!stmt_list.error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t</context>\n\n\t\t\t<!-- Mainmenu over -->\n\n\t\t\t<context name=\"source_stmt\" attribute=\"source\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"unquotedSourceString\" context=\"#pop\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"quotedSourceString\" context=\"#pop!nl.SQStringSource\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"quotedSourceString\" context=\"#pop!nl.DQStringSource\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"nl.SQStringSource\" attribute=\"quotedSourceString\" lineEndContext=\"stmt_list.error\">\n\t\t\t\t<RegExpr String=\"\\$&n;*\" attribute=\"symbolVar\" context=\"#stay\" />\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedSourceString\" context=\"#pop!nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"nl.DQStringSource\" attribute=\"quotedSourceString\" lineEndContext=\"stmt_list.error\">\n\t\t\t\t<RegExpr String=\"\\$&n;*\" attribute=\"symbolVar\" context=\"#stay\" />\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedSourceString\" context=\"#pop!nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"choice_entry\" attribute=\"plain\" lineEndContext=\"#pop!choice_option_list\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"choice_option_list.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"choice_option_list.nl\" attribute=\"plain\" lineEndContext=\"#pop!choice_option_list\" fallthrough=\"true\" fallthroughContext=\"#pop!choice_option_list.error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"choice_option_list\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"error\" >\n\t\t\t\t<RegExpr String=\"prompt(?!&n;)\" attribute=\"property\" context=\"ifOpt.prompt\" />\n\t\t\t\t<RegExpr String=\"(boolean|bool|tristate)(?!&n;)\" attribute=\"type\" context=\"ifOpt.prompt_stmt_opt\" />\n\t\t\t\t<RegExpr String=\"(string|int|hex)(?!&n;)\" attribute=\"badType\" context=\"ifOpt.prompt_stmt_opt\" />\n\t\t\t\t<RegExpr String=\"optional(?!&n;)\" attribute=\"property\" context=\"nl\" />\n\t\t\t\t<RegExpr String=\"default(?!&n;)\" attribute=\"property\" context=\"ifOpt.symbolVar\" />\n\t\t\t\t<RegExpr String=\"depends(?!&n;)\" attribute=\"property\" context=\"depends\" />\n\t\t\t\t<RegExpr String=\"---help---|help(?!&n;)\" attribute=\"property\" context=\"helpEntry\" beginRegion=\"help\" />\n\t\t\t\t<RegExpr String=\"(if|comment|config|menuconfig|source)(?!&n;)\" lookAhead=\"true\" context=\"#pop!choice_block\" />\n\t\t\t\t<RegExpr String=\"endchoice(?!&n;)\" attribute=\"keyword\" context=\"#pop!nl\" endRegion=\"choice_stmt\" />\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadComChars\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"choice_block\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"common_stmt\" />\n\t\t\t\t<RegExpr String=\"endchoice(?!&n;)\" attribute=\"keyword\" context=\"#pop!nl\" endRegion=\"choice_stmt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"depends\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"on(?!&n;)\" attribute=\"property\" context=\"#pop!nl.expr\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.prompt_stmt_opt\" attribute=\"plain\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"unquotedPrompt\" context=\"#pop!ifOpt\" />\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedPrompt\" context=\"#pop!ifOpt.SQPrompt\" />\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedPrompt\" context=\"#pop!ifOpt.DQPrompt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"if(?!&n;)\" attribute=\"keyword\" context=\"#pop!nl.expr\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"nl\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.prompt\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"unquotedPrompt\" context=\"#pop!ifOpt\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"quotedPrompt\" context=\"#pop!ifOpt.SQPrompt\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"quotedPrompt\" context=\"#pop!ifOpt.DQPrompt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.SQPrompt\" attribute=\"quotedPrompt\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedPrompt\" context=\"#pop!ifOpt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.DQPrompt\" attribute=\"quotedPrompt\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedPrompt\" context=\"#pop!ifOpt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"menu_visList.nl.SQPrompt\" attribute=\"quotedPrompt\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedPrompt\" context=\"#pop!menu_visList.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"menu_visList.nl.DQPrompt\" attribute=\"quotedPrompt\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedPrompt\" context=\"#pop!menu_visList.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"comment_stmt.nl.prompt\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"unquotedPrompt\" context=\"#pop!comment_stmt.nl\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"quotedPrompt\" context=\"#pop!comment_stmt.nl.SQPrompt\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"quotedPrompt\" context=\"#pop!comment_stmt.nl.DQPrompt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"comment_stmt.nl.SQPrompt\" attribute=\"quotedPrompt\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedPrompt\" context=\"#pop!comment_stmt.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"comment_stmt.nl.DQPrompt\" attribute=\"quotedPrompt\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedPrompt\" context=\"#pop!comment_stmt.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"comment_stmt.nl\" attribute=\"plain\" lineEndContext=\"#pop!comment_stmt\" fallthrough=\"true\" fallthroughContext=\"error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"comment_stmt\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadComChars\" />\n\t\t\t\t<RegExpr String=\"depends(?!&n;)\" attribute=\"property\" context=\"depends\" />\n\t\t\t\t<RegExpr String=\"(menu|endmenu|source|choice|endchoice|comment|config|menuconfig|if|endif)(?!&n;)\" attribute=\"property\" lookAhead=\"true\" endRegion=\"comment_stmt\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"config_entry_start\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"#pop!config_option_list.nl\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"config_option_list.nl\" attribute=\"plain\" lineEndContext=\"#pop!config_option_list\" fallthrough=\"true\" fallthroughContext=\"#pop!config_option_list.error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"config_option_list\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"error\">\n\t\t\t\t<RegExpr String=\"prompt(?!&n;)\" attribute=\"property\" context=\"ifOpt.prompt\" />\n\t\t\t\t<RegExpr String=\"(boolean|bool|tristate|int|hex|string)(?!&n;)\" attribute=\"type\" context=\"ifOpt.prompt_stmt_opt\" />\n\t\t\t\t<RegExpr String=\"default(?!&n;)\" attribute=\"property\" context=\"ifOpt.expr\" />\n\t\t\t\t<RegExpr String=\"def_(?=(bool|tristate)(?!&n;))\" attribute=\"property\" context=\"ifOpt.expr.type\" />\n\t\t\t\t<RegExpr String=\"depends(?!&n;)\" attribute=\"property\" context=\"depends\" />\n\t\t\t\t<RegExpr String=\"select(?!&n;)\" attribute=\"property\" context=\"ifOpt.symbolVar\" />\n\t\t\t\t<RegExpr String=\"range(?!&n;)\" attribute=\"property\" context=\"range\" />\n\t\t\t\t<RegExpr String=\"---help---|help(?!&n;)\" attribute=\"property\" context=\"helpEntry\" beginRegion=\"help\" />\n\t\t\t\t<RegExpr String=\"option(?!&n;)\" attribute=\"keyword\" context=\"option\" />\n\t\t\t\t<RegExpr String=\"&ws;*(menu|endmenu|source|choice|endchoice|comment|config|menuconfig|if|endif)(?!&n;)\" attribute=\"property\" lookAhead=\"true\" context=\"#pop\" endRegion=\"config_stmt\" />\n\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadComChars\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.expr.type\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<RegExpr String=\"(bool|tristate)(?!&n;)\" attribute=\"type\" context=\"#pop!ifOpt.expr\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"option\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"(defconfig_list|allnoconfig_y|modules)(?!([ \\t]*=|&n;))\" attribute=\"option\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"(defconfig_list|allnoconfig_y|modules)(?=[ \\t]*=)\" attribute=\"option\" context=\"badOptionValue.eq\" />\n\t\t\t\t<RegExpr String=\"env(?!&n;)\" attribute=\"option\" context=\"optionValue.eq\" />\n\t\t\t\t<RegExpr String=\"&n1;+(?![ \\t]*=)\" attribute=\"unknownOption\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"&n1;+(?=[ \\t]*=)\" attribute=\"unknownOptionEq\" context=\"optionValue.eq\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"optionValue.eq\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"=\" attribute=\"optionEq\" context=\"#pop!optionValue\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"badOptionValue.eq\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"=\" attribute=\"badOptionEq\" context=\"#pop!badOptionValue\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"badOptionValue\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"badUnquotedOptionValue\" context=\"#pop\" />\n\t\t\t\t<DetectChar char=\"'\" attribute=\"badQuotedOptionValue\" context=\"#pop!badSQStringOptionValue\" />\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"badQuotedOptionValue\" context=\"#pop!badDQStringOptionValue\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"badSQStringOptionValue\" attribute=\"badQuotedOptionValue\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"'\" attribute=\"badQuotedOptionValue\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"badDQStringOptionValue\" attribute=\"badQuotedOptionValue\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"badQuotedOptionValue\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"SQStringOptionValue\" attribute=\"quotedOptionValue\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedOptionValue\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"DQStringOptionValue\" attribute=\"quotedOptionValue\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedOptionValue\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"optionValue\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"unquotedOptionValue\" context=\"#pop\" />\n\t\t\t\t<DetectChar char=\"'\" attribute=\"quotedOptionValue\" context=\"#pop!SQStringOptionValue\" />\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"quotedOptionValue\" context=\"#pop!DQStringOptionValue\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.symbolVar\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"(n|m|y)(?!&n1;)\" attribute=\"badTristateConst\" context=\"#pop!ifOpt.binOpOrEnd\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"#pop!ifOpt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"range\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"#pop!ifOpt.sym\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"symbolConst\" context=\"#pop!ifOpt.sym.SQSymbolConst\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!ifOpt.sym.DQSymbolConst\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.sym\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"#pop!ifOpt\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"symbolConst\" context=\"#pop!ifOpt.SQSymbolConst\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!ifOpt.DQSymbolConst\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.sym.SQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"'\" attribute=\"symbolConst\" context=\"#pop!ifOpt.sym\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.sym.DQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!ifOpt.sym\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.SQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"'\" attribute=\"symbolConst\" context=\"#pop!ifOpt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.DQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\" >\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!ifOpt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"menu_entry\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"unquotedPrompt\" context=\"#pop!menu_visList.nl\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"quotedPrompt\" context=\"#pop!menu_visList.nl.SQPrompt\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"quotedPrompt\" context=\"#pop!menu_visList.nl.DQPrompt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"menu_visList.nl\" attribute=\"plain\" lineEndContext=\"#pop!menu_visList\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"menu_visList\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!menu_depList\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadComChars\" />\n\t\t\t\t<RegExpr String=\"visible(?!&n1;)\" attribute=\"property\" context=\"visible\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"visible\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"if(?!&n1;)\" attribute=\"property\" context=\"#pop!nl.expr\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"menu_depList\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!menu_stmt\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadComChars\" />\n\t\t\t\t<RegExpr String=\"depends(?!&n1;)\" attribute=\"property\" context=\"depends\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"menu_stmt\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"error\">\n\t\t\t\t<IncludeRules context=\"stmt_list\" />\n\t\t\t\t<RegExpr String=\"endmenu(?!&n1;)\" attribute=\"keyword\" context=\"#pop!nl\" endRegion=\"menu_stmt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"if_stmt\" attribute=\"plain\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"stmt_list\" />\n\t\t\t\t<RegExpr String=\"endif(?!&n1;)\" attribute=\"keyword\" context=\"#pop\" endRegion=\"if_stmt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"stmt_list\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"error\">\n\t\t\t\t<IncludeRules context=\"common_stmt\" />\n\t\t\t\t<RegExpr String=\"choice(?!&n1;)\" attribute=\"keyword\" context=\"choice_entry\" beginRegion=\"choice_stmt\" />\n\t\t\t\t<RegExpr String=\"menu(?!&n1;)\" attribute=\"keyword\" context=\"menu_entry\" beginRegion=\"menu_stmt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"choice_option_list.error\" attribute=\"error\" lineEndContext=\"#pop!choice_option_list\" />\n\t\t\t<context name=\"config_option_list.error\" attribute=\"error\" lineEndContext=\"#pop!config_option_list\" />\n\t\t\t<context name=\"stmt_list.error\" attribute=\"error\" lineEndContext=\"#pop!stmt_list\" />\n\t\t\t<context name=\"error\" attribute=\"error\" lineEndContext=\"#pop\" />\n\n\t\t\t<!-- expressions -->\n\t\t\t<context name=\"nl.expr\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"\\((?=\\))\" attribute=\"exprOp\" context=\"#pop!error\" />\n\t\t\t\t<RegExpr String=\"\\(\" attribute=\"exprOp\" context=\"#pop!nl.parenthesesInstance\" beginRegion=\"parentheses\" />\n\t\t\t\t<RegExpr String=\"!\" attribute=\"exprOp\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"symbolConst\" context=\"#pop!nl.binOpOrEnd.SQSymbolConst\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!nl.binOpOrEnd.DQSymbolConst\" />\n\t\t\t\t<RegExpr String=\"&keyword;\" context=\"#pop!error\" />\n\t\t\t\t<RegExpr String=\"(n|m|y)(?!&n1;)\" attribute=\"tristateConst\" context=\"#pop!nl.binOpOrEnd\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"#pop!nl.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"nl.binOpOrEnd\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!nl\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"\\)\" lookAhead=\"true\" context=\"#pop\" />\n\t\t\t\t<RegExpr String=\"&amp;&amp;\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"\\|\\|\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"=\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"!=\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"&lt;=\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"&gt;=\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"&lt;\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"&gt;\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"nl.binOpOrEnd.SQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"'\" attribute=\"symbolConst\" context=\"#pop!nl.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"nl.binOpOrEnd.DQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!nl.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.expr\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"\\((?=\\))\" context=\"#pop!error\" />\n\t\t\t\t<RegExpr String=\"\\(\" attribute=\"exprOp\" context=\"#pop!ifOpt.parenthesesInstance\" beginRegion=\"parentheses\" />\n\t\t\t\t<RegExpr String=\"!\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"symbolConst\" context=\"#pop!ifOpt.binOpOrEnd.SQSymbolConst\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!ifOpt.binOpOrEnd.DQSymbolConst\" />\n\t\t\t\t<RegExpr String=\"(n|m|y)(?!&n1;)\" attribute=\"tristateConst\" context=\"#pop!ifOpt.binOpOrEnd\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"#pop!ifOpt.binOpOrEnd\" />\n\t\t\t\t<RegExpr String=\"&keyword;\" attribute=\"error\" context=\"#pop!error\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.binOpOrEnd\" attribute=\"plain\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!ifOpt\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"\\)\" lookAhead=\"true\" attribute=\"exprOp\" context=\"#pop\" />\n\t\t\t\t<RegExpr String=\"&amp;&amp;\" attribute=\"exprOp\" context=\"#pop!ifOpt.expr\" />\n\t\t\t\t<RegExpr String=\"\\|\\|\" attribute=\"exprOp\" context=\"#pop!ifOpt.expr\" />\n\t\t\t\t<RegExpr String=\"=\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t\t<RegExpr String=\"!=\" attribute=\"exprOp\" context=\"#pop!nl.expr\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.binOpOrEnd.SQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"'\" attribute=\"symbolConst\" context=\"#pop!ifOpt.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.binOpOrEnd.DQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!ifOpt.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"if_stmt.nl.expr\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"\\((?=\\))\" context=\"#pop!error\" />\n\t\t\t\t<RegExpr String=\"\\(\" attribute=\"exprOp\" context=\"#pop!if_stmt.nl.parenthesesInstance\" beginRegion=\"parentheses\" />\n\t\t\t\t<RegExpr String=\"!\" context=\"#stay\" />\n\t\t\t\t<RegExpr String=\"'\" attribute=\"symbolConst\" context=\"#pop!if_stmt.nl.binOpOrEnd.SQSymbolConst\" />\n\t\t\t\t<RegExpr String=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!if_stmt.nl.binOpOrEnd.DQPlainSymbolConst\" />\n\t\t\t\t<RegExpr String=\"&keyword;\" context=\"#pop!error\" />\n\t\t\t\t<RegExpr String=\"(n|m|y)(?!&n1;)\" attribute=\"tristateConst\" context=\"#pop!if_stmt.nl.binOpOrEnd\" />\n\t\t\t\t<RegExpr String=\"&n1;+\" attribute=\"symbolVar\" context=\"#pop!if_stmt.nl.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"if_stmt.nl.binOpOrEnd\" attribute=\"plain\" lineEndContext=\"#pop!if_stmt\" fallthrough=\"true\" fallthroughContext=\"#pop!nl\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<LineContinue context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<RegExpr String=\"\\)\" lookAhead=\"true\" attribute=\"exprOp\" context=\"#pop\" />\n\t\t\t\t<RegExpr String=\"&amp;&amp;\" attribute=\"exprOp\" context=\"#pop!if_stmt.nl.expr\" />\n\t\t\t\t<RegExpr String=\"\\|\\|\" attribute=\"exprOp\" context=\"#pop!if_stmt.nl.expr\" />\n\t\t\t\t<RegExpr String=\"=\" attribute=\"exprOp\" context=\"#pop!if_stmt.nl.expr\" />\n\t\t\t\t<RegExpr String=\"!=\" attribute=\"exprOp\" context=\"#pop!if_stmt.nl.expr\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"if_stmt.nl.binOpOrEnd.SQSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"'\" attribute=\"symbolConst\" context=\"#pop!if_stmt.nl.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"if_stmt.nl.binOpOrEnd.DQPlainSymbolConst\" attribute=\"symbolConst\" lineEndContext=\"#pop!error\">\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"symbolConst\" context=\"#pop!if_stmt.nl.binOpOrEnd\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"nl.parenthesesInstance\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"nl.expr\">\n\t\t\t\t<RegExpr String=\"\\)\" attribute=\"exprOp\" context=\"#pop!nl.binOpOrEnd\" endRegion=\"parentheses\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ifOpt.parenthesesInstance\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"ifOpt.expr\">\n\t\t\t\t<RegExpr String=\"\\)\" attribute=\"exprOp\" context=\"#pop!ifOpt.binOpOrEnd\" endRegion=\"parentheses\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"if_stmt.nl.parenthesesInstance\" attribute=\"plain\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"nl.expr\">\n\t\t\t\t<RegExpr String=\"\\)\" attribute=\"exprOp\" context=\"#pop!if_stmt.nl.binOpOrEnd\" endRegion=\"parentheses\" />\n\t\t\t</context>\n\n\t\t\t<!-- help texts\n\t\t\t\tThis is ugly: indentation may be a mixture of\n\t\t\t\ttabs and spaces. The first line after a \"help\"\n\t\t\t\tline sets the minimum indentation for the\n\t\t\t\tfollowing lines of the help text. If it has no\n\t\t\t\tindentation, the first non-empty line below MUST\n\t\t\t\tbe indented and that one sets up the minimum\n\t\t\t\t(or the help text will end).\n\n\t\t\t\tOne tab corresponds to eight spaces.\n\n\t\t\t\tAs indentation may arbitrarily switch between\n\t\t\t\ttabs and spaces it is perfectly ok to have e.g.\n\t\t\t\t- first line: 8 spaces\n\t\t\t\t- second line: 1 tab\n\t\t\t\t- third line: 4 spaces, 1 tab\n\n\t\t\t\tTabs are aligned, so this is valid, too:\n\t\t\t\t- first line: 6 spaces, 1 tab\n\t\t\t\t- second line: 1 tab\n\n\t\t\t\tThe help text ends with the first line that does\n\t\t\t\tnot only consist of tabs and spaces and has\n\t\t\t\tless indentation (or at EOF).\n\n\t\t\t\tStoring the reference indentation length is\n\t\t\t\thardly possible. Instead just add contexts for\n\t\t\t\tany indentation length from 1 to 80.\n\n\t\t\t\t80 should cover even any exotic useful case:\n\t\t\t\tIn the field, we hardly encounter more initial\n\t\t\t\tindentation than 2 tabs (i.e. 16 spaces).\n\t\t\t\tThe Linux kernel has a line length policy that\n\t\t\t\tcan be summarized as\n\t\t\t\t\"do not exceed 80 chars without a good reason\"\n\t\t\t-->\n\n\t\t\t<context name=\"helpEntry\" attribute=\"helpText\" lineEndContext=\"#pop!helpDetectIndentation\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<RegExpr String=\"([ \\t]|&badParam;)+---\" attribute=\"badChar\" context=\"#stay\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadParamChars\" />\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpDetectIndentation\" attribute=\"helpText\" lineEndContext=\"#pop!firstLineWasNotIndented\" fallthrough=\"true\" fallthroughContext=\"#pop!error\">\n\t\t\t\t<RegExpr String=\"^(?![ \\t]).*$\" context=\"#pop!firstLineWasNotIndented\" />\n\t\t\t\t<IncludeRules context=\"firstLineWasNotIndented\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"firstLineWasNotIndented\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<RegExpr String=\"^(&tab;){10}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent80\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent79\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent78\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent77\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent76\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent75\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent74\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent73\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent72\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent71\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent70\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent69\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent68\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent67\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent66\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent65\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent64\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent63\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent62\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent61\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent60\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent59\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent58\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent57\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent56\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent55\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent54\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent53\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent52\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent51\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent50\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent49\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent48\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent47\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent46\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent45\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent44\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent43\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent42\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent41\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent40\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent39\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent38\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent37\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent36\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent35\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent34\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent33\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent32\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent31\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent30\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent29\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent28\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent27\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent26\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent25\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent24\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent23\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent22\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent21\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent20\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent19\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent18\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2} .*$\" attribute=\"helpText\" context=\"#pop!helpIndent17\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}.*$\" attribute=\"helpText\" context=\"#pop!helpIndent16\" />\n\t\t\t\t<RegExpr String=\"^&tab;       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent15\" />\n\t\t\t\t<RegExpr String=\"^&tab;      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent14\" />\n\t\t\t\t<RegExpr String=\"^&tab;     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent13\" />\n\t\t\t\t<RegExpr String=\"^&tab;    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent12\" />\n\t\t\t\t<RegExpr String=\"^&tab;   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent11\" />\n\t\t\t\t<RegExpr String=\"^&tab;  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent10\" />\n\t\t\t\t<RegExpr String=\"^&tab; .*$\" attribute=\"helpText\" context=\"#pop!helpIndent9\" />\n\t\t\t\t<RegExpr String=\"^&tab;.*$\" attribute=\"helpText\" context=\"#pop!helpIndent8\" />\n\t\t\t\t<RegExpr String=\"^       .*$\" attribute=\"helpText\" context=\"#pop!helpIndent7\" />\n\t\t\t\t<RegExpr String=\"^      .*$\" attribute=\"helpText\" context=\"#pop!helpIndent6\" />\n\t\t\t\t<RegExpr String=\"^     .*$\" attribute=\"helpText\" context=\"#pop!helpIndent5\" />\n\t\t\t\t<RegExpr String=\"^    .*$\" attribute=\"helpText\" context=\"#pop!helpIndent4\" />\n\t\t\t\t<RegExpr String=\"^   .*$\" attribute=\"helpText\" context=\"#pop!helpIndent3\" />\n\t\t\t\t<RegExpr String=\"^  .*$\" attribute=\"helpText\" context=\"#pop!helpIndent2\" />\n\t\t\t\t<RegExpr String=\"^ .*$\" attribute=\"helpText\" context=\"#pop!helpIndent1\" />\n\n\t\t\t\t<RegExpr String=\"^$\" attribute=\"helpText\" context=\"#stay\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpEatWsLine\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr String=\"^( |\\t)*$\" attribute=\"helpText\" context=\"#stay\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent1\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent2\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent3\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent4\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent5\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent6\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent7\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent8\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent9\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent10\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent11\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent12\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent13\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent14\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent15\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^&tab;(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent16\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent17\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent18\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent19\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent20\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent21\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent22\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent23\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){2}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent24\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent25\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent26\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent27\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent28\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent29\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent30\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent31\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){3}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent32\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent33\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent34\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent35\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent36\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent37\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent38\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent39\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){4}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent40\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent41\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent42\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent43\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent44\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent45\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent46\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent47\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){5}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent48\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent49\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent50\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent51\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent52\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent53\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent54\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent55\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){6}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent56\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent57\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent58\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent59\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent60\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent61\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent62\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent63\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){7}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent64\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent65\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent66\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent67\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent68\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent69\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent70\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent71\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){8}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent72\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent73\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}( |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent74\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}(  |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent75\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}(   |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent76\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}(    |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent77\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}(     |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent78\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}(      |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent79\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){9}(       |\\t)\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpIndent80\" attribute=\"helpText\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!endHelp\">\n\t\t\t\t<IncludeRules context=\"helpEatWsLine\" />\n\t\t\t\t<RegExpr String=\"^(&tab;){10}\" attribute=\"helpText\" context=\"helpText\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"helpText\" attribute=\"helpText\" lineEndContext=\"#pop\" >\n\t\t\t\t<RegExpr String=\".*\" attribute=\"helpText\" context=\"#stay\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"endHelp\" attribute=\"helpText\" lineEndContext=\"#pop\" >\n\t\t\t\t<RegExpr String=\".\" lookAhead=\"true\" attribute=\"helpText\" context=\"#pop\" endRegion=\"help\" />\n\t\t\t</context>\n\n\t\t\t<!-- only as included rules -->\n\t\t\t<context name=\"common_stmt\" attribute=\"plain\" lineEndContext=\"#pop!error\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"wsOrComment\" />\n\t\t\t\t<IncludeRules context=\"ignoreBadComChars\" />\n\t\t\t\t<RegExpr String=\"if(?!&n;)\" attribute=\"keyword\" context=\"if_stmt.nl.expr\" beginRegion=\"if_stmt\" />\n\t\t\t\t<RegExpr String=\"comment(?!&n;)\" attribute=\"keyword\" context=\"comment_stmt.nl.prompt\" beginRegion=\"comment_stmt\" />\n\t\t\t\t<RegExpr String=\"(config|menuconfig)(?!&n;)\" attribute=\"keyword\" context=\"config_entry_start\" beginRegion=\"config_stmt\" />\n\t\t\t\t<RegExpr String=\"source(?!&n;)\" attribute=\"source\" context=\"source_stmt\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"wsOrComment\" attribute=\"plain\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"ws\" />\n\t\t\t\t<RegExpr String=\"#\" lookAhead=\"true\" context=\"lineComment\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ws\" attribute=\"plain\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"&ws;+\" context=\"#stay\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ignoreBadComChars\" attribute=\"badChar\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"&badCom;+\" attribute=\"badChar\" context=\"#stay\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"ignoreBadParamChars\" attribute=\"badChar\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"&badParam;+\" attribute=\"badChar\" context=\"#stay\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"lineComment\" attribute=\"comment\" lineEndContext=\"#pop\" />\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"plain\" defStyleNum=\"dsNormal\" spellChecking=\"true\" />\n\t\t\t<itemData name=\"helpText\" defStyleNum=\"dsNormal\" spellChecking=\"true\" />\n\t\t\t<itemData name=\"unquotedPrompt\" defStyleNum=\"dsNormal\" spellChecking=\"true\" />\n\t\t\t<itemData name=\"quotedPrompt\" defStyleNum=\"dsNormal\" spellChecking=\"true\" />\n\t\t\t<itemData name=\"symbolConst\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"symbolVar\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"property\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"type\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"badType\" defStyleNum=\"dsAlert\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"badChar\" defStyleNum=\"dsAlert\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"error\" defStyleNum=\"dsError\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"option\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"optionEq\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"badOptionEq\" defStyleNum=\"dsNormal\" italic=\"true\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"unknownOption\" defStyleNum=\"dsNormal\" italic=\"true\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"unknownOptionEq\" defStyleNum=\"dsNormal\" italic=\"true\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"unquotedOptionValue\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"quotedOptionValue\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"badUnquotedOptionValue\" defStyleNum=\"dsString\" italic=\"true\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"badQuotedOptionValue\" defStyleNum=\"dsString\" italic=\"true\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"unquotedMainmenuPrompt\" defStyleNum=\"dsString\" />\n\t\t\t<itemData name=\"quotedMainmenuPrompt\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"unquotedSourceString\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"quotedSourceString\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"comment\" defStyleNum=\"dsComment\" spellChecking=\"true\" />\n\t\t\t<itemData name=\"source\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"exprOp\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"tristateConst\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t\t<itemData name=\"badTristateConst\" defStyleNum=\"dsAlert\" spellChecking=\"false\" />\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\" />\n\t\t</comments>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/kdesrc-buildrc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name = \"kdesrc-buildrc\"\n       version = \"2\"\n   kateversion = \"3.5\"\n       section = \"Configuration\"\n    extensions = \".kdesrc-buildrc;kdesrc-buildrc\"\n        author = \"Michael Pyne &lt;mpyne@kde.org&gt;\"\n       license = \"LGPLv3\">\n\n  <highlighting>\n    <list name=\"bools\">\n      <item>true</item>\n      <item>false</item>\n      <item>TRUE</item>\n      <item>FALSE</item>\n      <item>0</item>\n      <item>1</item>\n    </list>\n\n    <list name=\"setEnvOptions\">\n      <item>set-env</item> <!-- Handled separately for special syntax highlighting. -->\n    </list>\n\n    <!-- List of options that can be present in a module-set -->\n    <list name=\"moduleSetOptions\">\n      <item>use-modules</item>\n      <item>ignore-modules</item>\n    </list>\n\n    <!-- These options should only have a boolean value passed to them. -->\n    <list name=\"globalBoolOptions\">\n      <item>async</item>\n      <item>colorful-output</item>\n      <item>disable-agent-check</item>\n      <item>disable-snapshot</item>\n      <item>pretend</item>\n      <item>purge-old-logs</item>\n      <item>stop-on-failure</item>\n      <item>use-idle-io-priority</item>\n    </list>\n\n    <list name=\"boolOptions\">\n      <item>build-system-only</item>\n      <item>build-when-unchanged</item>\n      <item>ignore-kde-structure</item>\n      <item>install-after-build</item>\n      <item>install-session-driver</item>\n      <item>manual-build</item>\n      <item>manual-update</item>\n      <item>no-src</item>\n      <item>reconfigure</item>\n      <item>recreate-configure</item>\n      <item>refresh-build</item>\n      <item>run-tests</item>\n      <item>use-clean-install</item>\n    </list>\n\n    <list name=\"globalOptions\">\n      <item>branch-group</item>\n      <item>git-desired-protocol</item>\n      <item>git-repository-base</item>\n      <item>http-proxy</item>\n      <item>kde-languages</item>\n      <item>niceness</item>\n      <item>debug-level</item>\n      <item>persistent-data-file</item>\n    </list>\n\n    <list name=\"options\">\n      <item>binpath</item>\n      <item>branch</item>\n      <item>build-dir</item>\n      <item>checkout-only</item>\n      <item>cmake-options</item>\n      <item>configure-flags</item>\n      <item>custom-build-command</item>\n      <item>cxxflags</item>\n      <item>dest-dir</item>\n      <item>do-not-compile</item>\n      <item>git-user</item>\n      <item>kdedir</item>\n      <item>libpath</item>\n      <item>log-dir</item>\n      <item>make-install-prefix</item>\n      <item>make-options</item>\n      <item>module-base-path</item>\n      <item>override-build-system</item>\n      <item>override-url</item>\n      <item>prefix</item>\n      <item>qmake-options</item>\n      <item>qtdir</item>\n      <item>remove-after-install</item>\n      <item>repository</item>\n      <item>revision</item>\n      <item>source-dir</item>\n      <item>svn-server</item>\n      <item>tag</item>\n    </list>\n\n    <list name=\"includeKeyword\">\n      <item>include</item>\n    </list>\n    <list name=\"openModule\">\n      <item>module</item>\n      <item>options</item>\n    </list>\n    <list name=\"openModuleSet\">\n      <item>module-set</item>\n    </list>\n    <list name=\"openGlobal\">\n      <item>global</item>\n    </list>\n\n\n    <contexts>\n      <context name=\"Root Level\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <keyword String=\"openGlobal\" attribute=\"Global Declaration\" context=\"Global Options\" beginRegion=\"Global Options\" firstNonSpace=\"true\" />\n        <keyword String=\"openModuleSet\" attribute=\"Module Declaration\" context=\"ModuleSet Options\" beginRegion=\"ModuleSet Options\" firstNonSpace=\"true\" />\n\n        <!-- Only match if a module name is given -->\n        <keyword String=\"openModule\" attribute=\"Module Declaration\" context=\"Module Decl\" firstNonSpace=\"true\" beginRegion=\"Module Options\"/>\n\n        <keyword String=\"includeKeyword\" attribute=\"Option Name\" context=\"Include Decl\" firstNonSpace=\"true\"/>\n        <DetectChar context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      </context>\n\n      <context name=\"Include Decl\" attribute=\"Option Value\" lineEndContext=\"#pop\">\n      </context>\n\n      <context name=\"Module Decl\" attribute=\"Module Name\" lineEndContext=\"Module Options\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Module Name\" String=\"[a-zA-Z0-9/-]+\"/>\n        <DetectChar context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context name=\"Common Module Options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <StringDetect String=\"cmake-options\" context=\"CMake Option\" attribute=\"Option Name\" />\n        <keyword attribute=\"Option Name\" context=\"Environment Name\" String=\"setEnvOptions\" />\n        <keyword attribute=\"Option Name\" context=\"Option Value\" String=\"options\"/>\n        <keyword attribute=\"Option Name\" context=\"Bool Option Value\" String=\"boolOptions\"/>\n\n        <!-- No kdesrc-build options start with digits or a dash. -->\n        <RegExpr attribute=\"Possible Error\" context=\"Option Value\" String=\"[0-9-][a-zA-Z0-9_-]+\" />\n        <RegExpr attribute=\"Unknown Option Name\" context=\"Option Value\" String=\"[a-zA-Z0-9_-]+\" />\n        <DetectChar context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" name=\"CMake Option\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Option Name\" String=\"-D[A-Za-z0-9_]+\"/>\n        <DetectChar char=\"=\"/>\n        <RegExpr attribute=\"Option Value\" String=\"[^\\s]+\"/>\n      </context>\n\n      <context name=\"Global Options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Module Declaration\" context=\"Root Level\" endRegion=\"Global Options\" String=\"end global\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"Possible Error\" String=\"moduleSetOptions\"/>\n\n        <!-- Specific to global section -->\n        <keyword attribute=\"Option Name\" context=\"Option Value\" String=\"globalOptions\"/>\n        <keyword attribute=\"Option Name\" context=\"Bool Option Value\" String=\"globalBoolOptions\"/>\n\n        <IncludeRules context=\"Common Module Options\"/>\n      </context>\n\n      <context name=\"Module Options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Module Declaration\" context=\"Root Level\" endRegion=\"Module Options\" String=\"end module\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Module Declaration\" context=\"Root Level\" endRegion=\"Module Options\" String=\"end options\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"Possible Error\" String=\"moduleSetOptions\"/>\n\n        <!-- Specific to global section -->\n        <keyword attribute=\"Possible Error\" context=\"Option Value\" String=\"globalOptions\"/>\n        <keyword attribute=\"Possible Error\" context=\"Bool Option Value\" String=\"globalBoolOptions\"/>\n\n        <IncludeRules context=\"Common Module Options\"/>\n      </context>\n\n      <context name=\"ModuleSet Options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Module Declaration\" context=\"Root Level\" endRegion=\"ModuleSet Options\" String=\"end module(-?set)?$\" firstNonSpace=\"true\"/>\n        <StringDetect String=\"use-modules\" context=\"ModuleSet use-module\" attribute=\"Option Name\"/>\n        <keyword attribute=\"Option Name\" context=\"Option Value\" String=\"moduleSetOptions\"/>\n\n        <!-- Specific to global section -->\n        <keyword attribute=\"Possible Error\" context=\"Option Value\" String=\"globalOptions\"/>\n        <keyword attribute=\"Possible Error\" context=\"Bool Option Value\" String=\"globalBoolOptions\"/>\n\n        <IncludeRules context=\"Common Module Options\"/>\n      </context>\n\n      <context name=\"ModuleSet use-module\" attribute=\"Module Name\" lineEndContext=\"#pop\">\n        <DetectChar context=\"Comment\" char=\"#\"/>\n        <LineContinue attribute=\"Possible Error\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Option Value\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Variable\" String=\"\\$\\{[a-zA-Z0-9_-]+\\}\"/>\n        <RegExpr attribute=\"Option Value\" String=\"[a-zA-Z:0-9,./+!=@_-]*\" context=\"#stay\" />\n        <DetectChar context=\"Comment\" char=\"#\"/>\n        <LineContinue attribute=\"Option Value\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Bool Option Value\" attribute=\"Possible Error\" lineEndContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal Text\"/>\n        <keyword attribute=\"Option Value\" context=\"#stay\" String=\"bools\"/>\n        <DetectChar context=\"Comment\" char=\"#\"/>\n        <LineContinue attribute=\"Possible Error\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"Environment Name\" attribute=\"Environment Variable Name\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Environment Variable Name\" context=\"Option Value\" String=\"[a-zA-Z0-9_-]+\" />\n        <DetectChar context=\"Comment\" char=\"#\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"         defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"             defStyleNum=\"dsComment\"/>\n      <itemData name=\"Option Name\"         defStyleNum=\"dsKeyword\" bold=\"false\" />\n      <itemData name=\"Unknown Option Name\" defStyleNum=\"dsKeyword\" bold=\"false\" color=\"#7D4C0B\" />\n      <itemData name=\"Environment Variable Name\" defStyleNum=\"dsString\" color=\"#EE6A50\" />\n      <itemData name=\"Option Value\"        defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Variable\"            defStyleNum=\"dsOthers\" />\n      <itemData name=\"Module Declaration\"  defStyleNum=\"dsKeyword\" bold=\"false\"/>\n      <itemData name=\"Module Name\"         defStyleNum=\"dsOthers\" bold=\"true\" />\n      <itemData name=\"Global Declaration\"  defStyleNum=\"dsKeyword\" bold=\"true\" />\n      <itemData name=\"Possible Error\"      defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n    <keywords weakDeliminator=\"-\"/>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/kotlin.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- kotlin language syntax http://kotlinlang.org -->\n<language name=\"Kotlin\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.kt;*.kts\" license=\"LGPLv2+\" author=\"Sergey Mashkov (sergey.mashkov@jetbrains.com)\" style=\"cstyle\" indenter=\"cstyle\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>package</item>\n            <item>import</item>\n\n            <item>sealed</item>\n            <item>data</item>\n            <item>class</item>\n            <item>enum</item>\n            <item>interface</item>\n            <item>companion</item>\n            <item>object</item>\n\n            <item>private</item>\n            <item>public</item>\n            <item>protected</item>\n            <item>internal</item>\n            <item>open</item>\n            <item>final</item>\n\n            <item>get</item>\n            <item>set</item>\n            <item>fun</item>\n            <item>var</item>\n            <item>val</item>\n            <item>constructor</item>\n\n            <item>inline</item>\n            <item>reified</item>\n            <item>crossinline</item>\n            <item>tailrec</item>\n\n            <item>in</item>\n            <item>out</item>\n            <item>is</item>\n            <item>as</item>\n            <item>by</item>\n            <item>where</item>\n\n            <item>vararg</item>\n            <item>get</item>\n            <item>set</item>\n\n            <item>return</item>\n            <item>throw</item>\n\n            <item>typealias</item>\n            <item>typeof</item>\n            <item>override</item>\n            <item>infix</item>\n            <item>operator</item>\n        </list>\n        <list name=\"controlFlowKeyword\">\n            <item>if</item>\n            <item>else</item>\n            <item>when</item>\n\n            <item>for</item>\n            <item>while</item>\n            <item>do</item>\n\n            <item>try</item>\n            <item>catch</item>\n            <item>finally</item>\n\n            <item>continue</item>\n            <item>break</item>\n            <item>yield</item>\n        </list>\n        <list name=\"predeclared\">\n            <item>this</item>\n            <item>super</item>\n            <item>null</item>\n            <item>true</item>\n            <item>false</item>\n        </list>\n        <list name=\"types\">\n            <item>Unit</item>\n            <item>Nothing</item>\n\n            <item>String</item>\n            <item>Char</item>\n\n            <item>Int</item>\n            <item>Long</item>\n            <item>Byte</item>\n            <item>Short</item>\n            <item>Float</item>\n            <item>Double</item>\n\n            <item>Boolean</item>\n        </list>\n\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n                <RegExpr attribute=\"Keyword\" context=\"Imports\" String=\"\\b(package|import)\\b\"/>\n                <RegExpr attribute=\"Keyword\" context=\"FunctionDeclaration\" String=\"\\bfun\\b\"/>\n                <RegExpr attribute=\"Keyword\" context=\"TypeDeclaration\" String=\"\\b(object|class|interface)\\b\"/>\n                <RegExpr attribute=\"Keyword\" context=\"VariableDeclaration\" String=\"\\b(val|var)\\b\"/>\n\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"predeclared\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                <keyword attribute=\"ControlFlowKeyword\" context=\"#stay\" String=\"controlFlowKeyword\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"types\"/>\n\n                <StringDetect attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"MultiLineDoubleString\" beginRegion=\"MultiLineString\"/>\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n                <DetectChar attribute=\"Char\" context=\"Char\" char=\"'\"/>\n\n                <Detect2Chars attribute=\"Comment\" context=\"CommentSingleLine\" char=\"/\" char1=\"/\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"CommentMultiline\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\n                <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n                <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n\n                <RegExpr attribute=\"Annotation\" context=\"#stay\" String=\"@[_\\w][_\\w\\d]*\"/>\n                <RegExpr attribute=\"TODO\" context=\"#stay\" String=\"TODO\\s*\\([^)]*\\)\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n                <Detect2Chars attribute=\"Comment\" context=\"CommentSingleLine\" char=\"#\" char1=\"!\" />\n            </context>\n\n            <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n            </context>\n\n            <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Imports\">\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\" />\n                <StringDetect attribute=\"Keyword\" context=\"TypeName\" String=\"as\" />\n\n                <RegExpr attribute=\"Imports\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(\\.[_\\w][_\\w\\d]*)*(\\.\\*)?\"/>\n            </context>\n\n            <context name=\"VariableDeclaration\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <DetectIdentifier attribute=\"Variable\" context=\"#pop\" />\n            </context>\n\n            <context name=\"TypeDeclaration\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\n                <DetectChar attribute=\"Symbol\" context=\"TypeParameters\" char=\"&lt;\" />\n                <DetectChar attribute=\"Symbol\" context=\"Parameters\" char=\"(\" />\n                <DetectChar attribute=\"Symbol\" context=\"SuperTypes\" char=\":\" />\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"{\" lookAhead=\"true\" />\n            </context>\n\n            <context name=\"SuperTypes\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <keyword attribute=\"Keyword\" context=\"#pop#pop\" String=\"keywords\" lookAhead=\"true\" />\n\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"{\" lookAhead=\"true\" />\n                <DetectChar attribute=\"Symbol\" context=\"Parameters\" char=\"(\" />\n                <DetectChar attribute=\"Symbol\" context=\"TypeParameters\" char=\"&lt;\" />\n\n                <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"[_\\w][_\\w\\d]*\" />\n            </context>\n\n            <context name=\"FunctionDeclaration\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\".\" />\n                <DetectChar attribute=\"Symbol\" context=\"Parameters\" char=\"(\" />\n                <DetectChar attribute=\"Symbol\" context=\"TypeParameters\" char=\"&lt;\" />\n                <DetectChar attribute=\"Symbol\" context=\"TypeName\" char=\":\" />\n\n                <AnyChar attribute=\"Symbol\" context=\"#pop\" String=\"{=\" lookAhead=\"true\" />\n\n                <RegExpr attribute=\"Function\" context=\"#stay\" String=\"[_\\w][_\\w\\d]*\" />\n            </context>\n\n            <context name=\"TypeParameters\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\n                <DetectChar attribute=\"Symbol\" context=\"TypeName\" char=\":\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"*\" />\n\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"&gt;\" />\n                <DetectChar attribute=\"Symbol\" context=\"TypeParameters\" char=\"&lt;\" />\n\n                <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"[_\\w][_\\w\\d]*[?]?\" />\n            </context>\n\n            <context name=\"Parameters\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\" />\n                <DetectChar attribute=\"Symbol\" context=\"TypeName\" char=\":\" />\n                <DetectChar attribute=\"Symbol\" context=\"Expression\" char=\"=\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[_\\w][_\\w\\d]*\" />\n            </context>\n\n            <context name=\"TypeName\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"*\" />\n                <DetectChar attribute=\"Symbol\" context=\"FunctionType\" char=\"(\" />\n                <StringDetect attribute=\"Symbol\" context=\"#stay\" String=\"-&gt;\" />\n                <RegExpr attribute=\"Data Type\" context=\"#pop\" String=\"[_\\w][_\\w\\d]*[?]?\" />\n            </context>\n\n            <context name=\"FunctionType\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\" />\n                <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"[_\\w][_\\w\\d]*[?]?\" />\n                <StringDetect attribute=\"Symbol\" context=\"#stay\" String=\"-&gt;\" />\n                <StringDetect attribute=\"Symbol\" context=\"#stay\" String=\",\" />\n            </context>\n\n            <context name=\"Expression\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <DetectChar attribute=\"Symbol\" context=\"ExpressionInner\" char=\"(\" />\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\" lookAhead=\"true\" />\n\n                <DetectChar attribute=\"Symbol\" context=\"ExpressionInner\" char=\"{\" />\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"}\" lookAhead=\"true\" />\n\n                <RegExpr attribute=\"Symbol\" context=\"TypeParameters\" String=\"&lt;\\w+\" lookAhead=\"true\" />\n\n                <DetectChar attribute=\"Char\" context=\"Char\" char=\"'\"/>\n                <StringDetect attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"MultiLineDoubleString\" beginRegion=\"MultiLineString\"/>\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\n                <Detect2Chars attribute=\"Comment\" context=\"CommentSingleLine\" char=\"/\" char1=\"/\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"CommentMultiline\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\",\"/>\n            </context>\n\n            <context name=\"ExpressionInner\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n                <DetectChar attribute=\"Symbol\" context=\"ExpressionInner\" char=\"(\" />\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\" />\n\n                <DetectChar attribute=\"Symbol\" context=\"ExpressionInner\" char=\"{\" />\n                <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"}\" />\n\n                <RegExpr attribute=\"Symbol\" context=\"TypeParameters\" String=\"&lt;\\w+\" lookAhead=\"true\" />\n\n                <DetectChar attribute=\"Char\" context=\"Char\" char=\"'\"/>\n                <StringDetect attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"MultiLineDoubleString\" beginRegion=\"MultiLineString\"/>\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\n                <Detect2Chars attribute=\"Comment\" context=\"CommentSingleLine\" char=\"/\" char1=\"/\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"CommentMultiline\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n            </context>\n\n            <context attribute=\"Char\" lineEndContext=\"#pop\" name=\"Char\">\n                <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\u[0-9a-fA-F]{4}\"/>\n                <DetectChar attribute=\"Char\" context=\"#pop\" char=\"'\"/>\n            </context>\n            <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n                <LineContinue attribute=\"String\" context=\"#stay\"/>\n                <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n                <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\u[0-9a-fA-F]{4}\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"MultiLineDoubleString\">\n                <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\" endRegion=\"MultiLineString\"/>\n            </context>\n\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentSingleLine\">\n                <StringDetect attribute=\"TODO\" context=\"#stay\" String=\"TODO\" />\n            </context>\n            <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"CommentMultiline\">\n                <StringDetect attribute=\"TODO\" context=\"#stay\" String=\"TODO\" />\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n            </context>\n\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"ControlFlowKeyword\" defStyleNum=\"dsControlFlow\" />\n            <itemData name=\"Function\"     defStyleNum=\"dsFunction\"/>\n            <itemData name=\"Variable\"     defStyleNum=\"dsVariable\"/>\n            <itemData name=\"Imports\"      defStyleNum=\"dsImport\"/>\n            <itemData name=\"Annotation\"   defStyleNum=\"dsAttribute\"/>\n            <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" bold=\"true\" />\n            <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n            <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n            <itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n            <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n            <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n            <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n            <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n            <itemData name=\"TODO\"         defStyleNum=\"dsAlert\" />\n    </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"//\"/>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n        </comments>\n        <keywords casesensitive=\"1\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/latex.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY bullet \"&#xd7;\">\n    <!ENTITY envname \"[a-zA-Z]+\\*?\">\n]>\n<language name=\"LaTeX\" version=\"9\" section=\"Markup\" kateversion=\"5.0\" priority=\"10\" extensions=\"*.tex;*.ltx;*.dtx;*.sty;*.cls;*.bbx;*.cbx;*.lbx;*.tikz;*.pgf\" mimetype=\"text/x-tex\" casesensitive=\"1\" author=\"Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)\" license=\"LGPL\" >\n  <highlighting>\n    <list name=\"beginEnv\">\n      <item>\\begin</item>\n    </list>\n\n    <list name=\"endEnv\">\n      <item>\\end</item>\n    </list>\n\n    <list name=\"Label\">\n      <item>\\Autocite</item>\n      <item>\\autocite</item>\n      <item>\\autoref</item>\n      <item>\\Cite</item>\n      <item>\\cite</item>\n      <item>\\Citeauthor</item>\n      <item>\\citeauthor</item>\n      <item>\\citep</item>\n      <item>\\citet</item>\n      <item>\\citetitle</item>\n      <item>\\citeurl</item>\n      <item>\\citeyear</item>\n      <item>\\cref</item>\n      <item>\\Cref</item>\n      <item>\\cref*</item>\n      <item>\\Cref*</item>\n      <item>\\eqref</item>\n      <item>\\Footcite</item>\n      <item>\\footcite</item>\n      <item>\\footfullcite</item>\n      <item>\\fullcite</item>\n      <item>\\label</item>\n      <item>\\nocite</item>\n      <item>\\pagecite</item>\n      <item>\\pageref</item>\n      <item>\\Parencite</item>\n      <item>\\parencite</item>\n      <item>\\ref</item>\n      <item>\\subref</item>\n      <item>\\subref*</item>\n      <item>\\supercite</item>\n      <item>\\Textcite</item>\n      <item>\\textcite</item>\n      <item>\\vpageref</item>\n      <item>\\vref</item>\n    </list>\n\n    <list name=\"macroFancyLabel\">\n      <item>\\documentclass</item>\n      <item>\\includegraphics</item>\n      <item>\\include</item>\n      <item>\\usepackage</item>\n      <item>\\bibliography</item>\n      <item>\\bibliographystyle</item>\n    </list>\n\n    <list name=\"FancyLabel\">\n      <item>\\cites</item>\n      <item>\\Cites</item>\n      <item>\\parencites</item>\n      <item>\\Parencites</item>\n      <item>\\autocites</item>\n      <item>\\Autocites</item>\n      <item>\\supercites</item>\n      <item>\\footcites</item>\n      <item>\\Footcites</item>\n    </list>\n\n    <list name=\"Sectioning\">\n      <item>\\part*</item>\n      <item>\\part</item>\n      <item>\\chapter*</item>\n      <item>\\chapter</item>\n      <item>\\section*</item>\n      <item>\\section</item>\n      <item>\\subsection*</item>\n      <item>\\subsection</item>\n      <item>\\subsubsection*</item>\n      <item>\\subsubsection</item>\n      <item>\\paragraph*</item>\n      <item>\\paragraph</item>\n      <item>\\subparagraph*</item>\n      <item>\\subparagraph</item>\n    </list>\n\n    <list name=\"SpecialCommand\">\n      <item>\\column</item>\n      <item>\\definecolor</item>\n      <item>\\geometry</item>\n      <item>\\hspace*</item>\n      <item>\\hspace</item>\n      <item>\\input</item>\n      <item>\\newboolean</item>\n      <item>\\rule</item>\n      <item>\\setboolean</item>\n      <item>\\setcounter</item>\n      <item>\\setlength</item>\n      <item>\\special</item>\n      <item>\\textcolor</item>\n      <item>\\vspace*</item>\n      <item>\\vspace</item>\n    </list>\n\n    <list name=\"Footnoting\">\n      <item>\\footnote*</item>\n      <item>\\footnote</item>\n    </list>\n\n    <list name=\"NewCommand\">\n      <item>\\renewcommand*</item>\n      <item>\\renewcommand</item>\n      <item>\\providecommand*</item>\n      <item>\\providecommand</item>\n      <item>\\newcommand*</item>\n      <item>\\newcommand</item>\n    </list>\n\n    <list name=\"DefCommand\">\n      <item>\\edef</item>\n      <item>\\gdef</item>\n      <item>\\xdef</item>\n    </list>\n\n    <list name=\"MathModeEnsure\">\n      <item>\\ensuremath</item>\n    </list>\n\n    <list name=\"iffalse\">\n      <item>\\iffalse</item>\n    </list>\n\n    <list name=\"iffalseend\">\n      <item>\\fi</item>\n      <item>\\else</item>\n    </list>\n\n    <list name=\"Verb\">\n      <item>verb*</item>\n      <item>verb</item>\n      <item>Verb</item>\n    </list>\n\n    <list name=\"Lstinline\">\n      <item>lstinline</item>\n    </list>\n\n    <list name=\"MintParam\">\n      <item>mint</item>\n    </list>\n\n    <list name=\"ListingsEnv\">\n      <item>lstlisting*</item>\n      <item>lstlisting</item>\n    </list>\n\n    <list name=\"MintedEnv\">\n      <item>minted*</item>\n      <item>minted</item>\n    </list>\n\n    <list name=\"VerbatimEnv\">\n      <item>Verbatim*</item>\n      <item>Verbatim</item>\n      <item>BVerbatim*</item>\n      <item>BVerbatim</item>\n      <item>LVerbatim*</item>\n      <item>LVerbatim</item>\n      <item>verbatim*</item>\n      <item>verbatim</item>\n      <item>boxedverbatim*</item>\n      <item>boxedverbatim</item>\n    </list>\n\n    <list name=\"CommentEnv\">\n      <item>comment*</item>\n      <item>comment</item>\n    </list>\n\n    <list name=\"MathEnvParam\">\n      <item>alignat*</item>\n      <item>alignat</item>\n      <item>xalignat*</item>\n      <item>xalignat</item>\n      <item>xxalignat*</item>\n      <item>xxalignat</item>\n    </list>\n\n    <list name=\"MathEnv\">\n      <item>Bmatrix*</item>\n      <item>Bmatrix</item>\n      <item>IEEEeqnarray*</item>\n      <item>IEEEeqnarray</item>\n      <item>IEEEeqnarraybox*</item>\n      <item>IEEEeqnarraybox</item>\n      <item>Vmatrix*</item>\n      <item>Vmatrix</item>\n      <item>align*</item>\n      <item>align</item>\n      <item>bmatrix*</item>\n      <item>bmatrix</item>\n      <item>cases*</item>\n      <item>cases</item>\n      <item>displaymath*</item>\n      <item>displaymath</item>\n      <item>eqnarray*</item>\n      <item>eqnarray</item>\n      <item>equation*</item>\n      <item>equation</item>\n      <item>flalign*</item>\n      <item>flalign</item>\n      <item>gather*</item>\n      <item>gather</item>\n      <item>math*</item>\n      <item>math</item>\n      <item>multline*</item>\n      <item>multline</item>\n      <item>pmatrix*</item>\n      <item>pmatrix</item>\n      <item>smallmatrix*</item>\n      <item>smallmatrix</item>\n      <item>subeqnarray*</item>\n      <item>subeqnarray</item>\n      <item>vmatrix*</item>\n      <item>vmatrix</item>\n    </list>\n\n    <list name=\"TabEnv\">\n      <item>tabularx*</item>\n      <item>tabularx</item>\n      <item>tabular*</item>\n      <item>tabular</item>\n      <item>supertabular*</item>\n      <item>supertabular</item>\n      <item>mpsupertabular*</item>\n      <item>mpsupertabular</item>\n      <item>xtabular*</item>\n      <item>xtabular</item>\n      <item>mpxtabular*</item>\n      <item>mpxtabular</item>\n      <item>longtable*</item>\n      <item>longtable</item>\n    </list>\n\n    <list name=\"MathModeText\">\n      <item>\\text</item>\n      <item>\\textit</item>\n      <item>\\textbf</item>\n      <item>\\textmd</item>\n      <item>\\textsl</item>\n      <item>\\textsc</item>\n      <item>\\textrm</item>\n      <item>\\textsf</item>\n      <item>\\texttt</item>\n      <item>\\textup</item>\n      <item>\\textlf</item>\n      <item>\\textnormal</item>\n      <item>\\shortintertext</item>\n      <item>\\intertext</item>\n      <item>\\mbox</item>\n      <item>\\emph</item>\n    </list>\n\n    <list name=\"ResetHL\">\n      <item>\\KileResetHL</item>\n      <item>\\KateResetHL</item>\n    </list>\n\n    <contexts>\n      <!-- Normal text -->\n      <context name=\"Normal Text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"\\\" attribute=\"Normal Text\" context=\"LatexMacro\" lookAhead=\"true\"/>\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"MathModeTex\"/>\n        <RegExpr String=\"&lt;&lt;.*&gt;&gt;=\" attribute=\"Normal Text\" context=\"NoWeb\" column=\"0\"/>\n        <RegExpr String=\"%\\s*(BEGIN|END)\" attribute=\"Region Marker\" context=\"RegionComment\" firstNonSpace=\"true\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"LatexMacro\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword String=\"beginEnv\" attribute=\"Structure\" context=\"#pop!FindBeginEnvironment\" beginRegion=\"block\"/>\n        <keyword String=\"endEnv\" attribute=\"Structure\" context=\"#pop!FindEndEnvironment\" endRegion=\"block\"/>\n        <keyword String=\"Label\" attribute=\"Structure\" context=\"#pop!Label\"/>\n        <keyword String=\"macroFancyLabel\" attribute=\"Builtin Macro\" context=\"#pop!FancyLabel\"/>\n        <keyword String=\"FancyLabel\" attribute=\"Structure\" context=\"#pop!FancyLabel\"/>\n        <keyword String=\"Sectioning\" attribute=\"Structure\" context=\"#pop!Sectioning\"/>\n        <keyword String=\"SpecialCommand\" attribute=\"Macro\" context=\"#pop!SpecialCommand\"/>\n        <keyword String=\"Footnoting\" attribute=\"Macro\" context=\"#pop!Footnoting\"/>\n        <keyword String=\"NewCommand\" attribute=\"Macro\" context=\"#pop!NewCommand\"/>\n        <keyword String=\"DefCommand\" attribute=\"Macro\" context=\"#pop!DefCommand\"/>\n        <Detect2Chars char=\"\\\" char1=\"(\" attribute=\"Math\" context=\"#pop!MathModeLatex\"/>\n        <Detect2Chars char=\"\\\" char1=\"[\" attribute=\"Math\" context=\"#pop!MathModeLatexEquation\" beginRegion=\"mathMode\"/>\n        <keyword String=\"MathModeEnsure\" attribute=\"Math\" context=\"#pop!MathModeEnsure\"/>\n        <keyword String=\"iffalse\" attribute=\"Comment\" context=\"#pop!Multiline Comment\"/>\n        <DetectChar char=\"\\\" attribute=\"Macro\" context=\"#pop!ContrSeq\"/>\n      </context>\n\n      <!-- NoWeb -->\n      <context name=\"NoWeb\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr String=\"@\\s*$\" attribute=\"Normal Text\" context=\"#pop\" column=\"0\"/>\n      </context>\n\n      <!-- LaTeX sectioning commands -->\n      <context name=\"Sectioning\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"SectioningInside\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n      <context name=\"SectioningInside\" attribute=\"Sectioning Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"SectioningInside\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\"/>\n        <Detect2Chars char=\"\\\" char1=\"(\" attribute=\"Sectioning Math\" context=\"SectioningMathMode\" />\n        <DetectChar char=\"\\\" attribute=\"Sectioning Macro\" context=\"SectioningContrSeq\"/>\n        <DetectChar char=\"$\" attribute=\"Sectioning Math\" context=\"SectioningMathMode\" />\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n      </context>\n      <context name=\"SectioningContrSeq\" attribute=\"Macro\" lineEndContext=\"#pop\">\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"[a-zA-Z]+(\\+?|\\*{0,3})|.\" attribute=\"Sectioning Macro\" context=\"#pop\" />\n      </context>\n      <context name=\"SectioningMathMode\" attribute=\"Sectioning Math\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"$\" char1=\"$\" attribute=\"Error\" context=\"#stay\" />\n        <DetectChar char=\"$\" attribute=\"Sectioning Math\" context=\"#pop\" />\n        <Detect2Chars char=\"\\\" char1=\")\" attribute=\"Sectioning Math\" context=\"#pop\" />\n        <Detect2Chars char=\"\\\" char1=\"]\" attribute=\"Error\" context=\"#stay\" />\n        <DetectChar char=\"\\\" attribute=\"Sectioning Macro Mathmode\" context=\"SectioningMathContrSeq\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n      </context>\n      <context name=\"SectioningMathContrSeq\" attribute=\"Sectioning Macro Mathmode\" lineEndContext=\"#pop\">\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"&envname;|.\" attribute=\"Sectioning Macro Mathmode\" context=\"#pop\" />\n      </context>\n\n      <!-- LaTeX Footnote commands -->\n      <context name=\"Footnoting\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"FootnotingInside\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n      <context name=\"FootnotingInside\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"FootnotingInside\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\"/>\n        <IncludeRules context=\"Normal Text\"/>\n      </context>\n\n      <!-- LaTeX commands \\newcommand and \\renewcommand -->\n      <context name=\"NewCommand\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"LabelParameter\"/>\n        <RegExpr String=\"(\\[\\d\\](\\[[^\\]]*\\])?)?\\{\" attribute=\"Normal Text\" context=\"LabelParameter\"/>\n        <DetectChar char=\"}\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n\n      <!-- LaTeX command \\def -->\n      <context name=\"DefCommand\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <RegExpr String=\"\\\\[a-zA-Z]+[^\\{]*\\{\" attribute=\"Normal Text\" context=\"#pop!CommandParameter\"/>\n        <DetectChar char=\"}\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n\n      <!-- parse command argument -->\n      <context name=\"CommandParameter\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"CommandParameter\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\"/>\n        <RegExpr String=\"\\\\.\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n\n      <!-- LaTeX command in text mode -->\n      <context name=\"ContrSeq\" attribute=\"Macro\" lineEndContext=\"#pop\">\n        <keyword String=\"Verb\" attribute=\"Macro\" context=\"Verb\"/>\n        <keyword String=\"Lstinline\" attribute=\"Macro\" context=\"Lstinline\"/>\n        <keyword String=\"MintParam\" attribute=\"Macro\" context=\"MintParam\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"[a-zA-Z@]+(\\+?|\\*{0,3})|.\" attribute=\"Macro\" context=\"#pop\" />\n      </context>\n\n      <!-- \\mint command with parameter-->\n      <context name=\"MintParam\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"}\" char1=\"[\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Verb\"/>\n        <DetectChar char=\"]\" attribute=\"Normal Text\" context=\"Verb\"/>\n      </context>\n\n      <!-- verb command -->\n      <context name=\"Verb\" attribute=\"Verbatim\" lineEndContext=\"#pop#pop\" >\n        <RegExpr String=\"(.)\" attribute=\"Normal Text\" dynamic=\"true\" context=\"VerbEnd\" />\n      </context>\n      <context name=\"VerbEnd\" attribute=\"Verbatim\" lineEndContext=\"#pop#pop#pop\" dynamic=\"true\" >\n        <StringDetect String=\"%1\" attribute=\"Normal Text\" context=\"#pop#pop#pop\" dynamic=\"true\" />\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"[^%1\\xd7]*\" attribute=\"Verbatim\" context=\"#stay\" dynamic=\"true\" />\n      </context>\n\n      <!-- lstinline command, different from verb as it takes options -->\n      <context name=\"Lstinline\" attribute=\"Verbatim\" lineEndContext=\"#pop#pop\" >\n        <DetectSpaces/>\n        <DetectChar char=\"[\" attribute=\"Normal Text\" context=\"FancyLabelOption\"/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"LstinlineParameter\"/>\n        <RegExpr String=\"(.)\" attribute=\"Normal Text\" dynamic=\"true\" context=\"LstinlineEnd\" />\n      </context>\n      <context name=\"LstinlineEnd\" attribute=\"Verbatim\" lineEndContext=\"#pop#pop#pop\" dynamic=\"true\" >\n        <!-- TODO DetectChar segfault -->\n        <StringDetect String=\"%1\" attribute=\"Normal Text\" context=\"#pop#pop#pop\" dynamic=\"true\" />\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"[^%1\\xd7]*\" attribute=\"Verbatim\" context=\"#stay\" dynamic=\"true\" />\n      </context>\n      <context name=\"LstinlineParameter\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop\"/>\n      </context>\n\n      <!-- label -->\n      <context name=\"Label\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"LabelParameter\"/>\n        <DetectChar char=\"[\" attribute=\"Normal Text\" context=\"LabelOption\"/>\n      </context>\n\n      <context name=\"LabelOption\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"(\" attribute=\"Math\" context=\"MathModeTex\" />\n        <DetectChar char=\"\\\" attribute=\"Macro\" context=\"ContrSeq\"/>\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"MathModeTex\" />\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <DetectChar char=\"]\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"LabelParameter\" attribute=\"Reference\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n      </context>\n\n      <!-- labels from biblatex commands -->\n      <context name=\"FancyLabel\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"FancyLabelParameter\"/>\n        <DetectChar char=\"[\" attribute=\"Normal Text\" context=\"FancyLabelOption\"/>\n        <DetectChar char=\"(\" attribute=\"Normal Text\" context=\"FancyLabelRoundBrackets\"/>\n      </context>\n\n      <context name=\"FancyLabelParameter\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"(\" attribute=\"Math\" context=\"MathModeTex\" />\n        <DetectChar char=\"\\\" attribute=\"Macro\" context=\"ContrSeq\"/>\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"MathModeTex\" />\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"FancyLabelOption\" attribute=\"Option Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"LabelOption\"/>\n      </context>\n\n      <context name=\"FancyLabelRoundBrackets\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <Detect2Chars char=\"\\\" char1=\"(\" attribute=\"Math\" context=\"MathModeLatex\" />\n        <DetectChar char=\"\\\" attribute=\"Macro\" context=\"ContrSeq\"/>\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"MathModeTex\" />\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <DetectChar char=\")\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <!-- Special commands -->\n      <context name=\"SpecialCommand\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"SpecialCommandParameterOption\"/>\n      </context>\n\n      <context name=\"SpecialCommandParameterOption\" attribute=\"Option Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <Detect2Chars char=\"\\\" char1=\"(\" attribute=\"Math\" context=\"MathModeTex\" />\n        <DetectChar char=\"\\\" attribute=\"Macro\" context=\"ContrSeq\"/>\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"MathModeTex\" />\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <!-- end of an environment -->\n      <context name=\"FindEndEnvironment\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"EndEnvironment\"/>\n        <RegExpr String=\"\\S\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"EndEnvironment\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&envname;\" attribute=\"Environment\" context=\"LatexEnvEnd\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"LatexEnvEnd\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" endRegion=\"block\" context=\"#pop#pop#pop\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n\n      <!-- start of an environment -->\n      <context name=\"FindBeginEnvironment\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"BeginEnvironment\"/>\n        <RegExpr String=\".\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <!-- filter the environment name and check the type -->\n      <context name=\"BeginEnvironment\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <keyword String=\"ListingsEnv\" attribute=\"Environment\" context=\"ListingsEnv\"/>\n        <keyword String=\"MintedEnv\" attribute=\"Environment\" context=\"MintedEnv\"/>\n        <keyword String=\"VerbatimEnv\" attribute=\"Environment\" context=\"VerbatimEnv\" lookAhead=\"true\"/>\n        <keyword String=\"CommentEnv\" attribute=\"Environment\" context=\"CommentEnv\"/>\n        <keyword String=\"MathEnvParam\" attribute=\"Environment\" context=\"MathEnvWithParam\"/>\n        <keyword String=\"MathEnv\" attribute=\"Environment\" context=\"MathEnv\"/>\n        <keyword String=\"TabEnv\" attribute=\"Environment\" context=\"TabEnv\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"&envname;\" attribute=\"Environment\" context=\"LatexEnv\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n\n      <!-- environment type 1: normal -->\n      <context name=\"LatexEnv\" attribute=\"Error\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop\"/>\n      </context>\n\n      <context name=\"VerbatimEnv\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <WordDetect String=\"verbatim*\" attribute=\"Environment\" context=\"VerbatimEnv1\"/>\n        <WordDetect String=\"verbatim\" attribute=\"Environment\" context=\"VerbatimEnv1\"/>\n        <WordDetect String=\"boxedverbatim*\" attribute=\"Environment\" context=\"VerbatimEnv2\"/>\n        <WordDetect String=\"boxedverbatim\" attribute=\"Environment\" context=\"VerbatimEnv2\"/>\n\n        <WordDetect String=\"Verbatim*\" attribute=\"Environment\" context=\"VerbatimEnv3\"/>\n        <WordDetect String=\"Verbatim\" attribute=\"Environment\" context=\"VerbatimEnv3\"/>\n        <WordDetect String=\"BVerbatim*\" attribute=\"Environment\" context=\"VerbatimEnv4\"/>\n        <WordDetect String=\"BVerbatim\" attribute=\"Environment\" context=\"VerbatimEnv4\"/>\n        <WordDetect String=\"LVerbatim*\" attribute=\"Environment\" context=\"VerbatimEnv5\"/>\n        <WordDetect String=\"LVerbatim\" attribute=\"Environment\" context=\"VerbatimEnv5\"/>\n      </context>\n\n      <!-- environment type 2: verbatim without parameter -->\n      <context name=\"VerbatimEnv1\" attribute=\"Error\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Verbatim1\"/>\n      </context>\n      <context name=\"Verbatim1\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\end(?=\\s*\\{verbatim\\*?\\})\" attribute=\"Structure\" context=\"VerbFindEnd\"/>\n      </context>\n\n      <context name=\"VerbatimEnv2\" attribute=\"Error\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Verbatim2\"/>\n      </context>\n      <context name=\"Verbatim2\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\end(?=\\s*\\{boxedverbatim\\*?\\})\" attribute=\"Structure\" context=\"VerbFindEnd\"/>\n      </context>\n\n      <!-- environment type 3: verbatim with optional parameter -->\n      <context name=\"VerbatimEnv3\" attribute=\"Error\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"VerbatimEnv3Param\"/>\n      </context>\n      <context name=\"VerbatimEnv3Param\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Verbatim3\">\n        <DetectSpaces/>\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"Normal Text\" context=\"#pop!Verbatim3\"/>\n      </context>\n      <context name=\"Verbatim3\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\end(?=\\s*\\{Verbatim\\*?\\})\" attribute=\"Structure\" context=\"VerbFindEnd\"/>\n      </context>\n\n      <context name=\"VerbatimEnv4\" attribute=\"Error\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"VerbatimEnv4Param\"/>\n      </context>\n      <context name=\"VerbatimEnv4Param\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Verbatim4\">\n        <DetectSpaces/>\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"Normal Text\" context=\"#pop!Verbatim4\"/>\n      </context>\n      <context name=\"Verbatim4\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\end(?=\\s*\\{BVerbatim\\*?\\})\" attribute=\"Structure\" context=\"VerbFindEnd\"/>\n      </context>\n\n      <context name=\"VerbatimEnv5\" attribute=\"Error\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"VerbatimEnv5Param\"/>\n      </context>\n      <context name=\"VerbatimEnv5Param\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Verbatim5\">\n        <DetectSpaces/>\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"Normal Text\" context=\"#pop!Verbatim5\"/>\n      </context>\n      <context name=\"Verbatim5\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\end(?=\\s*\\{LVerbatim\\*?\\})\" attribute=\"Structure\" context=\"VerbFindEnd\"/>\n      </context>\n\n      <!-- environment type 4: listings environment with optional parameter and HL switching-->\n      <context name=\"ListingsEnv\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop!ListingsEnvParam\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n      <context name=\"ListingsEnvParam\" attribute=\"Normal Text\" lineEndContext=\"#pop!UnknownHighlighting\" fallthrough=\"true\" fallthroughContext=\"#pop!UnknownHighlighting\">\n        <DetectSpaces/>\n        <DetectChar char=\"[\" attribute=\"Normal Text\" context=\"#pop!ListingsEnvParamInside\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n      <context name=\"ListingsEnvParamInside\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectIdentifier/>\n        <RegExpr String=\"\\s*language\\s*=\\s*(?=[^],])\" attribute=\"Normal Text\" context=\"HighlightingSelector\"/>\n        <DetectChar char=\"]\" attribute=\"Normal Text\" context=\"ListingsEnvParamEnd\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n      <context name=\"ListingsEnvParamEnd\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop!UnknownHighlighting\" fallthrough=\"true\" fallthroughContext=\"#pop#pop!UnknownHighlighting\">\n        <DetectSpaces/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n\n      <!-- environment type 5: minted environment with optional and HL switching -->\n      <context name=\"MintedEnv\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop!MintedEnvParam\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n      <context name=\"MintedEnvParam\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"[\" attribute=\"Normal Text\" context=\"#pop!MintedEnvParamInside\"/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"HighlightingSelector\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n      <context name=\"MintedEnvParamInside\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"]\" attribute=\"Normal Text\" context=\"#pop!MintedEnvLang\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <RegExpr String=\"\\\\&envname;\" attribute=\"Macro\" context=\"#stay\"/>\n      </context>\n      <context name=\"MintedEnvLang\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"HighlightingSelector\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n      </context>\n\n      <!-- parse verbatim text for lstinline and minted -->\n      <context name=\"UnknownHighlighting\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\end(?=\\s*\\{(lstlisting|minted)\\*?\\})\" attribute=\"Structure\" context=\"UnknownHighlightingEnd\"/>\n      </context>\n      <context name=\"UnknownHighlightingEnd\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop#pop#pop#pop#pop\" endRegion=\"block\"/>\n        <DetectIdentifier/>\n      </context>\n\n\n      <!-- Selector for different highlightning schemes, in case the language is not implemented we pop and thus fallback to verbatim -->\n      <context name=\"HighlightingSelector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <WordDetect String=\"C++\" insensitive=\"true\" context=\"HighlightingBeginC++\"/>\n        <WordDetect String=\"Python\" insensitive=\"true\" context=\"HighlightingBeginPython\"/>\n        <DetectChar char=\"}\" context=\"#pop!UnknownHighlighting\"/>\n        <DetectChar char=\"]\" context=\"#pop!UnknownHighlighting\"/>\n        <RegExpr String=\"[^]}]*\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"HighlightingCommon\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr String=\"\\\\end\\s*\\{(lstlisting|minted)\\*?\\}\" attribute=\"Structure\" lookAhead=\"true\" context=\"#pop#pop#pop#pop#pop#pop\"/>\n      </context>\n\n      <context name=\"HighlightingBeginC++\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" context=\"HighlightingC++\"/>\n        <DetectChar char=\"]\" context=\"HighlightingC++\"/>\n        <!-- Eat the trailing characters including } or ] after the language specification -->\n        <RegExpr String=\"[^]}]*\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"HighlightingC++\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightingCommon\"/>\n        <IncludeRules context=\"##C++\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"HighlightingBeginPython\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" context=\"HighlightingPython\"/>\n        <DetectChar char=\"]\" context=\"HighlightingPython\"/>\n        <RegExpr String=\"[^]}]*\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"HighlightingPython\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"HighlightingCommon\"/>\n        <IncludeRules context=\"##Python\"/>\n      </context>\n\n      <!-- end of verbatim environment -->\n      <context name=\"VerbFindEnd\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop#pop#pop#pop\" endRegion=\"block\"/>\n        <keyword String=\"VerbatimEnv\" attribute=\"Environment\"/>\n      </context>\n\n      <!-- begin comment environment -->\n      <context name=\"CommentEnv\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"BlockComment\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n       </context>\n\n      <!-- parse comment text -->\n      <context name=\"BlockComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <RegExpr String=\"\\\\end(?=\\s*\\{comment\\*?\\})\" attribute=\"Structure\" context=\"CommFindEnd\"/>\n      </context>\n\n      <!-- end of comment environment -->\n      <context name=\"CommFindEnd\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop#pop#pop\" endRegion=\"block\"/>\n        <keyword String=\"CommentEnv\" attribute=\"Environment\"/>\n      </context>\n\n      <!-- environment type 4: math environment with its own mathmode -->\n      <context name=\"MathEnv\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"MathModeEnv\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n\n      <!-- environment type 5: math environment with its own mathmode and parameter -->\n      <context name=\"MathEnvWithParam\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"MathEnvWithParamInside\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n      <context name=\"MathEnvWithParamInside\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RangeDetect char=\"[\" char1=\"]\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"MathEnvParamInside\"/>\n      </context>\n      <context name=\"MathEnvParamInside\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop!MathModeEnv\"/>\n      </context>\n\n      <!-- parse math environment -->\n      <context name=\"MathModeEnv\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <keyword String=\"beginEnv\" attribute=\"Structure\" context=\"FindBeginEnvironmentInMathMode\" beginRegion=\"block\"/>\n        <keyword String=\"endEnv\" attribute=\"Structure\" context=\"MathFindEnd\" endRegion=\"block\"/>\n        <keyword String=\"MathModeText\" attribute=\"Macro Mathmode\" context=\"MathModeText\"/>\n        <RegExpr String=\"\\\\[()\\[\\]]|\\$\" attribute=\"Error\" context=\"#stay\"/>\n        <DetectChar char=\"\\\" attribute=\"Macro Mathmode\" context=\"MathContrSeq\"/>\n        <RegExpr String=\"%\\s*(BEGIN|END)\" attribute=\"Region Marker\" context=\"RegionComment\" firstNonSpace=\"true\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n      </context>\n\n      <!-- start of an environment in math mode -->\n      <context name=\"FindBeginEnvironmentInMathMode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"BeginEnvironmentInMathMode\"/>\n        <RegExpr String=\".\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <!-- filter the environment name and check the type in math mode -->\n      <context name=\"BeginEnvironmentInMathMode\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <keyword String=\"ListingsEnv\" attribute=\"Environment\" context=\"ListingsEnv\"/>\n        <keyword String=\"MintedEnv\" attribute=\"Environment\" context=\"MintedEnv\"/>\n        <keyword String=\"VerbatimEnv\" attribute=\"Environment\" context=\"VerbatimEnv\" lookAhead=\"true\"/>\n        <keyword String=\"CommentEnv\" attribute=\"Environment\" context=\"CommentEnv\"/>\n        <keyword String=\"TabEnv\" attribute=\"Environment\" context=\"TabEnv\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <!-- keywords in MathEnvParam and MathEnv. Do not use keyword to avoid autocomplete -->\n        <RegExpr String=\"(equation|IEEEeqnarray(box)?|([BVvbp]|small)matrix|(fl)?align|x{0,2}alignat|cases|displaymath|gather|math|multline|(sub)?eqnarray)(?=[^a-zA-Z]|$)\\*?\" attribute=\"Error\" context=\"#pop\"/>\n        <RegExpr String=\"&envname;\" attribute=\"Environment\" context=\"LatexEnv\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n\n      <!-- end of math environment -->\n      <context name=\"MathFindEnd\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <keyword String=\"MathEnvParam\" attribute=\"Environment\" context=\"MathFindEndInside\"/>\n        <keyword String=\"MathEnv\" attribute=\"Environment\" context=\"MathFindEndInside\"/>\n        <RegExpr String=\"&envname;\" attribute=\"Environment\" context=\"NoMathFindEndInside\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n      <context name=\"MathFindEndInside\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop#pop#pop#pop\" endRegion=\"block\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n      <context name=\"NoMathFindEndInside\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop\" endRegion=\"block\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n\n      <!-- environment type 9: tabular -->\n      <context name=\"TabEnv\" attribute=\"Environment\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"Tab\"/>\n        <RegExpr String=\"[^}]*\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n\n      <!-- parse tabular text -->\n      <context name=\"Tab\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&amp;\" attribute=\"Ampersand\" context=\"#stay\"/>\n        <Detect2Chars char=\"@\" char1=\"{\" attribute=\"Column Separator\" context=\"Column Separator\"/>\n        <keyword String=\"endEnv\" attribute=\"Structure\" context=\"TabFindEnd\"/>\n        <IncludeRules context=\"Normal Text\" />\n      </context>\n\n      <context name=\"Column Separator\" attribute=\"Column Separator\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Column Separator\" context=\"Column Separator\"/>\n        <DetectChar char=\"}\" attribute=\"Column Separator\" context=\"#pop\"/>\n      </context>\n\n      <!-- end of tabular environment -->\n      <context name=\"TabFindEnd\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"#stay\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop#pop#pop\" endRegion=\"block\"/>\n        <keyword String=\"TabEnv\" attribute=\"Environment\" context=\"#stay\"/>\n      </context>\n\n      <!-- math mode: starting with $ -->\n      <context name=\"MathModeTex\" attribute=\"Math\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!MathMode\">\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"#pop!MathModeDisplay\" beginRegion=\"mathMode\"/>\n      </context>\n      <context name=\"MathMode\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"#pop\"/>\n        <IncludeRules context=\"MathModeCommon\"/>\n      </context>\n\n      <!-- math mode: starting with $$ -->\n      <context name=\"MathModeDisplay\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"$\" char1=\"$\" attribute=\"Math\" context=\"#pop\" endRegion=\"mathMode\"/>\n        <DetectChar char=\"$\" attribute=\"Error\" context=\"#stay\"/>\n        <IncludeRules context=\"MathModeCommon\"/>\n      </context>\n\n      <!-- math mode: starting with \\( -->\n      <context name=\"MathModeLatex\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"\\\" char1=\")\" attribute=\"Math\" context=\"#pop\"/>\n        <IncludeRules context=\"MathModeCommon\"/>\n      </context>\n\n      <!-- math mode: starting with \\[ -->\n      <context name=\"MathModeLatexEquation\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"\\\" char1=\"]\" attribute=\"Math\" context=\"#pop\" endRegion=\"mathMode\"/>\n        <IncludeRules context=\"MathModeCommon\"/>\n      </context>\n\n      <!-- math mode: \\ensuremath{...} -->\n      <context name=\"MathModeEnsure\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Math\" context=\"#pop!MathModeEnsureInside\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n      <context name=\"MathModeEnsureInside\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Math\" context=\"MathModeEnsureInside\" />\n        <DetectChar char=\"}\" attribute=\"Math\" context=\"#pop\" />\n        <IncludeRules context=\"MathModeCommon\"/>\n      </context>\n\n      <!-- math mode common -->\n      <context name=\"MathModeCommon\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <keyword String=\"beginEnv\" attribute=\"Structure\" context=\"MathEnvironment\" beginRegion=\"block\"/>\n        <keyword String=\"endEnv\" attribute=\"Structure\" context=\"MathEnvironmentEnd\" endRegion=\"block\"/>\n        <keyword String=\"MathModeText\" attribute=\"Macro Mathmode\" context=\"MathModeText\" />\n        <DetectChar char=\"\\\" attribute=\"Macro Mathmode\" context=\"MathContrSeq\"/>\n        <RegExpr String=\"%\\s*(BEGIN|END)\" attribute=\"Region Marker\" context=\"RegionComment\" firstNonSpace=\"true\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n      </context>\n      <context name=\"MathEnvironment\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"MathEnvironmentInside\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n      <context name=\"MathEnvironmentInside\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <RegExpr String=\"&envname;\" attribute=\"Environment\" context=\"#stay\"/>\n        <RegExpr String=\"[^}a-zA-Z]+|.\" attribute=\"Error\" context=\"#stay\"/>\n      </context>\n      <context name=\"MathEnvironmentEnd\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"MathEnvironmentEndInside\"/>\n        <RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n      </context>\n      <context name=\"MathEnvironmentEndInside\" attribute=\"Environment\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <WordDetect String=\"ensuremath\" attribute=\"Environment\" context=\"#pop!LatexEnvEnd\"/>\n        <RegExpr String=\"&envname;\" attribute=\"Environment\" context=\"#stay\"/>\n        <RegExpr String=\"[^}a-zA-Z]+|.\" attribute=\"Error\" context=\"#pop#pop\"/>\n      </context>\n\n      <!-- command in mathmode -->\n      <context name=\"MathContrSeq\" attribute=\"Macro Mathmode\" lineEndContext=\"#pop\">\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"&envname;|.\" attribute=\"Macro Mathmode\" context=\"#pop\" />\n      </context>\n\n      <!-- text in mathmode -->\n      <context name=\"MathModeText\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"MathContrSeq\">\n        <DetectSpaces/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"MathModeTextParameterStart\"/>\n      </context>\n      <context name=\"MathModeTextInside\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"MathModeTextParameterStart\"/>\n      </context>\n\n      <context name=\"MathModeTextParameterStart\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <DetectChar char=\"&bullet;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RangeDetect char=\"$\" char1=\"$\" attribute=\"Math\" context=\"#stay\"/>\n        <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"MathModeTextInside\" lookAhead=\"true\"/>\n        <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char=\"\\\" attribute=\"Macro Mathmode\" context=\"MathContrSeq\"/>\n      </context>\n\n      <!-- iffalse aka multiline comment -->\n      <context name=\"Multiline Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <keyword String=\"iffalseend\" attribute=\"Comment\" context=\"#pop\"/>\n      </context>\n\n     <!-- comment -->\n      <context name=\"RegionComment\" attribute=\"Region Marker\" lineEndContext=\"#pop\"/>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier/>\n        <keyword String=\"ResetHL\" attribute=\"Comment\" context=\"Normal Text\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Option Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Macro\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"false\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n      <itemData name=\"Math\" defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n      <!-- begin/end -->\n      <itemData name=\"Structure\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Builtin Macro\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n      <itemData name=\"Macro Mathmode\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n      <itemData name=\"Environment\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n      <itemData name=\"Reference\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n      <itemData name=\"Verbatim\" defStyleNum=\"dsVerbatimString\" spellChecking=\"false\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n      <itemData name=\"Bullet\" defStyleNum=\"dsInformation\" spellChecking=\"false\"/>\n      <itemData name=\"Ampersand\" defStyleNum=\"dsOperator\" bold=\"1\" spellChecking=\"false\"/>\n      <itemData name=\"Column Separator\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <!-- in section headers -->\n      <itemData name=\"Sectioning Text\" defStyleNum=\"dsNormal\" bold=\"1\"/>\n      <itemData name=\"Sectioning Macro\" defStyleNum=\"dsFunction\" bold=\"1\" spellChecking=\"false\"/>\n      <itemData name=\"Sectioning Math\" defStyleNum=\"dsSpecialString\" bold=\"1\"/>\n      <itemData name=\"Sectioning Macro Mathmode\" defStyleNum=\"dsSpecialChar\" bold=\"1\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords weakDeliminator=\"\\*\" additionalDeliminator=\"$\" wordWrapDeliminator=\",{}[]\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"%\" />\n    </comments>\n  </general>\n\n  <spellchecking>\n    <encodings>\n      <encoding char=\"&#192;\" string=\"\\`{A}\" />\n      <encoding char=\"&#192;\" string=\"\\`A\" />\n      <encoding char=\"&#193;\" string=\"\\'{A}\" />\n      <encoding char=\"&#193;\" string=\"\\'A\" />\n      <encoding char=\"&#194;\" string=\"\\^{A}\" />\n      <encoding char=\"&#194;\" string=\"\\^A\" />\n      <encoding char=\"&#195;\" string=\"\\~{A}\" />\n      <encoding char=\"&#195;\" string=\"\\~A\" />\n      <encoding char=\"&#196;\" string=\"\\&#34;{A}\" />\n      <encoding char=\"&#196;\" string=\"\\&#34;A\" />\n      <encoding char=\"&#197;\" string=\"\\AA{}\" />\n      <encoding char=\"&#198;\" string=\"\\AE{}\" />\n      <encoding char=\"&#199;\" string=\"\\c{C}\" />\n      <encoding char=\"&#200;\" string=\"\\`{E}\" />\n      <encoding char=\"&#200;\" string=\"\\`E\" />\n      <encoding char=\"&#201;\" string=\"\\'{E}\" />\n      <encoding char=\"&#201;\" string=\"\\'E\" />\n      <encoding char=\"&#202;\" string=\"\\^{E}\" />\n      <encoding char=\"&#202;\" string=\"\\^E\" />\n      <encoding char=\"&#203;\" string=\"\\&#34;{E}\" />\n      <encoding char=\"&#203;\" string=\"\\&#34;E\" />\n      <encoding char=\"&#204;\" string=\"\\`{I}\" />\n      <encoding char=\"&#204;\" string=\"\\`I\" />\n      <encoding char=\"&#205;\" string=\"\\'{I}\" />\n      <encoding char=\"&#205;\" string=\"\\'I\" />\n      <encoding char=\"&#206;\" string=\"\\^{I}\" />\n      <encoding char=\"&#206;\" string=\"\\^I\" />\n      <encoding char=\"&#207;\" string=\"\\&#34;{I}\" />\n      <encoding char=\"&#207;\" string=\"\\&#34;I\" />\n      <encoding char=\"&#208;\" string=\"\\DH{}\" />\n      <encoding char=\"&#209;\" string=\"\\~{N}\" />\n      <encoding char=\"&#209;\" string=\"\\~N\" />\n      <encoding char=\"&#210;\" string=\"\\`{O}\" />\n      <encoding char=\"&#210;\" string=\"\\`O\" />\n      <encoding char=\"&#211;\" string=\"\\'{O}\" />\n      <encoding char=\"&#211;\" string=\"\\'O\" />\n      <encoding char=\"&#212;\" string=\"\\^{O}\" />\n      <encoding char=\"&#212;\" string=\"\\^O\" />\n      <encoding char=\"&#213;\" string=\"\\~{O}\" />\n      <encoding char=\"&#213;\" string=\"\\~O\" />\n      <encoding char=\"&#214;\" string=\"\\&#34;{O}\" />\n      <encoding char=\"&#214;\" string=\"\\&#34;O\" />\n      <encoding char=\"&#216;\" string=\"\\O{}\" />\n      <encoding char=\"&#217;\" string=\"\\`{U}\" />\n      <encoding char=\"&#217;\" string=\"\\`U\" />\n      <encoding char=\"&#218;\" string=\"\\'{U}\" />\n      <encoding char=\"&#218;\" string=\"\\'U\" />\n      <encoding char=\"&#219;\" string=\"\\^{U}\" />\n      <encoding char=\"&#219;\" string=\"\\^U\" />\n      <encoding char=\"&#220;\" string=\"\\&#34;{U}\" />\n      <encoding char=\"&#220;\" string=\"\\&#34;U\" />\n      <encoding char=\"&#221;\" string=\"\\'{Y}\" />\n      <encoding char=\"&#221;\" string=\"\\'Y\" />\n      <encoding char=\"&#222;\" string=\"\\TH{}\" />\n      <encoding char=\"&#223;\" string=\"\\ss{}\" />\n      <encoding char=\"&#224;\" string=\"\\`{a}\" />\n      <encoding char=\"&#224;\" string=\"\\`a\" />\n      <encoding char=\"&#225;\" string=\"\\'{a}\" />\n      <encoding char=\"&#225;\" string=\"\\'a\" />\n      <encoding char=\"&#226;\" string=\"\\^{a}\" />\n      <encoding char=\"&#226;\" string=\"\\^a\" />\n      <encoding char=\"&#227;\" string=\"\\~{a}\" />\n      <encoding char=\"&#227;\" string=\"\\~a\" />\n      <encoding char=\"&#228;\" string=\"\\&#34;{a}\" />\n      <encoding char=\"&#228;\" string=\"\\&#34;a\" />\n      <encoding char=\"&#229;\" string=\"\\aa{}\" />\n      <encoding char=\"&#230;\" string=\"\\ae{}\" />\n      <encoding char=\"&#231;\" string=\"\\c{c}\" />\n      <encoding char=\"&#232;\" string=\"\\`{e}\" />\n      <encoding char=\"&#232;\" string=\"\\`e\" />\n      <encoding char=\"&#233;\" string=\"\\'{e}\" />\n      <encoding char=\"&#233;\" string=\"\\'e\" />\n      <encoding char=\"&#234;\" string=\"\\^{e}\" />\n      <encoding char=\"&#234;\" string=\"\\^e\" />\n      <encoding char=\"&#235;\" string=\"\\&#34;{e}\" />\n      <encoding char=\"&#235;\" string=\"\\&#34;e\" />\n      <encoding char=\"&#236;\" string=\"\\`{i}\" />\n      <encoding char=\"&#236;\" string=\"\\`i\" />\n      <encoding char=\"&#237;\" string=\"\\'{i}\" />\n      <encoding char=\"&#237;\" string=\"\\'i\" />\n      <encoding char=\"&#238;\" string=\"\\^{i}\" />\n      <encoding char=\"&#238;\" string=\"\\^i\" />\n      <encoding char=\"&#239;\" string=\"\\&#34;{i}\" />\n      <encoding char=\"&#239;\" string=\"\\&#34;i\" />\n      <encoding char=\"&#240;\" string=\"\\dh{}\" />\n      <encoding char=\"&#241;\" string=\"\\~{n}\" />\n      <encoding char=\"&#241;\" string=\"\\~n\" />\n      <encoding char=\"&#242;\" string=\"\\`{o}\" />\n      <encoding char=\"&#242;\" string=\"\\`o\" />\n      <encoding char=\"&#243;\" string=\"\\'{o}\" />\n      <encoding char=\"&#243;\" string=\"\\'o\" />\n      <encoding char=\"&#244;\" string=\"\\^{o}\" />\n      <encoding char=\"&#244;\" string=\"\\^o\" />\n      <encoding char=\"&#245;\" string=\"\\~{o}\" />\n      <encoding char=\"&#245;\" string=\"\\~o\" />\n      <encoding char=\"&#246;\" string=\"\\&#34;{o}\" />\n      <encoding char=\"&#246;\" string=\"\\&#34;o\" />\n      <encoding char=\"&#248;\" string=\"\\o{}\" />\n      <encoding char=\"&#249;\" string=\"\\`{u}\" />\n      <encoding char=\"&#249;\" string=\"\\`u\" />\n      <encoding char=\"&#250;\" string=\"\\'{u}\" />\n      <encoding char=\"&#250;\" string=\"\\'u\" />\n      <encoding char=\"&#251;\" string=\"\\^{u}\" />\n      <encoding char=\"&#251;\" string=\"\\^u\" />\n      <encoding char=\"&#252;\" string=\"\\&#34;{u}\" />\n      <encoding char=\"&#252;\" string=\"\\&#34;u\" />\n      <encoding char=\"&#253;\" string=\"\\'{y}\" />\n      <encoding char=\"&#253;\" string=\"\\'y\" />\n      <encoding char=\"&#254;\" string=\"\\th{}\" />\n      <encoding char=\"&#255;\" string=\"\\&#34;{y}\" />\n      <encoding char=\"&#255;\" string=\"\\&#34;y\" />\n      <encoding string=\"''\" ignored=\"true\" />\n      <encoding string=\"\\-\" ignored=\"true\" />\n    </encodings>\n  </spellchecking>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ld.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- GNU LD Linker Script syntax highlighter -->\n<language name=\"GNU Linker Script\" section=\"Scripts\" extensions=\"*.ld\" version=\"3\" kateversion=\"2.4\" author=\"Lyle Putnam (lcputnam@gmail.com)\" license=\"\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>AT</item>\n            <item>ENTRY</item>\n            <item>INPUT</item>\n            <item>GROUP</item>\n            <item>OUTPUT</item>\n            <item>OUTPUT_ARCH</item>\n            <item>OUTPUT_FORMAT</item>\n            <item>SEARCH_DIR</item>\n            <item>STARTUP</item>\n            <item>TARGET</item>\n        </list>\n        <list name=\"functions\">\n            <item>ABSOLUTE</item>\n            <item>ADDR</item>\n            <item>ALIGN</item>\n            <item>DATA_SEGMENT_ALIGN</item>\n            <item>DATA_SEGMENT_END</item>\n            <item>DATA_SEGMENT_RELRO_END</item>\n            <item>DEFINED</item>\n            <item>LOADADDR</item>\n            <item>MAX</item>\n            <item>MIN</item>\n            <item>NEXT</item>\n            <item>SIZEOF</item>\n            <item>SIZEOF_HEADERS</item>\n        </list>\n        <list name=\"commands\">\n            <item>SECTIONS</item>\n            <item>MEMORY</item>\n        </list>\n        <contexts>\n            <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n                <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n                <keyword attribute=\"Command\" context=\"#stay\" String=\"commands\" />\n                <HlCOct attribute=\"Number\" context=\"#stay\" />\n                <HlCHex attribute=\"Number\" context=\"#stay\" />\n                <!-- Base 10 Integers may be suffixed with K, M or G to indicate size -->\n                <Int attribute=\"Number\" context=\"Int Suffixes\"/>\n                <RegExpr attribute=\"Section Name\" context=\"#stay\" String=\"\\.[\\-_0-9a-zA-Z]+\" />\n                <!-- \"COMMON\" and \"/DISCARD/\" are special section targets -->\n                <RegExpr attribute=\"Section Name\" context=\"#stay\" String=\"(COMMON|\\/DISCARD\\/)\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Block\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Block\" />\n                <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\" />\n                <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n            </context>\n            <context name=\"Int Suffixes\" attribute=\"Number\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                    <StringDetect attribute=\"Number\" context=\"#pop\" String=\"K\" insensitive=\"true\" />\n                    <StringDetect attribute=\"Number\" context=\"#pop\" String=\"M\" insensitive=\"true\" />\n                    <StringDetect attribute=\"Number\" context=\"#pop\" String=\"G\" insensitive=\"true\" />\n            </context>\n            <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\" />\n            </context>\n            <context name=\"string\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" />\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Section Name\" defStyleNum=\"dsChar\" />\n            <itemData name=\"Command\" defStyleNum=\"dsKeyword\" />\n            <itemData name=\"Number\" defStyleNum=\"dsBaseN\" />\n            <itemData name=\"String\" defStyleNum=\"dsString\" />\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\" />\n            <!-- I don't think GNU LD scripts have single-line comments -->\n        </comments>\n        <keywords casesensitive=\"1\" />\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ldif.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"LDIF\" version=\"3\" kateversion=\"2.4\" section=\"Database\" extensions=\"*.ldif\" mimetype=\"application/directory\" author=\"Andreas Hochsteger (e9625392@student.tuwien.ac.at)\" license=\"\">\n\t<highlighting>\n\t\t<list name=\"attributetypes\">\n\t\t\t<item>IPPhone</item>\n\t\t\t<item>URL</item>\n\t\t\t<item>aRecord</item>\n\t\t\t<item>aliasedEntryName</item>\n\t\t\t<item>aliasedObjectName</item>\n\t\t\t<item>associatedDomain</item>\n\t\t\t<item>associatedName</item>\n\t\t\t<item>audio</item>\n\t\t\t<item>authorityRevocationList</item>\n\t\t\t<item>bootFile</item>\n\t\t\t<item>bootParameter</item>\n\t\t\t<item>buildingName</item>\n\t\t\t<item>businessCategory</item>\n\t\t\t<item>c</item>\n\t\t\t<item>cACertificate</item>\n\t\t\t<item>cNAMERecord</item>\n\t\t\t<item>certificateRevocationList</item>\n\t\t\t<item>cn</item>\n\t\t\t<item>comment</item>\n\t\t\t<item>commonName</item>\n\t\t\t<item>conferenceInformation</item>\n\t\t\t<item>corbaContainer</item>\n\t\t\t<item>corbaRepositoryId</item>\n\t\t\t<item>countryName</item>\n\t\t\t<item>crossCertificatePair</item>\n\t\t\t<item>custom1</item>\n\t\t\t<item>custom2</item>\n\t\t\t<item>custom3</item>\n\t\t\t<item>custom4</item>\n\t\t\t<item>dITRedirect</item>\n\t\t\t<item>dSAQuality</item>\n\t\t\t<item>dc</item>\n\t\t\t<item>deltaRevocationList</item>\n\t\t\t<item>description</item>\n\t\t\t<item>destinationIndicator</item>\n\t\t\t<item>distinguishedName</item>\n\t\t\t<item>dmdName</item>\n\t\t\t<item>dnQualifier</item>\n\t\t\t<item>documentAuthor</item>\n\t\t\t<item>documentIdentifier</item>\n\t\t\t<item>documentLocation</item>\n\t\t\t<item>documentPublisher</item>\n\t\t\t<item>documentTitle</item>\n\t\t\t<item>documentVersion</item>\n\t\t\t<item>domainComponent</item>\n\t\t\t<item>enhancedSearchGuide</item>\n\t\t\t<item>facsimileTelephoneNumber</item>\n\t\t\t<item>fax</item>\n\t\t\t<item>gecos</item>\n\t\t\t<item>generationQualifier</item>\n\t\t\t<item>gidNumber</item>\n\t\t\t<item>givenName</item>\n\t\t\t<item>gn</item>\n\t\t\t<item>homeDirectory</item>\n\t\t\t<item>homePostalAddress</item>\n\t\t\t<item>homeUrl</item>\n\t\t\t<item>host</item>\n\t\t\t<item>houseIdentifier</item>\n\t\t\t<item>info</item>\n\t\t\t<item>initials</item>\n\t\t\t<item>internationaliSDNNumber</item>\n\t\t\t<item>ipHostNumber</item>\n\t\t\t<item>ipNetmaskNumber</item>\n\t\t\t<item>ipNetworkNumber</item>\n\t\t\t<item>ipProtocolNumber</item>\n\t\t\t<item>ipServicePort</item>\n\t\t\t<item>ipServiceProtocol</item>\n\t\t\t<item>janetMailbox</item>\n\t\t\t<item>javaClassNames</item>\n\t\t\t<item>javaCodebase</item>\n\t\t\t<item>javaContainer</item>\n\t\t\t<item>javaDoc</item>\n\t\t\t<item>javaFactory</item>\n\t\t\t<item>javaReferenceAddress</item>\n\t\t\t<item>javaSerializedData</item>\n\t\t\t<item>knowledgeInformation</item>\n\t\t\t<item>l</item>\n\t\t\t<item>labeledURI</item>\n\t\t\t<item>lastModifiedBy</item>\n\t\t\t<item>lastModifiedTime</item>\n\t\t\t<item>lmpassword</item>\n\t\t\t<item>localityName</item>\n\t\t\t<item>loginShell</item>\n\t\t\t<item>mDRecord</item>\n\t\t\t<item>mXRecord</item>\n\t\t\t<item>macAddress</item>\n\t\t\t<item>mail</item>\n\t\t\t<item>manager</item>\n\t\t\t<item>member</item>\n\t\t\t<item>memberNisNetgroup</item>\n\t\t\t<item>memberUid</item>\n\t\t\t<item>mozillaHomeCountryName</item>\n\t\t\t<item>mozillaHomeFriendlyCountryName</item>\n\t\t\t<item>mozillaHomeLocalityName</item>\n\t\t\t<item>mozillaHomePostalAddress2</item>\n\t\t\t<item>mozillaHomePostalCode</item>\n\t\t\t<item>mozillaHomeState</item>\n\t\t\t<item>mozillaPostalAddress2</item>\n\t\t\t<item>mozillaSecondemail</item>\n\t\t\t<item>nSRecord</item>\n\t\t\t<item>name</item>\n\t\t\t<item>nisMapEntry</item>\n\t\t\t<item>nisMapName</item>\n\t\t\t<item>nisNetgroupTriple</item>\n\t\t\t<item>ntpasswd</item>\n\t\t\t<item>o</item>\n\t\t\t<item>objectClass</item>\n\t\t\t<item>oncRpcNumber</item>\n\t\t\t<item>organizationName</item>\n\t\t\t<item>organizationalStatus</item>\n\t\t\t<item>organizationalUnitName</item>\n\t\t\t<item>otherFacsimiletelephoneNumber</item>\n\t\t\t<item>otherMailbox</item>\n\t\t\t<item>ou</item>\n\t\t\t<item>owner</item>\n\t\t\t<item>personalSignature</item>\n\t\t\t<item>personalTitle</item>\n\t\t\t<item>photo</item>\n\t\t\t<item>physicalDeliveryOfficeName</item>\n\t\t\t<item>postOfficeBox</item>\n\t\t\t<item>postalAddress</item>\n\t\t\t<item>postalCode</item>\n\t\t\t<item>preferredDeliveryMethod</item>\n\t\t\t<item>presentationAddress</item>\n\t\t\t<item>protocolInformation</item>\n\t\t\t<item>rdn</item>\n\t\t\t<item>registeredAddress</item>\n\t\t\t<item>reports</item>\n\t\t\t<item>rfc822Mailbox</item>\n\t\t\t<item>roleOccupant</item>\n\t\t\t<item>roomNumber</item>\n\t\t\t<item>sOARecord</item>\n\t\t\t<item>searchGuide</item>\n\t\t\t<item>secretary</item>\n\t\t\t<item>seeAlso</item>\n\t\t\t<item>serialNumber</item>\n\t\t\t<item>shadowExpire</item>\n\t\t\t<item>shadowFlag</item>\n\t\t\t<item>shadowInactive</item>\n\t\t\t<item>shadowLastChange</item>\n\t\t\t<item>shadowMax</item>\n\t\t\t<item>shadowMin</item>\n\t\t\t<item>shadowWarning</item>\n\t\t\t<item>singleLevelQuality</item>\n\t\t\t<item>sn</item>\n\t\t\t<item>st</item>\n\t\t\t<item>stateOrProvinceName</item>\n\t\t\t<item>street</item>\n\t\t\t<item>streetAddress</item>\n\t\t\t<item>subtreeMaximumQuality</item>\n\t\t\t<item>subtreeMinimumQuality</item>\n\t\t\t<item>supportedAlgorithms</item>\n\t\t\t<item>supportedApplicationContext</item>\n\t\t\t<item>surname</item>\n\t\t\t<item>telephoneNumber</item>\n\t\t\t<item>teletexTerminalIdentifier</item>\n\t\t\t<item>telexNumber</item>\n\t\t\t<item>textEncodedORAddress</item>\n\t\t\t<item>title</item>\n\t\t\t<item>uid</item>\n\t\t\t<item>uidNumber</item>\n\t\t\t<item>uniqueIdentifier</item>\n\t\t\t<item>uniqueMember</item>\n\t\t\t<item>userCertificate</item>\n\t\t\t<item>userClass</item>\n\t\t\t<item>userPassword</item>\n\t\t\t<item>userid</item>\n\t\t\t<item>workUrl</item>\n\t\t\t<item>x121Address</item>\n\t\t\t<item>x500UniqueIdentifier</item>\n\t\t\t<item>xmozillaNickname</item>\n\t\t\t<item>xmozillaUseHtmlMail</item>\n\t\t\t<item>xmozillanickname</item>\n\t\t\t<item>xmozillausehtmlmail</item>\n\t\t</list>\n\t\t<list name=\"objectclasses\">\n\t\t\t<item>RFC822localPart</item>\n\t\t\t<item>SUP</item>\n\t\t\t<item>account</item>\n\t\t\t<item>alias</item>\n\t\t\t<item>applicationEntity</item>\n\t\t\t<item>applicationProcess</item>\n\t\t\t<item>bootableDevice</item>\n\t\t\t<item>cRLDistributionPoint</item>\n\t\t\t<item>certificationAuthority</item>\n\t\t\t<item>certificationAuthority-V2</item>\n\t\t\t<item>corbaObject</item>\n\t\t\t<item>corbaObjectReference</item>\n\t\t\t<item>country</item>\n\t\t\t<item>dNSDomain</item>\n\t\t\t<item>dSA</item>\n\t\t\t<item>dcObject</item>\n\t\t\t<item>deltaCRL</item>\n\t\t\t<item>device</item>\n\t\t\t<item>dmd</item>\n\t\t\t<item>document</item>\n\t\t\t<item>documentSeries</item>\n\t\t\t<item>domain</item>\n\t\t\t<item>domainRelatedObject</item>\n\t\t\t<item>friendlyCountry</item>\n\t\t\t<item>groupOfNames</item>\n\t\t\t<item>groupOfUniqueNames</item>\n\t\t\t<item>ieee802Device</item>\n\t\t\t<item>inetOrgPerson</item>\n\t\t\t<item>ipHost</item>\n\t\t\t<item>ipNetwork</item>\n\t\t\t<item>ipProtocol</item>\n\t\t\t<item>ipService</item>\n\t\t\t<item>javaClassName</item>\n\t\t\t<item>javaMarshalledObject</item>\n\t\t\t<item>javaNamingReference</item>\n\t\t\t<item>javaObject</item>\n\t\t\t<item>javaSerializedObject</item>\n\t\t\t<item>labeledURIObject</item>\n\t\t\t<item>locality</item>\n\t\t\t<item>mozillaAbPersonObsolete</item>\n\t\t\t<item>nisMap</item>\n\t\t\t<item>nisNetgroup</item>\n\t\t\t<item>nisObject</item>\n\t\t\t<item>officePerson</item>\n\t\t\t<item>oncRpc</item>\n\t\t\t<item>organization</item>\n\t\t\t<item>organizationalPerson</item>\n\t\t\t<item>organizationalRole</item>\n\t\t\t<item>organizationalUnit</item>\n\t\t\t<item>pager</item>\n\t\t\t<item>pagerTelephoneNumber</item>\n\t\t\t<item>person</item>\n\t\t\t<item>pilotDSA</item>\n\t\t\t<item>pilotObject</item>\n\t\t\t<item>pilotOrganization</item>\n\t\t\t<item>pkiCA</item>\n\t\t\t<item>pkiUser</item>\n\t\t\t<item>posixAccount</item>\n\t\t\t<item>posixGroup</item>\n\t\t\t<item>qualityLabelledData</item>\n\t\t\t<item>residentialPerson</item>\n\t\t\t<item>rid</item>\n\t\t\t<item>room</item>\n\t\t\t<item>sambaAccount</item>\n\t\t\t<item>shadowAccount</item>\n\t\t\t<item>simpleSecurityObject</item>\n\t\t\t<item>strongAuthenticationUser</item>\n\t\t\t<item>telephoneNumber</item>\n\t\t\t<item>top</item>\n\t\t\t<item>uid</item>\n\t\t\t<item>uidNumber</item>\n\t\t\t<item>uidObject</item>\n\t\t\t<item>userSecurityInformation</item>\n\t\t\t<item>userid</item>\n\t\t\t<item>xmozillaanyphone</item>\n\t\t\t<item>zillaPerson</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context name=\"ctxStart\" attribute=\"Value (Standard)\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"#.*$\" attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t\t<DetectChar char=\":\" attribute=\"Description Keyword\" context=\"ctxEncoded\"/>\n\t\t\t\t<DetectChar char=\"&lt;\" attribute=\"Description Keyword\" context=\"ctxURL\"/>\n\t\t\t\t<RegExpr String=\"[^:&lt;]\" attribute=\"Value (Standard)\" context=\"ctxStandard\"/>\n\t\t\t\t<RegExpr String=\"[\\w\\-]+((;[\\w\\-]+)+)?:\" attribute=\"Description Keyword\" context=\"#stay\" column=\"0\"/>\n\t\t\t</context>\n\t\t\t<context name=\"ctxEncoded\" attribute=\"Value (Encoded)\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"#.*$\" attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"\\s.*$\" attribute=\"Value (Encoded)\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"[\\w\\-]+((;[\\w\\-]+)+)?:\" attribute=\"Description Keyword\" context=\"#pop\" column=\"0\"/>\n\t\t\t</context>\n\t\t\t<context name=\"ctxURL\" attribute=\"Value (URL)\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"#.*$\" attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"\\s+[\\w]+://[\\w/.]+\" attribute=\"Value (URL)\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"\\s.*$\" attribute=\"Value (URL)\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"[\\w\\-]+((;[\\w\\-]+)+)?:\" attribute=\"Description Keyword\" context=\"#pop\" column=\"0\"/>\n\t\t\t</context>\n\t\t\t<context name=\"ctxStandard\" attribute=\"Value (Standard)\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"#.*$\" attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"\\{\\w+\\}.*$\" attribute=\"Value (Encrypted)\" context=\"ctxEncrypted\"/>\n\t\t\t\t<keyword String=\"attributetypes\" attribute=\"AttributeType\" context=\"#stay\"/>\n\t\t\t\t<keyword String=\"objectclasses\" attribute=\"ObjectClass\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"[\\w\\-]+((;[\\w\\-]+)+)?:\" attribute=\"Description Keyword\" context=\"#pop\" column=\"0\"/>\n\t\t\t\t<RegExpr String=\"[a-zA-Z0-9\\-]+=\" attribute=\"Value (Keyword)\" context=\"#stay\"/>\n\t\t\t</context>\n\t\t\t<context name=\"ctxEncrypted\" attribute=\"Value (Encrypted)\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr String=\"#.*$\" attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"\\s.*$\" attribute=\"Value (Encrypted)\" context=\"#stay\"/>\n\t\t\t\t<RegExpr String=\"[\\w\\-]+((;[\\w\\-]+)+)?:\" attribute=\"Description Keyword\" context=\"#pop#pop\" column=\"0\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Comment\"\t\tdefStyleNum=\"dsComment\"\tcolor=\"#808080\" selColor=\"#808080\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"AttributeType\"\t\tdefStyleNum=\"dsKeyword\"\tcolor=\"#404040\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"ObjectClass\"\t\tdefStyleNum=\"dsKeyword\"\tcolor=\"#800080\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Description Keyword\"\tdefStyleNum=\"dsKeyword\"\tcolor=\"#000000\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Value (Standard)\"\tdefStyleNum=\"dsString\"\tcolor=\"#008000\" selColor=\"#008000\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Value (Encoded)\"\tdefStyleNum=\"dsString\"\tcolor=\"#FF8000\" selColor=\"#0080FF\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Value (Encrypted)\"\tdefStyleNum=\"dsString\"\tcolor=\"#FF0000\" selColor=\"#00FFFF\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Value (Keyword)\"\tdefStyleNum=\"dsString\"\tcolor=\"#008000\" selColor=\"#800080\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Value (URL)\"\t\tdefStyleNum=\"dsString\"\tcolor=\"#0000FF\" selColor=\"#FFFF00\" bold=\"0\" italic=\"0\"/>\n\t\t</itemDatas>\n\t</highlighting>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/less.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- http://www.w3.org/TR/CSS21/syndata.html#tokenization -->\n  <!ENTITY nmstart \"[_a-zA-Z]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n  <!ENTITY nmchar  \"[_a-zA-Z0-9-]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n]>\n<language name=\"LESSCSS\" version=\"5\" kateversion=\"5.53\" section=\"Markup\" extensions=\"*.less\" mimetype=\"text/css\"\n          author=\"from CCS:Wilbert Berendsen (wilbert@kde.nl)\" license=\"LGPL\">\n    <!--\n    Version 3 (2017-05-10):\n    - rebased on SCSS syntax version 4 (by Guo Yunhe guoyunhebrave@gmail.com)\n    - added some CSS colours and properties\n    -->\n\n    <highlighting>\n        <list name=\"properties\">\n            <include>properties##CSS</include>\n            <include>within-@font-face##CSS</include>\n        </list>\n\n        <list name=\"values\">\n            <include>values##CSS</include>\n        </list>\n\n        <list name=\"value keywords\">\n            <include>value keywords##CSS</include>\n        </list>\n\n        <list name=\"colors\">\n            <include>colors##CSS</include>\n        </list>\n\n        <list name=\"functions\">\n            <include>functions##CSS</include>\n\n            <!-- Less functions, @see http://lesscss.org/functions/ -->\n\n            <!-- Misc Functions -->\n            <item>color</item>\n            <item>convert</item>\n            <item>data-uri</item>\n            <item>default</item>\n            <item>get-unit</item>\n            <item>image-height</item>\n            <item>image-size</item>\n            <item>image-width</item>\n            <item>svg-gradient</item>\n            <item>unit</item>\n\n            <!-- String Functions -->\n            <item>%</item>\n            <item>e</item>\n            <item>escape</item>\n            <item>replace</item>\n\n            <!-- List Functions -->\n            <item>extract</item>\n            <item>length</item>\n\n            <!-- Math Functions -->\n            <item>abs</item>\n            <item>acos</item>\n            <item>asin</item>\n            <item>atan</item>\n            <item>ceil</item>\n            <item>cos</item>\n            <item>floor</item>\n            <item>max</item>\n            <item>min</item>\n            <item>mod</item>\n            <item>percentage</item>\n            <item>pi</item>\n            <item>pow</item>\n            <item>round</item>\n            <item>sin</item>\n            <item>sqrt</item>\n            <item>tan</item>\n\n            <!-- Type Functions -->\n            <item>iscolor</item>\n            <item>isem</item>\n            <item>iskeyword</item>\n            <item>isnumber</item>\n            <item>ispercentage</item>\n            <item>ispixel</item>\n            <item>isruleset</item>\n            <item>isstring</item>\n            <item>isunit</item>\n            <item>isurl</item>\n\n            <!-- Color Definition Functions -->\n            <item>argb</item>\n            <item>hsl</item>\n            <item>hsla</item>\n            <item>hsv</item>\n            <item>hsva</item>\n            <item>rgb</item>\n            <item>rgba</item>\n\n            <!-- Color Channel Functions -->\n            <item>alpha</item>\n            <item>blue</item>\n            <item>green</item>\n            <item>hsvhue</item>\n            <item>hsvsaturation</item>\n            <item>hsvvalue</item>\n            <item>hue</item>\n            <item>lightness</item>\n            <item>luma</item>\n            <item>luminance</item>\n            <item>red</item>\n            <item>saturation</item>\n\n            <!-- Color Operation Functions -->\n            <item>contrast</item>\n            <item>darken</item>\n            <item>desaturate</item>\n            <item>fade</item>\n            <item>fadein</item>\n            <item>fadeout</item>\n            <item>greyscale</item>\n            <item>lighten</item>\n            <item>mix</item>\n            <item>saturate</item>\n            <item>shade</item>\n            <item>spin</item>\n            <item>tint</item>\n\n            <!-- Color Blending Functions -->\n            <item>average</item>\n            <item>difference</item>\n            <item>exclusion</item>\n            <item>hardlight</item>\n            <item>multiply</item>\n            <item>negation</item>\n            <item>overlay</item>\n            <item>screen</item>\n            <item>softlight</item>\n        </list>\n\n        <list name=\"mediatypes\">\n            <item>all</item>\n            <item>aural</item>\n            <item>braille</item>\n            <item>embossed</item>\n            <item>handheld</item>\n            <item>print</item>\n            <item>projection</item>\n            <item>screen</item>\n            <item>speech</item>\n            <item>tty</item>\n            <item>tv</item>\n        </list>\n\n        <list name=\"mediatypes_op\">\n            <include>media operators##CSS</include>\n            <item>or</item>\n        </list>\n\n        <list name=\"media_features\">\n            <item>width</item>\n            <item>min-width</item>\n            <item>max-width</item>\n            <item>height</item>\n            <item>min-height</item>\n            <item>max-height</item>\n            <item>device-width</item>\n            <item>min-device-width</item>\n            <item>max-device-width</item>\n            <item>device-height</item>\n            <item>min-device-height</item>\n            <item>max-device-height</item>\n            <item>orientation</item>\n            <item>aspect-ratio</item>\n            <item>min-aspect-ratio</item>\n            <item>max-aspect-ratio</item>\n            <item>device-aspect-ratio</item>\n            <item>min-device-aspect-ratio</item>\n            <item>max-device-aspect-ratio</item>\n            <item>color</item>\n            <item>min-color</item>\n            <item>max-color</item>\n            <item>color-index</item>\n            <item>min-color-index</item>\n            <item>max-color-index</item>\n            <item>monochrome</item>\n            <item>min-monochrome</item>\n            <item>max-monochrome</item>\n            <item>resolution</item>\n            <item>min-resolution</item>\n            <item>max-resolution</item>\n            <item>scan</item>\n            <item>grid</item>\n        </list>\n\n        <list name=\"pseudoclasses\">\n            <include>pseudoclasses##CSS</include>\n            <!-- Less -->\n            <item>extend</item>\n        </list>\n\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Base\">\n                <IncludeRules context=\"FindComments\"/>\n\n                <DetectChar attribute=\"Normal Text\" beginRegion=\"ruleset\" char=\"{\" context=\"RuleSet\"/>\n                <RegExpr attribute=\"Variable\" context=\"VariableDefine\" String=\"\\@[a-zA-Z0-9\\-_]+\\s*:\"/>\n                <RegExpr attribute=\"At Rule\" context=\"AtRule\" String=\"@[a-zA-Z0-1\\-]+\\b\"/>\n\n                <IncludeRules context=\"FindSelectors\"/>\n            </context>\n\n            <!-- find selectors // .class #id :hover :nth-child(2n+1) [type=\"search\"] -->\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindSelectors\">\n                <IncludeRules context=\"FindInterpolation\"/>\n\n                <DetectChar attribute=\"Annotation\" context=\"Annotation\" char=\"!\"/>\n                <DetectChar attribute=\"Selector Attribute\" char=\"[\" context=\"SelectorAttr\"/>\n                <RegExpr attribute=\"Selector Id\" context=\"#stay\" String=\"#(-)?(&nmstart;)(&nmchar;)*\"/>\n                <RegExpr attribute=\"Selector Class\" context=\"#stay\"\n                         String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\"/>\n                <RegExpr attribute=\"Selector Pseudo\" context=\"#stay\" String=\":lang\\([\\w_\\-]+\\)\"/>\n                <DetectChar attribute=\"Selector Pseudo\" char=\":\" context=\"SelectorPseudo\"/>\n                <RegExpr attribute=\"Control Flow\" context=\"Condition\" String=\"when\\s*(not)?(?=\\s*\\()\"/>\n                <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"Function\" lookAhead=\"true\"/>\n\n                <IncludeRules context=\"FindVariables\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Condition\">\n                <IncludeRules context=\"FindFunctions\"/>\n                <IncludeRules context=\"FindVariables\"/>\n                <IncludeRules context=\"FindValues\"/>\n\n                <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop\"/>\n            </context>\n\n            <!-- find variables // @page-width -->\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindVariables\">\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[\\@]{1,2}[a-zA-Z0-9\\-_]+\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindInterpolation\">\n                <!-- @{variable} -->\n                <RegExpr attribute=\"Variable\" context=\"Interpolation\" String=\"\\@\\{\\s*[a-zA-Z0-9\\-_]+\"/>\n            </context>\n\n            <!-- find functions // rgba(255,255,255,0.75) -->\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindFunctions\">\n                <RegExpr attribute=\"Function\" context=\"Function\" String=\"[a-z\\-]+\\(\" lookAhead=\"true\"/>\n            </context>\n\n            <!-- find values //  10px 12pt 2.5em 1rem 75% #ffcc99 red solid -->\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindValues\">\n                <DetectChar attribute=\"Annotation\" context=\"Annotation\" char=\"!\"/>\n\n                <IncludeRules context=\"FindInterpolation\"/>\n                <IncludeRules context=\"FindVariables\"/>\n\n                <keyword attribute=\"Value Keyword\" context=\"#stay\" String=\"value keywords\"/>\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"values\"/>\n                <keyword attribute=\"Color\" context=\"#stay\" String=\"colors\"/>\n                <RegExpr attribute=\"Color\" context=\"#stay\" String=\"#([0-9A-Fa-f]{3,4}){1,2}\\b\"/>\n                <RegExpr attribute=\"Number\" context=\"FindUnits\" String=\"[-+]?([0-9]+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?(?![-+])\"/>\n                <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[-+]?[0-9.]+[%]?\"/>\n                <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\w\\-]+\"/>\n            </context>\n\n            <context name=\"Annotation\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <WordDetect attribute=\"Annotation\" context=\"#pop\" String=\"important\"/>\n                <WordDetect attribute=\"Annotation\" context=\"#pop\" String=\"default\"/>\n            </context>\n\n            <context name=\"FindUnits\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <RegExpr attribute=\"Unit\" context=\"#stay\" String=\"(%|(em|ex|ch|rem|vw|vh|vm|px|in|cm|mm|pt|pc|deg|rad|grad|turn|ms|s|Hz|kHz)\\b)\"/>\n            </context>\n\n            <!-- find strings // \"some words\" 'some words' -->\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindStrings\">\n                <DetectChar attribute=\"String\" context=\"StringDQ\" char=\"&quot;\"/>\n                <DetectChar attribute=\"String\" context=\"StringSQ\" char=\"'\"/>\n            </context>\n\n            <!-- find comments // /* comment */  // comment -->\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindComments\">\n                <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"/\\*BEGIN.*\\*/\" beginRegion=\"UserDefined\"/>\n                <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*BEGIN.*\" beginRegion=\"UserDefined\"/>\n                <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"/\\*END.*\\*/\" endRegion=\"UserDefined\"/>\n                <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*END.*\" endRegion=\"UserDefined\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"*\" beginRegion=\"comment\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"LessComment\" char=\"/\" char1=\"/\" />\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"AtRule\">\n                <IncludeRules context=\"FindComments\"/>\n                <IncludeRules context=\"FindStrings\"/>\n\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"mediatypes\"/>\n                <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"mediatypes_op\"/>\n                <keyword attribute=\"Property\" context=\"#stay\" String=\"media_features\"/>\n                <AnyChar attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\" String=\";{\"/>\n\n                <IncludeRules context=\"FindInterpolation\"/>\n                <IncludeRules context=\"FindVariables\"/>\n                <IncludeRules context=\"FindValues\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"VariableDefine\">\n                <IncludeRules context=\"FindInterpolation\"/>\n                <IncludeRules context=\"FindVariables\"/>\n\n                <DetectChar attribute=\"Normal Text\" beginRegion=\"ruleset\" char=\"{\" context=\"#pop!RuleSet\"/>\n\n                <IncludeRules context=\"FindComments\"/>\n                <IncludeRules context=\"FindStrings\"/>\n                <IncludeRules context=\"FindFunctions\"/>\n                <IncludeRules context=\"FindValues\"/>\n\n                <DetectChar attribute=\"Normal Text\" char=\";\" context=\"#pop\"/>\n            </context>\n\n            <!-- Interpolation -->\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Interpolation\">\n                <IncludeRules context=\"FindInterpolation\"/>\n                <IncludeRules context=\"FindVariables\"/>\n\n                <DetectChar attribute=\"Variable\" char=\"}\" context=\"#pop\"/>\n            </context>\n\n            <context attribute=\"Selector Attribute\" lineEndContext=\"#stay\" name=\"SelectorAttr\">\n                <DetectChar attribute=\"Selector Attribute\" char=\"]\" context=\"#pop\"/>\n\n                <IncludeRules context=\"FindStrings\"/>\n            </context>\n\n            <context attribute=\"Selector Pseudo\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\"\n                     name=\"SelectorPseudo\">\n                <RegExpr attribute=\"Selector Pseudo\" context=\"SelectorPseudoParameters\" String=\"extend(?=\\s*\\()\"/>\n                <keyword attribute=\"Selector Pseudo\" context=\"#pop\" String=\"pseudoclasses\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SelectorPseudoParameters\">\n                <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"#stay\"/>\n\n                <IncludeRules context=\"FindSelectors\"/>\n\n                <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop#pop\"/>\n            </context>\n\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"LessComment\"></context>\n\n            <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"comment\"/>\n\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"RuleSet\">\n                <DetectChar attribute=\"Normal Text\" char=\"{\" context=\"RuleSet\" beginRegion=\"ruleset\"/>\n                <DetectChar attribute=\"Normal Text\" char=\"}\" context=\"#pop\" endRegion=\"ruleset\"/>\n                <!-- find CSS property, like border-radius with optional + or +- decorators -->\n                <RegExpr attribute=\"Property\" context=\"Rule\" String=\"-?[A-Za-z_\\-]+(?=\\s*(\\+|\\+_)?\\s*:)\"\n                         lookAhead=\"true\"/>\n                <!-- as above, but include support for interpolation -->\n                <RegExpr attribute=\"Property\" context=\"Rule\"\n                         String=\"-?[A-Za-z_\\-]*@{\\s*[a-zA-Z0-9\\-_]+}[A-Za-z_\\-]*(?=\\s*(\\+|\\+_)?\\s*:)\" lookAhead=\"true\"\n                         />\n\n                <IncludeRules context=\"Base\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Rule\">\n                <IncludeRules context=\"FindInterpolation\"/>\n\n                <RegExpr attribute=\"Normal Text\" context=\"RuleParameters\" String=\"(\\+|\\+_)?\\s*:\"/>\n                <keyword attribute=\"Property\" context=\"#stay\" String=\"properties\"/>\n                <RegExpr attribute=\"Unknown Property\" context=\"#stay\" String=\"\\S\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"RuleParameters\">\n                <IncludeRules context=\"FindComments\"/>\n                <IncludeRules context=\"FindStrings\"/>\n                <IncludeRules context=\"FindFunctions\"/>\n                <IncludeRules context=\"FindValues\"/>\n\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\";\"/>\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"ruleset\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Function\">\n                <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"FunctionParameters\"/>\n                <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\"/>\n            </context>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FunctionParameters\">\n                <IncludeRules context=\"FindComments\"/>\n                <IncludeRules context=\"FindStrings\"/>\n                <IncludeRules context=\"FindInterpolation\"/>\n                <IncludeRules context=\"FindVariables\"/>\n                <IncludeRules context=\"FindFunctions\"/>\n                <IncludeRules context=\"FindValues\"/>\n\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\")\"/>\n            </context>\n\n            <!-- string contexts -->\n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"StringDQ\">\n                <DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\"/>\n\n                <IncludeRules context=\"InsideString\"/>\n            </context>\n\n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"StringSQ\">\n                <DetectChar attribute=\"String\" char=\"'\" context=\"#pop\"/>\n\n                <IncludeRules context=\"InsideString\"/>\n            </context>\n\n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"InsideString\">\n                <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\\\[&quot;']\"/>\n\n                <IncludeRules context=\"FindInterpolation\"/>\n\n                <DetectIdentifier/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData defStyleNum=\"dsNormal\" name=\"Normal Text\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsVariable\" name=\"Variable\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsControlFlow\" name=\"Control Flow\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsImport\" name=\"At Rule\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsKeyword\" name=\"Property\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsNormal\" italic=\"1\" name=\"Unknown Property\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsString\" name=\"String\"/>\n            <itemData defStyleNum=\"dsDecVal\" name=\"Value\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsDecVal\" name=\"Number\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsBuiltIn\" name=\"Value Keyword\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsConstant\" name=\"Color\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsDataType\" name=\"Unit\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsBuiltIn\" name=\"Function\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsAttribute\" name=\"Annotation\" spellChecking=\"false\"/>\n            <itemData bold=\"1\" defStyleNum=\"dsPreprocessor\" name=\"Selector Id\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsFunction\" name=\"Selector Class\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsExtension\" name=\"Selector Attribute\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsInformation\" name=\"Selector Pseudo\" spellChecking=\"false\"/>\n            <itemData defStyleNum=\"dsComment\" name=\"Comment\"/>\n            <itemData defStyleNum=\"dsRegionMarker\" name=\"Region Marker\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <keywords casesensitive=\"0\" weakDeliminator=\"-%\"/>\n        <comments>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n        </comments>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/lex.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  ========================================================================\n\n  LEX.XML supports syntax highlighting for Lex/Flex source under Kate.\n\n  Copyright (C) 2004 - Jan Villat <jan.villat@net2000.ch>\n  This code is released under the LGPL as part of kdelibs/kate.\n\n  ========================================================================\n\n  Updates for LEX.XML can be obtained from http://kate.kde.org/hl/\n\n  UPDATE HISTORY:-\n  2004.05.25 - LEX.XML 1.00        - First released.\n\n  TODO:-\n  - Add a mime type (cannot find it !?)\n  \n  ========================================================================\n-->\n<language name=\"Lex/Flex\" version=\"2\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.l;*.lex;*.flex\" author=\"Jan Villat (jan.villat@net2000.ch)\" license=\"LGPL\">\n\n<highlighting>\n<contexts>\n  <context name=\"Pre Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Normal Text\" context=\"Definitions\" String=\".\" lookAhead=\"true\" beginRegion=\"definitions\" />\n  </context>\n  <context name=\"Definitions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Detect C\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"Rules\" char=\"%\" char1=\"%\" beginRegion=\"rules\" endRegion=\"definitions\" />\n    <DetectChar attribute=\"Directive\" context=\"Percent Command\" char=\"%\" />\n    <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"*\" column=\"0\"/>\n    <RegExpr attribute=\"Definition\" context=\"Definition RegExpr\" String=\"[A-Za-z_]\\w*\\s+\" column=\"0\"/>\n  </context>\n  <context name=\"Rules\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"Rule RegExpr\">\n    <IncludeRules context=\"Detect C\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"User Code\" char=\"%\" char1=\"%\" beginRegion=\"code\" endRegion=\"rules\" />\n  </context>\n  <context name=\"User Code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"##C++\" />\n  </context>\n  \n  <context name=\"Percent Command\" attribute=\"Directive\" lineEndContext=\"#pop\">\n  </context>\n  <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n  </context>\n\n  <context name=\"Definition RegExpr\" attribute=\"RegExpr\" lineEndContext=\"#pop\">\n    <IncludeRules context=\"RegExpr Base\" />\n    <RegExpr attribute=\"RegExpr\" context=\"#stay\" String=\"\\S\" />  \n    <RegExpr attribute=\"Alert\" context=\"#stay\" String=\".*\" />  \n  </context>\n  <context name=\"Rule RegExpr\" attribute=\"RegExpr\" lineEndContext=\"#pop\">\n    <RegExpr attribute=\"Content-Type Delimiter\" context=\"Start Conditions Scope\" String=\"\\{$\" beginRegion=\"SCscope\" />  \n    <IncludeRules context=\"RegExpr Base\" />\n    <RegExpr attribute=\"RegExpr\" context=\"#stay\" String=\"\\S\" />  \n    <RegExpr attribute=\"Normal Text\" context=\"Action\" String=\"\\s+\" />  \n  </context>\n  <context name=\"RegExpr (\" attribute=\"RegExpr\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"RegExpr Base\" />\n    <DetectChar attribute=\"RegExpr\" context=\"#pop\" char=\")\" />  \n    <RegExpr attribute=\"RegExpr\" context=\"#stay\" String=\".\" />\n  </context>\n  <context name=\"RegExpr [\" attribute=\"RegExpr\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\.\" />\n    <DetectChar attribute=\"RegExpr\" context=\"#pop\" char=\"]\" />  \n    <RegExpr attribute=\"RegExpr\" context=\"#stay\" String=\".\" />\n  </context>\n  <context name=\"RegExpr {\" attribute=\"RegExpr\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\.\" />\n    <DetectChar attribute=\"RegExpr\" context=\"#pop\" char=\"}\" />  \n    <RegExpr attribute=\"RegExpr\" context=\"#stay\" String=\".\" />\n  </context>\n  <context name=\"RegExpr Q\" attribute=\"RegExpr\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\.\" />\n    <DetectChar attribute=\"RegExpr\" context=\"#pop\" char=\"&quot;\" />  \n    <RegExpr attribute=\"RegExpr\" context=\"#stay\" String=\".\" />\n  </context>\n  <context name=\"RegExpr Base\" attribute=\"RegExpr\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\.\" />\n    <DetectChar attribute=\"RegExpr\" context=\"RegExpr (\" char=\"(\" />  \n    <DetectChar attribute=\"RegExpr\" context=\"RegExpr [\" char=\"[\" />  \n    <DetectChar attribute=\"RegExpr\" context=\"RegExpr {\" char=\"{\" />  \n    <DetectChar attribute=\"RegExpr\" context=\"RegExpr Q\" char=\"&quot;\" />  \n  </context>\n  \n  <context name=\"Start Conditions Scope\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"Rule RegExpr\">\n    <RegExpr attribute=\"Content-Type Delimiter\" context=\"#pop\" String=\"\\s*\\}\" endRegion=\"SCscope\" />\n    <RegExpr attribute=\"Normal Text\" context=\"Rule RegExpr\" String=\"\\s*\" />\n  </context>\n  \n  <context name=\"Action\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"Action C\">\n    <RegExpr attribute=\"Directive\" context=\"#stay\" String=\"\\|\\s*$\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"Lex Rule C Bloc\" char=\"%\" char1=\"{\" beginRegion=\"lexCbloc\" />\n  </context>\n  \n  <context name=\"Detect C\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Normal Text\" context=\"Indented C\" String=\"^\\s\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"Lex C Bloc\" char=\"%\" char1=\"{\" beginRegion=\"lexCbloc\" column=\"0\"/>\n  </context>\n  <context name=\"Indented C\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Lex C Bloc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"#pop\" char=\"%\" char1=\"}\" endRegion=\"lexCbloc\" column=\"0\"/>\n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Lex Rule C Bloc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"#pop\" char=\"%\" char1=\"}\" endRegion=\"lexCbloc\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Normal C Bloc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Normal Text\" context=\"Normal C Bloc\" char=\"{\" beginRegion=\"bloc\" />  \n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"bloc\" />  \n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Action C\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n    <DetectChar attribute=\"Normal Text\" context=\"Normal C Bloc\" char=\"{\" beginRegion=\"bloc\" />  \n    <DetectChar attribute=\"Alert\" context=\"#stay\" char=\"}\" />  \n    <IncludeRules context=\"##C++\" />\n  </context>\n</contexts>\n\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Definition\" defStyleNum=\"dsDataType\" />\n  <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n  <itemData name=\"Content-Type Delimiter\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n  <itemData name=\"Directive\" defStyleNum=\"dsKeyword\"/>\n  <itemData name=\"RegExpr\" defStyleNum=\"dsString\" />\n  <itemData name=\"Backslash Code\" defStyleNum=\"dsString\" bold=\"1\" />\n  <itemData name=\"Alert\" defStyleNum=\"dsAlert\" />\n</itemDatas>\n\n</highlighting>\n<general>\n  <comments>\n    <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n  </comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/lilypond.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n  <!ENTITY b \"(?![A-Za-z])\">\n  <!ENTITY rest \"\\b[srR]&b;\">\n  <!ENTITY pitch \"\\b([a-h]((iss){1,2}|(ess){1,2}|(is){1,2}|(es){1,2}|(sharp){1,2}|(flat){1,2}|ss?|ff?)?|(do|re|mi|fa|sol|la|si)(dd?|bb?|ss?|kk?)?|q)('+|,+|&b;)\">\n  <!ENTITY duration \"(\\\\(longa|breve)\\b|(1|2|4|8|16|32|64|128|256|512|1024|2048)(?!\\d))(\\s*\\.+)?(\\s*\\*\\s*\\d+(/\\d+)?)*\">\n  <!ENTITY dynamics \"p{1,5}|mp|mf|f{1,5}|s?fp|sff?|spp?|[sr]?fz|cresc|decresc|dim\">\n  <!ENTITY scripts \"\\d+|accent|marcato|staccat(issim)?o|espressivo|tenuto|portato|(up|down)(bow|mordent|prall)|flageolet|thumb|[lr](heel|toe)|open|stopped|turn|reverseturn|trill|mordent|prall(prall|mordent|down|up)?|lineprall|signumcongruentiae|(short|long|verylong)?fermata|segno|(var)?coda|snappizzicato|halfopen\">\n  <!ENTITY keywords \"accepts|alias|consists|defaultchild|denies|description|grobdescriptions|include|invalid|language|name|objectid|once|remove|sequential|simultaneous|type|version|score|book|bookpart\">\n  <!ENTITY deprecatedkeywords \"consistsend\">\n\n  <!-- predefined commands, grouped, TODO: unravel other commands -->\n  <!ENTITY commands-heads \"(aiken|funk|sacredHarp|southernHarmony|walker)Heads(Minor)?\">\n  <!ENTITY commands-other1 \"acciaccatura|addQuote|afterGrace|allowPageTurn|alternative|apply(Context|Music|Output)|appoggiatura|arpeggio(Arrow(Down|Up)|Bracket|Normal|Parenthesis)?|(a|de)scendens|auctum|augmentum|autoBeamO(ff|n)|autochange|balloon(Grob)?Text|bar|barNumberCheck|bendAfter|breathe|break|cadenzaO(ff|n)|cavum|clef(\\s+(treble|violin|G|alto|C|tenor|(sub)?bass|F|french|(mezzo)?soprano|(var)?baritone|percussion|tab))?|(end)?(de)?cr|cresc(TextCresc|Hairpin)\">\n  <!ENTITY commands-other2 \"(cue|transposedCue)During|default|deminutum|dim(Text(Decresc|Decr|Dim)|Hairpin)|display(Lily)?Music|divisio(Maior|Maxima|Minima)|(dynamic|dots|phrasingSlur|slur|stem|tie|tuplet)(Down|Neutral|Up)|(balloon|text)LengthO(ff|n)|featherDurations|figure(mode|s)|finalis|flexa|(french|german|italian|semiGerman)Chords|glissando|grace|harmonic|(unH|h)ideNotes|(hide|show)StaffSwitch|inclinatum|(keep|remove)WithTag|key(\\s+&pitch;)?|killCues\">\n  <!ENTITY commands-other3 \"label|laissezVibrer|linea|makeClusters|mark|maxima|melisma(End)?|mergeDifferently(Head|Dott)edO(ff|n)|newSpacingSection|no(Beam|Break|PageBreak|PageTurn)|normalsize|numericTimeSignature|octaveCheck|oneVoice|oriscus|ottava|page(-ref|Break|Turn)|parallelMusic|parenthesize|partcombine|partial(\\s*&duration;)?|pes|pitchedTrill\">\n  <!ENTITY commands-other4 \"pointAndClickO(ff|n)|quilisma|quoteDuring|relative(\\s+&pitch;)?|RemoveEmptyStaffContext|repeat(\\s+(unfold|volta|tremolo|percent)(\\s+\\d+)?)?|repeatTie|resetRelativeOctave|rest|scaleDurations|scoreTweak|easyHeadsO(ff|n)|shift(Durations|Off|On{1,3})|(slur|tie)(Both|Dashed|Dotted|Solid)|small|spacingTweaks\">\n  <!ENTITY commands-other5 \"(start|stop)(Group|(Text|Trill)Span|Staff)|stemBoth|stropha|super|(sustain|sostenuto)O(ff|n)|table-of-contents|tag|times?(\\s*\\d+/\\d+)?|tiny|tocItem\">\n  <!ENTITY commands-other6 \"transpose(\\s+&pitch;\\s*&pitch;)?|transposition(\\s+&pitch;)\">\n  <!ENTITY commands-other7 \"tweak|unfoldRepeats|virg(ul)?a|voice(One|Two|Three|Four)|withMusicProperty|cm|mm|in|pt|major|minor|ionian|locrian|aeolian|mixolydian|lydian|phrygian|dorian\">\n\n  <!ENTITY deprecatedcommands \"arpeggio(Up|Down|Neutral)|newpage|script(Up|Down|Both)|(empty|fat)Text|setEasyHeads|(default|voice|modernVoice|piano|forget)Accidentals|(modern(Voice)?|piano)Cautionaries|noResetKey|compressMusic|octave|(sustain|sostenuto)(Down|Up)|set(Hairpin|Text)(Cresc|Decresc|Dim)|setTextDecr\">\n  <!ENTITY markupnotextargs \"arrow-head|beam|char|(semi|sesqui|double)?(flat|sharp)|draw-(circle|line)|epsfile|eyeglasses|filled-box|fret-diagram(-terse|-verbose)?|fromproperty|harp-pedal|(justify|wordwrap)-(field|string)|left-brace|lookup|markalphabet|markletter|musicglyph|natural|note-by-number|note|null|path|right-brace|simple|(back)?slashed-digit|stencil|strut|tied-lyric|triangle|verbatim-file\">\n  <!ENTITY markupwithtextargs \"markup|bold|(rounded-)?box|bracket|caps|(center|general|left|right)-align|circle|((center|dir|left|right)-)?column|combine|concat|dynamic|fill-line|finger|fontCaps|(abs-)?fontsize|fraction|halign|hbracket|hcenter-in|hcenter|hspace|huge|italic|justify|larger?|line|lower|magnify|medium|normal-size-(sub|super)|normal-text|normalsize|number|on-the-fly|override|pad-(around|markup|to-box|x)|page-ref|postscript|put-adjacent|raise|roman|rotate|sans|small(er)?|smallCaps|sub|super|teeny|text|tiny|translate(-scaled)?|transparent|typewriter|underline|upright|vcenter|whiteout|with-(color|dimensions|url)|wordwrap|(markup|column-|justified-|override-|wordwrap-)lines|wordwrap-(string-)?internal\">\n  <!ENTITY deprecatedmarkup \"bigger|h?center\">\n  <!ENTITY headervars \"dedication|(sub){,2}title|poet|composer|meter|opus|arranger|instrument|piece|breakbefore|copyright|tagline|mutopia(title|composer|poet|opus|instrument)|date|enteredby|source|style|maintainer(Email|Web)?|moreInfo|lastupdated|texidoc|footer\">\n\n  <!-- The '-new' entities are for for LilyPond 2.13.4 and higher, and '-old' for LilyPond up to 2.12 -->\n  <!ENTITY paper-margin \"(top|bottom|left|right)-margin|(foot|head)-separation|indent|short-indent|paper-(height|width)|horizontal-shift|line-width\">\n  <!ENTITY paper-margin-new \"(inner|outer)-margin|two-sided|binding-offset\">\n  <!ENTITY paper-spacing-old \"(after|before|between)-title-space|between-system-(space|padding)|page-top-space|page-breaking-between-system-padding\">\n  <!ENTITY paper-spacing-new \"(after|before|between)-title-spacing|between-(scores-)?system-spacing|bottom-system-spacing|top-title-spacing|top-system-spacing|page-breaking-between-system-spacing\">\n  <!ENTITY paper-systems \"system-count\">\n  <!ENTITY paper-systems-new \"(min-|max-)?systems-per-page\">\n  <!ENTITY paper-other \"annotate-spacing|auto-first-page-number|blank-(last-)?page-force|first-page-number|page-count|page-limit-inter-system-space|page-limit-inter-system-space-factor|page-spacing-weight|print-all-headers|print-first-page-number|print-page-number|ragged-(bottom|right)|ragged-last(-bottom)?|system-separator-markup|force-assignment|input-encoding|output-scale\">\n  <!ENTITY paper-markup \"((even|odd)(Footer|Header)|(book|score|toc)Title|tocItem)Markup\">\n  <!ENTITY papervars \"&paper-margin;|&paper-margin-new;|&paper-spacing-old;|&paper-spacing-new;|&paper-systems;|&paper-systems-new;|&paper-other;|&paper-markup;\">\n\n  <!ENTITY layoutvars \"system-count|(short-)?indent\">\n  <!ENTITY toplevelvars \"dash(Hat|Plus|Dash|Bar|Larger|Dot|Underscore)|fermataMarkup|pipeSymbol|slashSeparator\">\n  <!ENTITY performer \"Beam|Control_track|Drum_note|Dynamic|Key|Lyric|Note|Piano_pedal|Slur|Staff|Swallow|Tempo|Tie|Time_signature\">\n  <!ENTITY translator \"Note_swallow|Rest_swallow|Skip_event_swallow|Timing\">\n  <!ENTITY engraver0 \"Accidental|Ambitus|Arpeggio|Auto_beam|Axis_group|Balloon|Bar|Bar_number|Beam|Bend|Break_align|Breathing_sign|Chord_name|Chord_tremolo|Clef|Cluster_spanner|Collision|Completion_heads|Custos|Default_bar_line|Dot_column|Dots|Drum_notes|Dynami_align|Dynamic|Episema|Extender|Figured_bass|Figured_bass_position|Fingering|Font_size|Forbid_line_break|Fretboard|Glissando|Grace_beam|Grace|Grace_spacing|Grid_line_span|Grid_point|Grob_pq|Hara_kiri|Horizontal_bracket\">\n  <!ENTITY engraver1 \"Hyphen|Instrument_name|Instrument_switch|Key|Laissez_vibrer|Ledger_line|Ligature_bracket|Lyric|Mark|Measure_grouping|Melody|Mensural_ligature|Metronome_mark|Multi_measure_rest|New_dynamic|New_fingering|Note_head_line|Note_heads|Note_name|Note_spacing|Ottava_spanner|Output_property|Page_turn|Paper_column|Parenthesis|Part_combine|Percent_repeat|Phrasing_slur|Piano_pedal_align|Piano_pedal|Pitch_squash|Pitched_trill|Repeat_acknowledge|Repeat_tie|Rest_collision|Rest|Rhythmic_column|Scheme|Script_column|Script|Script_row\">\n  <!ENTITY engraver2 \"Separating_line_group|Slash_repeat|Slur|Spacing|Span_arpeggio|Span_bar|Spanner_break_forbid|Staff_collecting|Staff_symbol|Stanza_number_align|Stanza_number|Stem|String_number|Swallow|System_start_delimiter|Tab_harmonic|Tab_note_heads|Tab_staff_symbol|Text|Text_spanner|Tie|Time_signature|Trill_spanner|Tuplet|Tweak|Vaticana_ligature|Vertical_align|Vertically_spaced_contexts|Volta\">\n  <!ENTITY engravers00 \"(&engraver0;)_engraver\">\n  <!ENTITY engravers01 \"(&engraver1;)_engraver\">\n  <!ENTITY engravers02 \"(&engraver2;)_engraver\">\n  <!ENTITY engravers1 \"(&performer;)_performer\">\n  <!ENTITY engravers2 \"(&translator;)_translator\">\n\n  <!ENTITY schemename \"[a-zA-Z#][^\\s(){}[\\];$&quot;]*\">\n  <!ENTITY schemefunc0 \"\\b(define|defined\\?|define\\*(-public)?|define-(\\*|builtin-markup-(list-)?command|class|(extra-)?display-method|fonts?|grob-property|ly-syntax(-loc|-simple)?|macro(-public)?|markup-(list-)command|method|module|music-function|post-event-display-method|public(-macro|-toplevel)?|safe-public|span-event-display-method)|defmacro(\\*(-public)?)?|lambda\\*?|and|or|if|cond|case|let\\*?|letrec|begin|do|delay|set!|else|(quasi)?quote|unquote(-splicing)?|(define|let|letrec)-syntax|syntax-rules)(?=($|\\s|\\)))\">\n  <!ENTITY schemefunc1 \"\\b(not|boolean\\?|eq\\?|eqv\\?|equal\\?|pair\\?|cons|set-c[ad]r!|c[ad]{1,4}r|null\\?|list\\?|list|length|append|reverse|list-ref|mem[qv]|member|ass[qv]|assoc|symbol\\?|symbol-&gt;string|string-&gt;symbol|number\\?|complex\\?|real\\?|rational\\?|integer\\?|exact\\?|inexact\\?|zero\\?|positive\\?|negative\\?|odd\\?|even\\?|max|min|abs|quotient|remainder|modulo|gcd|lcm|numerator|denominator|floor|ceiling|truncate|round|rationalize|exp|log|sin|cos|tan|asin|acos|atan|sqrt|expt|make-rectangular|make-polar|real-part|imag-part|magnitude|angle|exact-&gt;inexact|inexact-&gt;exact|number-&gt;string|string-&gt;number)(?=($|\\s|\\)))\">\n  <!ENTITY schemefunc2 \"\\b(char((-ci)?(=\\?|&lt;\\?|&gt;\\?|&lt;=\\?|&gt;=\\?)|-alphabetic\\?|\\?|-numeric\\?|-whitespace\\?|-upper-case\\?|-lower-case\\?|-&gt;integer|-upcase|-downcase|-ready\\?)|integer-&gt;char|make-string|string(\\?|-copy|-fill!|-length|-ref|-set!|(-ci)?(=\\?|&lt;\\?|&gt;\\?|&lt;=\\?|&gt;=\\?)|-append)|substring|make-vector|vector(\\?|-length|-ref|-set!|-fill!)?|procedure\\?|apply|map|for-each|force|call-with-(current-continuation|(in|out)put-file)|(in|out)put-port\\?|current-(in|out)put-port|open-(in|out)put-file|close-(in|out)put-port|eof-object\\?|read|(read|peek)-char|write(-char)?|display|newline|call/cc|list-tail|string-&gt;list|list-&gt;string|vector-&gt;list|list-&gt;vector|with-input-from-file|with-output-to-file|load|transcript-(on|off)|eval|dynamic-wind|port\\?|values|call-with-values|(scheme-report-|null-|interaction-)environment)(?=($|\\s|\\)))\">\n]>\n<language name=\"LilyPond\" section=\"Other\"\n          style=\"lilypond\" indenter=\"lilypond\"\n          version=\"6\" kateversion=\"3.3\"\n          extensions=\"*.ly;*.LY;*.ily;*.ILY;*.lyi;*.LYI\"\n          mimetype=\"text/x-lilypond\"\n          author=\"Wilbert Berendsen (info@wilbertberendsen.nl)\" license=\"LGPL\">\n\n  <!--\n\n    Fall 2010\n    Minor updates by Wilbert Berendsen\n\n    Changes:\n    - add some new commands (\\path, \\eyeglasses, etc), contexts and grobs for LilyPond 2.14\n    - cleaned up papervars mess by using nested entities categorizing different variables\n\n    November, 2009\n    Minor updates by Wilbert Berendsen\n\n    Changes:\n    - add makeClusters\n    - fix chords in drummode\n\n    October, 2008\n    Minor updates by Wilbert Berendsen\n\n    Changes:\n    - More new LilyPond commands (2.12) and some more deprecated words\n    - Match deprecated properties after header vars\n    - Special case \\tempo command\n\n    January, 2008\n    Fully rewritten by Wilbert Berendsen (info@wilbertberendsen.nl)\n\n    Changes:\n    - correctly parse pitches, chords, durations, etc. marking often made mistakes as invalid\n    - speed up by shortening contexts, e.g. branch out on a \\, instead of RegExpr'ing all \\commands\n    - recognize some contexts like \\layout, \\with, \\header to colorcode variables, engravers, etc. only there\n    - recognize lilypond words like ChoirStaff etc. only in sections and after \\set, \\override etc.\n    - highlight some standard Scheme function names\n    - add \\figuremode recognition\n    - all Scheme stuff has a nice, very light background, to show where Lilypond is in Scheme mode.\n    - mark some deprecated (pre 2.12) LilyPond commands and properties\n\n    October, 2007\n    New version by Wilbert Berendsen (info@wilbertberendsen.nl)\n\n    Changes:\n    - better recognition of being inside lyrics, drums, notes, chords and markup sections\n    - detect block comments %{  %}\n    - links to ##Alerts in comments (e.g. TODO, FIXME)\n    - detect lilypond inside scheme #{ #}\n    - detect \\score inside \\markup, etc.\n    - helps with some often made errors like forgetting spaces around lyric extenders and hyphens\n    - more scheme improvements: strings, numbers, $substitutions, lilypond objects\n    - highlights many variables, commands, lilypond objects, properties, engravers, etc.\n    - by using entities for many regexps the main syntax checking parts remain legible, and the file more maintainable.\n\n    I borrowed some colors and the drum names from Andrea Primiani's first version (August, 2004).\n\n  -->\n\n  <highlighting>\n    <list name=\"contexts\">\n      <item>ChoirStaff</item>\n      <item>ChordNames</item>\n      <item>CueVoice</item>\n      <item>Devnull</item>\n      <item>DrumStaff</item>\n      <item>DrumVoice</item>\n      <item>Dynamics</item>\n      <item>FiguredBass</item>\n      <item>FretBoards</item>\n      <item>Global</item>\n      <item>GrandStaff</item>\n      <item>GregorianTranscriptionStaff</item>\n      <item>GregorianTranscriptionVoice</item>\n      <item>Lyrics</item>\n      <item>MensuralStaff</item>\n      <item>MensuralVoice</item>\n      <item>NoteNames</item>\n      <item>PianoStaff</item>\n      <item>RhythmicStaff</item>\n      <item>Score</item>\n      <item>Staff</item>\n      <item>StaffGroup</item>\n      <item>TabStaff</item>\n      <item>TabVoice</item>\n      <item>Timing</item>\n      <item>VaticanaStaff</item>\n      <item>VaticanaVoice</item>\n      <item>Voice</item>\n    </list>\n    <list name=\"deprecatedcontexts\">\n      <item>InnerChoirStaff</item>\n      <item>InnerStaffGroup</item>\n    </list>\n    <list name=\"layoutobjects\">\n      <item>Accidental</item>\n      <item>AccidentalCautionary</item>\n      <item>AccidentalPlacement</item>\n      <item>AccidentalSuggestion</item>\n      <item>Ambitus</item>\n      <item>AmbitusAccidental</item>\n      <item>AmbitusLine</item>\n      <item>AmbitusNoteHead</item>\n      <item>Arpeggio</item>\n      <item>BalloonTextItem</item>\n      <item>BarLine</item>\n      <item>BarNumber</item>\n      <item>BassFigure</item>\n      <item>BassFigureAlignment</item>\n      <item>BassFigureAlignmentPositioning</item>\n      <item>BassFigureBracket</item>\n      <item>BassFigureContinuation</item>\n      <item>BassFigureLine</item>\n      <item>Beam</item>\n      <item>BendAfter</item>\n      <item>BreakAlignGroup</item>\n      <item>BreakAlignment</item>\n      <item>BreathingSign</item>\n      <item>ChordName</item>\n      <item>Clef</item>\n      <item>ClusterSpanner</item>\n      <item>ClusterSpannerBeacon</item>\n      <item>CombineTextScript</item>\n      <item>Custos</item>\n      <item>DotColumn</item>\n      <item>Dots</item>\n      <item>DoublePercentRepeat</item>\n      <item>DoublePercentRepeatCounter</item>\n      <item>DynamicLineSpanner</item>\n      <item>DynamicText</item>\n      <item>DynamicTextSpanner</item>\n      <item>Episema</item>\n      <item>Fingering</item>\n      <item>FretBoard</item>\n      <item>Glissando</item>\n      <item>GraceSpacing</item>\n      <item>GridLine</item>\n      <item>GridPoint</item>\n      <item>Hairpin</item>\n      <item>HarmonicParenthesesItem</item>\n      <item>HorizontalBracket</item>\n      <item>InstrumentName</item>\n      <item>InstrumentSwitch</item>\n      <item>KeyCancellation</item>\n      <item>KeySignature</item>\n      <item>LaissezVibrerTie</item>\n      <item>LaissezVibrerTieColumn</item>\n      <item>LedgerLineSpanner</item>\n      <item>LeftEdge</item>\n      <item>LigatureBracket</item>\n      <item>LyricExtender</item>\n      <item>LyricHyphen</item>\n      <item>LyricSpace</item>\n      <item>LyricText</item>\n      <item>MeasureGrouping</item>\n      <item>MelodyItem</item>\n      <item>MensuralLigature</item>\n      <item>MetronomeMark</item>\n      <item>MultiMeasureRest</item>\n      <item>MultiMeasureRestNumber</item>\n      <item>MultiMeasureRestText</item>\n      <item>NonMusicalPaperColumn</item>\n      <item>NoteCollision</item>\n      <item>NoteColumn</item>\n      <item>NoteHead</item>\n      <item>NoteName</item>\n      <item>NoteSpacing</item>\n      <item>OctavateEight</item>\n      <item>OttavaBracket</item>\n      <item>PaperColumn</item>\n      <item>ParenthesesItem</item>\n      <item>PercentRepeat</item>\n      <item>PercentRepeatCounter</item>\n      <item>PhrasingSlur</item>\n      <item>PianoPedalBracket</item>\n      <item>RehearsalMark</item>\n      <item>RepeatSlash</item>\n      <item>RepeatTie</item>\n      <item>RepeatTieColumn</item>\n      <item>Rest</item>\n      <item>RestCollision</item>\n      <item>Script</item>\n      <item>ScriptColumn</item>\n      <item>ScriptRow</item>\n      <item>SeparationItem</item>\n      <item>Slur</item>\n      <item>SostenutoPedal</item>\n      <item>SostenutoPedalLineSpanner</item>\n      <item>SpacingSpanner</item>\n      <item>SpanBar</item>\n      <item>StaffGrouper</item>\n      <item>StaffSpacing</item>\n      <item>StaffSymbol</item>\n      <item>StanzaNumber</item>\n      <item>Stem</item>\n      <item>StemTremolo</item>\n      <item>StringNumber</item>\n      <item>StrokeFinger</item>\n      <item>SustainPedal</item>\n      <item>SustainPedalLineSpanner</item>\n      <item>System</item>\n      <item>SystemStartBar</item>\n      <item>SystemStartBrace</item>\n      <item>SystemStartBracket</item>\n      <item>SystemStartSquare</item>\n      <item>TabNoteHead</item>\n      <item>TextScript</item>\n      <item>TextSpanner</item>\n      <item>Tie</item>\n      <item>TieColumn</item>\n      <item>TimeSignature</item>\n      <item>TrillPitchAccidental</item>\n      <item>TrillPitchGroup</item>\n      <item>TrillPitchHead</item>\n      <item>TrillSpanner</item>\n      <item>TupletBracket</item>\n      <item>TupletNumber</item>\n      <item>UnaCordaPedal</item>\n      <item>UnaCordaPedalLineSpanner</item>\n      <item>VaticanaLigature</item>\n      <item>VerticalAlignment</item>\n      <item>VerticalAxisGroup</item>\n      <item>VoiceFollower</item>\n      <item>VoltaBracket</item>\n      <item>VoltaBracketSpanner</item>\n    </list>\n    <list name=\"properties\">\n      <item>aDueText</item>\n      <item>alignAboveContext</item>\n      <item>alignBassFigureAccidentals</item>\n      <item>alignBelowContext</item>\n      <item>allowBeamBreak</item>\n      <item>associatedVoice</item>\n      <item>autoAccidentals</item>\n      <item>autoBeamCheck</item>\n      <item>autoBeamSettings</item>\n      <item>autoBeaming</item>\n      <item>autoCautionaries</item>\n      <item>automaticBars</item>\n      <item>barAlways</item>\n      <item>barCheckSynchronize</item>\n      <item>barNumberVisibility</item>\n      <item>baseMoment</item>\n      <item>bassFigureFormatFunction</item>\n      <item>bassStaffProperties</item>\n      <item>beamExceptions</item>\n      <item>beatGrouping</item>\n      <item>beatLength</item>\n      <item>beatStructure</item>\n      <item>chordChanges</item>\n      <item>chordNameExceptions</item>\n      <item>chordNameExceptionsFull</item>\n      <item>chordNameExceptionsPartial</item>\n      <item>chordNameFunction</item>\n      <item>chordNameSeparator</item>\n      <item>chordNoteNamer</item>\n      <item>chordPrefixSpacer</item>\n      <item>chordRootNamer</item>\n      <item>clefGlyph</item>\n      <item>clefOctavation</item>\n      <item>clefPosition</item>\n      <item>connectArpeggios</item>\n      <item>countPercentRepeats</item>\n      <item>createKeyOnClefChange</item>\n      <item>createSpacing</item>\n      <item>crescendoSpanner</item>\n      <item>crescendoText</item>\n      <item>currentBarNumber</item>\n      <item>decrescendoSpanner</item>\n      <item>decrescendoText</item>\n      <item>defaultBarType</item>\n      <item>doubleSlurs</item>\n      <item>doubleRepeatType</item>\n      <item>drumPitchTable</item>\n      <item>drumStyleTable</item>\n      <item>dynamicAbsoluteVolumeFunction</item>\n      <item>explicitClefVisibility</item>\n      <item>explicitKeySignatureVisibility</item>\n      <item>extendersOverRests</item>\n      <item>extraNatural</item>\n      <item>figuredBassAlterationDirection</item>\n      <item>figuredBassCenterContinuations</item>\n      <item>figuredBassFormatter</item>\n      <item>figuredBassPlusDirection</item>\n      <item>fingeringOrientations</item>\n      <item>firstClef</item>\n      <item>followVoice</item>\n      <item>fontSize</item>\n      <item>forbidBreak</item>\n      <item>forceClef</item>\n      <item>gridInterval</item>\n      <item>hairpinToBarline</item>\n      <item>harmonicAccidentals</item>\n      <item>highStringOne</item>\n      <item>ignoreBarChecks</item>\n      <item>ignoreFiguredBassRest</item>\n      <item>ignoreMelismata</item>\n      <item>implicitBassFigures</item>\n      <item>implicitTimeSignatureVisibility</item>\n      <item>instrumentCueName</item>\n      <item>instrumentEqualizer</item>\n      <item>instrumentName</item>\n      <item>instrumentTransposition</item>\n      <item>internalBarNumber</item>\n      <item>keepAliveInterfaces</item>\n      <item>keyAlterationOrder</item>\n      <item>keySignature</item>\n      <item>lyricMelismaAlignment</item>\n      <item>majorSevenSymbol</item>\n      <item>markFormatter</item>\n      <item>maximumFretStretch</item>\n      <item>measureLength</item>\n      <item>measurePosition</item>\n      <item>melismaBusyProperties</item>\n      <item>metronomeMarkFormatter</item>\n      <item>middleCClefPosition</item>\n      <item>middleCOffset</item>\n      <item>middleCPosition</item>\n      <item>midiInstrument</item>\n      <item>midiMaximumVolume</item>\n      <item>midiMinimumVolume</item>\n      <item>minimumFret</item>\n      <item>minimumPageTurnLength</item>\n      <item>minimumRepeatLengthForPageTurn</item>\n      <item>noteToFretFunction</item>\n      <item>ottavation</item>\n      <item>output</item>\n      <item>pedalSostenutoStrings</item>\n      <item>pedalSostenutoStyle</item>\n      <item>pedalSustainStrings</item>\n      <item>pedalSustainStyle</item>\n      <item>pedalUnaCordaStrings</item>\n      <item>pedalUnaCordaStyle</item>\n      <item>printKeyCancellation</item>\n      <item>printOctaveNames</item>\n      <item>printPartCombineTexts</item>\n      <item>proportionalNotationDuration</item>\n      <item>recordEventSequence</item>\n      <item>rehearsalMark</item>\n      <item>repeatCommands</item>\n      <item>restNumberThreshold</item>\n      <item>scriptDefinitions</item>\n      <item>shapeNoteStyles</item>\n      <item>shortInstrumentName</item>\n      <item>shortVocalName</item>\n      <item>skipBars</item>\n      <item>skipTypesetting</item>\n      <item>soloIIText</item>\n      <item>soloText</item>\n      <item>squashedPosition</item>\n      <item>staffLineLayoutFunction</item>\n      <item>stanza</item>\n      <item>stemLeftBeamCount</item>\n      <item>stemRightBeamCount</item>\n      <item>stringNumberOrientations</item>\n      <item>stringOneTopmost</item>\n      <item>stringTunings</item>\n      <item>strokeFingerOrientations</item>\n      <item>subdivideBeams</item>\n      <item>suggestAccidentals</item>\n      <item>systemStartDelimiter</item>\n      <item>systemStartDelimiterHierarchy</item>\n      <item>tablatureFormat</item>\n      <item>tempoUnitCount</item>\n      <item>tempoUnitDuration</item>\n      <item>tempoWholesPerMinute</item>\n      <item>tieWaitForNote</item>\n      <item>timeSignatureFraction</item>\n      <item>timing</item>\n      <item>tonic</item>\n      <item>topLevelAlignment</item>\n      <item>trebleStaffProperties</item>\n      <item>tremoloFlags</item>\n      <item>tupletFullLength</item>\n      <item>tupletFullLengthNote</item>\n      <item>tupletSpannerDuration</item>\n      <item>useBassFigureExtenders</item>\n      <item>verticallySpacedContexts</item>\n      <item>vocalName</item>\n      <item>voltaOnThisStaff</item> <!-- gone in 2.12 and 2.13 -->\n      <item>voltaSpannerDuration</item>\n      <item>whichBar</item>\n    </list>\n    <list name=\"deprecatedproperties\">\n      <item>barNumberAlignSymbol</item>\n      <item>centralCPosition</item>\n      <item>extraVerticalExtent</item>\n      <item>fingerHorizontalDirection</item>\n      <item>instr</item>\n      <item>instrument</item>\n      <item>keyAccidentalOrder</item>\n      <item>minimumVerticalExtent</item>\n      <item>rehearsalMarkAlignSymbol</item>\n      <item>soloADue</item>\n      <item>tupletNumberFormatFunction</item>\n      <item>vocNam</item>\n    </list>\n    <list name=\"musicexpressions\">\n      <item>AbsoluteDynamicEvent</item>\n      <item>AnnotateOutputEvent</item>\n      <item>ApplyContext</item>\n      <item>ApplyOutputEvent</item>\n      <item>ArpeggioEvent</item>\n      <item>ArticulationEvent</item>\n      <item>AutoChangeMusic</item>\n      <item>BarCheck</item>\n      <item>BassFigureEvent</item>\n      <item>BeamEvent</item>\n      <item>BeamForbidEvent</item>\n      <item>BendAfterEvent</item>\n      <item>BreathingEvent</item>\n      <item>ClusterNoteEvent</item>\n      <item>ContextChange</item>\n      <item>ContextSpeccedMusic</item>\n      <item>CrescendoEvent</item>\n      <item>DecrescendoEvent</item>\n      <item>Event</item>\n      <item>EventChord</item>\n      <item>ExtenderEvent</item>\n      <item>FingeringEvent</item>\n      <item>GlissandoEvent</item>\n      <item>GraceMusic</item>\n      <item>HarmonicEvent</item>\n      <item>HyphenEvent</item>\n      <item>KeyChangeEvent</item>\n      <item>LabelEvent</item>\n      <item>LaissezVibrerEvent</item>\n      <item>LigatureEvent</item>\n      <item>LineBreakEvent</item>\n      <item>LyricCombineMusic</item>\n      <item>LyricEvent</item>\n      <item>MarkEvent</item>\n      <item>MultiMeasureRestEvent</item>\n      <item>MultiMeasureRestMusic</item>\n      <item>MultiMeasureTextEvent</item>\n      <item>Music</item>\n      <item>NoteEvent</item>\n      <item>NoteGroupingEvent</item>\n      <item>OverrideProperty</item>\n      <item>PageBreakEvent</item>\n      <item>PageTurnEvent</item>\n      <item>PartCombineMusic</item>\n      <item>PercentEvent</item>\n      <item>PercentRepeatedMusic</item>\n      <item>PesOrFlexaEvent</item>\n      <item>PhrasingSlurEvent</item>\n      <item>PropertySet</item>\n      <item>PropertyUnset</item>\n      <item>QuoteMusic</item>\n      <item>RelativeOctaveCheck</item>\n      <item>RelativeOctaveMusic</item>\n      <item>RepeatTieEvent</item>\n      <item>RepeatedMusic</item>\n      <item>RestEvent</item>\n      <item>RevertProperty</item>\n      <item>ScriptEvent</item>\n      <item>SequentialMusic</item>\n      <item>SimultaneousMusic</item>\n      <item>SkipEvent</item>\n      <item>SkipMusic</item>\n      <item>SlurEvent</item>\n      <item>SoloOneEvent</item>\n      <item>SoloTwoEvent</item>\n      <item>SostenutoEvent</item>\n      <item>SpacingSectionEvent</item>\n      <item>SpanEvent</item>\n      <item>StaffSpanEvent</item>\n      <item>StringNumberEvent</item>\n      <item>StrokeFingerEvent</item>\n      <item>SustainEvent</item>\n      <item>TextScriptEvent</item>\n      <item>TextSpanEvent</item>\n      <item>TieEvent</item>\n      <item>TimeScaledMusic</item>\n      <item>TransposedMusic</item>\n      <item>TremoloEvent</item>\n      <item>TremoloRepeatedMusic</item>\n      <item>TremoloSpanEvent</item>\n      <item>TrillSpanEvent</item>\n      <item>TupletSpanEvent</item>\n      <item>UnaCordaEvent</item>\n      <item>UnfoldedRepeatedMusic</item>\n      <item>UnisonoEvent</item>\n      <item>UnrelativableMusic</item>\n      <item>VoiceSeparator</item>\n      <item>VoltaRepeatedMusic</item>\n    </list>\n    <list name=\"drumpitchnames\">\n      <item>acousticbassdrum</item>\n      <item>acousticsnare</item>\n      <item>agh</item>\n      <item>agl</item>\n      <item>bassdrum</item>\n      <item>bd</item>\n      <item>bda</item>\n      <item>boh</item>\n      <item>bohm</item>\n      <item>boho</item>\n      <item>bol</item>\n      <item>bolm</item>\n      <item>bolo</item>\n      <item>cab</item>\n      <item>cabasa</item>\n      <item>cb</item>\n      <item>cgh</item>\n      <item>cghm</item>\n      <item>cgho</item>\n      <item>cgl</item>\n      <item>cglm</item>\n      <item>cglo</item>\n      <item>chinesecymbal</item>\n      <item>cl</item>\n      <item>claves</item>\n      <item>closedhihat</item>\n      <item>cowbell</item>\n      <item>crashcymbal</item>\n      <item>crashcymbala</item>\n      <item>crashcymbalb</item>\n      <item>cuim</item>\n      <item>cuio</item>\n      <item>cymc</item>\n      <item>cymca</item>\n      <item>cymcb</item>\n      <item>cymch</item>\n      <item>cymr</item>\n      <item>cymra</item>\n      <item>cymrb</item>\n      <item>cyms</item>\n      <item>da</item>\n      <item>db</item>\n      <item>dc</item>\n      <item>dd</item>\n      <item>de</item>\n      <item>electricsnare</item>\n      <item>fivedown</item>\n      <item>fiveup</item>\n      <item>fourdown</item>\n      <item>fourup</item>\n      <item>gui</item>\n      <item>guil</item>\n      <item>guiro</item>\n      <item>guis</item>\n      <item>halfopenhihat</item>\n      <item>handclap</item>\n      <item>hc</item>\n      <item>hh</item>\n      <item>hhc</item>\n      <item>hhho</item>\n      <item>hho</item>\n      <item>hhp</item>\n      <item>hiagogo</item>\n      <item>hibongo</item>\n      <item>hiconga</item>\n      <item>highfloortom</item>\n      <item>hightom</item>\n      <item>hihat</item>\n      <item>himidtom</item>\n      <item>hisidestick</item>\n      <item>hitimbale</item>\n      <item>hiwoodblock</item>\n      <item>loagogo</item>\n      <item>lobongo</item>\n      <item>loconga</item>\n      <item>longguiro</item>\n      <item>longwhistle</item>\n      <item>losidestick</item>\n      <item>lotimbale</item>\n      <item>lowfloortom</item>\n      <item>lowmidtom</item>\n      <item>lowoodblock</item>\n      <item>lowtom</item>\n      <item>mar</item>\n      <item>maracas</item>\n      <item>mutecuica</item>\n      <item>mutehibongo</item>\n      <item>mutehiconga</item>\n      <item>mutelobongo</item>\n      <item>muteloconga</item>\n      <item>mutetriangle</item>\n      <item>onedown</item>\n      <item>oneup</item>\n      <item>opencuica</item>\n      <item>openhibongo</item>\n      <item>openhiconga</item>\n      <item>openhihat</item>\n      <item>openlobongo</item>\n      <item>openloconga</item>\n      <item>opentriangle</item>\n      <item>pedalhihat</item>\n      <item>rb</item>\n      <item>ridebell</item>\n      <item>ridecymbal</item>\n      <item>ridecymbala</item>\n      <item>ridecymbalb</item>\n      <item>shortguiro</item>\n      <item>shortwhistle</item>\n      <item>sidestick</item>\n      <item>sn</item>\n      <item>sna</item>\n      <item>snare</item>\n      <item>sne</item>\n      <item>splashcymbal</item>\n      <item>ss</item>\n      <item>ssh</item>\n      <item>ssl</item>\n      <item>tamb</item>\n      <item>tambourine</item>\n      <item>tamtam</item>\n      <item>threedown</item>\n      <item>threeup</item>\n      <item>timh</item>\n      <item>timl</item>\n      <item>tomfh</item>\n      <item>tomfl</item>\n      <item>tomh</item>\n      <item>toml</item>\n      <item>tommh</item>\n      <item>tomml</item>\n      <item>tri</item>\n      <item>triangle</item>\n      <item>trim</item>\n      <item>trio</item>\n      <item>tt</item>\n      <item>twodown</item>\n      <item>twoup</item>\n      <item>ua</item>\n      <item>ub</item>\n      <item>uc</item>\n      <item>ud</item>\n      <item>ue</item>\n      <item>vibraslap</item>\n      <item>vibs</item>\n      <item>wbh</item>\n      <item>wbl</item>\n      <item>whl</item>\n      <item>whs</item>\n    </list>\n    <contexts>\n      <!-- Entry point -->\n      <context name=\"lilypond\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"music\"/>\n        <RegExpr String=\"\\b[a-z]+\\s*=\" insensitive=\"true\" lookAhead=\"true\" context=\"assignment\"/>\n      </context>\n\n      <!-- Music expressions -->\n      <context name=\"music\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <AnyChar String=\"()~\" attribute=\"Slur\"/>\n        <AnyChar String=\"[]\" attribute=\"Beam\"/>\n        <AnyChar String=\"-_^\" context=\"connect\"/>\n        <DetectChar char=\"\\\" context=\"musiccommand\" lookAhead=\"true\"/>\n        <IncludeRules context=\"default\"/>\n        <DetectChar char=\"&lt;\" attribute=\"Chord\" context=\"chord\"/>\n        <DetectChar char=\"&gt;\" attribute=\"Invalid\"/><!-- chord terminator outsite chord -->\n        <RegExpr String=\"[a-z]+\\d+\\.*[,']+\" attribute=\"Invalid\"/><!-- pitch-dur-octave i.s.o. pitch-oct-dur -->\n        <RegExpr String=\"(&rest;|&pitch;)\" context=\"pitch\"/>\n        <RegExpr String=\":\\d*\" attribute=\"Tremolo\"/>\n      </context>\n\n      <!-- Default Lilypond code to be recognized e.g. also inside lyrics -->\n      <context name=\"default\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"&lt;\" char1=\"&lt;\" attribute=\"Keyword\" beginRegion=\"simultaneous\"/>\n        <Detect2Chars char=\"&gt;\" char1=\"&gt;\" attribute=\"Keyword\" endRegion=\"simultaneous\"/>\n        <DetectChar char=\"{\" attribute=\"Keyword\" beginRegion=\"sequential\"/>\n        <DetectChar char=\"}\" attribute=\"Keyword\" endRegion=\"sequential\"/>\n        <DetectChar char=\"|\" attribute=\"Check\"/>\n        <DetectChar char=\"\\\" context=\"command\" lookAhead=\"true\"/>\n        <IncludeRules context=\"basic\"/>\n      </context>\n\n      <!-- Basic Lilypond syntax that also works inside markup -->\n      <context name=\"basic\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"%\" char1=\"{\" context=\"commentblock\" beginRegion=\"comment\"/>\n        <DetectChar char=\"%\" context=\"commentline\"/>\n        <DetectChar char=\"&quot;\" context=\"string\"/>\n        <DetectChar char=\"#\" context=\"scheme\"/>\n        <DetectChar char=\"$\" context=\"schemesub\"/>\n      </context>\n\n      <context name=\"musiccommand\" attribute=\"Normal Text\" lineEndContext=\"#pop\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr String=\"\\\\(&dynamics;)&b;\" attribute=\"Dynamic\"/>\n        <RegExpr String=\"\\\\[&lt;!&gt;]\" attribute=\"Dynamic\"/>\n        <RegExpr String=\"\\\\(&scripts;)&b;\" attribute=\"Articulation\"/>\n        <RegExpr String=\"\\\\[()]\" attribute=\"Slur\"/>\n        <RegExpr String=\"\\\\[][]\" attribute=\"Beam\"/>\n        <IncludeRules context=\"command\"/>\n      </context>\n\n      <context name=\"command\" attribute=\"Normal Text\" lineEndContext=\"#pop\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Keyword\"/>\n        <RegExpr String=\"\\\\note(mode|s)&b;\" context=\"notemode\"/>\n        <RegExpr String=\"\\\\drum(mode|s)&b;\" context=\"drummode\"/>\n        <RegExpr String=\"\\\\chord(mode|s)&b;\" context=\"chordmode\"/>\n        <RegExpr String=\"\\\\figure(mode|s)&b;\" context=\"figuremode\"/>\n        <RegExpr String=\"\\\\(lyric(mode|s)|addlyrics)&b;\" context=\"lyricmode\"/>\n        <RegExpr String=\"\\\\lyricsto&b;\" context=\"lyricsto\"/>\n        <RegExpr String=\"\\\\markup(lines)?&b;\" attribute=\"Markup\" context=\"markup\"/>\n        <RegExpr String=\"\\\\(header|paper|layout|midi|with)\\b\" context=\"section\"/>\n        <RegExpr String=\"\\\\(new|context|change)\\b\" attribute=\"Keyword\" context=\"context\"/>\n        <RegExpr String=\"\\\\(un)?set\\b\" attribute=\"Keyword\" context=\"set\"/>\n        <RegExpr String=\"\\\\(override(Property)?|revert)&b;\" attribute=\"Keyword\" context=\"override\"/>\n        <RegExpr String=\"\\\\skip&b;\" attribute=\"Command\" context=\"duration\"/>\n        <RegExpr String=\"\\\\tempo&b;\" attribute=\"Command\" context=\"tempo\"/>\n        <RegExpr String=\"\\\\(&keywords;)&b;\" attribute=\"Keyword\"/>\n        <RegExpr String=\"\\\\(&commands-heads;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&commands-other1;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&commands-other2;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&commands-other3;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&commands-other4;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&commands-other5;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&commands-other6;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&commands-other7;)&b;\" attribute=\"Command\"/>\n        <RegExpr String=\"\\\\(&toplevelvars;)&b;\" attribute=\"Variable\"/>\n        <RegExpr String=\"\\\\(&deprecatedkeywords;)&b;\" attribute=\"Deprecated Keyword\"/>\n        <RegExpr String=\"\\\\(&deprecatedcommands;)&b;\" attribute=\"Deprecated Command\"/>\n        <RegExpr String=\"\\\\(translator|newcontext)\\b\" attribute=\"Deprecated Keyword\" context=\"context\"/>\n        <RegExpr String=\"\\\\property&b;\" attribute=\"Deprecated Keyword\" context=\"override\"/>\n        <RegExpr String=\"\\\\[A-Za-z]+\" attribute=\"User Command\"/>\n        <DetectChar char=\"\\\" attribute=\"Invalid\"/>\n      </context>\n\n      <context name=\"assignment\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr String=\"\\b(&toplevelvars;)\\b\" attribute=\"Variable\" context=\"#pop\"/>\n        <RegExpr String=\"[a-z]+\" insensitive=\"true\" attribute=\"User Command\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"pitch\" attribute=\"Pitch\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr String=\"=\\s*('+|,+)?\" attribute=\"Check\"/>\n        <AnyChar String=\"!?\"/>\n        <IncludeRules context=\"duration\"/>\n      </context>\n\n      <context name=\"duration\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal Text\"/>\n        <RegExpr String=\"&duration;\" attribute=\"Duration\" context=\"#pop\"/>\n        <RegExpr String=\"\\d+\" attribute=\"Invalid\" context=\"#pop\"/><!-- uncaught (wrong) durations -->\n      </context>\n\n      <context name=\"chord\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&gt;\" context=\"chordend\"/>\n        <RegExpr String=\"&pitch;\" context=\"chordpitch\"/>\n        <AnyChar String=\"&lt;{}srR\" attribute=\"Invalid\"/><!-- no rests in chord allowed -->\n        <IncludeRules context=\"music\"/>\n      </context>\n\n      <context name=\"chordpitch\" attribute=\"Pitch\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal Text\"/>\n        <RegExpr String=\"=\\s*('+|,+)?\" attribute=\"Check\"/>\n        <RegExpr String=\"&duration;\" attribute=\"Invalid\" context=\"#pop\"/><!-- no duration in chord allowed -->\n        <RegExpr String=\"\\d+\" attribute=\"Invalid\" context=\"#pop\"/><!-- catch other (wrong) durations as well -->\n      </context>\n\n      <context name=\"chordend\" attribute=\"Chord\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectSpaces attribute=\"Normal Text\"/>\n        <RegExpr String=\"&duration;\" attribute=\"Duration\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"commentline\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context name=\"commentblock\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"%\" char1=\"}\" attribute=\"Comment\" context=\"#pop\" endRegion=\"comment\"/>\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context name=\"string\" attribute=\"Quoted Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" attribute=\"Quoted Text\" context=\"#pop\"/>\n        <Detect2Chars char=\"\\\" char1=\"\\\"/>\n        <Detect2Chars char=\"\\\" char1=\"&quot;\"/>\n      </context>\n\n      <context name=\"connect\" attribute=\"Articulation\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <AnyChar String=\".-+|&gt;^_12345\" attribute=\"Articulation\" context=\"#pop\"/>\n      </context>\n\n      <!-- Scheme -->\n      <context name=\"scheme\" attribute=\"Scheme\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"scheme2\">\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"scheme2\" attribute=\"Scheme\" lineEndContext=\"#pop#pop\">\n        <DetectChar char=\"(\" attribute=\"Scheme Keyword\" context=\"scheme3\" beginRegion=\"scheme\"/>\n        <IncludeRules context=\"schemerules\"/>\n        <DetectSpaces lookAhead=\"true\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"scheme3\" attribute=\"Scheme\" lineEndContext=\"#stay\">\n        <DetectChar char=\")\" attribute=\"Scheme Keyword\" context=\"#pop#pop#pop\" endRegion=\"scheme\"/>\n        <IncludeRules context=\"schemerules\"/>\n      </context>\n\n      <context name=\"schemerules\" attribute=\"Scheme\" lineEndContext=\"#stay\">\n        <DetectChar char=\"(\" context=\"schemerules\" beginRegion=\"scheme\"/>\n        <DetectChar char=\")\" context=\"#pop\" endRegion=\"scheme\"/>\n        <DetectChar char=\"&quot;\" context=\"schemestring\"/>\n        <DetectChar char=\";\" context=\"schemecommentline\"/>\n        <DetectChar char=\"$\" context=\"schemesub\"/>\n        <DetectChar char=\"'\" context=\"schemequote\"/>\n        <Detect2Chars char=\"#\" char1=\"!\" context=\"schemecommentblock\" beginRegion=\"schemecomment\"/>\n        <Detect2Chars char=\"#\" char1=\"{\" attribute=\"Scheme Keyword\" context=\"schemelily\" beginRegion=\"schemelily\"/>\n        <keyword String=\"musicexpressions\" attribute=\"Scheme Keyword\"/>\n        <keyword String=\"contexts\" attribute=\"Scheme Keyword\"/>\n        <keyword String=\"layoutobjects\" attribute=\"Scheme Keyword\"/>\n        <RegExpr String=\"[-+]?(\\d+(\\.\\d+)?|\\.\\d+)\" attribute=\"Scheme Value\"/>\n        <RegExpr String=\"#(t|f|b[-+]?[01.]+|o[-+]?[0-7.]+|d[-+]?[0-9.]+|x[-+]?[0-9a-f.]+)\"\n                 insensitive=\"true\" attribute=\"Scheme Value\"/>\n        <RegExpr String=\"[+-](inf|nan)\\.0\" attribute=\"Scheme Value\"/>\n        <RegExpr String=\"&schemefunc0;\" attribute=\"Scheme Keyword\"/>\n        <RegExpr String=\"&schemefunc1;\" attribute=\"Scheme Keyword\"/>\n        <RegExpr String=\"&schemefunc2;\" attribute=\"Scheme Keyword\"/>\n        <RegExpr String=\"&schemename;\"/>\n      </context>\n\n      <context name=\"schemequote\" attribute=\"Scheme\" lineEndContext=\"#pop\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr String=\"&schemefunc0;\"/>\n        <RegExpr String=\"&schemefunc1;\"/>\n        <RegExpr String=\"&schemefunc2;\"/>\n      </context>\n\n      <context name=\"schemelily\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"#\" char1=\"}\" attribute=\"Scheme Keyword\" context=\"#pop\" endRegion=\"schemelily\"/>\n        <IncludeRules context=\"lilypond\"/>\n      </context>\n\n      <context name=\"schemecommentline\" attribute=\"Scheme Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context name=\"schemecommentblock\" attribute=\"Scheme Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"!\" char1=\"#\" attribute=\"Scheme Comment\" context=\"#pop\" endRegion=\"schemecomment\"/>\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context name=\"schemesub\" attribute=\"Scheme Subst\" lineEndContext=\"#pop\"\n                fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr String=\"&schemename;\" attribute=\"Scheme Subst\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"schemestring\" attribute=\"Scheme String\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" attribute=\"Scheme String\" context=\"#pop\"/>\n        <RegExpr String=\"\\\\[0fnrtav\\\\&quot;]\"/>\n      </context>\n\n      <!-- NoteMode -->\n      <context name=\"notemode\" attribute=\"Other Mode\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"notemode2\" beginRegion=\"sequential\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"notemode2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop\" endRegion=\"sequential\"/>\n        <IncludeRules context=\"noterules\"/>\n      </context>\n\n      <context name=\"noterules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"noterules\" beginRegion=\"sequential\"/>\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"sequential\"/>\n        <IncludeRules context=\"music\"/>\n      </context>\n\n      <!-- Drummode -->\n      <context name=\"drummode\" attribute=\"Other Mode\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"drummode2\" beginRegion=\"sequential\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"drummode2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop\" endRegion=\"sequential\"/>\n        <IncludeRules context=\"drumrules\"/>\n      </context>\n\n      <context name=\"drumrules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"drumrules\" beginRegion=\"sequential\"/>\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"sequential\"/>\n        <RegExpr String=\"&lt;(?!&lt;)\" attribute=\"Chord\" context=\"drumchord\"/>\n        <keyword attribute=\"Other Text\" String=\"drumpitchnames\" context=\"duration\"/>\n        <IncludeRules context=\"music\"/>\n      </context>\n\n      <context name=\"drumchord\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Other Text\" String=\"drumpitchnames\"/>\n        <IncludeRules context=\"chord\"/>\n      </context>\n\n      <!-- Chordmode -->\n      <context name=\"chordmode\" attribute=\"Other Mode\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"chordmode2\" beginRegion=\"sequential\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"chordmode2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop\" endRegion=\"sequential\"/>\n        <IncludeRules context=\"chordrules\"/>\n      </context>\n\n      <context name=\"chordrules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"chordrules\" beginRegion=\"sequential\"/>\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"sequential\"/>\n        <RegExpr attribute=\"Other Text\" String=\":?([\\.^]?\\d+[-+]?|(m|dim|aug|maj|sus)&b;)*(/\\+?&pitch;)?\"/>\n        <IncludeRules context=\"music\"/>\n      </context>\n\n      <!-- Figuremode -->\n      <context name=\"figuremode\" attribute=\"Other Mode\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"figuremode2\" beginRegion=\"sequential\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"figuremode2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop\" endRegion=\"sequential\"/>\n        <IncludeRules context=\"figurerules\"/>\n      </context>\n\n      <context name=\"figurerules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"figurerules\" beginRegion=\"sequential\"/>\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"sequential\"/>\n        <DetectChar char=\"&lt;\" attribute=\"Chord\" context=\"figure\"/>\n        <RegExpr String=\"&rest;\" attribute=\"Pitch\" context=\"duration\"/>\n        <IncludeRules context=\"default\"/>\n      </context>\n\n      <context name=\"figure\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&gt;\" attribute=\"Chord\" context=\"chordend\"/>\n        <IncludeRules context=\"basic\"/>\n        <RegExpr String=\"\\\\markup(lines)?&b;\" attribute=\"Markup\" context=\"markup\"/>\n        <RegExpr String=\"\\\\skip&b;\" attribute=\"Command\" context=\"duration\"/>\n      </context>\n\n      <!-- Lyrics -->\n      <context name=\"lyricmode\" attribute=\"Lyricmode\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"lyricmode2\" beginRegion=\"sequential\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"lyricmode2\" attribute=\"Lyric Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop\" endRegion=\"sequential\"/>\n        <IncludeRules context=\"lyricrules\"/>\n      </context>\n\n      <!-- LyricsTo has extra parameter -->\n      <context name=\"lyricsto\" attribute=\"Lyricmode\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr String=\"&quot;(\\\\[&quot;\\\\]|[^&quot;\\\\])+&quot;\" attribute=\"Quoted Text\" context=\"lyricsto2\"/>\n        <RegExpr String=\"[A-Za-z]+\" attribute=\"Normal Text\" context=\"lyricsto2\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"lyricsto2\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"lyricsto3\" beginRegion=\"sequential\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"lyricsto3\" attribute=\"Lyric Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop#pop\" endRegion=\"sequential\"/>\n        <IncludeRules context=\"lyricrules\"/>\n      </context>\n\n      <context name=\"lyricrules\" attribute=\"Lyric Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"lyricrules\" beginRegion=\"sequential\"/>\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"sequential\"/>\n        <RegExpr String=\"(\\w+-{2,}|\\w+_{2,}|-{2,}\\w+|_{2,}\\w+)\" attribute=\"Invalid\"/><!-- two hyphens or underscores run together with a word -->\n        <RegExpr String=\"&duration;\" attribute=\"Duration\"/>\n        <RegExpr String=\"(--|__|_)\" attribute=\"Lyricmode\"/>\n        <IncludeRules context=\"default\"/>\n        <RegExpr String=\"\\S+\\}\" attribute=\"Invalid\" context=\"#pop\" endRegion=\"sequential\"/>\n      </context>\n\n      <!-- Markup -->\n      <context name=\"markup\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"markup2\" beginRegion=\"markup\"/>\n        <DetectSpaces/>\n        <RegExpr String=\"\\\\score\\b\" attribute=\"Markup\" context=\"notemode\"/>\n        <RegExpr String=\"\\\\(&markupwithtextargs;)&b;\" attribute=\"Markup\"/>\n        <RegExpr String=\"\\\\(&markupnotextargs;)&b;\" attribute=\"Markup\" context=\"#pop\"/>\n        <DetectChar char=\"#\" context=\"scheme\"/>\n        <RegExpr String=\"[^&quot;\\s\\\\#%{}$]+\" attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"markup2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop\" endRegion=\"markup\"/>\n        <IncludeRules context=\"markuprules\"/>\n      </context>\n\n      <context name=\"markuprules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"markup\"/>\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"markuprules\" beginRegion=\"markup\"/>\n        <RegExpr String=\"\\\\score\\b\" attribute=\"Markup\" context=\"notemode\"/>\n        <RegExpr String=\"\\\\(&markupnotextargs;|&markupwithtextargs;)&b;\" attribute=\"Markup\"/>\n        <RegExpr String=\"\\\\(&deprecatedmarkup;)&b;\" attribute=\"Deprecated Markup\"/>\n        <RegExpr String=\"\\\\[A-Za-z]+(-[A-Za-z]+)*\" attribute=\"User Command\"/>\n        <IncludeRules context=\"basic\"/>\n      </context>\n\n      <!-- \\paper, \\layout, \\midi, \\header, \\with -->\n      <context name=\"section\" attribute=\"Keyword\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"section2\" beginRegion=\"section\"/>\n        <DetectSpaces/>\n      </context>\n\n      <context name=\"section2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop#pop\" endRegion=\"section\"/>\n        <IncludeRules context=\"sectionrules\"/>\n      </context>\n\n      <context name=\"sectionrules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"section\"/>\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"sectionrules\" beginRegion=\"section\"/>\n        <keyword String=\"contexts\" attribute=\"Context\"/>\n        <keyword String=\"deprecatedcontexts\" attribute=\"Deprecated Context\"/>\n        <RegExpr String=\"(&quot;?)\\b(&engravers00;)\\b\\1\" attribute=\"Engraver\"/>\n        <RegExpr String=\"(&quot;?)\\b(&engravers01;)\\b\\1\" attribute=\"Engraver\"/>\n        <RegExpr String=\"(&quot;?)\\b(&engravers02;)\\b\\1\" attribute=\"Engraver\"/>\n        <RegExpr String=\"(&quot;?)\\b(&engravers1;)\\b\\1\" attribute=\"Engraver\"/>\n        <RegExpr String=\"(&quot;?)\\b(&engravers2;)\\b\\1\" attribute=\"Engraver\"/>\n        <keyword String=\"layoutobjects\" attribute=\"Layout Object\"/>\n        <keyword String=\"properties\" attribute=\"Property\"/>\n        <RegExpr String=\"\\b(&headervars;|&papervars;|&layoutvars;)\\b\" attribute=\"Variable\"/>\n        <keyword String=\"deprecatedproperties\" attribute=\"Deprecated Property\"/>\n        <IncludeRules context=\"default\"/>\n      </context>\n\n      <!-- \\new, \\context, \\change -->\n      <context name=\"context\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <keyword String=\"contexts\" attribute=\"Context\" context=\"context2\"/>\n        <keyword String=\"deprecatedcontexts\" attribute=\"Deprecated Context\" context=\"context2\"/>\n        <RegExpr String=\"[A-Za-z]+\" attribute=\"User Command\" context=\"context2\"/>\n        <DetectChar char=\"{\" attribute=\"Keyword\" context=\"section2\" beginRegion=\"section\"/>\n      </context>\n\n      <context name=\"context2\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectSpaces/>\n        <RegExpr String=\"=(\\s*[A-Za-z]+)?\" attribute=\"Normal Text\" context=\"#pop#pop\"/>\n      </context>\n\n      <!-- \\set, \\unset -->\n      <context name=\"set\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <keyword String=\"contexts\" attribute=\"Context\"/>\n        <keyword String=\"deprecatedcontexts\" attribute=\"Deprecated Context\"/>\n        <DetectChar char=\".\"/>\n        <keyword String=\"properties\" attribute=\"Property\" context=\"#pop\"/>\n        <keyword String=\"deprecatedproperties\" attribute=\"Deprecated Property\" context=\"#pop\"/>\n        <RegExpr String=\"[A-Za-z]+\" attribute=\"User Command\" context=\"#pop\"/>\n      </context>\n\n      <!-- \\override, \\overrideProperty, \\revert -->\n      <context name=\"override\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <keyword String=\"contexts\" attribute=\"Context\"/>\n        <keyword String=\"deprecatedcontexts\" attribute=\"Deprecated Context\"/>\n        <DetectChar char=\".\"/>\n        <keyword String=\"layoutobjects\" attribute=\"Layout Object\" context=\"#pop\"/>\n        <RegExpr String=\"[A-Za-z]+(?=\\s*\\.)\" attribute=\"User Command\"/>\n        <RegExpr String=\"[A-Za-z]+\" attribute=\"User Command\" context=\"#pop\"/>\n      </context>\n\n      <!-- special cases for individual commands -->\n      <!-- \\tempo -->\n      <context name=\"tempo\" attribute=\"Normal Text\" lineEndContext=\"#stay\"\n               fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr String=\"\\\\markup(lines)?&b;\" attribute=\"Markup\" context=\"markup\"/>\n        <RegExpr String=\"\\d+\\.*\\s*=\\s*\\d+\" attribute=\"Command\" context=\"#pop\"/>\n        <DetectSpaces/>\n        <IncludeRules context=\"basic\"/>\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Pitch\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Duration\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Slur\" defStyleNum=\"dsChar\" bold=\"true\"/>\n      <itemData name=\"Dynamic\" defStyleNum=\"dsString\" color=\"#ee5000\" bold=\"true\"/>\n      <itemData name=\"Articulation\" defStyleNum=\"dsString\" color=\"#ee5000\" bold=\"true\"/>\n      <itemData name=\"Chord\" defStyleNum=\"dsDataType\" bold=\"true\"/>\n      <itemData name=\"Beam\" defStyleNum=\"dsDataType\" bold=\"true\"/>\n      <itemData name=\"Check\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Tremolo\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Command\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"User Command\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Context\" defStyleNum=\"dsDataType\" bold=\"true\"/>\n      <itemData name=\"Layout Object\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Property\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Engraver\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Markup\" defStyleNum=\"dsBaseN\" color=\"#009817\"/>\n      <itemData name=\"Lyricmode\" defStyleNum=\"dsKeyword\" color=\"#007010\"/>\n      <itemData name=\"Lyric Text\" defStyleNum=\"dsNormal\" color=\"#007010\"/>\n      <itemData name=\"Other Mode\" defStyleNum=\"dsKeyword\" color=\"#0094e4\"/>\n      <itemData name=\"Other Text\" defStyleNum=\"dsNormal\" color=\"#0094e4\"/>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Quoted Text\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Scheme\" defStyleNum=\"dsFloat\" backgroundColor=\"#fff6ff\"/>\n      <itemData name=\"Scheme Keyword\" defStyleNum=\"dsFloat\" bold=\"true\" backgroundColor=\"#fff6ff\"/>\n      <itemData name=\"Scheme Subst\" defStyleNum=\"dsDecVal\" bold=\"true\" backgroundColor=\"#fff6ff\"/>\n      <itemData name=\"Scheme Value\" defStyleNum=\"dsDecVal\" backgroundColor=\"#fff6ff\"/>\n      <itemData name=\"Scheme String\" defStyleNum=\"dsString\" backgroundColor=\"#fff6ff\"/>\n      <itemData name=\"Scheme Comment\" defStyleNum=\"dsComment\" backgroundColor=\"#fff6ff\"/>\n      <itemData name=\"Deprecated Keyword\" defStyleNum=\"dsKeyword\" backgroundColor=\"#fcc\"/>\n      <itemData name=\"Deprecated Command\" defStyleNum=\"dsFunction\" backgroundColor=\"#fcc\"/>\n      <itemData name=\"Deprecated Property\" defStyleNum=\"dsDataType\" backgroundColor=\"#fcc\"/>\n      <itemData name=\"Deprecated Context\" defStyleNum=\"dsDataType\" bold=\"true\" backgroundColor=\"#fcc\"/>\n      <itemData name=\"Deprecated Markup\" defStyleNum=\"dsBaseN\" color=\"#009817\" backgroundColor=\"#fcc\"/>\n      <itemData name=\"Invalid\" defStyleNum=\"dsError\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"%\"/>\n      <comment name=\"multiLine\" start=\"%{\" end=\"%}\" region=\"comment\"/>\n    </comments>\n    <keywords casesensitive=\"true\" additionalDeliminator=\"'_0123456789\"/>\n  </general>\n</language>\n<!--\n  kate: space-indent on; indent-width 2; replace-tabs on;\n-->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/literate-curry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Literate Curry\" version=\"2\" kateversion=\"3.4\"\n          section=\"Sources\" extensions=\"*.lcurry\" mimetype=\"text/x-curry\"\n          author=\"Björn Peemöller (bjp@informatik.uni-kiel.de)\" license=\"LGPL\"\n          indenter=\"haskell\">\n  <highlighting>\n  <contexts>\n\n    <context attribute=\"Text\" lineEndContext=\"#stay\" name=\"Text\">\n      <!-- Bird Tracks -->\n      <DetectChar attribute=\"BirdTrack\" context=\"Code\" char=\"&gt;\" column=\"0\"/>\n      <DetectChar attribute=\"BirdTrack\" context=\"Code\" char=\"&lt;\" column=\"0\"/>\n      <!-- \\begin{code} and \\begin{spec} -->\n      <StringDetect attribute=\"Text\" context=\"normals\" String=\"&#92;begin&#123;code&#125;\"/>\n      <StringDetect attribute=\"Text\" context=\"normals\" String=\"&#92;begin&#123;spec&#125;\"/>\n    </context>\n\n    <context attribute=\"Text\" lineEndContext=\"#pop\" name=\"Code\">\n      <RegExpr attribute=\"Comment\" context=\"multiline\" String=\"\\{-[^#]\" />\n      <IncludeRules context=\"##Curry\" />\n    </context>\n\n    <context attribute=\"Text\" lineEndContext=\"#stay\" name=\"normals\">\n      <StringDetect attribute=\"Text\" context=\"#pop\" String=\"&#92;end&#123;code&#125;\"/>\n      <StringDetect attribute=\"Text\" context=\"#pop\" String=\"&#92;end&#123;spec&#125;\"/>\n      <IncludeRules context=\"##Curry\" />\n    </context>\n\n    <!-- Handle comments in presence of bird tracks -->\n    <context attribute=\"Comment\" lineEndContext=\"lineend\" name=\"multiline\" >\n      <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"}\" />\n    </context>\n\n    <context attribute=\"Text\" lineEndContext=\"#stay\" name=\"lineend\">\n      <DetectChar attribute=\"BirdTrack\" context=\"restart\" char=\"&gt;\" column=\"0\"/>\n      <DetectChar attribute=\"BirdTrack\" context=\"restart\" char=\"&lt;\" column=\"0\"/>\n    </context>\n\n    <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"restart\">\n      <Detect2Chars attribute=\"Comment\" context=\"#pop#pop#pop\" char=\"-\" char1=\"}\" />\n    </context>\n  </contexts>\n  <itemDatas>\n    <itemData name=\"Text\"      defStyleNum=\"dsNormal\"  spellChecking=\"true\"  />\n    <itemData name=\"BirdTrack\" defStyleNum=\"dsOthers\"  spellChecking=\"false\" />\n    <itemData name=\"Comment\"   defStyleNum=\"dsComment\" />\n  </itemDatas>\n  </highlighting>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/literate-haskell.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Literate Haskell\" version=\"5\" kateversion=\"3.4\" section=\"Sources\" extensions=\"*.lhs\" mimetype=\"text/x-literate-haskell\" author=\"Nicolas Wu (zenzike@gmail.com)\" license=\"LGPL\">\n  <highlighting>\n  <contexts>\n    <context attribute=\"Text\" lineEndContext=\"#stay\" name=\"text\">\n      <DetectChar attribute=\"BirdTrack\" context=\"normal\" char=\"&gt;\" column=\"0\"/>\n      <DetectChar attribute=\"BirdTrack\" context=\"normal\" char=\"&lt;\" column=\"0\"/>\n      <StringDetect attribute=\"Text\" context=\"normals\" String=\"&#92;begin&#123;code&#125;\"/>\n      <StringDetect attribute=\"Text\" context=\"normals\" String=\"&#92;begin&#123;spec&#125;\"/>\n    </context>\n    <context attribute=\"Text\" lineEndContext=\"#pop\" name=\"normal\">\n      <RegExpr attribute=\"Comment\" context=\"comments'\" String=\"\\{-[^#]\" />\n      <IncludeRules context=\"##Haskell\" />\n    </context>\n    <context attribute=\"Text\" lineEndContext=\"#stay\" name=\"normals\">\n      <StringDetect attribute=\"Text\" context=\"#pop\" String=\"&#92;end&#123;code&#125;\"/>\n      <StringDetect attribute=\"Text\" context=\"#pop\" String=\"&#92;end&#123;spec&#125;\"/>\n      <IncludeRules context=\"##Haskell\" />\n    </context>\n    <context attribute=\"Comment\" lineEndContext=\"uncomments\" name=\"comments'\" >\n      <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"}\" />\n    </context>\n    <context attribute=\"Text\" lineEndContext=\"#stay\" name=\"uncomments\">\n      <DetectChar attribute=\"BirdTrack\" context=\"recomments\" char=\"&gt;\" column=\"0\"/>\n      <DetectChar attribute=\"BirdTrack\" context=\"recomments\" char=\"&lt;\" column=\"0\"/>\n    </context>\n    <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"recomments\">\n      <Detect2Chars attribute=\"Comment\" context=\"#pop#pop#pop\" char=\"-\" char1=\"}\" />\n    </context>\n  </contexts>\n  <itemDatas>\n    <itemData name=\"Text\"             defStyleNum=\"dsNormal\" spellChecking=\"true\" />\n    <itemData name=\"BirdTrack\"        defStyleNum=\"dsOthers\"  spellChecking=\"false\" />\n    <itemData name=\"Comment\"          defStyleNum=\"dsComment\" />\n  </itemDatas>\n  </highlighting>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/logcat.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY datetime \"((.\\[)?(\\d{1,2};){2}\\d{1,3}m\\s*)?((\\d{4}\\-)?\\d{2}\\-\\d{2}\\s\\d{2}(:\\d{2}){2}\\.\\d{3,6}(\\s[\\-\\+]\\d{4})?|\\d+\\.\\d{3,6}):?\">\n\t<!ENTITY priority_tag \"([/\\s][^:\\(]*(\\([^\\)]+\\))?:|\\([^\\)]+\\):?)\"> <!-- Tag/PID/Threads -->\n\t<!ENTITY delim        \"[/\\(\\s]\"> <!-- Delimiter between priority and tag -->\n]>\n\n<!--\n  Syntax Highlighting Definition of Logcat, for the KDE's KSyntaxHighlighting Framework\n  ==========================================================================================\n   This file is part of the KDE's KSyntaxHighlighting framework.\n\n   Copyright (c) 2018-2019 Nibaldo González S. (nibgonz@gmail.com)\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy of this\n   software and associated documentation files (the \"Software\"), to deal in the Software\n   without restriction, including without limitation the rights to use, copy, modify, merge,\n   publish, distribute, sublicense, and/or sell copies of the Software, and to permit\n   persons to whom the Software is furnished to do so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included\n   in all copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n   PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n   AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n  ==========================================================================================\n\n  Last update: August 30, 2019 (v4)\n-->\n\n<language name=\"Logcat\"\n          version=\"4\"\n          kateversion=\"5.0\"\n          section=\"Other\"\n          extensions=\"*.logcat\"\n          mimetype=\"text/x-logcat\"\n          priority=\"5\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\"\n          license=\"MIT\">\n\n\t<highlighting>\n\n\t\t<contexts>\n\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar   context=\"CommentLine\" attribute=\"Comment\" char=\"#\" firstNonSpace=\"true\" />\n\t\t\t\t<StringDetect context=\"CommentLine\" attribute=\"Comment\" String=\"---------\" firstNonSpace=\"true\" />\n\t\t\t\t<RegExpr      context=\"#stay\"       attribute=\"Comment\" String=\"\\*\\s.+\\s\\*$\" column=\"0\" />\n\n\t\t\t\t<RegExpr context=\"#stay\" attribute=\"DateTime\" String=\"&datetime;\" firstNonSpace=\"true\" />\n\n\t\t\t\t<!-- Priority & Tag -->\n\t\t\t\t<RegExpr context=\"VerboseMsg\" attribute=\"Verbose Tag\" String=\"(^|\\s)[V\\?](&priority_tag;|(?=&delim;))\" />\n\t\t\t\t<RegExpr context=\"DebugMsg\"   attribute=\"Debug Tag\"   String=\"(^|\\s)D(&priority_tag;|(?=&delim;))\" />\n\t\t\t\t<RegExpr context=\"InfoMsg\"    attribute=\"Info Tag\"    String=\"(^|\\s)I(&priority_tag;|(?=&delim;))\" />\n\t\t\t\t<RegExpr context=\"WarningMsg\" attribute=\"Warning Tag\" String=\"(^|\\s)W(&priority_tag;|(?=&delim;))\" />\n\t\t\t\t<RegExpr context=\"AssertMsg\"  attribute=\"Assert Tag\"  String=\"(^|\\s)A(&priority_tag;|(?=&delim;))\" />\n\t\t\t\t<RegExpr context=\"SilentMsg\"  attribute=\"Silent Tag\"  String=\"(^|\\s)S(&priority_tag;|(?=&delim;))\" />\n\t\t\t\t<RegExpr context=\"ErrorMsg\"   attribute=\"Error Tag\"   String=\"(^|\\s)E(&priority_tag;|(?=&delim;))\" />\n\n\t\t\t\t<RegExpr context=\"#stay\"      attribute=\"Error Tag\"   String=\"\\sF&delim;.*\\033\\[\\d{1,3}m$\" />\n\t\t\t\t<RegExpr context=\"FatalMsg\"   attribute=\"Fatal\"       String=\"^F&delim;\" />\n\t\t\t\t<RegExpr context=\"FatalMsg\"   attribute=\"Normal Text\" String=\"\\s(?=F&delim;)\" />\n\n\t\t\t\t<!-- For \"-v long\" -->\n\t\t\t\t<DetectChar context=\"LongLog\" attribute=\"Normal Text\" char=\"[\" column=\"0\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"CommentLine\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectSpaces />\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t\t<IncludeRules context=\"##Modelines\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"VerboseMsg\" attribute=\"Verbose Message\" lineEndContext=\"#pop\" />\n\t\t\t<context name=\"DebugMsg\"   attribute=\"Debug Message\"   lineEndContext=\"#pop\" />\n\t\t\t<context name=\"InfoMsg\"    attribute=\"Info Message\"    lineEndContext=\"#pop\" />\n\t\t\t<context name=\"WarningMsg\" attribute=\"Warning Message\" lineEndContext=\"#pop\" />\n\t\t\t<context name=\"AssertMsg\"  attribute=\"Assert Message\"  lineEndContext=\"#pop\" />\n\t\t\t<context name=\"SilentMsg\"  attribute=\"Silent Message\"  lineEndContext=\"#pop\" />\n\t\t\t<context name=\"ErrorMsg\"   attribute=\"Error Message\"   lineEndContext=\"#pop\" />\n\t\t\t<context name=\"FatalMsg\"   attribute=\"Fatal\"           lineEndContext=\"#pop\" />\n\n\t\t\t<!-- Long Format -->\n\n\t\t\t<context name=\"LongLog\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr context=\"#pop!LongLogTag\" attribute=\"DateTime\" String=\"\\s+&datetime;(?=\\s.+\\s\\]$)\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogTag\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr context=\"#pop!LongLogVerbose\" attribute=\"Verbose Tag\" String=\"\\s[V\\?]&delim;\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLogDebug\"   attribute=\"Debug Tag\"   String=\"\\sD&delim;\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLogInfo\"    attribute=\"Info Tag\"    String=\"\\sI&delim;\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLogWarning\" attribute=\"Warning Tag\" String=\"\\sW&delim;\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLogAssert\"  attribute=\"Assert Tag\"  String=\"\\sA&delim;\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLogSilent\"  attribute=\"Silent Tag\"  String=\"\\sS&delim;\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLogError\"   attribute=\"Error Tag\"   String=\"\\sE&delim;\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLogFatal\"   attribute=\"Normal Text\" String=\"\\s(?=F&delim;)\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"LongLogVerbose\" attribute=\"Verbose Tag\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue context=\"#pop!LongLogVerboseMsg\" attribute=\"Normal Text\" char=\"]\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogDebug\" attribute=\"Debug Tag\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue context=\"#pop!LongLogDebugMsg\" attribute=\"Normal Text\" char=\"]\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogInfo\" attribute=\"Info Tag\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue context=\"#pop!LongLogInfoMsg\" attribute=\"Normal Text\" char=\"]\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogWarning\" attribute=\"Warning Tag\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue context=\"#pop!LongLogWarningMsg\" attribute=\"Normal Text\" char=\"]\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogAssert\" attribute=\"Assert Tag\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue context=\"#pop!LongLogAssertMsg\" attribute=\"Normal Text\" char=\"]\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogSilent\" attribute=\"Silent Tag\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue context=\"#pop!LongLogSilentMsg\" attribute=\"Normal Text\" char=\"]\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogError\" attribute=\"Error Tag\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue context=\"#pop!LongLogErrorMsg\" attribute=\"Normal Text\" char=\"]\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogFatal\" attribute=\"Fatal\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr context=\"#pop!LongLogFatalMsg\" attribute=\"Normal Text\" String=\"\\s*\\]$\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"LongLogVerboseMsg\" attribute=\"Verbose Message\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogDebugMsg\" attribute=\"Debug Message\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogInfoMsg\" attribute=\"Info Message\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogWarningMsg\" attribute=\"Warning Message\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogAssertMsg\" attribute=\"Assert Message\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogSilentMsg\" attribute=\"Silent Message\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogErrorMsg\" attribute=\"Error Message\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"LongLogFatalMsg\" attribute=\"Fatal\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<IncludeRules context=\"DefaultLongLogMsg\" />\n\t\t\t</context>\n\t\t\t<context name=\"DefaultLongLogMsg\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"EmptyLine\">\n\t\t\t\t<StringDetect context=\"#pop!CommentLine\" attribute=\"Comment\" String=\"---------\" firstNonSpace=\"true\" />\n\t\t\t\t<RegExpr context=\"#pop\" attribute=\"Comment\" String=\"\\*\\s.+\\s\\*$\" column=\"0\" />\n\t\t\t\t<RegExpr context=\"#pop!LongLog\" attribute=\"Normal Text\" String=\"\\[(?=\\s+&datetime;\\s.+\\s\\]$)\" column=\"0\" />\n\t\t\t\t<RegExpr context=\"EmptyLine\" attribute=\"Normal Text\" String=\"^\\s*$\" />\n\t\t\t</context>\n\t\t\t<context name=\"EmptyLine\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<DetectChar context=\"#pop#pop!CommentLine\" attribute=\"Comment\" char=\"#\" firstNonSpace=\"true\" />\n\t\t\t\t<RegExpr context=\"#pop#pop!LongLog\" attribute=\"Normal Text\" String=\"\\[(?=\\s.+\\s\\]$)\" column=\"0\" />\n\t\t\t\t<!-- In a normal Log this is not necessary, but probably some people put items of Logs\n\t\t\t\t     of different formats in a single file. -->\n\t\t\t\t<RegExpr context=\"#pop#pop\" attribute=\"DateTime\" String=\"&datetime;\" firstNonSpace=\"true\" />\n\t\t\t\t<!-- NOTE: Use \"^\\s*\" with lookAhead, not firstNonSpace -->\n\t\t\t\t<RegExpr context=\"#pop#pop\" attribute=\"Normal Text\" String=\"\\s*[VDIWASEF\\?]&priority_tag;\" column=\"0\" lookAhead=\"true\" />\n\t\t\t\t<DetectSpaces />\n\t\t\t</context>\n\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"  spellChecking=\"false\" />\n\t\t\t<itemData name=\"Comment\"     defStyleNum=\"dsComment\" italic=\"1\" />\n\t\t\t<itemData name=\"DateTime\"    defStyleNum=\"dsComment\" italic=\"0\" underline=\"0\" spellChecking=\"false\" />\n\n\t\t\t<itemData name=\"Verbose Tag\"     defStyleNum=\"dsNormal\"         bold=\"1\" />\n\t\t\t<itemData name=\"Verbose Message\" defStyleNum=\"dsNormal\"         bold=\"0\" />\n\t\t\t<itemData name=\"Debug Tag\"       defStyleNum=\"dsAttribute\"      bold=\"1\" />\n\t\t\t<itemData name=\"Debug Message\"   defStyleNum=\"dsAttribute\"      bold=\"0\" />\n\t\t\t<itemData name=\"Info Tag\"        defStyleNum=\"dsPreprocessor\"   bold=\"1\" />\n\t\t\t<itemData name=\"Info Message\"    defStyleNum=\"dsPreprocessor\"   bold=\"0\" />\n\t\t\t<itemData name=\"Warning Tag\"     defStyleNum=\"dsInformation\"    bold=\"1\" />\n\t\t\t<itemData name=\"Warning Message\" defStyleNum=\"dsInformation\"    bold=\"0\" />\n\t\t\t<itemData name=\"Assert Tag\"      defStyleNum=\"dsChar\"           bold=\"1\" />\n\t\t\t<itemData name=\"Assert Message\"  defStyleNum=\"dsChar\"           bold=\"0\" />\n\t\t\t<itemData name=\"Silent Tag\"      defStyleNum=\"dsBuiltIn\"        bold=\"1\" />\n\t\t\t<itemData name=\"Silent Message\"  defStyleNum=\"dsBuiltIn\"        bold=\"0\" />\n\t\t\t<itemData name=\"Error Tag\"       defStyleNum=\"dsError\"          bold=\"1\" underline=\"0\" />\n\t\t\t<itemData name=\"Error Message\"   defStyleNum=\"dsError\"          bold=\"0\" underline=\"0\" />\n\t\t\t<itemData name=\"Fatal\"           defStyleNum=\"dsAlert\"          bold=\"1\" />\n\t\t</itemDatas>\n\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\" />\n\t\t</comments>\n\t</general>\n\n</language>\n<!-- kate: replace-tabs off; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/logtalk.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"Logtalk\" version=\"3\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.lgt;.logtalk\" mimetype=\"text/x-logtalk\" author=\"Paulo Moura (pmoura@logtalk.org)\" license=\"Apache License 2.0\">\n\n\t<highlighting>\n\n\t\t<contexts>\n\n\t\t\t<context name = \"normal\" attribute = \"Normal\" lineEndContext = \"#stay\" >\n\t\t\t\t<!-- Directives -->\n\t\t\t\t<RegExpr String = \"^\\s*:-\" attribute = \"Normal\" context = \"directive\" />\n\t\t\t\t<!-- Event handlers -->\n\t\t\t\t<RegExpr String = \"\\b(after|before)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Message forwarding handler -->\n\t\t\t\t<RegExpr String = \"\\bforward(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Method execution context -->\n\t\t\t\t<RegExpr String = \"\\b(context|parameter|this|se(lf|nder))(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Reflection -->\n\t\t\t\t<RegExpr String = \"\\b(current_predicate|predicate_property)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- DCGs -->\n\t\t\t\t<RegExpr String = \"\\b(expand_(goal|term)|(goal|term)_expansion|phrase)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Entity -->\n\t\t\t\t<RegExpr String = \"\\b(abolish|c(reate|urrent))_(object|protocol|category)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(object|protocol|category)_property(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Entity relations -->\n\t\t\t\t<RegExpr String = \"\\bco(mplements_object|nforms_to_protocol)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bextends_(object|protocol|category)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bimp(lements_protocol|orts_category)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(instantiat|specializ)es_class(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Events -->\n\t\t\t\t<RegExpr String = \"\\b(current_event|(abolish|define)_events)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Flags -->\n\t\t\t\t<RegExpr String = \"\\b(create|current|set)_logtalk_flag(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Compiling, loading, and library paths -->\n\t\t\t\t<RegExpr String = \"\\blogtalk_(compile|l(ibrary_path|oad|oad_context)|make(_target_action)?)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\blogtalk_make\\b\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Database -->\n\t\t\t\t<RegExpr String = \"\\b(clause|retract(all)?)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\ba(bolish|ssert(a|z))(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Control -->\n\t\t\t\t<RegExpr String = \"\\b(ca(ll|tch)|throw)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(fa(il|lse)|true|(instantiation|system)_error)\\b\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(type|domain|existence|permission|representation|evaluation|resource|syntax)_error(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- All solutions -->\n\t\t\t\t<RegExpr String = \"\\b((bag|set)of|f(ind|or)all)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Multi-threading predicates -->\n\t\t\t\t<RegExpr String = \"\\bthreaded(_(call|once|ignore|exit|peek|wait|notify))?(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Engine predicates -->\n\t\t\t\t<RegExpr String = \"\\bthreaded_engine(_(create|destroy|self|next|next_reified|yield|post|fetch))?(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Term unification -->\n\t\t\t\t<RegExpr String = \"\\b(subsumes_term|unify_with_occurs_check)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Term creation and decomposition -->\n\t\t\t\t<RegExpr String = \"\\b(functor|arg|copy_term|numbervars|term_variables)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Evaluable functors -->\n\t\t\t\t<RegExpr String = \"\\b(div|rem|m(ax|in|od)|abs|sign)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bfloat(_(integer|fractional)_part)?(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(floor|truncate|round|ceiling)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Other arithmetic functors -->\n\t\t\t\t<RegExpr String = \"\\b(cos|a(cos|sin|tan|tan2)|exp|log|s(in|qrt)|tan|xor)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Term testing -->\n\t\t\t\t<RegExpr String = \"\\b(var|atom(ic)?|integer|float|c(allable|ompound)|n(onvar|umber)|ground|acyclic_term)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Term comparison -->\n\t\t\t\t<RegExpr String = \"\\bcompare(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Stream selection and control -->\n\t\t\t\t<RegExpr String = \"\\b(curren|se)t_(in|out)put(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(open|close)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bflush_output(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(at_end_of_stream|flush_output)\\b\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(stream_property|at_end_of_stream|set_stream_position)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Character and byte input/output -->\n\t\t\t\t<RegExpr String = \"\\b(nl|(get|peek|put)_(byte|c(har|ode)))(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bnl\\b\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Term input/output -->\n\t\t\t\t<RegExpr String = \"\\bread(_term)?(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bwrite(q|_(canonical|term))?(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(current_)?op(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(current_)?char_conversion(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Atomic term processing -->\n\t\t\t\t<RegExpr String = \"\\batom_(length|c(hars|o(ncat|des)))(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(char_code|sub_atom)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bnumber_c(har|ode)s(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Implementation defined hooks functions -->\n\t\t\t\t<RegExpr String = \"\\b(se|curren)t_prolog_flag(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bhalt\\b\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\bhalt(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Sorting -->\n\t\t\t\t<RegExpr String = \"\\b(key)?sort(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Variables -->\n\t\t\t\t<RegExpr String = \"\\b[A-Z_]\\w*\" attribute = \"Variable\" context = \"#stay\" />\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<DetectChar char = \"%\" attribute = \"Comment\" context = \"single line comment\" />\n\t\t\t\t<Detect2Chars char = \"/\" char1 = \"*\" attribute = \"Comment\" context = \"multiline comment\" beginRegion = \"Comment\" />\n\t\t\t\t<!-- Strings and quoted atoms -->\n\t\t\t\t<DetectChar char = \"&quot;\" attribute = \"String\" context = \"string\" />\n\t\t\t\t<DetectChar char = \"'\" attribute = \"String\" context = \"atom\" />\n\t\t\t\t<!-- Numbers -->\n\t\t\t\t<RegExpr String = \"0'\\\\.\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0'.\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0b[0-1]+\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0o[0-7]+\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0x[0-9a-fA-F]+\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\d+(\\.\\d+)?([eE]([-+])?\\d+)?\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<!-- Message sending operators -->\n\t\t\t\t<Detect2Chars char = \":\" char1 = \":\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"^\" char1 = \"^\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- External call -->\n\t\t\t\t<DetectChar char = \"{\" attribute = \"Operator\" context = \"#stay\" beginRegion=\"external\" />\n\t\t\t\t<DetectChar char = \"}\" attribute = \"Operator\" context = \"#stay\" endRegion=\"external\" />\n\t\t\t\t<!-- Logic and control -->\n\t\t\t\t<RegExpr String = \"\\b(ignore|once)(?=[(])\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\brepeat\\b\" attribute = \"Built-in\" context = \"#stay\" />\n\t\t\t\t<!-- Bitwise functors -->\n\t\t\t\t<Detect2Chars char = \"&gt;\" char1 = \"&gt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"&lt;\" char1 = \"&lt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"/\" char1 = \"\\\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"/\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"\\\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Predicate aliases -->\n\t\t\t\t<RegExpr String = \"\\bas\\b\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Arithmetic evaluation -->\n\t\t\t\t<RegExpr String = \"\\bis\\b\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Arithmetic comparison -->\n\t\t\t\t<StringDetect String = \"=:=\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<StringDetect String = \"=\\=\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<DetectChar char = \"&lt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"=\" char1 = \"&lt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<DetectChar char = \"&gt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"&gt;\" char1 = \"=\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Term creation and decomposition -->\n\t\t\t\t<StringDetect String = \"=..\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Term unification -->\n\t\t\t\t<DetectChar char = \"=\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"=\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Term comparison -->\n\t\t\t\t<Detect2Chars char = \"=\" char1 = \"=\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<StringDetect String = \"\\==\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<StringDetect String = \"@=&lt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"@\" char1 = \"&lt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<StringDetect String = \"@&gt;=\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"@\" char1 = \"&gt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Evaluable functors -->\n\t\t\t\t<Detect2Chars char = \"/\" char1 = \"/\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<AnyChar String = \"+-*/\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\b(e|pi|div|mod|rem)\\b\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Other arithemtic functors -->\n\t\t\t\t<Detect2Chars char = \"*\" char1 = \"*\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- DCG rules -->\n\t\t\t\t<StringDetect String = \"--&gt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Control constructs -->\n\t\t\t\t<AnyChar String = \"!;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<Detect2Chars char = \"-\" char1 = \"&gt;\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Logic and control -->\n\t\t\t\t<Detect2Chars char = \"\\\" char1 = \"+\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Mode operators -->\n\t\t\t\t<AnyChar String = \"?@\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Category predicate direct call operator -->\n\t\t\t\t<AnyChar String = \":\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Clause operator -->\n\t\t\t\t<Detect2Chars char = \":\" char1 = \"-\"  firstNonSpace = \"false\" attribute = \"Normal\" context = \"#stay\" />\n\t\t\t\t<!-- Existential quantifier -->\n\t\t\t\t<AnyChar String = \"^\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- Atoms -->\n\t\t\t\t<RegExpr String = \"\\b[a-z]\\w*\" attribute = \"Normal\" context = \"#stay\" />\n\t\t\t</context>\n\n\t\t\t<context name = \"directive\" attribute = \"Directive\" lineEndContext = \"#stay\" >\n\t\t\t\t<!-- Conditional compilation directives -->\n\t\t\t\t<RegExpr String = \"\\bif(?=[(])\" attribute = \"Directive\" context = \"#pop\" beginRegion = \"CC\" />\n\t\t\t\t<RegExpr String = \"\\bendif[.]\" attribute = \"Directive\" context = \"#pop\" endRegion = \"CC\" />\n\t\t\t\t<RegExpr String = \"\\belif(?=[(])\" attribute = \"Directive\" context = \"#pop\"/>\n\t\t\t\t<RegExpr String = \"\\belse[.]\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t\t<!-- Entity directives -->\n\t\t\t\t<RegExpr String = \"\\b(category|object|protocol)(?=[(])\" attribute = \"Directive\" context = \"entityrelations\" beginRegion = \"Entity\" />\n\t\t\t\t<RegExpr String = \"\\bend_(category|object|protocol)[.]\" attribute = \"Directive\" context = \"#pop\" endRegion = \"Entity\" />\n\t\t\t\t<RegExpr String = \"\\bmodule(?=[(])\" attribute = \"Directive\" context = \"#pop\"/>\n \t\t\t\t<!-- Predicate scope directives -->\n\t\t\t\t<RegExpr String = \"\\bp(ublic|r(otected|ivate))(?=[(])\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t\t<!-- Other directives -->\n\t\t\t\t<RegExpr String = \"\\be(n(coding|sure_loaded)|xport)(?=[(])\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t\t<RegExpr String = \"\\bin(clude|itialization|fo)(?=[(])\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t\t<RegExpr String = \"\\b(built_in|dynamic|synchronized|threaded)[.]\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t\t<RegExpr String = \"\\b(alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|ode|ultifile)|s(et_(logtalk|prolog)_flag|ynchronized))(?=[(])\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t\t<RegExpr String = \"\\bop(?=[(])\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t\t<RegExpr String = \"\\b(c(alls|oinductive)|reexport|use(s|_module))(?=[(])\" attribute = \"Directive\" context = \"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name = \"entityrelations\" attribute = \"Normal\" lineEndContext = \"#stay\" >\n\t\t\t\t<RegExpr String = \"\\b(complements|extends|i(nstantiates|mp(lements|orts))|specializes)(?=[(])\" attribute = \"Directive\" context = \"#stay\" />\n\t\t\t\t<!-- Variables -->\n\t\t\t\t<RegExpr String = \"\\b[A-Z_]\\w*\" attribute = \"Variable\" context = \"#stay\" />\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<DetectChar char = \"%\" attribute = \"Comment\" context = \"single line comment\" />\n\t\t\t\t<Detect2Chars char = \"/\" char1 = \"*\" attribute = \"Comment\" context = \"multiline comment\" beginRegion = \"Comment\" />\n\t\t\t\t<!-- Strings and quoted atoms -->\n\t\t\t\t<DetectChar char = \"&quot;\" attribute = \"String\" context = \"string\" />\n\t\t\t\t<DetectChar char = \"'\" attribute = \"String\" context = \"atom\" />\n\t\t\t\t<!-- Numbers -->\n\t\t\t\t<RegExpr String = \"0'\\\\.\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0'.\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0b[0-1]+\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0o[0-7]+\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"0x[0-9a-fA-F]+\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<RegExpr String = \"\\d+(\\.\\d+)?([eE]([-+])?\\d+)?\" attribute = \"Number\" context = \"#stay\" />\n\t\t\t\t<!-- Scope operator -->\n\t\t\t\t<Detect2Chars char = \":\" char1 = \":\" attribute = \"Operator\" context = \"#stay\" />\n\t\t\t\t<!-- End of entity-opening directive -->\n\t\t\t\t<Detect2Chars attribute = \"Normal\" context = \"normal\" char = \")\" char1 = \".\" />\n\t\t\t</context>\n\n\t\t\t<context name = \"single line comment\" attribute = \"Comment\" lineEndContext = \"#pop\" />\n\n\t\t\t<context name = \"multiline comment\" attribute = \"Comment\" lineEndContext = \"#stay\" >\n\t\t\t\t<Detect2Chars char = \"*\" char1 = \"/\" attribute = \"Comment\" context = \"#pop\" endRegion = \"Comment\" />\n\t\t\t</context>\n\n\t\t\t<context name = \"string\" attribute = \"String\" lineEndContext = \"#stay\" >\n\t\t\t\t<DetectChar char = \"&quot;\" attribute = \"String\" context = \"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name = \"atom\" attribute = \"String\" lineEndContext = \"#stay\" >\n\t\t\t\t<DetectChar char = \"'\" attribute = \"String\" context = \"#pop\" />\n\t\t\t</context>\n\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name = \"Normal\" defStyleNum = \"dsNormal\" />\n\t\t\t<itemData name = \"Directive\" defStyleNum = \"dsKeyword\" />\n\t\t\t<itemData name = \"Built-in\" defStyleNum = \"dsFunction\" />\n\t\t\t<itemData name = \"Operator\" defStyleNum = \"dsDataType\" />\n\t\t\t<itemData name = \"Comment\" defStyleNum = \"dsComment\" />\n\t\t\t<itemData name = \"Number\" defStyleNum = \"dsDecVal\" />\n\t\t\t<itemData name = \"String\"  defStyleNum = \"dsString\" />\n\t\t\t<itemData name = \"Variable\" defStyleNum = \"dsOthers\" />\n\t\t</itemDatas>\n\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name = \"singleLine\" start = \"%\" />\n\t\t\t<comment name = \"multiLine\" start = \"/*\" end = \"*/\" region = \"Comment\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"true\" />\n\t</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/lpc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!--\n=============================================================================\nFile:        lpc.xml\nURL:         http://www.metamorpher.de/files/lpc.xml\nDescription: Syntax Highlighting for Lars Pensjo C (LPC)\n             It is used in Multi User Dungeons which use LDMud as Gamedriver.\n             For more information, see LDMud project: http://www.bearnip.com\n             For best highlighting results, configure colors yourself.\nAuthor:      Andreas Klauer (Andreas.Klauer@metamorpher.de)\nChanged:     2004-04-26\nLicense:     Artistic\n=============================================================================\n-->\n\n\n<language name=\"LPC\" version=\"2\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.c;*.h;*.inc;*.o\" author=\"Andreas Klauer (Andreas.Klauer@metamorpher.de)\" license=\"Artistic\" >\n\n  <highlighting>\n\n    <!-- Keyword Lists: -->\n    <list name=\"modifiers\">\n      <item>private</item>\n      <item>protected</item>\n      <item>static</item>\n      <item>public</item>\n      <item>nomask</item>\n      <item>varargs</item>\n      <item>nosave</item>\n      <item>virtual</item>\n    </list>\n    <list name=\"types\">\n      <item>void</item>\n      <item>int</item>\n      <item>status</item>\n      <item>string</item>\n      <item>object</item>\n      <item>array</item>\n      <item>mapping</item>\n      <item>closure</item>\n      <item>symbol</item>\n      <item>float</item>\n      <item>mixed</item>\n    </list>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>continue</item>\n      <item>return</item>\n      <item>if</item>\n      <item>else</item>\n      <item>for</item>\n      <item>foreach</item>\n      <item>do</item>\n      <item>while</item>\n      <item>switch</item>\n      <item>case</item>\n      <item>inherit</item>\n      <item>default</item>\n      <item>variables</item>\n      <item>functions</item>\n      <item>publish</item>\n      <item>nolog</item>\n    </list>\n    <list name=\"attention\">\n      <item>FIXME</item>\n      <item>HACK</item>\n      <item>NOTE</item>\n      <item>NOTICE</item>\n      <item>TODO</item>\n      <item>WARNING</item>\n      <item>###</item>\n    </list>\n\n    <!-- Parsing Rules: -->\n    <contexts>\n      <context name=\"Normal\" attribute=\"Default\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"regionMarker\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"regionMarker\" firstNonSpace=\"true\"/>\n        <Detect2Chars attribute=\"Single-Line comments\" context=\"Comment1\" char=\"/\" char1=\"/\" />\n        <Detect2Chars attribute=\"Multi-Line comments\" context=\"Comment2\" char=\"/\" char1=\"*\" beginRegion=\"blockComment\" />\n        <keyword String=\"modifiers\" attribute=\"Modifier\" context=\"#stay\" />\n        <keyword String=\"types\" attribute=\"Datatype\" context=\"#stay\" />\n        <keyword String=\"keywords\" attribute=\"Keywords\" context=\"#stay\" />\n        <DetectChar char=\"#\" context=\"Preprocessor\" attribute=\"Preprocessor\" column=\"0\"/>\n        <Float attribute=\"Floats\" context=\"Float Suffixes\"/>\n        <RegExpr String=\"0b[01]+\" attribute=\"Binary\" context=\"#stay\" />\n        <RegExpr String=\"0x[0-9a-fA-F]+\" attribute=\"Hexadecimal\" context=\"#stay\" />\n        <RegExpr String=\"0o[0-7]+\" attribute=\"Octal\" context=\"#stay\" />\n        <Int attribute=\"Integer\" context=\"#stay\" />\n        <RegExpr String=\"#'[^\\t ][^\\t ,);}\\]/]*\" attribute=\"Closure\" context=\"#stay\" />\n        <DetectChar attribute=\"Strings\" context=\"String1\" char=\"&quot;\" />\n        <HlCStringChar attribute=\"Char\" context=\"#stay\" />\n        <DetectChar attribute=\"Default\" context=\"#stay\" char=\"{\" beginRegion=\"brace\" />\n        <DetectChar attribute=\"Default\" context=\"#stay\" char=\"}\" endRegion=\"brace\" />\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Floats\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fFeE\" attribute=\"Floats\" context=\"#pop\"/>\n      </context>\n      <context name=\"Comment1\" attribute=\"Single-Line comments\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Single-Line comments\" context=\"#stay\" />\n        <keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n      </context>\n      <context name=\"Comment2\" attribute=\"Multi-Line comments\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Multi-Line comments\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"blockComment\" />\n        <keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n      </context>\n      <context name=\"Preprocessor\" attribute=\"Preprocessor\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\" />\n        <Detect2Chars attribute=\"Single-Line comments\" context=\"Comment1\" char=\"/\" char1=\"/\" />\n        <Detect2Chars attribute=\"Multi-Line comments\" context=\"Comment2\" char=\"/\" char1=\"*\" beginRegion=\"blockComment\" />\n        <keyword String=\"modifiers\" attribute=\"Modifier\" context=\"#stay\" />\n        <keyword String=\"types\" attribute=\"Datatype\" context=\"#stay\" />\n        <keyword String=\"keywords\" attribute=\"Keywords\" context=\"#stay\" />\n        <DetectChar attribute=\"Preprocessor-Strings\" context=\"String2\" char=\"&quot;\" />\n      </context>\n      <context name=\"String1\" attribute=\"Strings\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Default\" context=\"#stay\" />\n        <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Strings\" context=\"#stay\" />\n        <Detect2Chars char=\"\\\" char1=\"&quot;\" attribute=\"Strings\" context=\"#stay\" />\n        <DetectChar char=\"&quot;\" attribute=\"Strings\" context=\"#pop\" />\n      </context>\n      <context name=\"String2\" attribute=\"Preprocessor-Strings\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Default\" context=\"#stay\" />\n        <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Preprocessor-Strings\" context=\"#stay\" />\n        <Detect2Chars char=\"\\\" char1=\"&quot;\" attribute=\"Preprocessor-Strings\" context=\"#stay\" />\n        <DetectChar char=\"&quot;\" attribute=\"Preprocessor-Strings\" context=\"#pop\" />\n      </context>\n    </contexts>\n\n    <!-- Color Settings: -->\n    <itemDatas>\n      <itemData name=\"Default\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Single-Line comments\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Multi-Line comments\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Alert\" defStyleNum=\"dsAlert\" />\n      <itemData name=\"Modifier\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Datatype\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Keywords\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Floats\" defStyleNum=\"dsFloat\" />\n      <itemData name=\"Binary\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Hexadecimal\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Integer\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Closure\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Strings\" defStyleNum=\"dsString\" />\n      <itemData name=\"Preprocessor-Strings\" defStyleNum=\"dsString\" />\n      <itemData name=\"Char\" defStyleNum=\"dsChar\" />\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" />\n    </itemDatas>\n  </highlighting>\n\n  <!-- This is not for highlighting, but for detecting comments.\n       It allows Kate to hide comments if the user wished to do so. -->\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"  />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"  />\n    </comments>\n    <keywords casesensitive=\"1\"  />\n  </general>\n\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n<!-- === End of file. === -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/lsl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Linden Scripting Language used in SecondLife and OpenMetaverse -->\n\n<!-- following entities are taken from the original lexer (indra.l) -->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY N \"[0-9]\">\n  <!ENTITY L \"[a-zA-Z_]\">\n  <!ENTITY H \"[a-fA-F0-9]\">\n  <!ENTITY E \"[Ee][+-]?&N;+\">\n  <!ENTITY FS \"(f|F)\">\n]>\n<!-- versioning is based on the slviewer source code version from which strings were extracted, then a point version for this file -->\n<language name=\"LSL\" section=\"Scripts\" version=\"3\" kateversion=\"2.5\" extensions=\"*.lsl\" mimetype=\"text/x-lsl\" author=\"Rafał Rzepecki\" license=\"LGPLv3\">\n  <highlighting>\n    <!-- types, keyword, events, constants and symbols are from indra.l -->\n    <list name=\"types\">\n      <item>integer</item>\n      <item>float</item>\n      <item>string</item>\n      <item>key</item>\n      <item>vector</item>\n      <item>quaternion</item>\n      <item>rotation</item>\n      <item>list</item>\n    </list>\n    <list name=\"keywords\">\n      <item>default</item>\n      <item>state</item>\n      <item>event</item>\n      <item>jump</item>\n      <item>return</item>\n      <item>if</item>\n      <item>else</item>\n      <item>for</item>\n      <item>do</item>\n      <item>while</item>\n    </list>\n    <list name=\"events\">\n      <item>state_entry</item>\n      <item>state_exit</item>\n      <item>touch_start</item>\n      <item>touch</item>\n      <item>touch_end</item>\n      <item>collision_start</item>\n      <item>collision</item>\n      <item>collision_end</item>\n      <item>land_collision_start</item>\n      <item>land_collision</item>\n      <item>land_collision_end</item>\n      <item>timer</item>\n      <item>listen</item>\n      <item>sensor</item>\n      <item>no_sensor</item>\n      <item>control</item>\n      <item>print</item>\n      <item>at_target</item>\n      <item>not_at_target</item>\n      <item>at_rot_target</item>\n      <item>not_at_rot_target</item>\n      <item>money</item>\n      <item>email</item>\n      <item>run_time_permissions</item>\n      <item>changed</item>\n      <item>attach</item>\n      <item>dataserver</item>\n      <item>moving_start</item>\n      <item>moving_end</item>\n      <item>link_message</item>\n      <item>on_rez</item>\n      <item>object_rez</item>\n      <item>remote_data</item>\n      <item>http_response</item>\n    </list>\n    <list name=\"constants\">\n      <item>TRUE</item>\n      <item>FALSE</item>\n      <item>STATUS_PHYSICS</item>\n      <item>STATUS_ROTATE_X</item>\n      <item>STATUS_ROTATE_Y</item>\n      <item>STATUS_ROTATE_Z</item>\n      <item>STATUS_PHANTOM</item>\n      <item>STATUS_SANDBOX</item>\n      <item>STATUS_BLOCK_GRAB</item>\n      <item>STATUS_DIE_AT_EDGE</item>\n      <item>STATUS_RETURN_AT_EDGE</item>\n      <item>STATUS_CAST_SHADOWS</item>\n\n      <item>AGENT_FLYING</item>\n      <item>AGENT_ATTACHMENTS</item>\n      <item>AGENT_SCRIPTED</item>\n      <item>AGENT_MOUSELOOK</item>\n      <item>AGENT_SITTING</item>\n      <item>AGENT_ON_OBJECT</item>\n      <item>AGENT_AWAY</item>\n      <item>AGENT_WALKING</item>\n      <item>AGENT_IN_AIR</item>\n      <item>AGENT_TYPING</item>\n      <item>AGENT_CROUCHING</item>\n      <item>AGENT_BUSY</item>\n      <item>AGENT_ALWAYS_RUN</item>\n\n      <item>CAMERA_PITCH</item>\n      <item>CAMERA_FOCUS_OFFSET</item>\n      <item>CAMERA_POSITION_LAG</item>\n      <item>CAMERA_FOCUS_LAG</item>\n      <item>CAMERA_DISTANCE</item>\n      <item>CAMERA_BEHINDNESS_ANGLE</item>\n      <item>CAMERA_BEHINDNESS_LAG</item>\n      <item>CAMERA_POSITION_THRESHOLD</item>\n      <item>CAMERA_FOCUS_THRESHOLD</item>\n      <item>CAMERA_ACTIVE</item>\n      <item>CAMERA_POSITION</item>\n      <item>CAMERA_FOCUS</item>\n      <item>CAMERA_POSITION_LOCKED</item>\n      <item>CAMERA_FOCUS_LOCKED</item>\n\n      <item>ANIM_ON</item>\n      <item>LOOP</item>\n      <item>REVERSE</item>\n      <item>PING_PONG</item>\n      <item>SMOOTH</item>\n      <item>ROTATE</item>\n      <item>SCALE</item>\n\n      <item>ALL_SIDES</item>\n      <item>LINK_ROOT</item>\n      <item>LINK_SET</item>\n      <item>LINK_ALL_OTHERS</item>\n      <item>LINK_ALL_CHILDREN</item>\n      <item>LINK_THIS</item>\n\n      <item>AGENT</item>\n      <item>ACTIVE</item>\n      <item>PASSIVE</item>\n      <item>SCRIPTED</item>\n\n      <item>CONTROL_FWD</item>\n      <item>CONTROL_BACK</item>\n      <item>CONTROL_LEFT</item>\n      <item>CONTROL_RIGHT</item>\n      <item>CONTROL_ROT_LEFT</item>\n      <item>CONTROL_ROT_RIGHT</item>\n      <item>CONTROL_UP</item>\n      <item>CONTROL_DOWN</item>\n      <item>CONTROL_LBUTTON</item>\n      <item>CONTROL_ML_LBUTTON</item>\n\n      <item>PERMISSION_DEBIT</item>\n      <item>PERMISSION_TAKE_CONTROLS</item>\n      <item>PERMISSION_REMAP_CONTROLS</item>\n      <item>PERMISSION_TRIGGER_ANIMATION</item>\n      <item>PERMISSION_ATTACH</item>\n      <item>PERMISSION_RELEASE_OWNERSHIP</item>\n      <item>PERMISSION_CHANGE_LINKS</item>\n      <item>PERMISSION_CHANGE_JOINTS</item>\n      <item>PERMISSION_CHANGE_PERMISSIONS</item>\n      <item>PERMISSION_TRACK_CAMERA</item>\n      <item>PERMISSION_CONTROL_CAMERA</item>\n\n      <item>INVENTORY_TEXTURE</item>\n      <item>INVENTORY_SOUND</item>\n      <item>INVENTORY_OBJECT</item>\n      <item>INVENTORY_SCRIPT</item>\n      <item>INVENTORY_LANDMARK</item>\n      <item>INVENTORY_CLOTHING</item>\n      <item>INVENTORY_NOTECARD</item>\n      <item>INVENTORY_BODYPART</item>\n      <item>INVENTORY_ANIMATION</item>\n      <item>INVENTORY_GESTURE</item>\n      <item>INVENTORY_ALL</item>\n      <item>INVENTORY_NONE</item>\n\n      <item>CHANGED_INVENTORY</item>\n      <item>CHANGED_COLOR</item>\n      <item>CHANGED_SHAPE</item>\n      <item>CHANGED_SCALE</item>\n      <item>CHANGED_TEXTURE</item>\n      <item>CHANGED_LINK</item>\n      <item>CHANGED_ALLOWED_DROP</item>\n      <item>CHANGED_OWNER</item>\n      <item>CHANGED_REGION</item>\n      <item>CHANGED_TELEPORT</item>\n\n      <item>OBJECT_UNKNOWN_DETAIL</item>\n      <item>OBJECT_NAME</item>\n      <item>OBJECT_DESC</item>\n      <item>OBJECT_POS</item>\n      <item>OBJECT_ROT</item>\n      <item>OBJECT_VELOCITY</item>\n      <item>OBJECT_OWNER</item>\n      <item>OBJECT_GROUP</item>\n      <item>OBJECT_CREATOR</item>\n\n      <item>TYPE_INTEGER</item>\n      <item>TYPE_FLOAT</item>\n      <item>TYPE_STRING</item>\n      <item>TYPE_KEY</item>\n      <item>TYPE_VECTOR</item>\n      <item>TYPE_ROTATION</item>\n      <item>TYPE_INVALID</item>\n\n      <item>NULL_KEY</item>\n      <item>EOF</item>\n\n      <item>PI</item>\n      <item>TWO_PI</item>\n      <item>PI_BY_TWO</item>\n      <item>DEG_TO_RAD</item>\n      <item>RAD_TO_DEG</item>\n      <item>SQRT2</item>\n\n      <item>DEBUG_CHANNEL</item>\n      <item>PUBLIC_CHANNEL</item>\n\n      <item>ZERO_VECTOR</item>\n      <item>ZERO_ROTATION</item>\n\n      <item>ATTACH_CHEST</item>\n      <item>ATTACH_HEAD</item>\n      <item>ATTACH_LSHOULDER</item>\n      <item>ATTACH_RSHOULDER</item>\n      <item>ATTACH_LHAND</item>\n      <item>ATTACH_RHAND</item>\n      <item>ATTACH_LFOOT</item>\n      <item>ATTACH_RFOOT</item>\n      <item>ATTACH_BACK</item>\n      <item>ATTACH_PELVIS</item>\n      <item>ATTACH_MOUTH</item>\n      <item>ATTACH_CHIN</item>\n      <item>ATTACH_LEAR</item>\n      <item>ATTACH_REAR</item>\n      <item>ATTACH_LEYE</item>\n      <item>ATTACH_REYE</item>\n      <item>ATTACH_NOSE</item>\n      <item>ATTACH_RUARM</item>\n      <item>ATTACH_RLARM</item>\n      <item>ATTACH_LUARM</item>\n      <item>ATTACH_LLARM</item>\n      <item>ATTACH_RHIP</item>\n      <item>ATTACH_RULEG</item>\n      <item>ATTACH_RLLEG</item>\n      <item>ATTACH_LHIP</item>\n      <item>ATTACH_LULEG</item>\n      <item>ATTACH_LLLEG</item>\n      <item>ATTACH_BELLY</item>\n      <item>ATTACH_LPEC</item>\n      <item>ATTACH_RPEC</item>\n      <item>ATTACH_HUD_CENTER_2</item>\n      <item>ATTACH_HUD_TOP_RIGHT</item>\n      <item>ATTACH_HUD_TOP_CENTER</item>\n      <item>ATTACH_HUD_TOP_LEFT</item>\n      <item>ATTACH_HUD_CENTER_1</item>\n      <item>ATTACH_HUD_BOTTOM_LEFT</item>\n      <item>ATTACH_HUD_BOTTOM</item>\n      <item>ATTACH_HUD_BOTTOM_RIGHT</item>\n\n      <item>LAND_LEVEL</item>\n      <item>LAND_RAISE</item>\n      <item>LAND_LOWER</item>\n      <item>LAND_SMOOTH</item>\n      <item>LAND_NOISE</item>\n      <item>LAND_REVERT</item>\n\n      <item>LAND_SMALL_BRUSH</item>\n      <item>LAND_MEDIUM_BRUSH</item>\n      <item>LAND_LARGE_BRUSH</item>\n\n      <item>DATA_ONLINE</item>\n      <item>DATA_NAME</item>\n      <item>DATA_BORN</item>\n      <item>DATA_RATING</item>\n      <item>DATA_SIM_POS</item>\n      <item>DATA_SIM_STATUS</item>\n      <item>DATA_SIM_RATING</item>\n      <item>DATA_PAYINFO</item>\n\n      <item>PAYMENT_INFO_ON_FILE</item>\n      <item>PAYMENT_INFO_USED</item>\n\n      <item>REMOTE_DATA_CHANNEL</item>\n      <item>REMOTE_DATA_REQUEST</item>\n      <item>REMOTE_DATA_REPLY</item>\n\n\n      <item>PSYS_PART_FLAGS</item>\n      <item>PSYS_PART_START_COLOR</item>\n      <item>PSYS_PART_START_ALPHA</item>\n      <item>PSYS_PART_START_SCALE</item>\n      <item>PSYS_PART_END_COLOR</item>\n      <item>PSYS_PART_END_ALPHA</item>\n      <item>PSYS_PART_END_SCALE</item>\n      <item>PSYS_PART_MAX_AGE</item>\n\n\n      <item>PSYS_PART_WIND_MASK</item>\n      <item>PSYS_PART_INTERP_COLOR_MASK</item>\n      <item>PSYS_PART_INTERP_SCALE_MASK</item>\n      <item>PSYS_PART_BOUNCE_MASK</item>\n      <item>PSYS_PART_FOLLOW_SRC_MASK</item>\n      <item>PSYS_PART_FOLLOW_VELOCITY_MASK</item>\n      <item>PSYS_PART_TARGET_POS_MASK</item>\n      <item>PSYS_PART_EMISSIVE_MASK</item>\n      <item>PSYS_PART_TARGET_LINEAR_MASK</item>\n\n\n      <item>PSYS_SRC_MAX_AGE</item>\n      <item>PSYS_SRC_PATTERN</item>\n      <item>PSYS_SRC_INNERANGLE</item>\n      <item>PSYS_SRC_OUTERANGLE</item>\n      <item>PSYS_SRC_ANGLE_BEGIN</item>\n      <item>PSYS_SRC_ANGLE_END</item>\n      <item>PSYS_SRC_BURST_RATE</item>\n      <item>PSYS_SRC_BURST_PART_COUNT</item>\n      <item>PSYS_SRC_BURST_RADIUS</item>\n      <item>PSYS_SRC_BURST_SPEED_MIN</item>\n      <item>PSYS_SRC_BURST_SPEED_MAX</item>\n      <item>PSYS_SRC_ACCEL</item>\n      <item>PSYS_SRC_TEXTURE</item>\n      <item>PSYS_SRC_TARGET_KEY</item>\n      <item>PSYS_SRC_OMEGA</item>\n\n      <item>PSYS_SRC_OBJ_REL_MASK</item>\n\n      <item>PSYS_SRC_PATTERN_DROP</item>\n      <item>PSYS_SRC_PATTERN_EXPLODE</item>\n      <item>PSYS_SRC_PATTERN_ANGLE</item>\n      <item>PSYS_SRC_PATTERN_ANGLE_CONE</item>\n      <item>PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY</item>\n\n\n      <item>VEHICLE_TYPE_NONE</item>\n      <item>VEHICLE_TYPE_SLED</item>\n      <item>VEHICLE_TYPE_CAR</item>\n      <item>VEHICLE_TYPE_BOAT</item>\n      <item>VEHICLE_TYPE_AIRPLANE</item>\n      <item>VEHICLE_TYPE_BALLOON</item>\n\n      <item>VEHICLE_REFERENCE_FRAME</item>\n      <item>VEHICLE_LINEAR_FRICTION_TIMESCALE</item>\n      <item>VEHICLE_ANGULAR_FRICTION_TIMESCALE</item>\n      <item>VEHICLE_LINEAR_MOTOR_DIRECTION</item>\n      <item>VEHICLE_ANGULAR_MOTOR_DIRECTION</item>\n      <item>VEHICLE_LINEAR_MOTOR_OFFSET</item>\n\n\n\n      <item>VEHICLE_HOVER_HEIGHT</item>\n      <item>VEHICLE_HOVER_EFFICIENCY</item>\n      <item>VEHICLE_HOVER_TIMESCALE</item>\n      <item>VEHICLE_BUOYANCY</item>\n\n      <item>VEHICLE_LINEAR_DEFLECTION_EFFICIENCY</item>\n      <item>VEHICLE_LINEAR_DEFLECTION_TIMESCALE</item>\n      <item>VEHICLE_LINEAR_MOTOR_TIMESCALE</item>\n      <item>VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE</item>\n\n      <item>VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY</item>\n      <item>VEHICLE_ANGULAR_DEFLECTION_TIMESCALE</item>\n      <item>VEHICLE_ANGULAR_MOTOR_TIMESCALE</item>\n      <item>VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE</item>\n\n      <item>VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY</item>\n      <item>VEHICLE_VERTICAL_ATTRACTION_TIMESCALE</item>\n\n      <item>VEHICLE_BANKING_EFFICIENCY</item>\n      <item>VEHICLE_BANKING_MIX</item>\n      <item>VEHICLE_BANKING_TIMESCALE</item>\n\n      <item>VEHICLE_FLAG_NO_FLY_UP</item>\n      <item>VEHICLE_FLAG_NO_DEFLECTION_UP</item>\n      <item>VEHICLE_FLAG_LIMIT_ROLL_ONLY</item>\n      <item>VEHICLE_FLAG_HOVER_WATER_ONLY</item>\n      <item>VEHICLE_FLAG_HOVER_TERRAIN_ONLY</item>\n      <item>VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT</item>\n      <item>VEHICLE_FLAG_HOVER_UP_ONLY</item>\n      <item>VEHICLE_FLAG_LIMIT_MOTOR_UP</item>\n      <item>VEHICLE_FLAG_MOUSELOOK_STEER</item>\n      <item>VEHICLE_FLAG_MOUSELOOK_BANK</item>\n      <item>VEHICLE_FLAG_CAMERA_DECOUPLED</item>\n\n\n\n      <item>PRIM_TYPE</item>\n      <item>PRIM_MATERIAL</item>\n      <item>PRIM_PHYSICS</item>\n      <item>PRIM_FLEXIBLE</item>\n      <item>PRIM_POINT_LIGHT</item>\n      <item>PRIM_TEMP_ON_REZ</item>\n      <item>PRIM_PHANTOM</item>\n      <item>PRIM_CAST_SHADOWS</item>\n      <item>PRIM_POSITION</item>\n      <item>PRIM_SIZE</item>\n      <item>PRIM_ROTATION</item>\n      <item>PRIM_TEXTURE</item>\n      <item>PRIM_COLOR</item>\n      <item>PRIM_BUMP_SHINY</item>\n      <item>PRIM_FULLBRIGHT</item>\n      <item>PRIM_TEXGEN</item>\n      <item>PRIM_GLOW</item>\n\n      <item>PRIM_TYPE_BOX</item>\n      <item>PRIM_TYPE_CYLINDER</item>\n      <item>PRIM_TYPE_PRISM</item>\n      <item>PRIM_TYPE_SPHERE</item>\n      <item>PRIM_TYPE_TORUS</item>\n      <item>PRIM_TYPE_TUBE</item>\n      <item>PRIM_TYPE_RING</item>\n      <item>PRIM_TYPE_SCULPT</item>\n\n      <item>PRIM_HOLE_DEFAULT</item>\n      <item>PRIM_HOLE_CIRCLE</item>\n      <item>PRIM_HOLE_SQUARE</item>\n      <item>PRIM_HOLE_TRIANGLE</item>\n\n      <item>PRIM_MATERIAL_STONE</item>\n      <item>PRIM_MATERIAL_METAL</item>\n      <item>PRIM_MATERIAL_GLASS</item>\n      <item>PRIM_MATERIAL_WOOD</item>\n      <item>PRIM_MATERIAL_FLESH</item>\n      <item>PRIM_MATERIAL_PLASTIC</item>\n      <item>PRIM_MATERIAL_RUBBER</item>\n      <item>PRIM_MATERIAL_LIGHT</item>\n\n      <item>PRIM_SHINY_NONE</item>\n      <item>PRIM_SHINY_LOW</item>\n      <item>PRIM_SHINY_MEDIUM</item>\n      <item>PRIM_SHINY_HIGH</item>\n\n      <item>PRIM_BUMP_NONE</item>\n      <item>PRIM_BUMP_BRIGHT</item>\n      <item>PRIM_BUMP_DARK</item>\n      <item>PRIM_BUMP_WOOD</item>\n      <item>PRIM_BUMP_BARK</item>\n      <item>PRIM_BUMP_BRICKS</item>\n      <item>PRIM_BUMP_CHECKER</item>\n      <item>PRIM_BUMP_CONCRETE</item>\n      <item>PRIM_BUMP_TILE</item>\n      <item>PRIM_BUMP_STONE</item>\n      <item>PRIM_BUMP_DISKS</item>\n      <item>PRIM_BUMP_GRAVEL</item>\n      <item>PRIM_BUMP_BLOBS</item>\n      <item>PRIM_BUMP_SIDING</item>\n      <item>PRIM_BUMP_LARGETILE</item>\n      <item>PRIM_BUMP_STUCCO</item>\n      <item>PRIM_BUMP_SUCTION</item>\n      <item>PRIM_BUMP_WEAVE</item>\n\n      <item>PRIM_TEXGEN_DEFAULT</item>\n      <item>PRIM_TEXGEN_PLANAR</item>\n\n      <item>PRIM_SCULPT_TYPE_SPHERE</item>\n      <item>PRIM_SCULPT_TYPE_TORUS</item>\n      <item>PRIM_SCULPT_TYPE_PLANE</item>\n      <item>PRIM_SCULPT_TYPE_CYLINDER</item>\n      <item>PRIM_SCULPT_TYPE_MASK</item>\n      <item>PRIM_SCULPT_FLAG_MIRROR</item>\n      <item>PRIM_SCULPT_FLAG_INVERT</item>\n\n      <item>MASK_BASE</item>\n      <item>MASK_OWNER</item>\n      <item>MASK_GROUP</item>\n      <item>MASK_EVERYONE</item>\n      <item>MASK_NEXT</item>\n\n      <item>PERM_TRANSFER</item>\n      <item>PERM_MODIFY</item>\n      <item>PERM_COPY</item>\n      <item>PERM_MOVE</item>\n      <item>PERM_ALL</item>\n\n      <item>PARCEL_MEDIA_COMMAND_STOP</item>\n      <item>PARCEL_MEDIA_COMMAND_PAUSE</item>\n      <item>PARCEL_MEDIA_COMMAND_PLAY</item>\n      <item>PARCEL_MEDIA_COMMAND_LOOP</item>\n      <item>PARCEL_MEDIA_COMMAND_TEXTURE</item>\n      <item>PARCEL_MEDIA_COMMAND_URL</item>\n      <item>PARCEL_MEDIA_COMMAND_TIME</item>\n      <item>PARCEL_MEDIA_COMMAND_AGENT</item>\n      <item>PARCEL_MEDIA_COMMAND_UNLOAD</item>\n      <item>PARCEL_MEDIA_COMMAND_AUTO_ALIGN</item>\n      <item>PARCEL_MEDIA_COMMAND_TYPE</item>\n      <item>PARCEL_MEDIA_COMMAND_SIZE</item>\n      <item>PARCEL_MEDIA_COMMAND_DESC</item>\n      <item>PARCEL_MEDIA_COMMAND_LOOP_SET</item>\n\n      <item>LIST_STAT_MAX</item>\n      <item>LIST_STAT_MIN</item>\n      <item>LIST_STAT_MEAN</item>\n      <item>LIST_STAT_MEDIAN</item>\n      <item>LIST_STAT_STD_DEV</item>\n      <item>LIST_STAT_SUM</item>\n      <item>LIST_STAT_SUM_SQUARES</item>\n      <item>LIST_STAT_NUM_COUNT</item>\n      <item>LIST_STAT_GEOMETRIC_MEAN</item>\n      <item>LIST_STAT_RANGE</item>\n\n      <item>PAY_HIDE</item>\n      <item>PAY_DEFAULT</item>\n\n      <item>PARCEL_FLAG_ALLOW_FLY</item>\n      <item>PARCEL_FLAG_ALLOW_GROUP_SCRIPTS</item>\n      <item>PARCEL_FLAG_ALLOW_SCRIPTS</item>\n      <item>PARCEL_FLAG_ALLOW_LANDMARK</item>\n      <item>PARCEL_FLAG_ALLOW_TERRAFORM</item>\n      <item>PARCEL_FLAG_ALLOW_DAMAGE</item>\n      <item>PARCEL_FLAG_ALLOW_CREATE_OBJECTS</item>\n      <item>PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS</item>\n      <item>PARCEL_FLAG_USE_ACCESS_GROUP</item>\n      <item>PARCEL_FLAG_USE_ACCESS_LIST</item>\n      <item>PARCEL_FLAG_USE_BAN_LIST</item>\n      <item>PARCEL_FLAG_USE_LAND_PASS_LIST</item>\n      <item>PARCEL_FLAG_LOCAL_SOUND_ONLY</item>\n      <item>PARCEL_FLAG_RESTRICT_PUSHOBJECT</item>\n      <item>PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY</item>\n      <item>PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY</item>\n\n      <item>REGION_FLAG_ALLOW_DAMAGE</item>\n      <item>REGION_FLAG_FIXED_SUN</item>\n      <item>REGION_FLAG_BLOCK_TERRAFORM</item>\n      <item>REGION_FLAG_SANDBOX</item>\n      <item>REGION_FLAG_DISABLE_COLLISIONS</item>\n      <item>REGION_FLAG_DISABLE_PHYSICS</item>\n      <item>REGION_FLAG_BLOCK_FLY</item>\n      <item>REGION_FLAG_ALLOW_DIRECT_TELEPORT</item>\n      <item>REGION_FLAG_RESTRICT_PUSHOBJECT</item>\n\n      <item>HTTP_METHOD</item>\n      <item>HTTP_MIMETYPE</item>\n      <item>HTTP_BODY_MAXLENGTH</item>\n      <item>HTTP_BODY_TRUNCATED</item>\n      <item>HTTP_VERIFY_CERT</item>\n\n      <item>PARCEL_COUNT_TOTAL</item>\n      <item>PARCEL_COUNT_OWNER</item>\n      <item>PARCEL_COUNT_GROUP</item>\n      <item>PARCEL_COUNT_OTHER</item>\n      <item>PARCEL_COUNT_SELECTED</item>\n      <item>PARCEL_COUNT_TEMP</item>\n\n      <item>PARCEL_DETAILS_NAME</item>\n      <item>PARCEL_DETAILS_DESC</item>\n      <item>PARCEL_DETAILS_OWNER</item>\n      <item>PARCEL_DETAILS_GROUP</item>\n      <item>PARCEL_DETAILS_AREA</item>\n\n      <item>STRING_TRIM_HEAD</item>\n      <item>STRING_TRIM_TAIL</item>\n      <item>STRING_TRIM</item>\n\n      <item>CLICK_ACTION_NONE</item>\n      <item>CLICK_ACTION_TOUCH</item>\n      <item>CLICK_ACTION_SIT</item>\n      <item>CLICK_ACTION_BUY</item>\n      <item>CLICK_ACTION_PAY</item>\n      <item>CLICK_ACTION_OPEN</item>\n      <item>CLICK_ACTION_PLAY</item>\n      <item>CLICK_ACTION_OPEN_MEDIA</item>\n\n      <item>TEXTURE_BLANK</item>\n      <item>TEXTURE_DEFAULT</item>\n      <item>TEXTURE_MEDIA</item>\n      <item>TEXTURE_PLYWOOD</item>\n      <item>TEXTURE_TRANSPARENT</item>\n\n      <item>TOUCH_INVALID_FACE</item>\n      <item>TOUCH_INVALID_VECTOR</item>\n      <item>TOUCH_INVALID_TEXCOORD</item>\n    </list>\n    <list name=\"symbols\">\n      <item>++</item>\n      <item>--</item>\n      <item>+=</item>\n      <item>-=</item>\n      <item>*=</item>\n      <item>/=</item>\n      <item>%=</item>\n      <item>;</item>\n      <item>,</item>\n      <item>=</item>\n      <item>(</item>\n      <item>)</item>\n      <item>-</item>\n      <item>+</item>\n      <item>*</item>\n      <item>/</item>\n      <item>%</item>\n      <item>@</item>\n      <item>:</item>\n      <item>&gt;</item>\n      <item>&lt;</item>\n      <item>==</item>\n      <item>!=</item>\n      <item>&gt;=</item>\n      <item>&lt;=</item>\n      <item>&amp;</item>\n      <item>|</item>\n      <item>^</item>\n      <item>~</item>\n      <item>!</item>\n      <item>&amp;&amp;</item>\n      <item>||</item>\n      <item>&lt;&lt;</item>\n      <item>&gt;&gt;</item>\n    </list>\n\n    <!-- stdlib is taken from lscript_library.cpp -->\n    <list name=\"stdlib\">\n      <item>llSin</item>\n      <item>llCos</item>\n      <item>llTan</item>\n      <item>llAtan2</item>\n      <item>llSqrt</item>\n      <item>llPow</item>\n      <item>llAbs</item>\n      <item>llFabs</item>\n      <item>llFrand</item>\n      <item>llFloor</item>\n      <item>llCeil</item>\n      <item>llRound</item>\n      <item>llVecMag</item>\n      <item>llVecNorm</item>\n      <item>llVecDist</item>\n      <item>llRot2Euler</item>\n      <item>llEuler2Rot</item>\n      <item>llAxes2Rot</item>\n      <item>llRot2Fwd</item>\n      <item>llRot2Left</item>\n      <item>llRot2Up</item>\n      <item>llRotBetween</item>\n      <item>llWhisper</item>\n      <item>llSay</item>\n      <item>llShout</item>\n      <item>llListen</item>\n      <item>llListenControl</item>\n      <item>llListenRemove</item>\n      <item>llSensor</item>\n      <item>llSensorRepeat</item>\n      <item>llSensorRemove</item>\n      <item>llDetectedName</item>\n      <item>llDetectedKey</item>\n      <item>llDetectedOwner</item>\n      <item>llDetectedType</item>\n      <item>llDetectedPos</item>\n      <item>llDetectedVel</item>\n      <item>llDetectedGrab</item>\n      <item>llDetectedRot</item>\n      <item>llDetectedGroup</item>\n      <item>llDetectedLinkNumber</item>\n      <item>llDie</item>\n      <item>llGround</item>\n      <item>llCloud</item>\n      <item>llWind</item>\n      <item>llSetStatus</item>\n      <item>llGetStatus</item>\n      <item>llSetScale</item>\n      <item>llGetScale</item>\n      <item>llSetColor</item>\n      <item>llGetAlpha</item>\n      <item>llSetAlpha</item>\n      <item>llGetColor</item>\n      <item>llSetTexture</item>\n      <item>llScaleTexture</item>\n      <item>llOffsetTexture</item>\n      <item>llRotateTexture</item>\n      <item>llGetTexture</item>\n      <item>llSetPos</item>\n      <item>llGetPos</item>\n      <item>llGetLocalPos</item>\n      <item>llSetRot</item>\n      <item>llGetRot</item>\n      <item>llGetLocalRot</item>\n      <item>llSetForce</item>\n      <item>llGetForce</item>\n      <item>llTarget</item>\n      <item>llTargetRemove</item>\n      <item>llRotTarget</item>\n      <item>llRotTargetRemove</item>\n      <item>llMoveToTarget</item>\n      <item>llStopMoveToTarget</item>\n      <item>llApplyImpulse</item>\n      <item>llApplyRotationalImpulse</item>\n      <item>llSetTorque</item>\n      <item>llGetTorque</item>\n      <item>llSetForceAndTorque</item>\n      <item>llGetVel</item>\n      <item>llGetAccel</item>\n      <item>llGetOmega</item>\n      <item>llGetTimeOfDay</item>\n      <item>llGetWallclock</item>\n      <item>llGetTime</item>\n      <item>llResetTime</item>\n      <item>llGetAndResetTime</item>\n      <item>llSound</item>\n      <item>llPlaySound</item>\n      <item>llLoopSound</item>\n      <item>llLoopSoundMaster</item>\n      <item>llLoopSoundSlave</item>\n      <item>llPlaySoundSlave</item>\n      <item>llTriggerSound</item>\n      <item>llStopSound</item>\n      <item>llPreloadSound</item>\n      <item>llGetSubString</item>\n      <item>llDeleteSubString</item>\n      <item>llInsertString</item>\n      <item>llToUpper</item>\n      <item>llToLower</item>\n      <item>llGiveMoney</item>\n      <item>llMakeExplosion</item>\n      <item>llMakeFountain</item>\n      <item>llMakeSmoke</item>\n      <item>llMakeFire</item>\n      <item>llRezObject</item>\n      <item>llLookAt</item>\n      <item>llStopLookAt</item>\n      <item>llSetTimerEvent</item>\n      <item>llSleep</item>\n      <item>llGetMass</item>\n      <item>llCollisionFilter</item>\n      <item>llTakeControls</item>\n      <item>llReleaseControls</item>\n      <item>llAttachToAvatar</item>\n      <item>llDetachFromAvatar</item>\n      <item>llTakeCamera</item>\n      <item>llReleaseCamera</item>\n      <item>llGetOwner</item>\n      <item>llInstantMessage</item>\n      <item>llEmail</item>\n      <item>llGetNextEmail</item>\n      <item>llGetKey</item>\n      <item>llSetBuoyancy</item>\n      <item>llSetHoverHeight</item>\n      <item>llStopHover</item>\n      <item>llMinEventDelay</item>\n      <item>llSoundPreload</item>\n      <item>llRotLookAt</item>\n      <item>llStringLength</item>\n      <item>llStartAnimation</item>\n      <item>llStopAnimation</item>\n      <item>llPointAt</item>\n      <item>llStopPointAt</item>\n      <item>llTargetOmega</item>\n      <item>llGetStartParameter</item>\n      <item>llGodLikeRezObject</item>\n      <item>llRequestPermissions</item>\n      <item>llGetPermissionsKey</item>\n      <item>llGetPermissions</item>\n      <item>llGetLinkNumber</item>\n      <item>llSetLinkColor</item>\n      <item>llCreateLink</item>\n      <item>llBreakLink</item>\n      <item>llBreakAllLinks</item>\n      <item>llGetLinkKey</item>\n      <item>llGetLinkName</item>\n      <item>llGetInventoryNumber</item>\n      <item>llGetInventoryName</item>\n      <item>llSetScriptState</item>\n      <item>llGetEnergy</item>\n      <item>llGiveInventory</item>\n      <item>llRemoveInventory</item>\n      <item>llSetText</item>\n      <item>llWater</item>\n      <item>llPassTouches</item>\n      <item>llRequestAgentData</item>\n      <item>llRequestInventoryData</item>\n      <item>llSetDamage</item>\n      <item>llTeleportAgentHome</item>\n      <item>llModifyLand</item>\n      <item>llCollisionSound</item>\n      <item>llCollisionSprite</item>\n      <item>llGetAnimation</item>\n      <item>llResetScript</item>\n      <item>llMessageLinked</item>\n      <item>llPushObject</item>\n      <item>llPassCollisions</item>\n      <item>llGetScriptName</item>\n      <item>llGetNumberOfSides</item>\n      <item>llAxisAngle2Rot</item>\n      <item>llRot2Axis</item>\n      <item>llRot2Angle</item>\n      <item>llAcos</item>\n      <item>llAsin</item>\n      <item>llAngleBetween</item>\n      <item>llGetInventoryKey</item>\n      <item>llAllowInventoryDrop</item>\n      <item>llGetSunDirection</item>\n      <item>llGetTextureOffset</item>\n      <item>llGetTextureScale</item>\n      <item>llGetTextureRot</item>\n      <item>llSubStringIndex</item>\n      <item>llGetOwnerKey</item>\n      <item>llGetCenterOfMass</item>\n      <item>llListSort</item>\n      <item>llGetListLength</item>\n      <item>llList2Integer</item>\n      <item>llList2Float</item>\n      <item>llList2String</item>\n      <item>llList2Key</item>\n      <item>llList2Vector</item>\n      <item>llList2Rot</item>\n      <item>llList2List</item>\n      <item>llDeleteSubList</item>\n      <item>llGetListEntryType</item>\n      <item>llList2CSV</item>\n      <item>llCSV2List</item>\n      <item>llListRandomize</item>\n      <item>llList2ListStrided</item>\n      <item>llGetRegionCorner</item>\n      <item>llListInsertList</item>\n      <item>llListFindList</item>\n      <item>llGetObjectName</item>\n      <item>llSetObjectName</item>\n      <item>llGetDate</item>\n      <item>llEdgeOfWorld</item>\n      <item>llGetAgentInfo</item>\n      <item>llAdjustSoundVolume</item>\n      <item>llSetSoundQueueing</item>\n      <item>llSetSoundRadius</item>\n      <item>llKey2Name</item>\n      <item>llSetTextureAnim</item>\n      <item>llTriggerSoundLimited</item>\n      <item>llEjectFromLand</item>\n      <item>llParseString2List</item>\n      <item>llOverMyLand</item>\n      <item>llGetLandOwnerAt</item>\n      <item>llGetNotecardLine</item>\n      <item>llGetAgentSize</item>\n      <item>llSameGroup</item>\n      <item>llUnSit</item>\n      <item>llGroundSlope</item>\n      <item>llGroundNormal</item>\n      <item>llGroundContour</item>\n      <item>llGetAttached</item>\n      <item>llGetFreeMemory</item>\n      <item>llGetRegionName</item>\n      <item>llGetRegionTimeDilation</item>\n      <item>llGetRegionFPS</item>\n\n      <item>llParticleSystem</item>\n      <item>llGroundRepel</item>\n      <item>llGiveInventoryList</item>\n\n      <item>llSetVehicleType</item>\n      <item>llSetVehicleFloatParam</item>\n      <item>llSetVehicleVectorParam</item>\n      <item>llSetVehicleRotationParam</item>\n      <item>llSetVehicleFlags</item>\n      <item>llRemoveVehicleFlags</item>\n      <item>llSitTarget</item>\n      <item>llAvatarOnSitTarget</item>\n      <item>llAddToLandPassList</item>\n      <item>llSetTouchText</item>\n      <item>llSetSitText</item>\n      <item>llSetCameraEyeOffset</item>\n      <item>llSetCameraAtOffset</item>\n\n      <item>llDumpList2String</item>\n      <item>llScriptDanger</item>\n      <item>llDialog</item>\n      <item>llVolumeDetect</item>\n      <item>llResetOtherScript</item>\n      <item>llGetScriptState</item>\n      <item>llRemoteLoadScript</item>\n\n      <item>llSetRemoteScriptAccessPin</item>\n      <item>llRemoteLoadScriptPin</item>\n\n      <item>llOpenRemoteDataChannel</item>\n      <item>llSendRemoteData</item>\n      <item>llRemoteDataReply</item>\n      <item>llCloseRemoteDataChannel</item>\n\n      <item>llMD5String</item>\n      <item>llSetPrimitiveParams</item>\n      <item>llStringToBase64</item>\n      <item>llBase64ToString</item>\n      <item>llXorBase64Strings</item>\n      <item>llRemoteDataSetRegion</item>\n      <item>llLog10</item>\n      <item>llLog</item>\n      <item>llGetAnimationList</item>\n      <item>llSetParcelMusicURL</item>\n\n      <item>llGetRootPosition</item>\n      <item>llGetRootRotation</item>\n\n      <item>llGetObjectDesc</item>\n      <item>llSetObjectDesc</item>\n      <item>llGetCreator</item>\n      <item>llGetTimestamp</item>\n      <item>llSetLinkAlpha</item>\n      <item>llGetNumberOfPrims</item>\n      <item>llGetNumberOfNotecardLines</item>\n\n      <item>llGetBoundingBox</item>\n      <item>llGetGeometricCenter</item>\n      <item>llGetPrimitiveParams</item>\n      <item>llIntegerToBase64</item>\n      <item>llBase64ToInteger</item>\n      <item>llGetGMTclock</item>\n      <item>llGetSimulatorHostname</item>\n\n      <item>llSetLocalRot</item>\n\n      <item>llParseStringKeepNulls</item>\n      <item>llRezAtRoot</item>\n\n      <item>llGetObjectPermMask</item>\n      <item>llSetObjectPermMask</item>\n\n      <item>llGetInventoryPermMask</item>\n      <item>llSetInventoryPermMask</item>\n      <item>llGetInventoryCreator</item>\n      <item>llOwnerSay</item>\n      <item>llRequestSimulatorData</item>\n      <item>llForceMouselook</item>\n      <item>llGetObjectMass</item>\n      <item>llListReplaceList</item>\n      <item>llLoadURL</item>\n\n      <item>llParcelMediaCommandList</item>\n      <item>llParcelMediaQuery</item>\n\n      <item>llModPow</item>\n\n      <item>llGetInventoryType</item>\n      <item>llSetPayPrice</item>\n      <item>llGetCameraPos</item>\n      <item>llGetCameraRot</item>\n\n      <item>llSetPrimURL</item>\n      <item>llRefreshPrimURL</item>\n      <item>llEscapeURL</item>\n      <item>llUnescapeURL</item>\n\n      <item>llMapDestination</item>\n      <item>llAddToLandBanList</item>\n      <item>llRemoveFromLandPassList</item>\n      <item>llRemoveFromLandBanList</item>\n\n      <item>llSetCameraParams</item>\n      <item>llClearCameraParams</item>\n\n      <item>llListStatistics</item>\n      <item>llGetUnixTime</item>\n      <item>llGetParcelFlags</item>\n      <item>llGetRegionFlags</item>\n      <item>llXorBase64StringsCorrect</item>\n\n      <item>llHTTPRequest</item>\n\n      <item>llResetLandBanList</item>\n      <item>llResetLandPassList</item>\n\n      <item>llGetObjectPrimCount</item>\n      <item>llGetParcelPrimOwners</item>\n      <item>llGetParcelPrimCount</item>\n      <item>llGetParcelMaxPrims</item>\n      <item>llGetParcelDetails</item>\n\n      <item>llSetLinkPrimitiveParams</item>\n      <item>llSetLinkTexture</item>\n\n\n      <item>llStringTrim</item>\n      <item>llRegionSay</item>\n      <item>llGetObjectDetails</item>\n      <item>llSetClickAction</item>\n\n      <item>llGetRegionAgentCount</item>\n      <item>llTextBox</item>\n      <item>llGetAgentLanguage</item>\n      <item>llDetectedTouchUV</item>\n      <item>llDetectedTouchFace</item>\n      <item>llDetectedTouchPos</item>\n      <item>llDetectedTouchNormal</item>\n      <item>llDetectedTouchBinormal</item>\n      <item>llDetectedTouchST</item>\n\n      <item>llSHA1String</item>\n    </list>\n\n    <!-- for added convenience -->\n    <list name=\"attention\">\n      <item>FIXME</item>\n      <item>TODO</item>\n      <item>BUG</item>\n      <item>HACK</item>\n      <item>XXX</item>\n    </list>\n    <contexts>\n      <context name=\"Default\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- all regexps here are based on indra.l -->\n        <Detect2Chars  char=\"/\" char1=\"/\" context=\"Comment\"/>\n        <keyword attribute=\"Data Type\" String=\"types\"/>\n        <keyword attribute=\"Keyword\" String=\"keywords\"/>\n        <keyword attribute=\"Event\" String=\"events\"/>\n        <RegExpr attribute=\"Hex\" String=\"0[xX]&H;+\"/>\n        <RegExpr attribute=\"Decimal\" String=\"&N;+\"/>\n        <keyword attribute=\"Constant\" String=\"constants\"/>\n        <keyword attribute=\"Library Function\" String=\"stdlib\"/>\n        <RegExpr attribute=\"Function\" String=\"&L;(&L;|&N;)*(?=\\s*\\()\"/>\n        <RegExpr attribute=\"Identifier\" String=\"&L;(&L;|&N;)*\"/>\n        <RegExpr attribute=\"Float\" String=\"&N;+&E;\"/>\n        <RegExpr attribute=\"Float\" String=\"&N;*\\.&N;+(&E;)?&FS;?\"/>\n        <RegExpr attribute=\"Float\" String=\"&N;+\\.&N;*(&E;)?&FS;?\"/>\n        <RegExpr attribute=\"String\" String=\"&L;?\\&quot;(\\\\.|[^\\\\&quot;])*\\&quot;\"/>\n        <keyword attribute=\"Symbol\" String=\"symbols\"/>\n        <DetectChar char=\".\" attribute=\"Symbol\"/>\n        <DetectChar char=\"{\" attribute=\"Brace\" beginRegion=\"brace\"/>\n        <DetectChar char=\"}\" attribute=\"Brace\" endRegion=\"brace\"/>\n\n        <!-- the following allows folding multiline function calls and lists, very handy -->\n        <DetectChar char=\"(\" attribute=\"Symbol\" beginRegion=\"paren\"/>\n        <DetectChar char=\")\" attribute=\"Symbol\" endRegion=\"paren\"/>\n        <DetectChar char=\"[\" attribute=\"Symbol\" beginRegion=\"list\"/>\n        <DetectChar char=\"]\" attribute=\"Symbol\" endRegion=\"list\"/>\n      </context>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Alert\" String=\"attention\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Event\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Identifier\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Brace\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Library Function\" defStyleNum=\"dsFunction\" bold=\"1\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Alert\" defStyleNum=\"dsAlert\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n        <comment name=\"singleLine\" position=\"afterwhitespace\" start=\"//\"/>\n    </comments>\n  </general>\n</language>\n<!--\n// kate: space-indent on; indent-width 2; replace-tabs on;\n-->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/lua.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!ENTITY HEX \"[0-9A-Fa-f]\">\n]>\n<!--\n    LUA (www.lua.org) syntax highlighting for Kate\n\n    CHANGES\n\n    [ Version 1.05 (2019-06-03) by Jonathan Poelen ]\n\n    - warn and coroutine.kill (Lua 5.4)\n    - end of a function as Keyword rather than Control\n\n    [ Version 1.04 (2018-04-30) by Jonathan Poelen ]\n\n    - based on Lua 5.3\n    - some math.*, table.* and string.* are marked as deprecated\n    - fix special char, float format and ' collapsable\n\n    [ Version 1.03 (2007-09-12) by Bruno Massa ]\n\n    - [=[ ]=] comment and string style is now working (thanks to Dominik and Sebastian)\n    - it uses DoxygenLua.xml to format the comments in a Doxygen style\n\n    [ Version 1.02 (2007-07-15) by Bruno Massa ]\n\n    - based on Lua 5.1\n    - highlight the Kepler function (cgilua, luasql, lfs, luazip)\n    - true, false and nil are highlighted in black\n    - table.foreach and foreachi are marked as alerts\n\n    [ Version 1.01 (2007-01-01) by Bruno Massa ]\n\n    - highlighting similar to PHP\n    - error detection on one-line strings and common mistakes from other languages like using \"!=\" \"++\"\n    - uppercase-only variables are highlighted as constants\n    - { } now is collapsable\n\n    [ Version 1.00 (2006-12-05) by Bruno Massa ]\n\n    - based on Lua 5.0.2 syntax\n    - strings \"[[ ]]\" and single quoted strings\n    - block comments\n    - function, if/elseif/else, do-end chunks, comment blocks, strings using [[ ]] collapsable\n    - nil, false and true consided pseudo-variables (displayed as numbers)\n    - NOTE, FIXME, TODO alerts added on comments\n    - improved highlighting\n-->\n<language name=\"Lua\" version=\"7\" indenter=\"lua\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.lua\" mimetype=\"text/x-lua\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>and</item>\n      <item>function</item>\n      <item>in</item>\n      <item>local</item>\n      <item>not</item>\n      <item>or</item>\n      <!-- pseudo-variables -->\n      <item>nil</item>\n      <item>false</item>\n      <item>true</item>\n    </list>\n\n    <list name=\"control\">\n      <item>break</item>\n      <item>do</item>\n      <item>else</item>\n      <item>elseif</item>\n      <item>end</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>repeat</item>\n      <item>return</item>\n      <item>then</item>\n      <item>until</item>\n      <item>while</item>\n    </list>\n\n    <list name=\"startcontrol\">\n      <item>do</item>\n      <item>if</item>\n      <item>repeat</item>\n    </list>\n\n    <list name=\"elsecontrol\">\n      <item>else</item>\n      <item>elseif</item>\n    </list>\n\n    <list name=\"endcontrol\">\n      <item>end</item>\n      <item>until</item>\n    </list>\n\n    <list name=\"basevar\">\n      <item>_PROMPT</item>\n      <item>_PROMPT2</item>\n      <item>LUA_PATH</item>\n      <item>LUA_CPATH</item>\n      <item>LUA_INIT</item>\n      <item>_ENV</item>\n      <item>_VERSION</item>\n      <item>_G</item>\n      <!-- Module -->\n      <item>package.config</item>\n      <item>package.cpath</item>\n      <item>package.loaded</item>\n      <item>package.path</item>\n      <item>package.preload</item>\n      <item>package.searchers</item>\n      <!-- UTF-8 Support -->\n      <item>utf8.charpattern</item>\n      <!-- Mathematical Functions -->\n      <item>math.maxinteger</item>\n      <item>math.mininteger</item>\n      <item>math.pi</item>\n    </list>\n\n    <list name=\"basefunc\">\n      <!-- Basic functions -->\n      <item>assert</item>\n      <item>collectgarbage</item>\n      <item>dofile</item>\n      <item>error</item>\n      <item>getmetatable</item>\n      <item>ipairs</item>\n      <item>load</item>\n      <item>loadfile</item>\n      <item>next</item>\n      <item>pairs</item>\n      <item>pcall</item>\n      <item>print</item>\n      <item>rawequal</item>\n      <item>rawget</item>\n      <item>rawlen</item>\n      <item>rawset</item>\n      <item>select</item>\n      <item>setmetatable</item>\n      <item>tonumber</item>\n      <item>tostring</item>\n      <item>type</item>\n      <item>warn</item>\n      <item>xpcall</item>\n\n      <!-- Coroutine manipulation -->\n      <item>coroutine.create</item>\n      <item>coroutine.isyieldable</item>\n      <item>coroutine.resume</item>\n      <item>coroutine.kill</item>\n      <item>coroutine.running</item>\n      <item>coroutine.status</item>\n      <item>coroutine.wrap</item>\n      <item>coroutine.yield</item>\n\n      <!-- Module -->\n      <item>require</item>\n      <item>package.loadlib</item>\n      <item>package.searchpath</item>\n\n      <!-- String Manipulation -->\n      <item>string.byte</item>\n      <item>string.char</item>\n      <item>string.dump</item>\n      <item>string.find</item>\n      <item>string.format</item>\n      <item>string.gmatch</item>\n      <item>string.gsub</item>\n      <item>string.len</item>\n      <item>string.lower</item>\n      <item>string.match</item>\n      <item>string.pack</item>\n      <item>string.packsize</item>\n      <item>string.rep</item>\n      <item>string.reverse</item>\n      <item>string.sub</item>\n      <item>string.unpack</item>\n      <item>string.upper</item>\n\n      <!-- UTF-8 Support -->\n      <item>utf8.char</item>\n      <item>utf8.codes</item>\n      <item>utf8.codepoint</item>\n      <item>utf8.len</item>\n      <item>utf8.offset</item>\n\n      <!-- Table Manipulation -->\n      <item>table.concat</item>\n      <item>table.insert</item>\n      <item>table.move</item>\n      <item>table.pack</item>\n      <item>table.remove</item>\n      <item>table.sort</item>\n      <item>table.unpack</item>\n\n      <!-- Mathematical Functions -->\n      <item>math.abs</item>\n      <item>math.acos</item>\n      <item>math.asin</item>\n      <item>math.atan</item>\n      <item>math.ceil</item>\n      <item>math.cos</item>\n      <item>math.deg</item>\n      <item>math.exp</item>\n      <item>math.floor</item>\n      <item>math.fmod</item>\n      <item>math.huge</item>\n      <item>math.log</item>\n      <item>math.max</item>\n      <item>math.min</item>\n      <item>math.modf</item>\n      <item>math.rad</item>\n      <item>math.random</item>\n      <item>math.randomseed</item>\n      <item>math.sin</item>\n      <item>math.sqrt</item>\n      <item>math.tan</item>\n      <item>math.tointeger</item>\n      <item>math.type</item>\n      <item>math.utl</item>\n\n      <!-- Input and Output Facilities -->\n      <item>io.close</item>\n      <item>io.flush</item>\n      <item>io.input</item>\n      <item>io.lines</item>\n      <item>io.open</item>\n      <item>io.output</item>\n      <item>io.popen</item>\n      <item>io.read</item>\n      <item>io.stderr</item>\n      <item>io.stdin</item>\n      <item>io.stdout</item>\n      <item>io.tmpfile</item>\n      <item>io.type</item>\n      <item>io.write</item>\n\n      <!-- Operating System Facilities -->\n      <item>os.clock</item>\n      <item>os.date</item>\n      <item>os.difftime</item>\n      <item>os.execute</item>\n      <item>os.exit</item>\n      <item>os.getenv</item>\n      <item>os.remove</item>\n      <item>os.rename</item>\n      <item>os.setlocale</item>\n      <item>os.time</item>\n      <item>os.tmpname</item>\n\n      <!-- The Debug Library -->\n      <item>debug.debug</item>\n      <item>debug.gethook</item>\n      <item>debug.getinfo</item>\n      <item>debug.getlocal</item>\n      <item>debug.getmetatable</item>\n      <item>debug.getregistry</item>\n      <item>debug.getupvalue</item>\n      <item>debug.getuservalue</item>\n      <item>debug.sethook</item>\n      <item>debug.setlocal</item>\n      <item>debug.setmetatable</item>\n      <item>debug.setupvalue</item>\n      <item>debug.setuservalue</item>\n      <item>debug.traceback</item>\n      <item>debug.upvalueid</item>\n      <item>debug.upvaluejoin</item>\n\n      <item>cgilua</item>\n      <item>cgilua.addclosefunction</item>\n      <item>cgilua.addopenfunction</item>\n      <item>cgilua.addopenfunction</item>\n      <item>cgilua.addscripthandler</item>\n      <item>cgilua.addscripthandler</item>\n      <item>cgilua.buildprocesshandler</item>\n      <item>cgilua.contentheader</item>\n      <item>cgilua.cookies.delete</item>\n      <item>cgilua.cookies.get</item>\n      <item>cgilua.cookies.set</item>\n      <item>cgilua.cookies.sethtml</item>\n      <item>cgilua.cookies</item>\n      <item>cgilua.doif</item>\n      <item>cgilua.doscript</item>\n      <item>cgilua.errorlog</item>\n      <item>cgilua.handlelp</item>\n      <item>cgilua.header</item>\n      <item>cgilua.htmlheader</item>\n      <item>cgilua.lp.compile</item>\n      <item>cgilua.lp.include</item>\n      <item>cgilua.lp.setcompatmode</item>\n      <item>cgilua.lp.setoutfunc</item>\n      <item>cgilua.lp.translate</item>\n      <item>cgilua.mkabsoluteurl</item>\n      <item>cgilua.mkurlpath</item>\n      <item>cgilua.pack</item>\n      <item>cgilua.put</item>\n      <item>cgilua.redirect</item>\n      <item>cgilua.script_file</item>\n      <item>cgilua.script_path</item>\n      <item>cgilua.script_pdir</item>\n      <item>cgilua.script_vdir</item>\n      <item>cgilua.script_vpath</item>\n      <item>cgilua.serialize</item>\n      <item>cgilua.servervariable</item>\n      <item>cgilua.session.close</item>\n      <item>cgilua.session.data</item>\n      <item>cgilua.session.delete</item>\n      <item>cgilua.session.load</item>\n      <item>cgilua.session.new</item>\n      <item>cgilua.session.open</item>\n      <item>cgilua.session.save</item>\n      <item>cgilua.session.setsessiondir</item>\n      <item>cgilua.session</item>\n      <item>cgilua.seterrorhandler</item>\n      <item>cgilua.seterroroutput</item>\n      <item>cgilua.setmaxfilesize</item>\n      <item>cgilua.setmaxinput</item>\n      <item>cgilua.setoutfunc</item>\n      <item>cgilua.splitpath</item>\n      <item>cgilua.urlcode.encodetable</item>\n      <item>cgilua.urlcode.escape</item>\n      <item>cgilua.urlcode.insertfield</item>\n      <item>cgilua.urlcode.parsequery</item>\n      <item>cgilua.urlcode.unescape</item>\n      <item>cgilua.urlpath</item>\n\n      <item>lfs</item>\n      <item>lfs.attributes</item>\n      <item>lfs.chdir</item>\n      <item>lfs.currentdir</item>\n      <item>lfs.dir</item>\n      <item>lfs.lock</item>\n      <item>lfs.mkdir</item>\n      <item>lfs.rmdir</item>\n      <item>lfs.touch</item>\n      <item>lfs.unlock</item>\n\n      <item>zip</item>\n      <item>zip.open</item>\n      <item>zip.openfile</item>\n\n      <!-- member function-->\n\n      <!-- String Manipulation -->\n      <item>byte</item>\n      <item>char</item>\n      <item>dump</item>\n      <item>find</item>\n      <item>format</item>\n      <item>gmatch</item>\n      <item>gsub</item>\n      <item>len</item>\n      <item>lower</item>\n      <item>match</item>\n      <item>pack</item>\n      <item>packsize</item>\n      <item>rep</item>\n      <item>reverse</item>\n      <item>sub</item>\n      <item>unpack</item>\n      <item>upper</item>\n\n      <!-- Table Manipulation -->\n      <item>concat</item>\n      <item>insert</item>\n      <item>move</item>\n      <item>pack</item>\n      <item>remove</item>\n      <item>sort</item>\n      <item>unpack</item>\n\n      <!-- luasql -->\n      <item>close</item>\n      <item>commit</item>\n      <item>connect</item>\n      <item>escape</item>\n      <item>execute</item>\n      <item>fetch</item>\n      <item>getcolnames</item>\n      <item>getcoltypes</item>\n      <item>getlastautoid</item>\n      <item>numrows</item>\n      <item>rollback</item>\n      <item>setautocommit</item>\n\n      <!-- luazip -->\n      <item>files</item>\n\n      <!-- File Manipulation -->\n      <item>close</item>\n      <item>flush</item>\n      <item>lines</item>\n      <item>read</item>\n      <item>seek</item>\n      <item>setvbuf</item>\n      <item>write</item>\n    </list>\n\n    <list name=\"metamethod\">\n      <item>__add</item>\n      <item>__sub</item>\n      <item>__mul</item>\n      <item>__div</item>\n      <item>__mod</item>\n      <item>__pow</item>\n      <item>__unm</item>\n      <item>__idiv</item>\n      <item>__band</item>\n      <item>__bor</item>\n      <item>__bxor</item>\n      <item>__bnot</item>\n      <item>__shl</item>\n      <item>__shr</item>\n      <item>__concat</item>\n      <item>__len</item>\n      <item>__eq</item>\n      <item>__lt</item>\n      <item>__le</item>\n      <item>__index</item>\n      <item>__newindex</item>\n      <item>__call</item>\n\n      <item>__tostring</item>\n      <item>__pairs</item>\n      <!-- setmetatable -->\n      <item>__metatable</item>\n      <!-- Garbage collector -->\n      <item>__gc</item>\n      <!-- Weak table -->\n      <item>__mode</item>\n    </list>\n\n    <list name=\"deprecated\">\n      <item>_ALERT</item>\n      <item>_ERRORMESSAGE</item>\n      <item>_LOADED</item>\n      <item>__ipairs</item>\n      <item>foreach</item>\n      <item>foreachi</item>\n      <item>loadstring</item>\n      <item>math.atan2</item>\n      <item>math.cosh</item>\n      <item>math.frexp</item>\n      <item>math.ldexp</item>\n      <item>math.log10</item>\n      <item>math.mod</item>\n      <item>math.pow</item>\n      <item>math.sinh</item>\n      <item>math.tanh</item>\n      <item>string.gfind</item>\n      <item>table.foreach</item>\n      <item>table.foreachi</item>\n      <item>table.getn</item>\n      <item>table.setn</item>\n    </list>\n\n    <contexts>\n      <context name=\"Shebang\"       attribute=\"Comment\" lineEndContext=\"Normal\" lineEmptyContext=\"Normal\" fallthrough=\"true\" fallthroughContext=\"Normal\">\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"#\" char1=\"!\" column=\"0\"/>\n      </context>\n\n      <context name=\"Comment\"       attribute=\"Comment\"     lineEndContext=\"#pop\">\n      </context>\n\n      <context name=\"Normal\"        attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <keyword      attribute=\"Deprecated\" context=\"#stay\"       String=\"deprecated\" />\n        <IncludeRules context=\"##DoxygenLua\" />\n\n        <RegExpr      attribute=\"RawStrings\" context=\"String_block\"  String=\"\\[(=*)\\[\" dynamic=\"true\" />\n        <DetectChar   attribute=\"Strings\"  context=\"String_single\" char=\"'\"/>\n        <DetectChar   attribute=\"Strings\"  context=\"String_double\" char=\"&quot;\"/>\n        <keyword      attribute=\"BFunc\"    context=\"#stay\"         String=\"basefunc\"/>\n        <keyword      attribute=\"Metamethod\" context=\"#stay\"       String=\"metamethod\"/>\n        <keyword      attribute=\"BVar\"     context=\"#stay\"         String=\"basevar\"/>\n\n        <WordDetect   attribute=\"Keyword\"  context=\"Function\" beginRegion=\"chunk\" String=\"function\" />\n        <keyword      attribute=\"Keyword\"  context=\"#stay\" String=\"keywords\" />\n        <keyword      attribute=\"Control\"  context=\"StartControl\" beginRegion=\"chunk\" String=\"startcontrol\" />\n        <keyword      attribute=\"Control\"  context=\"#stay\" String=\"control\" />\n\n        <DetectChar   attribute=\"Symbols\"  context=\"#stay\" beginRegion=\"table\" char=\"{\" />\n        <DetectChar   attribute=\"Symbols\"  context=\"#stay\" endRegion=\"table\"   char=\"}\" />\n\n        <RegExpr      attribute=\"Numbers\"  context=\"#stay\" String=\"(?:0[xX](?:\\.&HEX;+|&HEX;+\\.?&HEX;*)(?:[pP][-+]?\\d*)?|(?:\\.\\d+|\\d+\\.?\\d*)(?:[eE][-+]?\\d*)?)\"/>\n\n        <RegExpr      attribute=\"Normal Text\" context=\"#stay\" String=\"\\b[a-zA-Z_][a-zA-Z0-9_]*(?=\\s*([({'&quot;]|\\[\\[|\\[=))\" />\n        <RegExpr      attribute=\"Constant\" context=\"#stay\" String=\"\\b[A-Z_][A-Z0-9_]*\\b\" />\n        <RegExpr      attribute=\"Variable\" context=\"#stay\" String=\"\\b[a-zA-Z_][a-zA-Z0-9_]*\\b\" />\n\n        <Detect2Chars attribute=\"Error\"    context=\"#stay\" char=\"!\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Error\"    context=\"#stay\" char=\"-\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Error\"    context=\"#stay\" char=\"+\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Error\"    context=\"#stay\" char=\"+\" char1=\"+\"/>\n        <Detect2Chars attribute=\"Error\"    context=\"#stay\" char=\".\" char1=\"=\"/>\n        <AnyChar      attribute=\"Symbols\"  context=\"#stay\" String=\":[]().,=~+-*/%&amp;|^&gt;&lt;#;\" />\n      </context>\n\n      <context name=\"StartControl\" attribute=\"Normal Text\"  lineEndContext=\"#stay\">\n        <keyword      attribute=\"Control\"  context=\"#stay\" endRegion=\"chunk\"   beginRegion=\"chunk\" String=\"elsecontrol\" />\n        <keyword      attribute=\"Control\"  context=\"#pop\"  endRegion=\"chunk\"   String=\"endcontrol\" />\n        <IncludeRules context=\"Normal\" />\n      </context>\n\n      <context name=\"Function\" attribute=\"Normal Text\"      lineEndContext=\"#stay\">\n        <WordDetect   attribute=\"Keyword\"  context=\"#pop\"  endRegion=\"chunk\"   String=\"end\" />\n        <IncludeRules context=\"Normal\" />\n      </context>\n\n      <context name=\"String_single\" attribute=\"Strings\"     lineEndContext=\"Error\">\n        <DetectChar   attribute=\"Strings\"  context=\"Special_char\"  char=\"\\\" lookAhead=\"true\"/>\n        <DetectChar   attribute=\"Strings\"  context=\"#pop\"  char=\"'\"/>\n      </context>\n\n      <context name=\"String_double\" attribute=\"Strings\"     lineEndContext=\"Error\">\n        <DetectChar   attribute=\"Strings\"  context=\"Special_char\"  char=\"\\\" lookAhead=\"true\"/>\n        <DetectChar   attribute=\"Strings\"  context=\"#pop\"  char=\"&quot;\"/>\n      </context>\n\n      <context name=\"Special_char\"  attribute=\"Error\"       lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Special Char\" context=\"#pop\" />\n        <Detect2Chars attribute=\"Special Char\" context=\"Special_char_\\z\" char=\"\\\" char1=\"z\" lookAhead=\"true\"/>\n        <RegExpr      attribute=\"Special Char\" context=\"#pop\" String=\"\\\\(?:[abfnrtv'&quot;\\\\\\[\\]]|x&HEX;&HEX;|\\d{1,3}|u\\{&HEX;{1,6}\\})\"/>\n        <DetectChar   attribute=\"Error\"        context=\"#pop\" char=\"\\\"/>\n      </context>\n\n      <context name=\"Special_char_\\z\" attribute=\"Special Char\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Special Char\" context=\"#pop#pop\" char=\"z\"/>\n        <DetectChar   attribute=\"Special Char\" context=\"#pop#pop\" char=\"z\"/>\n      </context>\n\n      <context name=\"String_block\"  attribute=\"RawStrings\"  lineEndContext=\"#stay\" dynamic=\"true\">\n        <StringDetect attribute=\"RawStrings\"    context=\"#pop\"  String=\"]%1]\" dynamic=\"true\" />\n      </context>\n\n      <context name=\"Error\"         attribute=\"Error\"       lineEndContext=\"#stay\">\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"     defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Metamethod\"      defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n      <itemData name=\"BFunc\"           defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"BVar\"            defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\"         defStyleNum=\"dsComment\"/>\n      <itemData name=\"Constant\"        defStyleNum=\"dsConstant\" spellChecking=\"false\"/>\n      <itemData name=\"Control\"         defStyleNum=\"dsControlFlow\" color=\"#A1A100\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" spellChecking=\"false\"/>\n      <itemData name=\"Error\"           defStyleNum=\"dsError\" spellChecking=\"false\"/>\n      <itemData name=\"Deprecated\"      defStyleNum=\"dsError\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"         defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Numbers\"         defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Special Char\"    defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n      <itemData name=\"Strings\"         defStyleNum=\"dsString\"/>\n      <itemData name=\"RawStrings\"      defStyleNum=\"dsVerbatimString\"/>\n      <itemData name=\"Symbols\"         defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Variable\"        defStyleNum=\"dsKeyword\" color=\"#5555FF\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n      <comment name=\"multiLine\" start=\"--[[\" end=\"]]\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\".\" additionalDeliminator=\"'&quot;\"/>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/m3u.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!-- Changelog:\n\nv1.2: (kde4)\n- mimetype set to audio/x-mpegurl (fdo standard)\n\nv1.1:\n- mimetype korrigiert zu \"audio/mpegurl\"\n- Syntax verbessert\n\nv1.0:\n-first Release\n-->\n\n<language name=\"M3U\" section=\"Other\" extensions=\"*.m3u\" mimetype=\"audio/x-mpegurl\" version=\"2\" kateversion=\"2.4\" author=\"Jan Janssen (medhefgo@web.de)\" license=\"LGPL\" >\n\n<highlighting>\n<contexts>\n <context name=\"M3U\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n  <StringDetect attribute=\"M3USpec\" context=\"#pop\" String=\"#EXTM3U\" column=\"0\" />\n  <StringDetect attribute=\"EXTINF\" context=\"FindEXTINF\" String=\"#EXTINF\" column=\"0\" />\n  <RegExpr attribute=\"Comment\" String=\"#.*$\" firstNonSpace=\"true\" />\n </context>\n\n <context name=\"FindEXTINF\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n  <RegExpr attribute=\"Lenght\" String=\":\\d+\" />\n  <RegExpr attribute=\"Descr\" context=\"#pop\" String=\",.*$\" />\n </context>\n</contexts>\n\n<itemDatas>\n <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n <itemData name=\"M3USpec\" defStyleNum=\"dsKeyword\"/>\n <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\n <itemData name=\"EXTINF\" defStyleNum=\"dsOthers\" />\n <itemData name=\"Lenght\" defStyleNum=\"dsDecVal\" />\n <itemData name=\"Descr\" defStyleNum=\"dsString\" />\n</itemDatas>\n</highlighting>\n\n\n<general>\n <comments>\n  <comment name=\"singleLine\" start=\"#\" />\n </comments>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/m4.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\n  GNU M4 syntax highlightning.\n  Corresponds to GNU M4 version 1.4.16.\n\n  For KatePart (Kate, KWrite etc) copy this file to\n    ~/.kde/share/apps/katepart/syntax/\n\n  For Qt Creator copy this file to\n    ~/.config/Nokia/qtcreator/generic-highlighter/\n\n\n  Copyright (c) 2011, Cybernetica AS ( http://www.cyber.ee/ )\n  All rights reserved.\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n      * Redistributions of source code must retain the above copyright\n        notice, this list of conditions and the following disclaimer.\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      * Neither the name of Cybernetica AS nor the names of its contributors\n        may be used to endorse or promote products derived from this software\n        without specific prior written permission.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  DISCLAIMED. IN NO EVENT SHALL  Cybernetica AS  BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n-->\n<language name=\"GNU M4\" version=\"2\" section=\"Sources\" kateversion=\"3.0\" extensions=\"*.m4;\" author=\"Jaak Ristioja\" license=\"New BSD License\">\n  <highlighting>\n    <list name=\"optbuiltins\">\n      <item>__gnu__</item>\n      <item>__os2__</item>\n      <item>os2</item>\n      <item>__unix__</item>\n      <item>unix</item>\n      <item>__windows__</item>\n      <item>windows</item>\n    </list>\n    <list name=\"m4_optbuiltins\">\n      <item>m4___gnu__</item>\n      <item>m4___os2__</item>\n      <item>m4_os2</item>\n      <item>m4___unix__</item>\n      <item>m4_unix</item>\n      <item>m4___windows__</item>\n      <item>m4_windows</item>\n    </list>\n    <list name=\"builtins\">\n      <item>__file__</item>\n      <item>__line__</item>\n      <item>__program__</item>\n      <item>builtin</item>\n      <item>changecom</item>\n      <item>changequote</item>\n      <item>changeword</item>\n      <item>debugfile</item>\n      <item>debugmode</item>\n      <item>decr</item>\n      <item>define</item>\n      <item>defn</item>\n      <item>divert</item>\n      <item>divnum</item>\n      <item>dnl</item>\n      <item>dumpdef</item>\n      <item>errprint</item>\n      <item>esyscmd</item>\n      <item>eval</item>\n      <item>format</item>\n      <item>ifdef</item>\n      <item>ifelse</item>\n      <item>include</item>\n      <item>incr</item>\n      <item>index</item>\n      <item>indir</item>\n      <item>len</item>\n      <item>m4exit</item>\n      <item>m4wrap</item>\n      <item>maketemp</item>\n      <item>mkstemp</item>\n      <item>patsubst</item>\n      <item>popdef</item>\n      <item>pushdef</item>\n      <item>regexp</item>\n      <item>shift</item>\n      <item>sinclude</item>\n      <item>substr</item>\n      <item>syscmd</item>\n      <item>sysval</item>\n      <item>traceon</item>\n      <item>traceoff</item>\n      <item>translit</item>\n      <item>undefine</item>\n      <item>undivert</item>\n    </list>\n    <list name=\"m4_builtins\">\n      <item>m4___file__</item>\n      <item>m4___line__</item>\n      <item>m4___program__</item>\n      <item>m4_builtin</item>\n      <item>m4_changecom</item>\n      <item>m4_changequote</item>\n      <item>m4_changeword</item>\n      <item>m4_debugfile</item>\n      <item>m4_debugmode</item>\n      <item>m4_decr</item>\n      <item>m4_define</item>\n      <item>m4_defn</item>\n      <item>m4_divert</item>\n      <item>m4_divnum</item>\n      <item>m4_dnl</item>\n      <item>m4_dumpdef</item>\n      <item>m4_errprint</item>\n      <item>m4_esyscmd</item>\n      <item>m4_eval</item>\n      <item>m4_format</item>\n      <item>m4_ifdef</item>\n      <item>m4_ifelse</item>\n      <item>m4_include</item>\n      <item>m4_incr</item>\n      <item>m4_index</item>\n      <item>m4_indir</item>\n      <item>m4_len</item>\n      <item>m4_m4exit</item>\n      <item>m4_m4wrap</item>\n      <item>m4_maketemp</item>\n      <item>m4_mkstemp</item>\n      <item>m4_patsubst</item>\n      <item>m4_popdef</item>\n      <item>m4_pushdef</item>\n      <item>m4_regexp</item>\n      <item>m4_shift</item>\n      <item>m4_sinclude</item>\n      <item>m4_substr</item>\n      <item>m4_syscmd</item>\n      <item>m4_sysval</item>\n      <item>m4_traceon</item>\n      <item>m4_traceoff</item>\n      <item>m4_translit</item>\n      <item>m4_undefine</item>\n      <item>m4_undivert</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\">\n        <keyword attribute=\"Builtins\" String=\"builtins\" context=\"#stay\"/>\n        <keyword attribute=\"Builtins (prefixed with m4_)\" String=\"m4_builtins\" context=\"#stay\"/>\n        <keyword attribute=\"Optional builtins\" String=\"optbuiltins\" context=\"#stay\"/>\n        <keyword attribute=\"Optional builtins (prefixed with m4_)\" String=\"m4_optbuiltins\" context=\"#stay\"/>\n        <RegExpr attribute=\"Normal Text\" String=\"[a-zA-Z_]\\w+\" context=\"#stay\"/>\n        <RegExpr attribute=\"Special arguments to macros\" String=\"\\$([1-9]\\d*|0|\\#|\\*|\\@|\\{([1-9]\\d*|0)\\})\" context=\"#stay\"/>\n        <RegExpr attribute=\"Int\" String=\"([1-9]\\d*|0|0x[0-9abcdefABCDEF]+)\" context=\"#stay\"/>\n        <RegExpr attribute=\"Comment\" String=\"#.*$\" context=\"#stay\"/>\n        <DetectChar attribute=\"Commas\" char=\",\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operators\" char=\"(\" context=\"inparenthesis\" beginRegion=\"parenthesis\"/>\n        <DetectChar attribute=\"Operators\" char=\")\" context=\"#pop\" endRegion=\"parenthesis\"/>\n        <RegExpr attribute=\"Operators\" String=\"[+*/%\\|=\\!&lt;&gt;!^&amp;~-]\" context=\"#stay\"/>\n      </context>\n      <context name=\"inparenthesis\" attribute=\"Normal Text\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n        <IncludeRules context=\"Normal Text\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Builtins\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Builtins (prefixed with m4_)\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Optional builtins\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Optional builtins (prefixed with m4_)\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Special arguments to macros\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Int\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Commas\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Operators\" defStyleNum=\"dsChar\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <folding indentationsensitive=\"1\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" position=\"afterwhitespace\"/>\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mab.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"MAB-DB\" version=\"2\" kateversion=\"2.4\" extensions=\"*.mab;*.MAB;*.Mab\" section=\"Markup\" mimetype=\"text/x-mab\" casesensitive=\"0\">\n  <highlighting>\n    <contexts>\n      <context attribute=\"Normal Text\" name=\"Section\" lineEndContext=\"#stay\" >\n        <RegExpr String=\"\\*I [a-zA-Z0-9]* \" attribute=\"Mab I Field\"  context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\*\\*\\*\\**E.*\" attribute=\"Header Piece\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\*\\*\\*\\**M.*\" attribute=\"Header Medium\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\*\\*\\*\\* BIBLIOTHECA.*\" attribute=\"Database Header\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\*M [a-zA-Z0-9]* \" attribute=\"Mab M Field\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\*X TYP .*\" attribute=\"Mab Comment Description\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\*X DESC .*\" attribute=\"Mab Comment Type\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\*X .*\" attribute=\"Comment\" context=\"#stay\" column=\"0\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" \tdefStyleNum=\"dsNormal\" \tcolor=\"#FF0022\"\tselColor=\"#ffffff\" italic=\"0\" bold=\"1\" />\n      <itemData name=\"Header Piece\"  \tdefStyleNum=\"dsKeyword\" color=\"#993322\" selColor=\"#ffffff\" italic=\"0\" bold=\"1\" />\n      <itemData name=\"Header Medium\"  \tdefStyleNum=\"dsKeyword\" color=\"#339922\" selColor=\"#ffffff\" italic=\"0\" bold=\"1\" />\n      <itemData name=\"Database Header\" \tdefStyleNum=\"dsKeyword\" color=\"#FF3322\" selColor=\"#ffffff\" italic=\"0\" bold=\"1\" />\n      <itemData name=\"Mab M Field\" \t\tdefStyleNum=\"dsKeyword\" color=\"#003366\" selColor=\"#ffffff\" italic=\"0\" bold=\"1\" />\n      <itemData name=\"Mab I Field\" \t\tdefStyleNum=\"dsKeyword\" color=\"#330066\" selColor=\"#ffffff\" italic=\"0\" bold=\"1\" />\n      <itemData name=\"Mab Comment Description\"  \tdefStyleNum=\"dsComment\" color=\"#3333FF\" selColor=\"#ffffff\" italic=\"1\" bold=\"1\" />\n      <itemData name=\"Mab Comment Type\"  \tdefStyleNum=\"dsComment\" color=\"#BB3333\" selColor=\"#ffffff\" italic=\"1\" bold=\"1\" />\n      <itemData name=\"Comment\"  \tdefStyleNum=\"dsComment\" color=\"#999999\" selColor=\"#ffffff\" italic=\"1\" bold=\"1\" />\n    </itemDatas>\n  </highlighting>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/magma.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Magma\" section=\"Scientific\"\n          version=\"2\" kateversion=\"2.4\"\n          mimetype=\"text/x-magma\"\n          indenter=\"cstyle\"\n          extensions=\"*.m;*.mag\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>and</item>\n\t\t\t<item>assert</item>\n\t\t\t<item>assigned</item>\n\t\t\t<item>attributes</item>\n\t\t\t<item>break</item>\n\t\t\t<item>by</item>\n\t\t\t<item>case</item>\n\t\t\t<item>cat</item>\n\t\t\t<item>cmpeq</item>\n\t\t\t<item>cmpne</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>declare</item>\n\t\t\t<item>delete</item>\n\t\t\t<item>diff</item>\n\t\t\t<item>div</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>elif</item>\n\t\t\t<item>end</item>\n\t\t\t<item>eq</item>\n\t\t\t<item>error</item>\n\t\t\t<item>exists</item>\n\t\t\t<item>false</item>\n\t\t\t<item>for</item>\n\t\t\t<item>forall</item>\n\t\t\t<item>forward</item>\n\t\t\t<item>freeze</item>\n\t\t\t<item>function</item>\n\t\t\t<item>ge</item>\n\t\t\t<item>gt</item>\n\t\t\t<item>if</item>\n\t\t\t<item>import</item>\n\t\t\t<item>in</item>\n\t\t\t<item>intrinsic</item>\n\t\t\t<item>join</item>\n\t\t\t<item>le</item>\n\t\t\t<item>lt</item>\n\t\t\t<item>max</item>\n\t\t\t<item>meet</item>\n\t\t\t<item>min</item>\n\t\t\t<item>mod</item>\n\t\t\t<item>ne</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t\t<item>procedure</item>\n\t\t\t<item>quit</item>\n\t\t\t<item>repeat</item>\n\t\t\t<item>require</item>\n\t\t\t<item>requirege</item>\n\t\t\t<item>requirerange</item>\n\t\t\t<item>return</item>\n\t\t\t<item>sdiff</item>\n\t\t\t<item>select</item>\n\t\t\t<item>then</item>\n\t\t\t<item>time</item>\n\t\t\t<item>to</item>\n\t\t\t<item>true</item>\n\t\t\t<item>until</item>\n\t\t\t<item>verbose</item>\n\t\t\t<item>vprint</item>\n\t\t\t<item>vtime</item>\n\t\t\t<item>when</item>\n\t\t\t<item>while</item>\n\t\t\t<item>xor</item>\n\t\t</list>\n\t\t<list name=\"types\">\n\t\t\t<item>Booleans</item>\n\t\t\t<item>EllipticCurve</item>\n\t\t\t<item>ExtensionField</item>\n\t\t\t<item>FiniteField</item>\n\t\t\t<item>GF</item>\n\t\t\t<item>HyperellipticCurve</item>\n\t\t\t<item>Integers</item>\n\t\t\t<item>Jacobian</item>\n\t\t\t<item>PolynomialRing</item>\n\t\t\t<item>Rationals</item>\n\t\t\t<item>RealField</item>\n\t\t</list>\n\t\t<list name=\"directives\">\n\t\t\t<item>AddAttribute</item>\n\t\t\t<item>AssignNames</item>\n\t\t\t<item>Attach</item>\n\t\t\t<item>AttachSpec</item>\n\t\t\t<item>CoveringStructure</item>\n\t\t\t<item>Cputime</item>\n\t\t\t<item>Detach</item>\n\t\t\t<item>DetachSpec</item>\n\t\t\t<item>ElementType</item>\n\t\t\t<item>ExistsCoveringStructure</item>\n\t\t\t<item>ExtendedType</item>\n\t\t\t<item>GetAttributes</item>\n\t\t\t<item>GetSeed</item>\n\t\t\t<item>ISA</item>\n\t\t\t<item>IsCoercible</item>\n\t\t\t<item>IsIntrinsic</item>\n\t\t\t<item>ListAttributes</item>\n\t\t\t<item>MakeType</item>\n\t\t\t<item>Random</item>\n\t\t\t<item>Realtime</item>\n\t\t\t<item>SetSeed</item>\n\t\t\t<item>Type</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(function|procedure|if|elif|else|for|repeat|while|case)(?=(\\{[^}]*(\\}|$)|\\(\\*.*(\\*\\)|$))*([\\s]|$|//))\" insensitive=\"false\" beginRegion=\"Region1\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(end|elif|else)(?=((\\{[^}]*(\\}|$)|\\(\\*.*(\\*\\)|$))*)([.;\\s]|$)|//|$)\" insensitive=\"false\" endRegion=\"Region1\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t\t<keyword attribute=\"Directive\" context=\"#stay\" String=\"directives\"/>\n\t\t\t\t<keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n\t\t\t\t<Float attribute=\"Number\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Number\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String1\" char=\"&quot;\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String2\" char=\"'\" />\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Comment1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Comment2\" char=\"/\" char1=\"*\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#pop\" name=\"String1\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#pop\" name=\"String2\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment1\" />\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment2\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\t\t\t<itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Type\"        defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Number\"      defStyleNum=\"dsDecVal\" />\n\t\t\t<itemData name=\"String\"      defStyleNum=\"dsString\" />\n\t\t\t<itemData name=\"Directive\"   defStyleNum=\"dsOthers\" />\n\t\t\t<itemData name=\"Comment\"     defStyleNum=\"dsComment\" />\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<keywords casesensitive=\"1\" />\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t\t</comments>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/makefile.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Makefile syntaxfile v0.9 by Per Wigren <wigren@home.se> -->\n<!-- Modified by Joseph Wenninger <jowenn@kde.org> -->\n<!-- Modified by Rui Santana <santana.rui@gmail.com> -->\n<!-- v2.0 by Andreas Nordal <andreas.nordal@gmail.com> -->\n<!-- small priority to allow for example Makefile.cpp to be detected as cpp file -->\n<!-- v2.1 by Alex Turbov <i.zaufi@gmail.com>\n     improve comments handling -->\n<!-- v4 by Alex Richardson <arichardson.kde@gmail.com>\n     added bmake support -->\n<language name=\"Makefile\" section=\"Other\"\n          version=\"7\" kateversion=\"3.4\"\n          extensions=\"GNUmakefile;Makefile;makefile;GNUmakefile.*;Makefile.*;makefile.*;*.mk\"\n          mimetype=\"text/x-makefile\" priority=\"11\"\n          author=\"Per Wigren (wigren@home.se)\" license=\"\">\n  <highlighting>\n    <list name = \"keywords\" >\n      <item>include</item>\n      <item>-include</item>\n      <item>define</item>\n      <item>endef</item>\n    </list>\n    <!-- https://www.gnu.org/software/make/manual/html_node/Conditional-Syntax.html -->\n    <list name=\"gmake_if_keywords\">\n      <item>if</item>\n      <item>ifeq</item>\n      <item>ifneq</item>\n      <item>ifdef</item>\n      <item>ifndef</item>\n    </list>\n    <list name=\"gmake_else_keywords\"><item>else</item></list>\n    <list name=\"gmake_endif_keywords\"><item>endif</item></list>\n    <!-- bmake statements: https://www.freebsd.org/cgi/man.cgi?make(1)#INCLUDE_STATEMENTS,_CONDITIONALS_AND_FOR_LOOPS -->\n    <list name=\"bmake_if_keywords\">\n      <item>.if</item>\n      <item>.ifdef</item>\n      <item>.ifndef</item>\n      <item>.ifmake</item>\n      <item>.ifnmake</item>\n    </list>\n    <list name=\"bmake_else_keywords\">\n      <item>.elif</item>\n      <item>.elifdef</item>\n      <item>.elifndef</item>\n      <item>.elifmake</item>\n      <item>.elifnmake</item>\n      <item>.else</item> <!-- TODO: anything following .else should be highlighted as an error -->\n    </list>\n    <list name=\"bmake_endif_keywords\"><item>.endif</item></list>\n\n    <list name=\"bmake_expressions\">\n      <item>defined</item>\n      <item>empty</item>\n      <item>exists</item>\n      <item>target</item>\n      <item>commands</item>\n    </list>\n\n    <list name=\"bmake_include_stmt\">\n      <item>.include</item>\n      <item>.-include</item>\n      <item>.sinclude</item>\n      <!-- For compat bmake also handles include but this is already highlighted. <item>include</item> -->\n    </list>\n    <list name=\"bmake_message_stmt\">\n      <item>.info</item>\n      <item>.warning</item>\n      <item>.error</item>\n    </list>\n    <!-- Use single element list here so that .for/.endfor also shows up in code completion -->\n    <list name=\"bmake_for_stmt\"><item>.for</item></list>\n    <list name=\"bmake_endfor_stmt\"><item>.endfor</item></list>\n\n    <!-- https://www.freebsd.org/cgi/man.cgi?make(1)#SPECIAL_TARGETS -->\n    <list name=\"bmake_special_targets\">\n      <item>.BEGIN</item>\n      <item>.DEFAULT</item>\n      <item>.END</item>\n      <item>.ERROR</item>\n      <item>.IGNORE</item>\n      <item>.INTERRUPT</item>\n      <item>.MAIN</item>\n      <item>.MAKEFLAGS</item>\n      <item>.NOPATH</item>\n      <item>.NOTPARALLEL</item>\n      <item>.NO_PARALLEL</item>\n      <item>.OBJDIR</item>\n      <item>.ORDER</item>\n      <item>.PATH</item>\n      <item>.PHONY</item>\n      <item>.PRECIOUS</item>\n      <item>.SHELL</item>\n      <item>.SILENT</item>\n      <item>.STALE</item>\n      <item>.SUFFIXES</item>\n    </list>\n    <!-- https://www.freebsd.org/cgi/man.cgi?make(1)#SPECIAL_SOURCES_(ATTRIBUTES) -->\n    <list name=\"bmake_special_sources\">\n      <item>.EXEC</item>\n      <item>.IGNORE</item>\n      <item>.MADE</item>\n      <item>.MAKE</item>\n      <item>.META</item>\n      <item>.NOMETA</item>\n      <item>.NOMETA_CMP</item>\n      <item>.NOPATH</item>\n      <item>.NOTMAIN</item>\n      <item>.OPTIONAL</item>\n      <item>.PHONY</item>\n      <item>.PRECIOUS</item>\n      <item>.RECURSIVE</item>\n      <item>.SILENT</item>\n      <item>.USE</item>\n      <item>.USEBEFORE</item>\n      <item>.WAIT</item>\n    </list>\n\n    <list name=\"bmake_other_stmts\">\n      <item>.unexport-env</item>\n      <item>.unexport</item>\n      <item>.undef</item>\n      <item>.export-env</item>\n      <item>.export</item>\n    </list>\n\n    <list name = \"functions\">\n      <item>call</item>\n      <item>subst</item>\n      <item>patsubst</item>\n      <item>strip</item>\n      <item>findstring</item>\n      <item>filter</item>\n      <item>filter-out</item>\n      <item>sort</item>\n      <item>word</item>\n      <item>wordlist</item>\n      <item>words</item>\n      <item>firstword</item>\n      <item>lastword</item>\n      <item>dir</item>\n      <item>notdir</item>\n      <item>suffix</item>\n      <item>basename</item>\n      <item>addsuffix</item>\n      <item>addprefix</item>\n      <item>join</item>\n      <item>wildcard</item>\n      <item>realpath</item>\n      <item>abspath</item>\n      <item>if</item>\n      <item>or</item>\n      <item>and</item>\n      <item>foreach</item>\n      <item>value</item>\n      <item>eval</item>\n      <item>origin</item>\n      <item>flavor</item>\n      <item>shell</item>\n      <item>error</item>\n      <item>warning</item>\n      <item>info</item>\n    </list>\n    <contexts>\n      <context name=\"normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <keyword attribute=\"ControlFlow\" String=\"bmake_if_keywords\" context=\"bmake_conditional\" beginRegion=\"bmake_if\" firstNonSpace=\"true\"/>\n        <!--TODO: trailing non-space after .else should be highlighted as an error -->\n        <keyword attribute=\"ControlFlow\" String=\"bmake_else_keywords\" context=\"bmake_conditional\" endRegion=\"bmake_if\" beginRegion=\"bmake_if\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"ControlFlow\" String=\"bmake_endif_keywords\" context=\"#stay\" endRegion=\"bmake_if\"/>\n\n        <keyword attribute=\"ControlFlow\" String=\"gmake_if_keywords\" context=\"#stay\" beginRegion=\"gmake_if\" firstNonSpace=\"true\"/>\n        <!--TODO: trailing non-space after .else should be highlighted as an error -->\n        <keyword attribute=\"ControlFlow\" String=\"gmake_else_keywords\" context=\"gmake_else\" endRegion=\"gmake_if\" beginRegion=\"gmake_if\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"ControlFlow\" String=\"gmake_endif_keywords\" context=\"#stay\" endRegion=\"gmake_if\"/>\n\n        <keyword attribute=\"Keyword\"  context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Keyword\"  context=\"bmake_other_stmts\" String=\"bmake_other_stmts\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Variable\" context=\"assign\" String=\"[^\\s+:?+]*\\s*(?=:=|=|\\+=|\\?=)\"/>\n        <keyword attribute=\"SpecialTarget\" context=\"bmake_special_target\" String=\"bmake_special_targets\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"SpecialTarget\" context=\"prereq\" String=\"\\.PATH\\.[^:]*:\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"Keyword\" context=\"bmake_include\" String=\"bmake_include_stmt\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"Keyword\" context=\"bmake_message\" String=\"bmake_message_stmt\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"Keyword\" context=\"bmake_for_loop\" String=\"bmake_for_stmt\" firstNonSpace=\"true\" beginRegion=\"for\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"bmake_endfor_stmt\" firstNonSpace=\"true\" endRegion=\"for\"/>\n\n        <RegExpr attribute=\"Section\"  context=\"prereq\" String=\"^\\.[^.][^:]*:\"/>\n        <RegExpr attribute=\"Target\"   context=\"prereq\" String=\"^[^:]*:\"/>\n        <DetectIdentifier/>\n        <DetectChar attribute=\"String\" context=\"string&quot;\" char=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"string'\" char=\"'\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"#\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <AnyChar attribute=\"Operator\" context=\"silent\" String=\"@-\" firstNonSpace=\"1\"/>\n      </context>\n\n      <context name=\"strings_and_vars\" attribute=\"Normal\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <DetectChar attribute=\"String\" context=\"string&quot;\" char=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"string'\" char=\"'\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context name=\"gmake_else\" attribute=\"Error\" lineEndContext=\"#pop\">\n        <DetectSpaces attribute=\"Normal\"/>\n        <keyword attribute=\"ControlFlow\" String=\"gmake_if_keywords\" context=\"#stay\"/>\n        <IncludeRules context=\"strings_and_vars\"/>\n      </context>\n\n      <context name=\"bmake_include\" attribute=\"Normal\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <RangeDetect char=\"&lt;\"  char1=\"&gt;\" context=\"#stay\" attribute=\"Include\" />\n        <RangeDetect char=\"&quot;\"  char1=\"&quot;\" context=\"#stay\" attribute=\"Include\" />\n      </context>\n\n\n      <context name=\"bmake_conditional\" attribute=\"Normal\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <IncludeRules context=\"strings_and_vars\"/>\n        <keyword attribute=\"Builtin\"  context=\"bmake_expression\" String=\"bmake_expressions\"/>\n        <Detect2Chars attribute=\"RealOperator\" context=\"#stay\" char=\"&amp;\" char1=\"&amp;\"/>\n        <Detect2Chars attribute=\"RealOperator\" context=\"#stay\" char=\"|\" char1=\"|\"/>\n        <Detect2Chars attribute=\"RealOperator\" context=\"#stay\" char=\"!\" char1=\"=\"/>\n        <Detect2Chars attribute=\"RealOperator\" context=\"#stay\" char=\"=\" char1=\"=\"/>\n        <DetectChar attribute=\"RealOperator\" context=\"#stay\" char=\"!\"/>\n        <HlCHex attribute=\"Number\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <DetectIdentifier attribute=\"Variable\" context=\"#stay\"/>\n        <LineContinue attribute=\"Operator\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"bmake_for_loop\" attribute=\"Variable\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <IncludeRules context=\"strings_and_vars\"/>\n        <WordDetect attribute=\"RealOperator\" context=\"#stay\" String=\"in\" />\n      </context>\n\n      <context name=\"bmake_other_stmts\" attribute=\"Variable\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <IncludeRules context=\"strings_and_vars\"/>\n      </context>\n\n      <context name=\"bmake_expression\" attribute=\"Variable\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <IncludeRules context=\"strings_and_vars\"/>\n        <DetectChar attribute=\"Normal\" context=\"#stay\" char=\"(\"/>\n        <DetectChar attribute=\"Normal\" context=\"#pop\" char=\")\"/>\n        <DetectIdentifier attribute=\"Variable\"/>\n      </context>\n\n      <context name=\"bmake_special_target\" attribute=\"Error\" lineEndContext=\"rule\">\n        <!-- anything but spaces before the : should be an error -->\n        <DetectSpaces attribute=\"Normal\" />\n        <DetectChar attribute=\"SpecialTarget\" context=\"#pop!prereq\" char=\":\"/>\n      </context>\n\n      <context name=\"bmake_message\" attribute=\"String\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n      </context>\n\n      <context name=\"prereq\" attribute=\"Prereq\" lineEndContext=\"rule\">\n        <DetectSpaces/>\n        <keyword attribute=\"SpecialPrereq\" context=\"#stay\" String=\"bmake_special_sources\"/>\n        <DetectIdentifier/>\n        <LineContinue attribute=\"Operator\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"#\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context name=\"rule\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Operator\" context=\"#stay\"/>\n        <!-- pop if there is a leading non-tab,\n        and in particular, mark leading spaces as errors -->\n        <RegExpr attribute=\"Error\" context=\"#pop#pop#pop\" String=\"^ +\" firstNonSpace=\"1\"/>\n        <RegExpr context=\"#pop#pop#pop\" String=\"^[^\\t]\" lookAhead=\"1\" firstNonSpace=\"1\"/>\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar attribute=\"String\" context=\"string&quot;\" char=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"string'\" char=\"'\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"#\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <AnyChar attribute=\"Operator\" context=\"silent\" String=\"@-\" firstNonSpace=\"1\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context name=\"silent\" attribute=\"Silent\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Operator\" context=\"#stay\"/>\n        <DetectSpaces/>\n        <DetectIdentifier/>\n        <DetectChar attribute=\"String\" context=\"string&quot;\" char=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"string'\" char=\"'\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"#\"/>\n        <Detect2Chars attribute=\"Special\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context name=\"string&quot;\" attribute=\"String\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Operator\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n      </context>\n\n      <context name=\"string'\" attribute=\"String\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n      </context>\n\n      <context name=\"assign\" attribute=\"Operator\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Operator\" context=\"value\" char=\"=\"/>\n      </context>\n\n      <context name=\"value\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <LineContinue attribute=\"Operator\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <RegExpr attribute=\"Special\" context=\"#pop#pop\" String=\"@[-_\\d\\w]*@\"/>\n        <DetectChar attribute=\"Operator\" char=\";\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"dollar\" attribute=\"Operator\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Operator\" context=\"call(\" char=\"(\"/>\n        <DetectChar attribute=\"Operator\" context=\"call{\" char=\"{\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop\" String=\".\"/>\n      </context>\n\n      <context name=\"call(\" attribute=\"Variable\" lineEndContext=\"#stay\" fallthroughContext=\"callVar(\" fallthrough=\"1\">\n        <keyword attribute=\"Keyword\" context=\"callFunc(\" String=\"functions\"/>\n      </context>\n\n      <context name=\"call{\" attribute=\"Variable\" lineEndContext=\"#stay\" fallthroughContext=\"callVar{\" fallthrough=\"1\">\n        <keyword attribute=\"Keyword\" context=\"callFunc{\" String=\"functions\"/>\n      </context>\n\n      <context name=\"callVar(\" attribute=\"Variable\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Operator\" char=\")\" context=\"#pop#pop#pop\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <DetectSpaces attribute=\"Error\" context=\"#stay\"/>\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"=#:\"/>\n      </context>\n\n      <context name=\"callVar{\" attribute=\"Variable\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Operator\" char=\"}\" context=\"#pop#pop#pop\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <DetectSpaces attribute=\"Error\" context=\"#stay\"/>\n        <!-- Handle bmake Variable modifiers: ${variable[:modifier[:...]]} -->\n        <Detect2Chars context=\"#stay\" char=\"\\\" char1=\":\"/>\n        <!-- other modifiers -->\n        <DetectChar attribute=\"RealOperator\" context=\"bmake_var_modifier\" char=\":\"/>\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"=#\"/>\n      </context>\n\n      <context name=\"bmake_var_modifier_arg\" attribute=\"VarModifier\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <Detect2Chars context=\"#stay\" char=\"\\\" char1=\"}\"/>\n        <DetectChar attribute=\"Operator\" char=\"}\" context=\"#pop#pop#pop#pop\"/>\n        <Detect2Chars context=\"#stay\" char=\"\\\" char1=\":\"/>\n        <DetectChar attribute=\"RealOperator\" context=\"#pop!bmake_var_modifier\" char=\":\"/>\n      </context>\n\n      <!-- TODO: once all modifiers are properly handled change fallthroughContext to \"expect}\" -->\n      <context name=\"bmake_var_modifier\" attribute=\"VarModifier\" lineEndContext=\"#pop\" fallthroughContext=\"#pop!bmake_var_modifier_arg\" fallthrough=\"true\">\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n\n                    <!--\n          TODO :?true_string:false_string\n          TODO :old_string=new_string This is the AT&T System V UNIX style variable substitution.\n          TODO :@temp@string@ This is the loop expansion mechanism from the OSF Development Environment (ODE) make.\n          TODO :!cmd! The output of running cmd is the value.\n          TODO :[range]\n        -->\n        <!--  Modifiers without arguments:-->\n        <!--\n          :E Replaces each word in the variable with its suffix.\n          :H Replaces each word in the variable with everything but the last component.\n          :O   Order every word in variable alphabetically.\n          :Q   Quotes every shell meta-character in the variable\n          :R   Replaces each word in the variable with everything but its suffix.\n          :T   Replaces each word in the variable with its last component.\n          :u   Remove adjacent duplicate words (like uniq(1)).\n          :L The name of the variable is the value.\n          :P The path of the node which has the same name as the variable is the value.\n        -->\n        <AnyChar    attribute=\"Builtin\" context=\"#pop!expect}\" String=\"EHOQRTuLP\"/>\n        <!-- :sh  If the variable is non-empty it is run as a command and the output becomes the new value. -->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!expect}\" char=\"s\" char1=\"h\"/>\n        <!-- :Ox  Randomize words in variable. -->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!expect}\" char=\"O\" char1=\"x\"/>\n        <!-- :tA  Attempt to convert variable to an absolute path using realpath(3),-->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!expect}\" char=\"t\" char1=\"A\"/>\n        <!-- :tl  Converts variable to lower-case letters.-->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!expect}\" char=\"t\" char1=\"L\"/>\n        <!--  :gmtime The value is a format string for strftime(3), using the current gmtime(3). -->\n        <StringDetect attribute=\"Builtin\" String=\"gmtime\" context=\"#pop!expect}\" />\n        <!-- :hash Compute a 32bit hash of the value and encode it as hex digits. -->\n        <StringDetect attribute=\"Builtin\" String=\"hash\" context=\"#pop!expect}\" />\n        <!-- :localtime The value is a format string for strftime(3), using the current localtime(3). -->\n        <StringDetect attribute=\"Builtin\" String=\"localtime\" context=\"#pop!expect}\" />\n        <!--Now the modifiers with arguments:-->\n        <!--\n          :Mpattern Select only those words that match pattern.\n          :Npattern This is identical to `:M', but selects all words which do not match pattern.\n          :Dnewval If the variable is defined newval is the value.\n          :Unewval If the variable is undefined newval is the value.\n        -->\n        <AnyChar    attribute=\"Builtin\" context=\"#pop!bmake_var_modifier_arg\" String=\"MNDU\"/>\n        <!-- TODO: add new context to highligh old_string and new_string differently\n          :S/old_string/new_string/[1gW]\n          :C/pattern/replacement/[1gW]\n        -->\n        <AnyChar attribute=\"Builtin\" context=\"#pop!bmake_var_modifier_arg\" String=\"SC\"/>\n        <!-- ::=str The variable is assigned the value str after substitution. -->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!bmake_var_modifier_arg\" char=\":\" char1=\"=\"/>\n        <!-- ::?=str As for ::= but only if the variable does not already have a value. -->\n        <StringDetect attribute=\"Builtin\" String=\":?=\" context=\"#pop!bmake_var_modifier_arg\" />\n        <!-- ::+=str Append str to the variable. -->\n        <StringDetect attribute=\"Builtin\" String=\":+=\" context=\"#pop!bmake_var_modifier_arg\" />\n        <!-- ::!=cmd Assign the output of cmd to the variable. -->\n        <StringDetect attribute=\"Builtin\" String=\":!=\" context=\"#pop!bmake_var_modifier_arg\" />\n        <!-- :tu  Converts variable to upper-case letters. -->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!bmake_var_modifier_arg\" char=\"t\" char1=\"u\"/>\n        <!-- :tW  Causes the value to be treated as a single word.  See also `:[*]'. -->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!bmake_var_modifier_arg\" char=\"t\" char1=\"W\"/>\n        <!-- :tw  Causes the value to be treated as a sequence of words delimited by white space.  See also `:[@]'.-->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!bmake_var_modifier_arg\" char=\"t\" char1=\"w\"/>\n        <!-- :tsc Words in the variable are normally separated by a space on\n          expansion.  This modifier sets the separator to the character c.  If\n          c is omitted, then no separator is used.  The common escapes\n          (including octal numeric codes), work as expected. -->\n        <Detect2Chars attribute=\"Builtin\" context=\"#pop!bmake_var_modifier_arg\" char=\"t\" char1=\"s\"/>\n\n        <IncludeRules context=\"bmake_var_modifier_arg\"/>\n      </context>\n\n      <context name=\"expect}\" attribute=\"Error\" lineEndContext=\"#pop#pop#pop#pop\">\n        <Detect2Chars context=\"#stay\" char=\"\\\" char1=\"}\"/>\n        <DetectChar attribute=\"Operator\" char=\"}\" context=\"#pop#pop#pop#pop\"/>\n      </context>\n\n      <context name=\"callFunc(\" attribute=\"FuncParam\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Operator\" char=\")\" context=\"#pop#pop#pop\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\",\"/>\n        <DetectChar attribute=\"String\" context=\"string'\" char=\"'\"/>\n      </context>\n\n      <context name=\"callFunc{\" attribute=\"FuncParam\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Operator\" char=\"}\" context=\"#pop#pop#pop\"/>\n        <DetectChar attribute=\"Operator\" context=\"dollar\" char=\"$\"/>\n        <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\",\"/>\n        <DetectChar attribute=\"String\" context=\"string'\" char=\"'\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\" />\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\"    defStyleNum=\"dsNormal\" spellChecking=\"0\"/>\n      <itemData name=\"Keyword\"   defStyleNum=\"dsKeyword\" spellChecking=\"0\"/>\n      <itemData name=\"Comment\"   defStyleNum=\"dsComment\"/>\n      <itemData name=\"String\"    defStyleNum=\"dsString\" spellChecking=\"0\"/>\n      <itemData name=\"Variable\"  defStyleNum=\"dsDataType\" spellChecking=\"0\"/>\n      <itemData name=\"Target\"    defStyleNum=\"dsDecVal\" spellChecking=\"0\"/>\n      <itemData name=\"Section\"   defStyleNum=\"dsOthers\" spellChecking=\"0\"/>\n      <itemData name=\"Prereq\"    defStyleNum=\"dsDataType\" spellChecking=\"0\"/>\n      <itemData name=\"FuncParam\" defStyleNum=\"dsString\" spellChecking=\"0\"/>\n      <itemData name=\"Operator\"  defStyleNum=\"dsChar\" spellChecking=\"0\"/>\n      <itemData name=\"Silent\"    defStyleNum=\"dsFunction\" spellChecking=\"0\"/>\n      <itemData name=\"Special\"   defStyleNum=\"dsFloat\" spellChecking=\"0\"/>\n      <itemData name=\"Error\"     defStyleNum=\"dsError\" spellChecking=\"0\"/>\n      <itemData name=\"Builtin\"   defStyleNum=\"dsBuiltIn\" spellChecking=\"0\"/>\n      <itemData name=\"Number\"    defStyleNum=\"dsDecVal\" spellChecking=\"0\"/>\n      <itemData name=\"Include\"   defStyleNum=\"dsImport\" spellChecking=\"0\"/>\n      <itemData name=\"ControlFlow\" defStyleNum=\"dsControlFlow\" spellChecking=\"0\"/>\n      <itemData name=\"VarModifier\" defStyleNum=\"dsSpecialString\" spellChecking=\"0\"/>\n      <itemData name=\"RealOperator\" defStyleNum=\"dsKeyword\" spellChecking=\"0\"/>\n      <itemData name=\"SpecialTarget\" defStyleNum=\"dsOthers\" spellChecking=\"0\" bold=\"1\"/>\n      <itemData name=\"SpecialPrereq\" defStyleNum=\"dsDataType\" spellChecking=\"0\" bold=\"1\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name = \"singleLine\" start = \"#\"/>\n    </comments>\n    <!-- '-' is not a deliminator in function filter-out -->\n    <keywords casesensitive=\"1\" weakDeliminator = \".-\"/>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mako.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY name    \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n]>\n<language name=\"Mako\" version=\"5\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.mako;*.mak\" author=\"Massimiliano Torromeo (massimiliano.torromeo@gmail.com)\" license=\"LGPL\">\n\n<highlighting>\n<list name=\"flow\">\n\t<item>endfor</item>\n\t<item>endif</item>\n</list>\n<contexts>\n\t<context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<IncludeRules context=\"FindMako\" />\n\t\t<IncludeRules context=\"FindHTML\" />\n\t</context>\n\n\t<context name=\"FindMako\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"MakoKeyword\" context=\"NoMakoHTML\" String=\"&lt;%text(?:\\s+[^&gt;]*)?&gt;\" beginRegion=\"nomako\" />\n\t\t<Detect2Chars attribute=\"MakoKeyword\" context=\"Mako\" char=\"&lt;\" char1=\"%\" />\n\t\t<RegExpr attribute=\"MakoKeyword\" context=\"Mako\" String=\"&lt;/?%\" />\n\t\t<RegExpr attribute=\"MakoKeyword\" context=\"MakoOneLiner\" String=\"^\\s*% \" />\n\t\t<Detect2Chars attribute=\"MakoKeyword\" context=\"MakoPrint\" char=\"$\" char1=\"{\" />\n\t</context>\n\n\t<context name=\"Mako\" attribute=\"Mako\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"MakoKeyword\" context=\"#pop\" String=\"[%/]?&gt;\" />\n\t\t<IncludeRules context=\"##Python\" includeAttrib=\"true\"/>\n\t</context>\n\n\t<context name=\"MakoOneLiner\" attribute=\"MakoKeyword\" lineEndContext=\"#pop\">\n\t\t<keyword attribute=\"Flow Control Keyword\" String=\"flow\" context=\"#stay\"/>\n\t\t<IncludeRules context=\"##Python\" includeAttrib=\"true\"/>\n\t</context>\n\n\t<context name=\"MakoPrint\" attribute=\"Mako\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"MakoKeyword\" context=\"#pop\" char=\"}\" />\n\t\t<IncludeRules context=\"##Python\" includeAttrib=\"true\"/>\n\t</context>\n\n\t<context name=\"NoMakoHTML\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<StringDetect attribute=\"MakoKeyword\" context=\"#pop\" String=\"&lt;/%text&gt;\" endRegion=\"nomako\" />\n\t\t<IncludeRules context=\"##HTML\" includeAttrib=\"true\"/>\n\t</context>\n\n\t<context name=\"NoMakoJS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<StringDetect attribute=\"MakoKeyword\" context=\"#pop\" String=\"&lt;/%text&gt;\" endRegion=\"nomako\" />\n\t\t<IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n\t</context>\n\n\t<context name=\"FindHTML\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectSpaces/>\n\t\t<DetectIdentifier/>\n\t\t<StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n\t\t<StringDetect attribute=\"CDATA\" context=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n\t\t<RegExpr attribute=\"Doctype\" context=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" beginRegion=\"doctype\" />\n\t\t<RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n\t\t<RegExpr attribute=\"Element\" context=\"CSS\" String=\"&lt;style\\b\" insensitive=\"true\" beginRegion=\"style\" />\n\t\t<RegExpr attribute=\"Element\" context=\"JS\" String=\"&lt;script\\b\" insensitive=\"true\" beginRegion=\"script\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;pre\\b\" insensitive=\"true\" beginRegion=\"pre\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;div\\b\" insensitive=\"true\" beginRegion=\"div\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;table\\b\" insensitive=\"true\" beginRegion=\"table\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;ul\\b\" insensitive=\"true\" beginRegion=\"ul\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;ol\\b\" insensitive=\"true\" beginRegion=\"ol\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;dl\\b\" insensitive=\"true\" beginRegion=\"dl\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;&name;\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/pre\\b\" insensitive=\"true\" endRegion=\"pre\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/div\\b\" insensitive=\"true\" endRegion=\"div\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/table\\b\" insensitive=\"true\" endRegion=\"table\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/ul\\b\" insensitive=\"true\" endRegion=\"ul\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/ol\\b\" insensitive=\"true\" endRegion=\"ol\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/dl\\b\" insensitive=\"true\" endRegion=\"dl\" />\n\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/&name;\" />\n\t\t<!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context=\"FindDTDRules\" />\n\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t</context>\n\n\t<context name=\"FindEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n\t\t<AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;&lt;\" />\n\t</context>\n\n\t<context name=\"FindPEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n\t\t<RegExpr attribute=\"PEntityRef\" context=\"#stay\" String=\"%&name;;\" />\n\t\t<AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;%\" />\n\t</context>\n\n\t<context name=\"FindAttributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<!--<RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"&name;\" column=\"0\"/>\n\t\t<RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"\\s+&name;\" />-->\n\t\t<RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"&name;\" />\n\t\t<DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\" />\n\t</context>\n\n\t<context name=\"FindDTDRules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"Doctype\" context=\"Doctype Markupdecl\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n\t</context>\n\n\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t<DetectSpaces/>\n\t\t<IncludeRules context=\"##Alerts\" />\n\t\t<DetectIdentifier/>\n\t\t<StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"-(-(?!-&gt;))+\" />\n\t</context>\n\n\t<context name=\"CDATA\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectSpaces/>\n\t\t<DetectIdentifier/>\n\t\t<StringDetect attribute=\"CDATA\" context=\"#pop\" String=\"]]&gt;\" endRegion=\"cdata\" />\n\t\t<StringDetect attribute=\"EntityRef\" context=\"#stay\" String=\"]]&amp;gt;\" />\n\t</context>\n\n\t<context name=\"PI\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n\t</context>\n\n\t<context name=\"Doctype\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" endRegion=\"doctype\" />\n\t\t<DetectChar attribute=\"Doctype\" context=\"Doctype Internal Subset\" char=\"[\" beginRegion=\"int_subset\" />\n\t</context>\n\n\t<context name=\"Doctype Internal Subset\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"]\" endRegion=\"int_subset\" />\n\t\t<IncludeRules context=\"FindDTDRules\" />\n\t\t<StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n\t\t<RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t</context>\n\n\t<context name=\"Doctype Markupdecl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n\t\t<DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n\t\t<DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n\t</context>\n\n\t<context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t</context>\n\n\t<context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t</context>\n\n\t<context name=\"El Open\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n\t\t<DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t<IncludeRules context=\"FindMako\" />\n\t</context>\n\n\t<context name=\"El Close\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t</context>\n\n\t<context name=\"El Close 2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Element\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t</context>\n\n\t<context name=\"El Close 3\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Element\" context=\"#pop#pop#pop#pop\" char=\"&gt;\" />\n\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t</context>\n\n\t<context name=\"CSS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"style\" />\n\t\t<DetectChar attribute=\"Element\" context=\"CSS content\" char=\"&gt;\" />\n\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t</context>\n\n\t<context name=\"CSS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/style\\b\" insensitive=\"true\" endRegion=\"style\" />\n\t\t<IncludeRules context=\"##CSS\" includeAttrib=\"true\"/>\n\t</context>\n\n\t<context name=\"JS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"script\" />\n\t\t<DetectChar attribute=\"Element\" context=\"JS content\" char=\"&gt;\" />\n\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t</context>\n\n\t<context name=\"JS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n\t\t<RegExpr attribute=\"Comment\" context=\"JS comment close\" String=\"//(?=.*&lt;/script\\b)\" insensitive=\"true\" />\n\t\t<RegExpr attribute=\"MakoKeyword\" context=\"NoMakoJS\" String=\"&lt;%text(?:\\s+[^&gt;]*)?&gt;\" beginRegion=\"nomako\" />\n\t\t<IncludeRules context=\"FindMako\" />\n\t\t<IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n\t</context>\n\n\t<context name=\"JS comment close\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t<RegExpr attribute=\"Element\" context=\"El Close 3\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n\t\t<IncludeRules context=\"##Alerts\" />\n\t</context>\n\n\t<context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"Value NQ\">\n\t\t<DetectChar attribute=\"Value\" context=\"Value DQ\" char=\"&quot;\" />\n\t\t<DetectChar attribute=\"Value\" context=\"Value SQ\" char=\"&apos;\" />\n\t\t<DetectSpaces />\n\t</context>\n\n\t<context name=\"Value NQ\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"/(?!&gt;)\" />\n\t\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"[^/&gt;&lt;&quot;&apos;\\s]\" />\n\t</context>\n\n\t<context name=\"Value DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&quot;\" />\n\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t<IncludeRules context=\"FindMako\" />\n\t</context>\n\n\t<context name=\"Value SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t<DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&apos;\" />\n\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t<IncludeRules context=\"FindMako\" />\n\t</context>\n\n</contexts>\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n  <itemData name=\"CDATA\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n  <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" />\n  <itemData name=\"Element\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Flow Control Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n  <itemData name=\"Attribute\" defStyleNum=\"dsOthers\" />\n  <itemData name=\"Value\" defStyleNum=\"dsString\" />\n  <itemData name=\"EntityRef\" defStyleNum=\"dsDecVal\" />\n  <itemData name=\"PEntityRef\" defStyleNum=\"dsDecVal\" />\n  <itemData name=\"Error\" defStyleNum=\"dsError\" />\n  <itemData name=\"Mako\" defStyleNum=\"dsDataType\" />\n  <itemData name=\"MakoKeyword\" defStyleNum=\"dsDataType\" bold=\"1\" />\n</itemDatas>\n\n</highlighting>\n<general>\n  <comments>\n    <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n    <comment name=\"multiLine\" start=\"&lt;%doc&gt;\" end=\"&lt;/%doc&gt;\" />\n    <comment name=\"singleLine\" start=\"##\" position=\"afterwhitespace\"/>\n  </comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mandoc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Troff Mandoc\" section=\"Markup\" version=\"2\" kateversion=\"2.4\" extensions=\"*.1;*.2;*.3;*.4;*.5;*.6;*.7;*.8;*.1m;*.3x;*.tmac\" mimetype=\"\" author=\"Matthew Woehlke (mw_triad@users.sourceforge.net)\" license=\"GPL\">\n\n  <highlighting>\n\n    <list name=\"headings\">\n      <item>SH</item>\n      <item>SS</item>\n      <item>TH</item>\n    </list>\n\n    <list name=\"paragraph\">\n      <item>HP</item>\n      <item>IP</item>\n      <item>LP</item>\n      <item>P</item>\n      <item>PD</item>\n      <item>PP</item>\n      <item>RE</item>\n      <item>RS</item>\n      <item>TP</item>\n    </list>\n\n    <list name=\"formatting\">\n      <item>B</item>\n      <item>BI</item>\n      <item>BR</item>\n      <item>I</item>\n      <item>IB</item>\n      <item>IR</item>\n      <item>RB</item>\n      <item>RI</item>\n      <item>SM</item>\n      <item>SB</item>\n    </list>\n\n    <list name=\"others\">\n      <item>DT</item>\n    </list>\n\n    <contexts>\n\n      <!-- root context -->\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"DetectComments##Roff\"/>\n        <DetectChar attribute=\"Macros\" context=\"DetectDirective\" char=\".\" column=\"0\"/>\n        <IncludeRules context=\"DetectOthers##Roff\"/>\n      </context>\n\n      <!-- directive start -->\n      <context name=\"DetectDirective\" attribute=\"Macros\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Headings\" context=\"Directive\" String=\"headings\"/>\n        <keyword attribute=\"Paragraphs\" context=\"Directive\" String=\"paragraph\"/>\n        <keyword attribute=\"Formatting\" context=\"Directive\" String=\"formatting\"/>\n        <keyword attribute=\"Other Macros\" context=\"Directive\" String=\"others\"/>\n        <IncludeRules context=\"DetectDirective##Roff\"/>\n      </context>\n\n      <context name=\"Directive\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"Directive##Roff\"/>\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Macros\"         defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Headings\"       defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Paragraphs\"     defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Formatting\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Other Macros\"   defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Identifier\"     defStyleNum=\"dsString\"/>\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n\n    <comments>\n      <comment name=\"singleLine\" start=\".\\&quot;\" />\n    </comments>\n\n    <keywords casesensitive=\"1\"/>\n\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/markdown.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n    Kate syntax highlight filter for Markdown/MultiMarkdown documents.\n\n    Copyright 2008 Darrin Yeager. http://www.dyeager.org/\n    Dual-Licensed under both GPL and BSD licenses.\n\n    Extended 2009 Claes Holmerson. http://github.com/claes/kate-markdown/\n    Extended 2019 Nibaldo González S. <nibgonz@gmail.com> (changes under MIT license).\n-->\n<!--\n    The [^\\s]{1} is in the regex to avoid interfering with bullet list which\n    starts \"* item\". Thus emphasis/strong MUST be formed like *words here*\n    with the asterisks next to the beginning of the first word.\n\n    Match space or newline, followed by \"*\", followed by one non-space,\n    followed by anything non-asterisk, followed by \"*\", followed by\n    space, end-of-sentence punctuation, or the end of the line.\n\n    TODO: We can be more specific and highlight text combinations in bold,\n          italic and strikethrough.\n          Example: **bold text and _italic and bold text_**\n                   __bold and ~~strikeout and bold~~__\n-->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!-- NOTE: To correctly detect bold, italic or strike out text, use minimal=\"true\" in RegExpr rules -->\n<!ENTITY contentregex_ast \"(?:(?:[^\\*\\s\\\\]|\\\\.)(?:[^\\\\]|\\\\.)*)?(?:[^\\*\\s\\\\]|\\\\\\S)\">\n<!ENTITY contentregex_und \"(?:(?:[^_\\s\\\\]|\\\\.)(?:[^\\\\]|\\\\.)*)?(?:[^_\\s\\\\]|\\\\\\S)\">\n<!-- strong + emphasis text -->\n<!ENTITY strongemphasisregex_ast \"\\*{3,5}&contentregex_ast;\\*{3}\">\n<!ENTITY strongemphasisregex_und \"\\b_{3,5}&contentregex_und;_{3}\">\n<!ENTITY strongemphasisregex_ast_und \"\\*{2,5}(?:(?:_|_{3}|_{5})&contentregex_und;_+|(?:_{2}|_{4})&contentregex_und;_)\\*{2}\">\n<!ENTITY strongemphasisregex_ast_und2 \"\\*_{2,5}&contentregex_und;_{2,5}\\*(?!\\*)\">\n<!ENTITY strongemphasisregex_und_ast \"\\b_{2,5}(?:(?:\\*|\\*{3}|\\*{5})&contentregex_ast;\\*+|(?:\\*{2}|\\*{4})&contentregex_ast;\\*)_{2}\">\n<!ENTITY strongemphasisregex_und_ast2 \"\\b_(?:\\*{2,5}&contentregex_ast;\\*{2,5}_{0,4}|_{0,4}\\*{2,5}&contentregex_ast;\\*{2,5})_\\b\">\n<!-- strong text -->\n<!ENTITY strongregex_ast \"\\*{2}(?:&contentregex_ast;\\*{2}|\\*{1,3}&contentregex_ast;\\*{2}(?!\\*))\">\n<!ENTITY strongregex_und \"\\b_{2}(?:&contentregex_und;_{2}|_{1,3}&contentregex_und;_{2}(?!_))\">\n<!-- emphasis text -->\n<!ENTITY emphasisregex_ast \"\\*(?:&contentregex_ast;\\*|\\*{1,4}&contentregex_ast;\\*(?!\\*))\">\n<!ENTITY emphasisregex_und \"\\b_(?:&contentregex_und;_+|_{1,4}&contentregex_und;_)\\b\">\n<!-- links -->\n<!ENTITY startlink \"(?:https?|ftp)\\://\">\n<!ENTITY link \"&startlink;[^&quot;&gt;\\s]+\">\n<!-- link in normal text -->\n<!ENTITY implicitlink \"\\b&startlink;[^&quot;&gt;\\s`\\)]*[^\\s!&quot;&apos;`\\(\\)\\*,\\.:;&lt;&gt;\\?~\\]\\}\\\\](?=[[:punct:]]*(?:[\\s\\)]|$))\">\n<!-- references: [name], [name][id], [name][id] \"title\", [name](https://example.com) -->\n<!ENTITY refchar \"(?:\\\\.|[^\\]\\\\])\">\n<!ENTITY refname \"(?:\\\\.|[^\\s\\[\\]\\\\])&refchar;*\">\n<!ENTITY reflinkid \"\\s*(?:&refname;)?\">\n<!ENTITY reflinkidregex \"(?:\\s?\\[&reflinkid;\\]|\\((?:\\\\.|[^\\(\\)\\\\])*\\))\">\n<!ENTITY reflinkregex \"\\[(?:(?=\\s*&refname;\\])|\\s+(?=\\]))\">\n<!-- target ref.: [id]: https://example.com \"Title\" -->\n<!ENTITY reflinktargetregex '\\[\\s*(?:&refname;|\\s)\\]\\:\\s+(?=\\S)'>\n<!-- footnote: [^name] -->\n<!ENTITY footnoteregex \"\\[\\^&refchar;+\\]\">\n<!-- image: ![title](https://example.com), ![title][id] -->\n<!ENTITY startinlineimage \"\\!\\[(?:\\\\.|[^\\[\\]\\\\])*\\]\\(\">\n<!ENTITY endinlineimage \"(?:\\\\.|[^\\(\\)\\\\])*\\)\">\n<!ENTITY inlineimageregex \"&startinlineimage;(?=&endinlineimage;)\">\n<!ENTITY refimageregex \"\\!\\[(?:\\\\.|[^\\[\\]\\\\])*\\]\\[&reflinkid;\\]\">\n<!-- autolink & email: <https://example.com>, <example@kde.org>, <mailto:example@kde.org> -->\n<!ENTITY autolinkregex '&lt;&link;&gt;'>\n<!ENTITY email \"[\\-\\.\\w]+\\@[\\-a-z0-9]+(?:\\.[\\-a-z0-9]+)*\\.[a-z]+\">\n<!ENTITY mailtolinkregex \"&lt;(?:mailto:)?(?=&email;&gt;)\">\n<!-- horizontal rule: avoid conflicts with strong-emphasis text, lists and code blocks -->\n<!ENTITY rulerregex \"\\s*(?:(?:\\*\\s*){3,}|(?:_\\s*){3,}|(?:\\-\\s*){3,})\\s*$\">\n<!-- two spaces at end of line generates linebreak -->\n<!ENTITY linebreakregex \"  $\">\n<!-- strikethrough text, pandoc style -->\n<!ENTITY strikeoutregex \"[~]{2}[^~](?:.*[^~])?[~]{2}\">\n<!-- start of fenced code block -->\n<!ENTITY fcode \"(`{3,}|~{3,})\">\n<!-- end of line & empty line -->\n<!ENTITY end \"\\s*$\">\n<!ENTITY emptyline \"^\\s*$\">\n<!-- indented code block -->\n<!ENTITY indentedcodeblock \"(?:\\s{4}|\\t).*$\">\n<!-- bullet of list -->\n<!ENTITY listbullet \"[\\*\\+\\-]\">\n<!-- metadata key & name of html tag -->\n<!ENTITY metadatakey \"[a-zA-Z0-9][\\w\\-\\s]*\\:\">\n<!ENTITY htmlname \"[A-Za-z_\\:][\\w\\.\\:\\-]*\">\n<!-- comment -->\n<!ENTITY startcomment \"&lt;!--\">\n<!ENTITY endcomment \"--&gt;\">\n<!ENTITY checkbox \"\\[[ x]\\](?=\\s)\">\n]>\n\n<language name=\"Markdown\" version=\"9\" kateversion=\"5.53\" section=\"Markup\" extensions=\"*.md;*.mmd;*.markdown\" priority=\"15\" author=\"Darrin Yeager, Claes Holmerson\" license=\"GPL,BSD\">\n  <highlighting>\n    <contexts>\n      <!-- Start of the Markdown document: find metadata or code block -->\n      <context name=\"Start Document\" attribute=\"Normal Text\" lineEndContext=\"Normal Text\" lineEmptyContext=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"Normal Text\">\n        <!-- Some titles: (Title|Author|Date|Copyright|Revision|CSS|LaTeX\\ XSLT|Categories|Tags|BaseName|Excerpt) -->\n        <!-- Metadata: Markdown format -->\n        <RegExpr attribute=\"Metadata\" context=\"metadata\" String=\"\\-{3}&end;\" column=\"0\" beginRegion=\"metadata\"/>\n        <!-- Metadata: MultiMarkdown format -->\n        <RegExpr attribute=\"Metadata Title\" context=\"metadata-mm-value\" String=\"^&metadatakey;(?=\\s|$)\" column=\"0\"/>\n        <!-- Code Block -->\n        <RegExpr attribute=\"Code\" context=\"find-code-block-start\" String=\"^&indentedcodeblock;\" column=\"0\"/>\n      </context>\n      <context name=\"metadata\" attribute=\"Metadata\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Metadata\" context=\"#pop!Normal Text\" String=\"---\" column=\"0\" endRegion=\"metadata\"/>\n        <StringDetect attribute=\"Metadata\" context=\"#pop!Normal Text\" String=\"...\" column=\"0\" endRegion=\"metadata\"/>\n        <RegExpr attribute=\"Metadata Title\" String=\"^&metadatakey;(?=\\s|$)\" column=\"0\"/>\n      </context>\n      <context name=\"metadata-mm-value\" attribute=\"Metadata\" lineEndContext=\"#pop!metadata-mm\"/>\n      <context name=\"metadata-mm\" attribute=\"Metadata\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop!Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!Normal Text\">\n        <!-- Find Metadata key or value -->\n        <RegExpr attribute=\"Metadata Title\" context=\"#pop!metadata-mm-value\" String=\"^&metadatakey;(?=\\s|$)\" column=\"0\"/>\n        <RegExpr attribute=\"Metadata\" context=\"#pop!metadata-mm-value\" String=\"^(?:\\s{4}|\\t)\" column=\"0\"/>\n      </context>\n      <context name=\"find-code-block-start\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Normal Text\">\n        <IncludeRules context=\"find-code-block\"/>\n      </context>\n\n      <!-- Normal Text Document -->\n      <context name=\"Normal Text\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"find-code-block\">\n        <!-- Header -->\n        <DetectChar context=\"find-header\" char=\"#\" column=\"0\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Header H1\" String=\"(?:\\=\\s*){2,}$\" firstNonSpace=\"true\"/>\n        <!-- Highlight code block after line only with spaces or comment -->\n        <RegExpr attribute=\"Normal Text\" context=\"find-code-block\" String=\"&emptyline;\" column=\"0\"/>\n        <StringDetect attribute=\"Comment\" context=\"find-code-block\" String=\"&startcomment;\" column=\"0\" lookAhead=\"true\"/>\n        <!-- Horizontal rules, Blockquotes and Lists.\n             NOTE: The indentation of the lists is captured. -->\n        <RegExpr attribute=\"Horizontal Rule\" context=\"find-code-block\" String=\"^&rulerregex;\" column=\"0\"/>\n        <DetectChar attribute=\"Blockquote\" context=\"blockquote\" char=\"&gt;\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"List\" context=\"list\" String=\"(\\s*)&listbullet;(\\s+)\" column=\"0\"/>\n        <RegExpr attribute=\"Number List\" context=\"numlist\" String=\"(\\s*)\\d\\.(\\s+)\" column=\"0\"/>\n        <RegExpr attribute=\"Number List\" context=\"numlist2\" String=\"(\\s*)\\d\\d+\\.(\\s+)\" column=\"0\"/>\n        <!-- Find Strong, Emphasis and Strikethrough Text -->\n        <DetectChar context=\"find-strong-normal\" char=\"*\" lookAhead=\"true\"/>\n        <DetectChar context=\"find-emphasis-normal\" char=\"_\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Strikethrough Text\" minimal=\"true\" String=\"&strikeoutregex;\"/>\n        <!-- Common -->\n        <IncludeRules context=\"inc\"/>\n        <RegExpr attribute=\"Normal Text: Link\" String=\"&implicitlink;\"/>\n      </context>\n      <!-- Find indented code blocks. These are only allowed after an empty line or on the first line -->\n      <context name=\"find-code-block\" attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Code\" String=\"^&indentedcodeblock;\" column=\"0\"/>\n        <RegExpr attribute=\"Normal Text\" String=\"&end;\" />\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"\\s*&startcomment;\" column=\"0\" beginRegion=\"comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"\\s*&startcomment;(?=.*&endcomment;)\" beginRegion=\"comment\"/>\n      </context>\n\n      <context name=\"find-header\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Header H1\" context=\"#pop\" String=\"^#\\s.*[#]?$\"/>\n        <RegExpr attribute=\"Header H2\" context=\"#pop\" String=\"^##\\s.*[#]?$\"/>\n        <RegExpr attribute=\"Header H3\" context=\"#pop\" String=\"^###\\s.*[#]?$\"/>\n        <RegExpr attribute=\"Header H4\" context=\"#pop\" String=\"^####\\s.*[#]?$\"/>\n        <RegExpr attribute=\"Header H5\" context=\"#pop\" String=\"^#####\\s.*[#]?$\"/>\n        <RegExpr attribute=\"Header H6\" context=\"#pop\" String=\"^######\\s.*[#]?$\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"#\"/>\n      </context>\n      <context name=\"find-strong-normal\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast_und;\"/>\n        <RegExpr attribute=\"Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast_und2;\"/>\n        <RegExpr attribute=\"Strong Text\" context=\"#pop\" minimal=\"true\" String=\"&strongregex_ast;\"/>\n        <RegExpr attribute=\"Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast;\"/>\n        <RegExpr attribute=\"Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&emphasisregex_ast;\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"*\"/>\n      </context>\n      <context name=\"find-emphasis-normal\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und_ast;\"/>\n        <RegExpr attribute=\"Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und_ast2;\"/>\n        <RegExpr attribute=\"Strong Text\" context=\"#pop\" minimal=\"true\" String=\"&strongregex_und;\"/>\n        <RegExpr attribute=\"Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und;\"/>\n        <RegExpr attribute=\"Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&emphasisregex_und;\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"_\"/>\n      </context>\n\n      <!-- Blockquote -->\n      <context name=\"blockquote\" attribute=\"Blockquote: Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n        <IncludeRules context=\"default-blockquote-1\"/>\n        <!-- Find code block -->\n        <RegExpr attribute=\"Normal Text\" context=\"#pop!find-code-block\" String=\"&emptyline;\" column=\"0\"/>\n        <StringDetect attribute=\"Comment\" context=\"#pop!find-code-block\" String=\"&startcomment;\" column=\"0\" lookAhead=\"true\"/>\n        <IncludeRules context=\"default-blockquote-2\"/>\n      </context>\n      <!-- Blockquote within a list -->\n      <context name=\"blockquote-list\" attribute=\"Blockquote: Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n        <IncludeRules context=\"default-blockquote-1\"/>\n        <!-- Don't find code block -->\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"&emptyline;\" column=\"0\"/>\n        <StringDetect attribute=\"Comment\" context=\"#pop!comment\" String=\"&startcomment;\" firstNonSpace=\"true\"/>\n        <IncludeRules context=\"default-blockquote-2\"/>\n      </context>\n\n      <context name=\"default-blockquote-1\" attribute=\"Blockquote: Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Blockquote\" char=\"&gt;\" firstNonSpace=\"true\"/>\n        <!-- End with header, horizontal rule or list/numlist -->\n        <RegExpr context=\"#pop\" String=\"(?:\\s*(?:&listbullet;|[\\d]+\\.)\\s|#{1,6}\\s|&rulerregex;)\" column=\"0\" lookAhead=\"true\"/>\n      </context>\n      <context name=\"default-blockquote-2\" attribute=\"Blockquote: Normal Text\" lineEndContext=\"#stay\">\n        <!-- Strong, emphasis, strong-emphasis and strikethrough text -->\n        <AnyChar context=\"find-strong-emphasis-blockquote\" String=\"*_\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Blockquote: Strikethrough Text\" minimal=\"true\" String=\"&strikeoutregex;\"/>\n        <!-- Common -->\n        <IncludeRules context=\"inc\"/>\n        <RegExpr attribute=\"Blockquote: Link\" String=\"&implicitlink;\"/>\n      </context>\n      <context name=\"find-strong-emphasis-blockquote\" attribute=\"Blockquote: Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Blockquote: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast_und;\"/>\n        <RegExpr attribute=\"Blockquote: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und_ast;\"/>\n        <RegExpr attribute=\"Blockquote: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast_und2;\"/>\n        <RegExpr attribute=\"Blockquote: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und_ast2;\"/>\n        <RegExpr attribute=\"Blockquote: Strong Text\" context=\"#pop\" minimal=\"true\" String=\"&strongregex_ast;\"/>\n        <RegExpr attribute=\"Blockquote: Strong Text\" context=\"#pop\" minimal=\"true\" String=\"&strongregex_und;\"/>\n        <RegExpr attribute=\"Blockquote: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast;\"/>\n        <RegExpr attribute=\"Blockquote: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und;\"/>\n        <RegExpr attribute=\"Blockquote: Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&emphasisregex_ast;\" />\n        <RegExpr attribute=\"Blockquote: Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&emphasisregex_und;\"/>\n        <AnyChar attribute=\"Blockquote: Normal Text\" context=\"#pop\" String=\"*_\"/>\n      </context>\n\n      <!-- List and Numbered List -->\n      <!-- NOTE: The indentation of the lists is captured. New paragraphs, code blocks, blockquotes or\n           horizontal rules must have an indentation equal to or greater than the list, to be part of it. -->\n      <!-- * list -->\n      <context name=\"list\" attribute=\"List: Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"content-list\">\n        <!-- Find indented code blocks, blockquotes and horizontal rules -->\n        <RegExpr attribute=\"Code\" String=\"%1%2\\s&indentedcodeblock;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Blockquote\" context=\"blockquote-list\" String=\"%1%2\\s+&gt;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Horizontal Rule\" String=\"%1%2\\s+&rulerregex;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr String=\"&emptyline;\" column=\"0\"/>\n        <!-- Text with the same indentation captured corresponds to the item list -->\n        <RegExpr context=\"content-list\" String=\"%1%2\\s\" column=\"0\" lookAhead=\"true\" dynamic=\"true\"/>\n        <!-- Finish when the text has a lower indentation than the list -->\n        <RegExpr context=\"#pop\" String=\"^\\s*\\S\" column=\"0\" lookAhead=\"true\"/>\n        <!-- Highlight checkbox at the start of the item (task list) -->\n        <RegExpr attribute=\"List: Checkbox\" context=\"content-list\" String=\"\\s*&checkbox;\"/>\n      </context>\n      <!-- 1. numlist (one digit) -->\n      <context name=\"numlist\" attribute=\"List: Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"content-list\">\n        <!-- Find indented code blocks, blockquotes and horizontal rules -->\n        <RegExpr attribute=\"Code\" String=\"%1%2\\s{2}&indentedcodeblock;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Blockquote\" context=\"blockquote-list\" String=\"%1%2\\s{2,}&gt;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Horizontal Rule\" String=\"%1%2\\s{2,}&rulerregex;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr String=\"&emptyline;\" column=\"0\"/>\n        <!-- Text with the same indentation captured -->\n        <RegExpr context=\"content-list\" String=\"%1%2\\s{2}\" column=\"0\" lookAhead=\"true\" dynamic=\"true\"/>\n        <!-- Finish when the text has a lower indentation than the list -->\n        <RegExpr context=\"#pop\" String=\"^\\s*\\S\" column=\"0\" lookAhead=\"true\"/>\n      </context>\n      <!-- 10. numlist (two or more digits) -->\n      <context name=\"numlist2\" attribute=\"List: Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"content-list\">\n        <!-- Find indented code blocks, blockquotes and horizontal rules -->\n        <RegExpr attribute=\"Code\" String=\"%1%2\\s{3}&indentedcodeblock;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Blockquote\" context=\"blockquote-list\" String=\"%1%2\\s{3,}&gt;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Horizontal Rule\" String=\"%1%2\\s{3,}&rulerregex;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr String=\"&emptyline;\" column=\"0\"/>\n        <!-- Text with the same indentation captured -->\n        <RegExpr context=\"content-list\" String=\"%1%2\\s{3}\" column=\"0\" lookAhead=\"true\" dynamic=\"true\"/>\n        <!-- Finish when the text has a lower indentation than the list -->\n        <RegExpr context=\"#pop\" String=\"^\\s*\\S\" column=\"0\" lookAhead=\"true\"/>\n      </context>\n\n      <!-- NOTE: Empty lines, blockquotes and horizontal rules send to contexts \"list\", \"numlist\" or \"numlist2\" (#pop),\n           to check the indentation of the text and determine if the content of the list ends. -->\n      <context name=\"content-list\" attribute=\"List: Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n        <RegExpr context=\"#pop\" String=\"&emptyline;\" column=\"0\"/>\n        <!-- Blockquote and horzontal rule (check indentation) -->\n        <RegExpr context=\"#pop\" String=\"^\\s*(?:&gt;|&rulerregex;)\" column=\"0\" lookAhead=\"true\"/>\n        <!-- End with header or new list/numlist -->\n        <RegExpr context=\"#pop#pop\" String=\"(?:\\s*(?:&listbullet;|[\\d]+\\.)\\s|#{1,6}\\s)\" column=\"0\" lookAhead=\"true\"/>\n        <!-- Strong, emphasis, strong-emphasis and strikethrough text -->\n        <AnyChar context=\"find-strong-emphasis-list\" String=\"*_\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"List: Strikethrough Text\" minimal=\"true\" String=\"&strikeoutregex;\"/>\n        <!-- Common -->\n        <IncludeRules context=\"inc\"/>\n        <RegExpr attribute=\"List: Link\" String=\"&implicitlink;\"/>\n      </context>\n      <context name=\"find-strong-emphasis-list\" attribute=\"List: Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"List: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast_und;\"/>\n        <RegExpr attribute=\"List: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und_ast;\"/>\n        <RegExpr attribute=\"List: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast_und2;\"/>\n        <RegExpr attribute=\"List: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und_ast2;\"/>\n        <RegExpr attribute=\"List: Strong Text\" context=\"#pop\" minimal=\"true\" String=\"&strongregex_ast;\"/>\n        <RegExpr attribute=\"List: Strong Text\" context=\"#pop\" minimal=\"true\" String=\"&strongregex_und;\"/>\n        <RegExpr attribute=\"List: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_ast;\"/>\n        <RegExpr attribute=\"List: Strong-Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&strongemphasisregex_und;\"/>\n        <RegExpr attribute=\"List: Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&emphasisregex_ast;\" />\n        <RegExpr attribute=\"List: Emphasis Text\" context=\"#pop\" minimal=\"true\" String=\"&emphasisregex_und;\"/>\n        <AnyChar attribute=\"List: Normal Text\" context=\"#pop\" String=\"*_\"/>\n      </context>\n\n      <!-- Comments -->\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"&endcomment;\" endRegion=\"comment\"/>\n        <IncludeRules context=\"##Alerts\"/>\n        <IncludeRules context=\"##Modelines\"/>\n      </context>\n\n      <!-- Fenced Code Blocks -->\n      <context name=\"find-lang-fenced-code\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- Apply syntax highlighting to fenced code blocks for some languages -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!code\" String=\"&fcode;&end;\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!bash-code\" String=\"&fcode;\\s*(?:bash(?:rc|_profile|_login|_logout)?|shell|sh|zsh|profile|PKGBUILD|APKBUILD|ebuild|eclass|nix)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!cpp-code\" String=\"&fcode;\\s*(?:[ch]pp|[ch]\\+\\+|[ch]xx|h?cc|hh|cuh?|ino|pde|moc)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!csharp-code\" String=\"&fcode;\\s*(?:cs|csharp|c\\#)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!cmake-code\" String=\"&fcode;\\s*(?:cmake|CMakeLists(?:\\.txt)?)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!css-code\" String=\"&fcode;\\s*css&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!c-code\" String=\"&fcode;\\s*[ch]&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!doxygen-code\" String=\"&fcode;\\s*doxygen&end;\" insensitive=\"true\"/> <!-- Block comment of Doxygen -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!email-code\" String=\"&fcode;\\s*(?:email|emlx?|mbo?x)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!go-code\" String=\"&fcode;\\s*go(?:lang)?&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!hamlet-code\" String=\"&fcode;\\s*[wxs]?hamlet&end;\" insensitive=\"true\"/> <!-- Included in the Haskell definition -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!haskell-code\" String=\"&fcode;\\s*(?:haskell|c?hs|hs\\-boot)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!html-code\" String=\"&fcode;\\s*(?:[sx]?html?|inc|tmpl|tpl)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!java-code\" String=\"&fcode;\\s*(?:java|bsh)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!javascript-code\" String=\"&fcode;\\s*(?:javascript|m?js|es6|kwinscript|julius)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!jsx-code\" String=\"&fcode;\\s*(?:jsx|tsx|(?:java|type)script\\-react)&end;\" insensitive=\"true\"/> <!-- Included in the HTML definition. Also apply for TSX. -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!json-code\" String=\"&fcode;\\s*(?:json5?|gltf)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!matlab-code\" String=\"&fcode;\\s*matlab&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!markdown-code\" String=\"&fcode;\\s*(?:markdown|m?md)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!mustache-code\" String=\"&fcode;\\s*(?:handlebars|hbs|mustache|mst|ractive|hogan|hulk)&end;\" insensitive=\"true\"/> <!-- Included in the HTML definition -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!perl-code\" String=\"&fcode;\\s*(?:perl|p[lm]|pod|psgi|vcl|perl6|p[lm]?6|nqp)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!php-code\" String=\"&fcode;\\s*(?:php[3457t]?|wml|phtml?|aw|ctp)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!python-code\" String=\"&fcode;\\s*(?:python[23]?|py[23w]?|[rc]py|sconstruct|gypi?)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!qml-code\" String=\"&fcode;\\s*qml(?:types)?&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!r-code\" String=\"&fcode;\\s*(?:r|rprofile|rscript)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!rest-code\" String=\"&fcode;\\s*(?:rst|rest|restructuredtext)&end;\" insensitive=\"true\"/> <!-- Included in the CMake definition -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!ruby-code\" String=\"&fcode;\\s*(?:ruby|rbx?|rjs|rake|f?cgi|gemspec|irbrc|ru|prawn|Appraisals|(?:Rake|Cap|Chef|Gem|Guard|Hobo|Vagrant||Rant|Berks|Thor|Puppet)file|rxml|(?:xml|js)\\.erb)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!rust-code\" String=\"&fcode;\\s*(?:rust|rs)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!mysql-code\" String=\"&fcode;\\s*(?:mysql|sql|ddl)&end;\" insensitive=\"true\"/> <!-- Included in the PHP definition -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!typescript-code\" String=\"&fcode;\\s*(?:typescript|ts)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!xml-code\" String=\"&fcode;\\s*(?:xml|xsd|xspf|tld|jsp|c?pt|dtml|rss|opml|svg|daml|rdf|ui|kcfg|qrc|wsdl|scxml|xbel|dae|sch|brd|docbook)&end;\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop!code\" String=\"&fcode;.*$\"/>\n      </context>\n      <context name=\"code\" attribute=\"Code\" lineEndContext=\"#stay\"> <!-- Unknown language -->\n        <RegExpr attribute=\"Fenced Code\" context=\"#pop\" String=\"%1[~`]*(?=&end;)\" firstNonSpace=\"true\" dynamic=\"true\" endRegion=\"code-block\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"bash-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Bash\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cmake-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##CMake\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"c-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##C\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"cpp-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##C++\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"csharp-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##C#\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"css-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##CSS\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"doxygen-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"BlockComment##Doxygen\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"email-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Email\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"go-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Go\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"hamlet-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Hamlet\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"haskell-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Haskell\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"html-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##HTML\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"java-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Java\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"javascript-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"jsx-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"Normal##JavaScript React\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"json-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##JSON\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" lineEmptyContext=\"find-code-block\" name=\"markdown-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"Normal Text\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"matlab-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Matlab\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"mustache-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Mustache/Handlebars (HTML)\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"perl-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Perl\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"php-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"phpsource##PHP/PHP\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"python-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Python\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"qml-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##QML\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"r-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##R Script\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"rest-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##reStructuredText\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ruby-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Ruby\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"rust-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##Rust\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"mysql-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##SQL (MySQL)\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"typescript-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"Normal##TypeScript\" includeAttrib=\"true\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"xml-code\">\n        <IncludeRules context=\"code\"/>\n        <IncludeRules context=\"##XML\" includeAttrib=\"true\"/>\n      </context>\n\n      <!-- Common -->\n      <context name=\"inc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- Code -->\n        <RegExpr attribute=\"Code\" String=\"`[^`]+`(?!`)\"/>\n        <RegExpr attribute=\"Code\" minimal=\"true\" String=\"`{2}[^`](?:.*[^`])?`{2}(?!`)\"/>\n        <RegExpr attribute=\"Code\" minimal=\"true\" String=\"`{3}[^`](?:.*[^`])?`{3}(?!`)\"/>\n        <RegExpr attribute=\"Code\" minimal=\"true\" String=\"`{4}[^`](?:.*[^`])?`{4}(?!`)\"/>\n        <RegExpr attribute=\"Code\" minimal=\"true\" String=\"`{5,}[^`](?:.*[^`])?`{5,}\"/>\n        <!-- Find Fenced Code Block -->\n        <RegExpr attribute=\"Fenced Code\" context=\"find-lang-fenced-code\" String=\"`{3,}(?=[^`]*$)\" firstNonSpace=\"true\" lookAhead=\"true\" beginRegion=\"code-block\"/>\n        <RegExpr attribute=\"Fenced Code\" context=\"find-lang-fenced-code\" String=\"~{3,}(?=[^~]*$)\" firstNonSpace=\"true\" lookAhead=\"true\" beginRegion=\"code-block\"/>\n        <!-- Comment -->\n        <StringDetect attribute=\"Comment\" context=\"comment\" String=\"&startcomment;\" beginRegion=\"comment\"/>\n        <!-- Links and References -->\n        <RegExpr attribute=\"Reference-Link Target\" context=\"reflinktarget\" String=\"&reflinktargetregex;\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Footnote\" String=\"&footnoteregex;\"/>\n        <RegExpr attribute=\"Reference-Link\" context=\"find-reflink\" String=\"&reflinkregex;\"/>\n        <RegExpr attribute=\"Inline Image\" context=\"inlineimage\" String=\"&inlineimageregex;\"/>\n        <RegExpr attribute=\"Reference Image\" String=\"&refimageregex;\"/>\n        <RegExpr attribute=\"Auto-Link\" context=\"autolink\" String=\"&autolinkregex;\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Mailto-Link\" context=\"mailtolink\" String=\"&mailtolinkregex;\"/>\n        <!-- Line Break -->\n        <RegExpr attribute=\"Line Break\" minimal=\"true\" String=\"&linebreakregex;\"/>\n        <!-- Backslash Escapes -->\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"\\\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"`\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"*\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"_\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"{\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"}\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"[\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"]\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"(\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\")\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"#\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"+\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"-\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\".\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"!\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"&lt;\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"&gt;\"/>\n        <Detect2Chars attribute=\"Backslash Escape\" char=\"\\\" char1=\"&amp;\"/>\n        <!-- Inline HTML -->\n        <RegExpr attribute=\"EntityRef\" String=\"&amp;(?:#[0-9]+|#[xX][0-9A-Fa-f]+|&htmlname;);\"/>\n        <RegExpr context=\"find-html-block\" String=\"&lt;/?&htmlname;(?:[\\s&gt;]|/&gt;|$)\" lookAhead=\"true\"/>\n      </context>\n      <context name=\"find-html-block\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- In the HTML definition, just highlight the tags\n             (this prevents incorrect highlighting after writing a tag) -->\n        <DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n        <RegExpr context=\"#pop\" String=\"[^&lt;]\" lookAhead=\"true\"/>\n        <RegExpr context=\"#pop\" String=\"&lt;(?!/?&htmlname;)\" lookAhead=\"true\"/>\n        <IncludeRules context=\"##HTML\"/>\n      </context>\n\n      <!-- Links and email: <https://example.com>, <example@kde.org> -->\n      <context name=\"autolink\" attribute=\"Auto-Link\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Auto-Link\" char=\"&lt;\"/>\n        <DetectChar attribute=\"Auto-Link\" context=\"#pop\" char=\"&gt;\"/>\n        <RegExpr attribute=\"Link\" String=\"&startlink;[^&quot;&gt;\\s]+\"/>\n      </context>\n      <context name=\"mailtolink\" attribute=\"Email\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Mailto-Link\" context=\"#pop\" char=\"&gt;\"/>\n      </context>\n\n      <!-- References: [example][id], [example](http://example.com) -->\n      <context name=\"find-reflink\" attribute=\"Reference-Link Name\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Reference-Link Name\" char=\"\\\" char1=\"]\"/>\n        <RegExpr attribute=\"Reference-Link\" context=\"#pop!find-reflink-id\" String=\"\\](?=&reflinkidregex;)\"/> <!-- Find id -->\n        <DetectChar attribute=\"Reference-Link\" context=\"#pop\" char=\"]\"/>\n        <!-- Image as link or reference -->\n        <RegExpr attribute=\"Inline Image\" context=\"inlineimage\" String=\"&startinlineimage;(?=&endinlineimage;&refchar;*\\])\"/>\n        <RegExpr attribute=\"Reference Image\" String=\"&refimageregex;(?=&refchar;*\\])\"/>\n        <RegExpr attribute=\"Reference-Link Name\" context=\"#stay\" String=\"(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\](?:\\\\.|[^\\[\\]\\\\])*)+(?=\\])\" minimal=\"true\"/>\n      </context>\n      <context name=\"find-reflink-id\" attribute=\"Reference-Link\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <!-- Ref.: [an example][id] \"Optional title\" -->\n        <DetectChar attribute=\"Reference-Link\" context=\"#pop!reflink-id\" char=\"[\"/>\n        <!-- Inline Ref.: [an example](http://example.com/ \"Title\") -->\n        <DetectChar attribute=\"Reference-Link\" context=\"#pop!reflink-inline-id\" char=\"(\"/>\n      </context>\n      <context name=\"reflink-inline-id\" attribute=\"Reference-Link\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Reference-Link\" char=\"\\\" char1=\")\"/>\n        <DetectChar attribute=\"Reference-Link\" context=\"#pop\" char=\")\"/>\n        <RegExpr attribute=\"Reference-Link: Link\" String=\"\\b&startlink;(?:\\\\.|[^&quot;&gt;\\s\\)\\\\])+\"/>\n        <RegExpr attribute=\"Reference-Link: Email\" String=\"\\b&email;\\b\"/>\n      </context>\n      <context name=\"reflink-id\" attribute=\"Reference-Link ID\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Reference-Link ID\" char=\"\\\" char1=\"]\"/>\n        <DetectChar attribute=\"Reference-Link\" context=\"#pop!reflink-title\" char=\"]\"/>\n        <RegExpr attribute=\"Reference-Link: Link\" String=\"\\b&startlink;(?:\\\\.|[^&quot;&gt;\\s\\]\\\\])+\"/>\n      </context>\n      <!-- [an example][id] \"title\" -->\n      <context name=\"reflink-title\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Reference-Link\" context=\"#pop\" String=\"\\s+&quot;(?:\\\\.|[^&quot;\\\\])*&quot;\"/>\n      </context>\n\n      <!-- Target Ref.: [foo]: http://example.com/  \"Optional Title Here\" -->\n      <context name=\"reflinktarget\" attribute=\"Reference-Link Target\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Reference-Link Target: Link\" context=\"#pop!reflinktarget-title\" String=\"\\s*&link;(?=\\s|$)\"/>\n        <RegExpr attribute=\"Reference-Link Target\" context=\"#pop!reflinktarget-link\" String=\"\\s*&lt;(?=&link;&gt;(?:\\s|$))\"/>\n        <RegExpr attribute=\"Reference-Link Target\" context=\"#pop!reflinktarget-title\" String=\"\\s*#[\\w\\.\\:\\-]+\\b\"/>\n      </context>\n      <context name=\"reflinktarget-link\" attribute=\"Reference-Link Target\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Reference-Link Target\" context=\"#pop!reflinktarget-title\" char=\"&gt;\"/>\n        <RegExpr attribute=\"Reference-Link Target: Link\" String=\"&link;\"/>\n      </context>\n      <context name=\"reflinktarget-title\" attribute=\"Reference-Link Target\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces attribute=\"Reference-Link Target\"/>\n        <RegExpr attribute=\"Reference-Link Target\" context=\"#pop\" String=\"&quot;(?:\\\\.|[^&quot;\\\\])*&quot;\"/>\n        <RegExpr attribute=\"Reference-Link Target\" context=\"#pop\" String=\"&apos;(?:\\\\.|[^&apos;\\\\])*&apos;\"/>\n        <RegExpr attribute=\"Reference-Link Target\" context=\"#pop\" String=\"\\((?:\\\\.|[^\\)\\\\])*\\)\"/>\n      </context>\n\n      <!-- Image -->\n      <context name=\"inlineimage\" attribute=\"Inline Image\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Inline Image\" context=\"#pop\" char=\")\"/>\n        <Detect2Chars attribute=\"Inline Image\" char=\"\\\" char1=\")\"/>\n        <RegExpr attribute=\"Inline Image: Link\" String=\"\\b&startlink;(?:\\\\.|[^&quot;&gt;\\s\\)\\\\])+\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Emphasis Text\" defStyleNum=\"dsNormal\" italic=\"true\"/>\n      <itemData name=\"Strong Text\" defStyleNum=\"dsNormal\" bold=\"true\"/>\n      <itemData name=\"Strong-Emphasis Text\" defStyleNum=\"dsNormal\" italic=\"true\" bold=\"true\"/>\n      <itemData name=\"Strikethrough Text\" defStyleNum=\"dsNormal\" strikeOut=\"true\"/>\n      <itemData name=\"Normal Text: Link\" defStyleNum=\"dsNormal\" underline=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Horizontal Rule\" defStyleNum=\"dsNormal\" bold=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Line Break\" defStyleNum=\"dsNormal\" underline=\"true\" color=\"#999999\" spellChecking=\"false\"/>\n      <itemData name=\"Header H1\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"Header H2\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"Header H3\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"Header H4\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"Header H5\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"Header H6\" defStyleNum=\"dsFunction\" bold=\"true\"/>\n      <itemData name=\"Blockquote\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n      <itemData name=\"Blockquote: Normal Text\" defStyleNum=\"dsAttribute\"/>\n      <itemData name=\"Blockquote: Emphasis Text\" defStyleNum=\"dsAttribute\" italic=\"true\"/>\n      <itemData name=\"Blockquote: Strong Text\" defStyleNum=\"dsAttribute\" bold=\"true\"/>\n      <itemData name=\"Blockquote: Strong-Emphasis Text\" defStyleNum=\"dsAttribute\" italic=\"true\" bold=\"true\"/>\n      <itemData name=\"Blockquote: Strikethrough Text\" defStyleNum=\"dsAttribute\" strikeOut=\"true\"/>\n      <itemData name=\"Blockquote: Link\" defStyleNum=\"dsAttribute\" underline=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"List\" defStyleNum=\"dsSpecialString\" bold=\"1\" spellChecking=\"false\"/>\n      <itemData name=\"Number List\" defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n      <itemData name=\"List: Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"List: Emphasis Text\" defStyleNum=\"dsNormal\" italic=\"true\"/>\n      <itemData name=\"List: Strong Text\" defStyleNum=\"dsNormal\" bold=\"true\"/>\n      <itemData name=\"List: Strong-Emphasis Text\" defStyleNum=\"dsNormal\" italic=\"true\" bold=\"true\"/>\n      <itemData name=\"List: Strikethrough Text\" defStyleNum=\"dsNormal\" strikeOut=\"true\"/>\n      <itemData name=\"List: Link\" defStyleNum=\"dsNormal\" underline=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"List: Checkbox\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Code\" defStyleNum=\"dsInformation\"/>\n      <itemData name=\"Fenced Code\" defStyleNum=\"dsInformation\" spellChecking=\"false\"/>\n      <itemData name=\"Auto-Link\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Link\" defStyleNum=\"dsOthers\" underline=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Mailto-Link\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Email\" defStyleNum=\"dsOthers\" italic=\"true\" underline=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Footnote\" defStyleNum=\"dsOthers\" italic=\"true\"/>\n      <itemData name=\"Reference-Link\" defStyleNum=\"dsComment\" italic=\"false\"/>\n      <itemData name=\"Reference-Link Name\" defStyleNum=\"dsOthers\" underline=\"true\" italic=\"false\"/>\n      <itemData name=\"Reference-Link ID\" defStyleNum=\"dsComment\" italic=\"false\"/>\n      <itemData name=\"Reference-Link: Link\" defStyleNum=\"dsComment\" underline=\"true\" italic=\"false\" spellChecking=\"false\"/>\n      <itemData name=\"Reference-Link: Email\" defStyleNum=\"dsComment\" italic=\"true\" underline=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Reference-Link Target\" defStyleNum=\"dsOthers\" italic=\"false\" bold=\"false\"/>\n      <itemData name=\"Reference-Link Target: Link\" defStyleNum=\"dsOthers\" underline=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"Inline Image\" defStyleNum=\"dsAlert\" italic=\"false\" bold=\"false\"/>\n      <itemData name=\"Reference Image\" defStyleNum=\"dsAlert\" italic=\"false\" bold=\"false\"/>\n      <itemData name=\"Inline Image: Link\" defStyleNum=\"dsAlert\" italic=\"false\" bold=\"false\" underline=\"true\"/>\n      <itemData name=\"Metadata Title\" defStyleNum=\"dsAnnotation\"/>\n      <itemData name=\"Metadata\" defStyleNum=\"dsComment\" italic=\"0\"/>\n      <itemData name=\"Backslash Escape\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n      <itemData name=\"EntityRef\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords additionalDeliminator=\"`\"/>\n    <comments>\n      <comment name=\"multiLine\" start=\"&startcomment;\" end=\"&endcomment;\" region=\"comment\"/>\n    </comments>\n  </general>\n</language>\n<!-- kate: replace-tabs on; indent-width 2; tab-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mason.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language version=\"4\" kateversion=\"2.4\" name=\"Mason\" section=\"Scripts\" extensions=\"*.html;\" mimetype=\"\">\n<highlighting>\n\t<list name=\"keywords\">\n\t\t<item>sub</item>\n\t\t<item>bless</item>\n\t\t<item>caller</item>\n\t\t<item>cmp</item>\n\t\t<item>print</item>\n\t\t<item>echo</item>\n\t\t<item>die</item>\n\t\t<item>import</item>\n\t\t<item>lt</item>\n\t\t<item>le</item>\n\t\t<item>local</item>\n\t\t<item>defined</item>\n\t\t<item>last</item>\n\t\t<item>!</item>\n\t\t<item>||</item>\n\t\t<item>eq</item>\n\t\t<item>ne</item>\n\t\t<item>use</item>\n\t\t<item>elsif</item>\n\t\t<item>my</item>\n\t\t<item>foreach</item>\n\t\t<item>wantarray</item>\n\t\t<item>push</item>\n\t\t<item>pop</item>\n\t\t<item>dbmclose</item>\n\t\t<item>dbmopen</item>\n\t\t<item>dump</item>\n\t\t<item>each</item>\n\t\t<item>ge</item>\n\t\t<item>gt</item>\n\t\t<item>split</item>\n\t\t<item>open</item>\n\t\t<item>close</item>\n\t\t<item>eval</item>\n\t\t<item>chomp</item>\n\t\t<item>chop</item>\n\t\t<item>unless</item>\n\t\t<item>undef</item>\n\t\t<item>next</item>\n\t\t<item>unlink</item>\n\t\t<item>new</item>\n\t\t<item>and</item>\n\t\t<item>not</item>\n\t\t<item>no</item>\n\t\t<item>ref</item>\n\t\t<item>redo</item>\n\t\t<item>require</item>\n\t\t<item>tied</item>\n\t\t<item>tie</item>\n\t\t<item>untie</item>\n\t\t<item>or</item>\n\t\t<item>xor</item>\n\t\t<item>continue</item>\n\t\t<item>do</item>\n\t\t<item>else</item>\n\t\t<item>for</item>\n\t\t<item>goto</item>\n\t\t<item>if</item>\n\t\t<item>return</item>\n\t\t<item>switch</item>\n\t\t<item>while</item>\n\t</list>\n\n\t<contexts>\n\t\t<context  attribute=\"HTML\" lineEndContext=\"#stay\" name=\"HTML\">\n\t\t\t<RegExpr attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;\\%method[^&gt;]*&gt;\" />\n\t\t\t<RegExpr attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;\\%def[^&gt;]*&gt;\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%method&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Comment\" context=\"Documentation\" String=\"&lt;%doc&gt;\" insensitive=\"false\" />\n\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%perl&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%init&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%once&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%args&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%filter&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%cleanup&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%flags&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%attr&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"EmbeddedPerl\" String=\"&lt;%shared&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"UnparsedText\" String=\"&lt;%text&gt;\" insensitive=\"false\" />\n\t\t\t<Detect2Chars attribute=\"Mason Tag\" context=\"EmbeddedPerl\" char=\"&lt;\" char1=\"%\" />\n\t\t\t<Detect2Chars attribute=\"Mason Method\" context=\"MethodCall\" char=\"&lt;\" char1=\"&amp;\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#stay\" String=\"&lt;/&amp;&gt;\" />\n\t\t\t<RegExpr attribute=\"Mason Tag\" context=\"PerlOneLiner\" String=\"^%\" />\n\t\t</context>\n\n\t\t<context attribute=\"normal\" lineEndContext=\"#stay\" name=\"EmbeddedPerl\">\n\t\t\t<Detect2Chars attribute=\"Mason Tag\" context=\"#pop\" char=\"%\" char1=\"&gt;\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%perl&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%method&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%def&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%init&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%once&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%args&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%filter&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%cleanup&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%flags&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%attr&gt;\" insensitive=\"false\" />\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%shared&gt;\" insensitive=\"false\" />\n\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t<Int attribute=\"Decimal\" context=\"#stay\" />\n\t\t\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"^#!.*\" />\n\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"String2\" char=\"'\"/>\n\t\t\t<DetectChar attribute=\"String Char\" context=\"String\" char=\"`\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\"/>\n\t\t\t<Detect2Chars attribute=\"Pattern\" context=\"Pattern2\" char=\"s\" char1=\"/\" />\n\t\t\t<DetectChar attribute=\"Pattern\" context=\"Pattern\" char=\"/\" />\n\t\t\t<DetectIdentifier attribute=\"normal\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[0-9]+\" />\n\t\t\t<AnyChar attribute=\"Data Type\" context=\"Variable\" String=\"$@%\" />\n\t\t\t<RegExpr attribute=\"Pattern\" context=\"#stay\" String=\"\\s+\\:\" />\n\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!&amp;()+,-&lt;=&gt;?[]^{|}~\"/> \n\t\t\t<DetectChar attribute=\"Comment\" context=\"Commentar 1\" char=\"#\" />\n\t\t</context>\n\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[0-9]+\" />\n\t\t\t<AnyChar attribute=\"Data Type\" context=\"Variable\" String=\"$@%\" />\n\t\t</context>\n\t\t\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"UnparsedText\">\n\t\t\t<StringDetect attribute=\"Mason Tag\" context=\"#pop\" String=\"&lt;/%text&gt;\" insensitive=\"false\" />\n\t\t</context>\n\t\t\n\t\t<context attribute=\"Data Type\" lineEndContext=\"#pop\" name=\"Variable\">\n\t\t\t<Detect2Chars attribute=\"normal\" context=\"#stay\" char=\"-\" char1=\"&gt;\" />\n\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n\t\t\t<DetectChar attribute=\"String\" context=\"String2\" char=\"'\" />\n\t\t\t<AnyChar attribute=\"normal\" context=\"#pop\" String=\" &amp;\t()+,-&lt;=&gt;?^|~\" />\n\t\t</context>\n\n\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n\n\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Pattern\" lineEndContext=\"#stay\" name=\"Pattern\">\n\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\[\\/\\[\\]dDwWsSnrtfb0\\$@]?\" />\n\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\^[\\/\\[\\]]?\" />\n\t\t\t<DetectChar attribute=\"Pattern\" context=\"#pop\" char=\"/\" />\n\t\t</context>\n\n\t\t<context attribute=\"Pattern\" lineEndContext=\"#stay\" name=\"Pattern2\">\n\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\[\\/\\[\\]dDwWsSnrtfb0\\$@]?\" />\n\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\^[\\/\\[\\]]?\" />\n\t\t\t<RegExpr attribute=\"Pattern\" context=\"Pattern3\" String=\"\\/\" />\n\t\t</context>\n\n\t\t<context attribute=\"Pattern\" lineEndContext=\"#stay\" name=\"Pattern3\">\n\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\[\\/\\[\\]dDwWsSnrtfb0\\$@]?\" />\n\t\t\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\^[\\/\\[\\]]?\" />\n\t\t\t<RegExpr attribute=\"Pattern\" context=\"#pop#pop\" String=\"\\/g?\" />\n\t\t</context>\n\n\t\t<context attribute=\"String Char\" lineEndContext=\"#stay\" name=\"Something\">\n\t\t\t<DetectChar attribute=\"String Char\" context=\"#pop\" char=\"`\"/>\n\t\t</context>\n\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String2\">\n\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t<Detect2Chars attribute=\"String Char\" context=\"#stay\" char=\"\\\" char1=\"'\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n\t\t</context>\n\n\t\t<context attribute=\"normal\" lineEndContext=\"#pop\" name=\"PerlOneLiner\">\n\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t<Int attribute=\"Decimal\" context=\"#stay\" />\n\t\t\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"^#!.*\" />\n\t\t\t<RegExpr attribute=\"String\" context=\"#stay\" String=\"&quot;[^&quot;]*&quot;\"/>\n\t\t\t<RegExpr attribute=\"String\" context=\"#stay\" String=\"'[^']*'\"/>\n\t\t\t<DetectChar attribute=\"String Char\" context=\"Something\" char=\"`\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\"/>\n\t\t\t<Detect2Chars attribute=\"Pattern\" context=\"Pattern2\" char=\"s\" char1=\"/\" />\n\t\t\t<RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[0-9]+\" />\n\t\t\t<AnyChar attribute=\"Data Type\" context=\"Variable\" String=\"$@%\" />\n\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^{|}~\"/>\n\t\t\t<RegExpr attribute=\"Pattern\" context=\"#stay\" String=\"\\s+\\:\" />\n\t\t\t<RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\#.*\" />\n\t\t</context>\n\n\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Documentation\">\n\t\t\t<StringDetect attribute=\"Comment\" context=\"#pop\" String=\"&lt;/%doc&gt;\" insensitive=\"false\" />\n\t\t</context>\n\n\t\t<context attribute=\"Mason Method\" lineEndContext=\"#stay\" name=\"MethodCall\">\n\t\t\t<Detect2Chars attribute=\"Mason Method\" context=\"#pop\" char=\"&amp;\" char1=\"&gt;\" />\n\t\t</context>\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"normal\" defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n\t\t<itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n\t\t<itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n\t\t<itemData name=\"Octal\"  defStyleNum=\"dsBaseN\"/>\n\t\t<itemData name=\"Hex\"  defStyleNum=\"dsBaseN\"/>\n\t\t<itemData name=\"Char\"  defStyleNum=\"dsChar\"/>\n\t\t<itemData name=\"String\"  defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n\t\t<itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Symbol\"  defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Pattern\"  defStyleNum=\"dsOthers\"/>\n\t\t<itemData name=\"Mason Tag\"  defStyleNum=\"dsKeyword\"/>\n\t\t<itemData name=\"Mason Method\"  defStyleNum=\"dsKeyword\"/>\n\t\t<itemData name=\"HTML\"  defStyleNum=\"dsString\"/>\n\t</itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n\t  <comment name=\"singleLine\" start=\"#\" />\n\t  <comment name=\"multiLine\" start=\"&lt;%doc&gt;\" end=\"&lt;%doc&gt;\"/>\n     </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mathematica.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Mathematica\" version=\"9\" kateversion=\"3.4\" section=\"Scientific\" extensions=\"*.nb\" indenter=\"cstyle\"\n          author=\"Sven Brauch (svenbrauch@gmail.com)\" license=\"LGPL\" priority=\"3\">\n  <highlighting>\n    <list name=\"functions\">\n      <item>A</item>\n      <item>AbelianGroup</item>\n      <item>All</item>\n      <item>ArcSinh</item>\n      <item>Abort</item>\n      <item>AllowGroupClose</item>\n      <item>ArcTan</item>\n      <item>AbortKernels</item>\n      <item>AllowReverseGroupClose</item>\n      <item>ArcTanh</item>\n      <item>AbortProtect</item>\n      <item>AlphaChannel</item>\n      <item>Arg</item>\n      <item>Abs</item>\n      <item>AlternatingGroup</item>\n      <item>ArgMax</item>\n      <item>AbsoluteCurrentValue</item>\n      <item>AlternativeHypothesis</item>\n      <item>ArgMin</item>\n      <item>AbsoluteDashing</item>\n      <item>Alternatives</item>\n      <item>ArithmeticGeometricMean</item>\n      <item>AbsoluteFileName</item>\n      <item>AnchoredSearch</item>\n      <item>Array</item>\n      <item>AbsoluteOptions</item>\n      <item>And</item>\n      <item>ArrayComponents</item>\n      <item>AbsolutePointSize</item>\n      <item>AndersonDarlingTest</item>\n      <item>ArrayDepth</item>\n      <item>AbsoluteThickness</item>\n      <item>AngerJ</item>\n      <item>ArrayFlatten</item>\n      <item>AbsoluteTime</item>\n      <item>AngleBracket</item>\n      <item>ArrayPad</item>\n      <item>AbsoluteTiming</item>\n      <item>Animate</item>\n      <item>ArrayPlot</item>\n      <item>AccountingForm</item>\n      <item>AnimationDirection</item>\n      <item>ArrayQ</item>\n      <item>Accumulate</item>\n      <item>AnimationDisplayTime</item>\n      <item>ArrayRules</item>\n      <item>Accuracy</item>\n      <item>AnimationRate</item>\n      <item>Arrow</item>\n      <item>AccuracyGoal</item>\n      <item>AnimationRepetitions</item>\n      <item>Arrowheads</item>\n      <item>ActionMenu</item>\n      <item>AnimationRunning</item>\n      <item>AspectRatio</item>\n      <item>ActiveStyle</item>\n      <item>Animator</item>\n      <item>Assert</item>\n      <item>AcyclicGraphQ</item>\n      <item>Annotation</item>\n      <item>Assuming</item>\n      <item>AddTo</item>\n      <item>Annuity</item>\n      <item>Assumptions</item>\n      <item>AdjacencyGraph</item>\n      <item>AnnuityDue</item>\n      <item>AstronomicalData</item>\n      <item>AdjacencyMatrix</item>\n      <item>Antialiasing</item>\n      <item>Asynchronous</item>\n      <item>AdjustmentBox</item>\n      <item>Apart</item>\n      <item>AtomQ</item>\n      <item>AffineTransform</item>\n      <item>ApartSquareFree</item>\n      <item>Attributes</item>\n      <item>AiryAi</item>\n      <item>Appearance</item>\n      <item>AugmentedSymmetricPolynomial</item>\n      <item>AiryAiPrime</item>\n      <item>AppearanceElements</item>\n      <item>AutoAction</item>\n      <item>AiryAiZero</item>\n      <item>AppellF1</item>\n      <item>AutoIndent</item>\n      <item>AiryBi</item>\n      <item>Append</item>\n      <item>AutoItalicWords</item>\n      <item>AiryBiPrime</item>\n      <item>AppendTo</item>\n      <item>Automatic</item>\n      <item>AiryBiZero</item>\n      <item>Apply</item>\n      <item>AutoMultiplicationSymbol</item>\n      <item>AlgebraicIntegerQ</item>\n      <item>ArcCos</item>\n      <item>AutorunSequencing</item>\n      <item>AlgebraicNumber</item>\n      <item>ArcCosh</item>\n      <item>AutoScroll</item>\n      <item>AlgebraicNumberDenominator</item>\n      <item>ArcCot</item>\n      <item>AutoSpacing</item>\n      <item>AlgebraicNumberNorm</item>\n      <item>ArcCoth</item>\n      <item>Axes</item>\n      <item>AlgebraicNumberPolynomial</item>\n      <item>ArcCsc</item>\n      <item>AxesEdge</item>\n      <item>AlgebraicNumberTrace</item>\n      <item>ArcCsch</item>\n      <item>AxesLabel</item>\n      <item>Algebraics</item>\n      <item>ArcSec</item>\n      <item>AxesOrigin</item>\n      <item>AlgebraicUnitQ</item>\n      <item>ArcSech</item>\n      <item>AxesStyle</item>\n      <item>Alignment</item>\n      <item>ArcSin</item>\n      <item>Axis</item>\n      <item>AlignmentPoint</item>\n      <item>ArcSinDistribution</item>\n      <item>B</item>\n      <item>BabyMonsterGroupB</item>\n      <item>BetaRegularized</item>\n      <item>BooleanGraph</item>\n      <item>Back</item>\n      <item>BetweennessCentrality</item>\n      <item>BooleanMaxterms</item>\n      <item>Background</item>\n      <item>BezierCurve</item>\n      <item>BooleanMinimize</item>\n      <item>Backslash</item>\n      <item>BezierFunction</item>\n      <item>BooleanMinterms</item>\n      <item>Backward</item>\n      <item>BilateralFilter</item>\n      <item>Booleans</item>\n      <item>Band</item>\n      <item>Binarize</item>\n      <item>BooleanTable</item>\n      <item>BarabasiAlbertGraphDistribution</item>\n      <item>BinaryFormat</item>\n      <item>BooleanVariables</item>\n      <item>BarChart</item>\n      <item>BinaryImageQ</item>\n      <item>BorderDimensions</item>\n      <item>BarChart3D</item>\n      <item>BinaryRead</item>\n      <item>BorelTannerDistribution</item>\n      <item>BarnesG</item>\n      <item>BinaryReadList</item>\n      <item>Bottom</item>\n      <item>BarOrigin</item>\n      <item>BinaryWrite</item>\n      <item>BottomHatTransform</item>\n      <item>BarSpacing</item>\n      <item>BinCounts</item>\n      <item>BoundaryStyle</item>\n      <item>BaseForm</item>\n      <item>BinLists</item>\n      <item>BoxData</item>\n      <item>Baseline</item>\n      <item>Binomial</item>\n      <item>Boxed</item>\n      <item>BaselinePosition</item>\n      <item>BinomialDistribution</item>\n      <item>BoxMatrix</item>\n      <item>BaseStyle</item>\n      <item>BinormalDistribution</item>\n      <item>BoxRatios</item>\n      <item>BatesDistribution</item>\n      <item>BiorthogonalSplineWavelet</item>\n      <item>BoxStyle</item>\n      <item>BattleLemarieWavelet</item>\n      <item>BipartiteGraphQ</item>\n      <item>BoxWhiskerChart</item>\n      <item>Because</item>\n      <item>BirnbaumSaundersDistribution</item>\n      <item>BracketingBar</item>\n      <item>BeckmannDistribution</item>\n      <item>BitAnd</item>\n      <item>BrayCurtisDistance</item>\n      <item>Beep</item>\n      <item>BitClear</item>\n      <item>BreadthFirstScan</item>\n      <item>Begin</item>\n      <item>BitGet</item>\n      <item>Break</item>\n      <item>BeginDialogPacket</item>\n      <item>BitLength</item>\n      <item>Brown</item>\n      <item>BeginPackage</item>\n      <item>BitNot</item>\n      <item>BrownForsytheTest</item>\n      <item>BellB</item>\n      <item>BitOr</item>\n      <item>BSplineBasis</item>\n      <item>BellY</item>\n      <item>BitSet</item>\n      <item>BSplineCurve</item>\n      <item>BenfordDistribution</item>\n      <item>BitShiftLeft</item>\n      <item>BSplineFunction</item>\n      <item>BeniniDistribution</item>\n      <item>BitShiftRight</item>\n      <item>BSplineSurface</item>\n      <item>BenktanderGibratDistribution</item>\n      <item>BitXor</item>\n      <item>BubbleChart</item>\n      <item>BenktanderWeibullDistribution</item>\n      <item>Black</item>\n      <item>BubbleChart3D</item>\n      <item>BernoulliB</item>\n      <item>Blank</item>\n      <item>BubbleScale</item>\n      <item>BernoulliDistribution</item>\n      <item>BlankNullSequence</item>\n      <item>BubbleSizes</item>\n      <item>BernoulliGraphDistribution</item>\n      <item>BlankSequence</item>\n      <item>ButterflyGraph</item>\n      <item>BernsteinBasis</item>\n      <item>Blend</item>\n      <item>Button</item>\n      <item>BesselI</item>\n      <item>Block</item>\n      <item>ButtonBar</item>\n      <item>BesselJ</item>\n      <item>BlockRandom</item>\n      <item>ButtonBox</item>\n      <item>BesselJZero</item>\n      <item>Blue</item>\n      <item>ButtonData</item>\n      <item>BesselK</item>\n      <item>Blur</item>\n      <item>ButtonFrame</item>\n      <item>BesselY</item>\n      <item>BodePlot</item>\n      <item>ButtonFunction</item>\n      <item>BesselYZero</item>\n      <item>Bold</item>\n      <item>ButtonMinHeight</item>\n      <item>Beta</item>\n      <item>Bookmarks</item>\n      <item>ButtonNotebook</item>\n      <item>BetaBinomialDistribution</item>\n      <item>Boole</item>\n      <item>ButtonSource</item>\n      <item>BetaDistribution</item>\n      <item>BooleanConvert</item>\n      <item>Byte</item>\n      <item>BetaNegativeBinomialDistribution</item>\n      <item>BooleanCountingFunction</item>\n      <item>ByteCount</item>\n      <item>BetaPrimeDistribution</item>\n      <item>BooleanFunction</item>\n      <item>ByteOrdering</item>\n      <item>C</item>\n      <item>C</item>\n      <item>CityData</item>\n      <item>ContinuousAction</item>\n      <item>CallPacket</item>\n      <item>Clear</item>\n      <item>ContinuousTimeModelQ</item>\n      <item>CanberraDistance</item>\n      <item>ClearAll</item>\n      <item>ContinuousWaveletData</item>\n      <item>Cancel</item>\n      <item>ClearAttributes</item>\n      <item>ContinuousWaveletTransform</item>\n      <item>CancelButton</item>\n      <item>ClearSystemCache</item>\n      <item>ContourDetect</item>\n      <item>CandlestickChart</item>\n      <item>ClebschGordan</item>\n      <item>ContourLabels</item>\n      <item>Cap</item>\n      <item>ClickPane</item>\n      <item>ContourPlot</item>\n      <item>CapForm</item>\n      <item>Clip</item>\n      <item>ContourPlot3D</item>\n      <item>CapitalDifferentialD</item>\n      <item>ClippingStyle</item>\n      <item>Contours</item>\n      <item>CarmichaelLambda</item>\n      <item>Clock</item>\n      <item>ContourShading</item>\n      <item>Cases</item>\n      <item>Close</item>\n      <item>ContourStyle</item>\n      <item>Cashflow</item>\n      <item>CloseKernels</item>\n      <item>ContraharmonicMean</item>\n      <item>Casoratian</item>\n      <item>ClosenessCentrality</item>\n      <item>Control</item>\n      <item>Catalan</item>\n      <item>Closing</item>\n      <item>ControlActive</item>\n      <item>CatalanNumber</item>\n      <item>ClusteringComponents</item>\n      <item>ControllabilityGramian</item>\n      <item>Catch</item>\n      <item>CMYKColor</item>\n      <item>ControllabilityMatrix</item>\n      <item>CauchyDistribution</item>\n      <item>Coefficient</item>\n      <item>ControllableDecomposition</item>\n      <item>CayleyGraph</item>\n      <item>CoefficientArrays</item>\n      <item>ControllableModelQ</item>\n      <item>CDF</item>\n      <item>CoefficientList</item>\n      <item>ControllerInformation</item>\n      <item>CDFWavelet</item>\n      <item>CoefficientRules</item>\n      <item>ControllerLinking</item>\n      <item>Ceiling</item>\n      <item>CoifletWavelet</item>\n      <item>ControllerManipulate</item>\n      <item>Cell</item>\n      <item>Collect</item>\n      <item>ControllerMethod</item>\n      <item>CellAutoOverwrite</item>\n      <item>Colon</item>\n      <item>ControllerPath</item>\n      <item>CellBaseline</item>\n      <item>ColorCombine</item>\n      <item>ControllerState</item>\n      <item>CellChangeTimes</item>\n      <item>ColorConvert</item>\n      <item>ControlPlacement</item>\n      <item>CellContext</item>\n      <item>ColorData</item>\n      <item>ControlsRendering</item>\n      <item>CellDingbat</item>\n      <item>ColorDataFunction</item>\n      <item>ControlType</item>\n      <item>CellDynamicExpression</item>\n      <item>ColorFunction</item>\n      <item>Convergents</item>\n      <item>CellEditDuplicate</item>\n      <item>ColorFunctionScaling</item>\n      <item>ConversionRules</item>\n      <item>CellEpilog</item>\n      <item>Colorize</item>\n      <item>Convolve</item>\n      <item>CellEvaluationDuplicate</item>\n      <item>ColorNegate</item>\n      <item>ConwayGroupCo1</item>\n      <item>CellEvaluationFunction</item>\n      <item>ColorQuantize</item>\n      <item>ConwayGroupCo2</item>\n      <item>CellEventActions</item>\n      <item>ColorRules</item>\n      <item>ConwayGroupCo3</item>\n      <item>CellFrame</item>\n      <item>ColorSeparate</item>\n      <item>CoordinatesToolOptions</item>\n      <item>CellFrameMargins</item>\n      <item>ColorSetter</item>\n      <item>CoprimeQ</item>\n      <item>CellGroup</item>\n      <item>ColorSlider</item>\n      <item>Coproduct</item>\n      <item>CellGroupData</item>\n      <item>ColorSpace</item>\n      <item>CopulaDistribution</item>\n      <item>CellGrouping</item>\n      <item>Column</item>\n      <item>Copyable</item>\n      <item>CellLabel</item>\n      <item>ColumnAlignments</item>\n      <item>CopyDirectory</item>\n      <item>CellLabelAutoDelete</item>\n      <item>ColumnLines</item>\n      <item>CopyFile</item>\n      <item>CellMargins</item>\n      <item>ColumnsEqual</item>\n      <item>CopyToClipboard</item>\n      <item>CellOpen</item>\n      <item>ColumnSpacings</item>\n      <item>CornerFilter</item>\n      <item>CellPrint</item>\n      <item>ColumnWidths</item>\n      <item>CornerNeighbors</item>\n      <item>CellProlog</item>\n      <item>Commonest</item>\n      <item>Correlation</item>\n      <item>CellTags</item>\n      <item>CommonestFilter</item>\n      <item>CorrelationDistance</item>\n      <item>CellularAutomaton</item>\n      <item>CompilationOptions</item>\n      <item>Cos</item>\n      <item>CensoredDistribution</item>\n      <item>CompilationTarget</item>\n      <item>Cosh</item>\n      <item>Censoring</item>\n      <item>Compile</item>\n      <item>CoshIntegral</item>\n      <item>Center</item>\n      <item>Compiled</item>\n      <item>CosineDistance</item>\n      <item>CenterDot</item>\n      <item>CompiledFunction</item>\n      <item>CosIntegral</item>\n      <item>CentralMoment</item>\n      <item>Complement</item>\n      <item>Cot</item>\n      <item>CentralMomentGeneratingFunction</item>\n      <item>CompleteGraph</item>\n      <item>Coth</item>\n      <item>CForm</item>\n      <item>CompleteGraphQ</item>\n      <item>Count</item>\n      <item>ChampernowneNumber</item>\n      <item>CompleteKaryTree</item>\n      <item>CountRoots</item>\n      <item>ChanVeseBinarize</item>\n      <item>Complex</item>\n      <item>CountryData</item>\n      <item>Character</item>\n      <item>Complexes</item>\n      <item>Covariance</item>\n      <item>CharacterEncoding</item>\n      <item>ComplexExpand</item>\n      <item>CovarianceEstimatorFunction</item>\n      <item>CharacteristicFunction</item>\n      <item>ComplexInfinity</item>\n      <item>CramerVonMisesTest</item>\n      <item>CharacteristicPolynomial</item>\n      <item>ComplexityFunction</item>\n      <item>CreateArchive</item>\n      <item>CharacterRange</item>\n      <item>ComponentMeasurements</item>\n      <item>CreateDialog</item>\n      <item>Characters</item>\n      <item>ComposeList</item>\n      <item>CreateDirectory</item>\n      <item>ChartBaseStyle</item>\n      <item>ComposeSeries</item>\n      <item>CreateDocument</item>\n      <item>ChartElementFunction</item>\n      <item>Composition</item>\n      <item>CreateIntermediateDirectories</item>\n      <item>ChartElements</item>\n      <item>CompoundExpression</item>\n      <item>CreatePalette</item>\n      <item>ChartLabels</item>\n      <item>Compress</item>\n      <item>CreateScheduledTask</item>\n      <item>ChartLayout</item>\n      <item>Condition</item>\n      <item>CreateWindow</item>\n      <item>ChartLegends</item>\n      <item>ConditionalExpression</item>\n      <item>CriticalSection</item>\n      <item>ChartStyle</item>\n      <item>Conditioned</item>\n      <item>Cross</item>\n      <item>ChebyshevT</item>\n      <item>Cone</item>\n      <item>CrossingDetect</item>\n      <item>ChebyshevU</item>\n      <item>ConfidenceLevel</item>\n      <item>CrossMatrix</item>\n      <item>Check</item>\n      <item>Congruent</item>\n      <item>Csc</item>\n      <item>CheckAbort</item>\n      <item>Conjugate</item>\n      <item>Csch</item>\n      <item>Checkbox</item>\n      <item>ConjugateTranspose</item>\n      <item>Cubics</item>\n      <item>CheckboxBar</item>\n      <item>Conjunction</item>\n      <item>Cuboid</item>\n      <item>ChemicalData</item>\n      <item>ConnectedComponents</item>\n      <item>Cumulant</item>\n      <item>ChessboardDistance</item>\n      <item>ConnectedGraphQ</item>\n      <item>CumulantGeneratingFunction</item>\n      <item>ChiDistribution</item>\n      <item>ConoverTest</item>\n      <item>Cup</item>\n      <item>ChineseRemainder</item>\n      <item>Constant</item>\n      <item>CupCap</item>\n      <item>ChiSquareDistribution</item>\n      <item>ConstantArray</item>\n      <item>CurrentImage</item>\n      <item>ChoiceButtons</item>\n      <item>Constants</item>\n      <item>CurrentValue</item>\n      <item>ChoiceDialog</item>\n      <item>ContentPadding</item>\n      <item>CurvatureFlowFilter</item>\n      <item>CholeskyDecomposition</item>\n      <item>ContentSelectable</item>\n      <item>CurveClosed</item>\n      <item>Chop</item>\n      <item>ContentSize</item>\n      <item>Cyan</item>\n      <item>Circle</item>\n      <item>Context</item>\n      <item>CycleGraph</item>\n      <item>CircleDot</item>\n      <item>Contexts</item>\n      <item>Cycles</item>\n      <item>CircleMinus</item>\n      <item>ContextToFileName</item>\n      <item>CyclicGroup</item>\n      <item>CirclePlus</item>\n      <item>Continue</item>\n      <item>Cyclotomic</item>\n      <item>CircleTimes</item>\n      <item>ContinuedFraction</item>\n      <item>Cylinder</item>\n      <item>CirculantGraph</item>\n      <item>ContinuedFractionK</item>\n      <item>CylindricalDecomposition</item>\n      <item>D</item>\n      <item>D</item>\n      <item>DepthFirstScan</item>\n      <item>DiskMatrix</item>\n      <item>DagumDistribution</item>\n      <item>Derivative</item>\n      <item>Dispatch</item>\n      <item>DamerauLevenshteinDistance</item>\n      <item>DerivativeFilter</item>\n      <item>DispersionEstimatorFunction</item>\n      <item>Darker</item>\n      <item>DesignMatrix</item>\n      <item>DisplayAllSteps</item>\n      <item>Dashed</item>\n      <item>Det</item>\n      <item>DisplayEndPacket</item>\n      <item>Dashing</item>\n      <item>DGaussianWavelet</item>\n      <item>DisplayForm</item>\n      <item>DataDistribution</item>\n      <item>Diagonal</item>\n      <item>DisplayFunction</item>\n      <item>DataRange</item>\n      <item>DiagonalMatrix</item>\n      <item>DisplayPacket</item>\n      <item>DataReversed</item>\n      <item>Dialog</item>\n      <item>DistanceFunction</item>\n      <item>DateDifference</item>\n      <item>DialogInput</item>\n      <item>DistanceTransform</item>\n      <item>DateFunction</item>\n      <item>DialogNotebook</item>\n      <item>Distribute</item>\n      <item>DateList</item>\n      <item>DialogProlog</item>\n      <item>Distributed</item>\n      <item>DateListLogPlot</item>\n      <item>DialogReturn</item>\n      <item>DistributedContexts</item>\n      <item>DateListPlot</item>\n      <item>DialogSymbols</item>\n      <item>DistributeDefinitions</item>\n      <item>DatePattern</item>\n      <item>Diamond</item>\n      <item>DistributionChart</item>\n      <item>DatePlus</item>\n      <item>DiamondMatrix</item>\n      <item>DistributionFitTest</item>\n      <item>DateString</item>\n      <item>DiceDissimilarity</item>\n      <item>DistributionParameterAssumptions</item>\n      <item>DateTicksFormat</item>\n      <item>DictionaryLookup</item>\n      <item>DistributionParameterQ</item>\n      <item>DaubechiesWavelet</item>\n      <item>DifferenceDelta</item>\n      <item>Divide</item>\n      <item>DavisDistribution</item>\n      <item>DifferenceRoot</item>\n      <item>DivideBy</item>\n      <item>DawsonF</item>\n      <item>DifferenceRootReduce</item>\n      <item>Dividers</item>\n      <item>DeBruijnGraph</item>\n      <item>Differences</item>\n      <item>Divisible</item>\n      <item>DeclarePackage</item>\n      <item>DifferentialD</item>\n      <item>Divisors</item>\n      <item>Decompose</item>\n      <item>DifferentialRoot</item>\n      <item>DivisorSigma</item>\n      <item>Decrement</item>\n      <item>DifferentialRootReduce</item>\n      <item>DivisorSum</item>\n      <item>DedekindEta</item>\n      <item>DigitBlock</item>\n      <item>DMSList</item>\n      <item>Default</item>\n      <item>DigitCharacter</item>\n      <item>DMSString</item>\n      <item>DefaultAxesStyle</item>\n      <item>DigitCount</item>\n      <item>Do</item>\n      <item>DefaultBaseStyle</item>\n      <item>DigitQ</item>\n      <item>DockedCells</item>\n      <item>DefaultBoxStyle</item>\n      <item>DihedralGroup</item>\n      <item>DocumentNotebook</item>\n      <item>DefaultButton</item>\n      <item>Dilation</item>\n      <item>Dot</item>\n      <item>DefaultDuplicateCellStyle</item>\n      <item>Dimensions</item>\n      <item>DotDashed</item>\n      <item>DefaultDuration</item>\n      <item>DiracComb</item>\n      <item>DotEqual</item>\n      <item>DefaultElement</item>\n      <item>DiracDelta</item>\n      <item>Dotted</item>\n      <item>DefaultFaceGridsStyle</item>\n      <item>DirectedEdge</item>\n      <item>DoubleBracketingBar</item>\n      <item>DefaultFieldHintStyle</item>\n      <item>DirectedEdges</item>\n      <item>DoubleDownArrow</item>\n      <item>DefaultFrameStyle</item>\n      <item>DirectedGraph</item>\n      <item>DoubleLeftArrow</item>\n      <item>DefaultFrameTicksStyle</item>\n      <item>DirectedGraphQ</item>\n      <item>DoubleLeftRightArrow</item>\n      <item>DefaultGridLinesStyle</item>\n      <item>DirectedInfinity</item>\n      <item>DoubleLongLeftArrow</item>\n      <item>DefaultLabelStyle</item>\n      <item>Direction</item>\n      <item>DoubleLongLeftRightArrow</item>\n      <item>DefaultMenuStyle</item>\n      <item>Directive</item>\n      <item>DoubleLongRightArrow</item>\n      <item>DefaultNewCellStyle</item>\n      <item>Directory</item>\n      <item>DoubleRightArrow</item>\n      <item>DefaultOptions</item>\n      <item>DirectoryName</item>\n      <item>DoubleUpArrow</item>\n      <item>DefaultTicksStyle</item>\n      <item>DirectoryQ</item>\n      <item>DoubleUpDownArrow</item>\n      <item>Defer</item>\n      <item>DirectoryStack</item>\n      <item>DoubleVerticalBar</item>\n      <item>Definition</item>\n      <item>DirichletCharacter</item>\n      <item>DownArrow</item>\n      <item>Degree</item>\n      <item>DirichletConvolve</item>\n      <item>DownArrowBar</item>\n      <item>DegreeCentrality</item>\n      <item>DirichletDistribution</item>\n      <item>DownArrowUpArrow</item>\n      <item>DegreeGraphDistribution</item>\n      <item>DirichletL</item>\n      <item>DownLeftRightVector</item>\n      <item>Deinitialization</item>\n      <item>DirichletTransform</item>\n      <item>DownLeftTeeVector</item>\n      <item>Del</item>\n      <item>DiscreteConvolve</item>\n      <item>DownLeftVector</item>\n      <item>Deletable</item>\n      <item>DiscreteDelta</item>\n      <item>DownLeftVectorBar</item>\n      <item>Delete</item>\n      <item>DiscreteIndicator</item>\n      <item>DownRightTeeVector</item>\n      <item>DeleteBorderComponents</item>\n      <item>DiscreteLQEstimatorGains</item>\n      <item>DownRightVector</item>\n      <item>DeleteCases</item>\n      <item>DiscreteLQRegulatorGains</item>\n      <item>DownRightVectorBar</item>\n      <item>DeleteContents</item>\n      <item>DiscreteLyapunovSolve</item>\n      <item>DownTeeArrow</item>\n      <item>DeleteDirectory</item>\n      <item>DiscretePlot</item>\n      <item>DownValues</item>\n      <item>DeleteDuplicates</item>\n      <item>DiscretePlot3D</item>\n      <item>DragAndDrop</item>\n      <item>DeleteFile</item>\n      <item>DiscreteRatio</item>\n      <item>Drop</item>\n      <item>DeleteSmallComponents</item>\n      <item>DiscreteRiccatiSolve</item>\n      <item>DSolve</item>\n      <item>Delimiter</item>\n      <item>DiscreteShift</item>\n      <item>Dt</item>\n      <item>DelimiterFlashTime</item>\n      <item>DiscreteTimeModelQ</item>\n      <item>DualSystemsModel</item>\n      <item>Denominator</item>\n      <item>DiscreteUniformDistribution</item>\n      <item>DumpSave</item>\n      <item>DensityHistogram</item>\n      <item>DiscreteWaveletData</item>\n      <item>Dynamic</item>\n      <item>DensityPlot</item>\n      <item>DiscreteWaveletPacketTransform</item>\n      <item>DynamicEvaluationTimeout</item>\n      <item>DependentVariables</item>\n      <item>DiscreteWaveletTransform</item>\n      <item>DynamicModule</item>\n      <item>Deploy</item>\n      <item>Discriminant</item>\n      <item>DynamicModuleValues</item>\n      <item>Deployed</item>\n      <item>Disjunction</item>\n      <item>DynamicSetting</item>\n      <item>Depth</item>\n      <item>Disk</item>\n      <item>DynamicWrapper</item>\n      <item>E</item>\n      <item>E</item>\n      <item>End</item>\n      <item>ExactNumberQ</item>\n      <item>EdgeAdd</item>\n      <item>EndDialogPacket</item>\n      <item>ExampleData</item>\n      <item>EdgeCount</item>\n      <item>EndOfFile</item>\n      <item>Except</item>\n      <item>EdgeCoverQ</item>\n      <item>EndOfLine</item>\n      <item>ExcludedForms</item>\n      <item>EdgeDelete</item>\n      <item>EndOfString</item>\n      <item>ExcludePods</item>\n      <item>EdgeDetect</item>\n      <item>EndPackage</item>\n      <item>Exclusions</item>\n      <item>EdgeForm</item>\n      <item>EngineeringForm</item>\n      <item>ExclusionsStyle</item>\n      <item>EdgeIndex</item>\n      <item>EnterExpressionPacket</item>\n      <item>Exists</item>\n      <item>EdgeLabeling</item>\n      <item>EnterTextPacket</item>\n      <item>Exit</item>\n      <item>EdgeLabels</item>\n      <item>Entropy</item>\n      <item>Exp</item>\n      <item>EdgeList</item>\n      <item>EntropyFilter</item>\n      <item>Expand</item>\n      <item>EdgeQ</item>\n      <item>Environment</item>\n      <item>ExpandAll</item>\n      <item>EdgeRenderingFunction</item>\n      <item>Epilog</item>\n      <item>ExpandDenominator</item>\n      <item>EdgeRules</item>\n      <item>Equal</item>\n      <item>ExpandFileName</item>\n      <item>EdgeShapeFunction</item>\n      <item>EqualTilde</item>\n      <item>ExpandNumerator</item>\n      <item>EdgeStyle</item>\n      <item>Equilibrium</item>\n      <item>Expectation</item>\n      <item>EdgeWeight</item>\n      <item>Equivalent</item>\n      <item>ExpGammaDistribution</item>\n      <item>Editable</item>\n      <item>Erf</item>\n      <item>ExpIntegralE</item>\n      <item>EditDistance</item>\n      <item>Erfc</item>\n      <item>ExpIntegralEi</item>\n      <item>EffectiveInterest</item>\n      <item>Erfi</item>\n      <item>Exponent</item>\n      <item>Eigensystem</item>\n      <item>ErlangDistribution</item>\n      <item>ExponentFunction</item>\n      <item>Eigenvalues</item>\n      <item>Erosion</item>\n      <item>ExponentialDistribution</item>\n      <item>EigenvectorCentrality</item>\n      <item>ErrorBox</item>\n      <item>ExponentialFamily</item>\n      <item>Eigenvectors</item>\n      <item>EstimatedDistribution</item>\n      <item>ExponentialGeneratingFunction</item>\n      <item>Element</item>\n      <item>EstimatorGains</item>\n      <item>ExponentialMovingAverage</item>\n      <item>ElementData</item>\n      <item>EstimatorRegulator</item>\n      <item>ExponentialPowerDistribution</item>\n      <item>Eliminate</item>\n      <item>EuclideanDistance</item>\n      <item>ExponentStep</item>\n      <item>EllipticE</item>\n      <item>EulerE</item>\n      <item>Export</item>\n      <item>EllipticExp</item>\n      <item>EulerGamma</item>\n      <item>ExportString</item>\n      <item>EllipticExpPrime</item>\n      <item>EulerianGraphQ</item>\n      <item>Expression</item>\n      <item>EllipticF</item>\n      <item>EulerPhi</item>\n      <item>ExpressionCell</item>\n      <item>EllipticK</item>\n      <item>Evaluatable</item>\n      <item>ExpToTrig</item>\n      <item>EllipticLog</item>\n      <item>Evaluate</item>\n      <item>ExtendedGCD</item>\n      <item>EllipticNomeQ</item>\n      <item>EvaluatePacket</item>\n      <item>Extension</item>\n      <item>EllipticPi</item>\n      <item>EvaluationElements</item>\n      <item>ExtentElementFunction</item>\n      <item>EllipticTheta</item>\n      <item>EvaluationMonitor</item>\n      <item>ExtentMarkers</item>\n      <item>EllipticThetaPrime</item>\n      <item>EvaluationNotebook</item>\n      <item>ExtentSize</item>\n      <item>EmitSound</item>\n      <item>EvaluationObject</item>\n      <item>Extract</item>\n      <item>EmpiricalDistribution</item>\n      <item>Evaluator</item>\n      <item>ExtractArchive</item>\n      <item>EmptyGraphQ</item>\n      <item>EvenQ</item>\n      <item>ExtremeValueDistribution</item>\n      <item>Enabled</item>\n      <item>EventHandler</item>\n      <item>Encode</item>\n      <item>EventLabels</item>\n      <item>F</item>\n      <item>FaceForm</item>\n      <item>FindFit</item>\n      <item>FormBox</item>\n      <item>FaceGrids</item>\n      <item>FindGeneratingFunction</item>\n      <item>FortranForm</item>\n      <item>FaceGridsStyle</item>\n      <item>FindGeoLocation</item>\n      <item>Forward</item>\n      <item>Factor</item>\n      <item>FindGeometricTransform</item>\n      <item>ForwardBackward</item>\n      <item>Factorial</item>\n      <item>FindGraphIsomorphism</item>\n      <item>Fourier</item>\n      <item>Factorial2</item>\n      <item>FindHamiltonianCycle</item>\n      <item>FourierCoefficient</item>\n      <item>FactorialMoment</item>\n      <item>FindIndependentEdgeSet</item>\n      <item>FourierCosCoefficient</item>\n      <item>FactorialMomentGeneratingFunction</item>\n      <item>FindIndependentVertexSet</item>\n      <item>FourierCosSeries</item>\n      <item>FactorialPower</item>\n      <item>FindInstance</item>\n      <item>FourierCosTransform</item>\n      <item>FactorInteger</item>\n      <item>FindIntegerNullVector</item>\n      <item>FourierDCT</item>\n      <item>FactorList</item>\n      <item>FindLibrary</item>\n      <item>FourierDST</item>\n      <item>FactorSquareFree</item>\n      <item>FindLinearRecurrence</item>\n      <item>FourierParameters</item>\n      <item>FactorSquareFreeList</item>\n      <item>FindList</item>\n      <item>FourierSequenceTransform</item>\n      <item>FactorTerms</item>\n      <item>FindMaximum</item>\n      <item>FourierSeries</item>\n      <item>FactorTermsList</item>\n      <item>FindMaxValue</item>\n      <item>FourierSinCoefficient</item>\n      <item>False</item>\n      <item>FindMinimum</item>\n      <item>FourierSinSeries</item>\n      <item>FeedbackType</item>\n      <item>FindMinValue</item>\n      <item>FourierSinTransform</item>\n      <item>Fibonacci</item>\n      <item>FindPermutation</item>\n      <item>FourierTransform</item>\n      <item>FieldHint</item>\n      <item>FindRoot</item>\n      <item>FourierTrigSeries</item>\n      <item>FieldHintStyle</item>\n      <item>FindSequenceFunction</item>\n      <item>FractionalPart</item>\n      <item>FieldMasked</item>\n      <item>FindShortestPath</item>\n      <item>FractionBox</item>\n      <item>FieldSize</item>\n      <item>FindShortestTour</item>\n      <item>Frame</item>\n      <item>FileBaseName</item>\n      <item>FindThreshold</item>\n      <item>FrameBox</item>\n      <item>FileByteCount</item>\n      <item>FindVertexCover</item>\n      <item>Framed</item>\n      <item>FileDate</item>\n      <item>FinishDynamic</item>\n      <item>FrameLabel</item>\n      <item>FileExistsQ</item>\n      <item>FiniteAbelianGroupCount</item>\n      <item>FrameMargins</item>\n      <item>FileExtension</item>\n      <item>FiniteGroupCount</item>\n      <item>FrameStyle</item>\n      <item>FileFormat</item>\n      <item>FiniteGroupData</item>\n      <item>FrameTicks</item>\n      <item>FileHash</item>\n      <item>First</item>\n      <item>FrameTicksStyle</item>\n      <item>FileNameDepth</item>\n      <item>FischerGroupFi22</item>\n      <item>FRatioDistribution</item>\n      <item>FileNameDrop</item>\n      <item>FischerGroupFi23</item>\n      <item>FrechetDistribution</item>\n      <item>FileNameJoin</item>\n      <item>FischerGroupFi24Prime</item>\n      <item>FreeQ</item>\n      <item>FileNames</item>\n      <item>FisherHypergeometricDistribution</item>\n      <item>FresnelC</item>\n      <item>FileNameSetter</item>\n      <item>FisherRatioTest</item>\n      <item>FresnelS</item>\n      <item>FileNameSplit</item>\n      <item>FisherZDistribution</item>\n      <item>FrobeniusNumber</item>\n      <item>FileNameTake</item>\n      <item>Fit</item>\n      <item>FrobeniusSolve</item>\n      <item>FilePrint</item>\n      <item>FittedModel</item>\n      <item>FromCharacterCode</item>\n      <item>FileType</item>\n      <item>FixedPoint</item>\n      <item>FromCoefficientRules</item>\n      <item>FilledCurve</item>\n      <item>FixedPointList</item>\n      <item>FromContinuedFraction</item>\n      <item>Filling</item>\n      <item>Flat</item>\n      <item>FromDigits</item>\n      <item>FillingStyle</item>\n      <item>Flatten</item>\n      <item>FromDMS</item>\n      <item>FillingTransform</item>\n      <item>FlattenAt</item>\n      <item>Front</item>\n      <item>FilterRules</item>\n      <item>FlipView</item>\n      <item>FrontEndDynamicExpression</item>\n      <item>FinancialBond</item>\n      <item>Floor</item>\n      <item>FrontEndEventActions</item>\n      <item>FinancialData</item>\n      <item>Fold</item>\n      <item>FrontEndExecute</item>\n      <item>FinancialDerivative</item>\n      <item>FoldList</item>\n      <item>FrontEndToken</item>\n      <item>FinancialIndicator</item>\n      <item>FontColor</item>\n      <item>FrontEndTokenExecute</item>\n      <item>Find</item>\n      <item>FontFamily</item>\n      <item>Full</item>\n      <item>FindArgMax</item>\n      <item>FontSize</item>\n      <item>FullDefinition</item>\n      <item>FindArgMin</item>\n      <item>FontSlant</item>\n      <item>FullForm</item>\n      <item>FindClique</item>\n      <item>FontSubstitutions</item>\n      <item>FullGraphics</item>\n      <item>FindClusters</item>\n      <item>FontTracking</item>\n      <item>FullSimplify</item>\n      <item>FindCurvePath</item>\n      <item>FontVariations</item>\n      <item>Function</item>\n      <item>FindDistributionParameters</item>\n      <item>FontWeight</item>\n      <item>FunctionExpand</item>\n      <item>FindDivisions</item>\n      <item>For</item>\n      <item>FunctionInterpolation</item>\n      <item>FindEdgeCover</item>\n      <item>ForAll</item>\n      <item>FunctionSpace</item>\n      <item>FindEulerianCycle</item>\n      <item>Format</item>\n      <item>FindFile</item>\n      <item>FormatType</item>\n      <item>G</item>\n      <item>GaborWavelet</item>\n      <item>GeoPositionXYZ</item>\n      <item>GraphStyle</item>\n      <item>GainMargins</item>\n      <item>GeoProjectionData</item>\n      <item>GraphUnion</item>\n      <item>GainPhaseMargins</item>\n      <item>Get</item>\n      <item>Gray</item>\n      <item>Gamma</item>\n      <item>Glaisher</item>\n      <item>GrayLevel</item>\n      <item>GammaDistribution</item>\n      <item>Glow</item>\n      <item>Greater</item>\n      <item>GammaRegularized</item>\n      <item>GoldenRatio</item>\n      <item>GreaterEqual</item>\n      <item>GapPenalty</item>\n      <item>GompertzMakehamDistribution</item>\n      <item>GreaterEqualLess</item>\n      <item>Gather</item>\n      <item>Goto</item>\n      <item>GreaterFullEqual</item>\n      <item>GatherBy</item>\n      <item>Gradient</item>\n      <item>GreaterGreater</item>\n      <item>GaussianFilter</item>\n      <item>GradientFilter</item>\n      <item>GreaterLess</item>\n      <item>GaussianIntegers</item>\n      <item>Graph</item>\n      <item>GreaterSlantEqual</item>\n      <item>GaussianMatrix</item>\n      <item>GraphCenter</item>\n      <item>GreaterTilde</item>\n      <item>GCD</item>\n      <item>GraphComplement</item>\n      <item>Green</item>\n      <item>GegenbauerC</item>\n      <item>GraphData</item>\n      <item>Grid</item>\n      <item>General</item>\n      <item>GraphDiameter</item>\n      <item>GridBox</item>\n      <item>GeneralizedLinearModelFit</item>\n      <item>GraphDifference</item>\n      <item>GridDefaultElement</item>\n      <item>GenerateConditions</item>\n      <item>GraphDisjointUnion</item>\n      <item>GridGraph</item>\n      <item>GeneratedCell</item>\n      <item>GraphDistance</item>\n      <item>GridLines</item>\n      <item>GeneratedParameters</item>\n      <item>GraphDistanceMatrix</item>\n      <item>GridLinesStyle</item>\n      <item>GeneratingFunction</item>\n      <item>GraphHighlight</item>\n      <item>GroebnerBasis</item>\n      <item>GenericCylindricalDecomposition</item>\n      <item>GraphHighlightStyle</item>\n      <item>GroupActionBase</item>\n      <item>GenomeData</item>\n      <item>Graphics</item>\n      <item>GroupCentralizer</item>\n      <item>GenomeLookup</item>\n      <item>Graphics3D</item>\n      <item>GroupElementPosition</item>\n      <item>GeodesicDilation</item>\n      <item>GraphicsColumn</item>\n      <item>GroupElementQ</item>\n      <item>GeodesicErosion</item>\n      <item>GraphicsComplex</item>\n      <item>GroupElements</item>\n      <item>GeoDestination</item>\n      <item>GraphicsGrid</item>\n      <item>GroupGenerators</item>\n      <item>GeodesyData</item>\n      <item>GraphicsGroup</item>\n      <item>GroupMultiplicationTable</item>\n      <item>GeoDirection</item>\n      <item>GraphicsRow</item>\n      <item>GroupOrbits</item>\n      <item>GeoDistance</item>\n      <item>GraphIntersection</item>\n      <item>GroupOrder</item>\n      <item>GeoGridPosition</item>\n      <item>GraphLayout</item>\n      <item>GroupPageBreakWithin</item>\n      <item>GeometricDistribution</item>\n      <item>GraphPeriphery</item>\n      <item>GroupSetwiseStabilizer</item>\n      <item>GeometricMean</item>\n      <item>GraphPlot</item>\n      <item>GroupStabilizer</item>\n      <item>GeometricMeanFilter</item>\n      <item>GraphPlot3D</item>\n      <item>GroupStabilizerChain</item>\n      <item>GeometricTransformation</item>\n      <item>GraphPower</item>\n      <item>Gudermannian</item>\n      <item>GeoPosition</item>\n      <item>GraphQ</item>\n      <item>GumbelDistribution</item>\n      <item>GeoPositionENU</item>\n      <item>GraphRadius</item>\n      <item>H</item>\n      <item>HaarWavelet</item>\n      <item>HermitianMatrixQ</item>\n      <item>Hue</item>\n      <item>HalfNormalDistribution</item>\n      <item>HessenbergDecomposition</item>\n      <item>HumpDownHump</item>\n      <item>HamiltonianGraphQ</item>\n      <item>HexadecimalCharacter</item>\n      <item>HumpEqual</item>\n      <item>HammingDistance</item>\n      <item>HighlightGraph</item>\n      <item>HurwitzLerchPhi</item>\n      <item>HankelH1</item>\n      <item>HigmanSimsGroupHS</item>\n      <item>HurwitzZeta</item>\n      <item>HankelH2</item>\n      <item>HilbertMatrix</item>\n      <item>HyperbolicDistribution</item>\n      <item>HankelMatrix</item>\n      <item>Histogram</item>\n      <item>HypercubeGraph</item>\n      <item>HaradaNortonGroupHN</item>\n      <item>Histogram3D</item>\n      <item>Hyperfactorial</item>\n      <item>HararyGraph</item>\n      <item>HistogramDistribution</item>\n      <item>Hypergeometric0F1</item>\n      <item>HarmonicMean</item>\n      <item>HistogramList</item>\n      <item>Hypergeometric0F1Regularized</item>\n      <item>HarmonicMeanFilter</item>\n      <item>HitMissTransform</item>\n      <item>Hypergeometric1F1</item>\n      <item>HarmonicNumber</item>\n      <item>HITSCentrality</item>\n      <item>Hypergeometric1F1Regularized</item>\n      <item>Hash</item>\n      <item>Hold</item>\n      <item>Hypergeometric2F1</item>\n      <item>Haversine</item>\n      <item>HoldAll</item>\n      <item>Hypergeometric2F1Regularized</item>\n      <item>HazardFunction</item>\n      <item>HoldAllComplete</item>\n      <item>HypergeometricDistribution</item>\n      <item>Head</item>\n      <item>HoldComplete</item>\n      <item>HypergeometricPFQ</item>\n      <item>Heads</item>\n      <item>HoldFirst</item>\n      <item>HypergeometricPFQRegularized</item>\n      <item>HeavisideLambda</item>\n      <item>HoldForm</item>\n      <item>HypergeometricU</item>\n      <item>HeavisidePi</item>\n      <item>HoldPattern</item>\n      <item>Hyperlink</item>\n      <item>HeavisideTheta</item>\n      <item>HoldRest</item>\n      <item>Hyphenation</item>\n      <item>HeldGroupHe</item>\n      <item>HornerForm</item>\n      <item>HypothesisTestData</item>\n      <item>HermiteDecomposition</item>\n      <item>HotellingTSquareDistribution</item>\n      <item>HermiteH</item>\n      <item>HoytDistribution</item>\n      <item>I</item>\n      <item>I</item>\n      <item>ImportString</item>\n      <item>Interrupt</item>\n      <item>Identity</item>\n      <item>In</item>\n      <item>Intersection</item>\n      <item>IdentityMatrix</item>\n      <item>IncidenceGraph</item>\n      <item>Interval</item>\n      <item>If</item>\n      <item>IncidenceMatrix</item>\n      <item>IntervalIntersection</item>\n      <item>IgnoreCase</item>\n      <item>IncludeConstantBasis</item>\n      <item>IntervalMemberQ</item>\n      <item>Im</item>\n      <item>IncludePods</item>\n      <item>IntervalUnion</item>\n      <item>Image</item>\n      <item>Increment</item>\n      <item>Inverse</item>\n      <item>ImageAdd</item>\n      <item>IndependentEdgeSetQ</item>\n      <item>InverseBetaRegularized</item>\n      <item>ImageAdjust</item>\n      <item>IndependentVertexSetQ</item>\n      <item>InverseCDF</item>\n      <item>ImageAlign</item>\n      <item>Indeterminate</item>\n      <item>InverseChiSquareDistribution</item>\n      <item>ImageApply</item>\n      <item>IndexGraph</item>\n      <item>InverseContinuousWaveletTransform</item>\n      <item>ImageAspectRatio</item>\n      <item>InexactNumberQ</item>\n      <item>InverseDistanceTransform</item>\n      <item>ImageAssemble</item>\n      <item>Infinity</item>\n      <item>InverseEllipticNomeQ</item>\n      <item>ImageCapture</item>\n      <item>Infix</item>\n      <item>InverseErf</item>\n      <item>ImageChannels</item>\n      <item>Information</item>\n      <item>InverseErfc</item>\n      <item>ImageClip</item>\n      <item>Inherited</item>\n      <item>InverseFourier</item>\n      <item>ImageColorSpace</item>\n      <item>Initialization</item>\n      <item>InverseFourierCosTransform</item>\n      <item>ImageCompose</item>\n      <item>InitializationCell</item>\n      <item>InverseFourierSequenceTransform</item>\n      <item>ImageConvolve</item>\n      <item>Inner</item>\n      <item>InverseFourierSinTransform</item>\n      <item>ImageCooccurrence</item>\n      <item>Inpaint</item>\n      <item>InverseFourierTransform</item>\n      <item>ImageCorrelate</item>\n      <item>Input</item>\n      <item>InverseFunction</item>\n      <item>ImageCorrespondingPoints</item>\n      <item>InputAliases</item>\n      <item>InverseFunctions</item>\n      <item>ImageCrop</item>\n      <item>InputAssumptions</item>\n      <item>InverseGammaDistribution</item>\n      <item>ImageData</item>\n      <item>InputAutoReplacements</item>\n      <item>InverseGammaRegularized</item>\n      <item>ImageDeconvolve</item>\n      <item>InputField</item>\n      <item>InverseGaussianDistribution</item>\n      <item>ImageDifference</item>\n      <item>InputForm</item>\n      <item>InverseGudermannian</item>\n      <item>ImageDimensions</item>\n      <item>InputNamePacket</item>\n      <item>InverseHaversine</item>\n      <item>ImageEffect</item>\n      <item>InputNotebook</item>\n      <item>InverseJacobiCD</item>\n      <item>ImageFilter</item>\n      <item>InputPacket</item>\n      <item>InverseJacobiCN</item>\n      <item>ImageForestingComponents</item>\n      <item>InputStream</item>\n      <item>InverseJacobiCS</item>\n      <item>ImageForwardTransformation</item>\n      <item>InputString</item>\n      <item>InverseJacobiDC</item>\n      <item>ImageHistogram</item>\n      <item>InputStringPacket</item>\n      <item>InverseJacobiDN</item>\n      <item>ImageKeypoints</item>\n      <item>Insert</item>\n      <item>InverseJacobiDS</item>\n      <item>ImageLevels</item>\n      <item>InsertResults</item>\n      <item>InverseJacobiNC</item>\n      <item>ImageLines</item>\n      <item>Inset</item>\n      <item>InverseJacobiND</item>\n      <item>ImageMargins</item>\n      <item>Install</item>\n      <item>InverseJacobiNS</item>\n      <item>ImageMultiply</item>\n      <item>InstallService</item>\n      <item>InverseJacobiSC</item>\n      <item>ImagePad</item>\n      <item>InString</item>\n      <item>InverseJacobiSD</item>\n      <item>ImagePadding</item>\n      <item>Integer</item>\n      <item>InverseJacobiSN</item>\n      <item>ImagePartition</item>\n      <item>IntegerDigits</item>\n      <item>InverseLaplaceTransform</item>\n      <item>ImagePerspectiveTransformation</item>\n      <item>IntegerExponent</item>\n      <item>InversePermutation</item>\n      <item>ImageQ</item>\n      <item>IntegerLength</item>\n      <item>InverseRadon</item>\n      <item>ImageReflect</item>\n      <item>IntegerPart</item>\n      <item>InverseSeries</item>\n      <item>ImageResize</item>\n      <item>IntegerPartitions</item>\n      <item>InverseSurvivalFunction</item>\n      <item>ImageResolution</item>\n      <item>IntegerQ</item>\n      <item>InverseWaveletTransform</item>\n      <item>ImageRotate</item>\n      <item>Integers</item>\n      <item>InverseWeierstrassP</item>\n      <item>ImageScaled</item>\n      <item>IntegerString</item>\n      <item>InverseZTransform</item>\n      <item>ImageSize</item>\n      <item>Integrate</item>\n      <item>Invisible</item>\n      <item>ImageSizeAction</item>\n      <item>InteractiveTradingChart</item>\n      <item>IrreduciblePolynomialQ</item>\n      <item>ImageSizeMultipliers</item>\n      <item>Interleaving</item>\n      <item>IsolatingInterval</item>\n      <item>ImageSubtract</item>\n      <item>InternallyBalancedDecomposition</item>\n      <item>IsomorphicGraphQ</item>\n      <item>ImageTake</item>\n      <item>InterpolatingFunction</item>\n      <item>IsotopeData</item>\n      <item>ImageTransformation</item>\n      <item>InterpolatingPolynomial</item>\n      <item>Italic</item>\n      <item>ImageTrim</item>\n      <item>Interpolation</item>\n      <item>Item</item>\n      <item>ImageType</item>\n      <item>InterpolationOrder</item>\n      <item>ItemAspectRatio</item>\n      <item>ImageValue</item>\n      <item>Interpretation</item>\n      <item>ItemSize</item>\n      <item>Implies</item>\n      <item>InterpretationBox</item>\n      <item>ItemStyle</item>\n      <item>Import</item>\n      <item>InterquartileRange</item>\n      <item>J</item>\n      <item>JaccardDissimilarity</item>\n      <item>JacobiNS</item>\n      <item>JankoGroupJ4</item>\n      <item>JacobiAmplitude</item>\n      <item>JacobiP</item>\n      <item>JarqueBeraALMTest</item>\n      <item>JacobiCD</item>\n      <item>JacobiSC</item>\n      <item>JohnsonDistribution</item>\n      <item>JacobiCN</item>\n      <item>JacobiSD</item>\n      <item>Join</item>\n      <item>JacobiCS</item>\n      <item>JacobiSN</item>\n      <item>Joined</item>\n      <item>JacobiDC</item>\n      <item>JacobiSymbol</item>\n      <item>JoinedCurve</item>\n      <item>JacobiDN</item>\n      <item>JacobiZeta</item>\n      <item>JoinForm</item>\n      <item>JacobiDS</item>\n      <item>JankoGroupJ1</item>\n      <item>JordanDecomposition</item>\n      <item>JacobiNC</item>\n      <item>JankoGroupJ2</item>\n      <item>JordanModelDecomposition</item>\n      <item>JacobiND</item>\n      <item>JankoGroupJ3</item>\n      <item>K</item>\n      <item>KagiChart</item>\n      <item>KelvinKer</item>\n      <item>KolmogorovSmirnovTest</item>\n      <item>KalmanEstimator</item>\n      <item>KernelMixtureDistribution</item>\n      <item>KroneckerDelta</item>\n      <item>KarhunenLoeveDecomposition</item>\n      <item>KernelObject</item>\n      <item>KroneckerProduct</item>\n      <item>KaryTree</item>\n      <item>Kernels</item>\n      <item>KroneckerSymbol</item>\n      <item>KatzCentrality</item>\n      <item>Khinchin</item>\n      <item>KuiperTest</item>\n      <item>KCoreComponents</item>\n      <item>KirchhoffGraph</item>\n      <item>KumaraswamyDistribution</item>\n      <item>KDistribution</item>\n      <item>KirchhoffMatrix</item>\n      <item>Kurtosis</item>\n      <item>KelvinBei</item>\n      <item>KleinInvariantJ</item>\n      <item>KuwaharaFilter</item>\n      <item>KelvinBer</item>\n      <item>KnightTourGraph</item>\n      <item>KelvinKei</item>\n      <item>KnotData</item>\n      <item>L</item>\n      <item>Label</item>\n      <item>LibraryFunction</item>\n      <item>ListDensityPlot</item>\n      <item>Labeled</item>\n      <item>LibraryFunctionError</item>\n      <item>ListInterpolation</item>\n      <item>LabelingFunction</item>\n      <item>LibraryFunctionInformation</item>\n      <item>ListLineIntegralConvolutionPlot</item>\n      <item>LabelStyle</item>\n      <item>LibraryFunctionLoad</item>\n      <item>ListLinePlot</item>\n      <item>LaguerreL</item>\n      <item>LibraryFunctionUnload</item>\n      <item>ListLogLinearPlot</item>\n      <item>LandauDistribution</item>\n      <item>LibraryLoad</item>\n      <item>ListLogLogPlot</item>\n      <item>LanguageCategory</item>\n      <item>LibraryUnload</item>\n      <item>ListLogPlot</item>\n      <item>LaplaceDistribution</item>\n      <item>LiftingFilterData</item>\n      <item>ListPlay</item>\n      <item>LaplaceTransform</item>\n      <item>LiftingWaveletTransform</item>\n      <item>ListPlot</item>\n      <item>LaplacianFilter</item>\n      <item>LightBlue</item>\n      <item>ListPlot3D</item>\n      <item>LaplacianGaussianFilter</item>\n      <item>LightBrown</item>\n      <item>ListPointPlot3D</item>\n      <item>Large</item>\n      <item>LightCyan</item>\n      <item>ListPolarPlot</item>\n      <item>Larger</item>\n      <item>Lighter</item>\n      <item>ListStreamDensityPlot</item>\n      <item>Last</item>\n      <item>LightGray</item>\n      <item>ListStreamPlot</item>\n      <item>Latitude</item>\n      <item>LightGreen</item>\n      <item>ListSurfacePlot3D</item>\n      <item>LatitudeLongitude</item>\n      <item>Lighting</item>\n      <item>ListVectorDensityPlot</item>\n      <item>LatticeData</item>\n      <item>LightingAngle</item>\n      <item>ListVectorPlot</item>\n      <item>LatticeReduce</item>\n      <item>LightMagenta</item>\n      <item>ListVectorPlot3D</item>\n      <item>LaunchKernels</item>\n      <item>LightOrange</item>\n      <item>LocalizeVariables</item>\n      <item>LayeredGraphPlot</item>\n      <item>LightPink</item>\n      <item>LocationEquivalenceTest</item>\n      <item>LayerSizeFunction</item>\n      <item>LightPurple</item>\n      <item>LocationTest</item>\n      <item>LCM</item>\n      <item>LightRed</item>\n      <item>Locator</item>\n      <item>LeafCount</item>\n      <item>LightYellow</item>\n      <item>LocatorAutoCreate</item>\n      <item>LeastSquares</item>\n      <item>Likelihood</item>\n      <item>LocatorPane</item>\n      <item>Left</item>\n      <item>Limit</item>\n      <item>LocatorRegion</item>\n      <item>LeftArrow</item>\n      <item>LimitsPositioning</item>\n      <item>Locked</item>\n      <item>LeftArrowBar</item>\n      <item>LindleyDistribution</item>\n      <item>Log</item>\n      <item>LeftArrowRightArrow</item>\n      <item>Line</item>\n      <item>Log10</item>\n      <item>LeftDownTeeVector</item>\n      <item>LinearFractionalTransform</item>\n      <item>Log2</item>\n      <item>LeftDownVector</item>\n      <item>LinearModelFit</item>\n      <item>LogBarnesG</item>\n      <item>LeftDownVectorBar</item>\n      <item>LinearOffsetFunction</item>\n      <item>LogGamma</item>\n      <item>LeftRightArrow</item>\n      <item>LinearProgramming</item>\n      <item>LogGammaDistribution</item>\n      <item>LeftRightVector</item>\n      <item>LinearRecurrence</item>\n      <item>LogicalExpand</item>\n      <item>LeftTeeArrow</item>\n      <item>LinearSolve</item>\n      <item>LogIntegral</item>\n      <item>LeftTeeVector</item>\n      <item>LinearSolveFunction</item>\n      <item>LogisticDistribution</item>\n      <item>LeftTriangle</item>\n      <item>LineBreakChart</item>\n      <item>LogitModelFit</item>\n      <item>LeftTriangleBar</item>\n      <item>LineGraph</item>\n      <item>LogLikelihood</item>\n      <item>LeftTriangleEqual</item>\n      <item>LineIndent</item>\n      <item>LogLinearPlot</item>\n      <item>LeftUpDownVector</item>\n      <item>LineIndentMaxFraction</item>\n      <item>LogLogisticDistribution</item>\n      <item>LeftUpTeeVector</item>\n      <item>LineIntegralConvolutionPlot</item>\n      <item>LogLogPlot</item>\n      <item>LeftUpVector</item>\n      <item>LineIntegralConvolutionScale</item>\n      <item>LogNormalDistribution</item>\n      <item>LeftUpVectorBar</item>\n      <item>LineSpacing</item>\n      <item>LogPlot</item>\n      <item>LeftVector</item>\n      <item>LinkClose</item>\n      <item>LogSeriesDistribution</item>\n      <item>LeftVectorBar</item>\n      <item>LinkConnect</item>\n      <item>Longest</item>\n      <item>LegendAppearance</item>\n      <item>LinkCreate</item>\n      <item>LongestCommonSequence</item>\n      <item>Legended</item>\n      <item>LinkFunction</item>\n      <item>LongestCommonSubsequence</item>\n      <item>LegendreP</item>\n      <item>LinkInterrupt</item>\n      <item>Longitude</item>\n      <item>LegendreQ</item>\n      <item>LinkLaunch</item>\n      <item>LongLeftArrow</item>\n      <item>Length</item>\n      <item>LinkObject</item>\n      <item>LongLeftRightArrow</item>\n      <item>LengthWhile</item>\n      <item>LinkPatterns</item>\n      <item>LongRightArrow</item>\n      <item>LerchPhi</item>\n      <item>LinkProtocol</item>\n      <item>LoopFreeGraphQ</item>\n      <item>Less</item>\n      <item>LinkRead</item>\n      <item>LowerCaseQ</item>\n      <item>LessEqual</item>\n      <item>LinkReadyQ</item>\n      <item>LowerLeftArrow</item>\n      <item>LessEqualGreater</item>\n      <item>Links</item>\n      <item>LowerRightArrow</item>\n      <item>LessFullEqual</item>\n      <item>LinkWrite</item>\n      <item>LowerTriangularize</item>\n      <item>LessGreater</item>\n      <item>LiouvilleLambda</item>\n      <item>LQEstimatorGains</item>\n      <item>LessLess</item>\n      <item>List</item>\n      <item>LQGRegulator</item>\n      <item>LessSlantEqual</item>\n      <item>Listable</item>\n      <item>LQOutputRegulatorGains</item>\n      <item>LessTilde</item>\n      <item>ListAnimate</item>\n      <item>LQRegulatorGains</item>\n      <item>LetterCharacter</item>\n      <item>ListContourPlot</item>\n      <item>LucasL</item>\n      <item>LetterQ</item>\n      <item>ListContourPlot3D</item>\n      <item>LUDecomposition</item>\n      <item>Level</item>\n      <item>ListConvolve</item>\n      <item>LyapunovSolve</item>\n      <item>LeveneTest</item>\n      <item>ListCorrelate</item>\n      <item>LyonsGroupLy</item>\n      <item>LeviCivitaTensor</item>\n      <item>ListCurvePathPlot</item>\n      <item>LevyDistribution</item>\n      <item>ListDeconvolve</item>\n      <item>M</item>\n      <item>MachineNumberQ</item>\n      <item>MaxDetect</item>\n      <item>MinDetect</item>\n      <item>MachinePrecision</item>\n      <item>MaxExtraBandwidths</item>\n      <item>MinFilter</item>\n      <item>Magenta</item>\n      <item>MaxExtraConditions</item>\n      <item>MinimalPolynomial</item>\n      <item>Magnification</item>\n      <item>MaxFilter</item>\n      <item>MinimalStateSpaceModel</item>\n      <item>Magnify</item>\n      <item>Maximize</item>\n      <item>Minimize</item>\n      <item>Majority</item>\n      <item>MaxIterations</item>\n      <item>Minors</item>\n      <item>MakeBoxes</item>\n      <item>MaxMemoryUsed</item>\n      <item>MinStableDistribution</item>\n      <item>MakeExpression</item>\n      <item>MaxMixtureKernels</item>\n      <item>Minus</item>\n      <item>MangoldtLambda</item>\n      <item>MaxPlotPoints</item>\n      <item>MinusPlus</item>\n      <item>ManhattanDistance</item>\n      <item>MaxRecursion</item>\n      <item>MinValue</item>\n      <item>Manipulate</item>\n      <item>MaxStableDistribution</item>\n      <item>Missing</item>\n      <item>Manipulator</item>\n      <item>MaxStepFraction</item>\n      <item>MixtureDistribution</item>\n      <item>MannWhitneyTest</item>\n      <item>MaxSteps</item>\n      <item>Mod</item>\n      <item>MantissaExponent</item>\n      <item>MaxStepSize</item>\n      <item>Modal</item>\n      <item>Manual</item>\n      <item>MaxValue</item>\n      <item>ModularLambda</item>\n      <item>Map</item>\n      <item>MaxwellDistribution</item>\n      <item>Module</item>\n      <item>MapAll</item>\n      <item>McLaughlinGroupMcL</item>\n      <item>Modulus</item>\n      <item>MapAt</item>\n      <item>Mean</item>\n      <item>MoebiusMu</item>\n      <item>MapIndexed</item>\n      <item>MeanDeviation</item>\n      <item>Moment</item>\n      <item>MapThread</item>\n      <item>MeanFilter</item>\n      <item>MomentConvert</item>\n      <item>MarcumQ</item>\n      <item>MeanShift</item>\n      <item>MomentEvaluate</item>\n      <item>MardiaCombinedTest</item>\n      <item>MeanShiftFilter</item>\n      <item>MomentGeneratingFunction</item>\n      <item>MardiaKurtosisTest</item>\n      <item>Median</item>\n      <item>Monitor</item>\n      <item>MardiaSkewnessTest</item>\n      <item>MedianDeviation</item>\n      <item>MonomialList</item>\n      <item>MarginalDistribution</item>\n      <item>MedianFilter</item>\n      <item>MonsterGroupM</item>\n      <item>Masking</item>\n      <item>Medium</item>\n      <item>MorletWavelet</item>\n      <item>MatchingDissimilarity</item>\n      <item>MeijerG</item>\n      <item>MorphologicalBinarize</item>\n      <item>MatchLocalNames</item>\n      <item>MemberQ</item>\n      <item>MorphologicalBranchPoints</item>\n      <item>MatchQ</item>\n      <item>MemoryConstrained</item>\n      <item>MorphologicalComponents</item>\n      <item>MathieuC</item>\n      <item>MemoryInUse</item>\n      <item>MorphologicalEulerNumber</item>\n      <item>MathieuCharacteristicA</item>\n      <item>MenuCommandKey</item>\n      <item>MorphologicalGraph</item>\n      <item>MathieuCharacteristicB</item>\n      <item>MenuPacket</item>\n      <item>MorphologicalPerimeter</item>\n      <item>MathieuCharacteristicExponent</item>\n      <item>MenuSortingValue</item>\n      <item>MorphologicalTransform</item>\n      <item>MathieuCPrime</item>\n      <item>MenuStyle</item>\n      <item>Most</item>\n      <item>MathieuGroupM11</item>\n      <item>MenuView</item>\n      <item>MouseAnnotation</item>\n      <item>MathieuGroupM12</item>\n      <item>Mesh</item>\n      <item>MouseAppearance</item>\n      <item>MathieuGroupM22</item>\n      <item>MeshFunctions</item>\n      <item>Mouseover</item>\n      <item>MathieuGroupM23</item>\n      <item>MeshShading</item>\n      <item>MousePosition</item>\n      <item>MathieuGroupM24</item>\n      <item>MeshStyle</item>\n      <item>MovingAverage</item>\n      <item>MathieuS</item>\n      <item>Message</item>\n      <item>MovingMedian</item>\n      <item>MathieuSPrime</item>\n      <item>MessageDialog</item>\n      <item>MoyalDistribution</item>\n      <item>MathMLForm</item>\n      <item>MessageList</item>\n      <item>MultiedgeStyle</item>\n      <item>MatrixExp</item>\n      <item>MessageName</item>\n      <item>Multinomial</item>\n      <item>MatrixForm</item>\n      <item>MessagePacket</item>\n      <item>MultinomialDistribution</item>\n      <item>MatrixPlot</item>\n      <item>Messages</item>\n      <item>MultinormalDistribution</item>\n      <item>MatrixPower</item>\n      <item>Method</item>\n      <item>MultiplicativeOrder</item>\n      <item>MatrixQ</item>\n      <item>MexicanHatWavelet</item>\n      <item>MultivariateHypergeometricDistribution</item>\n      <item>MatrixRank</item>\n      <item>MeyerWavelet</item>\n      <item>MultivariatePoissonDistribution</item>\n      <item>Max</item>\n      <item>Min</item>\n      <item>MultivariateTDistribution</item>\n      <item>N</item>\n      <item>N</item>\n      <item>NormalizedSquaredEuclideanDistance</item>\n      <item>NotPrecedesSlantEqual</item>\n      <item>NakagamiDistribution</item>\n      <item>NormalsFunction</item>\n      <item>NotPrecedesTilde</item>\n      <item>NameQ</item>\n      <item>NormFunction</item>\n      <item>NotReverseElement</item>\n      <item>Names</item>\n      <item>Not</item>\n      <item>NotRightTriangle</item>\n      <item>Nand</item>\n      <item>NotCongruent</item>\n      <item>NotRightTriangleBar</item>\n      <item>NArgMax</item>\n      <item>NotCupCap</item>\n      <item>NotRightTriangleEqual</item>\n      <item>NArgMin</item>\n      <item>NotDoubleVerticalBar</item>\n      <item>NotSquareSubset</item>\n      <item>NCache</item>\n      <item>Notebook</item>\n      <item>NotSquareSubsetEqual</item>\n      <item>NDSolve</item>\n      <item>NotebookApply</item>\n      <item>NotSquareSuperset</item>\n      <item>Nearest</item>\n      <item>NotebookAutoSave</item>\n      <item>NotSquareSupersetEqual</item>\n      <item>NearestFunction</item>\n      <item>NotebookClose</item>\n      <item>NotSubset</item>\n      <item>NeedlemanWunschSimilarity</item>\n      <item>NotebookDelete</item>\n      <item>NotSubsetEqual</item>\n      <item>Needs</item>\n      <item>NotebookDirectory</item>\n      <item>NotSucceeds</item>\n      <item>Negative</item>\n      <item>NotebookDynamicExpression</item>\n      <item>NotSucceedsEqual</item>\n      <item>NegativeBinomialDistribution</item>\n      <item>NotebookEvaluate</item>\n      <item>NotSucceedsSlantEqual</item>\n      <item>NegativeMultinomialDistribution</item>\n      <item>NotebookEventActions</item>\n      <item>NotSucceedsTilde</item>\n      <item>NeighborhoodGraph</item>\n      <item>NotebookFileName</item>\n      <item>NotSuperset</item>\n      <item>Nest</item>\n      <item>NotebookFind</item>\n      <item>NotSupersetEqual</item>\n      <item>NestedGreaterGreater</item>\n      <item>NotebookGet</item>\n      <item>NotTilde</item>\n      <item>NestedLessLess</item>\n      <item>NotebookInformation</item>\n      <item>NotTildeEqual</item>\n      <item>NestList</item>\n      <item>NotebookLocate</item>\n      <item>NotTildeFullEqual</item>\n      <item>NestWhile</item>\n      <item>NotebookObject</item>\n      <item>NotTildeTilde</item>\n      <item>NestWhileList</item>\n      <item>NotebookOpen</item>\n      <item>NotVerticalBar</item>\n      <item>NevilleThetaC</item>\n      <item>NotebookPrint</item>\n      <item>NProbability</item>\n      <item>NevilleThetaD</item>\n      <item>NotebookPut</item>\n      <item>NProduct</item>\n      <item>NevilleThetaN</item>\n      <item>NotebookRead</item>\n      <item>NRoots</item>\n      <item>NevilleThetaS</item>\n      <item>Notebooks</item>\n      <item>NSolve</item>\n      <item>NExpectation</item>\n      <item>NotebookSave</item>\n      <item>NSum</item>\n      <item>NextPrime</item>\n      <item>NotebookSelection</item>\n      <item>Null</item>\n      <item>NHoldAll</item>\n      <item>NotebookWrite</item>\n      <item>NullRecords</item>\n      <item>NHoldFirst</item>\n      <item>NotElement</item>\n      <item>NullSpace</item>\n      <item>NHoldRest</item>\n      <item>NotEqualTilde</item>\n      <item>NullWords</item>\n      <item>NicholsGridLines</item>\n      <item>NotExists</item>\n      <item>Number</item>\n      <item>NicholsPlot</item>\n      <item>NotGreater</item>\n      <item>NumberFieldClassNumber</item>\n      <item>NIntegrate</item>\n      <item>NotGreaterEqual</item>\n      <item>NumberFieldDiscriminant</item>\n      <item>NMaximize</item>\n      <item>NotGreaterFullEqual</item>\n      <item>NumberFieldFundamentalUnits</item>\n      <item>NMaxValue</item>\n      <item>NotGreaterGreater</item>\n      <item>NumberFieldIntegralBasis</item>\n      <item>NMinimize</item>\n      <item>NotGreaterLess</item>\n      <item>NumberFieldNormRepresentatives</item>\n      <item>NMinValue</item>\n      <item>NotGreaterSlantEqual</item>\n      <item>NumberFieldRegulator</item>\n      <item>NominalVariables</item>\n      <item>NotGreaterTilde</item>\n      <item>NumberFieldRootsOfUnity</item>\n      <item>NoncentralBetaDistribution</item>\n      <item>NotHumpDownHump</item>\n      <item>NumberFieldSignature</item>\n      <item>NoncentralChiSquareDistribution</item>\n      <item>NotHumpEqual</item>\n      <item>NumberForm</item>\n      <item>NoncentralFRatioDistribution</item>\n      <item>NotLeftTriangle</item>\n      <item>NumberFormat</item>\n      <item>NoncentralStudentTDistribution</item>\n      <item>NotLeftTriangleBar</item>\n      <item>NumberMarks</item>\n      <item>NonCommutativeMultiply</item>\n      <item>NotLeftTriangleEqual</item>\n      <item>NumberMultiplier</item>\n      <item>NonConstants</item>\n      <item>NotLess</item>\n      <item>NumberPadding</item>\n      <item>None</item>\n      <item>NotLessEqual</item>\n      <item>NumberPoint</item>\n      <item>NonlinearModelFit</item>\n      <item>NotLessFullEqual</item>\n      <item>NumberQ</item>\n      <item>NonNegative</item>\n      <item>NotLessGreater</item>\n      <item>NumberSeparator</item>\n      <item>NonPositive</item>\n      <item>NotLessLess</item>\n      <item>NumberSigns</item>\n      <item>Nor</item>\n      <item>NotLessSlantEqual</item>\n      <item>NumberString</item>\n      <item>NorlundB</item>\n      <item>NotLessTilde</item>\n      <item>Numerator</item>\n      <item>Norm</item>\n      <item>NotNestedGreaterGreater</item>\n      <item>NumericFunction</item>\n      <item>Normal</item>\n      <item>NotNestedLessLess</item>\n      <item>NumericQ</item>\n      <item>NormalDistribution</item>\n      <item>NotPrecedes</item>\n      <item>NyquistGridLines</item>\n      <item>Normalize</item>\n      <item>NotPrecedesEqual</item>\n      <item>NyquistPlot</item>\n      <item>O</item>\n      <item>O</item>\n      <item>Operate</item>\n      <item>OutputForm</item>\n      <item>ObservabilityGramian</item>\n      <item>OperatingSystem</item>\n      <item>OutputNamePacket</item>\n      <item>ObservabilityMatrix</item>\n      <item>Optional</item>\n      <item>OutputResponse</item>\n      <item>ObservableDecomposition</item>\n      <item>Options</item>\n      <item>OutputSizeLimit</item>\n      <item>ObservableModelQ</item>\n      <item>OptionsPattern</item>\n      <item>OutputStream</item>\n      <item>OddQ</item>\n      <item>OptionValue</item>\n      <item>OverBar</item>\n      <item>Off</item>\n      <item>Or</item>\n      <item>OverDot</item>\n      <item>Offset</item>\n      <item>Orange</item>\n      <item>Overflow</item>\n      <item>On</item>\n      <item>Order</item>\n      <item>OverHat</item>\n      <item>ONanGroupON</item>\n      <item>OrderDistribution</item>\n      <item>Overlaps</item>\n      <item>OneIdentity</item>\n      <item>OrderedQ</item>\n      <item>Overlay</item>\n      <item>Opacity</item>\n      <item>Ordering</item>\n      <item>Overscript</item>\n      <item>OpenAppend</item>\n      <item>Orderless</item>\n      <item>OverscriptBox</item>\n      <item>Opener</item>\n      <item>Orthogonalize</item>\n      <item>OverTilde</item>\n      <item>OpenerView</item>\n      <item>Out</item>\n      <item>OverVector</item>\n      <item>Opening</item>\n      <item>Outer</item>\n      <item>OwenT</item>\n      <item>OpenRead</item>\n      <item>OutputControllabilityMatrix</item>\n      <item>OwnValues</item>\n      <item>OpenWrite</item>\n      <item>OutputControllableModelQ</item>\n      <item>P</item>\n      <item>PackingMethod</item>\n      <item>PermutationList</item>\n      <item>PopupMenu</item>\n      <item>PaddedForm</item>\n      <item>PermutationListQ</item>\n      <item>PopupView</item>\n      <item>Padding</item>\n      <item>PermutationMax</item>\n      <item>PopupWindow</item>\n      <item>PadeApproximant</item>\n      <item>PermutationMin</item>\n      <item>Position</item>\n      <item>PadLeft</item>\n      <item>PermutationOrder</item>\n      <item>Positive</item>\n      <item>PadRight</item>\n      <item>PermutationPower</item>\n      <item>PositiveDefiniteMatrixQ</item>\n      <item>PageBreakAbove</item>\n      <item>PermutationProduct</item>\n      <item>PossibleZeroQ</item>\n      <item>PageBreakBelow</item>\n      <item>PermutationReplace</item>\n      <item>Postfix</item>\n      <item>PageBreakWithin</item>\n      <item>Permutations</item>\n      <item>Power</item>\n      <item>PageFooters</item>\n      <item>PermutationSupport</item>\n      <item>PowerDistribution</item>\n      <item>PageHeaders</item>\n      <item>Permute</item>\n      <item>PowerExpand</item>\n      <item>PageRankCentrality</item>\n      <item>PeronaMalikFilter</item>\n      <item>PowerMod</item>\n      <item>PageWidth</item>\n      <item>PERTDistribution</item>\n      <item>PowerModList</item>\n      <item>PairedBarChart</item>\n      <item>PetersenGraph</item>\n      <item>PowersRepresentations</item>\n      <item>PairedHistogram</item>\n      <item>PhaseMargins</item>\n      <item>PowerSymmetricPolynomial</item>\n      <item>PairedTTest</item>\n      <item>Pi</item>\n      <item>PrecedenceForm</item>\n      <item>PairedZTest</item>\n      <item>Pick</item>\n      <item>Precedes</item>\n      <item>PaletteNotebook</item>\n      <item>Piecewise</item>\n      <item>PrecedesEqual</item>\n      <item>Pane</item>\n      <item>PiecewiseExpand</item>\n      <item>PrecedesSlantEqual</item>\n      <item>Panel</item>\n      <item>PieChart</item>\n      <item>PrecedesTilde</item>\n      <item>Paneled</item>\n      <item>PieChart3D</item>\n      <item>Precision</item>\n      <item>PaneSelector</item>\n      <item>Pink</item>\n      <item>PrecisionGoal</item>\n      <item>ParabolicCylinderD</item>\n      <item>PixelConstrained</item>\n      <item>PreDecrement</item>\n      <item>ParagraphIndent</item>\n      <item>PixelValue</item>\n      <item>PreemptProtect</item>\n      <item>ParagraphSpacing</item>\n      <item>Placed</item>\n      <item>Prefix</item>\n      <item>ParallelArray</item>\n      <item>Placeholder</item>\n      <item>PreIncrement</item>\n      <item>ParallelCombine</item>\n      <item>PlaceholderReplace</item>\n      <item>Prepend</item>\n      <item>ParallelDo</item>\n      <item>Plain</item>\n      <item>PrependTo</item>\n      <item>ParallelEvaluate</item>\n      <item>Play</item>\n      <item>PreserveImageOptions</item>\n      <item>Parallelization</item>\n      <item>PlayRange</item>\n      <item>PriceGraphDistribution</item>\n      <item>Parallelize</item>\n      <item>Plot</item>\n      <item>Prime</item>\n      <item>ParallelMap</item>\n      <item>Plot3D</item>\n      <item>PrimeNu</item>\n      <item>ParallelNeeds</item>\n      <item>PlotLabel</item>\n      <item>PrimeOmega</item>\n      <item>ParallelProduct</item>\n      <item>PlotLayout</item>\n      <item>PrimePi</item>\n      <item>ParallelSubmit</item>\n      <item>PlotMarkers</item>\n      <item>PrimePowerQ</item>\n      <item>ParallelSum</item>\n      <item>PlotPoints</item>\n      <item>PrimeQ</item>\n      <item>ParallelTable</item>\n      <item>PlotRange</item>\n      <item>Primes</item>\n      <item>ParallelTry</item>\n      <item>PlotRangeClipping</item>\n      <item>PrimeZetaP</item>\n      <item>ParameterEstimator</item>\n      <item>PlotRangePadding</item>\n      <item>PrimitiveRoot</item>\n      <item>ParameterMixtureDistribution</item>\n      <item>PlotRegion</item>\n      <item>PrincipalComponents</item>\n      <item>ParametricPlot</item>\n      <item>PlotStyle</item>\n      <item>PrincipalValue</item>\n      <item>ParametricPlot3D</item>\n      <item>Plus</item>\n      <item>Print</item>\n      <item>ParentDirectory</item>\n      <item>PlusMinus</item>\n      <item>PrintingStyleEnvironment</item>\n      <item>ParetoDistribution</item>\n      <item>Pochhammer</item>\n      <item>PrintTemporary</item>\n      <item>Part</item>\n      <item>PodStates</item>\n      <item>Probability</item>\n      <item>ParticleData</item>\n      <item>PodWidth</item>\n      <item>ProbabilityDistribution</item>\n      <item>Partition</item>\n      <item>Point</item>\n      <item>ProbabilityPlot</item>\n      <item>PartitionsP</item>\n      <item>PointFigureChart</item>\n      <item>ProbabilityScalePlot</item>\n      <item>PartitionsQ</item>\n      <item>PointSize</item>\n      <item>ProbitModelFit</item>\n      <item>PascalDistribution</item>\n      <item>PoissonConsulDistribution</item>\n      <item>Product</item>\n      <item>PassEventsDown</item>\n      <item>PoissonDistribution</item>\n      <item>ProductDistribution</item>\n      <item>PassEventsUp</item>\n      <item>PolarAxes</item>\n      <item>ProductLog</item>\n      <item>Paste</item>\n      <item>PolarAxesOrigin</item>\n      <item>ProgressIndicator</item>\n      <item>PasteButton</item>\n      <item>PolarGridLines</item>\n      <item>Projection</item>\n      <item>Path</item>\n      <item>PolarPlot</item>\n      <item>Prolog</item>\n      <item>PathGraph</item>\n      <item>PolarTicks</item>\n      <item>Properties</item>\n      <item>PathGraphQ</item>\n      <item>PoleZeroMarkers</item>\n      <item>Property</item>\n      <item>Pattern</item>\n      <item>PolyaAeppliDistribution</item>\n      <item>PropertyList</item>\n      <item>PatternSequence</item>\n      <item>PolyGamma</item>\n      <item>PropertyValue</item>\n      <item>PatternTest</item>\n      <item>Polygon</item>\n      <item>Proportion</item>\n      <item>PauliMatrix</item>\n      <item>PolyhedronData</item>\n      <item>Proportional</item>\n      <item>PaulWavelet</item>\n      <item>PolyLog</item>\n      <item>Protect</item>\n      <item>Pause</item>\n      <item>PolynomialExtendedGCD</item>\n      <item>Protected</item>\n      <item>PDF</item>\n      <item>PolynomialGCD</item>\n      <item>ProteinData</item>\n      <item>PearsonChiSquareTest</item>\n      <item>PolynomialLCM</item>\n      <item>Pruning</item>\n      <item>PearsonDistribution</item>\n      <item>PolynomialMod</item>\n      <item>PseudoInverse</item>\n      <item>PerformanceGoal</item>\n      <item>PolynomialQ</item>\n      <item>Purple</item>\n      <item>PermutationCycles</item>\n      <item>PolynomialQuotient</item>\n      <item>Put</item>\n      <item>PermutationCyclesQ</item>\n      <item>PolynomialQuotientRemainder</item>\n      <item>PutAppend</item>\n      <item>PermutationGroup</item>\n      <item>PolynomialReduce</item>\n      <item>PermutationLength</item>\n      <item>PolynomialRemainder</item>\n      <item>Q</item>\n      <item>QBinomial</item>\n      <item>QRDecomposition</item>\n      <item>Quartiles</item>\n      <item>QFactorial</item>\n      <item>QuadraticIrrationalQ</item>\n      <item>QuartileSkewness</item>\n      <item>QGamma</item>\n      <item>Quantile</item>\n      <item>Quiet</item>\n      <item>QHypergeometricPFQ</item>\n      <item>QuantilePlot</item>\n      <item>Quit</item>\n      <item>QPochhammer</item>\n      <item>Quartics</item>\n      <item>Quotient</item>\n      <item>QPolyGamma</item>\n      <item>QuartileDeviation</item>\n      <item>QuotientRemainder</item>\n      <item>R</item>\n      <item>RadicalBox</item>\n      <item>RefreshRate</item>\n      <item>RightArrowBar</item>\n      <item>RadioButton</item>\n      <item>RegionBinarize</item>\n      <item>RightArrowLeftArrow</item>\n      <item>RadioButtonBar</item>\n      <item>RegionFunction</item>\n      <item>RightCosetRepresentative</item>\n      <item>Radon</item>\n      <item>RegionPlot</item>\n      <item>RightDownTeeVector</item>\n      <item>RamanujanTau</item>\n      <item>RegionPlot3D</item>\n      <item>RightDownVector</item>\n      <item>RamanujanTauL</item>\n      <item>RegularExpression</item>\n      <item>RightDownVectorBar</item>\n      <item>RamanujanTauTheta</item>\n      <item>Regularization</item>\n      <item>RightTeeArrow</item>\n      <item>RamanujanTauZ</item>\n      <item>ReleaseHold</item>\n      <item>RightTeeVector</item>\n      <item>RandomChoice</item>\n      <item>ReliefImage</item>\n      <item>RightTriangle</item>\n      <item>RandomComplex</item>\n      <item>ReliefPlot</item>\n      <item>RightTriangleBar</item>\n      <item>RandomGraph</item>\n      <item>Remove</item>\n      <item>RightTriangleEqual</item>\n      <item>RandomImage</item>\n      <item>RemoveAlphaChannel</item>\n      <item>RightUpDownVector</item>\n      <item>RandomInteger</item>\n      <item>RemoveProperty</item>\n      <item>RightUpTeeVector</item>\n      <item>RandomPermutation</item>\n      <item>RemoveScheduledTask</item>\n      <item>RightUpVector</item>\n      <item>RandomPrime</item>\n      <item>RenameDirectory</item>\n      <item>RightUpVectorBar</item>\n      <item>RandomReal</item>\n      <item>RenameFile</item>\n      <item>RightVector</item>\n      <item>RandomSample</item>\n      <item>RenkoChart</item>\n      <item>RightVectorBar</item>\n      <item>RandomVariate</item>\n      <item>Repeated</item>\n      <item>RogersTanimotoDissimilarity</item>\n      <item>Range</item>\n      <item>RepeatedNull</item>\n      <item>Root</item>\n      <item>RangeFilter</item>\n      <item>Replace</item>\n      <item>RootApproximant</item>\n      <item>RankedMax</item>\n      <item>ReplaceAll</item>\n      <item>RootIntervals</item>\n      <item>RankedMin</item>\n      <item>ReplaceList</item>\n      <item>RootLocusPlot</item>\n      <item>Raster</item>\n      <item>ReplacePart</item>\n      <item>RootMeanSquare</item>\n      <item>Rasterize</item>\n      <item>ReplaceRepeated</item>\n      <item>RootOfUnityQ</item>\n      <item>RasterSize</item>\n      <item>Resampling</item>\n      <item>RootReduce</item>\n      <item>Rational</item>\n      <item>Rescale</item>\n      <item>Roots</item>\n      <item>Rationalize</item>\n      <item>RescalingTransform</item>\n      <item>RootSum</item>\n      <item>Rationals</item>\n      <item>ResetDirectory</item>\n      <item>Rotate</item>\n      <item>Ratios</item>\n      <item>ResetScheduledTask</item>\n      <item>RotateLabel</item>\n      <item>RawBoxes</item>\n      <item>Residue</item>\n      <item>RotateLeft</item>\n      <item>RawData</item>\n      <item>Resolve</item>\n      <item>RotateRight</item>\n      <item>RayleighDistribution</item>\n      <item>Rest</item>\n      <item>RotationAction</item>\n      <item>Re</item>\n      <item>Resultant</item>\n      <item>RotationMatrix</item>\n      <item>Read</item>\n      <item>ResumePacket</item>\n      <item>RotationTransform</item>\n      <item>ReadList</item>\n      <item>Return</item>\n      <item>Round</item>\n      <item>ReadProtected</item>\n      <item>ReturnExpressionPacket</item>\n      <item>RoundingRadius</item>\n      <item>Real</item>\n      <item>ReturnPacket</item>\n      <item>Row</item>\n      <item>RealBlockDiagonalForm</item>\n      <item>ReturnTextPacket</item>\n      <item>RowAlignments</item>\n      <item>RealDigits</item>\n      <item>Reverse</item>\n      <item>RowBox</item>\n      <item>RealExponent</item>\n      <item>ReverseBiorthogonalSplineWavelet</item>\n      <item>RowLines</item>\n      <item>Reals</item>\n      <item>ReverseElement</item>\n      <item>RowMinHeight</item>\n      <item>Reap</item>\n      <item>ReverseEquilibrium</item>\n      <item>RowReduce</item>\n      <item>Record</item>\n      <item>ReverseGraph</item>\n      <item>RowsEqual</item>\n      <item>RecordLists</item>\n      <item>ReverseUpEquilibrium</item>\n      <item>RowSpacings</item>\n      <item>RecordSeparators</item>\n      <item>RevolutionAxis</item>\n      <item>RSolve</item>\n      <item>Rectangle</item>\n      <item>RevolutionPlot3D</item>\n      <item>RudvalisGroupRu</item>\n      <item>RectangleChart</item>\n      <item>RGBColor</item>\n      <item>Rule</item>\n      <item>RectangleChart3D</item>\n      <item>RiccatiSolve</item>\n      <item>RuleDelayed</item>\n      <item>RecurrenceTable</item>\n      <item>RiceDistribution</item>\n      <item>Run</item>\n      <item>Red</item>\n      <item>RidgeFilter</item>\n      <item>RunScheduledTask</item>\n      <item>Reduce</item>\n      <item>RiemannR</item>\n      <item>RunThrough</item>\n      <item>ReferenceLineStyle</item>\n      <item>RiemannSiegelTheta</item>\n      <item>RuntimeAttributes</item>\n      <item>Refine</item>\n      <item>RiemannSiegelZ</item>\n      <item>RuntimeOptions</item>\n      <item>ReflectionMatrix</item>\n      <item>Riffle</item>\n      <item>RussellRaoDissimilarity</item>\n      <item>ReflectionTransform</item>\n      <item>Right</item>\n      <item>Refresh</item>\n      <item>RightArrow</item>\n      <item>S</item>\n      <item>SameQ</item>\n      <item>Sin</item>\n      <item>StationaryWaveletPacketTransform</item>\n      <item>SameTest</item>\n      <item>Sinc</item>\n      <item>StationaryWaveletTransform</item>\n      <item>SampleDepth</item>\n      <item>SinghMaddalaDistribution</item>\n      <item>StatusArea</item>\n      <item>SampledSoundFunction</item>\n      <item>SingleLetterItalics</item>\n      <item>StepMonitor</item>\n      <item>SampledSoundList</item>\n      <item>SingularValueDecomposition</item>\n      <item>StieltjesGamma</item>\n      <item>SampleRate</item>\n      <item>SingularValueList</item>\n      <item>StirlingS1</item>\n      <item>SamplingPeriod</item>\n      <item>SingularValuePlot</item>\n      <item>StirlingS2</item>\n      <item>SatisfiabilityCount</item>\n      <item>Sinh</item>\n      <item>StopScheduledTask</item>\n      <item>SatisfiabilityInstances</item>\n      <item>SinhIntegral</item>\n      <item>StreamColorFunction</item>\n      <item>SatisfiableQ</item>\n      <item>SinIntegral</item>\n      <item>StreamColorFunctionScaling</item>\n      <item>Save</item>\n      <item>SixJSymbol</item>\n      <item>StreamDensityPlot</item>\n      <item>SaveDefinitions</item>\n      <item>Skeleton</item>\n      <item>StreamPlot</item>\n      <item>SawtoothWave</item>\n      <item>SkeletonTransform</item>\n      <item>StreamPoints</item>\n      <item>Scale</item>\n      <item>SkellamDistribution</item>\n      <item>StreamPosition</item>\n      <item>Scaled</item>\n      <item>Skewness</item>\n      <item>Streams</item>\n      <item>ScalingFunctions</item>\n      <item>SkewNormalDistribution</item>\n      <item>StreamScale</item>\n      <item>ScalingMatrix</item>\n      <item>Skip</item>\n      <item>StreamStyle</item>\n      <item>ScalingTransform</item>\n      <item>Slider</item>\n      <item>String</item>\n      <item>Scan</item>\n      <item>Slider2D</item>\n      <item>StringCases</item>\n      <item>ScheduledTaskObject</item>\n      <item>SlideView</item>\n      <item>StringCount</item>\n      <item>ScheduledTasks</item>\n      <item>Slot</item>\n      <item>StringDrop</item>\n      <item>SchurDecomposition</item>\n      <item>SlotSequence</item>\n      <item>StringExpression</item>\n      <item>ScientificForm</item>\n      <item>Small</item>\n      <item>StringForm</item>\n      <item>ScreenStyleEnvironment</item>\n      <item>SmallCircle</item>\n      <item>StringFormat</item>\n      <item>ScriptBaselineShifts</item>\n      <item>Smaller</item>\n      <item>StringFreeQ</item>\n      <item>ScriptMinSize</item>\n      <item>SmithWatermanSimilarity</item>\n      <item>StringInsert</item>\n      <item>ScriptSizeMultipliers</item>\n      <item>SmoothDensityHistogram</item>\n      <item>StringJoin</item>\n      <item>Scrollbars</item>\n      <item>SmoothHistogram</item>\n      <item>StringLength</item>\n      <item>ScrollPosition</item>\n      <item>SmoothHistogram3D</item>\n      <item>StringMatchQ</item>\n      <item>Sec</item>\n      <item>SmoothKernelDistribution</item>\n      <item>StringPosition</item>\n      <item>Sech</item>\n      <item>SokalSneathDissimilarity</item>\n      <item>StringQ</item>\n      <item>SechDistribution</item>\n      <item>Solve</item>\n      <item>StringReplace</item>\n      <item>SectorChart</item>\n      <item>SolveAlways</item>\n      <item>StringReplaceList</item>\n      <item>SectorChart3D</item>\n      <item>Sort</item>\n      <item>StringReplacePart</item>\n      <item>SectorOrigin</item>\n      <item>SortBy</item>\n      <item>StringReverse</item>\n      <item>SectorSpacing</item>\n      <item>Sound</item>\n      <item>StringSkeleton</item>\n      <item>SeedRandom</item>\n      <item>SoundNote</item>\n      <item>StringSplit</item>\n      <item>Select</item>\n      <item>SoundVolume</item>\n      <item>StringTake</item>\n      <item>Selectable</item>\n      <item>Sow</item>\n      <item>StringToStream</item>\n      <item>SelectComponents</item>\n      <item>Spacer</item>\n      <item>StringTrim</item>\n      <item>SelectedNotebook</item>\n      <item>Spacings</item>\n      <item>StructuredSelection</item>\n      <item>SelectionAnimate</item>\n      <item>Span</item>\n      <item>StruveH</item>\n      <item>SelectionCreateCell</item>\n      <item>SpanFromAbove</item>\n      <item>StruveL</item>\n      <item>SelectionEvaluate</item>\n      <item>SpanFromBoth</item>\n      <item>Stub</item>\n      <item>SelectionEvaluateCreateCell</item>\n      <item>SpanFromLeft</item>\n      <item>StudentTDistribution</item>\n      <item>SelectionMove</item>\n      <item>SparseArray</item>\n      <item>Style</item>\n      <item>SelfLoopStyle</item>\n      <item>Speak</item>\n      <item>StyleBox</item>\n      <item>SemialgebraicComponentInstances</item>\n      <item>Specularity</item>\n      <item>StyleData</item>\n      <item>SendMail</item>\n      <item>SpellingCorrection</item>\n      <item>StyleDefinitions</item>\n      <item>Sequence</item>\n      <item>Sphere</item>\n      <item>Subfactorial</item>\n      <item>SequenceAlignment</item>\n      <item>SphericalBesselJ</item>\n      <item>Subgraph</item>\n      <item>SequenceHold</item>\n      <item>SphericalBesselY</item>\n      <item>SubMinus</item>\n      <item>Series</item>\n      <item>SphericalHankelH1</item>\n      <item>SubPlus</item>\n      <item>SeriesCoefficient</item>\n      <item>SphericalHankelH2</item>\n      <item>Subresultants</item>\n      <item>SeriesData</item>\n      <item>SphericalHarmonicY</item>\n      <item>Subscript</item>\n      <item>SessionTime</item>\n      <item>SphericalPlot3D</item>\n      <item>SubscriptBox</item>\n      <item>Set</item>\n      <item>SphericalRegion</item>\n      <item>Subset</item>\n      <item>SetAccuracy</item>\n      <item>SpheroidalEigenvalue</item>\n      <item>SubsetEqual</item>\n      <item>SetAlphaChannel</item>\n      <item>SpheroidalJoiningFactor</item>\n      <item>Subsets</item>\n      <item>SetAttributes</item>\n      <item>SpheroidalPS</item>\n      <item>SubStar</item>\n      <item>SetDelayed</item>\n      <item>SpheroidalPSPrime</item>\n      <item>Subsuperscript</item>\n      <item>SetDirectory</item>\n      <item>SpheroidalQS</item>\n      <item>SubsuperscriptBox</item>\n      <item>SetFileDate</item>\n      <item>SpheroidalQSPrime</item>\n      <item>Subtract</item>\n      <item>SetOptions</item>\n      <item>SpheroidalRadialFactor</item>\n      <item>SubtractFrom</item>\n      <item>SetPrecision</item>\n      <item>SpheroidalS1</item>\n      <item>Succeeds</item>\n      <item>SetProperty</item>\n      <item>SpheroidalS1Prime</item>\n      <item>SucceedsEqual</item>\n      <item>SetSelectedNotebook</item>\n      <item>SpheroidalS2</item>\n      <item>SucceedsSlantEqual</item>\n      <item>SetSharedFunction</item>\n      <item>SpheroidalS2Prime</item>\n      <item>SucceedsTilde</item>\n      <item>SetSharedVariable</item>\n      <item>Splice</item>\n      <item>SuchThat</item>\n      <item>SetStreamPosition</item>\n      <item>SplineClosed</item>\n      <item>Sum</item>\n      <item>SetSystemOptions</item>\n      <item>SplineDegree</item>\n      <item>SumConvergence</item>\n      <item>Setter</item>\n      <item>SplineKnots</item>\n      <item>SuperDagger</item>\n      <item>SetterBar</item>\n      <item>SplineWeights</item>\n      <item>SuperMinus</item>\n      <item>Setting</item>\n      <item>Split</item>\n      <item>SuperPlus</item>\n      <item>Shallow</item>\n      <item>SplitBy</item>\n      <item>Superscript</item>\n      <item>ShannonWavelet</item>\n      <item>SpokenString</item>\n      <item>SuperscriptBox</item>\n      <item>ShapiroWilkTest</item>\n      <item>Sqrt</item>\n      <item>Superset</item>\n      <item>Share</item>\n      <item>SqrtBox</item>\n      <item>SupersetEqual</item>\n      <item>Sharpen</item>\n      <item>Square</item>\n      <item>SuperStar</item>\n      <item>ShearingMatrix</item>\n      <item>SquaredEuclideanDistance</item>\n      <item>SurvivalDistribution</item>\n      <item>ShearingTransform</item>\n      <item>SquareFreeQ</item>\n      <item>SurvivalFunction</item>\n      <item>Short</item>\n      <item>SquareIntersection</item>\n      <item>SuspendPacket</item>\n      <item>ShortDownArrow</item>\n      <item>SquaresR</item>\n      <item>SuzukiDistribution</item>\n      <item>Shortest</item>\n      <item>SquareSubset</item>\n      <item>SuzukiGroupSuz</item>\n      <item>ShortestPathFunction</item>\n      <item>SquareSubsetEqual</item>\n      <item>Switch</item>\n      <item>ShortLeftArrow</item>\n      <item>SquareSuperset</item>\n      <item>Symbol</item>\n      <item>ShortRightArrow</item>\n      <item>SquareSupersetEqual</item>\n      <item>SymbolName</item>\n      <item>ShortUpArrow</item>\n      <item>SquareUnion</item>\n      <item>SymletWavelet</item>\n      <item>Show</item>\n      <item>SquareWave</item>\n      <item>SymmetricGroup</item>\n      <item>ShowAutoStyles</item>\n      <item>StabilityMargins</item>\n      <item>SymmetricMatrixQ</item>\n      <item>ShowCellBracket</item>\n      <item>StabilityMarginsStyle</item>\n      <item>SymmetricPolynomial</item>\n      <item>ShowCellLabel</item>\n      <item>StableDistribution</item>\n      <item>SymmetricReduction</item>\n      <item>ShowCellTags</item>\n      <item>Stack</item>\n      <item>SynchronousInitialization</item>\n      <item>ShowCursorTracker</item>\n      <item>StackBegin</item>\n      <item>SynchronousUpdating</item>\n      <item>ShowGroupOpener</item>\n      <item>StackComplete</item>\n      <item>SyntaxInformation</item>\n      <item>ShowPageBreaks</item>\n      <item>StackInhibit</item>\n      <item>SyntaxLength</item>\n      <item>ShowSelection</item>\n      <item>StandardDeviation</item>\n      <item>SyntaxPacket</item>\n      <item>ShowSpecialCharacters</item>\n      <item>StandardDeviationFilter</item>\n      <item>SyntaxQ</item>\n      <item>ShowStringCharacters</item>\n      <item>StandardForm</item>\n      <item>SystemDialogInput</item>\n      <item>ShrinkingDelay</item>\n      <item>Standardize</item>\n      <item>SystemInformation</item>\n      <item>SiegelTheta</item>\n      <item>Star</item>\n      <item>SystemOpen</item>\n      <item>SiegelTukeyTest</item>\n      <item>StarGraph</item>\n      <item>SystemOptions</item>\n      <item>Sign</item>\n      <item>StartingStepSize</item>\n      <item>SystemsModelDelete</item>\n      <item>Signature</item>\n      <item>StartOfLine</item>\n      <item>SystemsModelDimensions</item>\n      <item>SignedRankTest</item>\n      <item>StartOfString</item>\n      <item>SystemsModelExtract</item>\n      <item>SignificanceLevel</item>\n      <item>StartScheduledTask</item>\n      <item>SystemsModelFeedbackConnect</item>\n      <item>SignPadding</item>\n      <item>StateFeedbackGains</item>\n      <item>SystemsModelLabels</item>\n      <item>SignTest</item>\n      <item>StateOutputEstimator</item>\n      <item>SystemsModelOrder</item>\n      <item>SimilarityRules</item>\n      <item>StateResponse</item>\n      <item>SystemsModelParallelConnect</item>\n      <item>SimpleGraph</item>\n      <item>StateSpaceModel</item>\n      <item>SystemsModelSeriesConnect</item>\n      <item>SimpleGraphQ</item>\n      <item>StateSpaceRealization</item>\n      <item>SystemsModelStateFeedbackConnect</item>\n      <item>Simplify</item>\n      <item>StateSpaceTransform</item>\n      <item>T</item>\n      <item>Table</item>\n      <item>Tilde</item>\n      <item>TraceOn</item>\n      <item>TableAlignments</item>\n      <item>TildeEqual</item>\n      <item>TraceOriginal</item>\n      <item>TableDepth</item>\n      <item>TildeFullEqual</item>\n      <item>TracePrint</item>\n      <item>TableDirections</item>\n      <item>TildeTilde</item>\n      <item>TraceScan</item>\n      <item>TableForm</item>\n      <item>TimeConstrained</item>\n      <item>TrackedSymbols</item>\n      <item>TableHeadings</item>\n      <item>TimeConstraint</item>\n      <item>TradingChart</item>\n      <item>TableSpacing</item>\n      <item>Times</item>\n      <item>TraditionalForm</item>\n      <item>TabView</item>\n      <item>TimesBy</item>\n      <item>TransferFunctionCancel</item>\n      <item>TagBox</item>\n      <item>TimeUsed</item>\n      <item>TransferFunctionExpand</item>\n      <item>TaggingRules</item>\n      <item>TimeValue</item>\n      <item>TransferFunctionFactor</item>\n      <item>TagSet</item>\n      <item>TimeZone</item>\n      <item>TransferFunctionModel</item>\n      <item>TagSetDelayed</item>\n      <item>Timing</item>\n      <item>TransferFunctionPoles</item>\n      <item>TagUnset</item>\n      <item>Tiny</item>\n      <item>TransferFunctionZeros</item>\n      <item>Take</item>\n      <item>TitsGroupT</item>\n      <item>TransformationFunction</item>\n      <item>TakeWhile</item>\n      <item>ToBoxes</item>\n      <item>TransformationFunctions</item>\n      <item>Tally</item>\n      <item>ToCharacterCode</item>\n      <item>TransformationMatrix</item>\n      <item>Tan</item>\n      <item>ToContinuousTimeModel</item>\n      <item>TransformedDistribution</item>\n      <item>Tanh</item>\n      <item>ToDiscreteTimeModel</item>\n      <item>Translate</item>\n      <item>TargetFunctions</item>\n      <item>ToeplitzMatrix</item>\n      <item>TranslationTransform</item>\n      <item>TautologyQ</item>\n      <item>ToExpression</item>\n      <item>Transparent</item>\n      <item>Temporary</item>\n      <item>Together</item>\n      <item>Transpose</item>\n      <item>TeXForm</item>\n      <item>Toggler</item>\n      <item>TreeForm</item>\n      <item>Text</item>\n      <item>TogglerBar</item>\n      <item>TreeGraph</item>\n      <item>TextAlignment</item>\n      <item>TokenWords</item>\n      <item>TreeGraphQ</item>\n      <item>TextCell</item>\n      <item>Tolerance</item>\n      <item>TreePlot</item>\n      <item>TextClipboardType</item>\n      <item>ToLowerCase</item>\n      <item>TrendStyle</item>\n      <item>TextData</item>\n      <item>ToNumberField</item>\n      <item>TriangleWave</item>\n      <item>TextJustification</item>\n      <item>Tooltip</item>\n      <item>TriangularDistribution</item>\n      <item>TextPacket</item>\n      <item>TooltipDelay</item>\n      <item>Trig</item>\n      <item>TextRecognize</item>\n      <item>Top</item>\n      <item>TrigExpand</item>\n      <item>Texture</item>\n      <item>TopHatTransform</item>\n      <item>TrigFactor</item>\n      <item>TextureCoordinateFunction</item>\n      <item>TopologicalSort</item>\n      <item>TrigFactorList</item>\n      <item>TextureCoordinateScaling</item>\n      <item>ToRadicals</item>\n      <item>Trigger</item>\n      <item>Therefore</item>\n      <item>ToRules</item>\n      <item>TrigReduce</item>\n      <item>Thick</item>\n      <item>ToString</item>\n      <item>TrigToExp</item>\n      <item>Thickness</item>\n      <item>Total</item>\n      <item>TrimmedMean</item>\n      <item>Thin</item>\n      <item>TotalVariationFilter</item>\n      <item>True</item>\n      <item>Thinning</item>\n      <item>TotalWidth</item>\n      <item>TrueQ</item>\n      <item>ThompsonGroupTh</item>\n      <item>ToUpperCase</item>\n      <item>TruncatedDistribution</item>\n      <item>Thread</item>\n      <item>Tr</item>\n      <item>TTest</item>\n      <item>ThreeJSymbol</item>\n      <item>Trace</item>\n      <item>Tube</item>\n      <item>Threshold</item>\n      <item>TraceAbove</item>\n      <item>TukeyLambdaDistribution</item>\n      <item>Through</item>\n      <item>TraceBackward</item>\n      <item>Tuples</item>\n      <item>Throw</item>\n      <item>TraceDepth</item>\n      <item>TuranGraph</item>\n      <item>Thumbnail</item>\n      <item>TraceDialog</item>\n      <item>TuringMachine</item>\n      <item>Ticks</item>\n      <item>TraceForward</item>\n      <item>TicksStyle</item>\n      <item>TraceOff</item>\n      <item>U</item>\n      <item>Uncompress</item>\n      <item>UniformSumDistribution</item>\n      <item>UpArrowBar</item>\n      <item>Undefined</item>\n      <item>Uninstall</item>\n      <item>UpArrowDownArrow</item>\n      <item>UnderBar</item>\n      <item>Union</item>\n      <item>Update</item>\n      <item>Underflow</item>\n      <item>UnionPlus</item>\n      <item>UpdateInterval</item>\n      <item>Underlined</item>\n      <item>Unique</item>\n      <item>UpDownArrow</item>\n      <item>Underoverscript</item>\n      <item>UnitBox</item>\n      <item>UpEquilibrium</item>\n      <item>UnderoverscriptBox</item>\n      <item>Unitize</item>\n      <item>UpperCaseQ</item>\n      <item>Underscript</item>\n      <item>UnitStep</item>\n      <item>UpperLeftArrow</item>\n      <item>UnderscriptBox</item>\n      <item>UnitTriangle</item>\n      <item>UpperRightArrow</item>\n      <item>UndirectedEdge</item>\n      <item>UnitVector</item>\n      <item>UpperTriangularize</item>\n      <item>UndirectedGraph</item>\n      <item>Unprotect</item>\n      <item>UpSet</item>\n      <item>UndirectedGraphQ</item>\n      <item>UnsameQ</item>\n      <item>UpSetDelayed</item>\n      <item>Unequal</item>\n      <item>UnsavedVariables</item>\n      <item>UpTeeArrow</item>\n      <item>Unevaluated</item>\n      <item>Unset</item>\n      <item>UpValues</item>\n      <item>UniformDistribution</item>\n      <item>UnsetShared</item>\n      <item>UsingFrontEnd</item>\n      <item>UniformGraphDistribution</item>\n      <item>UpArrow</item>\n      <item>V</item>\n      <item>ValidationLength</item>\n      <item>VertexAdd</item>\n      <item>VertexReplace</item>\n      <item>ValueQ</item>\n      <item>VertexColors</item>\n      <item>VertexShape</item>\n      <item>Variables</item>\n      <item>VertexComponent</item>\n      <item>VertexShapeFunction</item>\n      <item>Variance</item>\n      <item>VertexCoordinateRules</item>\n      <item>VertexSize</item>\n      <item>VarianceEquivalenceTest</item>\n      <item>VertexCoordinates</item>\n      <item>VertexStyle</item>\n      <item>VarianceEstimatorFunction</item>\n      <item>VertexCount</item>\n      <item>VertexTextureCoordinates</item>\n      <item>VarianceTest</item>\n      <item>VertexCoverQ</item>\n      <item>VertexWeight</item>\n      <item>VectorAngle</item>\n      <item>VertexDegree</item>\n      <item>VerticalBar</item>\n      <item>VectorColorFunction</item>\n      <item>VertexDelete</item>\n      <item>VerticalSeparator</item>\n      <item>VectorColorFunctionScaling</item>\n      <item>VertexEccentricity</item>\n      <item>VerticalSlider</item>\n      <item>VectorDensityPlot</item>\n      <item>VertexInComponent</item>\n      <item>VerticalTilde</item>\n      <item>VectorPlot</item>\n      <item>VertexInDegree</item>\n      <item>ViewAngle</item>\n      <item>VectorPlot3D</item>\n      <item>VertexIndex</item>\n      <item>ViewCenter</item>\n      <item>VectorPoints</item>\n      <item>VertexLabeling</item>\n      <item>ViewMatrix</item>\n      <item>VectorQ</item>\n      <item>VertexLabels</item>\n      <item>ViewPoint</item>\n      <item>VectorScale</item>\n      <item>VertexList</item>\n      <item>ViewRange</item>\n      <item>VectorStyle</item>\n      <item>VertexNormals</item>\n      <item>ViewVector</item>\n      <item>Vee</item>\n      <item>VertexOutComponent</item>\n      <item>ViewVertical</item>\n      <item>Verbatim</item>\n      <item>VertexOutDegree</item>\n      <item>Visible</item>\n      <item>VerifyConvergence</item>\n      <item>VertexQ</item>\n      <item>VonMisesDistribution</item>\n      <item>VerifyTestAssumptions</item>\n      <item>VertexRenderingFunction</item>\n      <item>W</item>\n      <item>WaitAll</item>\n      <item>WeierstrassHalfPeriods</item>\n      <item>WindowFloating</item>\n      <item>WaitNext</item>\n      <item>WeierstrassInvariants</item>\n      <item>WindowFrame</item>\n      <item>WakebyDistribution</item>\n      <item>WeierstrassP</item>\n      <item>WindowMargins</item>\n      <item>WalleniusHypergeometricDistribution</item>\n      <item>WeierstrassPPrime</item>\n      <item>WindowMovable</item>\n      <item>WaringYuleDistribution</item>\n      <item>WeierstrassSigma</item>\n      <item>WindowOpacity</item>\n      <item>WatershedComponents</item>\n      <item>WeierstrassZeta</item>\n      <item>WindowSize</item>\n      <item>WatsonUSquareTest</item>\n      <item>WeightedAdjacencyGraph</item>\n      <item>WindowStatusArea</item>\n      <item>WattsStrogatzGraphDistribution</item>\n      <item>WeightedAdjacencyMatrix</item>\n      <item>WindowTitle</item>\n      <item>WaveletBestBasis</item>\n      <item>WeightedGraphQ</item>\n      <item>WindowToolbars</item>\n      <item>WaveletFilterCoefficients</item>\n      <item>Weights</item>\n      <item>With</item>\n      <item>WaveletImagePlot</item>\n      <item>WheelGraph</item>\n      <item>WolframAlpha</item>\n      <item>WaveletListPlot</item>\n      <item>Which</item>\n      <item>Word</item>\n      <item>WaveletMapIndexed</item>\n      <item>While</item>\n      <item>WordBoundary</item>\n      <item>WaveletMatrixPlot</item>\n      <item>White</item>\n      <item>WordCharacter</item>\n      <item>WaveletPhi</item>\n      <item>Whitespace</item>\n      <item>WordData</item>\n      <item>WaveletPsi</item>\n      <item>WhitespaceCharacter</item>\n      <item>WordSearch</item>\n      <item>WaveletScale</item>\n      <item>WhittakerM</item>\n      <item>WordSeparators</item>\n      <item>WaveletScalogram</item>\n      <item>WhittakerW</item>\n      <item>WorkingPrecision</item>\n      <item>WaveletThreshold</item>\n      <item>WienerFilter</item>\n      <item>Write</item>\n      <item>WeatherData</item>\n      <item>WignerD</item>\n      <item>WriteString</item>\n      <item>WeberE</item>\n      <item>WignerSemicircleDistribution</item>\n      <item>Wronskian</item>\n      <item>Wedge</item>\n      <item>WindowClickSelect</item>\n      <item>WeibullDistribution</item>\n      <item>WindowElements</item>\n      <item>X</item>\n      <item>XMLElement</item>\n      <item>Xnor</item>\n      <item>XMLObject</item>\n      <item>Xor</item>\n      <item>Y</item>\n      <item>Yellow</item>\n      <item>YuleDissimilarity</item>\n      <item>Z</item>\n      <item>ZernikeR</item>\n      <item>ZetaZero</item>\n      <item>ZTransform</item>\n      <item>ZeroTest</item>\n      <item>ZipfDistribution</item>\n      <item>Zeta</item>\n      <item>ZTest</item>\n      <item>$</item>\n      <item>$Aborted</item>\n      <item>$Inspector</item>\n      <item>$OutputSizeLimit</item>\n      <item>$AssertFunction</item>\n      <item>$InstallationDirectory</item>\n      <item>$Packages</item>\n      <item>$Assumptions</item>\n      <item>$IterationLimit</item>\n      <item>$ParentLink</item>\n      <item>$BaseDirectory</item>\n      <item>$KernelCount</item>\n      <item>$ParentProcessID</item>\n      <item>$BatchInput</item>\n      <item>$KernelID</item>\n      <item>$Path</item>\n      <item>$BatchOutput</item>\n      <item>$Language</item>\n      <item>$PathnameSeparator</item>\n      <item>$ByteOrdering</item>\n      <item>$LibraryPath</item>\n      <item>$PerformanceGoal</item>\n      <item>$Canceled</item>\n      <item>$LicenseExpirationDate</item>\n      <item>$Post</item>\n      <item>$CharacterEncoding</item>\n      <item>$LicenseID</item>\n      <item>$Pre</item>\n      <item>$CharacterEncodings</item>\n      <item>$LicenseServer</item>\n      <item>$PrePrint</item>\n      <item>$CommandLine</item>\n      <item>$Line</item>\n      <item>$PreRead</item>\n      <item>$CompilationTarget</item>\n      <item>$Linked</item>\n      <item>$ProcessID</item>\n      <item>$ConfiguredKernels</item>\n      <item>$MachineAddresses</item>\n      <item>$ProcessorCount</item>\n      <item>$Context</item>\n      <item>$MachineDomains</item>\n      <item>$ProcessorType</item>\n      <item>$ContextPath</item>\n      <item>$MachineEpsilon</item>\n      <item>$RecursionLimit</item>\n      <item>$ControlActiveSetting</item>\n      <item>$MachineID</item>\n      <item>$ReleaseNumber</item>\n      <item>$CreationDate</item>\n      <item>$MachineName</item>\n      <item>$RootDirectory</item>\n      <item>$CurrentLink</item>\n      <item>$MachinePrecision</item>\n      <item>$ScheduledTask</item>\n      <item>$DateStringFormat</item>\n      <item>$MachineType</item>\n      <item>$ScriptCommandLine</item>\n      <item>$DefaultImagingDevice</item>\n      <item>$MaxExtraPrecision</item>\n      <item>$SessionID</item>\n      <item>$Display</item>\n      <item>$MaxMachineNumber</item>\n      <item>$SharedFunctions</item>\n      <item>$DisplayFunction</item>\n      <item>$MaxNumber</item>\n      <item>$SharedVariables</item>\n      <item>$DistributedContexts</item>\n      <item>$MaxPiecewiseCases</item>\n      <item>$SoundDisplayFunction</item>\n      <item>$DynamicEvaluation</item>\n      <item>$MaxPrecision</item>\n      <item>$SyntaxHandler</item>\n      <item>$Echo</item>\n      <item>$MaxRootDegree</item>\n      <item>$System</item>\n      <item>$Epilog</item>\n      <item>$MessageGroups</item>\n      <item>$SystemCharacterEncoding</item>\n      <item>$ExportFormats</item>\n      <item>$MessageList</item>\n      <item>$SystemID</item>\n      <item>$Failed</item>\n      <item>$MessagePrePrint</item>\n      <item>$SystemWordLength</item>\n      <item>$FrontEnd</item>\n      <item>$Messages</item>\n      <item>$TemporaryDirectory</item>\n      <item>$FrontEndSession</item>\n      <item>$MinMachineNumber</item>\n      <item>$TimedOut</item>\n      <item>$GeoLocation</item>\n      <item>$MinNumber</item>\n      <item>$TimeUnit</item>\n      <item>$HistoryLength</item>\n      <item>$MinPrecision</item>\n      <item>$TimeZone</item>\n      <item>$HomeDirectory</item>\n      <item>$ModuleNumber</item>\n      <item>$Urgent</item>\n      <item>$IgnoreEOF</item>\n      <item>$NewMessage</item>\n      <item>$UserBaseDirectory</item>\n      <item>$ImagingDevices</item>\n      <item>$NewSymbol</item>\n      <item>$UserDocumentsDirectory</item>\n      <item>$ImportFormats</item>\n      <item>$Notebooks</item>\n      <item>$UserName</item>\n      <item>$InitialDirectory</item>\n      <item>$NumberMarks</item>\n      <item>$Version</item>\n      <item>$Input</item>\n      <item>$OperatingSystem</item>\n      <item>$VersionNumber</item>\n      <item>$InputFileName</item>\n      <item>$Output</item>\n    </list>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t<keyword attribute=\"function\" String=\"functions\" context=\"#stay\"/>\n\t<Int attribute=\"Int\" context=\"#stay\" />\n\t<Float attribute=\"Float\" context=\"#stay\" />\n\t<RegExpr attribute=\"Parameter\" String=\"[a-zA-Z_0-9]+\\_\" context=\"#stay\"/>\n\t<RegExpr attribute=\"Replace\" String=\"(\\-\\>|\\/\\.)\" context=\"#stay\"/>\n\t<AnyChar attribute=\"Operator\" String=\"+*/%\\|-^\" context=\"#stay\"/>\n\t<RegExpr attribute=\"Assign\" String=\"(:=|=)\" context=\"#stay\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Int\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Parameter\" italic=\"1\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsNormal\" color=\"#FF7B00\" spellChecking=\"false\"/>\n      <itemData name=\"Assign\" defStyleNum=\"dsNormal\" color=\"#00A0E4\" spellChecking=\"false\"/>\n      <itemData name=\"Replace\" defStyleNum=\"dsNormal\" color=\"#85C200\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" weakDeliminator=\"-%\"/>\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/matlab.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ====================================================================\n  MATLAB syntax highlighting file for the KDE editors Kate and Kwrite\n  ====================================================================\n      works (at least) for MATLAB versions 5.3, 6.0, 6.1, 6.5, 6.5sp1\n      works with Kate 2.2 and with Kwrite 4.2 (KDE 3.2)\n\n  This file works only for syntactically correct MATLAB code. For incorrect\n  code, the behaviour is undefined. One exception is made: Incomplete strings\n  with missing closing delimiter are highlighted separately, just as in the\n  native editor of MATLAB does.\n\n  Highlighting errors never propagate across line breaks.\n\n  Most of this XML file is straight and simple. Only the character ' (&apos;)\n  needs nontrivial treatment, since it is both a postfix operator indicating\n  complex conjugate transpose (adjoint) and a string delimiter. It is an\n  adjoint operator in the following positions:\n  1) immediately after an identifier (variable, function, but not keyword)\n  2) immediately after a number literal\n  3) immediately after the closing parenthesis ), ] and }\n  4) immediately after a simple transpose operator .'\n  5) immediately after another adjoint operator '\n  In all other cases it is a string delimiter.\n\n  This is implemented using look-ahead regexps. If one of the entities in the\n  above cases 1-4 (identifier, number literal, ...) matches and look-ahead\n  shows that it is followed by a ', the entity is highlighted and control is\n  passed to the special context _adjoint, whose sole purpose is to correctly\n  highlight a series of ' (thus covering case 5 as well). _adjoint immediately\n  returns to the default context _normal.\n\n  MATLAB number literals are different from those in C and similar languages:\n  a) All numbers literals are doubles. There is no distinction between float and int.\n  b) There is no notation of hex or oct base integers.\n  c) The symbols i or j may be attached to a number to indicate a multiplication\n     with the imaginary unit.\n\n  MATLAB identifiers have to start with a letter followed by any number of letters,\n  digits and underscores.\n\n  There is a small number of reserved keywords, which cannot be the target of an\n  assignment. All other identifiers (including all of the many 100s of MATLAB commands)\n  can be redefined. Consequently, only the reserved keywords are highlighted.\n\n  At the end of the XML file, there is MATLAB testing code for developers.\n\n  Change log:\n  19-Nov-03  Created from scratch.\n  08-Mar-04  Small corrections. Added default colors of MATLAB editor.\n  25-Jan-09  Addedd basic support for OOP (Matlab 2008) (by Leonardo Finetti)\n\n  Author: Stefan Stoll, Swiss Federal Institute of Technology, Zurich\n  Co-author: Leonardo Finetti, www.finex.org\n-->\n\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"Matlab\" version=\"3\" kateversion=\"5.0\" section=\"Scientific\" extensions=\"*.m;*.M\" mimetype=\"text/mfile\" casesensitive=\"1\">\n  <highlighting>\n\n    <!-- Reserved keywords in MATLAB -->\n    <list name=\"KeywordsList\">\n      <item>break</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>classdef</item>\n      <item>continue</item>\n      <item>else</item>\n      <item>elseif</item>\n      <item>end</item>\n      <item>for</item>\n      <item>function</item>\n      <item>global</item>\n      <item>if</item>\n      <item>otherwise</item>\n      <item>parfor</item>\n      <item>persistent</item>\n      <item>return</item>\n      <item>spmd</item>\n      <item>switch</item>\n      <item>try</item>\n      <item>while</item>\n      <item>methods</item>\n      <item>properties</item>\n      <item>events</item>\n    </list>\n\n    <contexts>\n\n      <context name=\"_normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\n        <!-- Look-ahead for adjoint ' after variable, number literal, closing braces and .' -->\n        <RegExpr context=\"_adjoint\" attribute=\"Variable\" String=\"[a-zA-Z]\\w*(?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Number\" String=\"(\\d+(\\.\\d+)?|\\.\\d+)([eE][+-]?\\d+)?[ij]?(?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Delimiter\" String=\"[\\)\\]}](?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Operator\" String=\"\\.'(?=')\" />\n\n        <!-- If ' is not the adjoint operator, it starts a string or an unterminated string -->\n        <RegExpr context=\"#stay\" attribute=\"CharVector\" String=\"'[^']*(''[^']*)*'(?=[^']|$)\" />\n        <RegExpr context=\"#stay\" attribute=\"Incomplete CharVector\" String=\"'[^']*(''[^']*)*\" />\n        <RegExpr context=\"#stay\" attribute=\"String\" String=\"&quot;[^&quot;]*(&quot;&quot;[^&quot;]*)*&quot;(?=[^&quot;]|$)\" />\n        <RegExpr context=\"#stay\" attribute=\"Incomplete String\" String=\"&quot;[^&quot;]*(&quot;&quot;[^&quot;]*)*\" />\n\n        <!-- Handling of keywords, comments, system commands, identifiers, numbers and braces -->\n        <keyword context=\"#stay\" attribute=\"Keyword\" String=\"KeywordsList\" />\n        <RegExpr context=\"#stay\" attribute=\"Comment\" String=\"%.*$\" />\n        <RegExpr context=\"#stay\" attribute=\"System\" String=\"!.*$\" />\n        <RegExpr context=\"#stay\" attribute=\"Variable\" String=\"[a-zA-Z]\\w*\" />\n        <RegExpr context=\"#stay\" attribute=\"Number\" String=\"(\\d+(\\.\\d+)?|\\.\\d+)([eE][+-]?\\d+)?[ij]?\" />\n        <AnyChar context=\"#stay\" attribute=\"Delimiter\" String=\"()[]{}\"/>\n\n        <!-- Three and two-character operators -->\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"...\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"==\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"~=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&lt;=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&gt;=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&amp;&amp;\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"||\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\".*\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\".^\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"./\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\".'\"/>\n\n        <!-- Single-character operators -->\n        <AnyChar context=\"#stay\" attribute=\"Operator\" String=\"*+-/\\&amp;|&lt;&gt;~^=,;:@\"/>\n\n      </context>\n\n      <!-- Context entered after encountering an ' adjoint operator -->\n      <context name=\"_adjoint\" attribute=\"Operator\" lineEndContext=\"#pop\">\n        <RegExpr context=\"#pop\" attribute=\"Operator\" String=\"'+\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Variable\" defStyleNum=\"dsVariable\" />\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsFloat\" />\n      <itemData name=\"Delimiter\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"CharVector\" defStyleNum=\"dsSpecialString\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"System\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Incomplete CharVector\" defStyleNum=\"dsError\" />\n      <itemData name=\"Incomplete String\" defStyleNum=\"dsError\" />\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"% \" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"\"/>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/maxima.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n    maxima.xml—Maxima CAS syntax highlighting for Kate and KWrite.\n    Copyright © 2008 Alexey V. Beshenov <al@beshenov.ru>.\n\n    maxima.xml is free software; you can redistribute it and/or modify it\n    under the terms of the GNU Lesser General Public License as published\n    by the Free Software Foundation; either version 2.1 of the License,\n    or (at your option) any later version.\n\n    maxima.xml 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\n    General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with the maxima.xml. If not, see <http://www.gnu.org/licenses/>.\n\n    Usage: place maxima.xml in $KDEDIR/share/apps/katepart/syntax.\n-->\n\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"Maxima\" version=\"4\" kateversion=\"5.2\" section=\"Scientific\" extensions=\"*.mac;*.MAC;*.dem;*.DEM\" casesensitive=\"1\" author=\"Alexey Beshenov &lt;al@beshenov.ru&gt;\" license=\"LGPLv2.1+\">\n    <highlighting>\n\n        <list name=\"MaximaKeyword\">\n            <item>and</item>\n            <item>do</item>\n            <item>else</item>\n            <item>elseif</item>\n            <item>false</item>\n            <item>for</item>\n            <item>if</item>\n            <item>in</item>\n            <item>not</item>\n            <item>or</item>\n            <item>step</item>\n            <item>then</item>\n            <item>thru</item>\n            <item>true</item>\n            <item>while</item>\n        </list>\n\n        <list name=\"SpecialComment\">\n            <item>FIXME</item>\n            <item>TODO</item>\n        </list>\n\n        <list name=\"MaximaFunction\">\n            <item>abasep</item>\n            <item>abs</item>\n            <item>absint</item>\n            <item>absolute_real_time</item>\n            <item>acos</item>\n            <item>acosh</item>\n            <item>acot</item>\n            <item>acoth</item>\n            <item>acsc</item>\n            <item>acsch</item>\n            <item>activate</item>\n            <item>addcol</item>\n            <item>add_edge</item>\n            <item>add_edges</item>\n            <item>addmatrices</item>\n            <item>addrow</item>\n            <item>add_vertex</item>\n            <item>add_vertices</item>\n            <item>adjacency_matrix</item>\n            <item>adjoin</item>\n            <item>adjoint</item>\n            <item>af</item>\n            <item>agd</item>\n            <item>airy_ai</item>\n            <item>airy_bi</item>\n            <item>airy_dai</item>\n            <item>airy_dbi</item>\n            <item>algsys</item>\n            <item>alg_type</item>\n            <item>alias</item>\n            <item>allroots</item>\n            <item>alphacharp</item>\n            <item>alphanumericp</item>\n            <item>antid</item>\n            <item>antidiff</item>\n            <item>AntiDifference</item>\n            <item>append</item>\n            <item>appendfile</item>\n            <item>apply</item>\n            <item>apply1</item>\n            <item>apply2</item>\n            <item>applyb1</item>\n            <item>apropos</item>\n            <item>args</item>\n            <item>arithmetic</item>\n            <item>arithsum</item>\n            <item>array</item>\n            <item>arrayapply</item>\n            <item>arrayinfo</item>\n            <item>arraymake</item>\n            <item>ascii</item>\n            <item>asec</item>\n            <item>asech</item>\n            <item>asin</item>\n            <item>asinh</item>\n            <item>askinteger</item>\n            <item>asksign</item>\n            <item>assoc</item>\n            <item>assoc_legendre_p</item>\n            <item>assoc_legendre_q</item>\n            <item>assume</item>\n            <item>asympa</item>\n            <item>at</item>\n            <item>atan</item>\n            <item>atan2</item>\n            <item>atanh</item>\n            <item>atensimp</item>\n            <item>atom</item>\n            <item>atvalue</item>\n            <item>augcoefmatrix</item>\n            <item>augmented_lagrangian_method</item>\n            <item>av</item>\n            <item>average_degree</item>\n            <item>backtrace</item>\n            <item>barsplot</item>\n            <item>bashindices</item>\n            <item>batch</item>\n            <item>batchload</item>\n            <item>bc2</item>\n            <item>bdvac</item>\n            <item>belln</item>\n            <item>bern</item>\n            <item>bernpoly</item>\n            <item>bessel</item>\n            <item>bessel_i</item>\n            <item>bessel_j</item>\n            <item>bessel_k</item>\n            <item>bessel_y</item>\n            <item>beta</item>\n            <item>bezout</item>\n            <item>bffac</item>\n            <item>bfhzeta</item>\n            <item>bfloat</item>\n            <item>bfloatp</item>\n            <item>bfpsi</item>\n            <item>bfpsi0</item>\n            <item>bfzeta</item>\n            <item>biconected_components</item>\n            <item>bimetric</item>\n            <item>binomial</item>\n            <item>bipartition</item>\n            <item>block</item>\n            <item>blockmatrixp</item>\n            <item>bode_gain</item>\n            <item>bode_phase</item>\n            <item>bothcoef</item>\n            <item>box</item>\n            <item>boxplot</item>\n            <item>break</item>\n            <item>bug_report</item>\n            <item>build_info</item>\n            <item>buildq</item>\n            <item>burn</item>\n            <item>cabs</item>\n            <item>canform</item>\n            <item>canten</item>\n            <item>cardinality</item>\n            <item>carg</item>\n            <item>cartan</item>\n            <item>cartesian_product</item>\n            <item>catch</item>\n            <item>cbffac</item>\n            <item>cdf_bernoulli</item>\n            <item>cdf_beta</item>\n            <item>cdf_binomial</item>\n            <item>cdf_cauchy</item>\n            <item>cdf_chi2</item>\n            <item>cdf_continuous_uniform</item>\n            <item>cdf_discrete_uniform</item>\n            <item>cdf_exp</item>\n            <item>cdf_f</item>\n            <item>cdf_gamma</item>\n            <item>cdf_geometric</item>\n            <item>cdf_gumbel</item>\n            <item>cdf_hypergeometric</item>\n            <item>cdf_laplace</item>\n            <item>cdf_logistic</item>\n            <item>cdf_lognormal</item>\n            <item>cdf_negative_binomial</item>\n            <item>cdf_normal</item>\n            <item>cdf_pareto</item>\n            <item>cdf_poisson</item>\n            <item>cdf_rank_sum</item>\n            <item>cdf_rayleigh</item>\n            <item>cdf_signed_rank</item>\n            <item>cdf_student_t</item>\n            <item>cdf_weibull</item>\n            <item>cdisplay</item>\n            <item>celine</item>\n            <item>ceiling</item>\n            <item>central_moment</item>\n            <item>cequal</item>\n            <item>cequalignore</item>\n            <item>cf</item>\n            <item>cfdisrep</item>\n            <item>cfexpand</item>\n            <item>cgeodesic</item>\n            <item>cgreaterp</item>\n            <item>cgreaterpignore</item>\n            <item>changename</item>\n            <item>changevar</item>\n            <item>chaosgame</item>\n            <item>charat</item>\n            <item>charfun</item>\n            <item>charfun2</item>\n            <item>charlist</item>\n            <item>charp</item>\n            <item>charpoly</item>\n            <item>chebyshev_t</item>\n            <item>chebyshev_u</item>\n            <item>checkdiv</item>\n            <item>check_overlaps</item>\n            <item>cholesky</item>\n            <item>christof</item>\n            <item>chromatic_index</item>\n            <item>chromatic_number</item>\n            <item>cint</item>\n            <item>circulant_graph</item>\n            <item>clear_edge_weight</item>\n            <item>clear_rules</item>\n            <item>clear_vertex_label</item>\n            <item>clebsch_graph</item>\n            <item>clessp</item>\n            <item>clesspignore</item>\n            <item>close</item>\n            <item>closefile</item>\n            <item>cmetric</item>\n            <item>coeff</item>\n            <item>coefmatrix</item>\n            <item>cograd</item>\n            <item>col</item>\n            <item>collapse</item>\n            <item>collectterms</item>\n            <item>columnop</item>\n            <item>columnspace</item>\n            <item>columnswap</item>\n            <item>columnvector</item>\n            <item>combination</item>\n            <item>combine</item>\n            <item>comp2pui</item>\n            <item>compare</item>\n            <item>compfile</item>\n            <item>compile</item>\n            <item>compile_file</item>\n            <item>complement_graph</item>\n            <item>complete_bipartite_graph</item>\n            <item>complete_graph</item>\n            <item>components</item>\n            <item>concan</item>\n            <item>concat</item>\n            <item>conjugate</item>\n            <item>conmetderiv</item>\n            <item>connected_components</item>\n            <item>connect_vertices</item>\n            <item>cons</item>\n            <item>constantp</item>\n            <item>constituent</item>\n            <item>cont2part</item>\n            <item>content</item>\n            <item>continuous_freq</item>\n            <item>contortion</item>\n            <item>contour_plot</item>\n            <item>contract</item>\n            <item>contract_edge</item>\n            <item>contragrad</item>\n            <item>contrib_ode</item>\n            <item>convert</item>\n            <item>coord</item>\n            <item>copy</item>\n            <item>copy_graph</item>\n            <item>copylist</item>\n            <item>copymatrix</item>\n            <item>cor</item>\n            <item>cos</item>\n            <item>cosh</item>\n            <item>cot</item>\n            <item>coth</item>\n            <item>cov</item>\n            <item>cov1</item>\n            <item>covdiff</item>\n            <item>covect</item>\n            <item>covers</item>\n            <item>create_graph</item>\n            <item>create_list</item>\n            <item>csc</item>\n            <item>csch</item>\n            <item>csetup</item>\n            <item>cspline</item>\n            <item>ctaylor</item>\n            <item>ct_coordsys</item>\n            <item>ctransform</item>\n            <item>ctranspose</item>\n            <item>cube_graph</item>\n            <item>cunlisp</item>\n            <item>cv</item>\n            <item>cycle_digraph</item>\n            <item>cycle_graph</item>\n            <item>dblint</item>\n            <item>deactivate</item>\n            <item>declare</item>\n            <item>declare_translated</item>\n            <item>declare_weight</item>\n            <item>decsym</item>\n            <item>defcon</item>\n            <item>define</item>\n            <item>define_variable</item>\n            <item>defint</item>\n            <item>defmatch</item>\n            <item>defrule</item>\n            <item>deftaylor</item>\n            <item>degree_sequence</item>\n            <item>del</item>\n            <item>delete</item>\n            <item>deleten</item>\n            <item>delta</item>\n            <item>demo</item>\n            <item>demoivre</item>\n            <item>denom</item>\n            <item>depends</item>\n            <item>derivdegree</item>\n            <item>derivlist</item>\n            <item>describe</item>\n            <item>desolve</item>\n            <item>determinant</item>\n            <item>dgauss_a</item>\n            <item>dgauss_b</item>\n            <item>dgeev</item>\n            <item>dgesvd</item>\n            <item>diag</item>\n            <item>diagmatrix</item>\n            <item>diag_matrix</item>\n            <item>diagmatrixp</item>\n            <item>diameter</item>\n            <item>diff</item>\n            <item>digitcharp</item>\n            <item>dimacs_export</item>\n            <item>dimacs_import</item>\n            <item>dimension</item>\n            <item>direct</item>\n            <item>discrete_freq</item>\n            <item>disjoin</item>\n            <item>disjointp</item>\n            <item>disolate</item>\n            <item>disp</item>\n            <item>dispcon</item>\n            <item>dispform</item>\n            <item>dispfun</item>\n            <item>dispJordan</item>\n            <item>display</item>\n            <item>disprule</item>\n            <item>dispterms</item>\n            <item>distrib</item>\n            <item>divide</item>\n            <item>divisors</item>\n            <item>divsum</item>\n            <item>dkummer_m</item>\n            <item>dkummer_u</item>\n            <item>dlange</item>\n            <item>dodecahedron_graph</item>\n            <item>dotproduct</item>\n            <item>dotsimp</item>\n            <item>dpart</item>\n            <item>draw</item>\n            <item>draw2d</item>\n            <item>draw3d</item>\n            <item>draw_graph</item>\n            <item>dscalar</item>\n            <item>echelon</item>\n            <item>edge_coloring</item>\n            <item>edges</item>\n            <item>eigens_by_jacobi</item>\n            <item>eigenvalues</item>\n            <item>eigenvectors</item>\n            <item>eighth</item>\n            <item>einstein</item>\n            <item>eivals</item>\n            <item>eivects</item>\n            <item>elapsed_real_time</item>\n            <item>elapsed_run_time</item>\n            <item>ele2comp</item>\n            <item>ele2polynome</item>\n            <item>ele2pui</item>\n            <item>elem</item>\n            <item>elementp</item>\n            <item>eliminate</item>\n            <item>elliptic_e</item>\n            <item>elliptic_ec</item>\n            <item>elliptic_eu</item>\n            <item>elliptic_f</item>\n            <item>elliptic_kc</item>\n            <item>elliptic_pi</item>\n            <item>ematrix</item>\n            <item>empty_graph</item>\n            <item>emptyp</item>\n            <item>endcons</item>\n            <item>entermatrix</item>\n            <item>entertensor</item>\n            <item>entier</item>\n            <item>equal</item>\n            <item>equalp</item>\n            <item>equiv_classes</item>\n            <item>erf</item>\n            <item>errcatch</item>\n            <item>error</item>\n            <item>errormsg</item>\n            <item>euler</item>\n            <item>ev</item>\n            <item>eval_string</item>\n            <item>evenp</item>\n            <item>every</item>\n            <item>evolution</item>\n            <item>evolution2d</item>\n            <item>evundiff</item>\n            <item>example</item>\n            <item>exp</item>\n            <item>expand</item>\n            <item>expandwrt</item>\n            <item>expandwrt_factored</item>\n            <item>explose</item>\n            <item>exponentialize</item>\n            <item>express</item>\n            <item>expt</item>\n            <item>exsec</item>\n            <item>extdiff</item>\n            <item>extract_linear_equations</item>\n            <item>extremal_subset</item>\n            <item>ezgcd</item>\n            <item>f90</item>\n            <item>facsum</item>\n            <item>factcomb</item>\n            <item>factor</item>\n            <item>factorfacsum</item>\n            <item>factorial</item>\n            <item>factorout</item>\n            <item>factorsum</item>\n            <item>facts</item>\n            <item>fast_central_elements</item>\n            <item>fast_linsolve</item>\n            <item>fasttimes</item>\n            <item>featurep</item>\n            <item>fft</item>\n            <item>fib</item>\n            <item>fibtophi</item>\n            <item>fifth</item>\n            <item>filename_merge</item>\n            <item>file_search</item>\n            <item>file_type</item>\n            <item>fillarray</item>\n            <item>findde</item>\n            <item>find_root</item>\n            <item>first</item>\n            <item>fix</item>\n            <item>flatten</item>\n            <item>flength</item>\n            <item>float</item>\n            <item>floatnump</item>\n            <item>floor</item>\n            <item>flower_snark</item>\n            <item>flush</item>\n            <item>flush1deriv</item>\n            <item>flushd</item>\n            <item>flushnd</item>\n            <item>forget</item>\n            <item>fortran</item>\n            <item>fourcos</item>\n            <item>fourexpand</item>\n            <item>fourier</item>\n            <item>fourint</item>\n            <item>fourintcos</item>\n            <item>fourintsin</item>\n            <item>foursimp</item>\n            <item>foursin</item>\n            <item>fourth</item>\n            <item>fposition</item>\n            <item>frame_bracket</item>\n            <item>freeof</item>\n            <item>freshline</item>\n            <item>from_adjacency_matrix</item>\n            <item>frucht_graph</item>\n            <item>full_listify</item>\n            <item>fullmap</item>\n            <item>fullmapl</item>\n            <item>fullratsimp</item>\n            <item>fullratsubst</item>\n            <item>fullsetify</item>\n            <item>funcsolve</item>\n            <item>fundef</item>\n            <item>funmake</item>\n            <item>funp</item>\n            <item>gamma</item>\n            <item>gauss_a</item>\n            <item>gauss_b</item>\n            <item>gaussprob</item>\n            <item>gcd</item>\n            <item>gcdex</item>\n            <item>gcdivide</item>\n            <item>gcfac</item>\n            <item>gcfactor</item>\n            <item>gd</item>\n            <item>genfact</item>\n            <item>gen_laguerre</item>\n            <item>genmatrix</item>\n            <item>geometric</item>\n            <item>geometric_mean</item>\n            <item>geosum</item>\n            <item>get</item>\n            <item>get_edge_weight</item>\n            <item>get_lu_factors</item>\n            <item>get_pixel</item>\n            <item>get_vertex_label</item>\n            <item>gfactor</item>\n            <item>gfactorsum</item>\n            <item>ggf</item>\n            <item>girth</item>\n            <item>global_variances</item>\n            <item>gnuplot_close</item>\n            <item>gnuplot_replot</item>\n            <item>gnuplot_reset</item>\n            <item>gnuplot_restart</item>\n            <item>gnuplot_start</item>\n            <item>go</item>\n            <item>Gosper</item>\n            <item>GosperSum</item>\n            <item>gradef</item>\n            <item>gramschmidt</item>\n            <item>graph6_decode</item>\n            <item>graph6_encode</item>\n            <item>graph6_export</item>\n            <item>graph6_import</item>\n            <item>graph_center</item>\n            <item>graph_charpoly</item>\n            <item>graph_eigenvalues</item>\n            <item>graph_order</item>\n            <item>graph_periphery</item>\n            <item>graph_product</item>\n            <item>graph_size</item>\n            <item>graph_union</item>\n            <item>grid_graph</item>\n            <item>grind</item>\n            <item>grobner_basis</item>\n            <item>grotzch_graph</item>\n            <item>hamilton_cycle</item>\n            <item>hamilton_path</item>\n            <item>hankel</item>\n            <item>harmonic</item>\n            <item>harmonic_mean</item>\n            <item>hav</item>\n            <item>heawood_graph</item>\n            <item>hermite</item>\n            <item>hessian</item>\n            <item>hilbert_matrix</item>\n            <item>hipow</item>\n            <item>histogram</item>\n            <item>hodge</item>\n            <item>horner</item>\n            <item>ic1</item>\n            <item>ic2</item>\n            <item>ic_convert</item>\n            <item>ichr1</item>\n            <item>ichr2</item>\n            <item>icosahedron_graph</item>\n            <item>icurvature</item>\n            <item>ident</item>\n            <item>identfor</item>\n            <item>identity</item>\n            <item>idiff</item>\n            <item>idim</item>\n            <item>idummy</item>\n            <item>ieqn</item>\n            <item>ifactors</item>\n            <item>iframes</item>\n            <item>ifs</item>\n            <item>ift</item>\n            <item>igeodesic_coords</item>\n            <item>ilt</item>\n            <item>imagpart</item>\n            <item>imetric</item>\n            <item>implicit_derivative</item>\n            <item>implicit_plot</item>\n            <item>indexed_tensor</item>\n            <item>indices</item>\n            <item>induced_subgraph</item>\n            <item>inferencep</item>\n            <item>inference_result</item>\n            <item>infix</item>\n            <item>init_atensor</item>\n            <item>init_ctensor</item>\n            <item>in_neighbors</item>\n            <item>innerproduct</item>\n            <item>inpart</item>\n            <item>inprod</item>\n            <item>inrt</item>\n            <item>integerp</item>\n            <item>integer_partitions</item>\n            <item>integrate</item>\n            <item>intersect</item>\n            <item>intersection</item>\n            <item>intervalp</item>\n            <item>intopois</item>\n            <item>intosum</item>\n            <item>invariant1</item>\n            <item>invariant2</item>\n            <item>inverse_jacobi_cd</item>\n            <item>inverse_jacobi_cn</item>\n            <item>inverse_jacobi_cs</item>\n            <item>inverse_jacobi_dc</item>\n            <item>inverse_jacobi_dn</item>\n            <item>inverse_jacobi_ds</item>\n            <item>inverse_jacobi_nc</item>\n            <item>inverse_jacobi_nd</item>\n            <item>inverse_jacobi_ns</item>\n            <item>inverse_jacobi_sc</item>\n            <item>inverse_jacobi_sd</item>\n            <item>inverse_jacobi_sn</item>\n            <item>invert</item>\n            <item>invert_by_lu</item>\n            <item>inv_mod</item>\n            <item>is</item>\n            <item>is_biconnected</item>\n            <item>is_bipartite</item>\n            <item>is_connected</item>\n            <item>is_digraph</item>\n            <item>is_edge_in_graph</item>\n            <item>is_graph</item>\n            <item>is_graph_or_digraph</item>\n            <item>ishow</item>\n            <item>is_isomorphic</item>\n            <item>isolate</item>\n            <item>isomorphism</item>\n            <item>is_planar</item>\n            <item>isqrt</item>\n            <item>is_sconnected</item>\n            <item>is_tree</item>\n            <item>is_vertex_in_graph</item>\n            <item>items_inference</item>\n            <item>jacobi</item>\n            <item>jacobian</item>\n            <item>jacobi_cd</item>\n            <item>jacobi_cn</item>\n            <item>jacobi_cs</item>\n            <item>jacobi_dc</item>\n            <item>jacobi_dn</item>\n            <item>jacobi_ds</item>\n            <item>jacobi_nc</item>\n            <item>jacobi_nd</item>\n            <item>jacobi_ns</item>\n            <item>jacobi_p</item>\n            <item>jacobi_sc</item>\n            <item>jacobi_sd</item>\n            <item>jacobi_sn</item>\n            <item>JF</item>\n            <item>join</item>\n            <item>jordan</item>\n            <item>julia</item>\n            <item>kdels</item>\n            <item>kdelta</item>\n            <item>kill</item>\n            <item>killcontext</item>\n            <item>kostka</item>\n            <item>kron_delta</item>\n            <item>kronecker_product</item>\n            <item>kummer_m</item>\n            <item>kummer_u</item>\n            <item>kurtosis</item>\n            <item>kurtosis_bernoulli</item>\n            <item>kurtosis_beta</item>\n            <item>kurtosis_binomial</item>\n            <item>kurtosis_chi2</item>\n            <item>kurtosis_continuous_uniform</item>\n            <item>kurtosis_discrete_uniform</item>\n            <item>kurtosis_exp</item>\n            <item>kurtosis_f</item>\n            <item>kurtosis_gamma</item>\n            <item>kurtosis_geometric</item>\n            <item>kurtosis_gumbel</item>\n            <item>kurtosis_hypergeometric</item>\n            <item>kurtosis_laplace</item>\n            <item>kurtosis_logistic</item>\n            <item>kurtosis_lognormal</item>\n            <item>kurtosis_negative_binomial</item>\n            <item>kurtosis_normal</item>\n            <item>kurtosis_pareto</item>\n            <item>kurtosis_poisson</item>\n            <item>kurtosis_rayleigh</item>\n            <item>kurtosis_student_t</item>\n            <item>kurtosis_weibull</item>\n            <item>labels</item>\n            <item>lagrange</item>\n            <item>laguerre</item>\n            <item>lambda</item>\n            <item>laplace</item>\n            <item>laplacian_matrix</item>\n            <item>last</item>\n            <item>lbfgs</item>\n            <item>lc2kdt</item>\n            <item>lcharp</item>\n            <item>lc_l</item>\n            <item>lcm</item>\n            <item>lc_u</item>\n            <item>ldefint</item>\n            <item>ldisp</item>\n            <item>ldisplay</item>\n            <item>legendre_p</item>\n            <item>legendre_q</item>\n            <item>leinstein</item>\n            <item>length</item>\n            <item>let</item>\n            <item>letrules</item>\n            <item>letsimp</item>\n            <item>levi_civita</item>\n            <item>lfreeof</item>\n            <item>lgtreillis</item>\n            <item>lhs</item>\n            <item>li</item>\n            <item>liediff</item>\n            <item>limit</item>\n            <item>Lindstedt</item>\n            <item>linear</item>\n            <item>linearinterpol</item>\n            <item>linear_program</item>\n            <item>line_graph</item>\n            <item>linsolve</item>\n            <item>listarray</item>\n            <item>list_correlations</item>\n            <item>listify</item>\n            <item>list_nc_monomials</item>\n            <item>listoftens</item>\n            <item>listofvars</item>\n            <item>listp</item>\n            <item>lmax</item>\n            <item>lmin</item>\n            <item>load</item>\n            <item>loadfile</item>\n            <item>local</item>\n            <item>locate_matrix_entry</item>\n            <item>log</item>\n            <item>logand</item>\n            <item>logarc</item>\n            <item>logcontract</item>\n            <item>logor</item>\n            <item>logxor</item>\n            <item>lopow</item>\n            <item>lorentz_gauge</item>\n            <item>lowercasep</item>\n            <item>lpart</item>\n            <item>lratsubst</item>\n            <item>lreduce</item>\n            <item>lriemann</item>\n            <item>lsquares_estimates</item>\n            <item>lsquares_estimates_approximate</item>\n            <item>lsquares_estimates_exact</item>\n            <item>lsquares_mse</item>\n            <item>lsquares_residual_mse</item>\n            <item>lsquares_residuals</item>\n            <item>lsum</item>\n            <item>ltreillis</item>\n            <item>lu_backsub</item>\n            <item>lu_factor</item>\n            <item>macroexpand</item>\n            <item>macroexpand1</item>\n            <item>make_array</item>\n            <item>makebox</item>\n            <item>makefact</item>\n            <item>makegamma</item>\n            <item>make_level_picture</item>\n            <item>makelist</item>\n            <item>makeOrders</item>\n            <item>make_poly_continent</item>\n            <item>make_poly_country</item>\n            <item>make_polygon</item>\n            <item>make_random_state</item>\n            <item>make_rgb_picture</item>\n            <item>makeset</item>\n            <item>make_transform</item>\n            <item>mandelbrot</item>\n            <item>map</item>\n            <item>mapatom</item>\n            <item>maplist</item>\n            <item>matchdeclare</item>\n            <item>matchfix</item>\n            <item>mat_cond</item>\n            <item>mat_fullunblocker</item>\n            <item>mat_function</item>\n            <item>mat_norm</item>\n            <item>matrix</item>\n            <item>matrixmap</item>\n            <item>matrixp</item>\n            <item>matrix_size</item>\n            <item>mattrace</item>\n            <item>mat_trace</item>\n            <item>mat_unblocker</item>\n            <item>max</item>\n            <item>max_clique</item>\n            <item>max_degree</item>\n            <item>max_flow</item>\n            <item>maxi</item>\n            <item>maximize_lp</item>\n            <item>max_independent_set</item>\n            <item>max_matching</item>\n            <item>maybe</item>\n            <item>mean</item>\n            <item>mean_bernoulli</item>\n            <item>mean_beta</item>\n            <item>mean_binomial</item>\n            <item>mean_chi2</item>\n            <item>mean_continuous_uniform</item>\n            <item>mean_deviation</item>\n            <item>mean_discrete_uniform</item>\n            <item>mean_exp</item>\n            <item>mean_f</item>\n            <item>mean_gamma</item>\n            <item>mean_geometric</item>\n            <item>mean_gumbel</item>\n            <item>mean_hypergeometric</item>\n            <item>mean_laplace</item>\n            <item>mean_logistic</item>\n            <item>mean_lognormal</item>\n            <item>mean_negative_binomial</item>\n            <item>mean_normal</item>\n            <item>mean_pareto</item>\n            <item>mean_poisson</item>\n            <item>mean_rayleigh</item>\n            <item>mean_student_t</item>\n            <item>mean_weibull</item>\n            <item>median</item>\n            <item>median_deviation</item>\n            <item>member</item>\n            <item>metricexpandall</item>\n            <item>min</item>\n            <item>min_degree</item>\n            <item>minfactorial</item>\n            <item>mini</item>\n            <item>minimalPoly</item>\n            <item>minimize_lp</item>\n            <item>minimum_spanning_tree</item>\n            <item>minor</item>\n            <item>mnewton</item>\n            <item>mod</item>\n            <item>mode_declare</item>\n            <item>mode_identity</item>\n            <item>ModeMatrix</item>\n            <item>moebius</item>\n            <item>mon2schur</item>\n            <item>mono</item>\n            <item>monomial_dimensions</item>\n            <item>multi_elem</item>\n            <item>multinomial</item>\n            <item>multinomial_coeff</item>\n            <item>multi_orbit</item>\n            <item>multi_pui</item>\n            <item>multsym</item>\n            <item>multthru</item>\n            <item>mycielski_graph</item>\n            <item>nary</item>\n            <item>nc_degree</item>\n            <item>ncexpt</item>\n            <item>ncharpoly</item>\n            <item>negative_picture</item>\n            <item>neighbors</item>\n            <item>newcontext</item>\n            <item>newdet</item>\n            <item>new_graph</item>\n            <item>newline</item>\n            <item>newton</item>\n            <item>next_prime</item>\n            <item>niceindices</item>\n            <item>ninth</item>\n            <item>noncentral_moment</item>\n            <item>nonmetricity</item>\n            <item>nonnegintegerp</item>\n            <item>nonscalarp</item>\n            <item>nonzeroandfreeof</item>\n            <item>notequal</item>\n            <item>nounify</item>\n            <item>nptetrad</item>\n            <item>nroots</item>\n            <item>nterms</item>\n            <item>ntermst</item>\n            <item>nthroot</item>\n            <item>nullity</item>\n            <item>nullspace</item>\n            <item>num</item>\n            <item>numbered_boundaries</item>\n            <item>numberp</item>\n            <item>num_distinct_partitions</item>\n            <item>numerval</item>\n            <item>numfactor</item>\n            <item>num_partitions</item>\n            <item>nusum</item>\n            <item>odd_girth</item>\n            <item>oddp</item>\n            <item>ode2</item>\n            <item>ode_check</item>\n            <item>odelin</item>\n            <item>op</item>\n            <item>opena</item>\n            <item>openr</item>\n            <item>openw</item>\n            <item>operatorp</item>\n            <item>opsubst</item>\n            <item>optimize</item>\n            <item>orbit</item>\n            <item>orbits</item>\n            <item>ordergreat</item>\n            <item>ordergreatp</item>\n            <item>orderless</item>\n            <item>orderlessp</item>\n            <item>orthogonal_complement</item>\n            <item>orthopoly_recur</item>\n            <item>orthopoly_weight</item>\n            <item>outermap</item>\n            <item>out_neighbors</item>\n            <item>outofpois</item>\n            <item>pade</item>\n            <item>parGosper</item>\n            <item>parse_string</item>\n            <item>part</item>\n            <item>part2cont</item>\n            <item>partfrac</item>\n            <item>partition</item>\n            <item>partition_set</item>\n            <item>partpol</item>\n            <item>path_digraph</item>\n            <item>path_graph</item>\n            <item>pdf_bernoulli</item>\n            <item>pdf_beta</item>\n            <item>pdf_binomial</item>\n            <item>pdf_cauchy</item>\n            <item>pdf_chi2</item>\n            <item>pdf_continuous_uniform</item>\n            <item>pdf_discrete_uniform</item>\n            <item>pdf_exp</item>\n            <item>pdf_f</item>\n            <item>pdf_gamma</item>\n            <item>pdf_geometric</item>\n            <item>pdf_gumbel</item>\n            <item>pdf_hypergeometric</item>\n            <item>pdf_laplace</item>\n            <item>pdf_logistic</item>\n            <item>pdf_lognormal</item>\n            <item>pdf_negative_binomial</item>\n            <item>pdf_normal</item>\n            <item>pdf_pareto</item>\n            <item>pdf_poisson</item>\n            <item>pdf_rank_sum</item>\n            <item>pdf_rayleigh</item>\n            <item>pdf_signed_rank</item>\n            <item>pdf_student_t</item>\n            <item>pdf_weibull</item>\n            <item>pearson_skewness</item>\n            <item>permanent</item>\n            <item>permut</item>\n            <item>permutation</item>\n            <item>permutations</item>\n            <item>petersen_graph</item>\n            <item>petrov</item>\n            <item>pickapart</item>\n            <item>picture_equalp</item>\n            <item>picturep</item>\n            <item>piechart</item>\n            <item>planar_embedding</item>\n            <item>playback</item>\n            <item>plog</item>\n            <item>plot2d</item>\n            <item>plot3d</item>\n            <item>plotdf</item>\n            <item>plsquares</item>\n            <item>pochhammer</item>\n            <item>poisdiff</item>\n            <item>poisexpt</item>\n            <item>poisint</item>\n            <item>poismap</item>\n            <item>poisplus</item>\n            <item>poissimp</item>\n            <item>poissubst</item>\n            <item>poistimes</item>\n            <item>poistrim</item>\n            <item>polarform</item>\n            <item>polartorect</item>\n            <item>poly_add</item>\n            <item>poly_buchberger</item>\n            <item>poly_buchberger_criterion</item>\n            <item>poly_colon_ideal</item>\n            <item>poly_content</item>\n            <item>polydecomp</item>\n            <item>poly_depends_p</item>\n            <item>poly_elimination_ideal</item>\n            <item>poly_exact_divide</item>\n            <item>poly_expand</item>\n            <item>poly_expt</item>\n            <item>poly_gcd</item>\n            <item>poly_grobner</item>\n            <item>poly_grobner_equal</item>\n            <item>poly_grobner_member</item>\n            <item>poly_grobner_subsetp</item>\n            <item>poly_ideal_intersection</item>\n            <item>poly_ideal_polysaturation</item>\n            <item>poly_ideal_polysaturation1</item>\n            <item>poly_ideal_saturation</item>\n            <item>poly_ideal_saturation1</item>\n            <item>poly_lcm</item>\n            <item>poly_minimization</item>\n            <item>polymod</item>\n            <item>poly_multiply</item>\n            <item>polynome2ele</item>\n            <item>polynomialp</item>\n            <item>poly_normal_form</item>\n            <item>poly_normalize</item>\n            <item>poly_normalize_list</item>\n            <item>poly_polysaturation_extension</item>\n            <item>poly_primitive_part</item>\n            <item>poly_pseudo_divide</item>\n            <item>poly_reduced_grobner</item>\n            <item>poly_reduction</item>\n            <item>poly_saturation_extension</item>\n            <item>poly_s_polynomial</item>\n            <item>poly_subtract</item>\n            <item>polytocompanion</item>\n            <item>potential</item>\n            <item>power_mod</item>\n            <item>powers</item>\n            <item>powerseries</item>\n            <item>powerset</item>\n            <item>prev_prime</item>\n            <item>primep</item>\n            <item>print</item>\n            <item>printf</item>\n            <item>print_graph</item>\n            <item>printpois</item>\n            <item>printprops</item>\n            <item>prodrac</item>\n            <item>product</item>\n            <item>properties</item>\n            <item>propvars</item>\n            <item>psi</item>\n            <item>ptriangularize</item>\n            <item>pui</item>\n            <item>pui2comp</item>\n            <item>pui2ele</item>\n            <item>pui2polynome</item>\n            <item>pui_direct</item>\n            <item>puireduc</item>\n            <item>put</item>\n            <item>qput</item>\n            <item>qrange</item>\n            <item>quad_qag</item>\n            <item>quad_qagi</item>\n            <item>quad_qags</item>\n            <item>quad_qawc</item>\n            <item>quad_qawf</item>\n            <item>quad_qawo</item>\n            <item>quad_qaws</item>\n            <item>quantile</item>\n            <item>quantile_bernoulli</item>\n            <item>quantile_beta</item>\n            <item>quantile_binomial</item>\n            <item>quantile_cauchy</item>\n            <item>quantile_chi2</item>\n            <item>quantile_continuous_uniform</item>\n            <item>quantile_discrete_uniform</item>\n            <item>quantile_exp</item>\n            <item>quantile_f</item>\n            <item>quantile_gamma</item>\n            <item>quantile_geometric</item>\n            <item>quantile_gumbel</item>\n            <item>quantile_hypergeometric</item>\n            <item>quantile_laplace</item>\n            <item>quantile_logistic</item>\n            <item>quantile_lognormal</item>\n            <item>quantile_negative_binomial</item>\n            <item>quantile_normal</item>\n            <item>quantile_pareto</item>\n            <item>quantile_poisson</item>\n            <item>quantile_rayleigh</item>\n            <item>quantile_student_t</item>\n            <item>quantile_weibull</item>\n            <item>quartile_skewness</item>\n            <item>quit</item>\n            <item>qunit</item>\n            <item>quotient</item>\n            <item>radcan</item>\n            <item>radius</item>\n            <item>random</item>\n            <item>random_bernoulli</item>\n            <item>random_beta</item>\n            <item>random_binomial</item>\n            <item>random_cauchy</item>\n            <item>random_chi2</item>\n            <item>random_continuous_uniform</item>\n            <item>random_digraph</item>\n            <item>random_discrete_uniform</item>\n            <item>random_exp</item>\n            <item>random_f</item>\n            <item>random_gamma</item>\n            <item>random_geometric</item>\n            <item>random_graph</item>\n            <item>random_graph1</item>\n            <item>random_gumbel</item>\n            <item>random_hypergeometric</item>\n            <item>random_laplace</item>\n            <item>random_logistic</item>\n            <item>random_lognormal</item>\n            <item>random_negative_binomial</item>\n            <item>random_network</item>\n            <item>random_normal</item>\n            <item>random_pareto</item>\n            <item>random_permutation</item>\n            <item>random_poisson</item>\n            <item>random_rayleigh</item>\n            <item>random_regular_graph</item>\n            <item>random_student_t</item>\n            <item>random_tournament</item>\n            <item>random_tree</item>\n            <item>random_weibull</item>\n            <item>range</item>\n            <item>rank</item>\n            <item>rat</item>\n            <item>ratcoef</item>\n            <item>ratdenom</item>\n            <item>ratdiff</item>\n            <item>ratdisrep</item>\n            <item>ratexpand</item>\n            <item>rational</item>\n            <item>rationalize</item>\n            <item>ratnumer</item>\n            <item>ratnump</item>\n            <item>ratp</item>\n            <item>ratsimp</item>\n            <item>ratsubst</item>\n            <item>ratvars</item>\n            <item>ratweight</item>\n            <item>read</item>\n            <item>read_hashed_array</item>\n            <item>readline</item>\n            <item>read_lisp_array</item>\n            <item>read_list</item>\n            <item>read_matrix</item>\n            <item>read_maxima_array</item>\n            <item>read_nested_list</item>\n            <item>readonly</item>\n            <item>read_xpm</item>\n            <item>realpart</item>\n            <item>realroots</item>\n            <item>rearray</item>\n            <item>rectform</item>\n            <item>recttopolar</item>\n            <item>rediff</item>\n            <item>reduce_consts</item>\n            <item>reduce_order</item>\n            <item>region_boundaries</item>\n            <item>rem</item>\n            <item>remainder</item>\n            <item>remarray</item>\n            <item>rembox</item>\n            <item>remcomps</item>\n            <item>remcon</item>\n            <item>remcoord</item>\n            <item>remfun</item>\n            <item>remfunction</item>\n            <item>remlet</item>\n            <item>remove</item>\n            <item>remove_edge</item>\n            <item>remove_vertex</item>\n            <item>rempart</item>\n            <item>remrule</item>\n            <item>remsym</item>\n            <item>remvalue</item>\n            <item>rename</item>\n            <item>reset</item>\n            <item>residue</item>\n            <item>resolvante</item>\n            <item>resolvante_alternee1</item>\n            <item>resolvante_bipartite</item>\n            <item>resolvante_diedrale</item>\n            <item>resolvante_klein</item>\n            <item>resolvante_klein3</item>\n            <item>resolvante_produit_sym</item>\n            <item>resolvante_unitaire</item>\n            <item>resolvante_vierer</item>\n            <item>rest</item>\n            <item>resultant</item>\n            <item>return</item>\n            <item>reveal</item>\n            <item>reverse</item>\n            <item>revert</item>\n            <item>revert2</item>\n            <item>rgb2level</item>\n            <item>rhs</item>\n            <item>ricci</item>\n            <item>riemann</item>\n            <item>rinvariant</item>\n            <item>risch</item>\n            <item>rk</item>\n            <item>rncombine</item>\n            <item>romberg</item>\n            <item>room</item>\n            <item>rootscontract</item>\n            <item>row</item>\n            <item>rowop</item>\n            <item>rowswap</item>\n            <item>rreduce</item>\n            <item>run_testsuite</item>\n            <item>save</item>\n            <item>scalarp</item>\n            <item>scaled_bessel_i</item>\n            <item>scaled_bessel_i0</item>\n            <item>scaled_bessel_i1</item>\n            <item>scalefactors</item>\n            <item>scanmap</item>\n            <item>scatterplot</item>\n            <item>schur2comp</item>\n            <item>sconcat</item>\n            <item>scopy</item>\n            <item>scsimp</item>\n            <item>scurvature</item>\n            <item>sdowncase</item>\n            <item>sec</item>\n            <item>sech</item>\n            <item>second</item>\n            <item>sequal</item>\n            <item>sequalignore</item>\n            <item>setdifference</item>\n            <item>set_edge_weight</item>\n            <item>setelmx</item>\n            <item>setequalp</item>\n            <item>setify</item>\n            <item>setp</item>\n            <item>set_partitions</item>\n            <item>set_plot_option</item>\n            <item>set_random_state</item>\n            <item>setunits</item>\n            <item>setup_autoload</item>\n            <item>set_up_dot_simplifications</item>\n            <item>set_vertex_label</item>\n            <item>seventh</item>\n            <item>sexplode</item>\n            <item>sf</item>\n            <item>shortest_path</item>\n            <item>show</item>\n            <item>showcomps</item>\n            <item>showratvars</item>\n            <item>sign</item>\n            <item>signum</item>\n            <item>similaritytransform</item>\n            <item>simple_linear_regression</item>\n            <item>simplify_sum</item>\n            <item>simplode</item>\n            <item>simpmetderiv</item>\n            <item>simtran</item>\n            <item>sin</item>\n            <item>sinh</item>\n            <item>sinsert</item>\n            <item>sinvertcase</item>\n            <item>sixth</item>\n            <item>skewness</item>\n            <item>skewness_bernoulli</item>\n            <item>skewness_beta</item>\n            <item>skewness_binomial</item>\n            <item>skewness_chi2</item>\n            <item>skewness_continuous_uniform</item>\n            <item>skewness_discrete_uniform</item>\n            <item>skewness_exp</item>\n            <item>skewness_f</item>\n            <item>skewness_gamma</item>\n            <item>skewness_geometric</item>\n            <item>skewness_gumbel</item>\n            <item>skewness_hypergeometric</item>\n            <item>skewness_laplace</item>\n            <item>skewness_logistic</item>\n            <item>skewness_lognormal</item>\n            <item>skewness_negative_binomial</item>\n            <item>skewness_normal</item>\n            <item>skewness_pareto</item>\n            <item>skewness_poisson</item>\n            <item>skewness_rayleigh</item>\n            <item>skewness_student_t</item>\n            <item>skewness_weibull</item>\n            <item>slength</item>\n            <item>smake</item>\n            <item>smismatch</item>\n            <item>solve</item>\n            <item>solve_rec</item>\n            <item>solve_rec_rat</item>\n            <item>some</item>\n            <item>somrac</item>\n            <item>sort</item>\n            <item>sparse6_decode</item>\n            <item>sparse6_encode</item>\n            <item>sparse6_export</item>\n            <item>sparse6_import</item>\n            <item>specint</item>\n            <item>spherical_bessel_j</item>\n            <item>spherical_bessel_y</item>\n            <item>spherical_hankel1</item>\n            <item>spherical_hankel2</item>\n            <item>spherical_harmonic</item>\n            <item>splice</item>\n            <item>split</item>\n            <item>sposition</item>\n            <item>sprint</item>\n            <item>sqfr</item>\n            <item>sqrt</item>\n            <item>sqrtdenest</item>\n            <item>sremove</item>\n            <item>sremovefirst</item>\n            <item>sreverse</item>\n            <item>ssearch</item>\n            <item>ssort</item>\n            <item>sstatus</item>\n            <item>ssubst</item>\n            <item>ssubstfirst</item>\n            <item>staircase</item>\n            <item>status</item>\n            <item>std</item>\n            <item>std1</item>\n            <item>std_bernoulli</item>\n            <item>std_beta</item>\n            <item>std_binomial</item>\n            <item>std_chi2</item>\n            <item>std_continuous_uniform</item>\n            <item>std_discrete_uniform</item>\n            <item>std_exp</item>\n            <item>std_f</item>\n            <item>std_gamma</item>\n            <item>std_geometric</item>\n            <item>std_gumbel</item>\n            <item>std_hypergeometric</item>\n            <item>std_laplace</item>\n            <item>std_logistic</item>\n            <item>std_lognormal</item>\n            <item>std_negative_binomial</item>\n            <item>std_normal</item>\n            <item>std_pareto</item>\n            <item>std_poisson</item>\n            <item>std_rayleigh</item>\n            <item>std_student_t</item>\n            <item>std_weibull</item>\n            <item>stirling</item>\n            <item>stirling1</item>\n            <item>stirling2</item>\n            <item>strim</item>\n            <item>striml</item>\n            <item>strimr</item>\n            <item>string</item>\n            <item>stringout</item>\n            <item>stringp</item>\n            <item>strong_components</item>\n            <item>sublis</item>\n            <item>sublist</item>\n            <item>sublist_indices</item>\n            <item>submatrix</item>\n            <item>subsample</item>\n            <item>subset</item>\n            <item>subsetp</item>\n            <item>subst</item>\n            <item>substinpart</item>\n            <item>substpart</item>\n            <item>substring</item>\n            <item>subvar</item>\n            <item>subvarp</item>\n            <item>sum</item>\n            <item>sumcontract</item>\n            <item>summand_to_rec</item>\n            <item>supcase</item>\n            <item>supcontext</item>\n            <item>symbolp</item>\n            <item>symmdifference</item>\n            <item>symmetricp</item>\n            <item>system</item>\n            <item>take_channel</item>\n            <item>take_inference</item>\n            <item>tan</item>\n            <item>tanh</item>\n            <item>taylor</item>\n            <item>taylorinfo</item>\n            <item>taylorp</item>\n            <item>taylor_simplifier</item>\n            <item>taytorat</item>\n            <item>tcl_output</item>\n            <item>tcontract</item>\n            <item>tellrat</item>\n            <item>tellsimp</item>\n            <item>tellsimpafter</item>\n            <item>tentex</item>\n            <item>tenth</item>\n            <item>test_mean</item>\n            <item>test_means_difference</item>\n            <item>test_normality</item>\n            <item>test_rank_sum</item>\n            <item>test_sign</item>\n            <item>test_signed_rank</item>\n            <item>test_variance</item>\n            <item>test_variance_ratio</item>\n            <item>tex</item>\n            <item>texput</item>\n            <item>%th</item>\n            <item>third</item>\n            <item>throw</item>\n            <item>time</item>\n            <item>timedate</item>\n            <item>timer</item>\n            <item>timer_info</item>\n            <item>tldefint</item>\n            <item>tlimit</item>\n            <item>todd_coxeter</item>\n            <item>toeplitz</item>\n            <item>tokens</item>\n            <item>to_lisp</item>\n            <item>topological_sort</item>\n            <item>totaldisrep</item>\n            <item>totalfourier</item>\n            <item>totient</item>\n            <item>tpartpol</item>\n            <item>trace</item>\n            <item>tracematrix</item>\n            <item>trace_options</item>\n            <item>translate</item>\n            <item>translate_file</item>\n            <item>transpose</item>\n            <item>tree_reduce</item>\n            <item>treillis</item>\n            <item>treinat</item>\n            <item>triangularize</item>\n            <item>trigexpand</item>\n            <item>trigrat</item>\n            <item>trigreduce</item>\n            <item>trigsimp</item>\n            <item>trunc</item>\n            <item>tr_warnings_get</item>\n            <item>ueivects</item>\n            <item>uforget</item>\n            <item>ultraspherical</item>\n            <item>underlying_graph</item>\n            <item>undiff</item>\n            <item>union</item>\n            <item>unique</item>\n            <item>uniteigenvectors</item>\n            <item>unit_step</item>\n            <item>unitvector</item>\n            <item>unknown</item>\n            <item>unorder</item>\n            <item>unsum</item>\n            <item>untellrat</item>\n            <item>untimer</item>\n            <item>untrace</item>\n            <item>uppercasep</item>\n            <item>uricci</item>\n            <item>uriemann</item>\n            <item>uvect</item>\n            <item>vandermonde_matrix</item>\n            <item>var</item>\n            <item>var1</item>\n            <item>var_bernoulli</item>\n            <item>var_beta</item>\n            <item>var_binomial</item>\n            <item>var_chi2</item>\n            <item>var_continuous_uniform</item>\n            <item>var_discrete_uniform</item>\n            <item>var_exp</item>\n            <item>var_f</item>\n            <item>var_gamma</item>\n            <item>var_geometric</item>\n            <item>var_gumbel</item>\n            <item>var_hypergeometric</item>\n            <item>var_laplace</item>\n            <item>var_logistic</item>\n            <item>var_lognormal</item>\n            <item>var_negative_binomial</item>\n            <item>var_normal</item>\n            <item>var_pareto</item>\n            <item>var_poisson</item>\n            <item>var_rayleigh</item>\n            <item>var_student_t</item>\n            <item>var_weibull</item>\n            <item>vectorpotential</item>\n            <item>vectorsimp</item>\n            <item>verbify</item>\n            <item>vers</item>\n            <item>vertex_coloring</item>\n            <item>vertex_degree</item>\n            <item>vertex_distance</item>\n            <item>vertex_eccentricity</item>\n            <item>vertex_in_degree</item>\n            <item>vertex_out_degree</item>\n            <item>vertices</item>\n            <item>vertices_to_cycle</item>\n            <item>vertices_to_path</item>\n            <item>weyl</item>\n            <item>wheel_graph</item>\n            <item>with_stdout</item>\n            <item>write_data</item>\n            <item>writefile</item>\n            <item>wronskian</item>\n            <item>xgraph_curves</item>\n            <item>xreduce</item>\n            <item>xthru</item>\n            <item>Zeilberger</item>\n            <item>zeroequiv</item>\n            <item>zerofor</item>\n            <item>zeromatrix</item>\n            <item>zeromatrixp</item>\n            <item>zeta</item>\n            <item>zlange</item>\n        </list>\n\n        <list name=\"MaximaVariable\">\n            <item>_</item>\n            <item>__</item>\n            <item>%</item>\n            <item>%%</item>\n            <item>absboxchar</item>\n            <item>activecontexts</item>\n            <item>additive</item>\n            <item>algebraic</item>\n            <item>algepsilon</item>\n            <item>algexact</item>\n            <item>aliases</item>\n            <item>all_dotsimp_denoms</item>\n            <item>allbut</item>\n            <item>allsym</item>\n            <item>arrays</item>\n            <item>askexp</item>\n            <item>assume_pos</item>\n            <item>assume_pos_pred</item>\n            <item>assumescalar</item>\n            <item>atomgrad</item>\n            <item>backsubst</item>\n            <item>berlefact</item>\n            <item>besselexpand</item>\n            <item>bftorat</item>\n            <item>bftrunc</item>\n            <item>boxchar</item>\n            <item>breakup</item>\n            <item>cauchysum</item>\n            <item>cflength</item>\n            <item>cframe_flag</item>\n            <item>cnonmet_flag</item>\n            <item>context</item>\n            <item>contexts</item>\n            <item>cosnpiflag</item>\n            <item>ctaypov</item>\n            <item>ctaypt</item>\n            <item>ctayswitch</item>\n            <item>ctayvar</item>\n            <item>ct_coords</item>\n            <item>ctorsion_flag</item>\n            <item>ctrgsimp</item>\n            <item>current_let_rule_package</item>\n            <item>debugmode</item>\n            <item>default_let_rule_package</item>\n            <item>demoivre</item>\n            <item>dependencies</item>\n            <item>derivabbrev</item>\n            <item>derivsubst</item>\n            <item>detout</item>\n            <item>diagmetric</item>\n            <item>dim</item>\n            <item>dispflag</item>\n            <item>display2d</item>\n            <item>display_format_internal</item>\n            <item>doallmxops</item>\n            <item>domain</item>\n            <item>domxexpt</item>\n            <item>domxmxops</item>\n            <item>domxnctimes</item>\n            <item>dontfactor</item>\n            <item>doscmxops</item>\n            <item>doscmxplus</item>\n            <item>dot0nscsimp</item>\n            <item>dot0simp</item>\n            <item>dot1simp</item>\n            <item>dotassoc</item>\n            <item>dotconstrules</item>\n            <item>dotdistrib</item>\n            <item>dotexptsimp</item>\n            <item>dotident</item>\n            <item>dotscrules</item>\n            <item>draw_graph_program</item>\n            <item>%e</item>\n            <item>%edispflag</item>\n            <item>%emode</item>\n            <item>%enumer</item>\n            <item>epsilon_lp</item>\n            <item>erfflag</item>\n            <item>error</item>\n            <item>error_size</item>\n            <item>error_syms</item>\n            <item>%e_to_numlog</item>\n            <item>evflag</item>\n            <item>evfun</item>\n            <item>expandwrt_denom</item>\n            <item>expon</item>\n            <item>exponentialize</item>\n            <item>expop</item>\n            <item>exptdispflag</item>\n            <item>exptisolate</item>\n            <item>exptsubst</item>\n            <item>facexpand</item>\n            <item>factlim</item>\n            <item>factorflag</item>\n            <item>file_output_append</item>\n            <item>file_search_demo</item>\n            <item>file_search_lisp</item>\n            <item>file_search_maxima</item>\n            <item>find_root_abs</item>\n            <item>find_root_error</item>\n            <item>find_root_rel</item>\n            <item>flipflag</item>\n            <item>float2bf</item>\n            <item>fortindent</item>\n            <item>fortspaces</item>\n            <item>fpprec</item>\n            <item>fpprintprec</item>\n            <item>functions</item>\n            <item>%gamma</item>\n            <item>gammalim</item>\n            <item>gdet</item>\n            <item>genindex</item>\n            <item>gensumnum</item>\n            <item>GGFCFMAX</item>\n            <item>GGFINFINITY</item>\n            <item>globalsolve</item>\n            <item>gradefs</item>\n            <item>grind</item>\n            <item>halfangles</item>\n            <item>%i</item>\n            <item>%iargs</item>\n            <item>ibase</item>\n            <item>icounter</item>\n            <item>idummyx</item>\n            <item>ieqnprint</item>\n            <item>iframe_bracket_form</item>\n            <item>igeowedge_flag</item>\n            <item>imetric</item>\n            <item>inchar</item>\n            <item>ind</item>\n            <item>inf</item>\n            <item>infeval</item>\n            <item>infinity</item>\n            <item>inflag</item>\n            <item>infolists</item>\n            <item>in_netmath</item>\n            <item>integrate_use_rootsof</item>\n            <item>integration_constant</item>\n            <item>integration_constant_counter</item>\n            <item>intfaclim</item>\n            <item>isolate_wrt_times</item>\n            <item>keepfloat</item>\n            <item>labels</item>\n            <item>letrat</item>\n            <item>let_rule_packages</item>\n            <item>lhospitallim</item>\n            <item>limsubst</item>\n            <item>linechar</item>\n            <item>linel</item>\n            <item>linenum</item>\n            <item>linsolve_params</item>\n            <item>linsolvewarn</item>\n            <item>lispdisp</item>\n            <item>listarith</item>\n            <item>listconstvars</item>\n            <item>listdummyvars</item>\n            <item>lmxchar</item>\n            <item>loadprint</item>\n            <item>logabs</item>\n            <item>logarc</item>\n            <item>logconcoeffp</item>\n            <item>logexpand</item>\n            <item>lognegint</item>\n            <item>lognumer</item>\n            <item>logsimp</item>\n            <item>m1pbranch</item>\n            <item>macroexpansion</item>\n            <item>maperror</item>\n            <item>mapprint</item>\n            <item>matrix_element_add</item>\n            <item>matrix_element_mult</item>\n            <item>matrix_element_transpose</item>\n            <item>maxapplydepth</item>\n            <item>maxapplyheight</item>\n            <item>maxima_tempdir</item>\n            <item>maxima_userdir</item>\n            <item>maxnegex</item>\n            <item>maxposex</item>\n            <item>maxpsifracdenom</item>\n            <item>maxpsifracnum</item>\n            <item>maxpsinegint</item>\n            <item>maxpsiposint</item>\n            <item>maxtayorder</item>\n            <item>method</item>\n            <item>minf</item>\n            <item>mode_check_errorp</item>\n            <item>mode_checkp</item>\n            <item>mode_check_warnp</item>\n            <item>modulus</item>\n            <item>multiplicities</item>\n            <item>myoptions</item>\n            <item>negdistrib</item>\n            <item>negsumdispflag</item>\n            <item>newtonepsilon</item>\n            <item>newtonmaxiter</item>\n            <item>niceindicespref</item>\n            <item>nolabels</item>\n            <item>nonegative_lp</item>\n            <item>noundisp</item>\n            <item>obase</item>\n            <item>opproperties</item>\n            <item>opsubst</item>\n            <item>optimprefix</item>\n            <item>optionset</item>\n            <item>outchar</item>\n            <item>packagefile</item>\n            <item>partswitch</item>\n            <item>pfeformat</item>\n            <item>%phi</item>\n            <item>%pi</item>\n            <item>%piargs</item>\n            <item>piece</item>\n            <item>plot_options</item>\n            <item>poislim</item>\n            <item>poly_coefficient_ring</item>\n            <item>poly_elimination_order</item>\n            <item>poly_grobner_algorithm</item>\n            <item>poly_grobner_debug</item>\n            <item>poly_monomial_order</item>\n            <item>poly_primary_elimination_order</item>\n            <item>poly_return_term_list</item>\n            <item>poly_secondary_elimination_order</item>\n            <item>poly_top_reduction_only</item>\n            <item>powerdisp</item>\n            <item>prederror</item>\n            <item>primep_number_of_tests</item>\n            <item>product_use_gamma</item>\n            <item>programmode</item>\n            <item>prompt</item>\n            <item>psexpand</item>\n            <item>radexpand</item>\n            <item>radsubstflag</item>\n            <item>random_beta_algorithm</item>\n            <item>random_binomial_algorithm</item>\n            <item>random_chi2_algorithm</item>\n            <item>random_exp_algorithm</item>\n            <item>random_f_algorithm</item>\n            <item>random_gamma_algorithm</item>\n            <item>random_geometric_algorithm</item>\n            <item>random_hypergeometric_algorithm</item>\n            <item>random_negative_binomial_algorithm</item>\n            <item>random_normal_algorithm</item>\n            <item>random_poisson_algorithm</item>\n            <item>random_student_t_algorithm</item>\n            <item>ratalgdenom</item>\n            <item>ratchristof</item>\n            <item>ratdenomdivide</item>\n            <item>rateinstein</item>\n            <item>ratepsilon</item>\n            <item>ratexpand</item>\n            <item>ratfac</item>\n            <item>ratmx</item>\n            <item>ratprint</item>\n            <item>ratriemann</item>\n            <item>ratsimpexpons</item>\n            <item>ratvars</item>\n            <item>ratweights</item>\n            <item>ratweyl</item>\n            <item>ratwtlvl</item>\n            <item>realonly</item>\n            <item>refcheck</item>\n            <item>rmxchar</item>\n            <item>%rnum_list</item>\n            <item>rombergabs</item>\n            <item>rombergit</item>\n            <item>rombergmin</item>\n            <item>rombergtol</item>\n            <item>rootsconmode</item>\n            <item>rootsepsilon</item>\n            <item>savedef</item>\n            <item>savefactors</item>\n            <item>scalarmatrixp</item>\n            <item>setcheck</item>\n            <item>setcheckbreak</item>\n            <item>setval</item>\n            <item>showtime</item>\n            <item>simplify_products</item>\n            <item>simpsum</item>\n            <item>sinnpiflag</item>\n            <item>solvedecomposes</item>\n            <item>solveexplicit</item>\n            <item>solvefactors</item>\n            <item>solve_inconsistent_error</item>\n            <item>solvenullwarn</item>\n            <item>solveradcan</item>\n            <item>solvetrigwarn</item>\n            <item>sparse</item>\n            <item>sqrtdispflag</item>\n            <item>stardisp</item>\n            <item>stats_numer</item>\n            <item>stringdisp</item>\n            <item>sublis_apply_lambda</item>\n            <item>sumexpand</item>\n            <item>sumsplitfact</item>\n            <item>taylordepth</item>\n            <item>taylor_logexpand</item>\n            <item>taylor_order_coefficients</item>\n            <item>taylor_truncate_polynomials</item>\n            <item>tensorkill</item>\n            <item>testsuite_files</item>\n            <item>timer_devalue</item>\n            <item>tlimswitch</item>\n            <item>transcompile</item>\n            <item>transrun</item>\n            <item>tr_array_as_ref</item>\n            <item>tr_bound_function_applyp</item>\n            <item>tr_file_tty_messagesp</item>\n            <item>tr_float_can_branch_complex</item>\n            <item>tr_function_call_default</item>\n            <item>trigexpandplus</item>\n            <item>trigexpandtimes</item>\n            <item>triginverses</item>\n            <item>trigsign</item>\n            <item>tr_numer</item>\n            <item>tr_optimize_max_loop</item>\n            <item>tr_semicompile</item>\n            <item>tr_state_vars</item>\n            <item>tr_warn_bad_function_calls</item>\n            <item>tr_warn_fexpr</item>\n            <item>tr_warn_meval</item>\n            <item>tr_warn_mode</item>\n            <item>tr_warn_undeclared</item>\n            <item>tr_warn_undefined_variable</item>\n            <item>tr_windy</item>\n            <item>ttyoff</item>\n            <item>und</item>\n            <item>use_fast_arrays</item>\n            <item>values</item>\n            <item>vect_cross</item>\n            <item>verbose</item>\n            <item>zeroa</item>\n            <item>zerob</item>\n            <item>zerobern</item>\n            <item>zeta%pi</item>\n        </list>\n\n<!-- Should quoted symbols be highlighted? (Now they aren't) -->\n\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Normal Text\" >\n                <keyword attribute=\"Function\" String=\"MaximaFunction\"/>\n                <keyword attribute=\"Variable\" String=\"MaximaVariable\"/>\n                <keyword attribute=\"Keyword\" String=\"MaximaKeyword\"/>\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"*\" beginRegion=\"comment\"/>\n                <RegExpr attribute=\"Label\" String=\"[a-zA-Z_][a-zA-Z0-9%_]*\"/>\n                <RegExpr attribute=\"Float\" String=\"[-+]?\\d+\\.\\d*([BbDdEeSs][-+]?\\d+)?\"/>\n                <RegExpr attribute=\"Float\" String=\"[-+]?\\.\\d+([BbDdEeSs][-+]?\\d+)?\"/>\n                <RegExpr attribute=\"Float\" String=\"[-+]?\\d+[BbDdEeSs][-+]?\\d+\"/>\n                <RegExpr attribute=\"Integer\" String=\"[-+]?\\d+\"/>\n                <DetectChar attribute=\"Quote\" char=\"'\"/>\n            </context>\n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\" >\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n\n            <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment\">\n                <keyword attribute=\"Special\" String=\"SpecialComment\"/>\n                <DetectSpaces/>\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"comment\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" bold=\"true\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsVariable\" italic=\"true\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\"/>\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\"/>\n            <itemData name=\"Label\" defStyleNum=\"dsConstant\"/>\n            <itemData name=\"Integer\" defStyleNum=\"dsDecVal\"/>\n            <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Quote\" defStyleNum=\"dsDocumentation\" bold=\"true\"/>\n            <itemData name=\"Special\" defStyleNum=\"dsSpecialString\" bold=\"true\" />\n        </itemDatas>\n\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n        </comments>\n        <keywords casesensitive=\"true\" weakDeliminator=\"%\" additionalDeliminator=\"@#\"/>\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mediawiki.xml",
    "content": "<?xml version = '1.0' encoding = 'UTF-8'?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n  <!ENTITY url          \"(http:|https:|ftp:|mailto:)[^]| ]*(?=$|[]|\\s])\">\n  <!ENTITY htmlTagName  \"(?![0-9])[\\w_:][\\w.:_-]*\">\n  <!ENTITY htmlEntity   \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&htmlTagName;);\">\n  <!ENTITY wikiLinkWithDescription \"\\[\\[[^]|]*\\|[^]]*\\]\\]\">\n  <!ENTITY wikiLinkWithoutDescription \"\\[\\[[^]|]*\\]\\]\">\n]>\n<language name=\"MediaWiki\" section=\"Markup\" version=\"6\" kateversion=\"5.0\" extensions=\"*.mediawiki\" mimetype=\"\" license=\"FDL\" >\n  <highlighting>\n    <contexts>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"normal\" >\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"[=]{5,5}(?!=)\" context=\"Section5\" attribute=\"Section\" column=\"0\" />\n        <RegExpr String=\"[=]{4,4}(?!=)\" context=\"Section4\" attribute=\"Section\" column=\"0\" />\n        <RegExpr String=\"[=]{3,3}(?!=)\" context=\"Section3\" attribute=\"Section\" column=\"0\" />\n        <RegExpr String=\"[=]{2,2}(?!=)\" context=\"Section2\" attribute=\"Section\" column=\"0\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <DetectChar char=\";\" attribute=\"WikiTag\" context=\"DefinitionListHeader\" column=\"0\" />\n        <IncludeRules context=\"FindListItem\" />\n        <IncludeRules context=\"FindUrl\" />\n        <IncludeRules context=\"FindTextDecorations\" />\n        <IncludeRules context=\"FindTable\" />\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"WikiTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <RegExpr String=\"[\\s]\" context=\"Unformatted\" column=\"0\" />\n      </context>\n      <context name=\"TableHeader\" attribute=\"Normal\" lineEndContext=\"TableContent\" >\n        <Detect2Chars char=\"{\" char1=\"|\" attribute=\"WikiTag\" beginRegion=\"table\" />\n        <IncludeRules context=\"FindHtmlStartTagAttributes\" />\n      </context>\n      <context name=\"TableContent\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" />\n        <RegExpr String=\"[=]{5,5}(?!=)\" context=\"Section5\" attribute=\"Section\" column=\"0\" />\n        <RegExpr String=\"[=]{4,4}(?!=)\" context=\"Section4\" attribute=\"Section\" column=\"0\" />\n        <RegExpr String=\"[=]{3,3}(?!=)\" context=\"Section3\" attribute=\"Section\" column=\"0\" />\n        <RegExpr String=\"[=]{2,2}(?!=)\" context=\"Section2\" attribute=\"Section\" column=\"0\" />\n        <DetectChar char=\";\" attribute=\"WikiTag\" context=\"DefinitionListHeader\" column=\"0\" />\n        <IncludeRules context=\"FindListItem\" />\n        <IncludeRules context=\"FindUrl\" />\n        <IncludeRules context=\"FindTextDecorations\" />\n        <IncludeRules context=\"FindTable\" />\n        <Detect2Chars char=\"|\" char1=\"}\" column=\"0\" attribute=\"WikiTag\" context=\"#pop#pop\" endRegion=\"table\" />\n        <Detect2Chars char=\"|\" char1=\"-\" column=\"0\" attribute=\"WikiTag\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"#stay\"/>\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"WikiTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <RegExpr String=\"[\\s]\" context=\"Unformatted\" column=\"0\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <RegExpr String=\"[-]{4,}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <DetectChar char=\"!\" attribute=\"WikiTag\" context=\"#stay\" column=\"0\" />\n      </context>\n      <context attribute=\"Section\" lineEndContext=\"#pop\" name=\"Section5\" >\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <IncludeRules context=\"FindUrl\" />\n        <IncludeRules context=\"FindTextDecorationsInHeader\" />\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <RegExpr String=\"={6,} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"={5,5} *$\" context=\"#pop\" attribute=\"Section\" />\n        <RegExpr String=\"={1,4} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"={1,4} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"=*[^=]+$\" context=\"#pop\" attribute=\"Normal\" />\n      </context>\n      <context attribute=\"Section\" lineEndContext=\"#pop\" name=\"Section4\" >\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <IncludeRules context=\"FindUrl\" />\n        <IncludeRules context=\"FindTextDecorationsInHeader\" />\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <RegExpr String=\"={5,} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"={4,4} *$\" context=\"#pop\" attribute=\"Section\" />\n        <RegExpr String=\"={1,3} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"=*[^=]+$\" context=\"#pop\" attribute=\"Normal\" />\n      </context>\n      <context attribute=\"Section\" lineEndContext=\"#pop\" name=\"Section3\" >\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <IncludeRules context=\"FindUrl\" />\n        <IncludeRules context=\"FindTextDecorationsInHeader\" />\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <RegExpr String=\"={4,} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"={3,3} *$\" context=\"#pop\" attribute=\"Section\" />\n        <RegExpr String=\"={1,2} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"=*[^=]+$\" context=\"#pop\" attribute=\"Normal\" />\n      </context>\n      <context attribute=\"Section\" lineEndContext=\"#pop\" name=\"Section2\" >\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <IncludeRules context=\"FindUrl\" />\n        <IncludeRules context=\"FindTextDecorationsInHeader\" />\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <RegExpr String=\"={3,} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"={2,2} *$\" context=\"#pop\" attribute=\"Section\" />\n        <RegExpr String=\"={1,1} *$\" context=\"#pop\" attribute=\"Normal\" />\n        <RegExpr String=\"=*[^=]+$\" context=\"#pop\" attribute=\"Normal\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"comment\" >\n        <StringDetect String=\"--&gt;\" context=\"#pop\" attribute=\"Comment\" endRegion=\"comment\" />\n      </context>\n      <context attribute=\"Link\" lineEndContext=\"#stay\" name=\"DelimitedURL\" >\n        <DetectChar char=\"]\" context=\"#pop\" attribute=\"WikiTag\" />\n        <DetectChar char=\"[\" context=\"#stay\" attribute=\"WikiTag\" />\n        <RegExpr String=\"&url;\" context=\"DelimitedUrlLink\" lookAhead=\"true\" />\n        <DetectChar char=\" \" context=\"URLTag\" attribute=\"WikiTag\" />\n      </context>\n      <context attribute=\"Link\" lineEndContext=\"#stay\" name=\"DelimitedUrlLink\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <DetectChar char=\" \" context=\"#pop\" lookAhead=\"true\" />\n        <DetectChar char=\"]\" context=\"#pop\" lookAhead=\"true\" />\n      </context>\n\n      <context attribute=\"Link\" lineEndContext=\"#pop\" name=\"LooseURL\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <DetectChar char=\" \" context=\"#pop\" attribute=\"WikiTag\" />\n      </context>\n      <context attribute=\"Link\" lineEndContext=\"#pop\" name=\"LooseURLWithinTemplate\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <Detect2Chars char=\"}\" char1=\"}\" context=\"#pop\" lookAhead=\"true\" />\n        <DetectChar char=\" \" context=\"#pop\" attribute=\"WikiTag\" />\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"URLTag\" >\n        <IncludeRules context=\"FindTextDecorations\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <DetectChar char=\"]\" context=\"#pop\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"WikiLinkWithoutDescriptionRules\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <Detect2Chars char=\"[\" char1=\"[\" attribute=\"WikiTag\" />\n        <Detect2Chars char=\"]\" char1=\"]\" context=\"#pop\" attribute=\"WikiTag\" />\n      </context>\n      <context name=\"WikiLinkWithDescriptionRules\" attribute=\"Normal\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n        <DetectChar char=\"#\" attribute=\"WikiTag\" />\n      </context>\n      <context name=\"WikiLink\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescription\" />\n      </context>\n      <context name=\"WikiLinkBoldWithDescription\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescriptionBold\" />\n      </context>\n      <context name=\"WikiLinkBoldWithoutDescription\" attribute=\"LinkBold\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n        <DetectChar char=\"#\" attribute=\"WikiTagBold\" />\n      </context>\n      <context name=\"WikiLinkItalicWithDescription\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescriptionItalic\" />\n      </context>\n      <context name=\"WikiLinkItalicWithoutDescription\" attribute=\"LinkItalic\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n        <DetectChar char=\"#\" attribute=\"WikiTagItalic\" />\n      </context>\n      <context name=\"WikiLinkUnderlinedWithDescription\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescriptionUnderlined\" />\n      </context>\n      <context name=\"WikiLinkUnderlinedWithoutDescription\" attribute=\"LinkUnderlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n        <DetectChar char=\"#\" attribute=\"WikiTagUnderlined\" />\n      </context>\n      <context name=\"WikiLinkBoldItalicWithDescription\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescriptionBoldItalic\" />\n      </context>\n      <context name=\"WikiLinkBoldItalicWithoutDescription\" attribute=\"LinkBoldItalic\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n        <DetectChar char=\"#\" attribute=\"WikiTagBoldItalic\" />\n      </context>\n      <context name=\"WikiLinkBoldUnderlinedWithDescription\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescriptionBoldUnderlined\" />\n      </context>\n      <context name=\"WikiLinkBoldUnderlinedWithoutDescription\" attribute=\"LinkBoldUnderlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n        <DetectChar char=\"#\" attribute=\"WikiTagBoldUnderlined\" />\n      </context>\n      <context name=\"WikiLinkItalicUnderlinedWithDescription\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescriptionItalicUnderlined\" />\n      </context>\n      <context name=\"WikiLinkItalicUnderlinedWithoutDescription\" attribute=\"LinkItalicUnderlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n        <DetectChar char=\"#\" attribute=\"WikiTagItalicUnderlined\" />\n      </context>\n      <context name=\"WikiLinkBoldItalicUnderlinedWithDescription\" attribute=\"Link\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkWithDescriptionRules\" />\n        <DetectChar char=\"|\" attribute=\"WikiTag\" context=\"WikiLinkDescriptionBoldItalicUnderlined\" />\n      </context>\n      <context name=\"WikiLinkBoldItalicUnderlinedWithoutDescription\" attribute=\"LinkBoldItalicUnderlined\" lineEndContext=\"#stay\" >\n        <DetectChar char=\"#\" attribute=\"WikiTagBoldItalicUnderlined\" />\n        <IncludeRules context=\"WikiLinkWithoutDescriptionRules\" />\n      </context>\n\n      <context name=\"WikiLinkDescriptionRules\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <Detect2Chars char=\"]\" char1=\"]\" context=\"#pop\" attribute=\"WikiTag\" lookAhead=\"true\" />\n      </context>\n      <context name=\"WikiLinkDescription\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n        <IncludeRules context=\"FindTextDecorations\" />\n      </context>\n      <context name=\"WikiLinkDescriptionBold\" attribute=\"Bold\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n        <StringDetect String=\"''\" context=\"BoldItalic\" attribute=\"WikiTag\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"BoldUnderlined\" />\n      </context>\n      <context name=\"WikiLinkDescriptionItalic\" attribute=\"Italic\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n        <StringDetect String=\"'''\" attribute=\"WikiTag\" context=\"ItalicBold\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"ItalicUnderlined\" />\n      </context>\n      <context name=\"WikiLinkDescriptionUnderlined\" attribute=\"Underlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n        <StringDetect String=\"'''\" context=\"UnderlinedBold\" attribute=\"WikiTag\" />\n        <StringDetect String=\"''\" context=\"UnderlinedItalic\" attribute=\"WikiTag\" />\n      </context>\n      <context name=\"WikiLinkDescriptionBoldItalic\" attribute=\"BoldItalic\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"BoldItalicUnderlined\" />\n      </context>\n      <context name=\"WikiLinkDescriptionBoldUnderlined\" attribute=\"BoldUnderlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n        <StringDetect String=\"''\" context=\"BoldUnderlinedItalic\" attribute=\"WikiTag\" />\n      </context>\n      <context name=\"WikiLinkDescriptionItalicUnderlined\" attribute=\"ItalicUnderlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n        <StringDetect String=\"'''\" context=\"ItalicUnderlinedBold\" attribute=\"WikiTag\" />\n      </context>\n      <context name=\"WikiLinkDescriptionBoldItalicUnderlined\" attribute=\"BoldItalicUnderlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"WikiLinkDescriptionRules\" />\n      </context>\n\n      <context attribute=\"TemplateName\" lineEndContext=\"#stay\" name=\"Template\" >\n        <StringDetect String=\"|\" context=\"TemplateParameterSlot\" attribute=\"WikiTag\" />\n        <Detect2Chars char=\"}\" char1=\"}\" context=\"#pop\" attribute=\"WikiTag\" endRegion=\"template\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"TemplateParameterSlot\" >\n        <Detect2Chars char=\"}\" char1=\"}\" context=\"#pop\" attribute=\"WikiTag\" lookAhead=\"true\" />\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <IncludeRules context=\"FindListItem\" />\n        <IncludeRules context=\"FindUrlWithinTemplate\" />\n        <IncludeRules context=\"FindTextDecorations\" />\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <StringDetect String=\"|\" context=\"#pop\" attribute=\"WikiTag\" lookAhead=\"true\" />\n        <RegExpr String=\"[^{}|=]+(?=[=])\" attribute=\"Parameter\" context=\"TemplateParameterSlotEqual\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"TemplateParameterSlotEqual\" >\n        <Detect2Chars char=\"}\" char1=\"}\" context=\"#pop\" attribute=\"WikiTag\" lookAhead=\"true\" />\n        <StringDetect String=\"|\" context=\"#pop\" attribute=\"WikiTag\" lookAhead=\"true\" />\n        <StringDetect String=\"=\" context=\"TemplateParameterSlotValue\" attribute=\"WikiTag\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"TemplateParameterSlotValue\" >\n        <StringDetect String=\"&lt;!--\" context=\"comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"[~]{3,4}\" attribute=\"WikiTag\" context=\"#stay\" />\n        <IncludeRules context=\"FindListItem\" />\n        <IncludeRules context=\"FindUrlWithinTemplate\" />\n        <IncludeRules context=\"FindTextDecorations\" />\n        <StringDetect String=\"{{{\" context=\"TemplateParameter\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindTemplate\" />\n        <IncludeRules context=\"FindWikiLink\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n        <StringDetect String=\"&lt;nowiki&gt;\" context=\"NoWiki\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindSyntaxHighlightingHtmlElement\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <Detect2Chars char=\"}\" char1=\"}\" context=\"#pop\" attribute=\"WikiTag\" lookAhead=\"true\" />\n        <StringDetect String=\"|\" context=\"#pop\" attribute=\"WikiTag\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Parameter\" lineEndContext=\"#stay\" name=\"TemplateParameter\" >\n        <StringDetect String=\"}}}\" context=\"#pop\" attribute=\"WikiTag\" />\n      </context>\n      <context attribute=\"NoWiki\" lineEndContext=\"#stay\" name=\"NoWiki\" >\n        <RegExpr String=\"&lt;!--[^-]*--&gt;\" attribute=\"NoWiki\" />\n        <StringDetect String=\"&lt;/nowiki&gt;\" context=\"#pop\" attribute=\"HtmlTag\" />\n        <RegExpr String=\"[&lt;][^&gt;]+[&gt;]\" attribute=\"HtmlTag\" context=\"#stay\" />\n        <StringDetect String=\"&lt;pre&gt;\" context=\"Pre\" attribute=\"HtmlTag\" />\n      </context>\n      <context attribute=\"Unformatted\" lineEndContext=\"#pop\" name=\"Unformatted\" />\n      <context attribute=\"NoWiki\" lineEndContext=\"#stay\" name=\"Pre\" >\n        <StringDetect String=\"&lt;/pre&gt;\" context=\"#pop\" attribute=\"HtmlTag\" />\n      </context>\n\n\n\n      <!-- <source> and <syntaxhighlight> tags. -->\n\n      <context name=\"SourceStartTag\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"(^|\\s+)lang\\=(&quot;javascript&quot;|&apos;javascript&apos;)\" context=\"JavaScriptSourceStartTag\" lookAhead=\"true\" />\n        <DetectChar attribute=\"HtmlTag\" context=\"UnsupportedLanguageSourceStartTag\" char=\"&gt;\" lookAhead=\"true\" />\n        <IncludeRules context=\"FindHtmlStartTagAttributes\" />\n      </context>\n      <context name=\"SyntaxHighlightStartTag\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"(^|\\s+)lang\\=(&quot;javascript&quot;|&apos;javascript&apos;)\" context=\"JavaScriptSyntaxHighlightStartTag\" lookAhead=\"true\" />\n        <DetectChar attribute=\"HtmlTag\" context=\"UnsupportedLanguageSyntaxHighlightStartTag\" char=\"&gt;\" lookAhead=\"true\" />\n        <IncludeRules context=\"FindHtmlStartTagAttributes\" />\n      </context>\n\n\n      <context name=\"UnsupportedLanguageSourceStartTag\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlTag\" context=\"UnsupportedLanguageSourceContent\" char=\"&gt;\" />\n        <IncludeRules context=\"FindHtmlStartTagAttributes\" />\n      </context>\n      <context name=\"UnsupportedLanguageSyntaxHighlightStartTag\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlTag\" context=\"UnsupportedLanguageSyntaxHighlightContent\" char=\"&gt;\" />\n        <IncludeRules context=\"FindHtmlStartTagAttributes\" />\n      </context>\n\n      <context name=\"JavaScriptSourceStartTag\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlTag\" context=\"JavaScriptSourceContent\" char=\"&gt;\" />\n        <IncludeRules context=\"FindHtmlStartTagAttributes\" />\n      </context>\n      <context name=\"JavaScriptSyntaxHighlightStartTag\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlTag\" context=\"JavaScriptSyntaxHighlightContent\" char=\"&gt;\" />\n        <IncludeRules context=\"FindHtmlStartTagAttributes\" />\n      </context>\n\n\n      <context name=\"UnsupportedLanguageSourceContent\" attribute=\"NoWiki\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"SourceEnd\" />\n      </context>\n      <context name=\"UnsupportedLanguageSyntaxHighlightContent\" attribute=\"NoWiki\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"SyntaxHighlightEnd\" />\n      </context>\n\n      <context name=\"JavaScriptSourceContent\" attribute=\"NoWiki\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"SourceEnd\" />\n        <IncludeRules context=\"Normal##JavaScript\" />\n      </context>\n      <context name=\"JavaScriptSyntaxHighlightContent\" attribute=\"NoWiki\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;/syntaxhighlight&gt;\" context=\"#pop#pop#pop\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"SyntaxHighlightEnd\" />\n        <IncludeRules context=\"Normal##JavaScript\" />\n      </context>\n\n\n      <context name=\"SourceEnd\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;/source&gt;\" context=\"#pop#pop#pop\" attribute=\"HtmlTag\" />\n      </context>\n      <context name=\"SyntaxHighlightEnd\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"&lt;/syntaxhighlight&gt;\" context=\"#pop#pop#pop\" attribute=\"HtmlTag\" />\n      </context>\n\n\n      <context name=\"HtmlAttribute\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlAttribute\" context=\"HtmlValue\" char=\"=\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context name=\"HtmlValue\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlValue\" context=\"ValueWithDoubleQuotes\" char=\"&quot;\" />\n        <DetectChar attribute=\"HtmlValue\" context=\"ValueWithSingleQuotes\" char=\"&apos;\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n      </context>\n      <context name=\"ValueWithDoubleQuotes\" attribute=\"HtmlValue\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlValue\" context=\"#pop#pop#pop\" char=\"&quot;\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n      </context>\n      <context name=\"ValueWithSingleQuotes\" attribute=\"HtmlValue\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"HtmlValue\" context=\"#pop#pop#pop\" char=\"&apos;\" />\n        <IncludeRules context=\"FindHtmlEntities\" />\n      </context>\n\n\n\n      <context attribute=\"DefinitionListHeader\" lineEndContext=\"#pop\" name=\"DefinitionListHeader\" >\n        <DetectChar char=\":\" context=\"#pop\" attribute=\"WikiTag\" />\n      </context>\n      <context attribute=\"Bold\" lineEndContext=\"#pop\" name=\"Bold\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"'''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <StringDetect String=\"''\" context=\"BoldItalic\" attribute=\"WikiTag\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"BoldUnderlined\" />\n        <IncludeRules context=\"FindWikiLinkBeingBold\" />\n      </context>\n      <context attribute=\"Italic\" lineEndContext=\"#pop\" name=\"Italic\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"'''\" attribute=\"WikiTag\" context=\"ItalicBold\" />\n        <StringDetect String=\"''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"ItalicUnderlined\" />\n        <IncludeRules context=\"FindWikiLinkBeingItalic\" />\n      </context>\n      <context attribute=\"Underlined\" name=\"Underlined\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"'''\" context=\"UnderlinedBold\" attribute=\"WikiTag\" />\n        <StringDetect String=\"''\" context=\"UnderlinedItalic\" attribute=\"WikiTag\" />\n        <RegExpr String=\"&lt;/u *&gt;\" context=\"#pop\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingUnderlined\" />\n      </context>\n      <context name=\"BoldItalic\" attribute=\"BoldItalic\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"BoldItalicUnderlined\" />\n        <IncludeRules context=\"FindWikiLinkBeingBoldItalic\" />\n      </context>\n      <context name=\"ItalicBold\" attribute=\"BoldItalic\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"'''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"BoldItalicUnderlined\" />\n        <IncludeRules context=\"FindWikiLinkBeingBoldItalic\" />\n      </context>\n      <context name=\"BoldUnderlined\" attribute=\"BoldUnderlined\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <RegExpr String=\"&lt;/u *&gt;\" context=\"#pop\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"''\" context=\"BoldUnderlinedItalic\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingBoldUnderlined\" />\n      </context>\n      <context name=\"UnderlinedBold\" attribute=\"BoldUnderlined\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"'''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <StringDetect String=\"''\" context=\"BoldUnderlinedItalic\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingBoldUnderlined\" />\n      </context>\n      <context name=\"ItalicUnderlined\" attribute=\"ItalicUnderlined\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <RegExpr String=\"&lt;/u *&gt;\" context=\"#pop\" attribute=\"HtmlTag\" />\n        <StringDetect String=\"'''\" context=\"ItalicUnderlinedBold\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingItalicUnderlined\" />\n      </context>\n      <context name=\"UnderlinedItalic\" attribute=\"ItalicUnderlined\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <StringDetect String=\"'''\" context=\"ItalicUnderlinedBold\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingItalicUnderlined\" />\n      </context>\n      <context name=\"BoldItalicUnderlined\" attribute=\"BoldItalicUnderlined\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <RegExpr String=\"&lt;/u *&gt;\" context=\"#pop\" attribute=\"HtmlTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingBoldItalicUnderlined\" />\n      </context>\n      <context name=\"BoldUnderlinedItalic\" attribute=\"BoldItalicUnderlined\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingBoldItalicUnderlined\" />\n      </context>\n      <context name=\"ItalicUnderlinedBold\" attribute=\"BoldItalicUnderlined\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"FindTemplate\" />\n        <StringDetect String=\"'''\" context=\"#pop\" attribute=\"WikiTag\" />\n        <IncludeRules context=\"FindWikiLinkBeingBoldItalicUnderlined\" />\n      </context>\n\n      <!-- Contexts for inclusion. -->\n\n      <context name=\"FindHtmlEntities\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&htmlEntity;\" attribute=\"HtmlEntity\" />\n      </context>\n\n      <context name=\"FindHtmlStartTagAttributes\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"HtmlAttribute\" context=\"HtmlAttribute\" String=\"^&htmlTagName;\" />\n        <RegExpr attribute=\"HtmlAttribute\" context=\"HtmlAttribute\" String=\"\\s+&htmlTagName;\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"FindListItem\" >\n        <RegExpr String=\"[*#;:\\s]*[*#:]+\" attribute=\"WikiTag\" context=\"#stay\" column=\"0\" />\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"FindSyntaxHighlightingHtmlElement\" >\n        <RegExpr String=\"&lt;source(?=\\s)\" context=\"SourceStartTag\" attribute=\"HtmlTag\" />\n        <RegExpr String=\"&lt;syntaxhighlight(?=\\s)\" context=\"SyntaxHighlightStartTag\" attribute=\"HtmlTag\" />\n      </context>\n\n      <context name=\"FindTable\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"{\" char1=\"|\" column=\"0\" context=\"TableHeader\"  lookAhead=\"true\" />\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"FindTemplate\" >\n        <Detect2Chars char=\"{\" char1=\"{\" context=\"Template\" attribute=\"WikiTag\" beginRegion=\"template\" />\n      </context>\n\n      <context name=\"FindTextDecorations\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <StringDetect String=\"'''\" attribute=\"WikiTag\" context=\"Bold\" />\n        <StringDetect String=\"''\" attribute=\"WikiTag\" context=\"Italic\" />\n        <RegExpr String=\"&lt;u *&gt;\" attribute=\"HtmlTag\" context=\"Underlined\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"FindTextDecorationsInHeader\" >\n        <StringDetect String=\"'''\" attribute=\"WikiTag\" context=\"Bold\" />\n        <StringDetect String=\"''\" attribute=\"WikiTag\" context=\"BoldItalic\" />\n      </context>\n\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"FindUrl\" >\n        <RegExpr String=\"\\[&url;\" attribute=\"WikiTag\" context=\"DelimitedURL\" lookAhead=\"true\" />\n        <RegExpr String=\"&url;\" attribute=\"URL\" context=\"LooseURL\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Normal\" lineEndContext=\"#stay\" name=\"FindUrlWithinTemplate\" >\n        <RegExpr String=\"\\[&url;\" attribute=\"WikiTag\" context=\"DelimitedURL\" lookAhead=\"true\" />\n        <RegExpr String=\"&url;\" attribute=\"URL\" context=\"LooseURLWithinTemplate\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"FindWikiLink\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"[\" char1=\"[\" attribute=\"WikiTag\" context=\"WikiLink\" />\n      </context>\n      <context name=\"FindWikiLinkBeingBold\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&wikiLinkWithDescription;\" context=\"WikiLinkBoldWithDescription\" lookAhead=\"true\" />\n        <RegExpr String=\"&wikiLinkWithoutDescription;\" context=\"WikiLinkBoldWithoutDescription\" lookAhead=\"true\" />\n      </context>\n      <context name=\"FindWikiLinkBeingItalic\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&wikiLinkWithDescription;\" context=\"WikiLinkItalicWithDescription\" lookAhead=\"true\" />\n        <RegExpr String=\"&wikiLinkWithoutDescription;\" context=\"WikiLinkItalicWithoutDescription\" lookAhead=\"true\" />\n      </context>\n      <context name=\"FindWikiLinkBeingUnderlined\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&wikiLinkWithDescription;\" context=\"WikiLinkUnderlinedWithDescription\" lookAhead=\"true\" />\n        <RegExpr String=\"&wikiLinkWithoutDescription;\" context=\"WikiLinkUnderlinedWithoutDescription\" lookAhead=\"true\" />\n      </context>\n      <context name=\"FindWikiLinkBeingBoldItalic\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&wikiLinkWithDescription;\" context=\"WikiLinkBoldItalicWithDescription\" lookAhead=\"true\" />\n        <RegExpr String=\"&wikiLinkWithoutDescription;\" context=\"WikiLinkBoldItalicWithoutDescription\" lookAhead=\"true\" />\n      </context>\n      <context name=\"FindWikiLinkBeingBoldUnderlined\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&wikiLinkWithDescription;\" context=\"WikiLinkBoldUnderlinedWithDescription\" lookAhead=\"true\" />\n        <RegExpr String=\"&wikiLinkWithoutDescription;\" context=\"WikiLinkBoldUnderlinedWithoutDescription\" lookAhead=\"true\" />\n      </context>\n      <context name=\"FindWikiLinkBeingItalicUnderlined\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&wikiLinkWithDescription;\" context=\"WikiLinkItalicUnderlinedWithDescription\" lookAhead=\"true\" />\n        <RegExpr String=\"&wikiLinkWithoutDescription;\" context=\"WikiLinkItalicUnderlinedWithoutDescription\" lookAhead=\"true\" />\n      </context>\n      <context name=\"FindWikiLinkBeingBoldItalicUnderlined\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr String=\"&wikiLinkWithDescription;\" context=\"WikiLinkBoldItalicUnderlinedWithDescription\" lookAhead=\"true\" />\n        <RegExpr String=\"&wikiLinkWithoutDescription;\" context=\"WikiLinkBoldItalicUnderlinedWithoutDescription\" lookAhead=\"true\" />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Link\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"LinkBold\" defStyleNum=\"dsOthers\" bold=\"true\" />\n      <itemData name=\"LinkItalic\" defStyleNum=\"dsOthers\" italic=\"true\" />\n      <itemData name=\"LinkUnderlined\" defStyleNum=\"dsOthers\" underline=\"true\" />\n      <itemData name=\"LinkBoldItalic\" defStyleNum=\"dsOthers\" bold=\"true\" italic=\"true\" />\n      <itemData name=\"LinkBoldUnderlined\" defStyleNum=\"dsOthers\" bold=\"true\" underline=\"true\" />\n      <itemData name=\"LinkItalicUnderlined\" defStyleNum=\"dsOthers\" italic=\"true\" underline=\"true\" />\n      <itemData name=\"LinkBoldItalicUnderlined\" defStyleNum=\"dsOthers\" bold=\"true\" italic=\"true\" underline=\"true\" />\n      <itemData name=\"URL\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Section\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"DefinitionListHeader\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"HtmlEntity\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"HtmlTag\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"WikiTag\" defStyleNum=\"dsDecVal\" bold=\"true\" />\n      <itemData name=\"WikiTagBold\" defStyleNum=\"dsDecVal\" bold=\"true\" />\n      <itemData name=\"WikiTagItalic\" defStyleNum=\"dsDecVal\" bold=\"true\" italic=\"true\" />\n      <itemData name=\"WikiTagUnderlined\" defStyleNum=\"dsDecVal\" bold=\"true\" underline=\"true\" />\n      <itemData name=\"WikiTagBoldItalic\" defStyleNum=\"dsDecVal\" bold=\"true\" italic=\"true\" />\n      <itemData name=\"WikiTagBoldUnderlined\" defStyleNum=\"dsDecVal\" bold=\"true\" underline=\"true\" />\n      <itemData name=\"WikiTagItalicUnderlined\" defStyleNum=\"dsDecVal\" bold=\"true\" italic=\"true\" underline=\"true\" />\n      <itemData name=\"WikiTagBoldItalicUnderlined\" defStyleNum=\"dsDecVal\" bold=\"true\" italic=\"true\" underline=\"true\" />\n      <itemData name=\"Error\" defStyleNum=\"dsError\" />\n      <itemData name=\"NoWiki\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Unformatted\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Parameter\" defStyleNum=\"dsNormal\" bold=\"true\" />\n      <itemData name=\"TemplateName\" defStyleNum=\"dsOthers\" bold=\"true\" />\n      <itemData name=\"Bold\" defStyleNum=\"dsNormal\" bold=\"true\" />\n      <itemData name=\"Italic\" defStyleNum=\"dsNormal\" italic=\"true\" />\n      <itemData name=\"Underlined\" defStyleNum=\"dsNormal\" underline=\"true\" />\n      <itemData name=\"BoldItalic\" defStyleNum=\"dsNormal\" bold=\"true\" italic=\"true\" />\n      <itemData name=\"BoldUnderlined\" defStyleNum=\"dsNormal\" bold=\"true\" underline=\"true\" />\n      <itemData name=\"ItalicUnderlined\" defStyleNum=\"dsNormal\" italic=\"true\" underline=\"true\" />\n      <itemData name=\"BoldItalicUnderlined\" defStyleNum=\"dsNormal\" bold=\"true\" italic=\"true\" underline=\"true\" />\n      <itemData name=\"HtmlAttribute\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"HtmlValue\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment end=\"//-->\" start=\"&lt;!--\" name=\"multiLine\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mel.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  MEL (Maya Embedded Language)\n\n  GNU GENERAL PUBLIC LICENCE\n\nThis program, including associated files, is free software.  You may\ndistribute it and/or modify it under the terms of the GNU General Public\nLicense as published by the Free Software Foundation; either Version 2 of\nthe license, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\nor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\nfor more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n-->\n\n<language name=\"MEL\" section=\"Scripts\" version=\"4\" kateversion=\"2.4\" extensions=\"*.mel\" mimetype=\"\" author=\"Karl Erlandsen (karlerlandsen@yahoo.com)\" license=\"GPLv2+\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>false</item>\n      <item>for</item>\n      <item>global</item>\n      <item>if</item>\n      <item>in</item>\n      <item>proc</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>true</item>\n      <item>while</item>\n    </list>\n    \n    <!-- The command list can be automatically generated from the Maya Help Documentation in /usr/aw/maya/docs/Maya*/en_US/Commands\n         with the following bash script:\n         \n         #!/bin/bash\n         \n         cd /usr/aw/maya/docs/Maya*/en_US/Commands;\n         for file in *.html\n         do\n           echo \"      <item>${file%%.html}</item>\" >> ~/list.xml;\n         done\n         \n         -->\n    <list name=\"MEL commands\">\n      <item>about</item>\n      <item>abs</item>\n      <item>addAttr</item>\n      <item>addAttributeEditorNodeHelp</item>\n      <item>addDynamic</item>\n      <item>addNewShelfTab</item>\n      <item>addPanelCategory</item>\n      <item>addPP</item>\n      <item>addPrefixToName</item>\n      <item>advanceToNextDrivenKey</item>\n      <item>affectedNet</item>\n      <item>affects</item>\n      <item>aimConstraint</item>\n      <item>air</item>\n      <item>aliasAttr</item>\n      <item>alias</item>\n      <item>alignCtx</item>\n      <item>alignCurve</item>\n      <item>align</item>\n      <item>alignSurface</item>\n      <item>allViewFit</item>\n      <item>ambientLight</item>\n      <item>angleBetween</item>\n      <item>angle</item>\n      <item>animCurveEditor</item>\n      <item>animDisplay</item>\n      <item>animView</item>\n      <item>annotate</item>\n      <item>appendStringArray</item>\n      <item>applicationName</item>\n      <item>applyAttrPreset</item>\n      <item>applyTake</item>\n      <item>arcLenDimContext</item>\n      <item>arcLengthDimension</item>\n      <item>arclen</item>\n      <item>arrayMapper</item>\n      <item>art3dPaintCtx</item>\n      <item>artAttrCtx</item>\n      <item>artAttrPaintVertexCtx</item>\n      <item>artAttrSkinPaintCtx</item>\n      <item>artAttrTool</item>\n      <item>artBuildPaintMenu</item>\n      <item>artFluidAttrCtx</item>\n      <item>artPuttyCtx</item>\n      <item>artSelectCtx</item>\n      <item>artSetPaintCtx</item>\n      <item>artUserPaintCtx</item>\n      <item>assignCommand</item>\n      <item>assignInputDevice</item>\n      <item>assignViewportFactories</item>\n      <item>attachCurve</item>\n      <item>attachDeviceAttr</item>\n      <item>attachSurface</item>\n      <item>attrColorSliderGrp</item>\n      <item>attrCompatibility</item>\n      <item>attrControlGrp</item>\n      <item>attrEnumOptionMenuGrp</item>\n      <item>attrEnumOptionMenu</item>\n      <item>attrFieldGrp</item>\n      <item>attrFieldSliderGrp</item>\n      <item>attributeExists</item>\n      <item>attributeInfo</item>\n      <item>attributeMenu</item>\n      <item>attributeQuery</item>\n      <item>attrNavigationControlGrp</item>\n      <item>attrPresetEditWin</item>\n      <item>autoKeyframe</item>\n      <item>autoPlace</item>\n      <item>bakeClip</item>\n      <item>bakeFluidShading</item>\n      <item>bakePartialHistory</item>\n      <item>bakeResults</item>\n      <item>bakeSimulation</item>\n      <item>basenameEx</item>\n      <item>basename</item>\n      <item>batchRender</item>\n      <item>bessel</item>\n      <item>bevel</item>\n      <item>bevelPlus</item>\n      <item>bindSkin</item>\n      <item>binMembership</item>\n      <item>blank</item>\n      <item>blend2</item>\n      <item>blendShapeEditor</item>\n      <item>blendShape</item>\n      <item>blendShapePanel</item>\n      <item>blendTwoAttr</item>\n      <item>blindDataType</item>\n      <item>boneLattice</item>\n      <item>boundary</item>\n      <item>boxDollyCtx</item>\n      <item>boxZoomCtx</item>\n      <item>bufferCurve</item>\n      <item>buildBookmarkMenu</item>\n      <item>buildKeyframeMenu</item>\n      <item>button</item>\n      <item>buttonManip</item>\n      <item>cacheFileCombine</item>\n      <item>cacheFile</item>\n      <item>cacheFileMerge</item>\n      <item>cacheFileTrack</item>\n      <item>camera</item>\n      <item>cameraView</item>\n      <item>canCreateManip</item>\n      <item>canvas</item>\n      <item>capitalizeString</item>\n      <item>cat_Animation</item>\n      <item>catch</item>\n      <item>catchQuiet</item>\n      <item>cat_Effects</item>\n      <item>cat_General</item>\n      <item>cat_Language</item>\n      <item>cat_Modeling</item>\n      <item>cat_Rendering</item>\n      <item>cat_System</item>\n      <item>cat_Windows</item>\n      <item>CBG</item>\n      <item>ceil</item>\n      <item>changeSubdivComponentDisplayLevel</item>\n      <item>changeSubdivRegion</item>\n      <item>channelBox</item>\n      <item>character</item>\n      <item>characterize</item>\n      <item>characterMap</item>\n      <item>characterOutlineEditor</item>\n      <item>chdir</item>\n      <item>checkBoxGrp</item>\n      <item>checkBox</item>\n      <item>checkDefaultRenderGlobals</item>\n      <item>choice</item>\n      <item>circle</item>\n      <item>circularFillet</item>\n      <item>clamp</item>\n      <item>clearCache</item>\n      <item>clear</item>\n      <item>clipEditorCurrentTimeCtx</item>\n      <item>clipEditor</item>\n      <item>clip</item>\n      <item>clipSchedule</item>\n      <item>clipSchedulerOutliner</item>\n      <item>clipTrimBefore</item>\n      <item>closeCurve</item>\n      <item>closeSurface</item>\n      <item>cluster</item>\n      <item>cmdFileOutput</item>\n      <item>cmdScrollFieldExecuter</item>\n      <item>cmdScrollFieldReporter</item>\n      <item>cmdShell</item>\n      <item>coarsenSubdivSelectionList</item>\n      <item>collision</item>\n      <item>colorAtPoint</item>\n      <item>colorEditor</item>\n      <item>color</item>\n      <item>colorIndex</item>\n      <item>colorIndexSliderGrp</item>\n      <item>colorSliderButtonGrp</item>\n      <item>colorSliderGrp</item>\n      <item>columnLayout</item>\n      <item>commandEcho</item>\n      <item>commandLine</item>\n      <item>commandPort</item>\n      <item>compactHairSystem</item>\n      <item>componentEditor</item>\n      <item>compositingInterop</item>\n      <item>computePolysetVolume</item>\n      <item>condition</item>\n      <item>cone</item>\n      <item>confirmDialog</item>\n      <item>connectAttr</item>\n      <item>connectControl</item>\n      <item>connectDynamic</item>\n      <item>connectionInfo</item>\n      <item>connectJoint</item>\n      <item>constrain</item>\n      <item>constrainValue</item>\n      <item>constructionHistory</item>\n      <item>container</item>\n      <item>containsMultibyte</item>\n      <item>contextInfo</item>\n      <item>control</item>\n      <item>convertFromOldLayers</item>\n      <item>convertIffToPsd</item>\n      <item>convertLightmap</item>\n      <item>convertSolidTx</item>\n      <item>convertTessellation</item>\n      <item>convertUnit</item>\n      <item>copyArray</item>\n      <item>copyFlexor</item>\n      <item>copyKey</item>\n      <item>copySkinWeights</item>\n      <item>cos</item>\n      <item>cpButton</item>\n      <item>cpCache</item>\n      <item>cpClothSet</item>\n      <item>cpCollision</item>\n      <item>cpConstraint</item>\n      <item>cpConvClothToMesh</item>\n      <item>cpForces</item>\n      <item>cpGetSolverAttr</item>\n      <item>cpPanel</item>\n      <item>cpProperty</item>\n      <item>cpRigidCollisionFilter</item>\n      <item>cpSeam</item>\n      <item>cpSetEdit</item>\n      <item>cpSetSolverAttr</item>\n      <item>cpSolver</item>\n      <item>cpSolverTypes</item>\n      <item>cpTool</item>\n      <item>cpUpdateClothUVs</item>\n      <item>createDisplayLayer</item>\n      <item>createDrawCtx</item>\n      <item>createEditor</item>\n      <item>createLayeredPsdFile</item>\n      <item>createMotionField</item>\n      <item>createNewShelf</item>\n      <item>createNode</item>\n      <item>createRenderLayer</item>\n      <item>createSubdivRegion</item>\n      <item>cross</item>\n      <item>crossProduct</item>\n      <item>ctxAbort</item>\n      <item>ctxCompletion</item>\n      <item>ctxEditMode</item>\n      <item>ctxTraverse</item>\n      <item>currentCtx</item>\n      <item>currentTimeCtx</item>\n      <item>currentTime</item>\n      <item>currentUnit</item>\n      <item>curveAddPtCtx</item>\n      <item>curveCVCtx</item>\n      <item>curveEditorCtx</item>\n      <item>curveEPCtx</item>\n      <item>curve</item>\n      <item>curveIntersect</item>\n      <item>curveMoveEPCtx</item>\n      <item>curveOnSurface</item>\n      <item>curveSketchCtx</item>\n      <item>cutKey</item>\n      <item>cycleCheck</item>\n      <item>cylinder</item>\n      <item>dagPose</item>\n      <item>date</item>\n      <item>defaultLightListCheckBox</item>\n      <item>defaultNavigation</item>\n      <item>defineDataServer</item>\n      <item>defineVirtualDevice</item>\n      <item>deformer</item>\n      <item>deg_to_rad</item>\n      <item>deleteAttr</item>\n      <item>delete</item>\n      <item>deleteShadingGroupsAndMaterials</item>\n      <item>deleteShelfTab</item>\n      <item>deleteUI</item>\n      <item>deleteUnusedBrushes</item>\n      <item>delrandstr</item>\n      <item>detachCurve</item>\n      <item>detachDeviceAttr</item>\n      <item>detachSurface</item>\n      <item>deviceEditor</item>\n      <item>devicePanel</item>\n      <item>dgdirty</item>\n      <item>dgeval</item>\n      <item>dgInfo</item>\n      <item>dgtimer</item>\n      <item>dimWhen</item>\n      <item>directionalLight</item>\n      <item>directKeyCtx</item>\n      <item>dirmap</item>\n      <item>dirname</item>\n      <item>disable</item>\n      <item>disconnectAttr</item>\n      <item>disconnectJoint</item>\n      <item>diskCache</item>\n      <item>displacementToPoly</item>\n      <item>displayAffected</item>\n      <item>displayColor</item>\n      <item>displayCull</item>\n      <item>displayLevelOfDetail</item>\n      <item>displayPref</item>\n      <item>displayRGBColor</item>\n      <item>displaySmoothness</item>\n      <item>displayStats</item>\n      <item>displayString</item>\n      <item>displaySurface</item>\n      <item>distanceDimContext</item>\n      <item>distanceDimension</item>\n      <item>doBlur</item>\n      <item>dollyCtx</item>\n      <item>dolly</item>\n      <item>dopeSheetEditor</item>\n      <item>dot</item>\n      <item>dotProduct</item>\n      <item>doubleProfileBirailSurface</item>\n      <item>dragAttrContext</item>\n      <item>draggerContext</item>\n      <item>drag</item>\n      <item>dropoffLocator</item>\n      <item>duplicateCurve</item>\n      <item>duplicate</item>\n      <item>duplicateSurface</item>\n      <item>dynamicLoad</item>\n      <item>dynCache</item>\n      <item>dynControl</item>\n      <item>dynExport</item>\n      <item>dynExpression</item>\n      <item>dynGlobals</item>\n      <item>dynPaintEditor</item>\n      <item>dynParticleCtx</item>\n      <item>dynPref</item>\n      <item>dynRelEditor</item>\n      <item>dynRelEdPanel</item>\n      <item>editAttrLimits</item>\n      <item>editDisplayLayerGlobals</item>\n      <item>editDisplayLayerMembers</item>\n      <item>editor</item>\n      <item>editorTemplate</item>\n      <item>editRenderLayerAdjustment</item>\n      <item>editRenderLayerGlobals</item>\n      <item>editRenderLayerMembers</item>\n      <item>effector</item>\n      <item>emit</item>\n      <item>emitter</item>\n      <item>enableDevice</item>\n      <item>encodeString</item>\n      <item>endString</item>\n      <item>endsWith</item>\n      <item>env</item>\n      <item>equivalent</item>\n      <item>equivalentTol</item>\n      <item>erf</item>\n      <item>error</item>\n      <item>evalDeferred</item>\n      <item>evalEcho</item>\n      <item>eval</item>\n      <item>event</item>\n      <item>exactWorldBoundingBox</item>\n      <item>exclusiveLightCheckBox</item>\n      <item>exec</item>\n      <item>executeForEachObject</item>\n      <item>exists</item>\n      <item>exp</item>\n      <item>expressionEditorListen</item>\n      <item>expression</item>\n      <item>extendCurve</item>\n      <item>extendSurface</item>\n      <item>extrude</item>\n      <item>fcheck</item>\n      <item>fclose</item>\n      <item>feof</item>\n      <item>fflush</item>\n      <item>fgetline</item>\n      <item>fgetword</item>\n      <item>fileBrowserDialog</item>\n      <item>fileDialog</item>\n      <item>fileExtension</item>\n      <item>file</item>\n      <item>fileInfo</item>\n      <item>filetest</item>\n      <item>filletCurve</item>\n      <item>filterCurve</item>\n      <item>filterExpand</item>\n      <item>filter</item>\n      <item>filterStudioImport</item>\n      <item>findAllIntersections</item>\n      <item>findAnimCurves</item>\n      <item>finder</item>\n      <item>findKeyframe</item>\n      <item>findMenuItem</item>\n      <item>findRelatedSkinCluster</item>\n      <item>firstParentOf</item>\n      <item>fitBspline</item>\n      <item>flexor</item>\n      <item>floatEq</item>\n      <item>floatFieldGrp</item>\n      <item>floatField</item>\n      <item>floatScrollBar</item>\n      <item>floatSlider2</item>\n      <item>floatSliderButtonGrp</item>\n      <item>floatSliderGrp</item>\n      <item>floatSlider</item>\n      <item>floor</item>\n      <item>flow</item>\n      <item>fluidCacheInfo</item>\n      <item>fluidEmitter</item>\n      <item>fluidVoxelInfo</item>\n      <item>flushUndo</item>\n      <item>fmod</item>\n      <item>fontDialog</item>\n      <item>fopen</item>\n      <item>format</item>\n      <item>formLayout</item>\n      <item>fprint</item>\n      <item>frameLayout</item>\n      <item>frame_search</item>\n      <item>fread</item>\n      <item>freeFormFillet</item>\n      <item>frewind</item>\n      <item>fromNativePath</item>\n      <item>fwrite</item>\n      <item>gamma</item>\n      <item>gauss</item>\n      <item>geometryConstraint</item>\n      <item>getApplicationVersionAsFloat</item>\n      <item>getAttr</item>\n      <item>getClassification</item>\n      <item>getDefaultBrush</item>\n      <item>getenv</item>\n      <item>getFileList</item>\n      <item>getFluidAttr</item>\n      <item>getInputDeviceRange</item>\n      <item>getMayaPanelTypes</item>\n      <item>getModifiers</item>\n      <item>getPanel</item>\n      <item>getParticleAttr</item>\n      <item>getpid</item>\n      <item>getPluginResource</item>\n      <item>globalStitch</item>\n      <item>glRenderEditor</item>\n      <item>glRender</item>\n      <item>gmatch</item>\n      <item>goal</item>\n      <item>gotoBindPose</item>\n      <item>grabColor</item>\n      <item>gradientControl</item>\n      <item>gradientControlNoAttr</item>\n      <item>graphDollyCtx</item>\n      <item>graphSelectContext</item>\n      <item>graphTrackCtx</item>\n      <item>gravity</item>\n      <item>grid</item>\n      <item>gridLayout</item>\n      <item>group</item>\n      <item>groupObjectsByName</item>\n      <item>hardenPointCurve</item>\n      <item>hardware</item>\n      <item>hardwareRenderPanel</item>\n      <item>headsUpDisplay</item>\n      <item>headsUpMessage</item>\n      <item>help</item>\n      <item>helpLine</item>\n      <item>hermite</item>\n      <item>HfAddAttractorToAS</item>\n      <item>HfAssignAS</item>\n      <item>HfBuildEqualMap</item>\n      <item>HfBuildFurFiles</item>\n      <item>HfBuildFurImages</item>\n      <item>HfCancelAFR</item>\n      <item>HfConnectASToHF</item>\n      <item>HfCreateAttractor</item>\n      <item>HfDeleteAS</item>\n      <item>HfEditAS</item>\n      <item>HfPerformCreateAS</item>\n      <item>HfRemoveAttractorFromAS</item>\n      <item>HfSelectAttached</item>\n      <item>HfSelectAttractors</item>\n      <item>HfUnassignAS</item>\n      <item>hide</item>\n      <item>hilite</item>\n      <item>hitTest</item>\n      <item>hotBox</item>\n      <item>hotkeyCheck</item>\n      <item>hotkey</item>\n      <item>hsv_to_rgb</item>\n      <item>hudButton</item>\n      <item>hudSliderButton</item>\n      <item>hudSlider</item>\n      <item>hwReflectionMap</item>\n      <item>hwRender</item>\n      <item>hwRenderLoad</item>\n      <item>hyperGraph</item>\n      <item>hyperPanel</item>\n      <item>hyperShade</item>\n      <item>hypot</item>\n      <item>iconTextButton</item>\n      <item>iconTextCheckBox</item>\n      <item>iconTextRadioButton</item>\n      <item>iconTextRadioCollection</item>\n      <item>iconTextScrollList</item>\n      <item>iconTextStaticLabel</item>\n      <item>ikfkDisplayMethod</item>\n      <item>ikHandleCtx</item>\n      <item>ikHandleDisplayScale</item>\n      <item>ikHandle</item>\n      <item>ikSolver</item>\n      <item>ikSplineHandleCtx</item>\n      <item>ikSystem</item>\n      <item>ikSystemInfo</item>\n      <item>illustratorCurves</item>\n      <item>image</item>\n      <item>imfPlugins</item>\n      <item>index_all</item>\n      <item>index</item>\n      <item>index_overview</item>\n      <item>index_substring</item>\n      <item>inheritTransform</item>\n      <item>insertJointCtx</item>\n      <item>insertJoint</item>\n      <item>insertKeyCtx</item>\n      <item>insertKnotCurve</item>\n      <item>insertKnotSurface</item>\n      <item>instanceable</item>\n      <item>instance</item>\n      <item>instancer</item>\n      <item>internalVar</item>\n      <item>intersect</item>\n      <item>interToUI</item>\n      <item>intFieldGrp</item>\n      <item>intField</item>\n      <item>intScrollBar</item>\n      <item>intSliderGrp</item>\n      <item>intSlider</item>\n      <item>iprEngine</item>\n      <item>isAnimCurve</item>\n      <item>isConnected</item>\n      <item>isDirty</item>\n      <item>isolateSelect</item>\n      <item>isParentOf</item>\n      <item>isSameObject</item>\n      <item>isTrue</item>\n      <item>isValidObjectName</item>\n      <item>isValidString</item>\n      <item>isValidUiName</item>\n      <item>itemFilterAttr</item>\n      <item>itemFilter</item>\n      <item>itemFilterRender</item>\n      <item>itemFilterType</item>\n      <item>jointCluster</item>\n      <item>jointCtx</item>\n      <item>jointDisplayScale</item>\n      <item>joint</item>\n      <item>jointLattice</item>\n      <item>keyframe</item>\n      <item>keyframeOutliner</item>\n      <item>keyframeRegionCurrentTimeCtx</item>\n      <item>keyframeRegionDirectKeyCtx</item>\n      <item>keyframeRegionDollyCtx</item>\n      <item>keyframeRegionInsertKeyCtx</item>\n      <item>keyframeRegionMoveKeyCtx</item>\n      <item>keyframeRegionScaleKeyCtx</item>\n      <item>keyframeRegionSelectKeyCtx</item>\n      <item>keyframeRegionSetKeyCtx</item>\n      <item>keyframeRegionTrackCtx</item>\n      <item>keyframeStats</item>\n      <item>keyTangent</item>\n      <item>lassoContext</item>\n      <item>latticeDeformKeyCtx</item>\n      <item>lattice</item>\n      <item>launch</item>\n      <item>launchImageEditor</item>\n      <item>layerButton</item>\n      <item>layeredShaderPort</item>\n      <item>layeredTexturePort</item>\n      <item>layoutDialog</item>\n      <item>layout</item>\n      <item>lightlink</item>\n      <item>lightListEditor</item>\n      <item>lightList</item>\n      <item>lightListPanel</item>\n      <item>linearPrecision</item>\n      <item>lineIntersection</item>\n      <item>linstep</item>\n      <item>listAnimatable</item>\n      <item>listAttr</item>\n      <item>listCameras</item>\n      <item>listConnections</item>\n      <item>listDeviceAttachments</item>\n      <item>listerEditor</item>\n      <item>listHistory</item>\n      <item>listInputDeviceAxes</item>\n      <item>listInputDeviceButtons</item>\n      <item>listInputDevices</item>\n      <item>listMenuAnnotation</item>\n      <item>listNodeTypes</item>\n      <item>listPanelCategories</item>\n      <item>listRelatives</item>\n      <item>listSets</item>\n      <item>listTransforms</item>\n      <item>listUnselected</item>\n      <item>loadFluid</item>\n      <item>loadNewShelf</item>\n      <item>loadPlugin</item>\n      <item>loadPluginLanguageResources</item>\n      <item>loadPrefObjects</item>\n      <item>localizedPanelLabel</item>\n      <item>lockNode</item>\n      <item>loft</item>\n      <item>log</item>\n      <item>longNameOf</item>\n      <item>lookThru</item>\n      <item>ls</item>\n      <item>lsThroughFilter</item>\n      <item>lsType</item>\n      <item>lsUI</item>\n      <item>mag</item>\n      <item>makebot</item>\n      <item>makeIdentity</item>\n      <item>makeLive</item>\n      <item>makePaintable</item>\n      <item>makeRoll</item>\n      <item>makeSingleSurface</item>\n      <item>makeTubeOn</item>\n      <item>manipMoveContext</item>\n      <item>manipMoveLimitsCtx</item>\n      <item>manipOptions</item>\n      <item>manipRotateContext</item>\n      <item>manipRotateLimitsCtx</item>\n      <item>manipScaleContext</item>\n      <item>manipScaleLimitsCtx</item>\n      <item>marker</item>\n      <item>match</item>\n      <item>max</item>\n      <item>Mayatomr</item>\n      <item>memory</item>\n      <item>menuBarLayout</item>\n      <item>menuEditor</item>\n      <item>menu</item>\n      <item>menuItem</item>\n      <item>menuItemToShelf</item>\n      <item>menuSet</item>\n      <item>menuSetPref</item>\n      <item>messageLine</item>\n      <item>min</item>\n      <item>minimizeApp</item>\n      <item>mirrorJoint</item>\n      <item>modelCurrentTimeCtx</item>\n      <item>modelEditor</item>\n      <item>modelPanel</item>\n      <item>mouse</item>\n      <item>move</item>\n      <item>moveIKtoFK</item>\n      <item>moveKeyCtx</item>\n      <item>moveVertexAlongDirection</item>\n      <item>movIn</item>\n      <item>movOut</item>\n      <item>multiProfileBirailSurface</item>\n      <item>mute</item>\n      <item>nameCommand</item>\n      <item>nameField</item>\n      <item>namespace</item>\n      <item>namespaceInfo</item>\n      <item>nav_Animation</item>\n      <item>nav_Effects</item>\n      <item>nav_General</item>\n      <item>nav_Language</item>\n      <item>nav_Modeling</item>\n      <item>nav_Rendering</item>\n      <item>nav_System</item>\n      <item>nav_Windows</item>\n      <item>newPanelItems</item>\n      <item>newton</item>\n      <item>nodeCast</item>\n      <item>nodeIconButton</item>\n      <item>nodeOutliner</item>\n      <item>nodePreset</item>\n      <item>nodeType</item>\n      <item>noise</item>\n      <item>nonLinear</item>\n      <item>normalConstraint</item>\n      <item>normalize</item>\n      <item>nParticle</item>\n      <item>nurbsBoolean</item>\n      <item>nurbsCopyUVSet</item>\n      <item>nurbsCube</item>\n      <item>nurbsEditUV</item>\n      <item>nurbsPlane</item>\n      <item>nurbsSelect</item>\n      <item>nurbsSquare</item>\n      <item>nurbsToPolygonsPref</item>\n      <item>nurbsToPoly</item>\n      <item>nurbsToSubdiv</item>\n      <item>nurbsToSubdivPref</item>\n      <item>nurbsUVSet</item>\n      <item>nurbsViewDirectionVector</item>\n      <item>objectCenter</item>\n      <item>objectLayer</item>\n      <item>objectType</item>\n      <item>objectTypeUI</item>\n      <item>objExists</item>\n      <item>obsoleteProc</item>\n      <item>oceanNurbsPreviewPlane</item>\n      <item>offsetCurve</item>\n      <item>offsetCurveOnSurface</item>\n      <item>offsetSurface</item>\n      <item>openGLExtension</item>\n      <item>openMayaPref</item>\n      <item>optionMenuGrp</item>\n      <item>optionMenu</item>\n      <item>optionVar</item>\n      <item>orbitCtx</item>\n      <item>orbit</item>\n      <item>orientConstraint</item>\n      <item>outlinerEditor</item>\n      <item>outlinerPanel</item>\n      <item>overrideModifier</item>\n      <item>paintEffectsDisplay</item>\n      <item>pairBlend</item>\n      <item>palettePort</item>\n      <item>paneLayout</item>\n      <item>panelConfiguration</item>\n      <item>panelHistory</item>\n      <item>panel</item>\n      <item>paramDimContext</item>\n      <item>paramDimension</item>\n      <item>paramLocator</item>\n      <item>parentConstraint</item>\n      <item>parent</item>\n      <item>particleExists</item>\n      <item>particle</item>\n      <item>particleInstancer</item>\n      <item>particleRenderInfo</item>\n      <item>partition</item>\n      <item>pasteKey</item>\n      <item>pathAnimation</item>\n      <item>pause</item>\n      <item>pclose</item>\n      <item>percent</item>\n      <item>performanceOptions</item>\n      <item>pfxstrokes</item>\n      <item>pickWalk</item>\n      <item>picture</item>\n      <item>pixelMove</item>\n      <item>planarSrf</item>\n      <item>plane</item>\n      <item>playbackOptions</item>\n      <item>playblast</item>\n      <item>play</item>\n      <item>plugAttr</item>\n      <item>pluginInfo</item>\n      <item>pluginResourceUtil</item>\n      <item>plugNode</item>\n      <item>pointConstraint</item>\n      <item>pointCurveConstraint</item>\n      <item>pointLight</item>\n      <item>pointMatrixMult</item>\n      <item>pointOnCurve</item>\n      <item>pointOnSurface</item>\n      <item>pointPosition</item>\n      <item>poleVectorConstraint</item>\n      <item>polyAppendFacetCtx</item>\n      <item>polyAppend</item>\n      <item>polyAppendVertex</item>\n      <item>polyAutoProjection</item>\n      <item>polyAverageNormal</item>\n      <item>polyAverageVertex</item>\n      <item>polyBevel</item>\n      <item>polyBlendColor</item>\n      <item>polyBlindData</item>\n      <item>polyBoolOp</item>\n      <item>polyBridgeEdge</item>\n      <item>polyCacheMonitor</item>\n      <item>polyCheck</item>\n      <item>polyChipOff</item>\n      <item>polyClipboard</item>\n      <item>polyCloseBorder</item>\n      <item>polyCollapseEdge</item>\n      <item>polyCollapseFacet</item>\n      <item>polyColorBlindData</item>\n      <item>polyColorDel</item>\n      <item>polyColorPerVertex</item>\n      <item>polyColorSet</item>\n      <item>polyCompare</item>\n      <item>polyCone</item>\n      <item>polyCopyUV</item>\n      <item>polyCreaseCtx</item>\n      <item>polyCrease</item>\n      <item>polyCreateFacetCtx</item>\n      <item>polyCreateFacet</item>\n      <item>polyCube</item>\n      <item>polyCutCtx</item>\n      <item>polyCut</item>\n      <item>polyCylinder</item>\n      <item>polyCylindricalProjection</item>\n      <item>polyDelEdge</item>\n      <item>polyDelFacet</item>\n      <item>polyDelVertex</item>\n      <item>polyDuplicateAndConnect</item>\n      <item>polyDuplicateEdge</item>\n      <item>polyEditUV</item>\n      <item>polyEditUVShell</item>\n      <item>polyEvaluate</item>\n      <item>polyExtrudeEdge</item>\n      <item>polyExtrudeFacet</item>\n      <item>polyExtrudeVertex</item>\n      <item>polyFlipEdge</item>\n      <item>polyFlipUV</item>\n      <item>polyForceUV</item>\n      <item>polyGeoSampler</item>\n      <item>polyHelix</item>\n      <item>polyInfo</item>\n      <item>polyInstallAction</item>\n      <item>polyLayoutUV</item>\n      <item>polyListComponentConversion</item>\n      <item>polyMapCut</item>\n      <item>polyMapDel</item>\n      <item>polyMapSew</item>\n      <item>polyMapSewMove</item>\n      <item>polyMergeEdgeCtx</item>\n      <item>polyMergeEdge</item>\n      <item>polyMergeFacetCtx</item>\n      <item>polyMergeFacet</item>\n      <item>polyMergeUV</item>\n      <item>polyMergeVertex</item>\n      <item>polyMirrorFace</item>\n      <item>polyMoveEdge</item>\n      <item>polyMoveFacet</item>\n      <item>polyMoveFacetUV</item>\n      <item>polyMoveUV</item>\n      <item>polyMoveVertex</item>\n      <item>polyNormal</item>\n      <item>polyNormalizeUV</item>\n      <item>polyNormalPerVertex</item>\n      <item>polyOptions</item>\n      <item>polyOptUvs</item>\n      <item>polyOutput</item>\n      <item>polyPipe</item>\n      <item>polyPlanarProjection</item>\n      <item>polyPlane</item>\n      <item>polyPlatonicSolid</item>\n      <item>polyPoke</item>\n      <item>polyPrimitive</item>\n      <item>polyPrism</item>\n      <item>polyProjection</item>\n      <item>polyPyramid</item>\n      <item>polyQuad</item>\n      <item>polyQueryBlindData</item>\n      <item>polyReduce</item>\n      <item>polySelectConstraint</item>\n      <item>polySelectConstraintMonitor</item>\n      <item>polySelectCtx</item>\n      <item>polySelectEditCtx</item>\n      <item>polySelect</item>\n      <item>polySeparate</item>\n      <item>polySetToFaceNormal</item>\n      <item>polySewEdge</item>\n      <item>polyShortestPathCtx</item>\n      <item>polySlideEdge</item>\n      <item>polySmooth</item>\n      <item>polySoftEdge</item>\n      <item>polySphere</item>\n      <item>polySphericalProjection</item>\n      <item>polySplitCtx</item>\n      <item>polySplitEdge</item>\n      <item>polySplit</item>\n      <item>polySplitRing</item>\n      <item>polySplitVertex</item>\n      <item>polyStraightenUVBorder</item>\n      <item>polySubdivideEdge</item>\n      <item>polySubdivideFacet</item>\n      <item>polyTorus</item>\n      <item>polyToSubdiv</item>\n      <item>polyTransfer</item>\n      <item>polyTriangulate</item>\n      <item>polyUnite</item>\n      <item>polyUVSet</item>\n      <item>polyWedgeFace</item>\n      <item>popen</item>\n      <item>popupMenu</item>\n      <item>pose</item>\n      <item>pow</item>\n      <item>preloadRefEd</item>\n      <item>print</item>\n      <item>progressBar</item>\n      <item>progressWindow</item>\n      <item>projectCurve</item>\n      <item>projectionContext</item>\n      <item>projectionManip</item>\n      <item>projectTangent</item>\n      <item>projFileViewer</item>\n      <item>promptDialog</item>\n      <item>propModCtx</item>\n      <item>propMove</item>\n      <item>psdChannelOutliner</item>\n      <item>psdEditTextureFile</item>\n      <item>psdExport</item>\n      <item>psdTextureFile</item>\n      <item>putenv</item>\n      <item>pwd</item>\n      <item>python</item>\n      <item>querySubdiv</item>\n      <item>quit</item>\n      <item>radial</item>\n      <item>radioButtonGrp</item>\n      <item>radioButton</item>\n      <item>radioCollection</item>\n      <item>radioMenuItemCollection</item>\n      <item>rad_to_deg</item>\n      <item>rampColorPort</item>\n      <item>rand</item>\n      <item>randomizeFollicles</item>\n      <item>randstate</item>\n      <item>rangeControl</item>\n      <item>readTake</item>\n      <item>rebuildCurve</item>\n      <item>rebuildSurface</item>\n      <item>recordAttr</item>\n      <item>recordDevice</item>\n      <item>redo</item>\n      <item>referenceEdit</item>\n      <item>reference</item>\n      <item>referenceQuery</item>\n      <item>refineSubdivSelectionList</item>\n      <item>refreshAE</item>\n      <item>refresh</item>\n      <item>registerPluginResource</item>\n      <item>rehash</item>\n      <item>reloadImage</item>\n      <item>removeJoint</item>\n      <item>removeMultiInstance</item>\n      <item>removePanelCategory</item>\n      <item>renameAttr</item>\n      <item>rename</item>\n      <item>renameSelectionList</item>\n      <item>renameUI</item>\n      <item>renderer</item>\n      <item>renderGlobalsNode</item>\n      <item>render</item>\n      <item>renderInfo</item>\n      <item>renderLayerButton</item>\n      <item>renderLayerParent</item>\n      <item>renderLayerPostProcess</item>\n      <item>renderLayerUnparent</item>\n      <item>renderManip</item>\n      <item>renderPartition</item>\n      <item>renderQualityNode</item>\n      <item>renderSettings</item>\n      <item>renderThumbnailUpdate</item>\n      <item>renderWindowEditor</item>\n      <item>renderWindowSelectContext</item>\n      <item>reorderDeformers</item>\n      <item>reorder</item>\n      <item>requires</item>\n      <item>reroot</item>\n      <item>resampleFluid</item>\n      <item>resetAE</item>\n      <item>resetPfxToPolyCamera</item>\n      <item>resetTool</item>\n      <item>resolutionNode</item>\n      <item>retarget</item>\n      <item>reverseCurve</item>\n      <item>reverseSurface</item>\n      <item>revolve</item>\n      <item>rgb_to_hsv</item>\n      <item>rigidBody</item>\n      <item>rigidSolver</item>\n      <item>rollCtx</item>\n      <item>roll</item>\n      <item>rootOf</item>\n      <item>rotate</item>\n      <item>rotationInterpolation</item>\n      <item>rot</item>\n      <item>roundConstantRadius</item>\n      <item>rowColumnLayout</item>\n      <item>rowLayout</item>\n      <item>runTimeCommand</item>\n      <item>runup</item>\n      <item>sampleImage</item>\n      <item>saveAllShelves</item>\n      <item>saveAttrPreset</item>\n      <item>saveFluid</item>\n      <item>saveImage</item>\n      <item>saveInitialState</item>\n      <item>saveMenu</item>\n      <item>savePrefObjects</item>\n      <item>savePrefs</item>\n      <item>saveShelf</item>\n      <item>saveToolSettings</item>\n      <item>scaleBrushBrightness</item>\n      <item>scaleComponents</item>\n      <item>scaleConstraint</item>\n      <item>scale</item>\n      <item>scaleKeyCtx</item>\n      <item>scaleKey</item>\n      <item>sceneEditor</item>\n      <item>sceneUIReplacement</item>\n      <item>scmh</item>\n      <item>scriptCtx</item>\n      <item>scriptEditorInfo</item>\n      <item>scriptedPanel</item>\n      <item>scriptedPanelType</item>\n      <item>scriptJob</item>\n      <item>scriptNode</item>\n      <item>scriptTable</item>\n      <item>scriptToShelf</item>\n      <item>scrollField</item>\n      <item>scrollLayout</item>\n      <item>sculpt</item>\n      <item>searchPathArray</item>\n      <item>seed</item>\n      <item>selectContext</item>\n      <item>selectCurveCV</item>\n      <item>selectedNodes</item>\n      <item>select</item>\n      <item>selectionConnection</item>\n      <item>selectKeyCtx</item>\n      <item>selectKeyframeRegionCtx</item>\n      <item>selectKey</item>\n      <item>selectMode</item>\n      <item>selectPref</item>\n      <item>selectPriority</item>\n      <item>selectType</item>\n      <item>selLoadSettings</item>\n      <item>separator</item>\n      <item>setAttrEnumResource</item>\n      <item>setAttr</item>\n      <item>setAttrMapping</item>\n      <item>setAttrNiceNameResource</item>\n      <item>setConstraintRestPosition</item>\n      <item>setCustomAttrEnumResource</item>\n      <item>setCustomAttrNiceNameResource</item>\n      <item>setDefaultShadingGroup</item>\n      <item>setDrivenKeyframe</item>\n      <item>setDynamic</item>\n      <item>setEditCtx</item>\n      <item>setEditor</item>\n      <item>setFluidAttr</item>\n      <item>setFocus</item>\n      <item>setInfinity</item>\n      <item>setInputDeviceMapping</item>\n      <item>setKeyCtx</item>\n      <item>setKeyframeBlendshapeTargetWts</item>\n      <item>setKeyframe</item>\n      <item>setKeyPath</item>\n      <item>setMenuMode</item>\n      <item>setNodeNiceNameResource</item>\n      <item>setNodeTypeFlag</item>\n      <item>setParent</item>\n      <item>setParticleAttr</item>\n      <item>setPfxToPolyCamera</item>\n      <item>setPluginResource</item>\n      <item>setProject</item>\n      <item>sets</item>\n      <item>setStampDensity</item>\n      <item>setStartupMessage</item>\n      <item>setState</item>\n      <item>setToolTo</item>\n      <item>setUITemplate</item>\n      <item>setXformManip</item>\n      <item>shadingConnection</item>\n      <item>shadingGeometryRelCtx</item>\n      <item>shadingLightRelCtx</item>\n      <item>shadingNetworkCompare</item>\n      <item>shadingNode</item>\n      <item>shapeCompare</item>\n      <item>shelfButton</item>\n      <item>shelfLayout</item>\n      <item>shelfTabLayout</item>\n      <item>shellField</item>\n      <item>shortNameOf</item>\n      <item>showHelp</item>\n      <item>showHidden</item>\n      <item>show</item>\n      <item>showManipCtx</item>\n      <item>showSelectionInTitle</item>\n      <item>showShadingGroupAttrEditor</item>\n      <item>showWindow</item>\n      <item>sign</item>\n      <item>simplify</item>\n      <item>singleProfileBirailSurface</item>\n      <item>sin</item>\n      <item>sizeBytes</item>\n      <item>size</item>\n      <item>skinCluster</item>\n      <item>skinPercent</item>\n      <item>smoothCurve</item>\n      <item>smoothstep</item>\n      <item>smoothTangentSurface</item>\n      <item>snap2to2</item>\n      <item>snapKey</item>\n      <item>snapMode</item>\n      <item>snapshot</item>\n      <item>snapTogetherCtx</item>\n      <item>soft</item>\n      <item>softModCtx</item>\n      <item>softMod</item>\n      <item>sort</item>\n      <item>soundControl</item>\n      <item>sound</item>\n      <item>source</item>\n      <item>spaceLocator</item>\n      <item>sphere</item>\n      <item>sphrand</item>\n      <item>spotLight</item>\n      <item>spotLightPreviewPort</item>\n      <item>spreadSheetEditor</item>\n      <item>spring</item>\n      <item>sqrt</item>\n      <item>squareSurface</item>\n      <item>srtContext</item>\n      <item>stackTrace</item>\n      <item>startString</item>\n      <item>startsWith</item>\n      <item>stitchAndExplodeShell</item>\n      <item>stitchSurface</item>\n      <item>stitchSurfacePoints</item>\n      <item>strcmp</item>\n      <item>stringArrayCatenate</item>\n      <item>stringArrayContains</item>\n      <item>stringArrayCount</item>\n      <item>stringArrayInsertAtIndex</item>\n      <item>stringArrayIntersector</item>\n      <item>stringArrayRemoveAtIndex</item>\n      <item>stringArrayRemoveDuplicates</item>\n      <item>stringArrayRemoveExact</item>\n      <item>stringArrayRemove</item>\n      <item>stringArrayToString</item>\n      <item>stringToStringArray</item>\n      <item>strip</item>\n      <item>stripPrefixFromName</item>\n      <item>stroke</item>\n      <item>subdAutoProjection</item>\n      <item>subdCleanTopology</item>\n      <item>subdCollapse</item>\n      <item>subdDuplicateAndConnect</item>\n      <item>subdEditUV</item>\n      <item>subdivCrease</item>\n      <item>subdivDisplaySmoothness</item>\n      <item>subdiv</item>\n      <item>subdListComponentConversion</item>\n      <item>subdMapCut</item>\n      <item>subdMapSewMove</item>\n      <item>subdMatchTopology</item>\n      <item>subdMirror</item>\n      <item>subdToBlind</item>\n      <item>subdToPoly</item>\n      <item>subdTransferUVsToCache</item>\n      <item>substituteAllString</item>\n      <item>substituteGeometry</item>\n      <item>substitute</item>\n      <item>substring</item>\n      <item>surface</item>\n      <item>surfaceSampler</item>\n      <item>surfaceShaderList</item>\n      <item>swatchDisplayPort</item>\n      <item>switchTable</item>\n      <item>SymbolsButton</item>\n      <item>SymbolsCheckBox</item>\n      <item>symmetricModelling</item>\n      <item>sysFile</item>\n      <item>system</item>\n      <item>tabLayout</item>\n      <item>tangentConstraint</item>\n      <item>tan</item>\n      <item>texLatticeDeformContext</item>\n      <item>texManipContext</item>\n      <item>texMoveContext</item>\n      <item>texMoveUVShellContext</item>\n      <item>texRotateContext</item>\n      <item>texScaleContext</item>\n      <item>texSelectContext</item>\n      <item>texSelectShortestPathCtx</item>\n      <item>texSmudgeUVContext</item>\n      <item>textCurves</item>\n      <item>textFieldButtonGrp</item>\n      <item>textFieldGrp</item>\n      <item>textField</item>\n      <item>text</item>\n      <item>textManip</item>\n      <item>textScrollList</item>\n      <item>textToShelf</item>\n      <item>textureDisplacePlane</item>\n      <item>textureHairColor</item>\n      <item>texturePlacementContext</item>\n      <item>textureWindow</item>\n      <item>texWinToolCtx</item>\n      <item>threadCount</item>\n      <item>threePointArcCtx</item>\n      <item>timeControl</item>\n      <item>timePort</item>\n      <item>timerX</item>\n      <item>toggleAxis</item>\n      <item>toggle</item>\n      <item>toggleWindowVisibility</item>\n      <item>tokenize</item>\n      <item>tokenizeList</item>\n      <item>tolerance</item>\n      <item>tolower</item>\n      <item>toNativePath</item>\n      <item>toolButton</item>\n      <item>toolCollection</item>\n      <item>toolDropped</item>\n      <item>toolHasOptions</item>\n      <item>toolPropertyWindow</item>\n      <item>torus</item>\n      <item>toupper</item>\n      <item>trace</item>\n      <item>trackCtx</item>\n      <item>track</item>\n      <item>transferAttributes</item>\n      <item>transformCompare</item>\n      <item>transformLimits</item>\n      <item>translator</item>\n      <item>trim</item>\n      <item>truncateFluidCache</item>\n      <item>truncateHairCache</item>\n      <item>trunc</item>\n      <item>tumbleCtx</item>\n      <item>tumble</item>\n      <item>turbulence</item>\n      <item>twoPointArcCtx</item>\n      <item>uiRes</item>\n      <item>uiTemplate</item>\n      <item>unassignInputDevice</item>\n      <item>undo</item>\n      <item>undoInfo</item>\n      <item>ungroup</item>\n      <item>uniform</item>\n      <item>unit</item>\n      <item>unloadPlugin</item>\n      <item>untangleUV</item>\n      <item>untitledFileName</item>\n      <item>untrim</item>\n      <item>upAxis</item>\n      <item>updateAE</item>\n      <item>userCtx</item>\n      <item>uvLink</item>\n      <item>uvSnapshot</item>\n      <item>validateShelfName</item>\n      <item>vectorize</item>\n      <item>view2dToolCtx</item>\n      <item>viewCamera</item>\n      <item>viewClipPlane</item>\n      <item>viewFit</item>\n      <item>viewHeadOn</item>\n      <item>viewLookAt</item>\n      <item>viewManip</item>\n      <item>viewPlace</item>\n      <item>viewSet</item>\n      <item>visor</item>\n      <item>volumeAxis</item>\n      <item>vortex</item>\n      <item>waitCursor</item>\n      <item>warning</item>\n      <item>webBrowser</item>\n      <item>webBrowserPrefs</item>\n      <item>whatIs</item>\n      <item>window</item>\n      <item>windowPref</item>\n      <item>wireContext</item>\n      <item>wire</item>\n      <item>workspace</item>\n      <item>wrinkleContext</item>\n      <item>wrinkle</item>\n      <item>writeTake</item>\n      <item>xbmLangPathList</item>\n      <item>xform</item>\n      <item>xpmPicker</item>\n    </list>\n    <list name=\"datatypes\">\n      <item>int</item>\n      <item>string</item>\n      <item>float</item>\n      <item>vector</item>\n      <item>matrix</item>\n    </list>\n    \n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\" >\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Block comments\" context=\"Block comments\" char=\"/\" char1=\"*\" beginRegion=\"Block comments\" />\n        <Detect2Chars attribute=\"Line comments\" context=\"Line comments\" char=\"/\" char1=\"/\" />\n        <DetectChar   attribute=\"Variable names\" context=\"Variable names\" char=\"$\" />\n        <keyword      attribute=\"MEL commands\" context=\"#stay\" String=\"MEL commands\" />\n        <keyword      attribute=\"Data types\" context=\"#stay\" String=\"datatypes\" />\n        <keyword      attribute=\"Keywords\" context=\"#stay\" String=\"keywords\" />\n        <DetectChar   attribute=\"Expressions\"   context=\"Expressions\" char=\"`\" />\n        <DetectChar   attribute=\"Strings\" context=\"Strings\" char=\"&quot;\"/>\n        <DetectChar   attribute=\"Operators\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar   attribute=\"Operators\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <AnyChar      attribute=\"Operators\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\"/>\n        <Float        attribute=\"Float values\" context=\"#stay\" />\n        <Int          attribute=\"Integer values\" context=\"#stay\" />\n      </context>\n      \n      <context attribute=\"Block comments\" lineEndContext=\"#stay\" name=\"Block comments\">\n        <LineContinue attribute=\"Strings\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Block comments\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Block comments\" />\n      </context>\n      \n      <context attribute=\"Line comments\" lineEndContext=\"#pop\" name=\"Line comments\" />\n      \n      <context attribute=\"Strings\" lineEndContext=\"#stay\" name=\"Strings\">\n        <LineContinue attribute=\"Strings\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"Strings\" context=\"#stay\"/>\n        <DetectChar attribute=\"Strings\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      \n      <context attribute=\"Expressions\" lineEndContext=\"#stay\" name=\"Expressions\">\n        <LineContinue attribute=\"Strings\" context=\"#stay\"/>\n        <DetectChar attribute=\"Expressions\" context=\"#pop\" char=\"`\" />\n      </context>\n      \n      <context attribute=\"Variable names\" lineEndContext=\"#pop\" name=\"Variable names\">\n        <AnyChar attribute=\"Normal Text\" context=\"#pop\" String=\" :!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\" />\n        <DetectChar attribute=\"Expressions\" context=\"Expressions\" char=\"`\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\" />\n      <itemData name=\"MEL commands\"   defStyleNum=\"dsFunction\" />\n      <itemData name=\"Data types\"     defStyleNum=\"dsDataType\" />\n      <itemData name=\"Variable names\" defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Integer values\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float values\"   defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Strings\"        defStyleNum=\"dsString\" />\n      <itemData name=\"Operators\"      defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keywords\"       defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Expressions\"    defStyleNum=\"dsOthers\" />\n      <itemData name=\"Block comments\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Line comments\"  defStyleNum=\"dsComment\" />\n    </itemDatas>\n  </highlighting>\n  \n  <general>\n    <folding indentationsensitive=\"false\" />\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\"  start=\"/*\" end=\"*/\" region=\"Block comments\" />\n    </comments>\n  </general>\n</language>\n\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mergetagtext.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  Copyright 2008 Diggory Hardy\n  \n  Author: Diggory Hardy <diggory.hardy@gmail.com>\n  \n  This contains highlighting for mergetag text files, a sub-part of the mde project.\n  dsource.org/projects/mde\n  \n **********************************************************************\n * This library is free software; you can redistribute it and/or      *\n * modify it under the terms of the GNU Lesser General Public         *\n * License as published by the Free Software Foundation; either       *\n * version 2 of the License, or (at your option) any later version.   *\n *                                                                    *\n * This library is distributed in the hope that it will be useful,    *\n * but WITHOUT ANY WARRANTY; without even the implied warranty of     *\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *\n * Lesser General Public License for more details.                    *\n *                                                                    *\n * You should have received a copy of the GNU Lesser General Public   *\n * License along with this library; if not, write to the              *\n * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,   *\n * Boston, MA  02110-1301, USA.                                       *\n **********************************************************************\n -->\n<language name=\"mergetag text\" version=\"2\" kateversion=\"2.4\" section=\"Configuration\" author=\"Diggory Hardy (diggory.hardy@gmail.com)\" license=\"LGPLv2+\" extensions=\"*.mtt;\">\n  <highlighting>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Error\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment Brackets\" context=\"SecComment\" char=\"!\" char1=\"{\" beginRegion=\"SecComment\" />\n        <Detect2Chars attribute=\"Comment Brackets\" context=\"TagCommentType\" char=\"!\" char1=\"&lt;\" />\n        <DetectChar attribute=\"Brackets\" context=\"SectionIdentifier\" char=\"{\" beginRegion=\"SecID\" />\n        <DetectChar attribute=\"Tag Character\" context=\"TagType\" char=\"&lt;\" />\n      </context>\n      \n      <context name=\"SectionIdentifier\" attribute=\"ID\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Brackets\" context=\"#pop\" char=\"}\" endRegion=\"SecID\" />\n      </context>\n      \n      <context name=\"SecComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment Brackets\" context=\"#pop\" char=\"}\" endRegion=\"SecComment\" />\n        <DetectChar attribute=\"Comment Brackets\" context=\"SecComment\" char=\"{\" beginRegion=\"SecID\" />\n      </context>\n      \n      <context name=\"TagType\" attribute=\"Type\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Tag Character\" context=\"TagID\" char=\"|\" />\n        <IncludeRules context=\"TagErrors\" />\n      </context>\n      <context name=\"TagID\" attribute=\"ID\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Tag Character\" context=\"TagData\" char=\"=\" />\n        <IncludeRules context=\"TagErrors\" />\n      </context>\n      <context name=\"TagData\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Tag Character\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n        \n        <DetectChar attribute=\"Char\"     context=\"CharLiteral\" char=\"'\"/>\n        <DetectChar attribute=\"String\"   context=\"String\"      char=\"&quot;\"/>\n        <!-- Number literals -->\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <RegExpr attribute=\"Binary\" context=\"#pop\" String=\"0[bB][01]+\"/>\n        <RegExpr attribute=\"Octal\" context=\"#pop\" String=\"0[oO][0-7]+\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Integer\" context=\"#stay\" />\n        \n        <IncludeRules context=\"TagErrors\" />\n      </context>\n      <context name=\"TagErrors\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\" />\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"|\" />\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"=\" />\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&gt;\" />\n      </context>\n      \n      <context name=\"TagCommentType\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment Brackets\" context=\"TagCommentID\" char=\"|\" />\n        <IncludeRules context=\"TagErrors\" />\n      </context>\n      <context name=\"TagCommentID\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment Brackets\" context=\"TagCommentData\" char=\"=\" />\n        <IncludeRules context=\"TagErrors\" />\n      </context>\n      <context name=\"TagCommentData\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment Brackets\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n        <DetectChar attribute=\"Comment\" context=\"CommentChar\" char=\"'\"/>\n        <DetectChar attribute=\"Comment\" context=\"CommentString\" char=\"&quot;\"/>\n        <IncludeRules context=\"TagErrors\" />\n      </context>\n      <context name=\"CommentString\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"&quot;\" />\n        <RegExpr String=\"\\\\.\" attribute=\"Comment\" context=\"#stay\"/>\n      </context>\n      <context name=\"CommentChar\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"'\" />\n        <RegExpr String=\"\\\\.\" attribute=\"Comment\" context=\"#stay\"/>\n      </context>\n      \n      <!-- 'char' -->\n      <context name=\"CharLiteral\" attribute=\"Char\" lineEndContext=\"CharLiteralClosing\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- Empty '' -->\n        <DetectChar   attribute=\"Char\" context=\"#pop\"  char=\"'\"/>\n        <HlCStringChar attribute=\"EscapeSequence\" context=\"CharLiteralClosing\"/>\n        <RegExpr attribute=\"Char\" context=\"CharLiteralClosing\" String=\".\"/>\n      </context>\n      <!-- Anything other than a closing ' is now be an error -->\n      <context name=\"CharLiteralClosing\" attribute=\"Error\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <DetectChar attribute=\"Char\" context=\"#pop#pop\"  char=\"'\"/>\n      </context>\n      <!-- \"string\" -->\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <HlCStringChar attribute=\"EscapeSequence\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n    </contexts>\n    \n    <itemDatas>\n      <itemData name=\"Brackets\"         defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Tag Character\"    defStyleNum=\"dsKeyword\" color=\"#008040\"/>\n      <itemData name=\"Type\"             defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Error\"            defStyleNum=\"dsError\"/>\n      <itemData name=\"Comment Brackets\" defStyleNum=\"dsComment\" italic=\"0\" color=\"#404040\" />\n      <itemData name=\"Comment\"          defStyleNum=\"dsComment\"/>\n      <itemData name=\"Normal Text\"      defStyleNum=\"dsNormal\"/>\n      <itemData name=\"ID\"               defStyleNum=\"dsOthers\"/>\n      \n      <itemData name=\"Integer\"        defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Binary\"         defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Octal\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"            defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"          defStyleNum=\"dsFloat\"/>\n      \n      <itemData name=\"EscapeSequence\" defStyleNum=\"dsString\"   color=\"#00aa88\" selColor=\"#ff0000\"/>\n      <itemData name=\"String\"         defStyleNum=\"dsString\"/>\n      <itemData name=\"Char\"           defStyleNum=\"dsChar\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\"  start=\"!{\" end=\"}\" region=\"SecComment\"/>\n    </comments>\n    <keywords casesensitive=\"true\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/meson.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Meson\" section=\"Other\"\n\tversion=\"2\" kateversion=\"2.4\"\n\textensions=\"meson.build;meson_options.txt\"\n\tmimetype=\"text/x-meson\"\n\tpriority=\"5\"\n\tlicense=\"LGPL\">\n\n\t<highlighting>\n\t\t<list name = \"flowControl\">\n\t\t\t<item>if</item>\n\t\t\t<item>else</item>\n\t\t\t<item>endif</item>\n\t\t\t<item>foreach</item>\n\t\t\t<item>endforeach</item>\n\t\t</list>\n\t\t<list name = \"builtinfuncs\">\n\t\t\t<item>add_global_arguments</item>\n\t\t\t<item>build_target</item>\n\t\t\t<item>configuration_data</item>\n\t\t\t<item>configure_file</item>\n\t\t\t<item>custom_target</item>\n\t\t\t<item>declare_dependency</item>\n\t\t\t<item>dependency</item>\n\t\t\t<item>error</item>\n\t\t\t<item>executable</item>\n\t\t\t<item>find_program</item>\n\t\t\t<item>find_library</item>\n\t\t\t<item>files</item>\n\t\t\t<item>generator</item>\n\t\t\t<item>get_option</item>\n\t\t\t<item>gettext</item>\n\t\t\t<item>import</item>\n\t\t\t<item>include_directories</item>\n\t\t\t<item>install_data</item>\n\t\t\t<item>install_headers</item>\n\t\t\t<item>install_man</item>\n\t\t\t<item>install_subdir</item>\n\t\t\t<item>is_subproject</item>\n\t\t\t<item>jar</item>\n\t\t\t<item>message</item>\n\t\t\t<item>pkgconfig_gen</item>\n\t\t\t<item>project</item>\n\t\t\t<item>run_command</item>\n\t\t\t<item>run_target</item>\n\t\t\t<item>set_variable</item>\n\t\t\t<item>shared_library</item>\n\t\t\t<item>static_library</item>\n\t\t\t<item>subdir</item>\n\t\t\t<item>subproject</item>\n\t\t\t<item>test</item>\n\t\t\t<item>vcs_tag</item>\n\t\t</list>\n\t\t<list name = \"logicalOperations\">\n\t\t\t<item>and</item>\n\t\t\t<item>or</item>\n\t\t\t<item>not</item>\n\t\t</list>\n\t\t<list name=\"booleans\">\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\t\t</list>\n\n\t\t<contexts>\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<keyword attribute=\"Flow Control Keyword\" String=\"flowControl\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Operator\" String=\"logicalOperations\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Builtin Function\" String=\"builtinfuncs\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Boolean Values\" String=\"booleans\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Int\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"#\" context=\"comment\"/>\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"+-*/=&lt;&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\"[\" context=\"List\" beginRegion=\"List\"/>\n\t\t\t\t<IncludeRules context=\"StringVariants\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"List\" attribute=\"Normal Text\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\"]\" context=\"#pop\" endRegion=\"List\"/>\n\t\t\t\t<IncludeRules context=\"Normal\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t\t<IncludeRules context=\"##Modelines\" />\n\t\t\t</context>\n\n\t\t\t<!--strings-->\n\t\t\t<context name=\"StringVariants\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<StringDetect attribute=\"String\" String=\"'''\" context=\"Triple A-string\" beginRegion=\"Triple A-region\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"'\" context=\"Single A-string\"/>\n\t\t\t</context>\n\t\t\t<context name=\"Single A-string\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"'\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t\t<context name=\"Triple A-string\" attribute=\"String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<StringDetect attribute=\"String\" String=\"'''\" context=\"#pop\" endRegion=\"Triple A-region\"/>\n\t\t\t</context>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"          defStyleNum=\"dsNormal\"   spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Operator\"             defStyleNum=\"dsNormal\"   spellChecking=\"false\" bold=\"1\"/>\n\t\t\t<itemData name=\"Int\"                  defStyleNum=\"dsDecVal\"   spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Flow Control Keyword\" defStyleNum=\"dsKeyword\"  spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Builtin Function\"     defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Boolean Values\"       defStyleNum=\"dsKeyword\"  spellChecking=\"false\"/>\n\t\t\t<itemData name=\"String Char\"          defStyleNum=\"dsChar\"     spellChecking=\"false\"/>\n\t\t\t<itemData name=\"String\"               defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Comment\"              defStyleNum=\"dsComment\"/>\n\t\t</itemDatas>\n\t</highlighting>\n</language>"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/metafont.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\nThe lists of keywords of this file are borrowed from the VIM syntax \nfiles mp.vim and mf.vim\nWe have moved some keywords for consistency\n-->\n\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Metapost/Metafont\" section=\"Markup\" version=\"5\" kateversion=\"5.0\"\nextensions=\"*.mp;*.mps;*.mpost;*.mf\" mimetype=\"text/x-metapost\" \nauthor=\"Yedvilun (yedvilun@gmail.com)\" license=\"LGPL\">\n  <highlighting>\n    <!--Here are some listing from mf.vim-->\n    <!--Metafont 'primitives' as defined in chapter 25 of 'The METAFONTbook'-->\n    <!--Page 210: 'boolean expressions'-->\n    <list name=\"mfBoolExp\">\n      <item>true</item>\n\n      <item>false</item>\n      <item>known</item>\n      <item>unknown</item>\n      <item>odd</item>\n      <item>charexists</item>\n      <item>not</item>\n\n      <item>and</item>\n      <item>or</item>\n    </list>\n\n    <!--Page 210: 'numeric expression'-->\n    <list name=\"mfNumExp\">\n      <item>normaldeviate</item>\n      <item>length</item>\n\n      <item>ASCII</item>\n      <item>oct</item>\n      <item>hex</item>\n      <item>angle</item>\n      <item>turningnumber</item>\n      <item>totalweight</item>\n\n      <item>directiontime</item>\n      <item>xpart</item>\n      <item>ypart</item>\n      <item>xxpart</item>\n      <item>xypart</item>\n      <item>yxpart</item>\n\n      <item>yypart</item>\n      <item>sqrt</item>\n      <item>sind</item>\n      <item>cosd</item>\n      <item>mlog</item>\n      <item>mexp</item>\n\n      <item>floor</item>\n      <item>uniformdeviate</item>\n      <item>abs</item>\n      <item>div</item>\n      <item>dotprod</item>\n      <item>max</item>\n\n      <item>min</item>\n      <item>mod</item>\n      <item>ceiling</item>\n    </list>\n\n    <!--Page 211: 'internal quantities'-->\n    <list name=\"mfInternal\">\n      <item>tracingtitles</item>\n\n      <item>tracingequations</item>\n      <item>tracingcapsules</item>\n      <item>tracingchoices</item>\n      <item>tracingspecs</item>\n      <item>tracingpens</item>\n      <item>tracingcommands</item>\n\n      <item>tracingrestores</item>\n      <item>tracingmacros</item>\n      <item>tracingedges</item>\n      <item>tracingoutput</item>\n      <item>tracingonline</item>\n      <item>tracingstats</item>\n\n      <item>pausing</item>\n      <item>showstopping</item>\n      <item>fontmaking</item>\n      <item>proofing</item>\n      <item>turningcheck</item>\n      <item>warningcheck</item>\n\n      <item>smoothing</item>\n      <item>autorounding</item>\n      <item>granularity</item>\n      <item>fillin</item>\n      <item>year</item>\n      <item>month</item>\n\n      <item>day</item>\n      <item>time</item>\n      <item>charcode</item>\n      <item>charext</item>\n      <item>charwd</item>\n      <item>charht</item>\n\n      <item>chardp</item>\n      <item>charic</item>\n      <item>chardx</item>\n      <item>chardy</item>\n      <item>designsize</item>\n      <item>hppp</item>\n\n      <item>vppp</item>\n      <item>xoffset</item>\n      <item>yoffset</item>\n      <item>boundarychar</item>\n    </list>\n\n    <!--Page 212: 'pair expressions'-->\n\n    <list name=\"mfPairExp\">\n      <item>point</item>\n      <item>of</item>\n      <item>precontrol</item>\n      <item>postcontrol</item>\n      <item>penoffset</item>\n\n      <item>rotated</item>\n      <item>scaled</item>\n      <item>shifted</item>\n      <item>slanted</item>\n      <item>transformed</item>\n      <item>xscaled</item>\n\n      <item>yscaled</item>\n      <item>zscaled</item>\n    </list>\n\n    <!--Page 213: 'path expressions'-->\n    <list name=\"mfPathExp\">\n      <item>makepath</item>\n      <item>reverse</item>\n\n      <item>subpath</item>\n      <item>curl</item>\n      <item>tension</item>\n      <item>atleast</item>\n      <item>controls</item>\n      <item>cycle</item>\n\n    </list>\n\n    <!--Page 214: 'pen expressions'-->\n    <list name=\"mfPenExp\">\n      <item>nullpen</item>\n      <item>pencircle</item>\n      <item>makepen</item>\n    </list>\n\n    <!--Page 214: 'picture expressions'-->\n    <list name=\"mfPicExp\">\n      <item>nullpicture</item>\n    </list>\n\n    <!--Page 214: 'string expressions'-->\n    <list name=\"mfStringExp\">\n      <item>jobname</item>\n\n      <item>readstring</item>\n      <item>str</item>\n      <item>char</item>\n      <item>decimal</item>\n      <item>substring</item>\n    </list>\n\n    <!--Page 217: 'commands and statements'-->\n    <list name=\"mfCommand\">\n      <item>end</item>\n      <item>dump</item>\n      <item>save</item>\n      <item>interim</item>\n\n      <item>newinternal</item>\n      <item>randomseed</item>\n      <item>let</item>\n      <item>delimiters</item>\n      <item>outer</item>\n      <item>everyjob</item>\n\n      <item>show</item>\n      <item>showvariable</item>\n      <item>showtoken</item>\n      <item>showdependencies</item>\n      <item>showstats</item>\n      <item>message</item>\n\n      <item>errmessage</item>\n      <item>errhelp</item>\n      <item>batchmode</item>\n      <item>nonstopmode</item>\n      <item>scrollmode</item>\n      <item>errorstopmode</item>\n\n      <item>addto</item>\n      <item>also</item>\n      <item>contour</item>\n      <item>doublepath</item>\n      <item>withpen</item>\n      <item>withweight</item>\n\n      <item>cull</item>\n      <item>keeping</item>\n      <item>dropping</item>\n      <item>display</item>\n      <item>inwindow</item>\n      <item>openwindow</item>\n\n      <item>at</item>\n      <item>from</item>\n      <item>to</item>\n      <item>shipout</item>\n      <item>special</item>\n      <item>numspecial</item>\n\n    </list>\n\n    <!--Page 56: 'types'-->\n    <list name=\"mfType\">\n      <item>boolean</item>\n      <item>numeric</item>\n      <item>pair</item>\n      <item>path</item>\n\n      <item>pen</item>\n      <item>picture</item>\n      <item>string</item>\n      <item>transform</item>\n    </list>\n\n    <!--Page 155: 'grouping'-->\n\n<!--     commented out, since these keywords are in RegExpr rules-->\n<!--     <list name=\"mfStatement\"> -->\n<!--       <item>begingroup</item> -->\n<!--       <item>endgroup</item> -->\n<!--     </list> -->\n\n    <!--Page 165: 'definitions'-->\n    <list name=\"mfDefinition\">\n<!--       <item>enddef</item> -->\n<!--       <item>def</item> -->\n      <item>expr</item>\n      <item>suffix</item>\n\n      <item>text</item>\n      <item>primary</item>\n      <item>secondary</item>\n      <item>tertiary</item>\n<!--       <item>vardef</item> -->\n      <item>primarydef</item>\n      <item>secondarydef</item>\n\n      <item>tertiarydef</item>\n    </list>\n\n    <!--Page 169: 'conditions and loops'-->\n    <list name=\"mfCondition\">\n<!--       <item>if</item> -->\n<!--       <item>fi</item> -->\n      <item>else</item>\n      <item>elseif</item>\n\n<!--       <item>endfor</item> -->\n<!--       <item>for</item> -->\n<!--       <item>forsuffixes</item> -->\n<!--       <item>forever</item> -->\n      <item>step</item>\n      <item>until</item>\n      <item>upto</item>\n      <item>exitif</item>\n    </list>\n\n    <!--Other primitives listed in the index-->\n    <list name=\"mfPrimitive\">\n      <item>charlist</item>\n      <item>endinput</item>\n      <item>expandafter</item>\n      <item>extensible</item>\n\n      <item>fontdimen</item>\n      <item>headerbyte</item>\n      <item>inner</item>\n      <item>input</item>\n      <item>intersectiontimes</item>\n      <item>kern</item>\n\n      <item>ligtable</item>\n      <item>quote</item>\n      <item>scantokens</item>\n      <item>skipto</item>\n    </list>\n\n    <!--Keywords defined by plain.mf-->\n\n    <list name=\"mfMacro\">\n<!--       <item>abs</item> -->\n      <item>addto_currentpicture</item>\n      <item>aspect_ratio</item>\n      <item>base_name</item>\n      <item>base_version</item>\n<!--       <item>beginchar</item> -->\n      <item>blacker</item>\n\n      <item>blankpicture</item>\n      <item>bot</item>\n      <item>bye</item>\n      <item>byte</item>\n      <item>capsule_def</item>\n<!--       <item>ceiling</item> -->\n      <item>change_width</item>\n\n      <item>clear_pen_memory</item>\n      <item>clearit</item>\n      <item>clearpen</item>\n      <item>clearxy</item>\n      <item>counterclockwise</item>\n      <item>culldraw</item>\n\n      <item>cullit</item>\n      <item>currentpen</item>\n      <item>currentpen_path</item>\n      <item>currentpicture</item>\n      <item>currenttransform</item>\n      <item>currentwindow</item>\n\n      <item>cutdraw</item>\n      <item>cutoff</item>\n      <item>d</item>\n      <item>decr</item>\n      <item>define_blacker_pixels</item>\n      <item>define_corrected_pixels</item>\n\n      <item>define_good_x_pixels</item>\n      <item>define_good_y_pixels</item>\n      <item>define_horizontal_corrected_pixels</item>\n      <item>define_pixels</item>\n      <item>define_whole_blacker_pixels</item>\n      <item>define_whole_pixels</item>\n\n      <item>define_whole_vertical_blacker_pixels</item>\n      <item>define_whole_vertical_pixels</item>\n      <item>dir</item>\n      <item>direction</item>\n      <item>directionpoint</item>\n      <item>displaying</item>\n\n      <item>ditto</item>\n<!--       <item>div</item> -->\n<!--       <item>dotprod</item> -->\n      <item>down</item>\n      <item>downto</item>\n      <item>draw</item>\n      <item>drawdot</item>\n\n<!--       <item>endchar</item> -->\n      <item>eps</item>\n      <item>epsilon</item>\n<!--       <item>extra_beginchar</item> -->\n<!--       <item>extra_endchar</item> -->\n      <item>extra_setup</item>\n      <item>erase</item>\n      <item>exitunless</item>\n\n      <item>fill</item>\n      <item>filldraw</item>\n      <item>fix_units</item>\n      <item>flex</item>\n      <item>font_coding_scheme</item>\n      <item>font_extra_space</item>\n\n      <item>font_identifier</item>\n      <item>font_normal_shrink</item>\n      <item>font_normal_space</item>\n      <item>font_normal_stretch</item>\n      <item>font_quad</item>\n      <item>font_setup</item>\n\n      <item>font_size</item>\n      <item>font_slant</item>\n      <item>font_x_height</item>\n      <item>fullcircle</item>\n      <item>generate</item>\n      <item>gfcorners</item>\n\n      <item>gobble</item>\n      <item>gobbled</item>\n      <item>grayfont</item>\n      <item>h</item>\n      <item>halfcircle</item>\n      <item>hide</item>\n\n      <item>hround</item>\n      <item>identity</item>\n      <item>image_rules</item>\n      <item>incr</item>\n      <item>infinity</item>\n      <item>interact</item>\n\n      <item>interpath</item>\n      <item>intersectionpoint</item>\n      <item>inverse</item>\n      <item>italcorr</item>\n      <item>join_radius</item>\n      <item>killtext</item>\n\n      <item>labelfont</item>\n      <item>labels</item>\n      <item>left</item>\n      <item>lft</item>\n      <item>localfont</item>\n      <item>loggingall</item>\n\n      <item>lowres</item>\n      <item>lowres_fix</item>\n      <item>mag</item>\n      <item>magstep</item>\n      <item>makebox</item>\n      <item>makegrid</item>\n\n      <item>makelabel</item>\n      <item>maketicks</item>\n<!--       <item>max</item> -->\n<!--       <item>min</item> -->\n<!--       <item>mod</item> -->\n      <item>mode</item>\n      <item>mode_def</item>\n      <item>mode_name</item>\n\n      <item>mode_setup</item>\n      <item>nodisplays</item>\n      <item>notransforms</item>\n      <item>number_of_modes</item>\n      <item>numtok</item>\n      <item>o_correction</item>\n\n      <item>openit</item>\n      <item>origin</item>\n      <item>pen_bot</item>\n      <item>pen_lft</item>\n      <item>pen_rt</item>\n      <item>pen_top</item>\n\n      <item>penlabels</item>\n      <item>penpos</item>\n      <item>penrazor</item>\n      <item>penspeck</item>\n      <item>pensquare</item>\n      <item>penstroke</item>\n\n      <item>pickup</item>\n      <item>pixels_per_inch</item>\n      <item>proof</item>\n      <item>proofoffset</item>\n      <item>proofrule</item>\n      <item>proofrulethickness</item>\n\n      <item>quartercircle</item>\n      <item>range</item>\n      <item>reflectedabout</item>\n      <item>relax</item>\n      <item>right</item>\n      <item>rotatedabout</item>\n\n      <item>rotatedaround</item>\n      <item>round</item>\n      <item>rt</item>\n      <item>rulepen</item>\n      <item>savepen</item>\n      <item>screenchars</item>\n\n      <item>screen_rows</item>\n      <item>screen_cols</item>\n      <item>screenrule</item>\n      <item>screenstrokes</item>\n      <item>shipit</item>\n      <item>showit</item>\n\n      <item>slantfont</item>\n      <item>smode</item>\n      <item>smoke</item>\n      <item>softjoin</item>\n      <item>solve</item>\n      <item>stop</item>\n\n      <item>superellipse</item>\n      <item>takepower</item>\n      <item>tensepath</item>\n      <item>titlefont</item>\n      <item>tolerance</item>\n      <item>top</item>\n\n      <item>tracingall</item>\n      <item>tracingnone</item>\n      <item>undraw</item>\n      <item>undrawdot</item>\n      <item>unfill</item>\n      <item>unfilldraw</item>\n\n      <item>unitpixel</item>\n      <item>unitsquare</item>\n      <item>unitvector</item>\n      <item>up</item>\n      <item>upto</item>\n      <item>vround</item>\n\n      <item>w</item>\n      <item>whatever</item>\n<!--       <item>beginlogochar</item> -->\n    </list>\n\n    <!--Here are some listing from mp.vim-->\n    <!--MetaPost primitives not found in Metafont-->\n    <list name=\"mpInternal\">\n      <item>bluepart</item>\n\n      <item>clip</item>\n      <item>color</item>\n      <item>dashed</item>\n      <item>fontsize</item>\n      <item>greenpart</item>\n      <item>infont</item>\n\n      <item>linecap</item>\n      <item>linejoin</item>\n      <item>llcorner</item>\n      <item>lrcorner</item>\n      <item>miterlimit</item>\n      <item>mpxbreak</item>\n\n      <item>prologues</item>\n      <item>redpart</item>\n      <item>setbounds</item>\n      <item>tracinglostchars</item>\n      <item>truecorners</item>\n      <item>ulcorner</item>\n\n      <item>urcorner</item>\n      <item>withcolor</item>\n    </list>\n\n    <!--Keywords defined by plain.mp-->\n    <list name=\"mpMacro\">\n      <item>ahangle</item>\n      <item>ahlength</item>\n      <item>background</item>\n      <item>bbox</item>\n\n      <item>bboxmargin</item>\n<!--       <item>beginfig</item> -->\n      <item>beveled</item>\n      <item>black</item>\n      <item>blue</item>\n      <item>buildcycle</item>\n      <item>butt</item>\n\n      <item>center</item>\n      <item>cutafter</item>\n      <item>cutbefore</item>\n      <item>cuttings</item>\n      <item>dashpattern</item>\n      <item>defaultfont</item>\n\n      <item>defaultpen</item>\n      <item>defaultscale</item>\n      <item>dotlabel</item>\n      <item>dotlabels</item>\n      <item>drawarrow</item>\n      <item>drawdblarrow</item>\n\n      <item>drawoptions</item>\n<!--       <item>endfig</item> -->\n      <item>evenly</item>\n<!--       <item>extra_beginfig</item> -->\n<!--       <item>extra_endfig</item> -->\n      <item>green</item>\n      <item>label</item>\n      <item>labeloffset</item>\n\n      <item>mitered</item>\n      <item>red</item>\n      <item>rounded</item>\n      <item>squared</item>\n      <item>thelabel</item>\n      <item>white</item>\n\n      <item>base_name</item>\n      <item>base_version</item>\n      <item>upto</item>\n      <item>downto</item>\n      <item>exitunless</item>\n      <item>relax</item>\n\n      <item>gobble</item>\n      <item>gobbled</item>\n      <item>interact</item>\n      <item>loggingall</item>\n      <item>tracingall</item>\n      <item>tracingnone</item>\n\n      <item>eps</item>\n      <item>epsilon</item>\n      <item>infinity</item>\n      <item>right</item>\n      <item>left</item>\n      <item>up</item>\n\n      <item>down</item>\n      <item>origin</item>\n      <item>quartercircle</item>\n      <item>halfcircle</item>\n      <item>fullcircle</item>\n      <item>unitsquare</item>\n\n      <item>identity</item>\n      <item>blankpicture</item>\n      <item>withdots</item>\n      <item>ditto</item>\n      <item>EOF</item>\n      <item>pensquare</item>\n\n      <item>penrazor</item>\n      <item>penspeck</item>\n      <item>whatever</item>\n<!--       <item>abs</item> -->\n      <item>round</item>\n<!--       <item>ceiling</item> -->\n      <item>byte</item>\n\n      <item>dir</item>\n      <item>unitvector</item>\n      <item>inverse</item>\n      <item>counterclockwise</item>\n      <item>tensepath</item>\n<!--       <item>mod</item> -->\n<!--       <item>div</item> -->\n\n<!--       <item>dotprod</item> -->\n      <item>takepower</item>\n      <item>direction</item>\n      <item>directionpoint</item>\n      <item>intersectionpoint</item>\n      <item>softjoin</item>\n      <item>incr</item>\n\n      <item>decr</item>\n      <item>reflectedabout</item>\n      <item>rotatedaround</item>\n      <item>rotatedabout</item>\n<!--       <item>min</item> -->\n<!--       <item>max</item> -->\n      <item>flex</item>\n\n      <item>superellipse</item>\n      <item>interpath</item>\n      <item>magstep</item>\n      <item>currentpen</item>\n      <item>currentpen_path</item>\n      <item>currentpicture</item>\n\n      <item>fill</item>\n      <item>draw</item>\n      <item>filldraw</item>\n      <item>drawdot</item>\n      <item>unfill</item>\n      <item>undraw</item>\n\n      <item>unfilldraw</item>\n      <item>undrawdot</item>\n      <item>erase</item>\n      <item>cutdraw</item>\n      <item>image</item>\n      <item>pickup</item>\n\n      <item>numeric_pickup</item>\n      <item>pen_lft</item>\n      <item>pen_rt</item>\n      <item>pen_top</item>\n      <item>pen_bot</item>\n      <item>savepen</item>\n\n      <item>clearpen</item>\n      <item>clear_pen_memory</item>\n      <item>lft</item>\n      <item>rt</item>\n      <item>top</item>\n      <item>bot</item>\n\n      <item>ulft</item>\n      <item>urt</item>\n      <item>llft</item>\n      <item>lrt</item>\n      <item>penpos</item>\n      <item>penstroke</item>\n\n      <item>arrowhead</item>\n      <item>makelabel</item>\n      <item>labels</item>\n      <item>penlabel</item>\n      <item>range</item>\n      <item>numtok</item>\n\n      <item>thru</item>\n      <item>clearxy</item>\n      <item>clearit</item>\n      <item>clearpen</item>\n      <item>pickup</item>\n      <item>shipit</item>\n\n      <item>bye</item>\n      <item>hide</item>\n      <item>stop</item>\n      <item>solve</item>\n<!--       <item>beginchar</item> -->\n      <item>blacker</item>\n      <item>capsule_def</item>\n\n      <item>change_width</item>\n      <item>define_blacker_pixels</item>\n      <item>define_corrected_pixels</item>\n      <item>define_good_x_pixels</item>\n      <item>define_good_y_pixels</item>\n      <item>define_horizontal_corrected_pixels</item>\n\n      <item>define_pixels</item>\n      <item>define_whole_blacker_pixels</item>\n      <item>define_whole_vertical_blacker_pixels</item>\n      <item>define_whole_vertical_pixels</item>\n<!--       <item>endchar</item> -->\n<!--       <item>extra_beginchar</item> -->\n<!--       <item>extra_endchar</item> -->\n      <item>extra_setup</item>\n\n      <item>font_coding_scheme</item>\n      <item>font_extra_space</item>\n      <item>font_identifier</item>\n      <item>font_normal_shrink</item>\n      <item>font_normal_space</item>\n      <item>font_normal_stretch</item>\n\n      <item>font_quad</item>\n      <item>font_size</item>\n      <item>font_slant</item>\n      <item>font_x_height</item>\n      <item>italcorr</item>\n      <item>labelfont</item>\n\n      <item>makebox</item>\n      <item>makegrid</item>\n      <item>maketicks</item>\n      <item>mode_def</item>\n      <item>mode_setup</item>\n      <item>o_correction</item>\n\n      <item>proofrule</item>\n      <item>proofrulethickness</item>\n      <item>rulepen</item>\n      <item>smode</item>\n      <item>cullit</item>\n      <item>currenttransform</item>\n\n      <item>gfcorners</item>\n      <item>grayfont</item>\n      <item>hround</item>\n      <item>imagerules</item>\n      <item>lowres_fix</item>\n      <item>nodisplays</item>\n\n      <item>notransforms</item>\n      <item>openit</item>\n      <item>proofoffset</item>\n      <item>screenchars</item>\n      <item>screenrule</item>\n      <item>screenstrokes</item>\n\n      <item>showit</item>\n      <item>slantfont</item>\n      <item>titlefont</item>\n      <item>unitpixel</item>\n      <item>vround</item>\n      <item>circmargin</item>\n\n      <item>defaultdx</item>\n      <item>defaultdy</item>\n      <item>boxit</item>\n      <item>boxjoin</item>\n      <item>bpath</item>\n      <item>circleit</item>\n\n      <item>drawboxed</item>\n      <item>drawboxes</item>\n      <item>drawunboxed</item>\n      <item>fixpos</item>\n      <item>fixsize</item>\n      <item>pic</item>\n\n    </list>\n\n    <!--We put all the delimiters here. They will be treated apart, for code folding.\n        Commented out, since these keywords are already matched by RegExpr rules.-->\n<!--    <list name=\"EnvDelimiters\">\n      <item>beginchar</item>\n      <item>endchar</item>\n      <item>extra_beginchar</item>\n      <item>extra_endchar</item>\n\n      <item>beginlogochar</item>\n      <item>beginfig</item>\n      <item>endfig</item>\n      <item>extra_beginfig</item>\n      <item>extra_endfig</item>\n    </list>-->\n\n    <contexts>\n      <context name=\"Normal Text\"    attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword String=\"mfBoolExp\"  attribute=\"BoolExp\" context=\"#stay\"/>\n        <keyword String=\"mfNumExp\"   attribute=\"NumExp\" context=\"#stay\"/>\n        <keyword String=\"mfInternal\" attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfPairExp\"  attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfPathExp\"  attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfPenExp\"   attribute=\"Statement\" context=\"#stay\"/>\n\n        <keyword String=\"mfPicExp\"   attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfStringExp\" attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfCommand\"  attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfType\"     attribute=\"Type\" context=\"#stay\"/>\n<!--         <keyword String=\"mfStatement\" attribute=\"Statement\" context=\"#stay\"/> -->\n        <keyword String=\"mfDefinition\" attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfCondition\" attribute=\"Conditional\" context=\"#stay\"/>\n        <keyword String=\"mfPrimitive\" attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mfMacro\"    attribute=\"Macro\" context=\"#stay\"/>\n\n        <keyword String=\"mpInternal\" attribute=\"Statement\" context=\"#stay\"/>\n        <keyword String=\"mpMacro\"    attribute=\"Macro\" context=\"#stay\"/>\n\n        <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n        <DetectChar char='\"' attribute=\"String\" context=\"string\" beginRegion=\"String\"/>\n        <RegExpr String=\"(\\+|\\-|\\*|\\/|\\=|\\:\\=)\" attribute=\"Operator\" context=\"#stay\"/>\n        <Detect2Chars char=\".\" char1=\".\" attribute=\"Operator\" context=\"#stay\"/>\n\n        <HlCOct attribute=\"Octal\"/>\n        <HlCHex attribute=\"Hex\"/>\n\n        <Float attribute=\"Float\"/>\n        <Int attribute=\"Decimal\"/>\n\n        <!--Metafont lengths-->\n        <RegExpr String=\"\\b(bp|cc|cm|dd|in|mm|pc|pt)\\b\" attribute=\"Float\" context=\"#stay\"/>\n        <RegExpr String=\"\\b-?\\d+(bp|cc|cm|dd|in|mm|pc|pt)#?\\b\" attribute=\"Float\" context=\"#stay\"/>\n        <RegExpr String=\"\\b-?\\.\\d+(bp|cc|cm|dd|in|mm|pc|pt)#?\\b\" attribute=\"Float\" context=\"#stay\"/>\n        <RegExpr String=\"\\b-?\\d+\\.\\d+(bp|cc|cm|dd|in|mm|pc|pt)#?\\b\" attribute=\"Float\" context=\"#stay\"/>\n\n        <!--Metafont coordinates, points, pathes-->\n\n        <RegExpr String=\"\\b[xy]\\d(\\w|\\')*\" attribute=\"Variable\" context=\"#stay\"/>\n        <RegExpr String=\"\\bz\\d(\\w|\\')*\" attribute=\"Variable\" context=\"#stay\"/>\n        <RegExpr String=\"\\bp\\d(\\w|\\')*\" attribute=\"Variable\" context=\"#stay\"/>\n\n        <!--Special characters-->\n        <DetectChar char=\"$\" attribute=\"Special\" context=\"#stay\"/>\n\n        <!--MetaPost has TeX inserts for typeset labels verbatimtex, btex, and etex will be treated as keywords-->\n        <RegExpr String=\"\\b(verbatimtex|btex)\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"TeXMode\" beginRegion=\"TeXblock\"/>\n\n        <!--Here are some delimiters with code folding-->\n        <RegExpr String=\"\\bbegin(group|fig|char)\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"#stay\" beginRegion=\"block\"/>\n        <RegExpr String=\"\\bend(group|fig|char)\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"#stay\" endRegion=\"block\"/>\n\n        <RegExpr String=\"\\bextra_begin(group|fig|char)\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"#stay\" beginRegion=\"block\"/>\n        <RegExpr String=\"\\bextra_end(group|fig|char)\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"#stay\" endRegion=\"block\"/>\n\n        <RegExpr String=\"\\b(def|vardef)\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"#stay\" beginRegion=\"defblock\"/>\n        <RegExpr String=\"\\benddef\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"#stay\" endRegion=\"defblock\"/>\n\n        <RegExpr String=\"\\bif\\b\" insensitive=\"1\" attribute=\"Conditional\" context=\"#stay\" beginRegion=\"ifblock\"/>\n        <RegExpr String=\"\\bfi\\b\" insensitive=\"1\" attribute=\"Conditional\" context=\"#stay\" endRegion=\"ifblock\"/>\n        <RegExpr String=\"\\b(for|forsuffixes|forever)\\b\" insensitive=\"1\" attribute=\"Conditional\" context=\"#stay\" beginRegion=\"forblock\"/>\n        <RegExpr String=\"\\bendfor\\b\" insensitive=\"1\" attribute=\"Conditional\" context=\"#stay\" endRegion=\"forblock\"/>\n\n      </context>\n\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectIdentifier/>\n        <Detect2Chars char=\"\\\" char1='\"' attribute=\"String\" context=\"#stay\"/>\n\n        <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"String\" context=\"#stay\"/>\n        <DetectChar char='\"' attribute=\"String\" context=\"#pop\" endRegion=\"String\"/>\n      </context>\n\n      <!--TeX mode : we just define generic TeX commands-->\n      <!--syntax from highlighting file latex.xml-->\n      <context name=\"TeXMode\" attribute=\"TeX\" lineEndContext=\"#stay\">\n        <DetectChar char=\"\\\" attribute=\"Keyword\" context=\"ContrSeq\"/>\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"MathMode\" beginRegion=\"mathMode\" />\n\n        <StringDetect String=\"\\(\" attribute=\"Math\" context=\"MathMode\" beginRegion=\"mathMode\" />\n        <RegExpr String=\"\\betex\\b\" insensitive=\"1\" attribute=\"Identifier\" context=\"#pop\" endRegion=\"TeXblock\"/>\n      </context>\n      <context name=\"ContrSeq\" attribute=\"Keyword\" lineEndContext=\"#pop\">\n        <StringDetect String=\"verb*\" attribute=\"Keyword\" context=\"Verb\"/>\n        <RegExpr String=\"verb(?=[^a-zA-Z])\" attribute=\"Keyword\" context=\"Verb\"/>\n        <DetectChar char=\"&#xd7;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"[a-zA-Z]+(\\+?|\\*{0,3})\" attribute=\"Keyword\" context=\"#pop\"/>\n        <RegExpr String=\"[^a-zA-Z]\" attribute=\"Keyword\" context=\"#pop\" />\n      </context>\n      <context name=\"Verb\" attribute=\"Verbatim\" lineEndContext=\"#pop#pop\" >\n        <RegExpr String=\"(.)\" attribute=\"Normal Text\" dynamic=\"true\" context=\"VerbEnd\" />\n      </context>\n      <context name=\"VerbEnd\" attribute=\"Verbatim\" lineEndContext=\"#pop#pop#pop\" dynamic=\"true\" >\n        <StringDetect String=\"%1\" attribute=\"Normal Text\" context=\"#pop#pop#pop\" dynamic=\"true\" />\n        <DetectChar char=\"&#xd7;\" attribute=\"Bullet\" context=\"#stay\"/>\n\n        <RegExpr String=\"[^%1\\xd7]*\" attribute=\"Verbatim\" context=\"#stay\" dynamic=\"true\" />\n      </context>\n\n      <!-- math mode: starting with $ or \\( -->\n      <context name=\"MathMode\" attribute=\"Math\" lineEndContext=\"#stay\">\n        <StringDetect String=\"$$\" attribute=\"Error\" context=\"#stay\" />\n        <DetectChar char=\"\\\" attribute=\"Keyword Mathmode\" context=\"MathContrSeq\"/>\n        <DetectChar char=\"$\" attribute=\"Math\" context=\"#pop\" endRegion=\"mathMode\" />\n        <Detect2Chars char=\"\\\" char1=\")\" attribute=\"Math\" context=\"#pop\" endRegion=\"mathMode\" />\n\n        <Detect2Chars char=\"\\\" char1=\"]\" attribute=\"Error\" context=\"#stay\" />\n      </context>\n      <context name=\"MathContrSeq\" attribute=\"Keyword Mathmode\" lineEndContext=\"#pop\">\n        <DetectChar char=\"&#xd7;\" attribute=\"Bullet\" context=\"#stay\"/>\n        <RegExpr String=\"[a-zA-Z]+\\*?\" attribute=\"Keyword Mathmode\" context=\"#pop\"/>\n        <RegExpr String=\"[^a-zA-Z]\" attribute=\"Keyword Mathmode\" context=\"#pop\" /> \n      </context>\n\n      <!-- comment -->\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n        <DetectChar char=\"&#xd7;\" attribute=\"Bullet\" context=\"#stay\"/>\n      </context>\n\n</contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsNormal\" color=\"#800000\" selColor=\"#60FFFF\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Keyword Mathmode\" defStyleNum=\"dsNormal\" color=\"#606000\" selColor=\"#FFD0FF\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\n      <itemData name=\"Error\" defStyleNum=\"dsAlert\"/>\n      <itemData name=\"Math\" defStyleNum=\"dsNormal\" color=\"#00A000\" selColor=\"#FF40FF\"  bold=\"0\" italic=\"0\"/>\n      <itemData name=\"TeX\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Verbatim\" defStyleNum=\"dsVerbatimString\"/>\n      <itemData name=\"Macro\"  defStyleNum=\"dsKeyword\" color=\"#770000\" selColor=\"#99FFFF\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\"/>\n      <itemData name=\"Special\" defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\"/>\n      <itemData name=\"Conditional\" defStyleNum=\"dsKeyword\"/>\n\n      <itemData name=\"Statement\" defStyleNum=\"dsNormal\" color=\"#0000FF\" selColor=\"#FFFF00\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"BoolExp\" defStyleNum=\"dsKeyword\" italic=\"1\" bold=\"0\" color=\"#AA00AA\" selColor=\"#FFFF00\"/>\n      <itemData name=\"NumExp\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Identifier\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Type\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Bullet\" defStyleNum=\"dsExtension\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n </itemDatas>\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"%\"/>\n    </comments>\n    <keywords casesensitive=\"0\" />\n\n  </general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/metamath.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n\t<!ENTITY label \"[0-9A-Za-z.\\-_]+\">\n\t<!ENTITY symbol \"[^ $]+\">\n]>\n<language name=\"Metamath\" section=\"Scientific\" extensions=\"*.mm\"\n\tversion=\"2\" kateversion=\"5.0\" author=\"Aaron Puchert\" license=\"MIT\">\n<highlighting>\n\t<contexts>\n\t\t<!-- Block: ${ statement* $} -->\n\t\t<context name=\"Block\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"[\" attribute=\"Keyword\" context=\"Include\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"{\" attribute=\"Keyword\" context=\"Block\" beginRegion=\"block\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"}\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"block\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"v\" attribute=\"Keyword\" context=\"VariableDeclaration\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"c\" attribute=\"Keyword\" context=\"ConstantDeclaration\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"d\" attribute=\"Keyword\" context=\"DisjointRestriction\"/>\n\t\t\t<RegExpr String=\"&label;\" attribute=\"Label\" context=\"LabelledStatement\"/>\n\t\t</context>\n\t\t<!-- Comment: $( text $) -->\n\t\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr String=\" ~ *&label;\" attribute=\"ReferenceLabel\" context=\"#stay\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\")\" attribute=\"Comment\" context=\"#pop\" endRegion=\"comment\"/>\n\t\t</context>\n\t\t<!-- Include: $[ filename $] -->\n\t\t<context name=\"Include\" attribute=\"Include\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"]\" attribute=\"Keyword\" context=\"#pop\"/>\n\t\t</context>\n\t\t<!-- Variable symbol declaration: $v symbol* $. -->\n\t\t<context name=\"VariableDeclaration\" attribute=\"Variable\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\".\" attribute=\"Keyword\" context=\"#pop\"/>\n\t\t</context>\n\t\t<!-- Constant symbol declaration: $c symbol* $. -->\n\t\t<context name=\"ConstantDeclaration\" attribute=\"Constant\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\".\" attribute=\"Keyword\" context=\"#pop\"/>\n\t\t</context>\n\t\t<!-- Disjoint variable restriction: $d [variable]* $. -->\n\t\t<context name=\"DisjointRestriction\" attribute=\"Variable\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\".\" attribute=\"Keyword\" context=\"#pop\"/>\n\t\t</context>\n\t\t<!-- Labeled statements: label $* ... $. -->\n\t\t<context name=\"LabelledStatement\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"f\" attribute=\"Keyword\" context=\"#pop!VariableTypeHypothesis\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"e\" attribute=\"Keyword\" context=\"#pop!LogicalHypothesis\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"a\" attribute=\"Keyword\" context=\"#pop!AxiomaticAssertion\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"p\" attribute=\"Keyword\" context=\"#pop!ProvableAssertion\"/>\n\t\t</context>\n\t\t<!-- Variable-type hypothesis: label $f constant variable $. -->\n\t\t<context name=\"VariableTypeHypothesis\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<RegExpr String=\"&symbol;\" attribute=\"Constant\" context=\"#pop!SymbolList\"/>\n\t\t</context>\n\t\t<!-- Logical hypothesis: label $e constant symbol* $. -->\n\t\t<context name=\"LogicalHypothesis\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<RegExpr String=\"&symbol;\" attribute=\"Constant\" context=\"#pop!SymbolList\"/>\n\t\t</context>\n\t\t<!-- Axiomatic assertion: label $a constant symbol* $. -->\n\t\t<context name=\"AxiomaticAssertion\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<RegExpr String=\"&symbol;\" attribute=\"Constant\" context=\"#pop!SymbolList\"/>\n\t\t</context>\n\t\t<!-- Provable assertion: label $p constant symbol* $= label* $. -->\n\t\t<context name=\"ProvableAssertion\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<RegExpr String=\"&symbol;\" attribute=\"Constant\" context=\"#pop!ProvableAssertionSymbolList\"/>\n\t\t</context>\n\t\t<!-- List of symbols, ending either with $. or $= -->\n\t\t<context name=\"SymbolList\" attribute=\"Variable\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\".\" attribute=\"Keyword\" context=\"#pop\"/>\n\t\t</context>\n\t\t<context name=\"ProvableAssertionSymbolList\" attribute=\"Variable\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\"=\" attribute=\"Keyword\" context=\"#pop!Proof\" beginRegion=\"proof\"/>\n\t\t</context>\n\t\t<!-- Proof: label* -->\n\t\t<context name=\"Proof\" attribute=\"Label\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<DetectChar char=\"(\" attribute=\"Keyword\" context=\"#pop!CompressedProofStatements\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\".\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"proof\"/>\n\t\t</context>\n\t\t<!-- Compressed proof syntax: instead of label* we have (label*) [A-Z]* -->\n\t\t<context name=\"CompressedProofStatements\" attribute=\"Label\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<DetectChar char=\")\" attribute=\"Keyword\" context=\"#pop!CompressedProofSteps\"/>\n\t\t</context>\n\t\t<context name=\"CompressedProofSteps\" attribute=\"CompressedProof\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars char=\"$\" char1=\"(\" attribute=\"Comment\" context=\"Comment\" beginRegion=\"comment\"/>\n\t\t\t<Detect2Chars char=\"$\" char1=\".\" attribute=\"Keyword\" context=\"#pop\" endRegion=\"proof\"/>\n\t\t</context>\n\t</contexts>\n\t<itemDatas>\n\t\t<itemData name=\"Normal\"   defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Include\"  defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Constant\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Label\"    defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n\t\t<itemData name=\"ReferenceLabel\"  defStyleNum=\"dsCommentVar\" spellChecking=\"false\"/>\n\t\t<itemData name=\"CompressedProof\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n\t</itemDatas>\n</highlighting>\n<general>\n\t<keywords casesensitive=\"1\"/>\n\t<comments>\n\t\t<comment name=\"multiLine\" start=\"$(\" end=\"$)\" region=\"comment\"/>\n\t</comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mib.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Ref SMIv2: RFC 2578, RFC 2579 and RFC 2580 -->\n<language name=\"MIB\" version=\"1\" kateversion=\"3.4\" section=\"Other\" extensions=\"*.mib\" casesensitive=\"1\" author=\"Jaap Keuter (jaap.keuter@xs4all.nl)\" license=\"MIT\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>ABSENT</item>\n            <item>ACCESS</item>\n            <item>AGENT-CAPABILITIES</item>\n            <item>ANY</item>\n            <item>APPLICATION</item>\n            <item>AUGMENTS</item>\n            <item>BEGIN</item>\n            <item>BIT</item>\n            <item>BITS</item>\n            <item>BOOLEAN</item>\n            <item>BY</item>\n            <item>CHOICE</item>\n            <item>COMPONENT</item>\n            <item>COMPONENTS</item>\n            <item>CONTACT-INFO</item>\n            <item>CREATION-REQUIRES</item>\n            <item>DEFAULT</item>\n            <item>DEFINED</item>\n            <item>DEFINITIONS</item>\n            <item>DEFVAL</item>\n            <item>DESCRIPTION</item>\n            <item>DISPLAY-HINT</item>\n            <item>END</item>\n            <item>ENUMERATED</item>\n            <item>ENTERPRISE</item>\n            <item>EXPLICIT</item>\n            <item>EXPORTS</item>\n            <item>EXTERNAL</item>\n            <item>FALSE</item>\n            <item>FROM</item>\n            <item>GROUP</item>\n            <item>IMPLICIT</item>\n            <item>IMPLIED</item>\n            <item>IMPORTS</item>\n            <item>INCLUDES</item>\n            <item>INDEX</item>\n            <item>LAST-UPDATED</item>\n            <item>MANDATORY-GROUPS</item>\n            <item>MAX</item>\n            <item>MAX-ACCESS</item>\n            <item>MIN</item>\n            <item>MIN-ACCESS</item>\n            <item>MINUS-INFINITY</item>\n            <item>MODULE</item>\n            <item>MODULE-COMPLIANCE</item>\n            <item>MODULE-IDENTITY</item>\n            <item>NOTIFICATION-GROUP</item>\n            <item>NOTIFICATION-TYPE</item>\n            <item>NOTIFICATIONS</item>\n            <item>NULL</item>\n            <item>OBJECT-GROUP</item>\n            <item>OBJECT-IDENTITY</item>\n            <item>OBJECT-TYPE</item>\n            <item>OBJECTS</item>\n            <item>OF</item>\n            <item>OPTIONAL</item>\n            <item>ORGANIZATION</item>\n            <item>PLUS-INFINITY</item>\n            <item>PRESENT</item>\n            <item>PRIVATE</item>\n            <item>PRODUCT-RELEASE</item>\n            <item>REAL</item>\n            <item>REFERENCE</item>\n            <item>REVISION</item>\n            <item>SEQUENCE</item>\n            <item>SET</item>\n            <item>SIZE</item>\n            <item>STATUS</item>\n            <item>SUPPORTS</item>\n            <item>SYNTAX</item>\n            <item>TAGS</item>\n            <item>TEXTUAL-CONVENTION</item>\n            <item>TRAP-TYPE</item>\n            <item>TRUE</item>\n            <item>UNITS</item>\n            <item>UNIVERSAL</item>\n            <item>VARIABLES</item>\n            <item>VARIATION</item>\n            <item>WITH</item>\n            <item>WRITE-SYNTAX</item>\n        </list>\n        <list name=\"basetypes\">\n            <item>INTEGER</item>\n            <item>OCTET</item> <!-- should be, but cannot be concatenated with next-->\n            <item>STRING</item>\n            <item>OBJECT</item> <!-- should be, but cannot be concatenated with next -->\n            <item>IDENTIFIER</item>\n            <item>Integer32</item>\n            <item>IpAddress</item>\n            <item>Counter32</item>\n            <item>Gauge32</item>\n            <item>Unsigned32</item>\n            <item>TimeTicks</item>\n            <item>Opaque</item>\n            <item>Counter64</item>\n        </list>\n        <list name=\"statuses\">\n            <item>obsolete</item>\n            <item>deprecated</item>\n            <item>current</item>\n        </list>\n        <list name=\"accesstypes\">\n            <item>not-accessible</item>\n            <item>accessible-for-notify</item>\n            <item>read-only</item>\n            <item>read-write</item>\n            <item>read-create</item>\n        </list>\n        <contexts>\n            <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <WordDetect attribute=\"Keyword\" context=\"Import\" String=\"IMPORTS\"/>\n                <RegExpr context=\"Syntax\" String=\"(\\w+)\\s*::=\\s*TEXTUAL-CONVENTION\" lookAhead=\"true\"/>\n                <!-- for SEQUENCE on next line -->\n                <RegExpr context=\"Syntax\" String=\"(\\w+)\\s*::=\\W*$\" lookAhead=\"true\"/>\n                <RegExpr context=\"Syntax\" String=\"(\\w+)\\s*::=\\s*SEQUENCE\" lookAhead=\"true\"/>\n                <RegExpr context=\"Syntax\" String=\"SYNTAX\\s*(\\w+)\" lookAhead=\"true\"/>\n                <WordDetect attribute=\"Keyword\" context=\"Sequence\" String=\"SEQUENCE\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"basetypes\"/>\n                <keyword attribute=\"Status\" context=\"#stay\" String=\"statuses\"/>\n                <keyword attribute=\"Accesstype\" context=\"#stay\" String=\"accesstypes\"/>\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"-\" char1=\"-\"/>\n                <Int attribute=\"Decimal\" context=\"#stay\"/>\n                <Detect2Chars attribute=\"Decimal\" context=\"#stay\" char=\".\" char1=\".\"/>\n            </context>\n            <context name=\"Import\" attribute=\"Syntax\" lineEndContext=\"#stay\">\n                <WordDetect attribute=\"Keyword\" context=\"From\" String=\"FROM\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"basetypes\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"-\" char1=\"-\"/>\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\"/>\n            </context>\n            <context name=\"From\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n              <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\";\"/>\n            </context>\n            <context name=\"Syntax\" attribute=\"Syntax\" lineEndContext=\"#pop\" dynamic=\"true\">\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"{\"/>\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"(\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"basetypes\"/>\n                <StringDetect attribute=\"Syntax\" context=\"#pop\" String=\"%1\" dynamic=\"true\"/>\n            </context>\n            <context name=\"Sequence\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"basetypes\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"-\" char1=\"-\"/>\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\"/>\n            </context>\n            <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n                <LineContinue attribute=\"String\" context=\"#stay\"/>\n                <HlCStringChar attribute=\"Char\" context=\"#stay\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"-\" char1=\"-\"/>\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Syntax\"      defStyleNum=\"dsImport\" italic=\"true\"/>\n            <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"Status\"      defStyleNum=\"dsDataType\"/>\n            <itemData name=\"Accesstype\"  defStyleNum=\"dsDataType\"/>\n            <itemData name=\"String\"      defStyleNum=\"dsString\"/>\n            <itemData name=\"Char\"        defStyleNum=\"dsChar\"/>\n            <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n            <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"--\"/>\n        </comments>\n        <keywords casesensitive=\"1\" weakDeliminator=\"-\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mips.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"MIPS Assembler\" version=\"3\" kateversion=\"2.4\" section=\"Assembler\" extensions=\"*.s;\" mimetype=\"text/x-mips\" author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\" priority=\"-1\">\n  <highlighting>\n    <list name=\"type\">\n      <item>.align</item>\n      <item>.ascii</item>\n      <item>.asciiz</item>\n      <item>.byte</item>\n      <item>.double</item>\n      <item>.extern</item>\n      <item>.float</item>\n      <item>.globl</item>\n      <item>.half</item>\n      <item>.sdata</item>\n      <item>.set</item>\n      <item>.space</item>\n      <item>.word</item>\n    </list>\n    <list name=\"section\">\n      <item>.data</item>\n      <item>.kdata</item>\n      <item>.ktext</item>\n      <item>.text</item>\n    </list>\n    <list name=\"hardware\">\n      <item>abs.d</item>\n      <item>abs.s</item>\n      <item>add</item>\n      <item>add.d</item>\n      <item>add.s</item>\n      <item>addi</item>\n      <item>addiu</item>\n      <item>addu</item>\n      <item>and</item>\n      <item>andi</item>\n      <item>bc0f</item>\n      <item>bc0t</item>\n      <item>bc1f</item>\n      <item>bc1t</item>\n      <item>bc2f</item>\n      <item>bc2t</item>\n      <item>bc3f</item>\n      <item>bc3t</item>\n      <item>beq</item>\n      <item>bgez</item>\n      <item>bgezal</item>\n      <item>bgtz</item>\n      <item>blez</item>\n      <item>bltz</item>\n      <item>bltzal</item>\n      <item>bne</item>\n      <item>break</item>\n      <item>c.eq.d</item>\n      <item>c.eq.s</item>\n      <item>c.seq.s</item>\n      <item>c.seq.d</item>\n      <item>c.ueq.s</item>\n      <item>c.ueq.d</item>\n      <item>c.olt.d</item>\n      <item>c.olt.s</item>\n      <item>c.ole.d</item>\n      <item>c.ole.s</item>\n      <item>c.ult.d</item>\n      <item>c.ult.s</item>\n      <item>c.ule.d</item>\n      <item>c.ule.s</item>\n      <item>c.le.d</item>\n      <item>c.le.s</item>\n      <item>c.lt.d</item>\n      <item>c.lt.s</item>\n      <item>c.un.s</item>\n      <item>c.un.d</item>\n      <item>cvt.d.s</item>\n      <item>cvt.d.w</item>\n      <item>cvt.s.d</item>\n      <item>cvt.s.w</item>\n      <item>cvt.w.d</item>\n      <item>cvt.w.s</item>\n      <item>div.d</item>\n      <item>div.s</item>\n      <item>j</item>\n      <item>jal</item>\n      <item>jalr</item>\n      <item>jr</item>\n      <item>lb</item>\n      <item>lbu</item>\n      <item>lh</item>\n      <item>lhu</item>\n      <item>lui</item>\n      <item>lw</item>\n      <item>lwc0</item>\n      <item>lwc1</item>\n      <item>lwc2</item>\n      <item>lwc3</item>\n      <item>lwl</item>\n      <item>lwr</item>\n      <item>mfc0</item>\n      <item>mfc1</item>\n      <item>mfc2</item>\n      <item>mfc3</item>\n      <item>mfhi</item>\n      <item>mflo</item>\n      <item>mtc0</item>\n      <item>mtc1</item>\n      <item>mtc2</item>\n      <item>mtc3</item>\n      <item>mthi</item>\n      <item>mtlo</item>\n      <item>mul.d</item>\n      <item>mul.s</item>\n      <item>mult</item>\n      <item>multu</item>\n      <item>nor</item>\n      <item>or</item>\n      <item>ori</item>\n      <item>rfe</item>\n      <item>sb</item>\n      <item>sh</item>\n      <item>sw</item>\n      <item>swcl</item>\n      <item>swl</item>\n      <item>swr</item>\n      <item>sll</item>\n      <item>sllv</item>\n      <item>slt</item>\n      <item>slti</item>\n      <item>sltiu</item>\n      <item>sra</item>\n      <item>srav</item>\n      <item>srl</item>\n      <item>srlv</item>\n      <item>sub</item>\n      <item>sub.d</item>\n      <item>sub.s</item>\n      <item>subu</item>\n      <item>sw</item>\n      <item>swc0</item>\n      <item>swc1</item>\n      <item>swc2</item>\n      <item>swc3</item>\n      <item>swl</item>\n      <item>swr</item>\n      <item>syscall</item>\n      <item>xor</item>\n      <item>xori</item>\n    </list>\n    <list name=\"pseudo\">\n      <item>abs</item>\n      <item>b</item>\n      <item>beqz</item>\n      <item>bge</item>\n      <item>bgeu</item>\n      <item>bgt</item>\n      <item>bgtu</item>\n      <item>ble</item>\n      <item>bleu</item>\n      <item>blt</item>\n      <item>bltu</item>\n      <item>bnez</item>\n      <item>div</item>\n      <item>divu</item>\n      <item>l.d</item>\n      <item>l.s</item>\n      <item>la</item>\n      <item>ld</item>\n      <item>li</item>\n      <item>li.d</item>\n      <item>li.s</item>\n      <item>mfc0.d</item>\n      <item>mfc1.d</item>\n      <item>mfc2.d</item>\n      <item>mfc3.d</item>\n      <item>mov.d</item>\n      <item>mov.s</item>\n      <item>move</item>\n      <item>mul</item>\n      <item>mulo</item>\n      <item>mulou</item>\n      <item>neg</item>\n      <item>neg.d</item>\n      <item>neg.s</item>\n      <item>negu</item>\n      <item>nop</item>\n      <item>not</item>\n      <item>rem</item>\n      <item>remu</item>\n      <item>rol</item>\n      <item>ror</item>\n      <item>s.d</item>\n      <item>s.s</item>\n      <item>sd</item>\n      <item>seq</item>\n      <item>sge</item>\n      <item>sgeu</item>\n      <item>sgt</item>\n      <item>sgtu</item>\n      <item>sle</item>\n      <item>sleu</item>\n      <item>sne</item>\n      <item>ulh</item>\n      <item>ulhu</item>\n      <item>ulw</item>\n      <item>ush</item>\n      <item>usw</item>\n    </list>\n    <list name=\"register1\">\n      <item>$0</item>\n      <item>$1</item>\n      <item>$2</item>\n      <item>$3</item>\n      <item>$4</item>\n      <item>$5</item>\n      <item>$6</item>\n      <item>$7</item>\n      <item>$8</item>\n      <item>$9</item>\n      <item>$10</item>\n      <item>$11</item>\n      <item>$12</item>\n      <item>$13</item>\n      <item>$14</item>\n      <item>$15</item>\n      <item>$16</item>\n      <item>$17</item>\n      <item>$18</item>\n      <item>$19</item>\n      <item>$20</item>\n      <item>$21</item>\n      <item>$22</item>\n      <item>$23</item>\n      <item>$24</item>\n      <item>$25</item>\n      <item>$26</item>\n      <item>$27</item>\n      <item>$28</item>\n      <item>$29</item>\n      <item>$30</item>\n      <item>$31</item>\n      <item>$zero</item>\n      <item>$t0</item>\n      <item>$t1</item>\n      <item>$t2</item>\n      <item>$t3</item>\n      <item>$t4</item>\n      <item>$t5</item>\n      <item>$t6</item>\n      <item>$t7</item>\n      <item>$t8</item>\n      <item>$t9</item>\n    </list>\n    <list name=\"register2\">\n      <item>$v0</item>\n      <item>$v1</item>\n      <item>$a0</item>\n      <item>$a1</item>\n      <item>$a2</item>\n      <item>$a3</item>\n      <item>$k0</item>\n      <item>$k1</item>\n      <item>$at</item>\n      <item>$gp</item>\n      <item>$sp</item>\n      <item>$fp</item>\n      <item>$s0</item>\n      <item>$s1</item>\n      <item>$s2</item>\n      <item>$s3</item>\n      <item>$s4</item>\n      <item>$s5</item>\n      <item>$s6</item>\n      <item>$s7</item>\n      <item>$ra</item>\n    </list>\n    <list name=\"fp\">\n      <item>$f0</item>\n      <item>$f1</item>\n      <item>$f2</item>\n      <item>$f3</item>\n      <item>$f4</item>\n      <item>$f5</item>\n      <item>$f6</item>\n      <item>$f7</item>\n      <item>$f8</item>\n      <item>$f9</item>\n      <item>$f10</item>\n      <item>$f11</item>\n      <item>$f12</item>\n      <item>$f13</item>\n      <item>$f14</item>\n      <item>$f15</item>\n      <item>$f16</item>\n      <item>$f17</item>\n      <item>$f18</item>\n      <item>$f19</item>\n      <item>$f20</item>\n      <item>$f21</item>\n      <item>$f22</item>\n      <item>$f23</item>\n      <item>$f24</item>\n      <item>$f25</item>\n      <item>$f26</item>\n      <item>$f27</item>\n      <item>$f28</item>\n      <item>$f29</item>\n      <item>$f30</item>\n      <item>$f31</item>\n    </list>\n    <contexts>\n      <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Hardware Instruction\" context=\"#stay\" String=\"hardware\"/>\n        <keyword attribute=\"Pseudo Instruction\" context=\"#stay\" String=\"pseudo\"/>\n        <keyword attribute=\"Other Register\" context=\"#stay\" String=\"register1\"/>\n        <keyword attribute=\"Main Register\" context=\"#stay\" String=\"register2\"/>\n        <keyword attribute=\"Floating Point Register\" context=\"#stay\" String=\"fp\"/>\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"section\"/>\n        <keyword attribute=\"Section\" context=\"#stay\" String=\"type\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"#\\s*BEGIN.*$\" beginRegion=\"region\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"#\\s*END.*$\" endRegion=\"region\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"#.*$\" />\n        <RegExpr attribute=\"Label\" context=\"#stay\" String=\"[\\w_\\.]+:\" firstNonSpace=\"true\"/>\n        <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n      </context>\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#stay\" >\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"\\\\.\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Hardware Instruction\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Pseudo Instruction\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Other Register\" defStyleNum=\"dsDataType\" color=\"#0000ff\"/>\n      <itemData name=\"Main Register\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Floating Point Register\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Section\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Type\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Char\" defStyleNum=\"dsChar\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Label\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\".\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/modelica.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n\t====================================================================\n\tModelica syntax highlighting file for the KDE editors Kate and Kwrite\n\t====================================================================\n\tBased on Modelica 3.0, available at the following link:\n\thttp://www.modelica.org/documents/ModelicaSpec30.pdf\n\n\tLicense: LGPL v2 or later\n\n\tChangeLog: Aug 21, 2008: first version committed.\n\n\tAuthor: Federico Zenith, Max Planck Institute for Complex Technical\n\tSystems, Magdeburg (Germany).\n-->\n\n\n<language name=\"Modelica\" version=\"6\" kateversion=\"5.0\" casesensitive=\"1\" section=\"Sources\" extensions=\"*.mo\" author=\"Federico Zenith\" license=\"LGPLv2+\">\n\n\t<highlighting>\n\t\t<!-- Classes in Modelica can be called different names; \"class\" is the\n\t\t     most general one, others will limit its capabilities in some ways;\n\t\t     for instance, \"record\" can only contain data members, \"connector\"\n\t\t     does not allow equations, and so on. -->\n\t\t<list name=\"classTypes\">\n\t\t\t<item>block</item>\n\t\t\t<item>class</item>\n\t\t\t<item>connector</item>\n\t\t\t<item>function</item>\n\t\t\t<item>model</item>\n\t\t\t<item>package</item>\n\t\t\t<item>record</item>\n\t\t</list>\n\n\t\t<list name=\"classType_type\">\n\t\t\t<!-- NOTE this should actually be with the rest in classTypes, but\n\t\t\t     \"type\" shall not start an environment. -->\n\t\t\t<item>type</item>\n\t\t</list>\n\n\t\t<!-- The primitive data types already defined in Modelica. -->\n\t\t<list name=\"primitiveTypes\">\n\t\t\t<item>Boolean</item>\n\t\t\t<item>enumeration</item>\n\t\t\t<item>ExternalObject</item>\n\t\t\t<item>Integer</item>\n\t\t\t<item>Real</item>\n\t\t\t<item>StateSelect</item>\n\t\t\t<item>String</item>\n\t\t</list>\n\t\t\n\t\t<!-- The attributes of data types defined in Modelica and those derived\n\t\t     from them. Not all primitive data types have all attributes. -->\n\t\t<list name=\"defaultAttributes\">\n\t\t\t<item>display</item>\n\t\t\t<item>fixed</item>\n\t\t\t<item>max</item>\n\t\t\t<item>min</item>\n\t\t\t<item>nominal</item>\n\t\t\t<item>quantity</item>\n\t\t\t<item>start</item>\n\t\t\t<item>stateSelect</item>\n\t\t\t<item>unit</item>\n\t\t\t<item>value</item>\n\t\t</list>\n\n\t\t<!-- The keywords defined in the Modelica specification (for the 3.0\n\t\t     specification it is in section 2.3.3), minus the class types. -->\n\t\t<list name=\"keywords\">\n\t\t\t<item>algorithm</item>\n\t\t\t<item>and</item>\n\t\t\t<item>annotation</item>\n\t\t\t<item>assert</item>\n\t\t\t<item>break</item>\n\t\t\t<item>connect</item>\n\t\t\t<item>constant</item>\n\t\t\t<item>constrainedby</item>\n\t\t\t<item>discrete</item>\n\t\t\t<item>else</item>\n\t\t\t<item>elseif</item>\n\t\t\t<item>elsewhen</item>\n\t\t\t<item>encapsulated</item>\n\t\t\t<item>end</item>\n\t\t\t<item>equation</item>\n\t\t\t<item>expandable</item>\n\t\t\t<item>extends</item>\n\t\t\t<item>external</item>\n\t\t\t<item>false</item>\n\t\t\t<item>final</item>\n\t\t\t<item>flow</item>\n\t\t\t<item>for</item>\n\t\t\t<item>if</item>\n\t\t\t<item>import</item>\n\t\t\t<item>in</item>\n\t\t\t<item>inner</item>\n\t\t\t<item>input</item>\n\t\t\t<item>loop</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t\t<item>outer</item>\n\t\t\t<item>output</item>\n\t\t\t<item>parameter</item>\n\t\t\t<item>partial</item>\n\t\t\t<item>protected</item>\n\t\t\t<item>public</item>\n\t\t\t<item>redeclare</item>\n\t\t\t<item>replaceable</item>\n\t\t\t<item>return</item>\n\t\t\t<item>then</item>\n\t\t\t<item>true</item>\n\t\t\t<item>when</item>\n\t\t\t<item>while</item>\n\t\t\t<item>within</item>\n\t\t</list>\n\t\t\n\t\t<!-- The functions that are by default available in Modelica 3.0. -->\n\t\t<list name=\"functions\">\n\t\t\t<!-- NOTE this is more like a built-in variable, but as it changes\n\t\t\t     its value during the simulation it is more like a function\n\t\t\t     without the (), and has therefore been placed here.-->\n\t\t\t<item>time</item>\n\n\t\t\t<item>abs</item>\n\t\t\t<item>ceil</item>\n\t\t\t<item>div</item>\n\t\t\t<item>floor</item>\n\t\t\t<item>integer</item>\n\t\t\t<item>mod</item>\n\t\t\t<item>rem</item>\n\t\t\t<item>sign</item>\n\t\t\t<item>sqrt</item>\n\n\t\t\t<item>sin</item>\n\t\t\t<item>cos</item>\n\t\t\t<item>tan</item>\n\t\t\t<item>asin</item>\n\t\t\t<item>acos</item>\n\t\t\t<item>atan</item>\n\t\t\t<item>atan2</item>\n\t\t\t<item>sinh</item>\n\t\t\t<item>cosh</item>\n\t\t\t<item>tanh</item>\n\t\t\t<item>exp</item>\n\t\t\t<item>log</item>\n\t\t\t<item>log10</item>\n\n\t\t\t<item>analysisType</item>\n\t\t\t<item>cardinality</item> <!-- NOTE deprecated in 3.0. -->\n\t\t\t<item>change</item>\n\t\t\t<item>delay</item>\n\t\t\t<item>der</item>\n\t\t\t<item>direction</item>\n\t\t\t<item>edge</item>\n\t\t\t<item>initial</item>\n\t\t\t<item>isPresent</item>\n\t\t\t<item>noEvent</item>\n\t\t\t<item>pre</item>\n\t\t\t<item>reinit</item>\n\t\t\t<item>sample</item>\n\t\t\t<item>semiLinear</item>\n\t\t\t<item>smooth</item>\n\t\t\t<item>terminal</item>\n\t\t\t<item>terminate</item>\n\n\t\t\t<item>ndims</item>\n\t\t\t<item>size</item>\n\t\t\t<item>scalar</item>\n\t\t\t<item>vector</item>\n\t\t\t<item>matrix</item>\n\t\t\t<item>array</item>\n\t\t\t<item>zeros</item>\n\t\t\t<item>ones</item>\n\t\t\t<item>fill</item>\n\t\t\t<item>identity</item>\n\t\t\t<item>diagonal</item>\n\t\t\t<item>linspace</item>\n\t\t\t<item>min</item>\n\t\t\t<item>max</item>\n\t\t\t<item>sum</item>\n\t\t\t<item>product</item>\n\t\t\t<item>transpose</item>\n\t\t\t<item>outerProduct</item>\n\t\t\t<item>symmetric</item>\n\t\t\t<item>cross</item>\n\t\t\t<item>skew</item>\n\t\t\t<item>cat</item>\n\t\t</list>\n\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\bend\\s+(for|while|loop)\\b\" endRegion=\"loopBlock\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\bloop\\b\" beginRegion=\"loopBlock\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\bend\\s+(if|when)\\b\" endRegion=\"thenBlock\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\bend\\s+(if|when)\\b\" endRegion=\"thenBlock\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\b(if|when)\\b\" beginRegion=\"thenBlock\"/>\n\n\t\t\t\t<keyword attribute=\"Class Type\" String=\"classType_type\"/>\n\t\t\t\t<keyword attribute=\"Class Type\" String=\"classTypes\" beginRegion=\"class\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\bend \" endRegion=\"class\"/>\n\n\t\t\t\t<keyword attribute=\"Data Type\" String=\"primitiveTypes\"/>\n\t\t\t\t<keyword attribute=\"Default Attribute\" String=\"defaultAttributes\"/>\n\t\t\t\t<keyword attribute=\"Keyword\" String=\"keywords\"/>\n\t\t\t\t<keyword attribute=\"Function\" String=\"functions\"/>\n\t\t\t\t<Float attribute=\"Floating-Point Number\"/>\n\t\t\t\t<Int attribute=\"Integer Number\"/>\n\t\t\t\t<AnyChar attribute=\"Delimiter\" String=\"()[]{}\"/>\n\t\t\t\t<RegExpr attribute=\"Variable\" String=\"[_a-zA-Z]\\w*\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Single-line comment\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Multi-line comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Single-line comment\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t\t<DetectIdentifier/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multi-line comment\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t\t<DetectIdentifier/>\n\t\t\t</context>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Variable\" defStyleNum=\"dsVariable\"/>\n\t\t\t<itemData name=\"Class Type\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Delimiter\" defStyleNum=\"dsOperator\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n\t\t\t<itemData name=\"Default Attribute\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Function\" defStyleNum=\"dsFunction\"/>\n\t\t\t<itemData name=\"Floating-Point Number\" defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Integer Number\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/**\" end=\"*/\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\"/>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/modelines.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY space \" \">\n    <!ENTITY end \"&#59;\">\n]>\n<!--\n  Copyright (c) 2012-2014 by Alex Turbov (i.zaufi@gmail.com)\n  -->\n<language name=\"Modelines\"\n          version=\"4\"\n          kateversion=\"5.0\"\n          section=\"Other\"\n          extensions=\"\"\n          mimetype=\"\"\n          author=\"Alex Turbov (i.zaufi@gmail.com)\"\n          license=\"MIT\"\n          hidden=\"true\"\n          priority=\"6\">\n<!--\n  The main purpose of this file is to be included into other syntax files.\n\n  NOTE Default colors are set to 'Comment', so if u don't want to highight it,\n  just leave colors as is...\n\n  TODO Support for other modelines? emacs/vim??\n-->\n<highlighting>\n  <list name=\"ModelineStartKeyword\">\n    <item>kate:</item>\n  </list>\n\n  <list name=\"Booleans\">\n    <item>auto-brackets</item>\n    <!-- NOTE Deprecated -->\n<!--     <item>auto-insert-doxygen</item> -->\n    <item>automatic-spell-checking</item>                 <!-- NOTE Since KDE 4.?? -->\n    <item>backspace-indents</item>\n    <item>block-selection</item>\n    <item>bookmark-sorting</item>\n    <item>bom</item>\n    <item>byte-order-marker</item>\n    <item>byte-order-mark</item>\n    <item>dynamic-word-wrap</item>\n    <item>folding-markers</item>\n    <item>folding-preview</item>                          <!-- Since KTextEditor 5.24 -->\n    <item>icon-border</item>\n    <item>indent-pasted-text</item>                       <!-- Since KDE 4.11 -->\n    <item>keep-extra-spaces</item>\n    <item>line-numbers</item>\n    <item>newline-at-eof</item>                           <!-- Since KDE 4.9 -->\n    <item>overwrite-mode</item>\n    <item>persistent-selection</item>\n    <!-- NOTE Deprecated since KDE 4.10 -->\n    <!-- <item>remove-trailing-space</item> -->\n    <item>replace-tabs-save</item>\n    <item>replace-tabs</item>\n    <item>replace-trailing-space-save</item>\n    <item>smart-home</item>\n    <item>scrollbar-minimap</item>                         <!-- Since KTextEditor 5.24 -->\n    <item>scrollbar-preview</item>                         <!-- Since KTextEditor 5.24 -->\n    <item>space-indent</item>\n    <item>show-tabs</item>\n    <item>show-trailing-spaces</item>                     <!-- NOTE Since KDE 4.?? -->\n    <item>tab-indents</item>\n    <item>word-wrap</item>\n    <item>wrap-cursor</item>\n  </list>\n\n  <list name=\"True\">\n    <item>on</item>\n    <item>true</item>\n    <item>1</item>\n  </list>\n\n  <list name=\"False\">\n    <item>off</item>\n    <item>false</item>\n    <item>0</item>\n  </list>\n\n  <list name=\"Integrals\">\n    <item>auto-center-lines</item>\n    <item>font-size</item>\n    <item>indent-mode</item>\n    <item>indent-width</item>\n    <item>tab-width</item>\n    <item>undo-steps</item>\n    <item>word-wrap-column</item>\n  </list>\n\n  <list name=\"Strings\">\n    <item>background-color</item>\n    <item>bracket-highlight-color</item>\n    <item>current-line-color</item>\n    <item>default-dictionary</item>\n    <item>encoding</item>                                 <!-- NOTE Since KDE 4.?? -->\n    <item>eol</item>                                      <!-- Valid settings are unix, mac and dos -->\n    <item>end-of-line</item>                              <!-- Valid settings are unix, mac and dos -->\n    <item>font</item>\n    <item>hl</item>\n    <item>icon-bar-color</item>\n    <item>mode</item>                                     <!-- NOTE Since KDE 4.?? -->\n    <item>scheme</item>\n    <item>selection-color</item>\n    <item>syntax</item>\n    <item>word-wrap-marker-color</item>\n  </list>\n\n  <list name=\"RemoveSpaces\">\n    <item>remove-trailing-spaces</item>\n  </list>\n\n  <list name=\"RemoveSpacesOptions\">\n    <item>0</item>\n    <item>-</item>\n    <item>none</item>\n\n    <item>modified</item>\n    <item>mod</item>\n    <item>+</item>\n    <item>1</item>\n\n    <item>all</item>\n    <item>*</item>\n    <item>2</item>\n  </list>\n\n  <contexts>\n    <context name=\"Normal\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      <DetectSpaces />\n      <keyword String=\"ModelineStartKeyword\" context=\"Modeline\" attribute=\"Keyword\" />\n      <RegExpr String=\"kate-(mimetype|wildcard)\\(.*\\):\" context=\"Modeline\" attribute=\"Keyword\" />\n    </context>\n\n    <context name=\"Modeline\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      <DetectSpaces />\n      <keyword String=\"Booleans\" context=\"Booleans\" attribute=\"Variable\" />\n      <keyword String=\"Integrals\" context=\"Integrals\" attribute=\"Variable\" />\n      <keyword String=\"Strings\" context=\"Strings\" attribute=\"Variable\" />\n      <keyword String=\"RemoveSpaces\" context=\"RemoveSpaces\" attribute=\"Variable\" />\n      <LineContinue context=\"#pop\" />\n    </context>\n\n    <context name=\"Booleans\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      <DetectSpaces />\n      <keyword String=\"True\" attribute=\"Option ON\" context=\"#stay\" />\n      <keyword String=\"False\" attribute=\"Option OFF\" context=\"#stay\" />\n      <DetectChar char=\"&end;\" context=\"#pop\" attribute=\"Variable\" />\n      <LineContinue context=\"#pop\" />\n    </context>\n\n    <context name=\"Integrals\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      <DetectSpaces />\n      <Int attribute=\"Number\" context=\"#stay\" />\n      <DetectChar char=\"&end;\" context=\"#pop\" attribute=\"Variable\" />\n      <LineContinue context=\"#pop\" />\n    </context>\n\n    <context name=\"Strings\" attribute=\"String\" lineEndContext=\"#pop\">\n      <DetectSpaces />\n      <RegExpr String=\"[^&end;&space;]\" context=\"#stay\" />\n      <DetectChar char=\"&end;\" context=\"#pop\" attribute=\"Variable\" />\n      <LineContinue context=\"#pop\" />\n    </context>\n\n    <context name=\"RemoveSpaces\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      <DetectSpaces />\n      <keyword String=\"RemoveSpacesOptions\" attribute=\"Value\" context=\"#pop!RemoveSpacesEnd\" />\n      <DetectChar char=\"&end;\" context=\"#pop\" attribute=\"Variable\" />\n      <LineContinue context=\"#pop\" />\n    </context>\n    <context name=\"RemoveSpacesEnd\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      <DetectChar char=\"&end;\" context=\"#pop\" attribute=\"Variable\" />\n    </context>\n\n  </contexts>\n\n  <itemDatas>\n    <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"true\" />\n    <itemData name=\"Keyword\" defStyleNum=\"dsAnnotation\" spellChecking=\"false\" />\n    <itemData name=\"Variable\" defStyleNum=\"dsCommentVar\" spellChecking=\"false\" />\n    <itemData name=\"Number\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n    <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n    <itemData name=\"Value\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n    <itemData name=\"Option ON\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n    <itemData name=\"Option OFF\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n  </itemDatas>\n\n</highlighting>\n\n<general>\n  <keywords casesensitive=\"1\" weakDeliminator=\":-+*\" />\n</general>\n\n</language>\n<!-- kate: indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/modula-2-iso-only.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Modula-2 (ISO only)\" mimetype=\"text/x-modula2\" version=\"1\"\n  kateversion=\"2.2\" section=\"Sources\" priority=\"3\" extensions=\"*.mod;*.def\"\n  casesensitive=\"1\"  author=\"B. Kowarsch (trijezdci@github)\"  license=\"MIT\">\n<!--\n  *****************************************************************************\n  ISO Modula-2 syntax highlighting profile for Kate\n\n  Copyright (C) 2018 Modula-2 Software Foundation\n\n  Licensed under the MIT license <https://opensource.org/licenses/MIT>\n\n  This profile covers ISO Modula-2 (ISO 10514-1) by ISO/IEC/TC1/SC22/WG13.\n\n  Since standard specifications from ISO are not available publicly free\n  of charge and the fees to obtain copies is quite high, references to a\n  summary by Excelsior LLC are given in this profile.\n\n  A list of ISO Modula-2 keywords can be found at:\n\n  https://www.excelsior-usa.com/doc/xds/isom202.html#5\n\n  In ISO Modula-2 terminology there are two kinds of built-in identifiers:\n  (1) predefined identifiers, also called pervasive identifiers or simply\n  pervasives, and (2) identifiers that are provided by a built-in module,\n  called SYSTEM.  There is no terminology for the latter group.\n\n  A list of pervasives can be found at:\n\n  https://www.excelsior-usa.com/doc/xds/isom203.html#194\n\n  Identifiers provided by built-in module SYSTEM are given at:\n\n  https://www.excelsior-usa.com/doc/xds/isom204.html#306\n\n  Procedures ALLOCATE and DEALLOCATE to which macros NEW and DISPOSE resolve\n  are given under the subsections for procedures NEW and DISPOSE. Although\n  the implementations of ALLOCATE and DEALLOCATE are library supplied, their\n  identifiers are hardcoded into the language.  For the purpose of syntax\n  highlighting, they should therefore  be treated as built-in identifiers.\n  Identifiers exported by built-in module SYSTEM are given in PIM4, page 121.\n\n  In ISO Modula-2 terminology, there are two kinds of procedures: those that\n  return a result in their own name, and those that do not.  When necessary to\n  differentiate between them, the former are called function procedures and\n  the latter proper procedures.  For this reason, both function and procedure\n  identifiers are listed together under \"procedures\" in this profile.\n\n  Some ISO Modula-2 compilers implemented additional built-in types, most\n  notably LONGCARD, LONGINT, SHORTCARD and SHORTINT.  However, these types are\n  not part of the ISO Modula-2 language definition and consequently they are\n  not recognised as built-in identifiers in this profile.\n  *****************************************************************************\n-->\n  <highlighting>\n    <list name=\"workaround\">\n      <!-- BUG: Kate ignores first entry in context 'Normal' -->\n      <!-- WORKAROUND: Use the name of this dummy list as first entry -->\n      <item>???</item> <!-- use '???' in source to test/verify this bug -->\n    </list>\n\n    <!-- KeyWords -->\n    <list name=\"keywords\">\n      <item>AND</item>\n      <item>ARRAY</item>\n      <item>BEGIN</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CONST</item>\n      <item>DEFINITION</item>\n      <item>DIV</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXIT</item>\n      <item>EXCEPT</item>\n      <item>EXPORT</item>\n      <item>FINALLY</item>\n      <item>FOR</item>\n      <item>FORWARD</item>\n      <item>FROM</item>\n      <item>IF</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPORT</item>\n      <item>IN</item>\n      <item>LOOP</item>\n      <item>MOD</item>\n      <item>MODULE</item>\n      <item>NOT</item>\n      <item>OF</item>\n      <item>OR</item>\n      <item>PACKEDSET</item>\n      <item>POINTER</item>\n      <item>PROCEDURE</item>\n      <item>QUALIFIED</item>\n      <item>RECORD</item>\n      <item>REM</item>\n      <item>REPEAT</item>\n      <item>RETRY</item>\n      <item>RETURN</item>\n      <item>SET</item>\n      <item>THEN</item>\n      <item>TO</item>\n      <item>TYPE</item>\n      <item>UNTIL</item>\n      <item>VAR</item>\n      <item>WHILE</item>\n      <item>WITH</item>\n    </list>\n\n    <!-- Built-in Constant Identifiers -->\n    <list name=\"constants\">\n      <item>FALSE</item>\n      <item>INTERRUPTIBLE</item>\n      <item>NIL</item>\n      <item>TRUE</item>\n      <item>UNINTERRUPTIBLE</item>\n    </list>\n\n    <!-- Built-in Type Identifiers -->\n    <list name=\"types\">\n      <!-- Pervasives -->\n      <item>BOOLEAN</item>\n      <item>BITSET</item>\n      <item>CARDINAL</item>\n      <item>COMPLEX</item>\n      <item>CHAR</item>\n      <item>INTEGER</item>\n      <item>LONGCOMPLEX</item>\n      <item>LONGREAL</item>\n      <item>PROC</item>\n      <item>PROTECTION</item>\n      <item>REAL</item>\n    </list>\n\n    <!-- Built-in Procedure Identifiers -->\n    <list name=\"procedures\">\n      <!-- Pervasives -->\n      <item>ABS</item>\n      <item>CAP</item>\n      <item>CHR</item>\n      <item>CMPLX</item>\n      <item>DEC</item>\n      <item>EXCL</item>\n      <item>FLOAT</item>\n      <item>HALT</item>\n      <item>HIGH</item>\n      <item>IM</item>\n      <item>INC</item>\n      <item>INCL</item>\n      <item>INT</item>\n      <item>LENGTH</item>\n      <item>LFLOAT</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>ODD</item>\n      <item>ORD</item>\n      <item>RE</item>\n      <item>SIZE</item>\n      <item>TRUNC</item>\n      <item>VAL</item>\n    </list>\n\n    <!-- Built-in Macros -->\n    <list name=\"macros\">\n      <!-- NEW resolves to ALLOCATE -->\n      <item>NEW</item>\n      <item>ALLOCATE</item>\n\n      <!-- DISPOSE resolves to DEALLOCATE -->\n      <item>DISPOSE</item>\n      <item>DEALLOCATE</item>\n    </list>\n\n    <!-- Module SYSTEM -->\n    <list name=\"unsafe\">\n      <!-- Module Identifier -->\n      <item>SYSTEM</item>\n\n      <!-- Constants -->\n      <item>BITSPERLOC</item>\n      <item>BITSPERWORD</item>\n\n      <!-- Types -->\n      <item>ADDRESS</item>\n      <item>LOC</item>\n      <item>WORD</item>\n\n      <!-- Procedures -->\n      <item>ADDADR</item>\n      <item>ADR</item>\n      <item>CAST</item>\n      <item>DIFADR</item>\n      <item>MAKEADR</item>\n      <item>ROTATE</item>\n      <item>SHIFT</item>\n      <item>SUBADR</item>\n      <item>TSIZE</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Plain Source\" lineEndContext=\"#stay\" name=\"plain\">\n        <!-- BUG: first entry is ignored, leave Dummy at first position -->\n        <keyword attribute=\"Dummy\" context=\"#stay\" String=\"workaround\"/>\n\n        <!-- Keyords -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\n        <!-- Built-in Constant Identifiers -->\n        <keyword attribute=\"Const\" context=\"#stay\" String=\"constants\"/>\n\n        <!-- Built-in Type Identifiers -->\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n\n        <!-- Built-in Procedure Identifiers -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"procedures\"/>\n\n        <!-- Built-in Macro Identifiers and Translations -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"macros\"/>\n\n        <!-- Facilities from Built-in Module SYSTEM -->\n        <keyword attribute=\"Unsafe\" context=\"#stay\" String=\"unsafe\"/>\n\n        <!-- Base-16 Integer Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"0[0-9A-F]*H\"/>\n\n        <!-- Base-8 Integers and Character Code Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"[0-7]+[BC]\"/>\n\n        <!-- Real Number Literals -->\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Decimal Integer Literals -->\n        <Int attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Start of Double-Quoted String Literal -->\n        <DetectChar attribute=\"String\" context=\"DoubleQuotedString\" char=\"&quot;\" />\n\n        <!-- Start of Single-Quoted String Literal -->\n        <DetectChar attribute=\"String\" context=\"SingleQuotedString\" char=\"'\" />\n\n        <!-- Start of Modula-2 Dialect Tags -->\n        <StringDetect attribute=\"DialectTag\" context=\"InDialectTag\" String=\"(*!\"/>\n\n        <!-- Start of Pragma -->\n        <Detect2Chars attribute=\"Pragma\" context=\"InPragma\" char=\"&lt;\" char1=\"*\"/>\n\n        <!-- Start of Comment -->\n        <Detect2Chars attribute=\"Comment\"\n          context=\"InComment\" char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n      </context>\n\n      <!-- End of Double-Quoted String Literal -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"DoubleQuotedString\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <!-- End of Single-Quoted String Literal -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"SingleQuotedString\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- End of Dialet Tag -->\n      <context attribute=\"DialectTag\" lineEndContext=\"#pop\" name=\"InDialectTag\">\n        <Detect2Chars attribute=\"DialectTag\" context=\"#pop\" char=\"*\" char1=\")\"/>\n      </context>\n\n      <!-- End of Pragma -->\n      <context attribute=\"Pragma\" lineEndContext=\"#stay\" name=\"InPragma\">\n        <Detect2Chars attribute=\"Pragma\" context=\"#pop\" char=\"*\" char1=\"&gt;\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"InComment\">\n        <!-- Start of nested Comment -->\n        <Detect2Chars attribute=\"Comment\"\n        context=\"InComment\" char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n\n        <!-- End of Comment -->\n        <Detect2Chars attribute=\"Comment\"\n        context=\"#pop\" char=\"*\" char1=\")\" endRegion=\"FoldableComment\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <!-- Style for Plain Source Text -->\n      <itemData name=\"Plain Source\"\n        defStyleNum=\"dsNormal\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Reserved Words -->\n      <itemData name=\"Keyword\"\n        defStyleNum=\"dsKeyword\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Constant Identifiers -->\n      <itemData name=\"Const\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Type Identifiers -->\n      <itemData name=\"Type\"\n        defStyleNum=\"dsDataType\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Procedure Identifiers -->\n      <itemData name=\"Builtin\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\" />\n\n      <!--  Style for Facilities from Module SYSTEM  -->\n      <itemData name=\"Unsafe\"\n        defStyleNum=\"dsWarning\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Number Literals -->\n      <itemData name=\"Number\"\n        defStyleNum=\"dsDecVal\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Quoted Literals -->\n      <itemData name=\"String\"\n        defStyleNum=\"dsString\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Dialect Tags -->\n      <itemData name=\"DialectTag\"\n        defStyleNum=\"dsComment\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Pragmas -->\n      <itemData name=\"Pragma\"\n        defStyleNum=\"dsPreprocessor\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Comments -->\n      <itemData name=\"Comment\"\n        defStyleNum=\"dsComment\" bold=\"0\" italic=\"1\" />\n\n      <!-- Dummy style for testing -->\n      <itemData name=\"Dummy\" defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/modula-2-pim-only.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Modula-2 (PIM only)\" mimetype=\"text/x-modula2\" version=\"1\"\n  kateversion=\"2.2\" section=\"Sources\" priority=\"4\" extensions=\"*.mod;*.def\"\n  casesensitive=\"1\"  author=\"B. Kowarsch (trijezdci@github)\"  license=\"MIT\">\n<!--\n  *****************************************************************************\n  PIM Modula-2 syntax highlighting profile for Kate\n\n  Copyright (C) 2018 Modula-2 Software Foundation\n\n  Licensed under the MIT license <https://opensource.org/licenses/MIT>\n\n  The authoritative reference for classic Modula-2 is Niklaus Wirth's monograph\n  \"Programming in Modula-2\" published by Springer, Heidelberg, commonly known\n  as PIM.  The most recent edition is the 4th edition, commonly known as PIM4.\n\n  In Modula-2 terminology, keywords are called reserved words.  A list of\n  reserved words can be found in PIM4, page 135, at the end of section 3.\n\n  There are three kinds of built-in identifiers: (1) standard identifiers, also\n  called pervasive identifiers or simply pervasives, (2) built-in macros and\n  (3) identifiers provided by a built-in module called SYSTEM.  There is no\n  terminology for the latter group.\n\n  A list of pervasives can be found in PIM4 page 136, at the end of section 4.\n  Built-in macros NEW and DISPOSE are given in PIM4 at the bottom of page 77.\n  Procedures ALLOCATE and DEALLOCATE to which macros NEW and DISPOSE resolve\n  are not given in PIM4 but have been implemented in all of Wirth's Modula-2\n  compilers, then followed by all other compiler implementations.  Although\n  the implementations of ALLOCATE and DEALLOCATE are library supplied, their\n  identifiers are hardcoded into the language.  For the purpose of syntax\n  highlighting, they should therefore  be treated as built-in identifiers.\n  Identifiers exported by built-in module SYSTEM are given in PIM4, page 121.\n\n  In Modula-2 terminology, there are two kinds of procedures: those that return\n  a result in their own name, and those that do not.  When it is necessary to\n  differentiate, the former are called function procedures and the latter\n  proper procedures.  For this reason, both function and procedure identifiers\n  are listed together under a single group \"procedures\" in this profile.\n\n  Some classic Modula-2 compilers implemented additional built-in types, most\n  notably BYTE, LONGCARD, SHORTCARD and SHORTINT.  However, these types are\n  not part of the classical Modula-2 language definition and consequently\n  they are not recognised as built-in identifiers in this profile.\n  *****************************************************************************\n-->\n  <highlighting>\n    <list name=\"workaround\">\n      <!-- BUG: Kate ignores first entry in context 'Normal' -->\n      <!-- WORKAROUND: Use the name of this dummy list as first entry -->\n      <item>???</item> <!-- use '???' in source to test/verify this bug -->\n    </list>\n\n    <!-- Reserved Words -->\n    <list name=\"keywords\">\n      <item>AND</item>\n      <item>ARRAY</item>\n      <item>BEGIN</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CONST</item>\n      <item>DEFINITION</item>\n      <item>DIV</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXIT</item>\n      <item>EXPORT</item>\n      <item>FOR</item>\n      <item>FROM</item>\n      <item>IF</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPORT</item>\n      <item>IN</item>\n      <item>LOOP</item>\n      <item>MOD</item>\n      <item>MODULE</item>\n      <item>NOT</item>\n      <item>OF</item>\n      <item>OR</item>\n      <item>POINTER</item>\n      <item>PROCEDURE</item>\n      <item>QUALIFIED</item>\n      <item>RECORD</item>\n      <item>REPEAT</item>\n      <item>RETURN</item>\n      <item>SET</item>\n      <item>THEN</item>\n      <item>TO</item>\n      <item>TYPE</item>\n      <item>UNTIL</item>\n      <item>VAR</item>\n      <item>WHILE</item>\n      <item>WITH</item>\n    </list>\n\n    <!-- Built-in Constant Identifiers -->\n    <list name=\"constants\">\n      <item>FALSE</item>\n      <item>NIL</item>\n      <item>TRUE</item>\n    </list>\n\n    <!-- Built-in Type Identifiers -->\n    <list name=\"types\">\n      <!-- Pervasives -->\n      <item>BOOLEAN</item>\n      <item>BITSET</item>\n      <item>CARDINAL</item>\n      <item>CHAR</item>\n      <item>INTEGER</item>\n      <item>LONGINT</item>\n      <item>LONGREAL</item>\n      <item>PROC</item>\n      <item>REAL</item>\n    </list>\n\n    <!-- Built-in Procedure Identifiers -->\n    <list name=\"procedures\">\n      <!-- Pervasives -->\n      <item>ABS</item>\n      <item>CAP</item>\n      <item>CHR</item>\n      <item>DEC</item>\n      <item>EXCL</item>\n      <item>FLOAT</item>\n      <item>HALT</item>\n      <item>HIGH</item>\n      <item>INC</item>\n      <item>INCL</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>ODD</item>\n      <item>ORD</item>\n      <item>SIZE</item>\n      <item>TRUNC</item>\n      <item>VAL</item>\n    </list>\n\n    <!-- Built-in Macros -->\n    <list name=\"macros\">\n      <!-- NEW resolves to ALLOCATE -->\n      <item>NEW</item>\n      <item>ALLOCATE</item>\n\n      <!-- DISPOSE resolves to DEALLOCATE -->\n      <item>DISPOSE</item>\n      <item>DEALLOCATE</item>\n    </list>\n\n    <!-- Module SYSTEM -->\n    <list name=\"unsafe\">\n      <!-- Module Identifier -->\n      <item>SYSTEM</item>\n\n      <!-- Types -->\n      <item>ADDRESS</item>\n      <item>PROCESS</item>\n      <item>WORD</item>\n\n      <!-- Procedures -->\n      <item>ADR</item>\n      <item>NEWPROCESS</item>\n      <item>TRANSFER</item>\n      <item>TSIZE</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Plain Source\" lineEndContext=\"#stay\" name=\"plain\">\n        <!-- BUG: first entry is ignored, leave Dummy at first position -->\n        <keyword attribute=\"Dummy\" context=\"#stay\" String=\"workaround\"/>\n\n        <!-- Reserved Words -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\n        <!-- Built-in Constant Identifiers -->\n        <keyword attribute=\"Const\" context=\"#stay\" String=\"constants\"/>\n\n        <!-- Built-in Type Identifiers -->\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n\n        <!-- Built-in Procedure Identifiers -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"procedures\"/>\n\n        <!-- Built-in Macro Identifiers and Translations -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"macros\"/>\n\n        <!-- Facilities from Built-in Module SYSTEM -->\n        <keyword attribute=\"Unsafe\" context=\"#stay\" String=\"unsafe\"/>\n\n        <!-- Base-16 Integer Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"0[0-9A-F]*H\"/>\n\n        <!-- Base-8 Integers and Character Code Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"[0-7]+[BC]\"/>\n\n        <!-- Real Number Literals -->\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Decimal Integer Literals -->\n        <Int attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Start of Double-Quoted String Literal -->\n        <DetectChar attribute=\"String\" context=\"DoubleQuotedString\" char=\"&quot;\" />\n\n        <!-- Start of Single-Quoted String Literal -->\n        <DetectChar attribute=\"String\" context=\"SingleQuotedString\" char=\"'\" />\n\n        <!-- Start of Modula-2 Dialect Tag -->\n        <StringDetect attribute=\"DialectTag\" context=\"InDialectTag\" String=\"(*!\"/>\n\n        <!-- Start of Pragma -->\n        <StringDetect attribute=\"Pragma\" context=\"InPragma\" String=\"(*$\"/>\n\n        <!-- Start of Comment -->\n        <Detect2Chars attribute=\"Comment\"\n          context=\"InComment\" char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n      </context>\n\n      <!-- End of Double-Quoted String Literal -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"DoubleQuotedString\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <!-- End of Single-Quoted String Literal -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"SingleQuotedString\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- End of Dialect Tag -->\n      <context attribute=\"DialectTag\" lineEndContext=\"#pop\" name=\"InDialectTag\">\n        <Detect2Chars attribute=\"DialectTag\" context=\"#pop\" char=\"*\" char1=\")\"/>\n      </context>\n\n      <!-- End of Pragma -->\n      <context attribute=\"Pragma\" lineEndContext=\"#stay\" name=\"InPragma\">\n        <Detect2Chars attribute=\"Pragma\" context=\"#pop\" char=\"*\" char1=\")\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"InComment\">\n        <!-- Start of nested Comment -->\n        <Detect2Chars attribute=\"Comment\"\n        context=\"InComment\" char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n        <!-- End of Comment -->\n        <Detect2Chars attribute=\"Comment\"\n        context=\"#pop\" char=\"*\" char1=\")\" endRegion=\"FoldableComment\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <!-- Style for Plain Source Text -->\n      <itemData name=\"Plain Source\"\n        defStyleNum=\"dsNormal\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Reserved Words -->\n      <itemData name=\"Keyword\"\n        defStyleNum=\"dsKeyword\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Constant Identifiers -->\n      <itemData name=\"Const\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Type Identifiers -->\n      <itemData name=\"Type\"\n        defStyleNum=\"dsDataType\" bold=\"1\" italic=\"0\" />\n\n      <!--  Style for Facilities from Module SYSTEM  -->\n      <itemData name=\"Unsafe\"\n        defStyleNum=\"dsWarning\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Built-in Procedure Identifiers -->\n      <itemData name=\"Builtin\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Number Literals -->\n      <itemData name=\"Number\"\n        defStyleNum=\"dsDecVal\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Quoted Literals -->\n      <itemData name=\"String\"\n        defStyleNum=\"dsString\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Dialect Tags -->\n      <itemData name=\"DialectTag\"\n        defStyleNum=\"dsComment\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Pragmas -->\n      <itemData name=\"Pragma\"\n        defStyleNum=\"dsPreprocessor\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Comments -->\n      <itemData name=\"Comment\"\n        defStyleNum=\"dsComment\" bold=\"0\" italic=\"1\" />\n\n      <!-- Dummy style for testing -->\n      <itemData name=\"Dummy\" defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/modula-2-r10-only.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Modula-2 (R10 only)\" mimetype=\"text/x-modula2\" version=\"1\"\n  kateversion=\"2.2\" section=\"Sources\" priority=\"2\" extensions=\"*.mod;*.def\"\n  casesensitive=\"1\"  author=\"B. Kowarsch (trijezdci@github)\"  license=\"MIT\">\n<!--\n  *****************************************************************************\n  Modula-2 R10 syntax highlighting profile for Kate\n\n  Copyright (C) 2018 Modula-2 Software Foundation\n\n  Licensed under the MIT license <https://opensource.org/licenses/MIT>\n\n  A reference for the Modula-2 R10 BSK subset is available online at:\n\n  https://github.com/m2sf/m2bsk/wiki/Language-Description\n\n  In Modula-2 terminology, keywords are called reserved words.\n\n  https://github.com/m2sf/m2bsk/wiki/Language-Description#reserved-words.\n\n  Additional reserved words are available in the fulls spec for which the\n  specification is outdated and being revised. The EBNF is available at:\n\n  https://github.com/m2sf/M2-R10-Syntax-Diagrams/blob/master/m2r10-grammar.gll\n\n  There are two kinds of built-in identifiers:\n\n  (1) Predefined identifiers, also known as pervasives are listed at:\n\n  https://github.com/m2sf/m2bsk/wiki/Language-Description#predefined-identifiers\n\n  (2) Identifiers provided by built-in Module UNSAFE are listed at:\n\n  https://github.com/m2sf/m2bsk/wiki/Language-Description#low-level-facilities\n\n  In Modula-2 terminology, there are two kinds of procedures: those that return\n  a result in their own name, and those that do not.  When it is necessary to\n  differentiate, the former are called function procedures and the latter\n  proper procedures.  For this reason, both function and procedure identifiers\n  are listed together under a single group \"procedures\" in this profile.\n  *****************************************************************************\n-->\n  <highlighting>\n    <list name=\"workaround\">\n      <!-- BUG: Kate ignores first entry in context 'Normal' -->\n      <!-- WORKAROUND: Use the name of this dummy list as first entry -->\n      <item>???</item> <!-- use '???' in source to test/verify this bug -->\n    </list>\n\n    <!-- Reserved Words -->\n    <list name=\"keywords\">\n      <item>ALIAS</item>\n      <item>AND</item>\n      <item>ARGLIST</item>\n      <item>ARRAY</item>\n      <item>BEGIN</item>\n      <item>BLUEPRINT</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CONST</item>\n      <item>COPY</item>\n      <item>DEFINITION</item>\n      <item>DIV</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXIT</item>\n      <item>FOR</item>\n      <item>FROM</item>\n      <item>GENLIB</item>\n      <item>IF</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPORT</item>\n      <item>IN</item>\n      <item>LOOP</item>\n      <item>MOD</item>\n      <item>MODULE</item>\n      <item>NEW</item>\n      <item>NOT</item>\n      <item>OF</item>\n      <item>OPAQUE</item>\n      <item>OR</item>\n      <item>POINTER</item>\n      <item>PROCEDURE</item>\n      <item>READ</item>\n      <item>RECORD</item>\n      <item>REFERENTIAL</item>\n      <item>RELEASE</item>\n      <item>REPEAT</item>\n      <item>RETAIN</item>\n      <item>RETURN</item>\n      <item>SET</item>\n      <item>THEN</item>\n      <item>TO</item>\n      <item>TYPE</item>\n      <item>UNTIL</item>\n      <item>VAR</item>\n      <item>WHILE</item>\n      <item>WRITE</item>\n      <item>YIELD</item>\n    </list>\n\n    <!-- Built-in Constant Identifiers -->\n    <list name=\"constants\">\n      <item>FALSE</item>\n      <item>NIL</item>\n      <item>TRUE</item>\n    </list>\n\n    <!-- Built-in Type Identifiers -->\n    <list name=\"types\">\n      <!-- Pervasives -->\n      <item>BOOLEAN</item>\n      <item>CARDINAL</item>\n      <item>CHAR</item>\n      <item>INTEGER</item>\n      <item>LONGCARD</item>\n      <item>LONGINT</item>\n      <item>LONGREAL</item>\n      <item>OCTET</item>\n      <item>REAL</item>\n      <item>UNICHAR</item>\n    </list>\n\n    <!-- Built-in Procedure Identifiers -->\n    <list name=\"procedures\">\n      <!-- Pervasives -->\n      <item>ABS</item>\n      <item>APPEND</item>\n      <item>CAPACITY</item>\n      <item>CHR</item>\n      <item>COUNT</item>\n      <item>ENTIER</item>\n      <item>INSERT</item>\n      <item>LENGTH</item>\n      <item>LOG2</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>ODD</item>\n      <item>ORD</item>\n      <item>POW2</item>\n      <item>PRED</item>\n      <item>PTR</item>\n      <item>REMOVE</item>\n      <item>SGN</item>\n      <item>SUCC</item>\n    </list>\n\n    <!-- Built-in Macros -->\n    <list name=\"macros\">\n      <item>TLIMIT</item>\n      <item>TMAX</item>\n      <item>TMIN</item>\n      <item>TSIZE</item>\n    </list>\n\n    <!-- Module UNSAFE -->\n    <list name=\"unsafe\">\n      <!-- Reserved Words -->\n      <item>CAST</item>\n\n      <!-- Module Identifier -->\n      <item>UNSAFE</item>\n\n      <!-- Constants -->\n      <item>BitsPerAddress</item>\n      <item>BitsPerByte</item>\n      <item>BytesPerWord</item>\n      <item>BytesPerLongWord</item>\n\n      <!-- Types -->\n      <item>ADDRESS</item>\n      <item>BYTE</item>\n      <item>LONGWORD</item>\n      <item>OCTETSEQ</item>\n      <item>WORD</item>\n\n      <!-- Procedures -->\n      <item>ADD</item>\n      <item>ADR</item>\n      <item>BIT</item>\n      <item>BWAND</item>\n      <item>BWNOT</item>\n      <item>BWOR</item>\n      <item>HALT</item>\n      <item>SETBIT</item>\n      <item>SHL</item>\n      <item>SHR</item>\n      <item>SUB</item>\n\n      <!-- Macros -->\n      <item>NOP</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Plain Source\" lineEndContext=\"#stay\" name=\"plain\">\n        <!-- BUG: first entry is ignored, leave Dummy at first position -->\n        <keyword attribute=\"Dummy\" context=\"#stay\" String=\"workaround\"/>\n\n        <!-- Reserved Words -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\n        <!-- Built-in Constant Identifiers -->\n        <keyword attribute=\"Const\" context=\"#stay\" String=\"constants\"/>\n\n        <!-- Built-in Type Identifiers -->\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n\n        <!-- Built-in Procedure Identifiers -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"procedures\"/>\n\n        <!-- Built-in Macro Identifiers and Translations -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"macros\"/>\n\n        <!-- Facilities from Built-in Module UNSAFE -->\n        <keyword attribute=\"Unsafe\" context=\"#stay\" String=\"unsafe\"/>\n\n        <!-- Base-2 Integer Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\"\n          String=\"0b([01]+('[01]+)?)+\"/>\n\n        <!-- Base-16 Integer and Character Code Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\"\n          String=\"0[ux]([0-9A-F]+('[0-9A-F]+)?)+\"/>\n\n        <!-- Real Number Literals -->\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Decimal Integer Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\"\n          String=\"([1-9][0-9]*('[0-9]+)*)|0\"/>\n\n        <!-- Start of Double-Quoted String Literal -->\n        <DetectChar attribute=\"String\" context=\"DoubleQuotedString\" char=\"&quot;\"/>\n\n        <!-- Start of Single-Quoted String Literal -->\n        <DetectChar attribute=\"String\" context=\"SingleQuotedString\" char=\"'\"/>\n\n        <!-- Start of Modula-2 Dialect Tag -->\n        <StringDetect attribute=\"DialectTag\" context=\"InDialectTag\" String=\"(*!\"/>\n\n        <!-- Start of Pragma -->\n        <Detect2Chars attribute=\"Pragma\" context=\"InPragma\" char=\"&lt;\" char1=\"*\"/>\n\n        <!-- Start of Line Comment -->\n        <DetectChar attribute =\"Comment\" context=\"LineComment\" char=\"!\"/>\n\n        <!-- Start of Block Comment -->\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\"\n          char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n      </context>\n\n      <!-- End of Double-Quoted String Literal -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"DoubleQuotedString\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <!-- End of Single-Quoted String Literal -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"SingleQuotedString\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- End of Dialect Tag -->\n      <context attribute=\"DialectTag\" lineEndContext=\"#pop\" name=\"InDialectTag\">\n        <Detect2Chars attribute=\"DialectTag\" context=\"#pop\" char=\"*\" char1=\")\"/>\n      </context>\n\n      <!-- End of Pragma -->\n      <context attribute=\"Pragma\" lineEndContext=\"#stay\" name=\"InPragma\">\n        <Detect2Chars attribute=\"Pragma\" context=\"#pop\" char=\"*\" char1=\"&gt;\"/>\n      </context>\n\n      <!-- End of Line Comment -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"LineComment\">\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"BlockComment\">\n        <!-- Start of nessted Block Comment -->\n        <Detect2Chars attribute=\"Comment\"\n        context=\"BlockComment\" char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n\n        <!-- End of Block Comment -->\n        <Detect2Chars attribute=\"Comment\"\n        context=\"#pop\" char=\"*\" char1=\")\" endRegion=\"FoldableComment\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <!-- Style for Plain Source Text -->\n      <itemData name=\"Plain Source\"\n        defStyleNum=\"dsNormal\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Reserved Words -->\n      <itemData name=\"Keyword\"\n        defStyleNum=\"dsKeyword\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Constant Identifiers -->\n      <itemData name=\"Const\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Type Identifiers -->\n      <itemData name=\"Type\"\n        defStyleNum=\"dsDataType\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Built-in Procedure Identifiers -->\n      <itemData name=\"Builtin\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Facilities from Module UNSAFE -->\n      <itemData name=\"Unsafe\"\n        defStyleNum=\"dsWarning\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Number Literals -->\n      <itemData name=\"Number\"\n        defStyleNum=\"dsDecVal\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Quoted Literals -->\n      <itemData name=\"String\"\n        defStyleNum=\"dsString\" bold=\"0\" italic=\"0\" />\n\n      <!-- Style for Dialect Tags -->\n      <itemData name=\"DialectTag\"\n        defStyleNum=\"dsComment\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Pragmas -->\n      <itemData name=\"Pragma\"\n        defStyleNum=\"dsPreprocessor\" bold=\"1\" italic=\"0\" />\n\n      <!-- Style for Comments -->\n      <itemData name=\"Comment\"\n        defStyleNum=\"dsComment\" bold=\"0\" italic=\"1\" />\n\n      <!-- Dummy style for testing -->\n      <itemData name=\"Dummy\" defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"!\" />\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/modula-2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Modula-2\" mimetype=\"text/x-modula2\" version=\"5\"\n  kateversion=\"2.2\" section=\"Sources\" priority=\"5\" extensions=\"*.mod;*.def\"\n  casesensitive=\"1\"  author=\"B. Kowarsch (trijezdci@github)\"  license=\"MIT\">\n<!--\n  *****************************************************************************\n  Multi-Dialect Modula-2 syntax highlighting profile for Kate\n\n  Copyright (C) 2018 Modula-2 Software Foundation\n\n  Licensed under the MIT license <https://opensource.org/licenses/MIT>\n\n  This file should be placed in /usr/share.org.kde.syntax-highlighting/syntax/.\n\n  1. Dialect Support\n\n  This profile covers the following Modula-2 dialects:\n\n  (1) PIM Modula-2 (Wirth, 1985)\n  (2) ISO Modula-2 (ISO 10514-1)\n  (3) Modula-2 R10 (Kowarsch & Sutcliffe, 2010)\n\n  The default context  recognises reserved words and built-in identifiers that\n  are common to all dialects and tags them accordingly for highlighting.\n\n  1.2 Dialect Disambiguation\n\n  In order to disambiguate dialects, the profile also recognises entities that\n  are indicative of a specific dialect, tags them accordingly for highlighting\n  and switches the context to the dialect of which the entity is indicative.\n\n  However, this approach does NOT prevent  mis-identification  as it is always\n  possible  that a  user or library defined identifier  matches an entity that\n  is a reserved word or built-in identifier in another dialect.\n\n  It is therefore  advisable  to place  dialect tags  into the top of Modula-2\n  source files.\n\n  1.3 Dialect Tags\n\n  A dialect tag is a specially formatted comment that specifies the dialect in\n  use.  The profile recognises the following dialect tags:\n\n  (*!m2pim*) specifies the PIM dialect\n  (*!m2iso*) specifies the ISO dialect\n  (*!m2r10*) specifies the R10 dialect\n\n  Dialect tags  may  also include a  compiler extension suffix  following  the\n  dialect identifier  and preceded by '+'  to indicate  the  use  of  compiler\n  specific language extensions.  Such suffixes are recognised but ignored.\n\n  Using a dialect tag  guarantees  that the profile identifies the source file\n  correctly.  Attention: No whitespace is permitted within a dialect tag.\n\n  These dialect tags are also  recognised  by  Emacs, Vim/vi  and the Pygments\n  source code rendering framework.  Support in other editors and frameworks is\n  being added over time.\n\n  2. Classification\n\n  2.1 Reserved Words\n\n  In Modula-2 terminology, keywords are called reserved words.  Reserved words\n  are tagged \"Keyword\" regardless of their kind or purpose.\n\n  2.2 Built-in Identifiers\n\n  Modula-2 distinguishes two kinds of built-in identifiers: so called standard\n  identifiers, also called  pervasive identifiers  or simply  pervasives;  and\n  identifiers  provided by a  built-in module  for  unsafe facilities,  called\n  SYSTEM in PIM and ISO Modula-2, and UNSAFE in Modula-2 R10.\n\n  Pervasive Identifiers are tagged according to their kind as follows:\n\n  (1) Constants are tagged \"Const\"\n  (2) Types are tagged \"Type\"\n  (3) Functions, procedures and macros are tagged \"Builtin\"\n  (4) Identifiers provided by SYSTEM/UNSAFE are tagged \"Unsafe\"\n\n  The tagging of the  latter group  regardless of kind or purpose  follows the\n  Modula-2 philosophy of  making the  use of  unsafe facilities  explicit  and\n  easily identifiable within the source code in order to sensitise programmers\n  and thereby discourage and minimise their use.\n\n  2.3 Numeric Literals\n\n  There  are  three kinds of  numeric  literals: whole number  literals,  real\n  number literals  and  character code literals.  Numeric literals  are tagged\n  \"Number\" regardless of their kind.\n\n  2.4 Quoted Literals\n\n  There are  two ways to quote  a character or string: using single quotes, or\n  using double quotes.  Quoted literals  are  tagged  \"String\"  regardless  of\n  their type or kind.\n\n  2.5 Comments and Pragmas\n\n  Dialect tags, although comments, are tagged \"DialectTag\",  any other comments\n  are tagged \"Comment\",  and pragmas are tagged \"Pragma\".\n\n  2.6 Any Other Entities\n\n  Any other entities are tagged \"Plain Source\".\n\n  3. Rendering Styles\n\n  By default, the above tags/attributes are assigned styles as follows:\n\n  Keyword => dsKeyword, bold\n  Const => dsBuiltin, bold\n  Type => dsDataType, bold\n  Builtin => dsBuiltin, bold\n  Unsafe => dsWarning, bold\n  Number => dsDecVal\n  String => dsString\n  DialectTag => dsComment, bold\n  Comment => dsComment, italic\n  Pragma => dsPreprocessor, bold\n  Plain Source => dsNormal\n\n  These styles can be customised in Kate via Settings->Configure Kate...\n  *****************************************************************************\n-->\n  <highlighting>\n    <list name=\"workaround\">\n      <!-- BUG: Kate ignores first entry in first context -->\n      <!-- WORKAROUND: Use the name of this dummy list as first entry -->\n      <item>???</item> <!-- use '???' in source to test/verify this bug -->\n    </list>\n\n<!--\n  ============================================================================\n  Common Entities - Lowest Common Denominator\n  ============================================================================\n-->\n    <!-- Common Reserved Words -->\n    <list name=\"common-keywords\">\n      <item>AND</item>\n      <item>ARRAY</item>\n      <item>BEGIN</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CONST</item>\n      <item>DEFINITION</item>\n      <item>DIV</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXIT</item>\n      <item>FOR</item>\n      <item>FROM</item>\n      <item>IF</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPORT</item>\n      <item>IN</item>\n      <item>LOOP</item>\n      <item>MOD</item>\n      <item>MODULE</item>\n      <item>NOT</item>\n      <item>OF</item>\n      <item>OR</item>\n      <item>POINTER</item>\n      <item>PROCEDURE</item>\n      <item>RECORD</item>\n      <item>REPEAT</item>\n      <item>RETURN</item>\n      <item>SET</item>\n      <item>THEN</item>\n      <item>TO</item>\n      <item>TYPE</item>\n      <item>UNTIL</item>\n      <item>VAR</item>\n      <item>WHILE</item>\n    </list>\n\n    <!-- Common Pervasive Constants -->\n    <list name=\"common-constants\">\n      <item>FALSE</item>\n      <item>NIL</item>\n      <item>TRUE</item>\n    </list>\n\n    <!-- Common Pervasive Types -->\n    <list name=\"common-types\">\n      <item>BOOLEAN</item>\n      <item>CARDINAL</item>\n      <item>CHAR</item>\n      <item>INTEGER</item>\n      <item>LONGREAL</item>\n      <item>REAL</item>\n    </list>\n\n    <!-- Common Pervasive Procedures -->\n    <list name=\"common-procedures\">\n      <item>ABS</item>\n      <item>CHR</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>ODD</item>\n      <item>ORD</item>\n    </list>\n\n    <!-- Common Unsafe Facilities -->\n    <list name=\"common-unsafe\">\n      <!-- Types -->\n      <item>ADDRESS</item>\n      <item>WORD</item>\n      <!-- Procedures -->\n      <item>ADR</item>\n    </list>\n\n<!--\n  ============================================================================\n  Dialect Indicative Entities\n  ============================================================================\n-->\n<!--\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  PIM Indicators - Entities indicative of PIM Modula-2\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-->\n    <!-- There are no reswords, pervasives or builtins indicative of PIM -->\n\n    <!-- PIM-only Libraries -->\n    <list name=\"pim-only-libraries\">\n      <item>InOut</item>\n      <item>MathLib0</item>\n    </list>\n\n<!--\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  ISO Indicators - Entities indicative of ISO Modula-2\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-->\n    <!-- ISO-only Reserved Words -->\n    <list name=\"iso-only-keywords\">\n      <!--NB: FORWARD is not indicative of ISO,\n          PIM single-pass compilers also use it.-->\n      <item>EXCEPT</item>\n      <item>FINALLY</item>\n      <item>PACKEDSET</item>\n      <item>REM</item>\n      <item>RETRY</item>\n    </list>\n\n    <!-- ISO-only Pervasive Constants -->\n    <list name=\"iso-only-constants\">\n      <item>INTERRUPTIBLE</item>\n      <item>UNINTERRUPTIBLE</item>\n    </list>\n\n    <!-- ISO-only Pervasive Types -->\n    <list name=\"iso-only-types\">\n      <!--NB: COMPLEX and LONGCOMPLEX are not indicative of ISO,\n          they are also part of the R10 standard library.-->\n      <item>PROTECTION</item>\n    </list>\n\n    <!-- ISO-only Pervasive Procedures -->\n    <list name=\"iso-only-procedures\">\n      <item>CMPLX</item>\n      <item>IM</item>\n      <item>LFLOAT</item>\n      <item>RE</item>\n    </list>\n\n    <!-- ISO-only Unsafe Facilities -->\n    <list name=\"iso-only-unsafe\">\n      <!-- Constants -->\n      <item>BITSPERLOC</item>\n      <item>BITSPERWORD</item>\n      <!-- Types -->\n      <item>LOC</item>\n      <!-- Procedures -->\n      <item>ADDADR</item>\n      <item>DIFADR</item>\n      <item>MAKEADR</item>\n      <item>ROTATE</item>\n      <item>SHIFT</item>\n      <item>SUBADR</item>\n    </list>\n\n    <!-- ISO-only Libraries -->\n    <list name=\"iso-only-libraries\">\n      <item>IOConsts</item>\n      <item>IOLink</item>\n      <item>IOResult</item>\n      <item>LongIO</item>\n      <item>WholeIO</item>\n      <item>RawIO</item>\n      <item>SIOResult</item>\n      <item>SLongIO</item>\n      <item>SWholeIO</item>\n      <item>SRealIO</item>\n      <item>SRawIO</item>\n      <item>ConvTypes</item>\n      <item>RealStr</item>\n      <item>WholeStr</item>\n      <item>WholeConv</item>\n    </list>\n\n<!--\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  R10 Indicators - Entities indicative of Modula-2 R10\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-->\n    <!-- R10-only Reserved Words -->\n    <list name=\"r10-only-keywords\">\n      <item>ALIAS</item>\n      <item>ARGLIST</item>\n      <item>BLUEPRINT</item>\n      <item>COPY</item>\n      <item>GENLIB</item>\n      <item>OPAQUE</item>\n      <item>READ</item>\n      <item>REFERENTIAL</item>\n      <item>RELEASE</item>\n      <item>RETAIN</item>\n      <item>WRITE</item>\n      <item>YIELD</item>\n    </list>\n\n    <!-- R10-only Pervasive Types -->\n    <list name=\"r10-only-types\">\n      <!--NB: LONGCARD is not indicative of R10,\n          some PIM and ISO compilers also use it.-->\n      <item>OCTET</item>\n      <item>UNICHAR</item>\n    </list>\n\n    <!-- R10-only Pervasive Procedures -->\n    <list name=\"r10-only-procedures\">\n      <item>APPEND</item>\n      <item>CAPACITY</item>\n      <item>COUNT</item>\n      <item>INSERT</item>\n      <item>LOG2</item>\n      <item>POW2</item>\n      <item>PRED</item>\n      <item>PTR</item>\n      <item>REMOVE</item>\n      <item>SGN</item>\n      <item>SUCC</item>\n    </list>\n\n    <!-- R10-only Pervasive Macros -->\n    <list name=\"r10-only-macros\">\n      <item>TLIMIT</item>\n      <item>TMAX</item>\n      <item>TMIN</item>\n    </list>\n\n    <!-- R10-only Unsafe Facilities -->\n    <list name=\"r10-only-unsafe\">\n      <!-- Module -->\n      <item>UNSAFE</item>\n      <!-- Types -->\n      <item>LONGWORD</item>\n      <item>OCTETSEQ</item>\n      <!-- Procedures -->\n      <item>BIT</item>\n      <item>BWAND</item>\n      <item>BWNOT</item>\n      <item>BWOR</item>\n      <item>SETBIT</item>\n      <item>SHL</item>\n      <item>SHR</item>\n    </list>\n\n    <!-- R10-only Libraries -->\n    <list name=\"r10-only-libraries\">\n      <item>PervasiveIO</item>\n      <item>UnsafeIO</item>\n    </list>\n\n<!--\n  ============================================================================\n  Entities for PIM Context\n  ============================================================================\n-->\n    <!-- All PIM Reserved Words -->\n    <list name=\"pim-keywords\">\n      <item>AND</item>\n      <item>ARRAY</item>\n      <item>BEGIN</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CONST</item>\n      <item>DEFINITION</item>\n      <item>DIV</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXIT</item>\n      <item>EXPORT</item>\n      <item>FOR</item>\n      <item>FROM</item>\n      <item>IF</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPORT</item>\n      <item>IN</item>\n      <item>LOOP</item>\n      <item>MOD</item>\n      <item>MODULE</item>\n      <item>NOT</item>\n      <item>OF</item>\n      <item>OR</item>\n      <item>POINTER</item>\n      <item>PROCEDURE</item>\n      <item>QUALIFIED</item>\n      <item>RECORD</item>\n      <item>REPEAT</item>\n      <item>RETURN</item>\n      <item>SET</item>\n      <item>THEN</item>\n      <item>TO</item>\n      <item>TYPE</item>\n      <item>UNTIL</item>\n      <item>VAR</item>\n      <item>WHILE</item>\n      <item>WITH</item>\n    </list>\n\n    <!-- All PIM Pervasive Constants -->\n    <list name=\"pim-constants\">\n      <item>FALSE</item>\n      <item>NIL</item>\n      <item>TRUE</item>\n    </list>\n\n    <!-- All PIM Pervasive Types -->\n    <list name=\"pim-types\">\n      <item>BOOLEAN</item>\n      <item>BITSET</item>\n      <item>CARDINAL</item>\n      <item>CHAR</item>\n      <item>INTEGER</item>\n      <item>LONGINT</item>\n      <item>LONGREAL</item>\n      <item>PROC</item>\n      <item>REAL</item>\n    </list>\n\n    <!-- All PIM Pervasive Procedures -->\n    <list name=\"pim-procedures\">\n      <item>ABS</item>\n      <item>CAP</item>\n      <item>CHR</item>\n      <item>DEC</item>\n      <item>EXCL</item>\n      <item>FLOAT</item>\n      <item>HALT</item>\n      <item>HIGH</item>\n      <item>INC</item>\n      <item>INCL</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>ODD</item>\n      <item>ORD</item>\n      <item>SIZE</item>\n      <item>TRUNC</item>\n      <item>VAL</item>\n    </list>\n\n    <!-- All PIM Pervasive Macros and their translations -->\n    <list name=\"pim-macros\">\n      <item>NEW</item>\n      <!--resolves to-->\n      <item>ALLOCATE</item>\n      <item>DISPOSE</item>\n      <!--resolves to-->\n      <item>DEALLOCATE</item>\n    </list>\n\n    <!-- All PIM Unsafe Facilities -->\n    <list name=\"pim-unsafe\">\n      <!-- Module -->\n      <item>SYSTEM</item>\n      <!-- Types -->\n      <item>ADDRESS</item>\n      <item>PROCESS</item>\n      <item>WORD</item>\n      <!-- Procedures -->\n      <item>ADR</item>\n      <item>NEWPROCESS</item>\n      <item>TRANSFER</item>\n      <item>TSIZE</item>\n    </list>\n\n<!--\n  ============================================================================\n  Entities for ISO Context\n  ============================================================================\n-->\n    <!-- All ISO Reserved Words -->\n    <list name=\"iso-keywords\">\n      <item>AND</item>\n      <item>ARRAY</item>\n      <item>BEGIN</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CONST</item>\n      <item>DEFINITION</item>\n      <item>DIV</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXIT</item>\n      <item>EXCEPT</item>\n      <item>EXPORT</item>\n      <item>FINALLY</item>\n      <item>FOR</item>\n      <item>FORWARD</item>\n      <item>FROM</item>\n      <item>IF</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPORT</item>\n      <item>IN</item>\n      <item>LOOP</item>\n      <item>MOD</item>\n      <item>MODULE</item>\n      <item>NOT</item>\n      <item>OF</item>\n      <item>OR</item>\n      <item>PACKEDSET</item>\n      <item>POINTER</item>\n      <item>PROCEDURE</item>\n      <item>QUALIFIED</item>\n      <item>RECORD</item>\n      <item>REM</item>\n      <item>REPEAT</item>\n      <item>RETRY</item>\n      <item>RETURN</item>\n      <item>SET</item>\n      <item>THEN</item>\n      <item>TO</item>\n      <item>TYPE</item>\n      <item>UNTIL</item>\n      <item>VAR</item>\n      <item>WHILE</item>\n      <item>WITH</item>\n    </list>\n\n    <!-- All ISO Pervasive Constants -->\n    <list name=\"iso-constants\">\n      <item>FALSE</item>\n      <item>INTERRUPTIBLE</item>\n      <item>NIL</item>\n      <item>TRUE</item>\n      <item>UNINTERRUPTIBLE</item>\n    </list>\n\n    <!-- All ISO Pervasive Types -->\n    <list name=\"iso-types\">\n      <item>BOOLEAN</item>\n      <item>BITSET</item>\n      <item>CARDINAL</item>\n      <item>COMPLEX</item>\n      <item>CHAR</item>\n      <item>INTEGER</item>\n      <item>LONGCOMPLEX</item>\n      <item>LONGREAL</item>\n      <item>PROC</item>\n      <item>PROTECTION</item>\n      <item>REAL</item>\n    </list>\n\n    <!-- All ISO Pervasive Procedures -->\n    <list name=\"iso-procedures\">\n      <item>ABS</item>\n      <item>CAP</item>\n      <item>CHR</item>\n      <item>CMPLX</item>\n      <item>DEC</item>\n      <item>EXCL</item>\n      <item>FLOAT</item>\n      <item>HALT</item>\n      <item>HIGH</item>\n      <item>IM</item>\n      <item>INC</item>\n      <item>INCL</item>\n      <item>INT</item>\n      <item>LENGTH</item>\n      <item>LFLOAT</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>ODD</item>\n      <item>ORD</item>\n      <item>RE</item>\n      <item>SIZE</item>\n      <item>TRUNC</item>\n      <item>VAL</item>\n    </list>\n\n    <!-- All ISO Pervasive Macros and teir translations -->\n    <list name=\"iso-macros\">\n      <item>NEW</item>\n      <!--resolves to-->\n      <item>ALLOCATE</item>\n      <item>DISPOSE</item>\n      <!--resolves to-->\n      <item>DEALLOCATE</item>\n    </list>\n\n    <!-- All ISO Unsafe Facilities -->\n    <list name=\"iso-unsafe\">\n      <!-- Module -->\n      <item>SYSTEM</item>\n      <!-- Constants -->\n      <item>BITSPERLOC</item>\n      <item>BITSPERWORD</item>\n      <!-- Types -->\n      <item>ADDRESS</item>\n      <item>LOC</item>\n      <item>WORD</item>\n      <!-- Procedures -->\n      <item>ADDADR</item>\n      <item>ADR</item>\n      <item>CAST</item>\n      <item>DIFADR</item>\n      <item>MAKEADR</item>\n      <item>ROTATE</item>\n      <item>SHIFT</item>\n      <item>SUBADR</item>\n      <item>TSIZE</item>\n    </list>\n\n<!--\n  ============================================================================\n  Entities for R10 Context\n  ============================================================================\n-->\n    <!-- All R10 Reserved Words -->\n    <list name=\"r10-keywords\">\n      <item>ALIAS</item>\n      <item>AND</item>\n      <item>ARGLIST</item>\n      <item>ARRAY</item>\n      <item>BEGIN</item>\n      <item>BLUEPRINT</item>\n      <item>BY</item>\n      <item>CASE</item>\n      <item>CONST</item>\n      <item>COPY</item>\n      <item>DEFINITION</item>\n      <item>DIV</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXIT</item>\n      <item>FOR</item>\n      <item>FROM</item>\n      <item>GENLIB</item>\n      <item>IF</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPORT</item>\n      <item>IN</item>\n      <item>LOOP</item>\n      <item>MOD</item>\n      <item>MODULE</item>\n      <item>NEW</item>\n      <item>NOT</item>\n      <item>OF</item>\n      <item>OPAQUE</item>\n      <item>OR</item>\n      <item>POINTER</item>\n      <item>PROCEDURE</item>\n      <item>READ</item>\n      <item>RECORD</item>\n      <item>REFERENTIAL</item>\n      <item>RELEASE</item>\n      <item>REPEAT</item>\n      <item>RETAIN</item>\n      <item>RETURN</item>\n      <item>SET</item>\n      <item>THEN</item>\n      <item>TO</item>\n      <item>TYPE</item>\n      <item>UNTIL</item>\n      <item>VAR</item>\n      <item>WHILE</item>\n      <item>WRITE</item>\n      <item>YIELD</item>\n    </list>\n\n    <!-- All R10 Pervasive Constants -->\n    <list name=\"r10-constants\">\n      <item>FALSE</item>\n      <item>NIL</item>\n      <item>TRUE</item>\n    </list>\n\n    <!-- All R10 Pervasive Types -->\n    <list name=\"r10-types\">\n      <item>BOOLEAN</item>\n      <item>CARDINAL</item>\n      <item>CHAR</item>\n      <item>INTEGER</item>\n      <item>LONGCARD</item>\n      <item>LONGINT</item>\n      <item>LONGREAL</item>\n      <item>OCTET</item>\n      <item>REAL</item>\n      <item>UNICHAR</item>\n    </list>\n\n    <!-- All R10 Pervasive Procedures -->\n    <list name=\"r10-procedures\">\n      <item>ABS</item>\n      <item>APPEND</item>\n      <item>CAPACITY</item>\n      <item>CHR</item>\n      <item>COUNT</item>\n      <item>ENTIER</item>\n      <item>INSERT</item>\n      <item>LENGTH</item>\n      <item>LOG2</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>ODD</item>\n      <item>ORD</item>\n      <item>POW2</item>\n      <item>PRED</item>\n      <item>PTR</item>\n      <item>REMOVE</item>\n      <item>SGN</item>\n      <item>SUCC</item>\n    </list>\n\n    <!-- All R10 Pervasive Macros -->\n    <list name=\"r10-macros\">\n      <item>TLIMIT</item>\n      <item>TMAX</item>\n      <item>TMIN</item>\n      <item>TSIZE</item>\n    </list>\n\n    <!-- All R10 Unsafe Facilities -->\n    <list name=\"r10-unsafe\">\n      <!-- Reserved Words -->\n      <item>CAST</item>\n      <!-- Module -->\n      <item>UNSAFE</item>\n      <!-- Constants -->\n      <item>BitsPerAddress</item>\n      <item>BitsPerByte</item>\n      <item>BytesPerWord</item>\n      <item>BytesPerLongWord</item>\n      <!-- Types -->\n      <item>ADDRESS</item>\n      <item>BYTE</item>\n      <item>LONGWORD</item>\n      <item>OCTETSEQ</item>\n      <item>WORD</item>\n      <!-- Procedures -->\n      <item>ADD</item>\n      <item>ADR</item>\n      <item>BIT</item>\n      <item>BWAND</item>\n      <item>BWNOT</item>\n      <item>BWOR</item>\n      <item>HALT</item>\n      <item>SETBIT</item>\n      <item>SHL</item>\n      <item>SHR</item>\n      <item>SUB</item>\n      <!-- Macros -->\n      <item>NOP</item>\n    </list>\n\n    <contexts>\n<!--\n  ============================================================================\n  Common Context\n  ============================================================================\n  This context is selected by default, prior to any dialect disambiguation.\n  ============================================================================\n-->\n      <context name=\"Common\" attribute=\"Plain Source\" lineEndContext=\"#stay\">\n        <!-- BUG: first entry is ignored, leave Dummy at first position -->\n        <keyword attribute=\"Dummy\" context=\"#stay\" String=\"workaround\"/>\n<!--\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  Dialect tags\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  Occurence selects specified dialect. Compiler extension suffix is ignored.\n\n  EBNF:\n\n  dialectTag :=\n    '(*!' dialectIdent ( '+' compilerExtension )? '*)'\n    ;\n\n  dialectIdent :=\n    'm2pim' | 'm2iso' | 'm2r10'\n    ;\n\n  compilerExtension :=\n    LowerCaseLetter ( LowerCaseLetter | Digit )*\n    ;\n\n  LowerCaseLetter := 'a' .. 'z';\n\n  Digit := '0' .. '9' ;\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-->\n        <!-- PIM Dialect Tag (*!m2pim*) -->\n        <RegExpr attribute=\"DialectTag\" context=\"PIM\"\n          String=\"\\(\\*\\!m2pim(\\+[a-z][a-z0-9]*)?\\*\\)\"/>\n\n        <!-- ISO Dialect Tag (*!m2iso*) -->\n        <RegExpr attribute=\"DialectTag\" context=\"ISO\"\n          String=\"\\(\\*\\!m2iso(\\+[a-z][a-z0-9]*)?\\*\\)\"/>\n\n        <!-- R10 Dialect Tag (*!m2r10*) -->\n        <RegExpr attribute=\"DialectTag\" context=\"R10\"\n          String=\"\\(\\*\\!m2r10(\\+[a-z][a-z0-9]*)?\\*\\)\"/>\n<!--\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  Entities common to all dialects, occurrence does not select any dialect\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-->\n        <!-- Common Reserved Words -->\n        <keyword attribute=\"Keyword\"\n          context=\"#stay\" String=\"common-keywords\"/>\n\n        <!-- Common Pervasive Constants -->\n        <keyword attribute=\"Const\"\n          context=\"#stay\" String=\"common-constants\"/>\n\n        <!-- Common Pervasive Types -->\n        <keyword attribute=\"Const\"\n          context=\"#stay\" String=\"common-types\"/>\n\n        <!-- Common Pervasive Procedures -->\n        <keyword attribute=\"Builtin\"\n          context=\"#stay\" String=\"common-procedures\"/>\n\n        <!-- Common Unsafe Facilities -->\n        <keyword attribute=\"Unsafe\"\n          context=\"#stay\" String=\"common-unsafe\"/>\n<!--\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  Entities indicative of a dialect, occurrence selects indicated dialect\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-->\n        <!-- Dialect Indicative Reserved Words -->\n        <keyword attribute=\"Keyword\"\n          context=\"ISO\" String=\"iso-only-keywords\"/>\n        <keyword attribute=\"Keyword\"\n          context=\"R10\" String=\"r10-only-keywords\"/>\n\n        <!-- Dialect Indicative Constants -->\n        <keyword attribute=\"Const\"\n          context=\"ISO\" String=\"iso-only-constants\"/>\n\n         <!-- Dialect Indicative Types -->\n        <keyword attribute=\"Type\"\n          context=\"ISO\" String=\"iso-only-types\"/>\n        <keyword attribute=\"Type\"\n          context=\"R10\" String=\"r10-only-types\"/>\n\n        <!-- Dialect Indicative Procedures -->\n        <keyword attribute=\"Builtin\"\n          context=\"ISO\" String=\"iso-only-procedures\"/>\n        <keyword attribute=\"Builtin\"\n          context=\"R10\" String=\"r10-only-procedures\"/>\n\n        <!-- Dialect Indicative Macros -->\n        <keyword attribute=\"Builtin\"\n          context=\"R10\" String=\"r10-only-macros\"/>\n\n        <!-- Dialect Indicative Unsafe Facilities -->\n        <keyword attribute=\"Unsafe\" context=\"ISO\" String=\"iso-only-unsafe\"/>\n        <keyword attribute=\"Unsafe\" context=\"R10\" String=\"r10-only-unsafe\"/>\n\n        <!-- Dialect Indicative Libraries -->\n        <keyword attribute=\"Plain Source\"\n          context=\"PIM\" String=\"pim-only-libraries\"/>\n        <keyword attribute=\"Plain Source\"\n          context=\"ISO\" String=\"iso-only-libraries\"/>\n        <keyword attribute=\"Plain Source\"\n          context=\"R10\" String=\"r10-only-libraries\"/>\n<!--\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  Literals common to all dialects, occurrence does not select any dialect\n  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n-->\n        <!-- Real Number Literals -->\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Decimal Whole Number Literals -->\n        <Int attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Double-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"DoubleQuoted\" char=\"&quot;\"/>\n\n        <!-- Single-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"SingleQuoted\" char=\"'\"/>\n\n        <!-- Opening Block Comment Delimiter -->\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\"\n          char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n      </context><!--Common-->\n\n<!--\n  ============================================================================\n  PIM Context\n  ============================================================================\n  This context is selected when either the PIM dialect tag (*!m2pim*) or an\n  entity indicative of the PIM dialect is found within the source file.\n  ============================================================================\n-->\n      <context name=\"PIM\" attribute=\"Plain Source\" lineEndContext=\"#stay\">\n        <!-- Reserved Words -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"pim-keywords\"/>\n\n        <!-- Pervasive Constant Identifiers -->\n        <keyword attribute=\"Const\" context=\"#stay\" String=\"pim-constants\"/>\n\n        <!-- Pervasive Type Identifiers -->\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"pim-types\"/>\n\n        <!-- Pervasive Procedure Identifiers -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"pim-procedures\"/>\n\n        <!-- Pervasive Macro Identifiers and Translations -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"pim-macros\"/>\n\n        <!-- Built-in Unsafe Facilities -->\n        <keyword attribute=\"Unsafe\" context=\"#stay\" String=\"pim-unsafe\"/>\n\n        <!-- Base-16 Whole Number Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"0[0-9A-F]*H\"/>\n\n        <!-- Base-8 Whole Number and Character Code Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"[0-7]+[BC]\"/>\n\n        <!-- Real Number Literals -->\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Decimal Whole Number Literals -->\n        <Int attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Double-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"DoubleQuoted\" char=\"&quot;\"/>\n\n        <!-- Single-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"SingleQuoted\" char=\"'\"/>\n\n        <!-- Opening Pragma Delimiter -->\n        <StringDetect attribute=\"Pragma\" context=\"PIM-Pragma\" String=\"(*$\"/>\n\n        <!-- Opening Block Comment Delimiter -->\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\"\n          char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n      </context><!--PIM-->\n\n<!--\n  ============================================================================\n  ISO Context\n  ============================================================================\n  This context is selected when either the ISO dialect tag (*!m2iso*) or an\n  entity indicative of the ISO dialect is found within the source file.\n  ============================================================================\n-->\n      <context name=\"ISO\" attribute=\"Plain Source\" lineEndContext=\"#stay\">\n        <!-- Reserved Words -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"iso-keywords\"/>\n\n        <!-- Pervasive Constant Identifiers -->\n        <keyword attribute=\"Const\" context=\"#stay\" String=\"iso-constants\"/>\n\n        <!-- Pervasive Type Identifiers -->\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"iso-types\"/>\n\n        <!-- Pervasive Procedure Identifiers -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"iso-procedures\"/>\n\n        <!-- Pervasive Macro Identifiers and Translations -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"iso-macros\"/>\n\n        <!-- Built-in Unsafe Facilities -->\n        <keyword attribute=\"Unsafe\" context=\"#stay\" String=\"iso-unsafe\"/>\n\n        <!-- Base-16 Whole Number Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"0[0-9A-F]*H\"/>\n\n        <!-- Base-8 Whole Number and Character Code Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\" String=\"[0-7]+[BC]\"/>\n\n        <!-- Real Number Literals -->\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Decimal Whole Number Literals -->\n        <Int attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Double-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"DoubleQuoted\" char=\"&quot;\"/>\n\n        <!-- Single-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"SingleQuoted\" char=\"'\"/>\n\n        <!-- Opening Pragma Delimiter -->\n        <Detect2Chars attribute=\"Pragma\"\n          context=\"ISO-Pragma\" char=\"&lt;\" char1=\"*\"/>\n\n        <!-- Opening Block Comment Delimiter -->\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\"\n          char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n      </context><!--ISO-->\n\n<!--\n  ============================================================================\n  R10 Context\n  ============================================================================\n  This context is selected when either the R10 dialect tag (*!m2r10*) or an\n  entity indicative of the R10 dialect is found within the source file.\n  ============================================================================\n-->\n      <context name=\"R10\" attribute=\"Plain Source\" lineEndContext=\"#stay\">\n        <!-- Reserved Words -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"r10-keywords\"/>\n\n        <!-- Built-in Constant Identifiers -->\n        <keyword attribute=\"Const\" context=\"#stay\" String=\"r10-constants\"/>\n\n        <!-- Built-in Type Identifiers -->\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"r10-types\"/>\n\n        <!-- Built-in Procedure Identifiers -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"r10-procedures\"/>\n\n        <!-- Built-in Macro Identifiers and Translations -->\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"r10-macros\"/>\n\n        <!-- Facilities from Built-in Module UNSAFE -->\n        <keyword attribute=\"Unsafe\" context=\"#stay\" String=\"r10-unsafe\"/>\n\n        <!-- Base-2 Whole Number Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\"\n          String=\"0b([01]+('[01]+)?)+\"/>\n\n        <!-- Base-16 Whole Number and Character Code Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\"\n          String=\"0[ux]([0-9A-F]+('[0-9A-F]+)?)+\"/>\n\n        <!-- Real Number Literals -->\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\n        <!-- Decimal Whole Number Literals -->\n        <RegExpr attribute=\"Number\" context=\"#stay\"\n          String=\"([1-9][0-9]*('[0-9]+)*)|0\"/>\n\n        <!-- Double-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"DoubleQuoted\" char=\"&quot;\"/>\n\n        <!-- Single-Quoted Character and String Literals -->\n        <DetectChar attribute=\"String\" context=\"SingleQuoted\" char=\"'\"/>\n\n        <!-- Opening Pragma Delimiter -->\n        <Detect2Chars attribute=\"Pragma\"\n          context=\"ISO-Pragma\" char=\"&lt;\" char1=\"*\"/>\n\n        <!-- Line Comment -->\n        <DetectChar attribute =\"Comment\" context=\"LineComment\" char=\"!\"/>\n\n        <!-- Opening Block Comment Delimiter -->\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\"\n          char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n      </context><!--R10-->\n\n<!--\n  ============================================================================\n  Sub-Contexts\n  ============================================================================\n  These contexts are used to process entities that are recognised by their\n  opening delimiters, such as quoted literals, pragmas and comments.\n  ============================================================================\n-->\n      <!-- Double-Quoted Literal -->\n      <context name=\"DoubleQuoted\" attribute=\"String\" lineEndContext=\"#pop\">\n        <!-- Closing Delimiter -->\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <!-- Single-Quoted Literal -->\n      <context name=\"SingleQuoted\" attribute=\"String\" lineEndContext=\"#pop\">\n        <!-- CLosing Delimiter -->\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- PIM Pragma Body -->\n      <context name=\"PIM-Pragma\" attribute=\"Pragma\" lineEndContext=\"#stay\">\n        <!-- Closing Delimiter -->\n        <Detect2Chars attribute=\"Pragma\" context=\"#pop\" char=\"*\" char1=\")\"/>\n      </context>\n\n      <!-- ISO Pragma Body -->\n      <context name=\"ISO-Pragma\" attribute=\"Pragma\" lineEndContext=\"#stay\">\n        <!-- Closing Delimiter -->\n        <Detect2Chars attribute=\"Pragma\"\n          context=\"#pop\" char=\"*\" char1=\"&gt;\"/>\n      </context>\n\n      <!-- Line Comment Body -->\n      <context name=\"LineComment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      </context>\n\n      <!-- Block Comment Body -->\n      <context name=\"BlockComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <!-- Opening Delimiter of Nested Comment -->\n        <Detect2Chars attribute=\"Comment\" context=\"BlockComment\"\n          char=\"(\" char1=\"*\" beginRegion=\"FoldableComment\"/>\n        <!-- Closing Delimiter -->\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\"\n          char=\"*\" char1=\")\" endRegion=\"FoldableComment\"/>\n      </context>\n    </contexts>\n\n<!--\n  ============================================================================\n  Rendering Styles\n  ============================================================================\n-->\n    <itemDatas>\n      <!-- Style for Plain Source Text -->\n      <itemData name=\"Plain Source\"\n        defStyleNum=\"dsNormal\" bold=\"0\" italic=\"0\"/>\n\n      <!-- Style for Reserved Words -->\n      <itemData name=\"Keyword\"\n        defStyleNum=\"dsKeyword\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Pervasive Constant Identifiers -->\n      <itemData name=\"Const\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Pervasive Type Identifiers -->\n      <itemData name=\"Type\"\n        defStyleNum=\"dsDataType\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Pervasive Procedure Identifiers -->\n      <itemData name=\"Builtin\"\n        defStyleNum=\"dsBuiltIn\" bold=\"1\" italic=\"0\"/>\n\n      <!--  Style for Unsafe Facilities -->\n      <itemData name=\"Unsafe\"\n        defStyleNum=\"dsWarning\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Number Literals -->\n      <itemData name=\"Number\"\n        defStyleNum=\"dsDecVal\" bold=\"0\" italic=\"0\"/>\n\n      <!-- Style for Quoted Literals -->\n      <itemData name=\"String\"\n        defStyleNum=\"dsString\" bold=\"0\" italic=\"0\"/>\n\n      <!-- Style for Dialect Tags -->\n      <itemData name=\"DialectTag\"\n        defStyleNum=\"dsComment\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Pragmas -->\n      <itemData name=\"Pragma\"\n        defStyleNum=\"dsPreprocessor\" bold=\"1\" italic=\"0\"/>\n\n      <!-- Style for Comments -->\n      <itemData name=\"Comment\"\n        defStyleNum=\"dsComment\" bold=\"0\" italic=\"1\"/>\n\n      <!-- Dummy style for testing -->\n      <itemData name=\"Dummy\" defStyleNum=\"dsError\"/>\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"!\"/>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\"/>\n    </comments>\n  </general>\n</language>\n\n<!--EOF-->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/monobasic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!--\n    Mono Basic syntax\n\n    Created: Davide Bettio <davide.bettio@kdemail.net>\n    Date: 09/09/2005\n    Version: 1.01\n    License: GNU General Public License\n-->\n\n<language name=\"MonoBasic\" section=\"Sources\" version=\"3\" kateversion=\"2.3\" extensions=\"*.vb\" mimetype=\"\" author=\"Davide Bettio (davide.bettio@kdemail.net)\" license=\"GPL\">\n  <highlighting>\n     <list name=\"keywords\">\n        <item>Option</item>\n\t<item>Explicit</item>\n\t<item>Strict</item>\n\t<item>Imports</item>\n\t<item>Inherits</item>\n\t<item>As</item>\n\t<item>New</item>\n\t<item>Dim</item>\n\t<item>Redim</item>\n\t<item>Private</item>\n\t<item>Friend</item>\n\t<item>Public</item>\n\t<item>Const</item>\n\t<item>ReadOnly</item>\n\t<item>WriteOnly</item>\n\t<item>Default</item>\n\t<item>Shared</item>\n\t<item>Shadows</item>\n\t<item>Protected</item>\n\t<item>Overloads</item>\n\t<item>Overrides</item>\n\t<item>NotOverridable</item>\n\t<item>NotInheritable</item>\n\t<item>MustInherit</item>\n\t<item>MustOverride</item>\n\t<item>MyBase</item>\n\t<item>MyClass</item>\n\t<item>Me</item>\n\t<item>Delegate</item>\n\t<item>Catch</item>\n\t<item>Finaly</item>\n\t<item>When</item>\n\t<item>Throw</item>\n\t<item>To</item>\n\t<item>Step</item>\n\t<item>Then</item>\n\t<item>Else</item>\n\t<item>True</item>\n\t<item>False</item>\n\t<item>Nothing</item>\n\t<item>Call</item>\n\t<item>ByVal</item>\n\t<item>ByRef</item>\n\t<item>Optional</item>\n\t<item>ParamArray</item>\n\t<item>Return</item>\n\t<item>Declare</item>\n\t<item>WithEvents</item>\n\t<item>Event</item>\n\t<item>RaiseEvent</item>\n\t<item>AddHandler</item>\n\t<item>And</item>\n\t<item>Or</item>\n\t<item>Not</item>\n\t<item>Xor</item>\n\t<item>AndAlso</item>\n\t<item>OrElse</item>\n\t<item>Goto</item>\n\t<item>On</item>\n\t<item>Error</item>\n\t<item>Resume</item>\n      </list>\n\n      <list name=\"types\">\n\t<item>Boolean</item>\n\t<item>Char</item>\n\t<item>String</item>\n\t<item>Integer</item>\n\t<item>Long</item>\n\t<item>Double</item>\n\t<item>Object</item>\n\t<item>Exception</item>\n\t<item>Date</item>\n\t<item>DateTime</item>\n\t<item>Int16</item>\n\t<item>Int32</item>\n\t<item>Int64</item>\n\t<item>ParamArray</item>\n\t<item>TimeSpan</item>\n\t<item>Byte</item>\n\t<item>Decimal</item>\n\t<item>IntPtr</item>\n\t<item>Single</item>\n\t<item>Guid</item>\n      </list>\n\n      <contexts>\n\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t   <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t   <keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n\t   <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t   <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"'\" />\n\n\t   <!-- Namespace -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Namespace)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Namespace1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Namespace.*$\" insensitive=\"true\" endRegion=\"Namespace1\"/>\n\n\t   <!-- Module -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Module)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Module1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Module.*$\" insensitive=\"true\" endRegion=\"Module1\"/>\n\n\t   <!-- Class -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Class)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Class1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Class.*$\" insensitive=\"true\" endRegion=\"Class1\"/>\n\n\t   <!-- Interface -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Interface)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Interface1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Interface.*$\" insensitive=\"true\" endRegion=\"Interface1\"/>\n\n\t   <!-- Structure -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Structure)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Structure1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Structure.*$\" insensitive=\"true\" endRegion=\"Structure1\"/>\n\t\n\t   <!-- Enum -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Enum)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Enum1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Enum.*$\" insensitive=\"true\" endRegion=\"Enum1\"/>\n\t\n\t   <!-- Property -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Property)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Property1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Property.*$\" insensitive=\"true\" endRegion=\"Property1\"/>\n\n\t   <!-- Get -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Get)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Get1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Get.*$\" insensitive=\"true\" endRegion=\"Get1\"/>\n\n\t   <!-- Set -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Set)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Set1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Set.*$\" insensitive=\"true\" endRegion=\"Set1\"/>\n\n\t   <!-- Sub -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Sub)([.\\s]|$)\"  insensitive=\"true\" beginRegion=\"Sub1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Sub.*$\" insensitive=\"true\" endRegion=\"Sub1\"/>\n           <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"Exit.Sub.*$\" insensitive=\"true\"/>\n\n\t   <!-- Function -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Function)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Function1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Function.*$\" insensitive=\"true\" endRegion=\"Function1\"/>\n           <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"Exit.Function.*$\" insensitive=\"true\"/>\n\n\t   <!-- Try -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Try)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"Try1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Try.*$\" insensitive=\"true\" endRegion=\"Try1\"/>\n\n\t   <!-- If -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(If)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"If1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.If.*$\" insensitive=\"true\" endRegion=\"If1\"/>\n\n\t   <!-- Select case -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"Select.Case.*$\"  insensitive=\"true\" beginRegion=\"SelectCase1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.Select.*$\" insensitive=\"true\" endRegion=\"SelectCase1\"/>\n\t\n\t   <!-- For -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(For)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"For1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Next)([\\s]|$)\" insensitive=\"true\" endRegion=\"For1\"/>\n\t\n\t   <!-- Do Loop -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Do)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"DoLoop1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(Loop)([\\s]|$)\" insensitive=\"true\" endRegion=\"DoLoop1\"/>\n\n\t   <!-- While -->\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(While)([\\s]|$)\"  insensitive=\"true\" beginRegion=\"While1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"End.While.*$\" insensitive=\"true\" endRegion=\"While1\"/>\n\t   <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"Exit.While.*$\" insensitive=\"true\"/>\n\t   \n\t   <!-- #Region -->\n\t   <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"#Region.*$\"  insensitive=\"true\" beginRegion=\"Region1\"/>\n\t   <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"#End.Region.*$\" insensitive=\"true\" endRegion=\"Region1\"/>\n\n\t   <!-- #If -->\n\t   <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"#If.*$\"  insensitive=\"true\" beginRegion=\"PreprocessorIf1\"/>\n\t   <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"#End.If.*$\" insensitive=\"true\" endRegion=\"PreprocessorIf1\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n         <LineContinue attribute=\"String\" context=\"#pop\"/>\n\t <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n         <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n    </contexts>\n\n    <itemDatas>\n       <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n       <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" color=\"#000080\" bold=\"0\"/>\n       <itemData name=\"Type\" defStyleNum=\"dsDataType\" color=\"#000080\" bold=\"0\"/>\n       <itemData name=\"String\" defStyleNum=\"dsString\" color=\"#800000\"/>\n       <itemData name=\"String Char\" defStyleNum=\"dsSpecialChar\"/>\n       <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\" color=\"#008000\"/>\n       <itemData name=\"Comment\" defStyleNum=\"dsComment\" color=\"#008000\"/>\n    </itemDatas>\n\n   </highlighting>\n\t\n   <general>\n      <keywords casesensitive=\"0\"/>\n      <comments>\n         <comment name=\"singleLine\" start=\"'\"/>\n      </comments>\n   </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mup.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Music Publisher\" version=\"3\" kateversion=\"2.4\" section=\"Other\" extensions=\"*.mup;*.not\" mimetype=\"text/x-mup;audio/x-mup;application/x-mup;audio/x-notes\" casesensitive=\"1\" author=\"Wilbert Berendsen (wilbert@kde.nl)\" license=\"LGPL\">\n\n  <highlighting>\n\n    <list name=\"mupcontexts\">\n      <item>score</item>\n      <item>music</item>\n      <item>header</item>\n      <item>header2</item>\n      <item>footer</item>\n      <item>footer2</item>\n      <item>top</item>\n      <item>top2</item>\n      <item>bottom</item>\n      <item>bottom2</item>\n      <item>staff</item>\n      <item>voice</item>\n      <item>grids</item>\n      <item>music</item>\n      <item>headshapes</item>\n      <item>block</item>\n    </list>\n\n\n    <list name=\"mupparameters\">\n      <item>aboveorder</item>\n      <item>addtranspose</item>\n      <item>barstyle</item>\n      <item>beamslope</item>\n      <item>beamstyle</item>\n      <item>beloworder</item>\n      <item>betweenorder</item>\n      <item>bottommargin</item>\n      <item>brace</item>\n      <item>bracket</item>\n      <item>cancelkey</item>\n      <item>chorddist</item>\n      <item>clef</item>\n      <item>crescdist</item>\n      <item>defoct</item>\n      <item>dist</item>\n      <item>division</item>\n      <item>dyndist</item>\n      <item>endingstyle</item>\n      <item>firstpage</item>\n      <item>font</item>\n      <item>fontfamily</item>\n      <item>gridfret</item>\n      <item>gridsatend</item>\n      <item>gridscale</item>\n      <item>gridswhereused</item>\n      <item>key</item>\n      <item>label</item>\n      <item>label2</item>\n      <item>leftmargin</item>\n      <item>lyricsalign</item>\n      <item>lyricsfont</item>\n      <item>lyricsfontfamily</item>\n      <item>lyricssize</item>\n      <item>measnum</item>\n      <item>measnumfont</item>\n      <item>measnumfontfamily</item>\n      <item>measnumsize</item>\n      <item>noteheads</item>\n      <item>numbermrpt</item>\n      <item>ontheline</item>\n      <item>packexp</item>\n      <item>packfact</item>\n      <item>pad</item>\n      <item>pageheight</item>\n      <item>pagewidth</item>\n      <item>panelsperpage</item>\n      <item>pedstyle</item>\n      <item>printmultnum</item>\n      <item>rehstyle</item>\n      <item>release</item>\n      <item>restcombine</item>\n      <item>restsymmult</item>\n      <item>rightmargin</item>\n      <item>scale</item>\n      <item>scorepad</item>\n      <item>scoresep</item>\n      <item>size</item>\n      <item>stafflines</item>\n      <item>staffpad</item>\n      <item>staffs</item>\n      <item>staffscale</item>\n      <item>staffsep</item>\n      <item>stemlen</item>\n      <item>swingunit</item>\n      <item>sylposition</item>\n      <item>tabwhitebox</item>\n      <item>time</item>\n      <item>timeunit</item>\n      <item>topmargin</item>\n      <item>transpose</item>\n      <item>units</item>\n      <item>visible</item>\n      <item>vscheme</item>\n      <item>warn</item>\n    </list>\n\n\n    <list name=\"mupvalues\">\n      <item>y</item>\n      <item>n</item>\n      <item>2f</item>\n      <item>2o</item>\n      <item>3f</item>\n      <item>3o</item>\n      <item>mussym</item>\n      <item>octave</item>\n      <item>dyn</item>\n      <item>othertext</item>\n      <item>chord</item>\n      <item>lyrics</item>\n      <item>ending</item>\n      <item>reh</item>\n      <item>up</item>\n      <item>down</item>\n      <item>major</item>\n      <item>minor</item>\n      <item>perfect</item>\n      <item>augmented</item>\n      <item>diminished</item>\n      <item>maj</item>\n      <item>min</item>\n      <item>per</item>\n      <item>aug</item>\n      <item>dim</item>\n      <item>pedal</item>\n      <item>8treble</item>\n      <item>treble8</item>\n      <item>treble</item>\n      <item>frenchviolin</item>\n      <item>soprano</item>\n      <item>mezzosoprano</item>\n      <item>alto</item>\n      <item>tenor</item>\n      <item>baritone</item>\n      <item>bass</item>\n      <item>cut</item>\n      <item>common</item>\n      <item>line</item>\n      <item>alt</item>\n      <item>pedstar</item>\n      <item>top</item>\n      <item>barred</item>\n      <item>grouped</item>\n      <item>times</item>\n      <item>boxed</item>\n      <item>circled</item>\n      <item>plain</item>\n      <item>1n</item>\n      <item>5n</item>\n      <item>1drum</item>\n      <item>5drum</item>\n      <item>drum</item>\n      <item>tab</item>\n      <item>inches</item>\n      <item>cm</item>\n      <item>whereused</item>\n    </list>\n\n\n    <list name=\"mupmacrodirectives_start\">\n      <item>define</item>\n      <item>ifdef</item>\n      <item>ifndef</item>\n    </list>\n\n\n    <list name=\"mupmacrodirectives_end\">\n      <item>@</item>\n      <item>endif</item>\n    </list>\n\n\n    <list name=\"mupmacrodirectives\">\n      <item>else</item>\n      <item>include</item>\n      <item>undef</item>\n    </list>\n\n\n    <list name=\"mupspecialchars\">\n      <item>exclamdown</item>\n      <item>questiondown</item>\n      <item>sterling</item>\n      <item>yen</item>\n      <item>cent</item>\n      <item>quotedblbase</item>\n      <item>quotedblleft</item>\n      <item>``</item>\n      <item>quotedblright</item>\n      <item>''</item>\n      <item>guillemotleft</item>\n      <item>&lt;&lt;</item>\n      <item>guillemotright</item>\n      <item>&gt;&gt;</item>\n      <item>guildsinglleft</item>\n      <item>guilsinglright</item>\n      <item>dagger</item>\n      <item>daggerdbl</item>\n      <item>grave</item>\n      <item>acute</item>\n      <item>macron</item>\n      <item>breve</item>\n      <item>dotaccent</item>\n      <item>dieresis</item>\n      <item>ring</item>\n      <item>cedilla</item>\n      <item>hungarumlaut</item>\n      <item>ogonek</item>\n      <item>caron</item>\n      <item>emdash</item>\n      <item>AE</item>\n      <item>ae</item>\n      <item>ordfeminine</item>\n      <item>ordmasculine</item>\n      <item>Lslash</item>\n      <item>L/</item>\n      <item>lslash</item>\n      <item>l/</item>\n      <item>Oslash</item>\n      <item>O/</item>\n      <item>oslash</item>\n      <item>o/</item>\n      <item>OE</item>\n      <item>oe</item>\n      <item>dotlessi</item>\n      <item>germandbls</item>\n      <item>ss</item>\n      <item>Aacute</item>\n      <item>A'</item>\n      <item>aacute</item>\n      <item>a'</item>\n      <item>Acircumflex</item>\n      <item>A^</item>\n      <item>acircumflex</item>\n      <item>a^</item>\n      <item>Adieresis</item>\n      <item>A:</item>\n      <item>adieresis</item>\n      <item>a:</item>\n      <item>Agrave</item>\n      <item>A`</item>\n      <item>agrave</item>\n      <item>a`</item>\n      <item>Aring</item>\n      <item>Ao</item>\n      <item>aring</item>\n      <item>ao</item>\n      <item>Atilde</item>\n      <item>A~</item>\n      <item>atilde</item>\n      <item>a~</item>\n      <item>Ccedilla</item>\n      <item>C,</item>\n      <item>ccedilla</item>\n      <item>c,</item>\n      <item>Eacute</item>\n      <item>E'</item>\n      <item>eacute</item>\n      <item>e'</item>\n      <item>Ecircumflex</item>\n      <item>E^</item>\n      <item>ecircumflex</item>\n      <item>e^</item>\n      <item>Edieresis</item>\n      <item>E:</item>\n      <item>edieresis</item>\n      <item>e:</item>\n      <item>Egrave</item>\n      <item>E`</item>\n      <item>egrave</item>\n      <item>e`</item>\n      <item>Iacute</item>\n      <item>I'</item>\n      <item>iacute</item>\n      <item>i'</item>\n      <item>Icircumflex</item>\n      <item>I^</item>\n      <item>icircumflex</item>\n      <item>i^</item>\n      <item>Idieresis</item>\n      <item>i:</item>\n      <item>idieresis</item>\n      <item>i:</item>\n      <item>Igrave</item>\n      <item>I`</item>\n      <item>igrave</item>\n      <item>i`</item>\n      <item>Ntilde</item>\n      <item>N~</item>\n      <item>ntilde</item>\n      <item>n~</item>\n      <item>Oacute</item>\n      <item>O'</item>\n      <item>oacute</item>\n      <item>o'</item>\n      <item>Ocircumflex</item>\n      <item>O^</item>\n      <item>ocircumflex</item>\n      <item>o^</item>\n      <item>Odieresis</item>\n      <item>O:</item>\n      <item>odieresis</item>\n      <item>o:</item>\n      <item>Ograve</item>\n      <item>O`</item>\n      <item>ograve</item>\n      <item>o`</item>\n      <item>Otilde</item>\n      <item>O~</item>\n      <item>otilde</item>\n      <item>o~</item>\n      <item>Scaron</item>\n      <item>Sv</item>\n      <item>scaron</item>\n      <item>sv</item>\n      <item>Uacute</item>\n      <item>U'</item>\n      <item>uacute</item>\n      <item>u'</item>\n      <item>Ucircumflex</item>\n      <item>U^</item>\n      <item>ucircumflex</item>\n      <item>u^</item>\n      <item>Udieresis</item>\n      <item>U:</item>\n      <item>udieresis</item>\n      <item>u:</item>\n      <item>Ugrave</item>\n      <item>U`</item>\n      <item>ugrave</item>\n      <item>u`</item>\n      <item>Ydieresis</item>\n      <item>Y:</item>\n      <item>ydieresis</item>\n      <item>y:</item>\n      <item>Zcaron</item>\n      <item>Zv</item>\n      <item>zcaron</item>\n      <item>zv</item>\n      <item>bullet</item>\n      <item>space</item>\n   </list>\n\n\n   <list name=\"mupmusicchars\">\n      <item>gclef</item>\n      <item>fclef</item>\n      <item>cclef</item>\n      <item>com</item>\n      <item>cut</item>\n      <item>flat</item>\n      <item>dblflat</item>\n      <item>sharp</item>\n      <item>dblsharp</item>\n      <item>nat</item>\n      <item>4n</item>\n      <item>2n</item>\n      <item>1n</item>\n      <item>dblwhole</item>\n      <item>xnote</item>\n      <item>diamond</item>\n      <item>filldiamond</item>\n      <item>dwhdiamond</item>\n      <item>dn2n</item>\n      <item>dn4n</item>\n      <item>dn8n</item>\n      <item>dn16n</item>\n      <item>dn32n</item>\n      <item>dn64n</item>\n      <item>dn128n</item>\n      <item>dn256n</item>\n      <item>up2n</item>\n      <item>up4n</item>\n      <item>up8n</item>\n      <item>up16n</item>\n      <item>up32n</item>\n      <item>up64n</item>\n      <item>up128n</item>\n      <item>up256n</item>\n      <item>upflag</item>\n      <item>dnflag</item>\n      <item>qwhrest</item>\n      <item>dwhrest</item>\n      <item>1rest</item>\n      <item>2rest</item>\n      <item>4rest</item>\n      <item>8rest</item>\n      <item>16rest</item>\n      <item>32rest</item>\n      <item>64rest</item>\n      <item>128rest</item>\n      <item>256rest</item>\n      <item>begped</item>\n      <item>endped</item>\n      <item>pedal</item>\n      <item>tr</item>\n      <item>mor</item>\n      <item>invmor</item>\n      <item>turn</item>\n      <item>invturn</item>\n      <item>ferm</item>\n      <item>uferm</item>\n      <item>acc_gt</item>\n      <item>acc_hat</item>\n      <item>acc_uhat</item>\n      <item>leg</item>\n      <item>dot</item>\n      <item>wedge</item>\n      <item>uwedge</item>\n      <item>sign</item>\n      <item>coda</item>\n      <item>upbow</item>\n      <item>dnbow</item>\n      <item>rr</item>\n      <item>measrpt</item>\n      <item>copyright</item>\n      <item>dim</item>\n      <item>halfdim</item>\n      <item>triangle</item>\n\n      <item>smgclef</item>\n      <item>smfclef</item>\n      <item>smcclef</item>\n      <item>smcom</item>\n      <item>smcut</item>\n      <item>smflat</item>\n      <item>smdblflat</item>\n      <item>smsharp</item>\n      <item>smdblsharp</item>\n      <item>smnat</item>\n      <item>sm4n</item>\n      <item>sm2n</item>\n      <item>sm1n</item>\n      <item>smdblwhole</item>\n      <item>smxnote</item>\n      <item>smdiamond</item>\n      <item>smfilldiamond</item>\n      <item>smdwhdiamond</item>\n      <item>smdn2n</item>\n      <item>smdn4n</item>\n      <item>smdn8n</item>\n      <item>smdn16n</item>\n      <item>smdn32n</item>\n      <item>smdn64n</item>\n      <item>smdn128n</item>\n      <item>smdn256n</item>\n      <item>smup2n</item>\n      <item>smup4n</item>\n      <item>smup8n</item>\n      <item>smup16n</item>\n      <item>smup32n</item>\n      <item>smup64n</item>\n      <item>smup128n</item>\n      <item>smup256n</item>\n      <item>smupflag</item>\n      <item>smdnflag</item>\n      <item>smqwhrest</item>\n      <item>smdwhrest</item>\n      <item>sm1rest</item>\n      <item>sm2rest</item>\n      <item>sm4rest</item>\n      <item>sm8rest</item>\n      <item>sm16rest</item>\n      <item>sm32rest</item>\n      <item>sm64rest</item>\n      <item>sm128rest</item>\n      <item>sm256rest</item>\n      <item>smbegped</item>\n      <item>smendped</item>\n      <item>smpedal</item>\n      <item>smtr</item>\n      <item>smmor</item>\n      <item>sminvmor</item>\n      <item>smturn</item>\n      <item>sminvturn</item>\n      <item>smferm</item>\n      <item>smuferm</item>\n      <item>smacc_gt</item>\n      <item>smacc_hat</item>\n      <item>smacc_uhat</item>\n      <item>smleg</item>\n      <item>smdot</item>\n      <item>smwedge</item>\n      <item>smuwedge</item>\n      <item>smsign</item>\n      <item>smcoda</item>\n      <item>smupbow</item>\n      <item>smdnbow</item>\n      <item>smrr</item>\n      <item>smmeasrpt</item>\n      <item>smcopyright</item>\n      <item>smdim</item>\n      <item>smhalfdim</item>\n      <item>smtriangle</item>\n    </list>\n\n\n    <list name=\"mupprintcommands\">\n      <item>print</item>\n      <item>left</item>\n      <item>right</item>\n      <item>center</item>\n      <item>title</item>\n      <item>paragraph</item>\n      <item>postscript</item>\n    </list>\n\n\n    <list name=\"mupfontnames\">\n      <item>avantgarde</item>\n      <item>bookman</item>\n      <item>courier</item>\n      <item>helvetica</item>\n      <item>newcentury</item>\n      <item>palatino</item>\n      <item>times</item>\n    </list>\n\n\n    <list name=\"mupfontstyles\">\n      <item>rom</item>\n      <item>bold</item>\n      <item>ital</item>\n      <item>boldital</item>\n    </list>\n\n\n    <list name=\"mupprintspecifiers\">\n      <item>chord</item>\n      <item>analysis</item>\n      <item>figbass</item>\n      <item>dyn</item>\n    </list>\n\n\n    <list name=\"mupgraphics\">\n      <item>dotted</item>\n      <item>dashed</item>\n      <item>wavy</item>\n      <item>wide</item>\n      <item>medium</item>\n\n      <item>line</item>\n      <item>curve</item>\n      <item>to</item>\n      <item>bulge</item>\n\n      <item>octave</item>\n      <item>mussym</item>\n      <item>phrase</item>\n      <item>pedal</item>\n      <item>roll</item>\n      <item>to</item>\n\n      <item>down</item>\n      <item>up</item>\n      <item>with</item>\n\n      <item>midi</item>\n    </list>\n\n\n    <list name=\"muplocations\">\n      <item>above</item>\n      <item>below</item>\n      <item>between</item>\n      <item>all</item>\n    </list>\n\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Context\" context=\"#stay\" String=\"mupcontexts\" />\n\t<RegExpr attribute=\"Lyrics\" context=\"#stay\" String=\"\\blyrics\\b\" />\n\t<RegExpr attribute=\"Barline\" context=\"Barline\" String=\"\\b((dashed|dotted)\\s+)?(bar|endbar|dblbar|invisbar|repeatstart|repeatboth|repeatend|restart)\\b\" />\n\t<RegExpr attribute=\"Newscore\" context=\"#stay\" String=\"\\bnew(score|page)\\b\" />\n\t<RegExpr attribute=\"Newscore\" context=\"#stay\" String=\"\\bmultirest\\s+[0-9]+\\b\" />\n\t<RegExpr attribute=\"Unset Command\" context=\"Unset\" String=\"\\bunset\\b\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t<RegExpr attribute=\"Special Char\" context=\"#stay\" String=\"\\\\$\" />\n\t<keyword attribute=\"Print Command\" context=\"Print Command\" String=\"mupprintcommands\" />\n\t<keyword attribute=\"Print Command\" context=\"Print Command\" String=\"mupfontnames\" />\n\t<keyword attribute=\"Print Command\" context=\"Print Command\" String=\"mupfontstyles\" />\n\t<RegExpr attribute=\"Print Command\" context=\"Print Command\" String=\"\\b((ragged|justified)\\s+)?paragraph\\b\" />\n\t<keyword attribute=\"Print Command\" context=\"#stay\" String=\"mupprintspecifiers\" />\n\t<keyword attribute=\"Print Command\" context=\"#stay\" String=\"mupgraphics\" />\n\t<keyword attribute=\"Print Command\" context=\"#stay\" String=\"muplocations\" />\n\t<RegExpr attribute=\"Print Command\" context=\"#stay\" String=\"\\bdist(?=\\s+[^=])\" />\n\t<keyword attribute=\"Parameter\" context=\"Parameter\" String=\"mupparameters\" />\n\t<RegExpr attribute=\"Special Char\" context=\"Bracket\" String=\"\\[(?=(grace|xnote|cue|diam|with|slash|up|down|len|pad|ho|dist|hs|c\\b|=))\" />\n\t<DetectChar attribute=\"Special Char\" context=\"Tuplet\" char=\"}\" />\n\t<AnyChar attribute=\"Special Char\" context=\"#stay\" String=\"[]{\" />\n\t<RegExpr attribute=\"Special Char\" context=\"#stay\" String=\"(&lt;&lt;|&gt;&gt;)\" />\n\t<RegExpr attribute=\"Note\" context=\"Note\"\n\tString=\"(\\(\\s*)?((1/4|1/2|1|2|4|8|16|32|64|128|256)\\.*\\s*)?((\\(\\s*)?([a-grs]|us)(?!bm)([0-9'?\\sxn]|[+-]+|[&amp;#]{1,2}|\\(\\s*[&amp;#]{1,2}\\s*\\)|\\(\\s*[xn]\\s*\\)|\\(\\s*[0-9]\\s*\\))*\\)?\\s*)*\\s*(?=[;~=&quot;&lt;A-Z@^]|\\b(bm|es?bm|dashed|dotted|tie|slur|alt|hs|ifn?def|else|elseif|endif|with|above)\\b)\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"Note\" String=\";\\s*(?=[~=&lt;]|\\b(bm|es?bm|dashed|dotted|tie|slur|alt|hs|ifn?def|else|elseif|endif)\\b)\" />\n\t<RegExpr attribute=\"Note\" context=\"#stay\" String=\"(1/4|1/2|1|2|4|8|16|32|64|128|256)?mu?[rs]+\\s*(?=;)\" />\n\t<RegExpr attribute=\"Note\" context=\"#stay\" String=\"m\\s*rpt\\s*(?=;)\" />\n\t<RegExpr attribute=\"Location\" context=\"#stay\" String=\"=([a-z]|_[a-z][a-z_0-9]*)\\b\" />\n\t<RegExpr attribute=\"Location\" context=\"Location\" String=\"([a-z]|_[a-z][a-z_0-9]*)\\.[xynews]\\b\" />\n\t<RegExpr attribute=\"Location Probably\" context=\"#stay\" String=\"([a-z]|_[a-z][a-z_0-9]*)\\.(?=[A-Z])\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"Location Probably\" String=\"[(,]\\s*(?=([h-qt-z]|_[a-z][a-z_0-9]*)\\s*[,)])\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"Note Probably\" String=\"[(,]\\s*(?=[a-grs]\\s*[,)])\" />\n\t<IncludeRules context=\"Macro\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[0-9.]*\\s*til\\s*(([0-9]+m(\\s*\\+\\s*[0-9.]+)?)|[0-9.]+)\\s*;\" />\n\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"[0-9]*[a-z_]+\" />\n      </context>\n\n\n      <context attribute=\"Parameter\" lineEndContext=\"#pop\" name=\"Parameter\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectChar attribute=\"Normal Text\" context=\"Value\" char=\"=\" />\n\t<RegExpr attribute=\"Parameter\" context=\"#stay\" String=\"\\s+\" />\n      </context>\n\n\n      <context attribute=\"Value\" lineEndContext=\"#pop\" name=\"Value\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\s,&amp;()-]+\" />\n\t<keyword attribute=\"Value\" context=\"#stay\" String=\"mupvalues\" />\n\t<keyword attribute=\"Value\" context=\"#pop\" String=\"mupfontnames\" />\n\t<keyword attribute=\"Value\" context=\"#pop\" String=\"mupfontstyles\" />\n\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"\\b[1-9][0-9]*/(1|2|4|8|16|32|64|128)n?\\b\" />\n\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"\\b[a-g][#&amp;]?'?([0-9]\\b)?\" />\n\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"[0-7][#&amp;]\" />\n\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"r\\b\" />\n\t<Float attribute=\"Value\" context=\"#stay\" />\n\t<Int attribute=\"Value\" context=\"#stay\" />\n\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t<IncludeRules context=\"Macro\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"[a-z][a-z0-9]*\" />\n      </context>\n\n\n      <context attribute=\"Parameter\" lineEndContext=\"#pop\" name=\"Unset\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<keyword attribute=\"Parameter\" context=\"#stay\" String=\"mupparameters\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\s,]+\" />\n\t<RegExpr attribute=\"Error\" context=\"#pop\" String=\"\\w+\" />\n      </context>\n\n\n      <context attribute=\"Print Command\" lineEndContext=\"#pop\" name=\"Print Command\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces />\n\t<keyword attribute=\"Print Command\" context=\"#stay\" String=\"mupfontstyles\" />\n\t<RegExpr attribute=\"Print Command\" context=\"#stay\" String=\"\\bnl\\b\" />\n\t<RegExpr attribute=\"Print Command\" context=\"#pop\" String=\"\\([0-9]+\\)\" />\n      </context>\n\n\n      <context attribute=\"Barline\" lineEndContext=\"#pop\" name=\"Barline\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectSpaces />\n\t<RegExpr attribute=\"Barline\" context=\"#stay\" String=\"\\b(ending|endending|hidechanges)\\b\" />\n\t<RegExpr attribute=\"Barline\" context=\"Bar Rehearsal\" String=\"\\breh(earsal)?\\b\" />\n\t<RegExpr attribute=\"Barline\" context=\"#stay\" String=\"\\bmnum\\s*=\\s*[0-9]+\" />\n\t<RegExpr attribute=\"Barline\" context=\"#stay\" String=\"\\bnum\\s*=\\s*[0-9]+\" />\n\t<RegExpr attribute=\"Barline\" context=\"#stay\" String=\"\\blet\\s*=\\s*(&quot;[A-Z]{1,2}&quot;)?\" />\n\t<RegExpr attribute=\"Barline\" context=\"#stay\" String=\"\\bpad\\s+[0-9]+\" />\n\t<RegExpr attribute=\"Location\" context=\"#stay\" String=\"=([a-z]|_[a-z][a-z_0-9]*)\\b\" />\n\t<IncludeRules context=\"Macro\" />\n      </context>\n\n\n      <context attribute=\"Barline\" lineEndContext=\"#pop\" name=\"Bar Rehearsal\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr attribute=\"Print Command\" context=\"#stay\" String=\"\\s+\" />\n\t<keyword attribute=\"Print Command\" context=\"Print Command\" String=\"mupfontnames\" />\n\t<keyword attribute=\"Print Command\" context=\"Print Command\" String=\"mupfontstyles\" />\n\t<RegExpr attribute=\"Barline\" context=\"#pop\" String=\"\\b(let|mnum|num)\\b\" />\n\t<IncludeRules context=\"Macro\" />\n      </context>\n\n\n      <context attribute=\"Note\" lineEndContext=\"#pop\" name=\"Note\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"(\\bdashed\\s+|\\bdotted\\s+)?(&lt;(/n|\\\\n|n/|n\\\\|[a-g]([+-]*|[0-7]))?&gt;|tie|slur|[~])\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"^(/|[a-g]([+-]*|[0-7]))\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"\\bbm\\b(\\s+with\\s+staff\\s+(below|above)\\b)?\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"\\bes?bm\\b\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"\\balt\\s+[1-9]\\b\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"\\bhs\\s+\" />\n\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t<IncludeRules context=\"Macro\" />\n      </context>\n\n\n      <context attribute=\"Note Attribute\" lineEndContext=\"#pop\" name=\"Bracket\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectChar attribute=\"Special Char\" context=\"#pop\" char=\"]\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\s;,]+\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"\\b(grace|xnote|cue|diam|up|down)\\b\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"\\b(slash|len|pad|ho|dist)\\s*[0-9.+-]*\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"Bracket With\" String=\"\\bwith\\s*(?=[A-Z&quot;^&gt;.-])\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"Bracket Hs\" String=\"\\bhs\\s*(?=[A-Z&quot;])\" />\n\t<RegExpr attribute=\"Location\" context=\"#stay\" String=\"=([a-z]|_[a-z][a-z_0-9]*)\\b\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"\\bc\\b\" />\n\t<IncludeRules context=\"Macro\" />\n      </context>\n\n\n      <context attribute=\"Note Attribute\" lineEndContext=\"#pop\" name=\"Bracket With\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n\t<RegExpr attribute=\"Note Attribute\" context=\"#stay\" String=\"[&gt;.^-]+\" />\n\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\s,]+\" />\n\t<IncludeRules context=\"Macro\" />\n      </context>\n\n\n      <context attribute=\"Note Attribute\" lineEndContext=\"#pop\" name=\"Bracket Hs\"\n      \t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n\t<IncludeRules context=\"Macro\" />\n      </context>\n\n\n      <context attribute=\"Note\" lineEndContext=\"#pop\" name=\"Note Probably\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr attribute=\"Note\" context=\"#pop\" String=\"[a-grs]*\" />\n      </context>\n\n\n      <context attribute=\"Tuplet\" lineEndContext=\"#pop\" name=\"Tuplet\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr attribute=\"Tuplet\" context=\"#pop\" String=\"\\s*(above|below)?\\s*[0-9]{1,2}(y|n|num)?(\\s*,\\s*[0-9]{1,2}\\.?([+][0-9]{1,2}\\.?)*)?\" />\n      </context>\n\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Location\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\s+-]+\" />\n\t<Float attribute=\"Normal Text\" context=\"#stay\" />\n\t<RegExpr attribute=\"Location\" context=\"#stay\" String=\"\\btime\\b\" />\n\t<IncludeRules context=\"Macro\" />\n      </context>\n\n\n      <context attribute=\"Location Probably\" lineEndContext=\"#pop\" name=\"Location Probably\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr attribute=\"Location Probably\" context=\"#pop\" String=\"[h-qt-z]|_[a-z][a-z_0-9]*\" />\n      </context>\n\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n\t<IncludeRules context=\"##Alerts\" />\n      </context>\n\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n        <RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[\\\\][][{}%#&quot;nb|^:,\\\\/ ]\" />\n        <StringDetect attribute=\"String Special\" context=\"Special Char\" String=\"\\(\" />\n\t<StringDetect attribute=\"String Special\" context=\"Font Name\" String=\"\\f(\" />\n\t<StringDetect attribute=\"String Special\" context=\"Font Size\" String=\"\\s(\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"\\\\v\\(-?[0-9]{1,3}\\)\" />\n\t<RegExpr attribute=\"String Lyrics\" context=\"#stay\" String=\"[~&lt;&gt;|^]\" />\n\t<RegExpr attribute=\"String Lyrics\" context=\"#stay\" String=\"[-+]?[0-9]+\\|\" />\n      </context>\n\n\n      <context attribute=\"String Special\" lineEndContext=\"#stay\" name=\"Special Char\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"String Special\" context=\"#pop\" char=\")\" />\n\t<keyword attribute=\"String Special\" context=\"#stay\" String=\"mupspecialchars\" />\n\t<keyword attribute=\"String Special\" context=\"#stay\" String=\"mupmusicchars\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[AaEeOo]['`:^~](?=\\))\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[IiUu]['`:^](?=\\))\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[Nn]~(?=\\))\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[Yy]:(?=\\))\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[LlOo]/(?=\\))\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[Cc],(?=\\))\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"(&gt;&gt;|&lt;&lt;|``|'')(?=\\))\" />\n\t<RegExpr attribute=\"String Error\" context=\"#stay\" String=\"[^)&quot;]+\" />\n      </context>\n\n\n      <context attribute=\"String Special\" lineEndContext=\"#stay\" name=\"Font Name\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"String Special\" context=\"#pop\" char=\")\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[ABCHNPT][RBIX](?=\\))\" />\n\t<keyword attribute=\"String Special\" context=\"Font Style\" String=\"mupfontnames\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"(PV|previous)(?=\\))\" />\n\t<RegExpr attribute=\"String Error\" context=\"#stay\" String=\"[^ )&quot;]+\" />\n      </context>\n\n\n      <context attribute=\"String Special\" lineEndContext=\"#stay\" name=\"Font Style\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"String Special\" context=\"#stay\" String=\"\\s+\" />\n\t<keyword attribute=\"String Special\" context=\"#stay\" String=\"mupfontstyles\" />\n\t<RegExpr attribute=\"String Error\" context=\"#stay\" String=\"[^ )&quot;]+\" />\n      </context>\n\n\n      <context attribute=\"String Special\" lineEndContext=\"#stay\" name=\"Font Size\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"String Special\" context=\"#pop\" char=\")\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"[-+]?[0-9]+(?=\\))\" />\n\t<RegExpr attribute=\"String Special\" context=\"#stay\" String=\"(PV|previous)(?=\\))\" />\n\t<RegExpr attribute=\"String Error\" context=\"#stay\" String=\"[^ )&quot;]+\" />\n      </context>\n\n\n      <context attribute=\"Macro\" lineEndContext=\"#pop\" name=\"Macro\">\n\t<keyword attribute=\"Macro\" context=\"#stay\" String=\"mupmacrodirectives_start\" beginRegion=\"macro\" />\n\t<keyword attribute=\"Macro\" context=\"#stay\" String=\"mupmacrodirectives_end\" endRegion=\"macro\" />\n\t<keyword attribute=\"Macro\" context=\"#stay\" String=\"mupmacrodirectives\" />\n\t<RegExpr attribute=\"Macro\" context=\"Macro Location\" String=\"[A-Z][A-Z0-9_]*(?=\\.[xynews]\\b)\" />\n\t<RegExpr attribute=\"Macro\" context=\"#stay\" String=\"[A-Z][A-Z0-9_]*\" />\n\t<DetectChar attribute=\"Macro\" context=\"#stay\" char=\"@\" endRegion=\"macro\" />\n      </context>\n\n\n      <context attribute=\"Location\" lineEndContext=\"#pop\" name=\"Macro Location\"\n\t\tfallthrough=\"true\" fallthroughContext=\"#pop\">\n\t<RegExpr attribute=\"Location Probably\" context=\"#pop\" String=\"..\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"       defStyleNum=\"dsNormal\" />\n      <itemData name=\"Context\"           defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Special Char\"      defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Parameter\"         defStyleNum=\"dsChar\" />\n      <itemData name=\"Value\"\t         defStyleNum=\"dsFloat\" />\n      <itemData name=\"Unset Command\"     defStyleNum=\"dsFloat\"   bold=\"1\" />\n      <itemData name=\"Comment\"           defStyleNum=\"dsComment\" />\n      <itemData name=\"Macro\"             defStyleNum=\"dsOthers\"  color=\"#11F\" selColor=\"#1FF\" />\n      <itemData name=\"Print Command\"     defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Barline\"           defStyleNum=\"dsDecVal\"  color=\"#c62\" />\n      <itemData name=\"Newscore\"          defStyleNum=\"dsDecVal\"  color=\"#c62\" bold=\"1\" />\n      <itemData name=\"Note\"\t         defStyleNum=\"dsNormal\" />\n      <itemData name=\"Note Attribute\"    defStyleNum=\"dsNormal\"  italic=\"1\" color=\"#07b\" />\n      <itemData name=\"Tuplet\"            defStyleNum=\"dsNormal\"  color=\"#035\" />\n      <itemData name=\"Location\"          defStyleNum=\"dsKeyword\" color=\"#0C4\" bold=\"1\" />\n      <itemData name=\"Location Probably\" defStyleNum=\"dsKeyword\" color=\"#0C4\" bold=\"0\" />\n      <itemData name=\"String\"            defStyleNum=\"dsString\" />\n      <itemData name=\"String Special\"    defStyleNum=\"dsString\" bold=\"1\" />\n      <itemData name=\"String Error\"      defStyleNum=\"dsError\" />\n      <itemData name=\"String Lyrics\"     defStyleNum=\"dsString\"  color=\"#800\" />\n      <itemData name=\"Lyrics\"            defStyleNum=\"dsBaseN\"   bold=\"1\" />\n      <itemData name=\"Error\"             defStyleNum=\"dsError\"   color=\"black\" />\n    </itemDatas>\n\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"/>\n    </comments>\n    <keywords casesensitive=\"1\" additionalDeliminator=\"~'`@#+-\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/mustache.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY name          \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY attributeName \"(\\s|^)[A-Za-z_:\\*#\\(\\[][\\)\\]\\w\\.:_-]*\">\n\t<!ENTITY entref        \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n\t<!ENTITY tag           \"&lt;\\s*(&name;|&gt;)\">\n\t<!-- Handlebars identifier -->\n\t<!ENTITY identifier    \"([a-zA-Z_$:\\?]|[^[:ascii:]])([\\w$:\\?\\-]|[^[:ascii:]])*\">\n]>\n\n<!--\n    Syntax Highlighting Defintion of\n    Mustache / Handlebars / Ractive templates for Kate.\n   ================================================================\n    This file is part of the KDE's KSyntaxHighlighting framework.\n\n    Based on the HTML syntax highlighting file, by Wilbert\n    Berendsen (wilbert@kde.nl), and in the Mustache syntax files\n    for Vim, available at:\n      https://github.com/mustache/vim-mustache-handlebars\n\n    This highlighter is also applicable to the templates of\n    Ractive.js, Hogan.js and Hulk.js.\n\n    This file is also used within the HTML highlighter,\n    inside the <script> tags.\n\n    FIXME: The support of Mustache variables in CSS is incomplete,\n    since variables aren't highlighted in many contexts.\n    This highlighter doesn't offer support for TypeScript and JSX\n    in the <script> tag.\n\n    TODO: This code can be generated by a script, in the same way\n    as the PHP highlight, injecting the \"MustacheVariables\" context\n    (via IncludeRules) in the HTML highlighter.\n\n    Change log:\n     * v2 [2019-02-24]: Also highlight template files (HTML).\n                        Improve support for Handlebars.\n     * v1 [2019-02-10]: Initial version\n-->\n\n<language name=\"Mustache/Handlebars (HTML)\" version=\"2\" kateversion=\"5.0\"\n          section=\"Markup\" priority=\"1\" mimetype=\"\"\n          extensions=\"*.mustache;*.handlebars;*.hbs;*.ractive;*.hogan;*.hulk;*.html.mst;*.html.mu;*.html.rac\"\n          author=\"Nibaldo González (nibgonz@gmail.com), based on the HTML highlighter by Wilbert Berendsen (wilbert@kde.nl)\"\n          license=\"MIT\">\n\n<highlighting>\n\n\t<contexts>\n\n\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"CSS\" attribute=\"Element Tag\" String=\"&lt;style\\b\" insensitive=\"true\" beginRegion=\"style\" />\n\t\t\t<RegExpr context=\"JS\" attribute=\"Element Tag\" String=\"&lt;script\\b\" insensitive=\"true\" beginRegion=\"script\" />\n\t\t\t<IncludeRules context=\"Base\" />\n\t\t</context>\n\n\t\t<!-- NOTE: Include this context within the <script> tag in the HTML highlighter -->\n\t\t<context name=\"Base\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\n\t\t\t<StringDetect context=\"CDATA\" attribute=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n\t\t\t<RegExpr context=\"Doctype\" attribute=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" insensitive=\"true\" beginRegion=\"doctype\"  />\n\t\t\t<IncludeRules context=\"FindPI\" />\n\n\t\t\t<IncludeRules context=\"FindTags\" />\n\t\t\t<IncludeRules context=\"FindElementTagEnd\" />\n\t\t\t<IncludeRules context=\"FindComments\" />\n\t\t\t<IncludeRules context=\"FindDTDRules\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t</context>\n\n\t\t<!-- Mustache/Handlebars Variables -->\n\n\t\t<context name=\"MustacheVariables\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<StringDetect context=\"#stay\" attribute=\"Normal Text\" String=\"\\{{\" />\n\t\t\t<Detect2Chars context=\"StartMustacheVariable\" char=\"{\" char1=\"{\" lookAhead=\"true\" />\n\t\t</context>\n\t\t<context name=\"StartMustacheVariable\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Escaped -->\n\t\t\t<RegExpr context=\"#pop!MustacheRawBlockContent\" attribute=\"Mustache Block\" String=\"\\{{4}[^/].*\\}{4}\" minimal=\"true\" beginRegion=\"HandlebarsRawBlock\" />\n\t\t\t<!-- Sections -->\n\t\t\t<!-- For helpers (not included because it's redundant):\n\t\t\t       Start: \\{\\{~?#?\\s*(?=(if|unless|with|link\\-to|each(\\-in)?)\\b)\n\t\t\t       End:   \\{\\{~?/\\s*(?=(if|unless|with|link\\-to|each(\\-in)?)\\b)  -->\n\t\t\t<RegExpr context=\"#pop!MustacheVariableBlock\" attribute=\"Mustache Block\" String=\"\\{\\{~?\\s*else(\\s+(if|unless|with|link\\-to|each(\\-in)?))?\\b\" />\n\t\t\t<RegExpr context=\"#pop!MustacheVariableBlock\" attribute=\"Mustache Block\" String=\"\\{\\{~?[#\\^][&gt;\\*]?\\s*&identifier;\\b\" beginRegion=\"MustacheBlock\" />\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Mustache Block\" String=\"\\{\\{~?/\\s*&identifier;\\s*\\}\\}\" endRegion=\"MustacheBlock\" />\n\t\t\t<RegExpr context=\"#pop!MustacheVariableBlockEndFolding\" attribute=\"Mustache Block\" String=\"\\{\\{~?/\\s*&identifier;\\b\" />\n\t\t\t<RegExpr context=\"#pop!MustacheVariableBlock\" attribute=\"Mustache Block\" String=\"\\{\\{~?[#\\^/]\" />\n\t\t\t<!-- Comments -->\n\t\t\t<StringDetect context=\"#pop!MustacheBlockComment\" attribute=\"Comment\" String=\"{{!--\" beginRegion=\"MustacheBlockComment\" /> <!-- Handlebars -->\n\t\t\t<StringDetect context=\"#pop!MustacheInlineComment\" attribute=\"Comment\" String=\"{{!\" beginRegion=\"MustacheInlineComment\" />\n\t\t\t<!-- Variables -->\n\t\t\t<StringDetect context=\"#pop!MustachePartial\" attribute=\"Mustache Variable\" String=\"{{&lt;\" />\n\t\t\t<StringDetect context=\"#pop!MustachePartial\" attribute=\"Mustache Variable\" String=\"{{&gt;\" />\n\t\t\t<StringDetect context=\"#pop!MustacheMarkerSet\" attribute=\"Mustache Variable\" String=\"{{=\" />\n\t\t\t<StringDetect context=\"#pop!MustacheVariable\" attribute=\"Mustache Variable\" String=\"{{$\" />\n\t\t\t<RegExpr context=\"#pop!MustacheVariableUnescape\" attribute=\"Mustache Variable Unescape\" String=\"\\{\\{\\{\\s*(log|link)\\b\" />\n\t\t\t<RegExpr context=\"#pop!MustacheVariable\" attribute=\"Mustache Variable\" String=\"\\{\\{\\s*(log|link)\\b\" />\n\n\t\t\t<StringDetect context=\"#pop!MustacheVariableUnescape\" attribute=\"Mustache Variable Unescape\" String=\"{{{\" />\n\t\t\t<Detect2Chars context=\"#pop!MustacheVariable\" attribute=\"Mustache Variable\" char=\"{\" char1=\"{\" />\n\t\t</context>\n\n\t\t<context name=\"MustacheRawBlockContent\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Mustache Block\" String=\"\\{{4}/.*\\}{4}\" minimal=\"true\" endRegion=\"HandlebarsRawBlock\" />\n\t\t</context>\n\n\t\t<context name=\"MustachePartial\" attribute=\"Mustache Partial\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Mustache Variable\" char=\"}\" char1=\"}\" />\n\t\t\t<IncludeRules context=\"MustacheInside\" />\n\t\t</context>\n\t\t<context name=\"MustacheMarkerSet\" attribute=\"Mustache Marker Set\" lineEndContext=\"#stay\">\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Mustache Variable\" String=\"=}}\" />\n\t\t</context>\n\n\t\t<context name=\"MustacheVariableBlock\" attribute=\"Mustache Inside\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Mustache Block\" char=\"}\" char1=\"}\" />\n\t\t\t<IncludeRules context=\"MustacheInside\" />\n\t\t</context>\n\t\t<context name=\"MustacheVariableBlockEndFolding\" attribute=\"Mustache Inside\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Mustache Block\" char=\"}\" char1=\"}\" endRegion=\"MustacheBlock\" />\n\t\t\t<IncludeRules context=\"MustacheInside\" />\n\t\t</context>\n\t\t<context name=\"MustacheVariable\" attribute=\"Mustache Inside\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Mustache Variable\" char=\"}\" char1=\"}\" />\n\t\t\t<IncludeRules context=\"MustacheInside\" />\n\t\t</context>\n\t\t<context name=\"MustacheVariableUnescape\" attribute=\"Mustache Inside\" lineEndContext=\"#stay\">\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Mustache Variable Unescape\" String=\"}}}\" />\n\t\t\t<IncludeRules context=\"MustacheInside\" />\n\t\t</context>\n\n\t\t<!-- Within the variable -->\n\t\t<context name=\"MustacheInside\" attribute=\"Mustache Inside\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"MustacheStringDQ\" attribute=\"String\" char=\"&quot;\" />\n\t\t\t<DetectChar context=\"MustacheStringSQ\" attribute=\"String\" char=\"&apos;\" />\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Symbol\" String=\".[]|\" />\n\t\t\t<RegExpr context=\"MustacheSymbolValue\" attribute=\"Attribute\" String=\"&attributeName;(?=\\s*\\=)\" />\n\t\t</context>\n\t\t<context name=\"MustacheStringDQ\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"String\" char=\"&quot;\" />\n\t\t\t<LineContinue context=\"#stay\" attribute=\"Escape\" />\n\t\t\t<HlCStringChar context=\"#stay\" attribute=\"Escape\" />\n\t\t</context>\n\t\t<context name=\"MustacheStringSQ\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"String\" char=\"&apos;\" />\n\t\t\t<LineContinue context=\"#stay\" attribute=\"Escape\" />\n\t\t\t<HlCStringChar context=\"#stay\" attribute=\"Escape\" />\n\t\t</context>\n\t\t<context name=\"MustacheSymbolValue\" attribute=\"Mustache Inside\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!MustacheValue\" attribute=\"Symbol\" char=\"=\" />\n\t\t\t<DetectSpaces />\n\t\t</context>\n\t\t<context name=\"MustacheValue\" attribute=\"Mustache Inside\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Number\" String=\"\\d+(?=[\\s\\}\\)\\]]|$)\" />\n\t\t</context>\n\n\t\t<context name=\"MustacheBlockComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Comment\" String=\"--}}\" endRegion=\"MustacheBlockComment\" />\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t</context>\n\t\t<context name=\"MustacheInlineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Comment\" char=\"}\" char1=\"}\" endRegion=\"MustacheInlineComment\" />\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t</context>\n\n\t\t<!-- Tags -->\n\n\t\t<!-- Start tag -->\n\t\t<context name=\"FindTags\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Common HTML tags (obtained from 'html.xml') -->\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;pre\" insensitive=\"true\" beginRegion=\"pre\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;div\" insensitive=\"true\" beginRegion=\"div\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;table\" insensitive=\"true\" beginRegion=\"table\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;ul\" insensitive=\"true\" beginRegion=\"ul\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;ol\" insensitive=\"true\" beginRegion=\"ol\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;dl\" insensitive=\"true\" beginRegion=\"dl\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;article\" insensitive=\"true\" beginRegion=\"article\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;aside\" insensitive=\"true\" beginRegion=\"aside\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;details\" insensitive=\"true\" beginRegion=\"details\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;figure\" insensitive=\"true\" beginRegion=\"figure\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;footer\" insensitive=\"true\" beginRegion=\"footer\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;header\" insensitive=\"true\" beginRegion=\"header\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;main\" insensitive=\"true\" beginRegion=\"main\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;nav\" insensitive=\"true\" beginRegion=\"nav\" />\n\t\t\t<WordDetect context=\"ElementTag\" attribute=\"Element Tag\" String=\"&lt;section\" insensitive=\"true\" beginRegion=\"section\" />\n\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Element Tag\" String=\"&lt;\\s*&gt;\" />\n\t\t\t<RegExpr context=\"ElementTag\" attribute=\"Element Tag\" String=\"&tag;\" />\n\t\t</context>\n\t\t<context name=\"FindEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"EntityRef\" String=\"&entref;\" />\n\t\t</context>\n\n\t\t<!-- Tag end: </tag> -->\n\t\t<context name=\"FindElementTagEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Common HTML tags (obtained from 'html.xml') -->\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/pre\" insensitive=\"true\" endRegion=\"pre\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/div\" insensitive=\"true\" endRegion=\"div\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/table\" insensitive=\"true\" endRegion=\"table\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/ul\" insensitive=\"true\" endRegion=\"ul\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/ol\" insensitive=\"true\" endRegion=\"ol\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/dl\" insensitive=\"true\" endRegion=\"dl\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/article\" insensitive=\"true\" endRegion=\"article\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/aside\" insensitive=\"true\" endRegion=\"aside\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/details\" insensitive=\"true\" endRegion=\"details\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/figure\" insensitive=\"true\" endRegion=\"figure\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/footer\" insensitive=\"true\" endRegion=\"footer\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/header\" insensitive=\"true\" endRegion=\"header\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/main\" insensitive=\"true\" endRegion=\"main\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/nav\" insensitive=\"true\" endRegion=\"nav\" />\n\t\t\t<WordDetect context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/sectiond\" insensitive=\"true\" endRegion=\"section\" />\n\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Element Tag\" String=\"&lt;/\\s*&gt;\" />\n\t\t\t<RegExpr context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/\\s*&name;\" />\n\t\t</context>\n\t\t<context name=\"ElementTagEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Element Tag\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<!-- Inside the tag -->\n\t\t<context name=\"ElementTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Element Tag\" char=\"/\" char1=\"&gt;\" />\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Element Tag\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\t\t<context name=\"FindAttributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Attribute\" String=\"&attributeName;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\=(?=\\s*/?&gt;)\" />\n\t\t\t<DetectChar context=\"Value\" attribute=\"Symbol\" char=\"=\" />\n\t\t</context>\n\n\t\t<context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!ValueNQ\">\n\t\t\t<DetectChar context=\"#pop!ValueDQ\" attribute=\"Value\" char=\"&quot;\" />\n\t\t\t<DetectChar context=\"#pop!ValueSQ\" attribute=\"Value\" char=\"&apos;\" />\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Number\" String=\"\\d+(?=\\s|/?&gt;|$)\" />\n\t\t\t<DetectSpaces />\n\t\t</context>\n\t\t<context name=\"ValueDQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Value\" char=\"&quot;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t</context>\n\t\t<context name=\"ValueSQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Value\" char=\"&apos;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t</context>\n\t\t<context name=\"ValueNQ\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Value\" String=\"/(?!&gt;)\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Value\" String=\"[^/&gt;&lt;&quot;&apos;\\s]\" />\n\t\t</context>\n\n\t\t<!-- HTML -->\n\t\t<!-- NOTE: This contexts are duplicated from 'html.xml', adding the Mustache variables -->\n\n\t\t<context name=\"FindComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<StringDetect context=\"Comment\" attribute=\"Comment\" String=\"&lt;!--\" beginRegion=\"Comment\" />\n\t\t</context>\n\t\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces/>\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Comment\" String=\"--&gt;\" endRegion=\"Comment\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"-(-(?!-&gt;))+\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t</context>\n\n\t\t<context name=\"FindPEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n\t\t\t<RegExpr attribute=\"PEntityRef\" context=\"#stay\" String=\"%&name;;\" />\n\t\t\t<AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;%\" />\n\t\t</context>\n\n\t\t<context name=\"FindDTDRules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"Doctype Markupdecl\" attribute=\"Doctype\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n\t\t</context>\n\t\t<context name=\"FindPI\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"PI\" attribute=\"Processing Instruction\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n\t\t</context>\n\n\t\t<context name=\"CDATA\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<StringDetect context=\"#pop\" attribute=\"CDATA\" String=\"]]&gt;\" endRegion=\"cdata\" />\n\t\t\t<StringDetect context=\"#stay\" attribute=\"EntityRef\" String=\"]]&amp;gt;\" />\n\t\t</context>\n\n\t\t<context name=\"PI\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Processing Instruction\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n\t\t</context>\n\n\t\t<context name=\"Doctype\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Doctype\" char=\"&gt;\" endRegion=\"doctype\" />\n\t\t\t<DetectChar context=\"Doctype Internal Subset\" attribute=\"Doctype\" char=\"[\" beginRegion=\"int_subset\" />\n\t\t</context>\n\t\t<context name=\"Doctype Internal Subset\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Doctype\" char=\"]\" endRegion=\"int_subset\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindDTDRules\" />\n\t\t\t<IncludeRules context=\"FindComments\" />\n\t\t\t<IncludeRules context=\"FindPI\" />\n\t\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t\t</context>\n\t\t<context name=\"Doctype Markupdecl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n\t\t\t<DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n\t\t</context>\n\t\t<context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t\t</context>\n\t\t<context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t\t</context>\n\n\t\t<!-- CSS -->\n\n\t\t<context name=\"CSS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Element Tag\" char=\"/\" char1=\"&gt;\" endRegion=\"style\" />\n\t\t\t<DetectChar context=\"#pop!CSSContent\" attribute=\"Element Tag\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\t\t<context name=\"CSSContent\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop!ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/style\\b\" insensitive=\"true\" endRegion=\"style\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\n\t\t\t<DetectChar context=\"CSS-RuleSet\" attribute=\"Normal Text\" char=\"{\" beginRegion=\"ruleset\" />\n\t\t\t<DetectChar context=\"CSS-SelectorAttr\" attribute=\"CSS: Selector Attribute\" char=\"[\" />\n\t\t\t<IncludeRules context=\"##CSS\" includeAttrib=\"true\"/>\n\t\t</context>\n\n\t\t<!-- Overwrite some rules of 'css.xml' to add Mustache variables -->\n\t\t<context name=\"CSS-RuleSet\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Normal Text\" char=\"}\" endRegion=\"ruleset\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"RuleSet##CSS\" />\n\t\t</context>\n\t\t<context name=\"CSS-SelectorAttr\" attribute=\"CSS: Selector Attribute\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"CSS: Selector Attribute\" char=\"]\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"SelectorAttr##CSS\" />\n\t\t</context>\n\n\t\t<!-- JavaScript -->\n\n\t\t<context name=\"JS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!JSContent\" attribute=\"Element Tag\" char=\"&gt;\" />\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Element Tag\" char=\"/\" char1=\"&gt;\" endRegion=\"script\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<context name=\"JSContent\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop!ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n\t\t\t<RegExpr context=\"JSCommentClose\" attribute=\"Comment\" String=\"//(?=.*&lt;/script\\b)\" insensitive=\"true\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"OverwriteJavaScript\" />\n\t\t\t<IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n\t\t</context>\n\t\t<context name=\"JSCommentClose\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop#pop!ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n\t\t</context>\n\n\t\t<!-- Overwrite some rules of 'javascript.xml' to add Mustache variables -->\n\t\t<context name=\"OverwriteJavaScript\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"JavaScript-Template\" attribute=\"JS: Template\" char=\"`\" />\n\t\t\t<StringDetect context=\"JavaScript-RawTemplate\" attribute=\"JS: Template\" String=\"String.raw`\" />\n\t\t\t<DetectChar context=\"JavaScript-String\" attribute=\"String\" char=\"&quot;\" />\n\t\t\t<DetectChar context=\"JavaScript-StringSQ\" attribute=\"String\" char=\"'\" />\n\t\t\t<DetectChar context=\"JavaScript-Object\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"?\" />\n\t\t</context>\n\t\t<context name=\"JavaScript-Object\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"OverwriteJavaScript\" />\n\t\t\t<IncludeRules context=\"Object##JavaScript\" includeAttrib=\"true\" />\n\t\t</context>\n\t\t<context name=\"JavaScript-Template\" attribute=\"JS: Template\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"JS: Template\" char=\"`\" />\n\t\t\t<Detect2Chars context=\"JavaScript-Substitution\" attribute=\"JS: Substitution\" char=\"$\" char1=\"{\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"Template##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"JavaScript-Substitution\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"JS: Substitution\" char=\"}\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"OverwriteJavaScript\" />\n\t\t\t<IncludeRules context=\"Substitution##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"JavaScript-String\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"String\" char=\"&quot;\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"String##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"JavaScript-StringSQ\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"String\" char=\"'\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t\t<IncludeRules context=\"String SQ##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"JavaScript-RawTemplate\" attribute=\"JS: Template\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"JS: Template\" char=\"`\" />\n\t\t\t<IncludeRules context=\"MustacheVariables\" />\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\"       defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Comment\"           defStyleNum=\"dsComment\" />\n\n\t\t<itemData name=\"Mustache Inside\"   defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Mustache Block\"    defStyleNum=\"dsFunction\" bold=\"1\" spellChecking=\"false\" />\n\t\t<itemData name=\"Mustache Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n\t\t<itemData name=\"Mustache Variable Unescape\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n\t\t<itemData name=\"Mustache Partial\"  defStyleNum=\"dsChar\" spellChecking=\"false\" />\n\t\t<itemData name=\"Mustache Marker Set\" defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n\t\t<itemData name=\"String\"            defStyleNum=\"dsString\" />\n\t\t<itemData name=\"Number\"            defStyleNum=\"dsDecVal\" />\n\n\t\t<itemData name=\"Element Tag\"       defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t<itemData name=\"Attribute\"         defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n\t\t<itemData name=\"Value\"             defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t<itemData name=\"Symbol\"            defStyleNum=\"dsOperator\" />\n\t\t<itemData name=\"Escape\"            defStyleNum=\"dsSpecialChar\" />\n\t\t<itemData name=\"Error\"             defStyleNum=\"dsError\" spellChecking=\"false\" />\n\n\t\t<itemData name=\"EntityRef\"         defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n\t\t<itemData name=\"PEntityRef\"        defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n\t\t<itemData name=\"CDATA\"             defStyleNum=\"dsBaseN\" bold=\"1\" spellChecking=\"false\" />\n\t\t<itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t<itemData name=\"Doctype\"           defStyleNum=\"dsDataType\" bold=\"1\" spellChecking=\"false\" />\n\n\t\t<!-- CSS itemDatas -->\n\t\t<itemData name=\"CSS: Selector Attribute\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n\t\t<!-- JavaScript itemDatas -->\n\t\t<itemData name=\"JS: Template\"     defStyleNum=\"dsVerbatimString\" />\n\t\t<itemData name=\"JS: Substitution\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<comments>\n\t\t<comment name=\"multiLine\" start=\"{{!\" end=\"}}\" />\n\t</comments>\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/nagios.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Nagios\" section=\"Configuration\" extensions=\"*.cfg\" version=\"3\" kateversion=\"2.4\" author=\"Gastón Martini\" license=\"GPL\" casesensitive=\"true\">\n    <highlighting>\n        <list name=\"Objects\">\n            <item>host</item>\n            <item>hostgroup</item>\n            <item>service</item>\n            <item>servicegroup</item>\n            <item>contact</item>\n            <item>contactgroup</item>\n            <item>timeperiod</item>\n            <item>command</item>\n            <item>servicedependency</item>\n            <item>serviceescalation</item>\n            <item>hostdependency</item>\n            <item>hostescalation</item>\n            <item>hostextinfo</item>\n            <item>serviceextinfo</item>\n        </list>\n        <contexts>\n            <context name=\"Nagios\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces/>\n                <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\" firstNonSpace=\"true\"/> <!-- or column=\"0\"? -->\n                <DetectChar char=\"$\" context=\"Macro Definition\" firstNonSpace=\"true\" lookAhead=\"true\"/>\n                <StringDetect String=\"define\" attribute=\"Definition\" context=\"Definition\" firstNonSpace=\"true\"/>\n                <IncludeRules context=\"Variable\" includeAttrib=\"true\"/>\n            </context>\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <IncludeRules context=\"##Alerts\" />\n            </context>\n            <context name=\"Macro Definition\" attribute=\"Macro Definition\" lineEndContext=\"#pop\">\n                <RangeDetect char=\"$\" char1=\"$\" firstNonSpace=\"true\" context=\"#stay\"/>\n                <DetectChar char=\"=\" attribute=\"Symbol\" context=\"Value\"/>\n            </context>\n            <context name=\"Variable\" attribute=\"Variable\" lineEndContext=\"#pop\">\n                <RegExpr String=\"[A-Za-z0-9_]+\\s*\" firstNonSpace=\"true\" context=\"#stay\"/>\n                <DetectChar char=\"=\" attribute=\"Symbol\" context=\"Value\"/>\n            </context>\n            <context name=\"Definition\" attribute=\"Definition\" lineEndContext=\"#stay\">\n                <DetectSpaces/>\n                <keyword String=\"Objects\" attribute=\"Object\" context=\"#stay\"/>\n                <DetectChar char=\"{\" attribute=\"Definition Block\" context=\"Object Directives\" beginRegion=\"Object Definition\"/>\n                <RegExpr String=\"[^{]+\" attribute=\"Invalid Text\" context=\"#stay\"/>\n            </context>\n            <context name=\"Object Directives\" attribute=\"Object Directive\" lineEndContext=\"#stay\">\n                <DetectSpaces/>\n                <DetectChar char=\";\" attribute=\"Comment\" context=\"Comment\" firstNonSpace=\"true\"/>\n                <RegExpr String=\"[A-Za-z0-9_]+\\s*\" firstNonSpace=\"true\" attribute=\"Object Directive\" context=\"Value\"/>\n                <DetectChar char=\"}\" attribute=\"Definition Block\" context=\"Nagios\" endRegion=\"Object Definition\"/>\n            </context>\n            <context name=\"Value\" attribute=\"Value\" lineEndContext=\"#pop\">\n                <RangeDetect char=\"$\" char1=\"$\" attribute=\"Macro\" context=\"#stay\"/>\n                <Float attribute=\"Float\" />\n                <Int attribute=\"Int\" />\n                <DetectChar char=\";\" attribute=\"Comment\" context=\"Comment\" />\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Object\" defStyleNum=\"dsDataType\"/>\n            <itemData name=\"Object Directive\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Macro\" defStyleNum=\"dsFunction\"/>\n            <itemData name=\"Macro Definition\" defStyleNum=\"dsFunction\"/>\n            <itemData name=\"Value\" defStyleNum=\"dsString\"/>\n            <itemData name=\"Int\" defStyleNum=\"dsDecVal\"/>\n            <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n            <itemData name=\"Symbol\" defStyleNum=\"dsOthers\"/>\n            <itemData name=\"Definition\" defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"Definition Block\" defStyleNum=\"dsRegionMarker\"/>\n            <itemData name=\"Invalid Text\" defStyleNum=\"dsError\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <folding indentationsensitive=\"false\"/>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\"/>\n        </comments>\n        <keywords casesensitive=\"true\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/nasm.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  NASM Intel x86 assembly syntax\n\n  Created: Nicola Gigante <nicola.gigante@gmail.com>\n    Changes: Bogdan Drozdowski (bogdandr@op.pl)\n  Version: 1.3\n             Lyle Putnam (lcputnam@gmail.com)\n  Version: 1.4\n\nChanges from 1.0:\n  15/01/2006: version 1.1\n    Added the rol instruction (bytewise rotate left) to the keywords list.\n  17/01/2006: version 1.2\n    Remade the list of instructions directly from the nasm documentation.\n  22/04/2006: version 1.3 from Bogdan Drozdowski (bogdandr@op.pl):\n    Removed duplicates form the instruction list and made it alphabetical.\n    Added new instructions (some SSE* and 64-bit, NASM may not know all of them).\n    Corrections in register list and a few new ones (not 64-bit).\n    Changed regexes for hex, octal and bin numbers. Now words like\n      \"change\" and \"blah\" will NOT have the \"ch\" and \"ah\" coloured.\n  24/07/2011: Version 1.4 from Lyle Putnam (lcputnam@gmail.com):\n    The above change to fix the regex for hex numbers was incorrect on Kate\n    3.6.2. Fixed.\n\n  GNU GENERAL PUBLIC LICENCE\n\nThis program, including associated files, is free software.  You may\ndistribute it and/or modify it under the terms of the GNU General Public\nLicense as published by the Free Software Foundation; either Version 2 of\nthe license, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\nor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\nfor more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n-->\n<language name=\"Intel x86 (NASM)\" section=\"Assembler\" version=\"3\" kateversion=\"2.3\" extensions=\"*.asm;*.nasm\" mimetype=\"\" author=\"Nicola Gigante (nicola.gigante@gmail.com)\" license=\"GPLv2+\">\n  <highlighting>\n    <list name=\"registers\">\n      <!-- General purpose registers -->\n      <item>eax</item>\n      <item>ax</item>\n      <item>ah</item>\n      <item>al</item>\n      <item>ebx</item>\n      <item>bx</item>\n      <item>bh</item>\n      <item>bl</item>\n      <item>ecx</item>\n      <item>cx</item>\n      <item>ch</item>\n      <item>cl</item>\n      <item>edx</item>\n      <item>dx</item>\n      <item>dh</item>\n      <item>dl</item>\n      <item>ebp</item>\n      <item>bp</item>\n      <item>esi</item>\n      <item>si</item>\n      <item>edi</item>\n      <item>di</item>\n      <!--\n      <item>eip</item>\n      <item>ip</item>\n      -->\n      <item>esp</item>\n      <item>sp</item>\n      <!-- Segmentation registers -->\n      <item>cs</item>\n      <item>ds</item>\n      <item>es</item>\n      <item>fs</item>\n      <item>gs</item>\n      <item>ss</item>\n      <!-- Control registers -->\n      <item>cr0</item>\n      <!--<item>cr1</item>-->\n      <item>cr2</item>\n      <item>cr3</item>\n      <item>cr4</item>\n      <!-- Debug registers -->\n      <item>dr0</item>\n      <item>dr1</item>\n      <item>dr2</item>\n      <item>dr3</item>\n      <item>dr6</item>\n      <item>dr7</item>\n      <!-- x87 FPU Registers -->\n      <item>st</item>\n      <!-- MMX registers -->\n      <item>mm0</item>\n      <item>mm1</item>\n      <item>mm2</item>\n      <item>mm3</item>\n      <item>mm4</item>\n      <item>mm5</item>\n      <item>mm6</item>\n      <item>mm7</item>\n      <!-- XMM registers -->\n      <item>xmm0</item>\n      <item>xmm1</item>\n      <item>xmm2</item>\n      <item>xmm3</item>\n      <item>xmm4</item>\n      <item>xmm5</item>\n      <item>xmm6</item>\n      <item>xmm7</item>\n    </list>\n    <list name=\"instructions\">\n      <item>aaa</item>\n      <item>aad</item>\n      <item>aam</item>\n      <item>aas</item>\n      <item>adc</item>\n      <item>add</item>\n      <item>addpd</item>\n      <item>addps</item>\n      <item>addsd</item>\n      <item>addss</item>\n      <item>addsubpd</item>\n      <item>addsubps</item>\n      <item>and</item>\n      <item>andnpd</item>\n      <item>andnps</item>\n      <item>andpd</item>\n      <item>andps</item>\n      <item>arpl</item>\n      <item>bound</item>\n      <item>bsf</item>\n      <item>bsr</item>\n      <item>bswap</item>\n      <item>bt</item>\n      <item>btc</item>\n      <item>btr</item>\n      <item>bts</item>\n      <item>call</item>\n      <item>cbw</item>\n      <item>cwde</item>\n      <item>cwd</item>\n      <item>cdq</item>\n      <item>cdqe</item>\n      <item>cqo</item>\n      <item>clc</item>\n      <item>cld</item>\n      <item>clgi</item>\n      <item>cli</item>\n      <item>clts</item>\n      <item>clflush</item>\n      <item>cmc</item>\n      <item>cmova</item>\n      <item>cmovae</item>\n      <item>cmovb</item>\n      <item>cmovbe</item>\n      <item>cmovc</item>\n      <item>cmove</item>\n      <item>cmovg</item>\n      <item>cmovge</item>\n      <item>cmovl</item>\n      <item>cmovle</item>\n      <item>cmovna</item>\n      <item>cmovnae</item>\n      <item>cmovnb</item>\n      <item>cmovnbe</item>\n      <item>cmovnc</item>\n      <item>cmovne</item>\n      <item>cmovng</item>\n      <item>cmovnge</item>\n      <item>cmovnl</item>\n      <item>cmovnle</item>\n      <item>cmovno</item>\n      <item>cmovnp</item>\n      <item>cmovns</item>\n      <item>cmovnz</item>\n      <item>cmovo</item>\n      <item>cmovp</item>\n      <item>cmovpe</item>\n      <item>cmovpo</item>\n      <item>cmovs</item>\n      <item>cmovz</item>\n      <item>cmp</item>\n      <item>cmpeqpd</item>\n      <item>cmpeqps</item>\n      <item>cmpeqsd</item>\n      <item>cmpeqss</item>\n      <item>cmplepd</item>\n      <item>cmpleps</item>\n      <item>cmplesd</item>\n      <item>cmpless</item>\n      <item>cmpltpd</item>\n      <item>cmpltps</item>\n      <item>cmpltsd</item>\n      <item>cmpltss</item>\n      <item>cmpneqpd</item>\n      <item>cmpneqps</item>\n      <item>cmpneqsd</item>\n      <item>cmpneqss</item>\n      <item>cmpnlepd</item>\n      <item>cmpnleps</item>\n      <item>cmpnlesd</item>\n      <item>cmpnless</item>\n      <item>cmpnltpd</item>\n      <item>cmpnltps</item>\n      <item>cmpnltsd</item>\n      <item>cmpnltss</item>\n      <item>cmpordpd</item>\n      <item>cmpordps</item>\n      <item>cmpordsd</item>\n      <item>cmpordss</item>\n      <item>cmppd</item>\n      <item>cmpps</item>\n      <item>cmps</item>\n      <item>cmpsb</item>\n      <item>cmpsd</item>\n      <item>cmpss</item>\n      <item>cmpsw</item>\n      <item>cmpunordpd</item>\n      <item>cmpunordps</item>\n      <item>cmpunordsd</item>\n      <item>cmpunordss</item>\n      <item>cmpxchg</item>\n      <item>cmpxchg486</item>\n      <item>cmpxchg8b</item>\n      <item>cmpxchg16b</item>\n      <item>comisd</item>\n      <item>comiss</item>\n      <item>cpuid</item>\n      <item>cvtdq2pd</item>\n      <item>cvtdq2ps</item>\n      <item>cvtpd2dq</item>\n      <item>cvtpd2pi</item>\n      <item>cvtpd2ps</item>\n      <item>cvtpi2pd</item>\n      <item>cvtpi2ps</item>\n      <item>cvtps2dq</item>\n      <item>cvtps2pd</item>\n      <item>cvtps2pi</item>\n      <item>cvtsd2si</item>\n      <item>cvtsd2ss</item>\n      <item>cvtsi2sd</item>\n      <item>cvtsi2ss</item>\n      <item>cvtss2sd</item>\n      <item>cvtss2si</item>\n      <item>cvttpd2dq</item>\n      <item>cvttpd2pi</item>\n      <item>cvttps2dq</item>\n      <item>cvttps2pi</item>\n      <item>cvttsd2si</item>\n      <item>cvttss2si</item>\n      <item>daa</item>\n      <item>das</item>\n      <item>dec</item>\n      <item>div</item>\n      <item>divpd</item>\n      <item>divps</item>\n      <item>divsd</item>\n      <item>divss</item>\n      <item>emms</item>\n      <item>enter</item>\n      <item>f2xm1</item>\n      <item>fabs</item>\n      <item>fadd</item>\n      <item>faddp</item>\n      <item>fbld</item>\n      <item>fbstp</item>\n      <item>fchs</item>\n      <item>fclex</item>\n      <item>fnclex</item>\n      <item>fcmovb</item>\n      <item>fcmovbe</item>\n      <item>fcmove</item>\n      <item>fcmovnb</item>\n      <item>fcmovnbe</item>\n      <item>fcmovne</item>\n      <item>fcmovnu</item>\n      <item>fcmovu</item>\n      <item>fcom</item>\n      <item>fcomp</item>\n      <item>fcompp</item>\n      <item>fcomi</item>\n      <item>fcomip</item>\n      <item>fcos</item>\n      <item>fdecstp</item>\n      <item>fdisi</item>\n      <item>feni</item>\n      <item>fdiv</item>\n      <item>fdivr</item>\n      <item>fdivp</item>\n      <item>fdivrp</item>\n      <item>femms</item>\n      <item>ffree</item>\n      <item>ffreep</item>\n      <item>fiadd</item>\n      <item>ficom</item>\n      <item>ficomp</item>\n      <item>fidiv</item>\n      <item>fidivr</item>\n      <item>fild</item>\n      <item>fimul</item>\n      <item>fincstp</item>\n      <item>finit</item>\n      <item>fist</item>\n      <item>fistp</item>\n      <item>fisttp</item>\n      <item>fisub</item>\n      <item>fisubr</item>\n      <item>fld</item>\n      <item>fld1</item>\n      <item>fldl2e</item>\n      <item>fldl2t</item>\n      <item>fldlg2</item>\n      <item>fldln2</item>\n      <item>fldcw</item>\n      <item>fldenv</item>\n      <item>fldpi</item>\n      <item>fldz</item>\n      <item>fmul</item>\n      <item>fmulp</item>\n      <item>fndisi</item>\n      <item>fneni</item>\n      <item>fninit</item>\n      <item>fnop</item>\n      <item>fnsave</item>\n      <item>fnstcw</item>\n      <item>fnstenv</item>\n      <item>fnstsw</item>\n      <item>fnwait</item>\n      <item>fpatan</item>\n      <item>fptan</item>\n      <item>fprem</item>\n      <item>fprem1</item>\n      <item>frndint</item>\n      <item>frstor</item>\n      <item>fsave</item>\n      <item>fscale</item>\n      <item>fsetpm</item>\n      <item>fsin</item>\n      <item>fsincos</item>\n      <item>fsqrt</item>\n      <item>fst</item>\n      <item>fstp</item>\n      <item>fstcw</item>\n      <item>fstenv</item>\n      <item>fstsw</item>\n      <item>fsub</item>\n      <item>fsubr</item>\n      <item>fsubp</item>\n      <item>fsubrp</item>\n      <item>ftst</item>\n      <item>fucom</item>\n      <item>fucomp</item>\n      <item>fucompp</item>\n      <item>fucomi</item>\n      <item>fucomip</item>\n      <item>fwait</item>\n      <item>fxam</item>\n      <item>fxch</item>\n      <item>fxrstor</item>\n      <item>fxsave</item>\n      <item>fxtract</item>\n      <item>fyl2x</item>\n      <item>fyl2xp1</item>\n      <item>haddpd</item>\n      <item>haddps</item>\n      <item>hlt</item>\n      <item>hsubpd</item>\n      <item>hsubps</item>\n      <item>ibts</item>\n      <item>idiv</item>\n      <item>imul</item>\n      <item>in</item>\n      <item>inc</item>\n      <item>ins</item>\n      <item>insb</item>\n      <item>insd</item>\n      <item>insw</item>\n      <item>int</item>\n      <item>int1</item>\n      <item>int3</item>\n      <item>into</item>\n      <item>invd</item>\n      <item>invlpg</item>\n      <item>invlpga</item>\n      <item>iret</item>\n      <item>iretd</item>\n      <item>iretq</item>\n      <item>iretw</item>\n      <item>ja</item>\n      <item>jae</item>\n      <item>jb</item>\n      <item>jbe</item>\n      <item>jc</item>\n      <item>je</item>\n      <item>jg</item>\n      <item>jge</item>\n      <item>jl</item>\n      <item>jle</item>\n      <item>jna</item>\n      <item>jnae</item>\n      <item>jnb</item>\n      <item>jnbe</item>\n      <item>jnc</item>\n      <item>jne</item>\n      <item>jng</item>\n      <item>jnge</item>\n      <item>jnl</item>\n      <item>jnle</item>\n      <item>jno</item>\n      <item>jnp</item>\n      <item>jns</item>\n      <item>jnz</item>\n      <item>jo</item>\n      <item>jp</item>\n      <item>jpe</item>\n      <item>jpo</item>\n      <item>js</item>\n      <item>jz</item>\n      <item>jcxz</item>\n      <item>jecxz</item>\n      <item>jrcxz</item>\n      <item>jmp</item>\n      <item>lahf</item>\n      <item>lar</item>\n      <item>lddqu</item>\n      <item>ldmxcsr</item>\n      <item>lds</item>\n      <item>les</item>\n      <item>lea</item>\n      <item>leave</item>\n      <item>lfence</item>\n      <item>lfs</item>\n      <item>lgdt</item>\n      <item>lgs</item>\n      <item>lidt</item>\n      <item>lldt</item>\n      <item>lmsw</item>\n      <item>loadall</item>\n      <item>loadall286</item>\n      <item>lods</item>\n      <item>lodsb</item>\n      <item>lodsd</item>\n      <item>lodsq</item>\n      <item>lodsw</item>\n      <item>loop</item>\n      <item>loope</item>\n      <item>loopne</item>\n      <item>loopnz</item>\n      <item>loopz</item>\n      <item>lsl</item>\n      <item>lss</item>\n      <item>ltr</item>\n      <item>maskmovdqu</item>\n      <item>maskmovq</item>\n      <item>maxpd</item>\n      <item>maxps</item>\n      <item>maxsd</item>\n      <item>maxss</item>\n      <item>mfence</item>\n      <item>minpd</item>\n      <item>minps</item>\n      <item>minsd</item>\n      <item>minss</item>\n      <item>monitor</item>\n      <item>mov</item>\n      <item>movapd</item>\n      <item>movaps</item>\n      <item>movd</item>\n      <item>movddup</item>\n      <item>movdq2q</item>\n      <item>movdqa</item>\n      <item>movdqu</item>\n      <item>movhlps</item>\n      <item>movhpd</item>\n      <item>movhps</item>\n      <item>movlhps</item>\n      <item>movlpd</item>\n      <item>movlps</item>\n      <item>movmskpd</item>\n      <item>movmskps</item>\n      <item>movntdq</item>\n      <item>movnti</item>\n      <item>movntpd</item>\n      <item>movntps</item>\n      <item>movntq</item>\n      <item>movq</item>\n      <item>movq2dq</item>\n      <item>movs</item>\n      <item>movsb</item>\n      <item>movsd</item>\n      <item>movshdup</item>\n      <item>movsldup</item>\n      <item>movsq</item>\n      <item>movss</item>\n      <item>movsx</item>\n      <item>movsxd</item>\n      <item>movsw</item>\n      <item>movupd</item>\n      <item>movups</item>\n      <item>movzx</item>\n      <item>mul</item>\n      <item>mulpd</item>\n      <item>mulps</item>\n      <item>mulsd</item>\n      <item>mulss</item>\n      <item>mwait</item>\n      <item>neg</item>\n      <item>nop</item>\n      <item>not</item>\n      <item>or</item>\n      <item>orpd</item>\n      <item>orps</item>\n      <item>out</item>\n      <item>outs</item>\n      <item>outsb</item>\n      <item>outsw</item>\n      <item>outsd</item>\n      <item>packssdw</item>\n      <item>packsswb</item>\n      <item>packuswb</item>\n      <item>paddb</item>\n      <item>paddd</item>\n      <item>paddq</item>\n      <item>paddsb</item>\n      <item>paddsw</item>\n      <item>paddusb</item>\n      <item>paddusw</item>\n      <item>paddw</item>\n      <item>pand</item>\n      <item>pandn</item>\n      <item>pause</item>\n      <item>pavgb</item>\n      <item>pavgusb</item>\n      <item>pavgw</item>\n      <item>pcmpeqb</item>\n      <item>pcmpeqw</item>\n      <item>pcmpeqd</item>\n      <item>pcmpgtb</item>\n      <item>pcmpgtw</item>\n      <item>pcmpgtd</item>\n      <item>pdistib</item>\n      <item>pextrw</item>\n      <item>pf2id</item>\n      <item>pf2iw</item>\n      <item>pfacc</item>\n      <item>pfadd</item>\n      <item>pfcmpeq</item>\n      <item>pfcmpge</item>\n      <item>pfcmpgt</item>\n      <item>pfmax</item>\n      <item>pfmin</item>\n      <item>pfmul</item>\n      <item>pfnacc</item>\n      <item>pfpnacc</item>\n      <item>pfrcp</item>\n      <item>pfrcpit1</item>\n      <item>pfrcpit2</item>\n      <item>pfrsqit1</item>\n      <item>pfrsqrt</item>\n      <item>pfsub</item>\n      <item>pfsubr</item>\n      <item>pi2fd</item>\n      <item>pi2fw</item>\n      <item>pinsrw</item>\n      <item>pmachriw</item>\n      <item>pmaddwd</item>\n      <item>pmagw</item>\n      <item>pmaxsw</item>\n      <item>pmaxub</item>\n      <item>pminsw</item>\n      <item>pminub</item>\n      <item>pmovmskb</item>\n      <item>pmulhrw</item>\n      <item>pmulhuw</item>\n      <item>pmulhw</item>\n      <item>pmullw</item>\n      <item>pmuludq</item>\n      <item>pmvgezb</item>\n      <item>pmvlzb</item>\n      <item>pmvnzb</item>\n      <item>pmvzb</item>\n      <item>pop</item>\n      <item>popa</item>\n      <item>popaw</item>\n      <item>popad</item>\n      <item>popf</item>\n      <item>popfw</item>\n      <item>popfd</item>\n      <item>popfq</item>\n      <item>por</item>\n      <item>prefetch</item>\n      <item>prefetchnta</item>\n      <item>prefetcht0</item>\n      <item>prefetcht1</item>\n      <item>prefetcht2</item>\n      <item>prefetchw</item>\n      <item>psadbw</item>\n      <item>pshufd</item>\n      <item>pshufhw</item>\n      <item>pshuflw</item>\n      <item>pshufw</item>\n      <item>pslld</item>\n      <item>pslldq</item>\n      <item>psllq</item>\n      <item>psllw</item>\n      <item>psrad</item>\n      <item>psraw</item>\n      <item>psrld</item>\n      <item>psrldq</item>\n      <item>psrlq</item>\n      <item>psrlw</item>\n      <item>psubb</item>\n      <item>psubd</item>\n      <item>psubq</item>\n      <item>psubsb</item>\n      <item>psubsiw</item>\n      <item>psubsw</item>\n      <item>psubusb</item>\n      <item>psubusw</item>\n      <item>psubw</item>\n      <item>pswapd</item>\n      <item>punpckhbw</item>\n      <item>punpckhdq</item>\n      <item>punpckhqdq</item>\n      <item>punpckhwd</item>\n      <item>punpcklbw</item>\n      <item>punpckldq</item>\n      <item>punpcklqdq</item>\n      <item>punpcklwd</item>\n      <item>push</item>\n      <item>pusha</item>\n      <item>pushad</item>\n      <item>pushaw</item>\n      <item>pushf</item>\n      <item>pushfd</item>\n      <item>pushfq</item>\n      <item>pushfw</item>\n      <item>pxor</item>\n      <item>rcl</item>\n      <item>rcr</item>\n      <item>rcpps</item>\n      <item>rcpss</item>\n      <item>rdmsr</item>\n      <item>rdpmc</item>\n      <item>rdshr</item>\n      <item>rdtsc</item>\n      <item>rdtscp</item>\n      <item>ret</item>\n      <item>retf</item>\n      <item>retn</item>\n      <item>rol</item>\n      <item>ror</item>\n      <item>rsdc</item>\n      <item>rsldt</item>\n      <item>rsm</item>\n      <item>rsqrtps</item>\n      <item>rsqrtss</item>\n      <item>rsts</item>\n      <item>sahf</item>\n      <item>sal</item>\n      <item>sar</item>\n      <item>salc</item>\n      <item>sbb</item>\n      <item>scas</item>\n      <item>scasb</item>\n      <item>scasd</item>\n      <item>scasq</item>\n      <item>scasw</item>\n      <item>seta</item>\n      <item>setae</item>\n      <item>setb</item>\n      <item>setbe</item>\n      <item>setc</item>\n      <item>sete</item>\n      <item>setg</item>\n      <item>setge</item>\n      <item>setl</item>\n      <item>setle</item>\n      <item>setna</item>\n      <item>setnae</item>\n      <item>setnb</item>\n      <item>setnbe</item>\n      <item>setnc</item>\n      <item>setne</item>\n      <item>setng</item>\n      <item>setnge</item>\n      <item>setnl</item>\n      <item>setnle</item>\n      <item>setno</item>\n      <item>setnp</item>\n      <item>setns</item>\n      <item>setnz</item>\n      <item>seto</item>\n      <item>setp</item>\n      <item>setpe</item>\n      <item>setpo</item>\n      <item>sets</item>\n      <item>setz</item>\n      <item>sfence</item>\n      <item>sgdt</item>\n      <item>shl</item>\n      <item>shld</item>\n      <item>shr</item>\n      <item>shrd</item>\n      <item>shufpd</item>\n      <item>shufps</item>\n      <item>sidt</item>\n      <item>skinit</item>\n      <item>sldt</item>\n      <item>smi</item>\n      <item>smint</item>\n      <item>smintold</item>\n      <item>smsw</item>\n      <item>sqrtpd</item>\n      <item>sqrtps</item>\n      <item>sqrtsd</item>\n      <item>sqrtss</item>\n      <item>stc</item>\n      <item>std</item>\n      <item>stgi</item>\n      <item>sti</item>\n      <item>stmxcsr</item>\n      <item>stos</item>\n      <item>stosb</item>\n      <item>stosd</item>\n      <item>stosq</item>\n      <item>stosw</item>\n      <item>str</item>\n      <item>sub</item>\n      <item>subpd</item>\n      <item>subps</item>\n      <item>subsd</item>\n      <item>subss</item>\n      <item>svdc</item>\n      <item>svldt</item>\n      <item>svts</item>\n      <item>swapgs</item>\n      <item>syscall</item>\n      <item>sysenter</item>\n      <item>sysexit</item>\n      <item>sysret</item>\n      <item>test</item>\n      <item>ucomisd</item>\n      <item>ucomiss</item>\n      <item>ud0</item>\n      <item>ud1</item>\n      <item>ud2</item>\n      <item>umov</item>\n      <item>unpckhpd</item>\n      <item>unpckhps</item>\n      <item>unpcklpd</item>\n      <item>unpcklps</item>\n      <item>verr</item>\n      <item>verw</item>\n      <item>vmload</item>\n      <item>vmmcall</item>\n      <item>vmrun</item>\n      <item>vmsave</item>\n      <item>wait</item>\n      <item>wbinvd</item>\n      <item>wrmsr</item>\n      <item>wrshr</item>\n      <item>xadd</item>\n      <item>xbts</item>\n      <item>xchg</item>\n      <item>xlat</item>\n      <item>xlatb</item>\n      <item>xor</item>\n      <item>xorpd</item>\n      <item>xorps</item>\n    </list>\n    <list name=\"Data\">\n      <!-- repeat some data declaration -->\n      <item>times</item>\n      <!-- constants -->\n      <item>equ</item>\n      <!-- Initialized data -->\n      <item>db</item>\n      <item>dw</item>\n      <item>dd</item>\n      <item>dq</item>\n      <item>dt</item>\n      <!-- Uninitialized data -->\n      <item>resb</item>\n      <item>resw</item>\n      <item>resd</item>\n      <item>resq</item>\n      <item>rest</item>\n      <!-- binary file include -->\n      <item>incbin</item>\n      <!-- operand size -->\n      <item>byte</item>\n      <item>word</item>\n      <item>dword</item>\n      <item>qword</item>\n      <item>short</item>\n      <item>ptr</item>\n    </list>\n    <list name=\"NASM Keywords\">\n      <!-- NASM directives -->\n      <item>absolute</item>\n      <item>bits</item>\n      <item>common</item>\n      <item>extern</item>\n      <item>global</item>\n      <item>org</item>\n      <item>section</item>\n      <item>seg</item>\n      <item>segment</item>\n      <item>strict</item>\n      <item>use16</item>\n      <item>use32</item>\n      <item>wrt</item>\n      <!-- NASM standard macros -->\n      <item>struc</item>\n      <item>endstruc</item>\n      <item>istruc</item>\n      <item>at</item>\n      <item>iend</item>\n      <item>align</item>\n      <item>alignb</item>\n\n      <item>__SECT__</item>\n      <item>__NASM_MAJOR__</item>\n      <item>__NASM_MINOR__</item>\n      <item>__NASM_SUBMINOR__</item>\n      <item>___NASM_PATCHLEVEL__</item>\n      <item>__NASM_VERSION_ID__</item>\n      <item>__NASM_VER__</item>\n      <item>__FILE__</item>\n      <item>__LINE__</item>\n    </list>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Registers\" context=\"#stay\" String=\"registers\"/>\n        <keyword attribute=\"Data\" context=\"#stay\" String=\"Data\"/>\n        <keyword attribute=\"Instructions\" context=\"#stay\" String=\"instructions\"/>\n        <keyword attribute=\"NASM Keywords\" context=\"#stay\" String=\"NASM Keywords\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"%\"/>\n        <AnyChar attribute=\"String\" context=\"String\" String=\"&quot;'\"/>\n        <RegExpr attribute=\"Label\" context=\"#stay\" String=\"^\\s*[A-Za-z0-9_.$]+:\"/>\n        <!-- Conditional instructions -->\n        <RegExpr attribute=\"Instructions\" context=\"#stay\" String=\"(cmov|fcmov|j|loop|set)(a|ae|b|be|c|e|g|ge|l|le|na|nae|nb|nbe|nc|ne|ng|nge|nl|nle|no|np|ns|nz|o|p|pe|po|s|z)\"/>\n        <!-- The NASM's CPU directive -->\n        <RegExpr attribute=\"NASM Keywords\" context=\"#stay\" String=\"cpu (pentium|ppro|p2|p3|katmai|p4|willamette|prescott|ia64)*\"/>\n        <!-- hexadecimal numbers -->\n        <RegExpr attribute=\"BaseN\" context=\"#stay\" insensitive=\"true\" String=\"(^|[ \\t,]+)((\\$|0x){1}[0-9]+[a-f0-9]*|[0-9]+[a-f0-9]*h)([ \\t,]+|$)\"/>\n        <!-- octal and binary numbers -->\n        <RegExpr attribute=\"BaseN\" context=\"#stay\" insensitive=\"true\" String=\"(^|[ \\t,]+)([0-7]+(q|o)|[01]+b)([ \\t,]+|$)\"/>\n        <DetectChar attribute=\"Number\" context=\"#stay\" char=\"$\"/>\n        <HlCOct attribute=\"BaseN\" context=\"#stay\"/>\n        <HlCHex attribute=\"BaseN\" context=\"#stay\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n      </context>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <context name=\"Preprocessor\" attribute=\"Preprocessor\" lineEndContext=\"#pop\"/>\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n        <AnyChar attribute=\"String\" context=\"#pop\" String=\"&quot;'\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Registers\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Instructions\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"NASM Keywords\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Label\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Data\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"BaseN\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";\"/>\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/nemerle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Nemerle syntax highlighting v0.2 by caminoix, approved of and corrected by Kamil Skalski (Nazgul) -->\n<language name=\"Nemerle\" version=\"1\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.n\" mimetype=\"text/x-nemerle\" casesensitive=\"1\" author=\"caminoix + Kamil Skalski (Nazgul)\" license=\"\">\n\t<highlighting>\n\t\t<list name=\"Attributes\">\n\t\t\t<item>abstract</item>\n\t\t\t<item>def</item>\n\t\t\t<item>delegate</item>\n\t\t\t<item>event</item>\n\t\t\t<item>extern</item>\n\t\t\t<item>internal</item>\n\t\t\t<item>mutable</item>\n\t\t\t<item>override</item>\n\t\t\t<item>public</item>\n\t\t\t<item>private</item>\n\t\t\t<item>protected</item>\n\t\t\t<item>sealed</item>\n\t\t\t<item>static</item>\n\t\t\t<item>volatile</item>\n\t\t\t<item>virtual</item>\n\t\t\t<item>new</item>\n\t\t</list>\n\n\t\t<list name=\"CompilationUnits\">\n\t\t\t<item>macro</item>\n\t\t\t<item>namespace</item>\n\t\t\t<item>using</item>\n\t\t\t<item>\\[Record\\]</item>\n\t\t</list>\n\n\t\t<list name=\"DataTypes\">\n\t\t\t<item>array</item>\n\t\t\t<item>bool</item>\n\t\t\t<item>byte</item>\n\t\t\t<item>char</item>\n\t\t\t<item>decimal</item>\n\t\t\t<item>double</item>\n\t\t\t<item>enum</item>\n\t\t\t<item>float</item>\n\t\t\t<item>int</item>\n\t\t\t<item>list</item>\n\t\t\t<item>long</item>\n\t\t\t<item>object</item>\n\t\t\t<item>sbyte</item>\n\t\t\t<item>short</item>\n\t\t\t<item>string</item>\n\t\t\t<item>uint</item>\n\t\t\t<item>ulong</item>\n\t\t\t<item>ushort</item>\n\t\t\t<item>variant</item>\n\t\t\t<item>void</item>\n\t\t</list>\n\n\t\t<list name=\"Keywords\">\n\t\t\t<item>_</item>\n\t\t\t<item>as</item>\n\t\t\t<item>assert</item>\n\t\t\t<item>base</item>\n\t\t\t<item>catch</item>\n\t\t\t<item>checked</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>false</item>\n\t\t\t<item>finally</item>\n\t\t\t<item>for</item>\n\t\t\t<item>foreach</item>\n\t\t\t<item>fun</item>\n\t\t\t<item>get</item>\n\t\t\t<item>if</item>\n\t\t\t<item>ignore</item>\n\t\t\t<item>implements</item>\n\t\t\t<item>in</item>\n\t\t\t<item>is</item>\n\t\t\t<item>lock</item>\n\t\t\t<item>match</item>\n\t\t\t<item>null</item>\n\t\t\t<item>out</item>\n\t\t\t<item>params</item>\n\t\t\t<item>ref</item>\n\t\t\t<item>repeat</item>\n\t\t\t<item>set</item>\n\t\t\t<item>syntax</item>\n\t\t\t<item>this</item>\n\t\t\t<item>throw</item>\n\t\t\t<item>true</item>\n\t\t\t<item>try</item>\n\t\t\t<item>typeof</item>\n\t\t\t<item>unchecked</item>\n\t\t\t<item>unless</item>\n\t\t\t<item>when</item>\n\t\t\t<item>where</item>\n\t\t\t<item>while</item>\n\t\t\t<item>with</item>\n\t\t</list>\n\n\t\t<list name=\"Preprocessing\">\n\t\t\t<item>#define</item>\n\t\t\t<item>#elif</item>\n\t\t\t<item>#else</item>\n\t\t\t<item>#endif</item>\n\t\t\t<item>#endregion</item>\n\t\t\t<item>#error</item>\n\t\t\t<item>#if</item>\n\t\t\t<item>#line</item>\n\t\t\t<item>#region</item>\n\t\t\t<item>#undef</item>\n\t\t\t<item>#warning</item>\n\t\t\t<item>#pragma</item>\n\t\t</list>\n\n\t\t<list name=\"TypeDeclarations\">\n\t\t\t<item>class</item>\n\t\t\t<item>interface</item>\n\t\t\t<item>module</item>\n\t\t\t<item>struct</item>\n\t\t\t<item>type</item>\n\t\t</list>\n\n\t\t<contexts>\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<StringDetect attribute=\"Comment\" context=\"SingleLineComment\" String=\"//\" />\n\t\t\t\t<StringDetect attribute=\"Comment\" context=\"MultiLineComment\" String=\"/*\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"NormalString\" char=\"&quot;\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" context=\"StringInterpolation\" char=\"$\" char1=\"&quot;\" />\n\n\t\t\t\t<Int attribute=\"Number\" context=\"#stay\" />\n\t\t\t\t<Float attribute=\"Number\" context=\"#stay\" />\n\n\t\t\t\t<keyword attribute=\"Attribute\" context=\"#stay\" String=\"Attributes\" />\n\t\t\t\t<keyword attribute=\"CompilationUnit\" context=\"#stay\" String=\"CompilationUnits\" />\n\t\t\t\t<keyword attribute=\"DataType\" context=\"#stay\" String=\"DataTypes\" />\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"Keywords\" />\n\t\t\t\t<keyword attribute=\"Preprocessing\" context=\"#stay\" String=\"Preprocessing\" />\n\t\t\t\t<keyword attribute=\"TypeDeclaration\" context=\"#stay\" String=\"TypeDeclarations\" />\n\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"{\" beginRegion=\"Region1\" />\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"}\" endRegion=\"Region1\" />\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"(\" beginRegion=\"Region2\" />\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"#stay\" char=\")\" endRegion=\"Region2\" />\n\t\t\t\t<Detect2Chars attribute=\"CompilationUnit\" context=\"#stay\" char=\"&#60;\" char1=\"[\" beginRegion=\"Region3\" />\n\t\t\t\t<Detect2Chars attribute=\"CompilationUnit\" context=\"#stay\" char=\"]\" char1=\"&#62;\" endRegion=\"Region3\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"SingleLineComment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<StringDetect attribute=\"Comment\" String=\"//\" context=\"#pop\" />\n\t\t\t</context>\n\t\t\t<context name=\"MultiLineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<StringDetect attribute=\"Comment\" String=\"*/\" context=\"#pop\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"NormalString\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\" />\n\t\t\t\t<RegExpr attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\{[0-9]+\\}\" />\n\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"t\" />\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"n\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u0008\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000D\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000d\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000A\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000a\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"StringInterpolation\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\" />\n\t\t\t\t<RegExpr attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\{[0-9]+\\}\" />\n\t\t\t\t<RegExpr attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\$(\\S)+\\s\" />\n\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"t\" />\n\t\t\t\t<Detect2Chars attribute=\"EscapeSequence\" context=\"#stay\" char=\"\\\" char1=\"n\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u0008\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000D\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000d\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000A\" />\n\t\t\t\t<StringDetect attribute=\"EscapeSequence\" context=\"#stay\" String=\"\\u000a\" />\n\t\t\t</context>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\" />\n\n\t\t\t<itemData name=\"Number\" defStyleNum=\"dsOthers\" color=\"#00009f\" selColor=\"#0000e9\"/>\n\n\t\t\t<itemData name=\"Attribute\" defStyleNum=\"dsOthers\" color=\"#28712f\" selColor=\"#34923d\" />\n\t\t\t<itemData name=\"CompilationUnit\" defStyleNum=\"dsChar\" />\n\t\t\t<itemData name=\"DataType\" defStyleNum=\"dsDataType\" />\n\t\t\t<itemData name=\"EscapeSequence\" defStyleNum=\"dsBaseN\" />\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Preprocessing\" defStyleNum=\"dsChar\" />\n\t\t\t<itemData name=\"TypeDeclaration\" defStyleNum=\"dsOthers\" color=\"#eeb312\" selColor=\"ffc013\" bold=\"1\" />\n\t\t</itemDatas>\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t\t</comments>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/nesc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"nesC\" author=\"Shakthi Kannan\" license=\"GPLv2\" version=\"4\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.nc\" mimetype=\"text/x-ncsrc\" priority=\"5\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>enum</item>\n      <item>extern</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>inline</item>\n      <item>return</item>\n      <item>sizeof</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>typedef</item>\n      <item>union</item>\n      <item>while</item>  <item>interface</item>\n      <item>module</item>\n      <item>configuration</item>\n      <item>implementation</item>\n      <item>components</item>\n      <item>as</item>\n      <item>uses</item>\n      <item>provides</item>\n      <item>includes</item>\n      <item>command</item>\n      <item>event</item>\n      <item>async</item>\n      <item>task</item>\n      <item>norace</item>\n      <item>default</item>\n      <item>__attribute__</item>\n      <item>atomic</item>\n      <item>call</item>\n      <item>signal</item>\n      <item>post</item>\n      \n    </list>\n    <list name=\"types\">\n      <item>auto</item>\n      <item>char</item>\n      <item>const</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>register</item>\n      <item>restrict</item>\n      <item>short</item>\n      <item>signed</item>\n      <item>static</item>\n      <item>unsigned</item>\n      <item>void</item>\n      <item>volatile</item>\n      <item>_Imaginary</item>\n      <item>_Complex</item>\n      <item>_Bool</item>\n      <item>bool</item>\n      <item>uint8_t</item>\n      <item>uint16_t</item>\n      <item>uint32_t</item>\n      <item>uint64_t</item>\n      <item>result_t</item>\n      <item>SUCCESS</item>\n      <item>FAIL</item>\n      <item>TRUE</item>\n      <item>FALSE</item>\n      <item>TOSH_INTERRUPT</item>\n      <item>TOSH_SIGNAL</item>\n      <item>TOS_MsgPtr</item>\n      <item>TOS_Msg</item>\n    </list>\n    <list name=\"attention\">\n      <item>FIXME</item>\n      <item>TODO</item>\n      <item>###</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <StringDetect attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#if 0\" insensitive=\"false\"/>\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\"/>\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*[(])\"/>\n        <RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^;\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*)\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <keyword attribute=\"Decimal\" context=\"#stay\" String=\"attention\"/>\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"Define\" String=\"define.*((?=\\\\))\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"define.*\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\"/>\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\">\n        <keyword attribute=\"Decimal\" context=\"#stay\" String=\"attention\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"^#if\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#endif\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#else\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#if\"/>\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#endif\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsKeyword\" color=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Prep. Lib\" defStyleNum=\"dsOthers\"/> <!--,Qt::darkYellow,Qt::yellow,false,false)); -->\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ninja.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"[\n  <!ENTITY ident \"[-_a-zA-Z0-9]+\">\n  <!ENTITY deplist \"[^$|:]+\">\n]>\n<language\n  name=\"Ninja\" section=\"Other\"\n  version=\"1\" kateversion=\"5.0\"\n  extensions=\"*.ninja\"\n  author=\"Jonathan Poelen (jonathan.poelen@gmail.com)\" license=\"MIT\"\n>\n  <highlighting>\n    <list name=\"keywordRule\"><item>rule</item></list>\n    <list name=\"keywordBuild\"><item>build</item></list>\n    <list name=\"keywordPool\"><item>pool</item></list>\n    <list name=\"keywords\">\n      <item>default</item>\n      <item>include</item>\n      <item>subninja</item>\n    </list>\n\n    <list name=\"poolValues\">\n      <item>console</item>\n    </list>\n\n    <list name=\"rules\">\n      <item>phony</item>\n    </list>\n\n    <list name=\"topVariables\">\n      <item>builddir</item>\n      <item>ninja_required_version</item>\n    </list>\n\n    <list name=\"poolVariables\">\n      <item>depth</item>\n    </list>\n\n    <list name=\"ruleVariables\">\n      <item>command</item>\n      <item>console</item>\n      <item>depfile</item>\n      <item>deps</item>\n      <item>msvc_deps_prefix</item>\n      <item>description</item>\n      <item>generator</item>\n      <item>in</item>\n      <item>in_newline</item>\n      <item>out</item>\n      <item>pool</item>\n      <item>restat</item>\n      <item>rspfile</item>\n      <item>rspfile_content</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal\" name=\"Normal\" lineEndContext=\"#stay\" fallthrough=\"1\" fallthroughContext=\"ErrorOrComment\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n        <keyword attribute=\"Keyword\" context=\"BuildStatement\" String=\"keywordBuild\"/>\n        <keyword attribute=\"Keyword\" context=\"RuleStatement\" String=\"keywordRule\"/>\n        <keyword attribute=\"Keyword\" context=\"PoolStatement\" String=\"keywordPool\"/>\n        <keyword attribute=\"Keyword\" context=\"SimpleStatement\" String=\"keywords\"/>\n        <keyword attribute=\"Special Key\" context=\"VariableAssignment\" String=\"topVariables\"/>\n        <RegExpr attribute=\"Key\" context=\"VariableAssignment\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"ErrorOrComment\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop!Error\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context attribute=\"Error\" name=\"Error\" lineEndContext=\"#pop\"/>\n\n      <!-- rule -->\n\n      <context attribute=\"Normal\" name=\"RuleStatement\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Normal\" context=\"#pop!RuleKeys\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"RuleKeys\" lineEndContext=\"#stay\" fallthrough=\"1\" fallthroughContext=\"#pop\">\n        <DetectSpaces context=\"RuleKey\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"RuleKey\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop!Error\">\n        <DetectChar attribute=\"Comment\" context=\"#pop!Comment\" char=\"#\"/>\n        <keyword attribute=\"Special Key\" context=\"#pop!PoolVariableAssignment\" String=\"keywordPool\"/>\n        <keyword attribute=\"Special Key\" context=\"#pop!RuleVariableAssignment\" String=\"ruleVariables\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"RuleVariableAssignment\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!RuleValue\" char=\"=\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"RuleValue\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal\" context=\"RuleDollar\" char=\"$\" lookAhead=\"true\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"&lt;>&amp;|=(){}[]&quot;';!%?*\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"[^&lt;>&amp;|=(){}[\\]&quot;';!%?*$]\"/>\n      </context>\n\n      <context attribute=\"Error\" name=\"RuleDollar\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Line Continuation\" context=\"#pop!LineContinuation\" char=\"$\"/>\n        <Detect2Chars attribute=\"Special Char\" context=\"#pop\" char=\"$\" char1=\" \"/>\n        <Detect2Chars attribute=\"Special Char\" context=\"#pop\" char=\"$\" char1=\"$\"/>\n        <Detect2Chars attribute=\"Special Char\" context=\"#pop\" char=\"$\" char1=\":\"/>\n        <Detect2Chars attribute=\"Variable Delimiter\" context=\"#pop!RuleOpenVariableName\" char=\"$\" char1=\"{\"/>\n        <DetectChar attribute=\"Variable Delimiter\" context=\"#pop!RuleVariableName\" char=\"$\"/>\n      </context>\n\n      <context attribute=\"Variable\" name=\"RuleOpenVariableName\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <DetectChar attribute=\"Variable Delimiter\" context=\"#pop\" char=\"}\"/>\n        <keyword attribute=\"Special Variable\" context=\"#stay\" String=\"ruleVariables\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Variable\" name=\"RuleVariableName\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <keyword attribute=\"Special Variable\" context=\"#pop\" String=\"ruleVariables\"/>\n        <RegExpr attribute=\"Variable\" context=\"#pop\" String=\"&ident;\"/>\n      </context>\n\n      <!-- build -->\n\n      <context attribute=\"Normal\" name=\"BuildStatement\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal\" context=\"Dollar\" char=\"$\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!BuildRuleName\" char=\":\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!ImplicitOutput\" char=\"|\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&deplist;\"/>\n      </context>\n\n      <context attribute=\"Implicit Output\" name=\"ImplicitOutput\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal\" context=\"Dollar\" char=\"$\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!BuildRuleName\" char=\":\"/>\n        <RegExpr attribute=\"Implicit Output\" context=\"#stay\" String=\"&deplist;\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"BuildRuleName\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop!Error\">\n        <DetectSpaces/>\n        <keyword attribute=\"Special Rule Name\" context=\"#pop!BuildDependancies\" String=\"rules\"/>\n        <RegExpr attribute=\"Rule Name\" context=\"#pop!BuildDependancies\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Dependancy\" name=\"BuildDependancies\" lineEndContext=\"#pop!BuildKeys\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal\" context=\"Dollar\" char=\"$\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!ImplicitBuildDependancies\" char=\"|\"/>\n        <RegExpr attribute=\"Dependancy\" context=\"#stay\" String=\"&deplist;\"/>\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\":\"/>\n      </context>\n\n      <context attribute=\"Implicit Dependancy\" name=\"ImplicitBuildDependancies\" lineEndContext=\"#pop!BuildKeys\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal\" context=\"Dollar\" char=\"$\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Implicit Dependancy\" context=\"#stay\" String=\"&deplist;\"/>\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"|\"/>\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\":\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"BuildKeys\" lineEndContext=\"#stay\" fallthrough=\"1\" fallthroughContext=\"#pop\">\n        <DetectSpaces context=\"BuildKey\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"BuildKey\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop!Error\">\n        <DetectChar attribute=\"Comment\" context=\"#pop!Comment\" char=\"#\"/>\n        <keyword attribute=\"Special Key\" context=\"#pop!PoolVariableAssignment\" String=\"keywordPool\"/>\n        <keyword attribute=\"Special Key\" context=\"#pop!VariableAssignment\" String=\"ruleVariables\"/>\n        <RegExpr attribute=\"Key\" context=\"#pop!VariableAssignment\" String=\"&ident;\"/>\n      </context>\n\n      <!-- pool -->\n\n      <context attribute=\"Normal\" name=\"PoolStatement\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop!Error\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Normal\" context=\"#pop!PoolKeys\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"PoolKeys\" lineEndContext=\"#stay\" fallthrough=\"1\" fallthroughContext=\"#pop\">\n        <DetectSpaces context=\"PoolKey\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"PoolKey\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop!Error\">\n        <DetectChar attribute=\"Comment\" context=\"#pop!Comment\" char=\"#\"/>\n        <keyword attribute=\"Special Key\" context=\"#pop!PoolVariableAssignment\" String=\"poolVariables\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"PoolVariableAssignment\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!PoolValue\" char=\"=\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"PoolValue\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal\" context=\"Dollar\" char=\"$\" lookAhead=\"true\"/>\n        <keyword attribute=\"Special Value\" context=\"BuildStatement\" String=\"poolValues\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <!-- default, include, subninja -->\n\n      <context attribute=\"Normal\" name=\"SimpleStatement\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop!Error\">\n        <DetectChar attribute=\"Normal\" context=\"Dollar\" char=\"$\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"&deplist;\"/>\n      </context>\n\n      <!-- Value -->\n\n      <context attribute=\"Normal\" name=\"VariableAssignment\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Operator\" context=\"#pop!Value\" char=\"=\"/>\n      </context>\n\n      <context attribute=\"Normal\" name=\"Value\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal\" context=\"Dollar\" char=\"$\" lookAhead=\"true\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"&lt;>&amp;|=(){}[]&quot;';!%?*\"/>\n        <RegExpr attribute=\"Normal\" context=\"#stay\" String=\"[^&lt;>&amp;|=(){}[\\]&quot;';!%?*$]\"/>\n      </context>\n\n      <!-- $ -->\n\n      <context attribute=\"Error\" name=\"Dollar\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Line Continuation\" context=\"#pop!LineContinuation\" char=\"$\"/>\n        <Detect2Chars attribute=\"Special Char\" context=\"#pop\" char=\"$\" char1=\" \"/>\n        <Detect2Chars attribute=\"Special Char\" context=\"#pop\" char=\"$\" char1=\"$\"/>\n        <Detect2Chars attribute=\"Special Char\" context=\"#pop\" char=\"$\" char1=\":\"/>\n        <Detect2Chars attribute=\"Variable Delimiter\" context=\"#pop!OpenVariableName\" char=\"$\" char1=\"{\"/>\n        <DetectChar attribute=\"Variable Delimiter\" context=\"#pop!VariableName\" char=\"$\"/>\n      </context>\n\n      <context attribute=\"Variable\" name=\"OpenVariableName\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <DetectChar attribute=\"Variable Delimiter\" context=\"#pop\" char=\"}\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Variable\" name=\"VariableName\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"Error\">\n        <RegExpr attribute=\"Variable\" context=\"#pop\" String=\"&ident;\"/>\n      </context>\n\n      <context attribute=\"Line Continuation\" name=\"LineContinuation\" lineEndContext=\"#pop\" fallthrough=\"1\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n      </context>\n\n      <!-- comment -->\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <DetectSpaces/>\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n        <DetectIdentifier attribute=\"Comment\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\" spellChecking=\"0\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"0\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Rule Name\" defStyleNum=\"dsFunction\" spellChecking=\"0\"/>\n      <itemData name=\"Special Rule Name\" defStyleNum=\"dsBuiltIn\" spellChecking=\"0\"/>\n      <itemData name=\"Dependancy\" defStyleNum=\"dsNormal\" spellChecking=\"0\"/>\n      <itemData name=\"Implicit Dependancy\" defStyleNum=\"dsNormal\" italic=\"1\" spellChecking=\"0\"/>\n      <itemData name=\"Implicit Output\" defStyleNum=\"dsNormal\" italic=\"1\" spellChecking=\"0\"/>\n      <itemData name=\"Special Key\" defStyleNum=\"dsBuiltIn\" spellChecking=\"0\"/>\n      <itemData name=\"Key\" defStyleNum=\"dsVariable\" spellChecking=\"0\"/>\n      <itemData name=\"Variable Delimiter\" defStyleNum=\"dsOperator\" spellChecking=\"0\"/>\n      <itemData name=\"Special Variable\" defStyleNum=\"dsBuiltIn\" spellChecking=\"0\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"0\"/>\n      <itemData name=\"Special Value\" defStyleNum=\"dsBuiltIn\" spellChecking=\"0\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"0\"/>\n      <itemData name=\"Line Continuation\" defStyleNum=\"dsSpecialChar\" spellChecking=\"0\"/>\n      <itemData name=\"Special Char\" defStyleNum=\"dsSpecialChar\" spellChecking=\"0\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\" bold=\"1\" spellChecking=\"0\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/noweb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"noweb\" version=\"2\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.w;*.nw\" author=\"Scott Collins (scc@scottcollins.net)\">\n<!-- \n#########################################################################\n# First version added to repository was 0.4, added as 1.0 .\n#\n# Article about this highlighter:\n#   http://scottcollins.net/articles/Kate.html\n# \n# Indirect source file:\n#   http://scottcollins.net/articles/Kate.w\n# \n# Command used for extraction:\n#   $ notangle Kate.w -R\"noweb.xml\" > syntax/data/noweb.xml\n#########################################################################\n-->\n  <highlighting>\n    <contexts>\n      <context name=\"RawDocumentation\" attribute=\"Prose\" lineEndContext=\"#stay\">\n        <RegExpr String=\"^&lt;&lt;.*&gt;&gt;=$\" attribute=\"SectionName\" context=\"CodeSection\" beginRegion=\"CodeSection\" />\n        <Detect2Chars char=\"@\" char1=\"[\" context=\"#stay\" />\n        <Detect2Chars char=\"[\" char1=\"[\" attribute=\"Punctuation\" context=\"CodeQuote\" />\n        <IncludeRules context=\"##HTML\" includeAttrib=\"true\" />\n      </context>\n      <context name=\"CodeQuote\" attribute=\"Code\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"@\" char1=\"]\" context=\"#stay\" />\n        <RegExpr String=\"\\]\\](?!\\])\" minimal=\"true\" attribute=\"Punctuation\" context=\"#pop\" />\n        <IncludeRules context=\"SectionNames\" />\n        <IncludeRules context=\"##C++\" includeAttrib=\"true\" />\n      </context>\n      <context name=\"CodeSection\" attribute=\"Code\" lineEndContext=\"#stay\">\n        <RegExpr String=\"^@$\" attribute=\"Punctuation\" context=\"RawDocumentation\" endRegion=\"CodeSection\" />\n        <RegExpr String=\"^@(?=[\\s%])\" attribute=\"Punctuation\" context=\"RawDocumentation\" endRegion=\"CodeSection\" />\n        <RegExpr String=\"^&lt;&lt;.*&gt;&gt;=$\" context=\"RawDocumentation\" lookAhead=\"true\" endRegion=\"CodeSection\" />\n        <IncludeRules context=\"SectionNames\" />\n        <IncludeRules context=\"##C++\" includeAttrib=\"true\" />\n      </context>\n      <context name=\"SectionNames\" attribute=\"Prose\" lineEndContext=\"#stay\">\n        <RegExpr String=\"@&lt;&lt;\" context=\"#stay\" />\n        <RegExpr String=\"&lt;&lt;.*[^@]&gt;&gt;(?!=)\" minimal=\"true\" attribute=\"SectionName\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Prose\"        defStyleNum=\"dsNormal\" />\n      <itemData name=\"Code\"         defStyleNum=\"dsNormal\" />\n      <itemData name=\"Punctuation\"  defStyleNum=\"dsRegionMarker\" bold=\"true\" />\n      <itemData name=\"SectionName\"  defStyleNum=\"dsRegionMarker\" italic=\"true\" />\n    </itemDatas>\n  </highlighting>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/nsis.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language\n    name=\"NSIS\" version=\"4\" kateversion=\"5.0\" section=\"Scripts\" casesensitive=\"0\" extensions=\"*.nsi\" mimetype=\"text/x-nsis\"\n    author=\"Kevin Funk (kfunk@kde.org)\" license=\"LGPLv2+\"\n  >\n  <highlighting>\n    <list name=\"keywords\">\n      <item>packhdr</item>\n      <item>finalize</item>\n      <item>system</item>\n      <item>execute</item>\n      <item>makensis</item>\n      <item>AddIncludeDir</item>\n      <item>include</item>\n      <item>cd</item>\n      <item>if</item>\n      <item>ifdef</item>\n      <item>ifndef</item>\n      <item>endif</item>\n      <item>define</item>\n      <item>undef</item>\n      <item>else</item>\n      <item>echo</item>\n      <item>warning</item>\n      <item>error</item>\n      <item>verbose</item>\n      <item>macro</item>\n      <item>macroend</item>\n      <item>macroundef</item>\n      <item>insertmacro</item>\n      <item>ifmacrodef</item>\n      <item>ifmacrondef</item>\n      <item>tempfile</item>\n      <item>delfile</item>\n      <item>appendfile</item>\n      <item>getdllversion</item>\n      <item>searchparse</item>\n      <item>searchreplace</item>\n      <item>AddPluginDir</item>\n    </list>\n    <list name=\"options\">\n      <item>nonfatal</item>\n      <item>MB_ICONQUESTION</item>\n      <item>MB_YESNO</item>\n      <item>MB_DEFBUTTON2</item>\n      <item>MB_ICONINFORMATION</item>\n      <item>MB_OK</item>\n    </list>\n    <list name=\"macros\">\n      <!-- NSIS Modern User Interface (http://nsis.sourceforge.net/Docs/Modern%20UI/Readme.html) -->\n      <item>MUI_SYSVERSION</item>\n      <item>MUI_ICON</item>\n      <item>MUI_UNICON</item>\n      <item>MUI_HEADERIMAGE</item>\n      <item>MUI_HEADERIMAGE_BITMAP</item>\n      <item>MUI_HEADERIMAGE_BITMAP_NOSTRETCH</item>\n      <item>MUI_HEADERIMAGE_BITMAP_RTL</item>\n      <item>MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH</item>\n      <item>MUI_HEADERIMAGE_UNBITMAP</item>\n      <item>MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH</item>\n      <item>MUI_HEADERIMAGE_UNBITMAP_RTL</item>\n      <item>MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH</item>\n      <item>MUI_HEADERIMAGE_RIGHT</item>\n      <item>MUI_BGCOLOR</item>\n      <item>MUI_UI</item>\n      <item>MUI_UI_HEADERIMAGE</item>\n      <item>MUI_UI_HEADERIMAGE_RIGHT</item>\n      <item>MUI_UI_COMPONENTSPAGE_SMALLDESC</item>\n      <item>MUI_UI_COMPONENTSPAGE_NODESC</item>\n      <item>MUI_WELCOMEFINISHPAGE_BITMAP</item>\n      <item>MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH</item>\n      <item>MUI_WELCOMEFINISHPAGE_INI</item>\n      <item>MUI_UNWELCOMEFINISHPAGE_BITMAP</item>\n      <item>MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH</item>\n      <item>MUI_UNWELCOMEFINISHPAGE_INI</item>\n      <item>MUI_LICENSEPAGE_BGCOLOR</item>\n      <item>MUI_COMPONENTSPAGE_CHECKBITMAP</item>\n      <item>MUI_COMPONENTSPAGE_SMALLDESC</item>\n      <item>MUI_COMPONENTSPAGE_NODESC</item>\n      <item>MUI_INSTFILESPAGE_COLORS</item>\n      <item>MUI_INSTFILESPAGE_PROGRESSBAR</item>\n      <item>MUI_FINISHPAGE_NOAUTOCLOSE</item>\n      <item>MUI_UNFINISHPAGE_NOAUTOCLOSE</item>\n      <item>MUI_ABORTWARNING</item>\n      <item>MUI_ABORTWARNING_TEXT</item>\n      <item>MUI_UNABORTWARNING</item>\n      <item>MUI_UNABORTWARNING_TEXT</item>\n      <item>MUI_PAGE_WELCOME</item>\n      <item>MUI_PAGE_LICENSE</item>\n      <item>MUI_PAGE_COMPONENTS</item>\n      <item>MUI_PAGE_DIRECTORY</item>\n      <item>MUI_PAGE_STARTMENU</item>\n      <item>MUI_PAGE_INSTFILES</item>\n      <item>MUI_PAGE_FINISH</item>\n      <item>MUI_UNPAGE_WELCOME</item>\n      <item>MUI_UNPAGE_CONFIRM</item>\n      <item>MUI_UNPAGE_LICENSE</item>\n      <item>MUI_UNPAGE_COMPONENTS</item>\n      <item>MUI_UNPAGE_DIRECTORY</item>\n      <item>MUI_UNPAGE_INSTFILES</item>\n      <item>MUI_UNPAGE_FINISH</item>\n      <item>MUI_PAGE_HEADER_TEXT</item>\n      <item>MUI_PAGE_HEADER_SUBTEXT</item>\n      <item>MUI_WELCOMEPAGE_TITLE</item>\n      <item>MUI_WELCOMEPAGE_TITLE_3LINES</item>\n      <item>MUI_WELCOMEPAGE_TEXT</item>\n      <item>MUI_LICENSEPAGE_TEXT_TOP</item>\n      <item>MUI_LICENSEPAGE_TEXT_BOTTOM</item>\n      <item>MUI_LICENSEPAGE_BUTTON</item>\n      <item>MUI_LICENSEPAGE_CHECKBOX</item>\n      <item>MUI_LICENSEPAGE_CHECKBOX_TEXT</item>\n      <item>MUI_LICENSEPAGE_RADIOBUTTONS</item>\n      <item>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT</item>\n      <item>MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE</item>\n      <item>MUI_COMPONENTSPAGE_TEXT_TOP</item>\n      <item>MUI_COMPONENTSPAGE_TEXT_COMPLIST</item>\n      <item>MUI_COMPONENTSPAGE_TEXT_INSTTYPE</item>\n      <item>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE</item>\n      <item>MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO</item>\n      <item>MUI_DIRECTORYPAGE_TEXT_TOP</item>\n      <item>MUI_DIRECTORYPAGE_TEXT_DESTINATION</item>\n      <item>MUI_DIRECTORYPAGE_VARIABLE</item>\n      <item>MUI_DIRECTORYPAGE_VERIFYONLEAVE</item>\n      <item>MUI_STARTMENU_WRITE_BEGIN</item>\n      <item>MUI_STARTMENU_WRITE_END</item>\n      <item>MUI_STARTMENUPAGE_TEXT_TOP</item>\n      <item>MUI_STARTMENUPAGE_TEXT_CHECKBOX</item>\n      <item>MUI_STARTMENUPAGE_DEFAULTFOLDER</item>\n      <item>MUI_STARTMENUPAGE_NODISABLE</item>\n      <item>MUI_STARTMENUPAGE_REGISTRY_ROOT</item>\n      <item>MUI_STARTMENUPAGE_REGISTRY_KEY</item>\n      <item>MUI_STARTMENUPAGE_REGISTRY_VALUENAME</item>\n      <item>MUI_INSTFILESPAGE_FINISHHEADER_TEXT</item>\n      <item>MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT</item>\n      <item>MUI_INSTFILESPAGE_ABORTHEADER_TEXT</item>\n      <item>MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT</item>\n      <item>MUI_FINISHPAGE_TITLE</item>\n      <item>MUI_FINISHPAGE_TITLE_3LINES</item>\n      <item>MUI_FINISHPAGE_TEXT</item>\n      <item>MUI_FINISHPAGE_TEXT_LARGE</item>\n      <item>MUI_FINISHPAGE_BUTTON</item>\n      <item>MUI_FINISHPAGE_TEXT_REBOOT</item>\n      <item>MUI_FINISHPAGE_TEXT_REBOOTNOW</item>\n      <item>MUI_FINISHPAGE_TEXT_REBOOTLATER</item>\n      <item>MUI_FINISHPAGE_RUN</item>\n      <item>MUI_FINISHPAGE_RUN_TEXT</item>\n      <item>MUI_FINISHPAGE_RUN_PARAMETERS</item>\n      <item>MUI_FINISHPAGE_RUN_NOTCHECKED</item>\n      <item>MUI_FINISHPAGE_RUN_FUNCTION</item>\n      <item>MUI_FINISHPAGE_SHOWREADME</item>\n      <item>MUI_FINISHPAGE_SHOWREADME_TEXT</item>\n      <item>MUI_FINISHPAGE_SHOWREADME_NOTCHECKED</item>\n      <item>MUI_FINISHPAGE_SHOWREADME_FUNCTION</item>\n      <item>MUI_FINISHPAGE_LINK</item>\n      <item>MUI_FINISHPAGE_LINK_LOCATION</item>\n      <item>MUI_FINISHPAGE_LINK_COLOR</item>\n      <item>MUI_FINISHPAGE_NOREBOOTSUPPORT</item>\n      <item>MUI_UNCONFIRMPAGE_TEXT_TOP</item>\n      <item>MUI_UNCONFIRMPAGE_TEXT_LOCATION</item>\n      <item>MUI_LANGUAGE</item>\n      <item>MUI_LANGDLL_DISPLAY</item>\n      <item>MUI_LANGDLL_REGISTRY_ROOT</item>\n      <item>MUI_LANGDLL_REGISTRY_KEY</item>\n      <item>MUI_LANGDLL_REGISTRY_VALUENAME</item>\n      <item>MUI_LANGDLL_WINDOWTITLE</item>\n      <item>MUI_LANGDLL_INFO</item>\n      <item>MUI_LANGDLL_ALWAYSSHOW</item>\n      <item>MUI_RESERVEFILE_INSTALLOPTIONS</item>\n      <item>MUI_RESERVEFILE_LANGDLL</item>\n      <item>MUI_FUNCTION_DESCRIPTION_BEGIN</item>\n      <item>MUI_DESCRIPTION_TEXT</item>\n      <item>MUI_FUNCTION_DESCRIPTION_END</item>\n      <item>MUI_INSTALLOPTIONS_EXTRACT</item>\n      <item>MUI_INSTALLOPTIONS_EXTRACT_AS</item>\n      <item>MUI_HEADER_TEXT</item>\n      <item>MUI_INSTALLOPTIONS_DISPLAY</item>\n      <item>MUI_INSTALLOPTIONS_INITDIALOG</item>\n      <item>MUI_INSTALLOPTIONS_SHOW</item>\n      <item>MUI_INSTALLOPTIONS_DISPLAY_RETURN</item>\n      <item>MUI_INSTALLOPTIONS_SHOW_RETURN</item>\n      <item>MUI_INSTALLOPTIONS_READ</item>\n      <item>MUI_INSTALLOPTIONS_WRITE</item>\n      <item>MUI_CUSTOMFUNCTION_GUIINIT</item>\n      <item>MUI_CUSTOMFUNCTION_UNGUIINIT</item>\n      <item>MUI_CUSTOMFUNCTION_ABORT</item>\n      <item>MUI_CUSTOMFUNCTION_UNABORT</item>\n      <item>MUI_PAGE_CUSTOMFUNCTION_PRE</item>\n      <item>MUI_PAGE_CUSTOMFUNCTION_SHOW</item>\n      <item>MUI_PAGE_CUSTOMFUNCTION_LEAVE</item>\n      <item>MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT</item>\n\n      <!-- LogicLib (http://nsis.sourceforge.net/LogicLib) -->\n      <item>IfCmd</item>\n      <item>If</item>\n      <item>Unless</item>\n      <item>IfNot</item>\n      <item>AndIf</item>\n      <item>AndUnless</item>\n      <item>AndIfNot</item>\n      <item>OrIf</item>\n      <item>OrUnless</item>\n      <item>OrIfNot</item>\n      <item>Else</item>\n      <item>ElseIf</item>\n      <item>ElseUnless</item>\n      <item>ElseIfNot</item>\n      <item>EndIf</item>\n      <item>EndUnless</item>\n      <item>IfThen</item>\n      <item>IfNotThen</item>\n      <item>ForEach</item>\n      <item>For</item>\n      <item>ExitFor</item>\n      <item>Next</item>\n      <item>While</item>\n      <item>ExitWhile</item>\n      <item>EndWhile</item>\n      <item>Do</item>\n      <item>DoWhile</item>\n      <item>DoUntil</item>\n      <item>ExitDo</item>\n      <item>Loop</item>\n      <item>LoopWhile</item>\n      <item>LoopUntil</item>\n      <item>Continue</item>\n      <item>Break</item>\n      <item>Select</item>\n      <item>CaseElse</item>\n      <item>Case_Else</item>\n      <item>Default</item>\n      <item>Case</item>\n      <item>Case2</item>\n      <item>Case3</item>\n      <item>Case4</item>\n      <item>Case5</item>\n      <item>EndSelect</item>\n      <item>Switch</item>\n      <item>EndSwitch</item>\n\n    </list>\n    <list name=\"basefunc\">\n      <item>Abort</item>\n      <item>AddBrandingImage</item>\n      <item>AddSize</item>\n      <item>AutoCloseWindow</item>\n      <item>BGFont</item>\n      <item>BGGradient</item>\n      <item>BrandingText</item>\n      <item>BringToFront</item>\n      <item>Call</item>\n      <item>CallInstDLL</item>\n      <item>Caption</item>\n      <item>ChangeUI</item>\n      <item>ClearErrors</item>\n      <item>ComponentText</item>\n      <item>GetDLLVersion</item>\n      <item>GetDLLVersionLocal</item>\n      <item>GetFileTime</item>\n      <item>GetFileTimeLocal</item>\n      <item>CopyFiles</item>\n      <item>CRCCheck</item>\n      <item>CreateDirectory</item>\n      <item>CreateFont</item>\n      <item>CreateShortcut</item>\n      <item>SetDatablockOptimize</item>\n      <item>DeleteINISec</item>\n      <item>DeleteINIStr</item>\n      <item>DeleteRegKey</item>\n      <item>DeleteRegValue</item>\n      <item>Delete</item>\n      <item>DetailPrint</item>\n      <item>DirText</item>\n      <item>DirShow</item>\n      <item>DirVar</item>\n      <item>DirVerify</item>\n      <item>GetInstDirError</item>\n      <item>AllowRootDirInstall</item>\n      <item>CheckBitmap</item>\n      <item>EnableWindow</item>\n      <item>EnumRegKey</item>\n      <item>EnumRegValue</item>\n      <item>Exch</item>\n      <item>Exec</item>\n      <item>ExecWait</item>\n      <item>ExecShell</item>\n      <item>ExpandEnvStrings</item>\n      <item>FindWindow</item>\n      <item>FindClose</item>\n      <item>FindFirst</item>\n      <item>FindNext</item>\n      <item>File</item>\n      <item>FileBufSize</item>\n      <item>FlushINI</item>\n      <item>ReserveFile</item>\n      <item>FileClose</item>\n      <item>FileErrorText</item>\n      <item>FileOpen</item>\n      <item>FileRead</item>\n      <item>FileWrite</item>\n      <item>FileReadByte</item>\n      <item>FileWriteByte</item>\n      <item>FileReadUTF16LE</item>\n      <item>FileWriteUTF16LE</item>\n      <item>FileReadWord</item>\n      <item>FileWriteWord</item>\n      <item>FileSeek</item>\n      <item>Function</item>\n      <item>FunctionEnd</item>\n      <item>GetDlgItem</item>\n      <item>GetFullPathName</item>\n      <item>GetTempFileName</item>\n      <item>HideWindow</item>\n      <item>Icon</item>\n      <item>IfAbort</item>\n      <item>IfErrors</item>\n      <item>IfFileExists</item>\n      <item>IfRebootFlag</item>\n      <item>IfSilent</item>\n      <item>InstallDirRegKey</item>\n      <item>InstallColors</item>\n      <item>InstallDir</item>\n      <item>InstProgressFlags</item>\n      <item>InstType</item>\n      <item>IntOp</item>\n      <item>IntCmp</item>\n      <item>IntCmpU</item>\n      <item>IntFmt</item>\n      <item>IsWindow</item>\n      <item>Goto</item>\n      <item>LangString</item>\n      <item>LangStringUP</item>\n      <item>LicenseData</item>\n      <item>LicenseForceSelection</item>\n      <item>LicenseLangString</item>\n      <item>LicenseText</item>\n      <item>LicenseBkColor</item>\n      <item>LoadLanguageFile</item>\n      <item>LogSet</item>\n      <item>LogText</item>\n      <item>MessageBox</item>\n      <item>Nop</item>\n      <item>Name</item>\n      <item>OutFile</item>\n      <item>Page</item>\n      <item>PageCallbacks</item>\n      <item>PageEx</item>\n      <item>PageExEnd</item>\n      <item>Pop</item>\n      <item>Push</item>\n      <item>Quit</item>\n      <item>ReadINIStr</item>\n      <item>ReadRegDWORD</item>\n      <item>ReadRegStr</item>\n      <item>ReadEnvStr</item>\n      <item>Reboot</item>\n      <item>RegDLL</item>\n      <item>Rename</item>\n      <item>Return</item>\n      <item>RMDir</item>\n      <item>Section</item>\n      <item>SectionEnd</item>\n      <item>SectionIn</item>\n      <item>SubSection</item>\n      <item>SectionGroup</item>\n      <item>SubSectionEnd</item>\n      <item>SectionGroupEnd</item>\n      <item>SearchPath</item>\n      <item>SectionSetFlags</item>\n      <item>SectionGetFlags</item>\n      <item>SectionSetInstTypes</item>\n      <item>SectionGetInstTypes</item>\n      <item>SectionGetText</item>\n      <item>SectionSetText</item>\n      <item>SectionGetSize</item>\n      <item>SectionSetSize</item>\n      <item>GetCurInstType</item>\n      <item>SetCurInstType</item>\n      <item>InstTypeSetText</item>\n      <item>InstTypeGetText</item>\n      <item>SendMessage</item>\n      <item>SetAutoClose</item>\n      <item>SetCtlColors</item>\n      <item>SetBrandingImage</item>\n      <item>SetCompress</item>\n      <item>SetCompressor</item>\n      <item>SetCompressorDictSize</item>\n      <item>SetCompressionLevel</item>\n      <item>SetDateSave</item>\n      <item>SetDetailsView</item>\n      <item>SetDetailsPrint</item>\n      <item>SetErrors</item>\n      <item>SetErrorLevel</item>\n      <item>GetErrorLevel</item>\n      <item>SetFileAttributes</item>\n      <item>SetFont</item>\n      <item>SetOutPath</item>\n      <item>SetOverwrite</item>\n      <item>SetPluginUnload</item>\n      <item>SetRebootFlag</item>\n      <item>SetRegView</item>\n      <item>SetShellVarContext</item>\n      <item>SetSilent</item>\n      <item>ShowInstDetails</item>\n      <item>ShowUninstDetails</item>\n      <item>ShowWindow</item>\n      <item>SilentInstall</item>\n      <item>SilentUnInstall</item>\n      <item>Sleep</item>\n      <item>StrCmp</item>\n      <item>StrCmpS</item>\n      <item>StrCpy</item>\n      <item>UnsafeStrCpy</item>\n      <item>StrLen</item>\n      <item>SubCaption</item>\n      <item>Unicode</item>\n      <item>UninstallExeName</item>\n      <item>UninstallCaption</item>\n      <item>UninstallIcon</item>\n      <item>UninstPage</item>\n      <item>UninstallText</item>\n      <item>UninstallSubCaption</item>\n      <item>UnRegDLL</item>\n      <item>WindowIcon</item>\n      <item>WriteINIStr</item>\n      <item>WriteRegBin</item>\n      <item>WriteRegDWORD</item>\n      <item>WriteRegStr</item>\n      <item>WriteRegExpandStr</item>\n      <item>WriteUninstaller</item>\n      <item>PEDllCharacteristics</item>\n      <item>PESubsysVer</item>\n      <item>XPStyle</item>\n      <item>RequestExecutionLevel</item>\n      <item>ManifestDPIAware</item>\n      <item>ManifestSupportedOS</item>\n      <item>MiscButtonText</item>\n      <item>DetailsButtonText</item>\n      <item>UninstallButtonText</item>\n      <item>InstallButtonText</item>\n      <item>SpaceTexts</item>\n      <item>CompletedText</item>\n      <item>GetFunctionAddress</item>\n      <item>GetLabelAddress</item>\n      <item>GetCurrentAddress</item>\n      <item>InitPluginsDir</item>\n      <item>AllowSkipFiles</item>\n      <item>Var</item>\n      <item>VIAddVersionKey</item>\n      <item>VIProductVersion</item>\n      <item>VIFileVersion</item>\n      <item>LockWindow</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Option\" context=\"#stay\" String=\"options\"/>\n        <keyword attribute=\"Macro\" context=\"#stay\" String=\"macros\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"BaseFunc\" context=\"#stay\" String=\"basefunc\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\";\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^{|}~\"/>\n        <!--<RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\d*\\.?\\d*e?\\d+\"/>-->\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Option\" defStyleNum=\"dsNormal\" color=\"#9500FF\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Macro\" defStyleNum=\"dsNormal\" color=\"#9500FF\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n<!--       <itemData name=\"Number\" defStyleNum=\"dsBaseN\"/> -->\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"BaseFunc\" defStyleNum=\"dsNormal\" color=\"#0095FF\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Alert\" defStyleNum=\"dsAlert\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\";\"/>\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\".\" additionalDeliminator=\"&quot;\"/>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/objectivec.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Objective-C\" version=\"3\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.m;*.h\" mimetype=\"text/x-objc-src;text/x-c-hdr\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>enum</item>\n      <item>extern</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>return</item>\n      <item>sizeof</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>typedef</item>\n      <item>union</item>\n      <item>while</item>\n      <item>@class</item>\n      <item>@defs</item>\n      <item>@encode</item>\n      <item>@end</item>\n      <item>@implementation</item>\n      <item>@interface</item>\n      <item>@private</item>\n      <item>@protected</item>\n      <item>@protocol</item>\n      <item>@public</item>\n      <item>@selector</item>\n      <item>self</item>\n      <item>super</item>\n    </list>\n    <list name=\"types\">\n      <item>auto</item>\n      <item>char</item>\n      <item>const</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>register</item>\n      <item>short</item>\n      <item>signed</item>\n      <item>static</item>\n      <item>unsigned</item>\n      <item>void</item>\n      <item>volatile</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Default\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"/\" char1=\"*\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"^#\"/>\n        <Detect2Chars attribute=\"String\" context=\"String\" char=\"@\" char1=\"&quot;\" />\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SingleLineComment\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"MultiLineComment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"Default\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineCommentPrep\" char=\"/\" char1=\"*\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"MultiLineCommentPrep\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop#pop\" char=\"*\" char1=\"/\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"  defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Char\"  defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n      <itemData name=\"Prep. Lib\"  defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/objectivecpp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Objective-C++\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.mm;*.M;*.h\" mimetype=\"text/x-objcpp-src;text/x-c-hdr\" author=\"Gennady Telegin (gepo@lvk.cs.msu.su\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>enum</item>\n      <item>extern</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>return</item>\n      <item>sizeof</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>typedef</item>\n      <item>union</item>\n      <item>while</item>\n      <item>@class</item>\n      <item>@defs</item>\n      <item>@encode</item>\n      <item>@end</item>\n      <item>@implementation</item>\n      <item>@interface</item>\n      <item>@private</item>\n      <item>@protected</item>\n      <item>@protocol</item>\n      <item>@public</item>\n      <item>@selector</item>\n      <item>self</item>\n      <item>super</item>\n      \n      <item>asm</item>\n      <item>catch</item>\n      <item>class</item>\n      <item>const_cast</item>\n      <item>delete</item>\n      <item>dynamic_cast</item>\n      <item>explicit</item>\n      <item>export</item>\n      <item>false</item>\n      <item>friend</item>\n      <item>inline</item>\n      <item>namespace</item>\n      <item>new</item>\n      <item>operator</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>qobject_cast</item>\n      <item>reinterpret_cast</item>\n      <item>static_cast</item>\n      <item>template</item>\n      <item>this</item>\n      <item>throw</item>\n      <item>true</item>\n      <item>try</item>\n      <item>typeid</item>\n      <item>type_info</item>\n      <item>typename</item>\n      <item>using</item>\n      <item>virtual</item>\n\n      <item>and</item>\n      <item>and_eq</item>\n      <item>bad_cast</item>\n      <item>bad_typeid</item>\n      <item>bitand</item>\n      <item>bitor</item>\n      <item>compl</item>\n      <item>not</item>\n      <item>not_eq</item>\n      <item>or</item>\n      <item>or_eq</item>\n      <item>xor</item>\n      <item>xor_eq</item>\n    </list>\n    <list name=\"extensions\">\n      <item>K_DCOP</item>\n      <item>SLOT</item>\n      <item>SIGNAL</item>\n      <item>Q_CLASSINFO</item>\n      <item>Q_ENUMS</item>\n      <item>Q_EXPORT</item>\n      <item>Q_OBJECT</item>\n      <item>Q_OVERRIDE</item>\n      <item>Q_PROPERTY</item>\n      <item>Q_SETS</item>\n      <item>Q_SIGNALS</item>\n      <item>Q_SLOTS</item>\n      <item>Q_FOREACH</item>\n      <item>Q_DECLARE_FLAGS</item>\n      <item>Q_INIT_RESOURCE</item>\n      <item>Q_CLEANUP_RESOURCE</item>\n      <item>Q_GLOBAL_STATIC</item>\n      <item>Q_GLOBAL_STATIC_WITH_ARGS</item>\n      <item>Q_DECLARE_INTERFACE</item>\n      <item>Q_DECLARE_TYPEINFO</item>\n      <item>Q_DECLARE_SHARED</item>\n      <item>Q_DECLARE_FLAGS</item>\n      <item>Q_DECLARE_OPERATORS_FOR_FLAGS</item>\n      <item>Q_FOREVER</item>\n      <item>Q_DECLARE_PRIVATE</item>\n      <item>Q_DECLARE_PUBLIC</item>\n      <item>Q_D</item>\n      <item>Q_Q</item>\n      <item>Q_DISABLE_COPY</item>\n      <item>Q_INTERFACES</item>\n      <item>Q_FLAGS</item>\n      <item>Q_SCRIPTABLE</item>\n      <item>Q_INVOKABLE</item>\n      <item>Q_GADGET</item>\n      <item>Q_ARG</item>\n      <item>Q_RETURN_ARG</item>\n      <item>Q_ASSERT</item>\n      <item>Q_ASSERT_X</item>\n      <item>TRUE</item>\n      <item>FALSE</item>\n      <item>connect</item>\n      <item>disconnect</item>\n      <item>emit</item>\n      <item>signals</item>\n      <item>slots</item>\n      <item>foreach</item>\n      <item>forever</item>\n    </list>\n    <list name=\"types\">\n      <item>auto</item>\n      <item>char</item>\n      <item>const</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>register</item>\n      <item>short</item>\n      <item>signed</item>\n      <item>static</item>\n      <item>unsigned</item>\n      <item>void</item>\n      <item>volatile</item>\n      \n      <item>bool</item>\n      <item>mutable</item>\n      <item>uchar</item>\n      <item>uint</item>\n      <item>int8_t</item>\n      <item>int16_t</item>\n      <item>int32_t</item>\n      <item>int64_t</item>\n      <item>uint8_t</item>\n      <item>uint16_t</item>\n      <item>uint32_t</item>\n      <item>uint64_t</item>\n      <item>wchar_t</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Default\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\" beginRegion=\"Outscoped\" firstNonSpace=\"true\" />\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n        \n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        \n        <DetectIdentifier />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"/\" char1=\"*\"/>\n\n        <Detect2Chars attribute=\"String\" context=\"String\" char=\"@\" char1=\"&quot;\" />\n\n        <keyword attribute=\"Extensions\" context=\"#stay\" String=\"extensions\" />\n\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SingleLineComment\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"MultiLineComment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"MultiLineCommentPrep\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop#pop\" char=\"*\" char1=\"/\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <!-- from c++ -->\n\n      <context attribute=\"Region Marker\" lineEndContext=\"#pop\" name=\"Region Marker\">\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"Define\" String=\"define.*((?=\\\\))\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"define.*\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineCommentPrep\" char=\"/\" char1=\"*\"/>\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"Outscoped\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*(endif|else|elif)\" endRegion=\"Outscoped\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"Outscoped\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"Outscoped\" firstNonSpace=\"true\"/>\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"   defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"       defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Extensions\"    defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"     defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"       defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Octal\"         defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"           defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"         defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Char\"          defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\"        defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"   defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\"       defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"        defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n      <itemData name=\"Prep. Lib\"     defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n    </itemDatas>\n  </highlighting>\n  \n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ocaml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Kate syntax highlighting for Objective Caml version 4.02 in the standard and revised syntaxes, with Ocamldoc comments. -->\n\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!-- Regular expresion constants: -->\n<!ENTITY LOWER  \"a-z\\300-\\326\\330-\\337\">         <!-- Lowercase Latin-1 letters. -->\n<!ENTITY UPPER  \"A-Z\\340-\\366\\370-\\377\">         <!-- Uppercase Latin-1 letters. -->\n<!ENTITY LETTER \"&LOWER;&UPPER;\">                <!-- All Latin-1 letters. -->\n<!ENTITY LIDENT \"[&LOWER;_][&LETTER;0-9_']*\">    <!-- Lowercase OCaml identifiers. -->\n<!ENTITY UIDENT \"`?[&UPPER;][&LETTER;0-9_']*\">   <!-- Uppercase OCaml identifiers. -->\n<!ENTITY IDENT  \"`?[&LETTER;][&LETTER;0-9_']*\">  <!-- All OCaml identifiers. -->\n<!ENTITY ESC    \"(\\\\[ntbr'&quot;\\\\]|\\\\[0-9]{3}|\\\\x[0-9A-Fa-f]{2})\"> <!-- OCaml character code escapes. -->\n<!ENTITY DEC    \"[0-9][0-9_]*\">                                     <!-- Decimal digits with underscores. -->\n]>\n<language name=\"Objective Caml\"\n          extensions=\"*.ml;*.mli\"\n          mimetype=\"text/x-ocaml\"\n          section=\"Sources\"\n          version=\"6\"\n          priority=\"10\"\n          kateversion=\"2.4\"\n          author=\"Glyn Webster (glynwebster@orcon.net.nz) and Vincent Hugot (vincent.hugot@gmail.com)\"\n          license=\"LGPL\" >\n\n  <highlighting>\n    <list name=\"qtest keywords\">\n      <item>in</item>\n      <item>as</item>\n      <item>forall</item>\n    </list>\n    <list name=\"Keywords\">\n      <item>and</item>\n      <item>as</item>\n      <item>assert</item>\n      <item>asr</item>\n      <item>begin</item>\n      <item>class</item>\n      <item>closed</item>\n      <item>constraint</item>\n      <item>do</item>\n      <item>done</item>\n      <item>downto</item>\n      <item>else</item>\n      <item>end</item>\n      <item>exception</item>\n      <item>external</item>\n      <item>false</item>\n      <item>for</item>\n      <item>fun</item>\n      <item>function</item>\n      <item>functor</item>\n      <item>if</item>\n      <item>in</item>\n      <item>include</item>\n      <item>inherit</item>\n      <item>land</item>\n      <item>lazy</item>\n      <item>let</item>\n      <item>lor</item>\n      <item>lsl</item>\n      <item>lsr</item>\n      <item>lxor</item>\n      <item>match</item>\n      <item>method</item>\n      <item>mod</item>\n      <item>module</item>\n      <item>mutable</item>\n      <item>new</item>\n      <item>nonrec</item>\n      <item>object</item>\n      <item>of</item>\n      <item>open</item>\n      <item>or</item>\n      <item>parser</item>\n      <item>private</item>\n      <item>rec</item>\n      <item>sig</item>\n      <item>struct</item>\n      <item>then</item>\n      <item>to</item>\n      <item>true</item>\n      <item>try</item>\n      <item>type</item>\n      <item>val</item>\n      <item>virtual</item>\n      <item>when</item>\n      <item>while</item>\n      <item>with</item>\n    </list>\n\n    <!-- Revised Syntax keywords are highlighted as identifiers by default. -->\n    <!-- Change their highlighting colour to match the standard keywords    -->\n    <!-- if you intend to use the Camlp4 Revised Syntax.                    -->\n    <list name=\"Revised Syntax Keywords\">\n      <item>declare</item>\n      <item>value</item>\n      <item>where</item>\n    </list>\n\n    <list name=\"Pervasive Functions\">\n      <item>abs</item>\n      <item>abs_float</item>\n      <item>acos</item>\n      <item>asin</item>\n      <item>at_exit</item>\n      <item>atan</item>\n      <item>atan2</item>\n      <item>bool_of_string</item>\n      <item>ceil</item>\n      <item>char_of_int</item>\n      <item>classify_float</item>\n      <item>close_in</item>\n      <item>close_in_noerr</item>\n      <item>close_out</item>\n      <item>close_out_noerr</item>\n      <item>compare</item>\n      <item>copysign</item>\n      <item>cos</item>\n      <item>cosh</item>\n      <item>decr</item>\n      <item>do_at_exit</item>\n      <item>epsilon_float</item>\n      <item>exp</item>\n      <item>expm1</item>\n      <item>float</item>\n      <item>float_of_int</item>\n      <item>float_of_string</item>\n      <item>floor</item>\n      <item>flush</item>\n      <item>flush_all</item>\n      <item>format_of_string</item>\n      <item>frexp</item>\n      <item>fst</item>\n      <item>hypot</item>\n      <item>ignore</item>\n      <item>in_channel_length</item>\n      <item>incr</item>\n      <item>infinity</item>\n      <item>input</item>\n      <item>input_binary_int</item>\n      <item>input_byte</item>\n      <item>input_char</item>\n      <item>input_line</item>\n      <item>input_value</item>\n      <item>int_of_char</item>\n      <item>int_of_float</item>\n      <item>int_of_string</item>\n      <item>ldexp</item>\n      <item>lnot</item>\n      <item>log</item>\n      <item>log10</item>\n      <item>log1p</item>\n      <item>max</item>\n      <item>max_float</item>\n      <item>max_int</item>\n      <item>min</item>\n      <item>min_float</item>\n      <item>min_int</item>\n      <item>mod_float</item>\n      <item>modf</item>\n      <item>nan</item>\n      <item>neg_infinity</item>\n      <item>not</item>\n      <item>open_in</item>\n      <item>open_in_bin</item>\n      <item>open_in_gen</item>\n      <item>open_out</item>\n      <item>open_out_bin</item>\n      <item>open_out_gen</item>\n      <item>out_channel_length</item>\n      <item>output</item>\n      <item>output_binary_int</item>\n      <item>output_byte</item>\n      <item>output_bytes</item>\n      <item>output_char</item>\n      <item>output_string</item>\n      <item>output_substring</item>\n      <item>output_value</item>\n      <item>pos_in</item>\n      <item>pos_out</item>\n      <item>pred</item>\n      <item>prerr_bytes</item>\n      <item>prerr_char</item>\n      <item>prerr_endline</item>\n      <item>prerr_float</item>\n      <item>prerr_int</item>\n      <item>prerr_newline</item>\n      <item>prerr_string</item>\n      <item>print_bytes</item>\n      <item>print_char</item>\n      <item>print_endline</item>\n      <item>print_float</item>\n      <item>print_int</item>\n      <item>print_newline</item>\n      <item>print_string</item>\n      <item>read_float</item>\n      <item>read_int</item>\n      <item>read_line</item>\n      <item>really_input</item>\n      <item>really_input_string</item>\n      <item>ref</item>\n      <item>seek_in</item>\n      <item>seek_out</item>\n      <item>set_binary_mode_in</item>\n      <item>set_binary_mode_out</item>\n      <item>sin</item>\n      <item>sinh</item>\n      <item>snd</item>\n      <item>sqrt</item>\n      <item>stderr</item>\n      <item>stdin</item>\n      <item>stdout</item>\n      <item>string_of_bool</item>\n      <item>string_of_float</item>\n      <item>string_of_format</item>\n      <item>string_of_int</item>\n      <item>succ</item>\n      <item>tan</item>\n      <item>tanh</item>\n      <item>truncate</item>\n      <item>unsafe_really_input</item>\n      <item>valid_float_lexem</item>\n    </list>\n\n    <!-- These pervasive functions control program flow,    -->\n    <!-- so some people like to highlight them as keywords: -->\n    <list name=\"Flow Control Functions\">\n      <item>exit</item>\n      <item>failwith</item>\n      <item>invalid_arg</item>\n      <item>raise</item>\n      <item>raise_notrace</item>\n    </list>\n\n    <list name=\"Pervasive Types\">\n      <item>array</item>\n      <item>bool</item>\n      <item>bytes</item>\n      <item>char</item>\n      <item>exn</item>\n      <item>float</item>\n      <item>format4</item>\n      <item>format6</item>\n      <item>fpclass</item>\n      <item>in_channel</item>\n      <item>int</item>\n      <item>int32</item>\n      <item>int64</item>\n      <item>lazy_t</item>\n      <item>list</item>\n      <item>nativeint</item>\n      <item>open_flag</item>\n      <item>option</item>\n      <item>out_channel</item>\n      <item>real</item>\n      <item>ref</item>\n      <item>string</item>\n      <item>unit</item>\n    </list>\n\n    <list name=\"Pervasive Variant Tags\">\n      <item>FP_infinite</item>\n      <item>FP_nan</item>\n      <item>FP_normal</item>\n      <item>FP_subnormal</item>\n      <item>FP_zero</item>\n      <item>None</item>\n      <item>Open_append</item>\n      <item>Open_binary</item>\n      <item>Open_creat</item>\n      <item>Open_excl</item>\n      <item>Open_nonblock</item>\n      <item>Open_rdonly</item>\n      <item>Open_text</item>\n      <item>Open_trunc</item>\n      <item>Open_wronly</item>\n      <item>Some</item>\n    </list>\n\n    <list name=\"Pervasive Exceptions\">\n      <item>Assert_failure</item>\n      <item>Division_by_zero</item>\n      <item>End_of_file</item>\n      <item>Exit</item>\n      <item>Failure</item>\n      <item>Invalid_argument</item>\n      <item>Match_failure</item>\n      <item>Not_found</item>\n      <item>Out_of_memory</item>\n      <item>Stack_overflow</item>\n      <item>Sys_blocked_io</item>\n      <item>Sys_error</item>\n      <item>Undefined_recursive_module</item>\n    </list>\n\n    <list name=\"Standard Library Modules\">\n      <item>Arg</item>\n      <item>Array</item>\n      <item>ArrayLabels</item>\n      <item>Buffer</item>\n      <item>Bytes</item>\n      <item>Callback</item>\n      <item>Char</item>\n      <item>Complex</item>\n      <item>Digest</item>\n      <item>Ephemeron</item>\n      <item>Filename</item>\n      <item>Format</item>\n      <item>Gc</item>\n      <item>Genlex</item>\n      <item>Hashtbl</item>\n      <item>Int32</item>\n      <item>Int64</item>\n      <item>Lazy</item>\n      <item>Lexing</item>\n      <item>List</item>\n      <item>ListLabels</item>\n      <item>Map</item>\n      <item>Marshal</item>\n      <item>MoreLabels</item>\n      <item>Nativeint</item>\n      <item>Oo</item>\n      <item>Parsing</item>\n      <item>Printexc</item>\n      <item>Printf</item>\n      <item>Queue</item>\n      <item>Random</item>\n      <item>Scanf</item>\n      <item>Set</item>\n      <item>Sort</item>\n      <item>Spacetime</item>\n      <item>Stack</item>\n      <item>StdLabels</item>\n      <item>Stream</item>\n      <item>String</item>\n      <item>StringLabels</item>\n      <item>Sys</item>\n      <item>Uchar</item>\n      <item>Weak</item>\n    </list>\n\n    <contexts>\n\n      <context name=\"Code\" lineEndContext=\"#stay\" attribute=\"Operator\">\n\n        <!-- ] and ]} close code samples in Ocamldoc, so -->\n        <!-- nested [ ] and { } brackets have to be allowed for: -->\n        <DetectChar char=\"[\" context=\"Nested Code 1\" attribute=\"Operator\" />\n        <DetectChar char=\"{\" context=\"Nested Code 2\" attribute=\"Operator\" />\n\n        <!-- Comments. -->\n        <!-- A (** begins a special comment with Ocamldoc documentation markup. -->\n        <StringDetect String=\"(**)\"      context=\"#stay\"    attribute=\"Comment\" />\n        <StringDetect String=\"(**\"       context=\"Ocamldoc\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <RegExpr String=\"\\(\\*\\$(T|Q|R|=)\"       context=\"qtest header\" attribute=\"qtest body style\" beginRegion=\"comment\" />\n        <Detect2Chars char=\"(\" char1=\"*\" context=\"Comment\"  attribute=\"Comment\" beginRegion=\"comment\" />\n\n        <!-- Interpreter directives. -->\n        <!-- (These are lines where the first symbol is a '#' followed by an identifier. -->\n        <!-- Such lines could also be part of a method call split over two lines but     -->\n        <!-- it's unlikey anyone would code like that.)                                  -->\n        <RegExpr String=\"#&IDENT;.*$\" context=\"#stay\" firstNonSpace=\"true\" attribute=\"Directive\"/>\n\n        <!-- String, character and Camlp4 \"quotation\" constants.              -->\n        <!-- Note: If you must modify the pattern for characters be precise:  -->\n        <!-- single quotes have several meanings in Ocaml.                    -->\n        <DetectChar char=\"&quot;\" context=\"String\" attribute=\"String\" />\n        <RegExpr String=\"'(&ESC;|[^'])'\" context=\"#stay\" attribute=\"Character\" />\n        <Detect2Chars char=\"&lt;\" char1=\"&lt;\" context=\"Camlp4 Quotation\" attribute=\"Camlp4 Quotation\" />\n        <RegExpr String=\"&lt;:&IDENT;&lt;\" context=\"Camlp4 Quotation\" attribute=\"Camlp4 Quotation\" />\n\n        <!-- Identifiers and keywords. -->\n        <keyword String=\"Keywords\"                 context=\"#stay\" attribute=\"Keyword\" />\n        <keyword String=\"Revised Syntax Keywords\"  context=\"#stay\" attribute=\"Revised Syntax Keyword\" />\n        <keyword String=\"Flow Control Functions\"      context=\"#stay\" attribute=\"Flow Control Functions\" />\n        <keyword String=\"Pervasive Functions\"      context=\"#stay\" attribute=\"Pervasive Functions\" />\n        <keyword String=\"Pervasive Types\"          context=\"#stay\" attribute=\"Pervasive Types\" />\n        <keyword String=\"Pervasive Exceptions\"     context=\"#stay\" attribute=\"Pervasive Exceptions\" />\n        <keyword String=\"Pervasive Variant Tags\"   context=\"#stay\" attribute=\"Pervasive Variant Tags\" />\n        <keyword String=\"Standard Library Modules\" context=\"#stay\" attribute=\"Standard Library Modules\" />\n        <RegExpr String=\"&LIDENT;\"                 context=\"#stay\" attribute=\"Lowercase Identifier\" />\n        <RegExpr String=\"&UIDENT;\"                 context=\"#stay\" attribute=\"Uppercase Identifier\" />\n\n        <!-- Numeric constants. -->\n        <!-- Note that they may contain underscores. -->\n        <RegExpr String=\"-?0[xX][0-9A-Fa-f_]+\" context=\"#stay\" attribute=\"Hexadecimal\" />\n        <RegExpr String=\"-?0[oO][0-7_]+\" context=\"#stay\" attribute=\"Octal\" />\n        <RegExpr String=\"-?0[bB][01_]+\" context=\"#stay\" attribute=\"Binary\" />\n        <RegExpr String=\"-?&DEC;(\\.&DEC;([eE][-+]?&DEC;)?|[eE][-+]?&DEC;)\" context=\"#stay\" attribute=\"Float\" />\n        <RegExpr String=\"-?&DEC;\" context=\"#stay\" attribute=\"Decimal\" />\n\n        <IncludeRules context=\"Unmatched Closing Brackets\" />\n      </context>\n\n      <context name=\"Nested Code 1\" lineEndContext=\"#stay\" attribute=\"Operator\">\n        <DetectChar char=\"]\" context=\"#pop\" attribute=\"Operator\" />\n        <IncludeRules context=\"Code\" includeAttrib=\"true\" />\n      </context>\n\n      <context name=\"Nested Code 2\" lineEndContext=\"#stay\" attribute=\"Operator\">\n        <DetectChar char=\"}\" context=\"#pop\" attribute=\"Operator\" />\n        <IncludeRules context=\"Code\" includeAttrib=\"true\" />\n      </context>\n\n      <context name=\"String\" lineEndContext=\"#stay\" attribute=\"String\">\n        <DetectChar char=\"&quot;\" context=\"#pop\" attribute=\"String\" />\n        <RegExpr String=\"&ESC;\" context=\"#stay\" attribute=\"Escaped Characters\" />\n        <!-- A backslash at the end of a line in a string indicates  -->\n        <!-- that the string will continue on the next line:         -->\n        <RegExpr String=\"\\\\$\" context=\"#stay\" attribute=\"Escaped Characters\" />\n      </context>\n\n      <context name=\"qtest header\" lineEndContext=\"qtest\" attribute=\"Operator\">\n        <keyword String=\"qtest keywords\"  attribute=\"Keyword\" />\n        <DetectChar char=\"&amp;\" context=\"qtest param\" attribute=\"qtest param style\" />\n        <RegExpr String=\"&LIDENT;\" context=\"#stay\" attribute=\"qtest header style\"/>\n      </context>\n\n      <context name=\"qtest param\" lineEndContext=\"qtest\" attribute=\"qtest param style\">\n      </context>\n\n      <context name=\"qtest\" lineEndContext=\"#stay\" attribute=\"qtest body style\">\n        <Detect2Chars char=\"*\" char1=')' context=\"#pop\" attribute=\"qtest body style\" endRegion=\"comment\" />\n        <IncludeRules context=\"Code\" includeAttrib=\"true\" />\n      </context>\n\n      <context name=\"Comment\" lineEndContext=\"#stay\" attribute=\"Comment\">\n        <Detect2Chars char=\"*\" char1=\")\" context=\"#pop\" attribute=\"Comment\" endRegion=\"comment\"  />\n        <!-- Support for nested comments: -->\n        <Detect2Chars char=\"(\" char1=\"*\" context=\"Comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <!-- Strings in Ocaml comments must be well-formed: -->\n        <DetectChar char=\"&quot;\" context=\"String in Comment\" attribute=\"String in Comment\" />\n      </context>\n\n      <context name=\"String in Comment\" lineEndContext=\"#stay\" attribute=\"String in Comment\">\n        <DetectChar char=\"&quot;\" context=\"#pop\" attribute=\"String in Comment\" />\n        <IncludeRules context=\"String\" />\n      </context>\n\n      <!-- Camlp4 Quotations. These are source code literals used by the Campl4 preprocessor.           -->\n      <!-- The only escapes allowed in a Camlp4 quotation are for the quotation start and stop symbols. -->\n      <context name=\"Camlp4 Quotation\" lineEndContext=\"#stay\" attribute=\"Camlp4 Quotation\">\n        <Detect2Chars char=\"&gt;\" char1=\"&gt;\"     context=\"#pop\"             attribute=\"Camlp4 Quotation\" />\n        <Detect2Chars char=\"&lt;\" char1=\"&lt;\"     context=\"Camlp4 Quotation\" attribute=\"Camlp4 Quotation\" />\n        <RegExpr String=\"&lt;:&IDENT;&lt;\"         context=\"Camlp4 Quotation\" attribute=\"Camlp4 Quotation\" />\n        <RegExpr String=\"\\\\(\\\\|&gt;&gt;|&lt;&lt;)\" context=\"#stay\"            attribute=\"Escaped Characters\" />\n        <RegExpr String=\"\\\\&lt;:&IDENT;&lt;\"       context=\"#stay\"            attribute=\"Escaped Characters\" />\n      </context>\n\n    <!-- Ocamldoc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->\n\n      <context name=\"Ocamldoc\" lineEndContext=\"#stay\" attribute=\"Ocamldoc Text\">\n        <Detect2Chars char=\"*\" char1=\")\" context=\"#pop\" attribute=\"Comment\" endRegion=\"comment\" />\n\n        <!-- A backslash escapes markup characters: -->\n        <RegExpr String=\"\\\\.\" context=\"#stay\" attribute=\"Escaped Characters\" />\n\n        <!-- Support for nested comments and strings: -->\n        <StringDetect String=\"(**)\"      context=\"#stay\"    attribute=\"Comment\" />\n        <StringDetect String=\"(**\"       context=\"Ocamldoc\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <Detect2Chars char=\"(\" char1=\"*\" context=\"Comment\"  attribute=\"Comment\" beginRegion=\"comment\" />\n\n        <!-- Strings in Ocaml comments must be well-formed: -->\n        <DetectChar char=\"&quot;\" context=\"String in Comment\" attribute=\"String in Comment\" />\n\n        <!-- Nested Markup: -->\n        <DetectChar   char=\"[\"                   context=\"Ocamldoc Code\"         attribute=\"Ocamldoc Markup\" />\n        <Detect2Chars char=\"{\" char1=\"[\"         context=\"Ocamldoc Preformatted\" attribute=\"Ocamldoc Markup\" />\n        <Detect2Chars char=\"{\" char1=\"%\"         context=\"Ocamldoc LaTeX\"        attribute=\"Ocamldoc Markup\" />\n        <Detect2Chars char=\"{\" char1=\"^\"         context=\"Nested Ocamldoc\"       attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{]v(\\s|$)\"             context=\"Ocamldoc Verbatim\"     attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{]b(\\s|$)\"             context=\"Ocamldoc Bold\"         attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{]i(\\s|$)\"             context=\"Ocamldoc Italic\"       attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{]e(\\s|$)\"             context=\"Ocamldoc Emphasised\"   attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{][0-9]+(:&IDENT;)?\\s\" context=\"Ocamldoc Heading\"      attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{][{]:&IDENT;[}]\"      context=\"Ocamldoc Link\"         attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{]!([a-z]+:)?\"         context=\"Ocamldoc References\"   attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"[{]&IDENT;(\\s|$)\"       context=\"Nested Ocamldoc\"       attribute=\"Ocamldoc Markup\" />\n\n        <RegExpr String=\"@see\\s*(&lt;[^&gt;]*&gt;|&quot;[^&quot;]*&quot;|'[^']*')\" context=\"#stay\" attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"@(param|raise)\\s*\" context=\"Ocamldoc Identifier\" attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"@(author|before|deprecated|return|since|version)\" context=\"#stay\" attribute=\"Ocamldoc Markup\" />\n        <RegExpr String=\"@&IDENT;\" context=\"#stay\" attribute=\"Ocamldoc Custom Tag\" />\n\n\n\n        <!-- A dash at the start of a line is a bullet point. -->\n        <RegExpr String=\"^[ &#009;]*-\\s\" context=\"#stay\"  attribute=\"Ocamldoc Markup\" />\n\n        <IncludeRules context=\"Unmatched Closing Brackets\" />\n      </context>\n\n      <context name=\"Ocamldoc Code\" lineEndContext=\"#stay\" attribute=\"Operator\">\n        <DetectChar char=\"]\" context=\"#pop\" attribute=\"Ocamldoc Markup\" />\n        <IncludeRules context=\"Code\" includeAttrib=\"true\" />\n      </context>\n\n      <context name=\"Ocamldoc Preformatted\" lineEndContext=\"#stay\" attribute=\"Operator\">\n        <Detect2Chars char=\"]\" char1=\"}\" context=\"#pop\" attribute=\"Ocamldoc Markup\" />\n        <IncludeRules context=\"Code\" includeAttrib=\"true\" />\n      </context>\n\n      <context name=\"Ocamldoc Verbatim\" lineEndContext=\"#stay\" attribute=\"Ocamldoc Text\">\n        <Detect2Chars char=\"v\" char1=\"}\" context=\"#pop\" attribute=\"Ocamldoc Markup\" />\n      </context>\n\n      <context name=\"Ocamldoc LaTeX\" lineEndContext=\"#stay\" attribute=\"Ocamldoc LaTeX\">\n        <Detect2Chars char=\"%\" char1=\"}\" context=\"#pop\" attribute=\"Ocamldoc Markup\" />\n        <IncludeRules context=\"##LaTeX\" />\n      </context>\n\n      <!-- A single qualified Ocaml identifier, perhaps preceeded by whitespace. } -->\n      <context name=\"Ocamldoc Identifier\" lineEndContext=\"#stay\" attribute=\"Mismatched Brackets\">\n        <RegExpr      String=\"&IDENT;(\\.&IDENT;)*\" context=\"#pop\" attribute=\"Ocamldoc Link\"  />\n        <Detect2Chars char=\"*\" char1=\")\"           context=\"#pop\" attribute=\"Mismatched Brackets\" />\n        <DetectSpaces />\n      </context>\n\n      <context name=\"Nested Ocamldoc\" lineEndContext=\"#stay\" attribute=\"Operator\">\n        <DetectChar   char=\"}\"           context=\"#pop\" attribute=\"Ocamldoc Markup\" />\n        <Detect2Chars char=\"*\" char1=\")\" context=\"#pop\" attribute=\"Mismatched Brackets\" />\n        <IncludeRules context=\"Ocamldoc\" includeAttrib=\"true\" />\n      </context>\n\n      <context name=\"Ocamldoc Bold\" lineEndContext=\"#stay\" attribute=\"Ocamldoc Bold\">\n        <IncludeRules context=\"Nested Ocamldoc\" />\n      </context>\n\n      <context name=\"Ocamldoc Italic\" lineEndContext=\"#stay\" attribute=\"Ocamldoc Italic\">\n        <IncludeRules context=\"Nested Ocamldoc\" />\n      </context>\n\n      <context name=\"Ocamldoc Emphasised\" lineEndContext=\"#stay\" attribute=\"Ocamldoc Emphasised\">\n        <IncludeRules context=\"Nested Ocamldoc\" />\n      </context>\n\n      <context name=\"Ocamldoc Heading\" lineEndContext=\"#stay\" attribute=\"Ocamldoc Heading\">\n        <IncludeRules context=\"Nested Ocamldoc\" />\n      </context>\n\n      <context name=\"Ocamldoc Link\" lineEndContext=\"#stay\" attribute=\"Ocamldoc Link\">\n        <IncludeRules context=\"Nested Ocamldoc\" />\n      </context>\n\n      <!-- A list of qualified Ocaml identifiers, seperated by whitespace and ending with a } -->\n      <context name=\"Ocamldoc References\" lineEndContext=\"#stay\" attribute=\"Mismatched Brackets\">\n        <DetectChar   char=\"}\"                     context=\"#pop\"  attribute=\"Ocamldoc Markup\"  />\n        <Detect2Chars char=\"*\" char1=\")\"           context=\"#pop\"  attribute=\"Mismatched Brackets\" />\n        <RegExpr      String=\"&IDENT;(\\.&IDENT;)*\" context=\"#stay\" attribute=\"Ocamldoc Link\"  />\n        <DetectSpaces                              context=\"#stay\" attribute=\"Ocamldoc Markup\" />\n      </context>\n\n      <!-- Unmatched closing brackets- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->\n\n      <context name=\"Unmatched Closing Brackets\"  lineEndContext=\"#stay\" attribute=\"Operator\">\n        <Detect2Chars char=\"*\" char1=\")\" context=\"#pop\"  attribute=\"Mismatched Brackets\" />\n        <Detect2Chars char=\"v\" char1=\"}\" context=\"#stay\" attribute=\"Mismatched Brackets\" />\n        <Detect2Chars char=\"]\" char1=\"}\" context=\"#stay\" attribute=\"Mismatched Brackets\" />\n        <Detect2Chars char=\"%\" char1=\"}\" context=\"#stay\" attribute=\"Mismatched Brackets\" />\n        <DetectChar   char=\"]\"           context=\"#stay\" attribute=\"Mismatched Brackets\" />\n        <DetectChar   char=\"}\"           context=\"#stay\" attribute=\"Mismatched Brackets\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Operator\"                defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Keyword\"                 defStyleNum=\"dsKeyword\"  />\n      <itemData name=\"Revised Syntax Keyword\"  defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Lowercase Identifier\"    defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Uppercase Identifier\"    defStyleNum=\"dsNormal\"   italic=\"true\" />\n\n      <!-- Lowercase pervasive identifiers: -->\n      <itemData name=\"Flow Control Functions\"   defStyleNum=\"dsDataType\" />\n      <itemData name=\"Pervasive Functions\"      defStyleNum=\"dsDataType\" />\n      <itemData name=\"Pervasive Types\"          defStyleNum=\"dsDataType\" />\n\n      <!-- Uppercase pervasive identifiers: -->\n      <itemData name=\"Pervasive Exceptions\"     defStyleNum=\"dsDataType\" italic=\"true\" />\n      <itemData name=\"Pervasive Variant Tags\"   defStyleNum=\"dsDataType\" italic=\"true\" />\n      <itemData name=\"Standard Library Modules\" defStyleNum=\"dsDataType\" italic=\"true\" />\n\n      <itemData name=\"Decimal\"                 defStyleNum=\"dsDecVal\"   />\n      <itemData name=\"Hexadecimal\"             defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Octal\"                   defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Binary\"                  defStyleNum=\"dsBaseN\"    />\n      <itemData name=\"Float\"                   defStyleNum=\"dsFloat\"    />\n\n      <itemData name=\"Character\"               defStyleNum=\"dsChar\"     />\n      <itemData name=\"String\"                  defStyleNum=\"dsString\"   />\n      <itemData name=\"Camlp4 Quotation\"        defStyleNum=\"dsString\"   />\n      <itemData name=\"Escaped Characters\"      defStyleNum=\"dsChar\"     />\n\n      <itemData name=\"Directive\"               defStyleNum=\"dsOthers\"   />\n\n      <itemData name=\"Comment\"                 defStyleNum=\"dsComment\"  />\n      <itemData name=\"String in Comment\"       defStyleNum=\"dsComment\"  bold=\"true\" />\n      <itemData name=\"Mismatched Brackets\"     defStyleNum=\"dsError\"    />\n\n      <itemData name=\"Ocamldoc Markup\"         defStyleNum=\"dsOthers\"   />\n      <itemData name=\"Ocamldoc Text\"           defStyleNum=\"dsComment\"  italic=\"false\" />\n      <itemData name=\"Ocamldoc Bold\"           defStyleNum=\"dsComment\"  italic=\"false\" bold=\"true\" />\n      <itemData name=\"Ocamldoc Italic\"         defStyleNum=\"dsComment\"  italic=\"true\"  bold=\"false\" />\n      <itemData name=\"Ocamldoc Emphasised\"     defStyleNum=\"dsComment\"  italic=\"true\"  bold=\"true\" />\n      <itemData name=\"Ocamldoc Heading\"        defStyleNum=\"dsComment\"  italic=\"false\" bold=\"true\" underline=\"true\" />\n      <itemData name=\"Ocamldoc Link\"           defStyleNum=\"dsComment\"  italic=\"false\" underline=\"true\" color=\"#0000ff\" />\n      <itemData name=\"Ocamldoc LaTeX\"          defStyleNum=\"dsComment\"  italic=\"false\" />\n      <itemData name=\"Ocamldoc Custom Tag\"     defStyleNum=\"dsOthers\"   italic=\"true\"  />\n\n      <itemData name=\"qtest header style\"     defStyleNum=\"dsNormal\"  backgroundColor=\"#FFEBE0\" />\n      <itemData name=\"qtest param style\"      defStyleNum=\"dsNormal\"  italic=\"true\" color=\"#7788FF\" />\n      <!-- backgroundColor=\"#EEEEFF\" -->\n      <itemData name=\"qtest body style\"       defStyleNum=\"dsNormal\"  bold=\"true\" backgroundColor=\"#D6FFEB\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"true\" />\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" region =\"comment\" />\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ocamllex.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Kate syntax highlighting for the Objective Caml 'Ocamlllex' -->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!-- Regular expresion constants: -->\n<!ENTITY LETTER \"A-Za-z\\300-\\326\\330-\\366\\370-\\377\">                <!-- Latin-1 letters. -->\n<!ENTITY IDENT  \"`?[&LETTER;_][&LETTER;0-9_']*\">                    <!-- OCaml identifiers. -->\n<!ENTITY ESC    \"(\\\\[ntbr'&quot;\\\\]|\\\\[0-9]{3}|\\\\x[0-9A-Fa-f]{2})\"> <!-- OCaml character code escapes. -->\n]>\n<language name=\"Objective Caml Ocamllex\"\n          section=\"Sources\"\n          extensions=\"*.mll\"\n          mimetype=\"\"\n          version=\"3\"\n          kateversion=\"2.4\"\n          priority=\"10\"\n          author=\"Glyn Webster (glynwebster@orcon.net.nz) and Vincent Hugot (vincent.hugot@gmail.com)\"\n          license=\"LGPL\" >\n\n  <highlighting>\n\n    <list name=\"keywords\">\n      <item>and</item>\n      <item>as</item>\n      <item>eof</item>\n      <item>let</item>\n      <item>parse</item>\n      <item>rule</item>\n      <item>shortest</item>\n    </list>\n\n    <contexts>\n      <context name=\"Rules\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <Detect2Chars char=\"(\" char1=\"*\"      context=\"Comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <DetectChar   char=\"{\"                context=\"Ocaml\"   attribute=\"Normal\"  beginRegion=\"code\" />\n        <DetectChar   char=\"&quot;\"           context=\"String\"  attribute=\"String\" />\n        <RegExpr      String=\"'(&ESC;|[^'])'\" context=\"#stay\"   attribute=\"Character\" />\n        <keyword      String=\"keywords\"       context=\"#stay\"   attribute=\"Keyword\" />\n        <RegExpr      String=\"&IDENT;\"        context=\"#stay\"   attribute=\"Identifier\" />\n        <DetectChar   char=\"}\"                context=\"#stay\"   attribute=\"Mismatched Brackets\" />\n        <Detect2Chars char=\"*\" char1=\")\"      context=\"#stay\"   attribute=\"Mismatched Brackets\" />\n      </context>\n\n      <context name=\"Comment\" lineEndContext=\"#stay\" attribute=\"Comment\">\n        <Detect2Chars char=\"*\" char1=\")\" context=\"#pop\"    attribute=\"Comment\" endRegion=\"comment\" />\n        <Detect2Chars char=\"(\" char1=\"*\" context=\"Comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n        <DetectChar   char=\"&quot;\"      context=\"String\"  attribute=\"String\" />\n      </context>\n\n      <context name=\"Ocaml\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"}\" context=\"#pop\" attribute=\"Normal\" endRegion=\"code\" />\n        <IncludeRules context=\"##Objective Caml\" includeAttrib=\"true\" />\n      </context>\n\n      <context name=\"String\" lineEndContext=\"#stay\" attribute=\"String\">\n        <DetectChar char=\"&quot;\"  context=\"#pop\"  attribute=\"String\" />\n        <RegExpr    String=\"&ESC;\" context=\"#stay\" attribute=\"Escaped Characters\" />\n        <RegExpr    String=\"\\\\$\"   context=\"#stay\" attribute=\"Escaped Characters\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal\"                  defStyleNum=\"dsOthers\"    />\n      <itemData name=\"Identifier\"              defStyleNum=\"dsNormal\"   />\n      <itemData name=\"Keyword\"                 defStyleNum=\"dsOthers\" bold=\"true\" />\n      <itemData name=\"Character\"               defStyleNum=\"dsChar\"     />\n      <itemData name=\"String\"                  defStyleNum=\"dsString\"   />\n      <itemData name=\"Escaped Characters\"      defStyleNum=\"dsChar\"     />\n      <itemData name=\"Comment\"                 defStyleNum=\"dsComment\"  />\n      <itemData name=\"Mismatched Brackets\"     defStyleNum=\"dsError\"    />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"true\" />\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ocamlyacc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Kate syntax highlighting for the Objective Caml 'Ocamlllex' -->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!-- Regular expresion constants: -->\n<!ENTITY LOWER  \"a-z\\300-\\326\\330-\\337\">         <!-- Lowercase Latin-1 letters. -->\n<!ENTITY UPPER  \"A-Z\\340-\\366\\370-\\377\">         <!-- Uppercase Latin-1 letters. -->\n<!ENTITY LETTER \"&LOWER;&UPPER;\">                <!-- All Latin-1 letters. -->\n<!ENTITY LIDENT \"[&LOWER;_][&LETTER;0-9_']*\">    <!-- Lowercase OCaml identifiers. -->\n<!ENTITY UIDENT \"`?[&UPPER;][&LETTER;0-9_']*\">   <!-- Uppercase OCaml identifiers. -->\n<!ENTITY IDENT  \"`?[&LETTER;][&LETTER;0-9_']*\">  <!-- All OCaml identifiers. -->\n]>\n<language name=\"Objective Caml Ocamlyacc\"\n          section=\"Sources\"\n          extensions=\"*.mly\"\n          mimetype=\"\"\n          version=\"3\"\n          kateversion=\"2.4\"\n          priority=\"10\"\n          author=\"Glyn Webster (glynwebster@orcon.net.nz) and Vincent Hugot (vincent.hugot@gmail.com)\"\n          license=\"LGPL\" >\n\n  <highlighting>\n    <list name=\"typed symbol list keywords\">\n      <item>%token</item>\n      <item>%type</item>\n    </list>\n\n    <list name=\"symbol list keywords\">\n      <item>%left</item>\n      <item>%right</item>\n      <item>%nonassoc</item>\n      <item>%start</item>\n    </list>\n\n    <list name=\"rule keywords\">\n      <item>%prec</item>\n      <item>error</item>\n    </list>\n\n    <contexts>\n      <!-- Note: Because the Yacc grammar is so simple I've written this so that any symbol\n           that has not been specifically dealt with by a highlighting rule is an error. -->\n\n      <!-- Declaration section: Header sections and Yacc symbol declararations. -->\n      <!-- A %% marks the end of the Declaration section and the start of the rules section. -->\n      <context name=\"Declarations\" lineEndContext=\"#stay\" attribute=\"Error\">\n        <Detect2Chars char=\"%\" char1=\"{\"                  context=\"Header\"            attribute=\"Normal\" beginRegion=\"header\" />\n        <keyword      String=\"typed symbol list keywords\" context=\"Typed Symbol List\" attribute=\"Keyword\" />\n        <keyword      String=\"symbol list keywords\"       context=\"Symbol List\"       attribute=\"Keyword\" />\n        <Detect2Chars char=\"%\" char1=\"%\"                  context=\"Rules\"             attribute=\"Normal\" />\n        <IncludeRules context=\"General\" />\n      </context>\n\n      <!-- Header section: Ocaml code in the declarations between %{ %} brackets -->\n      <context name=\"Header\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <Detect2Chars char=\"%\" char1=\"}\" context=\"#pop\" attribute=\"Normal\" endRegion=\"header\" />\n        <IncludeRules context=\"##Objective Caml\" includeAttrib=\"true\" />\n      </context>\n\n      <!-- A typed symbol list: an optional Ocaml type declaration between < > brackets, followed by a symbol list. -->\n        <context name=\"Typed Symbol List\" lineEndContext=\"#pop\" attribute=\"Error\">\n        <DetectChar char=\"&lt;\" context=\"Type\" attribute=\"Normal\" />\n        <RegExpr String=\"&UIDENT;\" context=\"Symbol List\" attribute=\"Uppercase Name (Token)\" />\n        <RegExpr String=\"&LIDENT;\" context=\"Symbol List\" attribute=\"Lowercase Name (Rule)\" />\n        <IncludeRules context=\"General\" />\n      </context>\n      <context name=\"Type\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"&gt;\" context=\"#pop\" attribute=\"Normal\" />\n        <IncludeRules context=\"##Objective Caml\" includeAttrib=\"true\" />\n      </context>\n\n      <!-- A symbol list: one line of sybmol names and option comments. -->\n      <context name=\"Symbol List\" lineEndContext=\"#pop\" attribute=\"Error\">\n        <RegExpr String=\"&UIDENT;\" context=\"#stay\" attribute=\"Uppercase Name (Token)\" />\n        <RegExpr String=\"&LIDENT;\" context=\"#stay\" attribute=\"Lowercase Name (Rule)\" />\n        <IncludeRules context=\"General\" />\n      </context>\n\n      <!-- Rules section:. -->\n      <!-- A %% marks the end of the rules section and the start of the trailer section: -->\n      <context name=\"Rules\" lineEndContext=\"#stay\" attribute=\"Error\">\n        <Detect2Chars char=\"%\" char1=\"%\" context=\"Trailer\" attribute=\"Normal\" />\n        <RegExpr String=\"&IDENT;\" context=\"Rule, Expecting Colon\" attribute=\"Rule Definition Name\" beginRegion=\"rule\" />\n        <IncludeRules context=\"General\" />\n      </context>\n      <context name=\"Rule, Expecting Colon\" lineEndContext=\"#stay\" attribute=\"Error\">\n        <DetectChar char=\":\" context=\"Rule\" attribute=\"Normal\" />\n        <!-- Incomplete rule before the start of the trailer: -->\n        <Detect2Chars char=\"%\" char1=\"%\" context=\"Trailer\" attribute=\"Error\" />\n        <IncludeRules context=\"General\" />\n      </context>\n      <context name=\"Rule\" lineEndContext=\"#stay\" attribute=\"Error\">\n        <DetectChar char=\";\"               context=\"#pop#pop\" attribute=\"Normal\" endRegion=\"rule\" />\n        <DetectChar char=\"|\"               context=\"#stay\"    attribute=\"Normal\" />\n        <keyword    String=\"rule keywords\" context=\"#stay\"    attribute=\"Keyword\" />\n        <RegExpr    String=\"&UIDENT;\"      context=\"#stay\"    attribute=\"Uppercase Name (Token)\" />\n        <RegExpr    String=\"&LIDENT;\"      context=\"#stay\"    attribute=\"Lowercase Name (Rule)\" />\n        <DetectChar char=\"{\"               context=\"Action\"   attribute=\"Normal\" beginRegion=\"action\" />\n        <IncludeRules context=\"General\" />\n      </context>\n\n      <!-- A rule action: Ocaml code between { } brackets containing $1,$2,$3.. symbols. -->\n      <!-- (The \"Nested Action\" contexts override the rules for [ ] and { } brackets in the Objective\n           Caml highlighting file. They make make the $1,$2,$3.. symbols show up inside those brackets.) -->\n      <context name=\"Action\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"}\" context=\"#pop\" attribute=\"Normal\" endRegion=\"action\" />\n        <RegExpr String=\"[$][0-9]+\" context=\"#stay\" attribute=\"Semantic Attribute\" />\n        <DetectChar char=\"{\" context=\"Nested Action 1\" />\n        <DetectChar char=\"[\" context=\"Nested Action 2\" />\n        <IncludeRules context=\"##Objective Caml\" includeAttrib=\"true\" />\n      </context>\n      <context name=\"Nested Action 1\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"}\" context=\"#pop\" />\n        <IncludeRules context=\"Action\" includeAttrib=\"true\" />\n      </context>\n      <context name=\"Nested Action 2\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectChar char=\"]\" context=\"#pop\" />\n        <IncludeRules context=\"Action\" includeAttrib=\"true\" />\n      </context>\n\n      <!-- Trailer section: Ocaml code until the end of the file. -->\n      <context name=\"Trailer\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <IncludeRules context=\"##Objective Caml\" includeAttrib=\"true\" />\n      </context>\n\n      <!-- General rules for all contexts: -->\n      <!-- 1) Whitespace is expected. -->\n      <!-- 2) Ocamlyacc's comments are in /* */ brackets and are nestable. -->\n      <context name=\"General\" lineEndContext=\"#stay\" attribute=\"Normal\">\n        <DetectSpaces context=\"#stay\" attribute=\"Normal\" />\n        <Detect2Chars char=\"/\" char1=\"*\" context=\"Comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n      </context>\n      <context name=\"Comment\" lineEndContext=\"#stay\" attribute=\"Comment\">\n        <Detect2Chars char=\"*\" char1=\"/\" context=\"#pop\"    attribute=\"Comment\" endRegion=\"comment\" />\n        <Detect2Chars char=\"/\" char1=\"*\" context=\"Comment\" attribute=\"Comment\" beginRegion=\"comment\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Keyword\"                defStyleNum=\"dsOthers\" bold=\"true\" />\n      <itemData name=\"Normal\"                 defStyleNum=\"dsOthers\" />\n      <itemData name=\"Uppercase Name (Token)\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Lowercase Name (Rule)\"  defStyleNum=\"dsOthers\" italic=\"true\" />\n      <itemData name=\"Rule Definition Name\"   defStyleNum=\"dsOthers\" italic=\"true\" bold=\"true\" />\n      <itemData name=\"Semantic Attribute\"     defStyleNum=\"dsOthers\" />\n      <itemData name=\"Comment\"                defStyleNum=\"dsComment\" />\n      <itemData name=\"Error\"                  defStyleNum=\"dsError\"  />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <keywords casesensitive=\"true\" weakDeliminator=\"%\" />\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/octave.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  =====================================================================================================\n  Octave syntax highlighting file for the KDE editors Kate and Kwrite\n  =====================================================================================================\n      based on Octave 4.2.0\n      keywords, functions list bases on __builtins__ and __keywords__ commands. For details see\n      https://stackoverflow.com/questions/49840280/list-of-all-built-in-symbols-in-matlab-octave\n      Commands list bases on parsing source code (search inside embedded into code documentation\n      (by \"@deftypefn\") for commands, used without brackets).\n      (grep '@deftypefn' -r * | grep -v '@deftypefnx' | grep -v '(')\n\n\n  Change log:\n  16-Dec-04  Created from Matlab and Scilab files.\n  19-Feb-04  Update from Octave 4.2.0 (updated by sirgienko.n <warquark@gmail.com>)\n\n  Author: Federico Zenith, Norwegian University of Science and Technology\n  Thanks to Luis Silvestre for previous version and suggestions\n-->\n\n\n<language name=\"Octave\" version=\"5\" kateversion=\"5.0\" section=\"Scientific\" extensions=\"*.octave;*.m;*.M\" mimetype=\"text/octave\" casesensitive=\"1\" license=\"GPL\" author=\"Luis Silvestre and Federico Zenith\">\n\n  <highlighting>\n\n    <!-- Reserved keywords in Octave -->\n    <list name=\"keywords\">\n      <item>case</item>\n      <item>catch</item>\n      <item>continue</item>\n      <item>else</item>\n      <item>elseif</item>\n      <item>global</item>\n      <item>otherwise</item>\n      <item>return</item>\n      <item>static</item>\n      <item>persistent</item>\n      <item>unwind_protect_cleanup</item>\n      <item>varargin</item>\n      <item>varargout</item>\n      <item>break</item>\n      <item>for</item>\n      <item>endfor</item>\n      <item>if</item>\n      <item>endif</item>\n      <item>do</item>\n      <item>until</item>\n      <item>while</item>\n      <item>endwhile</item>\n      <item>function</item>\n      <item>endfunction</item>\n      <item>unwind_protect</item>\n      <item>end_unwind_protect</item>\n      <item>parfor</item>\n      <item>endparfor</item>\n      <item>classdef</item>\n      <item>endclassdef</item>\n      <item>enumeration</item>\n      <item>endenumeration</item>\n      <item>events</item>\n      <item>endevents</item>\n      <item>methods</item>\n      <item>endmethods</item>\n      <item>properties</item>\n      <item>endproperties</item>\n      <item>switch</item>\n      <item>endswitch</item>\n      <item>try</item>\n      <item>end_try_catch</item>\n      <item>end</item>\n    </list>\n\n    <list name=\"builtin\">\n      <item>EDITOR</item>\n      <item>EXEC_PATH</item>\n      <item>F_DUPFD</item>\n      <item>F_GETFD</item>\n      <item>F_GETFL</item>\n      <item>F_SETFD</item>\n      <item>F_SETFL</item>\n      <item>IMAGE_PATH</item>\n      <item>J</item>\n      <item>OCTAVE_HOME</item>\n      <item>OCTAVE_VERSION</item>\n      <item>O_APPEND</item>\n      <item>O_ASYNC</item>\n      <item>O_CREAT</item>\n      <item>O_EXCL</item>\n      <item>O_NONBLOCK</item>\n      <item>O_RDONLY</item>\n      <item>O_RDWR</item>\n      <item>O_SYNC</item>\n      <item>O_TRUNC</item>\n      <item>O_WRONLY</item>\n      <item>PAGER</item>\n      <item>PAGER_FLAGS</item>\n      <item>PS1</item>\n      <item>PS2</item>\n      <item>PS4</item>\n      <item>P_tmpdir</item>\n      <item>SEEK_CUR</item>\n      <item>SEEK_END</item>\n      <item>SEEK_SET</item>\n      <item>SIG</item>\n      <item>S_ISBLK</item>\n      <item>S_ISCHR</item>\n      <item>S_ISDIR</item>\n      <item>S_ISFIFO</item>\n      <item>S_ISLNK</item>\n      <item>S_ISREG</item>\n      <item>S_ISSOCK</item>\n      <item>WCONTINUE</item>\n      <item>WCOREDUMP</item>\n      <item>WEXITSTATUS</item>\n      <item>WIFCONTINUED</item>\n      <item>WIFEXITED</item>\n      <item>WIFSIGNALED</item>\n      <item>WIFSTOPPED</item>\n      <item>WNOHANG</item>\n      <item>WSTOPSIG</item>\n      <item>WTERMSIG</item>\n      <item>WUNTRACED</item>\n      <item>__accumarray_max__</item>\n      <item>__accumarray_min__</item>\n      <item>__accumarray_sum__</item>\n      <item>__accumdim_sum__</item>\n      <item>__builtins__</item>\n      <item>__calc_dimensions__</item>\n      <item>__compactformat__</item>\n      <item>__contourc__</item>\n      <item>__current_scope__</item>\n      <item>__db_next_breakpoint_quiet__</item>\n      <item>__diaryfile__</item>\n      <item>__diarystate__</item>\n      <item>__dispatch__</item>\n      <item>__display_tokens__</item>\n      <item>__dsearchn__</item>\n      <item>__dump_load_path__</item>\n      <item>__dump_symtab_info__</item>\n      <item>__dump_typeinfo__</item>\n      <item>__echostate__</item>\n      <item>__fieldnames__</item>\n      <item>__fnmatch__</item>\n      <item>__formatstring__</item>\n      <item>__ftp__</item>\n      <item>__ftp_ascii__</item>\n      <item>__ftp_binary__</item>\n      <item>__ftp_close__</item>\n      <item>__ftp_cwd__</item>\n      <item>__ftp_delete__</item>\n      <item>__ftp_dir__</item>\n      <item>__ftp_mget__</item>\n      <item>__ftp_mkdir__</item>\n      <item>__ftp_mode__</item>\n      <item>__ftp_mput__</item>\n      <item>__ftp_pwd__</item>\n      <item>__ftp_rename__</item>\n      <item>__ftp_rmdir__</item>\n      <item>__get__</item>\n      <item>__get_cmdline_fcn_txt__</item>\n      <item>__go_axes__</item>\n      <item>__go_axes_init__</item>\n      <item>__go_delete__</item>\n      <item>__go_execute_callback__</item>\n      <item>__go_figure__</item>\n      <item>__go_figure_handles__</item>\n      <item>__go_handles__</item>\n      <item>__go_hggroup__</item>\n      <item>__go_image__</item>\n      <item>__go_light__</item>\n      <item>__go_line__</item>\n      <item>__go_patch__</item>\n      <item>__go_surface__</item>\n      <item>__go_text__</item>\n      <item>__go_uibuttongroup__</item>\n      <item>__go_uicontextmenu__</item>\n      <item>__go_uicontrol__</item>\n      <item>__go_uimenu__</item>\n      <item>__go_uipanel__</item>\n      <item>__go_uipushtool__</item>\n      <item>__go_uitoggletool__</item>\n      <item>__go_uitoolbar__</item>\n      <item>__gud_mode__</item>\n      <item>__ichol0__</item>\n      <item>__icholt__</item>\n      <item>__ilu0__</item>\n      <item>__iluc__</item>\n      <item>__ilutp__</item>\n      <item>__image_pixel_size__</item>\n      <item>__is_handle_visible__</item>\n      <item>__java_exit__</item>\n      <item>__java_get__</item>\n      <item>__java_init__</item>\n      <item>__java_set__</item>\n      <item>__keywords__</item>\n      <item>__lexer_debug_flag__</item>\n      <item>__lin_interpn__</item>\n      <item>__list_functions__</item>\n      <item>__luinc__</item>\n      <item>__magick_finfo__</item>\n      <item>__magick_formats__</item>\n      <item>__magick_ping__</item>\n      <item>__magick_read__</item>\n      <item>__magick_write__</item>\n      <item>__meta_class_query__</item>\n      <item>__meta_get_package__</item>\n      <item>__methods__</item>\n      <item>__mkdir__</item>\n      <item>__octave_config_info__</item>\n      <item>__octave_link_edit_file__</item>\n      <item>__octave_link_enabled__</item>\n      <item>__octave_link_file_dialog__</item>\n      <item>__octave_link_input_dialog__</item>\n      <item>__octave_link_list_dialog__</item>\n      <item>__octave_link_message_dialog__</item>\n      <item>__octave_link_question_dialog__</item>\n      <item>__octave_link_show_doc__</item>\n      <item>__octave_link_show_preferences__</item>\n      <item>__open_with_system_app__</item>\n      <item>__operators__</item>\n      <item>__parent_classes__</item>\n      <item>__parse_file__</item>\n      <item>__parser_debug_flag__</item>\n      <item>__pathorig__</item>\n      <item>__pchip_deriv__</item>\n      <item>__profiler_data__</item>\n      <item>__profiler_enable__</item>\n      <item>__profiler_reset__</item>\n      <item>__qp__</item>\n      <item>__request_drawnow__</item>\n      <item>__sort_rows_idx__</item>\n      <item>__superclass_reference__</item>\n      <item>__textscan__</item>\n      <item>__token_count__</item>\n      <item>__usage__</item>\n      <item>__varval__</item>\n      <item>__version_info__</item>\n      <item>__wglob__</item>\n      <item>__which__</item>\n      <item>__zoom__</item>\n    </list>\n    \n    <list name=\"commands\">\n      <item>Inf</item>\n      <item>NaN</item>\n      <item>e</item>\n      <item>eps</item>\n      <item>pi</item>\n      <item>realmax</item>\n      <item>realmin</item>\n      <item>I</item>\n      <item>NA</item>\n      <item>dbstop</item>\n      <item>dbclear</item>\n      <item>dbstatus</item>\n      <item>dbwhere</item>\n      <item>dbtype</item>\n      <item>dblist</item>\n      <item>dbstack</item>\n      <item>dbup</item>\n      <item>dbdown</item>\n      <item>dbstep</item>\n      <item>dbcont</item>\n      <item>dbquit</item>\n      <item>cd</item>\n      <item>rmdir</item>\n      <item>link</item>\n      <item>symlink</item>\n      <item>readlink</item>\n      <item>rename</item>\n      <item>diary</item>\n      <item>more</item>\n      <item>exit</item>\n      <item>load</item>\n      <item>save</item>\n      <item>edit_history</item>\n      <item>history</item>\n      <item>run_history</item>\n      <item>who</item>\n      <item>whos</item>\n      <item>clear</item>\n      <item>format</item>\n      <item>echo</item>\n    </list>\n    \n    <list name=\"functions\">\n      <item>__actual_axis_position__</item>\n      <item>__all_opts__</item>\n      <item>__clabel__</item>\n      <item>__default_plot_options__</item>\n      <item>__delaunayn__</item>\n      <item>__eigs__</item>\n      <item>__finish__</item>\n      <item>__fltk_check__</item>\n      <item>__fltk_uigetfile__</item>\n      <item>__getlegenddata__</item>\n      <item>__glpk__</item>\n      <item>__gnuplot_drawnow__</item>\n      <item>__gripe_missing_component__</item>\n      <item>__have_feature__</item>\n      <item>__have_gnuplot__</item>\n      <item>__init_fltk__</item>\n      <item>__init_gnuplot__</item>\n      <item>__makeinfo__</item>\n      <item>__next_line_color__</item>\n      <item>__next_line_style__</item>\n      <item>__opengl_info__</item>\n      <item>__osmesa_print__</item>\n      <item>__player_audioplayer__</item>\n      <item>__player_get_channels__</item>\n      <item>__player_get_fs__</item>\n      <item>__player_get_id__</item>\n      <item>__player_get_nbits__</item>\n      <item>__player_get_sample_number__</item>\n      <item>__player_get_tag__</item>\n      <item>__player_get_total_samples__</item>\n      <item>__player_get_userdata__</item>\n      <item>__player_isplaying__</item>\n      <item>__player_pause__</item>\n      <item>__player_play__</item>\n      <item>__player_playblocking__</item>\n      <item>__player_resume__</item>\n      <item>__player_set_fs__</item>\n      <item>__player_set_tag__</item>\n      <item>__player_set_userdata__</item>\n      <item>__player_stop__</item>\n      <item>__plt_get_axis_arg__</item>\n      <item>__pltopt__</item>\n      <item>__printf_assert__</item>\n      <item>__prog_output_assert__</item>\n      <item>__recorder_audiorecorder__</item>\n      <item>__recorder_get_channels__</item>\n      <item>__recorder_get_fs__</item>\n      <item>__recorder_get_id__</item>\n      <item>__recorder_get_nbits__</item>\n      <item>__recorder_get_sample_number__</item>\n      <item>__recorder_get_tag__</item>\n      <item>__recorder_get_total_samples__</item>\n      <item>__recorder_get_userdata__</item>\n      <item>__recorder_getaudiodata__</item>\n      <item>__recorder_isrecording__</item>\n      <item>__recorder_pause__</item>\n      <item>__recorder_record__</item>\n      <item>__recorder_recordblocking__</item>\n      <item>__recorder_resume__</item>\n      <item>__recorder_set_fs__</item>\n      <item>__recorder_set_tag__</item>\n      <item>__recorder_set_userdata__</item>\n      <item>__recorder_stop__</item>\n      <item>__run_test_suite__</item>\n      <item>__unimplemented__</item>\n      <item>__voronoi__</item>\n      <item>abs</item>\n      <item>accumarray</item>\n      <item>accumdim</item>\n      <item>acos</item>\n      <item>acosd</item>\n      <item>acosh</item>\n      <item>acot</item>\n      <item>acotd</item>\n      <item>acoth</item>\n      <item>acsc</item>\n      <item>acscd</item>\n      <item>acsch</item>\n      <item>add_input_event_hook</item>\n      <item>addlistener</item>\n      <item>addpath</item>\n      <item>addpref</item>\n      <item>addproperty</item>\n      <item>addtodate</item>\n      <item>airy</item>\n      <item>all</item>\n      <item>allchild</item>\n      <item>allow_noninteger_range_as_index</item>\n      <item>amd</item>\n      <item>ancestor</item>\n      <item>and</item>\n      <item>angle</item>\n      <item>annotation</item>\n      <item>anova</item>\n      <item>ans</item>\n      <item>any</item>\n      <item>arch_fit</item>\n      <item>arch_rnd</item>\n      <item>arch_test</item>\n      <item>area</item>\n      <item>arg</item>\n      <item>argnames</item>\n      <item>argv</item>\n      <item>arma_rnd</item>\n      <item>arrayfun</item>\n      <item>asctime</item>\n      <item>asec</item>\n      <item>asecd</item>\n      <item>asech</item>\n      <item>asin</item>\n      <item>asind</item>\n      <item>asinh</item>\n      <item>assert</item>\n      <item>assignin</item>\n      <item>atan</item>\n      <item>atan2</item>\n      <item>atan2d</item>\n      <item>atand</item>\n      <item>atanh</item>\n      <item>atexit</item>\n      <item>audiodevinfo</item>\n      <item>audioformats</item>\n      <item>audioinfo</item>\n      <item>audioread</item>\n      <item>audiowrite</item>\n      <item>autoload</item>\n      <item>autoreg_matrix</item>\n      <item>autumn</item>\n      <item>available_graphics_toolkits</item>\n      <item>axes</item>\n      <item>axis</item>\n      <item>balance</item>\n      <item>bandwidth</item>\n      <item>bar</item>\n      <item>barh</item>\n      <item>bartlett</item>\n      <item>bartlett_test</item>\n      <item>base2dec</item>\n      <item>base64_decode</item>\n      <item>base64_encode</item>\n      <item>beep</item>\n      <item>beep_on_error</item>\n      <item>bessel</item>\n      <item>besselh</item>\n      <item>besseli</item>\n      <item>besselj</item>\n      <item>besselk</item>\n      <item>bessely</item>\n      <item>beta</item>\n      <item>betacdf</item>\n      <item>betainc</item>\n      <item>betaincinv</item>\n      <item>betainv</item>\n      <item>betaln</item>\n      <item>betapdf</item>\n      <item>betarnd</item>\n      <item>bicg</item>\n      <item>bicgstab</item>\n      <item>bicubic</item>\n      <item>bin2dec</item>\n      <item>bincoeff</item>\n      <item>binocdf</item>\n      <item>binoinv</item>\n      <item>binopdf</item>\n      <item>binornd</item>\n      <item>bitand</item>\n      <item>bitcmp</item>\n      <item>bitget</item>\n      <item>bitmax</item>\n      <item>bitor</item>\n      <item>bitpack</item>\n      <item>bitset</item>\n      <item>bitshift</item>\n      <item>bitunpack</item>\n      <item>bitxor</item>\n      <item>blackman</item>\n      <item>blanks</item>\n      <item>blkdiag</item>\n      <item>blkmm</item>\n      <item>bone</item>\n      <item>box</item>\n      <item>brighten</item>\n      <item>bsxfun</item>\n      <item>bug_report</item>\n      <item>built_in_docstrings_file</item>\n      <item>builtin</item>\n      <item>bunzip2</item>\n      <item>bzip2</item>\n      <item>calendar</item>\n      <item>camlight</item>\n      <item>canonicalize_file_name</item>\n      <item>cart2pol</item>\n      <item>cart2sph</item>\n      <item>cast</item>\n      <item>cat</item>\n      <item>cauchy_cdf</item>\n      <item>cauchy_inv</item>\n      <item>cauchy_pdf</item>\n      <item>cauchy_rnd</item>\n      <item>caxis</item>\n      <item>cbrt</item>\n      <item>ccolamd</item>\n      <item>ceil</item>\n      <item>cell</item>\n      <item>cell2mat</item>\n      <item>cell2struct</item>\n      <item>celldisp</item>\n      <item>cellfun</item>\n      <item>cellindexmat</item>\n      <item>cellslices</item>\n      <item>cellstr</item>\n      <item>center</item>\n      <item>cgs</item>\n      <item>char</item>\n      <item>chdir</item>\n      <item>chi2cdf</item>\n      <item>chi2inv</item>\n      <item>chi2pdf</item>\n      <item>chi2rnd</item>\n      <item>chisquare_test_homogeneity</item>\n      <item>chisquare_test_independence</item>\n      <item>chol</item>\n      <item>chol2inv</item>\n      <item>choldelete</item>\n      <item>cholinsert</item>\n      <item>cholinv</item>\n      <item>cholshift</item>\n      <item>cholupdate</item>\n      <item>chop</item>\n      <item>circshift</item>\n      <item>citation</item>\n      <item>cla</item>\n      <item>clabel</item>\n      <item>class</item>\n      <item>clc</item>\n      <item>clf</item>\n      <item>clock</item>\n      <item>cloglog</item>\n      <item>close</item>\n      <item>closereq</item>\n      <item>cmpermute</item>\n      <item>cmunique</item>\n      <item>colamd</item>\n      <item>colloc</item>\n      <item>colon</item>\n      <item>colorbar</item>\n      <item>colorcube</item>\n      <item>colormap</item>\n      <item>colperm</item>\n      <item>colstyle</item>\n      <item>columns</item>\n      <item>comet</item>\n      <item>comet3</item>\n      <item>comma</item>\n      <item>command_line_path</item>\n      <item>common_size</item>\n      <item>commutation_matrix</item>\n      <item>compan</item>\n      <item>compare_versions</item>\n      <item>compass</item>\n      <item>completion_append_char</item>\n      <item>completion_matches</item>\n      <item>complex</item>\n      <item>computer</item>\n      <item>cond</item>\n      <item>condeig</item>\n      <item>condest</item>\n      <item>confirm_recursive_rmdir</item>\n      <item>conj</item>\n      <item>contour</item>\n      <item>contour3</item>\n      <item>contourc</item>\n      <item>contourf</item>\n      <item>contrast</item>\n      <item>conv</item>\n      <item>conv2</item>\n      <item>convhull</item>\n      <item>convhulln</item>\n      <item>convn</item>\n      <item>cool</item>\n      <item>copper</item>\n      <item>copyfile</item>\n      <item>copyobj</item>\n      <item>cor_test</item>\n      <item>corr</item>\n      <item>corrcoef</item>\n      <item>cos</item>\n      <item>cosd</item>\n      <item>cosh</item>\n      <item>cot</item>\n      <item>cotd</item>\n      <item>coth</item>\n      <item>cov</item>\n      <item>cplxpair</item>\n      <item>cputime</item>\n      <item>crash_dumps_octave_core</item>\n      <item>cross</item>\n      <item>csc</item>\n      <item>cscd</item>\n      <item>csch</item>\n      <item>cstrcat</item>\n      <item>csvread</item>\n      <item>csvwrite</item>\n      <item>csymamd</item>\n      <item>ctime</item>\n      <item>ctranspose</item>\n      <item>cubehelix</item>\n      <item>cummax</item>\n      <item>cummin</item>\n      <item>cumprod</item>\n      <item>cumsum</item>\n      <item>cumtrapz</item>\n      <item>curl</item>\n      <item>cylinder</item>\n      <item>daspect</item>\n      <item>daspk</item>\n      <item>daspk_options</item>\n      <item>dasrt</item>\n      <item>dasrt_options</item>\n      <item>dassl</item>\n      <item>dassl_options</item>\n      <item>date</item>\n      <item>datenum</item>\n      <item>datestr</item>\n      <item>datetick</item>\n      <item>datevec</item>\n      <item>dawson</item>\n      <item>dblquad</item>\n      <item>dbnext</item>\n      <item>deal</item>\n      <item>debian_missing_handler</item>\n      <item>deblank</item>\n      <item>debug</item>\n      <item>debug_java</item>\n      <item>debug_jit</item>\n      <item>debug_on_error</item>\n      <item>debug_on_interrupt</item>\n      <item>debug_on_warning</item>\n      <item>dec2base</item>\n      <item>dec2bin</item>\n      <item>dec2hex</item>\n      <item>deconv</item>\n      <item>deg2rad</item>\n      <item>del2</item>\n      <item>delaunay</item>\n      <item>delaunay3</item>\n      <item>delaunayn</item>\n      <item>delete</item>\n      <item>dellistener</item>\n      <item>demo</item>\n      <item>desktop</item>\n      <item>det</item>\n      <item>detrend</item>\n      <item>diag</item>\n      <item>dialog</item>\n      <item>diff</item>\n      <item>diffpara</item>\n      <item>diffuse</item>\n      <item>dir</item>\n      <item>dir_in_loadpath</item>\n      <item>disable_diagonal_matrix</item>\n      <item>disable_permutation_matrix</item>\n      <item>disable_range</item>\n      <item>discrete_cdf</item>\n      <item>discrete_inv</item>\n      <item>discrete_pdf</item>\n      <item>discrete_rnd</item>\n      <item>disp</item>\n      <item>display</item>\n      <item>divergence</item>\n      <item>dlmread</item>\n      <item>dlmwrite</item>\n      <item>dmperm</item>\n      <item>do_braindead_shortcircuit_evaluation</item>\n      <item>do_string_escapes</item>\n      <item>doc</item>\n      <item>doc_cache_create</item>\n      <item>doc_cache_file</item>\n      <item>dos</item>\n      <item>dot</item>\n      <item>double</item>\n      <item>drawnow</item>\n      <item>dsearch</item>\n      <item>dsearchn</item>\n      <item>dump_prefs</item>\n      <item>dup2</item>\n      <item>duplication_matrix</item>\n      <item>durbinlevinson</item>\n      <item>echo_executing_commands</item>\n      <item>edit</item>\n      <item>eig</item>\n      <item>eigs</item>\n      <item>ellipj</item>\n      <item>ellipke</item>\n      <item>ellipsoid</item>\n      <item>empirical_cdf</item>\n      <item>empirical_inv</item>\n      <item>empirical_pdf</item>\n      <item>empirical_rnd</item>\n      <item>end</item>\n      <item>endgrent</item>\n      <item>endpwent</item>\n      <item>eomday</item>\n      <item>eq</item>\n      <item>erf</item>\n      <item>erfc</item>\n      <item>erfcinv</item>\n      <item>erfcx</item>\n      <item>erfi</item>\n      <item>erfinv</item>\n      <item>errno</item>\n      <item>errno_list</item>\n      <item>error</item>\n      <item>error_ids</item>\n      <item>errorbar</item>\n      <item>errordlg</item>\n      <item>etime</item>\n      <item>etree</item>\n      <item>etreeplot</item>\n      <item>eval</item>\n      <item>evalc</item>\n      <item>evalin</item>\n      <item>example</item>\n      <item>exec</item>\n      <item>exist</item>\n      <item>exp</item>\n      <item>expcdf</item>\n      <item>expint</item>\n      <item>expinv</item>\n      <item>expm</item>\n      <item>expm1</item>\n      <item>exppdf</item>\n      <item>exprnd</item>\n      <item>eye</item>\n      <item>ezcontour</item>\n      <item>ezcontourf</item>\n      <item>ezmesh</item>\n      <item>ezmeshc</item>\n      <item>ezplot</item>\n      <item>ezplot3</item>\n      <item>ezpolar</item>\n      <item>ezsurf</item>\n      <item>ezsurfc</item>\n      <item>f_test_regression</item>\n      <item>fact</item>\n      <item>factor</item>\n      <item>factorial</item>\n      <item>fail</item>\n      <item>false</item>\n      <item>fcdf</item>\n      <item>fclear</item>\n      <item>fclose</item>\n      <item>fcntl</item>\n      <item>fdisp</item>\n      <item>feather</item>\n      <item>feof</item>\n      <item>ferror</item>\n      <item>feval</item>\n      <item>fflush</item>\n      <item>fft</item>\n      <item>fft2</item>\n      <item>fftconv</item>\n      <item>fftfilt</item>\n      <item>fftn</item>\n      <item>fftshift</item>\n      <item>fftw</item>\n      <item>fgetl</item>\n      <item>fgets</item>\n      <item>fieldnames</item>\n      <item>figure</item>\n      <item>file_in_loadpath</item>\n      <item>file_in_path</item>\n      <item>fileattrib</item>\n      <item>filemarker</item>\n      <item>fileparts</item>\n      <item>fileread</item>\n      <item>filesep</item>\n      <item>fill</item>\n      <item>filter</item>\n      <item>filter2</item>\n      <item>find</item>\n      <item>find_dir_in_path</item>\n      <item>findall</item>\n      <item>findfigs</item>\n      <item>findobj</item>\n      <item>findstr</item>\n      <item>finite</item>\n      <item>finv</item>\n      <item>fix</item>\n      <item>fixed_point_format</item>\n      <item>flag</item>\n      <item>flintmax</item>\n      <item>flip</item>\n      <item>flipdim</item>\n      <item>fliplr</item>\n      <item>flipud</item>\n      <item>floor</item>\n      <item>fminbnd</item>\n      <item>fminsearch</item>\n      <item>fminunc</item>\n      <item>fmod</item>\n      <item>fnmatch</item>\n      <item>fopen</item>\n      <item>fork</item>\n      <item>formula</item>\n      <item>fpdf</item>\n      <item>fplot</item>\n      <item>fprintf</item>\n      <item>fputs</item>\n      <item>fractdiff</item>\n      <item>frame2im</item>\n      <item>fread</item>\n      <item>freport</item>\n      <item>freqz</item>\n      <item>freqz_plot</item>\n      <item>frewind</item>\n      <item>frnd</item>\n      <item>fscanf</item>\n      <item>fseek</item>\n      <item>fskipl</item>\n      <item>fsolve</item>\n      <item>ftell</item>\n      <item>full</item>\n      <item>fullfile</item>\n      <item>func2str</item>\n      <item>functions</item>\n      <item>fwrite</item>\n      <item>fzero</item>\n      <item>gallery</item>\n      <item>gamcdf</item>\n      <item>gaminv</item>\n      <item>gamma</item>\n      <item>gammainc</item>\n      <item>gammaln</item>\n      <item>gampdf</item>\n      <item>gamrnd</item>\n      <item>gca</item>\n      <item>gcbf</item>\n      <item>gcbo</item>\n      <item>gcd</item>\n      <item>gcf</item>\n      <item>gco</item>\n      <item>ge</item>\n      <item>genpath</item>\n      <item>genvarname</item>\n      <item>geocdf</item>\n      <item>geoinv</item>\n      <item>geopdf</item>\n      <item>geornd</item>\n      <item>get</item>\n      <item>get_first_help_sentence</item>\n      <item>get_help_text</item>\n      <item>get_help_text_from_file</item>\n      <item>get_home_directory</item>\n      <item>getappdata</item>\n      <item>getegid</item>\n      <item>getenv</item>\n      <item>geteuid</item>\n      <item>getfield</item>\n      <item>getgid</item>\n      <item>getgrent</item>\n      <item>getgrgid</item>\n      <item>getgrnam</item>\n      <item>gethostname</item>\n      <item>getpgrp</item>\n      <item>getpid</item>\n      <item>getppid</item>\n      <item>getpref</item>\n      <item>getpwent</item>\n      <item>getpwnam</item>\n      <item>getpwuid</item>\n      <item>getrusage</item>\n      <item>getuid</item>\n      <item>ginput</item>\n      <item>givens</item>\n      <item>glob</item>\n      <item>glpk</item>\n      <item>gls</item>\n      <item>gmap40</item>\n      <item>gmres</item>\n      <item>gmtime</item>\n      <item>gnuplot_binary</item>\n      <item>gplot</item>\n      <item>grabcode</item>\n      <item>gradient</item>\n      <item>graphics_toolkit</item>\n      <item>gray</item>\n      <item>gray2ind</item>\n      <item>grid</item>\n      <item>griddata</item>\n      <item>griddata3</item>\n      <item>griddatan</item>\n      <item>gt</item>\n      <item>gtext</item>\n      <item>guidata</item>\n      <item>guihandles</item>\n      <item>gunzip</item>\n      <item>gzip</item>\n      <item>hadamard</item>\n      <item>hamming</item>\n      <item>hankel</item>\n      <item>hanning</item>\n      <item>hash</item>\n      <item>have_window_system</item>\n      <item>hdl2struct</item>\n      <item>help</item>\n      <item>helpdlg</item>\n      <item>hess</item>\n      <item>hex2dec</item>\n      <item>hex2num</item>\n      <item>hggroup</item>\n      <item>hgload</item>\n      <item>hgsave</item>\n      <item>hidden</item>\n      <item>hilb</item>\n      <item>hist</item>\n      <item>histc</item>\n      <item>history_control</item>\n      <item>history_file</item>\n      <item>history_save</item>\n      <item>history_size</item>\n      <item>history_timestamp_format_string</item>\n      <item>hold</item>\n      <item>home</item>\n      <item>horzcat</item>\n      <item>hot</item>\n      <item>hotelling_test</item>\n      <item>hotelling_test_2</item>\n      <item>housh</item>\n      <item>hsv</item>\n      <item>hsv2rgb</item>\n      <item>hurst</item>\n      <item>hygecdf</item>\n      <item>hygeinv</item>\n      <item>hygepdf</item>\n      <item>hygernd</item>\n      <item>hypot</item>\n      <item>i</item>\n      <item>ichol</item>\n      <item>idivide</item>\n      <item>ifelse</item>\n      <item>ifft</item>\n      <item>ifft2</item>\n      <item>ifftn</item>\n      <item>ifftshift</item>\n      <item>ignore_function_time_stamp</item>\n      <item>ilu</item>\n      <item>im2double</item>\n      <item>im2frame</item>\n      <item>imag</item>\n      <item>image</item>\n      <item>imagesc</item>\n      <item>imfinfo</item>\n      <item>imformats</item>\n      <item>importdata</item>\n      <item>imread</item>\n      <item>imshow</item>\n      <item>imwrite</item>\n      <item>ind2gray</item>\n      <item>ind2rgb</item>\n      <item>ind2sub</item>\n      <item>index</item>\n      <item>inf</item>\n      <item>inferiorto</item>\n      <item>info</item>\n      <item>info_file</item>\n      <item>info_program</item>\n      <item>inline</item>\n      <item>inpolygon</item>\n      <item>input</item>\n      <item>inputParser</item>\n      <item>inputdlg</item>\n      <item>inputname</item>\n      <item>int16</item>\n      <item>int2str</item>\n      <item>int32</item>\n      <item>int64</item>\n      <item>int8</item>\n      <item>interp1</item>\n      <item>interp2</item>\n      <item>interp3</item>\n      <item>interpft</item>\n      <item>interpn</item>\n      <item>intersect</item>\n      <item>intmax</item>\n      <item>intmin</item>\n      <item>inv</item>\n      <item>inverse</item>\n      <item>invhilb</item>\n      <item>ipermute</item>\n      <item>iqr</item>\n      <item>is_absolute_filename</item>\n      <item>is_dq_string</item>\n      <item>is_function_handle</item>\n      <item>is_leap_year</item>\n      <item>is_rooted_relative_filename</item>\n      <item>is_sq_string</item>\n      <item>is_valid_file_id</item>\n      <item>isa</item>\n      <item>isalnum</item>\n      <item>isalpha</item>\n      <item>isappdata</item>\n      <item>isargout</item>\n      <item>isascii</item>\n      <item>isaxes</item>\n      <item>isbanded</item>\n      <item>isbool</item>\n      <item>iscell</item>\n      <item>iscellstr</item>\n      <item>ischar</item>\n      <item>iscntrl</item>\n      <item>iscolormap</item>\n      <item>iscolumn</item>\n      <item>iscomplex</item>\n      <item>isdebugmode</item>\n      <item>isdefinite</item>\n      <item>isdeployed</item>\n      <item>isdiag</item>\n      <item>isdigit</item>\n      <item>isdir</item>\n      <item>isempty</item>\n      <item>isequal</item>\n      <item>isequaln</item>\n      <item>isfield</item>\n      <item>isfigure</item>\n      <item>isfinite</item>\n      <item>isfloat</item>\n      <item>isglobal</item>\n      <item>isgraph</item>\n      <item>isguirunning</item>\n      <item>ishandle</item>\n      <item>ishermitian</item>\n      <item>ishghandle</item>\n      <item>ishold</item>\n      <item>isieee</item>\n      <item>isindex</item>\n      <item>isinf</item>\n      <item>isinteger</item>\n      <item>isjava</item>\n      <item>iskeyword</item>\n      <item>isletter</item>\n      <item>islogical</item>\n      <item>islower</item>\n      <item>ismac</item>\n      <item>ismatrix</item>\n      <item>ismember</item>\n      <item>ismethod</item>\n      <item>isna</item>\n      <item>isnan</item>\n      <item>isnull</item>\n      <item>isnumeric</item>\n      <item>isobject</item>\n      <item>isocaps</item>\n      <item>isocolors</item>\n      <item>isonormals</item>\n      <item>isosurface</item>\n      <item>ispc</item>\n      <item>ispref</item>\n      <item>isprime</item>\n      <item>isprint</item>\n      <item>isprop</item>\n      <item>ispunct</item>\n      <item>isreal</item>\n      <item>isrow</item>\n      <item>isscalar</item>\n      <item>issorted</item>\n      <item>isspace</item>\n      <item>issparse</item>\n      <item>issquare</item>\n      <item>isstr</item>\n      <item>isstrprop</item>\n      <item>isstruct</item>\n      <item>isstudent</item>\n      <item>issymmetric</item>\n      <item>istril</item>\n      <item>istriu</item>\n      <item>isunix</item>\n      <item>isupper</item>\n      <item>isvarname</item>\n      <item>isvector</item>\n      <item>isxdigit</item>\n      <item>j</item>\n      <item>java2mat</item>\n      <item>javaArray</item>\n      <item>javaMethod</item>\n      <item>javaObject</item>\n      <item>java_get</item>\n      <item>java_matrix_autoconversion</item>\n      <item>java_set</item>\n      <item>java_unsigned_autoconversion</item>\n      <item>javaaddpath</item>\n      <item>javachk</item>\n      <item>javaclasspath</item>\n      <item>javamem</item>\n      <item>javarmpath</item>\n      <item>jet</item>\n      <item>jit_enable</item>\n      <item>jit_failcnt</item>\n      <item>jit_startcnt</item>\n      <item>kbhit</item>\n      <item>kendall</item>\n      <item>keyboard</item>\n      <item>keywords</item>\n      <item>kill</item>\n      <item>kolmogorov_smirnov_cdf</item>\n      <item>kolmogorov_smirnov_test</item>\n      <item>kolmogorov_smirnov_test_2</item>\n      <item>kron</item>\n      <item>kruskal_wallis_test</item>\n      <item>krylov</item>\n      <item>kurtosis</item>\n      <item>laplace_cdf</item>\n      <item>laplace_inv</item>\n      <item>laplace_pdf</item>\n      <item>laplace_rnd</item>\n      <item>lasterr</item>\n      <item>lasterror</item>\n      <item>lastwarn</item>\n      <item>lcm</item>\n      <item>ldivide</item>\n      <item>le</item>\n      <item>legend</item>\n      <item>legendre</item>\n      <item>length</item>\n      <item>lgamma</item>\n      <item>license</item>\n      <item>light</item>\n      <item>lighting</item>\n      <item>lin2mu</item>\n      <item>line</item>\n      <item>lines</item>\n      <item>linkaxes</item>\n      <item>linkprop</item>\n      <item>linsolve</item>\n      <item>linspace</item>\n      <item>list_in_columns</item>\n      <item>list_primes</item>\n      <item>listdlg</item>\n      <item>loadaudio</item>\n      <item>loaded_graphics_toolkits</item>\n      <item>loadobj</item>\n      <item>localfunctions</item>\n      <item>localtime</item>\n      <item>log</item>\n      <item>log10</item>\n      <item>log1p</item>\n      <item>log2</item>\n      <item>logical</item>\n      <item>logistic_cdf</item>\n      <item>logistic_inv</item>\n      <item>logistic_pdf</item>\n      <item>logistic_regression</item>\n      <item>logistic_rnd</item>\n      <item>logit</item>\n      <item>loglog</item>\n      <item>loglogerr</item>\n      <item>logm</item>\n      <item>logncdf</item>\n      <item>logninv</item>\n      <item>lognpdf</item>\n      <item>lognrnd</item>\n      <item>logspace</item>\n      <item>lookfor</item>\n      <item>lookup</item>\n      <item>lower</item>\n      <item>ls</item>\n      <item>ls_command</item>\n      <item>lscov</item>\n      <item>lsode</item>\n      <item>lsode_options</item>\n      <item>lsqnonneg</item>\n      <item>lstat</item>\n      <item>lt</item>\n      <item>lu</item>\n      <item>luinc</item>\n      <item>luupdate</item>\n      <item>magic</item>\n      <item>mahalanobis</item>\n      <item>make_absolute_filename</item>\n      <item>makeinfo_program</item>\n      <item>manova</item>\n      <item>mat2cell</item>\n      <item>mat2str</item>\n      <item>material</item>\n      <item>matlabroot</item>\n      <item>matrix_type</item>\n      <item>max</item>\n      <item>max_recursion_depth</item>\n      <item>mcnemar_test</item>\n      <item>md5sum</item>\n      <item>mean</item>\n      <item>meansq</item>\n      <item>median</item>\n      <item>menu</item>\n      <item>merge</item>\n      <item>mesh</item>\n      <item>meshc</item>\n      <item>meshgrid</item>\n      <item>meshz</item>\n      <item>meta.class</item>\n      <item>meta.dynproperty</item>\n      <item>meta.event</item>\n      <item>meta.method</item>\n      <item>meta.package</item>\n      <item>meta.property</item>\n      <item>metaclass</item>\n      <item>methods</item>\n      <item>mex</item>\n      <item>mexext</item>\n      <item>mfilename</item>\n      <item>mgorth</item>\n      <item>min</item>\n      <item>minus</item>\n      <item>mislocked</item>\n      <item>missing_component_hook</item>\n      <item>missing_function_hook</item>\n      <item>mkdir</item>\n      <item>mkfifo</item>\n      <item>mkoctfile</item>\n      <item>mkpp</item>\n      <item>mkstemp</item>\n      <item>mktime</item>\n      <item>mldivide</item>\n      <item>mlock</item>\n      <item>mod</item>\n      <item>mode</item>\n      <item>moment</item>\n      <item>mouse_wheel_zoom</item>\n      <item>movefile</item>\n      <item>mpoles</item>\n      <item>mpower</item>\n      <item>mrdivide</item>\n      <item>msgbox</item>\n      <item>mtimes</item>\n      <item>mu2lin</item>\n      <item>munlock</item>\n      <item>namelengthmax</item>\n      <item>nan</item>\n      <item>nargchk</item>\n      <item>nargin</item>\n      <item>narginchk</item>\n      <item>nargout</item>\n      <item>nargoutchk</item>\n      <item>native_float_format</item>\n      <item>nbincdf</item>\n      <item>nbininv</item>\n      <item>nbinpdf</item>\n      <item>nbinrnd</item>\n      <item>nchoosek</item>\n      <item>ndgrid</item>\n      <item>ndims</item>\n      <item>ne</item>\n      <item>newplot</item>\n      <item>news</item>\n      <item>nextpow2</item>\n      <item>nfields</item>\n      <item>nnz</item>\n      <item>nonzeros</item>\n      <item>norm</item>\n      <item>normcdf</item>\n      <item>normest</item>\n      <item>normest1</item>\n      <item>norminv</item>\n      <item>normpdf</item>\n      <item>normrnd</item>\n      <item>not</item>\n      <item>now</item>\n      <item>nproc</item>\n      <item>nth_element</item>\n      <item>nthargout</item>\n      <item>nthroot</item>\n      <item>ntsc2rgb</item>\n      <item>null</item>\n      <item>num2cell</item>\n      <item>num2hex</item>\n      <item>num2str</item>\n      <item>numel</item>\n      <item>numfields</item>\n      <item>nzmax</item>\n      <item>ocean</item>\n      <item>octave_config_info</item>\n      <item>octave_core_file_limit</item>\n      <item>octave_core_file_name</item>\n      <item>octave_core_file_options</item>\n      <item>octave_tmp_file_name</item>\n      <item>ode23</item>\n      <item>ode45</item>\n      <item>odeget</item>\n      <item>odeplot</item>\n      <item>odeset</item>\n      <item>ols</item>\n      <item>onCleanup</item>\n      <item>onenormest</item>\n      <item>ones</item>\n      <item>open</item>\n      <item>optimget</item>\n      <item>optimize_subsasgn_calls</item>\n      <item>optimset</item>\n      <item>or</item>\n      <item>orderfields</item>\n      <item>ordschur</item>\n      <item>orient</item>\n      <item>orth</item>\n      <item>ostrsplit</item>\n      <item>output_precision</item>\n      <item>pack</item>\n      <item>padecoef</item>\n      <item>page_output_immediately</item>\n      <item>page_screen_output</item>\n      <item>pan</item>\n      <item>paren</item>\n      <item>pareto</item>\n      <item>parseparams</item>\n      <item>pascal</item>\n      <item>patch</item>\n      <item>path</item>\n      <item>pathdef</item>\n      <item>pathsep</item>\n      <item>pause</item>\n      <item>pbaspect</item>\n      <item>pcg</item>\n      <item>pchip</item>\n      <item>pclose</item>\n      <item>pcolor</item>\n      <item>pcr</item>\n      <item>peaks</item>\n      <item>periodogram</item>\n      <item>perl</item>\n      <item>perms</item>\n      <item>permute</item>\n      <item>pie</item>\n      <item>pie3</item>\n      <item>pink</item>\n      <item>pinv</item>\n      <item>pipe</item>\n      <item>pkg</item>\n      <item>planerot</item>\n      <item>playaudio</item>\n      <item>plot</item>\n      <item>plot3</item>\n      <item>plotmatrix</item>\n      <item>plotyy</item>\n      <item>plus</item>\n      <item>poisscdf</item>\n      <item>poissinv</item>\n      <item>poisspdf</item>\n      <item>poissrnd</item>\n      <item>pol2cart</item>\n      <item>polar</item>\n      <item>poly</item>\n      <item>polyaffine</item>\n      <item>polyarea</item>\n      <item>polyder</item>\n      <item>polyeig</item>\n      <item>polyfit</item>\n      <item>polygcd</item>\n      <item>polyint</item>\n      <item>polyout</item>\n      <item>polyreduce</item>\n      <item>polyval</item>\n      <item>polyvalm</item>\n      <item>popen</item>\n      <item>popen2</item>\n      <item>postpad</item>\n      <item>pow2</item>\n      <item>power</item>\n      <item>powerset</item>\n      <item>ppder</item>\n      <item>ppint</item>\n      <item>ppjumps</item>\n      <item>ppplot</item>\n      <item>ppval</item>\n      <item>pqpnonneg</item>\n      <item>prctile</item>\n      <item>prefdir</item>\n      <item>preferences</item>\n      <item>prepad</item>\n      <item>primes</item>\n      <item>print</item>\n      <item>print_empty_dimensions</item>\n      <item>print_struct_array_contents</item>\n      <item>print_usage</item>\n      <item>printd</item>\n      <item>printf</item>\n      <item>prism</item>\n      <item>probit</item>\n      <item>prod</item>\n      <item>profexplore</item>\n      <item>profexport</item>\n      <item>profile</item>\n      <item>profshow</item>\n      <item>program_invocation_name</item>\n      <item>program_name</item>\n      <item>prop_test_2</item>\n      <item>psi</item>\n      <item>publish</item>\n      <item>putenv</item>\n      <item>puts</item>\n      <item>pwd</item>\n      <item>python</item>\n      <item>qmr</item>\n      <item>qp</item>\n      <item>qqplot</item>\n      <item>qr</item>\n      <item>qrdelete</item>\n      <item>qrinsert</item>\n      <item>qrshift</item>\n      <item>qrupdate</item>\n      <item>quad</item>\n      <item>quad_options</item>\n      <item>quadcc</item>\n      <item>quadgk</item>\n      <item>quadl</item>\n      <item>quadv</item>\n      <item>quantile</item>\n      <item>questdlg</item>\n      <item>quit</item>\n      <item>quiver</item>\n      <item>quiver3</item>\n      <item>qz</item>\n      <item>qzhess</item>\n      <item>rad2deg</item>\n      <item>rainbow</item>\n      <item>rand</item>\n      <item>rande</item>\n      <item>randg</item>\n      <item>randi</item>\n      <item>randn</item>\n      <item>randp</item>\n      <item>randperm</item>\n      <item>range</item>\n      <item>rank</item>\n      <item>ranks</item>\n      <item>rat</item>\n      <item>rats</item>\n      <item>rcond</item>\n      <item>rdivide</item>\n      <item>readdir</item>\n      <item>readline_re_read_init_file</item>\n      <item>readline_read_init_file</item>\n      <item>real</item>\n      <item>reallog</item>\n      <item>realpow</item>\n      <item>realsqrt</item>\n      <item>record</item>\n      <item>rectangle</item>\n      <item>rectint</item>\n      <item>recycle</item>\n      <item>reducepatch</item>\n      <item>reducevolume</item>\n      <item>refresh</item>\n      <item>refreshdata</item>\n      <item>regexp</item>\n      <item>regexpi</item>\n      <item>regexprep</item>\n      <item>regexptranslate</item>\n      <item>register_graphics_toolkit</item>\n      <item>rehash</item>\n      <item>rem</item>\n      <item>remove_input_event_hook</item>\n      <item>repelems</item>\n      <item>repmat</item>\n      <item>reset</item>\n      <item>reshape</item>\n      <item>residue</item>\n      <item>resize</item>\n      <item>restoredefaultpath</item>\n      <item>rethrow</item>\n      <item>rgb2hsv</item>\n      <item>rgb2ind</item>\n      <item>rgb2ntsc</item>\n      <item>rgbplot</item>\n      <item>ribbon</item>\n      <item>rindex</item>\n      <item>rmappdata</item>\n      <item>rmfield</item>\n      <item>rmpath</item>\n      <item>rmpref</item>\n      <item>roots</item>\n      <item>rose</item>\n      <item>rosser</item>\n      <item>rot90</item>\n      <item>rotate</item>\n      <item>rotate3d</item>\n      <item>rotdim</item>\n      <item>round</item>\n      <item>roundb</item>\n      <item>rows</item>\n      <item>rref</item>\n      <item>rsf2csf</item>\n      <item>run</item>\n      <item>run_count</item>\n      <item>run_test</item>\n      <item>rundemos</item>\n      <item>runlength</item>\n      <item>runtests</item>\n      <item>save_default_options</item>\n      <item>save_header_format_string</item>\n      <item>save_precision</item>\n      <item>saveas</item>\n      <item>saveaudio</item>\n      <item>saveobj</item>\n      <item>savepath</item>\n      <item>scanf</item>\n      <item>scatter</item>\n      <item>scatter3</item>\n      <item>schur</item>\n      <item>sec</item>\n      <item>secd</item>\n      <item>sech</item>\n      <item>semicolon</item>\n      <item>semilogx</item>\n      <item>semilogxerr</item>\n      <item>semilogy</item>\n      <item>semilogyerr</item>\n      <item>set</item>\n      <item>setappdata</item>\n      <item>setaudio</item>\n      <item>setdiff</item>\n      <item>setenv</item>\n      <item>setfield</item>\n      <item>setgrent</item>\n      <item>setpref</item>\n      <item>setpwent</item>\n      <item>setxor</item>\n      <item>shading</item>\n      <item>shg</item>\n      <item>shift</item>\n      <item>shiftdim</item>\n      <item>shrinkfaces</item>\n      <item>sighup_dumps_octave_core</item>\n      <item>sign</item>\n      <item>sign_test</item>\n      <item>signbit</item>\n      <item>sigterm_dumps_octave_core</item>\n      <item>silent_functions</item>\n      <item>sin</item>\n      <item>sinc</item>\n      <item>sind</item>\n      <item>sinetone</item>\n      <item>sinewave</item>\n      <item>single</item>\n      <item>sinh</item>\n      <item>size</item>\n      <item>size_equal</item>\n      <item>sizemax</item>\n      <item>sizeof</item>\n      <item>skewness</item>\n      <item>sleep</item>\n      <item>slice</item>\n      <item>smooth3</item>\n      <item>sombrero</item>\n      <item>sort</item>\n      <item>sortrows</item>\n      <item>sound</item>\n      <item>soundsc</item>\n      <item>source</item>\n      <item>spalloc</item>\n      <item>sparse</item>\n      <item>sparse_auto_mutate</item>\n      <item>spaugment</item>\n      <item>spconvert</item>\n      <item>spdiags</item>\n      <item>spearman</item>\n      <item>spectral_adf</item>\n      <item>spectral_xdf</item>\n      <item>specular</item>\n      <item>speed</item>\n      <item>spencer</item>\n      <item>speye</item>\n      <item>spfun</item>\n      <item>sph2cart</item>\n      <item>sphere</item>\n      <item>spinmap</item>\n      <item>spline</item>\n      <item>splinefit</item>\n      <item>split_long_rows</item>\n      <item>spones</item>\n      <item>spparms</item>\n      <item>sprand</item>\n      <item>sprandn</item>\n      <item>sprandsym</item>\n      <item>sprank</item>\n      <item>spring</item>\n      <item>sprintf</item>\n      <item>spstats</item>\n      <item>spy</item>\n      <item>sqp</item>\n      <item>sqrt</item>\n      <item>sqrtm</item>\n      <item>squeeze</item>\n      <item>sscanf</item>\n      <item>stairs</item>\n      <item>stat</item>\n      <item>statistics</item>\n      <item>std</item>\n      <item>stderr</item>\n      <item>stdin</item>\n      <item>stdnormal_cdf</item>\n      <item>stdnormal_inv</item>\n      <item>stdnormal_pdf</item>\n      <item>stdnormal_rnd</item>\n      <item>stdout</item>\n      <item>stem</item>\n      <item>stem3</item>\n      <item>stemleaf</item>\n      <item>stft</item>\n      <item>str2double</item>\n      <item>str2func</item>\n      <item>str2num</item>\n      <item>strcat</item>\n      <item>strchr</item>\n      <item>strcmp</item>\n      <item>strcmpi</item>\n      <item>strfind</item>\n      <item>strftime</item>\n      <item>string_fill_char</item>\n      <item>strjoin</item>\n      <item>strjust</item>\n      <item>strmatch</item>\n      <item>strncmp</item>\n      <item>strncmpi</item>\n      <item>strptime</item>\n      <item>strread</item>\n      <item>strrep</item>\n      <item>strsplit</item>\n      <item>strtok</item>\n      <item>strtrim</item>\n      <item>strtrunc</item>\n      <item>struct</item>\n      <item>struct2cell</item>\n      <item>struct2hdl</item>\n      <item>struct_levels_to_print</item>\n      <item>structfun</item>\n      <item>strvcat</item>\n      <item>sub2ind</item>\n      <item>subplot</item>\n      <item>subsasgn</item>\n      <item>subsindex</item>\n      <item>subspace</item>\n      <item>subsref</item>\n      <item>substr</item>\n      <item>substruct</item>\n      <item>sum</item>\n      <item>summer</item>\n      <item>sumsq</item>\n      <item>superiorto</item>\n      <item>suppress_verbose_help_message</item>\n      <item>surf</item>\n      <item>surface</item>\n      <item>surfc</item>\n      <item>surfl</item>\n      <item>surfnorm</item>\n      <item>svd</item>\n      <item>svd_driver</item>\n      <item>svds</item>\n      <item>swapbytes</item>\n      <item>syl</item>\n      <item>sylvester</item>\n      <item>symamd</item>\n      <item>symbfact</item>\n      <item>symrcm</item>\n      <item>symvar</item>\n      <item>synthesis</item>\n      <item>system</item>\n      <item>t_test</item>\n      <item>t_test_2</item>\n      <item>t_test_regression</item>\n      <item>table</item>\n      <item>tan</item>\n      <item>tand</item>\n      <item>tanh</item>\n      <item>tar</item>\n      <item>tcdf</item>\n      <item>tempdir</item>\n      <item>tempname</item>\n      <item>terminal_size</item>\n      <item>test</item>\n      <item>tetramesh</item>\n      <item>texi_macros_file</item>\n      <item>text</item>\n      <item>textread</item>\n      <item>textscan</item>\n      <item>tic</item>\n      <item>tilde_expand</item>\n      <item>time</item>\n      <item>times</item>\n      <item>tinv</item>\n      <item>title</item>\n      <item>tmpfile</item>\n      <item>tmpnam</item>\n      <item>toascii</item>\n      <item>toc</item>\n      <item>toeplitz</item>\n      <item>tolower</item>\n      <item>toupper</item>\n      <item>tpdf</item>\n      <item>trace</item>\n      <item>transpose</item>\n      <item>trapz</item>\n      <item>treelayout</item>\n      <item>treeplot</item>\n      <item>tril</item>\n      <item>trimesh</item>\n      <item>triplequad</item>\n      <item>triplot</item>\n      <item>trisurf</item>\n      <item>triu</item>\n      <item>trnd</item>\n      <item>true</item>\n      <item>tsearch</item>\n      <item>tsearchn</item>\n      <item>type</item>\n      <item>typecast</item>\n      <item>typeinfo</item>\n      <item>u_test</item>\n      <item>uibuttongroup</item>\n      <item>uicontextmenu</item>\n      <item>uicontrol</item>\n      <item>uigetdir</item>\n      <item>uigetfile</item>\n      <item>uimenu</item>\n      <item>uint16</item>\n      <item>uint32</item>\n      <item>uint64</item>\n      <item>uint8</item>\n      <item>uipanel</item>\n      <item>uipushtool</item>\n      <item>uiputfile</item>\n      <item>uiresume</item>\n      <item>uitoggletool</item>\n      <item>uitoolbar</item>\n      <item>uiwait</item>\n      <item>umask</item>\n      <item>uminus</item>\n      <item>uname</item>\n      <item>undo_string_escapes</item>\n      <item>unidcdf</item>\n      <item>unidinv</item>\n      <item>unidpdf</item>\n      <item>unidrnd</item>\n      <item>unifcdf</item>\n      <item>unifinv</item>\n      <item>unifpdf</item>\n      <item>unifrnd</item>\n      <item>union</item>\n      <item>unique</item>\n      <item>unix</item>\n      <item>unlink</item>\n      <item>unmkpp</item>\n      <item>unpack</item>\n      <item>unsetenv</item>\n      <item>untabify</item>\n      <item>untar</item>\n      <item>unwrap</item>\n      <item>unzip</item>\n      <item>uplus</item>\n      <item>upper</item>\n      <item>urlread</item>\n      <item>urlwrite</item>\n      <item>usage</item>\n      <item>usejava</item>\n      <item>usleep</item>\n      <item>validateattributes</item>\n      <item>validatestring</item>\n      <item>vander</item>\n      <item>var</item>\n      <item>var_test</item>\n      <item>vec</item>\n      <item>vech</item>\n      <item>vectorize</item>\n      <item>ver</item>\n      <item>version</item>\n      <item>vertcat</item>\n      <item>view</item>\n      <item>viridis</item>\n      <item>voronoi</item>\n      <item>voronoin</item>\n      <item>waitbar</item>\n      <item>waitfor</item>\n      <item>waitforbuttonpress</item>\n      <item>waitpid</item>\n      <item>warndlg</item>\n      <item>warning</item>\n      <item>warning_ids</item>\n      <item>warranty</item>\n      <item>waterfall</item>\n      <item>wavread</item>\n      <item>wavwrite</item>\n      <item>wblcdf</item>\n      <item>wblinv</item>\n      <item>wblpdf</item>\n      <item>wblrnd</item>\n      <item>weekday</item>\n      <item>welch_test</item>\n      <item>what</item>\n      <item>which</item>\n      <item>white</item>\n      <item>whitebg</item>\n      <item>whos_line_format</item>\n      <item>wienrnd</item>\n      <item>wilcoxon_test</item>\n      <item>wilkinson</item>\n      <item>winter</item>\n      <item>xlabel</item>\n      <item>xlim</item>\n      <item>xor</item>\n      <item>yes_or_no</item>\n      <item>ylabel</item>\n      <item>ylim</item>\n      <item>yulewalker</item>\n      <item>z_test</item>\n      <item>z_test_2</item>\n      <item>zeros</item>\n      <item>zip</item>\n      <item>zlabel</item>\n      <item>zlim</item>\n      <item>zoom</item>\n      <item>zscore</item>\n    </list>\n    \n    <list name=\"forge\">\n      <item>airy_Ai</item>\n      <item>airy_Ai_deriv</item>\n      <item>airy_Ai_deriv_scaled</item>\n      <item>airy_Ai_scaled</item>\n      <item>airy_Bi</item>\n      <item>airy_Bi_deriv</item>\n      <item>airy_Bi_deriv_scaled</item>\n      <item>airy_Bi_scaled</item>\n      <item>airy_zero_Ai</item>\n      <item>airy_zero_Ai_deriv</item>\n      <item>airy_zero_Bi</item>\n      <item>airy_zero_Bi_deriv</item>\n      <item>atanint</item>\n      <item>bchdeco</item>\n      <item>bchenco</item>\n      <item>bessel_il_scaled</item>\n      <item>bessel_In</item>\n      <item>bessel_In_scaled</item>\n      <item>bessel_Inu</item>\n      <item>bessel_Inu_scaled</item>\n      <item>bessel_jl</item>\n      <item>bessel_Jn</item>\n      <item>bessel_Jnu</item>\n      <item>bessel_kl_scaled</item>\n      <item>bessel_Kn</item>\n      <item>bessel_Kn_scaled</item>\n      <item>bessel_Knu</item>\n      <item>bessel_Knu_scaled</item>\n      <item>bessel_lnKnu</item>\n      <item>bessel_yl</item>\n      <item>bessel_Yn</item>\n      <item>bessel_Ynu</item>\n      <item>bessel_zero_J0</item>\n      <item>bessel_zero_J1</item>\n      <item>beta_gsl</item>\n      <item>bfgsmin</item>\n      <item>bisectionstep</item>\n      <item>builtin</item>\n      <item>bwfill</item>\n      <item>bwlabel</item>\n      <item>cell2csv</item>\n      <item>celleval</item>\n      <item>Chi</item>\n      <item>chol</item>\n      <item>Ci</item>\n      <item>clausen</item>\n      <item>conicalP_0</item>\n      <item>conicalP_1</item>\n      <item>conicalP_half</item>\n      <item>conicalP_mhalf</item>\n      <item>conv2</item>\n      <item>cordflt2</item>\n      <item>coupling_3j</item>\n      <item>coupling_6j</item>\n      <item>coupling_9j</item>\n      <item>csv2cell</item>\n      <item>csvconcat</item>\n      <item>csvexplode</item>\n      <item>cyclgen</item>\n      <item>cyclpoly</item>\n      <item>dawson</item>\n      <item>debye_1</item>\n      <item>debye_2</item>\n      <item>debye_3</item>\n      <item>debye_4</item>\n      <item>deref</item>\n      <item>dispatch</item>\n      <item>dispatch_help</item>\n      <item>display_fixed_operations</item>\n      <item>dlmread</item>\n      <item>ellint_Ecomp</item>\n      <item>ellint_Kcomp</item>\n      <item>ellipj</item>\n      <item>erfc_gsl</item>\n      <item>erf_gsl</item>\n      <item>erf_Q</item>\n      <item>erf_Z</item>\n      <item>_errcore</item>\n      <item>eta</item>\n      <item>eta_int</item>\n      <item>expint_3</item>\n      <item>expint_E1</item>\n      <item>expint_E2</item>\n      <item>expint_Ei</item>\n      <item>expm1</item>\n      <item>exp_mult</item>\n      <item>exprel</item>\n      <item>exprel_2</item>\n      <item>exprel_n</item>\n      <item>fabs</item>\n      <item>fangle</item>\n      <item>farg</item>\n      <item>fatan2</item>\n      <item>fceil</item>\n      <item>fconj</item>\n      <item>fcos</item>\n      <item>fcosh</item>\n      <item>fcumprod</item>\n      <item>fcumsum</item>\n      <item>fdiag</item>\n      <item>fermi_dirac_3half</item>\n      <item>fermi_dirac_half</item>\n      <item>fermi_dirac_inc_0</item>\n      <item>fermi_dirac_int</item>\n      <item>fermi_dirac_mhalf</item>\n      <item>fexp</item>\n      <item>ffloor</item>\n      <item>fimag</item>\n      <item>finitedifference</item>\n      <item>fixed</item>\n      <item>flog</item>\n      <item>flog10</item>\n      <item>fprod</item>\n      <item>freal</item>\n      <item>freshape</item>\n      <item>fround</item>\n      <item>fsin</item>\n      <item>fsinh</item>\n      <item>fsqrt</item>\n      <item>fsum</item>\n      <item>fsumsq</item>\n      <item>ftan</item>\n      <item>ftanh</item>\n      <item>full</item>\n      <item>gamma_gsl</item>\n      <item>gamma_inc</item>\n      <item>gamma_inc_P</item>\n      <item>gamma_inc_Q</item>\n      <item>gammainv_gsl</item>\n      <item>gammastar</item>\n      <item>gdet</item>\n      <item>gdiag</item>\n      <item>gexp</item>\n      <item>gf</item>\n      <item>gfilter</item>\n      <item>_gfweight</item>\n      <item>ginv</item>\n      <item>ginverse</item>\n      <item>glog</item>\n      <item>glu</item>\n      <item>gpick</item>\n      <item>gprod</item>\n      <item>grab</item>\n      <item>grank</item>\n      <item>graycomatrix</item>\n      <item>__grcla__</item>\n      <item>__grclf__</item>\n      <item>__grcmd__</item>\n      <item>greshape</item>\n      <item>__grexit__</item>\n      <item>__grfigure__</item>\n      <item>__grgetstat__</item>\n      <item>__grhold__</item>\n      <item>__grinit__</item>\n      <item>__grishold__</item>\n      <item>__grnewset__</item>\n      <item>__grsetgraph__</item>\n      <item>gsl_sf</item>\n      <item>gsqrt</item>\n      <item>gsum</item>\n      <item>gsumsq</item>\n      <item>gtext</item>\n      <item>gzoom</item>\n      <item>hazard</item>\n      <item>houghtf</item>\n      <item>hyperg_0F1</item>\n      <item>hzeta</item>\n      <item>is_complex_sparse</item>\n      <item>isfixed</item>\n      <item>isgalois</item>\n      <item>isprimitive</item>\n      <item>is_real_sparse</item>\n      <item>is_sparse</item>\n      <item>jpgread</item>\n      <item>jpgwrite</item>\n      <item>lambert_W0</item>\n      <item>lambert_Wm1</item>\n      <item>legendre_Pl</item>\n      <item>legendre_Plm</item>\n      <item>legendre_Ql</item>\n      <item>legendre_sphPlm</item>\n      <item>legendre_sphPlm_array</item>\n      <item>leval</item>\n      <item>listen</item>\n      <item>lnbeta</item>\n      <item>lncosh</item>\n      <item>lngamma_gsl</item>\n      <item>lnpoch</item>\n      <item>lnsinh</item>\n      <item>log_1plusx</item>\n      <item>log_1plusx_mx</item>\n      <item>log_erfc</item>\n      <item>lp</item>\n      <item>make_sparse</item>\n      <item>mark_for_deletion</item>\n      <item>medfilt1</item>\n      <item>newtonstep</item>\n      <item>nnz</item>\n      <item>numgradient</item>\n      <item>numhessian</item>\n      <item>pchip_deriv</item>\n      <item>pngread</item>\n      <item>pngwrite</item>\n      <item>poch</item>\n      <item>pochrel</item>\n      <item>pretty</item>\n      <item>primpoly</item>\n      <item>psi</item>\n      <item>psi_1_int</item>\n      <item>psi_1piy</item>\n      <item>psi_n</item>\n      <item>rand</item>\n      <item>rande</item>\n      <item>randn</item>\n      <item>randp</item>\n      <item>regexp</item>\n      <item>remez</item>\n      <item>reset_fixed_operations</item>\n      <item>rotate_scale</item>\n      <item>rsdec</item>\n      <item>rsenc</item>\n      <item>samin</item>\n      <item>SBBacksub</item>\n      <item>SBEig</item>\n      <item>SBFactor</item>\n      <item>SBProd</item>\n      <item>SBSolve</item>\n      <item>Shi</item>\n      <item>Si</item>\n      <item>sinc_gsl</item>\n      <item>spabs</item>\n      <item>sparse</item>\n      <item>spfind</item>\n      <item>spimag</item>\n      <item>spinv</item>\n      <item>splu</item>\n      <item>spreal</item>\n      <item>SymBand</item>\n      <item>synchrotron_1</item>\n      <item>synchrotron_2</item>\n      <item>syndtable</item>\n      <item>taylorcoeff</item>\n      <item>transport_2</item>\n      <item>transport_3</item>\n      <item>transport_4</item>\n      <item>transport_5</item>\n      <item>trisolve</item>\n      <item>waitbar</item>\n      <item>xmlread</item>\n      <item>zeta</item>\n      <item>zeta_int</item>\n      <item>aar</item>\n      <item>aarmam</item>\n      <item>ac2poly</item>\n      <item>ac2rc</item>\n      <item>acorf</item>\n      <item>acovf</item>\n      <item>addpath</item>\n      <item>ademodce</item>\n      <item>adim</item>\n      <item>adsmax</item>\n      <item>amodce</item>\n      <item>anderson_darling_cdf</item>\n      <item>anderson_darling_test</item>\n      <item>anovan</item>\n      <item>apkconst</item>\n      <item>append_save</item>\n      <item>applylut</item>\n      <item>ar2poly</item>\n      <item>ar2rc</item>\n      <item>arburg</item>\n      <item>arcext</item>\n      <item>arfit2</item>\n      <item>ar_spa</item>\n      <item>aryule</item>\n      <item>assert</item>\n      <item>au</item>\n      <item>aucapture</item>\n      <item>auload</item>\n      <item>auplot</item>\n      <item>aurecord</item>\n      <item>ausave</item>\n      <item>autumn</item>\n      <item>average_moments</item>\n      <item>awgn</item>\n      <item>azimuth</item>\n      <item>BandToFull</item>\n      <item>BandToSparse</item>\n      <item>base64encode</item>\n      <item>battery</item>\n      <item>bchpoly</item>\n      <item>bestblk</item>\n      <item>best_dir</item>\n      <item>best_dir_cov</item>\n      <item>betaln</item>\n      <item>bfgs</item>\n      <item>bfgsmin_example</item>\n      <item>bi2de</item>\n      <item>biacovf</item>\n      <item>bilinear</item>\n      <item>bisdemo</item>\n      <item>bispec</item>\n      <item>biterr</item>\n      <item>blkdiag</item>\n      <item>blkproc</item>\n      <item>bmpwrite</item>\n      <item>bone</item>\n      <item>bound_convex</item>\n      <item>boxcar</item>\n      <item>boxplot</item>\n      <item>brighten</item>\n      <item>bs_gradient</item>\n      <item>butter</item>\n      <item>buttord</item>\n      <item>bwborder</item>\n      <item>bweuler</item>\n      <item>bwlabel</item>\n      <item>bwmorph</item>\n      <item>bwselect</item>\n      <item>calendar</item>\n      <item>cceps</item>\n      <item>cdiff</item>\n      <item>cellstr</item>\n      <item>char</item>\n      <item>cheb</item>\n      <item>cheb1ord</item>\n      <item>cheb2ord</item>\n      <item>chebwin</item>\n      <item>cheby1</item>\n      <item>cheby2</item>\n      <item>chirp</item>\n      <item>clf</item>\n      <item>clip</item>\n      <item>cmpermute</item>\n      <item>cmunique</item>\n      <item>cohere</item>\n      <item>col2im</item>\n      <item>colfilt</item>\n      <item>colorgradient</item>\n      <item>comms</item>\n      <item>compand</item>\n      <item>complex</item>\n      <item>concat</item>\n      <item>conndef</item>\n      <item>content</item>\n      <item>contents</item>\n      <item>Contents</item>\n      <item>contourf</item>\n      <item>convhull</item>\n      <item>convmtx</item>\n      <item>cool</item>\n      <item>copper</item>\n      <item>corr2</item>\n      <item>cosets</item>\n      <item>count</item>\n      <item>covm</item>\n      <item>cplxpair</item>\n      <item>cquadnd</item>\n      <item>create_lookup_table</item>\n      <item>crule</item>\n      <item>crule2d</item>\n      <item>crule2dgen</item>\n      <item>csape</item>\n      <item>csapi</item>\n      <item>csd</item>\n      <item>csvread</item>\n      <item>csvwrite</item>\n      <item>ctranspose</item>\n      <item>cumtrapz</item>\n      <item>czt</item>\n      <item>d2_min</item>\n      <item>datenum</item>\n      <item>datestr</item>\n      <item>datevec</item>\n      <item>dct</item>\n      <item>dct2</item>\n      <item>dctmtx</item>\n      <item>de2bi</item>\n      <item>deal</item>\n      <item>decimate</item>\n      <item>decode</item>\n      <item>deg2rad</item>\n      <item>del2</item>\n      <item>delaunay</item>\n      <item>delaunay3</item>\n      <item>delta_method</item>\n      <item>demo</item>\n      <item>demodmap</item>\n      <item>deriv</item>\n      <item>detrend</item>\n      <item>dfdp</item>\n      <item>dftmtx</item>\n      <item>dhbar</item>\n      <item>dilate</item>\n      <item>dispatch</item>\n      <item>distance</item>\n      <item>dlmread</item>\n      <item>dlmwrite</item>\n      <item>dos</item>\n      <item>double</item>\n      <item>drawnow</item>\n      <item>durlev</item>\n      <item>dxfwrite</item>\n      <item>edge</item>\n      <item>edit</item>\n      <item>ellip</item>\n      <item>ellipdemo</item>\n      <item>ellipj</item>\n      <item>ellipke</item>\n      <item>ellipord</item>\n      <item>__ellip_ws</item>\n      <item>__ellip_ws_min</item>\n      <item>encode</item>\n      <item>eomday</item>\n      <item>erode</item>\n      <item>example</item>\n      <item>ExampleEigenValues</item>\n      <item>ExampleGenEigenValues</item>\n      <item>expdemo</item>\n      <item>expfit</item>\n      <item>eyediagram</item>\n      <item>factor</item>\n      <item>factorial</item>\n      <item>fail</item>\n      <item>fcnchk</item>\n      <item>feedback</item>\n      <item>fem_test</item>\n      <item>ff2n</item>\n      <item>fftconv2</item>\n      <item>fieldnames</item>\n      <item>fill</item>\n      <item>fill3</item>\n      <item>filter2</item>\n      <item>filtfilt</item>\n      <item>filtic</item>\n      <item>findsym</item>\n      <item>fir1</item>\n      <item>fir2</item>\n      <item>fixedpoint</item>\n      <item>flag</item>\n      <item>flag_implicit_samplerate</item>\n      <item>flattopwin</item>\n      <item>flix</item>\n      <item>float</item>\n      <item>fmin</item>\n      <item>fminbnd</item>\n      <item>fmins</item>\n      <item>fminunc</item>\n      <item>fnder</item>\n      <item>fnplt</item>\n      <item>fnval</item>\n      <item>fplot</item>\n      <item>freqs</item>\n      <item>freqs_plot</item>\n      <item>fsort</item>\n      <item>fullfact</item>\n      <item>FullToBand</item>\n      <item>funm</item>\n      <item>fzero</item>\n      <item>gammaln</item>\n      <item>gapTest</item>\n      <item>gaussian</item>\n      <item>gausswin</item>\n      <item>gconv</item>\n      <item>gconvmtx</item>\n      <item>gdeconv</item>\n      <item>gdftmtx</item>\n      <item>gen2par</item>\n      <item>geomean</item>\n      <item>getfield</item>\n      <item>getfields</item>\n      <item>gfft</item>\n      <item>gftable</item>\n      <item>gfweight</item>\n      <item>gget</item>\n      <item>gifft</item>\n      <item>ginput</item>\n      <item>gmm_estimate</item>\n      <item>gmm_example</item>\n      <item>gmm_obj</item>\n      <item>gmm_results</item>\n      <item>gmm_variance</item>\n      <item>gmm_variance_inefficient</item>\n      <item>gquad</item>\n      <item>gquad2d</item>\n      <item>gquad2d6</item>\n      <item>gquad2dgen</item>\n      <item>gquad6</item>\n      <item>gquadnd</item>\n      <item>grace_octave_path</item>\n      <item>gradient</item>\n      <item>grayslice</item>\n      <item>grep</item>\n      <item>grid</item>\n      <item>griddata</item>\n      <item>groots</item>\n      <item>grpdelay</item>\n      <item>grule</item>\n      <item>grule2d</item>\n      <item>grule2dgen</item>\n      <item>hadamard</item>\n      <item>hammgen</item>\n      <item>hankel</item>\n      <item>hann</item>\n      <item>harmmean</item>\n      <item>hilbert</item>\n      <item>histeq</item>\n      <item>histfit</item>\n      <item>histo</item>\n      <item>histo2</item>\n      <item>histo3</item>\n      <item>histo4</item>\n      <item>hot</item>\n      <item>hsv</item>\n      <item>hup</item>\n      <item>idct</item>\n      <item>idct2</item>\n      <item>idplot</item>\n      <item>idsim</item>\n      <item>ifftshift</item>\n      <item>im2bw</item>\n      <item>im2col</item>\n      <item>imadjust</item>\n      <item>imginfo</item>\n      <item>imhist</item>\n      <item>imnoise</item>\n      <item>impad</item>\n      <item>impz</item>\n      <item>imread</item>\n      <item>imrotate</item>\n      <item>imshear</item>\n      <item>imtranslate</item>\n      <item>imwrite</item>\n      <item>innerfun</item>\n      <item>inputname</item>\n      <item>interp</item>\n      <item>interp1</item>\n      <item>interp2</item>\n      <item>interpft</item>\n      <item>intersect</item>\n      <item>invest0</item>\n      <item>invest1</item>\n      <item>invfdemo</item>\n      <item>invfreq</item>\n      <item>invfreqs</item>\n      <item>invfreqz</item>\n      <item>inz</item>\n      <item>irsa_act</item>\n      <item>irsa_actcore</item>\n      <item>irsa_check</item>\n      <item>irsa_dft</item>\n      <item>irsa_dftfp</item>\n      <item>irsa_genreal</item>\n      <item>irsa_idft</item>\n      <item>irsa_isregular</item>\n      <item>irsa_jitsp</item>\n      <item>irsa_mdsp</item>\n      <item>irsa_normalize</item>\n      <item>irsa_plotdft</item>\n      <item>irsa_resample</item>\n      <item>irsa_rgenreal</item>\n      <item>isa</item>\n      <item>isbw</item>\n      <item>isdir</item>\n      <item>isequal</item>\n      <item>isfield</item>\n      <item>isgray</item>\n      <item>isind</item>\n      <item>ismember</item>\n      <item>isprime</item>\n      <item>isrgb</item>\n      <item>issparse</item>\n      <item>isunix</item>\n      <item>jet</item>\n      <item>kaiser</item>\n      <item>kaiserord</item>\n      <item>lambertw</item>\n      <item>lattice</item>\n      <item>lauchli</item>\n      <item>leasqr</item>\n      <item>leasqrdemo</item>\n      <item>legend</item>\n      <item>legendre</item>\n      <item>levinson</item>\n      <item>lin2mu</item>\n      <item>line_min</item>\n      <item>lloyds</item>\n      <item>lookup</item>\n      <item>lookup_table</item>\n      <item>lpc</item>\n      <item>lp_test</item>\n      <item>mad</item>\n      <item>magic</item>\n      <item>makelut</item>\n      <item>MakeShears</item>\n      <item>map</item>\n      <item>mat2gray</item>\n      <item>mat2str</item>\n      <item>mdsmax</item>\n      <item>mean2</item>\n      <item>medfilt2</item>\n      <item>meshc</item>\n      <item>minimize</item>\n      <item>minpol</item>\n      <item>mkpp</item>\n      <item>mktheta</item>\n      <item>mle_estimate</item>\n      <item>mle_example</item>\n      <item>mle_obj</item>\n      <item>mle_results</item>\n      <item>mle_variance</item>\n      <item>modmap</item>\n      <item>mu2lin</item>\n      <item>mvaar</item>\n      <item>mvar</item>\n      <item>mvfilter</item>\n      <item>mvfreqz</item>\n      <item>myfeval</item>\n      <item>nanmax</item>\n      <item>nanmean</item>\n      <item>nanmedian</item>\n      <item>nanmin</item>\n      <item>nanstd</item>\n      <item>nansum</item>\n      <item>ncauer</item>\n      <item>nchoosek</item>\n      <item>ncrule</item>\n      <item>ndims</item>\n      <item>nelder_mead_min</item>\n      <item>newmark</item>\n      <item>nlfilter</item>\n      <item>nlnewmark</item>\n      <item>__nlnewmark_fcn__</item>\n      <item>nmsmax</item>\n      <item>nonzeros</item>\n      <item>normplot</item>\n      <item>now</item>\n      <item>nrm</item>\n      <item>nthroot</item>\n      <item>nze</item>\n      <item>OCTAVE_FORGE_VERSION</item>\n      <item>ode23</item>\n      <item>ode45</item>\n      <item>ode78</item>\n      <item>optimset</item>\n      <item>ordfilt2</item>\n      <item>orient</item>\n      <item>pacf</item>\n      <item>padarray</item>\n      <item>parameterize</item>\n      <item>parcor</item>\n      <item>pareto</item>\n      <item>pascal</item>\n      <item>patch</item>\n      <item>pburg</item>\n      <item>pcg</item>\n      <item>pchip</item>\n      <item>pcolor</item>\n      <item>pcr</item>\n      <item>peaks</item>\n      <item>penddot</item>\n      <item>pendulum</item>\n      <item>perms</item>\n      <item>pie</item>\n      <item>pink</item>\n      <item>plot3</item>\n      <item>__plt3__</item>\n      <item>poly2ac</item>\n      <item>poly2ar</item>\n      <item>poly_2_ex</item>\n      <item>poly2mask</item>\n      <item>poly2rc</item>\n      <item>poly2sym</item>\n      <item>poly2th</item>\n      <item>polyarea</item>\n      <item>polyconf</item>\n      <item>polyder</item>\n      <item>polyderiv</item>\n      <item>polygcd</item>\n      <item>polystab</item>\n      <item>__power</item>\n      <item>ppval</item>\n      <item>prctile</item>\n      <item>prettyprint</item>\n      <item>prettyprint_c</item>\n      <item>primes</item>\n      <item>princomp</item>\n      <item>print</item>\n      <item>prism</item>\n      <item>proplan</item>\n      <item>pulstran</item>\n      <item>pwelch</item>\n      <item>pyulear</item>\n      <item>qaskdeco</item>\n      <item>qaskenco</item>\n      <item>qtdecomp</item>\n      <item>qtgetblk</item>\n      <item>qtsetblk</item>\n      <item>quad2dc</item>\n      <item>quad2dcgen</item>\n      <item>quad2dg</item>\n      <item>quad2dggen</item>\n      <item>quadc</item>\n      <item>quadg</item>\n      <item>quadl</item>\n      <item>quadndg</item>\n      <item>quantiz</item>\n      <item>quiver</item>\n      <item>rad2deg</item>\n      <item>rainbow</item>\n      <item>randerr</item>\n      <item>randint</item>\n      <item>randsrc</item>\n      <item>rat</item>\n      <item>rats</item>\n      <item>rc2ac</item>\n      <item>rc2ar</item>\n      <item>rc2poly</item>\n      <item>rceps</item>\n      <item>read_options</item>\n      <item>read_pdb</item>\n      <item>rectpuls</item>\n      <item>resample</item>\n      <item>rgb2gray</item>\n      <item>rk2fixed</item>\n      <item>rk4fixed</item>\n      <item>rk8fixed</item>\n      <item>rmfield</item>\n      <item>rmle</item>\n      <item>rmpath</item>\n      <item>roicolor</item>\n      <item>rosser</item>\n      <item>rotparams</item>\n      <item>rotv</item>\n      <item>rref</item>\n      <item>rsdecof</item>\n      <item>rsencof</item>\n      <item>rsgenpoly</item>\n      <item>samin_example</item>\n      <item>save_vrml</item>\n      <item>sbispec</item>\n      <item>scale_data</item>\n      <item>scatter</item>\n      <item>scatterplot</item>\n      <item>select_3D_points</item>\n      <item>selmo</item>\n      <item>setdiff</item>\n      <item>setfield</item>\n      <item>setfields</item>\n      <item>setxor</item>\n      <item>sftrans</item>\n      <item>sgolay</item>\n      <item>sgolayfilt</item>\n      <item>sinvest1</item>\n      <item>slurp_file</item>\n      <item>sortrows</item>\n      <item>sound</item>\n      <item>soundsc</item>\n      <item>spdiags</item>\n      <item>specgram</item>\n      <item>speed</item>\n      <item>speye</item>\n      <item>spfun</item>\n      <item>sphcat</item>\n      <item>spline</item>\n      <item>splot</item>\n      <item>spones</item>\n      <item>sprand</item>\n      <item>sprandn</item>\n      <item>spring</item>\n      <item>spstats</item>\n      <item>spsum</item>\n      <item>sp_test</item>\n      <item>sptest</item>\n      <item>spvcat</item>\n      <item>spy</item>\n      <item>std2</item>\n      <item>stem</item>\n      <item>str2double</item>\n      <item>strcmpi</item>\n      <item>stretchlim</item>\n      <item>strfind</item>\n      <item>strmatch</item>\n      <item>strncmp</item>\n      <item>strncmpi</item>\n      <item>strsort</item>\n      <item>strtok</item>\n      <item>strtoz</item>\n      <item>struct</item>\n      <item>strvcat</item>\n      <item>summer</item>\n      <item>sumskipnan</item>\n      <item>surf</item>\n      <item>surfc</item>\n      <item>sym2poly</item>\n      <item>symerr</item>\n      <item>symfsolve</item>\n      <item>tabulate</item>\n      <item>tar</item>\n      <item>temp_name</item>\n      <item>test</item>\n      <item>test_d2_min_1</item>\n      <item>test_d2_min_2</item>\n      <item>test_d2_min_3</item>\n      <item>test_ellipj</item>\n      <item>test_fminunc_1</item>\n      <item>testimio</item>\n      <item>test_inline_1</item>\n      <item>test_min_1</item>\n      <item>test_min_2</item>\n      <item>test_min_3</item>\n      <item>test_min_4</item>\n      <item>test_minimize_1</item>\n      <item>test_nelder_mead_min_1</item>\n      <item>test_nelder_mead_min_2</item>\n      <item>test_sncndn</item>\n      <item>test_struct</item>\n      <item>test_vmesh</item>\n      <item>test_vrml_faces</item>\n      <item>test_wpolyfit</item>\n      <item>text</item>\n      <item>textread</item>\n      <item>tf2zp</item>\n      <item>tfe</item>\n      <item>thfm</item>\n      <item>tics</item>\n      <item>toeplitz</item>\n      <item>toggle_grace_use</item>\n      <item>transpose</item>\n      <item>trapz</item>\n      <item>triang</item>\n      <item>tril</item>\n      <item>trimmean</item>\n      <item>tripuls</item>\n      <item>trisolve</item>\n      <item>triu</item>\n      <item>tsademo</item>\n      <item>tsearchdemo</item>\n      <item>ucp</item>\n      <item>uintlut</item>\n      <item>unique</item>\n      <item>unix</item>\n      <item>unmkpp</item>\n      <item>unscale_parameters</item>\n      <item>vec2mat</item>\n      <item>view</item>\n      <item>vmesh</item>\n      <item>voronoi</item>\n      <item>voronoin</item>\n      <item>vrml_arrow</item>\n      <item>vrml_Background</item>\n      <item>vrml_browse</item>\n      <item>vrml_cyl</item>\n      <item>vrml_demo_tutorial_1</item>\n      <item>vrml_demo_tutorial_2</item>\n      <item>vrml_demo_tutorial_3</item>\n      <item>vrml_demo_tutorial_4</item>\n      <item>vrml_ellipsoid</item>\n      <item>vrml_faces</item>\n      <item>vrml_flatten</item>\n      <item>vrml_frame</item>\n      <item>vrml_group</item>\n      <item>vrml_kill</item>\n      <item>vrml_lines</item>\n      <item>vrml_material</item>\n      <item>vrml_parallelogram</item>\n      <item>vrml_PointLight</item>\n      <item>vrml_points</item>\n      <item>vrml_select_points</item>\n      <item>vrml_surf</item>\n      <item>vrml_text</item>\n      <item>vrml_thick_surf</item>\n      <item>vrml_transfo</item>\n      <item>wavread</item>\n      <item>wavwrite</item>\n      <item>weekday</item>\n      <item>wgn</item>\n      <item>white</item>\n      <item>wilkinson</item>\n      <item>winter</item>\n      <item>wpolyfit</item>\n      <item>wpolyfitdemo</item>\n      <item>write_pdb</item>\n      <item>wsolve</item>\n      <item>xcorr</item>\n      <item>xcorr2</item>\n      <item>xcov</item>\n      <item>xlsread</item>\n      <item>xmlwrite</item>\n      <item>y2res</item>\n      <item>zero_count</item>\n      <item>zoom</item>\n      <item>zp2tf</item>\n      <item>zplane</item>\n      <item>zscore</item>\n    </list>\n    \n    <contexts>\n\n      <context name=\"_normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\n        <!-- Code folding -->\n        <!--TODO: with this implementation, code folding will close a block also with a wrong\n        end*: for istance, for can be closed by endif. This is done because the catchall end \n        keyword is widely used to close a number of blocks (including if and for).\n        If you have an improvement, please contribute it!-->\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"for\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endfor\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"if\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endif\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"do\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"until\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"while\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endwhile\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"function\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endfunction\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"unwind_protect\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"end_unwind_protect\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"parfor\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endparfor\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"classdef\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endclassdef\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"enumeration\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endenumeration\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"events\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endevents\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"methods\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endmethods\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"properties\" beginRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endproperties\" endRegion=\"block\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"switch\" beginRegion=\"Switch\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"endswitch\" endRegion=\"Switch\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"try\" beginRegion=\"Try\" />\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"end_try_catch\" endRegion=\"Try\" />\n        <!-- Catchall end keyword -->\n        <WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"end\" endRegion=\"block\" />\n\n        <!-- Look-ahead for adjoint ' after variable, number literal, closing braces and .' -->\n        <RegExpr context=\"_adjoint\" attribute=\"Variable\" String=\"[a-zA-Z]\\w*(?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Number\" String=\"(\\d+(\\.\\d+)?|\\.\\d+)([eE][+-]?\\d+)?[ij]?(?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Delimiter\" String=\"[\\)\\]}](?=')\" />\n        <RegExpr context=\"_adjoint\" attribute=\"Operator\" String=\"\\.'(?=')\" />\n\n        <!-- If ' is not the adjoint operator, it starts a string or an unterminated string;\n        strings can be also with \", and accept the respective delimiter in them either\n        by doubling it ('', \"\") or by escaping it (\\', \\\") -->\n        <RegExpr context=\"#stay\" attribute=\"String\" String=\"'([^'\\\\]|''|\\\\'|\\\\[^'])*'(?=[^']|$)\" />\n        <RegExpr context=\"#stay\" attribute=\"Incomplete String\" String=\"'([^']|''|\\\\')*\" />\n        <RegExpr context=\"#stay\" attribute=\"String\" String=\"&quot;([^&quot;\\\\]|&quot;&quot;|\\\\&quot;|\\\\[^&quot;])*&quot;(?=[^&quot;]|$)\" />\n        <RegExpr context=\"#stay\" attribute=\"Incomplete String\" String=\"&quot;([^&quot;]|&quot;&quot;|\\\\&quot;)*\" />\n        \n        <!-- Handling of keywords, comments, functions, identifiers, numbers and braces -->\n        <keyword context=\"#stay\" attribute=\"Keyword\" String=\"keywords\" />\n        <keyword context=\"#stay\" attribute=\"Commands\" String=\"commands\" />\n        <keyword context=\"#stay\" attribute=\"Functions\" String=\"functions\" />\n        <keyword context=\"#stay\" attribute=\"Builtin\" String=\"builtin\"/>\n        <keyword context=\"#stay\" attribute=\"Forge\" String=\"forge\" />\n        <RegExpr context=\"#stay\" attribute=\"Comment\" String=\"[%#].*$\" />\n        <RegExpr context=\"#stay\" attribute=\"Variable\" String=\"[a-zA-Z]\\w*\" />\n        <RegExpr context=\"#stay\" attribute=\"Number\" String=\"(\\d+(\\.\\d+)?|\\.\\d+)([eE][+-]?\\d+)?[ij]?\" />\n        <AnyChar context=\"#stay\" attribute=\"Delimiter\" String=\"()[]{}\"/>\n\n        <!-- Three- and two-character operators -->\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"...\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"==\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"~=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"!=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&lt;=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&gt;=\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&lt;&gt;\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"&amp;&amp;\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"||\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"++\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"--\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"**\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\".*\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\".**\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\".^\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\"./\"/>\n        <StringDetect context=\"#stay\" attribute=\"Operator\" String=\".'\"/>\n\n        <!-- Single-character operators -->\n        <AnyChar context=\"#stay\" attribute=\"Operator\" String=\"!&quot;%(*+,/;=>[]|~#&amp;)-:&lt;&gt;\\^\"/>\n        \n      </context>\n\n\n      <!--Context entered after encountering an ' adjoint operator -->\n      <context name=\"_adjoint\" attribute=\"Operator\" lineEndContext=\"#pop\">\n        <RegExpr context=\"#pop\" attribute=\"Operator\" String=\"'+\" />\n      </context>\n\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Delimiter\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Incomplete String\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Functions\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Forge\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Builtin\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n      <itemData name=\"Commands\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"%\" />\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords weakDeliminator=\".\" casesensitive=\"1\"/>\n  </general>\n\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/oors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"OORS\" version=\"3\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.oors\" author=\"Gernot Gebhard (gebhard@absint.com)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"oors\">\n      <item>allow</item>\n      <item>apply</item>\n      <item>backtrack</item>\n      <item>copy</item>\n      <item>condition</item>\n      <item>deny</item>\n      <item>extends</item>\n      <item>graph</item>\n      <item>if</item>\n      <item>else</item>\n      <item>linear</item>\n      <item>profile</item>\n      <item>rule</item>\n      <item>ruleset</item>\n      <item>search</item>\n      <item>unsafe</item>\n    </list>\n    <contexts>\n      <context name=\"Main\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Directive\" context=\"#stay\" String=\"oors\" />\n        <IncludeRules context=\"Comment\" />\n        <DetectSpaces />\n        <DetectChar attribute=\"Normal Text\" context=\"Ordered\" char=\"[\" beginRegion=\"Ordered\" />\n        <DetectChar attribute=\"Normal Text\" context=\"Unordered\" char=\"{\" beginRegion=\"Unordered\" />\n        <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"Header\" char=\"%\" char1=\"{\" beginRegion=\"Header\" />\n        <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"Header\" char=\"%\" char1=\"%\" beginRegion=\"Header\" />\n      </context>\n      <context name=\"Header\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"Comment\" />\n        <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"#pop\" char=\"%\" char1=\"}\" endRegion=\"Header\" />\n        <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"#pop\" char=\"%\" char1=\"%\" endRegion=\"Header\" />\n        <IncludeRules context=\"##C++\" />\n      </context>\n      <context name=\"Ordered\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Directive\" context=\"#stay\" String=\"oors\" />\n        <IncludeRules context=\"Comment\" />\n        <IncludeRules context=\"Accessor\" />\n        <DetectChar attribute=\"Normal Text\" context=\"Ordered\" char=\"[\" beginRegion=\"Ordered\" />\n        <DetectChar attribute=\"Normal Text\" context=\"Unordered\" char=\"{\" beginRegion=\"Unordered\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"]\" endRegion=\"Ordered\" />\n        <IncludeRules context=\"##C++\" />\n      </context>\n      <context name=\"Unordered\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Directive\" context=\"#stay\" String=\"oors\" />\n        <IncludeRules context=\"Comment\" />\n        <IncludeRules context=\"Accessor\" />\n        <DetectChar attribute=\"Normal Text\" context=\"Ordered\" char=\"[\" beginRegion=\"Ordered\" />\n        <DetectChar attribute=\"Normal Text\" context=\"Unordered\" char=\"{\" beginRegion=\"Unordered\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"Unordered\" />\n        <IncludeRules context=\"##C++\" />\n      </context>\n      <context name=\"Accessor\" attribute=\"Directive\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Directive\" context=\"#stay\" char=\"$\" char1=\"$\" />\n        <RegExpr attribute=\"Directive\" context=\"#stay\" String=\"\\$-?[_a-zA-Z1-9][_a-zA-Z0-9]*\" />\n      </context>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"CommentStar\" char=\"/\" char1=\"*\" />\n        <Detect2Chars attribute=\"Comment\" context=\"CommentSlash\" char=\"/\" char1=\"/\" />\n      </context>\n      <context name=\"CommentStar\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context name=\"CommentSlash\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"[^\\\\]$\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Content-Type Delimiter\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n      <itemData name=\"Directive\" defStyleNum=\"dsKeyword\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/opal.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"OPAL\" version=\"2\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.impl;*.sign\" mimetype=\"\" author=\"Sebastian Pipping (webmaster@hartwork.org)\">\n\n\t<highlighting>\n\n\t\t<list name=\"opal_keywords\">\n\t\t\t<item>ALL</item>\n\t\t\t<item>AND</item>\n\t\t\t<item>ANDIF</item>\n\t\t\t<item>ANY</item>\n\t\t\t<item>AS</item>\n\t\t\t<item>ASSERT</item>\n\t\t\t<item>AXM</item>\n\t\t\t<item>COMPLETELY</item>\n\t\t\t<item>DATA</item>\n\t\t\t<item>DEF</item>\n\t\t\t<item>DERIVE</item>\n\t\t\t<item>DFD</item>\n\t\t\t<item>DISCRIMINATORS</item>\n\t\t\t<item>ELSE</item>\n\t\t\t<item>EX</item>\n\t\t\t<item>EXTERNAL</item>\n\t\t\t<item>FI</item>\n\t\t\t<item>FIX</item>\n\t\t\t<item>FUN</item>\n\t\t\t<item>IF</item>\n\t\t\t<item>IMPLEMENTATION</item>\n\t\t\t<item>IMPLIES</item>\n\t\t\t<item>IMPORT</item>\n\t\t\t<item>IN</item>\n\t\t\t<item>INHERIT</item>\n\t\t\t<item>INJECTIONS</item>\n\t\t\t<item>INTERFACE</item>\n\t\t\t<item>INTERNAL</item>\n\t\t\t<item>LAW</item>\n\t\t\t<item>LAZY</item>\n\t\t\t<item>LEFTASSOC</item>\n\t\t\t<item>LET</item>\n\t\t\t<item>MODULE</item>\n\t\t\t<item>NOT</item>\n\t\t\t<item>ONLY</item>\n\t\t\t<item>OR</item>\n\t\t\t<item>ORIF</item>\n\t\t\t<item>OTHERWISE</item>\n\t\t\t<item>POST</item>\n\t\t\t<item>PRE</item>\n\t\t\t<item>PRED</item>\n\t\t\t<item>PRIORITY</item>\n\t\t\t<item>PROPERTIES</item>\n\t\t\t<item>REALIZES</item>\n\t\t\t<item>REQUIRE</item>\n\t\t\t<item>RIGHTASSOC</item>\n\t\t\t<item>SELECTORS</item>\n\t\t\t<item>SIGNATURE</item>\n\t\t\t<item>SORT</item>\n\t\t\t<item>SPC</item>\n\t\t\t<item>SPEC</item>\n\t\t\t<item>SPECIFICATION</item>\n\t\t\t<item>STRUCTURE</item>\n\t\t\t<item>THE</item>\n\t\t\t<item>THEN</item>\n\t\t\t<item>THEORY</item>\n\t\t\t<item>THM</item>\n\t\t\t<item>TYPE</item>\n\t\t\t<item>UNIQ</item>\n\t\t\t<item>WHERE</item>\n\t\t</list>\n\t\t<list name=\"opal_sorts\">\n\t\t\t<item>aEntry</item>\n\t\t\t<item>agent</item>\n\t\t\t<item>align</item>\n\t\t\t<item>anchor</item>\n\t\t\t<item>ans</item>\n\t\t\t<item>arg</item>\n\t\t\t<item>arg1</item>\n\t\t\t<item>arg2</item>\n\t\t\t<item>array</item>\n\t\t\t<item>arrowWhere</item>\n\t\t\t<item>bag</item>\n\t\t\t<item>bitmap</item>\n\t\t\t<item>bool</item>\n\t\t\t<item>bstree</item>\n\t\t\t<item>byte</item>\n\t\t\t<item>callback</item>\n\t\t\t<item>canvasEditor</item>\n\t\t\t<item>capStyle</item>\n\t\t\t<item>channel</item>\n\t\t\t<item>char</item>\n\t\t\t<item>childstat</item>\n\t\t\t<item>codom</item>\n\t\t\t<item>codomFrom</item>\n\t\t\t<item>codomTo</item>\n\t\t\t<item>color</item>\n\t\t\t<item>colorModel</item>\n\t\t\t<item>com</item>\n\t\t\t<item>composeOp</item>\n\t\t\t<item>config</item>\n\t\t\t<item>configCom</item>\n\t\t\t<item>cursor</item>\n\t\t\t<item>dArray</item>\n\t\t\t<item>data</item>\n\t\t\t<item>data1</item>\n\t\t\t<item>data11</item>\n\t\t\t<item>data2</item>\n\t\t\t<item>data21</item>\n\t\t\t<item>data3</item>\n\t\t\t<item>data31</item>\n\t\t\t<item>data4</item>\n\t\t\t<item>data41</item>\n\t\t\t<item>dataFrom</item>\n\t\t\t<item>dataTo</item>\n\t\t\t<item>defaultPrio</item>\n\t\t\t<item>denotation</item>\n\t\t\t<item>device</item>\n\t\t\t<item>dist</item>\n\t\t\t<item>distOut</item>\n\t\t\t<item>dom</item>\n\t\t\t<item>domFrom</item>\n\t\t\t<item>domTo</item>\n\t\t\t<item>drawing</item>\n\t\t\t<item>dyn</item>\n\t\t\t<item>emitter</item>\n\t\t\t<item>env</item>\n\t\t\t<item>event</item>\n\t\t\t<item>eventInfo</item>\n\t\t\t<item>file</item>\n\t\t\t<item>filemode</item>\n\t\t\t<item>filestat</item>\n\t\t\t<item>filetype</item>\n\t\t\t<item>first</item>\n\t\t\t<item>first1</item>\n\t\t\t<item>first2</item>\n\t\t\t<item>first3</item>\n\t\t\t<item>fission</item>\n\t\t\t<item>fmt</item>\n\t\t\t<item>font</item>\n\t\t\t<item>from</item>\n\t\t\t<item>from1</item>\n\t\t\t<item>from2</item>\n\t\t\t<item>funct</item>\n\t\t\t<item>group</item>\n\t\t\t<item>groupid</item>\n\t\t\t<item>heap</item>\n\t\t\t<item>iconfig</item>\n\t\t\t<item>image</item>\n\t\t\t<item>in</item>\n\t\t\t<item>inData</item>\n\t\t\t<item>index</item>\n\t\t\t<item>inode</item>\n\t\t\t<item>input</item>\n\t\t\t<item>int</item>\n\t\t\t<item>inter</item>\n\t\t\t<item>interdom</item>\n\t\t\t<item>interpreter</item>\n\t\t\t<item>iseq</item>\n\t\t\t<item>items</item>\n\t\t\t<item>joinStyle</item>\n\t\t\t<item>justifyHow</item>\n\t\t\t<item>long</item>\n\t\t\t<item>manager</item>\n\t\t\t<item>managerRequest</item>\n\t\t\t<item>map</item>\n\t\t\t<item>mapEntry</item>\n\t\t\t<item>mark</item>\n\t\t\t<item>mid</item>\n\t\t\t<item>modifier</item>\n\t\t\t<item>nat</item>\n\t\t\t<item>natMap</item>\n\t\t\t<item>OBJECT</item>\n\t\t\t<item>option</item>\n\t\t\t<item>orient</item>\n\t\t\t<item>out</item>\n\t\t\t<item>outData</item>\n\t\t\t<item>output</item>\n\t\t\t<item>packOp</item>\n\t\t\t<item>pair</item>\n\t\t\t<item>parser</item>\n\t\t\t<item>permission</item>\n\t\t\t<item>point</item>\n\t\t\t<item>positionRequest</item>\n\t\t\t<item>process</item>\n\t\t\t<item>procstat</item>\n\t\t\t<item>quad</item>\n\t\t\t<item>range</item>\n\t\t\t<item>real</item>\n\t\t\t<item>regulator</item>\n\t\t\t<item>rel</item>\n\t\t\t<item>relief</item>\n\t\t\t<item>res</item>\n\t\t\t<item>res1</item>\n\t\t\t<item>res2</item>\n\t\t\t<item>result</item>\n\t\t\t<item>role</item>\n\t\t\t<item>sap</item>\n\t\t\t<item>script</item>\n\t\t\t<item>scroller</item>\n\t\t\t<item>scrollView</item>\n\t\t\t<item>scrollWindow</item>\n\t\t\t<item>searchOpt</item>\n\t\t\t<item>second</item>\n\t\t\t<item>seekMode</item>\n\t\t\t<item>selector</item>\n\t\t\t<item>semaphor</item>\n\t\t\t<item>seq</item>\n\t\t\t<item>seqEntry</item>\n\t\t\t<item>set</item>\n\t\t\t<item>setEntry</item>\n\t\t\t<item>short</item>\n\t\t\t<item>sigaction</item>\n\t\t\t<item>sighandler</item>\n\t\t\t<item>sigmask</item>\n\t\t\t<item>signal</item>\n\t\t\t<item>size</item>\n\t\t\t<item>sizeRequest</item>\n\t\t\t<item>some</item>\n\t\t\t<item>sreal</item>\n\t\t\t<item>state</item>\n\t\t\t<item>stateId</item>\n\t\t\t<item>stateRequest</item>\n\t\t\t<item>string</item>\n\t\t\t<item>subrel</item>\n\t\t\t<item>tag</item>\n\t\t\t<item>textEditor</item>\n\t\t\t<item>time</item>\n\t\t\t<item>to</item>\n\t\t\t<item>tree</item>\n\t\t\t<item>triple</item>\n\t\t\t<item>union</item>\n\t\t\t<item>user</item>\n\t\t\t<item>userid</item>\n\t\t\t<item>version</item>\n\t\t\t<item>view</item>\n\t\t\t<item>void</item>\n\t\t\t<item>wconfig</item>\n\t\t\t<item>wconfigCom</item>\n\t\t\t<item>wday</item>\n\t\t\t<item>widget</item>\n\t\t\t<item>window</item>\n\t\t\t<item>wrapStyle</item>\n\t\t</list>\n\t\t<list name=\"opal_other\">\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\n\t\t\t<item>0</item>\n\t\t\t<item>1</item>\n\t\t\t<item>2</item>\n\t\t\t<item>3</item>\n\t\t\t<item>4</item>\n\t\t\t<item>5</item>\n\t\t\t<item>6</item>\n\t\t\t<item>7</item>\n\t\t\t<item>8</item>\n\t\t\t<item>9</item>\n\t\t\t<item>10</item>\n\t\t\t<item>11</item>\n\t\t\t<item>12</item>\n\t\t\t<item>13</item>\n\t\t\t<item>14</item>\n\t\t\t<item>15</item>\n\t\t\t<item>16</item>\n\t\t\t<item>17</item>\n\t\t\t<item>18</item>\n\t\t\t<item>19</item>\n\t\t\t<item>20</item>\n\t\t\t<item>21</item>\n\t\t\t<item>22</item>\n\t\t\t<item>23</item>\n\t\t\t<item>24</item>\n\t\t\t<item>25</item>\n\t\t\t<item>26</item>\n\t\t\t<item>27</item>\n\t\t\t<item>28</item>\n\t\t\t<item>29</item>\n\t\t\t<item>30</item>\n\t\t\t<item>31</item>\n\t\t\t<item>32</item>\n\t\t\t<item>64</item>\n\t\t\t<item>128</item>\n\t\t\t<item>256</item>\n\t\t\t<item>512</item>\n\t\t\t<item>1024</item>\n\t\t\t<item>10000</item>\n\t\t\t<item>100000</item>\n\t\t\t<item>1000000</item>\n\t\t</list>\n\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"opal_keywords\"/>\n\t\t\t\t<keyword attribute=\"Sort\" context=\"#stay\" String=\"opal_sorts\"/>\n\t\t\t\t<keyword attribute=\"Decimal\" context=\"#stay\" String=\"opal_other\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" context=\"SingLineCom\" String=\"(?:^--$|^--[^-]|[^-]--[^-]|[^-]--$)\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"MultLineCom\" char=\"/\" char1=\"*\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t\t\t\t<Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"SingLineCom\"/>\n\t\t\t\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"MultLineCom\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"MultLineCom\" char=\"/\" char1=\"*\"/>\n\t\t\t</context>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\" color=\"#0000ff\"/>\n\t\t\t<itemData name=\"Sort\"        defStyleNum=\"dsDataType\" color=\"#0000ff\"/>\n\t\t\t<itemData name=\"Decimal\"     defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"String\"      defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Comment\"     defStyleNum=\"dsOthers\"/>\n\t\t</itemDatas>\n\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"--\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\"/>\n\t</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/opencl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"OpenCL\" section=\"Sources\"\n          version=\"4\" kateversion=\"3.4\"\n          indenter=\"cstyle\"\n          extensions=\"*.cl\"\n          mimetype=\"text/x-clsrc\"\n          priority=\"5\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>__constant</item>\n      <item>__global</item>\n      <item>__local</item>\n      <item>__private</item>\n      <item>__kernel</item>\n      <item>__read_only</item>\n      <item>__write_only</item>\n      <item>constant</item>\n      <item>global</item>\n      <item>local</item>\n      <item>private</item>\n      <item>kernel</item>\n      <item>read_only</item>\n      <item>write_only</item>\n      <item>break</item>\n      <item>case</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>enum</item>\n      <item>for</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>inline</item>\n      <item>return</item>\n      <item>sizeof</item>\n      <item>struct</item>\n      <item>switch</item>\n      <item>typedef</item>\n      <item>union</item>\n      <item>while</item>\n    </list>\n    <list name=\"types\">\n      <item>bool</item>\n      <item>uchar</item>\n      <item>uchar2</item>\n      <item>uchar3</item>\n      <item>uchar4</item>\n      <item>uchar8</item>\n      <item>uchar16</item>\n      <item>char</item>\n      <item>char2</item>\n      <item>char3</item>\n      <item>char4</item>\n      <item>char8</item>\n      <item>char16</item>\n      <item>const</item>\n      <item>double</item>\n      <item>double2</item>\n      <item>double3</item>\n      <item>double4</item>\n      <item>double8</item>\n      <item>double16</item>\n      <item>event_t</item>\n      <item>float</item>\n      <item>float2</item>\n      <item>float3</item>\n      <item>float4</item>\n      <item>float8</item>\n      <item>float16</item>\n      <item>half</item>\n      <item>half2</item>\n      <item>half3</item>\n      <item>half4</item>\n      <item>half8</item>\n      <item>half16</item>\n      <item>image1d_t</item>\n      <item>image2d_t</item>\n      <item>image3d_t</item>\n      <item>uint</item>\n      <item>uint2</item>\n      <item>uint3</item>\n      <item>uint4</item>\n      <item>uint8</item>\n      <item>uint16</item>\n\t  <item>int</item>\n      <item>int2</item>\n      <item>int3</item>\n      <item>int4</item>\n      <item>int8</item>\n      <item>int16</item>\n      <item>ulong</item>\n      <item>ulong2</item>\n      <item>ulong3</item>\n      <item>ulong4</item>\n      <item>ulong8</item>\n      <item>ulong16</item>\n      <item>long</item>\n      <item>long2</item>\n      <item>long3</item>\n      <item>long4</item>\n      <item>long8</item>\n      <item>long16</item>\n      <item>restrict</item>\n      <item>sampler_t</item>\n      <item>ushort</item>\n      <item>ushort2</item>\n      <item>ushort3</item>\n      <item>ushort4</item>\n      <item>ushort8</item>\n      <item>ushort16</item>\n      <item>short</item>\n      <item>short2</item>\n      <item>short3</item>\n      <item>short4</item>\n      <item>short8</item>\n      <item>short16</item>\n      <item>signed</item>\n      <item>static</item>\n      <item>unsigned</item>\n      <item>void</item>\n      <item>volatile</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n\t<RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\\s*$\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <DetectChar context=\"AfterHash\" char=\"#\" firstNonSpace=\"true\" lookAhead=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <DetectIdentifier />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Region Marker\" lineEndContext=\"#pop\" name=\"Region Marker\">\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"AfterHash\">\n        <!-- define, elif, else, endif, error, if, ifdef, ifndef, include, include_next, line, pragma, undef, warning -->\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*if(?:def|ndef)?(?=\\s+\\S)\" insensitive=\"true\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*endif\" insensitive=\"true\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Define\" String=\"#\\s*define.*((?=\\\\))\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s+[0-9]+\" insensitive=\"true\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*el(?:se|if)\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Prep. Lib\"    defStyleNum=\"dsOthers\" spellChecking=\"false\"/> <!--,Qt::darkYellow,Qt::yellow,false,false)); -->\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n      <itemData name=\"Error\"        defStyleNum=\"dsError\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" additionalDeliminator=\"'&quot;\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/openscad.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"OpenSCAD\"\n          version=\"2\"\n          indenter=\"cstyle\"\n          kateversion=\"5.53\"\n          section=\"3D\"\n          extensions=\"*.scad\"\n          mimetype=\"text/x-openscad-src\"\n          priority=\"1\"\n          casesensitive=\"1\"\n          author=\"Julian Stirling (julian@julianstirling.co.uk)\"\n          license=\"MIT\">\n    <highlighting>\n\n        <list name=\"preprocessor\">\n            <item>include</item>\n            <item>import</item>\n            <item>use</item>\n        </list>\n        <list name=\"keywords\">\n            <item>echo</item>\n            <item>for</item>\n            <item>intersection_for</item>\n            <item>if</item>\n            <item>else</item>\n            <item>module</item>\n            <item>function</item>\n        </list>\n\n        <list name=\"2D\">\n            <item>circle</item>\n            <item>square</item>\n            <item>polygon</item>\n            <item>text</item>\n        </list>\n\n        <list name=\"3D\">\n            <item>sphere</item>\n            <item>cube</item>\n            <item>cylinder</item>\n            <item>polyhedron</item>\n        </list>\n\n        <list name=\"transformations\">\n            <item>translate</item>\n            <item>rotate</item>\n            <item>scale</item>\n            <item>resize</item>\n            <item>mirror</item>\n            <item>multmatrix</item>\n            <item>color</item>\n            <item>color</item>\n            <item>offset</item>\n            <item>hull</item>\n            <item>minkowski</item>\n        </list>\n\n        <list name=\"boolean\">\n            <item>union</item>\n            <item>difference</item>\n            <item>intersection</item>\n        </list>\n\n        <list name=\"mathematical\">\n            <item>abs</item>\n            <item>sign</item>\n            <item>sin</item>\n            <item>cos</item>\n            <item>tan</item>\n            <item>acos</item>\n            <item>asin</item>\n            <item>atan</item>\n            <item>atan2</item>\n            <item>floor</item>\n            <item>round</item>\n            <item>ceil</item>\n            <item>ln</item>\n            <item>len</item>\n            <item>let</item>\n            <item>log</item>\n            <item>pow</item>\n            <item>sqrt</item>\n            <item>exp</item>\n            <item>rands</item>\n            <item>min</item>\n            <item>max</item>\n        </list>\n\n        <list name=\"functions\">\n            <item>concat</item>\n            <item>lookup</item>\n            <item>str</item>\n            <item>chr</item>\n            <item>search</item>\n            <item>version</item>\n            <item>version_num</item>\n            <item>norm</item>\n            <item>cross</item>\n            <item>parent_module</item>\n        </list>\n\n        <list name=\"list_comp\">\n            <item>Generate</item>\n            <item>Conditions</item>\n            <item>Assignments</item>\n        </list>\n\n        <list name=\"other\">\n            <item>linear_extrude</item>\n            <item>rotate_extrude</item>\n            <item>surface</item>\n            <item>projection</item>\n            <item>render</item>\n            <item>children</item>\n        </list>\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n                <DetectSpaces />\n        <RegExpr attribute=\"Error\" context=\"AfterDollar\" String=\"\\$[a-zA-Z]*\" insensitive=\"true\" firstNonSpace=\"false\"  lookAhead=\"true\"/>\n                <keyword attribute=\"Preprocessor\" context=\"#stay\" String=\"preprocessor\"/>\n                <keyword attribute=\"Keywords\" context=\"#stay\" String=\"keywords\"/>\n                <keyword attribute=\"Two Dim\" context=\"#stay\" String=\"2D\"/>\n                <keyword attribute=\"Three Dim\" context=\"#stay\" String=\"3D\"/>\n                <keyword attribute=\"Transformation\" context=\"#stay\" String=\"transformations\"/>\n                <keyword attribute=\"Boolean\" context=\"#stay\" String=\"boolean\"/>\n                <keyword attribute=\"Mathematical\" context=\"#stay\" String=\"mathematical\"/>\n                <keyword attribute=\"Functions\" context=\"#stay\" String=\"functions\"/>\n                <keyword attribute=\"List Comprehensions\" context=\"#stay\" String=\"list_comp\"/>\n                <keyword attribute=\"Other\" context=\"#stay\" String=\"other\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"OneLineCom\" char=\"/\" char1=\"/\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"MultLineCom\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n            </context>\n            <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"AfterDollar\">\n                <RegExpr attribute=\"SpecialVar\" context=\"SpecialVar\" String=\"\\$(fa|fs|fn|t|vpr|vpt|vpd|children)\" insensitive=\"true\" firstNonSpace=\"false\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"[^a-zA-Z0-9\\$]\" insensitive=\"true\" firstNonSpace=\"false\"/>\n            </context>\n            <context attribute=\"SpecialVar\" lineEndContext=\"#pop\" name=\"SpecialVar\">\n            <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"[^\\s=\\*\\+\\-/\\);]+\" insensitive=\"true\" firstNonSpace=\"false\"/>\n            <RegExpr attribute=\"Normal Text\" context=\"#pop#pop\" String=\"\\s*[=\\*\\+\\-/\\);]\" insensitive=\"true\" firstNonSpace=\"false\"/>\n            </context>\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"OneLineCom\">\n            </context>\n            <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"MultLineCom\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\"              defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\"                  defStyleNum=\"dsComment\"/>\n            <itemData name=\"Error\"                    defStyleNum=\"dsError\" spellChecking=\"false\"/>\n            <itemData name=\"Preprocessor\"             defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n            <itemData name=\"Keywords\"                 defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Two Dim\"                  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Three Dim\"                defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Transformation\"           defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Boolean\"                  defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Mathematical\"             defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Functions\"                defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n            <itemData name=\"List Comprehensions\"      defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Other\"                    defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n        <itemData name=\"SpecialVar\"               defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"//\" />\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n        </comments>\n        <keywords casesensitive=\"1\" additionalDeliminator=\"'&quot;\" />\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pango.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Pango\" version=\"5\" kateversion=\"2.4\" section=\"Markup\" extensions=\"\" mimetype=\"\" author=\"Jonathan Schmidt-Domniné &lt;devel@the-user.org&gt;\" license=\"LGPL\" priority=\"10\">\n\n<highlighting>\n<!-- NOTE: Currently, all keyword lists are already matched in the RegExp rules\n           below. This could be heavily improved, any takers?\n\n  <list name=\"tags\">\n      <item>&lt;span</item>\n      <item>&lt;b</item>\n      <item>&lt;big</item>\n      <item>&lt;i</item>\n      <item>&lt;s</item>\n      <item>&lt;sub</item>\n      <item>&lt;sup</item>\n      <item>&lt;small</item>\n      <item>&lt;tt</item>\n      <item>&lt;u</item>\n  </list>\n  \n  <list name=\"endtags\">\n      <item>&lt;/span&gt;</item>\n      <item>&lt;/b&gt;</item>\n      <item>&lt;/big&gt;</item>\n      <item>&lt;/i&gt;</item>\n      <item>&lt;/s&gt;</item>\n      <item>&lt;/sub&gt;</item>\n      <item>&lt;/sup&gt;</item>\n      <item>&lt;/small&gt;</item>\n      <item>&lt;/tt&gt;</item>\n      <item>&lt;/u&gt;</item>\n  </list>\n  \n  <list name=\"int_attributes\">\n      <item>size=</item>\n      <item>font_size=</item>\n      <item>rise=</item>\n      <item>letter_spacing=</item>\n  </list>\n  \n  <list name=\"plain_attributes\">\n      <item>font=</item>\n      <item>font_desc=</item>\n      <item>font_family=</item>\n      <item>face=</item>\n      <item>lang=</item>\n  </list>\n  \n  <list name=\"color_attributes\">\n      <item>strikethrough_color=</item>\n      <item>foreground=</item>\n      <item>fgcolor=</item>\n      <item>color=</item>\n      <item>background=</item>\n      <item>bgcolor=</item>\n      <item>underline_color=</item>\n  </list>\n-->\n\n<contexts>\n  <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"FindPango\" />\n  </context>\n\n  <context name=\"FindPango\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectSpaces/>\n    <RegExpr attribute=\"Element\" context=\"#stay\" String=\"&lt;/(span|b|big|i|s|sub|sup|small|tt|u)&gt;\" endRegion=\"pango_node\" />\n    <RegExpr attribute=\"Element\" context=\"FindAttributes\" String=\"&lt;(span|b|big|i|s|sub|sup|small|tt|u)\" beginRegion=\"pango_node\" />\n    <DetectIdentifier />\n  </context>\n\n  <context name=\"FindAttributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n      <DetectSpaces/>\n      <RegExpr attribute=\"Key\" context=\"InGravity\" String=\"gravity=\" />\n      <RegExpr attribute=\"Key\" context=\"InGravityHint\" String=\"gravity_hint=\" />\n      <RegExpr attribute=\"Key\" context=\"InStretch\" String=\"(font_)?stretch=\" />\n      <RegExpr attribute=\"Key\" context=\"InBoolean\" String=\"(strikethrough|fallback)=\" />\n      <RegExpr attribute=\"Key\" context=\"InStyle\" String=\"(font_)?style=\" />\n      <RegExpr attribute=\"Key\" context=\"InUnderline\" String=\"underline=\" />\n      <RegExpr attribute=\"Key\" context=\"InVariant\" String=\"(font_)?variant=\" />\n      <RegExpr attribute=\"Key\" context=\"InWeight\" String=\"(font_)?weight=\" />\n      <RegExpr attribute=\"Key\" context=\"InInt\" String=\"(size|font_size|rise|letter_spacing)=\" />\n      <RegExpr attribute=\"Key\" context=\"InString\" String=\"(font|font_desc|font_family|face|lang)=\" />\n      <RegExpr attribute=\"Key\" context=\"InColor\" String=\"(strikethrough_color|foreground|fgcolor|color|background|bgcolor|underline_color)=\" />\n      <DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n      <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InGravity\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(south|east|north|west|auto)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InGravityHint\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(natural|strong|line)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InStretch\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(ultracondensed|extracondensed|condensed|semicondensed|normal|semiexpanded|expanded|extraexpanded|ultraexpanded)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InBoolean\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(false|true)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InStyle\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(normal|oblique|italic)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InUnderline\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(none|single|double|low|error)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InVariant\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(normal|smallcaps)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n\n  <context name=\"InWeight\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"Decimal\" context=\"#pop\" String=\"'[0-9]*'\" />\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'(ultralight|light|normal|bold|ultrabold|heavy)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InColor\" attribute=\"Color\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"Color\" context=\"#pop\" String=\"'((#[0-9a-fA-F]{3}){1,4}|snow|ghost white|GhostWhite|white smoke|WhiteSmoke|gainsboro|floral white|FloralWhite|old lace|OldLace|linen|antique white|AntiqueWhite|papaya whip|PapayaWhip|blanched almond|BlanchedAlmond|bisque|peach puff|PeachPuff|navajo white|NavajoWhite|moccasin|cornsilk|ivory|lemon chiffon|LemonChiffon|seashell|honeydew|mint cream|MintCream|azure|alice blue|AliceBlue|lavender|lavender blush|LavenderBlush|misty rose|MistyRose|white|black|dark slate gray|DarkSlateGray|dark slate grey|DarkSlateGrey|dim gray|DimGray|dim grey|DimGrey|slate gray|SlateGray|slate grey|SlateGrey|light slate gray|LightSlateGray|light slate grey|LightSlateGrey|gray|grey|light grey|LightGrey|light gray|LightGray|midnight blue|MidnightBlue|navy|navy blue|NavyBlue|cornflower blue|CornflowerBlue|dark slate blue|DarkSlateBlue|slate blue|SlateBlue|medium slate blue|MediumSlateBlue|light slate blue|LightSlateBlue|medium blue|MediumBlue|royal blue|RoyalBlue|blue|dodger blue|DodgerBlue|deep sky blue|DeepSkyBlue|sky blue|SkyBlue|light sky blue|LightSkyBlue|steel blue|SteelBlue|light steel blue|LightSteelBlue|light blue|LightBlue|powder blue|PowderBlue|pale turquoise|PaleTurquoise|dark turquoise|DarkTurquoise|medium turquoise|MediumTurquoise|turquoise|cyan|light cyan|LightCyan|cadet blue|CadetBlue|medium aquamarine|MediumAquamarine|aquamarine|dark green|DarkGreen|dark olive green|DarkOliveGreen|dark sea green|DarkSeaGreen|sea green|SeaGreen|medium sea green|MediumSeaGreen|light sea green|LightSeaGreen|pale green|PaleGreen|spring green|SpringGreen|lawn green|LawnGreen|green|chartreuse|medium spring green|MediumSpringGreen|green yellow|GreenYellow|lime green|LimeGreen|yellow green|YellowGreen|forest green|ForestGreen|olive drab|OliveDrab|dark khaki|DarkKhaki|khaki|pale goldenrod|PaleGoldenrod|light goldenrod yellow|LightGoldenrodYellow|light yellow|LightYellow|yellow|gold|light goldenrod|LightGoldenrod|goldenrod|dark goldenrod|DarkGoldenrod|rosy brown|RosyBrown|indian red|IndianRed|saddle brown|SaddleBrown|sienna|peru|burlywood|beige|wheat|sandy brown|SandyBrown|tan|chocolate|firebrick|brown|dark salmon|DarkSalmon|salmon|light salmon|LightSalmon|orange|dark orange|DarkOrange|coral|light coral|LightCoral|tomato|orange red|OrangeRed|red|hot pink|HotPink|deep pink|DeepPink|pink|light pink|LightPink|pale violet red|PaleVioletRed|maroon|medium violet red|MediumVioletRed|violet red|VioletRed|magenta|violet|plum|orchid|medium orchid|MediumOrchid|dark orchid|DarkOrchid|dark violet|DarkViolet|blue violet|BlueViolet|purple|medium purple|MediumPurple|thistle|snow1|snow2|snow3|snow4|seashell1|seashell2|seashell3|seashell4|AntiqueWhite1|AntiqueWhite2|AntiqueWhite3|AntiqueWhite4|bisque1|bisque2|bisque3|bisque4|PeachPuff1|PeachPuff2|PeachPuff3|PeachPuff4|NavajoWhite1|NavajoWhite2|NavajoWhite3|NavajoWhite4|LemonChiffon1|LemonChiffon2|LemonChiffon3|LemonChiffon4|cornsilk1|cornsilk2|cornsilk3|cornsilk4|ivory1|ivory2|ivory3|ivory4|honeydew1|honeydew2|honeydew3|honeydew4|LavenderBlush1|LavenderBlush2|LavenderBlush3|LavenderBlush4|MistyRose1|MistyRose2|MistyRose3|MistyRose4|azure1|azure2|azure3|azure4|SlateBlue1|SlateBlue2|SlateBlue3|SlateBlue4|RoyalBlue1|RoyalBlue2|RoyalBlue3|RoyalBlue4|blue1|blue2|blue3|blue4|DodgerBlue1|DodgerBlue2|DodgerBlue3|DodgerBlue4|SteelBlue1|SteelBlue2|SteelBlue3|SteelBlue4|DeepSkyBlue1|DeepSkyBlue2|DeepSkyBlue3|DeepSkyBlue4|SkyBlue1|SkyBlue2|SkyBlue3|SkyBlue4|LightSkyBlue1|LightSkyBlue2|LightSkyBlue3|LightSkyBlue4|SlateGray1|SlateGray2|SlateGray3|SlateGray4|LightSteelBlue1|LightSteelBlue2|LightSteelBlue3|LightSteelBlue4|LightBlue1|LightBlue2|LightBlue3|LightBlue4|LightCyan1|LightCyan2|LightCyan3|LightCyan4|PaleTurquoise1|PaleTurquoise2|PaleTurquoise3|PaleTurquoise4|CadetBlue1|CadetBlue2|CadetBlue3|CadetBlue4|turquoise1|turquoise2|turquoise3|turquoise4|cyan1|cyan2|cyan3|cyan4|DarkSlateGray1|DarkSlateGray2|DarkSlateGray3|DarkSlateGray4|aquamarine1|aquamarine2|aquamarine3|aquamarine4|DarkSeaGreen1|DarkSeaGreen2|DarkSeaGreen3|DarkSeaGreen4|SeaGreen1|SeaGreen2|SeaGreen3|SeaGreen4|PaleGreen1|PaleGreen2|PaleGreen3|PaleGreen4|SpringGreen1|SpringGreen2|SpringGreen3|SpringGreen4|green1|green2|green3|green4|chartreuse1|chartreuse2|chartreuse3|chartreuse4|OliveDrab1|OliveDrab2|OliveDrab3|OliveDrab4|DarkOliveGreen1|DarkOliveGreen2|DarkOliveGreen3|DarkOliveGreen4|khaki1|khaki2|khaki3|khaki4|LightGoldenrod1|LightGoldenrod2|LightGoldenrod3|LightGoldenrod4|LightYellow1|LightYellow2|LightYellow3|LightYellow4|yellow1|yellow2|yellow3|yellow4|gold1|gold2|gold3|gold4|goldenrod1|goldenrod2|goldenrod3|goldenrod4|DarkGoldenrod1|DarkGoldenrod2|DarkGoldenrod3|DarkGoldenrod4|RosyBrown1|RosyBrown2|RosyBrown3|RosyBrown4|IndianRed1|IndianRed2|IndianRed3|IndianRed4|sienna1|sienna2|sienna3|sienna4|burlywood1|burlywood2|burlywood3|burlywood4|wheat1|wheat2|wheat3|wheat4|tan1|tan2|tan3|tan4|chocolate1|chocolate2|chocolate3|chocolate4|firebrick1|firebrick2|firebrick3|firebrick4|brown1|brown2|brown3|brown4|salmon1|salmon2|salmon3|salmon4|LightSalmon1|LightSalmon2|LightSalmon3|LightSalmon4|orange1|orange2|orange3|orange4|DarkOrange1|DarkOrange2|DarkOrange3|DarkOrange4|coral1|coral2|coral3|coral4|tomato1|tomato2|tomato3|tomato4|OrangeRed1|OrangeRed2|OrangeRed3|OrangeRed4|red1|red2|red3|red4|DeepPink1|DeepPink2|DeepPink3|DeepPink4|HotPink1|HotPink2|HotPink3|HotPink4|pink1|pink2|pink3|pink4|LightPink1|LightPink2|LightPink3|LightPink4|PaleVioletRed1|PaleVioletRed2|PaleVioletRed3|PaleVioletRed4|maroon1|maroon2|maroon3|maroon4|VioletRed1|VioletRed2|VioletRed3|VioletRed4|magenta1|magenta2|magenta3|magenta4|orchid1|orchid2|orchid3|orchid4|plum1|plum2|plum3|plum4|MediumOrchid1|MediumOrchid2|MediumOrchid3|MediumOrchid4|DarkOrchid1|DarkOrchid2|DarkOrchid3|DarkOrchid4|purple1|purple2|purple3|purple4|MediumPurple1|MediumPurple2|MediumPurple3|MediumPurple4|thistle1|thistle2|thistle3|thistle4|gray0|grey0|gray1|grey1|gray2|grey2|gray3|grey3|gray4|grey4|gray5|grey5|gray6|grey6|gray7|grey7|gray8|grey8|gray9|grey9|gray10|grey10|gray11|grey11|gray12|grey12|gray13|grey13|gray14|grey14|gray15|grey15|gray16|grey16|gray17|grey17|gray18|grey18|gray19|grey19|gray20|grey20|gray21|grey21|gray22|grey22|gray23|grey23|gray24|grey24|gray25|grey25|gray26|grey26|gray27|grey27|gray28|grey28|gray29|grey29|gray30|grey30|gray31|grey31|gray32|grey32|gray33|grey33|gray34|grey34|gray35|grey35|gray36|grey36|gray37|grey37|gray38|grey38|gray39|grey39|gray40|grey40|gray41|grey41|gray42|grey42|gray43|grey43|gray44|grey44|gray45|grey45|gray46|grey46|gray47|grey47|gray48|grey48|gray49|grey49|gray50|grey50|gray51|grey51|gray52|grey52|gray53|grey53|gray54|grey54|gray55|grey55|gray56|grey56|gray57|grey57|gray58|grey58|gray59|grey59|gray60|grey60|gray61|grey61|gray62|grey62|gray63|grey63|gray64|grey64|gray65|grey65|gray66|grey66|gray67|grey67|gray68|grey68|gray69|grey69|gray70|grey70|gray71|grey71|gray72|grey72|gray73|grey73|gray74|grey74|gray75|grey75|gray76|grey76|gray77|grey77|gray78|grey78|gray79|grey79|gray80|grey80|gray81|grey81|gray82|grey82|gray83|grey83|gray84|grey84|gray85|grey85|gray86|grey86|gray87|grey87|gray88|grey88|gray89|grey89|gray90|grey90|gray91|grey91|gray92|grey92|gray93|grey93|gray94|grey94|gray95|grey95|gray96|grey96|gray97|grey97|gray98|grey98|gray99|grey99|gray100|grey100|dark grey|DarkGrey|dark gray|DarkGray|dark blue|DarkBlue|dark cyan|DarkCyan|dark magenta|DarkMagenta|dark red|DarkRed|light green|LightGreen)'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InInt\" attribute=\"Decimal\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"Decimal\" context=\"#pop\" String=\"'(-?)[0-9]*'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n  \n  <context name=\"InString\" attribute=\"String\" lineEndContext=\"#stay\">\n      <RegExpr attribute=\"String\" context=\"#pop\" String=\"'[^']*'\" />\n      <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"\\S\" />\n  </context>\n\n</contexts>\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Element\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Key\" defStyleNum=\"dsOthers\" />\n  <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" />\n  <itemData name=\"Color\" defStyleNum=\"dsFloat\" />\n  <itemData name=\"String\" defStyleNum=\"dsString\" />\n  <itemData name=\"Error\" defStyleNum=\"dsError\" />\n</itemDatas>\n\n</highlighting>\n  <general>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pascal.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Pascal\"\n          section=\"Sources\" \n          version=\"2\"\n          kateversion=\"3.3\"\n          extensions=\"*.p;*.pas;*.pp\"\n          mimetype=\"text/x-pascal\" \n          priority=\"8\"\n\t  indenter=\"pascal\"\n          author=\"Unnamed people and Liu Sizhuang(oldherl@gmail.com)\"\n          >\n  <highlighting>\n    <list name=\"keywords\">\n      <item>and</item>\n      <item>array</item>\n      <item>asm</item>\n      <item>case</item>\n      <item>const</item>\n      <item>div</item>\n      <item>do</item>\n      <item>downto</item>\n      <item>else</item>\n      <item>file</item>\n      <item>for</item>\n      <item>function</item>\n      <item>goto</item>\n      <item>if</item>\n      <item>in</item>\n      <item>label</item>\n      <item>mod</item>\n      <item>nil</item>\n      <item>not</item>\n      <item>of</item>\n      <item>operator</item>\n      <item>or</item>\n      <item>packed</item>\n      <item>procedure</item>\n      <item>program</item>\n      <item>record</item>\n      <item>repeat</item>\n      <item>set</item>\n      <item>then</item>\n      <item>to</item>\n      <item>type</item>\n      <item>unit</item>\n      <item>until</item>\n      <item>uses</item>\n      <item>var</item>\n      <item>while</item>\n      <item>with</item>\n      <item>xor</item>\n\n\n      <item>at</item>\n      <item>automated</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>dispinterface</item>\n      <item>dispose</item>\n      <item>exit</item>\n      <item>false</item>\n      <item>finalization</item>\n      <item>initialization</item>\n      <item>library</item>\n      <item>new</item>\n      <item>published</item>\n      <item>resourcestring</item>\n      <item>self</item>\n      <item>true</item>\n    </list>\n    <list name=\"ISO/Delphi Extended\">\n      <item>abstract</item>\n      <item>as</item>\n      <item>bindable</item>\n      <item>constructor</item>\n      <item>destructor</item>\n      <item>except</item>\n      <item>export</item>\n      <item>finally</item>\n      <item>import</item>\n      <item>implementation</item>\n      <item>inherited</item>\n      <item>inline</item>\n      <item>interface</item>\n      <item>is</item>\n      <item>module</item>\n      <item>on</item>\n      <item>only</item>\n      <item>otherwise</item>\n      <item>override</item>\n      <item>private</item>\n      <item>property</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>read</item>\n      <item>qualified</item>\n      <item>raise</item>\n      <item>restricted</item>\n      <item>shl</item>\n      <item>shr</item>\n      <item>threadvar</item>\n      <item>try</item>\n      <item>virtual</item>\n      <item>write</item>\n    </list>\n    <list name=\"types\">\n      <item>Integer</item>\n      <item>Cardinal</item>\n      <item>ShortInt</item>\n      <item>SmallInt</item>\n      <item>LongInt</item>\n      <item>Int64</item>\n      <item>Byte</item>\n      <item>Word</item>\n      <item>LongWord</item>\n      <item>DWord</item>\n      <item>QWord</item>\n      <item>Char</item>\n      <item>AnsiChar</item>\n      <item>WideChar</item>\n      <item>Boolean</item>\n      <item>ByteBool</item>\n      <item>WordBool</item>\n      <item>LongBool</item>\n      <item>Single</item>\n      <item>Double</item>\n      <item>Extended</item>\n      <item>Comp</item>\n      <item>Currency</item>\n      <item>Real</item>\n      <item>Real48</item>\n      <item>String</item>\n      <item>ShortString</item>\n      <item>AnsiString</item>\n      <item>WideString</item>\n      <item>Pointer</item>\n      <item>Variant</item>\n      <item>File</item>\n      <item>Text</item>\n    </list>\n    <list name=\"attention\">\n      <item>FIXME</item>\n      <item>TODO</item>\n      <item>NOTE</item>\n      <item>###</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(begin|case|record)(?=(\\{[^}]*(\\}|$)|\\(\\*.*(\\*\\)|$))*([\\s]|$|//))\" insensitive=\"true\" beginRegion=\"Region1\"/>\n        <RegExpr attribute=\"ISO/Delphi Extended\" context=\"#stay\" String=\"\\b((object|class)(?=(\\(.*\\))?(\\{[^}]*(\\}|$)|\\(\\*.*(\\*\\)|$))*;?([\\s]|$|//))|try(?=(\\{[^}]*(\\}|$)|\\(\\*.*(\\*\\)|$))*([\\s]|$|//)))\" insensitive=\"true\" beginRegion=\"Region1\"/>\n\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bend(?=((\\{[^}]*(\\}|$)|\\(\\*.*(\\*\\)|$))*)([.;\\s]|$)|//|$)\" insensitive=\"true\" endRegion=\"Region1\"/>\n\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"ISO/Delphi Extended\" context=\"#stay\" String=\"ISO/Delphi Extended\"/>\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n        <Float attribute=\"Number\" context=\"#stay\"/>\n\t<Int attribute=\"Number\" context=\"#stay\"/>\n\t<DetectChar attribute=\"Hex\" context=\"Hex\" char=\"$\" />\n\t<DetectChar attribute=\"String\" context=\"CharNum\" char=\"#\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&apos;\" />\n        <StringDetect attribute=\"Directive\" context=\"Prep1\" String=\"(*$\"/>\n        <Detect2Chars attribute=\"Directive\" context=\"Prep2\" char=\"{\" char1=\"$\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment1\" char=\"{\"            beginRegion=\"Region2\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment2\" char=\"(\" char1=\"*\" beginRegion=\"Region3\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment3\" char=\"/\" char1=\"/\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"CharNum\">\n\t      <DetectChar attribute=\"Hex\" context=\"HexCharNum\" char=\"$\" />\n\t      <RegExpr String=\"[^0-9]\" context=\"#pop\"/>\n      </context>\n      <context attribute=\"Hex\" lineEndContext=\"#pop\" name=\"HexCharNum\">\n\t      <RegExpr String=\"[^a-fA-F0-9]\" context=\"#pop#pop\"/>\n      </context>\n      <context attribute=\"Hex\" lineEndContext=\"#pop\" name=\"Hex\">\n\t      <RegExpr String=\"[^a-fA-F0-9]\" context=\"#pop\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&apos;\"/>\n      </context>\n      <context attribute=\"Directive\" lineEndContext=\"#pop\" name=\"Prep1\">\n        <Detect2Chars attribute=\"Directive\" context=\"#pop\" char=\"*\" char1=\")\"/>\n      </context>\n      <context attribute=\"Directive\" lineEndContext=\"#pop\" name=\"Prep2\">\n        <DetectChar attribute=\"Directive\" context=\"#pop\" char=\"}\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment1\">\n        <keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n        <DetectChar attribute=\"Comment\" context=\"#pop\" char=\"}\"              endRegion=\"Region2\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment2\">\n        <keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\")\"   endRegion=\"Region3\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment3\">\n        <keyword attribute=\"Alert\" context=\"#stay\" String=\"attention\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"  />\n      <itemData name=\"Hex\"         defStyleNum=\"dsBaseN\"   />\n      <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\" />\n      <itemData name=\"ISO/Delphi Extended\"  defStyleNum=\"dsKeyword\" color=\"#000080\" />\n      <itemData name=\"Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Number\"      defStyleNum=\"dsDecVal\" />\n      <itemData name=\"String\"      defStyleNum=\"dsString\" />\n      <itemData name=\"Directive\"   defStyleNum=\"dsOthers\" />\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\" />\n      <itemData name=\"Alert\"        defStyleNum=\"dsAlert\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"{\" end=\"}\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/perl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n   This file is part of the KDE project\n   Copyright (C) 2001, 2002, 2003, 2004 Anders Lund <anders@alweb.dk>\n\n   This library is free software; you can redistribute it and/or\n   modify it under the terms of the GNU Library General Public\n   License version 2 as published by the Free Software Foundation.\n\n   This library is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n   Library General Public License for more details.\n\n   You should have received a copy of the GNU Library General Public License\n   along with this library; see the file COPYING.LIB.  If not, write to\n   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n   Boston, MA 02110-1301, USA.\n\n   *** NOTICE ***\n   This file is maintained by Anders Lund <anders@alweb.dk>\n   Please do not commit changes without checking with me.\n\n   *** TODO ***\n\n   Work on the comment support in the REPLACEMENT part of s/// - we may support\n   the comment, if the line remainder does not contain the delimiter char.\n\n   Try to support ?PATTERN? (at least in one line, like if \"\\?(?=.*\\?)\" matches).\n\n   parse code behind '<<HEREDELIMITER' as code, or at least ignore it, to eol.\n   Requires the ability to pass the delimiter through a context level.\n\n   find a here delimiter like '*END*' (Shell.pm). Requires that when a regex is\n   inserting a dynamic string, it escapes [*(){}$[]\n\n   support for more regex extensions, such as (?>), (?{}), (?(cond)yes|no)\n\n   Enhance tr/// and y/// support.\n-->\n<language name=\"Perl\" version=\"8\" kateversion=\"2.4\" section=\"Scripts\" extensions=\"*.pl;*.PL;*.pm;*.pl6;*.PL6;*.p6;*.pm6;\" mimetype=\"application/x-perl;text/x-perl\" priority=\"5\" author=\"Anders Lund (anders@alweb.dk)\" license=\"LGPLv2\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>if</item>\n      <item>unless</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>while</item>\n      <item>until</item>\n      <item>for</item>\n      <item>each</item>\n      <item>foreach</item>\n      <item>next</item>\n      <item>last</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>return</item>\n      <item>my</item>\n      <item>our</item>\n      <item>local</item>\n      <item>state</item>\n      <item>BEGIN</item>\n      <item>END</item>\n      <item>package</item>\n      <item>sub</item>\n      <item>do</item>\n      <item>given</item>\n      <item>when</item>\n      <item>default</item>\n      <item>__END__</item>\n      <item>__DATA__</item>\n      <item>__FILE__</item>\n      <item>__LINE__</item>\n      <item>__PACKAGE__</item>\n    </list>\n    <list name=\"operators\">\n      <item>=</item>\n      <item>!=</item>\n      <item>~=</item>\n      <item>+=</item>\n      <item>-=</item>\n      <item>*=</item>\n      <item>/=</item>\n      <item>**=</item>\n      <item>|=</item>\n      <item>||=</item>\n      <item>//=</item>\n      <item>&amp;=</item>\n      <item>&amp;&amp;=</item>\n      <item>?=</item>\n      <item>+</item>\n      <item>-</item>\n      <item>*</item>\n     <!-- <item>/</item>//-->\n      <item>%</item>\n      <item>||</item>\n      <item>//</item>\n      <item>&amp;&amp;</item>\n      <item>|</item>\n      <item>&amp;</item>\n      <item>&lt;</item>\n      <item>&lt;&lt;</item>\n      <item>&gt;</item>\n      <item>&gt;&gt;</item>\n      <item>^</item>\n      <item>-&gt;</item>\n      <item>=&gt;</item>\n      <item>.</item>\n      <item>,</item>\n      <item>;</item>\n      <item>::</item>\n      <item>\\</item>\n      <item>and</item>\n      <item>or</item>\n      <item>not</item>\n      <item>eq</item>\n      <item>ne</item>\n      <item>lt</item>\n      <item>gt</item>\n      <item>le</item>\n      <item>ge</item>\n      <item>cmp</item>\n    </list>\n    <list name=\"functions\">\n      <item>abs</item>\n      <item>accept</item>\n      <item>alarm</item>\n      <item>atan2</item>\n      <item>bind</item>\n      <item>binmode</item>\n      <item>bless</item>\n      <item>caller</item>\n      <item>chdir</item>\n      <item>chmod</item>\n      <item>chomp</item>\n      <item>chop</item>\n      <item>chown</item>\n      <item>chr</item>\n      <item>chroot</item>\n      <item>close</item>\n      <item>closedir</item>\n      <item>connect</item>\n      <item>cos</item>\n      <item>crypt</item>\n      <item>dbmclose</item>\n      <item>dbmopen</item>\n      <item>defined</item>\n      <item>delete</item>\n      <item>die</item>\n      <item>dump</item>\n      <item>endgrent</item>\n      <item>endhostent</item>\n      <item>endnetent</item>\n      <item>endprotoent</item>\n      <item>endpwent</item>\n      <item>endservent</item>\n      <item>eof</item>\n      <item>eval</item>\n      <item>exec</item>\n      <item>exists</item>\n      <item>exit</item>\n      <item>exp</item>\n      <item>fcntl</item>\n      <item>fileno</item>\n      <item>flock</item>\n      <item>fork</item>\n      <item>format</item>\n      <item>formline</item>\n      <item>getc</item>\n      <item>getgrent</item>\n      <item>getgrgid</item>\n      <item>getgrnam</item>\n      <item>gethostbyaddr</item>\n      <item>gethostbyname</item>\n      <item>gethostent</item>\n      <item>getlogin</item>\n      <item>getnetbyaddr</item>\n      <item>getnetbyname</item>\n      <item>getnetent</item>\n      <item>getpeername</item>\n      <item>getpgrp</item>\n      <item>getppid</item>\n      <item>getpriority</item>\n      <item>getprotobyname</item>\n      <item>getprotobynumber</item>\n      <item>getprotoent</item>\n      <item>getpwent</item>\n      <item>getpwnam</item>\n      <item>getpwuid</item>\n      <item>getservbyname</item>\n      <item>getservbyport</item>\n      <item>getservent</item>\n      <item>getsockname</item>\n      <item>getsockopt</item>\n      <item>glob</item>\n      <item>gmtime</item>\n      <item>goto</item>\n      <item>grep</item>\n      <item>hex</item>\n      <item>import</item>\n      <item>index</item>\n      <item>int</item>\n      <item>ioctl</item>\n      <item>join</item>\n      <item>keys</item>\n      <item>kill</item>\n      <item>last</item>\n      <item>lc</item>\n      <item>lcfirst</item>\n      <item>length</item>\n      <item>link</item>\n      <item>listen</item>\n      <item>localtime</item>\n      <item>lock</item>\n      <item>log</item>\n      <item>lstat</item>\n      <item>map</item>\n      <item>mkdir</item>\n      <item>msgctl</item>\n      <item>msgget</item>\n      <item>msgrcv</item>\n      <item>msgsnd</item>\n      <item>no</item>\n      <item>oct</item>\n      <item>open</item>\n      <item>opendir</item>\n      <item>ord</item>\n      <item>pack</item>\n      <item>package</item>\n      <item>pipe</item>\n      <item>pop</item>\n      <item>pos</item>\n      <item>print</item>\n      <item>printf</item>\n      <item>prototype</item>\n      <item>push</item>\n      <item>quotemeta</item>\n      <item>rand</item>\n      <item>read</item>\n      <item>readdir</item>\n      <item>readline</item>\n      <item>readlink</item>\n      <item>recv</item>\n      <item>redo</item>\n      <item>ref</item>\n      <item>rename</item>\n      <item>require</item>\n      <item>reset</item>\n      <item>return</item>\n      <item>reverse</item>\n      <item>rewinddir</item>\n      <item>rindex</item>\n      <item>rmdir</item>\n      <item>scalar</item>\n      <item>seek</item>\n      <item>seekdir</item>\n      <item>select</item>\n      <item>semctl</item>\n      <item>semget</item>\n      <item>semop</item>\n      <item>send</item>\n      <item>setgrent</item>\n      <item>sethostent</item>\n      <item>setnetent</item>\n      <item>setpgrp</item>\n      <item>setpriority</item>\n      <item>setprotoent</item>\n      <item>setpwent</item>\n      <item>setservent</item>\n      <item>setsockopt</item>\n      <item>shift</item>\n      <item>shmctl</item>\n      <item>shmget</item>\n      <item>shmread</item>\n      <item>shmwrite</item>\n      <item>shutdown</item>\n      <item>sin</item>\n      <item>sleep</item>\n      <item>socket</item>\n      <item>socketpair</item>\n      <item>sort</item>\n      <item>splice</item>\n      <item>split</item>\n      <item>sprintf</item>\n      <item>sqrt</item>\n      <item>srand</item>\n      <item>stat</item>\n      <item>study</item>\n      <item>sub</item>\n      <item>substr</item>\n      <item>symlink</item>\n      <item>syscall</item>\n      <item>sysread</item>\n      <item>sysseek</item>\n      <item>system</item>\n      <item>syswrite</item>\n      <item>tell</item>\n      <item>telldir</item>\n      <item>tie</item>\n      <item>time</item>\n      <item>times</item>\n      <item>truncate</item>\n      <item>uc</item>\n      <item>ucfirst</item>\n      <item>umask</item>\n      <item>undef</item>\n      <item>unlink</item>\n      <item>unpack</item>\n      <item>unshift</item>\n      <item>untie</item>\n      <item>use</item>\n      <item>utime</item>\n      <item>values</item>\n      <item>vec</item>\n      <item>wait</item>\n      <item>waitpid</item>\n      <item>wantarray</item>\n      <item>warn</item>\n      <item>write</item>\n    </list>\n    <list name=\"pragmas\">\n      <item>strict</item>\n      <item>english</item>\n      <item>warnings</item>\n      <item>vars</item>\n      <item>subs</item>\n      <item>utf8</item>\n      <item>sigtrap</item>\n      <item>locale</item>\n      <item>open</item>\n      <item>less</item>\n      <item>integer</item>\n      <item>filetest</item>\n      <item>constant</item>\n      <item>bytes</item>\n      <item>diagnostics</item>\n    </list>\n    <contexts>\n      <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"^#!\\/.*\" />\n        <StringDetect attribute=\"Keyword\" context=\"data_handle\" String=\"__DATA__\" firstNonSpace=\"true\" />\n        <StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"__END__\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Keyword\" context=\"sub_name_def\" String=\"\\bsub\\s+\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\" />\n        <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n        <keyword attribute=\"Pragma\" context=\"#stay\" String=\"pragmas\" />\n        <RegExpr attribute=\"Pod\" context=\"pod\" String=\"\\=\\w+(\\s|$)\" column=\"0\" beginRegion=\"POD\"/>\n        <DetectSpaces />\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\"#\" />\n\n        <!-- Numeric values. Note that we have to allow underscores between two digits (thus the creepy regular expressions). -->\n        <RegExpr attribute=\"Hex\" String=\"\\b\\-?0[xX]([0-9a-fA-F]|_[0-9a-fA-F])+\" context=\"slash_safe_escape\"/>\n        <RegExpr attribute=\"Bin\" String=\"\\b\\-?0[bB]([01]|_[01])+\" context=\"slash_safe_escape\"/>\n        <RegExpr attribute=\"Octal\" String=\"\\b\\-?0[1-7]([0-7]|_[0-7])*\" context=\"slash_safe_escape\"/>\n        <RegExpr attribute=\"Float\" String=\"\\b\\-?[0-9]([0-9]|_[0-9])*\\.[0-9]([0-9]|_[0-9])*([eE]\\-?[1-9]([0-9]|_[0-9])*(\\.[0-9]*)?)?\" context=\"slash_safe_escape\"/>\n        <RegExpr attribute=\"Decimal\" String=\"\\b\\-?[1-9]([0-9]|_[0-9])*\\b\" context=\"slash_safe_escape\"/>\n        <Int attribute=\"Decimal\" context=\"slash_safe_escape\" />\n\n        <!-- Allow strings as scalar references (ex: \\'string') (see bug #348765). -->\n        <!-- <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"\\\\([&quot;'])[^\\1]\" /> -->\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"&amp;\" char1=\"'\" /><!-- ??? -->\n        <DetectChar attribute=\"Operator\" context=\"ip_string\" char=\"&quot;\" beginRegion=\"String\" />\n        <DetectChar attribute=\"Operator\" context=\"string\" char=\"'\"  beginRegion=\"String\"/>\n        <DetectChar attribute=\"Operator\" context=\"Backticked\" char=\"`\" />\n\n        <RegExpr attribute=\"Normal Text\" context=\"find_variable\" String=\"(?:[$@]\\S|%([\\w\\{\\+\\-!]|\\^H)|\\*[^\\d\\*{\\$@%=(])\" lookAhead=\"true\" />\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"&lt;[A-Z0-9_]+&gt;\" />\n\n        <RegExpr attribute=\"Operator\" context=\"find_here_document\" String=\"\\s*&lt;&lt;(?=\\w+|\\s*[&quot;'])\" beginRegion=\"HereDocument\" />\n\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"\\s*\\}\\s*/{1,2}\" endRegion=\"Block\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"\\s*[)\\]]\\s*/{1,2}\" />\n\n        <RegExpr attribute=\"Function\" context=\"sub_name_def\" String=\"\\w+::\" />\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"\\w+[=]\" />\n\n        <RegExpr attribute=\"Operator\" context=\"find_quoted\" String=\"\\bq(?=[qwx]?\\s*[^\\w\\s])\" />\n        <RegExpr attribute=\"Operator\" context=\"find_subst\" String=\"\\bs(?=\\s*[^\\w\\s\\]})])\" />\n        <RegExpr attribute=\"Operator\" context=\"tr\" String=\"\\b(?:tr|y)\\s*(?=[^\\w\\s\\]})])\" />\n\n        <RegExpr attribute=\"Operator\" context=\"find_pattern\" String=\"\\b(?:m|qr)(?=\\s*[^\\w\\s\\]})])\" />\n\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\w_]+\\s*//?\\=?\" />\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[&lt;&gt;&quot;':]//?\\=?\" />\n        <!-- Avoid conflicts between operators / and // -->\n        <StringDetect attribute=\"Normal Text\" context=\"#stay\" String=\"//=\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"/\" char1=\"/\" />\n        <DetectChar attribute=\"Operator\" context=\"pattern_slash\" char=\"/\" beginRegion=\"Pattern\" />\n        <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"-[rwxoRWXOeszfdlpSbctugkTBMAC]\\b\" />\n\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Block\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Block\" />\n      </context>\n\n      <!-- ====== quoted construct central ===== -->\n      <context name=\"find_quoted\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <!-- NOTE - qx'not interpolated regex' does not cover newline between \"qr\" and \"'\" -->\n        <RegExpr attribute=\"Operator\" context=\"string_6\" String=\"x\\s*(')\" beginRegion=\"String\" />\n        <AnyChar attribute=\"Operator\" context=\"find_qqx\" String=\"qx\" />\n        <DetectChar attribute=\"Operator\" context=\"find_qw\" char=\"w\" />\n        <DetectChar attribute=\"Operator\" context=\"string_2\" char=\"(\" beginRegion=\"String\" />\n        <DetectChar attribute=\"Operator\" context=\"string_3\" char=\"{\" beginRegion=\"String\" />\n        <DetectChar attribute=\"Operator\" context=\"string_4\" char=\"[\" beginRegion=\"String\" />\n        <DetectChar attribute=\"Operator\" context=\"string_5\" char=\"&lt;\" beginRegion=\"String\" />\n        <RegExpr attribute=\"Operator\" context=\"string_6\" String=\"([^a-zA-Z0-9_\\s[\\]{}()])\" beginRegion=\"String\" />\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*\" /><!-- q[qwx] # == comment, look for the delim on the next line -->\n      </context>\n      <context name=\"find_qqx\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <DetectChar attribute=\"Operator\" context=\"ip_string_2\" char=\"(\" beginRegion=\"String\" />\n        <DetectChar attribute=\"Operator\" context=\"ip_string_3\" char=\"{\" beginRegion=\"String\" />\n        <DetectChar attribute=\"Operator\" context=\"ip_string_4\" char=\"[\" beginRegion=\"String\" />\n        <DetectChar attribute=\"Operator\" context=\"ip_string_5\" char=\"&lt;\" beginRegion=\"String\" />\n        <RegExpr attribute=\"Operator\" context=\"ip_string_6\" String=\"([^a-zA-Z0-9_\\s[\\]{}()])\" beginRegion=\"String\" />\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*\" /><!-- q[qwx] # == comment, look for the delim on the next line -->\n      </context>\n      <context name=\"find_qw\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <DetectChar attribute=\"Operator\" context=\"quote_word_paren\" char=\"(\" beginRegion=\"Wordlist\" />\n        <DetectChar attribute=\"Operator\" context=\"quote_word_brace\" char=\"{\" beginRegion=\"Wordlist\" />\n        <DetectChar attribute=\"Operator\" context=\"quote_word_bracket\" char=\"[\" beginRegion=\"Wordlist\" />\n        <RegExpr attribute=\"Operator\" context=\"quote_word\" String=\"([^a-zA-Z0-9_\\s[\\]{}()])\" beginRegion=\"Wordlist\" />\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*\" /><!-- q[qwx] # == comment, look for the delim on the next line -->\n      </context>\n\n      <!-- ====== Contexts for strings ===== -->\n      <context name=\"ipstring_internal\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <DetectIdentifier />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\c[^\\s\\\\]\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\g(\\{(\\w+|\\-\\d+)\\}|\\d+)\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\k(\\{\\w+\\}|&lt;\\w+&gt;|'\\w+')\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\N\\{[^\\{\\}]*\\}\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\o\\{[0-7]+\\}\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\[pP](\\{\\w+\\}|P)\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\x([0-9a-fA-F]{2}|\\{[0-9a-fA-F]+\\})\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\[0-7]{3}\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\\\[1aAbBdDeEfFGhHKlLnNQrRsStuUvVwWXzZ]\" />\n        <RegExpr attribute=\"String (interpolated)\" context=\"#stay\" String=\"\\\\.\" />\n        <RegExpr attribute=\"Normal Text\" context=\"find_variable_unsafe\" String=\"(?:[\\$@]\\S|%([\\w\\{\\-\\+!]|\\^H))\" lookAhead=\"true\" />\n      </context>\n      <context name=\"ip_string\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Operator\" context=\"#pop\" char=\"&quot;\" endRegion=\"String\"/>\n        <IncludeRules context=\"ipstring_internal\" />\n      </context>\n      <context name=\"ip_string_2\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <RangeDetect attribute=\"String (interpolated)\" context=\"#stay\" char=\"(\" char1=\")\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\")\" endRegion=\"String\" />\n        <IncludeRules context=\"ipstring_internal\" />\n      </context>\n      <context name=\"ip_string_3\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <RangeDetect attribute=\"String (interpolated)\" context=\"#stay\" char=\"{\" char1=\"}\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"String\" />\n        <IncludeRules context=\"ipstring_internal\" />\n      </context>\n      <context name=\"ip_string_4\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <RangeDetect attribute=\"String (interpolated)\" context=\"#stay\" char=\"[\" char1=\"]\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\"]\" endRegion=\"String\" />\n        <IncludeRules context=\"ipstring_internal\" />\n      </context>\n      <context name=\"ip_string_5\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <RangeDetect attribute=\"String (interpolated)\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\"&gt;\" endRegion=\"String\" />\n        <IncludeRules context=\"ipstring_internal\" />\n      </context>\n      <context name=\"ip_string_6\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"String (interpolated)\" context=\"#stay\" String=\"\\%1\" dynamic=\"true\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\"1\" dynamic=\"true\"  endRegion=\"String\"/>\n        <IncludeRules context=\"ipstring_internal\" />\n      </context>\n\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"'\" />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop\" char=\"'\" endRegion=\"String\" />\n      </context>\n      <context name=\"string_2\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\")\" />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <RangeDetect attribute=\"String\" context=\"#stay\" char=\"(\" char1=\")\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop\" char=\")\" endRegion=\"String\" />\n      </context>\n      <context name=\"string_3\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"}\" />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <RangeDetect attribute=\"String\" context=\"#stay\" char=\"{\" char1=\"}\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop\" char=\"}\" endRegion=\"String\" />\n      </context>\n      <context name=\"string_4\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"]\" />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <RangeDetect attribute=\"String\" context=\"#stay\" char=\"[\" char1=\"]\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop\" char=\"]\" endRegion=\"String\" />\n      </context>\n      <context name=\"string_5\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"&lt;\" />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&gt;\" />\n        <RangeDetect attribute=\"String\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"String\" />\n      </context>\n      <context name=\"string_6\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"String Special Character\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <RegExpr attribute=\"String Special Character\" context=\"#stay\" String=\"\\%1\" dynamic=\"true\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop\" char=\"1\" dynamic=\"true\" endRegion=\"String\" />\n      </context>\n\n      <!-- ====== contexts for  s/// ====== -->\n      <context name=\"find_subst\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*\" /><!-- s # == comment, look for the delim on the next line -->\n        <DetectChar attribute=\"Operator\" context=\"subst_curlybrace_pattern\" char=\"{\" beginRegion=\"Pattern\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_paren_pattern\" char=\"(\" beginRegion=\"Pattern\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_bracket_pattern\" char=\"[\" beginRegion=\"Pattern\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_sq_pattern\" char=\"'\" beginRegion=\"Pattern\" />\n        <RegExpr attribute=\"Operator\" context=\"subst_slash_pattern\" String=\"([^\\w\\s[\\]{}()])\" beginRegion=\"Pattern\" />\n      </context>\n\n      <!-- Fully parse s {} {}.\n           This means that\n           - comments are legal between PATTERN and REPLACEMENT\n           - REPLACEMENT can contain resursive {} blocks -->\n      <context name=\"subst_curlybrace_pattern\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*$\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_curlybrace_middle\" char=\"}\" endRegion=\"Pattern\" />\n        <!-- Recursive brackets. Avoid closing brackets incorrectly (bug #364866). -->\n        <DetectChar attribute=\"Pattern\" context=\"subst_curlybrace_pattern_recursive\" char=\"{\" />\n      </context>\n      <context name=\"subst_curlybrace_middle\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"#.*$\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_curlybrace_replace\" char=\"{\" beginRegion=\"Replacement\" />\n      </context>\n      <context name=\"subst_curlybrace_replace\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"ipstring_internal\" />\n        <DetectChar attribute=\"Normal Text\" context=\"subst_curlybrace_replace_recursive\" char=\"{\" beginRegion=\"Block\" />\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop#pop#pop\" String=\"\\}[cegimosx]*\" endRegion=\"Replacement\" />\n      </context>\n      <context name=\"subst_curlybrace_replace_recursive\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\" >\n        <DetectChar attribute=\"String (interpolated)\" context=\"subst_curlybrace_replace_recursive\" char=\"{\" beginRegion=\"Block\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"Block\" />\n        <IncludeRules context=\"ipstring_internal\" />\n      </context>\n      <context name=\"subst_curlybrace_pattern_recursive\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Pattern\" context=\"#pop\" char=\"}\" />\n        <IncludeRules context=\"subst_curlybrace_pattern\" />\n      </context>\n\n      <context name=\"subst_paren_pattern\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*$\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_paren_replace\" char=\")\" endRegion=\"Pattern\" />\n        <!-- Round brackets of RegExp pattern inside -->\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"subst_paren_pattern_internal_recursive\" char=\"(\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n      </context>\n      <context name=\"subst_paren_replace\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"ipstring_internal\" />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"(\" beginRegion=\"Replacement\" />\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop#pop\" String=\"\\)[cegimosx]*\" endRegion=\"Replacement\" />\n      </context>\n      <context name=\"subst_paren_pattern_internal_recursive\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"subst_paren_pattern\" />\n      </context>\n\n      <context name=\"subst_bracket_pattern\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*$\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_bracket_replace\" char=\"]\" endRegion=\"Pattern\" />\n      </context>\n      <context name=\"subst_bracket_replace\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"ipstring_internal\" />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"[\" beginRegion=\"Replacement\" />\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop#pop\" String=\"\\][cegimosx]*\" endRegion=\"Replacement\" />\n      </context>\n\n      <context name=\"subst_slash_pattern\" attribute=\"Pattern\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\$(?=%1)\" dynamic=\"true\" />\n        <RegExpr attribute=\"Operator\" context=\"subst_slash_replace\" String=\"(%1)\" dynamic=\"true\" endRegion=\"Pattern\" beginRegion=\"Replacement\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n      </context>\n      <context name=\"subst_slash_replace\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop#pop\" String=\"%1[cegimosx]*\" dynamic=\"true\" endRegion=\"Replacement\" />\n        <IncludeRules context=\"ipstring_internal\" />\n\n      </context>\n\n      <context name=\"subst_sq_pattern\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*$\" />\n        <IncludeRules context=\"regex_pattern_internal\" />\n        <DetectChar attribute=\"Operator\" context=\"subst_sq_replace\" char=\"'\" endRegion=\"Pattern\" beginRegion=\"Pattern\" />\n      </context>\n      <context name=\"subst_sq_replace\" attribute=\"String\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop#pop\" String=\"'[cegimosx]*\" endRegion=\"Replacement\" />\n      </context>\n\n      <context name=\"tr\" attribute=\"Pattern\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n        <RegExpr attribute=\"Pattern\" context=\"#pop\" String=\"\\([^)]*\\)\\s*\\(?:[^)]*\\)\" />\n        <RegExpr attribute=\"Pattern\" context=\"#pop\" String=\"\\{[^}]*\\}\\s*\\{[^}]*\\}\" />\n        <RegExpr attribute=\"Pattern\" context=\"#pop\" String=\"\\[[^]]*\\]\\s*\\[[^\\]]*\\]\" />\n        <RegExpr attribute=\"Pattern\" context=\"#pop\" String=\"([^a-zA-Z0-9_\\s[\\]{}()]).*\\1.*\\1\" minimal=\"true\"/>\n      </context>\n\n      <!-- ====== PATTERNs ====== -->\n      <context name=\"find_pattern\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s+#.*\" /><!-- s # == comment, look for the delim on the next line -->\n        <DetectChar attribute=\"Operator\" context=\"pattern_brace\" char=\"{\" beginRegion=\"Pattern\" />\n        <DetectChar attribute=\"Operator\" context=\"pattern_paren\" char=\"(\" beginRegion=\"Pattern\" />\n        <DetectChar attribute=\"Operator\" context=\"pattern_bracket\" char=\"[\" beginRegion=\"Pattern\" />\n        <DetectChar attribute=\"Operator\" context=\"pattern_sq\" char=\"'\" beginRegion=\"Pattern\" />\n        <RegExpr attribute=\"Operator\" context=\"pattern\" String=\"([^\\w\\s])\" beginRegion=\"Pattern\" />\n      </context>\n      <context name=\"pattern_slash\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\$(?=/)\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n        <RegExpr attribute=\"Operator\" context=\"#pop\" String=\"/[cgimosx]*\" endRegion=\"Pattern\" />\n      </context>\n      <context name=\"pattern\" attribute=\"Pattern\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\$(?=%1)\" dynamic=\"true\" />\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop\" String=\"%1[cgimosx]*\" dynamic=\"true\" endRegion=\"Pattern\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\$(?=\\%1)\" dynamic=\"true\" />\n      </context>\n      <context name=\"pattern_brace\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop\" String=\"\\}[cgimosx]*\" endRegion=\"Pattern\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n        <!-- Recursive brackets. Avoid closing brackets incorrectly. -->\n        <DetectChar attribute=\"Pattern\" context=\"pattern_brace_recursive\" char=\"{\" />\n      </context>\n      <context name=\"pattern_brace_recursive\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Pattern\" context=\"#pop\" char=\"}\" />\n        <IncludeRules context=\"pattern_brace\" />\n      </context>\n      <context name=\"pattern_bracket\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop\" String=\"\\][cgimosx]*\" endRegion=\"Pattern\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n      </context>\n      <context name=\"pattern_paren\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop\" String=\"\\)[cgimosx]*\" endRegion=\"Pattern\" />\n        <!-- Round brackets of RegExp pattern inside -->\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"pattern_paren_internal_recursive\" char=\"(\" />\n        <IncludeRules context=\"regex_pattern_internal_ip\" />\n      </context>\n      <context name=\"pattern_paren_internal_recursive\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"pattern_paren\" />\n      </context>\n      <context name=\"pattern_sq\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Operator\" context=\"#pop#pop\" String=\"'[cgimosx]*\" endRegion=\"Pattern\" />\n        <IncludeRules context=\"regex_pattern_internal\" />\n      </context>\n\n      <!-- rules internal stuff wrt regex patterns -->\n      <context name=\"regex_pattern_internal_rules_1\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"#.*$\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\c[^\\s\\\\]\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\g(\\{(\\w+|\\-\\d+)\\}|\\d+)\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\k(\\{\\w+\\}|&lt;\\w+&gt;|'\\w+')\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\N\\{[^\\{\\}]*\\}\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\o\\{[0-7]+\\}\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\[pP](\\{\\w+\\}|P)\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\x([0-9a-fA-F]{2}|\\{[0-9a-fA-F]+\\})\" />\n        <RegExpr attribute=\"Pattern Character Class\" context=\"#stay\" String=\"\\\\[anDdSsWw]\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\\\[ABbEGLlNUuQdQZz]\" /> <!-- Also?: efFhHKrRtvVX -->\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\\\[\\d]+\" />\n        <RegExpr attribute=\"Pattern\" context=\"#stay\" String=\"\\\\.\" />\n      </context>\n      <context name=\"regex_pattern_internal_rules_2\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Pattern Internal Operator\" context=\"pat_ext\" char=\"(\" char1=\"?\" />\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"pat_char_class\" char=\"[\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"[()?^*+|]\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\{[\\d, ]+\\}\" />\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"#stay\" char=\"$\" />\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\"\\s{3,}#.*$\" />\n      </context>\n      <context name=\"regex_pattern_internal\" attribute=\"Pattern\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"regex_pattern_internal_rules_1\" />\n        <IncludeRules context=\"regex_pattern_internal_rules_2\" />\n      </context>\n      <context name=\"regex_pattern_internal_ip\" attribute=\"Pattern\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"regex_pattern_internal_rules_1\" />\n        <!-- NOTE the below means that the special variables $' $], $} and $> are not supported\n             within interpolated PATTERNs (apart from $(, $) and ${ and $| not supported by perl).\n             This is because perl considers\n             s{foo$} {bar} OK as well as s{foo$}} {bar}, and detecting that is a huge work overload\n             for something that is unlikely to happen. -->\n        <RegExpr attribute=\"Data Type\" context=\"find_variable_unsafe\" String=\"[$@][^]\\s{}()|&gt;']\" lookAhead=\"true\" />\n        <IncludeRules context=\"regex_pattern_internal_rules_2\" />\n      </context>\n      <context name=\"pat_ext\" attribute=\"Pattern Internal Operator\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"\\#[^)]*\" />\n        <RegExpr attribute=\"Pattern Internal Operator\" context=\"#pop\" String=\"[:=!&gt;&lt;]+\" />\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"#pop\" char=\")\" />\n      </context>\n      <context name=\"pat_char_class\" attribute=\"Pattern Character Class\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"#stay\" char=\"^\" />\n        <Detect2Chars attribute=\"Pattern Character Class\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <Detect2Chars attribute=\"Pattern Character Class\" context=\"#stay\" char=\"\\\" char1=\"]\" />\n        <RegExpr attribute=\"Pattern Character Class\" context=\"#stay\" String=\"\\[:\\^?[a-z]+:\\]\" />\n        <DetectChar attribute=\"Pattern Internal Operator\" context=\"#pop\" char=\"]\" />\n      </context>\n\n      <!-- ====== Variables ====== -->\n      <context name=\"find_variable\" attribute=\"Data Type\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n        <RegExpr attribute=\"Data Type\" context=\"var_detect\" String=\"\\$[#_][\\w_]\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"\\$[0-9]+\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"[@\\$](?:[\\+\\-_]\\B|ARGV\\b|INC\\b)\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"[%\\$](?:INC\\b|ENV\\b|SIG\\b)\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"\\$\\^[A-Z_\\]\\[\\^\\?\\\\]\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"%([\\-\\+!]|\\^H)\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect\" String=\"\\$\\$[\\$\\w_]\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect\" String=\"\\$+::\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"\\$[^a-zA-Z0-9\\s{][A-Z]?\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect\" String=\"[\\$@%]\\{\\^?[\\w_]+\\}\" />\n        <AnyChar attribute=\"Data Type\" context=\"var_detect\" String=\"$@%\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect\" String=\"\\*[a-zA-Z_]+\" />\n        <!-- Do not highlight brackets after *, Ex: (... @*) (see bug #391577) -->\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\*[^a-zA-Z0-9\\s\\{\\(\\)\\[\\]\\}][A-Z]?\" />\n        <!-- this should be a rare case! -->\n        <AnyChar attribute=\"Operator\" context=\"#pop\" String=\"$@%*\" />\n      </context>\n      <!-- This does not check fo a trailing slash, for usage in strings. -->\n      <context name=\"find_variable_unsafe\" attribute=\"Data Type\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n        <RegExpr attribute=\"Data Type\" context=\"var_detect_unsafe\" String=\"\\$[#_][\\w_]\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect_unsafe\" String=\"\\$[0-9]+\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect_unsafe\" String=\"[@\\$](?:[\\+\\-_]\\B|ARGV\\b|INC\\b)\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect_unsafe\" String=\"[%\\$](?:INC\\b|ENV\\b|SIG\\b)\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"\\$\\^[A-Z_\\]\\[\\^\\?\\\\]\" />\n        <RegExpr attribute=\"Special Variable\" context=\"var_detect\" String=\"%([\\-\\+!]|\\^H)\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect_unsafe\" String=\"\\$\\$[\\$\\w_]\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect_unsafe\" String=\"\\$+::\" />\n        <RegExpr attribute=\"Special Variable\" context=\"#stay\" String=\"\\$[^a-zA-Z0-9\\s{][A-Z]?\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect_unsafe\" String=\"[\\$@%]\\{\\^?[\\w_]+\\}\" />\n        <AnyChar attribute=\"Data Type\" context=\"var_detect_unsafe\" String=\"$@%\" />\n        <RegExpr attribute=\"Data Type\" context=\"var_detect_unsafe\" String=\"\\*\\w+\" />\n        <AnyChar attribute=\"Operator\" context=\"#pop\" String=\"$@%*\" />\n      </context>\n      <context name=\"var_detect\"  attribute=\"Data Type\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <IncludeRules context=\"var_detect_rules\" />\n        <IncludeRules context=\"slash_safe_escape\" />\n      </context>\n      <context name=\"var_detect_unsafe\"  attribute=\"Data Type\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <IncludeRules context=\"var_detect_rules\" />\n      </context>\n      <context name=\"var_detect_rules\" attribute=\"Data Type\" lineEndContext=\"#pop#pop\" >\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"[\\w_]+\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\":\" char1=\":\" />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"'\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"-\" char1=\"&gt;\" />\n        <!-- safe with operator / -->\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"+\" char1=\"+\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"-\" char1=\"-\" />\n      </context>\n\n\n      <!-- ====== Word lists ====== -->\n      <context name=\"quote_word\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <DetectSpaces />\n        <DetectIdentifier />\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"\\\\%1\" dynamic=\"true\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\"1\" dynamic=\"true\" endRegion=\"Wordlist\" />\n      </context>\n      <context name=\"quote_word_paren\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"\\\" char1=\")\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\")\" endRegion=\"Wordlist\" />\n      </context>\n      <context name=\"quote_word_brace\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"\\\" char1=\"}\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"Wordlist\" />\n      </context>\n      <context name=\"quote_word_bracket\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectIdentifier />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\"\\\" char1=\"]\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" char=\"]\" endRegion=\"Wordlist\" />\n      </context>\n\n      <!-- ====== Here Documents ====== -->\n      <context name=\"find_here_document\" attribute=\"Normal Text\" lineEndContext=\"#pop\" >\n        <RegExpr attribute=\"Keyword\" context=\"here_document\" String=\"(\\w+)\\s*;?\" />\n        <RegExpr attribute=\"Keyword\" context=\"here_document\" String=\"\\s*&quot;([^&quot;]+)&quot;\\s*;?\" />\n        <RegExpr attribute=\"Keyword\" context=\"here_document\" String=\"\\s*`([^`]+)`\\s*;?\" />\n        <RegExpr attribute=\"Keyword\" context=\"here_document_dumb\" String=\"\\s*'([^']+)'\\s*;?\" />\n      </context>\n      <context name=\"here_document\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1\\b\" column=\"0\" dynamic=\"true\" endRegion=\"HereDocument\"/>\n        <RegExpr attribute=\"Keyword\" context=\"here_document\" String=\"\\=\\s*&lt;&lt;\\s*[&quot;']?([A-Z0-9_\\-]+)[&quot;']?\" beginRegion=\"HEREDoc\" />\n        <IncludeRules context=\"ipstring_internal\" />\n        <DetectSpaces />\n      </context>\n      <context name=\"here_document_dumb\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1\" column=\"0\" dynamic=\"true\" endRegion=\"HereDocument\"/>\n        <DetectSpaces />\n        <DetectIdentifier />\n      </context>\n\n      <!-- ====== Misc ====== -->\n      <context name=\"data_handle\" attribute=\"Data\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Pod\" context=\"pod\" String=\"\\=(?:head[1-6]|over|back|item|for|begin|end|pod)\\s+.*\" column=\"0\" beginRegion=\"POD\"/>\n        <StringDetect attribute=\"Keyword\" context=\"normal\" String=\"__END__\" firstNonSpace=\"true\" />\n      </context>\n\n      <context name=\"Backticked\" attribute=\"String (interpolated)\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"ipstring_internal\"/>\n        <DetectChar attribute=\"Operator\" context=\"#pop\" char=\"`\"/>\n      </context>\n\n      <context name=\"slash_safe_escape\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"\\s*\\}\\s*/{1,2}\" endRegion=\"Block\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"\\s*[)\\]]?\\s*/{1,2}\" />\n        <keyword attribute=\"Keyword\" context=\"#pop\" String=\"keywords\" /><!-- wonder why??? -->\n      </context>\n\n      <context name=\"sub_name_def\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\w+\" />\n        <RegExpr attribute=\"Normal Text\" context=\"find_variable\" String=\"\\$\\S\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Normal Text\" context=\"sub_arg_definition\" String=\"\\s*\\(\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\":\" char1=\":\" />\n      </context>\n\n      <context name=\"sub_arg_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n        <AnyChar attribute=\"Data Type\" context=\"#stay\" String=\"*$@%\" />\n        <AnyChar attribute=\"Normal Text\" context=\"#stay\" String=\"&amp;\\[];\" />\n        <DetectChar attribute=\"Normal Text\" context=\"slash_safe_escape\" char=\")\" />\n      </context>\n\n      <context name=\"pod\" attribute=\"Pod\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectIdentifier />\n        <RegExpr attribute=\"Pod\" context=\"#stay\" String=\"\\=(?:head[1-6]|over|back|item|for|begin|end|pod)\\s*.*\" column=\"0\" beginRegion=\"POD\" endRegion=\"POD\"/>\n        <RegExpr attribute=\"Pod\" context=\"#pop\" String=\"\\=cut.*$\" column=\"0\" endRegion=\"POD\"/>\n      </context>\n\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Pragma\"                    defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Function\"                  defStyleNum=\"dsFunction\" />\n      <itemData name=\"Operator\"                  defStyleNum=\"dsKeyword\" color=\"#008000\"/>\n      <itemData name=\"Data Type\"                 defStyleNum=\"dsDataType\" />\n      <itemData name=\"Special Variable\"          defStyleNum=\"dsDataType\" color=\"#C00000\" selColor=\"#C00000\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Decimal\"                   defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Octal\"                     defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Hex\"                       defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Bin\"                       defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Float\"                     defStyleNum=\"dsFloat\" />\n      <itemData name=\"String\"                    defStyleNum=\"dsString\" color=\"#FF6C6C\" selColor=\"#FF6C6C\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"String (interpolated)\"     defStyleNum=\"dsString\" />\n      <itemData name=\"String Special Character\"  defStyleNum=\"dsChar\" />\n      <itemData name=\"Pattern\"                   defStyleNum=\"dsOthers\" />\n      <itemData name=\"Pattern Internal Operator\" defStyleNum=\"dsChar\" />\n      <itemData name=\"Pattern Character Class\"   defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Data\"                      defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n      <itemData name=\"Pod\"                       defStyleNum=\"dsComment\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pgn.xml",
    "content": "<!--\n\n    ====================================================================\n    PGN - Portable Game Notation syntax highlighting file for the\n    KDE editors Kate and Kwrite\n    ====================================================================\n    // PGN - Portable Game Notation highlighter\n    // To write your chess (and others) games\n    // written by Ruben Carlo Benante. - dr.beco@gmail.com\n    // 14/oct/2005, v.2.0\n\n    - Know bugs:\n    * None.\n-->\n<language name=\"PGN\" version=\"4\" kateversion=\"2.3\" section=\"Other\" extensions=\"*.pgn;*.PGN\" priority=\"5\" mimetype=\"\" casesensitive=\"1\" author=\"Ruben Carlo Benante (dr.beco@gmail.com)\" license=\"GPL\">\n<highlighting>\n  <list name=\"keywords_list\">\n    <item>Event</item>\n    <item>Site</item>\n    <item>Date</item>\n    <item>Round</item>\n    <item>White</item>\n    <item>Black</item>\n    <item>Result</item>\n    <item>ECO</item>\n    <item>Annotator</item>\n    <item>PlyCount</item>\n    <item>EventDate</item>\n    <item>EventCountry</item>\n    <item>SourceDate</item>\n    <item>WhiteTitle</item>\n    <item>BlackTitle</item>\n    <item>FM</item>\n    <item>IM</item>\n    <item>GM</item>\n    <item>WhiteElo</item>\n    <item>BlackElo</item>\n    <item>WhiteNA</item>\n    <item>BlackNA</item>\n    <item>WhiteType</item>\n    <item>BlackType</item>\n    <item>program</item>\n    <item>human</item>\n    <item>TimeControl</item>\n    <item>FEN</item>\n    <item>Termination</item>\n    <item>abandoned</item>\n    <item>adjudication</item>\n    <item>death</item>\n    <item>emergency</item>\n    <item>normal</item>\n    <item>rules</item>\n    <item>infraction</item>\n    <item>time</item>\n    <item>forfeit</item>\n    <item>unterminated</item>\n    <item>Mode</item>\n    <item>OTB</item>\n    <item>PM</item>\n    <item>EM</item>\n    <item>ICS</item>\n    <item>TC</item>\n    </list>\n  <contexts>\n    <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n      <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords_list\"/>\n      <AnyChar attribute=\"Piece\" context=\"#stay\" String=\"KQBNRPODCTA\"/>\n      <DetectChar attribute=\"Commentp\" context=\"Comment_p\" char=\"(\"/>\n      <DetectChar attribute=\"Commentc\" context=\"Comment_c\" char=\"{\"/>\n      <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      <RegExpr attribute=\"Symbol\" context=\"#stay\" String=\"(\\$\\d*|1\\-0|0\\-1|1/2\\-1/2|\\*|#|\\+|\\?|!|=|x|\\+\\-|\\-\\+)\"/>\n      <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\d*(\\.|\\.\\.\\.)( |$)\"/>\n    </context>\n    <context attribute=\"Commentp\" lineEndContext=\"#stay\" name=\"Comment_p\">\n      <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      <DetectChar attribute=\"Commentp\" context=\"Comment_p\" char=\"(\"/>\n      <DetectChar attribute=\"Commentc\" context=\"Comment_c\" char=\"{\"/>\n      <DetectChar attribute=\"Commentp\" context=\"#pop\" char=\")\" endRegion=\"Comment_p\"/>\n    </context>\n      <context attribute=\"Commentc\" lineEndContext=\"#stay\" name=\"Comment_c\">\n      <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      <DetectChar attribute=\"Commentp\" context=\"Comment_p\" char=\"(\"/>\n      <DetectChar attribute=\"Commentc\" context=\"Comment_c\" char=\"{\"/>\n      <DetectChar attribute=\"Commentc\" context=\"#pop\" char=\"}\" endRegion=\"Comment_c\"/>\n    </context>\n    <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n      <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n    </context>\n  </contexts>\n  <itemDatas>\n    <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n    <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" bold=\"true\"/>\n    <itemData name=\"Piece\" defStyleNum=\"dsNormal\" color=\"#0095FF\" bold=\"1\" italic=\"0\"/>\n    <itemData name=\"Commentp\" defStyleNum=\"dsComment\"/>\n    <itemData name=\"Commentc\" defStyleNum=\"dsComment\" bold=\"true\"/>\n    <itemData name=\"String\" defStyleNum=\"dsString\" bold=\"false\"/>\n    <itemData name=\"Number\" defStyleNum=\"dsDecVal\" color=\"#bb00bb\"/>\n    <itemData name=\"Symbol\" defStyleNum=\"dsOthers\" color=\"#00bb00\"/>\n  </itemDatas>\n</highlighting>\n<general>\n  <comments>\n    <comment name=\"multiLine\" start=\"(\" end=\")\"/>\n    <comment name=\"multiLine\" start=\"{\" end=\"}\"/>\n  </comments>\n  <keywords casesensitive=\"0\" weakDeliminator=\"\"/>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/php.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\nChanges:\n[ Version 1.50 (2018-12-30) ]\n- Updated constants, functions and classes according to latest (~PHP 7.3) online documentation\n\n[ Version 1.47 (2015-03-24) ]\n- added support for binary integer literals\n\n[ Version 1.46 (2015-03-02) ]\n- added yield keyword\n\n[ Version 1.43 (2013-10-11) ]\n- added missing constants for sorting\n\n[ Version 1.42 (2010-05-09) ]\n- fix handling of paamayim nekudotayim in ternary / case context, which used to\n  lead to improper region starts\n\n[ Version 1.41 (2009-08-26) ]\n- Add codefolding to heredocs\n\n[ Version 1.40 (2009-08-26) ]\n- Use Javascript, HTML, CSS or MySQL highlighting in heredoc statements with\n  with names like e.g. <<<HTML or <<<EOHTML\n\n  Bug: 118668\n\n[ Version 1.39 (2009-08-18) ]\n- Don't add subcontexts when using the paamayim nekudotayim token.\n\n[ Version 1.38 (2009-07-23) ]\n\n- Add support for alternate block syntax, see bug #103257. (James Sleeman)\n\n[ Version 1.37 (2009-07-18) ]\n\n- Remove folding on open and close php to improve embedded html handling, see bug #103257, #143022. (James Sleeman)\n\n[ Version 1.36 (2009-07-10) ]\n\n- spelling-awareness\n\n[ Version 1.35 (2009-04-08) ]\n\n- fix uppercase <?PHP\n- add missing magic constants\n\n[ Version 1.32 (2007-12-02) ]\n\n- When leaving PHP context, make sure to close all brace regions (braces open a nested phpsource context for this purpose). This is a WORKAROUND for bug #143022 until feature #103257 is available.\n\n[ Version 1.31 (2007-11-29) ]\n\n- Add support for backtick operator. This has basically the same syntax as double quotes, so the two share most rules.\n\n[ Version 1.28 (2006-11-02) ]\n\n- Moved the special method names to a dedicated section (the coloration will default to the coloration of functions, but it can be customized independently, to revert to the previous coloration styles, that is, black, and bold).\n\n[ Version 1.27 (2006-11-01) ]\n\n- Added new special method names, from PHP 5.\n- Moved the special method names to the function list.\n\n[  Version 1.26 (2006-01-26) ]\n\n- Added alternative syntax control structures, and named logical operators (\"and\", \"or\", and \"xor\") (by Nicola Gigante).\n\n-->\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n  <!ENTITY types \"int|integer|bool|boolean|float|double|real|string|array|object\">\n]>\n\n<language name=\"PHP/PHP\" indenter=\"cstyle\" version=\"10\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"\" priority=\"5\" mimetype=\"\" hidden=\"true\">\n  <highlighting>\n    <!-- https://secure.php.net/manual/en/reserved.keywords.php -->\n    <list name=\"control structures\">\n      <!-- PHP 5.6 -->\n      <item>case</item>\n      <item>default</item>\n      <item>if</item>\n      <item>else</item>\n      <item>elseif</item>\n      <item>while</item>\n      <item>do</item>\n      <item>for</item>\n      <item>foreach</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>switch</item>\n      <item>return</item>\n      <item>require</item>\n      <item>include</item>\n      <item>endif</item>\n      <item>endwhile</item>\n      <item>endfor</item>\n      <item>endforeach</item>\n      <item>endswitch</item>\n    </list>\n\n    <!-- https://secure.php.net/manual/en/reserved.keywords.php -->\n    <!-- https://secure.php.net/manual/en/reserved.other-reserved-words.php -->\n    <list name=\"keywords\">\n      <!-- PHP 5.6 -->\n      <item>__halt_compiler</item>\n      <item>abstract</item>\n      <item>and</item>\n      <item>array</item>\n      <item>as</item>\n      <item>callable</item>\n      <item>catch</item>\n      <item>class</item>\n      <item>clone</item>\n      <item>const</item>\n      <item>declare</item>\n      <item>die</item>\n      <item>echo</item>\n      <item>empty</item>\n      <item>enddeclare</item>\n      <item>eval</item>\n      <item>exit</item>\n      <item>extends</item>\n      <item>final</item>\n      <item>finally</item>\n      <item>function</item>\n      <item>global</item>\n      <item>goto</item>\n      <item>implements</item>\n      <item>include</item>\n      <item>include_once</item>\n      <item>instanceof</item>\n      <item>insteadof</item>\n      <item>interface</item>\n      <item>isset</item>\n      <item>list</item>\n      <item>namespace</item>\n      <item>new</item>\n      <item>or</item>\n      <item>print</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>require</item>\n      <item>require_once</item>\n      <item>static</item>\n      <item>throw</item>\n      <item>trait</item>\n      <item>try</item>\n      <item>unset</item>\n      <item>use</item>\n      <item>var</item>\n      <item>xor</item>\n      <item>yield</item>\n\n      <!-- PHP 7.0 -->\n      <item>bool</item>\n      <item>false</item>\n      <item>float</item>\n      <item>int</item>\n      <item>mixed</item>\n      <item>null</item>\n      <item>numeric</item>\n      <item>object</item>\n      <item>resource</item>\n      <item>string</item>\n      <item>true</item>\n\n      <!-- PHP 7.1 -->\n      <item>iterable</item>\n      <item>void</item>\n    </list>\n\n    <!-- https://secure.php.net/manual/en/reserved.keywords.php -->\n    <!-- https://secure.php.net/manual/en/reserved.constants.php -->\n    <list name=\"constants\">\n      <!-- PHP 5.6 (Compile-Time Constants) -->\n      <item>__CLASS__</item>\n      <item>__COMPILER_HALT_OFFSET__</item>\n      <item>__DIR__</item>\n      <item>__FILE__</item>\n      <item>__FUNCTION__</item>\n      <item>__LINE__</item>\n      <item>__METHOD__</item>\n      <item>__NAMESPACE__</item>\n      <item>__TRAIT__</item>\n\n      <!-- PHP 5.6 (Core Pre-Defined Constants ) -->\n      <item>PHP_VERSION</item>\n      <item>PHP_MAJOR_VERSION</item>\n      <item>PHP_MINOR_VERSION</item>\n      <item>PHP_RELEASE_VERSION</item>\n      <item>PHP_VERSION_ID</item>\n      <item>PHP_EXTRA_VERSION</item>\n      <item>PHP_ZTS</item>\n      <item>PHP_DEBUG</item>\n      <item>PHP_MAXPATHLEN</item>\n      <item>PHP_OS</item>\n      <item>PHP_SAPI</item>\n      <item>PHP_EOL</item>\n      <item>PHP_INT_MAX</item>\n      <item>PHP_INT_SIZE</item>\n      <item>DEFAULT_INCLUDE_PATH</item>\n      <item>PEAR_INSTALL_DIR</item>\n      <item>PEAR_EXTENSION_DIR</item>\n      <item>PHP_EXTENSION_DIR</item>\n      <item>PHP_PREFIX</item>\n      <item>PHP_BINDIR</item>\n      <item>PHP_BINARY</item>\n      <item>PHP_MANDIR</item>\n      <item>PHP_LIBDIR</item>\n      <item>PHP_DATADIR</item>\n      <item>PHP_SYSCONFDIR</item>\n      <item>PHP_LOCALSTATEDIR</item>\n      <item>PHP_CONFIG_FILE_PATH</item>\n      <item>PHP_CONFIG_FILE_SCAN_DIR</item>\n      <item>PHP_SHLIB_SUFFIX</item>\n      <item>PHP_FD_SETSIZE</item>\n      <item>E_ERROR</item>\n      <item>E_WARNING</item>\n      <item>E_PARSE</item>\n      <item>E_NOTICE</item>\n      <item>E_CORE_ERROR</item>\n      <item>E_CORE_WARNING</item>\n      <item>E_COMPILE_ERROR</item>\n      <item>E_COMPILE_WARNING</item>\n      <item>E_USER_ERROR</item>\n      <item>E_USER_WARNING</item>\n      <item>E_USER_NOTICE</item>\n      <item>E_DEPRECATED</item>\n      <item>E_USER_DEPRECATED</item>\n      <item>E_ALL</item>\n      <item>E_STRICT</item>\n      <item>E_COMPILE_ERROR</item>\n      <item>E_COMPILE_WARNING</item>\n      <item>E_RECOVERABLE_ERROR</item>\n\n      <!-- PHP 7.0 (Core Pre-Defined Constants) -->\n      <item>PHP_INT_MIN</item>\n\n      <!-- PHP 7.2 (Core Pre-Defined Constants) -->\n      <item>PHP_OS_FAMILY</item>\n      <item>PHP_FLOAT_DIG</item>\n      <item>PHP_FLOAT_EPSILON</item>\n      <item>PHP_FLOAT_MIN</item>\n      <item>PHP_FLOAT_MAX</item>\n\n      <!-- Undocumented, badly documented or outdated constants -->\n      <item>ALT_DIGITS</item>\n      <item>CIT_CALL_TOSTRING</item>\n      <item>CIT_CATCH_GET_CHILD</item>\n      <item>CIT_TOSTRING_USE_CURRENT</item>\n      <item>CIT_TOSTRING_USE_INNER</item>\n      <item>CIT_TOSTRING_USE_KEY</item>\n      <item>DNS_NAPTR</item>\n      <item>DNS_SRV</item>\n      <item>INI_ALL</item>\n      <item>INI_PERDIR</item>\n      <item>INI_SYSTEM</item>\n      <item>INI_USER</item>\n      <item>MYSQLI_RPL_ADMIN</item>\n      <item>MYSQLI_RPL_MASTER</item>\n      <item>MYSQLI_RPL_SLAVE</item>\n      <item>M_ABSTRACT</item>\n      <item>M_FINAL</item>\n      <item>M_LN10</item>\n      <item>M_LOG10E</item>\n      <item>M_PRIVATE</item>\n      <item>M_PROTECTED</item>\n      <item>M_PUBLIC</item>\n      <item>M_STATIC</item>\n      <item>NCURSES_A_ALTCHARSET</item>\n      <item>NCURSES_A_BLINK</item>\n      <item>NCURSES_A_BOLD</item>\n      <item>NCURSES_A_CHARTEXT</item>\n      <item>NCURSES_A_DIM</item>\n      <item>NCURSES_A_INVIS</item>\n      <item>NCURSES_A_NORMAL</item>\n      <item>NCURSES_A_PROTECT</item>\n      <item>NCURSES_A_REVERSE</item>\n      <item>NCURSES_A_STANDOUT</item>\n      <item>NCURSES_A_UNDERLINE</item>\n      <item>NCURSES_BUTTON2_CLICKED</item>\n      <item>NCURSES_BUTTON2_DOUBLE_CLICKED</item>\n      <item>NCURSES_BUTTON2_PRESSED</item>\n      <item>NCURSES_BUTTON2_RELEASED</item>\n      <item>NCURSES_BUTTON2_TRIPLE_CLICKED</item>\n      <item>NCURSES_BUTTON3_CLICKED</item>\n      <item>NCURSES_BUTTON3_DOUBLE_CLICKED</item>\n      <item>NCURSES_BUTTON3_PRESSED</item>\n      <item>NCURSES_BUTTON3_RELEASED</item>\n      <item>NCURSES_BUTTON3_TRIPLE_CLICKED</item>\n      <item>NCURSES_BUTTON4_CLICKED</item>\n      <item>NCURSES_BUTTON4_DOUBLE_CLICKED</item>\n      <item>NCURSES_BUTTON4_PRESSED</item>\n      <item>NCURSES_BUTTON4_RELEASED</item>\n      <item>NCURSES_BUTTON4_TRIPLE_CLICKED</item>\n      <item>NCURSES_KEY_ENTER</item>\n      <item>NCURSES_KEY_F1</item>\n      <item>NCURSES_KEY_F10</item>\n      <item>NCURSES_KEY_F11</item>\n      <item>NCURSES_KEY_F12</item>\n      <item>NCURSES_KEY_F2</item>\n      <item>NCURSES_KEY_F3</item>\n      <item>NCURSES_KEY_F4</item>\n      <item>NCURSES_KEY_F5</item>\n      <item>NCURSES_KEY_F6</item>\n      <item>NCURSES_KEY_F7</item>\n      <item>NCURSES_KEY_F8</item>\n      <item>NCURSES_KEY_F9</item>\n      <item>NCURSES_KEY_RESIZE</item>\n      <item>NCURSES_KEY_SUNDO</item>\n      <item>NCURSES_KEY_SUSPEND</item>\n      <item>NULL</item>\n      <item>PREG_GREP_INVERT</item>\n      <item>PRIO_PGRP</item>\n      <item>PRIO_PROCESS</item>\n      <item>PRIO_USER</item>\n      <item>P_PRIVATE</item>\n      <item>P_PROTECTED</item>\n      <item>P_PUBLIC</item>\n      <item>P_STATIC</item>\n      <item>RIT_CHILD_FIRST</item>\n      <item>RIT_LEAVES_ONLY</item>\n      <item>RIT_SELF_FIRST</item>\n      <item>SOMAXCONN</item>\n      <item>SQL_FETCH_FIRST</item>\n      <item>SQL_FETCH_NEXT</item>\n      <item>STREAM_ENFORCE_SAFE_MODE</item>\n      <item>STREAM_IGNORE_URL</item>\n      <item>STREAM_MKDIR_RECURSIVE</item>\n      <item>STREAM_MUST_SEEK</item>\n      <item>XML_LOCAL_NAMESPACE</item>\n      <item>ZEND_THREAD_SAFE</item>\n\n      <!-- Extensions -->\n      <item>ABDAY_1</item>\n      <item>ABDAY_2</item>\n      <item>ABDAY_3</item>\n      <item>ABDAY_4</item>\n      <item>ABDAY_5</item>\n      <item>ABDAY_6</item>\n      <item>ABDAY_7</item>\n      <item>ABMON_1</item>\n      <item>ABMON_2</item>\n      <item>ABMON_3</item>\n      <item>ABMON_4</item>\n      <item>ABMON_5</item>\n      <item>ABMON_6</item>\n      <item>ABMON_7</item>\n      <item>ABMON_8</item>\n      <item>ABMON_9</item>\n      <item>ABMON_10</item>\n      <item>ABMON_11</item>\n      <item>ABMON_12</item>\n      <item>AF_INET</item>\n      <item>AF_INET6</item>\n      <item>AF_UNIX</item>\n      <item>ALC_FREQUENCY</item>\n      <item>ALC_REFRESH</item>\n      <item>ALC_SYNC</item>\n      <item>ALL_MATCHES</item>\n      <item>AL_BITS</item>\n      <item>AL_BUFFER</item>\n      <item>AL_CHANNELS</item>\n      <item>AL_CONE_INNER_ANGLE</item>\n      <item>AL_CONE_OUTER_ANGLE</item>\n      <item>AL_CONE_OUTER_GAIN</item>\n      <item>AL_DIRECTION</item>\n      <item>AL_FALSE</item>\n      <item>AL_FORMAT_MONO8</item>\n      <item>AL_FORMAT_MONO16</item>\n      <item>AL_FORMAT_STEREO8</item>\n      <item>AL_FORMAT_STEREO16</item>\n      <item>AL_FREQUENCY</item>\n      <item>AL_GAIN</item>\n      <item>AL_INITIAL</item>\n      <item>AL_LOOPING</item>\n      <item>AL_MAX_DISTANCE</item>\n      <item>AL_MAX_GAIN</item>\n      <item>AL_MIN_GAIN</item>\n      <item>AL_ORIENTATION</item>\n      <item>AL_PAUSED</item>\n      <item>AL_PITCH</item>\n      <item>AL_PLAYING</item>\n      <item>AL_POSITION</item>\n      <item>AL_REFERENCE_DISTANCE</item>\n      <item>AL_ROLLOFF_FACTOR</item>\n      <item>AL_SIZE</item>\n      <item>AL_SOURCE_RELATIVE</item>\n      <item>AL_SOURCE_STATE</item>\n      <item>AL_STOPPED</item>\n      <item>AL_TRUE</item>\n      <item>AL_VELOCITY</item>\n      <item>AM_STR</item>\n      <item>APACHE_MAP</item>\n      <item>APC_BIN_VERIFY_CRC32</item>\n      <item>APC_BIN_VERIFY_MD5</item>\n      <item>APC_ITER_ALL</item>\n      <item>APC_ITER_ATIME</item>\n      <item>APC_ITER_CTIME</item>\n      <item>APC_ITER_DEVICE</item>\n      <item>APC_ITER_DTIME</item>\n      <item>APC_ITER_FILENAME</item>\n      <item>APC_ITER_INODE</item>\n      <item>APC_ITER_KEY</item>\n      <item>APC_ITER_MD5</item>\n      <item>APC_ITER_MEM_SIZE</item>\n      <item>APC_ITER_MTIME</item>\n      <item>APC_ITER_NONE</item>\n      <item>APC_ITER_NUM_HITS</item>\n      <item>APC_ITER_REFCOUNT</item>\n      <item>APC_ITER_TTL</item>\n      <item>APC_ITER_TYPE</item>\n      <item>APC_ITER_VALUE</item>\n      <item>APC_LIST_ACTIVE</item>\n      <item>APC_LIST_DELETED</item>\n      <item>APD_VERSION</item>\n      <item>APIERROR</item>\n      <item>ARGS_TRACE</item>\n      <item>ARRAY_AS_PROPS</item>\n      <item>ARRAY_FILTER_USE_BOTH</item>\n      <item>ARRAY_FILTER_USE_KEY</item>\n      <item>ASSERT_ACTIVE</item>\n      <item>ASSERT_BAIL</item>\n      <item>ASSERT_CALLBACK</item>\n      <item>ASSERT_QUIET_EVAL</item>\n      <item>ASSERT_WARNING</item>\n      <item>ASSIGNMENT_TRACE</item>\n      <item>ASSOCIATING_STATE</item>\n      <item>AUTHFAILED</item>\n      <item>AUTH_FAILED_STATE</item>\n      <item>BADARGUMENTS</item>\n      <item>BADVERSION</item>\n      <item>BBCODE_ARG_DOUBLE_QUOTE</item>\n      <item>BBCODE_ARG_HTML_QUOTE</item>\n      <item>BBCODE_ARG_QUOTE_ESCAPING</item>\n      <item>BBCODE_ARG_SINGLE_QUOTE</item>\n      <item>BBCODE_AUTO_CORRECT</item>\n      <item>BBCODE_CORRECT_REOPEN_TAGS</item>\n      <item>BBCODE_DEFAULT_SMILEYS_OFF</item>\n      <item>BBCODE_DEFAULT_SMILEYS_ON</item>\n      <item>BBCODE_DISABLE_TREE_BUILD</item>\n      <item>BBCODE_FLAGS_ARG_PARSING</item>\n      <item>BBCODE_FLAGS_CDATA_NOT_ALLOWED</item>\n      <item>BBCODE_FLAGS_DENY_REOPEN_CHILD</item>\n      <item>BBCODE_FLAGS_ONE_OPEN_PER_LEVEL</item>\n      <item>BBCODE_FLAGS_REMOVE_IF_EMPTY</item>\n      <item>BBCODE_FLAGS_SMILEYS_OFF</item>\n      <item>BBCODE_FLAGS_SMILEYS_ON</item>\n      <item>BBCODE_FORCE_SMILEYS_OFF</item>\n      <item>BBCODE_SET_FLAGS_ADD</item>\n      <item>BBCODE_SET_FLAGS_REMOVE</item>\n      <item>BBCODE_SET_FLAGS_SET</item>\n      <item>BBCODE_SMILEYS_CASE_INSENSITIVE</item>\n      <item>BBCODE_TYPE_ARG</item>\n      <item>BBCODE_TYPE_NOARG</item>\n      <item>BBCODE_TYPE_OPTARG</item>\n      <item>BBCODE_TYPE_ROOT</item>\n      <item>BBCODE_TYPE_SINGLE</item>\n      <item>BLENC_EXT_VERSION</item>\n      <item>BUS_ADRALN</item>\n      <item>BUS_ADRERR</item>\n      <item>BUS_OBJERR</item>\n      <item>CAIRO_ANTIALIAS_DEFAULT</item>\n      <item>CAIRO_ANTIALIAS_GRAY</item>\n      <item>CAIRO_ANTIALIAS_NONE</item>\n      <item>CAIRO_ANTIALIAS_SUBPIXEL</item>\n      <item>CAIRO_CONTENT_ALPHA</item>\n      <item>CAIRO_CONTENT_COLOR</item>\n      <item>CAIRO_CONTENT_COLOR_ALPHA</item>\n      <item>CAIRO_EXTEND_NONE</item>\n      <item>CAIRO_EXTEND_PAD</item>\n      <item>CAIRO_EXTEND_REFLECT</item>\n      <item>CAIRO_EXTEND_REPEAT</item>\n      <item>CAIRO_FILL_RULE_EVEN_ODD</item>\n      <item>CAIRO_FILL_RULE_WINDING</item>\n      <item>CAIRO_FILTER_BEST</item>\n      <item>CAIRO_FILTER_BILINEAR</item>\n      <item>CAIRO_FILTER_FAST</item>\n      <item>CAIRO_FILTER_GAUSSIAN</item>\n      <item>CAIRO_FILTER_GOOD</item>\n      <item>CAIRO_FILTER_NEAREST</item>\n      <item>CAIRO_FONT_SLANT_ITALIC</item>\n      <item>CAIRO_FONT_SLANT_NORMAL</item>\n      <item>CAIRO_FONT_SLANT_OBLIQUE</item>\n      <item>CAIRO_FONT_TYPE_FT</item>\n      <item>CAIRO_FONT_TYPE_QUARTZ</item>\n      <item>CAIRO_FONT_TYPE_TOY</item>\n      <item>CAIRO_FONT_TYPE_WIN32</item>\n      <item>CAIRO_FONT_WEIGHT_BOLD</item>\n      <item>CAIRO_FONT_WEIGHT_NORMAL</item>\n      <item>CAIRO_FORMAT_A1</item>\n      <item>CAIRO_FORMAT_A8</item>\n      <item>CAIRO_FORMAT_ARGB32</item>\n      <item>CAIRO_FORMAT_RGB24</item>\n      <item>CAIRO_HINT_METRICS_DEFAULT</item>\n      <item>CAIRO_HINT_METRICS_OFF</item>\n      <item>CAIRO_HINT_METRICS_ON</item>\n      <item>CAIRO_HINT_STYLE_DEFAULT</item>\n      <item>CAIRO_HINT_STYLE_FULL</item>\n      <item>CAIRO_HINT_STYLE_MEDIUM</item>\n      <item>CAIRO_HINT_STYLE_NONE</item>\n      <item>CAIRO_HINT_STYLE_SLIGHT</item>\n      <item>CAIRO_LINE_CAP_BUTT</item>\n      <item>CAIRO_LINE_CAP_ROUND</item>\n      <item>CAIRO_LINE_CAP_SQUARE</item>\n      <item>CAIRO_LINE_JOIN_BEVEL</item>\n      <item>CAIRO_LINE_JOIN_MITER</item>\n      <item>CAIRO_LINE_JOIN_ROUND</item>\n      <item>CAIRO_OPERATOR_ADD</item>\n      <item>CAIRO_OPERATOR_ATOP</item>\n      <item>CAIRO_OPERATOR_CLEAR</item>\n      <item>CAIRO_OPERATOR_DEST</item>\n      <item>CAIRO_OPERATOR_DEST_ATOP</item>\n      <item>CAIRO_OPERATOR_DEST_IN</item>\n      <item>CAIRO_OPERATOR_DEST_OUT</item>\n      <item>CAIRO_OPERATOR_DEST_OVER</item>\n      <item>CAIRO_OPERATOR_IN</item>\n      <item>CAIRO_OPERATOR_OUT</item>\n      <item>CAIRO_OPERATOR_OVER</item>\n      <item>CAIRO_OPERATOR_SATURATE</item>\n      <item>CAIRO_OPERATOR_SOURCE</item>\n      <item>CAIRO_OPERATOR_XOR</item>\n      <item>CAIRO_PATTERN_TYPE_LINEAR</item>\n      <item>CAIRO_PATTERN_TYPE_RADIAL</item>\n      <item>CAIRO_PATTERN_TYPE_SOLID</item>\n      <item>CAIRO_PATTERN_TYPE_SURFACE</item>\n      <item>CAIRO_PS_LEVEL_2</item>\n      <item>CAIRO_PS_LEVEL_3</item>\n      <item>CAIRO_STATUS_CLIP_NOT_REPRESENTABLE</item>\n      <item>CAIRO_STATUS_FILE_NOT_FOUND</item>\n      <item>CAIRO_STATUS_INVALID_CONTENT</item>\n      <item>CAIRO_STATUS_INVALID_DASH</item>\n      <item>CAIRO_STATUS_INVALID_DSC_COMMENT</item>\n      <item>CAIRO_STATUS_INVALID_FORMAT</item>\n      <item>CAIRO_STATUS_INVALID_INDEX</item>\n      <item>CAIRO_STATUS_INVALID_MATRIX</item>\n      <item>CAIRO_STATUS_INVALID_PATH_DATA</item>\n      <item>CAIRO_STATUS_INVALID_POP_GROUP</item>\n      <item>CAIRO_STATUS_INVALID_RESTORE</item>\n      <item>CAIRO_STATUS_INVALID_STATUS</item>\n      <item>CAIRO_STATUS_INVALID_STRIDE</item>\n      <item>CAIRO_STATUS_INVALID_STRING</item>\n      <item>CAIRO_STATUS_INVALID_VISUAL</item>\n      <item>CAIRO_STATUS_NO_CURRENT_POINT</item>\n      <item>CAIRO_STATUS_NO_MEMORY</item>\n      <item>CAIRO_STATUS_NULL_POINTER</item>\n      <item>CAIRO_STATUS_PATTERN_TYPE_MISMATCH</item>\n      <item>CAIRO_STATUS_READ_ERROR</item>\n      <item>CAIRO_STATUS_SUCCESS</item>\n      <item>CAIRO_STATUS_SURFACE_FINISHED</item>\n      <item>CAIRO_STATUS_SURFACE_TYPE_MISMATCH</item>\n      <item>CAIRO_STATUS_TEMP_FILE_ERROR</item>\n      <item>CAIRO_STATUS_WRITE_ERROR</item>\n      <item>CAIRO_SUBPIXEL_ORDER_BGR</item>\n      <item>CAIRO_SUBPIXEL_ORDER_DEFAULT</item>\n      <item>CAIRO_SUBPIXEL_ORDER_RGB</item>\n      <item>CAIRO_SUBPIXEL_ORDER_VBGR</item>\n      <item>CAIRO_SUBPIXEL_ORDER_VRGB</item>\n      <item>CAIRO_SURFACE_TYPE_BEOS</item>\n      <item>CAIRO_SURFACE_TYPE_DIRECTFB</item>\n      <item>CAIRO_SURFACE_TYPE_GLITZ</item>\n      <item>CAIRO_SURFACE_TYPE_IMAGE</item>\n      <item>CAIRO_SURFACE_TYPE_OS2</item>\n      <item>CAIRO_SURFACE_TYPE_PDF</item>\n      <item>CAIRO_SURFACE_TYPE_PS</item>\n      <item>CAIRO_SURFACE_TYPE_QUARTZ</item>\n      <item>CAIRO_SURFACE_TYPE_QUARTZ_IMAGE</item>\n      <item>CAIRO_SURFACE_TYPE_SVG</item>\n      <item>CAIRO_SURFACE_TYPE_WIN32</item>\n      <item>CAIRO_SURFACE_TYPE_WIN32_PRINTING</item>\n      <item>CAIRO_SURFACE_TYPE_XCB</item>\n      <item>CAIRO_SURFACE_TYPE_XLIB</item>\n      <item>CAIRO_SVG_VERSION_1_1</item>\n      <item>CAIRO_SVG_VERSION_1_2</item>\n      <item>CAL_DOW_DAYNO</item>\n      <item>CAL_DOW_LONG</item>\n      <item>CAL_DOW_SHORT</item>\n      <item>CAL_EASTER_ALWAYS_GREGORIAN</item>\n      <item>CAL_EASTER_ALWAYS_JULIAN</item>\n      <item>CAL_EASTER_DEFAULT</item>\n      <item>CAL_EASTER_ROMAN</item>\n      <item>CAL_FRENCH</item>\n      <item>CAL_GREGORIAN</item>\n      <item>CAL_JEWISH</item>\n      <item>CAL_JEWISH_ADD_ALAFIM</item>\n      <item>CAL_JEWISH_ADD_ALAFIM_GERESH</item>\n      <item>CAL_JEWISH_ADD_GERESHAYIM</item>\n      <item>CAL_JULIAN</item>\n      <item>CAL_MONTH_FRENCH</item>\n      <item>CAL_MONTH_GREGORIAN_LONG</item>\n      <item>CAL_MONTH_GREGORIAN_SHORT</item>\n      <item>CAL_MONTH_JEWISH</item>\n      <item>CAL_MONTH_JULIAN_LONG</item>\n      <item>CAL_MONTH_JULIAN_SHORT</item>\n      <item>CAL_NUM_CALS</item>\n      <item>CASE_LOWER</item>\n      <item>CASE_UPPER</item>\n      <item>CHANGED_EVENT</item>\n      <item>CHAR_MAX</item>\n      <item>CHILD_ARRAYS_ONLY</item>\n      <item>CHILD_EVENT</item>\n      <item>CLASSKIT_ACC_PRIVATE</item>\n      <item>CLASSKIT_ACC_PROTECTED</item>\n      <item>CLASSKIT_ACC_PUBLIC</item>\n      <item>CLASSKIT_AGGREGATE_OVERRIDE</item>\n      <item>CLASSKIT_VERSION</item>\n      <item>CLD_CONTINUED</item>\n      <item>CLD_DUMPED</item>\n      <item>CLD_EXITED</item>\n      <item>CLD_KILLED</item>\n      <item>CLD_STOPPED</item>\n      <item>CLD_TRAPPED</item>\n      <item>CLOSING</item>\n      <item>CLSCTX_ALL</item>\n      <item>CLSCTX_INPROC_HANDLER</item>\n      <item>CLSCTX_INPROC_SERVER</item>\n      <item>CLSCTX_LOCAL_SERVER</item>\n      <item>CLSCTX_REMOTE_SERVER</item>\n      <item>CLSCTX_SERVER</item>\n      <item>CL_EXPUNGE</item>\n      <item>CODESET</item>\n      <item>CONNECTED_STATE</item>\n      <item>CONNECTING_STATE</item>\n      <item>CONNECTIONLOSS</item>\n      <item>CONNECTION_ABORTED</item>\n      <item>CONNECTION_NORMAL</item>\n      <item>CONNECTION_TIMEOUT</item>\n      <item>COUNT_NORMAL</item>\n      <item>COUNT_RECURSIVE</item>\n      <item>CP_ACP</item>\n      <item>CP_MACCP</item>\n      <item>CP_MOVE</item>\n      <item>CP_OEMCP</item>\n      <item>CP_SYMBOL</item>\n      <item>CP_THREAD_ACP</item>\n      <item>CP_UID</item>\n      <item>CP_UTF7</item>\n      <item>CP_UTF8</item>\n      <item>CREATED_EVENT</item>\n      <item>CREDITS_ALL</item>\n      <item>CREDITS_DOCS</item>\n      <item>CREDITS_FULLPAGE</item>\n      <item>CREDITS_GENERAL</item>\n      <item>CREDITS_GROUP</item>\n      <item>CREDITS_MODULES</item>\n      <item>CREDITS_QA</item>\n      <item>CREDITS_SAPI</item>\n      <item>CRNCYSTR</item>\n      <item>CRYPT_BLOWFISH</item>\n      <item>CRYPT_EXT_DES</item>\n      <item>CRYPT_MD5</item>\n      <item>CRYPT_SALT_LENGTH</item>\n      <item>CRYPT_STD_DES</item>\n      <item>CURLAUTH_ANY</item>\n      <item>CURLAUTH_ANYSAFE</item>\n      <item>CURLAUTH_BASIC</item>\n      <item>CURLAUTH_DIGEST</item>\n      <item>CURLAUTH_GSSAPI</item>\n      <item>CURLAUTH_GSSNEGOTIATE</item>\n      <item>CURLAUTH_NEGOTIATE</item>\n      <item>CURLAUTH_NTLM</item>\n      <item>CURLAUTH_NTLM_WB</item>\n      <item>CURLCLOSEPOLICY_CALLBACK</item>\n      <item>CURLCLOSEPOLICY_LEAST_RECENTLY_USED</item>\n      <item>CURLCLOSEPOLICY_LEAST_TRAFFIC</item>\n      <item>CURLCLOSEPOLICY_OLDEST</item>\n      <item>CURLCLOSEPOLICY_SLOWEST</item>\n      <item>CURLE_ABORTED_BY_CALLBACK</item>\n      <item>CURLE_BAD_CALLING_ORDER</item>\n      <item>CURLE_BAD_CONTENT_ENCODING</item>\n      <item>CURLE_BAD_FUNCTION_ARGUMENT</item>\n      <item>CURLE_BAD_PASSWORD_ENTERED</item>\n      <item>CURLE_COULDNT_CONNECT</item>\n      <item>CURLE_COULDNT_RESOLVE_HOST</item>\n      <item>CURLE_COULDNT_RESOLVE_PROXY</item>\n      <item>CURLE_FAILED_INIT</item>\n      <item>CURLE_FILESIZE_EXCEEDED</item>\n      <item>CURLE_FILE_COULDNT_READ_FILE</item>\n      <item>CURLE_FTP_ACCESS_DENIED</item>\n      <item>CURLE_FTP_BAD_DOWNLOAD_RESUME</item>\n      <item>CURLE_FTP_CANT_GET_HOST</item>\n      <item>CURLE_FTP_CANT_RECONNECT</item>\n      <item>CURLE_FTP_COULDNT_GET_SIZE</item>\n      <item>CURLE_FTP_COULDNT_RETR_FILE</item>\n      <item>CURLE_FTP_COULDNT_SET_ASCII</item>\n      <item>CURLE_FTP_COULDNT_SET_BINARY</item>\n      <item>CURLE_FTP_COULDNT_STOR_FILE</item>\n      <item>CURLE_FTP_COULDNT_USE_REST</item>\n      <item>CURLE_FTP_PORT_FAILED</item>\n      <item>CURLE_FTP_QUOTE_ERROR</item>\n      <item>CURLE_FTP_SSL_FAILED</item>\n      <item>CURLE_FTP_USER_PASSWORD_INCORRECT</item>\n      <item>CURLE_FTP_WEIRD_227_FORMAT</item>\n      <item>CURLE_FTP_WEIRD_PASS_REPLY</item>\n      <item>CURLE_FTP_WEIRD_PASV_REPLY</item>\n      <item>CURLE_FTP_WEIRD_SERVER_REPLY</item>\n      <item>CURLE_FTP_WEIRD_USER_REPLY</item>\n      <item>CURLE_FTP_WRITE_ERROR</item>\n      <item>CURLE_FUNCTION_NOT_FOUND</item>\n      <item>CURLE_GOT_NOTHING</item>\n      <item>CURLE_HTTP_NOT_FOUND</item>\n      <item>CURLE_HTTP_PORT_FAILED</item>\n      <item>CURLE_HTTP_POST_ERROR</item>\n      <item>CURLE_HTTP_RANGE_ERROR</item>\n      <item>CURLE_LDAP_CANNOT_BIND</item>\n      <item>CURLE_LDAP_INVALID_URL</item>\n      <item>CURLE_LDAP_SEARCH_FAILED</item>\n      <item>CURLE_LIBRARY_NOT_FOUND</item>\n      <item>CURLE_MALFORMAT_USER</item>\n      <item>CURLE_OBSOLETE</item>\n      <item>CURLE_OK</item>\n      <item>CURLE_OPERATION_TIMEOUTED</item>\n      <item>CURLE_OUT_OF_MEMORY</item>\n      <item>CURLE_PARTIAL_FILE</item>\n      <item>CURLE_READ_ERROR</item>\n      <item>CURLE_RECV_ERROR</item>\n      <item>CURLE_SEND_ERROR</item>\n      <item>CURLE_SHARE_IN_USE</item>\n      <item>CURLE_SSH</item>\n      <item>CURLE_SSL_CACERT</item>\n      <item>CURLE_SSL_CERTPROBLEM</item>\n      <item>CURLE_SSL_CIPHER</item>\n      <item>CURLE_SSL_CONNECT_ERROR</item>\n      <item>CURLE_SSL_ENGINE_NOTFOUND</item>\n      <item>CURLE_SSL_ENGINE_SETFAILED</item>\n      <item>CURLE_SSL_PEER_CERTIFICATE</item>\n      <item>CURLE_TELNET_OPTION_SYNTAX</item>\n      <item>CURLE_TOO_MANY_REDIRECTS</item>\n      <item>CURLE_UNKNOWN_TELNET_OPTION</item>\n      <item>CURLE_UNSUPPORTED_PROTOCOL</item>\n      <item>CURLE_URL_MALFORMAT</item>\n      <item>CURLE_URL_MALFORMAT_USER</item>\n      <item>CURLE_WEIRD_SERVER_REPLY</item>\n      <item>CURLE_WRITE_ERROR</item>\n      <item>CURLFTPAUTH_DEFAULT</item>\n      <item>CURLFTPAUTH_SSL</item>\n      <item>CURLFTPAUTH_TLS</item>\n      <item>CURLFTPSSL_ALL</item>\n      <item>CURLFTPSSL_CONTROL</item>\n      <item>CURLFTPSSL_NONE</item>\n      <item>CURLFTPSSL_TRY</item>\n      <item>CURLFTP_CREATE_DIR</item>\n      <item>CURLFTP_CREATE_DIR_NONE</item>\n      <item>CURLFTP_CREATE_DIR_RETRY</item>\n      <item>CURLHEADER_SEPARATE</item>\n      <item>CURLHEADER_UNIFIED</item>\n      <item>CURLINFO_CONNECT_TIME</item>\n      <item>CURLINFO_CONTENT_LENGTH_DOWNLOAD</item>\n      <item>CURLINFO_CONTENT_LENGTH_DOWNLOAD_T</item>\n      <item>CURLINFO_CONTENT_LENGTH_UPLOAD</item>\n      <item>CURLINFO_CONTENT_LENGTH_UPLOAD_T</item>\n      <item>CURLINFO_CONTENT_TYPE</item>\n      <item>CURLINFO_EFFECTIVE_URL</item>\n      <item>CURLINFO_FILETIME</item>\n      <item>CURLINFO_HEADER_OUT</item>\n      <item>CURLINFO_HEADER_SIZE</item>\n      <item>CURLINFO_HTTP_CODE</item>\n      <item>CURLINFO_HTTP_VERSION</item>\n      <item>CURLINFO_LOCAL_IP</item>\n      <item>CURLINFO_LOCAL_PORT</item>\n      <item>CURLINFO_NAMELOOKUP_TIME</item>\n      <item>CURLINFO_PRETRANSFER_TIME</item>\n      <item>CURLINFO_PRIMARY_IP</item>\n      <item>CURLINFO_PRIMARY_PORT</item>\n      <item>CURLINFO_PRIVATE</item>\n      <item>CURLINFO_PROTOCOL</item>\n      <item>CURLINFO_PROXY_SSL_VERIFYRESULT</item>\n      <item>CURLINFO_REDIRECT_COUNT</item>\n      <item>CURLINFO_REDIRECT_TIME</item>\n      <item>CURLINFO_REDIRECT_URL</item>\n      <item>CURLINFO_REQUEST_SIZE</item>\n      <item>CURLINFO_RESPONSE_CODE</item>\n      <item>CURLINFO_SCHEME</item>\n      <item>CURLINFO_SIZE_DOWNLOAD</item>\n      <item>CURLINFO_SIZE_DOWNLOAD_T</item>\n      <item>CURLINFO_SIZE_UPLOAD</item>\n      <item>CURLINFO_SIZE_UPLOAD_T</item>\n      <item>CURLINFO_SPEED_DOWNLOAD</item>\n      <item>CURLINFO_SPEED_DOWNLOAD_T</item>\n      <item>CURLINFO_SPEED_UPLOAD</item>\n      <item>CURLINFO_SPEED_UPLOAD_T</item>\n      <item>CURLINFO_SSL_VERIFYRESULT</item>\n      <item>CURLINFO_STARTTRANSFER_TIME</item>\n      <item>CURLINFO_TOTAL_TIME</item>\n      <item>CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</item>\n      <item>CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</item>\n      <item>CURLMOPT_MAXCONNECTS</item>\n      <item>CURLMOPT_MAX_HOST_CONNECTIONS</item>\n      <item>CURLMOPT_MAX_PIPELINE_LENGTH</item>\n      <item>CURLMOPT_MAX_TOTAL_CONNECTIONS</item>\n      <item>CURLMOPT_PIPELINING</item>\n      <item>CURLMOPT_PUSHFUNCTION</item>\n      <item>CURLMSG_DONE</item>\n      <item>CURLM_BAD_EASY_HANDLE</item>\n      <item>CURLM_BAD_HANDLE</item>\n      <item>CURLM_CALL_MULTI_PERFORM</item>\n      <item>CURLM_INTERNAL_ERROR</item>\n      <item>CURLM_OK</item>\n      <item>CURLM_OUT_OF_MEMORY</item>\n      <item>CURLOPT_ABSTRACT_UNIX_SOCKET</item>\n      <item>CURLOPT_AUTOREFERER</item>\n      <item>CURLOPT_BINARYTRANSFER</item>\n      <item>CURLOPT_BUFFERSIZE</item>\n      <item>CURLOPT_CAINFO</item>\n      <item>CURLOPT_CAPATH</item>\n      <item>CURLOPT_CERTINFO</item>\n      <item>CURLOPT_CLOSEPOLICY</item>\n      <item>CURLOPT_CONNECTTIMEOUT</item>\n      <item>CURLOPT_CONNECTTIMEOUT_MS</item>\n      <item>CURLOPT_CONNECT_ONLY</item>\n      <item>CURLOPT_CONNECT_TO</item>\n      <item>CURLOPT_COOKIE</item>\n      <item>CURLOPT_COOKIEFILE</item>\n      <item>CURLOPT_COOKIEJAR</item>\n      <item>CURLOPT_COOKIESESSION</item>\n      <item>CURLOPT_CRLF</item>\n      <item>CURLOPT_CUSTOMREQUEST</item>\n      <item>CURLOPT_DEFAULT_PROTOCOL</item>\n      <item>CURLOPT_DNS_CACHE_TIMEOUT</item>\n      <item>CURLOPT_DNS_INTERFACE</item>\n      <item>CURLOPT_DNS_LOCAL_IP4</item>\n      <item>CURLOPT_DNS_LOCAL_IP6</item>\n      <item>CURLOPT_DNS_USE_GLOBAL_CACHE</item>\n      <item>CURLOPT_EGDSOCKET</item>\n      <item>CURLOPT_ENCODING</item>\n      <item>CURLOPT_EXPECT_100_TIMEOUT_MS</item>\n      <item>CURLOPT_FAILONERROR</item>\n      <item>CURLOPT_FILE</item>\n      <item>CURLOPT_FILETIME</item>\n      <item>CURLOPT_FOLLOWLOCATION</item>\n      <item>CURLOPT_FORBID_REUSE</item>\n      <item>CURLOPT_FRESH_CONNECT</item>\n      <item>CURLOPT_FTPAPPEND</item>\n      <item>CURLOPT_FTPASCII</item>\n      <item>CURLOPT_FTPLISTONLY</item>\n      <item>CURLOPT_FTPPORT</item>\n      <item>CURLOPT_FTPSSLAUTH</item>\n      <item>CURLOPT_FTP_CREATE_MISSING_DIRS</item>\n      <item>CURLOPT_FTP_FILEMETHOD</item>\n      <item>CURLOPT_FTP_SSL</item>\n      <item>CURLOPT_FTP_USE_EPRT</item>\n      <item>CURLOPT_FTP_USE_EPSV</item>\n      <item>CURLOPT_HEADER</item>\n      <item>CURLOPT_HEADERFUNCTION</item>\n      <item>CURLOPT_HEADEROPT</item>\n      <item>CURLOPT_HTTP200ALIASES</item>\n      <item>CURLOPT_HTTPAUTH</item>\n      <item>CURLOPT_HTTPGET</item>\n      <item>CURLOPT_HTTPHEADER</item>\n      <item>CURLOPT_HTTPPROXYTUNNEL</item>\n      <item>CURLOPT_HTTP_VERSION</item>\n      <item>CURLOPT_INFILE</item>\n      <item>CURLOPT_INFILESIZE</item>\n      <item>CURLOPT_INTERFACE</item>\n      <item>CURLOPT_IPRESOLVE</item>\n      <item>CURLOPT_KEEP_SENDING_ON_ERROR</item>\n      <item>CURLOPT_KEYPASSWD</item>\n      <item>CURLOPT_KRB4LEVEL</item>\n      <item>CURLOPT_LOGIN_OPTIONS</item>\n      <item>CURLOPT_LOW_SPEED_LIMIT</item>\n      <item>CURLOPT_LOW_SPEED_TIME</item>\n      <item>CURLOPT_MAXCONNECTS</item>\n      <item>CURLOPT_MAXREDIRS</item>\n      <item>CURLOPT_MAX_RECV_SPEED_LARGE</item>\n      <item>CURLOPT_MAX_SEND_SPEED_LARGE</item>\n      <item>CURLOPT_MUTE</item>\n      <item>CURLOPT_NETRC</item>\n      <item>CURLOPT_NOBODY</item>\n      <item>CURLOPT_NOPROGRESS</item>\n      <item>CURLOPT_NOSIGNAL</item>\n      <item>CURLOPT_PASSWDFUNCTION</item>\n      <item>CURLOPT_PATH_AS_IS</item>\n      <item>CURLOPT_PINNEDPUBLICKEY</item>\n      <item>CURLOPT_PIPEWAIT</item>\n      <item>CURLOPT_PORT</item>\n      <item>CURLOPT_POST</item>\n      <item>CURLOPT_POSTFIELDS</item>\n      <item>CURLOPT_POSTQUOTE</item>\n      <item>CURLOPT_POSTREDIR</item>\n      <item>CURLOPT_PRE_PROXY</item>\n      <item>CURLOPT_PRIVATE</item>\n      <item>CURLOPT_PROGRESSFUNCTION</item>\n      <item>CURLOPT_PROTOCOLS</item>\n      <item>CURLOPT_PROXY</item>\n      <item>CURLOPT_PROXYAUTH</item>\n      <item>CURLOPT_PROXYHEADER</item>\n      <item>CURLOPT_PROXYPORT</item>\n      <item>CURLOPT_PROXYTYPE</item>\n      <item>CURLOPT_PROXYUSERPWD</item>\n      <item>CURLOPT_PROXY_CAINFO</item>\n      <item>CURLOPT_PROXY_CAPATH</item>\n      <item>CURLOPT_PROXY_CRLFILE</item>\n      <item>CURLOPT_PROXY_KEYPASSWD</item>\n      <item>CURLOPT_PROXY_PINNEDPUBLICKEY</item>\n      <item>CURLOPT_PROXY_SERVICE_NAME</item>\n      <item>CURLOPT_PROXY_SSLCERT</item>\n      <item>CURLOPT_PROXY_SSLCERTTYPE</item>\n      <item>CURLOPT_PROXY_SSLKEY</item>\n      <item>CURLOPT_PROXY_SSLKEYTYPE</item>\n      <item>CURLOPT_PROXY_SSLVERSION</item>\n      <item>CURLOPT_PROXY_SSL_CIPHER_LIST</item>\n      <item>CURLOPT_PROXY_SSL_OPTIONS</item>\n      <item>CURLOPT_PROXY_SSL_VERIFYHOST</item>\n      <item>CURLOPT_PROXY_SSL_VERIFYPEER</item>\n      <item>CURLOPT_PROXY_TLSAUTH_PASSWORD</item>\n      <item>CURLOPT_PROXY_TLSAUTH_TYPE</item>\n      <item>CURLOPT_PROXY_TLSAUTH_USERNAME</item>\n      <item>CURLOPT_PUT</item>\n      <item>CURLOPT_QUOTE</item>\n      <item>CURLOPT_RANDOM_FILE</item>\n      <item>CURLOPT_RANGE</item>\n      <item>CURLOPT_READFUNCTION</item>\n      <item>CURLOPT_REDIR_PROTOCOLS</item>\n      <item>CURLOPT_REFERER</item>\n      <item>CURLOPT_REQUEST_TARGET</item>\n      <item>CURLOPT_RESOLVE</item>\n      <item>CURLOPT_RESUME_FROM</item>\n      <item>CURLOPT_RETURNTRANSFER</item>\n      <item>CURLOPT_SAFE_UPLOAD</item>\n      <item>CURLOPT_SASL_IR</item>\n      <item>CURLOPT_SERVICE_NAME</item>\n      <item>CURLOPT_SHARE</item>\n      <item>CURLOPT_SOCKS5_AUTH</item>\n      <item>CURLOPT_SSH_AUTH_TYPES</item>\n      <item>CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</item>\n      <item>CURLOPT_SSH_PRIVATE_KEYFILE</item>\n      <item>CURLOPT_SSH_PUBLIC_KEYFILE</item>\n      <item>CURLOPT_SSLCERT</item>\n      <item>CURLOPT_SSLCERTPASSWD</item>\n      <item>CURLOPT_SSLCERTTYPE</item>\n      <item>CURLOPT_SSLENGINE</item>\n      <item>CURLOPT_SSLENGINE_DEFAULT</item>\n      <item>CURLOPT_SSLKEY</item>\n      <item>CURLOPT_SSLKEYPASSWD</item>\n      <item>CURLOPT_SSLKEYTYPE</item>\n      <item>CURLOPT_SSLVERSION</item>\n      <item>CURLOPT_SSL_CIPHER_LIST</item>\n      <item>CURLOPT_SSL_ENABLE_ALPN</item>\n      <item>CURLOPT_SSL_ENABLE_NPN</item>\n      <item>CURLOPT_SSL_FALSESTART</item>\n      <item>CURLOPT_SSL_OPTIONS</item>\n      <item>CURLOPT_SSL_VERIFYHOST</item>\n      <item>CURLOPT_SSL_VERIFYPEER</item>\n      <item>CURLOPT_SSL_VERIFYSTATUS</item>\n      <item>CURLOPT_STDERR</item>\n      <item>CURLOPT_STREAM_WEIGHT</item>\n      <item>CURLOPT_SUPPRESS_CONNECT_HEADERS</item>\n      <item>CURLOPT_TCP_FASTOPEN</item>\n      <item>CURLOPT_TCP_NODELAY</item>\n      <item>CURLOPT_TFTP_NO_OPTIONS</item>\n      <item>CURLOPT_TIMECONDITION</item>\n      <item>CURLOPT_TIMEOUT</item>\n      <item>CURLOPT_TIMEOUT_MS</item>\n      <item>CURLOPT_TIMEVALUE</item>\n      <item>CURLOPT_TRANSFERTEXT</item>\n      <item>CURLOPT_UNIX_SOCKET_PATH</item>\n      <item>CURLOPT_UNRESTRICTED_AUTH</item>\n      <item>CURLOPT_UPLOAD</item>\n      <item>CURLOPT_URL</item>\n      <item>CURLOPT_USERAGENT</item>\n      <item>CURLOPT_USERNAME</item>\n      <item>CURLOPT_USERPWD</item>\n      <item>CURLOPT_VERBOSE</item>\n      <item>CURLOPT_WRITEFUNCTION</item>\n      <item>CURLOPT_WRITEHEADER</item>\n      <item>CURLOPT_XOAUTH2_BEARER</item>\n      <item>CURLPAUSE_ALL</item>\n      <item>CURLPAUSE_CONT</item>\n      <item>CURLPAUSE_RECV</item>\n      <item>CURLPAUSE_RECV_CONT</item>\n      <item>CURLPAUSE_SEND</item>\n      <item>CURLPAUSE_SEND_CONT</item>\n      <item>CURLPIPE_HTTP1</item>\n      <item>CURLPIPE_MULTIPLEX</item>\n      <item>CURLPIPE_NOTHING</item>\n      <item>CURLPROTO_SMB</item>\n      <item>CURLPROTO_SMBS</item>\n      <item>CURLPROXY_HTTP</item>\n      <item>CURLPROXY_HTTPS</item>\n      <item>CURLPROXY_HTTP_1_0</item>\n      <item>CURLPROXY_SOCKS4</item>\n      <item>CURLPROXY_SOCKS4A</item>\n      <item>CURLPROXY_SOCKS5</item>\n      <item>CURLPROXY_SOCKS5_HOSTNAME</item>\n      <item>CURLSHOPT_SHARE</item>\n      <item>CURLSHOPT_UNSHARE</item>\n      <item>CURLSSH_AUTH_AGENT</item>\n      <item>CURLSSH_AUTH_ANY</item>\n      <item>CURLSSH_AUTH_DEFAULT</item>\n      <item>CURLSSH_AUTH_HOST</item>\n      <item>CURLSSH_AUTH_KEYBOARD</item>\n      <item>CURLSSH_AUTH_NONE</item>\n      <item>CURLSSH_AUTH_PASSWORD</item>\n      <item>CURLSSH_AUTH_PUBLICKEY</item>\n      <item>CURLSSLOPT_ALLOW_BEAST</item>\n      <item>CURLSSLOPT_NO_REVOKE</item>\n      <item>CURLVERSION_NOW</item>\n      <item>CURL_HTTP_VERSION_1_0</item>\n      <item>CURL_HTTP_VERSION_1_1</item>\n      <item>CURL_HTTP_VERSION_2</item>\n      <item>CURL_HTTP_VERSION_2TLS</item>\n      <item>CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE</item>\n      <item>CURL_HTTP_VERSION_NONE</item>\n      <item>CURL_LOCK_DATA_COOKIE</item>\n      <item>CURL_LOCK_DATA_DNS</item>\n      <item>CURL_LOCK_DATA_SSL_SESSION</item>\n      <item>CURL_MAX_READ_SIZE</item>\n      <item>CURL_NETRC_IGNORED</item>\n      <item>CURL_NETRC_OPTIONAL</item>\n      <item>CURL_NETRC_REQUIRED</item>\n      <item>CURL_PUSH_DENY</item>\n      <item>CURL_PUSH_OK</item>\n      <item>CURL_REDIR_POST_301</item>\n      <item>CURL_REDIR_POST_302</item>\n      <item>CURL_REDIR_POST_303</item>\n      <item>CURL_REDIR_POST_ALL</item>\n      <item>CURL_SSLVERSION_DEFAULT</item>\n      <item>CURL_SSLVERSION_MAX_DEFAULT</item>\n      <item>CURL_SSLVERSION_MAX_NONE</item>\n      <item>CURL_SSLVERSION_MAX_TLSv1_0</item>\n      <item>CURL_SSLVERSION_MAX_TLSv1_1</item>\n      <item>CURL_SSLVERSION_MAX_TLSv1_2</item>\n      <item>CURL_SSLVERSION_MAX_TLSv1_3</item>\n      <item>CURL_SSLVERSION_SSLv2</item>\n      <item>CURL_SSLVERSION_SSLv3</item>\n      <item>CURL_SSLVERSION_TLSv1</item>\n      <item>CURL_SSLVERSION_TLSv1_0</item>\n      <item>CURL_SSLVERSION_TLSv1_1</item>\n      <item>CURL_SSLVERSION_TLSv1_2</item>\n      <item>CURL_SSLVERSION_TLSv1_3</item>\n      <item>CURL_TIMECOND_IFMODSINCE</item>\n      <item>CURL_TIMECOND_IFUNMODSINCE</item>\n      <item>CURL_TIMECOND_LASTMOD</item>\n      <item>CURL_VERSION_HTTP2</item>\n      <item>CURL_VERSION_HTTPS_PROXY</item>\n      <item>CURL_VERSION_IPV6</item>\n      <item>CURL_VERSION_KERBEROS4</item>\n      <item>CURL_VERSION_KERBEROS5</item>\n      <item>CURL_VERSION_LIBZ</item>\n      <item>CURL_VERSION_PSL</item>\n      <item>CURL_VERSION_SSL</item>\n      <item>CURL_VERSION_UNIX_SOCKETS</item>\n      <item>CURL_WRAPPERS_ENABLED</item>\n      <item>CURRENCY_SYMBOL</item>\n      <item>CYRUS_CALLBACK_NOLITERAL</item>\n      <item>CYRUS_CALLBACK_NUMBERED</item>\n      <item>CYRUS_CONN_INITIALRESPONSE</item>\n      <item>CYRUS_CONN_NONSYNCLITERAL</item>\n      <item>DATAINCONSISTENCY</item>\n      <item>DATE_ATOM</item>\n      <item>DATE_COOKIE</item>\n      <item>DATE_ISO8601</item>\n      <item>DATE_RFC822</item>\n      <item>DATE_RFC850</item>\n      <item>DATE_RFC1036</item>\n      <item>DATE_RFC1123</item>\n      <item>DATE_RFC2822</item>\n      <item>DATE_RFC3339</item>\n      <item>DATE_RFC3339_EXTENDED</item>\n      <item>DATE_RSS</item>\n      <item>DATE_W3C</item>\n      <item>DAY_1</item>\n      <item>DAY_2</item>\n      <item>DAY_3</item>\n      <item>DAY_4</item>\n      <item>DAY_5</item>\n      <item>DAY_6</item>\n      <item>DAY_7</item>\n      <item>DB2_AUTOCOMMIT_OFF</item>\n      <item>DB2_AUTOCOMMIT_ON</item>\n      <item>DB2_BINARY</item>\n      <item>DB2_CASE_LOWER</item>\n      <item>DB2_CASE_NATURAL</item>\n      <item>DB2_CASE_UPPER</item>\n      <item>DB2_CHAR</item>\n      <item>DB2_CONVERT</item>\n      <item>DB2_DEFERRED_PREPARE_OFF</item>\n      <item>DB2_DEFERRED_PREPARE_ON</item>\n      <item>DB2_DOUBLE</item>\n      <item>DB2_FORWARD_ONLY</item>\n      <item>DB2_LONG</item>\n      <item>DB2_PARAM_FILE</item>\n      <item>DB2_PARAM_IN</item>\n      <item>DB2_PARAM_INOUT</item>\n      <item>DB2_PARAM_OUT</item>\n      <item>DB2_PASSTHRU</item>\n      <item>DB2_SCROLLABLE</item>\n      <item>DBASE_RDONLY</item>\n      <item>DBASE_RDWR</item>\n      <item>DBASE_TYPE_DBASE</item>\n      <item>DBASE_TYPE_FOXPRO</item>\n      <item>DBASE_VERSION</item>\n      <item>DBPLUS_ERR_CLOSE</item>\n      <item>DBPLUS_ERR_CORRUPT_TUPLE</item>\n      <item>DBPLUS_ERR_CRC</item>\n      <item>DBPLUS_ERR_CREATE</item>\n      <item>DBPLUS_ERR_DBPARSE</item>\n      <item>DBPLUS_ERR_DBPREEXIT</item>\n      <item>DBPLUS_ERR_DBRUNERR</item>\n      <item>DBPLUS_ERR_DUPLICATE</item>\n      <item>DBPLUS_ERR_EMPTY</item>\n      <item>DBPLUS_ERR_EOSCAN</item>\n      <item>DBPLUS_ERR_FIFO</item>\n      <item>DBPLUS_ERR_LENGTH</item>\n      <item>DBPLUS_ERR_LOCKED</item>\n      <item>DBPLUS_ERR_LSEEK</item>\n      <item>DBPLUS_ERR_MAGIC</item>\n      <item>DBPLUS_ERR_MALLOC</item>\n      <item>DBPLUS_ERR_NIDX</item>\n      <item>DBPLUS_ERR_NOERR</item>\n      <item>DBPLUS_ERR_NOLOCK</item>\n      <item>DBPLUS_ERR_NUSERS</item>\n      <item>DBPLUS_ERR_ONTRAP</item>\n      <item>DBPLUS_ERR_OPEN</item>\n      <item>DBPLUS_ERR_PANIC</item>\n      <item>DBPLUS_ERR_PERM</item>\n      <item>DBPLUS_ERR_PGSIZE</item>\n      <item>DBPLUS_ERR_PIPE</item>\n      <item>DBPLUS_ERR_PREEXIT</item>\n      <item>DBPLUS_ERR_PREPROC</item>\n      <item>DBPLUS_ERR_READ</item>\n      <item>DBPLUS_ERR_RESTRICTED</item>\n      <item>DBPLUS_ERR_TCL</item>\n      <item>DBPLUS_ERR_UNKNOWN</item>\n      <item>DBPLUS_ERR_USER</item>\n      <item>DBPLUS_ERR_VERSION</item>\n      <item>DBPLUS_ERR_WAIT</item>\n      <item>DBPLUS_ERR_WARNING0</item>\n      <item>DBPLUS_ERR_WLOCKED</item>\n      <item>DBPLUS_ERR_WOPEN</item>\n      <item>DBPLUS_ERR_WRITE</item>\n      <item>DBX_CMP_ASC</item>\n      <item>DBX_CMP_DESC</item>\n      <item>DBX_CMP_NATIVE</item>\n      <item>DBX_CMP_NUMBER</item>\n      <item>DBX_CMP_TEXT</item>\n      <item>DBX_COLNAMES_LOWERCASE</item>\n      <item>DBX_COLNAMES_UNCHANGED</item>\n      <item>DBX_COLNAMES_UPPERCASE</item>\n      <item>DBX_FBSQL</item>\n      <item>DBX_MSSQL</item>\n      <item>DBX_MYSQL</item>\n      <item>DBX_OCI8</item>\n      <item>DBX_ODBC</item>\n      <item>DBX_PERSISTENT</item>\n      <item>DBX_PGSQL</item>\n      <item>DBX_RESULT_ASSOC</item>\n      <item>DBX_RESULT_INDEX</item>\n      <item>DBX_RESULT_INFO</item>\n      <item>DBX_RESULT_UNBUFFERED</item>\n      <item>DBX_SQLITE</item>\n      <item>DBX_SYBASECT</item>\n      <item>DEBUG_BACKTRACE_IGNORE_ARGS</item>\n      <item>DEBUG_BACKTRACE_PROVIDE_OBJECT</item>\n      <item>DECIMAL_POINT</item>\n      <item>DELETED_EVENT</item>\n      <item>DIRECTORY_SEPARATOR</item>\n      <item>DISP_E_DIVBYZERO</item>\n      <item>DISP_E_OVERFLOW</item>\n      <item>DNS_A</item>\n      <item>DNS_AAAA</item>\n      <item>DNS_ALL</item>\n      <item>DNS_ANY</item>\n      <item>DNS_CAA</item>\n      <item>DNS_CNAME</item>\n      <item>DNS_HINFO</item>\n      <item>DNS_MX</item>\n      <item>DNS_NS</item>\n      <item>DNS_PTR</item>\n      <item>DNS_SOA</item>\n      <item>DNS_TXT</item>\n      <item>DOMSTRING_SIZE_ERR</item>\n      <item>DOM_HIERARCHY_REQUEST_ERR</item>\n      <item>DOM_INDEX_SIZE_ERR</item>\n      <item>DOM_INUSE_ATTRIBUTE_ERR</item>\n      <item>DOM_INVALID_ACCESS_ERR</item>\n      <item>DOM_INVALID_CHARACTER_ERR</item>\n      <item>DOM_INVALID_MODIFICATION_ERR</item>\n      <item>DOM_INVALID_STATE_ERR</item>\n      <item>DOM_NAMESPACE_ERR</item>\n      <item>DOM_NOT_FOUND_ERR</item>\n      <item>DOM_NOT_SUPPORTED_ERR</item>\n      <item>DOM_NO_DATA_ALLOWED_ERR</item>\n      <item>DOM_NO_MODIFICATION_ALLOWED_ERR</item>\n      <item>DOM_PHP_ERR</item>\n      <item>DOM_SYNTAX_ERR</item>\n      <item>DOM_VALIDATION_ERR</item>\n      <item>DOM_WRONG_DOCUMENT_ERR</item>\n      <item>D_FMT</item>\n      <item>D_T_FMT</item>\n      <item>EIO_DT_BLK</item>\n      <item>EIO_DT_CHR</item>\n      <item>EIO_DT_CMP</item>\n      <item>EIO_DT_DIR</item>\n      <item>EIO_DT_DOOR</item>\n      <item>EIO_DT_FIFO</item>\n      <item>EIO_DT_LNK</item>\n      <item>EIO_DT_MAX</item>\n      <item>EIO_DT_MPB</item>\n      <item>EIO_DT_MPC</item>\n      <item>EIO_DT_NAM</item>\n      <item>EIO_DT_NWK</item>\n      <item>EIO_DT_REG</item>\n      <item>EIO_DT_SOCK</item>\n      <item>EIO_DT_UNKNOWN</item>\n      <item>EIO_DT_WHT</item>\n      <item>EIO_FALLOC_FL_KEEP_SIZE</item>\n      <item>EIO_O_APPEND</item>\n      <item>EIO_O_CREAT</item>\n      <item>EIO_O_EXCL</item>\n      <item>EIO_O_FSYNC</item>\n      <item>EIO_O_NONBLOCK</item>\n      <item>EIO_O_RDONLY</item>\n      <item>EIO_O_RDWR</item>\n      <item>EIO_O_TRUNC</item>\n      <item>EIO_O_WRONLY</item>\n      <item>EIO_PRI_DEFAULT</item>\n      <item>EIO_PRI_MAX</item>\n      <item>EIO_PRI_MIN</item>\n      <item>EIO_READDIR_DENTS</item>\n      <item>EIO_READDIR_DIRS_FIRST</item>\n      <item>EIO_READDIR_FOUND_UNKNOWN</item>\n      <item>EIO_READDIR_STAT_ORDER</item>\n      <item>EIO_SEEK_CUR</item>\n      <item>EIO_SEEK_END</item>\n      <item>EIO_SEEK_SET</item>\n      <item>EIO_SYNC_FILE_RANGE_WAIT_AFTER</item>\n      <item>EIO_SYNC_FILE_RANGE_WAIT_BEFORE</item>\n      <item>EIO_SYNC_FILE_RANGE_WRITE</item>\n      <item>EIO_S_IFBLK</item>\n      <item>EIO_S_IFCHR</item>\n      <item>EIO_S_IFIFO</item>\n      <item>EIO_S_IFREG</item>\n      <item>EIO_S_IFSOCK</item>\n      <item>EIO_S_IRGRP</item>\n      <item>EIO_S_IROTH</item>\n      <item>EIO_S_IRUSR</item>\n      <item>EIO_S_IWGRP</item>\n      <item>EIO_S_IWOTH</item>\n      <item>EIO_S_IWUSR</item>\n      <item>EIO_S_IXGRP</item>\n      <item>EIO_S_IXOTH</item>\n      <item>EIO_S_IXUSR</item>\n      <item>ENC7BIT</item>\n      <item>ENC8BIT</item>\n      <item>ENCBASE64</item>\n      <item>ENCBINARY</item>\n      <item>ENCHANT_ISPELL</item>\n      <item>ENCHANT_MYSPELL</item>\n      <item>ENCOTHER</item>\n      <item>ENCQUOTEDPRINTABLE</item>\n      <item>ENT_COMPAT</item>\n      <item>ENT_DISALLOWED</item>\n      <item>ENT_HTML5</item>\n      <item>ENT_HTML401</item>\n      <item>ENT_IGNORE</item>\n      <item>ENT_NOQUOTES</item>\n      <item>ENT_QUOTES</item>\n      <item>ENT_SUBSTITUTE</item>\n      <item>ENT_XHTML</item>\n      <item>ENT_XML1</item>\n      <item>EPHEMERAL</item>\n      <item>EPHEMERALONLOCALSESSION</item>\n      <item>ERA</item>\n      <item>ERA_D_FMT</item>\n      <item>ERA_D_T_FMT</item>\n      <item>ERA_T_FMT</item>\n      <item>ERA_YEAR</item>\n      <item>ERROR_TRACE</item>\n      <item>EVLOOP_NONBLOCK</item>\n      <item>EVLOOP_ONCE</item>\n      <item>EV_PERSIST</item>\n      <item>EV_READ</item>\n      <item>EV_SIGNAL</item>\n      <item>EV_TIMEOUT</item>\n      <item>EV_WRITE</item>\n      <item>EXIF_USE_MBSTRING</item>\n      <item>EXPIRED_SESSION_STATE</item>\n      <item>EXP_EOF</item>\n      <item>EXP_EXACT</item>\n      <item>EXP_FULLBUFFER</item>\n      <item>EXP_GLOB</item>\n      <item>EXP_REGEXP</item>\n      <item>EXP_TIMEOUT</item>\n      <item>EXTR_IF_EXISTS</item>\n      <item>EXTR_OVERWRITE</item>\n      <item>EXTR_PREFIX_ALL</item>\n      <item>EXTR_PREFIX_IF_EXISTS</item>\n      <item>EXTR_PREFIX_INVALID</item>\n      <item>EXTR_PREFIX_SAME</item>\n      <item>EXTR_REFS</item>\n      <item>EXTR_SKIP</item>\n      <item>FAMAcknowledge</item>\n      <item>FAMChanged</item>\n      <item>FAMCreated</item>\n      <item>FAMDeleted</item>\n      <item>FAMEndExist</item>\n      <item>FAMExists</item>\n      <item>FAMMoved</item>\n      <item>FAMStartExecuting</item>\n      <item>FAMStopExecuting</item>\n      <item>FANN_COS</item>\n      <item>FANN_COS_SYMMETRIC</item>\n      <item>FANN_ELLIOT</item>\n      <item>FANN_ELLIOT_SYMMETRIC</item>\n      <item>FANN_ERRORFUNC_LINEAR</item>\n      <item>FANN_ERRORFUNC_TANH</item>\n      <item>FANN_E_CANT_ALLOCATE_MEM</item>\n      <item>FANN_E_CANT_OPEN_CONFIG_R</item>\n      <item>FANN_E_CANT_OPEN_CONFIG_W</item>\n      <item>FANN_E_CANT_OPEN_TD_R</item>\n      <item>FANN_E_CANT_OPEN_TD_W</item>\n      <item>FANN_E_CANT_READ_CONFIG</item>\n      <item>FANN_E_CANT_READ_CONNECTIONS</item>\n      <item>FANN_E_CANT_READ_NEURON</item>\n      <item>FANN_E_CANT_READ_TD</item>\n      <item>FANN_E_CANT_TRAIN_ACTIVATION</item>\n      <item>FANN_E_CANT_USE_ACTIVATION</item>\n      <item>FANN_E_CANT_USE_TRAIN_ALG</item>\n      <item>FANN_E_INDEX_OUT_OF_BOUND</item>\n      <item>FANN_E_INPUT_NO_MATCH</item>\n      <item>FANN_E_NO_ERROR</item>\n      <item>FANN_E_OUTPUT_NO_MATCH</item>\n      <item>FANN_E_SCALE_NOT_PRESENT</item>\n      <item>FANN_E_TRAIN_DATA_MISMATCH</item>\n      <item>FANN_E_TRAIN_DATA_SUBSET</item>\n      <item>FANN_E_WRONG_CONFIG_VERSION</item>\n      <item>FANN_E_WRONG_NUM_CONNECTIONS</item>\n      <item>FANN_GAUSSIAN</item>\n      <item>FANN_GAUSSIAN_STEPWISE</item>\n      <item>FANN_GAUSSIAN_SYMMETRIC</item>\n      <item>FANN_LINEAR</item>\n      <item>FANN_LINEAR_PIECE</item>\n      <item>FANN_LINEAR_PIECE_SYMMETRIC</item>\n      <item>FANN_NETTYPE_LAYER</item>\n      <item>FANN_NETTYPE_SHORTCUT</item>\n      <item>FANN_SIGMOID</item>\n      <item>FANN_SIGMOID_STEPWISE</item>\n      <item>FANN_SIGMOID_SYMMETRIC</item>\n      <item>FANN_SIGMOID_SYMMETRIC_STEPWISE</item>\n      <item>FANN_SIN</item>\n      <item>FANN_SIN_SYMMETRIC</item>\n      <item>FANN_STOPFUNC_BIT</item>\n      <item>FANN_STOPFUNC_MSE</item>\n      <item>FANN_THRESHOLD</item>\n      <item>FANN_THRESHOLD_SYMMETRIC</item>\n      <item>FANN_TRAIN_BATCH</item>\n      <item>FANN_TRAIN_INCREMENTAL</item>\n      <item>FANN_TRAIN_QUICKPROP</item>\n      <item>FANN_TRAIN_RPROP</item>\n      <item>FANN_TRAIN_SARPROP</item>\n      <item>FBSQL_ASSOC</item>\n      <item>FBSQL_BOTH</item>\n      <item>FBSQL_ISO_READ_COMMITTED</item>\n      <item>FBSQL_ISO_READ_UNCOMMITTED</item>\n      <item>FBSQL_ISO_REPEATABLE_READ</item>\n      <item>FBSQL_ISO_SERIALIZABLE</item>\n      <item>FBSQL_ISO_VERSIONED</item>\n      <item>FBSQL_LOB_DIRECT</item>\n      <item>FBSQL_LOB_HANDLE</item>\n      <item>FBSQL_LOCK_DEFERRED</item>\n      <item>FBSQL_LOCK_OPTIMISTIC</item>\n      <item>FBSQL_LOCK_PESSIMISTIC</item>\n      <item>FBSQL_NOEXEC</item>\n      <item>FBSQL_NUM</item>\n      <item>FBSQL_RUNNING</item>\n      <item>FBSQL_STARTING</item>\n      <item>FBSQL_STOPPED</item>\n      <item>FBSQL_STOPPING</item>\n      <item>FBSQL_UNKNOWN</item>\n      <item>FDFAA</item>\n      <item>FDFAction</item>\n      <item>FDFAP</item>\n      <item>FDFAPRef</item>\n      <item>FDFAS</item>\n      <item>FDFCalculate</item>\n      <item>FDFClearFf</item>\n      <item>FDFClrF</item>\n      <item>FDFDown</item>\n      <item>FDFDownAP</item>\n      <item>FDFEnter</item>\n      <item>FDFExit</item>\n      <item>FDFFf</item>\n      <item>FDFFile</item>\n      <item>FDFFlags</item>\n      <item>FDFFormat</item>\n      <item>FDFID</item>\n      <item>FDFIF</item>\n      <item>FDFKeystroke</item>\n      <item>FDFNormalAP</item>\n      <item>FDFRolloverAP</item>\n      <item>FDFSetF</item>\n      <item>FDFSetFf</item>\n      <item>FDFStatus</item>\n      <item>FDFUp</item>\n      <item>FDFValidate</item>\n      <item>FDFValue</item>\n      <item>FILEINFO_COMPRESS</item>\n      <item>FILEINFO_CONTINUE</item>\n      <item>FILEINFO_DEVICES</item>\n      <item>FILEINFO_EXTENSION</item>\n      <item>FILEINFO_MIME</item>\n      <item>FILEINFO_MIME_ENCODING</item>\n      <item>FILEINFO_MIME_TYPE</item>\n      <item>FILEINFO_NONE</item>\n      <item>FILEINFO_PRESERVE_ATIME</item>\n      <item>FILEINFO_RAW</item>\n      <item>FILEINFO_SYMLINK</item>\n      <item>FILE_APPEND</item>\n      <item>FILE_BINARY</item>\n      <item>FILE_IGNORE_NEW_LINES</item>\n      <item>FILE_NO_DEFAULT_CONTEXT</item>\n      <item>FILE_SKIP_EMPTY_LINES</item>\n      <item>FILE_TEXT</item>\n      <item>FILE_USE_INCLUDE_PATH</item>\n      <item>FILTER_CALLBACK</item>\n      <item>FILTER_DEFAULT</item>\n      <item>FILTER_FLAG_ALLOW_FRACTION</item>\n      <item>FILTER_FLAG_ALLOW_HEX</item>\n      <item>FILTER_FLAG_ALLOW_OCTAL</item>\n      <item>FILTER_FLAG_ALLOW_SCIENTIFIC</item>\n      <item>FILTER_FLAG_ALLOW_THOUSAND</item>\n      <item>FILTER_FLAG_EMAIL_UNICODE</item>\n      <item>FILTER_FLAG_EMPTY_STRING_NULL</item>\n      <item>FILTER_FLAG_ENCODE_AMP</item>\n      <item>FILTER_FLAG_ENCODE_HIGH</item>\n      <item>FILTER_FLAG_ENCODE_LOW</item>\n      <item>FILTER_FLAG_IPV4</item>\n      <item>FILTER_FLAG_IPV6</item>\n      <item>FILTER_FLAG_NONE</item>\n      <item>FILTER_FLAG_NO_ENCODE_QUOTES</item>\n      <item>FILTER_FLAG_NO_PRIV_RANGE</item>\n      <item>FILTER_FLAG_NO_RES_RANGE</item>\n      <item>FILTER_FLAG_PATH_REQUIRED</item>\n      <item>FILTER_FLAG_QUERY_REQUIRED</item>\n      <item>FILTER_FLAG_STRIP_HIGH</item>\n      <item>FILTER_FLAG_STRIP_LOW</item>\n      <item>FILTER_FORCE_ARRAY</item>\n      <item>FILTER_NULL_ON_FAILURE</item>\n      <item>FILTER_REQUIRE_ARRAY</item>\n      <item>FILTER_REQUIRE_SCALAR</item>\n      <item>FILTER_SANITIZE_EMAIL</item>\n      <item>FILTER_SANITIZE_ENCODED</item>\n      <item>FILTER_SANITIZE_MAGIC_QUOTES</item>\n      <item>FILTER_SANITIZE_NUMBER_FLOAT</item>\n      <item>FILTER_SANITIZE_NUMBER_INT</item>\n      <item>FILTER_SANITIZE_SPECIAL_CHARS</item>\n      <item>FILTER_SANITIZE_STRING</item>\n      <item>FILTER_SANITIZE_STRIPPED</item>\n      <item>FILTER_SANITIZE_URL</item>\n      <item>FILTER_UNSAFE_RAW</item>\n      <item>FILTER_VALIDATE_BOOLEAN</item>\n      <item>FILTER_VALIDATE_EMAIL</item>\n      <item>FILTER_VALIDATE_FLOAT</item>\n      <item>FILTER_VALIDATE_INT</item>\n      <item>FILTER_VALIDATE_IP</item>\n      <item>FILTER_VALIDATE_MAC</item>\n      <item>FILTER_VALIDATE_REGEXP</item>\n      <item>FILTER_VALIDATE_URL</item>\n      <item>FNM_CASEFOLD</item>\n      <item>FNM_NOESCAPE</item>\n      <item>FNM_PATHNAME</item>\n      <item>FNM_PERIOD</item>\n      <item>FORCE_DEFLATE</item>\n      <item>FORCE_GZIP</item>\n      <item>FPE_FLTDIV</item>\n      <item>FPE_FLTINV</item>\n      <item>FPE_FLTOVF</item>\n      <item>FPE_FLTRES</item>\n      <item>FPE_FLTSUB</item>\n      <item>FPE_FLTUND</item>\n      <item>FPE_INTDIV</item>\n      <item>FPE_INTOVF</item>\n      <item>FRAC_DIGITS</item>\n      <item>FRIBIDI_AUTO</item>\n      <item>FRIBIDI_CHARSET_8859_6</item>\n      <item>FRIBIDI_CHARSET_8859_8</item>\n      <item>FRIBIDI_CHARSET_CAP_RTL</item>\n      <item>FRIBIDI_CHARSET_CP1255</item>\n      <item>FRIBIDI_CHARSET_CP1256</item>\n      <item>FRIBIDI_CHARSET_ISIRI_3342</item>\n      <item>FRIBIDI_CHARSET_UTF8</item>\n      <item>FRIBIDI_LTR</item>\n      <item>FRIBIDI_RTL</item>\n      <item>FTP_ASCII</item>\n      <item>FTP_AUTORESUME</item>\n      <item>FTP_AUTOSEEK</item>\n      <item>FTP_BINARY</item>\n      <item>FTP_FAILED</item>\n      <item>FTP_FINISHED</item>\n      <item>FTP_IMAGE</item>\n      <item>FTP_MOREDATA</item>\n      <item>FTP_TEXT</item>\n      <item>FTP_TIMEOUT_SEC</item>\n      <item>FTP_USEPASVADDRESS</item>\n      <item>FT_INTERNAL</item>\n      <item>FT_NOT</item>\n      <item>FT_PEEK</item>\n      <item>FT_PREFETCHTEXT</item>\n      <item>FT_UID</item>\n      <item>FUNCTION_TRACE</item>\n      <item>F_DUPFD</item>\n      <item>F_GETFD</item>\n      <item>F_GETFL</item>\n      <item>F_GETLK</item>\n      <item>F_GETOWN</item>\n      <item>F_RDLCK</item>\n      <item>F_SETFL</item>\n      <item>F_SETLK</item>\n      <item>F_SETLKW</item>\n      <item>F_SETOWN</item>\n      <item>F_UNLCK</item>\n      <item>F_WRLCK</item>\n      <item>GD_BUNDLED</item>\n      <item>GD_EXTRA_VERSION</item>\n      <item>GD_MAJOR_VERSION</item>\n      <item>GD_MINOR_VERSION</item>\n      <item>GD_RELEASE_VERSION</item>\n      <item>GD_VERSION</item>\n      <item>GEARMAN_ARGS_BUFFER_SIZE</item>\n      <item>GEARMAN_CLIENT_FREE_TASKS</item>\n      <item>GEARMAN_CLIENT_GENERATE_UNIQUE</item>\n      <item>GEARMAN_CLIENT_NON_BLOCKING</item>\n      <item>GEARMAN_CLIENT_UNBUFFERED_RESULT</item>\n      <item>GEARMAN_COULD_NOT_CONNECT</item>\n      <item>GEARMAN_DEFAULT_SOCKET_RECV_SIZE</item>\n      <item>GEARMAN_DEFAULT_SOCKET_SEND_SIZE</item>\n      <item>GEARMAN_DEFAULT_SOCKET_TIMEOUT</item>\n      <item>GEARMAN_DEFAULT_TCP_HOST</item>\n      <item>GEARMAN_DEFAULT_TCP_PORT</item>\n      <item>GEARMAN_ECHO_DATA_CORRUPTION</item>\n      <item>GEARMAN_ERRNO</item>\n      <item>GEARMAN_GETADDRINFO</item>\n      <item>GEARMAN_INVALID_FUNCTION_NAME</item>\n      <item>GEARMAN_INVALID_WORKER_FUNCTION</item>\n      <item>GEARMAN_IO_WAIT</item>\n      <item>GEARMAN_JOB_HANDLE_SIZE</item>\n      <item>GEARMAN_LOST_CONNECTION</item>\n      <item>GEARMAN_MAX_COMMAND_ARGS</item>\n      <item>GEARMAN_MAX_ERROR_SIZE</item>\n      <item>GEARMAN_MEMORY_ALLOCATION_FAILURE</item>\n      <item>GEARMAN_NEED_WORKLOAD_FN</item>\n      <item>GEARMAN_NO_ACTIVE_FDS</item>\n      <item>GEARMAN_NO_JOBS</item>\n      <item>GEARMAN_NO_REGISTERED_FUNCTIONS</item>\n      <item>GEARMAN_NO_SERVERS</item>\n      <item>GEARMAN_OPTION_SIZE</item>\n      <item>GEARMAN_PACKET_HEADER_SIZE</item>\n      <item>GEARMAN_PAUSE</item>\n      <item>GEARMAN_RECV_BUFFER_SIZE</item>\n      <item>GEARMAN_SEND_BUFFER_SIZE</item>\n      <item>GEARMAN_SEND_BUFFER_TOO_SMALL</item>\n      <item>GEARMAN_SERVER_ERROR</item>\n      <item>GEARMAN_SUCCESS</item>\n      <item>GEARMAN_TIMEOUT</item>\n      <item>GEARMAN_UNEXPECTED_PACKET</item>\n      <item>GEARMAN_UNIQUE_SIZE</item>\n      <item>GEARMAN_UNKNOWN_STATE</item>\n      <item>GEARMAN_WORKER_GRAB_UNIQ</item>\n      <item>GEARMAN_WORKER_NON_BLOCKING</item>\n      <item>GEARMAN_WORKER_WAIT_TIMEOUT</item>\n      <item>GEARMAN_WORK_DATA</item>\n      <item>GEARMAN_WORK_EXCEPTION</item>\n      <item>GEARMAN_WORK_FAIL</item>\n      <item>GEARMAN_WORK_STATUS</item>\n      <item>GEARMAN_WORK_WARNING</item>\n      <item>GEOIP_ASNUM_EDITION</item>\n      <item>GEOIP_CABLEDSL_SPEED</item>\n      <item>GEOIP_CITY_EDITION_REV0</item>\n      <item>GEOIP_CITY_EDITION_REV1</item>\n      <item>GEOIP_CORPORATE_SPEED</item>\n      <item>GEOIP_COUNTRY_EDITION</item>\n      <item>GEOIP_DIALUP_SPEED</item>\n      <item>GEOIP_DOMAIN_EDITION</item>\n      <item>GEOIP_ISP_EDITION</item>\n      <item>GEOIP_NETSPEED_EDITION</item>\n      <item>GEOIP_ORG_EDITION</item>\n      <item>GEOIP_PROXY_EDITION</item>\n      <item>GEOIP_REGION_EDITION_REV0</item>\n      <item>GEOIP_REGION_EDITION_REV1</item>\n      <item>GEOIP_UNKNOWN_SPEED</item>\n      <item>GET_MATCH</item>\n      <item>GLOB_AVAILABLE_FLAGS</item>\n      <item>GLOB_BRACE</item>\n      <item>GLOB_MARK</item>\n      <item>GLOB_NOCHECK</item>\n      <item>GLOB_NOESCAPE</item>\n      <item>GLOB_NOSORT</item>\n      <item>GLOB_ONLYDIR</item>\n      <item>GMP_BIG_ENDIAN</item>\n      <item>GMP_LITTLE_ENDIAN</item>\n      <item>GMP_LSW_FIRST</item>\n      <item>GMP_MSW_FIRST</item>\n      <item>GMP_NATIVE_ENDIAN</item>\n      <item>GMP_ROUND_MINUSINF</item>\n      <item>GMP_ROUND_PLUSINF</item>\n      <item>GMP_ROUND_ZERO</item>\n      <item>GMP_VERSION</item>\n      <item>GNUPG_ERROR_EXCEPTION</item>\n      <item>GNUPG_ERROR_SILENT</item>\n      <item>GNUPG_ERROR_WARNING</item>\n      <item>GNUPG_PROTOCOL_CMS</item>\n      <item>GNUPG_PROTOCOL_OpenPGP</item>\n      <item>GNUPG_SIGSUM_BAD_POLICY</item>\n      <item>GNUPG_SIGSUM_CRL_MISSING</item>\n      <item>GNUPG_SIGSUM_CRL_TOO_OLD</item>\n      <item>GNUPG_SIGSUM_GREEN</item>\n      <item>GNUPG_SIGSUM_KEY_EXPIRED</item>\n      <item>GNUPG_SIGSUM_KEY_MISSING</item>\n      <item>GNUPG_SIGSUM_KEY_REVOKED</item>\n      <item>GNUPG_SIGSUM_RED</item>\n      <item>GNUPG_SIGSUM_SIG_EXPIRED</item>\n      <item>GNUPG_SIGSUM_SYS_ERROR</item>\n      <item>GNUPG_SIGSUM_VALID</item>\n      <item>GNUPG_SIG_MODE_CLEAR</item>\n      <item>GNUPG_SIG_MODE_DETACH</item>\n      <item>GNUPG_SIG_MODE_NORMAL</item>\n      <item>GNUPG_VALIDITY_FULL</item>\n      <item>GNUPG_VALIDITY_MARGINAL</item>\n      <item>GNUPG_VALIDITY_NEVER</item>\n      <item>GNUPG_VALIDITY_ULTIMATE</item>\n      <item>GNUPG_VALIDITY_UNDEFINED</item>\n      <item>GNUPG_VALIDITY_UNKNOWN</item>\n      <item>GOPHER_BINARY</item>\n      <item>GOPHER_BINHEX</item>\n      <item>GOPHER_DIRECTORY</item>\n      <item>GOPHER_DOCUMENT</item>\n      <item>GOPHER_DOSBINARY</item>\n      <item>GOPHER_HTTP</item>\n      <item>GOPHER_INFO</item>\n      <item>GOPHER_UNKNOWN</item>\n      <item>GOPHER_UUENCODED</item>\n      <item>GROUPING</item>\n      <item>GSLC_SSL_NO_AUTH</item>\n      <item>GSLC_SSL_ONEWAY_AUTH</item>\n      <item>GSLC_SSL_TWOWAY_AUTH</item>\n      <item>GUPNP_CONTROL_ERROR_ACTION_FAILED</item>\n      <item>GUPNP_CONTROL_ERROR_INVALID_ACTION</item>\n      <item>GUPNP_CONTROL_ERROR_INVALID_ARGS</item>\n      <item>GUPNP_CONTROL_ERROR_OUT_OF_SYNC</item>\n      <item>GUPNP_SIGNAL_ACTION_INVOKED</item>\n      <item>GUPNP_SIGNAL_DEVICE_PROXY_AVAILABLE</item>\n      <item>GUPNP_SIGNAL_DEVICE_PROXY_UNAVAILABLE</item>\n      <item>GUPNP_SIGNAL_NOTIFY_FAILED</item>\n      <item>GUPNP_SIGNAL_SERVICE_PROXY_AVAILABLE</item>\n      <item>GUPNP_SIGNAL_SERVICE_PROXY_UNAVAILABLE</item>\n      <item>GUPNP_SIGNAL_SUBSCRIPTION_LOST</item>\n      <item>GUPNP_TYPE_BOOLEAN</item>\n      <item>GUPNP_TYPE_DOUBLE</item>\n      <item>GUPNP_TYPE_FLOAT</item>\n      <item>GUPNP_TYPE_INT</item>\n      <item>GUPNP_TYPE_LONG</item>\n      <item>GUPNP_TYPE_STRING</item>\n      <item>HASH_HMAC</item>\n      <item>HTML_ENTITIES</item>\n      <item>HTML_SPECIALCHARS</item>\n      <item>IBASE_BKP_CONVERT</item>\n      <item>IBASE_BKP_IGNORE_CHECKSUMS</item>\n      <item>IBASE_BKP_IGNORE_LIMBO</item>\n      <item>IBASE_BKP_METADATA_ONLY</item>\n      <item>IBASE_BKP_NON_TRANSPORTABLE</item>\n      <item>IBASE_BKP_NO_GARBAGE_COLLECT</item>\n      <item>IBASE_BKP_OLD_DESCRIPTIONS</item>\n      <item>IBASE_PRP_ACCESS_MODE</item>\n      <item>IBASE_PRP_ACTIVATE</item>\n      <item>IBASE_PRP_AM_READONLY</item>\n      <item>IBASE_PRP_AM_READWRITE</item>\n      <item>IBASE_PRP_DB_ONLINE</item>\n      <item>IBASE_PRP_DENY_NEW_ATTACHMENTS</item>\n      <item>IBASE_PRP_DENY_NEW_TRANSACTIONS</item>\n      <item>IBASE_PRP_PAGE_BUFFERS</item>\n      <item>IBASE_PRP_RES</item>\n      <item>IBASE_PRP_RESERVE_SPACE</item>\n      <item>IBASE_PRP_RES_USE_FULL</item>\n      <item>IBASE_PRP_SET_SQL_DIALECT</item>\n      <item>IBASE_PRP_SHUTDOWN_DB</item>\n      <item>IBASE_PRP_SWEEP_INTERVAL</item>\n      <item>IBASE_PRP_WM_ASYNC</item>\n      <item>IBASE_PRP_WM_SYNC</item>\n      <item>IBASE_PRP_WRITE_MODE</item>\n      <item>IBASE_REC_VERSION</item>\n      <item>IBASE_RES_CREATE</item>\n      <item>IBASE_RES_DEACTIVATE_IDX</item>\n      <item>IBASE_RES_NO_SHADOW</item>\n      <item>IBASE_RES_NO_VALIDITY</item>\n      <item>IBASE_RES_ONE_AT_A_TIME</item>\n      <item>IBASE_RES_REPLACE</item>\n      <item>IBASE_RES_USE_ALL_SPACE</item>\n      <item>IBASE_RPR_CHECK_DB</item>\n      <item>IBASE_RPR_FULL</item>\n      <item>IBASE_RPR_IGNORE_CHECKSUM</item>\n      <item>IBASE_RPR_KILL_SHADOWS</item>\n      <item>IBASE_RPR_MEND_DB</item>\n      <item>IBASE_RPR_SWEEP_DB</item>\n      <item>IBASE_RPR_VALIDATE_DB</item>\n      <item>IBASE_STS_DATA_PAGES</item>\n      <item>IBASE_STS_DB_LOG</item>\n      <item>IBASE_STS_HDR_PAGES</item>\n      <item>IBASE_STS_IDX_PAGES</item>\n      <item>IBASE_STS_SYS_RELATIONS</item>\n      <item>IBASE_SVC_GET_ENV</item>\n      <item>IBASE_SVC_GET_ENV_LOCK</item>\n      <item>IBASE_SVC_GET_ENV_MSG</item>\n      <item>IBASE_SVC_GET_USERS</item>\n      <item>IBASE_SVC_IMPLEMENTATION</item>\n      <item>IBASE_SVC_SERVER_VERSION</item>\n      <item>IBASE_SVC_SVR_DB_INFO</item>\n      <item>IBASE_SVC_USER_DBPATH</item>\n      <item>IBASE_TEXT</item>\n      <item>ICONV_IMPL</item>\n      <item>ICONV_MIME_DECODE_CONTINUE_ON_ERROR</item>\n      <item>ICONV_MIME_DECODE_STRICT</item>\n      <item>ICONV_VERSION</item>\n      <item>ID3_BEST</item>\n      <item>ID3_V1_0</item>\n      <item>ID3_V1_1</item>\n      <item>ID3_V2_1</item>\n      <item>ID3_V2_2</item>\n      <item>ID3_V2_3</item>\n      <item>ID3_V2_4</item>\n      <item>IDNA_ALLOW_UNASSIGNED</item>\n      <item>IDNA_CHECK_BIDI</item>\n      <item>IDNA_CHECK_CONTEXTJ</item>\n      <item>IDNA_DEFAULT</item>\n      <item>IDNA_ERROR_EMPTY_LABEL</item>\n      <item>IDNA_NONTRANSITIONAL_TO_ASCII</item>\n      <item>IDNA_NONTRANSITIONAL_TO_UNICODE</item>\n      <item>IDNA_USE_STD3_RULES</item>\n      <item>IFX_HOLD</item>\n      <item>IFX_LO_APPEND</item>\n      <item>IFX_LO_BUFFER</item>\n      <item>IFX_LO_NOBUFFER</item>\n      <item>IFX_LO_RDONLY</item>\n      <item>IFX_LO_RDWR</item>\n      <item>IFX_LO_WRONLY</item>\n      <item>IFX_SCROLL</item>\n      <item>IIS_ANONYMOUS</item>\n      <item>IIS_BASIC</item>\n      <item>IIS_EXECUTE</item>\n      <item>IIS_NTLM</item>\n      <item>IIS_PAUSED</item>\n      <item>IIS_READ</item>\n      <item>IIS_RUNNING</item>\n      <item>IIS_SCRIPT</item>\n      <item>IIS_STARTING</item>\n      <item>IIS_STOPPED</item>\n      <item>IIS_WRITE</item>\n      <item>ILL_BADSTK</item>\n      <item>ILL_COPROC</item>\n      <item>ILL_ILLADR</item>\n      <item>ILL_ILLOPC</item>\n      <item>ILL_ILLOPN</item>\n      <item>ILL_ILLTRP</item>\n      <item>ILL_PRVOPC</item>\n      <item>ILL_PRVREG</item>\n      <item>IMAGETYPE_BMP</item>\n      <item>IMAGETYPE_GIF</item>\n      <item>IMAGETYPE_ICO</item>\n      <item>IMAGETYPE_IFF</item>\n      <item>IMAGETYPE_JB2</item>\n      <item>IMAGETYPE_JP2</item>\n      <item>IMAGETYPE_JPC</item>\n      <item>IMAGETYPE_JPEG</item>\n      <item>IMAGETYPE_JPEG2000</item>\n      <item>IMAGETYPE_JPX</item>\n      <item>IMAGETYPE_PNG</item>\n      <item>IMAGETYPE_PSD</item>\n      <item>IMAGETYPE_SWC</item>\n      <item>IMAGETYPE_SWF</item>\n      <item>IMAGETYPE_TIFF_II</item>\n      <item>IMAGETYPE_TIFF_MM</item>\n      <item>IMAGETYPE_WBMP</item>\n      <item>IMAGETYPE_WEBP</item>\n      <item>IMAGETYPE_XBM</item>\n      <item>IMAP_CLOSETIMEOUT</item>\n      <item>IMAP_GC_ELT</item>\n      <item>IMAP_GC_ENV</item>\n      <item>IMAP_GC_TEXTS</item>\n      <item>IMAP_OPENTIMEOUT</item>\n      <item>IMAP_READTIMEOUT</item>\n      <item>IMAP_WRITETIMEOUT</item>\n      <item>IMG_AFFINE_ROTATE</item>\n      <item>IMG_AFFINE_SCALE</item>\n      <item>IMG_AFFINE_SHEAR_HORIZONTAL</item>\n      <item>IMG_AFFINE_SHEAR_VERTICAL</item>\n      <item>IMG_AFFINE_TRANSLATE</item>\n      <item>IMG_ARC_CHORD</item>\n      <item>IMG_ARC_EDGED</item>\n      <item>IMG_ARC_NOFILL</item>\n      <item>IMG_ARC_PIE</item>\n      <item>IMG_ARC_ROUNDED</item>\n      <item>IMG_BELL</item>\n      <item>IMG_BESSEL</item>\n      <item>IMG_BICUBIC</item>\n      <item>IMG_BICUBIC_FIXED</item>\n      <item>IMG_BILINEAR_FIXED</item>\n      <item>IMG_BLACKMAN</item>\n      <item>IMG_BMP</item>\n      <item>IMG_BOX</item>\n      <item>IMG_BSPLINE</item>\n      <item>IMG_CATMULLROM</item>\n      <item>IMG_COLOR_BRUSHED</item>\n      <item>IMG_COLOR_STYLED</item>\n      <item>IMG_COLOR_STYLEDBRUSHED</item>\n      <item>IMG_COLOR_TILED</item>\n      <item>IMG_COLOR_TRANSPARENT</item>\n      <item>IMG_EFFECT_ALPHABLEND</item>\n      <item>IMG_EFFECT_MULTIPLY</item>\n      <item>IMG_EFFECT_NORMAL</item>\n      <item>IMG_EFFECT_OVERLAY</item>\n      <item>IMG_EFFECT_REPLACE</item>\n      <item>IMG_FILTER_BRIGHTNESS</item>\n      <item>IMG_FILTER_COLORIZE</item>\n      <item>IMG_FILTER_CONTRAST</item>\n      <item>IMG_FILTER_EDGEDETECT</item>\n      <item>IMG_FILTER_EMBOSS</item>\n      <item>IMG_FILTER_GAUSSIAN_BLUR</item>\n      <item>IMG_FILTER_GRAYSCALE</item>\n      <item>IMG_FILTER_MEAN_REMOVAL</item>\n      <item>IMG_FILTER_NEGATE</item>\n      <item>IMG_FILTER_PIXELATE</item>\n      <item>IMG_FILTER_SELECTIVE_BLUR</item>\n      <item>IMG_FILTER_SMOOTH</item>\n      <item>IMG_FLIP_BOTH</item>\n      <item>IMG_FLIP_HORIZONTAL</item>\n      <item>IMG_FLIP_VERTICAL</item>\n      <item>IMG_GAUSSIAN</item>\n      <item>IMG_GD2_COMPRESSED</item>\n      <item>IMG_GD2_RAW</item>\n      <item>IMG_GENERALIZED_CUBIC</item>\n      <item>IMG_GIF</item>\n      <item>IMG_HAMMING</item>\n      <item>IMG_HANNING</item>\n      <item>IMG_HERMITE</item>\n      <item>IMG_JPEG</item>\n      <item>IMG_JPG</item>\n      <item>IMG_MITCHELL</item>\n      <item>IMG_NEAREST_NEIGHBOUR</item>\n      <item>IMG_PNG</item>\n      <item>IMG_POWER</item>\n      <item>IMG_QUADRATIC</item>\n      <item>IMG_SINC</item>\n      <item>IMG_TRIANGLE</item>\n      <item>IMG_WBMP</item>\n      <item>IMG_WEBP</item>\n      <item>IMG_WEIGHTED4</item>\n      <item>IMG_XPM</item>\n      <item>INF</item>\n      <item>INFO_ALL</item>\n      <item>INFO_CONFIGURATION</item>\n      <item>INFO_CREDITS</item>\n      <item>INFO_ENVIRONMENT</item>\n      <item>INFO_GENERAL</item>\n      <item>INFO_LICENSE</item>\n      <item>INFO_MODULES</item>\n      <item>INFO_VARIABLES</item>\n      <item>INGRES_API_VERSION</item>\n      <item>INGRES_ASSOC</item>\n      <item>INGRES_BOTH</item>\n      <item>INGRES_CURSOR_READONLY</item>\n      <item>INGRES_CURSOR_UPDATE</item>\n      <item>INGRES_DATE_DMY</item>\n      <item>INGRES_DATE_FINNISH</item>\n      <item>INGRES_DATE_GERMAN</item>\n      <item>INGRES_DATE_ISO</item>\n      <item>INGRES_DATE_ISO4</item>\n      <item>INGRES_DATE_MDY</item>\n      <item>INGRES_DATE_MULTINATIONAL</item>\n      <item>INGRES_DATE_MULTINATIONAL4</item>\n      <item>INGRES_DATE_YMD</item>\n      <item>INGRES_EXT_VERSION</item>\n      <item>INGRES_MONEY_LEADING</item>\n      <item>INGRES_MONEY_TRAILING</item>\n      <item>INGRES_NUM</item>\n      <item>INGRES_STRUCTURE_BTREE</item>\n      <item>INGRES_STRUCTURE_CBTREE</item>\n      <item>INGRES_STRUCTURE_CHASH</item>\n      <item>INGRES_STRUCTURE_CHEAP</item>\n      <item>INGRES_STRUCTURE_CISAM</item>\n      <item>INGRES_STRUCTURE_HASH</item>\n      <item>INGRES_STRUCTURE_HEAP</item>\n      <item>INGRES_STRUCTURE_ISAM</item>\n      <item>INI_SCANNER_NORMAL</item>\n      <item>INI_SCANNER_RAW</item>\n      <item>INI_SCANNER_TYPED</item>\n      <item>INPUT_COOKIE</item>\n      <item>INPUT_ENV</item>\n      <item>INPUT_GET</item>\n      <item>INPUT_POST</item>\n      <item>INPUT_REQUEST</item>\n      <item>INPUT_SERVER</item>\n      <item>INPUT_SESSION</item>\n      <item>INTL_IDNA_VARIANT_2003</item>\n      <item>INTL_IDNA_VARIANT_UTS46</item>\n      <item>INTL_MAX_LOCALE_LEN</item>\n      <item>INT_CURR_SYMBOL</item>\n      <item>INT_FRAC_DIGITS</item>\n      <item>INVALIDACL</item>\n      <item>INVALIDCALLBACK</item>\n      <item>INVALIDSTATE</item>\n      <item>IN_ACCESS</item>\n      <item>IN_ALL_EVENTS</item>\n      <item>IN_ATTRIB</item>\n      <item>IN_CLOSE</item>\n      <item>IN_CLOSE_NOWRITE</item>\n      <item>IN_CLOSE_WRITE</item>\n      <item>IN_CREATE</item>\n      <item>IN_DELETE</item>\n      <item>IN_DELETE_SELF</item>\n      <item>IN_DONT_FOLLOW</item>\n      <item>IN_IGNORED</item>\n      <item>IN_ISDIR</item>\n      <item>IN_MASK_ADD</item>\n      <item>IN_MODIFY</item>\n      <item>IN_MOVE</item>\n      <item>IN_MOVED_FROM</item>\n      <item>IN_MOVED_TO</item>\n      <item>IN_MOVE_SELF</item>\n      <item>IN_ONESHOT</item>\n      <item>IN_ONLYDIR</item>\n      <item>IN_OPEN</item>\n      <item>IN_Q_OVERFLOW</item>\n      <item>IN_UNMOUNT</item>\n      <item>IPV6_MULTICAST_HOPS</item>\n      <item>IPV6_MULTICAST_IF</item>\n      <item>IPV6_MULTICAST_LOOP</item>\n      <item>IP_MULTICAST_IF</item>\n      <item>IP_MULTICAST_LOOP</item>\n      <item>IP_MULTICAST_TTL</item>\n      <item>JSON_BIGINT_AS_STRING</item>\n      <item>JSON_ERROR_CTRL_CHAR</item>\n      <item>JSON_ERROR_DEPTH</item>\n      <item>JSON_ERROR_INF_OR_NAN</item>\n      <item>JSON_ERROR_INVALID_PROPERTY_NAME</item>\n      <item>JSON_ERROR_NONE</item>\n      <item>JSON_ERROR_RECURSION</item>\n      <item>JSON_ERROR_STATE_MISMATCH</item>\n      <item>JSON_ERROR_SYNTAX</item>\n      <item>JSON_ERROR_UNSUPPORTED_TYPE</item>\n      <item>JSON_ERROR_UTF8</item>\n      <item>JSON_ERROR_UTF16</item>\n      <item>JSON_FORCE_OBJECT</item>\n      <item>JSON_HEX_AMP</item>\n      <item>JSON_HEX_APOS</item>\n      <item>JSON_HEX_QUOT</item>\n      <item>JSON_HEX_TAG</item>\n      <item>JSON_NUMERIC_CHECK</item>\n      <item>JSON_OBJECT_AS_ARRAY</item>\n      <item>JSON_PARTIAL_OUTPUT_ON_ERROR</item>\n      <item>JSON_PRESERVE_ZERO_FRACTION</item>\n      <item>JSON_PRETTY_PRINT</item>\n      <item>JSON_THROW_ON_ERROR</item>\n      <item>JSON_UNESCAPED_LINE_TERMINATORS</item>\n      <item>JSON_UNESCAPED_SLASHES</item>\n      <item>JSON_UNESCAPED_UNICODE</item>\n      <item>LATT_HASCHILDREN</item>\n      <item>LATT_HASNOCHILDREN</item>\n      <item>LATT_MARKED</item>\n      <item>LATT_NOINFERIORS</item>\n      <item>LATT_NOSELECT</item>\n      <item>LATT_REFERRAL</item>\n      <item>LATT_UNMARKED</item>\n      <item>LC_ALL</item>\n      <item>LC_COLLATE</item>\n      <item>LC_CTYPE</item>\n      <item>LC_MESSAGES</item>\n      <item>LC_MONETARY</item>\n      <item>LC_NUMERIC</item>\n      <item>LC_TIME</item>\n      <item>LDAP_CONTROL_ASSERT</item>\n      <item>LDAP_CONTROL_AUTHZID_REQUEST</item>\n      <item>LDAP_CONTROL_AUTHZID_RESPONSE</item>\n      <item>LDAP_CONTROL_DONTUSECOPY</item>\n      <item>LDAP_CONTROL_MANAGEDSAIT</item>\n      <item>LDAP_CONTROL_PAGEDRESULTS</item>\n      <item>LDAP_CONTROL_PASSWORDPOLICYREQUEST</item>\n      <item>LDAP_CONTROL_PASSWORDPOLICYRESPONSE</item>\n      <item>LDAP_CONTROL_POST_READ</item>\n      <item>LDAP_CONTROL_PRE_READ</item>\n      <item>LDAP_CONTROL_PROXY_AUTHZ</item>\n      <item>LDAP_CONTROL_SORTREQUEST</item>\n      <item>LDAP_CONTROL_SORTRESPONSE</item>\n      <item>LDAP_CONTROL_SUBENTRIES</item>\n      <item>LDAP_CONTROL_SYNC</item>\n      <item>LDAP_CONTROL_SYNC_DONE</item>\n      <item>LDAP_CONTROL_SYNC_STATE</item>\n      <item>LDAP_CONTROL_VALUESRETURNFILTER</item>\n      <item>LDAP_CONTROL_VLVREQUEST</item>\n      <item>LDAP_CONTROL_VLVRESPONSE</item>\n      <item>LDAP_CONTROL_X_DOMAIN_SCOPE</item>\n      <item>LDAP_CONTROL_X_EXTENDED_DN</item>\n      <item>LDAP_CONTROL_X_INCREMENTAL_VALUES</item>\n      <item>LDAP_CONTROL_X_PERMISSIVE_MODIFY</item>\n      <item>LDAP_CONTROL_X_SEARCH_OPTIONS</item>\n      <item>LDAP_CONTROL_X_TREE_DELETE</item>\n      <item>LDAP_DEREF_ALWAYS</item>\n      <item>LDAP_DEREF_FINDING</item>\n      <item>LDAP_DEREF_NEVER</item>\n      <item>LDAP_DEREF_SEARCHING</item>\n      <item>LDAP_EXOP_MODIFY_PASSWD</item>\n      <item>LDAP_EXOP_REFRESH</item>\n      <item>LDAP_EXOP_START_TLS</item>\n      <item>LDAP_EXOP_TURN</item>\n      <item>LDAP_EXOP_WHO_AM_I</item>\n      <item>LDAP_OPT_CLIENT_CONTROLS</item>\n      <item>LDAP_OPT_DEBUG_LEVEL</item>\n      <item>LDAP_OPT_DEREF</item>\n      <item>LDAP_OPT_DIAGNOSTIC_MESSAGE</item>\n      <item>LDAP_OPT_ERROR_NUMBER</item>\n      <item>LDAP_OPT_ERROR_STRING</item>\n      <item>LDAP_OPT_HOST_NAME</item>\n      <item>LDAP_OPT_MATCHED_DN</item>\n      <item>LDAP_OPT_NETWORK_TIMEOUT</item>\n      <item>LDAP_OPT_PROTOCOL_VERSION</item>\n      <item>LDAP_OPT_REFERRALS</item>\n      <item>LDAP_OPT_RESTART</item>\n      <item>LDAP_OPT_SERVER_CONTROLS</item>\n      <item>LDAP_OPT_SIZELIMIT</item>\n      <item>LDAP_OPT_TIMELIMIT</item>\n      <item>LDAP_OPT_X_KEEPALIVE_IDLE</item>\n      <item>LDAP_OPT_X_KEEPALIVE_INTERVAL</item>\n      <item>LDAP_OPT_X_KEEPALIVE_PROBES</item>\n      <item>LDAP_OPT_X_TLS_CACERTDIR</item>\n      <item>LDAP_OPT_X_TLS_CACERTFILE</item>\n      <item>LDAP_OPT_X_TLS_CERTFILE</item>\n      <item>LDAP_OPT_X_TLS_CIPHER_SUITE</item>\n      <item>LDAP_OPT_X_TLS_CRLCHECK</item>\n      <item>LDAP_OPT_X_TLS_CRLFILE</item>\n      <item>LDAP_OPT_X_TLS_CRL_ALL</item>\n      <item>LDAP_OPT_X_TLS_CRL_NONE</item>\n      <item>LDAP_OPT_X_TLS_CRL_PEER</item>\n      <item>LDAP_OPT_X_TLS_DHFILE</item>\n      <item>LDAP_OPT_X_TLS_KEYFILE</item>\n      <item>LDAP_OPT_X_TLS_KEYILE</item>\n      <item>LDAP_OPT_X_TLS_PACKAGE</item>\n      <item>LDAP_OPT_X_TLS_PROTOCOL_MIN</item>\n      <item>LDAP_OPT_X_TLS_RANDOM_FILE</item>\n      <item>LDAP_OPT_X_TLS_REQUIRE_CERT</item>\n      <item>LIBEXSLT_DOTTED_VERSION</item>\n      <item>LIBEXSLT_VERSION</item>\n      <item>LIBXML_BIGLINES</item>\n      <item>LIBXML_COMPACT</item>\n      <item>LIBXML_DOTTED_VERSION</item>\n      <item>LIBXML_DTDATTR</item>\n      <item>LIBXML_DTDLOAD</item>\n      <item>LIBXML_DTDVALID</item>\n      <item>LIBXML_ERR_ERROR</item>\n      <item>LIBXML_ERR_FATAL</item>\n      <item>LIBXML_ERR_NONE</item>\n      <item>LIBXML_ERR_WARNING</item>\n      <item>LIBXML_HTML_NODEFDTD</item>\n      <item>LIBXML_HTML_NOIMPLIED</item>\n      <item>LIBXML_NOBLANKS</item>\n      <item>LIBXML_NOCDATA</item>\n      <item>LIBXML_NOEMPTYTAG</item>\n      <item>LIBXML_NOENT</item>\n      <item>LIBXML_NOERROR</item>\n      <item>LIBXML_NONET</item>\n      <item>LIBXML_NOWARNING</item>\n      <item>LIBXML_NOXMLDECL</item>\n      <item>LIBXML_NSCLEAN</item>\n      <item>LIBXML_PARSEHUGE</item>\n      <item>LIBXML_PEDANTIC</item>\n      <item>LIBXML_SCHEMA_CREATE</item>\n      <item>LIBXML_VERSION</item>\n      <item>LIBXML_XINCLUDE</item>\n      <item>LIBXSLT_DOTTED_VERSION</item>\n      <item>LIBXSLT_VERSION</item>\n      <item>LOCK_EX</item>\n      <item>LOCK_NB</item>\n      <item>LOCK_SH</item>\n      <item>LOCK_UN</item>\n      <item>LOG_ALERT</item>\n      <item>LOG_AUTH</item>\n      <item>LOG_AUTHPRIV</item>\n      <item>LOG_CONS</item>\n      <item>LOG_CRIT</item>\n      <item>LOG_CRON</item>\n      <item>LOG_DAEMON</item>\n      <item>LOG_DEBUG</item>\n      <item>LOG_EMERG</item>\n      <item>LOG_ERR</item>\n      <item>LOG_INFO</item>\n      <item>LOG_KERN</item>\n      <item>LOG_LEVEL_DEBUG</item>\n      <item>LOG_LEVEL_ERROR</item>\n      <item>LOG_LEVEL_INFO</item>\n      <item>LOG_LEVEL_WARN</item>\n      <item>LOG_LOCAL0</item>\n      <item>LOG_LOCAL1</item>\n      <item>LOG_LOCAL2</item>\n      <item>LOG_LOCAL3</item>\n      <item>LOG_LOCAL4</item>\n      <item>LOG_LOCAL5</item>\n      <item>LOG_LOCAL6</item>\n      <item>LOG_LOCAL7</item>\n      <item>LOG_LPR</item>\n      <item>LOG_MAIL</item>\n      <item>LOG_NDELAY</item>\n      <item>LOG_NEWS</item>\n      <item>LOG_NOTICE</item>\n      <item>LOG_NOWAIT</item>\n      <item>LOG_ODELAY</item>\n      <item>LOG_PERROR</item>\n      <item>LOG_PID</item>\n      <item>LOG_SYSLOG</item>\n      <item>LOG_USER</item>\n      <item>LOG_UUCP</item>\n      <item>LOG_WARNING</item>\n      <item>MAILPARSE_EXTRACT_OUTPUT</item>\n      <item>MAILPARSE_EXTRACT_RETURN</item>\n      <item>MAILPARSE_EXTRACT_STREAM</item>\n      <item>MARSHALLINGERROR</item>\n      <item>MATCH</item>\n      <item>MAXDB_APPLICATION</item>\n      <item>MAXDB_APPVERSION</item>\n      <item>MAXDB_COMPNAME</item>\n      <item>MAXDB_CURSORPREFIX</item>\n      <item>MAXDB_ISOLATIONLEVEL</item>\n      <item>MAXDB_PACKETCOUNT</item>\n      <item>MAXDB_SQLMODE</item>\n      <item>MAXDB_STATEMENTCACHESIZE</item>\n      <item>MAXDB_TIMEOUT</item>\n      <item>MAXDB_UNICODE</item>\n      <item>MB_CASE_FOLD</item>\n      <item>MB_CASE_FOLD_SIMPLE</item>\n      <item>MB_CASE_LOWER</item>\n      <item>MB_CASE_LOWER_SIMPLE</item>\n      <item>MB_CASE_TITLE</item>\n      <item>MB_CASE_TITLE_SIMPLE</item>\n      <item>MB_CASE_UPPER</item>\n      <item>MB_OVERLOAD_MAIL</item>\n      <item>MB_OVERLOAD_REGEX</item>\n      <item>MB_OVERLOAD_STRING</item>\n      <item>MCAST_BLOCK_SOURCE</item>\n      <item>MCAST_JOIN_GROUP</item>\n      <item>MCAST_JOIN_SOURCE_GROUP</item>\n      <item>MCAST_LEAVE_GROUP</item>\n      <item>MCAST_LEAVE_SOURCE_GROUP</item>\n      <item>MCAST_UNBLOCK_SOURCE</item>\n      <item>MCRYPT_3DES</item>\n      <item>MCRYPT_ARCFOUR</item>\n      <item>MCRYPT_ARCFOUR_IV</item>\n      <item>MCRYPT_BLOWFISH</item>\n      <item>MCRYPT_CAST_128</item>\n      <item>MCRYPT_CAST_256</item>\n      <item>MCRYPT_CRYPT</item>\n      <item>MCRYPT_DECRYPT</item>\n      <item>MCRYPT_DES</item>\n      <item>MCRYPT_DES_COMPAT</item>\n      <item>MCRYPT_DEV_RANDOM</item>\n      <item>MCRYPT_DEV_URANDOM</item>\n      <item>MCRYPT_ENCRYPT</item>\n      <item>MCRYPT_ENIGMA</item>\n      <item>MCRYPT_GOST</item>\n      <item>MCRYPT_IDEA</item>\n      <item>MCRYPT_LOKI97</item>\n      <item>MCRYPT_MARS</item>\n      <item>MCRYPT_MODE_CBC</item>\n      <item>MCRYPT_MODE_CFB</item>\n      <item>MCRYPT_MODE_ECB</item>\n      <item>MCRYPT_MODE_NOFB</item>\n      <item>MCRYPT_MODE_OFB</item>\n      <item>MCRYPT_MODE_STREAM</item>\n      <item>MCRYPT_PANAMA</item>\n      <item>MCRYPT_RAND</item>\n      <item>MCRYPT_RC2</item>\n      <item>MCRYPT_RC4</item>\n      <item>MCRYPT_RC6</item>\n      <item>MCRYPT_RC6_128</item>\n      <item>MCRYPT_RC6_192</item>\n      <item>MCRYPT_RC6_256</item>\n      <item>MCRYPT_RIJNDAEL_128</item>\n      <item>MCRYPT_RIJNDAEL_192</item>\n      <item>MCRYPT_RIJNDAEL_256</item>\n      <item>MCRYPT_SAFER64</item>\n      <item>MCRYPT_SAFER128</item>\n      <item>MCRYPT_SAFERPLUS</item>\n      <item>MCRYPT_SERPENT</item>\n      <item>MCRYPT_SERPENT_128</item>\n      <item>MCRYPT_SERPENT_192</item>\n      <item>MCRYPT_SERPENT_256</item>\n      <item>MCRYPT_SKIPJACK</item>\n      <item>MCRYPT_TEAN</item>\n      <item>MCRYPT_THREEWAY</item>\n      <item>MCRYPT_TRIPLEDES</item>\n      <item>MCRYPT_TWOFISH</item>\n      <item>MCRYPT_TWOFISH128</item>\n      <item>MCRYPT_TWOFISH192</item>\n      <item>MCRYPT_TWOFISH256</item>\n      <item>MCRYPT_WAKE</item>\n      <item>MCRYPT_XTEA</item>\n      <item>MEMCACHE_COMPRESSED</item>\n      <item>MEMCACHE_HAVE_SESSION</item>\n      <item>MEMCACHE_USER1</item>\n      <item>MEMCACHE_USER2</item>\n      <item>MEMCACHE_USER3</item>\n      <item>MEMCACHE_USER4</item>\n      <item>MEMORY_TRACE</item>\n      <item>MHASH_ADLER32</item>\n      <item>MHASH_CRC32</item>\n      <item>MHASH_CRC32B</item>\n      <item>MHASH_GOST</item>\n      <item>MHASH_HAVAL128</item>\n      <item>MHASH_HAVAL160</item>\n      <item>MHASH_HAVAL192</item>\n      <item>MHASH_HAVAL224</item>\n      <item>MHASH_HAVAL256</item>\n      <item>MHASH_MD2</item>\n      <item>MHASH_MD4</item>\n      <item>MHASH_MD5</item>\n      <item>MHASH_RIPEMD128</item>\n      <item>MHASH_RIPEMD256</item>\n      <item>MHASH_RIPEMD320</item>\n      <item>MHASH_SHA1</item>\n      <item>MHASH_SHA192</item>\n      <item>MHASH_SHA224</item>\n      <item>MHASH_SHA256</item>\n      <item>MHASH_SHA384</item>\n      <item>MHASH_SHA512</item>\n      <item>MHASH_SNEFRU128</item>\n      <item>MHASH_SNEFRU256</item>\n      <item>MHASH_TIGER</item>\n      <item>MHASH_TIGER128</item>\n      <item>MHASH_TIGER160</item>\n      <item>MHASH_WHIRLPOOL</item>\n      <item>MING_NEW</item>\n      <item>MING_ZLIB</item>\n      <item>MK_E_UNAVAILABLE</item>\n      <item>MONGODB_STABILITY</item>\n      <item>MONGODB_VERSION</item>\n      <item>MONGO_STREAMS</item>\n      <item>MONGO_STREAM_NOTIFY_IO_COMPLETED</item>\n      <item>MONGO_STREAM_NOTIFY_IO_PROGRESS</item>\n      <item>MONGO_STREAM_NOTIFY_IO_READ</item>\n      <item>MONGO_STREAM_NOTIFY_IO_WRITE</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_BATCHINSERT</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_CMD_DELETE</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_CMD_INSERT</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_CMD_UPDATE</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_DELETE</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_GETMORE</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_INSERT</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_KILLCURSOR</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_QUERY</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_RESPONSE_HEADER</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_UPDATE</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_WRITE_BATCH</item>\n      <item>MONGO_STREAM_NOTIFY_LOG_WRITE_REPLY</item>\n      <item>MONGO_STREAM_NOTIFY_TYPE_IO_INIT</item>\n      <item>MONGO_STREAM_NOTIFY_TYPE_LOG</item>\n      <item>MONGO_SUPPORTS_AUTH_MECHANISM_GSSAPI</item>\n      <item>MONGO_SUPPORTS_AUTH_MECHANISM_MONGODB_CR</item>\n      <item>MONGO_SUPPORTS_AUTH_MECHANISM_MONGODB_X509</item>\n      <item>MONGO_SUPPORTS_AUTH_MECHANISM_PLAIN</item>\n      <item>MONGO_SUPPORTS_SSL</item>\n      <item>MONGO_SUPPORTS_STREAMS</item>\n      <item>MON_1</item>\n      <item>MON_2</item>\n      <item>MON_3</item>\n      <item>MON_4</item>\n      <item>MON_5</item>\n      <item>MON_6</item>\n      <item>MON_7</item>\n      <item>MON_8</item>\n      <item>MON_9</item>\n      <item>MON_10</item>\n      <item>MON_11</item>\n      <item>MON_12</item>\n      <item>MON_DECIMAL_POINT</item>\n      <item>MON_GROUPING</item>\n      <item>MON_THOUSANDS_SEP</item>\n      <item>MSG_DONTROUTE</item>\n      <item>MSG_DONTWAIT</item>\n      <item>MSG_EOF</item>\n      <item>MSG_EOR</item>\n      <item>MSG_EXCEPT</item>\n      <item>MSG_IPC_NOWAIT</item>\n      <item>MSG_NOERROR</item>\n      <item>MSG_OOB</item>\n      <item>MSG_PEEK</item>\n      <item>MSG_WAITALL</item>\n      <item>MSQL_ASSOC</item>\n      <item>MSQL_BOTH</item>\n      <item>MSQL_NUM</item>\n      <item>MSSQL_ASSOC</item>\n      <item>MSSQL_BOTH</item>\n      <item>MSSQL_NUM</item>\n      <item>MT_RAND_MT19937</item>\n      <item>MT_RAND_PHP</item>\n      <item>MYSQLI_ASSOC</item>\n      <item>MYSQLI_AUTO_INCREMENT_FLAG</item>\n      <item>MYSQLI_BINARY_FLAG</item>\n      <item>MYSQLI_BLOB_FLAG</item>\n      <item>MYSQLI_BOTH</item>\n      <item>MYSQLI_CLIENT_COMPRESS</item>\n      <item>MYSQLI_CLIENT_FOUND_ROWS</item>\n      <item>MYSQLI_CLIENT_IGNORE_SPACE</item>\n      <item>MYSQLI_CLIENT_INTERACTIVE</item>\n      <item>MYSQLI_CLIENT_MULTI_QUERIES</item>\n      <item>MYSQLI_CLIENT_NO_SCHEMA</item>\n      <item>MYSQLI_CLIENT_SSL</item>\n      <item>MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT</item>\n      <item>MYSQLI_CURSOR_TYPE_FOR_UPDATE</item>\n      <item>MYSQLI_CURSOR_TYPE_NO_CURSOR</item>\n      <item>MYSQLI_CURSOR_TYPE_READ_ONLY</item>\n      <item>MYSQLI_CURSOR_TYPE_SCROLLABLE</item>\n      <item>MYSQLI_DATA_TRUNCATED</item>\n      <item>MYSQLI_DEBUG_TRACE_ENABLED</item>\n      <item>MYSQLI_ENUM_FLAG</item>\n      <item>MYSQLI_GROUP_FLAG</item>\n      <item>MYSQLI_INIT_COMMAND</item>\n      <item>MYSQLI_MULTIPLE_KEY_FLAG</item>\n      <item>MYSQLI_NEED_DATA</item>\n      <item>MYSQLI_NOT_NULL_FLAG</item>\n      <item>MYSQLI_NO_DATA</item>\n      <item>MYSQLI_NUM</item>\n      <item>MYSQLI_NUM_FLAG</item>\n      <item>MYSQLI_OPT_CONNECT_TIMEOUT</item>\n      <item>MYSQLI_OPT_INT_AND_FLOAT_NATIVE</item>\n      <item>MYSQLI_OPT_LOCAL_INFILE</item>\n      <item>MYSQLI_OPT_NET_CMD_BUFFER_SIZE</item>\n      <item>MYSQLI_OPT_NET_READ_BUFFER_SIZE</item>\n      <item>MYSQLI_OPT_SSL_VERIFY_SERVER_CERT</item>\n      <item>MYSQLI_PART_KEY_FLAG</item>\n      <item>MYSQLI_PRI_KEY_FLAG</item>\n      <item>MYSQLI_READ_DEFAULT_FILE</item>\n      <item>MYSQLI_READ_DEFAULT_GROUP</item>\n      <item>MYSQLI_REFRESH_GRANT</item>\n      <item>MYSQLI_REFRESH_HOSTS</item>\n      <item>MYSQLI_REFRESH_LOG</item>\n      <item>MYSQLI_REFRESH_MASTER</item>\n      <item>MYSQLI_REFRESH_SLAVE</item>\n      <item>MYSQLI_REFRESH_STATUS</item>\n      <item>MYSQLI_REFRESH_TABLES</item>\n      <item>MYSQLI_REFRESH_THREADS</item>\n      <item>MYSQLI_REPORT_ALL</item>\n      <item>MYSQLI_REPORT_ERROR</item>\n      <item>MYSQLI_REPORT_INDEX</item>\n      <item>MYSQLI_REPORT_OFF</item>\n      <item>MYSQLI_REPORT_STRICT</item>\n      <item>MYSQLI_SERVER_PUBLIC_KEY</item>\n      <item>MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED</item>\n      <item>MYSQLI_SERVER_QUERY_NO_INDEX_USED</item>\n      <item>MYSQLI_SET_CHARSET_NAME</item>\n      <item>MYSQLI_SET_FLAG</item>\n      <item>MYSQLI_STMT_ATTR_CURSOR_TYPE</item>\n      <item>MYSQLI_STMT_ATTR_PREFETCH_ROWS</item>\n      <item>MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH</item>\n      <item>MYSQLI_STORE_RESULT</item>\n      <item>MYSQLI_STORE_RESULT_COPY_DATA</item>\n      <item>MYSQLI_TIMESTAMP_FLAG</item>\n      <item>MYSQLI_TRANS_COR_AND_CHAIN</item>\n      <item>MYSQLI_TRANS_COR_AND_NO_CHAIN</item>\n      <item>MYSQLI_TRANS_COR_NO_RELEASE</item>\n      <item>MYSQLI_TRANS_COR_RELEASE</item>\n      <item>MYSQLI_TRANS_START_CONSISTENT_SNAPSHOT</item>\n      <item>MYSQLI_TRANS_START_READ_ONLY</item>\n      <item>MYSQLI_TRANS_START_READ_WRITE</item>\n      <item>MYSQLI_TYPE_BIT</item>\n      <item>MYSQLI_TYPE_BLOB</item>\n      <item>MYSQLI_TYPE_CHAR</item>\n      <item>MYSQLI_TYPE_DATE</item>\n      <item>MYSQLI_TYPE_DATETIME</item>\n      <item>MYSQLI_TYPE_DECIMAL</item>\n      <item>MYSQLI_TYPE_DOUBLE</item>\n      <item>MYSQLI_TYPE_ENUM</item>\n      <item>MYSQLI_TYPE_FLOAT</item>\n      <item>MYSQLI_TYPE_GEOMETRY</item>\n      <item>MYSQLI_TYPE_INT24</item>\n      <item>MYSQLI_TYPE_INTERVAL</item>\n      <item>MYSQLI_TYPE_LONG</item>\n      <item>MYSQLI_TYPE_LONGLONG</item>\n      <item>MYSQLI_TYPE_LONG_BLOB</item>\n      <item>MYSQLI_TYPE_MEDIUM_BLOB</item>\n      <item>MYSQLI_TYPE_NEWDATE</item>\n      <item>MYSQLI_TYPE_NEWDECIMAL</item>\n      <item>MYSQLI_TYPE_NULL</item>\n      <item>MYSQLI_TYPE_SET</item>\n      <item>MYSQLI_TYPE_SHORT</item>\n      <item>MYSQLI_TYPE_STRING</item>\n      <item>MYSQLI_TYPE_TIME</item>\n      <item>MYSQLI_TYPE_TIMESTAMP</item>\n      <item>MYSQLI_TYPE_TINY</item>\n      <item>MYSQLI_TYPE_TINY_BLOB</item>\n      <item>MYSQLI_TYPE_VAR_STRING</item>\n      <item>MYSQLI_TYPE_YEAR</item>\n      <item>MYSQLI_UNIQUE_KEY_FLAG</item>\n      <item>MYSQLI_UNSIGNED_FLAG</item>\n      <item>MYSQLI_USE_RESULT</item>\n      <item>MYSQLI_ZEROFILL_FLAG</item>\n      <item>MYSQLND_MEMCACHE_DEFAULT_REGEXP</item>\n      <item>MYSQLND_MEMCACHE_VERSION</item>\n      <item>MYSQLND_MEMCACHE_VERSION_ID</item>\n      <item>MYSQLND_MS_LAST_USED_SWITCH</item>\n      <item>MYSQLND_MS_MASTER_SWITCH</item>\n      <item>MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL</item>\n      <item>MYSQLND_MS_QOS_CONSISTENCY_SESSION</item>\n      <item>MYSQLND_MS_QOS_CONSISTENCY_STRONG</item>\n      <item>MYSQLND_MS_QOS_OPTION_AGE</item>\n      <item>MYSQLND_MS_QOS_OPTION_GTID</item>\n      <item>MYSQLND_MS_QUERY_USE_LAST_USED</item>\n      <item>MYSQLND_MS_QUERY_USE_MASTER</item>\n      <item>MYSQLND_MS_QUERY_USE_SLAVE</item>\n      <item>MYSQLND_MS_SLAVE_SWITCH</item>\n      <item>MYSQLND_MS_VERSION</item>\n      <item>MYSQLND_MS_VERSION_ID</item>\n      <item>MYSQLND_MUX_VERSION</item>\n      <item>MYSQLND_MUX_VERSION_ID</item>\n      <item>MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN</item>\n      <item>MYSQLND_QC_DISABLE_SWITCH</item>\n      <item>MYSQLND_QC_ENABLE_SWITCH</item>\n      <item>MYSQLND_QC_SERVER_ID_SWITCH</item>\n      <item>MYSQLND_QC_TTL_SWITCH</item>\n      <item>MYSQLND_QC_VERSION</item>\n      <item>MYSQLND_QC_VERSION_ID</item>\n      <item>MYSQLND_UH_MYSQLND_CHG_USER_RESP_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_CLOSE_DISCONNECTED</item>\n      <item>MYSQLND_UH_MYSQLND_CLOSE_EXPLICIT</item>\n      <item>MYSQLND_UH_MYSQLND_CLOSE_IMPLICIT</item>\n      <item>MYSQLND_UH_MYSQLND_CLOSE_LAST</item>\n      <item>MYSQLND_UH_MYSQLND_COM_BINLOG_DUMP</item>\n      <item>MYSQLND_UH_MYSQLND_COM_CHANGE_USER</item>\n      <item>MYSQLND_UH_MYSQLND_COM_CONNECT</item>\n      <item>MYSQLND_UH_MYSQLND_COM_CONNECT_OUT</item>\n      <item>MYSQLND_UH_MYSQLND_COM_CREATE_DB</item>\n      <item>MYSQLND_UH_MYSQLND_COM_DAEMON</item>\n      <item>MYSQLND_UH_MYSQLND_COM_DEBUG</item>\n      <item>MYSQLND_UH_MYSQLND_COM_DELAYED_INSERT</item>\n      <item>MYSQLND_UH_MYSQLND_COM_DROP_DB</item>\n      <item>MYSQLND_UH_MYSQLND_COM_END</item>\n      <item>MYSQLND_UH_MYSQLND_COM_FIELD_LIST</item>\n      <item>MYSQLND_UH_MYSQLND_COM_INIT_DB</item>\n      <item>MYSQLND_UH_MYSQLND_COM_PING</item>\n      <item>MYSQLND_UH_MYSQLND_COM_PROCESS_INFO</item>\n      <item>MYSQLND_UH_MYSQLND_COM_PROCESS_KILL</item>\n      <item>MYSQLND_UH_MYSQLND_COM_QUERY</item>\n      <item>MYSQLND_UH_MYSQLND_COM_QUIT</item>\n      <item>MYSQLND_UH_MYSQLND_COM_REFRESH</item>\n      <item>MYSQLND_UH_MYSQLND_COM_REGISTER_SLAVED</item>\n      <item>MYSQLND_UH_MYSQLND_COM_SET_OPTION</item>\n      <item>MYSQLND_UH_MYSQLND_COM_SHUTDOWN</item>\n      <item>MYSQLND_UH_MYSQLND_COM_SLEEP</item>\n      <item>MYSQLND_UH_MYSQLND_COM_STATISTICS</item>\n      <item>MYSQLND_UH_MYSQLND_COM_STMT_CLOSE</item>\n      <item>MYSQLND_UH_MYSQLND_COM_STMT_EXECUTE</item>\n      <item>MYSQLND_UH_MYSQLND_COM_STMT_FETCH</item>\n      <item>MYSQLND_UH_MYSQLND_COM_STMT_PREPARE</item>\n      <item>MYSQLND_UH_MYSQLND_COM_STMT_RESET</item>\n      <item>MYSQLND_UH_MYSQLND_COM_STMT_SEND_LONG_DATA</item>\n      <item>MYSQLND_UH_MYSQLND_COM_TABLE_DUMP</item>\n      <item>MYSQLND_UH_MYSQLND_COM_TIME</item>\n      <item>MYSQLND_UH_MYSQLND_OPTION_INIT_COMMAND</item>\n      <item>MYSQLND_UH_MYSQLND_OPTION_OPT_COMPRESS</item>\n      <item>MYSQLND_UH_MYSQLND_OPTION_OPT_CONNECT_TIMEOUT</item>\n      <item>MYSQLND_UH_MYSQLND_OPTION_OPT_NAMED_PIPE</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_AUTH_PROTOCOL</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_GUESS_CONNECTION</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_INT_AND_FLOAT_NATIVE</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_LOCAL_INFILE</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_MAX_ALLOWED_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_NET_CMD_BUFFER_SIZE</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_NET_READ_BUFFER_SIZE</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_PROTOCOL</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_READ_TIMEOUT</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_RECONNECT</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_SSL_CA</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_SSL_CAPATH</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_SSL_CERT</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_SSL_CIPHER</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_SSL_KEY</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_SSL_PASSPHRASE</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_SSL_VERIFY_SERVER_CERT</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_USE_EMBEDDED_CONNECTION</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_USE_REMOTE_CONNECTION</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_USE_RESULT</item>\n      <item>MYSQLND_UH_MYSQLND_OPT_WRITE_TIMEOUT</item>\n      <item>MYSQLND_UH_MYSQLND_PREPARE_RESP_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_AUTH_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_CMD_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_EOF_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_GREET_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_LAST</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_OK_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_ROW_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_RSET_FLD_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_RSET_HEADER_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_PROT_STATS_PACKET</item>\n      <item>MYSQLND_UH_MYSQLND_READ_DEFAULT_FILE</item>\n      <item>MYSQLND_UH_MYSQLND_READ_DEFAULT_GROUP</item>\n      <item>MYSQLND_UH_MYSQLND_REPORT_DATA_TRUNCATION</item>\n      <item>MYSQLND_UH_MYSQLND_SECURE_AUTH</item>\n      <item>MYSQLND_UH_MYSQLND_SET_CHARSET_DIR</item>\n      <item>MYSQLND_UH_MYSQLND_SET_CHARSET_NAME</item>\n      <item>MYSQLND_UH_MYSQLND_SET_CLIENT_IP</item>\n      <item>MYSQLND_UH_MYSQLND_SHARED_MEMORY_BASE_NAME</item>\n      <item>MYSQLND_UH_SERVER_OPTION_DEFAULT_AUTH</item>\n      <item>MYSQLND_UH_SERVER_OPTION_MULTI_STATEMENTS_OFF</item>\n      <item>MYSQLND_UH_SERVER_OPTION_MULTI_STATEMENTS_ON</item>\n      <item>MYSQLND_UH_SERVER_OPTION_PLUGIN_DIR</item>\n      <item>MYSQLND_UH_SERVER_OPTION_SET_CLIENT_IP</item>\n      <item>MYSQLND_UH_VERSION</item>\n      <item>MYSQLND_UH_VERSION_ID</item>\n      <item>MYSQLX_CLIENT_SSL</item>\n      <item>MYSQLX_LOCK_DEFAULT</item>\n      <item>MYSQLX_LOCK_NOWAIT</item>\n      <item>MYSQLX_LOCK_SKIP_LOCKED</item>\n      <item>MYSQLX_TYPE_BIGINT</item>\n      <item>MYSQLX_TYPE_BIT</item>\n      <item>MYSQLX_TYPE_BLOB</item>\n      <item>MYSQLX_TYPE_BYTES</item>\n      <item>MYSQLX_TYPE_CHAR</item>\n      <item>MYSQLX_TYPE_DATE</item>\n      <item>MYSQLX_TYPE_DATETIME</item>\n      <item>MYSQLX_TYPE_DECIMAL</item>\n      <item>MYSQLX_TYPE_DOUBLE</item>\n      <item>MYSQLX_TYPE_ENUM</item>\n      <item>MYSQLX_TYPE_FLOAT</item>\n      <item>MYSQLX_TYPE_GEOMETRY</item>\n      <item>MYSQLX_TYPE_INT</item>\n      <item>MYSQLX_TYPE_INT24</item>\n      <item>MYSQLX_TYPE_INTERVAL</item>\n      <item>MYSQLX_TYPE_JSON</item>\n      <item>MYSQLX_TYPE_LONG</item>\n      <item>MYSQLX_TYPE_LONGLONG</item>\n      <item>MYSQLX_TYPE_LONG_BLOB</item>\n      <item>MYSQLX_TYPE_MEDIUMINT</item>\n      <item>MYSQLX_TYPE_MEDIUM_BLOB</item>\n      <item>MYSQLX_TYPE_NEWDATE</item>\n      <item>MYSQLX_TYPE_NEWDECIMAL</item>\n      <item>MYSQLX_TYPE_NULL</item>\n      <item>MYSQLX_TYPE_SET</item>\n      <item>MYSQLX_TYPE_SHORT</item>\n      <item>MYSQLX_TYPE_SMALLINT</item>\n      <item>MYSQLX_TYPE_STRING</item>\n      <item>MYSQLX_TYPE_TIME</item>\n      <item>MYSQLX_TYPE_TIMESTAMP</item>\n      <item>MYSQLX_TYPE_TINY</item>\n      <item>MYSQLX_TYPE_TINY_BLOB</item>\n      <item>MYSQLX_TYPE_VAR_STRING</item>\n      <item>MYSQLX_TYPE_YEAR</item>\n      <item>MYSQL_ASSOC</item>\n      <item>MYSQL_BOTH</item>\n      <item>MYSQL_CLIENT_COMPRESS</item>\n      <item>MYSQL_CLIENT_IGNORE_SPACE</item>\n      <item>MYSQL_CLIENT_INTERACTIVE</item>\n      <item>MYSQL_CLIENT_SSL</item>\n      <item>MYSQL_NUM</item>\n      <item>M_1_PI</item>\n      <item>M_2_PI</item>\n      <item>M_2_SQRTPI</item>\n      <item>M_DONE</item>\n      <item>M_E</item>\n      <item>M_ERROR</item>\n      <item>M_EULER</item>\n      <item>M_FAIL</item>\n      <item>M_LN2</item>\n      <item>M_LN10</item>\n      <item>M_LNPI</item>\n      <item>M_LOG2E</item>\n      <item>M_LOG10E</item>\n      <item>M_PENDING</item>\n      <item>M_PI</item>\n      <item>M_PI_2</item>\n      <item>M_PI_4</item>\n      <item>M_SQRT1_2</item>\n      <item>M_SQRT2</item>\n      <item>M_SQRT3</item>\n      <item>M_SQRTPI</item>\n      <item>M_SUCCESS</item>\n      <item>NAN</item>\n      <item>NCURSES_ALL_MOUSE_EVENTS</item>\n      <item>NCURSES_BUTTON1_CLICKED</item>\n      <item>NCURSES_BUTTON1_DOUBLE_CLICKED</item>\n      <item>NCURSES_BUTTON1_PRESSED</item>\n      <item>NCURSES_BUTTON1_RELEASED</item>\n      <item>NCURSES_BUTTON1_TRIPLE_CLICKED</item>\n      <item>NCURSES_BUTTON_ALT</item>\n      <item>NCURSES_BUTTON_CTRL</item>\n      <item>NCURSES_BUTTON_SHIFT</item>\n      <item>NCURSES_COLOR_BLACK</item>\n      <item>NCURSES_COLOR_BLUE</item>\n      <item>NCURSES_COLOR_CYAN</item>\n      <item>NCURSES_COLOR_GREEN</item>\n      <item>NCURSES_COLOR_MAGENTA</item>\n      <item>NCURSES_COLOR_RED</item>\n      <item>NCURSES_COLOR_WHITE</item>\n      <item>NCURSES_COLOR_YELLOW</item>\n      <item>NCURSES_KEY_A1</item>\n      <item>NCURSES_KEY_A3</item>\n      <item>NCURSES_KEY_B2</item>\n      <item>NCURSES_KEY_BACKSPACE</item>\n      <item>NCURSES_KEY_BEG</item>\n      <item>NCURSES_KEY_BTAB</item>\n      <item>NCURSES_KEY_C1</item>\n      <item>NCURSES_KEY_C3</item>\n      <item>NCURSES_KEY_CANCEL</item>\n      <item>NCURSES_KEY_CATAB</item>\n      <item>NCURSES_KEY_CLEAR</item>\n      <item>NCURSES_KEY_CLOSE</item>\n      <item>NCURSES_KEY_COMMAND</item>\n      <item>NCURSES_KEY_COPY</item>\n      <item>NCURSES_KEY_CREATE</item>\n      <item>NCURSES_KEY_CTAB</item>\n      <item>NCURSES_KEY_DC</item>\n      <item>NCURSES_KEY_DL</item>\n      <item>NCURSES_KEY_DOWN</item>\n      <item>NCURSES_KEY_EIC</item>\n      <item>NCURSES_KEY_END</item>\n      <item>NCURSES_KEY_EOL</item>\n      <item>NCURSES_KEY_EOS</item>\n      <item>NCURSES_KEY_EXIT</item>\n      <item>NCURSES_KEY_F0</item>\n      <item>NCURSES_KEY_FIND</item>\n      <item>NCURSES_KEY_HELP</item>\n      <item>NCURSES_KEY_HOME</item>\n      <item>NCURSES_KEY_IC</item>\n      <item>NCURSES_KEY_IL</item>\n      <item>NCURSES_KEY_LEFT</item>\n      <item>NCURSES_KEY_LL</item>\n      <item>NCURSES_KEY_MARK</item>\n      <item>NCURSES_KEY_MAX</item>\n      <item>NCURSES_KEY_MESSAGE</item>\n      <item>NCURSES_KEY_MOUSE</item>\n      <item>NCURSES_KEY_MOVE</item>\n      <item>NCURSES_KEY_NEXT</item>\n      <item>NCURSES_KEY_NPAGE</item>\n      <item>NCURSES_KEY_OPEN</item>\n      <item>NCURSES_KEY_OPTIONS</item>\n      <item>NCURSES_KEY_PPAGE</item>\n      <item>NCURSES_KEY_PREVIOUS</item>\n      <item>NCURSES_KEY_PRINT</item>\n      <item>NCURSES_KEY_REDO</item>\n      <item>NCURSES_KEY_REFERENCE</item>\n      <item>NCURSES_KEY_REFRESH</item>\n      <item>NCURSES_KEY_REPLACE</item>\n      <item>NCURSES_KEY_RESET</item>\n      <item>NCURSES_KEY_RESTART</item>\n      <item>NCURSES_KEY_RESUME</item>\n      <item>NCURSES_KEY_RIGHT</item>\n      <item>NCURSES_KEY_SAVE</item>\n      <item>NCURSES_KEY_SBEG</item>\n      <item>NCURSES_KEY_SCANCEL</item>\n      <item>NCURSES_KEY_SCOMMAND</item>\n      <item>NCURSES_KEY_SCOPY</item>\n      <item>NCURSES_KEY_SCREATE</item>\n      <item>NCURSES_KEY_SDC</item>\n      <item>NCURSES_KEY_SDL</item>\n      <item>NCURSES_KEY_SELECT</item>\n      <item>NCURSES_KEY_SEND</item>\n      <item>NCURSES_KEY_SEOL</item>\n      <item>NCURSES_KEY_SEXIT</item>\n      <item>NCURSES_KEY_SF</item>\n      <item>NCURSES_KEY_SFIND</item>\n      <item>NCURSES_KEY_SHELP</item>\n      <item>NCURSES_KEY_SHOME</item>\n      <item>NCURSES_KEY_SIC</item>\n      <item>NCURSES_KEY_SLEFT</item>\n      <item>NCURSES_KEY_SMESSAGE</item>\n      <item>NCURSES_KEY_SMOVE</item>\n      <item>NCURSES_KEY_SNEXT</item>\n      <item>NCURSES_KEY_SOPTIONS</item>\n      <item>NCURSES_KEY_SPREVIOUS</item>\n      <item>NCURSES_KEY_SPRINT</item>\n      <item>NCURSES_KEY_SR</item>\n      <item>NCURSES_KEY_SREDO</item>\n      <item>NCURSES_KEY_SREPLACE</item>\n      <item>NCURSES_KEY_SRESET</item>\n      <item>NCURSES_KEY_SRIGHT</item>\n      <item>NCURSES_KEY_SRSUME</item>\n      <item>NCURSES_KEY_SSAVE</item>\n      <item>NCURSES_KEY_SSUSPEND</item>\n      <item>NCURSES_KEY_STAB</item>\n      <item>NCURSES_KEY_UNDO</item>\n      <item>NCURSES_KEY_UP</item>\n      <item>NCURSES_REPORT_MOUSE_POSITION</item>\n      <item>NEGATIVE_SIGN</item>\n      <item>NEWCONFIGNOQUORUM</item>\n      <item>NEWT_ANCHOR_BOTTOM</item>\n      <item>NEWT_ANCHOR_LEFT</item>\n      <item>NEWT_ANCHOR_RIGHT</item>\n      <item>NEWT_ANCHOR_TOP</item>\n      <item>NEWT_ARG_APPEND</item>\n      <item>NEWT_ARG_LAST</item>\n      <item>NEWT_CHECKBOXTREE_COLLAPSED</item>\n      <item>NEWT_CHECKBOXTREE_EXPANDED</item>\n      <item>NEWT_CHECKBOXTREE_HIDE_BOX</item>\n      <item>NEWT_CHECKBOXTREE_SELECTED</item>\n      <item>NEWT_CHECKBOXTREE_UNSELECTABLE</item>\n      <item>NEWT_CHECKBOXTREE_UNSELECTED</item>\n      <item>NEWT_COLORSET_ACTBUTTON</item>\n      <item>NEWT_COLORSET_ACTCHECKBOX</item>\n      <item>NEWT_COLORSET_ACTLISTBOX</item>\n      <item>NEWT_COLORSET_ACTSELLISTBOX</item>\n      <item>NEWT_COLORSET_ACTTEXTBOX</item>\n      <item>NEWT_COLORSET_BORDER</item>\n      <item>NEWT_COLORSET_BUTTON</item>\n      <item>NEWT_COLORSET_CHECKBOX</item>\n      <item>NEWT_COLORSET_COMPACTBUTTON</item>\n      <item>NEWT_COLORSET_DISENTRY</item>\n      <item>NEWT_COLORSET_EMPTYSCALE</item>\n      <item>NEWT_COLORSET_ENTRY</item>\n      <item>NEWT_COLORSET_FULLSCALE</item>\n      <item>NEWT_COLORSET_HELPLINE</item>\n      <item>NEWT_COLORSET_LABEL</item>\n      <item>NEWT_COLORSET_LISTBOX</item>\n      <item>NEWT_COLORSET_ROOT</item>\n      <item>NEWT_COLORSET_ROOTTEXT</item>\n      <item>NEWT_COLORSET_SELLISTBOX</item>\n      <item>NEWT_COLORSET_SHADOW</item>\n      <item>NEWT_COLORSET_TEXTBOX</item>\n      <item>NEWT_COLORSET_TITLE</item>\n      <item>NEWT_COLORSET_WINDOW</item>\n      <item>NEWT_ENTRY_DISABLED</item>\n      <item>NEWT_ENTRY_HIDDEN</item>\n      <item>NEWT_ENTRY_RETURNEXIT</item>\n      <item>NEWT_ENTRY_SCROLL</item>\n      <item>NEWT_EXIT_COMPONENT</item>\n      <item>NEWT_EXIT_FDREADY</item>\n      <item>NEWT_EXIT_HOTKEY</item>\n      <item>NEWT_EXIT_TIMER</item>\n      <item>NEWT_FD_EXCEPT</item>\n      <item>NEWT_FD_READ</item>\n      <item>NEWT_FD_WRITE</item>\n      <item>NEWT_FLAGS_RESET</item>\n      <item>NEWT_FLAGS_SET</item>\n      <item>NEWT_FLAGS_TOGGLE</item>\n      <item>NEWT_FLAG_BORDER</item>\n      <item>NEWT_FLAG_CHECKBOX</item>\n      <item>NEWT_FLAG_DISABLED</item>\n      <item>NEWT_FLAG_HIDDEN</item>\n      <item>NEWT_FLAG_MULTIPLE</item>\n      <item>NEWT_FLAG_NOF12</item>\n      <item>NEWT_FLAG_PASSWORD</item>\n      <item>NEWT_FLAG_RETURNEXIT</item>\n      <item>NEWT_FLAG_SCROLL</item>\n      <item>NEWT_FLAG_SELECTED</item>\n      <item>NEWT_FLAG_SHOWCURSOR</item>\n      <item>NEWT_FLAG_WRAP</item>\n      <item>NEWT_FORM_NOF12</item>\n      <item>NEWT_GRID_COMPONENT</item>\n      <item>NEWT_GRID_EMPTY</item>\n      <item>NEWT_GRID_FLAG_GROWX</item>\n      <item>NEWT_GRID_FLAG_GROWY</item>\n      <item>NEWT_GRID_SUBGRID</item>\n      <item>NEWT_KEY_BKSPC</item>\n      <item>NEWT_KEY_DELETE</item>\n      <item>NEWT_KEY_DOWN</item>\n      <item>NEWT_KEY_END</item>\n      <item>NEWT_KEY_ENTER</item>\n      <item>NEWT_KEY_ESCAPE</item>\n      <item>NEWT_KEY_EXTRA_BASE</item>\n      <item>NEWT_KEY_F1</item>\n      <item>NEWT_KEY_F2</item>\n      <item>NEWT_KEY_F3</item>\n      <item>NEWT_KEY_F4</item>\n      <item>NEWT_KEY_F5</item>\n      <item>NEWT_KEY_F6</item>\n      <item>NEWT_KEY_F7</item>\n      <item>NEWT_KEY_F8</item>\n      <item>NEWT_KEY_F9</item>\n      <item>NEWT_KEY_F10</item>\n      <item>NEWT_KEY_F11</item>\n      <item>NEWT_KEY_F12</item>\n      <item>NEWT_KEY_HOME</item>\n      <item>NEWT_KEY_INSERT</item>\n      <item>NEWT_KEY_LEFT</item>\n      <item>NEWT_KEY_PGDN</item>\n      <item>NEWT_KEY_PGUP</item>\n      <item>NEWT_KEY_RESIZE</item>\n      <item>NEWT_KEY_RETURN</item>\n      <item>NEWT_KEY_RIGHT</item>\n      <item>NEWT_KEY_SUSPEND</item>\n      <item>NEWT_KEY_TAB</item>\n      <item>NEWT_KEY_UNTAB</item>\n      <item>NEWT_KEY_UP</item>\n      <item>NEWT_LISTBOX_RETURNEXIT</item>\n      <item>NEWT_TEXTBOX_SCROLL</item>\n      <item>NEWT_TEXTBOX_WRAP</item>\n      <item>NIL</item>\n      <item>NOAUTH</item>\n      <item>NOCHILDRENFOREPHEMERALS</item>\n      <item>NODEEXISTS</item>\n      <item>NOEXPR</item>\n      <item>NONODE</item>\n      <item>NORM_IGNORECASE</item>\n      <item>NORM_IGNOREKANATYPE</item>\n      <item>NORM_IGNOREKASHIDA</item>\n      <item>NORM_IGNORENONSPACE</item>\n      <item>NORM_IGNORESYMBOLS</item>\n      <item>NORM_IGNOREWIDTH</item>\n      <item>NOSTR</item>\n      <item>NOTCONNECTED_STATE</item>\n      <item>NOTEMPTY</item>\n      <item>NOTHING</item>\n      <item>NOTREADONLY</item>\n      <item>NOTWATCHING_EVENT</item>\n      <item>NOWATCHER</item>\n      <item>N_CS_PRECEDES</item>\n      <item>N_SEP_BY_SPACE</item>\n      <item>N_SIGN_POSN</item>\n      <item>OAUTH_AUTH_TYPE_AUTHORIZATION</item>\n      <item>OAUTH_AUTH_TYPE_FORM</item>\n      <item>OAUTH_AUTH_TYPE_NONE</item>\n      <item>OAUTH_AUTH_TYPE_URI</item>\n      <item>OAUTH_BAD_NONCE</item>\n      <item>OAUTH_BAD_TIMESTAMP</item>\n      <item>OAUTH_CONSUMER_KEY_REFUSED</item>\n      <item>OAUTH_CONSUMER_KEY_UNKNOWN</item>\n      <item>OAUTH_HTTP_METHOD_DELETE</item>\n      <item>OAUTH_HTTP_METHOD_GET</item>\n      <item>OAUTH_HTTP_METHOD_HEAD</item>\n      <item>OAUTH_HTTP_METHOD_POST</item>\n      <item>OAUTH_HTTP_METHOD_PUT</item>\n      <item>OAUTH_INVALID_SIGNATURE</item>\n      <item>OAUTH_OK</item>\n      <item>OAUTH_PARAMETER_ABSENT</item>\n      <item>OAUTH_REQENGINE_CURL</item>\n      <item>OAUTH_REQENGINE_STREAMS</item>\n      <item>OAUTH_SIGNATURE_METHOD_REJECTED</item>\n      <item>OAUTH_SIG_METHOD_HMACSHA1</item>\n      <item>OAUTH_SIG_METHOD_HMACSHA256</item>\n      <item>OAUTH_SIG_METHOD_RSASHA1</item>\n      <item>OAUTH_TOKEN_EXPIRED</item>\n      <item>OAUTH_TOKEN_REJECTED</item>\n      <item>OAUTH_TOKEN_REVOKED</item>\n      <item>OAUTH_TOKEN_USED</item>\n      <item>OAUTH_VERIFIER_INVALID</item>\n      <item>OCI_ASSOC</item>\n      <item>OCI_BOTH</item>\n      <item>OCI_B_BFILE</item>\n      <item>OCI_B_BIN</item>\n      <item>OCI_B_BLOB</item>\n      <item>OCI_B_BOL</item>\n      <item>OCI_B_CFILEE</item>\n      <item>OCI_B_CLOB</item>\n      <item>OCI_B_CURSOR</item>\n      <item>OCI_B_INT</item>\n      <item>OCI_B_NTY</item>\n      <item>OCI_B_NUM</item>\n      <item>OCI_B_ROWID</item>\n      <item>OCI_B_SQLT_NTY</item>\n      <item>OCI_COMMIT_ON_SUCCESS</item>\n      <item>OCI_CRED_EXT</item>\n      <item>OCI_DESCRIBE_ONLY</item>\n      <item>OCI_DTYPE_FILE</item>\n      <item>OCI_DTYPE_LOB</item>\n      <item>OCI_DTYPE_ROWID</item>\n      <item>OCI_FETCHSTATEMENT_BY_COLUMN</item>\n      <item>OCI_FETCHSTATEMENT_BY_ROW</item>\n      <item>OCI_LOB_BUFFER_FREE</item>\n      <item>OCI_NO_AUTO_COMMIT</item>\n      <item>OCI_NUM</item>\n      <item>OCI_RETURN_LOBS</item>\n      <item>OCI_RETURN_NULLS</item>\n      <item>OCI_SEEK_CUR</item>\n      <item>OCI_SEEK_END</item>\n      <item>OCI_SEEK_SET</item>\n      <item>OCI_SYSDBA</item>\n      <item>OCI_SYSOPER</item>\n      <item>OCI_TEMP_BLOB</item>\n      <item>OCI_TEMP_CLOB</item>\n      <item>ODBC_BINMODE_CONVERT</item>\n      <item>ODBC_BINMODE_PASSTHRU</item>\n      <item>ODBC_BINMODE_RETURN</item>\n      <item>ODBC_TYPE</item>\n      <item>OGGVORBIS_PCM_S8</item>\n      <item>OGGVORBIS_PCM_S16_BE</item>\n      <item>OGGVORBIS_PCM_S16_LE</item>\n      <item>OGGVORBIS_PCM_U8</item>\n      <item>OGGVORBIS_PCM_U16_BE</item>\n      <item>OGGVORBIS_PCM_U16_LE</item>\n      <item>OK</item>\n      <item>OPENSSL_ALGO_DSS1</item>\n      <item>OPENSSL_ALGO_MD2</item>\n      <item>OPENSSL_ALGO_MD4</item>\n      <item>OPENSSL_ALGO_MD5</item>\n      <item>OPENSSL_ALGO_RMD160</item>\n      <item>OPENSSL_ALGO_SHA1</item>\n      <item>OPENSSL_ALGO_SHA224</item>\n      <item>OPENSSL_ALGO_SHA256</item>\n      <item>OPENSSL_ALGO_SHA384</item>\n      <item>OPENSSL_ALGO_SHA512</item>\n      <item>OPENSSL_CIPHER_3DES</item>\n      <item>OPENSSL_CIPHER_AES_128_CBC</item>\n      <item>OPENSSL_CIPHER_AES_192_CBC</item>\n      <item>OPENSSL_CIPHER_AES_256_CBC</item>\n      <item>OPENSSL_CIPHER_DES</item>\n      <item>OPENSSL_CIPHER_RC2_40</item>\n      <item>OPENSSL_CIPHER_RC2_64</item>\n      <item>OPENSSL_CIPHER_RC2_128</item>\n      <item>OPENSSL_KEYTYPE_DH</item>\n      <item>OPENSSL_KEYTYPE_DSA</item>\n      <item>OPENSSL_KEYTYPE_EC</item>\n      <item>OPENSSL_KEYTYPE_RSA</item>\n      <item>OPENSSL_NO_PADDING</item>\n      <item>OPENSSL_PKCS1_OAEP_PADDING</item>\n      <item>OPENSSL_PKCS1_PADDING</item>\n      <item>OPENSSL_SSLV23_PADDING</item>\n      <item>OPENSSL_TLSEXT_SERVER_NAME</item>\n      <item>OPENSSL_VERSION_NUMBER</item>\n      <item>OPENSSL_VERSION_TEXT</item>\n      <item>OPERATIONTIMEOUT</item>\n      <item>OP_ANONYMOUS</item>\n      <item>OP_DEBUG</item>\n      <item>OP_EXPUNGE</item>\n      <item>OP_HALFOPEN</item>\n      <item>OP_PROTOTYPE</item>\n      <item>OP_READONLY</item>\n      <item>OP_SECURE</item>\n      <item>OP_SHORTCACHE</item>\n      <item>OP_SILENT</item>\n      <item>O_APPEND</item>\n      <item>O_ASYNC</item>\n      <item>O_CREAT</item>\n      <item>O_EXCL</item>\n      <item>O_NDELAY</item>\n      <item>O_NOCTTY</item>\n      <item>O_NONBLOCK</item>\n      <item>O_RDONLY</item>\n      <item>O_RDWR</item>\n      <item>O_SYNC</item>\n      <item>O_TRUNC</item>\n      <item>O_WRONLY</item>\n      <item>PARSEKIT_EXTENDED_VALUE</item>\n      <item>PARSEKIT_IS_CONST</item>\n      <item>PARSEKIT_IS_TMP_VAR</item>\n      <item>PARSEKIT_IS_UNUSED</item>\n      <item>PARSEKIT_IS_VAR</item>\n      <item>PARSEKIT_QUIET</item>\n      <item>PARSEKIT_RESULT_CONST</item>\n      <item>PARSEKIT_RESULT_EA_TYPE</item>\n      <item>PARSEKIT_RESULT_JMP_ADDR</item>\n      <item>PARSEKIT_RESULT_OPARRAY</item>\n      <item>PARSEKIT_RESULT_OPLINE</item>\n      <item>PARSEKIT_RESULT_VAR</item>\n      <item>PARSEKIT_SIMPLE</item>\n      <item>PARSEKIT_USAGE_UNKNOWN</item>\n      <item>PARSEKIT_ZEND_ADD</item>\n      <item>PARSEKIT_ZEND_ADD_ARRAY_ELEMENT</item>\n      <item>PARSEKIT_ZEND_ADD_CHAR</item>\n      <item>PARSEKIT_ZEND_ADD_INTERFACE</item>\n      <item>PARSEKIT_ZEND_ADD_STRING</item>\n      <item>PARSEKIT_ZEND_ADD_VAR</item>\n      <item>PARSEKIT_ZEND_ASSIGN</item>\n      <item>PARSEKIT_ZEND_ASSIGN_ADD</item>\n      <item>PARSEKIT_ZEND_ASSIGN_BW_AND</item>\n      <item>PARSEKIT_ZEND_ASSIGN_BW_OR</item>\n      <item>PARSEKIT_ZEND_ASSIGN_BW_XOR</item>\n      <item>PARSEKIT_ZEND_ASSIGN_CONCAT</item>\n      <item>PARSEKIT_ZEND_ASSIGN_DIM</item>\n      <item>PARSEKIT_ZEND_ASSIGN_DIV</item>\n      <item>PARSEKIT_ZEND_ASSIGN_MOD</item>\n      <item>PARSEKIT_ZEND_ASSIGN_MUL</item>\n      <item>PARSEKIT_ZEND_ASSIGN_OBJ</item>\n      <item>PARSEKIT_ZEND_ASSIGN_REF</item>\n      <item>PARSEKIT_ZEND_ASSIGN_SL</item>\n      <item>PARSEKIT_ZEND_ASSIGN_SR</item>\n      <item>PARSEKIT_ZEND_ASSIGN_SUB</item>\n      <item>PARSEKIT_ZEND_BEGIN_SILENCE</item>\n      <item>PARSEKIT_ZEND_BOOL</item>\n      <item>PARSEKIT_ZEND_BOOL_NOT</item>\n      <item>PARSEKIT_ZEND_BOOL_XOR</item>\n      <item>PARSEKIT_ZEND_BRK</item>\n      <item>PARSEKIT_ZEND_BW_AND</item>\n      <item>PARSEKIT_ZEND_BW_NOT</item>\n      <item>PARSEKIT_ZEND_BW_OR</item>\n      <item>PARSEKIT_ZEND_BW_XOR</item>\n      <item>PARSEKIT_ZEND_CASE</item>\n      <item>PARSEKIT_ZEND_CAST</item>\n      <item>PARSEKIT_ZEND_CATCH</item>\n      <item>PARSEKIT_ZEND_CLONE</item>\n      <item>PARSEKIT_ZEND_CONCAT</item>\n      <item>PARSEKIT_ZEND_CONT</item>\n      <item>PARSEKIT_ZEND_DECLARE_CLASS</item>\n      <item>PARSEKIT_ZEND_DECLARE_FUNCTION</item>\n      <item>PARSEKIT_ZEND_DECLARE_INHERITED_CLASS</item>\n      <item>PARSEKIT_ZEND_DIV</item>\n      <item>PARSEKIT_ZEND_DO_FCALL</item>\n      <item>PARSEKIT_ZEND_DO_FCALL_BY_NAME</item>\n      <item>PARSEKIT_ZEND_ECHO</item>\n      <item>PARSEKIT_ZEND_END_SILENCE</item>\n      <item>PARSEKIT_ZEND_EVAL_CODE</item>\n      <item>PARSEKIT_ZEND_EXIT</item>\n      <item>PARSEKIT_ZEND_EXT_FCALL_BEGIN</item>\n      <item>PARSEKIT_ZEND_EXT_FCALL_END</item>\n      <item>PARSEKIT_ZEND_EXT_NOP</item>\n      <item>PARSEKIT_ZEND_EXT_STMT</item>\n      <item>PARSEKIT_ZEND_FETCH_CLASS</item>\n      <item>PARSEKIT_ZEND_FETCH_CONSTANT</item>\n      <item>PARSEKIT_ZEND_FETCH_DIM_FUNC_ARG</item>\n      <item>PARSEKIT_ZEND_FETCH_DIM_IS</item>\n      <item>PARSEKIT_ZEND_FETCH_DIM_R</item>\n      <item>PARSEKIT_ZEND_FETCH_DIM_RW</item>\n      <item>PARSEKIT_ZEND_FETCH_DIM_TMP_VAR</item>\n      <item>PARSEKIT_ZEND_FETCH_DIM_UNSET</item>\n      <item>PARSEKIT_ZEND_FETCH_DIM_W</item>\n      <item>PARSEKIT_ZEND_FETCH_FUNC_ARG</item>\n      <item>PARSEKIT_ZEND_FETCH_IS</item>\n      <item>PARSEKIT_ZEND_FETCH_OBJ_FUNC_ARG</item>\n      <item>PARSEKIT_ZEND_FETCH_OBJ_IS</item>\n      <item>PARSEKIT_ZEND_FETCH_OBJ_R</item>\n      <item>PARSEKIT_ZEND_FETCH_OBJ_RW</item>\n      <item>PARSEKIT_ZEND_FETCH_OBJ_UNSET</item>\n      <item>PARSEKIT_ZEND_FETCH_OBJ_W</item>\n      <item>PARSEKIT_ZEND_FETCH_R</item>\n      <item>PARSEKIT_ZEND_FETCH_RW</item>\n      <item>PARSEKIT_ZEND_FETCH_UNSET</item>\n      <item>PARSEKIT_ZEND_FETCH_W</item>\n      <item>PARSEKIT_ZEND_FE_FETCH</item>\n      <item>PARSEKIT_ZEND_FE_RESET</item>\n      <item>PARSEKIT_ZEND_FREE</item>\n      <item>PARSEKIT_ZEND_HANDLE_EXCEPTION</item>\n      <item>PARSEKIT_ZEND_IMPORT_CLASS</item>\n      <item>PARSEKIT_ZEND_IMPORT_CONST</item>\n      <item>PARSEKIT_ZEND_IMPORT_FUNCTION</item>\n      <item>PARSEKIT_ZEND_INCLUDE_OR_EVAL</item>\n      <item>PARSEKIT_ZEND_INIT_ARRAY</item>\n      <item>PARSEKIT_ZEND_INIT_CTOR_CALL</item>\n      <item>PARSEKIT_ZEND_INIT_FCALL_BY_NAME</item>\n      <item>PARSEKIT_ZEND_INIT_METHOD_CALL</item>\n      <item>PARSEKIT_ZEND_INIT_STATIC_METHOD_CALL</item>\n      <item>PARSEKIT_ZEND_INIT_STRING</item>\n      <item>PARSEKIT_ZEND_INSTANCEOF</item>\n      <item>PARSEKIT_ZEND_INTERNAL_CLASS</item>\n      <item>PARSEKIT_ZEND_INTERNAL_FUNCTION</item>\n      <item>PARSEKIT_ZEND_ISSET_ISEMPTY</item>\n      <item>PARSEKIT_ZEND_ISSET_ISEMPTY_DIM_OBJ</item>\n      <item>PARSEKIT_ZEND_ISSET_ISEMPTY_PROP_OBJ</item>\n      <item>PARSEKIT_ZEND_ISSET_ISEMPTY_VAR</item>\n      <item>PARSEKIT_ZEND_IS_EQUAL</item>\n      <item>PARSEKIT_ZEND_IS_IDENTICAL</item>\n      <item>PARSEKIT_ZEND_IS_NOT_EQUAL</item>\n      <item>PARSEKIT_ZEND_IS_NOT_IDENTICAL</item>\n      <item>PARSEKIT_ZEND_IS_SMALLER</item>\n      <item>PARSEKIT_ZEND_IS_SMALLER_OR_EQUAL</item>\n      <item>PARSEKIT_ZEND_JMP</item>\n      <item>PARSEKIT_ZEND_JMPNZ</item>\n      <item>PARSEKIT_ZEND_JMPNZ_EX</item>\n      <item>PARSEKIT_ZEND_JMPZ</item>\n      <item>PARSEKIT_ZEND_JMPZNZ</item>\n      <item>PARSEKIT_ZEND_JMPZ_EX</item>\n      <item>PARSEKIT_ZEND_JMP_NO_CTOR</item>\n      <item>PARSEKIT_ZEND_MOD</item>\n      <item>PARSEKIT_ZEND_MUL</item>\n      <item>PARSEKIT_ZEND_NEW</item>\n      <item>PARSEKIT_ZEND_NOP</item>\n      <item>PARSEKIT_ZEND_OP_DATA</item>\n      <item>PARSEKIT_ZEND_OVERLOADED_FUNCTION</item>\n      <item>PARSEKIT_ZEND_OVERLOADED_FUNCTION_TEMPORARY</item>\n      <item>PARSEKIT_ZEND_POST_DEC</item>\n      <item>PARSEKIT_ZEND_POST_DEC_OBJ</item>\n      <item>PARSEKIT_ZEND_POST_INC</item>\n      <item>PARSEKIT_ZEND_POST_INC_OBJ</item>\n      <item>PARSEKIT_ZEND_PRE_DEC</item>\n      <item>PARSEKIT_ZEND_PRE_DEC_OBJ</item>\n      <item>PARSEKIT_ZEND_PRE_INC</item>\n      <item>PARSEKIT_ZEND_PRE_INC_OBJ</item>\n      <item>PARSEKIT_ZEND_PRINT</item>\n      <item>PARSEKIT_ZEND_QM_ASSIGN</item>\n      <item>PARSEKIT_ZEND_RAISE_ABSTRACT_ERROR</item>\n      <item>PARSEKIT_ZEND_RECV</item>\n      <item>PARSEKIT_ZEND_RECV_INIT</item>\n      <item>PARSEKIT_ZEND_RETURN</item>\n      <item>PARSEKIT_ZEND_SEND_REF</item>\n      <item>PARSEKIT_ZEND_SEND_VAL</item>\n      <item>PARSEKIT_ZEND_SEND_VAR</item>\n      <item>PARSEKIT_ZEND_SEND_VAR_NO_REF</item>\n      <item>PARSEKIT_ZEND_SL</item>\n      <item>PARSEKIT_ZEND_SR</item>\n      <item>PARSEKIT_ZEND_SUB</item>\n      <item>PARSEKIT_ZEND_SWITCH_FREE</item>\n      <item>PARSEKIT_ZEND_THROW</item>\n      <item>PARSEKIT_ZEND_TICKS</item>\n      <item>PARSEKIT_ZEND_UNSET_DIM_OBJ</item>\n      <item>PARSEKIT_ZEND_UNSET_VAR</item>\n      <item>PARSEKIT_ZEND_USER_CLASS</item>\n      <item>PARSEKIT_ZEND_USER_FUNCTION</item>\n      <item>PARSEKIT_ZEND_VERIFY_ABSTRACT_CLASS</item>\n      <item>PASSWORD_ARGON2I</item>\n      <item>PASSWORD_ARGON2ID</item>\n      <item>PASSWORD_ARGON2_DEFAULT_MEMORY_COST</item>\n      <item>PASSWORD_ARGON2_DEFAULT_THREADS</item>\n      <item>PASSWORD_ARGON2_DEFAULT_TIME_COST</item>\n      <item>PASSWORD_BCRYPT</item>\n      <item>PASSWORD_DEFAULT</item>\n      <item>PATHINFO_BASENAME</item>\n      <item>PATHINFO_DIRNAME</item>\n      <item>PATHINFO_EXTENSION</item>\n      <item>PATHINFO_FILENAME</item>\n      <item>PATH_SEPARATOR</item>\n      <item>PCRE_VERSION</item>\n      <item>PERM_ADMIN</item>\n      <item>PERM_ALL</item>\n      <item>PERM_CREATE</item>\n      <item>PERM_DELETE</item>\n      <item>PERM_READ</item>\n      <item>PERM_WRITE</item>\n      <item>PGSQL_ASSOC</item>\n      <item>PGSQL_BAD_RESPONSE</item>\n      <item>PGSQL_BOTH</item>\n      <item>PGSQL_COMMAND_OK</item>\n      <item>PGSQL_CONNECTION_BAD</item>\n      <item>PGSQL_CONNECTION_OK</item>\n      <item>PGSQL_CONNECT_ASYNC</item>\n      <item>PGSQL_CONNECT_FORCE_NEW</item>\n      <item>PGSQL_CONV_FORCE_NULL</item>\n      <item>PGSQL_CONV_IGNORE_DEFAULT</item>\n      <item>PGSQL_CONV_IGNORE_NOT_NULL</item>\n      <item>PGSQL_COPY_IN</item>\n      <item>PGSQL_COPY_OUT</item>\n      <item>PGSQL_DIAG_CONTEXT</item>\n      <item>PGSQL_DIAG_INTERNAL_POSITION</item>\n      <item>PGSQL_DIAG_INTERNAL_QUERY</item>\n      <item>PGSQL_DIAG_MESSAGE_DETAIL</item>\n      <item>PGSQL_DIAG_MESSAGE_HINT</item>\n      <item>PGSQL_DIAG_MESSAGE_PRIMARY</item>\n      <item>PGSQL_DIAG_SEVERITY</item>\n      <item>PGSQL_DIAG_SEVERITY_NONLOCALIZED</item>\n      <item>PGSQL_DIAG_SOURCE_FILE</item>\n      <item>PGSQL_DIAG_SOURCE_FUNCTION</item>\n      <item>PGSQL_DIAG_SOURCE_LINE</item>\n      <item>PGSQL_DIAG_SQLSTATE</item>\n      <item>PGSQL_DIAG_STATEMENT_POSITION</item>\n      <item>PGSQL_DML_ASYNC</item>\n      <item>PGSQL_DML_ESCAPE</item>\n      <item>PGSQL_DML_EXEC</item>\n      <item>PGSQL_DML_NO_CONV</item>\n      <item>PGSQL_DML_STRING</item>\n      <item>PGSQL_EMPTY_QUERY</item>\n      <item>PGSQL_ERRORS_DEFAULT</item>\n      <item>PGSQL_ERRORS_TERSE</item>\n      <item>PGSQL_ERRORS_VERBOSE</item>\n      <item>PGSQL_FATAL_ERROR</item>\n      <item>PGSQL_LIBPQ_VERSION</item>\n      <item>PGSQL_LIBPQ_VERSION_STR</item>\n      <item>PGSQL_NONFATAL_ERROR</item>\n      <item>PGSQL_NOTICE_ALL</item>\n      <item>PGSQL_NOTICE_CLEAR</item>\n      <item>PGSQL_NOTICE_LAST</item>\n      <item>PGSQL_NUM</item>\n      <item>PGSQL_POLLING_ACTIVE</item>\n      <item>PGSQL_POLLING_FAILED</item>\n      <item>PGSQL_POLLING_OK</item>\n      <item>PGSQL_POLLING_READING</item>\n      <item>PGSQL_POLLING_WRITING</item>\n      <item>PGSQL_SEEK_CUR</item>\n      <item>PGSQL_SEEK_END</item>\n      <item>PGSQL_SEEK_SET</item>\n      <item>PGSQL_STATUS_LONG</item>\n      <item>PGSQL_STATUS_STRING</item>\n      <item>PGSQL_TRANSACTION_ACTIVE</item>\n      <item>PGSQL_TRANSACTION_IDLE</item>\n      <item>PGSQL_TRANSACTION_INERROR</item>\n      <item>PGSQL_TRANSACTION_INTRANS</item>\n      <item>PGSQL_TRANSACTION_UNKNOWN</item>\n      <item>PGSQL_TUPLES_OK</item>\n      <item>PHPDBG_COLOR_ERROR</item>\n      <item>PHPDBG_COLOR_NOTICE</item>\n      <item>PHPDBG_COLOR_PROMPT</item>\n      <item>PHPDBG_FILE</item>\n      <item>PHPDBG_FUNC</item>\n      <item>PHPDBG_LINENO</item>\n      <item>PHPDBG_METHOD</item>\n      <item>PHPDBG_VERSION</item>\n      <item>PHP_BINARY_READ</item>\n      <item>PHP_NORMAL_READ</item>\n      <item>PHP_OUTPUT_HANDLER_CLEAN</item>\n      <item>PHP_OUTPUT_HANDLER_CLEANABLE</item>\n      <item>PHP_OUTPUT_HANDLER_CONT</item>\n      <item>PHP_OUTPUT_HANDLER_END</item>\n      <item>PHP_OUTPUT_HANDLER_FINAL</item>\n      <item>PHP_OUTPUT_HANDLER_FLUSH</item>\n      <item>PHP_OUTPUT_HANDLER_FLUSHABLE</item>\n      <item>PHP_OUTPUT_HANDLER_REMOVABLE</item>\n      <item>PHP_OUTPUT_HANDLER_START</item>\n      <item>PHP_OUTPUT_HANDLER_STDFLAGS</item>\n      <item>PHP_OUTPUT_HANDLER_WRITE</item>\n      <item>PHP_QUERY_RFC1738</item>\n      <item>PHP_QUERY_RFC3986</item>\n      <item>PHP_ROUND_HALF_DOWN</item>\n      <item>PHP_ROUND_HALF_EVEN</item>\n      <item>PHP_ROUND_HALF_ODD</item>\n      <item>PHP_ROUND_HALF_UP</item>\n      <item>PHP_SESSION_ACTIVE</item>\n      <item>PHP_SESSION_DISABLED</item>\n      <item>PHP_SESSION_NONE</item>\n      <item>PHP_SVN_AUTH_PARAM_IGNORE_SSL_VERIFY_ERRORS</item>\n      <item>PHP_URL_FRAGMENT</item>\n      <item>PHP_URL_HOST</item>\n      <item>PHP_URL_PASS</item>\n      <item>PHP_URL_PATH</item>\n      <item>PHP_URL_PORT</item>\n      <item>PHP_URL_QUERY</item>\n      <item>PHP_URL_SCHEME</item>\n      <item>PHP_URL_USER</item>\n      <item>PHP_WINDOWS_NT_DOMAIN_CONTROLLER</item>\n      <item>PHP_WINDOWS_NT_SERVER</item>\n      <item>PHP_WINDOWS_NT_WORKSTATION</item>\n      <item>PHP_WINDOWS_VERSION_BUILD</item>\n      <item>PHP_WINDOWS_VERSION_MAJOR</item>\n      <item>PHP_WINDOWS_VERSION_MINOR</item>\n      <item>PHP_WINDOWS_VERSION_PLATFORM</item>\n      <item>PHP_WINDOWS_VERSION_PRODUCTTYPE</item>\n      <item>PHP_WINDOWS_VERSION_SP_MAJOR</item>\n      <item>PHP_WINDOWS_VERSION_SP_MINOR</item>\n      <item>PHP_WINDOWS_VERSION_SUITEMASK</item>\n      <item>PKCS7_BINARY</item>\n      <item>PKCS7_DETACHED</item>\n      <item>PKCS7_NOATTR</item>\n      <item>PKCS7_NOCERTS</item>\n      <item>PKCS7_NOCHAIN</item>\n      <item>PKCS7_NOINTERN</item>\n      <item>PKCS7_NOSIGS</item>\n      <item>PKCS7_NOVERIFY</item>\n      <item>PKCS7_TEXT</item>\n      <item>PM_STR</item>\n      <item>PNG_ALL_FILTERS</item>\n      <item>PNG_FILTER_AVG</item>\n      <item>PNG_FILTER_NONE</item>\n      <item>PNG_FILTER_PAETH</item>\n      <item>PNG_FILTER_SUB</item>\n      <item>PNG_FILTER_UP</item>\n      <item>PNG_NO_FILTER</item>\n      <item>POLL_ERR</item>\n      <item>POLL_HUP</item>\n      <item>POLL_IN</item>\n      <item>POLL_MSG</item>\n      <item>POLL_OUT</item>\n      <item>POLL_PRI</item>\n      <item>POSITIVE_SIGN</item>\n      <item>POSIX_F_OK</item>\n      <item>POSIX_RLIMIT_AS</item>\n      <item>POSIX_RLIMIT_CORE</item>\n      <item>POSIX_RLIMIT_CPU</item>\n      <item>POSIX_RLIMIT_DATA</item>\n      <item>POSIX_RLIMIT_FSIZE</item>\n      <item>POSIX_RLIMIT_INFINITY</item>\n      <item>POSIX_RLIMIT_LOCKS</item>\n      <item>POSIX_RLIMIT_MEMLOCK</item>\n      <item>POSIX_RLIMIT_MSGQUEUE</item>\n      <item>POSIX_RLIMIT_NICE</item>\n      <item>POSIX_RLIMIT_NOFILE</item>\n      <item>POSIX_RLIMIT_NPROC</item>\n      <item>POSIX_RLIMIT_RSS</item>\n      <item>POSIX_RLIMIT_RTPRIO</item>\n      <item>POSIX_RLIMIT_RTTIME</item>\n      <item>POSIX_RLIMIT_SIGPENDING</item>\n      <item>POSIX_RLIMIT_STACK</item>\n      <item>POSIX_R_OK</item>\n      <item>POSIX_S_IFBLK</item>\n      <item>POSIX_S_IFCHR</item>\n      <item>POSIX_S_IFIFO</item>\n      <item>POSIX_S_IFREG</item>\n      <item>POSIX_S_IFSOCK</item>\n      <item>POSIX_W_OK</item>\n      <item>POSIX_X_OK</item>\n      <item>PREG_BACKTRACK_LIMIT_ERROR</item>\n      <item>PREG_BAD_UTF8_ERROR</item>\n      <item>PREG_BAD_UTF8_OFFSET_ERROR</item>\n      <item>PREG_INTERNAL_ERROR</item>\n      <item>PREG_JIT_STACKLIMIT_ERROR</item>\n      <item>PREG_NO_ERROR</item>\n      <item>PREG_OFFSET_CAPTURE</item>\n      <item>PREG_PATTERN_ORDER</item>\n      <item>PREG_RECURSION_LIMIT_ERROR</item>\n      <item>PREG_SET_ORDER</item>\n      <item>PREG_SPLIT_DELIM_CAPTURE</item>\n      <item>PREG_SPLIT_NO_EMPTY</item>\n      <item>PREG_SPLIT_OFFSET_CAPTURE</item>\n      <item>PREG_UNMATCHED_AS_NULL</item>\n      <item>PROF_TRACE</item>\n      <item>PSFS_ERR_FATAL</item>\n      <item>PSFS_FEED_ME</item>\n      <item>PSFS_FLAG_FLUSH_CLOSE</item>\n      <item>PSFS_FLAG_FLUSH_INC</item>\n      <item>PSFS_FLAG_NORMAL</item>\n      <item>PSFS_PASS_ON</item>\n      <item>PSPELL_BAD_SPELLERS</item>\n      <item>PSPELL_FAST</item>\n      <item>PSPELL_NORMAL</item>\n      <item>PSPELL_RUN_TOGETHER</item>\n      <item>PTHREADS_ALLOW_HEADERS</item>\n      <item>PTHREADS_INHERIT_ALL</item>\n      <item>PTHREADS_INHERIT_CLASSES</item>\n      <item>PTHREADS_INHERIT_COMMENTS</item>\n      <item>PTHREADS_INHERIT_CONSTANTS</item>\n      <item>PTHREADS_INHERIT_FUNCTIONS</item>\n      <item>PTHREADS_INHERIT_INCLUDES</item>\n      <item>PTHREADS_INHERIT_INI</item>\n      <item>PTHREADS_INHERIT_NONE</item>\n      <item>P_CS_PRECEDES</item>\n      <item>P_SEP_BY_SPACE</item>\n      <item>P_SIGN_POSN</item>\n      <item>RADIUS_ACCESS_ACCEPT</item>\n      <item>RADIUS_ACCESS_CHALLENGE</item>\n      <item>RADIUS_ACCESS_REJECT</item>\n      <item>RADIUS_ACCESS_REQUEST</item>\n      <item>RADIUS_ACCOUNTING_REQUEST</item>\n      <item>RADIUS_ACCOUNTING_RESPONSE</item>\n      <item>RADIUS_ACCT_AUTHENTIC</item>\n      <item>RADIUS_ACCT_DELAY_TIME</item>\n      <item>RADIUS_ACCT_INPUT_OCTETS</item>\n      <item>RADIUS_ACCT_INPUT_PACKETS</item>\n      <item>RADIUS_ACCT_LINK_COUNT</item>\n      <item>RADIUS_ACCT_MULTI_SESSION_ID</item>\n      <item>RADIUS_ACCT_OUTPUT_OCTETS</item>\n      <item>RADIUS_ACCT_OUTPUT_PACKETS</item>\n      <item>RADIUS_ACCT_SESSION_ID</item>\n      <item>RADIUS_ACCT_SESSION_TIME</item>\n      <item>RADIUS_ACCT_STATUS_TYPE</item>\n      <item>RADIUS_ACCT_TERMINATE_CAUSE</item>\n      <item>RADIUS_CALLBACK_ID</item>\n      <item>RADIUS_CALLBACK_NUMBER</item>\n      <item>RADIUS_CALLED_STATION_ID</item>\n      <item>RADIUS_CALLING_STATION_ID</item>\n      <item>RADIUS_CHAP_CHALLENGE</item>\n      <item>RADIUS_CHAP_PASSWORD</item>\n      <item>RADIUS_CLASS</item>\n      <item>RADIUS_COA_ACK</item>\n      <item>RADIUS_COA_NAK</item>\n      <item>RADIUS_COA_REQUEST</item>\n      <item>RADIUS_CONNECT_INFO</item>\n      <item>RADIUS_DISCONNECT_ACK</item>\n      <item>RADIUS_DISCONNECT_NAK</item>\n      <item>RADIUS_DISCONNECT_REQUEST</item>\n      <item>RADIUS_FILTER_ID</item>\n      <item>RADIUS_FRAMED_APPLETALK_LINK</item>\n      <item>RADIUS_FRAMED_APPLETALK_NETWORK</item>\n      <item>RADIUS_FRAMED_APPLETALK_ZONE</item>\n      <item>RADIUS_FRAMED_COMPRESSION</item>\n      <item>RADIUS_FRAMED_IPX_NETWORK</item>\n      <item>RADIUS_FRAMED_IP_ADDRESS</item>\n      <item>RADIUS_FRAMED_IP_NETMASK</item>\n      <item>RADIUS_FRAMED_MTU</item>\n      <item>RADIUS_FRAMED_PROTOCOL</item>\n      <item>RADIUS_FRAMED_ROUTE</item>\n      <item>RADIUS_FRAMED_ROUTING</item>\n      <item>RADIUS_IDLE_TIMEOUT</item>\n      <item>RADIUS_LOGIN_IP_HOST</item>\n      <item>RADIUS_LOGIN_LAT_GROUP</item>\n      <item>RADIUS_LOGIN_LAT_NODE</item>\n      <item>RADIUS_LOGIN_LAT_PORT</item>\n      <item>RADIUS_LOGIN_LAT_SERVICE</item>\n      <item>RADIUS_LOGIN_SERVICE</item>\n      <item>RADIUS_LOGIN_TCP_PORT</item>\n      <item>RADIUS_MPPE_KEY_LEN</item>\n      <item>RADIUS_NAS_IDENTIFIER</item>\n      <item>RADIUS_NAS_IP_ADDRESS</item>\n      <item>RADIUS_NAS_PORT</item>\n      <item>RADIUS_NAS_PORT_TYPE</item>\n      <item>RADIUS_OPTION_SALT</item>\n      <item>RADIUS_OPTION_TAGGED</item>\n      <item>RADIUS_PORT_LIMIT</item>\n      <item>RADIUS_PROXY_STATE</item>\n      <item>RADIUS_REPLY_MESSAGE</item>\n      <item>RADIUS_SERVICE_TYPE</item>\n      <item>RADIUS_SESSION_TIMEOUT</item>\n      <item>RADIUS_STATE</item>\n      <item>RADIUS_TERMINATION_ACTION</item>\n      <item>RADIUS_USER_NAME</item>\n      <item>RADIUS_USER_PASSWORD</item>\n      <item>RADIUS_VENDOR_MICROSOFT</item>\n      <item>RADIUS_VENDOR_SPECIFIC</item>\n      <item>RADIXCHAR</item>\n      <item>RAR_HOST_BEOS</item>\n      <item>RAR_HOST_MSDOS</item>\n      <item>RAR_HOST_OS2</item>\n      <item>RAR_HOST_UNIX</item>\n      <item>RAR_HOST_WIN32</item>\n      <item>READONLY_STATE</item>\n      <item>RECONFIGDISABLED</item>\n      <item>RECONFIGINPROGRESS</item>\n      <item>REPLACE</item>\n      <item>RPMREADER_ARCH</item>\n      <item>RPMREADER_ARCHIVESIZE</item>\n      <item>RPMREADER_BASENAMES</item>\n      <item>RPMREADER_BUILDARCHS</item>\n      <item>RPMREADER_BUILDHOST</item>\n      <item>RPMREADER_BUILDTIME</item>\n      <item>RPMREADER_CACHECTIME</item>\n      <item>RPMREADER_CACHEPKGMTIME</item>\n      <item>RPMREADER_CACHEPKGPATH</item>\n      <item>RPMREADER_CACHEPKGSIZE</item>\n      <item>RPMREADER_CHANGELOGNAME</item>\n      <item>RPMREADER_CHANGELOGTEXT</item>\n      <item>RPMREADER_CHANGELOGTIME</item>\n      <item>RPMREADER_CLASSDICT</item>\n      <item>RPMREADER_CONFLICTFLAGS</item>\n      <item>RPMREADER_CONFLICTNAME</item>\n      <item>RPMREADER_CONFLICTVERSION</item>\n      <item>RPMREADER_COOKIE</item>\n      <item>RPMREADER_COPYRIGHT</item>\n      <item>RPMREADER_DEPENDSDICT</item>\n      <item>RPMREADER_DESCRIPTION</item>\n      <item>RPMREADER_DIRINDEXES</item>\n      <item>RPMREADER_DIRNAMES</item>\n      <item>RPMREADER_DISTRIBUTION</item>\n      <item>RPMREADER_DISTURL</item>\n      <item>RPMREADER_EPOCH</item>\n      <item>RPMREADER_EXCLUDEARCH</item>\n      <item>RPMREADER_EXCLUDEOS</item>\n      <item>RPMREADER_EXCLUSIVEARCH</item>\n      <item>RPMREADER_EXCLUSIVEOS</item>\n      <item>RPMREADER_FILECLASS</item>\n      <item>RPMREADER_FILECOLORS</item>\n      <item>RPMREADER_FILECONTEXTS</item>\n      <item>RPMREADER_FILEDEPENDSN</item>\n      <item>RPMREADER_FILEDEPENDSX</item>\n      <item>RPMREADER_FILEDEVICES</item>\n      <item>RPMREADER_FILEFLAGS</item>\n      <item>RPMREADER_FILEGROUPNAME</item>\n      <item>RPMREADER_FILEINODES</item>\n      <item>RPMREADER_FILELANGS</item>\n      <item>RPMREADER_FILELINKTOS</item>\n      <item>RPMREADER_FILEMD5S</item>\n      <item>RPMREADER_FILEMODES</item>\n      <item>RPMREADER_FILEMTIMES</item>\n      <item>RPMREADER_FILERDEVS</item>\n      <item>RPMREADER_FILESIZES</item>\n      <item>RPMREADER_FILESTATES</item>\n      <item>RPMREADER_FILEUSERNAME</item>\n      <item>RPMREADER_FILEVERIFYFLAGS</item>\n      <item>RPMREADER_FSCONTEXTS</item>\n      <item>RPMREADER_GIF</item>\n      <item>RPMREADER_GROUP</item>\n      <item>RPMREADER_ICON</item>\n      <item>RPMREADER_INSTALLCOLOR</item>\n      <item>RPMREADER_INSTALLTID</item>\n      <item>RPMREADER_INSTALLTIME</item>\n      <item>RPMREADER_INSTPREFIXES</item>\n      <item>RPMREADER_LICENSE</item>\n      <item>RPMREADER_MAXIMUM</item>\n      <item>RPMREADER_MINIMUM</item>\n      <item>RPMREADER_NAME</item>\n      <item>RPMREADER_OBSOLETEFLAGS</item>\n      <item>RPMREADER_OBSOLETENAME</item>\n      <item>RPMREADER_OBSOLETES</item>\n      <item>RPMREADER_OBSOLETEVERSION</item>\n      <item>RPMREADER_OLDFILENAMES</item>\n      <item>RPMREADER_OPTFLAGS</item>\n      <item>RPMREADER_OS</item>\n      <item>RPMREADER_PACKAGER</item>\n      <item>RPMREADER_PATCH</item>\n      <item>RPMREADER_PATCHESFLAGS</item>\n      <item>RPMREADER_PATCHESNAME</item>\n      <item>RPMREADER_PATCHESVERSION</item>\n      <item>RPMREADER_PAYLOADCOMPRESSOR</item>\n      <item>RPMREADER_PAYLOADFLAGS</item>\n      <item>RPMREADER_PAYLOADFORMAT</item>\n      <item>RPMREADER_PLATFORM</item>\n      <item>RPMREADER_POLICIES</item>\n      <item>RPMREADER_POSTIN</item>\n      <item>RPMREADER_POSTINPROG</item>\n      <item>RPMREADER_POSTUN</item>\n      <item>RPMREADER_POSTUNPROG</item>\n      <item>RPMREADER_PREFIXES</item>\n      <item>RPMREADER_PREIN</item>\n      <item>RPMREADER_PREINPROG</item>\n      <item>RPMREADER_PREUN</item>\n      <item>RPMREADER_PREUNPROG</item>\n      <item>RPMREADER_PROVIDEFLAGS</item>\n      <item>RPMREADER_PROVIDENAME</item>\n      <item>RPMREADER_PROVIDES</item>\n      <item>RPMREADER_PROVIDEVERSION</item>\n      <item>RPMREADER_RECONTEXTS</item>\n      <item>RPMREADER_RELEASE</item>\n      <item>RPMREADER_REMOVETID</item>\n      <item>RPMREADER_REQUIREFLAGS</item>\n      <item>RPMREADER_REQUIRENAME</item>\n      <item>RPMREADER_REQUIREVERSION</item>\n      <item>RPMREADER_RHNPLATFORM</item>\n      <item>RPMREADER_RPMVERSION</item>\n      <item>RPMREADER_SERIAL</item>\n      <item>RPMREADER_SIZE</item>\n      <item>RPMREADER_SOURCE</item>\n      <item>RPMREADER_SOURCEPKGID</item>\n      <item>RPMREADER_SOURCERPM</item>\n      <item>RPMREADER_SUMMARY</item>\n      <item>RPMREADER_TRIGGERFLAGS</item>\n      <item>RPMREADER_TRIGGERINDEX</item>\n      <item>RPMREADER_TRIGGERNAME</item>\n      <item>RPMREADER_TRIGGERSCRIPTPROG</item>\n      <item>RPMREADER_TRIGGERSCRIPTS</item>\n      <item>RPMREADER_TRIGGERVERSION</item>\n      <item>RPMREADER_URL</item>\n      <item>RPMREADER_VENDOR</item>\n      <item>RPMREADER_VERIFYSCRIPT</item>\n      <item>RPMREADER_VERIFYSCRIPTPROG</item>\n      <item>RPMREADER_VERSION</item>\n      <item>RPMREADER_XPM</item>\n      <item>RUNKIT_ACC_PRIVATE</item>\n      <item>RUNKIT_ACC_PROTECTED</item>\n      <item>RUNKIT_ACC_PUBLIC</item>\n      <item>RUNKIT_ACC_STATIC</item>\n      <item>RUNKIT_IMPORT_CLASSES</item>\n      <item>RUNKIT_IMPORT_CLASS_CONSTS</item>\n      <item>RUNKIT_IMPORT_CLASS_METHODS</item>\n      <item>RUNKIT_IMPORT_CLASS_PROPS</item>\n      <item>RUNKIT_IMPORT_CLASS_STATIC_PROPS</item>\n      <item>RUNKIT_IMPORT_FUNCTIONS</item>\n      <item>RUNKIT_IMPORT_OVERRIDE</item>\n      <item>RUNKIT_VERSION</item>\n      <item>RUNTIMEINCONSISTENCY</item>\n      <item>SAM_AUTO</item>\n      <item>SAM_BOOLEAN</item>\n      <item>SAM_BUS</item>\n      <item>SAM_BYTE</item>\n      <item>SAM_BYTES</item>\n      <item>SAM_CORRELID</item>\n      <item>SAM_DELIVERYMODE</item>\n      <item>SAM_DOUBLE</item>\n      <item>SAM_ENDPOINTS</item>\n      <item>SAM_FLOAT</item>\n      <item>SAM_HOST</item>\n      <item>SAM_INT</item>\n      <item>SAM_LONG</item>\n      <item>SAM_MANUAL</item>\n      <item>SAM_MESSAGEID</item>\n      <item>SAM_MQTT</item>\n      <item>SAM_MQTT_CLEANSTART</item>\n      <item>SAM_NON_PERSISTENT</item>\n      <item>SAM_PASSWORD</item>\n      <item>SAM_PERSISTENT</item>\n      <item>SAM_PORT</item>\n      <item>SAM_PRIORITY</item>\n      <item>SAM_REPLY_TO</item>\n      <item>SAM_RTT</item>\n      <item>SAM_STRING</item>\n      <item>SAM_TARGETCHAIN</item>\n      <item>SAM_TEXT</item>\n      <item>SAM_TIMETOLIVE</item>\n      <item>SAM_TRANSACTIONS</item>\n      <item>SAM_TYPE</item>\n      <item>SAM_USERID</item>\n      <item>SAM_WAIT</item>\n      <item>SAM_WMQ</item>\n      <item>SAM_WMQ_BINDINGS</item>\n      <item>SAM_WMQ_CLIENT</item>\n      <item>SAM_WMQ_TARGET_CLIENT</item>\n      <item>SAM_WPM</item>\n      <item>SA_ALL</item>\n      <item>SA_MESSAGES</item>\n      <item>SA_RECENT</item>\n      <item>SA_UIDNEXT</item>\n      <item>SA_UIDVALIDITY</item>\n      <item>SA_UNSEEN</item>\n      <item>SCANDIR_SORT_ASCENDING</item>\n      <item>SCANDIR_SORT_DESCENDING</item>\n      <item>SCANDIR_SORT_NONE</item>\n      <item>SEARCHD_ERROR</item>\n      <item>SEARCHD_OK</item>\n      <item>SEARCHD_RETRY</item>\n      <item>SEARCHD_WARNING</item>\n      <item>SEASLOG_ALERT</item>\n      <item>SEASLOG_ALL</item>\n      <item>SEASLOG_APPENDER_FILE</item>\n      <item>SEASLOG_APPENDER_TCP</item>\n      <item>SEASLOG_APPENDER_UDP</item>\n      <item>SEASLOG_AUTHOR</item>\n      <item>SEASLOG_CLOSE_LOGGER_STREAM_MOD_ALL</item>\n      <item>SEASLOG_CLOSE_LOGGER_STREAM_MOD_ASSIGN</item>\n      <item>SEASLOG_CRITICAL</item>\n      <item>SEASLOG_DEBUG</item>\n      <item>SEASLOG_DETAIL_ORDER_ASC</item>\n      <item>SEASLOG_DETAIL_ORDER_DESC</item>\n      <item>SEASLOG_EMERGENCY</item>\n      <item>SEASLOG_ERROR</item>\n      <item>SEASLOG_INFO</item>\n      <item>SEASLOG_NOTICE</item>\n      <item>SEASLOG_REQUEST_VARIABLE_CLIENT_IP</item>\n      <item>SEASLOG_REQUEST_VARIABLE_DOMAIN_PORT</item>\n      <item>SEASLOG_REQUEST_VARIABLE_REQUEST_METHOD</item>\n      <item>SEASLOG_REQUEST_VARIABLE_REQUEST_URI</item>\n      <item>SEASLOG_VERSION</item>\n      <item>SEASLOG_WARNING</item>\n      <item>SEEK_CUR</item>\n      <item>SEEK_END</item>\n      <item>SEEK_SET</item>\n      <item>SEGV_ACCERR</item>\n      <item>SEGV_MAPERR</item>\n      <item>SEQUENCE</item>\n      <item>SESSIONEXPIRED</item>\n      <item>SESSIONMOVED</item>\n      <item>SESSION_EVENT</item>\n      <item>SE_FREE</item>\n      <item>SE_NOPREFETCH</item>\n      <item>SE_UID</item>\n      <item>SID</item>\n      <item>SIGABRT</item>\n      <item>SIGALRM</item>\n      <item>SIGBABY</item>\n      <item>SIGBUS</item>\n      <item>SIGCHLD</item>\n      <item>SIGCLD</item>\n      <item>SIGCONT</item>\n      <item>SIGFPE</item>\n      <item>SIGHUP</item>\n      <item>SIGILL</item>\n      <item>SIGINT</item>\n      <item>SIGIO</item>\n      <item>SIGIOT</item>\n      <item>SIGKILL</item>\n      <item>SIGPIPE</item>\n      <item>SIGPOLL</item>\n      <item>SIGPROF</item>\n      <item>SIGPWR</item>\n      <item>SIGQUIT</item>\n      <item>SIGSEGV</item>\n      <item>SIGSTKFLT</item>\n      <item>SIGSTOP</item>\n      <item>SIGSYS</item>\n      <item>SIGTERM</item>\n      <item>SIGTRAP</item>\n      <item>SIGTSTP</item>\n      <item>SIGTTIN</item>\n      <item>SIGTTOU</item>\n      <item>SIGURG</item>\n      <item>SIGUSR1</item>\n      <item>SIGUSR2</item>\n      <item>SIGVTALRM</item>\n      <item>SIGWINCH</item>\n      <item>SIGXCPU</item>\n      <item>SIGXFSZ</item>\n      <item>SIG_BLOCK</item>\n      <item>SIG_DFL</item>\n      <item>SIG_ERR</item>\n      <item>SIG_IGN</item>\n      <item>SIG_SETMASK</item>\n      <item>SIG_UNBLOCK</item>\n      <item>SI_ASYNCIO</item>\n      <item>SI_KERNEL</item>\n      <item>SI_MSGGQ</item>\n      <item>SI_NOINFO</item>\n      <item>SI_QUEUE</item>\n      <item>SI_SIGIO</item>\n      <item>SI_TIMER</item>\n      <item>SI_TKILL</item>\n      <item>SI_USER</item>\n      <item>SNMP_BIT_STR</item>\n      <item>SNMP_COUNTER</item>\n      <item>SNMP_COUNTER64</item>\n      <item>SNMP_INTEGER</item>\n      <item>SNMP_IPADDRESS</item>\n      <item>SNMP_NULL</item>\n      <item>SNMP_OBJECT_ID</item>\n      <item>SNMP_OCTET_STR</item>\n      <item>SNMP_OID_OUTPUT_FULL</item>\n      <item>SNMP_OID_OUTPUT_MODULE</item>\n      <item>SNMP_OID_OUTPUT_NONE</item>\n      <item>SNMP_OID_OUTPUT_NUMERIC</item>\n      <item>SNMP_OID_OUTPUT_SUFFIX</item>\n      <item>SNMP_OID_OUTPUT_UCD</item>\n      <item>SNMP_OPAQUE</item>\n      <item>SNMP_TIMETICKS</item>\n      <item>SNMP_UINTEGER</item>\n      <item>SNMP_UNSIGNED</item>\n      <item>SNMP_VALUE_LIBRARY</item>\n      <item>SNMP_VALUE_OBJECT</item>\n      <item>SNMP_VALUE_PLAIN</item>\n      <item>SOAP_1_1</item>\n      <item>SOAP_1_2</item>\n      <item>SOAP_ACTOR_NEXT</item>\n      <item>SOAP_ACTOR_NONE</item>\n      <item>SOAP_ACTOR_UNLIMATERECEIVER</item>\n      <item>SOAP_AUTHENTICATION_BASIC</item>\n      <item>SOAP_AUTHENTICATION_DIGEST</item>\n      <item>SOAP_COMPRESSION_ACCEPT</item>\n      <item>SOAP_COMPRESSION_DEFLATE</item>\n      <item>SOAP_COMPRESSION_GZIP</item>\n      <item>SOAP_DOCUMENT</item>\n      <item>SOAP_ENCODED</item>\n      <item>SOAP_ENC_ARRAY</item>\n      <item>SOAP_ENC_OBJECT</item>\n      <item>SOAP_FUNCTIONS_ALL</item>\n      <item>SOAP_LITERAL</item>\n      <item>SOAP_PERSISTENCE_REQUEST</item>\n      <item>SOAP_PERSISTENCE_SESSION</item>\n      <item>SOAP_RPC</item>\n      <item>SOAP_SINGLE_ELEMENT_ARRAYS</item>\n      <item>SOAP_SSL_METHOD_SSLv2</item>\n      <item>SOAP_SSL_METHOD_SSLv3</item>\n      <item>SOAP_SSL_METHOD_SSLv23</item>\n      <item>SOAP_SSL_METHOD_TLS</item>\n      <item>SOAP_USE_XSI_ARRAY_TYPE</item>\n      <item>SOAP_WAIT_ONE_WAY_CALLS</item>\n      <item>SOCKET_ADDRINUSE</item>\n      <item>SOCKET_E2BIG</item>\n      <item>SOCKET_EACCES</item>\n      <item>SOCKET_EADDRINUSE</item>\n      <item>SOCKET_EADDRNOTAVAIL</item>\n      <item>SOCKET_EADV</item>\n      <item>SOCKET_EAFNOSUPPORT</item>\n      <item>SOCKET_EAGAIN</item>\n      <item>SOCKET_EALREADY</item>\n      <item>SOCKET_EBADE</item>\n      <item>SOCKET_EBADF</item>\n      <item>SOCKET_EBADFD</item>\n      <item>SOCKET_EBADMSG</item>\n      <item>SOCKET_EBADR</item>\n      <item>SOCKET_EBADRQC</item>\n      <item>SOCKET_EBADSLT</item>\n      <item>SOCKET_EBUSY</item>\n      <item>SOCKET_ECHRNG</item>\n      <item>SOCKET_ECOMM</item>\n      <item>SOCKET_ECONNABORTED</item>\n      <item>SOCKET_ECONNREFUSED</item>\n      <item>SOCKET_ECONNRESET</item>\n      <item>SOCKET_EDESTADDRREQ</item>\n      <item>SOCKET_EDISCON</item>\n      <item>SOCKET_EDQUOT</item>\n      <item>SOCKET_EDUOT</item>\n      <item>SOCKET_EEXIST</item>\n      <item>SOCKET_EFAULT</item>\n      <item>SOCKET_EHOSTDOWN</item>\n      <item>SOCKET_EHOSTUNREACH</item>\n      <item>SOCKET_EIDRM</item>\n      <item>SOCKET_EINPROGRESS</item>\n      <item>SOCKET_EINTR</item>\n      <item>SOCKET_EINVAL</item>\n      <item>SOCKET_EIO</item>\n      <item>SOCKET_EISCONN</item>\n      <item>SOCKET_EISDIR</item>\n      <item>SOCKET_EISNAM</item>\n      <item>SOCKET_EL2HLT</item>\n      <item>SOCKET_EL2NSYNC</item>\n      <item>SOCKET_EL3HLT</item>\n      <item>SOCKET_EL3RST</item>\n      <item>SOCKET_ELNRNG</item>\n      <item>SOCKET_ELOOP</item>\n      <item>SOCKET_EMEDIUMTYPE</item>\n      <item>SOCKET_EMFILE</item>\n      <item>SOCKET_EMLINK</item>\n      <item>SOCKET_EMSGSIZE</item>\n      <item>SOCKET_EMULTIHOP</item>\n      <item>SOCKET_ENAMETOOLONG</item>\n      <item>SOCKET_ENETDOWN</item>\n      <item>SOCKET_ENETRESET</item>\n      <item>SOCKET_ENETUNREACH</item>\n      <item>SOCKET_ENFILE</item>\n      <item>SOCKET_ENOANO</item>\n      <item>SOCKET_ENOBUFS</item>\n      <item>SOCKET_ENOCSI</item>\n      <item>SOCKET_ENODATA</item>\n      <item>SOCKET_ENODEV</item>\n      <item>SOCKET_ENOENT</item>\n      <item>SOCKET_ENOLCK</item>\n      <item>SOCKET_ENOLINK</item>\n      <item>SOCKET_ENOMEDIUM</item>\n      <item>SOCKET_ENOMEM</item>\n      <item>SOCKET_ENOMSG</item>\n      <item>SOCKET_ENONET</item>\n      <item>SOCKET_ENOPROTOOPT</item>\n      <item>SOCKET_ENOSPC</item>\n      <item>SOCKET_ENOSR</item>\n      <item>SOCKET_ENOSTR</item>\n      <item>SOCKET_ENOSYS</item>\n      <item>SOCKET_ENOTBLK</item>\n      <item>SOCKET_ENOTCONN</item>\n      <item>SOCKET_ENOTDIR</item>\n      <item>SOCKET_ENOTEMPTY</item>\n      <item>SOCKET_ENOTSOCK</item>\n      <item>SOCKET_ENOTTY</item>\n      <item>SOCKET_ENOTUNIQ</item>\n      <item>SOCKET_ENXIO</item>\n      <item>SOCKET_EOPNOTSUPP</item>\n      <item>SOCKET_EPERM</item>\n      <item>SOCKET_EPFNOSUPPORT</item>\n      <item>SOCKET_EPIPE</item>\n      <item>SOCKET_EPROCLIM</item>\n      <item>SOCKET_EPROTO</item>\n      <item>SOCKET_EPROTONOSUPPORT</item>\n      <item>SOCKET_EPROTOOPT</item>\n      <item>SOCKET_EPROTOTYPE</item>\n      <item>SOCKET_EREMCHG</item>\n      <item>SOCKET_EREMOTE</item>\n      <item>SOCKET_EREMOTEIO</item>\n      <item>SOCKET_ERESTART</item>\n      <item>SOCKET_EROFS</item>\n      <item>SOCKET_ESHUTDOWN</item>\n      <item>SOCKET_ESOCKTNOSUPPORT</item>\n      <item>SOCKET_ESPIPE</item>\n      <item>SOCKET_ESRMNT</item>\n      <item>SOCKET_ESTALE</item>\n      <item>SOCKET_ESTRPIPE</item>\n      <item>SOCKET_ETIME</item>\n      <item>SOCKET_ETIMEDOUT</item>\n      <item>SOCKET_ETOOMANYREFS</item>\n      <item>SOCKET_ETOOMYREFS</item>\n      <item>SOCKET_EUNATCH</item>\n      <item>SOCKET_EUSERS</item>\n      <item>SOCKET_EWOULDBLOCK</item>\n      <item>SOCKET_EXDEV</item>\n      <item>SOCKET_EXFULL</item>\n      <item>SOCKET_HOST_NOT_FOUND</item>\n      <item>SOCKET_NOTINITIALISED</item>\n      <item>SOCKET_NO_ADDRESS</item>\n      <item>SOCKET_NO_DATA</item>\n      <item>SOCKET_NO_RECOVERY</item>\n      <item>SOCKET_SYSNOTREADY</item>\n      <item>SOCKET_TRY_AGAIN</item>\n      <item>SOCKET_VERNOTSUPPORTED</item>\n      <item>SOCK_DGRAM</item>\n      <item>SOCK_RAW</item>\n      <item>SOCK_RDM</item>\n      <item>SOCK_SEQPACKET</item>\n      <item>SOCK_STREAM</item>\n      <item>SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES</item>\n      <item>SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES</item>\n      <item>SODIUM_CRYPTO_AUTH_BYTES</item>\n      <item>SODIUM_CRYPTO_AUTH_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_BOX_KEYPAIRBYTES</item>\n      <item>SODIUM_CRYPTO_BOX_MACBYTES</item>\n      <item>SODIUM_CRYPTO_BOX_NONCEBYTES</item>\n      <item>SODIUM_CRYPTO_BOX_PUBLICKEYBYTES</item>\n      <item>SODIUM_CRYPTO_BOX_SEALBYTES</item>\n      <item>SODIUM_CRYPTO_BOX_SECRETKEYBYTES</item>\n      <item>SODIUM_CRYPTO_BOX_SEEDBYTES</item>\n      <item>SODIUM_CRYPTO_GENERICHASH_BYTES</item>\n      <item>SODIUM_CRYPTO_GENERICHASH_BYTES_MAX</item>\n      <item>SODIUM_CRYPTO_GENERICHASH_BYTES_MIN</item>\n      <item>SODIUM_CRYPTO_GENERICHASH_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX</item>\n      <item>SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN</item>\n      <item>SODIUM_CRYPTO_KDF_BYTES_MAX</item>\n      <item>SODIUM_CRYPTO_KDF_BYTES_MIN</item>\n      <item>SODIUM_CRYPTO_KDF_CONTEXTBYTES</item>\n      <item>SODIUM_CRYPTO_KDF_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_KX_KEYPAIRBYTES</item>\n      <item>SODIUM_CRYPTO_KX_PUBLICKEYBYTES</item>\n      <item>SODIUM_CRYPTO_KX_SECRETKEYBYTES</item>\n      <item>SODIUM_CRYPTO_KX_SEEDBYTES</item>\n      <item>SODIUM_CRYPTO_KX_SESSIONKEYBYTES</item>\n      <item>SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13</item>\n      <item>SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13</item>\n      <item>SODIUM_CRYPTO_PWHASH_ALG_DEFAULT</item>\n      <item>SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE</item>\n      <item>SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE</item>\n      <item>SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_SALTBYTES</item>\n      <item>SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE</item>\n      <item>SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES</item>\n      <item>SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX</item>\n      <item>SODIUM_CRYPTO_PWHASH_STRPREFIX</item>\n      <item>SODIUM_CRYPTO_SCALARMULT_BYTES</item>\n      <item>SODIUM_CRYPTO_SCALARMULT_SCALARBYTES</item>\n      <item>SODIUM_CRYPTO_SECRETBOX_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_SECRETBOX_MACBYTES</item>\n      <item>SODIUM_CRYPTO_SECRETBOX_NONCEBYTES</item>\n      <item>SODIUM_CRYPTO_SHORTHASH_BYTES</item>\n      <item>SODIUM_CRYPTO_SHORTHASH_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_SIGN_BYTES</item>\n      <item>SODIUM_CRYPTO_SIGN_KEYPAIRBYTES</item>\n      <item>SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES</item>\n      <item>SODIUM_CRYPTO_SIGN_SECRETKEYBYTES</item>\n      <item>SODIUM_CRYPTO_SIGN_SEEDBYTES</item>\n      <item>SODIUM_CRYPTO_STREAM_KEYBYTES</item>\n      <item>SODIUM_CRYPTO_STREAM_NONCEBYTES</item>\n      <item>SODIUM_LIBRARY_MAJOR_VERSION</item>\n      <item>SODIUM_LIBRARY_MINOR_VERSION</item>\n      <item>SODIUM_LIBRARY_VERSION</item>\n      <item>SOLR_EXTENSION_VERSION</item>\n      <item>SOLR_MAJOR_VERSION</item>\n      <item>SOLR_MINOR_VERSION</item>\n      <item>SOLR_PATCH_VERSION</item>\n      <item>SOL_SOCKET</item>\n      <item>SOL_TCP</item>\n      <item>SOL_UDP</item>\n      <item>SORTARRIVAL</item>\n      <item>SORTCC</item>\n      <item>SORTDATE</item>\n      <item>SORTFROM</item>\n      <item>SORTSIZE</item>\n      <item>SORTSUBJECT</item>\n      <item>SORTTO</item>\n      <item>SORT_ASC</item>\n      <item>SORT_DESC</item>\n      <item>SORT_FLAG_CASE</item>\n      <item>SORT_LOCALE_STRING</item>\n      <item>SORT_NATURAL</item>\n      <item>SORT_NUMERIC</item>\n      <item>SORT_REGULAR</item>\n      <item>SORT_STRING</item>\n      <item>SO_BROADCAST</item>\n      <item>SO_DEBUG</item>\n      <item>SO_DONTROUTE</item>\n      <item>SO_ERROR</item>\n      <item>SO_FREE</item>\n      <item>SO_KEEPALIVE</item>\n      <item>SO_LINGER</item>\n      <item>SO_NOSERVER</item>\n      <item>SO_OOBINLINE</item>\n      <item>SO_RCVBUF</item>\n      <item>SO_RCVLOWAT</item>\n      <item>SO_RCVTIMEO</item>\n      <item>SO_REUSEADDR</item>\n      <item>SO_REUSEPORT</item>\n      <item>SO_SNDBUF</item>\n      <item>SO_SNDLOWAT</item>\n      <item>SO_SNDTIMEO</item>\n      <item>SO_TYPE</item>\n      <item>SPH_ATTR_BOOL</item>\n      <item>SPH_ATTR_FLOAT</item>\n      <item>SPH_ATTR_INTEGER</item>\n      <item>SPH_ATTR_MULTI</item>\n      <item>SPH_ATTR_ORDINAL</item>\n      <item>SPH_ATTR_TIMESTAMP</item>\n      <item>SPH_FILTER_FLOATRANGE</item>\n      <item>SPH_FILTER_RANGE</item>\n      <item>SPH_FILTER_VALUES</item>\n      <item>SPH_GROUPBY_ATTR</item>\n      <item>SPH_GROUPBY_ATTRPAIR</item>\n      <item>SPH_GROUPBY_DAY</item>\n      <item>SPH_GROUPBY_MONTH</item>\n      <item>SPH_GROUPBY_WEEK</item>\n      <item>SPH_GROUPBY_YEAR</item>\n      <item>SPH_MATCH_ALL</item>\n      <item>SPH_MATCH_ANY</item>\n      <item>SPH_MATCH_BOOLEAN</item>\n      <item>SPH_MATCH_EXTENDED</item>\n      <item>SPH_MATCH_EXTENDED2</item>\n      <item>SPH_MATCH_FULLSCAN</item>\n      <item>SPH_MATCH_PHRASE</item>\n      <item>SPH_RANK_BM25</item>\n      <item>SPH_RANK_NONE</item>\n      <item>SPH_RANK_PROXIMITY_BM25</item>\n      <item>SPH_RANK_WORDCOUNT</item>\n      <item>SPH_SORT_ATTR_ASC</item>\n      <item>SPH_SORT_ATTR_DESC</item>\n      <item>SPH_SORT_EXPR</item>\n      <item>SPH_SORT_EXTENDED</item>\n      <item>SPH_SORT_RELEVANCE</item>\n      <item>SPH_SORT_TIME_SEGMENTS</item>\n      <item>SPLIT</item>\n      <item>SQLBIT</item>\n      <item>SQLCHAR</item>\n      <item>SQLFLT4</item>\n      <item>SQLFLT8</item>\n      <item>SQLINT1</item>\n      <item>SQLINT2</item>\n      <item>SQLINT4</item>\n      <item>SQLITE3_ASSOC</item>\n      <item>SQLITE3_BLOB</item>\n      <item>SQLITE3_BOTH</item>\n      <item>SQLITE3_DETERMINISTIC</item>\n      <item>SQLITE3_FLOAT</item>\n      <item>SQLITE3_INTEGER</item>\n      <item>SQLITE3_NULL</item>\n      <item>SQLITE3_NUM</item>\n      <item>SQLITE3_OPEN_CREATE</item>\n      <item>SQLITE3_OPEN_READONLY</item>\n      <item>SQLITE3_OPEN_READWRITE</item>\n      <item>SQLITE3_TEXT</item>\n      <item>SQLITE_ABORT</item>\n      <item>SQLITE_ASSOC</item>\n      <item>SQLITE_AUTH</item>\n      <item>SQLITE_BOTH</item>\n      <item>SQLITE_BUSY</item>\n      <item>SQLITE_CANTOPEN</item>\n      <item>SQLITE_CONSTRAINT</item>\n      <item>SQLITE_CORRUPT</item>\n      <item>SQLITE_DONE</item>\n      <item>SQLITE_EMPTY</item>\n      <item>SQLITE_ERROR</item>\n      <item>SQLITE_FORMAT</item>\n      <item>SQLITE_FULL</item>\n      <item>SQLITE_INTERNAL</item>\n      <item>SQLITE_INTERRUPT</item>\n      <item>SQLITE_IOERR</item>\n      <item>SQLITE_LOCKED</item>\n      <item>SQLITE_MISMATCH</item>\n      <item>SQLITE_MISUSE</item>\n      <item>SQLITE_NOLFS</item>\n      <item>SQLITE_NOMEM</item>\n      <item>SQLITE_NOTADB</item>\n      <item>SQLITE_NOTFOUND</item>\n      <item>SQLITE_NUM</item>\n      <item>SQLITE_OK</item>\n      <item>SQLITE_PERM</item>\n      <item>SQLITE_PROTOCOL</item>\n      <item>SQLITE_READONLY</item>\n      <item>SQLITE_ROW</item>\n      <item>SQLITE_SCHEMA</item>\n      <item>SQLITE_TOOBIG</item>\n      <item>SQLSRV_CURSOR_BUFFERED</item>\n      <item>SQLSRV_CURSOR_DYNAMIC</item>\n      <item>SQLSRV_CURSOR_FORWARD</item>\n      <item>SQLSRV_CURSOR_KEYSET</item>\n      <item>SQLSRV_CURSOR_STATIC</item>\n      <item>SQLSRV_ENC_BINARY</item>\n      <item>SQLSRV_ENC_CHAR</item>\n      <item>SQLSRV_ERR_ALL</item>\n      <item>SQLSRV_ERR_ERRORS</item>\n      <item>SQLSRV_ERR_WARNINGS</item>\n      <item>SQLSRV_FETCH_ASSOC</item>\n      <item>SQLSRV_FETCH_BOTH</item>\n      <item>SQLSRV_FETCH_NUMERIC</item>\n      <item>SQLSRV_LOG_SEVERITY_ALL</item>\n      <item>SQLSRV_LOG_SEVERITY_ERROR</item>\n      <item>SQLSRV_LOG_SEVERITY_NOTICE</item>\n      <item>SQLSRV_LOG_SEVERITY_WARNING</item>\n      <item>SQLSRV_LOG_SYSTEM_ALL</item>\n      <item>SQLSRV_LOG_SYSTEM_CONN</item>\n      <item>SQLSRV_LOG_SYSTEM_INIT</item>\n      <item>SQLSRV_LOG_SYSTEM_OFF</item>\n      <item>SQLSRV_LOG_SYSTEM_STMT</item>\n      <item>SQLSRV_LOG_SYSTEM_UTIL</item>\n      <item>SQLSRV_NULLABLE_NO</item>\n      <item>SQLSRV_NULLABLE_UNKNOWN</item>\n      <item>SQLSRV_NULLABLE_YES</item>\n      <item>SQLSRV_PARAM_IN</item>\n      <item>SQLSRV_PARAM_INOUT</item>\n      <item>SQLSRV_PARAM_OUT</item>\n      <item>SQLSRV_PHPTYPE_DATETIME</item>\n      <item>SQLSRV_PHPTYPE_FLOAT</item>\n      <item>SQLSRV_PHPTYPE_INT</item>\n      <item>SQLSRV_PHPTYPE_STREAM</item>\n      <item>SQLSRV_PHPTYPE_STRING</item>\n      <item>SQLSRV_SCROLL_ABSOLUTE</item>\n      <item>SQLSRV_SCROLL_FIRST</item>\n      <item>SQLSRV_SCROLL_LAST</item>\n      <item>SQLSRV_SCROLL_NEXT</item>\n      <item>SQLSRV_SCROLL_PRIOR</item>\n      <item>SQLSRV_SCROLL_RELATIVE</item>\n      <item>SQLSRV_SQLTYPE_BIGINT</item>\n      <item>SQLSRV_SQLTYPE_BINARY</item>\n      <item>SQLSRV_SQLTYPE_BIT</item>\n      <item>SQLSRV_SQLTYPE_CHAR</item>\n      <item>SQLSRV_SQLTYPE_DATE</item>\n      <item>SQLSRV_SQLTYPE_DATETIME</item>\n      <item>SQLSRV_SQLTYPE_DATETIME2</item>\n      <item>SQLSRV_SQLTYPE_DATETIMEOFFSET</item>\n      <item>SQLSRV_SQLTYPE_DECIMAL</item>\n      <item>SQLSRV_SQLTYPE_FLOAT</item>\n      <item>SQLSRV_SQLTYPE_IMAGE</item>\n      <item>SQLSRV_SQLTYPE_INT</item>\n      <item>SQLSRV_SQLTYPE_MONEY</item>\n      <item>SQLSRV_SQLTYPE_NCHAR</item>\n      <item>SQLSRV_SQLTYPE_NTEXT</item>\n      <item>SQLSRV_SQLTYPE_NUMERIC</item>\n      <item>SQLSRV_SQLTYPE_NVARCHAR</item>\n      <item>SQLSRV_SQLTYPE_REAL</item>\n      <item>SQLSRV_SQLTYPE_SMALLDATETIME</item>\n      <item>SQLSRV_SQLTYPE_SMALLINT</item>\n      <item>SQLSRV_SQLTYPE_SMALLMONEY</item>\n      <item>SQLSRV_SQLTYPE_TEXT</item>\n      <item>SQLSRV_SQLTYPE_TIME</item>\n      <item>SQLSRV_SQLTYPE_TIMESTAMP</item>\n      <item>SQLSRV_SQLTYPE_TINYINT</item>\n      <item>SQLSRV_SQLTYPE_UDT</item>\n      <item>SQLSRV_SQLTYPE_UNIQUEIDENTIFIER</item>\n      <item>SQLSRV_SQLTYPE_VARBINARY</item>\n      <item>SQLSRV_SQLTYPE_VARCHAR</item>\n      <item>SQLSRV_SQLTYPE_XML</item>\n      <item>SQLSRV_TXN_READ_COMMITTED</item>\n      <item>SQLSRV_TXN_READ_SERIALIZABLE</item>\n      <item>SQLSRV_TXN_READ_UNCOMMITTED</item>\n      <item>SQLSRV_TXN_REPEATABLE_READ</item>\n      <item>SQLSRV_TXN_SNAPSHOT</item>\n      <item>SQLTEXT</item>\n      <item>SQLT_AFC</item>\n      <item>SQLT_AVC</item>\n      <item>SQLT_BDOUBLE</item>\n      <item>SQLT_BFILEE</item>\n      <item>SQLT_BFLOAT</item>\n      <item>SQLT_BIN</item>\n      <item>SQLT_BLOB</item>\n      <item>SQLT_BOL</item>\n      <item>SQLT_CFILEE</item>\n      <item>SQLT_CHR</item>\n      <item>SQLT_CLOB</item>\n      <item>SQLT_FLT</item>\n      <item>SQLT_INT</item>\n      <item>SQLT_LBI</item>\n      <item>SQLT_LNG</item>\n      <item>SQLT_LVC</item>\n      <item>SQLT_NTY</item>\n      <item>SQLT_NUM</item>\n      <item>SQLT_ODT</item>\n      <item>SQLT_RDD</item>\n      <item>SQLT_RSET</item>\n      <item>SQLT_STR</item>\n      <item>SQLT_UIN</item>\n      <item>SQLT_VCS</item>\n      <item>SQLVARCHAR</item>\n      <item>SQL_BEST_ROWID</item>\n      <item>SQL_BIGINT</item>\n      <item>SQL_BINARY</item>\n      <item>SQL_BIT</item>\n      <item>SQL_CHAR</item>\n      <item>SQL_CONCURRENCY</item>\n      <item>SQL_CONCUR_LOCK</item>\n      <item>SQL_CONCUR_READ_ONLY</item>\n      <item>SQL_CONCUR_ROWVER</item>\n      <item>SQL_CONCUR_VALUES</item>\n      <item>SQL_CURSOR_DYNAMIC</item>\n      <item>SQL_CURSOR_FORWARD_ONLY</item>\n      <item>SQL_CURSOR_KEYSET_DRIVEN</item>\n      <item>SQL_CURSOR_STATIC</item>\n      <item>SQL_CURSOR_TYPE</item>\n      <item>SQL_CUR_USE_DRIVER</item>\n      <item>SQL_CUR_USE_IF_NEEDED</item>\n      <item>SQL_CUR_USE_ODBC</item>\n      <item>SQL_DATE</item>\n      <item>SQL_DECIMAL</item>\n      <item>SQL_DOUBLE</item>\n      <item>SQL_ENSURE</item>\n      <item>SQL_FLOAT</item>\n      <item>SQL_INDEX_ALL</item>\n      <item>SQL_INDEX_UNIQUE</item>\n      <item>SQL_INTEGER</item>\n      <item>SQL_KEYSET_SIZE</item>\n      <item>SQL_LONGVARBINARY</item>\n      <item>SQL_LONGVARCHAR</item>\n      <item>SQL_NO_NULLS</item>\n      <item>SQL_NULLABLE</item>\n      <item>SQL_NUMERIC</item>\n      <item>SQL_ODBC_CURSORS</item>\n      <item>SQL_QUICK</item>\n      <item>SQL_REAL</item>\n      <item>SQL_ROWVER</item>\n      <item>SQL_SCOPE_CURROW</item>\n      <item>SQL_SCOPE_SESSION</item>\n      <item>SQL_SCOPE_TRANSACTION</item>\n      <item>SQL_SMALLINT</item>\n      <item>SQL_TIME</item>\n      <item>SQL_TIMESTAMP</item>\n      <item>SQL_TINYINT</item>\n      <item>SQL_TYPE_DATE</item>\n      <item>SQL_TYPE_TIME</item>\n      <item>SQL_TYPE_TIMESTAMP</item>\n      <item>SQL_VARBINARY</item>\n      <item>SQL_VARCHAR</item>\n      <item>SSH2_DEFAULT_TERMINAL</item>\n      <item>SSH2_DEFAULT_TERM_HEIGHT</item>\n      <item>SSH2_DEFAULT_TERM_UNIT</item>\n      <item>SSH2_DEFAULT_TERM_WIDTH</item>\n      <item>SSH2_FINGERPRINT_HEX</item>\n      <item>SSH2_FINGERPRINT_MD5</item>\n      <item>SSH2_FINGERPRINT_RAW</item>\n      <item>SSH2_FINGERPRINT_SHA1</item>\n      <item>SSH2_STREAM_STDERR</item>\n      <item>SSH2_STREAM_STDIO</item>\n      <item>SSH2_TERM_UNIT_CHARS</item>\n      <item>SSH2_TERM_UNIT_PIXELS</item>\n      <item>STATEMENT_TRACE</item>\n      <item>STDERR</item>\n      <item>STDIN</item>\n      <item>STDOUT</item>\n      <item>STD_PROP_LIST</item>\n      <item>STREAM_CAST_AS_STREAM</item>\n      <item>STREAM_CAST_FOR_SELECT</item>\n      <item>STREAM_CLIENT_ASYNC_CONNECT</item>\n      <item>STREAM_CLIENT_CONNECT</item>\n      <item>STREAM_CLIENT_PERSISTENT</item>\n      <item>STREAM_FILTER_ALL</item>\n      <item>STREAM_FILTER_READ</item>\n      <item>STREAM_FILTER_WRITE</item>\n      <item>STREAM_IPPROTO_ICMP</item>\n      <item>STREAM_IPPROTO_IP</item>\n      <item>STREAM_IPPROTO_RAW</item>\n      <item>STREAM_IPPROTO_TCP</item>\n      <item>STREAM_IPPROTO_UDP</item>\n      <item>STREAM_META_ACCESS</item>\n      <item>STREAM_META_GROUP</item>\n      <item>STREAM_META_GROUP_NAME</item>\n      <item>STREAM_META_OWNER</item>\n      <item>STREAM_META_OWNER_NAME</item>\n      <item>STREAM_META_TOUCH</item>\n      <item>STREAM_NOTIFY_AUTH_REQUIRED</item>\n      <item>STREAM_NOTIFY_AUTH_RESULT</item>\n      <item>STREAM_NOTIFY_COMPLETED</item>\n      <item>STREAM_NOTIFY_CONNECT</item>\n      <item>STREAM_NOTIFY_FAILURE</item>\n      <item>STREAM_NOTIFY_FILE_SIZE_IS</item>\n      <item>STREAM_NOTIFY_MIME_TYPE_IS</item>\n      <item>STREAM_NOTIFY_PROGRESS</item>\n      <item>STREAM_NOTIFY_REDIRECTED</item>\n      <item>STREAM_NOTIFY_RESOLVE</item>\n      <item>STREAM_NOTIFY_SEVERITY_ERR</item>\n      <item>STREAM_NOTIFY_SEVERITY_INFO</item>\n      <item>STREAM_NOTIFY_SEVERITY_WARN</item>\n      <item>STREAM_OOB</item>\n      <item>STREAM_PEEK</item>\n      <item>STREAM_PF_INET</item>\n      <item>STREAM_PF_INET6</item>\n      <item>STREAM_PF_UNIX</item>\n      <item>STREAM_REPORT_ERRORS</item>\n      <item>STREAM_SERVER_BIND</item>\n      <item>STREAM_SERVER_LISTEN</item>\n      <item>STREAM_SHUT_RD</item>\n      <item>STREAM_SHUT_RDWR</item>\n      <item>STREAM_SHUT_WR</item>\n      <item>STREAM_SOCK_DGRAM</item>\n      <item>STREAM_SOCK_RAW</item>\n      <item>STREAM_SOCK_RDM</item>\n      <item>STREAM_SOCK_SEQPACKET</item>\n      <item>STREAM_SOCK_STREAM</item>\n      <item>STREAM_URL_STAT_LINK</item>\n      <item>STREAM_URL_STAT_QUIET</item>\n      <item>STREAM_USE_PATH</item>\n      <item>STR_PAD_BOTH</item>\n      <item>STR_PAD_LEFT</item>\n      <item>STR_PAD_RIGHT</item>\n      <item>ST_SET</item>\n      <item>ST_SILENT</item>\n      <item>ST_UID</item>\n      <item>SUMMARY_TRACE</item>\n      <item>SUNFUNCS_RET_DOUBLE</item>\n      <item>SUNFUNCS_RET_STRING</item>\n      <item>SUNFUNCS_RET_TIMESTAMP</item>\n      <item>SVN_AUTH_PARAM_CONFIG</item>\n      <item>SVN_AUTH_PARAM_CONFIG_DIR</item>\n      <item>SVN_AUTH_PARAM_DEFAULT_PASSWORD</item>\n      <item>SVN_AUTH_PARAM_DEFAULT_USERNAME</item>\n      <item>SVN_AUTH_PARAM_DONT_STORE_PASSWORDS</item>\n      <item>SVN_AUTH_PARAM_NON_INTERACTIVE</item>\n      <item>SVN_AUTH_PARAM_NO_AUTH_CACHE</item>\n      <item>SVN_AUTH_PARAM_SERVER_GROUP</item>\n      <item>SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO</item>\n      <item>SVN_AUTH_PARAM_SSL_SERVER_FAILURES</item>\n      <item>SVN_FS_CONFIG_FS_TYPE</item>\n      <item>SVN_FS_TYPE_BDB</item>\n      <item>SVN_FS_TYPE_FSFS</item>\n      <item>SVN_NODE_DIR</item>\n      <item>SVN_NODE_FILE</item>\n      <item>SVN_NODE_NONE</item>\n      <item>SVN_NODE_UNKNOWN</item>\n      <item>SVN_PROP_REVISION_AUTHOR</item>\n      <item>SVN_PROP_REVISION_DATE</item>\n      <item>SVN_PROP_REVISION_LOG</item>\n      <item>SVN_PROP_REVISION_ORIG_DATE</item>\n      <item>SVN_REVISION_HEAD</item>\n      <item>SVN_WC_STATUS_ADDED</item>\n      <item>SVN_WC_STATUS_CONFLICTED</item>\n      <item>SVN_WC_STATUS_DELETED</item>\n      <item>SVN_WC_STATUS_EXTERNAL</item>\n      <item>SVN_WC_STATUS_IGNORED</item>\n      <item>SVN_WC_STATUS_INCOMPLETE</item>\n      <item>SVN_WC_STATUS_MERGED</item>\n      <item>SVN_WC_STATUS_MISSING</item>\n      <item>SVN_WC_STATUS_MODIFIED</item>\n      <item>SVN_WC_STATUS_NONE</item>\n      <item>SVN_WC_STATUS_NORMAL</item>\n      <item>SVN_WC_STATUS_OBSTRUCTED</item>\n      <item>SVN_WC_STATUS_REPLACED</item>\n      <item>SVN_WC_STATUS_UNVERSIONED</item>\n      <item>SWFACTION_DATA</item>\n      <item>SWFACTION_ENTERFRAME</item>\n      <item>SWFACTION_KEYDOWN</item>\n      <item>SWFACTION_KEYUP</item>\n      <item>SWFACTION_MOUSEDOWN</item>\n      <item>SWFACTION_MOUSEMOVE</item>\n      <item>SWFACTION_MOUSEUP</item>\n      <item>SWFACTION_ONLOAD</item>\n      <item>SWFACTION_UNLOAD</item>\n      <item>SWFBUTTON_DOWN</item>\n      <item>SWFBUTTON_DRAGOUT</item>\n      <item>SWFBUTTON_DRAGOVER</item>\n      <item>SWFBUTTON_HIT</item>\n      <item>SWFBUTTON_MOUSEDOWN</item>\n      <item>SWFBUTTON_MOUSEOUT</item>\n      <item>SWFBUTTON_MOUSEOVER</item>\n      <item>SWFBUTTON_MOUSEUP</item>\n      <item>SWFBUTTON_MOUSEUPOUTSIDE</item>\n      <item>SWFBUTTON_OVER</item>\n      <item>SWFBUTTON_UP</item>\n      <item>SWFFILL_CLIPPED_BITMAP</item>\n      <item>SWFFILL_LINEAR_GRADIENT</item>\n      <item>SWFFILL_RADIAL_GRADIENT</item>\n      <item>SWFFILL_TILED_BITMAP</item>\n      <item>SWFTEXTFIELD_ALIGN_CENTER</item>\n      <item>SWFTEXTFIELD_ALIGN_JUSTIFY</item>\n      <item>SWFTEXTFIELD_ALIGN_LEFT</item>\n      <item>SWFTEXTFIELD_ALIGN_RIGHT</item>\n      <item>SWFTEXTFIELD_DRAWBOX</item>\n      <item>SWFTEXTFIELD_HASLENGTH</item>\n      <item>SWFTEXTFIELD_HTML</item>\n      <item>SWFTEXTFIELD_MULTILINE</item>\n      <item>SWFTEXTFIELD_NOEDIT</item>\n      <item>SWFTEXTFIELD_NOSELECT</item>\n      <item>SWFTEXTFIELD_PASSWORD</item>\n      <item>SWFTEXTFIELD_WORDWRAP</item>\n      <item>SWOOLE_AIO_BASE</item>\n      <item>SWOOLE_AIO_LINUX</item>\n      <item>SWOOLE_ASYNC</item>\n      <item>SWOOLE_BASE</item>\n      <item>SWOOLE_EVENT_READ</item>\n      <item>SWOOLE_EVENT_WRITE</item>\n      <item>SWOOLE_FAST_PACK</item>\n      <item>SWOOLE_FILELOCK</item>\n      <item>SWOOLE_IPC_MSGQUEUE</item>\n      <item>SWOOLE_IPC_PREEMPTIVE</item>\n      <item>SWOOLE_IPC_UNSOCK</item>\n      <item>SWOOLE_KEEP</item>\n      <item>SWOOLE_MUTEX</item>\n      <item>SWOOLE_PROCESS</item>\n      <item>SWOOLE_RWLOCK</item>\n      <item>SWOOLE_SEM</item>\n      <item>SWOOLE_SOCK_ASYNC</item>\n      <item>SWOOLE_SOCK_SYNC</item>\n      <item>SWOOLE_SOCK_TCP</item>\n      <item>SWOOLE_SOCK_TCP6</item>\n      <item>SWOOLE_SOCK_UDP</item>\n      <item>SWOOLE_SOCK_UDP6</item>\n      <item>SWOOLE_SOCK_UNIX_DGRAM</item>\n      <item>SWOOLE_SOCK_UNIX_STREAM</item>\n      <item>SWOOLE_SYNC</item>\n      <item>SWOOLE_TCP</item>\n      <item>SWOOLE_TCP6</item>\n      <item>SWOOLE_THREAD</item>\n      <item>SWOOLE_UDP</item>\n      <item>SWOOLE_UDP6</item>\n      <item>SWOOLE_UNIX_DGRAM</item>\n      <item>SWOOLE_UNIX_STREAM</item>\n      <item>SWOOLE_VERSION</item>\n      <item>SYSTEMERROR</item>\n      <item>S_ALL</item>\n      <item>S_EXECUTOR</item>\n      <item>S_FILES</item>\n      <item>S_INCLUDE</item>\n      <item>S_INTERNAL</item>\n      <item>S_IRGRP</item>\n      <item>S_IROTH</item>\n      <item>S_IRUSR</item>\n      <item>S_IRWXG</item>\n      <item>S_IRWXO</item>\n      <item>S_IRWXU</item>\n      <item>S_IWGRP</item>\n      <item>S_IWOTH</item>\n      <item>S_IWUSR</item>\n      <item>S_IXGRP</item>\n      <item>S_IXOTH</item>\n      <item>S_IXUSR</item>\n      <item>S_MAIL</item>\n      <item>S_MEMORY</item>\n      <item>S_MISC</item>\n      <item>S_SESSION</item>\n      <item>S_SQL</item>\n      <item>S_VARS</item>\n      <item>TCP_NODELAY</item>\n      <item>THOUSANDS_SEP</item>\n      <item>THOUSEP</item>\n      <item>TIDY_NODETYPE_ASP</item>\n      <item>TIDY_NODETYPE_CDATA</item>\n      <item>TIDY_NODETYPE_COMMENT</item>\n      <item>TIDY_NODETYPE_DOCTYPE</item>\n      <item>TIDY_NODETYPE_END</item>\n      <item>TIDY_NODETYPE_JSTE</item>\n      <item>TIDY_NODETYPE_PHP</item>\n      <item>TIDY_NODETYPE_PROCINS</item>\n      <item>TIDY_NODETYPE_ROOT</item>\n      <item>TIDY_NODETYPE_SECTION</item>\n      <item>TIDY_NODETYPE_START</item>\n      <item>TIDY_NODETYPE_STARTEND</item>\n      <item>TIDY_NODETYPE_TEXT</item>\n      <item>TIDY_NODETYPE_XMLDECL</item>\n      <item>TIDY_TAG_A</item>\n      <item>TIDY_TAG_ABBR</item>\n      <item>TIDY_TAG_ACRONYM</item>\n      <item>TIDY_TAG_ALIGN</item>\n      <item>TIDY_TAG_APPLET</item>\n      <item>TIDY_TAG_AREA</item>\n      <item>TIDY_TAG_ARTICLE</item>\n      <item>TIDY_TAG_ASIDE</item>\n      <item>TIDY_TAG_AUDIO</item>\n      <item>TIDY_TAG_B</item>\n      <item>TIDY_TAG_BASE</item>\n      <item>TIDY_TAG_BASEFONT</item>\n      <item>TIDY_TAG_BDI</item>\n      <item>TIDY_TAG_BDO</item>\n      <item>TIDY_TAG_BGSOUND</item>\n      <item>TIDY_TAG_BIG</item>\n      <item>TIDY_TAG_BLINK</item>\n      <item>TIDY_TAG_BLOCKQUOTE</item>\n      <item>TIDY_TAG_BODY</item>\n      <item>TIDY_TAG_BR</item>\n      <item>TIDY_TAG_BUTTON</item>\n      <item>TIDY_TAG_CANVAS</item>\n      <item>TIDY_TAG_CAPTION</item>\n      <item>TIDY_TAG_CENTER</item>\n      <item>TIDY_TAG_CITE</item>\n      <item>TIDY_TAG_CODE</item>\n      <item>TIDY_TAG_COL</item>\n      <item>TIDY_TAG_COLGROUP</item>\n      <item>TIDY_TAG_COMMAND</item>\n      <item>TIDY_TAG_COMMENT</item>\n      <item>TIDY_TAG_DATALIST</item>\n      <item>TIDY_TAG_DD</item>\n      <item>TIDY_TAG_DEL</item>\n      <item>TIDY_TAG_DETAILS</item>\n      <item>TIDY_TAG_DFN</item>\n      <item>TIDY_TAG_DIALOG</item>\n      <item>TIDY_TAG_DIR</item>\n      <item>TIDY_TAG_DIV</item>\n      <item>TIDY_TAG_DL</item>\n      <item>TIDY_TAG_DT</item>\n      <item>TIDY_TAG_EM</item>\n      <item>TIDY_TAG_EMBED</item>\n      <item>TIDY_TAG_FIELDSET</item>\n      <item>TIDY_TAG_FIGCAPTION</item>\n      <item>TIDY_TAG_FIGURE</item>\n      <item>TIDY_TAG_FONT</item>\n      <item>TIDY_TAG_FOOTER</item>\n      <item>TIDY_TAG_FORM</item>\n      <item>TIDY_TAG_FRAME</item>\n      <item>TIDY_TAG_FRAMESET</item>\n      <item>TIDY_TAG_H1</item>\n      <item>TIDY_TAG_H2</item>\n      <item>TIDY_TAG_H3</item>\n      <item>TIDY_TAG_H4</item>\n      <item>TIDY_TAG_H5</item>\n      <item>TIDY_TAG_H6</item>\n      <item>TIDY_TAG_HEAD</item>\n      <item>TIDY_TAG_HEADER</item>\n      <item>TIDY_TAG_HGROUP</item>\n      <item>TIDY_TAG_HR</item>\n      <item>TIDY_TAG_HTML</item>\n      <item>TIDY_TAG_I</item>\n      <item>TIDY_TAG_IFRAME</item>\n      <item>TIDY_TAG_ILAYER</item>\n      <item>TIDY_TAG_IMG</item>\n      <item>TIDY_TAG_INPUT</item>\n      <item>TIDY_TAG_INS</item>\n      <item>TIDY_TAG_ISINDEX</item>\n      <item>TIDY_TAG_KBD</item>\n      <item>TIDY_TAG_KEYGEN</item>\n      <item>TIDY_TAG_LABEL</item>\n      <item>TIDY_TAG_LAYER</item>\n      <item>TIDY_TAG_LEGEND</item>\n      <item>TIDY_TAG_LI</item>\n      <item>TIDY_TAG_LINK</item>\n      <item>TIDY_TAG_LISTING</item>\n      <item>TIDY_TAG_MAIN</item>\n      <item>TIDY_TAG_MAP</item>\n      <item>TIDY_TAG_MARK</item>\n      <item>TIDY_TAG_MARQUEE</item>\n      <item>TIDY_TAG_MENU</item>\n      <item>TIDY_TAG_MENUITEM</item>\n      <item>TIDY_TAG_META</item>\n      <item>TIDY_TAG_METER</item>\n      <item>TIDY_TAG_MULTICOL</item>\n      <item>TIDY_TAG_NAV</item>\n      <item>TIDY_TAG_NOBR</item>\n      <item>TIDY_TAG_NOEMBED</item>\n      <item>TIDY_TAG_NOFRAMES</item>\n      <item>TIDY_TAG_NOLAYER</item>\n      <item>TIDY_TAG_NOSAVE</item>\n      <item>TIDY_TAG_NOSCRIPT</item>\n      <item>TIDY_TAG_OBJECT</item>\n      <item>TIDY_TAG_OL</item>\n      <item>TIDY_TAG_OPTGROUP</item>\n      <item>TIDY_TAG_OPTION</item>\n      <item>TIDY_TAG_OUTPUT</item>\n      <item>TIDY_TAG_P</item>\n      <item>TIDY_TAG_PARAM</item>\n      <item>TIDY_TAG_PLAINTEXT</item>\n      <item>TIDY_TAG_PRE</item>\n      <item>TIDY_TAG_PROGRESS</item>\n      <item>TIDY_TAG_Q</item>\n      <item>TIDY_TAG_RB</item>\n      <item>TIDY_TAG_RBC</item>\n      <item>TIDY_TAG_RP</item>\n      <item>TIDY_TAG_RT</item>\n      <item>TIDY_TAG_RTC</item>\n      <item>TIDY_TAG_RUBY</item>\n      <item>TIDY_TAG_S</item>\n      <item>TIDY_TAG_SAMP</item>\n      <item>TIDY_TAG_SCRIPT</item>\n      <item>TIDY_TAG_SECTION</item>\n      <item>TIDY_TAG_SELECT</item>\n      <item>TIDY_TAG_SERVER</item>\n      <item>TIDY_TAG_SERVLET</item>\n      <item>TIDY_TAG_SMALL</item>\n      <item>TIDY_TAG_SOURCE</item>\n      <item>TIDY_TAG_SPACER</item>\n      <item>TIDY_TAG_SPAN</item>\n      <item>TIDY_TAG_STRIKE</item>\n      <item>TIDY_TAG_STRONG</item>\n      <item>TIDY_TAG_STYLE</item>\n      <item>TIDY_TAG_SUB</item>\n      <item>TIDY_TAG_SUMMARY</item>\n      <item>TIDY_TAG_SUP</item>\n      <item>TIDY_TAG_TABLE</item>\n      <item>TIDY_TAG_TBODY</item>\n      <item>TIDY_TAG_TD</item>\n      <item>TIDY_TAG_TEMPLATE</item>\n      <item>TIDY_TAG_TEXTAREA</item>\n      <item>TIDY_TAG_TFOOT</item>\n      <item>TIDY_TAG_TH</item>\n      <item>TIDY_TAG_THEAD</item>\n      <item>TIDY_TAG_TIME</item>\n      <item>TIDY_TAG_TITLE</item>\n      <item>TIDY_TAG_TR</item>\n      <item>TIDY_TAG_TRACK</item>\n      <item>TIDY_TAG_TT</item>\n      <item>TIDY_TAG_U</item>\n      <item>TIDY_TAG_UL</item>\n      <item>TIDY_TAG_UNKNOWN</item>\n      <item>TIDY_TAG_VAR</item>\n      <item>TIDY_TAG_VIDEO</item>\n      <item>TIDY_TAG_WBR</item>\n      <item>TIDY_TAG_XMP</item>\n      <item>TIMING_TRACE</item>\n      <item>TRADER_COMPATIBILITY_DEFAULT</item>\n      <item>TRADER_COMPATIBILITY_METASTOCK</item>\n      <item>TRADER_ERR_ALLOC_ERR</item>\n      <item>TRADER_ERR_BAD_OBJECT</item>\n      <item>TRADER_ERR_BAD_PARAM</item>\n      <item>TRADER_ERR_FUNC_NOT_FOUND</item>\n      <item>TRADER_ERR_GROUP_NOT_FOUND</item>\n      <item>TRADER_ERR_INPUT_NOT_ALL_INITIALIZE</item>\n      <item>TRADER_ERR_INTERNAL_ERROR</item>\n      <item>TRADER_ERR_INVALID_HANDLE</item>\n      <item>TRADER_ERR_INVALID_LIST_TYPE</item>\n      <item>TRADER_ERR_INVALID_PARAM_FUNCTION</item>\n      <item>TRADER_ERR_INVALID_PARAM_HOLDER</item>\n      <item>TRADER_ERR_INVALID_PARAM_HOLDER_TYPE</item>\n      <item>TRADER_ERR_LIB_NOT_INITIALIZE</item>\n      <item>TRADER_ERR_NOT_SUPPORTED</item>\n      <item>TRADER_ERR_OUTPUT_NOT_ALL_INITIALIZE</item>\n      <item>TRADER_ERR_OUT_OF_RANGE_END_INDEX</item>\n      <item>TRADER_ERR_OUT_OF_RANGE_START_INDEX</item>\n      <item>TRADER_ERR_SUCCESS</item>\n      <item>TRADER_ERR_UNKNOWN_ERROR</item>\n      <item>TRADER_FUNC_UNST_ADX</item>\n      <item>TRADER_FUNC_UNST_ADXR</item>\n      <item>TRADER_FUNC_UNST_ALL</item>\n      <item>TRADER_FUNC_UNST_ATR</item>\n      <item>TRADER_FUNC_UNST_CMO</item>\n      <item>TRADER_FUNC_UNST_DX</item>\n      <item>TRADER_FUNC_UNST_EMA</item>\n      <item>TRADER_FUNC_UNST_HT_DCPERIOD</item>\n      <item>TRADER_FUNC_UNST_HT_DCPHASE</item>\n      <item>TRADER_FUNC_UNST_HT_PHASOR</item>\n      <item>TRADER_FUNC_UNST_HT_SINE</item>\n      <item>TRADER_FUNC_UNST_HT_TRENDLINE</item>\n      <item>TRADER_FUNC_UNST_HT_TRENDMODE</item>\n      <item>TRADER_FUNC_UNST_KAMA</item>\n      <item>TRADER_FUNC_UNST_MAMA</item>\n      <item>TRADER_FUNC_UNST_MFI</item>\n      <item>TRADER_FUNC_UNST_MINUS_DI</item>\n      <item>TRADER_FUNC_UNST_MINUS_DM</item>\n      <item>TRADER_FUNC_UNST_NATR</item>\n      <item>TRADER_FUNC_UNST_NONE</item>\n      <item>TRADER_FUNC_UNST_PLUS_DI</item>\n      <item>TRADER_FUNC_UNST_PLUS_DM</item>\n      <item>TRADER_FUNC_UNST_RSI</item>\n      <item>TRADER_FUNC_UNST_STOCHRSI</item>\n      <item>TRADER_FUNC_UNST_T3</item>\n      <item>TRADER_MA_TYPE_DEMA</item>\n      <item>TRADER_MA_TYPE_EMA</item>\n      <item>TRADER_MA_TYPE_KAMA</item>\n      <item>TRADER_MA_TYPE_MAMA</item>\n      <item>TRADER_MA_TYPE_SMA</item>\n      <item>TRADER_MA_TYPE_T3</item>\n      <item>TRADER_MA_TYPE_TEMA</item>\n      <item>TRADER_MA_TYPE_TRIMA</item>\n      <item>TRADER_MA_TYPE_WMA</item>\n      <item>TRADER_REAL_MAX</item>\n      <item>TRADER_REAL_MIN</item>\n      <item>TRAP_BRKPT</item>\n      <item>TRAP_TRACE</item>\n      <item>TYPEAPPLICATION</item>\n      <item>TYPEAUDIO</item>\n      <item>TYPEIMAGE</item>\n      <item>TYPEMESSAGE</item>\n      <item>TYPEMODEL</item>\n      <item>TYPEMULTIPART</item>\n      <item>TYPEOTHER</item>\n      <item>TYPETEXT</item>\n      <item>TYPEVIDEO</item>\n      <item>T_ABSTRACT</item>\n      <item>T_AND_EQUAL</item>\n      <item>T_ARRAY</item>\n      <item>T_ARRAY_CAST</item>\n      <item>T_AS</item>\n      <item>T_BAD_CHARACTER</item>\n      <item>T_BOOLEAN_AND</item>\n      <item>T_BOOLEAN_OR</item>\n      <item>T_BOOL_CAST</item>\n      <item>T_BREAK</item>\n      <item>T_CALLABLE</item>\n      <item>T_CASE</item>\n      <item>T_CATCH</item>\n      <item>T_CHARACTER</item>\n      <item>T_CLASS</item>\n      <item>T_CLASS_C</item>\n      <item>T_CLONE</item>\n      <item>T_CLOSE_TAG</item>\n      <item>T_COALESCE</item>\n      <item>T_COMMENT</item>\n      <item>T_CONCAT_EQUAL</item>\n      <item>T_CONST</item>\n      <item>T_CONSTANT_ENCAPSED_STRING</item>\n      <item>T_CONTINUE</item>\n      <item>T_CURLY_OPEN</item>\n      <item>T_DEC</item>\n      <item>T_DECLARE</item>\n      <item>T_DEFAULT</item>\n      <item>T_DIR</item>\n      <item>T_DIV_EQUAL</item>\n      <item>T_DNUMBER</item>\n      <item>T_DO</item>\n      <item>T_DOC_COMMENT</item>\n      <item>T_DOLLAR_OPEN_CURLY_BRACES</item>\n      <item>T_DOUBLE_ARROW</item>\n      <item>T_DOUBLE_CAST</item>\n      <item>T_DOUBLE_COLON</item>\n      <item>T_ECHO</item>\n      <item>T_ELLIPSIS</item>\n      <item>T_ELSE</item>\n      <item>T_ELSEIF</item>\n      <item>T_EMPTY</item>\n      <item>T_ENCAPSED_AND_WHITESPACE</item>\n      <item>T_ENDDECLARE</item>\n      <item>T_ENDFOR</item>\n      <item>T_ENDFOREACH</item>\n      <item>T_ENDIF</item>\n      <item>T_ENDSWITCH</item>\n      <item>T_ENDWHILE</item>\n      <item>T_END_HEREDOC</item>\n      <item>T_EVAL</item>\n      <item>T_EXIT</item>\n      <item>T_EXTENDS</item>\n      <item>T_FILE</item>\n      <item>T_FINAL</item>\n      <item>T_FINALLY</item>\n      <item>T_FMT</item>\n      <item>T_FMT_AMPM</item>\n      <item>T_FOR</item>\n      <item>T_FOREACH</item>\n      <item>T_FUNCTION</item>\n      <item>T_FUNC_C</item>\n      <item>T_GLOBAL</item>\n      <item>T_GOTO</item>\n      <item>T_HALT_COMPILER</item>\n      <item>T_IF</item>\n      <item>T_IMPLEMENTS</item>\n      <item>T_INC</item>\n      <item>T_INCLUDE</item>\n      <item>T_INCLUDE_ONCE</item>\n      <item>T_INLINE_HTML</item>\n      <item>T_INSTANCEOF</item>\n      <item>T_INSTEADOF</item>\n      <item>T_INTERFACE</item>\n      <item>T_INT_CAST</item>\n      <item>T_ISSET</item>\n      <item>T_IS_EQUAL</item>\n      <item>T_IS_GREATER_OR_EQUAL</item>\n      <item>T_IS_IDENTICAL</item>\n      <item>T_IS_NOT_EQUAL</item>\n      <item>T_IS_NOT_IDENTICAL</item>\n      <item>T_IS_SMALLER_OR_EQUAL</item>\n      <item>T_LINE</item>\n      <item>T_LIST</item>\n      <item>T_LNUMBER</item>\n      <item>T_LOGICAL_AND</item>\n      <item>T_LOGICAL_OR</item>\n      <item>T_LOGICAL_XOR</item>\n      <item>T_METHOD_C</item>\n      <item>T_MINUS_EQUAL</item>\n      <item>T_MOD_EQUAL</item>\n      <item>T_MUL_EQUAL</item>\n      <item>T_NAMESPACE</item>\n      <item>T_NEW</item>\n      <item>T_NS_C</item>\n      <item>T_NS_SEPARATOR</item>\n      <item>T_NUM_STRING</item>\n      <item>T_OBJECT_CAST</item>\n      <item>T_OBJECT_OPERATOR</item>\n      <item>T_OPEN_TAG</item>\n      <item>T_OPEN_TAG_WITH_ECHO</item>\n      <item>T_OR_EQUAL</item>\n      <item>T_PAAMAYIM_NEKUDOTAYIM</item>\n      <item>T_PLUS_EQUAL</item>\n      <item>T_POW</item>\n      <item>T_POW_EQUAL</item>\n      <item>T_PRINT</item>\n      <item>T_PRIVATE</item>\n      <item>T_PROTECTED</item>\n      <item>T_PUBLIC</item>\n      <item>T_REQUIRE</item>\n      <item>T_REQUIRE_ONCE</item>\n      <item>T_RETURN</item>\n      <item>T_SL</item>\n      <item>T_SL_EQUAL</item>\n      <item>T_SPACESHIP</item>\n      <item>T_SR</item>\n      <item>T_SR_EQUAL</item>\n      <item>T_START_HEREDOC</item>\n      <item>T_STATIC</item>\n      <item>T_STRING</item>\n      <item>T_STRING_CAST</item>\n      <item>T_STRING_VARNAME</item>\n      <item>T_SWITCH</item>\n      <item>T_THROW</item>\n      <item>T_TRAIT</item>\n      <item>T_TRAIT_C</item>\n      <item>T_TRY</item>\n      <item>T_UNSET</item>\n      <item>T_UNSET_CAST</item>\n      <item>T_USE</item>\n      <item>T_VAR</item>\n      <item>T_VARIABLE</item>\n      <item>T_WHILE</item>\n      <item>T_WHITESPACE</item>\n      <item>T_XOR_EQUAL</item>\n      <item>T_YIELD</item>\n      <item>T_YIELD_FROM</item>\n      <item>UDM_CACHE_DISABLED</item>\n      <item>UDM_CACHE_ENABLED</item>\n      <item>UDM_CROSSWORDS_DISABLED</item>\n      <item>UDM_CROSSWORDS_ENABLED</item>\n      <item>UDM_CROSS_WORDS_DISABLED</item>\n      <item>UDM_CROSS_WORDS_ENABLED</item>\n      <item>UDM_FIELD_CATEGORY</item>\n      <item>UDM_FIELD_CHARSET</item>\n      <item>UDM_FIELD_CONTENT</item>\n      <item>UDM_FIELD_CRC</item>\n      <item>UDM_FIELD_DESC</item>\n      <item>UDM_FIELD_DESCRIPTION</item>\n      <item>UDM_FIELD_KEYWORDS</item>\n      <item>UDM_FIELD_LANG</item>\n      <item>UDM_FIELD_MODIFIED</item>\n      <item>UDM_FIELD_ORDER</item>\n      <item>UDM_FIELD_RATING</item>\n      <item>UDM_FIELD_SCORE</item>\n      <item>UDM_FIELD_SIZE</item>\n      <item>UDM_FIELD_TEXT</item>\n      <item>UDM_FIELD_TITLE</item>\n      <item>UDM_FIELD_URL</item>\n      <item>UDM_FIELD_URLID</item>\n      <item>UDM_ISPELL_PREFIXES_DISABLED</item>\n      <item>UDM_ISPELL_PREFIXES_ENABLED</item>\n      <item>UDM_ISPELL_PREFIX_DISABLED</item>\n      <item>UDM_ISPELL_PREFIX_ENABLED</item>\n      <item>UDM_ISPELL_TYPE_AFFIX</item>\n      <item>UDM_ISPELL_TYPE_DB</item>\n      <item>UDM_ISPELL_TYPE_SERVER</item>\n      <item>UDM_ISPELL_TYPE_SPELL</item>\n      <item>UDM_LIMIT_CAT</item>\n      <item>UDM_LIMIT_DATE</item>\n      <item>UDM_LIMIT_LANG</item>\n      <item>UDM_LIMIT_TAG</item>\n      <item>UDM_LIMIT_URL</item>\n      <item>UDM_MATCH_BEGIN</item>\n      <item>UDM_MATCH_END</item>\n      <item>UDM_MATCH_SUBSTR</item>\n      <item>UDM_MATCH_WORD</item>\n      <item>UDM_MODE_ALL</item>\n      <item>UDM_MODE_ANY</item>\n      <item>UDM_MODE_BOOL</item>\n      <item>UDM_MODE_PHRASE</item>\n      <item>UDM_PARAM_BROWSER_CHARSET</item>\n      <item>UDM_PARAM_CACHE_MODE</item>\n      <item>UDM_PARAM_CHARSET</item>\n      <item>UDM_PARAM_CROSSWORDS</item>\n      <item>UDM_PARAM_CROSS_WORDS</item>\n      <item>UDM_PARAM_DATADIR</item>\n      <item>UDM_PARAM_FIRST_DOC</item>\n      <item>UDM_PARAM_FOUND</item>\n      <item>UDM_PARAM_HLBEG</item>\n      <item>UDM_PARAM_HLEND</item>\n      <item>UDM_PARAM_ISPELL_PREFIX</item>\n      <item>UDM_PARAM_ISPELL_PREFIXES</item>\n      <item>UDM_PARAM_LAST_DOC</item>\n      <item>UDM_PARAM_LOCAL_CHARSET</item>\n      <item>UDM_PARAM_MAX_WORDLEN</item>\n      <item>UDM_PARAM_MAX_WORD_LEN</item>\n      <item>UDM_PARAM_MIN_WORDLEN</item>\n      <item>UDM_PARAM_MIN_WORD_LEN</item>\n      <item>UDM_PARAM_NUM_ROWS</item>\n      <item>UDM_PARAM_PAGE_NUM</item>\n      <item>UDM_PARAM_PAGE_SIZE</item>\n      <item>UDM_PARAM_PHRASE_MODE</item>\n      <item>UDM_PARAM_PREFIX</item>\n      <item>UDM_PARAM_PREFIXES</item>\n      <item>UDM_PARAM_QSTRING</item>\n      <item>UDM_PARAM_REMOTE_ADDR</item>\n      <item>UDM_PARAM_SEARCHD</item>\n      <item>UDM_PARAM_SEARCHTIME</item>\n      <item>UDM_PARAM_SEARCH_MODE</item>\n      <item>UDM_PARAM_SEARCH_TIME</item>\n      <item>UDM_PARAM_STOPFILE</item>\n      <item>UDM_PARAM_STOPTABLE</item>\n      <item>UDM_PARAM_STOP_FILE</item>\n      <item>UDM_PARAM_STOP_TABLE</item>\n      <item>UDM_PARAM_SYNONYM</item>\n      <item>UDM_PARAM_TRACK_MODE</item>\n      <item>UDM_PARAM_VARDIR</item>\n      <item>UDM_PARAM_WEIGHT_FACTOR</item>\n      <item>UDM_PARAM_WORDINFO</item>\n      <item>UDM_PARAM_WORD_INFO</item>\n      <item>UDM_PARAM_WORD_MATCH</item>\n      <item>UDM_PHRASE_DISABLED</item>\n      <item>UDM_PHRASE_ENABLED</item>\n      <item>UDM_PREFIXES_DISABLED</item>\n      <item>UDM_PREFIXES_ENABLED</item>\n      <item>UDM_PREFIX_DISABLED</item>\n      <item>UDM_PREFIX_ENABLED</item>\n      <item>UDM_TRACK_DISABLED</item>\n      <item>UDM_TRACK_ENABLED</item>\n      <item>UNIMPLEMENTED</item>\n      <item>UNKNOWN_TYPE</item>\n      <item>UPLOAD_ERR_CANT_WRITE</item>\n      <item>UPLOAD_ERR_EXTENSION</item>\n      <item>UPLOAD_ERR_FORM_SIZE</item>\n      <item>UPLOAD_ERR_INI_SIZE</item>\n      <item>UPLOAD_ERR_NO_FILE</item>\n      <item>UPLOAD_ERR_NO_TMP_DIR</item>\n      <item>UPLOAD_ERR_OK</item>\n      <item>UPLOAD_ERR_PARTIAL</item>\n      <item>USE_KEY</item>\n      <item>UTF-8</item>\n      <item>VARCMP_EQ</item>\n      <item>VARCMP_GT</item>\n      <item>VARCMP_LT</item>\n      <item>VARCMP_NULL</item>\n      <item>VARNISH_COMPAT_2</item>\n      <item>VARNISH_COMPAT_3</item>\n      <item>VARNISH_CONFIG_COMPAT</item>\n      <item>VARNISH_CONFIG_HOST</item>\n      <item>VARNISH_CONFIG_IDENT</item>\n      <item>VARNISH_CONFIG_PORT</item>\n      <item>VARNISH_CONFIG_SECRET</item>\n      <item>VARNISH_CONFIG_TIMEOUT</item>\n      <item>VARNISH_STATUS_AUTH</item>\n      <item>VARNISH_STATUS_CANT</item>\n      <item>VARNISH_STATUS_CLOSE</item>\n      <item>VARNISH_STATUS_COMMS</item>\n      <item>VARNISH_STATUS_OK</item>\n      <item>VARNISH_STATUS_PARAM</item>\n      <item>VARNISH_STATUS_SYNTAX</item>\n      <item>VARNISH_STATUS_TOOFEW</item>\n      <item>VARNISH_STATUS_TOOMANY</item>\n      <item>VARNISH_STATUS_UNIMPL</item>\n      <item>VARNISH_STATUS_UNKNOWN</item>\n      <item>VT_ARRAY</item>\n      <item>VT_BOOL</item>\n      <item>VT_BSTR</item>\n      <item>VT_BYREF</item>\n      <item>VT_CY</item>\n      <item>VT_DATE</item>\n      <item>VT_DECIMAL</item>\n      <item>VT_DISPATCH</item>\n      <item>VT_EMPTY</item>\n      <item>VT_ERROR</item>\n      <item>VT_I1</item>\n      <item>VT_I2</item>\n      <item>VT_I4</item>\n      <item>VT_INT</item>\n      <item>VT_NULL</item>\n      <item>VT_R4</item>\n      <item>VT_R8</item>\n      <item>VT_UI1</item>\n      <item>VT_UI2</item>\n      <item>VT_UI4</item>\n      <item>VT_UINT</item>\n      <item>VT_UNKNOWN</item>\n      <item>VT_VARIANT</item>\n      <item>WEBSOCKET_OPCODE_BINARY</item>\n      <item>WEBSOCKET_OPCODE_PING</item>\n      <item>WEBSOCKET_OPCODE_TEXT</item>\n      <item>WEBSOCKET_STATUS_ACTIVE</item>\n      <item>WEBSOCKET_STATUS_CONNECTION</item>\n      <item>WEBSOCKET_STATUS_FRAME</item>\n      <item>WEBSOCKET_STATUS_HANDSHAKE</item>\n      <item>WIN32_ABOVE_NORMAL_PRIORITY_CLASS</item>\n      <item>WIN32_BELOW_NORMAL_PRIORITY_CLASS</item>\n      <item>WIN32_ERROR_ACCESS_DENIED</item>\n      <item>WIN32_ERROR_CIRCULAR_DEPENDENCY</item>\n      <item>WIN32_ERROR_DATABASE_DOES_NOT_EXIST</item>\n      <item>WIN32_ERROR_DEPENDENT_SERVICES_RUNNING</item>\n      <item>WIN32_ERROR_DUPLICATE_SERVICE_NAME</item>\n      <item>WIN32_ERROR_FAILED_SERVICE_CONTROLLER_CONNECT</item>\n      <item>WIN32_ERROR_INSUFFICIENT_BUFFER</item>\n      <item>WIN32_ERROR_INVALID_DATA</item>\n      <item>WIN32_ERROR_INVALID_HANDLE</item>\n      <item>WIN32_ERROR_INVALID_LEVEL</item>\n      <item>WIN32_ERROR_INVALID_NAME</item>\n      <item>WIN32_ERROR_INVALID_PARAMETER</item>\n      <item>WIN32_ERROR_INVALID_SERVICE_ACCOUNT</item>\n      <item>WIN32_ERROR_INVALID_SERVICE_CONTROL</item>\n      <item>WIN32_ERROR_PATH_NOT_FOUND</item>\n      <item>WIN32_ERROR_SERVICE_ALREADY_RUNNING</item>\n      <item>WIN32_ERROR_SERVICE_CANNOT_ACCEPT_CTRL</item>\n      <item>WIN32_ERROR_SERVICE_DATABASE_LOCKED</item>\n      <item>WIN32_ERROR_SERVICE_DEPENDENCY_DELETED</item>\n      <item>WIN32_ERROR_SERVICE_DEPENDENCY_FAIL</item>\n      <item>WIN32_ERROR_SERVICE_DISABLED</item>\n      <item>WIN32_ERROR_SERVICE_DOES_NOT_EXIST</item>\n      <item>WIN32_ERROR_SERVICE_EXISTS</item>\n      <item>WIN32_ERROR_SERVICE_LOGON_FAILED</item>\n      <item>WIN32_ERROR_SERVICE_MARKED_FOR_DELETE</item>\n      <item>WIN32_ERROR_SERVICE_NOT_ACTIVE</item>\n      <item>WIN32_ERROR_SERVICE_NO_THREAD</item>\n      <item>WIN32_ERROR_SERVICE_REQUEST_TIMEOUT</item>\n      <item>WIN32_ERROR_SHUTDOWN_IN_PROGRESS</item>\n      <item>WIN32_HIGH_PRIORITY_CLASS</item>\n      <item>WIN32_IDLE_PRIORITY_CLASS</item>\n      <item>WIN32_NORMAL_PRIORITY_CLASS</item>\n      <item>WIN32_NO_ERROR</item>\n      <item>WIN32_REALTIME_PRIORITY_CLASS</item>\n      <item>WIN32_SERVICE_ACCEPT_PAUSE_CONTINUE</item>\n      <item>WIN32_SERVICE_ACCEPT_PRESHUTDOWN</item>\n      <item>WIN32_SERVICE_ACCEPT_SHUTDOWN</item>\n      <item>WIN32_SERVICE_ACCEPT_STOP</item>\n      <item>WIN32_SERVICE_AUTO_START</item>\n      <item>WIN32_SERVICE_CONTINUE_PENDING</item>\n      <item>WIN32_SERVICE_CONTROL_CONTINUE</item>\n      <item>WIN32_SERVICE_CONTROL_INTERROGATE</item>\n      <item>WIN32_SERVICE_CONTROL_PAUSE</item>\n      <item>WIN32_SERVICE_CONTROL_PRESHUTDOWN</item>\n      <item>WIN32_SERVICE_CONTROL_SHUTDOWN</item>\n      <item>WIN32_SERVICE_CONTROL_STOP</item>\n      <item>WIN32_SERVICE_DEMAND_START</item>\n      <item>WIN32_SERVICE_DISABLED</item>\n      <item>WIN32_SERVICE_ERROR_IGNORE</item>\n      <item>WIN32_SERVICE_ERROR_NORMAL</item>\n      <item>WIN32_SERVICE_INTERACTIVE_PROCESS</item>\n      <item>WIN32_SERVICE_PAUSED</item>\n      <item>WIN32_SERVICE_PAUSE_PENDING</item>\n      <item>WIN32_SERVICE_RUNNING</item>\n      <item>WIN32_SERVICE_RUNS_IN_SYSTEM_PROCESS</item>\n      <item>WIN32_SERVICE_START_PENDING</item>\n      <item>WIN32_SERVICE_STOPPED</item>\n      <item>WIN32_SERVICE_STOP_PENDING</item>\n      <item>WIN32_SERVICE_WIN32_OWN_PROCESS</item>\n      <item>WIN32_SERVICE_WIN32_OWN_PROCESS_INTERACTIVE</item>\n      <item>WNOHANG</item>\n      <item>WSDL_CACHE_BOTH</item>\n      <item>WSDL_CACHE_DISK</item>\n      <item>WSDL_CACHE_MEMORY</item>\n      <item>WSDL_CACHE_NONE</item>\n      <item>WUNTRACED</item>\n      <item>X509_PURPOSE_ANY</item>\n      <item>X509_PURPOSE_CRL_SIGN</item>\n      <item>X509_PURPOSE_NS_SSL_SERVER</item>\n      <item>X509_PURPOSE_SMIME_ENCRYPT</item>\n      <item>X509_PURPOSE_SMIME_SIGN</item>\n      <item>X509_PURPOSE_SSL_CLIENT</item>\n      <item>X509_PURPOSE_SSL_SERVER</item>\n      <item>XATTR_CREATE</item>\n      <item>XATTR_DONTFOLLOW</item>\n      <item>XATTR_REPLACE</item>\n      <item>XATTR_ROOT</item>\n      <item>XDIFF_PATCH_NORMAL</item>\n      <item>XDIFF_PATCH_REVERSE</item>\n      <item>XHPROF_FLAGS_CPU</item>\n      <item>XHPROF_FLAGS_MEMORY</item>\n      <item>XHPROF_FLAGS_NO_BUILTINS</item>\n      <item>XML_ATTRIBUTE_CDATA</item>\n      <item>XML_ATTRIBUTE_DECL_NODE</item>\n      <item>XML_ATTRIBUTE_ENTITY</item>\n      <item>XML_ATTRIBUTE_ENUMERATION</item>\n      <item>XML_ATTRIBUTE_ID</item>\n      <item>XML_ATTRIBUTE_IDREF</item>\n      <item>XML_ATTRIBUTE_IDREFS</item>\n      <item>XML_ATTRIBUTE_NMTOKEN</item>\n      <item>XML_ATTRIBUTE_NMTOKENS</item>\n      <item>XML_ATTRIBUTE_NODE</item>\n      <item>XML_ATTRIBUTE_NOTATION</item>\n      <item>XML_CDATA_SECTION_NODE</item>\n      <item>XML_COMMENT_NODE</item>\n      <item>XML_DOCUMENT_FRAG_NODE</item>\n      <item>XML_DOCUMENT_NODE</item>\n      <item>XML_DOCUMENT_TYPE_NODE</item>\n      <item>XML_DTD_NODE</item>\n      <item>XML_ELEMENT_DECL_NODE</item>\n      <item>XML_ELEMENT_NODE</item>\n      <item>XML_ENTITY_DECL_NODE</item>\n      <item>XML_ENTITY_NODE</item>\n      <item>XML_ENTITY_REF_NODE</item>\n      <item>XML_ERROR_ASYNC_ENTITY</item>\n      <item>XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF</item>\n      <item>XML_ERROR_BAD_CHAR_REF</item>\n      <item>XML_ERROR_BINARY_ENTITY_REF</item>\n      <item>XML_ERROR_DUPLICATE_ATTRIBUTE</item>\n      <item>XML_ERROR_EXTERNAL_ENTITY_HANDLING</item>\n      <item>XML_ERROR_INCORRECT_ENCODING</item>\n      <item>XML_ERROR_INVALID_TOKEN</item>\n      <item>XML_ERROR_JUNK_AFTER_DOC_ELEMENT</item>\n      <item>XML_ERROR_MISPLACED_XML_PI</item>\n      <item>XML_ERROR_NONE</item>\n      <item>XML_ERROR_NO_ELEMENTS</item>\n      <item>XML_ERROR_NO_MEMORY</item>\n      <item>XML_ERROR_PARAM_ENTITY_REF</item>\n      <item>XML_ERROR_PARTIAL_CHAR</item>\n      <item>XML_ERROR_RECURSIVE_ENTITY_REF</item>\n      <item>XML_ERROR_SYNTAX</item>\n      <item>XML_ERROR_TAG_MISMATCH</item>\n      <item>XML_ERROR_UNCLOSED_CDATA_SECTION</item>\n      <item>XML_ERROR_UNCLOSED_TOKEN</item>\n      <item>XML_ERROR_UNDEFINED_ENTITY</item>\n      <item>XML_ERROR_UNKNOWN_ENCODING</item>\n      <item>XML_HTML_DOCUMENT_NODE</item>\n      <item>XML_NAMESPACE_DECL_NODE</item>\n      <item>XML_NOTATION_NODE</item>\n      <item>XML_OPTION_CASE_FOLDING</item>\n      <item>XML_OPTION_SKIP_TAGSTART</item>\n      <item>XML_OPTION_SKIP_WHITE</item>\n      <item>XML_OPTION_TARGET_ENCODING</item>\n      <item>XML_PI_NODE</item>\n      <item>XML_SAX_IMPL</item>\n      <item>XML_TEXT_NODE</item>\n      <item>XSD_1999_NAMESPACE</item>\n      <item>XSD_1999_TIMEINSTANT</item>\n      <item>XSD_ANYTYPE</item>\n      <item>XSD_ANYURI</item>\n      <item>XSD_ANYXML</item>\n      <item>XSD_BASE64BINARY</item>\n      <item>XSD_BOOLEAN</item>\n      <item>XSD_BYTE</item>\n      <item>XSD_DATE</item>\n      <item>XSD_DATETIME</item>\n      <item>XSD_DECIMAL</item>\n      <item>XSD_DOUBLE</item>\n      <item>XSD_DURATION</item>\n      <item>XSD_ENTITIES</item>\n      <item>XSD_ENTITY</item>\n      <item>XSD_FLOAT</item>\n      <item>XSD_GDAY</item>\n      <item>XSD_GMONTH</item>\n      <item>XSD_GMONTHDAY</item>\n      <item>XSD_GYEAR</item>\n      <item>XSD_GYEARMONTH</item>\n      <item>XSD_HEXBINARY</item>\n      <item>XSD_ID</item>\n      <item>XSD_IDREF</item>\n      <item>XSD_IDREFS</item>\n      <item>XSD_INT</item>\n      <item>XSD_INTEGER</item>\n      <item>XSD_LANGUAGE</item>\n      <item>XSD_LONG</item>\n      <item>XSD_NAME</item>\n      <item>XSD_NAMESPACE</item>\n      <item>XSD_NCNAME</item>\n      <item>XSD_NEGATIVEINTEGER</item>\n      <item>XSD_NMTOKEN</item>\n      <item>XSD_NMTOKENS</item>\n      <item>XSD_NONNEGATIVEINTEGER</item>\n      <item>XSD_NONPOSITIVEINTEGER</item>\n      <item>XSD_NORMALIZEDSTRING</item>\n      <item>XSD_NOTATION</item>\n      <item>XSD_POSITIVEINTEGER</item>\n      <item>XSD_QNAME</item>\n      <item>XSD_SHORT</item>\n      <item>XSD_STRING</item>\n      <item>XSD_TIME</item>\n      <item>XSD_TOKEN</item>\n      <item>XSD_UNSIGNEDBYTE</item>\n      <item>XSD_UNSIGNEDINT</item>\n      <item>XSD_UNSIGNEDLONG</item>\n      <item>XSD_UNSIGNEDSHORT</item>\n      <item>XSL_CLONE_ALWAYS</item>\n      <item>XSL_CLONE_AUTO</item>\n      <item>XSL_CLONE_NEVER</item>\n      <item>XSL_SECPREF_CREATE_DIRECTORY</item>\n      <item>XSL_SECPREF_DEFAULT</item>\n      <item>XSL_SECPREF_NONE</item>\n      <item>XSL_SECPREF_READ_FILE</item>\n      <item>XSL_SECPREF_READ_NETWORK</item>\n      <item>XSL_SECPREF_WRITE_FILE</item>\n      <item>XSL_SECPREF_WRITE_NETWORK</item>\n      <item>YAF_ENVIRON</item>\n      <item>YAF_ERR_AUTOLOAD_FAILED</item>\n      <item>YAF_ERR_CALL_FAILED</item>\n      <item>YAF_ERR_DISPATCH_FAILED</item>\n      <item>YAF_ERR_NOTFOUND_ACTION</item>\n      <item>YAF_ERR_NOTFOUND_CONTROLLER</item>\n      <item>YAF_ERR_NOTFOUND_MODULE</item>\n      <item>YAF_ERR_NOTFOUND_VIEW</item>\n      <item>YAF_ERR_ROUTE_FAILED</item>\n      <item>YAF_ERR_STARTUP_FAILED</item>\n      <item>YAF_ERR_TYPE_ERROR</item>\n      <item>YAF_VERSION</item>\n      <item>YAML_ANY_BREAK</item>\n      <item>YAML_ANY_ENCODING</item>\n      <item>YAML_ANY_SCALAR_STYLE</item>\n      <item>YAML_BOOL_TAG</item>\n      <item>YAML_CRLN_BREAK</item>\n      <item>YAML_CR_BREAK</item>\n      <item>YAML_DOUBLE_QUOTED_SCALAR_STYLE</item>\n      <item>YAML_FLOAT_TAG</item>\n      <item>YAML_FOLDED_SCALAR_STYLE</item>\n      <item>YAML_INT_TAG</item>\n      <item>YAML_LITERAL_SCALAR_STYLE</item>\n      <item>YAML_LN_BREAK</item>\n      <item>YAML_MAP_TAG</item>\n      <item>YAML_NULL_TAG</item>\n      <item>YAML_PHP_TAG</item>\n      <item>YAML_PLAIN_SCALAR_STYLE</item>\n      <item>YAML_SEQ_TAG</item>\n      <item>YAML_SINGLE_QUOTED_SCALAR_STYLE</item>\n      <item>YAML_STR_TAG</item>\n      <item>YAML_TIMESTAMP_TAG</item>\n      <item>YAML_UTF8_ENCODING</item>\n      <item>YAML_UTF16BE_ENCODING</item>\n      <item>YAML_UTF16LE_ENCODING</item>\n      <item>YAR_CLIENT_PROTOCOL_HTTP</item>\n      <item>YAR_ERR_EXCEPTION</item>\n      <item>YAR_ERR_OKEY</item>\n      <item>YAR_ERR_OUTPUT</item>\n      <item>YAR_ERR_PACKAGER</item>\n      <item>YAR_ERR_PROTOCOL</item>\n      <item>YAR_ERR_REQUEST</item>\n      <item>YAR_ERR_TRANSPORT</item>\n      <item>YAR_OPT_CONNECT_TIMEOUT</item>\n      <item>YAR_OPT_HEADER</item>\n      <item>YAR_OPT_PACKAGER</item>\n      <item>YAR_OPT_TIMEOUT</item>\n      <item>YAR_PACKAGER_JSON</item>\n      <item>YAR_PACKAGER_PHP</item>\n      <item>YAR_VERSION</item>\n      <item>YESEXPR</item>\n      <item>YESSTR</item>\n      <item>YPERR_ACCESS</item>\n      <item>YPERR_BADARGS</item>\n      <item>YPERR_BADDB</item>\n      <item>YPERR_BUSY</item>\n      <item>YPERR_DOMAIN</item>\n      <item>YPERR_KEY</item>\n      <item>YPERR_MAP</item>\n      <item>YPERR_NODOM</item>\n      <item>YPERR_NOMORE</item>\n      <item>YPERR_PMAP</item>\n      <item>YPERR_RESRC</item>\n      <item>YPERR_RPC</item>\n      <item>YPERR_VERS</item>\n      <item>YPERR_YPBIND</item>\n      <item>YPERR_YPERR</item>\n      <item>YPERR_YPSERV</item>\n      <item>ZEND_ACC_ABSTRACT</item>\n      <item>ZEND_ACC_CLASS</item>\n      <item>ZEND_ACC_FETCH</item>\n      <item>ZEND_ACC_FINAL</item>\n      <item>ZEND_ACC_INTERFACE</item>\n      <item>ZEND_ACC_PRIVATE</item>\n      <item>ZEND_ACC_PROTECTED</item>\n      <item>ZEND_ACC_PUBLIC</item>\n      <item>ZEND_ACC_STATIC</item>\n      <item>ZEND_ACC_TRAIT</item>\n      <item>ZEND_ADD_INTERFACE</item>\n      <item>ZEND_ADD_TRAIT</item>\n      <item>ZEND_EXIT</item>\n      <item>ZEND_FETCH_CLASS</item>\n      <item>ZEND_INSTANCEOF</item>\n      <item>ZEND_NEW</item>\n      <item>ZEND_THROW</item>\n      <item>ZEND_USER_OPCODE_CONTINUE</item>\n      <item>ZEND_USER_OPCODE_DISPATCH</item>\n      <item>ZEND_USER_OPCODE_DISPATCH_TO</item>\n      <item>ZEND_USER_OPCODE_ENTER</item>\n      <item>ZEND_USER_OPCODE_LEAVE</item>\n      <item>ZEND_USER_OPCODE_RETURN</item>\n      <item>ZLIB_BLOCK</item>\n      <item>ZLIB_DEFAULT_STRATEGY</item>\n      <item>ZLIB_ENCODING_DEFLATE</item>\n      <item>ZLIB_ENCODING_GZIP</item>\n      <item>ZLIB_ENCODING_RAW</item>\n      <item>ZLIB_FILTERED</item>\n      <item>ZLIB_FINISH</item>\n      <item>ZLIB_FIXED</item>\n      <item>ZLIB_FULL_FLUSH</item>\n      <item>ZLIB_HUFFMAN_ONLY</item>\n      <item>ZLIB_NO_FLUSH</item>\n      <item>ZLIB_PARTIAL_FLUSH</item>\n      <item>ZLIB_RLE</item>\n      <item>ZLIB_SYNC_FLUSH</item>\n    </list>\n\n    <!-- https://secure.php.net/manual/en/language.oop5.magic.php -->\n    <list name=\"special_methods\">\n      <item>__autoload</item>\n      <item>__call</item>\n      <item>__callStatic</item>\n      <item>__clone</item>\n      <item>__construct</item>\n      <item>__debugInfo</item>\n      <item>__destruct</item>\n      <item>__get</item>\n      <item>__invoke</item>\n      <item>__isset</item>\n      <item>__set</item>\n      <item>__set_state</item>\n      <item>__sleep</item>\n      <item>__toString</item>\n      <item>__unset</item>\n      <item>__wakeup</item>\n    </list>\n\n    <list name=\"functions\">\n      <!-- keyword functions -->\n      <item>array</item>\n      <item>die</item>\n      <item>echo</item>\n      <item>empty</item>\n      <item>eval</item>\n      <item>exit</item>\n      <item>include</item>\n      <item>include_once</item>\n      <item>isset</item>\n      <item>list</item>\n      <item>print</item>\n      <item>require</item>\n      <item>require_once</item>\n      <item>unset</item>\n\n      <!-- standard functions -->\n      <item>_</item>\n      <item>abs</item>\n      <item>acos</item>\n      <item>acosh</item>\n      <item>addcslashes</item>\n      <item>addfill</item>\n      <item>addslashes</item>\n      <item>apache_child_terminate</item>\n      <item>apache_getenv</item>\n      <item>apache_get_modules</item>\n      <item>apache_get_version</item>\n      <item>apache_lookup_uri</item>\n      <item>apache_note</item>\n      <item>apache_request_headers</item>\n      <item>apache_reset_timeout</item>\n      <item>apache_response_headers</item>\n      <item>apache_setenv</item>\n      <item>apcu_add</item>\n      <item>apcu_cache_info</item>\n      <item>apcu_cas</item>\n      <item>apcu_clear_cache</item>\n      <item>apcu_dec</item>\n      <item>apcu_delete</item>\n      <item>apcu_entry</item>\n      <item>apcu_exists</item>\n      <item>apcu_fetch</item>\n      <item>apcu_inc</item>\n      <item>apcu_sma_info</item>\n      <item>apcu_store</item>\n      <item>apc_add</item>\n      <item>apc_bin_dump</item>\n      <item>apc_bin_dumpfile</item>\n      <item>apc_bin_load</item>\n      <item>apc_bin_loadfile</item>\n      <item>apc_cache_info</item>\n      <item>apc_cas</item>\n      <item>apc_clear_cache</item>\n      <item>apc_compile_file</item>\n      <item>apc_dec</item>\n      <item>apc_define_constants</item>\n      <item>apc_delete</item>\n      <item>apc_delete_file</item>\n      <item>apc_exists</item>\n      <item>apc_fetch</item>\n      <item>apc_inc</item>\n      <item>apc_load_constants</item>\n      <item>apc_sma_info</item>\n      <item>apc_store</item>\n      <item>apd_breakpoint</item>\n      <item>apd_callstack</item>\n      <item>apd_clunk</item>\n      <item>apd_continue</item>\n      <item>apd_croak</item>\n      <item>apd_dump_function_table</item>\n      <item>apd_dump_persistent_resources</item>\n      <item>apd_dump_regular_resources</item>\n      <item>apd_echo</item>\n      <item>apd_get_active_symbols</item>\n      <item>apd_set_pprof_trace</item>\n      <item>apd_set_session</item>\n      <item>apd_set_session_trace</item>\n      <item>apd_set_session_trace_socket</item>\n      <item>array_change_key_case</item>\n      <item>array_chunk</item>\n      <item>array_column</item>\n      <item>array_combine</item>\n      <item>array_count_values</item>\n      <item>array_diff</item>\n      <item>array_diff_assoc</item>\n      <item>array_diff_key</item>\n      <item>array_diff_uassoc</item>\n      <item>array_diff_ukey</item>\n      <item>array_fill</item>\n      <item>array_fill_keys</item>\n      <item>array_filter</item>\n      <item>array_flip</item>\n      <item>array_intersect</item>\n      <item>array_intersect_assoc</item>\n      <item>array_intersect_key</item>\n      <item>array_intersect_uassoc</item>\n      <item>array_intersect_ukey</item>\n      <item>array_keys</item>\n      <item>array_key_exists</item>\n      <item>array_key_first</item>\n      <item>array_key_last</item>\n      <item>array_map</item>\n      <item>array_merge</item>\n      <item>array_merge_recursive</item>\n      <item>array_multisort</item>\n      <item>array_pad</item>\n      <item>array_pop</item>\n      <item>array_product</item>\n      <item>array_push</item>\n      <item>array_rand</item>\n      <item>array_reduce</item>\n      <item>array_replace</item>\n      <item>array_replace_recursive</item>\n      <item>array_reverse</item>\n      <item>array_search</item>\n      <item>array_shift</item>\n      <item>array_slice</item>\n      <item>array_splice</item>\n      <item>array_sum</item>\n      <item>array_udiff</item>\n      <item>array_udiff_assoc</item>\n      <item>array_udiff_uassoc</item>\n      <item>array_uintersect</item>\n      <item>array_uintersect_assoc</item>\n      <item>array_uintersect_uassoc</item>\n      <item>array_unique</item>\n      <item>array_unshift</item>\n      <item>array_values</item>\n      <item>array_walk</item>\n      <item>array_walk_recursive</item>\n      <item>arsort</item>\n      <item>asin</item>\n      <item>asinh</item>\n      <item>asort</item>\n      <item>assert</item>\n      <item>assert_options</item>\n      <item>atan</item>\n      <item>atan2</item>\n      <item>atanh</item>\n      <item>base64_decode</item>\n      <item>base64_encode</item>\n      <item>basename</item>\n      <item>base_convert</item>\n      <item>bbcode_add_element</item>\n      <item>bbcode_add_smiley</item>\n      <item>bbcode_create</item>\n      <item>bbcode_destroy</item>\n      <item>bbcode_parse</item>\n      <item>bbcode_set_arg_parser</item>\n      <item>bbcode_set_flags</item>\n      <item>bcadd</item>\n      <item>bccomp</item>\n      <item>bcdiv</item>\n      <item>bcmod</item>\n      <item>bcmul</item>\n      <item>bcompiler_load</item>\n      <item>bcompiler_load_exe</item>\n      <item>bcompiler_parse_class</item>\n      <item>bcompiler_read</item>\n      <item>bcompiler_write_class</item>\n      <item>bcompiler_write_constant</item>\n      <item>bcompiler_write_exe_footer</item>\n      <item>bcompiler_write_file</item>\n      <item>bcompiler_write_footer</item>\n      <item>bcompiler_write_function</item>\n      <item>bcompiler_write_functions_from_file</item>\n      <item>bcompiler_write_header</item>\n      <item>bcompiler_write_included_filename</item>\n      <item>bcpow</item>\n      <item>bcpowmod</item>\n      <item>bcscale</item>\n      <item>bcsqrt</item>\n      <item>bcsub</item>\n      <item>bin2hex</item>\n      <item>bindec</item>\n      <item>bindtextdomain</item>\n      <item>bind_textdomain_codeset</item>\n      <item>blenc_encrypt</item>\n      <item>boolval</item>\n      <item>bson_decode</item>\n      <item>bson_encode</item>\n      <item>bzclose</item>\n      <item>bzcompress</item>\n      <item>bzdecompress</item>\n      <item>bzerrno</item>\n      <item>bzerror</item>\n      <item>bzerrstr</item>\n      <item>bzflush</item>\n      <item>bzopen</item>\n      <item>bzread</item>\n      <item>bzwrite</item>\n      <item>cairo_append_path</item>\n      <item>cairo_arc</item>\n      <item>cairo_arc_negative</item>\n      <item>cairo_available_fonts</item>\n      <item>cairo_available_surfaces</item>\n      <item>cairo_clip</item>\n      <item>cairo_clip_extents</item>\n      <item>cairo_clip_preserve</item>\n      <item>cairo_clip_rectangle_list</item>\n      <item>cairo_close_path</item>\n      <item>cairo_copy_page</item>\n      <item>cairo_copy_path</item>\n      <item>cairo_copy_path_flat</item>\n      <item>cairo_create</item>\n      <item>cairo_curve_to</item>\n      <item>cairo_device_to_user</item>\n      <item>cairo_device_to_user_distance</item>\n      <item>cairo_fill</item>\n      <item>cairo_fill_extents</item>\n      <item>cairo_fill_preserve</item>\n      <item>cairo_font_extents</item>\n      <item>cairo_font_face_get_type</item>\n      <item>cairo_font_face_status</item>\n      <item>cairo_font_options_create</item>\n      <item>cairo_font_options_equal</item>\n      <item>cairo_font_options_get_antialias</item>\n      <item>cairo_font_options_get_hint_metrics</item>\n      <item>cairo_font_options_get_hint_style</item>\n      <item>cairo_font_options_get_subpixel_order</item>\n      <item>cairo_font_options_hash</item>\n      <item>cairo_font_options_merge</item>\n      <item>cairo_font_options_set_antialias</item>\n      <item>cairo_font_options_set_hint_metrics</item>\n      <item>cairo_font_options_set_hint_style</item>\n      <item>cairo_font_options_set_subpixel_order</item>\n      <item>cairo_font_options_status</item>\n      <item>cairo_format_stride_for_width</item>\n      <item>cairo_get_antialias</item>\n      <item>cairo_get_current_point</item>\n      <item>cairo_get_dash</item>\n      <item>cairo_get_dash_count</item>\n      <item>cairo_get_fill_rule</item>\n      <item>cairo_get_font_face</item>\n      <item>cairo_get_font_matrix</item>\n      <item>cairo_get_font_options</item>\n      <item>cairo_get_group_target</item>\n      <item>cairo_get_line_cap</item>\n      <item>cairo_get_line_join</item>\n      <item>cairo_get_line_width</item>\n      <item>cairo_get_matrix</item>\n      <item>cairo_get_miter_limit</item>\n      <item>cairo_get_operator</item>\n      <item>cairo_get_scaled_font</item>\n      <item>cairo_get_source</item>\n      <item>cairo_get_target</item>\n      <item>cairo_get_tolerance</item>\n      <item>cairo_glyph_path</item>\n      <item>cairo_has_current_point</item>\n      <item>cairo_identity_matrix</item>\n      <item>cairo_image_surface_create</item>\n      <item>cairo_image_surface_create_for_data</item>\n      <item>cairo_image_surface_create_from_png</item>\n      <item>cairo_image_surface_get_data</item>\n      <item>cairo_image_surface_get_format</item>\n      <item>cairo_image_surface_get_height</item>\n      <item>cairo_image_surface_get_stride</item>\n      <item>cairo_image_surface_get_width</item>\n      <item>cairo_in_fill</item>\n      <item>cairo_in_stroke</item>\n      <item>cairo_line_to</item>\n      <item>cairo_mask</item>\n      <item>cairo_mask_surface</item>\n      <item>cairo_matrix_create_scale</item>\n      <item>cairo_matrix_create_translate</item>\n      <item>cairo_matrix_init</item>\n      <item>cairo_matrix_init_identity</item>\n      <item>cairo_matrix_init_rotate</item>\n      <item>cairo_matrix_init_scale</item>\n      <item>cairo_matrix_init_translate</item>\n      <item>cairo_matrix_invert</item>\n      <item>cairo_matrix_multiply</item>\n      <item>cairo_matrix_rotate</item>\n      <item>cairo_matrix_scale</item>\n      <item>cairo_matrix_transform_distance</item>\n      <item>cairo_matrix_transform_point</item>\n      <item>cairo_matrix_translate</item>\n      <item>cairo_move_to</item>\n      <item>cairo_new_path</item>\n      <item>cairo_new_sub_path</item>\n      <item>cairo_paint</item>\n      <item>cairo_paint_with_alpha</item>\n      <item>cairo_path_extents</item>\n      <item>cairo_pattern_add_color_stop_rgb</item>\n      <item>cairo_pattern_add_color_stop_rgba</item>\n      <item>cairo_pattern_create_for_surface</item>\n      <item>cairo_pattern_create_linear</item>\n      <item>cairo_pattern_create_radial</item>\n      <item>cairo_pattern_create_rgb</item>\n      <item>cairo_pattern_create_rgba</item>\n      <item>cairo_pattern_get_color_stop_count</item>\n      <item>cairo_pattern_get_color_stop_rgba</item>\n      <item>cairo_pattern_get_extend</item>\n      <item>cairo_pattern_get_filter</item>\n      <item>cairo_pattern_get_linear_points</item>\n      <item>cairo_pattern_get_matrix</item>\n      <item>cairo_pattern_get_radial_circles</item>\n      <item>cairo_pattern_get_rgba</item>\n      <item>cairo_pattern_get_surface</item>\n      <item>cairo_pattern_get_type</item>\n      <item>cairo_pattern_set_extend</item>\n      <item>cairo_pattern_set_filter</item>\n      <item>cairo_pattern_set_matrix</item>\n      <item>cairo_pattern_status</item>\n      <item>cairo_pdf_surface_create</item>\n      <item>cairo_pdf_surface_set_size</item>\n      <item>cairo_pop_group</item>\n      <item>cairo_pop_group_to_source</item>\n      <item>cairo_ps_get_levels</item>\n      <item>cairo_ps_level_to_string</item>\n      <item>cairo_ps_surface_create</item>\n      <item>cairo_ps_surface_dsc_begin_page_setup</item>\n      <item>cairo_ps_surface_dsc_begin_setup</item>\n      <item>cairo_ps_surface_dsc_comment</item>\n      <item>cairo_ps_surface_get_eps</item>\n      <item>cairo_ps_surface_restrict_to_level</item>\n      <item>cairo_ps_surface_set_eps</item>\n      <item>cairo_ps_surface_set_size</item>\n      <item>cairo_push_group</item>\n      <item>cairo_push_group_with_content</item>\n      <item>cairo_rectangle</item>\n      <item>cairo_rel_curve_to</item>\n      <item>cairo_rel_line_to</item>\n      <item>cairo_rel_move_to</item>\n      <item>cairo_reset_clip</item>\n      <item>cairo_restore</item>\n      <item>cairo_rotate</item>\n      <item>cairo_save</item>\n      <item>cairo_scale</item>\n      <item>cairo_scaled_font_create</item>\n      <item>cairo_scaled_font_extents</item>\n      <item>cairo_scaled_font_get_ctm</item>\n      <item>cairo_scaled_font_get_font_face</item>\n      <item>cairo_scaled_font_get_font_matrix</item>\n      <item>cairo_scaled_font_get_font_options</item>\n      <item>cairo_scaled_font_get_scale_matrix</item>\n      <item>cairo_scaled_font_get_type</item>\n      <item>cairo_scaled_font_glyph_extents</item>\n      <item>cairo_scaled_font_status</item>\n      <item>cairo_scaled_font_text_extents</item>\n      <item>cairo_select_font_face</item>\n      <item>cairo_set_antialias</item>\n      <item>cairo_set_dash</item>\n      <item>cairo_set_fill_rule</item>\n      <item>cairo_set_font_face</item>\n      <item>cairo_set_font_matrix</item>\n      <item>cairo_set_font_options</item>\n      <item>cairo_set_font_size</item>\n      <item>cairo_set_line_cap</item>\n      <item>cairo_set_line_join</item>\n      <item>cairo_set_line_width</item>\n      <item>cairo_set_matrix</item>\n      <item>cairo_set_miter_limit</item>\n      <item>cairo_set_operator</item>\n      <item>cairo_set_scaled_font</item>\n      <item>cairo_set_source</item>\n      <item>cairo_set_source_surface</item>\n      <item>cairo_set_tolerance</item>\n      <item>cairo_show_page</item>\n      <item>cairo_show_text</item>\n      <item>cairo_status</item>\n      <item>cairo_status_to_string</item>\n      <item>cairo_stroke</item>\n      <item>cairo_stroke_extents</item>\n      <item>cairo_stroke_preserve</item>\n      <item>cairo_surface_copy_page</item>\n      <item>cairo_surface_create_similar</item>\n      <item>cairo_surface_finish</item>\n      <item>cairo_surface_flush</item>\n      <item>cairo_surface_get_content</item>\n      <item>cairo_surface_get_device_offset</item>\n      <item>cairo_surface_get_font_options</item>\n      <item>cairo_surface_get_type</item>\n      <item>cairo_surface_mark_dirty</item>\n      <item>cairo_surface_mark_dirty_rectangle</item>\n      <item>cairo_surface_set_device_offset</item>\n      <item>cairo_surface_set_fallback_resolution</item>\n      <item>cairo_surface_show_page</item>\n      <item>cairo_surface_status</item>\n      <item>cairo_surface_write_to_png</item>\n      <item>cairo_svg_get_versions</item>\n      <item>cairo_svg_surface_create</item>\n      <item>cairo_svg_surface_restrict_to_version</item>\n      <item>cairo_svg_version_to_string</item>\n      <item>cairo_text_extents</item>\n      <item>cairo_text_path</item>\n      <item>cairo_transform</item>\n      <item>cairo_translate</item>\n      <item>cairo_user_to_device</item>\n      <item>cairo_user_to_device_distance</item>\n      <item>cairo_version</item>\n      <item>cairo_version_string</item>\n      <item>call_user_func</item>\n      <item>call_user_func_array</item>\n      <item>cal_days_in_month</item>\n      <item>cal_from_jd</item>\n      <item>cal_info</item>\n      <item>cal_to_jd</item>\n      <item>ceil</item>\n      <item>chdb_create</item>\n      <item>chdir</item>\n      <item>checkdate</item>\n      <item>checkdnsrr</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chop</item>\n      <item>chown</item>\n      <item>chr</item>\n      <item>chroot</item>\n      <item>chunk_split</item>\n      <item>classkit_import</item>\n      <item>classkit_method_add</item>\n      <item>classkit_method_copy</item>\n      <item>classkit_method_redefine</item>\n      <item>classkit_method_remove</item>\n      <item>classkit_method_rename</item>\n      <item>class_alias</item>\n      <item>class_exists</item>\n      <item>class_implements</item>\n      <item>class_parents</item>\n      <item>class_uses</item>\n      <item>clearstatcache</item>\n      <item>cli_get_process_title</item>\n      <item>cli_set_process_title</item>\n      <item>closedir</item>\n      <item>closelog</item>\n      <item>collator_asort</item>\n      <item>collator_compare</item>\n      <item>collator_create</item>\n      <item>collator_get_attribute</item>\n      <item>collator_get_error_code</item>\n      <item>collator_get_error_message</item>\n      <item>collator_get_locale</item>\n      <item>collator_get_sort_key</item>\n      <item>collator_get_strength</item>\n      <item>collator_set_attribute</item>\n      <item>collator_set_strength</item>\n      <item>collator_sort</item>\n      <item>collator_sort_with_sort_keys</item>\n      <item>com_create_guid</item>\n      <item>com_event_sink</item>\n      <item>com_get_active_object</item>\n      <item>com_load_typelib</item>\n      <item>com_message_pump</item>\n      <item>com_print_typeinfo</item>\n      <item>connection_aborted</item>\n      <item>connection_status</item>\n      <item>constant</item>\n      <item>convert_cyr_string</item>\n      <item>convert_uudecode</item>\n      <item>convert_uuencode</item>\n      <item>copy</item>\n      <item>cos</item>\n      <item>cosh</item>\n      <item>count</item>\n      <item>count_chars</item>\n      <item>crack_check</item>\n      <item>crack_closedict</item>\n      <item>crack_getlastmessage</item>\n      <item>crack_opendict</item>\n      <item>crc32</item>\n      <item>crypt</item>\n      <item>ctype_alnum</item>\n      <item>ctype_alpha</item>\n      <item>ctype_cntrl</item>\n      <item>ctype_digit</item>\n      <item>ctype_graph</item>\n      <item>ctype_lower</item>\n      <item>ctype_print</item>\n      <item>ctype_punct</item>\n      <item>ctype_space</item>\n      <item>ctype_upper</item>\n      <item>ctype_xdigit</item>\n      <item>cubrid_affected_rows</item>\n      <item>cubrid_bind</item>\n      <item>cubrid_client_encoding</item>\n      <item>cubrid_close</item>\n      <item>cubrid_close_prepare</item>\n      <item>cubrid_close_request</item>\n      <item>cubrid_column_names</item>\n      <item>cubrid_column_types</item>\n      <item>cubrid_col_get</item>\n      <item>cubrid_col_size</item>\n      <item>cubrid_commit</item>\n      <item>cubrid_connect</item>\n      <item>cubrid_connect_with_url</item>\n      <item>cubrid_current_oid</item>\n      <item>cubrid_data_seek</item>\n      <item>cubrid_db_name</item>\n      <item>cubrid_disconnect</item>\n      <item>cubrid_drop</item>\n      <item>cubrid_errno</item>\n      <item>cubrid_error</item>\n      <item>cubrid_error_code</item>\n      <item>cubrid_error_code_facility</item>\n      <item>cubrid_error_msg</item>\n      <item>cubrid_execute</item>\n      <item>cubrid_fetch</item>\n      <item>cubrid_fetch_array</item>\n      <item>cubrid_fetch_assoc</item>\n      <item>cubrid_fetch_field</item>\n      <item>cubrid_fetch_lengths</item>\n      <item>cubrid_fetch_object</item>\n      <item>cubrid_fetch_row</item>\n      <item>cubrid_field_flags</item>\n      <item>cubrid_field_len</item>\n      <item>cubrid_field_name</item>\n      <item>cubrid_field_seek</item>\n      <item>cubrid_field_table</item>\n      <item>cubrid_field_type</item>\n      <item>cubrid_free_result</item>\n      <item>cubrid_get</item>\n      <item>cubrid_get_autocommit</item>\n      <item>cubrid_get_charset</item>\n      <item>cubrid_get_class_name</item>\n      <item>cubrid_get_client_info</item>\n      <item>cubrid_get_db_parameter</item>\n      <item>cubrid_get_query_timeout</item>\n      <item>cubrid_get_server_info</item>\n      <item>cubrid_insert_id</item>\n      <item>cubrid_is_instance</item>\n      <item>cubrid_list_dbs</item>\n      <item>cubrid_load_from_glo</item>\n      <item>cubrid_lob2_bind</item>\n      <item>cubrid_lob2_close</item>\n      <item>cubrid_lob2_export</item>\n      <item>cubrid_lob2_import</item>\n      <item>cubrid_lob2_new</item>\n      <item>cubrid_lob2_read</item>\n      <item>cubrid_lob2_seek</item>\n      <item>cubrid_lob2_seek64</item>\n      <item>cubrid_lob2_size</item>\n      <item>cubrid_lob2_size64</item>\n      <item>cubrid_lob2_tell</item>\n      <item>cubrid_lob2_tell64</item>\n      <item>cubrid_lob2_write</item>\n      <item>cubrid_lob_close</item>\n      <item>cubrid_lob_export</item>\n      <item>cubrid_lob_get</item>\n      <item>cubrid_lob_send</item>\n      <item>cubrid_lob_size</item>\n      <item>cubrid_lock_read</item>\n      <item>cubrid_lock_write</item>\n      <item>cubrid_move_cursor</item>\n      <item>cubrid_new_glo</item>\n      <item>cubrid_next_result</item>\n      <item>cubrid_num_cols</item>\n      <item>cubrid_num_fields</item>\n      <item>cubrid_num_rows</item>\n      <item>cubrid_pconnect</item>\n      <item>cubrid_pconnect_with_url</item>\n      <item>cubrid_ping</item>\n      <item>cubrid_prepare</item>\n      <item>cubrid_put</item>\n      <item>cubrid_query</item>\n      <item>cubrid_real_escape_string</item>\n      <item>cubrid_result</item>\n      <item>cubrid_rollback</item>\n      <item>cubrid_save_to_glo</item>\n      <item>cubrid_schema</item>\n      <item>cubrid_send_glo</item>\n      <item>cubrid_seq_drop</item>\n      <item>cubrid_seq_insert</item>\n      <item>cubrid_seq_put</item>\n      <item>cubrid_set_add</item>\n      <item>cubrid_set_autocommit</item>\n      <item>cubrid_set_db_parameter</item>\n      <item>cubrid_set_drop</item>\n      <item>cubrid_set_query_timeout</item>\n      <item>cubrid_unbuffered_query</item>\n      <item>cubrid_version</item>\n      <item>curl_close</item>\n      <item>curl_copy_handle</item>\n      <item>curl_errno</item>\n      <item>curl_error</item>\n      <item>curl_escape</item>\n      <item>curl_exec</item>\n      <item>curl_file_create</item>\n      <item>curl_getinfo</item>\n      <item>curl_init</item>\n      <item>curl_multi_add_handle</item>\n      <item>curl_multi_close</item>\n      <item>curl_multi_errno</item>\n      <item>curl_multi_exec</item>\n      <item>curl_multi_getcontent</item>\n      <item>curl_multi_info_read</item>\n      <item>curl_multi_init</item>\n      <item>curl_multi_remove_handle</item>\n      <item>curl_multi_select</item>\n      <item>curl_multi_setopt</item>\n      <item>curl_multi_strerror</item>\n      <item>curl_pause</item>\n      <item>curl_reset</item>\n      <item>curl_setopt</item>\n      <item>curl_setopt_array</item>\n      <item>curl_share_close</item>\n      <item>curl_share_errno</item>\n      <item>curl_share_init</item>\n      <item>curl_share_setopt</item>\n      <item>curl_share_strerror</item>\n      <item>curl_strerror</item>\n      <item>curl_unescape</item>\n      <item>curl_version</item>\n      <item>current</item>\n      <item>cyrus_authenticate</item>\n      <item>cyrus_bind</item>\n      <item>cyrus_close</item>\n      <item>cyrus_connect</item>\n      <item>cyrus_query</item>\n      <item>cyrus_unbind</item>\n      <item>date</item>\n      <item>datefmt_create</item>\n      <item>datefmt_format</item>\n      <item>datefmt_format_object</item>\n      <item>datefmt_get_calendar</item>\n      <item>datefmt_get_calendar_object</item>\n      <item>datefmt_get_datetype</item>\n      <item>datefmt_get_error_code</item>\n      <item>datefmt_get_error_message</item>\n      <item>datefmt_get_locale</item>\n      <item>datefmt_get_pattern</item>\n      <item>datefmt_get_timetype</item>\n      <item>datefmt_get_timezone</item>\n      <item>datefmt_get_timezone_id</item>\n      <item>datefmt_is_lenient</item>\n      <item>datefmt_localtime</item>\n      <item>datefmt_parse</item>\n      <item>datefmt_set_calendar</item>\n      <item>datefmt_set_lenient</item>\n      <item>datefmt_set_pattern</item>\n      <item>datefmt_set_timezone</item>\n      <item>date_add</item>\n      <item>date_create</item>\n      <item>date_create_from_format</item>\n      <item>date_create_immutable</item>\n      <item>date_create_immutable_from_format</item>\n      <item>date_date_set</item>\n      <item>date_default_timezone_get</item>\n      <item>date_default_timezone_set</item>\n      <item>date_diff</item>\n      <item>date_format</item>\n      <item>date_get_last_errors</item>\n      <item>date_interval_create_from_date_string</item>\n      <item>date_interval_format</item>\n      <item>date_isodate_set</item>\n      <item>date_modify</item>\n      <item>date_offset_get</item>\n      <item>date_parse</item>\n      <item>date_parse_from_format</item>\n      <item>date_sub</item>\n      <item>date_sunrise</item>\n      <item>date_sunset</item>\n      <item>date_sun_info</item>\n      <item>date_timestamp_get</item>\n      <item>date_timestamp_set</item>\n      <item>date_timezone_get</item>\n      <item>date_timezone_set</item>\n      <item>date_time_set</item>\n      <item>db2_autocommit</item>\n      <item>db2_bind_param</item>\n      <item>db2_client_info</item>\n      <item>db2_close</item>\n      <item>db2_columns</item>\n      <item>db2_column_privileges</item>\n      <item>db2_commit</item>\n      <item>db2_connect</item>\n      <item>db2_conn_error</item>\n      <item>db2_conn_errormsg</item>\n      <item>db2_cursor_type</item>\n      <item>db2_escape_string</item>\n      <item>db2_exec</item>\n      <item>db2_execute</item>\n      <item>db2_fetch_array</item>\n      <item>db2_fetch_assoc</item>\n      <item>db2_fetch_both</item>\n      <item>db2_fetch_object</item>\n      <item>db2_fetch_row</item>\n      <item>db2_field_display_size</item>\n      <item>db2_field_name</item>\n      <item>db2_field_num</item>\n      <item>db2_field_precision</item>\n      <item>db2_field_scale</item>\n      <item>db2_field_type</item>\n      <item>db2_field_width</item>\n      <item>db2_foreign_keys</item>\n      <item>db2_free_result</item>\n      <item>db2_free_stmt</item>\n      <item>db2_get_option</item>\n      <item>db2_last_insert_id</item>\n      <item>db2_lob_read</item>\n      <item>db2_next_result</item>\n      <item>db2_num_fields</item>\n      <item>db2_num_rows</item>\n      <item>db2_pclose</item>\n      <item>db2_pconnect</item>\n      <item>db2_prepare</item>\n      <item>db2_primary_keys</item>\n      <item>db2_procedures</item>\n      <item>db2_procedure_columns</item>\n      <item>db2_result</item>\n      <item>db2_rollback</item>\n      <item>db2_server_info</item>\n      <item>db2_set_option</item>\n      <item>db2_special_columns</item>\n      <item>db2_statistics</item>\n      <item>db2_stmt_error</item>\n      <item>db2_stmt_errormsg</item>\n      <item>db2_tables</item>\n      <item>db2_table_privileges</item>\n      <item>dbase_add_record</item>\n      <item>dbase_close</item>\n      <item>dbase_create</item>\n      <item>dbase_delete_record</item>\n      <item>dbase_get_header_info</item>\n      <item>dbase_get_record</item>\n      <item>dbase_get_record_with_names</item>\n      <item>dbase_numfields</item>\n      <item>dbase_numrecords</item>\n      <item>dbase_open</item>\n      <item>dbase_pack</item>\n      <item>dbase_replace_record</item>\n      <item>dba_close</item>\n      <item>dba_delete</item>\n      <item>dba_exists</item>\n      <item>dba_fetch</item>\n      <item>dba_firstkey</item>\n      <item>dba_handlers</item>\n      <item>dba_insert</item>\n      <item>dba_key_split</item>\n      <item>dba_list</item>\n      <item>dba_nextkey</item>\n      <item>dba_open</item>\n      <item>dba_optimize</item>\n      <item>dba_popen</item>\n      <item>dba_replace</item>\n      <item>dba_sync</item>\n      <item>dbplus_add</item>\n      <item>dbplus_aql</item>\n      <item>dbplus_chdir</item>\n      <item>dbplus_close</item>\n      <item>dbplus_curr</item>\n      <item>dbplus_errcode</item>\n      <item>dbplus_errno</item>\n      <item>dbplus_find</item>\n      <item>dbplus_first</item>\n      <item>dbplus_flush</item>\n      <item>dbplus_freealllocks</item>\n      <item>dbplus_freelock</item>\n      <item>dbplus_freerlocks</item>\n      <item>dbplus_getlock</item>\n      <item>dbplus_getunique</item>\n      <item>dbplus_info</item>\n      <item>dbplus_last</item>\n      <item>dbplus_lockrel</item>\n      <item>dbplus_next</item>\n      <item>dbplus_open</item>\n      <item>dbplus_prev</item>\n      <item>dbplus_rchperm</item>\n      <item>dbplus_rcreate</item>\n      <item>dbplus_rcrtexact</item>\n      <item>dbplus_rcrtlike</item>\n      <item>dbplus_resolve</item>\n      <item>dbplus_restorepos</item>\n      <item>dbplus_rkeys</item>\n      <item>dbplus_ropen</item>\n      <item>dbplus_rquery</item>\n      <item>dbplus_rrename</item>\n      <item>dbplus_rsecindex</item>\n      <item>dbplus_runlink</item>\n      <item>dbplus_rzap</item>\n      <item>dbplus_savepos</item>\n      <item>dbplus_setindex</item>\n      <item>dbplus_setindexbynumber</item>\n      <item>dbplus_sql</item>\n      <item>dbplus_tcl</item>\n      <item>dbplus_tremove</item>\n      <item>dbplus_undo</item>\n      <item>dbplus_undoprepare</item>\n      <item>dbplus_unlockrel</item>\n      <item>dbplus_unselect</item>\n      <item>dbplus_update</item>\n      <item>dbplus_xlockrel</item>\n      <item>dbplus_xunlockrel</item>\n      <item>dbx_close</item>\n      <item>dbx_compare</item>\n      <item>dbx_connect</item>\n      <item>dbx_error</item>\n      <item>dbx_escape_string</item>\n      <item>dbx_fetch_row</item>\n      <item>dbx_query</item>\n      <item>dbx_sort</item>\n      <item>dcgettext</item>\n      <item>dcngettext</item>\n      <item>debug_backtrace</item>\n      <item>debug_print_backtrace</item>\n      <item>debug_zval_dump</item>\n      <item>decbin</item>\n      <item>dechex</item>\n      <item>decoct</item>\n      <item>define</item>\n      <item>defined</item>\n      <item>deflate_add</item>\n      <item>deflate_init</item>\n      <item>deg2rad</item>\n      <item>dgettext</item>\n      <item>dio_close</item>\n      <item>dio_fcntl</item>\n      <item>dio_open</item>\n      <item>dio_read</item>\n      <item>dio_seek</item>\n      <item>dio_stat</item>\n      <item>dio_tcsetattr</item>\n      <item>dio_truncate</item>\n      <item>dio_write</item>\n      <item>dir</item>\n      <item>dirname</item>\n      <item>diskfreespace</item>\n      <item>disk_free_space</item>\n      <item>disk_total_space</item>\n      <item>dl</item>\n      <item>dngettext</item>\n      <item>dns_check_record</item>\n      <item>dns_get_mx</item>\n      <item>dns_get_record</item>\n      <item>dom_import_simplexml</item>\n      <item>doubleval</item>\n      <item>easter_date</item>\n      <item>easter_days</item>\n      <item>eio_busy</item>\n      <item>eio_cancel</item>\n      <item>eio_chmod</item>\n      <item>eio_chown</item>\n      <item>eio_close</item>\n      <item>eio_custom</item>\n      <item>eio_dup2</item>\n      <item>eio_event_loop</item>\n      <item>eio_fallocate</item>\n      <item>eio_fchmod</item>\n      <item>eio_fchown</item>\n      <item>eio_fdatasync</item>\n      <item>eio_fstat</item>\n      <item>eio_fstatvfs</item>\n      <item>eio_fsync</item>\n      <item>eio_ftruncate</item>\n      <item>eio_futime</item>\n      <item>eio_get_event_stream</item>\n      <item>eio_get_last_error</item>\n      <item>eio_grp</item>\n      <item>eio_grp_add</item>\n      <item>eio_grp_cancel</item>\n      <item>eio_grp_limit</item>\n      <item>eio_init</item>\n      <item>eio_link</item>\n      <item>eio_lstat</item>\n      <item>eio_mkdir</item>\n      <item>eio_mknod</item>\n      <item>eio_nop</item>\n      <item>eio_npending</item>\n      <item>eio_nready</item>\n      <item>eio_nreqs</item>\n      <item>eio_nthreads</item>\n      <item>eio_open</item>\n      <item>eio_poll</item>\n      <item>eio_read</item>\n      <item>eio_readahead</item>\n      <item>eio_readdir</item>\n      <item>eio_readlink</item>\n      <item>eio_realpath</item>\n      <item>eio_rename</item>\n      <item>eio_rmdir</item>\n      <item>eio_seek</item>\n      <item>eio_sendfile</item>\n      <item>eio_set_max_idle</item>\n      <item>eio_set_max_parallel</item>\n      <item>eio_set_max_poll_reqs</item>\n      <item>eio_set_max_poll_time</item>\n      <item>eio_set_min_parallel</item>\n      <item>eio_stat</item>\n      <item>eio_statvfs</item>\n      <item>eio_symlink</item>\n      <item>eio_sync</item>\n      <item>eio_syncfs</item>\n      <item>eio_sync_file_range</item>\n      <item>eio_truncate</item>\n      <item>eio_unlink</item>\n      <item>eio_utime</item>\n      <item>eio_write</item>\n      <item>enchant_broker_describe</item>\n      <item>enchant_broker_dict_exists</item>\n      <item>enchant_broker_free</item>\n      <item>enchant_broker_free_dict</item>\n      <item>enchant_broker_get_dict_path</item>\n      <item>enchant_broker_get_error</item>\n      <item>enchant_broker_init</item>\n      <item>enchant_broker_list_dicts</item>\n      <item>enchant_broker_request_dict</item>\n      <item>enchant_broker_request_pwl_dict</item>\n      <item>enchant_broker_set_dict_path</item>\n      <item>enchant_broker_set_ordering</item>\n      <item>enchant_dict_add_to_personal</item>\n      <item>enchant_dict_add_to_session</item>\n      <item>enchant_dict_check</item>\n      <item>enchant_dict_describe</item>\n      <item>enchant_dict_get_error</item>\n      <item>enchant_dict_is_in_session</item>\n      <item>enchant_dict_quick_check</item>\n      <item>enchant_dict_store_replacement</item>\n      <item>enchant_dict_suggest</item>\n      <item>end</item>\n      <item>error_clear_last</item>\n      <item>error_get_last</item>\n      <item>error_log</item>\n      <item>error_reporting</item>\n      <item>escapeshellarg</item>\n      <item>escapeshellcmd</item>\n      <item>event_add</item>\n      <item>event_base_free</item>\n      <item>event_base_loop</item>\n      <item>event_base_loopbreak</item>\n      <item>event_base_loopexit</item>\n      <item>event_base_new</item>\n      <item>event_base_priority_init</item>\n      <item>event_base_reinit</item>\n      <item>event_base_set</item>\n      <item>event_buffer_base_set</item>\n      <item>event_buffer_disable</item>\n      <item>event_buffer_enable</item>\n      <item>event_buffer_fd_set</item>\n      <item>event_buffer_free</item>\n      <item>event_buffer_new</item>\n      <item>event_buffer_priority_set</item>\n      <item>event_buffer_read</item>\n      <item>event_buffer_set_callback</item>\n      <item>event_buffer_timeout_set</item>\n      <item>event_buffer_watermark_set</item>\n      <item>event_buffer_write</item>\n      <item>event_del</item>\n      <item>event_free</item>\n      <item>event_new</item>\n      <item>event_priority_set</item>\n      <item>event_set</item>\n      <item>event_timer_add</item>\n      <item>event_timer_del</item>\n      <item>event_timer_new</item>\n      <item>event_timer_set</item>\n      <item>exec</item>\n      <item>exif_imagetype</item>\n      <item>exif_read_data</item>\n      <item>exif_tagname</item>\n      <item>exif_thumbnail</item>\n      <item>exp</item>\n      <item>expect_expectl</item>\n      <item>expect_popen</item>\n      <item>explode</item>\n      <item>expm1</item>\n      <item>extension_loaded</item>\n      <item>extract</item>\n      <item>ezmlm_hash</item>\n      <item>fam_cancel_monitor</item>\n      <item>fam_close</item>\n      <item>fam_monitor_collection</item>\n      <item>fam_monitor_directory</item>\n      <item>fam_monitor_file</item>\n      <item>fam_next_event</item>\n      <item>fam_open</item>\n      <item>fam_pending</item>\n      <item>fam_resume_monitor</item>\n      <item>fam_suspend_monitor</item>\n      <item>fann_cascadetrain_on_data</item>\n      <item>fann_cascadetrain_on_file</item>\n      <item>fann_clear_scaling_params</item>\n      <item>fann_copy</item>\n      <item>fann_create_from_file</item>\n      <item>fann_create_shortcut</item>\n      <item>fann_create_shortcut_array</item>\n      <item>fann_create_sparse</item>\n      <item>fann_create_sparse_array</item>\n      <item>fann_create_standard</item>\n      <item>fann_create_standard_array</item>\n      <item>fann_create_train</item>\n      <item>fann_create_train_from_callback</item>\n      <item>fann_descale_input</item>\n      <item>fann_descale_output</item>\n      <item>fann_descale_train</item>\n      <item>fann_destroy</item>\n      <item>fann_destroy_train</item>\n      <item>fann_duplicate_train_data</item>\n      <item>fann_get_activation_function</item>\n      <item>fann_get_activation_steepness</item>\n      <item>fann_get_bias_array</item>\n      <item>fann_get_bit_fail</item>\n      <item>fann_get_bit_fail_limit</item>\n      <item>fann_get_cascade_activation_functions</item>\n      <item>fann_get_cascade_activation_functions_count</item>\n      <item>fann_get_cascade_activation_steepnesses</item>\n      <item>fann_get_cascade_activation_steepnesses_count</item>\n      <item>fann_get_cascade_candidate_change_fraction</item>\n      <item>fann_get_cascade_candidate_limit</item>\n      <item>fann_get_cascade_candidate_stagnation_epochs</item>\n      <item>fann_get_cascade_max_cand_epochs</item>\n      <item>fann_get_cascade_max_out_epochs</item>\n      <item>fann_get_cascade_min_cand_epochs</item>\n      <item>fann_get_cascade_min_out_epochs</item>\n      <item>fann_get_cascade_num_candidates</item>\n      <item>fann_get_cascade_num_candidate_groups</item>\n      <item>fann_get_cascade_output_change_fraction</item>\n      <item>fann_get_cascade_output_stagnation_epochs</item>\n      <item>fann_get_cascade_weight_multiplier</item>\n      <item>fann_get_connection_array</item>\n      <item>fann_get_connection_rate</item>\n      <item>fann_get_errno</item>\n      <item>fann_get_errstr</item>\n      <item>fann_get_layer_array</item>\n      <item>fann_get_learning_momentum</item>\n      <item>fann_get_learning_rate</item>\n      <item>fann_get_mse</item>\n      <item>fann_get_network_type</item>\n      <item>fann_get_num_input</item>\n      <item>fann_get_num_layers</item>\n      <item>fann_get_num_output</item>\n      <item>fann_get_quickprop_decay</item>\n      <item>fann_get_quickprop_mu</item>\n      <item>fann_get_rprop_decrease_factor</item>\n      <item>fann_get_rprop_delta_max</item>\n      <item>fann_get_rprop_delta_min</item>\n      <item>fann_get_rprop_delta_zero</item>\n      <item>fann_get_rprop_increase_factor</item>\n      <item>fann_get_sarprop_step_error_shift</item>\n      <item>fann_get_sarprop_step_error_threshold_factor</item>\n      <item>fann_get_sarprop_temperature</item>\n      <item>fann_get_sarprop_weight_decay_shift</item>\n      <item>fann_get_total_connections</item>\n      <item>fann_get_total_neurons</item>\n      <item>fann_get_training_algorithm</item>\n      <item>fann_get_train_error_function</item>\n      <item>fann_get_train_stop_function</item>\n      <item>fann_init_weights</item>\n      <item>fann_length_train_data</item>\n      <item>fann_merge_train_data</item>\n      <item>fann_num_input_train_data</item>\n      <item>fann_num_output_train_data</item>\n      <item>fann_print_error</item>\n      <item>fann_randomize_weights</item>\n      <item>fann_read_train_from_file</item>\n      <item>fann_reset_errno</item>\n      <item>fann_reset_errstr</item>\n      <item>fann_reset_mse</item>\n      <item>fann_run</item>\n      <item>fann_save</item>\n      <item>fann_save_train</item>\n      <item>fann_scale_input</item>\n      <item>fann_scale_input_train_data</item>\n      <item>fann_scale_output</item>\n      <item>fann_scale_output_train_data</item>\n      <item>fann_scale_train</item>\n      <item>fann_scale_train_data</item>\n      <item>fann_set_activation_function</item>\n      <item>fann_set_activation_function_hidden</item>\n      <item>fann_set_activation_function_layer</item>\n      <item>fann_set_activation_function_output</item>\n      <item>fann_set_activation_steepness</item>\n      <item>fann_set_activation_steepness_hidden</item>\n      <item>fann_set_activation_steepness_layer</item>\n      <item>fann_set_activation_steepness_output</item>\n      <item>fann_set_bit_fail_limit</item>\n      <item>fann_set_callback</item>\n      <item>fann_set_cascade_activation_functions</item>\n      <item>fann_set_cascade_activation_steepnesses</item>\n      <item>fann_set_cascade_candidate_change_fraction</item>\n      <item>fann_set_cascade_candidate_limit</item>\n      <item>fann_set_cascade_candidate_stagnation_epochs</item>\n      <item>fann_set_cascade_max_cand_epochs</item>\n      <item>fann_set_cascade_max_out_epochs</item>\n      <item>fann_set_cascade_min_cand_epochs</item>\n      <item>fann_set_cascade_min_out_epochs</item>\n      <item>fann_set_cascade_num_candidate_groups</item>\n      <item>fann_set_cascade_output_change_fraction</item>\n      <item>fann_set_cascade_output_stagnation_epochs</item>\n      <item>fann_set_cascade_weight_multiplier</item>\n      <item>fann_set_error_log</item>\n      <item>fann_set_input_scaling_params</item>\n      <item>fann_set_learning_momentum</item>\n      <item>fann_set_learning_rate</item>\n      <item>fann_set_output_scaling_params</item>\n      <item>fann_set_quickprop_decay</item>\n      <item>fann_set_quickprop_mu</item>\n      <item>fann_set_rprop_decrease_factor</item>\n      <item>fann_set_rprop_delta_max</item>\n      <item>fann_set_rprop_delta_min</item>\n      <item>fann_set_rprop_delta_zero</item>\n      <item>fann_set_rprop_increase_factor</item>\n      <item>fann_set_sarprop_step_error_shift</item>\n      <item>fann_set_sarprop_step_error_threshold_factor</item>\n      <item>fann_set_sarprop_temperature</item>\n      <item>fann_set_sarprop_weight_decay_shift</item>\n      <item>fann_set_scaling_params</item>\n      <item>fann_set_training_algorithm</item>\n      <item>fann_set_train_error_function</item>\n      <item>fann_set_train_stop_function</item>\n      <item>fann_set_weight</item>\n      <item>fann_set_weight_array</item>\n      <item>fann_shuffle_train_data</item>\n      <item>fann_subset_train_data</item>\n      <item>fann_test</item>\n      <item>fann_test_data</item>\n      <item>fann_train</item>\n      <item>fann_train_epoch</item>\n      <item>fann_train_on_data</item>\n      <item>fann_train_on_file</item>\n      <item>fastcgi_finish_request</item>\n      <item>fbsql_affected_rows</item>\n      <item>fbsql_autocommit</item>\n      <item>fbsql_blob_size</item>\n      <item>fbsql_change_user</item>\n      <item>fbsql_clob_size</item>\n      <item>fbsql_close</item>\n      <item>fbsql_commit</item>\n      <item>fbsql_connect</item>\n      <item>fbsql_create_blob</item>\n      <item>fbsql_create_clob</item>\n      <item>fbsql_create_db</item>\n      <item>fbsql_database</item>\n      <item>fbsql_database_password</item>\n      <item>fbsql_data_seek</item>\n      <item>fbsql_db_query</item>\n      <item>fbsql_db_status</item>\n      <item>fbsql_drop_db</item>\n      <item>fbsql_errno</item>\n      <item>fbsql_error</item>\n      <item>fbsql_fetch_array</item>\n      <item>fbsql_fetch_assoc</item>\n      <item>fbsql_fetch_field</item>\n      <item>fbsql_fetch_lengths</item>\n      <item>fbsql_fetch_object</item>\n      <item>fbsql_fetch_row</item>\n      <item>fbsql_field_flags</item>\n      <item>fbsql_field_len</item>\n      <item>fbsql_field_name</item>\n      <item>fbsql_field_seek</item>\n      <item>fbsql_field_table</item>\n      <item>fbsql_field_type</item>\n      <item>fbsql_free_result</item>\n      <item>fbsql_get_autostart_info</item>\n      <item>fbsql_hostname</item>\n      <item>fbsql_insert_id</item>\n      <item>fbsql_list_dbs</item>\n      <item>fbsql_list_fields</item>\n      <item>fbsql_list_tables</item>\n      <item>fbsql_next_result</item>\n      <item>fbsql_num_fields</item>\n      <item>fbsql_num_rows</item>\n      <item>fbsql_password</item>\n      <item>fbsql_pconnect</item>\n      <item>fbsql_query</item>\n      <item>fbsql_read_blob</item>\n      <item>fbsql_read_clob</item>\n      <item>fbsql_result</item>\n      <item>fbsql_rollback</item>\n      <item>fbsql_rows_fetched</item>\n      <item>fbsql_select_db</item>\n      <item>fbsql_set_characterset</item>\n      <item>fbsql_set_lob_mode</item>\n      <item>fbsql_set_password</item>\n      <item>fbsql_set_transaction</item>\n      <item>fbsql_start_db</item>\n      <item>fbsql_stop_db</item>\n      <item>fbsql_tablename</item>\n      <item>fbsql_table_name</item>\n      <item>fbsql_username</item>\n      <item>fbsql_warnings</item>\n      <item>fclose</item>\n      <item>fdf_add_doc_javascript</item>\n      <item>fdf_add_template</item>\n      <item>fdf_close</item>\n      <item>fdf_create</item>\n      <item>fdf_enum_values</item>\n      <item>fdf_errno</item>\n      <item>fdf_error</item>\n      <item>fdf_get_ap</item>\n      <item>fdf_get_attachment</item>\n      <item>fdf_get_encoding</item>\n      <item>fdf_get_file</item>\n      <item>fdf_get_flags</item>\n      <item>fdf_get_opt</item>\n      <item>fdf_get_status</item>\n      <item>fdf_get_value</item>\n      <item>fdf_get_version</item>\n      <item>fdf_header</item>\n      <item>fdf_next_field_name</item>\n      <item>fdf_open</item>\n      <item>fdf_open_string</item>\n      <item>fdf_remove_item</item>\n      <item>fdf_save</item>\n      <item>fdf_save_string</item>\n      <item>fdf_set_ap</item>\n      <item>fdf_set_encoding</item>\n      <item>fdf_set_file</item>\n      <item>fdf_set_flags</item>\n      <item>fdf_set_javascript_action</item>\n      <item>fdf_set_on_import_javascript</item>\n      <item>fdf_set_opt</item>\n      <item>fdf_set_status</item>\n      <item>fdf_set_submit_form_action</item>\n      <item>fdf_set_target_frame</item>\n      <item>fdf_set_value</item>\n      <item>fdf_set_version</item>\n      <item>feof</item>\n      <item>fflush</item>\n      <item>fgetc</item>\n      <item>fgetcsv</item>\n      <item>fgets</item>\n      <item>fgetss</item>\n      <item>file</item>\n      <item>fileatime</item>\n      <item>filectime</item>\n      <item>filegroup</item>\n      <item>fileinode</item>\n      <item>filemtime</item>\n      <item>fileowner</item>\n      <item>fileperms</item>\n      <item>filepro</item>\n      <item>filepro_fieldcount</item>\n      <item>filepro_fieldname</item>\n      <item>filepro_fieldtype</item>\n      <item>filepro_fieldwidth</item>\n      <item>filepro_retrieve</item>\n      <item>filepro_rowcount</item>\n      <item>filesize</item>\n      <item>filetype</item>\n      <item>file_exists</item>\n      <item>file_get_contents</item>\n      <item>file_put_contents</item>\n      <item>filter_has_var</item>\n      <item>filter_id</item>\n      <item>filter_input</item>\n      <item>filter_input_array</item>\n      <item>filter_list</item>\n      <item>filter_var</item>\n      <item>filter_var_array</item>\n      <item>finfo_buffer</item>\n      <item>finfo_close</item>\n      <item>finfo_file</item>\n      <item>finfo_open</item>\n      <item>finfo_set_flags</item>\n      <item>floatval</item>\n      <item>flock</item>\n      <item>floor</item>\n      <item>flush</item>\n      <item>fmod</item>\n      <item>fnmatch</item>\n      <item>fopen</item>\n      <item>forward_static_call</item>\n      <item>forward_static_call_array</item>\n      <item>fpassthru</item>\n      <item>fprintf</item>\n      <item>fputcsv</item>\n      <item>fputs</item>\n      <item>fread</item>\n      <item>frenchtojd</item>\n      <item>fribidi_log2vis</item>\n      <item>fscanf</item>\n      <item>fseek</item>\n      <item>fsockopen</item>\n      <item>fstat</item>\n      <item>ftell</item>\n      <item>ftok</item>\n      <item>ftp_alloc</item>\n      <item>ftp_append</item>\n      <item>ftp_cdup</item>\n      <item>ftp_chdir</item>\n      <item>ftp_chmod</item>\n      <item>ftp_close</item>\n      <item>ftp_connect</item>\n      <item>ftp_delete</item>\n      <item>ftp_exec</item>\n      <item>ftp_fget</item>\n      <item>ftp_fput</item>\n      <item>ftp_get</item>\n      <item>ftp_get_option</item>\n      <item>ftp_login</item>\n      <item>ftp_mdtm</item>\n      <item>ftp_mkdir</item>\n      <item>ftp_mlsd</item>\n      <item>ftp_nb_continue</item>\n      <item>ftp_nb_fget</item>\n      <item>ftp_nb_fput</item>\n      <item>ftp_nb_get</item>\n      <item>ftp_nb_put</item>\n      <item>ftp_nlist</item>\n      <item>ftp_pasv</item>\n      <item>ftp_put</item>\n      <item>ftp_pwd</item>\n      <item>ftp_quit</item>\n      <item>ftp_raw</item>\n      <item>ftp_rawlist</item>\n      <item>ftp_rename</item>\n      <item>ftp_rmdir</item>\n      <item>ftp_set_option</item>\n      <item>ftp_site</item>\n      <item>ftp_size</item>\n      <item>ftp_ssl_connect</item>\n      <item>ftp_systype</item>\n      <item>ftruncate</item>\n      <item>function_exists</item>\n      <item>func_get_arg</item>\n      <item>func_get_args</item>\n      <item>func_num_args</item>\n      <item>fwrite</item>\n      <item>gc_collect_cycles</item>\n      <item>gc_disable</item>\n      <item>gc_enable</item>\n      <item>gc_enabled</item>\n      <item>gc_mem_caches</item>\n      <item>gd_info</item>\n      <item>geoip_asnum_by_name</item>\n      <item>geoip_continent_code_by_name</item>\n      <item>geoip_country_code3_by_name</item>\n      <item>geoip_country_code_by_name</item>\n      <item>geoip_country_name_by_name</item>\n      <item>geoip_database_info</item>\n      <item>geoip_db_avail</item>\n      <item>geoip_db_filename</item>\n      <item>geoip_db_get_all_info</item>\n      <item>geoip_domain_by_name</item>\n      <item>geoip_id_by_name</item>\n      <item>geoip_isp_by_name</item>\n      <item>geoip_netspeedcell_by_name</item>\n      <item>geoip_org_by_name</item>\n      <item>geoip_record_by_name</item>\n      <item>geoip_region_by_name</item>\n      <item>geoip_region_name_by_code</item>\n      <item>geoip_setup_custom_directory</item>\n      <item>geoip_time_zone_by_country_and_region</item>\n      <item>getallheaders</item>\n      <item>getcwd</item>\n      <item>getdate</item>\n      <item>getenv</item>\n      <item>gethostbyaddr</item>\n      <item>gethostbyname</item>\n      <item>gethostbynamel</item>\n      <item>gethostname</item>\n      <item>getimagesize</item>\n      <item>getimagesizefromstring</item>\n      <item>getlastmod</item>\n      <item>getmxrr</item>\n      <item>getmygid</item>\n      <item>getmyinode</item>\n      <item>getmypid</item>\n      <item>getmyuid</item>\n      <item>getopt</item>\n      <item>getprotobyname</item>\n      <item>getprotobynumber</item>\n      <item>getrandmax</item>\n      <item>getrusage</item>\n      <item>getservbyname</item>\n      <item>getservbyport</item>\n      <item>gettext</item>\n      <item>gettimeofday</item>\n      <item>gettype</item>\n      <item>get_browser</item>\n      <item>get_called_class</item>\n      <item>get_cfg_var</item>\n      <item>get_class</item>\n      <item>get_class_methods</item>\n      <item>get_class_vars</item>\n      <item>get_current_user</item>\n      <item>get_declared_classes</item>\n      <item>get_declared_interfaces</item>\n      <item>get_declared_traits</item>\n      <item>get_defined_constants</item>\n      <item>get_defined_functions</item>\n      <item>get_defined_vars</item>\n      <item>get_extension_funcs</item>\n      <item>get_headers</item>\n      <item>get_html_translation_table</item>\n      <item>get_included_files</item>\n      <item>get_include_path</item>\n      <item>get_loaded_extensions</item>\n      <item>get_magic_quotes_gpc</item>\n      <item>get_magic_quotes_runtime</item>\n      <item>get_meta_tags</item>\n      <item>get_object_vars</item>\n      <item>get_parent_class</item>\n      <item>get_required_files</item>\n      <item>get_resources</item>\n      <item>get_resource_type</item>\n      <item>glob</item>\n      <item>gmdate</item>\n      <item>gmmktime</item>\n      <item>gmp_abs</item>\n      <item>gmp_add</item>\n      <item>gmp_and</item>\n      <item>gmp_binomial</item>\n      <item>gmp_clrbit</item>\n      <item>gmp_cmp</item>\n      <item>gmp_com</item>\n      <item>gmp_div</item>\n      <item>gmp_divexact</item>\n      <item>gmp_div_q</item>\n      <item>gmp_div_qr</item>\n      <item>gmp_div_r</item>\n      <item>gmp_export</item>\n      <item>gmp_fact</item>\n      <item>gmp_gcd</item>\n      <item>gmp_gcdext</item>\n      <item>gmp_hamdist</item>\n      <item>gmp_import</item>\n      <item>gmp_init</item>\n      <item>gmp_intval</item>\n      <item>gmp_invert</item>\n      <item>gmp_jacobi</item>\n      <item>gmp_kronecker</item>\n      <item>gmp_lcm</item>\n      <item>gmp_legendre</item>\n      <item>gmp_mod</item>\n      <item>gmp_mul</item>\n      <item>gmp_neg</item>\n      <item>gmp_nextprime</item>\n      <item>gmp_or</item>\n      <item>gmp_perfect_power</item>\n      <item>gmp_perfect_square</item>\n      <item>gmp_popcount</item>\n      <item>gmp_pow</item>\n      <item>gmp_powm</item>\n      <item>gmp_prob_prime</item>\n      <item>gmp_random_bits</item>\n      <item>gmp_random_range</item>\n      <item>gmp_random_seed</item>\n      <item>gmp_root</item>\n      <item>gmp_rootrem</item>\n      <item>gmp_scan0</item>\n      <item>gmp_scan1</item>\n      <item>gmp_setbit</item>\n      <item>gmp_sign</item>\n      <item>gmp_sqrt</item>\n      <item>gmp_sqrtrem</item>\n      <item>gmp_strval</item>\n      <item>gmp_sub</item>\n      <item>gmp_testbit</item>\n      <item>gmp_xor</item>\n      <item>gmstrftime</item>\n      <item>gnupg_adddecryptkey</item>\n      <item>gnupg_addencryptkey</item>\n      <item>gnupg_addsignkey</item>\n      <item>gnupg_cleardecryptkeys</item>\n      <item>gnupg_clearencryptkeys</item>\n      <item>gnupg_clearsignkeys</item>\n      <item>gnupg_decrypt</item>\n      <item>gnupg_decryptverify</item>\n      <item>gnupg_encrypt</item>\n      <item>gnupg_encryptsign</item>\n      <item>gnupg_export</item>\n      <item>gnupg_geterror</item>\n      <item>gnupg_getprotocol</item>\n      <item>gnupg_import</item>\n      <item>gnupg_init</item>\n      <item>gnupg_keyinfo</item>\n      <item>gnupg_setarmor</item>\n      <item>gnupg_seterrormode</item>\n      <item>gnupg_setsignmode</item>\n      <item>gnupg_sign</item>\n      <item>gnupg_verify</item>\n      <item>gopher_parsedir</item>\n      <item>grapheme_extract</item>\n      <item>grapheme_stripos</item>\n      <item>grapheme_stristr</item>\n      <item>grapheme_strlen</item>\n      <item>grapheme_strpos</item>\n      <item>grapheme_strripos</item>\n      <item>grapheme_strrpos</item>\n      <item>grapheme_strstr</item>\n      <item>grapheme_substr</item>\n      <item>gregoriantojd</item>\n      <item>gupnp_context_get_host_ip</item>\n      <item>gupnp_context_get_port</item>\n      <item>gupnp_context_get_subscription_timeout</item>\n      <item>gupnp_context_host_path</item>\n      <item>gupnp_context_new</item>\n      <item>gupnp_context_set_subscription_timeout</item>\n      <item>gupnp_context_timeout_add</item>\n      <item>gupnp_context_unhost_path</item>\n      <item>gupnp_control_point_browse_start</item>\n      <item>gupnp_control_point_browse_stop</item>\n      <item>gupnp_control_point_callback_set</item>\n      <item>gupnp_control_point_new</item>\n      <item>gupnp_device_action_callback_set</item>\n      <item>gupnp_device_info_get</item>\n      <item>gupnp_device_info_get_service</item>\n      <item>gupnp_root_device_get_available</item>\n      <item>gupnp_root_device_get_relative_location</item>\n      <item>gupnp_root_device_new</item>\n      <item>gupnp_root_device_set_available</item>\n      <item>gupnp_root_device_start</item>\n      <item>gupnp_root_device_stop</item>\n      <item>gupnp_service_action_get</item>\n      <item>gupnp_service_action_return</item>\n      <item>gupnp_service_action_return_error</item>\n      <item>gupnp_service_action_set</item>\n      <item>gupnp_service_freeze_notify</item>\n      <item>gupnp_service_info_get</item>\n      <item>gupnp_service_info_get_introspection</item>\n      <item>gupnp_service_introspection_get_state_variable</item>\n      <item>gupnp_service_notify</item>\n      <item>gupnp_service_proxy_action_get</item>\n      <item>gupnp_service_proxy_action_set</item>\n      <item>gupnp_service_proxy_add_notify</item>\n      <item>gupnp_service_proxy_callback_set</item>\n      <item>gupnp_service_proxy_get_subscribed</item>\n      <item>gupnp_service_proxy_remove_notify</item>\n      <item>gupnp_service_proxy_send_action</item>\n      <item>gupnp_service_proxy_set_subscribed</item>\n      <item>gupnp_service_thaw_notify</item>\n      <item>gzclose</item>\n      <item>gzcompress</item>\n      <item>gzdecode</item>\n      <item>gzdeflate</item>\n      <item>gzencode</item>\n      <item>gzeof</item>\n      <item>gzfile</item>\n      <item>gzgetc</item>\n      <item>gzgets</item>\n      <item>gzgetss</item>\n      <item>gzinflate</item>\n      <item>gzopen</item>\n      <item>gzpassthru</item>\n      <item>gzputs</item>\n      <item>gzread</item>\n      <item>gzrewind</item>\n      <item>gzseek</item>\n      <item>gztell</item>\n      <item>gzuncompress</item>\n      <item>gzwrite</item>\n      <item>hash</item>\n      <item>hash_algos</item>\n      <item>hash_copy</item>\n      <item>hash_equals</item>\n      <item>hash_file</item>\n      <item>hash_final</item>\n      <item>hash_hkdf</item>\n      <item>hash_hmac</item>\n      <item>hash_hmac_algos</item>\n      <item>hash_hmac_file</item>\n      <item>hash_init</item>\n      <item>hash_pbkdf2</item>\n      <item>hash_update</item>\n      <item>hash_update_file</item>\n      <item>hash_update_stream</item>\n      <item>header</item>\n      <item>headers_list</item>\n      <item>headers_sent</item>\n      <item>header_register_callback</item>\n      <item>header_remove</item>\n      <item>hebrev</item>\n      <item>hebrevc</item>\n      <item>hex2bin</item>\n      <item>hexdec</item>\n      <item>highlight_file</item>\n      <item>highlight_string</item>\n      <item>hrtime</item>\n      <item>htmlentities</item>\n      <item>htmlspecialchars</item>\n      <item>htmlspecialchars_decode</item>\n      <item>html_entity_decode</item>\n      <item>http_build_query</item>\n      <item>http_response_code</item>\n      <item>hwapi_attribute_new</item>\n      <item>hwapi_content_new</item>\n      <item>hwapi_hgcsp</item>\n      <item>hwapi_object_new</item>\n      <item>hypot</item>\n      <item>ibase_add_user</item>\n      <item>ibase_affected_rows</item>\n      <item>ibase_backup</item>\n      <item>ibase_blob_add</item>\n      <item>ibase_blob_cancel</item>\n      <item>ibase_blob_close</item>\n      <item>ibase_blob_create</item>\n      <item>ibase_blob_echo</item>\n      <item>ibase_blob_get</item>\n      <item>ibase_blob_import</item>\n      <item>ibase_blob_info</item>\n      <item>ibase_blob_open</item>\n      <item>ibase_close</item>\n      <item>ibase_commit</item>\n      <item>ibase_commit_ret</item>\n      <item>ibase_connect</item>\n      <item>ibase_db_info</item>\n      <item>ibase_delete_user</item>\n      <item>ibase_drop_db</item>\n      <item>ibase_errcode</item>\n      <item>ibase_errmsg</item>\n      <item>ibase_execute</item>\n      <item>ibase_fetch_assoc</item>\n      <item>ibase_fetch_object</item>\n      <item>ibase_fetch_row</item>\n      <item>ibase_field_info</item>\n      <item>ibase_free_event_handler</item>\n      <item>ibase_free_query</item>\n      <item>ibase_free_result</item>\n      <item>ibase_gen_id</item>\n      <item>ibase_maintain_db</item>\n      <item>ibase_modify_user</item>\n      <item>ibase_name_result</item>\n      <item>ibase_num_fields</item>\n      <item>ibase_num_params</item>\n      <item>ibase_param_info</item>\n      <item>ibase_pconnect</item>\n      <item>ibase_prepare</item>\n      <item>ibase_query</item>\n      <item>ibase_restore</item>\n      <item>ibase_rollback</item>\n      <item>ibase_rollback_ret</item>\n      <item>ibase_server_info</item>\n      <item>ibase_service_attach</item>\n      <item>ibase_service_detach</item>\n      <item>ibase_set_event_handler</item>\n      <item>ibase_trans</item>\n      <item>ibase_wait_event</item>\n      <item>iconv</item>\n      <item>iconv_get_encoding</item>\n      <item>iconv_mime_decode</item>\n      <item>iconv_mime_decode_headers</item>\n      <item>iconv_mime_encode</item>\n      <item>iconv_set_encoding</item>\n      <item>iconv_strlen</item>\n      <item>iconv_strpos</item>\n      <item>iconv_strrpos</item>\n      <item>iconv_substr</item>\n      <item>id3_get_frame_long_name</item>\n      <item>id3_get_frame_short_name</item>\n      <item>id3_get_genre_id</item>\n      <item>id3_get_genre_list</item>\n      <item>id3_get_genre_name</item>\n      <item>id3_get_tag</item>\n      <item>id3_get_version</item>\n      <item>id3_remove_tag</item>\n      <item>id3_set_tag</item>\n      <item>idate</item>\n      <item>idn_to_ascii</item>\n      <item>idn_to_utf8</item>\n      <item>ifxus_close_slob</item>\n      <item>ifxus_create_slob</item>\n      <item>ifxus_free_slob</item>\n      <item>ifxus_open_slob</item>\n      <item>ifxus_read_slob</item>\n      <item>ifxus_seek_slob</item>\n      <item>ifxus_tell_slob</item>\n      <item>ifxus_write_slob</item>\n      <item>ifx_affected_rows</item>\n      <item>ifx_blobinfile_mode</item>\n      <item>ifx_byteasvarchar</item>\n      <item>ifx_close</item>\n      <item>ifx_connect</item>\n      <item>ifx_copy_blob</item>\n      <item>ifx_create_blob</item>\n      <item>ifx_create_char</item>\n      <item>ifx_do</item>\n      <item>ifx_error</item>\n      <item>ifx_errormsg</item>\n      <item>ifx_fetch_row</item>\n      <item>ifx_fieldproperties</item>\n      <item>ifx_fieldtypes</item>\n      <item>ifx_free_blob</item>\n      <item>ifx_free_char</item>\n      <item>ifx_free_result</item>\n      <item>ifx_getsqlca</item>\n      <item>ifx_get_blob</item>\n      <item>ifx_get_char</item>\n      <item>ifx_htmltbl_result</item>\n      <item>ifx_nullformat</item>\n      <item>ifx_num_fields</item>\n      <item>ifx_num_rows</item>\n      <item>ifx_pconnect</item>\n      <item>ifx_prepare</item>\n      <item>ifx_query</item>\n      <item>ifx_textasvarchar</item>\n      <item>ifx_update_blob</item>\n      <item>ifx_update_char</item>\n      <item>ignore_user_abort</item>\n      <item>iis_add_server</item>\n      <item>iis_get_dir_security</item>\n      <item>iis_get_script_map</item>\n      <item>iis_get_server_by_comment</item>\n      <item>iis_get_server_by_path</item>\n      <item>iis_get_server_rights</item>\n      <item>iis_get_service_state</item>\n      <item>iis_remove_server</item>\n      <item>iis_set_app_settings</item>\n      <item>iis_set_dir_security</item>\n      <item>iis_set_script_map</item>\n      <item>iis_set_server_rights</item>\n      <item>iis_start_server</item>\n      <item>iis_start_service</item>\n      <item>iis_stop_server</item>\n      <item>iis_stop_service</item>\n      <item>imageaffine</item>\n      <item>imageaffinematrixconcat</item>\n      <item>imageaffinematrixget</item>\n      <item>imagealphablending</item>\n      <item>imageantialias</item>\n      <item>imagearc</item>\n      <item>imagebmp</item>\n      <item>imagechar</item>\n      <item>imagecharup</item>\n      <item>imagecolorallocate</item>\n      <item>imagecolorallocatealpha</item>\n      <item>imagecolorat</item>\n      <item>imagecolorclosest</item>\n      <item>imagecolorclosestalpha</item>\n      <item>imagecolorclosesthwb</item>\n      <item>imagecolordeallocate</item>\n      <item>imagecolorexact</item>\n      <item>imagecolorexactalpha</item>\n      <item>imagecolormatch</item>\n      <item>imagecolorresolve</item>\n      <item>imagecolorresolvealpha</item>\n      <item>imagecolorset</item>\n      <item>imagecolorsforindex</item>\n      <item>imagecolorstotal</item>\n      <item>imagecolortransparent</item>\n      <item>imageconvolution</item>\n      <item>imagecopy</item>\n      <item>imagecopymerge</item>\n      <item>imagecopymergegray</item>\n      <item>imagecopyresampled</item>\n      <item>imagecopyresized</item>\n      <item>imagecreate</item>\n      <item>imagecreatefrombmp</item>\n      <item>imagecreatefromgd</item>\n      <item>imagecreatefromgd2</item>\n      <item>imagecreatefromgd2part</item>\n      <item>imagecreatefromgif</item>\n      <item>imagecreatefromjpeg</item>\n      <item>imagecreatefrompng</item>\n      <item>imagecreatefromstring</item>\n      <item>imagecreatefromwbmp</item>\n      <item>imagecreatefromwebp</item>\n      <item>imagecreatefromxbm</item>\n      <item>imagecreatefromxpm</item>\n      <item>imagecreatetruecolor</item>\n      <item>imagecrop</item>\n      <item>imagecropauto</item>\n      <item>imagedashedline</item>\n      <item>imagedestroy</item>\n      <item>imageellipse</item>\n      <item>imagefill</item>\n      <item>imagefilledarc</item>\n      <item>imagefilledellipse</item>\n      <item>imagefilledpolygon</item>\n      <item>imagefilledrectangle</item>\n      <item>imagefilltoborder</item>\n      <item>imagefilter</item>\n      <item>imageflip</item>\n      <item>imagefontheight</item>\n      <item>imagefontwidth</item>\n      <item>imageftbbox</item>\n      <item>imagefttext</item>\n      <item>imagegammacorrect</item>\n      <item>imagegd</item>\n      <item>imagegd2</item>\n      <item>imagegetclip</item>\n      <item>imagegif</item>\n      <item>imagegrabscreen</item>\n      <item>imagegrabwindow</item>\n      <item>imageinterlace</item>\n      <item>imageistruecolor</item>\n      <item>imagejpeg</item>\n      <item>imagelayereffect</item>\n      <item>imageline</item>\n      <item>imageloadfont</item>\n      <item>imageopenpolygon</item>\n      <item>imagepalettecopy</item>\n      <item>imagepalettetotruecolor</item>\n      <item>imagepng</item>\n      <item>imagepolygon</item>\n      <item>imagerectangle</item>\n      <item>imageresolution</item>\n      <item>imagerotate</item>\n      <item>imagesavealpha</item>\n      <item>imagescale</item>\n      <item>imagesetbrush</item>\n      <item>imagesetclip</item>\n      <item>imagesetinterpolation</item>\n      <item>imagesetpixel</item>\n      <item>imagesetstyle</item>\n      <item>imagesetthickness</item>\n      <item>imagesettile</item>\n      <item>imagestring</item>\n      <item>imagestringup</item>\n      <item>imagesx</item>\n      <item>imagesy</item>\n      <item>imagetruecolortopalette</item>\n      <item>imagettfbbox</item>\n      <item>imagettftext</item>\n      <item>imagetypes</item>\n      <item>imagewbmp</item>\n      <item>imagewebp</item>\n      <item>imagexbm</item>\n      <item>image_type_to_extension</item>\n      <item>image_type_to_mime_type</item>\n      <item>imap_8bit</item>\n      <item>imap_alerts</item>\n      <item>imap_append</item>\n      <item>imap_base64</item>\n      <item>imap_binary</item>\n      <item>imap_body</item>\n      <item>imap_bodystruct</item>\n      <item>imap_check</item>\n      <item>imap_clearflag_full</item>\n      <item>imap_close</item>\n      <item>imap_create</item>\n      <item>imap_createmailbox</item>\n      <item>imap_delete</item>\n      <item>imap_deletemailbox</item>\n      <item>imap_errors</item>\n      <item>imap_expunge</item>\n      <item>imap_fetchbody</item>\n      <item>imap_fetchheader</item>\n      <item>imap_fetchmime</item>\n      <item>imap_fetchstructure</item>\n      <item>imap_fetchtext</item>\n      <item>imap_fetch_overview</item>\n      <item>imap_gc</item>\n      <item>imap_getacl</item>\n      <item>imap_getmailboxes</item>\n      <item>imap_getsubscribed</item>\n      <item>imap_get_quota</item>\n      <item>imap_get_quotaroot</item>\n      <item>imap_header</item>\n      <item>imap_headerinfo</item>\n      <item>imap_headers</item>\n      <item>imap_last_error</item>\n      <item>imap_list</item>\n      <item>imap_listmailbox</item>\n      <item>imap_listscan</item>\n      <item>imap_listsubscribed</item>\n      <item>imap_lsub</item>\n      <item>imap_mail</item>\n      <item>imap_mailboxmsginfo</item>\n      <item>imap_mail_compose</item>\n      <item>imap_mail_copy</item>\n      <item>imap_mail_move</item>\n      <item>imap_mime_header_decode</item>\n      <item>imap_msgno</item>\n      <item>imap_mutf7_to_utf8</item>\n      <item>imap_num_msg</item>\n      <item>imap_num_recent</item>\n      <item>imap_open</item>\n      <item>imap_ping</item>\n      <item>imap_qprint</item>\n      <item>imap_rename</item>\n      <item>imap_renamemailbox</item>\n      <item>imap_reopen</item>\n      <item>imap_rfc822_parse_adrlist</item>\n      <item>imap_rfc822_parse_headers</item>\n      <item>imap_rfc822_write_address</item>\n      <item>imap_savebody</item>\n      <item>imap_scan</item>\n      <item>imap_scanmailbox</item>\n      <item>imap_search</item>\n      <item>imap_setacl</item>\n      <item>imap_setflag_full</item>\n      <item>imap_set_quota</item>\n      <item>imap_sort</item>\n      <item>imap_status</item>\n      <item>imap_subscribe</item>\n      <item>imap_thread</item>\n      <item>imap_timeout</item>\n      <item>imap_uid</item>\n      <item>imap_undelete</item>\n      <item>imap_unsubscribe</item>\n      <item>imap_utf7_decode</item>\n      <item>imap_utf7_encode</item>\n      <item>imap_utf8</item>\n      <item>imap_utf8_to_mutf7</item>\n      <item>implode</item>\n      <item>import_request_variables</item>\n      <item>inclued_get_data</item>\n      <item>inet_ntop</item>\n      <item>inet_pton</item>\n      <item>inflate_add</item>\n      <item>inflate_get_read_len</item>\n      <item>inflate_get_status</item>\n      <item>inflate_init</item>\n      <item>ingres_autocommit</item>\n      <item>ingres_autocommit_state</item>\n      <item>ingres_charset</item>\n      <item>ingres_close</item>\n      <item>ingres_commit</item>\n      <item>ingres_connect</item>\n      <item>ingres_cursor</item>\n      <item>ingres_errno</item>\n      <item>ingres_error</item>\n      <item>ingres_errsqlstate</item>\n      <item>ingres_escape_string</item>\n      <item>ingres_execute</item>\n      <item>ingres_fetch_array</item>\n      <item>ingres_fetch_assoc</item>\n      <item>ingres_fetch_object</item>\n      <item>ingres_fetch_proc_return</item>\n      <item>ingres_fetch_row</item>\n      <item>ingres_field_length</item>\n      <item>ingres_field_name</item>\n      <item>ingres_field_nullable</item>\n      <item>ingres_field_precision</item>\n      <item>ingres_field_scale</item>\n      <item>ingres_field_type</item>\n      <item>ingres_free_result</item>\n      <item>ingres_next_error</item>\n      <item>ingres_num_fields</item>\n      <item>ingres_num_rows</item>\n      <item>ingres_pconnect</item>\n      <item>ingres_prepare</item>\n      <item>ingres_query</item>\n      <item>ingres_result_seek</item>\n      <item>ingres_rollback</item>\n      <item>ingres_set_environment</item>\n      <item>ingres_unbuffered_query</item>\n      <item>ini_alter</item>\n      <item>ini_get</item>\n      <item>ini_get_all</item>\n      <item>ini_restore</item>\n      <item>ini_set</item>\n      <item>inotify_add_watch</item>\n      <item>inotify_init</item>\n      <item>inotify_queue_len</item>\n      <item>inotify_read</item>\n      <item>inotify_rm_watch</item>\n      <item>intdiv</item>\n      <item>interface_exists</item>\n      <item>intlcal_add</item>\n      <item>intlcal_after</item>\n      <item>intlcal_before</item>\n      <item>intlcal_clear</item>\n      <item>intlcal_create_instance</item>\n      <item>intlcal_equals</item>\n      <item>intlcal_field_difference</item>\n      <item>intlcal_from_date_time</item>\n      <item>intlcal_get</item>\n      <item>intlcal_get_actual_maximum</item>\n      <item>intlcal_get_actual_minimum</item>\n      <item>intlcal_get_available_locales</item>\n      <item>intlcal_get_day_of_week_type</item>\n      <item>intlcal_get_error_code</item>\n      <item>intlcal_get_error_message</item>\n      <item>intlcal_get_first_day_of_week</item>\n      <item>intlcal_get_greatest_minimum</item>\n      <item>intlcal_get_keyword_values_for_locale</item>\n      <item>intlcal_get_least_maximum</item>\n      <item>intlcal_get_locale</item>\n      <item>intlcal_get_maximum</item>\n      <item>intlcal_get_minimal_days_in_first_week</item>\n      <item>intlcal_get_minimum</item>\n      <item>intlcal_get_now</item>\n      <item>intlcal_get_repeated_wall_time_option</item>\n      <item>intlcal_get_skipped_wall_time_option</item>\n      <item>intlcal_get_time</item>\n      <item>intlcal_get_time_zone</item>\n      <item>intlcal_get_type</item>\n      <item>intlcal_get_weekend_transition</item>\n      <item>intlcal_in_daylight_time</item>\n      <item>intlcal_is_equivalent_to</item>\n      <item>intlcal_is_lenient</item>\n      <item>intlcal_is_set</item>\n      <item>intlcal_is_weekend</item>\n      <item>intlcal_roll</item>\n      <item>intlcal_set</item>\n      <item>intlcal_set_first_day_of_week</item>\n      <item>intlcal_set_lenient</item>\n      <item>intlcal_set_repeated_wall_time_option</item>\n      <item>intlcal_set_skipped_wall_time_option</item>\n      <item>intlcal_set_time</item>\n      <item>intlcal_set_time_zone</item>\n      <item>intlcal_to_date_time</item>\n      <item>intltz_get_error_code</item>\n      <item>intltz_get_error_message</item>\n      <item>intl_error_name</item>\n      <item>intl_get_error_code</item>\n      <item>intl_get_error_message</item>\n      <item>intl_is_failure</item>\n      <item>intval</item>\n      <item>in_array</item>\n      <item>ip2long</item>\n      <item>iptcembed</item>\n      <item>iptcparse</item>\n      <item>is_a</item>\n      <item>is_array</item>\n      <item>is_bool</item>\n      <item>is_callable</item>\n      <item>is_countable</item>\n      <item>is_dir</item>\n      <item>is_double</item>\n      <item>is_executable</item>\n      <item>is_file</item>\n      <item>is_finite</item>\n      <item>is_float</item>\n      <item>is_infinite</item>\n      <item>is_int</item>\n      <item>is_integer</item>\n      <item>is_iterable</item>\n      <item>is_link</item>\n      <item>is_long</item>\n      <item>is_nan</item>\n      <item>is_null</item>\n      <item>is_numeric</item>\n      <item>is_object</item>\n      <item>is_readable</item>\n      <item>is_real</item>\n      <item>is_resource</item>\n      <item>is_scalar</item>\n      <item>is_soap_fault</item>\n      <item>is_string</item>\n      <item>is_subclass_of</item>\n      <item>is_tainted</item>\n      <item>is_uploaded_file</item>\n      <item>is_writable</item>\n      <item>is_writeable</item>\n      <item>iterator_apply</item>\n      <item>iterator_count</item>\n      <item>iterator_to_array</item>\n      <item>jddayofweek</item>\n      <item>jdmonthname</item>\n      <item>jdtofrench</item>\n      <item>jdtogregorian</item>\n      <item>jdtojewish</item>\n      <item>jdtojulian</item>\n      <item>jdtounix</item>\n      <item>jewishtojd</item>\n      <item>join</item>\n      <item>json_decode</item>\n      <item>json_encode</item>\n      <item>json_last_error</item>\n      <item>json_last_error_msg</item>\n      <item>judy_type</item>\n      <item>judy_version</item>\n      <item>juliantojd</item>\n      <item>kadm5_chpass_principal</item>\n      <item>kadm5_create_principal</item>\n      <item>kadm5_delete_principal</item>\n      <item>kadm5_destroy</item>\n      <item>kadm5_flush</item>\n      <item>kadm5_get_policies</item>\n      <item>kadm5_get_principal</item>\n      <item>kadm5_get_principals</item>\n      <item>kadm5_init_with_password</item>\n      <item>kadm5_modify_principal</item>\n      <item>key</item>\n      <item>key_exists</item>\n      <item>krsort</item>\n      <item>ksort</item>\n      <item>lcfirst</item>\n      <item>lcg_value</item>\n      <item>lchgrp</item>\n      <item>lchown</item>\n      <item>ldap_8859_to_t61</item>\n      <item>ldap_add</item>\n      <item>ldap_add_ext</item>\n      <item>ldap_bind</item>\n      <item>ldap_bind_ext</item>\n      <item>ldap_close</item>\n      <item>ldap_compare</item>\n      <item>ldap_connect</item>\n      <item>ldap_control_paged_result</item>\n      <item>ldap_control_paged_result_response</item>\n      <item>ldap_count_entries</item>\n      <item>ldap_delete</item>\n      <item>ldap_delete_ext</item>\n      <item>ldap_dn2ufn</item>\n      <item>ldap_err2str</item>\n      <item>ldap_errno</item>\n      <item>ldap_error</item>\n      <item>ldap_escape</item>\n      <item>ldap_exop</item>\n      <item>ldap_exop_passwd</item>\n      <item>ldap_exop_refresh</item>\n      <item>ldap_exop_whoami</item>\n      <item>ldap_explode_dn</item>\n      <item>ldap_first_attribute</item>\n      <item>ldap_first_entry</item>\n      <item>ldap_first_reference</item>\n      <item>ldap_free_result</item>\n      <item>ldap_get_attributes</item>\n      <item>ldap_get_dn</item>\n      <item>ldap_get_entries</item>\n      <item>ldap_get_option</item>\n      <item>ldap_get_values</item>\n      <item>ldap_get_values_len</item>\n      <item>ldap_list</item>\n      <item>ldap_modify</item>\n      <item>ldap_modify_batch</item>\n      <item>ldap_mod_add</item>\n      <item>ldap_mod_add_ext</item>\n      <item>ldap_mod_del</item>\n      <item>ldap_mod_del_ext</item>\n      <item>ldap_mod_replace</item>\n      <item>ldap_mod_replace_ext</item>\n      <item>ldap_next_attribute</item>\n      <item>ldap_next_entry</item>\n      <item>ldap_next_reference</item>\n      <item>ldap_parse_exop</item>\n      <item>ldap_parse_reference</item>\n      <item>ldap_parse_result</item>\n      <item>ldap_read</item>\n      <item>ldap_rename</item>\n      <item>ldap_rename_ext</item>\n      <item>ldap_sasl_bind</item>\n      <item>ldap_search</item>\n      <item>ldap_set_option</item>\n      <item>ldap_set_rebind_proc</item>\n      <item>ldap_sort</item>\n      <item>ldap_start_tls</item>\n      <item>ldap_t61_to_8859</item>\n      <item>ldap_unbind</item>\n      <item>levenshtein</item>\n      <item>libxml_clear_errors</item>\n      <item>libxml_disable_entity_loader</item>\n      <item>libxml_get_errors</item>\n      <item>libxml_get_last_error</item>\n      <item>libxml_set_external_entity_loader</item>\n      <item>libxml_set_streams_context</item>\n      <item>libxml_use_internal_errors</item>\n      <item>link</item>\n      <item>linkinfo</item>\n      <item>localeconv</item>\n      <item>locale_accept_from_http</item>\n      <item>locale_compose</item>\n      <item>locale_filter_matches</item>\n      <item>locale_get_all_variants</item>\n      <item>locale_get_default</item>\n      <item>locale_get_display_language</item>\n      <item>locale_get_display_name</item>\n      <item>locale_get_display_region</item>\n      <item>locale_get_display_script</item>\n      <item>locale_get_display_variant</item>\n      <item>locale_get_keywords</item>\n      <item>locale_get_primary_language</item>\n      <item>locale_get_region</item>\n      <item>locale_get_script</item>\n      <item>locale_lookup</item>\n      <item>locale_parse</item>\n      <item>locale_set_default</item>\n      <item>localtime</item>\n      <item>log</item>\n      <item>log1p</item>\n      <item>log10</item>\n      <item>log_cmd_delete</item>\n      <item>log_cmd_insert</item>\n      <item>log_cmd_update</item>\n      <item>log_getmore</item>\n      <item>log_killcursor</item>\n      <item>log_reply</item>\n      <item>log_write_batch</item>\n      <item>long2ip</item>\n      <item>lstat</item>\n      <item>ltrim</item>\n      <item>lzf_compress</item>\n      <item>lzf_decompress</item>\n      <item>lzf_optimized_for</item>\n      <item>mail</item>\n      <item>mailparse_determine_best_xfer_encoding</item>\n      <item>mailparse_msg_create</item>\n      <item>mailparse_msg_extract_part</item>\n      <item>mailparse_msg_extract_part_file</item>\n      <item>mailparse_msg_extract_whole_part_file</item>\n      <item>mailparse_msg_free</item>\n      <item>mailparse_msg_get_part</item>\n      <item>mailparse_msg_get_part_data</item>\n      <item>mailparse_msg_get_structure</item>\n      <item>mailparse_msg_parse</item>\n      <item>mailparse_msg_parse_file</item>\n      <item>mailparse_rfc822_parse_addresses</item>\n      <item>mailparse_stream_encode</item>\n      <item>mailparse_uudecode_all</item>\n      <item>max</item>\n      <item>maxdb_affected_rows</item>\n      <item>maxdb_autocommit</item>\n      <item>maxdb_bind_param</item>\n      <item>maxdb_bind_result</item>\n      <item>maxdb_change_user</item>\n      <item>maxdb_character_set_name</item>\n      <item>maxdb_client_encoding</item>\n      <item>maxdb_close</item>\n      <item>maxdb_close_long_data</item>\n      <item>maxdb_commit</item>\n      <item>maxdb_connect</item>\n      <item>maxdb_connect_errno</item>\n      <item>maxdb_connect_error</item>\n      <item>maxdb_data_seek</item>\n      <item>maxdb_debug</item>\n      <item>maxdb_disable_reads_from_master</item>\n      <item>maxdb_disable_rpl_parse</item>\n      <item>maxdb_dump_debug_info</item>\n      <item>maxdb_embedded_connect</item>\n      <item>maxdb_enable_reads_from_master</item>\n      <item>maxdb_enable_rpl_parse</item>\n      <item>maxdb_errno</item>\n      <item>maxdb_error</item>\n      <item>maxdb_escape_string</item>\n      <item>maxdb_execute</item>\n      <item>maxdb_fetch</item>\n      <item>maxdb_fetch_array</item>\n      <item>maxdb_fetch_assoc</item>\n      <item>maxdb_fetch_field</item>\n      <item>maxdb_fetch_fields</item>\n      <item>maxdb_fetch_field_direct</item>\n      <item>maxdb_fetch_lengths</item>\n      <item>maxdb_fetch_object</item>\n      <item>maxdb_fetch_row</item>\n      <item>maxdb_field_count</item>\n      <item>maxdb_field_seek</item>\n      <item>maxdb_field_tell</item>\n      <item>maxdb_free_result</item>\n      <item>maxdb_get_client_info</item>\n      <item>maxdb_get_client_version</item>\n      <item>maxdb_get_host_info</item>\n      <item>maxdb_get_metadata</item>\n      <item>maxdb_get_proto_info</item>\n      <item>maxdb_get_server_info</item>\n      <item>maxdb_get_server_version</item>\n      <item>maxdb_info</item>\n      <item>maxdb_init</item>\n      <item>maxdb_insert_id</item>\n      <item>maxdb_kill</item>\n      <item>maxdb_master_query</item>\n      <item>maxdb_more_results</item>\n      <item>maxdb_multi_query</item>\n      <item>maxdb_next_result</item>\n      <item>maxdb_num_fields</item>\n      <item>maxdb_num_rows</item>\n      <item>maxdb_options</item>\n      <item>maxdb_param_count</item>\n      <item>maxdb_ping</item>\n      <item>maxdb_prepare</item>\n      <item>maxdb_query</item>\n      <item>maxdb_real_connect</item>\n      <item>maxdb_real_escape_string</item>\n      <item>maxdb_real_query</item>\n      <item>maxdb_report</item>\n      <item>maxdb_rollback</item>\n      <item>maxdb_rpl_parse_enabled</item>\n      <item>maxdb_rpl_probe</item>\n      <item>maxdb_rpl_query_type</item>\n      <item>maxdb_select_db</item>\n      <item>maxdb_send_long_data</item>\n      <item>maxdb_send_query</item>\n      <item>maxdb_server_end</item>\n      <item>maxdb_server_init</item>\n      <item>maxdb_set_opt</item>\n      <item>maxdb_sqlstate</item>\n      <item>maxdb_ssl_set</item>\n      <item>maxdb_stat</item>\n      <item>maxdb_stmt_affected_rows</item>\n      <item>maxdb_stmt_bind_param</item>\n      <item>maxdb_stmt_bind_result</item>\n      <item>maxdb_stmt_close</item>\n      <item>maxdb_stmt_close_long_data</item>\n      <item>maxdb_stmt_data_seek</item>\n      <item>maxdb_stmt_errno</item>\n      <item>maxdb_stmt_error</item>\n      <item>maxdb_stmt_execute</item>\n      <item>maxdb_stmt_fetch</item>\n      <item>maxdb_stmt_free_result</item>\n      <item>maxdb_stmt_init</item>\n      <item>maxdb_stmt_num_rows</item>\n      <item>maxdb_stmt_param_count</item>\n      <item>maxdb_stmt_prepare</item>\n      <item>maxdb_stmt_reset</item>\n      <item>maxdb_stmt_result_metadata</item>\n      <item>maxdb_stmt_send_long_data</item>\n      <item>maxdb_stmt_sqlstate</item>\n      <item>maxdb_stmt_store_result</item>\n      <item>maxdb_store_result</item>\n      <item>maxdb_thread_id</item>\n      <item>maxdb_thread_safe</item>\n      <item>maxdb_use_result</item>\n      <item>maxdb_warning_count</item>\n      <item>mb_check_encoding</item>\n      <item>mb_chr</item>\n      <item>mb_convert_case</item>\n      <item>mb_convert_encoding</item>\n      <item>mb_convert_kana</item>\n      <item>mb_convert_variables</item>\n      <item>mb_decode_mimeheader</item>\n      <item>mb_decode_numericentity</item>\n      <item>mb_detect_encoding</item>\n      <item>mb_detect_order</item>\n      <item>mb_encode_mimeheader</item>\n      <item>mb_encode_numericentity</item>\n      <item>mb_encoding_aliases</item>\n      <item>mb_ereg</item>\n      <item>mb_eregi</item>\n      <item>mb_eregi_replace</item>\n      <item>mb_ereg_match</item>\n      <item>mb_ereg_replace</item>\n      <item>mb_ereg_replace_callback</item>\n      <item>mb_ereg_search</item>\n      <item>mb_ereg_search_getpos</item>\n      <item>mb_ereg_search_getregs</item>\n      <item>mb_ereg_search_init</item>\n      <item>mb_ereg_search_pos</item>\n      <item>mb_ereg_search_regs</item>\n      <item>mb_ereg_search_setpos</item>\n      <item>mb_get_info</item>\n      <item>mb_http_input</item>\n      <item>mb_http_output</item>\n      <item>mb_internal_encoding</item>\n      <item>mb_language</item>\n      <item>mb_list_encodings</item>\n      <item>mb_ord</item>\n      <item>mb_output_handler</item>\n      <item>mb_parse_str</item>\n      <item>mb_preferred_mime_name</item>\n      <item>mb_regex_encoding</item>\n      <item>mb_regex_set_options</item>\n      <item>mb_scrub</item>\n      <item>mb_send_mail</item>\n      <item>mb_split</item>\n      <item>mb_strcut</item>\n      <item>mb_strimwidth</item>\n      <item>mb_stripos</item>\n      <item>mb_stristr</item>\n      <item>mb_strlen</item>\n      <item>mb_strpos</item>\n      <item>mb_strrchr</item>\n      <item>mb_strrichr</item>\n      <item>mb_strripos</item>\n      <item>mb_strrpos</item>\n      <item>mb_strstr</item>\n      <item>mb_strtolower</item>\n      <item>mb_strtoupper</item>\n      <item>mb_strwidth</item>\n      <item>mb_substitute_character</item>\n      <item>mb_substr</item>\n      <item>mb_substr_count</item>\n      <item>md5</item>\n      <item>md5_file</item>\n      <item>mdecrypt_generic</item>\n      <item>memcache_debug</item>\n      <item>memory_get_peak_usage</item>\n      <item>memory_get_usage</item>\n      <item>metaphone</item>\n      <item>method_exists</item>\n      <item>mhash</item>\n      <item>mhash_count</item>\n      <item>mhash_get_block_size</item>\n      <item>mhash_get_hash_name</item>\n      <item>mhash_keygen_s2k</item>\n      <item>microtime</item>\n      <item>mime_content_type</item>\n      <item>min</item>\n      <item>ming_keypress</item>\n      <item>ming_setcubicthreshold</item>\n      <item>ming_setscale</item>\n      <item>ming_setswfcompression</item>\n      <item>ming_useconstants</item>\n      <item>ming_useswfversion</item>\n      <item>mkdir</item>\n      <item>mktime</item>\n      <item>money_format</item>\n      <item>move_uploaded_file</item>\n      <item>mqseries_back</item>\n      <item>mqseries_begin</item>\n      <item>mqseries_close</item>\n      <item>mqseries_cmit</item>\n      <item>mqseries_conn</item>\n      <item>mqseries_connx</item>\n      <item>mqseries_disc</item>\n      <item>mqseries_get</item>\n      <item>mqseries_inq</item>\n      <item>mqseries_open</item>\n      <item>mqseries_put</item>\n      <item>mqseries_put1</item>\n      <item>mqseries_set</item>\n      <item>mqseries_strerror</item>\n      <item>msession_connect</item>\n      <item>msession_count</item>\n      <item>msession_create</item>\n      <item>msession_destroy</item>\n      <item>msession_disconnect</item>\n      <item>msession_find</item>\n      <item>msession_get</item>\n      <item>msession_get_array</item>\n      <item>msession_get_data</item>\n      <item>msession_inc</item>\n      <item>msession_list</item>\n      <item>msession_listvar</item>\n      <item>msession_lock</item>\n      <item>msession_plugin</item>\n      <item>msession_randstr</item>\n      <item>msession_set</item>\n      <item>msession_set_array</item>\n      <item>msession_set_data</item>\n      <item>msession_timeout</item>\n      <item>msession_uniq</item>\n      <item>msession_unlock</item>\n      <item>msgfmt_create</item>\n      <item>msgfmt_format</item>\n      <item>msgfmt_format_message</item>\n      <item>msgfmt_get_error_code</item>\n      <item>msgfmt_get_error_message</item>\n      <item>msgfmt_get_locale</item>\n      <item>msgfmt_get_pattern</item>\n      <item>msgfmt_parse</item>\n      <item>msgfmt_parse_message</item>\n      <item>msgfmt_set_pattern</item>\n      <item>msg_get_queue</item>\n      <item>msg_queue_exists</item>\n      <item>msg_receive</item>\n      <item>msg_remove_queue</item>\n      <item>msg_send</item>\n      <item>msg_set_queue</item>\n      <item>msg_stat_queue</item>\n      <item>msql</item>\n      <item>msql_affected_rows</item>\n      <item>msql_close</item>\n      <item>msql_connect</item>\n      <item>msql_createdb</item>\n      <item>msql_create_db</item>\n      <item>msql_data_seek</item>\n      <item>msql_dbname</item>\n      <item>msql_db_query</item>\n      <item>msql_drop_db</item>\n      <item>msql_error</item>\n      <item>msql_fetch_array</item>\n      <item>msql_fetch_field</item>\n      <item>msql_fetch_object</item>\n      <item>msql_fetch_row</item>\n      <item>msql_fieldflags</item>\n      <item>msql_fieldlen</item>\n      <item>msql_fieldname</item>\n      <item>msql_fieldtable</item>\n      <item>msql_fieldtype</item>\n      <item>msql_field_flags</item>\n      <item>msql_field_len</item>\n      <item>msql_field_name</item>\n      <item>msql_field_seek</item>\n      <item>msql_field_table</item>\n      <item>msql_field_type</item>\n      <item>msql_free_result</item>\n      <item>msql_list_dbs</item>\n      <item>msql_list_fields</item>\n      <item>msql_list_tables</item>\n      <item>msql_numfields</item>\n      <item>msql_numrows</item>\n      <item>msql_num_fields</item>\n      <item>msql_num_rows</item>\n      <item>msql_pconnect</item>\n      <item>msql_query</item>\n      <item>msql_regcase</item>\n      <item>msql_result</item>\n      <item>msql_select_db</item>\n      <item>msql_tablename</item>\n      <item>mt_getrandmax</item>\n      <item>mt_rand</item>\n      <item>mt_srand</item>\n      <item>mysqli_affected_rows</item>\n      <item>mysqli_autocommit</item>\n      <item>mysqli_begin_transaction</item>\n      <item>mysqli_change_user</item>\n      <item>mysqli_character_set_name</item>\n      <item>mysqli_close</item>\n      <item>mysqli_commit</item>\n      <item>mysqli_connect</item>\n      <item>mysqli_connect_errno</item>\n      <item>mysqli_connect_error</item>\n      <item>mysqli_data_seek</item>\n      <item>mysqli_debug</item>\n      <item>mysqli_dump_debug_info</item>\n      <item>mysqli_embedded_server_end</item>\n      <item>mysqli_embedded_server_start</item>\n      <item>mysqli_errno</item>\n      <item>mysqli_error</item>\n      <item>mysqli_error_list</item>\n      <item>mysqli_escape_string</item>\n      <item>mysqli_execute</item>\n      <item>mysqli_fetch_all</item>\n      <item>mysqli_fetch_array</item>\n      <item>mysqli_fetch_assoc</item>\n      <item>mysqli_fetch_field</item>\n      <item>mysqli_fetch_fields</item>\n      <item>mysqli_fetch_field_direct</item>\n      <item>mysqli_fetch_lengths</item>\n      <item>mysqli_fetch_object</item>\n      <item>mysqli_fetch_row</item>\n      <item>mysqli_field_count</item>\n      <item>mysqli_field_seek</item>\n      <item>mysqli_field_tell</item>\n      <item>mysqli_free_result</item>\n      <item>mysqli_get_cache_stats</item>\n      <item>mysqli_get_charset</item>\n      <item>mysqli_get_client_info</item>\n      <item>mysqli_get_client_stats</item>\n      <item>mysqli_get_client_version</item>\n      <item>mysqli_get_connection_stats</item>\n      <item>mysqli_get_host_info</item>\n      <item>mysqli_get_links_stats</item>\n      <item>mysqli_get_proto_info</item>\n      <item>mysqli_get_server_info</item>\n      <item>mysqli_get_server_version</item>\n      <item>mysqli_get_warnings</item>\n      <item>mysqli_info</item>\n      <item>mysqli_init</item>\n      <item>mysqli_insert_id</item>\n      <item>mysqli_kill</item>\n      <item>mysqli_more_results</item>\n      <item>mysqli_multi_query</item>\n      <item>mysqli_next_result</item>\n      <item>mysqli_num_fields</item>\n      <item>mysqli_num_rows</item>\n      <item>mysqli_options</item>\n      <item>mysqli_ping</item>\n      <item>mysqli_poll</item>\n      <item>mysqli_prepare</item>\n      <item>mysqli_query</item>\n      <item>mysqli_real_connect</item>\n      <item>mysqli_real_escape_string</item>\n      <item>mysqli_real_query</item>\n      <item>mysqli_reap_async_query</item>\n      <item>mysqli_refresh</item>\n      <item>mysqli_release_savepoint</item>\n      <item>mysqli_report</item>\n      <item>mysqli_rollback</item>\n      <item>mysqli_savepoint</item>\n      <item>mysqli_select_db</item>\n      <item>mysqli_set_charset</item>\n      <item>mysqli_set_local_infile_default</item>\n      <item>mysqli_set_local_infile_handler</item>\n      <item>mysqli_set_opt</item>\n      <item>mysqli_sqlstate</item>\n      <item>mysqli_ssl_set</item>\n      <item>mysqli_stat</item>\n      <item>mysqli_stmt_affected_rows</item>\n      <item>mysqli_stmt_attr_get</item>\n      <item>mysqli_stmt_attr_set</item>\n      <item>mysqli_stmt_bind_param</item>\n      <item>mysqli_stmt_bind_result</item>\n      <item>mysqli_stmt_close</item>\n      <item>mysqli_stmt_data_seek</item>\n      <item>mysqli_stmt_errno</item>\n      <item>mysqli_stmt_error</item>\n      <item>mysqli_stmt_error_list</item>\n      <item>mysqli_stmt_execute</item>\n      <item>mysqli_stmt_fetch</item>\n      <item>mysqli_stmt_field_count</item>\n      <item>mysqli_stmt_free_result</item>\n      <item>mysqli_stmt_get_result</item>\n      <item>mysqli_stmt_get_warnings</item>\n      <item>mysqli_stmt_init</item>\n      <item>mysqli_stmt_insert_id</item>\n      <item>mysqli_stmt_more_results</item>\n      <item>mysqli_stmt_next_result</item>\n      <item>mysqli_stmt_num_rows</item>\n      <item>mysqli_stmt_param_count</item>\n      <item>mysqli_stmt_prepare</item>\n      <item>mysqli_stmt_reset</item>\n      <item>mysqli_stmt_result_metadata</item>\n      <item>mysqli_stmt_send_long_data</item>\n      <item>mysqli_stmt_sqlstate</item>\n      <item>mysqli_stmt_store_result</item>\n      <item>mysqli_store_result</item>\n      <item>mysqli_thread_id</item>\n      <item>mysqli_thread_safe</item>\n      <item>mysqli_use_result</item>\n      <item>mysqli_warning_count</item>\n      <item>mysqlnd_memcache_get_config</item>\n      <item>mysqlnd_memcache_set</item>\n      <item>mysqlnd_ms_dump_servers</item>\n      <item>mysqlnd_ms_fabric_select_global</item>\n      <item>mysqlnd_ms_fabric_select_shard</item>\n      <item>mysqlnd_ms_get_last_gtid</item>\n      <item>mysqlnd_ms_get_last_used_connection</item>\n      <item>mysqlnd_ms_get_stats</item>\n      <item>mysqlnd_ms_match_wild</item>\n      <item>mysqlnd_ms_query_is_select</item>\n      <item>mysqlnd_ms_set_qos</item>\n      <item>mysqlnd_ms_set_user_pick_server</item>\n      <item>mysqlnd_ms_xa_begin</item>\n      <item>mysqlnd_ms_xa_commit</item>\n      <item>mysqlnd_ms_xa_gc</item>\n      <item>mysqlnd_ms_xa_rollback</item>\n      <item>mysqlnd_qc_clear_cache</item>\n      <item>mysqlnd_qc_get_available_handlers</item>\n      <item>mysqlnd_qc_get_cache_info</item>\n      <item>mysqlnd_qc_get_core_stats</item>\n      <item>mysqlnd_qc_get_normalized_query_trace_log</item>\n      <item>mysqlnd_qc_get_query_trace_log</item>\n      <item>mysqlnd_qc_set_cache_condition</item>\n      <item>mysqlnd_qc_set_is_select</item>\n      <item>mysqlnd_qc_set_storage_handler</item>\n      <item>mysqlnd_qc_set_user_handlers</item>\n      <item>mysqlnd_uh_convert_to_mysqlnd</item>\n      <item>mysqlnd_uh_set_connection_proxy</item>\n      <item>mysqlnd_uh_set_statement_proxy</item>\n      <item>natcasesort</item>\n      <item>natsort</item>\n      <item>ncurses_addch</item>\n      <item>ncurses_addchnstr</item>\n      <item>ncurses_addchstr</item>\n      <item>ncurses_addnstr</item>\n      <item>ncurses_addstr</item>\n      <item>ncurses_assume_default_colors</item>\n      <item>ncurses_attroff</item>\n      <item>ncurses_attron</item>\n      <item>ncurses_attrset</item>\n      <item>ncurses_baudrate</item>\n      <item>ncurses_beep</item>\n      <item>ncurses_bkgd</item>\n      <item>ncurses_bkgdset</item>\n      <item>ncurses_border</item>\n      <item>ncurses_bottom_panel</item>\n      <item>ncurses_can_change_color</item>\n      <item>ncurses_cbreak</item>\n      <item>ncurses_clear</item>\n      <item>ncurses_clrtobot</item>\n      <item>ncurses_clrtoeol</item>\n      <item>ncurses_color_content</item>\n      <item>ncurses_color_set</item>\n      <item>ncurses_curs_set</item>\n      <item>ncurses_define_key</item>\n      <item>ncurses_def_prog_mode</item>\n      <item>ncurses_def_shell_mode</item>\n      <item>ncurses_delay_output</item>\n      <item>ncurses_delch</item>\n      <item>ncurses_deleteln</item>\n      <item>ncurses_delwin</item>\n      <item>ncurses_del_panel</item>\n      <item>ncurses_doupdate</item>\n      <item>ncurses_echo</item>\n      <item>ncurses_echochar</item>\n      <item>ncurses_end</item>\n      <item>ncurses_erase</item>\n      <item>ncurses_erasechar</item>\n      <item>ncurses_filter</item>\n      <item>ncurses_flash</item>\n      <item>ncurses_flushinp</item>\n      <item>ncurses_getch</item>\n      <item>ncurses_getmaxyx</item>\n      <item>ncurses_getmouse</item>\n      <item>ncurses_getyx</item>\n      <item>ncurses_halfdelay</item>\n      <item>ncurses_has_colors</item>\n      <item>ncurses_has_ic</item>\n      <item>ncurses_has_il</item>\n      <item>ncurses_has_key</item>\n      <item>ncurses_hide_panel</item>\n      <item>ncurses_hline</item>\n      <item>ncurses_inch</item>\n      <item>ncurses_init</item>\n      <item>ncurses_init_color</item>\n      <item>ncurses_init_pair</item>\n      <item>ncurses_insch</item>\n      <item>ncurses_insdelln</item>\n      <item>ncurses_insertln</item>\n      <item>ncurses_insstr</item>\n      <item>ncurses_instr</item>\n      <item>ncurses_isendwin</item>\n      <item>ncurses_keyok</item>\n      <item>ncurses_keypad</item>\n      <item>ncurses_killchar</item>\n      <item>ncurses_longname</item>\n      <item>ncurses_meta</item>\n      <item>ncurses_mouseinterval</item>\n      <item>ncurses_mousemask</item>\n      <item>ncurses_mouse_trafo</item>\n      <item>ncurses_move</item>\n      <item>ncurses_move_panel</item>\n      <item>ncurses_mvaddch</item>\n      <item>ncurses_mvaddchnstr</item>\n      <item>ncurses_mvaddchstr</item>\n      <item>ncurses_mvaddnstr</item>\n      <item>ncurses_mvaddstr</item>\n      <item>ncurses_mvcur</item>\n      <item>ncurses_mvdelch</item>\n      <item>ncurses_mvgetch</item>\n      <item>ncurses_mvhline</item>\n      <item>ncurses_mvinch</item>\n      <item>ncurses_mvvline</item>\n      <item>ncurses_mvwaddstr</item>\n      <item>ncurses_napms</item>\n      <item>ncurses_newpad</item>\n      <item>ncurses_newwin</item>\n      <item>ncurses_new_panel</item>\n      <item>ncurses_nl</item>\n      <item>ncurses_nocbreak</item>\n      <item>ncurses_noecho</item>\n      <item>ncurses_nonl</item>\n      <item>ncurses_noqiflush</item>\n      <item>ncurses_noraw</item>\n      <item>ncurses_pair_content</item>\n      <item>ncurses_panel_above</item>\n      <item>ncurses_panel_below</item>\n      <item>ncurses_panel_window</item>\n      <item>ncurses_pnoutrefresh</item>\n      <item>ncurses_prefresh</item>\n      <item>ncurses_putp</item>\n      <item>ncurses_qiflush</item>\n      <item>ncurses_raw</item>\n      <item>ncurses_refresh</item>\n      <item>ncurses_replace_panel</item>\n      <item>ncurses_resetty</item>\n      <item>ncurses_reset_prog_mode</item>\n      <item>ncurses_reset_shell_mode</item>\n      <item>ncurses_savetty</item>\n      <item>ncurses_scrl</item>\n      <item>ncurses_scr_dump</item>\n      <item>ncurses_scr_init</item>\n      <item>ncurses_scr_restore</item>\n      <item>ncurses_scr_set</item>\n      <item>ncurses_show_panel</item>\n      <item>ncurses_slk_attr</item>\n      <item>ncurses_slk_attroff</item>\n      <item>ncurses_slk_attron</item>\n      <item>ncurses_slk_attrset</item>\n      <item>ncurses_slk_clear</item>\n      <item>ncurses_slk_color</item>\n      <item>ncurses_slk_init</item>\n      <item>ncurses_slk_noutrefresh</item>\n      <item>ncurses_slk_refresh</item>\n      <item>ncurses_slk_restore</item>\n      <item>ncurses_slk_set</item>\n      <item>ncurses_slk_touch</item>\n      <item>ncurses_standend</item>\n      <item>ncurses_standout</item>\n      <item>ncurses_start_color</item>\n      <item>ncurses_termattrs</item>\n      <item>ncurses_termname</item>\n      <item>ncurses_timeout</item>\n      <item>ncurses_top_panel</item>\n      <item>ncurses_typeahead</item>\n      <item>ncurses_ungetch</item>\n      <item>ncurses_ungetmouse</item>\n      <item>ncurses_update_panels</item>\n      <item>ncurses_use_default_colors</item>\n      <item>ncurses_use_env</item>\n      <item>ncurses_use_extended_names</item>\n      <item>ncurses_vidattr</item>\n      <item>ncurses_vline</item>\n      <item>ncurses_waddch</item>\n      <item>ncurses_waddstr</item>\n      <item>ncurses_wattroff</item>\n      <item>ncurses_wattron</item>\n      <item>ncurses_wattrset</item>\n      <item>ncurses_wborder</item>\n      <item>ncurses_wclear</item>\n      <item>ncurses_wcolor_set</item>\n      <item>ncurses_werase</item>\n      <item>ncurses_wgetch</item>\n      <item>ncurses_whline</item>\n      <item>ncurses_wmouse_trafo</item>\n      <item>ncurses_wmove</item>\n      <item>ncurses_wnoutrefresh</item>\n      <item>ncurses_wrefresh</item>\n      <item>ncurses_wstandend</item>\n      <item>ncurses_wstandout</item>\n      <item>ncurses_wvline</item>\n      <item>newt_bell</item>\n      <item>newt_button</item>\n      <item>newt_button_bar</item>\n      <item>newt_centered_window</item>\n      <item>newt_checkbox</item>\n      <item>newt_checkbox_get_value</item>\n      <item>newt_checkbox_set_flags</item>\n      <item>newt_checkbox_set_value</item>\n      <item>newt_checkbox_tree</item>\n      <item>newt_checkbox_tree_add_item</item>\n      <item>newt_checkbox_tree_find_item</item>\n      <item>newt_checkbox_tree_get_current</item>\n      <item>newt_checkbox_tree_get_entry_value</item>\n      <item>newt_checkbox_tree_get_multi_selection</item>\n      <item>newt_checkbox_tree_get_selection</item>\n      <item>newt_checkbox_tree_multi</item>\n      <item>newt_checkbox_tree_set_current</item>\n      <item>newt_checkbox_tree_set_entry</item>\n      <item>newt_checkbox_tree_set_entry_value</item>\n      <item>newt_checkbox_tree_set_width</item>\n      <item>newt_clear_key_buffer</item>\n      <item>newt_cls</item>\n      <item>newt_compact_button</item>\n      <item>newt_component_add_callback</item>\n      <item>newt_component_takes_focus</item>\n      <item>newt_create_grid</item>\n      <item>newt_cursor_off</item>\n      <item>newt_cursor_on</item>\n      <item>newt_delay</item>\n      <item>newt_draw_form</item>\n      <item>newt_draw_root_text</item>\n      <item>newt_entry</item>\n      <item>newt_entry_get_value</item>\n      <item>newt_entry_set</item>\n      <item>newt_entry_set_filter</item>\n      <item>newt_entry_set_flags</item>\n      <item>newt_finished</item>\n      <item>newt_form</item>\n      <item>newt_form_add_component</item>\n      <item>newt_form_add_components</item>\n      <item>newt_form_add_hot_key</item>\n      <item>newt_form_destroy</item>\n      <item>newt_form_get_current</item>\n      <item>newt_form_run</item>\n      <item>newt_form_set_background</item>\n      <item>newt_form_set_height</item>\n      <item>newt_form_set_size</item>\n      <item>newt_form_set_timer</item>\n      <item>newt_form_set_width</item>\n      <item>newt_form_watch_fd</item>\n      <item>newt_get_screen_size</item>\n      <item>newt_grid_add_components_to_form</item>\n      <item>newt_grid_basic_window</item>\n      <item>newt_grid_free</item>\n      <item>newt_grid_get_size</item>\n      <item>newt_grid_h_close_stacked</item>\n      <item>newt_grid_h_stacked</item>\n      <item>newt_grid_place</item>\n      <item>newt_grid_set_field</item>\n      <item>newt_grid_simple_window</item>\n      <item>newt_grid_v_close_stacked</item>\n      <item>newt_grid_v_stacked</item>\n      <item>newt_grid_wrapped_window</item>\n      <item>newt_grid_wrapped_window_at</item>\n      <item>newt_init</item>\n      <item>newt_label</item>\n      <item>newt_label_set_text</item>\n      <item>newt_listbox</item>\n      <item>newt_listbox_append_entry</item>\n      <item>newt_listbox_clear</item>\n      <item>newt_listbox_clear_selection</item>\n      <item>newt_listbox_delete_entry</item>\n      <item>newt_listbox_get_current</item>\n      <item>newt_listbox_get_selection</item>\n      <item>newt_listbox_insert_entry</item>\n      <item>newt_listbox_item_count</item>\n      <item>newt_listbox_select_item</item>\n      <item>newt_listbox_set_current</item>\n      <item>newt_listbox_set_current_by_key</item>\n      <item>newt_listbox_set_data</item>\n      <item>newt_listbox_set_entry</item>\n      <item>newt_listbox_set_width</item>\n      <item>newt_listitem</item>\n      <item>newt_listitem_get_data</item>\n      <item>newt_listitem_set</item>\n      <item>newt_open_window</item>\n      <item>newt_pop_help_line</item>\n      <item>newt_pop_window</item>\n      <item>newt_push_help_line</item>\n      <item>newt_radiobutton</item>\n      <item>newt_radio_get_current</item>\n      <item>newt_redraw_help_line</item>\n      <item>newt_reflow_text</item>\n      <item>newt_refresh</item>\n      <item>newt_resize_screen</item>\n      <item>newt_resume</item>\n      <item>newt_run_form</item>\n      <item>newt_scale</item>\n      <item>newt_scale_set</item>\n      <item>newt_scrollbar_set</item>\n      <item>newt_set_help_callback</item>\n      <item>newt_set_suspend_callback</item>\n      <item>newt_suspend</item>\n      <item>newt_textbox</item>\n      <item>newt_textbox_get_num_lines</item>\n      <item>newt_textbox_reflowed</item>\n      <item>newt_textbox_set_height</item>\n      <item>newt_textbox_set_text</item>\n      <item>newt_vertical_scrollbar</item>\n      <item>newt_wait_for_key</item>\n      <item>newt_win_choice</item>\n      <item>newt_win_entries</item>\n      <item>newt_win_menu</item>\n      <item>newt_win_message</item>\n      <item>newt_win_messagev</item>\n      <item>newt_win_ternary</item>\n      <item>next</item>\n      <item>ngettext</item>\n      <item>nl2br</item>\n      <item>nl_langinfo</item>\n      <item>normalizer_get_raw_decomposition</item>\n      <item>normalizer_is_normalized</item>\n      <item>normalizer_normalize</item>\n      <item>nsapi_request_headers</item>\n      <item>nsapi_response_headers</item>\n      <item>nsapi_virtual</item>\n      <item>number_format</item>\n      <item>numfmt_create</item>\n      <item>numfmt_format</item>\n      <item>numfmt_format_currency</item>\n      <item>numfmt_get_attribute</item>\n      <item>numfmt_get_error_code</item>\n      <item>numfmt_get_error_message</item>\n      <item>numfmt_get_locale</item>\n      <item>numfmt_get_pattern</item>\n      <item>numfmt_get_symbol</item>\n      <item>numfmt_get_text_attribute</item>\n      <item>numfmt_parse</item>\n      <item>numfmt_parse_currency</item>\n      <item>numfmt_set_attribute</item>\n      <item>numfmt_set_pattern</item>\n      <item>numfmt_set_symbol</item>\n      <item>numfmt_set_text_attribute</item>\n      <item>oauth_get_sbs</item>\n      <item>oauth_urlencode</item>\n      <item>ob_clean</item>\n      <item>ob_end_clean</item>\n      <item>ob_end_flush</item>\n      <item>ob_flush</item>\n      <item>ob_get_clean</item>\n      <item>ob_get_contents</item>\n      <item>ob_get_flush</item>\n      <item>ob_get_length</item>\n      <item>ob_get_level</item>\n      <item>ob_get_status</item>\n      <item>ob_gzhandler</item>\n      <item>ob_iconv_handler</item>\n      <item>ob_implicit_flush</item>\n      <item>ob_list_handlers</item>\n      <item>ob_start</item>\n      <item>ob_tidyhandler</item>\n      <item>oci_bind_array_by_name</item>\n      <item>oci_bind_by_name</item>\n      <item>oci_cancel</item>\n      <item>oci_client_version</item>\n      <item>oci_close</item>\n      <item>oci_commit</item>\n      <item>oci_connect</item>\n      <item>oci_define_by_name</item>\n      <item>oci_error</item>\n      <item>oci_execute</item>\n      <item>oci_fetch</item>\n      <item>oci_fetch_all</item>\n      <item>oci_fetch_array</item>\n      <item>oci_fetch_assoc</item>\n      <item>oci_fetch_object</item>\n      <item>oci_fetch_row</item>\n      <item>oci_field_is_null</item>\n      <item>oci_field_name</item>\n      <item>oci_field_precision</item>\n      <item>oci_field_scale</item>\n      <item>oci_field_size</item>\n      <item>oci_field_type</item>\n      <item>oci_field_type_raw</item>\n      <item>oci_free_descriptor</item>\n      <item>oci_free_statement</item>\n      <item>oci_get_implicit_resultset</item>\n      <item>oci_internal_debug</item>\n      <item>oci_lob_copy</item>\n      <item>oci_lob_is_equal</item>\n      <item>oci_new_collection</item>\n      <item>oci_new_connect</item>\n      <item>oci_new_cursor</item>\n      <item>oci_new_descriptor</item>\n      <item>oci_num_fields</item>\n      <item>oci_num_rows</item>\n      <item>oci_parse</item>\n      <item>oci_password_change</item>\n      <item>oci_pconnect</item>\n      <item>oci_register_taf_callback</item>\n      <item>oci_result</item>\n      <item>oci_rollback</item>\n      <item>oci_server_version</item>\n      <item>oci_set_action</item>\n      <item>oci_set_call_timeout</item>\n      <item>oci_set_client_identifier</item>\n      <item>oci_set_client_info</item>\n      <item>oci_set_db_operation</item>\n      <item>oci_set_edition</item>\n      <item>oci_set_module_name</item>\n      <item>oci_set_prefetch</item>\n      <item>oci_statement_type</item>\n      <item>oci_unregister_taf_callback</item>\n      <item>octdec</item>\n      <item>odbc_autocommit</item>\n      <item>odbc_binmode</item>\n      <item>odbc_close</item>\n      <item>odbc_close_all</item>\n      <item>odbc_columnprivileges</item>\n      <item>odbc_columns</item>\n      <item>odbc_commit</item>\n      <item>odbc_connect</item>\n      <item>odbc_cursor</item>\n      <item>odbc_data_source</item>\n      <item>odbc_do</item>\n      <item>odbc_error</item>\n      <item>odbc_errormsg</item>\n      <item>odbc_exec</item>\n      <item>odbc_execute</item>\n      <item>odbc_fetch_array</item>\n      <item>odbc_fetch_into</item>\n      <item>odbc_fetch_object</item>\n      <item>odbc_fetch_row</item>\n      <item>odbc_field_len</item>\n      <item>odbc_field_name</item>\n      <item>odbc_field_num</item>\n      <item>odbc_field_precision</item>\n      <item>odbc_field_scale</item>\n      <item>odbc_field_type</item>\n      <item>odbc_foreignkeys</item>\n      <item>odbc_free_result</item>\n      <item>odbc_gettypeinfo</item>\n      <item>odbc_longreadlen</item>\n      <item>odbc_next_result</item>\n      <item>odbc_num_fields</item>\n      <item>odbc_num_rows</item>\n      <item>odbc_pconnect</item>\n      <item>odbc_prepare</item>\n      <item>odbc_primarykeys</item>\n      <item>odbc_procedurecolumns</item>\n      <item>odbc_procedures</item>\n      <item>odbc_result</item>\n      <item>odbc_result_all</item>\n      <item>odbc_rollback</item>\n      <item>odbc_setoption</item>\n      <item>odbc_specialcolumns</item>\n      <item>odbc_statistics</item>\n      <item>odbc_tableprivileges</item>\n      <item>odbc_tables</item>\n      <item>opcache_compile_file</item>\n      <item>opcache_get_configuration</item>\n      <item>opcache_get_status</item>\n      <item>opcache_invalidate</item>\n      <item>opcache_is_script_cached</item>\n      <item>opcache_reset</item>\n      <item>openal_buffer_create</item>\n      <item>openal_buffer_data</item>\n      <item>openal_buffer_destroy</item>\n      <item>openal_buffer_get</item>\n      <item>openal_buffer_loadwav</item>\n      <item>openal_context_create</item>\n      <item>openal_context_current</item>\n      <item>openal_context_destroy</item>\n      <item>openal_context_process</item>\n      <item>openal_context_suspend</item>\n      <item>openal_device_close</item>\n      <item>openal_device_open</item>\n      <item>openal_listener_get</item>\n      <item>openal_listener_set</item>\n      <item>openal_source_create</item>\n      <item>openal_source_destroy</item>\n      <item>openal_source_get</item>\n      <item>openal_source_pause</item>\n      <item>openal_source_play</item>\n      <item>openal_source_rewind</item>\n      <item>openal_source_set</item>\n      <item>openal_source_stop</item>\n      <item>openal_stream</item>\n      <item>opendir</item>\n      <item>openlog</item>\n      <item>openssl_cipher_iv_length</item>\n      <item>openssl_csr_export</item>\n      <item>openssl_csr_export_to_file</item>\n      <item>openssl_csr_get_public_key</item>\n      <item>openssl_csr_get_subject</item>\n      <item>openssl_csr_new</item>\n      <item>openssl_csr_sign</item>\n      <item>openssl_decrypt</item>\n      <item>openssl_dh_compute_key</item>\n      <item>openssl_digest</item>\n      <item>openssl_encrypt</item>\n      <item>openssl_error_string</item>\n      <item>openssl_free_key</item>\n      <item>openssl_get_cert_locations</item>\n      <item>openssl_get_cipher_methods</item>\n      <item>openssl_get_curve_names</item>\n      <item>openssl_get_md_methods</item>\n      <item>openssl_get_privatekey</item>\n      <item>openssl_get_publickey</item>\n      <item>openssl_open</item>\n      <item>openssl_pbkdf2</item>\n      <item>openssl_pkcs7_decrypt</item>\n      <item>openssl_pkcs7_encrypt</item>\n      <item>openssl_pkcs7_read</item>\n      <item>openssl_pkcs7_sign</item>\n      <item>openssl_pkcs7_verify</item>\n      <item>openssl_pkcs12_export</item>\n      <item>openssl_pkcs12_export_to_file</item>\n      <item>openssl_pkcs12_read</item>\n      <item>openssl_pkey_export</item>\n      <item>openssl_pkey_export_to_file</item>\n      <item>openssl_pkey_free</item>\n      <item>openssl_pkey_get_details</item>\n      <item>openssl_pkey_get_private</item>\n      <item>openssl_pkey_get_public</item>\n      <item>openssl_pkey_new</item>\n      <item>openssl_private_decrypt</item>\n      <item>openssl_private_encrypt</item>\n      <item>openssl_public_decrypt</item>\n      <item>openssl_public_encrypt</item>\n      <item>openssl_random_pseudo_bytes</item>\n      <item>openssl_seal</item>\n      <item>openssl_sign</item>\n      <item>openssl_spki_export</item>\n      <item>openssl_spki_export_challenge</item>\n      <item>openssl_spki_new</item>\n      <item>openssl_spki_verify</item>\n      <item>openssl_verify</item>\n      <item>openssl_x509_checkpurpose</item>\n      <item>openssl_x509_check_private_key</item>\n      <item>openssl_x509_export</item>\n      <item>openssl_x509_export_to_file</item>\n      <item>openssl_x509_fingerprint</item>\n      <item>openssl_x509_free</item>\n      <item>openssl_x509_parse</item>\n      <item>openssl_x509_read</item>\n      <item>ord</item>\n      <item>output_add_rewrite_var</item>\n      <item>output_reset_rewrite_vars</item>\n      <item>override_function</item>\n      <item>pack</item>\n      <item>parsekit_compile_file</item>\n      <item>parsekit_compile_string</item>\n      <item>parsekit_func_arginfo</item>\n      <item>parse_ini_file</item>\n      <item>parse_ini_string</item>\n      <item>parse_str</item>\n      <item>parse_url</item>\n      <item>passthru</item>\n      <item>password_get_info</item>\n      <item>password_hash</item>\n      <item>password_needs_rehash</item>\n      <item>password_verify</item>\n      <item>pathinfo</item>\n      <item>pclose</item>\n      <item>pcntl_alarm</item>\n      <item>pcntl_async_signals</item>\n      <item>pcntl_errno</item>\n      <item>pcntl_exec</item>\n      <item>pcntl_fork</item>\n      <item>pcntl_getpriority</item>\n      <item>pcntl_get_last_error</item>\n      <item>pcntl_setpriority</item>\n      <item>pcntl_signal</item>\n      <item>pcntl_signal_dispatch</item>\n      <item>pcntl_signal_get_handler</item>\n      <item>pcntl_sigprocmask</item>\n      <item>pcntl_sigtimedwait</item>\n      <item>pcntl_sigwaitinfo</item>\n      <item>pcntl_strerror</item>\n      <item>pcntl_wait</item>\n      <item>pcntl_waitpid</item>\n      <item>pcntl_wexitstatus</item>\n      <item>pcntl_wifexited</item>\n      <item>pcntl_wifsignaled</item>\n      <item>pcntl_wifstopped</item>\n      <item>pcntl_wstopsig</item>\n      <item>pcntl_wtermsig</item>\n      <item>pdf_activate_item</item>\n      <item>pdf_add_launchlink</item>\n      <item>pdf_add_locallink</item>\n      <item>pdf_add_nameddest</item>\n      <item>pdf_add_note</item>\n      <item>pdf_add_pdflink</item>\n      <item>pdf_add_table_cell</item>\n      <item>pdf_add_textflow</item>\n      <item>pdf_add_thumbnail</item>\n      <item>pdf_add_weblink</item>\n      <item>pdf_arc</item>\n      <item>pdf_arcn</item>\n      <item>pdf_attach_file</item>\n      <item>pdf_begin_document</item>\n      <item>pdf_begin_font</item>\n      <item>pdf_begin_glyph</item>\n      <item>pdf_begin_item</item>\n      <item>pdf_begin_layer</item>\n      <item>pdf_begin_page</item>\n      <item>pdf_begin_page_ext</item>\n      <item>pdf_begin_pattern</item>\n      <item>pdf_begin_template</item>\n      <item>pdf_begin_template_ext</item>\n      <item>pdf_circle</item>\n      <item>pdf_clip</item>\n      <item>pdf_close</item>\n      <item>pdf_closepath</item>\n      <item>pdf_closepath_fill_stroke</item>\n      <item>pdf_closepath_stroke</item>\n      <item>pdf_close_image</item>\n      <item>pdf_close_pdi</item>\n      <item>pdf_close_pdi_page</item>\n      <item>pdf_concat</item>\n      <item>pdf_continue_text</item>\n      <item>pdf_create_3dview</item>\n      <item>pdf_create_action</item>\n      <item>pdf_create_annotation</item>\n      <item>pdf_create_bookmark</item>\n      <item>pdf_create_field</item>\n      <item>pdf_create_fieldgroup</item>\n      <item>pdf_create_gstate</item>\n      <item>pdf_create_pvf</item>\n      <item>pdf_create_textflow</item>\n      <item>pdf_curveto</item>\n      <item>pdf_define_layer</item>\n      <item>pdf_delete</item>\n      <item>pdf_delete_pvf</item>\n      <item>pdf_delete_table</item>\n      <item>pdf_delete_textflow</item>\n      <item>pdf_encoding_set_char</item>\n      <item>pdf_endpath</item>\n      <item>pdf_end_document</item>\n      <item>pdf_end_font</item>\n      <item>pdf_end_glyph</item>\n      <item>pdf_end_item</item>\n      <item>pdf_end_layer</item>\n      <item>pdf_end_page</item>\n      <item>pdf_end_page_ext</item>\n      <item>pdf_end_pattern</item>\n      <item>pdf_end_template</item>\n      <item>pdf_fill</item>\n      <item>pdf_fill_imageblock</item>\n      <item>pdf_fill_pdfblock</item>\n      <item>pdf_fill_stroke</item>\n      <item>pdf_fill_textblock</item>\n      <item>pdf_findfont</item>\n      <item>pdf_fit_image</item>\n      <item>pdf_fit_pdi_page</item>\n      <item>pdf_fit_table</item>\n      <item>pdf_fit_textflow</item>\n      <item>pdf_fit_textline</item>\n      <item>pdf_get_apiname</item>\n      <item>pdf_get_buffer</item>\n      <item>pdf_get_errmsg</item>\n      <item>pdf_get_errnum</item>\n      <item>pdf_get_majorversion</item>\n      <item>pdf_get_minorversion</item>\n      <item>pdf_get_parameter</item>\n      <item>pdf_get_pdi_parameter</item>\n      <item>pdf_get_pdi_value</item>\n      <item>pdf_get_value</item>\n      <item>pdf_info_font</item>\n      <item>pdf_info_matchbox</item>\n      <item>pdf_info_table</item>\n      <item>pdf_info_textflow</item>\n      <item>pdf_info_textline</item>\n      <item>pdf_initgraphics</item>\n      <item>pdf_lineto</item>\n      <item>pdf_load_3ddata</item>\n      <item>pdf_load_font</item>\n      <item>pdf_load_iccprofile</item>\n      <item>pdf_load_image</item>\n      <item>pdf_makespotcolor</item>\n      <item>pdf_moveto</item>\n      <item>pdf_new</item>\n      <item>pdf_open_ccitt</item>\n      <item>pdf_open_file</item>\n      <item>pdf_open_image</item>\n      <item>pdf_open_image_file</item>\n      <item>pdf_open_memory_image</item>\n      <item>pdf_open_pdi</item>\n      <item>pdf_open_pdi_document</item>\n      <item>pdf_open_pdi_page</item>\n      <item>pdf_pcos_get_number</item>\n      <item>pdf_pcos_get_stream</item>\n      <item>pdf_pcos_get_string</item>\n      <item>pdf_place_image</item>\n      <item>pdf_place_pdi_page</item>\n      <item>pdf_process_pdi</item>\n      <item>pdf_rect</item>\n      <item>pdf_restore</item>\n      <item>pdf_resume_page</item>\n      <item>pdf_rotate</item>\n      <item>pdf_save</item>\n      <item>pdf_scale</item>\n      <item>pdf_setcolor</item>\n      <item>pdf_setdash</item>\n      <item>pdf_setdashpattern</item>\n      <item>pdf_setflat</item>\n      <item>pdf_setfont</item>\n      <item>pdf_setgray</item>\n      <item>pdf_setgray_fill</item>\n      <item>pdf_setgray_stroke</item>\n      <item>pdf_setlinecap</item>\n      <item>pdf_setlinejoin</item>\n      <item>pdf_setlinewidth</item>\n      <item>pdf_setmatrix</item>\n      <item>pdf_setmiterlimit</item>\n      <item>pdf_setrgbcolor</item>\n      <item>pdf_setrgbcolor_fill</item>\n      <item>pdf_setrgbcolor_stroke</item>\n      <item>pdf_set_border_color</item>\n      <item>pdf_set_border_dash</item>\n      <item>pdf_set_border_style</item>\n      <item>pdf_set_gstate</item>\n      <item>pdf_set_info</item>\n      <item>pdf_set_layer_dependency</item>\n      <item>pdf_set_parameter</item>\n      <item>pdf_set_text_pos</item>\n      <item>pdf_set_value</item>\n      <item>pdf_shading</item>\n      <item>pdf_shading_pattern</item>\n      <item>pdf_shfill</item>\n      <item>pdf_show</item>\n      <item>pdf_show_boxed</item>\n      <item>pdf_show_xy</item>\n      <item>pdf_skew</item>\n      <item>pdf_stringwidth</item>\n      <item>pdf_stroke</item>\n      <item>pdf_suspend_page</item>\n      <item>pdf_translate</item>\n      <item>pdf_utf8_to_utf16</item>\n      <item>pdf_utf16_to_utf8</item>\n      <item>pdf_utf32_to_utf16</item>\n      <item>pdo_drivers</item>\n      <item>pfsockopen</item>\n      <item>pg_affected_rows</item>\n      <item>pg_cancel_query</item>\n      <item>pg_client_encoding</item>\n      <item>pg_close</item>\n      <item>pg_connect</item>\n      <item>pg_connection_busy</item>\n      <item>pg_connection_reset</item>\n      <item>pg_connection_status</item>\n      <item>pg_connect_poll</item>\n      <item>pg_consume_input</item>\n      <item>pg_convert</item>\n      <item>pg_copy_from</item>\n      <item>pg_copy_to</item>\n      <item>pg_dbname</item>\n      <item>pg_delete</item>\n      <item>pg_end_copy</item>\n      <item>pg_escape_bytea</item>\n      <item>pg_escape_identifier</item>\n      <item>pg_escape_literal</item>\n      <item>pg_escape_string</item>\n      <item>pg_execute</item>\n      <item>pg_fetch_all</item>\n      <item>pg_fetch_all_columns</item>\n      <item>pg_fetch_array</item>\n      <item>pg_fetch_assoc</item>\n      <item>pg_fetch_object</item>\n      <item>pg_fetch_result</item>\n      <item>pg_fetch_row</item>\n      <item>pg_field_is_null</item>\n      <item>pg_field_name</item>\n      <item>pg_field_num</item>\n      <item>pg_field_prtlen</item>\n      <item>pg_field_size</item>\n      <item>pg_field_table</item>\n      <item>pg_field_type</item>\n      <item>pg_field_type_oid</item>\n      <item>pg_flush</item>\n      <item>pg_free_result</item>\n      <item>pg_get_notify</item>\n      <item>pg_get_pid</item>\n      <item>pg_get_result</item>\n      <item>pg_host</item>\n      <item>pg_insert</item>\n      <item>pg_last_error</item>\n      <item>pg_last_notice</item>\n      <item>pg_last_oid</item>\n      <item>pg_lo_close</item>\n      <item>pg_lo_create</item>\n      <item>pg_lo_export</item>\n      <item>pg_lo_import</item>\n      <item>pg_lo_open</item>\n      <item>pg_lo_read</item>\n      <item>pg_lo_read_all</item>\n      <item>pg_lo_seek</item>\n      <item>pg_lo_tell</item>\n      <item>pg_lo_truncate</item>\n      <item>pg_lo_unlink</item>\n      <item>pg_lo_write</item>\n      <item>pg_meta_data</item>\n      <item>pg_num_fields</item>\n      <item>pg_num_rows</item>\n      <item>pg_options</item>\n      <item>pg_parameter_status</item>\n      <item>pg_pconnect</item>\n      <item>pg_ping</item>\n      <item>pg_port</item>\n      <item>pg_prepare</item>\n      <item>pg_put_line</item>\n      <item>pg_query</item>\n      <item>pg_query_params</item>\n      <item>pg_result_error</item>\n      <item>pg_result_error_field</item>\n      <item>pg_result_seek</item>\n      <item>pg_result_status</item>\n      <item>pg_select</item>\n      <item>pg_send_execute</item>\n      <item>pg_send_prepare</item>\n      <item>pg_send_query</item>\n      <item>pg_send_query_params</item>\n      <item>pg_set_client_encoding</item>\n      <item>pg_set_error_verbosity</item>\n      <item>pg_socket</item>\n      <item>pg_trace</item>\n      <item>pg_transaction_status</item>\n      <item>pg_tty</item>\n      <item>pg_unescape_bytea</item>\n      <item>pg_untrace</item>\n      <item>pg_update</item>\n      <item>pg_version</item>\n      <item>phpcredits</item>\n      <item>phpdbg_break_file</item>\n      <item>phpdbg_break_function</item>\n      <item>phpdbg_break_method</item>\n      <item>phpdbg_break_next</item>\n      <item>phpdbg_clear</item>\n      <item>phpdbg_color</item>\n      <item>phpdbg_end_oplog</item>\n      <item>phpdbg_exec</item>\n      <item>phpdbg_get_executable</item>\n      <item>phpdbg_prompt</item>\n      <item>phpdbg_start_oplog</item>\n      <item>phpinfo</item>\n      <item>phpversion</item>\n      <item>php_ini_loaded_file</item>\n      <item>php_ini_scanned_files</item>\n      <item>php_logo_guid</item>\n      <item>php_sapi_name</item>\n      <item>php_strip_whitespace</item>\n      <item>php_uname</item>\n      <item>pi</item>\n      <item>popen</item>\n      <item>pos</item>\n      <item>posix_access</item>\n      <item>posix_ctermid</item>\n      <item>posix_errno</item>\n      <item>posix_getcwd</item>\n      <item>posix_getegid</item>\n      <item>posix_geteuid</item>\n      <item>posix_getgid</item>\n      <item>posix_getgrgid</item>\n      <item>posix_getgrnam</item>\n      <item>posix_getgroups</item>\n      <item>posix_getlogin</item>\n      <item>posix_getpgid</item>\n      <item>posix_getpgrp</item>\n      <item>posix_getpid</item>\n      <item>posix_getppid</item>\n      <item>posix_getpwnam</item>\n      <item>posix_getpwuid</item>\n      <item>posix_getrlimit</item>\n      <item>posix_getsid</item>\n      <item>posix_getuid</item>\n      <item>posix_get_last_error</item>\n      <item>posix_initgroups</item>\n      <item>posix_isatty</item>\n      <item>posix_kill</item>\n      <item>posix_mkfifo</item>\n      <item>posix_mknod</item>\n      <item>posix_setegid</item>\n      <item>posix_seteuid</item>\n      <item>posix_setgid</item>\n      <item>posix_setpgid</item>\n      <item>posix_setrlimit</item>\n      <item>posix_setsid</item>\n      <item>posix_setuid</item>\n      <item>posix_strerror</item>\n      <item>posix_times</item>\n      <item>posix_ttyname</item>\n      <item>posix_uname</item>\n      <item>pow</item>\n      <item>preg_filter</item>\n      <item>preg_grep</item>\n      <item>preg_last_error</item>\n      <item>preg_match</item>\n      <item>preg_match_all</item>\n      <item>preg_quote</item>\n      <item>preg_replace</item>\n      <item>preg_replace_callback</item>\n      <item>preg_replace_callback_array</item>\n      <item>preg_split</item>\n      <item>prev</item>\n      <item>printf</item>\n      <item>print_r</item>\n      <item>proc_close</item>\n      <item>proc_get_status</item>\n      <item>proc_nice</item>\n      <item>proc_open</item>\n      <item>proc_terminate</item>\n      <item>property_exists</item>\n      <item>pspell_add_to_personal</item>\n      <item>pspell_add_to_session</item>\n      <item>pspell_check</item>\n      <item>pspell_clear_session</item>\n      <item>pspell_config_create</item>\n      <item>pspell_config_data_dir</item>\n      <item>pspell_config_dict_dir</item>\n      <item>pspell_config_ignore</item>\n      <item>pspell_config_mode</item>\n      <item>pspell_config_personal</item>\n      <item>pspell_config_repl</item>\n      <item>pspell_config_runtogether</item>\n      <item>pspell_config_save_repl</item>\n      <item>pspell_new</item>\n      <item>pspell_new_config</item>\n      <item>pspell_new_personal</item>\n      <item>pspell_save_wordlist</item>\n      <item>pspell_store_replacement</item>\n      <item>pspell_suggest</item>\n      <item>ps_add_bookmark</item>\n      <item>ps_add_launchlink</item>\n      <item>ps_add_locallink</item>\n      <item>ps_add_note</item>\n      <item>ps_add_pdflink</item>\n      <item>ps_add_weblink</item>\n      <item>ps_arc</item>\n      <item>ps_arcn</item>\n      <item>ps_begin_page</item>\n      <item>ps_begin_pattern</item>\n      <item>ps_begin_template</item>\n      <item>ps_circle</item>\n      <item>ps_clip</item>\n      <item>ps_close</item>\n      <item>ps_closepath</item>\n      <item>ps_closepath_stroke</item>\n      <item>ps_close_image</item>\n      <item>ps_continue_text</item>\n      <item>ps_curveto</item>\n      <item>ps_delete</item>\n      <item>ps_end_page</item>\n      <item>ps_end_pattern</item>\n      <item>ps_end_template</item>\n      <item>ps_fill</item>\n      <item>ps_fill_stroke</item>\n      <item>ps_findfont</item>\n      <item>ps_get_buffer</item>\n      <item>ps_get_parameter</item>\n      <item>ps_get_value</item>\n      <item>ps_hyphenate</item>\n      <item>ps_include_file</item>\n      <item>ps_lineto</item>\n      <item>ps_makespotcolor</item>\n      <item>ps_moveto</item>\n      <item>ps_new</item>\n      <item>ps_open_file</item>\n      <item>ps_open_image</item>\n      <item>ps_open_image_file</item>\n      <item>ps_open_memory_image</item>\n      <item>ps_place_image</item>\n      <item>ps_rect</item>\n      <item>ps_restore</item>\n      <item>ps_rotate</item>\n      <item>ps_save</item>\n      <item>ps_scale</item>\n      <item>ps_setcolor</item>\n      <item>ps_setdash</item>\n      <item>ps_setflat</item>\n      <item>ps_setfont</item>\n      <item>ps_setgray</item>\n      <item>ps_setlinecap</item>\n      <item>ps_setlinejoin</item>\n      <item>ps_setlinewidth</item>\n      <item>ps_setmiterlimit</item>\n      <item>ps_setoverprintmode</item>\n      <item>ps_setpolydash</item>\n      <item>ps_set_border_color</item>\n      <item>ps_set_border_dash</item>\n      <item>ps_set_border_style</item>\n      <item>ps_set_info</item>\n      <item>ps_set_parameter</item>\n      <item>ps_set_text_pos</item>\n      <item>ps_set_value</item>\n      <item>ps_shading</item>\n      <item>ps_shading_pattern</item>\n      <item>ps_shfill</item>\n      <item>ps_show</item>\n      <item>ps_show2</item>\n      <item>ps_show_boxed</item>\n      <item>ps_show_xy</item>\n      <item>ps_show_xy2</item>\n      <item>ps_stringwidth</item>\n      <item>ps_string_geometry</item>\n      <item>ps_stroke</item>\n      <item>ps_symbol</item>\n      <item>ps_symbol_name</item>\n      <item>ps_symbol_width</item>\n      <item>ps_translate</item>\n      <item>putenv</item>\n      <item>px_close</item>\n      <item>px_create_fp</item>\n      <item>px_date2string</item>\n      <item>px_delete</item>\n      <item>px_delete_record</item>\n      <item>px_get_field</item>\n      <item>px_get_info</item>\n      <item>px_get_parameter</item>\n      <item>px_get_record</item>\n      <item>px_get_schema</item>\n      <item>px_get_value</item>\n      <item>px_insert_record</item>\n      <item>px_new</item>\n      <item>px_numfields</item>\n      <item>px_numrecords</item>\n      <item>px_open_fp</item>\n      <item>px_put_record</item>\n      <item>px_retrieve_record</item>\n      <item>px_set_blob_file</item>\n      <item>px_set_parameter</item>\n      <item>px_set_tablename</item>\n      <item>px_set_targetencoding</item>\n      <item>px_set_value</item>\n      <item>px_timestamp2string</item>\n      <item>px_update_record</item>\n      <item>quoted_printable_decode</item>\n      <item>quoted_printable_encode</item>\n      <item>quotemeta</item>\n      <item>rad2deg</item>\n      <item>radius_acct_open</item>\n      <item>radius_add_server</item>\n      <item>radius_auth_open</item>\n      <item>radius_close</item>\n      <item>radius_config</item>\n      <item>radius_create_request</item>\n      <item>radius_cvt_addr</item>\n      <item>radius_cvt_int</item>\n      <item>radius_cvt_string</item>\n      <item>radius_demangle</item>\n      <item>radius_demangle_mppe_key</item>\n      <item>radius_get_attr</item>\n      <item>radius_get_tagged_attr_data</item>\n      <item>radius_get_tagged_attr_tag</item>\n      <item>radius_get_vendor_attr</item>\n      <item>radius_put_addr</item>\n      <item>radius_put_attr</item>\n      <item>radius_put_int</item>\n      <item>radius_put_string</item>\n      <item>radius_put_vendor_addr</item>\n      <item>radius_put_vendor_attr</item>\n      <item>radius_put_vendor_int</item>\n      <item>radius_put_vendor_string</item>\n      <item>radius_request_authenticator</item>\n      <item>radius_salt_encrypt_attr</item>\n      <item>radius_send_request</item>\n      <item>radius_server_secret</item>\n      <item>radius_strerror</item>\n      <item>rand</item>\n      <item>random_bytes</item>\n      <item>random_int</item>\n      <item>range</item>\n      <item>rar_allow_broken_set</item>\n      <item>rar_broken_is</item>\n      <item>rar_close</item>\n      <item>rar_comment_get</item>\n      <item>rar_entry_get</item>\n      <item>rar_list</item>\n      <item>rar_open</item>\n      <item>rar_solid_is</item>\n      <item>rar_wrapper_cache_stats</item>\n      <item>rawurldecode</item>\n      <item>rawurlencode</item>\n      <item>readdir</item>\n      <item>readfile</item>\n      <item>readgzfile</item>\n      <item>readline</item>\n      <item>readline_add_history</item>\n      <item>readline_callback_handler_install</item>\n      <item>readline_callback_handler_remove</item>\n      <item>readline_callback_read_char</item>\n      <item>readline_clear_history</item>\n      <item>readline_completion_function</item>\n      <item>readline_info</item>\n      <item>readline_list_history</item>\n      <item>readline_on_new_line</item>\n      <item>readline_read_history</item>\n      <item>readline_redisplay</item>\n      <item>readline_write_history</item>\n      <item>readlink</item>\n      <item>realpath</item>\n      <item>realpath_cache_get</item>\n      <item>realpath_cache_size</item>\n      <item>recode</item>\n      <item>recode_file</item>\n      <item>recode_string</item>\n      <item>register_shutdown_function</item>\n      <item>register_tick_function</item>\n      <item>rename</item>\n      <item>rename_function</item>\n      <item>reset</item>\n      <item>resourcebundle_count</item>\n      <item>resourcebundle_create</item>\n      <item>resourcebundle_get</item>\n      <item>resourcebundle_get_error_code</item>\n      <item>resourcebundle_get_error_message</item>\n      <item>resourcebundle_locales</item>\n      <item>restore_error_handler</item>\n      <item>restore_exception_handler</item>\n      <item>restore_include_path</item>\n      <item>rewind</item>\n      <item>rewinddir</item>\n      <item>rmdir</item>\n      <item>round</item>\n      <item>rpm_close</item>\n      <item>rpm_get_tag</item>\n      <item>rpm_is_valid</item>\n      <item>rpm_open</item>\n      <item>rpm_version</item>\n      <item>rrdc_disconnect</item>\n      <item>rrd_create</item>\n      <item>rrd_error</item>\n      <item>rrd_fetch</item>\n      <item>rrd_first</item>\n      <item>rrd_graph</item>\n      <item>rrd_info</item>\n      <item>rrd_last</item>\n      <item>rrd_lastupdate</item>\n      <item>rrd_restore</item>\n      <item>rrd_tune</item>\n      <item>rrd_update</item>\n      <item>rrd_version</item>\n      <item>rrd_xport</item>\n      <item>rsort</item>\n      <item>rtrim</item>\n      <item>runkit_class_adopt</item>\n      <item>runkit_class_emancipate</item>\n      <item>runkit_constant_add</item>\n      <item>runkit_constant_redefine</item>\n      <item>runkit_constant_remove</item>\n      <item>runkit_function_add</item>\n      <item>runkit_function_copy</item>\n      <item>runkit_function_redefine</item>\n      <item>runkit_function_remove</item>\n      <item>runkit_function_rename</item>\n      <item>runkit_import</item>\n      <item>runkit_lint</item>\n      <item>runkit_lint_file</item>\n      <item>runkit_method_add</item>\n      <item>runkit_method_copy</item>\n      <item>runkit_method_redefine</item>\n      <item>runkit_method_remove</item>\n      <item>runkit_method_rename</item>\n      <item>runkit_return_value_used</item>\n      <item>runkit_sandbox_output_handler</item>\n      <item>runkit_superglobals</item>\n      <item>sapi_windows_cp_conv</item>\n      <item>sapi_windows_cp_get</item>\n      <item>sapi_windows_cp_is_utf8</item>\n      <item>sapi_windows_cp_set</item>\n      <item>sapi_windows_vt100_support</item>\n      <item>scandir</item>\n      <item>seaslog_get_author</item>\n      <item>seaslog_get_version</item>\n      <item>sem_acquire</item>\n      <item>sem_get</item>\n      <item>sem_release</item>\n      <item>sem_remove</item>\n      <item>serialize</item>\n      <item>session_abort</item>\n      <item>session_cache_expire</item>\n      <item>session_cache_limiter</item>\n      <item>session_commit</item>\n      <item>session_create_id</item>\n      <item>session_decode</item>\n      <item>session_destroy</item>\n      <item>session_encode</item>\n      <item>session_gc</item>\n      <item>session_get_cookie_params</item>\n      <item>session_id</item>\n      <item>session_module_name</item>\n      <item>session_name</item>\n      <item>session_pgsql_add_error</item>\n      <item>session_pgsql_get_error</item>\n      <item>session_pgsql_get_field</item>\n      <item>session_pgsql_reset</item>\n      <item>session_pgsql_set_field</item>\n      <item>session_pgsql_status</item>\n      <item>session_regenerate_id</item>\n      <item>session_register_shutdown</item>\n      <item>session_reset</item>\n      <item>session_save_path</item>\n      <item>session_set_cookie_params</item>\n      <item>session_set_save_handler</item>\n      <item>session_start</item>\n      <item>session_status</item>\n      <item>session_unset</item>\n      <item>session_write_close</item>\n      <item>setcookie</item>\n      <item>setleftfill</item>\n      <item>setline</item>\n      <item>setlocale</item>\n      <item>setproctitle</item>\n      <item>setrawcookie</item>\n      <item>setrightfill</item>\n      <item>setthreadtitle</item>\n      <item>settype</item>\n      <item>set_error_handler</item>\n      <item>set_exception_handler</item>\n      <item>set_include_path</item>\n      <item>set_time_limit</item>\n      <item>sha1</item>\n      <item>sha1_file</item>\n      <item>sha256</item>\n      <item>sha256_file</item>\n      <item>shell_exec</item>\n      <item>shmop_close</item>\n      <item>shmop_delete</item>\n      <item>shmop_open</item>\n      <item>shmop_read</item>\n      <item>shmop_size</item>\n      <item>shmop_write</item>\n      <item>shm_attach</item>\n      <item>shm_detach</item>\n      <item>shm_get_var</item>\n      <item>shm_has_var</item>\n      <item>shm_put_var</item>\n      <item>shm_remove</item>\n      <item>shm_remove_var</item>\n      <item>show_source</item>\n      <item>shuffle</item>\n      <item>similar_text</item>\n      <item>simplexml_import_dom</item>\n      <item>simplexml_load_file</item>\n      <item>simplexml_load_string</item>\n      <item>sin</item>\n      <item>sinh</item>\n      <item>sizeof</item>\n      <item>sleep</item>\n      <item>snmp2_get</item>\n      <item>snmp2_getnext</item>\n      <item>snmp2_real_walk</item>\n      <item>snmp2_set</item>\n      <item>snmp2_walk</item>\n      <item>snmp3_get</item>\n      <item>snmp3_getnext</item>\n      <item>snmp3_real_walk</item>\n      <item>snmp3_set</item>\n      <item>snmp3_walk</item>\n      <item>snmpget</item>\n      <item>snmpgetnext</item>\n      <item>snmprealwalk</item>\n      <item>snmpset</item>\n      <item>snmpwalk</item>\n      <item>snmpwalkoid</item>\n      <item>snmp_get_quick_print</item>\n      <item>snmp_get_valueretrieval</item>\n      <item>snmp_read_mib</item>\n      <item>snmp_set_enum_print</item>\n      <item>snmp_set_oid_numeric_print</item>\n      <item>snmp_set_oid_output_format</item>\n      <item>snmp_set_quick_print</item>\n      <item>snmp_set_valueretrieval</item>\n      <item>socket_accept</item>\n      <item>socket_addrinfo_bind</item>\n      <item>socket_addrinfo_connect</item>\n      <item>socket_addrinfo_explain</item>\n      <item>socket_addrinfo_lookup</item>\n      <item>socket_bind</item>\n      <item>socket_clear_error</item>\n      <item>socket_close</item>\n      <item>socket_cmsg_space</item>\n      <item>socket_connect</item>\n      <item>socket_create</item>\n      <item>socket_create_listen</item>\n      <item>socket_create_pair</item>\n      <item>socket_export_stream</item>\n      <item>socket_getopt</item>\n      <item>socket_getpeername</item>\n      <item>socket_getsockname</item>\n      <item>socket_get_option</item>\n      <item>socket_import_stream</item>\n      <item>socket_last_error</item>\n      <item>socket_listen</item>\n      <item>socket_read</item>\n      <item>socket_recv</item>\n      <item>socket_recvfrom</item>\n      <item>socket_recvmsg</item>\n      <item>socket_select</item>\n      <item>socket_send</item>\n      <item>socket_sendmsg</item>\n      <item>socket_sendto</item>\n      <item>socket_setopt</item>\n      <item>socket_set_block</item>\n      <item>socket_set_nonblock</item>\n      <item>socket_set_option</item>\n      <item>socket_shutdown</item>\n      <item>socket_strerror</item>\n      <item>socket_write</item>\n      <item>sodium_add</item>\n      <item>sodium_base642bin</item>\n      <item>sodium_bin2base64</item>\n      <item>sodium_bin2hex</item>\n      <item>sodium_compare</item>\n      <item>sodium_crypto_aead_aes256gcm_decrypt</item>\n      <item>sodium_crypto_aead_aes256gcm_encrypt</item>\n      <item>sodium_crypto_aead_aes256gcm_is_available</item>\n      <item>sodium_crypto_aead_aes256gcm_keygen</item>\n      <item>sodium_crypto_aead_chacha20poly1305_decrypt</item>\n      <item>sodium_crypto_aead_chacha20poly1305_encrypt</item>\n      <item>sodium_crypto_aead_chacha20poly1305_ietf_decrypt</item>\n      <item>sodium_crypto_aead_chacha20poly1305_ietf_encrypt</item>\n      <item>sodium_crypto_aead_chacha20poly1305_ietf_keygen</item>\n      <item>sodium_crypto_aead_chacha20poly1305_keygen</item>\n      <item>sodium_crypto_aead_xchacha20poly1305_ietf_decrypt</item>\n      <item>sodium_crypto_aead_xchacha20poly1305_ietf_encrypt</item>\n      <item>sodium_crypto_aead_xchacha20poly1305_ietf_keygen</item>\n      <item>sodium_crypto_auth</item>\n      <item>sodium_crypto_auth_keygen</item>\n      <item>sodium_crypto_auth_verify</item>\n      <item>sodium_crypto_box</item>\n      <item>sodium_crypto_box_keypair</item>\n      <item>sodium_crypto_box_keypair_from_secretkey_and_publickey</item>\n      <item>sodium_crypto_box_open</item>\n      <item>sodium_crypto_box_publickey</item>\n      <item>sodium_crypto_box_publickey_from_secretkey</item>\n      <item>sodium_crypto_box_seal</item>\n      <item>sodium_crypto_box_seal_open</item>\n      <item>sodium_crypto_box_secretkey</item>\n      <item>sodium_crypto_box_seed_keypair</item>\n      <item>sodium_crypto_generichash</item>\n      <item>sodium_crypto_generichash_final</item>\n      <item>sodium_crypto_generichash_init</item>\n      <item>sodium_crypto_generichash_keygen</item>\n      <item>sodium_crypto_generichash_update</item>\n      <item>sodium_crypto_kdf_derive_from_key</item>\n      <item>sodium_crypto_kdf_keygen</item>\n      <item>sodium_crypto_kx_client_session_keys</item>\n      <item>sodium_crypto_kx_keypair</item>\n      <item>sodium_crypto_kx_publickey</item>\n      <item>sodium_crypto_kx_secretkey</item>\n      <item>sodium_crypto_kx_seed_keypair</item>\n      <item>sodium_crypto_kx_server_session_keys</item>\n      <item>sodium_crypto_pwhash</item>\n      <item>sodium_crypto_pwhash_scryptsalsa208sha256</item>\n      <item>sodium_crypto_pwhash_scryptsalsa208sha256_str</item>\n      <item>sodium_crypto_pwhash_scryptsalsa208sha256_str_verify</item>\n      <item>sodium_crypto_pwhash_str</item>\n      <item>sodium_crypto_pwhash_str_needs_rehash</item>\n      <item>sodium_crypto_pwhash_str_verify</item>\n      <item>sodium_crypto_scalarmult</item>\n      <item>sodium_crypto_scalarmult_base</item>\n      <item>sodium_crypto_secretbox</item>\n      <item>sodium_crypto_secretbox_keygen</item>\n      <item>sodium_crypto_secretbox_open</item>\n      <item>sodium_crypto_secretstream_xchacha20poly1305_init_pull</item>\n      <item>sodium_crypto_secretstream_xchacha20poly1305_init_push</item>\n      <item>sodium_crypto_secretstream_xchacha20poly1305_keygen</item>\n      <item>sodium_crypto_secretstream_xchacha20poly1305_pull</item>\n      <item>sodium_crypto_secretstream_xchacha20poly1305_push</item>\n      <item>sodium_crypto_secretstream_xchacha20poly1305_rekey</item>\n      <item>sodium_crypto_shorthash</item>\n      <item>sodium_crypto_shorthash_keygen</item>\n      <item>sodium_crypto_sign</item>\n      <item>sodium_crypto_sign_detached</item>\n      <item>sodium_crypto_sign_ed25519_pk_to_curve25519</item>\n      <item>sodium_crypto_sign_ed25519_sk_to_curve25519</item>\n      <item>sodium_crypto_sign_keypair</item>\n      <item>sodium_crypto_sign_keypair_from_secretkey_and_publickey</item>\n      <item>sodium_crypto_sign_open</item>\n      <item>sodium_crypto_sign_publickey</item>\n      <item>sodium_crypto_sign_publickey_from_secretkey</item>\n      <item>sodium_crypto_sign_secretkey</item>\n      <item>sodium_crypto_sign_seed_keypair</item>\n      <item>sodium_crypto_sign_verify_detached</item>\n      <item>sodium_crypto_stream</item>\n      <item>sodium_crypto_stream_keygen</item>\n      <item>sodium_crypto_stream_xor</item>\n      <item>sodium_hex2bin</item>\n      <item>sodium_increment</item>\n      <item>sodium_memcmp</item>\n      <item>sodium_memzero</item>\n      <item>sodium_pad</item>\n      <item>sodium_unpad</item>\n      <item>solr_get_version</item>\n      <item>sort</item>\n      <item>soundex</item>\n      <item>spl_autoload</item>\n      <item>spl_autoload_call</item>\n      <item>spl_autoload_extensions</item>\n      <item>spl_autoload_functions</item>\n      <item>spl_autoload_register</item>\n      <item>spl_autoload_unregister</item>\n      <item>spl_classes</item>\n      <item>spl_object_hash</item>\n      <item>spl_object_id</item>\n      <item>sprintf</item>\n      <item>sqlite_array_query</item>\n      <item>sqlite_busy_timeout</item>\n      <item>sqlite_changes</item>\n      <item>sqlite_close</item>\n      <item>sqlite_column</item>\n      <item>sqlite_create_aggregate</item>\n      <item>sqlite_create_function</item>\n      <item>sqlite_current</item>\n      <item>sqlite_error_string</item>\n      <item>sqlite_escape_string</item>\n      <item>sqlite_exec</item>\n      <item>sqlite_factory</item>\n      <item>sqlite_fetch_all</item>\n      <item>sqlite_fetch_array</item>\n      <item>sqlite_fetch_column_types</item>\n      <item>sqlite_fetch_object</item>\n      <item>sqlite_fetch_single</item>\n      <item>sqlite_fetch_string</item>\n      <item>sqlite_field_name</item>\n      <item>sqlite_has_more</item>\n      <item>sqlite_has_prev</item>\n      <item>sqlite_last_error</item>\n      <item>sqlite_last_insert_rowid</item>\n      <item>sqlite_libencoding</item>\n      <item>sqlite_libversion</item>\n      <item>sqlite_next</item>\n      <item>sqlite_num_fields</item>\n      <item>sqlite_num_rows</item>\n      <item>sqlite_open</item>\n      <item>sqlite_popen</item>\n      <item>sqlite_prev</item>\n      <item>sqlite_query</item>\n      <item>sqlite_rewind</item>\n      <item>sqlite_seek</item>\n      <item>sqlite_single_query</item>\n      <item>sqlite_udf_decode_binary</item>\n      <item>sqlite_udf_encode_binary</item>\n      <item>sqlite_unbuffered_query</item>\n      <item>sqlite_valid</item>\n      <item>sqlsrv_begin_transaction</item>\n      <item>sqlsrv_cancel</item>\n      <item>sqlsrv_client_info</item>\n      <item>sqlsrv_close</item>\n      <item>sqlsrv_commit</item>\n      <item>sqlsrv_configure</item>\n      <item>sqlsrv_connect</item>\n      <item>sqlsrv_errors</item>\n      <item>sqlsrv_execute</item>\n      <item>sqlsrv_fetch</item>\n      <item>sqlsrv_fetch_array</item>\n      <item>sqlsrv_fetch_object</item>\n      <item>sqlsrv_field_metadata</item>\n      <item>sqlsrv_free_stmt</item>\n      <item>sqlsrv_get_config</item>\n      <item>sqlsrv_get_field</item>\n      <item>sqlsrv_has_rows</item>\n      <item>sqlsrv_next_result</item>\n      <item>sqlsrv_num_fields</item>\n      <item>sqlsrv_num_rows</item>\n      <item>sqlsrv_prepare</item>\n      <item>sqlsrv_query</item>\n      <item>sqlsrv_rollback</item>\n      <item>sqlsrv_rows_affected</item>\n      <item>sqlsrv_send_stream_data</item>\n      <item>sqlsrv_server_info</item>\n      <item>sqrt</item>\n      <item>srand</item>\n      <item>sscanf</item>\n      <item>ssdeep_fuzzy_compare</item>\n      <item>ssdeep_fuzzy_hash</item>\n      <item>ssdeep_fuzzy_hash_filename</item>\n      <item>ssh2_auth_agent</item>\n      <item>ssh2_auth_hostbased_file</item>\n      <item>ssh2_auth_none</item>\n      <item>ssh2_auth_password</item>\n      <item>ssh2_auth_pubkey_file</item>\n      <item>ssh2_connect</item>\n      <item>ssh2_disconnect</item>\n      <item>ssh2_exec</item>\n      <item>ssh2_fetch_stream</item>\n      <item>ssh2_fingerprint</item>\n      <item>ssh2_methods_negotiated</item>\n      <item>ssh2_publickey_add</item>\n      <item>ssh2_publickey_init</item>\n      <item>ssh2_publickey_list</item>\n      <item>ssh2_publickey_remove</item>\n      <item>ssh2_scp_recv</item>\n      <item>ssh2_scp_send</item>\n      <item>ssh2_sftp</item>\n      <item>ssh2_sftp_chmod</item>\n      <item>ssh2_sftp_lstat</item>\n      <item>ssh2_sftp_mkdir</item>\n      <item>ssh2_sftp_readlink</item>\n      <item>ssh2_sftp_realpath</item>\n      <item>ssh2_sftp_rename</item>\n      <item>ssh2_sftp_rmdir</item>\n      <item>ssh2_sftp_stat</item>\n      <item>ssh2_sftp_symlink</item>\n      <item>ssh2_sftp_unlink</item>\n      <item>ssh2_shell</item>\n      <item>ssh2_tunnel</item>\n      <item>stat</item>\n      <item>stats_absolute_deviation</item>\n      <item>stats_cdf_beta</item>\n      <item>stats_cdf_binomial</item>\n      <item>stats_cdf_cauchy</item>\n      <item>stats_cdf_chisquare</item>\n      <item>stats_cdf_exponential</item>\n      <item>stats_cdf_f</item>\n      <item>stats_cdf_gamma</item>\n      <item>stats_cdf_laplace</item>\n      <item>stats_cdf_logistic</item>\n      <item>stats_cdf_negative_binomial</item>\n      <item>stats_cdf_noncentral_chisquare</item>\n      <item>stats_cdf_noncentral_f</item>\n      <item>stats_cdf_noncentral_t</item>\n      <item>stats_cdf_normal</item>\n      <item>stats_cdf_poisson</item>\n      <item>stats_cdf_t</item>\n      <item>stats_cdf_uniform</item>\n      <item>stats_cdf_weibull</item>\n      <item>stats_covariance</item>\n      <item>stats_dens_beta</item>\n      <item>stats_dens_cauchy</item>\n      <item>stats_dens_chisquare</item>\n      <item>stats_dens_exponential</item>\n      <item>stats_dens_f</item>\n      <item>stats_dens_gamma</item>\n      <item>stats_dens_laplace</item>\n      <item>stats_dens_logistic</item>\n      <item>stats_dens_normal</item>\n      <item>stats_dens_pmf_binomial</item>\n      <item>stats_dens_pmf_hypergeometric</item>\n      <item>stats_dens_pmf_negative_binomial</item>\n      <item>stats_dens_pmf_poisson</item>\n      <item>stats_dens_t</item>\n      <item>stats_dens_uniform</item>\n      <item>stats_dens_weibull</item>\n      <item>stats_harmonic_mean</item>\n      <item>stats_kurtosis</item>\n      <item>stats_rand_gen_beta</item>\n      <item>stats_rand_gen_chisquare</item>\n      <item>stats_rand_gen_exponential</item>\n      <item>stats_rand_gen_f</item>\n      <item>stats_rand_gen_funiform</item>\n      <item>stats_rand_gen_gamma</item>\n      <item>stats_rand_gen_ibinomial</item>\n      <item>stats_rand_gen_ibinomial_negative</item>\n      <item>stats_rand_gen_int</item>\n      <item>stats_rand_gen_ipoisson</item>\n      <item>stats_rand_gen_iuniform</item>\n      <item>stats_rand_gen_noncenral_chisquare</item>\n      <item>stats_rand_gen_noncentral_chisquare</item>\n      <item>stats_rand_gen_noncentral_f</item>\n      <item>stats_rand_gen_noncentral_t</item>\n      <item>stats_rand_gen_normal</item>\n      <item>stats_rand_gen_t</item>\n      <item>stats_rand_get_seeds</item>\n      <item>stats_rand_phrase_to_seeds</item>\n      <item>stats_rand_ranf</item>\n      <item>stats_rand_setall</item>\n      <item>stats_skew</item>\n      <item>stats_standard_deviation</item>\n      <item>stats_stat_binomial_coef</item>\n      <item>stats_stat_correlation</item>\n      <item>stats_stat_factorial</item>\n      <item>stats_stat_independent_t</item>\n      <item>stats_stat_innerproduct</item>\n      <item>stats_stat_paired_t</item>\n      <item>stats_stat_percentile</item>\n      <item>stats_stat_powersum</item>\n      <item>stats_variance</item>\n      <item>stomp_abort</item>\n      <item>stomp_ack</item>\n      <item>stomp_begin</item>\n      <item>stomp_close</item>\n      <item>stomp_commit</item>\n      <item>stomp_connect</item>\n      <item>stomp_connect_error</item>\n      <item>stomp_error</item>\n      <item>stomp_get_read_timeout</item>\n      <item>stomp_get_session_id</item>\n      <item>stomp_has_frame</item>\n      <item>stomp_read_frame</item>\n      <item>stomp_send</item>\n      <item>stomp_set_read_timeout</item>\n      <item>stomp_subscribe</item>\n      <item>stomp_unsubscribe</item>\n      <item>stomp_version</item>\n      <item>strcasecmp</item>\n      <item>strchr</item>\n      <item>strcmp</item>\n      <item>strcoll</item>\n      <item>strcspn</item>\n      <item>stream_bucket_append</item>\n      <item>stream_bucket_make_writeable</item>\n      <item>stream_bucket_new</item>\n      <item>stream_bucket_prepend</item>\n      <item>stream_context_create</item>\n      <item>stream_context_get_default</item>\n      <item>stream_context_get_options</item>\n      <item>stream_context_get_params</item>\n      <item>stream_context_set_default</item>\n      <item>stream_context_set_option</item>\n      <item>stream_context_set_params</item>\n      <item>stream_copy_to_stream</item>\n      <item>stream_filter_append</item>\n      <item>stream_filter_prepend</item>\n      <item>stream_filter_register</item>\n      <item>stream_filter_remove</item>\n      <item>stream_get_contents</item>\n      <item>stream_get_filters</item>\n      <item>stream_get_line</item>\n      <item>stream_get_meta_data</item>\n      <item>stream_get_transports</item>\n      <item>stream_get_wrappers</item>\n      <item>stream_isatty</item>\n      <item>stream_is_local</item>\n      <item>stream_notification_callback</item>\n      <item>stream_register_wrapper</item>\n      <item>stream_resolve_include_path</item>\n      <item>stream_select</item>\n      <item>stream_set_blocking</item>\n      <item>stream_set_chunk_size</item>\n      <item>stream_set_read_buffer</item>\n      <item>stream_set_timeout</item>\n      <item>stream_set_write_buffer</item>\n      <item>stream_socket_accept</item>\n      <item>stream_socket_client</item>\n      <item>stream_socket_enable_crypto</item>\n      <item>stream_socket_get_name</item>\n      <item>stream_socket_pair</item>\n      <item>stream_socket_recvfrom</item>\n      <item>stream_socket_sendto</item>\n      <item>stream_socket_server</item>\n      <item>stream_socket_shutdown</item>\n      <item>stream_supports_lock</item>\n      <item>stream_wrapper_register</item>\n      <item>stream_wrapper_restore</item>\n      <item>stream_wrapper_unregister</item>\n      <item>strftime</item>\n      <item>stripcslashes</item>\n      <item>stripos</item>\n      <item>stripslashes</item>\n      <item>strip_tags</item>\n      <item>stristr</item>\n      <item>strlen</item>\n      <item>strnatcasecmp</item>\n      <item>strnatcmp</item>\n      <item>strncasecmp</item>\n      <item>strncmp</item>\n      <item>strpbrk</item>\n      <item>strpos</item>\n      <item>strptime</item>\n      <item>strrchr</item>\n      <item>strrev</item>\n      <item>strripos</item>\n      <item>strrpos</item>\n      <item>strspn</item>\n      <item>strstr</item>\n      <item>strtok</item>\n      <item>strtolower</item>\n      <item>strtotime</item>\n      <item>strtoupper</item>\n      <item>strtr</item>\n      <item>strval</item>\n      <item>str_getcsv</item>\n      <item>str_ireplace</item>\n      <item>str_pad</item>\n      <item>str_repeat</item>\n      <item>str_replace</item>\n      <item>str_rot13</item>\n      <item>str_shuffle</item>\n      <item>str_split</item>\n      <item>str_word_count</item>\n      <item>substr</item>\n      <item>substr_compare</item>\n      <item>substr_count</item>\n      <item>substr_replace</item>\n      <item>suhosin_encrypt_cookie</item>\n      <item>suhosin_get_raw_cookies</item>\n      <item>svn_add</item>\n      <item>svn_auth_get_parameter</item>\n      <item>svn_auth_set_parameter</item>\n      <item>svn_blame</item>\n      <item>svn_cat</item>\n      <item>svn_checkout</item>\n      <item>svn_cleanup</item>\n      <item>svn_client_version</item>\n      <item>svn_commit</item>\n      <item>svn_delete</item>\n      <item>svn_diff</item>\n      <item>svn_export</item>\n      <item>svn_fs_abort_txn</item>\n      <item>svn_fs_apply_text</item>\n      <item>svn_fs_begin_txn2</item>\n      <item>svn_fs_change_node_prop</item>\n      <item>svn_fs_check_path</item>\n      <item>svn_fs_contents_changed</item>\n      <item>svn_fs_copy</item>\n      <item>svn_fs_delete</item>\n      <item>svn_fs_dir_entries</item>\n      <item>svn_fs_file_contents</item>\n      <item>svn_fs_file_length</item>\n      <item>svn_fs_is_dir</item>\n      <item>svn_fs_is_file</item>\n      <item>svn_fs_make_dir</item>\n      <item>svn_fs_make_file</item>\n      <item>svn_fs_node_created_rev</item>\n      <item>svn_fs_node_prop</item>\n      <item>svn_fs_props_changed</item>\n      <item>svn_fs_revision_prop</item>\n      <item>svn_fs_revision_root</item>\n      <item>svn_fs_txn_root</item>\n      <item>svn_fs_youngest_rev</item>\n      <item>svn_import</item>\n      <item>svn_log</item>\n      <item>svn_ls</item>\n      <item>svn_mkdir</item>\n      <item>svn_repos_create</item>\n      <item>svn_repos_fs</item>\n      <item>svn_repos_fs_begin_txn_for_commit</item>\n      <item>svn_repos_fs_commit_txn</item>\n      <item>svn_repos_hotcopy</item>\n      <item>svn_repos_open</item>\n      <item>svn_repos_recover</item>\n      <item>svn_revert</item>\n      <item>svn_status</item>\n      <item>svn_update</item>\n      <item>swoole_async_dns_lookup</item>\n      <item>swoole_async_read</item>\n      <item>swoole_async_readfile</item>\n      <item>swoole_async_set</item>\n      <item>swoole_async_write</item>\n      <item>swoole_async_writefile</item>\n      <item>swoole_client_select</item>\n      <item>swoole_cpu_num</item>\n      <item>swoole_errno</item>\n      <item>swoole_event_add</item>\n      <item>swoole_event_defer</item>\n      <item>swoole_event_del</item>\n      <item>swoole_event_exit</item>\n      <item>swoole_event_set</item>\n      <item>swoole_event_wait</item>\n      <item>swoole_event_write</item>\n      <item>swoole_get_local_ip</item>\n      <item>swoole_last_error</item>\n      <item>swoole_load_module</item>\n      <item>swoole_select</item>\n      <item>swoole_set_process_name</item>\n      <item>swoole_strerror</item>\n      <item>swoole_timer_after</item>\n      <item>swoole_timer_clear</item>\n      <item>swoole_timer_exists</item>\n      <item>swoole_timer_tick</item>\n      <item>swoole_version</item>\n      <item>sybase_affected_rows</item>\n      <item>sybase_close</item>\n      <item>sybase_connect</item>\n      <item>sybase_data_seek</item>\n      <item>sybase_deadlock_retry_count</item>\n      <item>sybase_fetch_array</item>\n      <item>sybase_fetch_assoc</item>\n      <item>sybase_fetch_field</item>\n      <item>sybase_fetch_object</item>\n      <item>sybase_fetch_row</item>\n      <item>sybase_field_seek</item>\n      <item>sybase_free_result</item>\n      <item>sybase_get_last_message</item>\n      <item>sybase_min_client_severity</item>\n      <item>sybase_min_error_severity</item>\n      <item>sybase_min_message_severity</item>\n      <item>sybase_min_server_severity</item>\n      <item>sybase_num_fields</item>\n      <item>sybase_num_rows</item>\n      <item>sybase_pconnect</item>\n      <item>sybase_query</item>\n      <item>sybase_result</item>\n      <item>sybase_select_db</item>\n      <item>sybase_set_message_handler</item>\n      <item>sybase_unbuffered_query</item>\n      <item>symlink</item>\n      <item>syslog</item>\n      <item>system</item>\n      <item>sys_getloadavg</item>\n      <item>sys_get_temp_dir</item>\n      <item>taint</item>\n      <item>tan</item>\n      <item>tanh</item>\n      <item>tcpwrap_check</item>\n      <item>tempnam</item>\n      <item>textdomain</item>\n      <item>tidy_access_count</item>\n      <item>tidy_clean_repair</item>\n      <item>tidy_config_count</item>\n      <item>tidy_diagnose</item>\n      <item>tidy_error_count</item>\n      <item>tidy_getopt</item>\n      <item>tidy_get_body</item>\n      <item>tidy_get_config</item>\n      <item>tidy_get_error_buffer</item>\n      <item>tidy_get_head</item>\n      <item>tidy_get_html</item>\n      <item>tidy_get_html_ver</item>\n      <item>tidy_get_opt_doc</item>\n      <item>tidy_get_output</item>\n      <item>tidy_get_release</item>\n      <item>tidy_get_root</item>\n      <item>tidy_get_status</item>\n      <item>tidy_is_xhtml</item>\n      <item>tidy_is_xml</item>\n      <item>tidy_parse_file</item>\n      <item>tidy_parse_string</item>\n      <item>tidy_repair_file</item>\n      <item>tidy_repair_string</item>\n      <item>tidy_warning_count</item>\n      <item>time</item>\n      <item>timezone_abbreviations_list</item>\n      <item>timezone_identifiers_list</item>\n      <item>timezone_location_get</item>\n      <item>timezone_name_from_abbr</item>\n      <item>timezone_name_get</item>\n      <item>timezone_offset_get</item>\n      <item>timezone_open</item>\n      <item>timezone_transitions_get</item>\n      <item>timezone_version_get</item>\n      <item>time_nanosleep</item>\n      <item>time_sleep_until</item>\n      <item>tmpfile</item>\n      <item>token_get_all</item>\n      <item>token_name</item>\n      <item>touch</item>\n      <item>trader_acos</item>\n      <item>trader_ad</item>\n      <item>trader_add</item>\n      <item>trader_adosc</item>\n      <item>trader_adx</item>\n      <item>trader_adxr</item>\n      <item>trader_apo</item>\n      <item>trader_aroon</item>\n      <item>trader_aroonosc</item>\n      <item>trader_asin</item>\n      <item>trader_atan</item>\n      <item>trader_atr</item>\n      <item>trader_avgprice</item>\n      <item>trader_bbands</item>\n      <item>trader_beta</item>\n      <item>trader_bop</item>\n      <item>trader_cci</item>\n      <item>trader_cdl2crows</item>\n      <item>trader_cdl3blackcrows</item>\n      <item>trader_cdl3inside</item>\n      <item>trader_cdl3linestrike</item>\n      <item>trader_cdl3outside</item>\n      <item>trader_cdl3starsinsouth</item>\n      <item>trader_cdl3whitesoldiers</item>\n      <item>trader_cdlabandonedbaby</item>\n      <item>trader_cdladvanceblock</item>\n      <item>trader_cdlbelthold</item>\n      <item>trader_cdlbreakaway</item>\n      <item>trader_cdlclosingmarubozu</item>\n      <item>trader_cdlconcealbabyswall</item>\n      <item>trader_cdlcounterattack</item>\n      <item>trader_cdldarkcloudcover</item>\n      <item>trader_cdldoji</item>\n      <item>trader_cdldojistar</item>\n      <item>trader_cdldragonflydoji</item>\n      <item>trader_cdlengulfing</item>\n      <item>trader_cdleveningdojistar</item>\n      <item>trader_cdleveningstar</item>\n      <item>trader_cdlgapsidesidewhite</item>\n      <item>trader_cdlgravestonedoji</item>\n      <item>trader_cdlhammer</item>\n      <item>trader_cdlhangingman</item>\n      <item>trader_cdlharami</item>\n      <item>trader_cdlharamicross</item>\n      <item>trader_cdlhighwave</item>\n      <item>trader_cdlhikkake</item>\n      <item>trader_cdlhikkakemod</item>\n      <item>trader_cdlhomingpigeon</item>\n      <item>trader_cdlidentical3crows</item>\n      <item>trader_cdlinneck</item>\n      <item>trader_cdlinvertedhammer</item>\n      <item>trader_cdlkicking</item>\n      <item>trader_cdlkickingbylength</item>\n      <item>trader_cdlladderbottom</item>\n      <item>trader_cdllongleggeddoji</item>\n      <item>trader_cdllongline</item>\n      <item>trader_cdlmarubozu</item>\n      <item>trader_cdlmatchinglow</item>\n      <item>trader_cdlmathold</item>\n      <item>trader_cdlmorningdojistar</item>\n      <item>trader_cdlmorningstar</item>\n      <item>trader_cdlonneck</item>\n      <item>trader_cdlpiercing</item>\n      <item>trader_cdlrickshawman</item>\n      <item>trader_cdlrisefall3methods</item>\n      <item>trader_cdlseparatinglines</item>\n      <item>trader_cdlshootingstar</item>\n      <item>trader_cdlshortline</item>\n      <item>trader_cdlspinningtop</item>\n      <item>trader_cdlstalledpattern</item>\n      <item>trader_cdlsticksandwich</item>\n      <item>trader_cdltakuri</item>\n      <item>trader_cdltasukigap</item>\n      <item>trader_cdlthrusting</item>\n      <item>trader_cdltristar</item>\n      <item>trader_cdlunique3river</item>\n      <item>trader_cdlupsidegap2crows</item>\n      <item>trader_cdlxsidegap3methods</item>\n      <item>trader_ceil</item>\n      <item>trader_cmo</item>\n      <item>trader_correl</item>\n      <item>trader_cos</item>\n      <item>trader_cosh</item>\n      <item>trader_dema</item>\n      <item>trader_div</item>\n      <item>trader_dx</item>\n      <item>trader_ema</item>\n      <item>trader_errno</item>\n      <item>trader_exp</item>\n      <item>trader_floor</item>\n      <item>trader_get_compat</item>\n      <item>trader_get_unstable_period</item>\n      <item>trader_ht_dcperiod</item>\n      <item>trader_ht_dcphase</item>\n      <item>trader_ht_phasor</item>\n      <item>trader_ht_sine</item>\n      <item>trader_ht_trendline</item>\n      <item>trader_ht_trendmode</item>\n      <item>trader_kama</item>\n      <item>trader_linearreg</item>\n      <item>trader_linearreg_angle</item>\n      <item>trader_linearreg_intercept</item>\n      <item>trader_linearreg_slope</item>\n      <item>trader_ln</item>\n      <item>trader_log10</item>\n      <item>trader_ma</item>\n      <item>trader_macd</item>\n      <item>trader_macdext</item>\n      <item>trader_macdfix</item>\n      <item>trader_mama</item>\n      <item>trader_mavp</item>\n      <item>trader_max</item>\n      <item>trader_maxindex</item>\n      <item>trader_medprice</item>\n      <item>trader_mfi</item>\n      <item>trader_midpoint</item>\n      <item>trader_midprice</item>\n      <item>trader_min</item>\n      <item>trader_minindex</item>\n      <item>trader_minmax</item>\n      <item>trader_minmaxindex</item>\n      <item>trader_minus_di</item>\n      <item>trader_minus_dm</item>\n      <item>trader_mom</item>\n      <item>trader_mult</item>\n      <item>trader_natr</item>\n      <item>trader_obv</item>\n      <item>trader_plus_di</item>\n      <item>trader_plus_dm</item>\n      <item>trader_ppo</item>\n      <item>trader_roc</item>\n      <item>trader_rocp</item>\n      <item>trader_rocr</item>\n      <item>trader_rocr100</item>\n      <item>trader_rsi</item>\n      <item>trader_sar</item>\n      <item>trader_sarext</item>\n      <item>trader_set_compat</item>\n      <item>trader_set_unstable_period</item>\n      <item>trader_sin</item>\n      <item>trader_sinh</item>\n      <item>trader_sma</item>\n      <item>trader_sqrt</item>\n      <item>trader_stddev</item>\n      <item>trader_stoch</item>\n      <item>trader_stochf</item>\n      <item>trader_stochrsi</item>\n      <item>trader_sub</item>\n      <item>trader_sum</item>\n      <item>trader_t3</item>\n      <item>trader_tan</item>\n      <item>trader_tanh</item>\n      <item>trader_tema</item>\n      <item>trader_trange</item>\n      <item>trader_trima</item>\n      <item>trader_trix</item>\n      <item>trader_tsf</item>\n      <item>trader_typprice</item>\n      <item>trader_ultosc</item>\n      <item>trader_var</item>\n      <item>trader_wclprice</item>\n      <item>trader_willr</item>\n      <item>trader_wma</item>\n      <item>trait_exists</item>\n      <item>transliterator_create</item>\n      <item>transliterator_create_from_rules</item>\n      <item>transliterator_create_inverse</item>\n      <item>transliterator_get_error_code</item>\n      <item>transliterator_get_error_message</item>\n      <item>transliterator_list_ids</item>\n      <item>transliterator_transliterate</item>\n      <item>trigger_error</item>\n      <item>trim</item>\n      <item>uasort</item>\n      <item>ucfirst</item>\n      <item>ucwords</item>\n      <item>udm_add_search_limit</item>\n      <item>udm_alloc_agent</item>\n      <item>udm_alloc_agent_array</item>\n      <item>udm_api_version</item>\n      <item>udm_cat_list</item>\n      <item>udm_cat_path</item>\n      <item>udm_check_charset</item>\n      <item>udm_clear_search_limits</item>\n      <item>udm_crc32</item>\n      <item>udm_errno</item>\n      <item>udm_error</item>\n      <item>udm_find</item>\n      <item>udm_free_agent</item>\n      <item>udm_free_ispell_data</item>\n      <item>udm_free_res</item>\n      <item>udm_get_doc_count</item>\n      <item>udm_get_res_field</item>\n      <item>udm_get_res_param</item>\n      <item>udm_hash32</item>\n      <item>udm_load_ispell_data</item>\n      <item>udm_set_agent_param</item>\n      <item>uksort</item>\n      <item>umask</item>\n      <item>uniqid</item>\n      <item>unixtojd</item>\n      <item>unlink</item>\n      <item>unpack</item>\n      <item>unregister_tick_function</item>\n      <item>unserialize</item>\n      <item>untaint</item>\n      <item>uopz_add_function</item>\n      <item>uopz_allow_exit</item>\n      <item>uopz_backup</item>\n      <item>uopz_compose</item>\n      <item>uopz_copy</item>\n      <item>uopz_delete</item>\n      <item>uopz_del_function</item>\n      <item>uopz_extend</item>\n      <item>uopz_flags</item>\n      <item>uopz_function</item>\n      <item>uopz_get_exit_status</item>\n      <item>uopz_get_hook</item>\n      <item>uopz_get_mock</item>\n      <item>uopz_get_property</item>\n      <item>uopz_get_return</item>\n      <item>uopz_get_static</item>\n      <item>uopz_implement</item>\n      <item>uopz_overload</item>\n      <item>uopz_redefine</item>\n      <item>uopz_rename</item>\n      <item>uopz_restore</item>\n      <item>uopz_set_hook</item>\n      <item>uopz_set_mock</item>\n      <item>uopz_set_property</item>\n      <item>uopz_set_return</item>\n      <item>uopz_set_static</item>\n      <item>uopz_undefine</item>\n      <item>uopz_unset_hook</item>\n      <item>uopz_unset_mock</item>\n      <item>uopz_unset_return</item>\n      <item>urldecode</item>\n      <item>urlencode</item>\n      <item>user_error</item>\n      <item>use_soap_error_handler</item>\n      <item>usleep</item>\n      <item>usort</item>\n      <item>utf8_decode</item>\n      <item>utf8_encode</item>\n      <item>variant_abs</item>\n      <item>variant_add</item>\n      <item>variant_and</item>\n      <item>variant_cast</item>\n      <item>variant_cat</item>\n      <item>variant_cmp</item>\n      <item>variant_date_from_timestamp</item>\n      <item>variant_date_to_timestamp</item>\n      <item>variant_div</item>\n      <item>variant_eqv</item>\n      <item>variant_fix</item>\n      <item>variant_get_type</item>\n      <item>variant_idiv</item>\n      <item>variant_imp</item>\n      <item>variant_int</item>\n      <item>variant_mod</item>\n      <item>variant_mul</item>\n      <item>variant_neg</item>\n      <item>variant_not</item>\n      <item>variant_or</item>\n      <item>variant_pow</item>\n      <item>variant_round</item>\n      <item>variant_set</item>\n      <item>variant_set_type</item>\n      <item>variant_sub</item>\n      <item>variant_xor</item>\n      <item>var_dump</item>\n      <item>var_export</item>\n      <item>version_compare</item>\n      <item>vfprintf</item>\n      <item>virtual</item>\n      <item>vpopmail_add_alias_domain</item>\n      <item>vpopmail_add_alias_domain_ex</item>\n      <item>vpopmail_add_domain</item>\n      <item>vpopmail_add_domain_ex</item>\n      <item>vpopmail_add_user</item>\n      <item>vpopmail_alias_add</item>\n      <item>vpopmail_alias_del</item>\n      <item>vpopmail_alias_del_domain</item>\n      <item>vpopmail_alias_get</item>\n      <item>vpopmail_alias_get_all</item>\n      <item>vpopmail_auth_user</item>\n      <item>vpopmail_del_domain</item>\n      <item>vpopmail_del_domain_ex</item>\n      <item>vpopmail_del_user</item>\n      <item>vpopmail_error</item>\n      <item>vpopmail_passwd</item>\n      <item>vpopmail_set_user_quota</item>\n      <item>vprintf</item>\n      <item>vsprintf</item>\n      <item>wddx_add_vars</item>\n      <item>wddx_deserialize</item>\n      <item>wddx_packet_end</item>\n      <item>wddx_packet_start</item>\n      <item>wddx_serialize_value</item>\n      <item>wddx_serialize_vars</item>\n      <item>win32_continue_service</item>\n      <item>win32_create_service</item>\n      <item>win32_delete_service</item>\n      <item>win32_get_last_control_message</item>\n      <item>win32_pause_service</item>\n      <item>win32_ps_list_procs</item>\n      <item>win32_ps_stat_mem</item>\n      <item>win32_ps_stat_proc</item>\n      <item>win32_query_service_status</item>\n      <item>win32_set_service_status</item>\n      <item>win32_start_service</item>\n      <item>win32_start_service_ctrl_dispatcher</item>\n      <item>win32_stop_service</item>\n      <item>wincache_fcache_fileinfo</item>\n      <item>wincache_fcache_meminfo</item>\n      <item>wincache_lock</item>\n      <item>wincache_ocache_fileinfo</item>\n      <item>wincache_ocache_meminfo</item>\n      <item>wincache_refresh_if_changed</item>\n      <item>wincache_rplist_fileinfo</item>\n      <item>wincache_rplist_meminfo</item>\n      <item>wincache_scache_info</item>\n      <item>wincache_scache_meminfo</item>\n      <item>wincache_ucache_add</item>\n      <item>wincache_ucache_cas</item>\n      <item>wincache_ucache_clear</item>\n      <item>wincache_ucache_dec</item>\n      <item>wincache_ucache_delete</item>\n      <item>wincache_ucache_exists</item>\n      <item>wincache_ucache_get</item>\n      <item>wincache_ucache_inc</item>\n      <item>wincache_ucache_info</item>\n      <item>wincache_ucache_meminfo</item>\n      <item>wincache_ucache_set</item>\n      <item>wincache_unlock</item>\n      <item>wordwrap</item>\n      <item>xattr_get</item>\n      <item>xattr_list</item>\n      <item>xattr_remove</item>\n      <item>xattr_set</item>\n      <item>xattr_supported</item>\n      <item>xdiff_file_bdiff</item>\n      <item>xdiff_file_bdiff_size</item>\n      <item>xdiff_file_bpatch</item>\n      <item>xdiff_file_diff</item>\n      <item>xdiff_file_diff_binary</item>\n      <item>xdiff_file_merge3</item>\n      <item>xdiff_file_patch</item>\n      <item>xdiff_file_patch_binary</item>\n      <item>xdiff_file_rabdiff</item>\n      <item>xdiff_string_bdiff</item>\n      <item>xdiff_string_bdiff_size</item>\n      <item>xdiff_string_bpatch</item>\n      <item>xdiff_string_diff</item>\n      <item>xdiff_string_merge3</item>\n      <item>xdiff_string_patch</item>\n      <item>xdiff_string_patch_binary</item>\n      <item>xhprof_disable</item>\n      <item>xhprof_enable</item>\n      <item>xhprof_sample_disable</item>\n      <item>xhprof_sample_enable</item>\n      <item>xmlrpc_decode</item>\n      <item>xmlrpc_decode_request</item>\n      <item>xmlrpc_encode</item>\n      <item>xmlrpc_encode_request</item>\n      <item>xmlrpc_get_type</item>\n      <item>xmlrpc_is_fault</item>\n      <item>xmlrpc_parse_method_descriptions</item>\n      <item>xmlrpc_server_add_introspection_data</item>\n      <item>xmlrpc_server_call_method</item>\n      <item>xmlrpc_server_create</item>\n      <item>xmlrpc_server_destroy</item>\n      <item>xmlrpc_server_register_introspection_callback</item>\n      <item>xmlrpc_server_register_method</item>\n      <item>xmlrpc_set_type</item>\n      <item>xmlwriter_end_attribute</item>\n      <item>xmlwriter_end_cdata</item>\n      <item>xmlwriter_end_comment</item>\n      <item>xmlwriter_end_document</item>\n      <item>xmlwriter_end_dtd</item>\n      <item>xmlwriter_end_dtd_attlist</item>\n      <item>xmlwriter_end_dtd_element</item>\n      <item>xmlwriter_end_dtd_entity</item>\n      <item>xmlwriter_end_element</item>\n      <item>xmlwriter_end_pi</item>\n      <item>xmlwriter_flush</item>\n      <item>xmlwriter_full_end_element</item>\n      <item>xmlwriter_open_memory</item>\n      <item>xmlwriter_open_uri</item>\n      <item>xmlwriter_output_memory</item>\n      <item>xmlwriter_set_indent</item>\n      <item>xmlwriter_set_indent_string</item>\n      <item>xmlwriter_start_attribute</item>\n      <item>xmlwriter_start_attribute_ns</item>\n      <item>xmlwriter_start_cdata</item>\n      <item>xmlwriter_start_comment</item>\n      <item>xmlwriter_start_document</item>\n      <item>xmlwriter_start_dtd</item>\n      <item>xmlwriter_start_dtd_attlist</item>\n      <item>xmlwriter_start_dtd_element</item>\n      <item>xmlwriter_start_dtd_entity</item>\n      <item>xmlwriter_start_element</item>\n      <item>xmlwriter_start_element_ns</item>\n      <item>xmlwriter_start_pi</item>\n      <item>xmlwriter_text</item>\n      <item>xmlwriter_write_attribute</item>\n      <item>xmlwriter_write_attribute_ns</item>\n      <item>xmlwriter_write_cdata</item>\n      <item>xmlwriter_write_comment</item>\n      <item>xmlwriter_write_dtd</item>\n      <item>xmlwriter_write_dtd_attlist</item>\n      <item>xmlwriter_write_dtd_element</item>\n      <item>xmlwriter_write_dtd_entity</item>\n      <item>xmlwriter_write_element</item>\n      <item>xmlwriter_write_element_ns</item>\n      <item>xmlwriter_write_pi</item>\n      <item>xmlwriter_write_raw</item>\n      <item>xml_error_string</item>\n      <item>xml_get_current_byte_index</item>\n      <item>xml_get_current_column_number</item>\n      <item>xml_get_current_line_number</item>\n      <item>xml_get_error_code</item>\n      <item>xml_parse</item>\n      <item>xml_parser_create</item>\n      <item>xml_parser_create_ns</item>\n      <item>xml_parser_free</item>\n      <item>xml_parser_get_option</item>\n      <item>xml_parser_set_option</item>\n      <item>xml_parse_into_struct</item>\n      <item>xml_set_character_data_handler</item>\n      <item>xml_set_default_handler</item>\n      <item>xml_set_element_handler</item>\n      <item>xml_set_end_namespace_decl_handler</item>\n      <item>xml_set_external_entity_ref_handler</item>\n      <item>xml_set_notation_decl_handler</item>\n      <item>xml_set_object</item>\n      <item>xml_set_processing_instruction_handler</item>\n      <item>xml_set_start_namespace_decl_handler</item>\n      <item>xml_set_unparsed_entity_decl_handler</item>\n      <item>yaml_emit</item>\n      <item>yaml_emit_file</item>\n      <item>yaml_parse</item>\n      <item>yaml_parse_file</item>\n      <item>yaml_parse_url</item>\n      <item>yaz_addinfo</item>\n      <item>yaz_ccl_conf</item>\n      <item>yaz_ccl_parse</item>\n      <item>yaz_close</item>\n      <item>yaz_connect</item>\n      <item>yaz_database</item>\n      <item>yaz_element</item>\n      <item>yaz_errno</item>\n      <item>yaz_error</item>\n      <item>yaz_es</item>\n      <item>yaz_es_result</item>\n      <item>yaz_get_option</item>\n      <item>yaz_hits</item>\n      <item>yaz_itemorder</item>\n      <item>yaz_present</item>\n      <item>yaz_range</item>\n      <item>yaz_record</item>\n      <item>yaz_scan</item>\n      <item>yaz_scan_result</item>\n      <item>yaz_schema</item>\n      <item>yaz_search</item>\n      <item>yaz_set_option</item>\n      <item>yaz_sort</item>\n      <item>yaz_syntax</item>\n      <item>yaz_wait</item>\n      <item>yp_all</item>\n      <item>yp_cat</item>\n      <item>yp_errno</item>\n      <item>yp_err_string</item>\n      <item>yp_first</item>\n      <item>yp_get_default_domain</item>\n      <item>yp_master</item>\n      <item>yp_match</item>\n      <item>yp_next</item>\n      <item>yp_order</item>\n      <item>zend_logo_guid</item>\n      <item>zend_thread_id</item>\n      <item>zend_version</item>\n      <item>zip_close</item>\n      <item>zip_entry_close</item>\n      <item>zip_entry_compressedsize</item>\n      <item>zip_entry_compressionmethod</item>\n      <item>zip_entry_filesize</item>\n      <item>zip_entry_name</item>\n      <item>zip_entry_open</item>\n      <item>zip_entry_read</item>\n      <item>zip_open</item>\n      <item>zip_read</item>\n      <item>zlib_decode</item>\n      <item>zlib_encode</item>\n      <item>zlib_get_coding_type</item>\n      <item>zookeeper_dispatch</item>\n\n      <!-- xdebug functions -->\n      <!-- https://xdebug.org/docs/all_functions -->\n      <item>xdebug_break</item>\n      <item>xdebug_call_class</item>\n      <item>xdebug_call_file</item>\n      <item>xdebug_call_function</item>\n      <item>xdebug_call_line</item>\n      <item>xdebug_code_coverage</item>\n      <item>xdebug_debug_zval</item>\n      <item>xdebug_debug_zval_stdout</item>\n      <item>xdebug_disable</item>\n      <item>xdebug_dump_superglobals</item>\n      <item>xdebug_enable</item>\n      <item>xdebug_get_code_coverage</item>\n      <item>xdebug_get_collected_errors</item>\n      <item>xdebug_get_declared_vars</item>\n      <item>xdebug_get_function_stack</item>\n      <item>xdebug_get_headers</item>\n      <item>xdebug_get_monitored_functions</item>\n      <item>xdebug_get_profiler_filename</item>\n      <item>xdebug_get_stack_depth</item>\n      <item>xdebug_get_tracefile_name</item>\n      <item>xdebug_is_debugger_active</item>\n      <item>xdebug_is_enabled</item>\n      <item>xdebug_memory_usage</item>\n      <item>xdebug_peak_memory_usage</item>\n      <item>xdebug_print_function_stack</item>\n      <item>xdebug_set_filter</item>\n      <item>xdebug_start_code_coverage</item>\n      <item>xdebug_start_error_collection</item>\n      <item>xdebug_start_function_monitor</item>\n      <item>xdebug_start_trace</item>\n      <item>xdebug_stop_code_coverage</item>\n      <item>xdebug_stop_error_collection</item>\n      <item>xdebug_stop_function_monitor</item>\n      <item>xdebug_stop_trace</item>\n      <item>xdebug_time_index</item>\n      <item>xdebug_var_dump</item>\n    </list>\n\n    <list name=\"special-variables\">\n        <item>$GLOBALS</item>\n        <item>$_COOKIE</item>\n        <item>$_ENV</item>\n        <item>$_FILES</item>\n        <item>$_GET</item>\n        <item>$_POST</item>\n        <item>$_REQUEST</item>\n        <item>$_SERVER</item>\n        <item>$_SESSION</item>\n        <item>$php_errormsg</item>\n        <item>$this</item>\n    </list>\n\n    <list name=\"predefined-classes\">\n        <item>APCIterator</item>\n        <item>APCUIterator</item>\n        <item>AppendIterator</item>\n        <item>ArgumentCountError</item>\n        <item>ArithmeticError</item>\n        <item>ArrayAccess</item>\n        <item>ArrayIterator</item>\n        <item>ArrayObject</item>\n        <item>AssertionError</item>\n        <item>BadFunctionCallException</item>\n        <item>BadMethodCallException</item>\n        <item>CachingIterator</item>\n        <item>Cairo</item>\n        <item>CairoAntialias</item>\n        <item>CairoContent</item>\n        <item>CairoContext</item>\n        <item>CairoException</item>\n        <item>CairoExtend</item>\n        <item>CairoFillRule</item>\n        <item>CairoFilter</item>\n        <item>CairoFontFace</item>\n        <item>CairoFontOptions</item>\n        <item>CairoFontSlant</item>\n        <item>CairoFontType</item>\n        <item>CairoFontWeight</item>\n        <item>CairoFormat</item>\n        <item>CairoGradientPattern</item>\n        <item>CairoHintMetrics</item>\n        <item>CairoHintStyle</item>\n        <item>CairoImageSurface</item>\n        <item>CairoLinearGradient</item>\n        <item>CairoLineCap</item>\n        <item>CairoLineJoin</item>\n        <item>CairoMatrix</item>\n        <item>CairoOperator</item>\n        <item>CairoPath</item>\n        <item>CairoPattern</item>\n        <item>CairoPatternType</item>\n        <item>CairoPdfSurface</item>\n        <item>CairoPsLevel</item>\n        <item>CairoPsSurface</item>\n        <item>CairoRadialGradient</item>\n        <item>CairoScaledFont</item>\n        <item>CairoSolidPattern</item>\n        <item>CairoStatus</item>\n        <item>CairoSubpixelOrder</item>\n        <item>CairoSurface</item>\n        <item>CairoSurfacePattern</item>\n        <item>CairoSurfaceType</item>\n        <item>CairoSvgSurface</item>\n        <item>CairoSvgVersion</item>\n        <item>CairoToyFontFace</item>\n        <item>CallbackFilterIterator</item>\n        <item>chdb</item>\n        <item>Closure</item>\n        <item>Collator</item>\n        <item>Collectable</item>\n        <item>CompileError</item>\n        <item>Cond</item>\n        <item>Countable</item>\n        <item>CURLFile</item>\n        <item>DateInterval</item>\n        <item>DatePeriod</item>\n        <item>DateTime</item>\n        <item>DateTimeImmutable</item>\n        <item>DateTimeInterface</item>\n        <item>DateTimeZone</item>\n        <item>Directory</item>\n        <item>DirectoryIterator</item>\n        <item>DivisionByZeroError</item>\n        <item>DomainException</item>\n        <item>DOMAttr</item>\n        <item>DOMCdataSection</item>\n        <item>DomCharacterData</item>\n        <item>DOMComment</item>\n        <item>DOMDocument</item>\n        <item>DOMDocumentFragment</item>\n        <item>DOMDocumentType</item>\n        <item>DomElement</item>\n        <item>DOMEntity</item>\n        <item>DomEntityReference</item>\n        <item>DOMException</item>\n        <item>DomImplementation</item>\n        <item>DomNamedNodeMap</item>\n        <item>DOMNode</item>\n        <item>DOMNodeList</item>\n        <item>DOMNotation</item>\n        <item>DOMProcessingInstruction</item>\n        <item>DOMText</item>\n        <item>DomXPath</item>\n        <item>EmptyIterator</item>\n        <item>Error</item>\n        <item>ErrorException</item>\n        <item>EvCheck</item>\n        <item>EvChild</item>\n        <item>EvEmbed</item>\n        <item>EventBuffer</item>\n        <item>EventHttpConnection</item>\n        <item>EventHttpRequest</item>\n        <item>EvFork</item>\n        <item>EvIdle</item>\n        <item>EvIo</item>\n        <item>EvPeriodic</item>\n        <item>EvPrepare</item>\n        <item>EvSignal</item>\n        <item>EvStat</item>\n        <item>EvTimer</item>\n        <item>EvWatcher</item>\n        <item>Exception</item>\n        <item>FANNConnection</item>\n        <item>FilesystemIterator</item>\n        <item>FilterIterator</item>\n        <item>finfo</item>\n        <item>GearmanClient</item>\n        <item>GearmanException</item>\n        <item>GearmanJob</item>\n        <item>GearmanTask</item>\n        <item>GearmanWorker</item>\n        <item>Gender</item>\n        <item>Generator</item>\n        <item>GlobIterator</item>\n        <item>Gmagick</item>\n        <item>GmagickDraw</item>\n        <item>GmagickException</item>\n        <item>GmagickPixel</item>\n        <item>GmagickPixelException</item>\n        <item>GMP</item>\n        <item>HaruAnnotation</item>\n        <item>HaruDestination</item>\n        <item>HaruDoc</item>\n        <item>HaruEncoder</item>\n        <item>HaruException</item>\n        <item>HaruFont</item>\n        <item>HaruImage</item>\n        <item>HaruOutline</item>\n        <item>HaruPage</item>\n        <item>HashContext</item>\n        <item>hw_api</item>\n        <item>hw_api_attribute</item>\n        <item>hw_api_content</item>\n        <item>hw_api_error</item>\n        <item>hw_api_object</item>\n        <item>hw_api_reason</item>\n        <item>Imagick</item>\n        <item>ImagickDraw</item>\n        <item>ImagickKernel</item>\n        <item>ImagickKernelException</item>\n        <item>ImagickPixel</item>\n        <item>ImagickPixelIterator</item>\n        <item>InfiniteIterator</item>\n        <item>IntlBreakIterator</item>\n        <item>IntlCalendar</item>\n        <item>IntlChar</item>\n        <item>IntlCodePointBreakIterator</item>\n        <item>IntlDateFormatter</item>\n        <item>IntlException</item>\n        <item>IntlGregorianCalendar</item>\n        <item>IntlIterator</item>\n        <item>IntlPartsIterator</item>\n        <item>IntlRuleBasedBreakIterator</item>\n        <item>IntlTimeZone</item>\n        <item>InvalidArgumentException</item>\n        <item>Iterator</item>\n        <item>IteratorAggregate</item>\n        <item>IteratorIterator</item>\n        <item>JsonException</item>\n        <item>JsonSerializable</item>\n        <item>Judy</item>\n        <item>KTaglib_ID3v2_AttachedPictureFrame</item>\n        <item>KTaglib_ID3v2_Frame</item>\n        <item>KTaglib_ID3v2_Tag</item>\n        <item>KTaglib_MPEG_AudioProperties</item>\n        <item>KTaglib_MPEG_File</item>\n        <item>KTaglib_MPEG_Header</item>\n        <item>KTaglib_Tag</item>\n        <item>Lapack</item>\n        <item>lapackexception</item>\n        <item>LengthException</item>\n        <item>libXMLError</item>\n        <item>LimitIterator</item>\n        <item>Locale</item>\n        <item>LogicException</item>\n        <item>Lua</item>\n        <item>LuaClosure</item>\n        <item>LuaException</item>\n        <item>maxdb</item>\n        <item>maxdb_result</item>\n        <item>maxdb_stmt</item>\n        <item>Memcache</item>\n        <item>Memcached</item>\n        <item>MemcachedException</item>\n        <item>MessageFormatter</item>\n        <item>Mongo</item>\n        <item>MongoBinData</item>\n        <item>MongoClient</item>\n        <item>MongoCode</item>\n        <item>MongoCollection</item>\n        <item>MongoCommandCursor</item>\n        <item>MongoConnectionException</item>\n        <item>MongoCursor</item>\n        <item>MongoCursorException</item>\n        <item>MongoCursorInterface</item>\n        <item>MongoCursorTimeoutException</item>\n        <item>MongoDate</item>\n        <item>MongoDB</item>\n        <item>MongoDBRef</item>\n        <item>MultipleIterator</item>\n        <item>Mutex</item>\n        <item>mysqli</item>\n        <item>mysqli_driver</item>\n        <item>mysqli_result</item>\n        <item>mysqli_sql_exception</item>\n        <item>mysqli_stmt</item>\n        <item>mysqli_warning</item>\n        <item>MysqlndUhConnection</item>\n        <item>MysqlndUhPreparedStatement</item>\n        <item>NoRewindIterator</item>\n        <item>Normalizer</item>\n        <item>NumberFormatter</item>\n        <item>OAuth</item>\n        <item>OAuthException</item>\n        <item>OAuthProvider</item>\n        <item>OCI-Collection</item>\n        <item>OCI-Lob</item>\n        <item>OuterIterator</item>\n        <item>OutOfBoundsException</item>\n        <item>OutOfRangeException</item>\n        <item>OverflowException</item>\n        <item>ParentIterator</item>\n        <item>ParseError</item>\n        <item>PDO</item>\n        <item>PDOException</item>\n        <item>PDOStatement</item>\n        <item>Phar</item>\n        <item>PharData</item>\n        <item>PharException</item>\n        <item>PharFileInfo</item>\n        <item>phdfs</item>\n        <item>php_user_filter</item>\n        <item>QuickHashIntHash</item>\n        <item>QuickHashIntSet</item>\n        <item>QuickHashIntStringHash</item>\n        <item>QuickHashStringIntHash</item>\n        <item>RangeException</item>\n        <item>RecursiveArrayIterator</item>\n        <item>RecursiveCachingIterator</item>\n        <item>RecursiveCallbackFilterIterator</item>\n        <item>RecursiveDirectoryIterator</item>\n        <item>RecursiveFilterIterator</item>\n        <item>RecursiveIterator</item>\n        <item>RecursiveIteratorIterator</item>\n        <item>RecursiveRegexIterator</item>\n        <item>RecursiveTreeIterator</item>\n        <item>Reflection</item>\n        <item>ReflectionClass</item>\n        <item>ReflectionClassConstant</item>\n        <item>ReflectionException</item>\n        <item>ReflectionExtension</item>\n        <item>ReflectionFunction</item>\n        <item>ReflectionFunctionAbstract</item>\n        <item>ReflectionGenerator</item>\n        <item>ReflectionMethod</item>\n        <item>ReflectionNamedType</item>\n        <item>ReflectionObject</item>\n        <item>ReflectionParameter</item>\n        <item>ReflectionProperty</item>\n        <item>ReflectionType</item>\n        <item>ReflectionZendExtension</item>\n        <item>Reflector</item>\n        <item>RegexIterator</item>\n        <item>ResourceBundle</item>\n        <item>RRDCreator</item>\n        <item>RRDGraph</item>\n        <item>RRDUpdater</item>\n        <item>Runkit_Sandbox_Parent</item>\n        <item>RuntimeException</item>\n        <item>SAMConnection</item>\n        <item>SAMMessage</item>\n        <item>SCA</item>\n        <item>SCA_LocalProxy</item>\n        <item>SCA_SoapProxy</item>\n        <item>SDO_DAS_ChangeSummary</item>\n        <item>SDO_DAS_DataFactory</item>\n        <item>SDO_DAS_DataObject</item>\n        <item>SDO_DAS_Relational</item>\n        <item>SDO_DAS_Setting</item>\n        <item>SDO_DAS_XML</item>\n        <item>SDO_DAS_XML_Document</item>\n        <item>SDO_DataFactory</item>\n        <item>SDO_DataObject</item>\n        <item>SDO_Exception</item>\n        <item>SDO_List</item>\n        <item>SDO_Model_Property</item>\n        <item>SDO_Model_ReflectionDataObject</item>\n        <item>SDO_Model_Type</item>\n        <item>SDO_Sequence</item>\n        <item>SeasLog</item>\n        <item>SeekableIterator</item>\n        <item>Serializable</item>\n        <item>SessionHandler</item>\n        <item>SessionHandlerInterface</item>\n        <item>SessionIdInterface</item>\n        <item>SessionUpdateTimestampHandlerInterface</item>\n        <item>SimpleXMLElement</item>\n        <item>SimpleXMLIterator</item>\n        <item>SNMP</item>\n        <item>SNMPException</item>\n        <item>SoapClient</item>\n        <item>SoapFault</item>\n        <item>SoapHeader</item>\n        <item>SoapParam</item>\n        <item>SoapServer</item>\n        <item>SoapVar</item>\n        <item>SodiumException</item>\n        <item>SolrClientException</item>\n        <item>SolrCollapseFunction</item>\n        <item>SolrDisMaxQuery</item>\n        <item>SolrException</item>\n        <item>SolrIllegalArgumentException</item>\n        <item>SolrIllegalOperationException</item>\n        <item>SolrMissingMandatoryParameterException</item>\n        <item>SolrModifiableParams</item>\n        <item>SolrParams</item>\n        <item>SolrQuery</item>\n        <item>SolrResponse</item>\n        <item>SolrServerException</item>\n        <item>SolrUtils</item>\n        <item>SphinxClient</item>\n        <item>SplBool</item>\n        <item>SplDoublyLinkedList</item>\n        <item>SplEnum</item>\n        <item>SplFileInfo</item>\n        <item>SplFileObject</item>\n        <item>SplFixedArray</item>\n        <item>SplFloat</item>\n        <item>SplHeap</item>\n        <item>SplInt</item>\n        <item>SplMaxHeap</item>\n        <item>SplMinHeap</item>\n        <item>SplObjectStorage</item>\n        <item>SplObserver</item>\n        <item>SplPriorityQueue</item>\n        <item>SplQueue</item>\n        <item>SplStack</item>\n        <item>SplString</item>\n        <item>SplSubject</item>\n        <item>SplTempFileObject</item>\n        <item>SplType</item>\n        <item>Spoofchecker</item>\n        <item>SQLite3</item>\n        <item>SQLite3Result</item>\n        <item>SQLite3Stmt</item>\n        <item>SQLiteDatabase</item>\n        <item>SQLiteResult</item>\n        <item>SQLiteUnbuffered</item>\n        <item>stdClass</item>\n        <item>Stomp</item>\n        <item>StompException</item>\n        <item>StompFrame</item>\n        <item>streamWrapper</item>\n        <item>SVM</item>\n        <item>SVMException</item>\n        <item>SVMModel</item>\n        <item>SWFAction</item>\n        <item>SWFBitmap</item>\n        <item>SWFButton</item>\n        <item>SWFDisplayItem</item>\n        <item>SWFFill</item>\n        <item>SWFFont</item>\n        <item>SWFFontChar</item>\n        <item>SWFGradient</item>\n        <item>SWFMorph</item>\n        <item>SWFMovie</item>\n        <item>SWFPrebuiltClip</item>\n        <item>SWFShape</item>\n        <item>SWFSound</item>\n        <item>SWFSoundInstance</item>\n        <item>SWFSprite</item>\n        <item>SWFText</item>\n        <item>SWFTextField</item>\n        <item>SWFVideoStream</item>\n        <item>Swish</item>\n        <item>SwishResult</item>\n        <item>SwishResults</item>\n        <item>SwishSearch</item>\n        <item>SyncEvent</item>\n        <item>SyncMutex</item>\n        <item>SyncReaderWriter</item>\n        <item>SyncSemaphore</item>\n        <item>SyncSharedMemory</item>\n        <item>Thread</item>\n        <item>Threaded</item>\n        <item>Throwable</item>\n        <item>tidy</item>\n        <item>tidyNode</item>\n        <item>TokyoTyrant</item>\n        <item>tokyotyrantexception</item>\n        <item>TokyoTyrantIterator</item>\n        <item>TokyoTyrantQuery</item>\n        <item>TokyoTyrantTable</item>\n        <item>Transliterator</item>\n        <item>Traversable</item>\n        <item>TypeError</item>\n        <item>UnderflowException</item>\n        <item>UnexpectedValueException</item>\n        <item>V8Js</item>\n        <item>V8JsException</item>\n        <item>VarnishAdmin</item>\n        <item>VarnishException</item>\n        <item>VarnishLog</item>\n        <item>VarnishStat</item>\n        <item>Volatile</item>\n        <item>WeakMap</item>\n        <item>WeakRef</item>\n        <item>Worker</item>\n        <item>XMLReader</item>\n        <item>XMLWriter</item>\n        <item>XSLTProcessor</item>\n        <item>Yaconf</item>\n        <item>Yaf_Action_Abstract</item>\n        <item>Yaf_Bootstrap_Abstract</item>\n        <item>Yaf_Config_Abstract</item>\n        <item>Yaf_Config_Ini</item>\n        <item>Yaf_Config_Simple</item>\n        <item>Yaf_Controller_Abstract</item>\n        <item>Yaf_Exception</item>\n        <item>Yaf_Exception_DispatchFailed</item>\n        <item>Yaf_Exception_LoadFailed</item>\n        <item>Yaf_Exception_LoadFailed_Action</item>\n        <item>Yaf_Exception_LoadFailed_Controller</item>\n        <item>Yaf_Exception_LoadFailed_Module</item>\n        <item>Yaf_Exception_LoadFailed_View</item>\n        <item>Yaf_Exception_RouterFailed</item>\n        <item>Yaf_Exception_StartupError</item>\n        <item>Yaf_Exception_TypeError</item>\n        <item>Yaf_Loader</item>\n        <item>Yaf_Plugin_Abstract</item>\n        <item>Yaf_Registry</item>\n        <item>Yaf_Request_Abstract</item>\n        <item>Yaf_Request_Http</item>\n        <item>Yaf_Request_Simple</item>\n        <item>Yaf_Response_Abstract</item>\n        <item>Yaf_Response_Cli</item>\n        <item>Yaf_Response_Http</item>\n        <item>Yaf_Router</item>\n        <item>Yaf_Route_Interface</item>\n        <item>Yaf_Route_Map</item>\n        <item>Yaf_Route_Regex</item>\n        <item>Yaf_Route_Rewrite</item>\n        <item>Yaf_Route_Simple</item>\n        <item>Yaf_Route_Static</item>\n        <item>Yaf_Route_Supervar</item>\n        <item>Yaf_Session</item>\n        <item>Yaf_View_Interface</item>\n        <item>Yaf_View_Simple</item>\n        <item>Yar_Client</item>\n        <item>Yar_Client_Exception</item>\n        <item>Yar_Client_Packager_Exception</item>\n        <item>Yar_Client_Protocol_Exception</item>\n        <item>Yar_Client_Transport_Exception</item>\n        <item>Yar_Concurrent_Client</item>\n        <item>Yar_Server</item>\n        <item>Yar_Server_Exception</item>\n        <item>Yar_Server_Output_Exception</item>\n        <item>Yar_Server_Packager_Exception</item>\n        <item>Yar_Server_Protocol_Exception</item>\n        <item>Yar_Server_Request_Exception</item>\n        <item>ZipArchive</item>\n        <item>ZMQ</item>\n        <item>ZMQContext</item>\n        <item>ZMQContextException</item>\n        <item>ZMQDevice</item>\n        <item>ZMQDeviceException</item>\n        <item>ZMQException</item>\n        <item>ZMQPoll</item>\n        <item>ZMQPollException</item>\n        <item>ZMQSocket</item>\n        <item>ZMQSocketException</item>\n        <item>Zookeeper</item>\n        <item>ZookeeperAuthenticationException</item>\n        <item>ZookeeperConfig</item>\n        <item>ZookeeperConnectionException</item>\n        <item>ZookeeperException</item>\n        <item>ZookeeperMarshallingException</item>\n        <item>ZookeeperNoNodeException</item>\n        <item>ZookeeperOperationTimeoutException</item>\n        <item>ZookeeperSessionException</item>\n        <item>__PHP_Incomplete_Class</item>\n    </list>\n\n    <list name=\"deprecated\">\n      <!-- Variables -->\n      <item>$HTTP_SERVER_VARS</item>\n      <item>$HTTP_SESSION_VARS</item>\n      <item>$HTTP_ENV_VARS</item>\n      <item>$HTTP_POST_FILES</item>\n      <item>$HTTP_COOKIE_VARS</item>\n      <item>$HTTP_POST_VARS</item>\n      <item>$HTTP_GET_VARS</item>\n      <item>$DOCUMENT_ROOT</item>\n\n      <!-- Functions -->\n      <item>call_user_method</item>\n      <item>call_user_method_array</item>\n      <item>create_function</item>\n      <item>datefmt_set_timezone_id</item>\n      <item>define_syslog_variables</item>\n      <item>each</item>\n      <item>ereg</item>\n      <item>ereg_replace</item>\n      <item>eregi</item>\n      <item>eregi_replace</item>\n      <item>gmp_random</item>\n      <item>image2wbmp</item>\n      <item>imagepsbbox</item>\n      <item>imagepsencodefont</item>\n      <item>imagepsextendfont</item>\n      <item>imagepsfreefont</item>\n      <item>imagepsloadfont</item>\n      <item>imagepsslantfont</item>\n      <item>imagepstext</item>\n      <item>jpeg2wbmp</item>\n      <item>magic_quotes_runtime</item>\n      <item>mcrypt_cbc</item>\n      <item>mcrypt_cfb</item>\n      <item>mcrypt_create_iv</item>\n      <item>mcrypt_decrypt</item>\n      <item>mcrypt_ecb</item>\n      <item>mcrypt_encrypt</item>\n      <item>mcrypt_enc_get_algorithms_name</item>\n      <item>mcrypt_enc_get_block_size</item>\n      <item>mcrypt_enc_get_iv_size</item>\n      <item>mcrypt_enc_get_key_size</item>\n      <item>mcrypt_enc_get_modes_name</item>\n      <item>mcrypt_enc_get_supported_key_sizes</item>\n      <item>mcrypt_enc_is_block_algorithm</item>\n      <item>mcrypt_enc_is_block_algorithm_mode</item>\n      <item>mcrypt_enc_is_block_mode</item>\n      <item>mcrypt_enc_self_test</item>\n      <item>mcrypt_generic</item>\n      <item>mcrypt_generic_deinit</item>\n      <item>mcrypt_generic_end</item>\n      <item>mcrypt_generic_init</item>\n      <item>mcrypt_get_block_size</item>\n      <item>mcrypt_get_cipher_name</item>\n      <item>mcrypt_get_iv_size</item>\n      <item>mcrypt_get_key_size</item>\n      <item>mcrypt_list_algorithms</item>\n      <item>mcrypt_list_modes</item>\n      <item>mcrypt_module_close</item>\n      <item>mcrypt_module_get_algo_block_size</item>\n      <item>mcrypt_module_get_algo_key_size</item>\n      <item>mcrypt_module_get_supported_key_sizes</item>\n      <item>mcrypt_module_is_block_algorithm</item>\n      <item>mcrypt_module_is_block_algorithm_mode</item>\n      <item>mcrypt_module_is_block_mode</item>\n      <item>mcrypt_module_open</item>\n      <item>mcrypt_module_self_test</item>\n      <item>mcrypt_ofb</item>\n      <item>mssql_bind</item>\n      <item>mssql_close</item>\n      <item>mssql_connect</item>\n      <item>mssql_data_seek</item>\n      <item>mssql_execute</item>\n      <item>mssql_fetch_array</item>\n      <item>mssql_fetch_assoc</item>\n      <item>mssql_fetch_batch</item>\n      <item>mssql_fetch_field</item>\n      <item>mssql_fetch_object</item>\n      <item>mssql_fetch_row</item>\n      <item>mssql_field_length</item>\n      <item>mssql_field_name</item>\n      <item>mssql_field_seek</item>\n      <item>mssql_field_type</item>\n      <item>mssql_free_result</item>\n      <item>mssql_free_statement</item>\n      <item>mssql_get_last_message</item>\n      <item>mssql_guid_string</item>\n      <item>mssql_init</item>\n      <item>mssql_min_error_severity</item>\n      <item>mssql_min_message_severity</item>\n      <item>mssql_next_result</item>\n      <item>mssql_num_fields</item>\n      <item>mssql_num_rows</item>\n      <item>mssql_pconnect</item>\n      <item>mssql_query</item>\n      <item>mssql_result</item>\n      <item>mssql_rows_affected</item>\n      <item>mssql_select_db</item>\n      <item>mysql_affected_rows</item>\n      <item>mysql_client_encoding</item>\n      <item>mysql_close</item>\n      <item>mysql_connect</item>\n      <item>mysql_create_db</item>\n      <item>mysql_data_seek</item>\n      <item>mysql_db_name</item>\n      <item>mysql_db_query</item>\n      <item>mysql_drop_db</item>\n      <item>mysql_errno</item>\n      <item>mysql_error</item>\n      <item>mysql_escape_string</item>\n      <item>mysql_fetch_array</item>\n      <item>mysql_fetch_assoc</item>\n      <item>mysql_fetch_field</item>\n      <item>mysql_fetch_lengths</item>\n      <item>mysql_fetch_object</item>\n      <item>mysql_fetch_row</item>\n      <item>mysql_field_flags</item>\n      <item>mysql_field_len</item>\n      <item>mysql_field_name</item>\n      <item>mysql_field_seek</item>\n      <item>mysql_field_table</item>\n      <item>mysql_field_type</item>\n      <item>mysql_free_result</item>\n      <item>mysql_get_client_info</item>\n      <item>mysql_get_host_info</item>\n      <item>mysql_get_proto_info</item>\n      <item>mysql_get_server_info</item>\n      <item>mysql_info</item>\n      <item>mysql_insert_id</item>\n      <item>mysql_list_dbs</item>\n      <item>mysql_list_fields</item>\n      <item>mysql_list_processes</item>\n      <item>mysql_list_tables</item>\n      <item>mysql_num_fields</item>\n      <item>mysql_num_rows</item>\n      <item>mysql_pconnect</item>\n      <item>mysql_ping</item>\n      <item>mysql_query</item>\n      <item>mysql_real_escape_string</item>\n      <item>mysql_result</item>\n      <item>mysql_select_db</item>\n      <item>mysql_set_charset</item>\n      <item>mysql_stat</item>\n      <item>mysql_tablename</item>\n      <item>mysql_thread_id</item>\n      <item>mysql_unbuffered_query</item>\n      <item>mysqli_disable_reads_from_master</item>\n      <item>mysqli_disable_rpl_parse</item>\n      <item>mysqli_enable_reads_from_master</item>\n      <item>mysqli_enable_rpl_parse</item>\n      <item>mysqli_master_query</item>\n      <item>mysqli_rpl_parse_enabled</item>\n      <item>mysqli_rpl_probe</item>\n      <item>mysqli_rpl_query_type</item>\n      <item>mysqli_send_query</item>\n      <item>mysqli_slave_query</item>\n      <item>ocifetchinto</item>\n      <item>php_check_syntax</item>\n      <item>png2wbmp</item>\n      <item>read_exif_data</item>\n      <item>session_is_registered</item>\n      <item>session_register</item>\n      <item>session_unregister</item>\n      <item>set_magic_quotes_runtime</item>\n      <item>set_socket_blocking</item>\n      <item>split</item>\n      <item>spliti</item>\n      <item>sql_regcase</item>\n\n      <!-- Keywords -->\n      <item>var</item>\n\n      <!-- Constants -->\n      <item>OCI_DEFAULT</item>\n      <item>OCI_D_FILE</item>\n      <item>OCI_D_LOB</item>\n      <item>OCI_D_ROWID</item>\n      <item>OCI_EXACT_FETCH</item>\n      <item>OCI_SYSDATE</item>\n    </list>\n\n    <contexts>\n      <context name=\"start\" lineEndContext=\"#stay\" attribute=\"Normal Text\">\n        <RegExpr context=\"phpsource\" attribute=\"Keyword\" String=\"&lt;\\?(?:=|php)?\" insensitive=\"true\" />\n        <StringDetect attribute=\"Keyword\" context=\"#pop\" String=\"?&gt;\" />\n      </context>\n      <context name=\"phpsource\" attribute=\"PHP Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <StringDetect attribute=\"Keyword\" context=\"#pop\" String=\"?&gt;\" lookAhead=\"true\" />\n\n        <!-- Alternate PHP Block Syntax\n          -  http://www.php.net/manual/en/control-structures.alternative-syntax.php\n          -\n          -  We must treat the ternary and case/default statements specially so that the : in those can be\n          -  ignored.  Then otherwise we treat the : as a block start, and the 5 different end statements as\n          -  a block end.\n          -\n          -  The ternary and case/default switch to a context which short-circuits the : detection and\n          -  just pops back to this context instead of starting a block.\n          -\n          -  We can not use case/default as starting a block because they can be terminated by break. return\n          -  or not at all, making it impossible to determine where the block should end.\n          -\n          -  Additionally the paamayim nekudotayim (::) must not start a subcontext that is never terminated.\n          -->\n\n        <DetectChar attribute=\"Other\" context=\"ternary\" char=\"?\" />\n        <RegExpr attribute=\"Keyword\" context=\"case\"  String=\"(case|default)(\\s|:|$)\" />\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\":\" char1=\":\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\":\" beginRegion=\"Alternate Block\" />\n        <RegExpr attribute=\"Control Structures\" context=\"#stay\" String=\"endif|endwhile|endfor|endforeach|endswitch\" endRegion=\"Alternate Block\" />\n        <!--/ Alternate PHP Block Syntax -->\n\n        <DetectChar attribute=\"Comment\" context=\"onelinecomment\" char=\"#\" />\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"onelinecomment\" char=\"/\" char1=\"/\" />\n        <Detect2Chars attribute=\"Comment\" context=\"twolinecomment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\" />\n        <keyword attribute=\"Error\" context=\"#stay\" String=\"deprecated\"/>\n        <keyword attribute=\"Control Structures\" context=\"#stay\" String=\"control structures\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Classes\" context=\"#stay\" String=\"predefined-classes\"/>\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"@\" />\n        <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n        <keyword attribute=\"Special method\" context=\"#stay\" String=\"special_methods\" />\n        <keyword attribute=\"Library Constant\" context=\"#stay\" String=\"constants\"/>\n        <RegExpr attribute=\"Constant\" context=\"#stay\" String=\"\\b[A-Z_][A-Z_0-9]*\\b\"/>\n\n        <!-- Type casts -->\n        <RegExpr attribute=\"Types\" context=\"#stay\" String=\"\\(\\s*(&types;)\\s*\\)\"/>\n\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"doublequotestring\" char=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"backquotestring\" char=\"`\" />\n        <DetectChar attribute=\"String\" context=\"singlequotestring\" char=\"'\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"htmlheredoc\" String=\"&lt;&lt;&lt;&quot;((EO)?HTML)&quot;\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"cssheredoc\" String=\"&lt;&lt;&lt;&quot;((EO)?CSS)&quot;\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"javascriptheredoc\" String=\"&lt;&lt;&lt;&quot;((EO)?JAVASCRIPT)&quot;\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"mysqlheredoc\" String=\"&lt;&lt;&lt;&quot;((EO)?MYSQL)&quot;\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"heredoc\" String=\"&lt;&lt;&lt;&quot;([A-Za-z_][A-Za-z0-9_]*)&quot;\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"htmlheredoc\" String=\"&lt;&lt;&lt;((EO)?HTML)\\b\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"cssheredoc\" String=\"&lt;&lt;&lt;((EO)?CSS)\\b\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"javascriptheredoc\" String=\"&lt;&lt;&lt;((EO)?JAVASCRIPT)\\b\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"mysqlheredoc\" String=\"&lt;&lt;&lt;((EO)?MYSQL)\\b\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"heredoc\" String=\"&lt;&lt;&lt;([A-Za-z_][A-Za-z0-9_]*)\" beginRegion=\"Heredoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"htmlnowdoc\" String=\"&lt;&lt;&lt;'((EO)?HTML)'\" beginRegion=\"Nowdoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"cssnowdoc\" String=\"&lt;&lt;&lt;'((EO)?CSS)'\" beginRegion=\"Nowdoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"javascriptnowdoc\" String=\"&lt;&lt;&lt;'((EO)?JAVASCRIPT)'\" beginRegion=\"Nowdoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"mysqlnowdoc\" String=\"&lt;&lt;&lt;'((EO)?MYSQL)'\" beginRegion=\"Nowdoc\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"nowdoc\" String=\"&lt;&lt;&lt;'([A-Za-z_][A-Za-z0-9_]*)'\" beginRegion=\"Nowdoc\" />\n        <keyword attribute=\"Special Variable\" context=\"#stay\" String=\"special-variables\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\" />\n        <RegExpr attribute=\"String\" context=\"#stay\" String=\"[0123456789]*\\.\\.\\.[0123456789]*\" />\n        <RegExpr attribute=\"Binary\" context=\"#stay\" String=\"0[bB][01]+\" />\n        <HlCOct attribute=\"Octal\" context=\"#stay\" />\n        <HlCHex attribute=\"Hex\" context=\"#stay\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <AnyChar attribute=\"Other\" context=\"#stay\" String=\";(),[]\" />\n      </context>\n\n      <context name=\"ternary\" attribute=\"PHP Text\" lineEndContext=\"#stay\">\n        <!-- the paamayim nekudotayim (::) must not start a subcontext that is never terminated. -->\n        <Detect2Chars attribute=\"Normal Text\" context=\"#stay\" char=\":\" char1=\":\" />\n        <DetectChar attribute=\"Other\" char=\":\" context=\"#pop\" />\n        <IncludeRules context=\"phpsource\" />\n      </context>\n\n      <context name=\"case\" attribute=\"PHP Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"ternary\" />\n      </context>\n\n      <context name=\"onelinecomment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <StringDetect attribute=\"Keyword\" context=\"#pop\" lookAhead=\"true\" String=\"?&gt;\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context name=\"twolinecomment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context name=\"doublebackquotestringcommon\" attribute=\"String\" lineEndContext=\"#stay\">\n        <!-- Common rules for double quoted strings and backticks (execution operator) URL:\n              http://de3.php.net/manual/en/language.types.string.php#language.types.string.syntax.double -->\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"n\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"r\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"t\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"v\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"f\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"$\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\[0-7]{1,3}\" />\n        <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\x[0-9A-Fa-f]{1,2}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[[a-zA-Z0-9_]*\\])*\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[[a-zA-Z0-9_]*\\])*\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\{\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[([0-9]*|&quot;[^&quot;]*&quot;|\\$[a-zA-Z]*)|'[^']*'|\\])*(-&gt;[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[[a-zA-Z0-9_]*\\])*(\\[([0-9]*|&quot;[a-zA-Z_]*&quot;)|'[a-zA-Z_]*'|\\]|\\[.*\\])*)*\\}\" />\n      </context>\n      <context name=\"backquotestring\" attribute=\"String\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"doublebackquotestringcommon\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"`\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"`\" />\n      </context>\n      <context name=\"doublequotestring\" attribute=\"String\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"doublebackquotestringcommon\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context name=\"singlequotestring\" attribute=\"String\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"'\" />\n        <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n      <context name=\"htmlheredoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Heredoc\" />\n        <IncludeRules context=\"commonheredoc\" />\n        <IncludeRules context=\"##HTML\" />\n      </context>\n      <context name=\"cssheredoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Heredoc\" />\n        <IncludeRules context=\"commonheredoc\" />\n        <IncludeRules context=\"##CSS\" />\n      </context>\n      <context name=\"mysqlheredoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Heredoc\" />\n        <IncludeRules context=\"commonheredoc\" />\n        <IncludeRules context=\"##SQL (MySQL)\" />\n      </context>\n      <context name=\"javascriptheredoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Heredoc\" />\n        <IncludeRules context=\"commonheredoc\" />\n        <IncludeRules context=\"Normal##JavaScript\" />\n      </context>\n      <context name=\"heredoc\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Heredoc\" />\n        <IncludeRules context=\"commonheredoc\" />\n      </context>\n      <context name=\"commonheredoc\" attribute=\"String\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[[a-zA-Z0-9_]*\\])*\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[[a-zA-Z0-9_]*\\])*\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\{\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[([0-9]*|&quot;[a-zA-Z_]*&quot;)|'[a-zA-Z_]*'|\\])*(-&gt;[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[[a-zA-Z0-9_]*\\])*(\\[([0-9]*|&quot;[a-zA-Z_]*&quot;)|'[a-zA-Z_]*'|\\])*)*\\}\" />\n      </context>\n      <context name=\"htmlnowdoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Nowdoc\" />\n        <IncludeRules context=\"commonnowdoc\" />\n        <IncludeRules context=\"##HTML\" />\n      </context>\n      <context name=\"cssnowdoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Nowdoc\" />\n        <IncludeRules context=\"commonnowdoc\" />\n        <IncludeRules context=\"##CSS\" />\n      </context>\n      <context name=\"mysqlnowdoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Nowdoc\" />\n        <IncludeRules context=\"commonnowdoc\" />\n        <IncludeRules context=\"##SQL (MySQL)\" />\n      </context>\n      <context name=\"javascriptnowdoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Nowdoc\" />\n        <IncludeRules context=\"commonnowdoc\" />\n        <IncludeRules context=\"Normal##JavaScript\" />\n      </context>\n      <context name=\"nowdoc\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Backslash Code\" context=\"#pop\" String=\"^%1;?$\" dynamic=\"true\" endRegion=\"Nowdoc\" />\n        <IncludeRules context=\"commonnowdoc\" />\n      </context>\n      <context name=\"commonnowdoc\" attribute=\"String\" lineEndContext=\"#stay\">\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"PHP Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Classes\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n      <itemData name=\"Special method\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"Binary\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Special Variable\" defStyleNum=\"dsKeyword\" color=\"#5555FF\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" spellChecking=\"false\" />\n      <itemData name=\"Variable\" defStyleNum=\"dsKeyword\" color=\"#5555FF\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" spellChecking=\"false\" />\n      <itemData name=\"Library Constant\" defStyleNum=\"dsKeyword\" bold=\"1\" spellChecking=\"false\" />\n      <itemData name=\"Constant\" defStyleNum=\"dsKeyword\" bold=\"0\" spellChecking=\"false\" />\n      <itemData name=\"Control Structures\" defStyleNum=\"dsKeyword\" color=\"#A1A100\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" spellChecking=\"false\" />\n      <itemData name=\"Backslash Code\" defStyleNum=\"dsKeyword\" color=\"#0F0F8F\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" spellChecking=\"false\" />\n      <itemData name=\"Other\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n\n      <itemData name=\"Types\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\"\" additionalDeliminator=\"@\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/picsrc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- kate: space-indent on; indent-width 2; -->\n\n<!-- Microchip PIC assembler syntaxfile for gpasm/mpasm assembler by\n  * Original author: Alain GIBAUD (alain.gibaud@univ-valenciennes.fr)\n  * Small modifications for the new DTD: Joseph Wenninger <jowenn@kde.org>\n  * Updated for 16-bit devices, etc.: Laurence Withers <lwithers@users.sf.net>\n-->\n\n<language name=\"PicAsm\" version=\"4\" kateversion=\"2.3\" section=\"Assembler\" extensions=\"*.src;*.SRC;*.asm;*.ASM;*.pic;*.PIC\" mimetype=\"text/x-PicSrc;text/x-PicHdr\" author=\"Alain GIBAUD (alain.gibaud@univ-valenciennes.fr)\" license=\"LGPL\">\n  \n  <highlighting>\n    <list name=\"directives\">\n      <item>__BADRAM</item>\n      <item>__CONFIG</item>\n      <item>__IDLOCS</item>\n      <item>__MAXRAM</item>\n      \n      <item>cblock</item>\n      <item>constant</item>\n      <item>da</item>\n      <item>data</item>\n      <item>db</item>\n      <item>de</item>\n      <item>dt</item>\n      <item>dw</item>\n      <item>endc</item>\n      <item>endm</item>\n      <item>equ</item>\n      <item>error</item>\n      <item>errorlevel</item>\n      <item>exitm</item>\n      <item>fill</item>\n      <item>list</item>\n      <item>local</item>\n      <item>macro</item>\n      <item>messg</item>\n      <item>noexpand</item>\n      <item>nolist</item>\n      <item>org</item>\n      <item>page</item>\n      <item>processor</item>\n      <item>radix</item>\n      <item>res</item>\n      <item>set</item>\n      <item>space</item>\n      <item>subtitle</item>\n      <item>title</item>\n      <item>variable</item>\n      <item>end</item>\n      \n      <item>CBLOCK</item>\n      <item>CONSTANT</item>\n      <item>DA</item>\n      <item>DATA</item>\n      <item>DB</item>\n      <item>DE</item>\n      <item>DT</item>\n      <item>DW</item>\n      <item>ENDC</item>\n      <item>ENDM</item>\n      <item>EQU</item>\n      <item>ERROR</item>\n      <item>ERRORLEVEL</item>\n      <item>EXITM</item>\n      <item>FILL</item>\n      <item>LIST</item>\n      <item>LOCAL</item>\n      <item>MACRO</item>\n      <item>MESSG</item>\n      <item>NOEXPAND</item>\n      <item>NOLIST</item>\n      <item>ORG</item>\n      <item>PAGE</item>\n      <item>PROCESSOR</item>\n      <item>RADIX</item>\n      <item>RES</item>\n      <item>SET</item>\n      <item>SPACE</item>\n      <item>SUBTITLE</item>\n      <item>TITLE</item>\n      <item>VARIABLE</item>\n      <item>END</item>\n    </list>\n    \n    <list name=\"conditional\">\n      <item>if</item>\n      <item>else</item>\n      <item>idef</item>\n      <item>ifndef</item>\n      <item>endif</item>\n      <item>while</item>\n      <item>include</item>\n      <item>endw</item>\n      <item>{</item>\n      <item>}</item>\n    </list>\n    \n    <list name=\"gpasm_macro\">\n      <item>addcf</item>\n      <item>b</item>\n      <item>clrc</item>\n      <item>clrz</item>\n      <item>setc</item>\n      <item>setz</item>\n      <item>movfw</item>\n      <item>skpc</item>\n      <item>skpz</item>\n      <item>skpnc</item>\n      <item>skpnz</item>\n      <item>subcf</item>\n      <item>tstf</item>\n      \n      <item>ADDCF</item>\n      <item>B</item>\n      <item>CLRC</item>\n      <item>CLRZ</item>\n      <item>SETC</item>\n      <item>SETZ</item>\n      <item>MOVFW</item>\n      <item>SKPC</item>\n      <item>SKPZ</item>\n      <item>SKPNC</item>\n      <item>SKPNZ</item>\n      <item>SUBCF</item>\n      <item>TSTF</item>\n    </list>\n    \n    <list name=\"instructions\">\n      <item>addlw</item>\n      <item>addwf</item>\n      <item>addwfc</item>\n      <item>andlw</item>\n      <item>andwf</item>\n      <item>bc</item>\n      <item>bcf</item>\n      <item>bn</item>\n      <item>bnc</item>\n      <item>bnov</item>\n      <item>bnz</item>\n      <item>bov</item>\n      <item>bra</item>\n      <item>bsf</item>\n      <item>btg</item>\n      <item>bz</item>\n      <item>btfsc</item>\n      <item>btfss</item>\n      <item>call</item>\n      <item>clrf</item>\n      <item>clrw</item>\n      <item>clrwdt</item>\n      <item>comf</item>\n      <item>cpfseq</item>\n      <item>cpfslt</item>\n      <item>cpfsgt</item>\n      <item>daw</item>\n      <item>decf</item>\n      <item>dcfsnz</item>\n      <item>decfsz</item>\n      <item>goto</item>\n      <item>incf</item>\n      <item>incfsz</item>\n      <item>infsnz</item>\n      <item>iorlw</item>\n      <item>iorwf</item>\n      <item>lfsr</item>\n      <item>movf</item>\n      <item>movff</item>\n      <item>movlb</item>\n      <item>movlw</item>\n      <item>movwf</item>\n      <item>mullw</item>\n      <item>mulwf</item>\n      <item>negf</item>\n      <item>nop</item>\n      <item>option</item>\n      <item>pop</item>\n      <item>push</item>\n      <item>rcall</item>\n      <item>reset</item>\n      <item>retfie</item>\n      <item>retlw</item>\n      <item>return</item>\n      <item>rlcf</item>\n      <item>rlf</item>\n      <item>rlncf</item>\n      <item>rrcf</item>\n      <item>rrf</item>\n      <item>rrncf</item>\n      <item>setf</item>\n      <item>sleep</item>\n      <item>subfwb</item>\n      <item>sublw</item>\n      <item>subwf</item>\n      <item>subwfb</item>\n      <item>swapf</item>\n      <item>tblrd</item>\n      <item>tblwt</item>\n      <item>tstfsz</item>\n      <item>xorlw</item>\n      <item>xorwf</item>\n      \n      <item>ADDLW</item>\n      <item>ADDWF</item>\n      <item>ADDWFC</item>\n      <item>ANDLW</item>\n      <item>ANDWF</item>\n      <item>BC</item>\n      <item>BCF</item>\n      <item>BN</item>\n      <item>BNC</item>\n      <item>BNOV</item>\n      <item>BNZ</item>\n      <item>BOV</item>\n      <item>BRA</item>\n      <item>BSF</item>\n      <item>BTG</item>\n      <item>BZ</item>\n      <item>BTFSC</item>\n      <item>BTFSS</item>\n      <item>CALL</item>\n      <item>CLRF</item>\n      <item>CLRW</item>\n      <item>CLRWDT</item>\n      <item>COMF</item>\n      <item>CPFSEQ</item>\n      <item>CPFSLT</item>\n      <item>CPFSGT</item>\n      <item>DAW</item>\n      <item>DCFSNZ</item>\n      <item>DECF</item>\n      <item>DECFSZ</item>\n      <item>GOTO</item>\n      <item>INCF</item>\n      <item>INCFSZ</item>\n      <item>INFSNZ</item>\n      <item>IORLW</item>\n      <item>IORWF</item>\n      <item>LFSR</item>\n      <item>MOVF</item>\n      <item>MOVFF</item>\n      <item>MOVLB</item>\n      <item>MOVLW</item>\n      <item>MOVWF</item>\n      <item>MULLW</item>\n      <item>MULWF</item>\n      <item>NEGF</item>\n      <item>NOP</item>\n      <item>OPTION</item>\n      <item>POP</item>\n      <item>PUSH</item>\n      <item>RCALL</item>\n      <item>RESET</item>\n      <item>RETFIE</item>\n      <item>RETLW</item>\n      <item>RETURN</item>\n      <item>RLCF</item>\n      <item>RLF</item>\n      <item>RLNCF</item>\n      <item>RRCF</item>\n      <item>RRF</item>\n      <item>RRNCF</item>\n      <item>SETF</item>\n      <item>SLEEP</item>\n      <item>SUBFWB</item>\n      <item>SUBLW</item>\n      <item>SUBWF</item>\n      <item>SUBWFB</item>\n      <item>SWAPF</item>\n      <item>TBLRD</item>\n      <item>TBLWT</item>\n      <item>TSTFSZ</item>\n      <item>XORLW</item>\n      <item>XORWF</item>\n    </list>\n    \n    <list name=\"instruction_attr\">\n      <item>A</item>\n      <item>ACCESS</item>\n      <item>BANKED</item>\n      <item>W</item>\n      <item>F</item>\n    </list>\n    \n    <contexts>\n      \n      <!-- The main ('normal') context -->\n      \n      <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Directives\" context=\"#stay\" String=\"directives\"/>\n        <keyword attribute=\"Instructions\" context=\"#stay\" String=\"instructions\"/>\n        <keyword attribute=\"InstructionAttr\" context=\"#stay\" String=\"instruction_attr\"/>\n        <keyword attribute=\"Preprocessor\" context=\"#stay\" String=\"conditional\"/>\n        <keyword attribute=\"GPASM-macros\" context=\"#stay\" String=\"gpasm_macro\"/>\n        <HlCHex attribute=\"Based Numbers\" context=\"#stay\"/>\n        <RegExpr attribute=\"Based Numbers\" context=\"#stay\" String=\"([ \\t,][0-9A-F]+H[ \\t,])\" insensitive=\"true\" />\n        <RegExpr attribute=\"Based Numbers\" context=\"#stay\" String=\"([ \\t,][0-9A-F]+H)$\" insensitive=\"true\" />\n        <RegExpr attribute=\"Based Numbers\" context=\"#stay\" String=\"([ \\t,][0-9]+D)\" insensitive=\"true\" />\n        <RegExpr attribute=\"Based Numbers\" context=\"#stay\" String=\"([ \\t,][0-7]+O)\" insensitive=\"true\" />\n        <RegExpr attribute=\"Based Numbers\" context=\"#stay\" String=\"([ \\t,][0-1]+B)\" insensitive=\"true\" />\n        <Int attribute=\"Unbased Numbers\" context=\"#stay\" />\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Char\" context=\"ASCIIChar\" char=\"A\" char1=\"'\" />\n        <Detect2Chars attribute=\"Char\" context=\"ASCIIChar\" char=\"a\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"binaryDigits\"  char=\"B\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"binaryDigits\"  char=\"b\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"hexDigits\"  char=\"H\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"hexDigits\"  char=\"h\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"octDigits\"  char=\"O\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"octDigits\"  char=\"o\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"decimalDigits\"  char=\"D\" char1=\"'\" />\n        <Detect2Chars attribute=\"Based Numbers\" context=\"decimalDigits\"  char=\"d\" char1=\"'\" />\n        <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n        <DetectChar attribute=\"Comment\" context=\"comment\" char=\";\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"-/*%+=&gt;&lt;&amp;|^!~\" />\n        <StringDetect attribute=\"Preprocessor\" context=\"#stay\" String=\"#define\" />\n        <StringDetect attribute=\"Preprocessor\" context=\"#stay\" String=\"#undefine\" />\n        <StringDetect attribute=\"Preprocessor\" context=\"#stay\" String=\"#v\" />\n      </context>\n      \n      \n      \n      <!-- Additional contexts -->\n      \n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      \n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Instructions\" context=\"#stay\"\n                  String=\"(INPUT|OUTPUT|PARAMETERS|AUTHOR|EMAIL)\" />\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      \n      \n      \n      <!-- Quoted numbers -->\n      \n      <context name=\"decimalDigits\" attribute=\"Based Numbers\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Based Numbers\" context=\"#pop\" char=\"'\"/>\n        <RegExpr attribute=\"Error\" context=\"QuotedNumError\" String=\"\\D\" />\n      </context>\n      \n      <context name=\"binaryDigits\" attribute=\"Based Numbers\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Based Numbers\" context=\"#pop\" char=\"'\"/>\n        <RegExpr attribute=\"Error\" context=\"QuotedNumError\" String=\"[^0-1]\" />\n      </context>\n      \n      <context name=\"hexDigits\" attribute=\"Based Numbers\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Based Numbers\" context=\"#pop\" char=\"'\"/>\n        <RegExpr attribute=\"Error\" context=\"QuotedNumError\" String=\"[^0-9A-Fa-f]\" />\n      </context>\n      \n      <context name=\"octDigits\" attribute=\"Based Numbers\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Based Numbers\" context=\"#pop\" char=\"'\"/>\n        <RegExpr attribute=\"Error\" context=\"QuotedNumError\" String=\"[^0-7]\" />\n      </context>\n      \n      <context name=\"ASCIIChar\" attribute=\"Char\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Char\" context=\"#pop\" char=\"'\"/>\n        <RegExpr attribute=\"Error\" context=\"QuotedNumError\" String=\".[^']\" />\n      </context>\n      \n      <context name=\"QuotedNumError\" attribute=\"Error\" lineEndContext=\"#pop#pop\">\n        <DetectChar attribute=\"Error\" context=\"#pop#pop\" char=\"'\" />\n      </context>\n      \n    </contexts>\n    \n    \n    <itemDatas>\n      <itemData name=\"Normal Text\"      defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Directives\"       defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Preprocessor\"     defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Instructions\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"InstructionAttr\"  defStyleNum=\"dsNormal\" color=\"#000080\" selColor=\"#000080\" bold=\"0\" italic=\"1\"/>\n      <itemData name=\"Unbased Numbers\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Char\"             defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"           defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"          defStyleNum=\"dsComment\" />\n      <itemData name=\"Symbol\"           defStyleNum=\"dsNormal\" color=\"#FF0000\" selColor=\"#083194\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Based Numbers\"    defStyleNum=\"dsBaseN\" />\n      <itemData name=\"GPASM-macros\"     defStyleNum=\"dsNormal\" color=\"#000000\" selColor=\"#000000\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"Alert\"            defStyleNum=\"dsAlert\" />\n      <itemData name=\"Error\"            defStyleNum=\"dsError\" />\n    </itemDatas>\n    \n  </highlighting>\n  \n  \n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\";\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n  \n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Pig syntax highlighting v3.0, Copyright © 2012 Johannes Schwenk, johannes.schwenk@adition.com -->\n<language name=\"Pig\" version=\"8\" kateversion=\"3.4\" section=\"Scripts\" extensions=\"*.pig\" mimetype=\"application/x-pig;text/x-pig\" casesensitive=\"0\" author=\"Johannes Schwenk, johannes.schwenk@adition.com\" license=\"GPL\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>load</item>\n\t\t\t<item>store</item>\n\t\t\t<item>filter</item>\n\t\t\t<item>foreach</item>\n\t\t\t<item>order</item>\n\t\t\t<item>arrange</item>\n\t\t\t<item>distinct</item>\n\t\t\t<item>cogroup</item>\n\t\t\t<item>join</item>\n\t\t\t<item>cross</item>\n\t\t\t<item>union</item>\n\t\t\t<item>onschema</item>\n\t\t\t<item>split</item>\n\t\t\t<item>into</item>\n\t\t\t<item>if</item>\n\t\t\t<item>all</item>\n\t\t\t<item>any</item>\n\t\t\t<item>as</item>\n\t\t\t<item>by</item>\n\t\t\t<item>using</item>\n\t\t\t<item>inner</item>\n\t\t\t<item>outer</item>\n\t\t\t<item>parallel</item>\n\t\t\t<item>group</item>\n\t\t\t<item>continuously</item>\n\t\t\t<item>window</item>\n\t\t\t<item>tuples</item>\n\t\t\t<item>generate</item>\n\t\t\t<item>eval</item>\n\t\t\t<item>define</item>\n\t\t\t<item>returns</item>\n\t\t\t<item>input</item>\n\t\t\t<item>output</item>\n\t\t\t<item>ship</item>\n\t\t\t<item>cache</item>\n\t\t\t<item>stream</item>\n\t\t\t<item>through</item>\n\t\t\t<item>seconds</item>\n\t\t\t<item>minutes</item>\n\t\t\t<item>hours</item>\n\t\t\t<item>asc</item>\n\t\t\t<item>desc</item>\n\t\t\t<item>null</item>\n\t\t\t<item>left</item>\n\t\t\t<item>right</item>\n\t\t\t<item>full</item>\n\t\t</list>\n\t\t<list name=\"grunts\">\n\t\t\t<item>cat</item>\n\t\t\t<item>cd</item>\n\t\t\t<item>cp</item>\n\t\t\t<item>copyFromLocal</item>\n\t\t\t<item>copyToLocal</item>\n\t\t\t<item>define</item>\n\t\t\t<item>dump</item>\n\t\t\t<item>illustrate</item>\n\t\t\t<item>describe</item>\n\t\t\t<item>explain</item>\n\t\t\t<item>exec</item>\n\t\t\t<item>help</item>\n\t\t\t<item>kill</item>\n\t\t\t<item>ls</item>\n\t\t\t<item>mv</item>\n\t\t\t<item>mkdir</item>\n\t\t\t<item>pwd</item>\n\t\t\t<item>quit</item>\n\t\t\t<item>register</item>\n\t\t\t<item>import</item>\n\t\t\t<item>rm</item>\n\t\t\t<item>set</item>\n\t\t</list>\n\t\t<list name=\"types\">\n\t\t\t<item>chararray</item>\n\t\t\t<item>bytearray</item>\n\t\t\t<item>int</item>\n\t\t\t<item>long</item>\n\t\t\t<item>float</item>\n\t\t\t<item>double</item>\n\t\t\t<item>tuple</item>\n\t\t\t<item>bag</item>\n\t\t\t<item>map</item>\n\t\t</list>\n\t\t<list name=\"operators\">\n\t\t\t<item>and</item>\n\t\t\t<item>is</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t\t<item>eq</item>\n\t\t\t<item>neq</item>\n\t\t\t<item>gt</item>\n\t\t\t<item>lt</item>\n\t\t\t<item>gte</item>\n\t\t\t<item>lte</item>\n\t\t\t<item>matches</item>\n\t\t</list>\n\t\t<list name=\"functions\">\n\t\t\t<item>flatten</item>\n\t\t\t<item>sum</item>\n\t\t\t<item>count</item>\n\t\t\t<item>min</item>\n\t\t\t<item>max</item>\n\t\t\t<item>avg</item>\n\t\t\t<item>arity</item>\n\t\t\t<item>tokenize</item>\n\t\t\t<item>diff</item>\n\t\t\t<item>size</item>\n\t\t\t<item>concat</item>\n\t\t\t<item>BinStorage</item>\n\t\t\t<item>PigStorage</item>\n\t\t\t<item>TextLoader</item>\n\t\t\t<item>PigDump</item>\n\t\t\t<item>IsEmpty</item>\t\t\t\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Operator\" String=\"operators\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Type\" String=\"types\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Grunt\" String=\"grunts\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Function\" String=\"functions\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Statement\" String=\"[%](declare|default)\" context=\"#stay\"/>\n\t\t\t\t<Float attribute=\"Float\" context=\"#stay\" />\n\t\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n                <Int attribute=\"Int\" context=\"Int Suffixes\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" char=\"/\" char1=\"*\" context=\"Multiline comment\" beginRegion=\"Comment\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"'\" context=\"Single A-string\"/>\n<!--\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"Single Q-string\"/>-->\n\t\t\t\t<Detect2Chars attribute=\"Comment\" char=\"-\" char1='-' context=\"Dash comment\"/>\n\t\t\t\t<IncludeRules context=\"Parameter variable\" />\n\t\t\t</context>\n\n            <context name=\"Int Suffixes\" attribute=\"Int\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t\t<StringDetect attribute=\"Int\" String=\"L\" insensitive=\"true\" context=\"#pop\"/>\n            </context>\n\n\t\t\t<context name=\"Parameter variable\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectSpaces />\n\t\t\t\t<RegExpr attribute=\"Parameter\" String=\"[$][a-zA-Z0-9_]+\" context=\"#stay\" />\n\t\t\t</context>\n\t\n\t\t\t<context name=\"Single A-string\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"Parameter variable\" />\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"'\" context=\"#pop\"/>\n\t\t\t</context>\n\n<!--\t\t\t<context name=\"Single Q-string\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"Parameter variable\" />\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\"/>\n\t\t\t</context>-->\n\n\t\t\t<context name=\"Dash comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<LineContinue attribute=\"Comment\" context=\"#stay\"/>\n\t\t\t\t<DetectSpaces />\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t\t<DetectIdentifier />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Multiline comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces />\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t\t<DetectIdentifier />\n\t\t\t</context>\n\n\t\t\t\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Statement\" defStyleNum=\"dsOthers\" bold=\"1\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Operator\" defStyleNum=\"dsNormal\" bold=\"1\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Type\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Grunt\" defStyleNum=\"dsOthers\" color=\"#BA8200\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Function\" defStyleNum=\"dsDataType\" bold=\"1\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Int\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Hex\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Octal\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"String Char\" defStyleNum=\"dsSpecialChar\"/>\n\t\t\t<itemData name=\"Parameter\" defStyleNum=\"dsOthers\" color=\"#25A000\" selColor=\"#FFFFFF\" spellChecking=\"false\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<folding indentationsensitive=\"1\" />\n\t\t<emptyLines>\n\t\t\t<emptyLine regexpr=\"(?:\\s+|\\s*#.*)\"/>\n\t\t</emptyLines>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"--\" position=\"afterwhitespace\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"0\" />\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pike.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- FIXME: Find a way to prevent ranges (e.g. [1..] or [0..99]) from matching as floats. -pp -->\n<language name=\"Pike\" version=\"2\" kateversion=\"2.4\" section=\"Scripts\" extensions=\"*.pike\" mimetype=\"application/x-pike;text/x-pike\" casesensitive=\"1\" author=\"Paul Pogonyshev\" license=\"\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>break</item>\n      <item>case</item>\n      <item>class</item>\n      <item>continue</item>\n      <item>default</item>\n      <item>do</item>\n      <item>else</item>\n      <item>for</item>\n      <item>foreach</item>\n      <item>if</item>\n      <item>return</item>\n      <item>switch</item>\n      <item>while</item>\n    </list>\n    <list name=\"types\">\n      <item>array</item>\n      <item>float</item>\n      <item>function</item>\n      <item>int</item>\n      <item>mapping</item>\n      <item>mixed</item>\n      <item>multiset></item>\n      <item>object</item>\n      <item>program</item>\n      <item>static</item>\n      <item>string</item>\n      <item>void</item>\n    </list>\n    <list name=\"builtins\">\n      <item>catch</item>\n      <item>gauge</item>\n      <item>sscanf</item>\n      <item>typeof</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t<keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n\t<keyword attribute=\"Builtin Function\" context=\"#stay\" String=\"builtins\"/>\n\t<RegExpr attribute=\"Builtin Function\" context=\"#stay\" String=\"`([\\+\\-\\*/%~&amp;\\|^]|[!=&lt;&gt;]=|&lt;&lt;?|&gt;&gt;?|(\\[\\]|->)=?)\"/>\n\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t<RegExpr attribute=\"Binary\" context=\"#stay\" String=\"0[bB][01]+\"/>\n\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t<Int attribute=\"Decimal\" context=\"#stay\"/>\n\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Brace\"/>\n\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Brace\"/>\n\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t<Detect2Chars attribute=\"Comment\" context=\"Line Comment\" char=\"/\" char1=\"/\"/>\n\t<Detect2Chars attribute=\"Comment\" context=\"Line Comment\" char=\"#\" char1=\"!\"/>\n\t<Detect2Chars attribute=\"Comment\" context=\"Block Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t<RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\" beginRegion=\"Outscoped\" firstNonSpace=\"true\"/>\n\t<DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\" firstNonSpace=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n\t<RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\d[0-9]+\"/>\n\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Line Comment\">\n\t<RegExpr attribute=\"Note\" context=\"#stay\" String=\"(FIXME|TODO|NOT(IC)?E):?\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Block Comment\">\n\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t<RegExpr attribute=\"Note\" context=\"#stay\" String=\"(FIXME|TODO|NOT(IC)?E):?\"/>\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n\t<RangeDetect attribute=\"Preprocessor Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n\t<RangeDetect attribute=\"Preprocessor Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n\t<Detect2Chars attribute=\"Comment\" context=\"Line Comment\" char=\"/\" char1=\"/\"/>\n\t<Detect2Chars attribute=\"Comment\" context=\"Block Comment\" char=\"/\" char1=\"*\"/>\n\t<LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\">\n\t<RegExpr attribute=\"Note\" context=\"#stay\" String=\"(FIXME|TODO|NOT(IC)?E):?\"/>\n\t<Detect2Chars attribute=\"Comment\" context=\"Block Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t<RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"Outscoped\" firstNonSpace=\"true\"/>\n\t<RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*(endif|elif|else)\" endRegion=\"Outscoped\" firstNonSpace=\"true\"/>\n      </context>         \n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n\t<Detect2Chars attribute=\"Comment\" context=\"Block Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t<RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"Outscoped\" firstNonSpace=\"true\"/>\n\t<RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"Outscoped\" firstNonSpace=\"true\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"\tdefStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"\t\tdefStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Builtin Function\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Data Type\"\tdefStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"\t\tdefStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Hex\"\t\tdefStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Octal\"\t\tdefStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Binary\"\t\tdefStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"\t\tdefStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"\t\tdefStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"\t\tdefStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"\tdefStyleNum=\"dsChar\"/>\n      <itemData name=\"Comment\"\t\tdefStyleNum=\"dsComment\"/>\n      <itemData name=\"Note\"\t\tdefStyleNum=\"dsAlert\"/>\n      <itemData name=\"Preprocessor\"\tdefStyleNum=\"dsOthers\"/>\n      <itemData name=\"Preprocessor Lib\" defStyleNum=\"dsString\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#!\"/>\n      <comment name=\"singleLine\" start=\"//\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pli.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"PL/I\"\n\t  section=\"Sources\"\n\t  version=\"3\"\n\t  kateversion=\"5.0\"\n\t  extensions=\"*.pli\"\n\t  mimetype=\"text/x-pli\"\n\t  priority=\"8\"\n\t  indenter=\"pli\"\n\t  author=\"Nikolay Kultashev, nkultashev@yandex.ru\"\n\t  >\n  <highlighting>\n    <list name=\"Attributes\">\n      <item>ALIGNED</item>\n      <item>AUTOMATIC</item>\n      <item>BACKWARDS</item>\n      <item>BIN</item>\n      <item>BINARY</item>\n      <item>BIT</item>\n      <item>BUFFERED</item>\n      <item>BUILTIN</item>\n      <item>COMPLEX</item>\n      <item>CONDITION</item>\n      <item>CONNECTED</item>\n      <item>CONTROLLED</item>\n      <item>DEC</item>\n      <item>DECIMAL</item>\n      <item>DIRECT</item>\n      <item>EVENT</item>\n      <item>EXCLUSIVE</item>\n      <item>EXTERNAL</item>\n      <item>FILE</item>\n      <item>FIXED</item>\n      <item>FLOAT</item>\n      <item>INPUT</item>\n      <item>INTERNAL</item>\n      <item>IRREDUCIBLE</item>\n      <item>KEYED</item>\n      <item>LIKE</item>\n      <item>OUTPUT</item>\n      <item>POINTER</item>\n      <item>PRINT</item>\n      <item>REAL</item>\n      <item>RECORD</item>\n      <item>REDUCIBLE</item>\n      <item>SEQUENTIAL</item>\n      <item>STATIC</item>\n      <item>STREAM</item>\n      <item>TASK</item>\n      <item>TRANSIENT</item>\n      <item>UNALIGNED</item>\n      <item>UNBUFFERED</item>\n      <item>UPDATE</item>\n      <item>VARIABLE</item>\n      <item>VAR</item>\n      <item>VARYING</item>\n    </list>\n    <list name=\"Keywords\">\n      <item>A</item>\n      <item>ABS</item>\n      <item>ACOS</item>\n      <item>ACTIVATE</item>\n      <item>ADD</item>\n      <item>ADDR</item>\n      <item>ALIGNED</item>\n      <item>ALL</item>\n      <item>ALLOCATE</item>\n      <item>ALLOCATION</item>\n      <item>ANY</item>\n      <item>AREA</item>\n      <item>ASIN</item>\n      <item>ASMTDLI</item>\n      <item>ASSEMBLER</item>\n      <item>ATAN</item>\n      <item>ATAND</item>\n      <item>ATANH</item>\n      <item>ATTENTION</item>\n      <item>AUTOMATIC</item>\n      <item>B</item>\n      <item>BACKWARDS</item>\n      <item>BASED</item>\n      <item>BEGIN</item>\n      <item>BINARY</item>\n      <item>BINARYVALUE</item>\n      <item>BIT</item>\n      <item>BOOL</item>\n      <item>BUFFERED</item>\n      <item>BUILTIN</item>\n      <item>BY</item>\n      <item>C</item>\n      <item>CALL</item>\n      <item>CEIL</item>\n      <item>CHAR</item>\n      <item>CHARACTER</item>\n      <item>CHARGRAPHIC</item>\n      <item>CHECK</item>\n      <item>CLOSE</item>\n      <item>COBOL</item>\n      <item>COL</item>\n      <item>COLUMN</item>\n      <item>COMPILE</item>\n      <item>COMPILETIME</item>\n      <item>COMPLETION</item>\n      <item>COMPLEX</item>\n      <item>CONDITION</item>\n      <item>CONJG</item>\n      <item>CONNECTED</item>\n      <item>CONTROLLED</item>\n      <item>CONVERSION</item>\n      <item>COPY</item>\n      <item>COS</item>\n      <item>COSD</item>\n      <item>COSH</item>\n      <item>COUNT</item>\n      <item>COUNTER</item>\n      <item>CURRENTSTORAGE</item>\n      <item>DATA</item>\n      <item>DATAFIELD</item>\n      <item>DATE</item>\n      <item>DATETIME</item>\n      <item>DCL</item>\n      <item>DEACTIVATE</item>\n      <item>DECIMAL</item>\n      <item>DECLARE</item>\n      <item>DEF</item>\n      <item>DEFAULT</item>\n      <item>DEFINED</item>\n      <item>DELAY</item>\n      <item>DELETE</item>\n      <item>DESCRIPTORS</item>\n      <item>DIM</item>\n      <item>DIRECT</item>\n      <item>DISPLAY</item>\n      <item>DIVIDE</item>\n      <item>DO</item>\n      <item>E</item>\n      <item>EDIT</item>\n      <item>ELSE</item>\n      <item>EMPTY</item>\n      <item>END</item>\n      <item>ENDFILE</item>\n      <item>ENDPAGE</item>\n      <item>ENTRY</item>\n      <item>ENTRYADDR</item>\n      <item>ENVIRONMENT</item>\n      <item>ERF</item>\n      <item>ERFC</item>\n      <item>ERROR</item>\n      <item>EVENT</item>\n      <item>EXCLUSIVE</item>\n      <item>EXIT</item>\n      <item>EXP</item>\n      <item>EXTERNAL</item>\n      <item>F</item>\n      <item>FETCH</item>\n      <item>FILE</item>\n      <item>FINISH</item>\n      <item>FIXED</item>\n      <item>FIXEDOVERFLOW</item>\n      <item>FLOAT</item>\n      <item>FLOOR</item>\n      <item>FORMAT</item>\n      <item>FORTRAN</item>\n      <item>FREE</item>\n      <item>FROM</item>\n      <item>G</item>\n      <item>GENERIC</item>\n      <item>GET</item>\n      <item>GET-STRING</item>\n      <item>GO</item>\n      <item>GOTO</item>\n      <item>GO_TO</item>\n      <item>GRAPHIC</item>\n      <item>HBOUND</item>\n      <item>HIGH</item>\n      <item>IF</item>\n      <item>IGNORE</item>\n      <item>IMAG</item>\n      <item>IN</item>\n      <item>%INCLUDE</item>\n      <item>INCLUDE</item>\n      <item>INDEX</item>\n      <item>INIT</item>\n      <item>INITIAL</item>\n      <item>INPUT</item>\n      <item>INTER</item>\n      <item>INTERNAL</item>\n      <item>INTO</item>\n      <item>IRREDUCIBLE</item>\n      <item>ITEM</item>\n      <item>KEY</item>\n      <item>KEYED</item>\n      <item>KEYFROM</item>\n      <item>KEYTO</item>\n      <item>LABEL</item>\n      <item>LBOUND</item>\n      <item>LEAVE</item>\n      <item>LENGTH</item>\n      <item>LIKE</item>\n      <item>LINE</item>\n      <item>LINENO</item>\n      <item>LINESIZE</item>\n      <item>LIST</item>\n      <item>LOCATE</item>\n      <item>LOG</item>\n      <item>LOG10</item>\n      <item>LOG2</item>\n      <item>LOW</item>\n      <item>MAIN</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>MPSTR</item>\n      <item>MULTIPLY</item>\n      <item>NAME</item>\n      <item>NOCHARGRAPHIC</item>\n      <item>NOEXECOPS</item>\n      <item>NOLOCK</item>\n      <item>NOMAP</item>\n      <item>NOMAPIN</item>\n      <item>NOMAPOUT</item>\n      <item>NOPRINT</item>\n      <item>NORESCAN</item>\n      <item>NOTE</item>\n      <item>NULL</item>\n      <item>OFFSET</item>\n      <item>ON</item>\n      <item>ONCHAR</item>\n      <item>ONCODE</item>\n      <item>ONCOUNT</item>\n      <item>ONFILE</item>\n      <item>ONKEY</item>\n      <item>ONLOC</item>\n      <item>ONSOURCE</item>\n      <item>OPEN</item>\n      <item>OPTIONS</item>\n      <item>ORDER</item>\n      <item>OTHERWISE</item>\n      <item>OUTPUT</item>\n      <item>OVERFLOW</item>\n      <item>P</item>\n      <item>PAGE</item>\n      <item>PAGESIZE</item>\n      <item>PARMSET</item>\n      <item>PENDING</item>\n      <item>PICTURE</item>\n      <item>PLICANC</item>\n      <item>PLICKPT</item>\n      <item>PLIDUMP</item>\n      <item>PLIREST</item>\n      <item>PLISRTA</item>\n      <item>PLISRTB</item>\n      <item>PLISRTC</item>\n      <item>PLISRTD</item>\n      <item>PLITDLI</item>\n      <item>PLITEST</item>\n      <item>POINTER</item>\n      <item>POINTERADD</item>\n      <item>POINTERVALUE</item>\n      <item>POLY</item>\n      <item>POS</item>\n      <item>POSITION</item>\n      <item>PRECISION</item>\n      <item>PRINT</item>\n      <item>PRIORITY</item>\n      <item>PROC</item>\n      <item>PROCEDURE</item>\n      <item>PROCESS</item>\n      <item>PROD</item>\n      <item>PUT</item>\n      <item>PUT-STRING</item>\n      <item>R</item>\n      <item>RANGE</item>\n      <item>READ</item>\n      <item>REAL</item>\n      <item>RECORD</item>\n      <item>RECURSIVE</item>\n      <item>REDUCIBLE</item>\n      <item>REENTRANT</item>\n      <item>REFER</item>\n      <item>RELEASE</item>\n      <item>REORDER</item>\n      <item>REPEAT</item>\n      <item>REPLY</item>\n      <item>REREAD</item>\n      <item>RESCAN</item>\n      <item>RETCODE</item>\n      <item>RETURN</item>\n      <item>RETURNS</item>\n      <item>REVERT</item>\n      <item>REWRITE_FILE</item>\n      <item>SAMEKEY</item>\n      <item>SELECT</item>\n      <item>SEQUENTIAL</item>\n      <item>SET</item>\n      <item>SIGN</item>\n      <item>SIGNAL</item>\n      <item>SIN</item>\n      <item>SIND</item>\n      <item>SINH</item>\n      <item>SIZE</item>\n      <item>SKIP</item>\n      <item>SNAP</item>\n      <item>SQRT</item>\n      <item>STATEMENT</item>\n      <item>STATIC</item>\n      <item>STATUS</item>\n      <item>STOP</item>\n      <item>STORAGE</item>\n      <item>STREAM</item>\n      <item>STRING</item>\n      <item>STRINGRANGE</item>\n      <item>STRINGSIZE</item>\n      <item>SUBSCRIPTRANGE</item>\n      <item>SUBSTR</item>\n      <item>SUM</item>\n      <item>SYSNULL</item>\n      <item>SYSTEM</item>\n      <item>TAN</item>\n      <item>TAND</item>\n      <item>TANH</item>\n      <item>TASK</item>\n      <item>THEN</item>\n      <item>TIME</item>\n      <item>TITLE</item>\n      <item>TO</item>\n      <item>TRANSIENT</item>\n      <item>TRANSLATE</item>\n      <item>TRANSMIT</item>\n      <item>TRUNC</item>\n      <item>UNALIGNED</item>\n      <item>UNBUFFERED</item>\n      <item>UNDEFINEDFILE</item>\n      <item>UNDERFLOW</item>\n      <item>UNLOCK</item>\n      <item>UNSPEC</item>\n      <item>UNTIL</item>\n      <item>UPDATE</item>\n      <item>VALUE</item>\n      <item>VARIABLE</item>\n      <item>VARYING</item>\n      <item>VERIFY</item>\n      <item>WAIT</item>\n      <item>WHEN</item>\n      <item>WHILE</item>\n      <item>WRITE</item>\n      <item>ZERODIVIDE</item>\n    </list>\n    <list name=\"BuiltIn\">\n      <item>MOD</item>\n      <item>ROUND</item>\n      <item>PLIRETC</item>\n      <item>PLIRETV</item>\n      <item>ADDR</item>\n      <item>CEIL</item>\n      <item>DATETIME</item>\n      <item>INDEX</item>\n      <item>LENGTH</item>\n      <item>MAX</item>\n      <item>MOD</item>\n      <item>NULL</item>\n      <item>PLIRETC</item>\n      <item>PLIRETV</item>\n      <item>PLISRTD</item>\n      <item>ROUND</item>\n      <item>STG</item>\n      <item>SUBSTR</item>\n      <item>ONCODE</item>\n      <item>ONCONDCOND</item>\n      <item>ONCOUNT</item>\n      <item>ONFILE</item>\n      <item>ONLOC</item>\n      <item>ONSUBCODE</item>\n    </list>\n    <list name=\"DataTypes\">\n      <item>BIN</item>\n      <item>BINARY</item>\n      <item>BIT</item>\n      <item>BUILTIN</item>\n      <item>CHAR</item>\n      <item>CHARACTER</item>\n      <item>DEC</item>\n      <item>DECIMAL</item>\n      <item>ENTRY</item>\n      <item>FIXED</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t<RegExpr      attribute=\"Comment\"   context=\"CommentW\"  String=\"^\\s*/\\*.*\\*/\\s*([0-9]{1,8})?$\" beginRegion=\"CommentW\"/>\n\t<RegExpr      attribute=\"Comment\"   context=\"Comment\"   String=\"/\\*\"              beginRegion=\"Comment\"/>\n\t<RegExpr      attribute=\"Comment\"   context=\"#stay\"     String=\"[0-9]{1,8}$\"/> <!-- Sequence number -->\n\t<RegExpr      attribute=\"Comment\"   context=\"#stay\"     String=\"^1\"/>          <!-- Printer control char -->\n\t<RegExpr      attribute=\"PreProc\"   context=\"#stay\"     String=\"^\\s*%\"/>       <!-- Preprocessor directive -->\n\t<RegExpr      attribute=\"Label\"     context=\"#stay\"     String=\"[#a-zA-Z][#_0-9a-zA-Z]*:\"/>\n\t<DetectChar   attribute=\"String\"    context=\"String1\"   char=\"'\"/>\n\t<DetectChar   attribute=\"String\"    context=\"String2\"   char='\"'/>\n\t<DetectChar   attribute=\"EndOfStat\" context=\"#stay\"     char=\";\"/>\n\t<WordDetect   attribute=\"Return\"    context=\"#stay\"     String=\"RETURN\" insensitive=\"true\"/>\n\t<RegExpr      attribute=\"DoEnd\"     context=\"#stay\"     String=\"\\b(BEGIN|DO|SELECT|PROC|PROCEDURE)\\b\" insensitive=\"true\" beginRegion=\"DoEnd\"/>\n\t<RegExpr      attribute=\"Return\"    context=\"#stay\"     String=\"\\bEND\\b\\s*\\S+\\s*;\" insensitive=\"true\" endRegion=\"DoEnd\"/>\n\t<RegExpr      attribute=\"DoEnd\"     context=\"#stay\"     String=\"\\bEND\\b\\s*;\" insensitive=\"true\" endRegion=\"DoEnd\"/>\n\t<RegExpr      attribute=\"Bin\"       context=\"#stay\"     String=\"'[01]+'B\"/>\n\t<RegExpr      attribute=\"Bin\"       context=\"#stay\"     String='\"[01]+\"B'/>\n\t<Float        attribute=\"Float\"     context=\"#stay\"/>\n\t<Int          attribute=\"DecVal\"    context=\"#stay\"/>\n\t<keyword      attribute=\"DataType\"  context=\"#stay\"     String=\"DataTypes\"/>\n\t<keyword      attribute=\"BuiltIn\"   context=\"#stay\"     String=\"BuiltIn\"/>\n\t<keyword      attribute=\"Attribute\" context=\"#stay\"     String=\"Attributes\"/>\n\t<keyword      attribute=\"Keyword\"   context=\"#stay\"     String=\"Keywords\"/>\n\t<RegExpr      attribute=\"Identifier\" context=\"#stay\"    String=\"[#a-zA-Z][#_0-9a-zA-Z]*\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"CommentW\">\n\t<RegExpr attribute=\"Comment\" context=\"#stay\" String=\"^\\s*/\\*.*\\*/\\s*([0-9]{8})?$\"/>\n\t<RegExpr attribute=\"Comment\" context=\"#stay\" String=\"^\\s*$\"/>\n\t<RegExpr                     context=\"#pop\"   String=\".\" endRegion=\"CommentW\" lookAhead=\"true\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment\">\n\t<RegExpr attribute=\"Comment\" context=\"#pop\"  String=\"\\*/\" endRegion=\"Comment\"/>\n\t<RegExpr attribute=\"Comment\" context=\"#stay\" String=\".\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String1\">\n\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String2\">\n\t<DetectChar attribute=\"String\" context=\"#pop\" char='\"'/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Attribute\"    defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"DataType\"     defStyleNum=\"dsDataType\"/>\n      <itemData name=\"DecVal\"       defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Bin\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"DoEnd\"        defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Label\"        defStyleNum=\"dsNormal\"   color=\"#008200\" underline=\"true\" bold=\"true\"/>\n      <itemData name=\"EndOfStat\"    defStyleNum=\"dsKeyword\" color=\"#000080\"/>\n      <itemData name=\"Return\"       defStyleNum=\"dsKeyword\" color=\"#008200\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"Identifier\"   defStyleNum=\"dsNormal\"   color=\"#2E64FE\"/>\n      <itemData name=\"PreProc\"      defStyleNum=\"dsNormal\"   color=\"#008200\"/>\n      <itemData name=\"BuiltIn\"      defStyleNum=\"dsFunction\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" />\n    <comments>\n      <!--comment name=\"singleLine\" start=\"//\" /-->\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ply.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"PLY\" version=\"2\" kateversion=\"5.0\" section=\"3D\" extensions=\"*.ply\" mimetype=\"\" author=\"Volker Krause (vkrause@kde.org)\" license=\"LGPLv2+\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>format</item>\n            <item>element</item>\n            <item>property</item>\n            <item>end_header</item>\n        </list>\n        <list name=\"types\">\n            <item>char</item>\n            <item>uchar</item>\n            <item>short</item>\n            <item>ushort</item>\n            <item>int</item>\n            <item>uint</item>\n            <item>float</item>\n            <item>double</item>\n            <item>list</item>\n        </list>\n        <contexts>\n            <context name=\"entryPoint\" attribute=\"Error\" lineEndContext=\"#stay\">\n                <StringDetect String=\"ply\" context=\"Header\"/>\n            </context>\n            <context name=\"Header\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces/>\n                <Float attribute=\"Float\" context=\"#stay\"/>\n                <Int attribute=\"Decimal\" context=\"#stay\"/>\n                <StringDetect String=\"comment\" context=\"Comment\" lookAhead=\"true\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" column=\"0\"/>\n                <keyword attribute=\"DataType\" context=\"#stay\" String=\"types\"/>\n            </context>\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\"/>\n            <itemData name=\"Float\"       defStyleNum=\"dsFloat\"/>\n            <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n            <itemData name=\"Error\"       defStyleNum=\"dsError\"/>\n            <itemData name=\"DataType\"    defStyleNum=\"dsDataType\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"comment\"/>\n        </comments>\n    </general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pony.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!ENTITY punctuators \":!&amp;()&#37;+-/.*&lt;=&gt;?[]{|}~^,;\">\n<!ENTITY EXP \"(?:[eE][+-]?[0-9](?:_?[0-9]+)*)\">\n<!ENTITY HEX \"[0-9A-Fa-f]\">\n<!ENTITY SPECHAR \"(?:\\\\[abefnrtv\\\\0]|\\\\x&HEX;&HEX;|\\\\u&HEX;&HEX;&HEX;&HEX;|\\\\U&HEX;&HEX;&HEX;&HEX;&HEX;&HEX;)\">\n<!ENTITY IDVAR \"[a-z][_a-zA-Z0-9]*'*(?!\\w)\">\n<!ENTITY IDTYPE \"_?[A-Z][_a-zA-Z0-9]*\">\n]>\n<language author=\"Jonathan Poelen (jonathan.poelen@gmail.com)\"\n  name=\"Pony\" section=\"Sources\"\n  version=\"5\" kateversion=\"5.0\"\n  indenter=\"ruby\"\n  extensions=\"*.pony\"\n  mimetype=\"text/x-pony\"\n  priority=\"5\"\n  license=\"MIT\"\n>\n  <!-- https://github.com/ponylang/ponyc/blob/master/pony.g -->\n\n  <highlighting>\n    <list name=\"class_def\">\n      <item>type</item>\n      <item>interface</item>\n      <item>trait</item>\n      <item>primitive</item>\n      <item>struct</item>\n      <item>class</item>\n      <item>actor</item>\n    </list>\n    <list name=\"method\">\n      <item>fun</item>\n      <item>be</item>\n    </list>\n    <list name=\"method_new\">\n      <item>new</item>\n    </list>\n    <list name=\"controlflow\">\n      <item>do</item>\n      <item>then</item>\n      <item>return</item>\n      <item>break</item>\n      <item>continue</item>\n      <item>error</item>\n      <item>compile_intrinsic</item>\n      <item>compile_error</item>\n      <item>recover</item> <!-- not a control flow, but ended by 'end' -->\n      <item>until</item>\n    </list>\n    <list name=\"controlflow_begin\">\n      <item>if</item>\n      <item>ifdef</item>\n      <item>iftype</item>\n      <item>match</item>\n      <item>while</item>\n      <item>repeat</item>\n      <item>for</item>\n      <item>with</item>\n      <item>try</item>\n    </list>\n    <list name=\"controlflow_else\">\n      <item>else</item>\n      <item>elseif</item>\n      <item>elseiftype</item>\n    </list>\n    <list name=\"controlflow_end\">\n      <item>end</item>\n    </list>\n    <list name=\"operators\">\n      <item>and</item>\n      <item>or</item>\n      <item>xor</item>\n      <item>not</item>\n    </list>\n    <list name=\"new_overloaders\">\n      <item>create</item>\n    </list>\n    <list name=\"overloaders\">\n      <item>update</item>\n      <item>apply</item>\n      <item>add</item>\n      <item>sub</item>\n      <item>mul</item>\n      <item>div</item>\n      <item>mod</item>\n      <item>eq</item>\n      <item>ne</item>\n      <item>lt</item>\n      <item>le</item>\n      <item>ge</item>\n      <item>gt</item>\n      <item>shl</item>\n      <item>shr</item>\n      <item>op_and</item>\n      <item>op_or</item>\n      <item>op_xor</item>\n    </list>\n    <list name=\"capability\">\n      <item>iso</item>\n      <item>trn</item>\n      <item>ref</item>\n      <item>val</item>\n      <item>box</item>\n      <item>tag</item>\n    </list>\n    <list name=\"gencapability\">\n      <item>#read</item>\n      <item>#send</item>\n      <item>#share</item>\n      <item>#alias</item>\n      <item>#any</item>\n    </list>\n    <list name=\"keyword\">\n      <item>this</item>\n      <item>use</item>\n      <item>object</item>\n      <item>as</item>\n      <item>is</item>\n      <item>isnt</item>\n      <item>in</item>\n      <item>where</item>\n      <item>is</item>\n      <item>consume</item>\n      <item>addressof</item>\n      <item>digestof</item>\n      <!-- literal -->\n      <item>true</item>\n      <item>false</item>\n      <!-- field -->\n      <item>var</item>\n      <item>let</item>\n      <item>embed</item>\n    </list>\n    <list name=\"types\">\n      <item>None</item>\n      <item>String</item>\n      <item>Bool</item>\n      <item>ISize</item>\n      <item>ILong</item>\n      <item>I8</item>\n      <item>I16</item>\n      <item>I32</item>\n      <item>I64</item>\n      <item>I128</item>\n      <item>USize</item>\n      <item>ULong</item>\n      <item>U8</item>\n      <item>U16</item>\n      <item>U32</item>\n      <item>U64</item>\n      <item>U128</item>\n      <item>F32</item>\n      <item>F64</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\n        <RegExpr attribute=\"Hex\" context=\"#stay\" String=\"[\\+\\-]?0x&HEX;(?:_?&HEX;+)*\\b\" />\n        <RegExpr attribute=\"Binary\" context=\"#stay\" String=\"[\\+\\-]?0b[01](?:_?[01]+)*\\b\" />\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"[\\+\\-]?[0-9](?:_?[0-9]+)*(?:\\.[0-9](?:_?[0-9]+)*&EXP;?|&EXP;)\\b\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"[\\+\\-]?[0-9](?:_?[0-9]+)*\\.\" />\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[\\+\\-]?[0-9](?:_?[0-9]+)*\\b\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"[\\+\\-]?\\.?[0-9]\\w*\" />\n\n        <DetectChar attribute=\"External Function\" context=\"External Function\" char=\"@\" />\n        <LineContinue attribute=\"Error\" char=\";\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"&punctuators;\" />\n\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlflow_begin\" beginRegion=\"Block\"/>\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlflow_else\" endRegion=\"Block\" beginRegion=\"Block\"/>\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlflow_end\" endRegion=\"Block\"/>\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlflow\"/>\n        <Detect2Chars attribute=\"Attributes\" context=\"Attributes\" char=\"\\\" char1=\"\\\"/>\n\n        <keyword attribute=\"Keyword\" context=\"DefClass\" String=\"class_def\"/>\n        <keyword attribute=\"Keyword\" context=\"DefFun\" String=\"method\"/>\n        <keyword attribute=\"Keyword\" context=\"DefNew\" String=\"method_new\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keyword\"/>\n\n        <keyword attribute=\"Capability\" context=\"#stay\" String=\"capability\"/>\n\n        <keyword attribute=\"Symbol\" context=\"#stay\" String=\"operators\"/>\n\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"&IDVAR;\" />\n\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"'[^\\\\']'\" /> <!-- only ascii char -->\n        <RegExpr attribute=\"Special Char\" context=\"#stay\" String=\"'(?:&SPECHAR;|\\\\')'\" />\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\"'\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"&IDTYPE;\" />\n\n        <keyword attribute=\"Constraint\" context=\"#stay\" String=\"gencapability\"/>\n\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"#\\w+\"/>\n\n        <DetectIdentifier />\n      </context>\n\n\n      <context attribute=\"String\" lineEndContext=\"SimpleString\" name=\"String\" fallthrough=\"true\" fallthroughContext=\"SimpleString\">\n        <Detect2Chars attribute=\"String\" context=\"LongString\" char=\"&quot;\" char1=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"SimpleString\">\n        <RegExpr attribute=\"Special Char\" context=\"#stay\" String=\"&SPECHAR;|\\\\&quot;\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\\\.\" />\n        <DetectChar attribute=\"String\" context=\"#pop#pop\" char=\"&quot;\"/>\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"LongString\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Special Char\" context=\"#stay\" String=\"&SPECHAR;\" />\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\\\.\" />\n        <StringDetect attribute=\"String\" context=\"#pop#pop\" String=\"&quot;&quot;&quot;\"/>\n        <DetectIdentifier />\n      </context>\n\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"def_base\">\n        <DetectSpaces/>\n        <Detect2Chars attribute=\"Attributes\" context=\"Attributes\" char=\"\\\" char1=\"\\\"/>\n        <keyword attribute=\"Capability\" context=\"#stay\" String=\"capability\"/>\n        <DetectChar attribute=\"External Function\" context=\"#pop!External Function\" char=\"@\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"DefNew\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <IncludeRules context=\"def_base\" />\n        <keyword attribute=\"Overloaders\" context=\"#pop\" String=\"new_overloaders\"/>\n        <DetectIdentifier attribute=\"Function\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"DefFun\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <IncludeRules context=\"def_base\" />\n        <keyword attribute=\"Overloaders\" context=\"#pop\" String=\"overloaders\"/>\n        <DetectIdentifier attribute=\"Function\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"DefClass\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <IncludeRules context=\"def_base\" />\n        <RegExpr attribute=\"Data Type\" context=\"#pop\" String=\"&IDTYPE;\"/>\n        <DetectIdentifier attribute=\"Error\" context=\"#pop\"/>\n      </context>\n\n\n      <context attribute=\"External Function\" lineEndContext=\"#pop\" name=\"External Function\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectIdentifier attribute=\"External Function\"/>\n      </context>\n\n\n      <context attribute=\"Attributes\" lineEndContext=\"#pop\" name=\"Attributes\">\n        <DetectSpaces/>\n        <Detect2Chars attribute=\"Attributes\" context=\"#pop\" char=\"\\\" char1=\"\\\"/>\n        <DetectChar attribute=\"Attributes\" context=\"#stay\" char=\",\"/>\n        <DetectIdentifier/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Control Flow\" defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"External Function\"  defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Overloaders\"  defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Attributes\"   defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n      <itemData name=\"Constraint\"   defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n      <itemData name=\"Capability\"   defStyleNum=\"dsAttribute\" spellChecking=\"false\" bold=\"false\" italic=\"true\" />\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Binary\"       defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Special Char\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Error\"        defStyleNum=\"dsError\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"#\" />\n  </general>\n</language>\n<!-- kate: indent-width 2; tab-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/postscript.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"PostScript\" version=\"2\" kateversion=\"2.2\" section=\"Markup\" extensions=\"*.ps;*.ai;*.eps\" mimetype=\"application/postscript\">\n<highlighting>\n\t<list name=\"keywords\">\n\t\t<item>abs</item>\n\t\t<item>add</item>\n\t\t<item>aload</item>\n\t\t<item>anchorsearch</item>\n\t\t<item>and</item>\n\t\t<item>arc</item>\n\t\t<item>arcn</item>\n\t\t<item>arct</item>\n\t\t<item>arcto</item>\n\t\t<item>array</item>\n\t\t<item>ashow</item>\n\t\t<item>astore</item>\n\t\t<item>awidthshow</item>\n\t\t<item>begin</item>\n\t\t<item>bind</item>\n\t\t<item>bitshift</item>\n\t\t<item>ceiling</item>\n\t\t<item>charpath</item>\n\t\t<item>clear</item>\n\t\t<item>cleartomark</item>\n\t\t<item>clip</item>\n\t\t<item>clippath</item>\n\t\t<item>closepath</item>\n\t\t<item>concat</item>\n\t\t<item>concatmatrix</item>\n\t\t<item>copy</item>\n\t\t<item>count</item>\n\t\t<item>counttomark</item>\n\t\t<item>currentcmykcolor</item>\n\t\t<item>currentdash</item>\n\t\t<item>currentdict</item>\n\t\t<item>currentfile</item>\n\t\t<item>currentfont</item>\n\t\t<item>currentgray</item>\n\t\t<item>currentgstate</item>\n\t\t<item>currenthsbcolor</item>\n\t\t<item>currentlinecap</item>\n\t\t<item>currentlinejoin</item>\n\t\t<item>currentlinewidth</item>\n\t\t<item>currentmatrix</item>\n\t\t<item>currentpoint</item>\n\t\t<item>currentrgbcolor</item>\n\t\t<item>currentshared</item>\n\t\t<item>curveto</item>\n\t\t<item>cvi</item>\n\t\t<item>cvlit</item>\n\t\t<item>cvn</item>\n\t\t<item>cvr</item>\n\t\t<item>cvrs</item>\n\t\t<item>cvs</item>\n\t\t<item>cvx</item>\n\t\t<item>def</item>\n\t\t<item>defineusername</item>\n\t\t<item>dict</item>\n\t\t<item>div</item>\n\t\t<item>dtransform</item>\n\t\t<item>dup</item>\n\t\t<item>end</item>\n\t\t<item>eoclip</item>\n\t\t<item>eofill</item>\n\t\t<item>eoviewclip</item>\n\t\t<item>eq</item>\n\t\t<item>exch</item>\n\t\t<item>exec</item>\n\t\t<item>exit</item>\n\t\t<item>file</item>\n\t\t<item>fill</item>\n\t\t<item>findfont</item>\n\t\t<item>flattenpath</item>\n\t\t<item>floor</item>\n\t\t<item>flush</item>\n\t\t<item>flushfile</item>\n\t\t<item>for</item>\n\t\t<item>forall</item>\n\t\t<item>ge</item>\n\t\t<item>get</item>\n\t\t<item>getinterval</item>\n\t\t<item>grestore</item>\n\t\t<item>gsave</item>\n\t\t<item>gstate</item>\n\t\t<item>gt</item>\n\t\t<item>identmatrix</item>\n\t\t<item>idiv</item>\n\t\t<item>idtransform</item>\n\t\t<item>if</item>\n\t\t<item>ifelse</item>\n\t\t<item>image</item>\n\t\t<item>imagemask</item>\n\t\t<item>index</item>\n\t\t<item>ineofill</item>\n\t\t<item>infill</item>\n\t\t<item>initviewclip</item>\n\t\t<item>inueofill</item>\n\t\t<item>inufill</item>\n\t\t<item>invertmatrix</item>\n\t\t<item>itransform</item>\n\t\t<item>known</item>\n\t\t<item>le</item>\n\t\t<item>length</item>\n\t\t<item>lineto</item>\n\t\t<item>load</item>\n\t\t<item>loop</item>\n\t\t<item>lt</item>\n\t\t<item>makefont</item>\n\t\t<item>matrix</item>\n\t\t<item>maxlength</item>\n\t\t<item>mod</item>\n\t\t<item>moveto</item>\n\t\t<item>mul</item>\n\t\t<item>ne</item>\n\t\t<item>neg</item>\n\t\t<item>newpath</item>\n\t\t<item>not</item>\n\t\t<item>null</item>\n\t\t<item>or</item>\n\t\t<item>pathbbox</item>\n\t\t<item>pathforall</item>\n\t\t<item>pop</item>\n\t\t<item>print</item>\n\t\t<item>printobject</item>\n\t\t<item>put</item>\n\t\t<item>putinterval</item>\n\t\t<item>rcurveto</item>\n\t\t<item>read</item>\n\t\t<item>readhexstring</item>\n\t\t<item>readline</item>\n\t\t<item>readstring</item>\n\t\t<item>rectclip</item>\n\t\t<item>rectfill</item>\n\t\t<item>rectstroke</item>\n\t\t<item>rectviewclip</item>\n\t\t<item>repeat</item>\n\t\t<item>restore</item>\n\t\t<item>rlineto</item>\n\t\t<item>rmoveto</item>\n\t\t<item>roll</item>\n\t\t<item>rotate</item>\n\t\t<item>round</item>\n\t\t<item>save</item>\n\t\t<item>scale</item>\n\t\t<item>scalefont</item>\n\t\t<item>search</item>\n\t\t<item>selectfont</item>\n\t\t<item>setbbox</item>\n\t\t<item>setcachedevice</item>\n\t\t<item>setcachedevice2</item>\n\t\t<item>setcharwidth</item>\n\t\t<item>setcmykcolor</item>\n\t\t<item>setdash</item>\n\t\t<item>setfont</item>\n\t\t<item>setgray</item>\n\t\t<item>setgstate</item>\n\t\t<item>sethsbcolor</item>\n\t\t<item>setlinecap</item>\n\t\t<item>setlinejoin</item>\n\t\t<item>setlinewidth</item>\n\t\t<item>setmatrix</item>\n\t\t<item>setrgbcolor</item>\n\t\t<item>setshared</item>\n\t\t<item>shareddict</item>\n\t\t<item>show</item>\n\t\t<item>showpage</item>\n\t\t<item>stop</item>\n\t\t<item>stopped</item>\n\t\t<item>store</item>\n\t\t<item>string</item>\n\t\t<item>stringwidth</item>\n\t\t<item>stroke</item>\n\t\t<item>strokepath</item>\n\t\t<item>sub</item>\n\t\t<item>systemdict</item>\n\t\t<item>token</item>\n\t\t<item>transform</item>\n\t\t<item>translate</item>\n\t\t<item>truncate</item>\n\t\t<item>type</item>\n\t\t<item>uappend</item>\n\t\t<item>ucache</item>\n\t\t<item>ueofill</item>\n\t\t<item>ufill</item>\n\t\t<item>undef</item>\n\t\t<item>upath</item>\n\t\t<item>userdict</item>\n\t\t<item>ustroke</item>\n\t\t<item>viewclip</item>\n\t\t<item>viewclippath</item>\n\t\t<item>where</item>\n\t\t<item>widthshow</item>\n\t\t<item>write</item>\n\t\t<item>writehexstring</item>\n\t\t<item>writeobject</item>\n\t\t<item>writestring</item>\n\t\t<item>wtranslation</item>\n\t\t<item>xor</item>\n\t\t<item>xshow</item>\n\t\t<item>xyshow</item>\n\t\t<item>yshow</item>\n\t\t<item>FontDirectory</item>\n\t\t<item>SharedFontDirectory</item>\n\t\t<item>Courier</item>\n\t\t<item>Courier-Bold</item>\n\t\t<item>Courier-BoldOblique</item>\n\t\t<item>Courier-Oblique</item>\n\t\t<item>Helvetica</item>\n\t\t<item>Helvetica-Bold</item>\n\t\t<item>Helvetica-BoldOblique</item>\n\t\t<item>Helvetica-Oblique</item>\n\t\t<item>Symbol</item>\n\t\t<item>Times-Bold</item>\n\t\t<item>Times-BoldItalic</item>\n\t\t<item>Times-Italic</item>\n\t\t<item>Times-Roman</item>\n\t\t<item>execuserobject</item>\n\t\t<item>currentcolor</item>\n\t\t<item>currentcolorspace</item>\n\t\t<item>currentglobal</item>\n\t\t<item>execform</item>\n\t\t<item>filter</item>\n\t\t<item>findresource</item>\n\t\t<item>globaldict</item>\n\t\t<item>makepattern</item>\n\t\t<item>setcolor</item>\n\t\t<item>setcolorspace</item>\n\t\t<item>setglobal</item>\n\t\t<item>setpagedevice</item>\n\t\t<item>setpattern</item>\n\t\t<item>ISOLatin1Encoding</item>\n\t\t<item>StandardEncoding</item>\n\t\t<item>atan</item>\n\t\t<item>banddevice</item>\n\t\t<item>bytesavailable</item>\n\t\t<item>cachestatus</item>\n\t\t<item>closefile</item>\n\t\t<item>colorimage</item>\n\t\t<item>condition</item>\n\t\t<item>copypage</item>\n\t\t<item>cos</item>\n\t\t<item>countdictstack</item>\n\t\t<item>countexecstack</item>\n\t\t<item>cshow</item>\n\t\t<item>currentblackgeneration</item>\n\t\t<item>currentcacheparams</item>\n\t\t<item>currentcolorscreen</item>\n\t\t<item>currentcolortransfer</item>\n\t\t<item>currentcontext</item>\n\t\t<item>currentflat</item>\n\t\t<item>currenthalftone</item>\n\t\t<item>currenthalftonephase</item>\n\t\t<item>currentmiterlimit</item>\n\t\t<item>currentobjectformat</item>\n\t\t<item>currentpacking</item>\n\t\t<item>currentscreen</item>\n\t\t<item>currentstrokeadjust</item>\n\t\t<item>currenttransfer</item>\n\t\t<item>currentundercolorremoval</item>\n\t\t<item>defaultmatrix</item>\n\t\t<item>definefont</item>\n\t\t<item>deletefile</item>\n\t\t<item>detach</item>\n\t\t<item>deviceinfo</item>\n\t\t<item>dictstack</item>\n\t\t<item>echo</item>\n\t\t<item>erasepage</item>\n\t\t<item>errordict</item>\n\t\t<item>execstack</item>\n\t\t<item>executeonly</item>\n\t\t<item>exp</item>\n\t\t<item>false</item>\n\t\t<item>filenameforall</item>\n\t\t<item>fileposition</item>\n\t\t<item>fork</item>\n\t\t<item>framedevice</item>\n\t\t<item>grestoreall</item>\n\t\t<item>handleerror</item>\n\t\t<item>initclip</item>\n\t\t<item>initgraphics</item>\n\t\t<item>initmatrix</item>\n\t\t<item>instroke</item>\n\t\t<item>inustroke</item>\n\t\t<item>join</item>\n\t\t<item>kshow</item>\n\t\t<item>ln</item>\n\t\t<item>lock</item>\n\t\t<item>log</item>\n\t\t<item>mark</item>\n\t\t<item>monitor</item>\n\t\t<item>noaccess</item>\n\t\t<item>notify</item>\n\t\t<item>nulldevice</item>\n\t\t<item>packedarray</item>\n\t\t<item>quit</item>\n\t\t<item>rand</item>\n\t\t<item>rcheck</item>\n\t\t<item>readonly</item>\n\t\t<item>realtime</item>\n\t\t<item>renamefile</item>\n\t\t<item>renderbands</item>\n\t\t<item>resetfile</item>\n\t\t<item>reversepath</item>\n\t\t<item>rootfont</item>\n\t\t<item>rrand</item>\n\t\t<item>run</item>\n\t\t<item>scheck</item>\n\t\t<item>setblackgeneration</item>\n\t\t<item>setcachelimit</item>\n\t\t<item>setcacheparams</item>\n\t\t<item>setcolorscreen</item>\n\t\t<item>setcolortransfer</item>\n\t\t<item>setfileposition</item>\n\t\t<item>setflat</item>\n\t\t<item>sethalftone</item>\n\t\t<item>sethalftonephase</item>\n\t\t<item>setmiterlimit</item>\n\t\t<item>setobjectformat</item>\n\t\t<item>setpacking</item>\n\t\t<item>setscreen</item>\n\t\t<item>setstrokeadjust</item>\n\t\t<item>settransfer</item>\n\t\t<item>setucacheparams</item>\n\t\t<item>setundercolorremoval</item>\n\t\t<item>sin</item>\n\t\t<item>sqrt</item>\n\t\t<item>srand</item>\n\t\t<item>stack</item>\n\t\t<item>status</item>\n\t\t<item>statusdict</item>\n\t\t<item>true</item>\n\t\t<item>ucachestatus</item>\n\t\t<item>undefinefont</item>\n\t\t<item>usertime</item>\n\t\t<item>ustrokepath</item>\n\t\t<item>version</item>\n\t\t<item>vmreclaim</item>\n\t\t<item>vmstatus</item>\n\t\t<item>wait</item>\n\t\t<item>wcheck</item>\n\t\t<item>xcheck</item>\n\t\t<item>yield</item>\n\t\t<item>defineuserobject</item>\n\t\t<item>undefineuserobject</item>\n\t\t<item>UserObjects</item>\n\t\t<item>cleardictstack</item>\n\t\t<item>setvmthreshold</item>\n\t\t<item>currentcolorrendering</item>\n\t\t<item>currentdevparams</item>\n\t\t<item>currentoverprint</item>\n\t\t<item>currentpagedevice</item>\n\t\t<item>currentsystemparams</item>\n\t\t<item>currentuserparams</item>\n\t\t<item>defineresource</item>\n\t\t<item>findencoding</item>\n\t\t<item>gcheck</item>\n\t\t<item>glyphshow</item>\n\t\t<item>languagelevel</item>\n\t\t<item>product</item>\n\t\t<item>pstack</item>\n\t\t<item>resourceforall</item>\n\t\t<item>resourcestatus</item>\n\t\t<item>revision</item>\n\t\t<item>serialnumber</item>\n\t\t<item>setcolorrendering</item>\n\t\t<item>setdevparams</item>\n\t\t<item>setoverprint</item>\n\t\t<item>setsystemparams</item>\n\t\t<item>setuserparams</item>\n\t\t<item>startjob</item>\n\t\t<item>undefineresource</item>\n\t\t<item>GlobalFontDirectory</item>\n\t\t<item>ASCII85Decode</item>\n\t\t<item>ASCII85Encode</item>\n\t\t<item>ASCIIHexDecode</item>\n\t\t<item>ASCIIHexEncode</item>\n\t\t<item>CCITTFaxDecode</item>\n\t\t<item>CCITTFaxEncode</item>\n\t\t<item>DCTDecode</item>\n\t\t<item>DCTEncode</item>\n\t\t<item>LZWDecode</item>\n\t\t<item>LZWEncode</item>\n\t\t<item>NullEncode</item>\n\t\t<item>RunLengthDecode</item>\n\t\t<item>RunLengthEncode</item>\n\t\t<item>SubFileDecode</item>\n\t\t<item>CIEBasedA</item>\n\t\t<item>CIEBasedABC</item>\n\t\t<item>DeviceCMYK</item>\n\t\t<item>DeviceGray</item>\n\t\t<item>DeviceRGB</item>\n\t\t<item>Indexed</item>\n\t\t<item>Pattern</item>\n\t\t<item>Separation</item>\n\t\t<item>CIEBasedDEF</item>\n\t\t<item>CIEBasedDEFG</item>\n\t\t<item>DeviceN</item>\n\t</list>\n\n\t<contexts>\n\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t<Detect2Chars attribute=\"Header\" context=\"Header\" char=\"%\" char1=\"!\"/>\n\t\t\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"%\"/>\n\t\t\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t\t\t<Int attribute=\"Decimal\" context=\"#stay\"/>\n\t\t        <DetectChar attribute=\"String\" context=\"String\" char=\"(\"/>\n\t\t\t<RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"\\/{1,2}[^\\s\\(\\)\\{\\}\\[\\]%/]*\"/>\n\t\t</context>\n\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\"/>\n\t\t<context attribute=\"Header\" lineEndContext=\"#pop\" name=\"Header\"/>\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\")\" />\n\t\t</context>\n\t</contexts>\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Header\" defStyleNum=\"dsOthers\"/>\n\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n\t\t<itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n\t</itemDatas>\n</highlighting>\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"%\" />\n\t</comments>\n\t<keywords casesensitive=\"0\" />\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/povray.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Extended and updated by                                    -->\n<!-- Christoph Hormann <chris_hormann@gmx.de>, March 2004       -->\n<!-- features full POV-Ray 3.6 syntax with special highlighting -->\n<!-- of variable and macro declarations                         -->\n<!-- v1.1: added MegaPOV 1.2.1 keywords (Febuary 2006)          -->\n<language name=\"POV-Ray\" version=\"5\" kateversion=\"2.4\" section=\"3D\" extensions=\"*.inc;*.pov\" mimetype=\"text/x-povray-script;text/x-povray-include\" author=\"Christoph Hormann (chris_hormann@gmx.de)\" license=\"LGPL\" priority=\"2\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>aa_threshold</item>\n\t\t\t<item>aa_level</item>\n\t\t\t<item>absorption</item>\n\t\t\t<item>abs</item>\n\t\t\t<item>accuracy</item>\n\t\t\t<item>acosh</item>\n\t\t\t<item>acos</item>\n\t\t\t<item>adaptive</item>\n\t\t\t<item>adc_bailout</item>\n\t\t\t<item>agate</item>\n\t\t\t<item>agate_turb</item>\n\t\t\t<item>all_intersections</item>\n\t\t\t<item>all</item>\n\t\t\t<item>alpha</item>\n\t\t\t<item>always_sample</item>\n\t\t\t<item>altitude</item>\n\t\t\t<item>ambient_light</item>\n\t\t\t<item>ambient</item>\n\t\t\t<item>angle</item>\n\t\t\t<item>aperture</item>\n\t\t\t<item>append</item>\n\t\t\t<item>arc_angle</item>\n\t\t\t<item>area_light</item>\n\t\t\t<item>array</item>\n\t\t\t<item>ascii</item>\n\t\t\t<item>asc</item>\n\t\t\t<item>asinh</item>\n\t\t\t<item>asin</item>\n\t\t\t<item>assumed_gamma</item>\n\t\t\t<item>atan2</item>\n\t\t\t<item>atanh</item>\n\t\t\t<item>atan</item>\n\t\t\t<item>average</item>\n\t\t\t<item>background</item>\n\t\t\t<item>bezier_spline</item>\n\t\t\t<item>bicubic_patch</item>\n\t\t\t<item>black_hole</item>\n\t\t\t<item>blob</item>\n\t\t\t<item>blue</item>\n\t\t\t<item>blur_samples</item>\n\t\t\t<item>bounded_by</item>\n\t\t\t<item>boxed</item>\n\t\t\t<item>box</item>\n\t\t\t<item>bozo</item>\n\t\t\t<item>brick_size</item>\n\t\t\t<item>brick</item>\n\t\t\t<item>brightness</item>\n\t\t\t<item>brilliance</item>\n\t\t\t<item>bumps</item>\n\t\t\t<item>bump_map</item>\n\t\t\t<item>bump_size</item>\n\t\t\t<item>b_spline</item>\n\t\t\t<item>camera</item>\n\t\t\t<item>caustics</item>\n\t\t\t<item>ceil</item>\n\t\t\t<item>cells</item>\n\t\t\t<item>charset</item>\n\t\t\t<item>checker</item>\n\t\t\t<item>chr</item>\n\t\t\t<item>circular</item>\n\t\t\t<item>clipped_by</item>\n\t\t\t<item>clock_delta</item>\n\t\t\t<item>clock_on</item>\n\t\t\t<item>clock</item>\n\t\t\t<item>color_map</item>\n\t\t\t<item>colour_map</item>\n\t\t\t<item>color</item>\n\t\t\t<item>colour</item>\n\t\t\t<item>component</item>\n\t\t\t<item>composite</item>\n\t\t\t<item>concat</item>\n\t\t\t<item>cone</item>\n\t\t\t<item>confidence</item>\n\t\t\t<item>conic_sweep</item>\n\t\t\t<item>contained_by</item>\n\t\t\t<item>control0</item>\n\t\t\t<item>control1</item>\n\t\t\t<item>coords</item>\n\t\t\t<item>cosh</item>\n\t\t\t<item>cos</item>\n\t\t\t<item>count</item>\n\t\t\t<item>crackle</item>\n\t\t\t<item>crand</item>\n\t\t\t<item>cube</item>\n\t\t\t<item>cubic_spline</item>\n\t\t\t<item>cubic</item>\n\t\t\t<item>cubic_wave</item>\n\t\t\t<item>cylinder</item>\n\t\t\t<item>cylindrical</item>\n\t\t\t<item>defined</item>\n\t\t\t<item>degrees</item>\n\t\t\t<item>density_file</item>\n\t\t\t<item>density_map</item>\n\t\t\t<item>density</item>\n\t\t\t<item>dents</item>\n\t\t\t<item>df3</item>\n\t\t\t<item>difference</item>\n\t\t\t<item>diffuse</item>\n\t\t\t<item>dimensions</item>\n\t\t\t<item>dimension_size</item>\n\t\t\t<item>direction</item>\n\t\t\t<item>disc</item>\n\t\t\t<item>dispersion</item>\n\t\t\t<item>dispersion_samples</item>\n\t\t\t<item>distance_maximum</item>\n\t\t\t<item>distance</item>\n\t\t\t<item>dist_exp</item>\n\t\t\t<item>div</item>\n\t\t\t<item>double_illuminate</item>\n\t\t\t<item>eccentricity</item>\n\t\t\t<item>emission</item>\n\t\t\t<item>error_bound</item>\n\t\t\t<item>evaluate</item>\n\t\t\t<item>exp</item>\n\t\t\t<item>exponent</item>\n\t\t\t<item>exterior</item>\n\t\t\t<item>extinction</item>\n\t\t\t<item>facets</item>\n\t\t\t<item>face_indices</item>\n\t\t\t<item>fade_colour</item>\n\t\t\t<item>fade_color</item>\n\t\t\t<item>fade_distance</item>\n\t\t\t<item>fade_power</item>\n\t\t\t<item>falloff_angle</item>\n\t\t\t<item>falloff</item>\n\t\t\t<item>false</item>\n\t\t\t<item>file_exists</item>\n\t\t\t<item>shadowless</item>\n\t\t\t<item>filter</item>\n\t\t\t<item>final_clock</item>\n\t\t\t<item>final_frame</item>\n\t\t\t<item>finish</item>\n\t\t\t<item>fisheye</item>\n\t\t\t<item>flatness</item>\n\t\t\t<item>flip</item>\n\t\t\t<item>floor</item>\n\t\t\t<item>focal_point</item>\n\t\t\t<item>fog_alt</item>\n\t\t\t<item>fog_offset</item>\n\t\t\t<item>fog</item>\n\t\t\t<item>fog_type</item>\n\t\t\t<item>form</item>\n\t\t\t<item>frame_number</item>\n\t\t\t<item>frequency</item>\n\t\t\t<item>fresnel</item>\n\t\t\t<item>function</item>\n\t\t\t<item>gif</item>\n\t\t\t<item>global_settings</item>\n\t\t\t<item>gradient</item>\n\t\t\t<item>granite</item>\n\t\t\t<item>gray</item>\n\t\t\t<item>gray_threshold</item>\n\t\t\t<item>green</item>\n\t\t\t<item>height_field</item>\n\t\t\t<item>hexagon</item>\n\t\t\t<item>hf_gray_16</item>\n\t\t\t<item>hierarchy</item>\n\t\t\t<item>hollow</item>\n\t\t\t<item>hypercomplex</item>\n\t\t\t<item>image_width</item>\n\t\t\t<item>image_height</item>\n\t\t\t<item>initial_clock</item>\n\t\t\t<item>initial_frame</item>\n\t\t\t<item>interior_texture</item>\n\t\t\t<item>iff</item>\n\t\t\t<item>image_map</item>\n\t\t\t<item>image_pattern</item>\n\t\t\t<item>inside</item>\n\t\t\t<item>inside_vector</item>\n\t\t\t<item>interior</item>\n\t\t\t<item>interpolate</item>\n\t\t\t<item>intersection</item>\n\t\t\t<item>intervals</item>\n\t\t\t<item>int</item>\n\t\t\t<item>inverse</item>\n\t\t\t<item>ior</item>\n\t\t\t<item>irid</item>\n\t\t\t<item>irid_wavelength</item>\n\t\t\t<item>isosurface</item>\n\t\t\t<item>jitter</item>\n\t\t\t<item>julia</item>\n\t\t\t<item>julia_fractal</item>\n\t\t\t<item>jpeg</item>\n\t\t\t<item>lambda</item>\n\t\t\t<item>lathe</item>\n\t\t\t<item>leopard</item>\n\t\t\t<item>light_group</item>\n\t\t\t<item>light_source</item>\n\t\t\t<item>linear_spline</item>\n\t\t\t<item>linear_sweep</item>\n\t\t\t<item>ln</item>\n\t\t\t<item>load_file</item>\n\t\t\t<item>location</item>\n\t\t\t<item>log</item>\n\t\t\t<item>looks_like</item>\n\t\t\t<item>look_at</item>\n\t\t\t<item>low_error_factor</item>\n\t\t\t<item>magnet</item>\n\t\t\t<item>major_radius</item>\n\t\t\t<item>mandel</item>\n\t\t\t<item>map_type</item>\n\t\t\t<item>marble</item>\n\t\t\t<item>material_map</item>\n\t\t\t<item>material</item>\n\t\t\t<item>matrix</item>\n\t\t\t<item>max_extent</item>\n\t\t\t<item>max_gradient</item>\n\t\t\t<item>max_intersections</item>\n\t\t\t<item>max_iteration</item>\n\t\t\t<item>max_sample</item>\n\t\t\t<item>max</item>\n\t\t\t<item>max_trace_level</item>\n\t\t\t<item>max_trace</item>\n\t\t\t<item>media_attenuation</item>\n\t\t\t<item>media_interaction</item>\n\t\t\t<item>media</item>\n\t\t\t<item>merge</item>\n\t\t\t<item>mesh2</item>\n\t\t\t<item>mesh</item>\n\t\t\t<item>metallic</item>\n\t\t\t<item>method</item>\n\t\t\t<item>metric</item>\n\t\t\t<item>minimum_reuse</item>\n\t\t\t<item>min_extent</item>\n\t\t\t<item>min</item>\n\t\t\t<item>mod</item>\n\t\t\t<item>mortar</item>\n\t\t\t<item>natural_spline</item>\n\t\t\t<item>nearest_count</item>\n\t\t\t<item>normal</item>\n\t\t\t<item>normal_indices</item>\n\t\t\t<item>normal_map</item>\n\t\t\t<item>normal_vectors</item>\n\t\t\t<item>no_image</item>\n\t\t\t<item>no_reflection</item>\n\t\t\t<item>no_shadow</item>\n\t\t\t<item>no</item>\n\t\t\t<item>number_of_waves</item>\n\t\t\t<item>object</item>\n\t\t\t<item>octaves</item>\n\t\t\t<item>offset</item>\n\t\t\t<item>off</item>\n\t\t\t<item>omega</item>\n\t\t\t<item>omnimax</item>\n\t\t\t<item>once</item>\n\t\t\t<item>onion</item>\n\t\t\t<item>on</item>\n\t\t\t<item>open</item>\n\t\t\t<item>orientation</item>\n\t\t\t<item>orient</item>\n\t\t\t<item>orthographic</item>\n\t\t\t<item>panoramic</item>\n\t\t\t<item>parallel</item>\n\t\t\t<item>parametric</item>\n\t\t\t<item>pattern</item>\n\t\t\t<item>perspective</item>\n\t\t\t<item>pgm</item>\n\t\t\t<item>phase</item>\n\t\t\t<item>phong_size</item>\n\t\t\t<item>phong</item>\n\t\t\t<item>pigment_map</item>\n\t\t\t<item>pigment</item>\n\t\t\t<item>pi</item>\n\t\t\t<item>planar</item>\n\t\t\t<item>plane</item>\n\t\t\t<item>png</item>\n\t\t\t<item>point_at</item>\n\t\t\t<item>polygon</item>\n\t\t\t<item>poly</item>\n\t\t\t<item>poly_wave</item>\n\t\t\t<item>pot</item>\n\t\t\t<item>pow</item>\n\t\t\t<item>ppm</item>\n\t\t\t<item>precision</item>\n\t\t\t<item>precompute</item>\n\t\t\t<item>pretrace_start</item>\n\t\t\t<item>pretrace_end</item>\n\t\t\t<item>prism</item>\n\t\t\t<item>prod</item>\n\t\t\t<item>projected_through</item>\n\t\t\t<item>pwr</item>\n\t\t\t<item>quadratic_spline</item>\n\t\t\t<item>quadric</item>\n\t\t\t<item>quartic</item>\n\t\t\t<item>quaternion</item>\n\t\t\t<item>quick_color</item>\n\t\t\t<item>quick_colour</item>\n\t\t\t<item>quilted</item>\n\t\t\t<item>radial</item>\n\t\t\t<item>radians</item>\n\t\t\t<item>radiosity</item>\n\t\t\t<item>radius</item>\n\t\t\t<item>rainbow</item>\n\t\t\t<item>ramp_wave</item>\n\t\t\t<item>rand</item>\n\t\t\t<item>range</item>\n\t\t\t<item>ratio</item>\n\t\t\t<item>reciprocal</item>\n\t\t\t<item>recursion_limit</item>\n\t\t\t<item>red</item>\n\t\t\t<item>reflection_exponent</item>\n\t\t\t<item>reflection</item>\n\t\t\t<item>refraction</item>\n\t\t\t<item>repeat</item>\n\t\t\t<item>rgbft</item>\n\t\t\t<item>rgbf</item>\n\t\t\t<item>rgbt</item>\n\t\t\t<item>rgb</item>\n\t\t\t<item>right</item>\n\t\t\t<item>ripples</item>\n\t\t\t<item>rotate</item>\n\t\t\t<item>roughness</item>\n\t\t\t<item>samples</item>\n\t\t\t<item>save_file</item>\n\t\t\t<item>scale</item>\n\t\t\t<item>scallop_wave</item>\n\t\t\t<item>scattering</item>\n\t\t\t<item>seed</item>\n\t\t\t<item>select</item>\n\t\t\t<item>sine_wave</item>\n\t\t\t<item>sinh</item>\n\t\t\t<item>sin</item>\n\t\t\t<item>size</item>\n\t\t\t<item>sky_sphere</item>\n\t\t\t<item>sky</item>\n\t\t\t<item>slice</item>\n\t\t\t<item>slope_map</item>\n\t\t\t<item>slope</item>\n\t\t\t<item>smooth</item>\n\t\t\t<item>smooth_triangle</item>\n\t\t\t<item>solid</item>\n\t\t\t<item>sor</item>\n\t\t\t<item>specular</item>\n\t\t\t<item>sphere_sweep</item>\n\t\t\t<item>sphere</item>\n\t\t\t<item>spherical</item>\n\t\t\t<item>spiral1</item>\n\t\t\t<item>spiral2</item>\n\t\t\t<item>spline</item>\n\t\t\t<item>spotlight</item>\n\t\t\t<item>spotted</item>\n\t\t\t<item>sqrt</item>\n\t\t\t<item>sqr</item>\n\t\t\t<item>statistics</item>\n\t\t\t<item>strcmp</item>\n\t\t\t<item>strength</item>\n\t\t\t<item>strlen</item>\n\t\t\t<item>strlwr</item>\n\t\t\t<item>strupr</item>\n\t\t\t<item>str</item>\n\t\t\t<item>sturm</item>\n\t\t\t<item>substr</item>\n\t\t\t<item>sum</item>\n\t\t\t<item>superellipsoid</item>\n\t\t\t<item>sys</item>\n\t\t\t<item>tanh</item>\n\t\t\t<item>tan</item>\n\t\t\t<item>texture_list</item>\n\t\t\t<item>texture_map</item>\n\t\t\t<item>texture</item>\n\t\t\t<item>text</item>\n\t\t\t<item>tga</item>\n\t\t\t<item>thickness</item>\n\t\t\t<item>threshold</item>\n\t\t\t<item>tiff</item>\n\t\t\t<item>tightness</item>\n\t\t\t<item>tile2</item>\n\t\t\t<item>tiles</item>\n\t\t\t<item>normal</item>\n\t\t\t<item>tolerance</item>\n\t\t\t<item>toroidal</item>\n\t\t\t<item>torus</item>\n\t\t\t<item>trace</item>\n\t\t\t<item>transform</item>\n\t\t\t<item>translate</item>\n\t\t\t<item>transmit</item>\n\t\t\t<item>triangle</item>\n\t\t\t<item>triangle_wave</item>\n\t\t\t<item>true</item>\n\t\t\t<item>ttf</item>\n\t\t\t<item>turbulence</item>\n\t\t\t<item>turb_depth</item>\n\t\t\t<item>type</item>\n\t\t\t<item>t</item>\n\t\t\t<item>ultra_wide_angle</item>\n\t\t\t<item>union</item>\n\t\t\t<item>up</item>\n\t\t\t<item>use_alpha</item>\n\t\t\t<item>use_color</item>\n\t\t\t<item>use_colour</item>\n\t\t\t<item>use_index</item>\n\t\t\t<item>utf8</item>\n\t\t\t<item>uv_indices</item>\n\t\t\t<item>uv_mapping</item>\n\t\t\t<item>uv_vectors</item>\n\t\t\t<item>u_steps</item>\n\t\t\t<item>u</item>\n\t\t\t<item>val</item>\n\t\t\t<item>variance</item>\n\t\t\t<item>vaxis_rotate</item>\n\t\t\t<item>vcross</item>\n\t\t\t<item>vdot</item>\n\t\t\t<item>vertex_vectors</item>\n\t\t\t<item>vlength</item>\n\t\t\t<item>vnormalize</item>\n\t\t\t<item>vrotate</item>\n\t\t\t<item>vstr</item>\n\t\t\t<item>vturbulence</item>\n\t\t\t<item>v_steps</item>\n\t\t\t<item>v</item>\n\t\t\t<item>warning</item>\n\t\t\t<item>warp</item>\n\t\t\t<item>water_level</item>\n\t\t\t<item>waves</item>\n\t\t\t<item>while</item>\n\t\t\t<item>width</item>\n\t\t\t<item>wood</item>\n\t\t\t<item>wrinkles</item>\n\t\t\t<item>write</item>\n\t\t\t<item>x</item>\n\t\t\t<item>yes</item>\n\t\t\t<item>y</item>\n\t\t\t<item>z</item>\n\t\t\t<item>photons</item>\n\t\t\t<item>steps</item>\n\t\t\t<item>pass_through</item>\n\t\t\t<item>collect</item>\n\t\t\t<item>autostop</item>\n\t\t\t<item>gather</item>\n\t\t\t<item>split_union</item>\n\t\t\t<item>expand_thresholds</item>\n\t\t\t<item>spacing</item>\n\t\t\t<item>global</item>\n\t\t\t<item>target</item>\n\t\t\t<item>conserve_energy</item>\n\t\t\t<item>cutaway_textures</item>\n\t\t\t<item>pigment_pattern</item>\n\t\t\t<item>no_bump_scale</item>\n\t\t\t<item>global_lights</item>\n\t\t\t<item>internal</item>\n\t\t\t<item>noise_generator</item>\n\t\t</list>\n\t\t<list name=\"unofficial\">\n\t\t\t<item>akima_spline</item>\n\t\t\t<item>aoi</item>\n\t\t\t<item>basic_x_spline</item>\n\t\t\t<item>camera_view</item>\n\t\t\t<item>displace</item>\n\t\t\t<item>exposure</item>\n\t\t\t<item>exposure_gain</item>\n\t\t\t<item>extended_x_spline</item>\n\t\t\t<item>float</item>\n\t\t\t<item>frame_step</item>\n\t\t\t<item>date</item>\n\t\t\t<item>start_chrono</item>\n\t\t\t<item>current_chrono</item>\n\t\t\t<item>general_x_spline</item>\n\t\t\t<item>glow</item>\n\t\t\t<item>h_align_left</item>\n\t\t\t<item>h_align_right</item>\n\t\t\t<item>h_align_center</item>\n\t\t\t<item>v_align_top</item>\n\t\t\t<item>v_align_bottom</item>\n\t\t\t<item>v_align_center</item>\n\t\t\t<item>inverted_normals</item>\n\t\t\t<item>is</item>\n\t\t\t<item>listed</item>\n\t\t\t<item>mpeg</item>\n\t\t\t<item>n_roots</item>\n\t\t\t<item>noise_pigment</item>\n\t\t\t<item>output_filename</item>\n\t\t\t<item>post_process</item>\n\t\t\t<item>projection</item>\n\t\t\t<item>point</item>\n\t\t\t<item>blur</item>\n\t\t\t<item>set</item>\n\t\t\t<item>sor_spline</item>\n\t\t\t<item>string</item>\n\t\t\t<item>structure</item>\n\t\t\t<item>tcb_spline</item>\n\t\t\t<item>tension</item>\n\t\t\t<item>continuity</item>\n\t\t\t<item>bias</item>\n\t\t\t<item>user_defined</item>\n\t\t\t<item>vector</item>\n\t\t\t<item>unofficial_version</item>\n\t\t\t<item>gravity</item>\n\t\t\t<item>environment</item>\n\t\t\t<item>friction</item>\n\t\t\t<item>damping</item>\n\t\t\t<item>simcloth</item>\n\t\t\t<item>wind</item>\n\t\t\t<item>neighbors</item>\n\t\t\t<item>neighbours</item>\n\t\t\t<item>internal_collision</item>\n\t\t\t<item>viscosity</item>\n\t\t\t<item>iterations</item>\n\t\t\t<item>input</item>\n\t\t\t<item>mesh_output</item>\n\t\t\t<item>smooth_mesh</item>\n\t\t\t<item>uv_mesh</item>\n\t\t\t<item>output</item>\n\t\t\t<item>stiffness</item>\n\t\t\t<item>topology</item>\n\t\t\t<item>mass</item>\n\t\t\t<item>connection</item>\n\t\t\t<item>face</item>\n\t\t\t<item>velocity</item>\n\t\t\t<item>position</item>\n\t\t\t<item>mass_count</item>\n\t\t\t<item>connection_count</item>\n\t\t\t<item>face_count</item>\n\t\t\t<item>index1</item>\n\t\t\t<item>index2</item>\n\t\t\t<item>index3</item>\n\t\t\t<item>time</item>\n\t\t\t<item>time_step</item>\n\t\t\t<item>step_count</item>\n\t\t\t<item>start_time</item>\n\t\t\t<item>end_time</item>\n\t\t\t<item>fixed</item>\n\t\t\t<item>collision</item>\n\t\t\t<item>interaction</item>\n\t\t\t<item>group</item>\n\t\t\t<item>attach</item>\n\t\t\t<item>field</item>\n\t\t\t<item>mechsim</item>\n\t\t\t<item>bounding</item>\n\t\t\t<item>viscoelastic</item>\n\t\t\t<item>viscoelastic_count</item>\n\t\t\t<item>element</item>\n\t\t\t<item>length</item>\n\t\t\t<item>force</item>\n\t\t\t<item>message</item>\n\t\t\t<item>weight</item>\n\t\t\t<item>randomize</item>\n\t\t\t<item>hdr</item>\n\t\t\t<item>no_radiosity</item>\n\t\t\t<item>motion_blur</item>\n\t\t\t<item>tone_mapping</item>\n\t\t\t<item>show_samples</item>\n\t\t\t<item>show_low_count</item>\n\t\t</list>\n\t\t<list name=\"objects\">\n\t\t\t<item>bicubic_patch</item>\n\t\t\t<item>blob</item>\n\t\t\t<item>box</item>\n\t\t\t<item>cone</item>\n\t\t\t<item>cubic</item>\n\t\t\t<item>cylinder</item>\n\t\t\t<item>difference</item>\n\t\t\t<item>disc</item>\n\t\t\t<item>height_field</item>\n\t\t\t<item>intersection</item>\n\t\t\t<item>isosurface</item>\n\t\t\t<item>julia_fractal</item>\n\t\t\t<item>lathe</item>\n\t\t\t<item>light_source</item>\n\t\t\t<item>merge</item>\n\t\t\t<item>mesh</item>\n\t\t\t<item>mesh2</item>\n\t\t\t<item>object</item>\n\t\t\t<item>parametric</item>\n\t\t\t<item>plane</item>\n\t\t\t<item>poly</item>\n\t\t\t<item>polygon</item>\n\t\t\t<item>prism</item>\n\t\t\t<item>quadric</item>\n\t\t\t<item>quartic</item>\n\t\t\t<item>smooth_triangle</item>\n\t\t\t<item>sor</item>\n\t\t\t<item>sphere</item>\n\t\t\t<item>sphere_sweep</item>\n\t\t\t<item>superellipsoid</item>\n\t\t\t<item>text</item>\n\t\t\t<item>torus</item>\n\t\t\t<item>triangle</item>\n\t\t\t<item>union</item>\n\t\t</list>\n\t\t<list name=\"texturing\">\n\t\t\t<item>aa_threshold</item>\n\t\t\t<item>aa_level</item>\n\t\t\t<item>absorption</item>\n\t\t\t<item>agate</item>\n\t\t\t<item>agate_turb</item>\n\t\t\t<item>ambient</item>\n\t\t\t<item>average</item>\n\t\t\t<item>black_hole</item>\n\t\t\t<item>blue</item>\n\t\t\t<item>boxed</item>\n\t\t\t<item>brick_size</item>\n\t\t\t<item>brick</item>\n\t\t\t<item>brilliance</item>\n\t\t\t<item>bumps</item>\n\t\t\t<item>bump_map</item>\n\t\t\t<item>bump_size</item>\n\t\t\t<item>caustics</item>\n\t\t\t<item>cells</item>\n\t\t\t<item>checker</item>\n\t\t\t<item>color_map</item>\n\t\t\t<item>colour_map</item>\n\t\t\t<item>color</item>\n\t\t\t<item>colour</item>\n\t\t\t<item>conserve_energy</item>\n\t\t\t<item>control0</item>\n\t\t\t<item>control1</item>\n\t\t\t<item>crackle</item>\n\t\t\t<item>crand</item>\n\t\t\t<item>cubic_wave</item>\n\t\t\t<item>cylindrical</item>\n\t\t\t<item>density_file</item>\n\t\t\t<item>density_map</item>\n\t\t\t<item>density</item>\n\t\t\t<item>dents</item>\n\t\t\t<item>diffuse</item>\n\t\t\t<item>dist_exp</item>\n\t\t\t<item>double_illuminate</item>\n\t\t\t<item>eccentricity</item>\n\t\t\t<item>emission</item>\n\t\t\t<item>exponent</item>\n\t\t\t<item>exterior</item>\n\t\t\t<item>extinction</item>\n\t\t\t<item>facets</item>\n\t\t\t<item>fade_colour</item>\n\t\t\t<item>fade_color</item>\n\t\t\t<item>fade_distance</item>\n\t\t\t<item>fade_power</item>\n\t\t\t<item>filter</item>\n\t\t\t<item>finish</item>\n\t\t\t<item>form</item>\n\t\t\t<item>frequency</item>\n\t\t\t<item>fresnel</item>\n\t\t\t<item>gradient</item>\n\t\t\t<item>granite</item>\n\t\t\t<item>gray</item>\n\t\t\t<item>green</item>\n\t\t\t<item>hexagon</item>\n\t\t\t<item>hypercomplex</item>\n\t\t\t<item>interior_texture</item>\n\t\t\t<item>image_map</item>\n\t\t\t<item>image_pattern</item>\n\t\t\t<item>interior</item>\n\t\t\t<item>interpolate</item>\n\t\t\t<item>intervals</item>\n\t\t\t<item>ior</item>\n\t\t\t<item>irid</item>\n\t\t\t<item>irid_wavelength</item>\n\t\t\t<item>julia</item>\n\t\t\t<item>lambda</item>\n\t\t\t<item>leopard</item>\n\t\t\t<item>magnet</item>\n\t\t\t<item>mandel</item>\n\t\t\t<item>map_type</item>\n\t\t\t<item>marble</item>\n\t\t\t<item>material_map</item>\n\t\t\t<item>material</item>\n\t\t\t<item>media</item>\n\t\t\t<item>metallic</item>\n\t\t\t<item>method</item>\n\t\t\t<item>metric</item>\n\t\t\t<item>mortar</item>\n\t\t\t<item>normal</item>\n\t\t\t<item>normal_map</item>\n\t\t\t<item>number_of_waves</item>\n\t\t\t<item>octaves</item>\n\t\t\t<item>omega</item>\n\t\t\t<item>once</item>\n\t\t\t<item>onion</item>\n\t\t\t<item>orientation</item>\n\t\t\t<item>phase</item>\n\t\t\t<item>phong_size</item>\n\t\t\t<item>phong</item>\n\t\t\t<item>pigment_map</item>\n\t\t\t<item>pigment</item>\n\t\t\t<item>planar</item>\n\t\t\t<item>quaternion</item>\n\t\t\t<item>quick_color</item>\n\t\t\t<item>quick_colour</item>\n\t\t\t<item>quilted</item>\n\t\t\t<item>radial</item>\n\t\t\t<item>ramp_wave</item>\n\t\t\t<item>red</item>\n\t\t\t<item>reflection_exponent</item>\n\t\t\t<item>reflection</item>\n\t\t\t<item>repeat</item>\n\t\t\t<item>rgbft</item>\n\t\t\t<item>rgbf</item>\n\t\t\t<item>rgbt</item>\n\t\t\t<item>rgb</item>\n\t\t\t<item>ripples</item>\n\t\t\t<item>roughness</item>\n\t\t\t<item>samples</item>\n\t\t\t<item>scallop_wave</item>\n\t\t\t<item>scattering</item>\n\t\t\t<item>sine_wave</item>\n\t\t\t<item>slope_map</item>\n\t\t\t<item>slope</item>\n\t\t\t<item>solid</item>\n\t\t\t<item>specular</item>\n\t\t\t<item>spherical</item>\n\t\t\t<item>spiral1</item>\n\t\t\t<item>spiral2</item>\n\t\t\t<item>spotted</item>\n\t\t\t<item>texture_list</item>\n\t\t\t<item>texture_map</item>\n\t\t\t<item>texture</item>\n\t\t\t<item>tile2</item>\n\t\t\t<item>tiles</item>\n\t\t\t<item>normal</item>\n\t\t\t<item>toroidal</item>\n\t\t\t<item>transmit</item>\n\t\t\t<item>triangle_wave</item>\n\t\t\t<item>turbulence</item>\n\t\t\t<item>turb_depth</item>\n\t\t\t<item>use_alpha</item>\n\t\t\t<item>use_color</item>\n\t\t\t<item>use_colour</item>\n\t\t\t<item>use_index</item>\n\t\t\t<item>uv_mapping</item>\n\t\t\t<item>warp</item>\n\t\t\t<item>waves</item>\n\t\t\t<item>wood</item>\n\t\t\t<item>wrinkles</item>\n\t\t\t<item>cutaway_textures</item>\n\t\t\t<item>pigment_pattern</item>\n\t\t\t<item>no_bump_scale</item>\n\t\t</list>\n\t\t<list name=\"transforms\">\n\t\t\t<item>matrix</item>\n\t\t\t<item>rotate</item>\n\t\t\t<item>scale</item>\n\t\t\t<item>translate</item>\n\t\t\t<item>transform</item>\n\t\t</list>\n\t\t<list name=\"filetypes\">\n\t\t\t<item>df3</item>\n\t\t\t<item>gif</item>\n\t\t\t<item>iff</item>\n\t\t\t<item>jpeg</item>\n\t\t\t<item>pgm</item>\n\t\t\t<item>png</item>\n\t\t\t<item>pot</item>\n\t\t\t<item>ppm</item>\n\t\t\t<item>tga</item>\n\t\t\t<item>tiff</item>\n\t\t\t<item>ttf</item>\n\t\t</list>\n\t\t<list name=\"identifiers\">\n\t\t\t<item>clock</item>\n\t\t\t<item>clock_delta</item>\n\t\t\t<item>clock_on</item>\n\t\t\t<item>final_clock</item>\n\t\t\t<item>final_frame</item>\n\t\t\t<item>frame_number</item>\n\t\t\t<item>image_height</item>\n\t\t\t<item>image_width</item>\n\t\t\t<item>initial_clock</item>\n\t\t\t<item>initial_frame</item>\n\t\t\t<item>t</item>\n\t\t\t<item>u</item>\n\t\t\t<item>v</item>\n\t\t\t<item>x</item>\n\t\t\t<item>y</item>\n\t\t\t<item>z</item>\n\t\t</list>\n\t\t<list name=\"constants\">\n\t\t\t<item>false</item>\n\t\t\t<item>no</item>\n\t\t\t<item>off</item>\n\t\t\t<item>on</item>\n\t\t\t<item>pi</item>\n\t\t\t<item>true</item>\n\t\t\t<item>yes</item>\n\t\t</list>\n\t\t<list name=\"functions\">\n\t\t\t<item>abs</item>\n\t\t\t<item>acos</item>\n\t\t\t<item>acosh</item>\n\t\t\t<item>asc</item>\n\t\t\t<item>asin</item>\n\t\t\t<item>asinh</item>\n\t\t\t<item>atan</item>\n\t\t\t<item>atan2</item>\n\t\t\t<item>atanh</item>\n\t\t\t<item>ceil</item>\n\t\t\t<item>chr</item>\n\t\t\t<item>concat</item>\n\t\t\t<item>cos</item>\n\t\t\t<item>cosh</item>\n\t\t\t<item>cube</item>\n\t\t\t<item>defined</item>\n\t\t\t<item>degress</item>\n\t\t\t<item>dimension_size</item>\n\t\t\t<item>dimensions</item>\n\t\t\t<item>div</item>\n\t\t\t<item>exp</item>\n\t\t\t<item>file_exists</item>\n\t\t\t<item>floor</item>\n\t\t\t<item>inside</item>\n\t\t\t<item>int</item>\n\t\t\t<item>ln</item>\n\t\t\t<item>log</item>\n\t\t\t<item>max</item>\n\t\t\t<item>min</item>\n\t\t\t<item>mod</item>\n\t\t\t<item>pow</item>\n\t\t\t<item>prod</item>\n\t\t\t<item>pwr</item>\n\t\t\t<item>radians</item>\n\t\t\t<item>rand</item>\n\t\t\t<item>seed</item>\n\t\t\t<item>select</item>\n\t\t\t<item>sin</item>\n\t\t\t<item>sinh</item>\n\t\t\t<item>sqrt</item>\n\t\t\t<item>str</item>\n\t\t\t<item>strcmp</item>\n\t\t\t<item>strlen</item>\n\t\t\t<item>strlwr</item>\n\t\t\t<item>strupr</item>\n\t\t\t<item>substr</item>\n\t\t\t<item>sum</item>\n\t\t\t<item>tan</item>\n\t\t\t<item>tanh</item>\n\t\t\t<item>trace</item>\n\t\t\t<item>val</item>\n\t\t\t<item>vaxis_rotate</item>\n\t\t\t<item>vcross</item>\n\t\t\t<item>vdot</item>\n\t\t\t<item>vlength</item>\n\t\t\t<item>vnormalize</item>\n\t\t\t<item>vrotate</item>\n\t\t\t<item>vstr</item>\n\t\t\t<item>vturbulence</item>\n\t\t</list>\n\t\t<list name=\"directives\">\n\t\t\t<item>#debug</item>\n\t\t\t<item>#default</item>\n\t\t\t<item>#else</item>\n\t\t\t<item>#end</item>\n\t\t\t<item>#error</item>\n\t\t\t<item>#fclose</item>\n\t\t\t<item>#fopen</item>\n\t\t\t<item>#if</item>\n\t\t\t<item>#ifdef</item>\n\t\t\t<item>#ifndef</item>\n\t\t\t<item>#include</item>\n\t\t\t<item>#range</item>\n\t\t\t<item>#read</item>\n\t\t\t<item>#render</item>\n\t\t\t<item>#statistics</item>\n\t\t\t<item>#switch</item>\n\t\t\t<item>#undef</item>\n\t\t\t<item>#version</item>\n\t\t\t<item>#warning</item>\n\t\t\t<item>#while</item>\n\t\t\t<item>#write</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<StringDetect attribute=\"Declaration\" context=\"Declaration\" String=\"#declare\" />\n\t\t\t\t<StringDetect attribute=\"Declaration\" context=\"Declaration\" String=\"#local\" />\n\t\t\t\t<StringDetect attribute=\"Macro\" context=\"Macro\" String=\"#macro\" />\n\t\t\t\t<keyword attribute=\"Objects\" context=\"#stay\" String=\"objects\" />\n\t\t\t\t<keyword attribute=\"Texturing\" context=\"#stay\" String=\"texturing\" />\n\t\t\t\t<keyword attribute=\"Transforms\" context=\"#stay\" String=\"transforms\" />\n\t\t\t\t<keyword attribute=\"Filetype\" context=\"#stay\" String=\"filetypes\" />\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"identifiers\" />\n\t\t\t\t<keyword attribute=\"Constant\" context=\"#stay\" String=\"constants\" />\n\t\t\t\t<keyword attribute=\"Functions\" context=\"#stay\" String=\"functions\" />\n\t\t\t\t<keyword attribute=\"Directives\" context=\"#stay\" String=\"directives\" />\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n\t\t\t\t<keyword attribute=\"Unofficial\" context=\"#stay\" String=\"unofficial\" />\n\t\t\t\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Float\" context=\"#stay\"/>\n\t\t\t\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"Region1\" firstNonSpace=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"Region1\" firstNonSpace=\"true\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Declaration\" lineEndContext=\"#pop\" name=\"Declaration\">\n\t\t\t\t<RegExpr attribute=\"Declare Keyword\" context=\"Declare_Keyword\" String=\"\\w+\" />\n\t\t\t\t<LineContinue attribute=\"Declaration\" context=\"#stay\"/>\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#pop#pop\" String=\"=[(\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Macro\" lineEndContext=\"#pop\" name=\"Macro\">\n\t\t\t\t<RegExpr attribute=\"Declare Macro\" context=\"Declare_Macro\" String=\"\\w+\" />\n\t\t\t\t<LineContinue attribute=\"Macro\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#pop#pop\" char=\"(\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Declare Keyword\" lineEndContext=\"#pop\" name=\"Declare_Keyword\">\n\t\t\t\t<LineContinue attribute=\"Declare Keyword\" context=\"#stay\"/>\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#pop#pop\" String=\"=[(\"/>\n\t\t\t</context> \n\n\t\t\t<context attribute=\"Declare Macro\" lineEndContext=\"#pop\" name=\"Declare_Macro\">\n\t\t\t\t<LineContinue attribute=\"Declare Macro\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Symbol\" context=\"#pop#pop\" char=\"(\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t</context>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"     defStyleNum=\"dsNormal\"   color=\"#000000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Keyword\"         defStyleNum=\"dsKeyword\"  color=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Unofficial\"      defStyleNum=\"dsKeyword\"  color=\"#0080d0\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Objects\"         defStyleNum=\"dsKeyword\"  color=\"#800000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Texturing\"       defStyleNum=\"dsKeyword\"  color=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Transforms\"      defStyleNum=\"dsKeyword\"  color=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Declaration\"     defStyleNum=\"dsKeyword\"  color=\"#000080\" selColor=\"#000080\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Macro\"           defStyleNum=\"dsKeyword\"  color=\"#000080\" selColor=\"#000080\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Declare Keyword\" defStyleNum=\"dsKeyword\"  color=\"#990099\" selColor=\"#990099\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Declare Macro\"   defStyleNum=\"dsKeyword\"  color=\"#CC0000\" selColor=\"#990099\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Functions\"       defStyleNum=\"dsKeyword\"  color=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Directives\"      defStyleNum=\"dsOthers\"   color=\"#3300ff\" selColor=\"#3300ff\" bold=\"1\" italic=\"0\"/>\n\t\t\t<itemData name=\"Filetype\"        defStyleNum=\"dsDataType\" color=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Constant\"        defStyleNum=\"dsFloat\"    color=\"#0000ff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Float\"           defStyleNum=\"dsFloat\"    color=\"#0000ff\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Char\"            defStyleNum=\"dsChar\"     color=\"#000080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"String\"          defStyleNum=\"dsString\"   color=\"#ff0000\" selColor=\"#ff0000\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"String Char\"     defStyleNum=\"dsChar\"     color=\"#ff00ff\" selColor=\"#ff00ff\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Comment\"         defStyleNum=\"dsComment\"  color=\"#008000\" selColor=\"#008000\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Symbol\"          defStyleNum=\"dsNormal\"   color=\"#660099\" selColor=\"#660099\" bold=\"0\" italic=\"0\"/>\n\t\t\t<itemData name=\"Region Marker\"   defStyleNum=\"dsRegionMarker\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" />\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/powershell.xml",
    "content": "<!DOCTYPE language SYSTEM \"language.dtd\">\n<language\n  name=\"PowerShell\"\n  version=\"4\"\n  kateversion=\"5.0\"\n  extensions=\"*.ps1;*.ps1m;*.ps1d\"\n  section=\"Scripts\"\n  author=\"Motoki Kashihara (motoki8791@gmail.com); Michael Lombardi (Michael.T.Lombardi@outlook.com)\"\n  casesensitive=\"0\"\n  license=\"MIT\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>Begin</item>\n      <item>Exit</item>\n      <item>Process</item>\n      <item>Break</item>\n      <item>Filter</item>\n      <item>Return</item>\n      <item>Catch</item>\n      <item>Finally</item>\n      <item>Sequence</item>\n      <item>Class</item>\n      <item>For</item>\n      <item>Switch</item>\n      <item>Continue</item>\n      <item>ForEach</item>\n      <item>Throw</item>\n      <item>Data</item>\n      <item>From</item>\n      <item>Trap</item>\n      <item>Define</item>\n      <item>Function</item>\n      <item>Try</item>\n      <item>Do</item>\n      <item>If</item>\n      <item>Until</item>\n      <item>DynamicParam</item>\n      <item>In</item>\n      <item>Using</item>\n      <item>Else</item>\n      <item>InlineScript</item>\n      <item>Var</item>\n      <item>ElseIf</item>\n      <item>Parallel</item>\n      <item>While</item>\n      <item>End</item>\n      <item>Param</item>\n      <item>Workflow</item>\n    </list>\n<!-- TODO: Seems unused?!\n      <list name=\"attributes\">\n      <item>CmdletBinding</item>\n      <item>ConfirmImpact</item>\n      <item>DefaultParameterSetName</item>\n      <item>HelpURI</item>\n      <item>SupportsPaging</item>\n      <item>SupportsShouldProcess</item>\n      <item>PositionalBinding</item>\n    </list>-->\n    <list name=\"types\">\n      <item>bool</item>\n      <item>byte</item>\n      <item>char</item>\n      <item>decimal</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>object</item>\n      <item>sbyte</item>\n      <item>short</item>\n      <item>string</item>\n      <item>switch</item>\n      <item>uint</item>\n      <item>ulong</item>\n      <item>ushort</item>\n    </list>\n<!-- TODO: Seems unused?!\n      <list name=\"operators\">\n      <item>-split</item>\n      <item>-isplit</item>\n      <item>-csplit</item>\n      <item>-join</item>\n      <item>-is</item>\n      <item>-isnot</item>\n      <item>-as</item>\n      <item>-eq</item>\n      <item>-ieq</item>\n      <item>-ceq</item>\n      <item>-ne</item>\n      <item>-ine</item>\n      <item>-cne</item>\n      <item>-gt</item>\n      <item>-igt</item>\n      <item>-cgt</item>\n      <item>-ge</item>\n      <item>-ige</item>\n      <item>-cge</item>\n      <item>-lt</item>\n      <item>-ilt</item>\n      <item>-clt</item>\n      <item>-le</item>\n      <item>-ile</item>\n      <item>-cle</item>\n      <item>-like</item>\n      <item>-ilike</item>\n      <item>-clike</item>\n      <item>-notlike</item>\n      <item>-inotlike</item>\n      <item>-cnotlike</item>\n      <item>-match</item>\n      <item>-imatch</item>\n      <item>-cmatch</item>\n      <item>-notmatch</item>\n      <item>-inotmatch</item>\n      <item>-cnotmatch</item>\n      <item>-contains</item>\n      <item>-icontains</item>\n      <item>-ccontains</item>\n      <item>-notcontains</item>\n      <item>-inotcontains</item>\n      <item>-cnotcontains</item>\n      <item>-replace</item>\n      <item>-ireplace</item>\n      <item>-creplace</item>\n      <item>-band</item>\n      <item>-bor</item>\n      <item>-bxor</item>\n      <item>-and</item>\n      <item>-or</item>\n      <item>-xor</item>\n      <item>.</item>\n      <item>&amp;</item>\n      <item>=</item>\n      <item>+=</item>\n      <item>-=</item>\n      <item>*=</item>\n      <item>/=</item>\n      <item>%=</item>\n    </list>-->\n    <list name=\"cmdlets\">\n      <item>Add-Content</item>\n      <item>Add-ADComputerServiceAccount</item>\n      <item>Add-ADDomainControllerPasswordReplicationPolicy</item>\n      <item>Add-ADFineGrainedPasswordPolicySubject</item>\n      <item>Add-ADGroupMember</item>\n      <item>Add-ADPrincipalGroupMembership</item>\n      <item>Add-BitsFile</item>\n      <item>Add-ClusterDisk</item>\n      <item>Add-ClusterFileServerRole</item>\n      <item>Add-ClusterGenericApplicationRole</item>\n      <item>Add-ClusterGenericScriptRole</item>\n      <item>Add-ClusterGenericServiceRole</item>\n      <item>Add-ClusterGroup</item>\n      <item>Add-ClusterNode</item>\n      <item>Add-ClusterPrintServerRole</item>\n      <item>Add-ClusterResource</item>\n      <item>Add-ClusterResourceDependency</item>\n      <item>Add-ClusterResourceType</item>\n      <item>Add-ClusterServerRole</item>\n      <item>Add-ClusterSharedVolume</item>\n      <item>Add-ClusterVirtualMachineRole</item>\n      <item>Add-Computer</item>\n      <item>Add-Content</item>\n      <item>Add-History</item>\n      <item>Add-JobTrigger</item>\n      <item>Add-Member</item>\n      <item>Add-NlbClusterNode</item>\n      <item>Add-NlbClusterNodeDip</item>\n      <item>Add-NlbClusterPortRule</item>\n      <item>Add-NlbClusterVip</item>\n      <item>Add-PSSnapin</item>\n      <item>Add-Type</item>\n      <item>Backup-GPO</item>\n      <item>Block-ClusterAccess</item>\n      <item>Checkpoint-Computer</item>\n      <item>Clear-ADAccountExpiration</item>\n      <item>Clear-ClusterDiskReservation</item>\n      <item>Clear-ClusterNode</item>\n      <item>Clear-Content</item>\n      <item>Clear-EventLog</item>\n      <item>Clear-History</item>\n      <item>Clear-Item</item>\n      <item>Clear-ItemProperty</item>\n      <item>Clear-RecycleBin</item>\n      <item>Clear-Variable</item>\n      <item>Compare-Object</item>\n      <item>Complete-BitsTransfer</item>\n      <item>Complete-Transaction</item>\n      <item>Connect-PSSession</item>\n      <item>Connect-WSMan</item>\n      <item>ConvertFrom-Csv</item>\n      <item>ConvertFrom-Json</item>\n      <item>ConvertFrom-SecureString</item>\n      <item>ConvertFrom-String</item>\n      <item>ConvertFrom-StringData</item>\n      <item>Convert-Path</item>\n      <item>Convert-String</item>\n      <item>ConvertTo-Csv</item>\n      <item>ConvertTo-Html</item>\n      <item>ConvertTo-Json</item>\n      <item>ConvertTo-SecureString</item>\n      <item>ConvertTo-Xml</item>\n      <item>Copy-GPO</item>\n      <item>Copy-Item</item>\n      <item>Copy-ItemProperty</item>\n      <item>Debug-Job</item>\n      <item>Debug-Process</item>\n      <item>Debug-Runspace</item>\n      <item>Disable-ADAccount</item>\n      <item>Disable-ADOptionalFeature</item>\n      <item>Disable-ComputerRestore</item>\n      <item>Disable-JobTrigger</item>\n      <item>Disable-NlbClusterPortRule</item>\n      <item>Disable-PSBreakpoint</item>\n      <item>Disable-PSRemoting</item>\n      <item>Disable-PSSessionConfiguration</item>\n      <item>Disable-RunspaceDebug</item>\n      <item>Disable-ScheduledJob</item>\n      <item>Disable-WSManCredSSP</item>\n      <item>Disconnect-PSSession</item>\n      <item>Disconnect-WSMan</item>\n      <item>Enable-ADAccount</item>\n      <item>Enable-ADOptionalFeature</item>\n      <item>Enable-ComputerRestore</item>\n      <item>Enable-JobTrigger</item>\n      <item>Enable-NlbClusterPortRule</item>\n      <item>Enable-PSBreakpoint</item>\n      <item>Enable-PSRemoting</item>\n      <item>Enable-PSSessionConfiguration</item>\n      <item>Enable-RunspaceDebug</item>\n      <item>Enable-ScheduledJob</item>\n      <item>Enable-WSManCredSSP</item>\n      <item>Enter-PSHostProcess</item>\n      <item>Enter-PSSession</item>\n      <item>Exit-PSHostProcess</item>\n      <item>Exit-PSSession</item>\n      <item>Export-Alias</item>\n      <item>Export-BinaryMiLog</item>\n      <item>Export-Clixml</item>\n      <item>Export-Console</item>\n      <item>Export-Counter</item>\n      <item>Export-Csv</item>\n      <item>Export-FormatData</item>\n      <item>Export-ModuleMember</item>\n      <item>Export-PSSession</item>\n      <item>Find-Package</item>\n      <item>Find-PackageProvider</item>\n      <item>ForEach-Object</item>\n      <item>Format-Custom</item>\n      <item>Format-List</item>\n      <item>Format-Table</item>\n      <item>Format-Wide</item>\n      <item>Get-Acl</item>\n      <item>Get-ADAccountAuthorizationGroup</item>\n      <item>Get-ADAccountResultantPasswordReplicationPolicy</item>\n      <item>Get-ADComputer</item>\n      <item>Get-ADComputerServiceAccount</item>\n      <item>Get-ADDefaultDomainPasswordPolicy</item>\n      <item>Get-ADDomain</item>\n      <item>Get-ADDomainController</item>\n      <item>Get-ADDomainControllerPasswordReplicationPolicy</item>\n      <item>Get-ADDomainControllerPasswordReplicationPolicyUsage</item>\n      <item>Get-ADFineGrainedPasswordPolicy</item>\n      <item>Get-ADFineGrainedPasswordPolicySubject</item>\n      <item>Get-ADForest</item>\n      <item>Get-ADGroup</item>\n      <item>Get-ADGroupMember</item>\n      <item>Get-ADObject</item>\n      <item>Get-ADOptionalFeature</item>\n      <item>Get-ADOrganizationalUnit</item>\n      <item>Get-ADPrincipalGroupMembership</item>\n      <item>Get-ADRootDSE</item>\n      <item>Get-ADServiceAccount</item>\n      <item>Get-ADUser</item>\n      <item>Get-ADUserResultantPasswordPolicy</item>\n      <item>Get-Alias</item>\n      <item>Get-AppLockerFileInformation</item>\n      <item>Get-AppLockerPolicy</item>\n      <item>Get-AuthenticodeSignature</item>\n      <item>Get-BitsTransfer</item>\n      <item>Get-ChildItem</item>\n      <item>Get-CimAssociatedInstance</item>\n      <item>Get-CimClass</item>\n      <item>Get-CimInstance</item>\n      <item>Get-CimSession</item>\n      <item>Get-Clipboard</item>\n      <item>Get-Cluster</item>\n      <item>Get-ClusterAccess</item>\n      <item>Get-ClusterAvailableDisk</item>\n      <item>Get-ClusterGroup</item>\n      <item>Get-ClusterLog</item>\n      <item>Get-ClusterNetwork</item>\n      <item>Get-ClusterNetworkInterfac</item>\n      <item>Get-ClusterNode</item>\n      <item>Get-ClusterOwnerNode</item>\n      <item>Get-ClusterParameter</item>\n      <item>Get-ClusterQuorum</item>\n      <item>Get-ClusterResource</item>\n      <item>Get-ClusterResourceDependency</item>\n      <item>Get-ClusterResourceDependencyReport</item>\n      <item>Get-ClusterResourceType</item>\n      <item>Get-ClusterSharedVolume</item>\n      <item>Get-CmsMessage</item>\n      <item>Get-Command</item>\n      <item>Get-ComputerRestorePoint</item>\n      <item>Get-Content</item>\n      <item>Get-ControlPanelItem</item>\n      <item>Get-Counter</item>\n      <item>Get-Credential</item>\n      <item>Get-Culture</item>\n      <item>Get-Date</item>\n      <item>Get-Event</item>\n      <item>Get-EventLog</item>\n      <item>Get-EventSubscriber</item>\n      <item>Get-ExecutionPolicy</item>\n      <item>Get-FormatData</item>\n      <item>Get-GPInheritance</item>\n      <item>Get-GPO</item>\n      <item>Get-GPOReport</item>\n      <item>Get-GPPermissions</item>\n      <item>Get-GPPrefRegistryValue</item>\n      <item>Get-GPRegistryValue</item>\n      <item>Get-GPResultantSetOfPolicy</item>\n      <item>Get-GPStarterGPO</item>\n      <item>Get-Help</item>\n      <item>Get-History</item>\n      <item>Get-Host</item>\n      <item>Get-HotFix</item>\n      <item>Get-Item</item>\n      <item>Get-ItemProperty</item>\n      <item>Get-ItemPropertyValue</item>\n      <item>Get-Job</item>\n      <item>Get-JobTrigger</item>\n      <item>Get-Location</item>\n      <item>Get-Member</item>\n      <item>Get-Module</item>\n      <item>Get-NlbCluster</item>\n      <item>Get-NlbClusterDriverInfo</item>\n      <item>Get-NlbClusterNode</item>\n      <item>Get-NlbClusterNodeDip</item>\n      <item>Get-NlbClusterNodeNetworkInterface</item>\n      <item>Get-NlbClusterPortRule</item>\n      <item>Get-NlbClusterVip</item>\n      <item>Get-Package</item>\n      <item>Get-PackageProvider</item>\n      <item>Get-PackageSource</item>\n      <item>Get-PfxCertificate</item>\n      <item>Get-Process</item>\n      <item>Get-PSBreakpoint</item>\n      <item>Get-PSCallStack</item>\n      <item>Get-PSDrive</item>\n      <item>Get-PSHostProcessInfo</item>\n      <item>Get-PSProvider</item>\n      <item>Get-PSReadlineKeyHandler</item>\n      <item>Get-PSReadlineOption</item>\n      <item>Get-PSSession</item>\n      <item>Get-PSSessionCapability</item>\n      <item>Get-PSSessionConfiguration</item>\n      <item>Get-PSSnapin</item>\n      <item>Get-Random</item>\n      <item>Get-Runspace</item>\n      <item>Get-RunspaceDebug</item>\n      <item>Get-ScheduledJob</item>\n      <item>Get-ScheduledJobOption</item>\n      <item>Get-Service</item>\n      <item>Get-TraceSource</item>\n      <item>Get-Transaction</item>\n      <item>Get-TroubleshootingPack</item>\n      <item>Get-TypeData</item>\n      <item>Get-UICulture</item>\n      <item>Get-Unique</item>\n      <item>Get-Variable</item>\n      <item>Get-WinEvent</item>\n      <item>Get-WmiObject</item>\n      <item>Get-WSManCredSSP</item>\n      <item>Get-WSManInstance</item>\n      <item>Grant-ClusterAccess</item>\n      <item>Group-Object</item>\n      <item>Import-Alias</item>\n      <item>Import-BinaryMiLog</item>\n      <item>Import-Clixml</item>\n      <item>Import-Counter</item>\n      <item>Import-Csv</item>\n      <item>Import-GPO</item>\n      <item>Import-LocalizedData</item>\n      <item>Import-Module</item>\n      <item>Import-PackageProvider</item>\n      <item>Import-PSSession</item>\n      <item>Install-ADServiceAccount</item>\n      <item>Install-Package</item>\n      <item>Install-PackageProvider</item>\n      <item>Invoke-CimMethod</item>\n      <item>Invoke-Command</item>\n      <item>Invoke-DscResource</item>\n      <item>Invoke-Expression</item>\n      <item>Invoke-History</item>\n      <item>Invoke-Item</item>\n      <item>Invoke-RestMethod</item>\n      <item>Invoke-TroubleshootingPack</item>\n      <item>Invoke-WebRequest</item>\n      <item>Invoke-WmiMethod</item>\n      <item>Invoke-WSManAction</item>\n      <item>Join-Path</item>\n      <item>Limit-EventLog</item>\n      <item>Measure-Command</item>\n      <item>Measure-Object</item>\n      <item>Move-ADDirectoryServer</item>\n      <item>Move-ADDirectoryServerOperationMasterRole</item>\n      <item>Move-ADObject</item>\n      <item>Move-ClusterGroup</item>\n      <item>Move-ClusterResource</item>\n      <item>Move-ClusterSharedVolume</item>\n      <item>Move-ClusterVirtualMachineRole</item>\n      <item>Move-Item</item>\n      <item>Move-ItemProperty</item>\n      <item>New-ADComputer</item>\n      <item>New-ADFineGrainedPasswordPolicy</item>\n      <item>New-ADGroup</item>\n      <item>New-ADObject</item>\n      <item>New-ADOrganizationalUnit</item>\n      <item>New-ADServiceAccount</item>\n      <item>New-ADUser</item>\n      <item>New-Alias</item>\n      <item>New-AppLockerPolicy</item>\n      <item>New-CimInstance</item>\n      <item>New-CimSession</item>\n      <item>New-CimSessionOption</item>\n      <item>New-Cluster</item>\n      <item>New-Event</item>\n      <item>New-EventLog</item>\n      <item>New-GPLink</item>\n      <item>New-GPO</item>\n      <item>New-GPStarterGPO</item>\n      <item>New-Item</item>\n      <item>New-ItemProperty</item>\n      <item>New-JobTrigger</item>\n      <item>New-Module</item>\n      <item>New-ModuleManifest</item>\n      <item>New-NlbCluster</item>\n      <item>New-NlbClusterIpv6Address</item>\n      <item>New-Object</item>\n      <item>New-PSDrive</item>\n      <item>New-PSRoleCapabilityFile</item>\n      <item>New-PSSession</item>\n      <item>New-PSSessionConfigurationFile</item>\n      <item>New-PSSessionOption</item>\n      <item>New-PSTransportOption</item>\n      <item>New-PSWorkflowExecutionOption</item>\n      <item>New-ScheduledJobOption</item>\n      <item>New-Service</item>\n      <item>New-TimeSpan</item>\n      <item>New-Variable</item>\n      <item>New-WebServiceProxy</item>\n      <item>New-WinEvent</item>\n      <item>New-WSManInstance</item>\n      <item>New-WSManSessionOption</item>\n      <item>Out-Default</item>\n      <item>Out-File</item>\n      <item>Out-GridView</item>\n      <item>Out-Host</item>\n      <item>Out-Null</item>\n      <item>Out-Printer</item>\n      <item>Out-String</item>\n      <item>Pop-Location</item>\n      <item>Protect-CmsMessage</item>\n      <item>Publish-DscConfiguration</item>\n      <item>Push-Location</item>\n      <item>Read-Host</item>\n      <item>Receive-Job</item>\n      <item>Receive-PSSession</item>\n      <item>Register-ArgumentCompleter</item>\n      <item>Register-CimIndicationEvent</item>\n      <item>Register-EngineEvent</item>\n      <item>Register-ObjectEvent</item>\n      <item>Register-PackageSource</item>\n      <item>Register-PSSessionConfiguration</item>\n      <item>Register-ScheduledJob</item>\n      <item>Register-WmiEvent</item>\n      <item>Remove-ADComputer</item>\n      <item>Remove-ADComputerServiceAccount</item>\n      <item>Remove-ADDomainControllerPasswordReplicationPolicy</item>\n      <item>Remove-ADFineGrainedPasswordPolicy</item>\n      <item>Remove-ADFineGrainedPasswordPolicySubject</item>\n      <item>Remove-ADGroup</item>\n      <item>Remove-ADGroupMember</item>\n      <item>Remove-ADObject</item>\n      <item>Remove-ADOrganizationalUnit</item>\n      <item>Remove-ADPrincipalGroupMembership</item>\n      <item>Remove-ADServiceAccount</item>\n      <item>Remove-ADUser</item>\n      <item>Remove-BitsTransfer</item>\n      <item>Remove-CimInstance</item>\n      <item>Remove-CimSession</item>\n      <item>Remove-Cluster</item>\n      <item>Remove-ClusterAccess</item>\n      <item>Remove-ClusterGroup</item>\n      <item>Remove-ClusterNode</item>\n      <item>Remove-ClusterResource</item>\n      <item>Remove-ClusterResourceDependency</item>\n      <item>Remove-ClusterResourceType</item>\n      <item>Remove-ClusterSharedVolume</item>\n      <item>Remove-Computer</item>\n      <item>Remove-Event</item>\n      <item>Remove-EventLog</item>\n      <item>Remove-GPLink</item>\n      <item>Remove-GPO</item>\n      <item>Remove-GPPrefRegistryValue</item>\n      <item>Remove-GPRegistryValue</item>\n      <item>Remove-Item</item>\n      <item>Remove-ItemProperty</item>\n      <item>Remove-Job</item>\n      <item>Remove-JobTrigger</item>\n      <item>Remove-Module</item>\n      <item>Remove-NlbCluster</item>\n      <item>Remove-NlbClusterNode</item>\n      <item>Remove-NlbClusterNodeDip</item>\n      <item>Remove-NlbClusterPortRule</item>\n      <item>Remove-NlbClusterVip</item>\n      <item>Remove-PSBreakpoint</item>\n      <item>Remove-PSDrive</item>\n      <item>Remove-PSReadlineKeyHandler</item>\n      <item>Remove-PSSession</item>\n      <item>Remove-PSSnapin</item>\n      <item>Remove-TypeData</item>\n      <item>Remove-Variable</item>\n      <item>Remove-WmiObject</item>\n      <item>Remove-WSManInstance</item>\n      <item>Rename-ADObject</item>\n      <item>Rename-Computer</item>\n      <item>Rename-GPO</item>\n      <item>Rename-Item</item>\n      <item>Rename-ItemProperty</item>\n      <item>Repair-ClusterSharedVolume</item>\n      <item>Reset-ADServiceAccountPassword</item>\n      <item>Reset-ComputerMachinePassword</item>\n      <item>Resolve-Path</item>\n      <item>Restart-Computer</item>\n      <item>Restart-Service</item>\n      <item>Restore-ADObject</item>\n      <item>Restore-Computer</item>\n      <item>Restore-GPO</item>\n      <item>Resume-BitsTransfer</item>\n      <item>Resume-ClusterNode</item>\n      <item>Resume-ClusterResource</item>\n      <item>Resume-Job</item>\n      <item>Resume-NlbCluster</item>\n      <item>Resume-NlbClusterNode</item>\n      <item>Resume-Service</item>\n      <item>Save-Help</item>\n      <item>Save-Package</item>\n      <item>Search-ADAccount</item>\n      <item>Select-Object</item>\n      <item>Select-String</item>\n      <item>Select-Xml</item>\n      <item>Send-MailMessage</item>\n      <item>Set-Acl</item>\n      <item>Set-ADAccountControl</item>\n      <item>Set-ADAccountExpiration</item>\n      <item>Set-ADAccountPassword</item>\n      <item>Set-ADComputer</item>\n      <item>Set-ADDefaultDomainPasswordPolicy</item>\n      <item>Set-ADDomain</item>\n      <item>Set-ADDomainMode</item>\n      <item>Set-ADFineGrainedPasswordPolicy</item>\n      <item>Set-ADForest</item>\n      <item>Set-ADForestMode</item>\n      <item>Set-ADGroup</item>\n      <item>Set-ADObject</item>\n      <item>Set-ADOrganizationalUnit</item>\n      <item>Set-ADServiceAccount</item>\n      <item>Set-ADUser</item>\n      <item>Set-Alias</item>\n      <item>Set-AppLockerPolicy</item>\n      <item>Set-AuthenticodeSignature</item>\n      <item>Set-BitsTransfer</item>\n      <item>Set-CimInstance</item>\n      <item>Set-Clipboard</item>\n      <item>Set-ClusterLog</item>\n      <item>Set-ClusterOwnerNode</item>\n      <item>Set-ClusterParameter</item>\n      <item>Set-ClusterQuorum</item>\n      <item>Set-ClusterResourceDependency</item>\n      <item>Set-Content</item>\n      <item>Set-Date</item>\n      <item>Set-DscLocalConfigurationManager</item>\n      <item>Set-ExecutionPolicy</item>\n      <item>Set-GPInheritance</item>\n      <item>Set-GPLink</item>\n      <item>Set-GPPermissions</item>\n      <item>Set-GPPrefRegistryValue</item>\n      <item>Set-GPRegistryValue</item>\n      <item>Set-Item</item>\n      <item>Set-ItemProperty</item>\n      <item>Set-JobTrigger</item>\n      <item>Set-Location</item>\n      <item>Set-NlbCluster</item>\n      <item>Set-NlbClusterNode</item>\n      <item>Set-NlbClusterNodeDip</item>\n      <item>Set-NlbClusterPortRule</item>\n      <item>Set-NlbClusterPortRuleNodeHandlingPriority</item>\n      <item>Set-NlbClusterPortRuleNodeWeight</item>\n      <item>Set-NlbClusterVip</item>\n      <item>Set-PackageSource</item>\n      <item>Set-PSBreakpoint</item>\n      <item>Set-PSDebug</item>\n      <item>Set-PSReadlineKeyHandler</item>\n      <item>Set-PSReadlineOption</item>\n      <item>Set-PSSessionConfiguration</item>\n      <item>Set-ScheduledJob</item>\n      <item>Set-ScheduledJobOption</item>\n      <item>Set-Service</item>\n      <item>Set-StrictMode</item>\n      <item>Set-TraceSource</item>\n      <item>Set-Variable</item>\n      <item>Set-WmiInstance</item>\n      <item>Set-WSManInstance</item>\n      <item>Set-WSManQuickConfig</item>\n      <item>Show-Command</item>\n      <item>Show-ControlPanelItem</item>\n      <item>Show-EventLog</item>\n      <item>Sort-Object</item>\n      <item>Split-Path</item>\n      <item>Start-BitsTransfer</item>\n      <item>Start-Cluster</item>\n      <item>Start-ClusterGroup</item>\n      <item>Start-ClusterNode</item>\n      <item>Start-ClusterResource</item>\n      <item>Start-DscConfiguration</item>\n      <item>Start-Job</item>\n      <item>Start-NlbCluster</item>\n      <item>Start-NlbClusterNode</item>\n      <item>Start-Process</item>\n      <item>Start-Service</item>\n      <item>Start-Sleep</item>\n      <item>Start-Transaction</item>\n      <item>Start-Transcript</item>\n      <item>Stop-Cluster</item>\n      <item>Stop-ClusterGroup</item>\n      <item>Stop-ClusterNode</item>\n      <item>Stop-ClusterResource</item>\n      <item>Stop-Computer</item>\n      <item>Stop-Job</item>\n      <item>Stop-NlbCluster</item>\n      <item>Stop-NlbClusterNode</item>\n      <item>Stop-Process</item>\n      <item>Stop-Service</item>\n      <item>Stop-Transcript</item>\n      <item>Suspend-BitsTransfer</item>\n      <item>Suspend-ClusterNode</item>\n      <item>Suspend-ClusterResource</item>\n      <item>Suspend-Job</item>\n      <item>Suspend-NlbCluster</item>\n      <item>Suspend-NlbClusterNode</item>\n      <item>Suspend-Service</item>\n      <item>Tee-Object</item>\n      <item>Test-AppLockerPolicy</item>\n      <item>Test-Cluster</item>\n      <item>Test-ClusterResourceFailure</item>\n      <item>Test-ComputerSecureChannel</item>\n      <item>Test-Connection</item>\n      <item>Test-DscConfiguration</item>\n      <item>Test-ModuleManifest</item>\n      <item>Test-Path</item>\n      <item>Test-PSSessionConfigurationFile</item>\n      <item>Test-WSMan</item>\n      <item>Trace-Command</item>\n      <item>Unblock-File</item>\n      <item>Undo-Transaction</item>\n      <item>Uninstall-ADServiceAccount</item>\n      <item>Uninstall-Package</item>\n      <item>Unlock-ADAccount</item>\n      <item>Unprotect-CmsMessage</item>\n      <item>Unregister-Event</item>\n      <item>Unregister-PackageSource</item>\n      <item>Unregister-PSSessionConfiguration</item>\n      <item>Unregister-ScheduledJob</item>\n      <item>Update-ClusterIPResource</item>\n      <item>Update-ClusterVirtualMachineConfiguration</item>\n      <item>Update-FormatData</item>\n      <item>Update-Help</item>\n      <item>Update-List</item>\n      <item>Update-TypeData</item>\n      <item>Use-Transaction</item>\n      <item>Wait-Debugger</item>\n      <item>Wait-Event</item>\n      <item>Wait-Job</item>\n      <item>Wait-Process</item>\n      <item>Where-Object</item>\n      <item>Write-Debug</item>\n      <item>Write-Error</item>\n      <item>Write-EventLog</item>\n      <item>Write-Host</item>\n      <item>Write-Information</item>\n      <item>Write-Output</item>\n      <item>Write-Progress</item>\n      <item>Write-Verbose</item>\n      <item>Write-Warning</item>\n      <item>ac</item>\n      <item>asnp</item>\n      <item>cat</item>\n      <item>cd</item>\n      <item>chdir</item>\n      <item>clc</item>\n      <item>clear</item>\n      <item>clhy</item>\n      <item>cli</item>\n      <item>clp</item>\n      <item>cls</item>\n      <item>clv</item>\n      <item>cnsn</item>\n      <item>compare</item>\n      <item>copy</item>\n      <item>cp</item>\n      <item>cpi</item>\n      <item>cpp</item>\n      <item>curl</item>\n      <item>cvpa</item>\n      <item>dbp</item>\n      <item>del</item>\n      <item>diff</item>\n      <item>dir</item>\n      <item>dnsn</item>\n      <item>ebp</item>\n      <item>echo</item>\n      <item>epal</item>\n      <item>epcsv</item>\n      <item>epsn</item>\n      <item>erase</item>\n      <item>etsn</item>\n      <item>exsn</item>\n      <item>fc</item>\n      <item>fl</item>\n      <item>foreach</item>\n      <item>ft</item>\n      <item>fw</item>\n      <item>gal</item>\n      <item>gbp</item>\n      <item>gc</item>\n      <item>gci</item>\n      <item>gcm</item>\n      <item>gcs</item>\n      <item>gdr</item>\n      <item>ghy</item>\n      <item>gi</item>\n      <item>gjb</item>\n      <item>gl</item>\n      <item>gm</item>\n      <item>gmo</item>\n      <item>gp</item>\n      <item>gps</item>\n      <item>group</item>\n      <item>gsn</item>\n      <item>gsnp</item>\n      <item>gsv</item>\n      <item>gu</item>\n      <item>gv</item>\n      <item>gwmi</item>\n      <item>h</item>\n      <item>history</item>\n      <item>icm</item>\n      <item>iex</item>\n      <item>ihy</item>\n      <item>ii</item>\n      <item>ipal</item>\n      <item>ipcsv</item>\n      <item>ipmo</item>\n      <item>ipsn</item>\n      <item>irm</item>\n      <item>ise</item>\n      <item>iwmi</item>\n      <item>iwr</item>\n      <item>kill</item>\n      <item>lp</item>\n      <item>ls</item>\n      <item>man</item>\n      <item>md</item>\n      <item>measure</item>\n      <item>mi</item>\n      <item>mount</item>\n      <item>move</item>\n      <item>mp</item>\n      <item>mv</item>\n      <item>nal</item>\n      <item>ndr</item>\n      <item>ni</item>\n      <item>nmo</item>\n      <item>npssc</item>\n      <item>nsn</item>\n      <item>nv</item>\n      <item>ogv</item>\n      <item>oh</item>\n      <item>popd</item>\n      <item>ps</item>\n      <item>pushd</item>\n      <item>pwd</item>\n      <item>r</item>\n      <item>rbp</item>\n      <item>rcjb</item>\n      <item>rcsn</item>\n      <item>rd</item>\n      <item>rdr</item>\n      <item>ren</item>\n      <item>ri</item>\n      <item>rjb</item>\n      <item>rm</item>\n      <item>rmdir</item>\n      <item>rmo</item>\n      <item>rni</item>\n      <item>rnp</item>\n      <item>rp</item>\n      <item>rsn</item>\n      <item>rsnp</item>\n      <item>rujb</item>\n      <item>rv</item>\n      <item>rvpa</item>\n      <item>rwmi</item>\n      <item>sajb</item>\n      <item>sal</item>\n      <item>saps</item>\n      <item>sasv</item>\n      <item>sbp</item>\n      <item>sc</item>\n      <item>select</item>\n      <item>set</item>\n      <item>shcm</item>\n      <item>si</item>\n      <item>sl</item>\n      <item>sleep</item>\n      <item>sls</item>\n      <item>sort</item>\n      <item>sp</item>\n      <item>spjb</item>\n      <item>spps</item>\n      <item>spsv</item>\n      <item>start</item>\n      <item>sujb</item>\n      <item>sv</item>\n      <item>swmi</item>\n      <item>tee</item>\n      <item>trcm</item>\n      <item>type</item>\n      <item>wget</item>\n      <item>where</item>\n      <item>wjb</item>\n      <item>write</item>\n      <item>\\%</item>\n      <item>\\?</item>\n    </list>\n    <list name=\"special-variables\">\n      <item>$_</item>\n      <item>$True</item>\n      <item>$False</item>\n      <item>$Env</item>\n      <item>$Null</item>\n      <item>$^</item>\n      <item>$$</item>\n      <item>$?</item>\n      <item>$input</item>\n      <item>$foreach</item>\n      <item>$args</item>\n      <item>$switch</item>\n      <item>$matches</item>\n      <item>$LastExitCode</item>\n      <item>$Error</item>\n      <item>$StackTrace</item>\n      <item>$HOME</item>\n      <item>$PsHome</item>\n      <item>$ConsoleFileName</item>\n      <item>$PWD</item>\n      <item>$ShellId</item>\n      <item>$Profile</item>\n      <item>$Host</item>\n      <item>$OFS</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <IncludeRules context=\"Cmdlet\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"HereString\" context=\"HereStringer\" char=\"@\" char1=\"&quot;\" beginRegion=\"StringRegion\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <DetectChar attribute=\"Comment\" context=\"Commentar 1\" char=\"#\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"&lt;\" char1=\"#\" beginRegion=\"CommentRegion\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"block1\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"block1\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b\\$global(?=\\s+(:))\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b\\$script(?=\\s+(:))\"/>\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\" />\n        <keyword attribute=\"Special Variable\" context=\"#stay\" String=\"special-variables\"/>\n        <RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#pop\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"HereString\" lineEndContext=\"#stay\" name=\"HereStringer\">\n        <Detect2Chars attribute=\"HereString\" context=\"#pop\" char=\"&quot;\" char1=\"@\" endRegion=\"StringRegion\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"#\" char1=\"&gt;\" endRegion=\"CommentRegion\"/>\n      </context>\n      <context attribute=\"Cmdlets\" lineEndContext=\"#stay\" name=\"Cmdlet\">\n        <keyword attribute=\"Function\" context=\"#stay\" String=\"cmdlets\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"HereString\"       defStyleNum=\"dsVerbatimString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Cmdlets\"      defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n      <itemData name=\"Special Variable\" defStyleNum=\"dsVariable\" bold=\"1\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n      <comment name=\"multiLine\" start=\"&lt;#\" end=\"#&gt;\" region=\"CommentRegion\"/>\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\":-\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ppd.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<!DOCTYPE language SYSTEM \"language.dtd\" []>\n\n<!--\nThe following documentation is available for PPD:\n- File Format Specification: http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf\n- Update to the Specification: http://partners.adobe.com/public/developer/en/ps/5645.PPD_Update.pdf\n- CUPS PPD Extensions: http://www.cups.org/documentation.php/doc-1.4/spec-ppd.html\n-->\n\n<language name=\"PostScript Printer Description\" version=\"2\" kateversion=\"2.4\" section=\"Markup\" extensions=\"*.ppd\" author=\"Lukas Sommer\" mimetype=\"application/vnd.cups-ppd\" license=\"Public Domain\">\n\n    <highlighting>\n\n        <contexts>\n            <context attribute=\"Option\" lineEndContext=\"#stay\" name=\"contextNormal\">\n                <Detect2Chars context=\"contextComment\" char=\"*\" char1=\"%\" column=\"0\"/>\n                <DetectChar attribute=\"Colon\" context=\"contextValue\" char=\":\" />\n                <StringDetect attribute=\"Keyword\" String=\"*OpenUI\" beginRegion=\"ui\"/>\n                <StringDetect attribute=\"Keyword\" String=\"*CloseUI\" endRegion=\"ui\"/>\n                <StringDetect attribute=\"Keyword\" String=\"*OpenGroup\" beginRegion=\"group\"/>\n                <StringDetect attribute=\"Keyword\" String=\"*CloseGroup\" endRegion=\"group\"/>\n                <RegExpr attribute=\"Keyword\" String=\"\\*[&#33;-&#46;&#48;-&#57;&#59;-&#126;]*\"/> <!-- According to http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf page 16 (page 20 in the PDF file), all characters from 33 to 126 are allowed, except ':' and '/'. -->\n            </context>\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"contextComment\">\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n            <context attribute=\"Value\" lineEndContext=\"#pop\" name=\"contextValue\">\n                <DetectSpaces/>\n                <DetectChar attribute=\"Value\" context=\"contextValueMultiLine\" char=\"&quot;\" />\n                <RegExpr attribute=\"Value\" context=\"contextValueSingleLine\" String=\".\"/>\n            </context>\n            <context attribute=\"Value\" lineEndContext=\"#stay\" name=\"contextValueMultiLine\">\n                <DetectSpaces/>\n                <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n            </context>\n            <context attribute=\"Value\" lineEndContext=\"#pop\" name=\"contextValueSingleLine\">\n            </context>\n        </contexts>\n\n        <itemDatas>\n          <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n          <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n          <itemData name=\"Colon\"   defStyleNum=\"dsKeyword\"/>\n          <itemData name=\"Value\"  defStyleNum=\"dsString\"/>\n          <itemData name=\"Option\"  defStyleNum=\"dsOthers\"/>\n        </itemDatas>\n\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"*%\"/>\n        </comments>\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/praat.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY B '([^a-zA-Z0-9\\._\"&apos;\\$#\\[:\\(]|\\s|^|$)'>\n]>\n<!--\n   This file is part of the KDE project\n   Copyright (C) 2016 José Joaquín Atria <jjatria@gmail.com>\n\n   This library is free software; you can redistribute it and/or\n   modify it under the terms of the GNU Library General Public\n   License version 2 as published by the Free Software Foundation.\n\n   This library is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n   Library General Public License for more details.\n\n   You should have received a copy of the GNU Library General Public License\n   along with this library; see the file COPYING.LIB.  If not, write to\n   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n   Boston, MA 02110-1301, USA.\n-->\n<language name=\"Praat\" version=\"2\" kateversion=\"2.4\" section=\"Scripts\" extensions=\"*.Praat;*.praat;*.psc;*.praat-script;*.praatscript;*.proc\" author=\"Jose Joaquín Atria (jjatria@gmail.com)\" license=\"LGPLv2\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>assert</item>\n      <item>clearinfo</item>\n      <item>demo</item>\n      <item>elif</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>from</item>\n      <item>minus</item>\n      <item>nocheck</item>\n      <item>noprogress</item>\n      <item>nowarn</item>\n      <item>plus</item>\n      <item>select</item>\n      <item>stopwatch</item>\n      <item>then</item>\n      <item>to</item>\n    </list>\n    <list name=\"functions_string\">\n      <item>backslashTrigraphsToUnicode$</item>\n      <item>chooseDirectory$</item>\n      <item>chooseReadFile$</item>\n      <item>chooseWriteFile$</item>\n      <item>date$</item>\n      <item>demoKey$</item>\n      <item>do$</item>\n      <item>environment$</item>\n      <item>extractLine$</item>\n      <item>extractWord$</item>\n      <item>fixed$</item>\n      <item>info$</item>\n      <item>left$</item>\n      <item>mid$</item>\n      <item>percent$</item>\n      <item>readFile$</item>\n      <item>replace$</item>\n      <item>replace_regex$</item>\n      <item>right$</item>\n      <item>selected$</item>\n      <item>string$</item>\n    </list>\n    <list name=\"functions_numeric\">\n      <item>abs</item>\n      <item>appendFile</item>\n      <item>appendFileLine</item>\n      <item>appendInfo</item>\n      <item>appendInfoLine</item>\n      <item>arccos</item>\n      <item>arccosh</item>\n      <item>arcsin</item>\n      <item>arcsinh</item>\n      <item>arctan</item>\n      <item>arctan2</item>\n      <item>arctanh</item>\n      <item>barkToHertz</item>\n      <item>beginPause</item>\n      <item>beginSendPraat</item>\n      <item>besselI</item>\n      <item>besselK</item>\n      <item>beta</item>\n      <item>beta2</item>\n      <item>binomialP</item>\n      <item>binomialQ</item>\n      <item>boolean</item>\n      <item>ceiling</item>\n      <item>chiSquareP</item>\n      <item>chiSquareQ</item>\n      <item>choice</item>\n      <item>comment</item>\n      <item>cos</item>\n      <item>cosh</item>\n      <item>createDirectory</item>\n      <item>deleteFile</item>\n      <item>demoClicked</item>\n      <item>demoClickedIn</item>\n      <item>demoCommandKeyPressed</item>\n      <item>demoExtraControlKeyPressed</item>\n      <item>demoInput</item>\n      <item>demoKeyPressed</item>\n      <item>demoOptionKeyPressed</item>\n      <item>demoShiftKeyPressed</item>\n      <item>demoShow</item>\n      <item>demoWaitForInput</item>\n      <item>demoWindowTitle</item>\n      <item>demoX</item>\n      <item>demoY</item>\n      <item>differenceLimensToPhon</item>\n      <item>do</item>\n      <item>editor</item>\n      <item>endPause</item>\n      <item>endSendPraat</item>\n      <item>endsWith</item>\n      <item>erb</item>\n      <item>erbToHertz</item>\n      <item>erf</item>\n      <item>erfc</item>\n      <item>exitScript</item>\n      <item>exp</item>\n      <item>extractNumber</item>\n      <item>fileReadable</item>\n      <item>fisherP</item>\n      <item>fisherQ</item>\n      <item>floor</item>\n      <item>gaussP</item>\n      <item>gaussQ</item>\n      <item>hash</item>\n      <item>hertzToBark</item>\n      <item>hertzToErb</item>\n      <item>hertzToMel</item>\n      <item>hertzToSemitones</item>\n      <item>imax</item>\n      <item>imin</item>\n      <item>incompleteBeta</item>\n      <item>incompleteGammaP</item>\n      <item>index</item>\n      <item>index_regex</item>\n      <item>integer</item>\n      <item>invBinomialP</item>\n      <item>invBinomialQ</item>\n      <item>invChiSquareQ</item>\n      <item>invFisherQ</item>\n      <item>invGaussQ</item>\n      <item>invSigmoid</item>\n      <item>invStudentQ</item>\n      <item>length</item>\n      <item>ln</item>\n      <item>lnBeta</item>\n      <item>lnGamma</item>\n      <item>log10</item>\n      <item>log2</item>\n      <item>max</item>\n      <item>melToHertz</item>\n      <item>min</item>\n      <item>minusObject</item>\n      <item>natural</item>\n      <item>number</item>\n      <item>numberOfColumns</item>\n      <item>numberOfRows</item>\n      <item>numberOfSelected</item>\n      <item>objectsAreIdentical</item>\n      <item>option</item>\n      <item>optionMenu</item>\n      <item>pauseScript</item>\n      <item>phonToDifferenceLimens</item>\n      <item>plusObject</item>\n      <item>positive</item>\n      <item>randomBinomial</item>\n      <item>randomGauss</item>\n      <item>randomInteger</item>\n      <item>randomPoisson</item>\n      <item>randomUniform</item>\n      <item>real</item>\n      <item>readFile</item>\n      <item>removeObject</item>\n      <item>rindex</item>\n      <item>rindex_regex</item>\n      <item>round</item>\n      <item>runScript</item>\n      <item>runSystem</item>\n      <item>runSystem_nocheck</item>\n      <item>selectObject</item>\n      <item>selected</item>\n      <item>semitonesToHertz</item>\n      <item>sentence</item>\n      <item>sentencetext</item>\n      <item>sigmoid</item>\n      <item>sin</item>\n      <item>sinc</item>\n      <item>sincpi</item>\n      <item>sinh</item>\n      <item>soundPressureToPhon</item>\n      <item>sqrt</item>\n      <item>startsWith</item>\n      <item>studentP</item>\n      <item>studentQ</item>\n      <item>tan</item>\n      <item>tanh</item>\n      <item>text</item>\n      <item>variableExists</item>\n      <item>word</item>\n      <item>writeFile</item>\n      <item>writeFileLine</item>\n      <item>writeInfo</item>\n      <item>writeInfoLine</item>\n  </list>\n    <list name=\"functions_array\">\n      <item>linear#</item>\n      <item>randomGauss#</item>\n      <item>randomInteger#</item>\n      <item>randomUniform#</item>\n      <item>zero#</item>\n    </list>\n    <list name=\"variables_numeric\">\n      <item>all</item>\n      <item>average</item>\n      <item>e</item>\n      <item>left</item>\n      <item>macintosh</item>\n      <item>mono</item>\n      <item>pi</item>\n      <item>praatVersion</item>\n      <item>right</item>\n      <item>stereo</item>\n      <item>undefined</item>\n      <item>unix</item>\n      <item>windows</item>\n   </list>\n    <list name=\"variables_string\">\n      <item>praatVersion$</item>\n      <item>tab$</item>\n      <item>shellDirectory$</item>\n      <item>homeDirectory$</item>\n      <item>preferencesDirectory$</item>\n      <item>newline$</item>\n      <item>temporaryDirectory$</item>\n      <item>defaultDirectory$</item>\n    </list>\n    <contexts>\n      <context name=\"normal\" attribute=\"normal\" lineEndContext=\"#pop\"  >\n        <DetectChar char='#' attribute=\"comment\" context=\"comment\" firstNonSpace=\"true\" />\n\n        <IncludeRules context=\"function check\" />\n\n        <DetectChar char='@' attribute=\"function\" context=\"procedure name\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"call&B;\" attribute=\"keyword\" context=\"function word to shorthand arguments\" firstNonSpace=\"true\" />\n        <RegExpr String=\"include&B;\" attribute=\"keyword\" context=\"unquoted string\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"&B;?if&B;\" attribute=\"keyword\" beginRegion=\"if\" />\n        <RegExpr String=\"endif&B;\" attribute=\"keyword\" endRegion=\"if\" firstNonSpace=\"true\" />\n        <RegExpr String=\"&B;?fi&B;\" attribute=\"keyword\" endRegion=\"if\" />\n\n        <RegExpr String=\"for&B;\" attribute=\"keyword\" beginRegion=\"for\" firstNonSpace=\"true\" />\n        <RegExpr String=\"endfor&B;\" attribute=\"keyword\" endRegion=\"for\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"while&B;\" attribute=\"keyword\" beginRegion=\"while\" firstNonSpace=\"true\" />\n        <RegExpr String=\"endwhile&B;\" attribute=\"keyword\" endRegion=\"while\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"repeat&B;\" attribute=\"keyword\" beginRegion=\"repeat\" firstNonSpace=\"true\" />\n        <RegExpr String=\"until&B;\" attribute=\"keyword\" endRegion=\"repeat\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"procedure&B;\" attribute=\"keyword\" context=\"procedure name\" beginRegion=\"procedure\" firstNonSpace=\"true\" />\n        <RegExpr String=\"endproc&B;\" attribute=\"keyword\" endRegion=\"procedure\" firstNonSpace=\"true\" />\n\n        <StringDetect String=\"select all\" attribute=\"keyword\" firstNonSpace=\"true\" />\n        <keyword String=\"keywords\" attribute=\"keyword\" />\n\n        <RegExpr String=\"&B;print(line|tab)?&B;\" attribute=\"keyword\" context=\"unquoted string\" />\n        <RegExpr String=\"&B;echo&B;\" attribute=\"keyword\" context=\"unquoted string\" />\n        <RegExpr String=\"&B;exit&B;\" attribute=\"keyword\" context=\"unquoted string\" />\n        <RegExpr String=\"&B;asserterror&B;\" attribute=\"keyword\" context=\"unquoted string\" />\n        <RegExpr String=\"&B;pause&B;\" attribute=\"keyword\" context=\"unquoted string\" />\n        <RegExpr String=\"&B;send(praat|socket)&B;\" attribute=\"keyword\" context=\"unquoted string\" />\n        <RegExpr String=\"&B;execute&B;\" attribute=\"keyword\" context=\"unquoted string\" />\n        <RegExpr String=\"&B;editor&B;\" attribute=\"keyword\" context=\"unquoted string\" beginRegion=\"editor\" />\n        <RegExpr String=\"&B;endeditor&B;\" attribute=\"keyword\" endRegion=\"editor\" />\n\n        <RegExpr String=\"form&B;\" attribute=\"keyword\" context=\"old form definition\" firstNonSpace=\"true\" beginRegion=\"form\" />\n\n        <RegExpr String=\"goto&B;\" attribute=\"keyword\" context=\"label\"  firstNonSpace=\"true\" />\n        <RegExpr String=\"label&B;\" attribute=\"keyword\" context=\"label\" firstNonSpace=\"true\" />\n\n        <DetectChar char='\"' attribute=\"string\" context=\"quoted string\" />\n        <IncludeRules context=\"expansion\" />\n\n        <IncludeRules context=\"operator\" />\n        <IncludeRules context=\"variable name\" />\n        <IncludeRules context=\"number\" />\n\n        <RegExpr String=\"\\b[A-Z]\" attribute=\"command\" context=\"command\" />\n\n        <DetectChar char=';' attribute=\"comment\" context=\"comment\" />\n      </context>\n\n      <context name=\"label\" attribute=\"variable\" lineEndContext=\"#pop\" />\n\n      <context name=\"old form definition\" attribute=\"string\" lineEndContext=\"#pop!old form\" />\n\n      <context name=\"old form\" attribute=\"normal\" lineEndContext=\"#stay\">\n        <DetectChar char='#' attribute=\"comment\" context=\"comment\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"choice&B;\" attribute=\"keyword\" context=\"normal word with colon to number\" firstNonSpace=\"true\" />\n        <RegExpr String=\"optionmenu&B;\" attribute=\"keyword\" context=\"normal word with colon to number\" firstNonSpace=\"true\" />\n        <RegExpr String=\"option&B;\" attribute=\"keyword\" context=\"unquoted string\" firstNonSpace=\"true\" />\n        <RegExpr String=\"button&B;\" attribute=\"keyword\" context=\"unquoted string\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"sentence&B;\" attribute=\"keyword\" context=\"normal word to string\" firstNonSpace=\"true\" />\n        <RegExpr String=\"text&B;\" attribute=\"keyword\" context=\"normal word to string\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"word&B;\" attribute=\"keyword\" context=\"normal word to string word\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"comment&B;\" attribute=\"keyword\" context=\"unquoted string\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"real&B;\" attribute=\"keyword\" context=\"number\" firstNonSpace=\"true\" />\n        <RegExpr String=\"natural&B;\" attribute=\"keyword\" context=\"number\" firstNonSpace=\"true\" />\n        <RegExpr String=\"positive&B;\" attribute=\"keyword\" context=\"number\" firstNonSpace=\"true\" />\n        <RegExpr String=\"integer&B;\" attribute=\"keyword\" context=\"number\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"boolean&B;\" attribute=\"keyword\" context=\"normal word to variable\" firstNonSpace=\"true\" />\n\n        <RegExpr String=\"endform&B;\" attribute=\"keyword\" context=\"#pop\" endRegion=\"form\" firstNonSpace=\"true\" />\n      </context>\n\n      <context name=\"operator\" attribute=\"operator\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"([+\\/*&lt;>=!-]=?|[&amp;*|][&amp;*|]?|\\^|&lt;>)\" attribute=\"operator\" />\n        <RegExpr String=\"\\.(and|or|not|div|mod)\" attribute=\"normal\" />\n        <RegExpr String=\"(and|or|not|div|mod)\\.\" attribute=\"normal\" />\n        <WordDetect String=\"and\" attribute=\"operator\" />\n        <WordDetect String=\"or\"  attribute=\"operator\" />\n        <WordDetect String=\"not\" attribute=\"operator\" />\n        <WordDetect String=\"div\" attribute=\"operator\" />\n        <WordDetect String=\"mod\" attribute=\"operator\" />\n      </context>\n\n      <context name=\"command\" attribute=\"command\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"expansion\" />\n        <StringDetect String=\"...\" attribute=\"command\" context=\"shorthand arguments\" />\n        <DetectChar char=\":\" attribute=\"command\" context=\"#pop\" />\n      </context>\n\n      <context name=\"shorthand arguments\" attribute=\"normal\" lineEndContext=\"#pop#pop\" >\n        <IncludeRules context=\"variable name\" />\n        <IncludeRules context=\"operator\" />\n        <IncludeRules context=\"number\" />\n        <DetectChar char='\"' attribute=\"string\" context=\"quoted string\" />\n      </context>\n\n      <context name=\"variable name\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"operator\" />\n        <IncludeRules context=\"number\" />\n        <keyword String=\"variables_numeric\" attribute=\"variable\" />\n        <keyword String=\"variables_string\" attribute=\"variable\" />\n\n        <RegExpr String=\"\\b[A-Z][a-zA-Z]+_\" attribute=\"object.attribute\" context=\"object reference\" />\n\n      </context>\n\n      <context name=\"object reference\" attribute=\"object.attribute\" lineEndContext=\"#pop#pop\" >\n        <DetectChar char=\".\" attribute=\"object.attribute\" context=\"#pop#pop!object attributes\" lookAhead=\"true\" />\n\n        <IncludeRules context=\"expansion\" />\n\n        <DetectChar char=\"$\" attribute=\"object.attribute\" />\n        <DetectChar char=\"[\" attribute=\"normal\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"object attributes\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"\\.ncol&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.nrow&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.xmin&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.ymin&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.xmax&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.ymax&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.nx&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.ny&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.dx&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n        <RegExpr String=\"\\.dy&B;\" attribute=\"object.attribute\" context=\"#pop\" />\n      </context>\n\n      <context name=\"normal word with colon to number\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <DetectChar char=\":\" attribute=\"normal\" context=\"number\" />\n      </context>\n\n      <context name=\"normal word to variable\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"\\b\\w+\\b\" attribute=\"normal\" context=\"variable\" />\n      </context>\n\n      <context name=\"variable\" attribute=\"variable\" lineEndContext=\"#pop\" />\n\n      <context name=\"number\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <IncludeRules context=\"operator\" />\n        <RegExpr String=\"\\b\\d+(\\.\\d*)?([eE][-+]?\\d+)?%?\" attribute=\"number\" />\n      </context>\n\n      <context name=\"normal word to string word\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"\\b\\w+\\b\" attribute=\"normal\" context=\"string word\" />\n      </context>\n\n      <context name=\"normal word to string\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"\\b\\w+\\b\" attribute=\"normal\" context=\"unquoted string\" />\n      </context>\n\n      <context name=\"string word\" attribute=\"string\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"\\b\\w+\\b\" attribute=\"string\" context=\"ignore\" />\n      </context>\n\n      <context name=\"ignore\" attribute=\"normal\" lineEndContext=\"#pop\" />\n\n      <context name=\"comment\" attribute=\"comment\" lineEndContext=\"#pop\" />\n\n      <context name=\"quoted string\" attribute=\"string\" lineEndContext=\"broken quoted string\" >\n        <IncludeRules context=\"expansion\" />\n        <DetectChar char='\"' attribute=\"string\" context=\"#pop\" />\n      </context>\n\n      <context name=\"unquoted string\" attribute=\"string\" lineEndContext=\"broken unquoted string\" >\n        <IncludeRules context=\"expansion\" />\n      </context>\n\n      <context name=\"expansion\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"'[^\\[\\]'&quot;]+(\\[([\\w\\d,]+|&quot;[\\w\\d,]+&quot;)\\])?'\" attribute=\"expansion\" />\n      </context>\n\n      <context name=\"broken unquoted string\" attribute=\"string\" lineEndContext=\"#stay\" >\n        <DetectSpaces attribute=\"normal\" />\n        <StringDetect String=\"...\" attribute=\"normal\" context=\"#pop\" firstNonSpace=\"true\" />\n        <IncludeRules context=\"expansion\" />\n        <RegExpr String=\"[\\w\\d#@;.]\" context=\"#pop#pop\" firstNonSpace=\"true\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"broken quoted string\" attribute=\"string\" lineEndContext=\"#stay\" >\n        <IncludeRules context=\"broken unquoted string\" />\n        <DetectChar char='\"' attribute=\"string\" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"function check\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <keyword String=\"functions_numeric\" attribute=\"normal\" context=\"numeric function check\" lookAhead=\"true\" />\n        <keyword String=\"functions_string\" attribute=\"normal\" context=\"string function check\" lookAhead=\"true\" />\n        <keyword String=\"functions_array\" attribute=\"normal\" context=\"array function check\" lookAhead=\"true\" />\n      </context>\n\n      <context name=\"array function check\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"[a-zA-Z0-9_]+# *[:(]\" attribute=\"normal\" context=\"function call\" lookAhead=\"true\" />\n        <DetectChar char=\" \" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"string function check\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"[a-zA-Z0-9_]+\\$ *[:(]\" attribute=\"normal\" context=\"function call\" lookAhead=\"true\" />\n        <DetectChar char=\" \" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"numeric function check\" attribute=\"normal\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"[a-zA-Z0-9_]+ *[:(]\" attribute=\"normal\" context=\"function call\" lookAhead=\"true\" />\n        <RegExpr String=\"&B;editor&B;\" attribute=\"keyword\" context=\"#pop#pop!unquoted string\" beginRegion=\"editor\" />\n        <DetectChar char=\" \" context=\"#pop#pop\" />\n      </context>\n\n      <context name=\"function call\" attribute=\"function\" lineEndContext=\"#pop\" >\n        <RegExpr String=\"&B;beginSendPraat&B;\" beginRegion=\"sendpraat\" />\n        <RegExpr String=\"&B;endSendPraat&B;\" endRegion=\"sendpraat\" />\n\n        <RegExpr String=\"&B;beginPause&B;\" beginRegion=\"pause\" />\n        <RegExpr String=\"&B;endPause&B;\" endRegion=\"pause\" />\n\n        <DetectSpaces attribute=\"normal\" />\n        <DetectChar char=\":\" attribute=\"normal\" context=\"#pop#pop#pop\" />\n        <DetectChar char=\"(\" attribute=\"normal\" context=\"#pop#pop#pop\" />\n      </context>\n\n      <context name=\"procedure name\" attribute=\"function\" lineEndContext=\"#pop\" >\n        <DetectChar char=\":\" attribute=\"normal\" context=\"#pop\" />\n        <DetectChar char=\"(\" attribute=\"normal\" context=\"#pop\" />\n        <IncludeRules context=\"expansion\" />\n        <DetectSpaces attribute=\"normal\" context=\"#pop\" />\n      </context>\n\n      <context name=\"function word to shorthand arguments\" attribute=\"function\" lineEndContext=\"#pop\" >\n        <DetectChar char=\":\" attribute=\"normal\" context=\"#pop\" />\n        <DetectChar char=\"(\" attribute=\"normal\" context=\"#pop\" />\n        <IncludeRules context=\"expansion\" />\n        <DetectSpaces attribute=\"normal\" context=\"#pop!shorthand arguments\" />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"normal\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"number\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"object.attribute\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"variable\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"keyword\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"expansion\" defStyleNum=\"dsSpecialString\" />\n      <itemData name=\"string\" defStyleNum=\"dsString\" />\n      <itemData name=\"command\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"function\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"operator\" defStyleNum=\"dsOperator\" />\n      <itemData name=\"comment\" defStyleNum=\"dsComment\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"true\" weakDeliminator=\"._#$\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/progress.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"progress\" version=\"4\" kateversion=\"2.4\" section=\"Database\" extensions=\"*.p;*.w;*.i;*.cls;\" author=\"Rares Stanciulescu (rstanciu@operamail.com)\" license=\"GPL\">\n\n<highlighting>\n\n<list name=\"mytypes\">\n  <item>CHAR</item>\n  <item>CHARACTER</item>\n  <item>COM-HANDLE</item>\n  <item>DECI</item>\n  <item>DECIMAL</item>\n  <item>DATE</item>\n  <item>INTE</item>\n  <item>INTEGER</item>\n  <item>ROWID</item>\n  <item>RECID</item>\n  <item>LOGI</item>\n  <item>LONGCHAR</item>\n  <item>LOGICAL</item>\n  <item>HANDLE</item>\n  <item>WIDGET-HANDLE</item>\n  <item>RAW</item>\n  <item>LONG</item>\n  <item>BYTE</item>\n  <item>SHORT</item>\n  <item>BLOB</item>\n  <item>UNSIGNED-SHORT</item>\n  <item>FLOAT</item>\n  <item>DOUBLE</item>\n  <item>CLOB</item>\n  <item>LONGCHAR</item>\n  <item>DATETIME</item>\n  <item>DATETIME-TZ</item>\n  <item>TEMP-TABLE</item>\n  <item>DATASET</item>\n  <item>DATASET-HANDLE</item>\n  <item>BUFFER</item>\n  <item>STREAM</item>\n  <item>SAX-WRITER</item>\n  <item>MEMPTR</item>\n</list>\n\n  <list  name=\"operators\">\n    <item>AND</item>\n    <item>OR</item>\n    <item>NOT</item>\n    <item>BEGINS</item>\n    <item>MATCHES</item>\n    <item>MODULO</item>\n    <item>EQ</item>\n    <item>NE</item>\n    <item>LT</item>\n    <item>GT</item>\n    <item>GE</item>\n    <item>LE</item>\n    <item>FALSE</item>\n    <item>TRUE</item>\n    <item>YES</item>\n    <item>NO</item>\n</list>\n\n<list name=\"preprocvar\">\n  <item>OUT</item>\n  <item>BATCH-MODE</item>\n  <item>FILE-NAME</item>\n  <item>GLOBAL-DEFINE</item>\n  <item>LINE-NUMBER</item>\n  <item>OPSYS</item>\n  <item>ENDIF</item>\n  <item>SCOPED-DEFINE</item>\n  <item>SEQUENCE</item>\n  <item>UNDEFINE</item>\n  <item>WINDOW-SYSTEM</item>\n  <item>ANALYZE-RESUME</item>\n  <item>ANALYZE-SUSPEND</item>\n  <item>WEBSTREAM</item>\n</list>\n\n<list name=\"phrases\">\n  <item>VOID</item>\n  <item>IMPLEMENTS</item>\n  <item>OVERRIDE</item>\n  <item>FINAL</item>\n  <item>INHERITS</item>\n  <item>AS</item>\n  <item>WORD-INDEX</item>\n  <item>LIKE</item>\n  <item>ALERT-BOX</item>\n  <item>AT</item>\n  <item>COLOR</item>\n  <item>COMBO-BOX</item>\n  <item>EDITOR</item>\n  <item>FORMAT</item>\n  <item>FRAME</item>\n  <item>IMAGE</item>\n  <item>ENDKEY</item>\n  <item>ERROR</item>\n  <item>QUIT</item>\n  <item>STOP</item>\n  <item>PRESELECT</item>\n  <item>QUERY-TUNING</item>\n  <item>RADIO-SET</item>\n  <item>RECORD</item>\n  <item>SELECTION-LIST</item>\n  <item>SIZE</item>\n  <item>SLIDER</item>\n  <item>TRIGGER</item>\n  <item>WIDGET</item>\n  <item>VIEW-AS</item>\n  <item>NO-UNDO</item>\n  <item>NO-ERROR</item>\n  <item>OUT</item>\n  <item>WHERE</item>\n  <item>GLOBAL</item>\n  <item>SHARED</item>\n  <item>DEFINED</item>\n  <item>EXCLUSIVE-LOCK</item>\n  <item>SHARE-LOCK</item>\n  <item>NO-LOCK</item>\n  <item>EACH</item>\n  <item>FIRST</item>\n  <item>PREV</item>\n  <item>LAST</item>\n  <item>SKIP</item>\n  <item>FORWARD</item>\n  <item>UNIQUE</item>\n  <item>UNFORMATTED</item>\n  <item>APPEND</item>\n  <item>IN</item>\n  <item>OF</item>\n  <item>BEFORE-HIDE</item>\n  <item>NO-BOX</item>\n  <item>NO-UNDERLINE</item>\n  <item>KEEP-TAB-ORDER</item>\n  <item>UNBUFFERED</item>\n  <item>BINARY</item>\n  <item>NO-CONVERT</item>\n  <item>CONVERT</item>\n  <item>TARGET</item>\n  <item>NO-FILL</item>\n  <item>BY</item>\n  <item>NO-LABEL</item>\n  <item>GROUP</item>\n  <item>BREAK</item>\n  <item>COLON-ALIGNED</item>\n  <item>WITH</item>\n  <item>NO-LABELS</item>\n  <item>NO-PAUSE</item>\n  <item>NO-MESSAGE</item>\n  <item>NO-ECHO</item>\n  <item>NO-MAP</item>\n  <item>PRIVATE</item>\n  <item>PUBLIC</item>\n  <item>PROTECTED</item>\n</list>\n\n<list name=\"functions\">\n  <item>ROW-UPDATE</item>\n  <item>VALID-OBJECT</item>\n  <item>TYPE-OF</item>\n  <item>CAST</item>\n  <item>AUDIT-ENABLED</item>\n  <item>GENERATE-UUID</item>\n  <item>GUID</item>\n  <item>HEX-DECODE</item>\n  <item>HEX-ENCODE</item>\n  <item>SET-DB-CLIENT</item>\n  <item>output-content-type</item>\n  <item>get-value</item>\n  <item>get-cgi</item>\n  <item>get-field</item>\n  <item>html-encode</item>\n  <item>url-encode</item>\n  <item>ABSOLUTE</item>\n  <item>ACCUM</item>\n  <item>ADD-INTERVAL</item>\n  <item>ALIAS</item>\n  <item>AMBIGUOUS</item>\n  <item>ASC</item>\n  <item>AVAILABLE</item>\n  <item>BASE64-DECODE</item>\n  <item>BASE64-ENCODE</item>\n  <item>CAN-DO</item>\n  <item>CAN-FIND</item>\n  <item>CAN-QUERY</item>\n  <item>CAN-SET</item>\n  <item>CAPS</item>\n  <item>CHR</item>\n  <item>CODEPAGE-CONVERT</item>\n  <item>COMPARE</item>\n  <item>CONNECTED</item>\n  <item>COUNT-OF</item>\n  <item>CURRENT-CHANGED</item>\n  <item>CURRENT-LANGUAGE</item>\n  <item>CURRENT-RESULT-ROW</item>\n  <item>CURRENT-VALUE</item>\n  <item>DATASERVERS</item>\n  <item>DATA-SOURCE-MODIFIED</item>\n  <item>DATE</item>\n  <item>DATETIME</item>\n  <item>DATETIME-TZ</item>\n  <item>DAY</item>\n  <item>DBCODEPAGE</item>\n  <item>DBCOLLATION</item>\n  <item>DBNAME</item>\n  <item>DBPARAM</item>\n  <item>DBRESTRICTIONS</item>\n  <item>DBTASKID</item>\n  <item>DBTYPE</item>\n  <item>DBVERSION</item>\n  <item>DECIMAL</item>\n  <item>DECRYPT</item>\n  <item>DYNAMIC-CURRENT-VALUE</item>\n  <item>DYNAMIC-FUNCTION</item>\n  <item>DYNAMIC-NEXT-VALUE</item>\n  <item>ENCODE</item>\n  <item>ENCRYPT</item>\n  <item>ENTERED</item>\n  <item>ENTRY</item>\n  <item>ERROR</item>\n  <item>ETIME</item>\n  <item>EXP</item>\n  <item>EXTENT</item>\n  <item>FILL</item>\n  <item>FIRST</item>\n  <item>FIRST-OF</item>\n  <item>FIX-CODEPAGE</item>\n  <item>FRAME-COL</item>\n  <item>FRAME-DB</item>\n  <item>FRAME-DOWN</item>\n  <item>FRAME-FIELD</item>\n  <item>FRAME-FILE</item>\n  <item>FRAME-INDEX</item>\n  <item>FRAME-LINE</item>\n  <item>FRAME-NAME</item>\n  <item>FRAME-ROW</item>\n  <item>FRAME-VALUE</item>\n  <item>GENERATE-PBE-KEY</item>\n  <item>GENERATE-PBE-SALT</item>\n  <item>GENERATE-RANDOM-KEY</item>\n  <item>GET-BITS</item>\n  <item>GET-BYTE</item>\n  <item>GET-BYTE-ORDER</item>\n  <item>GET-BYTES</item>\n  <item>GET-CODEPAGE</item>\n  <item>GET-CODEPAGES</item>\n  <item>GET-COLLATION</item>\n  <item>GET-COLLATIONS</item>\n  <item>GET-DOUBLE</item>\n  <item>GET-FLOAT</item>\n  <item>GET-LONG</item>\n  <item>GET-POINTER-VALUE</item>\n  <item>GET-SHORT</item>\n  <item>GET-SIZE</item>\n  <item>GET-STRING</item>\n  <item>GET-UNSIGNED-SHORT</item>\n  <item>INDEX</item>\n  <item>INTEGER</item>\n  <item>INTERVAL</item>\n  <item>IS-CODEPAGE-FIXED</item>\n  <item>IS-COLUMN-CODEPAGE</item>\n  <item>IS-LEAD-BYTE</item>\n  <item>ISO-DATE</item>\n  <item>KBLABEL</item>\n  <item>KEYCODE</item>\n  <item>KEYFUNCTION</item>\n  <item>KEYLABEL</item>\n  <item>KEYWORD</item>\n  <item>KEYWORD-ALL</item>\n  <item>LAST</item>\n  <item>LASTKEY</item>\n  <item>LAST-OF</item>\n  <item>LC</item>\n  <item>LDBNAME</item>\n  <item>LEFT-TRIM</item>\n  <item>LENGTH</item>\n  <item>LIBRARY</item>\n  <item>LINE-COUNTER</item>\n  <item>LIST-EVENTS</item>\n  <item>LIST-QUERY-ATTRS</item>\n  <item>LIST-SET-ATTRS</item>\n  <item>LIST-WIDGETS</item>\n  <item>LOCKED</item>\n  <item>LOG</item>\n  <item>LOGICAL</item>\n  <item>LOOKUP</item>\n  <item>MAXIMUM</item>\n  <item>MD5-DIGEST</item>\n  <item>MEMBER</item>\n  <item>MESSAGE-LINES</item>\n  <item>MINIMUM</item>\n  <item>MONTH</item>\n  <item>MTIME</item>\n  <item>NEW</item>\n  <item>NEXT-VALUE</item>\n  <item>NORMALIZE</item>\n  <item>NOT</item>\n  <item>NOW</item>\n  <item>NUM-ALIASES</item>\n  <item>NUM-DBS</item>\n  <item>NUM-ENTRIES</item>\n  <item>NUM-RESULTS</item>\n  <item>OPSYS</item>\n  <item>OS-DRIVES</item>\n  <item>OS-ERROR</item>\n  <item>OS-GETENV</item>\n  <item>PAGE-NUMBER</item>\n  <item>PAGE-SIZE</item>\n  <item>PDBNAME</item>\n  <item>PROC-HANDLE</item>\n  <item>PROC-STATUS</item>\n  <item>PROGRAM-NAME</item>\n  <item>PROGRESS</item>\n  <item>PROMSGS</item>\n  <item>PROPATH</item>\n  <item>PROVERSION</item>\n  <item>QUERY-OFF-END</item>\n  <item>QUOTER</item>\n  <item>RANDOM</item>\n  <item>RAW</item>\n  <item>RECID</item>\n  <item>RECORD-LENGTH</item>\n  <item>REJECTED</item>\n  <item>REPLACE</item>\n  <item>RETRY</item>\n  <item>RETURN-VALUE</item>\n  <item>RGB-VALUE</item>\n  <item>RIGHT-TRIM</item>\n  <item>R-INDEX</item>\n  <item>ROUND</item>\n  <item>ROWID</item>\n  <item>ROW-STATE</item>\n  <item>SCREEN-LINES</item>\n  <item>SDBNAME</item>\n  <item>SEARCH</item>\n  <item>SEEK</item>\n  <item>SETUSERID</item>\n  <item>SHA1-DIGEST</item>\n  <item>SQRT</item>\n  <item>SSL-SERVER-NAME</item>\n  <item>STRING</item>\n  <item>SUBSTITUTE</item>\n  <item>SUBSTRING</item>\n  <item>SUPER</item>\n  <item>TERMINAL</item>\n  <item>TIME</item>\n  <item>TIMEZONE</item>\n  <item>TODAY</item>\n  <item>TO-ROWID</item>\n  <item>TRANSACTION</item>\n  <item>TRIM</item>\n  <item>TRUNCATE</item>\n  <item>USERID</item>\n  <item>VALID-EVENT</item>\n  <item>VALID-HANDLE</item>\n  <item>WEEKDAY</item>\n  <item>WIDGET-HANDLE</item>\n  <item>YEAR</item>\n</list>\n\n<list name=\"statements\">\n  <item>IF</item>\n  <item>THEN</item>\n  <item>ELSE</item>\n  <item>WHEN</item>\n  <item>OTHERWISE</item>\n  <item>ACCUMULATE</item>\n  <item>APPLY</item>\n  <item>ASSIGN</item>\n  <item>BELL</item>\n  <item>BUFFER-COMPARE</item>\n  <item>BUFFER-COPY</item>\n  <item>CLEAR</item>\n  <item>CLOSE</item>\n  <item>QUERY</item>\n  <item>STORED-PROCEDURE</item>\n  <item>COLOR</item>\n  <item>COMPILE</item>\n  <item>CONNECT</item>\n  <item>COPY-LOB</item>\n  <item>CREATE</item>\n  <item>CLIENT-PRINCIPAL</item>\n  <item>ALIAS</item>\n  <item>BROWSE</item>\n  <item>BUFFER</item>\n  <item>CALL</item>\n  <item>DATABASE</item>\n  <item>DATA-SOURCE</item>\n  <item>QUERY</item>\n  <item>SAX-READER</item>\n  <item>SERVER</item>\n  <item>SERVER-SOCKET</item>\n  <item>SOAP-HEADER</item>\n  <item>SOAP-HEADER-ENTRYREF</item>\n  <item>SOCKET</item>\n  <item>TEMP-TABLE</item>\n  <item>WIDGET</item>\n  <item>WIDGET-POOL</item>\n  <item>X-DOCUMENT</item>\n  <item>X-NODEREF</item>\n  <item>CURRENT-LANGUAGE</item>\n  <item>CURRENT-VALUE</item>\n  <item>DDE</item>\n  <item>ADVISE</item>\n  <item>EXECUTE</item>\n  <item>GET</item>\n  <item>INITIATE</item>\n  <item>REQUEST</item>\n  <item>SEND</item>\n  <item>TERMINATE</item>\n  <item>DEF</item>\n  <item>DEFINE</item>\n  <item>VAR</item>\n  <item>VARIABLE</item>\n  <item>BROWSE</item>\n  <item>BUFFER</item>\n  <item>BUTTON</item>\n  <item>DATA-SOURCE</item>\n  <item>FRAME</item>\n  <item>IMAGE</item>\n  <item>MENU</item>\n  <item>PARAM</item>\n  <item>PARAMETER</item>\n  <item>QUERY</item>\n  <item>RECTANGLE</item>\n  <item>STREAM</item>\n  <item>SUB-MENU</item>\n  <item>TEMP-TABLE</item>\n  <item>VARIABLE</item>\n  <item>WORK-TABLE</item>\n  <item>WORKFILE</item>\n  <item>DELETE</item>\n  <item>ALIAS</item>\n  <item>OBJECT</item>\n  <item>WIDGET</item>\n  <item>WIDGET-POOL</item>\n  <item>DICTIONARY</item>\n  <item>DISABLE</item>\n  <item>TRIGGERS</item>\n  <item>DISCONNECT</item>\n  <item>DISPLAY</item>\n  <item>DOS</item>\n  <item>DOWN</item>\n  <item>DYNAMIC-CURRENT-VALUE</item>\n  <item>EMPTY</item>\n  <item>TEMP-TABLE</item>\n  <item>ENABLE</item>\n  <item>ENTRY</item>\n  <item>EXPORT</item>\n  <item>FIND</item>\n  <item>FORM</item>\n  <item>FRAME-VALUE</item>\n  <item>GET</item>\n  <item>GET-KEY-VALUE</item>\n  <item>HIDE</item>\n  <item>IMPORT</item>\n  <item>INPUT</item>\n  <item>CLEAR</item>\n  <item>CLOSE</item>\n  <item>FROM</item>\n  <item>TO</item>\n  <item>THROUGH</item>\n  <item>INPUT-OUTPUT</item>\n  <item>THROUGH</item>\n  <item>INSERT</item>\n  <item>LEAVE</item>\n  <item>LENGTH</item>\n  <item>LOAD</item>\n  <item>LOAD-PICTURE</item>\n  <item>MESSAGE</item>\n  <item>NEXT</item>\n  <item>NEXT-PROMPT</item>\n  <item>QUERY</item>\n  <item>OPEN</item>\n  <item>OS-APPEND</item>\n  <item>OS-COMMAND</item>\n  <item>OS-COPY</item>\n  <item>OS-CREATE-DIR</item>\n  <item>OS-DELETE</item>\n  <item>OS-RENAME</item>\n  <item>OUTPUT</item>\n  <item>OVERLAY</item>\n  <item>PAGE</item>\n  <item>PAUSE</item>\n  <item>PROCESS</item>\n  <item>EVENTS</item>\n  <item>PROMPT-FOR</item>\n  <item>PROMSGS</item>\n  <item>PROPATH</item>\n  <item>PUBLISH</item>\n  <item>CURSOR</item>\n  <item>PUT</item>\n  <item>PUT-BITS</item>\n  <item>PUT-BYTE</item>\n  <item>PUT-BYTES</item>\n  <item>PUT-DOUBLE</item>\n  <item>PUT-FLOAT</item>\n  <item>PUT-KEY-VALUE</item>\n  <item>PUT-LONG</item>\n  <item>PUT-SHORT</item>\n  <item>PUT-STRING</item>\n  <item>PUT-UNSIGNED-SHORT</item>\n  <item>QUIT</item>\n  <item>RAW</item>\n  <item>RAW-TRANSFER</item>\n  <item>READKEY</item>\n  <item>RELEASE</item>\n  <item>EXTERNAL</item>\n  <item>OBJECT</item>\n  <item>REPOSITION</item>\n  <item>RETURN</item>\n  <item>RETURNS</item>\n  <item>RUN</item>\n  <item>STORED-PROCEDURE</item>\n  <item>SUPER</item>\n  <item>SAVE</item>\n  <item>CACHE</item>\n  <item>SEEK</item>\n  <item>SET</item>\n  <item>SET-BYTE-ORDER</item>\n  <item>SET-POINTER-VALUE</item>\n  <item>SET-SIZE</item>\n  <item>SHOW-STATS</item>\n  <item>STATUS</item>\n  <item>STOP</item>\n  <item>SUBSCRIBE</item>\n  <item>SUBSTRING</item>\n  <item>COLOR</item>\n  <item>SYSTEM-DIALOG</item>\n  <item>FONT</item>\n  <item>GET-DIR</item>\n  <item>GET-FILE</item>\n  <item>PRINTER-SETUP</item>\n  <item>SYSTEM-HELP</item>\n  <item>TERMINAL</item>\n  <item>TRANSACTION-MODE</item>\n  <item>AUTOMATIC</item>\n  <item>TRIGGER</item>\n  <item>UNDERLINE</item>\n  <item>UNDO</item>\n  <item>UNIX</item>\n  <item>UNLOAD</item>\n  <item>UNSUBSCRIBE</item>\n  <item>UP</item>\n  <item>UPDATE</item>\n  <item>USE</item>\n  <item>VALIDATE</item>\n  <item>VIEW</item>\n  <item>WAIT-FOR</item>\n</list>\n\n<list name=\"widgets\">\n  <item>BROWSE</item>\n  <item>BUTTON</item>\n  <item>COMBO-BOX</item>\n  <item>CONTROL-FRAME</item>\n  <item>DIALOG-BOX</item>\n  <item>EDITOR</item>\n  <item>FIELD-GROUP</item>\n  <item>FILL-IN</item>\n  <item>FRAME</item>\n  <item>IMAGE</item>\n  <item>LITERAL</item>\n  <item>MENU</item>\n  <item>MENU-ITEM</item>\n  <item>RADIO-SET</item>\n  <item>RECTANGLE</item>\n  <item>SELECTION-LIST</item>\n  <item>SLIDER</item>\n  <item>SUB-MENU</item>\n  <item>TEXT</item>\n  <item>TOGGLE-BOX</item>\n  <item>WINDOW</item>\n</list>\n\n<list name=\"handles\">\n  <item>THIS-OBJECT</item>\n  <item>AUDIT-CONTROL</item>\n  <item>AUDIT-POLICY</item>\n  <item>SECURITY-POLICY</item>\n  <item>ACTIVE-WINDOW</item>\n  <item>BUFFER</item>\n  <item>BUFFER-FIELD</item>\n  <item>CALL</item>\n  <item>CLIPBOARD</item>\n  <item>CODEBASE-LOCATOR</item>\n  <item>COLOR-TABLE</item>\n  <item>COM-SELF</item>\n  <item>COMPILER</item>\n  <item>CURRENT-WINDOW</item>\n  <item>DATA-RELATION</item>\n  <item>DATE-SOURCE</item>\n  <item>DEBUGGER</item>\n  <item>DEFAULT-WINDOW</item>\n  <item>ERROR-STATUS</item>\n  <item>FILE-INFO</item>\n  <item>FIELD</item>\n  <item>FOCUS</item>\n  <item>FONT-TABLE</item>\n  <item>LAST-EVENT</item>\n  <item>LOG-MANAGER</item>\n  <item>PRODATASET</item>\n  <item>QUERY</item>\n  <item>RCODE-INFO</item>\n  <item>SAX-ATTRIBUTES</item>\n  <item>SAX-READER</item>\n  <item>SELF</item>\n  <item>SERVER</item>\n  <item>SESSION</item>\n  <item>SOAP-FAULT</item>\n  <item>SOAP-FAULT-DETAIL</item>\n  <item>SOAP-HEADER</item>\n  <item>SOAP-HEADER-ENTRYREF</item>\n  <item>SOCKET</item>\n  <item>SOURCE-PROCEDURE</item>\n  <item>TARGET-PROCEDURE</item>\n  <item>TEMP-TABLE</item>\n  <item>THIS-PROCEDURE</item>\n  <item>TRANSACTION</item>\n  <item>WEB-CONTEXT</item>\n  <item>X-DOCUMENT</item>\n  <item>X-NODEREF</item>\n</list>\n\n<list name=\"properties\">\n  <item>CONTROL-NAME</item>\n  <item>CONTROLS</item>\n  <item>HEIGHT</item>\n  <item>HONORPROKEYS</item>\n  <item>HONORRETURNKEY</item>\n  <item>LEFT</item>\n  <item>TOP</item>\n  <item>WIDTH</item>\n  <item>TAG</item>\n</list>\n\n<list name=\"attributes\">\n  <item>ANYWHERE</item>\n  <item>SCHEMA-MARSHAL</item>\n  <item>ATTACHED-PAIRLIST</item>\n  <item>DATA-SOURCE-COMPLETE-MAP</item>\n  <item>KEYS</item>\n  <item>NEXT-ROWID</item>\n  <item>NUM-REFERENCES</item>\n  <item>RESTART-ROWID</item>\n  <item>CLASS-TYPE</item>\n  <item>FIRST-OBJECT</item>\n  <item>LAST-OBJECT</item>\n  <item>MULTI-COMPILE</item>\n  <item>WIDGET-ID</item>\n  <item>SCHEMA-LOCATION</item>\n  <item>STANDALONE</item>\n  <item>STRICT</item>\n  <item>VERSION</item>\n  <item>WRITE-STATUS</item>\n  <item>NONAMESPACE-SCHEMA-LOCATION</item>\n  <item>FRAGMENT</item>\n  <item>APPL-CONTEXT-ID</item>\n  <item>AUDIT-EVENT-CONTEXT</item>\n  <item>CLIENT-TTY</item>\n  <item>CLIENT-WORKSTATION</item>\n  <item>DOMAIN-DESCRIPTION</item>\n  <item>DOMAIN-NAME</item>\n  <item>DOMAIN-TYPE</item>\n  <item>EVENT-GROUP-ID</item>\n  <item>LOGIN-EXPIRATION-TIMESTAMP</item>\n  <item>LOGIN-HOST</item>\n  <item>LOGIN-STATE</item>\n  <item>ROLES</item>\n  <item>SEAL-TIMESTAMP</item>\n  <item>SESSION-ID</item>\n  <item>STATE-DETAIL</item>\n  <item>USER-ID</item>\n  <item>ACCELERATOR</item>\n  <item>ACTIVE</item>\n  <item>ACTOR</item>\n  <item>ADM-DATA</item>\n  <item>AFTER-BUFFER</item>\n  <item>AFTER-ROWID</item>\n  <item>AFTER-TABLE</item>\n  <item>ALLOW-COLUMN-SEARCHING</item>\n  <item>ALWAYS-ON-TOP</item>\n  <item>AMBIGUOUS</item>\n  <item>APPL-ALERT-BOXES</item>\n  <item>APPSERVER-INFO</item>\n  <item>APPSERVER-PASSWORD</item>\n  <item>APPSERVER-USERID</item>\n  <item>ASYNCHRONOUS</item>\n  <item>ASYNC-REQUEST-COUNT</item>\n  <item>ASYNC-REQUEST-HANDLE</item>\n  <item>ATTRIBUTE-NAMES</item>\n  <item>ATTR-SPACE</item>\n  <item>AUTO-COMPLETION</item>\n  <item>AUTO-DELETE</item>\n  <item>AUTO-ENDKEY</item>\n  <item>AUTO-GO</item>\n  <item>AUTO-INDENT</item>\n  <item>AUTO-RESIZE</item>\n  <item>AUTO-RETURN</item>\n  <item>AUTO-VALIDATE</item>\n  <item>AUTO-ZAP</item>\n  <item>AVAILABLE</item>\n  <item>AVAILABLE-FORMATS</item>\n  <item>BACKGROUND</item>\n  <item>BASE-ADE</item>\n  <item>BASIC-LOGGING</item>\n  <item>BATCH-MODE</item>\n  <item>BEFORE-BUFFER</item>\n  <item>BEFORE-ROWID</item>\n  <item>BEFORE-TABLE</item>\n  <item>BGCOLOR</item>\n  <item>BLANK</item>\n  <item>BLOCK-ITERATION-DISPLAY</item>\n  <item>BORDER-BOTTOM-CHARS</item>\n  <item>BORDER-BOTTOM-PIXELS</item>\n  <item>BORDER-LEFT-CHARS</item>\n  <item>BORDER-LEFT-PIXELS</item>\n  <item>BORDER-RIGHT-CHARS</item>\n  <item>BORDER-RIGHT-PIXELS</item>\n  <item>BORDER-TOP-CHARS</item>\n  <item>BORDER-TOP-PIXELS</item>\n  <item>BOX</item>\n  <item>BOX-SELECTABLE</item>\n  <item>BUFFER-CHARS</item>\n  <item>BUFFER-VALUE</item>\n  <item>BYTES-READ</item>\n  <item>BYTES-WRITTEN</item>\n  <item>CACHE</item>\n  <item>CALL-NAME</item>\n  <item>CALL-TYPE</item>\n  <item>BUFFER-FIELD</item>\n  <item>BUFFER-HANDLE</item>\n  <item>BUFFER-LINES</item>\n  <item>BUFFER-NAME</item>\n  <item>CANCEL-BUTTON</item>\n  <item>CANCELLED</item>\n  <item>CAN-CREATE</item>\n  <item>CAN-DELETE</item>\n  <item>CAN-READ</item>\n  <item>CAN-WRITE</item>\n  <item>CAREFUL-PAINT</item>\n  <item>CASE-SENSITIVE</item>\n  <item>CENTERED</item>\n  <item>CHARSET</item>\n  <item>CHECKED</item>\n  <item>CHILD-BUFFER</item>\n  <item>CHILD-NUM</item>\n  <item>CLIENT-CONNECTION-ID</item>\n  <item>CLIENT-TYPE</item>\n  <item>CODE</item>\n  <item>CODEPAGE</item>\n  <item>COLUMN</item>\n  <item>COLUMN-BGCOLOR</item>\n  <item>COLUMN-DCOLOR</item>\n  <item>COLUMN-FGCOLOR</item>\n  <item>COLUMN-FONT</item>\n  <item>COLUMN-LABEL</item>\n  <item>COLUMN-MOVABLE</item>\n  <item>COLUMN-PFCOLOR</item>\n  <item>COLUMN-READ-ONLY</item>\n  <item>COLUMN-RESIZABLE</item>\n  <item>COLUMN-SCROLLING</item>\n  <item>COM-HANDLE</item>\n  <item>COMPLETE</item>\n  <item>CONTEXT-HELP</item>\n  <item>CONTEXT-HELP-FILE</item>\n  <item>CONTEXT-HELP-ID</item>\n  <item>CONTROL-BOX</item>\n  <item>CONVERT-D-COLORS</item>\n  <item>CPCASE</item>\n  <item>CPCOLL</item>\n  <item>CPINTERNAL</item>\n  <item>CPLOG</item>\n  <item>CPPRINT</item>\n  <item>CPRCODEIN</item>\n  <item>CPRCODEOUT</item>\n  <item>CPSTREAM</item>\n  <item>CPTERM</item>\n  <item>CRC-VALUE</item>\n  <item>CURRENT-CHANGED</item>\n  <item>CURRENT-COLUMN</item>\n  <item>CURRENT-ITERATION</item>\n  <item>CURRENT-RESULT-ROW</item>\n  <item>CURRENT-ROW-MODIFIED</item>\n  <item>CURRENT-WINDOW</item>\n  <item>CURSOR-CHAR</item>\n  <item>CURSOR-LINE</item>\n  <item>CURSOR-OFFSET</item>\n  <item>DATA-ENTRY-RETURN</item>\n  <item>DATA-SOURCE</item>\n  <item>DATA-TYPE</item>\n  <item>DATASET</item>\n  <item>DATE-FORMAT</item>\n  <item>DBNAME</item>\n  <item>DB-REFERENCES</item>\n  <item>DCOLOR</item>\n  <item>DDE-ERROR</item>\n  <item>DDE-ID</item>\n  <item>DDE-ITEM</item>\n  <item>DDE-NAME</item>\n  <item>DDE-TOPIC</item>\n  <item>DEBLANK</item>\n  <item>DEBUG-ALERT</item>\n  <item>DECIMALS</item>\n  <item>DEFAULT</item>\n  <item>DEFAULT-BUFFER-HANDLE</item>\n  <item>DEFAULT-BUTTON</item>\n  <item>DEFAULT-COMMIT</item>\n  <item>DELIMITER</item>\n  <item>DISABLE-AUTO-ZAP</item>\n  <item>DISPLAY-TIMEZONE</item>\n  <item>DISPLAY-TYPE</item>\n  <item>DOWN</item>\n  <item>DRAG-ENABLED</item>\n  <item>DROP-TARGET</item>\n  <item>DYNAMIC</item>\n  <item>EDGE-CHARS</item>\n  <item>EDGE-PIXELS</item>\n  <item>EDIT-CAN-PASTE</item>\n  <item>EDIT-CAN-UNDO</item>\n  <item>EMPTY</item>\n  <item>ENCODING</item>\n  <item>END-USER-PROMPT</item>\n  <item>ENTRY-TYPES-LIST</item>\n  <item>ERROR</item>\n  <item>ERROR-COLUMN</item>\n  <item>ERROR-OBJECT-DETAIL</item>\n  <item>ERROR-ROW</item>\n  <item>ERROR-STRING</item>\n  <item>EVENT-PROCEDURE</item>\n  <item>EVENT-PROCEDURE-CONTEXT</item>\n  <item>EVENT-TYPE</item>\n  <item>EXPAND</item>\n  <item>EXPANDABLE</item>\n  <item>EXTENT</item>\n  <item>FGCOLOR</item>\n  <item>FILE-CREATE-DATE</item>\n  <item>FILE-CREATE-TIME</item>\n  <item>FILE-MOD-DATE</item>\n  <item>FILE-MOD-TIME</item>\n  <item>FILE-NAME</item>\n  <item>FILE-OFFSET</item>\n  <item>FILE-SIZE</item>\n  <item>FILE-TYPE</item>\n  <item>FILLED</item>\n  <item>FILL-MODE</item>\n  <item>FILL-WHERE-STRING</item>\n  <item>FIRST-ASYNC-REQUEST</item>\n  <item>FIRST-BUFFER</item>\n  <item>FIRST-CHILD</item>\n  <item>FIRST-COLUMN</item>\n  <item>FIRST-DATASET</item>\n  <item>FIRST-DATA-SOURCE</item>\n  <item>FIRST-PROCEDURE</item>\n  <item>FIRST-QUERY</item>\n  <item>FIRST-SERVER</item>\n  <item>FIRST-SERVER-SOCKET</item>\n  <item>FIRST-SOCKET</item>\n  <item>FIRST-TAB-ITEM</item>\n  <item>FIT-LAST-COLUMN</item>\n  <item>FLAT-BUTTON</item>\n  <item>FOCUSED-ROW</item>\n  <item>FOCUSED-ROW-SELECTED</item>\n  <item>FONT</item>\n  <item>FOREGROUND</item>\n  <item>FORMAT</item>\n  <item>FORWARD-ONLY</item>\n  <item>FRAME</item>\n  <item>FRAME-COL</item>\n  <item>FRAME-NAME</item>\n  <item>FRAME-ROW</item>\n  <item>FRAME-SPACING</item>\n  <item>FRAME-X</item>\n  <item>FRAME-Y</item>\n  <item>FREQUENCY</item>\n  <item>FULL-HEIGHT-CHARS</item>\n  <item>FULL-HEIGHT-PIXELS</item>\n  <item>FULL-PATHNAME</item>\n  <item>FULL-WIDTH-CHARS</item>\n  <item>FULL-WIDTH-PIXELS</item>\n  <item>GRAPHIC-EDGE</item>\n  <item>GRID-FACTOR-HORIZONTAL</item>\n  <item>GRID-FACTOR-VERTICAL</item>\n  <item>GRID-SNAP</item>\n  <item>GRID-UNIT-HEIGHT-CHARS</item>\n  <item>GRID-UNIT-HEIGHT-PIXELS</item>\n  <item>GRID-UNIT-WIDTH-CHARS</item>\n  <item>GRID-UNIT-WIDTH-PIXELS</item>\n  <item>GRID-VISIBLE</item>\n  <item>HANDLER</item>\n  <item>HAS-LOBS</item>\n  <item>HAS-RECORDS</item>\n  <item>HEIGHT-CHARS</item>\n  <item>HEIGHT-PIXELS</item>\n  <item>HELP</item>\n  <item>HIDDEN</item>\n  <item>HORIZONTAL</item>\n  <item>HTML-CHARSET</item>\n  <item>HWND</item>\n  <item>ICFPARAMETER</item>\n  <item>ICON</item>\n  <item>IGNORE-CURRENT-MODIFIED</item>\n  <item>IMAGE</item>\n  <item>IMAGE-DOWN</item>\n  <item>IMAGE-INSENSITIVE</item>\n  <item>IMAGE-UP</item>\n  <item>IMMEDIATE-DISPLAY</item>\n  <item>INDEX</item>\n  <item>INDEX-INFORMATION</item>\n  <item>INIT</item>\n  <item>INITIAL</item>\n  <item>INNER-CHARS</item>\n  <item>INNER-LINES</item>\n  <item>INPUT-VALUE</item>\n  <item>INSTANTIATING-PROCEDURE</item>\n  <item>INTERNAL-ENTRIES</item>\n  <item>IN-HANDLE</item>\n  <item>IS-OPEN</item>\n  <item>IS-PARAMETER-SET</item>\n  <item>ITEMS-PER-ROW</item>\n  <item>KEEP-CONNECTION-OPEN</item>\n  <item>KEEP-FRAME-Z-ORDER</item>\n  <item>KEEP-SECURITY-CACHE</item>\n  <item>KEY</item>\n  <item>LABEL</item>\n  <item>LABEL-BGCOLOR</item>\n  <item>LABEL-DCOLOR</item>\n  <item>LABEL-FGCOLOR</item>\n  <item>LABEL-FONT</item>\n  <item>LABELS</item>\n  <item>LANGUAGES</item>\n  <item>LARGE</item>\n  <item>LARGE-TO-SMALL</item>\n  <item>LAST-ASYNC-REQUEST</item>\n  <item>LAST-CHILD</item>\n  <item>LAST-PROCEDURE</item>\n  <item>LAST-SERVER</item>\n  <item>LAST-SERVER-SOCKET</item>\n  <item>LAST-SOCKET</item>\n  <item>LAST-TAB-ITEM</item>\n  <item>LENGTH</item>\n  <item>LINE</item>\n  <item>LIST-ITEM-PAIRS</item>\n  <item>LIST-ITEMS</item>\n  <item>LITERAL-QUESTION</item>\n  <item>LOCAL-HOST</item>\n  <item>LOCAL-NAME</item>\n  <item>LOCAL-PORT</item>\n  <item>LOCATOR-COLUMN-NUMBER</item>\n  <item>LOCATOR-LINE-NUMBER</item>\n  <item>LOCATOR-PUBLIC-ID</item>\n  <item>LOCATOR-SYSTEM-ID</item>\n  <item>LOCATOR-TYPE</item>\n  <item>LOCKED</item>\n  <item>LOG-ENTRY-TYPES</item>\n  <item>LOG-THRESHOLD</item>\n  <item>LOGFILE-NAME</item>\n  <item>LOGGING-LEVEL</item>\n  <item>MANDATORY</item>\n  <item>MANUAL-HIGHLIGHT</item>\n  <item>MAX-BUTTON</item>\n  <item>MAX-CHARS</item>\n  <item>MAX-DATA-GUESS</item>\n  <item>MAX-HEIGHT-CHARS</item>\n  <item>MAX-HEIGHT-PIXELS</item>\n  <item>MAX-VALUE</item>\n  <item>MAX-WIDTH-CHARS</item>\n  <item>MAX-WIDTH-PIXELS</item>\n  <item>MD-VALUE</item>\n  <item>MENU-BAR</item>\n  <item>MENU-KEY</item>\n  <item>MENU-MOUSE</item>\n  <item>MESSAGE-AREA</item>\n  <item>MESSAGE-AREA-FONT</item>\n  <item>MIN-BUTTON</item>\n  <item>MIN-COLUMN-WIDTH-CHARS</item>\n  <item>MIN-COLUMN-WIDTH-PIXELS</item>\n  <item>MIN-HEIGHT-CHARS</item>\n  <item>MIN-HEIGHT-PIXELS</item>\n  <item>MIN-SCHEMA-MARSHAL</item>\n  <item>MIN-VALUE</item>\n  <item>MIN-WIDTH-CHARS</item>\n  <item>MIN-WIDTH-PIXELS</item>\n  <item>MODIFIED</item>\n  <item>MOUSE-POINTER</item>\n  <item>MOVABLE</item>\n  <item>MULTIPLE</item>\n  <item>MULTITASKING-INTERVAL</item>\n  <item>MUST-UNDERSTAND</item>\n  <item>NAMESPACE-PREFIX</item>\n  <item>NAMESPACE-URI</item>\n  <item>NEEDS-APPSERVER-PROMPT</item>\n  <item>NEEDS-PROMPT</item>\n  <item>NEW</item>\n  <item>NEW-ROW</item>\n  <item>NEXT-COLUMN</item>\n  <item>NEXT-SIBLING</item>\n  <item>NEXT-TAB-ITEM</item>\n  <item>NO-CURRENT-VALUE</item>\n  <item>NO-EMPTY-SPACE</item>\n  <item>NO-FOCUS</item>\n  <item>NO-SCHEMA-MARSHAL</item>\n  <item>NO-VALIDATE</item>\n  <item>NODE-VALUE</item>\n  <item>NUM-BUFFERS</item>\n  <item>NUM-BUTTONS</item>\n  <item>NUM-CHILD-RELATIONS</item>\n  <item>NUM-CHILDREN</item>\n  <item>NUM-COLUMNS</item>\n  <item>NUM-DROPPED-FILES</item>\n  <item>NUM-ENTRIES</item>\n  <item>NUM-FIELDS</item>\n  <item>NUM-FORMATS</item>\n  <item>NUM-HEADER-ENTRIES</item>\n  <item>NUM-ITEMS</item>\n  <item>NUM-ITERATIONS</item>\n  <item>NUM-LINES</item>\n  <item>NUM-LOCKED-COLUMNS</item>\n  <item>NUM-LOG-FILES</item>\n  <item>NUM-MESSAGES</item>\n  <item>NUM-PARAMETERS</item>\n  <item>NUM-RELATIONS</item>\n  <item>NUM-REPLACED</item>\n  <item>NUM-RESULTS</item>\n  <item>NUM-SELECTED-ROWS</item>\n  <item>NUM-SELECTED-WIDGETS</item>\n  <item>NUM-SOURCE-BUFFERS</item>\n  <item>NUM-TABS</item>\n  <item>NUM-TO-RETAIN</item>\n  <item>NUM-TOP-BUFFERS</item>\n  <item>NUM-VISIBLE-COLUMNS</item>\n  <item>NUMERIC-DECIMAL-POINT</item>\n  <item>NUMERIC-FORMAT</item>\n  <item>NUMERIC-SEPARATOR</item>\n  <item>ON-FRAME-BORDER</item>\n  <item>ORIGIN-HANDLE</item>\n  <item>ORIGIN-ROWID</item>\n  <item>OVERLAY</item>\n  <item>OWNER</item>\n  <item>OWNER-DOCUMENT</item>\n  <item>PAGE-BOTTOM</item>\n  <item>PAGE-TOP</item>\n  <item>PARAMETER</item>\n  <item>PARENT</item>\n  <item>PARENT-BUFFER</item>\n  <item>PARENT-RELATION</item>\n  <item>PARSE-STATUS</item>\n  <item>PASSWORD-FIELD</item>\n  <item>PATHNAME</item>\n  <item>PERSISTENT</item>\n  <item>PERSISTENT-CACHE-DISABLED</item>\n  <item>PERSISTENT-PROCEDURE</item>\n  <item>PFCOLOR</item>\n  <item>PIXELS-PER-COLUMN</item>\n  <item>PIXELS-PER-ROW</item>\n  <item>POPUP-MENU</item>\n  <item>POPUP-ONLY</item>\n  <item>POSITION</item>\n  <item>PREPARED</item>\n  <item>PREPARE-STRING</item>\n  <item>PREV-COLUMN</item>\n  <item>PREV-SIBLING</item>\n  <item>PREV-TAB-ITEM</item>\n  <item>PRIMARY</item>\n  <item>PRINTER-CONTROL-HANDLE</item>\n  <item>PRINTER-HDC</item>\n  <item>PRINTER-NAME</item>\n  <item>PRINTER-PORT</item>\n  <item>PRIVATE-DATA</item>\n  <item>PROCEDURE-NAME</item>\n  <item>PROGRESS-SOURCE</item>\n  <item>PROXY</item>\n  <item>PROXY-PASSWORD</item>\n  <item>PROXY-USERID</item>\n  <item>PUBLIC-ID</item>\n  <item>PUBLISHED-EVENTS</item>\n  <item>QUERY</item>\n  <item>QUERY-OFF-END</item>\n  <item>QUIT</item>\n  <item>RADIO-BUTTONS</item>\n  <item>READ-ONLY</item>\n  <item>RECID</item>\n  <item>RECORD-LENGTH</item>\n  <item>REFRESHABLE</item>\n  <item>REJECTED</item>\n  <item>RELATION-FIELDS</item>\n  <item>RELATIONS-ACTIVE</item>\n  <item>REMOTE</item>\n  <item>REMOTE-HOST</item>\n  <item>REMOTE-PORT</item>\n  <item>REPOSITION</item>\n  <item>RESIZABLE</item>\n  <item>RESIZE</item>\n  <item>RETAIN-SHAPE</item>\n  <item>RETURN-INSERTED</item>\n  <item>RETURN-VALUE</item>\n  <item>RETURN-VALUE-DATA-TYPE</item>\n  <item>ROW</item>\n  <item>COL</item>\n  <item>ROW-HEIGHT-CHARS</item>\n  <item>ROW-HEIGHT-PIXELS</item>\n  <item>ROW-STATE</item>\n  <item>ROWID</item>\n  <item>ROW-MARKERS</item>\n  <item>ROW-RESIZABLE</item>\n  <item>SAVE-WHERE-STRING</item>\n  <item>SCHEMA-CHANGE</item>\n  <item>SCHEMA-PATH</item>\n  <item>SCREEN-LINES</item>\n  <item>SCREEN-VALUE</item>\n  <item>SCROLL-BARS</item>\n  <item>SCROLLABLE</item>\n  <item>SCROLLBAR-HORIZONTAL</item>\n  <item>SCROLLBAR-VERTICAL</item>\n  <item>SELECTABLE</item>\n  <item>SELECTED</item>\n  <item>SELECTION-END</item>\n  <item>SELECTION-START</item>\n  <item>SELECTION-TEXT</item>\n  <item>SENSITIVE</item>\n  <item>SEPARATORS</item>\n  <item>SEPARATOR-FGCOLOR</item>\n  <item>SERVER</item>\n  <item>SERVER-CONNECTION-BOUND</item>\n  <item>SERVER-CONNECTION-BOUND-REQUEST</item>\n  <item>SERVER-CONNECTION-CONTEXT</item>\n  <item>SERVER-CONNECTION-ID</item>\n  <item>SERVER-OPERATING-MODE</item>\n  <item>SHOW-IN-TASKBAR</item>\n  <item>SIDE-LABEL-HANDLE</item>\n  <item>SIDE-LABELS</item>\n  <item>SKIP-DELETED-RECORD</item>\n  <item>SMALL-ICON</item>\n  <item>SMALL-TITLE</item>\n  <item>SOAP-FAULT-ACTOR</item>\n  <item>SOAP-FAULT-CODE</item>\n  <item>SOAP-FAULT-DETAIL</item>\n  <item>SOAP-FAULT-STRING</item>\n  <item>SORT</item>\n  <item>STARTUP-PARAMETERS</item>\n  <item>STATUS-AREA</item>\n  <item>STATUS-AREA-FONT</item>\n  <item>STOP</item>\n  <item>STOPPED</item>\n  <item>STREAM</item>\n  <item>STRETCH-TO-FIT</item>\n  <item>STRING-VALUE</item>\n  <item>SUBTYPE</item>\n  <item>SUPER-PROCEDURES</item>\n  <item>SUPPRESS-NAMESPACE-PROCESSING</item>\n  <item>SUPPRESS-WARNINGS</item>\n  <item>SYSTEM-ALERT-BOXES</item>\n  <item>SYSTEM-ID</item>\n  <item>TAB-POSITION</item>\n  <item>TAB-STOP</item>\n  <item>TABLE</item>\n  <item>TABLE-CRC-LIST</item>\n  <item>TABLE-HANDLE</item>\n  <item>TABLE-LIST</item>\n  <item>TABLE-NUMBER</item>\n  <item>TEMP-DIRECTORY</item>\n  <item>TEXT-SELECTED</item>\n  <item>THREE-D</item>\n  <item>TIC-MARKS</item>\n  <item>TIME-SOURCE</item>\n  <item>TITLE</item>\n  <item>TITLE-BGCOLOR</item>\n  <item>TITLE-DCOLOR</item>\n  <item>TITLE-FGCOLOR</item>\n  <item>TITLE-FONT</item>\n  <item>TOGGLE-BOX</item>\n  <item>TOOLTIP</item>\n  <item>TOOLTIPS</item>\n  <item>TOP-ONLY</item>\n  <item>TRACKING-CHANGES</item>\n  <item>TRANSACTION</item>\n  <item>TRANSPARENT</item>\n  <item>TRANS-INIT-PROCEDURE</item>\n  <item>TYPE</item>\n  <item>UNDO</item>\n  <item>UNIQUE-ID</item>\n  <item>UNIQUE-MATCH</item>\n  <item>URL</item>\n  <item>URL-PASSWORD</item>\n  <item>URL-USERID</item>\n  <item>DISPLAY</item>\n  <item>VALIDATE-EXPRESSION</item>\n  <item>VALIDATE-MESSAGE</item>\n  <item>VALIDATION-ENABLED</item>\n  <item>VALUE</item>\n  <item>VIEW-FIRST-COLUMN-ON-REOPEN</item>\n  <item>VIRTUAL-HEIGHT</item>\n  <item>VIRTUAL-WIDTH</item>\n  <item>VIRTUAL-HEIGHT-CHARS</item>\n  <item>VIRTUAL-HEIGHT-PIXELS</item>\n  <item>VIRTUAL-WIDTH-CHARS</item>\n  <item>VIRTUAL-WIDTH-PIXELS</item>\n  <item>VISIBLE</item>\n  <item>WARNING</item>\n  <item>WHERE-STRING</item>\n  <item>WIDGET-ENTER</item>\n  <item>WIDGET-LEAVE</item>\n  <item>WIDTH-CHARS</item>\n  <item>WIDTH-PIXELS</item>\n  <item>WINDOW</item>\n  <item>WINDOW-STATE</item>\n  <item>WINDOW-SYSTEM</item>\n  <item>WORD-WRAP</item>\n  <item>WORK-AREA-HEIGHT-PIXELS</item>\n  <item>WORK-AREA-WIDTH-PIXELS</item>\n  <item>WORK-AREA-X</item>\n  <item>WORK-AREA-Y</item>\n  <item>X</item>\n  <item>XML-SCHEMA-PATH</item>\n  <item>XML-SUPPRESS-NAMESPACE-PROCESSING</item>\n  <item>Y</item>\n  <item>YEAR-OFFSET</item>\n  <item>WRITE-XMLSCHEMA</item>\n  <item>READ-XMLSCHEMA</item>\n  <item>WRITE-XML</item>\n  <item>READ-XML</item>\n  <item>NESTED</item>\n  <item>XML-DATA-TYPE</item>\n  <item>XML-NODE-TYPE</item>\n  <item>FORMATTED</item>\n  <item>SET-OUTPUT-DESTINATION</item>\n  <item>START-DOCUMENT</item>\n  <item>START-ELEMENT</item>\n  <item>WRITE-CHARACTERS</item>\n  <item>END-ELEMENT</item>\n  <item>END-DOCUMENT</item>\n  <item>WRITE-DATA-ELEMENT</item>\n  <item>INSERT-ATTRIBUTE</item>\n</list>\n\n<list name=\"methods\">\n  <item>COPY-DATASET</item>\n  <item>COPY-TEMP-TABLE</item>\n  <item>GET-CALLBACK-PROC-CONTEXT</item>\n  <item>GET-CALLBACK-PROC-NAME</item>\n  <item>GET-BINARY-DATA</item>\n  <item>ADD-SCHEMA-LOCATION</item>\n  <item>DECLARE-NAMESPACE</item>\n  <item>RESET</item>\n  <item>WRITE-CDATA</item>\n  <item>WRITE-COMMENT</item>\n  <item>WRITE-EMPTY-ELEMENT</item>\n  <item>WRITE-ENTITY-REF</item>\n  <item>WRITE-EXTERNAL-DTD</item>\n  <item>WRITE-FRAGMENT</item>\n  <item>WRITE-PROCESSING-INSTRUCTION</item>\n  <item>CLEAR-LOG</item>\n  <item>CLOSE-LOG</item>\n  <item>WRITE-MESSAGE</item>\n  <item>AUTHENTICATION-FAILED</item>\n  <item>BEGIN-EVENT-GROUP</item>\n  <item>CLEAR-APPL-CONTEXT</item>\n  <item>ENCRYPT-AUDIT-MAC-KEY</item>\n  <item>END-EVENT-GROUP</item>\n  <item>EXPORT-PRINCIPAL</item>\n  <item>GET-PROPERTY</item>\n  <item>IMPORT-PRINCIPAL</item>\n  <item>LIST-PROPERTY-NAMES</item>\n  <item>LOAD-DOMAINS</item>\n  <item>LOCK-REGISTRATION</item>\n  <item>LOG-AUDIT-EVENT</item>\n  <item>LOGOUT</item>\n  <item>REFRESH-AUDIT-POLICY</item>\n  <item>REGISTER-DOMAIN</item>\n  <item>SEAL</item>\n  <item>SET-APPL-CONTEXT</item>\n  <item>SET-CLIENT</item>\n  <item>SET-PROPERTY</item>\n  <item>VALIDATE-SEAL</item>\n  <item>ACCEPT-CHANGES</item>\n  <item>ACCEPT-ROW-CHANGES</item>\n  <item>ADD-BUFFER</item>\n  <item>ADD-CALC-COLUMN</item>\n  <item>ADD-COLUMNS-FROM</item>\n  <item>ADD-EVENTS-PROCEDURE</item>\n  <item>ADD-FIELDS-FROM</item>\n  <item>ADD-FIRST</item>\n  <item>ADD-HEADER-ENTRY</item>\n  <item>ADD-INDEX-FIELD</item>\n  <item>ADD-LAST</item>\n  <item>ADD-LIKE-COLUMN</item>\n  <item>ADD-LIKE-FIELD</item>\n  <item>ADD-LIKE-INDEX</item>\n  <item>ADD-NEW-FIELD</item>\n  <item>ADD-NEW-INDEX</item>\n  <item>ADD-RELATION</item>\n  <item>ADD-SOURCE-BUFFER</item>\n  <item>ADD-SUPER-PROCEDURE</item>\n  <item>APPEND-CHILD</item>\n  <item>APPLY-CALLBACK</item>\n  <item>ATTACH-DATA-SOURCE</item>\n  <item>BUFFER-COMPARE</item>\n  <item>BUFFER-COPY</item>\n  <item>BUFFER-CREATE</item>\n  <item>BUFFER-DELETE</item>\n  <item>BUFFER-FIELD</item>\n  <item>BUFFER-RELEASE</item>\n  <item>BUFFER-VALIDATE</item>\n  <item>CANCEL-BREAK</item>\n  <item>CANCEL-REQUESTS</item>\n  <item>CLEAR</item>\n  <item>CLEAR-SELECTION</item>\n  <item>CLONE-NODE</item>\n  <item>CONNECT</item>\n  <item>CONNECTED</item>\n  <item>CONVERT-TO-OFFSET</item>\n  <item>CREATE-LIKE</item>\n  <item>CREATE-NODE</item>\n  <item>CREATE-NODE-NAMESPACE</item>\n  <item>CREATE-RESULT-LIST-ENTRY</item>\n  <item>DEBUG</item>\n  <item>DELETE</item>\n  <item>DELETE-CHAR</item>\n  <item>DELETE-CURRENT-ROW</item>\n  <item>DELETE-HEADER-ENTRY</item>\n  <item>DELETE-LINE</item>\n  <item>DELETE-NODE</item>\n  <item>DELETE-RESULT-LIST-ENTRY</item>\n  <item>DELETE-SELECTED-ROW</item>\n  <item>DELETE-SELECTED-ROWS</item>\n  <item>DESELECT-FOCUSED-ROW</item>\n  <item>DESELECT-ROWS</item>\n  <item>DESELECT-SELECTED-ROW</item>\n  <item>DETACH-DATA-SOURCE</item>\n  <item>DISABLE</item>\n  <item>DISABLE-CONNECTIONS</item>\n  <item>DISABLE-DUMP-TRIGGERS</item>\n  <item>DISABLE-LOAD-TRIGGERS</item>\n  <item>DISCONNECT</item>\n  <item>DISPLAY-MESSAGE</item>\n  <item>DUMP-LOGGING-NOW</item>\n  <item>EDIT-CLEAR</item>\n  <item>EDIT-COPY</item>\n  <item>EDIT-CUT</item>\n  <item>EDIT-PASTE</item>\n  <item>EDIT-UNDO</item>\n  <item>EMPTY-DATASET</item>\n  <item>EMPTY-TEMP-TABLE</item>\n  <item>ENABLE</item>\n  <item>ENABLE-CONNECTIONS</item>\n  <item>ENABLE-EVENTS</item>\n  <item>END-FILE-DROP</item>\n  <item>ENTRY</item>\n  <item>EXPORT</item>\n  <item>FETCH-SELECTED-ROW</item>\n  <item>FILL</item>\n  <item>FIND-BY-ROWID</item>\n  <item>FIND-CURRENT</item>\n  <item>FIND-FIRST</item>\n  <item>FIND-LAST</item>\n  <item>FIND-UNIQUE</item>\n  <item>GET-ATTRIBUTE</item>\n  <item>GET-ATTRIBUTE-NODE</item>\n  <item>GET-BLUE-VALUE</item>\n  <item>GET-BROWSE-COLUMN</item>\n  <item>GET-BUFFER-HANDLE</item>\n  <item>GET-BYTES-AVAILABLE</item>\n  <item>GET-CHANGES</item>\n  <item>GET-CHILD</item>\n  <item>GET-CHILD-RELATION</item>\n  <item>GET-CURRENT</item>\n  <item>GET-DATASET-BUFFER</item>\n  <item>GET-DOCUMENT-ELEMENT</item>\n  <item>GET-DROPPED-FILE</item>\n  <item>GET-DYNAMIC</item>\n  <item>GET-FIRST</item>\n  <item>GET-GREEN-VALUE</item>\n  <item>GET-HEADER-ENTRY</item>\n  <item>GET-INDEX-BY-NAMESPACE-NAME</item>\n  <item>GET-INDEX-BY-QNAME</item>\n  <item>GET-ITERATION</item>\n  <item>GET-LAST</item>\n  <item>GET-LOCALNAME-BY-INDEX</item>\n  <item>GET-MESSAGE</item>\n  <item>GET-NEXT</item>\n  <item>GET-NODE</item>\n  <item>GET-NUMBER</item>\n  <item>GET-PARENT</item>\n  <item>GET-PREV</item>\n  <item>GET-PRINTERS</item>\n  <item>GET-QNAME-BY-INDEX</item>\n  <item>GET-RED-VALUE</item>\n  <item>GET-RELATION</item>\n  <item>GET-REPOSITIONED-ROW</item>\n  <item>GET-RGB-VALUE</item>\n  <item>GET-SELECTED-WIDGET</item>\n  <item>GET-SERIALIZED</item>\n  <item>GET-SIGNATURE</item>\n  <item>GET-SOCKET-OPTION</item>\n  <item>GET-SOURCE-BUFFER</item>\n  <item>GET-TAB-ITEM</item>\n  <item>GET-TEXT-HEIGHT-CHARS</item>\n  <item>GET-TEXT-HEIGHT-PIXELS</item>\n  <item>GET-TEXT-WIDTH-CHARS</item>\n  <item>GET-TEXT-WIDTH-PIXELS</item>\n  <item>GET-TOP-BUFFER</item>\n  <item>GET-TYPE-BY-INDEX</item>\n  <item>GET-TYPE-BY-NAMESPACE-NAME</item>\n  <item>GET-TYPE-BY-QNAME</item>\n  <item>GET-URI-BY-INDEX</item>\n  <item>GET-VALUE-BY-INDEX</item>\n  <item>GET-VALUE-BY-NAMESPACE-NAME</item>\n  <item>GET-VALUE-BY-QNAME</item>\n  <item>GET-WAIT-STATE</item>\n  <item>IMPORT-NODE</item>\n  <item>INDEX-INFORMATION</item>\n  <item>INITIALIZE-DOCUMENT-TYPE</item>\n  <item>INITIATE</item>\n  <item>INSERT</item>\n  <item>INSERT-BACKTAB</item>\n  <item>INSERT-BEFORE</item>\n  <item>INSERT-FILE</item>\n  <item>INSERT-ROW</item>\n  <item>INSERT-STRING</item>\n  <item>INSERT-TAB</item>\n  <item>INVOKE</item>\n  <item>IS-ROW-SELECTED</item>\n  <item>IS-SELECTED</item>\n  <item>LOAD</item>\n  <item>LoadControls</item>\n  <item>LOAD-ICON</item>\n  <item>LOAD-IMAGE</item>\n  <item>LOAD-IMAGE-DOWN</item>\n  <item>LOAD-IMAGE-INSENSITIVE</item>\n  <item>LOAD-IMAGE-UP</item>\n  <item>LOAD-MOUSE-POINTER</item>\n  <item>LOAD-SMALL-ICON</item>\n  <item>LONGCHAR-TO-NODE-VALUE</item>\n  <item>LOOKUP</item>\n  <item>MEMPTR-TO-NODE-VALUE</item>\n  <item>MERGE-CHANGES</item>\n  <item>MERGE-ROW-CHANGES</item>\n  <item>MOVE-AFTER-TAB-ITEM</item>\n  <item>MOVE-BEFORE-TAB-ITEM</item>\n  <item>MOVE-COLUMN</item>\n  <item>MOVE-TO-BOTTOM</item>\n  <item>MOVE-TO-EOF</item>\n  <item>MOVE-TO-TOP</item>\n  <item>NODE-VALUE-TO-LONGCHAR</item>\n  <item>NODE-VALUE-TO-MEMPTR</item>\n  <item>NORMALIZE</item>\n  <item>QUERY-CLOSE</item>\n  <item>QUERY-OPEN</item>\n  <item>QUERY-PREPARE</item>\n  <item>RAW-TRANSFER</item>\n  <item>READ</item>\n  <item>READ-FILE</item>\n  <item>REFRESH</item>\n  <item>REJECT-CHANGES</item>\n  <item>REJECT-ROW-CHANGES</item>\n  <item>REMOVE-ATTRIBUTE</item>\n  <item>REMOVE-CHILD</item>\n  <item>REMOVE-EVENTS-PROCEDURE</item>\n  <item>REMOVE-SUPER-PROCEDURE</item>\n  <item>REPLACE</item>\n  <item>REPLACE-CHILD</item>\n  <item>REPLACE-SELECTION-TEXT</item>\n  <item>REPOSITION-BACKWARD</item>\n  <item>REPOSITION-FORWARD</item>\n  <item>REPOSITION-TO-ROW</item>\n  <item>REPOSITION-TO-ROWID</item>\n  <item>SAVE</item>\n  <item>SAVE-FILE</item>\n  <item>SAVE-ROW-CHANGES</item>\n  <item>SAX-PARSE</item>\n  <item>SAX-PARSE-FIRST</item>\n  <item>SAX-PARSE-NEXT</item>\n  <item>SCROLL-TO-CURRENT-ROW</item>\n  <item>SCROLL-TO-ITEM</item>\n  <item>SCROLL-TO-SELECTED-ROW</item>\n  <item>SEARCH</item>\n  <item>SELECT-ALL</item>\n  <item>SELECT-FOCUSED-ROW</item>\n  <item>SELECT-NEXT-ROW</item>\n  <item>SELECT-PREV-ROW</item>\n  <item>SELECT-ROW</item>\n  <item>SET-ACTOR</item>\n  <item>SET-ATTRIBUTE</item>\n  <item>SET-ATTRIBUTE-NODE</item>\n  <item>SET-BLUE-VALUE</item>\n  <item>SET-BREAK</item>\n  <item>SET-BUFFERS</item>\n  <item>SET-CALLBACK-PROCEDURE</item>\n  <item>SET-COMMIT</item>\n  <item>SET-CONNECT-PROCEDURE</item>\n  <item>SET-DYNAMIC</item>\n  <item>SET-GREEN-VALUE</item>\n  <item>SET-INPUT-SOURCE</item>\n  <item>SET-MUST-UNDERSTAND</item>\n  <item>SET-NODE</item>\n  <item>SET-NUMERIC-FORMAT</item>\n  <item>SET-PARAMETER</item>\n  <item>SET-READ-RESPONSE-PROCEDURE</item>\n  <item>SET-RED-VALUE</item>\n  <item>SET-REPOSITIONED-ROW</item>\n  <item>SET-RGB-VALUE</item>\n  <item>SET-ROLLBACK</item>\n  <item>SET-SELECTION</item>\n  <item>SET-SERIALIZED</item>\n  <item>SET-SOCKET-OPTION</item>\n  <item>SET-WAIT-STATE</item>\n  <item>STOP-PARSING</item>\n  <item>SYNCHRONIZE</item>\n  <item>TEMP-TABLE-PREPARE</item>\n  <item>VALIDATE</item>\n  <item>WRITE</item>\n  <item>MAX-HEIGHT</item>\n  <item>MAX-WIDTH</item>\n</list>\n\n<list name=\"envvariables\">\n  <item>CLASSPATH</item>\n  <item>DLC</item>\n  <item>EVTLEVEL</item>\n  <item>JDKCP</item>\n  <item>JDKHOME</item>\n  <item>JFCCP</item>\n  <item>JFHOME</item>\n  <item>JIT</item>\n  <item>JRECP</item>\n  <item>JREHOME</item>\n  <item>JVMEXE</item>\n  <item>PATH</item>\n  <item>PROCFG</item>\n  <item>PROCONV</item>\n  <item>PROEXE</item>\n  <item>PROGRESSCP</item>\n  <item>PROLOAD</item>\n  <item>PROMSGS</item>\n  <item>PROPATH</item>\n  <item>PROSRV</item>\n  <item>PROSTARTUP</item>\n  <item>PROTERMCAP</item>\n  <item>TERM</item>\n  <item>TERMINAL</item>\n  <item>GATEWAY_INTERFACE</item>\n  <item>SERVER_SOFTWARE</item>\n  <item>SERVER_PROTOCOL</item>\n  <item>SERVER_NAME</item>\n  <item>SERVER_PORT</item>\n  <item>REQUEST_METHOD</item>\n  <item>SCRIPT_NAME</item>\n  <item>PATH_INFO</item>\n  <item>PATH_TRANSLATED</item>\n  <item>QUERY_STRING</item>\n  <item>REMOTE_ADDR</item>\n  <item>REMOTE_IDENT</item>\n  <item>REMOTE_USER</item>\n  <item>AUTH_TYPE</item>\n  <item>REMOTE_HOST</item>\n  <item>CONTENT_TYPE</item>\n  <item>CONTENT_LENGTH</item>\n  <item>HTTP_ACCEPT</item>\n  <item>HTTP_COOKIE</item>\n  <item>HTTP_REFERER</item>\n  <item>HTTP_USER_AGENT</item>\n  <item>HTTP_REFERER</item>\n  <item>HTTPS</item>\n  <item>HTTP_REFERER</item>\n  <item>HOSTURL</item>\n  <item>SELFURL</item>\n  <item>APPPROGRAM</item>\n  <item>APPURL</item>\n  <item>APPPROGRAM</item>\n  <item>OUTPUT-CONTENT-TYPE</item>\n  <item>WEB_SRC_PATH</item>\n</list>\n\n\n<contexts>\n  <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <keyword attribute=\"Preprocvar\" context=\"#stay\" String=\"envvariables\"/>\n    <keyword attribute=\"Data_Type\" context=\"#stay\" String=\"mytypes\"/>\n    <keyword attribute=\"Operators\" context=\"#stay\" String=\"operators\"/>\n    <keyword attribute=\"Preprocvar\" context=\"#stay\" String=\"preprocvar\"/>\n    <keyword attribute=\"Phrases\" context=\"#stay\" String=\"phrases\"/>\n    <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\"/>\n    <keyword attribute=\"Statements\" context=\"#stay\" String=\"statements\"/>\n    <keyword attribute=\"Widgets\" context=\"#stay\" String=\"widgets\"/>\n    <keyword attribute=\"Handles\" context=\"#stay\" String=\"handles\"/>\n    <keyword attribute=\"Properties\" context=\"#stay\" String=\"properties\"/>\n    <keyword attribute=\"Attributes\" context=\"#stay\" String=\"attributes\"/>\n    <keyword attribute=\"Methods\" context=\"#stay\" String=\"methods\"/>\n    <Int attribute=\"Integer\" context=\"#stay\"/>\n    <DetectChar attribute=\"String\" context=\"String\" char=\"'\"/>\n    <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\"\n                  char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n    <DetectChar attribute=\"Comment\" context=\"Identifier\" char='\"'/>\n    <DetectChar attribute=\"String\" context=\"#stay\" char='\"'/>\n    <DetectChar attribute=\"String\" context=\"#stay\" char=\"'\"/>\n    <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"+-*=/\\?~{}[]():.\"/>\n\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"PROCEDURE\" insensitive=\"true\"\n                  beginRegion=\"P1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"END PROCEDURE\" insensitive=\"true\"\n                  endRegion=\"P1\" firstNonSpace=\"true\"/>\n\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"FUNCTION\" insensitive=\"true\"\n                  beginRegion=\"F1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"END FUNCTION\" insensitive=\"true\"\n                  endRegion=\"F1\" firstNonSpace=\"true\"/>\n\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"CLASS\" insensitive=\"true\"\n                  beginRegion=\"C1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"END CLASS\" insensitive=\"true\"\n                  endRegion=\"C1\" firstNonSpace=\"true\"/>\n\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"METHOD\" insensitive=\"true\"\n                  beginRegion=\"M1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"END METHOD\" insensitive=\"true\"\n                  endRegion=\"M1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"CONSTRUCTOR\" insensitive=\"true\"\n                  beginRegion=\"CN1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"END CONSTRUCTOR\" insensitive=\"true\"\n                  endRegion=\"CN1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"DESTRUCTOR\" insensitive=\"true\"\n                  beginRegion=\"DS1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"END DESTRUCTOR\" insensitive=\"true\"\n                  endRegion=\"DS1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"INTERFACE\" insensitive=\"true\"\n                  beginRegion=\"IF1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Region Marker\" context=\"#stay\"\n                  String=\"END INTERFACE\" insensitive=\"true\"\n                  endRegion=\"IF1\" firstNonSpace=\"true\"/>\n\n    <StringDetect attribute=\"Function\" context=\"#stay\"\n                  String=\"DO:\" insensitive=\"true\"\n                  beginRegion=\"L1\" firstNonSpace=\"false\"/>\n    <StringDetect attribute=\"Function\" context=\"#stay\"\n                  String=\"REPEAT\" insensitive=\"true\"\n                  beginRegion=\"L1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Function\" context=\"#stay\"\n                  String=\"FOR\" insensitive=\"true\"\n                  beginRegion=\"L1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Function\" context=\"#stay\"\n                  String=\"CASE\" insensitive=\"true\"\n                  beginRegion=\"L1\" firstNonSpace=\"true\"/>\n    <StringDetect attribute=\"Function\" context=\"#stay\"\n                  String=\"END\" insensitive=\"true\"\n                  endRegion=\"L1\" firstNonSpace=\"true\"/>\n\n\n  </context>\n  <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n    <LineContinue attribute=\"String\" context=\"#pop\"/>\n    <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n    <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n  </context>\n  <context name=\"MultiLineComment\" attribute=\"Comment\"\n            lineEndContext=\"#stay\">\n    <LineContinue attribute=\"Comment\" context=\"#pop\"/>\n    <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"\n                  endRegion=\"Comment\"/>\n    <IncludeRules context=\"##Alerts\" />\n  </context>\n  <context name=\"Identifier\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n    <DetectChar attribute=\"Identifier\" context=\"#pop\" char='\"'/>\n  </context>\n</contexts>\n  <itemDatas>\n    <itemData name=\"Phrases\" defStyleNum=\"dsKeyword\"/>\n    <itemData name=\"Statements\" defStyleNum=\"dsKeyword\"/>\n    <itemData name=\"Widgets\" defStyleNum=\"dsKeyword\"/>\n    <itemData name=\"Handles\" defStyleNum=\"dsDecVal\"/>\n    <itemData name=\"Properties\" defStyleNum=\"dsOthers\"/>\n    <itemData name=\"Attributes\" defStyleNum=\"dsDataType\"/>\n    <itemData name=\"Methods\" defStyleNum=\"dsOthers\"/>\n    <itemData name=\"Function\" defStyleNum=\"dsFunction\"/>\n    <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n    <itemData name=\"Integer\"  defStyleNum=\"dsBaseN\"/>\n    <itemData name=\"String\" defStyleNum=\"dsString\"/>\n    <itemData name=\"String Char\" defStyleNum=\"dsChar\"/>\n    <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n    <itemData name=\"Identifier\" defStyleNum=\"dsOthers\"/>\n    <itemData name=\"Symbol\"  defStyleNum=\"dsChar\"/>\n    <itemData name=\"Data_Type\" defStyleNum=\"dsDataType\"/>\n    <itemData name=\"Preprocvar\" defStyleNum=\"dsChar\"/>\n    <itemData name=\"Operators\" defStyleNum=\"dsDecVal\"/>\n    <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n  </itemDatas>\n</highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords  casesensitive=\"0\" weakDeliminator=\"-\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/prolog.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- [Purpose & Copyright]\n\n    Highlight ISO-Prolog texts or template/include for Prolog dialects\n    based on the ISO standard.\n\n    Includes detection of DCG since it is 'hooked' in the ISO standard.\n    Uses text style \"Warning/ISO-bogus\" where portability is likely to\n    fail.\n\n    This file is part of KDE's kate project.\n\n  copyright   : (C) 2012 by Torsten Eichstädt\n\n **********************************************************************\n * This library is free software; you can redistribute it and/or      *\n * modify it under the terms of the GNU Library General Public        *\n * License as published by the Free Software Foundation; either       *\n * version 2 of the License, or (at your option) any later version.   *\n *                                                                    *\n * This library is distributed in the hope that it will be useful,    *\n * but WITHOUT ANY WARRANTY; without even the implied warranty of     *\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *\n * Library General Public License for more details.                   *\n *                                                                    *\n * You should have received a copy of the GNU Library General Public  *\n * License along with this library; if not, write to the              *\n * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,   *\n * Boston, MA  02110-1301, USA.                                       *\n **********************************************************************\n-->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[<!-- [Regular Expressions, Character Classes & Important Tokens]\nE.g. the dot \".\" has so many different meanings (i.e. in an RegExpr 'any char',\n'fullstop' of a clause, etc. pp.) that I decided it's usefull to write these out\nto make the rules more expressive. -->\n\n<!-- RegExpr for graphic tokens.  Comment start \"/*\" is catched earlier. -->\n    <!ENTITY gr_char_iso    \t\"[#$&amp;*+\\-./:&lt;=>?@^~\\\\]\">\n\n<!-- RegExpr: The highlighting engine always strips newline, so this ok: -->\n    <!ENTITY any_nw         \"[^ \\t]\">\n    <!ENTITY any            \".\">\n\n<!-- RegExpr: we want to highlight some graphic tokens: Logic & Control\n    fullstop shall not be falsely detected if it is actually a list functor\n    comma is catched extra to highlight it as \"Normal Text\" in an arg_seq\n    (and the cut \"!\" is NOT an op) -->\n    <!ENTITY fullstop_iso          \"\\.(?!(\\(|&gr_char_iso;))\">\n    <!ENTITY logic_control_ops_iso \"(;|->|\\\\\\+|:-|=|\\\\=)(?!&gr_char_iso;)\">\n\n    <!-- RegExpr: DCG (not my idea it is not reversed and named 'reduction') -->\n    <!ENTITY dcg_production_iso    \"-->(?!&gr_char_iso;)\">\n\n    <!-- RegExpr: partitioning of arithmetic operators:\n    - the 1st \"arith_compare\" always demand arithmetic evaluation\n      => highlight as \"Arithmetics\".\n    - the 2nd only at the right side of \"is\" or when an arith_compare applies.\n      They are used in other contexts as well, e.g. traditionally A-B is used\n      for 'a pair of something', the \"^\" in bagof/3 and setof/3.\n      => highlight as \"Arithmetics\" only in an arith_expr.\n    - the 3rd are true ISO Bogus: it is not specified whether it is arithmetic\n      or logical shift, and for bitwise AND, OR and NEG the integer format is\n      unspecified => not portable, depend on Prolog implementation. -->\n    <!ENTITY arith_compare_iso  \"(=:=|=\\\\=|=&lt;|&lt;|>=|>)(?!&gr_char_iso;)\">\n    <!ENTITY arith_ops_mixed_iso      \"(\\+|-|\\*|\\^)(?!&gr_char_iso;)\">\n    <!ENTITY arith_ops_int_iso      \"//(?!&gr_char_iso;)\">\n    <!ENTITY arith_ops_float_iso      \"(/|\\*\\*)(?!&gr_char_iso;)\">\n    <!ENTITY arith_bogus_iso  \"(/\\\\|\\\\/|\\\\|&lt;&lt;|>>)(?!&gr_char_iso;)\">\n\n    <!-- RegExpr: other predefined operators -->\n    <!ENTITY predefined_ops_iso \"(\\?-|==|\\\\==|@=&lt;|@&lt;|@>=|@>|=\\.\\.|@|:)(?!&gr_char_iso;)\">\n\n    <!-- We treat a number as float if it includes a decimal dot or exponent -->\n    <!ENTITY float3_iso \"[0-9]+E[+\\-]?[0-9]+\">\n    <!ENTITY float2_iso \"[0-9]+\\.[0-9]+\">\n    <!ENTITY float1_iso \"[0-9]+\\.[0-9]+E[+\\-]?[0-9]+\">\n\n<!-- RegExpr for esc'd char code in quoted 'strings' e.g. \"\\007\\\" -->\n    <!ENTITY esc_oct_iso\t\"\\\\[0-7]+\\\\\">\n    <!ENTITY esc_hex_iso\t\"\\\\x[a-fA-F0-9]+\\\\\">\n\n<!-- Char classes for AnyChar, NOT RegExpr: no esc seqs, ranges, etc. pp. here!\n     Used to avoid expensive RegExpr whenever possible. -->\n    <!--  Not needed: any_alnum_under_iso:  use \"DetectIdentifier\" instead -->\n    <!ENTITY any_lower_iso         \"abcdefghijklmnopqrstuvwxyz\">\n    <!ENTITY any_upper_under_iso   \"ABCDEFGHIJKLMNOPQRSTUVWXYZ_\">\n    <!ENTITY any_bin_iso           \"01\">\n    <!ENTITY any_oct_iso           \"01234567\">\n    <!ENTITY any_dec_iso           \"0123456789\">\n    <!ENTITY any_hex_iso           \"0123456789abcdefABCDEF\">\n    <!ENTITY any_graphic_iso       \"#$&amp;*+-./:&lt;=>?@^~\\\">\n\n    <!-- Common esc seq in quoted & char code (after \"0'\").\n    Tab is handled extra.  Esc'd newline is catched earlier. -->\n    <!ENTITY any_esc_iso\t\t\"abfnrtv\\'`&quot;]\">\n\n    <!ENTITY dot        \".\">\n\n    <!-- Some solo chars for DetectChar -->\n    <!ENTITY comma\t\",\">\n    <!ENTITY cut        \"!\">\n    <!ENTITY bar        \"|\">\n    <!ENTITY tab\t\"\t\">\n    <!ENTITY bs         \"\\\">\n]>\n<language name=\"Prolog\" section=\"Sources\"\n\t  version=\"10\" kateversion=\"3.4\"\n\t  mimetype=\"text/x-prolog\"\n\t  extensions=\"*.prolog;*.dcg;*.pro\"\n\t  author=\"Torsten Eichstädt (torsten.eichstaedt@web.de)\"\n\t  license=\"LGPLv2+\">\n\n<!-- [Terminology & Abbreviations In The Comments]\n    - Literal text is in double quotes \"like this\", single quotes sometimes used\n      for a 'terminus technicus'.\n    - \"w/\", \"w/o\", \"s/t\" mean 'with', 'without', and \"sometimes\" resp.\n    - Use \"brace\" instead of 'bracket'/'parenthesis' for any of \"()[]{}\"\n    - Specify \"round\", \"list/squared\", \"curly\", \"opening\" and \"closing\" brace.\n    - \"quote/quoted/string\" mean any of single-, double-, or back-quote(d)\n    - \"seq\" sequence, \"nl\" newline, \"bs\" backslash, \"q\" quote(d), \"cc\" char code\n    - \"KISS\" Keep it simple, stupid! (be pragmatic)\n    - \"style\" = \"attribute\" (the applied text style)\n    - Keep comments as short as possible and as descriptive as neccessary LOL\n-->\n<!-- [Documentation, Bugs, Limitations & Solutions, TODOs]\n################################################################################\nAll bugs except three by the author. !FOLD THIS AWAY if long comments annoy you.\n\nBUG - Nobody's perfect - If I knew about the bug you found, it would have been\n      fixed already.\n one- Indentation-based folding is not reliable (Kate; fixed in KDE 4.9?).\n two- Folding is sometimes broken (Kate?).  See SOLUTIONS below.\n three- An optional leading sign is not highlighted as part of the number.\n  4 - A float w/o fractional part and exponent is highlighted as an integer.\n  5 - Detection of whitespace may not be 100% correct, only space/tab/newline.\n  6 - Handling inside arithmetic expressions might not be 100%.  See \"AL GUSTO\".\n inf- see TODOs below.\n\nLIMITS of this parser\n    - Highlighting of syntax errors is as intuitive as possible, i.e. for an\n      invalid newline highlight the last token before and leading white of the\n      next line - but that's not always possible.  Use your built-in problem\n      solver (between your ears) when you do not know what the exact error is.\n    - The parser knows nothing about currently defined dynamic ops, but has to\n      respect possible definitions of dynamic ops.  That's why:\n    - Any sequence of 'graphic chars' (_incl. those containing a dot_) is taken\n      as _one_ graphic token, and not - as you might expect - your user-defined\n      operator followed by fullstop (or sequence of ops).\n    - A single dot in the outmost term of a clause is taken as a fullstop, even\n      if it is actually a user-defined operator.\n      - Else, a single dot is highlighted as \"Warning\" because it might be a\n        user-def'd op (usually an error, but can not decide w/o current_op/3).\n    - Detection of the fullstop relies upon the usual semantics of braces.\n    - Axioms of folding capabilities are: the literal fullstop as stop symbol\n      and the usual semantics of braces w/ pairs of opening and closing brace.\n   ?- period.\nuncaught exception: error(existence_error(procedure,current_op/3),highlight/2)\n\nSOLUTIONS\n    - Help the parser by puting whitespace (space/tab/nl) here and there, espc.\n      after the fullstop, or use quotes; e.g. '/*' does not begin a comment,\n      neither does '%', and ***'.' can be two operators.\n      Functored syntax should always do, e.g. */*(X,Y) is valid (and does not\n      begin a comment).\n    - Folding: s/t moving the mouse slightly below the marker shows what you\n      want, s/t an empty line helps (or removing an empty line), when it's\n      removed regions stay ok, or break auto-folding w/ non-white @begin of\n      line.  Try a newer kate version.\n\nAL GUSTO (simple changes):\n    - Change classification of built-in predicates: adjust the <list> below.\n    - Reminder for other changes: solo chars - DetectChar, graphic - RegExpr.\n    - bar \"|\" (solo) is highlighted as \"other built-in operator\" in lists, else\n      \"Normal Text\".  You may safely remove/comment out  the rules in contexts\n      \"term/list/curly\" below if you add in in context \"operator\" or \"atomic\".\n      If it shall be part of user-defined ops, it has to be added to \"gr_char\",\n      and a few rules need adjustment.  Search for \"&bar;\".  You may then safely\n      add it to \"predefined_ops\" above (don't forget to escape it).\n    - cut \"!\" (solo) can be adjusted like the bar.\n    - comma \",\" (solo) is \"Normal Text\" in lists, else \"Logic & Control\".  You\n      may safely remove/comment out the rules in \"term/nested/list/curly\" below\n      and handle it in the context \"operator\".\n    - Disable arith_expr: replace \"context=\"arith_expr\"\" w/ \"context=\"#stay\"\"\n      in the rules in contexts \"atomic\" and \"operator\" (two or three occurrences).\n    - Disable indentation-based folding: in the section \"general\"@EOF:\"folding\".\n    - General guidelines: Be nice to slow/old hardware: avoid RegExpr (start w/\n      a RegExpr, test, then find a replacement), else match a RegExpr as late as\n      possible - it's expensive, a context switch is relatively cheap.\n      Eat as much text as possible in one run, e.g. in comments and quoted we\n      use \"DetectIdentifier\", else the engine would try all rules of the context\n      (w/ failure) and eat only one char on each run.\n    If your modification is kind of general, upload it and drop me a note.\n\n  The simplified syntax below should highlight 99.999% of ISO-Prolog texts\ncorrectly, as well as many non-ISO Prolog texts.\n  Else modify this file.  Save with new name in your HOME directory to\n.kde/share/apps/katepart/syntax/prolog-xy.xml You may read the NOTE at the end\nof this file.  WARNING: Be careful, though: the highlighting works according to\nit's program code, not neccessarily it's documentation...\n\nDONE- Parse (m)any (!) conforming Prolog texts w/ correct highlighting (LIMITS)\n    - Parse any erratic text w/o crash or endless loops and highlight errors\n    - Folding for multiline comments, clauses, nested terms, and quoted (LIMITS)\n    - Folding inside comments and of 1-line comments and clauses: indentation-\n      based like in Python, e.g.\n      my_pred(a).   % w/ marker@left (western style; depends on your settings)\n\tmy_pred(b). % you can fold\n\tmy_pred(c). % these lines\n      Inside clauses (i.e. context \"term\" and below) only explicit folding for\n      braces and quotes applies, except comments.  I did not find a better\n      solution, since the engine does not provide lookahead to the next line.\n    - Additionally, folding with %BEGIN ... %END (iff 1st nonwhite of the line).\n    - Classify built-ins (YMMV) for different highlighting, mainly:\n\t- w/ side effects from 'outside world' (arithmetics, stream I/O,...)\n\t- w/o side effects, only depend on user's program ('internal world')\n\t- program logic & control constructs\n\t- altering the clause knowledge base or Prolog state\n\t- integer/float/mixed arithmetics, so one can see the type of the result\n\t    - Iff it's an arithmetic expression; else arith ops and built-ins\n\t      are highlighted normal.\n    - Incl. Sep2012 DRAFT Technical Corrigendum 2: Prolog - Part 1: General Core\n    - Incl. honourable Richard O'Keefe's remarks as warnings as \"ISO Bogus\".\n    - Detect 'shebang' shell scripts, see BUGs\n    - Includes alert.xml to highlight alert keywords in comments.\n    - Dot \".\" may be an _unquoted_ user-defined operator in nested terms (but is\n      highlighted as \"Warning\" 'cause it's more likely a typo than an user-def'd\n      op) and is only taken as fullstop and highlighted as \"Logic & Control\" in\n      the outmost term of a clause.\n    - Über-correct handling of quoted, escape seqs and \"0'\" (char code integer):\n\t- detection of valid/invalid newline in quoted 'strings'.\n\t- highlight whitespace after esc'd newline in quoted so it differs from\n\t  whitespace contained in the quoted 'string'.\n\t- Highlight esc'd tab and tab in quoted as \"Warning\" because some text\n\teditors may convert them to space and it is easy to use \"\\t\" instead.\n    - Preliminary: most names end w/ ISO; prepared to be included in syntax\n      files adapted for Prolog dialects.\n    - The Shebang is highlighted only in the first line (with lineEmptyContext).\n\nFIXME\tWhen katepart can supply line numbers, fix the \"shebang\" rule.\n\nTODO sorted by priority\n  1 - [always] Cruise over all FIXMEs.\n  2 - Check if comma, cut & bar are really solo chars (where's the red book?).\n  3  - Check final Technical Corrigendum 2: Prolog - Part 1: General Core\n  4 - Buy ISO Prolog standard - Part 2: Modules.  Likely only keywords.  Need it\n      anyway.\n  5 - Make this strict-ISO and a \"Prolog (portable)\" that includes this file.\n  6 - Likewise, adopt for GNU & SWI Prolog and others.\n  8 - keywords 'phrase', streams depricated, etc.pp. ==> Prolog (portable).\n  9 - Likewise: shebang ==> Prolog (portable).\n 10 - Check if shebang can span multiple (escaped) lines.\n 11 - Check: all KB altering preds can have side effects (via resource_error)?\n 12 - For next two TODOs: ask katepart dev to provide lookahead to the next line\n    13 - Folding for consecutive one-line comments [easy? HARD! Impossible.]\n    14 - Likewise, folding for consecutive clauses [HARD! Impossible.]\n    I can live w/ indentation-based folding as a workaround.  Not 100%, but ok.\n 15 - +arg_seq (and list): \",\" as normal text: Detect name( [no layout; easy]\n 16 - +Classify meta predicates.\n 18 - The dollar \"$\" is commonly used as the 1st char of (unquoted?) atoms to\n      indicate 'internal mode', e.g. to declare a predicate as compile-in.\n      Does this mean the dollar is used as if it were a prefix op or is it part\n      of the atom?  Would be easy to implement.\n 19 - Bug #4: could be partly fixed, some built-ins take only float not integer.\n 20 - Bug them to better document weakDeliminators (and rename to delimiter ;)\n 21 - Adjust doxygen syntax for Prolog (e.g. adapt doxygen-lua), and include it.\n 22 - Check if vertical tab is white/layout; are there more non-printables?\n################################################################################\n-->\n<!-- [Facts & Implications Of The ISO Standard, as a reminder]\n  - 'layout' is whitespace (space/tab/newline) and/or comments.\n  - Braces (any of \"(){}[]\"), exclamation \"!\" (aka 'cut'), 'bar' \"|\", degree \"°\",\n    paragraph \"§\" and percent \"%\" are NOT 'graphic' chars, but 'solo' chars.\n  - The 'bar' \"|\" may be a predefined operator, and then a user-def'd op, too.\n  - There can only be (at most) one bar \"|\" in a list (written inside \"[]\"), and\n    no commata after it (after the bar).\n  - Graphic tokens are atoms (and solo chars are one-char atoms?).\n  - \"{}\" and \"[]\" are 'special atoms' (likewise \"()\"?).\n  - \"{}\" and \"[]\" shall not be operators (but round or single braces may be?).\n  - The fullstop \".\" is not a predefined postfix operator, and\n  - the list functor \".\" is not a predefined prefix operator.\n  - An unquoted graphic token shall not begin with \"/*\".\n  - Multiline comments shall not be nested.\n  - Floats are NOT written with lowercase \"e\" (i.e. not neccessarily an error if\n    e.g. \"e\" is a pre- or user-defined expr or op and the whole term is valid),\n  - and the fractional part and exponent of floats are optional (any and both).\n  - A leading minus immediately preceding a number is optional for all numbers\n    and then part of the number and not a prefix operator (currently beeing\n    clarified by the standard commitee if \"immediately\" includes layout, only\n    comments, or none of these at all ;) but\n  - the minus \"-\" is a predefined prefix- and infix operator...\n  - Terms are rewritten when read in, extendable by user-def'd rules (and these\n    may be dynamic), i.e. clauses are not restricted to the standard forms\n    (to the extent that the fullstop ending a clause may be omited at all) and\n  - the dot \".\" may be (solo or part of) an user-defined operator.\n  - A Prolog processor may use any character set, e.g. (multi-byte) Unicode.\n  - Virtually every token may be an (user- or predefined) operator, except a few\n    specifically excluded tokens (i.e. NOT just graphic and 'standard' atoms).\n  - All operators except the comma are dynamic (although the standard denotes\n    atoms as 'constants' ;), and\n  - (the comma may appear in a user-defined operator (beeing part of it)?).\n  (Now try to write syntax highlighting for Prolog w/o Prolog HAHAHA ;)\n-->\n    <highlighting>\n\t<!-- aka \"guru meditation trigger\" -->\n\t<list name=\"error term ISO\">\n\t    <item>error</item>\n\t</list>\n\t<list name=\"guru meditation terms ISO\">\n\t    <item>instantiation_error</item>\n\t    <item>uninstantiation_error</item>\n\t    <item>type_error</item>\n\t    <item>domain_error</item>\n\t    <item>existence_error</item>\n\t    <item>permission_error</item>\n\t    <item>representation_error</item>\n\t    <item>evaluation_error</item>\n\t    <item>resource_error</item>\n\t    <item>syntax_error</item>\n\t    <item>system_error</item>\n\t</list>\n\n\t<!-- These are in fact bogus, DO NOT USE them and bug the ISO standard\n\tcommitee to abandon char_conversion/2 and to apply common sense to the\n\tsemantics of include/1 and ensure_loaded/1, i.e. to handle recursion.\n\tBomb them w/ e-mails! It's not the purpose of a standard to fixate\n\terrors till eternity. -->\n\t<list name=\"bogus ISO\">\n\t    <item>char_conversion</item>\n\t    <item>current_char_conversion</item>\n\t    <item>include</item>\n\t    <item>ensure_loaded</item>\n\t    <!-- Use atan2 instead -->\n\t    <item>atan</item>\n\t    <!-- Unspecified integer representation/format -->\n\t    <item>xor</item>\n\t</list>\n        <!-- including directive \"initialization\" -->\n        <list name=\"logic+control ISO\">\n\t    <item>initialization</item>\n<!-- \t    <item>!</item> -->\n\t    <item>fail</item>\n\t    <item>repeat</item>\n\t    <item>call</item>\n            <item>catch</item>\n\t    <item>throw</item>\n\t    <item>true</item>\n\t    <item>false</item>\n\t    <item>once</item>\n\t</list>\n\n\t<!-- including directive \"dynamic\" -->\n        <list name=\"dyn clause mgmt ISO\">\n\t    <item>dynamic</item>\n\t    <item>asserta</item>\n            <item>assertz</item>\n            <item>retractall</item>\n\t    <item>retract</item>\n\t    <item>abolish</item>\n\t    <item>clause</item>\n<!-- \t    <item>numbervars</item> -->\n<!-- \t    <item>current_predicate</item> -->\n\t</list>\n\t<list name=\"terms ISO\">\n\t    <!-- keep tokens with same prefix sorted by length? -->\n\t    <item>atom_concat</item>\n\t    <item>atom_length</item>\n\t    <item>atom_chars</item>\n\t    <item>atom_codes</item>\n\t    <item>arg</item>\n\t    <item>subsumes_term</item>\n\t    <item>acyclic_term</item>\n\t    <item>char_code</item>\n\t    <item>compare</item>\n\t    <item>copy_term</item>\n\t    <item>functor</item>\n\t    <item>number_chars</item>\n\t    <item>number_codes</item>\n<!--FIXME check if GNU or ISO \t    <item>sub_atom</item> -->\n\t    <item>term_variables</item>\n\t    <item>unify_with_occurs_check</item>\n\t</list>\n\t<list name=\"DCG non-ISO\">\n\t    <item>phrase</item>\n\t</list>\n\t<list name=\"streams ISO\">\n\t    <item>open</item>\n<!--GNU\t    <item>current_stream</item>-->\n\t    <item>set_stream_position</item>\n\t    <item>get_char</item>\n\t    <item>get_code</item>\n\t    <item>peek_char</item>\n\t    <item>peek_code</item>\n\t    <item>get_byte</item>\n\t    <item>peek_byte</item>\n\n\t    <item>put_char</item>\n\t    <item>put_code</item>\n\t    <item>put_byte</item>\n\t    <item>nl</item>\n\n\t    <item>read_term</item>\n\t    <item>read</item>\n\t    <item>write_canonical</item>\n\t    <item>writeq</item>\n\t    <item>write</item>\n\t</list>\n\t<list name=\"arith eval ISO\">\n\t    <item>is</item>\n\t</list>\n\t<list name=\"arith ops int ISO\">\n\t    <item>rem</item>\n\t    <item>mod</item>\n\t    <item>div</item>\n\t</list>\n        <list name=\"arith expr mixed ISO\">\n<!--GNU\tarith IF expr    <item>inc</item> -->\n<!--GNU\tarith IF expr    <item>dec</item> -->\n\t    <item>abs</item>\n\t    <item>sign</item>\n\t    <item>min</item>\n\t    <item>max</item>\n        </list>\n        <list name=\"arith expr int ISO\">\n<!--GNU\tarith IF expr    <item>inc</item> -->\n<!--GNU\tarith IF expr    <item>dec</item> -->\n\t    <item>ceiling</item>\n\t    <item>floor</item>\n\t    <item>round</item>\n            <item>truncate</item>\n<!-- ISO Bogus\t    <item>xor</item> -->\n        </list>\n        <list name=\"arith expr float ISO\">\n\t    <item>pi</item>\n<!--GNU\t(see pi)    <item>e</item> -->\n<!--GNU\t(see pi)    <item>epsilon</item> -->\n\t    <item>sqrt</item>\n\t    <item>tan</item>\n\t    <item>cos</item>\n\t    <item>sin</item>\n\t    <item>atan2</item>\n\t    <item>acos</item>\n\t    <item>asin</item>\n\t    <item>exp</item>\n            <item>log</item>\n\t    <item>float</item>\n\t    <item>float_fractional_part</item>\n            <item>float_integer_part</item>\n        </list>\n\n\t<!-- including directives \"op/multifile/discontigous\" -->\n\t<list name=\"prolog state ISO\">\n\t    <item>multifile</item>\n\t    <item>discontigous</item>\n\t    <item>op</item>\n\t    <item>set_prolog_flag</item>\n\t</list>\n\t<list name=\"types ISO\">\n\t    <item>var</item>\n\t    <item>nonvar</item>\n\t    <item>atom</item>\n\t    <item>integer</item>\n\t    <item>float</item>\n\t    <item>number</item>\n\t    <item>atomic</item>\n\t    <item>compound</item>\n\t    <item>callable</item>\n\t    <item>ground</item>\n\t</list>\n\t<list name=\"built-ins ISO\">\n\t    <item>current_op</item>\n\t    <item>current_prolog_flag</item>\n\t    <item>current_input</item>\n\t    <item>current_output</item>\n\n\t    <!-- These act on streams, but the permission_error is only thrown\n\t    if the programmer tries to set_input(S) when S is alread an output\n\t    stream and vice versa; so: not affected by 'outside world' -->\n\t    <item>set_input</item>\n\t    <item>set_output</item>\n\n\t    <!-- may throw a system_error in GNU -->\n\t    <item>close</item>\n\n\t    <item>flush_output</item>\n\n\t    <!-- may throw permission_error in GNU if S is an output stream -->\n\t    <item>at_end_of_stream</item>\n\n\t    <item>stream_property</item>\n\t</list>\n\n\t<!-- !FOLD the <context> rules & comments for an overview, then it's no magic. -->\n\t<contexts>\n\t<!-- Catch typos: style=\"Syntax Error\" for all rules except comments and\n\tquoted.  This helps to catch bugs in the rules itself, too.  Nice\n\tdebuging aid.  Note that (naturally) some of the syntax rules given in\n\tEBNF are simplified and do not describe 100% valid Prolog.\n\n\t    prolog text\t:= shebang clause_seq | clause_seq\n\t    clause_seq\t:= clause clause_seq | empty\n\t    clause      := layout term_seq fullstop | term_seq fullstop\n\t-->\n\t    <!-- shebang: (\"#!\") Detect shebang and fallthrough to clause_seq -->\n\t    <context name=\"shebang\" lineEndContext=\"clause\" lineEmptyContext=\"clause\" attribute=\"Syntax Error\" >\n\t\t<!-- no way: fallthrough=\"1\" fallthroughContext=\"clause_seq\" > -->\n\t\t<Detect2Chars column=\"0\" char=\"#\" char1=\"!\" context=\"1-comment\" attribute=\"% italic predicates: w/ side effects\" />\n\t\t<!-- else fallthrough (workaround broken fallthrough) -->\n\t\t<RegExpr String=\"&any;\" lookAhead=\"true\" context=\"clause\" attribute=\"Syntax Error\" />\n\t    </context>\n\n\t    <!-- syntax error (Test & Debug Aid, too): it's enough to highlight next token -->\n\t    <context name=\"syntax_error\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<DetectSpaces context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<DetectIdentifier context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<RegExpr String=\"&any;\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t    </context>\n\n\t    <!-- clause: Start a region for code folding and switch to term -->\n<!-- \t    <context name=\"clause\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" > -->\n\t    <context name=\"clause\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" >\n\t\t<IncludeRules context=\"layout\" />\n\t\t<!-- KISS: do not force term to detect an empty clause as syntax error -->\n\t\t<RegExpr String=\"&fullstop_iso;\" context=\"#stay\" attribute=\"Warning (!use background)\" />\n<!-- \t\t<RegExpr lookAhead=\"true\" String=\"&any;\" context=\"term\" attribute=\"Syntax Error\" /> -->\n\t\t<RegExpr lookAhead=\"true\" String=\"&any;\" context=\"term\" beginRegion=\"clause\" attribute=\"Syntax Error\" />\n\t    </context>\n\n\t    <!--term/nested/list/curly: the master/dispatcher -->\n\t    <!-- (abbreviated): term := var | atomic | compound | \"(\" term \")\"\n\n\t    (term_seq := term \",\" term_seq | term    Not needed: comma is an op)\n\t    term      := layout solo layout | layout solo | solo layout | solo\n\t    solo      := var | atomic | compound | \"(\" term \")\"\n\t    compound  := op term | term op | term op term | functored | list\n\t    functored := atom \"(\" arg_seq \")\" | op \"(\" arg_seq \")\"\n\t    list      := \"[\" l_arg_seq \"]\" | double_quoted | \".\" \"(\" arg_seq \")\"\n\t    (if semantics of double_quoted not changed by set_prolog_flag/2)\n\t    sorry I forgot curly: the DCG term but can not contain the fullstop.\n\n\t    Comments in 'term' apply to the others as well.\n\t    Note that eating layout once is enough, since we come back here.\n\t    Only end the clause in the outmost term, which can only be term. -->\n\t    <context name=\"term\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<IncludeRules context=\"layout\" />\n\t\t<DetectChar char=\"(\" context=\"nested\" beginRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"[\" context=\"list\" beginRegion=\"list\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"{\" context=\"curly\" beginRegion=\"curly\" attribute=\"{ DCG }\" />\n\t\t<DetectChar char=\"&comma;\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<DetectChar char=\"&cut;\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<DetectChar char=\"&bar;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t\t<!-- lookAhead to give different style to the dot and the brace -->\n\t\t<Detect2Chars lookAhead=\"true\" char=\"&dot;\" char1=\"(\" context=\"list_functor\" attribute=\"Syntax Error\" />\n<!-- \t\t<RegExpr String=\"&fullstop_iso;\" context=\"#pop\" attribute=\"Logic &amp; Control\" /> -->\n\t\t<RegExpr String=\"&fullstop_iso;\" context=\"#pop\" endRegion=\"clause\" attribute=\"Logic &amp; Control\" />\n\t\t<IncludeRules context=\"atomic\" />\n\t\t<!-- Default: anything not eaten here is a syntax error -->\n\t    </context>\n\t    <context name=\"nested\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<IncludeRules context=\"layout\" />\n\t\t<DetectChar char=\")\" context=\"#pop\" endRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"(\" context=\"nested\" beginRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"[\" context=\"list\" beginRegion=\"list\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"{\" context=\"curly\" beginRegion=\"curly\" attribute=\"{ DCG }\" />\n\t\t<DetectChar char=\"&cut;\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<DetectChar char=\"&comma;\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<DetectChar char=\"&bar;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t\t<Detect2Chars lookAhead=\"true\" char=\"&dot;\" char1=\"(\" context=\"list_functor\" attribute=\"Normal Text\" />\n\t\t<RegExpr String=\"&fullstop_iso;\" context=\"#stay\" attribute=\"Warning (!use background)\" />\n\t\t<IncludeRules context=\"atomic\" />\n\t    </context>\n\t    <context name=\"list\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<IncludeRules context=\"layout\" />\n\t\t<DetectChar char=\"(\" context=\"nested\" beginRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"]\" context=\"#pop\" endRegion=\"list\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"[\" context=\"list\" beginRegion=\"list\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"{\" context=\"curly\" beginRegion=\"curly\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"&comma;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t\t<DetectChar char=\"&cut;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t\t<DetectChar char=\"&bar;\" context=\"#stay\" attribute=\"other built-in operator\" />\n\t\t<Detect2Chars lookAhead=\"true\" char=\"&dot;\" char1=\"(\" context=\"list_functor\" attribute=\"Normal Text\" />\n\t\t<IncludeRules context=\"atomic\" />\n\t    </context>\n\t    <context name=\"curly\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<IncludeRules context=\"layout\" />\n\t\t<DetectChar char=\"(\" context=\"nested\" beginRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"[\" context=\"list\" beginRegion=\"list\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\"}\" context=\"#pop\" endRegion=\"curly\" attribute=\"{ DCG }\" />\n\t\t<DetectChar char=\"{\" context=\"curly\" beginRegion=\"curly\" attribute=\"{ DCG }\" />\n\t\t<DetectChar char=\"&comma;\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<DetectChar char=\"&cut;\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<DetectChar char=\"&bar;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t\t<Detect2Chars lookAhead=\"true\" char=\"&dot;\" char1=\"(\" context=\"list_functor\" attribute=\"Normal Text\" />\n\t\t<IncludeRules context=\"atomic\" />\n\t    </context>\n\n\t    <!--  arith_expr := expr op expr | op expr | expr op | \"(\" expr \")\"\n\t\t\texpr := number_expr | var | arith_expr\n\n\t    This is only a goody to highlight arith ops and detect syntax errors.\n\t    If it causes problems, disable it: exchange context=\"arith_expr\" in\n\t    \"atomic\" and \"operator\" below with context=\"#stay\" (two or three occurrences) -->\n\t    <context name=\"arith_expr\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<DetectChar char=\"(\" context=\"nested_expr\" beginRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar lookAhead=\"true\" char=\")\" context=\"#pop\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar lookAhead=\"true\" char=\"}\" context=\"#pop\" attribute=\"{ DCG }\" />\n\t\t<DetectChar lookAhead=\"true\" char=\"]\" context=\"#pop\" attribute=\"( ) [ ]\" />\n\t\t<!-- FIXME check if cut may be an op, else (and in any case 99.9% likely) it's a usual cut here -->\n\t\t<DetectChar lookAhead=\"true\" char=\"&cut;\" context=\"#pop\" attribute=\"Logic &amp; Control\" />\n\t\t<DetectChar lookAhead=\"true\" char=\"&comma;\" context=\"#pop\" attribute=\"Logic &amp; Control\" />\n\t\t<!-- bar & dot could be a user-def'd op, pre-def'd ops could be\n\t\tredef'd; but let's assume the default and just end the expr -->\n\t\t<DetectChar lookAhead=\"true\" char=\"&bar;\" context=\"#pop\" attribute=\"other built-in operator\" />\n\t\t<RegExpr lookAhead=\"true\" String=\"&fullstop_iso;\" context=\"#pop\" attribute=\"Logic &amp; Control\" />\n\t\t<RegExpr lookAhead=\"true\" String=\"&logic_control_ops_iso;\" context=\"#pop\" attribute=\"Logic &amp; Control\" />\n\t\t<IncludeRules context=\"arith_expr_common\" />\n\t    </context>\n\t    <context name=\"nested_expr\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<DetectChar char=\"(\" context=\"nested_expr\" beginRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<DetectChar char=\")\" context=\"#pop\" endRegion=\"nested\" attribute=\"( ) [ ]\" />\n\t\t<!-- FIXME check if cut may be an op, else it's a syntax error here -->\n\t\t<DetectChar char=\"&cut;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t\t<DetectChar char=\"&comma;\" context=\"#stay\" attribute=\"Syntax Error\" />\n\t\t<!-- bar & dot could be a user-def'd op, pre-def'd ops could be redef'd; else these were errors -->\n\t\t<DetectChar char=\"&bar;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t\t<RegExpr String=\"&logic_control_ops_iso;\" context=\"#stay\" attribute=\"other built-in operator\" />\n\t\t<IncludeRules context=\"arith_expr_common\" />\n\t    </context>\n\n\t    <!-- list functor: assign style to the dot and let term/list/curly take the brace\n\t    (We have no style \"built-in term\", so take \"Normal text\" or \"built-in predicate\")\n\t    ASSERT 1st is the dot, else \"Syntax Error\" INTENTIONALLY -->\n\t    <context name=\"list_functor\" lineEndContext=\"syntax_error\" attribute=\"Syntax Error\" >\n\t\t<DetectChar char=\"&dot;\" context=\"#pop\" attribute=\"other built-in predicate\" />\n\t    </context>\n\n\t    <!-- single/double/back-quoted: handle esc seq and closing quote\n\t    Comments in single-quoted apply to the others as well.\n\t    Entry point is single/double/back-quoted (only to handle syntax error:\n\t    nl after opening quote), sq/dq/bq is inside the string.\n\t    lineEndContext should be \"syntax_error\", but then we couldn't handle\n\t    a valid esc'd line continuation.  So we do that 'in vitro' (took me\n\t    2 days w/ a plethora of useless rules to solve that puzzle LOL).\n\t    On error must not #stay, else the error isn't shown iff white or empty -->\n\t    <context name=\"sq\" lineEndContext=\"#stay\" attribute=\"'quo Ted'\" noIndentationBasedFolding=\"true\">\n<!-- \t    <context name=\"single-quoted\" lineEndContext=\"#stay\" attribute=\"'quo Ted'\" > -->\n\t\t<IncludeRules context=\"quoted_1st\"/>\n\t\t<!-- un-esc'd nl is a syntax error; match max seq (+), else the\n\t\terror is only shown in the next line -->\n\t\t<RegExpr String=\"(''|&esc_oct_iso;|&esc_hex_iso;|\\\\&any;|[^'\\\\]+)$\"\n\t\t\tcontext=\"syntax_error_sq\" attribute=\"Syntax Error\" />\n\t\t<!-- Usual handling: -->\n\t\t<Detect2Chars char=\"'\" char1=\"'\" context=\"#stay\" attribute=\"escaped (!use background)\" />\n\t\t<DetectChar char=\"'\" context=\"#pop#pop\" endRegion=\"quoted\" attribute=\"'quo Ted'\" />\n\t\t<IncludeRules context=\"quoted_last\"/>\n\t\t<!-- Default: literal content of the quoted string, context's style applies -->\n\t    </context>\n\t    <context name=\"dq\" lineEndContext=\"#stay\" attribute=\"&quot;double-quoted&quot;\" noIndentationBasedFolding=\"true\" >\n<!-- \t    <context name=\"double-quoted\" lineEndContext=\"#stay\" attribute=\"&quot;double-quoted&quot;\" > -->\n\t\t<IncludeRules context=\"quoted_1st\"/>\n\t\t<RegExpr String=\"(&quot;&quot;|&esc_oct_iso;|&esc_hex_iso;|\\\\&any;|[^&quot;\\\\]+)$\"\n\t\t\tcontext=\"syntax_error_dq\" attribute=\"Syntax Error\" />\n\t\t<Detect2Chars char=\"&quot;\" char1=\"&quot;\" context=\"#stay\" attribute=\"escaped (!use background)\" />\n\t\t<DetectChar char=\"&quot;\" context=\"#pop#pop\" endRegion=\"quoted\" attribute=\"&quot;double-quoted&quot;\" />\n\t\t<IncludeRules context=\"quoted_last\"/>\n\t    </context>\n\t    <context name=\"bq\" lineEndContext=\"#stay\" attribute=\"`back-quoted`\" noIndentationBasedFolding=\"true\" >\n<!-- \t    <context name=\"back-quoted\" lineEndContext=\"#stay\" attribute=\"`back-quoted`\" > -->\n\t\t<IncludeRules context=\"quoted_1st\"/>\n\t\t<RegExpr String=\"(``|&esc_oct_iso;|&esc_hex_iso;|\\\\&any;|[^`\\\\]+)$\"\n\t\t\tcontext=\"syntax_error_bq\" attribute=\"Syntax Error\" />\n\t\t<Detect2Chars char=\"`\" char1=\"`\" attribute=\"escaped (!use background)\" />\n\t\t<DetectChar char=\"`\" context=\"#pop#pop\" endRegion=\"quoted\" attribute=\"`back-quoted`\" />\n\t\t<IncludeRules context=\"quoted_last\"/>\n\t    </context>\n\t    <context name=\"single-quoted\" lineEndContext=\"#stay\" attribute=\"'quo Ted'\" >\n\t\t<LineContinue char=\"'\" context=\"sq\" beginRegion=\"quoted\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"'\" context=\"sq\" beginRegion=\"quoted\" attribute=\"'quo Ted'\" />\n\t    </context>\n\t    <context name=\"double-quoted\" lineEndContext=\"#stay\" attribute=\"&quot;double-quoted&quot;\" >\n\t\t<LineContinue char=\"&quot;\" context=\"dq\" beginRegion=\"quoted\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"&quot;\" context=\"dq\" beginRegion=\"quoted\" attribute=\"&quot;double-quoted&quot;\" />\n\t    </context>\n\t    <context name=\"back-quoted\" lineEndContext=\"#stay\" attribute=\"`back-quoted`\" >\n\t\t<LineContinue char=\"`\" context=\"bq\" beginRegion=\"quoted\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"`\" context=\"bq\" beginRegion=\"quoted\" attribute=\"`back-quoted`\" />\n\t    </context>\n\n\t    <!-- syntax_error_q: highlight next token and proceed normal afterwards -->\n\t    <context name=\"syntax_error_sq\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<Detect2Chars char=\"\\\" char1=\"'\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<Detect2Chars char=\"'\" char1=\"'\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"'\" context=\"#pop#pop#pop\" endRegion=\"quoted\" attribute=\"Syntax Error\" />\n\t\t<IncludeRules context=\"syntax_error\"/>\n\t    </context>\n\t    <context name=\"syntax_error_dq\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<Detect2Chars char=\"\\\" char1=\"&quot;\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<Detect2Chars char=\"&quot;\" char1=\"&quot;\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"&quot;\" context=\"#pop#pop#pop\" endRegion=\"quoted\" attribute=\"Syntax Error\" />\n\t\t<IncludeRules context=\"syntax_error\"/>\n\t    </context>\n\t    <context name=\"syntax_error_bq\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" noIndentationBasedFolding=\"true\" >\n\t\t<Detect2Chars char=\"\\\" char1=\"`\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<Detect2Chars char=\"`\" char1=\"`\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"`\" context=\"#pop#pop#pop\" endRegion=\"quoted\" attribute=\"Syntax Error\" />\n\t\t<IncludeRules context=\"syntax_error\"/>\n\t    </context>\n\n\t    <!-- char_code (after \"0'\"): esc seq, singleq twice, or any other -->\n\t    <context name=\"char_code\" lineEndContext=\"#pop\" attribute=\"Syntax Error\" >\n\t\t<Detect2Chars char=\"'\" char1=\"'\" context=\"#pop\" attribute=\"escaped (!use background)\" />\n\t\t<DetectChar char=\"'\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"&bs;\" context=\"esc_seq_cc\" attribute=\"escaped (!use background)\" />\n\t\t<DetectChar char=\"&tab;\" context=\"#pop\" attribute=\"Warning (!use background)\" />\n\t\t<!-- Default _AND IF_ esc_seq #pops back here; we need this to #pop out -->\n\t\t<RegExpr String=\"&any;\" context=\"#pop\" attribute=\"0'a (!use background)\" />\n\t    </context>\n\t    <!-- \"0'\" or \"0'\\\" at EOL is a syntax error, catched below.  If\n\t    possible, highlight white @next line to make clear error is the nl -->\n\t    <context name=\"syntax_error_cc\" lineEndContext=\"#stay\" attribute=\"Syntax Error\"\n\t\t    fallthrough=\"true\" fallthroughContext=\"#pop\" >\n\t\t<DetectSpaces context=\"#pop\" attribute=\"Syntax Error\" />\n\t    </context>\n\n\t    <!-- esc_seq: it's not worth it to handle common for quoted and cc\n\t    esc_seq_q: handle only cc in bs (e.g. \"\\007\\\"), else -> esc_seq_q2\n\t    ASSERT esc'd newline is handled by the calling context\n\t    ASSERT we get the leading bs here to highlight the whole thing -->\n\t    <context name=\"esc_seq_q\" lineEndContext=\"syntax_error\" attribute=\"Syntax Error\" >\n\t\t<RegExpr String=\"&esc_oct_iso;\" context=\"#pop\" attribute=\"0'a (!use background)\" />\n\t\t<RegExpr String=\"&esc_hex_iso;\" context=\"#pop\" attribute=\"0'a (!use background)\" />\n\t\t<DetectChar char=\"&bs;\" context=\"esc_seq_q2\" attribute=\"escaped (!use background)\" />\n\t    </context>\n\t    <!-- esc_seq_cc: #pop#pop out of cc on std esc seq, else pass char back\n\t    ASSERT we do NOT need the leading bs here anymore -->\n\t    <context name=\"esc_seq_cc\" fallthrough=\"true\" fallthroughContext=\"#pop\"\n\t\t    lineEndContext=\"#pop#pop\" attribute=\"Syntax Error\" >\n\t\t<DetectChar char=\"&tab;\" context=\"#pop#pop\" attribute=\"Warning (!use background)\" />\n\t\t<AnyChar String=\"&any_esc_iso;\" context=\"#pop#pop\" attribute=\"escaped (!use background)\" />\n\t    </context>\n\t    <!-- esc_seq_q2: Handle standard esc seq in quoted else pass char back\n\t    ASSERT we do NOT need the leading bs here anymore -->\n\t    <context name=\"esc_seq_q2\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\"\n\t\t    lineEndContext=\"syntax_error\" attribute=\"Syntax Error\" >\n\t\t<DetectChar char=\"&tab;\" context=\"#pop#pop\" attribute=\"Warning (!use background)\" />\n\t\t<AnyChar String=\"&any_esc_iso;\" context=\"#pop#pop\" attribute=\"escaped (!use background)\" />\n\t    </context>\n\n\t    <!-- id,var,graphic: ASSERT calling context ashured 1st char is ok\n\t\t\t\t ASSERT we get the 1st char for id & var -->\n\t    <context name=\"id\" attribute=\"Syntax Error\" lineEndContext=\"#stay\" >\n\t\t<DetectIdentifier context=\"#pop\" attribute=\"Normal Text\" />\n\t    </context>\n\t    <context name=\"var\" attribute=\"Syntax Error\" lineEndContext=\"#stay\" >\n\t\t<DetectIdentifier context=\"#pop\" attribute=\"_VARIABLE\" />\n\t    </context>\n\t    <context name=\"graphic\" lineEndContext=\"#pop\" attribute=\"Syntax Error\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n\t\t<AnyChar String=\"&any_graphic_iso;\" context=\"#stay\" attribute=\"Normal Text\" />\n\t    </context>\n\n\t    <!-- numbers (after \"0[box]\") -->\n\t    <context name=\"bin\" lineEndContext=\"#pop\" attribute=\"Syntax Error\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n\t\t<AnyChar String=\"&any_bin_iso;\" context=\"#stay\" attribute=\"0b1001 0o007 0xF1\" />\n\t    </context>\n\t    <context name=\"oct\" lineEndContext=\"#pop\" attribute=\"Syntax Error\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n\t\t<AnyChar String=\"&any_oct_iso;\" context=\"#stay\" attribute=\"0b1001 0o007 0xF1\" />\n\t    </context>\n\t    <context name=\"hex\" lineEndContext=\"#pop\" attribute=\"Syntax Error\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n\t\t<AnyChar String=\"&any_hex_iso;\" context=\"#stay\" attribute=\"0b1001 0o007 0xF1\" />\n\t    </context>\n\n\t    <!-- comment-iso: multi-line comment, handle closing \"*/\" -->\n\t    <context name=\"comment-iso\" lineEndContext=\"#stay\" attribute=\"% italic predicates: w/ side effects\" >\n\t    <!-- Nested comments are not allowed in strict ISO-Prolog - - >\n\t\t<Detect2Chars char=\"/\" char1=\"*\" context=\"comment\" beginRegion=\"comment\"\n\t\t\t    attribute=\"% italic predicates: w/ side effects\" />-->\n\t\t<Detect2Chars char=\"*\" char1=\"/\" context=\"#pop\" endRegion=\"comment\"\n\t\t\t    attribute=\"% italic predicates: w/ side effects\" />\n\t\t<DetectSpaces />\n\t\t<IncludeRules context=\"##Alerts\" />\n\t\t<DetectIdentifier />\n\t    </context>\n\n\t    <!-- 1-line comment: #pop@EOL  -->\n\t    <!-- Folding for consecutive 1-line comments: let indentation-based auto-folding work -->\n\t    <context name=\"1-comment\" lineEndContext=\"#pop\" attribute=\"% italic predicates: w/ side effects\" >\n\t\t<DetectSpaces />\n\t\t<IncludeRules context=\"##Alerts\" />\n\t\t<DetectIdentifier />\n\t    </context>\n\t    <context name=\"region_marker\" lineEndContext=\"#pop\" attribute=\"%BEGIN folding region\" noIndentationBasedFolding=\"true\" >\n\t\t<IncludeRules context=\"1-comment\" />\n\t    </context>\n\t    <context name=\"layout_fold\" lineEndContext=\"#stay\" attribute=\"Syntax Error\"\n\t\t    fallthrough=\"true\" fallthroughContext=\"#pop\" >\n\t\t<DetectSpaces attribute=\"Normal Text\" />\n\t\t<StringDetect String=\"%BEGIN\" context=\"region_marker\" attribute=\"%BEGIN folding region\"\n\t\t\t    firstNonSpace=\"true\" beginRegion=\"user_region\" />\n\t\t<StringDetect String=\"%END\" context=\"region_marker\" attribute=\"%BEGIN folding region\"\n\t\t\t    firstNonSpace=\"true\" endRegion=\"user_region\" />\n\t\t<DetectChar firstNonSpace=\"true\" char=\"%\" context=\"1-comment\" attribute=\"% italic predicates: w/ side effects\" />\n\t    </context>\n\n<!--####### BEGIN sub rules to be included - <context> never taken -->\n\n\t    <!-- Common for all quoted: Handle line continuation, esc seq, and most other input efficiently -->\n\t    <context name=\"quoted_1st\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" >\n\t\t<LineContinue attribute=\"escaped (!use background)\" />\n\t\t<DetectSpaces column=\"0\" attribute=\"escaped (!use background)\" />\n\t    </context>\n\t    <context name=\"quoted_last\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" >\n\t\t<DetectChar lookAhead=\"true\" char=\"&bs;\" context=\"esc_seq_q\" attribute=\"Syntax Error\" />\n\t\t<DetectChar char=\"&tab;\" attribute=\"Warning (!use background)\" />\n\t\t<DetectIdentifier />\n\t\t<DetectSpaces />\n\t    </context>\n\n\t    <!-- layout_seq := layout layout_seq\n\t\t     layout := \" \" | tab | nl | comment -->\n\t    <context name=\"layout\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" >\n\t\t<DetectSpaces attribute=\"Normal Text\" />\n\t\t<Detect2Chars char=\"/\" char1=\"*\" context=\"comment-iso\" attribute=\"% italic predicates: w/ side effects\"\n\t\t\t    beginRegion=\"comment\" />\n\t\t<StringDetect String=\"%BEGIN\" context=\"region_marker\" attribute=\"%BEGIN folding region\"\n\t\t\t    firstNonSpace=\"true\" beginRegion=\"user_region\" />\n\t\t<StringDetect String=\"%END\" context=\"region_marker\" attribute=\"%BEGIN folding region\"\n\t\t\t    firstNonSpace=\"true\" endRegion=\"user_region\" />\n\t\t<DetectChar firstNonSpace=\"true\" char=\"%\" context=\"layout_fold\" attribute=\"% italic predicates: w/ side effects\"\n\t\t\t    lookAhead=\"true\" />\n\t\t<DetectChar firstNonSpace=\"false\" char=\"%\" context=\"1-comment\" attribute=\"% italic predicates: w/ side effects\" />\n\t    </context>\n\n\t    <!--atomic: the work horse -->\n\t    <!-- (simplified) atomic := atom | number | op | var -->\n\t    <context name=\"atomic\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" >\n\t\t<!-- NOTE the order of rules is important... (as always)\n\t\tPredefined 1st, unknown (user defined) last -->\n\t\t<keyword String=\"logic+control ISO\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<keyword String=\"types ISO\" context=\"#stay\" attribute=\"Type Checking\" />\n\t\t<keyword String=\"dyn clause mgmt ISO\" context=\"#stay\" attribute=\"Dynamic Clause Management\" />\n\t\t<keyword String=\"streams ISO\" context=\"#stay\" attribute=\"Stream I/O\" />\n\t\t<keyword String=\"terms ISO\" context=\"#stay\" attribute=\"other built-in predicate\" />\n\t\t<keyword String=\"prolog state ISO\" context=\"#stay\" attribute=\"Prolog State\" />\n\t\t<keyword String=\"DCG non-ISO\" context=\"#stay\" attribute=\"{ DCG }\" />\n\t\t<keyword String=\"arith eval ISO\" context=\"arith_expr\" attribute=\"Arithmetics\" />\n\t\t<!-- These are user predicates outside arit_expr -->\n<!-- \t\t<keyword String=\"arith expr mixed ISO\" context=\"#stay\" attribute=\"other built-in predicate\" /> -->\n<!-- \t\t<keyword String=\"arith expr int ISO\" context=\"#stay\" attribute=\"other built-in predicate\" /> -->\n<!-- \t\t<keyword String=\"arith expr float ISO\" context=\"#stay\" attribute=\"other built-in predicate\" /> -->\n\t\t<keyword String=\"built-ins ISO\" context=\"#stay\" attribute=\"other built-in predicate\" />\n\t\t<keyword String=\"error term ISO\" context=\"#stay\" attribute=\"Guru Meditation\" />\n\t\t<keyword String=\"guru meditation terms ISO\" context=\"#stay\" attribute=\"Guru Meditation Terms\" />\n\t\t<keyword String=\"bogus ISO\" context=\"#stay\" attribute=\"ISO Bogus\" />\n\n\t\t<!-- Match char code before quoted and ops... -->\n \t\t<IncludeRules context=\"number\" />\n\n\t\t<!-- these depend on current_prolog_flag/2 so can all return a term i.e. a list (of char codes) -->\n\t\t<DetectChar lookAhead=\"true\" char=\"'\" context=\"single-quoted\" attribute=\"'quo Ted'\" />\n\t\t<DetectChar lookAhead=\"true\" char=\"`\" context=\"back-quoted\" attribute=\"`back-quoted`\" />\n\t\t<DetectChar lookAhead=\"true\" char=\"&quot;\" context=\"double-quoted\" attribute=\"&quot;double-quoted&quot;\" />\n\n\t\t<!-- ...and ops before atoms, else \"div\", \"is\" etc. are usual atoms -->\n \t\t<IncludeRules context=\"operator\" />\n\t\t<AnyChar lookAhead=\"true\" String=\"&any_lower_iso;\" context=\"id\" attribute=\"Normal Text\" />\n\t\t<AnyChar lookAhead=\"true\" String=\"&any_upper_under_iso;\" context=\"var\" attribute=\"_VARIABLE\" />\n\t\t<AnyChar String=\"&any_graphic_iso;\" context=\"graphic\" attribute=\"Normal Text\" />\n\t    </context> <!-- atomic -->\n\n\t    <!-- [(mostly) \"atomic\" for] arith_expr := arith_op | number_expr | var\n\t\t\t\t      number_expr := number | built-in | user-def\n\n\t    This is only a goody to highlight arith ops and detect syntax errors.\n\t    If it causes problems, disable it: exchange context=\"arith_expr\" in\n\t    contexts \"atomic\" and \"operator\" with context=\"#stay\" -->\n\t    <context name=\"arith_expr_common\" lineEndContext=\"#stay\" attribute=\"Syntax Error\" >\n\t\t<IncludeRules context=\"layout\" />\n\t\t<IncludeRules context=\"number\" />\n\t\t<keyword String=\"arith eval ISO\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<keyword String=\"bogus ISO\" context=\"#stay\" attribute=\"ISO Bogus\" />\n\t\t<keyword String=\"arith expr mixed ISO\" context=\"#stay\" attribute=\"Arithmetics\" />\n\t\t<keyword String=\"arith expr int ISO\" context=\"#stay\" attribute=\"Integer Arithmetics\" />\n\t\t<keyword String=\"arith expr float ISO\" context=\"#stay\" attribute=\"Float Arithmetics\" />\n\t\t<keyword String=\"arith ops int ISO\" context=\"#stay\" attribute=\"Integer Arithmetics\" />\n\t\t<RegExpr String=\"&arith_compare_iso;\" context=\"#pop\" attribute=\"Syntax Error\" />\n\t\t<RegExpr String=\"&arith_ops_mixed_iso;\" context=\"#stay\" attribute=\"Arithmetics\" />\n\t\t<RegExpr String=\"&arith_ops_int_iso;\" context=\"#stay\" attribute=\"Integer Arithmetics\" />\n\t\t<RegExpr String=\"&arith_ops_float_iso;\" context=\"#stay\" attribute=\"Float Arithmetics\" />\n\t\t<RegExpr String=\"&arith_bogus_iso;\" context=\"#stay\" attribute=\"ISO Bogus\" />\n\t\t<!-- do not miss user-def'd arithmetic expr and number expr-->\n \t\t<IncludeRules context=\"operator\" />\n\t\t<AnyChar lookAhead=\"true\" String=\"&any_lower_iso;\" context=\"id\" attribute=\"Normal Text\" />\n\t\t<AnyChar lookAhead=\"true\" String=\"&any_upper_under_iso;\" context=\"var\" attribute=\"_VARIABLE\" />\n\t\t<AnyChar String=\"&any_graphic_iso;\" context=\"graphic\" attribute=\"Normal Text\" />\n\t    </context>\n\n\t    <!-- number := float | integer\n\t\tinteger := decimal | baseN | \"0'\" char_code\n\t\tbaseN   := \"0b\" [01]+ | \"0o\" [0-7]+ | \"0x\" [0-9a-fA-F]+ -->\n\t    <context name=\"number\" lineEndContext=\"#pop\" attribute=\"Syntax Error\" >\n\t\t<!-- Match integers after other numbers -->\n\t\t<!-- FIXME a minus may precede all numbers and is part of the number! -->\n\t\t<RegExpr String=\"0'\\\\?$\" context=\"syntax_error_cc\" attribute=\"Syntax Error\" />\n\t\t<Detect2Chars char=\"0\" char1=\"'\" context=\"char_code\" attribute=\"0'a (!use background)\" />\n\n<!-- NOT: [box] could be a postfix op <RegExpr String=\"0[box]$\" context=\"#stay\" attribute=\"Syntax Error\" /> -->\n\t\t<Detect2Chars char=\"0\" char1=\"b\" context=\"bin\" attribute=\"0b1001 0o007 0xF1\" />\n\t\t<Detect2Chars char=\"0\" char1=\"o\" context=\"oct\" attribute=\"0b1001 0o007 0xF1\" />\n\t\t<Detect2Chars char=\"0\" char1=\"x\" context=\"hex\" attribute=\"0b1001 0o007 0xF1\" />\n\n\t\t<RegExpr String=\"&float1_iso;\" context=\"#stay\" attribute=\"2.718281E-9\" />\n\t\t<RegExpr String=\"&float2_iso;\" context=\"#stay\" attribute=\"2.718281E-9\" />\n\t\t<RegExpr String=\"&float3_iso;\" context=\"#stay\" attribute=\"2.718281E-9\" />\n\t\t<Int context=\"#stay\" attribute=\"1  2  3  42\" />\n\t    </context>\n\n\t    <!-- operator := predefined_op | dynamic_op (which we can not detect)\n\t    comma, single dot & bar are catched earlier above in term/list/curly -->\n\t    <context name=\"operator\" lineEndContext=\"#pop\" attribute=\"Syntax Error\" >\n\t\t<keyword String=\"arith eval ISO\" context=\"arith_expr\" attribute=\"Arithmetics\" />\n\t\t<keyword String=\"arith ops int ISO\" context=\"#stay\" attribute=\"other built-in operator\" />\n\t\t<RegExpr String=\"&logic_control_ops_iso;\" context=\"#stay\" attribute=\"Logic &amp; Control\" />\n\t\t<RegExpr String=\"&predefined_ops_iso;\" context=\"#stay\" attribute=\"other built-in operator\" />\n\t\t<RegExpr String=\"&dcg_production_iso;\" context=\"#stay\" attribute=\"{ DCG }\" />\n\t\t<RegExpr String=\"&arith_compare_iso;\" context=\"arith_expr\" attribute=\"Arithmetics\" />\n\t\t<RegExpr String=\"&arith_ops_mixed_iso;\" context=\"#stay\" attribute=\"other built-in operator\" />\n\t\t<RegExpr String=\"&arith_ops_int_iso;\" context=\"#stay\" attribute=\"other built-in operator\" />\n\t\t<RegExpr String=\"&arith_ops_float_iso;\" context=\"#stay\" attribute=\"other built-in operator\" />\n\t\t<RegExpr String=\"&arith_bogus_iso;\" context=\"#stay\" attribute=\"ISO Bogus\" />\n\t    </context>\n\n<!--####### END sub rules to be included - <context> never taken -->\n\t</contexts>\n\n\t<!-- The idea is to give all predicates that may be affected by the\n\t\"outside world\" a common style (italic).  I.e. these can throw a\n\tpermission, evaluation, representation or resource_error, even though\n\tthe program itself is 100% correct.  E.g. you get_char/2 a char code 1\n\tfrom a text stream (representation_error): not your mistake, but you\n\thave to deal with that, too. -->\n\t<itemDatas>\n\t    <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t    <itemData name=\"_VARIABLE\" defStyleNum=\"dsDataType\" bold=\"false\" spellChecking=\"false\" />\n\t    <itemData name=\"'quo Ted'\" defStyleNum=\"dsString\" />\n\t    <itemData name=\"`back-quoted`\" defStyleNum=\"dsString\" italic=\"true\" />\n\t    <!-- The standard wants double-quoted to be a list of char codes, but\n\t    e.g. GNU Prolog allows that to be set with set_prolog_flag/2 -->\n\t    <itemData name=\"&quot;double-quoted&quot;\" defStyleNum=\"dsOthers\" />\n\t    <itemData name=\"escaped (!use background)\" defStyleNum=\"dsChar\" spellChecking=\"false\"\n\t\t\t backgroundColor=\"#0C0C0C\" selBackgroundColor=\"#FFFFFF\" />\n\n\t    <!-- Numbers -->\n\t    <itemData name=\"2.718281E-9\" defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n\t    <itemData name=\"1  2  3  42\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n\t    <itemData name=\"0b1001 0o007 0xF1\" defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n\t    <itemData name=\"0'a (!use background)\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"\n\t\t\t backgroundColor=\"#0C0C0C\" selBackgroundColor=\"#FFFFFF\" />\n\n\t    <itemData name=\"( ) [ ]\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t    <itemData name=\"{ DCG }\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t    <itemData name=\"Prolog State\" defStyleNum=\"dsFunction\" bold=\"true\" spellChecking=\"false\" />\n\t    <itemData name=\"Type Checking\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n\t    <itemData name=\"Logic &amp; Control\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t    <itemData name=\"other built-in operator\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n\t    <itemData name=\"other built-in predicate\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n\n\t    <!-- Comments (2nd not used, just a hint) -->\n\t    <itemData name=\"% italic predicates: w/ side effects\" defStyleNum=\"dsComment\" />\n\n\t    <!-- Predicates affected by 'outside world' -->\n\t    <itemData name=\"Dynamic Clause Management\" defStyleNum=\"dsKeyword\" italic=\"true\" spellChecking=\"false\" />\n\t    <itemData name=\"Stream I/O\" defStyleNum=\"dsFunction\" italic=\"true\" spellChecking=\"false\" />\n\n\t    <!-- arithmetics: get the color of ints/floats; includes ops & expressions like pi -->\n\t    <itemData name=\"Arithmetics\" defStyleNum=\"dsDataType\" bold=\"true\" italic=\"true\" spellChecking=\"false\" />\n\t    <itemData name=\"Integer Arithmetics\" defStyleNum=\"dsDecVal\" bold=\"true\" italic=\"true\" spellChecking=\"false\" />\n\t    <itemData name=\"Float Arithmetics\" defStyleNum=\"dsFloat\" bold=\"true\" italic=\"true\" spellChecking=\"false\" />\n\t    <itemData name=\"ISO Bogus\" defStyleNum=\"dsAlert\" bold=\"true\" italic=\"true\" spellChecking=\"false\" />\n\n\t    <!-- no way w/ buggy kate 3.8.5: get the color of default style dsError for error and terms -->\n\t    <itemData name=\"Guru Meditation\" defStyleNum=\"dsNormal\" spellChecking=\"false\"\n\t\t    bold=\"true\" italic=\"false\" underline=\"false\" color=\"#FF0000\" selColor=\"#00FFFF\" />\n\t    <itemData name=\"Guru Meditation Terms\" defStyleNum=\"dsNormal\" spellChecking=\"false\"\n\t\t    bold=\"false\" italic=\"true\" underline=\"false\" color=\"#FF0000\" selColor=\"#00FFFF\" />\n\t    <itemData name=\"Syntax Error\" defStyleNum=\"dsError\" spellChecking=\"false\" />\n\t    <itemData name=\"Warning (!use background)\" defStyleNum=\"dsAlert\" spellChecking=\"false\"\n\t\t\tbackgroundColor=\"#FC000C\" selBackgroundColor=\"#03FFF3\" />\n\t    <itemData name=\"%BEGIN folding region\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\" />\n\t</itemDatas>\n    </highlighting>\n    <general>\n\t<keywords casesensitive=\"true\" additionalDeliminator=\"$#'&quot;`\" />\n\t<!-- let indentationsensitive folding provide it's magic -->\n\t<folding indentationsensitive=\"true\" />\n<!-- \t<EmptyLines> -->\n<!--        <EmptyLine regexpr=\"^[ /t]*(?!%).*$\" /> -->\n<!-- \t</EmptyLines> -->\n\t<comments>\n\t    <comment name=\"singleLine\" start=\"%\" position=\"afterwhitespace\" />\n\t    <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"comment\" />\n\t</comments>\n    </general>\n</language>\n<!--##### NOTE [HOWTO check your syntax file, extracted from language.dtd] #####\n\n\tCopyright (c) 2001 Joseph Wenninger <jowenn@kde.org>\n        modified (c) 2002 Anders Lund <anders@alweb.dk>\n        modified (c) 2003 Simon Huerlimann <simon.huerlimann@access.unizh.ch>\n        modified (c) 2005 Dominik Haumann <dhdev@gmx.de>\n        modified (c) 2008 Wilbert Berendsen <info@wilbertberendsen.nl>\n\n    You can validate your syntax files using checkXML from the development\n    package of kdelibs [author: i.e. kdelibs-dev]:\n\n\tcheckXML yourSyntax.xml [author: | grep -v 'no template matches']\n\n    If you see any 'validity error' lines, you should fix them. If you get\n    a lot of 'No template matches' lines, everything's just fine. You've\n    produced a valid syntax file!\n\n    It's also possible to use the (much faster) xmllint which comes with the\n    GNOME (oops:-) XML Library libxml2:\n\n\txmllint - -dtdvalid language.dtd yourSyntax.xml\n\t(don't use a space between the two - [author: dashes/minus]\n\tThat's just because XML comments don't allow that:-(\n\n    To use your syntax file, copy it to .kde/share/apps/katepart/syntax/ in\n    your home directory. You have to open a new instance of kwrite/kate to use\n    the new syntax file.\n-->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/protobuf.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Protobuf\" version=\"7\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.proto\" mimetype=\"text/x-protobuf\" author=\"Slawomir Mikula (slawek.mikula@gmail.com)\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>message</item>\n      <item>required</item>\n      <item>optional</item>\n      <item>repeated</item>\n      <item>packed</item>\n      <item>enum</item>\n      <item>default</item>\n      <item>import</item>\n      <item>public</item>\n      <item>extensions</item>\n      <item>package</item>\n      <item>option</item>\n      <item>deprecated</item>\n      <item>extend</item>\n    </list>\n    <list name=\"operators\">\n      <item>=</item>\n      <item>;</item>\n    </list>\n    <list name=\"datatypes\">\n      <item>double</item>\n      <item>float</item>\n      <item>int32</item>\n      <item>int64</item>\n      <item>uint32</item>\n      <item>uint64</item>\n      <item>sint32</item>\n      <item>sint64</item>\n      <item>fixed32</item>\n      <item>fixed64</item>\n      <item>sfixed32</item>\n      <item>sfixed64</item>\n      <item>bool</item>\n      <item>string</item>\n      <item>bytes</item>\n    </list>\n\n<contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"datatypes\"/>\n        <RegExpr attribute=\"Keyword\" context=\"Imports\" String=\"\\b(package|import)\\b\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"'\\\\u[0-9a-fA-F]{4}'\"/>\n      </context>\n\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Imports\">\n        <RegExpr attribute=\"Imports\" context=\"#pop\" String=\"\\s*.*;\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Imports\" defStyleNum=\"dsOthers\"/>\n\n      <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Char\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\" defStyleNum=\"dsChar\"/>\n\n      <itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/pug.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n<!ENTITY name \"[A-Za-z][A-Za-z0-9_-]*\">\n<!ENTITY voidtag \"(area|base|br|col|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)\">\n<!ENTITY entity \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|[A-Za-z][A-Za-z0-9_-]*);\">\n]>\n<!--\n\nPug, known as Jade before, is a HTML template engine.\n\nhttps://pugjs.org/\n\nChangelog\n\nVersion 1 - Guo Yunhe guoyunhebrave@gmail.com - 2017-04-14\n- Basic Pug/Jade syntax support\n- Do NOT support multi-line comment or text block\n\n-->\n<language name=\"Pug\" version=\"5\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.pug;*.jade\" mimetype=\"\" priority=\"10\" author=\"Guo Yunhe (guoyunhebrave@gmail.com)\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"controlflow\">\n      <item>case</item>\n      <item>when</item>\n      <item>default</item>\n      <item>if</item>\n      <item>unless</item>\n      <item>else</item>\n      <item>each</item>\n      <item>while</item>\n    </list>\n    <contexts>\n      <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n        <StringDetect attribute=\"Doctype\" context=\"#stay\" String=\"doctype\" insensitive=\"true\"/>\n        <RegExpr attribute=\"ControlFlow\" context=\"JavaScript\" String=\"\\belse\\s+if\\b\" firstNonSpace=\"true\"/>\n        <keyword attribute=\"ControlFlow\" context=\"JavaScript\" String=\"controlflow\" firstNonSpace=\"true\"/>\n        <DetectIdentifier attribute=\"Normal Text\" context=\"Element\" firstNonSpace=\"true\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"Element\" char=\"#\" firstNonSpace=\"true\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"Element\" char=\".\" firstNonSpace=\"true\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"JavaScript\" char=\"-\" firstNonSpace=\"true\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"|\" firstNonSpace=\"true\"/>\n      </context>\n      <context name=\"FindInterpolation\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Interpolation\" context=\"JavaScript\" char=\"#\" char1=\"{\"/>\n        <DetectChar attribute=\"Interpolation\" context=\"#stay\" char=\"}\"/>\n      </context>\n      <context name=\"FindEntities\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&entity;\"/>\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;&lt;\"/>\n      </context>\n      <context name=\"Element\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Element\" context=\"#stay\" String=\"&name;\"/>\n        <RegExpr attribute=\"ID\" context=\"#stay\" String=\"#&name;\"/>\n        <RegExpr attribute=\"Class\" context=\"#stay\" String=\"\\.&name;\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"Attributes\" char=\"(\"/>\n        <StringDetect attribute=\"Normal Text\" context=\"AttributeObject\" String=\"&amp;attributes(\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"Element\" String=\":\\s+\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"JavaScript\" String=\"=\\s+\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"Text\" char=\" \"/>\n      </context>\n      <context name=\"Attributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Attribute\" context=\"Attribute\" String=\"(&name;|\\(&name;\\))\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\"/>\n      </context>\n      <context name=\"AttributeObject\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\"/>\n        <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n      </context>\n      <context name=\"Attribute\" attribute=\"Attribute\" lineEndContext=\"#pop\">\n        <AnyChar attribute=\"Normal Text\" context=\"#pop\" String=\",)\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Attribute\" context=\"#pop\" String=\"\\s+(&name;|\\(&name;\\))(=|\\s|\\))\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\"/>\n      </context>\n      <context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <AnyChar attribute=\"Normal Text\" context=\"#pop\" String=\",)\" lookAhead=\"true\"/>\n        <RegExpr attribute=\"Attribute\" context=\"#pop\" String=\"\\s+(&name;|\\(&name;\\))(=|\\s|\\))\" lookAhead=\"true\"/>\n        <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n      </context>\n      <context name=\"Text\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindEntities\" includeAttrib=\"true\"/>\n        <IncludeRules context=\"FindInterpolation\" includeAttrib=\"true\"/>\n      </context>\n      <context name=\"JavaScript\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n        <AnyChar attribute=\"Normal Text\" context=\"#pop\" String=\",)}:\" lookAhead=\"true\"/>\n      </context>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"ControlFlow\" defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" spellChecking=\"false\"/>\n      <itemData name=\"Element\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"ID\" defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n      <itemData name=\"Class\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Attribute\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n      <itemData name=\"Entity\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Interpolation\" defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" weakDeliminator=\"-\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"//-\"/>\n      <comment name=\"singleLine\" start=\"//\"/>\n    </comments>\n    <folding indentationsensitive=\"1\"/>\n    <emptyLines>\n      <emptyLine regexpr=\"(?:\\s+|\\s*#.*)\"/>\n    </emptyLines>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/puppet.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY BareWord  \"[a-z][a-zA-Z0-9-_]*\">\n  <!ENTITY CapWord   \"[A-Z][a-zA-Z0-9-_]*\">\n  <!ENTITY namespace \"[a-z][a-z0-9_]*\">\n]>\n\n<!--\n  Puppet syntax highlighting file:\n\n  Copyright (C) 2014  by Michal Humpula (michal.humpula@seznam.cz)\n\n  This library is free software; you can redistribute it and/or\n  modify it under the terms of the GNU Library General Public\n  License as published by the Free Software Foundation; either\n  version 2 of the License, or (at your option) any later version.\n\n  This library is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n  Library General Public License for more details.\n\n  You should have received a copy of the GNU Library General Public\n  License along with this library; if not, write to the\n  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n  Boston, MA  02110-1301, USA.\n-->\n\n<language name=\"Puppet\" section=\"Scripts\" version=\"6\" kateversion=\"3.8\" extensions=\"*.pp\" priority=\"10\" mimetype=\"application/x-puppet\" style=\"puppet\" indenter=\"cstyle\" author=\"Michal Humpula (michal.humpula@seznam.cz)\" license=\"LGPLv2+\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>import</item>\n      <item>false</item>\n      <item>true</item>\n      <item>undef</item>\n    </list>\n\n    <list name=\"operators\">\n      <item>in</item>\n      <item>and</item>\n      <item>or</item>\n    </list>\n\n    <list name=\"collector operators\">\n      <item>and</item>\n      <item>or</item>\n    </list>\n\n    <contexts>\n      <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"common\" />\n      </context>\n\n      <context name=\"common\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindComment\"/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindOperator\"/>\n        <Int attribute=\"Number\" context=\"#stay\" />\n        <IncludeRules context=\"FindUnless\"/>\n        <IncludeRules context=\"FindIf\"/>\n        <IncludeRules context=\"FindCase\"/>\n        <keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n        <IncludeRules context=\"FindVariable\"/>\n\n        <IncludeRules context=\"FindClass\"/>\n        <IncludeRules context=\"FindNode\"/>\n\n        <IncludeRules context=\"FindCollector\"/>\n        <IncludeRules context=\"FindExportedCollector\"/>\n\n        <IncludeRules context=\"FindResource\"/>\n        <IncludeRules context=\"FindResourceReference\"/>\n        <IncludeRules context=\"FindResourceDefaults\"/>\n        <IncludeRules context=\"FindDefine\"/>\n\n        <IncludeRules context=\"FindArray\"/>\n        <IncludeRules context=\"FindHash\"/>\n\n        <IncludeRules context=\"FindFunction\"/>\n        <IncludeRules context=\"FindStatement\"/>\n\n        <IncludeRules context=\"FindBareWord\"/>\n      </context>\n\n      <!-- BEGIN Finders -->\n      <context name=\"FindString\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" char=\"'\" context=\"string single\"/>\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"string double\"/>\n      </context>\n\n      <context name=\"FindComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Region Marker\" String=\"#BEGIN\" beginRegion=\"region marker\" firstNonSpace=\"true\" context=\"region marker\"/>\n        <StringDetect attribute=\"Region Marker\" String=\"#END\" endRegion=\"region marker\" firstNonSpace=\"true\" context=\"region marker\"/>\n        <DetectChar attribute=\"Comment\" char=\"#\" context=\"comment\"/>\n        <Detect2Chars attribute=\"Comment\" char=\"/\" char1=\"*\" beginRegion=\"comment\" context=\"multiline comment\"/>\n      </context>\n\n      <context name=\"FindVariable\" attribute=\"Variable\" lineEndContext=\"#pop\">\n        <RegExpr String=\"\\$(::)?(&namespace;::)*&BareWord;\" lookAhead=\"true\" context=\"variable\"/>\n      </context>\n\n      <context name=\"FindStatement\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Function\" String=\"&BareWord;\" context=\"statement\" firstNonSpace=\"true\"/>\n      </context>\n\n      <context name=\"FindFunction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr String=\"&BareWord;\\s*\\(\" lookAhead=\"true\" context=\"function\"/>\n      </context>\n\n      <context name=\"FindResource\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr String=\"@?@?(::)?(&BareWord;::)*&BareWord;\\s*\\{\" lookAhead=\"true\" context=\"resource\"/>\n      </context>\n\n      <context name=\"FindResourceReference\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr String=\"(::)?(&CapWord;::)*&CapWord;\\s*\\[\" lookAhead=\"true\" context=\"res_ref\"/>\n      </context>\n\n      <context name=\"FindResourceDefaults\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr String=\"(::)?(&CapWord;::)*&CapWord;\\s*\\{\" lookAhead=\"true\" context=\"res_defaults\"/>\n      </context>\n\n      <context name=\"FindOperator\" attribute=\"Operator\" lineEndContext=\"#pop\" >\n        <keyword attribute=\"Operator\" String=\"operators\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"!\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"*\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"/\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"-\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"+\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"+\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"&lt;\" char1=\"&lt;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"&gt;\" char1=\"&gt;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"=\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"!\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"&gt;\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"&lt;\" char1=\"=\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"&gt;\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"&lt;\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\"?\" context=\"selector\"/>\n\n        <Detect2Chars attribute=\"Operator\" char=\"=\" char1=\"~\" context=\"regexp operators\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"!\" char1=\"~\" context=\"regexp operators\"/>\n\n        <Detect2Chars attribute=\"Operator\" char=\"-\" char1=\"&gt;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"~\" char1=\"&gt;\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"FindResourcePath\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr String=\"(&BareWord;)?(::&BareWord;)*::&BareWord;\" lookAhead=\"true\" context=\"resource path\"/>\n      </context>\n\n      <context name=\"FindBareWord\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"String\" String=\"&BareWord;\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"FindArray\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"[\" context=\"array\"/>\n      </context>\n\n      <context name=\"FindHash\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"{\" lookAhead=\"true\" context=\"hash\"/>\n      </context>\n\n      <context name=\"FindClass\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <WordDetect attribute=\"Keyword\" String=\"class\" context=\"class def\"/>\n      </context>\n\n      <context name=\"FindNode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <WordDetect attribute=\"Keyword\" String=\"node\" context=\"node def\"/>\n      </context>\n\n      <context name=\"FindDefine\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <WordDetect attribute=\"Keyword\" String=\"define\" context=\"resource definition\"/>\n      </context>\n\n      <context name=\"FindCollector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr String=\"(::)?(&CapWord;::)*&CapWord;\\s*&lt;\\|\" lookAhead=\"true\" context=\"collector\"/>\n      </context>\n\n      <context name=\"FindExportedCollector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr String=\"(::)?(&CapWord;::)*&CapWord;\\s*&lt;&lt;\\|\" lookAhead=\"true\" context=\"exported collector\"/>\n      </context>\n\n      <context name=\"FindUnless\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <WordDetect attribute=\"Keyword\" String=\"unless\" context=\"unless\"/>\n      </context>\n\n      <context name=\"FindIf\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <WordDetect attribute=\"Keyword\" String=\"if\" context=\"if\"/>\n      </context>\n\n      <context name=\"FindCase\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <WordDetect attribute=\"Keyword\" String=\"case\" context=\"case\"/>\n      </context>\n\n      <context name=\"FindRegExp\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"RegExp\" String=\"/[^/]*[^\\\\/]/\" context=\"#stay\"/>\n      </context>\n      <!-- END Finders -->\n\n      <!-- BEGIN Strings -->\n      <context name=\"string single\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" char=\"'\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"string double\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Escape\" char=\"\\\" context=\"escapes\"/>\n        <Detect2Chars char=\"$\" char1=\"{\" lookAhead=\"true\" context=\"string code block\"/>\n        <RegExpr attribute=\"Variable\" String=\"\\$&BareWord;\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"string code block\" attribute=\"Variable\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Variable\" char=\"$\" char1=\"{\" context=\"#stay\"/>\n        <RegExpr attribute=\"Variable\" String=\"&namespace;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <RegExpr attribute=\"Variable\" String=\"&BareWord;\" context=\"#stay\"/>\n        <DetectChar attribute=\"Variable\" char=\"}\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"escapes\" attribute=\"Escape\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\">\n        <AnyChar attribute=\"Escape\" String=\"$&quot;'\\nrts\" context=\"#pop\"/>\n      </context>\n      <!-- END Strings -->\n\n      <!-- BEGIN RegExp -->\n      <context name=\"regexp operators\" attribute=\"RegExp\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"RegExp\" String=\"/[^/]*[^\\\\/]/\" context=\"#pop\"/>\n      </context>\n      <!-- END RegExp -->\n\n      <!-- BEGIN Comments -->\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context name=\"multiline comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <Detect2Chars attribute=\"Comment\" char=\"*\" char1=\"/\" endRegion=\"comment\" context=\"#pop\"/>\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context name=\"region marker\" attribute=\"Region Marker\" lineEndContext=\"#pop\">\n      </context>\n      <!-- END Comments -->\n\n      <!-- BEGIN Function -->\n      <context name=\"statement\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <LineContinue attribute=\"Normal Text\" char=\",\" context=\"#stay\"/>\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar attribute=\"String\" char=\",\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"function\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Function\" String=\"&BareWord;\" context=\"#stay\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"(\" context=\"function_in\"/>\n        <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"function_in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\",\" context=\"#stay\"/>\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar char=\")\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Function -->\n\n      <!-- BEGIN conditions -->\n      <context name=\"unless\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"condition\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"code\" context=\"code block\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"code\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"if\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"condition\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"code\" context=\"code block\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"code\"  context=\"if continues?\"/>\n      </context>\n\n      <context name=\"if continues?\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <WordDetect attribute=\"Keyword\" String=\"else\" context=\"else\"/>\n        <WordDetect attribute=\"Keyword\" String=\"elsif\" context=\"elsif\"/>\n      </context>\n\n      <context name=\"elsif\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"condition\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"code\" context=\"code block\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"dode\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"else\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"code\" context=\"code block\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"code\" context=\"#pop#pop#pop\"/>\n      </context>\n\n      <context name=\"case\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindVariable\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"case\" context=\"case block\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"case\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"case block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#stay\"/>\n        <DetectChar attribute=\"Operator\" char=\":\" context=\"case value\"/>\n        <Int attribute=\"Number\" context=\"#stay\" />\n        <WordDetect attribute=\"Keyword\" String=\"default\" context=\"#stay\"/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <IncludeRules context=\"FindRegExp\"/>\n        <IncludeRules context=\"FindFunction\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"case value\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"code\" context=\"code block\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"code\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"selector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"selector\" context=\"selector block\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"selector\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"selector block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <Detect2Chars attribute=\"Operator\" char=\"=\" char1=\"&gt;\" context=\"selector value\"/>\n        <Int attribute=\"Number\" context=\"#stay\" />\n        <WordDetect attribute=\"Keyword\" String=\"default\" context=\"#stay\"/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <IncludeRules context=\"FindRegExp\"/>\n        <IncludeRules context=\"FindFunction\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"selector value\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"code block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"common\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END conditions -->\n\n      <context name=\"variable\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Variable\" char=\"$\" context=\"#stay\"/>\n        <RegExpr attribute=\"Variable\" String=\"&namespace;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <RegExpr attribute=\"Variable\" String=\"&BareWord;\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"array\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"list content\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"]\" context=\"#pop\"/>\n      </context>\n\n      <!-- BEGIN Hash -->\n      <context name=\"hash\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"hash\" context=\"hash list\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"hash\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"hash list\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"AttributeOp\" char=\"=\" char1=\"&gt;\" context=\"#stay\"/>\n        <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#stay\"/>\n        <IncludeRules context=\"hash keys\"/>\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Hash -->\n\n      <!-- BEGIN Node -->\n      <context name=\"node def\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- TODO: need a regular expresion here, order is random and seems that Class is not allowed in node(?) -->\n        <DetectSpaces/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindRegExp\"/>\n        <StringDetect attribute=\"Keyword\" String=\"inherits\" context=\"#stay\"/>\n        <StringDetect attribute=\"Keyword\" String=\"default\" context=\"#stay\"/>\n        <RegExpr attribute=\"Node\" String=\"&namespace;\" context=\"#stay\"/>\n        <DetectChar char=\"{\" lookAhead=\"true\" context=\"node in open\"/>\n      </context>\n\n      <context name=\"node in open\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"node\" context=\"node in\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"node\" context=\"#pop#pop\"/>\n      </context>\n\n      <context name=\"node in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"common\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Node -->\n\n      <!-- BEGIN Class -->\n      <context name=\"class def\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- TODO: be more strict here -->\n        <DetectSpaces/>\n        <StringDetect attribute=\"Keyword\" String=\"inherits\" context=\"#stay\"/>\n        <RegExpr attribute=\"Class\" String=\"&namespace;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <DetectChar char=\"(\" context=\"class params\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"class\" context=\"class in\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"class\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"class params\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- TODO: be more strict here -->\n        <DetectSpaces/>\n        <DetectChar char=\"=\" context=\"#stay\"/>\n        <DetectChar char=\",\" context=\"#stay\"/>\n        <IncludeRules context=\"FindVariable\"/>\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar char=\")\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"class in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"common\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Class -->\n\n      <!-- BEGIN Resource -->\n      <context name=\"resource\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Resource\" char=\"@\" context=\"#stay\"/>\n        <RegExpr attribute=\"Resource\" String=\"&BareWord;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"resource\" context=\"resource_in\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"resource\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"resource_in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindVariable\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <IncludeRules context=\"FindArray\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n        <DetectChar attribute=\"Operator\" char=\":\" context=\"resource_attrs\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"resource_attrs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Attribute Name\" String=\"&BareWord;\" context=\"resource_attr\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"resource_attr\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindComment\"/>\n        <Detect2Chars attribute=\"AttributeOp\" char=\"=\" char1=\"&gt;\" context=\"resource_attr_val\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"resource_attr_val\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop#pop\"/>\n        <DetectChar attribute=\"Normal Text\" char=\";\" context=\"#pop#pop#pop\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Resource -->\n\n      <!-- BEGIN Resource Reference -->\n      <context name=\"res_ref\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"ResourceReference\" String=\"&CapWord;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"[\" context=\"res_ref_titles\"/>\n      </context>\n\n      <context name=\"res_ref_titles\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"list content\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"]\" context=\"res_ref_params_opt\"/>\n      </context>\n\n      <context name=\"res_ref_params_opt\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"res ref\" context=\"res_ref_params\"/>\n      </context>\n\n      <context name=\"res_ref_params\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Attribute Name\" String=\"&BareWord;\" context=\"res_ref_param\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"res ref\" context=\"#pop#pop#pop#pop\"/>\n      </context>\n\n      <context name=\"res_ref_param\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindComment\"/>\n        <Detect2Chars attribute=\"AttributeOp\" char=\"=\" char1=\"&gt;\" context=\"res_ref_param_val\"/>\n        <Detect2Chars attribute=\"AttributeOp\" char=\"+\" char1=\"&gt;\" context=\"res_ref_param_val\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"res_ref_param_val\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop#pop\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Resource Reference -->\n\n      <!-- BEGIN Resource Defaults -->\n      <context name=\"res_defaults\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"ResourceReference\" String=\"&CapWord;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"res defs\" context=\"res_defaults_params\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"res defs\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"res_defaults_params\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindComment\"/>\n        <RegExpr attribute=\"Attribute Name\" String=\"&BareWord;\" context=\"res_defaults_param\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"res_defaults_param\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindComment\"/>\n        <Detect2Chars attribute=\"AttributeOp\" char=\"=\" char1=\"&gt;\" context=\"res_defaults_param_val\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"res_defaults_param_val\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar attribute=\"Normal Text\" char=\",\" context=\"#pop#pop\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Resource Defaults -->\n\n      <!-- BEGIN Collector -->\n      <context name=\"collector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Collector\" String=\"&CapWord;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\"&lt;\" char1=\"|\" context=\"collector in\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\"|\" char1=\"&gt;\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"collector in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"collector content\"/>\n        <Detect2Chars char=\"|\" char1=\"&gt;\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Collector -->\n\n      <!-- BEGIN Exported Collector -->\n      <context name=\"exported collector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Collector\" String=\"&CapWord;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <StringDetect attribute=\"Normal Text\" String=\"&lt;&lt;|\" context=\"exported collector in\"/>\n        <StringDetect attribute=\"Normal Text\" String=\"|&gt;&gt;\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"exported collector in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"collector content\"/>\n        <StringDetect String=\"|&gt;&gt;\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END Exported Collector -->\n\n      <context name=\"resource path\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\">\n        <DetectSpaces/>\n        <RegExpr attribute=\"Resource\" String=\"&BareWord;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n      </context>\n\n      <!-- BEGIN define -->\n      <context name=\"resource definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- TODO: be more strict here -->\n        <DetectSpaces/>\n        <StringDetect attribute=\"Keyword\" String=\"inherits\" context=\"#stay\"/>\n        <RegExpr attribute=\"Class\" String=\"&namespace;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Normal Text\" char=\":\" char1=\":\" context=\"#stay\"/>\n        <DetectChar char=\"(\" context=\"define params\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"{\" beginRegion=\"define\" context=\"define in\"/>\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"define\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"define params\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <DetectChar char=\"=\" context=\"#stay\"/>\n        <DetectChar char=\",\" context=\"#stay\"/>\n        <IncludeRules context=\"FindVariable\"/>\n        <IncludeRules context=\"parameter values\"/>\n        <DetectChar char=\")\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"define in\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"common\"/>\n        <DetectChar char=\"}\" lookAhead=\"true\" context=\"#pop\"/>\n      </context>\n      <!-- END define -->\n\n      <!-- BEGIN Contents -->\n      <context name=\"list content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindVariable\"/>\n        <IncludeRules context=\"FindOperator\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <IncludeRules context=\"FindResourceReference\"/>\n        <IncludeRules context=\"FindFunction\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n        <DetectChar char=\",\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"parameter values\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <IncludeRules context=\"FindOperator\"/>\n        <keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <IncludeRules context=\"FindVariable\"/>\n        <IncludeRules context=\"FindResourceReference\"/>\n        <IncludeRules context=\"FindArray\"/>\n        <IncludeRules context=\"FindFunction\"/>\n        <IncludeRules context=\"FindResourcePath\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n      </context>\n\n      <context name=\"hash keys\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n      </context>\n\n      <context name=\"collector content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <keyword attribute=\"Operator\" String=\"collector operators\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"=\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"!\" char1=\"=\" context=\"#stay\"/>\n        <IncludeRules context=\"FindString\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <IncludeRules context=\"FindComment\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n      </context>\n\n      <context name=\"condition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <IncludeRules context=\"FindComment\"/>\n        <IncludeRules context=\"FindString\"/>\n        <IncludeRules context=\"FindOperator\"/>\n        <Int attribute=\"Number\" context=\"#stay\" />\n        <keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n        <IncludeRules context=\"FindVariable\"/>\n        <IncludeRules context=\"FindResourceReference\"/>\n        <IncludeRules context=\"FindArray\"/>\n        <IncludeRules context=\"FindFunction\"/>\n        <IncludeRules context=\"FindBareWord\"/>\n      </context>\n\n      <!-- END Contents -->\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Escape\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"RegExp\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Variable\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n\n      <itemData name=\"Attribute Name\" defStyleNum=\"dsKeyword\" italic=\"true\" bold=\"false\" spellChecking=\"false\"/>\n      <itemData name=\"AttributeOp\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n\n      <itemData name=\"Node\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Class\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Resource\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"ResourceReference\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Collector\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/purebasic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"PureBasic\" version=\"7\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.pb;*.pbi\" mimetype=\"text/x-purebasic\" author=\"Alexander Clay (Tuireann@EpicBasic.org);Sven Langenkamp (ace@kylixforum.de)\" license=\"LGPL\" priority=\"1\" >\n  <highlighting>\n    <list name=\"keywords\">\n      <item>Break</item>\n      <item>Continue</item>\n      <item>For</item>\n      <item>ForEach</item>\n      <item>To</item>\n      <item>Step</item>\n      <item>Next</item>\n      <item>Gosub</item>\n      <item>Return</item>\n      <item>FakeReturn</item>\n      <item>If</item>\n      <item>Else</item>\n      <item>ElseIf</item>\n      <item>EndIf</item>\n      <item>Repeat</item>\n      <item>Until</item>\n      <item>Select</item>\n      <item>Case</item>\n      <item>Default</item>\n      <item>EndSelect</item>\n      <item>While</item>\n      <item>Wend</item>\n      <item>End</item>\n      <item>Structure</item>\n      <item>EndStructure</item>\n      <item>Interface</item>\n      <item>EndInterface</item>\n      <item>Extends</item>\n      <item>DefType</item>\n      <item>Dim</item>\n      <item>Enumeration</item>\n      <item>EndEnumeration</item>\n      <item>Global</item>\n      <item>Procedure</item>\n      <item>EndProcedure</item>\n      <item>ProcedureReturn</item>\n      <item>Shared</item>\n      <item>Protected</item>\n      <item>Static</item>\n      <item>Declare</item>\n      <item>DataSection</item>\n      <item>EndDataSection</item>\n      <item>Data</item>\n      <item>Restore</item>\n      <item>Read</item>\n      <item>IncludeFile</item>\n      <item>XIncludeFile</item>\n      <item>IncludeBinary</item>\n      <item>IncludePath</item>\n      <item>ProcedureDLL</item>\n      <item>NewList</item>\n      <item>Goto</item>\n      <item>With</item>\n      <item>DeclareModule</item>\n      <item>EndDeclareModule</item>\n      <item>Module</item>\n      <item>EndModule</item>\n      <item>UseModule</item>\n      <item>UnuseModule</item>\n    </list>\n    <list name=\"compiler\">\n      <item>CompilerIf</item>\n      <item>CompilerElse</item>\n      <item>CompilerEndIf</item>\n      <item>CompilerSelect</item>\n      <item>CompilerCase</item>\n      <item>CompilerDefault</item>\n      <item>CompilerEndSelect</item>\n    </list>\n    <list name=\"debug\">\n      <item>CallDebugger</item>\n      <item>Debug</item>\n    </list>\n    <list name=\"functions\">\n      <item>ACos</item>\n      <item>ACosH</item>\n      <item>AESDecoder</item>\n      <item>AESEncoder</item>\n      <item>ASin</item>\n      <item>ASinH</item>\n      <item>ATan</item>\n      <item>ATan2</item>\n      <item>ATanH</item>\n      <item>AbortFTPFile</item>\n      <item>Abs</item>\n      <item>Add3DArchive</item>\n      <item>AddBillboard</item>\n      <item>AddCipherBuffer</item>\n      <item>AddDate</item>\n      <item>AddElement</item>\n      <item>AddEntityAnimationTime</item>\n      <item>AddGadgetColumn</item>\n      <item>AddGadgetItem</item>\n      <item>AddGadgetItem3D</item>\n      <item>AddJSONElement</item>\n      <item>AddJSONMember</item>\n      <item>AddKeyboardShortcut</item>\n      <item>AddMailAttachment</item>\n      <item>AddMailAttachmentData</item>\n      <item>AddMailRecipient</item>\n      <item>AddMapElement</item>\n      <item>AddMaterialLayer</item>\n      <item>AddNodeAnimationTime</item>\n      <item>AddPackFile</item>\n      <item>AddPackMemory</item>\n      <item>AddSplinePoint</item>\n      <item>AddStaticGeometryEntity</item>\n      <item>AddStatusBarField</item>\n      <item>AddSubMesh</item>\n      <item>AddSysTrayIcon</item>\n      <item>AddTerrainTexture</item>\n      <item>AddVertexPoseReference</item>\n      <item>AddWindowTimer</item>\n      <item>AffectedDatabaseRows</item>\n      <item>AllocateMemory</item>\n      <item>AllocateStructure</item>\n      <item>Alpha</item>\n      <item>AlphaBlend</item>\n      <item>AmbientColor</item>\n      <item>AntialiasingMode</item>\n      <item>ApplyEntityForce</item>\n      <item>ApplyEntityImpulse</item>\n      <item>ArraySize</item>\n      <item>Asc</item>\n      <item>AttachEntityObject</item>\n      <item>AttachNodeObject</item>\n      <item>AttachRibbonEffect</item>\n      <item>AudioCDLength</item>\n      <item>AudioCDName</item>\n      <item>AudioCDStatus</item>\n      <item>AudioCDTrackLength</item>\n      <item>AudioCDTrackSeconds</item>\n      <item>AudioCDTracks</item>\n      <item>AvailableProgramOutput</item>\n      <item>AvailableScreenMemory</item>\n      <item>AvailableSerialPortInput</item>\n      <item>AvailableSerialPortOutput</item>\n      <item>BackColor</item>\n      <item>Base64Decoder</item>\n      <item>Base64Encoder</item>\n      <item>BillboardGroupCommonDirection</item>\n      <item>BillboardGroupCommonUpVector</item>\n      <item>BillboardGroupID</item>\n      <item>BillboardGroupMaterial</item>\n      <item>BillboardGroupX</item>\n      <item>BillboardGroupY</item>\n      <item>BillboardGroupZ</item>\n      <item>BillboardHeight</item>\n      <item>BillboardLocate</item>\n      <item>BillboardWidth</item>\n      <item>BillboardX</item>\n      <item>BillboardY</item>\n      <item>BillboardZ</item>\n      <item>Bin</item>\n      <item>BindEvent</item>\n      <item>BindGadgetEvent</item>\n      <item>BindMenuEvent</item>\n      <item>Blue</item>\n      <item>Box</item>\n      <item>BoxedGradient</item>\n      <item>BuildMeshShadowVolume</item>\n      <item>BuildMeshTangents</item>\n      <item>BuildStaticGeometry</item>\n      <item>BuildTerrain</item>\n      <item>ButtonGadget</item>\n      <item>ButtonGadget3D</item>\n      <item>ButtonImageGadget</item>\n      <item>CPUName</item>\n      <item>CRC32FileFingerprint</item>\n      <item>CRC32Fingerprint</item>\n      <item>CalendarGadget</item>\n      <item>CallCFunction</item>\n      <item>CallCFunctionFast</item>\n      <item>CallFunction</item>\n      <item>CallFunctionFast</item>\n      <item>CameraBackColor</item>\n      <item>CameraDirection</item>\n      <item>CameraDirectionX</item>\n      <item>CameraDirectionY</item>\n      <item>CameraDirectionZ</item>\n      <item>CameraFOV</item>\n      <item>CameraFixedYawAxis</item>\n      <item>CameraFollow</item>\n      <item>CameraID</item>\n      <item>CameraLookAt</item>\n      <item>CameraPitch</item>\n      <item>CameraProjectionMode</item>\n      <item>CameraProjectionX</item>\n      <item>CameraProjectionY</item>\n      <item>CameraRange</item>\n      <item>CameraRenderMode</item>\n      <item>CameraRoll</item>\n      <item>CameraViewHeight</item>\n      <item>CameraViewWidth</item>\n      <item>CameraViewX</item>\n      <item>CameraViewY</item>\n      <item>CameraX</item>\n      <item>CameraY</item>\n      <item>CameraYaw</item>\n      <item>CameraZ</item>\n      <item>CanvasGadget</item>\n      <item>CanvasOutput</item>\n      <item>CatchImage</item>\n      <item>CatchJSON</item>\n      <item>CatchMusic</item>\n      <item>CatchSound</item>\n      <item>CatchSprite</item>\n      <item>CatchXML</item>\n      <item>ChangeCurrentElement</item>\n      <item>ChangeGamma</item>\n      <item>ChangeListIconGadgetDisplay</item>\n      <item>ChangeSysTrayIcon</item>\n      <item>CheckBoxGadget</item>\n      <item>CheckBoxGadget3D</item>\n      <item>CheckDatabaseNull</item>\n      <item>CheckFTPConnection</item>\n      <item>CheckFilename</item>\n      <item>CheckObjectVisibility</item>\n      <item>ChildXMLNode</item>\n      <item>Chr</item>\n      <item>Circle</item>\n      <item>CircularGradient</item>\n      <item>ClearBillboards</item>\n      <item>ClearClipboard</item>\n      <item>ClearConsole</item>\n      <item>ClearDebugOutput</item>\n      <item>ClearGadgetItemList</item>\n      <item>ClearGadgetItems</item>\n      <item>ClearGadgetItems3D</item>\n      <item>ClearJSONElements</item>\n      <item>ClearJSONMembers</item>\n      <item>ClearList</item>\n      <item>ClearMap</item>\n      <item>ClearScreen</item>\n      <item>ClearSpline</item>\n      <item>ClipOutput</item>\n      <item>ClipSprite</item>\n      <item>CloseConsole</item>\n      <item>CloseCryptRandom</item>\n      <item>CloseDatabase</item>\n      <item>CloseFTP</item>\n      <item>CloseFile</item>\n      <item>CloseGadgetList</item>\n      <item>CloseGadgetList3D</item>\n      <item>CloseHelp</item>\n      <item>CloseLibrary</item>\n      <item>CloseNetworkConnection</item>\n      <item>CloseNetworkServer</item>\n      <item>ClosePack</item>\n      <item>ClosePreferences</item>\n      <item>CloseProgram</item>\n      <item>CloseScreen</item>\n      <item>CloseSerialPort</item>\n      <item>CloseSubMenu</item>\n      <item>CloseWindow</item>\n      <item>CloseWindow3D</item>\n      <item>CocoaMessage</item>\n      <item>ColorRequester</item>\n      <item>ComboBoxGadget</item>\n      <item>ComboBoxGadget3D</item>\n      <item>CompareMemory</item>\n      <item>CompareMemoryString</item>\n      <item>ComposeJSON</item>\n      <item>ComposeXML</item>\n      <item>CompositorEffectParameter</item>\n      <item>CompressMemory</item>\n      <item>ComputeSpline</item>\n      <item>ComputerName</item>\n      <item>ConeTwistJoint</item>\n      <item>ConicalGradient</item>\n      <item>ConnectionID</item>\n      <item>ConsoleColor</item>\n      <item>ConsoleCursor</item>\n      <item>ConsoleError</item>\n      <item>ConsoleLocate</item>\n      <item>ConsoleTitle</item>\n      <item>ContainerGadget</item>\n      <item>ContainerGadget3D</item>\n      <item>ConvertLocalToWorldPosition</item>\n      <item>ConvertWorldToLocalPosition</item>\n      <item>CopyArray</item>\n      <item>CopyDirectory</item>\n      <item>CopyEntity</item>\n      <item>CopyFile</item>\n      <item>CopyImage</item>\n      <item>CopyLight</item>\n      <item>CopyList</item>\n      <item>CopyMap</item>\n      <item>CopyMaterial</item>\n      <item>CopyMemory</item>\n      <item>CopyMemoryString</item>\n      <item>CopyMesh</item>\n      <item>CopySprite</item>\n      <item>CopyTexture</item>\n      <item>CopyXMLNode</item>\n      <item>Cos</item>\n      <item>CosH</item>\n      <item>CountBillboards</item>\n      <item>CountCPUs</item>\n      <item>CountGadgetItems</item>\n      <item>CountGadgetItems3D</item>\n      <item>CountLibraryFunctions</item>\n      <item>CountList</item>\n      <item>CountMaterialLayers</item>\n      <item>CountProgramParameters</item>\n      <item>CountRegularExpressionGroups</item>\n      <item>CountSplinePoints</item>\n      <item>CountString</item>\n      <item>CreateBillboardGroup</item>\n      <item>CreateCamera</item>\n      <item>CreateCompositorEffect</item>\n      <item>CreateCube</item>\n      <item>CreateCubeMapTexture</item>\n      <item>CreateCylinder</item>\n      <item>CreateDialog</item>\n      <item>CreateDirectory</item>\n      <item>CreateEntity</item>\n      <item>CreateFTPDirectory</item>\n      <item>CreateFile</item>\n      <item>CreateGadgetList</item>\n      <item>CreateImage</item>\n      <item>CreateImageMenu</item>\n      <item>CreateJSON</item>\n      <item>CreateLensFlareEffect</item>\n      <item>CreateLight</item>\n      <item>CreateLine3D</item>\n      <item>CreateMail</item>\n      <item>CreateMaterial</item>\n      <item>CreateMenu</item>\n      <item>CreateMesh</item>\n      <item>CreateMutex</item>\n      <item>CreateNetworkServer</item>\n      <item>CreateNode</item>\n      <item>CreateNodeAnimation</item>\n      <item>CreateNodeAnimationKeyFrame</item>\n      <item>CreatePack</item>\n      <item>CreateParticleEmitter</item>\n      <item>CreatePlane</item>\n      <item>CreatePopupImageMenu</item>\n      <item>CreatePopupMenu</item>\n      <item>CreatePreferences</item>\n      <item>CreateRegularExpression</item>\n      <item>CreateRenderTexture</item>\n      <item>CreateRibbonEffect</item>\n      <item>CreateSemaphore</item>\n      <item>CreateSphere</item>\n      <item>CreateSpline</item>\n      <item>CreateSprite</item>\n      <item>CreateStaticGeometry</item>\n      <item>CreateStatusBar</item>\n      <item>CreateTerrain</item>\n      <item>CreateText3D</item>\n      <item>CreateTexture</item>\n      <item>CreateThread</item>\n      <item>CreateToolBar</item>\n      <item>CreateVertexAnimation</item>\n      <item>CreateVertexPoseKeyFrame</item>\n      <item>CreateVertexTrack</item>\n      <item>CreateWater</item>\n      <item>CreateXML</item>\n      <item>CreateXMLNode</item>\n      <item>CryptRandom</item>\n      <item>CryptRandomData</item>\n      <item>CustomFilterCallback</item>\n      <item>CustomGradient</item>\n      <item>DESFingerprint</item>\n      <item>DatabaseColumnIndex</item>\n      <item>DatabaseColumnName</item>\n      <item>DatabaseColumnSize</item>\n      <item>DatabaseColumnType</item>\n      <item>DatabaseColumns</item>\n      <item>DatabaseDriverDescription</item>\n      <item>DatabaseDriverName</item>\n      <item>DatabaseError</item>\n      <item>DatabaseID</item>\n      <item>DatabaseQuery</item>\n      <item>DatabaseUpdate</item>\n      <item>Date</item>\n      <item>DateGadget</item>\n      <item>Day</item>\n      <item>DayOfWeek</item>\n      <item>DayOfYear</item>\n      <item>DefaultPrinter</item>\n      <item>DefineTerrainTile</item>\n      <item>Degree</item>\n      <item>Delay</item>\n      <item>DeleteDirectory</item>\n      <item>DeleteElement</item>\n      <item>DeleteFTPDirectory</item>\n      <item>DeleteFTPFile</item>\n      <item>DeleteFile</item>\n      <item>DeleteMapElement</item>\n      <item>DeleteXMLNode</item>\n      <item>DesktopDepth</item>\n      <item>DesktopFrequency</item>\n      <item>DesktopHeight</item>\n      <item>DesktopMouseX</item>\n      <item>DesktopMouseY</item>\n      <item>DesktopName</item>\n      <item>DesktopWidth</item>\n      <item>DesktopX</item>\n      <item>DesktopY</item>\n      <item>DetachEntityObject</item>\n      <item>DetachNodeObject</item>\n      <item>DetachRibbonEffect</item>\n      <item>DialogError</item>\n      <item>DialogGadget</item>\n      <item>DialogID</item>\n      <item>DialogWindow</item>\n      <item>DirectoryEntryAttributes</item>\n      <item>DirectoryEntryDate</item>\n      <item>DirectoryEntryName</item>\n      <item>DirectoryEntrySize</item>\n      <item>DirectoryEntryType</item>\n      <item>DisableEntityBody</item>\n      <item>DisableGadget</item>\n      <item>DisableGadget3D</item>\n      <item>DisableLightShadows</item>\n      <item>DisableMaterialLighting</item>\n      <item>DisableMenuItem</item>\n      <item>DisableParticleEmitter</item>\n      <item>DisableToolBarButton</item>\n      <item>DisableWindow</item>\n      <item>DisableWindow3D</item>\n      <item>DisplayPopupMenu</item>\n      <item>DisplaySprite</item>\n      <item>DisplayTransparentSprite</item>\n      <item>DoubleClickTime</item>\n      <item>DragFiles</item>\n      <item>DragImage</item>\n      <item>DragOSFormats</item>\n      <item>DragPrivate</item>\n      <item>DragText</item>\n      <item>DrawAlphaImage</item>\n      <item>DrawImage</item>\n      <item>DrawRotatedText</item>\n      <item>DrawText</item>\n      <item>DrawingBuffer</item>\n      <item>DrawingBufferPitch</item>\n      <item>DrawingBufferPixelFormat</item>\n      <item>DrawingFont</item>\n      <item>DrawingMode</item>\n      <item>EditorGadget</item>\n      <item>EditorGadget3D</item>\n      <item>EjectAudioCD</item>\n      <item>ElapsedMilliseconds</item>\n      <item>Ellipse</item>\n      <item>EllipticalGradient</item>\n      <item>EnableGadgetDrop</item>\n      <item>EnableGraphicalConsole</item>\n      <item>EnableHingeJointAngularMotor</item>\n      <item>EnableManualEntityBoneControl</item>\n      <item>EnableWindowDrop</item>\n      <item>EnableWorldCollisions</item>\n      <item>EnableWorldPhysics</item>\n      <item>EncodeImage</item>\n      <item>Engine3DStatus</item>\n      <item>EntityAngularFactor</item>\n      <item>EntityAnimationBlendMode</item>\n      <item>EntityAnimationStatus</item>\n      <item>EntityBonePitch</item>\n      <item>EntityBoneRoll</item>\n      <item>EntityBoneX</item>\n      <item>EntityBoneY</item>\n      <item>EntityBoneYaw</item>\n      <item>EntityBoneZ</item>\n      <item>EntityBoundingBox</item>\n      <item>EntityCollide</item>\n      <item>EntityCubeMapTexture</item>\n      <item>EntityCustomParameter</item>\n      <item>EntityFixedYawAxis</item>\n      <item>EntityID</item>\n      <item>EntityLinearFactor</item>\n      <item>EntityLookAt</item>\n      <item>EntityParentNode</item>\n      <item>EntityPhysicBody</item>\n      <item>EntityPitch</item>\n      <item>EntityRenderMode</item>\n      <item>EntityRoll</item>\n      <item>EntityVelocity</item>\n      <item>EntityX</item>\n      <item>EntityY</item>\n      <item>EntityYaw</item>\n      <item>EntityZ</item>\n      <item>EnvironmentVariableName</item>\n      <item>EnvironmentVariableValue</item>\n      <item>Eof</item>\n      <item>ErrorAddress</item>\n      <item>ErrorCode</item>\n      <item>ErrorFile</item>\n      <item>ErrorLine</item>\n      <item>ErrorMessage</item>\n      <item>ErrorRegister</item>\n      <item>ErrorTargetAddress</item>\n      <item>EventClient</item>\n      <item>EventData</item>\n      <item>EventDropAction</item>\n      <item>EventDropBuffer</item>\n      <item>EventDropFiles</item>\n      <item>EventDropImage</item>\n      <item>EventDropPrivate</item>\n      <item>EventDropSize</item>\n      <item>EventDropText</item>\n      <item>EventDropType</item>\n      <item>EventDropX</item>\n      <item>EventDropY</item>\n      <item>EventGadget</item>\n      <item>EventGadget3D</item>\n      <item>EventMenu</item>\n      <item>EventServer</item>\n      <item>EventTimer</item>\n      <item>EventType</item>\n      <item>EventType3D</item>\n      <item>EventWindow</item>\n      <item>EventWindow3D</item>\n      <item>EventlParam</item>\n      <item>EventwParam</item>\n      <item>ExamineAssembly</item>\n      <item>ExamineDatabaseDrivers</item>\n      <item>ExamineDesktops</item>\n      <item>ExamineDirectory</item>\n      <item>ExamineEnvironmentVariables</item>\n      <item>ExamineFTPDirectory</item>\n      <item>ExamineIPAddresses</item>\n      <item>ExamineJSONMembers</item>\n      <item>ExamineJoystick</item>\n      <item>ExamineKeyboard</item>\n      <item>ExamineLibraryFunctions</item>\n      <item>ExamineMD5Fingerprint</item>\n      <item>ExamineMouse</item>\n      <item>ExaminePack</item>\n      <item>ExaminePreferenceGroups</item>\n      <item>ExaminePreferenceKeys</item>\n      <item>ExamineRegularExpression</item>\n      <item>ExamineSHA1Fingerprint</item>\n      <item>ExamineScreenModes</item>\n      <item>ExamineWorldCollisions</item>\n      <item>ExamineXMLAttributes</item>\n      <item>Exp</item>\n      <item>ExplorerComboGadget</item>\n      <item>ExplorerListGadget</item>\n      <item>ExplorerTreeGadget</item>\n      <item>ExportJSON</item>\n      <item>ExportJSONSize</item>\n      <item>ExportXML</item>\n      <item>ExportXMLSize</item>\n      <item>ExtractJSONArray</item>\n      <item>ExtractJSONList</item>\n      <item>ExtractJSONMap</item>\n      <item>ExtractJSONStructure</item>\n      <item>ExtractRegularExpression</item>\n      <item>ExtractXMLArray</item>\n      <item>ExtractXMLList</item>\n      <item>ExtractXMLMap</item>\n      <item>ExtractXMLStructure</item>\n      <item>FTPDirectoryEntryAttributes</item>\n      <item>FTPDirectoryEntryDate</item>\n      <item>FTPDirectoryEntryName</item>\n      <item>FTPDirectoryEntryRaw</item>\n      <item>FTPDirectoryEntrySize</item>\n      <item>FTPDirectoryEntryType</item>\n      <item>FTPProgress</item>\n      <item>FetchEntityMaterial</item>\n      <item>FetchOrientation</item>\n      <item>FileBuffersSize</item>\n      <item>FileID</item>\n      <item>FileSeek</item>\n      <item>FileSize</item>\n      <item>FillArea</item>\n      <item>FillMemory</item>\n      <item>FindMapElement</item>\n      <item>FindString</item>\n      <item>FinishCipher</item>\n      <item>FinishDatabaseQuery</item>\n      <item>FinishDirectory</item>\n      <item>FinishFTPDirectory</item>\n      <item>FinishFingerprint</item>\n      <item>FinishMesh</item>\n      <item>FirstDatabaseRow</item>\n      <item>FirstElement</item>\n      <item>FirstWorldCollisionEntity</item>\n      <item>FlipBuffers</item>\n      <item>FlushFileBuffers</item>\n      <item>Fog</item>\n      <item>FontID</item>\n      <item>FontRequester</item>\n      <item>FormatDate</item>\n      <item>FormatXML</item>\n      <item>FrameGadget</item>\n      <item>FrameGadget3D</item>\n      <item>FreeArray</item>\n      <item>FreeBillboardGroup</item>\n      <item>FreeCamera</item>\n      <item>FreeDialog</item>\n      <item>FreeEffect</item>\n      <item>FreeEntity</item>\n      <item>FreeEntityJoints</item>\n      <item>FreeFont</item>\n      <item>FreeGadget</item>\n      <item>FreeGadget3D</item>\n      <item>FreeIP</item>\n      <item>FreeImage</item>\n      <item>FreeJSON</item>\n      <item>FreeJoint</item>\n      <item>FreeLight</item>\n      <item>FreeList</item>\n      <item>FreeMail</item>\n      <item>FreeMap</item>\n      <item>FreeMaterial</item>\n      <item>FreeMemory</item>\n      <item>FreeMenu</item>\n      <item>FreeMesh</item>\n      <item>FreeMovie</item>\n      <item>FreeMusic</item>\n      <item>FreeMutex</item>\n      <item>FreeNode</item>\n      <item>FreeNodeAnimation</item>\n      <item>FreeParticleEmitter</item>\n      <item>FreeRegularExpression</item>\n      <item>FreeSemaphore</item>\n      <item>FreeSound</item>\n      <item>FreeSound3D</item>\n      <item>FreeSpline</item>\n      <item>FreeSprite</item>\n      <item>FreeStaticGeometry</item>\n      <item>FreeStatusBar</item>\n      <item>FreeStructure</item>\n      <item>FreeTerrain</item>\n      <item>FreeText3D</item>\n      <item>FreeTexture</item>\n      <item>FreeToolBar</item>\n      <item>FreeWater</item>\n      <item>FreeXML</item>\n      <item>FrontColor</item>\n      <item>GadgetHeight</item>\n      <item>GadgetHeight3D</item>\n      <item>GadgetID</item>\n      <item>GadgetID3D</item>\n      <item>GadgetItemID</item>\n      <item>GadgetToolTip</item>\n      <item>GadgetToolTip3D</item>\n      <item>GadgetType</item>\n      <item>GadgetType3D</item>\n      <item>GadgetWidth</item>\n      <item>GadgetWidth3D</item>\n      <item>GadgetX</item>\n      <item>GadgetX3D</item>\n      <item>GadgetY</item>\n      <item>GadgetY3D</item>\n      <item>GetActiveGadget</item>\n      <item>GetActiveGadget3D</item>\n      <item>GetActiveWindow</item>\n      <item>GetActiveWindow3D</item>\n      <item>GetClientIP</item>\n      <item>GetClientPort</item>\n      <item>GetClipboardImage</item>\n      <item>GetClipboardText</item>\n      <item>GetCurrentDirectory</item>\n      <item>GetDatabaseBlob</item>\n      <item>GetDatabaseDouble</item>\n      <item>GetDatabaseFloat</item>\n      <item>GetDatabaseLong</item>\n      <item>GetDatabaseQuad</item>\n      <item>GetDatabaseString</item>\n      <item>GetEntityAnimationLength</item>\n      <item>GetEntityAnimationTime</item>\n      <item>GetEntityAnimationWeight</item>\n      <item>GetEntityAttribute</item>\n      <item>GetEntityCollisionGroup</item>\n      <item>GetEntityCollisionMask</item>\n      <item>GetEnvironmentVariable</item>\n      <item>GetExtensionPart</item>\n      <item>GetFTPDirectory</item>\n      <item>GetFileAttributes</item>\n      <item>GetFileDate</item>\n      <item>GetFilePart</item>\n      <item>GetFunction</item>\n      <item>GetFunctionEntry</item>\n      <item>GetGadgetAttribute</item>\n      <item>GetGadgetAttribute3D</item>\n      <item>GetGadgetColor</item>\n      <item>GetGadgetData</item>\n      <item>GetGadgetData3D</item>\n      <item>GetGadgetFont</item>\n      <item>GetGadgetItemAttribute</item>\n      <item>GetGadgetItemColor</item>\n      <item>GetGadgetItemData</item>\n      <item>GetGadgetItemData3D</item>\n      <item>GetGadgetItemState</item>\n      <item>GetGadgetItemState3D</item>\n      <item>GetGadgetItemText</item>\n      <item>GetGadgetItemText3D</item>\n      <item>GetGadgetState</item>\n      <item>GetGadgetState3D</item>\n      <item>GetGadgetText</item>\n      <item>GetGadgetText3D</item>\n      <item>GetHTTPHeader</item>\n      <item>GetHomeDirectory</item>\n      <item>GetJSONBoolean</item>\n      <item>GetJSONDouble</item>\n      <item>GetJSONElement</item>\n      <item>GetJSONFloat</item>\n      <item>GetJSONInteger</item>\n      <item>GetJSONMember</item>\n      <item>GetJSONQuad</item>\n      <item>GetJSONString</item>\n      <item>GetJointAttribute</item>\n      <item>GetLightColor</item>\n      <item>GetMailAttribute</item>\n      <item>GetMailBody</item>\n      <item>GetMaterialAttribute</item>\n      <item>GetMaterialColor</item>\n      <item>GetMenuItemState</item>\n      <item>GetMenuItemText</item>\n      <item>GetMenuTitleText</item>\n      <item>GetMeshData</item>\n      <item>GetMusicPosition</item>\n      <item>GetMusicRow</item>\n      <item>GetNodeAnimationKeyFrameTime</item>\n      <item>GetNodeAnimationLength</item>\n      <item>GetNodeAnimationTime</item>\n      <item>GetNodeAnimationWeight</item>\n      <item>GetOriginX</item>\n      <item>GetOriginY</item>\n      <item>GetPathPart</item>\n      <item>GetRuntimeDouble</item>\n      <item>GetRuntimeInteger</item>\n      <item>GetRuntimeString</item>\n      <item>GetScriptMaterial</item>\n      <item>GetScriptParticleEmitter</item>\n      <item>GetScriptTexture</item>\n      <item>GetSerialPortStatus</item>\n      <item>GetSoundFrequency</item>\n      <item>GetSoundPosition</item>\n      <item>GetTemporaryDirectory</item>\n      <item>GetTerrainTileHeightAtPoint</item>\n      <item>GetTerrainTileLayerBlend</item>\n      <item>GetToolBarButtonState</item>\n      <item>GetURLPart</item>\n      <item>GetW</item>\n      <item>GetWindowColor</item>\n      <item>GetWindowData</item>\n      <item>GetWindowState</item>\n      <item>GetWindowTitle</item>\n      <item>GetWindowTitle3D</item>\n      <item>GetX</item>\n      <item>GetXMLAttribute</item>\n      <item>GetXMLEncoding</item>\n      <item>GetXMLNodeName</item>\n      <item>GetXMLNodeOffset</item>\n      <item>GetXMLNodeText</item>\n      <item>GetXMLStandalone</item>\n      <item>GetY</item>\n      <item>GetZ</item>\n      <item>GrabDrawingImage</item>\n      <item>GrabImage</item>\n      <item>GrabSprite</item>\n      <item>GradientColor</item>\n      <item>Green</item>\n      <item>Hex</item>\n      <item>HideBillboardGroup</item>\n      <item>HideEffect</item>\n      <item>HideEntity</item>\n      <item>HideGadget</item>\n      <item>HideGadget3D</item>\n      <item>HideLight</item>\n      <item>HideMenu</item>\n      <item>HideParticleEmitter</item>\n      <item>HideWindow</item>\n      <item>HideWindow3D</item>\n      <item>HingeJoint</item>\n      <item>HingeJointMotorTarget</item>\n      <item>HostName</item>\n      <item>Hour</item>\n      <item>HyperLinkGadget</item>\n      <item>IPAddressField</item>\n      <item>IPAddressGadget</item>\n      <item>IPString</item>\n      <item>ImageDepth</item>\n      <item>ImageFormat</item>\n      <item>ImageGadget</item>\n      <item>ImageGadget3D</item>\n      <item>ImageHeight</item>\n      <item>ImageID</item>\n      <item>ImageOutput</item>\n      <item>ImageWidth</item>\n      <item>Infinity</item>\n      <item>InitAudioCD</item>\n      <item>InitEngine3D</item>\n      <item>InitJoystick</item>\n      <item>InitKeyboard</item>\n      <item>InitMouse</item>\n      <item>InitMovie</item>\n      <item>InitNetwork</item>\n      <item>InitScintilla</item>\n      <item>InitSound</item>\n      <item>InitSprite</item>\n      <item>Inkey</item>\n      <item>Input</item>\n      <item>InputEvent3D</item>\n      <item>InputRequester</item>\n      <item>InsertElement</item>\n      <item>InsertJSONArray</item>\n      <item>InsertJSONList</item>\n      <item>InsertJSONMap</item>\n      <item>InsertJSONStructure</item>\n      <item>InsertString</item>\n      <item>InsertXMLArray</item>\n      <item>InsertXMLList</item>\n      <item>InsertXMLMap</item>\n      <item>InsertXMLStructure</item>\n      <item>InstructionAddress</item>\n      <item>InstructionString</item>\n      <item>Int</item>\n      <item>IntQ</item>\n      <item>IsBillboardGroup</item>\n      <item>IsCamera</item>\n      <item>IsDatabase</item>\n      <item>IsDialog</item>\n      <item>IsDirectory</item>\n      <item>IsEffect</item>\n      <item>IsEntity</item>\n      <item>IsFile</item>\n      <item>IsFingerprint</item>\n      <item>IsFont</item>\n      <item>IsFtp</item>\n      <item>IsGadget</item>\n      <item>IsGadget3D</item>\n      <item>IsImage</item>\n      <item>IsInfinity</item>\n      <item>IsJSON</item>\n      <item>IsLibrary</item>\n      <item>IsLight</item>\n      <item>IsMail</item>\n      <item>IsMaterial</item>\n      <item>IsMenu</item>\n      <item>IsMesh</item>\n      <item>IsMovie</item>\n      <item>IsMusic</item>\n      <item>IsNaN</item>\n      <item>IsNode</item>\n      <item>IsParticleEmitter</item>\n      <item>IsProgram</item>\n      <item>IsRegularExpression</item>\n      <item>IsRuntime</item>\n      <item>IsScreenActive</item>\n      <item>IsSerialPort</item>\n      <item>IsSound</item>\n      <item>IsSound3D</item>\n      <item>IsSprite</item>\n      <item>IsStaticGeometry</item>\n      <item>IsStatusBar</item>\n      <item>IsSysTrayIcon</item>\n      <item>IsText3D</item>\n      <item>IsTexture</item>\n      <item>IsThread</item>\n      <item>IsToolBar</item>\n      <item>IsWindow</item>\n      <item>IsWindow3D</item>\n      <item>IsXML</item>\n      <item>JSONArraySize</item>\n      <item>JSONErrorLine</item>\n      <item>JSONErrorMessage</item>\n      <item>JSONErrorPosition</item>\n      <item>JSONMemberKey</item>\n      <item>JSONMemberValue</item>\n      <item>JSONObjectSize</item>\n      <item>JSONType</item>\n      <item>JSONValue</item>\n      <item>JoystickAxisX</item>\n      <item>JoystickAxisY</item>\n      <item>JoystickAxisZ</item>\n      <item>JoystickButton</item>\n      <item>JoystickName</item>\n      <item>KeyboardInkey</item>\n      <item>KeyboardMode</item>\n      <item>KeyboardPushed</item>\n      <item>KeyboardReleased</item>\n      <item>KillProgram</item>\n      <item>KillThread</item>\n      <item>LCase</item>\n      <item>LSet</item>\n      <item>LTrim</item>\n      <item>LastElement</item>\n      <item>Left</item>\n      <item>Len</item>\n      <item>LensFlareEffectColor</item>\n      <item>LibraryFunctionAddress</item>\n      <item>LibraryFunctionName</item>\n      <item>LibraryID</item>\n      <item>LightAttenuation</item>\n      <item>LightDirection</item>\n      <item>LightDirectionX</item>\n      <item>LightDirectionY</item>\n      <item>LightDirectionZ</item>\n      <item>LightID</item>\n      <item>LightLookAt</item>\n      <item>LightPitch</item>\n      <item>LightRoll</item>\n      <item>LightX</item>\n      <item>LightY</item>\n      <item>LightYaw</item>\n      <item>LightZ</item>\n      <item>Line</item>\n      <item>LineXY</item>\n      <item>LinearGradient</item>\n      <item>ListIconGadget</item>\n      <item>ListIndex</item>\n      <item>ListSize</item>\n      <item>ListViewGadget</item>\n      <item>ListViewGadget3D</item>\n      <item>LoadFont</item>\n      <item>LoadImage</item>\n      <item>LoadJSON</item>\n      <item>LoadMesh</item>\n      <item>LoadMovie</item>\n      <item>LoadMusic</item>\n      <item>LoadSound</item>\n      <item>LoadSound3D</item>\n      <item>LoadSprite</item>\n      <item>LoadTexture</item>\n      <item>LoadWorld</item>\n      <item>LoadXML</item>\n      <item>Loc</item>\n      <item>LockMutex</item>\n      <item>Lof</item>\n      <item>Log</item>\n      <item>Log10</item>\n      <item>MD5FileFingerprint</item>\n      <item>MD5Fingerprint</item>\n      <item>MDIGadget</item>\n      <item>MailProgress</item>\n      <item>MainXMLNode</item>\n      <item>MakeIPAddress</item>\n      <item>MapKey</item>\n      <item>MapSize</item>\n      <item>MatchRegularExpression</item>\n      <item>MaterialBlendingMode</item>\n      <item>MaterialCullingMode</item>\n      <item>MaterialFilteringMode</item>\n      <item>MaterialFog</item>\n      <item>MaterialID</item>\n      <item>MaterialShadingMode</item>\n      <item>MaterialShininess</item>\n      <item>MemorySize</item>\n      <item>MemoryStatus</item>\n      <item>MemoryStringLength</item>\n      <item>MenuBar</item>\n      <item>MenuHeight</item>\n      <item>MenuID</item>\n      <item>MenuItem</item>\n      <item>MenuTitle</item>\n      <item>MergeLists</item>\n      <item>MeshFace</item>\n      <item>MeshID</item>\n      <item>MeshIndex</item>\n      <item>MeshIndexCount</item>\n      <item>MeshPoseCount</item>\n      <item>MeshPoseName</item>\n      <item>MeshRadius</item>\n      <item>MeshVertexColor</item>\n      <item>MeshVertexCount</item>\n      <item>MeshVertexNormal</item>\n      <item>MeshVertexPosition</item>\n      <item>MeshVertexTangent</item>\n      <item>MeshVertexTextureCoordinate</item>\n      <item>MessageRequester</item>\n      <item>Mid</item>\n      <item>Minute</item>\n      <item>Mod</item>\n      <item>Month</item>\n      <item>MouseButton</item>\n      <item>MouseDeltaX</item>\n      <item>MouseDeltaY</item>\n      <item>MouseLocate</item>\n      <item>MousePick</item>\n      <item>MouseRayCast</item>\n      <item>MouseWheel</item>\n      <item>MouseX</item>\n      <item>MouseY</item>\n      <item>MoveBillboard</item>\n      <item>MoveBillboardGroup</item>\n      <item>MoveCamera</item>\n      <item>MoveElement</item>\n      <item>MoveEntity</item>\n      <item>MoveEntityBone</item>\n      <item>MoveLight</item>\n      <item>MoveMemory</item>\n      <item>MoveNode</item>\n      <item>MoveParticleEmitter</item>\n      <item>MoveText3D</item>\n      <item>MoveXMLNode</item>\n      <item>MovieAudio</item>\n      <item>MovieHeight</item>\n      <item>MovieInfo</item>\n      <item>MovieLength</item>\n      <item>MovieSeek</item>\n      <item>MovieStatus</item>\n      <item>MovieWidth</item>\n      <item>MusicVolume</item>\n      <item>NaN</item>\n      <item>NetworkClientEvent</item>\n      <item>NetworkServerEvent</item>\n      <item>NewPrinterPage</item>\n      <item>NextDatabaseDriver</item>\n      <item>NextDatabaseRow</item>\n      <item>NextDirectoryEntry</item>\n      <item>NextElement</item>\n      <item>NextEnvironmentVariable</item>\n      <item>NextFTPDirectoryEntry</item>\n      <item>NextFingerprint</item>\n      <item>NextIPAddress</item>\n      <item>NextInstruction</item>\n      <item>NextJSONMember</item>\n      <item>NextLibraryFunction</item>\n      <item>NextMapElement</item>\n      <item>NextPackEntry</item>\n      <item>NextPreferenceGroup</item>\n      <item>NextPreferenceKey</item>\n      <item>NextRegularExpressionMatch</item>\n      <item>NextScreenMode</item>\n      <item>NextSelectedFilename</item>\n      <item>NextWorldCollision</item>\n      <item>NextXMLAttribute</item>\n      <item>NextXMLNode</item>\n      <item>NodeAnimationKeyFramePitch</item>\n      <item>NodeAnimationKeyFrameRoll</item>\n      <item>NodeAnimationKeyFrameX</item>\n      <item>NodeAnimationKeyFrameY</item>\n      <item>NodeAnimationKeyFrameYaw</item>\n      <item>NodeAnimationKeyFrameZ</item>\n      <item>NodeAnimationStatus</item>\n      <item>NodeFixedYawAxis</item>\n      <item>NodeID</item>\n      <item>NodeLookAt</item>\n      <item>NodePitch</item>\n      <item>NodeRoll</item>\n      <item>NodeX</item>\n      <item>NodeY</item>\n      <item>NodeYaw</item>\n      <item>NodeZ</item>\n      <item>NormalX</item>\n      <item>NormalY</item>\n      <item>NormalZ</item>\n      <item>NormalizeMesh</item>\n      <item>OSVersion</item>\n      <item>OnErrorCall</item>\n      <item>OnErrorDefault</item>\n      <item>OnErrorExit</item>\n      <item>OnErrorGoto</item>\n      <item>OpenConsole</item>\n      <item>OpenCryptRandom</item>\n      <item>OpenDatabase</item>\n      <item>OpenDatabaseRequester</item>\n      <item>OpenFTP</item>\n      <item>OpenFile</item>\n      <item>OpenFileRequester</item>\n      <item>OpenGLGadget</item>\n      <item>OpenGadgetList</item>\n      <item>OpenGadgetList3D</item>\n      <item>OpenHelp</item>\n      <item>OpenLibrary</item>\n      <item>OpenNetworkConnection</item>\n      <item>OpenPack</item>\n      <item>OpenPreferences</item>\n      <item>OpenScreen</item>\n      <item>OpenSerialPort</item>\n      <item>OpenSubMenu</item>\n      <item>OpenWindow</item>\n      <item>OpenWindow3D</item>\n      <item>OpenWindowedScreen</item>\n      <item>OpenXMLDialog</item>\n      <item>OptionGadget</item>\n      <item>OptionGadget3D</item>\n      <item>OutputDepth</item>\n      <item>OutputHeight</item>\n      <item>OutputWidth</item>\n      <item>PackEntryName</item>\n      <item>PackEntrySize</item>\n      <item>PackEntryType</item>\n      <item>PanelGadget</item>\n      <item>PanelGadget3D</item>\n      <item>ParentXMLNode</item>\n      <item>Parse3DScripts</item>\n      <item>ParseDate</item>\n      <item>ParseJSON</item>\n      <item>ParseXML</item>\n      <item>ParticleColorFader</item>\n      <item>ParticleColorRange</item>\n      <item>ParticleEmissionRate</item>\n      <item>ParticleEmitterDirection</item>\n      <item>ParticleEmitterID</item>\n      <item>ParticleEmitterX</item>\n      <item>ParticleEmitterY</item>\n      <item>ParticleEmitterZ</item>\n      <item>ParticleMaterial</item>\n      <item>ParticleSize</item>\n      <item>ParticleSpeedFactor</item>\n      <item>ParticleTimeToLive</item>\n      <item>ParticleVelocity</item>\n      <item>PathRequester</item>\n      <item>PauseAudioCD</item>\n      <item>PauseMovie</item>\n      <item>PauseSound</item>\n      <item>PauseThread</item>\n      <item>PeekA</item>\n      <item>PeekB</item>\n      <item>PeekC</item>\n      <item>PeekD</item>\n      <item>PeekF</item>\n      <item>PeekI</item>\n      <item>PeekL</item>\n      <item>PeekQ</item>\n      <item>PeekS</item>\n      <item>PeekU</item>\n      <item>PeekW</item>\n      <item>PickX</item>\n      <item>PickY</item>\n      <item>PickZ</item>\n      <item>Pitch</item>\n      <item>PlayAudioCD</item>\n      <item>PlayMovie</item>\n      <item>PlayMusic</item>\n      <item>PlaySound</item>\n      <item>PlaySound3D</item>\n      <item>Plot</item>\n      <item>Point</item>\n      <item>PointJoint</item>\n      <item>PointPick</item>\n      <item>PokeA</item>\n      <item>PokeB</item>\n      <item>PokeC</item>\n      <item>PokeD</item>\n      <item>PokeF</item>\n      <item>PokeI</item>\n      <item>PokeL</item>\n      <item>PokeQ</item>\n      <item>PokeS</item>\n      <item>PokeU</item>\n      <item>PokeW</item>\n      <item>PopListPosition</item>\n      <item>PopMapPosition</item>\n      <item>PostEvent</item>\n      <item>Pow</item>\n      <item>PreferenceComment</item>\n      <item>PreferenceGroup</item>\n      <item>PreferenceGroupName</item>\n      <item>PreferenceKeyName</item>\n      <item>PreferenceKeyValue</item>\n      <item>PreviousDatabaseRow</item>\n      <item>PreviousElement</item>\n      <item>PreviousXMLNode</item>\n      <item>Print</item>\n      <item>PrintN</item>\n      <item>PrintRequester</item>\n      <item>PrinterOutput</item>\n      <item>PrinterPageHeight</item>\n      <item>PrinterPageWidth</item>\n      <item>ProgramExitCode</item>\n      <item>ProgramFilename</item>\n      <item>ProgramID</item>\n      <item>ProgramParameter</item>\n      <item>ProgramRunning</item>\n      <item>ProgressBarGadget</item>\n      <item>ProgressBarGadget3D</item>\n      <item>PurifierGranularity</item>\n      <item>PushListPosition</item>\n      <item>PushMapPosition</item>\n      <item>RGB</item>\n      <item>RGBA</item>\n      <item>RSet</item>\n      <item>RTrim</item>\n      <item>Radian</item>\n      <item>RaiseError</item>\n      <item>Random</item>\n      <item>RandomData</item>\n      <item>RandomSeed</item>\n      <item>RandomizeArray</item>\n      <item>RandomizeList</item>\n      <item>RawKey</item>\n      <item>RayCast</item>\n      <item>RayCollide</item>\n      <item>RayPick</item>\n      <item>ReAllocateMemory</item>\n      <item>ReadAsciiCharacter</item>\n      <item>ReadByte</item>\n      <item>ReadCharacter</item>\n      <item>ReadConsoleData</item>\n      <item>ReadData</item>\n      <item>ReadDouble</item>\n      <item>ReadFile</item>\n      <item>ReadFloat</item>\n      <item>ReadInteger</item>\n      <item>ReadLong</item>\n      <item>ReadPreferenceDouble</item>\n      <item>ReadPreferenceFloat</item>\n      <item>ReadPreferenceInteger</item>\n      <item>ReadPreferenceLong</item>\n      <item>ReadPreferenceQuad</item>\n      <item>ReadPreferenceString</item>\n      <item>ReadProgramData</item>\n      <item>ReadProgramError</item>\n      <item>ReadProgramString</item>\n      <item>ReadQuad</item>\n      <item>ReadSerialPortData</item>\n      <item>ReadString</item>\n      <item>ReadStringFormat</item>\n      <item>ReadUnicodeCharacter</item>\n      <item>ReadWord</item>\n      <item>ReceiveFTPFile</item>\n      <item>ReceiveHTTPFile</item>\n      <item>ReceiveNetworkData</item>\n      <item>Red</item>\n      <item>RegularExpressionError</item>\n      <item>RegularExpressionGroup</item>\n      <item>RegularExpressionGroupLength</item>\n      <item>RegularExpressionGroupPosition</item>\n      <item>RegularExpressionMatchLength</item>\n      <item>RegularExpressionMatchPosition</item>\n      <item>RegularExpressionMatchString</item>\n      <item>RegularExpressionNamedGroup</item>\n      <item>RegularExpressionNamedGroupLength</item>\n      <item>RegularExpressionNamedGroupPosition</item>\n      <item>ReleaseMouse</item>\n      <item>ReloadMaterial</item>\n      <item>RemoveBillboard</item>\n      <item>RemoveEnvironmentVariable</item>\n      <item>RemoveGadgetColumn</item>\n      <item>RemoveGadgetItem</item>\n      <item>RemoveGadgetItem3D</item>\n      <item>RemoveJSONElement</item>\n      <item>RemoveJSONMember</item>\n      <item>RemoveKeyboardShortcut</item>\n      <item>RemoveMailRecipient</item>\n      <item>RemoveMaterialLayer</item>\n      <item>RemovePackFile</item>\n      <item>RemovePreferenceGroup</item>\n      <item>RemovePreferenceKey</item>\n      <item>RemoveString</item>\n      <item>RemoveSysTrayIcon</item>\n      <item>RemoveWindowTimer</item>\n      <item>RemoveXMLAttribute</item>\n      <item>RenameFTPFile</item>\n      <item>RenameFile</item>\n      <item>RenderWorld</item>\n      <item>ReplaceRegularExpression</item>\n      <item>ReplaceString</item>\n      <item>ResetGradientColors</item>\n      <item>ResetList</item>\n      <item>ResetMap</item>\n      <item>ResetMaterial</item>\n      <item>ResetProfiler</item>\n      <item>ResizeBillboard</item>\n      <item>ResizeGadget</item>\n      <item>ResizeGadget3D</item>\n      <item>ResizeImage</item>\n      <item>ResizeJSONElements</item>\n      <item>ResizeMovie</item>\n      <item>ResizeParticleEmitter</item>\n      <item>ResizeWindow</item>\n      <item>ResizeWindow3D</item>\n      <item>ResolveXMLAttributeName</item>\n      <item>ResolveXMLNodeName</item>\n      <item>ResumeAudioCD</item>\n      <item>ResumeMovie</item>\n      <item>ResumeSound</item>\n      <item>ResumeThread</item>\n      <item>ReverseString</item>\n      <item>RibbonEffectColor</item>\n      <item>RibbonEffectWidth</item>\n      <item>Right</item>\n      <item>Roll</item>\n      <item>RootXMLNode</item>\n      <item>RotateBillboardGroup</item>\n      <item>RotateCamera</item>\n      <item>RotateEntity</item>\n      <item>RotateEntityBone</item>\n      <item>RotateLight</item>\n      <item>RotateMaterial</item>\n      <item>RotateNode</item>\n      <item>RotateSprite</item>\n      <item>Round</item>\n      <item>RoundBox</item>\n      <item>RunProgram</item>\n      <item>SHA1FileFingerprint</item>\n      <item>SHA1Fingerprint</item>\n      <item>SaveDebugOutput</item>\n      <item>SaveFileRequester</item>\n      <item>SaveImage</item>\n      <item>SaveJSON</item>\n      <item>SaveMesh</item>\n      <item>SaveRenderTexture</item>\n      <item>SaveSprite</item>\n      <item>SaveTerrain</item>\n      <item>SaveXML</item>\n      <item>ScaleEntity</item>\n      <item>ScaleMaterial</item>\n      <item>ScaleNode</item>\n      <item>ScaleText3D</item>\n      <item>ScintillaGadget</item>\n      <item>ScintillaSendMessage</item>\n      <item>ScreenDepth</item>\n      <item>ScreenHeight</item>\n      <item>ScreenID</item>\n      <item>ScreenModeDepth</item>\n      <item>ScreenModeHeight</item>\n      <item>ScreenModeRefreshRate</item>\n      <item>ScreenModeWidth</item>\n      <item>ScreenOutput</item>\n      <item>ScreenWidth</item>\n      <item>ScrollAreaGadget</item>\n      <item>ScrollAreaGadget3D</item>\n      <item>ScrollBarGadget</item>\n      <item>ScrollBarGadget3D</item>\n      <item>ScrollMaterial</item>\n      <item>Second</item>\n      <item>SecondWorldCollisionEntity</item>\n      <item>SelectElement</item>\n      <item>SelectedFilePattern</item>\n      <item>SelectedFontColor</item>\n      <item>SelectedFontName</item>\n      <item>SelectedFontSize</item>\n      <item>SelectedFontStyle</item>\n      <item>SendFTPFile</item>\n      <item>SendMail</item>\n      <item>SendNetworkData</item>\n      <item>SendNetworkString</item>\n      <item>SerialPortError</item>\n      <item>SerialPortID</item>\n      <item>SerialPortTimeouts</item>\n      <item>ServerID</item>\n      <item>SetActiveGadget</item>\n      <item>SetActiveGadget3D</item>\n      <item>SetActiveWindow</item>\n      <item>SetActiveWindow3D</item>\n      <item>SetClipboardImage</item>\n      <item>SetClipboardText</item>\n      <item>SetCurrentDirectory</item>\n      <item>SetDatabaseBlob</item>\n      <item>SetDragCallback</item>\n      <item>SetDropCallback</item>\n      <item>SetEntityAnimationLength</item>\n      <item>SetEntityAnimationTime</item>\n      <item>SetEntityAnimationWeight</item>\n      <item>SetEntityAttribute</item>\n      <item>SetEntityCollisionFilter</item>\n      <item>SetEntityMaterial</item>\n      <item>SetEnvironmentVariable</item>\n      <item>SetFTPDirectory</item>\n      <item>SetFileAttributes</item>\n      <item>SetFileDate</item>\n      <item>SetFrameRate</item>\n      <item>SetGUITheme3D</item>\n      <item>SetGadgetAttribute</item>\n      <item>SetGadgetAttribute3D</item>\n      <item>SetGadgetColor</item>\n      <item>SetGadgetData</item>\n      <item>SetGadgetData3D</item>\n      <item>SetGadgetFont</item>\n      <item>SetGadgetItemAttribute</item>\n      <item>SetGadgetItemColor</item>\n      <item>SetGadgetItemData</item>\n      <item>SetGadgetItemData3D</item>\n      <item>SetGadgetItemImage</item>\n      <item>SetGadgetItemState</item>\n      <item>SetGadgetItemState3D</item>\n      <item>SetGadgetItemText</item>\n      <item>SetGadgetItemText3D</item>\n      <item>SetGadgetState</item>\n      <item>SetGadgetState3D</item>\n      <item>SetGadgetText</item>\n      <item>SetGadgetText3D</item>\n      <item>SetJSONArray</item>\n      <item>SetJSONBoolean</item>\n      <item>SetJSONDouble</item>\n      <item>SetJSONFloat</item>\n      <item>SetJSONInteger</item>\n      <item>SetJSONNull</item>\n      <item>SetJSONObject</item>\n      <item>SetJSONQuad</item>\n      <item>SetJSONString</item>\n      <item>SetJointAttribute</item>\n      <item>SetLightColor</item>\n      <item>SetMailAttribute</item>\n      <item>SetMailBody</item>\n      <item>SetMaterialAttribute</item>\n      <item>SetMaterialColor</item>\n      <item>SetMenuItemState</item>\n      <item>SetMenuItemText</item>\n      <item>SetMenuTitleText</item>\n      <item>SetMeshData</item>\n      <item>SetMeshMaterial</item>\n      <item>SetMusicPosition</item>\n      <item>SetNodeAnimationKeyFramePosition</item>\n      <item>SetNodeAnimationKeyFrameRotation</item>\n      <item>SetNodeAnimationKeyFrameScale</item>\n      <item>SetNodeAnimationLength</item>\n      <item>SetNodeAnimationTime</item>\n      <item>SetNodeAnimationWeight</item>\n      <item>SetOrientation</item>\n      <item>SetOrigin</item>\n      <item>SetRenderQueue</item>\n      <item>SetRuntimeDouble</item>\n      <item>SetRuntimeInteger</item>\n      <item>SetRuntimeString</item>\n      <item>SetSerialPortStatus</item>\n      <item>SetSoundFrequency</item>\n      <item>SetSoundPosition</item>\n      <item>SetTerrainTileHeightAtPoint</item>\n      <item>SetTerrainTileLayerBlend</item>\n      <item>SetToolBarButtonState</item>\n      <item>SetURLPart</item>\n      <item>SetWindowCallback</item>\n      <item>SetWindowColor</item>\n      <item>SetWindowData</item>\n      <item>SetWindowState</item>\n      <item>SetWindowTitle</item>\n      <item>SetWindowTitle3D</item>\n      <item>SetXMLAttribute</item>\n      <item>SetXMLEncoding</item>\n      <item>SetXMLNodeName</item>\n      <item>SetXMLNodeOffset</item>\n      <item>SetXMLNodeText</item>\n      <item>SetXMLStandalone</item>\n      <item>SetupTerrains</item>\n      <item>ShortcutGadget</item>\n      <item>ShowAssemblyViewer</item>\n      <item>ShowCallstack</item>\n      <item>ShowDebugOutput</item>\n      <item>ShowGUI</item>\n      <item>ShowLibraryViewer</item>\n      <item>ShowMemoryViewer</item>\n      <item>ShowProfiler</item>\n      <item>ShowVariableViewer</item>\n      <item>ShowWatchlist</item>\n      <item>Sign</item>\n      <item>SignalSemaphore</item>\n      <item>Sin</item>\n      <item>SinH</item>\n      <item>SkyBox</item>\n      <item>SkyDome</item>\n      <item>SliderJoint</item>\n      <item>SmartWindowRefresh</item>\n      <item>SortArray</item>\n      <item>SortList</item>\n      <item>SortStructuredArray</item>\n      <item>SortStructuredList</item>\n      <item>SoundCone3D</item>\n      <item>SoundID3D</item>\n      <item>SoundLength</item>\n      <item>SoundListenerLocate</item>\n      <item>SoundPan</item>\n      <item>SoundRange3D</item>\n      <item>SoundStatus</item>\n      <item>SoundVolume</item>\n      <item>SoundVolume3D</item>\n      <item>Space</item>\n      <item>SpinGadget</item>\n      <item>SpinGadget3D</item>\n      <item>SplinePointX</item>\n      <item>SplinePointY</item>\n      <item>SplinePointZ</item>\n      <item>SplineX</item>\n      <item>SplineY</item>\n      <item>SplineZ</item>\n      <item>SplitList</item>\n      <item>SplitterGadget</item>\n      <item>SpotLightRange</item>\n      <item>SpriteBlendingMode</item>\n      <item>SpriteCollision</item>\n      <item>SpriteDepth</item>\n      <item>SpriteHeight</item>\n      <item>SpriteID</item>\n      <item>SpriteOutput</item>\n      <item>SpritePixelCollision</item>\n      <item>SpriteQuality</item>\n      <item>SpriteWidth</item>\n      <item>Sqr</item>\n      <item>StartAESCipher</item>\n      <item>StartDrawing</item>\n      <item>StartEntityAnimation</item>\n      <item>StartNodeAnimation</item>\n      <item>StartPrinting</item>\n      <item>StartProfiler</item>\n      <item>StatusBarHeight</item>\n      <item>StatusBarID</item>\n      <item>StatusBarImage</item>\n      <item>StatusBarProgress</item>\n      <item>StatusBarText</item>\n      <item>StickyWindow</item>\n      <item>StopAudioCD</item>\n      <item>StopDrawing</item>\n      <item>StopEntityAnimation</item>\n      <item>StopMovie</item>\n      <item>StopMusic</item>\n      <item>StopNodeAnimation</item>\n      <item>StopPrinting</item>\n      <item>StopProfiler</item>\n      <item>StopSound</item>\n      <item>StopSound3D</item>\n      <item>Str</item>\n      <item>StrD</item>\n      <item>StrF</item>\n      <item>StrU</item>\n      <item>StringByteLength</item>\n      <item>StringField</item>\n      <item>StringGadget</item>\n      <item>StringGadget3D</item>\n      <item>SubMeshCount</item>\n      <item>Sun</item>\n      <item>SwapElements</item>\n      <item>SwitchCamera</item>\n      <item>SysTrayIconToolTip</item>\n      <item>Tan</item>\n      <item>TanH</item>\n      <item>TerrainHeight</item>\n      <item>TerrainLocate</item>\n      <item>TerrainMousePick</item>\n      <item>TerrainPhysicBody</item>\n      <item>TerrainRenderMode</item>\n      <item>TerrainTileHeightAtPosition</item>\n      <item>TerrainTileLayerMapSize</item>\n      <item>TerrainTilePointX</item>\n      <item>TerrainTilePointY</item>\n      <item>TerrainTileSize</item>\n      <item>Text3DAlignment</item>\n      <item>Text3DCaption</item>\n      <item>Text3DColor</item>\n      <item>Text3DID</item>\n      <item>TextGadget</item>\n      <item>TextGadget3D</item>\n      <item>TextHeight</item>\n      <item>TextWidth</item>\n      <item>TextureHeight</item>\n      <item>TextureID</item>\n      <item>TextureOutput</item>\n      <item>TextureWidth</item>\n      <item>ThreadID</item>\n      <item>ThreadPriority</item>\n      <item>ToolBarHeight</item>\n      <item>ToolBarID</item>\n      <item>ToolBarImageButton</item>\n      <item>ToolBarSeparator</item>\n      <item>ToolBarStandardButton</item>\n      <item>ToolBarToolTip</item>\n      <item>TrackBarGadget</item>\n      <item>TransformMesh</item>\n      <item>TransformSprite</item>\n      <item>TransparentSpriteColor</item>\n      <item>TreeGadget</item>\n      <item>Trim</item>\n      <item>TruncateFile</item>\n      <item>TryLockMutex</item>\n      <item>TrySemaphore</item>\n      <item>UCase</item>\n      <item>URLDecoder</item>\n      <item>URLEncoder</item>\n      <item>UnbindEvent</item>\n      <item>UnbindGadgetEvent</item>\n      <item>UnbindMenuEvent</item>\n      <item>UnclipOutput</item>\n      <item>UncompressMemory</item>\n      <item>UncompressPackFile</item>\n      <item>UncompressPackMemory</item>\n      <item>UnlockMutex</item>\n      <item>UpdateEntityAnimation</item>\n      <item>UpdateMesh</item>\n      <item>UpdateMeshBoundingBox</item>\n      <item>UpdateRenderTexture</item>\n      <item>UpdateSplinePoint</item>\n      <item>UpdateTerrain</item>\n      <item>UpdateTerrainTileLayerBlend</item>\n      <item>UpdateVertexPoseReference</item>\n      <item>UseAudioCD</item>\n      <item>UseBriefLZPacker</item>\n      <item>UseFLACSoundDecoder</item>\n      <item>UseGadgetList</item>\n      <item>UseJCALG1Packer</item>\n      <item>UseJPEG2000ImageDecoder</item>\n      <item>UseJPEG2000ImageEncoder</item>\n      <item>UseJPEGImageDecoder</item>\n      <item>UseJPEGImageEncoder</item>\n      <item>UseLZMAPacker</item>\n      <item>UseODBCDatabase</item>\n      <item>UseOGGSoundDecoder</item>\n      <item>UsePNGImageDecoder</item>\n      <item>UsePNGImageEncoder</item>\n      <item>UsePostgreSQLDatabase</item>\n      <item>UseSQLiteDatabase</item>\n      <item>UseTGAImageDecoder</item>\n      <item>UseTIFFImageDecoder</item>\n      <item>UseZipPacker</item>\n      <item>UserName</item>\n      <item>Val</item>\n      <item>ValD</item>\n      <item>ValF</item>\n      <item>VertexPoseReferenceCount</item>\n      <item>WaitProgram</item>\n      <item>WaitSemaphore</item>\n      <item>WaitThread</item>\n      <item>WaitWindowEvent</item>\n      <item>WaterColor</item>\n      <item>WaterHeight</item>\n      <item>WebGadget</item>\n      <item>WebGadgetPath</item>\n      <item>WindowBounds</item>\n      <item>WindowEvent</item>\n      <item>WindowEvent3D</item>\n      <item>WindowHeight</item>\n      <item>WindowHeight3D</item>\n      <item>WindowID</item>\n      <item>WindowID3D</item>\n      <item>WindowMouseX</item>\n      <item>WindowMouseY</item>\n      <item>WindowOutput</item>\n      <item>WindowWidth</item>\n      <item>WindowWidth3D</item>\n      <item>WindowX</item>\n      <item>WindowX3D</item>\n      <item>WindowY</item>\n      <item>WindowY3D</item>\n      <item>WorldCollisionAppliedImpulse</item>\n      <item>WorldCollisionContact</item>\n      <item>WorldCollisionNormal</item>\n      <item>WorldDebug</item>\n      <item>WorldGravity</item>\n      <item>WorldShadows</item>\n      <item>WriteAsciiCharacter</item>\n      <item>WriteByte</item>\n      <item>WriteCharacter</item>\n      <item>WriteConsoleData</item>\n      <item>WriteData</item>\n      <item>WriteDouble</item>\n      <item>WriteFloat</item>\n      <item>WriteInteger</item>\n      <item>WriteLong</item>\n      <item>WritePreferenceDouble</item>\n      <item>WritePreferenceFloat</item>\n      <item>WritePreferenceInteger</item>\n      <item>WritePreferenceLong</item>\n      <item>WritePreferenceQuad</item>\n      <item>WritePreferenceString</item>\n      <item>WriteProgramData</item>\n      <item>WriteProgramString</item>\n      <item>WriteProgramStringN</item>\n      <item>WriteQuad</item>\n      <item>WriteSerialPortData</item>\n      <item>WriteSerialPortString</item>\n      <item>WriteString</item>\n      <item>WriteStringFormat</item>\n      <item>WriteStringN</item>\n      <item>WriteUnicodeCharacter</item>\n      <item>WriteWord</item>\n      <item>XMLAttributeName</item>\n      <item>XMLAttributeValue</item>\n      <item>XMLChildCount</item>\n      <item>XMLError</item>\n      <item>XMLErrorLine</item>\n      <item>XMLErrorPosition</item>\n      <item>XMLNodeFromID</item>\n      <item>XMLNodeFromPath</item>\n      <item>XMLNodePath</item>\n      <item>XMLNodeType</item>\n      <item>XMLStatus</item>\n      <item>Yaw</item>\n      <item>Year</item>\n      <item>ZoomSprite</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\n        <AnyChar attribute=\"Operator\" String=\"-+*/%|=!&lt;&gt;!^&amp;~\" context=\"#stay\"/>\n\n        <AnyChar attribute=\"Separator\" String=\",.:()[]\\\" context=\"#stay\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(if)([\\s]|$)\" insensitive=\"true\" beginRegion=\"IfRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(endif)([\\s]|$)\" insensitive=\"true\" endRegion=\"IfRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(while)([\\s]|$)\" insensitive=\"true\" beginRegion=\"WhileRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(wend)([\\s]|$)\" insensitive=\"true\" endRegion=\"WhileRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(repeat)([\\s]|$)\" insensitive=\"true\" beginRegion=\"RepeatRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(until)([\\s]|$)\" insensitive=\"true\" endRegion=\"RepeatRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(select)([\\s]|$)\" insensitive=\"true\" beginRegion=\"SelectRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(endselect)([\\s]|$)\" insensitive=\"true\" endRegion=\"SelectRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(for|foreach)([\\s]|$)\" insensitive=\"true\" beginRegion=\"ForRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(next)([\\s]|$)\" insensitive=\"true\" endRegion=\"ForRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(procedure|proceduredll)([.\\s]|$)\" insensitive=\"true\" beginRegion=\"ProcedureRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(endprocedure)([\\s]|$)\" insensitive=\"true\" endRegion=\"ProcedureRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(structure)([\\s]|$)\" insensitive=\"true\" beginRegion=\"StructureRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(endstructure)([\\s]|$)\" insensitive=\"true\" endRegion=\"StructureRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(interface)([\\s]|$)\" insensitive=\"true\" beginRegion=\"InterfaceRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(endinterface)([\\s]|$)\" insensitive=\"true\" endRegion=\"InterfaceRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(enumeration)([\\s]|$)\" insensitive=\"true\" beginRegion=\"EnumerationRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(endenumeration)([\\s]|$)\" insensitive=\"true\" endRegion=\"EnumerationRegion\"/>\n\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(datasection)([\\s]|$)\" insensitive=\"true\" beginRegion=\"DataSectionRegion\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(enddatasection)([\\s]|$)\" insensitive=\"true\" endRegion=\"DataSectionRegion\"/>\n\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\n        <RegExpr attribute=\"Compiler Keyword\" context=\"#stay\" String=\"\\b(compilerif)([\\s]|$)\" insensitive=\"true\" beginRegion=\"CompilerIfRegion\"/>\n        <RegExpr attribute=\"Compiler Keyword\" context=\"#stay\" String=\"\\b(compilerendif)([\\s]|$)\" insensitive=\"true\" endRegion=\"CompilerIfRegion\"/>\n\n        <RegExpr attribute=\"Compiler Keyword\" context=\"#stay\" String=\"\\b(compilerselect)([\\s]|$)\" insensitive=\"true\" beginRegion=\"CompilerSelectRegion\"/>\n        <RegExpr attribute=\"Compiler Keyword\" context=\"#stay\" String=\"\\b(compilerendselect)([\\s]|$)\" insensitive=\"true\" endRegion=\"CompilerEndSelectRegion\"/>\n\n        <keyword attribute=\"Compiler Keyword\" context=\"#stay\" String=\"compiler\"/>\n\n        <keyword attribute=\"Functions\" context=\"#stay\" String=\"functions\"/>\n\n        <keyword attribute=\"Debug Keyword\" context=\"#stay\" String=\"debug\"/>\n\n        <RegExpr attribute=\"Constant\" context=\"#stay\" String=\"\\#+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\"/>\n\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"^\\s*;+\\s*BEGIN.*$\" beginRegion=\"marker\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"^\\s*;+\\s*END.*$\" endRegion=\"marker\"/>\n\n        <DetectChar attribute=\"Comment\" context=\"Comment1\" char=\";\"/>\n\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment1\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Separator\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Debug Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Compiler Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Functions\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Constant\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Number\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" />\n    <comments>\n      <comment name=\"singleLine\" start=\";\" />\n    </comments>\n  </general>\n</language>\n<!-- // kate: space-indent on; indent-width 3; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/python.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language>\n<!-- Python syntax highlightning v0.9 by Per Wigren -->\n<!-- Python syntax highlighting v1.9 by Michael Bueker (improved keyword differentiation) -->\n<!-- Python syntax highlighting v1.97 by Paul Giannaros -->\n<!-- Python syntax highlighting v1.99 by Primoz Anzur -->\n<!-- Python syntax highlighting v2.01 by Paul Giannaros:\n\t* full format character support\n\t* unicode string modifier supported -->\n<!-- v2.02 remove RegExpr for nums and make indent consistent -->\n<!-- v2.03 highlight decorators, remove operator regex, don't highlight parens as operators -->\n<!-- v2.04 make alerts visible even if they are directly after ''' or # without a space -->\n<!-- v2.06 decorator names can (and often do) contain periods -->\n<!-- v2.07 add support for %prog and co, see bug 142832 -->\n<!-- v2.08 add missing overloaders, new Python 3 statements, builtins, and keywords -->\n<!-- v2.29 recognize escape sequenzes correctly -->\n<language name=\"Python\" version=\"9\" style=\"python\" indenter=\"python\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.py;*.pyw;SConstruct;SConscript\" mimetype=\"application/x-python;text/x-python;text/x-python3\" casesensitive=\"1\" author=\"Michael Bueker\" license=\"\">\n\t<highlighting>\n\t\t<list name=\"import\">\n\t\t\t<item>import</item>\n\t\t\t<item>from</item>\n\t\t\t<item>as</item>\n\t\t</list>\n\t\t<list name=\"defs\">\n\t\t\t<item>class</item>\n\t\t\t<item>def</item>\n\t\t\t<item>del</item>\n\t\t\t<item>global</item>\n\t\t\t<item>lambda</item>\n\t\t\t<item>nonlocal</item>\n\t\t</list>\n\t\t<list name=\"operators\">\n\t\t\t<item>and</item>\n\t\t\t<item>in</item>\n\t\t\t<item>is</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t</list>\n\t\t<list name=\"flow\">\n\t\t\t<item>assert</item>\n\t\t\t<item>break</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>elif</item>\n\t\t\t<item>else</item>\n\t\t\t<item>except</item>\n\t\t\t<item>finally</item>\n\t\t\t<item>for</item>\n\t\t\t<item>if</item>\n\t\t\t<item>pass</item>\n\t\t\t<item>raise</item>\n\t\t\t<item>return</item>\n\t\t\t<item>try</item>\n\t\t\t<item>while</item>\n\t\t\t<item>with</item>\n\t\t\t<item>yield</item>\n\t\t\t<item>async</item>\n\t\t\t<item>await</item>\n\t\t</list>\n\t\t<list name=\"builtinfuncs\">\n\t\t\t<item>__import__</item>\n\t\t\t<item>abs</item>\n\t\t\t<item>all</item>\n\t\t\t<item>any</item>\n\t\t\t<item>apply</item>\n\t\t\t<item>ascii</item>\n\t\t\t<item>basestring</item>\n\t\t\t<item>bin</item>\n\t\t\t<item>bool</item>\n\t\t\t<item>buffer</item>\n\t\t\t<item>bytearray</item>\n\t\t\t<item>bytes</item>\n\t\t\t<item>callable</item>\n\t\t\t<item>chr</item>\n\t\t\t<item>classmethod</item>\n\t\t\t<item>cmp</item>\n\t\t\t<item>coerce</item>\n\t\t\t<item>compile</item>\n\t\t\t<item>complex</item>\n\t\t\t<item>delattr</item>\n\t\t\t<item>dict</item>\n\t\t\t<item>dir</item>\n\t\t\t<item>divmod</item>\n\t\t\t<item>enumerate</item>\n\t\t\t<item>eval</item>\n\t\t\t<item>exec</item>\n\t\t\t<item>execfile</item>\n\t\t\t<item>file</item>\n\t\t\t<item>filter</item>\n\t\t\t<item>float</item>\n\t\t\t<item>format</item>\n\t\t\t<item>frozenset</item>\n\t\t\t<item>getattr</item>\n\t\t\t<item>globals</item>\n\t\t\t<item>hasattr</item>\n\t\t\t<item>hash</item>\n\t\t\t<item>help</item>\n\t\t\t<item>hex</item>\n\t\t\t<item>id</item>\n\t\t\t<item>input</item>\n\t\t\t<item>int</item>\n\t\t\t<item>intern</item>\n\t\t\t<item>isinstance</item>\n\t\t\t<item>issubclass</item>\n\t\t\t<item>iter</item>\n\t\t\t<item>len</item>\n\t\t\t<item>list</item>\n\t\t\t<item>locals</item>\n\t\t\t<item>long</item>\n\t\t\t<item>map</item>\n\t\t\t<item>max</item>\n\t\t\t<item>memoryview</item>\n\t\t\t<item>min</item>\n\t\t\t<item>next</item>\n\t\t\t<item>object</item>\n\t\t\t<item>oct</item>\n\t\t\t<item>open</item>\n\t\t\t<item>ord</item>\n\t\t\t<item>pow</item>\n\t\t\t<item>print</item>\n\t\t\t<item>property</item>\n\t\t\t<item>range</item>\n\t\t\t<item>raw_input</item>\n\t\t\t<item>reduce</item>\n\t\t\t<item>reload</item>\n\t\t\t<item>repr</item>\n\t\t\t<item>reversed</item>\n\t\t\t<item>round</item>\n\t\t\t<item>set</item>\n\t\t\t<item>setattr</item>\n\t\t\t<item>slice</item>\n\t\t\t<item>sorted</item>\n\t\t\t<item>staticmethod</item>\n\t\t\t<item>str</item>\n\t\t\t<item>sum</item>\n\t\t\t<item>super</item>\n\t\t\t<item>tuple</item>\n\t\t\t<item>type</item>\n\t\t\t<item>unichr</item>\n\t\t\t<item>unicode</item>\n\t\t\t<item>vars</item>\n\t\t\t<item>xrange</item>\n\t\t\t<item>zip</item>\n\t\t</list>\n\t\t<list name=\"specialvars\">\n\t\t\t<item>None</item>\n\t\t\t<item>self</item>\n\t\t\t<item>True</item>\n\t\t\t<item>False</item>\n\t\t\t<item>NotImplemented</item>\n\t\t\t<item>Ellipsis</item>\n\t\t\t<item>__debug__</item>\n\t\t\t<item>__file__</item>\n\t\t\t<item>__name__</item>\n\t\t</list>\n\t\t<list name=\"bindings\">\n\t\t\t<item>SIGNAL</item>\n\t\t\t<item>SLOT</item>\n\t\t\t<item>connect</item>\n\t\t</list>\n\t\t<list name=\"overloaders\">\n\t\t\t<item>__new__</item>\n\t\t\t<item>__init__</item>\n\t\t\t<item>__del__</item>\n\t\t\t<item>__repr__</item>\n\t\t\t<item>__str__</item>\n\t\t\t<item>__lt__</item>\n\t\t\t<item>__le__</item>\n\t\t\t<item>__eq__</item>\n\t\t\t<item>__ne__</item>\n\t\t\t<item>__gt__</item>\n\t\t\t<item>__ge__</item>\n\t\t\t<item>__cmp__</item>\n\t\t\t<item>__rcmp__</item>\n\t\t\t<item>__hash__</item>\n\t\t\t<item>__nonzero__</item>\n\t\t\t<item>__unicode__</item>\n\t\t\t<item>__getattr__</item>\n\t\t\t<item>__setattr__</item>\n\t\t\t<item>__delattr__</item>\n\t\t\t<item>__getattribute__</item>\n\t\t\t<item>__get__</item>\n\t\t\t<item>__set__</item>\n\t\t\t<item>__delete__</item>\n\t\t\t<item>__call__</item>\n\t\t\t<item>__len__</item>\n\t\t\t<item>__getitem__</item>\n\t\t\t<item>__setitem__</item>\n\t\t\t<item>__delitem__</item>\n\t\t\t<item>__iter__</item>\n\t\t\t<item>__reversed__</item>\n\t\t\t<item>__contains__</item>\n\t\t\t<item>__getslice__</item>\n\t\t\t<item>__setslice__</item>\n\t\t\t<item>__delslice__</item>\n\t\t\t<item>__add__</item>\n\t\t\t<item>__sub__</item>\n\t\t\t<item>__mul__</item>\n\t\t\t<item>__floordiv__</item>\n\t\t\t<item>__mod__</item>\n\t\t\t<item>__divmod__</item>\n\t\t\t<item>__pow__</item>\n\t\t\t<item>__lshift__</item>\n\t\t\t<item>__rshift__</item>\n\t\t\t<item>__and__</item>\n\t\t\t<item>__xor__</item>\n\t\t\t<item>__or__</item>\n\t\t\t<item>__div__</item>\n\t\t\t<item>__truediv__</item>\n\t\t\t<item>__radd__</item>\n\t\t\t<item>__rsub__</item>\n\t\t\t<item>__rmul__</item>\n\t\t\t<item>__rdiv__</item>\n\t\t\t<item>__rtruediv__</item>\n\t\t\t<item>__rfloordiv__</item>\n\t\t\t<item>__rmod__</item>\n\t\t\t<item>__rdivmod__</item>\n\t\t\t<item>__rpow__</item>\n\t\t\t<item>__rlshift__</item>\n\t\t\t<item>__rrshift__</item>\n\t\t\t<item>__rand__</item>\n\t\t\t<item>__rxor__</item>\n\t\t\t<item>__ror__</item>\n\t\t\t<item>__iadd__</item>\n\t\t\t<item>__isub__</item>\n\t\t\t<item>__imul__</item>\n\t\t\t<item>__idiv__</item>\n\t\t\t<item>__itruediv__</item>\n\t\t\t<item>__ifloordiv__</item>\n\t\t\t<item>__imod__</item>\n\t\t\t<item>__ipow__</item>\n\t\t\t<item>__ilshift__</item>\n\t\t\t<item>__irshift__</item>\n\t\t\t<item>__iand__</item>\n\t\t\t<item>__ixor__</item>\n\t\t\t<item>__ior__</item>\n\t\t\t<item>__neg__</item>\n\t\t\t<item>__pos__</item>\n\t\t\t<item>__abs__</item>\n\t\t\t<item>__invert__</item>\n\t\t\t<item>__complex__</item>\n\t\t\t<item>__int__</item>\n\t\t\t<item>__long__</item>\n\t\t\t<item>__float__</item>\n\t\t\t<item>__oct__</item>\n\t\t\t<item>__hex__</item>\n\t\t\t<item>__index__</item>\n\t\t\t<item>__coerce__</item>\n\t\t\t<item>__enter__</item>\n\t\t\t<item>__exit__</item>\n\t\t\t<item>__bytes__</item>\n\t\t\t<item>__format__</item>\n\t\t\t<item>__next__</item>\n\t\t\t<item>__dir__</item>\n\t\t\t<item>__await__</item>\n\t\t\t<item>__aiter__</item>\n\t\t\t<item>__anext__</item>\n\t\t\t<item>__aenter__</item>\n\t\t\t<item>__aexit__</item>\n\t\t</list>\n\t\t<list name=\"exceptions\">\n\t\t\t<!--\n\t\t\t\tExceptions list resources used:\n\t\t\t\t- http://docs.python.org/2.7/library/exceptions.html#exception-hierarchy\n\t\t\t\t- http://docs.python.org/3.4/library/exceptions.html#exception-hierarchy\n\t\t\t-->\n\t\t\t<item>ArithmeticError</item>\n\t\t\t<item>AssertionError</item>\n\t\t\t<item>AttributeError</item>\n\t\t\t<item>BaseException</item>\n\t\t\t<item>BlockingIOError</item>\n\t\t\t<item>BrokenPipeError</item>\n\t\t\t<item>BufferError</item>\n\t\t\t<item>BytesWarning</item>\n\t\t\t<item>ChildProcessError</item>\n\t\t\t<item>ConnectionAbortedError</item>\n\t\t\t<item>ConnectionError</item>\n\t\t\t<item>ConnectionRefusedError</item>\n\t\t\t<item>ConnectionResetError</item>\n\t\t\t<item>DeprecationWarning</item>\n\t\t\t<item>EnvironmentError</item>\n\t\t\t<item>EOFError</item>\n\t\t\t<item>Exception</item>\n\t\t\t<item>FileExistsError</item>\n\t\t\t<item>FileNotFoundError</item>\n\t\t\t<item>FloatingPointError</item>\n\t\t\t<item>FutureWarning</item>\n\t\t\t<item>GeneratorExit</item>\n\t\t\t<item>ImportError</item>\n\t\t\t<item>ImportWarning</item>\n\t\t\t<item>IndentationError</item>\n\t\t\t<item>IndexError</item>\n\t\t\t<item>InterruptedError</item>\n\t\t\t<item>IOError</item>\n\t\t\t<item>IsADirectoryError</item>\n\t\t\t<item>KeyboardInterrupt</item>\n\t\t\t<item>KeyError</item>\n\t\t\t<item>LookupError</item>\n\t\t\t<item>MemoryError</item>\n\t\t\t<item>NameError</item>\n\t\t\t<item>NotADirectoryError</item>\n\t\t\t<item>NotImplementedError</item>\n\t\t\t<item>OSError</item>\n\t\t\t<item>OverflowError</item>\n\t\t\t<item>PendingDeprecationWarning</item>\n\t\t\t<item>PermissionError</item>\n\t\t\t<item>ProcessLookupError</item>\n\t\t\t<item>ReferenceError</item>\n\t\t\t<item>ResourceWarning</item>\n\t\t\t<item>RuntimeError</item>\n\t\t\t<item>RuntimeWarning</item>\n\t\t\t<item>StandardError</item>\n\t\t\t<item>StopIteration</item>\n\t\t\t<item>SyntaxError</item>\n\t\t\t<item>SyntaxWarning</item>\n\t\t\t<item>SystemError</item>\n\t\t\t<item>SystemExit</item>\n\t\t\t<item>TabError</item>\n\t\t\t<item>TimeoutError</item>\n\t\t\t<item>TypeError</item>\n\t\t\t<item>UnboundLocalError</item>\n\t\t\t<item>UnicodeDecodeError</item>\n\t\t\t<item>UnicodeEncodeError</item>\n\t\t\t<item>UnicodeError</item>\n\t\t\t<item>UnicodeTranslateError</item>\n\t\t\t<item>UnicodeWarning</item>\n\t\t\t<item>UserWarning</item>\n\t\t\t<item>ValueError</item>\n\t\t\t<item>Warning</item>\n\t\t\t<item>WindowsError</item>\n\t\t\t<item>ZeroDivisionError</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<keyword attribute=\"Import\" String=\"import\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Definition Keyword\" String=\"defs\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Operator Keyword\" String=\"operators\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Flow Control Keyword\" String=\"flow\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Builtin Function\" String=\"builtinfuncs\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Special Variable\" String=\"specialvars\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Extensions\" String=\"bindings\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Exceptions\" String=\"exceptions\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Overloaders\" String=\"overloaders\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Normal Text\" String=\"[a-zA-Z_][a-zA-Z_0-9]{2,}\" context=\"#stay\"/>\n\n\t\t\t\t<RegExpr attribute=\"Complex\" String=\" ((([0-9]*\\.[0-9]+|[0-9]+\\.)|([0-9]+|([0-9]*\\.[0-9]+|[0-9]+\\.))[eE](\\+|-)?[0-9]+)|[0-9]+)[jJ]\" context=\"#stay\"/>\n\t\t\t\t<Float attribute=\"Float\" context=\"#stay\" />\n\t\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Int\" context=\"Int Suffixes\"/>\n\n\t\t\t\t<RegExpr attribute=\"Int\" String=\" ([0-9]+_)+[0-9]+\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Float\" String=\" ([0-9]+_)+[0-9]+\\.[0-9]+\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Hex\" String=\" [0-9]x([A-F0-9]+_)+[A-F0-9]+\" context=\"#stay\"/>\n\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\"{\" context=\"Dictionary\" beginRegion=\"Dictionary\"/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\"[\" context=\"List\" beginRegion=\"List\"/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\"(\" context=\"Tuple\" beginRegion=\"Tuple\"/>\n\n\t\t\t\t<IncludeRules context=\"CommentVariants\" />\n\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"#\" context=\"Hash comment\"/>\n\n\t\t\t\t<IncludeRules context=\"StringVariants\" />\n\n\t\t\t\t<RegExpr attribute=\"Decorator\" String=\"@[_a-zA-Z][\\._a-zA-Z0-9]*\" firstNonSpace=\"true\"/>\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"+*/%\\|=;\\!&lt;&gt;!^&amp;~-@\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Int Suffixes\" attribute=\"Int\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<StringDetect attribute=\"Int\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"#CheckForString\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<LineContinue attribute=\"Normal Text\" context=\"CheckForStringNext\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"CheckForStringNext\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<LineContinue attribute=\"Normal Text\" context=\"CheckForStringNext\"/>\n\t\t\t\t<IncludeRules context=\"StringVariants\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"StringVariants\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces/>\n\n\t\t\t\t<RegExpr attribute=\"String\" String=\"u?'''\"                insensitive=\"true\" context=\"Triple A-string\" beginRegion=\"Triple A-region\"/>\n\t\t\t\t<RegExpr attribute=\"String\" String=\"u?&quot;&quot;&quot;\" insensitive=\"true\" context=\"Triple Q-string\" beginRegion=\"Triple Q-region\"/>\n\t\t\t\t<RegExpr attribute=\"String\" String=\"u?'\"                  insensitive=\"true\" context=\"Single A-string\"/>\n\t\t\t\t<RegExpr attribute=\"String\" String=\"u?&quot;\"             insensitive=\"true\" context=\"Single Q-string\"/>\n\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"(u?r|ru)'''\"                insensitive=\"true\" context=\"Raw Triple A-string\" beginRegion=\"Triple A-region\"/>\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"(u?r|ru)&quot;&quot;&quot;\" insensitive=\"true\" context=\"Raw Triple Q-string\" beginRegion=\"Triple Q-region\"/>\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"(u?r|ru)'\"                  insensitive=\"true\" context=\"Raw A-string\"/>\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"(u?r|ru)&quot;\"             insensitive=\"true\" context=\"Raw Q-string\"/>\n\n\t\t\t\t<StringDetect attribute=\"F-String\" String=\"f'''\"                insensitive=\"true\" context=\"Triple A-F-String\" beginRegion=\"Triple A-region\"/>\n\t\t\t\t<StringDetect attribute=\"F-String\" String=\"f&quot;&quot;&quot;\" insensitive=\"true\" context=\"Triple Q-F-String\" beginRegion=\"Triple Q-region\"/>\n\t\t\t\t<StringDetect attribute=\"F-String\" String=\"f'\"                  insensitive=\"true\" context=\"Single A-F-String\"/>\n\t\t\t\t<StringDetect attribute=\"F-String\" String=\"f&quot;\"             insensitive=\"true\" context=\"Single Q-F-String\"/>\n\n\t\t\t\t<RegExpr attribute=\"Raw F-String\" String=\"(fr|rf)'''\"                insensitive=\"true\" context=\"Raw Triple A-F-String\" beginRegion=\"Triple A-region\"/>\n\t\t\t\t<RegExpr attribute=\"Raw F-String\" String=\"(fr|rf)&quot;&quot;&quot;\" insensitive=\"true\" context=\"Raw Triple Q-F-String\" beginRegion=\"Triple Q-region\"/>\n\t\t\t\t<RegExpr attribute=\"Raw F-String\" String=\"(fr|rf)'\"                  insensitive=\"true\" context=\"Raw A-F-String\"/>\n\t\t\t\t<RegExpr attribute=\"Raw F-String\" String=\"(fr|rf)&quot;\"             insensitive=\"true\" context=\"Raw Q-F-String\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"CommentVariants\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces/>\n\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"u?'''\"                insensitive=\"true\" firstNonSpace=\"true\" context=\"Triple A-comment\" beginRegion=\"Triple A-region\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"u?&quot;&quot;&quot;\" insensitive=\"true\" firstNonSpace=\"true\" context=\"Triple Q-comment\" beginRegion=\"Triple Q-region\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"u?'\"                  insensitive=\"true\" firstNonSpace=\"true\" context=\"Single A-comment\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"u?&quot;\"             insensitive=\"true\" firstNonSpace=\"true\" context=\"Single Q-comment\"/>\n\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"(u?r|ru)'''\"                insensitive=\"true\" firstNonSpace=\"true\" context=\"Triple A-comment\" beginRegion=\"Triple A-region\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"(u?r|ru)&quot;&quot;&quot;\" insensitive=\"true\" firstNonSpace=\"true\" context=\"Triple Q-comment\" beginRegion=\"Triple Q-region\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"(u?r|ru)'\"                  insensitive=\"true\" firstNonSpace=\"true\" context=\"Single A-comment\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"(u?r|ru)&quot;\"             insensitive=\"true\" firstNonSpace=\"true\" context=\"Single Q-comment\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Dictionary\" attribute=\"Normal Text\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\"}\" context=\"#pop\" endRegion=\"Dictionary\"/>\n\t\t\t\t<IncludeRules context=\"StringVariants\" />\n\t\t\t\t<IncludeRules context=\"Normal\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"List\" attribute=\"Normal Text\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\"]\" context=\"#pop\" endRegion=\"List\"/>\n\t\t\t\t<IncludeRules context=\"StringVariants\" />\n\t\t\t\t<IncludeRules context=\"Normal\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"Tuple\" attribute=\"Normal Text\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop\" endRegion=\"Tuple\"/>\n\t\t\t\t<IncludeRules context=\"StringVariants\" />\n\t\t\t\t<IncludeRules context=\"Normal\" />\n\t\t\t</context>\n\n\t\t\t<!-- Comments -->\n\n\t\t\t<context name=\"Hash comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t\t<IncludeRules context=\"##Modelines\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"Triple A-comment\" attribute=\"Comment\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<StringDetect attribute=\"Comment\" String=\"'''\" context=\"#pop\" endRegion=\"Triple A-region\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"Triple Q-comment\" attribute=\"Comment\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<StringDetect attribute=\"Comment\" String=\"&quot;&quot;&quot;\" context=\"#pop\" endRegion=\"Triple Q-region\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"Single A-comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"'\" context=\"#pop\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"Single Q-comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"&quot;\" context=\"#pop\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n\t\t\t<!-- Strings -->\n\n\t\t\t<!-- format characters -->\n\t\t\t<context name=\"stringformat\" attribute=\"String Substitution\" lineEndContext=\"#stay\">\n\t\t\t\t<!-- Python 2 style. Syntax:\n\t\t\t\t     1. start character '%'\n\t\t\t\t     2. [optional] Mapping key, e.g. '(foo)'\n\t\t\t\t     3. [optional] Conversion flags, one of '#0- +'\n\t\t\t\t     4. [optional] Minimum width, integer or '*'\n\t\t\t\t     5. [optional] Precision, '.' followed by integer or '*'\n\t\t\t\t     6. [optional] Length modifier, one of 'hlL'\n\t\t\t\t     7. conversion type, one of 'crsdiouxXeEfFgG%'\n\t\t\t\t     [Special cases: %prog and %default - see http://docs.python.org/library/optparse.html]\n\t\t\t\t-->\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"%((\\([a-zA-Z0-9_]+\\))?[#0\\- +]?([1-9][0-9]*|\\*)?(\\.([1-9][0-9]*|\\*))?[hlL]?[crsdiouxXeEfFgG%]|prog|default)\" context=\"#stay\"/>\n\t\t\t\t<!-- http://docs.python.org/2/library/string.html#format-string-syntax:\n\t\t\t\t     replacement_field ::=  \"{\" [field_name] [\"!\" conversion] [\":\" format_spec] \"}\"\n\t\t\t\t     field_name        ::=  arg_name (\".\" attribute_name | \"[\" element_index \"]\")*\n\t\t\t\t     arg_name          ::=  [identifier | integer]\n\t\t\t\t     attribute_name    ::=  identifier\n\t\t\t\t     element_index     ::=  integer | index_string\n\t\t\t\t     index_string      ::=  <any source character except \"]\"> +\n\t\t\t\t     conversion        ::=  \"r\" | \"s\"\n\t\t\t\t     format_spec       ::=  [[fill]align][sign][#][0][width][,][.precision][type]\n\t\t\t\t     fill              ::=  <any character>\n\t\t\t\t     align             ::=  \"<\" | \">\" | \"=\" | \"^\"\n\t\t\t\t     sign              ::=  \"+\" | \"-\" | \" \"\n\t\t\t\t     width             ::=  integer\n\t\t\t\t     precision         ::=  integer\n\t\t\t\t     type              ::=  \"b\" | \"c\" | \"d\" | \"e\" | \"E\" | \"f\" | \"F\" | \"g\" | \"G\" | \"n\" | \"o\" | \"s\" | \"x\" | \"X\" | \"%\"\n\t\t\t\t-->\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"\\{(([a-zA-Z0-9_]+|[0-9]+)(\\.[a-zA-Z0-9_]+|\\[[^ \\]]+\\])*)?(![rs])?(:([^}]?[&lt;&gt;=^])?[ +-]?#?0?[0-9]*(\\.[0-9]+)?[bcdeEfFgGnosxX%]?)?\\}\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"String Substitution\" char=\"{\" char1=\"{\" context=\"#stay\" />\n\t\t\t\t<Detect2Chars attribute=\"String Substitution\" char=\"}\" char1=\"}\" context=\"#stay\" />\n\t\t\t</context>\n\n\t\t\t<!-- escape characters -->\n\t\t\t<context name=\"stringescape\" attribute=\"String Char\" lineEndContext=\"#stay\">\n\t\t\t\t<!-- As this highlighting style is for both, Python 2 and 3,\n\t\t\t\twe do not know if a normal string is “unicode” or not. So we\n\t\t\t\t-->\n\t\t\t\t<RegExpr attribute=\"String Char\" String=\"\\\\[\\\\'&quot;abfnrtv]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" String=\"\\\\[0-7]{1,3}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" String=\"\\\\x[0-9A-Fa-f]{2}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" String=\"\\\\u[0-9A-Fa-f]{4}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" String=\"\\\\U[0-9A-Fa-f]{8}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"String Char\" String=\"\\\\N\\{[a-zA-Z0-9\\- ]+\\}\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<!-- f-literals -->\n\t\t\t<context name=\"stringinterpolation\" attribute=\"F-String\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"String Char\" char=\"{\" char1=\"{\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String Substitution\" char=\"{\" context=\"String Interpolation\"/>\n\t\t\t</context>\n\t\t\t<context name=\"String Interpolation\" attribute=\"String Substitution\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Error\" char=\"\\\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"String Substitution\" String=\"(![rs])?(:([^}]?[&lt;&gt;=^])?[ +-]?#?0?[0-9]*(\\.[0-9]+)?[bcdeEfFgGnosxX%]?)?\\}\" context=\"#pop\"/>\n\t\t\t\t<IncludeRules context=\"Normal\"/> <!-- TODO: create expression context instead -->\n\t\t\t</context>\n\n\n\t\t\t<!--\n\t\t\tIt follows a Binary tree of string kinds (not even touching byte literals).\n\t\t\tThe levels are:\n\t\t\t1. triple- vs. single-quoted\n\t\t\t2. apostrophe vs. quotation mark\n\t\t\t3. static vs. interpolated (f-literal)\n\t\t\t4. escaped vs. raw\n\t\t\tAdding byte literals wouldn’t make the current 2⁴ into 2⁵ contexts, as there are no byte f-literals\n\t\t\t-->\n\n\n\t\t\t<!-- Triple-quoted A-strings -->\n\t\t\t<context name=\"Triple A-string\" attribute=\"String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<StringDetect attribute=\"String\" String=\"'''\" context=\"#pop#CheckForString\" endRegion=\"Triple A-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Triple A-string\" attribute=\"Raw String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<StringDetect attribute=\"Raw String\" String=\"'''\" context=\"#pop#CheckForString\" endRegion=\"Triple A-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Triple A-F-String\" attribute=\"F-String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<StringDetect attribute=\"F-String\" String=\"'''\" context=\"#pop#CheckForString\" endRegion=\"Triple A-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Triple A-F-String\" attribute=\"Raw F-String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"Raw F-String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<StringDetect attribute=\"Raw F-String\" String=\"'''\" context=\"#pop#CheckForString\" endRegion=\"Triple A-region\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Triple-quoted Q-strings -->\n\t\t\t<context name=\"Triple Q-string\" attribute=\"String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<StringDetect attribute=\"String\" String=\"&quot;&quot;&quot;\" context=\"#pop#CheckForString\" endRegion=\"Triple Q-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Triple Q-string\" attribute=\"Raw String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<StringDetect attribute=\"Raw String\" String=\"&quot;&quot;&quot;\" context=\"#pop#CheckForString\" endRegion=\"Triple Q-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Triple Q-F-String\" attribute=\"F-String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<StringDetect attribute=\"F-String\" String=\"&quot;&quot;&quot;\" context=\"#pop#CheckForString\" endRegion=\"Triple Q-region\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Triple Q-F-String\" attribute=\"Raw F-String\" lineEndContext=\"#stay\" noIndentationBasedFolding=\"true\">\n\t\t\t\t<HlCStringChar attribute=\"Raw F-String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<StringDetect attribute=\"Raw F-String\" String=\"&quot;&quot;&quot;\" context=\"#pop#CheckForString\" endRegion=\"Triple Q-region\"/>\n\t\t\t</context>\n\n\n\t\t\t<!-- Single-quoted A-strings -->\n\t\t\t<context name=\"Single A-string\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"'\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw A-string\" attribute=\"Raw String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" char=\"'\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Single A-F-String\" attribute=\"F-String\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<DetectChar attribute=\"F-String\" char=\"'\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw A-F-String\" attribute=\"Raw F-String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"Raw F-String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<DetectChar attribute=\"Raw F-String\" char=\"'\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Single-quoted Q-strings -->\n\t\t\t<context name=\"Single Q-string\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Q-string\" attribute=\"Raw String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"Raw String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringformat\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" char=\"&quot;\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Single Q-F-String\" attribute=\"F-String\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"stringescape\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<DetectChar attribute=\"F-String\" char=\"&quot;\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Raw Q-F-String\" attribute=\"Raw F-String\" lineEndContext=\"#stay\">\n\t\t\t\t<HlCStringChar attribute=\"Raw F-String\" context=\"#stay\"/>\n\t\t\t\t<IncludeRules context=\"stringinterpolation\"/>\n\t\t\t\t<DetectChar attribute=\"Raw F-String\" char=\"&quot;\" context=\"#pop#CheckForString\"/>\n\t\t\t</context>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Definition Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Operator Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Flow Control Keyword\" defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Builtin Function\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Special Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Extensions\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Exceptions\" defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Overloaders\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Import\" defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Int\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Hex\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Octal\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Complex\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Raw String\" defStyleNum=\"dsVerbatimString\"/>\n\t\t\t<itemData name=\"F-String\" defStyleNum=\"dsSpecialString\"/>\n\t\t\t<itemData name=\"Raw F-String\" defStyleNum=\"dsVerbatimString\"/>\n\t\t\t<itemData name=\"String Char\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"String Substitution\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Decorator\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n\t\t\t<itemData name=\"Error\" defStyleNum=\"dsError\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<folding indentationsensitive=\"1\" />\n\t\t<emptyLines>\n\t\t\t<emptyLine regexpr=\"(?:\\s+|\\s*#.*)\"/>\n\t\t</emptyLines>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\" position=\"afterwhitespace\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" additionalDeliminator=\"#'\"/>\n\t</general>\n</language>\n\n<!-- kate: space-indent off; indent-width 4; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/q.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"q\" version=\"3\" kateversion=\"2.3\" section=\"Scripts\" extensions=\"*.q\" license=\"LGPLv2+\" author=\"James Schmitz (james.schmitz@gmail.com)\">\n<highlighting>\n    <list name=\"DotQ\">\n      <item>.Q.addmonths</item>\n      <item>.Q.addr</item>\n      <item>.Q.host</item>\n      <item>.Q.chk</item>\n      <item>.Q.cn</item>\n      <item>.Q.dd</item>\n      <item>.Q.dpft</item>\n      <item>.Q.dsftg</item>\n      <item>.Q.def</item>\n      <item>.Q.en</item>\n      <item>.Q.fc</item>\n      <item>.Q.fk</item>\n      <item>.Q.fmt</item>\n      <item>.Q.fs</item>\n      <item>.Q.ft</item>\n      <item>.Q.fu</item>\n      <item>.Q.gc</item>\n      <item>.Q.hdpf</item>\n      <item>.Q.ind</item>\n      <item>.Q.j10</item>\n      <item>.Q.x10</item>\n      <item>.Q.j12</item>\n      <item>.Q.x12</item>\n      <item>.Q.k</item>\n      <item>.Q.l</item>\n      <item>.Q.opt</item>\n      <item>.Q.par</item>\n      <item>.Q.qp</item>\n      <item>.Q.qt</item>\n      <item>.Q.s</item>\n      <item>.Q.ty</item>\n      <item>.Q.v</item>\n      <item>.Q.V</item>\n      <item>.Q.view</item>\n      <item>.Q.w</item>\n      <item>.Q.M</item>\n      <item>.Q.pf</item>\n      <item>.Q.pt</item>\n      <item>.Q.PD</item>\n      <item>.Q.PV</item>\n      <item>.Q.pd</item>\n      <item>.Q.pv</item>\n      <item>.Q.pn</item>\n      <item>.Q.bv</item>\n      <item>.Q.vp</item>\n      <item>.Q.P</item>\n      <item>.Q.D</item>\n      <item>.Q.u</item>\n    </list>\n    <list name=\"qkeywords\">\n      <item>aj</item>\n      <item>aj0</item>\n      <item>all</item>\n      <item>and</item>\n      <item>any</item>\n      <item>asc</item>\n      <item>asof</item>\n      <item>attr</item>\n      <item>avgs</item>\n      <item>ceiling</item>\n      <item>cols</item>\n      <item>cor</item>\n      <item>count</item>\n      <item>cov</item>\n      <item>cross</item>\n      <item>csv</item>\n      <item>cut</item>\n      <item>deltas</item>\n      <item>desc</item>\n      <item>dev</item>\n      <item>differ</item>\n      <item>distinct</item>\n      <item>each</item>\n      <item>ej</item>\n      <item>enlist</item>\n      <item>eval</item>\n      <item>except</item>\n      <item>fby</item>\n      <item>fills</item>\n      <item>first</item>\n      <item>fkeys</item>\n      <item>flip</item>\n      <item>floor</item>\n      <item>from</item>\n      <item>get</item>\n      <item>group</item>\n      <item>gtime</item>\n      <item>hclose</item>\n      <item>hcount</item>\n      <item>hdel</item>\n      <item>hopen</item>\n      <item>hsym</item>\n      <item>iasc</item>\n      <item>idesc</item>\n      <item>ij</item>\n      <item>inter</item>\n      <item>inv</item>\n      <item>key</item>\n      <item>keys</item>\n      <item>lj</item>\n      <item>load</item>\n      <item>lower</item>\n      <item>lsq</item>\n      <item>ltime</item>\n      <item>ltrim</item>\n      <item>mavg</item>\n      <item>maxs</item>\n      <item>mcount</item>\n      <item>md5</item>\n      <item>mdev</item>\n      <item>med</item>\n      <item>meta</item>\n      <item>mins</item>\n      <item>mmax</item>\n      <item>mmin</item>\n      <item>mmu</item>\n      <item>mod</item>\n      <item>msum</item>\n      <item>neg</item>\n      <item>next</item>\n      <item>not</item>\n      <item>null</item>\n      <item>or</item>\n      <item>over</item>\n      <item>parse</item>\n      <item>peach</item>\n      <item>pj</item>\n      <item>plist</item>\n      <item>prds</item>\n      <item>prev</item>\n      <item>prior</item>\n      <item>rand</item>\n      <item>rank</item>\n      <item>ratios</item>\n      <item>raze</item>\n      <item>read0</item>\n      <item>read1</item>\n      <item>reciprocal</item>\n      <item>reverse</item>\n      <item>rload</item>\n      <item>rotate</item>\n      <item>rsave</item>\n      <item>rtrim</item>\n      <item>save</item>\n      <item>scan</item>\n      <item>set</item>\n      <item>show</item>\n      <item>signum</item>\n      <item>ssr</item>\n      <item>string</item>\n      <item>sublist</item>\n      <item>sums</item>\n      <item>sv</item>\n      <item>system</item>\n      <item>tables</item>\n      <item>til</item>\n      <item>trim</item>\n      <item>txf</item>\n      <item>type</item>\n      <item>uj</item>\n      <item>ungroup</item>\n      <item>union</item>\n      <item>update</item>\n      <item>upper</item>\n      <item>upsert</item>\n      <item>value</item>\n      <item>var</item>\n      <item>view</item>\n      <item>views</item>\n      <item>vs</item>\n      <item>where</item>\n      <item>wj</item>\n      <item>wj1</item>\n      <item>xasc</item>\n      <item>xbar</item>\n      <item>xcol</item>\n      <item>xcols</item>\n      <item>xdesc</item>\n      <item>xgroup</item>\n      <item>xkey</item>\n      <item>xlog</item>\n      <item>xprev</item>\n      <item>xrank</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n        <keyword attribute=\"qKeyword\" context=\"#stay\" String=\"qkeywords\" />\n        <keyword attribute=\"DotQfunctions\" context=\"#stay\" String=\"DotQ\" />\n        <IncludeRules context=\"##k\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"qKeyword\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"DotQfunctions\" defStyleNum=\"dsKeyword\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"/\" />\n      <comment name=\"multiLine\" start=\"/\" end=\"\\\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\".\" additionalDeliminator=\"`#'@$&quot;\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/qdocconf.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"QDoc Configuration\"\n          version=\"1\"\n          kateversion=\"5.0\"\n          section=\"Configuration\"\n          extensions=\"*.qdocconf\"\n          author=\"Volker Krause (vkrause@kde.org)\"\n          license=\"MIT\">\n    <highlighting>\n        <list name=\"key-names\">\n            <item>alias</item>\n            <item>buildversion</item>\n            <item>Cpp</item>\n            <item>customFilters</item>\n            <item>defines</item>\n            <item>depends</item>\n            <item>description</item>\n            <item>dita</item>\n            <item>edition</item>\n            <item>endheader</item>\n            <item>exampledirs</item>\n            <item>examples</item>\n            <item>excludedirs</item>\n            <item>excludefiles</item>\n            <item>falsehoods</item>\n            <item>file</item>\n            <item>filterAttributes</item>\n            <item>headerdirs</item>\n            <item>headers</item>\n            <item>HTML</item>\n            <item>imagedirs</item>\n            <item>images</item>\n            <item>indexes</item>\n            <item>indexRoot</item>\n            <item>indexTitle</item>\n            <item>language</item>\n            <item>macro</item>\n            <item>manifestmeta</item>\n            <item>name</item>\n            <item>namespace</item>\n            <item>navigation</item>\n            <item>outputdir</item>\n            <item>outputformats</item>\n            <item>outputprefixes</item>\n            <item>outputsuffixes</item>\n            <item>project</item>\n            <item>projects</item>\n            <item>qhp</item>\n            <item>selectors</item>\n            <item>sortPages</item>\n            <item>sourcedirs</item>\n            <item>sources</item>\n            <item>sources.fileextensions</item>\n            <item>spurious</item>\n            <item>subprojects</item>\n            <item>tabsize</item>\n            <item>tagfile</item>\n            <item>title</item>\n            <item>type</item>\n            <item>url</item>\n            <item>version</item>\n            <item>versionsym</item>\n            <item>virtualFolder</item>\n        </list>\n        <list name=\"function-names\">\n            <item>include</item>\n        </list>\n        <list name=\"selector-names\">\n            <item>namespace</item>\n            <item>class</item>\n            <item>qmltype</item>\n            <item>qmlclass</item>\n            <item>module</item>\n            <item>qmlmodule</item>\n            <item>doc</item>\n            <item>fake</item>\n            <item>group</item>\n            <item>example</item>\n            <item>headerfile</item>\n            <item>page</item>\n            <item>manual</item>\n        </list>\n\n        <contexts>\n            <context name=\"key-context\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar char=\"#\" context=\"comment-context\" column=\"0\"/>\n                <keyword attribute=\"Keyword\" String=\"key-names\"/>\n                <keyword attribute=\"Function\" String=\"function-names\"/>\n                <DetectChar char=\"=\" context=\"value-context\"/>\n                <DetectChar char=\"(\" context=\"argument-context\"/>\n            </context>\n\n            <context name=\"value-context\" attribute=\"Normal Text\" lineEndContext=\"#pop\" lineEmptyContext=\"#pop\">\n                <DetectChar attribute=\"String\" context=\"string-context\" char=\"&quot;\"/>\n                <keyword attribute=\"Selector\" String=\"selector-names\"/>\n                <RegExpr attribute=\"Variable\" String=\"\\$\\w+\"/>\n                <LineContinue char=\"\\\" context=\"#stay\"/>\n            </context>\n\n            <context name=\"argument-context\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"string-context\" char=\"&quot;\"/>\n                <RegExpr attribute=\"Variable\" String=\"\\$\\w+\"/>\n                <DetectChar char=\")\" context=\"#pop\"/>\n                <LineContinue char=\"\\\" context=\"#stay\"/>\n            </context>\n\n            <context name=\"string-context\" attribute=\"String\" lineEndContext=\"#stay\">\n                <HlCStringChar attribute=\"Special Character\"/>\n                <RegExpr attribute=\"Variable\" String=\"\\$\\w+\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n\n            <context name=\"comment-context\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Keyword\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n            <itemData name=\"Special Character\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Selector\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\"/>\n        </comments>\n        <keywords casesensitive=\"1\" weakDeliminator=\"-/\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/qmake.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"QMake\" section=\"Other\" extensions=\"*.pro;*.pri;*.prf;\" mimetype=\"\" priority=\"2\" version=\"5\" kateversion=\"3.4\" author=\"Milian Wolff (mail@milianw.de), Kevin Funk (kevin.funk@kdab.com)\" license=\"MIT\">\n\n<highlighting>\n  <list name=\"variables\">\n    <item>CONFIG</item>\n    <item>DEFINES</item>\n    <item>DEF_FILE</item>\n    <item>DEPENDPATH</item>\n    <item>DEPLOYMENT_PLUGIN</item>\n    <item>DESTDIR</item>\n    <item>DISTFILES</item>\n    <item>DLLDESTDIR</item>\n    <item>FORMS</item>\n    <item>GUID</item>\n    <item>HEADERS</item>\n    <item>ICON</item>\n    <item>IDLSOURCES</item>\n    <item>INCLUDEPATH</item>\n    <item>INSTALLS</item>\n    <item>LEXIMPLS</item>\n    <item>LEXOBJECTS</item>\n    <item>LEXSOURCES</item>\n    <item>LIBS</item>\n    <item>LITERAL_HASH</item>\n    <item>MAKEFILE</item>\n    <item>MAKEFILE_GENERATOR</item>\n    <item>MOC_DIR</item>\n    <item>MSVCPROJ_</item>\n    <item>OBJECTS</item>\n    <item>OBJECTS_DIR</item>\n    <item>OUT_PWD</item>\n    <item>POST_TARGETDEPS</item>\n    <item>PRECOMPILED_HEADER</item>\n    <item>PRE_TARGETDEPS</item>\n    <item>PWD</item>\n    <item>QMAKE</item>\n    <item>QMAKESPEC</item>\n    <item>QMAKE_ACTOOL</item>\n    <item>QMAKE_AIX_SHLIB</item>\n    <item>QMAKE_ANDROID_PLATFORM_INCDIR</item>\n    <item>QMAKE_ANDROID_PLATFORM_LIBDIR</item>\n    <item>QMAKE_APPLE_DEVICE_ARCHS</item>\n    <item>QMAKE_APPLE_SIMULATOR_ARCHS</item>\n    <item>QMAKE_APPLE_TARGETED_DEVICE_FAMILY</item>\n    <item>QMAKE_APPLICATION_BUNDLE_NAME</item>\n    <item>QMAKE_AR</item>\n    <item>QMAKE_ARGS</item>\n    <item>QMAKE_AR_CMD</item>\n    <item>QMAKE_AR_LTCG</item>\n    <item>QMAKE_ASSET_CATALOGS</item>\n    <item>QMAKE_ASSET_CATALOGS_APP_ICON</item>\n    <item>QMAKE_ASSET_CATALOGS_BUILD_PATH</item>\n    <item>QMAKE_ASSET_CATALOGS_INSTALL_PATH</item>\n    <item>QMAKE_BUNDLE_DATA</item>\n    <item>QMAKE_BUNDLE_EXTENSION</item>\n    <item>QMAKE_BUNDLE_NAME</item>\n    <item>QMAKE_BUNDLE_QML</item>\n    <item>QMAKE_CACHE_</item>\n    <item>QMAKE_CC</item>\n    <item>QMAKE_CC_THREAD</item>\n    <item>QMAKE_CD</item>\n    <item>QMAKE_CFLAGS</item>\n    <item>QMAKE_CFLAGS_</item>\n    <item>QMAKE_CFLAGS_APP</item>\n    <item>QMAKE_CFLAGS_AVX</item>\n    <item>QMAKE_CFLAGS_AVX2</item>\n    <item>QMAKE_CFLAGS_AVX512BW</item>\n    <item>QMAKE_CFLAGS_AVX512CD</item>\n    <item>QMAKE_CFLAGS_AVX512DQ</item>\n    <item>QMAKE_CFLAGS_AVX512ER</item>\n    <item>QMAKE_CFLAGS_AVX512F</item>\n    <item>QMAKE_CFLAGS_AVX512IFMA</item>\n    <item>QMAKE_CFLAGS_AVX512PF</item>\n    <item>QMAKE_CFLAGS_AVX512VBMI</item>\n    <item>QMAKE_CFLAGS_AVX512VL</item>\n    <item>QMAKE_CFLAGS_DEBUG</item>\n    <item>QMAKE_CFLAGS_DEPS</item>\n    <item>QMAKE_CFLAGS_DISABLE_LTCG</item>\n    <item>QMAKE_CFLAGS_EGL</item>\n    <item>QMAKE_CFLAGS_EXCEPTIONS_OFF</item>\n    <item>QMAKE_CFLAGS_EXCEPTIONS_ON</item>\n    <item>QMAKE_CFLAGS_HIDESYMS</item>\n    <item>QMAKE_CFLAGS_ISYSTEM</item>\n    <item>QMAKE_CFLAGS_LTCG</item>\n    <item>QMAKE_CFLAGS_LTCG_FATOBJECTS</item>\n    <item>QMAKE_CFLAGS_MP</item>\n    <item>QMAKE_CFLAGS_NEON</item>\n    <item>QMAKE_CFLAGS_OPTIMIZE</item>\n    <item>QMAKE_CFLAGS_OPTIMIZE_FULL</item>\n    <item>QMAKE_CFLAGS_PIC</item>\n    <item>QMAKE_CFLAGS_PRECOMPILE</item>\n    <item>QMAKE_CFLAGS_RELEASE</item>\n    <item>QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO</item>\n    <item>QMAKE_CFLAGS_RTTI_OFF</item>\n    <item>QMAKE_CFLAGS_RTTI_ON</item>\n    <item>QMAKE_CFLAGS_SHLI</item>\n    <item>QMAKE_CFLAGS_SHLIB</item>\n    <item>QMAKE_CFLAGS_SPLIT_SECTIONS</item>\n    <item>QMAKE_CFLAGS_SSE2</item>\n    <item>QMAKE_CFLAGS_SSE3</item>\n    <item>QMAKE_CFLAGS_SSE4_1</item>\n    <item>QMAKE_CFLAGS_SSE4_2</item>\n    <item>QMAKE_CFLAGS_SSSE3</item>\n    <item>QMAKE_CFLAGS_STATIC_LIB</item>\n    <item>QMAKE_CFLAGS_STL_OFF</item>\n    <item>QMAKE_CFLAGS_STL_ON</item>\n    <item>QMAKE_CFLAGS_THREAD</item>\n    <item>QMAKE_CFLAGS_USE_PRECOMPILE</item>\n    <item>QMAKE_CFLAGS_WARN_OFF</item>\n    <item>QMAKE_CFLAGS_WARN_ON</item>\n    <item>QMAKE_CFLAGS_X11</item>\n    <item>QMAKE_CFLAGS_YACC</item>\n    <item>QMAKE_CHK_DIR_EXISTS</item>\n    <item>QMAKE_CHK_EXISTS</item>\n    <item>QMAKE_CLEAN</item>\n    <item>QMAKE_CLFAGS_THREAD</item>\n    <item>QMAKE_COMMON_SANITIZE_CFLAGS</item>\n    <item>QMAKE_COMMON_SANITIZE_CXXFLAGS</item>\n    <item>QMAKE_COMPILER</item>\n    <item>QMAKE_COMPILER_DEFINES</item>\n    <item>QMAKE_CONFIG_CACHE</item>\n    <item>QMAKE_CONFIG_CACHE_USE</item>\n    <item>QMAKE_CONFIG_DEPS</item>\n    <item>QMAKE_CONFIG_LOG</item>\n    <item>QMAKE_CONFIG_TESTS_DIR</item>\n    <item>QMAKE_CONFIG_VERBOSE</item>\n    <item>QMAKE_CONF_</item>\n    <item>QMAKE_COPY</item>\n    <item>QMAKE_COPY_DIR</item>\n    <item>QMAKE_COPY_FILE</item>\n    <item>QMAKE_CPP_MOD_MOC</item>\n    <item>QMAKE_CXX</item>\n    <item>QMAKE_CXXFLAGS</item>\n    <item>QMAKE_CXXFLAGS_</item>\n    <item>QMAKE_CXXFLAGS_APP</item>\n    <item>QMAKE_CXXFLAGS_CXX11</item>\n    <item>QMAKE_CXXFLAGS_CXX14</item>\n    <item>QMAKE_CXXFLAGS_CXX1Z</item>\n    <item>QMAKE_CXXFLAGS_DEBUG</item>\n    <item>QMAKE_CXXFLAGS_DEPS</item>\n    <item>QMAKE_CXXFLAGS_DISABLE_LTCG</item>\n    <item>QMAKE_CXXFLAGS_EXCEPTIONS_OFF</item>\n    <item>QMAKE_CXXFLAGS_EXCEPTIONS_ON</item>\n    <item>QMAKE_CXXFLAGS_GNU</item>\n    <item>QMAKE_CXXFLAGS_GNUCXX11</item>\n    <item>QMAKE_CXXFLAGS_GNUCXX14</item>\n    <item>QMAKE_CXXFLAGS_GNUCXX1Z</item>\n    <item>QMAKE_CXXFLAGS_HIDESYMS</item>\n    <item>QMAKE_CXXFLAGS_LTCG</item>\n    <item>QMAKE_CXXFLAGS_LTCG_FATOBJECTS</item>\n    <item>QMAKE_CXXFLAGS_MP</item>\n    <item>QMAKE_CXXFLAGS_PRECOMPILE</item>\n    <item>QMAKE_CXXFLAGS_RELEASE</item>\n    <item>QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO</item>\n    <item>QMAKE_CXXFLAGS_RTTI_OFF</item>\n    <item>QMAKE_CXXFLAGS_RTTI_ON</item>\n    <item>QMAKE_CXXFLAGS_SHLIB</item>\n    <item>QMAKE_CXXFLAGS_SPLIT_SECTIONS</item>\n    <item>QMAKE_CXXFLAGS_STATIC_LB</item>\n    <item>QMAKE_CXXFLAGS_STATIC_LIB</item>\n    <item>QMAKE_CXXFLAGS_STL_OFF</item>\n    <item>QMAKE_CXXFLAGS_STL_ON</item>\n    <item>QMAKE_CXXFLAGS_THREAD</item>\n    <item>QMAKE_CXXFLAGS_USE_PRECOMPILE</item>\n    <item>QMAKE_CXXFLAGS_WARN_OFF</item>\n    <item>QMAKE_CXXFLAGS_WARN_ON</item>\n    <item>QMAKE_CXXFLAGS_YACC</item>\n    <item>QMAKE_CXX_THREAD</item>\n    <item>QMAKE_DEFAULT_INCDIRS</item>\n    <item>QMAKE_DEFAULT_LIBDIRS</item>\n    <item>QMAKE_DEFINES_</item>\n    <item>QMAKE_DEFINES_WAYLAND</item>\n    <item>QMAKE_DEL_DIR</item>\n    <item>QMAKE_DEL_FILE</item>\n    <item>QMAKE_DEL_TREE</item>\n    <item>QMAKE_DIRLIST_SEP</item>\n    <item>QMAKE_DIR_REPLACE</item>\n    <item>QMAKE_DIR_REPLACE_SANE</item>\n    <item>QMAKE_DIR_SEP</item>\n    <item>QMAKE_DISTCLEAN</item>\n    <item>QMAKE_DLL_PATHS</item>\n    <item>QMAKE_DOCS</item>\n    <item>QMAKE_DOCS_BASE_OUTDIR</item>\n    <item>QMAKE_DOCS_OUTPUTDIR</item>\n    <item>QMAKE_DOCS_TARGET</item>\n    <item>QMAKE_DOCS_TARGETDIR</item>\n    <item>QMAKE_DSYMUTIL</item>\n    <item>QMAKE_DUMPCPP</item>\n    <item>QMAKE_DUMPCPP_EXE</item>\n    <item>QMAKE_DYNAMIC_LIST_FILE</item>\n    <item>QMAKE_EXCLUSIVE_BUILDS</item>\n    <item>QMAKE_EXPORT_CFLAGS</item>\n    <item>QMAKE_EXPORT_CXXFLAGS</item>\n    <item>QMAKE_EXTENSION_PLUGIN</item>\n    <item>QMAKE_EXTENSION_SHLIB</item>\n    <item>QMAKE_EXTENSION_STATICLIB</item>\n    <item>QMAKE_EXTRA_ARGS</item>\n    <item>QMAKE_EXTRA_COMPILERS</item>\n    <item>QMAKE_EXTRA_INCLUDES</item>\n    <item>QMAKE_EXTRA_TARGETS</item>\n    <item>QMAKE_EXTRA_VARIABLES</item>\n    <item>QMAKE_EXT_C</item>\n    <item>QMAKE_EXT_CPP</item>\n    <item>QMAKE_EXT_CPP_MOC</item>\n    <item>QMAKE_EXT_H</item>\n    <item>QMAKE_EXT_H_MOC</item>\n    <item>QMAKE_EXT_JS</item>\n    <item>QMAKE_EXT_LEX</item>\n    <item>QMAKE_EXT_LIBTOOL</item>\n    <item>QMAKE_EXT_MOC</item>\n    <item>QMAKE_EXT_OBJ</item>\n    <item>QMAKE_EXT_OBJC</item>\n    <item>QMAKE_EXT_OBJCXX</item>\n    <item>QMAKE_EXT_PKGCONFIG</item>\n    <item>QMAKE_EXT_PRL</item>\n    <item>QMAKE_EXT_RES</item>\n    <item>QMAKE_EXT_REZ</item>\n    <item>QMAKE_EXT_UI</item>\n    <item>QMAKE_EXT_YACC</item>\n    <item>QMAKE_FAILED_REQUIREMENTS</item>\n    <item>QMAKE_FILE_BASE</item>\n    <item>QMAKE_FILE_IN</item>\n    <item>QMAKE_FILE_IN_NAME</item>\n    <item>QMAKE_FILE_NAME</item>\n    <item>QMAKE_FILE_OUT</item>\n    <item>QMAKE_FILE_OUT_BASE</item>\n    <item>QMAKE_FILE_OUT_PATH</item>\n    <item>QMAKE_FIX_RPATH</item>\n    <item>QMAKE_FRAMEWORKPATH</item>\n    <item>QMAKE_FRAMEWORKPATH_FLAGS</item>\n    <item>QMAKE_FRAMEWORK_BUNDLE_NAME</item>\n    <item>QMAKE_FRAMEWORK_VERSION</item>\n    <item>QMAKE_FUNC_</item>\n    <item>QMAKE_FUNC_FILE_IN_</item>\n    <item>QMAKE_GCC</item>\n    <item>QMAKE_GZIP</item>\n    <item>QMAKE_HOST</item>\n    <item>QMAKE_HPUX_SHLIB</item>\n    <item>QMAKE_H_MOD_MOC</item>\n    <item>QMAKE_IDC</item>\n    <item>QMAKE_IDL</item>\n    <item>QMAKE_INCDIR</item>\n    <item>QMAKE_INCDIR_</item>\n    <item>QMAKE_INCDIR_EGL</item>\n    <item>QMAKE_INCDIR_OPENGL</item>\n    <item>QMAKE_INCDIR_OPENGL_ES2</item>\n    <item>QMAKE_INCDIR_OPENVG</item>\n    <item>QMAKE_INCDIR_POST</item>\n    <item>QMAKE_INCDIR_THREAD</item>\n    <item>QMAKE_INCDIR_WAYLAND</item>\n    <item>QMAKE_INCDIR_X11</item>\n    <item>QMAKE_INCREMENTAL_STYLE</item>\n    <item>QMAKE_INFO_PLIST</item>\n    <item>QMAKE_INSTALL_DIR</item>\n    <item>QMAKE_INSTALL_FILE</item>\n    <item>QMAKE_INSTALL_PROGRAM</item>\n    <item>QMAKE_INTERNAL_INCLUDED_FILES</item>\n    <item>QMAKE_IOS_DEPLOYMENT_TARGET</item>\n    <item>QMAKE_IOS_TARGETED_DEVICE_FAMILY</item>\n    <item>QMAKE_LEX</item>\n    <item>QMAKE_LEXEXTRAFLAGS</item>\n    <item>QMAKE_LEXFLAGS</item>\n    <item>QMAKE_LEXFLAGS_MANGLE</item>\n    <item>QMAKE_LFLAGS</item>\n    <item>QMAKE_LFLAGS_</item>\n    <item>QMAKE_LFLAGS_APP</item>\n    <item>QMAKE_LFLAGS_BSYMBOLIC_FUNC</item>\n    <item>QMAKE_LFLAGS_COMPAT_VERSION</item>\n    <item>QMAKE_LFLAGS_CONSOLE</item>\n    <item>QMAKE_LFLAGS_CXX11</item>\n    <item>QMAKE_LFLAGS_CXX14</item>\n    <item>QMAKE_LFLAGS_CXX1Z</item>\n    <item>QMAKE_LFLAGS_DEBUG</item>\n    <item>QMAKE_LFLAGS_DLL</item>\n    <item>QMAKE_LFLAGS_DYNAMIC_LIST</item>\n    <item>QMAKE_LFLAGS_EGL</item>\n    <item>QMAKE_LFLAGS_EXCEPTIONS_OFF</item>\n    <item>QMAKE_LFLAGS_EXCEPTIONS_ON</item>\n    <item>QMAKE_LFLAGS_EXE</item>\n    <item>QMAKE_LFLAGS_GCSECTIONS</item>\n    <item>QMAKE_LFLAGS_HEADERPAD</item>\n    <item>QMAKE_LFLAGS_HIDESYMS</item>\n    <item>QMAKE_LFLAGS_INCREMENTAL</item>\n    <item>QMAKE_LFLAGS_LTCG</item>\n    <item>QMAKE_LFLAGS_NEW_DTAGS</item>\n    <item>QMAKE_LFLAGS_NOUNDEF</item>\n    <item>QMAKE_LFLAGS_OPENGL</item>\n    <item>QMAKE_LFLAGS_PLUGIN</item>\n    <item>QMAKE_LFLAGS_RELEASE</item>\n    <item>QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO</item>\n    <item>QMAKE_LFLAGS_REL_RPATH</item>\n    <item>QMAKE_LFLAGS_RPATH</item>\n    <item>QMAKE_LFLAGS_RPATHLINK</item>\n    <item>QMAKE_LFLAGS_SHLIB</item>\n    <item>QMAKE_LFLAGS_SONAME</item>\n    <item>QMAKE_LFLAGS_STATIC_LIB</item>\n    <item>QMAKE_LFLAGS_THREAD</item>\n    <item>QMAKE_LFLAGS_USE_GOLD</item>\n    <item>QMAKE_LFLAGS_VERSION</item>\n    <item>QMAKE_LFLAGS_VERSION_SCRIPT</item>\n    <item>QMAKE_LFLAGS_WINDOWS</item>\n    <item>QMAKE_LIB</item>\n    <item>QMAKE_LIBDIR</item>\n    <item>QMAKE_LIBDIR_</item>\n    <item>QMAKE_LIBDIR_EGL</item>\n    <item>QMAKE_LIBDIR_FLAGS</item>\n    <item>QMAKE_LIBDIR_OPENGL</item>\n    <item>QMAKE_LIBDIR_OPENGL_ES2</item>\n    <item>QMAKE_LIBDIR_OPENGL_ES2_DEBUG</item>\n    <item>QMAKE_LIBDIR_OPENGL_ES2_RELEASE</item>\n    <item>QMAKE_LIBDIR_OPENVG</item>\n    <item>QMAKE_LIBDIR_POST</item>\n    <item>QMAKE_LIBDIR_WAYLAND</item>\n    <item>QMAKE_LIBDIR_X11</item>\n    <item>QMAKE_LIBFLAGS</item>\n    <item>QMAKE_LIBFLAGS_DEBUG</item>\n    <item>QMAKE_LIBFLAGS_RELEASE</item>\n    <item>QMAKE_LIBS</item>\n    <item>QMAKE_LIBS_</item>\n    <item>QMAKE_LIBS_COMPAT</item>\n    <item>QMAKE_LIBS_CORE</item>\n    <item>QMAKE_LIBS_DYNLOAD</item>\n    <item>QMAKE_LIBS_EGL</item>\n    <item>QMAKE_LIBS_EXECINFO</item>\n    <item>QMAKE_LIBS_GUI</item>\n    <item>QMAKE_LIBS_NETWORK</item>\n    <item>QMAKE_LIBS_NIS</item>\n    <item>QMAKE_LIBS_OPENGL</item>\n    <item>QMAKE_LIBS_OPENGL_ES1</item>\n    <item>QMAKE_LIBS_OPENGL_ES2</item>\n    <item>QMAKE_LIBS_OPENGL_ES2_DEBUG</item>\n    <item>QMAKE_LIBS_OPENGL_QT</item>\n    <item>QMAKE_LIBS_OPENVG</item>\n    <item>QMAKE_LIBS_PRIVATE</item>\n    <item>QMAKE_LIBS_QT_ENTRY</item>\n    <item>QMAKE_LIBS_THREAD</item>\n    <item>QMAKE_LIBS_WAYLAND_CLIENT</item>\n    <item>QMAKE_LIBS_WAYLAND_SERVER</item>\n    <item>QMAKE_LIBS_X11</item>\n    <item>QMAKE_LIBS_YACC</item>\n    <item>QMAKE_LIBTOOL_INSTALL_REPLACE</item>\n    <item>QMAKE_LIBTOOL_LIBDIR</item>\n    <item>QMAKE_LIB_EXTENSIONS</item>\n    <item>QMAKE_LIB_FLAG</item>\n    <item>QMAKE_LICHECK_TIMESTAMP</item>\n    <item>QMAKE_LINK</item>\n    <item>QMAKE_LINK_C</item>\n    <item>QMAKE_LINK_C_SHLIB</item>\n    <item>QMAKE_LINK_OBJECT_MAX</item>\n    <item>QMAKE_LINK_OBJECT_SCRIPT</item>\n    <item>QMAKE_LINK_SHLIB</item>\n    <item>QMAKE_LINK_SHLIB_CMD</item>\n    <item>QMAKE_LINK_THREAD</item>\n    <item>QMAKE_LN_SHLIB</item>\n    <item>QMAKE_LSB</item>\n    <item>QMAKE_MACOSX_DEPLOYMENT_TARGET</item>\n    <item>QMAKE_MAC_SDK</item>\n    <item>QMAKE_MAC_SDK_PATH</item>\n    <item>QMAKE_MAC_SDK_PLATFORM_PATH</item>\n    <item>QMAKE_MAC_SDK_VERSION</item>\n    <item>QMAKE_MAC_XCODE_SETTINGS</item>\n    <item>QMAKE_MAKE</item>\n    <item>QMAKE_MAKEFILE</item>\n    <item>QMAKE_MKDIR</item>\n    <item>QMAKE_MKDIR_CMD</item>\n    <item>QMAKE_MKSPECS</item>\n    <item>QMAKE_MOC</item>\n    <item>QMAKE_MOC_EXE</item>\n    <item>QMAKE_MOC_OPTIONS</item>\n    <item>QMAKE_MODULE_PATH</item>\n    <item>QMAKE_MOD_LEX</item>\n    <item>QMAKE_MOD_RCC</item>\n    <item>QMAKE_MOD_UIC</item>\n    <item>QMAKE_MOD_YACC</item>\n    <item>QMAKE_MOVE</item>\n    <item>QMAKE_NM</item>\n    <item>QMAKE_NM_LTCG</item>\n    <item>QMAKE_OBJCFLAGS_PRECOMPILE</item>\n    <item>QMAKE_OBJCFLAGS_USE_PRECOMPILE</item>\n    <item>QMAKE_OBJCOPY</item>\n    <item>QMAKE_OBJCXXFLAGS_PRECOMPILE</item>\n    <item>QMAKE_OBJCXXFLAGS_USE_PRECOMPILE</item>\n    <item>QMAKE_OBJC_NAMESPACE_EXCLUDE</item>\n    <item>QMAKE_OBJC_NAMESPACE_EXCLUDE_REGEX</item>\n    <item>QMAKE_OBJC_NAMESPACE_SUFFIX</item>\n    <item>QMAKE_OBJECTIVE_CFLAGS</item>\n    <item>QMAKE_ORIG_TARGET</item>\n    <item>QMAKE_OUTDIR</item>\n    <item>QMAKE_PATH_ENV</item>\n    <item>QMAKE_PBX_BUNDLE_TYPE</item>\n    <item>QMAKE_PBX_PRODUCT_TYPE</item>\n    <item>QMAKE_PCH_ARCH</item>\n    <item>QMAKE_PCH_ARCHS</item>\n    <item>QMAKE_PCH_INPUT</item>\n    <item>QMAKE_PCH_OUTPUT</item>\n    <item>QMAKE_PCH_OUTPUT_</item>\n    <item>QMAKE_PCH_OUTPUT_BASE</item>\n    <item>QMAKE_PCH_OUTPUT_EXT</item>\n    <item>QMAKE_PCH_TEMP_OBJECT</item>\n    <item>QMAKE_PCH_TEMP_SOURCE</item>\n    <item>QMAKE_PKGCONFIG_CFLAGS</item>\n    <item>QMAKE_PKGCONFIG_DESCRIPTION</item>\n    <item>QMAKE_PKGCONFIG_DESTDIR</item>\n    <item>QMAKE_PKGCONFIG_FILE</item>\n    <item>QMAKE_PKGCONFIG_INCDIR</item>\n    <item>QMAKE_PKGCONFIG_INSTALL_REPLACE</item>\n    <item>QMAKE_PKGCONFIG_LIBDIR</item>\n    <item>QMAKE_PKGCONFIG_NAME</item>\n    <item>QMAKE_PKGCONFIG_REQUIRES</item>\n    <item>QMAKE_PKG_CONFIG</item>\n    <item>QMAKE_PLATFORM</item>\n    <item>QMAKE_PLUGIN_BUNDLE_NAME</item>\n    <item>QMAKE_POST_CONFIGURE</item>\n    <item>QMAKE_POST_LINK</item>\n    <item>QMAKE_PREFIX_SHLIB</item>\n    <item>QMAKE_PREFIX_STATICLIB</item>\n    <item>QMAKE_PRE_LINK</item>\n    <item>QMAKE_PRL_INSTALL_REPLACE</item>\n    <item>QMAKE_PRL_LIBS</item>\n    <item>QMAKE_PROJECT_NAME</item>\n    <item>QMAKE_QDBUSXML2CPP</item>\n    <item>QMAKE_QDBUSXML2CPP_EXE</item>\n    <item>QMAKE_QGLTF</item>\n    <item>QMAKE_QGLTF_EXE</item>\n    <item>QMAKE_QLALR</item>\n    <item>QMAKE_QLALRFLAGS</item>\n    <item>QMAKE_QLALR_EXE</item>\n    <item>QMAKE_QMAKE</item>\n    <item>QMAKE_QML_BUNDLE_PATH</item>\n    <item>QMAKE_QTCONF</item>\n    <item>QMAKE_QTWAYLANDSCANNER</item>\n    <item>QMAKE_QTWAYLANDSCANNER_EXE</item>\n    <item>QMAKE_QT_CONFIG</item>\n    <item>QMAKE_QT_MODULE</item>\n    <item>QMAKE_RANLIB</item>\n    <item>QMAKE_RANLIB_LTCG</item>\n    <item>QMAKE_RC</item>\n    <item>QMAKE_RCC</item>\n    <item>QMAKE_RCC_DEP</item>\n    <item>QMAKE_RCC_EXE</item>\n    <item>QMAKE_REL_RPATH_BASE</item>\n    <item>QMAKE_RESOLVED_BUNDLE</item>\n    <item>QMAKE_RESOLVED_TARGET</item>\n    <item>QMAKE_RESOURCE</item>\n    <item>QMAKE_RESOURCE_FLAGS</item>\n    <item>QMAKE_RESOURCE_ROOT</item>\n    <item>QMAKE_REZ</item>\n    <item>QMAKE_RPATHDIR</item>\n    <item>QMAKE_RPATHLINK</item>\n    <item>QMAKE_RPATHLINKDIR</item>\n    <item>QMAKE_RUN_CC</item>\n    <item>QMAKE_RUN_CC_IMP</item>\n    <item>QMAKE_RUN_CC_IMP_BATCH</item>\n    <item>QMAKE_RUN_CXX</item>\n    <item>QMAKE_RUN_CXX_IMP</item>\n    <item>QMAKE_RUN_CXX_IMP_BATCH</item>\n    <item>QMAKE_SANITIZE_ADDRESS_CFLAGS</item>\n    <item>QMAKE_SANITIZE_ADDRESS_CXXFLAGS</item>\n    <item>QMAKE_SANITIZE_ADDRESS_LFLAGS</item>\n    <item>QMAKE_SANITIZE_MEMORY_CFLAGS</item>\n    <item>QMAKE_SANITIZE_MEMORY_CXXFLAGS</item>\n    <item>QMAKE_SANITIZE_MEMORY_LFLAGS</item>\n    <item>QMAKE_SANITIZE_THREAD_CFLAGS</item>\n    <item>QMAKE_SANITIZE_THREAD_CXXFLAGS</item>\n    <item>QMAKE_SANITIZE_THREAD_LFLAGS</item>\n    <item>QMAKE_SANITIZE_UNDEFINED_CFLAGS</item>\n    <item>QMAKE_SANITIZE_UNDEFINED_CXXFLAGS</item>\n    <item>QMAKE_SANITIZE_UNDEFINED_LFLAGS</item>\n    <item>QMAKE_SH</item>\n    <item>QMAKE_SONAME_PREFIX</item>\n    <item>QMAKE_SPEC</item>\n    <item>QMAKE_STREAM_EDITOR</item>\n    <item>QMAKE_STRIP</item>\n    <item>QMAKE_STRIPFLAGS_LIB</item>\n    <item>QMAKE_SUBSTITUTES</item>\n    <item>QMAKE_SUPER_CACHE_</item>\n    <item>QMAKE_SYMBOLIC_LINK</item>\n    <item>QMAKE_SYNCQT</item>\n    <item>QMAKE_SYNCQT_OPTIONS</item>\n    <item>QMAKE_TAR</item>\n    <item>QMAKE_TARGET</item>\n    <item>QMAKE_TARGET_BUNDLE_PREFIX</item>\n    <item>QMAKE_TARGET_COMPANY</item>\n    <item>QMAKE_TARGET_COPYRIGHT</item>\n    <item>QMAKE_TARGET_DEBUG_INFO</item>\n    <item>QMAKE_TARGET_DESCRIPTION</item>\n    <item>QMAKE_TARGET_PRODUCT</item>\n    <item>QMAKE_TVOS_DEPLOYMENT_TARGET</item>\n    <item>QMAKE_UIC</item>\n    <item>QMAKE_UIC_DEP</item>\n    <item>QMAKE_UIC_EXE</item>\n    <item>QMAKE_USE</item>\n    <item>QMAKE_USE_FOR_PRIVATE</item>\n    <item>QMAKE_USE_PRIVATE</item>\n    <item>QMAKE_VAR_OBJECTS_DIR</item>\n    <item>QMAKE_WATCHOS_DEPLOYMENT_TARGET</item>\n    <item>QMAKE_WAYLAND_SCANNER</item>\n    <item>QMAKE_WINDEPLOYQT</item>\n    <item>QMAKE_XARCH_CFLAGS</item>\n    <item>QMAKE_XARCH_CFLAGS_</item>\n    <item>QMAKE_XARCH_LFLAGS</item>\n    <item>QMAKE_XARCH_LFLAGS_</item>\n    <item>QMAKE_XCODE_ARCHS</item>\n    <item>QMAKE_XCODE_CODE_SIGN_IDENTITY</item>\n    <item>QMAKE_XCODE_DEBUG_INFORMATION_FORMAT</item>\n    <item>QMAKE_XCODE_DEVELOPER_PATH</item>\n    <item>QMAKE_XCODE_GCC_VERSION</item>\n    <item>QMAKE_XCODE_LIBRARY_SUFFIX</item>\n    <item>QMAKE_XCODE_LIBRARY_SUFFIX_SETTING</item>\n    <item>QMAKE_XCODE_PREFERENCES_FILE</item>\n    <item>QMAKE_XCODE_SPECDIR</item>\n    <item>QMAKE_XCODE_VERSION</item>\n    <item>QMAKE_XSPEC</item>\n    <item>QMAKE_YACC</item>\n    <item>QMAKE_YACCDECLFLAGS</item>\n    <item>QMAKE_YACCFLAGS</item>\n    <item>QMAKE_YACCFLAGS_MANGLE</item>\n    <item>QMAKE_YACC_HEADER</item>\n    <item>QMAKE_YACC_SOURCE</item>\n    <item>QMAKE_ZIP</item>\n    <item>QT</item>\n    <item>QTPLUGIN</item>\n    <item>QT_MAJOR_VERSION</item>\n    <item>QT_MINOR_VERSION</item>\n    <item>QT_PATCH_VERSION</item>\n    <item>QT_VERSION</item>\n    <item>RCC_DIR</item>\n    <item>RC_CODEPAGE</item>\n    <item>RC_DEFINES</item>\n    <item>RC_FILE</item>\n    <item>RC_ICONS</item>\n    <item>RC_INCLUDEPATH</item>\n    <item>RC_LANG</item>\n    <item>REQUIRES</item>\n    <item>RESOURCES</item>\n    <item>RES_FILE</item>\n    <item>SIGNATURE_FILE</item>\n    <item>SOURCES</item>\n    <item>SUBDIRS</item>\n    <item>TARGET</item>\n    <item>TARGET_</item>\n    <item>TARGET_EXT</item>\n    <item>TEMPLATE</item>\n    <item>TRANSLATIONS</item>\n    <item>UI_DIR</item>\n    <item>VERSION</item>\n    <item>VERSION_PE_HEADER</item>\n    <item>VER_MAJ</item>\n    <item>VER_MIN</item>\n    <item>VER_PAT</item>\n    <item>VPATH</item>\n    <item>WINRT_MANIFEST</item>\n    <item>YACCSOURCES</item>\n    <item>_PRO_FILE_</item>\n    <item>_PRO_FILE_PWD_</item>\n  </list>\n  <list name=\"functions\">\n    <item>CONFIG</item>\n    <item>cache</item>\n    <item>clear</item>\n    <item>contains</item>\n    <item>count</item>\n    <item>debug</item>\n    <item>defined</item>\n    <item>discard_from</item>\n    <item>equals</item>\n    <item>error</item>\n    <item>eval</item>\n    <item>exists</item>\n    <item>export</item>\n    <item>greaterThan</item>\n    <item>if</item>\n    <item>include</item>\n    <item>infile</item>\n    <item>isActiveConfig</item>\n    <item>isEmpty</item>\n    <item>isEqual</item>\n    <item>lessThan</item>\n    <item>load</item>\n    <item>log</item>\n    <item>message</item>\n    <item>mkpath</item>\n    <item>parseJson</item>\n    <item>requires</item>\n    <item>system</item>\n    <item>touch</item>\n    <item>unset</item>\n    <item>warning</item>\n    <item>write_file</item>\n  </list>\n  <list name=\"systems\">\n    <item>build_pass</item>\n    <item>debug</item>\n    <item>debug_and_release</item>\n    <item>linux</item>\n    <item>macx</item>\n    <item>msvc</item>\n    <item>release</item>\n    <item>unix</item>\n    <item>win32</item>\n  </list>\n  <list name=\"keywords\">\n    <item>else</item>\n    <item>for</item>\n    <item>if</item>\n  </list>\n\n  <contexts>\n    <context name=\"normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n      <keyword attribute=\"Predefined Variable\" String=\"variables\" />\n      <keyword attribute=\"Function\" String=\"functions\" />\n      <keyword attribute=\"System\" String=\"systems\" />\n      <keyword attribute=\"Keyword\" String=\"keywords\" />\n      <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\" />\n      <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\$?[a-zA-Z0-9_]+\" />\n      <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\$\\{[^\\}]*\\}\" />\n      <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\$\\[[^\\]]*\\]\" />\n      <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\$\\([^\\)]*\\)\" />\n      <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n      <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n      <DetectChar char=\"&quot;\" attribute=\"String\" context=\"String\" />\n    </context>\n\n    <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n      <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"\\\" />\n      <Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n      <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n    </context>\n    <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      <DetectSpaces />\n      <IncludeRules context=\"##Alerts\" />\n      <DetectIdentifier />\n    </context>\n  </contexts>\n\n  <itemDatas>\n    <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n    <itemData name=\"Predefined Variable\" defStyleNum=\"dsDataType\" bold=\"1\" spellChecking=\"false\" />\n    <itemData name=\"Variable\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n    <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n    <itemData name=\"System\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n    <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n    <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n    <itemData name=\"Backslash Code\" defStyleNum=\"dsKeyword\" bold=\"1\" spellChecking=\"false\" />\n    <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n  </itemDatas>\n</highlighting>\n\n<general>\n  <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n  </comments>\n  <keywords casesensitive=\"1\" />\n</general>\n\n</language>\n<!-- kate: indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/qml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Author: Milian Wolff <mail@milianw.de> -->\n<language name=\"QML\" version=\"7\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.qml;*.qmltypes\"\n          mimetype=\"text/x-qml;application/x-qml\" indenter=\"cstyle\"\n          author=\"Milian Wolff (mail@milianw.de)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"elements\">\n      <!-- see: http://doc.trolltech.com/4.7-snapshot/qmlelements.html -->\n      <item>State</item>\n      <item>PropertyChanges</item>\n      <item>StateGroup</item>\n      <item>ParentChange</item>\n      <item>StateChangeScript</item>\n      <item>AnchorChanges</item>\n      <item>PropertyAnimation</item>\n      <item>NumberAnimation</item>\n      <item>ColorAnimation</item>\n      <item>SequentialAnimation</item>\n      <item>ParallelAnimation</item>\n      <item>PauseAnimation</item>\n      <item>PropertyAction</item>\n      <item>ParentAction</item>\n      <item>ScriptAction</item>\n      <item>Transition</item>\n      <item>SpringFollow</item>\n      <item>EaseFollow</item>\n      <item>Behavior</item>\n      <item>Binding</item>\n      <item>ListModel</item>\n      <item>ListElement</item>\n      <item>VisualItemModel</item>\n      <item>XmlListModel</item>\n      <item>XmlRole</item>\n      <item>DateTimeFormatter</item>\n      <item>NumberFormatter</item>\n      <item>Script</item>\n      <item>Connections</item>\n      <item>Component</item>\n      <item>Timer</item>\n      <item>QtObject</item>\n      <item>Item</item>\n      <item>Rectangle</item>\n      <item>Image</item>\n      <item>BorderImage</item>\n      <item>Text</item>\n      <item>TextInput</item>\n      <item>TextEdit</item>\n      <item>MouseArea</item>\n      <item>FocusScope</item>\n      <item>Flickable</item>\n      <item>Flipable</item>\n      <item>WebView</item>\n      <item>Loader</item>\n      <item>Repeater</item>\n      <item>SystemPalette</item>\n      <item>GraphicsObjectContainer</item>\n      <item>LayoutItem</item>\n      <item>ListView</item>\n      <item>GridView</item>\n      <item>PathView</item>\n      <item>Path</item>\n      <item>PathLine</item>\n      <item>PathQuad</item>\n      <item>PathCubic</item>\n      <item>PathAttribute</item>\n      <item>PathPercent</item>\n      <item>Column</item>\n      <item>Row</item>\n      <item>Grid</item>\n      <item>Scale</item>\n      <item>Rotation</item>\n      <item>Blur</item>\n      <item>Colorize</item>\n      <item>DropShadow</item>\n      <item>Opacity</item>\n      <item>Particles</item>\n      <item>ParticleMotionLinear</item>\n      <item>ParticleMotionGravity</item>\n      <item>ParticleMotionWander</item>\n      <!-- here some other items I find in the examples, we really need a proper list of them... -->\n      <item>Gradient</item>\n      <item>GradientStop</item>\n      <item>MouseRegion</item>\n    </list>\n    <!-- keywords not part of JavaScript -->\n    <list name=\"extra-keywords\">\n      <item>readonly</item>\n    </list>\n    <list name=\"types\">\n      <!-- see: http://doc.trolltech.com/4.7-snapshot/qml-extending-types.html -->\n      <item>string</item>\n      <item>int</item>\n      <item>bool</item>\n      <item>date</item>\n      <item>color</item>\n      <item>url</item>\n      <item>real</item>\n      <item>double</item>\n      <item>var</item>\n      <item>variant</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces/>\n        <WordDetect attribute=\"Import\" context=\"Import\" String=\"import\"/>\n        <keyword attribute=\"Elements\" context=\"#stay\" String=\"elements\" />\n        <keyword attribute=\"Keywords\" String=\"extra-keywords\"/>\n        <WordDetect attribute=\"Signal\" context=\"Signal\" String=\"signal\" />\n        <WordDetect attribute=\"Keywords\" context=\"Property\" String=\"default property\" />\n        <WordDetect attribute=\"Keywords\" context=\"Property\" String=\"property\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <DetectChar attribute=\"Normal Text\" context=\"Object\" char=\"{\" beginRegion=\"Brace\" />\n        <IncludeRules context=\"Normal##JavaScript\" />\n      </context>\n      <context attribute=\"ImportValue\" lineEndContext=\"#pop\" name=\"Import\">\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Property\">\n        <WordDetect attribute=\"Property Type\" context=\"#stay\" String=\"alias\" />\n        <keyword attribute=\"Property Type\" context=\"#stay\" String=\"types\" />\n        <DetectSpaces />\n        <DetectIdentifier />\n        <DetectSpaces />\n        <DetectChar char=\":\" context=\"#pop\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Signal\">\n        <DetectSpaces />\n        <DetectIdentifier />\n        <DetectChar char=\"(\" context=\"SignalParameter\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"SignalParameter\" lineEndContext=\"#pop\">\n        <DetectSpaces />\n        <keyword attribute=\"Property Type\" context=\"#stay\" String=\"types\" />\n        <DetectSpaces />\n        <DetectIdentifier />\n        <DetectSpaces />\n        <DetectChar char=\")\" context=\"#pop\"/>\n      </context>\n      <!-- QML supports multi-line strings, which are not supported by Javascript -->\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <HlCStringChar attribute=\"Escape\" />\n        <RegExpr attribute=\"Escape\" String=\"\\\\u[0-9a-fA-F]{4}\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Object\">\n        <!--DetectIdentifier-->\n        <RegExpr attribute=\"Property Type\" String=\"[a-zA-Z_$][\\w$]*\\s*(?=:)\" />\n        <DetectChar attribute=\"Normal Text\" char=\"}\" endRegion=\"Brace\" context=\"#pop\" />\n        <IncludeRules context=\"Normal\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"  spellChecking=\"false\" />\n      <itemData name=\"Import\"  defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n      <itemData name=\"ImportValue\"  defStyleNum=\"dsString\"  spellChecking=\"false\" />\n      <itemData name=\"Keywords\"  defStyleNum=\"dsKeyword\"  spellChecking=\"false\" />\n      <itemData name=\"Elements\" defStyleNum=\"dsKeyword\" color=\"#008000\" selColor=\"#00ffff\" bold=\"0\" italic=\"0\" spellChecking=\"false\"/>\n      <itemData name=\"Signal\" defStyleNum=\"dsKeyword\" color=\"#0095ff\" selColor=\"#ffffff\" spellChecking=\"false\"/>\n      <itemData name=\"Property Type\" defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"String\"       defStyleNum=\"dsString\" />\n      <itemData name=\"Escape\"       defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n\n<!-- kate: tab-width 2; replace-tabs on; indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/r.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Kate 2.5 (KDE 3.5) highlighting module for R\n\tbased on an earlier version by E.L. Willighagen. Code folding code by Ben Goodrich\n\tversion 2.0: (c) 2006 Thomas Friedrichsmeier, Arne Henningsen, and the RKWard Team\n\tlicense: GPL v2\n\tKate   : http://kate.kde.org/\n\tR      : http://www.r-project.org/\n\tRKWard : http://rkward.kde.org/\n\t-->\n<language version=\"8\" kateversion=\"5.0\" name=\"R Script\" section=\"Scientific\" extensions=\"*.R;*.r;*.S;*.s;*.q\" mimetype=\"\" license=\"GPLv2\">\n<highlighting>\n\n\t<list name=\"controls\">\n\t\t<item>for</item>\n\t\t<item>in</item>\n\t\t<item>next</item>\n\t\t<item>break</item>\n\t\t<item>while</item>\n\t\t<item>repeat</item>\n\t\t<item>if</item>\n\t\t<item>else</item>\n\t\t<item>switch</item>\n\t\t<item>function</item>\n\t</list>\n\t<list name=\"words\">\n\t\t<item>TRUE</item>\n\t\t<item>FALSE</item>\n\t\t<item>NULL</item>\n\t\t<item>NA</item>\n\t\t<item>NA_integer_</item>\n\t\t<item>NA_real_</item>\n\t\t<item>NA_complex_</item>\n\t\t<item>NA_character_</item>\n\t\t<item>Inf</item>\n\t\t<item>NaN</item>\n\t</list>\n\n\t<contexts>\n\t\t<!-- This context is really only good for detecting unexpected closing braces '}'. Since opening braces go to ctx0 (and nesting in there), this context is only active on the base level -->\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"level0\">\n\t\t\t<IncludeRules context=\"CommonRules\"/>\n\n\t\t\t<DetectChar attribute=\"Error\" context=\"#stay\" char=\"}\" />\n\t\t\t<DetectChar attribute=\"Error\" context=\"#stay\" char=\")\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ctx0\">\n\t\t\t<IncludeRules context=\"CommonRules\"/>\n\n\t\t\t<DetectChar attribute=\"Symbol\" context=\"#pop\" char=\"}\" endRegion=\"Brace1\" />\n\t\t\t<DetectChar attribute=\"Error\" context=\"#stay\" char=\")\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"parenthesis\">\n\t\t\t<LineContinue attribute=\"Operator\" context=\"#stay\"/>\n\t\t\t<DetectChar attribute=\"Symbol\" context=\"#pop\" char=\")\"/>\n\n\t\t\t<RegExpr attribute=\"Identifier\" context=\"#stay\" String=\"[a-zA-Z_\\.][0-9a-zA-Z_\\.]*[\\s]*[:]?=(?=([^=]|$))\"/>\n\n\t\t\t<IncludeRules context=\"CommonRules\"/>\n\t\t\t<DetectChar attribute=\"Error\" context=\"#stay\" char=\"}\" />\n\t\t</context>\n\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\">\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t</context>\n\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"string2\">\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Identifier\" lineEndContext=\"#stay\" name=\"backquotedsymbol\">\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"`\"/>\n\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"operator_rhs\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<!-- While there is nothing of interest, stay in the context -->\n\t\t\t<Detect2Chars attribute=\"Headline\" context=\"Headline\" char=\"#\" char1=\"#\"/>\n\t\t\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"#stay\" char=\" \"/>\n\t\t\t<!-- Operators other than +, -, and ! directly after another operator are an error. -->\n\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"(\\*|/|&lt;|&gt;|\\!=|=|\\||&amp;|:|\\^|@|\\$|~)\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Headline\" lineEndContext=\"#pop\" name=\"Headline\">\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t</context>\n\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t</context>\n\n\t\t<!-- This context is not really used, but contains the common rules -->\n\t\t<context name=\"CommonRules\" lineEndContext=\"#stay\" attribute=\"Normal Text\" >\n\t\t\t<DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"string2\" char=\"'\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"backquotedsymbol\" char=\"`\"/>\n\t\t\t<keyword attribute=\"Control Structure\" context=\"#stay\" String=\"controls\"/>\n\t\t\t<keyword attribute=\"Reserved Words\" context=\"#stay\" String=\"words\"/>\n\t\t\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t\t\t<Int attribute=\"Int\" context=\"#stay\"/>\n\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"[a-zA-Z_]+[a-zA-Z_\\.0-9]*(?=[\\s]*[(])\"/>\n\t\t\t<RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\.[a-zA-Z_\\.]+[a-zA-Z_\\.0-9]*(?=[\\s]*[(])\"/>\n\t\t\t<DetectChar attribute=\"Symbol\" context=\"parenthesis\" char=\"(\"/>\n\t\t\t<Detect2Chars attribute=\"Headline\" context=\"Headline\" char=\"#\" char1=\"#\"/>\n\t\t\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n\n\t\t\t<!-- For (assignment) operators, enter a new context operator_rhs to check what follows (generally, that should not be another op) -->\n\t\t\t<RegExpr attribute=\"Assign\" context=\"operator_rhs\" String=\"[&lt;]{1,2}\\-\"/>\n\t\t\t<RegExpr attribute=\"Assign\" context=\"operator_rhs\" String=\"\\-[&gt;]{1,2}\"/>\n\t\t\t<RegExpr attribute=\"Assign\" context=\"operator_rhs\" String=\"=(?!=)\"/>\n\t\t\t<RegExpr attribute=\"Operator\" context=\"operator_rhs\" String=\"(\\+|\\-|\\*{1,2}|/|&lt;=?|&gt;=?|={1,2}|\\!=?|\\|{1,2}|&amp;{1,2}|:{1,3}|\\^|@|\\$|~)\"/>\n\t\t\t<RegExpr attribute=\"Operator\" context=\"operator_rhs\" String=\"%[^%]*%\"/>\n\n\t\t\t<DetectChar attribute=\"Symbol\" context=\"ctx0\" char=\"{\" beginRegion=\"Brace1\" />\n\n\t\t\t<!-- This is needed only to assist variable based indentation -->\n\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"[\" />\n\t\t\t<DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"]\" />\n\t\t</context>\n\t</contexts>\n\n\t<itemDatas>\n\t\t<!-- KDE default colors: http://accessibility.kde.org/oxygen.php?color=white -->\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t<itemData name=\"Identifier\" defStyleNum=\"dsDataType\"/>\n\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"Headline\" defStyleNum=\"dsComment\" color=\"#b00000\" selColor=\"#b00000\" bold=\"1\" italic=\"0\"/> <!-- KDE default color: text 5 -->\n\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Assign\" defStyleNum=\"dsNormal\" color=\"#336366\" selColor=\"#ccc099\" bold=\"1\" italic=\"0\"/> <!-- KDE default color: text 7 -->\n\t\t<itemData name=\"Control Structure\" defStyleNum=\"dsControlFlow\"/>\n\t\t<itemData name=\"Reserved Words\" defStyleNum=\"dsOthers\"/>\n\t\t<itemData name=\"Error\" defStyleNum=\"dsError\"/>\n\t\t<itemData name=\"Operator\" defStyleNum=\"dsOperator\"/>\n\t\t<itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n\t\t<itemData name=\"Int\" defStyleNum=\"dsDecVal\"/>\n\t</itemDatas>\n</highlighting>\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\" end=\"\"/>\n\t</comments>\n\t<keywords casesensitive=\"true\" weakDeliminator=\".\" additionalDeliminator=\"$\"/>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rapidq.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"RapidQ\" version=\"2\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.rqb\" author=\"Tiberiu Dragulinescu\" license=\"LGPL\">\n    <highlighting>\n        <list name=\"keywords\">\n\t\t<item>abs</item>\n\t\t<item>acos</item>\n\t\t<item>asc</item>\n\t\t<item>asin</item>\n\t\t<item>atn</item>\n\t\t<item>atan</item>\n\t\t<item>bin$</item>\n\t\t<item>bind</item>\n\t\t<item>callfunc</item>\n\t\t<item>chdir</item>\n\t\t<item>chr$</item>\n\t\t<item>cint</item>\n\t\t<item>clng</item>\n\t\t<item>const</item>\n\t\t<item>convbase$</item>\n\t\t<item>cos</item>\n\t\t<item>data</item>\n\t\t<item>date$</item>\n\t\t<item>dec</item>\n\t\t<item>def</item>\n\t\t<item>delete$</item>\n\t\t<item>dim</item>\n\t\t<item>dir$</item>\n\t\t<item>direxists</item>\n\t\t<item>doevents</item>\n\t\t<item>end</item>\n\t\t<item>environ</item>\n\t\t<item>environ$</item>\n\t\t<item>exp</item>\n\t\t<item>extractresource</item>\n\t\t<item>field$</item>\n\t\t<item>fileexists</item>\n\t\t<item>fix</item>\n\t\t<item>format$</item>\n\t\t<item>frac</item>\n\t\t<item>hex$</item>\n\t\t<item>iif</item>\n\t\t<item>inc</item>\n\t\t<item>inp</item>\n\t\t<item>insert$</item>\n\t\t<item>instr</item>\n\t\t<item>int</item>\n\t\t<item>kill</item>\n\t\t<item>lcase$</item>\n\t\t<item>left$</item>\n\t\t<item>len</item>\n\t\t<item>log</item>\n\t\t<item>lbound</item>\n\t\t<item>lflush</item>\n\t\t<item>lprint</item>\n\t\t<item>ltrim$</item>\n\t\t<item>messagedlg</item>\n\t\t<item>mid$</item>\n\t\t<item>mkdir</item>\n\t\t<item>out</item>\n\t\t<item>playwav</item>\n\t\t<item>postmessage</item>\n\t\t<item>quicksort</item>\n\t\t<item>randomize</item>\n\t\t<item>read</item>\n\t\t<item>redim</item>\n\t\t<item>rem</item>\n\t\t<item>rename</item>\n\t\t<item>replace$</item>\n\t\t<item>replacesubstr$</item>\n\t\t<item>resource</item>\n\t\t<item>resourcecount</item>\n\t\t<item>restore</item>\n\t\t<item>reverse$</item>\n\t\t<item>rgb</item>\n\t\t<item>right$</item>\n\t\t<item>rinstr</item>\n\t\t<item>rmdir</item>\n\t\t<item>rnd</item>\n\t\t<item>round</item>\n\t\t<item>rtrim$</item>\n\t\t<item>run</item>\n\t\t<item>sendmessage</item>\n\t\t<item>sgn</item>\n\t\t<item>shell</item>\n\t\t<item>showmessage</item>\n\t\t<item>sin</item>\n\t\t<item>sizeof</item>\n\t\t<item>space$</item>\n\t\t<item>sqr</item>\n\t\t<item>str$</item>\n\t\t<item>strf$</item>\n\t\t<item>string$</item>\n\t\t<item>swap</item>\n\t\t<item>tally</item>\n\t\t<item>tan</item>\n\t\t<item>time$</item>\n\t\t<item>timer</item>\n\t\t<item>ubound</item>\n\t\t<item>ucase$</item>\n\t\t<item>val</item>\n\t\t<item>varptr</item>\n\t\t<item>varptr$</item>\n\t\t<item>true</item>\n\t\t<item>false</item>\n\t\t<item>sound</item>\n\t\t<item>call</item>\n\t\t<item>goto</item>\n\t\t<item>gosub</item>\n\t\t<item>sub</item>\n\t\t<item>function</item>\n\t\t<item>declare</item>\n\t\t<item>do</item>\n\t\t<item>doevent</item>\n\t\t<item>loop</item>\n\t\t<item>while</item>\n\t\t<item>wend</item>\n\t\t<item>until</item>\n\t\t<item>if</item>\n\t\t<item>then</item>\n\t\t<item>elseif</item>\n\t\t<item>select</item>\n\t\t<item>case</item>\n\t\t<item>functioni</item>\n\t\t<item>subi</item>\n\t\t<item>create</item>\n\t\t<item>type</item>\n\t\t<item>exit</item>\n\t\t<item>messagebox</item>\n\t\t<item>as</item>\n\t\t<item>string</item>\n\t\t<item>integer</item>\n\t\t<item>word</item>\n\t\t<item>long</item>\n\t\t<item>byte</item>\n\t\t<item>off</item>\n\t\t<item>on</item>\n\t\t<item>else</item>\n\t\t<item>gui</item>\n\t\t<item>for</item>\n\t\t<item>next</item>\n\t\t<item>with</item>\n\t\t<item>mask</item>\n\t\t<item>and</item>\n\t\t<item>or</item>\n\t\t<item>constructor</item>\n\t\t<item>extends</item>\n\t\t<item>defint</item>\n\t\t<item>defstr</item>\n\t\t<item>static</item>\n\t\t<item>public</item>\n\t\t<item>private</item>\n\t\t<item>event</item>\n\t\t<item>single</item>\n\t\t<item>double</item>\n\t\t<item>to</item>\n\t</list>\n        <list name=\"objects\">\n\t\t<item>clipboard</item>\n\t\t<item>printer</item>\n\t\t<item>qbitmap</item>\n\t\t<item>qbutton</item>\n\t\t<item>qcanvas</item>\n\t\t<item>qcheckbox</item>\n\t\t<item>qcombobox</item>\n\t\t<item>qcomport</item>\n\t\t<item>qcoolbtn</item>\n\t\t<item>qdirtree</item>\n\t\t<item>qedit</item>\n\t\t<item>qfilelistbox</item>\n\t\t<item>qfilestream</item>\n\t\t<item>qfont</item>\n\t\t<item>qfontdialog</item>\n\t\t<item>qform</item>\n\t\t<item>qgauge</item>\n\t\t<item>qglassframe</item>\n\t\t<item>qgroupbox</item>\n\t\t<item>qheader</item>\n\t\t<item>qimage</item>\n\t\t<item>qimagelist</item>\n\t\t<item>qlabel</item>\n\t\t<item>qlistbox</item>\n\t\t<item>qlistview</item>\n\t\t<item>qmainmenu</item>\n\t\t<item>qmemorystream</item>\n\t\t<item>qmenuitem</item>\n\t\t<item>qmysql</item>\n\t\t<item>qnotifyicondata</item>\n\t\t<item>qopendialog</item>\n\t\t<item>qoutline</item>\n\t\t<item>qovalbtn</item>\n\t\t<item>qpanel</item>\n\t\t<item>qpopupmenu</item>\n\t\t<item>qradiobutton</item>\n\t\t<item>qrect</item>\n\t\t<item>qregistry</item>\n\t\t<item>qrichedit</item>\n\t\t<item>qsavedialog</item>\n\t\t<item>qscrollbar</item>\n\t\t<item>qsocket</item>\n\t\t<item>qsplitter</item>\n\t\t<item>qstatusbar</item>\n\t\t<item>qstringgrid</item>\n\t\t<item>qstringlist</item>\n\t\t<item>qtabcontrol</item>\n\t\t<item>qtimer</item>\n\t\t<item>qtrackbar</item>\n\t\t<item>qdximagelist</item>\n\t\t<item>qdxscreen</item>\n\t\t<item>qdxtimer</item>\n\t\t<item>qd3dface</item>\n\t\t<item>qd3dframe</item>\n\t\t<item>qd3dlight</item>\n\t\t<item>qd3dmesh</item>\n\t\t<item>qd3dtexture</item>\n\t\t<item>qd3dvector</item>\n\t\t<item>qd3dvisual</item>\n\t\t<item>qd3dwarp</item>\n\t\t<item>application</item>\n\t\t<item>screen</item>\n\t\t<item>command$</item>\n\t\t<item>curdir$</item>\n\t\t<item>sender</item>\n\t</list>\n\t<list name=\"directives\">\n\t\t<item>$apptype</item>\n\t\t<item>$typecheck</item>\n\t\t<item>$include</item>\n\t\t<item>$resource</item>\n\t\t<item>$define</item>\n\t\t<item>$undef</item>\n\t\t<item>$ifdef</item>\n\t\t<item>$ifndef</item>\n\t\t<item>$option</item>\n\t\t<item>$optimize</item>\n\t\t<item>$escapechars</item>\n\t\t<item>$EndIf</item>\n\t</list>\n\t<list name=\"propsandmeths\">\n\t\t<item>left</item>\n\t\t<item>top</item>\n\t\t<item>width</item>\n\t\t<item>height</item>\n\t\t<item>open</item>\n\t\t<item>close</item>\n\t\t<item>readstring</item>\n\t\t<item>readinteger</item>\n\t\t<item>readudt</item>\n\t\t<item>writestring</item>\n\t\t<item>writeinteger</item>\n\t\t<item>writeudt</item>\n\t\t<item>rootkey</item>\n\t\t<item>openkey</item>\n\t\t<item>closekey</item>\n\t\t<item>flat</item>\n\t\t<item>cursor</item>\n\t\t<item>showhint</item>\n\t\t<item>hint</item>\n\t\t<item>transparent</item>\n\t\t<item>caption</item>\n\t\t<item>onclick</item>\n\t\t<item>onkeydown</item>\n\t\t<item>onkeyup</item>\n\t\t<item>onmousedown</item>\n\t\t<item>onmouseup</item>\n\t\t<item>tag</item>\n\t\t<item>color</item>\n\t\t<item>onchange</item>\n\t\t<item>autosize</item>\n\t\t<item>borderstyle</item>\n\t\t<item>wordwrap</item>\n\t\t<item>align</item>\n\t\t<item>alignment</item>\n\t\t<item>font</item>\n\t\t<item>visible</item>\n\t\t<item>enabled</item>\n\t\t<item>readline</item>\n\t\t<item>writeline</item>\n\t\t<item>additems</item>\n\t\t<item>addstrings</item>\n\t\t<item>addstring</item>\n\t\t<item>delitems</item>\n\t\t<item>itemcount</item>\n\t\t<item>itemindex</item>\n\t\t<item>item</item>\n\t\t<item>handle</item>\n\t\t<item>icon</item>\n\t\t<item>bmphandle</item>\n\t\t<item>terminate</item>\n\t\t<item>wndproc</item>\n\t\t<item>onclose</item>\n\t\t<item>ontimer</item>\n\t\t<item>interval</item>\n\t\t<item>name</item>\n\t\t<item>size</item>\n\t\t<item>addstyles</item>\n\t\t<item>hidetitlebar</item>\n\t\t<item>show</item>\n\t\t<item>showmodal</item>\n\t\t<item>text</item>\n\t\t<item>button</item>\n\t\t<item>labelstyle</item>\n\t\t<item>center</item>\n\t\t<item>taborder</item>\n\t\t<item>position</item>\n\t\t<item>delbordericons</item>\n\t\t<item>onshow</item>\n\t\t<item>addbordericons</item>\n\t\t<item>onkeypress</item>\n\t\t<item>key</item>\n\t\t<item>mousex</item>\n\t\t<item>mousey</item>\n\t\t<item>onpaint</item>\n\t\t<item>parent</item>\n\t\t<item>icohandle</item>\n\t\t<item>directory</item>\n\t\t<item>filter</item>\n\t\t<item>execute</item>\n\t\t<item>+</item>\n\t\t<item>filename</item>\n\t\t<item>bevelinner</item>\n\t\t<item>bold</item>\n\t\t<item>checked</item>\n\t\t<item>clear</item>\n\t\t<item>underline</item>\n\t\t<item>maxlength</item>\n\t\t<item>inputmask</item>\n\t\t<item>forecolor</item>\n\t\t<item></item>\n\t\t<item>backcolor</item>\n\t\t<item>deldrivetypes</item>\n\t\t<item>adddrivetypes</item>\n\t\t<item>update</item>\n\t\t<item>bevelouter</item>\n\t\t<item></item>\n\t\t<item>loadfromfile</item>\n\t\t<item>subitem</item>\n\t\t<item>viewstyle</item>\n\t\t<item>rowselect</item>\n\t\t<item>readonly</item>\n\t\t<item>gridlines</item>\n\t\t<item></item>\n\t\t<item>addcolumns</item>\n\t\t<item>oncolumnclick</item>\n\t\t<item>ondblclick</item>\n\t\t<item>addsubitem</item>\n\t\t<item>scrollbars</item>\n\t\t<item></item>\n\t\t<item>addchilditems</item>\n\t\t<item>plaintext</item>\n\t\t<item>selstart</item>\n\t\t<item>sellength</item>\n\t\t<item>sorted</item>\n\t\t<item>ColCount</item>\n\t\t<item></item>\n\t\t<item>onmoved</item>\n\t\t<item>groupindex</item>\n\t\t<item>OnResize</item>\n\t\t<item>RowCount</item>\n\t\t<item>cell</item>\n\t\t<item>TabPosition</item>\n\t\t<item>KeyPreview</item>\n\t\t<item>AddTabs</item>\n\t\t<item>DelTabs</item>\n\t\t<item>HotTrack</item>\n\t\t<item>TabIndex</item>\n\t\t<item>SizeGrip</item>\n\t\t<item>AddPanels</item>\n\t\t<item>Panel</item>\n\t\t<item>DefaultColWidth</item>\n\t\t<item>FixedCols</item>\n\t\t<item>AddOptions</item>\n\t\t<item>Separator</item>\n\t\t<item>Col</item>\n\t\t<item>Row</item>\n\t\t<item>Rectangle</item>\n\t\t<item>FillRect</item>\n\t\t<item>Draw</item>\n\t\t<item>Count</item>\n\t\t<item>Line</item>\n\t\t<item>Circle</item>\n\t\t<item>TextWidth</item>\n\t\t<item>TextHeight</item>\n\t\t<item>TextOut</item>\n\t\t<item>BeginDoc</item>\n\t\t<item>EndDoc</item>\n\t\t<item>CopyRect</item>\n\t\t<item>FilterIndex</item>\n\t\t<item>SaveToStream</item>\n\t\t<item>LoadFromStream</item>\n\t\t<item>PrinterIndex</item>\n\t\t<item>Orientation</item>\n\t\t<item>PageWidth</item>\n\t\t<item>PageHeight</item>\n\t\t<item>Right</item>\n\t\t<item>Bottom</item>\n\t</list>\n        <contexts>\n        <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t<keyword attribute=\"Object\" context=\"#stay\" String=\"objects\"/>\n\t<keyword attribute=\"Directive\" context=\"#stay\" String=\"directives\"/>\n\t<keyword attribute=\"Propormeth\" context=\"#stay\" String=\"propsandmeths\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"'\"/>\n\t<Float attribute=\"Float\" context=\"#stay\" />\n\t<Int attribute=\"Decimal\" context=\"#stay\" />\n        </context>\n        <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n        <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        </context>\n        </contexts>\n        <itemDatas>\n        <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n        <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t<itemData name=\"Object\" defStyleNum=\"dsFunction\"/>\n\t<itemData name=\"Directive\" defStyleNum=\"dsOthers\"/>\n\t<itemData name=\"Propormeth\" defStyleNum=\"dsDataType\"/>\n\t<itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" />\n\t<itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n        <itemData name=\"String\" defStyleNum=\"dsString\"/>\n        <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n        </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"'\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rdoc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"R documentation\" version=\"2\" section=\"Markup\" kateversion=\"5.0\"\n          extensions=\"*.Rd\" author=\"Aaron Puchert\" license=\"MIT\" >\n<highlighting>\n    <list name=\"PreprocessorOptions\">\n        <item>unix</item>\n        <item>windows</item>\n    </list>\n    <list name=\"Formats\">\n        <item>example</item>\n        <item>html</item>\n        <item>latex</item>\n        <item>text</item>\n        <item>TRUE</item>\n        <item>FALSE</item>\n    </list>\n\n    <list name=\"TopLevel-ExpectName\">\n        <item>\\docType</item>\n        <item>\\encoding</item>\n        <item>\\keyword</item>\n        <item>\\name</item>\n    </list>\n    <list name=\"TopLevel-ExpectLatex\">\n        <item>\\author</item>\n        <item>\\concept</item>\n        <item>\\description</item>\n        <item>\\details</item>\n        <item>\\format</item>\n        <item>\\note</item>\n        <item>\\references</item>\n        <item>\\seealso</item>\n        <item>\\source</item>\n        <item>\\title</item>\n    </list>\n    <list name=\"TopLevel-ExpectNameLatex\">\n        <item>\\section</item>\n    </list>\n    <list name=\"TopLevel-ExpectMacroLatex\">\n        <item>\\newcommand</item>\n        <item>\\renewcommand</item>\n    </list>\n    <list name=\"TopLevel-ExpectR\">\n        <item>\\examples</item>\n        <item>\\usage</item>\n    </list>\n    <list name=\"TopLevel-ExpectVerbatim\">\n        <item>\\alias</item>\n        <item>\\Rdversion</item>\n        <item>\\synopsis</item>\n        <item>\\RdOpts</item>\n    </list>\n    <list name=\"TopLevel-ExpectItem2List\">\n        <item>\\arguments</item>\n        <item>\\value</item>\n    </list>\n\n    <!-- For now we highlight these as macros.\n    <list name=\"Latex-Markup\">\n        <item>\\cr</item>\n        <item>\\dots</item>\n        <item>\\ldots</item>\n        <item>\\R</item>\n        <item>\\tab</item>\n    </list>\n    -->\n    <list name=\"Latex-ExpectLatex\">\n        <item>\\acronym</item>\n        <item>\\bold</item>\n        <item>\\cite</item>\n        <item>\\command</item>\n        <item>\\dfn</item>\n        <item>\\dQuote</item>\n        <item>\\emph</item>\n        <item>\\file</item>\n        <item>\\linkS4class</item>\n        <item>\\pkg</item>\n        <item>\\sQuote</item>\n        <item>\\strong</item>\n        <item>\\var</item>\n    </list>\n    <list name=\"Latex-ExpectNameLatex\">\n        <item>\\enc</item>\n        <item>\\method</item>\n        <item>\\S3method</item>\n        <item>\\S4method</item>\n    </list>\n    <list name=\"Latex-ExpectNameLatex-Section\">\n        <item>\\subsection</item>\n    </list>\n    <list name=\"Latex-ExpectMacroLatex\">\n        <item>\\newcommand</item>\n        <item>\\renewcommand</item>\n    </list>\n    <list name=\"Latex-ExpectItemList\">\n        <item>\\enumerate</item>\n        <item>\\itemize</item>\n    </list>\n    <list name=\"ItemList-Item\">\n        <item>\\item</item>\n    </list>\n    <list name=\"Latex-ExpectItem2List\">\n        <item>\\describe</item>\n    </list>\n    <list name=\"Latex-ExpectIf\">\n        <item>\\if</item>\n        <item>\\ifelse</item>\n    </list>\n    <list name=\"Latex-ExpectRLike\">\n        <item>\\code</item>\n    </list>\n    <list name=\"Latex-ExpectVerbatim\">\n        <item>\\email</item>\n        <item>\\env</item>\n        <item>\\kbd</item>\n        <item>\\option</item>\n        <item>\\out</item>\n        <item>\\preformatted</item>\n        <item>\\samp</item>\n        <item>\\url</item>\n        <item>\\verb</item>\n        <item>\\deqn</item>\n        <item>\\eqn</item>\n    </list>\n    <list name=\"Latex-ExpectVerbatimLatex\">\n        <item>\\tabular</item>\n        <item>\\href</item>\n        <item>\\figure</item>\n    </list>\n    <list name=\"Latex-ExpectOptionName\">\n        <item>\\link</item>\n    </list>\n    <list name=\"Latex-ExpectOptionR\">\n        <item>\\Sexpr</item>\n    </list>\n\n    <list name=\"R-ExpectRLike\">\n        <item>\\dontrun</item>\n        <item>\\special</item>\n        <item>\\v</item>\n        <item>\\var</item>\n    </list>\n    <list name=\"R-ExpectNameLatex\">\n        <item>\\method</item>\n        <item>\\S3method</item>\n        <item>\\S4method</item>\n    </list>\n    <list name=\"R-ExpectOptionName\">\n        <item>\\l</item>\n        <item>\\link</item>\n    </list>\n    <list name=\"R-ExpectR\">\n        <item>\\dontshow</item>\n        <item>\\donttest</item>\n        <item>\\testonly</item>\n    </list>\n\n    <contexts>\n        <context name=\"TopLevel\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n\n            <keyword String=\"TopLevel-ExpectName\" attribute=\"Section\" context=\"ExpectName\"/>\n            <keyword String=\"TopLevel-ExpectLatex\" attribute=\"Section\" context=\"ExpectLatex\"/>\n            <keyword String=\"TopLevel-ExpectNameLatex\" attribute=\"Section\" context=\"ExpectNameLatex\"/>\n            <keyword String=\"TopLevel-ExpectMacroLatex\" attribute=\"Markup\" context=\"ExpectMacroLatex\"/>\n            <keyword String=\"TopLevel-ExpectR\" attribute=\"Section\" context=\"ExpectR\"/>\n            <keyword String=\"TopLevel-ExpectVerbatim\" attribute=\"Section\" context=\"ExpectVerbatim\"/>\n            <keyword String=\"TopLevel-ExpectItem2List\" attribute=\"Section\" context=\"ExpectItem2List\"/>\n        </context>\n\n        <!-- Common rules: only included in other contexts -->\n        <context name=\"Common\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectSpaces/>\n            <DetectChar char=\"%\" attribute=\"Comment\" context=\"Comment\"/>\n\n            <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Escape\"/>\n            <Detect2Chars char=\"\\\" char1=\"%\" attribute=\"Escape\"/>\n            <Detect2Chars char=\"\\\" char1=\"{\" attribute=\"Escape\"/>\n            <Detect2Chars char=\"\\\" char1=\"}\" attribute=\"Escape\"/>\n\n            <StringDetect String=\"#ifdef\" firstNonSpace=\"true\" attribute=\"Preprocessor\"\n                            context=\"PreprocessorCondition\" beginRegion=\"Preprocessor\"/>\n            <StringDetect String=\"#ifndef\" firstNonSpace=\"true\" attribute=\"Preprocessor\"\n                            context=\"PreprocessorCondition\" beginRegion=\"Preprocessor\"/>\n            <StringDetect String=\"#endif\" firstNonSpace=\"true\" attribute=\"Preprocessor\"\n                            context=\"Comment\" endRegion=\"Preprocessor\"/>\n        </context>\n\n        <!-- Contexts where we expect certain arguments -->\n        <context name=\"ExpectName\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!Name\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectLatex\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!Latex\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectItemList\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!ItemList\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectItem2List\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!Item2List\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectNameLatex\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!NameLatex\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectMacroLatex\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!MacroLatex\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectLatexLatex\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!LatexLatex\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectR\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!R\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectRLike\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!RLike\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectVerbatim\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!Verbatim\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectVerbatimLatex\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!VerbatimLatex\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectOptionName\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!Name\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"[\" attribute=\"Brace\" context=\"#pop!OptionName\" beginRegion=\"Bracket\"/>\n            <RegExpr String=\"[^{[]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectOptionR\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!R\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"[\" attribute=\"Brace\" context=\"#pop!OptionR\" beginRegion=\"Bracket\"/>\n            <RegExpr String=\"[^{[]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n        <context name=\"ExpectIf\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"#pop!If\" beginRegion=\"Brace\"/>\n            <RegExpr String=\"[^{]*\" attribute=\"Error\" context=\"#pop\"/>\n        </context>\n\n        <!-- The actual arguments -->\n        <context name=\"Latex\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Latex\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\" endRegion=\"Brace\"/>\n\n            <keyword String=\"Latex-ExpectLatex\" attribute=\"Markup\" context=\"ExpectLatex\"/>\n            <keyword String=\"Latex-ExpectNameLatex\" attribute=\"Markup\" context=\"ExpectNameLatex\"/>\n            <keyword String=\"Latex-ExpectNameLatex-Section\" attribute=\"Section\" context=\"ExpectNameLatex\"/>\n            <keyword String=\"Latex-ExpectMacroLatex\" attribute=\"Markup\" context=\"ExpectMacroLatex\"/>\n            <keyword String=\"Latex-ExpectItemList\" attribute=\"Markup\" context=\"ExpectItemList\"/>\n            <keyword String=\"Latex-ExpectItem2List\" attribute=\"Markup\" context=\"ExpectItem2List\"/>\n            <keyword String=\"Latex-ExpectIf\" attribute=\"Markup\" context=\"ExpectIf\"/>\n            <keyword String=\"Latex-ExpectRLike\" attribute=\"Markup\" context=\"ExpectRLike\"/>\n            <keyword String=\"Latex-ExpectVerbatim\" attribute=\"Markup\" context=\"ExpectVerbatim\"/>\n            <keyword String=\"Latex-ExpectVerbatimLatex\" attribute=\"Markup\" context=\"ExpectVerbatimLatex\"/>\n            <keyword String=\"Latex-ExpectOptionName\" attribute=\"Markup\" context=\"ExpectOptionName\"/>\n            <keyword String=\"Latex-ExpectOptionR\" attribute=\"Markup\" context=\"ExpectOptionR\"/>\n\n            <RegExpr String=\"\\\\[A-Za-z][A-Za-z0-9]*\" attribute=\"UserDefinedMacro\"/>\n            <RegExpr String=\"#[1-9]\" attribute=\"UserDefinedMacroArgument\"/>\n        </context>\n        <context name=\"ItemList\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Item2List\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\" endRegion=\"Brace\"/>\n            <keyword String=\"ItemList-Item\" attribute=\"Markup\"/>\n            <IncludeRules context=\"Latex\"/>\n        </context>\n        <context name=\"Item2List\" attribute=\"NormalText\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <keyword String=\"ItemList-Item\" attribute=\"Markup\" context=\"ExpectLatexLatex\"/>\n            <IncludeRules context=\"Latex\"/>\n        </context>\n        <context name=\"Name\" attribute=\"ItemName\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <RegExpr String=\"\\\\[A-Za-z][A-Za-z0-9]*\" attribute=\"UserDefinedMacro\"/>\n            <RegExpr String=\"#[1-9]\" attribute=\"UserDefinedMacroArgument\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Name\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\" endRegion=\"Brace\"/>\n        </context>\n        <context name=\"NameLatex\" attribute=\"ItemName\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <RegExpr String=\"\\\\[A-Za-z][A-Za-z0-9]*\" attribute=\"UserDefinedMacro\"/>\n            <RegExpr String=\"#[1-9]\" attribute=\"UserDefinedMacroArgument\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Latex\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop!ExpectLatex\" endRegion=\"Brace\"/>\n        </context>\n        <context name=\"MacroLatex\" attribute=\"UserDefinedMacro\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop!ExpectLatex\" endRegion=\"Brace\"/>\n        </context>\n        <context name=\"LatexLatex\" attribute=\"ItemName\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop!ExpectLatex\" endRegion=\"Brace\"/>\n            <IncludeRules context=\"Latex\"/>\n        </context>\n        <context name=\"R\" attribute=\"RSource\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"R\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\" endRegion=\"Brace\"/>\n            <keyword String=\"R-ExpectR\" attribute=\"Markup\" context=\"ExpectR\"/>\n            <keyword String=\"R-ExpectRLike\" attribute=\"Markup\" context=\"ExpectRLike\"/>\n            <keyword String=\"R-ExpectNameLatex\" attribute=\"Markup\" context=\"ExpectNameLatex\"/>\n            <keyword String=\"R-ExpectOptionName\" attribute=\"Markup\" context=\"ExpectOptionName\"/>\n            <IncludeRules context=\"level0##R Script\"/>\n        </context>\n        <context name=\"RLike\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"RLike\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\" endRegion=\"Brace\"/>\n            <keyword String=\"R-ExpectRLike\" attribute=\"Markup\" context=\"ExpectRLike\"/>\n            <keyword String=\"R-ExpectNameLatex\" attribute=\"Markup\" context=\"ExpectNameLatex\"/>\n            <keyword String=\"R-ExpectOptionName\" attribute=\"Markup\" context=\"ExpectOptionName\"/>\n        </context>\n        <context name=\"Verbatim\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Verbatim\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\" endRegion=\"Brace\"/>\n        </context>\n        <context name=\"VerbatimLatex\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Verbatim\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop!ExpectLatex\" endRegion=\"Brace\"/>\n        </context>\n        <context name=\"OptionName\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Verbatim\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"]\" attribute=\"Brace\" context=\"#pop!ExpectName\" endRegion=\"Bracket\"/>\n            <DetectChar char=\"}\" attribute=\"Error\" context=\"#pop!ExpectName\" endRegion=\"Bracket\"/>\n        </context>\n        <context name=\"OptionR\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <DetectChar char=\"{\" attribute=\"Brace\" context=\"Verbatim\" beginRegion=\"Brace\"/>\n            <DetectChar char=\"]\" attribute=\"Brace\" context=\"#pop!ExpectR\" endRegion=\"Bracket\"/>\n            <DetectChar char=\"}\" attribute=\"Error\" context=\"#pop!ExpectR\" endRegion=\"Bracket\"/>\n        </context>\n        <context name=\"If\" attribute=\"Verbatim\" lineEndContext=\"#stay\">\n            <IncludeRules context=\"Common\"/>\n            <keyword String=\"Formats\" attribute=\"Builtin\"/>\n            <DetectChar char=\"}\" attribute=\"Brace\" context=\"#pop\" endRegion=\"Brace\"/>\n        </context>\n\n        <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n            <IncludeRules context=\"##Alerts\"/>\n        </context>\n\n        <context name=\"PreprocessorCondition\" attribute=\"Preprocessor\" lineEndContext=\"#pop\">\n            <keyword String=\"PreprocessorOptions\" attribute=\"Builtin\"/>\n        </context>\n    </contexts>\n\n    <itemDatas>\n        <itemData name=\"NormalText\" defStyleNum=\"dsNormal\"/>\n        <itemData name=\"RSource\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n        <itemData name=\"Brace\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n        <itemData name=\"Section\" defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n        <itemData name=\"Markup\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n        <itemData name=\"UserDefinedMacro\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n        <itemData name=\"UserDefinedMacroArgument\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n        <itemData name=\"ItemName\" defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n        <itemData name=\"Escape\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n        <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n        <itemData name=\"Builtin\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n        <itemData name=\"Verbatim\" defStyleNum=\"dsVerbatimString\" spellChecking=\"false\"/>\n        <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n        <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n    </itemDatas>\n</highlighting>\n<general>\n    <keywords weakDeliminator=\"\\\" wordWrapDeliminator=\",{}[]\"/>\n    <comments>\n        <comment name=\"singleLine\" start=\"%\"/>\n    </comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/relaxng.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY qname    \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&qname;);\">\n]>\n\n<!--\n  Kate syntax highlighting for RELAX NG\n  2007 by Thomas Schraitle (tom_schr AT web DOT de)\n  Derived from the XSLT syntax file from Peter Lammich\n  Published under the LGPL\n\n  TODO:\n   - More modularization (how?)\n   - Namespace rules\n-->\n\n<language version=\"3\"\n          kateversion=\"2.4\"\n          name=\"RELAX NG\"\n          section=\"Markup\"\n          extensions=\"*.rng;*.RNG\"\n          license=\"LGPL\"\n          author=\"Thomas Schraitle (tom_schr AT web DOT de)\">\n  <highlighting>\n    <list name=\"relaxngnames\">\n      <item>anyName</item>\n      <item>attribute</item>\n      <item>choice</item>\n      <item>data</item>\n      <item>define</item>\n      <item>div</item>\n      <item>element</item>\n      <item>empty</item>\n      <item>except</item>\n      <item>externalRef</item>\n      <item>grammar</item>\n      <item>group</item>\n      <item>include</item>\n      <item>interleave</item>\n      <item>list</item>\n      <item>mixed</item>\n      <item>name</item>\n      <item>notAllowed</item>\n      <item>nsName</item>\n      <item>oneOrMore</item>\n      <item>optional</item>\n      <item>param</item>\n      <item>parentRef</item>\n      <item>ref</item>\n      <item>start</item>\n      <item>text</item>\n      <item>value</item>\n      <item>zeroOrMore</item>\n    </list>\n\n    <contexts>\n      <context name=\"normalText\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <StringDetect attribute=\"Comment\" context=\"comment\" String=\"&lt;!--\" beginRegion=\"comment\"/>\n         <DetectChar attribute=\"Tag\" context=\"tagname\" char=\"&lt;\" />\n         <RegExpr attribute=\"Entity Reference\" context=\"#stay\" String=\"&entref;\" />\n      </context>\n\n      <context name=\"detectEntRef\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <RegExpr attribute=\"Entity Reference\" context=\"#stay\" String=\"&entref;\" />\n      </context>\n\n      <context name=\"tagname\" attribute=\"Tag\" lineEndContext=\"#stay\">\n         <keyword attribute=\"RELAX NG Tag\" context=\"attributes\" String=\"relaxngnames\" />\n         <RegExpr attribute=\"Attribute\" context=\"attributes\" String=\"\\s*\" />\n         <DetectChar attribute=\"Tag\" context=\"#pop\" char=\"&gt;\" />\n      </context>\n\n      <context name=\"attributes\" attribute=\"Attribute\" lineEndContext=\"#stay\">\n         <Detect2Chars attribute=\"Tag\" context=\"#pop#pop\" char=\"/\" char1=\"&gt;\" />\n         <DetectChar attribute=\"Tag\" context=\"#pop#pop\" char=\"&gt;\" />\n         <RegExpr attribute=\"Normal Text\" context=\"attrValue\" String=\"\\s*=\\s*\" />\n      </context>\n\n      <context name=\"attrValue\" attribute=\"Invalid\" lineEndContext=\"#stay\">\n         <Detect2Chars attribute=\"Invalid\" context=\"#pop#pop#pop\" char=\"/\" char1=\"&gt;\" />\n         <DetectChar attribute=\"Invalid\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n         <DetectChar attribute=\"Attribute Value\" context=\"string\" char=\"&quot;\" />\n      </context>\n\n      <context name=\"string\" attribute=\"Attribute Value\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Attribute Value\" context=\"#pop#pop\" char=\"&quot;\" />\n         <IncludeRules context=\"detectEntRef\" />\n      </context>\n\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n        <StringDetect attribute=\"Comment\" context=\"#pop\"  String=\"--&gt;\" endRegion=\"comment\"/>\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"-(-(?!-&gt;))+\"/>\n        <IncludeRules context=\"##Alerts\"/>\n        <DetectIdentifier/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Tag\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Entity Reference\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Invalid\" defStyleNum=\"dsError\"/>\n      <itemData name=\"Attribute\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Attribute Value\" defStyleNum=\"dsString\" color=\"#800000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"RELAX NG Tag\" defStyleNum=\"dsKeyword\" color=\"#000080\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Error\" defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\"-:\" additionalDeliminator=\"&quot;{}\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/relaxngcompact.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"RelaxNG-Compact\" version=\"1\" kateversion=\"2.4\" section=\"Markup\" extensions=\"*.rnc\" casesensitive=\"1\" author=\"Rintze Zelle\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"Keywords\">\n      <item>default</item>\n      <item>datatypes</item>\n      <item>div</item>\n      <item>empty</item>\n      <item>external</item>\n      <item>grammar</item>\n      <item>include</item>\n      <item>inherit</item>\n      <item>list</item>\n      <item>mixed</item>\n      <item>namespace</item>\n      <item>notAllowed</item>\n      <item>parent</item>\n      <item>start</item>\n      <item>token</item>      \n    </list>\n    <list name=\"Node Names\">\n      <item>attribute</item>\n      <item>element</item>    \n    </list>    \n    <list name=\"Datatypes\">\n      <item>string</item>\n      <item>text</item>    \n      <item>xsd:anyURI</item>\n      <item>xsd:base64Binary</item>\n      <item>xsd:boolean</item>\n      <item>xsd:byte</item>\n      <item>xsd:date</item>\n      <item>xsd:dateTime</item>\n      <item>xsd:decimal</item>\n      <item>xsd:double</item>\n      <item>xsd:duration</item>\n      <item>xsd:ENTITIES</item>\n      <item>xsd:ENTITY</item>\n      <item>xsd:float</item>\n      <item>xsd:gDay</item>\n      <item>xsd:gMonth</item>\n      <item>xsd:gMonthDay</item>\n      <item>xsd:gYear</item>\n      <item>xsd:gYearMonth</item>\n      <item>xsd:hexBinary</item>\n      <item>xsd:ID</item>\n      <item>xsd:IDREF</item>\n      <item>xsd:IDREFS</item>\n      <item>xsd:int</item>\n      <item>xsd:integer</item>\n      <item>xsd:language</item>\n      <item>xsd:long</item>\n      <item>xsd:Name</item>\n      <item>xsd:NCName</item>\n      <item>xsd:negativeInteger</item>\n      <item>xsd:NMTOKEN</item>\n      <item>xsd:NMTOKENS</item>\n      <item>xsd:nonNegativeInteger</item>\n      <item>xsd:nonPositiveInteger</item>\n      <item>xsd:normalizedString</item>\n      <item>xsd:NOTATION</item>\n      <item>xsd:positiveInteger</item>\n      <item>xsd:QName</item>\n      <item>xsd:short</item>\n      <item>xsd:string</item> \n      <item>xsd:time</item>\n      <item>xsd:token</item>\n      <item>xsd:unsignedByte</item>\n      <item>xsd:unsignedInt</item>\n      <item>xsd:unsignedLong</item>\n      <item>xsd:unsignedShort</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n        <DetectChar attribute=\"Comments\" char=\"#\" firstNonSpace=\"true\" context=\"Comments\"/>\n\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"String\" />\n\t<keyword attribute=\"Keywords\" context=\"#stay\" String=\"Keywords\" />\n\t<keyword attribute=\"Keywords\" context=\"Node Names\" String=\"Node Names\" />\n\t<keyword attribute=\"Datatypes\" context=\"#stay\" String=\"Datatypes\" />\n\t<RegExpr attribute=\"Definitions\" context=\"Definitions\" String=\"[\\w\\.-]+[\\s]+=\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Comments\" lineEndContext=\"#pop\" name=\"Comments\" >\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\" >\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"Node Names\" lineEndContext=\"#pop\" name=\"Node Names\" >\n        <DetectChar attribute=\"Node Names\" context=\"#pop\" char=\"{\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Definitions\" lineEndContext=\"#pop\" name=\"Definitions\" >\n        <DetectChar attribute=\"Definitions\" context=\"#pop#pop\" char=\"=\" lookAhead=\"true\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comments\" defStyleNum=\"dsComment\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Keywords\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Datatypes\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Node Names\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Definitions\" defStyleNum=\"dsFunction\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords weakDeliminator=\"-:\"/>\n  </general>\n</language>"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/replicode.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\nThis file is part of KDE's kate project.\n\ncopyright   : (C) 2014 by Martin Sandsmark\nemail       : martin.sandsmark@kde.org\n\nThis file is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n-->\n<language version=\"4\" kateversion=\"2.4\" name=\"Replicode\" section=\"Scientific\" extensions=\"*.replicode\" author=\"Martin Sandsmark\" license=\"GPLv2+\">\n    <highlighting>\n        <list name=\"operators\">\n            <item>_now</item>\n            <item>equ</item>\n            <item>neq</item>\n            <item>gtr</item>\n            <item>lsr</item>\n            <item>gte</item>\n            <item>lse</item>\n            <item>add</item>\n            <item>sub</item>\n            <item>mul</item>\n            <item>div</item>\n            <item>dis</item>\n            <item>ln</item>\n            <item>exp</item>\n            <item>log</item>\n            <item>e10</item>\n            <item>syn</item>\n            <item>red</item>\n            <item>rnd</item>\n            <item>fvw</item>\n        </list>\n        <list name=\"builtin_classes\">\n            <item>view</item>\n            <item>grp_view</item>\n            <item>pgm_view</item>\n            <item>_obj</item>\n            <item>ptn</item>\n            <item>|ptn</item>\n            <item>pgm</item>\n            <item>|pgm</item>\n            <item>_grp</item>\n            <item>grp</item>\n            <item>_fact</item>\n            <item>fact</item>\n            <item>|fact</item>\n            <item>pred</item>\n            <item>goal</item>\n            <item>cst</item>\n            <item>mdl</item>\n            <item>icst</item>\n            <item>icmd</item>\n            <item>cmd</item>\n            <item>ent</item>\n            <item>ont</item>\n            <item>dev</item>\n            <item>nod</item>\n            <item>ipgm</item>\n            <item>icpp_pgm</item>\n            <item>perf</item>\n        </list>\n        <list name=\"marker_classes\">\n            <item>mk.rdx</item>\n            <item>mk.grp_pair</item>\n            <item>mk.low_sln</item>\n            <item>mk.high_sln</item>\n            <item>mk.low_act</item>\n            <item>mk.high_act</item>\n            <item>mk.low_res</item>\n            <item>mk.sln_chg</item>\n            <item>mk.act_chg</item>\n            <item>mk.new</item>\n        </list>\n        <list name=\"entities\">\n            <item>self</item>\n        </list>\n        <list name=\"groups\">\n            <item>stdin</item>\n            <item>stdout</item>\n        </list>\n        <list name=\"functions\">\n            <item>_inj</item>\n            <item>_eje</item>\n            <item>_mod</item>\n            <item>_set</item>\n            <item>_new_class</item>\n            <item>_del_class</item>\n            <item>_ldc</item>\n            <item>_swp</item>\n            <item>_stop</item>\n        </list>\n        <list name=\"constants\">\n            <item>|nb</item>\n            <item>|bl</item>\n            <item>true</item>\n            <item>false</item>\n            <item>|[]</item>\n            <item>|nid</item>\n            <item>|did</item>\n            <item>|fid</item>\n            <item>|st</item>\n            <item>|us</item>\n            <item>forever</item>\n        </list>\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Normal Text\" >\n                <RegExpr String=\"[a-zA-Z0-9_\\.]+:\\(\" attribute=\"Class Definition\" context=\"open_parens\" beginRegion=\"true\" />\n                <StringDetect attribute=\"Preprocessor\" context=\"preprocessor_load\" String=\"!load \" />\n                <RegExpr String=\"\\![a-zA-Z0-9_\\.]+\" attribute=\"Preprocessor\" context=\"preprocessor\" />\n                <RegExpr attribute=\"ListBracket\" context=\"list\" String=\"[^\\|]\\[\" />\n                <IncludeRules context=\"global_data_type\" />\n            </context>\n            <context attribute=\"Identifier\" lineEndContext=\"error\" name=\"open_parens\">\n                <keyword attribute=\"Function\" String=\"functions\" context=\"class_definition\"/>\n                <keyword attribute=\"Operator\" String=\"operators\" context=\"class_definition\"/>\n                <keyword attribute=\"Builtin Class\" String=\"builtin_classes\" context=\"class_definition\"/>\n                <keyword attribute=\"Builtin Class\" String=\"marker_classes\" context=\"class_definition\"/>\n                <RegExpr String=\"[a-zA-Z0-9_\\.&gt;&lt;]+\" attribute=\"Class Name\" context=\"class_definition\" />\n            </context>\n            <context attribute=\"Class Definition\" lineEndContext=\"#stay\" name=\"global_data_type\">\n                <DetectChar attribute=\"Comment\" context=\"comment\" char=\";\" />\n                <StringDetect attribute=\"EmptyList\" context=\"#stay\" String=\"|[]\" />\n                <DetectChar attribute=\"ListBracket\" context=\"list\" char=\"[\" />\n            </context>\n            <context attribute=\"Class Definition\" lineEndContext=\"#stay\" name=\"data_type\">\n                <keyword attribute=\"Operator\" String=\"operators\" context=\"#stay\" />\n                <keyword attribute=\"Constant\" String=\"constants\" context=\"#stay\"/>\n                <keyword attribute=\"Group\" String=\"groups\" context=\"#stay\"/>\n                <keyword attribute=\"Entity\" String=\"entities\" context=\"#stay\"/>\n                <IncludeRules context=\"global_data_type\" />\n                <HlCHex attribute=\"Hex\" context=\"#stay\" />\n                <RegExpr attribute=\"Number\" context=\"#stay\" String=\"[0-9]+us\"/>\n                <Int attribute=\"Number\" context=\"#stay\" />\n                <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n                <RegExpr String=\"[A-Z_]+\" attribute=\"Constant\" context=\"#stay\" />\n                <RegExpr String=\"[a-z0-9_\\.&lt;&gt;\\.=+\\-*\\\\/]+\" attribute=\"Member\" context=\"#stay\" />\n                <DetectChar attribute=\"Class Definition\" context=\"open_parens\" char=\"(\" beginRegion=\"true\" />\n            </context>\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n                <IncludeRules context=\"##Alerts\" />\n                <IncludeRules context=\"##Modelines\" />\n            </context>\n            <context attribute=\"Class Definition\" lineEndContext=\"#stay\" name=\"class_definition\">\n                <DetectChar attribute=\"Class Definition\" context=\"#pop#pop\" char=\")\" endRegion=\"true\" />\n                <IncludeRules context=\"data_type\" />\n            </context>\n            <context attribute=\"Member\" lineEndContext=\"error\" name=\"list\">\n                <DetectChar attribute=\"ListBracket\" context=\"#pop\" char=\"]\" />\n                <IncludeRules context=\"data_type\" />\n            </context>\n            <context attribute=\"String\" lineEndContext=\"error\" name=\"string\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n            </context>\n            <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"error\" />\n            <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"preprocessor\">\n                <IncludeRules context=\"data_type\" />\n            </context>\n            <context attribute=\"Path\" lineEndContext=\"#pop\" name=\"preprocessor_load\" />\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\"/>\n            <itemData name=\"Path\" defStyleNum=\"dsString\" bold=\"1\" />\n            <itemData name=\"Class Definition\" defStyleNum=\"dsOthers\" />\n            <itemData name=\"Preprocessor\" defStyleNum=\"dsNormal\" bold=\"1\" />\n            <itemData name=\"Class Name\" defStyleNum=\"dsFunction\" />\n            <itemData name=\"Builtin Class\" defStyleNum=\"dsFunction\" bold=\"1\" />\n            <itemData name=\"Member\" defStyleNum=\"dsKeyword\" bold=\"0\" />\n            <itemData name=\"Constant\" defStyleNum=\"dsKeyword\" bold=\"1\" />\n            <itemData name=\"Group\" defStyleNum=\"dsKeyword\" italic=\"1\" bold=\"0\" />\n            <itemData name=\"Entity\" defStyleNum=\"dsKeyword\" italic=\"1\" bold=\"1\" />\n            <itemData name=\"Operator\" defStyleNum=\"dsFunction\" italic=\"1\" bold=\"0\" />\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" italic=\"0\" bold=\"1\" />\n            <itemData name=\"ListBracket\" defStyleNum=\"dsOthers\" color=\"#0095ff\" selColor=\"#0095ff\" bold=\"0\" italic=\"0\" />\n            <itemData name=\"EmptyList\" defStyleNum=\"dsOthers\" color=\"#0095ff\" selColor=\"#0095ff\" bold=\"1\" italic=\"0\" />\n            <itemData name=\"Identifier\" defStyleNum=\"dsFunction\" />\n            <itemData name=\"Number\" defStyleNum=\"dsDecVal\" />\n            <itemData name=\"Error\" defStyleNum=\"dsError\" />\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" />\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\";\" />\n        </comments>\n        <folding indentationsensitive=\"1\" />\n        <keywords casesensitive=\"1\" weakDeliminator=\"|.\" />\n    </general>\n</language>\n<!-- kate: space-indent on; indent-width 4; replace-tabs on; indent-mode xml; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n        <!ENTITY inlinestart \"(^|[-\\s&apos;&quot;\\(\\[{&lt;/:‘“’«¡¿‐‑‒–— ])\">\n        <!ENTITY inlineend \"(?=[-\\s’”»‐‑‒–— &apos;&quot;\\)\\]}&gt;/:\\.,;!\\?\\\\]|$)\">\n        <!ENTITY SimpleReferenceNameChars \"\\w_\\.:\\+\\-\">\n]>\n<!--\n  This file is part of KDE's kate project.\n\n  Copyright 2010 Matt Williams (matt@milliams.com)\n  Copyright 2014 Matthew Woehlke (mw_triad@users.sourceforge.net)\n  -->\n<language name=\"reStructuredText\" extensions=\"*.rst\" section=\"Markup\" mimetype=\"text/x-rst\" version=\"5\" kateversion=\"2.4\" casesensitive=\"1\">\n\n  <highlighting>\n\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Bold\" context=\"#stay\" String=\"&inlinestart;\\*\\*[^\\s].*\\*\\*&inlineend;\" minimal=\"true\"/>\n        <RegExpr attribute=\"Italic\" context=\"#stay\" String=\"&inlinestart;\\*[^\\s].*\\*&inlineend;\" minimal=\"true\"/>\n        <IncludeRules context=\"InlineMarkup\"/>\n        <RegExpr attribute=\"Footnote\" context=\"#stay\" String=\"^\\s*\\.\\. \\[(\\d+|#|\\*|#[&SimpleReferenceNameChars;]+)\\]\\s\" minimal=\"true\" column=\"0\"/>\n        <RegExpr attribute=\"Citation\" context=\"#stay\" String=\"^\\s*\\.\\. \\[[&SimpleReferenceNameChars;]+\\]\\s\" minimal=\"true\" column=\"0\"/>\n        <RegExpr attribute=\"HyperlinkTarget\" context=\"#stay\" String=\"^\\s*(\\.\\. (__:|_[&SimpleReferenceNameChars; ]+:(\\s|$))|__ )\" minimal=\"true\" column=\"0\"/>\n        <StringDetect attribute=\"Code\" String=\".. code-block::\" context=\"CodeBlock\" firstNonSpace=\"true\"/>\n        <StringDetect attribute=\"Code\" String=\".. code::\" context=\"CodeBlock\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Directive\" context=\"#stay\" String=\"^\\s*\\.\\. ([\\w\\-_\\.]+)(:[\\w\\-_\\.]+)*::(\\s|$)\" minimal=\"true\" column=\"0\"/>\n        <RegExpr attribute=\"Code\" String=\"::$\" context=\"CodeBlock\" />\n        <RegExpr attribute=\"SubstitutionDefinition\" context=\"#stay\" String=\"^\\s*\\.\\. \\|[&SimpleReferenceNameChars; ]+\\|\\s+[&SimpleReferenceNameChars;]+::\\s\" minimal=\"true\" column=\"0\"/>\n        <RegExpr attribute=\"Field\" String=\":(?=([^:]*\\\\:)*[^:]*:(\\s|$))\" context=\"Field\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Comment\" context=\"Comment\" String=\"^(\\s*)\\.\\.(\\s|$)(?!([\\w\\-_\\.]+)(:[\\w\\-_\\.]+)*::(\\s|$))\" column=\"0\"/>\n      </context>\n\n      <context name=\"InlineMarkup\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"InlineLiteral\" context=\"#stay\" String=\"&inlinestart;``[^\\s].*``&inlineend;\" minimal=\"true\"/>\n        <RegExpr attribute=\"SubstitutionReference\" context=\"#stay\" String=\"&inlinestart;\\|[^\\s].*\\|&inlineend;\" minimal=\"true\"/>\n        <RegExpr attribute=\"InlineInternalTarget\" context=\"#stay\" String=\"&inlinestart;_`[^\\s].*`&inlineend;\" minimal=\"true\"/>\n        <RegExpr attribute=\"FootnoteReference\" context=\"#stay\" String=\"&inlinestart;\\[[&SimpleReferenceNameChars;]+\\]_&inlineend;\" minimal=\"true\"/>\n        <RegExpr attribute=\"HyperlinkReference\" context=\"#stay\" String=\"&inlinestart;(`[^\\s].*`|\\w+)_&inlineend;\" minimal=\"true\"/>\n        <RegExpr attribute=\"InterpretedText\" context=\"TrailingRole\" String=\"&inlinestart;`[^\\s].*`(?=:([\\w\\-_\\.\\+]+)(:[\\w\\-_\\.\\+]+)*:)\" minimal=\"true\"/>\n        <RegExpr attribute=\"Role\" String=\":([\\w\\-_\\.\\+]+)(:[\\w\\-_\\.\\+]+)*:(?=`)\" context=\"Role\"/>\n        <RegExpr attribute=\"DefaultRole\" context=\"#stay\" String=\"&inlinestart;`[^\\s].*`&inlineend;\" minimal=\"true\"/>\n      </context>\n\n      <context name=\"Field\" attribute=\"Field\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Field\" context=\"#pop\" char=\":\"/>\n        <Detect2Chars attribute=\"Field\" context=\"#stay\" char=\"\\\" char1=\":\"/>\n        <RegExpr attribute=\"FieldBold\" context=\"#stay\" String=\"&inlinestart;\\*\\*[^\\s].*\\*\\*&inlineend;\" minimal=\"true\"/>\n        <RegExpr attribute=\"FieldItalic\" context=\"#stay\" String=\"&inlinestart;\\*[^\\s].*\\*&inlineend;\" minimal=\"true\"/>\n        <IncludeRules context=\"InlineMarkup\"/>\n      </context>\n      <context name=\"InterpretedText\" attribute=\"InterpretedText\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"InterpretedText\" char=\"`\" context=\"#pop\" />\n      </context>\n      <context name=\"Role\" attribute=\"Role\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"InterpretedText\" char=\"`\" context=\"#pop!InterpretedText\" />\n      </context>\n      <context name=\"TrailingRole\" attribute=\"Role\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Role\" String=\":[\\w\\-_\\.\\+]+:\" context=\"#pop\"/>\n      </context>\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Code\" String=\"^%1   \" context=\"#stay\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Normal\" String=\"^(.|$)\" lookAhead=\"true\" column=\"0\" context=\"#pop\"/>\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <context name=\"CodeBlock\" attribute=\"Code\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Code\" String=\"^(\\s+)(?=\\S)\" context=\"Code\" column=\"0\"/>\n      </context>\n\n      <context name=\"Code\" attribute=\"Code\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Code\" String=\"^%1\" context=\"#stay\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Normal\" String=\"^(.|$)\" lookAhead=\"true\" context=\"#pop#pop\" column=\"0\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Bold\" defStyleNum=\"dsNormal\" bold=\"1\" />\n      <itemData name=\"Italic\" defStyleNum=\"dsNormal\" italic=\"1\" />\n      <itemData name=\"InlineLiteral\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"SubstitutionReference\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"InlineInternalTarget\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"FootnoteReference\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"InterpretedText\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"HyperlinkReference\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Field\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"FieldBold\" defStyleNum=\"dsFunction\" bold=\"1\" />\n      <itemData name=\"FieldItalic\" defStyleNum=\"dsFunction\" italic=\"1\" />\n      <itemData name=\"Footnote\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Citation\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"HyperlinkTarget\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Directive\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"SubstitutionDefinition\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Role\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"DefaultRole\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Code\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <folding indentationsensitive=\"true\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"..\"/>\n    </comments>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rexx.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"REXX\" version=\"3\" kateversion=\"2.2\" section=\"Scripts\" extensions=\"*.rex;*.rx;*.rexx\" mimetype=\"\">\n  <highlighting>\n      <list name=\"keywords\">\n          <item>ADDRESS</item>\n          <item>ARG</item>\n          <item>CALL</item>\n          <item>DROP</item>\n          <item>EXIT</item>\n          <item>INTERPRET</item>\n          <item>NOP</item>\n          <item>NUMERIC</item>\n          <item>OPTIONS</item>\n          <item>PARSE</item>\n          <item>PROCEDURE</item>\n          <item>PULL</item>\n          <item>PUSH</item>\n          <item>QUEUE</item>\n          <item>RETURN</item>\n          <item>SAY</item>\n          <item>SYNTAX</item>\n          <item>TRACE</item>\n          <item>UPPER</item>\n          <item>RC</item>\n          <item>RESULT</item>\n          <item>SIGL</item>\n       </list>\n       <list name=\"subkeywords\">\n          <item>VALUE</item>\n          <item>WITH</item>\n          <item>RESULT</item>\n          <item>DIGITS</item>\n          <item>SCIENTIFIC</item>\n          <item>ENGINEERING</item>\n          <item>FORM</item>\n          <item>FUZZ</item>\n          <item>ALL</item>\n          <item>COMMANDS</item>\n          <item>ERROR</item>\n          <item>FAILURE</item>\n          <item>Intermediates</item>\n          <item>LABELS</item>\n          <item>NORMAL</item>\n          <item>OFF</item>\n          <item>RESULTS</item>\n      </list>\n      <list name=\"loops\">\n          <item>do</item>\n          <item>to</item>\n          <item>by</item>\n          <item>for</item>\n          <item>while</item>\n          <item>until</item>\n          <item>leave</item>\n          <item>iterate</item>\n          <item>forever</item>\n      </list>\n      <list name=\"control\">\n          <item>select</item>\n          <item>when</item>\n          <item>then</item>\n          <item>otherwise</item>\n          <item>do</item>\n          <item>if</item>\n          <item>else</item>\n          <item>end</item>\n      </list>\n      <list name=\"builtin\">\n          <item>ABBREV</item>\n          <item>ABS</item>\n          <item>ADDRESS</item>\n          <item>ARG</item>\n          <item>B2X</item>\n          <item>BITAND</item>\n          <item>BITOR</item>\n          <item>BITXOR</item>\n          <item>C2D</item>\n          <item>C2X</item>\n          <item>CHARS</item>\n          <item>CHARIN</item>\n          <item>CHARSIN</item>\n          <item>CENTER</item>\n          <item>CENTRE</item>\n          <item>COMPARE</item>\n          <item>CONDITION</item>\n          <item>COPIES</item>\n          <item>D2C</item>\n          <item>D2X</item>\n          <item>DATATYPE</item>\n          <item>DATE</item>\n          <item>DBCS</item>\n          <item>DELSTR</item>\n          <item>DELWORD</item>\n          <item>DIGITS</item>\n          <item>ERRORTEXT</item>\n          <item>EXTERNALS</item>\n          <item>FIND</item>\n          <item>FORM</item>\n          <item>FORMAT</item>\n          <item>FUZZ</item>\n          <item>GETMSG</item>\n          <item>INDEX</item>\n          <item>INSERT</item>\n          <item>JUSTIFY</item>\n          <item>LASTPOS</item>\n          <item>LEFT</item>\n          <item>LENGTH</item>\n          <item>LINEIN</item>\n          <item>LINEOUT</item>\n          <item>LINESIZE</item>\n          <item>LISTDSI</item>\n          <item>MAX</item>\n          <item>MIN</item>\n          <item>MSG</item>\n          <item>MVSVAR</item>\n          <item>OUTTRAP</item>\n          <item>OVERLAY</item>\n          <item>POS</item>\n          <item>PROMPT</item>\n          <item>QUEUED</item>\n          <item>RANDOM</item>\n          <item>REVERSE</item>\n          <item>RIGHT</item>\n          <item>SETLANG</item>\n          <item>SIGN</item>\n          <item>SOURCELINE</item>\n          <item>SPACE</item>\n          <item>STORAGE</item>\n          <item>STRIP</item>\n          <item>STREAM</item>\n          <item>SUBSTR</item>\n          <item>SUBWORD</item>\n          <item>SYMBOL</item>\n          <item>SYSCPUS</item>\n          <item>SYSDSN</item>\n          <item>SYSVAR</item>\n          <item>TIME</item>\n          <item>TRACE</item>\n          <item>TRANSLATE</item>\n          <item>TRUNC</item>\n          <item>USERID</item>\n          <item>VALUE</item>\n          <item>VERIFY</item>\n          <item>WORD</item>\n          <item>WORDINDEX</item>\n          <item>WORDLENGTH</item>\n          <item>WORDPOS</item>\n          <item>WORDS</item>\n          <item>X2B</item>\n          <item>X2C</item>\n          <item>X2D</item>\n          <item>XRANGE</item>\n      </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Instructions\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Instructions\" context=\"#stay\" String=\"subkeywords\" />\n        <keyword attribute=\"Control\"      context=\"#stay\" String=\"loops\" />\n        <keyword attribute=\"Control\"      context=\"#stay\" String=\"control\" />        \n        <keyword attribute=\"Built In\" context=\"#stay\" String=\"builtin\" />\n        <RegExpr attribute=\"Instructions\" context=\"#stay\" insensitive=\"true\" String=\"\\bsignal([\\s]*(on|off)[\\s]*(error|failure|halt|notready|novalue|syntax|lostdigits))*\"/>\n        <RegExpr attribute=\"Instructions\" context=\"#stay\" insensitive=\"true\" String=\"\\bcall([\\s]*(on|off)[\\s]*(error|failure|halt|notready))*\"/>\n        <RegExpr attribute=\"Instructions\" context=\"#stay\" insensitive=\"true\" String=\"\\b(trace|address)\\s*[_\\w\\d]\"/>\n        <RegExpr attribute=\"Instructions\" context=\"#stay\" insensitive=\"true\" String=\"\\bprocedure([\\s]*expose)?\"/>\n        <RegExpr attribute=\"Instructions\" context=\"#stay\" insensitive=\"true\" String=\"\\bdo([\\s]*forever)?\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&apos;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\"/>\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*[(:])\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&apos;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 1\">\n        <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Instructions\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Built In\"     defStyleNum=\"dsFunction\" />\n      <itemData name=\"Control\"      defStyleNum=\"dsControlFlow\" />\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\" />\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsVariable\"/>\n      <itemData name=\"Alert\"        defStyleNum=\"dsAlert\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rhtml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY name    \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n]>\n\t\n<!--\n\tRHTML syntax highlighting definition for Kate. It combines the ruby and\n\thtml syntax grammars. Some ideas, and the list of Rails method names were \n\ttaken from an rhtml kate grammar for Quanta based on earlier versions of\n\tthe syntax highlighters.\n\t\n\tCopyright (C) 2004  by Sebastian Vuorinen (sebastian dot vuorinen at helsinki dot fi)\n\tCopyright (C) 2004  by Stefan Lang (langstefan@gmx.at)\n\tCopyright (C) 2006  by Wilbert Berendsen (wilbert@kde.nl\n\tCopyright (C) 2005  by Chris Martin (linux@chriscodes.com\n\tCopyright (C) 2006  by Richard Dale (rdale@foton.es)\n\t\n\tThis library is free software; you can redistribute it and/or\n\tmodify it under the terms of the GNU Library General Public\n\tLicense as published by the Free Software Foundation; either\n\tversion 2 of the License, or (at your option) any later version.\n\t\n\tThis library is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n\tLibrary General Public License for more details.\n\t\n\tYou should have received a copy of the GNU Library General Public\n\tLicense along with this library; if not, write to the\n\tFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n\tBoston, MA  02110-1301, USA.\n-->\n\t\n<!--\n\tTODO:\t* Regular expressions spanning over multiple lines\n\twork only if newlines are escaped.\n\t* \"Nested\" HERE documents aren't recognized.\n\t* Division is detected correctly only, if whitespace\n\tis around the \"/\" operator.\n\tE.g.:\tdetected correctly:\t\t\t\t1 / 2\n\t\"/\" interpreted as regex start:\t\t1/2\n-->\n\t\n<!-- Hold the \"language\" opening tag on a single line, as mentioned in \"language.dtd\". -->\n<language name=\"Ruby/Rails/RHTML\" version=\"9\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.rhtml;*.RHTML;*.html.erb\" mimetype=\"\" author=\"Richard Dale rdale@foton.es\" license=\"LGPLv2+\">\n\t\n\t<highlighting>\n\t\n\t\t<list name=\"keywords\">\n\t\t\t<item>BEGIN</item>\n\t\t\t<item>END</item>\n\t\t\t<item>and</item>\n\t\t\t<item>begin</item>\n\t\t\t<item>break</item>\n\t\t\t<item>case</item>\n\t\t\t<item>defined?</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>elsif</item>\n\t\t\t<item>end</item>\n\t\t\t<item>ensure</item>\n\t\t\t<item>for</item>\n\t\t\t<item>if</item>\n\t\t\t<item>in</item>\n\t\t\t<item>include</item>\n\t\t\t<item>next</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t\t<item>redo</item>\n\t\t\t<item>rescue</item>\n\t\t\t<item>retry</item>\n\t\t\t<item>return</item>\n\t\t\t<item>then</item>\n\t\t\t<item>unless</item>\n\t\t\t<item>until</item>\n\t\t\t<item>when</item>\n\t\t\t<item>while</item>\n\t\t\t<item>yield</item>\n\t\t</list>\n\t\t\n\t\t<list name=\"access-control\">\n\t\t\t<item>private_class_method</item>\n\t\t\t<item>private</item>\n\t\t\t<item>protected</item>\n\t\t\t<item>public_class_method</item>\n\t\t\t<item>public</item>\n\t\t</list>\n\n\t\t<list name=\"attribute-definitions\">\n\t\t\t<item>attr_reader</item>\n\t\t\t<item>attr_writer</item>\n\t\t\t<item>attr_accessor</item>\n\t\t</list>\n\t\t\n\t\t<list name=\"definitions\">\n\t\t\t<item>alias</item>\n\t\t\t<item>module</item>\n\t\t\t<item>class</item>\n\t\t\t<item>def</item>\n\t\t\t<item>undef</item>\n\t\t</list>\n\t\t\n\t\t<list name=\"pseudo-variables\">\n\t\t\t<item>self</item>\n\t\t\t<item>super</item>\n\t\t\t<item>nil</item>\n\t\t\t<item>false</item>\n\t\t\t<item>true</item>\n\t\t\t<item>caller</item>\n\t\t\t<item>__FILE__</item>\n\t\t\t<item>__LINE__</item>\n\t\t</list>\n\t\t\n\t\t<list name=\"default-globals\">\n\t\t\t<item>$stdout</item>\n\t\t\t<item>$defout</item>\n\t\t\t<item>$stderr</item>\n\t\t\t<item>$deferr</item>\n\t\t\t<item>$stdin</item>\n\t\t</list>\n\t\t\n\t\t<!-- Kernel module methods.\n\t\t\tNOTE: Methods ending in ? or !\n\t\t\t\tare included below as regexes.\n\t\t-->\n\t\t<list name=\"kernel-methods\">\n\t\t\t<!-- backquote ` -->\n\t\t\t<item>abort</item>\n\t\t\t<item>at_exit</item>\n\t\t\t<item>autoload</item>\n\t\t\t<item>autoload?</item>\n\t\t\t<item>binding</item>\n\t\t\t<item>block_given?</item>\n\t\t\t<item>callcc</item>\n\t\t\t<item>caller</item>\n\t\t\t<item>catch</item>\n\t\t\t<item>chomp</item>\n\t\t\t<item>chomp!</item>\n\t\t\t<item>chop</item>\n\t\t\t<item>chop!</item>\n\t\t\t<item>eval</item>\n\t\t\t<item>exec</item>\n\t\t\t<item>exit</item>\n\t\t\t<item>exit!</item>\n\t\t\t<item>fail</item>\n\t\t\t<item>fork</item>\n\t\t\t<item>format</item>\n\t\t\t<item>getc</item>\n\t\t\t<item>gets</item>\n\t\t\t<item>global_variables</item>\n\t\t\t<item>gsub</item>\n\t\t\t<item>gsub!</item>\n\t\t\t<item>iterator?</item>\n\t\t\t<item>lambda</item>\n\t\t\t<item>load</item>\n\t\t\t<item>local_variables</item>\n\t\t\t<item>loop</item>\n\t\t\t<item>method_missing</item>\n\t\t\t<item>open</item>\n\t\t\t<item>p</item>\n\t\t\t<item>print</item>\n\t\t\t<item>printf</item>\n\t\t\t<item>proc</item>\n\t\t\t<item>putc</item>\n\t\t\t<item>puts</item>\n\t\t\t<item>raise</item>\n\t\t\t<item>rand</item>\n\t\t\t<item>readline</item>\n\t\t\t<item>readlines</item>\n\t\t\t<item>require</item>\n\t\t\t<item>scan</item>\n\t\t\t<item>select</item>\n\t\t\t<item>set_trace_func</item>\n\t\t\t<item>sleep</item>\n\t\t\t<item>split</item>\n\t\t\t<item>sprintf</item>\n\t\t\t<item>srand</item>\n\t\t\t<item>sub</item>\n\t\t\t<item>sub!</item>\n\t\t\t<item>syscall</item>\n\t\t\t<item>system</item>\n\t\t\t<item>test</item>\n\t\t\t<item>throw</item>\n\t\t\t<item>trace_var</item>\n\t\t\t<item>trap</item>\n\t\t\t<item>untrace_var</item>\n\t\t\t<item>warn</item>\n\t\t\t\n\t\t\t<!-- ActionView methods from Rails docs -->\n\t\t\t<item>auto_complete_field</item>\n\t\t\t<item>auto_complete_result</item>\n\t\t\t<item>auto_discovery_link_tag</item>\n\t\t\t<item>auto_link</item>\n\t\t\t<item>benchmark</item>\n\t\t\t<item>button_to</item>\n\t\t\t<item>cache</item>\n\t\t\t<item>capture</item>\n\t\t\t<item>check_box</item>\n\t\t\t<item>check_box_tag</item>\n\t\t\t<item>collection_select</item>\n\t\t\t<item>concat</item>\n\t\t\t<item>content_for</item>\n\t\t\t<item>content_tag</item>\n\t\t\t<item>country_options_for_select</item>\n\t\t\t<item>country_select</item>\n\t\t\t<item>current_page?</item>\n\t\t\t<item>date_select</item>\n\t\t\t<item>datetime_select</item>\n\t\t\t<item>debug</item>\n\t\t\t<item>define_javascript_functions</item>\n\t\t\t<item>distance_of_time_in_words</item>\n\t\t\t<item>distance_of_time_in_words_to_now</item>\n\t\t\t<item>draggable_element</item>\n\t\t\t<item>drop_receiving_element</item>\n\t\t\t<item>end_form_tag</item>\n\t\t\t<item>error_message_on</item>\n\t\t\t<item>error_messages_for</item>\n\t\t\t<item>escape_javascript</item>\n\t\t\t<item>evaluate_remote_response</item>\n\t\t\t<item>excerpt</item>\n\t\t\t<item>file_field</item>\n\t\t\t<item>file_field_tag</item>\n\t\t\t<item>finish_upload_status</item>\n\t\t\t<item>form</item>\n\t\t\t<item>form_remote_tag</item>\n\t\t\t<item>form_tag</item>\n\t\t\t<item>form_tag_with_upload_progress</item>\n\t\t\t<item>h</item>\n\t\t\t<item>hidden_field</item>\n\t\t\t<item>hidden_field_tag</item>\n\t\t\t<item>highlight</item>\n\t\t\t<item>human_size</item>\n\t\t\t<item>image_path</item>\n\t\t\t<item>image_submit_tag</item>\n\t\t\t<item>image_tag</item>\n\t\t\t<item>input</item>\n\t\t\t<item>javascript_include_tag</item>\n\t\t\t<item>javascript_path</item>\n\t\t\t<item>javascript_tag</item>\n\t\t\t<item>link_image_to</item>\n\t\t\t<item>link_to</item>\n\t\t\t<item>link_to_function</item>\n\t\t\t<item>link_to_if</item>\n\t\t\t<item>link_to_image</item>\n\t\t\t<item>link_to_remote</item>\n\t\t\t<item>link_to_unless</item>\n\t\t\t<item>link_to_unless_current</item>\n\t\t\t<item>mail_to</item>\n\t\t\t<item>markdown</item>\n\t\t\t<item>number_to_currency</item>\n\t\t\t<item>number_to_human_size</item>\n\t\t\t<item>number_to_percentage</item>\n\t\t\t<item>number_to_phone</item>\n\t\t\t<item>number_with_delimiter</item>\n\t\t\t<item>number_with_precision</item>\n\t\t\t<item>observe_field</item>\n\t\t\t<item>observe_form</item>\n\t\t\t<item>option_groups_from_collection_for_select</item>\n\t\t\t<item>options_for_select</item>\n\t\t\t<item>options_from_collection_for_select</item>\n\t\t\t<item>pagination_links</item>\n\t\t\t<item>password_field</item>\n\t\t\t<item>password_field_tag</item>\n\t\t\t<item>periodically_call_remote</item>\n\t\t\t<item>pluralize</item>\n\t\t\t<item>radio_button</item>\n\t\t\t<item>radio_button_tag</item>\n\t\t\t<item>register_template_handler</item>\n\t\t\t<item>render</item>\n\t\t\t<item>render_file</item>\n\t\t\t<item>render_template</item>\n\t\t\t<item>sanitize</item>\n\t\t\t<item>select</item>\n\t\t\t<item>select_date</item>\n\t\t\t<item>select_datetime</item>\n\t\t\t<item>select_day</item>\n\t\t\t<item>select_hour</item>\n\t\t\t<item>select_minute</item>\n\t\t\t<item>select_month</item>\n\t\t\t<item>select_second</item>\n\t\t\t<item>select_tag</item>\n\t\t\t<item>select_time</item>\n\t\t\t<item>select_year</item>\n\t\t\t<item>simple_format</item>\n\t\t\t<item>sortable_element</item>\n\t\t\t<item>start_form_tag</item>\n\t\t\t<item>strip_links</item>\n\t\t\t<item>stylesheet_link_tag</item>\n\t\t\t<item>stylesheet_path</item>\n\t\t\t<item>submit_tag</item>\n\t\t\t<item>submit_to_remote</item>\n\t\t\t<item>tag</item>\n\t\t\t<item>text_area</item>\n\t\t\t<item>text_area_tag</item>\n\t\t\t<item>text_field</item>\n\t\t\t<item>text_field_tag</item>\n\t\t\t<item>text_field_with_auto_complete</item>\n\t\t\t<item>textilize</item>\n\t\t\t<item>textilize_without_paragraph</item>\n\t\t\t<item>time_ago_in_words</item>\n\t\t\t<item>time_zone_options_for_select</item>\n\t\t\t<item>time_zone_select</item>\n\t\t\t<item>truncate</item>\n\t\t\t<item>update_element_function</item>\n\t\t\t<item>upload_progress_status</item>\n\t\t\t<item>upload_progress_text</item>\n\t\t\t<item>upload_progress_update_bar_js</item>\n\t\t\t<item>upload_status_progress_bar_tag</item>\n\t\t\t<item>upload_status_tag</item>\n\t\t\t<item>upload_status_text_tag</item>\n\t\t\t<item>url_for</item>\n\t\t\t<item>visual_effect</item>\n\t\t\t<item>word_wrap</item>\n\t\t</list>\n\t\t\n\t\t<list name=\"attention\">\n\t\t\t<item>TODO</item>\n\t\t\t<item>FIXME</item>\n\t\t\t<item>NOTE</item>\n\t\t</list>\n\t\t\n\t\t<contexts>\n\t\t\t\n\t\t<!-- BEGIN HTML contexts -->\n\t\t\t<context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<IncludeRules context=\"FindHTML\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"FindHTML\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<DetectIdentifier/>\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t<DetectChar attribute=\"Keyword\" context=\"rubysourceline\" char=\"%\" />\n\t\t\t\t\n\t\t\t\t<StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n\t\t\t\t<StringDetect attribute=\"CDATA\" context=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n\t\t\t\t<RegExpr attribute=\"Doctype\" context=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" beginRegion=\"doctype\" />\n\t\t\t\t<RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"CSS\" String=\"&lt;style\\b\" insensitive=\"true\" beginRegion=\"style\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"JS\" String=\"&lt;script\\b\" insensitive=\"true\" beginRegion=\"script\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;pre\\b\" insensitive=\"true\" beginRegion=\"pre\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;div\\b\" insensitive=\"true\" beginRegion=\"div\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;table\\b\" insensitive=\"true\" beginRegion=\"table\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Open\" String=\"&lt;&name;\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/pre\\b\" insensitive=\"true\" endRegion=\"pre\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/div\\b\" insensitive=\"true\" endRegion=\"div\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/table\\b\" insensitive=\"true\" endRegion=\"table\" />\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Close\" String=\"&lt;/&name;\" />\n\t\t\t\t<!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context=\"FindDTDRules\" />\n\t\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"FindEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n\t\t\t\t<AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;&lt;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"FindPEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n\t\t\t\t<RegExpr attribute=\"PEntityRef\" context=\"#stay\" String=\"%&name;;\" />\n\t\t\t\t<AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;%\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"FindAttributes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"&name;\" column=\"0\"/>\n\t\t\t\t<RegExpr attribute=\"Attribute\" context=\"#stay\" String=\"\\s+&name;\" />\n\t\t\t\t<DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"FindDTDRules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Doctype\" context=\"Doctype Markupdecl\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t\n\t\t\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t\t<DetectIdentifier/>\n\t\t\t\t<StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"-(-(?!-&gt;))+\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"CDATA\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectSpaces/>\n\t\t\t\t<DetectIdentifier/>\n\t\t\t\t<StringDetect attribute=\"CDATA\" context=\"#pop\" String=\"]]&gt;\" endRegion=\"cdata\" />\n\t\t\t\t<StringDetect attribute=\"EntityRef\" context=\"#stay\" String=\"]]&amp;gt;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"PI\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Doctype\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" endRegion=\"doctype\" />\n\t\t\t\t<DetectChar attribute=\"Doctype\" context=\"Doctype Internal Subset\" char=\"[\" beginRegion=\"int_subset\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Doctype Internal Subset\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"]\" endRegion=\"int_subset\" />\n\t\t\t\t<IncludeRules context=\"FindDTDRules\" />\n\t\t\t\t<StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n\t\t\t\t<RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:-]*\" beginRegion=\"pi\" />\n\t\t\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Doctype Markupdecl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n\t\t\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n\t\t\t\t<IncludeRules context=\"FindPEntityRefs\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"El Open\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n\t\t\t\t<DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"El Close\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Element\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"El Close 2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Element\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"El Close 3\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Element\" context=\"#pop#pop#pop#pop\" char=\"&gt;\" />\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"CSS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"style\" />\n\t\t\t\t<DetectChar attribute=\"Element\" context=\"CSS content\" char=\"&gt;\" />\n\t\t\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"CSS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/style\\b\" insensitive=\"true\" endRegion=\"style\" />\n\t\t\t\t<IncludeRules context=\"##CSS\" includeAttrib=\"true\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"JS\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"script\" />\n\t\t\t\t<DetectChar attribute=\"Element\" context=\"JS content\" char=\"&gt;\" />\n\t\t\t\t<IncludeRules context=\"FindAttributes\" />\n\t\t\t\t<RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"JS content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Close 2\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n\t\t\t\t<RegExpr attribute=\"Comment\" context=\"JS comment close\" String=\"//(?=.*&lt;/script\\b)\" insensitive=\"true\" />\n\t\t\t\t<IncludeRules context=\"Normal##JavaScript\" includeAttrib=\"true\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"JS comment close\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Element\" context=\"El Close 3\" String=\"&lt;/script\\b\" insensitive=\"true\" endRegion=\"script\" />\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"Value NQ\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"Value DQ\" char=\"&quot;\" />\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"Value SQ\" char=\"&apos;\" />\n\t\t\t\t<DetectSpaces />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Value NQ\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t\t\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"/(?!&gt;)\" />\n\t\t\t\t<RegExpr attribute=\"Value\" context=\"#stay\" String=\"[^/&gt;&lt;&quot;&apos;\\s]\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Value DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&quot;\" />\n\t\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Value SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"rubysource\" String=\"&lt;%=?\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Value\" context=\"#pop#pop\" char=\"&apos;\" />\n\t\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n  \t\t\t</context>\t\n\t\t<!-- END HTML contexts -->\n\t\t\n\t\t<!-- BEGIN Ruby contexts -->\n\t\t\n\t\t\t<!-- A single line of ruby source after a '%' ERB tag -->\n\t\t\t<context name=\"rubysourceline\" attribute=\"RUBY RAILS ERB Text\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"rubysource\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"rubysource\" attribute=\"RUBY RAILS ERB Text\" lineEndContext=\"#stay\">\n\t\t\t\t<!-- ruby ignores newline after \\ -->\n\t\t\t\t<LineContinue attribute=\"Ruby Normal Text\" context=\"Line Continue\"/>\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"-?%&gt;\" />\n\t\t\t\t\n\t\t\t\t<!-- __END__ token on own line. -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"__END__$\" context=\"DATA\" column=\"0\"/>\n\t\t\t\t\n\t\t\t\t<!-- \"shebang\" line -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"#!\\/.*\" context=\"#stay\" column=\"0\"/>\n\t\t\t\t\n\t\t\t\t<!-- \"def\" - \"end\" blocks -->\n\t\t\t\t<!-- check for statement modifiers with regexes -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(\\=|\\(|\\[|\\{)\\s*(if|unless|while|until)\\b\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\" firstNonSpace=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\;\\s*(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"if\" context=\"#stay\" beginRegion=\"def block\" firstNonSpace=\"true\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"unless\" context=\"#stay\" beginRegion=\"def block\" firstNonSpace=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\;\\s*(if|unless)\\b\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"class\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"module\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"begin\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\bfor\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"case\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"do\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"def\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"end\" context=\"#stay\" endRegion=\"def block\"/>\n\t\t\t\t<!-- elsif/else close the current block and start a new one -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(\\b|^\\s*)(else|elsif|rescue|ensure)(\\s+|$)\" context=\"#stay\" endRegion=\"def block\" beginRegion=\"def block\"/>\n\t\t\t\t\n\t\t\t\t<StringDetect attribute=\"Operator\" String=\"...\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\".\" char1=\".\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<!-- marks a message (being sent, not defined) -->\n\t\t\t\t<RegExpr attribute=\"Message\" String=\"\\.[_a-z][_a-zA-Z0-9]*(\\?|\\!|\\b)\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<!-- Check for \"ASCII code operator\". e.g.: ?a -->\n\t\t\t\t<RegExpr attribute=\"Dec\" String=\"\\s\\?(\\\\M\\-)?(\\\\C\\-)?\\\\?\\S\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Attribute Definition\" String=\"attribute-definitions\"  context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Access Control\" String=\"access-control\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Definition\" String=\"definitions\"  context=\"#stay\" />\n\t\t\t\t<keyword attribute=\"Pseudo variable\" String=\"pseudo-variables\"  context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Default globals\" String=\"default-globals\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Kernel methods\" String=\"kernel-methods\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<!-- (global) vars starting with $\n\t\t\t\t\tMatch them before $_.\n\t\t\t\t\t-->\n\t\t\t\t<RegExpr attribute=\"Global Variable\" String=\"\\$(\\w+|\\-[a-zA-Z_]\\b)\" context=\"#stay\"/>\n\t\t\t\t<!-- special-character globals -->\n\t\t\t\t<RegExpr attribute=\"Default globals\" String=\"\\$[\\d_*`\\!:?'/\\\\\\-\\&amp;]\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Global Constant\" String=\"\\b[_A-Z]+[A-Z_0-9]+\\b\" context=\"#stay\"/>\n\t\t\t\t<!-- Generally a module or class name like \"File\", \"MyModule_1\", .. -->\n\t\t\t\t<RegExpr attribute=\"Constant\" String=\"\\b[A-Z]+_*([0-9]|[a-z])[_a-zA-Z0-9]*\\b\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Hex\" String=\"\\b\\-?0[xX][_0-9a-fA-F]+\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Bin\" String=\"\\b\\-?0[bB][_01]+\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Octal\" String=\"\\b\\-?0[1-7][_0-7]*\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Float\" String=\"\\b\\-?[0-9][0-9_]*\\.[0-9][0-9_]*([eE]\\-?[1-9][0-9]*(\\.[0-9]*)?)?\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Dec\" String=\"\\b\\-?[1-9][0-9_]*\\b\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Dec\" context=\"#stay\"/>\n\t\t\t\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<!-- Check for =begin before assignment operator. -->\n\t\t\t\t<StringDetect attribute=\"Blockcomment\" String=\"=begin\" context=\"Embedded documentation\" beginRegion=\"comment block\" column=\"0\"/>\n\t\t\t\t\n\t\t\t\t<!-- recognize the beginning of a HEREDOC\n\t\t\t\t\tThis uses new features in Kate 2.3 and later\n\t\t\t\t\t\n\t\t\t\t\tThere is no other chance of keeping heredoc apart from the\n\t\t\t\t\tpush operator '<<' than requiring to put space between the operator\n\t\t\t\t\t\t\t\t\t\tand the string.\n\t\t\t\t\t\t\t\t\t\t-->\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"find_indented_heredoc\" String=\"\\s*&lt;&lt;-(?=\\w+|[&quot;'])\" beginRegion=\"HereDocument\" />\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"find_heredoc\" String=\"\\s*&lt;&lt;(?=\\w+|[&quot;'])\" beginRegion=\"HereDocument\" />\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\".\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\"&amp;\" char1=\"&amp;\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\"|\" char1=\"|\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"\\s[\\?\\:\\%/]\\s\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"[|&amp;&lt;&gt;\\^\\+*~\\-=]+\" context=\"#stay\"/>\n\t\t\t\t<!-- regexp hack -->\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"\\s!\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"/=\\s\" context=\"#stay\" insensitive=\"0\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\"%\" char1=\"=\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\":\" char1=\":\" context=\"Member Access\"/>\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Symbol\" String=\":[a-zA-Z_][a-zA-Z0-9_]*\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"Quoted String\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" char=\"'\" context=\"Apostrophed String\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" char=\"`\" context=\"Command String\"/>\n\t\t\t\t\n\t\t\t\t<Detect2Chars attribute=\"Normal Text\" char=\"?\" char1=\"#\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"#\\s*BEGIN.*$\"  context=\"#stay\" beginRegion=\"marker\" column=\"0\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"#\\s*END.*$\"  context=\"#stay\" endRegion=\"marker\" column=\"0\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"#\"  context=\"Comment Line\" firstNonSpace=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"\\s#\"  context=\"General Comment\"/>\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Delimiter\" String=\"[\\[\\]]+\"  context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Delimiter\" char=\"{\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<DetectChar attribute=\"Delimiter\" char=\"}\" context=\"#stay\" endRegion=\"def block\"/>\n\t\t\t\t\n\t\t\t\t<RegExpr attribute=\"Instance Variable\" String=\"@[a-zA-Z_0-9]+\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Class Variable\" String=\"@@[a-zA-Z_0-9]+\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<!-- handle the different regular expression formats -->\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" char=\"/\" context=\"RegEx 1\"/>\n\t\t\t\t\n\t\t\t\t<!-- recognize the beginning of a general delimited input format -->\n\t\t\t\t<!-- this moves to the next context to separate out the exact nature of the GDL input -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"find_gdl_input\" String=\"\\s*[%](?=[Qqxw]?[^\\s&gt;])\" beginRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Line Continue\" attribute=\"Ruby Normal Text\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" firstNonSpace=\"true\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"if\" context=\"#stay\" firstNonSpace=\"true\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"unless\" context=\"#stay\" firstNonSpace=\"true\"/>\n\t\t\t\t<IncludeRules context=\"rubysource\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Quoted String\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"&quot;\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t\t<!--HlCChar attribute=\"Char\" context=\"#pop\"/-->\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"String\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Apostrophed String\" attribute=\"Raw String\" lineEndContext=\"#stay\">\n\t\t\t\t<!-- <HlCChar attribute=\"Char\" context=\"#pop\"/> -->\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"'\" context=\"#stay\"/>\n\t\t\t\t<DetectChar char=\"'\" attribute=\"Raw String\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Command String\" attribute=\"Command\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"`\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t\t<HlCChar attribute=\"Char\" context=\"#pop\"/>\n\t\t\t\t<DetectChar char=\"`\" attribute=\"Command\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Embedded documentation\" attribute=\"Ruby Comment\" lineEndContext=\"#stay\">\n\t\t\t\t<StringDetect attribute=\"Ruby Comment\" String=\"=end\" context=\"#pop\" endRegion=\"comment block\" column=\"0\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"RegEx 1\" attribute=\"Regular Expression\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"/\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Regular Expression\" String=\"[^\\\\]$\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t\t<RegExpr attribute=\"Regular Expression\" String=\"/[uiomxn]*\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- Substitutions can be nested -->\n\t\t\t<context name=\"Subst\" attribute=\"Ruby Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Substitution\" char=\"}\" context=\"#pop\"/>\n\t\t\t\t<!-- Highlight substitution as code. -->\n\t\t\t\t<IncludeRules context=\"rubysource\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Short Subst\" attribute=\"Substitution\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- Check for e.g.: \"#@var#@@xy\" -->\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"\\w(?!\\w)\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- This handles access of nested module classes and class methods -->\n\t\t\t<context name=\"Member Access\" attribute=\"Member\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- marks a message (being sent, not defined) -->\n\t\t\t\t<RegExpr attribute=\"Message\" String=\"\\.?[_a-z]\\w*(\\?|\\!)?(?=[^\\w\\d\\.\\:])\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Message\" String=\"\\.?[_a-z]\\w*(\\?|\\!)?\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Constant\" String=\"[A-Z]+_*(\\d|[a-z])\\w*(?=[^\\w\\d\\.\\:])\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Constant\" String=\"[A-Z]+_*([0-9]|[a-z])\\w*\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Constant Value\" String=\"[_A-Z][_A-Z0-9]*(?=[^\\w\\d\\.\\:])\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Constant Value\" String=\"[_A-Z][_A-Z0-9]*\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\":\" char1=\":\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Member\" char=\".\" context=\"#stay\"/>\n\t\t\t\t\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"=+-*/%|&amp;[]{}~\" context=\"#pop\"/>\n\t\t\t\t<DetectChar attribute=\"Ruby Comment\" char=\"#\" context=\"#pop\"/>\n\t\t\t\t<AnyChar attribute=\"Ruby Normal Text\" String=\"()\\\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Member\" String=\"\\W\" context=\"#pop\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"Comment Line\" attribute=\"Ruby Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Ruby Comment\" String=\"\\w\\:\\:\\s\" context=\"RDoc Label\"/>\n\t\t\t\t<keyword attribute=\"Alert\" String=\"attention\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"-?%&gt;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"General Comment\" attribute=\"Ruby Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<keyword attribute=\"Dec\" String=\"attention\" context=\"#stay\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"RDoc Label\" attribute=\"RDoc Value\" lineEndContext=\"#pop\"/>\n\t\t\t\n\t\t\t<!-- HEREDOC support\n\t\t\t\tThe contexts below support both normal and indented heredocs\n\t\t\t\t-->\n\t\t\t<!-- here we markup the heredoc markers -->\n\t\t\t<context name=\"find_heredoc\" attribute=\"Ruby Normal Text\" lineEndContext=\"#pop\" >\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"apostrophed_normal_heredoc\" String=\"'(\\w+)'\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"normal_heredoc\" String=\"&quot;?(\\w+)&quot;?\" />\n\t\t\t</context>\n\t\t\t<context name=\"find_indented_heredoc\" attribute=\"Ruby Normal Text\" lineEndContext=\"#pop\" >\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"apostrophed_indented_heredoc\" String=\"'(\\w+)'\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"indented_heredoc\" String=\"&quot;?(\\w+)&quot;?\" />\n\t\t\t</context>\n\t\t\t<!-- these are the real heredoc contexts -->\n\t\t\t<context name=\"indented_heredoc\" attribute=\"Ruby Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<!--\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"^\\s*%1$\" dynamic=\"true\" endRegion=\"HereDocument\"/>-->\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" firstNonSpace=\"true\"/>\n\t\t\t\t<IncludeRules context=\"heredoc_rules\" />\n\t\t\t</context>\n\t\t\t<context name=\"apostrophed_indented_heredoc\" attribute=\"Ruby Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<!--\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"^\\s*%1$\" dynamic=\"true\" endRegion=\"HereDocument\"/>-->\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" firstNonSpace=\"true\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"normal_heredoc\" attribute=\"Ruby Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<!--\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"^%1$\" dynamic=\"true\" endRegion=\"HereDocument\"/>-->\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" column=\"0\"/>\n\t\t\t\t<IncludeRules context=\"heredoc_rules\" />\n\t\t\t</context>\n\t\t\t<context name=\"apostrophed_normal_heredoc\" attribute=\"Ruby Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<!--\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"^%1$\" dynamic=\"true\" endRegion=\"HereDocument\"/>-->\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" column=\"0\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- rules for heredoc types -->\n\t\t\t<context name=\"heredoc_rules\" attribute=\"Ruby Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- General delimited input support\n\t\t\t\tThe contexts below handle the various gdl formats\n\t\t\t\t-->\n\t\t\t<context name=\"find_gdl_input\" attribute=\"Ruby Normal Text\" lineEndContext=\"#pop\">\n\t\t\t\t\n\t\t\t\t<!-- handle token arrays -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_1\" char=\"w\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_2\" char=\"w\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_3\" char=\"w\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_4\" char=\"w\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_token_array_5\" String=\"w([^\\s\\w])\" />\n\t\t\t\t\n\t\t\t\t<!-- handle apostrophed strings -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_1\" char=\"q\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_2\" char=\"q\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_3\" char=\"q\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_4\" char=\"q\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_apostrophed_5\" String=\"q([^\\s\\w])\" />\n\t\t\t\t\n\t\t\t\t<!-- handle shell commands -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_1\" char=\"x\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_2\" char=\"x\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_3\" char=\"x\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_4\" char=\"x\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_shell_command_5\" String=\"x([^\\s\\w])\" />\n\t\t\t\t\n\t\t\t\t<!-- handle regular expressions -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_1\" char=\"r\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_2\" char=\"r\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_3\" char=\"r\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_4\" char=\"r\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_regexpr_5\" String=\"r([^\\s\\w])\" />\n\t\t\t\t\n\t\t\t\t<!-- handle double-quoted strings -->\n\t\t\t\t<!-- \n\t\t\t\t\tbe careful to make this the last GDL ruleset, because the rule for\n\t\t\t\t\tthe short form %?foo? will otherwise catch any of the other formats\n\t\t\t\t\t-->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_1\" char=\"Q\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_2\" char=\"Q\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_3\" char=\"Q\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_4\" char=\"Q\" char1=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_1\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_2\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_3\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_4\" char=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_dq_string_5\" String=\"Q?([^\\s\\w])\" />\n\t\t\t\t\n\t\t\t</context>\n\t\t\t<!-- double-quoted string specific contexts follow -->\n\t\t\t<context name=\"gdl_dq_string_1\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_1_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\t\t\t<!-- note that here substitution should win over nesting -->\n\t\t\t<context name=\"gdl_dq_string_2\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_2_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"}\" />\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_dq_string_3\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_3_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"]\" />\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_dq_string_4\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_4_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t\t-->\n\t\t\t<context name=\"gdl_dq_string_5\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<RegExpr attribute=\"String\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<!-- rules to be included in all dq_string contexts -->\n\t\t\t<context name=\"dq_string_rules\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- token array specific contexts -->\n\t\t\t\n\t\t\t<context name=\"gdl_token_array_1\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_1_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_token_array_2\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_2_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_token_array_3\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_3_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_token_array_4\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_4_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t\t-->\n\t\t\t<context name=\"gdl_token_array_5\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<RegExpr attribute=\"String\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- rules to be included in all token_array contexts -->\n\t\t\t<context name=\"token_array_rules\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<StringDetect attribute=\"String\" String=\"\\\\\" context=\"#stay\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- apostrophed string specific contexts -->\n\t\t\t\n\t\t\t<context name=\"gdl_apostrophed_1\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_1_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_apostrophed_2\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_2_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_apostrophed_3\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_3_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_apostrophed_4\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_4_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t\t-->\n\t\t\t<context name=\"gdl_apostrophed_5\" attribute=\"Raw String\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- rules to be included in all apostrophed contexts -->\n\t\t\t<context name=\"apostrophed_rules\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- shell command specific contexts -->\n\t\t\t\n\t\t\t<context name=\"gdl_shell_command_1\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_1_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_shell_command_2\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_2_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_shell_command_3\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_3_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_shell_command_4\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_4_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t\t-->\n\t\t\t<context name=\"gdl_shell_command_5\" attribute=\"Command\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<RegExpr attribute=\"Command\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- rules to be included in all shell_command contexts -->\n\t\t\t<context name=\"shell_command_rules\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- regular expression specific contexts -->\n\t\t\t\n\t\t\t<context name=\"gdl_regexpr_1\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_1_nested\" char=\"(\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\)[uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_1_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_regexpr_2\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\}[uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_2_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_regexpr_3\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_3_nested\" char=\"[\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\][uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_3_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<context name=\"gdl_regexpr_4\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_4_nested\" char=\"&lt;\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"&gt;[uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_4_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t\t-->\n\t\t\t<context name=\"gdl_regexpr_5\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<RegExpr attribute=\"Regular Expression\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1[uiomxn]*\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- rules to be included in all regexpr contexts -->\n\t\t\t<context name=\"regexpr_rules\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\t\t\t\n\t\t\t<!-- END of General delimited input support -->\n\t\t\t\n\t\t\t<!-- handle data in script -->\n\t\t\t<context name=\"DATA\" attribute=\"Data\" lineEndContext=\"#stay\"/>\n\t\t<!-- END Ruby contexts -->\t\t\t\n\t\t</contexts>\n\t\t\n\t\t<itemDatas>\n\t\t<!-- BEGIN Ruby itemData -->\n\t\t\t<itemData name=\"Ruby Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"RUBY RAILS ERB Text\" defStyleNum=\"dsExtension\"/>\n\t\t\t\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Attribute Definition\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Access Control\" defStyleNum=\"dsKeyword\" color=\"#0000FF\"/>\n\t\t\t<itemData name=\"Definition\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Pseudo variable\" defStyleNum=\"dsDecVal\"/>\n\t\t\t\n\t\t\t<itemData name=\"Dec\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Bin\" defStyleNum=\"dsBaseN\"/>\n\t\t\t\n\t\t\t<itemData name=\"Symbol\" defStyleNum=\"dsString\" color=\"#D40000\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Raw String\" defStyleNum=\"dsString\" color=\"#DD4A4A\" selColor=\"#DD4A4A\"/>\n\t\t\t<itemData name=\"Command\" defStyleNum=\"dsString\" color=\"#AA3000\"/>\n\t\t\t<itemData name=\"Message\" defStyleNum=\"dsNormal\" color=\"#4000A7\"/> <!-- #4A00C0 -->\n\t\t\t<itemData name=\"Regular Expression\" defStyleNum=\"dsOthers\" color=\"#4A5704\"/>\n\t\t\t<itemData name=\"Substitution\"\tdefStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Data\" defStyleNum=\"dsNormal\"/>\n\t\t\t<!-- short for 'general delimited input' -->\n\t\t\t<itemData name=\"GDL input\" defStyleNum=\"dsOthers\" />\n\t\t\t\n\t\t\t<itemData name=\"Default globals\" defStyleNum=\"dsDataType\" color=\"#C00000\" bold=\"1\"/>\n\t\t\t<itemData name=\"Global Variable\" defStyleNum=\"dsDataType\" color=\"#C00000\"/>\n\t\t\t<itemData name=\"Global Constant\" defStyleNum=\"dsDataType\" color=\"#bb1188\" bold=\"1\"/>\n\t\t\t<itemData name=\"Constant\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Constant Value\" defStyleNum=\"dsDataType\" color=\"#bb1188\"/>\n\t\t\t<itemData name=\"Kernel methods\" defStyleNum=\"dsNormal\" color=\"#000080\" selColor=\"#ffffff\"/> <!-- #CC0E86 -->\n\t\t\t<itemData name=\"Member\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Instance Variable\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Class Variable\" defStyleNum=\"dsOthers\"/>\n\t\t\t\n\t\t\t<itemData name=\"Ruby Comment\" defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Blockcomment\" defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"RDoc Value\" defStyleNum=\"dsOthers\"/>\n\t\t\t\n\t\t\t<!-- use these to mark errors and alerts things -->\n\t\t\t<itemData name=\"Error\" defStyleNum=\"dsError\" />\n\t\t\t<itemData name=\"Alert\" defStyleNum=\"dsAlert\" />\n\n\t\t\t<itemData name=\"Delimiter\" defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"Operator\" defStyleNum=\"dsChar\"/>\n\t\t<!-- END Ruby itemData -->\n\t\t\t\n\t\t<!-- BEGIN HTML itemData -->\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\t\t\t<itemData name=\"CDATA\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n\t\t\t<itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" />\n\t\t\t<itemData name=\"Element\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Attribute\" defStyleNum=\"dsOthers\" />\n\t\t\t<itemData name=\"Value\" defStyleNum=\"dsString\" />\n\t\t\t<itemData name=\"EntityRef\" defStyleNum=\"dsDecVal\" />\n\t\t\t<itemData name=\"PEntityRef\" defStyleNum=\"dsDecVal\" />\n\t\t<!-- END HTML itemData -->\n\t\t\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" weakDeliminator=\"!?\"/> \n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rib.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!--Kate syntax file for RenderMan Interface Byte stream-->\n<!--By David Williams-->\n<!--Email david@david-williams.info-->\n\n<language name=\"RenderMan RIB\" version=\"3\" kateversion=\"2.3\" section=\"3D\" mimetype=\"\" extensions=\"*.rib\" author=\"David Williams &lt;david@david-williams.info&gt;\" license=\"LGPL\">\n\t<highlighting>\n\t\t<list name=\"Graphics States\">\n\t\t\t<item>AreaLightSource</item>\n\t\t\t<item>Attribute</item>\n\t\t\t<item>AttributeBegin</item>\n\t\t\t<item>AttributeEnd</item>\n\t\t\t<item>Begin</item>\n\t\t\t<item>Bound</item>\n\t\t\t<item>Clipping</item>\n\t\t\t<item>Color</item>\n\t\t\t<item>ColorSamples</item>\n\t\t\t<item>ConcatTransform</item>\n\t\t\t<item>CoordinateSystem</item>\n\t\t\t<item>CropWindow</item>\n\t\t\t<item>Declare</item>\n\t\t\t<item>DepthOfField</item>\n\t\t\t<item>Detail</item>\n\t\t\t<item>DetailRange</item>\n\t\t\t<item>Displacement</item>\n\t\t\t<item>Display</item>\n\t\t\t<item>End</item>\n\t\t\t<item>Exterior</item>\n\t\t\t<item>Format</item>\n\t\t\t<item>FrameAspectRatio</item>\n\t\t\t<item>FrameBegin</item>\n\t\t\t<item>FrameEnd</item>\n\t\t\t<item>GeometricApproximation</item>\n\t\t\t<item>Hider</item>\n\t\t\t<item>Identity</item>\n\t\t\t<item>Illuminance</item>\n\t\t\t<item>Illuminate</item>\n\t\t\t<item>Interior</item>\n\t\t\t<item>LightSource</item>\n\t\t\t<item>Matte</item>\n\t\t\t<item>Opacity</item>\n\t\t\t<item>Option</item>\n\t\t\t<item>Orientation</item>\n\t\t\t<item>Perspective</item>\n\t\t\t<item>PixelFilter</item>\n\t\t\t<item>PixelSamples</item>\n\t\t\t<item>PixelVariance</item>\n\t\t\t<item>Projection</item>\n\t\t\t<item>Quantize</item>\n\t\t\t<item>RelativeDetail</item>\n\t\t\t<item>Rotate</item>\n\t\t\t<item>Scale</item>\n\t\t\t<item>ScreenWindow</item>\n\t\t\t<item>ShadingInterpolation</item>\n\t\t\t<item>ShadingRate</item>\n\t\t\t<item>Shutter</item>\n\t\t\t<item>Sides</item>\n\t\t\t<item>Skew</item>\n\t\t\t<item>Surface</item>\n\t\t\t<item>TextureCoordinates</item>\n\t\t\t<item>Transform</item>\n\t\t\t<item>TransformBegin</item>\n\t\t\t<item>TransformEnd</item>\n\t\t\t<item>TransformPoints</item>\n\t\t\t<item>Translate</item>\n\t\t\t<item>version</item>\n\t\t\t<item>WorldBegin</item>\n\t\t\t<item>WorldEnd</item>\n\t\t</list>\n\t\t<list name=\"Geometric Primitives\">\n\t\t\t<item>Basis</item>\n\t\t\t<item>Cylinder</item>\n\t\t\t<item>Disk</item>\n\t\t\t<item>GeneralPolygon</item>\n\t\t\t<item>Geometry</item>\n\t\t\t<item>Hyperboloid</item>\n\t\t\t<item>NuPatch</item>\n\t\t\t<item>ObjectBegin</item>\n\t\t\t<item>ObjectEnd</item>\n\t\t\t<item>ObjectInstance</item>\n\t\t\t<item>Patch</item>\n\t\t\t<item>Paraboloid</item>\n\t\t\t<item>PointsPolygons</item>\n\t\t\t<item>PointsGeneralPolygons</item>\n\t\t\t<item>Polygon</item>\n\t\t\t<item>Procedural</item>\n\t\t\t<item>SolidBegin</item>\n\t\t\t<item>SolidEnd</item>\n\t\t\t<item>Sphere</item>\n\t\t\t<item>Torus</item>\n\t\t</list>\n\t\t<list name=\"Motions\">\n\t\t\t<item>MotionBegin</item>\n\t\t\t<item>MotionEnd</item>\n\t\t</list>\n\t\t<list name=\"External Resources\">\n\t\t\t<item>MakeBump</item>\n\t\t\t<item>MakeCubeFaceEnvironment</item>\n\t\t\t<item>MakeLatLongEnvironment</item>\n\t\t\t<item>MakeTexture</item>\n\t\t\t<item>ArchiveRecord</item>\n\t\t\t<item>ErrorHandler</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\n\t\t\t\t<keyword attribute=\"Graphics State\" context=\"#stay\" String=\"Graphics States\"/>\n\t\t\t\t<keyword attribute=\"Geometric Primitive\" context=\"#stay\" String=\"Geometric Primitives\"/>\n\t\t\t\t<keyword attribute=\"Motion\" context=\"#stay\" String=\"Motions\"/>\n\t\t\t\t<keyword attribute=\"External Resource\" context=\"#stay\" String=\"External Resources\"/>\n\t\t\t\t\n\t\t\t\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Integer\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n\t\t\t</context>\n\t\t\t<context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\t\t\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t\t\n\t\t\t<itemData name=\"Graphics State\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Geometric Primitive\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Motion\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"External Resource\" defStyleNum=\"dsKeyword\"/>\n\t\t\t\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Integer\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\" />\n\t\t</comments>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rmarkdown.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n<!-- Replicated from \"markdown.xml\": -->\n<!ENTITY rulerregex \"\\s*(?:(?:\\*\\s*){3,}|(?:_\\s*){3,}|(?:\\-\\s*){3,})\\s*$\">\n<!ENTITY indentedcodeblock \"(?:\\s{4}|\\t).*$\">\n<!ENTITY listbullet \"[\\*\\+\\-]\">\n<!ENTITY emptyline \"^\\s*$\">\n<!ENTITY checkbox \"\\[[ x]\\](?=\\s)\">\n]>\n<!--\n  Kate highlighting module for R Markdown\n  (c) 2014 Dirk Sarpe (dsarpe@posteo.de)\n\n  depends on:\n    Kate highlighting module for Markdown\n    Kate highlighting module for R script\n    Kate highlighting module for LaTeX\n    Kate highlighting module for YAML\n-->\n\n<language name=\"R Markdown\"\nsection=\"Markup\"\nextensions=\"*.rmd;*.Rmd;*.RMD\"\nmimetype=\"text/x-r-markdown\"\nversion=\"7\"\nkateversion=\"5.53\"\ncasesensitive=\"true\"\nauthor=\"Dirk Sarpe (dsarpe@posteo.de)\"\nlicense=\"GPL\">\n\n  <highlighting>\n    <contexts>\n\n      <context name=\"Start Document\" attribute=\"Markdown\" lineEndContext=\"Normal Text\" lineEmptyContext=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"Normal Text\">\n        <RegExpr String=\"^---$\" column=\"0\" attribute=\"Markdown\" context=\"YAMLhead\" beginRegion=\"YAMLhead block\"/>\n      </context>\n\n      <context name=\"Normal Text\" attribute=\"Markdown\" lineEndContext=\"#stay\" lineEmptyContext=\"find-code-block\">\n        <IncludeRules context=\"Common\"/>\n        <IncludeRules context=\"Overwrite Markdown Normal Text\"/>\n        <IncludeRules context=\"Normal Text##Markdown\" includeAttrib=\"true\"/>\n      </context>\n      <context name=\"find-code-block\" attribute=\"Markdown\" lineEndContext=\"#stay\" lineEmptyContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <IncludeRules context=\"find-code-block##Markdown\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"Common\" attribute=\"Markdown\" lineEndContext=\"#stay\">\n        <RegExpr String=\"```+\\{r.*\\}\" firstNonSpace=\"true\" attribute=\"Structure\"\n                 context=\"R block\" beginRegion=\"R block\"/>\n        <RegExpr String=\"`r\\b\" attribute=\"Structure\"\n                 context=\"R inline\"/>\n        <Detect2Chars char=\"$\" char1=\"$\" attribute=\"MathMode\"\n                      context=\"LaTeX equation block\" beginRegion=\"LaTeX equation block\"/>\n        <DetectChar char=\"$\" attribute=\"MathMode\"\n                    context=\"LaTeX inline equation\"/>\n        <Detect2Chars char=\"\\\" char1=\"$\" attribute=\"Backslash Escape\" context=\"#stay\"/>\n      </context>\n\n      <context name=\"R block\" attribute=\"Markdown\" lineEndContext=\"#stay\">\n        <RegExpr String=\"```+(?=\\s*$)\" firstNonSpace=\"true\" attribute=\"Structure\" context=\"#pop\"\n                 endRegion=\"R block\"/>\n        <IncludeRules context=\"##R Script\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"R inline\" attribute=\"Markdown\" lineEndContext=\"#stay\">\n        <DetectChar char=\"`\" attribute=\"Structure\" context=\"#pop\"/>\n        <IncludeRules context=\"##R Script\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"LaTeX equation block\" attribute=\"MathMode\"\n               lineEndContext=\"#stay\">\n        <Detect2Chars char=\"$\" char1=\"$\" attribute=\"MathMode\"\n                      context=\"#pop\" endRegion=\"LaTeX equation block\"/>\n        <IncludeRules context=\"MathModeDisplay##LaTeX\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"LaTeX inline equation\" attribute=\"MathMode\"\n               lineEndContext=\"#stay\">\n        <DetectChar char=\"$\" attribute=\"MathMode\" context=\"#pop\"/>\n        <IncludeRules context=\"MathMode##LaTeX\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"YAMLhead\" attribute=\"Document Headers\"\n               lineEndContext=\"#stay\">\n        <RegExpr String=\"^---$\" column=\"0\" attribute=\"Markdown\" context=\"#pop\"\n                 endRegion=\"YAMLhead block\"/>\n        <IncludeRules context=\"##YAML\" includeAttrib=\"true\"/>\n      </context>\n\n      <!-- Markdown -->\n      <!-- These contexts are replicated from \"markdown.xml\" to add the features of R Markdown. -->\n\n      <context name=\"Overwrite Markdown Normal Text\" attribute=\"Markdown\" lineEndContext=\"#stay\">\n        <!-- Blockquotes -->\n        <DetectChar attribute=\"Blockquote\" context=\"blockquote\" char=\"&gt;\" firstNonSpace=\"true\"/>\n        <!-- Lists: avoid highlighting code blocks incorrectly, capturing indentation -->\n        <RegExpr attribute=\"List\" context=\"list\" String=\"(\\s*)&listbullet;(\\s+)\" column=\"0\"/>\n        <RegExpr attribute=\"Number List\" context=\"numlist\" String=\"(\\s*)\\d\\.(\\s+)\" column=\"0\"/>\n        <RegExpr attribute=\"Number List\" context=\"numlist2\" String=\"(\\s*)\\d\\d+\\.(\\s+)\" column=\"0\"/>\n      </context>\n\n      <context name=\"list\" attribute=\"Markdown\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"content-list\">\n        <!-- Find indented code blocks, blockquotes and horizontal rules -->\n        <RegExpr attribute=\"List: Code\" String=\"%1%2\\s&indentedcodeblock;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Blockquote\" context=\"blockquote-list\" String=\"%1%2\\s+&gt;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"List: Horizontal Rule\" String=\"%1%2\\s+&rulerregex;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr String=\"&emptyline;\" column=\"0\"/>\n        <!-- Text with the same indentation captured corresponds to the item list -->\n        <RegExpr context=\"content-list\" String=\"%1%2\\s\" column=\"0\" lookAhead=\"true\" dynamic=\"true\"/>\n        <!-- Finish when the text has a lower indentation than the list -->\n        <RegExpr context=\"#pop\" String=\"^\\s*\\S\" column=\"0\" lookAhead=\"true\"/>\n        <!-- Highlight checkbox at the start of the item (task list) -->\n        <RegExpr attribute=\"List: Checkbox\" context=\"content-list\" String=\"\\s*&checkbox;\"/>\n      </context>\n      <!-- 1. numlist (one digit) -->\n      <context name=\"numlist\" attribute=\"Markdown\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"content-list\">\n        <RegExpr attribute=\"List: Code\" String=\"%1%2\\s{2}&indentedcodeblock;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Blockquote\" context=\"blockquote-list\" String=\"%1%2\\s{2,}&gt;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"List: Horizontal Rule\" String=\"%1%2\\s{2,}&rulerregex;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr String=\"&emptyline;\" column=\"0\"/>\n        <RegExpr context=\"content-list\" String=\"%1%2\\s{2}\" column=\"0\" lookAhead=\"true\" dynamic=\"true\"/>\n        <RegExpr context=\"#pop\" String=\"^\\s*\\S\" column=\"0\" lookAhead=\"true\"/>\n      </context>\n      <!-- 10. numlist (two or more digits) -->\n      <context name=\"numlist2\" attribute=\"Markdown\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"content-list\">\n        <RegExpr attribute=\"List: Code\" String=\"%1%2\\s{3}&indentedcodeblock;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Blockquote\" context=\"blockquote-list\" String=\"%1%2\\s{3,}&gt;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr attribute=\"List: Horizontal Rule\" String=\"%1%2\\s{3,}&rulerregex;\" column=\"0\" dynamic=\"true\"/>\n        <RegExpr String=\"&emptyline;\" column=\"0\"/>\n        <RegExpr context=\"content-list\" String=\"%1%2\\s{3}\" column=\"0\" lookAhead=\"true\" dynamic=\"true\"/>\n        <RegExpr context=\"#pop\" String=\"^\\s*\\S\" column=\"0\" lookAhead=\"true\"/>\n      </context>\n\n      <context name=\"content-list\" attribute=\"Markdown\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n        <IncludeRules context=\"Common\"/>\n        <IncludeRules context=\"content-list##Markdown\" includeAttrib=\"true\"/>\n      </context>\n\n      <context name=\"blockquote\" attribute=\"Markdown\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n        <IncludeRules context=\"Common\"/>\n        <IncludeRules context=\"blockquote##Markdown\" includeAttrib=\"true\"/>\n      </context>\n      <context name=\"blockquote-list\" attribute=\"Markdown\" lineEndContext=\"#stay\" lineEmptyContext=\"#pop\">\n        <IncludeRules context=\"Common\"/>\n        <IncludeRules context=\"blockquote-list##Markdown\" includeAttrib=\"true\"/>\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Markdown\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Structure\" defStyleNum=\"dsRegionMarker\"/>\n      <itemData name=\"MathMode\" defStyleNum=\"dsRegionMarker\" color=\"#00A000\"/>\n      <itemData name=\"Document Headers\" defStyleNum=\"dsOthers\"/>\n\n      <itemData name=\"Blockquote\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n      <itemData name=\"List\" defStyleNum=\"dsSpecialString\" bold=\"1\" spellChecking=\"false\"/>\n      <itemData name=\"Number List\" defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n      <itemData name=\"List: Horizontal Rule\" defStyleNum=\"dsNormal\" bold=\"true\" spellChecking=\"false\"/>\n      <itemData name=\"List: Code\" defStyleNum=\"dsInformation\"/>\n      <itemData name=\"List: Checkbox\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n      <itemData name=\"Backslash Escape\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <keywords additionalDeliminator=\"`\"/>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\"/>\n    </comments>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/roff.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY roffidc \"[^]\\s]\">\n  <!ENTITY roffid  \"(&roffidc;|\\(&roffidc;{2}|\\[&roffidc;+\\])\">\n  <!ENTITY roffnum \"([0-9]+)\">\n  <!ENTITY argsep1 \"([^\\\\]|\\\\[&#37; |\\^{}'`\\-!?@)/,&amp;:~0E_acdeprtu])\">\n  <!ENTITY argsep2 \"([^\\\\0-9]|\\\\[&#37;:{}'`\\-_!@/cep])\">\n]>\n<language name=\"Roff\" section=\"Markup\" version=\"3\" kateversion=\"2.4\" extensions=\"\" author=\"Matthew Woehlke (mw_triad@users.sourceforge.net)\" license=\"GPL\">\n\n  <highlighting>\n\n    <list name=\"layout\">\n      <item>br</item>\n      <item>sp</item>\n    </list>\n\n    <list name=\"formatting\">\n    </list>\n\n    <list name=\"gnuext\">\n    </list>\n\n    <contexts>\n\n      <!-- root context -->\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"DetectComments\"/>\n        <DetectChar attribute=\"Other Macros\" context=\"DetectDirective\" char=\".\" column=\"0\"/>\n        <IncludeRules context=\"DetectOthers\"/>\n      </context>\n\n      <context name=\"DetectComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"Comment\" String=\"\\.\\s*\\\\&quot;\" column=\"0\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"\\\" char1=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"\\\" char1=\"#\"/>\n      </context>\n\n      <!-- catch glyphc, registers, strings, etc -->\n      <context name=\"DetectOthers\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"DetectComments\"/>\n        <DetectChar attribute=\"Escape\" context=\"DetectEscape\" char=\"\\\" lookAhead=\"true\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      </context>\n\n      <!-- detect escapes -->\n      <context name=\"DetectEscape\" attribute=\"Error\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Register\" context=\"#pop\" String=\"\\\\(\\*|n[+-]?)&roffid;\"/>\n        <RegExpr attribute=\"Font\" context=\"#pop\" String=\"\\\\[fF]&roffid;\"/>\n        <RegExpr attribute=\"Font\" context=\"#pop\" String=\"\\\\f([0-9]|\\([0-9][0-9]|\\[[0-9]+\\])\"/>\n        <RegExpr attribute=\"Font\" context=\"#pop\" String=\"\\\\s(\\[([1-3][0-9]|[04-9])\\]|[04-9]|[+-][0-9]|([+-]?\\(|\\([+-])[0-9][0-9])\"/>\n        <Detect2Chars attribute=\"Escape\" context=\"#pop\" char=\"\\\" char1=\"\\\"/>\n        <RegExpr attribute=\"Escape\" context=\"#pop\" String=\"\\\\(\\$[0-9*@]|[.:&#37; |^{}_!?@)/,&amp;:~0acdeEprtu])\"/>\n        <RegExpr attribute=\"Escape\" context=\"Argument\" String=\"\\\\[ABDXZbow]&argsep1;\"/>\n        <RegExpr attribute=\"Escape\" context=\"#pop\" String=\"\\\\[gkmMVYz]&roffid;\"/>\n        <RegExpr attribute=\"Escape\" context=\"#pop\" String=\"\\\\O([0-4]|\\[5[lrci][^]]\\])\"/>\n        <RegExpr attribute=\"Escape\" context=\"Measurement\" String=\"\\\\[hHSvx]&argsep1;\"/>\n        <RegExpr attribute=\"Escape\" context=\"Measurement\" String=\"\\\\[lL]&argsep1;\\|?\"/> <!-- TODO - optional trailing &glyph; -->\n        <RegExpr attribute=\"Escape\" context=\"Argument\" String=\"\\\\R&argsep1;\"/> <!-- TODO - &roffid; (register), measurement -->\n        <RegExpr attribute=\"Glyph\" context=\"GlyphArgument\" String=\"\\\\C&argsep1;\"/>\n        <RegExpr attribute=\"Glyph\" context=\"#pop\" String=\"\\\\N&argsep2;[0-9]+\\1\"/>\n        <RegExpr attribute=\"Glyph\" context=\"#pop\" String=\"\\\\&roffid;\"/>\n        <RegExpr attribute=\"Escape\" context=\"#pop\" String=\"\\\\$\"/>\n        <DetectChar attribute=\"Error\" context=\"#pop\" char=\"\\\"/>\n      </context>\n\n      <!-- directive start -->\n      <context name=\"DetectDirective\" attribute=\"Other Macros\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Layout Macros\" context=\"Directive\" String=\"layout\"/>\n        <keyword attribute=\"Format Macros\" context=\"Directive\" String=\"formatting\"/>\n        <keyword attribute=\"GNU Macros\" context=\"Directive\" String=\"gnuext\"/>\n        <RegExpr attribute=\"Other Macros\" context=\"dsDirective\" String=\"\\s*ds\\b\" column=\"1\"/>\n        <RegExpr attribute=\"Other Macros\" context=\"deDirective\" String=\"\\s*de\\b\" column=\"1\" beginRegion=\"de\"/>\n        <RegExpr attribute=\"Other Macros\" context=\"daDirective\" String=\"\\s*da(?=\\s+[A-Za-z]+)\" column=\"1\" beginRegion=\"di\"/>\n        <RegExpr attribute=\"Other Macros\" context=\"diDirective\" String=\"\\s*di(?=\\s+[A-Za-z]+)\" column=\"1\" beginRegion=\"di\"/>\n        <RegExpr attribute=\"Other Macros\" context=\"Directive\" String=\"\\s*[A-Za-z]+\\b\" column=\"1\"/>\n      </context>\n\n      <!-- comment -->\n      <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\"/>\n      </context>\n\n      <!-- error -->\n      <context name=\"Error\" attribute=\"Error\" lineEndContext=\"#stay\"/>\n\n      <!-- generic directive -->\n      <context name=\"Directive\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"\\\" char1=\"&quot;\"/>\n        <IncludeRules context=\"DetectOthers\"/>\n      </context>\n\n      <!-- quoted string -->\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        <IncludeRules context=\"DetectOthers\"/>\n      </context>\n\n      <!-- \\!, \\? escapes -->\n      <context name=\"LiteralSL\" attribute=\"Normal Text\" lineEndContext=\"#pop\"/>\n      <context name=\"LiteralIL\" attribute=\"Normal Text\" lineEndContext=\"Error\">\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <Detect2Chars attribute=\"Escape\" context=\"#pop\" char=\"\\\" char1=\"?\"/>\n      </context>\n\n      <!-- escape argument -->\n      <context name=\"Argument\" attribute=\"String\" lineEndContext=\"Error\" dynamic=\"true\">\n        <RegExpr attribute=\"Escape\" context=\"#pop#pop\" String=\"%1\" dynamic=\"true\"/>\n        <IncludeRules context=\"DetectOthers\"/>\n      </context>\n\n      <!-- glyph escape argument -->\n      <context name=\"GlyphArgument\" attribute=\"Glyph\" lineEndContext=\"Error\" dynamic=\"true\">\n        <RegExpr attribute=\"Glyph\" context=\"#pop#pop\" String=\"%1\" dynamic=\"true\"/>\n      </context>\n\n      <!-- measurement (or expression) escape argument -->\n      <context name=\"Measurement\" attribute=\"Error\" lineEndContext=\"Error\" dynamic=\"true\">\n        <RegExpr attribute=\"Escape\" context=\"#pop#pop\" String=\"%1\" dynamic=\"true\"/>\n        <!-- TODO -->\n      </context>\n\n      <!-- .de directive -->\n      <context name=\"deDirective\" attribute=\"Identifier\" lineEndContext=\"deBody\"/>\n      <context name=\"deBody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Other Macros\" context=\"#pop#pop\" char=\".\" char1=\".\" column=\"0\" endRegion=\"de\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <!-- .di directives -->\n      <context name=\"diDirective\" attribute=\"Identifier\" lineEndContext=\"diBody\"/>\n      <context name=\"diBody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Other Macros\" context=\"#pop#pop\" String=\"\\.\\s*di\\b\" column=\"0\" endRegion=\"di\"/>\n        <Detect2Chars attribute=\"Escape\" context=\"LiteralSL\" char=\"\\\" char1=\"!\"/>\n        <Detect2Chars attribute=\"Escape\" context=\"LiteralIL\" char=\"\\\" char1=\"?\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <!-- .da directives -->\n      <context name=\"daDirective\" attribute=\"Identifier\" lineEndContext=\"daBody\"/>\n      <context name=\"daBody\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Other Macros\" context=\"#pop#pop\" String=\"\\.\\s*da\\b\" column=\"0\" endRegion=\"di\"/>\n        <Detect2Chars attribute=\"Escape\" context=\"LiteralSL\" char=\"\\\" char1=\"!\"/>\n        <Detect2Chars attribute=\"Escape\" context=\"LiteralIL\" char=\"\\\" char1=\"?\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n\n      <!-- .ds directive -->\n      <context name=\"dsDirective\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"\\\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"String\" context=\"dsString\" char=\"&quot;\"/>\n        <IncludeRules context=\"DetectOthers\"/>\n      </context>\n\n      <!-- .ds quoted value -->\n      <context name=\"dsString\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"DetectOthers\"/>\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Comment\"        defStyleNum=\"dsComment\"/>\n      <itemData name=\"Layout Macros\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Format Macros\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"GNU Macros\"     defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Other Macros\"   defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Identifier\"     defStyleNum=\"dsString\"/>\n      <itemData name=\"Number\"         defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Register\"       defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Font\"           defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Glyph\"          defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Escape\"         defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"         defStyleNum=\"dsString\"/>\n      <itemData name=\"Error\"          defStyleNum=\"dsError\"/>\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n\n    <comments>\n      <comment name=\"singleLine\" start=\".\\&quot;\" />\n    </comments>\n\n    <keywords casesensitive=\"1\"/>\n\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rpmspec.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n  <!ENTITY a_valid_char_in_macro_names \"A-Za-z0-9_\">\n  <!ENTITY command_section_name \"(prep|build|pre|preun|install|post|postun|clean|files|trigger|triggerin|triggerun|triggerpostun|verifyscript|check|pretrans|posttrans)\">\n  <!ENTITY arch \"(aarch64|alpha|alphaev5|alphaev56|alphaev6|alphaev67|alphapca56|amd64|armv3l|armv4b|armv4l|armv4tl|armv5b|armv5l|armv5teb|armv5tejl|armv5tel|armv6l|armv7l|atariclone|atarist|atariste|ataritt|athlon|axp|em64t|falcon|fat|geode|hades|hppa|hppa1\\.0|hppa1\\.1|hppa1\\.2|hppa2\\.0|hppa64|i370|i386|i486|i586|i686|ia32e|ia64|IP|m68k|m68kmint|milan|mips|mipsel|noarch|osfmach3_i386|osfmach3_i486|osfmach3_i586|osfmach3_i686|osfmach3_ppc|parisc|pentium3|pentium4|powerpc|powerpc64|powerppc|ppc|ppc32dy4|ppc64|ppc64le|ppc64iseries|ppc64pseries|ppc8260|ppc8560|ppciseries|ppcpseries|rs6000|s390|s390x|sgi|sh|sh3|sh4|sh4a|sparc|sparc64|sparc64v|sparcv8|sparcv9|sparcv9v|sun4|sun4c|sun4d|sun4m|sun4u|x86_64|xtensa)\">\n  <!ENTITY os \"(AIX|AmigaOS|BSD_OS|bsdi|bsdi4\\.0|cygwin32|CYGWIN32_95|CYGWIN32_NT|Darwin|darwin|Darwin|FreeBSD|FreeMiNT|HP-UX|hpux10|hpux10\\.00|hpux10\\.01|hpux10\\.10|hpux10\\.20|hpux10\\.30|hpux11\\.00|hpux9\\.04|hpux9\\.05|hpux9\\.07|IRIX|Irix|IRIX|IRIX64|Irix64|IRIX64|Linux|Linux\\/390|Linux\\/ESA|machten|MacOSX|macosx|MacOSX|MiNT|mint|MiNT|mint|MiNT|mint|MP_RAS|ncr-sysv4\\.2|ncr-sysv4\\.3|NEXTSTEP|NextStep|OS\\/390|OSF1|osf1|osf3\\.2|osf4\\.0|SCO_SV|SCO_SV3\\.2v5\\.0\\.2|solaris|solaris2\\.3|solaris2\\.4|solaris2\\.5|solaris2\\.6|solaris2\\.7|SunOS|SunOS4|SunOS5|TOS|UNIX_SV|VM\\/ESA)\">\n  <!ENTITY arch_conditionals_names \"(ifarch|ifnarch)\">\n  <!ENTITY os_conditionals_names \"(ifos|ifnos)\">\n  <!ENTITY lookahead_whitespace_eol \"(?=($| |\\t))\">\n]>\n<language name=\"RPM Spec\" version=\"5\" kateversion=\"2.4\" section=\"Other\" extensions=\"*.spec\" mimetype=\"text/x-rpm-spec\" license=\"Public Domain\">\n\n<!-- The entities \"arch\" and \"os\" are based on /usr/lib/rpm/rpmrc (in the version coming with openSUSE 11.4). -->\n\n  <highlighting>\n\n    <list name=\"weekdays\">\n      <item>Mon</item>\n      <item>Tue</item>\n      <item>Wed</item>\n      <item>Thu</item>\n      <item>Fri</item>\n      <item>Sat</item>\n      <item>Sun</item>\n    </list>\n\n    <list name=\"month names\">\n      <item>Jan</item>\n      <item>Feb</item>\n      <item>Mar</item>\n      <item>Apr</item>\n      <item>May</item>\n      <item>Jun</item>\n      <item>Jul</item>\n      <item>Aug</item>\n      <item>Sep</item>\n      <item>Oct</item>\n      <item>Nov</item>\n      <item>Dec</item>\n    </list>\n\n    <list name=\"days\">\n      <item>1</item>\n      <item>2</item>\n      <item>3</item>\n      <item>4</item>\n      <item>5</item>\n      <item>6</item>\n      <item>7</item>\n      <item>8</item>\n      <item>9</item>\n      <item>01</item>\n      <item>02</item>\n      <item>03</item>\n      <item>04</item>\n      <item>05</item>\n      <item>06</item>\n      <item>07</item>\n      <item>08</item>\n      <item>09</item>\n      <item>10</item>\n      <item>11</item>\n      <item>12</item>\n      <item>13</item>\n      <item>14</item>\n      <item>15</item>\n      <item>16</item>\n      <item>17</item>\n      <item>18</item>\n      <item>19</item>\n      <item>20</item>\n      <item>21</item>\n      <item>22</item>\n      <item>23</item>\n      <item>24</item>\n      <item>25</item>\n      <item>26</item>\n      <item>27</item>\n      <item>28</item>\n      <item>29</item>\n      <item>30</item>\n      <item>31</item>\n    </list>\n\n    <contexts>\n      <!-- \"package section\" is the context for the package defination. As it is the first context\n      in this file, it is also the context with which the interpreter starts. -->\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"package section\">\n        <!-- Handle tags: -->\n        <RegExpr attribute=\"Tag\" context=\"tag_line_value\" String=\"((Icon)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <RegExpr attribute=\"Tag\" context=\"tag_line_os\" String=\"((ExclusiveOs|ExcludeOs)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <RegExpr attribute=\"Tag\" context=\"tag_line_arch\" String=\"((BuildArch|BuildArchitectures|ExclusiveArch|ExcludeArch)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <RegExpr attribute=\"Tag\" context=\"tag_line_package\" String=\"((Conflicts|Obsoletes|Provides|Requires|Requires\\(.*\\)|Enhances|Suggests|BuildConflicts|BuildRequires|Recommends|PreReq)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <RegExpr attribute=\"Tag\" context=\"tag_line_integer\" String=\"((Epoch|Serial|Nosource|Nopatch)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <RegExpr attribute=\"Tag\" context=\"tag_line_switch\" String=\"((AutoReq|AutoProv|AutoReqProv)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <RegExpr attribute=\"Tag\" context=\"tag_line_string\" String=\"((Copyright|License|Summary|Summary\\(.*\\)|Distribution|Vendor|Packager|Group|Source\\d*|Patch\\d*|BuildRoot|Prefix)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <RegExpr attribute=\"Tag\" context=\"tag_line_string_only_one_word\" String=\"((Name|Version|Release|Url|URL)[ \\t]*:[ \\t]*)\" column=\"0\" />\n        <!-- Handle % -->\n        <AnyChar context=\"macro entry in package section\" String=\"%$\" lookAhead=\"true\" />\n        <!-- Handle comments. \"# norootforbuild\" is displayed like a tag. -->\n        <RegExpr context=\"Comment\" String=\"[ \\t]*#\" column=\"0\" lookAhead=\"true\" />\n                <!-- Spaces are okay -->\n        <DetectSpaces attribute=\"Fallback for separator spaces\" />\n        <!-- Fallback value for every non-space -->\n        <!--RegExpr attribute=\"Error\" context=\"#stay\" String=\"[^\\s]\" /-->\n      </context>\n\n      <!-- \"macro entry in package section\" is used for lines in the package section that start\n      with a macro. It recognizes macros. Everything else is treated as normal text. This context\n      is used to prevent to highlight syntax errors after macros. With the next line break, this\n      context will switch back (\"#pop\"). -->\n      <context attribute=\"Shell commands\" lineEndContext=\"#pop\" name=\"macro entry in package section\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"package section start line\" simply is used for the parameters after the\n      \"%package\" macro. With the next line break, it will switch to the\n      \"package section\" context which will handle everything else. -->\n      <context attribute=\"Shell commands\" lineEndContext=\"package section\" name=\"package section start line\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"command section\" is a generic context for all secions (like %prep, %build, %install...)\n      where you can enter shell commands. -->\n      <context attribute=\"Shell commands\" lineEndContext=\"#stay\" name=\"command section\">\n        <!-- Handle \\ -->\n        <RegExpr attribute=\"Escaped character\" String=\"\\\\.\" />\n        <DetectChar attribute=\"Line break\" char=\"\\\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n        <!-- Handle comments. \"# norootforbuild\" is displayed like a tag. -->\n        <RegExpr context=\"Comment\" String=\"[ \\t]*#\" column=\"0\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"changelog section\" is the context for the changelog. By default, everything that is\n      not recognized especially, is interpretated as changelog text. -->\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"changelog section\">\n        <!-- Handle calender date -->\n        <DetectChar attribute=\"Tag\" context=\"changelog_weekday\" char=\"*\" column=\"0\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n        <!-- Handle comments. \"# norootforbuild\" is displayed like a tag. -->\n        <RegExpr context=\"Comment\" String=\"[ \\t]*#\" column=\"0\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"description section start line\" simply is used for the parameters after the\n      \"%description\" macro. With the next line break, it will switch to the\n      \"description section\" context which will handle the content of the description. -->\n      <context attribute=\"Shell commands\" lineEndContext=\"description section\" name=\"description section start line\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"description section\" is a follow-up context of \"description section start line\". See\n      there for further details. -->\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"description section\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n        <!-- Handle comments. \"# norootforbuild\" is displayed like a tag. -->\n        <RegExpr context=\"Comment\" String=\"[ \\t]*#\" column=\"0\" lookAhead=\"true\" />\n      </context>\n\n      <!-- This is a convenience context that is handling comments automatically. Furthermore it\n      handles \"# norootforbuild\" because it looks like a comment. If a context supports comments,\n      simple use \"<RegExpr context=\"Comment\" String=\"[ \\t]*#\" column=\"0\" lookAhead=\"true\" />\".\n      (This context relies on the asumption that # is the first non-whitespace. We have to\n      guarantee this when calling this context! -->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <!-- While indeeted comments are not allowed by the standard (see section \"Comments\" at\n        http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-specfile-syntax.html#id1961462),\n        rpmbuild accepts them nevertheless. We highlight them as comments, but we mark the\n        indeet. -->\n        <RegExpr attribute=\"Hint\" context=\"#stay\" String=\"[ \\t]+(?=#)\" column=\"0\" />\n\t<!-- Handle \"# norootforbuild\" and some of its miss-spellings. -->\n        <StringDetect attribute=\"Tag\" context=\"every_non_whitespace_is_warning\" String=\"# norootforbuild\" column=\"0\" />\n        <RegExpr attribute=\"Warning\" context=\"#stay\" String=\"#[ \\t]*norootforbuild\" />\n        <!-- Warning on single percent (\"%\"), but not on double percent (\"%%\"): -->\n        <Detect2Chars attribute=\"Comment\" char=\"%\" char1=\"%\"/>\n        <DetectChar attribute=\"Warning\" char=\"%\"/>\n        <IncludeRules context=\"##Alerts\"/> <!-- Alert -->\n      </context>\n\n      <!-- \"every_non_whitespace_is_error\" is a simple helper context. It switchs back to the\n      previous context at the end of the line. -->\n      <context attribute=\"Fallback for separator spaces\" lineEndContext=\"#pop\" name=\"every_non_whitespace_is_error\">\n        <RegExpr attribute=\"Error\" context=\"#stay\" String=\"[^\\s]\" />\n      </context>\n\n      <!-- \"every_non_whitespace_is_warning\" is a simple helper context. It switchs back to the\n      previous context at the end of the line. -->\n      <context attribute=\"Fallback for separator spaces\" lineEndContext=\"#pop\" name=\"every_non_whitespace_is_warning\">\n        <RegExpr attribute=\"Warning\" context=\"#stay\" String=\"[^\\s]\" />\n      </context>\n\n      <!-- \"tag_line_value\" is a context for enumeration values. It makes no further syntax\n      check. -->\n      <context attribute=\"Enumeration\" lineEndContext=\"#pop\" name=\"tag_line_value\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"tag_line_string\" is a context for string values. It makes no further syntax\n      check. -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"tag_line_string\">\n        <!-- Handle \\ -->\n        <RegExpr attribute=\"Escaped character\" String=\"\\\\[^%]\" />\n        <RegExpr attribute=\"Escaped character\" String=\"\\\\(?=(\\%))\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"tag_line_string_only_one_word\" is a context for string values. The first word is\n      highlighted as string, but after the first space (normal space, tab...), all other\n      words are highlighted as error. WARNING: This context requieres that there is no space at\n      the begin! -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"tag_line_string_only_one_word\">\n        <!-- Handle \\ -->\n        <RegExpr attribute=\"Escaped character\" String=\"\\\\[^%]\" />\n        <RegExpr attribute=\"Escaped character\" String=\"\\\\(?=(\\%))\" />\n        <!-- Handle % -->\n        <AnyChar context=\"tag_line_string\" String=\"%$\" lookAhead=\"true\" />\n        <!-- Handle spaces -->\n        <DetectSpaces context=\"every_non_whitespace_is_error\" />\n      </context>\n\n      <!-- \"tag_line_integer\" is a context for integer values. Non-integer context is marked as\n      error. -->\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"tag_line_integer\">\n        <Int attribute=\"Integer\" context=\"every_non_whitespace_is_error\" />\n        <!-- Handle % -->\n        <AnyChar context=\"tag_line_integer_without_syntax_check\" String=\"%$\" lookAhead=\"true\" />\n        <RegExpr context=\"every_non_whitespace_is_error\" String=\".\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"tag_line_os\" is a context for values that define the operation system. Unknown values\n      are marked as error. -->\n      <context attribute=\"Warning\" lineEndContext=\"#pop\" name=\"tag_line_os\">\n        <!-- Spaces are okay -->\n        <DetectSpaces attribute=\"Fallback for separator spaces\" />\n        <!-- Recognize valid values -->\n        <RegExpr attribute=\"Enumeration\" String=\"&os;&lookahead_whitespace_eol;\" />\n        <!-- Handle % -->\n        <AnyChar context=\"tag_line_value\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"tag_line_integer_without_syntax_check\" is a context that is used internally by\n      \"tag_line_integer\" after macros. -->\n      <context attribute=\"Integer\" lineEndContext=\"#pop\" name=\"tag_line_integer_without_syntax_check\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"tag_line_arch\" is a context for values that define the computer type. Unknown values\n      are marked as error. -->\n      <context attribute=\"Warning\" lineEndContext=\"#pop\" name=\"tag_line_arch\">\n        <!-- Spaces are okay -->\n        <DetectSpaces attribute=\"Fallback for separator spaces\" />\n        <!-- Recognize valid values -->\n        <RegExpr attribute=\"Enumeration\" String=\"&arch;&lookahead_whitespace_eol;\" />\n        <!-- Handle % -->\n        <AnyChar context=\"tag_line_value\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"tag_line_package\" is a context for dependency handling. The keywords <= >= == < > are\n      recognized and highlighted as keywords. Thee rest is simply highlighted as enumeration. See\n      http://docs.fedoraproject.org/drafts/rpm-guide-en/ch-specfile-syntax.html#id3045258 and\n      http://docs.fedoraproject.org/drafts/rpm-guide-en/ch-advanced-packaging.html#id2979270 for\n      details -->\n      <context attribute=\"Enumeration\" lineEndContext=\"#pop\" name=\"tag_line_package\">\n        <AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"()\" /> <!-- See http://rpm5.org/docs/api/dependencies.html about the parentheses -->\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"&lt;\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"&gt;\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"=\" char1=\"=\"/>\n        <AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"=&lt;&gt;,\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- \"tag_line_switch\" is a context that accepts \"0\", \"1\", \"yes\" and \"no\" as value.\n      Everything else is an error. See http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html\n      and http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html#S3-RPM-INSIDE-AUTOREQPROV-TAG -->\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"tag_line_switch\">\n        <AnyChar attribute=\"Enumeration\" context=\"every_non_whitespace_is_error\" String=\"01\" />\n        <Detect2Chars attribute=\"Enumeration\" context=\"every_non_whitespace_is_error\" char=\"n\" char1=\"o\"/>\n        <StringDetect attribute=\"Enumeration\" context=\"every_non_whitespace_is_error\" String=\"yes\" />\n        <!-- Handle % -->\n        <AnyChar context=\"tag_line_value\" String=\"%$\" lookAhead=\"true\" />\n        <RegExpr context=\"every_non_whitespace_is_error\" String=\".\" lookAhead=\"true\" />\n      </context>\n\n      <!-- A context that doesn't test for format errors in the changelog date anymore. Necessary\n      if macros are used. -->\n      <context attribute=\"Tag\" lineEndContext=\"#pop\" name=\"changelog_generic\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n     <!-- A context that handles the weekday in the changelog date. -->\n      <context attribute=\"Tag\" lineEndContext=\"#pop\" name=\"changelog_weekday\">\n        <DetectSpaces/>\n        <keyword context=\"changelog_month\" attribute=\"Tag\" String=\"weekdays\" />\n        <!-- % handling without format errors in the date of the changelog -->\n        <AnyChar context=\"changelog_generic\" String=\"%$\" lookAhead=\"true\" />\n        <RegExpr context=\"changelog_month\" attribute=\"Error\" String=\"\\S*\" />\n      </context>\n\n     <!-- A context that handles the month in the changelog date. -->\n      <context attribute=\"Tag\" lineEndContext=\"#pop\" name=\"changelog_month\">\n        <DetectSpaces/>\n        <keyword context=\"changelog_day\" attribute=\"Tag\" String=\"month names\" />\n        <!-- % handling without format errors in the date of the changelog -->\n        <AnyChar context=\"changelog_generic\" String=\"%$\" lookAhead=\"true\" />\n        <RegExpr context=\"changelog_day\" attribute=\"Error\" String=\"\\S*\" />\n      </context>\n\n     <!-- A context that handles the day in the changelog date. -->\n      <context attribute=\"Tag\" lineEndContext=\"#pop\" name=\"changelog_day\">\n        <DetectSpaces/>\n        <keyword context=\"changelog_year\" attribute=\"Tag\" String=\"days\" />\n        <!-- % handling without format errors in the date of the changelog -->\n        <AnyChar context=\"changelog_generic\" String=\"%$\" lookAhead=\"true\" />\n        <RegExpr context=\"changelog_year\" attribute=\"Error\" String=\"\\S*\" />\n      </context>\n\n     <!-- A context that handles the year in the changelog date. -->\n      <context attribute=\"Tag\" lineEndContext=\"#pop\" name=\"changelog_year\">\n        <DetectSpaces/>\n        <RegExpr context=\"changelog_header\" attribute=\"Tag\" String=\"(\\d{4})&lookahead_whitespace_eol;\" />\n        <!-- % handling without format errors in the date of the changelog -->\n        <AnyChar context=\"changelog_generic\" String=\"%$\" lookAhead=\"true\" />\n        <RegExpr context=\"changelog_header\" attribute=\"Error\" String=\"\\S*\" />\n      </context>\n\n     <!-- A context that handles the text after the date in a changelog (name, e-mail...). -->\n      <context attribute=\"Tag\" lineEndContext=\"#pop\" name=\"changelog_header\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Handles everything that comes after %ifos etc... -->\n      <context attribute=\"Warning\" lineEndContext=\"#pop\" name=\"parameters after ifos\">\n        <!-- Spaces are okay -->\n        <DetectSpaces attribute=\"Fallback for separator spaces\" />\n        <!-- Recognize valid values -->\n        <RegExpr attribute=\"Enumeration\" String=\"&os;&lookahead_whitespace_eol;\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Handles everything that comes after %ifarch etc... -->\n      <context attribute=\"Warning\" lineEndContext=\"#pop\" name=\"parameters after ifarch\">\n        <!-- Spaces are okay -->\n        <DetectSpaces attribute=\"Fallback for separator spaces\" />\n        <!-- Recognize valid values -->\n        <RegExpr attribute=\"Enumeration\" String=\"&arch;&lookahead_whitespace_eol;\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- Handles expressions after conditionals. -->\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"expression after _if_ statement\">\n        <!-- spaces should not be \"Error\" (which is the default for unrecognized entities) -->\n        <DetectSpaces attribute=\"Fallback for separator spaces\" context=\"#stay\" />\n        <!-- %if recognizes && || > < >= <= == != ! and () -->\n        <AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"()\" />\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"&amp;\" char1=\"&amp;\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"&lt;\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"&gt;\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"=\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"!\" char1=\"=\"/>\n        <AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"!&lt;&gt;\" />\n        <Detect2Chars attribute=\"Keyword\" context=\"#stay\" char=\"|\" char1=\"|\"/>\n        <!-- %if interpretates values either as integer or as string -->\n        <Int attribute=\"Integer\" context=\"#stay\" />\n        <DetectIdentifier attribute=\"String\" context=\"#stay\" />\n        <DetectChar attribute=\"String\" context=\"quoted strings in if statements\" char=\"&quot;\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n      <!-- This context handles quoted strings in %if statements. WARNING: Make sure that you\n      switch to this context _after_ parsing the starting \", because at the first occurrence\n      of \" this context switches back. -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"quoted strings in if statements\">\n        <!-- Handle \\ -->\n        <RegExpr attribute=\"Escaped character\" String=\"\\\\[^&quot;]\" />\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n        <!-- Switch back at the end of the quoted string -->\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n\n      <!-- Context for %define -->\n      <context attribute=\"Fallback for separator spaces\" lineEndContext=\"#pop\" name=\"macro defination\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Enumeration\" context=\"macro defination content\" String=\"[&a_valid_char_in_macro_names;]*&lookahead_whitespace_eol;\" />\n        <RegExpr attribute=\"Error\" context=\"macro defination content\" String=\"[^ \\t]*\" />\n      </context>\n\n      <!-- Context for the content of a macro defination. -->\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"macro defination content\">\n        <DetectSpaces />\n        <LineContinue attribute=\"Line break\" context=\"#stay\"/>\n        <DetectChar attribute=\"Warning\" char=\"\\\" />\n      </context>\n\n      <!-- Context for %undefine -->\n      <context attribute=\"Fallback for separator spaces\" lineEndContext=\"#pop\" name=\"undefine macro\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Enumeration\" context=\"every_non_whitespace_is_error\" String=\"[&a_valid_char_in_macro_names;]*&lookahead_whitespace_eol;\" />\n        <RegExpr attribute=\"Error\" context=\"every_non_whitespace_is_error\" String=\".\" />\n      </context>\n\n      <!-- This context handles automatically all type of macros, keywords and so on that start with % or $.\n      It expects a string starting with % or $ (otherwise, this context will fail!). -->\n      <context attribute=\"Fallback for separator spaces\" lineEndContext=\"#pop\" name=\"handle_percent\">\n        <Detect2Chars attribute=\"Escaped character\" context=\"#pop\" char=\"%\" char1=\"%\"/>\n        <!-- Keywords: -->\n        <RegExpr attribute=\"Keyword\" context=\"expression after _if_ statement\" String=\"%(if!?)&lookahead_whitespace_eol;\" firstNonSpace=\"true\" beginRegion=\"if_block\" />\n        <RegExpr attribute=\"Keyword\" context=\"parameters after ifarch\" String=\"%&arch_conditionals_names;&lookahead_whitespace_eol;\" firstNonSpace=\"true\" beginRegion=\"if_block\" />\n        <RegExpr attribute=\"Keyword\" context=\"parameters after ifos\" String=\"%&os_conditionals_names;&lookahead_whitespace_eol;\" firstNonSpace=\"true\" beginRegion=\"if_block\" />\n        <RegExpr attribute=\"Keyword\" context=\"every_non_whitespace_is_error\" String=\"%else&lookahead_whitespace_eol;\" firstNonSpace=\"true\" endRegion=\"if_block\" beginRegion=\"if_block\" />\n        <RegExpr attribute=\"Keyword\" context=\"every_non_whitespace_is_error\" String=\"%endif&lookahead_whitespace_eol;\" firstNonSpace=\"true\" endRegion=\"if_block\" />\n        <RegExpr attribute=\"Keyword\" context=\"macro defination\" String=\"%(define|global)&lookahead_whitespace_eol;\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Keyword\" context=\"undefine macro\" String=\"%undefine&lookahead_whitespace_eol;\" firstNonSpace=\"true\" />\n        <!-- If a command section starts (=section macro at begin of the line), we switch\n             to the corresponding context. There will never be a return to THIS context...: -->\n        <RegExpr attribute=\"Section\" context=\"package section start line\" String=\"%package&lookahead_whitespace_eol;\" column=\"0\" />\n        <RegExpr attribute=\"Section\" context=\"description section start line\" String=\"%description&lookahead_whitespace_eol;\" column=\"0\" />\n        <RegExpr attribute=\"Section\" context=\"command section\" String=\"%&command_section_name;&lookahead_whitespace_eol;\" column=\"0\" />\n        <RegExpr attribute=\"Section\" context=\"changelog section\" String=\"%changelog&lookahead_whitespace_eol;\" column=\"0\" />\n        <!-- Handle normal macros -->\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\"%([\\{\\(][ \\t]{0,}){0,1}(if|&arch_conditionals_names;|&os_conditionals_names;|else|endif|define|global|undefine|package|description|&command_section_name;|changelog)(?=($|[^&a_valid_char_in_macro_names;]))\" />\n        <RegExpr attribute=\"Macro call\" context=\"macro content in parenthesis\" String=\"%[&a_valid_char_in_macro_names;]*\\(\" />\n        <RegExpr attribute=\"Macro call\" context=\"macro content in braces\" String=\"(%|\\$)\\{\" />\n        <RegExpr attribute=\"Macro call\" context=\"#pop\" String=\"(%|\\$)([&a_valid_char_in_macro_names;]{1,}|\\*|\\#)(?=($|[^&a_valid_char_in_macro_names;]))\" /> <!-- ')' and '}' are only allowed as macro terminator in the lookahead because when you do something like %__make %{?jobs:-j %jobs}, then the \"%jobs\" is a valid macro. However, the disadvantage is that a line like \"%abc} isn't marked as error. But it is to complicate to distinguish this properly. -->\n        <RegExpr attribute=\"Error\" context=\"#pop\" String=\"(%|\\$)([&a_valid_char_in_macro_names;]{1,}|\\*|\\#)\" />\n        <AnyChar attribute=\"Error\" context=\"#pop\" String=\"%$\" /> <!-- a single % or $ is also an error -->\n      </context>\n\n      <!-- Used internally by \"handle_percent\" -->\n      <context attribute=\"Macro call\" lineEndContext=\"#pop#pop\" name=\"macro content in parenthesis\">\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n        <DetectChar attribute=\"Macro call\" context=\"#pop#pop\" char=\")\" />\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"({}\" />\n      </context>\n\n      <!-- Used internally by \"handle_percent\" -->\n      <context attribute=\"Macro call\" lineEndContext=\"#pop#pop\" name=\"macro content in braces\">\n        <DetectChar attribute=\"Macro call\" context=\"#pop#pop\" char=\"}\" />\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"({)\" />\n        <!--(This seems to be confusing instead of helping)AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"!?:\" /-->\n        <!-- Handle % -->\n        <AnyChar context=\"handle_percent\" String=\"%$\" lookAhead=\"true\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <!-- \"Shell commands\" is used for the sections like %prep, %build or %install, where you write\n      shell commands. -->\n      <itemData name=\"Shell commands\" defStyleNum=\"dsNormal\"/>\n      <!-- \"Fallback for separator spaces\" is used as a fallback context for spaces between\n      different contexts. For example: \"%if 1 <= %number\" has the contexts Keyword,\n      Integer, Keyword and Macro call. But the spaces between? They are using THIS\n      context. -->\n      <itemData name=\"Fallback for separator spaces\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Tag\" defStyleNum=\"dsDataType\"/>\n      <!-- \"Enumeration\" is used for data types where you can't use arbitrary strings but have\n      to use predefined values (like in \"Provides:\" or \"%undefine\"). -->\n      <itemData name=\"Enumeration\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Integer\" defStyleNum=\"dsDecVal\"/>\n      <!-- \"Error\" is used for problems that will always produce an error in the interpretation\n      process. -->\n      <itemData name=\"Error\" defStyleNum=\"dsError\"/>\n      <!-- \"Warning\" is used for problems that will maybe produce an error in the interpretation\n      process or will lead to unexpected results. -->\n      <itemData name=\"Warning\" defStyleNum=\"dsError\"/>\n      <!-- \"Hint\" is used for problems that will never produce an error in the interpretation\n      process and will always work like expected (the interpreter has error tolerance),\n      but that are claimed as bad or invalid .spec following the documentation. -->\n      <itemData name=\"Hint\" defStyleNum=\"dsError\"/>\n      <itemData name=\"Macro call\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Section\" defStyleNum=\"dsRegionMarker\"/>\n      <itemData name=\"Escaped character\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Line break\" defStyleNum=\"dsKeyword\"/>\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <!-- defining all word deliminators except space and tab as weak -->\n    <keywords casesensitive=\"1\" weakDeliminator=\".():!+,-&lt;=&gt;%&amp;*/;?[]^{|}~\\,\" />\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rsiidl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>   <!-- KATE Syntax Highlighting for RSI IDL   -->\n<!DOCTYPE language SYSTEM \"language.dtd\"><!-- Created by Markus Fraenz,fraenz@linmpi.mpg.de Aug 2002 -->\n<language name=\"RSI IDL\" version=\"3\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.pro\" mimetype=\"text/x-rsiidl-src\" author=\"Markus Fraenz (fraenz@linmpi.mpg.de)\" license=\"\">\n    <highlighting>\n        <list name=\"reserved words\">\n        <item>For</item>\n        <item>Do</item>\n        <item>Endfor</item>\n        <item>Repeat</item>\n        <item>Endrep</item>\n        <item>While</item>\n        <item>Endwhile</item>\n        <item>Until</item>\n        <item>Case</item>\n        <item>Endcase</item>\n        <item>If</item>\n        <item>Endif</item>\n        <item>Else</item>\n        <item>Endelse</item>\n        <item>Then</item>\n        <item>Begin</item>\n        <item>End</item>\n        <item>Function</item>\n        <item>Goto</item>\n        <item>Pro</item>\n        <item>Eq</item>\n        <item>Ge</item>\n        <item>Gt</item>\n        <item>Le</item>\n        <item>Lt</item>\n        <item>Ne</item>\n        <item>Mod</item>\n        <item>Or</item>\n        <item>Xor</item>\n        <item>Not</item>\n        <item>And</item>\n        <item>Then</item>\n        <item>Return</item>\n        <item>Common</item>\n        <item>Of</item>\n        <item>On_ioerror</item>\n        <item>Switch</item>\n        <item>Endswitch</item>\n        </list>\n        <list name=\"system variables\">\n        <item>dpi</item>\n        <item>dtor</item>\n        <item>map</item>\n        <item>pi</item>\n        <item>radeg</item>\n        <item>values</item>\n        <item>err</item>\n        <item>error_state</item>\n        <item>error</item>\n        <item>err_string</item>\n        <item>except</item>\n        <item>mouse</item>\n        <item>msg_prefix</item>\n        <item>syserror</item>\n        <item>syserr_string</item>\n        <item>warn</item>\n        <item>dir</item>\n        <item>dlm_path</item>\n        <item>edit_input</item>\n        <item>help_path</item>\n        <item>journal</item>\n        <item>more</item>\n        <item>path</item>\n        <item>prompt</item>\n        <item>quiet</item>\n        <item>version</item>\n        <item>c</item>\n        <item>d</item>\n        <item>order</item>\n        <item>p</item>\n        <item>x</item>\n        <item>y</item>\n        <item>z</item>\n        <item>stime</item>\n        </list>\n        <list name=\"types\"><!-- IDL5 Data types and variable creation -->\n        <item>Fix</item>\n        <item>Long</item>\n        <item>Long64</item>\n        <item>uint</item>\n        <item>Byte</item>\n        <item>Float</item>\n        <item>Double</item>\n        <item>complex</item>\n        <item>dcomplex</item>\n        <item>complexarr</item>\n        <item>dcomplexarr</item>\n        <item>String</item>\n        <item>Intarr</item>\n        <item>lonarr</item>\n        <item>lon64arr</item>\n        <item>uintarr</item>\n        <item>ulong</item>\n        <item>ulonarr</item>\n        <item>ulon64arr</item>\n        <item>Bytarr</item>\n        <item>Bytscl</item>\n        <item>Fltarr</item>\n        <item>Dblarr</item>\n        <item>Strarr</item>\n        <item>Objarr</item>\n        <item>Indgen</item>\n        <item>Findgen</item>\n        <item>Dindgen</item>\n        <item>Dcindgen</item>\n        <item>cindgen</item>\n        <item>lindgen</item>\n        <item>bindgen</item>\n        <item>sindgen</item>\n        <item>uindgen</item>\n        <item>ul64indgen</item>\n        <item>l64indgen</item>\n        <item>ulindgen</item>\n        <item>Replicate</item>\n        <item>Ptrarr</item>\n        </list>\n        <list name=\"commands\"><!-- IDL5.3 build in routines, excluding lib functions and io functions -->\n        <item>ABS</item>\n        <item>ACOS</item>\n        <item>ADAPT_HIST_EQUAL</item>\n        <item>ALOG</item>\n        <item>ALOG10</item>\n        <item>ARG_PRESENT</item>\n        <item>ASIN</item>\n        <item>ASSOC</item>\n        <item>ATAN</item>\n        <item>AXIS</item>\n        <item>BESELI</item>\n        <item>BESELJ</item>\n        <item>BESELY</item>\n        <item>BLAS_AXPY</item>\n        <item>BREAKPOINT</item>\n        <item>BROYDEN</item>\n        <item>BYTEORDER</item>\n        <item>CALL_EXTERNAL</item>\n        <item>CALL_FUNCTION</item>\n        <item>CALL_METHOD</item>\n        <item>CALL_PROCEDURE</item>\n        <item>CATCH</item>\n        <item>CEIL</item>\n        <item>CHECK_MATH</item>\n        <item>CHOLDC</item>\n        <item>CHOLSOL</item>\n        <item>COLOR_CONVERT</item>\n        <item>COLOR_QUAN</item>\n        <item>COMPILE_OPT</item>\n        <item>COMPUTE_MESH_NORMALS</item>\n        <item>CONJ</item>\n        <item>CONSTRAINED_MIN</item>\n        <item>CONTOUR</item>\n        <item>CONVERT_COORD</item>\n        <item>CONVOL</item>\n        <item>CORRELATE</item>\n        <item>COS</item>\n        <item>COSH</item>\n        <item>CREATE_STRUCT</item>\n        <item>CURSOR</item>\n        <item>DEFINE_KEY</item>\n        <item>DEFSYSV</item>\n        <item>DELVAR</item>\n        <item>DEVICE</item>\n        <item>DFPMIN</item>\n        <item>DIALOG_MESSAGE</item>\n        <item>DIALOG_PICKFILE</item>\n        <item>DIALOG_PRINTERSETUP</item>\n        <item>DIALOG_PRINTJOB</item>\n        <item>DILATE</item>\n        <item>DLM_LOAD</item>\n        <item>DRAW_ROI</item>\n        <item>ELMHES</item>\n        <item>EMPTY</item>\n        <item>ENABLE_SYSRTN</item>\n        <item>ERASE</item>\n        <item>ERODE</item>\n        <item>ERRORF</item>\n        <item>EXECUTE</item>\n        <item>EXIT</item>\n        <item>EXP</item>\n        <item>EXPAND_PATH</item>\n        <item>EXPINT</item>\n        <item>FINDFILE</item>\n        <item>FINITE</item>\n        <item>FLOOR</item>\n        <item>FORMAT_AXIS_VALUES</item>\n        <item>FORWARD_FUNCTION</item>\n        <item>FSTAT</item>\n        <item>FULSTR</item>\n        <item>FZ_ROOTS</item>\n        <item>GAUSSINT</item>\n        <item>GET_KBRD</item>\n        <item>GETENV</item>\n        <item>GRID_TPS</item>\n        <item>GRID3</item>\n        <item>HEAP_GC</item>\n        <item>HELP</item>\n        <item>HISTOGRAM</item>\n        <item>HQR</item>\n        <item>IMAGE_STATISTICS</item>\n        <item>IMAGINARY</item>\n        <item>INTERPOLATE</item>\n        <item>INVERT</item>\n        <item>ISHFT</item>\n        <item>ISOCONTOUR</item>\n        <item>ISOSURFACE</item>\n        <item>JOURNAL</item>\n        <item>KEYWORD_SET</item>\n        <item>LABEL_REGION</item>\n        <item>LINBCG</item>\n        <item>LINKIMAGE</item>\n        <item>LMGR</item>\n        <item>LNGAMMA</item>\n        <item>LNP_TEST</item>\n        <item>LOADCT</item>\n        <item>LOCALE_GET</item>\n        <item>LSODE</item>\n        <item>LUDC</item>\n        <item>LUMPROVE</item>\n        <item>LUSOL</item>\n        <item>MACHAR</item>\n        <item>MAKE_ARRAY</item>\n        <item>MAP_PROJ_INFO</item>\n        <item>MAX</item>\n        <item>MEDIAN</item>\n        <item>MESH_CLIP</item>\n        <item>MESH_DECIMATE</item>\n        <item>MESH_ISSOLID</item>\n        <item>MESH_MERGE</item>\n        <item>MESH_NUMTRIANGLES</item>\n        <item>MESH_SMOOTH</item>\n        <item>MESH_SURFACEAREA</item>\n        <item>MESH_VALIDATE</item>\n        <item>MESH_VOLUME</item>\n        <item>MESSAGE</item>\n        <item>MIN</item>\n        <item>N_ELEMENTS</item>\n        <item>N_PARAMS</item>\n        <item>N_TAGS</item>\n        <item>NEWTON</item>\n        <item>OBJ_CLASS</item>\n        <item>OBJ_DESTROY</item>\n        <item>OBJ_ISA</item>\n        <item>OBJ_NEW</item>\n        <item>OBJ_VALID</item>\n        <item>ON_ERROR</item>\n        <item>OPLOT</item>\n        <item>PARTICLE_TRACE</item>\n        <item>PLOT</item>\n        <item>PLOTS</item>\n        <item>POLY_2D</item>\n        <item>POLYFILL</item>\n        <item>POLYFILLV</item>\n        <item>POLYSHADE</item>\n        <item>POWELL</item>\n        <item>PROFILER</item>\n        <item>PTR_FREE</item>\n        <item>PTR_NEW</item>\n        <item>PTR_VALID</item>\n        <item>QROMB</item>\n        <item>QROMO</item>\n        <item>QSIMP</item>\n        <item>RANDOMN</item>\n        <item>RANDOMU</item>\n        <item>REBIN</item>\n        <item>REFORM</item>\n        <item>RETALL</item>\n        <item>RETURN</item>\n        <item>RIEMANN</item>\n        <item>RK4</item>\n        <item>ROBERTS</item>\n        <item>ROTATE</item>\n        <item>ROUND</item>\n        <item>SET_PLOT</item>\n        <item>SET_SHADING</item>\n        <item>SETENV</item>\n        <item>SHADE_SURF</item>\n        <item>SHADE_VOLUME</item>\n        <item>SHIFT</item>\n        <item>SIN</item>\n        <item>SINH</item>\n        <item>SIZE</item>\n        <item>SMOOTH</item>\n        <item>SOBEL</item>\n        <item>SORT</item>\n        <item>SPL_INIT</item>\n        <item>SPL_INTERP</item>\n        <item>SPRSAB</item>\n        <item>SPRSAX</item>\n        <item>SPRSIN</item>\n        <item>SQRT</item>\n        <item>STOP</item>\n        <item>STRCMP</item>\n        <item>STRCOMPRESS</item>\n        <item>STREGEX</item>\n        <item>STRJOIN</item>\n        <item>STRLEN</item>\n        <item>STRLOWCASE</item>\n        <item>STRMATCH</item>\n        <item>STRMESSAGE</item>\n        <item>STRMID</item>\n        <item>STRPOS</item>\n        <item>STRPUT</item>\n        <item>STRTRIM</item>\n        <item>STRUCT_ASSIGN</item>\n        <item>STRUCT_HIDE</item>\n        <item>STRUPCASE</item>\n        <item>SURFACE</item>\n        <item>SVDC</item>\n        <item>SVSOL</item>\n        <item>SYSTIME</item>\n        <item>TAG_NAMES</item>\n        <item>TAN</item>\n        <item>TANH</item>\n        <item>TEMPORARY</item>\n        <item>TETRA_CLIP</item>\n        <item>TETRA_SURFACE</item>\n        <item>TETRA_VOLUME</item>\n        <item>THIN</item>\n        <item>THREED</item>\n        <item>TOTAL</item>\n        <item>TRANSPOSE</item>\n        <item>TRIANGULATE</item>\n        <item>TRIGRID</item>\n        <item>TRIQL</item>\n        <item>TRIRED</item>\n        <item>TRISOL</item>\n        <item>TV</item>\n        <item>TVCRS</item>\n        <item>TVLCT</item>\n        <item>TVRD</item>\n        <item>TVSCLU</item>\n        <item>USERSYM</item>\n        <item>VALUE_LOCATE</item>\n        <item>VOIGT</item>\n        <item>VOXEL_PROJ</item>\n        <item>WAIT</item>\n        <item>WATERSHED</item>\n        <item>WDELETE</item>\n        <item>WHERE</item>\n        <item>WIDGET_BASE</item>\n        <item>WIDGET_BUTTON</item>\n        <item>WIDGET_CONTROL</item>\n        <item>WIDGET_DRAW</item>\n        <item>WIDGET_DROPLIST</item>\n        <item>WIDGET_EVENT</item>\n        <item>WIDGET_INFO</item>\n        <item>WIDGET_LABEL</item>\n        <item>WIDGET_LIST</item>\n        <item>WIDGET_SLIDER</item>\n        <item>WIDGET_TABLE</item>\n        <item>WIDGET_TEXT</item>\n        <item>WINDOW</item>\n        <item>WSET</item>\n        <item>WSHOW</item>\n        <item>WTN</item>\n        <item>XYOUTS</item>\n        </list>\n        <list name=\"io commands\"><!-- IDL5.3 build in I/O routines -->\n        <item>Open</item>\n        <item>FLUSH</item>\n        <item>IOCTL</item>\n        <item>RESTORE</item>\n        <item>SAVE</item>\n        <item>POINT_LUN</item>\n        <item>Openr</item>\n        <item>Openw</item>\n        <item>Openu</item>\n        <item>Close</item>\n        <item>Free_lun</item>\n        <item>get_lun</item>\n        <item>assoc</item>\n        <item>catch</item>\n        <item>cd</item>\n        <item>spawn</item>\n        <item>eof</item>\n        <item>print</item>\n        <item>printf</item>\n        <item>prints</item>\n        <item>read</item>\n        <item>readf</item>\n        <item>reads</item>\n        <item>writu</item>\n        </list>\n        <contexts>\n        <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"reserved words\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <keyword attribute=\"Command\" context=\"#stay\" String=\"commands\"/>\n        <keyword attribute=\"IOCommand\" context=\"#stay\" String=\"io commands\"/>\n        <Float attribute=\"Octal\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <RangeDetect attribute=\"String\" context=\"#stay\" char=\"'\" char1=\"'\"/>\n        <RangeDetect attribute=\"String\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <DetectChar attribute=\"Hex\" context=\"#stay\" char=\"(\" />\n        <DetectChar attribute=\"Hex\" context=\"#stay\" char=\")\" />\n        <DetectChar attribute=\"Char\" context=\"#stay\" char=\"[\" />\n        <DetectChar attribute=\"Char\" context=\"#stay\" char=\"]\" />\n        <DetectChar attribute=\"Float\" context=\"#stay\" char=\"{\" />\n        <DetectChar attribute=\"Float\" context=\"#stay\" char=\"}\" />\n        <DetectChar attribute=\"Char\" context=\"#stay\" char=\"$\" />\n        <DetectChar attribute=\"Char\" context=\"#stay\" char=\"@\" />\n        <DetectChar attribute=\"Char\" context=\"#stay\" char=\":\" />\n        <DetectChar attribute=\"Char\" context=\"Comment\" char=\"&#59;\"/>\n        <DetectChar attribute=\"Char\" context=\"systemvarcontext\" char=\"!\" />\n        </context>\n        <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        </context>\n        <context attribute=\"Char\" lineEndContext=\"#pop\" name=\"systemvarcontext\">\n        <DetectChar attribute=\"Hex\" context=\"#pop\" char=\"(\" />\n        <DetectChar attribute=\"Char\" context=\"#pop\" char=\".\" />\n        <DetectChar attribute=\"Hex\" context=\"#pop\" char=\" \" />\n        <keyword attribute=\"Float\" context=\"#pop\" String=\"system variables\"/>\n        </context>\n        </contexts>\n        <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"   defStyleNum=\"dsKeyword\" color=\"#1414e4\" selColor=\"#ffd60b\" bold=\"1\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\" color=\"#000000\" selColor=\"#ffffff\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Hex\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsDecVal\" color=\"#000000\" selColor=\"#ffffff\"/>\n      <itemData name=\"Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\" color=\"#ff0000\" selColor=\"#ff0000\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\" color=\"#2b7805\" selColor=\"#945ca4\"/>\n      <itemData name=\"Command\"  defStyleNum=\"dsBaseN\" color=\"#050505\" selColor=\"#ffffff\" bold=\"1\"/>\n      <itemData name=\"IOCommand\"  defStyleNum=\"dsDataType\" color=\"#050505\" selColor=\"#ffffff\" bold=\"1\"/>\n        </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"&#59;\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rtf.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [ <!ENTITY number \"([-]?\\d+)\"> ] >\n<language name=\"Rich Text Format\" version=\"2\" kateversion=\"2.4\" section=\"Markup\" extensions=\"*.rtf\" mimetype=\"text/rtf;application/rtf\" author=\"Lukas Sommer\" license=\"LGPL version 2.1, or version 3 or later versions approved by the membership of KDE e.V.; or any other license appoved by the emembership of KDE e.V.\">\n\n  <highlighting>\n    \n    <contexts>\n\n      <context attribute=\"Text\" lineEndContext=\"#stay\" name=\"context_normal\">\n        <DetectChar char=\"{\" attribute=\"Braces\" beginRegion=\"true\" />\n        <DetectChar char=\"}\" attribute=\"Braces\" endRegion=\"true\" />\n        <DetectChar char=\"\\\" lookAhead=\"true\" context=\"context_process_backslash\" />\n      </context>\n\n      <context lineEndContext=\"context_normal\" fallthrough=\"true\" fallthroughContext=\"context_normal\" attribute=\"Numeric parameter\" name=\"context_process_backslash\">\n        <Detect2Chars char=\"\\\" char1=\"|\" attribute=\"Control words\" />\n        <Detect2Chars char=\"\\\" char1=\"~\" attribute=\"Character\" />\n        <Detect2Chars char=\"\\\" char1=\"-\" attribute=\"Character\" />\n        <Detect2Chars char=\"\\\" char1=\"_\" attribute=\"Character\" />\n        <Detect2Chars char=\"\\\" char1=\":\" attribute=\"Control words\" />\n        <Detect2Chars char=\"\\\" char1=\"*\" attribute=\"Control words\" />\n        <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Character\" />\n        <Detect2Chars char=\"\\\" char1=\"{\" attribute=\"Character\" />\n        <Detect2Chars char=\"\\\" char1=\"}\" attribute=\"Character\" />\n        <RegExpr String=\"\\\\u&number;\" attribute=\"Character\"/>\n        <RegExpr String=\"\\\\'[01-9a-f]{2}\" attribute=\"Character\"/>\n        <RegExpr String=\"\\\\[a-zA-Z]+\" attribute=\"Control words\" context=\"context_functionparameter\" />\n        <DetectChar char=\"\\\" attribute=\"Error\" />\n      </context>\n\n      <context attribute=\"Control words\" lineEndContext=\"context_normal\" fallthrough=\"true\" fallthroughContext=\"context_normal\" name=\"context_functionparameter\">\n        <RegExpr String=\"[-]?\\d+\" attribute=\"Numeric parameter\" context=\"context_normal\" />\n        <DetectChar char=\"-\" attribute=\"Error\" />\n      </context>\n\n    </contexts>\n    \n    <itemDatas>\n      <itemData name=\"Text\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Character\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Braces\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Control words\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Numeric parameter\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\"/>\n    </itemDatas>\n    \n  </highlighting>\n  \n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/ruby.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!--\n  Ruby syntax highlighting definition for Kate.\n\n  Copyright (C) 2004  by Sebastian Vuorinen (sebastian dot vuorinen at helsinki dot fi)\n  Copyright (C) 2004  by Stefan Lang (langstefan@gmx.at)\n  Copyright (C) 2008  by Robin Pedersen (robinpeder@gmail.com)\n  Copyright (C) 2011  by Miquel Sabaté (mikisabate@gmail.com)\n\n  This library is free software; you can redistribute it and/or\n  modify it under the terms of the GNU Library General Public\n  License as published by the Free Software Foundation; either\n  version 2 of the License, or (at your option) any later version.\n\n  This library is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n  Library General Public License for more details.\n\n  You should have received a copy of the GNU Library General Public\n  License along with this library; if not, write to the\n  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n  Boston, MA  02110-1301, USA.\n-->\n\n<!--\n    TODO: Division after gdl contexts is interpreted as regexp\n-->\n\n<!-- Hold the \"language\" opening tag on a single line, as mentioned in \"language.dtd\". -->\n<language name=\"Ruby\" section=\"Scripts\"\n\t  version=\"10\" kateversion=\"3.3\"\n\t  extensions=\"*.rb;*.rjs;*.rxml;*.xml.erb;*.js.erb;*.rake;Rakefile;Gemfile;*.gemspec;Vagrantfile\"\n\t  mimetype=\"application/x-ruby\"\n\t  style=\"ruby\" indenter=\"ruby\"\n\t  author=\"Stefan Lang (langstefan@gmx.at), Sebastian Vuorinen (sebastian.vuorinen@helsinki.fi), Robin Pedersen (robinpeder@gmail.com), Miquel Sabaté (mikisabate@gmail.com)\" license=\"LGPLv2+\">\n\n\t<highlighting>\n\n\t\t<list name=\"keywords\">\n\t\t\t<item>BEGIN</item>\n\t\t\t<item>END</item>\n\t\t\t<item>and</item>\n\t\t\t<item>begin</item>\n\t\t\t<item>break</item>\n\t\t\t<item>case</item>\n\t\t\t<item>defined?</item>\n\t\t\t<item>do</item>\n\t\t\t<item>else</item>\n\t\t\t<item>elsif</item>\n\t\t\t<item>end</item>\n\t\t\t<item>ensure</item>\n\t\t\t<item>for</item>\n\t\t\t<item>if</item>\n\t\t\t<item>in</item>\n\t\t\t<item>next</item>\n\t\t\t<item>not</item>\n\t\t\t<item>or</item>\n\t\t\t<item>redo</item>\n\t\t\t<item>rescue</item>\n\t\t\t<item>retry</item>\n\t\t\t<item>return</item>\n\t\t\t<item>then</item>\n\t\t\t<item>unless</item>\n\t\t\t<item>until</item>\n\t\t\t<item>when</item>\n\t\t\t<item>yield</item>\n\t\t</list>\n\n\t\t<list name=\"access-control\">\n\t\t\t<item>private_class_method</item>\n\t\t\t<item>private</item>\n\t\t\t<item>protected</item>\n\t\t\t<item>public_class_method</item>\n\t\t\t<item>public</item>\n\t\t</list>\n\n\t\t<list name=\"attribute-definitions\">\n\t\t\t<item>attr_reader</item>\n\t\t\t<item>attr_writer</item>\n\t\t\t<item>attr_accessor</item>\n\t\t</list>\n\n\t\t<list name=\"definitions\">\n\t\t\t<item>alias</item>\n\t\t\t<item>module</item>\n\t\t\t<item>class</item>\n\t\t\t<item>def</item>\n\t\t\t<item>undef</item>\n\t\t</list>\n\n\t\t<list name=\"pseudo-variables\">\n\t\t\t<item>self</item>\n\t\t\t<item>super</item>\n\t\t\t<item>nil</item>\n\t\t\t<item>false</item>\n\t\t\t<item>true</item>\n\t\t\t<item>caller</item>\n\t\t\t<item>__FILE__</item>\n\t\t\t<item>__LINE__</item>\n\t\t</list>\n\n\t\t<list name=\"default-globals\">\n\t\t\t<item>$stdout</item>\n\t\t\t<item>$defout</item>\n\t\t\t<item>$stderr</item>\n\t\t\t<item>$deferr</item>\n\t\t\t<item>$stdin</item>\n\t\t</list>\n\n\t\t<!-- Kernel module methods.\n\t\t\tNOTE: Methods ending in ? or !\n\t\t\t\tare included below as regexes.\n\t\t-->\n\t\t<list name=\"kernel-methods\">\n\t\t\t<!-- backquote ` -->\n\t\t\t<item>abort</item>\n\t\t\t<item>at_exit</item>\n\t\t\t<item>autoload</item>\n\t\t\t<item>autoload?</item>\n\t\t\t<item>binding</item>\n\t\t\t<item>block_given?</item>\n\t\t\t<item>callcc</item>\n\t\t\t<item>caller</item>\n\t\t\t<item>catch</item>\n\t\t\t<item>chomp</item>\n\t\t\t<item>chomp!</item>\n\t\t\t<item>chop</item>\n\t\t\t<item>chop!</item>\n\t\t\t<item>eval</item>\n\t\t\t<item>exec</item>\n\t\t\t<item>exit</item>\n\t\t\t<item>exit!</item>\n\t\t\t<item>fail</item>\n\t\t\t<item>fork</item>\n\t\t\t<item>format</item>\n\t\t\t<item>getc</item>\n\t\t\t<item>gets</item>\n\t\t\t<item>global_variables</item>\n\t\t\t<item>gsub</item>\n\t\t\t<item>gsub!</item>\n\t\t\t<item>iterator?</item>\n\t\t\t<item>lambda</item>\n\t\t\t<item>load</item>\n\t\t\t<item>local_variables</item>\n\t\t\t<item>loop</item>\n\t\t\t<item>method_missing</item>\n\t\t\t<item>open</item>\n\t\t\t<item>p</item>\n\t\t\t<item>print</item>\n\t\t\t<item>printf</item>\n\t\t\t<item>proc</item>\n\t\t\t<item>putc</item>\n\t\t\t<item>puts</item>\n\t\t\t<item>raise</item>\n\t\t\t<item>rand</item>\n\t\t\t<item>readline</item>\n\t\t\t<item>readlines</item>\n\t\t\t<item>require</item>\n\t\t\t<item>require_relative</item>\n\t\t\t<item>scan</item>\n\t\t\t<item>select</item>\n\t\t\t<item>set_trace_func</item>\n\t\t\t<item>sleep</item>\n\t\t\t<item>split</item>\n\t\t\t<item>sprintf</item>\n\t\t\t<item>srand</item>\n\t\t\t<item>sub</item>\n\t\t\t<item>sub!</item>\n\t\t\t<item>syscall</item>\n\t\t\t<item>system</item>\n\t\t\t<item>test</item>\n\t\t\t<item>throw</item>\n\t\t\t<item>trace_var</item>\n\t\t\t<item>trap</item>\n\t\t\t<item>untrace_var</item>\n\t\t\t<item>warn</item>\n\t\t</list>\n\n\t\t<list name=\"mixin-methods\">\n\t\t\t<item>extend</item>\n\t\t\t<item>include</item>\n\t\t\t<item>prepend</item>\n\t\t</list>\n\n\t\t<contexts>\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<!-- ruby ignores newline after \\ -->\n\t\t\t\t<LineContinue attribute=\"Normal Text\" context=\"Line Continue\"/>\n\n\t\t\t\t<!-- __END__ token on own line. -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"__END__$\" context=\"DATA\" column=\"0\"/>\n\n\t\t\t\t<!-- \"shebang\" line -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"#!\\/.*\" context=\"#stay\" column=\"0\"/>\n\n\t\t\t\t<!-- \"def\" - \"end\" blocks -->\n\t\t\t\t<!-- check for statement modifiers with regexes -->\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\"{\" context=\"Find closing block brace\" beginRegion=\"def block\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(\\=|\\(|\\[|\\{)\\s*(if|unless|while|until)\\b\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\;\\s*(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(if|unless)\\b\" context=\"#stay\" beginRegion=\"def block\" firstNonSpace=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\;\\s*(if|unless)\\b\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"class\" context=\"no_heredoc\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"module\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"begin\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\bfor\\b(?!.*\\bdo\\b)\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"case\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"do\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"def\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<WordDetect attribute=\"Keyword\" String=\"end\" context=\"#stay\" endRegion=\"def block\"/>\n\t\t\t\t<!-- elsif/else close the current block and start a new one -->\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"\\b(else|elsif|rescue|ensure)\\b\" context=\"#stay\" endRegion=\"def block\" beginRegion=\"def block\"/>\n\n\t\t\t\t<StringDetect attribute=\"Operator\" String=\"...\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\".\" char1=\".\" context=\"#stay\"/>\n\n\t\t\t\t<!-- marks a message (being sent, not defined) -->\n\t\t\t\t<RegExpr attribute=\"Message\" String=\"\\.[_a-z][_a-zA-Z0-9]*(\\?|\\!|\\b)\" context=\"check_div_2\"/>\n\n\t\t\t\t<!-- Check for \"ASCII code operator\". e.g.: ?a -->\n\t\t\t\t<RegExpr attribute=\"Dec\" String=\"\\s\\?(\\\\M\\-)?(\\\\C\\-)?\\\\?\\S\" context=\"check_div_1\"/>\n\n\t\t\t\t<keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n\t\t\t\t<keyword attribute=\"Attribute Definition\" String=\"attribute-definitions\"  context=\"check_div_2\"/>\n\t\t\t\t<keyword attribute=\"Access Control\" String=\"access-control\" context=\"check_div_2\"/>\n\t\t\t\t<keyword attribute=\"Definition\" String=\"definitions\"  context=\"#stay\" />\n\t\t\t\t<keyword attribute=\"Pseudo variable\" String=\"pseudo-variables\"  context=\"check_div_1\"/>\n\t\t\t\t<keyword attribute=\"Default globals\" String=\"default-globals\" context=\"check_div_2\"/>\n\t\t\t\t<keyword attribute=\"Kernel methods\" String=\"kernel-methods\" context=\"check_div_2\"/>\n\t\t\t\t<keyword attribute=\"Module mixin methods\" String=\"mixin-methods\" context=\"check_div_2\"/>\n\n\t\t\t\t<!-- (global) vars starting with $\n\t\t\t\t\t\tMatch them before $_.\n\t\t\t\t-->\n\t\t\t\t<RegExpr attribute=\"Global Variable\" String=\"\\$[a-zA-Z_0-9]+\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Global Variable\" String=\"\\$\\-[a-zA-Z_]\\b\" context=\"check_div_1\"/>\n\t\t\t\t<!-- special-character globals -->\n\t\t\t\t<RegExpr attribute=\"Default globals\" String=\"\\$[\\d_*`+@;,.~=\\!\\$:?'/\\\\\\-\\&amp;&quot;&gt;&lt;]\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Global Constant\" String=\"\\b[_A-Z]+[A-Z_0-9]+\\b\" context=\"check_div_2\"/>\n\t\t\t\t<!-- Generally a module or class name like \"File\", \"MyModule_1\", .. -->\n\t\t\t\t<RegExpr attribute=\"Constant\" String=\"\\b[A-Z]+_*([0-9]|[a-z])[_a-zA-Z0-9]*\\b\" context=\"check_div_2\"/>\n\n\t\t\t\t<!-- Numeric values. Note that we have to allow underscores between two digits (thus the creepy regular expressions). -->\n\t\t\t\t<RegExpr attribute=\"Hex\" String=\"\\b\\-?0[xX]([0-9a-fA-F]|_[0-9a-fA-F])+\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Bin\" String=\"\\b\\-?0[bB]([01]|_[01])+\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Octal\" String=\"\\b\\-?0[1-7]([0-7]|_[0-7])*\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Float\" String=\"\\b\\-?[0-9]([0-9]|_[0-9])*\\.[0-9]([0-9]|_[0-9])*([eE]\\-?[1-9]([0-9]|_[0-9])*(\\.[0-9]*)?)?\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Dec\" String=\"\\b\\-?[1-9]([0-9]|_[0-9])*\\b\" context=\"check_div_1\"/>\n\t\t\t\t<Int attribute=\"Dec\" context=\"check_div_1\"/>\n\t\t\t\t<HlCChar attribute=\"Char\" context=\"check_div_1\"/>\n\n\t\t\t\t<!-- Check for =begin before assignment operator. -->\n\t\t\t\t<RegExpr attribute=\"Blockcomment\" String=\"^=begin(?:\\s|$)\" context=\"Embedded documentation\" beginRegion=\"comment block\" column=\"0\"/>\n\n\t\t\t\t<!-- recognize the beginning of a HEREDOC\n\t\t\t\t\tThis uses new features in Kate 2.3 and later\n\n\t\t\t\t\tThere is no other chance of keeping heredoc apart from the\n\t\t\t\t\tpush operator '<<' than requiring to put space between the operator\n\t\t\t\t\tand the string.\n\t\t\t\t-->\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"find_indented_heredoc\" String=\"\\s*&lt;&lt;[-~](?=\\w+|[&quot;'`])\" beginRegion=\"HereDocument\" />\n\t\t\t\t<RegExpr attribute=\"Operator\" context=\"find_heredoc\" String=\"\\s*&lt;&lt;(?=\\w+|[&quot;'`])\" beginRegion=\"HereDocument\" />\n\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\".\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\"&amp;\" char1=\"&amp;\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\"|\" char1=\"|\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"\\s[\\?\\:\\%]\\s\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"[|&amp;&lt;&gt;\\^\\+*~\\-=]+\" context=\"#stay\"/>\n\t\t\t\t<!-- regexp hack -->\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"\\s!\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"/=\\s\" context=\"#stay\" insensitive=\"0\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\"%\" char1=\"=\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\":\" char1=\":\" context=\"Member Access\"/>\n\n\t\t\t\t<RegExpr attribute=\"Symbol\" String=\":(@{1,2}|\\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Symbol\" String=\":\\[\\]=?\" context=\"check_div_1\"/>\n\n\t\t\t\t<!-- Do not send to \"check_div_1\" context!:\n\t\t\t\t     after detecting these rules (\": \") there can be a regular expression (see bug: #361875) -->\n\t\t\t\t<RegExpr attribute=\"Symbol\" String=\"(@{1,2}|\\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?: \" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Symbol\" String=\"\\[\\]=?: \" context=\"#stay\"/>\n\n\t\t\t\t<DetectChar attribute=\"String\" char=\"&quot;\" context=\"Quoted String\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" char=\"'\" context=\"Apostrophed String\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" char=\"`\" context=\"Command String\"/>\n\n\t\t\t\t<Detect2Chars attribute=\"Normal Text\" char=\"?\" char1=\"#\" context=\"#stay\"/>\n\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"#\\s*BEGIN.*$\"  context=\"#stay\" beginRegion=\"marker\" column=\"0\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"#\\s*END.*$\"  context=\"#stay\" endRegion=\"marker\" column=\"0\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"#\" context=\"General Comment\"/>\n\n\t\t\t\t<DetectChar attribute=\"Delimiter\" char=\"[\"  context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Delimiter\" char=\"]\"  context=\"check_div_1\"/>\n\t\t\t\t<DetectChar attribute=\"Delimiter\" char=\"{\" context=\"#stay\" beginRegion=\"def block\"/>\n\t\t\t\t<DetectChar attribute=\"Delimiter\" char=\"}\" context=\"check_div_1\" endRegion=\"def block\"/>\n\n\t\t\t\t<RegExpr attribute=\"Instance Variable\" String=\"@[a-zA-Z_0-9]+\" context=\"check_div_1\"/>\n\t\t\t\t<RegExpr attribute=\"Class Variable\" String=\"@@[a-zA-Z_0-9]+\" context=\"check_div_1\"/>\n\n\t\t\t\t<!-- handle the different regular expression formats -->\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" char=\"/\" context=\"RegEx 1\"/>\n\n\t\t\t\t<!-- recognize the beginning of a general delimited input format -->\n\t\t\t\t<!-- this moves to the next context to separate out the exact nature of the GDL input -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"find_gdl_input\" String=\"\\s*[%](?=[QqxwW]?[^\\s])\" beginRegion=\"GdlInput\" />\n\n\t\t\t\t<DetectChar attribute=\"Normal Text\" char=\")\" context=\"check_div_1\"/>\n\t\t\t\t<DetectIdentifier attribute=\"Normal Text\" context=\"check_div_2\"/>\n\n\t\t\t</context>\n\n\t\t\t<!-- In the following contexts, a slash character ('/') is a division operator -->\n\t\t\t<!-- Everywhere else, it's a regular expression delimiter -->\n\n\t\t\t<!-- A slash is always a division operator, even if preceeded by whitespace -->\n\t\t\t<context name=\"check_div_1\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Normal Text\" String=\"\\s*\" context=\"#stay\"/>\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"/%\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Same as check_div_1, but with double pop to exit the surrounding context -->\n\t\t\t<context name=\"check_div_1_pop\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\" lineEndContext=\"#pop#pop\">\n\t\t\t\t<RegExpr attribute=\"Normal Text\" String=\"\\s*\" context=\"#stay\"/>\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"/%\" context=\"#pop#pop\"/>\n\t\t\t</context>\n\n\t\t\t<!-- A slash is division operator if it's the first character, or if preceeded and followed by whitespace -->\n\t\t\t<context name=\"check_div_2\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\">\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"/%\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Normal Text\" String=\"\\s+\" context=\"check_div_2_internal\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Internal context used by check_div_2 -->\n\t\t\t<context name=\"check_div_2_internal\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\" lineEndContext=\"#pop#pop\">\n<!-- \t\t\t\t<DetectChar attribute=\"Operator\" char=\"%\" context=\"#pop#pop\"/> -->\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"[/%](?=\\s)\" context=\"#pop#pop\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Same as check_div_2, but with double pop to exit the surrounding context -->\n\t\t\t<context name=\"check_div_2_pop\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\" lineEndContext=\"#pop#pop\">\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"/%\" context=\"#pop#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Normal Text\" String=\"\\s+\" context=\"check_div_2_pop_internal\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Internal context used by check_div_2_pop -->\n\t\t\t<context name=\"check_div_2_pop_internal\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop#pop#pop\" lineEndContext=\"#pop#pop#pop\">\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\"%\" context=\"#pop#pop#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Operator\" String=\"/(?=\\s)\" context=\"#pop#pop#pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Line Continue\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(while|until)\\b(?!.*\\bdo\\b)\" context=\"#stay\" firstNonSpace=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"Keyword\" String=\"(if|unless)\\b\" context=\"#stay\" firstNonSpace=\"true\"/>\n\t\t\t\t<IncludeRules context=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Find closing block brace\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Operator\" char=\"}\" context=\"check_div_1_pop\" endRegion=\"def block\"/>\n\t\t\t\t<IncludeRules context=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Quoted String\" attribute=\"String\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"&quot;\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t\t<DetectChar char=\"&quot;\" attribute=\"String\" context=\"check_div_1_pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Apostrophed String\" attribute=\"Raw String\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"'\" context=\"#stay\"/>\n\t\t\t\t<DetectChar char=\"'\" attribute=\"Raw String\" context=\"check_div_1_pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Command String\" attribute=\"Command\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"`\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t\t<DetectChar char=\"`\" attribute=\"Command\" context=\"check_div_1_pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Embedded documentation\" attribute=\"Blockcomment\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"^=end(?:\\s.*|$)\" context=\"#pop\" endRegion=\"comment block\" column=\"0\"/>\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"RegEx 1\" attribute=\"Regular Expression\" lineEndContext=\"#stay\">\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"/\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t\t<RegExpr attribute=\"Regular Expression\" String=\"/[uiomxn]*\" context=\"check_div_1_pop\"/>\n\t\t\t</context>\n\n\t\t\t<!-- Substitutions can be nested -->\n\t\t\t<context name=\"Subst\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<DetectChar attribute=\"Substitution\" char=\"}\" context=\"#pop\"/>\n\t\t\t\t<!-- Highlight substitution as code. -->\n\t\t\t\t<IncludeRules context=\"Normal\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"Short Subst\" attribute=\"Substitution\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- Check for e.g.: \"#@var#@@xy\" -->\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"\\w(?!\\w)\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<!-- This handles access of nested module classes and class methods -->\n\t\t\t<context name=\"Member Access\" attribute=\"Member\" lineEndContext=\"#pop\">\n\t\t\t\t<!-- marks a message (being sent, not defined) -->\n\t\t\t\t<RegExpr attribute=\"Message\" String=\"\\.?[_a-z]\\w*(\\?|\\!)?(?=[^\\w\\d\\.\\:])\" context=\"check_div_2_pop\"/>\n\t\t\t\t<RegExpr attribute=\"Message\" String=\"\\.?[_a-z]\\w*(\\?|\\!)?\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Constant\" String=\"[A-Z]+_*(\\d|[a-z])\\w*(?=[^\\w\\d\\.\\:])\" context=\"check_div_2_pop\"/>\n\t\t\t\t<RegExpr attribute=\"Constant\" String=\"[A-Z]+_*([0-9]|[a-z])\\w*\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Constant Value\" String=\"[_A-Z][_A-Z0-9]*(?=[^\\w\\d\\.\\:])\" context=\"check_div_2_pop\"/>\n\t\t\t\t<RegExpr attribute=\"Constant Value\" String=\"[_A-Z][_A-Z0-9]*\" context=\"#stay\"/>\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\":\" char1=\":\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Member\" char=\".\" context=\"#stay\"/>\n\n\t\t\t\t<AnyChar attribute=\"Operator\" String=\"=+-*/%|&amp;[]{}~\" context=\"#pop\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"#\" context=\"#pop\"/>\n\t\t\t\t<AnyChar attribute=\"Normal Text\" String=\"()\\\" context=\"#pop\"/>\n\t\t\t\t<RegExpr attribute=\"Member\" String=\"\\W\" context=\"#pop\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"General Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n\t\t\t<!-- HEREDOC support\n\t\t\t\tThe contexts below support both normal and indented heredocs\n\t\t\t -->\n\t\t\t<!-- here we markup the heredoc markers -->\n\t\t\t<context name=\"find_heredoc\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"apostrophed_normal_heredoc\" String=\"'(\\w+)'\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"normal_heredoc\" String=\"(\\w+)\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"normal_heredoc\" String=\"&quot;(\\w+)&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"normal_heredoc\" String=\"`(\\w+)`\" />\n\t\t\t</context>\n\t\t\t<context name=\"find_indented_heredoc\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"apostrophed_indented_heredoc\" String=\"'(\\w+)'\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"indented_heredoc\" String=\"(\\w+)\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"indented_heredoc\" String=\"&quot;(\\w+)&quot;\" />\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"indented_heredoc\" String=\"`(\\w+)`\" />\n\t\t\t</context>\n\t\t\t<!-- these are the real heredoc contexts -->\n\t\t\t<context name=\"indented_heredoc\" attribute=\"Here Document\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" firstNonSpace=\"true\"/>\n\t\t\t\t<IncludeRules context=\"heredoc_rules\" />\n\t\t\t</context>\n\t\t\t<context name=\"apostrophed_indented_heredoc\" attribute=\"Here Document\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" firstNonSpace=\"true\"/>\n\t\t\t</context>\n\n\t\t\t<context name=\"normal_heredoc\" attribute=\"Here Document\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" column=\"0\"/>\n\t\t\t\t<IncludeRules context=\"heredoc_rules\" />\n\t\t\t</context>\n\t\t\t<context name=\"apostrophed_normal_heredoc\" attribute=\"Here Document\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"%1$\" dynamic=\"true\" endRegion=\"HereDocument\" column=\"0\"/>\n\t\t\t</context>\n\n\t\t\t<!-- rules for heredoc types -->\n\t\t\t<context name=\"heredoc_rules\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\n\t\t\t<!-- avoid highlighting heredoc markers, for example, in singleton class definition (see bug: #358273) -->\n\t\t\t<context name=\"no_heredoc\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t\t<DetectSpaces />\n\t\t\t\t<Detect2Chars attribute=\"Operator\" char=\"&lt;\" char1=\"&lt;\" context=\"#pop\"/>\n\t\t\t\t<!-- comments -->\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"#\\s*BEGIN.*$\"  context=\"#stay\" beginRegion=\"marker\" column=\"0\"/>\n\t\t\t\t<RegExpr attribute=\"Comment\" String=\"#\\s*END.*$\"  context=\"#stay\" endRegion=\"marker\" column=\"0\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" char=\"#\" context=\"General Comment\"/>\n\t\t\t</context>\n\n\t\t\t<!-- General delimited input support\n\t\t\t\tThe contexts below handle the various gdl formats\n\t\t\t -->\n\t\t\t<context name=\"find_gdl_input\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\n\t\t\t\t<!-- handle token arrays -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_1\" char=\"w\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_2\" char=\"w\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_3\" char=\"w\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_4\" char=\"w\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_token_array_5\" String=\"w([^\\s\\w])\" />\n\n\t\t\t\t<!-- handle token arrays -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_1\" char=\"W\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_2\" char=\"W\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_3\" char=\"W\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_token_array_4\" char=\"W\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_token_array_5\" String=\"W([^\\s\\w])\" />\n\n\t\t\t\t<!-- handle apostrophed strings -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_1\" char=\"q\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_2\" char=\"q\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_3\" char=\"q\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_apostrophed_4\" char=\"q\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_apostrophed_5\" String=\"q([^\\s\\w])\" />\n\n\t\t\t\t<!-- handle shell commands -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_1\" char=\"x\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_2\" char=\"x\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_3\" char=\"x\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_shell_command_4\" char=\"x\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_shell_command_5\" String=\"x([^\\s\\w])\" />\n\n\t\t\t\t<!-- handle regular expressions -->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_1\" char=\"r\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_2\" char=\"r\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_3\" char=\"r\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_regexpr_4\" char=\"r\" char1=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_regexpr_5\" String=\"r([^\\s\\w])\" />\n\n\t\t\t\t<!-- handle double-quoted strings -->\n\t\t\t\t<!--\n\t\t\t\t\t  be careful to make this the last GDL ruleset, because the rule for\n\t\t\t\t\t  the short form %?foo? will otherwise catch any of the other formats\n\t\t\t\t-->\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_1\" char=\"Q\" char1=\"(\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_2\" char=\"Q\" char1=\"{\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_3\" char=\"Q\" char1=\"[\" />\n\t\t\t\t<Detect2Chars attribute=\"GDL input\" context=\"gdl_dq_string_4\" char=\"Q\" char1=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_1\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_2\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_3\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"gdl_dq_string_4\" char=\"&lt;\" />\n\t\t\t\t<!-- then we handle the 'any char' format -->\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"gdl_dq_string_5\" String=\"Q?([^\\s\\w])\" />\n\n\t\t\t</context>\n\t\t\t<!-- double-quoted string specific contexts follow -->\n\t\t\t<context name=\"gdl_dq_string_1\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_1_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\t\t\t<!-- note that here substitution should win over nesting -->\n\t\t\t<context name=\"gdl_dq_string_2\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_2_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"}\" />\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_dq_string_3\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_3_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"]\" />\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_dq_string_4\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_dq_string_4_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_dq_string_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t</context>\n\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t -->\n\t\t\t<context name=\"gdl_dq_string_5\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"dq_string_rules\" />\n\t\t\t\t<RegExpr attribute=\"String\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<!-- rules to be included in all dq_string contexts -->\n\t\t\t<context name=\"dq_string_rules\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\n\t\t\t<!-- token array specific contexts -->\n\n\t\t\t<context name=\"gdl_token_array_1\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_1_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_token_array_2\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_2_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_token_array_3\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_3_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_token_array_4\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_token_array_4_nested\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"gdl_token_array_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t -->\n\t\t\t<context name=\"gdl_token_array_5\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"token_array_rules\" />\n\t\t\t\t<RegExpr attribute=\"String\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\n\t\t\t<!-- rules to be included in all token_array contexts -->\n\t\t\t<context name=\"token_array_rules\" attribute=\"String\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<!-- apostrophed string specific contexts -->\n\n\t\t\t<context name=\"gdl_apostrophed_1\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_1_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_apostrophed_2\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_2_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_apostrophed_3\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_3_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_apostrophed_4\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_apostrophed_4_nested\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"gdl_apostrophed_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"Raw String\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t -->\n\t\t\t<context name=\"gdl_apostrophed_5\" attribute=\"Raw String\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"apostrophed_rules\" />\n\t\t\t\t<RegExpr attribute=\"Raw String\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\"/>\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\n\t\t\t<!-- rules to be included in all apostrophed contexts -->\n\t\t\t<context name=\"apostrophed_rules\" attribute=\"Raw String\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"Raw String\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t</context>\n\n\t\t\t<!-- shell command specific contexts -->\n\n\t\t\t<context name=\"gdl_shell_command_1\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\")\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_1_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_shell_command_2\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"}\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_2_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_shell_command_3\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"]\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_3_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_shell_command_4\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"GDL input\" context=\"#pop#pop\" char=\"&gt;\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_shell_command_4_nested\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"gdl_shell_command_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"Command\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t -->\n\t\t\t<context name=\"gdl_shell_command_5\" attribute=\"Command\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"shell_command_rules\" />\n\t\t\t\t<RegExpr attribute=\"Command\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\n\t\t\t<!-- rules to be included in all shell_command contexts -->\n\t\t\t<context name=\"shell_command_rules\" attribute=\"Command\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"Command\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\n\t\t\t<!-- regular expression specific contexts -->\n\n\t\t\t<context name=\"gdl_regexpr_1\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\")\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_1_nested\" char=\"(\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\)[uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_1_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_1_nested\" char=\"(\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\")\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_regexpr_2\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"}\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\}[uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_2_nested\" char=\"{\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_2_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_2_nested\" char=\"{\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\"}\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_regexpr_3\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"]\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_3_nested\" char=\"[\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\][uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_3_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_3_nested\" char=\"[\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\"]\" />\n\t\t\t</context>\n\n\t\t\t<context name=\"gdl_regexpr_4\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"&gt;\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_4_nested\" char=\"&lt;\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"&gt;[uiomxn]*\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\t\t\t<context name=\"gdl_regexpr_4_nested\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"gdl_regexpr_4_nested\" char=\"&lt;\" />\n\t\t\t\t<DetectChar attribute=\"Regular Expression\" context=\"#pop\" char=\"&gt;\" />\n\t\t\t</context>\n\n\t\t\t<!-- this format doesn't allow nesting. it is terminated by the next occurrence of the\n\t\t\t\tdelimiter character\n\t\t\t -->\n\t\t\t<context name=\"gdl_regexpr_5\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" dynamic=\"true\">\n\t\t\t\t<IncludeRules context=\"regexpr_rules\" />\n\t\t\t\t<RegExpr attribute=\"Regular Expression\" String=\"\\\\%1\" context=\"#stay\" dynamic=\"true\" />\n\t\t\t\t<RegExpr attribute=\"GDL input\" context=\"#pop#pop\" String=\"\\s*%1[uiomxn]*\" dynamic=\"true\" endRegion=\"GdlInput\" />\n\t\t\t</context>\n\n\t\t\t<!-- rules to be included in all regexpr contexts -->\n\t\t\t<context name=\"regexpr_rules\" attribute=\"Regular Expression\" lineEndContext=\"#stay\" >\n\t\t\t\t<Detect2Chars attribute=\"Regular Expression\" char=\"\\\" char1=\"\\\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Substitution\" String=\"#@{1,2}\" context=\"Short Subst\"/>\n\t\t\t\t<Detect2Chars attribute=\"Substitution\" char=\"#\" char1=\"{\" context=\"Subst\"/>\n\t\t\t</context>\n\n\t\t\t<!-- END of General delimited input support -->\n\n\t\t\t<!-- handle data in script -->\n\t\t\t<context name=\"DATA\" attribute=\"Data\" lineEndContext=\"#stay\"/>\n\t\t</contexts>\n\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Attribute Definition\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Access Control\" defStyleNum=\"dsKeyword\" color=\"#0000FF\"/>\n\t\t\t<itemData name=\"Definition\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Pseudo variable\" defStyleNum=\"dsDecVal\"/>\n\n\t\t\t<itemData name=\"Dec\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Bin\" defStyleNum=\"dsBaseN\"/>\n\n\t\t\t<itemData name=\"Symbol\" defStyleNum=\"dsString\" color=\"#D40000\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"Raw String\" defStyleNum=\"dsString\" color=\"#DD4A4A\" selColor=\"#DD4A4A\"/>\n\t\t\t<itemData name=\"Command\" defStyleNum=\"dsString\" color=\"#AA3000\"/>\n\t\t\t<itemData name=\"Message\" defStyleNum=\"dsNormal\" color=\"#4000A7\"/> <!-- #4A00C0 -->\n\t\t\t<itemData name=\"Regular Expression\" defStyleNum=\"dsOthers\" color=\"#4A5704\"/>\n\t\t\t<itemData name=\"Substitution\"\tdefStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Data\" defStyleNum=\"dsNormal\"/>\n\t\t\t<!-- short for 'general delimited input' -->\n\t\t\t<itemData name=\"GDL input\" defStyleNum=\"dsOthers\" />\n\n\t\t\t<itemData name=\"Default globals\" defStyleNum=\"dsDataType\" color=\"#C00000\" bold=\"1\"/>\n\t\t\t<itemData name=\"Global Variable\" defStyleNum=\"dsDataType\" color=\"#C00000\"/>\n\t\t\t<itemData name=\"Global Constant\" defStyleNum=\"dsDataType\" color=\"#bb1188\" bold=\"1\"/>\n\t\t\t<itemData name=\"Constant\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Constant Value\" defStyleNum=\"dsDataType\" color=\"#bb1188\"/>\n\t\t\t<itemData name=\"Kernel methods\" defStyleNum=\"dsNormal\" color=\"#000080\" selColor=\"#ffffff\"/> <!-- #CC0E86 -->\n\t\t\t<itemData name=\"Module mixin methods\" defStyleNum=\"dsNormal\" color=\"#000080\" selColor=\"#ffffff\"/> <!-- #CC0E86 -->\n\t\t\t<itemData name=\"Member\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Instance Variable\" defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Class Variable\" defStyleNum=\"dsOthers\"/>\n\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Blockcomment\" defStyleNum=\"dsComment\"/>\n\n\t\t\t<itemData name=\"Here Document\" defStyleNum=\"dsOthers\"/>\n\n\t\t\t<itemData name=\"Delimiter\" defStyleNum=\"dsNormal\" color=\"#FF9FEC\"/>\n\t\t\t<itemData name=\"Operator\" defStyleNum=\"dsNormal\" color=\"#FF9FEC\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" weakDeliminator=\"!?\"/>\n\t</general>\n</language>\n\n<!-- kate: replace-tabs off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/rust.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n    Copyright (c) 2015 The Rust Project Developers\n\n    Permission is hereby granted, free of charge, to any\n    person obtaining a copy of this software and associated\n    documentation files (the \"Software\"), to deal in the\n    Software without restriction, including without\n    limitation the rights to use, copy, modify, merge,\n    publish, distribute, sublicense, and/or sell copies of\n    the Software, and to permit persons to whom the Software\n    is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice\n    shall be included in all copies or substantial portions\n    of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n    ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\n    TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n    PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n    SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\n    IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n    DEALINGS IN THE SOFTWARE.\n-->\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY rustIdent \"([a-zA-Z_]|[^[:ascii:]])(\\w|[^[:ascii:]])*\">\n\t<!ENTITY rustIntSuf \"([iu](8|16|32|64|128|size)?)?\">\n\t<!ENTITY commonEscape \"([trn0&apos;&quot;\\\\]|x[0-9a-fA-F]{2})\">\n\t<!ENTITY unicodeEscape \"u\\{([0-9a-fA-F]_*){1,6}\\}\">\n]>\n<language name=\"Rust\" version=\"7\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.rs\" mimetype=\"text/rust\" priority=\"15\" license=\"MIT\" author=\"The Rust Project Developers\">\n<highlighting>\n\t<list name=\"fn\">\n\t\t<item>fn</item>\n\t</list>\n\t<list name=\"type\">\n\t\t<item>type</item>\n\t</list>\n\t<list name=\"keywords\">\n\t\t<item>abstract</item>\n\t\t<item>alignof</item>\n\t\t<item>as</item>\n\t\t<item>async</item>\n\t\t<item>await</item>\n\t\t<item>become</item>\n\t\t<item>box</item>\n\t\t<item>break</item>\n\t\t<item>const</item>\n\t\t<item>continue</item>\n\t\t<item>crate</item>\n\t\t<item>default</item>\n\t\t<item>do</item>\n\t\t<item>dyn</item>\n\t\t<item>else</item>\n\t\t<item>enum</item>\n\t\t<item>extern</item>\n\t\t<item>final</item>\n\t\t<item>for</item>\n\t\t<item>if</item>\n\t\t<item>impl</item>\n\t\t<item>in</item>\n\t\t<item>let</item>\n\t\t<item>loop</item>\n\t\t<item>macro</item>\n\t\t<item>match</item>\n\t\t<item>mod</item>\n\t\t<item>move</item>\n\t\t<item>mut</item>\n\t\t<item>offsetof</item>\n\t\t<item>override</item>\n\t\t<item>priv</item>\n\t\t<item>proc</item>\n\t\t<item>pub</item>\n\t\t<item>pure</item>\n\t\t<item>ref</item>\n\t\t<item>return</item>\n\t\t<item>sizeof</item>\n\t\t<item>static</item>\n\t\t<item>struct</item>\n\t\t<item>super</item>\n\t\t<item>trait</item>\n\t\t<item>try</item>\n\t\t<item>typeof</item>\n\t\t<item>union</item>\n\t\t<item>unsafe</item>\n\t\t<item>unsized</item>\n\t\t<item>use</item>\n\t\t<item>virtual</item>\n\t\t<item>where</item>\n\t\t<item>while</item>\n\t\t<item>yield</item>\n\t\t<!-- Also (these keywords are in other lists):\n\t\t     type, Self, self. -->\n\t</list>\n\t<list name=\"traits\">\n\t\t<!-- Core Traits -->\n\t\t<item>Add</item>\n\t\t<item>AddAssign</item>\n\t\t<item>Alloc</item>\n\t\t<item>Any</item>\n\t\t<item>AsMut</item>\n\t\t<item>AsRef</item>\n\t\t<item>Binary</item>\n\t\t<item>BitAnd</item>\n\t\t<item>BitAndAssign</item>\n\t\t<item>BitOr</item>\n\t\t<item>BitOrAssign</item>\n\t\t<item>BitXor</item>\n\t\t<item>BitXorAssign</item>\n\t\t<item>Borrow</item>\n\t\t<item>BorrowMut</item>\n\t\t<item>BuildHasher</item>\n\t\t<item>Clone</item>\n\t\t<item>CoerceUnsized</item>\n\t\t<item>Copy</item>\n\t\t<item>Debug</item>\n\t\t<item>Default</item>\n\t\t<item>Deref</item>\n\t\t<item>DerefMut</item>\n\t\t<item>DispatchFromDyn</item>\n\t\t<item>Display</item>\n\t\t<item>Div</item>\n\t\t<item>DivAssign</item>\n\t\t<item>DoubleEndedIterator</item>\n\t\t<item>Drop</item>\n\t\t<item>Eq</item>\n\t\t<item>ExactSizeIterator</item>\n\t\t<item>Extend</item>\n\t\t<item>FixedSizeArray</item>\n\t\t<item>Fn</item>\n\t\t<item>FnBox</item>\n\t\t<item>FnMut</item>\n\t\t<item>FnOnce</item>\n\t\t<item>From</item>\n\t\t<item>FromIterator</item>\n\t\t<item>FromStr</item>\n\t\t<item>FusedIterator</item>\n\t\t<item>Future</item>\n\t\t<item>Generator</item>\n\t\t<item>GlobalAlloc</item>\n\t\t<item>Hash</item>\n\t\t<item>Hasher</item>\n\t\t<item>Index</item>\n\t\t<item>IndexMut</item>\n\t\t<item>Into</item>\n\t\t<item>IntoIterator</item>\n\t\t<item>Iterator</item>\n\t\t<item>LowerExp</item>\n\t\t<item>LowerHex</item>\n\t\t<item>Mul</item>\n\t\t<item>MulAssign</item>\n\t\t<item>Neg</item>\n\t\t<item>Not</item>\n\t\t<item>Octal</item>\n\t\t<item>Ord</item>\n\t\t<item>PartialEq</item>\n\t\t<item>PartialOrd</item>\n\t\t<item>Pointer</item>\n\t\t<item>Product</item>\n\t\t<item>RangeBounds</item>\n\t\t<item>Rem</item>\n\t\t<item>RemAssign</item>\n\t\t<item>Send</item>\n\t\t<item>Shl</item>\n\t\t<item>ShlAssign</item>\n\t\t<item>Shr</item>\n\t\t<item>ShrAssign</item>\n\t\t<item>Sized</item>\n\t\t<item>SliceIndex</item>\n\t\t<item>Step</item>\n\t\t<item>Sub</item>\n\t\t<item>SubAssign</item>\n\t\t<item>Sum</item>\n\t\t<item>Sync</item>\n\t\t<item>TrustedLen</item>\n\t\t<item>Try</item>\n\t\t<item>TryFrom</item>\n\t\t<item>TryInto</item>\n\t\t<item>Unpin</item>\n\t\t<item>Unsize</item>\n\t\t<item>UpperExp</item>\n\t\t<item>UpperHex</item>\n\t\t<item>Write</item>\n\t\t<!-- Standard Library Traits -->\n\t\t<item>AsSlice</item>\n\t\t<item>BufRead</item>\n\t\t<item>CharExt</item>\n\t\t<item>Decodable</item>\n\t\t<item>Encodable</item>\n\t\t<item>Error</item>\n\t\t<item>FromPrimitive</item>\n\t\t<item>IteratorExt</item>\n\t\t<item>MultiSpan</item>\n\t\t<item>MutPtrExt</item>\n\t\t<item>Pattern</item>\n\t\t<item>PtrExt</item>\n\t\t<item>Rand</item>\n\t\t<item>Read</item>\n\t\t<item>RefUnwindSafe</item>\n\t\t<item>Seek</item>\n\t\t<item>SliceConcatExt</item>\n\t\t<item>SliceExt</item>\n\t\t<item>Str</item>\n\t\t<item>StrExt</item>\n\t\t<item>TDynBenchFn</item>\n\t\t<item>Termination</item>\n\t\t<item>ToOwned</item>\n\t\t<item>ToSocketAddrs</item>\n\t\t<item>ToString</item>\n\t\t<item>UnwindSafe</item>\n\t</list>\n\t<list name=\"types\">\n\t\t<item>bool</item>\n\t\t<item>isize</item>\n\t\t<item>usize</item>\n\t\t<item>i8</item>\n\t\t<item>i16</item>\n\t\t<item>i32</item>\n\t\t<item>i64</item>\n\t\t<item>i128</item>\n\t\t<item>u8</item>\n\t\t<item>u16</item>\n\t\t<item>u32</item>\n\t\t<item>u64</item>\n\t\t<item>u128</item>\n\t\t<item>f32</item>\n\t\t<item>f64</item>\n\t\t<item>char</item>\n\t\t<item>str</item>\n\t\t<item>Option</item>\n\t\t<item>Result</item>\n\t\t<item>Self</item>\n\t\t<item>Box</item>\n\t\t<item>Vec</item>\n\t\t<item>String</item>\n\t\t<item>Path</item>\n\t\t<item>PathBuf</item>\n\t</list>\n\t<list name=\"ctypes\">\n\t\t<item>c_float</item>\n\t\t<item>c_double</item>\n\t\t<item>c_void</item>\n\t\t<item>FILE</item>\n\t\t<item>fpos_t</item>\n\t\t<item>DIR</item>\n\t\t<item>dirent</item>\n\t\t<item>c_char</item>\n\t\t<item>c_schar</item>\n\t\t<item>c_uchar</item>\n\t\t<item>c_short</item>\n\t\t<item>c_ushort</item>\n\t\t<item>c_int</item>\n\t\t<item>c_uint</item>\n\t\t<item>c_long</item>\n\t\t<item>c_ulong</item>\n\t\t<item>size_t</item>\n\t\t<item>ptrdiff_t</item>\n\t\t<item>clock_t</item>\n\t\t<item>time_t</item>\n\t\t<item>c_longlong</item>\n\t\t<item>c_ulonglong</item>\n\t\t<item>intptr_t</item>\n\t\t<item>uintptr_t</item>\n\t\t<item>off_t</item>\n\t\t<item>dev_t</item>\n\t\t<item>ino_t</item>\n\t\t<item>pid_t</item>\n\t\t<item>mode_t</item>\n\t\t<item>ssize_t</item>\n\t</list>\n\t<list name=\"self\">\n\t\t<item>self</item>\n\t</list>\n\t<list name=\"constants\">\n\t\t<item>true</item>\n\t\t<item>false</item>\n\t\t<item>Some</item>\n\t\t<item>None</item>\n\t\t<item>Ok</item>\n\t\t<item>Err</item>\n\t\t<item>Success</item>\n\t\t<item>Failure</item>\n\t\t<item>Cons</item>\n\t\t<item>Nil</item>\n\t\t<!-- Core Constants -->\n\t\t<!-- char/f32 -->\n\t\t<item>MAX</item>\n\t\t<!-- char -->\n\t\t<item>REPLACEMENT_CHARACTER</item>\n\t\t<item>UNICODE_VERSION</item>\n\t\t<!-- f32 -->\n\t\t<item>DIGITS</item>\n\t\t<item>EPSILON</item>\n\t\t<item>INFINITY</item>\n\t\t<item>MANTISSA_DIGITS</item>\n\t\t<item>MAX_10_EXP</item>\n\t\t<item>MAX_EXP</item>\n\t\t<item>MIN</item>\n\t\t<item>MIN_10_EXP</item>\n\t\t<item>MIN_EXP</item>\n\t\t<item>MIN_POSITIVE</item>\n\t\t<item>NAN</item>\n\t\t<item>NEG_INFINITY</item>\n\t\t<item>RADIX</item>\n\t\t<!-- path -->\n\t\t<item>MAIN_SEPARATOR</item>\n\t\t<!-- sync -->\n\t\t<item>ONCE_INIT</item>\n\t\t<!-- time -->\n\t\t<item>UNIX_EPOCH</item>\n\t</list>\n\t<list name=\"cconstants\">\n\t\t<item>EXIT_FAILURE</item>\n\t\t<item>EXIT_SUCCESS</item>\n\t\t<item>RAND_MAX</item>\n\t\t<item>EOF</item>\n\t\t<item>SEEK_SET</item>\n\t\t<item>SEEK_CUR</item>\n\t\t<item>SEEK_END</item>\n\t\t<item>_IOFBF</item>\n\t\t<item>_IONBF</item>\n\t\t<item>_IOLBF</item>\n\t\t<item>BUFSIZ</item>\n\t\t<item>FOPEN_MAX</item>\n\t\t<item>FILENAME_MAX</item>\n\t\t<item>L_tmpnam</item>\n\t\t<item>TMP_MAX</item>\n\t\t<item>O_RDONLY</item>\n\t\t<item>O_WRONLY</item>\n\t\t<item>O_RDWR</item>\n\t\t<item>O_APPEND</item>\n\t\t<item>O_CREAT</item>\n\t\t<item>O_EXCL</item>\n\t\t<item>O_TRUNC</item>\n\t\t<item>S_IFIFO</item>\n\t\t<item>S_IFCHR</item>\n\t\t<item>S_IFBLK</item>\n\t\t<item>S_IFDIR</item>\n\t\t<item>S_IFREG</item>\n\t\t<item>S_IFMT</item>\n\t\t<item>S_IEXEC</item>\n\t\t<item>S_IWRITE</item>\n\t\t<item>S_IREAD</item>\n\t\t<item>S_IRWXU</item>\n\t\t<item>S_IXUSR</item>\n\t\t<item>S_IWUSR</item>\n\t\t<item>S_IRUSR</item>\n\t\t<item>F_OK</item>\n\t\t<item>R_OK</item>\n\t\t<item>W_OK</item>\n\t\t<item>X_OK</item>\n\t\t<item>STDIN_FILENO</item>\n\t\t<item>STDOUT_FILENO</item>\n\t\t<item>STDERR_FILENO</item>\n\t</list>\n\t<contexts>\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t<DetectSpaces/>\n\t\t\t<keyword String=\"fn\" attribute=\"Keyword\" context=\"Function\"/>\n\t\t\t<keyword String=\"type\" attribute=\"Keyword\" context=\"Type\"/>\n\t\t\t<keyword String=\"self\" attribute=\"Self\" context=\"#stay\"/>\n\t\t\t<keyword String=\"keywords\" attribute=\"Keyword\" context=\"#stay\"/>\n\t\t\t<keyword String=\"types\" attribute=\"Type\" context=\"#stay\"/>\n\t\t\t<keyword String=\"ctypes\" attribute=\"CType\" context=\"#stay\"/>\n\t\t\t<keyword String=\"constants\" attribute=\"Constant\" context=\"#stay\"/>\n\t\t\t<keyword String=\"cconstants\" attribute=\"CConstant\" context=\"#stay\"/>\n\t\t\t<keyword String=\"traits\" attribute=\"Trait\" context=\"#stay\"/>\n\t\t\t<IncludeRules context=\"FindComments\"/>\n\t\t\t<!-- Hexadecimal, Octal & Binary -->\n\t\t\t<RegExpr String=\"\\b0(x[0-9a-fA-F_]+|o[0-7_]+|b[01_]+)&rustIntSuf;\\b\" attribute=\"Number\" context=\"#stay\"/>\n\t\t\t<!-- Float & Decimal -->\n\t\t\t<RegExpr String=\"\\b[0-9][0-9_]*((\\.[0-9][0-9_]*)?([eE][\\+\\-]?[0-9_]+)?(f32|f64)?|&rustIntSuf;)\\b\" attribute=\"Number\" context=\"#stay\"/>\n\t\t\t<!-- Invalid number -->\n\t\t\t<RegExpr String=\"\\b0(b[01_]*[^01_]|o[0-7_]*[^0-7_]|x[0-9a-fA-F_]*[^0-9a-fA-F_])\\w*&rustIntSuf;\\b\" attribute=\"Error\" context=\"#stay\"/>\n\t\t\t<Detect2Chars char=\"#\" char1=\"[\" attribute=\"Attribute\" context=\"Attribute\" beginRegion=\"Attribute\"/>\n\t\t\t<StringDetect String=\"#![\" attribute=\"Attribute\" context=\"Attribute\" beginRegion=\"Attribute\"/>\n\t\t\t<RegExpr String=\"&rustIdent;::\" attribute=\"Scope\"/>\n\t\t\t<RegExpr String=\"::(?=[^\\s\\:])\" attribute=\"Scope\"/> <!-- Points after keyword or group { } -->\n\t\t\t<RegExpr String=\"&rustIdent;!\" attribute=\"Macro\"/>\n\t\t\t<RegExpr String=\"&apos;&rustIdent;(?!&apos;)\" attribute=\"Lifetime\"/>\n\t\t\t<DetectChar char=\"{\" attribute=\"Symbol\" context=\"#stay\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar char=\"}\" attribute=\"Symbol\" context=\"#stay\" endRegion=\"Brace\" />\n\t\t\t<!-- Raw Strings -->\n\t\t\t<RegExpr String=\"b?r(#*)&quot;\" attribute=\"String\" context=\"RawString\" dynamic=\"true\"/>\n\t\t\t<!-- Byte Strings -->\n\t\t\t<Detect2Chars char=\"b\" char1=\"&quot;\" attribute=\"String\" context=\"ByteString\"/>\n\t\t\t<!-- Strings -->\n\t\t\t<DetectChar char=\"&quot;\" attribute=\"String\" context=\"String\"/>\n\t\t\t<!-- Byte -->\n\t\t\t<RegExpr String=\"b&apos;(?=([^&apos;\\\\]|\\\\&commonEscape;)&apos;)\" attribute=\"Character\" context=\"Character\"/>\n\t\t\t<!-- Character -->\n\t\t\t<DetectChar char=\"&apos;\" attribute=\"Character\" context=\"Character\"/>\n\t\t\t<DetectChar char=\"[\" attribute=\"Normal Text\" context=\"#stay\" beginRegion=\"Bracket\" />\n\t\t\t<DetectChar char=\"]\" attribute=\"Normal Text\" context=\"#stay\" endRegion=\"Bracket\" />\n\t\t\t<!-- Raw identifier prefix -->\n\t\t\t<RegExpr String=\"r#(?=&rustIdent;)\" attribute=\"Raw Identifier\" context=\"#stay\"/>\n\t\t\t<AnyChar String=\";,.@~:$?=&gt;&lt;&amp;-+|*!/^%\" attribute=\"Symbol\" context=\"#stay\"/>\n\t\t\t<DetectIdentifier/>\n\t\t</context>\n\t\t<context attribute=\"Attribute\" lineEndContext=\"#stay\" name=\"Attribute\">\n\t\t\t<DetectChar char=\"]\" attribute=\"Attribute\" context=\"#pop\" endRegion=\"Attribute\"/>\n\t\t\t<IncludeRules context=\"Normal\"/>\n\t\t</context>\n\t\t<context attribute=\"Definition\" lineEndContext=\"#stay\" name=\"Function\">\n\t\t\t<DetectSpaces/>\n\t\t\t<DetectChar char=\"(\" attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<DetectChar char=\"&lt;\" attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"FindComments\"/>\n\t\t</context>\n\t\t<context attribute=\"Definition\" lineEndContext=\"#stay\" name=\"Type\">\n\t\t\t<DetectSpaces/>\n\t\t\t<DetectChar char=\"=\" attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<DetectChar char=\"&lt;\" attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<DetectChar char=\";\" attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"FindComments\"/>\n\t\t</context>\n\t\t<!-- Rustc allows strings to extend over multiple lines, and the\n\t\t     only thing a backshash at end-of-line does is remove the whitespace. -->\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t\t\t<DetectChar char=\"\\\" attribute=\"CharEscape\" context=\"CharEscapeWithUnicode\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t</context>\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"ByteString\">\n\t\t\t<DetectChar char=\"\\\" attribute=\"CharEscape\" context=\"CharEscape\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t</context>\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"RawString\" dynamic=\"true\">\n\t\t\t<RegExpr String=\"&quot;%1\" attribute=\"String\" context=\"#pop\" dynamic=\"true\"/>\n\t\t</context>\n\t\t<context attribute=\"Character\" lineEndContext=\"#pop\" name=\"Character\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr String=\"[^&apos;\\\\](?=&apos;)\" attribute=\"Character\" context=\"#stay\"/>\n\t\t\t<RegExpr String=\"\\\\(&unicodeEscape;|&commonEscape;)(?=&apos;)\" attribute=\"CharEscape\" context=\"#stay\"/>\n\t\t\t<DetectChar attribute=\"Character\" context=\"#pop\" char=\"&apos;\"/>\n\t\t\t<RegExpr String=\"(\\\\.|[^&apos;\\\\])[^&apos;]*(?=&apos;([\\d\\s!&quot;#&#036;&#037;&amp;&#039;\\(\\)\\*\\+,\\-\\./:;&lt;\\=&gt;\\?@\\[\\\\\\]\\^&#096;\\{\\|\\}~[:cntrl:]]|$))\" attribute=\"Error\" context=\"#stay\"/>\n\t\t</context>\n\t\t<context attribute=\"CharEscape\" lineEndContext=\"#pop\" name=\"CharEscape\">\n\t\t\t<RegExpr String=\"&commonEscape;\" attribute=\"CharEscape\" context=\"#pop\"/>\n\t\t\t<RegExpr String=\".\" attribute=\"Error\" context=\"#pop\"/>\n\t\t</context>\n\t\t<context attribute=\"CharEscape\" lineEndContext=\"#pop\" name=\"CharEscapeWithUnicode\">\n\t\t\t<RegExpr String=\"&unicodeEscape;\" attribute=\"CharEscape\" context=\"#pop\"/>\n\t\t\t<IncludeRules context=\"CharEscape\"/>\n\t\t</context>\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindComments\">\n\t\t\t<Detect2Chars char=\"/\" char1=\"/\" attribute=\"Comment\" context=\"Commentar 1\"/>\n\t\t\t<Detect2Chars char=\"/\" char1=\"*\" attribute=\"Comment\" context=\"Commentar 2\" beginRegion=\"Comment\"/>\n\t\t</context>\n\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t<IncludeRules context=\"##Modelines\" />\n\t\t</context>\n\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n\t\t\t<DetectSpaces/>\n\t\t\t<Detect2Chars char=\"/\" char1=\"*\" attribute=\"Comment\" context=\"Commentar 2\" beginRegion=\"Comment\"/>\n\t\t\t<Detect2Chars char=\"*\" char1=\"/\" attribute=\"Comment\" context=\"#pop\" endRegion=\"Comment\"/>\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t<IncludeRules context=\"##Modelines\" />\n\t\t</context>\n\t</contexts>\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Self\"         defStyleNum=\"dsKeyword\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Type\"         defStyleNum=\"dsDataType\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Trait\"        defStyleNum=\"dsBuiltIn\" spellChecking=\"0\"/>\n\t\t<itemData name=\"CType\"        defStyleNum=\"dsDataType\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Constant\"     defStyleNum=\"dsConstant\" spellChecking=\"0\"/>\n\t\t<itemData name=\"CConstant\"    defStyleNum=\"dsConstant\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Definition\"   defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Scope\"        defStyleNum=\"dsPreprocessor\"/>\n\t\t<itemData name=\"Number\"       defStyleNum=\"dsDecVal\"/>\n\t\t<itemData name=\"String\"       defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"CharEscape\"   defStyleNum=\"dsSpecialChar\"/>\n\t\t<itemData name=\"Character\"    defStyleNum=\"dsChar\"/>\n\t\t<itemData name=\"Macro\"        defStyleNum=\"dsPreprocessor\"/>\n\t\t<itemData name=\"Symbol\"       defStyleNum=\"dsOperator\"/>\n\t\t<itemData name=\"Attribute\"    defStyleNum=\"dsAttribute\"/>\n\t\t<itemData name=\"Lifetime\"     defStyleNum=\"dsOthers\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Raw Identifier\" defStyleNum=\"dsAnnotation\" spellChecking=\"0\"/>\n\t\t<itemData name=\"Error\"        defStyleNum=\"dsError\"/>\n\t</itemDatas>\n</highlighting>\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n\t</comments>\n\t<keywords casesensitive=\"1\" />\n</general>\n</language>\n<!-- kate: replace-tabs off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sass.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- https://www.w3.org/TR/CSS22/syndata.html#tokenization -->\n  <!ENTITY nmstart \"[_a-zA-Z]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n  <!ENTITY nmchar  \"[_a-zA-Z0-9-]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n]>\n\n<language name=\"SASS\" version=\"1\" kateversion=\"5.53\" section=\"Markup\" extensions=\"*.sass\" indenter=\"cstyle\" mimetype=\"text/css\" author=\"Jonathan Poelen (jonathan.poelen@gmail.com)\" license=\"MIT\" priority=\"5\">\n\n    <highlighting>\n        <list name=\"properties\">\n            <include>properties##SCSS</include>\n            <include>sub-properties##SCSS</include>\n        </list>\n        <list name=\"special values\"><include>special values##SCSS</include></list>\n        <list name=\"value keywords\"><include>value keywords##SCSS</include></list>\n        <list name=\"values\"><include>values##SCSS</include></list>\n        <list name=\"colors\"><include>colors##SCSS</include></list>\n        <list name=\"functions\"><include>functions##SCSS</include></list>\n        <list name=\"medias\"><include>medias##SCSS</include></list>\n        <list name=\"pseudoelements\"><include>pseudoelements##SCSS</include></list>\n        <list name=\"pseudoclasses\"><include>pseudoclasses##SCSS</include></list>\n        <list name=\"pseudoclass-selector\"><include>pseudoclass-selector##SCSS</include></list>\n        <list name=\"pseudoclasses-@page\"><include>pseudoclasses-@page##SCSS</include></list>\n        <list name=\"at-rules\"><include>at-rules##SCSS</include></list>\n        <list name=\"nested at-rules\"><include>nested at-rules##SCSS</include></list>\n        <list name=\"inline and nested at-rules\"><include>inline and nested at-rules##SCSS</include></list>\n        <list name=\"@extend\"><include>@extend##SCSS</include></list>\n        <list name=\"@if\"><include>@if##SCSS</include></list>\n        <list name=\"@else\"><include>@else##SCSS</include></list>\n        <list name=\"@mixin\"><include>@mixin##SCSS</include></list>\n        <list name=\"@viewport\"><include>@viewport##SCSS</include></list>\n        <list name=\"@page\"><include>@page##SCSS</include></list>\n        <list name=\"@keyframes-@font-face\">\n            <include>@font-face##SCSS</include>\n            <include>@keyframes##SCSS</include>\n        </list>\n        <list name=\"media operators\"><include>media operators##SCSS</include></list>\n        <list name=\"operators\"><include>operators##SCSS</include></list>\n        <list name=\"annotations\"><include>annotations##SCSS</include></list>\n\n        <contexts>\n            <context name=\"Base\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <IncludeRules context=\"FindCommentsColumn0\" />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Property\" context=\"Rule\" String=\"\\s*[-_A-Za-z]+(/\\*.*\\*/)?\\s*(?=:(\\s|$))\" lookAhead=\"true\" column=\"0\" />\n                <DetectSpaces />\n                <DetectChar attribute=\"At Rule\" context=\"@mixin\" char=\"=\" firstNonSpace=\"true\" />\n                <DetectChar attribute=\"At Rule\" context=\"AtRule\" char=\"+\" firstNonSpace=\"true\" />\n                <DetectChar attribute=\"At Rule\" context=\"SelectAtRule\" char=\"@\" lookAhead=\"true\" />\n                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type=\"search\"] -->\n                <DetectChar attribute=\"Selector Attribute\" context=\"SelectorAttr\" char=\"[\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"&amp;*>+~|\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" String=\":(?=[a-z:])\" />\n                <RegExpr attribute=\"Selector Id\" context=\"#stay\" String=\"#[-]?(&nmstart;)(&nmchar;)*\" />\n                <RegExpr attribute=\"Selector Class\" context=\"#stay\" String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\" />\n                <RegExpr attribute=\"Placeholder Selector\" context=\"#stay\" String=\"%[_a-zA-Z][_a-zA-Z\\-]*\" />\n                <RegExpr attribute=\"Selector Tag\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*(?=\\s|:?[#.&amp;[*>+~|,]|:[a-z:])\" />\n                <RegExpr attribute=\"Variable\" context=\"VariableDefine\" String=\"\\$[a-zA-Z0-9\\-_]+(?=\\s*:)\" />\n                <Detect2Chars attribute=\"Interpolation\" context=\"Interpolation\" char=\"#\" char1=\"{\" />\n                <DetectChar attribute=\"Normal Text\" context=\"Rule\" char=\":\" lookAhead=\"true\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"FindSelector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <AnyChar attribute=\"Error\" context=\"#stay\" String=\",&amp;\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"*>+~|\" />\n                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type=\"search\"] -->\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" char=\":\" />\n                <DetectChar attribute=\"Selector Attribute\" context=\"SelectorAttr\" char=\"[\" />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Selector Id\" context=\"#stay\" String=\"#[-]?(&nmstart;)(&nmchar;)*\" />\n                <RegExpr attribute=\"Selector Class\" context=\"#stay\" String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\" />\n                <RegExpr attribute=\"Placeholder Selector\" context=\"#stay\" String=\"%[_a-zA-Z][_a-zA-Z\\-]*\" />\n                <RegExpr attribute=\"Selector Tag\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*\" />\n                <Detect2Chars attribute=\"Interpolation\" context=\"Interpolation\" char=\"#\" char1=\"{\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"VariableDefine\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Normal Text\" context=\"RuleParameters\" char=\":\" />\n            </context>\n\n            <context name=\"Interpolation\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Interpolation\" context=\"#pop\" char=\"}\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n\n            <!-- find functions // rgba(255,255,255,0.75) -->\n            <!-- same as SCSS -->\n            <context name=\"FindFunctions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"Function\" context=\"Function\" String=\"[a-z\\-]{2,}\\(\" lookAhead=\"true\" />\n            </context>\n\n            <!-- find values //  10px 12pt 2.5em 1rem 75% #ffcc99 red solid -->\n            <!-- same as SCSS -->\n            <context name=\"FindValues\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Annotation\" context=\"Annotation\" char=\"!\" />\n                <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\" />\n                <keyword attribute=\"Value Keyword\" context=\"#stay\" String=\"value keywords\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"values\" />\n                <keyword attribute=\"Color\" context=\"#stay\" String=\"colors\" />\n                <RegExpr attribute=\"Number\" context=\"FindUnits\" String=\"([0-9]+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?\" />\n                <RegExpr attribute=\"Color\" context=\"#stay\" String=\"#([0-9A-Fa-f]{3,4}){1,2}\\b\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z0-9\\-_]+\" />\n                <keyword attribute=\"Value Keyword\" context=\"#stay\" String=\"special values\" />\n                <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"*/+%-\" />\n                <Detect2Chars attribute=\"Interpolation\" context=\"Interpolation\" char=\"#\" char1=\"{\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"Annotation\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <keyword attribute=\"Annotation\" context=\"#pop\" String=\"annotations\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"FindUnits\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <RegExpr attribute=\"Unit\" context=\"#pop\" String=\"(%|(em|ex|cap|ch|ic|rem|lh|rlh|vw|vh|vi|vb|vmin|vmax|cm|mm|Q|in|pc|pt|px|deg|rad|grad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|x)\\b)\" />\n            </context>\n\n            <!-- find strings // \"some words\" 'some words' -->\n            <!-- same as SCSS -->\n            <context name=\"FindStrings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"StringDQ\" char=\"&quot;\" />\n                <DetectChar attribute=\"String\" context=\"StringSQ\" char=\"'\" />\n            </context>\n\n            <!-- find comments // and /* at the beginning of line -->\n            <context name=\"FindCommentsColumn0\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <!-- (\\s*)(?=/[*/]) is not selected when the match is empty -->\n                <RegExpr attribute=\"Normal Text\" context=\"Comment\" String=\"(\\s+)(?=/[*/])\" dynamic=\"true\" column=\"0\" />\n                <RegExpr attribute=\"Comment\" context=\"Comment\" String=\"()/[*/]\" dynamic=\"true\" column=\"0\" />\n            </context>\n\n            <!-- find comments // and /* -->\n            <context name=\"FindComments\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Comment\" context=\"IsInlineComment\" char=\"/\" char1=\"/\" />\n                <Detect2Chars attribute=\"Comment\" context=\"IsInlineComment2\" char=\"/\" char1=\"*\" />\n            </context>\n\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\" dynamic=\"true\" fallthrough=\"true\" fallthroughContext=\"IsInlineComment\">\n                <RegExpr attribute=\"Comment\" context=\"IsInlineComment\" String=\"%1\\s|\\s*$\" dynamic=\"true\" column=\"0\" />\n                <DetectSpaces attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\" column=\"0\" />\n                <RegExpr attribute=\"Comment\" context=\"#pop\" String=\".\" lookAhead=\"true\" column=\"0\"/>\n            </context>\n\n            <context name=\"IsInlineComment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"##Alerts\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"IsInlineComment2\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"##Alerts\" />\n                <DetectIdentifier />\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n            </context>\n\n            <context name=\"SelectAtRule\" attribute=\"At Rule\" lineEndContext=\"#pop\">\n                <keyword attribute=\"At Rule\" context=\"#pop!AtRule\" String=\"nested at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!AtRule\" String=\"at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!AtRule\" String=\"inline and nested at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@extend\" String=\"@extend\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@mixin\" String=\"@mixin\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@keyframes-@font-face\" String=\"@keyframes-@font-face\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@viewport\" String=\"@viewport\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@if\" String=\"@if\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@else\" String=\"@else\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@page\" String=\"@page\" />\n                <RegExpr attribute=\"At Rule\" context=\"#pop!AtRule\" String=\"@[a-zA-Z0-9\\-_]+\\b\" />\n            </context>\n\n            <context name=\"@if\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"=!&lt;&gt;\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"@else\" attribute=\"Error\" lineEndContext=\"#pop\">\n                <DetectSpaces attribute=\"Normal Text\" />\n                <IncludeRules context=\"FindComments\" />\n                <WordDetect attribute=\"At Rule\" context=\"#pop!@if\" String=\"if\" />\n                <DetectIdentifier attribute=\"Error\" />\n            </context>\n\n            <context name=\"@extend\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindSelector\" />\n            </context>\n\n            <context name=\"@mixin\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Function\" context=\"MixinParameter\" String=\"[a-zA-Z0-9\\-_]+\" />\n            </context>\n\n            <context name=\"MixinParameter\" attribute=\"Error\" lineEndContext=\"#pop#pop\">\n                <DetectSpaces attribute=\"Normal Text\" />\n                <AnyChar attribute=\"Normal Text\" context=\"#stay\" String=\"()\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z0-9\\-_]+\" />\n                <StringDetect attribute=\"Operator\" context=\"#stay\" String=\"...\" />\n            </context>\n\n            <context name=\"@keyframes-@font-face\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n            </context>\n\n            <context name=\"@viewport\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" char=\":\" />\n            </context>\n\n            <context name=\"@page\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo-@page\" char=\":\" />\n            </context>\n\n            <context name=\"SelectorPseudo-@page\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <keyword attribute=\"Selector Pseudo\" context=\"#pop\" String=\"pseudoclasses-@page\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"#pop\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"AtRule\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"&amp;\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"media operators\" />\n                <RegExpr attribute=\"Property\" context=\"#stay\" String=\"[A-Za-z_-]+(?=\\s*:)\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"medias\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"SelectorAttr\" attribute=\"Selector Attribute\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Selector Attribute\" context=\"#pop\" char=\"]\" />\n                <IncludeRules context=\"FindStrings\" />\n                <DetectChar   attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"~\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"^\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"$\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"*\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"|\" char1=\"=\" />\n                <DetectIdentifier />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"SelectorAttrValue\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n                <DetectChar attribute=\"Selector Attribute\" context=\"#pop#pop\" char=\"]\" />\n                <DetectIdentifier />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"SelectorPseudo\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoElements\" char=\":\" />\n                <keyword attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueSelector\" String=\"pseudoclass-selector\" />\n                <keyword attribute=\"Selector Pseudo\" context=\"SelectorPseudoValue\" String=\"pseudoclasses\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"SelectorPseudoValue\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"SelectorPseudoElements\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\">\n                <keyword attribute=\"Selector Pseudo\" context=\"#pop!SelectorPseudoValue\" String=\"pseudoelements\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"#pop!SelectorPseudoValue\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"SelectorPseudoValueSelector\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueCloseSelector\" char=\"(\" />\n            </context>\n\n            <context name=\"SelectorPseudoValueCloseSelector\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"#pop#pop#pop\" char=\")\" />\n                <IncludeRules context=\"FindSelector\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"SelectorPseudoValue\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueClose\" char=\"(\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"SelectorPseudoValueClose\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"#pop#pop#pop\" char=\")\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"Rule\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"RuleParameters\" char=\":\" />\n                <Detect2Chars attribute=\"Variable\" context=\"IsVariable\" char=\"-\" char1=\"-\" />\n                <keyword attribute=\"Property\" context=\"#stay\" String=\"properties\" />\n                <RegExpr attribute=\"Unknown Property\" context=\"#stay\" String=\"[^:]+\" />\n            </context>\n\n            <context name=\"IsVariable\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleParameters\" char=\":\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[^:/]+\" />\n                <IncludeRules context=\"FindComments\" />\n            </context>\n\n            <context name=\"RuleParameters\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n                <DetectSpaces />\n                <!-- Jump out conditions -->\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"Function\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Function\" context=\"FunctionParameters\" char=\"(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionVar\" String=\"var(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionUrl\" String=\"url(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionCalc\" String=\"calc(\" />\n                <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n                <RegExpr attribute=\"Function\" context=\"#stay\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"FunctionVar\" attribute=\"Variable\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!FunctionParameters\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Variable\" context=\"#pop!FunctionParameters\" String=\"--[^ \\t\\),]+\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"FunctionCalc\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n                <IncludeRules context=\"Calc\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"NestedCalc\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n                <IncludeRules context=\"Calc\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"Calc\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Normal Text\" context=\"NestedCalc\" char=\"(\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"[-](?=$|[ \\t(,;])|[+](?=$|[^0-9)])|[/*]\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"FunctionUrl\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"UrlValue\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindStrings\" />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"UrlValue\" attribute=\"String\" lineEndContext=\"#pop#pop#pop\">\n                <DetectChar attribute=\"Function\" context=\"#pop#pop#pop\" char=\")\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"FunctionParameters\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <StringDetect attribute=\"Operator\" String=\"...\" />\n            </context>\n\n            <!-- string contexts -->\n            <!-- same as SCSS -->\n            <context name=\"StringDQ\" attribute=\"String\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n                <IncludeRules context=\"InsideString\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"StringSQ\" attribute=\"String\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n                <IncludeRules context=\"InsideString\" />\n            </context>\n\n            <!-- same as SCSS -->\n            <context name=\"InsideString\" attribute=\"String\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Interpolation\" context=\"Interpolation\" char=\"#\" char1=\"{\" />\n                <RegExpr attribute=\"SpecialChar\" context=\"#stay\" String=\"\\\\([0-9A-Fa-f]{1,6}|.?)\" />\n                <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\\\?[^#&quot;'\\\\]+\" />\n            </context>\n\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"At Rule\" defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Property\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Unknown Property\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\"/>\n            <itemData name=\"SpecialChar\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n            <itemData name=\"Interpolation\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Separator Symbol\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Value\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"Number\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"Value Keyword\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Color\" defStyleNum=\"dsConstant\" spellChecking=\"false\"/>\n            <itemData name=\"Unit\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Annotation\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Id\" defStyleNum=\"dsPreprocessor\" bold=\"1\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Class\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Attribute\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Pseudo\" defStyleNum=\"dsInformation\" italic=\"1\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Tag\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Placeholder Selector\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <keywords casesensitive=\"0\" weakDeliminator=\"-%@\" />\n        <folding indentationsensitive=\"1\" />\n        <comments>\n            <comment name=\"singleLine\" start=\"//\" position=\"afterwhitespace\"/>\n        </comments>\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sather.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Sather\" version=\"2\" kateversion=\"2.2\" section=\"Sources\" extensions=\"*.sa\" mimetype=\"text/x-sather-src\" casesensitive=\"1\">\n        <highlighting>\n                <list name=\"keywords\">\n                        <item>and</item>\n                        <item>assert</item>\n                        <item>attr</item>\n                        <item>break!</item>\n                        <item>case</item>\n                        <item>class</item>\n                        <item>const</item>\n                        <item>else</item>\n                        <item>elsif</item>\n                        <item>end</item>\n                        <item>exception</item>\n                        <item>external</item>\n                        <item>false</item>\n                        <item>if</item>\n                        <item>include</item>\n                        <item>initial</item>\n                        <item>is</item>\n                        <item>ITER</item>\n                        <item>loop</item>\n                        <item>new</item>\n                        <item>or</item>\n                        <item>post</item>\n                        <item>pre</item>\n                        <item>private</item>\n                        <item>protect</item>\n                        <item>quit</item>\n                        <item>raise</item>\n                        <item>readonly</item>\n                        <item>result</item>\n                        <item>return</item>\n                        <item>ROUT</item>\n                        <item>SAME</item>\n                        <item>self</item>\n                        <item>shared</item>\n                        <item>then</item>\n                        <item>true</item>\n                        <item>typecase</item>\n                        <item>type</item>\n                        <item>until!</item>\n                        <item>value</item>\n                        <item>void</item>\n                        <item>when</item>\n                        <item>while!</item>\n                        <item>yield</item>\n                        <item>abstract</item>\n                        <item>any</item>\n                        <item>bind</item>\n                        <item>fork</item>\n                        <item>guard</item>\n                        <item>immutable</item>\n                        <item>inout</item>\n                        <item>in</item>\n                        <item>lock</item>\n                        <item>once</item>\n                        <item>out</item>\n                        <item>parloop</item>\n                        <item>partial</item>\n                        <item>par</item>\n                        <item>spread</item>\n                        <item>stub</item>\n                </list>\n                <list name=\"types\">\n                        <item>$OB</item>\n                        <item>ARRAY</item>\n                        <item>AREF</item>\n                        <item>AVAL</item>\n                        <item>BOOL</item>\n                        <item>CHAR</item>\n                        <item>EXT_OB</item>\n                        <item>FLTDX</item>\n                        <item>FLTD</item>\n                        <item>FLTX</item>\n                        <item>FLTI</item>\n                        <item>FLT</item>\n                        <item>INTI</item>\n                        <item>INT</item>\n                        <item>$REHASH</item>\n                        <item>STR</item>\n                        <item>SYS</item>\n                </list>\n                <list name=\"features\">\n                        <item>create</item>\n                        <item>invariant</item>\n                        <item>main</item>\n                        <item>aget</item>\n                        <item>aset</item>\n                        <item>div</item>\n                        <item>is_eq</item>\n                        <item>is_geq</item>\n                        <item>is_gt</item>\n                        <item>is_leq</item>\n                        <item>is_lt</item>\n                        <item>is_neq</item>\n                        <item>minus</item>\n                        <item>mod</item>\n                        <item>negate</item>\n                        <item>not</item>\n                        <item>plus</item>\n                        <item>pow</item>\n                        <item>times</item>\n                </list>\n                <contexts>\n                        <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n                                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n                                <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n                                <keyword attribute=\"Features\" context=\"#stay\" String=\"features\"/>\n                                <Float attribute=\"Float\" context=\"#stay\"/>\n                                <Int attribute=\"Decimal\" context=\"#stay\"/>\n                                <RegExpr attribute=\"Char\" context=\"#stay\" String=\"'.'\"/>\n                                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n                                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"-\" char1=\"-\"/>\n                        </context>\n                        <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n                                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n                        </context>\n                        <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\"/>\n                </contexts>\n                <itemDatas>\n                        <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n                        <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\" />\n                        <itemData name=\"Data Type\"   defStyleNum=\"dsDataType\"/>\n                        <itemData name=\"Features\"    defStyleNum=\"dsOthers\" />\n                        <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\" />\n                        <itemData name=\"Float\"       defStyleNum=\"dsFloat\" />\n                        <itemData name=\"Char\"        defStyleNum=\"dsChar\" />\n                        <itemData name=\"String\"      defStyleNum=\"dsString\" />\n                        <itemData name=\"Comment\"     defStyleNum=\"dsComment\" />\n                </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"$!\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/scala.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Scala\" version=\"6\" kateversion=\"2.3\" section=\"Sources\"\n          extensions=\"*.scala;*.sbt\" mimetype=\"text/x-scala\" license=\"LGPL\"\n          author=\"Stephane Micheloud (stephane.micheloud@epfl.ch)\">\n<!--\nFirst version added to reository was 1.0 downloaded from\nhttps://lampsvn.epfl.ch/trac/scala/browser/scala-tool-support/trunk/src/kate/scala.xml?format=raw\n\nadapted from \"java.xml\" by Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)\n-->\n  <highlighting>\n    <list name=\"scala2\">\n      <item>Actor</item>\n      <item>ActorProxy</item>\n      <item>ActorTask</item>\n      <item>ActorThread</item>\n      <item>AllRef</item>\n      <item>Any</item>\n      <item>AnyRef</item>\n      <item>Application</item>\n      <item>AppliedType</item>\n      <item>Array</item>\n      <item>ArrayBuffer</item>\n      <item>Attribute</item>\n      <item>BoxedArray</item>\n      <item>BoxedBooleanArray</item>\n      <item>BoxedByteArray</item>\n      <item>BoxedCharArray</item>\n      <item>Buffer</item>\n      <item>BufferedIterator</item>\n      <item>Char</item>\n      <item>Console</item>\n      <item>Enumeration</item>\n      <item>Fluid</item>\n      <item>Function</item>\n      <item>IScheduler</item>\n      <item>ImmutableMapAdaptor</item>\n      <item>ImmutableSetAdaptor</item>\n      <item>Int</item>\n      <item>Iterable</item>\n      <item>List</item>\n      <item>ListBuffer</item>\n      <item>None</item>\n      <item>Option</item>\n      <item>Ordered</item>\n      <item>Pair</item>\n      <item>PartialFunction</item>\n      <item>Pid</item>\n      <item>Predef</item>\n      <item>PriorityQueue</item>\n      <item>PriorityQueueProxy</item>\n      <item>Reaction</item>\n      <item>Ref</item>\n      <item>Responder</item>\n      <item>RichInt</item>\n      <item>RichString</item>\n      <item>Rule</item>\n      <item>RuleTransformer</item>\n      <item>Script</item>\n      <item>Seq</item>\n      <item>SerialVersionUID</item>\n      <item>Some</item>\n      <item>Stream</item>\n      <item>Symbol</item>\n      <item>TcpService</item>\n      <item>TcpServiceWorker</item>\n      <item>Triple</item>\n      <item>Unit</item>\n      <item>Value</item>\n      <item>WorkerThread</item>\n      <item>serializable</item>\n      <item>transient</item>\n      <item>volatile</item>\n    </list>\n    <list name=\"java15\">\n      <item>ACTIVE</item>\n      <item>ACTIVITY_COMPLETED</item>\n      <item>ACTIVITY_REQUIRED</item>\n      <item>ARG_IN</item>\n      <item>ARG_INOUT</item>\n      <item>ARG_OUT</item>\n      <item>AWTError</item>\n      <item>AWTEvent</item>\n      <item>AWTEventListener</item>\n      <item>AWTEventListenerProxy</item>\n      <item>AWTEventMulticaster</item>\n      <item>AWTException</item>\n      <item>AWTKeyStroke</item>\n      <item>AWTPermission</item>\n      <item>AbstractAction</item>\n      <item>AbstractBorder</item>\n      <item>AbstractButton</item>\n      <item>AbstractCellEditor</item>\n      <item>AbstractCollection</item>\n      <item>AbstractColorChooserPanel</item>\n      <item>AbstractDocument</item>\n      <item>AbstractDocument.AttributeContext</item>\n      <item>AbstractDocument.Content</item>\n      <item>AbstractDocument.ElementEdit</item>\n      <item>AbstractExecutorService</item>\n      <item>AbstractInterruptibleChannel</item>\n      <item>AbstractLayoutCache</item>\n      <item>AbstractLayoutCache.NodeDimensions</item>\n      <item>AbstractList</item>\n      <item>AbstractListModel</item>\n      <item>AbstractMap</item>\n      <item>AbstractMethodError</item>\n      <item>AbstractPreferences</item>\n      <item>AbstractQueue</item>\n      <item>AbstractQueuedSynchronizer</item>\n      <item>AbstractSelectableChannel</item>\n      <item>AbstractSelectionKey</item>\n      <item>AbstractSelector</item>\n      <item>AbstractSequentialList</item>\n      <item>AbstractSet</item>\n      <item>AbstractSpinnerModel</item>\n      <item>AbstractTableModel</item>\n      <item>AbstractUndoableEdit</item>\n      <item>AbstractWriter</item>\n      <item>AccessControlContext</item>\n      <item>AccessControlException</item>\n      <item>AccessController</item>\n      <item>AccessException</item>\n      <item>Accessible</item>\n      <item>AccessibleAction</item>\n      <item>AccessibleAttributeSequence</item>\n      <item>AccessibleBundle</item>\n      <item>AccessibleComponent</item>\n      <item>AccessibleContext</item>\n      <item>AccessibleEditableText</item>\n      <item>AccessibleExtendedComponent</item>\n      <item>AccessibleExtendedTable</item>\n      <item>AccessibleExtendedText</item>\n      <item>AccessibleHyperlink</item>\n      <item>AccessibleHypertext</item>\n      <item>AccessibleIcon</item>\n      <item>AccessibleKeyBinding</item>\n      <item>AccessibleObject</item>\n      <item>AccessibleRelation</item>\n      <item>AccessibleRelationSet</item>\n      <item>AccessibleResourceBundle</item>\n      <item>AccessibleRole</item>\n      <item>AccessibleSelection</item>\n      <item>AccessibleState</item>\n      <item>AccessibleStateSet</item>\n      <item>AccessibleStreamable</item>\n      <item>AccessibleTable</item>\n      <item>AccessibleTableModelChange</item>\n      <item>AccessibleText</item>\n      <item>AccessibleTextSequence</item>\n      <item>AccessibleValue</item>\n      <item>AccountException</item>\n      <item>AccountExpiredException</item>\n      <item>AccountLockedException</item>\n      <item>AccountNotFoundException</item>\n      <item>Acl</item>\n      <item>AclEntry</item>\n      <item>AclNotFoundException</item>\n      <item>Action</item>\n      <item>ActionEvent</item>\n      <item>ActionListener</item>\n      <item>ActionMap</item>\n      <item>ActionMapUIResource</item>\n      <item>Activatable</item>\n      <item>ActivateFailedException</item>\n      <item>ActivationDesc</item>\n      <item>ActivationException</item>\n      <item>ActivationGroup</item>\n      <item>ActivationGroupDesc</item>\n      <item>ActivationGroupDesc.CommandEnvironment</item>\n      <item>ActivationGroupID</item>\n      <item>ActivationGroup_Stub</item>\n      <item>ActivationID</item>\n      <item>ActivationInstantiator</item>\n      <item>ActivationMonitor</item>\n      <item>ActivationSystem</item>\n      <item>Activator</item>\n      <item>ActiveEvent</item>\n      <item>ActivityCompletedException</item>\n      <item>ActivityRequiredException</item>\n      <item>AdapterActivator</item>\n      <item>AdapterActivatorOperations</item>\n      <item>AdapterAlreadyExists</item>\n      <item>AdapterAlreadyExistsHelper</item>\n      <item>AdapterInactive</item>\n      <item>AdapterInactiveHelper</item>\n      <item>AdapterManagerIdHelper</item>\n      <item>AdapterNameHelper</item>\n      <item>AdapterNonExistent</item>\n      <item>AdapterNonExistentHelper</item>\n      <item>AdapterStateHelper</item>\n      <item>AddressHelper</item>\n      <item>Adjustable</item>\n      <item>AdjustmentEvent</item>\n      <item>AdjustmentListener</item>\n      <item>Adler32</item>\n      <item>AffineTransform</item>\n      <item>AffineTransformOp</item>\n      <item>AlgorithmParameterGenerator</item>\n      <item>AlgorithmParameterGeneratorSpi</item>\n      <item>AlgorithmParameterSpec</item>\n      <item>AlgorithmParameters</item>\n      <item>AlgorithmParametersSpi</item>\n      <item>AllPermission</item>\n      <item>AlphaComposite</item>\n      <item>AlreadyBound</item>\n      <item>AlreadyBoundException</item>\n      <item>AlreadyBoundHelper</item>\n      <item>AlreadyBoundHolder</item>\n      <item>AlreadyConnectedException</item>\n      <item>AncestorEvent</item>\n      <item>AncestorListener</item>\n      <item>AnnotatedElement</item>\n      <item>Annotation</item>\n      <item>Annotation</item>\n      <item>AnnotationFormatError</item>\n      <item>AnnotationTypeMismatchException</item>\n      <item>Any</item>\n      <item>AnyHolder</item>\n      <item>AnySeqHelper</item>\n      <item>AnySeqHelper</item>\n      <item>AnySeqHolder</item>\n      <item>AppConfigurationEntry</item>\n      <item>AppConfigurationEntry.LoginModuleControlFlag</item>\n      <item>Appendable</item>\n      <item>Applet</item>\n      <item>AppletContext</item>\n      <item>AppletInitializer</item>\n      <item>AppletStub</item>\n      <item>ApplicationException</item>\n      <item>Arc2D</item>\n      <item>Arc2D.Double</item>\n      <item>Arc2D.Float</item>\n      <item>Area</item>\n      <item>AreaAveragingScaleFilter</item>\n      <item>ArithmeticException</item>\n      <item>Array</item>\n      <item>Array</item>\n      <item>ArrayBlockingQueue</item>\n      <item>ArrayIndexOutOfBoundsException</item>\n      <item>ArrayList</item>\n      <item>ArrayStoreException</item>\n      <item>ArrayType</item>\n      <item>Arrays</item>\n      <item>AssertionError</item>\n      <item>AsyncBoxView</item>\n      <item>AsynchronousCloseException</item>\n      <item>AtomicBoolean</item>\n      <item>AtomicInteger</item>\n      <item>AtomicIntegerArray</item>\n      <item>AtomicIntegerFieldUpdater</item>\n      <item>AtomicLong</item>\n      <item>AtomicLongArray</item>\n      <item>AtomicLongFieldUpdater</item>\n      <item>AtomicMarkableReference</item>\n      <item>AtomicReference</item>\n      <item>AtomicReferenceArray</item>\n      <item>AtomicReferenceFieldUpdater</item>\n      <item>AtomicStampedReference</item>\n      <item>Attr</item>\n      <item>Attribute</item>\n      <item>Attribute</item>\n      <item>Attribute</item>\n      <item>AttributeChangeNotification</item>\n      <item>AttributeChangeNotificationFilter</item>\n      <item>AttributeException</item>\n      <item>AttributeInUseException</item>\n      <item>AttributeList</item>\n      <item>AttributeList</item>\n      <item>AttributeList</item>\n      <item>AttributeListImpl</item>\n      <item>AttributeModificationException</item>\n      <item>AttributeNotFoundException</item>\n      <item>AttributeSet</item>\n      <item>AttributeSet</item>\n      <item>AttributeSet.CharacterAttribute</item>\n      <item>AttributeSet.ColorAttribute</item>\n      <item>AttributeSet.FontAttribute</item>\n      <item>AttributeSet.ParagraphAttribute</item>\n      <item>AttributeSetUtilities</item>\n      <item>AttributeValueExp</item>\n      <item>AttributedCharacterIterator</item>\n      <item>AttributedCharacterIterator.Attribute</item>\n      <item>AttributedString</item>\n      <item>Attributes</item>\n      <item>Attributes</item>\n      <item>Attributes</item>\n      <item>Attributes.Name</item>\n      <item>Attributes2</item>\n      <item>Attributes2Impl</item>\n      <item>AttributesImpl</item>\n      <item>AudioClip</item>\n      <item>AudioFileFormat</item>\n      <item>AudioFileFormat.Type</item>\n      <item>AudioFileReader</item>\n      <item>AudioFileWriter</item>\n      <item>AudioFormat</item>\n      <item>AudioFormat.Encoding</item>\n      <item>AudioInputStream</item>\n      <item>AudioPermission</item>\n      <item>AudioSystem</item>\n      <item>AuthPermission</item>\n      <item>AuthProvider</item>\n      <item>AuthenticationException</item>\n      <item>AuthenticationException</item>\n      <item>AuthenticationNotSupportedException</item>\n      <item>Authenticator</item>\n      <item>Authenticator.RequestorType</item>\n      <item>AuthorizeCallback</item>\n      <item>Autoscroll</item>\n      <item>BAD_CONTEXT</item>\n      <item>BAD_INV_ORDER</item>\n      <item>BAD_OPERATION</item>\n      <item>BAD_PARAM</item>\n      <item>BAD_POLICY</item>\n      <item>BAD_POLICY_TYPE</item>\n      <item>BAD_POLICY_VALUE</item>\n      <item>BAD_QOS</item>\n      <item>BAD_TYPECODE</item>\n      <item>BMPImageWriteParam</item>\n      <item>BackingStoreException</item>\n      <item>BadAttributeValueExpException</item>\n      <item>BadBinaryOpValueExpException</item>\n      <item>BadKind</item>\n      <item>BadLocationException</item>\n      <item>BadPaddingException</item>\n      <item>BadStringOperationException</item>\n      <item>BandCombineOp</item>\n      <item>BandedSampleModel</item>\n      <item>BaseRowSet</item>\n      <item>BasicArrowButton</item>\n      <item>BasicAttribute</item>\n      <item>BasicAttributes</item>\n      <item>BasicBorders</item>\n      <item>BasicBorders.ButtonBorder</item>\n      <item>BasicBorders.FieldBorder</item>\n      <item>BasicBorders.MarginBorder</item>\n      <item>BasicBorders.MenuBarBorder</item>\n      <item>BasicBorders.RadioButtonBorder</item>\n      <item>BasicBorders.RolloverButtonBorder</item>\n      <item>BasicBorders.SplitPaneBorder</item>\n      <item>BasicBorders.ToggleButtonBorder</item>\n      <item>BasicButtonListener</item>\n      <item>BasicButtonUI</item>\n      <item>BasicCheckBoxMenuItemUI</item>\n      <item>BasicCheckBoxUI</item>\n      <item>BasicColorChooserUI</item>\n      <item>BasicComboBoxEditor</item>\n      <item>BasicComboBoxEditor.UIResource</item>\n      <item>BasicComboBoxRenderer</item>\n      <item>BasicComboBoxRenderer.UIResource</item>\n      <item>BasicComboBoxUI</item>\n      <item>BasicComboPopup</item>\n      <item>BasicControl</item>\n      <item>BasicDesktopIconUI</item>\n      <item>BasicDesktopPaneUI</item>\n      <item>BasicDirectoryModel</item>\n      <item>BasicEditorPaneUI</item>\n      <item>BasicFileChooserUI</item>\n      <item>BasicFormattedTextFieldUI</item>\n      <item>BasicGraphicsUtils</item>\n      <item>BasicHTML</item>\n      <item>BasicIconFactory</item>\n      <item>BasicInternalFrameTitlePane</item>\n      <item>BasicInternalFrameUI</item>\n      <item>BasicLabelUI</item>\n      <item>BasicListUI</item>\n      <item>BasicLookAndFeel</item>\n      <item>BasicMenuBarUI</item>\n      <item>BasicMenuItemUI</item>\n      <item>BasicMenuUI</item>\n      <item>BasicOptionPaneUI</item>\n      <item>BasicOptionPaneUI.ButtonAreaLayout</item>\n      <item>BasicPanelUI</item>\n      <item>BasicPasswordFieldUI</item>\n      <item>BasicPermission</item>\n      <item>BasicPopupMenuSeparatorUI</item>\n      <item>BasicPopupMenuUI</item>\n      <item>BasicProgressBarUI</item>\n      <item>BasicRadioButtonMenuItemUI</item>\n      <item>BasicRadioButtonUI</item>\n      <item>BasicRootPaneUI</item>\n      <item>BasicScrollBarUI</item>\n      <item>BasicScrollPaneUI</item>\n      <item>BasicSeparatorUI</item>\n      <item>BasicSliderUI</item>\n      <item>BasicSpinnerUI</item>\n      <item>BasicSplitPaneDivider</item>\n      <item>BasicSplitPaneUI</item>\n      <item>BasicStroke</item>\n      <item>BasicTabbedPaneUI</item>\n      <item>BasicTableHeaderUI</item>\n      <item>BasicTableUI</item>\n      <item>BasicTextAreaUI</item>\n      <item>BasicTextFieldUI</item>\n      <item>BasicTextPaneUI</item>\n      <item>BasicTextUI</item>\n      <item>BasicTextUI.BasicCaret</item>\n      <item>BasicTextUI.BasicHighlighter</item>\n      <item>BasicToggleButtonUI</item>\n      <item>BasicToolBarSeparatorUI</item>\n      <item>BasicToolBarUI</item>\n      <item>BasicToolTipUI</item>\n      <item>BasicTreeUI</item>\n      <item>BasicViewportUI</item>\n      <item>BatchUpdateException</item>\n      <item>BeanContext</item>\n      <item>BeanContextChild</item>\n      <item>BeanContextChildComponentProxy</item>\n      <item>BeanContextChildSupport</item>\n      <item>BeanContextContainerProxy</item>\n      <item>BeanContextEvent</item>\n      <item>BeanContextMembershipEvent</item>\n      <item>BeanContextMembershipListener</item>\n      <item>BeanContextProxy</item>\n      <item>BeanContextServiceAvailableEvent</item>\n      <item>BeanContextServiceProvider</item>\n      <item>BeanContextServiceProviderBeanInfo</item>\n      <item>BeanContextServiceRevokedEvent</item>\n      <item>BeanContextServiceRevokedListener</item>\n      <item>BeanContextServices</item>\n      <item>BeanContextServicesListener</item>\n      <item>BeanContextServicesSupport</item>\n      <item>BeanContextServicesSupport.BCSSServiceProvider</item>\n      <item>BeanContextSupport</item>\n      <item>BeanContextSupport.BCSIterator</item>\n      <item>BeanDescriptor</item>\n      <item>BeanInfo</item>\n      <item>Beans</item>\n      <item>BevelBorder</item>\n      <item>Bidi</item>\n      <item>BigDecimal</item>\n      <item>BigInteger</item>\n      <item>BinaryRefAddr</item>\n      <item>BindException</item>\n      <item>Binding</item>\n      <item>Binding</item>\n      <item>BindingHelper</item>\n      <item>BindingHolder</item>\n      <item>BindingIterator</item>\n      <item>BindingIteratorHelper</item>\n      <item>BindingIteratorHolder</item>\n      <item>BindingIteratorOperations</item>\n      <item>BindingIteratorPOA</item>\n      <item>BindingListHelper</item>\n      <item>BindingListHolder</item>\n      <item>BindingType</item>\n      <item>BindingTypeHelper</item>\n      <item>BindingTypeHolder</item>\n      <item>BitSet</item>\n      <item>Blob</item>\n      <item>BlockView</item>\n      <item>BlockingQueue</item>\n      <item>Book</item>\n      <item>Boolean</item>\n      <item>BooleanControl</item>\n      <item>BooleanControl.Type</item>\n      <item>BooleanHolder</item>\n      <item>BooleanSeqHelper</item>\n      <item>BooleanSeqHolder</item>\n      <item>Border</item>\n      <item>BorderFactory</item>\n      <item>BorderLayout</item>\n      <item>BorderUIResource</item>\n      <item>BorderUIResource.BevelBorderUIResource</item>\n      <item>BorderUIResource.CompoundBorderUIResource</item>\n      <item>BorderUIResource.EmptyBorderUIResource</item>\n      <item>BorderUIResource.EtchedBorderUIResource</item>\n      <item>BorderUIResource.LineBorderUIResource</item>\n      <item>BorderUIResource.MatteBorderUIResource</item>\n      <item>BorderUIResource.TitledBorderUIResource</item>\n      <item>BoundedRangeModel</item>\n      <item>Bounds</item>\n      <item>Bounds</item>\n      <item>Box</item>\n      <item>Box.Filler</item>\n      <item>BoxLayout</item>\n      <item>BoxView</item>\n      <item>BoxedValueHelper</item>\n      <item>BreakIterator</item>\n      <item>BrokenBarrierException</item>\n      <item>Buffer</item>\n      <item>BufferCapabilities</item>\n      <item>BufferCapabilities.FlipContents</item>\n      <item>BufferOverflowException</item>\n      <item>BufferStrategy</item>\n      <item>BufferUnderflowException</item>\n      <item>BufferedImage</item>\n      <item>BufferedImageFilter</item>\n      <item>BufferedImageOp</item>\n      <item>BufferedInputStream</item>\n      <item>BufferedOutputStream</item>\n      <item>BufferedReader</item>\n      <item>BufferedWriter</item>\n      <item>Button</item>\n      <item>ButtonGroup</item>\n      <item>ButtonModel</item>\n      <item>ButtonUI</item>\n      <item>Byte</item>\n      <item>ByteArrayInputStream</item>\n      <item>ByteArrayOutputStream</item>\n      <item>ByteBuffer</item>\n      <item>ByteChannel</item>\n      <item>ByteHolder</item>\n      <item>ByteLookupTable</item>\n      <item>ByteOrder</item>\n      <item>CDATASection</item>\n      <item>CMMException</item>\n      <item>CODESET_INCOMPATIBLE</item>\n      <item>COMM_FAILURE</item>\n      <item>CRC32</item>\n      <item>CRL</item>\n      <item>CRLException</item>\n      <item>CRLSelector</item>\n      <item>CSS</item>\n      <item>CSS.Attribute</item>\n      <item>CTX_RESTRICT_SCOPE</item>\n      <item>CacheRequest</item>\n      <item>CacheResponse</item>\n      <item>CachedRowSet</item>\n      <item>Calendar</item>\n      <item>Callable</item>\n      <item>CallableStatement</item>\n      <item>Callback</item>\n      <item>CallbackHandler</item>\n      <item>CancelablePrintJob</item>\n      <item>CancellationException</item>\n      <item>CancelledKeyException</item>\n      <item>CannotProceed</item>\n      <item>CannotProceedException</item>\n      <item>CannotProceedHelper</item>\n      <item>CannotProceedHolder</item>\n      <item>CannotRedoException</item>\n      <item>CannotUndoException</item>\n      <item>Canvas</item>\n      <item>CardLayout</item>\n      <item>Caret</item>\n      <item>CaretEvent</item>\n      <item>CaretListener</item>\n      <item>CellEditor</item>\n      <item>CellEditorListener</item>\n      <item>CellRendererPane</item>\n      <item>CertPath</item>\n      <item>CertPath.CertPathRep</item>\n      <item>CertPathBuilder</item>\n      <item>CertPathBuilderException</item>\n      <item>CertPathBuilderResult</item>\n      <item>CertPathBuilderSpi</item>\n      <item>CertPathParameters</item>\n      <item>CertPathTrustManagerParameters</item>\n      <item>CertPathValidator</item>\n      <item>CertPathValidatorException</item>\n      <item>CertPathValidatorResult</item>\n      <item>CertPathValidatorSpi</item>\n      <item>CertSelector</item>\n      <item>CertStore</item>\n      <item>CertStoreException</item>\n      <item>CertStoreParameters</item>\n      <item>CertStoreSpi</item>\n      <item>Certificate</item>\n      <item>Certificate</item>\n      <item>Certificate</item>\n      <item>Certificate.CertificateRep</item>\n      <item>CertificateEncodingException</item>\n      <item>CertificateEncodingException</item>\n      <item>CertificateException</item>\n      <item>CertificateException</item>\n      <item>CertificateExpiredException</item>\n      <item>CertificateExpiredException</item>\n      <item>CertificateFactory</item>\n      <item>CertificateFactorySpi</item>\n      <item>CertificateNotYetValidException</item>\n      <item>CertificateNotYetValidException</item>\n      <item>CertificateParsingException</item>\n      <item>CertificateParsingException</item>\n      <item>ChangeEvent</item>\n      <item>ChangeListener</item>\n      <item>ChangedCharSetException</item>\n      <item>Channel</item>\n      <item>ChannelBinding</item>\n      <item>Channels</item>\n      <item>CharArrayReader</item>\n      <item>CharArrayWriter</item>\n      <item>CharBuffer</item>\n      <item>CharConversionException</item>\n      <item>CharHolder</item>\n      <item>CharSeqHelper</item>\n      <item>CharSeqHolder</item>\n      <item>CharSequence</item>\n      <item>Character</item>\n      <item>Character.Subset</item>\n      <item>Character.UnicodeBlock</item>\n      <item>CharacterCodingException</item>\n      <item>CharacterData</item>\n      <item>CharacterIterator</item>\n      <item>Charset</item>\n      <item>CharsetDecoder</item>\n      <item>CharsetEncoder</item>\n      <item>CharsetProvider</item>\n      <item>Checkbox</item>\n      <item>CheckboxGroup</item>\n      <item>CheckboxMenuItem</item>\n      <item>CheckedInputStream</item>\n      <item>CheckedOutputStream</item>\n      <item>Checksum</item>\n      <item>Choice</item>\n      <item>ChoiceCallback</item>\n      <item>ChoiceFormat</item>\n      <item>Chromaticity</item>\n      <item>Cipher</item>\n      <item>CipherInputStream</item>\n      <item>CipherOutputStream</item>\n      <item>CipherSpi</item>\n      <item>Class</item>\n      <item>ClassCastException</item>\n      <item>ClassCircularityError</item>\n      <item>ClassDefinition</item>\n      <item>ClassDesc</item>\n      <item>ClassFileTransformer</item>\n      <item>ClassFormatError</item>\n      <item>ClassLoader</item>\n      <item>ClassLoaderRepository</item>\n      <item>ClassLoadingMXBean</item>\n      <item>ClassNotFoundException</item>\n      <item>ClientRequestInfo</item>\n      <item>ClientRequestInfoOperations</item>\n      <item>ClientRequestInterceptor</item>\n      <item>ClientRequestInterceptorOperations</item>\n      <item>Clip</item>\n      <item>Clipboard</item>\n      <item>ClipboardOwner</item>\n      <item>Clob</item>\n      <item>CloneNotSupportedException</item>\n      <item>Cloneable</item>\n      <item>Closeable</item>\n      <item>ClosedByInterruptException</item>\n      <item>ClosedChannelException</item>\n      <item>ClosedSelectorException</item>\n      <item>CodeSets</item>\n      <item>CodeSigner</item>\n      <item>CodeSource</item>\n      <item>Codec</item>\n      <item>CodecFactory</item>\n      <item>CodecFactoryHelper</item>\n      <item>CodecFactoryOperations</item>\n      <item>CodecOperations</item>\n      <item>CoderMalfunctionError</item>\n      <item>CoderResult</item>\n      <item>CodingErrorAction</item>\n      <item>CollationElementIterator</item>\n      <item>CollationKey</item>\n      <item>Collator</item>\n      <item>Collection</item>\n      <item>CollectionCertStoreParameters</item>\n      <item>Collections</item>\n      <item>Color</item>\n      <item>ColorChooserComponentFactory</item>\n      <item>ColorChooserUI</item>\n      <item>ColorConvertOp</item>\n      <item>ColorModel</item>\n      <item>ColorSelectionModel</item>\n      <item>ColorSpace</item>\n      <item>ColorSupported</item>\n      <item>ColorType</item>\n      <item>ColorUIResource</item>\n      <item>ComboBoxEditor</item>\n      <item>ComboBoxModel</item>\n      <item>ComboBoxUI</item>\n      <item>ComboPopup</item>\n      <item>Comment</item>\n      <item>CommunicationException</item>\n      <item>Comparable</item>\n      <item>Comparator</item>\n      <item>CompilationMXBean</item>\n      <item>Compiler</item>\n      <item>CompletionService</item>\n      <item>CompletionStatus</item>\n      <item>CompletionStatusHelper</item>\n      <item>Component</item>\n      <item>ComponentAdapter</item>\n      <item>ComponentColorModel</item>\n      <item>ComponentEvent</item>\n      <item>ComponentIdHelper</item>\n      <item>ComponentInputMap</item>\n      <item>ComponentInputMapUIResource</item>\n      <item>ComponentListener</item>\n      <item>ComponentOrientation</item>\n      <item>ComponentSampleModel</item>\n      <item>ComponentUI</item>\n      <item>ComponentView</item>\n      <item>Composite</item>\n      <item>CompositeContext</item>\n      <item>CompositeData</item>\n      <item>CompositeDataSupport</item>\n      <item>CompositeName</item>\n      <item>CompositeType</item>\n      <item>CompositeView</item>\n      <item>CompoundBorder</item>\n      <item>CompoundControl</item>\n      <item>CompoundControl.Type</item>\n      <item>CompoundEdit</item>\n      <item>CompoundName</item>\n      <item>Compression</item>\n      <item>ConcurrentHashMap</item>\n      <item>ConcurrentLinkedQueue</item>\n      <item>ConcurrentMap</item>\n      <item>ConcurrentModificationException</item>\n      <item>Condition</item>\n      <item>Configuration</item>\n      <item>ConfigurationException</item>\n      <item>ConfirmationCallback</item>\n      <item>ConnectException</item>\n      <item>ConnectException</item>\n      <item>ConnectIOException</item>\n      <item>Connection</item>\n      <item>ConnectionEvent</item>\n      <item>ConnectionEventListener</item>\n      <item>ConnectionPendingException</item>\n      <item>ConnectionPoolDataSource</item>\n      <item>ConsoleHandler</item>\n      <item>Constructor</item>\n      <item>Container</item>\n      <item>ContainerAdapter</item>\n      <item>ContainerEvent</item>\n      <item>ContainerListener</item>\n      <item>ContainerOrderFocusTraversalPolicy</item>\n      <item>ContentHandler</item>\n      <item>ContentHandler</item>\n      <item>ContentHandlerFactory</item>\n      <item>ContentModel</item>\n      <item>Context</item>\n      <item>Context</item>\n      <item>ContextList</item>\n      <item>ContextNotEmptyException</item>\n      <item>ContextualRenderedImageFactory</item>\n      <item>Control</item>\n      <item>Control</item>\n      <item>Control.Type</item>\n      <item>ControlFactory</item>\n      <item>ControllerEventListener</item>\n      <item>ConvolveOp</item>\n      <item>CookieHandler</item>\n      <item>CookieHolder</item>\n      <item>Copies</item>\n      <item>CopiesSupported</item>\n      <item>CopyOnWriteArrayList</item>\n      <item>CopyOnWriteArraySet</item>\n      <item>CountDownLatch</item>\n      <item>CounterMonitor</item>\n      <item>CounterMonitorMBean</item>\n      <item>CredentialException</item>\n      <item>CredentialExpiredException</item>\n      <item>CredentialNotFoundException</item>\n      <item>CropImageFilter</item>\n      <item>CubicCurve2D</item>\n      <item>CubicCurve2D.Double</item>\n      <item>CubicCurve2D.Float</item>\n      <item>Currency</item>\n      <item>Current</item>\n      <item>Current</item>\n      <item>Current</item>\n      <item>CurrentHelper</item>\n      <item>CurrentHelper</item>\n      <item>CurrentHelper</item>\n      <item>CurrentHolder</item>\n      <item>CurrentOperations</item>\n      <item>CurrentOperations</item>\n      <item>CurrentOperations</item>\n      <item>Cursor</item>\n      <item>CustomMarshal</item>\n      <item>CustomValue</item>\n      <item>Customizer</item>\n      <item>CyclicBarrier</item>\n      <item>DATA_CONVERSION</item>\n      <item>DESKeySpec</item>\n      <item>DESedeKeySpec</item>\n      <item>DGC</item>\n      <item>DHGenParameterSpec</item>\n      <item>DHKey</item>\n      <item>DHParameterSpec</item>\n      <item>DHPrivateKey</item>\n      <item>DHPrivateKeySpec</item>\n      <item>DHPublicKey</item>\n      <item>DHPublicKeySpec</item>\n      <item>DISCARDING</item>\n      <item>DOMConfiguration</item>\n      <item>DOMError</item>\n      <item>DOMErrorHandler</item>\n      <item>DOMException</item>\n      <item>DOMImplementation</item>\n      <item>DOMImplementationLS</item>\n      <item>DOMImplementationList</item>\n      <item>DOMImplementationRegistry</item>\n      <item>DOMImplementationSource</item>\n      <item>DOMLocator</item>\n      <item>DOMLocator</item>\n      <item>DOMResult</item>\n      <item>DOMSource</item>\n      <item>DOMStringList</item>\n      <item>DSAKey</item>\n      <item>DSAKeyPairGenerator</item>\n      <item>DSAParameterSpec</item>\n      <item>DSAParams</item>\n      <item>DSAPrivateKey</item>\n      <item>DSAPrivateKeySpec</item>\n      <item>DSAPublicKey</item>\n      <item>DSAPublicKeySpec</item>\n      <item>DTD</item>\n      <item>DTDConstants</item>\n      <item>DTDHandler</item>\n      <item>DataBuffer</item>\n      <item>DataBufferByte</item>\n      <item>DataBufferDouble</item>\n      <item>DataBufferFloat</item>\n      <item>DataBufferInt</item>\n      <item>DataBufferShort</item>\n      <item>DataBufferUShort</item>\n      <item>DataFlavor</item>\n      <item>DataFormatException</item>\n      <item>DataInput</item>\n      <item>DataInputStream</item>\n      <item>DataInputStream</item>\n      <item>DataLine</item>\n      <item>DataLine.Info</item>\n      <item>DataOutput</item>\n      <item>DataOutputStream</item>\n      <item>DataOutputStream</item>\n      <item>DataSource</item>\n      <item>DataTruncation</item>\n      <item>DatabaseMetaData</item>\n      <item>DatagramChannel</item>\n      <item>DatagramPacket</item>\n      <item>DatagramSocket</item>\n      <item>DatagramSocketImpl</item>\n      <item>DatagramSocketImplFactory</item>\n      <item>DatatypeConfigurationException</item>\n      <item>DatatypeConstants</item>\n      <item>DatatypeConstants.Field</item>\n      <item>DatatypeFactory</item>\n      <item>Date</item>\n      <item>Date</item>\n      <item>DateFormat</item>\n      <item>DateFormat.Field</item>\n      <item>DateFormatSymbols</item>\n      <item>DateFormatter</item>\n      <item>DateTimeAtCompleted</item>\n      <item>DateTimeAtCreation</item>\n      <item>DateTimeAtProcessing</item>\n      <item>DateTimeSyntax</item>\n      <item>DebugGraphics</item>\n      <item>DecimalFormat</item>\n      <item>DecimalFormatSymbols</item>\n      <item>DeclHandler</item>\n      <item>DefaultBoundedRangeModel</item>\n      <item>DefaultButtonModel</item>\n      <item>DefaultCaret</item>\n      <item>DefaultCellEditor</item>\n      <item>DefaultColorSelectionModel</item>\n      <item>DefaultComboBoxModel</item>\n      <item>DefaultDesktopManager</item>\n      <item>DefaultEditorKit</item>\n      <item>DefaultEditorKit.BeepAction</item>\n      <item>DefaultEditorKit.CopyAction</item>\n      <item>DefaultEditorKit.CutAction</item>\n      <item>DefaultEditorKit.DefaultKeyTypedAction</item>\n      <item>DefaultEditorKit.InsertBreakAction</item>\n      <item>DefaultEditorKit.InsertContentAction</item>\n      <item>DefaultEditorKit.InsertTabAction</item>\n      <item>DefaultEditorKit.PasteAction</item>\n      <item>DefaultFocusManager</item>\n      <item>DefaultFocusTraversalPolicy</item>\n      <item>DefaultFormatter</item>\n      <item>DefaultFormatterFactory</item>\n      <item>DefaultHandler</item>\n      <item>DefaultHandler2</item>\n      <item>DefaultHighlighter</item>\n      <item>DefaultHighlighter.DefaultHighlightPainter</item>\n      <item>DefaultKeyboardFocusManager</item>\n      <item>DefaultListCellRenderer</item>\n      <item>DefaultListCellRenderer.UIResource</item>\n      <item>DefaultListModel</item>\n      <item>DefaultListSelectionModel</item>\n      <item>DefaultLoaderRepository</item>\n      <item>DefaultLoaderRepository</item>\n      <item>DefaultMenuLayout</item>\n      <item>DefaultMetalTheme</item>\n      <item>DefaultMutableTreeNode</item>\n      <item>DefaultPersistenceDelegate</item>\n      <item>DefaultSingleSelectionModel</item>\n      <item>DefaultStyledDocument</item>\n      <item>DefaultStyledDocument.AttributeUndoableEdit</item>\n      <item>DefaultStyledDocument.ElementSpec</item>\n      <item>DefaultTableCellRenderer</item>\n      <item>DefaultTableCellRenderer.UIResource</item>\n      <item>DefaultTableColumnModel</item>\n      <item>DefaultTableModel</item>\n      <item>DefaultTextUI</item>\n      <item>DefaultTreeCellEditor</item>\n      <item>DefaultTreeCellRenderer</item>\n      <item>DefaultTreeModel</item>\n      <item>DefaultTreeSelectionModel</item>\n      <item>DefinitionKind</item>\n      <item>DefinitionKindHelper</item>\n      <item>Deflater</item>\n      <item>DeflaterOutputStream</item>\n      <item>DelayQueue</item>\n      <item>Delayed</item>\n      <item>Delegate</item>\n      <item>Delegate</item>\n      <item>Delegate</item>\n      <item>DelegationPermission</item>\n      <item>Deprecated</item>\n      <item>Descriptor</item>\n      <item>DescriptorAccess</item>\n      <item>DescriptorSupport</item>\n      <item>DesignMode</item>\n      <item>DesktopIconUI</item>\n      <item>DesktopManager</item>\n      <item>DesktopPaneUI</item>\n      <item>Destination</item>\n      <item>DestroyFailedException</item>\n      <item>Destroyable</item>\n      <item>Dialog</item>\n      <item>Dictionary</item>\n      <item>DigestException</item>\n      <item>DigestInputStream</item>\n      <item>DigestOutputStream</item>\n      <item>Dimension</item>\n      <item>Dimension2D</item>\n      <item>DimensionUIResource</item>\n      <item>DirContext</item>\n      <item>DirObjectFactory</item>\n      <item>DirStateFactory</item>\n      <item>DirStateFactory.Result</item>\n      <item>DirectColorModel</item>\n      <item>DirectoryManager</item>\n      <item>DisplayMode</item>\n      <item>DnDConstants</item>\n      <item>Doc</item>\n      <item>DocAttribute</item>\n      <item>DocAttributeSet</item>\n      <item>DocFlavor</item>\n      <item>DocFlavor.BYTE_ARRAY</item>\n      <item>DocFlavor.CHAR_ARRAY</item>\n      <item>DocFlavor.INPUT_STREAM</item>\n      <item>DocFlavor.READER</item>\n      <item>DocFlavor.SERVICE_FORMATTED</item>\n      <item>DocFlavor.STRING</item>\n      <item>DocFlavor.URL</item>\n      <item>DocPrintJob</item>\n      <item>Document</item>\n      <item>Document</item>\n      <item>DocumentBuilder</item>\n      <item>DocumentBuilderFactory</item>\n      <item>DocumentEvent</item>\n      <item>DocumentEvent.ElementChange</item>\n      <item>DocumentEvent.EventType</item>\n      <item>DocumentFilter</item>\n      <item>DocumentFilter.FilterBypass</item>\n      <item>DocumentFragment</item>\n      <item>DocumentHandler</item>\n      <item>DocumentListener</item>\n      <item>DocumentName</item>\n      <item>DocumentParser</item>\n      <item>DocumentType</item>\n      <item>Documented</item>\n      <item>DomainCombiner</item>\n      <item>DomainManager</item>\n      <item>DomainManagerOperations</item>\n      <item>Double</item>\n      <item>DoubleBuffer</item>\n      <item>DoubleHolder</item>\n      <item>DoubleSeqHelper</item>\n      <item>DoubleSeqHolder</item>\n      <item>DragGestureEvent</item>\n      <item>DragGestureListener</item>\n      <item>DragGestureRecognizer</item>\n      <item>DragSource</item>\n      <item>DragSourceAdapter</item>\n      <item>DragSourceContext</item>\n      <item>DragSourceDragEvent</item>\n      <item>DragSourceDropEvent</item>\n      <item>DragSourceEvent</item>\n      <item>DragSourceListener</item>\n      <item>DragSourceMotionListener</item>\n      <item>Driver</item>\n      <item>DriverManager</item>\n      <item>DriverPropertyInfo</item>\n      <item>DropTarget</item>\n      <item>DropTarget.DropTargetAutoScroller</item>\n      <item>DropTargetAdapter</item>\n      <item>DropTargetContext</item>\n      <item>DropTargetDragEvent</item>\n      <item>DropTargetDropEvent</item>\n      <item>DropTargetEvent</item>\n      <item>DropTargetListener</item>\n      <item>DuplicateFormatFlagsException</item>\n      <item>DuplicateName</item>\n      <item>DuplicateNameHelper</item>\n      <item>Duration</item>\n      <item>DynAny</item>\n      <item>DynAny</item>\n      <item>DynAnyFactory</item>\n      <item>DynAnyFactoryHelper</item>\n      <item>DynAnyFactoryOperations</item>\n      <item>DynAnyHelper</item>\n      <item>DynAnyOperations</item>\n      <item>DynAnySeqHelper</item>\n      <item>DynArray</item>\n      <item>DynArray</item>\n      <item>DynArrayHelper</item>\n      <item>DynArrayOperations</item>\n      <item>DynEnum</item>\n      <item>DynEnum</item>\n      <item>DynEnumHelper</item>\n      <item>DynEnumOperations</item>\n      <item>DynFixed</item>\n      <item>DynFixed</item>\n      <item>DynFixedHelper</item>\n      <item>DynFixedOperations</item>\n      <item>DynSequence</item>\n      <item>DynSequence</item>\n      <item>DynSequenceHelper</item>\n      <item>DynSequenceOperations</item>\n      <item>DynStruct</item>\n      <item>DynStruct</item>\n      <item>DynStructHelper</item>\n      <item>DynStructOperations</item>\n      <item>DynUnion</item>\n      <item>DynUnion</item>\n      <item>DynUnionHelper</item>\n      <item>DynUnionOperations</item>\n      <item>DynValue</item>\n      <item>DynValue</item>\n      <item>DynValueBox</item>\n      <item>DynValueBoxOperations</item>\n      <item>DynValueCommon</item>\n      <item>DynValueCommonOperations</item>\n      <item>DynValueHelper</item>\n      <item>DynValueOperations</item>\n      <item>DynamicImplementation</item>\n      <item>DynamicImplementation</item>\n      <item>DynamicMBean</item>\n      <item>ECField</item>\n      <item>ECFieldF2m</item>\n      <item>ECFieldFp</item>\n      <item>ECGenParameterSpec</item>\n      <item>ECKey</item>\n      <item>ECParameterSpec</item>\n      <item>ECPoint</item>\n      <item>ECPrivateKey</item>\n      <item>ECPrivateKeySpec</item>\n      <item>ECPublicKey</item>\n      <item>ECPublicKeySpec</item>\n      <item>ENCODING_CDR_ENCAPS</item>\n      <item>EOFException</item>\n      <item>EditorKit</item>\n      <item>Element</item>\n      <item>Element</item>\n      <item>Element</item>\n      <item>ElementIterator</item>\n      <item>ElementType</item>\n      <item>Ellipse2D</item>\n      <item>Ellipse2D.Double</item>\n      <item>Ellipse2D.Float</item>\n      <item>EllipticCurve</item>\n      <item>EmptyBorder</item>\n      <item>EmptyStackException</item>\n      <item>EncodedKeySpec</item>\n      <item>Encoder</item>\n      <item>Encoding</item>\n      <item>EncryptedPrivateKeyInfo</item>\n      <item>Entity</item>\n      <item>Entity</item>\n      <item>EntityReference</item>\n      <item>EntityResolver</item>\n      <item>EntityResolver2</item>\n      <item>Enum</item>\n      <item>EnumConstantNotPresentException</item>\n      <item>EnumControl</item>\n      <item>EnumControl.Type</item>\n      <item>EnumMap</item>\n      <item>EnumSet</item>\n      <item>EnumSyntax</item>\n      <item>Enumeration</item>\n      <item>Environment</item>\n      <item>Error</item>\n      <item>ErrorHandler</item>\n      <item>ErrorListener</item>\n      <item>ErrorManager</item>\n      <item>EtchedBorder</item>\n      <item>Event</item>\n      <item>EventContext</item>\n      <item>EventDirContext</item>\n      <item>EventHandler</item>\n      <item>EventListener</item>\n      <item>EventListenerList</item>\n      <item>EventListenerProxy</item>\n      <item>EventObject</item>\n      <item>EventQueue</item>\n      <item>EventSetDescriptor</item>\n      <item>Exception</item>\n      <item>ExceptionDetailMessage</item>\n      <item>ExceptionInInitializerError</item>\n      <item>ExceptionList</item>\n      <item>ExceptionListener</item>\n      <item>Exchanger</item>\n      <item>ExecutionException</item>\n      <item>Executor</item>\n      <item>ExecutorCompletionService</item>\n      <item>ExecutorService</item>\n      <item>Executors</item>\n      <item>ExemptionMechanism</item>\n      <item>ExemptionMechanismException</item>\n      <item>ExemptionMechanismSpi</item>\n      <item>ExpandVetoException</item>\n      <item>ExportException</item>\n      <item>Expression</item>\n      <item>ExtendedRequest</item>\n      <item>ExtendedResponse</item>\n      <item>Externalizable</item>\n      <item>FREE_MEM</item>\n      <item>FactoryConfigurationError</item>\n      <item>FailedLoginException</item>\n      <item>FeatureDescriptor</item>\n      <item>Fidelity</item>\n      <item>Field</item>\n      <item>FieldNameHelper</item>\n      <item>FieldNameHelper</item>\n      <item>FieldPosition</item>\n      <item>FieldView</item>\n      <item>File</item>\n      <item>FileCacheImageInputStream</item>\n      <item>FileCacheImageOutputStream</item>\n      <item>FileChannel</item>\n      <item>FileChannel.MapMode</item>\n      <item>FileChooserUI</item>\n      <item>FileDescriptor</item>\n      <item>FileDialog</item>\n      <item>FileFilter</item>\n      <item>FileFilter</item>\n      <item>FileHandler</item>\n      <item>FileImageInputStream</item>\n      <item>FileImageOutputStream</item>\n      <item>FileInputStream</item>\n      <item>FileLock</item>\n      <item>FileLockInterruptionException</item>\n      <item>FileNameMap</item>\n      <item>FileNotFoundException</item>\n      <item>FileOutputStream</item>\n      <item>FilePermission</item>\n      <item>FileReader</item>\n      <item>FileSystemView</item>\n      <item>FileView</item>\n      <item>FileWriter</item>\n      <item>FilenameFilter</item>\n      <item>Filter</item>\n      <item>FilterInputStream</item>\n      <item>FilterOutputStream</item>\n      <item>FilterReader</item>\n      <item>FilterWriter</item>\n      <item>FilteredImageSource</item>\n      <item>FilteredRowSet</item>\n      <item>Finishings</item>\n      <item>FixedHeightLayoutCache</item>\n      <item>FixedHolder</item>\n      <item>FlatteningPathIterator</item>\n      <item>FlavorEvent</item>\n      <item>FlavorException</item>\n      <item>FlavorListener</item>\n      <item>FlavorMap</item>\n      <item>FlavorTable</item>\n      <item>Float</item>\n      <item>FloatBuffer</item>\n      <item>FloatControl</item>\n      <item>FloatControl.Type</item>\n      <item>FloatHolder</item>\n      <item>FloatSeqHelper</item>\n      <item>FloatSeqHolder</item>\n      <item>FlowLayout</item>\n      <item>FlowView</item>\n      <item>FlowView.FlowStrategy</item>\n      <item>Flushable</item>\n      <item>FocusAdapter</item>\n      <item>FocusEvent</item>\n      <item>FocusListener</item>\n      <item>FocusManager</item>\n      <item>FocusTraversalPolicy</item>\n      <item>Font</item>\n      <item>FontFormatException</item>\n      <item>FontMetrics</item>\n      <item>FontRenderContext</item>\n      <item>FontUIResource</item>\n      <item>FormSubmitEvent</item>\n      <item>FormSubmitEvent.MethodType</item>\n      <item>FormView</item>\n      <item>Format</item>\n      <item>Format.Field</item>\n      <item>FormatConversionProvider</item>\n      <item>FormatFlagsConversionMismatchException</item>\n      <item>FormatMismatch</item>\n      <item>FormatMismatchHelper</item>\n      <item>Formattable</item>\n      <item>FormattableFlags</item>\n      <item>Formatter</item>\n      <item>Formatter</item>\n      <item>FormatterClosedException</item>\n      <item>ForwardRequest</item>\n      <item>ForwardRequest</item>\n      <item>ForwardRequestHelper</item>\n      <item>ForwardRequestHelper</item>\n      <item>Frame</item>\n      <item>Future</item>\n      <item>FutureTask</item>\n      <item>GSSContext</item>\n      <item>GSSCredential</item>\n      <item>GSSException</item>\n      <item>GSSManager</item>\n      <item>GSSName</item>\n      <item>GZIPInputStream</item>\n      <item>GZIPOutputStream</item>\n      <item>GapContent</item>\n      <item>GarbageCollectorMXBean</item>\n      <item>GatheringByteChannel</item>\n      <item>GaugeMonitor</item>\n      <item>GaugeMonitorMBean</item>\n      <item>GeneralPath</item>\n      <item>GeneralSecurityException</item>\n      <item>GenericArrayType</item>\n      <item>GenericDeclaration</item>\n      <item>GenericSignatureFormatError</item>\n      <item>GlyphJustificationInfo</item>\n      <item>GlyphMetrics</item>\n      <item>GlyphVector</item>\n      <item>GlyphView</item>\n      <item>GlyphView.GlyphPainter</item>\n      <item>GradientPaint</item>\n      <item>GraphicAttribute</item>\n      <item>Graphics</item>\n      <item>Graphics2D</item>\n      <item>GraphicsConfigTemplate</item>\n      <item>GraphicsConfiguration</item>\n      <item>GraphicsDevice</item>\n      <item>GraphicsEnvironment</item>\n      <item>GrayFilter</item>\n      <item>GregorianCalendar</item>\n      <item>GridBagConstraints</item>\n      <item>GridBagLayout</item>\n      <item>GridLayout</item>\n      <item>Group</item>\n      <item>Guard</item>\n      <item>GuardedObject</item>\n      <item>HOLDING</item>\n      <item>HTML</item>\n      <item>HTML.Attribute</item>\n      <item>HTML.Tag</item>\n      <item>HTML.UnknownTag</item>\n      <item>HTMLDocument</item>\n      <item>HTMLDocument.Iterator</item>\n      <item>HTMLEditorKit</item>\n      <item>HTMLEditorKit.HTMLFactory</item>\n      <item>HTMLEditorKit.HTMLTextAction</item>\n      <item>HTMLEditorKit.InsertHTMLTextAction</item>\n      <item>HTMLEditorKit.LinkController</item>\n      <item>HTMLEditorKit.Parser</item>\n      <item>HTMLEditorKit.ParserCallback</item>\n      <item>HTMLFrameHyperlinkEvent</item>\n      <item>HTMLWriter</item>\n      <item>Handler</item>\n      <item>HandlerBase</item>\n      <item>HandshakeCompletedEvent</item>\n      <item>HandshakeCompletedListener</item>\n      <item>HasControls</item>\n      <item>HashAttributeSet</item>\n      <item>HashDocAttributeSet</item>\n      <item>HashMap</item>\n      <item>HashPrintJobAttributeSet</item>\n      <item>HashPrintRequestAttributeSet</item>\n      <item>HashPrintServiceAttributeSet</item>\n      <item>HashSet</item>\n      <item>Hashtable</item>\n      <item>HeadlessException</item>\n      <item>HierarchyBoundsAdapter</item>\n      <item>HierarchyBoundsListener</item>\n      <item>HierarchyEvent</item>\n      <item>HierarchyListener</item>\n      <item>Highlighter</item>\n      <item>Highlighter.Highlight</item>\n      <item>Highlighter.HighlightPainter</item>\n      <item>HostnameVerifier</item>\n      <item>HttpRetryException</item>\n      <item>HttpURLConnection</item>\n      <item>HttpsURLConnection</item>\n      <item>HyperlinkEvent</item>\n      <item>HyperlinkEvent.EventType</item>\n      <item>HyperlinkListener</item>\n      <item>ICC_ColorSpace</item>\n      <item>ICC_Profile</item>\n      <item>ICC_ProfileGray</item>\n      <item>ICC_ProfileRGB</item>\n      <item>IDLEntity</item>\n      <item>IDLType</item>\n      <item>IDLTypeHelper</item>\n      <item>IDLTypeOperations</item>\n      <item>ID_ASSIGNMENT_POLICY_ID</item>\n      <item>ID_UNIQUENESS_POLICY_ID</item>\n      <item>IIOByteBuffer</item>\n      <item>IIOException</item>\n      <item>IIOImage</item>\n      <item>IIOInvalidTreeException</item>\n      <item>IIOMetadata</item>\n      <item>IIOMetadataController</item>\n      <item>IIOMetadataFormat</item>\n      <item>IIOMetadataFormatImpl</item>\n      <item>IIOMetadataNode</item>\n      <item>IIOParam</item>\n      <item>IIOParamController</item>\n      <item>IIOReadProgressListener</item>\n      <item>IIOReadUpdateListener</item>\n      <item>IIOReadWarningListener</item>\n      <item>IIORegistry</item>\n      <item>IIOServiceProvider</item>\n      <item>IIOWriteProgressListener</item>\n      <item>IIOWriteWarningListener</item>\n      <item>IMPLICIT_ACTIVATION_POLICY_ID</item>\n      <item>IMP_LIMIT</item>\n      <item>INACTIVE</item>\n      <item>INITIALIZE</item>\n      <item>INTERNAL</item>\n      <item>INTF_REPOS</item>\n      <item>INVALID_ACTIVITY</item>\n      <item>INVALID_TRANSACTION</item>\n      <item>INV_FLAG</item>\n      <item>INV_IDENT</item>\n      <item>INV_OBJREF</item>\n      <item>INV_POLICY</item>\n      <item>IOException</item>\n      <item>IOR</item>\n      <item>IORHelper</item>\n      <item>IORHolder</item>\n      <item>IORInfo</item>\n      <item>IORInfoOperations</item>\n      <item>IORInterceptor</item>\n      <item>IORInterceptorOperations</item>\n      <item>IORInterceptor_3_0</item>\n      <item>IORInterceptor_3_0Helper</item>\n      <item>IORInterceptor_3_0Holder</item>\n      <item>IORInterceptor_3_0Operations</item>\n      <item>IRObject</item>\n      <item>IRObjectOperations</item>\n      <item>Icon</item>\n      <item>IconUIResource</item>\n      <item>IconView</item>\n      <item>IdAssignmentPolicy</item>\n      <item>IdAssignmentPolicyOperations</item>\n      <item>IdAssignmentPolicyValue</item>\n      <item>IdUniquenessPolicy</item>\n      <item>IdUniquenessPolicyOperations</item>\n      <item>IdUniquenessPolicyValue</item>\n      <item>IdentifierHelper</item>\n      <item>Identity</item>\n      <item>IdentityHashMap</item>\n      <item>IdentityScope</item>\n      <item>IllegalAccessError</item>\n      <item>IllegalAccessException</item>\n      <item>IllegalArgumentException</item>\n      <item>IllegalBlockSizeException</item>\n      <item>IllegalBlockingModeException</item>\n      <item>IllegalCharsetNameException</item>\n      <item>IllegalClassFormatException</item>\n      <item>IllegalComponentStateException</item>\n      <item>IllegalFormatCodePointException</item>\n      <item>IllegalFormatConversionException</item>\n      <item>IllegalFormatException</item>\n      <item>IllegalFormatFlagsException</item>\n      <item>IllegalFormatPrecisionException</item>\n      <item>IllegalFormatWidthException</item>\n      <item>IllegalMonitorStateException</item>\n      <item>IllegalPathStateException</item>\n      <item>IllegalSelectorException</item>\n      <item>IllegalStateException</item>\n      <item>IllegalThreadStateException</item>\n      <item>Image</item>\n      <item>ImageCapabilities</item>\n      <item>ImageConsumer</item>\n      <item>ImageFilter</item>\n      <item>ImageGraphicAttribute</item>\n      <item>ImageIO</item>\n      <item>ImageIcon</item>\n      <item>ImageInputStream</item>\n      <item>ImageInputStreamImpl</item>\n      <item>ImageInputStreamSpi</item>\n      <item>ImageObserver</item>\n      <item>ImageOutputStream</item>\n      <item>ImageOutputStreamImpl</item>\n      <item>ImageOutputStreamSpi</item>\n      <item>ImageProducer</item>\n      <item>ImageReadParam</item>\n      <item>ImageReader</item>\n      <item>ImageReaderSpi</item>\n      <item>ImageReaderWriterSpi</item>\n      <item>ImageTranscoder</item>\n      <item>ImageTranscoderSpi</item>\n      <item>ImageTypeSpecifier</item>\n      <item>ImageView</item>\n      <item>ImageWriteParam</item>\n      <item>ImageWriter</item>\n      <item>ImageWriterSpi</item>\n      <item>ImagingOpException</item>\n      <item>ImplicitActivationPolicy</item>\n      <item>ImplicitActivationPolicyOperations</item>\n      <item>ImplicitActivationPolicyValue</item>\n      <item>IncompatibleClassChangeError</item>\n      <item>IncompleteAnnotationException</item>\n      <item>InconsistentTypeCode</item>\n      <item>InconsistentTypeCode</item>\n      <item>InconsistentTypeCodeHelper</item>\n      <item>IndexColorModel</item>\n      <item>IndexOutOfBoundsException</item>\n      <item>IndexedPropertyChangeEvent</item>\n      <item>IndexedPropertyDescriptor</item>\n      <item>IndirectionException</item>\n      <item>Inet4Address</item>\n      <item>Inet6Address</item>\n      <item>InetAddress</item>\n      <item>InetSocketAddress</item>\n      <item>Inflater</item>\n      <item>InflaterInputStream</item>\n      <item>InheritableThreadLocal</item>\n      <item>Inherited</item>\n      <item>InitialContext</item>\n      <item>InitialContextFactory</item>\n      <item>InitialContextFactoryBuilder</item>\n      <item>InitialDirContext</item>\n      <item>InitialLdapContext</item>\n      <item>InlineView</item>\n      <item>InputContext</item>\n      <item>InputEvent</item>\n      <item>InputMap</item>\n      <item>InputMapUIResource</item>\n      <item>InputMethod</item>\n      <item>InputMethodContext</item>\n      <item>InputMethodDescriptor</item>\n      <item>InputMethodEvent</item>\n      <item>InputMethodHighlight</item>\n      <item>InputMethodListener</item>\n      <item>InputMethodRequests</item>\n      <item>InputMismatchException</item>\n      <item>InputSource</item>\n      <item>InputStream</item>\n      <item>InputStream</item>\n      <item>InputStream</item>\n      <item>InputStreamReader</item>\n      <item>InputSubset</item>\n      <item>InputVerifier</item>\n      <item>Insets</item>\n      <item>InsetsUIResource</item>\n      <item>InstanceAlreadyExistsException</item>\n      <item>InstanceNotFoundException</item>\n      <item>InstantiationError</item>\n      <item>InstantiationException</item>\n      <item>Instrument</item>\n      <item>Instrumentation</item>\n      <item>InsufficientResourcesException</item>\n      <item>IntBuffer</item>\n      <item>IntHolder</item>\n      <item>Integer</item>\n      <item>IntegerSyntax</item>\n      <item>Interceptor</item>\n      <item>InterceptorOperations</item>\n      <item>InternalError</item>\n      <item>InternalFrameAdapter</item>\n      <item>InternalFrameEvent</item>\n      <item>InternalFrameFocusTraversalPolicy</item>\n      <item>InternalFrameListener</item>\n      <item>InternalFrameUI</item>\n      <item>InternationalFormatter</item>\n      <item>InterruptedException</item>\n      <item>InterruptedIOException</item>\n      <item>InterruptedNamingException</item>\n      <item>InterruptibleChannel</item>\n      <item>IntrospectionException</item>\n      <item>IntrospectionException</item>\n      <item>Introspector</item>\n      <item>Invalid</item>\n      <item>InvalidActivityException</item>\n      <item>InvalidAddress</item>\n      <item>InvalidAddressHelper</item>\n      <item>InvalidAddressHolder</item>\n      <item>InvalidAlgorithmParameterException</item>\n      <item>InvalidApplicationException</item>\n      <item>InvalidAttributeIdentifierException</item>\n      <item>InvalidAttributeValueException</item>\n      <item>InvalidAttributeValueException</item>\n      <item>InvalidAttributesException</item>\n      <item>InvalidClassException</item>\n      <item>InvalidDnDOperationException</item>\n      <item>InvalidKeyException</item>\n      <item>InvalidKeyException</item>\n      <item>InvalidKeySpecException</item>\n      <item>InvalidMarkException</item>\n      <item>InvalidMidiDataException</item>\n      <item>InvalidName</item>\n      <item>InvalidName</item>\n      <item>InvalidName</item>\n      <item>InvalidNameException</item>\n      <item>InvalidNameHelper</item>\n      <item>InvalidNameHelper</item>\n      <item>InvalidNameHolder</item>\n      <item>InvalidObjectException</item>\n      <item>InvalidOpenTypeException</item>\n      <item>InvalidParameterException</item>\n      <item>InvalidParameterSpecException</item>\n      <item>InvalidPolicy</item>\n      <item>InvalidPolicyHelper</item>\n      <item>InvalidPreferencesFormatException</item>\n      <item>InvalidPropertiesFormatException</item>\n      <item>InvalidRelationIdException</item>\n      <item>InvalidRelationServiceException</item>\n      <item>InvalidRelationTypeException</item>\n      <item>InvalidRoleInfoException</item>\n      <item>InvalidRoleValueException</item>\n      <item>InvalidSearchControlsException</item>\n      <item>InvalidSearchFilterException</item>\n      <item>InvalidSeq</item>\n      <item>InvalidSlot</item>\n      <item>InvalidSlotHelper</item>\n      <item>InvalidTargetObjectTypeException</item>\n      <item>InvalidTransactionException</item>\n      <item>InvalidTypeForEncoding</item>\n      <item>InvalidTypeForEncodingHelper</item>\n      <item>InvalidValue</item>\n      <item>InvalidValue</item>\n      <item>InvalidValueHelper</item>\n      <item>InvocationEvent</item>\n      <item>InvocationHandler</item>\n      <item>InvocationTargetException</item>\n      <item>InvokeHandler</item>\n      <item>IstringHelper</item>\n      <item>ItemEvent</item>\n      <item>ItemListener</item>\n      <item>ItemSelectable</item>\n      <item>Iterable</item>\n      <item>Iterator</item>\n      <item>IvParameterSpec</item>\n      <item>JApplet</item>\n      <item>JButton</item>\n      <item>JCheckBox</item>\n      <item>JCheckBoxMenuItem</item>\n      <item>JColorChooser</item>\n      <item>JComboBox</item>\n      <item>JComboBox.KeySelectionManager</item>\n      <item>JComponent</item>\n      <item>JDesktopPane</item>\n      <item>JDialog</item>\n      <item>JEditorPane</item>\n      <item>JFileChooser</item>\n      <item>JFormattedTextField</item>\n      <item>JFormattedTextField.AbstractFormatter</item>\n      <item>JFormattedTextField.AbstractFormatterFactory</item>\n      <item>JFrame</item>\n      <item>JInternalFrame</item>\n      <item>JInternalFrame.JDesktopIcon</item>\n      <item>JLabel</item>\n      <item>JLayeredPane</item>\n      <item>JList</item>\n      <item>JMException</item>\n      <item>JMRuntimeException</item>\n      <item>JMXAuthenticator</item>\n      <item>JMXConnectionNotification</item>\n      <item>JMXConnector</item>\n      <item>JMXConnectorFactory</item>\n      <item>JMXConnectorProvider</item>\n      <item>JMXConnectorServer</item>\n      <item>JMXConnectorServerFactory</item>\n      <item>JMXConnectorServerMBean</item>\n      <item>JMXConnectorServerProvider</item>\n      <item>JMXPrincipal</item>\n      <item>JMXProviderException</item>\n      <item>JMXServerErrorException</item>\n      <item>JMXServiceURL</item>\n      <item>JMenu</item>\n      <item>JMenuBar</item>\n      <item>JMenuItem</item>\n      <item>JOptionPane</item>\n      <item>JPEGHuffmanTable</item>\n      <item>JPEGImageReadParam</item>\n      <item>JPEGImageWriteParam</item>\n      <item>JPEGQTable</item>\n      <item>JPanel</item>\n      <item>JPasswordField</item>\n      <item>JPopupMenu</item>\n      <item>JPopupMenu.Separator</item>\n      <item>JProgressBar</item>\n      <item>JRadioButton</item>\n      <item>JRadioButtonMenuItem</item>\n      <item>JRootPane</item>\n      <item>JScrollBar</item>\n      <item>JScrollPane</item>\n      <item>JSeparator</item>\n      <item>JSlider</item>\n      <item>JSpinner</item>\n      <item>JSpinner.DateEditor</item>\n      <item>JSpinner.DefaultEditor</item>\n      <item>JSpinner.ListEditor</item>\n      <item>JSpinner.NumberEditor</item>\n      <item>JSplitPane</item>\n      <item>JTabbedPane</item>\n      <item>JTable</item>\n      <item>JTable.PrintMode</item>\n      <item>JTableHeader</item>\n      <item>JTextArea</item>\n      <item>JTextComponent</item>\n      <item>JTextComponent.KeyBinding</item>\n      <item>JTextField</item>\n      <item>JTextPane</item>\n      <item>JToggleButton</item>\n      <item>JToggleButton.ToggleButtonModel</item>\n      <item>JToolBar</item>\n      <item>JToolBar.Separator</item>\n      <item>JToolTip</item>\n      <item>JTree</item>\n      <item>JTree.DynamicUtilTreeNode</item>\n      <item>JTree.EmptySelectionModel</item>\n      <item>JViewport</item>\n      <item>JWindow</item>\n      <item>JarEntry</item>\n      <item>JarException</item>\n      <item>JarFile</item>\n      <item>JarInputStream</item>\n      <item>JarOutputStream</item>\n      <item>JarURLConnection</item>\n      <item>JdbcRowSet</item>\n      <item>JobAttributes</item>\n      <item>JobAttributes.DefaultSelectionType</item>\n      <item>JobAttributes.DestinationType</item>\n      <item>JobAttributes.DialogType</item>\n      <item>JobAttributes.MultipleDocumentHandlingType</item>\n      <item>JobAttributes.SidesType</item>\n      <item>JobHoldUntil</item>\n      <item>JobImpressions</item>\n      <item>JobImpressionsCompleted</item>\n      <item>JobImpressionsSupported</item>\n      <item>JobKOctets</item>\n      <item>JobKOctetsProcessed</item>\n      <item>JobKOctetsSupported</item>\n      <item>JobMediaSheets</item>\n      <item>JobMediaSheetsCompleted</item>\n      <item>JobMediaSheetsSupported</item>\n      <item>JobMessageFromOperator</item>\n      <item>JobName</item>\n      <item>JobOriginatingUserName</item>\n      <item>JobPriority</item>\n      <item>JobPrioritySupported</item>\n      <item>JobSheets</item>\n      <item>JobState</item>\n      <item>JobStateReason</item>\n      <item>JobStateReasons</item>\n      <item>JoinRowSet</item>\n      <item>Joinable</item>\n      <item>KerberosKey</item>\n      <item>KerberosPrincipal</item>\n      <item>KerberosTicket</item>\n      <item>Kernel</item>\n      <item>Key</item>\n      <item>KeyAdapter</item>\n      <item>KeyAgreement</item>\n      <item>KeyAgreementSpi</item>\n      <item>KeyAlreadyExistsException</item>\n      <item>KeyEvent</item>\n      <item>KeyEventDispatcher</item>\n      <item>KeyEventPostProcessor</item>\n      <item>KeyException</item>\n      <item>KeyFactory</item>\n      <item>KeyFactorySpi</item>\n      <item>KeyGenerator</item>\n      <item>KeyGeneratorSpi</item>\n      <item>KeyListener</item>\n      <item>KeyManagementException</item>\n      <item>KeyManager</item>\n      <item>KeyManagerFactory</item>\n      <item>KeyManagerFactorySpi</item>\n      <item>KeyPair</item>\n      <item>KeyPairGenerator</item>\n      <item>KeyPairGeneratorSpi</item>\n      <item>KeyRep</item>\n      <item>KeyRep.Type</item>\n      <item>KeySpec</item>\n      <item>KeyStore</item>\n      <item>KeyStore.Builder</item>\n      <item>KeyStore.CallbackHandlerProtection</item>\n      <item>KeyStore.Entry</item>\n      <item>KeyStore.LoadStoreParameter</item>\n      <item>KeyStore.PasswordProtection</item>\n      <item>KeyStore.PrivateKeyEntry</item>\n      <item>KeyStore.ProtectionParameter</item>\n      <item>KeyStore.SecretKeyEntry</item>\n      <item>KeyStore.TrustedCertificateEntry</item>\n      <item>KeyStoreBuilderParameters</item>\n      <item>KeyStoreException</item>\n      <item>KeyStoreSpi</item>\n      <item>KeyStroke</item>\n      <item>KeyboardFocusManager</item>\n      <item>Keymap</item>\n      <item>LDAPCertStoreParameters</item>\n      <item>LIFESPAN_POLICY_ID</item>\n      <item>LOCATION_FORWARD</item>\n      <item>LSException</item>\n      <item>LSInput</item>\n      <item>LSLoadEvent</item>\n      <item>LSOutput</item>\n      <item>LSParser</item>\n      <item>LSParserFilter</item>\n      <item>LSProgressEvent</item>\n      <item>LSResourceResolver</item>\n      <item>LSSerializer</item>\n      <item>LSSerializerFilter</item>\n      <item>Label</item>\n      <item>LabelUI</item>\n      <item>LabelView</item>\n      <item>LanguageCallback</item>\n      <item>LastOwnerException</item>\n      <item>LayeredHighlighter</item>\n      <item>LayeredHighlighter.LayerPainter</item>\n      <item>LayoutFocusTraversalPolicy</item>\n      <item>LayoutManager</item>\n      <item>LayoutManager2</item>\n      <item>LayoutQueue</item>\n      <item>LdapContext</item>\n      <item>LdapName</item>\n      <item>LdapReferralException</item>\n      <item>Lease</item>\n      <item>Level</item>\n      <item>LexicalHandler</item>\n      <item>LifespanPolicy</item>\n      <item>LifespanPolicyOperations</item>\n      <item>LifespanPolicyValue</item>\n      <item>LimitExceededException</item>\n      <item>Line</item>\n      <item>Line.Info</item>\n      <item>Line2D</item>\n      <item>Line2D.Double</item>\n      <item>Line2D.Float</item>\n      <item>LineBorder</item>\n      <item>LineBreakMeasurer</item>\n      <item>LineEvent</item>\n      <item>LineEvent.Type</item>\n      <item>LineListener</item>\n      <item>LineMetrics</item>\n      <item>LineNumberInputStream</item>\n      <item>LineNumberReader</item>\n      <item>LineUnavailableException</item>\n      <item>LinkException</item>\n      <item>LinkLoopException</item>\n      <item>LinkRef</item>\n      <item>LinkageError</item>\n      <item>LinkedBlockingQueue</item>\n      <item>LinkedHashMap</item>\n      <item>LinkedHashSet</item>\n      <item>LinkedList</item>\n      <item>List</item>\n      <item>List</item>\n      <item>ListCellRenderer</item>\n      <item>ListDataEvent</item>\n      <item>ListDataListener</item>\n      <item>ListIterator</item>\n      <item>ListModel</item>\n      <item>ListResourceBundle</item>\n      <item>ListSelectionEvent</item>\n      <item>ListSelectionListener</item>\n      <item>ListSelectionModel</item>\n      <item>ListUI</item>\n      <item>ListView</item>\n      <item>ListenerNotFoundException</item>\n      <item>LoaderHandler</item>\n      <item>LocalObject</item>\n      <item>Locale</item>\n      <item>LocateRegistry</item>\n      <item>Locator</item>\n      <item>Locator2</item>\n      <item>Locator2Impl</item>\n      <item>LocatorImpl</item>\n      <item>Lock</item>\n      <item>LockSupport</item>\n      <item>LogManager</item>\n      <item>LogRecord</item>\n      <item>LogStream</item>\n      <item>Logger</item>\n      <item>LoggingMXBean</item>\n      <item>LoggingPermission</item>\n      <item>LoginContext</item>\n      <item>LoginException</item>\n      <item>LoginModule</item>\n      <item>Long</item>\n      <item>LongBuffer</item>\n      <item>LongHolder</item>\n      <item>LongLongSeqHelper</item>\n      <item>LongLongSeqHolder</item>\n      <item>LongSeqHelper</item>\n      <item>LongSeqHolder</item>\n      <item>LookAndFeel</item>\n      <item>LookupOp</item>\n      <item>LookupTable</item>\n      <item>MARSHAL</item>\n      <item>MBeanAttributeInfo</item>\n      <item>MBeanConstructorInfo</item>\n      <item>MBeanException</item>\n      <item>MBeanFeatureInfo</item>\n      <item>MBeanInfo</item>\n      <item>MBeanNotificationInfo</item>\n      <item>MBeanOperationInfo</item>\n      <item>MBeanParameterInfo</item>\n      <item>MBeanPermission</item>\n      <item>MBeanRegistration</item>\n      <item>MBeanRegistrationException</item>\n      <item>MBeanServer</item>\n      <item>MBeanServerBuilder</item>\n      <item>MBeanServerConnection</item>\n      <item>MBeanServerDelegate</item>\n      <item>MBeanServerDelegateMBean</item>\n      <item>MBeanServerFactory</item>\n      <item>MBeanServerForwarder</item>\n      <item>MBeanServerInvocationHandler</item>\n      <item>MBeanServerNotification</item>\n      <item>MBeanServerNotificationFilter</item>\n      <item>MBeanServerPermission</item>\n      <item>MBeanTrustPermission</item>\n      <item>MGF1ParameterSpec</item>\n      <item>MLet</item>\n      <item>MLetMBean</item>\n      <item>Mac</item>\n      <item>MacSpi</item>\n      <item>MalformedInputException</item>\n      <item>MalformedLinkException</item>\n      <item>MalformedObjectNameException</item>\n      <item>MalformedParameterizedTypeException</item>\n      <item>MalformedURLException</item>\n      <item>ManageReferralControl</item>\n      <item>ManagementFactory</item>\n      <item>ManagementPermission</item>\n      <item>ManagerFactoryParameters</item>\n      <item>Manifest</item>\n      <item>Map</item>\n      <item>Map.Entry</item>\n      <item>MappedByteBuffer</item>\n      <item>MarshalException</item>\n      <item>MarshalledObject</item>\n      <item>MaskFormatter</item>\n      <item>MatchResult</item>\n      <item>Matcher</item>\n      <item>Math</item>\n      <item>MathContext</item>\n      <item>MatteBorder</item>\n      <item>Media</item>\n      <item>MediaName</item>\n      <item>MediaPrintableArea</item>\n      <item>MediaSize</item>\n      <item>MediaSize.Engineering</item>\n      <item>MediaSize.ISO</item>\n      <item>MediaSize.JIS</item>\n      <item>MediaSize.NA</item>\n      <item>MediaSize.Other</item>\n      <item>MediaSizeName</item>\n      <item>MediaTracker</item>\n      <item>MediaTray</item>\n      <item>Member</item>\n      <item>MemoryCacheImageInputStream</item>\n      <item>MemoryCacheImageOutputStream</item>\n      <item>MemoryHandler</item>\n      <item>MemoryImageSource</item>\n      <item>MemoryMXBean</item>\n      <item>MemoryManagerMXBean</item>\n      <item>MemoryNotificationInfo</item>\n      <item>MemoryPoolMXBean</item>\n      <item>MemoryType</item>\n      <item>MemoryUsage</item>\n      <item>Menu</item>\n      <item>MenuBar</item>\n      <item>MenuBarUI</item>\n      <item>MenuComponent</item>\n      <item>MenuContainer</item>\n      <item>MenuDragMouseEvent</item>\n      <item>MenuDragMouseListener</item>\n      <item>MenuElement</item>\n      <item>MenuEvent</item>\n      <item>MenuItem</item>\n      <item>MenuItemUI</item>\n      <item>MenuKeyEvent</item>\n      <item>MenuKeyListener</item>\n      <item>MenuListener</item>\n      <item>MenuSelectionManager</item>\n      <item>MenuShortcut</item>\n      <item>MessageDigest</item>\n      <item>MessageDigestSpi</item>\n      <item>MessageFormat</item>\n      <item>MessageFormat.Field</item>\n      <item>MessageProp</item>\n      <item>MetaEventListener</item>\n      <item>MetaMessage</item>\n      <item>MetalBorders</item>\n      <item>MetalBorders.ButtonBorder</item>\n      <item>MetalBorders.Flush3DBorder</item>\n      <item>MetalBorders.InternalFrameBorder</item>\n      <item>MetalBorders.MenuBarBorder</item>\n      <item>MetalBorders.MenuItemBorder</item>\n      <item>MetalBorders.OptionDialogBorder</item>\n      <item>MetalBorders.PaletteBorder</item>\n      <item>MetalBorders.PopupMenuBorder</item>\n      <item>MetalBorders.RolloverButtonBorder</item>\n      <item>MetalBorders.ScrollPaneBorder</item>\n      <item>MetalBorders.TableHeaderBorder</item>\n      <item>MetalBorders.TextFieldBorder</item>\n      <item>MetalBorders.ToggleButtonBorder</item>\n      <item>MetalBorders.ToolBarBorder</item>\n      <item>MetalButtonUI</item>\n      <item>MetalCheckBoxIcon</item>\n      <item>MetalCheckBoxUI</item>\n      <item>MetalComboBoxButton</item>\n      <item>MetalComboBoxEditor</item>\n      <item>MetalComboBoxEditor.UIResource</item>\n      <item>MetalComboBoxIcon</item>\n      <item>MetalComboBoxUI</item>\n      <item>MetalDesktopIconUI</item>\n      <item>MetalFileChooserUI</item>\n      <item>MetalIconFactory</item>\n      <item>MetalIconFactory.FileIcon16</item>\n      <item>MetalIconFactory.FolderIcon16</item>\n      <item>MetalIconFactory.PaletteCloseIcon</item>\n      <item>MetalIconFactory.TreeControlIcon</item>\n      <item>MetalIconFactory.TreeFolderIcon</item>\n      <item>MetalIconFactory.TreeLeafIcon</item>\n      <item>MetalInternalFrameTitlePane</item>\n      <item>MetalInternalFrameUI</item>\n      <item>MetalLabelUI</item>\n      <item>MetalLookAndFeel</item>\n      <item>MetalMenuBarUI</item>\n      <item>MetalPopupMenuSeparatorUI</item>\n      <item>MetalProgressBarUI</item>\n      <item>MetalRadioButtonUI</item>\n      <item>MetalRootPaneUI</item>\n      <item>MetalScrollBarUI</item>\n      <item>MetalScrollButton</item>\n      <item>MetalScrollPaneUI</item>\n      <item>MetalSeparatorUI</item>\n      <item>MetalSliderUI</item>\n      <item>MetalSplitPaneUI</item>\n      <item>MetalTabbedPaneUI</item>\n      <item>MetalTextFieldUI</item>\n      <item>MetalTheme</item>\n      <item>MetalToggleButtonUI</item>\n      <item>MetalToolBarUI</item>\n      <item>MetalToolTipUI</item>\n      <item>MetalTreeUI</item>\n      <item>Method</item>\n      <item>MethodDescriptor</item>\n      <item>MidiChannel</item>\n      <item>MidiDevice</item>\n      <item>MidiDevice.Info</item>\n      <item>MidiDeviceProvider</item>\n      <item>MidiEvent</item>\n      <item>MidiFileFormat</item>\n      <item>MidiFileReader</item>\n      <item>MidiFileWriter</item>\n      <item>MidiMessage</item>\n      <item>MidiSystem</item>\n      <item>MidiUnavailableException</item>\n      <item>MimeTypeParseException</item>\n      <item>MinimalHTMLWriter</item>\n      <item>MissingFormatArgumentException</item>\n      <item>MissingFormatWidthException</item>\n      <item>MissingResourceException</item>\n      <item>Mixer</item>\n      <item>Mixer.Info</item>\n      <item>MixerProvider</item>\n      <item>ModelMBean</item>\n      <item>ModelMBeanAttributeInfo</item>\n      <item>ModelMBeanConstructorInfo</item>\n      <item>ModelMBeanInfo</item>\n      <item>ModelMBeanInfoSupport</item>\n      <item>ModelMBeanNotificationBroadcaster</item>\n      <item>ModelMBeanNotificationInfo</item>\n      <item>ModelMBeanOperationInfo</item>\n      <item>ModificationItem</item>\n      <item>Modifier</item>\n      <item>Monitor</item>\n      <item>MonitorMBean</item>\n      <item>MonitorNotification</item>\n      <item>MonitorSettingException</item>\n      <item>MouseAdapter</item>\n      <item>MouseDragGestureRecognizer</item>\n      <item>MouseEvent</item>\n      <item>MouseInfo</item>\n      <item>MouseInputAdapter</item>\n      <item>MouseInputListener</item>\n      <item>MouseListener</item>\n      <item>MouseMotionAdapter</item>\n      <item>MouseMotionListener</item>\n      <item>MouseWheelEvent</item>\n      <item>MouseWheelListener</item>\n      <item>MultiButtonUI</item>\n      <item>MultiColorChooserUI</item>\n      <item>MultiComboBoxUI</item>\n      <item>MultiDesktopIconUI</item>\n      <item>MultiDesktopPaneUI</item>\n      <item>MultiDoc</item>\n      <item>MultiDocPrintJob</item>\n      <item>MultiDocPrintService</item>\n      <item>MultiFileChooserUI</item>\n      <item>MultiInternalFrameUI</item>\n      <item>MultiLabelUI</item>\n      <item>MultiListUI</item>\n      <item>MultiLookAndFeel</item>\n      <item>MultiMenuBarUI</item>\n      <item>MultiMenuItemUI</item>\n      <item>MultiOptionPaneUI</item>\n      <item>MultiPanelUI</item>\n      <item>MultiPixelPackedSampleModel</item>\n      <item>MultiPopupMenuUI</item>\n      <item>MultiProgressBarUI</item>\n      <item>MultiRootPaneUI</item>\n      <item>MultiScrollBarUI</item>\n      <item>MultiScrollPaneUI</item>\n      <item>MultiSeparatorUI</item>\n      <item>MultiSliderUI</item>\n      <item>MultiSpinnerUI</item>\n      <item>MultiSplitPaneUI</item>\n      <item>MultiTabbedPaneUI</item>\n      <item>MultiTableHeaderUI</item>\n      <item>MultiTableUI</item>\n      <item>MultiTextUI</item>\n      <item>MultiToolBarUI</item>\n      <item>MultiToolTipUI</item>\n      <item>MultiTreeUI</item>\n      <item>MultiViewportUI</item>\n      <item>MulticastSocket</item>\n      <item>MultipleComponentProfileHelper</item>\n      <item>MultipleComponentProfileHolder</item>\n      <item>MultipleDocumentHandling</item>\n      <item>MultipleMaster</item>\n      <item>MutableAttributeSet</item>\n      <item>MutableComboBoxModel</item>\n      <item>MutableTreeNode</item>\n      <item>NON_EXISTENT</item>\n      <item>NO_IMPLEMENT</item>\n      <item>NO_MEMORY</item>\n      <item>NO_PERMISSION</item>\n      <item>NO_RESOURCES</item>\n      <item>NO_RESPONSE</item>\n      <item>NVList</item>\n      <item>Name</item>\n      <item>NameAlreadyBoundException</item>\n      <item>NameCallback</item>\n      <item>NameClassPair</item>\n      <item>NameComponent</item>\n      <item>NameComponentHelper</item>\n      <item>NameComponentHolder</item>\n      <item>NameDynAnyPair</item>\n      <item>NameDynAnyPairHelper</item>\n      <item>NameDynAnyPairSeqHelper</item>\n      <item>NameHelper</item>\n      <item>NameHolder</item>\n      <item>NameList</item>\n      <item>NameNotFoundException</item>\n      <item>NameParser</item>\n      <item>NameValuePair</item>\n      <item>NameValuePair</item>\n      <item>NameValuePairHelper</item>\n      <item>NameValuePairHelper</item>\n      <item>NameValuePairSeqHelper</item>\n      <item>NamedNodeMap</item>\n      <item>NamedValue</item>\n      <item>NamespaceChangeListener</item>\n      <item>NamespaceContext</item>\n      <item>NamespaceSupport</item>\n      <item>Naming</item>\n      <item>NamingContext</item>\n      <item>NamingContextExt</item>\n      <item>NamingContextExtHelper</item>\n      <item>NamingContextExtHolder</item>\n      <item>NamingContextExtOperations</item>\n      <item>NamingContextExtPOA</item>\n      <item>NamingContextHelper</item>\n      <item>NamingContextHolder</item>\n      <item>NamingContextOperations</item>\n      <item>NamingContextPOA</item>\n      <item>NamingEnumeration</item>\n      <item>NamingEvent</item>\n      <item>NamingException</item>\n      <item>NamingExceptionEvent</item>\n      <item>NamingListener</item>\n      <item>NamingManager</item>\n      <item>NamingSecurityException</item>\n      <item>NavigationFilter</item>\n      <item>NavigationFilter.FilterBypass</item>\n      <item>NegativeArraySizeException</item>\n      <item>NetPermission</item>\n      <item>NetworkInterface</item>\n      <item>NoClassDefFoundError</item>\n      <item>NoConnectionPendingException</item>\n      <item>NoContext</item>\n      <item>NoContextHelper</item>\n      <item>NoInitialContextException</item>\n      <item>NoPermissionException</item>\n      <item>NoRouteToHostException</item>\n      <item>NoServant</item>\n      <item>NoServantHelper</item>\n      <item>NoSuchAlgorithmException</item>\n      <item>NoSuchAttributeException</item>\n      <item>NoSuchElementException</item>\n      <item>NoSuchFieldError</item>\n      <item>NoSuchFieldException</item>\n      <item>NoSuchMethodError</item>\n      <item>NoSuchMethodException</item>\n      <item>NoSuchObjectException</item>\n      <item>NoSuchPaddingException</item>\n      <item>NoSuchProviderException</item>\n      <item>Node</item>\n      <item>NodeChangeEvent</item>\n      <item>NodeChangeListener</item>\n      <item>NodeList</item>\n      <item>NonReadableChannelException</item>\n      <item>NonWritableChannelException</item>\n      <item>NoninvertibleTransformException</item>\n      <item>NotActiveException</item>\n      <item>NotBoundException</item>\n      <item>NotCompliantMBeanException</item>\n      <item>NotContextException</item>\n      <item>NotEmpty</item>\n      <item>NotEmptyHelper</item>\n      <item>NotEmptyHolder</item>\n      <item>NotFound</item>\n      <item>NotFoundHelper</item>\n      <item>NotFoundHolder</item>\n      <item>NotFoundReason</item>\n      <item>NotFoundReasonHelper</item>\n      <item>NotFoundReasonHolder</item>\n      <item>NotOwnerException</item>\n      <item>NotSerializableException</item>\n      <item>NotYetBoundException</item>\n      <item>NotYetConnectedException</item>\n      <item>Notation</item>\n      <item>Notification</item>\n      <item>NotificationBroadcaster</item>\n      <item>NotificationBroadcasterSupport</item>\n      <item>NotificationEmitter</item>\n      <item>NotificationFilter</item>\n      <item>NotificationFilterSupport</item>\n      <item>NotificationListener</item>\n      <item>NotificationResult</item>\n      <item>NullCipher</item>\n      <item>NullPointerException</item>\n      <item>Number</item>\n      <item>NumberFormat</item>\n      <item>NumberFormat.Field</item>\n      <item>NumberFormatException</item>\n      <item>NumberFormatter</item>\n      <item>NumberOfDocuments</item>\n      <item>NumberOfInterveningJobs</item>\n      <item>NumberUp</item>\n      <item>NumberUpSupported</item>\n      <item>NumericShaper</item>\n      <item>OAEPParameterSpec</item>\n      <item>OBJECT_NOT_EXIST</item>\n      <item>OBJ_ADAPTER</item>\n      <item>OMGVMCID</item>\n      <item>ORB</item>\n      <item>ORB</item>\n      <item>ORBIdHelper</item>\n      <item>ORBInitInfo</item>\n      <item>ORBInitInfoOperations</item>\n      <item>ORBInitializer</item>\n      <item>ORBInitializerOperations</item>\n      <item>ObjID</item>\n      <item>Object</item>\n      <item>Object</item>\n      <item>ObjectAlreadyActive</item>\n      <item>ObjectAlreadyActiveHelper</item>\n      <item>ObjectChangeListener</item>\n      <item>ObjectFactory</item>\n      <item>ObjectFactoryBuilder</item>\n      <item>ObjectHelper</item>\n      <item>ObjectHolder</item>\n      <item>ObjectIdHelper</item>\n      <item>ObjectIdHelper</item>\n      <item>ObjectImpl</item>\n      <item>ObjectImpl</item>\n      <item>ObjectInput</item>\n      <item>ObjectInputStream</item>\n      <item>ObjectInputStream.GetField</item>\n      <item>ObjectInputValidation</item>\n      <item>ObjectInstance</item>\n      <item>ObjectName</item>\n      <item>ObjectNotActive</item>\n      <item>ObjectNotActiveHelper</item>\n      <item>ObjectOutput</item>\n      <item>ObjectOutputStream</item>\n      <item>ObjectOutputStream.PutField</item>\n      <item>ObjectReferenceFactory</item>\n      <item>ObjectReferenceFactoryHelper</item>\n      <item>ObjectReferenceFactoryHolder</item>\n      <item>ObjectReferenceTemplate</item>\n      <item>ObjectReferenceTemplateHelper</item>\n      <item>ObjectReferenceTemplateHolder</item>\n      <item>ObjectReferenceTemplateSeqHelper</item>\n      <item>ObjectReferenceTemplateSeqHolder</item>\n      <item>ObjectStreamClass</item>\n      <item>ObjectStreamConstants</item>\n      <item>ObjectStreamException</item>\n      <item>ObjectStreamField</item>\n      <item>ObjectView</item>\n      <item>Observable</item>\n      <item>Observer</item>\n      <item>OceanTheme</item>\n      <item>OctetSeqHelper</item>\n      <item>OctetSeqHolder</item>\n      <item>Oid</item>\n      <item>OpenDataException</item>\n      <item>OpenMBeanAttributeInfo</item>\n      <item>OpenMBeanAttributeInfoSupport</item>\n      <item>OpenMBeanConstructorInfo</item>\n      <item>OpenMBeanConstructorInfoSupport</item>\n      <item>OpenMBeanInfo</item>\n      <item>OpenMBeanInfoSupport</item>\n      <item>OpenMBeanOperationInfo</item>\n      <item>OpenMBeanOperationInfoSupport</item>\n      <item>OpenMBeanParameterInfo</item>\n      <item>OpenMBeanParameterInfoSupport</item>\n      <item>OpenType</item>\n      <item>OpenType</item>\n      <item>OperatingSystemMXBean</item>\n      <item>Operation</item>\n      <item>OperationNotSupportedException</item>\n      <item>OperationsException</item>\n      <item>Option</item>\n      <item>OptionPaneUI</item>\n      <item>OptionalDataException</item>\n      <item>OrientationRequested</item>\n      <item>OutOfMemoryError</item>\n      <item>OutputDeviceAssigned</item>\n      <item>OutputKeys</item>\n      <item>OutputStream</item>\n      <item>OutputStream</item>\n      <item>OutputStream</item>\n      <item>OutputStreamWriter</item>\n      <item>OverlappingFileLockException</item>\n      <item>OverlayLayout</item>\n      <item>Override</item>\n      <item>Owner</item>\n      <item>PBEKey</item>\n      <item>PBEKeySpec</item>\n      <item>PBEParameterSpec</item>\n      <item>PDLOverrideSupported</item>\n      <item>PERSIST_STORE</item>\n      <item>PKCS8EncodedKeySpec</item>\n      <item>PKIXBuilderParameters</item>\n      <item>PKIXCertPathBuilderResult</item>\n      <item>PKIXCertPathChecker</item>\n      <item>PKIXCertPathValidatorResult</item>\n      <item>PKIXParameters</item>\n      <item>POA</item>\n      <item>POAHelper</item>\n      <item>POAManager</item>\n      <item>POAManagerOperations</item>\n      <item>POAOperations</item>\n      <item>PRIVATE_MEMBER</item>\n      <item>PSSParameterSpec</item>\n      <item>PSource</item>\n      <item>PSource.PSpecified</item>\n      <item>PUBLIC_MEMBER</item>\n      <item>Pack200</item>\n      <item>Pack200.Packer</item>\n      <item>Pack200.Unpacker</item>\n      <item>Package</item>\n      <item>PackedColorModel</item>\n      <item>PageAttributes</item>\n      <item>PageAttributes.ColorType</item>\n      <item>PageAttributes.MediaType</item>\n      <item>PageAttributes.OrientationRequestedType</item>\n      <item>PageAttributes.OriginType</item>\n      <item>PageAttributes.PrintQualityType</item>\n      <item>PageFormat</item>\n      <item>PageRanges</item>\n      <item>Pageable</item>\n      <item>PagedResultsControl</item>\n      <item>PagedResultsResponseControl</item>\n      <item>PagesPerMinute</item>\n      <item>PagesPerMinuteColor</item>\n      <item>Paint</item>\n      <item>PaintContext</item>\n      <item>PaintEvent</item>\n      <item>Panel</item>\n      <item>PanelUI</item>\n      <item>Paper</item>\n      <item>ParagraphView</item>\n      <item>ParagraphView</item>\n      <item>Parameter</item>\n      <item>ParameterBlock</item>\n      <item>ParameterDescriptor</item>\n      <item>ParameterMetaData</item>\n      <item>ParameterMode</item>\n      <item>ParameterModeHelper</item>\n      <item>ParameterModeHolder</item>\n      <item>ParameterizedType</item>\n      <item>ParseException</item>\n      <item>ParsePosition</item>\n      <item>Parser</item>\n      <item>Parser</item>\n      <item>ParserAdapter</item>\n      <item>ParserConfigurationException</item>\n      <item>ParserDelegator</item>\n      <item>ParserFactory</item>\n      <item>PartialResultException</item>\n      <item>PasswordAuthentication</item>\n      <item>PasswordCallback</item>\n      <item>PasswordView</item>\n      <item>Patch</item>\n      <item>PathIterator</item>\n      <item>Pattern</item>\n      <item>PatternSyntaxException</item>\n      <item>Permission</item>\n      <item>Permission</item>\n      <item>PermissionCollection</item>\n      <item>Permissions</item>\n      <item>PersistenceDelegate</item>\n      <item>PersistentMBean</item>\n      <item>PhantomReference</item>\n      <item>Pipe</item>\n      <item>Pipe.SinkChannel</item>\n      <item>Pipe.SourceChannel</item>\n      <item>PipedInputStream</item>\n      <item>PipedOutputStream</item>\n      <item>PipedReader</item>\n      <item>PipedWriter</item>\n      <item>PixelGrabber</item>\n      <item>PixelInterleavedSampleModel</item>\n      <item>PlainDocument</item>\n      <item>PlainView</item>\n      <item>Point</item>\n      <item>Point2D</item>\n      <item>Point2D.Double</item>\n      <item>Point2D.Float</item>\n      <item>PointerInfo</item>\n      <item>Policy</item>\n      <item>Policy</item>\n      <item>Policy</item>\n      <item>PolicyError</item>\n      <item>PolicyErrorCodeHelper</item>\n      <item>PolicyErrorHelper</item>\n      <item>PolicyErrorHolder</item>\n      <item>PolicyFactory</item>\n      <item>PolicyFactoryOperations</item>\n      <item>PolicyHelper</item>\n      <item>PolicyHolder</item>\n      <item>PolicyListHelper</item>\n      <item>PolicyListHolder</item>\n      <item>PolicyNode</item>\n      <item>PolicyOperations</item>\n      <item>PolicyQualifierInfo</item>\n      <item>PolicyTypeHelper</item>\n      <item>Polygon</item>\n      <item>PooledConnection</item>\n      <item>Popup</item>\n      <item>PopupFactory</item>\n      <item>PopupMenu</item>\n      <item>PopupMenuEvent</item>\n      <item>PopupMenuListener</item>\n      <item>PopupMenuUI</item>\n      <item>Port</item>\n      <item>Port.Info</item>\n      <item>PortUnreachableException</item>\n      <item>PortableRemoteObject</item>\n      <item>PortableRemoteObjectDelegate</item>\n      <item>Position</item>\n      <item>Position.Bias</item>\n      <item>Predicate</item>\n      <item>PreferenceChangeEvent</item>\n      <item>PreferenceChangeListener</item>\n      <item>Preferences</item>\n      <item>PreferencesFactory</item>\n      <item>PreparedStatement</item>\n      <item>PresentationDirection</item>\n      <item>Principal</item>\n      <item>Principal</item>\n      <item>PrincipalHolder</item>\n      <item>PrintEvent</item>\n      <item>PrintException</item>\n      <item>PrintGraphics</item>\n      <item>PrintJob</item>\n      <item>PrintJobAdapter</item>\n      <item>PrintJobAttribute</item>\n      <item>PrintJobAttributeEvent</item>\n      <item>PrintJobAttributeListener</item>\n      <item>PrintJobAttributeSet</item>\n      <item>PrintJobEvent</item>\n      <item>PrintJobListener</item>\n      <item>PrintQuality</item>\n      <item>PrintRequestAttribute</item>\n      <item>PrintRequestAttributeSet</item>\n      <item>PrintService</item>\n      <item>PrintServiceAttribute</item>\n      <item>PrintServiceAttributeEvent</item>\n      <item>PrintServiceAttributeListener</item>\n      <item>PrintServiceAttributeSet</item>\n      <item>PrintServiceLookup</item>\n      <item>PrintStream</item>\n      <item>PrintWriter</item>\n      <item>Printable</item>\n      <item>PrinterAbortException</item>\n      <item>PrinterException</item>\n      <item>PrinterGraphics</item>\n      <item>PrinterIOException</item>\n      <item>PrinterInfo</item>\n      <item>PrinterIsAcceptingJobs</item>\n      <item>PrinterJob</item>\n      <item>PrinterLocation</item>\n      <item>PrinterMakeAndModel</item>\n      <item>PrinterMessageFromOperator</item>\n      <item>PrinterMoreInfo</item>\n      <item>PrinterMoreInfoManufacturer</item>\n      <item>PrinterName</item>\n      <item>PrinterResolution</item>\n      <item>PrinterState</item>\n      <item>PrinterStateReason</item>\n      <item>PrinterStateReasons</item>\n      <item>PrinterURI</item>\n      <item>PriorityBlockingQueue</item>\n      <item>PriorityQueue</item>\n      <item>PrivateClassLoader</item>\n      <item>PrivateCredentialPermission</item>\n      <item>PrivateKey</item>\n      <item>PrivateMLet</item>\n      <item>PrivilegedAction</item>\n      <item>PrivilegedActionException</item>\n      <item>PrivilegedExceptionAction</item>\n      <item>Process</item>\n      <item>ProcessBuilder</item>\n      <item>ProcessingInstruction</item>\n      <item>ProfileDataException</item>\n      <item>ProfileIdHelper</item>\n      <item>ProgressBarUI</item>\n      <item>ProgressMonitor</item>\n      <item>ProgressMonitorInputStream</item>\n      <item>Properties</item>\n      <item>PropertyChangeEvent</item>\n      <item>PropertyChangeListener</item>\n      <item>PropertyChangeListenerProxy</item>\n      <item>PropertyChangeSupport</item>\n      <item>PropertyDescriptor</item>\n      <item>PropertyEditor</item>\n      <item>PropertyEditorManager</item>\n      <item>PropertyEditorSupport</item>\n      <item>PropertyPermission</item>\n      <item>PropertyResourceBundle</item>\n      <item>PropertyVetoException</item>\n      <item>ProtectionDomain</item>\n      <item>ProtocolException</item>\n      <item>Provider</item>\n      <item>Provider.Service</item>\n      <item>ProviderException</item>\n      <item>Proxy</item>\n      <item>Proxy</item>\n      <item>Proxy.Type</item>\n      <item>ProxySelector</item>\n      <item>PublicKey</item>\n      <item>PushbackInputStream</item>\n      <item>PushbackReader</item>\n      <item>QName</item>\n      <item>QuadCurve2D</item>\n      <item>QuadCurve2D.Double</item>\n      <item>QuadCurve2D.Float</item>\n      <item>Query</item>\n      <item>QueryEval</item>\n      <item>QueryExp</item>\n      <item>Queue</item>\n      <item>QueuedJobCount</item>\n      <item>RC2ParameterSpec</item>\n      <item>RC5ParameterSpec</item>\n      <item>REBIND</item>\n      <item>REQUEST_PROCESSING_POLICY_ID</item>\n      <item>RGBImageFilter</item>\n      <item>RMIClassLoader</item>\n      <item>RMIClassLoaderSpi</item>\n      <item>RMIClientSocketFactory</item>\n      <item>RMIConnection</item>\n      <item>RMIConnectionImpl</item>\n      <item>RMIConnectionImpl_Stub</item>\n      <item>RMIConnector</item>\n      <item>RMIConnectorServer</item>\n      <item>RMICustomMaxStreamFormat</item>\n      <item>RMIFailureHandler</item>\n      <item>RMIIIOPServerImpl</item>\n      <item>RMIJRMPServerImpl</item>\n      <item>RMISecurityException</item>\n      <item>RMISecurityManager</item>\n      <item>RMIServer</item>\n      <item>RMIServerImpl</item>\n      <item>RMIServerImpl_Stub</item>\n      <item>RMIServerSocketFactory</item>\n      <item>RMISocketFactory</item>\n      <item>RSAKey</item>\n      <item>RSAKeyGenParameterSpec</item>\n      <item>RSAMultiPrimePrivateCrtKey</item>\n      <item>RSAMultiPrimePrivateCrtKeySpec</item>\n      <item>RSAOtherPrimeInfo</item>\n      <item>RSAPrivateCrtKey</item>\n      <item>RSAPrivateCrtKeySpec</item>\n      <item>RSAPrivateKey</item>\n      <item>RSAPrivateKeySpec</item>\n      <item>RSAPublicKey</item>\n      <item>RSAPublicKeySpec</item>\n      <item>RTFEditorKit</item>\n      <item>Random</item>\n      <item>RandomAccess</item>\n      <item>RandomAccessFile</item>\n      <item>Raster</item>\n      <item>RasterFormatException</item>\n      <item>RasterOp</item>\n      <item>Rdn</item>\n      <item>ReadOnlyBufferException</item>\n      <item>ReadWriteLock</item>\n      <item>Readable</item>\n      <item>ReadableByteChannel</item>\n      <item>Reader</item>\n      <item>RealmCallback</item>\n      <item>RealmChoiceCallback</item>\n      <item>Receiver</item>\n      <item>Rectangle</item>\n      <item>Rectangle2D</item>\n      <item>Rectangle2D.Double</item>\n      <item>Rectangle2D.Float</item>\n      <item>RectangularShape</item>\n      <item>ReentrantLock</item>\n      <item>ReentrantReadWriteLock</item>\n      <item>ReentrantReadWriteLock.ReadLock</item>\n      <item>ReentrantReadWriteLock.WriteLock</item>\n      <item>Ref</item>\n      <item>RefAddr</item>\n      <item>Reference</item>\n      <item>Reference</item>\n      <item>ReferenceQueue</item>\n      <item>ReferenceUriSchemesSupported</item>\n      <item>Referenceable</item>\n      <item>ReferralException</item>\n      <item>ReflectPermission</item>\n      <item>ReflectionException</item>\n      <item>RefreshFailedException</item>\n      <item>Refreshable</item>\n      <item>Region</item>\n      <item>RegisterableService</item>\n      <item>Registry</item>\n      <item>RegistryHandler</item>\n      <item>RejectedExecutionException</item>\n      <item>RejectedExecutionHandler</item>\n      <item>Relation</item>\n      <item>RelationException</item>\n      <item>RelationNotFoundException</item>\n      <item>RelationNotification</item>\n      <item>RelationService</item>\n      <item>RelationServiceMBean</item>\n      <item>RelationServiceNotRegisteredException</item>\n      <item>RelationSupport</item>\n      <item>RelationSupportMBean</item>\n      <item>RelationType</item>\n      <item>RelationTypeNotFoundException</item>\n      <item>RelationTypeSupport</item>\n      <item>RemarshalException</item>\n      <item>Remote</item>\n      <item>RemoteCall</item>\n      <item>RemoteException</item>\n      <item>RemoteObject</item>\n      <item>RemoteObjectInvocationHandler</item>\n      <item>RemoteRef</item>\n      <item>RemoteServer</item>\n      <item>RemoteStub</item>\n      <item>RenderContext</item>\n      <item>RenderableImage</item>\n      <item>RenderableImageOp</item>\n      <item>RenderableImageProducer</item>\n      <item>RenderedImage</item>\n      <item>RenderedImageFactory</item>\n      <item>Renderer</item>\n      <item>RenderingHints</item>\n      <item>RenderingHints.Key</item>\n      <item>RepaintManager</item>\n      <item>ReplicateScaleFilter</item>\n      <item>RepositoryIdHelper</item>\n      <item>Request</item>\n      <item>RequestInfo</item>\n      <item>RequestInfoOperations</item>\n      <item>RequestProcessingPolicy</item>\n      <item>RequestProcessingPolicyOperations</item>\n      <item>RequestProcessingPolicyValue</item>\n      <item>RequestingUserName</item>\n      <item>RequiredModelMBean</item>\n      <item>RescaleOp</item>\n      <item>ResolutionSyntax</item>\n      <item>ResolveResult</item>\n      <item>Resolver</item>\n      <item>ResourceBundle</item>\n      <item>ResponseCache</item>\n      <item>ResponseHandler</item>\n      <item>Result</item>\n      <item>ResultSet</item>\n      <item>ResultSetMetaData</item>\n      <item>Retention</item>\n      <item>RetentionPolicy</item>\n      <item>ReverbType</item>\n      <item>Robot</item>\n      <item>Role</item>\n      <item>RoleInfo</item>\n      <item>RoleInfoNotFoundException</item>\n      <item>RoleList</item>\n      <item>RoleNotFoundException</item>\n      <item>RoleResult</item>\n      <item>RoleStatus</item>\n      <item>RoleUnresolved</item>\n      <item>RoleUnresolvedList</item>\n      <item>RootPaneContainer</item>\n      <item>RootPaneUI</item>\n      <item>RoundRectangle2D</item>\n      <item>RoundRectangle2D.Double</item>\n      <item>RoundRectangle2D.Float</item>\n      <item>RoundingMode</item>\n      <item>RowMapper</item>\n      <item>RowSet</item>\n      <item>RowSetEvent</item>\n      <item>RowSetInternal</item>\n      <item>RowSetListener</item>\n      <item>RowSetMetaData</item>\n      <item>RowSetMetaDataImpl</item>\n      <item>RowSetReader</item>\n      <item>RowSetWarning</item>\n      <item>RowSetWriter</item>\n      <item>RuleBasedCollator</item>\n      <item>RunTime</item>\n      <item>RunTimeOperations</item>\n      <item>Runnable</item>\n      <item>Runtime</item>\n      <item>RuntimeErrorException</item>\n      <item>RuntimeException</item>\n      <item>RuntimeMBeanException</item>\n      <item>RuntimeMXBean</item>\n      <item>RuntimeOperationsException</item>\n      <item>RuntimePermission</item>\n      <item>SAXException</item>\n      <item>SAXNotRecognizedException</item>\n      <item>SAXNotSupportedException</item>\n      <item>SAXParseException</item>\n      <item>SAXParser</item>\n      <item>SAXParserFactory</item>\n      <item>SAXResult</item>\n      <item>SAXSource</item>\n      <item>SAXTransformerFactory</item>\n      <item>SERVANT_RETENTION_POLICY_ID</item>\n      <item>SQLData</item>\n      <item>SQLException</item>\n      <item>SQLInput</item>\n      <item>SQLInputImpl</item>\n      <item>SQLOutput</item>\n      <item>SQLOutputImpl</item>\n      <item>SQLPermission</item>\n      <item>SQLWarning</item>\n      <item>SSLContext</item>\n      <item>SSLContextSpi</item>\n      <item>SSLEngine</item>\n      <item>SSLEngineResult</item>\n      <item>SSLEngineResult.HandshakeStatus</item>\n      <item>SSLEngineResult.Status</item>\n      <item>SSLException</item>\n      <item>SSLHandshakeException</item>\n      <item>SSLKeyException</item>\n      <item>SSLPeerUnverifiedException</item>\n      <item>SSLPermission</item>\n      <item>SSLProtocolException</item>\n      <item>SSLServerSocket</item>\n      <item>SSLServerSocketFactory</item>\n      <item>SSLSession</item>\n      <item>SSLSessionBindingEvent</item>\n      <item>SSLSessionBindingListener</item>\n      <item>SSLSessionContext</item>\n      <item>SSLSocket</item>\n      <item>SSLSocketFactory</item>\n      <item>SUCCESSFUL</item>\n      <item>SYNC_WITH_TRANSPORT</item>\n      <item>SYSTEM_EXCEPTION</item>\n      <item>SampleModel</item>\n      <item>Sasl</item>\n      <item>SaslClient</item>\n      <item>SaslClientFactory</item>\n      <item>SaslException</item>\n      <item>SaslServer</item>\n      <item>SaslServerFactory</item>\n      <item>Savepoint</item>\n      <item>Scanner</item>\n      <item>ScatteringByteChannel</item>\n      <item>ScheduledExecutorService</item>\n      <item>ScheduledFuture</item>\n      <item>ScheduledThreadPoolExecutor</item>\n      <item>Schema</item>\n      <item>SchemaFactory</item>\n      <item>SchemaFactoryLoader</item>\n      <item>SchemaViolationException</item>\n      <item>ScrollBarUI</item>\n      <item>ScrollPane</item>\n      <item>ScrollPaneAdjustable</item>\n      <item>ScrollPaneConstants</item>\n      <item>ScrollPaneLayout</item>\n      <item>ScrollPaneLayout.UIResource</item>\n      <item>ScrollPaneUI</item>\n      <item>Scrollable</item>\n      <item>Scrollbar</item>\n      <item>SealedObject</item>\n      <item>SearchControls</item>\n      <item>SearchResult</item>\n      <item>SecretKey</item>\n      <item>SecretKeyFactory</item>\n      <item>SecretKeyFactorySpi</item>\n      <item>SecretKeySpec</item>\n      <item>SecureCacheResponse</item>\n      <item>SecureClassLoader</item>\n      <item>SecureRandom</item>\n      <item>SecureRandomSpi</item>\n      <item>Security</item>\n      <item>SecurityException</item>\n      <item>SecurityManager</item>\n      <item>SecurityPermission</item>\n      <item>Segment</item>\n      <item>SelectableChannel</item>\n      <item>SelectionKey</item>\n      <item>Selector</item>\n      <item>SelectorProvider</item>\n      <item>Semaphore</item>\n      <item>SeparatorUI</item>\n      <item>Sequence</item>\n      <item>SequenceInputStream</item>\n      <item>Sequencer</item>\n      <item>Sequencer.SyncMode</item>\n      <item>SerialArray</item>\n      <item>SerialBlob</item>\n      <item>SerialClob</item>\n      <item>SerialDatalink</item>\n      <item>SerialException</item>\n      <item>SerialJavaObject</item>\n      <item>SerialRef</item>\n      <item>SerialStruct</item>\n      <item>Serializable</item>\n      <item>SerializablePermission</item>\n      <item>Servant</item>\n      <item>ServantActivator</item>\n      <item>ServantActivatorHelper</item>\n      <item>ServantActivatorOperations</item>\n      <item>ServantActivatorPOA</item>\n      <item>ServantAlreadyActive</item>\n      <item>ServantAlreadyActiveHelper</item>\n      <item>ServantLocator</item>\n      <item>ServantLocatorHelper</item>\n      <item>ServantLocatorOperations</item>\n      <item>ServantLocatorPOA</item>\n      <item>ServantManager</item>\n      <item>ServantManagerOperations</item>\n      <item>ServantNotActive</item>\n      <item>ServantNotActiveHelper</item>\n      <item>ServantObject</item>\n      <item>ServantRetentionPolicy</item>\n      <item>ServantRetentionPolicyOperations</item>\n      <item>ServantRetentionPolicyValue</item>\n      <item>ServerCloneException</item>\n      <item>ServerError</item>\n      <item>ServerException</item>\n      <item>ServerIdHelper</item>\n      <item>ServerNotActiveException</item>\n      <item>ServerRef</item>\n      <item>ServerRequest</item>\n      <item>ServerRequestInfo</item>\n      <item>ServerRequestInfoOperations</item>\n      <item>ServerRequestInterceptor</item>\n      <item>ServerRequestInterceptorOperations</item>\n      <item>ServerRuntimeException</item>\n      <item>ServerSocket</item>\n      <item>ServerSocketChannel</item>\n      <item>ServerSocketFactory</item>\n      <item>ServiceContext</item>\n      <item>ServiceContextHelper</item>\n      <item>ServiceContextHolder</item>\n      <item>ServiceContextListHelper</item>\n      <item>ServiceContextListHolder</item>\n      <item>ServiceDetail</item>\n      <item>ServiceDetailHelper</item>\n      <item>ServiceIdHelper</item>\n      <item>ServiceInformation</item>\n      <item>ServiceInformationHelper</item>\n      <item>ServiceInformationHolder</item>\n      <item>ServiceNotFoundException</item>\n      <item>ServicePermission</item>\n      <item>ServiceRegistry</item>\n      <item>ServiceRegistry.Filter</item>\n      <item>ServiceUI</item>\n      <item>ServiceUIFactory</item>\n      <item>ServiceUnavailableException</item>\n      <item>Set</item>\n      <item>SetOfIntegerSyntax</item>\n      <item>SetOverrideType</item>\n      <item>SetOverrideTypeHelper</item>\n      <item>Severity</item>\n      <item>Shape</item>\n      <item>ShapeGraphicAttribute</item>\n      <item>SheetCollate</item>\n      <item>Short</item>\n      <item>ShortBuffer</item>\n      <item>ShortBufferException</item>\n      <item>ShortHolder</item>\n      <item>ShortLookupTable</item>\n      <item>ShortMessage</item>\n      <item>ShortSeqHelper</item>\n      <item>ShortSeqHolder</item>\n      <item>Sides</item>\n      <item>Signature</item>\n      <item>SignatureException</item>\n      <item>SignatureSpi</item>\n      <item>SignedObject</item>\n      <item>Signer</item>\n      <item>SimpleAttributeSet</item>\n      <item>SimpleBeanInfo</item>\n      <item>SimpleDateFormat</item>\n      <item>SimpleDoc</item>\n      <item>SimpleFormatter</item>\n      <item>SimpleTimeZone</item>\n      <item>SimpleType</item>\n      <item>SinglePixelPackedSampleModel</item>\n      <item>SingleSelectionModel</item>\n      <item>Size2DSyntax</item>\n      <item>SizeLimitExceededException</item>\n      <item>SizeRequirements</item>\n      <item>SizeSequence</item>\n      <item>Skeleton</item>\n      <item>SkeletonMismatchException</item>\n      <item>SkeletonNotFoundException</item>\n      <item>SliderUI</item>\n      <item>Socket</item>\n      <item>SocketAddress</item>\n      <item>SocketChannel</item>\n      <item>SocketException</item>\n      <item>SocketFactory</item>\n      <item>SocketHandler</item>\n      <item>SocketImpl</item>\n      <item>SocketImplFactory</item>\n      <item>SocketOptions</item>\n      <item>SocketPermission</item>\n      <item>SocketSecurityException</item>\n      <item>SocketTimeoutException</item>\n      <item>SoftBevelBorder</item>\n      <item>SoftReference</item>\n      <item>SortControl</item>\n      <item>SortKey</item>\n      <item>SortResponseControl</item>\n      <item>SortedMap</item>\n      <item>SortedSet</item>\n      <item>SortingFocusTraversalPolicy</item>\n      <item>Soundbank</item>\n      <item>SoundbankReader</item>\n      <item>SoundbankResource</item>\n      <item>Source</item>\n      <item>SourceDataLine</item>\n      <item>SourceLocator</item>\n      <item>SpinnerDateModel</item>\n      <item>SpinnerListModel</item>\n      <item>SpinnerModel</item>\n      <item>SpinnerNumberModel</item>\n      <item>SpinnerUI</item>\n      <item>SplitPaneUI</item>\n      <item>Spring</item>\n      <item>SpringLayout</item>\n      <item>SpringLayout.Constraints</item>\n      <item>SslRMIClientSocketFactory</item>\n      <item>SslRMIServerSocketFactory</item>\n      <item>Stack</item>\n      <item>StackOverflowError</item>\n      <item>StackTraceElement</item>\n      <item>StandardMBean</item>\n      <item>StartTlsRequest</item>\n      <item>StartTlsResponse</item>\n      <item>State</item>\n      <item>StateEdit</item>\n      <item>StateEditable</item>\n      <item>StateFactory</item>\n      <item>Statement</item>\n      <item>Statement</item>\n      <item>StreamCorruptedException</item>\n      <item>StreamHandler</item>\n      <item>StreamPrintService</item>\n      <item>StreamPrintServiceFactory</item>\n      <item>StreamResult</item>\n      <item>StreamSource</item>\n      <item>StreamTokenizer</item>\n      <item>Streamable</item>\n      <item>StreamableValue</item>\n      <item>StrictMath</item>\n      <item>String</item>\n      <item>StringBuffer</item>\n      <item>StringBufferInputStream</item>\n      <item>StringBuilder</item>\n      <item>StringCharacterIterator</item>\n      <item>StringContent</item>\n      <item>StringHolder</item>\n      <item>StringIndexOutOfBoundsException</item>\n      <item>StringMonitor</item>\n      <item>StringMonitorMBean</item>\n      <item>StringNameHelper</item>\n      <item>StringReader</item>\n      <item>StringRefAddr</item>\n      <item>StringSelection</item>\n      <item>StringSeqHelper</item>\n      <item>StringSeqHolder</item>\n      <item>StringTokenizer</item>\n      <item>StringValueExp</item>\n      <item>StringValueHelper</item>\n      <item>StringWriter</item>\n      <item>Stroke</item>\n      <item>Struct</item>\n      <item>StructMember</item>\n      <item>StructMemberHelper</item>\n      <item>Stub</item>\n      <item>StubDelegate</item>\n      <item>StubNotFoundException</item>\n      <item>Style</item>\n      <item>StyleConstants</item>\n      <item>StyleConstants.CharacterConstants</item>\n      <item>StyleConstants.ColorConstants</item>\n      <item>StyleConstants.FontConstants</item>\n      <item>StyleConstants.ParagraphConstants</item>\n      <item>StyleContext</item>\n      <item>StyleSheet</item>\n      <item>StyleSheet.BoxPainter</item>\n      <item>StyleSheet.ListPainter</item>\n      <item>StyledDocument</item>\n      <item>StyledEditorKit</item>\n      <item>StyledEditorKit.AlignmentAction</item>\n      <item>StyledEditorKit.BoldAction</item>\n      <item>StyledEditorKit.FontFamilyAction</item>\n      <item>StyledEditorKit.FontSizeAction</item>\n      <item>StyledEditorKit.ForegroundAction</item>\n      <item>StyledEditorKit.ItalicAction</item>\n      <item>StyledEditorKit.StyledTextAction</item>\n      <item>StyledEditorKit.UnderlineAction</item>\n      <item>Subject</item>\n      <item>SubjectDelegationPermission</item>\n      <item>SubjectDomainCombiner</item>\n      <item>SupportedValuesAttribute</item>\n      <item>SuppressWarnings</item>\n      <item>SwingConstants</item>\n      <item>SwingPropertyChangeSupport</item>\n      <item>SwingUtilities</item>\n      <item>SyncFactory</item>\n      <item>SyncFactoryException</item>\n      <item>SyncFailedException</item>\n      <item>SyncProvider</item>\n      <item>SyncProviderException</item>\n      <item>SyncResolver</item>\n      <item>SyncScopeHelper</item>\n      <item>SynchronousQueue</item>\n      <item>SynthConstants</item>\n      <item>SynthContext</item>\n      <item>SynthGraphicsUtils</item>\n      <item>SynthLookAndFeel</item>\n      <item>SynthPainter</item>\n      <item>SynthStyle</item>\n      <item>SynthStyleFactory</item>\n      <item>Synthesizer</item>\n      <item>SysexMessage</item>\n      <item>System</item>\n      <item>SystemColor</item>\n      <item>SystemException</item>\n      <item>SystemFlavorMap</item>\n      <item>TAG_ALTERNATE_IIOP_ADDRESS</item>\n      <item>TAG_CODE_SETS</item>\n      <item>TAG_INTERNET_IOP</item>\n      <item>TAG_JAVA_CODEBASE</item>\n      <item>TAG_MULTIPLE_COMPONENTS</item>\n      <item>TAG_ORB_TYPE</item>\n      <item>TAG_POLICIES</item>\n      <item>TAG_RMI_CUSTOM_MAX_STREAM_FORMAT</item>\n      <item>TCKind</item>\n      <item>THREAD_POLICY_ID</item>\n      <item>TIMEOUT</item>\n      <item>TRANSACTION_MODE</item>\n      <item>TRANSACTION_REQUIRED</item>\n      <item>TRANSACTION_ROLLEDBACK</item>\n      <item>TRANSACTION_UNAVAILABLE</item>\n      <item>TRANSIENT</item>\n      <item>TRANSPORT_RETRY</item>\n      <item>TabExpander</item>\n      <item>TabSet</item>\n      <item>TabStop</item>\n      <item>TabableView</item>\n      <item>TabbedPaneUI</item>\n      <item>TableCellEditor</item>\n      <item>TableCellRenderer</item>\n      <item>TableColumn</item>\n      <item>TableColumnModel</item>\n      <item>TableColumnModelEvent</item>\n      <item>TableColumnModelListener</item>\n      <item>TableHeaderUI</item>\n      <item>TableModel</item>\n      <item>TableModelEvent</item>\n      <item>TableModelListener</item>\n      <item>TableUI</item>\n      <item>TableView</item>\n      <item>TabularData</item>\n      <item>TabularDataSupport</item>\n      <item>TabularType</item>\n      <item>TagElement</item>\n      <item>TaggedComponent</item>\n      <item>TaggedComponentHelper</item>\n      <item>TaggedComponentHolder</item>\n      <item>TaggedProfile</item>\n      <item>TaggedProfileHelper</item>\n      <item>TaggedProfileHolder</item>\n      <item>Target</item>\n      <item>TargetDataLine</item>\n      <item>TargetedNotification</item>\n      <item>Templates</item>\n      <item>TemplatesHandler</item>\n      <item>Text</item>\n      <item>TextAction</item>\n      <item>TextArea</item>\n      <item>TextAttribute</item>\n      <item>TextComponent</item>\n      <item>TextEvent</item>\n      <item>TextField</item>\n      <item>TextHitInfo</item>\n      <item>TextInputCallback</item>\n      <item>TextLayout</item>\n      <item>TextLayout.CaretPolicy</item>\n      <item>TextListener</item>\n      <item>TextMeasurer</item>\n      <item>TextOutputCallback</item>\n      <item>TextSyntax</item>\n      <item>TextUI</item>\n      <item>TexturePaint</item>\n      <item>Thread</item>\n      <item>Thread.State</item>\n      <item>Thread.UncaughtExceptionHandler</item>\n      <item>ThreadDeath</item>\n      <item>ThreadFactory</item>\n      <item>ThreadGroup</item>\n      <item>ThreadInfo</item>\n      <item>ThreadLocal</item>\n      <item>ThreadMXBean</item>\n      <item>ThreadPolicy</item>\n      <item>ThreadPolicyOperations</item>\n      <item>ThreadPolicyValue</item>\n      <item>ThreadPoolExecutor</item>\n      <item>ThreadPoolExecutor.AbortPolicy</item>\n      <item>ThreadPoolExecutor.CallerRunsPolicy</item>\n      <item>ThreadPoolExecutor.DiscardOldestPolicy</item>\n      <item>ThreadPoolExecutor.DiscardPolicy</item>\n      <item>Throwable</item>\n      <item>Tie</item>\n      <item>TileObserver</item>\n      <item>Time</item>\n      <item>TimeLimitExceededException</item>\n      <item>TimeUnit</item>\n      <item>TimeZone</item>\n      <item>TimeoutException</item>\n      <item>Timer</item>\n      <item>Timer</item>\n      <item>Timer</item>\n      <item>TimerAlarmClockNotification</item>\n      <item>TimerMBean</item>\n      <item>TimerNotification</item>\n      <item>TimerTask</item>\n      <item>Timestamp</item>\n      <item>Timestamp</item>\n      <item>TitledBorder</item>\n      <item>TooManyListenersException</item>\n      <item>ToolBarUI</item>\n      <item>ToolTipManager</item>\n      <item>ToolTipUI</item>\n      <item>Toolkit</item>\n      <item>Track</item>\n      <item>TransactionRequiredException</item>\n      <item>TransactionRolledbackException</item>\n      <item>TransactionService</item>\n      <item>TransactionalWriter</item>\n      <item>TransferHandler</item>\n      <item>Transferable</item>\n      <item>TransformAttribute</item>\n      <item>Transformer</item>\n      <item>TransformerConfigurationException</item>\n      <item>TransformerException</item>\n      <item>TransformerFactory</item>\n      <item>TransformerFactoryConfigurationError</item>\n      <item>TransformerHandler</item>\n      <item>Transmitter</item>\n      <item>Transparency</item>\n      <item>TreeCellEditor</item>\n      <item>TreeCellRenderer</item>\n      <item>TreeExpansionEvent</item>\n      <item>TreeExpansionListener</item>\n      <item>TreeMap</item>\n      <item>TreeModel</item>\n      <item>TreeModelEvent</item>\n      <item>TreeModelListener</item>\n      <item>TreeNode</item>\n      <item>TreePath</item>\n      <item>TreeSelectionEvent</item>\n      <item>TreeSelectionListener</item>\n      <item>TreeSelectionModel</item>\n      <item>TreeSet</item>\n      <item>TreeUI</item>\n      <item>TreeWillExpandListener</item>\n      <item>TrustAnchor</item>\n      <item>TrustManager</item>\n      <item>TrustManagerFactory</item>\n      <item>TrustManagerFactorySpi</item>\n      <item>Type</item>\n      <item>TypeCode</item>\n      <item>TypeCodeHolder</item>\n      <item>TypeInfo</item>\n      <item>TypeInfoProvider</item>\n      <item>TypeMismatch</item>\n      <item>TypeMismatch</item>\n      <item>TypeMismatch</item>\n      <item>TypeMismatchHelper</item>\n      <item>TypeMismatchHelper</item>\n      <item>TypeNotPresentException</item>\n      <item>TypeVariable</item>\n      <item>Types</item>\n      <item>UID</item>\n      <item>UIDefaults</item>\n      <item>UIDefaults.ActiveValue</item>\n      <item>UIDefaults.LazyInputMap</item>\n      <item>UIDefaults.LazyValue</item>\n      <item>UIDefaults.ProxyLazyValue</item>\n      <item>UIManager</item>\n      <item>UIManager.LookAndFeelInfo</item>\n      <item>UIResource</item>\n      <item>ULongLongSeqHelper</item>\n      <item>ULongLongSeqHolder</item>\n      <item>ULongSeqHelper</item>\n      <item>ULongSeqHolder</item>\n      <item>UNKNOWN</item>\n      <item>UNKNOWN</item>\n      <item>UNSUPPORTED_POLICY</item>\n      <item>UNSUPPORTED_POLICY_VALUE</item>\n      <item>URI</item>\n      <item>URIException</item>\n      <item>URIResolver</item>\n      <item>URISyntax</item>\n      <item>URISyntaxException</item>\n      <item>URL</item>\n      <item>URLClassLoader</item>\n      <item>URLConnection</item>\n      <item>URLDecoder</item>\n      <item>URLEncoder</item>\n      <item>URLStreamHandler</item>\n      <item>URLStreamHandlerFactory</item>\n      <item>URLStringHelper</item>\n      <item>USER_EXCEPTION</item>\n      <item>UShortSeqHelper</item>\n      <item>UShortSeqHolder</item>\n      <item>UTFDataFormatException</item>\n      <item>UUID</item>\n      <item>UndeclaredThrowableException</item>\n      <item>UndoManager</item>\n      <item>UndoableEdit</item>\n      <item>UndoableEditEvent</item>\n      <item>UndoableEditListener</item>\n      <item>UndoableEditSupport</item>\n      <item>UnexpectedException</item>\n      <item>UnicastRemoteObject</item>\n      <item>UnionMember</item>\n      <item>UnionMemberHelper</item>\n      <item>UnknownEncoding</item>\n      <item>UnknownEncodingHelper</item>\n      <item>UnknownError</item>\n      <item>UnknownException</item>\n      <item>UnknownFormatConversionException</item>\n      <item>UnknownFormatFlagsException</item>\n      <item>UnknownGroupException</item>\n      <item>UnknownHostException</item>\n      <item>UnknownHostException</item>\n      <item>UnknownObjectException</item>\n      <item>UnknownServiceException</item>\n      <item>UnknownUserException</item>\n      <item>UnknownUserExceptionHelper</item>\n      <item>UnknownUserExceptionHolder</item>\n      <item>UnmappableCharacterException</item>\n      <item>UnmarshalException</item>\n      <item>UnmodifiableClassException</item>\n      <item>UnmodifiableSetException</item>\n      <item>UnrecoverableEntryException</item>\n      <item>UnrecoverableKeyException</item>\n      <item>Unreferenced</item>\n      <item>UnresolvedAddressException</item>\n      <item>UnresolvedPermission</item>\n      <item>UnsatisfiedLinkError</item>\n      <item>UnsolicitedNotification</item>\n      <item>UnsolicitedNotificationEvent</item>\n      <item>UnsolicitedNotificationListener</item>\n      <item>UnsupportedAddressTypeException</item>\n      <item>UnsupportedAudioFileException</item>\n      <item>UnsupportedCallbackException</item>\n      <item>UnsupportedCharsetException</item>\n      <item>UnsupportedClassVersionError</item>\n      <item>UnsupportedEncodingException</item>\n      <item>UnsupportedFlavorException</item>\n      <item>UnsupportedLookAndFeelException</item>\n      <item>UnsupportedOperationException</item>\n      <item>UserDataHandler</item>\n      <item>UserException</item>\n      <item>Util</item>\n      <item>UtilDelegate</item>\n      <item>Utilities</item>\n      <item>VMID</item>\n      <item>VM_ABSTRACT</item>\n      <item>VM_CUSTOM</item>\n      <item>VM_NONE</item>\n      <item>VM_TRUNCATABLE</item>\n      <item>Validator</item>\n      <item>ValidatorHandler</item>\n      <item>ValueBase</item>\n      <item>ValueBaseHelper</item>\n      <item>ValueBaseHolder</item>\n      <item>ValueExp</item>\n      <item>ValueFactory</item>\n      <item>ValueHandler</item>\n      <item>ValueHandlerMultiFormat</item>\n      <item>ValueInputStream</item>\n      <item>ValueMember</item>\n      <item>ValueMemberHelper</item>\n      <item>ValueOutputStream</item>\n      <item>VariableHeightLayoutCache</item>\n      <item>Vector</item>\n      <item>VerifyError</item>\n      <item>VersionSpecHelper</item>\n      <item>VetoableChangeListener</item>\n      <item>VetoableChangeListenerProxy</item>\n      <item>VetoableChangeSupport</item>\n      <item>View</item>\n      <item>ViewFactory</item>\n      <item>ViewportLayout</item>\n      <item>ViewportUI</item>\n      <item>VirtualMachineError</item>\n      <item>Visibility</item>\n      <item>VisibilityHelper</item>\n      <item>VoiceStatus</item>\n      <item>Void</item>\n      <item>VolatileImage</item>\n      <item>WCharSeqHelper</item>\n      <item>WCharSeqHolder</item>\n      <item>WStringSeqHelper</item>\n      <item>WStringSeqHolder</item>\n      <item>WStringValueHelper</item>\n      <item>WeakHashMap</item>\n      <item>WeakReference</item>\n      <item>WebRowSet</item>\n      <item>WildcardType</item>\n      <item>Window</item>\n      <item>WindowAdapter</item>\n      <item>WindowConstants</item>\n      <item>WindowEvent</item>\n      <item>WindowFocusListener</item>\n      <item>WindowListener</item>\n      <item>WindowStateListener</item>\n      <item>WrappedPlainView</item>\n      <item>WritableByteChannel</item>\n      <item>WritableRaster</item>\n      <item>WritableRenderedImage</item>\n      <item>WriteAbortedException</item>\n      <item>Writer</item>\n      <item>WrongAdapter</item>\n      <item>WrongAdapterHelper</item>\n      <item>WrongPolicy</item>\n      <item>WrongPolicyHelper</item>\n      <item>WrongTransaction</item>\n      <item>WrongTransactionHelper</item>\n      <item>WrongTransactionHolder</item>\n      <item>X500Principal</item>\n      <item>X500PrivateCredential</item>\n      <item>X509CRL</item>\n      <item>X509CRLEntry</item>\n      <item>X509CRLSelector</item>\n      <item>X509CertSelector</item>\n      <item>X509Certificate</item>\n      <item>X509Certificate</item>\n      <item>X509EncodedKeySpec</item>\n      <item>X509ExtendedKeyManager</item>\n      <item>X509Extension</item>\n      <item>X509KeyManager</item>\n      <item>X509TrustManager</item>\n      <item>XAConnection</item>\n      <item>XADataSource</item>\n      <item>XAException</item>\n      <item>XAResource</item>\n      <item>XMLConstants</item>\n      <item>XMLDecoder</item>\n      <item>XMLEncoder</item>\n      <item>XMLFilter</item>\n      <item>XMLFilterImpl</item>\n      <item>XMLFormatter</item>\n      <item>XMLGregorianCalendar</item>\n      <item>XMLParseException</item>\n      <item>XMLReader</item>\n      <item>XMLReaderAdapter</item>\n      <item>XMLReaderFactory</item>\n      <item>XPath</item>\n      <item>XPathConstants</item>\n      <item>XPathException</item>\n      <item>XPathExpression</item>\n      <item>XPathExpressionException</item>\n      <item>XPathFactory</item>\n      <item>XPathFactoryConfigurationException</item>\n      <item>XPathFunction</item>\n      <item>XPathFunctionException</item>\n      <item>XPathFunctionResolver</item>\n      <item>XPathVariableResolver</item>\n      <item>Xid</item>\n      <item>XmlReader</item>\n      <item>XmlWriter</item>\n      <item>ZipEntry</item>\n      <item>ZipException</item>\n      <item>ZipFile</item>\n      <item>ZipInputStream</item>\n      <item>ZipOutputStream</item>\n      <item>ZoneView</item>\n      <item>_BindingIteratorImplBase</item>\n      <item>_BindingIteratorStub</item>\n      <item>_DynAnyFactoryStub</item>\n      <item>_DynAnyStub</item>\n      <item>_DynArrayStub</item>\n      <item>_DynEnumStub</item>\n      <item>_DynFixedStub</item>\n      <item>_DynSequenceStub</item>\n      <item>_DynStructStub</item>\n      <item>_DynUnionStub</item>\n      <item>_DynValueStub</item>\n      <item>_IDLTypeStub</item>\n      <item>_NamingContextExtStub</item>\n      <item>_NamingContextImplBase</item>\n      <item>_NamingContextStub</item>\n      <item>_PolicyStub</item>\n      <item>_Remote_Stub</item>\n      <item>_ServantActivatorStub</item>\n      <item>_ServantLocatorStub</item>\n    </list>\n    <list name=\"keywords\">\n      <item>abstract</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>class</item>\n      <item>def</item>\n      <item>do</item>\n      <item>else</item>\n      <item>extends</item>\n      <item>false</item>\n      <item>final</item>\n      <item>finally</item>\n      <item>for</item>\n      <item>forSome</item>\n      <item>if</item>\n      <item>implicit</item>\n      <item>import</item>\n      <item>lazy</item>\n      <item>match</item>\n      <item>new</item>\n      <item>null</item>\n      <item>object</item>\n      <item>override</item>\n      <item>package</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>requires</item>\n      <item>return</item>\n      <item>sealed</item>\n      <item>super</item>\n      <item>this</item>\n      <item>throw</item>\n      <item>trait</item>\n      <item>true</item>\n      <item>try</item>\n      <item>type</item>\n      <item>val</item>\n      <item>var</item>\n      <item>while</item>\n      <item>with</item>\n      <item>yield</item>\n    </list>\n    <list name=\"types\">\n      <item>boolean</item>\n      <item>byte</item>\n      <item>char</item>\n      <item>double</item>\n      <item>float</item>\n      <item>int</item>\n      <item>long</item>\n      <item>short</item>\n      <item>unit</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <!-- Comment next line if you don't use Javadoc tool -->\n        <IncludeRules context=\"##Javadoc\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <keyword attribute=\"Java15\" context=\"#stay\" String=\"java15\"/>\n        <keyword attribute=\"Scala2\" context=\"#stay\" String=\"scala2\"/>\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n        <HlCChar attribute=\"Char\" context=\"#stay\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*BEGIN.*$\" beginRegion=\"Region1\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"//\\s*END.*$\" endRegion=\"Region1\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Function\" context=\"Printf\" String=\"\\.(format|printf)\\b\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n<!--\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\.{3,3}\\s+\" />\n        <RegExpr attribute=\"Keyword\" context=\"StaticImports\" String=\"\\b(import\\s+static)\\b\" />\n        <RegExpr attribute=\"Keyword\" context=\"Imports\" String=\"\\b(package|import)\\b\" />\n-->\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"\\b[_\\w][_\\w\\d]*(?=[\\s]*(/\\*\\s*\\d+\\s*\\*/\\s*)?[(])\" />\n        <RegExpr attribute=\"Symbol\" context=\"Member\" String=\"[.]{1,1}\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Printf\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"&#059;\" />\n        <DetectChar attribute=\"String\" context=\"PrintfString\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"PrintfString\" lineEndContext=\"#pop\" name=\"PrintfString\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(\\d+\\$)?(-|#|\\+|\\ |0|,|\\()*\\d*(\\.\\d+)?[a-hosxA-CEGHSX]\" />\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(\\d+\\$)?(-|#|\\+|\\ |0|,|\\()*\\d*(t|T)(a|A|b|B|c|C|d|D|e|F|h|H|I|j|k|l|L|m|M|N|p|P|Q|r|R|s|S|T|y|Y|z|Z)\" />\n        <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"%(%|n)\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Member\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\b[_a-zA-Z]\\w*(?=[\\s]*)\" />\n      </context>\n<!--\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"StaticImports\">\n        <RegExpr attribute=\"StaticImports\" context=\"#pop\" String=\"\\s*.*$\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Imports\">\n        <RegExpr attribute=\"Imports\" context=\"#pop\" String=\"\\s*.*$\" />\n      </context>\n-->\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\"/>\n<!--       <itemData name=\"StaticImports\"      defStyleNum=\"dsKeyword\" color=\"#800080\" selColor=\"#FFFFFF\" bold=\"0\" italic=\"0\"/> -->\n<!--       <itemData name=\"Imports\"      defStyleNum=\"dsKeyword\" color=\"#808000\" selColor=\"#FFFFFF\" bold=\"0\" italic=\"0\"/> -->\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"         defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"PrintfString\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Scala2\"       defStyleNum=\"dsNormal\" color=\"#0095FF\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Java15\"       defStyleNum=\"dsNormal\" color=\"#0095FF\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/scheme.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language version=\"6\" kateversion=\"5.0\" name=\"Scheme\" section=\"Scripts\" extensions=\"*.scm;*.ss;*.scheme;*.guile\" mimetype=\"text/x-scheme\" author=\"Dominik Haumann (dhaumann@kde.org)\" license=\"MIT\" priority=\"9\">\n  <highlighting>\n    <list name=\"operators\">\n      <item>&lt;=</item>\n      <item>&lt;</item>\n      <item>=</item>\n      <item>=&gt;</item>\n      <item>&gt;=</item>\n      <item>&gt;</item>\n      <item>-</item>\n      <item>/</item>\n      <item>*,*</item>\n      <item>*)</item>\n      <item>+</item>\n    </list>\n    <list name=\"characters\">\n      <item>#\\nul</item>\n      <item>#\\soh</item>\n      <item>#\\stx</item>\n      <item>#\\etx</item>\n      <item>#\\eot</item>\n      <item>#\\enq</item>\n      <item>#\\ack</item>\n      <item>#\\bel</item>\n      <item>#\\bs</item>\n      <item>#\\ht</item>\n      <item>#\\nl</item>\n      <item>#\\vt</item>\n      <item>#\\np</item>\n      <item>#\\cr</item>\n      <item>#\\so</item>\n      <item>#\\si</item>\n      <item>#\\dle</item>\n      <item>#\\dc1</item>\n      <item>#\\dc2</item>\n      <item>#\\dc3</item>\n      <item>#\\dc4</item>\n      <item>#\\nak</item>\n      <item>#\\syn</item>\n      <item>#\\etb</item>\n      <item>#\\can</item>\n      <item>#\\em</item>\n      <item>#\\sub</item>\n      <item>#\\esc</item>\n      <item>#\\fs</item>\n      <item>#\\gs</item>\n      <item>#\\rs</item>\n      <item>#\\us</item>\n      <item>#\\space</item>\n      <item>#\\sp</item>\n      <item>#\\newline</item>\n      <item>#\\nl</item>\n      <item>#\\tab</item>\n      <item>#\\ht</item>\n      <item>#\\backspace</item>\n      <item>#\\bs</item>\n      <item>#\\return</item>\n      <item>#\\cr</item>\n      <item>#\\page</item>\n      <item>#\\np</item>\n      <item>#\\null</item>\n      <item>#\\nul</item>\n    </list>\n    <list name=\"defines\">\n      <item>define</item>\n      <item>define*</item>\n      <item>define-accessor</item>\n      <item>define-class</item>\n      <item>defined?</item>\n      <item>define-generic</item>\n      <item>define-macro</item>\n      <item>define-method</item>\n      <item>define-module</item>\n      <item>define-private</item>\n      <item>define-public</item>\n      <item>define*-public</item>\n      <item>define-reader-ctor</item>\n      <item>define-syntax</item>\n      <item>define-syntax-macro</item>\n      <item>defmacro</item>\n      <item>defmacro*</item>\n      <item>defmacro*-public</item>\n    </list>\n    <list name=\"keywords\">\n      <item>abs</item>\n      <item>acos</item>\n      <item>and</item>\n      <item>angle</item>\n      <item>append</item>\n      <item>applymap</item>\n      <item>asin</item>\n      <item>assoc</item>\n      <item>assq</item>\n      <item>assv</item>\n      <item>atan</item>\n      <item>begin</item>\n      <item>boolean?</item>\n      <item>break</item>\n      <item>caaaar</item>\n      <item>caaadr</item>\n      <item>caaar</item>\n      <item>caadar</item>\n      <item>caaddr</item>\n      <item>caadr</item>\n      <item>caar</item>\n      <item>cadaar</item>\n      <item>cadadr</item>\n      <item>cadar</item>\n      <item>caddar</item>\n      <item>cadddr</item>\n      <item>caddr</item>\n      <item>cadr</item>\n      <item>call/cc</item>\n      <item>call-with-current-continuation</item>\n      <item>call-with-input-file</item>\n      <item>call-with-output-file</item>\n      <item>call-with-values</item>\n      <item>car</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>cdaaar</item>\n      <item>cdaadr</item>\n      <item>cdaar</item>\n      <item>cdadar</item>\n      <item>cdaddr</item>\n      <item>cdadr</item>\n      <item>cdar</item>\n      <item>cddaar</item>\n      <item>cddadr</item>\n      <item>cddar</item>\n      <item>cdddar</item>\n      <item>cddddr</item>\n      <item>cdddr</item>\n      <item>cddr</item>\n      <item>cdr</item>\n      <item>ceiling</item>\n      <item>char-alphabetic?</item>\n      <item>char-ci&gt;=?</item>\n      <item>char-ci&gt;?</item>\n      <item>char-ci=?</item>\n      <item>char-ci&lt;=?</item>\n      <item>char-downcase</item>\n      <item>char-&gt;integer</item>\n      <item>char&gt;=?</item>\n      <item>char&gt;?</item>\n      <item>char=?</item>\n      <item>char?</item>\n      <item>char-lower-case?</item>\n      <item>char&lt;?c</item>\n      <item>char&lt;=?</item>\n      <item>char-numeric?</item>\n      <item>char-ready?</item>\n      <item>char-upcase</item>\n      <item>char-upper-case?</item>\n      <item>char-whitespace?</item>\n      <item>close-input-port</item>\n      <item>close-output-port</item>\n      <item>complex?</item>\n      <item>cond</item>\n      <item>cons</item>\n      <item>continue</item>\n      <item>cos</item>\n      <item>current-input-port</item>\n      <item>current-output-port</item>\n      <item>denominator</item>\n      <item>display</item>\n      <item>do</item>\n      <item>dynamic-wind</item>\n      <item>else</item>\n      <item>eof-object?</item>\n      <item>eq?</item>\n      <item>equal?</item>\n      <item>eqv?</item>\n      <item>eval</item>\n      <item>even?</item>\n      <item>exact->inexact</item>\n      <item>exact?</item>\n      <item>exp</item>\n      <item>expt</item>\n      <item>floor</item>\n      <item>force</item>\n      <item>for-each</item>\n      <item>gcd</item>\n      <item>har-ci&lt;?</item>\n      <item>if</item>\n      <item>imag-part</item>\n      <item>inexact-&gt;exact</item>\n      <item>inexact?</item>\n      <item>input-port?</item>\n      <item>integer-&gt;char</item>\n      <item>integer?</item>\n      <item>interaction-environment</item>\n      <item>lambda</item>\n      <item>lcm</item>\n      <item>length</item>\n      <item>let</item>\n      <item>let*</item>\n      <item>letrec</item>\n      <item>letrec-syntax</item>\n      <item>let-syntax</item>\n      <item>list-&gt;string</item>\n      <item>list</item>\n      <item>list?</item>\n      <item>list-ref</item>\n      <item>list-tail</item>\n      <item>load</item>\n      <item>log</item>\n      <item>magnitude</item>\n      <item>make-polar</item>\n      <item>make-rectangular</item>\n      <item>make-string</item>\n      <item>make-vector</item>\n      <item>max</item>\n      <item>member</item>\n      <item>memq</item>\n      <item>memv</item>\n      <item>min</item>\n      <item>modulo</item>\n      <item>negative?</item>\n      <item>newline</item>\n      <item>not</item>\n      <item>null-environment</item>\n      <item>null?</item>\n      <item>number?</item>\n      <item>number->string</item>\n      <item>numerator</item>\n      <item>odd?</item>\n      <item>open-input-file</item>\n      <item>open-output-file</item>\n      <item>or</item>\n      <item>output-port?</item>\n      <item>pair?</item>\n      <item>peek-char</item>\n      <item>port?</item>\n      <item>positive?</item>\n      <item>procedure?</item>\n      <item>quotient</item>\n      <item>rational?</item>\n      <item>rationalize</item>\n      <item>read-char</item>\n      <item>read</item>\n      <item>real?</item>\n      <item>real-part</item>\n      <item>remainder</item>\n      <item>reverse</item>\n      <item>round</item>\n      <item>scheme-report-environment</item>\n      <item>set-car!</item>\n      <item>set-cdr!</item>\n      <item>sin</item>\n      <item>sqrt</item>\n      <item>string-append</item>\n      <item>string-ci&gt;=?</item>\n      <item>string-ci&gt;?</item>\n      <item>string-ci=?</item>\n      <item>string-ci&lt;=?</item>\n      <item>string-ci&lt;?</item>\n      <item>string-copy</item>\n      <item>string-fill!</item>\n      <item>string&gt;=?</item>\n      <item>string&gt;?</item>\n      <item>string-&gt;list</item>\n      <item>string-&gt;number</item>\n      <item>string-&gt;symbol</item>\n      <item>string=?</item>\n      <item>string</item>\n      <item>string?</item>\n      <item>string-length</item>\n      <item>string&lt;=?</item>\n      <item>string&lt;?</item>\n      <item>string-ref</item>\n      <item>string-set!</item>\n      <item>substring</item>\n      <item>symbol-&gt;string</item>\n      <item>symbol?</item>\n      <item>syntax-rules</item>\n      <item>tan</item>\n      <item>transcript-off</item>\n      <item>transcript-on</item>\n      <item>truncate</item>\n      <item>values</item>\n      <item>vector-fill!</item>\n      <item>vector-&gt;listlist->vector</item>\n      <item>vector</item>\n      <item>vector?</item>\n      <item>vector-length</item>\n      <item>vector-ref</item>\n      <item>vector-set!</item>\n      <item>while</item>\n      <item>with-input-from-file</item>\n      <item>with-output-to-file</item>\n      <item>write-char</item>\n      <item>write</item>\n      <item>zero?</item>\n    </list>\n    <contexts>\n      <context name=\"Level0\" attribute=\"Normal\" lineEndContext=\"#stay\">\n            <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n            <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Default\" attribute=\"Normal\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\";+\\s*BEGIN.*$\" beginRegion=\"region\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\";+\\s*END.*$\" endRegion=\"region\"/>\n        <RegExpr attribute=\"Comment\" context=\"#stay\" String=\";.*$\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"#\" char1=\"!\" beginRegion=\"region\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\"/>\n        <keyword attribute=\"Definition\" context=\"function_decl\" String=\"defines\"/>\n        <keyword attribute=\"Char\" context=\"#stay\" String=\"characters\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Char\" context=\"SpecialNumber\" String=\"#[bodxei]\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"#[tf]\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n      </context>\n      <context name=\"MultiLineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"!#\\s*$\" endRegion=\"region\" column=\"0\"/>\n      </context>\n      <context name=\"SpecialNumber\" attribute=\"Normal\" fallthrough=\"true\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Decimal\" context=\"#pop\" String=\"\\d*(\\.\\d+)?\"/>\n      </context>\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Char\" context=\"#stay\" String=\"characters\"/>\n        <RegExpr attribute=\"Char\" context=\"#stay\" String=\"#\\\\.\"/>\n        <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n        <Detect2Chars attribute=\"Char\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"function_decl\" attribute=\"Function\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\s*[A-Za-z0-9-+\\&lt;\\&gt;//\\*]*\\s*\" />\n      </context>\n      <context name=\"Level1\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets2\" context=\"Level2\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets1\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level2\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets3\" context=\"Level3\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets2\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level3\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets4\" context=\"Level4\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets3\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level4\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets5\" context=\"Level5\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets4\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level5\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets6\" context=\"Level6\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets5\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n      <context name=\"Level6\" attribute=\"Normal\" lineEndContext=\"#stay\">\n           <DetectChar attribute=\"Brackets1\" context=\"Level1\" char=\"(\"/>\n           <DetectChar attribute=\"Brackets6\" context=\"#pop\" char=\")\" />\n           <IncludeRules context=\"Default\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal\"      defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Definition\"  defStyleNum=\"dsExtension\"/>\n      <itemData name=\"Operator\"    defStyleNum=\"dsOperator\"/>\n      <itemData name=\"Function\"    defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"       defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Char\"        defStyleNum=\"dsChar\"/>\n      <itemData name=\"String\"      defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n      <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n      <itemData name=\"Brackets1\"    defStyleNum=\"dsNormal\" color=\"#ff0000\" bold=\"1\"/>\n      <itemData name=\"Brackets2\"    defStyleNum=\"dsNormal\" color=\"#ff8800\" bold=\"1\"/>\n      <itemData name=\"Brackets3\"    defStyleNum=\"dsNormal\" color=\"#888800\" bold=\"1\"/>\n      <itemData name=\"Brackets4\"    defStyleNum=\"dsNormal\" color=\"#008800\" bold=\"1\"/>\n      <itemData name=\"Brackets5\"    defStyleNum=\"dsNormal\" color=\"#000088\" bold=\"1\"/>\n      <itemData name=\"Brackets6\"    defStyleNum=\"dsNormal\" color=\"#880088\" bold=\"1\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" weakDeliminator=\"-+*?!&lt;&gt;=/:#\\\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\";;\" />\n      <comment name=\"multiLine\" start=\"#!\" end=\"!#\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sci.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"scilab\" version=\"3\" kateversion=\"2.2\" section=\"Scientific\" extensions=\"*.sci;*.sce\" mimetype=\"text/x-sci\">\n  <highlighting>\n    <list name=\"Structure-keywords\">\n      <item>do</item>\n      <item>else</item>\n      <item>for</item>\n      <item>if</item>\n      <item>elseif</item>\n      <item>end</item>\n      <item>select</item>\n      <item>then</item>\n      <item>while</item>\n    </list>\n    <list name=\"Control-keywords\">\n      <item>abort</item>\n      <item>break</item>\n      <item>quit</item>\n      <item>return</item>\n      <item>resume</item>\n      <item>pause</item>\n    </list>\n    <list name=\"Function-keywords\">\n      <item>function</item>\n      <item>endfunction</item>\n    </list>\n    <list name=\"Warning-keywords\">\n      <item>error</item>\n      <item>warning</item>\n    </list>\n  <list name=\"Constants-keyword\">\n      <item>%F</item>\n      <item>%f</item>\n      <item>%T</item>\n      <item>%t</item>\n      <item>%e</item>\n      <item>%pi</item>\n      <item>%inf</item>\n      <item>%i</item>\n      <item>%z</item>\n      <item>%io</item>\n      <item>%s</item>\n      <item>%nan</item>\n      <item>$</item>\n      <item>%eps</item>\n      <item>MSDOS</item>\n    </list>\n    <list name=\"functions\">\n\t<item>zpell</item>\n\t<item>zpch2</item>\n\t<item>zpch1</item>\n\t<item>zpbutt</item>\n\t<item>zgrid</item>\n\t<item>zeros</item>\n\t<item>zeropen</item>\n\t<item>ZCROSS_f</item>\n\t<item>yulewalk</item>\n\t<item>xtitle</item>\n\t<item>xtape</item>\n\t<item>xstringl</item>\n\t<item>xstringb</item>\n\t<item>xstring</item>\n\t<item>xsetm</item>\n\t<item>xsetech</item>\n\t<item>xset</item>\n\t<item>xselect</item>\n\t<item>xsegs</item>\n\t<item>xsave</item>\n\t<item>xs2fig</item>\n\t<item>xrpoly</item>\n\t<item>xrects</item>\n\t<item>xrect</item>\n\t<item>xpolys</item>\n\t<item>xpoly</item>\n\t<item>xpause</item>\n\t<item>xnumb</item>\n\t<item>xname</item>\n\t<item>x_message_modeless</item>\n\t<item>x_message</item>\n\t<item>x_mdialog</item>\n\t<item>x_matrix</item>\n\t<item>xload</item>\n\t<item>xlfont</item>\n\t<item>xinit</item>\n\t<item>xinfo</item>\n\t<item>xgrid</item>\n\t<item>xgraduate</item>\n\t<item>xgetmouse</item>\n\t<item>xgetfile</item>\n\t<item>xgetech</item>\n\t<item>xget</item>\n\t<item>xfrect</item>\n\t<item>xfpolys</item>\n\t<item>xfpoly</item>\n\t<item>xfarcs</item>\n\t<item>xfarc</item>\n\t<item>xend</item>\n\t<item>x_dialog</item>\n\t<item>xdel</item>\n\t<item>xclip</item>\n\t<item>xclick</item>\n\t<item>xclear</item>\n\t<item>xclea</item>\n\t<item>x_choose</item>\n\t<item>x_choices</item>\n\t<item>xchange</item>\n\t<item>xbasr</item>\n\t<item>xbasimp</item>\n\t<item>xbasc</item>\n\t<item>xaxis</item>\n\t<item>xarrows</item>\n\t<item>xarcs</item>\n\t<item>xarc</item>\n\t<item>WRITEC_f</item>\n\t<item>write4b</item>\n\t<item>write</item>\n\t<item>writb</item>\n\t<item>winsid</item>\n\t<item>window</item>\n\t<item>wigner</item>\n\t<item>wiener</item>\n\t<item>whos</item>\n\t<item>who</item>\n\t<item>whereis</item>\n\t<item>whereami</item>\n\t<item>where</item>\n\t<item>what</item>\n\t<item>wfir</item>\n\t<item>WFILE_f</item>\n\t<item>wavwrite</item>\n\t<item>wavread</item>\n\t<item>warning</item>\n\t<item>WaitMsg</item>\n\t<item>varn</item>\n\t<item>varargout</item>\n\t<item>varargin</item>\n\t<item>user</item>\n\t<item>unsetmenu</item>\n\t<item>unobs</item>\n\t<item>unix_x</item>\n\t<item>unix_w</item>\n\t<item>unix_s</item>\n\t<item>unix_g</item>\n\t<item>unix</item>\n\t<item>unique</item>\n\t<item>union</item>\n\t<item>ulink</item>\n\t<item>ui_observer</item>\n\t<item>uint8</item>\n\t<item>uint32</item>\n\t<item>uint16</item>\n\t<item>uimenu</item>\n\t<item>uicontrol</item>\n\t<item>typeof</item>\n\t<item>typename</item>\n\t<item>type</item>\n\t<item>trzeros</item>\n\t<item>triu</item>\n\t<item>trisolve</item>\n\t<item>tril</item>\n\t<item>trianfml</item>\n\t<item>trfmod</item>\n\t<item>TRASH_f</item>\n\t<item>translatepaths</item>\n\t<item>trans_closure</item>\n\t<item>trans</item>\n\t<item>trace</item>\n\t<item>toeplitz</item>\n\t<item>tlist</item>\n\t<item>TK_SetVar</item>\n\t<item>TK_GetVar</item>\n\t<item>TK_EvalStr</item>\n\t<item>TK_EvalFile</item>\n\t<item>titlepage</item>\n\t<item>timer</item>\n\t<item>time_id</item>\n\t<item>TIME_f</item>\n\t<item>tilda</item>\n\t<item>tf2ss</item>\n\t<item>tf2des</item>\n\t<item>TEXT_f</item>\n\t<item>texprint</item>\n\t<item>testmatrix</item>\n\t<item>tdinit</item>\n\t<item>TCLSS_f</item>\n\t<item>tanm</item>\n\t<item>tanhm</item>\n\t<item>tanh</item>\n\t<item>tangent</item>\n\t<item>TANBLK_f</item>\n\t<item>tan</item>\n\t<item>systmat</item>\n\t<item>systems</item>\n\t<item>system</item>\n\t<item>syssize</item>\n\t<item>syslin</item>\n\t<item>sysfact-</item>\n\t<item>sysdiag</item>\n\t<item>sysconv</item>\n\t<item>symbols</item>\n\t<item>sylv</item>\n\t<item>sylm</item>\n\t<item>svplot</item>\n\t<item>svd</item>\n\t<item>sva</item>\n\t<item>supernode</item>\n\t<item>SUPER_f</item>\n\t<item>sum</item>\n\t<item>successors</item>\n\t<item>subplot</item>\n\t<item>subgraph</item>\n\t<item>subf</item>\n\t<item>strsubst</item>\n\t<item>strong_con_nodes</item>\n\t<item>strong_connex</item>\n\t<item>stripblanks</item>\n\t<item>strings</item>\n\t<item>string</item>\n\t<item>strindex</item>\n\t<item>strcat</item>\n\t<item>str2code</item>\n\t<item>STOP_f</item>\n\t<item>st_ility</item>\n\t<item>st_deviation</item>\n\t<item>startup</item>\n\t<item>star</item>\n\t<item>standard_output</item>\n\t<item>standard_origin</item>\n\t<item>standard_input</item>\n\t<item>standard_draw</item>\n\t<item>standard_define</item>\n\t<item>stacksize</item>\n\t<item>stabil</item>\n\t<item>ssrand</item>\n\t<item>ssprint</item>\n\t<item>sskf</item>\n\t<item>sscanf</item>\n\t<item>ss2tf</item>\n\t<item>ss2ss</item>\n\t<item>ss2des</item>\n\t<item>srkf</item>\n\t<item>srfaur</item>\n\t<item>squarewave</item>\n\t<item>square</item>\n\t<item>sqrtm</item>\n\t<item>sqrt</item>\n\t<item>sqroot</item>\n\t<item>spzeros</item>\n\t<item>sprintf</item>\n\t<item>sprand</item>\n\t<item>spones</item>\n\t<item>SPLIT_f</item>\n\t<item>split_edge</item>\n\t<item>splin</item>\n\t<item>spget</item>\n\t<item>speye</item>\n\t<item>specfact</item>\n\t<item>spec</item>\n\t<item>spcompack</item>\n\t<item>spchol</item>\n\t<item>sparse</item>\n\t<item>spantwo</item>\n\t<item>spanplus</item>\n\t<item>spaninter</item>\n\t<item>sp2adj</item>\n\t<item>sound</item>\n\t<item>sort</item>\n\t<item>SOM_f</item>\n\t<item>solve</item>\n\t<item>%sn</item>\n\t<item>smooth</item>\n\t<item>sm2ss</item>\n\t<item>sm2des</item>\n\t<item>slash</item>\n\t<item>size</item>\n\t<item>sinm</item>\n\t<item>sinhm</item>\n\t<item>sinh</item>\n\t<item>sincd</item>\n\t<item>sinc</item>\n\t<item>SINBLK_f</item>\n\t<item>sin</item>\n\t<item>simp_mode</item>\n\t<item>simp</item>\n\t<item>signm</item>\n\t<item>sign</item>\n\t<item>showprofile</item>\n\t<item>show_nodes</item>\n\t<item>show_graph</item>\n\t<item>show_arcs</item>\n\t<item>shortest_path</item>\n\t<item>sgrid</item>\n\t<item>Sgrayplot</item>\n\t<item>Sfgrayplot</item>\n\t<item>sfact</item>\n\t<item>setscicosvars</item>\n\t<item>setmenu</item>\n\t<item>setfield</item>\n\t<item>setbpt</item>\n\t<item>set</item>\n\t<item>sensi</item>\n\t<item>SendMsg</item>\n\t<item>semidef</item>\n\t<item>semicolumn</item>\n\t<item>semi</item>\n\t<item>SELECT_f</item>\n\t<item>secto3d</item>\n\t<item>sd2sci</item>\n\t<item>SCOPXY_f</item>\n\t<item>SCOPE_f</item>\n\t<item>scilink</item>\n\t<item>ScilabEval</item>\n\t<item>scilab</item>\n\t<item>scifunc_block</item>\n\t<item>scicos_model</item>\n\t<item>scicos_menus</item>\n\t<item>scicos_main</item>\n\t<item>scicos_link</item>\n\t<item>scicosim</item>\n\t<item>scicos_graphics</item>\n\t<item>scicos_cpr</item>\n\t<item>scicos_block</item>\n\t<item>scicos</item>\n\t<item>sciargs</item>\n\t<item>sci2map</item>\n\t<item>sci2for</item>\n\t<item>sci2exp</item>\n\t<item>schur</item>\n\t<item>scanf_conversion</item>\n\t<item>scanf</item>\n\t<item>scaling</item>\n\t<item>SAWTOOTH_f</item>\n\t<item>savewave</item>\n\t<item>save_graph</item>\n\t<item>save</item>\n\t<item>SAT_f</item>\n\t<item>SAMPLEHOLD_f</item>\n\t<item>salesman</item>\n\t<item>rtitr</item>\n\t<item>rref</item>\n\t<item>rpem</item>\n\t<item>rowshuff</item>\n\t<item>rowregul</item>\n\t<item>rowinout</item>\n\t<item>rowcompr</item>\n\t<item>rowcomp</item>\n\t<item>routh_t</item>\n\t<item>round</item>\n\t<item>rotate</item>\n\t<item>roots</item>\n\t<item>rlist</item>\n\t<item>ric_desc</item>\n\t<item>riccati</item>\n\t<item>ricc</item>\n\t<item>RFILE_f</item>\n\t<item>residu</item>\n\t<item>replot</item>\n\t<item>repfreq</item>\n\t<item>remezb</item>\n\t<item>remez</item>\n\t<item>RELAY_f</item>\n\t<item>reglin</item>\n\t<item>REGISTER_f</item>\n\t<item>recur</item>\n\t<item>real</item>\n\t<item>readmps</item>\n\t<item>READC_f</item>\n\t<item>readc_</item>\n\t<item>readb</item>\n\t<item>read4b</item>\n\t<item>read</item>\n\t<item>rdivf</item>\n\t<item>rcond</item>\n\t<item>rational</item>\n\t<item>rat</item>\n\t<item>rank</item>\n\t<item>range</item>\n\t<item>randpencil</item>\n\t<item>RAND_f</item>\n\t<item>rand</item>\n\t<item>quote</item>\n\t<item>quit</item>\n\t<item>quaskro</item>\n\t<item>quapro</item>\n\t<item>QUANT_f</item>\n\t<item>qr</item>\n\t<item>qassign</item>\n\t<item>pwd</item>\n\t<item>pvm_tidtohost</item>\n\t<item>pvm_start</item>\n\t<item>pvm_spawn_independent</item>\n\t<item>pvm_spawn</item>\n\t<item>pvm_set_timer</item>\n\t<item>pvm_send</item>\n\t<item>pvm_sci2f77</item>\n\t<item>pvm_reduce</item>\n\t<item>pvm_recv</item>\n\t<item>pvm_probe</item>\n\t<item>pvm_mytid</item>\n\t<item>pvm_lvgroup</item>\n\t<item>pvm_kill</item>\n\t<item>pvm_joingroup</item>\n\t<item>pvm_halt</item>\n\t<item>pvm_gsize</item>\n\t<item>pvm_get_timer</item>\n\t<item>pvm_getinst</item>\n\t<item>pvm_exit</item>\n\t<item>pvm_error</item>\n\t<item>pvm_delhosts</item>\n\t<item>pvmd3</item>\n\t<item>pvm_config</item>\n\t<item>pvm_bufinfo</item>\n\t<item>pvm_bcast</item>\n\t<item>pvm_addhosts</item>\n\t<item>pvm</item>\n\t<item>pspect</item>\n\t<item>psmall</item>\n\t<item>projspec</item>\n\t<item>projsl</item>\n\t<item>proj</item>\n\t<item>profile</item>\n\t<item>PROD_f</item>\n\t<item>prod</item>\n\t<item>printing</item>\n\t<item>printf_conversion</item>\n\t<item>printf</item>\n\t<item>print</item>\n\t<item>predef</item>\n\t<item>predecessors</item>\n\t<item>prbs_a</item>\n\t<item>ppol</item>\n\t<item>power</item>\n\t<item>POWBLK_f</item>\n\t<item>POSTONEG_f</item>\n\t<item>portrait</item>\n\t<item>portr3d</item>\n\t<item>poly</item>\n\t<item>polfact</item>\n\t<item>polarplot</item>\n\t<item>polar</item>\n\t<item>pol2tex</item>\n\t<item>pol2str</item>\n\t<item>pol2des</item>\n\t<item>pmodulo</item>\n\t<item>p_margin</item>\n\t<item>plzr</item>\n\t<item>plus</item>\n\t<item>plotprofile</item>\n\t<item>plot_graph</item>\n\t<item>plotframe</item>\n\t<item>plot3d3</item>\n\t<item>plot3d2</item>\n\t<item>plot3d1</item>\n\t<item>plot3d</item>\n\t<item>plot2d4</item>\n\t<item>plot2d3</item>\n\t<item>plot2d2</item>\n\t<item>plot2d1</item>\n\t<item>plot2d</item>\n\t<item>plot</item>\n\t<item>playsnd</item>\n\t<item>pipe_network</item>\n\t<item>pinv</item>\n\t<item>phc</item>\n\t<item>phasemag</item>\n\t<item>pfss</item>\n\t<item>pertrans</item>\n\t<item>perfect_match</item>\n\t<item>percent</item>\n\t<item>penlaur</item>\n\t<item>pencan</item>\n\t<item>pen2ea</item>\n\t<item>pdiv</item>\n\t<item>pbig</item>\n\t<item>path_2_nodes</item>\n\t<item>part</item>\n\t<item>parrot</item>\n\t<item>parents</item>\n\t<item>paramfplot2d</item>\n\t<item>param3d1</item>\n\t<item>param3d</item>\n\t<item>overloading</item>\n\t<item>OUT_f</item>\n\t<item>orth</item>\n\t<item>or</item>\n\t<item>optim</item>\n\t<item>ones</item>\n\t<item>oldsave</item>\n\t<item>oldload</item>\n\t<item>ode_root</item>\n\t<item>odeoptions</item>\n\t<item>ode_discrete</item>\n\t<item>odedi</item>\n\t<item>odedc</item>\n\t<item>ode</item>\n\t<item>obsvss</item>\n\t<item>obsv_mat</item>\n\t<item>obs_gram</item>\n\t<item>observer</item>\n\t<item>obscont1</item>\n\t<item>obscont</item>\n\t<item>nyquist</item>\n\t<item>numer</item>\n\t<item>null</item>\n\t<item>not</item>\n\t<item>norm</item>\n\t<item>noisegen</item>\n\t<item>nodes_degrees</item>\n\t<item>nodes_2_path</item>\n\t<item>node_number</item>\n\t<item>nnz</item>\n\t<item>nlev</item>\n\t<item>nf3d</item>\n\t<item>newfun</item>\n\t<item>newest</item>\n\t<item>netwindows</item>\n\t<item>netwindow</item>\n\t<item>netclose</item>\n\t<item>neighbors</item>\n\t<item>nehari</item>\n\t<item>NEGTOPOS_f</item>\n\t<item>narsimul</item>\n\t<item>names</item>\n\t<item>MUX_f</item>\n\t<item>mulf</item>\n\t<item>mu2lin</item>\n\t<item>mtlb_sparse</item>\n\t<item>mtlb_save</item>\n\t<item>mtlb_mode</item>\n\t<item>mtlb_load</item>\n\t<item>mtell</item>\n\t<item>msscanf</item>\n\t<item>msprintf</item>\n\t<item>mseek</item>\n\t<item>mscanf</item>\n\t<item>mrfit</item>\n\t<item>mputstr</item>\n\t<item>mputl</item>\n\t<item>mput</item>\n\t<item>mps2linpro</item>\n\t<item>mprintf</item>\n\t<item>mopen</item>\n\t<item>modulo</item>\n\t<item>mode</item>\n\t<item>mlist</item>\n\t<item>min_weight_tree</item>\n\t<item>minus</item>\n\t<item>minss</item>\n\t<item>minreal</item>\n\t<item>min_qcost_flow</item>\n\t<item>min_lcost_flow2</item>\n\t<item>min_lcost_flow1</item>\n\t<item>min_lcost_cflow</item>\n\t<item>mini</item>\n\t<item>MIN_f</item>\n\t<item>mine</item>\n\t<item>min</item>\n\t<item>milk_drop</item>\n\t<item>mgetstr</item>\n\t<item>mgetl</item>\n\t<item>mgeti</item>\n\t<item>mget</item>\n\t<item>mfscanf</item>\n\t<item>mfprintf</item>\n\t<item>mfile2sci</item>\n\t<item>mfft</item>\n\t<item>MFCLCK_f</item>\n\t<item>metanet_sync</item>\n\t<item>metanet</item>\n\t<item>mesh2d</item>\n\t<item>mese</item>\n\t<item>meof</item>\n\t<item>median</item>\n\t<item>mean</item>\n\t<item>mclose</item>\n\t<item>MCLOCK_f</item>\n\t<item>mclearerr</item>\n\t<item>m_circle</item>\n\t<item>maxi</item>\n\t<item>max_flow</item>\n\t<item>MAX_f</item>\n\t<item>max_clique</item>\n\t<item>max_cap_path</item>\n\t<item>max</item>\n\t<item>matrix</item>\n\t<item>matrices</item>\n\t<item>Matplot1</item>\n\t<item>Matplot</item>\n\t<item>mat_2_graph</item>\n\t<item>markp2ss</item>\n\t<item>mapsound</item>\n\t<item>manedit</item>\n\t<item>man</item>\n\t<item>make_graph</item>\n\t<item>macrovar</item>\n\t<item>macro</item>\n\t<item>macr2lst</item>\n\t<item>macglov</item>\n\t<item>lyap</item>\n\t<item>lusolve</item>\n\t<item>luget</item>\n\t<item>lufact</item>\n\t<item>ludel</item>\n\t<item>lu</item>\n\t<item>ltitr</item>\n\t<item>lstcat</item>\n\t<item>lsslist</item>\n\t<item>lqr</item>\n\t<item>lqg_ltr</item>\n\t<item>lqg2stan</item>\n\t<item>lqg</item>\n\t<item>lqe</item>\n\t<item>lotest</item>\n\t<item>LOOKUP_f</item>\n\t<item>logspace</item>\n\t<item>logm</item>\n\t<item>LOGBLK_f</item>\n\t<item>log2</item>\n\t<item>log10</item>\n\t<item>log</item>\n\t<item>locate</item>\n\t<item>loadwave</item>\n\t<item>load_graph</item>\n\t<item>load</item>\n\t<item>lmitool</item>\n\t<item>lmisolver</item>\n\t<item>list</item>\n\t<item>linspace</item>\n\t<item>linsolve</item>\n\t<item>linpro</item>\n\t<item>link</item>\n\t<item>linfn</item>\n\t<item>linf</item>\n\t<item>lines</item>\n\t<item>line_graph</item>\n\t<item>lindquist</item>\n\t<item>lin2mu</item>\n\t<item>lin</item>\n\t<item>lib</item>\n\t<item>lgfft</item>\n\t<item>lft</item>\n\t<item>lex_sort</item>\n\t<item>levin</item>\n\t<item>lev</item>\n\t<item>less</item>\n\t<item>leqr</item>\n\t<item>length</item>\n\t<item>legends</item>\n\t<item>left</item>\n\t<item>leastsq</item>\n\t<item>ldivf</item>\n\t<item>ldiv</item>\n\t<item>lcmdiag</item>\n\t<item>lcm</item>\n\t<item>lcf</item>\n\t<item>lattp</item>\n\t<item>lattn</item>\n\t<item>lasterror</item>\n\t<item>kroneck</item>\n\t<item>kron</item>\n\t<item>krac2</item>\n\t<item>kpure</item>\n\t<item>knapsack</item>\n\t<item>keyboard</item>\n\t<item>kernel</item>\n\t<item>karmarkar</item>\n\t<item>kalm</item>\n\t<item>%k</item>\n\t<item>jmat</item>\n\t<item>isreal</item>\n\t<item>isoview</item>\n\t<item>isnan</item>\n\t<item>isinf</item>\n\t<item>isglobal</item>\n\t<item>iserror</item>\n\t<item>isdef</item>\n\t<item>is_connex</item>\n\t<item>invsyslin</item>\n\t<item>invr</item>\n\t<item>inv_coeff</item>\n\t<item>INVBLK_f</item>\n\t<item>inv</item>\n\t<item>inttype</item>\n\t<item>inttrap</item>\n\t<item>intsplin</item>\n\t<item>INTRPLBLK_f</item>\n\t<item>INTRP2BLK_f</item>\n\t<item>intppty</item>\n\t<item>intl</item>\n\t<item>intg</item>\n\t<item>intersect</item>\n\t<item>intersci</item>\n\t<item>interpln</item>\n\t<item>interp</item>\n\t<item>integrate</item>\n\t<item>INTEGRAL_f</item>\n\t<item>intdec</item>\n\t<item>intc</item>\n\t<item>int8</item>\n\t<item>int3d</item>\n\t<item>int32</item>\n\t<item>int2d</item>\n\t<item>int16</item>\n\t<item>int</item>\n\t<item>insertion</item>\n\t<item>input</item>\n\t<item>IN_f</item>\n\t<item>imrep2ss</item>\n\t<item>impl</item>\n\t<item>im_inv</item>\n\t<item>imag</item>\n\t<item>ilib_gen_Make</item>\n\t<item>ilib_gen_loader</item>\n\t<item>ilib_gen_gateway</item>\n\t<item>ilib_for_link</item>\n\t<item>ilib_compile</item>\n\t<item>ilib_build</item>\n\t<item>iirlp</item>\n\t<item>iirgroup</item>\n\t<item>iir</item>\n\t<item>IFTHEL_f</item>\n\t<item>ieee</item>\n\t<item>iconvert</item>\n\t<item>hypermatrices</item>\n\t<item>hypermat</item>\n\t<item>htrianr</item>\n\t<item>hrmt</item>\n\t<item>householder</item>\n\t<item>hotcolormap</item>\n\t<item>host</item>\n\t<item>horner</item>\n\t<item>h_norm</item>\n\t<item>histplot</item>\n\t<item>hist3d</item>\n\t<item>h_inf_st</item>\n\t<item>h_inf</item>\n\t<item>hilb</item>\n\t<item>hex2dec</item>\n\t<item>hess</item>\n\t<item>hermit</item>\n\t<item>%helps</item>\n\t<item>help</item>\n\t<item>h_cl</item>\n\t<item>havewindow</item>\n\t<item>hat</item>\n\t<item>hankelsv</item>\n\t<item>hank</item>\n\t<item>hamilton</item>\n\t<item>HALT_f</item>\n\t<item>halt</item>\n\t<item>h2norm</item>\n\t<item>gtild</item>\n\t<item>gstacksize</item>\n\t<item>gspec</item>\n\t<item>gsort</item>\n\t<item>gschur</item>\n\t<item>group</item>\n\t<item>gr_menu</item>\n\t<item>grep</item>\n\t<item>graypolarplot</item>\n\t<item>grayplot</item>\n\t<item>graycolormap</item>\n\t<item>graph_union</item>\n\t<item>graph_sum</item>\n\t<item>graph_simp</item>\n\t<item>graph_power</item>\n\t<item>graph-list</item>\n\t<item>Graphics</item>\n\t<item>graph_diameter</item>\n\t<item>graph_complement</item>\n\t<item>graph_center</item>\n\t<item>graph_2_mat</item>\n\t<item>grand</item>\n\t<item>graduate</item>\n\t<item>gpeche</item>\n\t<item>g_margin</item>\n\t<item>G_make</item>\n\t<item>global</item>\n\t<item>glist</item>\n\t<item>glever</item>\n\t<item>givens</item>\n\t<item>girth</item>\n\t<item>gfrancis</item>\n\t<item>gfare</item>\n\t<item>getversion</item>\n\t<item>getvalue</item>\n\t<item>getsymbol</item>\n\t<item>getscicosvars</item>\n\t<item>getpid</item>\n\t<item>GetMsg</item>\n\t<item>getmark</item>\n\t<item>getlinestyle</item>\n\t<item>getio</item>\n\t<item>get_function_path</item>\n\t<item>getfont</item>\n\t<item>getfield</item>\n\t<item>getf</item>\n\t<item>getenv</item>\n\t<item>getdate</item>\n\t<item>getd</item>\n\t<item>getcwd</item>\n\t<item>getcolor</item>\n\t<item>getblocklabel</item>\n\t<item>get</item>\n\t<item>geom3d</item>\n\t<item>GENSQR_f</item>\n\t<item>GENSIN_f</item>\n\t<item>gen_net</item>\n\t<item>genmarkov</item>\n\t<item>genlib</item>\n\t<item>genfac3d</item>\n\t<item>GENERIC_f</item>\n\t<item>GENERAL_f</item>\n\t<item>gcf</item>\n\t<item>gcd</item>\n\t<item>gcare</item>\n\t<item>gammaln</item>\n\t<item>gamma</item>\n\t<item>gamitg</item>\n\t<item>gainplot</item>\n\t<item>GAIN_f</item>\n\t<item>GAINBLK_f</item>\n\t<item>fusee</item>\n\t<item>funptr</item>\n\t<item>funcprot</item>\n\t<item>fun2string</item>\n\t<item>fullrfk</item>\n\t<item>fullrf</item>\n\t<item>full</item>\n\t<item>fstair</item>\n\t<item>fstabst</item>\n\t<item>fspecg</item>\n\t<item>fsolve</item>\n\t<item>fsfirlin</item>\n\t<item>fscanfMat</item>\n\t<item>fscanf</item>\n\t<item>frmag</item>\n\t<item>frfit</item>\n\t<item>frexp</item>\n\t<item>freson</item>\n\t<item>freq</item>\n\t<item>frep2tf</item>\n\t<item>fprintfMat</item>\n\t<item>fprintf</item>\n\t<item>fplot3d1</item>\n\t<item>fplot3d</item>\n\t<item>fplot2d</item>\n\t<item>fourplan</item>\n\t<item>fort</item>\n\t<item>formatman</item>\n\t<item>format</item>\n\t<item>flts</item>\n\t<item>floor</item>\n\t<item>fix</item>\n\t<item>fit_dat</item>\n\t<item>find_path</item>\n\t<item>findobj</item>\n\t<item>findm</item>\n\t<item>find_freq</item>\n\t<item>find</item>\n\t<item>filter</item>\n\t<item>fileinfo</item>\n\t<item>file</item>\n\t<item>figure</item>\n\t<item>fgrayplot</item>\n\t<item>fft</item>\n\t<item>ffilt</item>\n\t<item>feval</item>\n\t<item>feedback</item>\n\t<item>fec</item>\n\t<item>fcontour2d</item>\n\t<item>fcontour</item>\n\t<item>fchamp</item>\n\t<item>faurre</item>\n\t<item>factors</item>\n\t<item>fac3d</item>\n\t<item>eye</item>\n\t<item>extraction</item>\n\t<item>external</item>\n\t<item>expm</item>\n\t<item>EXPBLK_f</item>\n\t<item>exp</item>\n\t<item>exit</item>\n\t<item>exists</item>\n\t<item>execstr</item>\n\t<item>ExecScilab</item>\n\t<item>ExeclScilab</item>\n\t<item>ExecAppli</item>\n\t<item>exec</item>\n\t<item>excel2sci</item>\n\t<item>Example</item>\n\t<item>EVTGEN_f</item>\n\t<item>EVTDLY_f</item>\n\t<item>evstr</item>\n\t<item>EVENTSCOPE_f</item>\n\t<item>evans</item>\n\t<item>eval3dp</item>\n\t<item>eval3d</item>\n\t<item>eval</item>\n\t<item>error</item>\n\t<item>errclear</item>\n\t<item>errcatch</item>\n\t<item>errbar</item>\n\t<item>erfcx</item>\n\t<item>erfc</item>\n\t<item>erf</item>\n\t<item>ereduc</item>\n\t<item>equil1</item>\n\t<item>equil</item>\n\t<item>equal</item>\n\t<item>eqiir</item>\n\t<item>eqfir</item>\n\t<item>emptystr</item>\n\t<item>empty</item>\n\t<item>ell1mag</item>\n\t<item>eigenmarkov</item>\n\t<item>edit_curv</item>\n\t<item>edit</item>\n\t<item>edge_number</item>\n\t<item>dtsi</item>\n\t<item>dt_ility</item>\n\t<item>dsimul</item>\n\t<item>dscr</item>\n\t<item>driver</item>\n\t<item>drawaxis</item>\n\t<item>dragrect</item>\n\t<item>double</item>\n\t<item>dot</item>\n\t<item>DLSS_f</item>\n\t<item>DLR_f</item>\n\t<item>DLRADAPT_f</item>\n\t<item>dlgamma</item>\n\t<item>dispfile</item>\n\t<item>dispbpt</item>\n\t<item>disp</item>\n\t<item>diophant</item>\n\t<item>diary</item>\n\t<item>diag</item>\n\t<item>dhnorm</item>\n\t<item>dft</item>\n\t<item>detr</item>\n\t<item>determ</item>\n\t<item>det</item>\n\t<item>DestroyLink</item>\n\t<item>des2tf</item>\n\t<item>des2ss</item>\n\t<item>derivative-</item>\n\t<item>derivat</item>\n\t<item>denom</item>\n\t<item>DEMUX_f</item>\n\t<item>demos</item>\n\t<item>delmenu</item>\n\t<item>delip</item>\n\t<item>delete_nodes</item>\n\t<item>delete_arcs</item>\n\t<item>delbpt</item>\n\t<item>DELAYV_f</item>\n\t<item>DELAY_f</item>\n\t<item>degree</item>\n\t<item>deff</item>\n\t<item>dec2hex</item>\n\t<item>debug</item>\n\t<item>ddp</item>\n\t<item>dcf</item>\n\t<item>dbphi</item>\n\t<item>date</item>\n\t<item>datafit</item>\n\t<item>dassl</item>\n\t<item>dasrt</item>\n\t<item>czt</item>\n\t<item>cycle_basis</item>\n\t<item>CURV_f</item>\n\t<item>curblock</item>\n\t<item>cumsum</item>\n\t<item>cumprod</item>\n\t<item>ctr_gram</item>\n\t<item>cspect</item>\n\t<item>csim</item>\n\t<item>CreateLink</item>\n\t<item>cothm</item>\n\t<item>coth</item>\n\t<item>cotg</item>\n\t<item>cosm</item>\n\t<item>coshm</item>\n\t<item>cosh</item>\n\t<item>COSBLK_f</item>\n\t<item>cos</item>\n\t<item>corr</item>\n\t<item>copfac</item>\n\t<item>convstr</item>\n\t<item>convol</item>\n\t<item>convex_hull</item>\n\t<item>contrss</item>\n\t<item>contract_edge</item>\n\t<item>contr</item>\n\t<item>contourf</item>\n\t<item>contour2di</item>\n\t<item>contour2d</item>\n\t<item>contour</item>\n\t<item>cont_mat</item>\n\t<item>cont_frm</item>\n\t<item>CONST_f</item>\n\t<item>con_nodes</item>\n\t<item>connex</item>\n\t<item>conj</item>\n\t<item>cond</item>\n\t<item>companion</item>\n\t<item>comp</item>\n\t<item>Communications</item>\n\t<item>colregul</item>\n\t<item>colormap</item>\n\t<item>colon</item>\n\t<item>colnew</item>\n\t<item>colinout</item>\n\t<item>colcompr</item>\n\t<item>colcomp</item>\n\t<item>coffg</item>\n\t<item>coff</item>\n\t<item>coeff</item>\n\t<item>code2str</item>\n\t<item>cmndred</item>\n\t<item>cmb_lin</item>\n\t<item>CLSS_f</item>\n\t<item>cls2dls</item>\n\t<item>CLR_f</item>\n\t<item>close</item>\n\t<item>CLOCK_f</item>\n\t<item>CLKSPLIT_f</item>\n\t<item>CLKSOMV_f</item>\n\t<item>CLKSOM_f</item>\n\t<item>CLKOUTV_f</item>\n\t<item>CLKOUT_f</item>\n\t<item>CLKINV_f</item>\n\t<item>CLKIN_f</item>\n\t<item>c_link</item>\n\t<item>CLINDUMMY_f</item>\n\t<item>clearglobal</item>\n\t<item>clearfun</item>\n\t<item>clear</item>\n\t<item>clean</item>\n\t<item>classmarkov</item>\n\t<item>circuit</item>\n\t<item>chsolve</item>\n\t<item>chol</item>\n\t<item>chfact</item>\n\t<item>chepol</item>\n\t<item>check_graph</item>\n\t<item>cheb2mag</item>\n\t<item>cheb1mag</item>\n\t<item>chdir</item>\n\t<item>chart</item>\n\t<item>champ1</item>\n\t<item>champ</item>\n\t<item>chaintest</item>\n\t<item>chain_struct</item>\n\t<item>cepstrum</item>\n\t<item>ceil</item>\n\t<item>cdft</item>\n\t<item>cdfpoi</item>\n\t<item>cdfnor</item>\n\t<item>cdfnbn</item>\n\t<item>cdfgam</item>\n\t<item>cdffnc</item>\n\t<item>cdff</item>\n\t<item>cdfchn</item>\n\t<item>cdfchi</item>\n\t<item>cdfbin</item>\n\t<item>cdfbet</item>\n\t<item>ccontrg</item>\n\t<item>casc</item>\n\t<item>canon</item>\n\t<item>call</item>\n\t<item>calfrq</item>\n\t<item>calerf</item>\n\t<item>cainv</item>\n\t<item>bvode</item>\n\t<item>buttmag</item>\n\t<item>bstap</item>\n\t<item>boucle</item>\n\t<item>boolean</item>\n\t<item>bool2s</item>\n\t<item>bode</item>\n\t<item>bloc2ss</item>\n\t<item>bloc2exp</item>\n\t<item>black</item>\n\t<item>binomial</item>\n\t<item>bilin</item>\n\t<item>BIGSOM_f</item>\n\t<item>bifish</item>\n\t<item>bezout</item>\n\t<item>best_match</item>\n\t<item>bessely</item>\n\t<item>besselk</item>\n\t<item>besselj</item>\n\t<item>besseli</item>\n\t<item>bdiag</item>\n\t<item>bandwr</item>\n\t<item>balreal</item>\n\t<item>balanc</item>\n\t<item>backslash</item>\n\t<item>auwrite</item>\n\t<item>auread</item>\n\t<item>augment</item>\n\t<item>atanm</item>\n\t<item>atanhm</item>\n\t<item>atanh</item>\n\t<item>atan</item>\n\t<item>%asn</item>\n\t<item>asinm</item>\n\t<item>asinhm</item>\n\t<item>asinh</item>\n\t<item>asin</item>\n\t<item>ascii</item>\n\t<item>articul</item>\n\t<item>artest</item>\n\t<item>arsimul</item>\n\t<item>armax1</item>\n\t<item>armax</item>\n\t<item>armac</item>\n\t<item>arma2p</item>\n\t<item>arma</item>\n\t<item>arl2</item>\n\t<item>arhnk</item>\n\t<item>argn</item>\n\t<item>arc_number</item>\n\t<item>arc_graph</item>\n\t<item>apropos</item>\n\t<item>ans</item>\n\t<item>ANIMXY_f</item>\n\t<item>ANDLOG_f</item>\n\t<item>and</item>\n\t<item>analyze</item>\n\t<item>analpf</item>\n\t<item>amell</item>\n\t<item>alufunctions</item>\n\t<item>AFFICH_f</item>\n\t<item>aff2ab</item>\n\t<item>adj_lists</item>\n\t<item>adj2sp</item>\n\t<item>add_node</item>\n\t<item>addmenu</item>\n\t<item>addinter</item>\n\t<item>addf</item>\n\t<item>add_edge</item>\n\t<item>addcolor</item>\n\t<item>AdCommunications</item>\n\t<item>acosm</item>\n\t<item>acoshm</item>\n\t<item>acosh</item>\n\t<item>acos</item>\n\t<item>ABSBLK_f</item>\n\t<item>abs</item>\n\t<item>abinv</item>\n\t<item>abcd</item>\n    </list>\n    <contexts>\n      <context name=\"main\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Structure-keywords\" context=\"#stay\" String=\"Structure-keywords\"/>\n        <keyword attribute=\"Control-keywords\" context=\"#stay\" String=\"Control-keywords\"/>\n        <keyword attribute=\"Function-keywords\" context=\"#stay\" String=\"Function-keywords\"/>\n        <keyword attribute=\"Warning-keywords\" context=\"#stay\" String=\"Warning-keywords\"/>\n        <keyword attribute=\"Constants-keyword\" context=\"#stay\" String=\"Constants-keyword\"/>\n        <keyword attribute=\"functions\" context=\"#stay\" String=\"functions\"/>\n        <Float attribute = \"Float\" context=\"#stay\"/>\n        <Int attribute = \"Decimal\" context=\"#stay\"/>\n        <RegExpr String= \"//.*$\" attribute = \"Comment\" context=\"#stay\"/>\n        <RangeDetect char = \"&quot;\" char1 = \"&quot;\" attribute = \"String\" context=\"#stay\"/>\n     </context>\n   </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Structure-keywords\"  defStyleNum=\"dsNormal\" color=\"#000080\" selColor=\"#ffff00\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Control-keywords\" defStyleNum=\"dsNormal\" color=\"#800000\" selColor=\"#ff0000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Function-keywords\" defStyleNum=\"dsFunction\" color=\"#008000\" selColor=\"#ffff00\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Warning-keywords\" defStyleNum=\"dsNormal\" color=\"#ff0000\" selColor=\"#ff0000\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Constants-keyword\" defStyleNum=\"dsNormal\" color=\"#008080\" selColor=\"#00ffff\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"functions\" defStyleNum=\"dsFunction\" color=\"#0000ff\" selColor=\"#00ff00\" bold=\"1\" italic=\"1\"/>\n      <itemData name=\"Decimal\" defStyleNum = \"dsDecVal\"/>\n      <itemData name=\"Float\" defStyleNum = \"dsFloat\"/>\n      <itemData name=\"Comment\" defStyleNum = \"dsComment\"/>\n      <itemData name=\"String\" defStyleNum = \"dsString\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"%$\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/scss.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!-- https://www.w3.org/TR/CSS22/syndata.html#tokenization -->\n  <!ENTITY nmstart \"[_a-zA-Z]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n  <!ENTITY nmchar  \"[_a-zA-Z0-9-]|(\\\\[0-9a-fA-F]{1,6})|(\\\\[^\\n\\r\\f0-9a-fA-F])\">\n]>\n\n<!--\n\nKate SCSS syntax highlighting definition\n\nChangelog:\n\n- Version 7, by Jonathan Poelen\n- fix tag followed by a pseudo-class in a nested rule (@media, ...)\n- fix constraint in a rule\n- fix Kate auto-completion for properties and rules\n- fix highlighting of pseudoclass/pseudoelement in a sub-rule\n- New highlighting categories: Keyword, Operator, Separator Symbol, SpecialChar, Value Keyword, Color, Number, Unit, Selector Tag, Placeholder Selector\n\n- Version 4, by Guo Yunhe guoyunhebrave@gmail.com\n- Remake for complex SCSS syntax, avoid errors\n\n- Version 2.06, by Guo Yunhe\n- Add all W3C Work Draft properties, inherit rules from css.xml\n\n- Version 1.2.03.6, by Mte90\n- Css3 Tag\n\n- Version 1.2.03.1, by Tijn Schuurmans\n- Added basic support for \"@include mixin();\"\n- Clean the indentation to use 4 spaces everywhere\n\n-->\n\n<language name=\"SCSS\" version=\"11\" kateversion=\"5.53\" section=\"Markup\" extensions=\"*.scss\" indenter=\"cstyle\" mimetype=\"text/css\" author=\"Wilbert Berendsen (wilbert@kde.nl)\" license=\"LGPL\" priority=\"10\">\n\n    <highlighting>\n        <list name=\"properties\">\n            <include>properties##CSS</include>\n        </list>\n\n        <list name=\"sub-properties\">\n            <item>adjust</item>\n            <item>after</item>\n            <item>align-all</item>\n            <item>align</item>\n            <item>align-last</item>\n            <item>alternates</item>\n            <item>anchor</item>\n            <item>area</item>\n            <item>areas</item>\n            <item>attachment</item>\n            <item>auto-columns</item>\n            <item>auto-flow</item>\n            <item>auto-rows</item>\n            <item>baseline</item>\n            <item>basis</item>\n            <item>before</item>\n            <item>bidi</item>\n            <item>blend-mode</item>\n            <item>block-color</item>\n            <item>block-end-color</item>\n            <item>block-end</item>\n            <item>block-end-style</item>\n            <item>block-end-width</item>\n            <item>block</item>\n            <item>block-start-color</item>\n            <item>block-start</item>\n            <item>block-start-style</item>\n            <item>block-start-width</item>\n            <item>block-style</item>\n            <item>block-width</item>\n            <item>border-mode</item>\n            <item>border-outset</item>\n            <item>border-repeat</item>\n            <item>border-slice</item>\n            <item>border-source</item>\n            <item>bottom-color</item>\n            <item>bottom-left-radius</item>\n            <item>bottom-right-radius</item>\n            <item>bottom-style</item>\n            <item>bottom-width</item>\n            <item>boundary</item>\n            <item>box</item>\n            <item>break</item>\n            <item>caps</item>\n            <item>cells</item>\n            <item>change</item>\n            <item>character</item>\n            <item>chars</item>\n            <item>collapse</item>\n            <item>column-end</item>\n            <item>column</item>\n            <item>column-start</item>\n            <item>combine-upright</item>\n            <item>composite</item>\n            <item>count</item>\n            <item>decoration-break</item>\n            <item>decoration-color</item>\n            <item>decoration</item>\n            <item>decoration-line</item>\n            <item>decoration-skip-ink</item>\n            <item>decoration-skip</item>\n            <item>decoration-style</item>\n            <item>decoration-width</item>\n            <item>defer</item>\n            <item>delay</item>\n            <item>distance</item>\n            <item>down</item>\n            <item>duration</item>\n            <item>during</item>\n            <item>east-asian</item>\n            <item>emoji</item>\n            <item>emphasis-color</item>\n            <item>emphasis</item>\n            <item>emphasis-position</item>\n            <item>emphasis-skip</item>\n            <item>emphasis-style</item>\n            <item>end-color</item>\n            <item>end</item>\n            <item>end-style</item>\n            <item>end-width</item>\n            <item>events</item>\n            <item>family</item>\n            <item>feature-settings</item>\n            <item>fill-mode</item>\n            <item>filters</item>\n            <item>fit</item>\n            <item>flow</item>\n            <item>fragment</item>\n            <item>from</item>\n            <item>function</item>\n            <item>grow</item>\n            <item>gutter</item>\n            <item>header</item>\n            <item>height-step</item>\n            <item>image</item>\n            <item>image-outset</item>\n            <item>image-repeat</item>\n            <item>image-slice</item>\n            <item>image-source</item>\n            <item>image-threshold</item>\n            <item>image-transform</item>\n            <item>image-width</item>\n            <item>increment</item>\n            <item>indent</item>\n            <item>inline-color</item>\n            <item>inline-end-color</item>\n            <item>inline-end</item>\n            <item>inline-end-style</item>\n            <item>inline-end-width</item>\n            <item>inline</item>\n            <item>inline-start-color</item>\n            <item>inline-start</item>\n            <item>inline-start-style</item>\n            <item>inline-start-width</item>\n            <item>inline-style</item>\n            <item>inline-width</item>\n            <item>insert</item>\n            <item>inside</item>\n            <item>interpolation-filters</item>\n            <item>into</item>\n            <item>items</item>\n            <item>iteration-count</item>\n            <item>justify</item>\n            <item>kerning</item>\n            <item>knockout-left</item>\n            <item>knockout-right</item>\n            <item>label</item>\n            <item>language-override</item>\n            <item>last</item>\n            <item>layout</item>\n            <item>left-color</item>\n            <item>left-radius</item>\n            <item>left-style</item>\n            <item>left-width</item>\n            <item>letter-align</item>\n            <item>letter</item>\n            <item>letter-wrap</item>\n            <item>level</item>\n            <item>ligatures</item>\n            <item>limit-chars</item>\n            <item>limit-last</item>\n            <item>limit-lines</item>\n            <item>limit-zone</item>\n            <item>line</item>\n            <item>lines</item>\n            <item>loop</item>\n            <item>max-size</item>\n            <item>merge</item>\n            <item>mid</item>\n            <item>min-size</item>\n            <item>mode</item>\n            <item>name</item>\n            <item>numeral</item>\n            <item>numeric</item>\n            <item>optical-sizing</item>\n            <item>orientation</item>\n            <item>orientation-vertical</item>\n            <item>origin</item>\n            <item>outset</item>\n            <item>outside</item>\n            <item>override</item>\n            <item>palette</item>\n            <item>path</item>\n            <item>pattern</item>\n            <item>play-state</item>\n            <item>point</item>\n            <item>policy</item>\n            <item>property</item>\n            <item>punctuation</item>\n            <item>radius</item>\n            <item>range</item>\n            <item>rate</item>\n            <item>reference</item>\n            <item>rendering</item>\n            <item>repeat</item>\n            <item>reset</item>\n            <item>resolution</item>\n            <item>right-color</item>\n            <item>right-radius</item>\n            <item>right-style</item>\n            <item>right-width</item>\n            <item>rotate</item>\n            <item>round</item>\n            <item>row-end</item>\n            <item>row</item>\n            <item>rows</item>\n            <item>row-start</item>\n            <item>rule-color</item>\n            <item>rule</item>\n            <item>rule-style</item>\n            <item>rule-width</item>\n            <item>segment</item>\n            <item>select</item>\n            <item>self</item>\n            <item>set</item>\n            <item>settings</item>\n            <item>shadow</item>\n            <item>shape</item>\n            <item>shift</item>\n            <item>shrink</item>\n            <item>side</item>\n            <item>size-adjust</item>\n            <item>sizing</item>\n            <item>skip-ink</item>\n            <item>skip</item>\n            <item>slice</item>\n            <item>snap</item>\n            <item>source</item>\n            <item>space-collapse</item>\n            <item>space</item>\n            <item>space-trim</item>\n            <item>spacing</item>\n            <item>span</item>\n            <item>speed</item>\n            <item>start-color</item>\n            <item>start</item>\n            <item>start-style</item>\n            <item>start-width</item>\n            <item>state</item>\n            <item>step-align</item>\n            <item>step-insert</item>\n            <item>step</item>\n            <item>step-round</item>\n            <item>step-size</item>\n            <item>stretch</item>\n            <item>style-image</item>\n            <item>style</item>\n            <item>style-position</item>\n            <item>style-type</item>\n            <item>synthesis</item>\n            <item>template-areas</item>\n            <item>template-columns</item>\n            <item>template</item>\n            <item>template-rows</item>\n            <item>threshold</item>\n            <item>through</item>\n            <item>timing-function</item>\n            <item>top-color</item>\n            <item>top-left-radius</item>\n            <item>top-right-radius</item>\n            <item>top-style</item>\n            <item>top-width</item>\n            <item>trim</item>\n            <item>type</item>\n            <item>underline-offset</item>\n            <item>underline-position</item>\n            <item>up</item>\n            <item>upright</item>\n            <item>variant-alternates</item>\n            <item>variant-caps</item>\n            <item>variant-east-asian</item>\n            <item>variant-emoji</item>\n            <item>variant</item>\n            <item>variant-ligatures</item>\n            <item>variant-numeric</item>\n            <item>variant-position</item>\n            <item>variation-settings</item>\n            <item>vertical</item>\n            <item>weight</item>\n            <item>wrap</item>\n            <item>x</item>\n            <item>y</item>\n            <item>zone</item>\n        </list>\n\n        <list name=\"special values\">\n            <item>true</item>\n            <item>false</item>\n            <item>null</item>\n        </list>\n\n        <list name=\"value keywords\">\n            <include>value keywords##CSS</include>\n        </list>\n\n        <list name=\"values\">\n            <include>values##CSS</include>\n        </list>\n\n        <list name=\"colors\">\n            <include>colors##CSS</include>\n        </list>\n\n        <list name=\"functions\">\n            <include>functions##CSS</include>\n\n            <!-- sass -->\n            <item>red</item>\n            <item>green</item>\n            <item>blue</item>\n            <item>mix</item>\n            <item>hue</item>\n            <item>saturation</item>\n            <item>lightness</item>\n            <item>adjust-hue</item>\n            <item>lighten</item>\n            <item>darken</item>\n            <item>saturate</item>\n            <item>desaturate</item>\n            <item>grayscale</item>\n            <item>complement</item>\n            <item>invert</item>\n            <item>alpha</item>\n            <item>opacify</item>\n            <item>transparentize</item>\n            <item>adjust-color</item>\n            <item>scale-color</item>\n            <item>change-color</item>\n            <item>ie-hex-str</item>\n            <item>unquote</item>\n            <item>quote</item>\n            <item>str-length</item>\n            <item>str-insert</item>\n            <item>str-index</item>\n            <item>str-slice</item>\n            <item>to-upper-case</item>\n            <item>to-lower-case</item>\n            <item>percentage</item>\n            <item>round</item>\n            <item>ceil</item>\n            <item>floor</item>\n            <item>abs</item>\n            <item>min</item>\n            <item>max</item>\n            <item>random</item>\n            <item>length</item>\n            <item>nth</item>\n            <item>set-nth</item>\n            <item>join</item>\n            <item>append</item>\n            <item>zip</item>\n            <item>index</item>\n            <item>list-separator</item>\n            <item>is-bracketed</item>\n            <item>map-get</item>\n            <item>map-merge</item>\n            <item>map-remove</item>\n            <item>map-keys</item>\n            <item>map-values</item>\n            <item>map-has-key</item>\n            <item>keywords</item>\n            <item>selector-nest</item>\n            <item>selector-append</item>\n            <item>selector-extend</item>\n            <item>selector-replace</item>\n            <item>selector-unify</item>\n            <item>is-superselector</item>\n            <item>simple-selectors</item>\n            <item>selector-parse</item>\n            <item>feature-exists</item>\n            <item>variable-exists</item>\n            <item>global-variable-exists</item>\n            <item>function-exists</item>\n            <item>mixin-exists</item>\n            <item>content-exists</item>\n            <item>inspect</item>\n            <item>type-of</item>\n            <item>unit</item>\n            <item>unitless</item>\n            <item>comparable</item>\n            <item>call</item>\n            <item>get-function</item>\n            <item>if</item>\n            <item>unique-id</item>\n        </list>\n\n        <list name=\"medias\">\n            <include>medias##CSS</include>\n        </list>\n\n        <!-- prefixed by :: -->\n        <list name=\"pseudoelements\">\n            <include>pseudoelements##CSS</include>\n        </list>\n\n        <!-- prefixed by : -->\n        <list name=\"pseudoclasses\">\n            <include>pseudoclasses##CSS</include>\n        </list>\n\n        <list name=\"pseudoclass-selector\">\n            <include>pseudoclass-selector##CSS</include>\n        </list>\n\n        <list name=\"pseudoclasses-@page\">\n            <include>pseudoclasses-@page##CSS</include>\n        </list>\n\n        <list name=\"at-rules\">\n            <include>at-rules##CSS</include>\n\n            <!-- scss -->\n            <item>@debug</item>\n            <item>@warn</item>\n            <item>@error</item>\n            <item>@content</item>\n            <item>@return</item>\n        </list>\n\n        <list name=\"nested at-rules\">\n            <include>nested at-rules##CSS</include>\n\n            <!-- scss -->\n            <item>@at-rule</item>\n            <item>@for</item>\n            <item>@each</item>\n            <item>@while</item>\n        </list>\n\n        <list name=\"inline and nested at-rules\">\n            <!-- CSS: inline -->\n            <!-- SCSS: inline or block -->\n            <item>@include</item>\n        </list>\n\n        <list name=\"@extend\">\n            <item>@extend</item>\n        </list>\n\n        <list name=\"@if\">\n            <item>@if</item>\n        </list>\n\n        <list name=\"@else\">\n            <item>@else</item>\n        </list>\n\n        <list name=\"@mixin\">\n            <item>@mixin</item>\n            <item>@function</item>\n        </list>\n\n        <list name=\"@viewport\">\n            <item>@viewport</item>\n        </list>\n\n        <list name=\"within-@viewport\">\n            <include>within-@viewport##CSS</include>\n        </list>\n\n        <list name=\"@page\">\n            <item>@page</item>\n        </list>\n\n        <list name=\"within-@page\">\n            <include>within-@page##CSS</include>\n        </list>\n\n        <list name=\"@font-face\">\n            <item>@font-face</item>\n        </list>\n\n        <list name=\"within-@font-face\">\n            <include>within-@font-face##CSS</include>\n        </list>\n\n        <list name=\"@keyframes\">\n            <item>@keyframes</item>\n        </list>\n\n        <list name=\"within-@keyframes\">\n            <include>within-@keyframes##CSS</include>\n        </list>\n\n        <list name=\"media operators\">\n            <include>media operators##CSS</include>\n        </list>\n\n        <list name=\"operators\">\n            <item>and</item>\n            <item>or</item>\n            <item>not</item>\n        </list>\n\n        <list name=\"annotations\">\n            <item>important</item>\n            <item>default</item>\n            <item>global</item>\n        </list>\n\n        <contexts>\n            <context name=\"Base\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <DetectChar attribute=\"At Rule\" context=\"SelectAtRule\" char=\"@\" lookAhead=\"true\" />\n                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type=\"search\"] -->\n                <DetectChar attribute=\"Selector Attribute\" context=\"SelectorAttr\" char=\"[\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"IsSelectors\" char=\",\" />\n                <AnyChar attribute=\"Operator\" context=\"IsSelectors\" String=\"*>+~|&amp;\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" String=\":(?=[a-z:])\" />\n                <RegExpr attribute=\"Selector Id\" context=\"IsSelectors\" String=\"#[-]?(&nmstart;)(&nmchar;)*\" />\n                <RegExpr attribute=\"Selector Class\" context=\"IsSelectors\" String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\" />\n                <RegExpr attribute=\"Placeholder Selector\" context=\"IsSelectors\" String=\"%[_a-zA-Z][_a-zA-Z\\-]*\" />\n                <RegExpr attribute=\"Selector Tag\" context=\"IsSelectors\" String=\"[-]?(&nmstart;)(&nmchar;)*(?=\\s|:?[#.&amp;{[*>+~|,]|:[a-z:])\" />\n                <RegExpr attribute=\"Variable\" context=\"VariableDefine\" String=\"\\$[a-zA-Z0-9\\-_]+(?=\\s*:)\" />\n                <Detect2Chars attribute=\"Interpolation\" context=\"InterpolationMaybeProperty\" char=\"#\" char1=\"{\" />\n            </context>\n\n            <context name=\"IsSelectors\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <DetectChar attribute=\"At Rule\" context=\"#pop!SelectAtRule\" char=\"@\" lookAhead=\"true\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Error\" context=\"#pop\" char=\";\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"*>+~|&amp;\" />\n                <IncludeRules context=\"SelectorTypes\" />\n            </context>\n\n            <context name=\"FindSelector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <AnyChar attribute=\"Error\" context=\"#stay\" String=\",&amp;\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"*>+~|\" />\n                <IncludeRules context=\"SelectorTypes\" />\n            </context>\n\n            <context name=\"SelectorTypes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <!-- find selectors // .class #id :hover :nth-child(2n+1) [type=\"search\"] -->\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" char=\":\" />\n                <DetectChar attribute=\"Selector Attribute\" context=\"SelectorAttr\" char=\"[\" />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Selector Id\" context=\"#stay\" String=\"#[-]?(&nmstart;)(&nmchar;)*\" />\n                <RegExpr attribute=\"Selector Class\" context=\"#stay\" String=\"\\.([a-zA-Z0-9\\-_]|[\\x80-\\xFF]|\\\\[0-9A-Fa-f]{1,6})*\" />\n                <RegExpr attribute=\"Placeholder Selector\" context=\"#stay\" String=\"%[_a-zA-Z][_a-zA-Z\\-]*\" />\n                <RegExpr attribute=\"Selector Tag\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*\" />\n                <Detect2Chars attribute=\"Interpolation\" context=\"Interpolation\" char=\"#\" char1=\"{\" />\n            </context>\n\n            <context name=\"VariableDefine\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Normal Text\" context=\"RuleParameters\" char=\":\" />\n            </context>\n\n            <context name=\"Interpolation\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Interpolation\" context=\"#pop\" char=\"}\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"InterpolationMaybeProperty\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Interpolation\" context=\"#pop!MaybeProperty\" char=\"}\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"MaybeProperty\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Normal Text\" context=\"Rule\" String=\":($|[/{\\s0-9$&quot;'])\" lookAhead=\"true\"/>\n            </context>\n\n\n            <!-- find functions // rgba(255,255,255,0.75) -->\n            <context name=\"FindFunctions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"Function\" context=\"Function\" String=\"[a-z\\-]{2,}\\(\" lookAhead=\"true\" />\n            </context>\n\n            <!-- find values //  10px 12pt 2.5em 1rem 75% #ffcc99 red solid -->\n            <context name=\"FindValues\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Annotation\" context=\"Annotation\" char=\"!\" />\n                <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\" />\n                <keyword attribute=\"Value Keyword\" context=\"#stay\" String=\"value keywords\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"values\" />\n                <keyword attribute=\"Color\" context=\"#stay\" String=\"colors\" />\n                <RegExpr attribute=\"Number\" context=\"FindUnits\" String=\"([0-9]+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?\" />\n                <RegExpr attribute=\"Color\" context=\"#stay\" String=\"#([0-9A-Fa-f]{3,4}){1,2}\\b\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z0-9\\-_]+\" />\n                <keyword attribute=\"Value Keyword\" context=\"#stay\" String=\"special values\" />\n                <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[-]?(&nmstart;)(&nmchar;)*\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"*/+%-\" />\n                <Detect2Chars attribute=\"Interpolation\" context=\"Interpolation\" char=\"#\" char1=\"{\" />\n            </context>\n\n            <context name=\"Annotation\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <keyword attribute=\"Annotation\" context=\"#pop\" String=\"annotations\" />\n            </context>\n\n            <context name=\"FindUnits\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <RegExpr attribute=\"Unit\" context=\"#pop\" String=\"(%|(em|ex|cap|ch|ic|rem|lh|rlh|vw|vh|vi|vb|vmin|vmax|cm|mm|Q|in|pc|pt|px|deg|rad|grad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|x)\\b)\" />\n            </context>\n\n            <!-- find strings // \"some words\" 'some words' -->\n            <context name=\"FindStrings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"StringDQ\" char=\"&quot;\" />\n                <DetectChar attribute=\"String\" context=\"StringSQ\" char=\"'\" />\n            </context>\n\n            <!-- find comments // /* comment */ -->\n            <context name=\"FindComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Comment\" context=\"IsComments\" char=\"/\" char1=\"/\" lookAhead=\"true\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"IsComments\" char=\"/\" char1=\"*\" lookAhead=\"true\"/>\n            </context>\n\n            <context name=\"IsComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"/\\*\\s*BEGIN\\b.*\\*/|//\\s*BEGIN\\b.*\" beginRegion=\"UserDefined\" />\n                <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"/\\*\\s*END\\b.*\\*/|//\\s*END\\b.*\" endRegion=\"UserDefined\" />\n                <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"*\" beginRegion=\"comment\" />\n                <Detect2Chars attribute=\"Comment\" context=\"SassComment\" char=\"/\" char1=\"/\" />\n            </context>\n\n            <context name=\"SassComment\" attribute=\"Comment\" lineEndContext=\"#pop#pop\">\n                <DetectSpaces />\n                <IncludeRules context=\"##Alerts\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"SelectAtRule\" attribute=\"At Rule\" lineEndContext=\"#pop\">\n                <keyword attribute=\"At Rule\" context=\"#pop!NestedAtRule\" String=\"nested at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!AtRule\" String=\"at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!UnknownAtRule\" String=\"inline and nested at-rules\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@extend\" String=\"@extend\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@mixin\" String=\"@mixin\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@keyframes\" String=\"@keyframes\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@viewport\" String=\"@viewport\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@font-face\" String=\"@font-face\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@if\" String=\"@if\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@else\" String=\"@else\" />\n                <keyword attribute=\"At Rule\" context=\"#pop!@page\" String=\"@page\" />\n                <RegExpr attribute=\"At Rule\" context=\"#pop!UnknownAtRule\" String=\"@[a-zA-Z0-9\\-_]+\\b\" />\n            </context>\n\n            <context name=\"@if\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"=!&lt;&gt;\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"@else\" attribute=\"Error\" lineEndContext=\"#stay\">\n                <DetectSpaces attribute=\"Normal Text\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"FindComments\" />\n                <WordDetect attribute=\"At Rule\" context=\"#pop!@if\" String=\"if\" />\n                <DetectIdentifier attribute=\"Error\" />\n            </context>\n\n            <context name=\"@extend\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#pop\" char=\";\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <IncludeRules context=\"FindSelector\" />\n            </context>\n\n            <context name=\"@mixin\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Function\" context=\"MixinParameter\" String=\"[a-zA-Z0-9\\-_]+\" />\n            </context>\n\n            <context name=\"MixinParameter\" attribute=\"Error\" lineEndContext=\"#stay\">\n                <DetectSpaces attribute=\"Normal Text\" />\n                <AnyChar attribute=\"Normal Text\" context=\"#stay\" String=\"()\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z0-9\\-_]+\" />\n                <StringDetect attribute=\"Operator\" context=\"#stay\" String=\"...\" />\n            </context>\n\n            <context name=\"@keyframes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"Within-@keyframes\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"Within-@keyframes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <DetectChar attribute=\"Normal Text\" context=\"RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"within-@keyframes\" />\n                <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[-+]?[0-9.]+%\" />\n            </context>\n\n            <context name=\"@viewport\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo\" char=\":\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!Within-@viewport\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"Within-@viewport\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <keyword attribute=\"Property\" context=\"IsProperty\" String=\"within-@viewport\" />\n                <IncludeRules context=\"RuleSet\" />\n            </context>\n\n            <context name=\"@font-face\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!Within-@font-face\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"Within-@font-face\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <keyword attribute=\"Property\" context=\"IsProperty\" String=\"within-@font-face\" />\n                <RegExpr attribute=\"Unknown Property\" context=\"IsProperty\" String=\"[A-Za-z_-]+\\b\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"@page\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudo-@page\" char=\":\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!Within-@page\" char=\"{\" beginRegion=\"ruleset\" />\n            </context>\n\n            <context name=\"SelectorPseudo-@page\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <keyword attribute=\"Selector Pseudo\" context=\"#pop\" String=\"pseudoclasses-@page\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"#pop\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"Within-@page\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <keyword attribute=\"Property\" context=\"IsProperty\" String=\"within-@page\" />\n                <IncludeRules context=\"RuleSet\" />\n            </context>\n\n            <context name=\"IsProperty\" attribute=\"Error\" lineEndContext=\"#stay\">\n                <DetectSpaces attribute=\"Normal Text\" />\n                <DetectChar attribute=\"Normal Text\" context=\"RuleParameters\" char=\":\" />\n                <IncludeRules context=\"FindComments\" />\n            </context>\n\n            <context name=\"NestedAtRule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"AtRuleValue\" />\n            </context>\n\n            <context name=\"AtRule\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#pop\" char=\";\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <IncludeRules context=\"AtRuleValue\" />\n            </context>\n\n            <context name=\"UnknownAtRule\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#pop\" char=\";\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <IncludeRules context=\"AtRuleValue\" />\n            </context>\n\n            <context name=\"AtRuleValue\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"&amp;\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"media operators\" />\n                <RegExpr attribute=\"Property\" context=\"#stay\" String=\"[A-Za-z_-]+(?=\\s*:)\" />\n                <keyword attribute=\"Value\" context=\"#stay\" String=\"medias\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"SelectorAttr\" attribute=\"Selector Attribute\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Selector Attribute\" context=\"#pop\" char=\"]\" />\n                <IncludeRules context=\"FindStrings\" />\n                <DetectChar   attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"~\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"^\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"$\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"*\" char1=\"=\" />\n                <Detect2Chars attribute=\"Operator\" context=\"SelectorAttrValue\" char=\"|\" char1=\"=\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"SelectorAttrValue\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Selector Attribute\" context=\"#pop#pop\" char=\"]\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"SelectorPseudo\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoElements\" char=\":\" />\n                <keyword attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueSelector\" String=\"pseudoclass-selector\" />\n                <keyword attribute=\"Selector Pseudo\" context=\"SelectorPseudoValue\" String=\"pseudoclasses\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"SelectorPseudoValue\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"SelectorPseudoElements\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\">\n                <keyword attribute=\"Selector Pseudo\" context=\"#pop!SelectorPseudoValue\" String=\"pseudoelements\" />\n                <RegExpr attribute=\"Selector Pseudo\" context=\"#pop!SelectorPseudoValue\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"SelectorPseudoValueSelector\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueCloseSelector\" char=\"(\" />\n            </context>\n\n            <context name=\"SelectorPseudoValueCloseSelector\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Selector Pseudo\" context=\"#pop#pop#pop\" char=\")\" />\n                <DetectChar attribute=\"Error\" context=\"#pop#pop#pop!RuleSet\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"FindSelector\" />\n            </context>\n\n            <context name=\"SelectorPseudoValue\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"SelectorPseudoValueClose\" char=\"(\" />\n            </context>\n\n            <context name=\"SelectorPseudoValueClose\" attribute=\"Selector Pseudo\" lineEndContext=\"#pop#pop#pop\">\n                <DetectChar attribute=\"Selector Pseudo\" context=\"#pop#pop#pop\" char=\")\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <Detect2Chars attribute=\"Comment\" context=\"#pop#pop\" char=\"*\" char1=\"/\" endRegion=\"comment\" />\n                <IncludeRules context=\"##Alerts\" />\n                <DetectIdentifier />\n            </context>\n\n            <context name=\"RuleSet\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <RegExpr attribute=\"Property\" context=\"Rule\" String=\"[A-Za-z_-]+\\s*:($|[/{\\s0-9$&quot;'])\" lookAhead=\"true\" />\n                <IncludeRules context=\"Base\" />\n                <!-- auto-completion only, includes by a previous rule -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"properties\" />\n            </context>\n\n            <context name=\"Rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Normal Text\" context=\"RuleParameters\" char=\":\" />\n                <Detect2Chars attribute=\"Variable\" context=\"IsVariable\" char=\"-\" char1=\"-\" />\n                <keyword attribute=\"Property\" context=\"#stay\" String=\"properties\" />\n                <RegExpr attribute=\"Unknown Property\" context=\"#stay\" String=\"[^:]+\" />\n            </context>\n\n            <context name=\"IsVariable\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n                <DetectChar attribute=\"Normal Text\" context=\"#pop!RuleParameters\" char=\":\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[^:]+\" />\n            </context>\n\n            <context name=\"RuleParameters\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <!-- Jump out conditions -->\n                <DetectChar attribute=\"Separator Symbol\" context=\"#pop#pop\" char=\";\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <DetectChar attribute=\"Normal Text\" context=\"SubRule\" char=\"{\" beginRegion=\"ruleset\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"SubRule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"ruleset\" />\n                <RegExpr attribute=\"Property\" context=\"IsProperty\" String=\"[A-Za-z_-]+(?=\\s*:)\" />\n                <RegExpr attribute=\"Variable\" context=\"VariableDefine\" String=\"\\$[a-zA-Z0-9\\-_]+(?=\\s*:)\" />\n                <Detect2Chars attribute=\"Interpolation\" context=\"InterpolationMaybeProperty\" char=\"#\" char1=\"{\" />\n                <DetectIdentifier />\n                <AnyChar attribute=\"Error\" context=\"#stay\" String=\"*>+~|.#\" />\n                <!-- auto-completion only, includes by previous rule -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"properties\" />\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"sub-properties\" />\n            </context>\n\n            <context name=\"Function\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Function\" context=\"FunctionParameters\" char=\"(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionVar\" String=\"var(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionUrl\" String=\"url(\" />\n                <StringDetect attribute=\"Function\" context=\"FunctionCalc\" String=\"calc(\" />\n                <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n                <RegExpr attribute=\"Function\" context=\"#stay\" String=\"[-a-zA-Z][-a-zA-Z0-9]*\" />\n            </context>\n\n            <context name=\"FunctionVar\" attribute=\"Variable\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!FunctionParameters\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindComments\" />\n                <RegExpr attribute=\"Variable\" context=\"#pop!FunctionParameters\" String=\"--[^ \\t\\),]+\" />\n            </context>\n\n            <context name=\"FunctionCalc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n                <IncludeRules context=\"Calc\" />\n            </context>\n\n            <context name=\"NestedCalc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n                <IncludeRules context=\"Calc\" />\n            </context>\n\n            <context name=\"Calc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <DetectChar attribute=\"Normal Text\" context=\"NestedCalc\" char=\"(\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"[-](?=$|[ \\t(,;])|[+](?=$|[^0-9)])|[/*]\" />\n                <!-- auto-completion only -->\n                <keyword attribute=\"Normal Text\" context=\"#stay\" String=\"functions\" />\n            </context>\n\n            <context name=\"FunctionUrl\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"UrlValue\">\n                <DetectSpaces />\n                <IncludeRules context=\"FindStrings\" />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n            </context>\n\n            <context name=\"UrlValue\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Function\" context=\"#pop#pop#pop\" char=\")\" />\n            </context>\n\n            <context name=\"FunctionParameters\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces />\n                <DetectChar attribute=\"Function\" context=\"#pop#pop\" char=\")\" />\n                <IncludeRules context=\"FindComments\" />\n                <IncludeRules context=\"FindStrings\" />\n                <IncludeRules context=\"FindFunctions\" />\n                <IncludeRules context=\"FindValues\" />\n                <DetectChar attribute=\"Separator Symbol\" context=\"#stay\" char=\",\" />\n                <StringDetect attribute=\"Operator\" String=\"...\" />\n            </context>\n\n            <!-- string contexts -->\n            <context name=\"StringDQ\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n                <IncludeRules context=\"InsideString\" />\n            </context>\n\n            <context name=\"StringSQ\" attribute=\"String\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n                <IncludeRules context=\"InsideString\" />\n            </context>\n\n            <context name=\"InsideString\" attribute=\"String\" lineEndContext=\"#stay\">\n                <Detect2Chars attribute=\"Interpolation\" context=\"Interpolation\" char=\"#\" char1=\"{\" />\n                <RegExpr attribute=\"SpecialChar\" context=\"#stay\" String=\"\\\\([0-9A-Fa-f]{1,6}|.?)\" />\n                <RegExpr attribute=\"String\" context=\"#stay\" String=\"\\\\?[^#&quot;'\\\\]+\" />\n            </context>\n\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"At Rule\" defStyleNum=\"dsImport\" spellChecking=\"false\"/>\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Property\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Unknown Property\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\"/>\n            <itemData name=\"SpecialChar\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\"/>\n            <itemData name=\"Interpolation\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Operator\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Separator Symbol\" defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n            <itemData name=\"Value\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"Number\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"Value Keyword\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Color\" defStyleNum=\"dsConstant\" spellChecking=\"false\"/>\n            <itemData name=\"Unit\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n            <itemData name=\"Function\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Annotation\" defStyleNum=\"dsAttribute\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Id\" defStyleNum=\"dsPreprocessor\" bold=\"1\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Class\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Attribute\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Pseudo\" defStyleNum=\"dsInformation\" italic=\"1\" spellChecking=\"false\"/>\n            <itemData name=\"Selector Tag\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Placeholder Selector\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n            <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <keywords casesensitive=\"0\" weakDeliminator=\"-%@\" />\n        <comments>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n        </comments>\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sed.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"sed\" section=\"Scripts\" version=\"2\" kateversion=\"2.4\" extensions=\"*.sed\" mimetype=\"text/x-sed\" author=\"Bart Sas (bart.sas@gmail.com)\" license=\"GPL\">\n        <highlighting>\n                <contexts>\n                        <context name=\"BeginningOfLine\" attribute=\"Normal\" lineEndContext=\"#stay\">\n                                <DetectSpaces/>\n                                <DetectChar char=\"#\"     attribute=\"Comment\"     context=\"Comment\"/>\n                                <RegExpr String=\"(/)\"    attribute=\"Separator\"   context=\"FirstAddressRegex\"/>\n                                <RegExpr String=\"\\\\(\\S)\" attribute=\"Separator\"   context=\"FirstAddressRegex\"/>\n                                <Int                     attribute=\"Line Number\" context=\"AfterFirstAddress\"/>\n                                <DetectChar char=\"$\"     attribute=\"Last Line\"   context=\"AfterFirstAddress\"/>\n                                <DetectChar char=\"}\"     attribute=\"Brace\"       context=\"AfterCommand\"/>\n                                <DetectChar char=\":\"     attribute=\"Label\"       context=\"Label\"/>\n                                <DetectChar char=\"!\"     attribute=\"Negation\"    context=\"Command\"/>\n                                <IncludeRules                                    context=\"Command\"/>\n                                <RegExpr String=\"\\S\"     attribute=\"Error\"       context=\"Error\"/>\n                        </context>\n\n                        <context name=\"FirstAddressRegex\" attribute=\"Regex\" lineEndContext=\"Error\" dynamic=\"true\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\\\%1\" attribute=\"Regex Escape\" context=\"#stay\"             dynamic=\"true\"/>\n                                <RegExpr String=\"%1\"   attribute=\"Separator\"    context=\"AfterFirstAddress\" dynamic=\"true\"/>\n                                <IncludeRules                                   context=\"Regex\"/>\n                        </context>\n\n                        <context name=\"AfterFirstAddress\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <DetectChar char=\"!\" attribute=\"Negation\" context=\"Command\"/>\n                                <IncludeRules                             context=\"AfterFirstAddress2\"/>\n                                <RegExpr String=\"\\S\" attribute=\"Error\"    context=\"Error\"/>\n                        </context>\n\n                        <context name=\"AfterFirstAddress2\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <DetectChar char=\",\" attribute=\"Normal\" context=\"SecondAddress\"/>\n                                <DetectChar char=\"~\" attribute=\"Normal\" context=\"Step\"/>\n                                <IncludeRules                           context=\"Command\"/>\n                                <RegExpr String=\"\\S\" attribute=\"Error\"  context=\"Error\"/>\n                        </context>\n\n                        <context name=\"SecondAddress\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"(/)\"    attribute=\"Separator\"   context=\"SecondAddressRegex\"/>\n                                <RegExpr String=\"\\\\(\\S)\" attribute=\"Separator\"   context=\"SecondAddressRegex\"/>\n                                <Int                     attribute=\"Line Number\" context=\"AfterSecondAddress\"/>\n                                <DetectChar char=\"$\"     attribute=\"Last Line\"   context=\"AfterSecondAddress\"/>\n                                <RegExpr String=\"\\S\"     attribute=\"Error\"       context=\"Error\"/>\n                        </context>\n\n                        <context name=\"SecondAddressRegex\" attribute=\"Regex\" lineEndContext=\"Error\" dynamic=\"true\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\\\%1\" attribute=\"Regex Escape\" context=\"#stay\"              dynamic=\"true\"/>\n                                <RegExpr String=\"%1\"   attribute=\"Separator\"    context=\"AfterSecondAddress\" dynamic=\"true\"/>\n                                <IncludeRules                                   context=\"Regex\"/>\n                        </context>\n\n                        <context name=\"AfterSecondAddress\" attribute=\"Normal\" lineEndContext=\"Error\" dynamic=\"true\">\n                                <DetectSpaces/>\n                                <DetectChar char=\"!\" attribute=\"Negation\" context=\"Command\"/>\n                                <IncludeRules                             context=\"Command\"/>\n                                <RegExpr String=\"\\S\" attribute=\"Error\"    context=\"Error\"/>\n                        </context>\n\n                        <context name=\"Step\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <Int                 attribute=\"Step\"  context=\"Command\"/>\n                                <RegExpr String=\"\\S\" attribute=\"Error\" context=\"Error\"/>\n                        </context>\n\n                        <context name=\"Command\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <DetectChar char=\"s\"              attribute=\"Command\" context=\"SCommand\"/>\n                                <DetectChar char=\"y\"              attribute=\"Command\" context=\"YCommand\"/>\n                                <AnyChar String=\"dpnDNPhHgGxFvz=\" attribute=\"Command\" context=\"AfterCommand\"/>\n                                <AnyChar String=\"aic\"             attribute=\"Command\" context=\"AICCommand\"/>\n                                <AnyChar String=\"bTt\"             attribute=\"Command\" context=\"BTCommand\"/>\n                                <AnyChar String=\"WwrR\"            attribute=\"Command\" context=\"WRCommand\"/>\n                                <AnyChar String=\"lL\"              attribute=\"Command\" context=\"LCommand\"/>\n                                <AnyChar String=\"qQ\"              attribute=\"Command\" context=\"QCommand\"/>\n                                <DetectChar char=\"{\"              attribute=\"Brace\"   context=\"BeginningOfLine\"/>\n                                <RegExpr String=\"\\S\"              attribute=\"Error\"   context=\"Error\"/>\n                        </context>\n\n                        <context name=\"SCommand\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"(\\S)\" attribute=\"Separator\" context=\"SRegex\"/>\n                        </context>\n\n                        <context name=\"SRegex\" attribute=\"Regex\" lineEndContext=\"Error\" dynamic=\"true\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\\\%1\" attribute=\"Regex Escape\" context=\"#stay\"        dynamic=\"true\"/>\n                                <RegExpr String=\"(%1)\" attribute=\"Separator\"    context=\"SReplacement\" dynamic=\"true\"/>\n                                <IncludeRules                                   context=\"Regex\"/>\n                        </context>\n\n                        <context name=\"SReplacement\" attribute=\"Replacement\" lineEndContext=\"Error\" dynamic=\"true\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\\\%1\"                attribute=\"Repl Escape\" context=\"#stay\"  dynamic=\"true\"/>\n                                <RegExpr String=\"%1\"                  attribute=\"Separator\"   context=\"SFlags\" dynamic=\"true\"/>\n                                <RegExpr String=\"\\\\[0-9LlUuE\\\\&amp;]\" attribute=\"Repl Escape\" context=\"#stay\"/>\n                                <DetectChar char=\"&amp;\"              attribute=\"Repl Escape\" context=\"#stay\"/>\n                        </context>\n\n                        <context name=\"SFlags\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <AnyChar String=\"gpeIiMm\" attribute=\"Flag\"        context=\"#stay\"/>\n                                <DetectChar char=\"w\"      attribute=\"Flag\"        context=\"WFlag\"/>\n                                <Int                      attribute=\"Repl Number\" context=\"#stay\"/>\n                                <IncludeRules                                     context=\"AfterCommand\"/>\n                        </context>\n\n                        <context name=\"WFlag\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\S+\" attribute=\"Filename\" context=\"SFlags\"/>\n                        </context>\n\n                        <context name=\"YCommand\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"(\\S)\" attribute=\"Separator\" context=\"YSourceList\"/>\n                        </context>\n\n                        <context name=\"YSourceList\" attribute=\"Char List\" lineEndContext=\"Error\" dynamic=\"true\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\\\%1\"           attribute=\"Char List Escape\" context=\"#stay\"     dynamic=\"true\"/>\n                                <RegExpr String=\"(%1)\"           attribute=\"Separator\"        context=\"YDestList\" dynamic=\"true\"/>\n                                <Detect2Chars char=\"\\\" char1=\"n\" attribute=\"Char List Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Char List Escape\" context=\"#stay\"/>\n                        </context>\n\n                        <context name=\"YDestList\" attribute=\"Char List\" lineEndContext=\"Error\" dynamic=\"true\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\\\%1\"           attribute=\"Char List Escape\" context=\"#stay\"        dynamic=\"true\"/>\n                                <RegExpr String=\"%1\"             attribute=\"Separator\"        context=\"AfterCommand\" dynamic=\"true\"/>\n                                <Detect2Chars char=\"\\\" char1=\"n\" attribute=\"Char List Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Char List Escape\" context=\"#stay\"/>\n                        </context>\n\n                        <context name=\"AICCommand\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <LineContinue             attribute=\"Line Continue\" context=\"LiteralText\"/>\n                                <RegExpr      String=\"\\S\" attribute=\"Error\"         context=\"Error\"/>\n                        </context>\n\n                        <context name=\"LiteralText\" attribute=\"Literal Text\" lineEndContext=\"BeginningOfLine\">\n                                <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Literal Escape\" context=\"LiteralText\"/>\n                                <LineContinue                    attribute=\"Line Continue\"  context=\"LiteralText\"/>\n                                <DetectChar   char=\"\\\"           attribute=\"Error\"          context=\"Error\"/>\n                        </context>\n\n                        <context name=\"BTCommand\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\w+\" attribute=\"Label\" context=\"AfterCommand\"/>\n                                <IncludeRules                           context=\"AfterCommand\"/>\n                        </context>\n\n                        <context name=\"WRCommand\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\S+\" attribute=\"Filename\" context=\"AfterCommand\"/>\n                        </context>\n\n                        <context name=\"LCommand\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <Int attribute=\"Wrap Length\" context=\"AfterCommand\"/>\n                                <IncludeRules                context=\"AfterCommand\"/>\n                        </context>\n\n                        <context name=\"QCommand\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <Int attribute=\"Exit Code\" context=\"AfterCommand\"/>\n                                <IncludeRules              context=\"AfterCommand\"/>\n                        </context>\n\n                        <context name=\"Label\" attribute=\"Normal\" lineEndContext=\"Error\">\n                                <DetectSpaces/>\n                                <RegExpr String=\"\\w+\" attribute=\"Label\" context=\"AfterCommand\"/>\n                                <RegExpr String=\"\\S\"  attribute=\"Error\" context=\"Error\"/>\n                        </context>\n\n                        <context name=\"AfterCommand\" attribute=\"Normal\" lineEndContext=\"BeginningOfLine\">\n                                <DetectSpaces/>\n                                <DetectChar char=\";\" attribute=\"Normal\"  context=\"BeginningOfLine\"/>\n                                <DetectChar char=\"}\" attribute=\"Brace\"   context=\"AfterCommand\"/>\n                                <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\"/>\n                                <RegExpr String=\"\\S\" attribute=\"Error\"   context=\"Error\"/>\n                        </context>\n\n                        <context name=\"Regex\" attribute=\"Regex\" lineEndContext=\"Error\">\n                                <Detect2Chars char=\"\\\" char1=\"(\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\")\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"+\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"?\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"|\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"{\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"}\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"[\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"]\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\".\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"*\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"\\\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"^\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"$\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"n\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"t\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"0\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"1\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"2\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"3\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"4\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"5\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"6\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"7\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"8\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <Detect2Chars char=\"\\\" char1=\"9\" attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <DetectChar   char=\"*\"           attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <DetectChar   char=\".\"           attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <DetectChar   char=\"^\"           attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <DetectChar   char=\"$\"           attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <DetectChar   char=\"[\"           attribute=\"Regex Escape\" context=\"#stay\"/>\n                                <DetectChar   char=\"]\"           attribute=\"Regex Escape\" context=\"#stay\"/>\n                        </context>\n\n                        <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"BeginningOfLine\"/>\n                        <context name=\"Error\"   attribute=\"Error\"   lineEndContext=\"BeginningOfLine\"/>\n                </contexts>\n\n                <itemDatas>\n                        <itemData name=\"Normal\"           defStyleNum=\"dsNormal\"/>\n\n                        <itemData name=\"Regex\"            defStyleNum=\"dsString\"/>\n                        <itemData name=\"Regex Escape\"     defStyleNum=\"dsChar\"/>\n                        <itemData name=\"Replacement\"      defStyleNum=\"dsString\"/>\n                        <itemData name=\"Repl Escape\"      defStyleNum=\"dsChar\"/>\n                        <itemData name=\"Char List\"        defStyleNum=\"dsString\"/>\n                        <itemData name=\"Char List Escape\" defStyleNum=\"dsChar\"/>\n                        <itemData name=\"Separator\"        defStyleNum=\"dsString\" color=\"#00F\"/>\n\n                        <itemData name=\"Line Number\"      defStyleNum=\"dsDecVal\"/>\n                        <itemData name=\"Step\"             defStyleNum=\"dsDecVal\"/>\n                        <itemData name=\"Last Line\"        defStyleNum=\"dsOthers\" color=\"#808\" bold=\"1\"/>\n                        <itemData name=\"Negation\"         defStyleNum=\"dsOthers\" color=\"#808\" bold=\"1\"/>\n\n                        <itemData name=\"Command\"          defStyleNum=\"dsKeyword\"/>\n                        <itemData name=\"Label\"            defStyleNum=\"dsFunction\"/>\n                        <itemData name=\"Brace\"            defStyleNum=\"dsNormal\"/>\n\n                        <itemData name=\"Flag\"             defStyleNum=\"dsDataType\"/>\n                        <itemData name=\"Repl Number\"      defStyleNum=\"dsDecVal\"/>\n                        <itemData name=\"Exit Code\"        defStyleNum=\"dsDecVal\"/>\n                        <itemData name=\"Filename\"         defStyleNum=\"dsBaseN\"/>\n                        <itemData name=\"Wrap Length\"      defStyleNum=\"dsDecVal\"/>\n\n                        <itemData name=\"Line Continue\"    defStyleNum=\"dsOthers\" color=\"#000\" bold=\"1\"/>\n                        <itemData name=\"Literal Text\"     defStyleNum=\"dsOthers\" color=\"#080\" italic=\"1\"/>\n                        <itemData name=\"Literal Escape\"   defStyleNum=\"dsOthers\" color=\"#0A0\" italic=\"1\"/>\n\n                        <itemData name=\"Comment\"          defStyleNum=\"dsComment\"/>\n                        <itemData name=\"Error\"            defStyleNum=\"dsError\"/>\n                </itemDatas>\n        </highlighting>\n\n        <general>\n                <comments>\n                        <comment name=\"singleLine\" start=\"#\"/>\n                </comments>\n        </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/selinux-cil.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY symbol         \"\\w\\[\\]\\.@\\=/\\*\\-&#036;&#037;\\+&#033;\\|&amp;\\^&#058;&#126;&#096;#\\{\\}&#039;&lt;&gt;\\?,\\\\\"> <!-- [].@=/*-_$%+!|&^:~`#{}'<>?,\\ -->\n\t<!ENTITY identifier     \"[a-zA-Z][\\w\\-]*\">\n\t<!ENTITY statementchar  \"[a-z_\\-]\">\n\n\t<!ENTITY fullIdentifier \"[a-zA-Z][\\w\\-]*(\\.?[\\w\\-])*\">\n\t<!ENTITY mlsLevel       \"&fullIdentifier;(:&fullIdentifier;(\\s*,\\s*&fullIdentifier;)*)?\">\n]>\n\n<!--\n  SELinux CIL (Common Interface Language) Policy Syntax Highlighting Definition for Kate\n  ==========================================================================================\n   This file is part of the KDE's KSyntaxHighlighting framework.\n\n   Copyright (c) 2018-2019 Nibaldo González S. (nibgonz@gmail.com)\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy of this\n   software and associated documentation files (the \"Software\"), to deal in the Software\n   without restriction, including without limitation the rights to use, copy, modify, merge,\n   publish, distribute, sublicense, and/or sell copies of the Software, and to permit\n   persons to whom the Software is furnished to do so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included\n   in all copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n   PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n   AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n  ==========================================================================================\n\n  Based on the Scheme syntax highlighting file (scheme.xml),\n  created by Dominik Haumann (dhaumann@kde.org) & licensed under MIT.\n\n  Last update: secilc 2.8\n  More details about CIL:\n    https://github.com/SELinuxProject/selinux/tree/master/secilc/docs\n\n  Change log:\n   * Version 3 [02-Apr-2019]: Remove one indentation.\n   * Version 2 [28-Aug-2018]:\n      - Implement \"selinux.xml\": some rules and keywords are moved there. Improve RegExp\n        highlighting, add Android permissions and BPF permissions, improve IPv6\n        detection and others improvements.\n      - Fix permissions list in \"ioctl\" kind and \"call\" statements.\n      - Add \"sctp\" protocol keyword and policy capabilities keywords.\n   * Version 1 [26-Jan-2018, by Nibaldo González]:\n      - Initial version.\n-->\n\n<language name=\"SELinux CIL Policy\"\n          version=\"3\"\n          kateversion=\"5.0\"\n          section=\"Sources\"\n          extensions=\"*.cil\"\n          priority=\"9\"\n          mimetype=\"\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\"\n          license=\"MIT\">\n\n<highlighting>\n\n\t<list name=\"expr_keys\">\n\t\t<item>and</item>\n\t\t<item>or</item>\n\t\t<item>xor</item>\n\t\t<item>not</item>\n\t\t<item>all</item>\n\t\t<item>eq</item>\n\t\t<item>ne</item>\n\t\t<item>neq</item>\n\t\t<item>dom</item>\n\t\t<item>domby</item>\n\t\t<item>incomp</item>\n\t\t<item>range</item>\n\t</list>\n\n\t<!-- Access Vector Rules -->\n\t<list name=\"access\">\n\t\t<item>allow</item>\n\t\t<item>auditallow</item>\n\t\t<item>dontaudit</item>\n\t\t<item>neverallow</item>\n\t\t<item>auditdeny</item>\n\t\t<item>allowx</item>\n\t\t<item>auditallowx</item>\n\t\t<item>dontauditx</item>\n\t\t<item>neverallowx</item>\n\t</list>\n\n\t<list name=\"booleans\">\n\t\t<item>true</item>\n\t\t<item>false</item>\n\t</list>\n\n\t<list name=\"file_types\">\n\t\t<item>file</item>\n\t\t<item>dir</item>\n\t\t<item>char</item>\n\t\t<item>block</item>\n\t\t<item>socket</item>\n\t\t<item>pipe</item>\n\t\t<item>symlink</item>\n\t\t<item>any</item>\n\t</list>\n\t<list name=\"fs_types\">\n\t\t<item>task</item>\n\t\t<item>trans</item>\n\t\t<item>xattr</item>\n\t</list>\n\t<list name=\"protocols\">\n\t\t<item>tcp</item>\n\t\t<item>udp</item>\n\t\t<item>dccp</item>\n\t\t<item>sctp</item>\n\t</list>\n\n\t<list name=\"special_keys\">\n\t\t<item>self</item>\n\t</list>\n\t<list name=\"classorder_keys\">\n\t\t<item>unordered</item>\n\t</list>\n\t<list name=\"handleunknown_keys\">\n\t\t<item>allow</item>\n\t\t<item>deny</item>\n\t\t<item>reject</item>\n\t</list>\n\n\t<list name=\"type_statements\">\n\t\t<item>block</item>\n\t\t<item>optional</item>\n\t\t<item>common</item>\n\t\t<item>class</item>\n\t\t<item>classmap</item>\n\t\t<item>classmapping</item>\n\t\t<item>sid</item>\n\t\t<item>user</item>\n\t\t<item>role</item>\n\t\t<item>roleattribute</item>\n\t\t<item>type</item>\n\t\t<item>classpermission</item>\n\t\t<item>typeattribute</item>\n\t\t<item>typealias</item>\n\t\t<item>tunable</item>\n\t\t<item>sensitivity</item>\n\t\t<item>sensitivityalias</item>\n\t\t<item>category</item>\n\t\t<item>categoryalias</item>\n\t\t<item>categoryset</item>\n\t\t<item>level</item>\n\t\t<item>levelrange</item>\n\t\t<item>context</item>\n\t\t<item>ipaddr</item>\n\t\t<item>macro</item>\n\t\t<item>boolean</item>\n\t\t<!-- policycap, classpermissionset -->\n\t</list>\n\t<list name=\"policy_config_statements\">\n\t\t<item>policycap</item>\n\t\t<item>mls</item>\n\t\t<item>handleunknown</item>\n\t</list>\n\t<list name=\"statements\">\n\t\t<!-- Container Statements.\n\t\t     Also: block, optional, macro -->\n\t\t<item>blockabstract</item>\n\t\t<item>blockinherit</item>\n\t\t<item>in</item>\n\t\t<item>call</item>\n\n\t\t<!-- Default Object Statements -->\n\t\t<item>defaultuser</item>\n\t\t<item>defaultrole</item>\n\t\t<item>defaulttype</item>\n\t\t<item>defaultrange</item>\n\n\t\t<!-- User Statements.\n\t\t     Also: user -->\n\t\t<item>userrole</item>\n\t\t<item>userattribute</item>\n\t\t<item>userattributeset</item>\n\t\t<item>userlevel</item>\n\t\t<item>userrange</item>\n\t\t<item>userbounds</item>\n\t\t<item>userprefix</item>\n\t\t<item>selinuxuser</item>\n\t\t<item>selinuxuserdefault</item>\n\n\t\t<!-- Role Statements.\n\t\t     Also: role, roleattribute -->\n\t\t<item>roletype</item>\n\t\t<item>roleattributeset</item>\n\t\t<item>roleallow</item>\n\t\t<item>roletransition</item>\n\t\t<item>rolebounds</item>\n\n\t\t<!-- Type Statements.\n\t\t     Also: type, typeattribute, typealias -->\n\t\t<item>typealiasactual</item>\n\t\t<item>typeattributeset</item>\n\t\t<item>typebounds</item>\n\t\t<item>typechange</item>\n\t\t<item>typemember</item>\n\t\t<item>typetransition</item>\n\t\t<item>typepermissive</item>\n\t\t<item>attributetype</item>\n\n\t\t<item>expandtypeattribute</item>\n\t\t<item>nametypetransition</item>\n\n\t\t<!-- Class and Permission Statements.\n\t\t     Also: common, class, classmap, classmapping, classpermission -->\n\t\t<item>classcommon</item>\n\t\t<item>classorder</item>\n\t\t<item>permission</item>\n\t\t<item>permissionset</item>\n\t\t<item>classpermissionset</item>\n\t\t<item>permissionx</item>\n\n\t\t<!-- Conditional Statements.\n\t\t     Also: tunable, boolean -->\n\t\t<item>booleanif</item>\n\t\t<item>tunableif</item>\n\n\t\t<!-- Constraint Statements -->\n\t\t<item>constrain</item>\n\t\t<item>validatetrans</item>\n\t\t<item>mlsconstrain</item>\n\t\t<item>mlsvalidatetrans</item>\n\n\t\t<!-- Multi-Level Security Labeling Statements.\n\t\t     Also: sensitivity, sensitivityalias, category, categoryalias, categoryset, level, levelrange -->\n\t\t<item>sensitivityaliasactual</item>\n\t\t<item>sensitivityorder</item>\n\t\t<item>categoryaliasactual</item>\n\t\t<item>categoryorder</item>\n\t\t<item>sensitivitycategory</item>\n\t\t<item>rangetransition</item>\n\t\t<item>categoryrange</item>\n\n\t\t<!-- Context Statement: context -->\n\t\t<!-- SID Statements.\n\t\t     Also: sid -->\n\t\t<item>sidorder</item>\n\t\t<item>sidcontext</item>\n\n\t\t<!-- File Labeling Statements -->\n\t\t<item>filecon</item>\n\t\t<item>fsuse</item>\n\t\t<item>genfscon</item>\n\t\t<item>fscon</item>\n\t\t<item>fsusexattr</item>\n\t\t<item>fsusetask</item>\n\t\t<item>fsusetrans</item>\n\n\t\t<!-- Network Labeling Statements.\n\t\t     Also: ipaddr -->\n\t\t<item>netifcon</item>\n\t\t<item>nodecon</item>\n\t\t<item>portcon</item>\n\t\t<!-- ipv4_addr, ipv6_addr -->\n\n\t\t<!-- Xen Statements -->\n\t\t<item>iomemcon</item>\n\t\t<item>ioportcon</item>\n\t\t<item>pcidevicecon</item>\n\t\t<item>pirqcon</item>\n\t\t<item>devicetreecon</item>\n\n\t\t<!-- Infiniband Statements -->\n\t\t<item>ibpkeycon</item>\n\t\t<item>ibendportcon</item>\n\n\t\t<!-- Others -->\n\t\t<item>dominance</item>\n\t\t<item>allowxperm</item>\n\t\t<item>auditallowxperm</item>\n\t\t<item>dontauditxperm</item>\n\t\t<item>neverallowxperm</item>\n\t</list>\n\n\t<list name=\"type_name\">\n\t\t<item>string</item>\n\t\t<item>name</item>\n\t\t<item>ioctl</item> <!-- permissionx -->\n\t</list>\n\n\t<list name=\"other_keywords\">\n\t\t<item>source</item>\n\t\t<item>target</item>\n\t\t<item>low</item>\n\t\t<item>high</item>\n\t\t<item>low-high</item>\n\n\t\t<item>perm</item>\n\t\t<item>object_r</item>\n\t\t<item>t1</item>\n\t\t<item>t2</item>\n\t\t<item>t3</item>\n\t\t<item>r1</item>\n\t\t<item>r2</item>\n\t\t<item>r3</item>\n\t\t<item>u1</item>\n\t\t<item>u2</item>\n\t\t<item>u3</item>\n\t\t<item>l1</item>\n\t\t<item>l2</item>\n\t\t<item>h1</item>\n\t\t<item>h2</item>\n\t</list>\n\n\t<contexts>\n\n\t\t<context name=\"_normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"_rule_bracket_level1\" attribute=\"Brackets1\" char=\"(\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\"  char=\")\"/>\n\t\t\t<IncludeRules context=\"_common\"/>\n\t\t\t<IncludeRules context=\"_identifiers\"/>\n\t\t</context>\n\t\t<context name=\"_common\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"_comment\" attribute=\"Comment\" char=\";\"/>\n\t\t\t<DetectChar context=\"_quoted\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t\t<DetectChar context=\"_path_content\" attribute=\"Path\" char=\"/\"/>\n\n\t\t\t<!-- IP Address -->\n\t\t\t<IncludeRules context=\"_ip_addr##SELinux Policy\"/>\n\t\t\t<!-- Special Characters -->\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Special Char\" char=\"*\"/>\n\n\t\t\t<!-- File Contexts: user_u:role_r:type_t:s0:c0 -->\n\t\t\t<RegExpr context=\"_file_contexts\" attribute=\"File Contexts\" String=\"\\b&fullIdentifier;(:&fullIdentifier;){2}(:&mlsLevel;(\\s*\\-\\s*&mlsLevel;)?)?([^&symbol;:]|\\s|$)\" lookAhead=\"true\"/>\n\t\t\t<!-- Global Namespace (this avoids highlighting keywords) -->\n\t\t\t<RegExpr context=\"#stay\" String=\"(\\b&identifier;)?(\\.&identifier;)+(?=\\s|[^&symbol;]|$)\"/>\n\n\t\t\t<!-- Numbers -->\n\t\t\t<HlCHex context=\"#stay\" attribute=\"Hexadecimal\"/>\n\t\t\t<Float context=\"#stay\" attribute=\"Number\"/>\n\t\t\t<Int context=\"#stay\" attribute=\"Number\"/>\n\t\t</context>\n\t\t<context name=\"_identifiers\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Avoid highlighting numbers in identifiers.\n\t\t\t     IMPORTANT: Do not put this rule before the keywords! -->\n\t\t\t<RegExpr context=\"#stay\" String=\"&identifier;\"/>\n\t\t</context>\n\n\t\t<context name=\"_comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<LineContinue context=\"#pop\" attribute=\"Comment\"/>\n\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t<IncludeRules context=\"##Modelines\"/>\n\t\t\t<IncludeRules context=\"_default_comment##SELinux Policy\"/>\n\t\t</context>\n\n\t\t<context name=\"_quoted\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_regex_quoted##SELinux Policy\"/> <!-- This does not support line breaks and line cont. escape -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Text Quoted Open\" String=\"[^\\s&quot;\\[\\(\\\\](?=\\s*$)\"/>\n\t\t</context>\n\n\t\t<context name=\"_path_content\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces context=\"#pop\" attribute=\"Normal Text\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Normal Text\" String=\"[^&symbol;]\" lookAhead=\"true\"/>\n\n\t\t\t<IncludeRules context=\"_default_regex##SELinux Policy\"/>\n\t\t\t<DetectChar context=\"_square_brackets_cil_path\" attribute=\"RegExp Brackets (Paths)\" char=\"[\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_cil_path\" attribute=\"RegExp Brackets (Paths)\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_square_brackets_cil_path_content\">\n\t\t<RegExpr context=\"#pop!_square_brackets_cil_path_content\" attribute=\"Special Char of Brackets (Paths)\" String=\"\\^(?=[&symbol;])\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_cil_path_content\" attribute=\"RegExp Brackets (Paths)\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets (Paths)\" char=\"]\"/>\n\t\t\t<RegExpr context=\"#pop\" String=\"[^&symbol;]\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open RegExp Brackets (Paths)\" String=\"[^\\s\\[\\]\\\\](?![&symbol;])\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\" char=\"[\"/>\n\t\t\t<IncludeRules context=\"_special_chars##SELinux Policy\"/>\n\t\t</context>\n\n\t\t<!-- RULES -->\n\n\t\t<!-- Highlighting specific keywords in some rules -->\n\t\t<context name=\"_filecon_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_end\"/>\n\t\t\t<keyword context=\"#pop\" attribute=\"Types\" String=\"file_types\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_portcon_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_end\"/>\n\t\t\t<keyword context=\"#pop\" attribute=\"Types\" String=\"protocols\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_fsuse_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_end\"/>\n\t\t\t<keyword context=\"#pop\" attribute=\"Types\" String=\"fs_types\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_handleunknown_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_end\"/>\n\t\t\t<keyword context=\"#pop\" attribute=\"Access Keys\" String=\"handleunknown_keys\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_policycap_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_end\"/>\n\t\t\t<IncludeRules context=\"_policy_capabilities##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_common\"/>\n\t\t\t<IncludeRules context=\"_identifiers\"/>\n\t\t</context>\n\t\t<context name=\"_av_permissions_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_end\"/>\n\t\t\t<IncludeRules context=\"_av_permissions##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_default_end\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<AnyChar context=\"#pop\" attribute=\"Normal Text\" String=\")(\" lookAhead=\"true\"/>\n\t\t</context>\n\n\t\t<context name=\"_find_ioctl_kind\" attribute=\"Normal Text\"\n\t\t         lineEndContext=\"#pop!_av_permissions_statement\" fallthrough=\"true\" fallthroughContext=\"#pop!_av_permissions_statement\">\n\t\t\t<!-- ioctl is a kind in permissionx/accessx statement:\n\t\t\t     (permissionx permissionx_id (ioctl class_id (permission ... | expr ...))) -->\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Type Name Statements\" String=\"ioctl(?=\\s+[&symbol;]+\\s*\\()\"/>\n\t\t\t<!-- ioctl can be a kind of permissionx or AV permission -->\n\t\t\t<RegExpr context=\"#pop!_av_permissions_statement\" attribute=\"Type Name Statements\" String=\"ioctl(?=(\\s+[&symbol;]+)?\\s*($|;))\"/>\n\t\t\t<RegExpr context=\"#pop!_av_permissions_statement\" attribute=\"Type Name Statements\" String=\"ioctl(?=\\s+[&symbol;]+\\s+\\d)\"/>\n\t\t</context>\n\n\t\t<context name=\"_default_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<WordDetect context=\"_handleunknown_statement\" attribute=\"Policy Config. Statements\" String=\"handleunknown\"/>\n\t\t\t<WordDetect context=\"_policycap_statement\" attribute=\"Policy Config. Statements\" String=\"policycap\"/>\n\t\t\t<WordDetect context=\"_filecon_statement\" attribute=\"Statements\" String=\"filecon\"/>\n\t\t\t<WordDetect context=\"_fsuse_statement\" attribute=\"Statements\" String=\"fsuse\"/>\n\t\t\t<WordDetect context=\"_portcon_statement\" attribute=\"Statements\" String=\"portcon\"/>\n\t\t\t<!-- Fix permissions list if the keywords \"ioctl\" or \"call\" are not statements,\n\t\t\t     but a permissions (see \"av_permissions\" keyword list of \"selinux.xml\"). -->\n\t\t\t<RegExpr context=\"_av_permissions_statement\" String=\"\\b(call|ioctl)\\s*\\)\" lookAhead=\"true\"/>\n\t\t\t<WordDetect context=\"_find_ioctl_kind\" String=\"ioctl\" lookAhead=\"true\"/>\n\t\t\t<WordDetect context=\"_av_permissions_statement\" attribute=\"Statements\" String=\"call\"/>\n\n\t\t\t<keyword context=\"#stay\" attribute=\"Policy Config. Statements\" String=\"policy_config_statements\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Type Statements\" String=\"type_statements\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Statements\" String=\"statements\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Expression Keys\" String=\"expr_keys\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Access Keys\" String=\"access\"/>\n\n\t\t\t<keyword context=\"#stay\" attribute=\"Booleans\" String=\"booleans\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Type Name Statements\" String=\"classorder_keys\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Type Name Statements\" String=\"type_name\"/>\n\t\t</context>\n\t\t<context name=\"_default_rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_common\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Booleans\" String=\"booleans\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Special Keys\" String=\"special_keys\"/>\n\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Other Keywords\" String=\"&lt;root&gt;\"/>\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Other Keywords\" String=\"&lt;node&gt;\"/>\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Other Keywords\" String=\"&lt;src_info&gt;\"/>\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Other Keywords\" String=\"&lt;src_cil&gt;\"/>\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Other Keywords\" String=\"&lt;src_hll&gt;\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Other Keywords\" String=\"other_keywords\"/>\n\t\t\t<IncludeRules context=\"_filesystem##SELinux Policy\"/>\n\n\t\t\t<IncludeRules context=\"_identifiers\"/>\n\t\t</context>\n\t\t<context name=\"_default_rule_without_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_av_permissions##SELinux Policy\"/>\n\t\t</context>\n\t\t<context name=\"_default_rule_bracket\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces context=\"#stay\" attribute=\"Normal Text\"/>\n\t\t\t<DetectChar context=\"_comment\" attribute=\"Comment\" char=\";\"/>\n\t\t</context>\n\n\t\t<!-- Levels of rule brackets.\n\t\t     Only the first word of a rule can be highlighted as a statement keyword. -->\n\t\t<context name=\"_rule_bracket_level1\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_without_statement_level1\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_bracket\"/> <!-- Detect spaces & comments -->\n\t\t\t<!-- Detect first word -->\n\t\t\t<RegExpr context=\"#pop!_statement_level1\" attribute=\"Normal Text\" String=\"&statementchar;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_statement_level1\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_level1\" lineEndContext=\"#pop!_rule_level1\">\n\t\t\t<!-- When writing a statement and then a delimiter (like a space), go to the context \"_rule_level1\" -->\n\t\t\t<IncludeRules context=\"_default_statement\"/>\n\t\t\t<RegExpr context=\"#pop!_rule_without_statement_level1\" attribute=\"Normal Text\" String=\"&statementchar;+\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_rule_level1\" attribute=\"Normal Text\" lineEndContext=\"#stay\"> <!-- Rule content -->\n\t\t\t<DetectChar attribute=\"Brackets2\" context=\"_rule_bracket_level2\" char=\"(\"/>\n\t\t\t<DetectChar attribute=\"Brackets1\" context=\"#pop\" char=\")\" />\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_rule_without_statement_level1\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_without_statement\"/>\n\t\t\t<IncludeRules context=\"_rule_level1\"/>\n\t\t</context>\n\n\t\t<context name=\"_rule_bracket_level2\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_without_statement_level2\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_bracket\"/>\n\t\t\t<RegExpr context=\"#pop!_statement_level2\" attribute=\"Normal Text\" String=\"&statementchar;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_statement_level2\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_level2\" lineEndContext=\"#pop!_rule_level2\">\n\t\t\t<IncludeRules context=\"_default_statement\"/>\n\t\t\t<RegExpr context=\"#pop!_rule_without_statement_level2\" attribute=\"Normal Text\" String=\"&statementchar;+\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_rule_level2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Brackets3\" context=\"_rule_bracket_level3\" char=\"(\"/>\n\t\t\t<DetectChar attribute=\"Brackets2\" context=\"#pop\" char=\")\" />\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_rule_without_statement_level2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_without_statement\"/>\n\t\t\t<IncludeRules context=\"_rule_level2\"/>\n\t\t</context>\n\n\t\t<context name=\"_rule_bracket_level3\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_without_statement_level3\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_bracket\"/>\n\t\t\t<RegExpr context=\"#pop!_statement_level3\" attribute=\"Normal Text\" String=\"&statementchar;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_statement_level3\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_level3\" lineEndContext=\"#pop!_rule_level3\">\n\t\t\t<IncludeRules context=\"_default_statement\"/>\n\t\t\t<RegExpr context=\"#pop!_rule_without_statement_level3\" attribute=\"Normal Text\" String=\"&statementchar;+\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_rule_level3\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Brackets4\" context=\"_rule_bracket_level4\" char=\"(\"/>\n\t\t\t<DetectChar attribute=\"Brackets3\" context=\"#pop\" char=\")\" />\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_rule_without_statement_level3\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_without_statement\"/>\n\t\t\t<IncludeRules context=\"_rule_level3\"/>\n\t\t</context>\n\n\t\t<context name=\"_rule_bracket_level4\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_without_statement_level4\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_bracket\"/>\n\t\t\t<RegExpr context=\"#pop!_statement_level4\" attribute=\"Normal Text\" String=\"&statementchar;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_statement_level4\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_level4\" lineEndContext=\"#pop!_rule_level4\">\n\t\t\t<IncludeRules context=\"_default_statement\"/>\n\t\t\t<RegExpr context=\"#pop!_rule_without_statement_level4\" attribute=\"Normal Text\" String=\"&statementchar;+\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_rule_level4\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Brackets5\" context=\"_rule_bracket_level5\" char=\"(\"/>\n\t\t\t<DetectChar attribute=\"Brackets4\" context=\"#pop\" char=\")\" />\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_rule_without_statement_level4\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_without_statement\"/>\n\t\t\t<IncludeRules context=\"_rule_level4\"/>\n\t\t</context>\n\n\t\t<context name=\"_rule_bracket_level5\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_without_statement_level5\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_bracket\"/>\n\t\t\t<RegExpr context=\"#pop!_statement_level5\" attribute=\"Normal Text\" String=\"&statementchar;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_statement_level5\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_level5\" lineEndContext=\"#pop!_rule_level5\">\n\t\t\t<IncludeRules context=\"_default_statement\"/>\n\t\t\t<RegExpr context=\"#pop!_rule_without_statement_level5\" attribute=\"Normal Text\" String=\"&statementchar;+\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_rule_level5\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Brackets6\" context=\"_rule_bracket_level6\" char=\"(\"/>\n\t\t\t<DetectChar attribute=\"Brackets5\" context=\"#pop\" char=\")\" />\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_rule_without_statement_level5\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_without_statement\"/>\n\t\t\t<IncludeRules context=\"_rule_level5\"/>\n\t\t</context>\n\n\t\t<context name=\"_rule_bracket_level6\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_without_statement_level6\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_bracket\"/>\n\t\t\t<RegExpr context=\"#pop!_statement_level6\" attribute=\"Normal Text\" String=\"&statementchar;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_statement_level6\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"#pop!_rule_level6\" lineEndContext=\"#pop!_rule_level6\">\n\t\t\t<IncludeRules context=\"_default_statement\"/>\n\t\t\t<RegExpr context=\"#pop!_rule_without_statement_level6\" attribute=\"Normal Text\" String=\"&statementchar;+\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_rule_level6\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar attribute=\"Brackets1\" context=\"_rule_bracket_level1\" char=\"(\"/>\n\t\t\t<DetectChar attribute=\"Brackets6\" context=\"#pop\" char=\")\" />\n\t\t\t<IncludeRules context=\"_default_rule\"/>\n\t\t</context>\n\t\t<context name=\"_rule_without_statement_level6\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_rule_without_statement\"/>\n\t\t\t<IncludeRules context=\"_rule_level6\"/>\n\t\t</context>\n\n\t\t<!-- File Contexts -->\n\t\t<!-- user:role:type -->\n\t\t<context name=\"_file_contexts\" attribute=\"File Contexts\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_role\" attribute=\"Normal Text\" char=\":\"/>\n\t\t\t<DetectSpaces context=\"#pop\" attribute=\"Normal Text\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_fc_role\" attribute=\"File Contexts\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_type\" attribute=\"Normal Text\" char=\":\"/>\n\t\t\t<DetectSpaces context=\"#pop\" attribute=\"Normal Text\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_fc_type\" attribute=\"File Contexts (Type Enforcement)\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_fc_mls\" attribute=\"File Contexts (Type Enforcement)\" String=\"&fullIdentifier;(?=:&mlsLevel;)\"/> <!-- Find Level/Range -->\n\t\t\t<RegExpr context=\"#pop\" attribute=\"File Contexts (Type Enforcement)\" String=\"&fullIdentifier;\"/>\n\t\t</context>\n\t\t<!-- (MLS/MCS) user:role:type:level -->\n\t\t<context name=\"_fc_mls\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_level_range_sen\" attribute=\"Normal Text\" char=\":\"/>\n\t\t</context>\n\t\t<context name=\"_fc_level_range_sen\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_range_cat\" attribute=\"Normal Text\" String=\":(?=&identifier;)\"/> <!-- Find Category -->\n\t\t\t<RegExpr context=\"#pop!_fc_level_sen\" attribute=\"Normal Text\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\.(?=&identifier;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<context name=\"_fc_level_range_cat\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_sen\" attribute=\"Normal Text\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"(\\.|\\s*,\\s*)(?=&identifier;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<!-- (MLS/MCS) user:role:type:level-level -->\n\t\t<context name=\"_fc_level_sen\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_cat\" attribute=\"Normal Text\" String=\":(?=&identifier;)\"/> <!-- Find Category -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\.(?=&identifier;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<context name=\"_fc_level_cat\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"(\\.|\\s*,\\s*)(?=&identifier;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<context name=\"_default_fc_level\" attribute=\"File Contexts\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"File Contexts\" String=\"\\w+\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"File Contexts\" char=\"-\"/>\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Text Quoted\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Path\"        defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Statements\"                defStyleNum=\"dsKeyword\"      bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Type Statements\"           defStyleNum=\"dsFunction\"     bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Policy Config. Statements\" defStyleNum=\"dsPreprocessor\" bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Access Keys\"               defStyleNum=\"dsWarning\"      bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Expression Keys\"           defStyleNum=\"dsVariable\"     bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Type Name Statements\"      defStyleNum=\"dsDataType\"     bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Booleans\"                  defStyleNum=\"dsExtension\"    bold=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Types\"                defStyleNum=\"dsDataType\"      bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Special Keys\"         defStyleNum=\"dsOthers\"        spellChecking=\"false\"/>\n\t\t<itemData name=\"File Contexts\"        defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n\t\t<itemData name=\"File Contexts (Type Enforcement)\" defStyleNum=\"dsInformation\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Other Keywords\"       defStyleNum=\"dsNormal\"        italic=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Number\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Hexadecimal\" defStyleNum=\"dsBaseN\"  spellChecking=\"false\"/>\n\n\t\t<!-- Obtained from \"scheme.xml\" -->\n\t\t<itemData name=\"Brackets1\" defStyleNum=\"dsNormal\" color=\"#ff0000\" bold=\"1\" />\n\t\t<itemData name=\"Brackets2\" defStyleNum=\"dsNormal\" color=\"#ff8800\" bold=\"1\" />\n\t\t<itemData name=\"Brackets3\" defStyleNum=\"dsNormal\" color=\"#888800\" bold=\"1\" />\n\t\t<itemData name=\"Brackets4\" defStyleNum=\"dsNormal\" color=\"#008800\" bold=\"1\" />\n\t\t<itemData name=\"Brackets5\" defStyleNum=\"dsNormal\" color=\"#000088\" bold=\"1\" />\n\t\t<itemData name=\"Brackets6\" defStyleNum=\"dsNormal\" color=\"#880088\" bold=\"1\" />\n\n\t\t<itemData name=\"Special Char\"                     defStyleNum=\"dsSpecialChar\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Special Char of Brackets (Paths)\" defStyleNum=\"dsAnnotation\"    spellChecking=\"false\"/>\n\t\t<itemData name=\"RegExp Brackets (Paths)\"          defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Open RegExp Brackets (Paths)\"     defStyleNum=\"dsSpecialString\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Text Quoted Open\"                 defStyleNum=\"dsString\"        underline=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<keywords casesensitive=\"true\" additionalDeliminator=\"&quot;&apos;&#096;\" weakDeliminator=\"-\"/>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\";\"/>\n\t</comments>\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/selinux-fc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!-- Identifier with M4 Arg. or variables -->\n\t<!ENTITY charIden         \"(\\$[@#]|[\\w\\-\\$\\*\\{\\}&#037;])\">\n\t<!ENTITY simpleIdentifier \"(\\$[@#]|[a-zA-Z\\$&#037;])&charIden;*\">\n\t<!ENTITY identifier       \"&simpleIdentifier;(\\.?&charIden;)*\">\n\t<!ENTITY startIdentifier  \"(\\b[a-zA-Z]|\\$[@#]|[\\$&#037;])&charIden;*(\\.?&charIden;)*\">\n\t<!ENTITY mlsLevel         \"&identifier;(\\s*:\\s*&identifier;(\\s*,\\s*&identifier;)*)?\">\n]>\n\n<!--\n  SELinux File Contexts Syntax Highlighting Definition for Kate\n  ==========================================================================================\n   This file is part of the KDE's KSyntaxHighlighting framework.\n\n   Copyright (c) 2018-2019 Nibaldo González S. (nibgonz@gmail.com)\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy of this\n   software and associated documentation files (the \"Software\"), to deal in the Software\n   without restriction, including without limitation the rights to use, copy, modify, merge,\n   publish, distribute, sublicense, and/or sell copies of the Software, and to permit\n   persons to whom the Software is furnished to do so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included\n   in all copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n   PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n   AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n  ==========================================================================================\n\n  SELinux policy files with definitions of file contexts:\n    - Labeling Policy Files: *.fc\n    - Policy Config. Files: file_contexts, file_contexts_*, file_contexts.local,\n        file_contexts.homedirs, file_contexts.template, homedir_template\n    - SE for Android Policy Config. Files: service_contexts, property_contexts,\n        hwservice_contexts\n    - Policy Build Files: initial_sid_contexts, genfs_contexts, fs_use\n\n  Change log:\n   * Version 4 [02-Apr-2019]: Remove one indentation.\n   * Version 3 [09-Sep-2018]:\n      - Update itemData's style for the new Solarized color schemes.\n   * Version 2 [28-Aug-2018]:\n      - Some improvements. RegExp and some rules are moved to \"selinux.xml\".\n      - Add statements keywords that use file contexts.\n   * Version 1 [26-Jan-2018, by Nibaldo González]:\n      - Initial version.\n-->\n\n<language name=\"SELinux File Contexts\"\n          version=\"4\"\n          kateversion=\"5.0\"\n          section=\"Other\"\n          extensions=\"*.fc;file_contexts;file_contexts_*;file_contexts.local;file_contexts.homedirs;file_contexts.template;homedir_template;property_contexts;service_contexts;hwservice_contexts;initial_sid_contexts;genfs_contexts;fs_use\"\n          priority=\"3\"\n          mimetype=\"\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\"\n          license=\"MIT\">\n\n<highlighting>\n\n\t<contexts>\n\n\t\t<context name=\"_normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_m4_preprocessor##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_find_comments##SELinux Policy\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"File Type\" String=\"(\\s|^)\\-[bcdpls\\-](?=\\s|$)\"/>\n\n\t\t\t<DetectChar context=\"_path_content\" attribute=\"Path\" char=\"/\"/>\n\t\t\t<DetectChar context=\"_quoted\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\n\t\t\t<!-- Content Quoted (M4).\n\t\t\t     NOTE: The default quotes (`text') are highlighted,\n\t\t\t     but another type of quotation mark can be used. -->\n\t\t\t<IncludeRules context=\"_m4_string_simple##SELinux Policy\"/> <!-- `simple text' -->\n\t\t\t<IncludeRules context=\"_m4_quotes##SELinux Policy\"/>\n\n\t\t\t<!-- File Contexts:  user:role:type:s0:c0 -->\n\t\t\t<RegExpr context=\"_fc_user\" attribute=\"User\" String=\"&startIdentifier;(?=(\\s*:\\s*&identifier;){2}(\\s*:\\s*&mlsLevel;(\\s*\\-\\s*&mlsLevel;)?)?\\b)\"/>\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Other Keywords\" String=\"&lt;&lt;none&gt;&gt;\"/>\n\n\t\t\t<!-- Java-Language-Style Package Name & other Names, for SE Android (this avoid highlighting keywords) -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Path\" String=\"\\.?[a-zA-Z]\\w*((\\.|::)\\w+)+(?=[^\\(]|$)\" firstNonSpace=\"true\"/>\n\n\t\t\t<!-- Functions -->\n\t\t\t<DetectChar context=\"_parentheses_content\" attribute=\"Normal Text\" char=\"(\" beginRegion=\"ParenthesesBlock\"/>\n\t\t\t<IncludeRules context=\"_refpolicy_keywords_fc##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_m4_builtin_keywords##SELinux Policy\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Function\" String=\"\\b[a-zA-Z][\\w\\-]*(?=\\()\"/>\n\n\t\t\t<IncludeRules context=\"_m4_special_arguments##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_common_special_char##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_line_continue_escape##SELinux Policy\"/>\n\n\t\t\t<!-- Default Variables -->\n\t\t\t<StringDetect context=\"_path_content\" attribute=\"Variable\" String=\"HOME_DIR\"/>\n\t\t\t<StringDetect context=\"_path_content\" attribute=\"Variable\" String=\"HOME_ROOT\"/>\n\n\t\t\t<DetectChar context=\"_path_content\" attribute=\"Path\" char=\"[\" lookAhead=\"true\"/>\n\t\t\t<Detect2Chars context=\"_path_content\" char=\"%\" char1=\"{\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"_path_content\" attribute=\"Path\" String=\"\\b[\\w\\[\\]\\.@\\=\\*\\-\\$%\\+!\\|&amp;\\^~\\{\\}&lt;&gt;\\?\\\\,]+[/\\\\\\*\\?\\[\\{]\" lookAhead=\"true\" firstNonSpace=\"true\"/>\n\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Bracket\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"}\" endRegion=\"Bracket\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Symbol\" String=\",;~[]\"/>\n\n\t\t\t<!-- Highlight only the statements that contain definition of file contexts -->\n\t\t\t<IncludeRules context=\"_statements_file_contexts##SELinux Policy\"/>\n\t\t\t<RegExpr context=\"#stay\" String=\"[a-zA-Z](\\.?[\\w\\-]+)*\"/>\n\t\t\t<HlCHex context=\"#pop\" attribute=\"Number\"/>\n\t\t\t<Int context=\"#pop\" attribute=\"Number\"/>\n\t\t</context>\n\n\t\t<context name=\"_parentheses_content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Normal Text\" char=\")\" endRegion=\"ParenthesesBlock\"/>\n\t\t\t<!-- File Contexts:  (user:role:type,s0) -->\n\t\t\t<RegExpr context=\"_gen_context_fc_user\" attribute=\"User\" String=\"&startIdentifier;(\\s*:\\s*&identifier;){2}(\\s*,\\s*&identifier;)*\\b\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_normal\"/>\n\t\t</context>\n\n\t\t<context name=\"_path_content\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_regex##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_variable\"/>\n\t\t</context>\n\t\t<context name=\"_quoted\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_other_variable\"/>\n\t\t\t<IncludeRules context=\"_regex_quoted##SELinux Policy\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Text Quoted Open\" String=\"[^\\s&quot;\\[\\(\\\\](?=\\s*$)\"/>\n\t\t</context>\n\n\t\t<!-- Variables of \"file_contexts\", M4 & Refpolicy -->\n\t\t<context name=\"_variable\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Variable\" String=\"HOME_DIR\"/>\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Variable\" String=\"HOME_ROOT\"/>\n\t\t\t<StringDetect context=\"#stay\" attribute=\"Variable\" String=\"USER\"/>\n\t\t\t<StringDetect context=\"#stay\" attribute=\"Variable\" String=\"ROLE\"/>\n\t\t\t<IncludeRules context=\"_other_variable\"/>\n\t\t</context>\n\t\t<context name=\"_other_variable\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Variable\" String=\"\\%\\{[a-zA-Z]\\w*\\}\"/>\n\t\t</context>\n\t\t<context name=\"_fc_variable\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"_m4_special_arguments##SELinux Policy\"/>\n\t\t\t<IncludeRules context=\"_other_variable\"/>\n\t\t</context>\n\n\t\t<!-- SELinux Security Contexts -->\n\n\t\t<!-- User -->\n\t\t<context name=\"_fc_user\" attribute=\"User\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_role\" attribute=\"Normal Text\" char=\":\"/>\n\t\t</context>\n\t\t<!-- Role -->\n\t\t<context name=\"_fc_role\" attribute=\"Role\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_type\" attribute=\"Normal Text\" char=\":\"/>\n\t\t</context>\n\t\t<!-- Type Enforcement -->\n\t\t<context name=\"_fc_type\" attribute=\"Type Enforcement\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_mls\" attribute=\"Type Enforcement\" String=\"\\s*&identifier;(?=\\s*:\\s*&mlsLevel;)\"/> <!-- Find MLS/MCS -->\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Type Enforcement\" String=\"\\s*&identifier;\"/>\n\t\t</context>\n\n\t\t<!-- Start MLS/MCS -->\n\t\t<context name=\"_fc_mls\" attribute=\"MLS/MCS Level\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<DetectChar context=\"#pop!_fc_find_level_range\" attribute=\"Normal Text\" char=\":\"/>\n\t\t\t<DetectSpaces context=\"#stay\" attribute=\"Normal Text\"/>\n\t\t</context>\n\t\t<context name=\"_fc_find_level_range\" attribute=\"MLS/MCS Level\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_fc_level_range\">\n\t\t\t<DetectSpaces context=\"#stay\" attribute=\"Normal Text\"/>\n\t\t</context>\n\t\t<!-- MLS/MCS Range (Sensitivity:Category - Sensitivity:Category) -->\n\t\t<!-- Sensitivity -->\n\t\t<context name=\"_fc_level_range\" attribute=\"MLS/MCS Level\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_range_cat\" attribute=\"Normal Text\" String=\"\\s*:\\s*(?=&identifier;)\"/> <!-- Find Category -->\n\t\t\t<RegExpr context=\"#pop!_fc_level\" attribute=\"Normal Text\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<IncludeRules context=\"_default_level\"/>\n\t\t</context>\n\t\t<!-- Category -->\n\t\t<context name=\"_fc_level_range_cat\" attribute=\"MLS/MCS Level\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_level\" attribute=\"Normal Text\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\s*,\\s*(?=&simpleIdentifier;)\"/>\n\t\t\t<IncludeRules context=\"_default_level\"/>\n\t\t</context>\n\t\t<!-- MLS/MCS Level (Sensitivity:Category) -->\n\t\t<!-- Sensitivity -->\n\t\t<context name=\"_fc_level\" attribute=\"MLS/MCS Level\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_cat\" attribute=\"Normal Text\" String=\"\\s*:\\s*(?=&identifier;)\"/> <!-- Find Category -->\n\t\t\t<IncludeRules context=\"_default_level\"/>\n\t\t</context>\n\t\t<!-- Category -->\n\t\t<context name=\"_fc_level_cat\" attribute=\"MLS/MCS Level\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\s*,\\s*(?=&simpleIdentifier;)\"/>\n\t\t\t<IncludeRules context=\"_default_level\"/>\n\t\t</context>\n\n\t\t<context name=\"_default_level\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\s*\\.\\s*(?=&charIden;)\"/>\n\t\t\t<DetectChar  context=\"_default_level_arg\" attribute=\"MLS/MCS Level\" char=\"$\"/>\n\t\t\t<DetectChar  context=\"_default_level_var\" attribute=\"MLS/MCS Level\" char=\"%\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"MLS/MCS Level\" String=\"\\w+\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"MLS/MCS Level\" char=\"-\"/>\n\t\t</context>\n\t\t<context name=\"_default_level_arg\" attribute=\"MLS/MCS Level\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<!-- M4 Args. It is not exact -->\n\t\t\t<Int context=\"#pop\" attribute=\"MLS/MCS Level\"/>\n\t\t\t<AnyChar context=\"#pop\" attribute=\"MLS/MCS Level\" String=\"#*@\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"MLS/MCS Level\" String=\"\\{\\d+\\}\"/>\n\t\t</context>\n\t\t<context name=\"_default_level_var\" attribute=\"MLS/MCS Level\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"MLS/MCS Level\" String=\"{[A-Za-z]\\w*\\}\"/>\n\t\t</context>\n\n\t\t<context name=\"_after_fc\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\s*:\\s*\\w*\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"[:\\.\\w]+\"/>\n\t\t</context>\n\n\t\t<!-- Within function \"gen_context\" (highlight variables and M4 args.) -->\n\t\t<!-- User -->\n\t\t<context name=\"_gen_context_fc_user\" attribute=\"User\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_gen_context_role\" attribute=\"Normal Text\" char=\":\"/>\n\t\t\t<IncludeRules context=\"_fc_variable\"/>\n\t\t</context>\n\t\t<!-- Role -->\n\t\t<context name=\"_gen_context_role\" attribute=\"Role\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_before_gen_context_type\" attribute=\"Normal Text\" char=\":\"/>\n\t\t\t<IncludeRules context=\"_fc_variable\"/>\n\t\t</context>\n\t\t<!-- Type Enforcement -->\n\t\t<context name=\"_before_gen_context_type\" attribute=\"Type Enforcement\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_gen_context_type\">\n\t\t\t<DetectSpaces context=\"#stay\" attribute=\"Normal Text\"/>\n\t\t</context>\n\t\t<context name=\"_gen_context_type\" attribute=\"Type Enforcement\"\n\t\t         lineEndContext=\"#pop!_fc_find_comma\" fallthrough=\"true\" fallthroughContext=\"#pop!_fc_find_comma\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_range\" attribute=\"Normal Text\" String=\"\\s*:\\s*(?=&identifier;)\"/> <!-- Find MLS/MCS -->\n\t\t\t<IncludeRules context=\"_fc_variable\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Type Enforcement\" String=\"[\\w\\-]+\"/>\n\t\t</context>\n\t\t<!-- Comma after file contexts -->\n\t\t<context name=\"_fc_find_comma\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_after_comma\" attribute=\"Normal Text\" char=\",\"/>\n\t\t\t<RegExpr context=\"#pop\" String=\"\\s*[^,\\s]\" lookAhead=\"true\"/>\n\t\t\t<DetectSpaces />\n\t\t</context>\n\t\t<context name=\"_fc_after_comma\" attribute=\"Normal Text\"\n\t\t         lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!_gen_context_level\">\n\t\t\t<DetectSpaces context=\"#stay\"/>\n\t\t</context>\n\t\t<!-- MLS/MCS -->\n\t\t<context name=\"_gen_context_level\" attribute=\"MLS/MCS Level\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\-\\s*(?=&simpleIdentifier;)\"/>\n\t\t\t<IncludeRules context=\"_fc_variable\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"MLS/MCS Level\" String=\"\\w+\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"MLS/MCS Level\" char=\"-\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Normal Text\" String=\":.,\"/>\n\t\t\t<DetectSpaces />\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Text Quoted\" defStyleNum=\"dsString\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Path\"        defStyleNum=\"dsNormal\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Variable\"    defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n\t\t<itemData name=\"File Type\"   defStyleNum=\"dsKeyword\"  spellChecking=\"false\"/>\n\n\t\t<itemData name=\"User\"             defStyleNum=\"dsPreprocessor\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Role\"             defStyleNum=\"dsInformation\"    spellChecking=\"false\"/>\n\t\t<itemData name=\"Type Enforcement\" defStyleNum=\"dsAttribute\"      spellChecking=\"false\"/>\n\t\t<itemData name=\"MLS/MCS Level\"    defStyleNum=\"dsVerbatimString\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Other Keywords\"   defStyleNum=\"dsNormal\"   italic=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Function\"         defStyleNum=\"dsNormal\"   bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Symbol\"           defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Number\"           defStyleNum=\"dsComment\"  italic=\"0\" underline=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Text Quoted Open\" defStyleNum=\"dsString\"   underline=\"1\" spellChecking=\"false\"/>\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<keywords casesensitive=\"true\" additionalDeliminator=\"&quot;&apos;&#096;\" weakDeliminator=\"*?+.-\"/>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\"/>\n\t</comments>\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/selinux.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY identifier        \"[a-zA-Z][\\w\\-]*(\\.?[\\w\\-])*\">\n\t<!ENTITY versionIdentifier \"\\d+(\\.[\\d_\\.]*)?\">\n\t<!-- Documentation -->\n\t<!ENTITY tagName           \"([a-zA-Z_]([\\w\\-\\.]*\\w)?:)?[a-zA-Z_]([\\w\\-\\.]*\\w)?\">\n\t<!-- PCRE 2 RegExp -->\n\t<!ENTITY specialChars      \"*?.+\">\n\t<!ENTITY capGroup          \"\\?(&lt;[\\=!]|P?&lt;\\w+&gt;|&apos;\\w+&apos;|[\\=!:&gt;\\|R&amp;\\-#])\"> <!-- Capturing & Groups -->\n\t<!-- M4 Macros -->\n\t<!ENTITY m4Args            \"\\$([1-9]\\d*|0|[\\#\\*\\@]|\\{([1-9]\\d*|0)\\})\">\n\t<!ENTITY m4Quotes          \"`'‘’“”\"> <!-- Default Quotes (`') & Other Common Quotes -->\n\t<!-- For File Contexts -->\n\t<!ENTITY identifierWithArg \"([a-zA-Z]|&m4Args;)(\\.?([\\w\\-]|&m4Args;))*\">\n\t<!ENTITY mlsLevel          \"&identifierWithArg;(:&identifierWithArg;(\\s*,\\s*&identifierWithArg;)*)?\">\n]>\n\n<!--\n  SELinux Security Policies Syntax Highlighting Definition for Kate\n  ==========================================================================================\n   This file is part of the KDE's KSyntaxHighlighting framework.\n\n   Copyright (c) 2018 Nibaldo González S. (nibgonz@gmail.com)\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy of this\n   software and associated documentation files (the \"Software\"), to deal in the Software\n   without restriction, including without limitation the rights to use, copy, modify, merge,\n   publish, distribute, sublicense, and/or sell copies of the Software, and to permit\n   persons to whom the Software is furnished to do so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included\n   in all copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n   PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n   AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n  ==========================================================================================\n\n  Last update: checkpolicy 2.8, Policy Version 31\n  Obtained from the SELinux checkpolicy parser:\n    https://github.com/SELinuxProject/selinux/blob/master/checkpolicy/policy_parse.y\n    https://github.com/SELinuxProject/selinux/blob/master/checkpolicy/policy_scan.l\n  More details:\n    https://selinuxproject.org/page/PolicyLanguage#Kernel_Policy_Language\n    https://selinuxproject.org/page/Category:Notebook\n\n  NOTE:\n  - This file is required by \"selinux-cil.xml\" and \"selinux-fc.xml\".\n  - Only the most relevant policy build files and config. files are highlighted by\n    default, since some have very generic names. Files with definition of\n    file contexts are highlighted by \"selinux-fc.xml\".\n\n  Change log:\n\t* Version 2 [09-Sep-2018]:\n\t\t- Update itemData's style for the new Solarized color schemes.\n\t* Version 1 [28-Aug-2018, by Nibaldo González]:\n\t\t- Initial version. Syntax based on checkpolicy v2.8.\n-->\n\n<language name=\"SELinux Policy\"\n          version=\"2\"\n          kateversion=\"5.0\"\n          section=\"Sources\"\n          extensions=\"*.te;*.if;*.spt;policy.conf;access_vectors;mls;mcs;mls_macros;te_macros;policy_capabilities;seapp_contexts;port_contexts\"\n          priority=\"6\"\n          mimetype=\"\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\"\n          license=\"MIT\">\n\n<highlighting>\n\n\t<list name=\"self\">\n\t\t<item>SELF</item>\n\t\t<item>self</item>\n\t</list>\n\t<list name=\"booleans\">\n\t\t<item>FALSE</item>\n\t\t<item>false</item>\n\t\t<item>TRUE</item>\n\t\t<item>true</item>\n\t</list>\n\n\t<!-- Statements -->\n\t<list name=\"statements_access\">\n\t\t<item>ALLOW</item>\n\t\t<item>allow</item>\n\t\t<item>NEVERALLOW</item>\n\t\t<item>neverallow</item>\n\t\t<item>AUDITALLOW</item>\n\t\t<item>auditallow</item>\n\t\t<item>AUDITDENY</item>\n\t\t<item>auditdeny</item>\n\t\t<item>DONTAUDIT</item>\n\t\t<item>dontaudit</item>\n\t\t<item>ALLOWXPERM</item>\n\t\t<item>allowxperm</item>\n\t\t<item>AUDITALLOWXPERM</item>\n\t\t<item>auditallowxperm</item>\n\t\t<item>DONTAUDITXPERM</item>\n\t\t<item>dontauditxperm</item>\n\t\t<item>NEVERALLOWXPERM</item>\n\t\t<item>neverallowxperm</item>\n\t</list>\n\t<list name=\"statements\">\n\t\t<item>ATTRIBUTE</item>\n\t\t<item>attribute</item>\n\t\t<item>ATTRIBUTE_ROLE</item>\n\t\t<item>attribute_role</item>\n\t\t<item>BOOL</item>\n\t\t<item>bool</item>\n\t\t<item>CATEGORY</item>\n\t\t<item>category</item>\n\t\t<item>COMMON</item>\n\t\t<item>common</item>\n\t\t<item>DOMINANCE</item>\n\t\t<item>dominance</item>\n\t\t<item>EXPANDATTRIBUTE</item>\n\t\t<item>expandattribute</item>\n\t\t<item>MODULE</item>\n\t\t<item>module</item>\n\t\t<item>PERMISSIVE</item>\n\t\t<item>permissive</item>\n\t\t<item>ROLE</item>\n\t\t<item>role</item>\n\t\t<item>ROLEATTRIBUTE</item>\n\t\t<item>roleattribute</item>\n\t\t<item>SENSITIVITY</item>\n\t\t<item>sensitivity</item>\n\t\t<item>TUNABLE</item>\n\t\t<item>tunable</item>\n\t\t<item>TYPE</item>\n\t\t<item>type</item>\n\t\t<item>TYPEALIAS</item>\n\t\t<item>typealias</item>\n\t\t<item>TYPEATTRIBUTE</item>\n\t\t<item>typeattribute</item>\n\t\t<item>TYPEBOUNDS</item>\n\t\t<item>typebounds</item>\n\t\t<item>USER</item>\n\t\t<item>user</item>\n\t\t<!-- Conditional -->\n\t\t<item>IF</item>\n\t\t<item>if</item>\n\t\t<item>ELSE</item>\n\t\t<item>else</item>\n\t\t<item>require</item>\n\t\t<item>REQUIRE</item>\n\t\t<item>optional</item>\n\t\t<item>OPTIONAL</item>\n\t</list>\n\t<list name=\"statements_fc\">\n\t\t<item>DEVICETREECON</item>\n\t\t<item>devicetreecon</item>\n\t\t<item>FS_USE_TASK</item>\n\t\t<item>fs_use_task</item>\n\t\t<item>FS_USE_TRANS</item>\n\t\t<item>fs_use_trans</item>\n\t\t<item>FS_USE_XATTR</item>\n\t\t<item>fs_use_xattr</item>\n\t\t<item>FSCON</item>\n\t\t<item>fscon</item>\n\t\t<item>GENFSCON</item>\n\t\t<item>genfscon</item>\n\t\t<item>IBENDPORTCON</item>\n\t\t<item>ibendportcon</item>\n\t\t<item>IBPKEYCON</item>\n\t\t<item>ibpkeycon</item>\n\t\t<item>IOMEMCON</item>\n\t\t<item>iomemcon</item>\n\t\t<item>IOPORTCON</item>\n\t\t<item>ioportcon</item>\n\t\t<item>NETIFCON</item>\n\t\t<item>netifcon</item>\n\t\t<item>NODECON</item>\n\t\t<item>nodecon</item>\n\t\t<item>PCIDEVICECON</item>\n\t\t<item>pcidevicecon</item>\n\t\t<item>PIRQCON</item>\n\t\t<item>pirqcon</item>\n\t\t<item>PORTCON</item>\n\t\t<item>portcon</item>\n\t\t<item>SID</item>\n\t\t<item>sid</item>\n\t</list>\n\t<list name=\"statements_def\">\n\t\t<item>CLASS</item>\n\t\t<item>class</item>\n\t</list>\n\t<list name=\"statements_mls_level_def\">\n\t\t<item>LEVEL</item>\n\t\t<item>level</item>\n\t</list>\n\t<!-- Statements with special contexts -->\n\t<list name=\"statements_policycap\">\n\t\t<item>POLICYCAP</item>\n\t\t<item>policycap</item>\n\t</list>\n\t<list name=\"statements_type\">\n\t\t<item>TYPE_CHANGE</item>\n\t\t<item>type_change</item>\n\t\t<item>TYPE_MEMBER</item>\n\t\t<item>type_member</item>\n\t\t<item>TYPE_TRANSITION</item>\n\t\t<item>type_transition</item>\n\t</list>\n\t<list name=\"statements_role_transition\">\n\t\t<item>ROLE_TRANSITION</item>\n\t\t<item>role_transition</item>\n\t</list>\n\t<list name=\"statements_range_transition\">\n\t\t<item>RANGE_TRANSITION</item>\n\t\t<item>range_transition</item>\n\t</list>\n\t<list name=\"statements_default\">\n\t\t<item>DEFAULT_USER</item>\n\t\t<item>default_user</item>\n\t\t<item>DEFAULT_ROLE</item>\n\t\t<item>default_role</item>\n\t\t<item>DEFAULT_TYPE</item>\n\t\t<item>default_type</item>\n\t</list>\n\t<list name=\"statements_default_range\">\n\t\t<item>DEFAULT_RANGE</item>\n\t\t<item>default_range</item>\n\t</list>\n\t<list name=\"statements_cexpr\">\n\t\t<item>CONSTRAIN</item>\n\t\t<item>constrain</item>\n\t\t<item>VALIDATETRANS</item>\n\t\t<item>validatetrans</item>\n\t\t<item>MLSCONSTRAIN</item>\n\t\t<item>mlsconstrain</item>\n\t\t<item>MLSVALIDATETRANS</item>\n\t\t<item>mlsvalidatetrans</item>\n\t</list>\n\n\t<!-- Other reserved keywords -->\n\t<list name=\"keywords\">\n\t\t<item>ALIAS</item>\n\t\t<item>alias</item>\n\t\t<item>CLONE</item> <!-- Deprecated -->\n\t\t<item>clone</item>\n\t\t<item>INHERITS</item>\n\t\t<item>inherits</item>\n\t\t<item>ROLES</item>\n\t\t<item>roles</item>\n\t\t<item>TYPES</item>\n\t\t<item>types</item>\n\t</list>\n\t<list name=\"mls_range_def\">\n\t\t<item>RANGE</item>\n\t\t<item>range</item>\n\t</list>\n\n\t<list name=\"source_target\">\n\t\t<item>SOURCE</item>\n\t\t<item>source</item>\n\t\t<item>TARGET</item>\n\t\t<item>target</item>\n\t</list>\n\t<list name=\"sameuser\">\n\t\t<item>SAMEUSER</item>\n\t\t<item>sameuser</item>\n\t</list>\n\t<list name=\"range\">\n\t\t<item>low-high</item>\n\t\t<item>LOW-HIGH</item>\n\t\t<item>high</item>\n\t\t<item>HIGH</item>\n\t\t<item>low</item>\n\t\t<item>LOW</item>\n\t</list>\n\n\t<list name=\"cond_operators\">\n\t\t<item>OR</item>\n\t\t<item>or</item>\n\t\t<item>AND</item>\n\t\t<item>and</item>\n\t\t<item>NOT</item>\n\t\t<item>not</item>\n\t\t<item>xor</item>\n\t\t<item>XOR</item>\n\t\t<item>eq</item>\n\t\t<item>EQ</item>\n\t</list>\n\t<list name=\"cexpr_operators\">\n\t\t<item>eq</item>\n\t\t<item>EQ</item>\n\t\t<item>dom</item>\n\t\t<item>DOM</item>\n\t\t<item>domby</item>\n\t\t<item>DOMBY</item>\n\t\t<item>INCOMP</item>\n\t\t<item>incomp</item>\n\t</list>\n\t<list name=\"cexpr_keywords\">\n\t\t<item>r1</item>\n\t\t<item>R1</item>\n\t\t<item>r2</item>\n\t\t<item>R2</item>\n\t\t<item>r3</item>\n\t\t<item>R3</item>\n\t\t<item>u1</item>\n\t\t<item>U1</item>\n\t\t<item>u2</item>\n\t\t<item>U2</item>\n\t\t<item>u3</item>\n\t\t<item>U3</item>\n\t\t<item>t1</item>\n\t\t<item>T1</item>\n\t\t<item>t2</item>\n\t\t<item>T2</item>\n\t\t<item>t3</item>\n\t\t<item>T3</item>\n\t\t<item>l1</item>\n\t\t<item>L1</item>\n\t\t<item>l2</item>\n\t\t<item>L2</item>\n\t\t<item>h1</item>\n\t\t<item>H1</item>\n\t\t<item>h2</item>\n\t\t<item>H2</item>\n\t</list>\n\n\t<!-- Policy Capabilities: /sys/fs/selinux/policy_capabilities/\n\t     More details: https://selinuxproject.org/page/NB_LSM#SELinux_Filesystem -->\n\t<list name=\"policy_capabilities\">\n\t\t<item>always_check_network</item>\n\t\t<item>always_use_network</item>\n\t\t<item>cgroup_seclabel</item>\n\t\t<item>extended_socket_class</item>\n\t\t<item>network_peer_controls</item>\n\t\t<item>nnp_nosuid_transition</item>\n\t\t<item>open_perms</item>\n\t\t<item>redhat1</item>\n\t</list>\n\n\t<!-- Access Vectors Permissions.\n\t     More details:\n\t       https://selinuxproject.org/page/ObjectClassesPerms\n\t     Permissions & Classes:\n\t       https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/security/selinux/include/classmap.h\n\t       https://github.com/SELinuxProject/refpolicy/blob/master/policy/flask/access_vectors -->\n\t<list name=\"av_permissions\">\n\t\t<item>accept</item>\n\t\t<item>acceptfrom</item>\n\t\t<item>access</item>\n\t\t<item>acquire_svc</item>\n\t\t<item>add</item>\n\t\t<item>add_child</item>\n\t\t<item>add_color</item>\n\t\t<item>add_glyph</item>\n\t\t<item>add_name</item>\n\t\t<item>admin</item>\n\t\t<item>append</item>\n\t\t<item>associate</item>\n\t\t<item>attach_queue</item>\n\t\t<item>audit_access</item>\n\t\t<item>audit_control</item>\n\t\t<item>audit_read</item>\n\t\t<item>audit_write</item>\n\t\t<item>bell</item>\n\t\t<item>bind</item>\n\t\t<item>blend</item>\n\t\t<item>block_suspend</item>\n\t\t<item>call</item>\n\t\t<item>check_context</item>\n\t\t<item>chfn</item>\n\t\t<item>chown</item>\n\t\t<item>chsh</item>\n\t\t<item>compute_av</item>\n\t\t<item>compute_create</item>\n\t\t<item>compute_member</item>\n\t\t<item>compute_relabel</item>\n\t\t<item>compute_user</item>\n\t\t<item>connect</item>\n\t\t<item>connectto</item>\n\t\t<item>contains</item>\n\t\t<item>copy</item>\n\t\t<item>create</item>\n\t\t<item>create_files_as</item>\n\t\t<item>crontab</item>\n\t\t<item>dac_override</item>\n\t\t<item>dac_read_search</item>\n\t\t<item>dccp_recv</item>\n\t\t<item>dccp_send</item>\n\t\t<item>debug</item>\n\t\t<item>delete</item>\n\t\t<item>destroy</item>\n\t\t<item>disable</item>\n\t\t<item>drop</item>\n\t\t<item>dyntransition</item>\n\t\t<item>egress</item>\n\t\t<item>enable</item>\n\t\t<item>enforce_dest</item>\n\t\t<item>enqueue</item>\n\t\t<item>entrypoint</item>\n\t\t<item>execheap</item>\n\t\t<item>execmem</item>\n\t\t<item>execmod</item>\n\t\t<item>execstack</item>\n\t\t<item>execute</item>\n\t\t<item>execute_no_trans</item>\n\t\t<item>expand</item>\n\t\t<item>export</item>\n\t\t<item>force_cursor</item>\n\t\t<item>fork</item>\n\t\t<item>forward_in</item>\n\t\t<item>forward_out</item>\n\t\t<item>fowner</item>\n\t\t<item>freeze</item>\n\t\t<item>fsetid</item>\n\t\t<item>get_property</item>\n\t\t<item>get_value</item>\n\t\t<item>getattr</item>\n\t\t<item>getcap</item>\n\t\t<item>getfocus</item>\n\t\t<item>getgrp</item>\n\t\t<item>gethost</item>\n\t\t<item>getopt</item>\n\t\t<item>getpgid</item>\n\t\t<item>getpwd</item>\n\t\t<item>getrlimit</item>\n\t\t<item>getsched</item>\n\t\t<item>getserv</item>\n\t\t<item>getsession</item>\n\t\t<item>getstat</item>\n\t\t<item>grab</item>\n\t\t<item>halt</item>\n\t\t<item>hide</item>\n\t\t<item>hide_cursor</item>\n\t\t<item>impersonate</item>\n\t\t<item>implement</item>\n\t\t<item>import</item>\n\t\t<item>ingress</item>\n\t\t<item>insert</item>\n\t\t<item>install</item>\n\t\t<item>install_module</item>\n\t\t<item>ioctl</item>\n\t\t<item>ipc_info</item>\n\t\t<item>ipc_lock</item>\n\t\t<item>ipc_owner</item>\n\t\t<item>kill</item>\n\t\t<item>lease</item>\n\t\t<item>link</item>\n\t\t<item>linux_immutable</item>\n\t\t<item>list_child</item>\n\t\t<item>list_property</item>\n\t\t<item>listen</item>\n\t\t<item>load_module</item>\n\t\t<item>load_policy</item>\n\t\t<item>lock</item>\n\t\t<item>mac_admin</item> <!-- Unused by SELinux -->\n\t\t<item>mac_override</item> <!-- Unused by SELinux -->\n\t\t<item>manage</item>\n\t\t<item>manage_subnet</item>\n\t\t<item>map</item>\n\t\t<item>map_create</item>\n\t\t<item>map_read</item>\n\t\t<item>map_write</item>\n\t\t<item>mknod</item>\n\t\t<item>mmap_zero</item>\n\t\t<item>module_load</item>\n\t\t<item>module_request</item>\n\t\t<item>mount</item>\n\t\t<item>mounton</item>\n\t\t<item>name_bind</item>\n\t\t<item>name_connect</item>\n\t\t<item>net_admin</item>\n\t\t<item>net_bind_service</item>\n\t\t<item>net_broadcast</item>\n\t\t<item>net_raw</item>\n\t\t<item>newconn</item>\n\t\t<item>next_value</item>\n\t\t<item>nlmsg_read</item>\n\t\t<item>nlmsg_readpriv</item>\n\t\t<item>nlmsg_relay</item>\n\t\t<item>nlmsg_tty_audit</item>\n\t\t<item>nlmsg_write</item>\n\t\t<item>nnp_transition</item>\n\t\t<item>noatsecure</item>\n\t\t<item>node_bind</item>\n\t\t<item>nosuid_transition</item>\n\t\t<item>open</item>\n\t\t<item>override</item>\n\t\t<item>passwd</item>\n\t\t<item>paste</item>\n\t\t<item>paste_after_confirm</item>\n\t\t<item>polmatch</item>\n\t\t<item>prog_load</item>\n\t\t<item>prog_run</item>\n\t\t<item>ptrace</item>\n\t\t<item>query</item>\n\t\t<item>quotaget</item>\n\t\t<item>quotamod</item>\n\t\t<item>quotaon</item>\n\t\t<item>rawip_recv</item>\n\t\t<item>rawip_send</item>\n\t\t<item>read</item>\n\t\t<item>read_policy</item>\n\t\t<item>reboot</item>\n\t\t<item>receive</item>\n\t\t<item>record</item>\n\t\t<item>recv</item>\n\t\t<item>recv_msg</item>\n\t\t<item>recvfrom</item>\n\t\t<item>relabelfrom</item>\n\t\t<item>relabelto</item>\n\t\t<item>reload</item>\n\t\t<item>remount</item>\n\t\t<item>remove</item>\n\t\t<item>remove_child</item>\n\t\t<item>remove_color</item>\n\t\t<item>remove_glyph</item>\n\t\t<item>remove_name</item>\n\t\t<item>rename</item>\n\t\t<item>reparent</item>\n\t\t<item>rlimitinh</item>\n\t\t<item>rmdir</item>\n\t\t<item>rootok</item>\n\t\t<item>saver_getattr</item>\n\t\t<item>saver_hide</item>\n\t\t<item>saver_setattr</item>\n\t\t<item>saver_show</item>\n\t\t<item>search</item>\n\t\t<item>select</item>\n\t\t<item>send</item>\n\t\t<item>send_msg</item>\n\t\t<item>sendto</item>\n\t\t<item>set_context_mgr</item>\n\t\t<item>set_property</item>\n\t\t<item>set_value</item>\n\t\t<item>setattr</item>\n\t\t<item>setbool</item>\n\t\t<item>setcap</item>\n\t\t<item>setcheckreqprot</item>\n\t\t<item>setcontext</item>\n\t\t<item>setcurrent</item>\n\t\t<item>setenforce</item>\n\t\t<item>setexec</item>\n\t\t<item>setfcap</item>\n\t\t<item>setfocus</item>\n\t\t<item>setfscreate</item>\n\t\t<item>setgid</item>\n\t\t<item>setkeycreate</item>\n\t\t<item>setopt</item>\n\t\t<item>setpcap</item>\n\t\t<item>setpgid</item>\n\t\t<item>setrlimit</item>\n\t\t<item>setsched</item>\n\t\t<item>setsecparam</item>\n\t\t<item>setsockcreate</item>\n\t\t<item>setuid</item>\n\t\t<item>share</item>\n\t\t<item>shmemgrp</item>\n\t\t<item>shmemhost</item>\n\t\t<item>shmempwd</item>\n\t\t<item>shmemserv</item>\n\t\t<item>show</item>\n\t\t<item>show_cursor</item>\n\t\t<item>shutdown</item>\n\t\t<item>sigchld</item>\n\t\t<item>siginh</item>\n\t\t<item>sigkill</item>\n\t\t<item>signal</item>\n\t\t<item>signull</item>\n\t\t<item>sigstop</item>\n\t\t<item>start</item>\n\t\t<item>status</item>\n\t\t<item>stop</item>\n\t\t<item>swapon</item>\n\t\t<item>sys_admin</item>\n\t\t<item>sys_boot</item>\n\t\t<item>sys_chroot</item>\n\t\t<item>sys_module</item>\n\t\t<item>sys_nice</item>\n\t\t<item>sys_pacct</item>\n\t\t<item>sys_ptrace</item>\n\t\t<item>sys_rawio</item>\n\t\t<item>sys_resource</item>\n\t\t<item>sys_time</item>\n\t\t<item>sys_tty_config</item>\n\t\t<item>syslog</item>\n\t\t<item>syslog_console</item>\n\t\t<item>syslog_mod</item>\n\t\t<item>syslog_read</item>\n\t\t<item>tcp_recv</item>\n\t\t<item>tcp_send</item>\n\t\t<item>transfer</item>\n\t\t<item>transition</item>\n\t\t<item>translate</item>\n\t\t<item>udp_recv</item>\n\t\t<item>udp_send</item>\n\t\t<item>uninstall</item>\n\t\t<item>unix_read</item>\n\t\t<item>unix_write</item>\n\t\t<item>unlink</item>\n\t\t<item>unmount</item>\n\t\t<item>update</item>\n\t\t<item>use</item>\n\t\t<item>use_as_override</item>\n\t\t<item>validate_trans</item>\n\t\t<item>view</item>\n\t\t<item>wake_alarm</item>\n\t\t<item>write</item>\n\t\t<!-- Deprecated: flow_in, flow_out, get_param, set_param -->\n\t</list>\n\n\t<!-- Additional AV Permissions for Android.\n\t     Permissions & Classes:\n\t       https://android.googlesource.com/platform/system/sepolicy/+/master/private/access_vectors\n\t       https://android.googlesource.com/platform/system/security/+/master/keystore/permissions.cpp\n\t     More details:\n\t       https://selinuxproject.org/page/NB_SEforAndroid_1#Android_Classes_and_Permissions -->\n\t<list name=\"av_permissions_android\">\n\t\t<item>add_auth</item>\n\t\t<item>clear_uid</item>\n\t\t<item>closeDecryptSession</item>\n\t\t<item>consumeRights</item>\n\t\t<item>decrypt</item>\n\t\t<item>duplicate</item>\n\t\t<item>exist</item>\n\t\t<item>finalizeDecryptUnit</item>\n\t\t<item>find</item>\n\t\t<item>gen_unique_id</item>\n\t\t<item>get</item>\n\t\t<item>get_state</item>\n\t\t<item>grant</item>\n\t\t<item>initializeDecryptUnit</item>\n\t\t<item>is_empty</item>\n\t\t<item>list</item>\n\t\t<item>openDecryptSession</item>\n\t\t<item>password</item>\n\t\t<item>pread</item>\n\t\t<item>reset</item>\n\t\t<item>set</item>\n\t\t<item>setPlaybackStatus</item>\n\t\t<item>sign</item>\n\t\t<item>unlock</item>\n\t\t<item>user_changed</item>\n\t\t<item>verify</item>\n\t</list>\n\n\t<!-- FS & VFS Types -->\n\t<list name=\"filesystem\">\n\t\t<!-- Stackable FS -->\n\t\t<item>ecryptfs</item>\n\t\t<item>cryfs</item>\n\t\t<item>encfs</item>\n\t\t<item>overlayfs</item>\n\t\t<item>unionfs</item>\n\t\t<!-- Specialpurpose FS -->\n\t\t<item>devtmpfs</item>\n\t\t<item>ramfs</item>\n\t\t<item>tmpfs</item>\n\t\t<!-- Block-based, Network & Pseudo FS -->\n\t\t<item>adfs</item>\n\t\t<item>affs</item>\n\t\t<item>afs</item>\n\t\t<item>apfs</item>\n\t\t<item>apparmorfs</item>\n\t\t<item>autofs</item>\n\t\t<item>bdev</item>\n\t\t<item>bfs</item>\n\t\t<item>bpf</item>\n\t\t<item>btrfs</item>\n\t\t<item>cachefs</item>\n\t\t<item>ceph</item>\n\t\t<item>cgroup2</item>\n\t\t<item>cgroup</item>\n\t\t<item>cifs</item>\n\t\t<item>coda</item>\n\t\t<item>coherent</item>\n\t\t<item>configfs</item>\n\t\t<item>cpuset</item>\n\t\t<item>cramfs</item>\n\t\t<item>debugfs</item>\n\t\t<item>devfs</item>\n\t\t<item>devpts</item>\n\t\t<item>efs</item>\n\t\t<item>exfat</item>\n\t\t<item>ext2</item>\n\t\t<item>ext3</item>\n\t\t<item>ext4</item>\n\t\t<item>f2fs</item>\n\t\t<item>fatx</item>\n\t\t<item>fuse</item>\n\t\t<item>fuseblk</item>\n\t\t<item>fusectl</item>\n\t\t<item>futexfs</item>\n\t\t<item>gfs</item>\n\t\t<item>hfs</item>\n\t\t<item>hfsplus</item>\n\t\t<item>hpfs</item>\n\t\t<item>hugetlbfs</item>\n\t\t<item>ifs</item>\n\t\t<item>iso9660</item>\n\t\t<item>jffs2</item>\n\t\t<item>jffs</item>\n\t\t<item>jfs</item>\n\t\t<item>kernfs</item>\n\t\t<item>lvm2</item>\n\t\t<item>minix</item>\n\t\t<item>mqueue</item>\n\t\t<item>msdos</item>\n\t\t<item>ncpfs</item>\n\t\t<item>nfs4</item>\n\t\t<item>nfs</item>\n\t\t<item>nilfs2</item>\n\t\t<item>nilfs</item>\n\t\t<item>ntfs-3g</item>\n\t\t<item>ntfs</item>\n\t\t<item>ocfs</item>\n\t\t<item>pipefs</item>\n\t\t<item>proc</item>\n\t\t<item>procfs</item>\n\t\t<item>pstore</item>\n\t\t<item>pstorefs</item>\n\t\t<item>qnx4</item>\n\t\t<item>qnx6</item>\n\t\t<item>reiser4</item>\n\t\t<item>reiserfs</item>\n\t\t<item>romfs</item>\n\t\t<item>rootfs</item>\n\t\t<item>sdcardfs</item>\n\t\t<item>securityfs</item>\n\t\t<item>selinuxfs</item>\n\t\t<item>shm</item>\n\t\t<item>smbfs</item>\n\t\t<item>sockfs</item>\n\t\t<item>specfs</item>\n\t\t<item>squashfs</item>\n\t\t<item>swap</item>\n\t\t<item>swapfs</item>\n\t\t<item>sysfs</item>\n\t\t<item>sysv</item>\n\t\t<item>tracefs</item>\n\t\t<item>ubifs</item>\n\t\t<item>udf</item>\n\t\t<item>ufs</item>\n\t\t<item>umsdos</item>\n\t\t<item>urefs</item>\n\t\t<item>usbfs</item>\n\t\t<item>vfat</item>\n\t\t<item>xenix</item>\n\t\t<item>xfs</item>\n\t\t<item>yaffs2</item>\n\t\t<item>yaffs</item>\n\t\t<item>zfs</item>\n\t\t<!-- Not included: ext, usbdevfs, xiafs -->\n\t\t<!-- Others -->\n\t\t<item>functionfs</item>\n\t\t<item>inotifyfs</item>\n\t\t<item>labeledfs</item>\n\t\t<item>oemfs</item>\n\t</list>\n\n\t<!-- Keywords/Functions provided by SELinux Reference Policy -->\n\t<list name=\"refpolicy_keywords\">\n\t\t<item>policy_module</item>\n\t\t<item>gen_require</item>\n\t\t<item>template</item>\n\t\t<item>interface</item>\n\t\t<item>optional_policy</item>\n\t\t<item>gen_tunable</item>\n\t\t<item>tunable_policy</item>\n\t\t<item>gen_user</item>\n\t\t<item>gen_context</item>\n\t\t<item>gen_bool</item>\n\t\t<item>gen_cats</item>\n\t\t<item>gen_sens</item>\n\t\t<item>gen_levels</item>\n\t\t<item>mls_systemlow</item>\n\t\t<item>mls_systemhigh</item>\n\t\t<item>mcs_systemlow</item>\n\t\t<item>mcs_systemhigh</item>\n\t\t<item>mcs_allcats</item>\n\t\t<item>ifndef</item>\n\t</list>\n\n\t<!-- M4 Built-in Keywords (obtained from \"m4.xml\") -->\n\t<list name=\"m4_builtin\">\n\t\t<item>__file__</item>\n\t\t<item>__line__</item>\n\t\t<item>__program__</item>\n\t\t<item>builtin</item>\n\t\t<item>changecom</item>\n\t\t<item>changequote</item>\n\t\t<item>changeword</item>\n\t\t<item>debugfile</item>\n\t\t<item>debugmode</item>\n\t\t<item>decr</item>\n\t\t<item>define</item>\n\t\t<item>defn</item>\n\t\t<item>divert</item>\n\t\t<item>divnum</item>\n\t\t<item>dnl</item>\n\t\t<item>dumpdef</item>\n\t\t<item>errprint</item>\n\t\t<item>esyscmd</item>\n\t\t<item>eval</item>\n\t\t<item>format</item>\n\t\t<item>ifdef</item>\n\t\t<item>ifelse</item>\n\t\t<item>include</item>\n\t\t<item>incr</item>\n\t\t<item>index</item>\n\t\t<item>indir</item>\n\t\t<item>len</item>\n\t\t<item>m4exit</item>\n\t\t<item>m4wrap</item>\n\t\t<item>maketemp</item>\n\t\t<item>mkstemp</item>\n\t\t<item>popdef</item>\n\t\t<item>pushdef</item>\n\t\t<item>shift</item>\n\t\t<item>sinclude</item>\n\t\t<item>substr</item>\n\t\t<item>syscmd</item>\n\t\t<item>sysval</item>\n\t\t<item>traceon</item>\n\t\t<item>traceoff</item>\n\t\t<item>translit</item>\n\t\t<item>undefine</item>\n\t\t<item>undivert</item>\n\t\t<item>m4___file__</item>\n\t\t<item>m4___line__</item>\n\t\t<item>m4___program__</item>\n\t\t<item>m4_builtin</item>\n\t\t<item>m4_changecom</item>\n\t\t<item>m4_changequote</item>\n\t\t<item>m4_changeword</item>\n\t\t<item>m4_debugfile</item>\n\t\t<item>m4_debugmode</item>\n\t\t<item>m4_decr</item>\n\t\t<item>m4_define</item>\n\t\t<item>m4_defn</item>\n\t\t<item>m4_divert</item>\n\t\t<item>m4_divnum</item>\n\t\t<item>m4_dnl</item>\n\t\t<item>m4_dumpdef</item>\n\t\t<item>m4_errprint</item>\n\t\t<item>m4_esyscmd</item>\n\t\t<item>m4_eval</item>\n\t\t<item>m4_format</item>\n\t\t<item>m4_ifdef</item>\n\t\t<item>m4_ifelse</item>\n\t\t<item>m4_include</item>\n\t\t<item>m4_incr</item>\n\t\t<item>m4_index</item>\n\t\t<item>m4_indir</item>\n\t\t<item>m4_len</item>\n\t\t<item>m4_m4exit</item>\n\t\t<item>m4_m4wrap</item>\n\t\t<item>m4_maketemp</item>\n\t\t<item>m4_mkstemp</item>\n\t\t<item>m4_popdef</item>\n\t\t<item>m4_pushdef</item>\n\t\t<item>m4_shift</item>\n\t\t<item>m4_sinclude</item>\n\t\t<item>m4_substr</item>\n\t\t<item>m4_syscmd</item>\n\t\t<item>m4_sysval</item>\n\t\t<item>m4_traceon</item>\n\t\t<item>m4_traceoff</item>\n\t\t<item>m4_translit</item>\n\t\t<item>m4_undefine</item>\n\t\t<item>m4_undivert</item>\n\t</list>\n\t<list name=\"m4_builtin_regexp\">\n\t\t<item>regexp</item>\n\t\t<item>patsubst</item>\n\t\t<item>m4_regexp</item>\n\t\t<item>m4_patsubst</item>\n\t</list>\n\n\t<contexts>\n\n\t\t<context name=\"_normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_m4_preprocessor\"/>\n\t\t\t<IncludeRules context=\"_find_all_comments\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\n\t\t\t<!-- Content Quoted (M4).\n\t\t\t     NOTE: The default quotes (`text') are highlighted,\n\t\t\t     but another type of quotation mark can be used. -->\n\t\t\t<IncludeRules context=\"_m4_string_simple\"/> <!-- `simple text' -->\n\t\t\t<IncludeRules context=\"_m4_quotes\"/> <!-- &m4Quotes; -->\n\n\t\t\t<DetectChar context=\"_quoted\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t\t<DetectChar context=\"_path\" attribute=\"Path\" char=\"/\"/>\n\t\t\t<RegExpr context=\"_input_sel\" attribute=\"Input Selector\" String=\"\\b&identifier;(?=\\s*\\=\\s*[^\\s\\=,;\\}\\)\\]#!\\^:])\"/>\n\n\t\t\t<!-- Keywords & Statements -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Booleans\" String=\"booleans\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Special Keys\" String=\"self\"/>\n\t\t\t<keyword context=\"_statement_policycap\" attribute=\"Policy Config. Statements\" String=\"statements_policycap\"/>\n\t\t\t<!-- Highlight class -->\n\t\t\t<keyword context=\"_statement_find_class\" attribute=\"Access Keys\" String=\"statements_access\"/>\n\t\t\t<keyword context=\"_statement_find_class\" attribute=\"Statements\" String=\"statements_type\"/>\n\t\t\t<keyword context=\"_statement_find_class\" attribute=\"Statements\" String=\"statements_role_transition\"/>\n\t\t\t<!-- Special contexts in statements -->\n\t\t\t<keyword context=\"_statement_range_transition\" attribute=\"Statements\" String=\"statements_range_transition\"/>\n\t\t\t<keyword context=\"_statement_default\" attribute=\"Statements\" String=\"statements_default\"/>\n\t\t\t<keyword context=\"_statement_default_range\" attribute=\"Statements\" String=\"statements_default_range\"/>\n\t\t\t<keyword context=\"_statement_cexpr\" attribute=\"Statements\" String=\"statements_cexpr\"/>\n\t\t\t<!-- Detect identifier after statement -->\n\t\t\t<keyword context=\"_find_identifier\" attribute=\"Statements\" String=\"statements_def\"/>\n\t\t\t<keyword context=\"_find_mls_level\" attribute=\"Statements\" String=\"statements_mls_level_def\"/>\n\t\t\t<keyword context=\"_find_mls_level_range\" attribute=\"Statements\" String=\"mls_range_def\"/>\n\n\t\t\t<keyword context=\"#stay\" attribute=\"Statements\" String=\"statements\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Statements\" String=\"statements_fc\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Statements\" String=\"keywords\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Expression Keys\" String=\"cond_operators\"/>\n\n\t\t\t<!-- Keywords/Functions of M4 & Reference Policy -->\n\t\t\t<WordDetect context=\"_function_gen_context\" attribute=\"Refpolicy Keywords\" String=\"gen_context\"/>\n\t\t\t<IncludeRules context=\"_refpolicy_keywords\"/>\n\t\t\t<IncludeRules context=\"_m4_builtin_keywords\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Function\" String=\"\\b&identifier;(?=\\()\"/>\n\n\t\t\t<!-- IP Addresses -->\n\t\t\t<IncludeRules context=\"_ip_addr\"/>\n\n\t\t\t<!-- Keywords: Access Vectors Permissions & Filesystem -->\n\t\t\t<IncludeRules context=\"_av_permissions\"/>\n\t\t\t<IncludeRules context=\"_filesystem\"/>\n\n\t\t\t<!-- Boolean Operators -->\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Boolean Operators\" char=\"=\" char1=\"=\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Boolean Operators\" char=\"!\" char1=\"=\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Boolean Operators\" char=\"&amp;\" char1=\"&amp;\"/>\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Boolean Operators\" char=\"|\" char1=\"|\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Boolean Operators\" String=\"!^\"/>\n\n\t\t\t<!-- Symbols/Operators -->\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Operator\" char=\"{\" beginRegion=\"Bracket\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Operator\" char=\"}\" endRegion=\"Bracket\"/>\n\t\t\t<DetectChar context=\"#stay\" char=\"(\" beginRegion=\"ParenthesesBlock\"/>\n\t\t\t<DetectChar context=\"#stay\" char=\")\" endRegion=\"ParenthesesBlock\"/>\n\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Operator\" char=\"-\" char1=\"&gt;\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Operator\" String=\"~[]\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Symbol\" String=\",;:-\"/>\n\n\t\t\t<IncludeRules context=\"_common_special_char\"/>\n\t\t\t<IncludeRules context=\"_line_continue_escape\"/>\n\n\t\t\t<!-- File Contexts -->\n\t\t\t<RegExpr context=\"_file_contexts\" attribute=\"File Contexts\" String=\"\\b&identifierWithArg;(:&identifierWithArg;){2}(:&mlsLevel;(\\s*\\-\\s*&mlsLevel;)?)?\\b\" lookAhead=\"true\"/>\n\n\t\t\t<!-- This avoids highlighting numbers in identifiers -->\n\t\t\t<RegExpr context=\"#stay\" String=\"&identifier;\"/>\n\t\t\t<!-- Numbers -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Number\" String=\"\\b&versionIdentifier;\"/>\n\t\t\t<HlCHex context=\"#stay\" attribute=\"Hexadecimal\"/>\n\t\t\t<Float context=\"#stay\" attribute=\"Number\"/>\n\t\t\t<Int context=\"#stay\" attribute=\"Number\"/>\n\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Reserved Keywords\" String=\"(\\s|^)\\-[bcdpls\\-](?=\\s|$)\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\".\"/>\n\t\t</context>\n\n\t\t<!-- Statements -->\n\n\t\t<!-- Highlight class after \":\", in some statements -->\n\t\t<context name=\"_statement_find_class\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!_class\" attribute=\"Symbol\" char=\":\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\";\" lookAhead=\"true\"/> <!-- End rule -->\n\t\t\t<IncludeRules context=\"_normal\"/>\n\t\t</context>\n\t\t<context name=\"_class\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<!-- Class -->\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Class\" String=\"\\s*&identifier;(?=[^:\\w\\-\\.,]|$)\"/>\n\t\t</context>\n\n\t\t<!-- Special keywords in some statements -->\n\t\t<context name=\"_statement_default\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Reserved Keywords\" String=\"source_target\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\";\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_normal\"/>\n\t\t</context>\n\t\t<context name=\"_statement_default_range\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Range\" String=\"range\"/>\n\t\t\t<IncludeRules context=\"_statement_default\"/>\n\t\t</context>\n\t\t<context name=\"_statement_cexpr\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Expression Keys\" String=\"cexpr_operators\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Special Keys\" String=\"cexpr_keywords\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Reserved Keywords\" String=\"source_target\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Reserved Keywords\" String=\"sameuser\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\";\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_normal\"/>\n\t\t</context>\n\t\t<context name=\"_statement_policycap\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_policy_capabilities\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\";\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_normal\"/>\n\t\t</context>\n\n\t\t<!-- RANGE_TRANSITION: Highlight level/range and fix class after \":\" -->\n\t\t<context name=\"_statement_range_transition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\";\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"_class_range_transition_statement\" String=\"&identifierWithArg;\\s*:\\s*&identifierWithArg;\\s+[a-zA-Z\\$]\" lookAhead=\"true\"/>\n\n\t\t\t<RegExpr context=\"#pop!_mls_level_range\" String=\"&identifierWithArg;(\\s*:\\s*&identifierWithArg;(\\s*,\\s*&identifierWithArg;)*)?\\s+\\-\\s+&identifierWithArg;(\\s*:\\s*&identifierWithArg;(\\s*,\\s*&identifierWithArg;)*)?\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop!_mls_level_range\" String=\"&identifierWithArg;(\\s*:\\s*&identifierWithArg;(\\s*,\\s*&identifierWithArg;)*)?(\\s*\\-\\s*&identifierWithArg;(\\s*:\\s*&identifierWithArg;(\\s*,\\s*&identifierWithArg;)*)?)?(?=\\s*;)\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_normal\"/>\n\t\t</context>\n\t\t<context name=\"_class_range_transition_statement\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_class\" attribute=\"Symbol\" char=\":\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Special Keys\" String=\"self\"/>\n\t\t</context>\n\n\t\t<!-- Detect identifier (highlight it as \"Normal Text\") -->\n\t\t<context name=\"_find_identifier\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"_default_find_identifier\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Normal Text\" String=\"&identifier;\"/>\n\t\t</context>\n\t\t<context name=\"_default_find_identifier\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces context=\"#stay\"/>\n\t\t\t<IncludeRules context=\"_m4_preprocessor\"/>\n\t\t\t<IncludeRules context=\"_find_all_comments\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Function\" String=\"\\b&identifier;(?=\\()\" lookAhead=\"true\"/>\n\t\t</context>\n\n\t\t<!-- Detect MLS/MCS Level (s0.s1:c0,c1) -->\n\t\t<context name=\"_find_mls_level\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"_default_find_identifier\"/>\n\t\t\t<RegExpr context=\"#pop!_mls_level\" String=\"&identifierWithArg;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<!-- Detect MLS/MCS Range (s0:c0 - s1:c1) -->\n\t\t<context name=\"_find_mls_level_range\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"_default_find_identifier\"/>\n\t\t\t<RegExpr context=\"#pop!_mls_level_range\" String=\"&identifierWithArg;\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<!-- MLS/MCS Range: Sensitivity:Category - Sensitivity:Category -->\n\t\t<context name=\"_mls_level_range\" attribute=\"MLS/MCS Level/Range\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_mls_level_range_cat\" attribute=\"Symbol\" String=\":(?=&identifierWithArg;)\"/> <!-- Find Category -->\n\t\t\t<RegExpr context=\"#pop!_mls_level\" attribute=\"Symbol\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"\\.(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_mls_level\"/>\n\t\t</context>\n\t\t<context name=\"_mls_level_range_cat\" attribute=\"MLS/MCS Level/Range\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_mls_level\" attribute=\"Symbol\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"(\\.|\\s*,\\s*)(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_mls_level\"/>\n\t\t</context>\n\t\t<!-- MLS/MCS Level: Sensitivity:Category -->\n\t\t<context name=\"_mls_level\" attribute=\"MLS/MCS Level/Range\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_mls_level_cat\" attribute=\"Symbol\" String=\":(?=&identifierWithArg;)\"/> <!-- Find Category -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"\\.(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_mls_level\"/>\n\t\t</context>\n\t\t<context name=\"_mls_level_cat\" attribute=\"MLS/MCS Level/Range\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"(\\.|\\s*,\\s*)(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_mls_level\"/>\n\t\t</context>\n\t\t<context name=\"_default_mls_level\" attribute=\"MLS/MCS Level/Range\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"MLS/MCS Level/Range\" String=\"\\w+\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"MLS/MCS Level/Range\" char=\"-\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\n\t\t<!-- Double Quotes String (does not support line breaks and line continuation escape) -->\n\t\t<context name=\"_quoted\" attribute=\"Text Quoted\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_filename_quoted\">\n\t\t\t<RegExpr context=\"#pop!_path_quoted\" attribute=\"Text Quoted\" String=\"[^&quot;/]*/\" lookAhead=\"true\"/> <!-- Find path -->\n\t\t</context>\n\t\t<context name=\"_filename_quoted\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Text Quoted Open\" String=\"[^\\s&quot;\\\\](?=\\s*$)\"/>\n\t\t</context>\n\t\t<context name=\"_path_quoted\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"&quot;\"/>\n\t\t\t<!-- Quote escaped is not allowed? (see line 260-261 in \"selinux/checkpolicy/policy_scan.l\") -->\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t\t<IncludeRules context=\"_regex_quoted\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Text Quoted Open\" String=\"[^\\s&quot;\\[\\(\\\\](?=\\s*$)\"/>\n\t\t</context>\n\n\t\t<!-- Path -->\n\t\t<context name=\"_path\" attribute=\"Path\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t\t<IncludeRules context=\"_regex\"/>\n\t\t</context>\n\n\t\t<!-- Input Selectors: selector=value\n\t\t     NOTE: \"seapp_contexts\" in the Android policy use this. -->\n\t\t<context name=\"_input_sel\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces context=\"#stay\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"=\"/>\n\t\t\t<keyword context=\"#pop\" attribute=\"Booleans\" String=\"booleans\"/>\n\t\t\t<keyword context=\"#pop\" attribute=\"Special Keys\" String=\"self\"/>\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Normal Text\" String=\"&identifier;(?=[,;]?(\\s|$))\"/>\n\t\t\t<!-- Find RegExp -->\n\t\t\t<AnyChar context=\"#pop!_path\" String=\"[(\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop!_path\" String=\"[^\\=\\s&quot;\\{\\}\\[\\]\\(\\);#]+[\\{\\[\\(\\*\\+\\?]\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#pop!_path\" String=\"[^\\=\\s&quot;\\{\\}\\[\\]\\(\\);#\\d]+\\.\" lookAhead=\"true\"/>\n\t\t</context>\n\n\t\t<!-- Special functions of Refpolicy -->\n\t\t<context name=\"_function_gen_context\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_function_gen_context_find_fc\" attribute=\"Normal Text\" char=\"(\"  beginRegion=\"ParenthesesBlock\"/>\n\t\t</context>\n\t\t<context name=\"_function_gen_context_find_fc\" attribute=\"File Contexts\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_function_gen_context_content\">\n\t\t\t<RegExpr context=\"_file_contexts\" String=\"&identifierWithArg;(:&identifierWithArg;){2}\\b\" lookAhead=\"true\"/>\n\t\t\t<DetectSpaces context=\"#stay\"/>\n\t\t</context>\n\t\t<context name=\"_function_gen_context_content\" attribute=\"File Contexts\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Normal Text\" char=\")\" endRegion=\"ParenthesesBlock\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Normal Text\" String=\".:-\"/>\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Symbol\" String=\",;\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t\t<IncludeRules context=\"_find_all_comments\"/>\n\t\t\t<IncludeRules context=\"_common_special_char\"/>\n\t\t\t<IncludeRules context=\"_line_continue_escape\"/>\n\t\t</context>\n\n\t\t<!-- File Contexts.\n\t\t     NOTE: File contexts with spaces before and after each \":\" are not highlighted. -->\n\t\t<!-- user:role:type -->\n\t\t<context name=\"_file_contexts\" attribute=\"File Contexts\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_role\" attribute=\"Symbol\" char=\":\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\t\t<context name=\"_fc_role\" attribute=\"File Contexts\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_fc_type\" attribute=\"Symbol\" char=\":\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\t\t<context name=\"_fc_type\" attribute=\"File Contexts (Type Enforcement)\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_range\" attribute=\"Symbol\" String=\":(?=&mlsLevel;)\"/> <!-- Find Level/Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"File Contexts (Type Enforcement)\" String=\"\\.?[\\w\\-]+\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"File Contexts (Type Enforcement)\" String=\"\\.(?=\\$)\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\t\t<!-- (MLS/MCS) user:role:type:level -->\n\t\t<context name=\"_fc_level_range\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_range_cat\" attribute=\"Symbol\" String=\":(?=&identifierWithArg;)\"/> <!-- Find Category -->\n\t\t\t<RegExpr context=\"#pop!_fc_level\" attribute=\"Symbol\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"\\.(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<context name=\"_fc_level_range_cat\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_level\" attribute=\"Symbol\" String=\"\\s*\\-\\s*(?=&mlsLevel;)\"/> <!-- Find Range -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"(\\.|\\s*,\\s*)(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<!-- (MLS/MCS) user:role:type:level-level -->\n\t\t<context name=\"_fc_level\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#pop!_fc_level_cat\" attribute=\"Symbol\" String=\":(?=&identifierWithArg;)\"/> <!-- Find Category -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"\\.(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<context name=\"_fc_level_cat\" attribute=\"File Contexts\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_after_fc\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\"(\\.|\\s*,\\s*)(?=&identifierWithArg;)\"/>\n\t\t\t<IncludeRules context=\"_default_fc_level\"/>\n\t\t</context>\n\t\t<context name=\"_default_fc_level\" attribute=\"File Contexts\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"File Contexts\" String=\"\\w+\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"File Contexts\" char=\"-\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\n\t\t<context name=\"_after_fc\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Symbol\" String=\":(?=&identifierWithArg;)\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"&identifier;\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\n\t\t<!--\n\t\t========================================\n\t\t        Comments & Documentation\n\t\t======================================== -->\n\n\t\t<context name=\"_find_comments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"_doc_comment\" attribute=\"Documentation\" char=\"#\" char1=\"#\"/>\n\t\t\t<DetectChar context=\"_comment\" attribute=\"Comment\" char=\"#\"/>\n\t\t</context>\n\t\t<context name=\"_find_all_comments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_find_comments\"/>\n\t\t\t<!-- For Macros -->\n\t\t\t<RegExpr context=\"_comment\" attribute=\"Comment\" String=\"\\bdnl(?!\\.?[\\w\\-])\"/>\n\t\t</context>\n\n\t\t<context name=\"_comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<LineContinue context=\"#pop\" attribute=\"Comment\"/>\n\t\t\t<IncludeRules context=\"##Alerts\"/>\n\t\t\t<IncludeRules context=\"##Modelines\"/>\n\t\t\t<IncludeRules context=\"_default_comment\"/>\n\t\t</context>\n\t\t<context name=\"_doc_comment\" attribute=\"Documentation\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"_find_tags\"/>\n\t\t\t<IncludeRules context=\"_find_entityrefs\"/>\n\t\t\t<LineContinue context=\"#pop\" attribute=\"Documentation\"/>\n\t\t\t<IncludeRules context=\"_comment\"/>\n\t\t</context>\n\n\t\t<context name=\"_find_tags\" attribute=\"Documentation\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"_element_tag\" attribute=\"Doc. Element Tag\" String=\"&lt;\\s*&tagName;\" beginRegion=\"DocElement\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Doc. Element Tag\" String=\"&lt;/\\s*&tagName;\\s*&gt;\" endRegion=\"DocElement\"/>\n\t\t</context>\n\t\t<context name=\"_find_entityrefs\" attribute=\"Documentation\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Doc. EntityRef\" String=\"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|[a-zA-Z_]([\\w\\-]*\\w)?);\"/>\n\t\t</context>\n\n\t\t<context name=\"_element_tag\" attribute=\"Documentation\" lineEndContext=\"#pop\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Doc. Element Tag\" char=\"/\" char1=\"&gt;\" endRegion=\"DocElement\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Doc. Element Tag\" char=\"&gt;\"/>\n\t\t\t<RegExpr context=\"_attribute\" attribute=\"Doc. Attribute\" String=\"\\s&tagName;\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Error\" String=\"\\S\"/>\n\t\t</context>\n\t\t<context name=\"_attribute\" attribute=\"Documentation\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_value\" attribute=\"Documentation\" char=\"=\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Doc. Attribute\" String=\"\\s&tagName;\"/>\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Error\" String=\"\\S\"/>\n\t\t</context>\n\t\t<context name=\"_value\" attribute=\"Documentation\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_value_dq\" attribute=\"Doc. Value\" String=\"\\s*&quot;\"/>\n\t\t\t<RegExpr context=\"#pop!_value_sq\" attribute=\"Doc. Value\" String=\"\\s*&apos;\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\s*\\S+\"/>\n\t\t</context>\n\t\t<context name=\"_value_dq\" attribute=\"Doc. Value\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Error\" String=\"\\S(?=\\s*$)\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Doc. Value\" char=\"&quot;\"/>\n\t\t\t<IncludeRules context=\"_find_entityrefs\"/>\n\t\t</context>\n\t\t<context name=\"_value_sq\" attribute=\"Doc. Value\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Error\" String=\"\\S(?=\\s*$)\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Doc. Value\" char=\"&apos;\"/>\n\t\t\t<IncludeRules context=\"_find_entityrefs\"/>\n\t\t</context>\n\n\t\t<!--\n\t\t====================================================================\n\t\t      Common Rules for Syntax Highlighting of SELinux Policies\n\t\t====================================================================\n\t\tNOTE: The following contexts are also used by \"selinux-fc.xml\"\n\t\tand \"selinux-cil.xml\". -->\n\n\t\t<!-- Default Comment (only for single line comments!) -->\n\t\t<context name=\"_default_comment\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<!-- URLs -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"URL in Comment\" String=\"\\bhttps?://[^\\s&lt;&gt;&quot;&apos;`]*[^\\s&lt;&gt;&quot;&apos;`\\}\\)\\]\\.,;\\|]\"/>\n\t\t\t<!-- Email (Source: http://emailregex.com) -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"URL in Comment\" String=\"(([^&lt;&gt;\\(\\)\\[\\]\\\\\\.,;:\\s@&quot;]+(\\.[^&lt;&gt;\\(\\)\\[\\]\\\\\\.,;:\\s@&quot;]+)*)|(&quot;[^&quot;]+&quot;))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}])|(([a-zA-Z\\-\\d]+\\.)+[a-zA-Z]{2,}))\\b\"/>\n\t\t</context>\n\n\t\t<!-- IP Addresses -->\n\t\t<context name=\"_ip_addr\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- IPv4 -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"IP Address\" String=\"\\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b\"/>\n\t\t\t<!-- IPv6 (Source: https://community.helpsystems.com/forums/intermapper/miscellaneous-topics/5acc4fcf-fa83-e511-80cf-0050568460e4 ) -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"IP Address\" String=\"((\\b([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(\\b([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(\\b([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(\\b([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(\\b([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(\\b([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(\\b([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\"/> <!-- End: (\\%\\w+\\b)? -->\n\t\t\t<!-- NOTE: IPv6 in the SELinux parser (\"selinux/checkpolicy/policy_scan.l\"): \"([\\da-fA-F]{0,4}:){2}[\\da-fA-F:\\.]*\" -->\n\t\t</context>\n\n\t\t<!-- AV Permissions Keywords -->\n\t\t<context name=\"_av_permissions\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"AV Permissions\" String=\"av_permissions\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"Android AV Permissions\" String=\"av_permissions_android\"/>\n\t\t</context>\n\n\t\t<!-- Policy Capabilities -->\n\t\t<context name=\"_policy_capabilities\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Policy Capability\" String=\"policy_capabilities\"/>\n\t\t</context>\n\n\t\t<!-- Filsystem Keywords -->\n\t\t<context name=\"_filesystem\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Filesystem\" String=\"filesystem\"/>\n\t\t</context>\n\n\t\t<!-- Special Characters -->\n\t\t<context name=\"_common_special_char\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Special Char\" char=\"*\"/>\n\t\t</context>\n\t\t<!-- Line-Continuation Escape -->\n\t\t<context name=\"_line_continue_escape\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<LineContinue context=\"#stay\" attribute=\"Escape Char\"/>\n\t\t</context>\n\n\t\t<!-- SELinux Reference Policy Keywords -->\n\t\t<context name=\"_refpolicy_keywords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Refpolicy Keywords\" String=\"refpolicy_keywords\"/>\n\t\t</context>\n\t\t<context name=\"_refpolicy_keywords_fc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Refpolicy Keywords (in FC files)\" String=\"refpolicy_keywords\"/>\n\t\t</context>\n\n\t\t<!-- Statements with Definition of File Contexts -->\n\t\t<context name=\"_statements_file_contexts\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"#stay\" attribute=\"Statements\" String=\"statements_fc\"/>\n\t\t</context>\n\n\t\t<!-- SELinux M4 Macros -->\n\n\t\t<context name=\"_m4_special_arguments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"M4 Special Arguments\" String=\"&m4Args;\"/>\n\t\t</context>\n\t\t<context name=\"_m4_quotes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Default M4 Quote\" String=\"&m4Quotes;\"/>\n\t\t</context>\n\n\t\t<context name=\"_m4_builtin_keywords\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"_function_regexp\" attribute=\"M4 Built-in Keywords\" String=\"m4_builtin_regexp\"/>\n\t\t\t<keyword context=\"#stay\" attribute=\"M4 Built-in Keywords\" String=\"m4_builtin\"/>\n\t\t</context>\n\n\t\t<!-- #line -->\n\t\t<context name=\"_m4_preprocessor\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"_m4_preprocessor_line_num\" attribute=\"M4 Preprocessor\" String=\"#line[ ](?=\\d)\"/>\n\t\t</context>\n\t\t<context name=\"_m4_preprocessor_line_num\" attribute=\"M4 Preprocessor\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<!-- #line 1 \"source\" -->\n\t\t\t<Detect2Chars context=\"_m4_preprocessor_line_source_file\" attribute=\"M4 Preprocessor\" char=\"1\" char1=\" \"/>\n\t\t\t<Int context=\"#pop\" attribute=\"M4 Preprocessor\"/>\n\t\t</context>\n\t\t<context name=\"_m4_preprocessor_line_source_file\" attribute=\"M4 Preprocessor\"\n\t\t         lineEndContext=\"#pop#pop\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n\t\t\t<RangeDetect context=\"#pop#pop\" attribute=\"M4 Preprocessor\" char=\"&quot;\" char1=\"&quot;\"/>\n\t\t</context>\n\n\t\t<!-- \"regexp\" function in M4 -->\n\t\t<context name=\"_function_regexp\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!_function_regexp_content\" attribute=\"Normal Text\" char=\"(\" beginRegion=\"ParenthesesBlock\"/>\n\t\t</context>\n\t\t<context name=\"_function_regexp_content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Normal Text\" char=\")\" endRegion=\"ParenthesesBlock\"/>\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Normal Text\" char=\",\"/>\n\t\t\t<!-- Default Quote: `text' -->\n\t\t\t<RegExpr context=\"_simple_string_regexp\" attribute=\"Text Quoted\" String=\"`(?=(&m4Args;|[\\w\\-\\s])*')\"/>\n\t\t\t<IncludeRules context=\"_m4_quotes\"/>\n\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t\t<IncludeRules context=\"_regex_general_otherquote\"/>\n\t\t\t<IncludeRules context=\"_find_all_comments\"/>\n\t\t</context>\n\t\t<context name=\"_simple_string_regexp\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"&apos;\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\n\t\t<!-- Highlight simple string using the default quotes: `text' -->\n\t\t<context name=\"_m4_string_simple\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"_find_m4_string_simple\" char=\"`\" lookAhead=\"true\"/>\n\t\t</context>\n\t\t<context name=\"_find_m4_string_simple\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<RegExpr context=\"#pop!_block_quoted_simple\" attribute=\"Text Quoted\" String=\"`(?=(&m4Args;|[\\w\\-\\.\\s]|\\(\\))*&apos;)\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Default M4 Quote\" char=\"`\"/> <!-- &m4Quotes; -->\n\t\t</context>\n\t\t<context name=\"_block_quoted_simple\" attribute=\"Text Quoted\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Text Quoted\" char=\"&apos;\"/>\n\t\t\t<IncludeRules context=\"_m4_special_arguments\"/>\n\t\t</context>\n\n\t\t<!--\n\t\t=================================\n\t\t          PCRE2 RegExp\n\t\t================================= -->\n\n\t\t<context name=\"_default_regex\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_special_chars\"/>\n\t\t\t<IncludeRules context=\"_brackets_error\"/>\n\t\t\t<IncludeRules context=\"_quantification_brackets\"/>\n\t\t</context>\n\n\t\t<!-- SELinux RegExp -->\n\t\t<!-- For paths: not allow spaces & line breaks -->\n\t\t<context name=\"_regex\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_regex\"/>\n\t\t\t<DetectChar context=\"_square_brackets\" attribute=\"RegExp Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets\" attribute=\"RegExp Brackets\" char=\"(\"/>\n\t\t</context>\n\t\t<!-- For double quote string (\"str\"): allow spaces, but not line breaks -->\n\t\t<context name=\"_regex_quoted\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_default_regex\"/>\n\t\t\t<DetectChar context=\"_square_brackets_quoted\" attribute=\"RegExp Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets_quoted\" attribute=\"RegExp Brackets\" char=\"(\"/>\n\t\t</context>\n\n\t\t<!-- General RegExp:\n\t\t     - Allow escapes unsupported by SELinux.\n\t\t     - Do not end with a quote.\n\t\t     - Allow spaces & line breaks.\n\t\t     - Allow comments in round brackets. -->\n\t\t<context name=\"_regex_general_otherquote\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"_line_continue_escape\"/>\n\t\t\t<IncludeRules context=\"_fix_escape\"/>\n\t\t\t<IncludeRules context=\"_default_regex\"/>\n\t\t\t<DetectChar context=\"_square_brackets_otherquote\" attribute=\"RegExp Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets_otherquote\" attribute=\"RegExp Brackets\" char=\"(\"/>\n\t\t</context>\n\n\t\t<context name=\"_special_chars\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Special Char\" String=\"&specialChars;\"/>\n\t\t\t<IncludeRules context=\"_escape\"/>\n\t\t</context>\n\n\t\t<!-- Escapes -->\n\t\t<context name=\"_escape\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Escapes Not Supported by SELinux -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\\\([LlUu]|N\\{\\w+\\})\"/>\n\t\t\t<!-- Hexadecimal -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\x(\\{[\\da-fA-F]+\\}|[\\da-fA-F]{2})\"/>\n\t\t\t<!-- Octal. NOTE: only ASCII chars. for \\ddd -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\(o\\{[0-7]+\\}|[0-3][0-7]{0,2}|[4-7][0-7]?)\"/>\n\t\t\t<!-- References -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\[kg](&lt;\\w+&gt;|&apos;\\w+&apos;|\\{\\w+\\})\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\g(&lt;[\\+\\-]?\\d+&gt;|&apos;[\\+\\-]?\\d+&apos;|\\{[\\+\\-]?\\d+\\}|[\\+\\-]?\\d)\"/>\n\t\t\t<!-- Category Properties -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\[pP](C[cfnos]?|L[lmotu&amp;]?|M[cen]?|N[dlo]?|P[cdefios]?|S[ckmo]?|Z[lps]?)\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\[pP]\\{(Xan|Xps|Xsp|Xuc|Xwd|C[cfnos]?|L[lmotu&amp;]?|M[cen]?|N[dlo]?|P[cdefios]?|S[ckmo]?|Z[lps]?)\\}\"/>\n\t\t\t<!-- Script Names -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\[pP]\\{(Ahom|Anatolian_Hieroglyphs|Arabic|Armenian|Avestan|Balinese|Bamum|Bassa_Vah|Batak|Bengali|Bopomofo|Brahmi|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Caucasian_Albanian|Chakma|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Duployan|Egyptian_Hieroglyphs|Elbasan|Ethiopic|Georgian|Glagolitic|Gothic|Grantha|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hatran|Hebrew|Hiragana|Imperial_Aramaic|Inherited|Inscriptional_Pahlavi|Inscriptional_Parthian|Javanese|Kaithi|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Khojki|Khudawadi|Lao|Latin|Lepcha|Limbu|Linear_A|Linear_B|Lisu|Lycian|Lydian|Mahajani|Malayalam|Mandaic|Manichaean|Meetei_Mayek|Mende_Kikakui|Meroitic_Cursive|Meroitic_Hieroglyphs|Miao|Modi|Mongolian|Mro|Multani|Myanmar|Nabataean|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Hungarian|Old_Italic|Old_North_Arabian|Old_Permic|Old_Persian|Old_South_Arabian|Old_Turkic|Oriya|Osmanya|Pahawh_Hmong|Palmyrene|Pau_Cin_Hau|Phags_Pa|Phoenician|Psalter_Pahlavi|Rejang|Runic|Samaritan|Saurashtra|Sharada|Shavian|Siddham|SignWriting|Sinhala|Sora_Sompeng|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tai_Tham|Tai_Viet|Takri|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Tirhuta|Ugaritic|Vai|Warang_Citi|Yi)\\}\"/>\n\t\t\t<!-- Escaped Characters -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\(Q.*\\\\E|c[a-zA-Z])\"/>\n\t\t\t<!-- Reserved characters -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\[\\ssSdDwWbBAZcCtrnaefvxhGHKNQRVXpPz\\d]\"/>\n\t\t\t<!-- Punctuation Characters -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\[[:punct:]]\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\[\\041-\\057\\072-\\100\\133-\\140\\173-\\176]\"/>\n\t\t</context>\n\t\t<context name=\"_fix_escape\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Special Char\" String=\"^$\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Escape Char\" String=\"\\\\(u[\\da-fA-F]{4}|[LlUu]|N\\{\\w+\\}|[0-7]{1,3})\"/>\n\t\t</context>\n\n\t\t<!-- Special Characters in Groups: (?...). Also see: &capGroup; -->\n\t\t<context name=\"_special_group_round_brackets\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- References & Option Settings -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Special Char of Brackets\" String=\"\\?(&amp;|P[&gt;\\=])\\w+(?=\\))\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Special Char of Brackets\" String=\"\\?(xx|[iJmnsUxR]|C\\d*|C&quot;[^\\s&quot;]*&quot;|[\\-\\+]?\\d+)(?=\\))\"/>\n\t\t\t<!-- Conditional Patterns -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Special Char of Brackets\" String=\"\\?\\((Rn?|R&amp;\\w+|[\\+\\-]?\\d+|&lt;\\w+&gt;|&apos;\\w+&apos;|VERSION&gt;?\\=\\d+(\\.\\d+)*|\\w+)\\)\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Special Char of Brackets\" String=\"\\?(?=\\()\"/>\n\t\t</context>\n\n\t\t<!-- {n} {min,} {,max} {min,max} -->\n\t\t<context name=\"_quantification_brackets\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"_quantification_brackets_content\" attribute=\"RegExp Brackets\" String=\"\\{(?=(\\d+(,\\d*)?|,\\d+)\\})\"/>\n\t\t</context>\n\t\t<context name=\"_quantification_brackets_content\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Special Char of Brackets\" char=\",\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets\" char=\"}\"/>\n\t\t</context>\n\n\t\t<!-- Groups: [ ] and ( ) -->\n\t\t<context name=\"_default_square_brackets\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\" char=\"[\"/>\n\t\t\t<IncludeRules context=\"_special_chars\"/>\n\t\t</context>\n\t\t<context name=\"_default_round_brackets\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Special Char of Brackets\" char=\"|\"/>\n\t\t\t<IncludeRules context=\"_default_regex\"/>\n\t\t</context>\n\t\t<context name=\"_brackets_error\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Error\" char=\"[\" char1=\"]\"/>\n\t\t</context>\n\n\t\t<!-- Groups Brackets in Paths (do not allow spaces and line breaks) -->\n\t\t<context name=\"_square_brackets\" attribute=\"RegExp Brackets Content\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_square_brackets_content\">\n\t\t\t<!-- Negative Characters -->\n\t\t\t<RegExpr context=\"#pop!_square_brackets_content\" attribute=\"Special Char of Brackets\" String=\"\\^(?=[^\\s\\]])\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_content\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets\" char=\"]\"/>\n\t\t\t<DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open RegExp Brackets\" String=\"[^\\s\\[\\]\\\\](?=\\s|$)\"/>\n\t\t\t<IncludeRules context=\"_default_square_brackets\"/>\n\t\t</context>\n\n\t\t<context name=\"_round_brackets\" attribute=\"RegExp Brackets Content\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_round_brackets_content\">\n\t\t\t<IncludeRules context=\"_special_group_round_brackets\"/>\n\t\t\t<RegExpr context=\"#pop!_round_brackets_content\" attribute=\"Special Char of Brackets\" String=\"&capGroup;(?=[^\\)\\s])\"/>\n\t\t\t<DetectChar context=\"#pop!_round_brackets_content\" char=\"?\"/>\n\t\t</context>\n\t\t<context name=\"_round_brackets_content\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets\" char=\")\"/>\n\t\t\t<DetectSpaces context=\"#pop\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open RegExp Brackets\" String=\"[^\\s\\[\\(\\)\\\\](?=\\s|$)\"/>\n\t\t\t<IncludeRules context=\"_default_round_brackets\"/>\n\t\t\t<DetectChar context=\"_square_brackets\" attribute=\"RegExp Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets\" attribute=\"RegExp Brackets\" char=\"(\"/>\n\t\t</context>\n\n\t\t<!-- Groups Brackets in Double Quoted Strings (allow spaces, but not line breaks) -->\n\t\t<context name=\"_square_brackets_quoted\" attribute=\"RegExp Brackets Content\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_square_brackets_quoted_content\">\n\t\t\t<RegExpr context=\"#pop!_square_brackets_quoted_content\" attribute=\"Special Char of Brackets\" String=\"\\^(?=[^\\]])\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_quoted_content\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets\" char=\"]\"/>\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open RegExp Brackets\" String=\"[^\\s\\[\\]&quot;\\\\](?=\\s*(&quot;|$))\"/>\n\t\t\t<IncludeRules context=\"_default_square_brackets\"/>\n\t\t</context>\n\n\t\t<context name=\"_round_brackets_quoted\" attribute=\"RegExp Brackets Content\"\n\t\t         lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!_round_brackets_quoted_content\">\n\t\t\t<IncludeRules context=\"_special_group_round_brackets\"/>\n\t\t\t<RegExpr context=\"#pop!_round_brackets_quoted_content\" attribute=\"Special Char of Brackets\" String=\"&capGroup;(?=[^\\)])\"/>\n\t\t\t<DetectChar context=\"#pop!_round_brackets_quoted_content\" char=\"?\"/>\n\t\t</context>\n\t\t<context name=\"_round_brackets_quoted_content\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets\" char=\")\"/>\n\t\t\t<DetectChar context=\"#pop\" char=\"&quot;\" lookAhead=\"true\"/>\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Open RegExp Brackets\" String=\"[^\\s\\[\\(\\)&quot;\\\\](?=\\s*(&quot;|$))\"/>\n\t\t\t<IncludeRules context=\"_default_round_brackets\"/>\n\t\t\t<DetectChar context=\"_square_brackets_quoted\" attribute=\"RegExp Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets_quoted\" attribute=\"RegExp Brackets\" char=\"(\"/>\n\t\t</context>\n\n\t\t<!-- Groups Brackets in Unknown Quotes (allow spaces and line breaks) -->\n\t\t<context name=\"_square_brackets_otherquote\" attribute=\"RegExp Brackets Content\"\n\t\t         lineEndContext=\"#pop!_square_brackets_otherquote_content\" fallthrough=\"true\" fallthroughContext=\"#pop!_square_brackets_otherquote_content\">\n\t\t\t<RegExpr context=\"#pop!_square_brackets_otherquote_content\" attribute=\"Special Char of Brackets\" String=\"\\^(?=[^\\]]|$)\"/>\n\t\t</context>\n\t\t<context name=\"_square_brackets_otherquote_content\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets\" char=\"]\"/>\n\t\t\t<IncludeRules context=\"_default_square_brackets\"/>\n\t\t</context>\n\n\t\t<context name=\"_round_brackets_otherquote\" attribute=\"RegExp Brackets Content\"\n\t\t         lineEndContext=\"#pop!_round_brackets_otherquote_content\" fallthrough=\"true\" fallthroughContext=\"#pop!_round_brackets_otherquote_content\">\n\t\t\t<IncludeRules context=\"_special_group_round_brackets\"/>\n\t\t\t<RegExpr context=\"#pop!_round_brackets_otherquote_content\" attribute=\"Special Char of Brackets\" String=\"&capGroup;(?=[^\\)]|$)\"/>\n\t\t\t<DetectChar context=\"#pop!_round_brackets_otherquote_content\" char=\"?\"/>\n\t\t</context>\n\t\t<context name=\"_round_brackets_otherquote_content\" attribute=\"RegExp Brackets Content\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"RegExp Brackets\" char=\")\"/>\n\t\t\t<IncludeRules context=\"_fix_escape\"/>\n\t\t\t<IncludeRules context=\"_default_round_brackets\"/>\n\t\t\t<IncludeRules context=\"_line_continue_escape\"/>\n\t\t\t<DetectChar context=\"_square_brackets_otherquote\" attribute=\"RegExp Brackets\" char=\"[\"/>\n\t\t\t<DetectChar context=\"_round_brackets_otherquote\" attribute=\"RegExp Brackets\" char=\"(\"/>\n\t\t\t<RegExpr context=\"_comment\" attribute=\"Comment\" String=\"(^|\\s)\\#\"/>\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"  spellChecking=\"false\"/>\n\t\t<itemData name=\"Comment\"        defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"URL in Comment\" defStyleNum=\"dsComment\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Path\"           defStyleNum=\"dsNormal\"  spellChecking=\"false\"/>\n\t\t<itemData name=\"Text Quoted\"    defStyleNum=\"dsString\"  spellChecking=\"false\"/>\n\n\t\t<itemData name=\"IP Address\"             defStyleNum=\"dsFloat\"          spellChecking=\"false\"/>\n\t\t<itemData name=\"AV Permissions\"         defStyleNum=\"dsVerbatimString\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Android AV Permissions\" defStyleNum=\"dsVerbatimString\" italic=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Policy Capability\"      defStyleNum=\"dsPreprocessor\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Filesystem\"             defStyleNum=\"dsNormal\"         italic=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Statements\"        defStyleNum=\"dsKeyword\"  spellChecking=\"false\"/>\n\t\t<itemData name=\"Policy Config. Statements\" defStyleNum=\"dsPreprocessor\" bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Access Keys\"       defStyleNum=\"dsWarning\"  bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Expression Keys\"   defStyleNum=\"dsVariable\" bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Boolean Operators\" defStyleNum=\"dsVariable\" bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Special Keys\"      defStyleNum=\"dsOthers\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Reserved Keywords\" defStyleNum=\"dsKeyword\"  spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Booleans\"            defStyleNum=\"dsExtension\"     bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Range\"               defStyleNum=\"dsDecVal\"        bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Class\"               defStyleNum=\"dsDataType\"      bold=\"0\" spellChecking=\"false\"/>\n\t\t<itemData name=\"MLS/MCS Level/Range\" defStyleNum=\"dsDocumentation\" spellChecking=\"false\"/>\n\t\t<itemData name=\"File Contexts\"       defStyleNum=\"dsPreprocessor\"  spellChecking=\"false\"/>\n\t\t<itemData name=\"File Contexts (Type Enforcement)\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Input Selector\"      defStyleNum=\"dsAttribute\"     spellChecking=\"false\"/>\n\t\t<itemData name=\"Operator\"            defStyleNum=\"dsKeyword\"       spellChecking=\"false\"/>\n\t\t<itemData name=\"Symbol\"              defStyleNum=\"dsOperator\"      spellChecking=\"false\"/>\n\t\t<itemData name=\"Number\"              defStyleNum=\"dsDecVal\"        spellChecking=\"false\"/>\n\t\t<itemData name=\"Hexadecimal\"         defStyleNum=\"dsBaseN\"         spellChecking=\"false\"/>\n\n\t\t<!-- Documentation -->\n\t\t<itemData name=\"Documentation\"    defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Doc. Element Tag\" defStyleNum=\"dsAnnotation\"  bold=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Doc. EntityRef\"   defStyleNum=\"dsInformation\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Doc. Attribute\"   defStyleNum=\"dsAttribute\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Doc. Value\"       defStyleNum=\"dsString\"      spellChecking=\"false\"/>\n\n\t\t<!-- Reference Policy -->\n\t\t<itemData name=\"Function\"             defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Refpolicy Keywords\"   defStyleNum=\"dsFunction\" italic=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Refpolicy Keywords (in FC files)\" defStyleNum=\"dsNormal\" bold=\"1\" spellChecking=\"false\"/>\n\t\t<!-- M4 Macros -->\n\t\t<itemData name=\"M4 Built-in Keywords\" defStyleNum=\"dsBuiltIn\"  spellChecking=\"false\"/>\n\t\t<itemData name=\"M4 Special Arguments\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n\t\t<itemData name=\"M4 Preprocessor\"      defStyleNum=\"dsPreprocessor\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Default M4 Quote\"     defStyleNum=\"dsString\"   bold=\"1\" spellChecking=\"false\"/>\n\n\t\t<!-- RegExp -->\n\t\t<itemData name=\"Escape Char\"              defStyleNum=\"dsChar\"          spellChecking=\"false\"/>\n\t\t<itemData name=\"Special Char\"             defStyleNum=\"dsSpecialChar\"   spellChecking=\"false\"/>\n\t\t<itemData name=\"Special Char of Brackets\" defStyleNum=\"dsAnnotation\"    spellChecking=\"false\"/>\n\t\t<itemData name=\"RegExp Brackets\"          defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n\t\t<itemData name=\"RegExp Brackets Content\"  defStyleNum=\"dsSpecialString\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Open RegExp Brackets\"     defStyleNum=\"dsSpecialString\" underline=\"1\" spellChecking=\"false\"/>\n\t\t<itemData name=\"Text Quoted Open\"         defStyleNum=\"dsString\"        underline=\"1\" spellChecking=\"false\"/>\n\n\t\t<itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<keywords casesensitive=\"true\" additionalDeliminator=\"&quot;&apos;&#096;\" weakDeliminator=\"-\"/>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\"/>\n\t</comments>\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sgml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"SGML\" version=\"2\" kateversion=\"2.2\" section=\"Markup\" extensions=\"*.sgml\" mimetype=\"text/sgml\">\n  <highlighting>\n    <contexts>\n       <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n         <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\"/>\n         <RegExpr attribute=\"Tag\" context=\"Attribute\" String=\"&lt;\\s*\\/?\\s*[a-zA-Z_:][a-zA-Z0-9._:-]*\" />\n       </context>\n\n       <context attribute=\"Attribute Name\" lineEndContext=\"#stay\" name=\"Attribute\" >\n          <Detect2Chars attribute=\"Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n          <DetectChar attribute=\"Tag\" context=\"#pop\" char=\"&gt;\" />\n          <RegExpr attribute=\"Normal Text\" context=\"Value\" String=\"\\s*=\\s*\" />\n       </context>\n\n       <context attribute=\"Attribute Value\" lineEndContext=\"#stay\" name=\"Value\" >\n         <Detect2Chars attribute=\"Tag\" context=\"#pop#pop\" char=\"/\" char1=\"&gt;\" />\n          <DetectChar attribute=\"Tag\" context=\"#pop#pop\" char=\"&gt;\" />\n         <DetectChar attribute=\"Attribute Value\" context=\"Value 2\" char=\"&quot;\" />\n       </context>\n\n       <context attribute=\"Attribute Value\" lineEndContext=\"#stay\" name=\"Value 2\" >\n         <DetectChar attribute=\"Attribute Value\" context=\"#pop#pop\" char=\"&quot;\" />\n       </context>\n\n       <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment\" >\n         <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\"/>\n       </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Tag\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Attribute Name\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Attribute Value\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;!--\" end=\"//--&gt;\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sieve.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Highlighting for Sieve scripts (RFC 5228) and\n     Sieve extensions published at https://www.iana.org/assignments/sieve-extensions/sieve-extensions.xhtml\n-->\n<language\n    name=\"Sieve\"\n    version=\"6\"\n    kateversion=\"5.0\"\n    section=\"Scripts\"\n    extensions=\"*.siv;*.sieve\"\n    mimetype=\"application/sieve\"\n    author=\"Volker Krause (vkrause@kde.org)\"\n    license=\"MIT\">\n    <highlighting>\n        <list name=\"keyword-list\">\n            <item>require</item>\n            <item>if</item>\n            <item>elsif</item>\n            <item>else</item>\n            <item>foreverypart</item>\n            <item>global</item>\n        </list>\n        <list name=\"action-list\">\n            <item>addflag</item>\n            <item>addheader</item>\n            <item>break</item>\n            <item>convert</item>\n            <item>debug_log</item>\n            <item>deleteheader</item>\n            <item>discard</item>\n            <item>enclose</item>\n            <item>ereject</item>\n            <item>error</item>\n            <item>extracttext</item>\n            <item>fileinto</item>\n            <item>include</item>\n            <item>keep</item>\n            <item>notify</item>\n            <item>redirect</item>\n            <item>reject</item>\n            <item>removeflag</item>\n            <item>replace</item>\n            <item>return</item>\n            <item>setflag</item>\n            <item>set</item>\n            <item>stop</item>\n            <item>vacation</item>\n        </list>\n        <list name=\"test-list\">\n            <item>address</item>\n            <item>allof</item>\n            <item>anyof</item>\n            <item>body</item>\n            <item>currentdate</item>\n            <item>date</item>\n            <item>duplicate</item>\n            <item>envelope</item>\n            <item>environment</item>\n            <item>exists</item>\n            <item>false</item>\n            <item>hasflag</item>\n            <item>header</item>\n            <item>ihave</item>\n            <item>mailboxexists</item>\n            <item>metadata</item>\n            <item>metadataexists</item>\n            <item>not</item>\n            <item>notify_method_capability</item>\n            <item>servermetadata</item>\n            <item>servermetadataexists</item>\n            <item>spamtest</item>\n            <item>size</item>\n            <item>string</item>\n            <item>true</item>\n            <item>valid_notify_method</item>\n            <item>virustest</item>\n        </list>\n        <list name=\"match-type-list\">\n            <item>:contains</item>\n            <item>:count</item>\n            <item>:is</item>\n            <item>:matches</item>\n            <item>:regex</item>\n            <item>:value</item>\n        </list>\n\n        <contexts>\n            <context name=\"normal-context\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectChar attribute=\"Comment\" char=\"#\" context=\"comment-context\"/>\n                <Detect2Chars attribute=\"Comment\" context=\"multiline-comment-context\" char=\"/\" char1=\"*\" beginRegion=\"CommentRegion\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keyword-list\"/>\n                <keyword attribute=\"Action\" context=\"#stay\" String=\"action-list\"/>\n                <keyword attribute=\"Test\" context=\"#stay\" String=\"test-list\"/>\n                <keyword attribute=\"Match Type\" context=\"#stay\" String=\"match-type-list\"/>\n                <DetectChar context=\"#stay\" char=\"{\" beginRegion=\"BlockRegion\"/>\n                <DetectChar context=\"#stay\" char=\"}\" endRegion=\"BlockRegion\"/>\n                <DetectChar attribute=\"String\" context=\"string-context\" char=\"&quot;\"/>\n                <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"\\d+[KMG]?\"/>\n                <RegExpr attribute=\"String\" context=\"multiline-string-context\" String=\"text:$\" beginRegion=\"StringRegion\"/>\n                <RegExpr attribute=\"Argument\" context=\"#stay\" String=\":\\w+\"/>\n            </context>\n\n            <context name=\"string-context\" attribute=\"String\" lineEndContext=\"#pop\">\n                <LineContinue attribute=\"String\" context=\"#stay\"/>\n                <HlCStringChar attribute=\"Special Character\" context=\"#stay\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n                <IncludeRules context=\"common-string-rules\"/>\n            </context>\n            <context name=\"multiline-string-context\" attribute=\"String\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"String\" context=\"#pop\" String=\"\\.$\" column=\"0\" endRegion=\"StringRegion\"/>\n                <HlCStringChar attribute=\"Special Character\" context=\"#stay\"/>\n                <IncludeRules context=\"common-string-rules\"/>\n            </context>\n            <context name=\"common-string-rules\" attribute=\"String\" lineEndContext=\"#stay\">\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{\\w+\\}\"/>\n                <RegExpr attribute=\"Special Character\" context=\"#stay\" String=\"\\$\\{hex:[ 0-9a-f]+}\" insensitive=\"true\"/>\n                <RegExpr attribute=\"Special Character\" context=\"#stay\" String=\"\\$\\{unicode:[ 0-9a-f]+}\" insensitive=\"true\"/>\n            </context>\n\n            <context name=\"comment-context\" lineEndContext=\"#pop\" attribute=\"Comment\">\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n            <context name=\"multiline-comment-context\" lineEndContext=\"#stay\" attribute=\"Comment\">\n                <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"CommentRegion\"/>\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n            <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n            <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n            <itemData name=\"Special Character\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n            <itemData name=\"Action\" defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n            <itemData name=\"Test\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\"/>\n            <itemData name=\"Match Type\" defStyleNum=\"dsExtension\" spellChecking=\"false\"/>\n            <itemData name=\"Variable\" defStyleNum=\"dsVariable\" spellChecking=\"false\"/>\n            <itemData name=\"Argument\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n        </itemDatas>\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"CommentRegion\"/>\n            <comment name=\"singleLine\" start=\"#\"/>\n        </comments>\n        <keywords casesensitive=\"1\" weakDeliminator=\":\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sisu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"SiSU\" version=\"5\" section=\"Markup\" kateversion=\"2.4\" extensions=\"*.sst;*.ssm;*.ssi;*._sst;*.-sst;\" author=\"Ralph Amissah (ralph.amissah@gmail.com)\" license=\"LGPL\" >\n  <highlighting>\n    <list name=\"somename\">\n      <item>class</item>\n      <item>const</item>\n    </list>\n    <contexts>\n    <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n      <keyword attribute=\"Keyword\" context=\"#stay\" String=\"somename\" />\n      <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n      <RegExpr String=\"^(0~\\S+|@\\S+)\\s.+$\" attribute=\"Header\" context=\"#pop\" />\n      <RegExpr String=\"^:?[A-C1-6]~.+$\" attribute=\"Heading\" context=\"#pop\" />\n      <Detect2Chars char=\"~\" char1=\"{\" attribute=\"Endnote\" context=\"footnote\"/>\n      <Detect2Chars char=\"^\" char1=\"~\" attribute=\"Endnote\" context=\"endnote\"/>\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n      <StringDetect String=\"&lt;br&gt;\" attribute=\"Break\" context=\"#pop\" />\n      <RegExpr String=\"\\{.+?\\}(http:\\/\\/\\S+|image)\" attribute=\"Link\" context=\"#stay\"/>\n      <RegExpr String=\"(^|\\s)http:\\/\\/\\S+\" attribute=\"Link\" context=\"#stay\"/>\n      <RegExpr String=\"^!_ .+\" attribute=\"Bold\" context=\"boldline\"/>\n      <RegExpr String=\"^(_[12]|_\\*|_[12]\\*)\\s\" attribute=\"Indent\" context=\"#stay\"/>\n      <Detect2Chars char=\"~\" char1=\"^\" attribute=\"Endnote\" context=\"#stay\"/>\n      <RegExpr String=\"^%+\\s.+$\" attribute=\"Comment\" context=\"#stay\" endRegion=\"regionMarker\" firstNonSpace=\"true\" />\n    </context>\n    <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\" >\n      <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n    </context>\n    <context attribute=\"Endnote\" lineEndContext=\"#stay\" name=\"footnote\" >\n      <Detect2Chars char=\"}\" char1=\"~\" attribute=\"Endnote\" context=\"#pop\" />\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Bold\" lineEndContext=\"#stay\" name=\"bold\" >\n      <Detect2Chars char=\"}\" char1=\"*\" attribute=\"Bold\" context=\"#pop\" />\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Bold\" lineEndContext=\"#stay\" name=\"emphasis\" >\n      <Detect2Chars char=\"}\" char1=\"!\" attribute=\"Bold\" context=\"#pop\" />\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Italic\" lineEndContext=\"#stay\" name=\"italic\" >\n      <Detect2Chars char=\"}\" char1=\"/\" attribute=\"Italic\" context=\"#pop\" />\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Underscore\" lineEndContext=\"#stay\" name=\"underscore\" >\n      <Detect2Chars char=\"}\" char1=\"_\" attribute=\"Underscore\" context=\"#pop\" />\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Superscript\" lineEndContext=\"#stay\" name=\"superscript\" >\n      <Detect2Chars char=\"}\" char1=\"^\" attribute=\"Superscript\" context=\"#pop\" />\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Subscript\" lineEndContext=\"#stay\" name=\"subscript\" >\n      <Detect2Chars attribute=\"Subscript\" context=\"#pop\" char=\"}\" char1=\",\" />\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Strike\" lineEndContext=\"#stay\" name=\"strike\" >\n      <Detect2Chars char=\"}\" char1=\"-\" attribute=\"Strike\" context=\"#pop\" />\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"+\" char1=\"{\" attribute=\"Insert\" context=\"insert\"/>\n    </context>\n    <context attribute=\"Insert\" lineEndContext=\"#stay\" name=\"insert\" >\n      <Detect2Chars char=\"}\" char1=\"+\" attribute=\"Insert\" context=\"#pop\" />\n      <Detect2Chars char=\"!\" char1=\"{\" attribute=\"Bold\" context=\"emphasis\"/>\n      <Detect2Chars char=\"*\" char1=\"{\" attribute=\"Bold\" context=\"bold\"/>\n      <Detect2Chars char=\"/\" char1=\"{\" attribute=\"Italic\" context=\"italic\"/>\n      <Detect2Chars char=\"_\" char1=\"{\" attribute=\"Underscore\" context=\"underscore\"/>\n      <Detect2Chars char=\"^\" char1=\"{\" attribute=\"Superscript\" context=\"superscript\"/>\n      <Detect2Chars char=\",\" char1=\"{\" attribute=\"Subscript\" context=\"subscript\"/>\n      <Detect2Chars char=\"-\" char1=\"{\" attribute=\"Strike\" context=\"strike\"/>\n    </context>\n    <context attribute=\"Endnote\" lineEndContext=\"#pop\" name=\"endnote\" />\n    <context attribute=\"Bold\" lineEndContext=\"#pop\" name=\"boldline\" />\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Header\" defStyleNum=\"dsNormal\" color=\"#1c869b\" selColor=\"#60FFFF\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Heading\" defStyleNum=\"dsNormal\" color=\"#ff0000\" selColor=\"#60FFFF\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Bold\" defStyleNum=\"dsNormal\" color=\"#800000\" selColor=\"#60FFFF\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"Italic\" defStyleNum=\"dsNormal\" color=\"#800000\" selColor=\"#60FFFF\" bold=\"0\" italic=\"1\"/>\n      <itemData name=\"Underscore\" defStyleNum=\"dsNormal\" color=\"#F00000\" selColor=\"#80FFD0\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Superscript\" defStyleNum=\"dsNormal\" color=\"#F00000\" selColor=\"#80FFD0\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Subscript\" defStyleNum=\"dsNormal\" color=\"#F00000\" selColor=\"#80FFD0\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Strike\" defStyleNum=\"dsNormal\" color=\"#F00000\" selColor=\"#80FFD0\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Insert\" defStyleNum=\"dsNormal\" color=\"#F00000\" selColor=\"#80FFD0\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Endnote\" defStyleNum=\"dsNormal\" color=\"#086800\" selColor=\"#60FFFF\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Link\" defStyleNum=\"dsNormal\" color=\"#0000FF\" selColor=\"#60FFFF\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Break\" defStyleNum=\"dsNormal\" color=\"#FF0000\" selColor=\"#60FFFF\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Indent\" defStyleNum=\"dsNormal\" color=\"#F00000\" selColor=\"#80FFD0\" bold=\"0\" italic=\"0\"/>\n    </itemDatas>\n  </highlighting>  \n  <general>\n    <keywords weakDeliminator=\"\\\" wordWrapDeliminator=\",{}[]\"/>\n    <comments>\n      <comment name=\"singleLine\" start=\"%\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/smali.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n    <!ENTITY hex \"[\\da-fA-F]\">\n    <!ENTITY label \"(?&lt;=^|\\s|{)\\:\\w+\">\n    <!ENTITY typeIdentifiers \"ZBSCIJFD\">\n    <!ENTITY fieldTypeLookBehind \"\\w\\:\">\n    <!ENTITY fieldLookBehind \"[\\s,;\\(\\)]\">\n    <!ENTITY builtin \"(javax?|dalvik|android)/[\\w\\$/]+\">\n]>\n<language name=\"Smali\" version=\"1\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.smali\" mimetype=\"text/x-smali\" license=\"MIT\">\n    <highlighting>\n        <list name=\"mnemonics\">\n            <item>nop</item>\n            <item>move</item>\n            <item>move/from16</item>\n            <item>move/16</item>\n            <item>move-wide</item>\n            <item>move-wide/from16</item>\n            <item>move-wide/16</item>\n            <item>move-object</item>\n            <item>move-object/from16</item>\n            <item>move-object/16</item>\n            <item>move-result</item>\n            <item>move-result-wide</item>\n            <item>move-result-object</item>\n            <item>move-exception</item>\n            <item>return-void</item>\n            <item>return</item>\n            <item>return-wide</item>\n            <item>return-object</item>\n            <item>const/4</item>\n            <item>const/16</item>\n            <item>const</item>\n            <item>const/high16</item>\n            <item>const-wide/16</item>\n            <item>const-wide/32</item>\n            <item>const-wide</item>\n            <item>const-wide/high16</item>\n            <item>const-string</item>\n            <item>const-string/jumbo</item>\n            <item>const-class</item>\n            <item>monitor-enter</item>\n            <item>monitor-exit</item>\n            <item>check-cast</item>\n            <item>instance-of</item>\n            <item>array-length</item>\n            <item>new-instance</item>\n            <item>new-array</item>\n            <item>filled-new-array</item>\n            <item>filled-new-array/range</item>\n            <item>fill-array-data</item>\n            <item>throw</item>\n            <item>goto</item>\n            <item>goto/16</item>\n            <item>goto/32</item>\n            <item>packed-switch</item>\n            <item>sparse-switch</item>\n            <item>cmpl-float</item>\n            <item>cmpg-float</item>\n            <item>cmpl-double</item>\n            <item>cmpg-double</item>\n            <item>cmp-long</item>\n            <item>if-eq</item>\n            <item>if-ne</item>\n            <item>if-lt</item>\n            <item>if-ge</item>\n            <item>if-gt</item>\n            <item>if-le</item>\n            <item>if-eqz</item>\n            <item>if-nez</item>\n            <item>if-ltz</item>\n            <item>if-gez</item>\n            <item>if-gtz</item>\n            <item>if-lez</item>\n            <item>aget</item>\n            <item>aget-wide</item>\n            <item>aget-object</item>\n            <item>aget-boolean</item>\n            <item>aget-byte</item>\n            <item>aget-char</item>\n            <item>aget-short</item>\n            <item>aput</item>\n            <item>aput-wide</item>\n            <item>aput-object</item>\n            <item>aput-boolean</item>\n            <item>aput-byte</item>\n            <item>aput-char</item>\n            <item>aput-short</item>\n            <item>iget</item>\n            <item>iget-wide</item>\n            <item>iget-object</item>\n            <item>iget-boolean</item>\n            <item>iget-byte</item>\n            <item>iget-char</item>\n            <item>iget-short</item>\n            <item>iput</item>\n            <item>iput-wide</item>\n            <item>iput-object</item>\n            <item>iput-boolean</item>\n            <item>iput-byte</item>\n            <item>iput-char</item>\n            <item>iput-short</item>\n            <item>sget</item>\n            <item>sget-wide</item>\n            <item>sget-object</item>\n            <item>sget-boolean</item>\n            <item>sget-byte</item>\n            <item>sget-char</item>\n            <item>sget-short</item>\n            <item>sput</item>\n            <item>sput-wide</item>\n            <item>sput-object</item>\n            <item>sput-boolean</item>\n            <item>sput-byte</item>\n            <item>sput-char</item>\n            <item>sput-short</item>\n            <item>invoke-virtual</item>\n            <item>invoke-super</item>\n            <item>invoke-direct</item>\n            <item>invoke-static</item>\n            <item>invoke-interface</item>\n            <item>invoke-virtual/range</item>\n            <item>invoke-super/range</item>\n            <item>invoke-direct/range</item>\n            <item>invoke-static/range</item>\n            <item>invoke-interface/range</item>\n            <item>neg-int</item>\n            <item>not-int</item>\n            <item>neg-long</item>\n            <item>not-long</item>\n            <item>neg-float</item>\n            <item>neg-double</item>\n            <item>int-to-long</item>\n            <item>int-to-float</item>\n            <item>int-to-double</item>\n            <item>long-to-int</item>\n            <item>long-to-float</item>\n            <item>long-to-double</item>\n            <item>float-to-int</item>\n            <item>float-to-long</item>\n            <item>float-to-double</item>\n            <item>double-to-int</item>\n            <item>double-to-long</item>\n            <item>double-to-float</item>\n            <item>int-to-byte</item>\n            <item>int-to-char</item>\n            <item>int-to-short</item>\n            <item>add-int</item>\n            <item>sub-int</item>\n            <item>mul-int</item>\n            <item>div-int</item>\n            <item>rem-int</item>\n            <item>and-int</item>\n            <item>or-int</item>\n            <item>xor-int</item>\n            <item>shl-int</item>\n            <item>shr-int</item>\n            <item>ushr-int</item>\n            <item>add-long</item>\n            <item>sub-long</item>\n            <item>mul-long</item>\n            <item>div-long</item>\n            <item>rem-long</item>\n            <item>and-long</item>\n            <item>or-long</item>\n            <item>xor-long</item>\n            <item>shl-long</item>\n            <item>shr-long</item>\n            <item>ushr-long</item>\n            <item>add-float</item>\n            <item>sub-float</item>\n            <item>mul-float</item>\n            <item>div-float</item>\n            <item>rem-float</item>\n            <item>add-double</item>\n            <item>sub-double</item>\n            <item>mul-double</item>\n            <item>div-double</item>\n            <item>rem-double</item>\n            <item>add-int/2addr</item>\n            <item>sub-int/2addr</item>\n            <item>mul-int/2addr</item>\n            <item>div-int/2addr</item>\n            <item>rem-int/2addr</item>\n            <item>and-int/2addr</item>\n            <item>or-int/2addr</item>\n            <item>xor-int/2addr</item>\n            <item>shl-int/2addr</item>\n            <item>shr-int/2addr</item>\n            <item>ushr-int/2addr</item>\n            <item>add-long/2addr</item>\n            <item>sub-long/2addr</item>\n            <item>mul-long/2addr</item>\n            <item>div-long/2addr</item>\n            <item>rem-long/2addr</item>\n            <item>and-long/2addr</item>\n            <item>or-long/2addr</item>\n            <item>xor-long/2addr</item>\n            <item>shl-long/2addr</item>\n            <item>shr-long/2addr</item>\n            <item>ushr-long/2addr</item>\n            <item>add-float/2addr</item>\n            <item>sub-float/2addr</item>\n            <item>mul-float/2addr</item>\n            <item>div-float/2addr</item>\n            <item>rem-float/2addr</item>\n            <item>add-double/2addr</item>\n            <item>sub-double/2addr</item>\n            <item>mul-double/2addr</item>\n            <item>div-double/2addr</item>\n            <item>rem-double/2addr</item>\n            <item>add-int/lit16</item>\n            <item>rsub-int</item>\n            <item>mul-int/lit16</item>\n            <item>div-int/lit16</item>\n            <item>rem-int/lit16</item>\n            <item>and-int/lit16</item>\n            <item>or-int/lit16</item>\n            <item>xor-int/lit16</item>\n            <item>add-int/lit8</item>\n            <item>rsub-int/lit8</item>\n            <item>mul-int/lit8</item>\n            <item>div-int/lit8</item>\n            <item>rem-int/lit8</item>\n            <item>and-int/lit8</item>\n            <item>or-int/lit8</item>\n            <item>xor-int/lit8</item>\n            <item>shl-int/lit8</item>\n            <item>shr-int/lit8</item>\n            <item>ushr-int/lit8</item>\n            <item>iget-volatile</item>\n            <item>iput-volatile</item>\n            <item>sget-volatile</item>\n            <item>sput-volatile</item>\n            <item>iget-object-volatile</item>\n            <item>iget-wide-volatile</item>\n            <item>iput-wide-volatile</item>\n            <item>sget-wide-volatile</item>\n            <item>sput-wide-volatile</item>\n            <item>sget-object-volatile</item>\n            <item>throw-verification-error</item>\n            <item>execute-inline</item>\n            <item>execute-inline/range</item>\n            <item>invoke-object-init/range</item>\n            <item>return-void-barrier</item>\n            <item>iget-quick</item>\n            <item>invoke-polymorphic</item>\n            <item>invoke-polymorphic/range</item>\n            <item>invoke-custom</item>\n            <item>invoke-custom/range</item>\n            <item>const-method-handle</item>\n            <item>const-method-type</item>\n        </list>\n        <list name=\"keywords\">\n            <!-- Access flags -->\n            <item>public</item>\n            <item>private</item>\n            <item>protected</item>\n            <item>static</item>\n            <item>final</item>\n            <item>synchronized</item>\n            <item>volatile</item>\n            <item>bridge</item>\n            <item>transient</item>\n            <item>varargs</item>\n            <item>native</item>\n            <item>interface</item>\n            <item>abstract</item>\n            <item>strictfp</item>\n            <item>synthetic</item>\n            <item>annotation</item>\n            <item>enum</item>\n            <item>constructor</item>\n            <item>declared-synchronized</item>\n\n            <!-- Visibility values -->\n            <item>build</item>\n            <item>runtime</item>\n            <item>system</item>\n        </list>\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n                <WordDetect attribute=\"Attribute\" String=\".class\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".super\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".implements\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".source\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".field\" context=\"#stay\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+field\" firstNonSpace=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".annotation\" context=\"Annotation\" beginRegion=\"Annotation\" />\n                <WordDetect attribute=\"Attribute\" String=\".subannotation\" context=\"#stay\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+subannotation\" firstNonSpace=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".enum\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".method\" context=\"MethodDeclaration\" beginRegion=\"Method\" />\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n                <IncludeRules context=\"Global\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Literal\">\n                <WordDetect attribute=\"Bool\" String=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Bool\" String=\"false\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"-infinity\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"infinity\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"-infinityD\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"infinityD\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"-infinityF\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"infinityF\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"NaN\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"NaND\" insensitive=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Float\" String=\"NaNF\" insensitive=\"true\" context=\"#stay\" />\n                <RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\-?\\d*(\\d+\\.|\\.\\d+|\\d+)\\d*[eE][\\-\\+]?\\d+[dDfF]?\\b\" />\n                <RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\-?\\d*(\\d+\\.|\\.\\d+)\\d*[dDfF]?\" />\n                <RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\-?\\d+[dDfF]\\b\" />\n                <RegExpr attribute=\"Float\" context=\"#stay\" String=\"\\-?0x&hex;*(\\.|&hex;+)&hex;*[pP]\\-?\\d+[dDfF]?\\b\" />\n                <RegExpr attribute=\"Hex\" context=\"#stay\" String=\"\\-?0x&hex;+[LtTsS]?\\b\" />\n                <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"\\-?\\d+[tTLsS]?\\b\" />\n                <HlCChar attribute=\"Char\" context=\"#stay\" />\n                <RegExpr attribute=\"Char\" context=\"#stay\" String=\"'\\\\u&hex;{4}'\" />\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Global\">\n                <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" />\n                <RegExpr attribute=\"Method\" context=\"#stay\" String=\"\\b[\\w\\$]+\\s*(?=\\s*>?\\s*\\()\" />\n                <RegExpr attribute=\"Field\" context=\"#stay\" String=\"\\b[\\w\\$]+\\s*(?=\\:)\" />\n                <IncludeRules context=\"Literal\" />\n                <RegExpr attribute=\"Built-in\" context=\"#stay\" String=\"(?&lt;=&fieldTypeLookBehind;L)&builtin;\" />\n                <RegExpr attribute=\"Built-in\" context=\"#stay\" String=\"(?&lt;=&fieldLookBehind;L)&builtin;\" />\n                <RegExpr attribute=\"Built-in\" context=\"#stay\" String=\"(?&lt;=\\[L)&builtin;\" />\n                <RegExpr attribute=\"Built-in\" context=\"#stay\" String=\"(?&lt;=[&typeIdentifiers;]L)&builtin;\" />\n                <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"(?&lt;=&fieldTypeLookBehind;L)[\\w/\\$]+\" />\n                <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"(?&lt;=&fieldLookBehind;L)[\\w/\\$]+\" />\n                <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"(?&lt;=\\[L)[\\w/\\$]+\" />\n                <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"(?&lt;=[&typeIdentifiers;]L)[\\w/\\$]+\" />\n                <RegExpr attribute=\"Type Identifier\" context=\"#stay\" String=\"(?&lt;=&fieldTypeLookBehind;)\\[*([&typeIdentifiers;]|L)\" />\n                <RegExpr attribute=\"Type Identifier\" context=\"#stay\" String=\"(?&lt;=&fieldLookBehind;)(\\[*[&typeIdentifiers;])*\\[*([&typeIdentifiers;]|L)\" />\n                <RegExpr attribute=\"Type Identifier\" context=\"#stay\" String=\"(?&lt;=[;&typeIdentifiers;\\(]\\))V\" />\n                <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\".\" char1=\".\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"&lt;\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"&gt;\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\":\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\";\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"=\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"(\" />\n                <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\")\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"Method\" name=\"MethodDeclaration\">\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n                <IncludeRules context=\"Global\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Method\">\n                <WordDetect attribute=\"Attribute\" String=\".registers\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".locals\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".annotation\" context=\"Annotation\" beginRegion=\"Annotation\" />\n                <WordDetect attribute=\"Attribute\" String=\".array-data\" context=\"ArrayData\" beginRegion=\"ArrayData\" />\n                <WordDetect attribute=\"Attribute\" String=\".packed-switch\" context=\"PackedSwitch\" beginRegion=\"PackedSwitch\" />\n                <WordDetect attribute=\"Attribute\" String=\".sparse-switch\" context=\"SparseSwitch\" beginRegion=\"SparseSwitch\" />\n                <WordDetect attribute=\"Attribute\" String=\".catch\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".catchall\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".line\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".param\" context=\"Param\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+param\" firstNonSpace=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".local\" context=\"#stay\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+local\" firstNonSpace=\"true\" context=\"#stay\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.restart\\s+local\" firstNonSpace=\"true\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".prologue\" context=\"#stay\" />\n                <WordDetect attribute=\"Attribute\" String=\".epilogue\" context=\"#stay\" />\n                <keyword attribute=\"Mnemonic\" context=\"#stay\" String=\"mnemonics\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+method\" firstNonSpace=\"true\" context=\"#pop#pop\" endRegion=\"Method\" />\n                <RegExpr attribute=\"Register\" context=\"#stay\" String=\"\\b(v|p)[0-9]+\\b\" />\n                <RegExpr attribute=\"Label\" context=\"#stay\" String=\"&label;\" />\n                <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"-\" char1=\">\" />\n                <IncludeRules context=\"Global\" />\n            </context>\n            <context attribute=\"Annotation\" lineEndContext=\"AnnotationBody\" name=\"Annotation\">\n                <IncludeRules context=\"Global\" />\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n            </context>\n            <context attribute=\"Attribute\" lineEndContext=\"#stay\" name=\"AnnotationBody\">\n                <IncludeRules context=\"Global\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+annotation\" firstNonSpace=\"true\" context=\"#pop#pop\" endRegion=\"Annotation\" />\n            </context>\n            <context attribute=\"Attribute\" lineEndContext=\"PackedSwitchBody\" name=\"PackedSwitch\">\n                <IncludeRules context=\"Literal\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"PackedSwitchBody\">\n                <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" />\n                <RegExpr attribute=\"Label\" context=\"#stay\" String=\"&label;\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+packed\\-switch\" firstNonSpace=\"true\" context=\"#pop#pop\" endRegion=\"PackedSwitch\" />\n            </context>\n            <context attribute=\"Attribute\" lineEndContext=\"SparseSwitchBody\" name=\"SparseSwitch\">\n                <IncludeRules context=\"Literal\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SparseSwitchBody\">\n                <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" />\n                <IncludeRules context=\"Literal\" />\n                <RegExpr attribute=\"Label\" context=\"#stay\" String=\"&label;\" />\n                <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"-\" char1=\">\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+sparse\\-switch\" firstNonSpace=\"true\" context=\"#pop#pop\" endRegion=\"SparseSwitch\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"ArrayDataBody\" name=\"ArrayData\">\n                <IncludeRules context=\"Literal\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ArrayDataBody\">\n                <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" />\n                <IncludeRules context=\"Literal\" />\n                <RegExpr attribute=\"Attribute\" String=\"\\.end\\s+array\\-data\" firstNonSpace=\"true\" context=\"#pop#pop\" endRegion=\"ArrayData\" />\n            </context>\n            <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Param\">\n                <RegExpr attribute=\"Register\" context=\"#stay\" String=\"\\bp[0-9]+\\b\" />\n                <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"(?&lt;=,)\\s*[\\w]+\" />\n                <IncludeRules context=\"Literal\" />\n            </context>\n            <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n                <LineContinue attribute=\"String\" context=\"#stay\"/>\n                <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n                <RegExpr attribute=\"String Char\" context=\"#stay\" String=\"\\\\u[0-9a-fA-F]{4}\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\"     defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n            <itemData name=\"Attribute\"       defStyleNum=\"dsAttribute\" spellChecking=\"false\" />\n            <itemData name=\"Annotation\"      defStyleNum=\"dsAttribute\" spellChecking=\"false\" />\n            <itemData name=\"Mnemonic\"        defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n            <itemData name=\"Keyword\"         defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n            <itemData name=\"Method\"          defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n            <itemData name=\"Register\"        defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n            <itemData name=\"Field\"           defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n            <itemData name=\"Variable\"        defStyleNum=\"dsVariable\" />\n            <itemData name=\"Operator\"        defStyleNum=\"dsOperator\" spellChecking=\"false\" />\n            <itemData name=\"Type Identifier\" defStyleNum=\"dsDataType\" italic=\"true\" spellChecking=\"false\" />\n            <itemData name=\"Data Type\"       defStyleNum=\"dsDataType\" italic=\"false\" spellChecking=\"false\" />\n            <itemData name=\"Label\"           defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n            <itemData name=\"Decimal\"         defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n            <itemData name=\"Bool\"            defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n            <itemData name=\"Hex\"             defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n            <itemData name=\"Float\"           defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n            <itemData name=\"Char\"            defStyleNum=\"dsChar\" spellChecking=\"false\" />\n            <itemData name=\"String\"          defStyleNum=\"dsString\" />\n            <itemData name=\"String Char\"     defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n            <itemData name=\"Comment\"         defStyleNum=\"dsComment\" />\n            <itemData name=\"Symbol\"          defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n            <itemData name=\"Built-in\"        defStyleNum=\"dsBuiltIn\" spellChecking=\"false\" />\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\"/>\n        </comments>\n        <keywords casesensitive=\"1\" weakDeliminator=\"-/[$\" />\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"SML\" version=\"4\" kateversion=\"2.3\" section=\"Sources\" extensions=\"*.sml;*.ml\" mimetype=\"\" author=\"Christoph Cullmann (cullmann@kde.org)\" license=\"MIT\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>abstype</item>\n      <item>and</item>\n      <item>andalso</item>\n      <item>as</item>\n      <item>case</item>\n      <item>do</item>\n      <item>datatype</item>\n      <item>else</item>\n      <item>end</item>\n      <item>eqtype</item>\n      <item>exception</item>\n      <item>false</item>\n      <item>fn</item>\n      <item>fun</item>\n      <item>functor</item>\n      <item>handle</item>\n      <item>if</item>\n      <item>in</item>\n      <item>include</item>\n      <item>infix</item>\n      <item>infixr</item>\n      <item>let</item>\n      <item>local</item>\n      <item>nonfix</item>\n      <item>of</item>\n      <item>op</item>\n      <item>open</item>\n      <item>orelse</item>\n      <item>raise</item>\n      <item>rec</item>\n      <item>sharing</item>\n      <item>sig</item>\n      <item>signature</item>\n      <item>struct</item>\n      <item>structure</item>\n      <item>then</item>\n      <item>true</item>\n      <item>type</item>\n      <item>val</item>\n      <item>where</item>\n      <item>with</item>\n      <item>withtype</item>\n      <item>while</item>\n    </list>\n    <list name=\"types\">\n      <item>unit</item>\n      <item>int</item>\n      <item>real</item>\n      <item>char</item>\n      <item>string</item>\n      <item>substring</item>\n      <item>word</item>\n      <item>ref</item>\n      <item>array</item>\n      <item>vector</item>\n      <item>bool</item>\n      <item>list</item>\n      <item>option</item>\n      <item>order</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <Detect2Chars attribute=\"Comment\" context=\"Multiline/Inline Comment\" char=\"(\" char1=\"*\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <HlCHex attribute=\"Decimal\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n      </context>\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multiline/Inline Comment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\")\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"String Char\"  defStyleNum=\"dsChar\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/spice.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"Spice\" section=\"Hardware\" version=\"4\" kateversion=\"5.0\" extensions=\"*.sp;*.hsp\" mimetype=\"text/spice\" author=\"Steven Robson (s.a.robson@sms.ed.ac.uk) and Anders Lund\" license=\"LGPL\">\n    <highlighting>\n\n        <contexts>\n\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n                <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\B\\.\\w+\" />\n                <Int attribute=\"Number\" context=\"#stay\"/>\n                <Float attribute=\"Number\" context=\"#stay\"/>\n                <AnyChar attribute=\"Comment\" String=\"$*\" context=\"Commentar 1\" />\n                <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n                <DetectChar attribute=\"String\" context=\"TickString\" char=\"'\"/>\n            </context>\n\n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n\n            <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n                <LineContinue attribute=\"String\" context=\"#stay\"/>\n                <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n            </context>\n\n            <context attribute=\"String\" lineEndContext=\"#pop\" name=\"TickString\">\n                <LineContinue attribute=\"String\" context=\"#stay\"/>\n                <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n                <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n            </context>\n\n        </contexts>\n\n        <itemDatas>\n                <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n                <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n                <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n                <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n                <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n                <itemData name=\"Number\"       defStyleNum=\"dsDecVal\"/>\n        </itemDatas>\n\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"*\" />\n        </comments>\n        <keywords casesensitive=\"1\" weakDeliminator=\".\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sql-mysql.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  MySQL syntax definition based on sql.xml by Yury Lebedev\n  original by Shane Wright (me@shanewright.co.uk)\n  modifications by Milian Wolff (mail@milianw.de)\n  v3 fix comments by Gene Thomas <gene@genethomas.com>\n-->\n<language name=\"SQL (MySQL)\" version=\"5\" kateversion=\"5.0\" section=\"Database\" extensions=\"*.sql;*.SQL;*.ddl;*.DDL\" mimetype=\"text/x-sql\" casesensitive=\"0\" author=\"Shane Wright (me@shanewright.co.uk)\" license=\"\">\n  <highlighting>\n    <list name=\"controlFlow\">\n      <item>BEGIN</item>\n      <item>CASE</item>\n      <item>DO</item>\n      <item>ELSE</item>\n      <item>ELSEIF</item>\n      <item>END</item>\n      <item>FOR</item>\n      <item>IF</item>\n      <item>LOOP</item>\n      <item>RETURN</item>\n      <item>THEN</item>\n      <item>WHEN</item>\n      <item>WHILE</item>\n    </list>\n    <list name=\"operators\">\n      <item>AND</item>\n      <item>BETWEEN</item>\n      <item>IN</item>\n      <item>IS</item>\n      <item>LIKE</item>\n      <item>NOT</item>\n      <item>OR</item>\n    </list>\n    <list name=\"keywords\">\n      <item>ACCESS</item>\n      <item>ADD</item>\n      <item>ALL</item>\n      <item>ALTER</item>\n      <item>ANALYZE</item>\n      <item>AS</item>\n      <item>ASC</item>\n      <item>AUTO_INCREMENT</item>\n      <item>BDB</item>\n      <item>BERKELEYDB</item>\n      <item>BOTH</item>\n      <item>BY</item>\n      <item>CASCADE</item>\n      <item>CHANGE</item>\n      <!-- <item> CHARACTER SET </item>\n        needs special regexp (see below) -->\n      <item>CHARSET</item>\n      <item>COLUMN</item>\n      <item>COLUMNS</item>\n      <item>CONSTRAINT</item>\n      <item>CREATE</item>\n      <item>CROSS</item>\n      <item>CURRENT_DATE</item>\n      <item>CURRENT_TIME</item>\n      <item>CURRENT_TIMESTAMP</item>\n      <item>DATABASE</item>\n      <item>DATABASES</item>\n      <item>DAY_HOUR</item>\n      <item>DAY_MINUTE</item>\n      <item>DAY_SECOND</item>\n      <item>DEC</item>\n      <item>DECLARE</item>\n      <item>DEFAULT</item>\n      <item>DELAYED</item>\n      <item>DELETE</item>\n      <item>DESC</item>\n      <item>DESCRIBE</item>\n      <item>DISTINCT</item>\n      <item>DISTINCTROW</item>\n      <item>DROP</item>\n      <item>ENCLOSED</item>\n      <item>ESCAPED</item>\n      <item>EXISTS</item>\n      <item>EXPLAIN</item>\n      <item>FIELDS</item>\n      <item>FOREIGN</item>\n      <item>FROM</item>\n      <item>FULLTEXT</item>\n      <item>FUNCTION</item>\n      <item>GRANT</item>\n      <item>GROUP</item>\n      <item>HAVING</item>\n      <item>HIGH_PRIORITY</item>\n      <item>IGNORE</item>\n      <item>INDEX</item>\n      <item>INFILE</item>\n      <item>INNER</item>\n      <item>INNODB</item>\n      <item>INSERT</item>\n      <item>INTERVAL</item>\n      <item>INTO</item>\n      <item>JOIN</item>\n      <item>KEY</item>\n      <item>KEYS</item>\n      <item>KILL</item>\n      <item>LEADING</item>\n      <item>LEFT</item>\n      <item>LIMIT</item>\n      <item>LINES</item>\n      <item>LOAD</item>\n      <item>LOCK</item>\n      <item>LOW_PRIORITY</item>\n      <item>MASTER_SERVER_ID</item>\n      <item>MATCH</item>\n      <item>MRG_MYISAM</item>\n      <item>NATIONAL</item>\n      <item>NATURAL</item>\n      <item>NULL</item>\n      <item>NUMERIC</item>\n      <item>ON</item>\n      <item>OPTIMIZE</item>\n      <item>OPTION</item>\n      <item>OPTIONALLY</item>\n      <item>ORDER</item>\n      <item>OUTER</item>\n      <item>OUTFILE</item>\n      <item>PARTIAL</item>\n      <item>PRECISION</item>\n      <item>PRIMARY</item>\n      <item>PRIVILEGES</item>\n      <item>PROCEDURE</item>\n      <item>PURGE</item>\n      <item>READ</item>\n      <item>REFERENCES</item>\n      <item>REGEXP</item>\n      <item>RENAME</item>\n      <item>REPLACE</item>\n      <item>REQUIRE</item>\n      <item>RESTRICT</item>\n      <item>RETURNS</item>\n      <item>REVOKE</item>\n      <item>RIGHT</item>\n      <item>RLIKE</item>\n      <item>SELECT</item>\n      <item>SET</item>\n      <item>SHOW</item>\n      <item>SONAME</item>\n      <item>SQL_BIG_RESULT</item>\n      <item>SQL_CALC_FOUND_ROWS</item>\n      <item>SQL_SMALL_RESULT</item>\n      <item>SSL</item>\n      <item>STARTING</item>\n      <item>STRAIGHT_JOIN</item>\n      <item>STRIPED</item>\n      <item>TABLE</item>\n      <item>TABLES</item>\n      <item>TERMINATED</item>\n      <item>TO</item>\n      <item>TRAILING</item>\n      <item>TRUNCATE</item>\n      <item>TYPE</item>\n      <item>UNION</item>\n      <item>UNIQUE</item>\n      <item>UNLOCK</item>\n      <item>UNSIGNED</item>\n      <item>UPDATE</item>\n      <item>USAGE</item>\n      <item>USE</item>\n      <item>USER_RESOURCES</item>\n      <item>USING</item>\n      <item>VALUES</item>\n      <item>VARYING</item>\n      <item>WITH</item>\n      <item>WHERE</item>\n      <item>WRITE</item>\n      <item>XOR</item>\n      <item>YEAR_MONTH</item>\n      <item>ZEROFILL</item>\n    </list>\n    <list name=\"functions\">\n      <!-- string functions -->\n      <item>ASCII</item>\n      <item>BIN</item>\n      <item>BIT_LENGTH</item>\n      <item>CHAR</item>\n      <item>CHARACTER_LENGTH</item>\n      <item>CHAR_LENGTH</item>\n      <item>COALESCE</item>\n      <item>CONCAT</item>\n      <item>CONCAT_WS</item>\n      <item>CONV</item>\n      <item>ELT</item>\n      <item>EXPORT_SET</item>\n      <item>FIELD</item>\n      <item>FIND_IN_SET</item>\n      <item>HEX</item>\n      <item>INSERT</item>\n      <item>INSTR</item>\n      <item>LCASE</item>\n      <item>LEFT</item>\n      <item>LENGTH</item>\n      <item>LOAD_FILE</item>\n      <item>LOCATE</item>\n      <item>LOWER</item>\n      <item>LPAD</item>\n      <item>LTRIM</item>\n      <item>MAKE_SET</item>\n      <item>MID</item>\n      <item>OCT</item>\n      <item>OCTET_LENGTH</item>\n      <item>ORD</item>\n      <item>POSITION</item>\n      <item>QUOTE</item>\n      <item>REPEAT</item>\n      <item>REPLACE</item>\n      <item>REVERSE</item>\n      <item>RIGHT</item>\n      <item>RPAD</item>\n      <item>RTRIM</item>\n      <item>SOUNDEX</item>\n      <item>SPACE</item>\n      <item>SUBSTRING</item>\n      <item>SUBSTRING_INDEX</item>\n      <item>TRIM</item>\n      <item>UCASE</item>\n      <item>UPPER</item>\n      <!-- math functions -->\n      <item>ABS</item>\n      <item>ACOS</item>\n      <item>ASIN</item>\n      <item>ATAN</item>\n      <item>ATAN2</item>\n      <item>CEILING</item>\n      <item>COS</item>\n      <item>COT</item>\n      <item>DEGREES</item>\n      <item>EXP</item>\n      <item>FLOOR</item>\n      <item>GREATEST</item>\n      <item>LEAST</item>\n      <item>LN</item>\n      <item>LOG</item>\n      <item>LOG10</item>\n      <item>LOG2</item>\n      <item>MOD</item>\n      <item>PI</item>\n      <item>POW</item>\n      <item>POWER</item>\n      <item>RADIANS</item>\n      <item>RAND</item>\n      <item>ROUND</item>\n      <item>SIGN</item>\n      <item>SIN</item>\n      <item>SQRT</item>\n      <item>TAN</item>\n      <!-- date/time functions -->\n      <item>ADDDATE</item>\n      <item>CURDATE</item>\n      <item>CURRENT_DATE</item>\n      <item>CURRENT_TIME</item>\n      <item>CURRENT_TIMESTAMP</item>\n      <item>CURTIME</item>\n      <item>DATE_ADD</item>\n      <item>DATE_FORMAT</item>\n      <item>DATE_SUB</item>\n      <item>DAYNAME</item>\n      <item>DAYOFMONTH</item>\n      <item>DAYOFWEEK</item>\n      <item>DAYOFYEAR</item>\n      <item>EXTRACT</item>\n      <item>FROM_DAYS</item>\n      <item>FROM_UNIXTIME</item>\n      <item>HOUR</item>\n      <item>MINUTE</item>\n      <item>MONTH</item>\n      <item>MONTHNAME</item>\n      <item>NOW</item>\n      <item>PERIOD_ADD</item>\n      <item>PERIOD_DIFF</item>\n      <item>QUARTER</item>\n      <item>SECOND</item>\n      <item>SEC_TO_TIME</item>\n      <item>SUBDATE</item>\n      <item>SYSDATE</item>\n      <item>TIME_FORMAT</item>\n      <item>TIME_TO_SEC</item>\n      <item>TO_DAYS</item>\n      <item>UNIX_TIMESTAMP</item>\n      <item>WEEK</item>\n      <item>WEEKDAY</item>\n      <item>YEAR</item>\n      <item>YEARWEEK</item>\n      <!-- cast functions -->\n      <item>CAST</item>\n      <item>CONVERT</item>\n      <!-- misc -->\n      <item>AES_DECRYPT</item>\n      <item>AES_ENCRYPT</item>\n      <item>BENCHMARK</item>\n      <item>BIT_COUNT</item>\n      <item>CONNECTION_ID</item>\n      <item>DATABASE</item>\n      <item>DECODE</item>\n      <item>DES_DECRYPT</item>\n      <item>DES_ENCRYPT</item>\n      <item>ENCODE</item>\n      <item>ENCRYPT</item>\n      <item>FORMAT</item>\n      <item>FOUND_ROWS</item>\n      <item>GET_LOCK</item>\n      <item>INET_ATON</item>\n      <item>INET_NTOA</item>\n      <item>IS_FREE_LOCK</item>\n      <item>LAST_INSERT_ID</item>\n      <item>MASTER_POS_WAIT</item>\n      <item>MD5</item>\n      <item>PASSWORD</item>\n      <item>RELEASE_LOCK</item>\n      <item>SESSION_USER</item>\n      <item>SHA</item>\n      <item>SHA1</item>\n      <item>SYSTEM_USER</item>\n      <item>USER</item>\n      <item>VERSION</item>\n      <!-- GROUP BY -->\n      <item>AVG</item>\n      <item>BIT_AND</item>\n      <item>BIT_OR</item>\n      <item>COUNT</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>STD</item>\n      <item>STDDEV</item>\n      <item>SUM</item>\n    </list>\n    <list name=\"types\">\n      <!-- strings -->\n      <item>BINARY</item>\n      <item>BLOB</item>\n      <item>CHAR</item>\n      <item>CHARACTER</item>\n      <item>ENUM</item>\n      <item>LONGBLOB</item>\n      <item>LONGTEXT</item>\n      <item>MEDIUMBLOB</item>\n      <item>MEDIUMTEXT</item>\n      <item>TEXT</item>\n      <item>TINYBLOB</item>\n      <item>TINYTEXT</item>\n      <item>VARBINARY</item>\n      <item>VARCHAR</item>\n      <!-- <item>SET</item>\n        needs special regexp (see below) -->\n      <!-- numeric -->\n      <item>BIGINT</item>\n      <item>BIT</item>\n      <item>BOOL</item>\n      <item>BOOLEAN</item>\n      <item>DEC</item>\n      <item>DECIMAL</item>\n      <item>DOUBLE</item>\n      <item>FIXED</item>\n      <item>FLOAT</item>\n      <item>INT</item>\n      <item>INTEGER</item>\n      <item>LONG</item>\n      <item>MEDIUMINT</item>\n      <item>MIDDLEINT</item>\n      <item>NUMERIC</item>\n      <item>TINYINT</item>\n      <item>REAL</item>\n      <item>SERIAL</item>\n      <item>SMALLINT</item>\n      <!-- date and time -->\n      <item>DATE</item>\n      <item>DATETIME</item>\n      <item>TIME</item>\n      <item>TIMESTAMP</item>\n      <item>YEAR</item>\n    </list>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n\n        <!-- comments, before operators -->\n        <DetectChar attribute=\"Comment\" context=\"SingleLineComment\" char=\"#\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"-\" char1=\"-\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"SingleLineComment\" String=\"rem\\b\" insensitive=\"true\" column=\"0\"/>\n\n        <LineContinue attribute=\"Symbol\" context=\"#stay\" char=\"/\" column=\"0\"/> <!-- conflict with \"operators\" keywords -->\n\n        <!-- problematic special cases -->\n        <!-- SET type -->\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" insensitive=\"true\" String=\"SET(?=\\s*\\()\"/>\n        <!-- keyword character set -->\n        <WordDetect attribute=\"Keyword\" context=\"#stay\" insensitive=\"true\" String=\"CHARACTER SET\"/>\n        <!-- using the lists -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <LineContinue attribute=\"Symbol\" context=\"#stay\" char=\"/\" column=\"0\"/>\n        <keyword attribute=\"Operator Keyword\" context=\"#stay\" String=\"operators\"/>\n        <keyword attribute=\"ControlFlow\" context=\"#stay\" String=\"controlFlow\"/>\n        <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"+-*/=&lt;&gt;\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"!\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"~\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"^\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\":\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\".\" char1=\".\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"|\" char1=\"|\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":&#38;\"/>\n        <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n\n        <DetectIdentifier/>\n        <!-- extra data types -->\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"%(?:bulk_(?:exceptions|rowcount)|found|isopen|notfound|rowcount|rowtype|type)\\b\" insensitive=\"true\"/>\n        <!-- numbers -->\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <!-- strings -->\n        <DetectChar attribute=\"String\" context=\"String\" char=\"'\"/>\n        <DetectChar attribute=\"String\" context=\"String2\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Name\" context=\"Name\" char=\"`\"/>\n\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"@@?[^@ \\t\\r\\n]\" column=\"0\"/>\n        <!-- for something like : SELECT DB.TABLE.ROW ... -->\n        <DetectChar attribute=\"String Char\" context=\"#stay\" char=\".\"/>\n      </context>\n      <!-- 'string' -->\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"String\" context=\"#pop\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"&#38;\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <!-- \"string\", extra context needed to enable \"str'ing\" and 'str\"ing' -->\n      <context name=\"String2\" attribute=\"String\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"String\" context=\"#pop\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"&#38;\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <!-- `names` -->\n      <context name=\"Name\" attribute=\"Name\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Name\" context=\"#pop\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Name\" context=\"#pop\" char=\"`\"/>\n      </context>\n      <!-- comments -->\n      <context name=\"SingleLineComment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <context name=\"MultiLineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Comment\" context=\"#pop\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n      <!-- preprocessor -->\n      <context name=\"Preprocessor\" attribute=\"Preprocessor\" lineEndContext=\"#pop\"/>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"           defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"ControlFlow\"       defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\"          defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Operator Keyword\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Function\"          defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"         defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"           defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"               defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"             defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Name\" color=\"#080\" defStyleNum=\"dsString\" spellChecking=\"false\"/>\n      <itemData name=\"String\"            defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"       defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\"           defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"            defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\"      defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"0\"/>\n    <folding indentationsensitive=\"true\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sql-oracle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Oracle SQL, syntax definition based on sql.xml by Yury Lebedev -->\n<language name=\"SQL (Oracle)\" version=\"5\" kateversion=\"5.0\" section=\"Database\" extensions=\"*.sql;*.SQL;*.ddl;*.DDL;*.trg;*.TRG;*.spc;*.SPC;*.bdy;*.DBY\" mimetype=\"text/x-sql\" casesensitive=\"0\" author=\"Andrey Karepin (egdfree@opensuse.org)\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"controlFlow\">\n      <item>BEGIN</item>\n      <item>CASE</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXCEPTION</item>\n      <item>EXIT</item>\n      <item>LOOP</item>\n      <item>FOR</item>\n      <item>IF</item>\n      <item>RAISE</item>\n      <item>RETURN</item>\n      <item>RETURNING</item>\n      <item>THEN</item>\n      <item>WHEN</item>\n      <item>WHILE</item>\n    </list>\n    <list name=\"operators\">\n      <item>AND</item>\n      <item>BETWEEN</item>\n      <item>IN</item>\n      <item>IS</item>\n      <item>LIKE</item>\n      <item>NOT</item>\n      <item>OR</item>\n    </list>\n    <list name=\"keywords\">\n      <item>ABORT</item>\n      <item>ACCEPT</item>\n      <item>ACCESS</item>\n      <item>ACCESSED</item>\n      <item>ACCOUNT</item>\n      <item>ACTIVATE</item>\n      <item>ADD</item>\n      <item>ADD_COLUMN</item>\n      <item>ADD_GROUP</item>\n      <item>ADJ_DATE</item>\n      <item>ADMIN</item>\n      <item>ADMINISTER</item>\n      <item>ADMINISTRATOR</item>\n      <item>ADVISE</item>\n      <item>ADVISOR</item>\n      <item>AFTER</item>\n      <item>ALIAS</item>\n      <item>ALL</item>\n      <item>ALLOCATE</item>\n      <item>ALLOW</item>\n      <item>ALL_ROWS</item>\n      <item>ALTER</item>\n      <item>ALWAYS</item>\n      <item>ANALYZE</item>\n      <item>ANCILLARY</item>\n      <item>AND_EQUAL</item>\n      <item>ANTIJOIN</item>\n      <item>ANY</item>\n      <item>ANYSCHEMA</item>\n      <item>APPEND</item>\n      <item>APPEND_VALUES</item>\n      <item>APPLY</item>\n      <item>ARCHIVE</item>\n      <item>ARCHIVELOG</item>\n      <item>ARRAY</item>\n      <item>AS</item>\n      <item>ASC</item>\n      <item>ASSEMBLY</item>\n      <item>ASSOCIATE</item>\n      <item>ASYNC</item>\n      <item>ASYNCHRONOUS</item>\n      <item>AT</item>\n      <item>ATTRIBUTE</item>\n      <item>ATTRIBUTES</item>\n      <item>AUDIT</item>\n      <item>AUTHENTICATED</item>\n      <item>AUTHENTICATION</item>\n      <item>AUTHID</item>\n      <item>AUTHORIZATION</item>\n      <item>AUTO</item>\n      <item>AUTOALLOCATE</item>\n      <item>AUTOEXTEND</item>\n      <item>AUTOMATIC</item>\n      <item>AVAILABILITY</item>\n      <item>BACKUP</item>\n      <item>BASIC</item>\n      <item>BASICFILE</item>\n      <item>BATCH</item>\n      <item>BECOME</item>\n      <item>BEFORE</item>\n      <item>BEGIN_OUTLINE_DATA</item>\n      <item>BEHALF</item>\n      <item>BIGFILE</item>\n      <item>BIND_AWARE</item>\n      <item>BINDING</item>\n      <item>BITAND</item>\n      <item>BITMAP</item>\n      <item>BITMAPS</item>\n      <item>BITMAP_TREE</item>\n      <item>BITS</item>\n      <item>BLOCK</item>\n      <item>BLOCK_RANGE</item>\n      <item>BLOCKS</item>\n      <item>BLOCKSIZE</item>\n      <item>BODY</item>\n      <item>BOTH</item>\n      <item>BOUND</item>\n      <item>BRANCH</item>\n      <item>BREADTH</item>\n      <item>BROADCAST</item>\n      <item>BUFFER</item>\n      <item>BUFFER_CACHE</item>\n      <item>BUFFER_POOL</item>\n      <item>BUILD</item>\n      <item>BULK</item>\n      <item>BY</item>\n      <item>BYPASS_RECURSIVE_CHECK</item>\n      <item>BYPASS_UJVC</item>\n      <item>BYTE</item>\n      <item>CACHE</item>\n      <item>CACHE_CB</item>\n      <item>CACHE_INSTANCES</item>\n      <item>CACHE_TEMP_TABLE</item>\n      <item>CALL</item>\n      <item>CANCEL</item>\n      <item>CASCADE</item>\n      <item>CATEGORY</item>\n      <item>CELL_FLASH_CACHE</item>\n      <item>CERTIFICATE</item>\n      <item>CFILE</item>\n      <item>CHAINED</item>\n      <item>CHANGE</item>\n      <item>CHANGE_DUPKEY_ERROR_INDEX</item>\n      <item>CHAR_CS</item>\n      <item>CHECK</item>\n      <item>CHECK_ACL_REWRITE</item>\n      <item>CHECKPOINT</item>\n      <item>CHILD</item>\n      <item>CHOOSE</item>\n      <item>CHUNK</item>\n      <item>CLASS</item>\n      <item>CLEAR</item>\n      <item>CLONE</item>\n      <item>CLOSE</item>\n      <item>CLOSE_CACHED_OPEN_CURSORS</item>\n      <item>CLUSTER</item>\n      <item>CLUSTERING_FACTOR</item>\n      <item>COALESCE_SQ</item>\n      <item>COARSE</item>\n      <item>CO_AUTH_IND</item>\n      <item>COLD</item>\n      <item>COLUMN</item>\n      <item>COLUMNAR</item>\n      <item>COLUMN_AUTH_INDICATOR</item>\n      <item>COLUMNS</item>\n      <item>COLUMN_STATS</item>\n      <item>COLUMN_VALUE</item>\n      <item>COMMENT</item>\n      <item>COMMIT</item>\n      <item>COMMITTED</item>\n      <item>COMPACT</item>\n      <item>COMPATIBILITY</item>\n      <item>COMPILE</item>\n      <item>COMPLETE</item>\n      <item>COMPLIANCE</item>\n      <item>COMPOSITE</item>\n      <item>COMPOSITE_LIMIT</item>\n      <item>COMPOUND</item>\n      <item>COMPRESS</item>\n      <item>COMPUTE</item>\n      <item>CONFIRM</item>\n      <item>CONFORMING</item>\n      <item>CONNECT</item>\n      <item>CONNECT_BY_CB_WHR_ONLY</item>\n      <item>CONNECT_BY_COMBINE_SW</item>\n      <item>CONNECT_BY_COST_BASED</item>\n      <item>CONNECT_BY_ELIM_DUPS</item>\n      <item>CONNECT_BY_FILTERING</item>\n      <item>CONNECT_BY_ISCYCLE</item>\n      <item>CONNECT_BY_ISLEAF</item>\n      <item>CONNECT_BY_ROOT</item>\n      <item>CONNECT_TIME</item>\n      <item>CONSIDER</item>\n      <item>CONSISTENT</item>\n      <item>CONST</item>\n      <item>CONSTANT</item>\n      <item>CONSTRAINT</item>\n      <item>CONSTRAINTS</item>\n      <item>CONTAINS</item>\n      <item>CONTAINER</item>\n      <item>CONTENT</item>\n      <item>CONTENTS</item>\n      <item>CONTEXT</item>\n      <item>CONTINUE</item>\n      <item>CONTROLFILE</item>\n      <item>CORRUPTION</item>\n      <item>CORRUPT_XID</item>\n      <item>CORRUPT_XID_ALL</item>\n      <item>COST</item>\n      <item>COST_XML_QUERY_REWRITE</item>\n      <item>CPU_COSTING</item>\n      <item>CPU_PER_CALL</item>\n      <item>CPU_PER_SESSION</item>\n      <item>CRASH</item>\n      <item>CREATE</item>\n      <item>CREATE_STORED_OUTLINES</item>\n      <item>CREATION</item>\n      <item>CROSS</item>\n      <item>CROSSEDITION</item>\n      <item>CSCONVERT</item>\n      <item>CUBE</item>\n      <item>CUBE_GB</item>\n      <item>CUME_DISTM</item>\n      <item>CURRENT</item>\n      <item>CURRENT_SCHEMA</item>\n      <item>CURRENT_TIME</item>\n      <item>CURRENT_USER</item>\n      <item>CURRENTV</item>\n      <item>CURSOR</item>\n      <item>CURSOR_SHARING_EXACT</item>\n      <item>CURSOR_SPECIFIC_SEGMENT</item>\n      <item>CYCLE</item>\n      <item>DANGLING</item>\n      <item>DATA</item>\n      <item>DATABASE</item>\n      <item>DATABASE_DEFAULT</item>\n      <item>DATAFILE</item>\n      <item>DATAFILES</item>\n      <item>DATAOBJNO</item>\n      <item>DATE</item>\n      <item>DATE_MODE</item>\n      <item>DAY</item>\n      <item>DBA</item>\n      <item>DBA_RECYCLEBIN</item>\n      <item>DBMS_STATS</item>\n      <item>DB_ROLE_CHANGE</item>\n      <item>DB_VERSION</item>\n      <item>DDL</item>\n      <item>DEALLOCATE</item>\n      <item>DEBUG</item>\n      <item>DEBUGGER</item>\n      <item>DEC</item>\n      <item>DECLARE</item>\n      <item>DECOMPOSE</item>\n      <item>DECR</item>\n      <item>DECREMENT</item>\n      <item>DECRYPT</item>\n      <item>DEDUPLICATE</item>\n      <item>DEFAULT</item>\n      <item>DEFAULTS</item>\n      <item>DEFERRABLE</item>\n      <item>DEFERRED</item>\n      <item>DEFINE</item>\n      <item>DEFINED</item>\n      <item>DEFINER</item>\n      <item>DEGREE</item>\n      <item>DELAY</item>\n      <item>DELETE</item>\n      <item>DEMAND</item>\n      <item>DENSE_RANK</item>\n      <item>DENSE_RANKM</item>\n      <item>DEPENDENT</item>\n      <item>DEQUEUE</item>\n      <item>DEREF_NO_REWRITE</item>\n      <item>DESC</item>\n      <item>DETACHED</item>\n      <item>DETERMINES</item>\n      <item>DICTIONARY</item>\n      <item>DIMENSION</item>\n      <item>DIRECT_LOAD</item>\n      <item>DIRECTORY</item>\n      <item>DISABLE</item>\n      <item>DISABLE_PRESET</item>\n      <item>DISABLE_RPKE</item>\n      <item>DISALLOW</item>\n      <item>DISASSOCIATE</item>\n      <item>DISCONNECT</item>\n      <item>DISK</item>\n      <item>DISKGROUP</item>\n      <item>DISKS</item>\n      <item>DISMOUNT</item>\n      <item>DISTINCT</item>\n      <item>DISTINGUISHED</item>\n      <item>DISTRIBUTED</item>\n      <item>DML</item>\n      <item>DML_UPDATE</item>\n      <item>DOCFIDELITY</item>\n      <item>DOCUMENT</item>\n      <item>DOMAIN_INDEX_FILTER</item>\n      <item>DOMAIN_INDEX_NO_SORT</item>\n      <item>DOMAIN_INDEX_SORT</item>\n      <item>DOUBLE</item>\n      <item>DOWNGRADE</item>\n      <item>DRIVING_SITE</item>\n      <item>DROP</item>\n      <item>DROP_COLUMN</item>\n      <item>DROP_GROUP</item>\n      <item>DST_UPGRADE_INSERT_CONV</item>\n      <item>DYNAMIC</item>\n      <item>DYNAMIC_SAMPLING</item>\n      <item>DYNAMIC_SAMPLING_EST_CDN</item>\n      <item>EACH</item>\n      <item>EDITION</item>\n      <item>EDITIONING</item>\n      <item>EDITIONS</item>\n      <item>ELEMENT</item>\n      <item>ELIMINATE_JOIN</item>\n      <item>ELIMINATE_OBY</item>\n      <item>ELIMINATE_OUTER_JOIN</item>\n      <item>EMPTY</item>\n      <item>ENABLE</item>\n      <item>ENABLE_PRESET</item>\n      <item>ENCODING</item>\n      <item>ENCRYPT</item>\n      <item>ENCRYPTION</item>\n      <item>END_OUTLINE_DATA</item>\n      <item>ENFORCE</item>\n      <item>ENFORCED</item>\n      <item>ENQUEUE</item>\n      <item>ENTERPRISE</item>\n      <item>ENTITYESCAPING</item>\n      <item>ENTRY</item>\n      <item>ERROR</item>\n      <item>ERROR_ARGUMENT</item>\n      <item>ERROR_ON_OVERLAP_TIME</item>\n      <item>ERRORS</item>\n      <item>ESCAPE</item>\n      <item>ESTIMATE</item>\n      <item>EVALNAME</item>\n      <item>EVALUATION</item>\n      <item>EVENTS</item>\n      <item>EVERY</item>\n      <item>EXCEPT</item>\n      <item>EXCEPTIONS</item>\n      <item>EXCHANGE</item>\n      <item>EXCLUDE</item>\n      <item>EXCLUDING</item>\n      <item>EXCLUSIVE</item>\n      <item>EXECUTE</item>\n      <item>EXEMPT</item>\n      <item>EXISTS</item>\n      <item>EXPAND_GSET_TO_UNION</item>\n      <item>EXPAND_TABLE</item>\n      <item>EXPIRE</item>\n      <item>EXPLAIN</item>\n      <item>EXPLOSION</item>\n      <item>EXPORT</item>\n      <item>EXPR_CORR_CHECK</item>\n      <item>EXTENDS</item>\n      <item>EXTENT</item>\n      <item>EXTENTS</item>\n      <item>EXTERNAL</item>\n      <item>EXTERNALLY</item>\n      <item>EXTRA</item>\n      <item>FACILITY</item>\n      <item>FACT</item>\n      <item>FACTORIZE_JOIN</item>\n      <item>FAILED</item>\n      <item>FAILED_LOGIN_ATTEMPTS</item>\n      <item>FAILGROUP</item>\n      <item>FALSE</item>\n      <item>FAST</item>\n      <item>FBTSCAN</item>\n      <item>FILE</item>\n      <item>FILESYSTEM_LIKE_LOGGING</item>\n      <item>FILTER</item>\n      <item>FINAL</item>\n      <item>FINE</item>\n      <item>FINISH</item>\n      <item>FIRST</item>\n      <item>FIRSTM</item>\n      <item>FIRST_ROWS</item>\n      <item>FLAGGER</item>\n      <item>FLASHBACK</item>\n      <item>FLASH_CACHE</item>\n      <item>FLOAT</item>\n      <item>FLOB</item>\n      <item>FLUSH</item>\n      <item>FOLDER</item>\n      <item>FOLLOWING</item>\n      <item>FOLLOWS</item>\n      <item>FORCE</item>\n      <item>FORCE_XML_QUERY_REWRITE</item>\n      <item>FOREIGN</item>\n      <item>FOREVER</item>\n      <item>FORWARD</item>\n      <item>FREELIST</item>\n      <item>FREELISTS</item>\n      <item>FREEPOOLS</item>\n      <item>FRESH</item>\n      <item>FROM</item>\n      <item>FULL</item>\n      <item>FUNCTION</item>\n      <item>FUNCTIONS</item>\n      <item>GATHER_PLAN_STATISTICS</item>\n      <item>GBY_CONC_ROLLUP</item>\n      <item>GBY_PUSHDOWN</item>\n      <item>GENERATED</item>\n      <item>GLOBAL</item>\n      <item>GLOBALLY</item>\n      <item>GLOBAL_NAME</item>\n      <item>GLOBAL_TOPIC_ENABLED</item>\n      <item>GRANT</item>\n      <item>GROUP</item>\n      <item>GROUP_BY</item>\n      <item>GROUPS</item>\n      <item>GUARANTEE</item>\n      <item>GUARANTEED</item>\n      <item>GUARD</item>\n      <item>HASH</item>\n      <item>HASH_AJ</item>\n      <item>HASHKEYS</item>\n      <item>HASH_SJ</item>\n      <item>HAVING</item>\n      <item>HEADER</item>\n      <item>HEAP</item>\n      <item>HELP</item>\n      <item>HEXTOREF</item>\n      <item>HIDDEN</item>\n      <item>HIDE</item>\n      <item>HIERARCHY</item>\n      <item>HIGH</item>\n      <item>HINTSET_BEGIN</item>\n      <item>HINTSET_END</item>\n      <item>HOT</item>\n      <item>HOUR</item>\n      <item>HWM_BROKERED</item>\n      <item>HYBRID</item>\n      <item>ID</item>\n      <item>IDENTIFIED</item>\n      <item>IDENTIFIER</item>\n      <item>IDENTITY</item>\n      <item>IDGENERATORS</item>\n      <item>IDLE_TIME</item>\n      <item>IGNORE</item>\n      <item>IGNORE_OPTIM_EMBEDDED_HINTS</item>\n      <item>IGNORE_ROW_ON_DUPKEY_INDEX</item>\n      <item>IGNORE_WHERE_CLAUSE</item>\n      <item>IMMEDIATE</item>\n      <item>IMPACT</item>\n      <item>IMPORT</item>\n      <item>INCLUDE</item>\n      <item>INCLUDE_VERSION</item>\n      <item>INCLUDING</item>\n      <item>INCR</item>\n      <item>INCREMENT</item>\n      <item>INCREMENTAL</item>\n      <item>INDENT</item>\n      <item>INDEX</item>\n      <item>INDEX_ASC</item>\n      <item>INDEX_COMBINE</item>\n      <item>INDEX_DESC</item>\n      <item>INDEXED</item>\n      <item>INDEXES</item>\n      <item>INDEX_FFS</item>\n      <item>INDEX_FILTER</item>\n      <item>INDEX_JOIN</item>\n      <item>INDEX_ROWS</item>\n      <item>INDEX_RRS</item>\n      <item>INDEX_RS</item>\n      <item>INDEX_RS_ASC</item>\n      <item>INDEX_RS_DESC</item>\n      <item>INDEX_SCAN</item>\n      <item>INDEX_SKIP_SCAN</item>\n      <item>INDEX_SS</item>\n      <item>INDEX_SS_ASC</item>\n      <item>INDEX_SS_DESC</item>\n      <item>INDEX_STATS</item>\n      <item>INDEXTYPE</item>\n      <item>INDEXTYPES</item>\n      <item>INDICATOR</item>\n      <item>INFINITE</item>\n      <item>INFORMATIONAL</item>\n      <item>INITIAL</item>\n      <item>INITIALIZED</item>\n      <item>INITIALLY</item>\n      <item>INITRANS</item>\n      <item>INLINE</item>\n      <item>INLINE_XMLTYPE_NT</item>\n      <item>IN_MEMORY_METADATA</item>\n      <item>INNER</item>\n      <item>INSERT</item>\n      <item>INSTANCE</item>\n      <item>INSTANCES</item>\n      <item>INSTANTIABLE</item>\n      <item>INSTANTLY</item>\n      <item>INSTEAD</item>\n      <item>INTERMEDIATE</item>\n      <item>INTERNAL_CONVERT</item>\n      <item>INTERNAL_USE</item>\n      <item>INTERPRETED</item>\n      <item>INTERSECT</item>\n      <item>INTO</item>\n      <item>INVALIDATE</item>\n      <item>INVISIBLE</item>\n      <item>IN_XQUERY</item>\n      <item>ISOLATION</item>\n      <item>ISOLATION_LEVEL</item>\n      <item>ITERATE</item>\n      <item>JAVA</item>\n      <item>JOB</item>\n      <item>JOIN</item>\n      <item>KEEP</item>\n      <item>KEEP_DUPLICATES</item>\n      <item>KERBEROS</item>\n      <item>KEY</item>\n      <item>KEY_LENGTH</item>\n      <item>KEYS</item>\n      <item>KEYSIZE</item>\n      <item>KILL</item>\n      <item>LATERAL</item>\n      <item>LAYER</item>\n      <item>LDAP_REGISTRATION</item>\n      <item>LDAP_REGISTRATION_ENABLED</item>\n      <item>LDAP_REG_SYNC_INTERVAL</item>\n      <item>LEADING</item>\n      <item>LEFT</item>\n      <item>LESS</item>\n      <item>LEVEL</item>\n      <item>LEVELS</item>\n      <item>LIBRARY</item>\n      <item>LIFE</item>\n      <item>LIFETIME</item>\n      <item>LIKEC</item>\n      <item>LIKE_EXPAND</item>\n      <item>LIKE2</item>\n      <item>LIKE4</item>\n      <item>LIMIT</item>\n      <item>LINK</item>\n      <item>LIST</item>\n      <item>LOB</item>\n      <item>LOBNVL</item>\n      <item>LOBS</item>\n      <item>LOCAL</item>\n      <item>LOCAL_INDEXES</item>\n      <item>LOCALTIME</item>\n      <item>LOCATION</item>\n      <item>LOCATOR</item>\n      <item>LOCK</item>\n      <item>LOCKED</item>\n      <item>LOGFILE</item>\n      <item>LOGFILES</item>\n      <item>LOGGING</item>\n      <item>LOGICAL</item>\n      <item>LOGICAL_READS_PER_CALL</item>\n      <item>LOGICAL_READS_PER_SESSION</item>\n      <item>LOGOFF</item>\n      <item>LOGON</item>\n      <item>LONG</item>\n      <item>LOW</item>\n      <item>MAIN</item>\n      <item>MANAGE</item>\n      <item>MANAGED</item>\n      <item>MANAGEMENT</item>\n      <item>MANUAL</item>\n      <item>MAPPING</item>\n      <item>MASTER</item>\n      <item>MATCHED</item>\n      <item>MATERIALIZE</item>\n      <item>MATERIALIZED</item>\n      <item>MAXARCHLOGS</item>\n      <item>MAXDATAFILES</item>\n      <item>MAXEXTENTS</item>\n      <item>MAXIMIZE</item>\n      <item>MAXINSTANCES</item>\n      <item>MAXLOGFILES</item>\n      <item>MAXLOGHISTORY</item>\n      <item>MAXLOGMEMBERS</item>\n      <item>MAXSIZE</item>\n      <item>MAXTRANS</item>\n      <item>MAXVALUE</item>\n      <item>MEASURE</item>\n      <item>MEASURES</item>\n      <item>MEDIUM</item>\n      <item>MEMBER</item>\n      <item>MEMORY</item>\n      <item>MERGE</item>\n      <item>MERGE$ACTIONS</item>\n      <item>MERGE_AJ</item>\n      <item>MERGE_CONST_ON</item>\n      <item>MERGE_SJ</item>\n      <item>METHOD</item>\n      <item>MIGRATE</item>\n      <item>MIGRATION</item>\n      <item>MINEXTENTS</item>\n      <item>MINIMIZE</item>\n      <item>MINIMUM</item>\n      <item>MINING</item>\n      <item>MINUS</item>\n      <item>MINUS_NULL</item>\n      <item>MINUTE</item>\n      <item>MINVALUE</item>\n      <item>MIRROR</item>\n      <item>MIRRORCOLD</item>\n      <item>MIRRORHOT</item>\n      <item>MLSLABEL</item>\n      <item>MODE</item>\n      <item>MODEL</item>\n      <item>MODEL_COMPILE_SUBQUERY</item>\n      <item>MODEL_DONTVERIFY_UNIQUENESS</item>\n      <item>MODEL_DYNAMIC_SUBQUERY</item>\n      <item>MODEL_MIN_ANALYSIS</item>\n      <item>MODEL_NO_ANALYSIS</item>\n      <item>MODEL_PBY</item>\n      <item>MODEL_PUSH_REF</item>\n      <item>MODIFY</item>\n      <item>MONITOR</item>\n      <item>MONITORING</item>\n      <item>MONTH</item>\n      <item>MOUNT</item>\n      <item>MOUNTPATH</item>\n      <item>MOVE</item>\n      <item>MOVEMENT</item>\n      <item>MULTISET</item>\n      <item>MV_MERGE</item>\n      <item>NAME</item>\n      <item>NAMED</item>\n      <item>NAMESPACE</item>\n      <item>NAN</item>\n      <item>NATIONAL</item>\n      <item>NATIVE</item>\n      <item>NATIVE_FULL_OUTER_JOIN</item>\n      <item>NATURAL</item>\n      <item>NAV</item>\n      <item>NEEDED</item>\n      <item>NESTED</item>\n      <item>NESTED_TABLE_FAST_INSERT</item>\n      <item>NESTED_TABLE_GET_REFS</item>\n      <item>NESTED_TABLE_ID</item>\n      <item>NESTED_TABLE_SET_REFS</item>\n      <item>NESTED_TABLE_SET_SETID</item>\n      <item>NETWORK</item>\n      <item>NEVER</item>\n      <item>NEW</item>\n      <item>NEW_TIME</item>\n      <item>NEXT</item>\n      <item>NEXT_DAY</item>\n      <item>NL_AJ</item>\n      <item>NLJ_BATCHING</item>\n      <item>NLJ_INDEX_FILTER</item>\n      <item>NLJ_INDEX_SCAN</item>\n      <item>NLJ_PREFETCH</item>\n      <item>NLS_CALENDAR</item>\n      <item>NLS_CHARACTERSET</item>\n      <item>NLS_COMP</item>\n      <item>NLS_CURRENCY</item>\n      <item>NLS_DATE_FORMAT</item>\n      <item>NLS_DATE_LANGUAGE</item>\n      <item>NLS_ISO_CURRENCY</item>\n      <item>NL_SJ</item>\n      <item>NLS_LANG</item>\n      <item>NLS_LANGUAGE</item>\n      <item>NLS_LENGTH_SEMANTICS</item>\n      <item>NLS_LOWER</item>\n      <item>NLS_NCHAR_CONV_EXCP</item>\n      <item>NLS_NUMERIC_CHARACTERS</item>\n      <item>NLS_SORT</item>\n      <item>NLS_SPECIAL_CHARS</item>\n      <item>NLS_TERRITORY</item>\n      <item>NLS_UPPER</item>\n      <item>NO</item>\n      <item>NO_ACCESS</item>\n      <item>NOAPPEND</item>\n      <item>NOARCHIVELOG</item>\n      <item>NOAUDIT</item>\n      <item>NO_BASETABLE_MULTIMV_REWRITE</item>\n      <item>NO_BIND_AWARE</item>\n      <item>NO_BUFFER</item>\n      <item>NOCACHE</item>\n      <item>NO_CARTESIAN</item>\n      <item>NO_CHECK_ACL_REWRITE</item>\n      <item>NO_COALESCE_SQ</item>\n      <item>NOCOMPRESS</item>\n      <item>NO_CONNECT_BY_CB_WHR_ONLY</item>\n      <item>NO_CONNECT_BY_COMBINE_SW</item>\n      <item>NO_CONNECT_BY_COST_BASED</item>\n      <item>NO_CONNECT_BY_ELIM_DUPS</item>\n      <item>NO_CONNECT_BY_FILTERING</item>\n      <item>NO_COST_XML_QUERY_REWRITE</item>\n      <item>NO_CPU_COSTING</item>\n      <item>NOCPU_COSTING</item>\n      <item>NOCYCLE</item>\n      <item>NODELAY</item>\n      <item>NO_DOMAIN_INDEX_FILTER</item>\n      <item>NO_DST_UPGRADE_INSERT_CONV</item>\n      <item>NO_ELIMINATE_JOIN</item>\n      <item>NO_ELIMINATE_OBY</item>\n      <item>NO_ELIMINATE_OUTER_JOIN</item>\n      <item>NOENTITYESCAPING</item>\n      <item>NO_EXPAND</item>\n      <item>NO_EXPAND_GSET_TO_UNION</item>\n      <item>NO_EXPAND_TABLE</item>\n      <item>NO_FACT</item>\n      <item>NO_FACTORIZE_JOIN</item>\n      <item>NO_FILTERING</item>\n      <item>NOFORCE</item>\n      <item>NO_GBY_PUSHDOWN</item>\n      <item>NOGUARANTEE</item>\n      <item>NO_INDEX</item>\n      <item>NO_INDEX_FFS</item>\n      <item>NO_INDEX_SS</item>\n      <item>NO_LOAD</item>\n      <item>NOLOCAL</item>\n      <item>NOLOGGING</item>\n      <item>NOMAPPING</item>\n      <item>NOMAXVALUE</item>\n      <item>NO_MERGE</item>\n      <item>NOMINIMIZE</item>\n      <item>NOMINVALUE</item>\n      <item>NO_MODEL_PUSH_REF</item>\n      <item>NO_MONITOR</item>\n      <item>NO_MONITORING</item>\n      <item>NOMONITORING</item>\n      <item>NO_MULTIMV_REWRITE</item>\n      <item>NO_NATIVE_FULL_OUTER_JOIN</item>\n      <item>NONE</item>\n      <item>NO_NLJ_BATCHING</item>\n      <item>NO_NLJ_PREFETCH</item>\n      <item>NONSCHEMA</item>\n      <item>NOORDER</item>\n      <item>NO_ORDER_ROLLUPS</item>\n      <item>NO_OUTER_JOIN_TO_INNER</item>\n      <item>NOOVERRIDE</item>\n      <item>NO_PARALLEL</item>\n      <item>NOPARALLEL</item>\n      <item>NO_PARALLEL_INDEX</item>\n      <item>NOPARALLEL_INDEX</item>\n      <item>NO_PARTIAL_COMMIT</item>\n      <item>NO_PLACE_DISTINCT</item>\n      <item>NO_PLACE_GROUP_BY</item>\n      <item>NO_PQ_MAP</item>\n      <item>NO_PRUNE_GSETS</item>\n      <item>NO_PULL_PRED</item>\n      <item>NO_PUSH_PRED</item>\n      <item>NO_PUSH_SUBQ</item>\n      <item>NO_PX_JOIN_FILTER</item>\n      <item>NO_QKN_BUFF</item>\n      <item>NO_QUERY_TRANSFORMATION</item>\n      <item>NO_REF_CASCADE</item>\n      <item>NORELY</item>\n      <item>NOREPAIR</item>\n      <item>NORESETLOGS</item>\n      <item>NO_RESULT_CACHE</item>\n      <item>NOREVERSE</item>\n      <item>NO_REWRITE</item>\n      <item>NOREWRITE</item>\n      <item>NORMAL</item>\n      <item>NOROWDEPENDENCIES</item>\n      <item>NOSCHEMACHECK</item>\n      <item>NOSEGMENT</item>\n      <item>NO_SEMIJOIN</item>\n      <item>NO_SET_TO_JOIN</item>\n      <item>NOSORT</item>\n      <item>NO_SQL_TUNE</item>\n      <item>NO_STAR_TRANSFORMATION</item>\n      <item>NO_STATEMENT_QUEUING</item>\n      <item>NO_STATS_GSETS</item>\n      <item>NOSTRICT</item>\n      <item>NO_SUBQUERY_PRUNING</item>\n      <item>NO_SUBSTRB_PAD</item>\n      <item>NO_SWAP_JOIN_INPUTS</item>\n      <item>NOSWITCH</item>\n      <item>NO_TEMP_TABLE</item>\n      <item>NOTHING</item>\n      <item>NOTIFICATION</item>\n      <item>NO_TRANSFORM_DISTINCT_AGG</item>\n      <item>NO_UNNEST</item>\n      <item>NO_USE_HASH</item>\n      <item>NO_USE_HASH_AGGREGATION</item>\n      <item>NO_USE_INVISIBLE_INDEXES</item>\n      <item>NO_USE_MERGE</item>\n      <item>NO_USE_NL</item>\n      <item>NOVALIDATE</item>\n      <item>NOWAIT</item>\n      <item>NO_XML_DML_REWRITE</item>\n      <item>NO_XMLINDEX_REWRITE</item>\n      <item>NO_XMLINDEX_REWRITE_IN_SELECT</item>\n      <item>NO_XML_QUERY_REWRITE</item>\n      <item>NULL</item>\n      <item>NULLS</item>\n      <item>NUMBER</item>\n      <item>NUMERIC</item>\n      <item>NUM_INDEX_KEYS</item>\n      <item>OBJECT</item>\n      <item>OBJECTTOXML</item>\n      <item>OBJNO</item>\n      <item>OBJNO_REUSE</item>\n      <item>OCCURENCES</item>\n      <item>OF</item>\n      <item>OFF</item>\n      <item>OFFLINE</item>\n      <item>OID</item>\n      <item>OIDINDEX</item>\n      <item>OLAP</item>\n      <item>OLD</item>\n      <item>OLD_PUSH_PRED</item>\n      <item>OLTP</item>\n      <item>ON</item>\n      <item>ONLINE</item>\n      <item>ONLY</item>\n      <item>OPAQUE</item>\n      <item>OPAQUE_TRANSFORM</item>\n      <item>OPAQUE_XCANONICAL</item>\n      <item>OPCODE</item>\n      <item>OPEN</item>\n      <item>OPERATIONS</item>\n      <item>OPERATOR</item>\n      <item>OPT_ESTIMATE</item>\n      <item>OPTIMAL</item>\n      <item>OPTIMIZER_FEATURES_ENABLE</item>\n      <item>OPTIMIZER_GOAL</item>\n      <item>OPTION</item>\n      <item>OPT_PARAM</item>\n      <item>ORA_BRANCH</item>\n      <item>ORA_CHECKACL</item>\n      <item>ORADEBUG</item>\n      <item>ORA_GET_ACLIDS</item>\n      <item>ORA_GET_PRIVILEGES</item>\n      <item>ORA_ROWSCN</item>\n      <item>ORA_ROWSCN_RAW</item>\n      <item>ORA_ROWVERSION</item>\n      <item>ORA_TABVERSION</item>\n      <item>ORDER</item>\n      <item>ORDERED</item>\n      <item>ORDERED_PREDICATES</item>\n      <item>ORDINALITY</item>\n      <item>OR_EXPAND</item>\n      <item>ORGANIZATION</item>\n      <item>OR_PREDICATES</item>\n      <item>OTHER</item>\n      <item>OUTER</item>\n      <item>OUTER_JOIN_TO_INNER</item>\n      <item>OUTLINE</item>\n      <item>OUTLINE_LEAF</item>\n      <item>OUT_OF_LINE</item>\n      <item>OVER</item>\n      <item>OVERFLOW</item>\n      <item>OVERFLOW_NOMOVE</item>\n      <item>OVERLAPS</item>\n      <item>OWN</item>\n      <item>OWNER</item>\n      <item>OWNERSHIP</item>\n      <item>PACKAGE</item>\n      <item>PACKAGES</item>\n      <item>PARALLEL</item>\n      <item>PARALLEL_INDEX</item>\n      <item>PARAM</item>\n      <item>PARAMETERS</item>\n      <item>PARENT</item>\n      <item>PARITY</item>\n      <item>PARTIALLY</item>\n      <item>PARTITION</item>\n      <item>PARTITION_HASH</item>\n      <item>PARTITION_LIST</item>\n      <item>PARTITION_RANGE</item>\n      <item>PARTITIONS</item>\n      <item>PART$NUM$INST</item>\n      <item>PASSING</item>\n      <item>PASSWORD</item>\n      <item>PASSWORD_GRACE_TIME</item>\n      <item>PASSWORD_LIFE_TIME</item>\n      <item>PASSWORD_LOCK_TIME</item>\n      <item>PASSWORD_REUSE_MAX</item>\n      <item>PASSWORD_REUSE_TIME</item>\n      <item>PASSWORD_VERIFY_FUNCTION</item>\n      <item>PATHS</item>\n      <item>PBL_HS_BEGIN</item>\n      <item>PBL_HS_END</item>\n      <item>PCTFREE</item>\n      <item>PCTINCREASE</item>\n      <item>PCTTHRESHOLD</item>\n      <item>PCTUSED</item>\n      <item>PCTVERSION</item>\n      <item>PENDING</item>\n      <item>PERCENT</item>\n      <item>PERCENTILE_CONT</item>\n      <item>PERCENTILE_DISC</item>\n      <item>PERCENT_RANKM</item>\n      <item>PERFORMANCE</item>\n      <item>PERMANENT</item>\n      <item>PERMISSION</item>\n      <item>PFILE</item>\n      <item>PHYSICAL</item>\n      <item>PIKEY</item>\n      <item>PIV_GB</item>\n      <item>PIVOT</item>\n      <item>PIV_SSF</item>\n      <item>PLACE_DISTINCT</item>\n      <item>PLACE_GROUP_BY</item>\n      <item>PLAN</item>\n      <item>PLSCOPE_SETTINGS</item>\n      <item>PLSQL_CCFLAGS</item>\n      <item>PLSQL_CODE_TYPE</item>\n      <item>PLSQL_DEBUG</item>\n      <item>PLSQL_OPTIMIZE_LEVEL</item>\n      <item>PLSQL_WARNINGS</item>\n      <item>POINT</item>\n      <item>POLICY</item>\n      <item>POST_TRANSACTION</item>\n      <item>PQ_DISTRIBUTE</item>\n      <item>PQ_MAP</item>\n      <item>PQ_NOMAP</item>\n      <item>PREBUILT</item>\n      <item>PRECEDES</item>\n      <item>PRECEDING</item>\n      <item>PRECISION</item>\n      <item>PRECOMPUTE_SUBQUERY</item>\n      <item>PREDICATE_REORDERS</item>\n      <item>PREPARE</item>\n      <item>PRESENT</item>\n      <item>PRESERVE</item>\n      <item>PRESERVE_OID</item>\n      <item>PRIMARY</item>\n      <item>PRIOR</item>\n      <item>PRIVATE</item>\n      <item>PRIVATE_SGA</item>\n      <item>PRIVILEGE</item>\n      <item>PRIVILEGES</item>\n      <item>PROCEDURAL</item>\n      <item>PROCEDURE</item>\n      <item>PROCESS</item>\n      <item>PROFILE</item>\n      <item>PROGRAM</item>\n      <item>PROJECT</item>\n      <item>PROMPT</item>\n      <item>PROPAGATE</item>\n      <item>PROTECTED</item>\n      <item>PROTECTION</item>\n      <item>PUBLIC</item>\n      <item>PULL_PRED</item>\n      <item>PURGE</item>\n      <item>PUSH_PRED</item>\n      <item>PUSH_SUBQ</item>\n      <item>PX_GRANULE</item>\n      <item>PX_JOIN_FILTER</item>\n      <item>QB_NAME</item>\n      <item>QUERY</item>\n      <item>QUERY_BLOCK</item>\n      <item>QUEUE</item>\n      <item>QUEUE_CURR</item>\n      <item>QUEUE_ROWP</item>\n      <item>QUIESCE</item>\n      <item>QUORUM</item>\n      <item>QUOTA</item>\n      <item>RANDOM</item>\n      <item>RANDOM_LOCAL</item>\n      <item>RANGE</item>\n      <item>RANKM</item>\n      <item>RAPIDLY</item>\n      <item>RAW</item>\n      <item>RBA</item>\n      <item>RBO_OUTLINE</item>\n      <item>RDBA</item>\n      <item>READ</item>\n      <item>READS</item>\n      <item>REAL</item>\n      <item>REBALANCE</item>\n      <item>REBUILD</item>\n      <item>RECORDS_PER_BLOCK</item>\n      <item>RECOVER</item>\n      <item>RECOVERABLE</item>\n      <item>RECOVERY</item>\n      <item>RECYCLE</item>\n      <item>RECYCLEBIN</item>\n      <item>REDO</item>\n      <item>REDUCED</item>\n      <item>REDUNDANCY</item>\n      <item>REF_CASCADE_CURSOR</item>\n      <item>REFERENCE</item>\n      <item>REFERENCED</item>\n      <item>REFERENCES</item>\n      <item>REFERENCING</item>\n      <item>REFRESH</item>\n      <item>REFTOHEX</item>\n      <item>REGEXP_LIKE</item>\n      <item>REGISTER</item>\n      <item>REGULAR</item>\n      <item>REJECT</item>\n      <item>REKEY</item>\n      <item>RELATIONAL</item>\n      <item>RELY</item>\n      <item>REMOTE_MAPPED</item>\n      <item>REMOVE</item>\n      <item>RENAME</item>\n      <item>REPAIR</item>\n      <item>REPEAT</item>\n      <item>REPLICATION</item>\n      <item>REQUIRED</item>\n      <item>RESET</item>\n      <item>RESETLOGS</item>\n      <item>RESIZE</item>\n      <item>RESOLVE</item>\n      <item>RESOLVER</item>\n      <item>RESOURCE</item>\n      <item>RESPECT</item>\n      <item>RESTORE</item>\n      <item>RESTORE_AS_INTERVALS</item>\n      <item>RESTRICT</item>\n      <item>RESTRICT_ALL_REF_CONS</item>\n      <item>RESTRICTED</item>\n      <item>RESULT_CACHE</item>\n      <item>RESUMABLE</item>\n      <item>RESUME</item>\n      <item>RETENTION</item>\n      <item>RETRY_ON_ROW_CHANGE</item>\n      <item>REUSE</item>\n      <item>REVERSE</item>\n      <item>REVOKE</item>\n      <item>REWRITE</item>\n      <item>REWRITE_OR_ERROR</item>\n      <item>RIGHT</item>\n      <item>ROLE</item>\n      <item>ROLES</item>\n      <item>ROLLBACK</item>\n      <item>ROLLING</item>\n      <item>ROLLUP</item>\n      <item>ROW</item>\n      <item>ROWDEPENDENCIES</item>\n      <item>ROWID</item>\n      <item>ROW_LENGTH</item>\n      <item>ROWNUM</item>\n      <item>ROWS</item>\n      <item>RULE</item>\n      <item>RULES</item>\n      <item>SALT</item>\n      <item>SAMPLE</item>\n      <item>SAVE_AS_INTERVALS</item>\n      <item>SAVEPOINT</item>\n      <item>SB4</item>\n      <item>SCALE</item>\n      <item>SCALE_ROWS</item>\n      <item>SCAN</item>\n      <item>SCAN_INSTANCES</item>\n      <item>SCHEDULER</item>\n      <item>SCHEMA</item>\n      <item>SCHEMACHECK</item>\n      <item>SCN</item>\n      <item>SCN_ASCENDING</item>\n      <item>SCOPE</item>\n      <item>SD_ALL</item>\n      <item>SD_INHIBIT</item>\n      <item>SD_SHOW</item>\n      <item>SEARCH</item>\n      <item>SECOND</item>\n      <item>SECUREFILE</item>\n      <item>SECUREFILE_DBA</item>\n      <item>SECURITY</item>\n      <item>SEED</item>\n      <item>SEG_BLOCK</item>\n      <item>SEG_FILE</item>\n      <item>SEGMENT</item>\n      <item>SELECT</item>\n      <item>SELECTIVITY</item>\n      <item>SEMIJOIN</item>\n      <item>SEMIJOIN_DRIVER</item>\n      <item>SEQUENCE</item>\n      <item>SEQUENCED</item>\n      <item>SEQUENTIAL</item>\n      <item>SERIALIZABLE</item>\n      <item>SERVERERROR</item>\n      <item>SESSION</item>\n      <item>SESSION_CACHED_CURSORS</item>\n      <item>SESSIONS_PER_USER</item>\n      <item>SESSIONTIMEZONE</item>\n      <item>SESSIONTZNAME</item>\n      <item>SETS</item>\n      <item>SETTINGS</item>\n      <item>SET_TO_JOIN</item>\n      <item>SEVERE</item>\n      <item>SHARE</item>\n      <item>SHARED</item>\n      <item>SHARED_POOL</item>\n      <item>SHOW</item>\n      <item>SHRINK</item>\n      <item>SHUTDOWN</item>\n      <item>SIBLINGS</item>\n      <item>SID</item>\n      <item>SIGNAL_COMPONENT</item>\n      <item>SIGNAL_FUNCTION</item>\n      <item>SIMPLE</item>\n      <item>SINGLE</item>\n      <item>SINGLETASK</item>\n      <item>SIZE</item>\n      <item>SKIP</item>\n      <item>SKIP_EXT_OPTIMIZER</item>\n      <item>SKIP_UNQ_UNUSABLE_IDX</item>\n      <item>SKIP_UNUSABLE_INDEXES</item>\n      <item>SMALLFILE</item>\n      <item>SMALLINT</item>\n      <item>SNAPSHOT</item>\n      <item>SOME</item>\n      <item>SORT</item>\n      <item>SOURCE</item>\n      <item>SPACE</item>\n      <item>SPECIFICATION</item>\n      <item>SPFILE</item>\n      <item>SPLIT</item>\n      <item>SPREADSHEET</item>\n      <item>SQL</item>\n      <item>SQLLDR</item>\n      <item>SQL_TRACE</item>\n      <item>STALE</item>\n      <item>STANDALONE</item>\n      <item>STANDBY</item>\n      <item>STANDBY_MAX_DATA_DELAY</item>\n      <item>STAR</item>\n      <item>START</item>\n      <item>STAR_TRANSFORMATION</item>\n      <item>STARTUP</item>\n      <item>STATEMENT_ID</item>\n      <item>STATEMENT_QUEUING</item>\n      <item>STATEMENTS</item>\n      <item>STATIC</item>\n      <item>STATISTICS</item>\n      <item>STOP</item>\n      <item>STORAGE</item>\n      <item>STORE</item>\n      <item>STREAMS</item>\n      <item>STRICT</item>\n      <item>STRING</item>\n      <item>STRIP</item>\n      <item>STRIPE_COLUMNS</item>\n      <item>STRIPE_WIDTH</item>\n      <item>STRUCTURE</item>\n      <item>SUBMULTISET</item>\n      <item>SUBPARTITION</item>\n      <item>SUBPARTITION_REL</item>\n      <item>SUBPARTITIONS</item>\n      <item>SUBQUERIES</item>\n      <item>SUBQUERY_PRUNING</item>\n      <item>SUBSTITUTABLE</item>\n      <item>SUCCESSFUL</item>\n      <item>SUMMARY</item>\n      <item>SUPPLEMENTAL</item>\n      <item>SUSPEND</item>\n      <item>SWAP_JOIN_INPUTS</item>\n      <item>SWITCH</item>\n      <item>SWITCHOVER</item>\n      <item>SYNC</item>\n      <item>SYNCHRONOUS</item>\n      <item>SYNONYM</item>\n      <item>SYSASM</item>\n      <item>SYS_AUDIT</item>\n      <item>SYSAUX</item>\n      <item>SYS_CHECKACL</item>\n      <item>SYSDBA</item>\n      <item>SYS_DL_CURSOR</item>\n      <item>SYS_DM_RXFORM_CHR</item>\n      <item>SYS_DM_RXFORM_NUM</item>\n      <item>SYS_DOM_COMPARE</item>\n      <item>SYS_DST_PRIM2SEC</item>\n      <item>SYS_DST_SEC2PRIM</item>\n      <item>SYS_ET_BFILE_TO_RAW</item>\n      <item>SYS_ET_BLOB_TO_IMAGE</item>\n      <item>SYS_ET_IMAGE_TO_BLOB</item>\n      <item>SYS_ET_RAW_TO_BFILE</item>\n      <item>SYS_EXTPDTXT</item>\n      <item>SYS_FBT_INSDEL</item>\n      <item>SYS_FILTER_ACLS</item>\n      <item>SYS_GET_ACLIDS</item>\n      <item>SYS_GET_PRIVILEGES</item>\n      <item>SYS_GETTOKENID</item>\n      <item>SYS_MAKEXML</item>\n      <item>SYS_MAKE_XMLNODEID</item>\n      <item>SYS_MKXMLATTR</item>\n      <item>SYS_OP_ADTCONS</item>\n      <item>SYS_OP_ADT2BIN</item>\n      <item>SYS_OP_ALSCRVAL</item>\n      <item>SYS_OP_ATG</item>\n      <item>SYS_OP_BIN2ADT</item>\n      <item>SYS_OP_BITVEC</item>\n      <item>SYS_OP_BLOOM_FILTER</item>\n      <item>SYS_OP_BLOOM_FILTER_LIST</item>\n      <item>SYS_OP_BL2R</item>\n      <item>SYS_OP_CAST</item>\n      <item>SYS_OP_CEG</item>\n      <item>SYS_OP_CL2C</item>\n      <item>SYS_OP_COMBINED_HASH</item>\n      <item>SYS_OP_COMP</item>\n      <item>SYS_OP_CONVERT</item>\n      <item>SYS_OP_COUNTCHG</item>\n      <item>SYS_OP_CSCONV</item>\n      <item>SYS_OP_CSCONVTEST</item>\n      <item>SYS_OP_CSR</item>\n      <item>SYS_OP_CSX_PATCH</item>\n      <item>SYS_OP_C2C</item>\n      <item>SYS_OP_DECOMP</item>\n      <item>SYS_OP_DESCEND</item>\n      <item>SYS_OP_DISTINCT</item>\n      <item>SYS_OP_DRA</item>\n      <item>SYS_OP_DUMP</item>\n      <item>SYS_OP_ENFORCE_NOT_NULL$</item>\n      <item>SYSOPER</item>\n      <item>SYS_OP_EXTRACT</item>\n      <item>SYS_OP_GROUPING</item>\n      <item>SYS_OP_GUID</item>\n      <item>SYS_OP_IIX</item>\n      <item>SYS_OP_ITR</item>\n      <item>SYS_OP_LBID</item>\n      <item>SYS_OP_LOBLOC2BLOB</item>\n      <item>SYS_OP_LOBLOC2CLOB</item>\n      <item>SYS_OP_LOBLOC2ID</item>\n      <item>SYS_OP_LOBLOC2NCLOB</item>\n      <item>SYS_OP_LOBLOC2TYP</item>\n      <item>SYS_OP_LSVI</item>\n      <item>SYS_OP_LVL</item>\n      <item>SYS_OP_MAKEOID</item>\n      <item>SYS_OP_MAP_NONNULL</item>\n      <item>SYS_OP_MSR</item>\n      <item>SYS_OP_NICOMBINE</item>\n      <item>SYS_OP_NIEXTRACT</item>\n      <item>SYS_OP_NII</item>\n      <item>SYS_OP_NIX</item>\n      <item>SYS_OP_NOEXPAND</item>\n      <item>SYS_OP_NTCIMG$</item>\n      <item>SYS_OP_NUMTORAW</item>\n      <item>SYS_OP_OIDVALUE</item>\n      <item>SYS_OP_OPNSIZE</item>\n      <item>SYS_OP_PAR</item>\n      <item>SYS_OP_PARGID</item>\n      <item>SYS_OP_PARGID_1</item>\n      <item>SYS_OP_PAR_1</item>\n      <item>SYS_OP_PIVOT</item>\n      <item>SYS_OP_RAWTONUM</item>\n      <item>SYS_OP_RDTM</item>\n      <item>SYS_OP_REF</item>\n      <item>SYS_OP_RMTD</item>\n      <item>SYS_OP_ROWIDTOOBJ</item>\n      <item>SYS_OP_RPB</item>\n      <item>SYS_OP_R2O</item>\n      <item>SYS_OPTLOBPRBSC</item>\n      <item>SYS_OP_TOSETID</item>\n      <item>SYS_OP_TPR</item>\n      <item>SYS_OP_TRTB</item>\n      <item>SYS_OPTXICMP</item>\n      <item>SYS_OPTXQCASTASNQ</item>\n      <item>SYS_OP_UNDESCEND</item>\n      <item>SYS_OP_VECAND</item>\n      <item>SYS_OP_VECBIT</item>\n      <item>SYS_OP_VECOR</item>\n      <item>SYS_OP_VECXOR</item>\n      <item>SYS_OP_VERSION</item>\n      <item>SYS_OP_VREF</item>\n      <item>SYS_OP_VVD</item>\n      <item>SYS_OP_XPTHATG</item>\n      <item>SYS_OP_XPTHIDX</item>\n      <item>SYS_OP_XPTHOP</item>\n      <item>SYS_OP_XTXT2SQLT</item>\n      <item>SYS_ORDERKEY_DEPTH</item>\n      <item>SYS_ORDERKEY_MAXCHILD</item>\n      <item>SYS_ORDERKEY_PARENT</item>\n      <item>SYS_PARALLEL_TXN</item>\n      <item>SYS_PATHID_IS_ATTR</item>\n      <item>SYS_PATHID_IS_NMSPC</item>\n      <item>SYS_PATHID_LASTNAME</item>\n      <item>SYS_PATHID_LASTNMSPC</item>\n      <item>SYS_PATH_REVERSE</item>\n      <item>SYS_PXQEXTRACT</item>\n      <item>SYS_RID_ORDER</item>\n      <item>SYS_ROW_DELTA</item>\n      <item>SYS_SC_2_XMLT</item>\n      <item>SYS_SYNRCIREDO</item>\n      <item>SYSTEM</item>\n      <item>SYSTEM_DEFINED</item>\n      <item>SYSTIMESTAMP</item>\n      <item>SYS_TYPEID</item>\n      <item>SYS_UMAKEXML</item>\n      <item>SYS_XMLANALYZE</item>\n      <item>SYS_XMLCONTAINS</item>\n      <item>SYS_XMLCONV</item>\n      <item>SYS_XMLEXNSURI</item>\n      <item>SYS_XMLI_LOC_ISNODE</item>\n      <item>SYS_XMLI_LOC_ISTEXT</item>\n      <item>SYS_XMLLOCATOR_GETSVAL</item>\n      <item>SYS_XMLNODEID</item>\n      <item>SYS_XMLNODEID_GETCID</item>\n      <item>SYS_XMLNODEID_GETLOCATOR</item>\n      <item>SYS_XMLNODEID_GETOKEY</item>\n      <item>SYS_XMLNODEID_GETPATHID</item>\n      <item>SYS_XMLNODEID_GETPTRID</item>\n      <item>SYS_XMLNODEID_GETRID</item>\n      <item>SYS_XMLNODEID_GETSVAL</item>\n      <item>SYS_XMLNODEID_GETTID</item>\n      <item>SYS_XMLTRANSLATE</item>\n      <item>SYS_XMLTYPE2SQL</item>\n      <item>SYS_XMLT_2_SC</item>\n      <item>SYS_XQ_ASQLCNV</item>\n      <item>SYS_XQ_ATOMCNVCHK</item>\n      <item>SYS_XQBASEURI</item>\n      <item>SYS_XQCASTABLEERRH</item>\n      <item>SYS_XQCODEPEQ</item>\n      <item>SYS_XQCODEP2STR</item>\n      <item>SYS_XQCONCAT</item>\n      <item>SYS_XQCON2SEQ</item>\n      <item>SYS_XQDELETE</item>\n      <item>SYS_XQDFLTCOLATION</item>\n      <item>SYS_XQDOC</item>\n      <item>SYS_XQDOCURI</item>\n      <item>SYS_XQED4URI</item>\n      <item>SYS_XQENDSWITH</item>\n      <item>SYS_XQERR</item>\n      <item>SYS_XQERRH</item>\n      <item>SYS_XQESHTMLURI</item>\n      <item>SYS_XQEXLOBVAL</item>\n      <item>SYS_XQEXSTWRP</item>\n      <item>SYS_XQEXTRACT</item>\n      <item>SYS_XQEXTRREF</item>\n      <item>SYS_XQEXVAL</item>\n      <item>SYS_XQFB2STR</item>\n      <item>SYS_XQFNBOOL</item>\n      <item>SYS_XQFNCMP</item>\n      <item>SYS_XQFNDATIM</item>\n      <item>SYS_XQFNLNAME</item>\n      <item>SYS_XQFNNM</item>\n      <item>SYS_XQFNNSURI</item>\n      <item>SYS_XQFNPREDTRUTH</item>\n      <item>SYS_XQFNQNM</item>\n      <item>SYS_XQFNROOT</item>\n      <item>SYS_XQFORMATNUM</item>\n      <item>SYS_XQFTCONTAIN</item>\n      <item>SYS_XQFUNCR</item>\n      <item>SYS_XQGETCONTENT</item>\n      <item>SYS_XQINDXOF</item>\n      <item>SYS_XQINSERT</item>\n      <item>SYS_XQINSPFX</item>\n      <item>SYS_XQIRI2URI</item>\n      <item>SYS_XQLANG</item>\n      <item>SYS_XQLLNMFRMQNM</item>\n      <item>SYS_XQMKNODEREF</item>\n      <item>SYS_XQNILLED</item>\n      <item>SYS_XQNODENAME</item>\n      <item>SYS_XQNORMSPACE</item>\n      <item>SYS_XQNORMUCODE</item>\n      <item>SYS_XQ_NRNG</item>\n      <item>SYS_XQNSPFRMQNM</item>\n      <item>SYS_XQNSP4PFX</item>\n      <item>SYS_XQPFXFRMQNM</item>\n      <item>SYS_XQ_PKSQL2XML</item>\n      <item>SYS_XQPOLYABS</item>\n      <item>SYS_XQPOLYADD</item>\n      <item>SYS_XQPOLYCEL</item>\n      <item>SYS_XQPOLYCST</item>\n      <item>SYS_XQPOLYCSTBL</item>\n      <item>SYS_XQPOLYDIV</item>\n      <item>SYS_XQPOLYFLR</item>\n      <item>SYS_XQPOLYMOD</item>\n      <item>SYS_XQPOLYMUL</item>\n      <item>SYS_XQPOLYRND</item>\n      <item>SYS_XQPOLYSQRT</item>\n      <item>SYS_XQPOLYSUB</item>\n      <item>SYS_XQPOLYUMUS</item>\n      <item>SYS_XQPOLYUPLS</item>\n      <item>SYS_XQPOLYVEQ</item>\n      <item>SYS_XQPOLYVGE</item>\n      <item>SYS_XQPOLYVGT</item>\n      <item>SYS_XQPOLYVLE</item>\n      <item>SYS_XQPOLYVLT</item>\n      <item>SYS_XQPOLYVNE</item>\n      <item>SYS_XQREF2VAL</item>\n      <item>SYS_XQRENAME</item>\n      <item>SYS_XQREPLACE</item>\n      <item>SYS_XQRESVURI</item>\n      <item>SYS_XQRNDHALF2EVN</item>\n      <item>SYS_XQRSLVQNM</item>\n      <item>SYS_XQRYENVPGET</item>\n      <item>SYS_XQRYVARGET</item>\n      <item>SYS_XQRYWRP</item>\n      <item>SYS_XQSEQDEEPEQ</item>\n      <item>SYS_XQSEQINSB</item>\n      <item>SYS_XQSEQRM</item>\n      <item>SYS_XQSEQRVS</item>\n      <item>SYS_XQSEQSUB</item>\n      <item>SYS_XQSEQTYPMATCH</item>\n      <item>SYS_XQSEQ2CON</item>\n      <item>SYS_XQSEQ2CON4XC</item>\n      <item>SYS_XQSTARTSWITH</item>\n      <item>SYS_XQSTATBURI</item>\n      <item>SYS_XQSTRJOIN</item>\n      <item>SYS_XQSTR2CODEP</item>\n      <item>SYS_XQSUBSTRAFT</item>\n      <item>SYS_XQSUBSTRBEF</item>\n      <item>SYS_XQTOKENIZE</item>\n      <item>SYS_XQTREATAS</item>\n      <item>SYS_XQ_UPKXML2SQL</item>\n      <item>SYS_XQXFORM</item>\n      <item>TABLE</item>\n      <item>TABLES</item>\n      <item>TABLESPACE</item>\n      <item>TABLESPACE_NO</item>\n      <item>TABLE_STATS</item>\n      <item>TABNO</item>\n      <item>TBL$OR$IDX$PART$NUM</item>\n      <item>TEMPFILE</item>\n      <item>TEMPLATE</item>\n      <item>TEMPORARY</item>\n      <item>TEMP_TABLE</item>\n      <item>TEST</item>\n      <item>THAN</item>\n      <item>THE</item>\n      <item>THREAD</item>\n      <item>THROUGH</item>\n      <item>TIME</item>\n      <item>TIMEOUT</item>\n      <item>TIMES</item>\n      <item>TIMESTAMP</item>\n      <item>TIME_ZONE</item>\n      <item>TIMEZONE_ABBR</item>\n      <item>TIMEZONE_HOUR</item>\n      <item>TIMEZONE_MINUTE</item>\n      <item>TIMEZONE_OFFSET</item>\n      <item>TIMEZONE_REGION</item>\n      <item>TIV_GB</item>\n      <item>TIV_SSF</item>\n      <item>TO</item>\n      <item>TRACE</item>\n      <item>TRACING</item>\n      <item>TRACKING</item>\n      <item>TRAILING</item>\n      <item>TRANSACTION</item>\n      <item>TRANSFORM_DISTINCT_AGG</item>\n      <item>TRANSITION</item>\n      <item>TRANSITIONAL</item>\n      <item>TRIGGER</item>\n      <item>TRIGGERS</item>\n      <item>TRUE</item>\n      <item>TRUNCATE</item>\n      <item>TRUSTED</item>\n      <item>TUNING</item>\n      <item>TX</item>\n      <item>TYPE</item>\n      <item>TYPES</item>\n      <item>UBA</item>\n      <item>UB2</item>\n      <item>UNARCHIVED</item>\n      <item>UNBOUND</item>\n      <item>UNBOUNDED</item>\n      <item>UNDEFINE</item>\n      <item>UNDER</item>\n      <item>UNDO</item>\n      <item>UNDROP</item>\n      <item>UNIFORM</item>\n      <item>UNION</item>\n      <item>UNIQUE</item>\n      <item>UNLIMITED</item>\n      <item>UNLOCK</item>\n      <item>UNNEST</item>\n      <item>UNPACKED</item>\n      <item>UNPIVOT</item>\n      <item>UNPROTECTED</item>\n      <item>UNQUIESCE</item>\n      <item>UNRECOVERABLE</item>\n      <item>UNRESTRICTED</item>\n      <item>UNTIL</item>\n      <item>UNUSABLE</item>\n      <item>UNUSED</item>\n      <item>UPDATABLE</item>\n      <item>UPDATE</item>\n      <item>UPDATED</item>\n      <item>UPD_INDEXES</item>\n      <item>UPD_JOININDEX</item>\n      <item>UPGRADE</item>\n      <item>UPSERT</item>\n      <item>UROWID</item>\n      <item>USAGE</item>\n      <item>USE</item>\n      <item>USE_ANTI</item>\n      <item>USE_CONCAT</item>\n      <item>USE_HASH</item>\n      <item>USE_HASH_AGGREGATION</item>\n      <item>USE_INVISIBLE_INDEXES</item>\n      <item>USE_MERGE</item>\n      <item>USE_MERGE_CARTESIAN</item>\n      <item>USE_NL</item>\n      <item>USE_NL_WITH_INDEX</item>\n      <item>USE_PRIVATE_OUTLINES</item>\n      <item>USER_DEFINED</item>\n      <item>USERGROUP</item>\n      <item>USER_RECYCLEBIN</item>\n      <item>USERS</item>\n      <item>USE_SEMI</item>\n      <item>USE_STORED_OUTLINES</item>\n      <item>USE_TTT_FOR_GSETS</item>\n      <item>USE_WEAK_NAME_RESL</item>\n      <item>USING</item>\n      <item>VALIDATE</item>\n      <item>VALIDATION</item>\n      <item>VALUES</item>\n      <item>VARRAYS</item>\n      <item>VARIABLE</item>\n      <item>VARYING</item>\n      <item>VECTOR_READ</item>\n      <item>VECTOR_READ_TRACE</item>\n      <item>VERIFY</item>\n      <item>VERSION</item>\n      <item>VERSIONING</item>\n      <item>VERSIONS</item>\n      <item>VERSIONS_ENDSCN</item>\n      <item>VERSIONS_ENDTIME</item>\n      <item>VERSIONS_OPERATION</item>\n      <item>VERSIONS_STARTSCN</item>\n      <item>VERSIONS_STARTTIME</item>\n      <item>VERSIONS_XID</item>\n      <item>VIEW</item>\n      <item>VIRTUAL</item>\n      <item>VISIBLE</item>\n      <item>VOLUME</item>\n      <item>WAIT</item>\n      <item>WALLET</item>\n      <item>WELLFORMED</item>\n      <item>WHENEVER</item>\n      <item>WHERE</item>\n      <item>WHITESPACE</item>\n      <item>WITH</item>\n      <item>WITHIN</item>\n      <item>WITHOUT</item>\n      <item>WORK</item>\n      <item>WRAPPED</item>\n      <item>WRITE</item>\n      <item>X_DYN_PRUNE</item>\n      <item>XID</item>\n      <item>XML</item>\n      <item>XMLATTRIBUTES</item>\n      <item>XMLEXISTS2</item>\n      <item>XML_DML_RWT_STMT</item>\n      <item>XMLINDEX_REWRITE</item>\n      <item>XMLINDEX_REWRITE_IN_SELECT</item>\n      <item>XMLINDEX_SEL_IDX_TBL</item>\n      <item>XMLISNODE</item>\n      <item>XMLNAMESPACES</item>\n      <item>XMLSCHEMA</item>\n      <item>XMLTOOBJECT</item>\n      <item>XMLTRANSFORMBLOB</item>\n      <item>XMLTYPE</item>\n      <item>XPATHTABLE</item>\n      <item>XS_SYS_CONTEXT</item>\n      <item>YEAR</item>\n      <item>YES</item>\n      <item>ZONE</item>\n    </list>\n    <list name=\"functions\">\n      <item>ABS</item>\n      <item>ACOS</item>\n      <item>ADD_MONTHS</item>\n      <item>APPENDCHILDXML</item>\n      <item>ASCII</item>\n      <item>ASCIISTR</item>\n      <item>ASIN</item>\n      <item>ATAN</item>\n      <item>ATAN2</item>\n      <item>AVG</item>\n      <item>BFILENAME</item>\n      <item>BIN_TO_NUM</item>\n      <item>BITAND</item>\n      <item>CARDINALITY</item>\n      <item>CAST</item>\n      <item>CEIL</item>\n      <item>CHARTOROWID</item>\n      <item>CHR</item>\n      <item>CLUSTER_ID</item>\n      <item>CLUSTER_PROBABILITY</item>\n      <item>CLUSTER_SET</item>\n      <item>COALESCE</item>\n      <item>COLLECT</item>\n      <item>COMPOSE</item>\n      <item>CONCAT</item>\n      <item>CONVERT</item>\n      <item>CORR</item>\n      <item>CORR_K</item>\n      <item>CORR_S</item>\n      <item>COS</item>\n      <item>COSH</item>\n      <item>COUNT</item>\n      <item>COVAR_POP</item>\n      <item>COVAR_SAMP</item>\n      <item>CUME_DIST</item>\n      <item>CURRENT_DATE</item>\n      <item>CURRENT_TIMESTAMP</item>\n      <item>CV</item>\n      <item>DATAOBJ_TO_PARTITION</item>\n      <item>DBTIMEZONE</item>\n      <item>DECODE</item>\n      <item>DECOMPOSE</item>\n      <item>DELETEXML</item>\n      <item>DENSE_RANK</item>\n      <item>DEPTH</item>\n      <item>DEREF</item>\n      <item>DUMP</item>\n      <item>EMPTY_BLOB</item>\n      <item>EMPTY_CLOB</item>\n      <item>EXISTSNODE</item>\n      <item>EXP</item>\n      <item>EXTRACT</item>\n      <item>EXTRACTVALUE</item>\n      <item>FEATURE_ID</item>\n      <item>FEATURE_SET</item>\n      <item>FEATURE_VALUE</item>\n      <item>FIRST</item>\n      <item>FIRST_VALUE</item>\n      <item>FLOOR</item>\n      <item>FROM_TZ</item>\n      <item>GREATEST</item>\n      <item>GROUP_ID</item>\n      <item>GROUPING</item>\n      <item>GROUPING_ID</item>\n      <item>HEXTORAW</item>\n      <item>INITCAP</item>\n      <item>INSERTCHILDXML</item>\n      <item>INSERTCHILDXMLAFTER</item>\n      <item>INSERTCHILDXMLBEFORE</item>\n      <item>INSERTXMLAFTER</item>\n      <item>INSERTXMLBEFORE</item>\n      <item>INSTR</item>\n      <item>INSTRB</item>\n      <item>INSTRC</item>\n      <item>INSTR2</item>\n      <item>INSTR4</item>\n      <item>ITERATION_NUMBER</item>\n      <item>LAG</item>\n      <item>LAST</item>\n      <item>LAST_DAY</item>\n      <item>LAST_VALUE</item>\n      <item>LEAD</item>\n      <item>LEAST</item>\n      <item>LENGTH</item>\n      <item>LENGTHB</item>\n      <item>LENGTHC</item>\n      <item>LENGTH2</item>\n      <item>LENGTH4</item>\n      <item>LISTAGG</item>\n      <item>LN</item>\n      <item>LNNVL</item>\n      <item>LOCALTIMESTAMP</item>\n      <item>LOG</item>\n      <item>LOWER</item>\n      <item>LPAD</item>\n      <item>LTRIM</item>\n      <item>MAKE_REF</item>\n      <item>MAX</item>\n      <item>MEDIAN</item>\n      <item>MIN</item>\n      <item>MOD</item>\n      <item>MONTHS_BETWEEN</item>\n      <item>NANVL</item>\n      <item>NCHR</item>\n      <item>NEW_TIME</item>\n      <item>NEXT_DAY</item>\n      <item>NLS_CHARSET_DECL_LEN</item>\n      <item>NLS_CHARSET_ID</item>\n      <item>NLS_CHARSET_NAME</item>\n      <item>NLS_INITCAP</item>\n      <item>NLS_LOWER</item>\n      <item>NLS_UPPER</item>\n      <item>NLSSORT</item>\n      <item>NTH_VALUE</item>\n      <item>NTILE</item>\n      <item>NULLIF</item>\n      <item>NUMTODSINTERVAL</item>\n      <item>NUMTOYMINTERVAL</item>\n      <item>NVL</item>\n      <item>NVL2</item>\n      <item>ORA_DST_AFFECTED</item>\n      <item>ORA_DST_CONVERT</item>\n      <item>ORA_DST_ERROR</item>\n      <item>ORA_HASH</item>\n      <item>PATH</item>\n      <item>PERCENT_RANK</item>\n      <item>PERCENTILE_CONT</item>\n      <item>PERCENTILE_DISC</item>\n      <item>POWER</item>\n      <item>POWERMULTISET</item>\n      <item>POWERMULTISET_BY_CARDINALITY</item>\n      <item>PREDICTION</item>\n      <item>PREDICTION_BOUNDS</item>\n      <item>PREDICTION_COST</item>\n      <item>PREDICTION_DETAILS</item>\n      <item>PREDICTION_PROBABILITY</item>\n      <item>PREDICTION_SET</item>\n      <item>PRESENTNNV</item>\n      <item>PRESENTV</item>\n      <item>PREVIOUS</item>\n      <item>RANK</item>\n      <item>RATIO_TO_REPORT</item>\n      <item>RAWTOHEX</item>\n      <item>RAWTONHEX</item>\n      <item>REF</item>\n      <item>REFTOHEX</item>\n      <item>REGEXP_COUNT</item>\n      <item>REGEXP_INSTR</item>\n      <item>REGEXP_REPLACE</item>\n      <item>REGEXP_SUBSTR</item>\n      <item>REGR_SLOPE</item>\n      <item>REGR_INTERCEPT</item>\n      <item>REGR_COUNT</item>\n      <item>REGR_R2</item>\n      <item>REGR_AVGX</item>\n      <item>REGR_AVGY</item>\n      <item>REGR_SXX</item>\n      <item>REGR_SYY</item>\n      <item>REGR_SXY</item>\n      <item>REMAINDER</item>\n      <item>REPLACE</item>\n      <item>ROUND</item>\n      <item>ROW_NUMBER</item>\n      <item>ROWIDTOCHAR</item>\n      <item>ROWIDTONCHAR</item>\n      <item>RPAD</item>\n      <item>RTRIM</item>\n      <item>SCN_TO_TIMESTAMP</item>\n      <item>SESSIONTIMEZONE</item>\n      <item>SET</item>\n      <item>SIGN</item>\n      <item>SIN</item>\n      <item>SINH</item>\n      <item>SOUNDEX</item>\n      <item>SQRT</item>\n      <item>STATS_BINOMIAL_TEST</item>\n      <item>STATS_CROSSTAB</item>\n      <item>STATS_F_TEST</item>\n      <item>STATS_KS_TEST</item>\n      <item>STATS_MODE</item>\n      <item>STATS_MW_TEST</item>\n      <item>STATS_ONE_WAY_ANOVA</item>\n      <item>STATS_T_TEST_ONE</item>\n      <item>STATS_T_TEST_PAIRED</item>\n      <item>STATS_T_TEST_INDEP</item>\n      <item>STATS_T_TEST_INDEPU</item>\n      <item>STATS_WSR_TEST</item>\n      <item>STDDEV</item>\n      <item>STDDEV_POP</item>\n      <item>STDDEV_SAMP</item>\n      <item>SUBSTR</item>\n      <item>SUBSTRB</item>\n      <item>SUBSTRC</item>\n      <item>SUBSTR2</item>\n      <item>SUBSTR4</item>\n      <item>SUM</item>\n      <item>SYS_CONNECT_BY_PATH</item>\n      <item>SYS_CONTEXT</item>\n      <item>SYS_DBURIGEN</item>\n      <item>SYS_EXTRACT_UTC</item>\n      <item>SYS_GUID</item>\n      <item>SYS_TYPEID</item>\n      <item>SYS_XMLAGG</item>\n      <item>SYS_XMLGEN</item>\n      <item>SYSDATE</item>\n      <item>SYSTIMESTAMP</item>\n      <item>TAN</item>\n      <item>TANH</item>\n      <item>TIMESTAMP_TO_SCN</item>\n      <item>TO_BINARY_DOUBLE</item>\n      <item>TO_BINARY_FLOAT</item>\n      <item>TO_BLOB</item>\n      <item>TO_CHAR</item>\n      <item>TO_CLOB</item>\n      <item>TO_DATE</item>\n      <item>TO_DSINTERVAL</item>\n      <item>TO_LOB</item>\n      <item>TO_MULTI_BYTE</item>\n      <item>TO_NCHAR</item>\n      <item>TO_NCLOB</item>\n      <item>TO_NUMBER</item>\n      <item>TO_SINGLE_BYTE</item>\n      <item>TO_TIMESTAMP</item>\n      <item>TO_TIMESTAMP_TZ</item>\n      <item>TO_YMINTERVAL</item>\n      <item>TRANSLATE</item>\n      <item>TREAT</item>\n      <item>TRIM</item>\n      <item>TRUNC</item>\n      <item>TZ_OFFSET</item>\n      <item>UID</item>\n      <item>UNISTR</item>\n      <item>UPDATEXML</item>\n      <item>UPPER</item>\n      <item>USER</item>\n      <item>USERENV</item>\n      <item>VALUE</item>\n      <item>VAR_POP</item>\n      <item>VAR_SAMP</item>\n      <item>VARIANCE</item>\n      <item>VSIZE</item>\n      <item>WIDTH_BUCKET</item>\n      <item>XMLAGG</item>\n      <item>XMLCAST</item>\n      <item>XMLCDATA</item>\n      <item>XMLCOLATTVAL</item>\n      <item>XMLCOMMENT</item>\n      <item>XMLCONCAT</item>\n      <item>XMLDIFF</item>\n      <item>XMLELEMENT</item>\n      <item>XMLEXISTS</item>\n      <item>XMLFOREST</item>\n      <item>XMLISVALID</item>\n      <item>XMLPARSE</item>\n      <item>XMLPATCH</item>\n      <item>XMLPI</item>\n      <item>XMLQUERY</item>\n      <item>XMLROOT</item>\n      <item>XMLSEQUENCE</item>\n      <item>XMLSERIALIZE</item>\n      <item>XMLTABLE</item>\n      <item>XMLTRANSFORM</item>\n    </list>\n    <list name=\"types\">\n      <item>ANYDATA</item>\n      <item>ANYDATASET</item>\n      <item>ANYTYPE</item>\n      <item>ARRAY</item>\n      <item>BFILE</item>\n      <item>BINARY</item>\n      <item>BINARY_DOUBLE</item>\n      <item>BINARY_DOUBLE_INFINITY</item>\n      <item>BINARY_DOUBLE_NAN</item>\n      <item>BINARY_FLOAT</item>\n      <item>BINARY_FLOAT_INFINITY</item>\n      <item>BINARY_FLOAT_NAN</item>\n      <item>BLOB</item>\n      <item>BOOLEAN</item>\n      <item>CFILE</item>\n      <item>CHAR</item>\n      <item>CHARACTER</item>\n      <item>CLOB</item>\n      <item>DATE</item>\n      <item>DBURITYPE</item>\n      <item>DEC</item>\n      <item>DECIMAL</item>\n      <item>DOUBLE</item>\n      <item>FLOAT</item>\n      <item>HTTPURITYPE</item>\n      <item>INT</item>\n      <item>INTEGER</item>\n      <item>INTERVAL</item>\n      <item>LOB</item>\n      <item>LONG</item>\n      <item>MLSLABEL</item>\n      <item>NCHAR</item>\n      <item>NCLOB</item>\n      <item>NUMBER</item>\n      <item>NUMERIC</item>\n      <item>NVARCHAR2</item>\n      <item>OBJECT</item>\n      <item>PLS_INTEGER</item>\n      <item>PRECISION</item>\n      <item>RAW</item>\n      <item>RECORD</item>\n      <item>REFCURSOR</item>\n      <item>REAL</item>\n      <item>ROWID</item>\n      <item>SECOND</item>\n      <item>SINGLE</item>\n      <item>SMALLINT</item>\n      <item>TIME</item>\n      <item>TIMESTAMP</item>\n      <item>URIFACTORYTYPE</item>\n      <item>URITYPE</item>\n      <item>UROWID</item>\n      <item>VARCHAR</item>\n      <item>VARCHAR2</item>\n      <item>VARYING</item>\n      <item>VARRAY</item>\n      <item>XMLTYPE</item>\n      <item>ZONE</item>\n    </list>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <!-- comments -->\n        <Detect2Chars attribute=\"Comment\" context=\"singleLineComment\" char=\"-\" char1=\"-\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"multiLineComment\" char=\"/\" char1=\"*\"/>\n\n        <!-- block's -->\n        <WordDetect attribute=\"ControlFlow\" context=\"#stay\" String=\"if\" beginRegion=\"if_block\" insensitive=\"true\"/>\n        <RegExpr    attribute=\"ControlFlow\" context=\"#stay\" String=\"end\\s+if\" endRegion=\"if_block\" insensitive=\"true\"/>\n        <WordDetect attribute=\"ControlFlow\" context=\"#stay\" String=\"case\" beginRegion=\"case_block\" insensitive=\"true\"/>\n        <RegExpr    attribute=\"ControlFlow\" context=\"#stay\" String=\"end\\s+case\" endRegion=\"case_block\" insensitive=\"true\"/>\n        <WordDetect attribute=\"ControlFlow\" context=\"#stay\" String=\"loop\" beginRegion=\"loop_block\" insensitive=\"true\"/>\n        <RegExpr    attribute=\"ControlFlow\" context=\"#stay\" String=\"end\\s+loop\" endRegion=\"loop_block\" insensitive=\"true\"/>\n        <WordDetect attribute=\"ControlFlow\" context=\"#stay\" String=\"begin\" beginRegion=\"block\" insensitive=\"true\"/>\n        <WordDetect attribute=\"ControlFlow\" context=\"#stay\" String=\"end\" endRegion=\"block\" insensitive=\"true\"/>\n        <keyword attribute=\"ControlFlow\" String=\"controlFlow\" context=\"#stay\"/>\n        <keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n\n        <Int attribute=\"Number\" context=\"#stay\"/>\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <keyword attribute=\"Operator Keyword\" String=\"operators\" context=\"#stay\"/>\n        <AnyChar attribute=\"Operator\" String=\"+-*/=&lt;&gt;\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\":\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"!\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"^\" char1=\"=\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\".\" char1=\".\" context=\"#stay\"/>\n        <Detect2Chars attribute=\"Operator\" char=\"|\" char1=\"|\" context=\"#stay\"/>\n        <keyword attribute=\"Function\" String=\"functions\" context=\"#stay\"/>\n        <keyword attribute=\"Data Type\" String=\"types\" context=\"#stay\"/>\n        <RegExpr attribute=\"External Variable\" context=\"#stay\" String=\"&amp;\\w+\\b\"/>\n\n        <!-- quoting -->\n        <RegExpr attribute=\"Operator\" context=\"QuoteOperatorBrace\" String=\"\\bn?q'\\{\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Operator\" context=\"QuoteOperatorBracket\" String=\"\\bn?q'\\[\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Operator\" context=\"QuoteOperatorParenthesis\" String=\"\\bn?q'\\(\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Operator\" context=\"QuoteOperator\" String=\"\\bn?q'(\\S)\" insensitive=\"true\"/>\n        <RegExpr attribute=\"Operator\" context=\"NCharOperator\" String=\"\\bn'\" insensitive=\"true\"/>\n        <DetectChar attribute=\"String\" context=\"StringLiteral\" char=\"'\"/>\n\n        <DetectIdentifier />\n      </context>\n\n      <context name=\"StringLiteral\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <context name=\"QuoteOperator\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <StringDetect attribute=\"Operator\" context=\"#pop\" String=\"%1'\" dynamic=\"true\"/>\n      </context>\n      <context name=\"QuoteOperatorBrace\" attribute=\"String\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Operator\" context=\"#pop\" char=\"}\" char1=\"'\"/>\n      </context>\n      <context name=\"QuoteOperatorBracket\" attribute=\"String\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Operator\" context=\"#pop\" char=\"]\" char1=\"'\"/>\n      </context>\n      <context name=\"QuoteOperatorParenthesis\" attribute=\"String\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Operator\" context=\"#pop\" char=\")\" char1=\"'\"/>\n      </context>\n      <context name=\"NCharOperator\" attribute=\"String\"  lineEndContext=\"#stay\">\n          <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <context name=\"singleLineComment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <context name=\"multiLineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"           defStyleNum=\"dsKeyword\"     spellChecking=\"false\"/>\n      <itemData name=\"ControlFlow\"       defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\"          defStyleNum=\"dsOperator\"    spellChecking=\"false\"/>\n      <itemData name=\"Operator Keyword\"  defStyleNum=\"dsKeyword\"     spellChecking=\"false\"/>\n      <itemData name=\"Function\"          defStyleNum=\"dsFunction\"    spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"         defStyleNum=\"dsDataType\"    spellChecking=\"false\"/>\n      <itemData name=\"Number\"            defStyleNum=\"dsDecVal\"      spellChecking=\"false\"/>\n      <itemData name=\"String\"            defStyleNum=\"dsString\"/>\n      <itemData name=\"External Variable\" defStyleNum=\"dsNormal\"      spellChecking=\"false\"/>\n      <itemData name=\"Comment\"           defStyleNum=\"dsComment\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\"$\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sql-postgresql.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- PostgreSQL SQL, syntax definition based on sql.xml by Yury Lebedev\n     v5 fix comments by Gene Thomas <gene@genethomas.com>\n  -->\n<language name=\"SQL (PostgreSQL)\" version=\"7\" kateversion=\"5.0\" section=\"Database\" extensions=\"*.sql;*.SQL;*.ddl;*.DDL\" mimetype=\"text/x-sql\" casesensitive=\"0\" author=\"Shane Wright (me@shanewright.co.uk)\" license=\"\">\n  <highlighting>\n    <list name=\"controlFlow\">\n      <item>BEGIN</item>\n      <item>CASE</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>EXCEPTION</item>\n      <item>FOR</item>\n      <item>IF</item>\n      <item>LOOP</item>\n      <item>RETURN</item>\n      <item>THEN</item>\n      <item>WHEN</item>\n  </list>\n    <list name=\"operators\">\n      <item>AND</item>\n      <item>BETWEEN</item>\n      <item>IN</item>\n      <item>IS</item>\n      <item>LIKE</item>\n      <item>NOT</item>\n      <item>OR</item>\n    </list>\n    <list name=\"keywords\">\n      <item>A</item>\n      <item>ABORT</item>\n      <item>ABSENT</item>\n      <item>ABSOLUTE</item>\n      <item>ACCESS</item>\n      <item>ACCORDING</item>\n      <item>ACTION</item>\n      <item>ADA</item>\n      <item>ADD</item>\n      <item>ADMIN</item>\n      <item>AFTER</item>\n      <item>AGGREGATE</item>\n      <item>ALL</item>\n      <item>ALLOCATE</item>\n      <item>ALSO</item>\n      <item>ALTER</item>\n      <item>ALWAYS</item>\n      <item>ANALYZE</item>\n      <item>ANY</item>\n      <item>ARE</item>\n      <item>ARRAY</item>\n      <item>ARRAY_AGG</item>\n      <item>ARRAY_MAX_CARDINALITY</item>\n      <item>AS</item>\n      <item>ASC</item>\n      <item>ASENSITIVE</item>\n      <item>ASSERTION</item>\n      <item>ASSIGNMENT</item>\n      <item>ASYMMETRIC</item>\n      <item>AT</item>\n      <item>ATOMIC</item>\n      <item>ATTACH</item>\n      <item>ATTRIBUTE</item>\n      <item>ATTRIBUTES</item>\n      <item>AUTHORIZATION</item>\n      <item>BACKWARD</item>\n      <item>BASE64</item>\n      <item>BEFORE</item>\n      <item>BEGIN_FRAME</item>\n      <item>BEGIN_PARTITION</item>\n      <item>BERNOULLI</item>\n      <item>BINARY</item>\n      <item>BLOB</item>\n      <item>BLOCKED</item>\n      <item>BOM</item>\n      <item>BOTH</item>\n      <item>BREADTH</item>\n      <item>BY</item>\n      <item>C</item>\n      <item>CACHE</item>\n      <item>CALL</item>\n      <item>CALLED</item>\n      <item>CARDINALITY</item>\n      <item>CASCADE</item>\n      <item>CASCADED</item>\n      <item>CAST</item>\n      <item>CATALOG</item>\n      <item>CATALOG_NAME</item>\n      <item>CHAIN</item>\n      <item>CHARACTERISTICS</item>\n      <item>CHARACTERS</item>\n      <item>CHARACTER_SET_CATALOG</item>\n      <item>CHARACTER_SET_NAME</item>\n      <item>CHARACTER_SET_SCHEMA</item>\n      <item>CHECK</item>\n      <item>CHECKPOINT</item>\n      <item>CLASS</item>\n      <item>CLASS_ORIGIN</item>\n      <item>CLOB</item>\n      <item>CLOSE</item>\n      <item>CLUSTER</item>\n      <item>COBOL</item>\n      <item>COLLATE</item>\n      <item>COLLATION</item>\n      <item>COLLATION_CATALOG</item>\n      <item>COLLATION_NAME</item>\n      <item>COLLATION_SCHEMA</item>\n      <item>COLLECT</item>\n      <item>COLUMN</item>\n      <item>COLUMNS</item>\n      <item>COLUMN_NAME</item>\n      <item>COMMAND_FUNCTION</item>\n      <item>COMMAND_FUNCTION_CODE</item>\n      <item>COMMENT</item>\n      <item>COMMENTS</item>\n      <item>COMMIT</item>\n      <item>COMMITTED</item>\n      <item>CONCURRENTLY</item>\n      <item>CONDITION</item>\n      <item>CONDITION_NUMBER</item>\n      <item>CONFIGURATION</item>\n      <item>CONFLICT</item>\n      <item>CONNECT</item>\n      <item>CONNECTION</item>\n      <item>CONNECTION_NAME</item>\n      <item>CONSTRAINT</item>\n      <item>CONSTRAINTS</item>\n      <item>CONSTRAINT_CATALOG</item>\n      <item>CONSTRAINT_NAME</item>\n      <item>CONSTRAINT_SCHEMA</item>\n      <item>CONSTRUCTOR</item>\n      <item>CONTAINS</item>\n      <item>CONTENT</item>\n      <item>CONTINUE</item>\n      <item>CONTROL</item>\n      <item>CONVERSION</item>\n      <item>COPY</item>\n      <item>CORR</item>\n      <item>CORRESPONDING</item>\n      <item>COST</item>\n      <item>COVAR_POP</item>\n      <item>COVAR_SAMP</item>\n      <item>CREATE</item>\n      <item>CROSS</item>\n      <item>CSV</item>\n      <item>CUBE</item>\n      <item>CUME_DIST</item>\n      <item>CURRENT</item>\n      <item>CURRENT_CATALOG</item>\n      <item>CURRENT_DATE</item>\n      <item>CURRENT_DEFAULT_TRANSFORM_GROUP</item>\n      <item>CURRENT_PATH</item>\n      <item>CURRENT_ROLE</item>\n      <item>CURRENT_ROW</item>\n      <item>CURRENT_TIME</item>\n      <item>CURRENT_TIMESTAMP</item>\n      <item>CURRENT_TRANSFORM_GROUP_FOR_TYPE</item>\n      <item>CURSOR</item>\n      <item>CURSOR_NAME</item>\n      <item>CYCLE</item>\n      <item>DATA</item>\n      <item>DATABASE</item>\n      <item>DATALINK</item>\n      <item>DATETIME_INTERVAL_CODE</item>\n      <item>DATETIME_INTERVAL_PRECISION</item>\n      <item>DAY</item>\n      <item>DB</item>\n      <item>DEALLOCATE</item>\n      <item>DEC</item>\n      <item>DECLARE</item>\n      <item>DEFAULT</item>\n      <item>DEFAULTS</item>\n      <item>DEFERRABLE</item>\n      <item>DEFERRED</item>\n      <item>DEFINED</item>\n      <item>DEFINER</item>\n      <item>DEGREE</item>\n      <item>DELETE</item>\n      <item>DELIMITER</item>\n      <item>DELIMITERS</item>\n      <item>DENSE_RANK</item>\n      <item>DEPENDS</item>\n      <item>DEPTH</item>\n      <item>DEREF</item>\n      <item>DERIVED</item>\n      <item>DESC</item>\n      <item>DESCRIBE</item>\n      <item>DESCRIPTOR</item>\n      <item>DESTROY</item>\n      <item>DESTRUCTOR</item>\n      <item>DETACH</item>\n      <item>DETERMINISTIC</item>\n      <item>DIAGNOSTICS</item>\n      <item>DICTIONARY</item>\n      <item>DISABLE</item>\n      <item>DISCARD</item>\n      <item>DISCONNECT</item>\n      <item>DISPATCH</item>\n      <item>DISTINCT</item>\n      <item>DLNEWCOPY</item>\n      <item>DLPREVIOUSCOPY</item>\n      <item>DLURLCOMPLETE</item>\n      <item>DLURLCOMPLETEONLY</item>\n      <item>DLURLCOMPLETEWRITE</item>\n      <item>DLURLPATH</item>\n      <item>DLURLPATHONLY</item>\n      <item>DLURLPATHWRITE</item>\n      <item>DLURLSCHEME</item>\n      <item>DLURLSERVER</item>\n      <item>DLVALUE</item>\n      <item>DO</item>\n      <item>DOCUMENT</item>\n      <item>DOMAIN</item>\n      <item>DROP</item>\n      <item>DYNAMIC</item>\n      <item>DYNAMIC_FUNCTION</item>\n      <item>DYNAMIC_FUNCTION_CODE</item>\n      <item>EACH</item>\n      <item>ELEMENT</item>\n      <item>EMPTY</item>\n      <item>ENABLE</item>\n      <item>ENCODING</item>\n      <item>ENCRYPTED</item>\n      <item>END-EXEC</item>\n      <item>END_FRAME</item>\n      <item>END_PARTITION</item>\n      <item>ENFORCED</item>\n      <item>ENUM</item>\n      <item>EQUALS</item>\n      <item>ESCAPE</item>\n      <item>EVENT</item>\n      <item>EXCEPT</item>\n      <item>EXCLUDE</item>\n      <item>EXCLUDING</item>\n      <item>EXCLUSIVE</item>\n      <item>EXEC</item>\n      <item>EXECUTE</item>\n      <item>EXISTS</item>\n      <item>EXPLAIN</item>\n      <item>EXPRESSION</item>\n      <item>EXTENSION</item>\n      <item>EXTERNAL</item>\n      <item>FALSE</item>\n      <item>FETCH</item>\n      <item>FILE</item>\n      <item>FILTER</item>\n      <item>FINAL</item>\n      <item>FIRST</item>\n      <item>FIRST_VALUE</item>\n      <item>FLAG</item>\n      <item>FLOAT</item>\n      <item>FOLLOWING</item>\n      <item>FORCE</item>\n      <item>FOREIGN</item>\n      <item>FORTRAN</item>\n      <item>FORWARD</item>\n      <item>FOUND</item>\n      <item>FRAME_ROW</item>\n      <item>FREE</item>\n      <item>FREEZE</item>\n      <item>FROM</item>\n      <item>FS</item>\n      <item>FULL</item>\n      <item>FUNCTION</item>\n      <item>FUNCTIONS</item>\n      <item>FUSION</item>\n      <item>G</item>\n      <item>GENERAL</item>\n      <item>GENERATED</item>\n      <item>GET</item>\n      <item>GLOBAL</item>\n      <item>GO</item>\n      <item>GOTO</item>\n      <item>GRANT</item>\n      <item>GRANTED</item>\n      <item>GREATEST</item>\n      <item>GROUP</item>\n      <item>GROUPING</item>\n      <item>GROUPS</item>\n      <item>HANDLER</item>\n      <item>HAVING</item>\n      <item>HEADER</item>\n      <item>HEX</item>\n      <item>HIERARCHY</item>\n      <item>HOLD</item>\n      <item>HOUR</item>\n      <item>ID</item>\n      <item>IDENTITY</item>\n      <item>IGNORE</item>\n      <item>ILIKE</item>\n      <item>IMMEDIATE</item>\n      <item>IMMEDIATELY</item>\n      <item>IMMUTABLE</item>\n      <item>IMPLEMENTATION</item>\n      <item>IMPLICIT</item>\n      <item>IMPORT</item>\n      <item>INCLUDING</item>\n      <item>INCREMENT</item>\n      <item>INDENT</item>\n      <item>INDEX</item>\n      <item>INDEXES</item>\n      <item>INDICATOR</item>\n      <item>INHERIT</item>\n      <item>INHERITS</item>\n      <item>INITIALLY</item>\n      <item>INLINE</item>\n      <item>INNER</item>\n      <item>INOUT</item>\n      <item>INPUT</item>\n      <item>INSENSITIVE</item>\n      <item>INSERT</item>\n      <item>INSTANCE</item>\n      <item>INSTANTIABLE</item>\n      <item>INSTEAD</item>\n      <item>INTEGRITY</item>\n      <item>INTERSECT</item>\n      <item>INTERSECTION</item>\n      <item>INTO</item>\n      <item>INVOKER</item>\n      <item>ISNULL</item>\n      <item>ISOLATION</item>\n      <item>JOIN</item>\n      <item>K</item>\n      <item>KEY</item>\n      <item>KEY_MEMBER</item>\n      <item>KEY_TYPE</item>\n      <item>LABEL</item>\n      <item>LAG</item>\n      <item>LANGUAGE</item>\n      <item>LARGE</item>\n      <item>LAST</item>\n      <item>LAST_VALUE</item>\n      <item>LATERAL</item>\n      <item>LEAD</item>\n      <item>LEADING</item>\n      <item>LEAKPROOF</item>\n      <item>LEAST</item>\n      <item>LEFT</item>\n      <item>LEVEL</item>\n      <item>LIBRARY</item>\n      <item>LIKE_REGEX</item>\n      <item>LIMIT</item>\n      <item>LINK</item>\n      <item>LISTEN</item>\n      <item>LOAD</item>\n      <item>LOCAL</item>\n      <item>LOCALTIME</item>\n      <item>LOCALTIMESTAMP</item>\n      <item>LOCATION</item>\n      <item>LOCATOR</item>\n      <item>LOCK</item>\n      <item>LOCKED</item>\n      <item>LOGGED</item>\n      <item>M</item>\n      <item>MAP</item>\n      <item>MAPPING</item>\n      <item>MATCH</item>\n      <item>MATCHED</item>\n      <item>MATERIALIZED</item>\n      <item>MAXVALUE</item>\n      <item>MAX_CARDINALITY</item>\n      <item>MEMBER</item>\n      <item>MERGE</item>\n      <item>MESSAGE_LENGTH</item>\n      <item>MESSAGE_OCTET_LENGTH</item>\n      <item>MESSAGE_TEXT</item>\n      <item>METHOD</item>\n      <item>MINUTE</item>\n      <item>MINVALUE</item>\n      <item>MODE</item>\n      <item>MODIFIES</item>\n      <item>MODULE</item>\n      <item>MONTH</item>\n      <item>MORE</item>\n      <item>MOVE</item>\n      <item>MULTISET</item>\n      <item>MUMPS</item>\n      <item>NAME</item>\n      <item>NAMES</item>\n      <item>NAMESPACE</item>\n      <item>NATIONAL</item>\n      <item>NATURAL</item>\n      <item>NCHAR</item>\n      <item>NCLOB</item>\n      <item>NESTING</item>\n      <item>NEW</item>\n      <item>NEXT</item>\n      <item>NFC</item>\n      <item>NFD</item>\n      <item>NFKC</item>\n      <item>NFKD</item>\n      <item>NIL</item>\n      <item>NO</item>\n      <item>NONE</item>\n      <item>NORMALIZE</item>\n      <item>NORMALIZED</item>\n      <item>NOTHING</item>\n      <item>NOTIFY</item>\n      <item>NOTNULL</item>\n      <item>NOWAIT</item>\n      <item>NTH_VALUE</item>\n      <item>NTILE</item>\n      <item>NULL</item>\n      <item>NULLABLE</item>\n      <item>NULLS</item>\n      <item>NUMBER</item>\n      <item>OBJECT</item>\n      <item>OCCURRENCES_REGEX</item>\n      <item>OCTETS</item>\n      <item>OF</item>\n      <item>OFF</item>\n      <item>OFFSET</item>\n      <item>OIDS</item>\n      <item>OLD</item>\n      <item>ON</item>\n      <item>ONLY</item>\n      <item>OPEN</item>\n      <item>OPERATOR</item>\n      <item>OPTION</item>\n      <item>OPTIONS</item>\n      <item>ORDER</item>\n      <item>ORDERING</item>\n      <item>ORDINALITY</item>\n      <item>OTHERS</item>\n      <item>OUT</item>\n      <item>OUTER</item>\n      <item>OUTPUT</item>\n      <item>OVER</item>\n      <item>OVERLAPS</item>\n      <item>OVERRIDING</item>\n      <item>OWNED</item>\n      <item>OWNER</item>\n      <item>P</item>\n      <item>PAD</item>\n      <item>PARALLEL</item>\n      <item>PARAMETER</item>\n      <item>PARAMETER_MODE</item>\n      <item>PARAMETER_NAME</item>\n      <item>PARAMETER_ORDINAL_POSITION</item>\n      <item>PARAMETER_SPECIFIC_CATALOG</item>\n      <item>PARAMETER_SPECIFIC_NAME</item>\n      <item>PARAMETER_SPECIFIC_SCHEMA</item>\n      <item>PARSER</item>\n      <item>PARTIAL</item>\n      <item>PARTITION</item>\n      <item>PASCAL</item>\n      <item>PASSING</item>\n      <item>PASSTHROUGH</item>\n      <item>PASSWORD</item>\n      <item>PERCENT</item>\n      <item>PERCENTILE_CONT</item>\n      <item>PERCENTILE_DISC</item>\n      <item>PERCENT_RANK</item>\n      <item>PERIOD</item>\n      <item>PERMISSION</item>\n      <item>PLACING</item>\n      <item>PLANS</item>\n      <item>PLI</item>\n      <item>POLICY</item>\n      <item>PORTION</item>\n      <item>POSITION_REGEX</item>\n      <item>PRECEDES</item>\n      <item>PRECEDING</item>\n      <item>PRECISION</item>\n      <item>PREPARE</item>\n      <item>PREPARED</item>\n      <item>PRESERVE</item>\n      <item>PRIMARY</item>\n      <item>PRIOR</item>\n      <item>PRIVILEGES</item>\n      <item>PROCEDURAL</item>\n      <item>PROCEDURE</item>\n      <item>PROGRAM</item>\n      <item>PUBLIC</item>\n      <item>RANGE</item>\n      <item>PUBLICATION</item>\n      <item>QUOTE</item>\n      <item>RANGE</item>\n      <item>RANK</item>\n      <item>READ</item>\n      <item>READS</item>\n      <item>REASSIGN</item>\n      <item>RECHECK</item>\n      <item>RECOVERY</item>\n      <item>RECURSIVE</item>\n      <item>REF</item>\n      <item>REFERENCES</item>\n      <item>REFERENCING</item>\n      <item>REFRESH</item>\n      <item>REGR_AVGX</item>\n      <item>REGR_AVGY</item>\n      <item>REGR_COUNT</item>\n      <item>REGR_INTERCEPT</item>\n      <item>REGR_R2</item>\n      <item>REGR_SLOPE</item>\n      <item>REGR_SXX</item>\n      <item>REGR_SXY</item>\n      <item>REGR_SYY</item>\n      <item>REINDEX</item>\n      <item>RELATIVE</item>\n      <item>RELEASE</item>\n      <item>RENAME</item>\n      <item>REPEATABLE</item>\n      <item>REPLICA</item>\n      <item>REQUIRING</item>\n      <item>RESET</item>\n      <item>RESPECT</item>\n      <item>RESTART</item>\n      <item>RESTORE</item>\n      <item>RESTRICT</item>\n      <item>RESULT</item>\n      <item>RETURNED_CARDINALITY</item>\n      <item>RETURNED_LENGTH</item>\n      <item>RETURNED_OCTET_LENGTH</item>\n      <item>RETURNED_SQLSTATE</item>\n      <item>RETURNING</item>\n      <item>RETURNS</item>\n      <item>REVOKE</item>\n      <item>RIGHT</item>\n      <item>ROLE</item>\n      <item>ROLLBACK</item>\n      <item>ROLLUP</item>\n      <item>ROUTINE</item>\n      <item>ROUTINE_CATALOG</item>\n      <item>ROUTINE_NAME</item>\n      <item>ROUTINE_SCHEMA</item>\n      <item>ROW</item>\n      <item>ROWS</item>\n      <item>ROW_COUNT</item>\n      <item>ROW_NUMBER</item>\n      <item>RULE</item>\n      <item>SAVEPOINT</item>\n      <item>SCALE</item>\n      <item>SCHEMA</item>\n      <item>SCHEMAS</item>\n      <item>SCHEMA_NAME</item>\n      <item>SCOPE</item>\n      <item>SCOPE_CATALOG</item>\n      <item>SCOPE_NAME</item>\n      <item>SCOPE_SCHEMA</item>\n      <item>SCROLL</item>\n      <item>SEARCH</item>\n      <item>SECOND</item>\n      <item>SECTION</item>\n      <item>SECURITY</item>\n      <item>SELECT</item>\n      <item>SELECTIVE</item>\n      <item>SELF</item>\n      <item>SENSITIVE</item>\n      <item>SEQUENCE</item>\n      <item>SEQUENCES</item>\n      <item>SERIALIZABLE</item>\n      <item>SERVER</item>\n      <item>SERVER_NAME</item>\n      <item>SESSION</item>\n      <item>SET</item>\n      <item>SETOF</item>\n      <item>SETS</item>\n      <item>SHARE</item>\n      <item>SHOW</item>\n      <item>SIMILAR</item>\n      <item>SIMPLE</item>\n      <item>SIZE</item>\n      <item>SKIP</item>\n      <item>SNAPSHOT</item>\n      <item>SOME</item>\n      <item>SOURCE</item>\n      <item>SPACE</item>\n      <item>SPECIFIC</item>\n      <item>SPECIFICTYPE</item>\n      <item>SPECIFIC_NAME</item>\n      <item>SQL</item>\n      <item>SQLCODE</item>\n      <item>SQLERROR</item>\n      <item>SQLEXCEPTION</item>\n      <item>SQLSTATE</item>\n      <item>SQLWARNING</item>\n      <item>STABLE</item>\n      <item>STANDALONE</item>\n      <item>START</item>\n      <item>STATE</item>\n      <item>STATEMENT</item>\n      <item>STATIC</item>\n      <item>STATISTICS</item>\n      <item>STDDEV_POP</item>\n      <item>STDDEV_SAMP</item>\n      <item>STDIN</item>\n      <item>STDOUT</item>\n      <item>STORAGE</item>\n      <item>STRICT</item>\n      <item>STRIP</item>\n      <item>STRUCTURE</item>\n      <item>STYLE</item>\n      <item>SUBCLASS_ORIGIN</item>\n      <item>SUBMULTISET</item>\n      <item>SUBSCRIPTION</item>\n      <item>SUBSTRING_REGEX</item>\n      <item>SUCCEEDS</item>\n      <item>SYMMETRIC</item>\n      <item>SYSID</item>\n      <item>SYSTEM</item>\n      <item>SYSTEM_TIME</item>\n      <item>SYSTEM_USER</item>\n      <item>T</item>\n      <item>TABLE</item>\n      <item>TABLES</item>\n      <item>TABLESAMPLE</item>\n      <item>TABLESPACE</item>\n      <item>TABLE_NAME</item>\n      <item>TEMP</item>\n      <item>TEMPLATE</item>\n      <item>TEMPORARY</item>\n      <item>TIES</item>\n      <item>TIMEZONE_HOUR</item>\n      <item>TIMEZONE_MINUTE</item>\n      <item>TO</item>\n      <item>TOKEN</item>\n      <item>TOP_LEVEL_COUNT</item>\n      <item>TRAILING</item>\n      <item>TRANSACTION</item>\n      <item>TRANSACTIONS_COMMITTED</item>\n      <item>TRANSACTIONS_ROLLED_BACK</item>\n      <item>TRANSACTION_ACTIVE</item>\n      <item>TRANSFORM</item>\n      <item>TRANSFORMS</item>\n      <item>TRANSLATE_REGEX</item>\n      <item>TRANSLATION</item>\n      <item>TREAT</item>\n      <item>TRIGGER</item>\n      <item>TRIGGER_CATALOG</item>\n      <item>TRIGGER_NAME</item>\n      <item>TRIGGER_SCHEMA</item>\n      <item>TRIM_ARRAY</item>\n      <item>TRUE</item>\n      <item>TRUNCATE</item>\n      <item>TRUSTED</item>\n      <item>TYPE</item>\n      <item>TYPES</item>\n      <item>UESCAPE</item>\n      <item>UNBOUNDED</item>\n      <item>UNCOMMITTED</item>\n      <item>UNDER</item>\n      <item>UNENCRYPTED</item>\n      <item>UNION</item>\n      <item>UNIQUE</item>\n      <item>UNKNOWN</item>\n      <item>UNLINK</item>\n      <item>UNLISTEN</item>\n      <item>UNLOGGED</item>\n      <item>UNNAMED</item>\n      <item>UNNEST</item>\n      <item>UNTIL</item>\n      <item>UNTYPED</item>\n      <item>UPDATE</item>\n      <item>URI</item>\n      <item>USAGE</item>\n      <item>USER</item>\n      <item>USER_DEFINED_TYPE_CATALOG</item>\n      <item>USER_DEFINED_TYPE_CODE</item>\n      <item>USER_DEFINED_TYPE_NAME</item>\n      <item>USER_DEFINED_TYPE_SCHEMA</item>\n      <item>USING</item>\n      <item>VACUUM</item>\n      <item>VALID</item>\n      <item>VALIDATE</item>\n      <item>VALIDATOR</item>\n      <item>VALUE</item>\n      <item>VALUES</item>\n      <item>VALUE_OF</item>\n      <item>VARBINARY</item>\n      <item>VARIADIC</item>\n      <item>VARYING</item>\n      <item>VAR_POP</item>\n      <item>VAR_SAMP</item>\n      <item>VERBOSE</item>\n      <item>VERSIONING</item>\n      <item>VIEW</item>\n      <item>VIEWS</item>\n      <item>VOLATILE</item>\n      <item>WHENEVER</item>\n      <item>WHERE</item>\n      <item>WHITESPACE</item>\n      <item>WINDOW</item>\n      <item>WITH</item>\n      <item>WITHIN</item>\n      <item>WITHOUT</item>\n      <item>WORK</item>\n      <item>WRAPPER</item>\n      <item>WRITE</item>\n      <item>XMLAGG</item>\n      <item>XMLATTRIBUTES</item>\n      <item>XMLBINARY</item>\n      <item>XMLCAST</item>\n      <item>XMLCOMMENT</item>\n      <item>XMLCONCAT</item>\n      <item>XMLDECLARATION</item>\n      <item>XMLDOCUMENT</item>\n      <item>XMLELEMENT</item>\n      <item>XMLEXISTS</item>\n      <item>XMLFOREST</item>\n      <item>XMLITERATE</item>\n      <item>XMLNAMESPACES</item>\n      <item>XMLPARSE</item>\n      <item>XMLPI</item>\n      <item>XMLQUERY</item>\n      <item>XMLROOT</item>\n      <item>XMLSCHEMA</item>\n      <item>XMLSERIALIZE</item>\n      <item>XMLTABLE</item>\n      <item>XMLTEXT</item>\n      <item>XMLVALIDATE</item>\n      <item>YEAR</item>\n      <item>YES</item>\n      <item>ZONE</item>\n    </list>\n    <list name=\"functions\">\n      <!-- math -->\n      <item>ABS</item>\n      <item>CBRT</item>\n      <item>CEIL</item>\n      <item>CEILING</item>\n      <item>DEGREES</item>\n      <item>EXP</item>\n      <item>FLOOR</item>\n      <item>LN</item>\n      <item>LOG</item>\n      <item>MOD</item>\n      <item>PI</item>\n      <item>POW</item>\n      <item>POWER</item>\n      <item>RADIANS</item>\n      <item>RANDOM</item>\n      <item>ROUND</item>\n      <item>SETSEED</item>\n      <item>SIGN</item>\n      <item>SQRT</item>\n      <item>TRUNC</item>\n      <item>WIDTH_BUCKET</item>\n      <!-- trig -->\n      <item>ACOS</item>\n      <item>ASIN</item>\n      <item>ATAN</item>\n      <item>ATAN2</item>\n      <item>COS</item>\n      <item>COT</item>\n      <item>SIN</item>\n      <item>TAN</item>\n      <!-- string -->\n      <item>BIT_LENGTH</item>\n      <item>CHAR_LENGTH</item>\n      <item>CHARACTER_LENGTH</item>\n      <item>CONVERT</item>\n      <item>GET_BYTE</item>\n      <item>GET_BIT</item>\n      <item>LOWER</item>\n      <item>OCTET_LENGTH</item>\n      <item>OVERLAY</item>\n      <item>POSITION</item>\n      <item>SET_BIT</item>\n      <item>SUBSTRING</item>\n      <item>TRIM</item>\n      <item>UPPER</item>\n      <!-- other string -->\n      <item>ASCII</item>\n      <item>BTRIM</item>\n      <item>CHR</item>\n      <item>DECODE</item>\n      <item>ENCODE</item>\n      <item>INITCAP</item>\n      <item>LENGTH</item>\n      <item>LPAD</item>\n      <item>LTRIM</item>\n      <item>MD5</item>\n      <item>PG_CLIENT_ENCODING</item>\n      <item>QUOTE_IDENT</item>\n      <item>QUOTE_LITERAL</item>\n      <item>REGEXP_REPLACE</item>\n      <item>REPEAT</item>\n      <item>REPLACE</item>\n      <item>RPAD</item>\n      <item>RTRIM</item>\n      <item>SPLIT_PART</item>\n      <item>STRPOS</item>\n      <item>SUBSTR</item>\n      <item>TO_ASCII</item>\n      <item>TO_HEX</item>\n      <item>TRANSLATE</item>\n      <!-- data type formatting -->\n      <item>TO_CHAR</item>\n      <item>TO_DATE</item>\n      <item>TO_TIMESTAMP</item>\n      <item>TO_NUMBER</item>\n      <!-- date/time -->\n      <item>AGE</item>\n      <item>DATE_PART</item>\n      <item>DATE_TRUNC</item>\n      <item>EXTRACT</item>\n      <item>ISFINITE</item>\n      <item>JUSTIFY_HOURS</item>\n      <item>JUSTIFY_DAYS</item>\n      <item>NOW</item>\n      <item>TIMEOFDAY</item>\n      <item>TIMESTAMP</item>\n      <!-- geometric -->\n      <item>AREA</item>\n      <item>CENTER</item>\n      <item>DIAMETER</item>\n      <item>HEIGHT</item>\n      <item>ISCLOSED</item>\n      <item>ISOPEN</item>\n      <item>NPOINTS</item>\n      <item>PCLOSE</item>\n      <item>POPEN</item>\n      <item>RADIUS</item>\n      <item>WIDTH</item>\n      <!-- geometric type conversion -->\n      <item>BOX</item>\n      <item>CIRCLE</item>\n      <item>LSEG</item>\n      <item>PATH</item>\n      <item>POINT</item>\n      <item>POLYGON</item>\n      <!-- array -->\n      <item>ARRAY_CAT</item>\n      <item>ARRAY_APPEND</item>\n      <item>ARRAY_PREPEND</item>\n      <item>ARRAY_DIMS</item>\n      <item>ARRAY_LOWER</item>\n      <item>ARRAY_UPPER</item>\n      <item>ARRAY_TO_STRING</item>\n      <item>STRING_TO_ARRAY</item>\n      <!-- network address type, TEXT is omitted as it is more commonly a data type -->\n      <item>BROADCAST</item>\n      <item>HOST</item>\n      <item>MASKLEN</item>\n      <item>SET_MASKLEN</item>\n      <item>NETMASK</item>\n      <item>HOSTMASK</item>\n      <item>NETWORK</item>\n      <item>TEXT</item>\n      <item>ABBREV</item>\n      <item>FAMILY</item>\n      <!-- sequence manipulation -->\n      <item>NEXTVAL</item>\n      <item>CURRVAL</item>\n      <item>LASTVAL</item>\n      <item>SETVAL</item>\n      <!-- conditional expressions -->\n      <item>COALESCE</item>\n      <item>NULLIF</item>\n      <!-- aggregate -->\n      <item>AVG</item>\n      <item>BIT_AND</item>\n      <item>BIT_OR</item>\n      <item>BOOL_AND</item>\n      <item>BOOL_OR</item>\n      <item>COUNT</item>\n      <item>EVERY</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>STDDEV</item>\n      <item>SUM</item>\n      <item>VARIANCE</item>\n      <!-- series generating -->\n      <item>GENERATE_SERIES</item>\n      <!-- system information -->\n      <item>CURRENT_DATABASE</item>\n      <item>CURRENT_SCHEMA</item>\n      <item>CURRENT_SCHEMAS</item>\n      <item>CURRENT_USER</item>\n      <item>INET_CLIENT_ADDR</item>\n      <item>INET_CLIENT_PORT</item>\n      <item>INET_SERVER_ADDR</item>\n      <item>INET_SERVER_PORT</item>\n      <item>SESSION_USER</item>\n      <item>PG_POSTMASTER_START_TIME</item>\n      <item>VERSION</item>\n      <!-- access privilege inquiry  -->\n      <item>HAS_TABLE_PRIVILEGE</item>\n      <item>HAS_DATABASE_PRIVILEGE</item>\n      <item>HAS_FUNCTION_PRIVILEGE</item>\n      <item>HAS_LANGUAGE_PRIVILEGE</item>\n      <item>PG_HAS_ROLE</item>\n      <item>HAS_SCHEMA_PRIVILEGE</item>\n      <item>HAS_TABLESPACE_PRIVILEGE</item>\n      <!--  schema visibility inquiry -->\n      <item>PG_TABLE_IS_VISIBLE</item>\n      <item>PG_TYPE_IS_VISIBLE</item>\n      <item>PG_FUNCTION_IS_VISIBLE</item>\n      <item>PG_OPERATOR_IS_VISIBLE</item>\n      <item>PG_OPCLASS_IS_VISIBLE</item>\n      <item>PG_CONVERSION_IS_VISIBLE</item>\n      <!-- system catalog information -->\n      <item>FORMAT_TYPE</item>\n      <item>PG_GET_CONSTRAINTDEF</item>\n      <item>PG_GET_EXPR</item>\n      <item>PG_GET_INDEXDEF</item>\n      <item>PG_GET_RULEDEF</item>\n      <item>PG_GET_SERIAL_SEQUENCE</item>\n      <item>PG_TABLESPACE_DATABASES</item>\n      <item>PG_GET_TRIGGERDEF</item>\n      <item>PG_GET_USERBYID</item>\n      <item>PG_GET_VIEWDEF</item>\n      <!-- comment information -->\n      <item>OBJ_DESCRIPTION</item>\n      <item>COL_DESCRIPTION</item>\n      <!-- configuration settings -->\n      <item>CURRENT_SETTING</item>\n      <item>SET_CONFIG</item>\n      <!-- server signalling -->\n      <item>PG_CANCEL_BACKEND</item>\n      <item>PG_RELOAD_CONF</item>\n      <item>PG_ROTATE_LOGFILE</item>\n      <!-- backup control -->\n      <item>PG_START_BACKUP</item>\n      <item>PG_STOP_BACKUP</item>\n      <!-- database object Sizes-->\n      <item>PG_COLUMN_SIZE</item>\n      <item>PG_TABLESPACE_SIZE</item>\n      <item>PG_DATABASE_SIZE</item>\n      <item>PG_RELATION_SIZE</item>\n      <item>PG_TOTAL_RELATION_SIZE</item>\n      <item>PG_SIZE_PRETTY</item>\n      <!-- generic file access -->\n      <item>PG_LS_DIR</item>\n      <item>PG_READ_FILE</item>\n      <item>PG_STAT_FILE</item>\n    </list>\n    <list name=\"types\">\n      <!-- https://www.postgresql.org/docs/current/static/datatype.html#DATATYPE-TABLE -->\n      <item>BIGINT</item>\n      <item>BIGSERIAL</item>\n      <item>BIT</item>\n      <item>BOOL</item>\n      <item>BOOLEAN</item>\n      <item>BOX</item>\n      <item>BYTEA</item>\n      <item>CHAR</item>\n      <item>CHARACTER</item>\n      <item>CIDR</item>\n      <item>CIRCLE</item>\n      <item>DATE</item>\n      <item>DECIMAL</item>\n      <item>DOUBLE</item>\n      <item>FLOAT4</item>\n      <item>FLOAT8</item>\n      <item>INET</item>\n      <item>INT</item>\n      <item>INT2</item>\n      <item>INT4</item>\n      <item>INT8</item>\n      <item>INTEGER</item>\n      <item>INTERVAL</item>\n      <item>JSON</item>\n      <item>JSONB</item>\n      <item>LINE</item>\n      <item>LSEG</item>\n      <item>MACADDR</item>\n      <item>MACADDR8</item>\n      <item>MONEY</item>\n      <item>NUMERIC</item>\n      <item>PATH</item>\n      <item>PG_LSN</item>\n      <item>POINT</item>\n      <item>POLYGON</item>\n      <item>REAL</item>\n      <item>SERIAL</item>\n      <item>SERIAL2</item>\n      <item>SERIAL4</item>\n      <item>SERIAL8</item>\n      <item>SMALLINT</item>\n      <item>SMALLSERIAL</item>\n      <item>TEXT</item>\n      <item>TIME</item>\n      <item>TIMESTAMP</item>\n      <item>TIMESTAMPTZ</item>\n      <item>TIMETZ</item>\n      <item>TSQUERY</item>\n      <item>TSVECTOR</item>\n      <item>TXID_SNAPSHOT</item>\n      <item>UUID</item>\n      <item>VARBIT</item>\n      <item>VARCHAR</item>\n      <item>XML</item>\n    </list>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\n        <!-- comments before operators -->\n        <DetectChar attribute=\"Comment\" context=\"SingleLineComment\" char=\"#\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"SingleLineComment\" char=\"-\" char1=\"-\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"MultiLineComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"SingleLineComment\" String=\"rem\\b\" insensitive=\"true\" column=\"0\"/>\n\n        <!-- HACK: don't jump into MultiLineString for CREATE FUNCTION $funcName$...$funcName$ -->\n        <RegExpr String=\"create\\s+(or\\s+replace\\s+)?function\" insensitive=\"true\" context=\"CreateFunction\" attribute=\"Keyword\"/>\n\n        <RegExpr String=\"do\\s+\\$([^\\$\\n\\r]*)\\$\" insensitive=\"true\" context=\"FunctionBody\" attribute=\"Keyword\"/>\n        <LineContinue attribute=\"Symbol\" context=\"#stay\" char=\"/\" column=\"0\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Operator Keyword\" context=\"#stay\" String=\"operators\"/>\n        <keyword attribute=\"ControlFlow\" context=\"#stay\" String=\"controlFlow\"/>\n        <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"%(bulk_(exceptions|rowcount)|(not)?found|isopen|rowcount|(row)?type)\\b\" insensitive=\"true\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"'\"/>\n        <DetectChar attribute=\"Comment\" context=\"Identifier\" char=\"&quot;\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":&#38;\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"@@?[^@ \\t\\r\\n]\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"MultiLineString\" String=\"\\$([^\\$\\n\\r]*)\\$\" dynamic=\"true\"/>\n        <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"+-*/=%^!&lt;&gt;&amp;|@~#\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\":\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\".\" char1=\".\"/>\n        <!-- geometric operators -->\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"?\" char1=\"#\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"?\" char1=\"-\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"?\" char1=\"|\"/>\n      </context>\n      <context name=\"CreateFunction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Function\" context=\"FunctionBody\" String=\"\\$([^\\$\\n\\r]*)\\$\" dynamic=\"true\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n      <context name=\"FunctionBody\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <StringDetect attribute=\"Function\" context=\"#pop#pop\" String=\"$%1$\" dynamic=\"true\"/>\n        <IncludeRules context=\"Normal\"/>\n      </context>\n      <context name=\"MultiLineString\" attribute=\"String\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <StringDetect attribute=\"Operator\" context=\"#pop\" String=\"$%1$\" dynamic=\"true\"/>\n      </context>\n      <context name=\"String\" attribute=\"String\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"String\" context=\"#pop\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"&#38;\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <context name=\"SingleLineComment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <context name=\"MultiLineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <LineContinue attribute=\"Comment\" context=\"#pop\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n      <context name=\"Identifier\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Identifier\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"Preprocessor\" attribute=\"Preprocessor\" lineEndContext=\"#pop\"/>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"           defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"ControlFlow\"       defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\"          defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Operator Keyword\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Function\"          defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"         defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"           defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"             defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"String\"            defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"       defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\"           defStyleNum=\"dsComment\"/>\n      <itemData name=\"Identifier\"        defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"Symbol\"            defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\"      defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"0\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/sql.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Oracle10g SQL and PL/SQL syntax - ANSI SQL 2003 superset -->\n<!-- This file is maintained by Anders Lund <anders@alweb.dk> since 2005-11-06\n     v3 fix comments by Gene Thomas <gene@genethomas.com>\n  -->\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n<language name=\"SQL\" version=\"5\" kateversion=\"5.0\" section=\"Database\" extensions=\"*.sql;*.SQL;*.ddl;*.DDL\" mimetype=\"text/x-sql\" casesensitive=\"0\" author=\"Yury Lebedev (yurylebedev@mail.ru)\" license=\"LGPL\">\n  <highlighting>\n    <list name=\"controlFlow\">\n      <item>BEGIN</item>\n      <item>CASE</item>\n      <item>ELSE</item>\n      <item>ELSIF</item>\n      <item>END</item>\n      <item>FOR</item>\n      <item>IF</item>\n      <item>LOOP</item>\n      <item>RETURN</item>\n      <item>THEN</item>\n      <item>WHEN</item>\n      <item>WHILE</item>\n    </list>\n    <list name=\"operators\">\n      <item>AND</item>\n      <item>BETWEEN</item>\n      <item>IN</item>\n      <item>IS</item>\n      <item>LIKE</item>\n      <item>NOT</item>\n      <item>OR</item>\n    </list>\n    <list name=\"keywords\">\n      <item>ACCESS</item>\n      <item>ACCOUNT</item>\n      <item>ADD</item>\n      <item>ADMIN</item>\n      <item>ADMINISTER</item>\n      <item>ADVISE</item>\n      <item>AFTER</item>\n      <item>AGENT</item>\n      <item>ALL</item>\n      <item>ALLOCATE</item>\n      <item>ALL_ROWS</item>\n      <item>ALTER</item>\n      <item>ANALYZE</item>\n      <item>ANCILLARY</item>\n      <item>ANY</item>\n      <item>ARCHIVE</item>\n      <item>ARCHIVELOG</item>\n      <item>AS</item>\n      <item>ASC</item>\n      <item>ASSERTION</item>\n      <item>ASSOCIATE</item>\n      <item>AT</item>\n      <item>ATTRIBUTE</item>\n      <item>ATTRIBUTES</item>\n      <item>AUDIT</item>\n      <item>AUTHENTICATED</item>\n      <item>AUTHID</item>\n      <item>AUTHORIZATION</item>\n      <item>AUTOALLOCATE</item>\n      <item>AUTOEXTEND</item>\n      <item>AUTOMATIC</item>\n      <item>BACKUP</item>\n      <item>BECOME</item>\n      <item>BEFORE</item>\n      <item>BEHALF</item>\n      <item>BINDING</item>\n      <item>BITMAP</item>\n      <item>BLOCK</item>\n      <item>BLOCK_RANGE</item>\n      <item>BODY</item>\n      <item>BOTH</item>\n      <item>BOUND</item>\n      <item>BREAK</item>\n      <item>BROADCAST</item>\n      <item>BTITLE</item>\n      <item>BUFFER_POOL</item>\n      <item>BUILD</item>\n      <item>BULK</item>\n      <item>BY</item>\n      <item>CACHE</item>\n      <item>CACHE_INSTANCES</item>\n      <item>CALL</item>\n      <item>CANCEL</item>\n      <item>CASCADE</item>\n      <item>CATEGORY</item>\n      <item>CHAINED</item>\n      <item>CHANGE</item>\n      <item>CHECK</item>\n      <item>CHECKPOINT</item>\n      <item>CHILD</item>\n      <item>CHOOSE</item>\n      <item>CHUNK</item>\n      <item>CLASS</item>\n      <item>CLEAR</item>\n      <item>CLONE</item>\n      <item>CLOSE</item>\n      <item>CLOSE_CACHED_OPEN_CURSORS</item>\n      <item>CLUSTER</item>\n      <item>COLUMN</item>\n      <item>COLUMNS</item>\n      <item>COLUMN_VALUE</item>\n      <item>COMMENT</item>\n      <item>COMMIT</item>\n      <item>COMMITTED</item>\n      <item>COMPATIBILITY</item>\n      <item>COMPILE</item>\n      <item>COMPLETE</item>\n      <item>COMPOSITE_LIMIT</item>\n      <item>COMPRESS</item>\n      <item>COMPUTE</item>\n      <item>CONNECT</item>\n      <item>CONNECT_TIME</item>\n      <item>CONSIDER</item>\n      <item>CONSISTENT</item>\n      <item>CONSTANT</item>\n      <item>CONSTRAINT</item>\n      <item>CONSTRAINTS</item>\n      <item>CONTAINER</item>\n      <item>CONTAINS</item>\n      <item>CONTENTS</item>\n      <item>CONTEXT</item>\n      <item>CONTINUE</item>\n      <item>CONTROLFILE</item>\n      <item>COPY</item>\n      <item>COST</item>\n      <item>CPU_PER_CALL</item>\n      <item>CPU_PER_SESSION</item>\n      <item>CREATE</item>\n      <item>CREATE_STORED_OUTLINES</item>\n      <item>CROSS</item>\n      <item>CUBE</item>\n      <item>CURRENT</item>\n      <item>CURSOR</item>\n      <item>CYCLE</item>\n      <item>DANGLING</item>\n      <item>DATA</item>\n      <item>DATABASE</item>\n      <item>DATAFILE</item>\n      <item>DATAFILES</item>\n      <item>DBA</item>\n      <item>DDL</item>\n      <item>DEALLOCATE</item>\n      <item>DEBUG</item>\n      <item>DECLARE</item>\n      <item>DEFAULT</item>\n      <item>DEFERRABLE</item>\n      <item>DEFERRED</item>\n      <item>DEFINER</item>\n      <item>DEGREE</item>\n      <item>DELETE</item>\n      <item>DEMAND</item>\n      <item>DESC</item>\n      <item>DETERMINES</item>\n      <item>DICTIONARY</item>\n      <item>DIMENSION</item>\n      <item>DIRECTORY</item>\n      <item>DISABLE</item>\n      <item>DISASSOCIATE</item>\n      <item>DISCONNECT</item>\n      <item>DISKGROUP</item>\n      <item>DISMOUNT</item>\n      <item>DISTINCT</item>\n      <item>DISTRIBUTED</item>\n      <item>DOMAIN</item>\n      <item>DROP</item>\n      <item>DYNAMIC</item>\n      <item>EACH</item>\n      <item>EMPTY</item>\n      <item>ENABLE</item>\n      <item>ENFORCE</item>\n      <item>ENTRY</item>\n      <item>ESCAPE</item>\n      <item>ESTIMATE</item>\n      <item>EVENTS</item>\n      <item>EXCEPT</item>\n      <item>EXCEPTION</item>\n      <item>EXCEPTIONS</item>\n      <item>EXCHANGE</item>\n      <item>EXCLUDING</item>\n      <item>EXCLUSIVE</item>\n      <item>EXEC</item>\n      <item>EXECUTE</item>\n      <item>EXISTS</item>\n      <item>EXPIRE</item>\n      <item>EXPLAIN</item>\n      <item>EXPLOSION</item>\n      <item>EXTENDS</item>\n      <item>EXTENT</item>\n      <item>EXTENTS</item>\n      <item>EXTERNALLY</item>\n      <item>FAILED_LOGIN_ATTEMPTS</item>\n      <item>FALSE</item>\n      <item>FAST</item>\n      <item>FILE</item>\n      <item>FILTER</item>\n      <item>FIRST_ROWS</item>\n      <item>FLAGGER</item>\n      <item>FLASHBACK</item>\n      <item>FLUSH</item>\n      <item>FOLLOWING</item>\n      <item>FORCE</item>\n      <item>FOREIGN</item>\n      <item>FREELIST</item>\n      <item>FREELISTS</item>\n      <item>FRESH</item>\n      <item>FROM</item>\n      <item>FULL</item>\n      <item>FUNCTION</item>\n      <item>FUNCTIONS</item>\n      <item>GENERATED</item>\n      <item>GLOBAL</item>\n      <item>GLOBALLY</item>\n      <item>GLOBAL_NAME</item>\n      <item>GRANT</item>\n      <item>GROUP</item>\n      <item>GROUPS</item>\n      <item>HASH</item>\n      <item>HASHKEYS</item>\n      <item>HAVING</item>\n      <item>HEADER</item>\n      <item>HEAP</item>\n      <item>HIERARCHY</item>\n      <item>HOUR</item>\n      <item>ID</item>\n      <item>IDENTIFIED</item>\n      <item>IDENTIFIER</item>\n      <item>IDGENERATORS</item>\n      <item>IDLE_TIME</item>\n      <item>IMMEDIATE</item>\n      <item>INCLUDING</item>\n      <item>INCREMENT</item>\n      <item>INCREMENTAL</item>\n      <item>INDEX</item>\n      <item>INDEXED</item>\n      <item>INDEXES</item>\n      <item>INDEXTYPE</item>\n      <item>INDEXTYPES</item>\n      <item>INDICATOR</item>\n      <item>INITIAL</item>\n      <item>INITIALIZED</item>\n      <item>INITIALLY</item>\n      <item>INITRANS</item>\n      <item>INNER</item>\n      <item>INSERT</item>\n      <item>INSTANCE</item>\n      <item>INSTANCES</item>\n      <item>INSTEAD</item>\n      <item>INTERMEDIATE</item>\n      <item>INTERSECT</item>\n      <item>INTO</item>\n      <item>INVALIDATE</item>\n      <item>ISOLATION</item>\n      <item>ISOLATION_LEVEL</item>\n      <item>JAVA</item>\n      <item>JOIN</item>\n      <item>KEEP</item>\n      <item>KEY</item>\n      <item>KILL</item>\n      <item>LABEL</item>\n      <item>LAYER</item>\n      <item>LEADING</item>\n      <item>LEFT</item>\n      <item>LESS</item>\n      <item>LEVEL</item>\n      <item>LIBRARY</item>\n      <item>LIMIT</item>\n      <item>LINK</item>\n      <item>LIST</item>\n      <item>LOCAL</item>\n      <item>LOCATOR</item>\n      <item>LOCK</item>\n      <item>LOCKED</item>\n      <item>LOGFILE</item>\n      <item>LOGGING</item>\n      <item>LOGICAL_READS_PER_CALL</item>\n      <item>LOGICAL_READS_PER_SESSION</item>\n      <item>LOGOFF</item>\n      <item>LOGON</item>\n      <item>MANAGE</item>\n      <item>MANAGED</item>\n      <item>MANAGEMENT</item>\n      <item>MASTER</item>\n      <item>MATERIALIZED</item>\n      <item>MAXARCHLOGS</item>\n      <item>MAXDATAFILES</item>\n      <item>MAXEXTENTS</item>\n      <item>MAXINSTANCES</item>\n      <item>MAXLOGFILES</item>\n      <item>MAXLOGHISTORY</item>\n      <item>MAXLOGMEMBERS</item>\n      <item>MAXSIZE</item>\n      <item>MAXTRANS</item>\n      <item>MAXVALUE</item>\n      <item>MEMBER</item>\n      <item>MERGE</item>\n      <item>METHOD</item>\n      <item>MINEXTENTS</item>\n      <item>MINIMIZE</item>\n      <item>MINIMUM</item>\n      <item>MINUS</item>\n      <item>MINUTE</item>\n      <item>MINVALUE</item>\n      <item>MODE</item>\n      <item>MODIFY</item>\n      <item>MONITORING</item>\n      <item>MOUNT</item>\n      <item>MOVE</item>\n      <item>MOVEMENT</item>\n      <item>MTS_DISPATCHERS</item>\n      <item>MULTISET</item>\n      <item>NAMED</item>\n      <item>NATURAL</item>\n      <item>NEEDED</item>\n      <item>NESTED</item>\n      <item>NESTED_TABLE_ID</item>\n      <item>NETWORK</item>\n      <item>NEVER</item>\n      <item>NEW</item>\n      <item>NEXT</item>\n      <item>NLS_CALENDAR</item>\n      <item>NLS_CHARACTERSET</item>\n      <item>NLS_COMP</item>\n      <item>NLS_CURRENCY</item>\n      <item>NLS_DATE_FORMAT</item>\n      <item>NLS_DATE_LANGUAGE</item>\n      <item>NLS_ISO_CURRENCY</item>\n      <item>NLS_LANG</item>\n      <item>NLS_LANGUAGE</item>\n      <item>NLS_NUMERIC_CHARACTERS</item>\n      <item>NLS_SORT</item>\n      <item>NLS_SPECIAL_CHARS</item>\n      <item>NLS_TERRITORY</item>\n      <item>NO</item>\n      <item>NOARCHIVELOG</item>\n      <item>NOAUDIT</item>\n      <item>NOCACHE</item>\n      <item>NOCOMPRESS</item>\n      <item>NOCYCLE</item>\n      <item>NOFORCE</item>\n      <item>NOLOGGING</item>\n      <item>NOMAXVALUE</item>\n      <item>NOMINIMIZE</item>\n      <item>NOMINVALUE</item>\n      <item>NOMONITORING</item>\n      <item>NONE</item>\n      <item>NOORDER</item>\n      <item>NOOVERRIDE</item>\n      <item>NOPARALLEL</item>\n      <item>NORELY</item>\n      <item>NORESETLOGS</item>\n      <item>NOREVERSE</item>\n      <item>NORMAL</item>\n      <item>NOSEGMENT</item>\n      <item>NOSORT</item>\n      <item>NOTHING</item>\n      <item>NOVALIDATE</item>\n      <item>NOWAIT</item>\n      <item>NULL</item>\n      <item>NULLS</item>\n      <item>OBJNO</item>\n      <item>OBJNO_REUSE</item>\n      <item>OF</item>\n      <item>OFF</item>\n      <item>OFFLINE</item>\n      <item>OID</item>\n      <item>OIDINDEX</item>\n      <item>OLD</item>\n      <item>ON</item>\n      <item>ONLINE</item>\n      <item>ONLY</item>\n      <item>OPCODE</item>\n      <item>OPEN</item>\n      <item>OPERATOR</item>\n      <item>OPTIMAL</item>\n      <item>OPTIMIZER_GOAL</item>\n      <item>OPTION</item>\n      <item>ORDER</item>\n      <item>ORGANIZATION</item>\n      <item>OUT</item>\n      <item>OUTER</item>\n      <item>OUTLINE</item>\n      <item>OVER</item>\n      <item>OVERFLOW</item>\n      <item>OVERLAPS</item>\n      <item>OWN</item>\n      <item>PACKAGE</item>\n      <item>PACKAGES</item>\n      <item>PARALLEL</item>\n      <item>PARAMETERS</item>\n      <item>PARENT</item>\n      <item>PARTITION</item>\n      <item>PARTITIONS</item>\n      <item>PARTITION_HASH</item>\n      <item>PARTITION_RANGE</item>\n      <item>PASSWORD</item>\n      <item>PASSWORD_GRACE_TIME</item>\n      <item>PASSWORD_LIFE_TIME</item>\n      <item>PASSWORD_LOCK_TIME</item>\n      <item>PASSWORD_REUSE_MAX</item>\n      <item>PASSWORD_REUSE_TIME</item>\n      <item>PASSWORD_VERIFY_FUNCTION</item>\n      <item>PCTFREE</item>\n      <item>PCTINCREASE</item>\n      <item>PCTTHRESHOLD</item>\n      <item>PCTUSED</item>\n      <item>PCTVERSION</item>\n      <item>PERCENT</item>\n      <item>PERMANENT</item>\n      <item>PLAN</item>\n      <item>PLSQL_DEBUG</item>\n      <item>POST_TRANSACTION</item>\n      <item>PREBUILT</item>\n      <item>PRECEDING</item>\n      <item>PREPARE</item>\n      <item>PRESENT</item>\n      <item>PRESERVE</item>\n      <item>PREVIOUS</item>\n      <item>PRIMARY</item>\n      <item>PRIOR</item>\n      <item>PRIVATE</item>\n      <item>PRIVATE_SGA</item>\n      <item>PRIVILEGE</item>\n      <item>PRIVILEGES</item>\n      <item>PROCEDURE</item>\n      <item>PROFILE</item>\n      <item>PUBLIC</item>\n      <item>PURGE</item>\n      <item>QUERY</item>\n      <item>QUEUE</item>\n      <item>QUOTA</item>\n      <item>RANDOM</item>\n      <item>RANGE</item>\n      <item>RBA</item>\n      <item>READ</item>\n      <item>READS</item>\n      <item>REBUILD</item>\n      <item>RECORDS_PER_BLOCK</item>\n      <item>RECOVER</item>\n      <item>RECOVERABLE</item>\n      <item>RECOVERY</item>\n      <item>RECYCLE</item>\n      <item>REDUCED</item>\n      <item>REFERENCES</item>\n      <item>REFERENCING</item>\n      <item>REFRESH</item>\n      <item>RELY</item>\n      <item>RENAME</item>\n      <item>REPLACE</item>\n      <item>RESET</item>\n      <item>RESETLOGS</item>\n      <item>RESIZE</item>\n      <item>RESOLVE</item>\n      <item>RESOLVER</item>\n      <item>RESOURCE</item>\n      <item>RESTRICT</item>\n      <item>RESTRICTED</item>\n      <item>RESUME</item>\n      <item>RETURN</item>\n      <item>RETURNING</item>\n      <item>REUSE</item>\n      <item>REVERSE</item>\n      <item>REVOKE</item>\n      <item>REWRITE</item>\n      <item>RIGHT</item>\n      <item>ROLE</item>\n      <item>ROLES</item>\n      <item>ROLLBACK</item>\n      <item>ROLLUP</item>\n      <item>ROW</item>\n      <item>ROWNUM</item>\n      <item>ROWS</item>\n      <item>RULE</item>\n      <item>SAMPLE</item>\n      <item>SAVEPOINT</item>\n      <item>SCAN</item>\n      <item>SCAN_INSTANCES</item>\n      <item>SCHEMA</item>\n      <item>SCN</item>\n      <item>SCOPE</item>\n      <item>SD_ALL</item>\n      <item>SD_INHIBIT</item>\n      <item>SD_SHOW</item>\n      <item>SEGMENT</item>\n      <item>SEG_BLOCK</item>\n      <item>SEG_FILE</item>\n      <item>SELECT</item>\n      <item>SELECTIVITY</item>\n      <item>SEQUENCE</item>\n      <item>SERIALIZABLE</item>\n      <item>SERVERERROR</item>\n      <item>SESSION</item>\n      <item>SESSIONS_PER_USER</item>\n      <item>SESSION_CACHED_CURSORS</item>\n      <item>SET</item>\n      <item>SHARE</item>\n      <item>SHARED</item>\n      <item>SHARED_POOL</item>\n      <item>SHRINK</item>\n      <item>SHUTDOWN</item>\n      <item>SINGLETASK</item>\n      <item>SIZE</item>\n      <item>SKIP</item>\n      <item>SKIP_UNUSABLE_INDEXES</item>\n      <item>SNAPSHOT</item>\n      <item>SOME</item>\n      <item>SORT</item>\n      <item>SOURCE</item>\n      <item>SPECIFICATION</item>\n      <item>SPLIT</item>\n      <item>SQL_TRACE</item>\n      <item>STANDBY</item>\n      <item>START</item>\n      <item>STARTUP</item>\n      <item>STATEMENT_ID</item>\n      <item>STATIC</item>\n      <item>STATISTICS</item>\n      <item>STOP</item>\n      <item>STORAGE</item>\n      <item>STORE</item>\n      <item>STRUCTURE</item>\n      <item>SUBMULTISET</item>\n      <item>SUBPARTITION</item>\n      <item>SUBPARTITIONS</item>\n      <item>SUCCESSFUL</item>\n      <item>SUMMARY</item>\n      <item>SUPPLEMENTAL</item>\n      <item>SUSPEND</item>\n      <item>SWITCH</item>\n      <item>SYNONYM</item>\n      <item>SYSDBA</item>\n      <item>SYSOPER</item>\n      <item>SYSTEM</item>\n      <item>SYS_OP_BITVEC</item>\n      <item>SYS_OP_ENFORCE_NOT_NULL$</item>\n      <item>SYS_OP_NOEXPAND</item>\n      <item>SYS_OP_NTCIMG$</item>\n      <item>TABLE</item>\n      <item>TABLES</item>\n      <item>TABLESPACE</item>\n      <item>TABLESPACE_NO</item>\n      <item>TABNO</item>\n      <item>TEMPFILE</item>\n      <item>TEMPORARY</item>\n      <item>THAN</item>\n      <item>THE</item>\n      <item>THREAD</item>\n      <item>THROUGH</item>\n      <item>TIMEOUT</item>\n      <item>TIMEZONE_HOUR</item>\n      <item>TIMEZONE_MINUTE</item>\n      <item>TIME_ZONE</item>\n      <item>TO</item>\n      <item>TOPLEVEL</item>\n      <item>TRACE</item>\n      <item>TRACING</item>\n      <item>TRAILING</item>\n      <item>TRANSACTION</item>\n      <item>TRANSITIONAL</item>\n      <item>TRIGGER</item>\n      <item>TRIGGERS</item>\n      <item>TRUE</item>\n      <item>TRUNCATE</item>\n      <item>TYPE</item>\n      <item>TYPES</item>\n      <item>UNARCHIVED</item>\n      <item>UNBOUND</item>\n      <item>UNBOUNDED</item>\n      <item>UNDO</item>\n      <item>UNIFORM</item>\n      <item>UNION</item>\n      <item>UNIQUE</item>\n      <item>UNLIMITED</item>\n      <item>UNLOCK</item>\n      <item>UNRECOVERABLE</item>\n      <item>UNTIL</item>\n      <item>UNUSABLE</item>\n      <item>UNUSED</item>\n      <item>UPDATABLE</item>\n      <item>UPDATE</item>\n      <item>UPD_INDEXES</item>\n      <item>UPPPER</item>\n      <item>USAGE</item>\n      <item>USE</item>\n      <item>USER_DEFINED</item>\n      <item>USE_STORED_OUTLINES</item>\n      <item>USING</item>\n      <item>VALIDATE</item>\n      <item>VALIDATION</item>\n      <item>VALUES</item>\n      <item>VIEW</item>\n      <item>WHENEVER</item>\n      <item>WHERE</item>\n      <item>WITH</item>\n      <item>WITHOUT</item>\n      <item>WORK</item>\n      <item>WRITE</item>\n    </list>\n    <list name=\"functions\">\n      <item>ABS</item>\n      <item>ACOS</item>\n      <item>ADD_MONTHS</item>\n      <item>ASCII</item>\n      <item>ASCIISTR</item>\n      <item>ASIN</item>\n      <item>ATAN</item>\n      <item>ATAN2</item>\n      <item>AVG</item>\n      <item>BFILENAME</item>\n      <item>BIN_TO_NUM</item>\n      <item>BITAND</item>\n      <item>CARDINALITY</item>\n      <item>CAST</item>\n      <item>CEIL</item>\n      <item>CHARTOROWID</item>\n      <item>CHR</item>\n      <item>COALESCE</item>\n      <item>COLLECT</item>\n      <item>COMPOSE</item>\n      <item>CONCAT</item>\n      <item>CONVERT</item>\n      <item>CORR</item>\n      <item>CORR_K</item>\n      <item>CORR_S</item>\n      <item>COS</item>\n      <item>COSH</item>\n      <item>COUNT</item>\n      <item>COVAR_POP</item>\n      <item>COVAR_SAMP</item>\n      <item>CUME_DIST</item>\n      <item>CURRENT_DATE</item>\n      <item>CURRENT_TIMESTAMP</item>\n      <item>CV</item>\n      <item>DBTIMEZONE</item>\n      <item>DECODE</item>\n      <item>DECOMPOSE</item>\n      <item>DENSE_RANK</item>\n      <item>DEPTH</item>\n      <item>DEREF</item>\n      <item>DUMP</item>\n      <item>EMPTY_BLOB</item>\n      <item>EMPTY_CLOB</item>\n      <item>EXISTSNODE</item>\n      <item>EXP</item>\n      <item>EXTRACT</item>\n      <item>EXTRACTVALUE</item>\n      <item>FIRST</item>\n      <item>FIRST_VALUE</item>\n      <item>FLOOR</item>\n      <item>FROM_TZ</item>\n      <item>GREATEST</item>\n      <item>GROUP_ID</item>\n      <item>GROUPING</item>\n      <item>GROUPING_ID</item>\n      <item>HEXTORAW</item>\n      <item>INITCAP</item>\n      <item>INSTR</item>\n      <item>INSTRB</item>\n      <item>LAG</item>\n      <item>LAST</item>\n      <item>LAST_DAY</item>\n      <item>LAST_VALUE</item>\n      <item>LEAD</item>\n      <item>LEAST</item>\n      <item>LENGTH</item>\n      <item>LENGTHB</item>\n      <item>LN</item>\n      <item>LNNVL</item>\n      <item>LOCALTIMESTAMP</item>\n      <item>LOG</item>\n      <item>LOWER</item>\n      <item>LPAD</item>\n      <item>LTRIM</item>\n      <item>MAKE_REF</item>\n      <item>MAX</item>\n      <item>MEDIAN</item>\n      <item>MIN</item>\n      <item>MOD</item>\n      <item>MONTHS_BETWEEN</item>\n      <item>NANVL</item>\n      <item>NCHR</item>\n      <item>NEW_TIME</item>\n      <item>NEXT_DAY</item>\n      <item>NLS_CHARSET_DECL_LEN</item>\n      <item>NLS_CHARSET_ID</item>\n      <item>NLS_CHARSET_NAME</item>\n      <item>NLS_INITCAP</item>\n      <item>NLS_LOWER</item>\n      <item>NLS_UPPER</item>\n      <item>NLSSORT</item>\n      <item>NTILE</item>\n      <item>NULLIF</item>\n      <item>NUMTODSINTERVAL</item>\n      <item>NUMTOYMINTERVAL</item>\n      <item>NVL</item>\n      <item>NVL2</item>\n      <item>ORA_HASH</item>\n      <item>ORA_ROWSCN</item>\n      <item>PERCENT_RANK</item>\n      <item>PERCENTILE_CONT</item>\n      <item>PERCENTILE_DISC</item>\n      <item>POWER</item>\n      <item>POWERMULTISET</item>\n      <item>POWERMULTISET_BY_CARDINALITY</item>\n      <item>PRESENTNNV</item>\n      <item>PRESENTV</item>\n      <item>RANK</item>\n      <item>RATIO_TO_REPORT</item>\n      <item>RAWTOHEX</item>\n      <item>RAWTONHEX</item>\n      <item>REF</item>\n      <item>REFTOHEX</item>\n      <item>REGEXP_INSTR</item>\n      <item>REGEXP_LIKE</item>\n      <item>REGEXP_REPLACE</item>\n      <item>REGEXP_SUBSTR</item>\n      <item>REGR_SLOPE</item>\n      <item>REGR_INTERCEPT</item>\n      <item>REGR_COUNT</item>\n      <item>REGR_R2</item>\n      <item>REGR_AVGX</item>\n      <item>REGR_AVGY</item>\n      <item>REGR_SXX</item>\n      <item>REGR_SYY</item>\n      <item>REGR_SXY</item>\n      <item>REMAINDER</item>\n      <item>ROUND</item>\n      <item>ROW_NUMBER</item>\n      <item>ROWIDTOCHAR</item>\n      <item>ROWIDTONCHAR</item>\n      <item>RPAD</item>\n      <item>RTRIM</item>\n      <item>SCN_TO_TIMESTAMP</item>\n      <item>SESSIONTIMEZONE</item>\n      <item>SIGN</item>\n      <item>SIN</item>\n      <item>SINH</item>\n      <item>SOUNDEX</item>\n      <item>SQRT</item>\n      <item>STATS_BINOMIAL_TEST</item>\n      <item>STATS_CROSSTAB</item>\n      <item>STATS_F_TEST</item>\n      <item>STATS_KS_TEST</item>\n      <item>STATS_MODE</item>\n      <item>STATS_MW_TEST</item>\n      <item>STATS_ONE_WAY_ANOVA</item>\n      <item>STATS_T_TEST_ONE</item>\n      <item>STATS_T_TEST_PAIRED</item>\n      <item>STATS_T_TEST_INDEP</item>\n      <item>STATS_T_TEST_INDEPU</item>\n      <item>STATS_WSR_TEST</item>\n      <item>STDDEV</item>\n      <item>STDDEV_POP</item>\n      <item>STDDEV_SAMP</item>\n      <item>SUBSTR</item>\n      <item>SUBSTRB</item>\n      <item>SUM</item>\n      <item>SYS_CONNECT_BY_PATH</item>\n      <item>SYS_CONTEXT</item>\n      <item>SYS_DBURIGEN</item>\n      <item>SYS_EXTRACT_UTC</item>\n      <item>SYS_GUID</item>\n      <item>SYS_TYPEID</item>\n      <item>SYS_XMLAGG</item>\n      <item>SYS_XMLGEN</item>\n      <item>SYSDATE</item>\n      <item>SYSTIMESTAMP</item>\n      <item>TAN</item>\n      <item>TANH</item>\n      <item>TIMESTAMP_TO_SCN</item>\n      <item>TO_BINARY_DOUBLE</item>\n      <item>TO_BINARY_FLOAT</item>\n      <item>TO_CHAR</item>\n      <item>TO_CLOB</item>\n      <item>TO_DATE</item>\n      <item>TO_DSINTERVAL</item>\n      <item>TO_LOB</item>\n      <item>TO_MULTI_BYTE</item>\n      <item>TO_NCHAR</item>\n      <item>TO_NCLOB</item>\n      <item>TO_NUMBER</item>\n      <item>TO_SINGLE_BYTE</item>\n      <item>TO_TIMESTAMP</item>\n      <item>TO_TIMESTAMP_TZ</item>\n      <item>TO_YMINTERVAL</item>\n      <item>TRANSLATE</item>\n      <item>TREAT</item>\n      <item>TRIM</item>\n      <item>TRUNC</item>\n      <item>TZ_OFFSET</item>\n      <item>UID</item>\n      <item>UNISTR</item>\n      <item>UPDATEXML</item>\n      <item>UPPER</item>\n      <item>USER</item>\n      <item>USERENV</item>\n      <item>VALUE</item>\n      <item>VAR_POP</item>\n      <item>VAR_SAMP</item>\n      <item>VARIANCE</item>\n      <item>VSIZE</item>\n      <item>WIDTH_BUCKET</item>\n      <item>XMLAGG</item>\n      <item>XMLCOLATTVAL</item>\n      <item>XMLCONCAT</item>\n      <item>XMLELEMENT</item>\n      <item>XMLFOREST</item>\n      <item>XMLSEQUENCE</item>\n      <item>XMLTRANSFORM</item>\n    </list>\n    <list name=\"types\">\n      <item>ANYDATA</item>\n      <item>ANYDATASET</item>\n      <item>ANYTYPE</item>\n      <item>ARRAY</item>\n      <item>BFILE</item>\n      <item>BINARY_DOUBLE</item>\n      <item>BINARY_FLOAT</item>\n      <item>BINARY_INTEGER</item>\n      <item>BLOB</item>\n      <item>BOOLEAN</item>\n      <item>CFILE</item>\n      <item>CHAR</item>\n      <item>CHARACTER</item>\n      <item>CLOB</item>\n      <item>DATE</item>\n      <item>DAY</item>\n      <item>DBURITYPE</item>\n      <item>DEC</item>\n      <item>DECIMAL</item>\n      <item>DOUBLE</item>\n      <item>FLOAT</item>\n      <item>FLOB</item>\n      <item>HTTPURITYPE</item>\n      <item>INT</item>\n      <item>INTEGER</item>\n      <item>INTERVAL</item>\n      <item>LOB</item>\n      <item>LONG</item>\n      <item>MLSLABEL</item>\n      <item>MONTH</item>\n      <item>NATIONAL</item>\n      <item>NCHAR</item>\n      <item>NCLOB</item>\n      <item>NUMBER</item>\n      <item>NUMERIC</item>\n      <item>NVARCHAR</item>\n      <item>OBJECT</item>\n      <item>PLS_INTEGER</item>\n      <item>PRECISION</item>\n      <item>RAW</item>\n      <item>REAL</item>\n      <item>RECORD</item>\n      <item>ROWID</item>\n      <item>SECOND</item>\n      <item>SINGLE</item>\n      <item>SMALLINT</item>\n      <item>TIME</item>\n      <item>TIMESTAMP</item>\n      <item>URIFACTORYTYPE</item>\n      <item>URITYPE</item>\n      <item>UROWID</item>\n      <item>VARCHAR</item>\n      <item>VARCHAR2</item>\n      <item>VARRAY</item>\n      <item>VARYING</item>\n      <item>XMLTYPE</item>\n      <item>YEAR</item>\n      <item>ZONE</item>\n    </list>\n    <contexts>\n      <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces/>\n\n        <!-- comments, before operators -->\n        <Detect2Chars attribute=\"Comment\" context=\"Singleline PL/SQL-style comment\" char=\"-\" char1=\"-\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Multiline C-style comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"SQL*Plus remark directive\" String=\"^rem\\b\" insensitive=\"true\" column=\"0\"/>\n\n        <LineContinue attribute=\"Symbol\" context=\"#stay\" char=\"/\" column=\"0\"/> <!-- conflict with \"operators\" keywords -->\n        <keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n        <LineContinue attribute=\"Symbol\" context=\"#stay\" char=\"/\" column=\"0\"/>\n        <keyword attribute=\"Operator Keyword\" context=\"#stay\" String=\"operators\"/>\n        <keyword attribute=\"ControlFlow\" context=\"#stay\" String=\"controlFlow\"/>\n        <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"+-*/=&lt;&gt;\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"!\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"~\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"^\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\":\" char1=\"=\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\".\" char1=\".\"/>\n        <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"|\" char1=\"|\"/>\n        <keyword attribute=\"Function\" String=\"functions\" context=\"#stay\"/>\n        <keyword attribute=\"Data Type\" String=\"types\" context=\"#stay\"/>\n\n        <DetectIdentifier/>\n        <!-- extra data types -->\n        <RegExpr attribute=\"Data Type\" context=\"#stay\" String=\"%(?:bulk_(?:exceptions|rowcount)|found|isopen|notfound|rowcount|rowtype|type)\\b\" insensitive=\"true\"/>\n        <!-- numbers -->\n        <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <!-- strings -->\n        <DetectChar attribute=\"String\" context=\"String literal\" char=\"'\"/>\n\n        <DetectChar attribute=\"Identifier\" context=\"User-defined identifier\" char=\"&quot;\"/>\n        <RegExpr attribute=\"External Variable\" context=\"#stay\" String=\"(:|&amp;&amp;?)\\w+\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"SQL*Plus directive to include file\" String=\"^@@?[^@ \\t\\r\\n]\" column=\"0\"/>\n      </context>\n      <context name=\"String literal\" attribute=\"String\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"String\" context=\"#pop\" char=\"\\\" char1=\"'\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <RegExpr attribute=\"External Variable\" context=\"#stay\" String=\"&amp;&amp;?\\w+\"/>\n        <Detect2Chars attribute=\"String Char\" context=\"#stay\" char=\"'\" char1=\"'\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n      </context>\n      <context name=\"Singleline PL/SQL-style comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <context name=\"Multiline C-style comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n      <context name=\"SQL*Plus remark directive\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n      <context name=\"User-defined identifier\" attribute=\"Identifier\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Identifier\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"SQL*Plus directive to include file\" attribute=\"Preprocessor\" lineEndContext=\"#pop\"/>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"       defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"           defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"ControlFlow\"       defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\"          defStyleNum=\"dsOperator\" spellChecking=\"false\"/>\n      <itemData name=\"Operator Keyword\"  defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Function\"          defStyleNum=\"dsFunction\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"         defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"           defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Hex\"               defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n      <itemData name=\"Float\"             defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"String\"            defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"       defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Comment\"           defStyleNum=\"dsComment\"/>\n      <itemData name=\"Identifier\"        defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n      <itemData name=\"External Variable\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Symbol\"            defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n      <itemData name=\"Preprocessor\"      defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\"/>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n    </comments>\n    <keywords casesensitive=\"0\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/stan.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Stan\"\n          section=\"Scientific\"\n          version=\"1\"\n          kateversion=\"5.0\"\n          indenter=\"cstyle\"\n          extensions=\"*.stan;*.stanfuncs\"\n          license=\"MIT\">\n  <highlighting>\n    <list name=\"controlflow\">\n      <item>break</item>\n      <item>continue</item>\n      <item>else</item>\n      <item>for</item>\n      <item>if</item>\n      <item>in</item>\n      <item>return</item>\n      <item>while</item>\n    </list>\n    <list name=\"keywords\">\n      <item>reject</item>\n      <item>print</item>\n      <item>integrate_ode</item>\n      <item>integrate_ode_bdf</item>\n      <item>integrate_ode_rk45</item>\n      <item>algebra_solver</item>\n    </list>\n    <list name=\"types\">\n      <item>int</item>\n      <item>real</item>\n      <item>vector</item>\n      <item>ordered</item>\n      <item>positive_ordered</item>\n      <item>simplex</item>\n      <item>unit_vector</item>\n      <item>row_vector</item>\n      <item>matrix</item>\n      <item>cholesky_factor_corr</item>\n      <item>cholesky_factor_cov</item>\n      <item>corr_matrix</item>\n      <item>cov_matrix</item>\n      <item>void</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n        <DetectChar attribute=\"Comment\" context=\"Hash comment\" char=\"#\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"C-style comment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Block comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\btarget\\s*\\+=\" />\n        <DetectChar attribute=\"Operator\" context=\"After less-than\" char=\"&lt;\" />\n        <DetectChar attribute=\"Punctuation\" context=\"After comma\" char=\",\" />\n        <DetectChar attribute=\"Operator\" context=\"After Right Paren\" char=\")\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b(functions|(transformed\\s+)?(data|parameters)|model|generated\\s+quantities)\\b\" />\n        <keyword attribute=\"Control Flow\" context=\"#stay\" String=\"controlflow\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <RegExpr attribute=\"Identifier\" context=\"#stay\" String=\"[A-Za-z][A-Za-z0-9_]*\" />\n        <Float attribute=\"Real\" />\n        <Int attribute=\"Int\" />\n        <DetectChar attribute=\"Punctuation\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Punctuation\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n        <RegExpr attribute=\"Assignment\" context=\"#stay\" String=\"([+-]?=|\\.?[*/]=)\" />\n        <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"(:|\\?|\\|\\||&amp;&amp;|==|!=|&lt;=?|&gt;=?|\\+|-|\\.?\\*|\\.?/|%|\\\\|'|^)\" />\n        <RegExpr attribute=\"Punctuation\" context=\"#stay\" String=\"[[\\]()]\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Hash comment\">\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"C-style comment\">\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Block comment\">\n        <RegExpr attribute=\"Doc Tag\" String=\"@(return|param)\\b\" context=\"#stay\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n      <context attribute=\"Normal Text\" name=\"After comma\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n        <DetectSpaces />\n        <RegExpr context=\"Upper Bound\" String=\"upper\\s*=\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"After less-than\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n        <DetectSpaces />\n        <RegExpr context=\"Upper Bound\" String=\"upper\\s*=\" lookAhead=\"true\" />\n        <RegExpr context=\"Lower Bound\" String=\"lower\\s*=\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"After Right Paren\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\" >\n        <DetectSpaces />\n        <RegExpr context=\"Truncation\" String=\"T\\s*\\[\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"Upper Bound\" lineEndContext=\"#stay\" >\n        <RegExpr attribute=\"Keyword\" String=\"upper\" context=\"#stay\" />\n        <DetectChar attribute=\"Punctuation\" char=\"=\" context=\"#pop\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"Lower Bound\" lineEndContext=\"#stay\" >\n        <RegExpr attribute=\"Keyword\" String=\"lower\" context=\"#stay\" />\n        <DetectChar attribute=\"Punctuation\" char=\"=\" context=\"#pop\" />\n      </context>\n      <context attribute=\"Normal Text\" name=\"Truncation\" lineEndContext=\"#stay\" >\n        <DetectChar attribute=\"Keyword\" char=\"T\" context=\"#stay\" />\n        <DetectChar attribute=\"Punctuation\" char=\"[\" context=\"#pop\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Control Flow\" defStyleNum=\"dsControlFlow\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Int\"          defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"Real\"         defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Assignment\"   defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Operator\"     defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Punctuation\"  defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Identifier\"   defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"Doc Tag\"      defStyleNum=\"dsAnnotation\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/stata.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Stata\" version=\"10\" kateversion=\"2.3\" section=\"Scientific\" extensions=\"*.do;*.ado;*.doh;*.DO;*.ADO;*.DOH\"\n casesensitive=\"1\" priority=\"5\" author=\"Larry Radbill (Larry.Radbill gmail com)\" license=\"LGPL\" >\n\n  <highlighting>\n\n    <list name=\"graphics-options\">\n\n      <item>addlabels</item>\n      <item>addlabopts</item>\n      <item>addplot</item>\n      <item>bar</item>\n      <item>barwidth</item>\n      <item>bin</item>\n      <item>blabel</item>\n      <item>caption</item>\n      <item>center</item>\n      <item>circle</item>\n      <item>circle_hollow</item>\n      <item>color</item>\n      <item>cols</item>\n      <item>combine</item>\n      <item>dot</item>\n      <item>draw</item>\n      <item>dropline</item>\n      <item>frequency</item>\n      <item>grid</item>\n      <item>hbar</item>\n      <item>imargin</item>\n      <item>labsize</item>\n      <item>legend</item>\n      <item>margin</item>\n      <item>medthick</item>\n      <item>mlabangle</item>\n      <item>mlabcolor</item>\n      <item>mlabel</item>\n      <item>mlabgap</item>\n      <item>mlabposition</item>\n      <item>mlabsize</item>\n      <item>mlabstyle</item>\n      <item>mlabtextstyle</item>\n      <item>mlabvposition</item>\n      <item>msymbol</item>\n      <item>name</item>\n      <item>nodraw</item>\n      <item>nogrid</item>\n      <item>over</item>\n      <item>plotregion</item>\n      <item>position</item>\n      <item>ring</item>\n      <item>rows</item>\n      <item>scale</item>\n      <item>size</item>\n      <item>start</item>\n      <item>subtitle</item>\n      <item>t1title</item>\n      <item>t2title</item>\n      <item>text</item>\n      <item>textsize</item>\n      <item>title</item>\n      <item>xcommon</item>\n      <item>xlabel</item>\n      <item>xline</item>\n      <item>xscale</item>\n      <item>xsize</item>\n      <item>xtitle</item>\n      <item>ycommon</item>\n      <item>ylabel</item>\n      <item>yline</item>\n      <item>yscale</item>\n      <item>ysize</item>\n      <item>ytitle</item>\n      <item>zero</item>\n    </list>\n\n    <list name=\"Stata-colors\">\n      <item>background</item>\n      <item>bg</item>\n      <item>black</item>\n      <item>blue</item>\n      <item>bluishgray</item>\n      <item>brown</item>\n      <item>cranberry</item>\n      <item>cyan</item>\n      <item>dimgray</item>\n      <item>dkgreen</item>\n      <item>dknavy</item>\n      <item>dkorange</item>\n      <item>ebblue</item>\n      <item>ebg</item>\n      <item>edkblue</item>\n      <item>eggshell</item>\n      <item>eltblue</item>\n      <item>eltgreen</item>\n      <item>emerald</item>\n      <item>emidblue</item>\n      <item>erose</item>\n      <item>fg</item>\n      <item>foreground</item>\n      <item>forest_green</item>\n      <item>gold</item>\n      <item>gray</item>\n      <item>green</item>\n      <item>gs</item>\n      <item>khaki</item>\n      <item>lavender</item>\n      <item>lime</item>\n      <item>ltblue</item>\n      <item>ltbluishgray</item>\n      <item>ltkhaki</item>\n      <item>magenta</item>\n      <item>maroon</item>\n      <item>midblue</item>\n      <item>midgreen</item>\n      <item>mint</item>\n      <item>navy</item>\n      <item>none</item>\n      <item>olive</item>\n      <item>olive_teal</item>\n      <item>orange</item>\n      <item>orange_red</item>\n      <item>pink</item>\n      <item>purple</item>\n      <item>red</item>\n      <item>sand</item>\n      <item>sandb</item>\n      <item>sienna</item>\n      <item>stone</item>\n      <item>teal</item>\n      <item>white</item>\n      <item>yellow</item>\n    </list>\n\n    <list name=\"proc-options\">\n      <item>accum</item>\n      <item>as</item>\n      <item>ascending</item>\n      <item>BASE</item>\n      <item>be</item>\n      <item>begin</item>\n      <item>bfgs</item>\n      <item>bhhh</item>\n      <item>brrweight</item>\n      <item>clean</item>\n      <item>close</item>\n      <item>clpatt</item>\n      <item>clpattern</item>\n      <item>clwidth</item>\n      <item>cole</item>\n      <item>color</item>\n      <item>confirm</item>\n      <item>continue</item>\n      <item>cov(unstr)</item>\n      <item>cov(unstructured)</item>\n      <item>covariance</item>\n      <item>dash</item>\n      <item>define</item>\n      <item>deft</item>\n      <item>delmacs</item>\n      <item>detail</item>\n      <item>dev</item>\n      <item>deviations</item>\n      <item>dfp</item>\n      <item>difficult</item>\n      <item>dirname</item>\n      <item>do</item>\n      <item>effects</item>\n      <item>eform</item>\n      <item>else</item>\n      <item>emdots</item>\n      <item>emiterate</item>\n      <item>emlog</item>\n      <item>emonly</item>\n      <item>emtolerance</item>\n      <item>end</item>\n      <item>error</item>\n      <item>estmetric</item>\n      <item>exchangeable</item>\n      <item>exit</item>\n      <item>family</item>\n      <item>fe</item>\n      <item>fitted</item>\n      <item>force</item>\n      <item>foreach</item>\n      <item>forvalues</item>\n      <item>fpc</item>\n      <item>frequency</item>\n      <item>function</item>\n      <item>global</item>\n      <item>gtolerance</item>\n      <item>hessian</item>\n      <item>ic</item>\n      <item>identity</item>\n      <item>if</item>\n      <item>in</item>\n      <item>independent</item>\n      <item>intpoints</item>\n      <item>irr</item>\n      <item>iterate</item>\n      <item>jkrweight</item>\n      <item>lincom</item>\n      <item>linearized</item>\n      <item>local</item>\n      <item>long</item>\n      <item>ltolerance</item>\n      <item>macro</item>\n      <item>manage</item>\n      <item>meff</item>\n      <item>meft</item>\n      <item>minimize</item>\n      <item>mle</item>\n      <item>mse</item>\n      <item>multiplier</item>\n      <item>noclear</item>\n      <item>nocons</item>\n      <item>noconstant</item>\n      <item>nodots</item>\n      <item>nofetable</item>\n      <item>nogroup</item>\n      <item>noheader</item>\n      <item>nolog</item>\n      <item>nolrtest</item>\n      <item>none</item>\n      <item>nonrtolerance</item>\n      <item>noobs</item>\n      <item>noomit</item>\n      <item>noretable</item>\n      <item>nostderr</item>\n      <item>not</item>\n      <item>nr</item>\n      <item>of</item>\n      <item>offset</item>\n      <item>or</item>\n      <item>p</item>\n      <item>parse</item>\n      <item>patterns</item>\n      <item>poststrata</item>\n      <item>postweight</item>\n      <item>prefix</item>\n      <item>program</item>\n      <item>r2_p</item>\n      <item>reffects</item>\n      <item>reml</item>\n      <item>reset</item>\n      <item>resid</item>\n      <item>run</item>\n      <item>scale</item>\n      <item>shift</item>\n      <item>showstep</item>\n      <item>SITE</item>\n      <item>size</item>\n      <item>star</item>\n      <item>stats</item>\n      <item>STBPLUS</item>\n      <item>stfmt</item>\n      <item>store</item>\n      <item>strata</item>\n      <item>syntax</item>\n      <item>tempfile</item>\n      <item>tempname</item>\n      <item>tempvar</item>\n      <item>tokenize</item>\n      <item>tolerance</item>\n      <item>unstructured</item>\n      <item>until</item>\n      <item>UPDATES</item>\n      <item>weight</item>\n      <item>while</item>\n      <item>wide</item>\n      <item>window</item>\n      <item>x2</item>\n      <item>xb</item>\n\n      <item>_b[</item>\n      <item>_coeff[</item>\n\n      <item>ereturn</item>\n      <item>rreturn</item>\n      <item>sreturn</item>\n\n      <item>e(</item>\n      <item>r(</item>\n      <item>s(</item>\n    </list>\n\n    <list name=\"macro-extended-functions\">\n      <item>all</item>\n      <item>BASE</item>\n      <item>coleq</item>\n      <item>colfullnames</item>\n      <item>coln</item>\n      <item>colnames</item>\n      <item>constraint</item>\n      <item>data</item>\n      <item>dir</item>\n      <item>display</item>\n      <item>environment</item>\n      <item>format</item>\n      <item>l</item>\n      <item>label</item>\n      <item>length</item>\n      <item>list</item>\n      <item>nobreak</item>\n      <item>nofail</item>\n      <item>permname</item>\n      <item>PERSONAL</item>\n      <item>piece</item>\n      <item>PLUS</item>\n      <item>quoted</item>\n      <item>row</item>\n      <item>roweq</item>\n      <item>rowfullnames</item>\n      <item>rown</item>\n      <item>rownames</item>\n      <item>SITE</item>\n      <item>sortedby</item>\n      <item>STATA</item>\n      <item>strict</item>\n      <item>sysdir</item>\n      <item>tempfile</item>\n      <item>tempvar</item>\n      <item>tsnorm</item>\n      <item>UPDATES</item>\n      <item>value</item>\n      <item>variable</item>\n    </list>\n\n    <list name=\"Internal-Stata-commands\">\n      <item>allstring</item>\n      <item>append</item>\n      <item>args</item>\n      <item>aweight</item>\n      <item>born</item>\n      <item>by</item>\n      <item>bys</item>\n      <item>bysort</item>\n      <item>byte</item>\n      <item>capture</item>\n      <item>cfreq</item>\n      <item>clear</item>\n      <item>Cns</item>\n      <item>Co</item>\n      <item>collinear</item>\n      <item>columns</item>\n      <item>comma</item>\n      <item>compress</item>\n      <item>connect</item>\n      <item>console</item>\n      <item>cpercent</item>\n      <item>cr</item>\n      <item>d0</item>\n      <item>data</item>\n      <item>datestring</item>\n      <item>decode</item>\n      <item>delimit</item>\n      <item>depnames</item>\n      <item>desc</item>\n      <item>describe</item>\n      <item>di</item>\n      <item>diparm_options</item>\n      <item>display</item>\n      <item>double</item>\n      <item>drop</item>\n      <item>eclass</item>\n      <item>encode</item>\n      <item>esample</item>\n      <item>Ev</item>\n      <item>exec</item>\n      <item>fam</item>\n      <item>fdadescribe</item>\n      <item>fdasave</item>\n      <item>fdause</item>\n      <item>filefilter</item>\n      <item>float</item>\n      <item>format</item>\n      <item>fweight</item>\n      <item>gen</item>\n      <item>generate</item>\n      <item>gr</item>\n      <item>green</item>\n      <item>gradient</item>\n      <item>hold</item>\n      <item>include</item>\n      <item>insert</item>\n      <item>insheet</item>\n      <item>int</item>\n      <item>iweight</item>\n      <item>k</item>\n      <item>keep</item>\n      <item>label</item>\n      <item>Ld</item>\n      <item>link</item>\n      <item>load</item>\n      <item>long</item>\n      <item>longstub</item>\n      <item>macrolen</item>\n      <item>markout</item>\n      <item>marksample</item>\n      <item>maximize</item>\n      <item>meanonly</item>\n      <item>mlmatsbysum</item>\n      <item>mlout</item>\n      <item>mode</item>\n      <item>model</item>\n      <item>more</item>\n      <item>N</item>\n      <item>namelen</item>\n      <item>noextend</item>\n      <item>nofootnote</item>\n      <item>noi</item>\n      <item>noisily</item>\n      <item>nolabel</item>\n      <item>nonotes</item>\n      <item>nopreserve</item>\n      <item>norescale</item>\n      <item>noscvars</item>\n      <item>nosummary</item>\n      <item>nototal</item>\n      <item>nrtolerance</item>\n      <item>obs</item>\n      <item>odbc</item>\n      <item>off</item>\n      <item>oim</item>\n      <item>on</item>\n      <item>oneway</item>\n      <item>opg</item>\n      <item>order</item>\n      <item>outfile</item>\n      <item>outsheet</item>\n      <item>percent</item>\n      <item>permanently</item>\n      <item>post</item>\n      <item>postclose</item>\n      <item>postfile</item>\n      <item>preserve</item>\n      <item>Psi</item>\n      <item>pweight</item>\n      <item>query</item>\n      <item>qui</item>\n      <item>quietly</item>\n      <item>rawsum</item>\n      <item>red</item>\n      <item>ren</item>\n      <item>rename</item>\n      <item>replace</item>\n      <item>Replay</item>\n      <item>report</item>\n      <item>repost</item>\n      <item>restore</item>\n      <item>robust</item>\n      <item>save</item>\n      <item>saving</item>\n      <item>SD</item>\n      <item>SE</item>\n      <item>search</item>\n      <item>set</item>\n      <item>shownrtolerance</item>\n      <item>sort</item>\n      <item>sqlfile</item>\n      <item>sqlshow</item>\n      <item>STATA</item>\n      <item>statistics</item>\n      <item>sum</item>\n      <item>summarize</item>\n      <item>t1title</item>\n      <item>t2title</item>\n      <item>tab</item>\n      <item>tabulate</item>\n      <item>technique</item>\n      <item>timer</item>\n      <item>total</item>\n      <item>unhold</item>\n      <item>unique</item>\n      <item>uniquemaster</item>\n      <item>uniqusing</item>\n      <item>use</item>\n      <item>using</item>\n      <item>V</item>\n      <item>values</item>\n      <item>variable</item>\n      <item>varlist</item>\n      <item>VCE</item>\n      <item>waldtest</item>\n      <item>width</item>\n      <item>xlabel</item>\n      <item>xmlsave</item>\n      <item>xmluse</item>\n      <item>yellow</item>\n      <item>ylabel</item>\n      <item>yline</item>\n    </list>\n\n  <!-- functions and constants -->\n\n    <list name=\"math-functions\">\n      <item>abs</item>\n      <item>acos</item>\n      <item>asin</item>\n      <item>atan</item>\n      <item>atan2</item>\n      <item>atanh</item>\n      <item>ceil</item>\n      <item>cloglog</item>\n      <item>comb</item>\n      <item>cos</item>\n      <item>digamma</item>\n      <item>exp</item>\n      <item>floor</item>\n      <item>invcloglog</item>\n      <item>invlogit</item>\n      <item>ln</item>\n      <item>lnfact</item>\n      <item>lnfactorial</item>\n      <item>lngamma</item>\n      <item>log</item>\n      <item>log10</item>\n      <item>max</item>\n      <item>min</item>\n      <item>mod</item>\n      <item>reldif</item>\n      <item>round</item>\n      <item>sign</item>\n      <item>sin</item>\n      <item>sqrt</item>\n      <item>sum</item>\n      <item>tan</item>\n      <item>tanh</item>\n      <item>trigamma</item>\n      <item>trunc</item>\n    </list>\n\n    <list name=\"probability-functions\">\n      <item>betaden</item>\n      <item>Binomial</item>\n      <item>binorm</item>\n      <item>binormal</item>\n      <item>chi2</item>\n      <item>chi2tail</item>\n      <item>dgammapda</item>\n      <item>dgammapdada</item>\n      <item>dgammapdadx</item>\n      <item>dgammapdx</item>\n      <item>dgammapdxdx</item>\n      <item>F</item>\n      <item>Fden</item>\n      <item>Ftail</item>\n      <item>gammaden</item>\n      <item>gammap</item>\n      <item>ibeta</item>\n      <item>invbinomial</item>\n      <item>invchi2</item>\n      <item>invchi2tail</item>\n      <item>invF</item>\n      <item>invFtail</item>\n      <item>invgammap</item>\n      <item>invibeta</item>\n      <item>invnchi2</item>\n      <item>invnFtail</item>\n      <item>invnibeta</item>\n      <item>invnorm</item>\n      <item>invnormal</item>\n      <item>invttail</item>\n      <item>nbetaden</item>\n      <item>nchi2</item>\n      <item>nFden</item>\n      <item>nFtail</item>\n      <item>nibeta</item>\n      <item>norm</item>\n      <item>normal</item>\n      <item>normalden</item>\n      <item>normd</item>\n      <item>npnchi2</item>\n      <item>tden</item>\n      <item>ttail</item>\n      <item>uniform()</item>\n    </list>\n\n    <list name=\"string-functions\">\n      <item>abbrev</item>\n      <item>char</item>\n      <item>index</item>\n      <item>indexnot</item>\n      <item>length</item>\n      <item>lower</item>\n      <item>ltrim</item>\n      <item>match</item>\n      <item>plural</item>\n      <item>proper</item>\n      <item>real</item>\n      <item>regexm</item>\n      <item>regexr</item>\n      <item>regexs</item>\n      <item>reverse</item>\n      <item>rtrim</item>\n      <item>string</item>\n      <item>strlen</item>\n      <item>strlower</item>\n      <item>strltrim</item>\n      <item>strmatch</item>\n      <item>strofreal</item>\n      <item>strpos</item>\n      <item>strproper</item>\n      <item>strreverse</item>\n      <item>strrtrim</item>\n      <item>strtrim</item>\n      <item>strupper</item>\n      <item>subinstr</item>\n      <item>subinword</item>\n      <item>substr</item>\n      <item>trim</item>\n      <item>upper</item>\n      <item>word</item>\n      <item>wordcount</item>\n    </list>\n\n    <list name=\"programming-functions\">\n      <item>_caller</item>\n      <item>autocode</item>\n      <item>byteorder</item>\n      <item>chop</item>\n      <item>clip</item>\n      <item>cond</item>\n      <item>e</item>\n      <item>epsdouble</item>\n      <item>epsfloat</item>\n      <item>group</item>\n      <item>inlist</item>\n      <item>inrange</item>\n      <item>irecode</item>\n      <item>matrix</item>\n      <item>maxbyte</item>\n      <item>maxdouble</item>\n      <item>maxfloat</item>\n      <item>maxint</item>\n      <item>maxlong</item>\n      <item>mi</item>\n      <item>minbyte</item>\n      <item>mindouble</item>\n      <item>minfloat</item>\n      <item>minint</item>\n      <item>minlong</item>\n      <item>missing</item>\n      <item>r</item>\n      <item>recode</item>\n      <item>replay</item>\n      <item>return</item>\n      <item>s</item>\n      <item>scalar</item>\n    </list>\n\n    <list name=\"date-functions\">\n      <item>d</item>\n      <item>date</item>\n      <item>day</item>\n      <item>dow</item>\n      <item>doy</item>\n      <item>halfyear</item>\n      <item>mdy</item>\n      <item>month</item>\n      <item>quarter</item>\n      <item>week</item>\n      <item>year</item>\n    </list>\n\n    <list name=\"timeseries-functions\">\n      <item>d</item>\n      <item>daily</item>\n      <item>dofd</item>\n      <item>dofh</item>\n      <item>dofm</item>\n      <item>dofq</item>\n      <item>dofw</item>\n      <item>dofy</item>\n      <item>h</item>\n      <item>halfyearly</item>\n      <item>hofd</item>\n      <item>m</item>\n      <item>mofd</item>\n      <item>monthly</item>\n      <item>q</item>\n      <item>qofd</item>\n      <item>quarterly</item>\n      <item>tin</item>\n      <item>twithin</item>\n      <item>w</item>\n      <item>weekly</item>\n      <item>wofd</item>\n      <item>y</item>\n      <item>yearly</item>\n      <item>yh</item>\n      <item>ym</item>\n      <item>yofd</item>\n      <item>yq</item>\n      <item>yw</item>\n    </list>\n\n    <list name=\"matrix-functions\">\n      <item>cholesky</item>\n      <item>colnumb</item>\n      <item>colsof</item>\n      <item>corr</item>\n      <item>det</item>\n      <item>diag</item>\n      <item>diag0cnt</item>\n      <item>el</item>\n      <item>get</item>\n      <item>hadamard</item>\n      <item>I</item>\n      <item>inv</item>\n      <item>invsym</item>\n      <item>issym</item>\n      <item>issymmetric</item>\n      <item>J</item>\n      <item>matmissing</item>\n      <item>matuniform</item>\n      <item>mreldif</item>\n      <item>nullmat</item>\n      <item>rownumb</item>\n      <item>rowsof</item>\n      <item>sweep</item>\n      <item>syminv</item>\n      <item>trace</item>\n      <item>vec</item>\n      <item>vecdiag</item>\n    </list>\n\n    <list name=\"egen-functions\">\n      <item>anycount</item>\n      <item>anymatch</item>\n      <item>anyvalue</item>\n      <item>at</item>\n      <item>concat</item>\n      <item>count</item>\n      <item>cut</item>\n      <item>diff</item>\n      <item>ends</item>\n      <item>field</item>\n      <item>fill</item>\n      <item>group</item>\n      <item>groupicodes</item>\n      <item>head</item>\n      <item>iqr</item>\n      <item>kurt</item>\n      <item>label</item>\n      <item>last</item>\n      <item>lname</item>\n      <item>mad</item>\n      <item>max</item>\n      <item>maxlength</item>\n      <item>maxmode</item>\n      <item>mdev</item>\n      <item>mean</item>\n      <item>median</item>\n      <item>min</item>\n      <item>minmode</item>\n      <item>missing</item>\n      <item>mode</item>\n      <item>mtr</item>\n      <item>nummodemissing</item>\n      <item>pc</item>\n      <item>prop</item>\n      <item>pctile</item>\n      <item>punct</item>\n      <item>rank</item>\n      <item>rowfirst</item>\n      <item>rowlast</item>\n      <item>rowmax</item>\n      <item>rowmean</item>\n      <item>rowmin</item>\n      <item>rowmiss</item>\n      <item>rownonmiss</item>\n      <item>rowsd</item>\n      <item>rowtotal</item>\n      <item>sd</item>\n      <item>seq</item>\n      <item>skew</item>\n      <item>std</item>\n      <item>strok</item>\n      <item>tag</item>\n      <item>tail</item>\n      <item>total</item>\n      <item>track</item>\n      <item>trim</item>\n      <item>truncate</item>\n    </list>\n\n    <list name=\"constants\">\n      <item>_all</item>\n      <item>_column</item>\n      <item>_cons</item>\n      <item>_dta</item>\n      <item>_dup</item>\n      <item>_merge</item>\n      <item>_n</item>\n      <item>_newline</item>\n      <item>_pi</item>\n      <item>_rc</item>\n      <item>creturn</item>\n      <item>c(adopath)</item>\n      <item>c(adosize)</item>\n      <item>c(ALPHA)</item>\n      <item>c(born_date)</item>\n      <item>c(byteorder)</item>\n      <item>c(changed)</item>\n      <item>c(checksum)</item>\n      <item>c(cmdlen)</item>\n      <item>c(console)</item>\n      <item>c(copycolor)</item>\n      <item>c(current_date)</item>\n      <item>c(current_time)</item>\n      <item>c(dirsep)</item>\n      <item>c(dockable)</item>\n      <item>c(dockingguides)</item>\n      <item>c(dp)</item>\n      <item>c(epsdouble)</item>\n      <item>c(epsfloat)</item>\n      <item>c(filedate)</item>\n      <item>c(filename)</item>\n      <item>c(flavor)</item>\n      <item>c(graphics)</item>\n      <item>c(httpproxy)</item>\n      <item>c(httpproxyauth)</item>\n      <item>c(httpproxyhost)</item>\n      <item>c(httpproxyport)</item>\n      <item>c(httpproxypw)</item>\n      <item>c(httpproxyuser)</item>\n      <item>c(k)</item>\n      <item>c(level)</item>\n      <item>c(linegap)</item>\n      <item>c(linesize)</item>\n      <item>c(locksplitters)</item>\n      <item>c(logtype)</item>\n      <item>c(machine_type)</item>\n      <item>c(macrolen)</item>\n      <item>c(matacache)</item>\n      <item>c(matafavor)</item>\n      <item>c(matalibs)</item>\n      <item>c(matalnum)</item>\n      <item>c(matamofirst)</item>\n      <item>c(mataoptimize)</item>\n      <item>c(matastrict)</item>\n      <item>c(matsize)</item>\n      <item>c(max_cmdlen)</item>\n      <item>c(max_k_current)</item>\n      <item>c(max_k_theory)</item>\n      <item>c(max_macrolen)</item>\n      <item>c(max_matsize)</item>\n      <item>c(max_N_current)</item>\n      <item>c(max_N_theory)</item>\n      <item>c(max_width_current)</item>\n      <item>c(max_width_theory)</item>\n      <item>c(maxbyte)</item>\n      <item>c(maxdb)</item>\n      <item>c(maxdouble)</item>\n      <item>c(maxfloat)</item>\n      <item>c(maxint)</item>\n      <item>c(maxiter)</item>\n      <item>c(maxlong)</item>\n      <item>c(maxstrvarlen)</item>\n      <item>c(maxvar)</item>\n      <item>c(memory)</item>\n      <item>c(min_matsize)</item>\n      <item>c(minbyte)</item>\n      <item>c(mindouble)</item>\n      <item>c(minfloat)</item>\n      <item>c(minint)</item>\n      <item>c(minlong)</item>\n      <item>c(mode)</item>\n      <item>c(Mons)</item>\n      <item>c(Months)</item>\n      <item>c(more)</item>\n      <item>c(N)</item>\n      <item>c(namelen)</item>\n      <item>c(os)</item>\n      <item>c(osdtl)</item>\n      <item>c(pagesize)</item>\n      <item>c(persistfv)</item>\n      <item>c(persistvtopic)</item>\n      <item>c(pi)</item>\n      <item>c(printcolor)</item>\n      <item>c(pwd)</item>\n      <item>c(rc)</item>\n      <item>c(reventries)</item>\n      <item>c(rmsg_time)</item>\n      <item>c(rmsg)</item>\n      <item>c(scheme)</item>\n      <item>c(scrollbufsize)</item>\n      <item>c(SE)</item>\n      <item>c(searchdefault)</item>\n      <item>c(seed)</item>\n      <item>c(stata_version)</item>\n      <item>c(sysdir_base)</item>\n      <item>c(sysdir_oldplace)</item>\n      <item>c(sysdir_personal)</item>\n      <item>c(sysdir_plus)</item>\n      <item>c(sysdir_site)</item>\n      <item>c(sysdir_stata)</item>\n      <item>c(sysdir_updates)</item>\n      <item>c(timeout1)</item>\n      <item>c(timeout2)</item>\n      <item>c(trace)</item>\n      <item>c(tracedepth)</item>\n      <item>c(traceexpand)</item>\n      <item>c(tracehilite)</item>\n      <item>c(traceindent)</item>\n      <item>c(tracenumber)</item>\n      <item>c(tracesep)</item>\n      <item>c(type)</item>\n      <item>c(update_interval)</item>\n      <item>c(update_prompt)</item>\n      <item>c(update_query)</item>\n      <item>c(varabbrev)</item>\n      <item>c(varlabelpos)</item>\n      <item>c(version)</item>\n      <item>c(virtual)</item>\n      <item>c(Wdays)</item>\n      <item>c(Weekdays)</item>\n      <item>c(width)</item>\n      <item>c(xptheme)</item>\n    </list>\n\n    <list name=\"System-parameters\">\n      <item>adosize</item>\n      <item>checksum</item>\n      <item>copycolor</item>\n      <item>dockable</item>\n      <item>dockingguides</item>\n      <item>dp</item>\n      <item>graphics</item>\n      <item>httpproxy</item>\n      <item>httpproxyauth</item>\n      <item>httpproxyhost</item>\n      <item>httpproxyport</item>\n      <item>httpproxypw</item>\n      <item>httpproxyuser</item>\n      <item>level</item>\n      <item>linegap</item>\n      <item>linesize</item>\n      <item>locksplitters</item>\n      <item>logtype</item>\n      <item>matacache</item>\n      <item>matafavor</item>\n      <item>matalibs</item>\n      <item>matalnum</item>\n      <item>matamofirst</item>\n      <item>mataoptimize</item>\n      <item>matastrict</item>\n      <item>matsize</item>\n      <item>maxdb</item>\n      <item>maxiter</item>\n      <item>maxvar</item>\n      <item>memory</item>\n      <item>more</item>\n      <item>pagesize</item>\n      <item>persistfv</item>\n      <item>persistvtopic</item>\n      <item>printcolor</item>\n      <item>reventries</item>\n      <item>rmsg</item>\n      <item>scheme</item>\n      <item>scrollbufsize</item>\n      <item>searchdefault</item>\n      <item>seed</item>\n      <item>timeout1</item>\n      <item>timeout2</item>\n      <item>trace</item>\n      <item>tracedepth</item>\n      <item>traceexpand</item>\n      <item>tracehilite</item>\n      <item>traceindent</item>\n      <item>tracenumber</item>\n      <item>tracesep</item>\n      <item>type</item>\n      <item>update_interval</item>\n      <item>update_prompt</item>\n      <item>update_query</item>\n      <item>varabbrev</item>\n      <item>varlabelpos</item>\n      <item>version</item>\n      <item>virtual</item>\n      <item>xptheme</item>\n    </list>\n\n  <!-- stata ado files   version 9.0    Date: 05/05/2005 -->\n    <list name=\"procedures\">\n      <item>_a_cls_msg</item>\n      <item>_addgph</item>\n      <item>_assert</item>\n      <item>_assert_mreldif</item>\n      <item>_assert_mreldifp</item>\n      <item>_assert_mreldifs</item>\n      <item>_assert_obs</item>\n      <item>_assert_streq</item>\n      <item>_at</item>\n      <item>_bigtab</item>\n      <item>_binperfect</item>\n      <item>_binperfout</item>\n      <item>_biplotmat</item>\n      <item>_brr_sum</item>\n      <item>_bs_display</item>\n      <item>_bs_sum</item>\n      <item>_btcmd</item>\n      <item>_byoptnotallowed</item>\n      <item>_ca_parse_normalize</item>\n      <item>_callerr</item>\n      <item>_cci</item>\n      <item>_check_eformopt</item>\n      <item>_check4gropts</item>\n      <item>_choice_table</item>\n      <item>_ckirfset</item>\n      <item>_cknotsvaroi</item>\n      <item>_ckvec</item>\n      <item>_clsarr2list</item>\n      <item>_cmdxel</item>\n      <item>_coef_table</item>\n      <item>_coef_table_header</item>\n      <item>_confirm_date</item>\n      <item>_confirm_number_or_date</item>\n      <item>_copy_mat_stripes</item>\n      <item>_cpmatnm</item>\n      <item>_crc2use</item>\n      <item>_crc4fld</item>\n      <item>_crcacnt</item>\n      <item>_crcar1</item>\n      <item>_crcause</item>\n      <item>_crcbin</item>\n      <item>_crcbygr</item>\n      <item>_crcchi2</item>\n      <item>_crcchkw</item>\n      <item>_crccip</item>\n      <item>_crceprs</item>\n      <item>_crcgldv</item>\n      <item>_crcglil</item>\n      <item>_crcird</item>\n      <item>_crcirr</item>\n      <item>_crcmeq</item>\n      <item>_crcnuse</item>\n      <item>_crcor</item>\n      <item>_crcphdr</item>\n      <item>_crcra</item>\n      <item>_crcrd</item>\n      <item>_crcrr</item>\n      <item>_crcseq</item>\n      <item>_crcshdr</item>\n      <item>_crcslbl</item>\n      <item>_crcsrvc</item>\n      <item>_crcswxx</item>\n      <item>_crcunab</item>\n      <item>_crcunit</item>\n      <item>_crcvarl</item>\n      <item>_crcwsrv</item>\n      <item>_crczsku</item>\n      <item>_cvar</item>\n      <item>_date2elapsed</item>\n      <item>_diag2mat</item>\n      <item>_diparm</item>\n      <item>_diparm_8</item>\n      <item>_dots</item>\n      <item>_e2r</item>\n      <item>_egennoby</item>\n      <item>_evlist</item>\n      <item>_exp_list_expand</item>\n      <item>_exp_list_parse</item>\n      <item>_find_tsops</item>\n      <item>_fr_area_parse_and_log</item>\n      <item>_fr_aspect_parse_and_log</item>\n      <item>_fr_draw_rect</item>\n      <item>_fr_droplines_draw</item>\n      <item>_fr_erasearr</item>\n      <item>_fr_legend_parse_and_log</item>\n      <item>_fr_merged_implicit</item>\n      <item>_fr_runlog</item>\n      <item>_fr_sztextbox_parse_and_log</item>\n      <item>_fr_tbstyle_parse_and_log</item>\n      <item>_fr_tedits_parse_and_log</item>\n      <item>_fr_textbox_parse_and_log</item>\n      <item>_fr_title_parse_and_log</item>\n      <item>_fr_x_log_cleanup</item>\n      <item>_fr_x_log_create</item>\n      <item>_fracpp</item>\n      <item>_fracxo</item>\n      <item>_frr_sztextbox_pnl</item>\n      <item>_gany</item>\n      <item>_ganycount</item>\n      <item>_ganymatch</item>\n      <item>_ganyvalue</item>\n      <item>_gconcat</item>\n      <item>_gcount</item>\n      <item>_gcut</item>\n      <item>_gdiff</item>\n      <item>_gends</item>\n      <item>_geqany</item>\n      <item>_get_diparmopts</item>\n      <item>_get_diparmopts_8</item>\n      <item>_get_eformopts</item>\n      <item>_get_eqspec</item>\n      <item>_get_gropts</item>\n      <item>_get_irf</item>\n      <item>_get_offopt</item>\n      <item>_getbv</item>\n      <item>_getcovcorr</item>\n      <item>_getfilename</item>\n      <item>_getnewlabelname</item>\n      <item>_getrhs</item>\n      <item>_getvarcns</item>\n      <item>_getxel</item>\n      <item>_getxel2</item>\n      <item>_gfill</item>\n      <item>_ggroup</item>\n      <item>_giqr</item>\n      <item>_gkurt</item>\n      <item>_gm_edit</item>\n      <item>_gm_log</item>\n      <item>_gma</item>\n      <item>_gmad</item>\n      <item>_gmax</item>\n      <item>_gmdev</item>\n      <item>_gmean</item>\n      <item>_gmedian</item>\n      <item>_gmin</item>\n      <item>_gmode</item>\n      <item>_gmtr</item>\n      <item>_gneqany</item>\n      <item>_gpc</item>\n      <item>_gpctile</item>\n      <item>_gr_arrowhead</item>\n      <item>_gr_atomize_styles</item>\n      <item>_gr_common_axes</item>\n      <item>_gr_drawrect</item>\n      <item>_gr_linkstyles</item>\n      <item>_gr_symbol_of</item>\n      <item>_grank</item>\n      <item>_grfirst</item>\n      <item>_grlast</item>\n      <item>_grmax</item>\n      <item>_grmean</item>\n      <item>_grmin</item>\n      <item>_grmiss</item>\n      <item>_grobs</item>\n      <item>_growfirst</item>\n      <item>_growlast</item>\n      <item>_growmax</item>\n      <item>_growmean</item>\n      <item>_growmin</item>\n      <item>_growmiss</item>\n      <item>_grownonmiss</item>\n      <item>_growsd</item>\n      <item>_growtotal</item>\n      <item>_grsd</item>\n      <item>_grsum</item>\n      <item>_gs_addgrname</item>\n      <item>_gs_bygraph</item>\n      <item>_gs_clean_graphlist</item>\n      <item>_gs_default_bands</item>\n      <item>_gs_islivefile</item>\n      <item>_gs_parse_and_log_axoptions</item>\n      <item>_gs_parse_and_log_axtitle</item>\n      <item>_gs_parse_and_log_lines</item>\n      <item>_gs_parse_and_log_tickset</item>\n      <item>_gs_rdfilehdr</item>\n      <item>_gs_wrfilehdr</item>\n      <item>_gs_x_create</item>\n      <item>_gsd</item>\n      <item>_gseq</item>\n      <item>_gskew</item>\n      <item>_gstd</item>\n      <item>_gsum</item>\n      <item>_gtag</item>\n      <item>_gtotal</item>\n      <item>_hadamard_verify</item>\n      <item>_hw_comp</item>\n      <item>_hw_opt_d0</item>\n      <item>_hwsa_comp</item>\n      <item>_hwsa_opt_d0</item>\n      <item>_hwsm_comp</item>\n      <item>_hwsm_opt_d0</item>\n      <item>_isfit</item>\n      <item>_ivreg_project</item>\n      <item>_jk_nlegend</item>\n      <item>_jk_pseudo</item>\n      <item>_jk_sum</item>\n      <item>_labels2names</item>\n      <item>_linemax</item>\n      <item>_loop_brr</item>\n      <item>_loop_jknife</item>\n      <item>_loop_jknife_fw</item>\n      <item>_loop_jknife_iw</item>\n      <item>_loop_jknife2</item>\n      <item>_loop_rw</item>\n      <item>_lrtest7</item>\n      <item>_m2matrix</item>\n      <item>_m2scalar</item>\n      <item>_matplot</item>\n      <item>_matsort</item>\n      <item>_mdisplay</item>\n      <item>_mds_classical</item>\n      <item>_mds_dataheader</item>\n      <item>_mds_display</item>\n      <item>_mds_display_classical</item>\n      <item>_mds_euclidean</item>\n      <item>_mds_parse_dopts</item>\n      <item>_mds_parse_method</item>\n      <item>_mds_parse_s2d</item>\n      <item>_mds_s2d</item>\n      <item>_me_der</item>\n      <item>_me_der2</item>\n      <item>_me_derb</item>\n      <item>_me_derd</item>\n      <item>_me_l_der</item>\n      <item>_me_l_der2</item>\n      <item>_mfrmvec</item>\n      <item>_mka2</item>\n      <item>_mkg</item>\n      <item>_mkkmn</item>\n      <item>_mksigma</item>\n      <item>_mkvec</item>\n      <item>_mprobitestimator</item>\n      <item>_mtest</item>\n      <item>_mvec</item>\n      <item>_no_estat</item>\n      <item>_no_predict</item>\n      <item>_nobs</item>\n      <item>_on_colon_parse</item>\n      <item>_parmlist</item>\n      <item>_parse_optexp</item>\n      <item>_parsewt</item>\n      <item>_pk_p</item>\n      <item>_plotpos</item>\n      <item>_pred_me</item>\n      <item>_pred_se</item>\n      <item>_prefix_check4esample</item>\n      <item>_prefix_checkopt</item>\n      <item>_prefix_clear</item>\n      <item>_prefix_command</item>\n      <item>_prefix_display</item>\n      <item>_prefix_expand</item>\n      <item>_prefix_explist</item>\n      <item>_prefix_footnote</item>\n      <item>_prefix_getchars</item>\n      <item>_prefix_getmat</item>\n      <item>_prefix_legend</item>\n      <item>_prefix_mlogit</item>\n      <item>_prefix_model_test</item>\n      <item>_prefix_note</item>\n      <item>_prefix_reject</item>\n      <item>_prefix_relabel_eqns</item>\n      <item>_prefix_run_error</item>\n      <item>_prefix_saving</item>\n      <item>_prefix_title</item>\n      <item>_prefix_vcenotallowed</item>\n      <item>_qsort_index</item>\n      <item>_qsur</item>\n      <item>_r2e</item>\n      <item>_repost</item>\n      <item>_resample_warn</item>\n      <item>_restore_labels</item>\n      <item>_returnclear</item>\n      <item>_rmdcoll</item>\n      <item>_robust2</item>\n      <item>_roccom1</item>\n      <item>_roccom1_8</item>\n      <item>_rocsen</item>\n      <item>_rotate_clear</item>\n      <item>_rotate_text</item>\n      <item>_score_spec</item>\n      <item>_set_irf_vars</item>\n      <item>_shortenpath</item>\n      <item>_sigfm</item>\n      <item>_small2dotz</item>\n      <item>_stata_internalerror</item>\n      <item>_stcurv</item>\n      <item>_strip_labels</item>\n      <item>_sttrend</item>\n      <item>_stubstar2names</item>\n      <item>_sum_table</item>\n      <item>_sumaccum</item>\n      <item>_sunflower_binar</item>\n      <item>_svar_cnsmac</item>\n      <item>_svar_eqmac</item>\n      <item>_svar_newcns</item>\n      <item>_svar_post</item>\n      <item>_svard2</item>\n      <item>_svariden</item>\n      <item>_svaridenlr</item>\n      <item>_svarlrd2</item>\n      <item>_svd</item>\n      <item>_svy_check_cmdopts</item>\n      <item>_svy_check_fpc</item>\n      <item>_svy_check_postw</item>\n      <item>_svy_check_predict</item>\n      <item>_svy_check_vce</item>\n      <item>_svy_fpc_note</item>\n      <item>_svy_ftest</item>\n      <item>_svy_ivreg_first</item>\n      <item>_svy_mkdeff</item>\n      <item>_svy_mkmeff</item>\n      <item>_svy_mkvmsp</item>\n      <item>_svy_mkvsrs</item>\n      <item>_svy_newrule</item>\n      <item>_svy_setup</item>\n      <item>_svy_singleton_note</item>\n      <item>_svy_subpop</item>\n      <item>_svy_subpop_note</item>\n      <item>_svy_summarize</item>\n      <item>_svy_summarize_legend</item>\n      <item>_svy_tabulate</item>\n      <item>_svy2</item>\n      <item>_svydes_dlg</item>\n      <item>_svylc</item>\n      <item>_svyset</item>\n      <item>_sw_ood</item>\n      <item>_ts</item>\n      <item>_ts_dexp</item>\n      <item>_ts_exp</item>\n      <item>_ts_hw</item>\n      <item>_ts_hwsa</item>\n      <item>_ts_hwsm</item>\n      <item>_tsheadr</item>\n      <item>_tsinchk</item>\n      <item>_tsma</item>\n      <item>_ttest</item>\n      <item>_ttest1</item>\n      <item>_ttest2</item>\n      <item>_tutends</item>\n      <item>_var_mka</item>\n      <item>_varbsf</item>\n      <item>_vardisprmse</item>\n      <item>_varfcast</item>\n      <item>_varfcast_clear</item>\n      <item>_varfcast_fcast</item>\n      <item>_varfcast_graph</item>\n      <item>_varirf</item>\n      <item>_varsim</item>\n      <item>_vce_parserun</item>\n      <item>_vec_ckgraph</item>\n      <item>_vec_dreduced</item>\n      <item>_vec_grcroots</item>\n      <item>_vec_opck</item>\n      <item>_vec_pgparse</item>\n      <item>_vec_pgridplots</item>\n      <item>_vec_postvar</item>\n      <item>_vecauxdisp</item>\n      <item>_vecfcast_compute</item>\n      <item>_vecfcast_compute_w</item>\n      <item>_vecgetacns</item>\n      <item>_vecgetcv</item>\n      <item>_vecgtn</item>\n      <item>_vecmka</item>\n      <item>_vecmkapvp</item>\n      <item>_vecmkce</item>\n      <item>_vecmkgam</item>\n      <item>_vecmksi</item>\n      <item>_vecmktrend</item>\n      <item>_vecortho</item>\n      <item>_vecpclean</item>\n      <item>_vectparse</item>\n      <item>_vecu</item>\n      <item>_virf_add</item>\n      <item>_virf_char</item>\n      <item>_virf_fck</item>\n      <item>_virf_mknewfile</item>\n      <item>_virf_nlen</item>\n      <item>_virf_use</item>\n      <item>_writenum</item>\n      <item>_xtreg_chk_cl</item>\n\n      <item>ac</item>\n      <item>ac_7</item>\n      <item>acprplot</item>\n      <item>acprplot_7</item>\n      <item>adjust</item>\n      <item>adopath</item>\n      <item>alpha</item>\n      <item>ameans</item>\n      <item>anova_estat</item>\n      <item>anova_terms</item>\n      <item>aorder</item>\n      <item>arch</item>\n      <item>arch_dr</item>\n      <item>arch_estat</item>\n      <item>arch_p</item>\n      <item>archlm</item>\n      <item>areg</item>\n      <item>areg_p</item>\n      <item>arima</item>\n      <item>arima_dr</item>\n      <item>arima_estat</item>\n      <item>arima_p</item>\n      <item>asmprobit</item>\n      <item>asmprobit_estat</item>\n      <item>asmprobit_lf</item>\n      <item>asmprobit_p</item>\n      <item>avplot</item>\n      <item>avplot_7</item>\n      <item>avplots</item>\n      <item>avplots_7</item>\n      <item>bcskew0</item>\n      <item>bgodfrey</item>\n      <item>binreg</item>\n      <item>bip0_lf</item>\n      <item>biplot</item>\n      <item>bipp_lf</item>\n      <item>bipr_lf</item>\n      <item>bipr_p</item>\n      <item>biprobit</item>\n      <item>bitest</item>\n      <item>bitesti</item>\n      <item>bitowt</item>\n      <item>blogit</item>\n      <item>bmemsize</item>\n      <item>boot</item>\n      <item>bootsamp</item>\n      <item>bootstrap</item>\n      <item>bootstrap_8</item>\n      <item>boxco_l</item>\n      <item>boxco_p</item>\n      <item>boxcox</item>\n      <item>boxcox_6</item>\n      <item>boxcox_p</item>\n      <item>bprobit</item>\n      <item>brier</item>\n      <item>brr</item>\n      <item>brrstat</item>\n      <item>bs</item>\n      <item>bs_7</item>\n      <item>bsampl_w</item>\n      <item>bsample</item>\n      <item>bsample_7</item>\n      <item>bsqreg</item>\n      <item>bstat</item>\n      <item>bstat_7</item>\n      <item>bstat_8</item>\n      <item>bstrap</item>\n      <item>bstrap_7</item>\n      <item>ca</item>\n      <item>ca_estat</item>\n      <item>ca_p</item>\n      <item>cabiplot</item>\n      <item>camat</item>\n      <item>canon</item>\n      <item>canon_8</item>\n      <item>canon_8_p</item>\n      <item>canon_estat</item>\n      <item>canon_p</item>\n      <item>caprojection</item>\n      <item>cc</item>\n      <item>cchart</item>\n      <item>cchart_7</item>\n      <item>cci</item>\n      <item>censobs_table</item>\n      <item>centile</item>\n      <item>cf</item>\n      <item>checkdlgfiles</item>\n      <item>checkhlpfiles</item>\n      <item>ci</item>\n      <item>cii</item>\n      <item>classutil</item>\n      <item>clear</item>\n      <item>clo</item>\n      <item>clog</item>\n      <item>clog_lf</item>\n      <item>clog_p</item>\n      <item>clogi</item>\n      <item>clogi_sw</item>\n      <item>clogit</item>\n      <item>clogit_lf</item>\n      <item>clogit_p</item>\n      <item>clogitp</item>\n      <item>clogl_sw</item>\n      <item>cloglog</item>\n      <item>clonevar</item>\n      <item>clslistarray</item>\n      <item>cluster</item>\n      <item>cluster_measures</item>\n      <item>cluster_stop</item>\n      <item>cluster_tree</item>\n      <item>cluster_tree_8</item>\n      <item>clustermat</item>\n      <item>cnr</item>\n      <item>cnre</item>\n      <item>cnreg</item>\n      <item>cnreg_p</item>\n      <item>cnreg_sw</item>\n      <item>cnsreg</item>\n      <item>codebook</item>\n      <item>collaps4</item>\n      <item>collapse</item>\n      <item>colormult_nb</item>\n      <item>colormult_nw</item>\n      <item>compare</item>\n      <item>conren</item>\n      <item>contract</item>\n      <item>copyright</item>\n      <item>copysource</item>\n      <item>corc</item>\n      <item>corr_anti</item>\n      <item>corr_kmo</item>\n      <item>corr_smc</item>\n      <item>corr2data</item>\n      <item>corrgram</item>\n      <item>cox_p</item>\n      <item>cox_sw</item>\n      <item>coxbase</item>\n      <item>coxhaz</item>\n      <item>coxvar</item>\n      <item>cprplot</item>\n      <item>cprplot_7</item>\n      <item>crc</item>\n      <item>cross</item>\n      <item>cs</item>\n      <item>cscript</item>\n      <item>cscript_log</item>\n      <item>csi</item>\n      <item>ct</item>\n      <item>ct_is</item>\n      <item>ctset</item>\n      <item>ctst_5</item>\n      <item>ctst_st</item>\n      <item>cttost</item>\n      <item>cumsp</item>\n      <item>cumsp_7</item>\n      <item>cumul</item>\n      <item>cusum</item>\n      <item>cusum_7</item>\n      <item>cutil</item>\n\n      <item>d</item>\n      <item>datetof</item>\n      <item>db</item>\n      <item>dbeta</item>\n      <item>de</item>\n      <item>deff</item>\n      <item>des</item>\n      <item>desc</item>\n      <item>descr</item>\n      <item>descri</item>\n      <item>describ</item>\n      <item>describe</item>\n      <item>destring</item>\n      <item>dfbeta</item>\n      <item>dfgls</item>\n      <item>dfuller</item>\n      <item>dirstats</item>\n      <item>disp_res</item>\n      <item>disp_s</item>\n      <item>dotplot</item>\n      <item>dotplot_7</item>\n      <item>dprobit</item>\n      <item>drawnorm</item>\n      <item>ds</item>\n      <item>ds_util</item>\n      <item>dstdize</item>\n      <item>duplicates</item>\n      <item>durbina</item>\n      <item>dwstat</item>\n      <item>dydx</item>\n      <item>egen</item>\n      <item>eivreg</item>\n      <item>emdef</item>\n      <item>eq</item>\n      <item>ereg</item>\n      <item>ereg_lf</item>\n      <item>ereg_p</item>\n      <item>ereg_sw</item>\n      <item>ereghet</item>\n      <item>ereghet_glf</item>\n      <item>ereghet_glf_sh</item>\n      <item>ereghet_gp</item>\n      <item>ereghet_ilf</item>\n      <item>ereghet_ilf_sh</item>\n      <item>ereghet_ip</item>\n      <item>est</item>\n      <item>est_cfexist</item>\n      <item>est_cfname</item>\n      <item>est_clickable</item>\n      <item>est_expand</item>\n      <item>est_hold</item>\n      <item>est_table</item>\n      <item>est_unhold</item>\n      <item>est_unholdok</item>\n      <item>estat</item>\n      <item>estat_default</item>\n      <item>estat_summ</item>\n      <item>estat_vce_only</item>\n      <item>esti</item>\n      <item>estimates</item>\n      <item>etodow</item>\n      <item>etof</item>\n      <item>etomdy</item>\n      <item>expandcl</item>\n      <item>fac</item>\n      <item>fact</item>\n      <item>facto</item>\n      <item>factor</item>\n      <item>factor_estat</item>\n      <item>factor_p</item>\n      <item>factor_pca_rotated</item>\n      <item>factor_rotate</item>\n      <item>factormat</item>\n      <item>fcast</item>\n      <item>fcast_compute</item>\n      <item>fcast_graph</item>\n      <item>fh_st</item>\n      <item>fillin</item>\n      <item>find_hlp_file</item>\n      <item>findfile</item>\n      <item>findit</item>\n      <item>findit_7</item>\n      <item>fit</item>\n      <item>for</item>\n      <item>for5_0</item>\n      <item>fpredict</item>\n      <item>frac_154</item>\n      <item>frac_adj</item>\n      <item>frac_chk</item>\n      <item>frac_cox</item>\n      <item>frac_ddp</item>\n      <item>frac_dis</item>\n      <item>frac_dv</item>\n      <item>frac_in</item>\n      <item>frac_mun</item>\n      <item>frac_pp</item>\n      <item>frac_pq</item>\n      <item>frac_pv</item>\n      <item>frac_wgt</item>\n      <item>frac_xo</item>\n      <item>fracgen</item>\n      <item>fracplot</item>\n      <item>fracplot_7</item>\n      <item>fracpoly</item>\n      <item>fracpred</item>\n      <item>fron_ex</item>\n      <item>fron_hn</item>\n      <item>fron_p</item>\n      <item>fron_tn</item>\n      <item>fron_tn2</item>\n      <item>frontier</item>\n      <item>ftodate</item>\n      <item>ftoe</item>\n      <item>ftomdy</item>\n      <item>ftowdate</item>\n\n      <item>gamhet_glf</item>\n      <item>gamhet_gp</item>\n      <item>gamhet_ilf</item>\n      <item>gamhet_ip</item>\n      <item>gamma</item>\n      <item>gamma_d2</item>\n      <item>gamma_p</item>\n      <item>gamma_sw</item>\n      <item>gammahet</item>\n      <item>gdi_hexagon</item>\n      <item>gdi_spokes</item>\n      <item>genrank</item>\n      <item>genstd</item>\n      <item>genvmean</item>\n      <item>gladder</item>\n      <item>gladder_7</item>\n      <item>glim_l01</item>\n      <item>glim_l02</item>\n      <item>glim_l03</item>\n      <item>glim_l04</item>\n      <item>glim_l05</item>\n      <item>glim_l06</item>\n      <item>glim_l07</item>\n      <item>glim_l08</item>\n      <item>glim_l09</item>\n      <item>glim_l10</item>\n      <item>glim_l11</item>\n      <item>glim_l12</item>\n      <item>glim_lf</item>\n      <item>glim_mu</item>\n      <item>glim_nw1</item>\n      <item>glim_nw2</item>\n      <item>glim_nw3</item>\n      <item>glim_p</item>\n      <item>glim_v1</item>\n      <item>glim_v2</item>\n      <item>glim_v3</item>\n      <item>glim_v4</item>\n      <item>glim_v5</item>\n      <item>glim_v6</item>\n      <item>glim_v7</item>\n      <item>glm</item>\n      <item>glm_6</item>\n      <item>glm_p</item>\n      <item>glm_sw</item>\n      <item>glmpred</item>\n      <item>glogit</item>\n      <item>glogit_8</item>\n      <item>glogit_p</item>\n      <item>gmeans</item>\n      <item>gnbre_lf</item>\n      <item>gnbreg</item>\n      <item>gnbreg_5</item>\n      <item>gnbreg_p</item>\n      <item>gomp_lf</item>\n      <item>gompe_sw</item>\n      <item>gomper_p</item>\n      <item>gompertz</item>\n      <item>gompertzhet</item>\n      <item>gomphet_glf</item>\n      <item>gomphet_glf_sh</item>\n      <item>gomphet_gp</item>\n      <item>gomphet_ilf</item>\n      <item>gomphet_ilf_sh</item>\n      <item>gomphet_ip</item>\n      <item>gphdot</item>\n      <item>gphpen</item>\n      <item>gphprint</item>\n      <item>gprobi_p</item>\n      <item>gprobit</item>\n      <item>gprobit_8</item>\n      <item>gr</item>\n      <item>gr_copy</item>\n      <item>gr_current</item>\n      <item>gr_db</item>\n      <item>gr_describe</item>\n      <item>gr_dir</item>\n      <item>gr_draw</item>\n      <item>gr_draw_replay</item>\n      <item>gr_drop</item>\n      <item>gr_edit</item>\n      <item>gr_editviewopts</item>\n      <item>gr_example</item>\n      <item>gr_example2</item>\n      <item>gr_export</item>\n      <item>gr_print</item>\n      <item>gr_qscheme</item>\n      <item>gr_query</item>\n      <item>gr_read</item>\n      <item>gr_rename</item>\n      <item>gr_replay</item>\n      <item>gr_save</item>\n      <item>gr_set</item>\n      <item>gr_setscheme</item>\n      <item>gr_table</item>\n      <item>gr_undo</item>\n      <item>gr_use</item>\n      <item>graph</item>\n      <item>grebar</item>\n      <item>greigen</item>\n      <item>greigen_7</item>\n      <item>greigen_8</item>\n      <item>grmeanby</item>\n      <item>grmeanby_7</item>\n      <item>gs_fileinfo</item>\n      <item>gs_filetype</item>\n      <item>gs_graphinfo</item>\n      <item>gs_stat</item>\n      <item>gsort</item>\n      <item>gwood</item>\n      <item>h</item>\n      <item>hadimvo</item>\n      <item>hareg</item>\n      <item>hausman</item>\n      <item>he</item>\n      <item>heck_d2</item>\n      <item>heckma_p</item>\n      <item>heckman</item>\n      <item>heckp_lf</item>\n      <item>heckpr_p</item>\n      <item>heckprob</item>\n      <item>hel</item>\n      <item>help</item>\n      <item>hereg</item>\n      <item>hetpr_lf</item>\n      <item>hetpr_p</item>\n      <item>hetprob</item>\n      <item>hettest</item>\n      <item>hilite</item>\n      <item>hist</item>\n      <item>hist_7</item>\n      <item>histogram</item>\n      <item>hlogit</item>\n      <item>hlu</item>\n      <item>hmeans</item>\n      <item>hotel</item>\n      <item>hotelling</item>\n      <item>hprobit</item>\n      <item>hreg</item>\n      <item>icd9</item>\n      <item>icd9_ff</item>\n      <item>icd9p</item>\n      <item>iis</item>\n      <item>impute</item>\n      <item>imtest</item>\n      <item>inbase</item>\n      <item>integ</item>\n      <item>inten</item>\n      <item>intreg</item>\n      <item>intreg_7</item>\n      <item>intreg_p</item>\n      <item>intrg_ll</item>\n      <item>intrg_ll2</item>\n      <item>intrg2_ll</item>\n      <item>ipolate</item>\n      <item>iqreg</item>\n      <item>ir</item>\n      <item>irf</item>\n      <item>irf_create</item>\n      <item>irfm</item>\n      <item>iri</item>\n      <item>is_svy</item>\n      <item>is_svysum</item>\n      <item>isid</item>\n      <item>istdize</item>\n      <item>ivprob_1_lf</item>\n      <item>ivprob_lf</item>\n      <item>ivprobit</item>\n      <item>ivprobit_p</item>\n      <item>ivreg</item>\n      <item>ivreg_footnote</item>\n      <item>ivtob_1_lf</item>\n      <item>ivtob_lf</item>\n      <item>ivtobit</item>\n      <item>ivtobit_p</item>\n\n      <item>jackknife</item>\n      <item>jacknife</item>\n      <item>jknife</item>\n      <item>jknife_6</item>\n      <item>jknife_8</item>\n      <item>jkstat</item>\n      <item>joinby</item>\n      <item>kalarma1</item>\n      <item>kap</item>\n      <item>kap_3</item>\n      <item>kapmeier</item>\n      <item>kappa</item>\n      <item>kapwgt</item>\n      <item>kdensity</item>\n      <item>kdensity_7</item>\n      <item>ksm</item>\n      <item>ksmirnov</item>\n      <item>ktau</item>\n      <item>kwallis</item>\n      <item>labelbook</item>\n      <item>ladder</item>\n      <item>levels</item>\n      <item>levelsof</item>\n      <item>leverage</item>\n      <item>lfit</item>\n      <item>lfit_p</item>\n      <item>lincom</item>\n      <item>line</item>\n      <item>linktest</item>\n      <item>lloghet_glf</item>\n      <item>lloghet_glf_sh</item>\n      <item>lloghet_gp</item>\n      <item>lloghet_ilf</item>\n      <item>lloghet_ilf_sh</item>\n      <item>lloghet_ip</item>\n      <item>llogi_sw</item>\n      <item>llogis_p</item>\n      <item>llogist</item>\n      <item>llogistic</item>\n      <item>llogistichet</item>\n      <item>lnorm_lf</item>\n      <item>lnorm_sw</item>\n      <item>lnorma_p</item>\n      <item>lnormal</item>\n      <item>lnormalhet</item>\n      <item>lnormhet_glf</item>\n      <item>lnormhet_glf_sh</item>\n      <item>lnormhet_gp</item>\n      <item>lnormhet_ilf</item>\n      <item>lnormhet_ilf_sh</item>\n      <item>lnormhet_ip</item>\n      <item>lnskew0</item>\n      <item>loadingplot</item>\n      <item>logi</item>\n      <item>logis_lf</item>\n      <item>logistic</item>\n      <item>logistic_p</item>\n      <item>logit</item>\n      <item>logit_estat</item>\n      <item>logit_p</item>\n      <item>loglogs</item>\n      <item>logrank</item>\n      <item>loneway</item>\n      <item>lookfor</item>\n      <item>lowess</item>\n      <item>lowess_7</item>\n      <item>lpredict</item>\n      <item>lrecomp</item>\n      <item>lroc</item>\n      <item>lroc_7</item>\n      <item>lrtest</item>\n      <item>lsens</item>\n      <item>lsens_7</item>\n      <item>lsens_x</item>\n      <item>lstat</item>\n      <item>ltable</item>\n      <item>ltable_7</item>\n      <item>ltriang</item>\n      <item>lv</item>\n      <item>lvr2plot</item>\n      <item>lvr2plot_7</item>\n\n      <item>makecns</item>\n      <item>manova_estat</item>\n      <item>manova_p</item>\n      <item>mantel</item>\n      <item>mat_capp</item>\n      <item>mat_order</item>\n      <item>mat_rapp</item>\n      <item>mata_matdescribe</item>\n      <item>mata_matsave</item>\n      <item>mata_matuse</item>\n      <item>matalabel</item>\n      <item>matcproc</item>\n      <item>matlist</item>\n      <item>matname</item>\n      <item>matstrik</item>\n      <item>mcc</item>\n      <item>mcci</item>\n      <item>md0_</item>\n      <item>md1_</item>\n      <item>md1debug_</item>\n      <item>md2_</item>\n      <item>md2debug_</item>\n      <item>mds</item>\n      <item>mds_estat</item>\n      <item>mds_p</item>\n      <item>mdsconfig</item>\n      <item>mdslong</item>\n      <item>mdsmat</item>\n      <item>mdsshepard</item>\n      <item>mdytoe</item>\n      <item>mdytof</item>\n      <item>me_derd</item>\n      <item>mean</item>\n      <item>means</item>\n      <item>median</item>\n      <item>memsize</item>\n      <item>meqparse</item>\n      <item>mer</item>\n      <item>merg</item>\n      <item>merge</item>\n      <item>mfp</item>\n      <item>mfx</item>\n      <item>mhelp</item>\n      <item>mhodds</item>\n      <item>mixed_ll</item>\n      <item>mixed_ll_reparm</item>\n      <item>mkassert</item>\n      <item>mkmat</item>\n      <item>mkspline</item>\n      <item>ml</item>\n      <item>ml_5</item>\n      <item>ml_adjs</item>\n      <item>ml_bhhhs</item>\n      <item>ml_c_d</item>\n      <item>ml_check</item>\n      <item>ml_clear</item>\n      <item>ml_cnt</item>\n      <item>ml_debug</item>\n      <item>ml_defd</item>\n      <item>ml_e0</item>\n      <item>ml_e0_bfgs</item>\n      <item>ml_e0_cycle</item>\n      <item>ml_e0_dfp</item>\n      <item>ml_e0i</item>\n      <item>ml_e1</item>\n      <item>ml_e1_bfgs</item>\n      <item>ml_e1_bhhh</item>\n      <item>ml_e1_cycle</item>\n      <item>ml_e1_dfp</item>\n      <item>ml_e2</item>\n      <item>ml_e2_cycle</item>\n      <item>ml_ebfg0</item>\n      <item>ml_ebfr0</item>\n      <item>ml_ebfr1</item>\n      <item>ml_ebh0q</item>\n      <item>ml_ebhh0</item>\n      <item>ml_ebhr0</item>\n      <item>ml_ebr0i</item>\n      <item>ml_ecr0i</item>\n      <item>ml_edfp0</item>\n      <item>ml_edfr0</item>\n      <item>ml_edfr1</item>\n      <item>ml_edr0i</item>\n      <item>ml_eds</item>\n      <item>ml_eer0i</item>\n      <item>ml_egr0i</item>\n      <item>ml_elf</item>\n      <item>ml_elf_bfgs</item>\n      <item>ml_elf_bhhh</item>\n      <item>ml_elf_cycle</item>\n      <item>ml_elf_dfp</item>\n      <item>ml_elfi</item>\n      <item>ml_elfs</item>\n      <item>ml_enr0i</item>\n      <item>ml_enrr0</item>\n      <item>ml_erdu0</item>\n      <item>ml_erdu0_bfgs</item>\n      <item>ml_erdu0_bhhh</item>\n      <item>ml_erdu0_bhhhq</item>\n      <item>ml_erdu0_cycle</item>\n      <item>ml_erdu0_dfp</item>\n      <item>ml_erdu0_nrbfgs</item>\n      <item>ml_exde</item>\n      <item>ml_footnote</item>\n      <item>ml_geqnr</item>\n      <item>ml_grad0</item>\n      <item>ml_graph</item>\n      <item>ml_hbhhh</item>\n      <item>ml_hd0</item>\n      <item>ml_hold</item>\n      <item>ml_init</item>\n      <item>ml_inv</item>\n      <item>ml_log</item>\n      <item>ml_max</item>\n      <item>ml_mlout</item>\n      <item>ml_model</item>\n      <item>ml_nb0</item>\n      <item>ml_opt</item>\n      <item>ml_p</item>\n      <item>ml_plot</item>\n      <item>ml_query</item>\n      <item>ml_rdgrd</item>\n      <item>ml_repor</item>\n      <item>ml_s_e</item>\n      <item>ml_score</item>\n      <item>ml_searc</item>\n      <item>ml_technique</item>\n      <item>ml_unhold</item>\n      <item>mlf_</item>\n      <item>mlog</item>\n      <item>mlogi</item>\n      <item>mlogit</item>\n      <item>mlogit_footnote</item>\n      <item>mlogit_p</item>\n      <item>mlopts</item>\n      <item>mnl0_</item>\n      <item>mprobit</item>\n      <item>mprobit_lf</item>\n      <item>mprobit_p</item>\n      <item>mrdu0_</item>\n      <item>mrdu1_</item>\n      <item>mvdecode</item>\n      <item>mvencode</item>\n      <item>mvreg</item>\n      <item>mvreg_estat</item>\n      <item>nbreg</item>\n      <item>nbreg_al</item>\n      <item>nbreg_lf</item>\n      <item>nbreg_p</item>\n      <item>nbreg_sw</item>\n      <item>newey</item>\n      <item>newey_7</item>\n      <item>newey_p</item>\n      <item>nl</item>\n      <item>nl_7</item>\n      <item>nl_p</item>\n      <item>nl_p_7</item>\n      <item>nlcom</item>\n      <item>nlcom_p</item>\n      <item>nlexp2</item>\n      <item>nlexp2_7</item>\n      <item>nlexp2a</item>\n      <item>nlexp2a_7</item>\n      <item>nlexp3</item>\n      <item>nlexp3_7</item>\n      <item>nlgom3</item>\n      <item>nlgom3_7</item>\n      <item>nlgom4</item>\n      <item>nlgom4_7</item>\n      <item>nlinit</item>\n      <item>nllog3</item>\n      <item>nllog3_7</item>\n      <item>nllog4</item>\n      <item>nllog4_7</item>\n      <item>nlog_rd</item>\n      <item>nlogit</item>\n      <item>nlogit_p</item>\n      <item>nlogitgen</item>\n      <item>nlogittree</item>\n      <item>nlpred</item>\n      <item>note</item>\n      <item>notes</item>\n      <item>nptrend</item>\n      <item>numlabel</item>\n      <item>old_ver</item>\n      <item>olo</item>\n      <item>olog</item>\n      <item>ologi</item>\n      <item>ologi_sw</item>\n      <item>ologit</item>\n      <item>ologit_p</item>\n      <item>ologitp</item>\n      <item>op_colnm</item>\n      <item>op_comp</item>\n      <item>op_diff</item>\n      <item>op_inv</item>\n      <item>op_str</item>\n      <item>opr</item>\n      <item>opro</item>\n      <item>oprob</item>\n      <item>oprob_sw</item>\n      <item>oprobi</item>\n      <item>oprobi_p</item>\n      <item>oprobit</item>\n      <item>oprobitp</item>\n      <item>opts_exclusive</item>\n      <item>orthog</item>\n      <item>orthpoly</item>\n      <item>ovtest</item>\n\n      <item>pac</item>\n      <item>pac_7</item>\n      <item>palette</item>\n      <item>parse_dissim</item>\n      <item>pause</item>\n      <item>pca</item>\n      <item>pca_8</item>\n      <item>pca_display</item>\n      <item>pca_estat</item>\n      <item>pca_p</item>\n      <item>pca_rotate</item>\n      <item>pcamat</item>\n      <item>pchart</item>\n      <item>pchart_7</item>\n      <item>pchi</item>\n      <item>pchi_7</item>\n      <item>pcorr</item>\n      <item>pctile</item>\n      <item>pentium</item>\n      <item>pergram</item>\n      <item>pergram_7</item>\n      <item>permute</item>\n      <item>permute_8</item>\n      <item>personal</item>\n      <item>peto_st</item>\n      <item>pkcollapse</item>\n      <item>pkcross</item>\n      <item>pkequiv</item>\n      <item>pkexamine</item>\n      <item>pkexamine_7</item>\n      <item>pkshape</item>\n      <item>pksumm</item>\n      <item>pksumm_7</item>\n      <item>pnorm</item>\n      <item>pnorm_7</item>\n      <item>poisgof</item>\n      <item>poiss_lf</item>\n      <item>poiss_sw</item>\n      <item>poisso_p</item>\n      <item>poisson</item>\n      <item>poisson_estat</item>\n      <item>pperron</item>\n      <item>prais</item>\n      <item>prais_e</item>\n      <item>prais_e2</item>\n      <item>prais_p</item>\n      <item>predict</item>\n      <item>predictnl</item>\n      <item>print</item>\n      <item>prob</item>\n      <item>probi</item>\n      <item>probit</item>\n      <item>probit_estat</item>\n      <item>probit_p</item>\n      <item>proc_time</item>\n      <item>procoverlay</item>\n      <item>procrustes</item>\n      <item>procrustes_estat</item>\n      <item>procrustes_p</item>\n      <item>profiler</item>\n      <item>prop</item>\n      <item>proportion</item>\n      <item>prtest</item>\n      <item>prtesti</item>\n      <item>pwcorr</item>\n      <item>qby</item>\n      <item>qbys</item>\n      <item>qchi</item>\n      <item>qchi_7</item>\n      <item>qladder</item>\n      <item>qladder_7</item>\n      <item>qnorm</item>\n      <item>qnorm_7</item>\n      <item>qqplot</item>\n      <item>qqplot_7</item>\n      <item>qreg</item>\n      <item>qreg_c</item>\n      <item>qreg_p</item>\n      <item>qreg_sw</item>\n      <item>quadchk</item>\n      <item>quantile</item>\n      <item>quantile_7</item>\n      <item>range</item>\n      <item>ranksum</item>\n      <item>ratio</item>\n      <item>rchart</item>\n      <item>rchart_7</item>\n      <item>rcof</item>\n      <item>recast</item>\n      <item>recode</item>\n      <item>reg</item>\n      <item>reg3</item>\n      <item>reg3_p</item>\n      <item>regdw</item>\n      <item>regr</item>\n      <item>regre</item>\n      <item>regre_p2</item>\n      <item>regres</item>\n      <item>regres_p</item>\n      <item>regress</item>\n      <item>regress_estat</item>\n      <item>regriv_p</item>\n      <item>remap</item>\n      <item>renpfix</item>\n      <item>repeat</item>\n      <item>reshape</item>\n      <item>robvar</item>\n      <item>roccomp</item>\n      <item>roccomp_7</item>\n      <item>roccomp_8</item>\n      <item>rocf_lf</item>\n      <item>rocfit</item>\n      <item>rocfit_8</item>\n      <item>rocgold</item>\n      <item>rocplot</item>\n      <item>rocplot_7</item>\n      <item>roctab</item>\n      <item>roctab_7</item>\n      <item>rolling</item>\n      <item>rologit</item>\n      <item>rologit_p</item>\n      <item>rot</item>\n      <item>rota</item>\n      <item>rotat</item>\n      <item>rotate</item>\n      <item>rotatemat</item>\n      <item>rreg</item>\n      <item>rreg_p</item>\n      <item>runtest</item>\n      <item>rvfplot</item>\n      <item>rvfplot_7</item>\n      <item>rvpplot</item>\n      <item>rvpplot_7</item>\n\n      <item>safesum</item>\n      <item>sample</item>\n      <item>sampsi</item>\n      <item>savedresults</item>\n      <item>saveold</item>\n      <item>sc</item>\n      <item>scatter</item>\n      <item>scm_mine</item>\n      <item>sco</item>\n      <item>scob_lf</item>\n      <item>scob_p</item>\n      <item>scobi_sw</item>\n      <item>scobit</item>\n      <item>scor</item>\n      <item>score</item>\n      <item>scoreplot</item>\n      <item>scoreplot_help</item>\n      <item>scree</item>\n      <item>screeplot</item>\n      <item>screeplot_help</item>\n      <item>sdtest</item>\n      <item>sdtesti</item>\n      <item>separate</item>\n      <item>seperate</item>\n      <item>serrbar</item>\n      <item>serrbar_7</item>\n      <item>set_defaults</item>\n      <item>sfrancia</item>\n      <item>shewhart</item>\n      <item>shewhart_7</item>\n      <item>signrank</item>\n      <item>signtest</item>\n      <item>simul</item>\n      <item>simul_7</item>\n      <item>simulate</item>\n      <item>simulate_8</item>\n      <item>sktest</item>\n      <item>slogit</item>\n      <item>slogit_d2</item>\n      <item>slogit_p</item>\n      <item>smooth</item>\n      <item>snapspan</item>\n      <item>spearman</item>\n      <item>spikeplot</item>\n      <item>spikeplot_7</item>\n      <item>spikeplt</item>\n      <item>spline_x</item>\n      <item>split</item>\n      <item>sqreg</item>\n      <item>sqreg_p</item>\n      <item>ssc</item>\n      <item>st</item>\n      <item>st_ct</item>\n      <item>st_hc</item>\n      <item>st_hcd</item>\n      <item>st_hcd_sh</item>\n      <item>st_is</item>\n      <item>st_issys</item>\n      <item>st_note</item>\n      <item>st_promo</item>\n      <item>st_set</item>\n      <item>st_show</item>\n      <item>st_smpl</item>\n      <item>st_subid</item>\n      <item>stack</item>\n      <item>statsby</item>\n      <item>statsby_8</item>\n      <item>stbase</item>\n      <item>stci</item>\n      <item>stci_7</item>\n      <item>stcox</item>\n      <item>stcox_estat</item>\n      <item>stcox_fr</item>\n      <item>stcox_fr_ll</item>\n      <item>stcox_p</item>\n      <item>stcox_sw</item>\n      <item>stcoxkm</item>\n      <item>stcoxkm_7</item>\n      <item>stcstat</item>\n      <item>stcurv</item>\n      <item>stcurve</item>\n      <item>stcurve_7</item>\n      <item>stdes</item>\n      <item>stem</item>\n      <item>stepwise</item>\n      <item>stereg</item>\n      <item>stfill</item>\n      <item>stgen</item>\n      <item>stir</item>\n      <item>stjoin</item>\n      <item>stmc</item>\n      <item>stmh</item>\n      <item>stphplot</item>\n      <item>stphplot_7</item>\n      <item>stphtest</item>\n      <item>stphtest_7</item>\n      <item>stptime</item>\n      <item>strate</item>\n      <item>strate_7</item>\n      <item>streg</item>\n      <item>streg_sw</item>\n      <item>streset</item>\n      <item>sts</item>\n      <item>sts_7</item>\n      <item>stset</item>\n      <item>stsplit</item>\n      <item>stsum</item>\n      <item>sttocc</item>\n      <item>sttoct</item>\n      <item>stvary</item>\n      <item>stweib</item>\n      <item>suest</item>\n      <item>suest_8</item>\n      <item>sunflower</item>\n      <item>sureg</item>\n      <item>survcurv</item>\n      <item>survsum</item>\n      <item>svar</item>\n      <item>svar_p</item>\n      <item>svmat</item>\n      <item>svy</item>\n      <item>svy_disp</item>\n      <item>svy_dreg</item>\n      <item>svy_est</item>\n      <item>svy_est_7</item>\n      <item>svy_estat</item>\n      <item>svy_get</item>\n      <item>svy_gnbreg_p</item>\n      <item>svy_head</item>\n      <item>svy_header</item>\n      <item>svy_heckman_p</item>\n      <item>svy_heckprob_p</item>\n      <item>svy_intreg_p</item>\n      <item>svy_ivreg_p</item>\n      <item>svy_logistic_p</item>\n      <item>svy_logit_p</item>\n      <item>svy_mlogit_p</item>\n      <item>svy_nbreg_p</item>\n      <item>svy_ologit_p</item>\n      <item>svy_oprobit_p</item>\n      <item>svy_poisson_p</item>\n      <item>svy_probit_p</item>\n      <item>svy_regress_p</item>\n      <item>svy_sub</item>\n      <item>svy_sub_7</item>\n      <item>svy_x</item>\n      <item>svy_x_7</item>\n      <item>svy_x_p</item>\n      <item>svydes</item>\n      <item>svydes_8</item>\n      <item>svygen</item>\n      <item>svygnbreg</item>\n      <item>svyheckman</item>\n      <item>svyheckprob</item>\n      <item>svyintreg</item>\n      <item>svyintreg_7</item>\n      <item>svyintrg</item>\n      <item>svyivreg</item>\n      <item>svylc</item>\n      <item>svylog_p</item>\n      <item>svylogit</item>\n      <item>svymarkout</item>\n      <item>svymarkout_8</item>\n      <item>svymean</item>\n      <item>svymlog</item>\n      <item>svymlogit</item>\n      <item>svynbreg</item>\n      <item>svyolog</item>\n      <item>svyologit</item>\n      <item>svyoprob</item>\n      <item>svyoprobit</item>\n      <item>svyopts</item>\n      <item>svypois</item>\n      <item>svypois_7</item>\n      <item>svypoisson</item>\n      <item>svyprobit</item>\n      <item>svyprobt</item>\n      <item>svyprop</item>\n      <item>svyprop_7</item>\n      <item>svyratio</item>\n      <item>svyreg</item>\n      <item>svyreg_p</item>\n      <item>svyregress</item>\n      <item>svyset</item>\n      <item>svyset_7</item>\n      <item>svyset_8</item>\n      <item>svytab</item>\n      <item>svytab_7</item>\n      <item>svytest</item>\n      <item>svytotal</item>\n      <item>sw</item>\n      <item>sw_8</item>\n      <item>swcnreg</item>\n      <item>swcox</item>\n      <item>swereg</item>\n      <item>swilk</item>\n      <item>swlogis</item>\n      <item>swlogit</item>\n      <item>swologit</item>\n      <item>swoprbt</item>\n      <item>swpois</item>\n      <item>swprobit</item>\n      <item>swqreg</item>\n      <item>swtobit</item>\n      <item>swweib</item>\n      <item>symmetry</item>\n      <item>symmi</item>\n      <item>symplot</item>\n      <item>symplot_7</item>\n      <item>sysdescribe</item>\n      <item>sysuse</item>\n      <item>szroeter</item>\n      <item>tab_or</item>\n      <item>tab1</item>\n      <item>tab2</item>\n      <item>tabi</item>\n      <item>table</item>\n      <item>tabodds</item>\n      <item>tabodds_7</item>\n      <item>tabstat</item>\n      <item>te</item>\n      <item>tes</item>\n      <item>test</item>\n      <item>testnl</item>\n      <item>testparm</item>\n      <item>teststd</item>\n      <item>tetrachoric</item>\n      <item>time_it</item>\n      <item>tis</item>\n      <item>tob</item>\n      <item>tobi</item>\n      <item>tobit</item>\n      <item>tobit_p</item>\n      <item>tobit_sw</item>\n      <item>tostring</item>\n      <item>total</item>\n      <item>treat_ll</item>\n      <item>treatr_p</item>\n      <item>treatreg</item>\n      <item>trim</item>\n      <item>trnb_cons</item>\n      <item>trnb_mean</item>\n      <item>trpoiss_d2</item>\n      <item>trunc_ll</item>\n      <item>truncr_p</item>\n      <item>truncreg</item>\n      <item>tsappend</item>\n      <item>tset</item>\n      <item>tsfill</item>\n      <item>tsline</item>\n      <item>tsline_ex</item>\n      <item>tsreport</item>\n      <item>tsrline</item>\n      <item>tsset</item>\n      <item>tssmooth</item>\n      <item>tsunab</item>\n      <item>ttest</item>\n      <item>ttesti</item>\n      <item>tut_chk</item>\n      <item>tut_wait</item>\n      <item>tutorial</item>\n      <item>tw</item>\n      <item>tware_st</item>\n      <item>two</item>\n      <item>twoway</item>\n      <item>twoway__fpfit_serset</item>\n      <item>twoway__function_gen</item>\n      <item>twoway__histogram_gen</item>\n      <item>twoway__ipoint_serset</item>\n      <item>twoway__ipoints_serset</item>\n      <item>twoway__kdensity_gen</item>\n      <item>twoway__lfit_serset</item>\n      <item>twoway__normgen_gen</item>\n      <item>twoway__pci_serset</item>\n      <item>twoway__qfit_serset</item>\n      <item>twoway__scatteri_serset</item>\n      <item>twoway__sunflower_gen</item>\n      <item>twoway_ksm_serset</item>\n      <item>typeof</item>\n      <item>unab</item>\n      <item>unabbrev</item>\n      <item>uselabel</item>\n\n      <item>var</item>\n      <item>var_mkcompanion</item>\n      <item>var_p</item>\n      <item>varbasic</item>\n      <item>varfcast</item>\n      <item>vargranger</item>\n      <item>varirf</item>\n      <item>varirf_add</item>\n      <item>varirf_cgraph</item>\n      <item>varirf_create</item>\n      <item>varirf_ctable</item>\n      <item>varirf_describe</item>\n      <item>varirf_dir</item>\n      <item>varirf_drop</item>\n      <item>varirf_erase</item>\n      <item>varirf_graph</item>\n      <item>varirf_ograph</item>\n      <item>varirf_rename</item>\n      <item>varirf_set</item>\n      <item>varirf_table</item>\n      <item>varlmar</item>\n      <item>varnorm</item>\n      <item>varsoc</item>\n      <item>varstable</item>\n      <item>varstable_w</item>\n      <item>varstable_w2</item>\n      <item>varwle</item>\n      <item>vce</item>\n      <item>vec</item>\n      <item>vec_fevd</item>\n      <item>vec_mkphi</item>\n      <item>vec_p</item>\n      <item>vec_p_w</item>\n      <item>vecirf_create</item>\n      <item>veclmar</item>\n      <item>veclmar_w</item>\n      <item>vecnorm</item>\n      <item>vecnorm_w</item>\n      <item>vecrank</item>\n      <item>vecstable</item>\n      <item>verinst</item>\n      <item>viewsource</item>\n      <item>vif</item>\n      <item>vwls</item>\n      <item>wdatetof</item>\n      <item>webdescribe</item>\n      <item>webseek</item>\n      <item>webuse</item>\n      <item>weib_lf</item>\n      <item>weib_lf0</item>\n      <item>weib1_lf</item>\n      <item>weib2_lf</item>\n      <item>weibhet_glf</item>\n      <item>weibhet_glf_sh</item>\n      <item>weibhet_glfa</item>\n      <item>weibhet_glfa_sh</item>\n      <item>weibhet_gp</item>\n      <item>weibhet_ilf</item>\n      <item>weibhet_ilf_sh</item>\n      <item>weibhet_ilfa</item>\n      <item>weibhet_ilfa_sh</item>\n      <item>weibhet_ip</item>\n      <item>weibu_sw</item>\n      <item>weibul_p</item>\n      <item>weibull</item>\n      <item>weibull_c</item>\n      <item>weibull_s</item>\n      <item>weibullhet</item>\n      <item>whelp</item>\n      <item>wilc_st</item>\n      <item>wilcoxon</item>\n      <item>wntestb</item>\n      <item>wntestb_7</item>\n      <item>wntestq</item>\n      <item>xchart</item>\n      <item>xchart_7</item>\n      <item>xcorr</item>\n      <item>xcorr_7</item>\n      <item>xi</item>\n      <item>xi_6</item>\n      <item>xpose</item>\n      <item>xt_iis</item>\n      <item>xt_tis</item>\n      <item>xtab_p</item>\n      <item>xtabond</item>\n      <item>xtbin_p</item>\n      <item>xtclog</item>\n      <item>xtcloglog</item>\n      <item>xtcloglog_8</item>\n      <item>xtcloglog_d2</item>\n      <item>xtcloglog_re_p</item>\n      <item>xtcnt_p</item>\n      <item>xtcorr</item>\n      <item>xtdata</item>\n      <item>xtdes</item>\n      <item>xtfront_p</item>\n      <item>xtfrontier</item>\n      <item>xtgee</item>\n      <item>xtgee_elink</item>\n      <item>xtgee_estat</item>\n      <item>xtgee_makeivar</item>\n      <item>xtgee_p</item>\n      <item>xtgee_plink</item>\n      <item>xtgls</item>\n      <item>xtgls_p</item>\n      <item>xthaus</item>\n      <item>xthausman</item>\n      <item>xtht_p</item>\n      <item>xthtaylor</item>\n      <item>xtile</item>\n      <item>xtint_p</item>\n      <item>xtintreg</item>\n      <item>xtintreg_8</item>\n      <item>xtintreg_d2</item>\n      <item>xtintreg_p</item>\n      <item>xtivp_1</item>\n      <item>xtivp_2</item>\n      <item>xtivreg</item>\n      <item>xtline</item>\n      <item>xtline_ex</item>\n      <item>xtlogit</item>\n      <item>xtlogit_8</item>\n      <item>xtlogit_d2</item>\n      <item>xtlogit_fe_p</item>\n      <item>xtlogit_pa_p</item>\n      <item>xtlogit_re_p</item>\n      <item>xtmixed</item>\n      <item>xtmixed_estat</item>\n      <item>xtmixed_p</item>\n      <item>xtnb_fe</item>\n      <item>xtnb_lf</item>\n      <item>xtnbreg</item>\n      <item>xtnbreg_pa_p</item>\n      <item>xtnbreg_refe_p</item>\n      <item>xtpcse</item>\n      <item>xtpcse_p</item>\n      <item>xtpois</item>\n      <item>xtpoisson</item>\n      <item>xtpoisson_d2</item>\n      <item>xtpoisson_pa_p</item>\n      <item>xtpoisson_refe_p</item>\n      <item>xtpred</item>\n      <item>xtprobit</item>\n      <item>xtprobit_8</item>\n      <item>xtprobit_d2</item>\n      <item>xtprobit_re_p</item>\n      <item>xtps_fe</item>\n      <item>xtps_lf</item>\n      <item>xtps_ren</item>\n      <item>xtps_ren_8</item>\n      <item>xtrar_p</item>\n      <item>xtrc</item>\n      <item>xtrc_p</item>\n      <item>xtrchh</item>\n      <item>xtrefe_p</item>\n      <item>xtreg</item>\n      <item>xtreg_be</item>\n      <item>xtreg_fe</item>\n      <item>xtreg_ml</item>\n      <item>xtreg_pa_p</item>\n      <item>xtreg_re</item>\n      <item>xtregar</item>\n      <item>xtrere_p</item>\n      <item>xtsf_ll</item>\n      <item>xtsf_llti</item>\n      <item>xtsum</item>\n      <item>xttab</item>\n      <item>xttest0</item>\n      <item>xttobit</item>\n      <item>xttobit_8</item>\n      <item>xttobit_p</item>\n      <item>xttrans</item>\n      <item>yx</item>\n      <item>yxview__barlike_draw</item>\n      <item>yxview_area_draw</item>\n      <item>yxview_bar_draw</item>\n      <item>yxview_dot_draw</item>\n      <item>yxview_dropline_draw</item>\n      <item>yxview_function_draw</item>\n      <item>yxview_iarrow_draw</item>\n      <item>yxview_ilabels_draw</item>\n      <item>yxview_normal_draw</item>\n      <item>yxview_pcarrow_draw</item>\n      <item>yxview_pcbarrow_draw</item>\n      <item>yxview_pccapsym_draw</item>\n      <item>yxview_pcscatter_draw</item>\n      <item>yxview_pcspike_draw</item>\n      <item>yxview_rarea_draw</item>\n      <item>yxview_rbar_draw</item>\n      <item>yxview_rbarm_draw</item>\n      <item>yxview_rcap_draw</item>\n      <item>yxview_rcapsym_draw</item>\n      <item>yxview_rconnected_draw</item>\n      <item>yxview_rline_draw</item>\n      <item>yxview_rscatter_draw</item>\n      <item>yxview_rspike_draw</item>\n      <item>yxview_spike_draw</item>\n      <item>yxview_sunflower_draw</item>\n      <item>zap_s</item>\n      <item>zinb</item>\n      <item>zinb_llf</item>\n      <item>zinb_plf</item>\n      <item>zip</item>\n      <item>zip_llf</item>\n      <item>zip_p</item>\n      <item>zip_plf</item>\n      <item>zt_ct_5</item>\n      <item>zt_hc_5</item>\n      <item>zt_hcd_5</item>\n      <item>zt_is_5</item>\n      <item>zt_iss_5</item>\n      <item>zt_sho_5</item>\n      <item>zt_smp_5</item>\n      <item>ztbase_5</item>\n      <item>ztcox_5</item>\n      <item>ztdes_5</item>\n      <item>ztereg_5</item>\n      <item>ztfill_5</item>\n      <item>ztgen_5</item>\n      <item>ztir_5</item>\n      <item>ztjoin_5</item>\n      <item>ztnb</item>\n      <item>ztnb_p</item>\n      <item>ztp</item>\n      <item>ztp_p</item>\n      <item>zts_5</item>\n      <item>ztset_5</item>\n      <item>ztspli_5</item>\n      <item>ztsum_5</item>\n      <item>zttoct_5</item>\n      <item>ztvary_5</item>\n      <item>ztweib_5</item>\n    </list>\n\n    <list name=\"Mata\">\n      <item>_cholinv</item>\n      <item>_cholsolve</item>\n      <item>_corr</item>\n      <item>_edittoint</item>\n      <item>_edittointtol</item>\n      <item>_edittozero</item>\n      <item>_edittozerotol</item>\n      <item>_eigen_work</item>\n      <item>_eigensystem</item>\n      <item>_eigenvalues</item>\n      <item>_equilc</item>\n      <item>_equilr</item>\n      <item>_equilrc</item>\n      <item>_ftell</item>\n      <item>_fullsvd</item>\n      <item>_hqrd</item>\n      <item>_hqrdp</item>\n      <item>_invlower</item>\n      <item>_jumble</item>\n      <item>_lefteigensystem</item>\n      <item>_lowertriangle</item>\n      <item>_lud</item>\n      <item>_lud_la</item>\n      <item>_luinv</item>\n      <item>_lusolve</item>\n      <item>_matexpsym</item>\n      <item>_matlogsym</item>\n      <item>_matpowersym</item>\n      <item>_mprobit_outer_prod</item>\n      <item>_mprobit_quadrature</item>\n      <item>_mprobit_quadrature_eval</item>\n      <item>_mprobit_quadrature_m</item>\n      <item>_mprobit_select</item>\n      <item>_mprobit_simulator</item>\n      <item>_mprobit_simulator_case_g</item>\n      <item>_mprobit_simulator_lk</item>\n      <item>_mprobit_simulator_m</item>\n      <item>_mprobit_simulator_mi</item>\n      <item>_mprobit_validate_choice</item>\n      <item>_mprobit_weights_roots_laguerre</item>\n      <item>_perhapsequilc</item>\n      <item>_perhapsequilr</item>\n      <item>_perhapsequilrc</item>\n      <item>_pinv</item>\n      <item>_qrinv</item>\n      <item>_qrsolve</item>\n      <item>_rowswap</item>\n      <item>_solvelower</item>\n      <item>_solveupper</item>\n      <item>_sort</item>\n      <item>_svd</item>\n      <item>_svdsv</item>\n      <item>_svsolve</item>\n      <item>_svy_design</item>\n      <item>_svy_group_sum</item>\n      <item>_svy_identify</item>\n      <item>_svy_mean</item>\n      <item>_svy_mean_post</item>\n      <item>_svy_mean_std</item>\n      <item>_svy_mean_stdpost</item>\n      <item>_svy_over_expand</item>\n      <item>_svy_over_sizes</item>\n      <item>_svy_post_sizes</item>\n      <item>_svy_ratio</item>\n      <item>_svy_ratio_post</item>\n      <item>_svy_ratio_std</item>\n      <item>_svy_ratio_stdpost</item>\n      <item>_svy_srs_variance</item>\n      <item>_svy_srssub_variance</item>\n      <item>_svy_std_sizes</item>\n      <item>_svy_total</item>\n      <item>_svy_total_post</item>\n      <item>_svy_variance</item>\n      <item>_symeigen_work</item>\n      <item>_symeigensystem</item>\n      <item>_symeigenvalues</item>\n      <item>_symmatfunc_work</item>\n      <item>_uppertriangle</item>\n      <item>_xtm_beta</item>\n      <item>_xtm_blup</item>\n      <item>_xtm_blup_save</item>\n      <item>_xtm_blup_save_u</item>\n      <item>_xtm_blup_u</item>\n      <item>_xtm_cleanup</item>\n      <item>_xtm_covtype</item>\n      <item>_xtm_de_th_u</item>\n      <item>_xtm_delta_to_theta</item>\n      <item>_xtm_det_upper</item>\n      <item>_xtm_em_get_rij</item>\n      <item>_xtm_em_get_uij</item>\n      <item>_xtm_em_iter</item>\n      <item>_xtm_em_iter_u</item>\n      <item>_xtm_em_solve</item>\n      <item>_xtm_fact_expand</item>\n      <item>_xtm_ga_th_u</item>\n      <item>_xtm_gamma_to_theta</item>\n      <item>_xtm_get_delta</item>\n      <item>_xtm_get_delta_u</item>\n      <item>_xtm_invert_R</item>\n      <item>_xtm_logdetr00</item>\n      <item>_xtm_logdetr00_u</item>\n      <item>_xtm_matexp</item>\n      <item>_xtm_matlog</item>\n      <item>_xtm_mixed_ll</item>\n      <item>_xtm_mixed_ll_u</item>\n      <item>_xtm_mixed_ll_uu</item>\n      <item>_xtm_mk_eqs</item>\n      <item>_xtm_ml_eqlist</item>\n      <item>_xtm_ml_eqlist_wrk</item>\n      <item>_xtm_setup</item>\n      <item>_xtm_start</item>\n      <item>_xtm_start_collapse</item>\n      <item>_xtm_start_u</item>\n      <item>_xtm_th_de_u</item>\n      <item>_xtm_th_ga_u</item>\n      <item>_xtm_theta_to_delta</item>\n      <item>_xtm_theta_to_gamma</item>\n      <item>acos</item>\n      <item>acosh</item>\n      <item>aggregate</item>\n      <item>array</item>\n      <item>asin</item>\n      <item>asinh</item>\n      <item>assert</item>\n      <item>asserteq</item>\n      <item>atan</item>\n      <item>atanh</item>\n      <item>blockdiag</item>\n      <item>boolean</item>\n      <item>break</item>\n      <item>byte</item>\n      <item>case</item>\n      <item>cat</item>\n      <item>catch</item>\n      <item>chdir</item>\n      <item>cholesky</item>\n      <item>cholinv</item>\n      <item>cholsolve</item>\n      <item>class</item>\n      <item>cloglog</item>\n      <item>collate</item>\n      <item>colmax</item>\n      <item>colmin</item>\n      <item>colscalefactors</item>\n      <item>colshape</item>\n      <item>colvector</item>\n      <item>complex</item>\n      <item>cond</item>\n      <item>const</item>\n      <item>continue</item>\n      <item>convolve</item>\n      <item>convolveslowly</item>\n      <item>Corr</item>\n      <item>correlation</item>\n      <item>Corrslowly</item>\n      <item>corruppercase</item>\n      <item>cosh</item>\n      <item>deconvolve</item>\n      <item>default</item>\n      <item>delegate</item>\n      <item>delete</item>\n      <item>designmatrix</item>\n      <item>det</item>\n      <item>dettriangular</item>\n      <item>diag</item>\n      <item>diag0cnt</item>\n      <item>do</item>\n      <item>double</item>\n      <item>dsign</item>\n      <item>e</item>\n      <item>editmissing</item>\n      <item>edittoint</item>\n      <item>edittointtol</item>\n      <item>edittozero</item>\n      <item>edittozerotol</item>\n      <item>editvalue</item>\n      <item>eigensystem</item>\n      <item>eigenvalues</item>\n      <item>else</item>\n      <item>eltypedef</item>\n      <item>end</item>\n      <item>enum</item>\n      <item>explicit</item>\n      <item>export</item>\n      <item>external</item>\n      <item>fft</item>\n      <item>fileexists</item>\n      <item>findfile</item>\n      <item>float</item>\n      <item>for</item>\n      <item>friend</item>\n      <item>ftell</item>\n      <item>ftfreqs</item>\n      <item>ftpad</item>\n      <item>ftperiodogram</item>\n      <item>ftretime</item>\n      <item>ftunwrap</item>\n      <item>ftwrap</item>\n      <item>fullsdiag</item>\n      <item>fullsvd</item>\n      <item>function</item>\n      <item>gamma</item>\n      <item>global</item>\n      <item>goto</item>\n      <item>helloworld</item>\n      <item>Hilbert</item>\n      <item>hqrd</item>\n      <item>hqrdmultq</item>\n      <item>hqrdmultq1t</item>\n      <item>hqrdp</item>\n      <item>hqrdq</item>\n      <item>hqrdq1</item>\n      <item>hqrdr</item>\n      <item>hqrdr1</item>\n      <item>if</item>\n      <item>inline</item>\n      <item>int</item>\n      <item>invcloglog</item>\n      <item>invfft</item>\n      <item>invHilbert</item>\n      <item>invlogit</item>\n      <item>invlower</item>\n      <item>invorder</item>\n      <item>invslowfft</item>\n      <item>invslowft</item>\n      <item>invvech</item>\n      <item>isdiagonal</item>\n      <item>jumble</item>\n      <item>lefteigensystem</item>\n      <item>local</item>\n      <item>log10</item>\n      <item>logit</item>\n      <item>long</item>\n      <item>lowertriangle</item>\n      <item>lud</item>\n      <item>luinv</item>\n      <item>lusolve</item>\n      <item>makesymmetric</item>\n      <item>mat_norm</item>\n      <item>mata</item>\n      <item>matexpsym</item>\n      <item>matlogsym</item>\n      <item>matpowersym</item>\n      <item>matrix</item>\n      <item>max</item>\n      <item>mean</item>\n      <item>meanvariance</item>\n      <item>min</item>\n      <item>mkdir</item>\n      <item>mmat_</item>\n      <item>mmat_describe</item>\n      <item>mmat_expandlist</item>\n      <item>mmat_readerror</item>\n      <item>mmat_save</item>\n      <item>mmat_use</item>\n      <item>mmat_writeerror</item>\n      <item>namespace</item>\n      <item>new</item>\n      <item>norm</item>\n      <item>NULL</item>\n      <item>numeric</item>\n      <item>operator</item>\n      <item>orgtypedef</item>\n      <item>panelsetup</item>\n      <item>panelsetup_u</item>\n      <item>panelstats</item>\n      <item>panelsubmatrix</item>\n      <item>panelsubview</item>\n      <item>pathlist</item>\n      <item>pathsubsysdir</item>\n      <item>pi</item>\n      <item>pinv</item>\n      <item>pointer</item>\n      <item>polyadd</item>\n      <item>polyadd_expand</item>\n      <item>polyderiv</item>\n      <item>polydiv</item>\n      <item>polyeval</item>\n      <item>polyinteg</item>\n      <item>polymorphic</item>\n      <item>polymult</item>\n      <item>polyroots</item>\n      <item>polysolve</item>\n      <item>polytrim</item>\n      <item>pragma</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>qrd</item>\n      <item>qrdp</item>\n      <item>qrinv</item>\n      <item>qrsolve</item>\n      <item>quad</item>\n      <item>quadcorrelation</item>\n      <item>quadmeanvariance</item>\n      <item>quadrant</item>\n      <item>quadvariance</item>\n      <item>range</item>\n      <item>rangen</item>\n      <item>rank</item>\n      <item>rank_from_singular_values</item>\n      <item>real</item>\n      <item>return</item>\n      <item>revorder</item>\n      <item>rmdir</item>\n      <item>rowmax</item>\n      <item>rowmin</item>\n      <item>rowscalefactors</item>\n      <item>rowvector</item>\n      <item>scalar</item>\n      <item>scalar_norm</item>\n      <item>short</item>\n      <item>sign</item>\n      <item>signed</item>\n      <item>sinh</item>\n      <item>sizeof</item>\n      <item>slowfft</item>\n      <item>slowft</item>\n      <item>solve_tol</item>\n      <item>solve_tolscale</item>\n      <item>solvelower</item>\n      <item>solveupper</item>\n      <item>sort</item>\n      <item>spline3</item>\n      <item>spline3eval</item>\n      <item>splineeval</item>\n      <item>st_islmname</item>\n      <item>static</item>\n      <item>string</item>\n      <item>struct</item>\n      <item>super</item>\n      <item>svd</item>\n      <item>svdsv</item>\n      <item>svsolve</item>\n      <item>switch</item>\n      <item>symeigensystem</item>\n      <item>symeigenvalues</item>\n      <item>tanh</item>\n      <item>template</item>\n      <item>this</item>\n      <item>throw</item>\n      <item>Toeplitz</item>\n      <item>trace</item>\n      <item>trace_prod</item>\n      <item>transmorphic</item>\n      <item>transposeonly</item>\n      <item>try</item>\n      <item>typedef</item>\n      <item>typename</item>\n      <item>union</item>\n      <item>uniqrows</item>\n      <item>unitcircle</item>\n      <item>unorder</item>\n      <item>unsigned</item>\n      <item>uppertriangle</item>\n      <item>using</item>\n      <item>Vandermonde</item>\n      <item>variance</item>\n      <item>vec</item>\n      <item>vec_norm</item>\n      <item>vech</item>\n      <item>vector</item>\n      <item>version</item>\n      <item>virtual</item>\n      <item>void</item>\n      <item>volatile</item>\n      <item>while</item>\n    </list>\n\n    <contexts>\n\n      <context        attribute=\"Normal Text\"   lineEndContext=\"#stay\" name=\"Normal Text\">\n\n        <keyword      attribute=\"Keyword\"       context=\"#stay\" String=\"proc-options\" />\n        <keyword      attribute=\"Keyword\"       context=\"#stay\" String=\"Internal-Stata-commands\" />\n        <keyword      attribute=\"Keyword\"       context=\"#stay\" String=\"procedures\" />\n\n        <keyword      attribute=\"Graphics\"      context=\"#stay\" String=\"graphics-options\" />\n        <keyword      attribute=\"Graphics\"      context=\"#stay\" String=\"Stata-colors\" />\n\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"math-functions\" />\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"probability-functions\" />\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"string-functions\" />\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"programming-functions\" />\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"date-functions\" />\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"timeseries-functions\" />\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"matrix-functions\" />\n        <keyword      attribute=\"Functions\"     context=\"#stay\" String=\"egen-functions\" />\n\n        <keyword      attribute=\"Mata\"          context=\"#stay\" String=\"Mata\" />\n\n        <keyword      attribute=\"Constants\"     context=\"#stay\" String=\"constants\" />\n        <keyword      attribute=\"System Params\" context=\"#stay\" String=\"System-parameters\" />\n\n        <keyword      attribute=\"Macro\"         context=\"#stay\" String=\"macro-extended-functions\" />\n        <RegExpr      attribute=\"GlobalMacro\"   context=\"#stay\" String=\"\\$[A-Za-z0-9_?{}!]+\" />\n\n        <DetectChar   attribute=\"String\"        context=\"string\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"String\"        context=\"#stay\" char=\"`\" char1='\"'/>\n\n        <RangeDetect  attribute=\"Macro\"         context=\"#stay\" char= \"`\" char1= \"'\" />\n\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\n        <DetectChar   attribute=\"Normal Text\"   context=\"#stay\" char=\"{\" beginRegion=\"block\"/>\n        <DetectChar   attribute=\"Normal Text\"   context=\"#stay\" char=\"}\" endRegion=\"block\"/>\n\n        <StringDetect attribute=\"Normal Text\"   context=\"#stay\" String=\"program define\" beginRegion=\"block\"/>\n        <StringDetect attribute=\"Normal Text\"   context=\"#stay\" String=\"end\" endRegion=\"block\"/>\n\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\">\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n\n      <itemData name=\"Normal Text\"    defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"        defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Graphics\"       defStyleNum=\"dsBaseN\" />\n      <itemData name=\"Functions\"      defStyleNum=\"dsFunction\" />\n      <itemData name=\"Mata\"           defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Constants\"      defStyleNum=\"dsDataType\" />\n      <itemData name=\"System Params\"  defStyleNum=\"dsDecVal\" />\n\n      <itemData name=\"String\"         defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"    defStyleNum=\"dsChar\"/>\n\n      <itemData name=\"Macro\"          defStyleNum=\"dsOthers\"/>\n      <itemData name=\"GlobalMacro\"    defStyleNum=\"dsOthers\"/>\n\n      <itemData name=\"Comment\"        defStyleNum=\"dsComment\"/>\n\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/stl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"STL\" version=\"2\" kateversion=\"5.0\" section=\"3D\" extensions=\"*.stl\" mimetype=\"application/sla\" author=\"Volker Krause (vkrause@kde.org)\" license=\"LGPLv2+\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>solid</item>\n            <item>facet</item>\n            <item>normal</item>\n            <item>outer</item>\n            <item>loop</item>\n            <item>vertex</item>\n            <item>endloop</item>\n            <item>endfacet</item>\n            <item>endsolid</item>\n        </list>\n        <contexts>\n            <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces/>\n                <Float attribute=\"Float\" context=\"#stay\"/>\n                <Int attribute=\"Decimal\" context=\"#stay\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\"/>\n            <itemData name=\"Float\"       defStyleNum=\"dsFloat\"/>\n        </itemDatas>\n    </highlighting>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/systemc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n    Copyright (C) Joseph Wenninger, 2008\n    Highlighting for SystemC (www.systemc.org)\n    Highlighting licensed as LGPL 2+\n================================================================================\n    July 17th 2008                            Initial version\n-->\n<language name=\"SystemC\" version=\"3\" kateversion=\"2.4\" section=\"Hardware\" extensions=\"*.c++;*.cxx;*.cpp;*.cc;*.C;*.h;*.hh;*.H;*.h++;*.hxx;*.hpp;*.hcc;*.moc\" mimetype=\"text/x-c++src;text/x-c++hdr;text/x-chdr\" priority=\"1\" author=\"Joseph Wenninger (jowenn@kde.org)\" license=\"LGPLv2+\">\n\n<highlighting>\n<list name=\"systemc_keywords\">\n    <item>sensitive</item>\n</list>\n<list name=\"systemc_functions\">\n    <item>dont_initialize</item>\n    <item>gen_unique_name</item>\n    <item>name</item>\n    <item>next_trigger</item>\n    <item>sc_assert_fail</item>\n    <item>sc_copyright</item>\n    <item>sc_cycle</item>\n    <item>sc_initialize</item>\n    <item>sc_simulation_time</item>\n    <item>sc_start</item>\n    <item>sc_stop</item>\n    <item>sc_get_default_time_unit</item>\n    <item>sc_get_default_time_resolution</item>\n    <item>sc_time_stamp</item>\n    <item>sc_version</item>\n    <item>timed_out</item>\n    <item>wait</item>\n    <item>sc_trace</item>\n    <item>sc_create_vcd_trace_file</item>\n    <item>sc_close_vcd_trace_file</item>\n    \n</list>\n<list name=\"systemc_macros\">\n    <item>SC_MODULE</item>\n    <item>SC_CTOR</item>\n    <item>SC_METHOD</item>\n    <item>SC_THREAD</item>\n</list>\n<list name=\"systemc_datatypes\">\n    <item>sc_time_unit</item>\n    <item>sc_clock</item>\n    <item>sc_int</item>\n    <item>sc_uint</item>\n    <item>sc_bigint</item>\n    <item>sc_biguint</item>\n    <item>sc_logic</item>\n    <item>sc_lv</item>\n    <item>sc_bit</item>\n    <item>sc_bv</item>\n    <item>sc_fixed</item>\n    <item>sc_ufixed</item>\n    <item>sc_fixed_fast</item>\n    <item>sc_ufixed_fast</item>\n    <item>sc_fix</item>\n    <item>sc_ufix</item>\n    <item>sc_buffer</item>\n    <item>sc_fifo</item>\n    <item>sc_mutex</item>\n    <item>sc_semaphore</item>\n    <item>sc_signal</item>\n    <item>sc_signal_resolved</item>\n    <item>sc_signal_rv</item>\n    <item>sc_fifo_in_if</item>\n    <item>sc_fifo_out_if</item>\n    <item>sc_mutex_if</item>\n    <item>sc_semaphore_if</item>\n    <item>sc_signal_in_if</item>\n    <item>sc_signal_inout_if</item>\n    <item>sc_master</item>\n    <item>sc_inmaster</item>\n    <item>sc_outmaster</item>\n    <item>sc_inout_master</item>\n    <item>sc_indexed</item>\n    <item>sc_slave</item>\n    <item>sc_inslave</item>\n    <item>sc_outslave</item>\n    <item>sc_inoutslave</item>\n    <item>sc_in</item>\n    <item>sc_out</item>\n    <item>sc_inout</item>\n    <item>sc_noHandshake</item>\n    <item>sc_fullHandshake</item>\n    <item>sc_memfullHandshake</item>\n    <item>sc_enable_Handshake</item>\n    <item>sc_memenHandshake</item>\n    <item>sc_link_mp</item>\n    <item>sc_trace_file</item>\n</list>\n<contexts>\n  <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/> <!-- see below -->\n    <keyword attribute=\"Extensions-Keywords\" context=\"#stay\" String=\"systemc_keywords\" />\n    <keyword attribute=\"Extensions-Functions\" context=\"#stay\" String=\"systemc_functions\" />\n    <keyword attribute=\"Extensions-Macros\" context=\"#stay\" String=\"systemc_macros\" />\n    <keyword attribute=\"Data Type\" context=\"#stay\" String=\"systemc_datatypes\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n  \n  <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n      <DetectSpaces />\n      <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      <IncludeRules context=\"##Alerts\" />\n      <DetectIdentifier />\n  </context>\n\n</contexts>\n\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Extensions-Macros\"   defStyleNum=\"dsKeyword\" color=\"#0095ff\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\"/>\n  <itemData name=\"Extensions-Functions\"   defStyleNum=\"dsKeyword\" color=\"#000000\" selColor=\"#ffffff\" bold=\"1\" italic=\"1\"/>\n  <itemData name=\"Extensions-Keywords\"   defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n  <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n<!--   <itemData name=\"Comment\" defStyleNum=\"dsComment\" /> -->\n</itemDatas>\n\n</highlighting>\n<general>\n    <comments>\n        <comment name=\"singleLine\" start=\"//\" />\n        <!-- implement support for something like this:<comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment##C++\"/>-->\n        <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/systemverilog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--***********************************************************************-->\n<!-- $Id: systemverilog.xml 10 2009-06-25 03:41:39Z seanoboyle $            -->\n<!--***********************************************************************-->\n<!--  This program is free software: you can redistribute it and/or modify -->\n<!--  it under the terms of the GNU General Public License as published by -->\n<!--  the Free Software Foundation, either version 3 of the License, or    -->\n<!--  (at your option) any later version.                                  -->\n<!--                                                                       -->\n<!--  This program is distributed in the hope that it will be useful,      -->\n<!--  but WITHOUT ANY WARRANTY; without even the implied warranty of       -->\n<!--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        -->\n<!--  GNU General Public License for more details.                         -->\n<!--                                                                       -->\n<!--  You should have received a copy of the GNU General Public License    -->\n<!--  along with this program.  If not, see <http://www.gnu.org/licenses/>.-->\n<!--                                                                       -->\n<!--***********************************************************************-->\n<!-- Title:        SystemVerilog Language Keywords File for Kate Editor    -->\n<!-- Description:  This file contains the SV keywords defined in the       -->\n<!--               IEEE1800-2009 Draft Standard in the format expected by  -->\n<!--               the Kate Editor.                                        -->\n<!--                                                                       -->\n<!-- Original Author: Sean O'Boyle                                         -->\n<!-- Contact:         seanoboyle@intelligentdv.com                         -->\n<!-- Company:         Intelligent Design Verification                      -->\n<!-- Company URL:     http://intelligentdv.com                             -->\n<!--                                                                       -->\n<!-- Download the most recent version here:                                -->\n<!--                  http://intelligentdv.com/downloads                   -->\n<!--                                                                       -->\n<!-- File Bugs Here:  http://bugs.intelligentdv.com                        -->\n<!--        Project:  SyntaxFiles                                          -->\n<!--                                                                       -->\n<!-- File: systemverilog.xml                                               -->\n<!-- $LastChangedBy: seanoboyle $                                          -->\n<!-- $LastChangedDate: 2009-06-24 20:41:39 -0700 (Wed, 24 Jun 2009) $      -->\n<!-- $LastChangedRevision: 10 $                                             -->\n<!--                                                                       -->\n<!--***********************************************************************-->\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"SystemVerilog\" version=\"7\" kateversion=\"2.4\" section=\"Hardware\" extensions=\"*.sv;*.svh\" mimetype=\"text/x-systemverilog-src\" author=\"Sean O'Boyle (seanoboyle@intelligentdv.com)\" license=\"GPLv3+\">\n  <highlighting>\n    <list name=\"key_deprecated\">\n       <item>defparam</item>\n       <item>deassign</item>\n    </list>\n\n    <list name=\"key_dpi\">\n       <item>DPI</item>\n       <item>DPI-C</item>\n       <item>import</item>\n       <item>export</item>\n       <item>context</item>\n    </list>\n\n    <list name=\"key_assert\">\n       <item>assert</item>\n       <item>assume</item>\n       <item>cover</item>\n       <item>expect</item>\n       <item>disable</item>\n       <item>iff</item>\n       <item>binsof</item>\n       <item>intersect</item>\n       <item>first_match</item>\n       <item>throughout</item>\n       <item>within</item>\n    </list>\n\n    <list name=\"key_coverage\">\n       <item>coverpoint</item>\n       <item>cross</item>\n       <item>wildcard</item>\n       <item>bins</item>\n       <item>ignore_bins</item>\n       <item>illegal_bins</item>\n    </list>\n\n    <list name=\"key_generator\">\n       <item>genvar</item>\n    </list>\n\n    <list name=\"key_conditional\">\n       <item>if</item>\n       <item>else</item>\n       <item>unique</item>\n       <item>priority</item>\n       <item>matches</item>\n    </list>\n\n    <list name=\"key_case\">\n       <item>default</item>\n    </list>\n\n    <list name=\"key_loop\">\n       <item>forever</item>\n       <item>repeat</item>\n       <item>while</item>\n       <item>for</item>\n       <item>do</item>\n       <item>foreach</item>\n       <item>break</item>\n       <item>continue</item>\n       <item>return</item>\n    </list>\n\n    <list name=\"key_specify\">\n       <item>pulsestyle_onevent</item>\n       <item>pulsestyle_ondetect</item>\n       <item>noshowcancelled</item>\n       <item>showcancelled</item>\n       <item>ifnone</item>\n    </list>\n\n    <list name=\"key_procblock\">\n       <item>initial</item>\n       <item>final</item>\n       <item>always</item>\n       <item>always_comb</item>\n       <item>always_ff</item>\n       <item>always_latch</item>\n    </list>\n\n    <list name=\"key_contassign\">\n       <item>alias</item>\n       <item>assign</item>\n       <item>force</item>\n       <item>release</item>\n    </list>\n\n    <list name=\"key_event\">\n       <item>posedge</item>\n       <item>negedge</item>\n       <item>edge</item>\n       <item>wait</item>\n       <item>wait_order</item>\n    </list>\n\n    <list name=\"key_time\">\n       <item>timeunit</item>\n       <item>timeprecision</item>\n       <item>s</item>\n       <item>ms</item>\n       <item>ns</item>\n       <item>us</item>\n       <item>ns</item>\n       <item>ps</item>\n       <item>fs</item>\n       <item>step</item>\n    </list>\n\n    <list name=\"key_class\">\n       <item>new</item>\n       <item>extends</item>\n       <item>this</item>\n       <item>super</item>\n       <item>protected</item>\n       <item>local</item>\n       <item>rand</item>\n       <item>randc</item>\n       <item>bind</item>\n    </list>\n\n    <list name=\"key_constraint\">\n       <item>constraint</item>\n       <item>solve</item>\n       <item>before</item>\n       <item>dist</item>\n       <item>inside</item>\n       <item>with</item>\n    </list>\n\n    <list name=\"key_methods\">\n       <item>virtual</item>\n       <item>pure</item>\n       <item>extern</item>\n       <item>forkjoin</item>\n    </list>\n\n    <list name=\"key_config\">\n       <item>design</item>\n       <item>instance</item>\n       <item>cell</item>\n       <item>liblist</item>\n       <item>use</item>\n    </list>\n\n    <list name=\"key_library\">\n       <item>library</item>\n       <item>incdir</item>\n       <item>include</item>\n    </list>\n\n    <list name=\"key_interface\">\n       <item>modport</item>\n    </list>\n\n    <list name=\"key_checker\">\n        <item>sync_accept_on</item>\n        <item>reject_on</item>\n        <item>accept_on</item>\n        <item>sync_reject_on</item>\n        <item>restrict</item>\n        <item>let</item>\n        <item>until</item>\n        <item>until_with</item>\n        <item>unique0</item>\n        <item>eventually</item>\n        <item>s_until</item>\n        <item>s_always</item>\n        <item>s_eventually</item>\n        <item>s_nexttime</item>\n        <item>s_until_with</item>\n        <item>global</item>\n        <item>untyped</item>\n        <item>implies</item>\n        <item>weak</item>\n        <item>strong</item>\n        <item>nexttime</item>\n    </list>\n\n    <list name=\"key_types\">\n       <!-- parameters -->\n       <item>parameter</item>\n       <item>localparam</item>\n       <item>specparam</item>\n       <!-- port direction -->\n       <item>input</item>\n       <item>output</item>\n       <item>inout</item>\n       <item>ref</item>\n       <!-- integer atom type -->\n       <item>byte</item>\n       <item>shortint</item>\n       <item>int</item>\n       <item>integer</item>\n       <item>longint</item>\n       <item>time</item>\n       <!-- integer vector type -->\n       <item>bit</item>\n       <item>logic</item>\n       <item>reg</item>\n       <!-- net type -->\n       <item>supply0</item>\n       <item>supply1</item>\n       <item>tri</item>\n       <item>triand</item>\n       <item>trior</item>\n       <item>trireg</item>\n       <item>tri0</item>\n       <item>tri1</item>\n       <item>wire</item>\n       <item>uwire</item>\n       <item>wand</item>\n       <item>wor</item>\n       <!-- signing -->\n       <item>signed</item>\n       <item>unsigned</item>\n       <!-- noninteger type -->\n       <item>shortreal</item>\n       <item>real</item>\n       <item>realtime</item>\n       <!-- type reference -->\n       <item>type</item>\n       <item>void</item>\n       <!-- struct union -->\n       <item>struct</item>\n       <item>union</item>\n       <item>tagged</item>\n       <!-- modifier -->\n       <item>const</item>\n       <item>var</item>\n       <item>automatic</item>\n       <item>static</item>\n       <item>packed</item>\n       <item>vectored</item>\n       <item>scalared</item>\n       <!-- other types -->\n       <item>typedef</item>\n       <item>enum</item>\n       <item>string</item>\n       <item>chandle</item>\n       <item>event</item>\n       <!-- misc -->\n       <item>null</item>\n    </list>\n\n    <list name=\"key_preprocessor\">\n        <item>`__FILE__</item>\n        <item>`__LINE__</item>\n        <item>`begin_keywords</item>\n        <item>`celldefine</item>\n        <item>`default_nettype</item>\n        <item>`define</item>\n        <item>`else</item>\n        <item>`elsif</item>\n        <item>`end_keywords</item>\n        <item>`endcelldefine</item>\n        <item>`endif</item>\n        <item>`ifdef</item>\n        <item>`ifndef</item>\n        <item>`include</item>\n        <item>`line</item>\n        <item>`nounconnected_drive</item>\n        <item>`pragma</item>\n        <item>`resetall</item>\n        <item>`timescale</item>\n        <item>`unconnected_drive</item>\n        <item>`undef</item>\n        <item>`undefineall</item>\n    </list>\n\n    <list name=\"key_system\">\n        <item>$finish</item>\n        <item>$stop</item>\n        <item>$exit</item>\n        <item>$realtime</item>\n        <item>$stime</item>\n        <item>$time</item>\n        <item>$printtimescale</item>\n        <item>$timeformat</item>\n        <item>$bitstoreal</item>\n        <item>$realtobits</item>\n        <item>$bitstoshortreal</item>\n        <item>$shortrealtobits</item>\n        <item>$itor</item>\n        <item>$rtoi</item>\n        <item>$signed</item>\n        <item>$unsigned</item>\n        <item>$cast</item>\n        <item>$bits</item>\n        <item>$isunbounded</item>\n        <item>$typename</item>\n        <item>$unpacked_dimensions</item>\n        <item>$dimensions</item>\n        <item>$left</item>\n        <item>$right</item>\n        <item>$low</item>\n        <item>$high</item>\n        <item>$increment</item>\n        <item>$size</item>\n        <item>$clog2</item>\n        <item>$asin</item>\n        <item>$ln</item>\n        <item>$acos</item>\n        <item>$log10</item>\n        <item>$atan</item>\n        <item>$exp</item>\n        <item>$atan2</item>\n        <item>$sqrt</item>\n        <item>$hypot</item>\n        <item>$pow</item>\n        <item>$sinh</item>\n        <item>$floor</item>\n        <item>$cosh</item>\n        <item>$ceil</item>\n        <item>$tanh</item>\n        <item>$sin</item>\n        <item>$asinh</item>\n        <item>$cos</item>\n        <item>$acosh</item>\n        <item>$tan</item>\n        <item>$atanh</item>\n        <item>$fatal</item>\n        <item>$error</item>\n        <item>$warning</item>\n        <item>$info</item>\n        <item>$fatal</item>\n        <item>$error</item>\n        <item>$warning</item>\n        <item>$info</item>\n        <item>$asserton</item>\n        <item>$assertoff</item>\n        <item>$assertkill</item>\n        <item>$assertpasson</item>\n        <item>$assertpassoff</item>\n        <item>$assertfailon</item>\n        <item>$assertfailoff</item>\n        <item>$assertnonvacuouson</item>\n        <item>$assertvacuousoff</item>\n        <item>$onehot</item>\n        <item>$onehot0</item>\n        <item>$isunknown</item>\n        <item>$sampled</item>\n        <item>$rose</item>\n        <item>$fell</item>\n        <item>$stable</item>\n        <item>$changed</item>\n        <item>$past</item>\n        <item>$countones</item>\n        <item>$past_gclk</item>\n        <item>$rose_gclk</item>\n        <item>$fell_gclk</item>\n        <item>$stable_gclk</item>\n        <item>$changed_gclk</item>\n        <item>$future_gclk</item>\n        <item>$rising_gclk</item>\n        <item>$falling_gclk</item>\n        <item>$steady_gclk</item>\n        <item>$changing_gclk</item>\n        <item>$coverage_control</item>\n        <item>$coverage_get_max</item>\n        <item>$coverage_get</item>\n        <item>$coverage_merge</item>\n        <item>$coverage_save</item>\n        <item>$get_coverage</item>\n        <item>$set_coverage_db_name</item>\n        <item>$load_coverage_db</item>\n        <item>$random</item>\n        <item>$dist_chi_square</item>\n        <item>$dist_erlang</item>\n        <item>$dist_exponential</item>\n        <item>$dist_normal</item>\n        <item>$dist_poisson</item>\n        <item>$dist_t</item>\n        <item>$dist_uniform</item>\n        <item>$q_initialize</item>\n        <item>$q_add</item>\n        <item>$q_remove</item>\n        <item>$q_full</item>\n        <item>$q_exam</item>\n        <item>$async$and$array</item>\n        <item>$async$and$plane</item>\n        <item>$async$nand$array</item>\n        <item>$async$nand$plane</item>\n        <item>$async$or$array</item>\n        <item>$async$or$plane</item>\n        <item>$async$nor$array</item>\n        <item>$async$nor$plane</item>\n        <item>$sync$and$array</item>\n        <item>$sync$and$plane</item>\n        <item>$sync$nand$array</item>\n        <item>$sync$nand$plane</item>\n        <item>$sync$or$array</item>\n        <item>$sync$or$plane</item>\n        <item>$sync$nor$array</item>\n        <item>$sync$nor$plane</item>\n        <item>$system</item>\n        <item>$display</item>\n        <item>$write</item>\n        <item>$displayb</item>\n        <item>$writeb</item>\n        <item>$displayh</item>\n        <item>$writeh</item>\n        <item>$displayo</item>\n        <item>$writeo</item>\n        <item>$strobe</item>\n        <item>$monitor</item>\n        <item>$strobeb</item>\n        <item>$monitorb</item>\n        <item>$strobeh</item>\n        <item>$monitorh</item>\n        <item>$strobeo</item>\n        <item>$monitoro</item>\n        <item>$monitoroff</item>\n        <item>$monitoron</item>\n        <item>$fclose</item>\n        <item>$fopen</item>\n        <item>$fdisplay</item>\n        <item>$fwrite</item>\n        <item>$fdisplayb</item>\n        <item>$fwriteb</item>\n        <item>$fdisplayh</item>\n        <item>$fwriteh</item>\n        <item>$fdisplayo</item>\n        <item>$fwriteo</item>\n        <item>$fstrobe</item>\n        <item>$fmonitor</item>\n        <item>$fstrobeb</item>\n        <item>$fmonitorb</item>\n        <item>$fstrobeh</item>\n        <item>$fmonitorh</item>\n        <item>$fstrobeo</item>\n        <item>$fmonitoro</item>\n        <item>$swrite</item>\n        <item>$sformat</item>\n        <item>$swriteb</item>\n        <item>$sformatf</item>\n        <item>$swriteh</item>\n        <item>$fgetc</item>\n        <item>$swriteo</item>\n        <item>$ungetc</item>\n        <item>$fscanf</item>\n        <item>$fgets</item>\n        <item>$fread</item>\n        <item>$sscanf</item>\n        <item>$fseek</item>\n        <item>$rewind</item>\n        <item>$fflush</item>\n        <item>$ftell</item>\n        <item>$feof</item>\n        <item>$ferror</item>\n        <item>$readmemb</item>\n        <item>$readmemh</item>\n        <item>$writememb</item>\n        <item>$writememh</item>\n        <item>$test$plusargs</item>\n        <item>$value$plusargs</item>\n        <item>$dumpfile</item>\n        <item>$dumpvars</item>\n        <item>$dumpoff</item>\n        <item>$dumpon</item>\n        <item>$dumpall</item>\n        <item>$dumplimit</item>\n        <item>$dumpflush</item>\n        <item>$dumpports</item>\n        <item>$dumpportsoff</item>\n        <item>$dumpportson</item>\n        <item>$dumpportsall</item>\n        <item>$dumpportslimit</item>\n        <item>$dumpportsflush</item>\n    </list>\n\n    <list name=\"key_gates\">\n       <item>pullup</item>\n       <item>pulldown</item>\n       <item>cmos</item>\n       <item>rcmos</item>\n       <item>nmos</item>\n       <item>pmos</item>\n       <item>rnmos</item>\n       <item>rpmos</item>\n       <item>and</item>\n       <item>nand</item>\n       <item>or</item>\n       <item>nor</item>\n       <item>xor</item>\n       <item>xnor</item>\n       <item>not</item>\n       <item>buf</item>\n       <item>tran</item>\n       <item>rtran</item>\n       <item>tranif0</item>\n       <item>tranif1</item>\n       <item>rtranif0</item>\n       <item>rtranif1</item>\n       <item>bufif0</item>\n       <item>bufif1</item>\n       <item>notif0</item>\n       <item>notif1</item>\n    </list>\n\n    <list name=\"key_strength\">\n       <!-- drive strength -->\n       <item>strong0</item>\n       <item>strong1</item>\n       <item>pull0</item>\n       <item>pull1</item>\n       <item>weak0</item>\n       <item>weak1</item>\n       <item>highz0</item>\n       <item>highz1</item>\n       <!-- charge strength -->\n       <item>small</item>\n       <item>medium</item>\n       <item>large</item>\n    </list>\n    <list name=\"key_stdlib\">\n       <item>randomize</item>\n       <item>mailbox</item>\n       <item>semaphore</item>\n       <item>put</item>\n       <item>get</item>\n       <item>try_put</item>\n       <item>try_get</item>\n       <item>peek</item>\n       <item>try_peek</item>\n       <item>process</item>\n       <item>state</item>\n       <item>self</item>\n       <item>status</item>\n       <item>kill</item>\n       <item>await</item>\n       <item>suspend</item>\n       <item>resume</item>\n       <!-- Array -->\n       <item>size</item>\n       <item>delete</item>\n       <item>insert</item>\n       <item>num</item>\n       <item>first</item>\n       <item>last</item>\n       <item>next</item>\n       <item>prev</item>\n       <item>pop_front</item>\n       <item>pop_back</item>\n       <item>push_front</item>\n       <item>push_back</item>\n       <item>find</item>\n       <item>find_index</item>\n       <item>find_first</item>\n       <item>find_last</item>\n       <item>find_last_index</item>\n       <item>min</item>\n       <item>max</item>\n       <item>unique_index</item>\n       <item>reverse</item>\n       <item>sort</item>\n       <item>rsort</item>\n       <item>shuffle</item>\n       <item>sum</item>\n       <item>product</item>\n       <!-- List_pkg -->\n       <item>List</item>\n       <item>List_Iterator</item>\n       <item>neq</item>\n       <item>eq</item>\n       <item>data</item>\n       <item>empty</item>\n       <item>front</item>\n       <item>back</item>\n       <item>start</item>\n       <item>finish</item>\n       <item>insert_range</item>\n       <item>erase</item>\n       <item>erase_range</item>\n       <item>set</item>\n       <item>swap</item>\n       <item>clear</item>\n       <item>purge</item>\n    </list>\n\n    <list name=\"begin\">\n       <item>begin</item>\n    </list>\n    <list name=\"end\">\n       <item>end</item>\n    </list>\n    <list name=\"package\">\n       <item>package</item>\n    </list>\n    <list name=\"endpackage\">\n       <item>endpackage</item>\n    </list>\n    <list name=\"macromodule\">\n       <item>macromodule</item>\n    </list>\n    <list name=\"module\">\n       <item>module</item>\n    </list>\n    <list name=\"endmodule\">\n       <item>endmodule</item>\n    </list>\n    <list name=\"generate\">\n       <item>generate</item>\n    </list>\n    <list name=\"endgenerate\">\n       <item>endgenerate</item>\n    </list>\n    <list name=\"program\">\n       <item>program</item>\n    </list>\n    <list name=\"endprogram\">\n       <item>endprogram</item>\n    </list>\n    <list name=\"class\">\n       <item>class</item>\n    </list>\n    <list name=\"endclass\">\n       <item>endclass</item>\n    </list>\n    <list name=\"function\">\n       <item>function</item>\n    </list>\n    <list name=\"endfunction\">\n       <item>endfunction</item>\n    </list>\n    <list name=\"case\">\n       <item>case</item>\n    </list>\n    <list name=\"casex\">\n       <item>casex</item>\n    </list>\n    <list name=\"casez\">\n       <item>casez</item>\n    </list>\n    <list name=\"randcase\">\n       <item>randcase</item>\n    </list>\n    <list name=\"endcase\">\n       <item>endcase</item>\n    </list>\n    <list name=\"interface\">\n       <item>interface</item>\n    </list>\n    <list name=\"endinterface\">\n       <item>endinterface</item>\n    </list>\n    <list name=\"clocking\">\n       <item>clocking</item>\n    </list>\n    <list name=\"endclocking\">\n       <item>endclocking</item>\n    </list>\n    <list name=\"task\">\n       <item>task</item>\n    </list>\n    <list name=\"endtask\">\n       <item>endtask</item>\n    </list>\n    <list name=\"primitive\">\n       <item>primitive</item>\n    </list>\n    <list name=\"endprimitive\">\n       <item>endprimitive</item>\n    </list>\n    <list name=\"fork\">\n       <item>fork</item>\n    </list>\n    <list name=\"join\">\n       <item>join</item>\n    </list>\n    <list name=\"join_any\">\n       <item>join_any</item>\n    </list>\n    <list name=\"join_none\">\n       <item>join_none</item>\n    </list>\n    <list name=\"covergroup\">\n       <item>covergroup</item>\n    </list>\n    <list name=\"endgroup\">\n       <item>endgroup</item>\n    </list>\n    <list name=\"checker\">\n       <item>checker</item>\n    </list>\n    <list name=\"endchecker\">\n       <item>endchecker</item>\n    </list>\n    <list name=\"property\">\n       <item>property</item>\n    </list>\n    <list name=\"endproperty\">\n       <item>endproperty</item>\n    </list>\n    <list name=\"randsequence\">\n       <item>randsequence</item>\n    </list>\n    <list name=\"sequence\">\n       <item>sequence</item>\n    </list>\n    <list name=\"endsequence\">\n       <item>endsequence</item>\n    </list>\n    <list name=\"specify\">\n       <item>specify</item>\n    </list>\n    <list name=\"endspecify\">\n       <item>endspecify</item>\n    </list>\n    <list name=\"config\">\n       <item>config</item>\n    </list>\n    <list name=\"endconfig\">\n       <item>endconfig</item>\n    </list>\n    <list name=\"table\">\n       <item>table</item>\n    </list>\n    <list name=\"endtable\">\n       <item>endtable</item>\n    </list>\n    <list name=\"extern\">\n       <item>extern</item>\n    </list>\n    <list name=\"pure\">\n       <item>pure</item>\n    </list>\n    <list name=\"typedef\">\n       <item>typedef</item>\n    </list>\n    <list name=\"import\">\n       <item>import</item>\n    </list>\n\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n        <RegExpr attribute=\"Block Keyword\" context=\"Block Name\" String=\"begin\\ *:\" beginRegion=\"beginEnd\"/>\n        <keyword attribute=\"Method Keyword\" context=\"Extern Context\" String=\"extern\"/>\n        <keyword attribute=\"Method Keyword\" context=\"Extern Context\" String=\"pure\"/>\n        <keyword attribute=\"Method Keyword\" context=\"Extern Context\" String=\"import\"/>\n        <keyword attribute=\"Type Keyword\" context=\"Typedef Context\" String=\"typedef\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"begin\" beginRegion=\"beginEnd\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"end\" endRegion=\"beginEnd\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"package\" beginRegion=\"packageEndpackage\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endpackage\" endRegion=\"packageEndpackage\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"macromodule\" beginRegion=\"moduleEndmodule\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"module\" beginRegion=\"moduleEndmodule\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endmodule\" endRegion=\"moduleEndmodule\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"generate\" beginRegion=\"generateEndgenerate\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endgenerate\" endRegion=\"generateEndgenerate\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"program\" beginRegion=\"programEndprogram\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endprogram\" endRegion=\"programEndprogram\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"class\" beginRegion=\"classEndclass\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endclass\" endRegion=\"classEndclass\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"function\" beginRegion=\"functionEndfunction\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endfunction\" endRegion=\"functionEndfunction\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"case\" beginRegion=\"caseEndcase\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"casex\" beginRegion=\"caseEndcase\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"casez\" beginRegion=\"caseEndcase\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"randcase\" beginRegion=\"caseEndcase\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endcase\" endRegion=\"caseEndcase\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"interface\" beginRegion=\"interfaceEndinterface\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endinterface\" endRegion=\"interfaceEndinterface\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"clocking\" beginRegion=\"clockingEndclocking\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endclocking\" endRegion=\"clockingEndclocking\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"task\" beginRegion=\"taskEndtask\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endtask\" endRegion=\"taskEndtask\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"primitive\" beginRegion=\"primitiveEndprimitive\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endprimitive\" endRegion=\"primitiveEndprimitive\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"fork\" beginRegion=\"forkJoin\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"join\" endRegion=\"forkJoin\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"join_any\" endRegion=\"forkJoin\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"join_none\" endRegion=\"forkJoin\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"covergroup\" beginRegion=\"covergroupEndgroup\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endgroup\" endRegion=\"covergroupEndgroup\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"checker\" beginRegion=\"checkerEndchecker\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endchecker\" endRegion=\"checkerEndchecker\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"property\" beginRegion=\"propertyEndproperty\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endproperty\" endRegion=\"propertyEndproperty\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"randsequence\" beginRegion=\"sequenceEndsequence\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"sequence\" beginRegion=\"sequenceEndsequence\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endsequence\" endRegion=\"sequenceEndsequence\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"specify\" beginRegion=\"specifyEndspecify\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endspecify\" endRegion=\"specifyEndspecify\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"config\" beginRegion=\"configEndconfig\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endconfig\" endRegion=\"configEndconfig\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"table\" beginRegion=\"tableEndtable\"/>\n        <keyword attribute=\"Block Keyword\" context=\"#stay\" String=\"endtable\" endRegion=\"tableEndtable\"/>\n        <keyword attribute=\"Deprecated Keyword\" context=\"#stay\" String=\"key_deprecated\"/>\n        <keyword attribute=\"DPI Keyword\" context=\"#stay\" String=\"key_dpi\"/>\n        <keyword attribute=\"Assert Keyword\" context=\"#stay\" String=\"key_assert\"/>\n        <keyword attribute=\"Coverage Keyword\" context=\"#stay\" String=\"key_coverage\"/>\n        <keyword attribute=\"Generator Keyword\" context=\"#stay\" String=\"key_generator\"/>\n        <keyword attribute=\"Confitional Keyword\" context=\"#stay\" String=\"key_conditional\"/>\n        <keyword attribute=\"Case Keyword\" context=\"#stay\" String=\"key_case\"/>\n        <keyword attribute=\"Loop Keyword\" context=\"#stay\" String=\"key_loop\"/>\n        <keyword attribute=\"Specify Keyword\" context=\"#stay\" String=\"key_specify\"/>\n        <keyword attribute=\"Process Block Keyword\" context=\"#stay\" String=\"key_procblock\"/>\n        <keyword attribute=\"Continuous Assign Keyword\" context=\"#stay\" String=\"key_contassign\"/>\n        <keyword attribute=\"Event Keyword\" context=\"#stay\" String=\"key_event\"/>\n        <keyword attribute=\"Time Keyword\" context=\"#stay\" String=\"key_time\"/>\n        <keyword attribute=\"Class Keyword\" context=\"#stay\" String=\"key_class\"/>\n        <keyword attribute=\"Constraint Keyword\" context=\"#stay\" String=\"key_constraint\"/>\n        <keyword attribute=\"Method Keyword\" context=\"#stay\" String=\"key_methods\"/>\n        <keyword attribute=\"Config Keyword\" context=\"#stay\" String=\"key_config\"/>\n        <keyword attribute=\"Library Keyword\" context=\"#stay\" String=\"key_library\"/>\n        <keyword attribute=\"Interface Keyword\" context=\"#stay\" String=\"key_interface\"/>\n        <keyword attribute=\"Checker Keyword\" context=\"#stay\" String=\"key_checker\"/>\n        <keyword attribute=\"Type Keyword\" context=\"#stay\" String=\"key_types\"/>\n        <keyword attribute=\"Preprocessor Keyword\" context=\"#stay\" String=\"key_preprocessor\"/>\n        <keyword attribute=\"System Task Keyword\" context=\"#stay\" String=\"key_system\"/>\n        <keyword attribute=\"Data Type Keyword\" context=\"#stay\" String=\"key_types\"/>\n        <keyword attribute=\"Drive/Charge Strength Keyword\" context=\"#stay\" String=\"key_strength\"/>\n        <keyword attribute=\"Gate Instantiation Keyword\" context=\"#stay\" String=\"key_gates\"/>\n        <keyword attribute=\"Standard Library\" context=\"#stay\" String=\"key_stdlib\"/>\n\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[\\d_]*'d[\\d_]+\"/>\n        <RegExpr attribute=\"Octal\" context=\"#stay\" String=\"[\\d_]*'o[0-7xXzZ_]+\"/>\n        <RegExpr attribute=\"Hex\" context=\"#stay\" String=\"[\\d_]*'h[\\da-fA-FxXzZ_]+\"/>\n        <RegExpr attribute=\"Binary\" context=\"#stay\" String=\"[\\d_]*'b[01_zZxX]+\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Integer\" context=\"#stay\"/>\n\n        <RegExpr attribute=\"Port Connection\" context=\"#stay\" String=\"[^\\w$]\\.[a-zA-Z]+[\\w$]*\"/>\n\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=+/:;&gt;?[]^{|}~@\"/>\n\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"`\" column=\"0\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"\\`[a-zA-Z_]+\\w*\" />\n        <RegExpr attribute=\"PLI Task\" context=\"#stay\" String=\"\\$[a-zA-Z_]+\\w*\"/>\n        <RegExpr attribute=\"Delay\" context=\"#stay\" String=\"#[\\d_]+\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Extern Context\">\n         <keyword attribute=\"Method Keyword\" context=\"#stay\" String=\"key_methods\"/>\n         <keyword attribute=\"DPI Keyword\" context=\"#stay\" String=\"key_dpi\"/>\n         <keyword attribute=\"Class Keyword\" context=\"#stay\" String=\"key_class\"/>\n\t      <keyword attribute=\"Constraint Keyword\" context=\"#stay\" String=\"key_constraint\"/>\n         <keyword attribute=\"Block Keyword\" context=\"#pop\" String=\"function\"/>\n         <keyword attribute=\"Block Keyword\" context=\"#pop\" String=\"task\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Typedef Context\">\n         <keyword attribute=\"Block Keyword\" context=\"#pop\" String=\"class\"/>\n         <keyword attribute=\"Type Keyword\" context=\"#pop\" String=\"key_types\"/>\n         <keyword attribute=\"Interface Keyword\" context=\"#pop\" String=\"key_interface\"/>\n         <keyword attribute=\"Checker Keyword\" context=\"#pop\" String=\"key_checker\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n     \n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n      \n      <context attribute=\"Block Name\" lineEndContext=\"#pop\" name=\"Block Name\">\n          <RegExpr attribute=\"Data Type Keyword\" context=\"#pop\" String=\"[^ ]+\"/>\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Block Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"DPI Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Assert Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Coverage Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Generator Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Confitional Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Case Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Loop Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Specify Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Process Block Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Continuous Assign Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Event Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Time Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Class Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Constraint Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Method Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Config Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Library Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Interface Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Checker Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Type Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Preprocessor Keyword\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"System Task Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Drive/Charge Strength Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Gate Instantiation Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Decimal\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Binary\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"String\" defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Deprecated Keyword\" defStyleNum=\"dsError\"/>\n      <itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Prep. Lib\" defStyleNum=\"dsFloat\"/>\n      <itemData name=\"PLI Task\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Integer\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Delay\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Block Name\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Port Connection\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Standard Library\" defStyleNum=\"dsOthers\"/>\n      </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/tads3.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- TADS 3 syntax highlight definition for Kate. -->\n<!-- Author: Nikos Chantziaras <realnc@gmail.com> -->\n<language name=\"TADS 3\" section=\"Sources\"\n          version=\"4\" kateversion=\"3.3\"\n          indenter=\"cstyle\"\n          extensions=\"*.t;*.h\"\n          mimetype=\"\"\n          priority=\"0\"\n          author=\"Nikos Chantziaras (realnc@gmail.com)\">\n\n<highlighting>\n\t<list name=\"keywords\">\n\t\t<item>abort</item>\n\t\t<item>and</item>\n\t\t<item>argcount</item>\n\t\t<item>break</item>\n\t\t<item>case</item>\n\t\t<item>catch</item>\n\t\t<item>class</item>\n\t\t<item>construct</item>\n\t\t<item>continue</item>\n\t\t<item>default</item>\n\t\t<item>definingobj</item>\n\t\t<item>delegated</item>\n\t\t<item>dictionary</item>\n\t\t<item>do</item>\n\t\t<item>else</item>\n\t\t<item>enum</item>\n\t\t<item>exit</item>\n\t\t<item>export</item>\n\t\t<item>extern</item>\n\t\t<item>finalize</item>\n\t\t<item>finally</item>\n\t\t<item>for</item>\n\t\t<item>foreach</item>\n\t\t<item>function</item>\n\t\t<item>goto</item>\n\t\t<item>grammar</item>\n\t\t<item>if</item>\n\t\t<item>in</item>\n\t\t<item>inherited</item>\n\t\t<item>intrinsic</item>\n\t\t<item>is</item>\n\t\t<item>local</item>\n\t\t<item>modify</item>\n\t\t<item>new</item>\n\t\t<item>nil</item>\n\t\t<item>not</item>\n\t\t<item>object</item>\n\t\t<item>or</item>\n\t\t<item>property</item>\n\t\t<item>propertyset</item>\n\t\t<item>replace</item>\n\t\t<item>replaced</item>\n\t\t<item>return</item>\n\t\t<item>self</item>\n\t\t<item>static</item>\n\t\t<item>switch</item>\n\t\t<item>targetobj</item>\n\t\t<item>targetprop</item>\n\t\t<item>template</item>\n\t\t<item>throw</item>\n\t\t<item>token</item>\n\t\t<item>transient</item>\n\t\t<item>true</item>\n\t\t<item>try</item>\n\t\t<item>while</item>\n\t</list>\n\n\t<contexts>\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t<Int attribute=\"Decimal\" context=\"#stay\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t<DetectChar attribute=\"ValString\" context=\"ValString\" char=\"'\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"ShortComment\" char=\"/\" char1=\"/\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"LongComment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^{|}~\"/>\n\t\t\t<DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"#\"/>\n\t\t</context>\n\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"&quot;\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"n\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"r\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"t\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"b\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"^\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"v\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\" \"/>\n\t\t\t<Detect2Chars attribute=\"Embedded Expression\" context=\"embedded\" char=\"&lt;\" char1=\"&lt;\"/>\n\t\t\t<DetectChar attribute=\"HTML Tag\" context=\"htmltag\" char=\"&lt;\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t</context>\n\n\t\t<context attribute=\"ValString\" lineEndContext=\"#stay\" name=\"ValString\">\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"'\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"\\\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"n\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"r\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"t\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"b\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"^\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\"v\"/>\n\t\t\t<Detect2Chars attribute=\"Backslash Code\" context=\"#stay\" char=\"\\\" char1=\" \"/>\n\t\t\t<DetectChar attribute=\"HTML Tag\" context=\"htmltag\" char=\"&lt;\"/>\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"ShortComment\">\n\t\t\t<RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"(FIXME|TODO)\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"LongComment\">\n\t\t\t<RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"(FIXME|TODO)\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n\t\t\t<LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n\t\t\t<RangeDetect attribute=\"String\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n\t\t\t<RangeDetect attribute=\"String\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"ShortComment\" char=\"/\" char1=\"/\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"LongComment/Preprocessor\" char=\"/\" char1=\"*\"/>\n\t\t</context>\n\n\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"LongComment/Preprocessor\">\n\t\t\t<RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"(FIXME|TODO)\"/>\n\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n\t\t</context>\n\n\t\t<context name=\"embedded\" attribute=\"Embedded Expression\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars attribute=\"Embedded Expression\" context=\"#pop\" char=\"&gt;\" char1=\"&gt;\"/>\n\t\t</context>\n\n\t\t<context name=\"htmltag\" attribute=\"HTML Tag\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars attribute=\"HTML Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\"/>\n\t\t\t<DetectChar attribute=\"HTML Tag\" context=\"#pop\" char=\"&gt;\"/>\n\t\t</context>\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t<itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n\t\t<itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n\t\t<itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"ValString\" defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t<itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\"/>\n\t\t<itemData name=\"Backslash Code\" defStyleNum=\"dsKeyword\" color=\"#0F0F8F\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\"/>\n\t\t<itemData name=\"HTML Tag\" defStyleNum=\"dsKeyword\" color=\"#0F0F8F\" selColor=\"#ffffff\" bold=\"0\" italic=\"1\"/>\n\t\t<itemData name=\"Embedded Expression\" defStyleNum=\"dsNormal\" color=\"#000000\" selColor=\"#ffffff\" bold=\"0\" italic=\"1\"/>\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"//\"/>\n\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t</comments>\n\n\t<keywords casesensitive=\"1\"/>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/taskjuggler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n    TaskJuggler 2.4.x syntax highlighting.\n    Works for TJ 3.x., too.\n\n    Copyright (C) 2009 Chris Schlaeger <chris@linux.com>\n\n    Minor adaptation for new kate version by\n    Thomas Jarosch <thomas.jarosch@intra2net.com>\n\n    Licensed under the GPLv2.\n-->\n<language name=\"TaskJuggler\" version=\"5\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.tjp;*.tji\" license=\"GPLv2\" author=\"Chris Schlaeger (chris@linux.com)\">\n<highlighting>\n    <list name=\"keywords\">\n        <item>account</item>\n        <item>project</item>\n        <item>task</item>\n        <item>resource</item>\n        <item>shift</item>\n        <item>scenario</item>\n    </list>\n    <list name=\"builtinfuncs\">\n        <item>accountid</item>\n        <item>accountreport</item>\n        <item>accumulate</item>\n        <item>allocate</item>\n        <item>allowredefinitions</item>\n        <item>alternative</item>\n        <item>barlabels</item>\n        <item>booking</item>\n        <item>bookings</item>\n        <item>caption</item>\n        <item>celltext</item>\n        <item>cellurl</item>\n        <item>chart</item>\n        <item>columns</item>\n        <item>completed</item>\n        <item>complete</item>\n        <item>copyright</item>\n        <item>cost</item>\n        <item>credit</item>\n        <item>criticalness</item>\n        <item>csvaccountreport</item>\n        <item>csvresourcereport</item>\n        <item>csvtaskreport</item>\n        <item>currencydigits</item>\n        <item>currencyformat</item>\n        <item>currency</item>\n        <item>customer</item>\n        <item>dailymax</item>\n        <item>dailyworkinghours</item>\n        <item>db</item>\n        <item>depends</item>\n        <item>disabled</item>\n        <item>drawemptycontainersastasks</item>\n        <item>duration</item>\n        <item>efficiency</item>\n        <item>effort</item>\n        <item>empty</item>\n        <item>enabled</item>\n        <item>endbuffer</item>\n        <item>endbufferstart</item>\n        <item>endcredit</item>\n        <item>end</item>\n        <item>endsAfter</item>\n        <item>endsBefore</item>\n        <item>export</item>\n        <item>extend</item>\n        <item>finished</item>\n        <item>flags</item>\n        <item>follows</item>\n        <item>freeload</item>\n        <item>gapduration</item>\n        <item>gaplength</item>\n        <item>headline</item>\n        <item>hideaccount</item>\n        <item>hidecelltext</item>\n        <item>hidecellurl</item>\n        <item>hideresource</item>\n        <item>hidetask</item>\n        <item>hierarchindex</item>\n        <item>hierarchlevel</item>\n        <item>hierarchno</item>\n        <item>htmlaccountreport</item>\n        <item>htmlmonthlycalendar</item>\n        <item>htmlresourcereport</item>\n        <item>htmlstatusreport</item>\n        <item>htmltaskreport</item>\n        <item>htmlweeklycalendar</item>\n        <item>icalreport</item>\n        <item>id</item>\n        <item>include</item>\n        <item>index</item>\n        <item>inherit</item>\n        <item>inprogress</item>\n        <item>journalentry</item>\n        <item>label</item>\n        <item>late</item>\n        <item>length</item>\n        <item>limits</item>\n        <item>load</item>\n        <item>loadunit</item>\n        <item>macro</item>\n        <item>mandatory</item>\n        <item>maxeffort</item>\n        <item>maxend</item>\n        <item>maxstart</item>\n        <item>milestone</item>\n        <item>mineffort</item>\n        <item>minend</item>\n        <item>minstart</item>\n        <item>monthlymax</item>\n        <item>name</item>\n        <item>no</item>\n        <item>note</item>\n        <item>notimestamp</item>\n        <item>notstarted</item>\n        <item>now</item>\n        <item>numberformat</item>\n        <item>ontime</item>\n        <item>optimize</item>\n        <item>order</item>\n        <item>overtime</item>\n        <item>pathcriticalness</item>\n        <item>period</item>\n        <item>period</item>\n        <item>persistent</item>\n        <item>precedes</item>\n        <item>priority</item>\n        <item>profit</item>\n        <item>projectid</item>\n        <item>projectids</item>\n        <item>projection</item>\n        <item>project</item>\n        <item>rate</item>\n        <item>rawhead</item>\n        <item>rawstylesheet</item>\n        <item>rawtail</item>\n        <item>reference</item>\n        <item>resourceid</item>\n        <item>resourcereport</item>\n        <item>resources</item>\n        <item>responsibilities</item>\n        <item>responsible</item>\n        <item>revenue</item>\n        <item>rollupaccount</item>\n        <item>rollupresource</item>\n        <item>rolluptask</item>\n        <item>scenario</item>\n        <item>scenarios</item>\n        <item>scheduled</item>\n        <item>schedule</item>\n        <item>scheduling</item>\n        <item>select</item>\n        <item>separator</item>\n        <item>seqno</item>\n        <item>shorttimeformat</item>\n        <item>showprojectids</item>\n        <item>sloppy</item>\n        <item>sortaccounts</item>\n        <item>sortresources</item>\n        <item>sorttasks</item>\n        <item>startbufferend</item>\n        <item>startbuffer</item>\n        <item>startcredit</item>\n        <item>start</item>\n        <item>startsAfter</item>\n        <item>startsBefore</item>\n        <item>status</item>\n        <item>statusnote</item>\n        <item>strict</item>\n        <item>subtitle</item>\n        <item>subtitleurl</item>\n        <item>supplement</item>\n        <item>table</item>\n        <item>taskattributes</item>\n        <item>taskid</item>\n        <item>taskprefix</item>\n        <item>taskreport</item>\n        <item>taskroot</item>\n        <item>text</item>\n        <item>timeformat</item>\n        <item>timezone</item>\n        <item>timingresolution</item>\n        <item>title</item>\n        <item>titleurl</item>\n        <item>total</item>\n        <item>tree</item>\n        <item>treeLevel</item>\n        <item>url</item>\n        <item>utilization</item>\n        <item>vacation</item>\n        <item>version</item>\n        <item>weekdays</item>\n        <item>weeklymax</item>\n        <item>weekstartsmonday</item>\n        <item>weekstartssunday</item>\n        <item>workinghours</item>\n        <item>xml</item>\n        <item>xmlreport</item>\n        <item>yearlyworkingdays</item>\n    </list>\n    <list name=\"types\">\n        <item>accountid</item>\n        <item>alap</item>\n        <item>all</item>\n        <item>asap</item>\n        <item>baseline</item>\n        <item>completeddown</item>\n        <item>completedup</item>\n        <item>containstask</item>\n        <item>criticalnessdown</item>\n        <item>criticalnessup</item>\n        <item>daily</item>\n        <item>day</item>\n        <item>days</item>\n        <item>enddown</item>\n        <item>endup</item>\n        <item>fri</item>\n        <item>fullnamedown</item>\n        <item>fullnameup</item>\n        <item>hasAssignments</item>\n        <item>hours</item>\n        <item>iddown</item>\n        <item>idup</item>\n        <item>indexdown</item>\n        <item>indexup</item>\n        <item>inprogressearly</item>\n        <item>inprogresslate</item>\n        <item>isAccount</item>\n        <item>isactualallocated</item>\n        <item>isAllocated</item>\n        <item>isAllocatedToProject</item>\n        <item>isAnAccount</item>\n        <item>isAResource</item>\n        <item>isatask</item>\n        <item>isATask</item>\n        <item>isChildOf</item>\n        <item>isDutyOf</item>\n        <item>isLeaf</item>\n        <item>isMilestone</item>\n        <item>isOnCriticalPath</item>\n        <item>isParentOf</item>\n        <item>isplanallocated</item>\n        <item>isResource</item>\n        <item>issubtaskof</item>\n        <item>isTask</item>\n        <item>isTaskOfProject</item>\n        <item>isTaskStatus</item>\n        <item>longauto</item>\n        <item>maxeffortdown</item>\n        <item>maxeffortup</item>\n        <item>maxloaded</item>\n        <item>minallocated</item>\n        <item>mineffortdown</item>\n        <item>mineffortup</item>\n        <item>minloaded</item>\n        <item>minslackrate</item>\n        <item>minutes</item>\n        <item>m</item>\n        <item>mon</item>\n        <item>month</item>\n        <item>monthly</item>\n        <item>months</item>\n        <item>namedown</item>\n        <item>nameup</item>\n        <item>off</item>\n        <item>pathcriticalnessdown</item>\n        <item>pathcriticalnessup</item>\n        <item>prioritydown</item>\n        <item>priorityup</item>\n        <item>properties</item>\n        <item>quarter</item>\n        <item>quarterly</item>\n        <item>random</item>\n        <item>ratedown</item>\n        <item>rateup</item>\n        <item>resourceid</item>\n        <item>responsibledown</item>\n        <item>responsibleup</item>\n        <item>sat</item>\n        <item>sequencedown</item>\n        <item>sequenceup</item>\n        <item>shifts</item>\n        <item>shortauto</item>\n        <item>startbufferend</item>\n        <item>startdown</item>\n        <item>startup</item>\n        <item>statusdown</item>\n        <item>statusup</item>\n        <item>sun</item>\n        <item>tasks</item>\n        <item>thu</item>\n        <item>tue</item>\n        <item>undefined</item>\n        <item>wed</item>\n        <item>week</item>\n        <item>weekly</item>\n        <item>weeks</item>\n        <item>year</item>\n        <item>yearly</item>\n        <item>years</item>\n    </list>\n    <contexts>\n        <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <!-- Date(+Time) values -->\n        <RegExpr attribute=\"Date\" String=\"\\d{4}-\\d{2}-\\d{2}\\S*\"/>\n        <!-- Time values -->\n        <RegExpr attribute=\"Time\" String=\"\\d{1-2}:\\d{2}(:\\d{2}|)\"/>\n        <!-- Duration specifications --> \n        <RegExpr attribute=\"Duration\" String=\"\\d(min|h|d|w|m|y)\"/>\n\n        <!-- keywords and other builtins -->\n        <keyword attribute=\"Builtin Function\" String=\"builtinfuncs\" context=\"#stay\"/>\n        <keyword attribute=\"Keyword\" String=\"keywords\" context=\"#stay\"/>\n        <keyword attribute=\"Data Types\" String=\"types\" context=\"#stay\"/>\n\n        <!-- region (brace) folding -->\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace2\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace2\" />\n\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"[\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"]\" endRegion=\"Brace1\" />\n\n        <!-- number highlighting -->\n        <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n        <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n\n        <!-- strings -->\n        <DetectChar attribute=\"String\" context=\"String1\" char=\"&apos;\"/>\n        <DetectChar attribute=\"String\" context=\"String2\" char=\"&quot;\"/>\n\n        <!-- comments -->\n        <DetectChar attribute=\"Comment\" context=\"Comment1\" char=\"#\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Comment2\" char=\"/\" char1=\"*\"/>\n      </context>\n\n      <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n      </context>\n\n      <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n          <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String1\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&apos;\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String2\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment1\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment2\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Builtin Function\"  defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Data Types\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Date\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Time\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Duration\" defStyleNum=\"dsConstant\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"0\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/tcl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<!-- Authors: Alexander Dederer & JM. Philippe -->\n<!-- Copyright: BSD copyright & Irsid - Arcelor Innovation R&D -->\n<!-- Ported to Kate 2.0/ KWrite 4.0 by Joseph Wenninger (Updated by Simon Robins)-->\n<!--\n    Updated by Pawel Salawa (boogie at scripts dot one dot pl)\n\n    Revision history:\n        1.11:\n            - added new commands of Tcl/tk 8.5, released in 2007\n        1.10:\n            - Fixed problem with single ':' character after variable name (it's no longer variable,\n              because only double-colon is namespace delimiter and can be part of variable name).\n            - Fixed problem with matching quote character next to regular character, for example:\n              puts {\"string\"}\n              In that case left bracked was marked as string, but it's no longer like that.\n            - Fixed problem with variable names like: ${text\\}test}\n              It whole is valid variable name, because of escape character.\n            - Fixed problem with marking ';' character as a comment when '#' character was after the ';'.\n            - Fixed problem with marking options. '-' character after word-delimiter character caused\n              marking that word-delimiter character as option too, even it wasn't white-space.\n            - Few other minor optimalizations.\n\t1.09:\n\t    - Added fast comments support (Ctrl+d or whatever your shortcut is)\n\t    - Fixed single-character variables detection\n\t    - Fixed detection of varaibles with names containing serval namespace delimiters (::)\n-->\n\n<language name=\"Tcl/Tk\" version=\"4\" kateversion=\"2.4\" section=\"Scripts\" extensions=\"*.tcl;*.tk\" mimetype=\"text/x-tcl\" license=\"BSD\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>after</item>\n      <item>append</item>\n      <item>AppleScript</item>\n      <item>argv</item>\n      <item>argc</item>\n      <item>array</item>\n      <item>auto_execk</item>\n      <item>auto_execok</item>\n      <item>auto_import</item>\n      <item>auto_load</item>\n      <item>auto_mkindex</item>\n      <item>auto_mkindex_old</item>\n      <item>auto_path</item>\n      <item>auto_qualify</item>\n      <item>auto_reset</item>\n      <item>beep</item>\n      <item>bell</item>\n      <item>binary</item>\n      <item>bind</item>\n      <item>bindtags</item>\n      <item>bgerror</item>\n      <item>break</item>\n      <item>button</item>\n      <item>canvas</item>\n      <item>case</item>\n      <item>catch</item>\n      <item>cd</item>\n      <item>chan</item>\n      <item>checkbutton</item>\n      <item>clipboard</item>\n      <item>clock</item>\n      <item>close</item>\n      <item>combobox</item>\n      <item>concat</item>\n      <item>console</item>\n      <item>continue</item>\n      <item>dde</item>\n      <item>destroy</item>\n      <item>dict</item>\n      <item>else</item>\n      <item>elseif</item>\n      <item>encoding</item>\n      <item>entry</item>\n      <item>env</item>\n      <item>eof</item>\n      <item>error</item>\n      <item>errorCode</item>\n      <item>errorInfo</item>\n      <item>eval</item>\n      <item>event</item>\n      <item>exec</item>\n      <item>exit</item>\n      <item>expr</item>\n      <item>fblocked</item>\n      <item>fconfigure</item>\n      <item>fcopy</item>\n      <item>file</item>\n      <item>fileevent</item>\n      <item>flush</item>\n      <item>focus</item>\n      <item>font</item>\n      <item>for</item>\n      <item>foreach</item>\n      <item>format</item>\n      <item>frame</item>\n      <item>gets</item>\n      <item>glob</item>\n      <item>global</item>\n      <item>grab</item>\n      <item>grid</item>\n      <item>history</item>\n      <item>if</item>\n      <item>image</item>\n      <item>incr</item>\n      <item>info</item>\n      <item>interp</item>\n      <item>join</item>\n      <item>label</item>\n      <item>labelframe</item>\n      <item>lappend</item>\n      <item>lassign</item>\n      <item>lindex</item>\n      <item>linsert</item>\n      <item>list</item>\n      <item>listbox</item>\n      <item>llength</item>\n      <item>load</item>\n      <item>lower</item>\n      <item>lrange</item>\n      <item>lremove</item>\n      <item>lrepeat</item>\n      <item>lreplace</item>\n      <item>lreverse</item>\n      <item>lsearch</item>\n      <item>lset</item>\n      <item>lsort</item>\n      <item>menu</item>\n      <item>menubutton</item>\n      <item>message</item>\n      <item>namespace</item>\n      <item>notebook</item>\n      <item>open</item>\n      <item>option</item>\n      <item>OptProc</item>\n      <item>pack</item>\n      <item>package</item>\n      <item>panedwindow</item>\n      <item>parray</item>\n      <item>pid</item>\n      <item>place</item>\n      <item>pkg_mkIndex</item>\n      <item>proc</item>\n      <item>progressbar</item>\n      <item>puts</item>\n      <item>pwd</item>\n      <item>radiobutton</item>\n      <item>raise</item>\n      <item>read</item>\n      <item>regexp</item>\n      <item>registry</item>\n      <item>regsub</item>\n      <item>rename</item>\n      <item>resource</item>\n      <item>return</item>\n      <item>scale</item>\n      <item>scan</item>\n      <item>scrollbar</item>\n      <item>seek</item>\n      <item>selection</item>\n      <item>send</item>\n      <item>separator</item>\n      <item>set</item>\n      <item>sizegrip</item>\n      <item>socket</item>\n      <item>source</item>\n      <item>spinbox</item>\n      <item>split</item>\n      <item>string</item>\n      <item>style</item>\n      <item>subst</item>\n      <item>switch</item>\n      <item>tclLog</item>\n      <item>tcl_endOfWord</item>\n      <item>tcl_findLibrary</item>\n      <item>tcl_library</item>\n      <item>tcl_patchLevel</item>\n      <item>tcl_platform</item>\n      <item>tcl_precision</item>\n      <item>tcl_rcFileName</item>\n      <item>tcl_rcRsrcName</item>\n      <item>tcl_startOfNextWord</item>\n      <item>tcl_startOfPreviousWord</item>\n      <item>tcl_traceCompile</item>\n      <item>tcl_traceExec</item>\n      <item>tcl_version</item>\n      <item>tcl_wordBreakAfter</item>\n      <item>tcl_wordBreakBefore</item>\n      <item>tell</item>\n      <item>text</item>\n      <item>time</item>\n      <item>tk</item>\n      <item>tkTabToWindow</item>\n      <item>tkwait</item>\n      <item>tk_chooseColor</item>\n      <item>tk_chooseDirectory</item>\n      <item>tk_focusFollowMouse</item>\n      <item>tk_focusNext</item>\n      <item>tk_focusPrev</item>\n      <item>tk_getOpenFile</item>\n      <item>tk_getSaveFile</item>\n      <item>tk_library</item>\n      <item>tk_menuSetFocus</item>\n      <item>tk_messageBox</item>\n      <item>tk_optionMenu</item>\n      <item>tk_patchLevel</item>\n      <item>tk_popup</item>\n      <item>tk_strictMotif</item>\n      <item>tk_textCopy</item>\n      <item>tk_textCut</item>\n      <item>tk_textPaste</item>\n      <item>tk_version</item>\n      <item>toplevel</item>\n      <item>trace</item>\n      <item>traverseTo</item>\n      <item>treeview</item>\n      <item>unknown</item>\n      <item>unload</item>\n      <item>unset</item>\n      <item>update</item>\n      <item>uplevel</item>\n      <item>upvar</item>\n      <item>variable</item>\n      <item>vwait</item>\n      <item>while</item>\n      <item>winfo</item>\n      <item>wm</item>\n    </list>\n\n    <list name=\"keywords-opt\">\n      <item>add</item>\n      <item>args</item>\n      <item>atime</item>\n      <item>attributes</item>\n      <item>body</item>\n      <item>bytelength</item>\n      <item>cancel</item>\n      <item>channels</item>\n      <item>clicks</item>\n      <item>cmdcount</item>\n      <item>commands</item>\n      <item>compare</item>\n      <item>complete</item>\n      <item>convertfrom</item>\n      <item>convertto</item>\n      <item>copy</item>\n      <item>default</item>\n      <item>delete</item>\n      <item>dirname</item>\n      <item>equal</item>\n      <item>executable</item>\n      <item>exists</item>\n      <item>extension</item>\n      <item>first</item>\n      <item>forget</item>\n      <item>format</item>\n      <item>functions</item>\n      <item>globals</item>\n      <item>hostname</item>\n      <item>idle</item>\n      <item>ifneeded</item>\n      <item>index</item>\n      <item>info</item>\n      <item>is</item>\n      <item>isdirectory</item>\n      <item>isfile</item>\n      <item>join</item>\n      <item>last</item>\n      <item>length</item>\n      <item>level</item>\n      <item>library</item>\n      <item>link</item>\n      <item>loaded</item>\n      <item>locals</item>\n      <item>lstat</item>\n      <item>map</item>\n      <item>match</item>\n      <item>mkdir</item>\n      <item>mtime</item>\n      <item>nameofexecutable</item>\n      <item>names</item>\n      <item>nativename</item>\n      <item>normalize</item>\n      <item>number</item>\n      <item>owned</item>\n      <item>patchlevel</item>\n      <item>pathtype</item>\n      <item>present</item>\n      <item>procs</item>\n      <item>provide</item>\n      <item>range</item>\n      <item>readable</item>\n      <item>readlink</item>\n      <item>remove</item>\n      <item>rename</item>\n      <item>repeat</item>\n      <item>replace</item>\n      <item>require</item>\n      <item>rootname</item>\n      <item>scan</item>\n      <item>script</item>\n      <item>seconds</item>\n      <item>separator</item>\n      <item>sharedlibextension</item>\n      <item>size</item>\n      <item>split</item>\n      <item>stat</item>\n      <item>system</item>\n      <item>tail</item>\n      <item>tclversion</item>\n      <item>tolower</item>\n      <item>totitle</item>\n      <item>toupper</item>\n      <item>trim</item>\n      <item>trimleft</item>\n      <item>trimright</item>\n      <item>type</item>\n      <item>unknown</item>\n      <item>variable</item>\n      <item>vars</item>\n      <item>vcompare</item>\n      <item>vdelete</item>\n      <item>versions</item>\n      <item>vinfo</item>\n      <item>volumes</item>\n      <item>vsatisfies</item>\n      <item>wordend</item>\n      <item>wordstart</item>\n      <item>writable</item>\n\n      <item>activate</item>\n      <item>actual</item>\n      <item>addtag</item>\n      <item>append</item>\n      <item>appname</item>\n      <item>aspect</item>\n      <item>atom</item>\n      <item>atomname</item>\n      <item>bbox</item>\n      <item>bind</item>\n      <item>broadcast</item>\n      <item>canvasx</item>\n      <item>canvasy</item>\n      <item>caret</item>\n      <item>cells</item>\n      <item>cget</item>\n      <item>children</item>\n      <item>class</item>\n      <item>clear</item>\n      <item>client</item>\n      <item>clone</item>\n      <item>colormapfull</item>\n      <item>colormapwindows</item>\n      <item>command</item>\n      <item>configure</item>\n      <item>containing</item>\n      <item>coords</item>\n      <item>create</item>\n      <item>current</item>\n      <item>curselection</item>\n      <item>dchars</item>\n      <item>debug</item>\n      <item>deiconify</item>\n      <item>delta</item>\n      <item>depth</item>\n      <item>deselect</item>\n      <item>dlineinfo</item>\n      <item>dtag</item>\n      <item>dump</item>\n      <item>edit</item>\n      <item>entrycget</item>\n      <item>entryconfigure</item>\n      <item>families</item>\n      <item>find</item>\n      <item>flash</item>\n      <item>focus</item>\n      <item>focusmodel</item>\n      <item>fpixels</item>\n      <item>fraction</item>\n      <item>frame</item>\n      <item>generate</item>\n      <item>geometry</item>\n      <item>get</item>\n      <item>gettags</item>\n      <item>grid</item>\n      <item>group</item>\n      <item>handle</item>\n      <item>height</item>\n      <item>hide</item>\n      <item>iconbitmap</item>\n      <item>iconify</item>\n      <item>iconmask</item>\n      <item>iconname</item>\n      <item>iconposition</item>\n      <item>iconwindow</item>\n      <item>icursor</item>\n      <item>id</item>\n      <item>identify</item>\n      <item>image</item>\n      <item>insert</item>\n      <item>interps</item>\n      <item>inuse</item>\n      <item>invoke</item>\n      <item>ismapped</item>\n      <item>itemcget</item>\n      <item>itemconfigure</item>\n      <item>keys</item>\n      <item>lower</item>\n      <item>manager</item>\n      <item>mark</item>\n      <item>maxsize</item>\n      <item>measure</item>\n      <item>metrics</item>\n      <item>minsize</item>\n      <item>move</item>\n      <item>name</item>\n      <item>nearest</item>\n      <item>overrideredirect</item>\n      <item>own</item>\n      <item>panecget</item>\n      <item>paneconfigure</item>\n      <item>panes</item>\n      <item>parent</item>\n      <item>pathname</item>\n      <item>pixels</item>\n      <item>pointerx</item>\n      <item>pointerxy</item>\n      <item>pointery</item>\n      <item>positionfrom</item>\n      <item>post</item>\n      <item>postcascade</item>\n      <item>postscript</item>\n      <item>protocol</item>\n      <item>proxy</item>\n      <item>raise</item>\n      <item>release</item>\n      <item>reqheight</item>\n      <item>reqwidth</item>\n      <item>resizable</item>\n      <item>rgb</item>\n      <item>rootx</item>\n      <item>rooty</item>\n      <item>scale</item>\n      <item>scaling</item>\n      <item>screen</item>\n      <item>screencells</item>\n      <item>screendepth</item>\n      <item>screenheight</item>\n      <item>screenmmheight</item>\n      <item>screenmmwidth</item>\n      <item>screenvisual</item>\n      <item>screenwidth</item>\n      <item>search</item>\n      <item>see</item>\n      <item>select</item>\n      <item>selection</item>\n      <item>server</item>\n      <item>set</item>\n      <item>show</item>\n      <item>sizefrom</item>\n      <item>stackorder</item>\n      <item>state</item>\n      <item>status</item>\n      <item>tag</item>\n      <item>title</item>\n      <item>toplevel</item>\n      <item>transient</item>\n      <item>types</item>\n      <item>unpost</item>\n      <item>useinputmethods</item>\n      <item>validate</item>\n      <item>values</item>\n      <item>viewable</item>\n      <item>visual</item>\n      <item>visualid</item>\n      <item>visualsavailable</item>\n      <item>vrootheight</item>\n      <item>vrootwidth</item>\n      <item>vrootx</item>\n      <item>vrooty</item>\n      <item>width</item>\n      <item>window</item>\n      <item>windowingsystem</item>\n      <item>withdraw</item>\n      <item>x</item>\n      <item>xview</item>\n      <item>y</item>\n    </list>\n\n    <contexts>\n      <context name = \"Base\" attribute = \"Normal Text\" lineEndContext=\"#stay\">\n      \n        <!-- Virtual blocks -->\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"#\\s*BEGIN.*$\" beginRegion=\"region\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"#\\s*END.*$\" endRegion=\"region\" firstNonSpace=\"true\"/>\n        \n        <!-- Standard -->\n        <keyword String = \"keywords\" attribute = \"Keyword\" context=\"#stay\"/>\n        <keyword String = \"keywords-opt\" attribute = \"Parameter\" context=\"#stay\"/>\n        <Float attribute = \"Float\" context=\"#stay\"/>\n        <Int attribute =\"Decimal\" context=\"#stay\"/>\n        <RegExpr String=\"\\\\.\" attribute = \"Char\" context = \"#stay\"/>\n        \n        <!-- Options -->\n        <RegExpr String = \"\\s-\\w+\" attribute = \"Parameter\" context=\"#stay\"/>\n        \n        <!-- Variables -->\n        <RegExpr String = \"\\$\\{([^\\}]|\\\\\\})+\\}\" attribute = \"Variable\" context=\"#stay\"/>\n        <RegExpr String = \"\\$(::|\\w)+\" attribute = \"Variable\" context=\"#stay\"/>\n        \n        <!-- Strings -->\n        <Detect2Chars char = \"&quot;\" char1 = \"&quot;\" attribute = \"String\" context=\"#stay\"/>\n        <DetectChar char = \"&quot;\" attribute = \"String\" context=\"String\"/>\n        \n        <!-- Comments -->\n        <DetectChar char = \";\" attribute = \"Normal Text\" context=\"New command line\" />\n        <DetectChar char = \"#\" attribute = \"Comment\" context=\"Comment\" firstNonSpace=\"true\"/>\n        \n        <!-- Braces, brackets, etc -->\n        <DetectChar char = \"{\" attribute = \"Keyword\" context=\"#stay\" beginRegion=\"block\"/>\n        <DetectChar char = \"}\" attribute = \"Keyword\" context=\"#stay\" endRegion=\"block\"/>\n        <DetectChar char = \"[\" attribute = \"Keyword\" context=\"#stay\"/>\n        <DetectChar char = \"]\" attribute = \"Keyword\" context=\"#stay\"/>\n        \n      </context>\n\n      <context name = \"String\" attribute = \"String\" lineEndContext=\"#stay\">\n        <RegExpr String=\"\\\\.\" attribute = \"Char\" context = \"#stay\"/>\n        <DetectChar char=\"&quot;\" attribute = \"String\" context = \"#pop\"/>\n        <DetectChar char  = \"$\" attribute = \"Variable\" context=\"#stay\"/>\n      </context>\n\n      <context name = \"Comment\" attribute = \"Comment\" lineEndContext=\"#pop\"/>\n\n      <context name = \"New command line\" attribute = \"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr String = \"\\s*#\" attribute=\"Comment\" context=\"Comment\" />\n        <RegExpr String = \".\" attribute=\"Normal Text\" context=\"#pop\" lookAhead=\"true\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name = \"Normal Text\" defStyleNum = \"dsNormal\"/>\n      <itemData name = \"Keyword\" defStyleNum = \"dsKeyword\"/>\n      <itemData name = \"Decimal\" defStyleNum = \"dsDecVal\"/>\n      <itemData name = \"Float\" defStyleNum = \"dsFloat\"/>\n      <itemData name = \"String\" defStyleNum = \"dsString\"/>\n      <itemData name = \"Comment\" defStyleNum = \"dsComment\"/>\n      <itemData name = \"Parameter\" defStyleNum = \"dsOthers\"/>\n      <itemData name = \"Variable\" defStyleNum = \"dsDataType\"/>\n      <itemData name = \"Char\" defStyleNum=\"dsChar\"/>\n      <itemData name = \"Region Marker\" defStyleNum=\"dsRegionMarker\"/>\n    </itemDatas>\n\n  </highlighting>\n\n  <general>\n    <comments>\n\t<comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/tcsh.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n        <!ENTITY funcname \"[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*\">\n        <!ENTITY varname  \"[A-Za-z_][A-Za-z0-9_]*\">\n        <!ENTITY word     \"[|&amp;;()&lt;&gt;\\s]+\">\t<!-- see man csh -->\n        <!ENTITY eos      \"(?=($|\\s))\">\t\t\t<!-- eol or space following -->\n        <!ENTITY noword   \"(?![\\w$+-])\">\t\t<!-- no word, $, + or - following -->\n        <!ENTITY pathpart \"([\\w_@.&#37;*?+-]|\\\\ )\">     <!-- valid character in a file name -->\n]>\n<language name=\"Tcsh\" version=\"6\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.csh;*.tcsh;csh.cshrc;csh.login;.tcshrc;.cshrc;.login\" mimetype=\"application/x-csh\" casesensitive=\"1\" author=\"Matthew Woehlke (mw_triad@users.sourceforge.net)\" license=\"LGPL\">\n\n<!-- (c) 2006 Matthew Woehlke (mw_triad@users.sourceforge.net)\n    Based on the bash highlighter by Wilbert Berendsen (wilbert@kde.nl)\n    Released under the LGPL -->\n\n  <highlighting>\n    <list name=\"keywords\">\n      <item>function</item>\n      <item>in</item>\n      <item>.</item>\n    </list>\n\n    <list name=\"builtins\">\n      <item>:</item>\n      <item>alias</item>\n      <item>alloc</item>\n      <item>bg</item>\n      <item>bindkey</item>\n      <item>break</item>\n      <item>builtins</item>\n      <item>bye</item>\n      <item>cd</item>\n      <item>chdir</item>\n      <item>complete</item>\n      <item>continue</item>\n      <item>dirs</item>\n      <item>echo</item>\n      <item>echotc</item>\n      <item>eval</item>\n      <item>exec</item>\n      <item>exit</item>\n      <item>fg</item>\n      <item>filetest</item>\n      <item>glob</item>\n      <item>hashstat</item>\n      <item>history</item>\n      <item>hup</item>\n      <item>inlib</item>\n      <item>jobs</item>\n      <item>kill</item>\n      <item>limit</item>\n      <item>log</item>\n      <item>login</item>\n      <item>logout</item>\n      <item>ls-F</item>\n      <item>migrate</item>\n      <item>newgrp</item>\n      <item>nice</item>\n      <item>nohup</item>\n      <item>notify</item>\n      <item>onintr</item>\n      <item>popd</item>\n      <item>printenv</item>\n      <item>pushd</item>\n      <item>rehash</item>\n      <item>repeat</item>\n      <item>sched</item>\n      <item>settc</item>\n      <item>setty</item>\n      <item>shift</item>\n      <item>source</item>\n      <item>stop</item>\n      <item>suspend</item>\n      <item>telltc</item>\n      <item>time</item>\n      <item>umask</item>\n      <item>unalias</item>\n      <item>uncomplete</item>\n      <item>unhash</item>\n      <item>unlimit</item>\n      <item>ver</item>\n      <item>wait</item>\n      <item>watchlog</item>\n      <item>where</item>\n      <item>which</item>\n    </list>\n\n    <list name=\"builtins_var\">\n      <item>unset</item>\n      <item>unsetenv</item>\n    </list>\n\n    <list name=\"unixcommands\">\n      <!-- /bin -->\n      <item>arch</item>\n      <item>awk</item>\n      <item>bash</item>\n      <item>bunzip2</item>\n      <item>bzcat</item>\n      <item>bzcmp</item>\n      <item>bzdiff</item>\n      <item>bzegrep</item>\n      <item>bzfgrep</item>\n      <item>bzgrep</item>\n      <item>bzip2</item>\n      <item>bzip2recover</item>\n      <item>bzless</item>\n      <item>bzmore</item>\n      <item>cat</item>\n      <item>chattr</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chown</item>\n      <item>chvt</item>\n      <item>cp</item>\n      <item>date</item>\n      <item>dd</item>\n      <item>deallocvt</item>\n      <item>df</item>\n      <item>dir</item>\n      <item>dircolors</item>\n      <item>dmesg</item>\n      <item>dnsdomainname</item>\n      <item>domainname</item>\n      <item>du</item>\n      <item>dumpkeys</item>\n      <item>echo</item>\n      <item>ed</item>\n      <item>egrep</item>\n      <item>false</item>\n      <item>fgconsole</item>\n      <item>fgrep</item>\n      <item>fuser</item>\n      <item>gawk</item>\n      <item>getkeycodes</item>\n      <item>gocr</item>\n      <item>grep</item>\n      <item>groff</item>\n      <item>groups</item>\n      <item>gunzip</item>\n      <item>gzexe</item>\n      <item>gzip</item>\n      <item>hostname</item>\n      <item>igawk</item>\n      <item>install</item>\n      <item>kbd_mode</item>\n      <item>kbdrate</item>\n      <item>killall</item>\n      <item>last</item>\n      <item>lastb</item>\n      <item>link</item>\n      <item>ln</item>\n      <item>loadkeys</item>\n      <item>loadunimap</item>\n      <item>login</item>\n      <item>ls</item>\n      <item>lsattr</item>\n      <item>lsmod</item>\n      <item>lsmod.old</item>\n      <item>mapscrn</item>\n      <item>mesg</item>\n      <item>mkdir</item>\n      <item>mkfifo</item>\n      <item>mknod</item>\n      <item>mktemp</item>\n      <item>more</item>\n      <item>mount</item>\n      <item>mv</item>\n      <item>nano</item>\n      <item>netstat</item>\n      <item>nisdomainname</item>\n      <item>nroff</item>\n      <item>openvt</item>\n      <item>pgawk</item>\n      <item>pidof</item>\n      <item>ping</item>\n      <item>ps</item>\n      <item>pstree</item>\n      <item>pwd</item>\n      <item>rbash</item>\n      <item>readlink</item>\n      <item>red</item>\n      <item>resizecons</item>\n      <item>rm</item>\n      <item>rmdir</item>\n      <item>run-parts</item>\n      <item>sash</item>\n      <item>sed</item>\n      <item>setfont</item>\n      <item>setkeycodes</item>\n      <item>setleds</item>\n      <item>setmetamode</item>\n      <item>setserial</item>\n      <item>sh</item>\n      <item>showkey</item>\n      <item>shred</item>\n      <item>sleep</item>\n      <item>ssed</item>\n      <item>stat</item>\n      <item>stty</item>\n      <item>su</item>\n      <item>sync</item>\n      <item>tar</item>\n      <item>tempfile</item>\n      <item>touch</item>\n      <item>troff</item>\n      <item>true</item>\n      <item>umount</item>\n      <item>uname</item>\n      <item>unicode_start</item>\n      <item>unicode_stop</item>\n      <item>unlink</item>\n      <item>utmpdump</item>\n      <item>uuidgen</item>\n      <item>vdir</item>\n      <item>wall</item>\n      <item>wc</item>\n      <item>ypdomainname</item>\n      <item>zcat</item>\n      <item>zcmp</item>\n      <item>zdiff</item>\n      <item>zegrep</item>\n      <item>zfgrep</item>\n      <item>zforce</item>\n      <item>zgrep</item>\n      <item>zless</item>\n      <item>zmore</item>\n      <item>znew</item>\n      <item>zsh</item>\n\n      <!-- some from /usr/bin -->\n      <item>aclocal</item>\n      <item>aconnect</item>\n      <item>aplay</item>\n      <item>apm</item>\n      <item>apmsleep</item>\n      <item>apropos</item>\n      <item>ar</item>\n      <item>arecord</item>\n      <item>as</item>\n      <item>as86</item>\n      <item>autoconf</item>\n      <item>autoheader</item>\n      <item>automake</item>\n      <item>awk</item>\n      <item>basename</item>\n      <item>bc</item>\n      <item>bison</item>\n      <item>c++</item>\n      <item>cal</item>\n      <item>cat</item>\n      <item>cc</item>\n      <item>cdda2wav</item>\n      <item>cdparanoia</item>\n      <item>cdrdao</item>\n      <item>cd-read</item>\n      <item>cdrecord</item>\n      <item>chfn</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chown</item>\n      <item>chroot</item>\n      <item>chsh</item>\n      <item>clear</item>\n      <item>cmp</item>\n      <item>co</item>\n      <item>col</item>\n      <item>comm</item>\n      <item>cp</item>\n      <item>cpio</item>\n      <item>cpp</item>\n      <item>cut</item>\n      <item>dc</item>\n      <item>dd</item>\n      <item>df</item>\n      <item>diff</item>\n      <item>diff3</item>\n      <item>dir</item>\n      <item>dircolors</item>\n      <item>directomatic</item>\n      <item>dirname</item>\n      <item>du</item>\n      <item>env</item>\n      <item>expr</item>\n      <item>fbset</item>\n      <item>file</item>\n      <item>find</item>\n      <item>flex</item>\n      <item>flex++</item>\n      <item>fmt</item>\n      <item>free</item>\n      <item>ftp</item>\n      <item>funzip</item>\n      <item>fuser</item>\n      <item>g++</item>\n      <item>gawk</item>\n      <item>gc</item>\n      <item>gcc</item>\n      <item>gdb</item>\n      <item>getent</item>\n      <item>getopt</item>\n      <item>gettext</item>\n      <item>gettextize</item>\n      <item>gimp</item>\n      <item>gimp-remote</item>\n      <item>gimptool</item>\n      <item>gmake</item>\n      <item>gs</item>\n      <item>head</item>\n      <item>hexdump</item>\n      <item>id</item>\n      <item>install</item>\n      <item>join</item>\n      <item>kill</item>\n      <item>killall</item>\n      <item>ld</item>\n      <item>ld86</item>\n      <item>ldd</item>\n      <item>less</item>\n      <item>lex</item>\n      <item>ln</item>\n      <item>locate</item>\n      <item>lockfile</item>\n      <item>logname</item>\n      <item>lp</item>\n      <item>lpr</item>\n      <item>ls</item>\n      <item>lynx</item>\n      <item>m4</item>\n      <item>make</item>\n      <item>man</item>\n      <item>mkdir</item>\n      <item>mknod</item>\n      <item>msgfmt</item>\n      <item>mv</item>\n      <item>namei</item>\n      <item>nasm</item>\n      <item>nawk</item>\n      <item>nice</item>\n      <item>nl</item>\n      <item>nm</item>\n      <item>nm86</item>\n      <item>nmap</item>\n      <item>nohup</item>\n      <item>nop</item>\n      <item>od</item>\n      <item>passwd</item>\n      <item>patch</item>\n      <item>pcregrep</item>\n      <item>pcretest</item>\n      <item>perl</item>\n      <item>perror</item>\n      <item>pidof</item>\n      <item>pr</item>\n      <item>printf</item>\n      <item>procmail</item>\n      <item>prune</item>\n      <item>ps2ascii</item>\n      <item>ps2epsi</item>\n      <item>ps2frag</item>\n      <item>ps2pdf</item>\n      <item>ps2ps</item>\n      <item>psbook</item>\n      <item>psmerge</item>\n      <item>psnup</item>\n      <item>psresize</item>\n      <item>psselect</item>\n      <item>pstops</item>\n      <item>rcs</item>\n      <item>rev</item>\n      <item>rm</item>\n      <item>scp</item>\n      <item>sed</item>\n      <item>seq</item>\n      <item>setterm</item>\n      <item>shred</item>\n      <item>size</item>\n      <item>size86</item>\n      <item>skill</item>\n      <item>slogin</item>\n      <item>snice</item>\n      <item>sort</item>\n      <item>sox</item>\n      <item>split</item>\n      <item>ssh</item>\n      <item>ssh-add</item>\n      <item>ssh-agent</item>\n      <item>ssh-keygen</item>\n      <item>ssh-keyscan</item>\n      <item>stat</item>\n      <item>strings</item>\n      <item>strip</item>\n      <item>sudo</item>\n      <item>suidperl</item>\n      <item>sum</item>\n      <item>tac</item>\n      <item>tail</item>\n      <item>tee</item>\n      <item>test</item>\n      <item>tr</item>\n      <item>uniq</item>\n      <item>unlink</item>\n      <item>unzip</item>\n      <item>updatedb</item>\n      <item>updmap</item>\n      <item>uptime</item>\n      <item>users</item>\n      <item>vmstat</item>\n      <item>w</item>\n      <item>wc</item>\n      <item>wget</item>\n      <item>whatis</item>\n      <item>whereis</item>\n      <item>which</item>\n      <item>who</item>\n      <item>whoami</item>\n      <item>write</item>\n      <item>xargs</item>\n      <item>yacc</item>\n      <item>yes</item>\n      <item>zip</item>\n      <item>zsoelim</item>\n\n      <!-- others -->\n      <item>dcop</item>\n      <item>kdialog</item>\n      <item>kfile</item>\n      <item>xhost</item>\n      <item>xmodmap</item>\n      <item>xset</item>\n    </list>\n\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Start\">\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n<!-- ====== The following rulessets are meant to be included ======== -->\n      <!-- FindAll tries to interpret everything -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindAll\">\n        <IncludeRules context=\"FindComments\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- FindMost tries to interpret anything except commands -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindMost\">\n        <IncludeRules context=\"FindComments\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n\n      <!-- FindComments consumes shell comments till EOL -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindComments\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"Comment\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->\n<!--      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindCommentsParen\">\n        <DetectChar attribute=\"Comment\" context=\"CommentParen\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"CommentParen\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentParen\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"[^)](?=\\))\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context> -->\n\n      <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindCommentsBackq\">\n        <DetectChar attribute=\"Comment\" context=\"CommentBackq\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"CommentBackq\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentBackq\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"[^`](?=`)\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n\n      <!-- breaksw case default if else end endif endsw foreach goto\n           set setenv switch while -->\n\n      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindCommands\">\n        <!-- start expression in double parentheses -->\n<!--!--><Detect2Chars attribute=\"Keyword\" context=\"ExprDblParen\" char=\"(\" char1=\"(\" beginRegion=\"expression\" />\n        <!-- start expression in single brackets -->\n<!--!--><RegExpr attribute=\"Builtin\" context=\"ExprBracket\" String=\"\\[&eos;\" beginRegion=\"expression\" column=\"0\"/>\n<!--!--><RegExpr attribute=\"Builtin\" context=\"ExprBracket\" String=\"\\s\\[&eos;\" beginRegion=\"expression\" />\n        <!-- start a group command with { -->\n<!--!--><RegExpr attribute=\"Keyword\" context=\"Group\" String=\"\\{&eos;\" beginRegion=\"group\" />\n        <!-- start a subshell -->\n<!--!--><DetectChar attribute=\"Keyword\" context=\"SubShell\" char=\"(\" beginRegion=\"subshell\" />\n        <!-- match do and if blocks -->\n<!--!--><RegExpr attribute=\"Control Flow\" context=\"If\" String=\"\\bif&noword;\" />\n<!--!--><RegExpr attribute=\"Control Flow\" context=\"ElseIf\" String=\"\\belse\\s+if&noword;\" />\n<!--!--><RegExpr attribute=\"Control Flow\" context=\"#stay\" String=\"\\belse&noword;\" />\n<!--!--><RegExpr attribute=\"Control Flow\" context=\"#stay\" String=\"\\bendif&noword;\" endRegion=\"if\" />\n        <!-- handle switch as a special case -->\n<!--!--><RegExpr attribute=\"Control Flow\" context=\"Switch\" String=\"\\bswitch&noword;\" beginRegion=\"switch\" />\n<!--!--><RegExpr attribute=\"Control Flow\" context=\"#stay\" String=\"\\b(foreach|while)&noword;\" beginRegion=\"loop\" />\n<!--!--><RegExpr attribute=\"Control Flow\" context=\"#stay\" String=\"\\bend&noword;\" endRegion=\"loop\" />\n        <!-- handle command line options -->\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"-[A-Za-z0-9][A-Za-z0-9_]*\" />\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"--[a-z][A-Za-z0-9_-]*\" />\n        <!-- handle variable assignments -->\n<!--R--><RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\b@\\s\" />\n<!--R--><WordDetect attribute=\"Keyword\" context=\"#stay\" String=\"set\" />\n        <WordDetect attribute=\"Keyword\" context=\"CmdSetEnv\" String=\"setenv\" />\n        <!-- handle functions with function keyword before keywords -->\n<!--!--><StringDetect attribute=\"Function\" context=\"#stay\" String=\":()\" />\n<!--!--><WordDetect attribute=\"Keyword\" context=\"FunctionDef\" String=\"function\" />\n        <!-- handle keywords -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"builtins\" />\n        <keyword attribute=\"Command\" context=\"#stay\" String=\"unixcommands\" />\n        <!-- handle commands that have variable names as argument -->\n        <keyword attribute=\"Builtin\" context=\"VarName\" String=\"builtins_var\" />\n        <!-- handle redirection -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"(&lt;&lt;?|&gt;&gt;?&amp;?!?)\" />\n        <!-- handle &, &&, | and || -->\n        <RegExpr attribute=\"Control\" context=\"#stay\" String=\"([|&amp;])\\1?\" />\n        <!-- mark function definitions without function keyword -->\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"&funcname;\\s*\\(\\)\" />\n      </context>\n\n      <!-- FindOthers contains various rules to mark different shell input -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindOthers\">\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\[;&quot;\\\\'$`{}()|&amp;&lt;&gt;* ]\" />\n<!--?   <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\{(?!(\\s|$))\\S*\\}\" />-->\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"&pathpart;*(?=/)\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"~\\w*\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"/&pathpart;*(?=([\\s/):;$`'&quot;]|$))\" />\n        <!-- TODO: shell globs -->\n      </context>\n\n      <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindStrings\">\n        <DetectChar attribute=\"String SingleQ\" context=\"StringSQ\" char=\"'\" />\n        <DetectChar attribute=\"String DoubleQ\" context=\"StringDQ\" char=\"&quot;\" />\n        <Detect2Chars attribute=\"String SingleQ\" context=\"StringEsc\" char=\"$\" char1=\"'\" />\n        <Detect2Chars attribute=\"String Transl.\" context=\"StringDQ\" char=\"$\" char1=\"&quot;\" />\n      </context>\n\n      <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindSubstitutions\">\n        <RegExpr attribute=\"Variable\" context=\"Subscript\" String=\"\\$&varname;\\[\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[*@#?$!_0-9-]\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{[*@#?$!_0-9-]\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{#&varname;\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{!&varname;\\*?\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"VarBrace\" String=\"\\$\\{&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"VarBrace\" String=\"\\$\\{[*@#?$!_0-9-](?=[:#%/])\" />\n        <StringDetect attribute=\"Variable\" context=\"ExprDblParenSubst\" String=\"$((\" beginRegion=\"expression\" />\n<!--?   <StringDetect attribute=\"Redirection\" context=\"SubstFile\" String=\"$(&lt;\" />-->\n<!--?   <StringDetect attribute=\"Variable\" context=\"SubstCommand\" String=\"$(\" />-->\n        <DetectChar attribute=\"Backquote\" context=\"SubstBackq\" char=\"`\" />\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\[`$\\\\]\" />\n      </context>\n\n      <!-- FindTests finds operators valid in tests -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindTests\">\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-[rwxXeozsfdlbcpSugktRLDIFNZ](?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-[AMCUG]:?(?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-P[0-7]{,3}:?(?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"[=!][~=]|[*>&lt;!~]\"/>\n      </context>\n\n\n<!-- ====== These are the contexts that can be branched to ======= -->\n\n      <!-- ExprDblParen consumes an expression started in command mode till )) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblParen\">\n        <Detect2Chars attribute=\"Keyword\" context=\"#pop\" char=\")\" char1=\")\" endRegion=\"expression\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblParenSubst\">\n        <Detect2Chars attribute=\"Variable\" context=\"#pop\" char=\")\" char1=\")\" endRegion=\"expression\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprSubParen consumes an expression till ) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprSubParen\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprBracket consumes an expression till ] -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprBracket\">\n        <RegExpr attribute=\"Builtin\" context=\"#pop\" String=\"\\s\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" />\n        <RegExpr attribute=\"Builtin\" context=\"#pop\" String=\"\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" column=\"0\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindTests\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- Group consumes shell input till } -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Group\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"}\" endRegion=\"group\" />\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- SubShell consumes shell input till ) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubShell\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\")\" endRegion=\"subshell\" />\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- Assign consumes an expression till EOL or whitespace -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Assign\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Variable\" context=\"AssignArray\" char=\"(\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\w:,+_./-]+\" />\n      </context>\n\n      <!-- AssignArray consumes everything till ), marking assignments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"AssignArray\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\")\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- Subscript consumes anything till ], marks as Variable -->\n      <context attribute=\"Variable\" lineEndContext=\"#stay\" name=\"Subscript\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\"]\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->\n      <context attribute=\"Function\" lineEndContext=\"#pop\" name=\"FunctionDef\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\s+&funcname;(\\s*\\(\\))?\" />\n      </context>\n\n      <!-- CmdSetEnv handles the name part of setenv -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"CmdSetEnv\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- handle command line options -->\n        <RegExpr attribute=\"Variable\" context=\"#pop\" String=\"\\b&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"Assign\" String=\"\\s\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- VarName consumes spare variable names and assignments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"VarName\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- handle command line options -->\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"-[A-Za-z0-9]+\" />\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"--[a-z][A-Za-z0-9_-]*\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\b&varname;\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindMost\" />\n        <!-- stay here in spaces and other safe characters -->\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[^]})|;`&amp;&gt;&lt;]\" />\n      </context>\n\n      <!-- StringSQ consumes anything till ' -->\n      <context attribute=\"String SingleQ\" lineEndContext=\"#stay\" name=\"StringSQ\">\n        <DetectChar attribute=\"String SingleQ\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- StringDQ consumes anything till \", substitutes vars and expressions -->\n      <context attribute=\"String DoubleQ\" lineEndContext=\"#stay\" name=\"StringDQ\">\n        <DetectChar attribute=\"String DoubleQ\" context=\"#pop\" char=\"&quot;\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\[`&quot;\\\\$\\n]\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- StringEsc eats till ', but escaping many characters -->\n      <context attribute=\"String SingleQ\" lineEndContext=\"#stay\" name=\"StringEsc\">\n        <DetectChar attribute=\"String SingleQ\" context=\"#pop\" char=\"'\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\[abefnrtv\\\\']\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)\" />\n      </context>\n\n      <!-- VarBrace is called as soon as ${xxx is encoutered -->\n      <context attribute=\"Variable\" lineEndContext=\"#stay\" name=\"VarBrace\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\"}\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <!-- TODO: highlight various special parameter expansions } -->\n      </context>\n\n      <!-- SubstFile is called after a <( or >( is encoutered -->\n<!--      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstFile\">\n        <DetectChar attribute=\"Redirection\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n-->\n      <!-- SubstCommand is called after a $( is encountered -->\n<!--      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstCommand\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n-->\n\n      <!-- SubstBackq is called when a backquote is encountered -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstBackq\">\n        <DetectChar attribute=\"Backquote\" context=\"#pop\" char=\"`\" />\n        <IncludeRules context=\"FindCommentsBackq\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- Switch is called after the switch keyword is encoutered. This is\n           left over from the bash highlighter where the lonely parentheses\n           would otherwise cause trouble. We keep it because it lets us do a\n           bit of extra syntax validation. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Switch\">\n        <RegExpr attribute=\"Keyword\" context=\"SwitchCase\" String=\"\\scase\\b\" />\n        <RegExpr attribute=\"Keyword\" context=\"SwitchDefault\" String=\"\\sdefault\\b\" />\n        <RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"\\bendsw(?=$|[\\s;)])\" endRegion=\"switch\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"If\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Keyword\" context=\"ArithmeticCondition\" char=\"(\" beginRegion=\"cond\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <StringDetect attribute=\"Control Flow\" context=\"#pop\" String=\"then\" beginRegion=\"if\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"ElseIf\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces/>\n        <DetectChar attribute=\"Keyword\" context=\"ArithmeticCondition\" char=\"(\" beginRegion=\"cond\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <StringDetect attribute=\"Control Flow\" context=\"#pop\" String=\"then\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ArithmeticCondition\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\")\" endRegion=\"cond\" />\n        <DetectChar attribute=\"Keyword\" context=\"ArithmeticCondition\" char=\"(\" beginRegion=\"cond\" />\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"[=!]~|[=!>&lt;]=\"/>\n        <AnyChar attribute=\"Expression\" context=\"#stay\" String=\"|^&amp;>&lt;+-*/%!~\"/>\n        <IncludeRules context=\"FindComments\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- SwitchCase is called when the construct 'switch ... case' has been found. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SwitchCase\">\n        <DetectChar attribute=\"Keyword\" context=\"SwitchExpr\" char=\":\" beginRegion=\"switchexpr\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- SwitchDefault is called when the construct 'switch ... default' has been found. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SwitchDefault\">\n        <DetectChar attribute=\"Keyword\" context=\"SwitchExpr\" char=\":\" beginRegion=\"switchexpr\" />\n      </context>\n\n      <!-- SwitchExpr eats shell input till breaksw -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SwitchExpr\">\n        <RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"\\sbreaksw\\b\" endRegion=\"switchexpr\" />\n        <RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"\\scase\\b\" endRegion=\"switchexpr\" lookAhead=\"true\" />\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"\tdefStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"\t\tdefStyleNum=\"dsComment\" />\n      <itemData name=\"Control Flow\" \tdefStyleNum=\"dsControlFlow\" spellChecking=\"false\" />\n      <itemData name=\"Keyword\" \t\tdefStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Control\" \t\tdefStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Builtin\" \t\tdefStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Command\" \t\tdefStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Redirection\" \tdefStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"Escape\" \t\tdefStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"String SingleQ\" \tdefStyleNum=\"dsString\" />\n      <itemData name=\"String DoubleQ\" \tdefStyleNum=\"dsString\" />\n      <itemData name=\"Backquote\" \tdefStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"String Transl.\" \tdefStyleNum=\"dsString\" spellChecking=\"false\" />\n      <itemData name=\"String Escape\" \tdefStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"Variable\" \tdefStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"Expression\" \tdefStyleNum=\"dsOthers\" spellChecking=\"false\" />\n      <itemData name=\"Function\" \tdefStyleNum=\"dsFunction\" spellChecking=\"false\" />\n      <itemData name=\"Path\" \t\tdefStyleNum=\"dsNormal\" spellChecking=\"false\" />\n      <itemData name=\"Option\" \t\tdefStyleNum=\"dsNormal\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"^%#[]$._{}:-\" additionalDeliminator=\"`\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/template-toolkit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n          [\n          <!ENTITY var1    \"\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\.\\-]*(\\[[a-zA-Z0-9_]*\\])*\">\n          <!ENTITY varwithbraces \"\\$\\{[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\.\\-]*(\\[[a-zA-Z0-9_]*\\])*\\}\">\n]>\n<!--\n    Copyright (C) 2007 Красимир Беров <k.berov@gmail.com>\n    Put this file in your $KDEDIR/share/apps/katepart/syntax,\n    then restart Кate/KDevelop/Quanta... whatever using katepart.\n    That's it. You have Template Toolkit Syntax highliting.\n    Enjoy!!!\n    \n    -->\n    <!--\n    Changelog :)\n    0.02 Added highliting for interpolated variables\n        -->\n<language version=\"5\" kateversion=\"5.0\"\n          author=\"Красимир Беров (k.berov@gmail.com)\" license=\"Artistic\"\n          name=\"TT2\" section=\"Markup\" extensions=\"*.tt*;\" casesensitive=\"true\">\n<highlighting>\n    <list name=\"control structures\">\n        <!-- Template directives -->\n        <item>SET</item>\n        <item>GET</item>\n        <item>CALL</item>\n        <item>DEFAULT</item>\n        <item>IF</item>\n        <item>ELSIF</item>\n        <item>ELSE</item>\n        <item>UNLESS</item>\n        <item>LAST</item>\n        <item>NEXT</item>\n        <item>FOR</item>\n        <item>FOREACH</item>\n        <item>WHILE</item>\n        <item>SWITCH</item>\n        <item>CASE</item>\n        <item>PROCESS</item>\n        <item>INCLUDE</item>\n        <item>INSERT</item>\n        <item>WRAPPER</item>\n        <item>BLOCK</item>\n        <item>MACRO</item>\n        <item>END</item>\n        <item>USE</item>\n        <item>IN</item>\n        <item>FILTER</item>\n        <item>TRY</item>\n        <item>THROW</item>\n        <item>CATCH</item>\n        <item>FINAL</item>\n        <item>META</item>\n        <item>TAGS</item>\n        <item>DEBUG</item>\n        <item>PERL</item>\n    </list>\n    <list name=\"keywords\">\n        <!-- Compile Time Constant Folding -->\n        <item>constants</item>\n        <!-- Special Variables -->\n        <item>template</item>\n        <item>component</item>\n        <item>loop</item>\n        <item>error</item>\n        <item>content</item>\n    </list>\n    <list name=\"functions\">\n        <!-- VMethods -->\n        <!-- Scalar Virtual Methods -->\n        <item>defined</item>\n        <item>length</item>\n        <item>repeat</item>\n        <item>replace</item>\n        <item>match</item>\n        <item>search</item>\n        <item>split</item>\n        <item>chunk</item>\n        <item>list</item>\n        <item>hash</item>\n        <item>size</item>\n        <!-- Hash Virtual Methods -->\n        <item>keys</item>\n        <item>values</item>\n        <item>each</item>\n        <item>sort</item>\n        <item>nsort</item>\n        <item>import</item>\n        <item>defined</item>\n        <item>exists</item>\n        <item>item</item>\n        <!-- List Virtual Methods -->\n        <item>first</item>\n        <item>last</item>\n        <item>max</item>\n        <item>reverse</item>\n        <item>join</item>\n        <item>grep</item>\n        \n        <item>unshift</item>\n        <item>push</item>\n        <item>shift</item>\n        <item>pop</item>\n        <item>unique</item>\n        <item>merge</item>\n        <item>slice</item>\n        <item>splice</item>\n        <item>count</item>\n        <!-- Standard filters -->\n        <item>format</item>\n        <item>upper</item>\n        <item>lower</item>\n        <item>ucfirst</item>\n        <item>lcfirst</item>\n        <item>trim</item>\n        <item>collapse</item>\n        <item>html</item>\n        <item>html_entity</item>\n        <item>html_para</item>\n        <item>html_break</item>\n        <item>html_para_break</item>\n        <item>html_line_break</item>\n        <item>uri</item>\n        <item>url</item>\n        <item>indent</item>\n        <item>truncate</item>\n        <item>repeat</item>\n        <item>remove</item>\n        <item>replace</item>\n        <item>redirect</item>\n        <item>eval</item>\n        <item>evaltt</item>\n        <item>perl</item>\n        <item>evalperl</item>\n        <item>stdout</item>\n        <item>stderr</item>\n        <item>null</item>\n        <item>latex</item>\n    </list>\n    <list name=\"operators\">\n        <item>=</item>\n        <item>!=</item>\n        <item>~=</item>\n        <item>+=</item>\n        <item>-=</item>\n        <item>*=</item>\n        <item>/=</item>\n        <item>**=</item>\n        <item>|=</item>\n        <item>||=</item>\n        <item>&amp;=</item>\n        <item>&amp;&amp;=</item>\n        <item>?=</item>\n        <item>+</item>\n        <item>-</item>\n        <item>*</item>\n        <!-- <item>/</item>//-->\n        <item>%</item>\n        <item>||</item>\n        <item>&amp;&amp;</item>\n        <item>|</item>\n        <item>&amp;</item>\n        <item>&lt;</item>\n        <item>&lt;&lt;</item>\n        <item>&gt;</item>\n        <item>&gt;&gt;</item>\n        <item>^</item>\n        <item>-&gt;</item>\n        <item>=&gt;</item>\n        <item>.</item>\n        <item>,</item>\n        <item>;</item>\n        <item>::</item>\n        <item>\\</item>\n        <item>and</item>\n        <item>or</item>\n        <item>not</item>\n        <item>eq</item>\n        <item>ne</item>\n    </list>\n\n    <contexts>\n        <context name=\"nosource\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Keyword\" context=\"tt2source\" char=\"[\" char1=\"%\" />\n            <RegExpr attribute=\"HTML Tag\" context=\"scripts\" String=\"&lt;\\s*script(\\s|&gt;)\" insensitive=\"true\" />\n            <RegExpr attribute=\"HTML Tag\" context=\"htmltag\" String=\"&lt;\\s*\\/?\\s*[a-zA-Z_:][a-zA-Z0-9._:-]*\" />\n            <StringDetect attribute=\"HTML Comment\" context=\"htmlcomment\" String=\"&lt;!--\" />\n            <!-- Interpolated variables -->\n            <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&var1;\" />\n            <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&varwithbraces;\" />\n        </context>\n        \n        <context name=\"tt2source\" attribute=\"TT2 Text\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Keyword\" context=\"#pop\" char=\"%\" char1=\"]\" />\n            <DetectChar attribute=\"Comment\" context=\"tt2_onelinecomment\" char=\"#\" />\n            <DetectChar attribute=\"String\" context=\"doublequotestring\" char=\"&quot;\" />\n            <DetectChar attribute=\"String\" context=\"singlequotestring\" char=\"&#39;\" />\n            <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"&amp;\" />\n            <keyword attribute=\"Operator\" context=\"#stay\" String=\"operators\" />\n            <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n            <RegExpr attribute=\"String\" context=\"#stay\" String=\"[0123456789]*\\.\\.\\.[0123456789]*\" />\n            <HlCOct attribute=\"Octal\" context=\"#stay\" />\n            <HlCHex attribute=\"Hex\" context=\"#stay\" />\n            <Float attribute=\"Float\" context=\"#stay\" />\n            <Int attribute=\"Decimal\" context=\"#stay\" />\n            <AnyChar attribute=\"Other\" context=\"#stay\" String=\";()}{:,[]\" />\n\n            <WordDetect attribute=\"Control Structures\" context=\"#stay\" String=\"ELSIF\" insensitive=\"false\" beginRegion=\"iffi1\" endRegion=\"iffi1\"/>\n            <WordDetect attribute=\"Control Structures\" context=\"#stay\" String=\"ELSE\" insensitive=\"false\" beginRegion=\"iffi1\" endRegion=\"iffi1\"/>\n            <WordDetect attribute=\"Control Structures\" context=\"#stay\" String=\"IF\" insensitive=\"false\" beginRegion=\"iffi1\"/>\n            <WordDetect attribute=\"Control Structures\" context=\"#stay\" String=\"END\" insensitive=\"false\" endRegion=\"iffi1\"/>\n\n            <WordDetect attribute=\"Control Structures\" context=\"#stay\" String=\"FOREACH\" insensitive=\"false\" beginRegion=\"foreachblock\"/>\n            <WordDetect attribute=\"Control Structures\" context=\"#stay\" String=\"END\" insensitive=\"false\" endRegion=\"foreachblock\"/>\n\n            <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n            <keyword attribute=\"Control Structures\" context=\"#stay\" String=\"control structures\" />\n        </context>\n        <context name=\"tt2_onelinecomment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n            <Detect2Chars attribute=\"Keyword\" context=\"#pop#pop\" char=\"%\" char1=\"]\" />\n        </context>\n        <context name=\"doublequotestring\" attribute=\"String\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Escape Code\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\" />\n            <RegExpr attribute=\"Escape Code\" context=\"#stay\" String=\"\\\\([0-7]{1,3}|x[0-9A-Fa-f]{1,2})\" />\n            <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n            <!-- Interpolated variables -->\n            <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&var1;\" />\n            <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&varwithbraces;\" />\n        </context>\n        <context name=\"singlequotestring\" attribute=\"String\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Escape Code\" context=\"#stay\" char=\"'\" char1=\"'\"/>\n            <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n        </context>\n        <context name=\"htmltag\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"HTML Tag\" context=\"#pop\" char=\"/\" char1=\"&gt;\" />\n            <DetectChar attribute=\"HTML Tag\" context=\"#pop\" char=\"&gt;\"/>\n            <Detect2Chars attribute=\"Keyword\" context=\"tt2source\" char=\"[\" char1=\"%\" />\n            <RegExpr attribute=\"Identifier\" context=\"identifiers\" String=\"\\s*=\\s*\"/>\n\n        </context>\n        <context name=\"htmlcomment\" attribute=\"HTML Comment\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Keyword\" context=\"tt2source\" char=\"[\" char1=\"%\" />\n            <StringDetect attribute=\"HTML Comment\" context=\"#pop\" String=\"--&gt;\" />\n            <RegExpr attribute=\"Normal Text\" context=\"identifiers\" String=\"\\s*=\\s*\"/>\n        </context>\n        <context name=\"identifiers\" attribute=\"Identifier\" lineEndContext=\"#stay\">\n            <RegExpr attribute=\"String\" context=\"#pop\" String=\"\\s*#?[a-zA-Z0-9]*\" />\n            <DetectChar attribute=\"Types\" context=\"types1\" char=\"'\" />\n            <DetectChar attribute=\"Types\" context=\"types2\" char=\"&quot;\" />\n        </context>\n        \n        <context name=\"types1\" attribute=\"Types\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Keyword\" context=\"tt2source\" char=\"[\" char1=\"%\" />\n            <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"'\" />\n        </context>\n        \n        <context name=\"types2\" attribute=\"Types\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Keyword\" context=\"tt2source\" char=\"[\" char1=\"%\" />\n            <DetectChar attribute=\"Types\" context=\"#pop#pop\" char=\"&quot;\" />\n        </context>\n        \n        <context name=\"scripts\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Comment\" context=\"scripts_onelinecomment\" char=\"/\" char1=\"/\" />\n            <Detect2Chars attribute=\"Comment\" context=\"twolinecomment\" char=\"/\" char1=\"*\" />\n            <keyword attribute=\"Control Structures\" context=\"#stay\" String=\"control structures\" />\n            <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n            <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n            <StringDetect attribute=\"Keyword\" context=\"tt2source\" String=\"[%\"/>\n            <RegExpr attribute=\"HTML Tag\" context=\"#pop\" String=\"&lt;\\s*\\/\\s*script\\s*&gt;\" insensitive=\"true\" />\n            \n            <DetectChar attribute=\"String\" context=\"doublequotestring\" char=\"&quot;\" />\n            <DetectChar attribute=\"String\" context=\"singlequotestring\" char=\"&#39;\" />\n            <HlCOct attribute=\"Octal\" context=\"#stay\" />\n            <HlCHex attribute=\"Hex\" context=\"#stay\" />\n            <Float attribute=\"Float\" context=\"#stay\" />\n            <Int attribute=\"Decimal\" context=\"#stay\" />\n            <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n            <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n            <AnyChar attribute=\"Other\" context=\"#stay\" String=\";()}{:,[]\" />\n        </context>\n        <context name=\"scripts_onelinecomment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n            <RegExpr attribute=\"HTML Tag\" context=\"#pop#pop\" String=\"&lt;\\s*\\/\\s*script\\s*&gt;\" insensitive=\"true\" />\n        </context>\n        <context name=\"twolinecomment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\" />\n        </context>\n        \n    </contexts>\n            \n    <itemDatas>\n        <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n        <itemData name=\"TT2 Text\" defStyleNum=\"dsNormal\" />\n        <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n        <itemData name=\"Function\" defStyleNum=\"dsFunction\" />\n        <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" />\n        <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" />\n        <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" />\n        <itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n        <itemData name=\"String\" defStyleNum=\"dsString\" />\n        <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n        <itemData name=\"Variable\" defStyleNum=\"dsVariable\" />\n        <itemData name=\"Control Structures\" defStyleNum=\"dsControlFlow\" />\n        <itemData name=\"Escape Code\" defStyleNum=\"dsSpecialChar\" />\n        <itemData name=\"Other\" defStyleNum=\"dsOthers\" />\n        <itemData name=\"Operator\" defStyleNum=\"dsOperator\" />\n        <itemData name=\"HTML Tag\" defStyleNum=\"dsExtension\" />\n        <itemData name=\"HTML Comment\" defStyleNum=\"dsComment\" />\n        <itemData name=\"Identifier\" defStyleNum=\"dsOthers\" />\n        <itemData name=\"Types\" defStyleNum=\"dsDataType\" />\n    </itemDatas>\n</highlighting>\n<general>\n    <comments>\n        <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n        <comment name=\"singleLine\" start=\"#\" />\n        <comment name=\"multiLine\" start=\"[%#\" end=\"%]\"/>\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/texinfo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Texinfo\" extensions=\"*.texi\" section=\"Markup\" mimetype=\"application/x-texinfo\" author=\"Daniel Franke (franke.daniel@gmail.com)\" license=\"LGPL\" version=\"1\" kateversion=\"2.4\">\n\n  <highlighting>\n    <!--\n      In TEXINFO, commands start with \"@\" optionally followed by a \n      command argument embraced by \"{}\", as in \"@item\" or \"@emph{foo bar}\".\n\n      Some special commands embrace a region, e.g. \"@menu\" and \"@end menu\",\n      these regions may be fold (beginRegion=\"foldingRegion\").\n\n      Nodes to NOT end with \"@end node\", but a \"@node\" ends at the beginning \n      of the next \"@node\".\n      -->\n    <contexts>\n      <context name=\"Normal Text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Comment\" context=\"singleLineComment\" String=\"@c(omment)?\\b\" />\n        <RegExpr attribute=\"Comment\" context=\"multiLineComment\" String=\"@ignore\\b\" beginRegion=\"ignore\" />\n        <RegExpr attribute=\"Command\" context=\"nodeFolding\" String=\"@node\\b\" beginRegion=\"node\" />\n\n        <RegExpr attribute=\"Command\" context=\"folding\" beginRegion=\"foldingRegion\"\n                 String=\"@(menu|smallexample|table|multitable)\\b\"/>\n\n        <RegExpr attribute=\"Command\" context=\"#stay\" String=\"@[\\w]+(\\{([\\w]+[\\s]*)+\\})?\" />\n      </context>\n\n      <context name=\"singleLineComment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t</context>\n\n      <context name=\"multiLineComment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"@end ignore\" endRegion=\"ignore\" />\n\t\t\t\t<IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <context name=\"nodeFolding\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Command\" context=\"#pop\" String=\"@node\\b\" endRegion=\"node\" lookAhead=\"true\" />\n        <IncludeRules context=\"Normal Text\" />\n      </context>\n\n      <context name=\"folding\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Command\" context=\"#pop\" endRegion=\"foldingRegion\"\n                 String=\"@end (menu|smallexample|table|multitable)\\b\" />\n        <IncludeRules context=\"Normal Text\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Command\" defStyleNum=\"dsFunction\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"@comment \" />\n      <comment name=\"multiLine\" start=\"@ignore\" end=\"@end ignore\" region=\"ignore\" />\n    </comments>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/textile.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n    Kate syntax highlight filter for Textile formatted documents\n\n    Copyright 2012 alexander Kabakov. http://kabakov.wordpress.com/\n    Licensed under GPL license.\n-->\n\n<!DOCTYPE language SYSTEM \"language.dtd\"\n            [           \n            <!ENTITY strongregex \"(\\s|^)\\*[^*]\\w.*\\w[^*]\\*(\\s|\\.|,|;|:|\\-|\\?|$)\">\n            <!ENTITY strikeoutregex \"(\\s|^)-[^-]\\w.*\\w[^-]-(\\s|\\.|,|;|:|\\-|\\?|$)\">\n            <!ENTITY blockattrsregex \"(\\(\\w+(#\\w+)?\\))?\">\n            <!ENTITY formatregex \"(&gt;|&lt;|=|&lt;&gt;)?\">\n            <!ENTITY name \"(?![0-9])[\\w_:][\\w.:_-]*\">\n]>\n            \n<language section=\"Markup\" name=\"Textile\" \n        version=\"4\" kateversion=\"3.0\"\n        extensions=\"*.textile\" priority=\"15\"\n        author=\"Alexander Kabakov (kabakov.as@gmail.com)\"\n        license=\"LGPL\" >\n    <highlighting>\n        <contexts>\n            <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\" >\n                <StringDetect attribute=\"comment\" context=\"comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n                <RegExpr attribute=\"macro\" String=\"\\{\\{&name;\\}\\}\" />\n                \n                <Detect2Chars context=\"sectiontitle_block\"  char=\"h\" char1=\"1\" column=\"0\" />\n                <Detect2Chars context=\"sectionheader_block\" char=\"h\" char1=\"2\" column=\"0\" />                \n                <Detect2Chars context=\"sectionheader_block\" char=\"h\" char1=\"3\" column=\"0\" />\n                <Detect2Chars context=\"sectionheader_block\" char=\"h\" char1=\"4\" column=\"0\" />\n                <Detect2Chars context=\"sectionheader_block\" char=\"h\" char1=\"5\" column=\"0\" />\n                \n                <RegExpr attribute=\"textblock\" String=\"^(p|pre|bq|bc)&blockattrsregex;&formatregex;\\.\" />\n                <DetectChar context=\"image\" char=\"!\"/>\n                \n                <IncludeRules context=\"inc\" />\n\n                <RegExpr attribute=\"itemlist\" String=\"^[\\*\\#]+\\s\" />\n                <RegExpr attribute=\"htmllink\" String='\".*\":http(s)?:[\\w_/\\\\\\d\\.%\\?&amp;=-]*' />\n            </context>\n            \n            <context name=\"image\" lineEndContext=\"#pop\" attribute=\"image\">\n                <RegExpr String=\"&blockattrsregex;\" attribute=\"blockattrs\" />\n                <RegExpr String=\"\\w+\\.(png|jpg|jpeg|gif|bmp)\" attribute=\"imagefilename\" />\n                <DetectChar char=\"!\" context=\"#pop\" attribute=\"image\"/>\n            </context>\n            \n            <context name=\"sectiontitle_block\" lineEndContext=\"#pop\" attribute=\"sectiontitle\">\n                <RegExpr String=\"&blockattrsregex;\" attribute=\"sectionblockattrs\" />\n            </context>\n            \n            <context name=\"sectionheader_block\" lineEndContext=\"#pop\" attribute=\"sectionheader\">\n                <RegExpr String=\"&blockattrsregex;\" attribute=\"sectionblockattrs\" />\n            </context>\n            \n            <context name=\"comment\" attribute=\"comment\" lineEndContext=\"#stay\">\n                <DetectSpaces/>\n                <DetectIdentifier/>\n                <StringDetect attribute=\"comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n            </context>\n            \n            <context attribute=\"Normal Text\" name=\"inc\" lineEndContext=\"#stay\" >\n                <RegExpr attribute=\"strong\" String=\"&strongregex;\" />\n                <RegExpr attribute=\"strikeout\" minimal=\"true\" String=\"&strikeoutregex;\"/>\n            </context>\n        </contexts>\n\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n            \n            <itemData name=\"sectiontitle\" defStyleNum=\"dsKeyword\" bold=\"true\" />\n            <itemData name=\"sectionheader\" defStyleNum=\"dsFunction\" bold=\"true\" />\n            <itemData name=\"sectionblockattrs\" defStyleNum=\"dsComment\" bold=\"true\"/>\n            <itemData name=\"blockattrs\" defStyleNum=\"dsComment\" />\n            <itemData name=\"textblock\"  defStyleNum=\"dsComment\" />\n            \n            <itemData name=\"strong\" defStyleNum=\"dsNormal\" bold=\"true\" />\n            <itemData name=\"strikeout\" defStyleNum=\"dsNormal\" strikeOut=\"true\" />\n            \n            <itemData name=\"itemlist\" defStyleNum=\"dsDataType\" />\n            \n            <itemData name=\"macro\"  defStyleNum=\"dsComment\" bold=\"true\"/>\n            <itemData name=\"comment\"  defStyleNum=\"dsComment\" />\n            \n            <itemData name=\"image\"  defStyleNum=\"dsFloat\" />\n            <itemData name=\"imagefilename\"  defStyleNum=\"dsKeyword\" />\n            <itemData name=\"htmllink\" defStyleNum=\"dsDataType\" />\n        </itemDatas>\n\n    </highlighting>\n\n    <general>\n        <comments>\n            <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n        </comments>\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/tibasic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"TI Basic\" version=\"2\" kateversion=\"2.2\" section=\"Scientific\" extensions=\"\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>If</item>\n      <item>Then</item>\n      <item>Else</item>\n      <item>For</item>\n      <item>While</item>\n      <item>Repeat</item>\n      <item>End</item>\n      <item>Pause</item>\n      <item>Lbl</item>\n      <item>Goto</item>\n      <item>IS&gt;</item>\n      <item>DS&lt;</item>\n      <item>Menu</item>\n      <item>prgm</item>\n      <item>Return</item>\n      <item>DelVar</item>\n      <item>GraphStyle</item>\n      <item>Input</item>\n      <item>Prompt</item>\n      <item>Disp</item>\n      <item>DispGraph</item>\n      <item>DispTable</item>\n      <item>Output</item>\n      <item>getKey</item>\n      <item>ClrHome</item>\n      <item>ClrTable</item>\n      <item>GetCalc</item>\n      <item>Get</item>\n      <item>Send</item>\n      <item>prgm</item>\n    </list>\n    <list name=\"special_sym\">\n      <item>net</item>\n      <item>eogt</item>\n      <item>eolt</item>\n      <item>sqrt</item>\n      <item>%THETA</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Special operators\" context=\"#stay\" String=\"special_sym\" />\n\n        <Detect2Chars attribute=\"Assignment\" context=\"#stay\" char=\"-\" char1=\"&gt;\"/>\n        <Detect2Chars attribute=\"Assignment\" context=\"#stay\" char=\"s\" char1=\"t\"/>\n\n        <RegExpr attribute=\"Matrix\" context=\"#stay\" String=\"\\[\\w\\]\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Assignment\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Special operators\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Matrix\" defStyleNum=\"dsNormal\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"0\" weakDeliminator=\"%&lt;&gt;\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/tiger.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Author: Pablo Oliveira <pablo@sifflez.org> //-->\n<language name=\"Tiger\" version=\"1\" kateversion=\"5.0\" section=\"Other\" extensions=\"*.tig\"\n          mimetype=\"\" author=\"Pablo Oliveira\" license=\"MIT\">\n  <highlighting>\n    <list name=\"controlflow\">\n      <item>if</item>\n      <item>then</item>\n      <item>else</item>\n      <item>while</item>\n      <item>do</item>\n      <item>for</item>\n      <item>to</item>\n      <item>break</item>\n    </list>\n    <list name=\"keywords\">\n      <item>let</item>\n      <item>in</item>\n      <item>end</item>\n      <item>array</item>\n      <item>of</item>\n      <item>type</item>\n      <item>function</item>\n      <item>var</item>\n      <item>nil</item>\n    </list>\n    <list name=\"type\">\n      <item>void</item>\n      <item>int</item>\n      <item>string</item>\n    </list>\n    <list name=\"primitives\">\n      <item>print</item>\n      <item>print_int</item>\n      <item>flush</item>\n      <item>getchar</item>\n      <item>ord</item>\n      <item>chr</item>\n      <item>size</item>\n      <item>concat</item>\n      <item>substring</item>\n      <item>not</item>\n      <item>exit</item>\n    </list>\n    <contexts>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces/>\n\n        <Detect2Chars attribute=\"Comment\" context=\"Multi/inline Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\" />\n        <AnyChar attribute=\"Symbol\" String=\":&amp;+,-/.*&lt;=&gt;|&#59;\" />\n        <Int attribute=\"Decimal\" />\n\n        <keyword attribute=\"ControlFlow\" String=\"controlflow\" />\n        <keyword attribute=\"Keyword\" String=\"keywords\" />\n        <keyword attribute=\"Function\" String=\"primitives\" />\n        <keyword attribute=\"Type\" String=\"type\" />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <HlCStringChar attribute=\"Escape\" />\n        <RegExpr attribute=\"Escape\" String=\"\\\\u[0-9a-fA-F]{4}\" />\n        <LineContinue/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multi/inline Comment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"  spellChecking=\"false\" />\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n      <itemData name=\"ControlFlow\"  defStyleNum=\"dsControlFlow\" spellChecking=\"false\" />\n      <itemData name=\"Function\"     defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n      <itemData name=\"Type\"         defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n      <itemData name=\"Symbol\"       defStyleNum=\"dsOperator\" spellChecking=\"false\" />\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n      <itemData name=\"String\"       defStyleNum=\"dsString\" />\n      <itemData name=\"Escape\"       defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n\n<!-- kate: space-indent on; indent-width 2; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/toml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY more \"(_\\d+)*\">\n\t<!ENTITY int  \"[+-]?(0|[1-9]\\d*)&more;\">\n\t<!ENTITY frac \"\\.\\d+&more;\">\n\t<!ENTITY exp  \"[eE][+-]?\\d+&more;\">\n\t\n\t<!ENTITY offset   \"[+-]\\d\\d:\\d\\d\">\n\t<!ENTITY time     \"\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(&offset;|Z)?\">\n\t<!ENTITY datetime \"\\d\\d\\d\\d-\\d\\d-\\d\\d(T&time;)?\">\n]>\n<!-- https://github.com/toml-lang/toml -->\n<language name=\"TOML\" section=\"Configuration\" extensions=\"*.toml\" mimetype=\"text/x-toml\" version=\"5\" kateversion=\"5.0\" author=\"flying-sheep@web.de\" license=\"LGPLv2+\">\n<highlighting>\n\t<list name=\"bools\">\n\t\t<item>true</item>\n\t\t<item>false</item>\n\t</list>\n\t<contexts>\n\t\t<context attribute=\"Error\" lineEndContext=\"#stay\" name=\"Toml\">\n\t\t\t<DetectSpaces attribute=\"Whitespace\"/>\n\t\t\t<Detect2Chars attribute=\"TableHeader\" context=\"NestedTableHeader\" char=\"[\" char1=\"[\" endRegion=\"Table\"/>\n\t\t\t<DetectChar attribute=\"TableHeader\" context=\"TableHeader\" char=\"[\" endRegion=\"Table\"/>\n\t\t\t<RegExpr    attribute=\"Key\" context=\"#stay\"   String=\"[\\w-]+\" firstNonSpace=\"true\"/>\n\t\t\t<DetectChar attribute=\"Key\" context=\"QuotedKey\" char=\"&quot;\" firstNonSpace=\"true\"/>\n\t\t\t<DetectChar attribute=\"Assignment\" context=\"Value\" char=\"=\"/>\n\t\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\"/>\n\t\t</context>\n\t\t<!-- table headers -->\n\t\t<context attribute=\"TableHeader\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\" name=\"TableHeader\">\n\t\t\t<IncludeRules context=\"TableHeaderCommon\"/>\n\t\t\t<DetectChar attribute=\"TableHeader\" context=\"#pop\" char=\"]\" beginRegion=\"Table\"/>\n\t\t</context>\n\t\t<context attribute=\"TableHeader\" fallthrough=\"true\" fallthroughContext=\"#pop\" lineEndContext=\"#pop\" name=\"NestedTableHeader\">\n\t\t\t<IncludeRules context=\"TableHeaderCommon\"/>\n\t\t\t<Detect2Chars attribute=\"TableHeader\" context=\"#pop\" char=\"]\" char1=\"]\" beginRegion=\"Table\"/>\n\t\t</context>\n\t\t<context attribute=\"TableHeader\" lineEndContext=\"#pop\" name=\"TableHeaderCommon\">\n\t\t\t<DetectSpaces attribute=\"Whitespace\"/>\n\t\t\t<DetectChar attribute=\"TableHeader\" context=\"#stay\" char=\".\"/>\n\t\t\t<RegExpr    attribute=\"Key\" context=\"#stay\" String=\"[\\w-]+\"/>\n\t\t\t<DetectChar attribute=\"Key\" context=\"QuotedKey\" char=\"&quot;\"/>\n\t\t</context>\n\t\t<!-- values -->\n\t\t<context attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\" name=\"Value\">\n\t\t\t<DetectSpaces attribute=\"Whitespace\"/>\n\t\t\t<RegExpr attribute=\"Date\"  context=\"#stay\" String=\"&datetime;\"/>\n\t\t\t<keyword attribute=\"Bool\" String=\"bools\" context=\"#stay\"/>\n\t\t\t<RegExpr attribute=\"Float\" context=\"#stay\" String=\"&int;(&frac;&exp;|&frac;|&exp;)\"/>\n\t\t\t<RegExpr attribute=\"Int\"   context=\"#stay\" String=\"&int;\"/>\n\t\t\t<StringDetect attribute=\"String\" context=\"MultilineString\"    String=\"&quot;&quot;&quot;\"/>\n\t\t\t<DetectChar   attribute=\"String\" context=\"String\"               char=\"&quot;\"/>\n\t\t\t<StringDetect attribute=\"String\" context=\"LitMultilineString\" String=\"'''\"/>\n\t\t\t<DetectChar   attribute=\"String\" context=\"LitString\"            char=\"'\"/>\n\t\t\t<DetectChar attribute=\"Array\" context=\"Array\" char=\"[\"/>\n\t\t\t<DetectChar attribute=\"InlineTable\" context=\"InlineTable\" char=\"{\"/>\n\t\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\"/>\n\t\t</context>\n\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n\t\t\t<DetectSpaces/>\n\t\t\t<IncludeRules context=\"##Alerts\" />\n\t\t\t<DetectIdentifier/>\n\t\t</context>\n\t\t<!-- Quoted keys and Strings -->\n\t\t<context attribute=\"Key\" lineEndContext=\"#pop\" name=\"QuotedKey\">\n\t\t\t<LineContinue attribute=\"Escape\" context=\"#stay\"/>\n\t\t\t<RegExpr attribute=\"Escape\" String=\"\\\\[btnfr&quot;\\\\]\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Escape\" String=\"\\\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Error\" String=\"\\\\.\" context=\"#stay\" />\n\t\t\t<DetectChar attribute=\"Key\" context=\"#pop\" char=\"&quot;\"/>\n\t\t</context>\n\t\t<context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n\t\t\t<LineContinue attribute=\"Escape\" context=\"#stay\"/>\n\t\t\t<RegExpr attribute=\"Escape\" String=\"\\\\[btnfr&quot;\\\\]\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Escape\" String=\"\\\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Error\" String=\"\\\\.\" context=\"#stay\" />\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t</context>\n\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"MultilineString\">\n\t\t\t<LineContinue attribute=\"Escape\" context=\"#stay\"/>\n\t\t\t<RegExpr attribute=\"Escape\" String=\"\\\\[btnfr&quot;\\\\]\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Escape\" String=\"\\\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})\" context=\"#stay\" />\n\t\t\t<RegExpr attribute=\"Error\" String=\"\\\\.\" context=\"#stay\" />\n\t\t\t<StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\"/>\n\t\t</context>\n\t\t<context attribute=\"LitString\" lineEndContext=\"#pop\" name=\"LitString\">\n\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"'\"/>\n\t\t</context>\n\t\t<context attribute=\"LitString\" lineEndContext=\"#stay\" name=\"LitMultilineString\">\n\t\t\t<StringDetect attribute=\"String\" context=\"#pop\" String=\"'''\"/>\n\t\t</context>\n\t\t<!-- Arrays -->\n\t\t<context attribute=\"Array\" lineEndContext=\"#stay\" name=\"Array\">\n\t\t\t<IncludeRules context=\"Value\" />\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Array\" char=\"]\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"NextEntry\" char=\",\" />\n\t\t</context>\n\t\t<context attribute=\"InlineTable\" lineEndContext=\"#stay\" name=\"InlineTable\">\n\t\t\t<RegExpr    attribute=\"Key\" context=\"#stay\"   String=\"[\\w-]+\"/>\n\t\t\t<DetectChar attribute=\"Key\" context=\"QuotedKey\" char=\"&quot;\"/>\n\t\t\t<DetectChar attribute=\"Assignment\" context=\"Value\" char=\"=\"/>\n\t\t\t<DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\"/>\n\t\t\t<DetectChar context=\"#pop\" attribute=\"InlineTable\" char=\"}\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"NextEntry\" char=\",\" />\n\t\t</context>\n\t</contexts>\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Key\"         defStyleNum=\"dsDataType\"/>\n\t\t<itemData name=\"TableHeader\" defStyleNum=\"dsKeyword\"/>\n\t\t<itemData name=\"Assignment\"  defStyleNum=\"dsOperator\"/>\n\t\t<itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n\t\t\n\t\t<itemData name=\"Date\"        defStyleNum=\"dsBaseN\"/>\n\t\t<itemData name=\"Float\"       defStyleNum=\"dsFloat\"/>\n\t\t<itemData name=\"Int\"         defStyleNum=\"dsDecVal\"/>\n\t\t<itemData name=\"Bool\"        defStyleNum=\"dsConstant\"/>\n\t\t<itemData name=\"String\"      defStyleNum=\"dsString\"/>\n\t\t<itemData name=\"LitString\"   defStyleNum=\"dsVerbatimString\"/>\n\t\t<itemData name=\"Escape\"      defStyleNum=\"dsSpecialChar\"/>\n\t\t<itemData name=\"Array\"       defStyleNum=\"dsOperator\"/>\n\t\t<itemData name=\"InlineTable\" defStyleNum=\"dsOperator\"/>\n\t\t<itemData name=\"NextEntry\"   defStyleNum=\"dsOperator\"/>\n\t\t\n\t\t<itemData name=\"Whitespace\"  defStyleNum=\"dsNormal\"/>\n\t\t<itemData name=\"Error\"       defStyleNum=\"dsError\"/>\n\t</itemDatas>\n</highlighting>\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"#\" />\n\t</comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/txt2tags.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!-- Created by Juliano Dorneles dos Santos <juliano_dorneles@yahoo.com.br> -->\n<!-- Fixed for 3.2 Helio Chissini de Castro <helio@kde.org> -->\n<!-- Extended and adapted (v1.20) by Eric Forgeot < http://esclinux.tk > -->\n<language name=\"txt2tags\" extensions=\"*.t2t\" section=\"Markup\" mimetype=\"text/txt2tags\" version=\"4\" kateversion=\"3.0\" casesensitive=\"1\">\n<highlighting>\n\n<contexts>\n\t<context name=\"Context\" attribute=\"Normal\" lineEndContext=\"#stay\">\n\t\t<RegExpr attribute=\"Date\" context=\"Context\" String=\"%%date(\\(.*\\))?\"/>\n\t\t<RegExpr attribute=\"Comment\" context=\"Context\" String=\"%.*\"/>\n\t\t<RegExpr attribute=\"BoldItalic\" context=\"Context\" String=\"\\*\\*//(.*)//\\*\\*\" minimal=\"true\"/>\n\t\t<RegExpr attribute=\"BoldItalic\" context=\"Context\" String=\"//\\*\\*(.*)\\*\\*//\" minimal=\"true\" />\n\t\t<RegExpr attribute=\"Bold\" context=\"Context\" String=\"\\*\\*.*\\*\\*\" minimal=\"true\"/>\n\t\t<RegExpr attribute=\"Italic\" context=\"Context\" String=\"//.*//\" minimal=\"true\"/>\n\t\t<RegExpr attribute=\"Underline\" context=\"Context\" String=\"__.*__\" minimal=\"true\"/>\n\t\t<RegExpr attribute=\"Strikeout\" context=\"Context\" String=\"--.*--\" minimal=\"true\"/>\n\t\t<RegExpr attribute=\"Monospaced\" context=\"Context\" String=\"``.*``\" minimal=\"true\"/>\n\t\t<RegExpr attribute=\"Verbatim Line\" context=\"Context\" String=\"``` .*\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *=[^=].*[^=]=(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *==[^=].*[^=]==(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *===[^=].*[^=]===(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *====[^=].*[^=]====(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *=====[^=].*[^=]=====(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *\\+[^=].*[^=]\\+(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *\\+\\+[^=].*[^=]\\+\\+(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *\\+\\+\\+[^=].*[^=]\\+\\+\\+(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *\\+\\+\\+\\+[^=].*[^=]\\+\\+\\+\\+(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RegExpr attribute=\"Title\" context=\"Context\" String=\" *\\+\\+\\+\\+\\+[^=].*[^=]\\+\\+\\+\\+\\+(\\[.*\\])?\\s*$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t\t<RangeDetect attribute=\"Link\" char=\"[\" char1=\"]\"/>\n\t\t<RegExpr attribute=\"Tabel\" context=\"Context\" String=\" *\\|\\| .*\" column=\"0\"/>\n\t\t<RegExpr attribute=\"Tabel\" context=\"Context\" String=\" *\\| .*\" column=\"0\"/>\n\t\t<RegExpr attribute=\"DefList\" context=\"Context\" String=\" *\\: .*\" column=\"0\"/>\n\t\t<RegExpr attribute=\"List\" context=\"Context\" String=\" *\\- .*\" column=\"0\"/>\n\t\t<RegExpr attribute=\"NumList\" context=\"Context\" String=\" *\\+ .*\" column=\"0\"/>\n\t\t<RegExpr attribute=\"Quote\" context=\"Context\" String=\"\\t.*\"/>\n\t\t<RegExpr attribute=\"Bar\" context=\"Context\" String=\"\\s*([_=-]{20,})\\s*$\"/>\n\t\t<RegExpr attribute=\"EOF\" context=\"Context\" String=\"$$\" column=\"0\" beginRegion=\"Header\" endRegion=\"Header\"/>\n\t</context>\n</contexts>\n\n<itemDatas>\n\t<itemData name=\"Normal\" defStyleNum=\"dsNormal\" />\n\t<itemData name=\"Date\" defStyleNum=\"dsNormal\" color=\"#FF0000\" italic=\"1\" />\n\t<itemData name=\"Comment\" defStyleNum=\"dsNormal\" color=\"#666666\" italic=\"1\" />\n\t<itemData name=\"BoldItalic\" defStyleNum=\"dsNormal\" bold=\"1\" italic=\"1\" />\n\t<itemData name=\"Bold\" defStyleNum=\"dsNormal\" color=\"#445675\" bold=\"1\" />\n\t<itemData name=\"Italic\" defStyleNum=\"dsNormal\" color=\"#653A39\" italic=\"1\" />\n\t<itemData name=\"Underline\" defStyleNum=\"dsNormal\" color=\"#386742\" underline=\"1\" />\n\t<itemData name=\"Strikeout\" defStyleNum=\"dsNormal\" color=\"#644A9B\" strikeOut=\"1\" />\n\t<itemData name=\"Monospaced\" defStyleNum=\"dsNormal\" color=\"#006600\" />\n\t<itemData name=\"Verbatim Line\" defStyleNum=\"dsNormal\" color=\"#006600\" />\n\t<itemData name=\"Title\" defStyleNum=\"dsNormal\" color=\"#990000\" />\n\t<itemData name=\"Link\" defStyleNum=\"dsNormal\" color=\"#0930DE\" />\n\t<itemData name=\"Tabel\" defStyleNum=\"dsNormal\" color=\"#FF0000\" />\n\t<itemData name=\"DefList\" defStyleNum=\"dsNormal\" color=\"#E300EE\" />\n\t<itemData name=\"List\" defStyleNum=\"dsNormal\" color=\"#E300EE\" />\n\t<itemData name=\"NumList\" defStyleNum=\"dsNormal\" color=\"#E300EE\" />\n\t<itemData name=\"Quote\" defStyleNum=\"dsNormal\" color=\"brown\" />\n\t<itemData name=\"Bar\" defStyleNum=\"dsNormal\" color=\"#C0C0C0\" />\n\t<itemData name=\"EOF\" defStyleNum=\"dsOthers\" />\n</itemDatas>\n\n</highlighting>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/typescript-react.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY simpleName \"([a-z][a-z\\d]*:)?[a-z][a-z\\d]*\">\n\t<!ENTITY baseName   \"([a-zA-Z_\\$]|[^[:ascii:]])(([\\w\\$\\-\\.]|[^[:ascii:]])*([\\w\\$]|[^[:ascii:]]))?\">\n\t<!ENTITY name       \"(&baseName;:)?&baseName;\">\n\t<!ENTITY baseNameWithBound \"(\\b[a-zA-Z_\\$]|[^[:ascii:]])(([\\w\\$\\-\\.]|[^[:ascii:]])*([\\w\\$]|[^[:ascii:]]))?\">\n\t<!ENTITY nameWithBound     \"(&baseNameWithBound;:)?&baseNameWithBound;\"> <!-- Use this instead of \"\\b&name;\" -->\n\n\t<!ENTITY simpleTag  \"&lt;\\s*&simpleName;\"> <!-- Element tag -->\n\t<!ENTITY tag        \"&lt;\\s*(&name;|&gt;)\">\n\t<!ENTITY entref     \"&amp;([a-zA-Z\\d]+|#\\d+|#x[a-fA-F\\d]+);\">\n\n\t<!ENTITY identifier \"([a-zA-Z_$]|[^[:ascii:]])([\\w$]|[^[:ascii:]])*\">\n\t<!ENTITY objectOp   \"[\\?!]?\">\n\t<!ENTITY endLine    \"\\s*($|//|(/\\*.*\\*/\\s*)+$)\">\n]>\n\n<!--\n    ====================================================================\n\n      This file is part of the KDE's KSyntaxHighlighting framework.\n\n      Copyright 2018-2019 Nibaldo González S. (nibgonz@gmail.com)\n\n      This Source Code Form is subject to the terms of the MIT License.\n      If a copy of the license was not distributed with this file,\n      You can obtain one at: https://opensource.org/licenses/MIT\n\n    ====================================================================\n\n    This file is an extension of the TypeScript highlighter\n    (typescript.xml).\n    IMPORTANT: Keep sync with \"javascript-react.xml\".\n\n    Based on the XML syntax highlighting (v7), by Wilbert Berendsen\n    (wilbert@kde.nl), and the TypeScript React grammar files,\n    available at: https://github.com/Microsoft/TypeScript-TmLanguage\n\n    Change log:\n     * v4 [2019-08-30]: Adapt to version 5 of \"typescript.xml\".\n     * v4 [2019-07-16]: Adapt to version 4 of \"typescript.xml\".\n     * v3 [2019-02-20]: Don't highlight tags within declarations of\n                        types, variables, classes and interfaces.\n                        Fixes tags after substitutions in templates.\n                        Adapt to version 3 of \"typescript.xml\".\n     * v2 [2018-12-30]: Adapt to version 2 of \"typescript.xml\".\n                        Allow type assertion in the tag name.\n                        Allow tags after the keywords \"await\" & \"yield\".\n                        Allow empty tags and non-ASCII tag name & attributes.\n     * v1 [2018-11-18]: Initial version\n-->\n\n<language name=\"TypeScript React\" version=\"5\" kateversion=\"5.53\" section=\"Scripts\" indenter=\"cstyle\"\n          priority=\"8\" extensions=\"*.tsx\" mimetype=\"text/tsx;text/x-tsx;application/tsx;application/x-tsx;\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\" license=\"MIT\">\n\n<highlighting>\n\n\t<contexts>\n\n\t\t<context name=\"Shebang\" attribute=\"Normal Text\" lineEndContext=\"#pop!Normal\" lineEmptyContext=\"#pop!Normal\" fallthrough=\"true\" fallthroughContext=\"#pop!Normal\">\n\t\t\t<Detect2Chars context=\"ShebangLine\" attribute=\"Comment\" char=\"#\" char1=\"!\" column=\"0\" />\n\t\t</context>\n\t\t<context name=\"ShebangLine\" attribute=\"Comment\" lineEndContext=\"#pop#pop!Normal\" />\n\n\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<IncludeRules context=\"Normal##TypeScript\" />\n\t\t</context>\n\n\t\t<!-- TypeScript -->\n\n\t\t<!-- Overwrite rules of 'typescript.xml'. These rules send to contexts\n\t\t     that contain: <IncludeRules context=\"Normal\"/> in the TypeScript XML file.\n\t\t     NOTE: After the keyword \"type\" tags will not be highlighted (\"TypeDeclaration\" context). -->\n\t\t<context name=\"OverwriteTypeScript\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"Template\" attribute=\"Template\" char=\"`\" />\n\t\t\t<DetectChar context=\"Object\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"Types\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<RegExpr context=\"TypesAngleBracket\" attribute=\"Symbol\" String=\"&lt;(?=(&identifier;|[\\[\\{\\(&lt;]).*&gt;)\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"[\" beginRegion=\"List\" />\n\t\t\t<DetectChar context=\"NoRegExp\" attribute=\"Symbol\" char=\"]\" endRegion=\"List\" />\n\t\t\t<RegExpr context=\"ConditionalExpression\" attribute=\"Symbol\" String=\"\\?(?=.*&identifier;\\s*\\:)\" />\n\t\t</context>\n\n\t\t<context name=\"Object\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<RegExpr context=\"TypesNewLine\" attribute=\"Symbol\" String=\":(?=&endLine;)\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<IncludeRules context=\"Object##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"Template\" attribute=\"Template\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Template\" char=\"`\" />\n\t\t\t<!-- Find tags and send to the \"Substitution\" context -->\n\t\t\t<Detect2Chars context=\"Substitution-BeforeTag\" attribute=\"Substitution\" char=\"$\" char1=\"{\" />\n\t\t\t<IncludeRules context=\"Template##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"Substitution\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Substitution\" char=\"}\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<IncludeRules context=\"Substitution##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"ConditionalExpression\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<IncludeRules context=\"ConditionalExpression##TypeScript\" />\n\t\t</context>\n\n\t\t<!-- NOTE: Contexts completely overwritten! -->\n\n\t\t<context name=\"NoRegExp\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"NoRegExp##TypeScript\" />\n\t\t</context>\n\n\t\t<context name=\"Types\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"FixPopLineEndContext##TypeScript\" />\n\t\t\t<IncludeRules context=\"TypesCommon\" />\n\t\t</context>\n\t\t<context name=\"TypesCommon\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"TypesEnd##TypeScript\" />\n\t\t\t<RegExpr context=\"#pop!TypesNewLine\" attribute=\"Symbol\" String=\"[\\|&amp;](?=&endLine;)\" minimal=\"true\" />\n\t\t\t<!-- React -->\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<!-- TypesCommon##TypeScript -->\n\t\t\t<IncludeRules context=\"DefaultTypes##TypeScript\" />\n\t\t\t<IncludeRules context=\"Normal##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"TypesNewLine\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!TypesCommon\">\n\t\t\t<IncludeRules context=\"TypesNewLine##TypeScript\" />\n\t\t</context>\n\n\t\t<!-- Overwrite TypesFindBrackets##TypeScript (place before \"React\").\n\t\t     Since there may be tags after \"[\", \"{\" or \"(\". -->\n\t\t<context name=\"TypesFindBrackets\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"TypesSquareBracket-BeforeTag\" attribute=\"Symbol\" char=\"[\" beginRegion=\"List\" />\n\t\t\t<DetectChar context=\"TypesCurlyBracket-BeforeTag\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"TypesRoundBracket-BeforeTag\" char=\"(\" />\n\t\t</context>\n\t\t<context name=\"TypesSquareBracket\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!NoRegExp\" attribute=\"Symbol\" char=\"]\" endRegion=\"List\" />\n\t\t\t<!-- React -->\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<!-- TypesSquareBracket##TypeScript -->\n\t\t\t<IncludeRules context=\"DefaultTypes##TypeScript\" />\n\t\t\t<IncludeRules context=\"Normal##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"TypesCurlyBracket\" attribute=\"Normal Text\" lineEndContext=\"#pop!Object\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<!-- FixPopLineEndContext##TypeScript -->\n\t\t\t<RegExpr context=\"#pop!Object\" String=\"\\S\" firstNonSpace=\"true\" lookAhead=\"true\" />\n\t\t\t<!-- React -->\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<!-- TypesCurlyBracket##TypeScript -->\n\t\t\t<IncludeRules context=\"DefaultTypes##TypeScript\" />\n\t\t\t<IncludeRules context=\"Object##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"TypesRoundBracket\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!NoRegExp\" char=\")\" />\n\t\t\t<IncludeRules context=\"FixPopLineEndContext##TypeScript\" />\n\t\t\t<!-- React -->\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<!-- TypesRoundBracket##TypeScript -->\n\t\t\t<IncludeRules context=\"DefaultTypes##TypeScript\" />\n\t\t\t<IncludeRules context=\"Normal##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"TypesAngleBracket\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"TypesAngleBracketEnd##TypeScript\" />\n\t\t\t<IncludeRules context=\"FixPopLineEndContext##TypeScript\" />\n\t\t\t<!-- React! -->\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"React\" />\n\t\t\t<!-- TypesAngleBracket##TypeScript -->\n\t\t\t<IncludeRules context=\"DefaultTypes##TypeScript\" />\n\t\t\t<IncludeRules context=\"Normal##TypeScript\" />\n\t\t</context>\n\n\t\t<!-- Do not highlight tags in some special contexts -->\n\t\t<context name=\"FindDeclarationsWithNoTags\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<WordDetect context=\"InterfaceDeclaration\" attribute=\"Reserved\" String=\"interface\" />\n\t\t\t<WordDetect context=\"ClassDeclaration\" attribute=\"Reserved\" String=\"class\" />\n\t\t\t<WordDetect context=\"VarDeclaration\" attribute=\"Reserved\" String=\"let\" />\n\t\t\t<WordDetect context=\"VarDeclaration\" attribute=\"Keyword\" String=\"var\" />\n\t\t\t<WordDetect context=\"VarDeclaration\" attribute=\"Keyword\" String=\"const\" />\n\t\t</context>\n\t\t<!-- Do not highlight tags after \":\" in variable declarations -->\n\t\t<context name=\"VarDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<RegExpr context=\"#pop!VarDeclTypesNewLine\" attribute=\"Symbol\" String=\":(?=&endLine;)\" minimal=\"true\" />\n\t\t\t<DetectChar context=\"#pop!VarDeclTypes\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"&identifier;(?=\\s*&objectOp;\\s*:)\" />\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Symbol\" String=\"?!\" /> <!-- &objectOp; -->\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t</context>\n\t\t<context name=\"VarDeclTypes\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"Types##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"VarDeclTypesNewLine\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!VarDeclTypesCommon\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t</context>\n\t\t<context name=\"VarDeclTypesCommon\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"TypesCommon##TypeScript\" />\n\t\t</context>\n\t\t<!-- Do not highlight tags in interface declarations -->\n\t\t<context name=\"InterfaceDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!InterfaceContentDeclaration\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"}\" lookAhead=\"true\" />\n\t\t\t<IncludeRules context=\"Normal##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"InterfaceContentDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<IncludeRules context=\"Object##TypeScript\" />\n\t\t</context>\n\t\t<!-- Do not highlight tags in class declarations -->\n\t\t<context name=\"ClassDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!ClassDeclarationContent\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"}\" lookAhead=\"true\" />\n\t\t\t<IncludeRules context=\"Normal##TypeScript\" />\n\t\t</context>\n\t\t<context name=\"ClassDeclarationContent\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<RegExpr context=\"VarDeclTypesNewLine\" attribute=\"Symbol\" String=\":(?=&endLine;)\" minimal=\"true\" />\n\t\t\t<DetectChar context=\"VarDeclTypes\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<IncludeRules context=\"Object\" />\n\t\t</context>\n\n\t\t<!-- ReactJS -->\n\n\t\t<!-- Tags highlighting -->\n\t\t<context name=\"React\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Tag in new line -->\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Normal Text\" String=\"&tag;\" firstNonSpace=\"true\" lookAhead=\"true\" />\n\t\t\t<!-- Highlight tags only after some keywords -->\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"ControlFlow\" String=\"\\b(return|await)\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Module\" String=\"\\b(default)\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Reserved\" String=\"\\b(yield)\\s*(?=&tag;|/\\*)\" />\n\n\t\t\t<!-- Characters before a valid tag -->\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Special Operators\" String=\"\\=&gt;\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Symbol\" String=\"([\\[,\\=&gt;\\*\\?]|&amp;&amp;|\\|\\|)\\s*(?=&tag;|/\\*)\" />\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Normal Text\" String=\"\\(\\s*(?=&tag;|/\\*)\" />\n\t\t\t<!-- The \"Object-BeforeTag\" context looks for a valid Tag and then sends the \"Object\" context -->\n\t\t\t<RegExpr context=\"Object-BeforeTag\" attribute=\"Symbol\" String=\"\\{\\s*(?=&tag;|/\\*)\" beginRegion=\"Brace\" />\n\t\t\t<RegExpr context=\"Types-BeforeTag\" attribute=\"Symbol\" String=\":\\s*(?=&tag;|/\\*)\" />\n\n\t\t\t<RegExpr context=\"ValidTag\" attribute=\"Symbol\" String=\"&lt;\\s*&gt;\\s*(?=&tag;|/\\*)\" />\n\n\t\t\t<!-- Tag after a comment on a new line -->\n\t\t\t<Detect2Chars context=\"ValidTag\" attribute=\"Comment\" char=\"/\" char1=\"*\" firstNonSpace=\"true\" lookAhead=\"true\" />\n\n\t\t\t<!-- Overwrite TypeScript rules to highlight tags within some contexts -->\n\t\t\t<IncludeRules context=\"FindDeclarationsWithNoTags\" />\n\t\t\t<IncludeRules context=\"OverwriteTypeScript\" />\n\t\t</context>\n\n\t\t<!-- Detect tags before starting a context -->\n\t\t<context name=\"Object-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Object\">\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\t\t<context name=\"Substitution-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Substitution\">\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\t\t<context name=\"EvaluatedCode-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!EvaluatedCode\">\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\n\t\t<context name=\"Types-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Types\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Comment\" char=\"/\" char1=\"/\" lookAhead=\"true\" />\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\t\t<context name=\"TypesSquareBracket-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!TypesSquareBracket\">\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\t\t<context name=\"TypesCurlyBracket-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!TypesCurlyBracket\">\n\t\t\t<Detect2Chars context=\"#pop!Object\" attribute=\"Comment\" char=\"/\" char1=\"/\" lookAhead=\"true\" />\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\t\t<context name=\"TypesRoundBracket-BeforeTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!TypesRoundBracket\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Comment\" char=\"/\" char1=\"/\" lookAhead=\"true\" />\n\t\t\t<IncludeRules context=\"ValidTag\" />\n\t\t</context>\n\n\t\t<!-- TAGS:\n\t\t     NOTE & TODO: The following code is common for 'javascript-react.xml' and 'typescript-react.xml'\n\t\t     and is replicated in both files. Look for some way to avoid having repeated code, for example,\n\t\t     with a common XML file or with a generator script. The only drawback is that the\n\t\t     \"EvaluatedCode\" context includes \"Normal\". -->\n\n\t\t<!-- Highlight nested tags with comments in between.\n\t\t     NOTE: The highlighting of Tags after a multiline comment does not work with: lineEndContext=\"#pop\" -->\n\t\t<context name=\"ValidTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"\\s+(?=&lt;|/\\*)\" />\n\t\t\t<IncludeRules context=\"FindTags\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t</context>\n\n\t\t<!-- Start tag -->\n\t\t<context name=\"FindTags\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Empty tag (element) -->\n\t\t\t<RegExpr context=\"ElementTagContent\" attribute=\"Element Tag\" String=\"&lt;\\s*&gt;\" beginRegion=\"Element\" />\n\t\t\t<!-- Detect non-ASCII character in the tag name (component). This prevents highlighting as Element,\n\t\t\t     tag names that don't start with a non-ASCII character. -->\n\t\t\t<RegExpr context=\"ComponentTagNonASCII\" attribute=\"Component Tag\" String=\"&lt;\\s*(?=([a-z][a-z\\d]*:)?([a-z][a-z\\d]*)?[^[:ascii:]])\" beginRegion=\"ComponentElement\" /> <!-- &simpleName; -->\n\t\t\t<!-- Element & component tags -->\n\t\t\t<RegExpr context=\"ElementTag\" attribute=\"Element Tag\" String=\"&simpleTag;(?=[^\\w\\$\\-\\.:]|$|[\\-\\.]+([^\\w\\$\\-\\.]|$)|:([^a-zA-Z_\\$]|$))\" beginRegion=\"Element\" />\n\t\t\t<RegExpr context=\"ComponentTagFindType\" attribute=\"Component Tag\" String=\"&tag;\" beginRegion=\"ComponentElement\" />\n\t\t</context>\n\t\t<context name=\"FindEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"EntityRef\" String=\"&entref;\" />\n\t\t</context>\n\n\t\t<!-- Highlight tag name with non-ASCII characters -->\n\t\t<context name=\"ComponentTagNonASCII\" attribute=\"Normal Text\" lineEndContext=\"#pop!ComponentTag\" fallthrough=\"true\" fallthroughContext=\"#pop!ComponentTag\">\n\t\t\t<RegExpr context=\"#pop!ComponentTagFindType\" attribute=\"Component Tag\" String=\"&name;\" />\n\t\t</context>\n\t\t<!-- Type after the tag name. Ex: <C<number> /> -->\n\t\t<context name=\"ComponentTagFindType\" attribute=\"Normal Text\" lineEndContext=\"#pop!ComponentTag\" fallthrough=\"true\" fallthroughContext=\"#pop!ComponentTag\">\n\t\t\t<DetectChar context=\"#pop!TypeInsideTag\" attribute=\"Symbol\" char=\"&lt;\" />\n\t\t</context>\n\n\t\t<!-- Type assertion after the tag name -->\n\t\t<context name=\"TypeInsideTag\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!ComponentTag\" attribute=\"Symbol\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"DefaultTypeInsideTag\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"TypeInsideTag-AngleBracket\" attribute=\"Symbol\" char=\"&lt;\" />\n\t\t\t<DetectChar context=\"TypeInsideTag-CurlyBracket\" attribute=\"Symbol\" char=\"{\" />\n\t\t\t<DetectChar context=\"TypeInsideTag-SquareBracket\" attribute=\"Symbol\" char=\"[\" />\n\t\t\t<DetectChar context=\"TypeInsideTag-RoundBracket\" attribute=\"Symbol\" char=\"(\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-AngleBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-CurlyBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-SquareBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"]\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\t\t<context name=\"TypeInsideTag-RoundBracket\" attribute=\"Component Tag\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\")\" />\n\t\t\t<IncludeRules context=\"DefaultTypeInsideTag\" />\n\t\t</context>\n\n\t\t<!-- Inside the tag -->\n\t\t<context name=\"ElementTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Element Tag\" char=\"/\" char1=\"&gt;\" endRegion=\"Element\" />\n\t\t\t<DetectChar context=\"#pop!ElementTagContent\" attribute=\"Element Tag\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTag\" />\n\t\t</context>\n\t\t<context name=\"ComponentTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" attribute=\"Component Tag\" char=\"/\" char1=\"&gt;\" endRegion=\"ComponentElement\" />\n\t\t\t<DetectChar context=\"#pop!ComponentTagContent\" attribute=\"Component Tag\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"DefaultTag\" />\n\t\t</context>\n\t\t<context name=\"DefaultTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"Attribute\" attribute=\"Attribute\" String=\"&nameWithBound;\" />\n\t\t\t<IncludeRules context=\"FindEvaluatedCode\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S+&name;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<!-- Tag content: <Tag> content </Tag> -->\n\t\t<context name=\"ElementTagContent\" attribute=\"Tag Content Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Element Tag\" String=\"&lt;/\\s*&gt;\" endRegion=\"Element\" />\n\t\t\t<RegExpr context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/\\s*&simpleName;\" />\n\t\t\t<RegExpr context=\"ElementTagEnd\" attribute=\"Element Tag\" String=\"&lt;/\\s*(?=[A-Z_\\$])\" /> <!-- Component tag (error) -->\n\t\t\t<IncludeRules context=\"DefaultTagContent\" />\n\t\t</context>\n\t\t<context name=\"ComponentTagContent\" attribute=\"Tag Content Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Component Tag\" String=\"&lt;/\\s*&gt;\" endRegion=\"ComponentElement\" />\n\t\t\t<RegExpr context=\"ComponentTagEnd\" attribute=\"Component Tag\" String=\"&lt;/\\s*&name;\" />\n\t\t\t<IncludeRules context=\"DefaultTagContent\" />\n\t\t</context>\n\t\t<context name=\"DefaultTagContent\" attribute=\"Tag Content Text\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"FindTags\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t\t<IncludeRules context=\"FindEvaluatedCode\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Error\" char=\"&lt;\" />\n\t\t</context>\n\n\t\t<context name=\"ElementTagEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop#pop\" attribute=\"Element Tag\" char=\"&gt;\" endRegion=\"Element\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\t\t<context name=\"ComponentTagEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop#pop\" attribute=\"Component Tag\" char=\"&gt;\" endRegion=\"ComponentElement\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<!-- Tag attribute -->\n\t\t<context name=\"Attribute\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" attribute=\"Error\" String=\"\\=(?=\\s*/?&gt;)\" />\n\t\t\t<DetectChar context=\"#pop!Value\" attribute=\"Symbol\" char=\"=\" />\n\t\t\t<IncludeRules context=\"FindEndTag\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"{\" lookAhead=\"true\" /> <!-- EvaluatedCode -->\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Attribute\" String=\"&nameWithBound;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S+&name;\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\n\t\t<context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!ValueDQ\" attribute=\"Value\" char=\"&quot;\" />\n\t\t\t<DetectChar context=\"#pop!ValueSQ\" attribute=\"Value\" char=\"&apos;\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"{\" lookAhead=\"true\" /> <!-- EvaluatedCode -->\n\t\t\t<IncludeRules context=\"FindEndTag\" />\n\t\t\t<IncludeRules context=\"AllComments\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Error\" String=\"\\S\" />\n\t\t</context>\n\t\t<context name=\"ValueDQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Value\" char=\"&quot;\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t</context>\n\t\t<context name=\"ValueSQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Value\" char=\"&apos;\" />\n\t\t\t<IncludeRules context=\"FindEntityRefs\" />\n\t\t</context>\n\n\t\t<context name=\"FindEndTag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<Detect2Chars context=\"#pop\" char=\"/\" char1=\"&gt;\" lookAhead=\"true\" />\n\t\t\t<DetectChar context=\"#pop\" char=\"&gt;\" lookAhead=\"true\" />\n\t\t</context>\n\n\t\t<context name=\"FindEvaluatedCode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- Find tags and send to the \"EvaluatedCode\" context -->\n\t\t\t<DetectChar context=\"EvaluatedCode-BeforeTag\" attribute=\"Code Brackets\" char=\"{\" beginRegion=\"Code\" />\n\t\t</context>\n\t\t<context name=\"EvaluatedCode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Code Brackets\" char=\"}\" endRegion=\"Code\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\n\t\t<context name=\"AllComments\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- TypeScript uses this for comments -->\n\t\t\t<IncludeRules context=\"FindComments##JavaScript\" />\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\"      defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Comment\"          defStyleNum=\"dsComment\" />\n\n\t\t<itemData name=\"Tag Content Text\" defStyleNum=\"dsNormal\" />\n\t\t<itemData name=\"Element Tag\"      defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t<itemData name=\"Component Tag\"    defStyleNum=\"dsFunction\" bold=\"1\" spellChecking=\"false\" />\n\t\t<itemData name=\"Attribute\"        defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n\t\t<itemData name=\"Value\"            defStyleNum=\"dsString\" spellChecking=\"false\" />\n\t\t<itemData name=\"EntityRef\"        defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Code Brackets\"    defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n\t\t<itemData name=\"Error\"            defStyleNum=\"dsError\" spellChecking=\"false\" />\n\n\t\t<!-- itemDatas in TypeScript XML file -->\n\t\t<itemData name=\"Symbol\"           defStyleNum=\"dsOperator\" />\n\t\t<itemData name=\"ControlFlow\"      defStyleNum=\"dsControlFlow\" spellChecking=\"false\" />\n\t\t<itemData name=\"Reserved\"         defStyleNum=\"dsKeyword\" italic=\"true\" spellChecking=\"false\" />\n\t\t<itemData name=\"Keyword\"          defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t<itemData name=\"Module\"           defStyleNum=\"dsImport\" spellChecking=\"false\" />\n\t\t<itemData name=\"Template\"         defStyleNum=\"dsVerbatimString\" />\n\t\t<itemData name=\"Substitution\"     defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n\t\t<itemData name=\"Special Operators\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<keywords casesensitive=\"1\" />\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t</comments>\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/typescript.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY identifier \"([a-zA-Z_$]|[^[:ascii:]])([\\w$]|[^[:ascii:]])*\">\n\t<!ENTITY numSuffix  \"(?=n?([^\\w]|$))\">\n\t<!ENTITY objectOp   \"[\\?!]?\">\n\t<!ENTITY endLine    \"\\s*($|//|(/\\*.*\\*/\\s*)+$)\">\n]>\n\n<!--\n    ====================================================================\n\n      This file is part of the KDE's KSyntaxHighlighting framework.\n\n      Copyright 2018-2019 Nibaldo González S. (nibgonz@gmail.com)\n\n      This Source Code Form is subject to the terms of the MIT License.\n      If a copy of the license was not distributed with this file,\n      You can obtain one at: https://opensource.org/licenses/MIT\n\n    ====================================================================\n\n    This file is an extension of the JavaScript highlighter\n    (javascript.xml, Version 10 and higher).\n    Based on the TypeScript grammar files,\n    available at: https://github.com/Microsoft/TypeScript-TmLanguage\n\n    NOTE: TypeScript directives are highlighted by \"doxygen.xml\",\n    included in the JavaScript highlighter.\n    Ex:\n      /// <reference no-default-lib=\"true\"/>\n\n      Tags: reference, amd-dependency, amd-module\n      Attributes: path, types, no-default-lib, name\n\n    TODO: The keywords of built-in classes & functions can be included\n    in \"javascript.xml\". The only drawback is that some XML files use\n    JavaScript highlighting, through \"IncludeRules\", and should not\n    incorporate these keywords (for example: \"qml.xml\").\n\n    Change log:\n     * v5 [2019-08-30]: Avoid that ?: be used as conditional expressions.\n     * v4 [2019-07-16]: Fixed highlighting of keywords before \":\" in conditional expressions.\n     * v3 [2019-02-18]: Add support to bigint and the \"is\" keyword.\n                        Fixes keyword delimiters. Don't highlight regex\n                        after \"]\" and \")\". Multiple fixes and improvements.\n     * v2 [2018-12-29]: Don't highlight built-in classes as functions,\n                        fix float-points, improve types detection and other fixes.\n     * v1 [2018-11-18]: Initial version\n-->\n\n<language name=\"TypeScript\"\n          version=\"5\"\n          kateversion=\"5.53\"\n          section=\"Scripts\"\n          extensions=\"*.ts\"\n          priority=\"9\"\n          mimetype=\"text/typescript;application/typescript;text/x-typescript;application/x-typescript\"\n          indenter=\"cstyle\"\n          author=\"Nibaldo González (nibgonz@gmail.com)\"\n          license=\"MIT\">\n\n<highlighting>\n\n\t<!-- Include all JavaScript keywords! -->\n\t<list name=\"controlflow\">\n\t\t<include>controlflow##JavaScript</include>\n\t\t<item>goto</item>\n\t</list>\n\t<list name=\"keywords\">\n\t\t<include>keywords##JavaScript</include>\n\t\t<item>declare</item> <!-- storage.modifier.ts -->\n\t</list>\n\t<list name=\"reserved\">\n\t\t<include>reserved##JavaScript</include>\n\t\t<item>type</item>\n\t\t<item>arguments</item>\n\n\t\t<!-- Class -->\n\t\t<item>readonly</item>\n\t\t<item>abstract</item>\n\t\t<item>constructor</item>\n\t\t<item>get</item>\n\t\t<item>set</item>\n\t\t<!-- Also:\n\t\t     public, protected, private, async, super, new, static -->\n\t</list>\n\t<list name=\"module\">\n\t\t<include>module##JavaScript</include>\n\t</list>\n\t<list name=\"primitives\">\n\t\t<include>primitives##JavaScript</include>\n\t\t<!-- Types Built-in -->\n\t\t<item>object</item>\n\t\t<!-- Also:\n\t\t     this, true, false, undefined, null -->\n\t</list>\n\n\t<list name=\"control_export_types\">\n\t\t<!-- storage.type.namespace.ts -->\n\t\t<item>namespace</item>\n\t\t<item>module</item>\n\t</list>\n\t<list name=\"types_operator_expression\">\n\t\t<item>keyof</item>\n\t\t<item>infer</item>\n\t\t<!-- Also: is, typeof -->\n\t</list>\n\t<!-- Datatypes -->\n\t<list name=\"types\">\n\t\t<item>string</item>\n\t\t<item>number</item>\n\t\t<item>boolean</item>\n\t\t<item>symbol</item>\n\t\t<item>any</item>\n\t\t<item>void</item>\n\t\t<item>never</item>\n\t\t<item>unknown</item>\n\t\t<item>undefined</item>\n\t\t<item>null</item>\n\t\t<item>object</item>\n\t</list>\n\n\t<!-- Built-in Classes & Functions -->\n\n\t<list name=\"class_builtin\">\n\t\t<item>Array</item>\n\t\t<item>ArrayBuffer</item>\n\t\t<item>Atomics</item>\n\t\t<item>Boolean</item>\n\t\t<item>DataView</item>\n\t\t<item>Date</item>\n\t\t<item>Float32Array</item>\n\t\t<item>Float64Array</item>\n\t\t<item>Function</item>\n\t\t<item>Generator</item>\n\t\t<item>GeneratorFunction</item>\n\t\t<item>Int8Array</item>\n\t\t<item>Int16Array</item>\n\t\t<item>Int32Array</item>\n\t\t<item>Intl</item>\n\t\t<item>Map</item>\n\t\t<item>Number</item>\n\t\t<item>Object</item>\n\t\t<item>Proxy</item>\n\t\t<item>Reflect</item>\n\t\t<item>RegExp</item>\n\t\t<item>Set</item>\n\t\t<item>SharedArrayBuffer</item>\n\t\t<item>SIMD</item>\n\t\t<item>String</item>\n\t\t<item>Symbol</item>\n\t\t<item>TypedArray</item>\n\t\t<item>Uint8Array</item>\n\t\t<item>Uint16Array</item>\n\t\t<item>Uint32Array</item>\n\t\t<item>Uint8ClampedArray</item>\n\t\t<item>WeakMap</item>\n\t\t<item>WeakSet</item>\n\t\t<!-- Class: Error -->\n\t\t<item>Error</item>\n\t\t<item>EvalError</item>\n\t\t<item>InternalError</item>\n\t\t<item>RangeError</item>\n\t\t<item>ReferenceError</item>\n\t\t<item>SyntaxError</item>\n\t\t<item>TypeError</item>\n\t\t<item>URIError</item>\n\t\t<!-- Class: Math -->\n\t\t<item>Math</item>\n\t\t<!-- Class: Promise -->\n\t\t<item>Promise</item>\n\t\t<!-- Other -->\n\t\t<item>JSON</item>\n\t\t<item>console</item>\n\t\t<item>process</item>\n\t</list>\n\t<!-- DOM Classes -->\n\t<list name=\"class_dom\">\n\t\t<item>AnalyserNode</item>\n\t\t<item>ArrayBufferView</item>\n\t\t<item>Attr</item>\n\t\t<item>AudioBuffer</item>\n\t\t<item>AudioBufferSourceNode</item>\n\t\t<item>AudioContext</item>\n\t\t<item>AudioDestinationNode</item>\n\t\t<item>AudioListener</item>\n\t\t<item>AudioNode</item>\n\t\t<item>AudioParam</item>\n\t\t<item>BatteryManager</item>\n\t\t<item>BeforeUnloadEvent</item>\n\t\t<item>BiquadFilterNode</item>\n\t\t<item>Blob</item>\n\t\t<item>BufferSource</item>\n\t\t<item>ByteString</item>\n\t\t<item>CSS</item>\n\t\t<item>CSSConditionRule</item>\n\t\t<item>CSSCounterStyleRule</item>\n\t\t<item>CSSGroupingRule</item>\n\t\t<item>CSSMatrix</item>\n\t\t<item>CSSMediaRule</item>\n\t\t<item>CSSPageRule</item>\n\t\t<item>CSSPrimitiveValue</item>\n\t\t<item>CSSRule</item>\n\t\t<item>CSSRuleList</item>\n\t\t<item>CSSStyleDeclaration</item>\n\t\t<item>CSSStyleRule</item>\n\t\t<item>CSSStyleSheet</item>\n\t\t<item>CSSSupportsRule</item>\n\t\t<item>CSSValue</item>\n\t\t<item>CSSValueList</item>\n\t\t<item>CanvasGradient</item>\n\t\t<item>CanvasImageSource</item>\n\t\t<item>CanvasPattern</item>\n\t\t<item>CanvasRenderingContext2D</item>\n\t\t<item>ChannelMergerNode</item>\n\t\t<item>ChannelSplitterNode</item>\n\t\t<item>CharacterData</item>\n\t\t<item>ChromeWorker</item>\n\t\t<item>CloseEvent</item>\n\t\t<item>Comment</item>\n\t\t<item>CompositionEvent</item>\n\t\t<item>Console</item>\n\t\t<item>ConvolverNode</item>\n\t\t<item>Coordinates</item>\n\t\t<item>Credential</item>\n\t\t<item>CredentialsContainer</item>\n\t\t<item>Crypto</item>\n\t\t<item>CryptoKey</item>\n\t\t<item>CustomEvent</item>\n\t\t<item>DOMError</item>\n\t\t<item>DOMException</item>\n\t\t<item>DOMHighResTimeStamp</item>\n\t\t<item>DOMImplementation</item>\n\t\t<item>DOMString</item>\n\t\t<item>DOMStringList</item>\n\t\t<item>DOMStringMap</item>\n\t\t<item>DOMTimeStamp</item>\n\t\t<item>DOMTokenList</item>\n\t\t<item>DataTransfer</item>\n\t\t<item>DataTransferItem</item>\n\t\t<item>DataTransferItemList</item>\n\t\t<item>DedicatedWorkerGlobalScope</item>\n\t\t<item>DelayNode</item>\n\t\t<item>DeviceProximityEvent</item>\n\t\t<item>DirectoryEntry</item>\n\t\t<item>DirectoryEntrySync</item>\n\t\t<item>DirectoryReader</item>\n\t\t<item>DirectoryReaderSync</item>\n\t\t<item>Document</item>\n\t\t<item>DocumentFragment</item>\n\t\t<item>DocumentTouch</item>\n\t\t<item>DocumentType</item>\n\t\t<item>DragEvent</item>\n\t\t<item>DynamicsCompressorNode</item>\n\t\t<item>Element</item>\n\t\t<item>Entry</item>\n\t\t<item>EntrySync</item>\n\t\t<item>ErrorEvent</item>\n\t\t<item>Event</item>\n\t\t<item>EventListener</item>\n\t\t<item>EventSource</item>\n\t\t<item>EventTarget</item>\n\t\t<item>FederatedCredential</item>\n\t\t<item>FetchEvent</item>\n\t\t<item>File</item>\n\t\t<item>FileEntry</item>\n\t\t<item>FileEntrySync</item>\n\t\t<item>FileException</item>\n\t\t<item>FileList</item>\n\t\t<item>FileReader</item>\n\t\t<item>FileReaderSync</item>\n\t\t<item>FileSystem</item>\n\t\t<item>FileSystemSync</item>\n\t\t<item>FontFace</item>\n\t\t<item>FormData</item>\n\t\t<item>GainNode</item>\n\t\t<item>Gamepad</item>\n\t\t<item>GamepadButton</item>\n\t\t<item>GamepadEvent</item>\n\t\t<item>Geolocation</item>\n\t\t<item>GlobalEventHandlers</item>\n\t\t<item>HTMLAnchorElement</item>\n\t\t<item>HTMLAreaElement</item>\n\t\t<item>HTMLAudioElement</item>\n\t\t<item>HTMLBRElement</item>\n\t\t<item>HTMLBaseElement</item>\n\t\t<item>HTMLBodyElement</item>\n\t\t<item>HTMLButtonElement</item>\n\t\t<item>HTMLCanvasElement</item>\n\t\t<item>HTMLCollection</item>\n\t\t<item>HTMLContentElement</item>\n\t\t<item>HTMLDListElement</item>\n\t\t<item>HTMLDataElement</item>\n\t\t<item>HTMLDataListElement</item>\n\t\t<item>HTMLDialogElement</item>\n\t\t<item>HTMLDivElement</item>\n\t\t<item>HTMLDocument</item>\n\t\t<item>HTMLElement</item>\n\t\t<item>HTMLEmbedElement</item>\n\t\t<item>HTMLFieldSetElement</item>\n\t\t<item>HTMLFontElement</item>\n\t\t<item>HTMLFormControlsCollection</item>\n\t\t<item>HTMLFormElement</item>\n\t\t<item>HTMLHRElement</item>\n\t\t<item>HTMLHeadElement</item>\n\t\t<item>HTMLHeadingElement</item>\n\t\t<item>HTMLHtmlElement</item>\n\t\t<item>HTMLIFrameElement</item>\n\t\t<item>HTMLImageElement</item>\n\t\t<item>HTMLInputElement</item>\n\t\t<item>HTMLKeygenElement</item>\n\t\t<item>HTMLLIElement</item>\n\t\t<item>HTMLLabelElement</item>\n\t\t<item>HTMLLegendElement</item>\n\t\t<item>HTMLLinkElement</item>\n\t\t<item>HTMLMapElement</item>\n\t\t<item>HTMLMediaElement</item>\n\t\t<item>HTMLMetaElement</item>\n\t\t<item>HTMLMeterElement</item>\n\t\t<item>HTMLModElement</item>\n\t\t<item>HTMLOListElement</item>\n\t\t<item>HTMLObjectElement</item>\n\t\t<item>HTMLOptGroupElement</item>\n\t\t<item>HTMLOptionElement</item>\n\t\t<item>HTMLOptionsCollection</item>\n\t\t<item>HTMLOutputElement</item>\n\t\t<item>HTMLParagraphElement</item>\n\t\t<item>HTMLParamElement</item>\n\t\t<item>HTMLPreElement</item>\n\t\t<item>HTMLProgressElement</item>\n\t\t<item>HTMLQuoteElement</item>\n\t\t<item>HTMLScriptElement</item>\n\t\t<item>HTMLSelectElement</item>\n\t\t<item>HTMLShadowElement</item>\n\t\t<item>HTMLSourceElement</item>\n\t\t<item>HTMLSpanElement</item>\n\t\t<item>HTMLStyleElement</item>\n\t\t<item>HTMLTableCaptionElement</item>\n\t\t<item>HTMLTableCellElement</item>\n\t\t<item>HTMLTableColElement</item>\n\t\t<item>HTMLTableDataCellElement</item>\n\t\t<item>HTMLTableElement</item>\n\t\t<item>HTMLTableHeaderCellElement</item>\n\t\t<item>HTMLTableRowElement</item>\n\t\t<item>HTMLTableSectionElement</item>\n\t\t<item>HTMLTextAreaElement</item>\n\t\t<item>HTMLTimeElement</item>\n\t\t<item>HTMLTitleElement</item>\n\t\t<item>HTMLTrackElement</item>\n\t\t<item>HTMLUListElement</item>\n\t\t<item>HTMLUnknownElement</item>\n\t\t<item>HTMLVideoElement</item>\n\t\t<item>HashChangeEvent</item>\n\t\t<item>History</item>\n\t\t<item>IDBCursor</item>\n\t\t<item>IDBCursorWithValue</item>\n\t\t<item>IDBDatabase</item>\n\t\t<item>IDBEnvironment</item>\n\t\t<item>IDBFactory</item>\n\t\t<item>IDBIndex</item>\n\t\t<item>IDBKeyRange</item>\n\t\t<item>IDBMutableFile</item>\n\t\t<item>IDBObjectStore</item>\n\t\t<item>IDBOpenDBRequest</item>\n\t\t<item>IDBRequest</item>\n\t\t<item>IDBTransaction</item>\n\t\t<item>IDBVersionChangeEvent</item>\n\t\t<item>IIRFilterNode</item>\n\t\t<item>IdentityManager</item>\n\t\t<item>ImageBitmap</item>\n\t\t<item>ImageBitmapFactories</item>\n\t\t<item>ImageData</item>\n\t\t<item>Index</item>\n\t\t<item>InputDeviceCapabilities</item>\n\t\t<item>InputEvent</item>\n\t\t<item>InstallEvent</item>\n\t\t<item>InstallTrigger</item>\n\t\t<item>KeyboardEvent</item>\n\t\t<item>LinkStyle</item>\n\t\t<item>LocalFileSystem</item>\n\t\t<item>LocalFileSystemSync</item>\n\t\t<item>Location</item>\n\t\t<item>MIDIAccess</item>\n\t\t<item>MIDIConnectionEvent</item>\n\t\t<item>MIDIInput</item>\n\t\t<item>MIDIInputMap</item>\n\t\t<item>MIDIOutputMap</item>\n\t\t<item>MediaElementAudioSourceNode</item>\n\t\t<item>MediaError</item>\n\t\t<item>MediaKeyMessageEvent</item>\n\t\t<item>MediaKeySession</item>\n\t\t<item>MediaKeyStatusMap</item>\n\t\t<item>MediaKeySystemAccess</item>\n\t\t<item>MediaKeySystemConfiguration</item>\n\t\t<item>MediaKeys</item>\n\t\t<item>MediaRecorder</item>\n\t\t<item>MediaStream</item>\n\t\t<item>MediaStreamAudioDestinationNode</item>\n\t\t<item>MediaStreamAudioSourceNode</item>\n\t\t<item>MessageChannel</item>\n\t\t<item>MessageEvent</item>\n\t\t<item>MessagePort</item>\n\t\t<item>MouseEvent</item>\n\t\t<item>MutationObserver</item>\n\t\t<item>MutationRecord</item>\n\t\t<item>NamedNodeMap</item>\n\t\t<item>Navigator</item>\n\t\t<item>NavigatorConcurrentHardware</item>\n\t\t<item>NavigatorGeolocation</item>\n\t\t<item>NavigatorID</item>\n\t\t<item>NavigatorLanguage</item>\n\t\t<item>NavigatorOnLine</item>\n\t\t<item>Node</item>\n\t\t<item>NodeFilter</item>\n\t\t<item>NodeIterator</item>\n\t\t<item>NodeList</item>\n\t\t<item>NonDocumentTypeChildNode</item>\n\t\t<item>Notification</item>\n\t\t<item>OfflineAudioCompletionEvent</item>\n\t\t<item>OfflineAudioContext</item>\n\t\t<item>OscillatorNode</item>\n\t\t<item>PageTransitionEvent</item>\n\t\t<item>PannerNode</item>\n\t\t<item>ParentNode</item>\n\t\t<item>PasswordCredential</item>\n\t\t<item>Path2D</item>\n\t\t<item>PaymentAddress</item>\n\t\t<item>PaymentRequest</item>\n\t\t<item>PaymentResponse</item>\n\t\t<item>Performance</item>\n\t\t<item>PerformanceEntry</item>\n\t\t<item>PerformanceFrameTiming</item>\n\t\t<item>PerformanceMark</item>\n\t\t<item>PerformanceMeasure</item>\n\t\t<item>PerformanceNavigation</item>\n\t\t<item>PerformanceNavigationTiming</item>\n\t\t<item>PerformanceObserver</item>\n\t\t<item>PerformanceObserverEntryList</item>\n\t\t<item>PerformanceResourceTiming</item>\n\t\t<item>PerformanceTiming</item>\n\t\t<item>PeriodicSyncEvent</item>\n\t\t<item>PeriodicWave</item>\n\t\t<item>Plugin</item>\n\t\t<item>Point</item>\n\t\t<item>PointerEvent</item>\n\t\t<item>PopStateEvent</item>\n\t\t<item>PortCollection</item>\n\t\t<item>Position</item>\n\t\t<item>PositionError</item>\n\t\t<item>PositionOptions</item>\n\t\t<item>PresentationConnectionClosedEvent</item>\n\t\t<item>PresentationConnectionList</item>\n\t\t<item>PresentationReceiver</item>\n\t\t<item>ProcessingInstruction</item>\n\t\t<item>ProgressEvent</item>\n\t\t<item>PromiseRejectionEvent</item>\n\t\t<item>PushEvent</item>\n\t\t<item>PushRegistrationManager</item>\n\t\t<item>RTCCertificate</item>\n\t\t<item>RTCConfiguration</item>\n\t\t<item>RTCPeerConnection</item>\n\t\t<item>RTCSessionDescriptionCallback</item>\n\t\t<item>RTCStatsReport</item>\n\t\t<item>RadioNodeList</item>\n\t\t<item>RandomSource</item>\n\t\t<item>Range</item>\n\t\t<item>ReadableByteStream</item>\n\t\t<item>RenderingContext</item>\n\t\t<item>SVGAElement</item>\n\t\t<item>SVGAngle</item>\n\t\t<item>SVGAnimateColorElement</item>\n\t\t<item>SVGAnimateElement</item>\n\t\t<item>SVGAnimateMotionElement</item>\n\t\t<item>SVGAnimateTransformElement</item>\n\t\t<item>SVGAnimatedAngle</item>\n\t\t<item>SVGAnimatedBoolean</item>\n\t\t<item>SVGAnimatedEnumeration</item>\n\t\t<item>SVGAnimatedInteger</item>\n\t\t<item>SVGAnimatedLength</item>\n\t\t<item>SVGAnimatedLengthList</item>\n\t\t<item>SVGAnimatedNumber</item>\n\t\t<item>SVGAnimatedNumberList</item>\n\t\t<item>SVGAnimatedPoints</item>\n\t\t<item>SVGAnimatedPreserveAspectRatio</item>\n\t\t<item>SVGAnimatedRect</item>\n\t\t<item>SVGAnimatedString</item>\n\t\t<item>SVGAnimatedTransformList</item>\n\t\t<item>SVGAnimationElement</item>\n\t\t<item>SVGCircleElement</item>\n\t\t<item>SVGClipPathElement</item>\n\t\t<item>SVGCursorElement</item>\n\t\t<item>SVGDefsElement</item>\n\t\t<item>SVGDescElement</item>\n\t\t<item>SVGElement</item>\n\t\t<item>SVGEllipseElement</item>\n\t\t<item>SVGEvent</item>\n\t\t<item>SVGFilterElement</item>\n\t\t<item>SVGFontElement</item>\n\t\t<item>SVGFontFaceElement</item>\n\t\t<item>SVGFontFaceFormatElement</item>\n\t\t<item>SVGFontFaceNameElement</item>\n\t\t<item>SVGFontFaceSrcElement</item>\n\t\t<item>SVGFontFaceUriElement</item>\n\t\t<item>SVGForeignObjectElement</item>\n\t\t<item>SVGGElement</item>\n\t\t<item>SVGGlyphElement</item>\n\t\t<item>SVGGradientElement</item>\n\t\t<item>SVGHKernElement</item>\n\t\t<item>SVGImageElement</item>\n\t\t<item>SVGLength</item>\n\t\t<item>SVGLengthList</item>\n\t\t<item>SVGLineElement</item>\n\t\t<item>SVGLinearGradientElement</item>\n\t\t<item>SVGMPathElement</item>\n\t\t<item>SVGMaskElement</item>\n\t\t<item>SVGMatrix</item>\n\t\t<item>SVGMissingGlyphElement</item>\n\t\t<item>SVGNumber</item>\n\t\t<item>SVGNumberList</item>\n\t\t<item>SVGPathElement</item>\n\t\t<item>SVGPatternElement</item>\n\t\t<item>SVGPoint</item>\n\t\t<item>SVGPolygonElement</item>\n\t\t<item>SVGPolylineElement</item>\n\t\t<item>SVGPreserveAspectRatio</item>\n\t\t<item>SVGRadialGradientElement</item>\n\t\t<item>SVGRect</item>\n\t\t<item>SVGRectElement</item>\n\t\t<item>SVGSVGElement</item>\n\t\t<item>SVGScriptElement</item>\n\t\t<item>SVGSetElement</item>\n\t\t<item>SVGStopElement</item>\n\t\t<item>SVGStringList</item>\n\t\t<item>SVGStylable</item>\n\t\t<item>SVGStyleElement</item>\n\t\t<item>SVGSwitchElement</item>\n\t\t<item>SVGSymbolElement</item>\n\t\t<item>SVGTRefElement</item>\n\t\t<item>SVGTSpanElement</item>\n\t\t<item>SVGTests</item>\n\t\t<item>SVGTextElement</item>\n\t\t<item>SVGTextPositioningElement</item>\n\t\t<item>SVGTitleElement</item>\n\t\t<item>SVGTransform</item>\n\t\t<item>SVGTransformList</item>\n\t\t<item>SVGTransformable</item>\n\t\t<item>SVGUseElement</item>\n\t\t<item>SVGVKernElement</item>\n\t\t<item>SVGViewElement</item>\n\t\t<item>ServiceWorker</item>\n\t\t<item>ServiceWorkerContainer</item>\n\t\t<item>ServiceWorkerGlobalScope</item>\n\t\t<item>ServiceWorkerRegistration</item>\n\t\t<item>ServiceWorkerState</item>\n\t\t<item>ShadowRoot</item>\n\t\t<item>SharedWorker</item>\n\t\t<item>SharedWorkerGlobalScope</item>\n\t\t<item>SourceBufferList</item>\n\t\t<item>StereoPannerNode</item>\n\t\t<item>Storage</item>\n\t\t<item>StorageEvent</item>\n\t\t<item>StyleSheet</item>\n\t\t<item>StyleSheetList</item>\n\t\t<item>SubtleCrypto</item>\n\t\t<item>SyncEvent</item>\n\t\t<item>Text</item>\n\t\t<item>TextMetrics</item>\n\t\t<item>TimeEvent</item>\n\t\t<item>TimeRanges</item>\n\t\t<item>Touch</item>\n\t\t<item>TouchEvent</item>\n\t\t<item>TouchList</item>\n\t\t<item>Transferable</item>\n\t\t<item>TreeWalker</item>\n\t\t<item>UIEvent</item>\n\t\t<item>USVString</item>\n\t\t<item>VRDisplayCapabilities</item>\n\t\t<item>ValidityState</item>\n\t\t<item>WaveShaperNode</item>\n\t\t<item>WebGL</item>\n\t\t<item>WebGLActiveInfo</item>\n\t\t<item>WebGLBuffer</item>\n\t\t<item>WebGLContextEvent</item>\n\t\t<item>WebGLFramebuffer</item>\n\t\t<item>WebGLProgram</item>\n\t\t<item>WebGLRenderbuffer</item>\n\t\t<item>WebGLRenderingContext</item>\n\t\t<item>WebGLShader</item>\n\t\t<item>WebGLShaderPrecisionFormat</item>\n\t\t<item>WebGLTexture</item>\n\t\t<item>WebGLTimerQueryEXT</item>\n\t\t<item>WebGLTransformFeedback</item>\n\t\t<item>WebGLUniformLocation</item>\n\t\t<item>WebGLVertexArrayObject</item>\n\t\t<item>WebGLVertexArrayObjectOES</item>\n\t\t<item>WebSocket</item>\n\t\t<item>WebSockets</item>\n\t\t<item>WebVTT</item>\n\t\t<item>WheelEvent</item>\n\t\t<item>Window</item>\n\t\t<item>WindowBase64</item>\n\t\t<item>WindowEventHandlers</item>\n\t\t<item>WindowTimers</item>\n\t\t<item>Worker</item>\n\t\t<item>WorkerGlobalScope</item>\n\t\t<item>WorkerLocation</item>\n\t\t<item>WorkerNavigator</item>\n\t\t<item>XMLHttpRequest</item>\n\t\t<item>XMLHttpRequestEventTarget</item>\n\t\t<item>XMLSerializer</item>\n\t\t<item>XPathExpression</item>\n\t\t<item>XPathResult</item>\n\t\t<item>XSLTProcessor</item>\n\t</list>\n\t<!-- Node.js Classes -->\n\t<list name=\"class_node\">\n\t\t<item>Buffer</item>\n\t\t<item>EventEmitter</item>\n\t\t<item>Server</item>\n\t\t<item>Pipe</item>\n\t\t<item>Socket</item>\n\t\t<item>REPLServer</item>\n\t\t<item>ReadStream</item>\n\t\t<item>WriteStream</item>\n\t\t<item>Stream</item>\n\t\t<item>Inflate</item>\n\t\t<item>Deflate</item>\n\t\t<item>InflateRaw</item>\n\t\t<item>DeflateRaw</item>\n\t\t<item>GZip</item>\n\t\t<item>GUnzip</item>\n\t\t<item>Unzip</item>\n\t\t<item>Zip</item>\n\t</list>\n\t<!-- General Properties of Classes -->\n\t<list name=\"variable_property\">\n\t\t<item>constructor</item>\n\t\t<item>length</item>\n\t\t<item>prototype</item>\n\t\t<item>__proto__</item>\n\t\t<item>EPSILON</item>\n\t\t<item>MAX_SAFE_INTEGER</item>\n\t\t<item>MAX_VALUE</item>\n\t\t<item>MIN_SAFE_INTEGER</item>\n\t\t<item>MIN_VALUE</item>\n\t\t<item>NEGATIVE_INFINITY</item>\n\t\t<item>POSITIVE_INFINITY</item>\n\t</list>\n\t<!-- General Built-in Functions -->\n\t<list name=\"functions\">\n\t\t<item>clearInterval</item>\n\t\t<item>clearTimeout</item>\n\t\t<item>decodeURI</item>\n\t\t<item>decodeURIComponent</item>\n\t\t<item>encodeURI</item>\n\t\t<item>encodeURIComponent</item>\n\t\t<item>escape</item>\n\t\t<item>eval</item>\n\t\t<item>isFinite</item>\n\t\t<item>isNaN</item>\n\t\t<item>parseFloat</item>\n\t\t<item>parseInt</item>\n\t\t<item>require</item>\n\t\t<item>setTimeout</item>\n\t\t<item>setInterval</item>\n\t\t<item>super</item>\n\t\t<item>unescape</item>\n\t\t<item>uneval</item>\n\t</list>\n\t<!-- Methods of Math Class -->\n\t<list name=\"math_functions\">\n\t\t<item>abs</item>\n\t\t<item>acos</item>\n\t\t<item>acosh</item>\n\t\t<item>asin</item>\n\t\t<item>asinh</item>\n\t\t<item>atan</item>\n\t\t<item>atan2</item>\n\t\t<item>atanh</item>\n\t\t<item>cbrt</item>\n\t\t<item>ceil</item>\n\t\t<item>clz32</item>\n\t\t<item>cos</item>\n\t\t<item>cosh</item>\n\t\t<item>exp</item>\n\t\t<item>expm1</item>\n\t\t<item>floor</item>\n\t\t<item>fround</item>\n\t\t<item>hypot</item>\n\t\t<item>imul</item>\n\t\t<item>log</item>\n\t\t<item>log10</item>\n\t\t<item>log1p</item>\n\t\t<item>log2</item>\n\t\t<item>max</item>\n\t\t<item>min</item>\n\t\t<item>pow</item>\n\t\t<item>random</item>\n\t\t<item>round</item>\n\t\t<item>sign</item>\n\t\t<item>sin</item>\n\t\t<item>sinh</item>\n\t\t<item>sqrt</item>\n\t\t<item>tan</item>\n\t\t<item>tanh</item>\n\t\t<item>trunc</item>\n\t</list>\n\t<!-- Constants of Math Class-->\n\t<list name=\"math_property_constants\">\n\t\t<item>E</item>\n\t\t<item>LN10</item>\n\t\t<item>LN2</item>\n\t\t<item>LOG10E</item>\n\t\t<item>LOG2E</item>\n\t\t<item>PI</item>\n\t\t<item>SQRT1_2</item>\n\t\t<item>SQRT2</item>\n\t</list>\n\t<!-- Functions of \"console\" -->\n\t<list name=\"console_functions\">\n\t\t<item>assert</item>\n\t\t<item>clear</item>\n\t\t<item>count</item>\n\t\t<item>debug</item>\n\t\t<item>dir</item>\n\t\t<item>error</item>\n\t\t<item>group</item>\n\t\t<item>groupCollapsed</item>\n\t\t<item>groupEnd</item>\n\t\t<item>info</item>\n\t\t<item>log</item>\n\t\t<item>profile</item>\n\t\t<item>profileEnd</item>\n\t\t<item>table</item>\n\t\t<item>time</item>\n\t\t<item>timeEnd</item>\n\t\t<item>timeStamp</item>\n\t\t<item>trace</item>\n\t\t<item>warn</item>\n\t</list>\n\t<!-- Methods of JSON Class -->\n\t<list name=\"json_functions\">\n\t\t<item>parse</item>\n\t\t<item>stringify</item>\n\t</list>\n\t<!-- Attributes of Node.js Classes -->\n\t<list name=\"node_object\">\n\t\t<item>global</item>\n\t\t<item>GLOBAL</item>\n\t\t<item>root</item>\n\t\t<item>__dirname</item>\n\t\t<item>__filename</item>\n\t</list>\n\t<!-- Properties of \"process\" -->\n\t<list name=\"process_property\">\n\t\t<item>arch</item>\n\t\t<item>argv</item>\n\t\t<item>config</item>\n\t\t<item>connected</item>\n\t\t<item>env</item>\n\t\t<item>execArgv</item>\n\t\t<item>execPath</item>\n\t\t<item>exitCode</item>\n\t\t<item>mainModule</item>\n\t\t<item>pid</item>\n\t\t<item>platform</item>\n\t\t<item>release</item>\n\t\t<item>stderr</item>\n\t\t<item>stdin</item>\n\t\t<item>stdout</item>\n\t\t<item>title</item>\n\t\t<item>version</item>\n\t\t<item>versions</item>\n\t</list>\n\t<!-- Functions of \"process\" -->\n\t<list name=\"process_functions\">\n\t\t<item>abort</item>\n\t\t<item>chdir</item>\n\t\t<item>cwd</item>\n\t\t<item>disconnect</item>\n\t\t<item>exit</item>\n\t\t<item>setegid</item>\n\t\t<item>seteuid</item>\n\t\t<item>getegid</item>\n\t\t<item>geteuid</item>\n\t\t<item>setgid</item>\n\t\t<item>setuid</item>\n\t\t<item>getgid</item>\n\t\t<item>getuid</item>\n\t\t<item>send</item>\n\t\t<item>setgroups</item>\n\t\t<item>getgroups</item>\n\t\t<item>initgroups</item>\n\t\t<item>kill</item>\n\t\t<item>memoryUsage</item>\n\t\t<item>nextTick</item>\n\t\t<item>umask</item>\n\t\t<item>uptime</item>\n\t\t<item>hrtime</item>\n\t</list>\n\t<!-- Methods of Promise Class -->\n\t<list name=\"promise_functions\">\n\t\t<item>all</item>\n\t\t<item>catch</item>\n\t\t<item>finally</item>\n\t\t<item>race</item>\n\t\t<item>reject</item>\n\t\t<item>resolve</item>\n\t\t<item>then</item>\n\t</list>\n\t<!-- DOM Variables -->\n\t<list name=\"dom_variable\">\n\t\t<item>document</item>\n\t\t<item>event</item>\n\t\t<item>navigator</item>\n\t\t<item>performance</item>\n\t\t<item>screen</item>\n\t\t<item>window</item>\n\t</list>\n\t<!-- Constants of DOM Classes -->\n\t<list name=\"dom_constant\">\n\t\t<item>ATTRIBUTE_NODE</item>\n\t\t<item>CDATA_SECTION_NODE</item>\n\t\t<item>COMMENT_NODE</item>\n\t\t<item>DOCUMENT_FRAGMENT_NODE</item>\n\t\t<item>DOCUMENT_NODE</item>\n\t\t<item>DOCUMENT_TYPE_NODE</item>\n\t\t<item>DOMSTRING_SIZE_ERR</item>\n\t\t<item>ELEMENT_NODE</item>\n\t\t<item>ENTITY_NODE</item>\n\t\t<item>ENTITY_REFERENCE_NODE</item>\n\t\t<item>HIERARCHY_REQUEST_ERR</item>\n\t\t<item>INDEX_SIZE_ERR</item>\n\t\t<item>INUSE_ATTRIBUTE_ERR</item>\n\t\t<item>INVALID_CHARACTER_ERR</item>\n\t\t<item>NO_DATA_ALLOWED_ERR</item>\n\t\t<item>NO_MODIFICATION_ALLOWED_ERR</item>\n\t\t<item>NOT_FOUND_ERR</item>\n\t\t<item>NOT_SUPPORTED_ERR</item>\n\t\t<item>NOTATION_NODE</item>\n\t\t<item>PROCESSING_INSTRUCTION_NODE</item>\n\t\t<item>TEXT_NODE</item>\n\t\t<item>WRONG_DOCUMENT_ERR</item>\n\t</list>\n\t<!-- Properties of DOM Classes -->\n\t<list name=\"dom_property\">\n\t\t<item>_content</item>\n\t\t<item>x</item>\n\t\t<item>y</item>\n\t\t<item>z</item>\n\t\t<item>abbr</item>\n\t\t<item>above</item>\n\t\t<item>accept</item>\n\t\t<item>acceptCharset</item>\n\t\t<item>accessKey</item>\n\t\t<item>action</item>\n\t\t<item>align</item>\n\t\t<item>aLink</item>\n\t\t<item>vLink</item>\n\t\t<item>aLinkcolor</item>\n\t\t<item>vLinkcolor</item>\n\t\t<item>all</item>\n\t\t<item>alt</item>\n\t\t<item>anchors</item>\n\t\t<item>appCodeName</item>\n\t\t<item>appCore</item>\n\t\t<item>applets</item>\n\t\t<item>appMinorVersion</item>\n\t\t<item>appName</item>\n\t\t<item>appVersion</item>\n\t\t<item>archive</item>\n\t\t<item>areas</item>\n\t\t<item>arguments</item>\n\t\t<item>attributes</item>\n\t\t<item>availHeight</item>\n\t\t<item>availLeft</item>\n\t\t<item>availTop</item>\n\t\t<item>availWidth</item>\n\t\t<item>axis</item>\n\t\t<item>background</item>\n\t\t<item>backgroundColor</item>\n\t\t<item>backgroundImage</item>\n\t\t<item>below</item>\n\t\t<item>bgColor</item>\n\t\t<item>body</item>\n\t\t<item>border</item>\n\t\t<item>borderBottomWidth</item>\n\t\t<item>borderColor</item>\n\t\t<item>borderLeftWidth</item>\n\t\t<item>borderRightWidth</item>\n\t\t<item>borderStyle</item>\n\t\t<item>borderTopWidth</item>\n\t\t<item>borderWidth</item>\n\t\t<item>bottom</item>\n\t\t<item>bufferDepth</item>\n\t\t<item>callee</item>\n\t\t<item>caller</item>\n\t\t<item>caption</item>\n\t\t<item>cellPadding</item>\n\t\t<item>cells</item>\n\t\t<item>cellSpacing</item>\n\t\t<item>ch</item>\n\t\t<item>characterSet</item>\n\t\t<item>charset</item>\n\t\t<item>checked</item>\n\t\t<item>childNodes</item>\n\t\t<item>chOff</item>\n\t\t<item>cite</item>\n\t\t<item>classes</item>\n\t\t<item>className</item>\n\t\t<item>clear</item>\n\t\t<item>clientInformation</item>\n\t\t<item>clip</item>\n\t\t<item>clipBoardData</item>\n\t\t<item>closed</item>\n\t\t<item>code</item>\n\t\t<item>codeBase</item>\n\t\t<item>codeType</item>\n\t\t<item>color</item>\n\t\t<item>colorDepth</item>\n\t\t<item>cols</item>\n\t\t<item>colSpan</item>\n\t\t<item>compact</item>\n\t\t<item>complete</item>\n\t\t<item>components</item>\n\t\t<item>content</item>\n\t\t<item>controllers</item>\n\t\t<item>cookie</item>\n\t\t<item>cookieEnabled</item>\n\t\t<item>cords</item>\n\t\t<item>cpuClass</item>\n\t\t<item>crypto</item>\n\t\t<item>current</item>\n\t\t<item>data</item>\n\t\t<item>dateTime</item>\n\t\t<item>declare</item>\n\t\t<item>defaultCharset</item>\n\t\t<item>defaultChecked</item>\n\t\t<item>defaultSelected</item>\n\t\t<item>defaultStatus</item>\n\t\t<item>defaultValue</item>\n\t\t<item>defaultView</item>\n\t\t<item>defer</item>\n\t\t<item>description</item>\n\t\t<item>dialogArguments</item>\n\t\t<item>dialogHeight</item>\n\t\t<item>dialogLeft</item>\n\t\t<item>dialogTop</item>\n\t\t<item>dialogWidth</item>\n\t\t<item>dir</item>\n\t\t<item>directories</item>\n\t\t<item>disabled</item>\n\t\t<item>display</item>\n\t\t<item>docmain</item>\n\t\t<item>doctype</item>\n\t\t<item>documentElement</item>\n\t\t<item>elements</item>\n\t\t<item>embeds</item>\n\t\t<item>enabledPlugin</item>\n\t\t<item>encoding</item>\n\t\t<item>enctype</item>\n\t\t<item>entities</item>\n\t\t<item>event</item>\n\t\t<item>expando</item>\n\t\t<item>external</item>\n\t\t<item>face</item>\n\t\t<item>fgColor</item>\n\t\t<item>filename</item>\n\t\t<item>firstChild</item>\n\t\t<item>fontFamily</item>\n\t\t<item>fontSize</item>\n\t\t<item>fontWeight</item>\n\t\t<item>form</item>\n\t\t<item>formName</item>\n\t\t<item>forms</item>\n\t\t<item>frame</item>\n\t\t<item>frameBorder</item>\n\t\t<item>frameElement</item>\n\t\t<item>frames</item>\n\t\t<item>hasFocus</item>\n\t\t<item>hash</item>\n\t\t<item>headers</item>\n\t\t<item>height</item>\n\t\t<item>history</item>\n\t\t<item>host</item>\n\t\t<item>hostname</item>\n\t\t<item>href</item>\n\t\t<item>hreflang</item>\n\t\t<item>hspace</item>\n\t\t<item>htmlFor</item>\n\t\t<item>httpEquiv</item>\n\t\t<item>id</item>\n\t\t<item>ids</item>\n\t\t<item>ignoreCase</item>\n\t\t<item>images</item>\n\t\t<item>implementation</item>\n\t\t<item>index</item>\n\t\t<item>innerHeight</item>\n\t\t<item>innerWidth</item>\n\t\t<item>input</item>\n\t\t<item>isMap</item>\n\t\t<item>label</item>\n\t\t<item>lang</item>\n\t\t<item>language</item>\n\t\t<item>lastChild</item>\n\t\t<item>lastIndex</item>\n\t\t<item>lastMatch</item>\n\t\t<item>lastModified</item>\n\t\t<item>lastParen</item>\n\t\t<item>layers</item>\n\t\t<item>layerX</item>\n\t\t<item>layerY</item>\n\t\t<item>left</item>\n\t\t<item>leftContext</item>\n\t\t<item>lineHeight</item>\n\t\t<item>link</item>\n\t\t<item>linkColor</item>\n\t\t<item>links</item>\n\t\t<item>listStyleType</item>\n\t\t<item>localName</item>\n\t\t<item>location</item>\n\t\t<item>locationbar</item>\n\t\t<item>longDesc</item>\n\t\t<item>lowsrc</item>\n\t\t<item>lowSrc</item>\n\t\t<item>marginBottom</item>\n\t\t<item>marginHeight</item>\n\t\t<item>marginLeft</item>\n\t\t<item>marginRight</item>\n\t\t<item>marginTop</item>\n\t\t<item>marginWidth</item>\n\t\t<item>maxLength</item>\n\t\t<item>media</item>\n\t\t<item>menubar</item>\n\t\t<item>method</item>\n\t\t<item>mimeTypes</item>\n\t\t<item>multiline</item>\n\t\t<item>multiple</item>\n\t\t<item>name</item>\n\t\t<item>nameProp</item>\n\t\t<item>namespaces</item>\n\t\t<item>namespaceURI</item>\n\t\t<item>next</item>\n\t\t<item>nextSibling</item>\n\t\t<item>nodeName</item>\n\t\t<item>nodeType</item>\n\t\t<item>nodeValue</item>\n\t\t<item>noHref</item>\n\t\t<item>noResize</item>\n\t\t<item>noShade</item>\n\t\t<item>notationName</item>\n\t\t<item>notations</item>\n\t\t<item>noWrap</item>\n\t\t<item>object</item>\n\t\t<item>offscreenBuffering</item>\n\t\t<item>onLine</item>\n\t\t<item>onreadystatechange</item>\n\t\t<item>opener</item>\n\t\t<item>opsProfile</item>\n\t\t<item>options</item>\n\t\t<item>oscpu</item>\n\t\t<item>outerHeight</item>\n\t\t<item>outerWidth</item>\n\t\t<item>ownerDocument</item>\n\t\t<item>paddingBottom</item>\n\t\t<item>paddingLeft</item>\n\t\t<item>paddingRight</item>\n\t\t<item>paddingTop</item>\n\t\t<item>pageX</item>\n\t\t<item>pageY</item>\n\t\t<item>pageXOffset</item>\n\t\t<item>pageYOffset</item>\n\t\t<item>parent</item>\n\t\t<item>parentLayer</item>\n\t\t<item>parentNode</item>\n\t\t<item>parentWindow</item>\n\t\t<item>pathname</item>\n\t\t<item>personalbar</item>\n\t\t<item>pixelDepth</item>\n\t\t<item>pkcs11</item>\n\t\t<item>platform</item>\n\t\t<item>plugins</item>\n\t\t<item>port</item>\n\t\t<item>prefix</item>\n\t\t<item>previous</item>\n\t\t<item>previousDibling</item>\n\t\t<item>product</item>\n\t\t<item>productSub</item>\n\t\t<item>profile</item>\n\t\t<item>profileend</item>\n\t\t<item>prompt</item>\n\t\t<item>prompter</item>\n\t\t<item>protocol</item>\n\t\t<item>publicId</item>\n\t\t<item>readOnly</item>\n\t\t<item>readyState</item>\n\t\t<item>referrer</item>\n\t\t<item>rel</item>\n\t\t<item>responseText</item>\n\t\t<item>responseXML</item>\n\t\t<item>rev</item>\n\t\t<item>right</item>\n\t\t<item>rightContext</item>\n\t\t<item>rowIndex</item>\n\t\t<item>rows</item>\n\t\t<item>rowSpan</item>\n\t\t<item>rules</item>\n\t\t<item>scheme</item>\n\t\t<item>scope</item>\n\t\t<item>screenX</item>\n\t\t<item>screenY</item>\n\t\t<item>screenLeft</item>\n\t\t<item>screenTop</item>\n\t\t<item>scripts</item>\n\t\t<item>scrollbars</item>\n\t\t<item>scrolling</item>\n\t\t<item>sectionRowIndex</item>\n\t\t<item>security</item>\n\t\t<item>securityPolicy</item>\n\t\t<item>selected</item>\n\t\t<item>selectedIndex</item>\n\t\t<item>selection</item>\n\t\t<item>self</item>\n\t\t<item>shape</item>\n\t\t<item>siblingAbove</item>\n\t\t<item>siblingBelow</item>\n\t\t<item>size</item>\n\t\t<item>source</item>\n\t\t<item>specified</item>\n\t\t<item>standby</item>\n\t\t<item>start</item>\n\t\t<item>status</item>\n\t\t<item>statusbar</item>\n\t\t<item>statusText</item>\n\t\t<item>style</item>\n\t\t<item>styleSheets</item>\n\t\t<item>suffixes</item>\n\t\t<item>summary</item>\n\t\t<item>systemId</item>\n\t\t<item>systemLanguage</item>\n\t\t<item>tagName</item>\n\t\t<item>tags</item>\n\t\t<item>target</item>\n\t\t<item>tBodies</item>\n\t\t<item>text</item>\n\t\t<item>textAlign</item>\n\t\t<item>textDecoration</item>\n\t\t<item>textIndent</item>\n\t\t<item>textTransform</item>\n\t\t<item>tFoot</item>\n\t\t<item>tHead</item>\n\t\t<item>title</item>\n\t\t<item>toolbar</item>\n\t\t<item>top</item>\n\t\t<item>type</item>\n\t\t<item>undefined</item>\n\t\t<item>uniqueID</item>\n\t\t<item>updateInterval</item>\n\t\t<item>URL</item>\n\t\t<item>URLUnencoded</item>\n\t\t<item>useMap</item>\n\t\t<item>userAgent</item>\n\t\t<item>userLanguage</item>\n\t\t<item>userProfile</item>\n\t\t<item>vAlign</item>\n\t\t<item>value</item>\n\t\t<item>valueType</item>\n\t\t<item>vendor</item>\n\t\t<item>vendorSub</item>\n\t\t<item>version</item>\n\t\t<item>visibility</item>\n\t\t<item>vspace</item>\n\t\t<item>whiteSpace</item>\n\t\t<item>width</item>\n\t\t<item>XMLDocument</item>\n\t\t<item>XSLDocument</item>\n\t\t<item>zIndex</item>\n\t</list>\n\t<!-- Methods of DOM Classes -->\n\t<list name=\"dom_functions\">\n\t\t<item>acceptNode</item>\n\t\t<item>add</item>\n\t\t<item>addEventListener</item>\n\t\t<item>addTextTrack</item>\n\t\t<item>adoptNode</item>\n\t\t<item>after</item>\n\t\t<item>animate</item>\n\t\t<item>append</item>\n\t\t<item>appendChild</item>\n\t\t<item>appendData</item>\n\t\t<item>before</item>\n\t\t<item>blur</item>\n\t\t<item>canPlayType</item>\n\t\t<item>captureStream</item>\n\t\t<item>caretPositionFromPoint</item>\n\t\t<item>caretRangeFromPoint</item>\n\t\t<item>checkValidity</item>\n\t\t<item>clear</item>\n\t\t<item>click</item>\n\t\t<item>cloneContents</item>\n\t\t<item>cloneNode</item>\n\t\t<item>cloneRange</item>\n\t\t<item>close</item>\n\t\t<item>closest</item>\n\t\t<item>collapse</item>\n\t\t<item>compareBoundaryPoints</item>\n\t\t<item>compareDocumentPosition</item>\n\t\t<item>comparePoint</item>\n\t\t<item>contains</item>\n\t\t<item>convertPointFromNode</item>\n\t\t<item>convertQuadFromNode</item>\n\t\t<item>convertRectFromNode</item>\n\t\t<item>createAttribute</item>\n\t\t<item>createAttributeNS</item>\n\t\t<item>createCaption</item>\n\t\t<item>createCDATASection</item>\n\t\t<item>createComment</item>\n\t\t<item>createContextualFragment</item>\n\t\t<item>createDocument</item>\n\t\t<item>createDocumentFragment</item>\n\t\t<item>createDocumentType</item>\n\t\t<item>createElement</item>\n\t\t<item>createElementNS</item>\n\t\t<item>createEntityReference</item>\n\t\t<item>createEvent</item>\n\t\t<item>createExpression</item>\n\t\t<item>createHTMLDocument</item>\n\t\t<item>createNodeIterator</item>\n\t\t<item>createNSResolver</item>\n\t\t<item>createProcessingInstruction</item>\n\t\t<item>createRange</item>\n\t\t<item>createShadowRoot</item>\n\t\t<item>createTBody</item>\n\t\t<item>createTextNode</item>\n\t\t<item>createTFoot</item>\n\t\t<item>createTHead</item>\n\t\t<item>createTreeWalker</item>\n\t\t<item>delete</item>\n\t\t<item>deleteCaption</item>\n\t\t<item>deleteCell</item>\n\t\t<item>deleteContents</item>\n\t\t<item>deleteData</item>\n\t\t<item>deleteRow</item>\n\t\t<item>deleteTFoot</item>\n\t\t<item>deleteTHead</item>\n\t\t<item>detach</item>\n\t\t<item>disconnect</item>\n\t\t<item>dispatchEvent</item>\n\t\t<item>elementFromPoint</item>\n\t\t<item>elementsFromPoint</item>\n\t\t<item>enableStyleSheetsForSet</item>\n\t\t<item>entries</item>\n\t\t<item>evaluate</item>\n\t\t<item>execCommand</item>\n\t\t<item>exitFullscreen</item>\n\t\t<item>exitPointerLock</item>\n\t\t<item>expand</item>\n\t\t<item>extractContents</item>\n\t\t<item>fastSeek</item>\n\t\t<item>firstChild</item>\n\t\t<item>focus</item>\n\t\t<item>forEach</item>\n\t\t<item>get</item>\n\t\t<item>getAll</item>\n\t\t<item>getAnimations</item>\n\t\t<item>getAttribute</item>\n\t\t<item>getAttributeNames</item>\n\t\t<item>getAttributeNode</item>\n\t\t<item>getAttributeNodeNS</item>\n\t\t<item>getAttributeNS</item>\n\t\t<item>getBoundingClientRect</item>\n\t\t<item>getBoxQuads</item>\n\t\t<item>getClientRects</item>\n\t\t<item>getContext</item>\n\t\t<item>getDestinationInsertionPoints</item>\n\t\t<item>getElementById</item>\n\t\t<item>getElementsByClassName</item>\n\t\t<item>getElementsByName</item>\n\t\t<item>getElementsByTagName</item>\n\t\t<item>getElementsByTagNameNS</item>\n\t\t<item>getItem</item>\n\t\t<item>getNamedItem</item>\n\t\t<item>getSelection</item>\n\t\t<item>getStartDate</item>\n\t\t<item>getVideoPlaybackQuality</item>\n\t\t<item>has</item>\n\t\t<item>hasAttribute</item>\n\t\t<item>hasAttributeNS</item>\n\t\t<item>hasAttributes</item>\n\t\t<item>hasChildNodes</item>\n\t\t<item>hasFeature</item>\n\t\t<item>hasFocus</item>\n\t\t<item>importNode</item>\n\t\t<item>initEvent</item>\n\t\t<item>insertAdjacentElement</item>\n\t\t<item>insertAdjacentHTML</item>\n\t\t<item>insertAdjacentText</item>\n\t\t<item>insertBefore</item>\n\t\t<item>insertCell</item>\n\t\t<item>insertData</item>\n\t\t<item>insertNode</item>\n\t\t<item>insertRow</item>\n\t\t<item>intersectsNode</item>\n\t\t<item>isDefaultNamespace</item>\n\t\t<item>isEqualNode</item>\n\t\t<item>isPointInRange</item>\n\t\t<item>isSameNode</item>\n\t\t<item>item</item>\n\t\t<item>key</item>\n\t\t<item>keys</item>\n\t\t<item>lastChild</item>\n\t\t<item>load</item>\n\t\t<item>lookupNamespaceURI</item>\n\t\t<item>lookupPrefix</item>\n\t\t<item>matches</item>\n\t\t<item>move</item>\n\t\t<item>moveAttribute</item>\n\t\t<item>moveAttributeNode</item>\n\t\t<item>moveChild</item>\n\t\t<item>moveNamedItem</item>\n\t\t<item>namedItem</item>\n\t\t<item>nextNode</item>\n\t\t<item>nextSibling</item>\n\t\t<item>normalize</item>\n\t\t<item>observe</item>\n\t\t<item>open</item>\n\t\t<item>parentNode</item>\n\t\t<item>pause</item>\n\t\t<item>play</item>\n\t\t<item>postMessage</item>\n\t\t<item>prepend</item>\n\t\t<item>preventDefault</item>\n\t\t<item>previousNode</item>\n\t\t<item>previousSibling</item>\n\t\t<item>probablySupportsContext</item>\n\t\t<item>queryCommandEnabled</item>\n\t\t<item>queryCommandIndeterm</item>\n\t\t<item>queryCommandState</item>\n\t\t<item>queryCommandSupported</item>\n\t\t<item>queryCommandValue</item>\n\t\t<item>querySelector</item>\n\t\t<item>querySelectorAll</item>\n\t\t<item>registerContentHandler</item>\n\t\t<item>registerElement</item>\n\t\t<item>registerProtocolHandler</item>\n\t\t<item>releaseCapture</item>\n\t\t<item>releaseEvents</item>\n\t\t<item>remove</item>\n\t\t<item>removeAttribute</item>\n\t\t<item>removeAttributeNode</item>\n\t\t<item>removeAttributeNS</item>\n\t\t<item>removeChild</item>\n\t\t<item>removeEventListener</item>\n\t\t<item>removeItem</item>\n\t\t<item>replace</item>\n\t\t<item>replaceChild</item>\n\t\t<item>replaceData</item>\n\t\t<item>replaceWith</item>\n\t\t<item>reportValidity</item>\n\t\t<item>requestFullscreen</item>\n\t\t<item>requestPointerLock</item>\n\t\t<item>reset</item>\n\t\t<item>scroll</item>\n\t\t<item>scrollBy</item>\n\t\t<item>scrollIntoView</item>\n\t\t<item>scrollTo</item>\n\t\t<item>seekToNextFrame</item>\n\t\t<item>select</item>\n\t\t<item>selectNode</item>\n\t\t<item>selectNodeContents</item>\n\t\t<item>set</item>\n\t\t<item>setAttribute</item>\n\t\t<item>setAttributeNode</item>\n\t\t<item>setAttributeNodeNS</item>\n\t\t<item>setAttributeNS</item>\n\t\t<item>setCapture</item>\n\t\t<item>setCustomValidity</item>\n\t\t<item>setEnd</item>\n\t\t<item>setEndAfter</item>\n\t\t<item>setEndBefore</item>\n\t\t<item>setItem</item>\n\t\t<item>setNamedItem</item>\n\t\t<item>setRangeText</item>\n\t\t<item>setSelectionRange</item>\n\t\t<item>setSinkId</item>\n\t\t<item>setStart</item>\n\t\t<item>setStartAfter</item>\n\t\t<item>setStartBefore</item>\n\t\t<item>slice</item>\n\t\t<item>splitText</item>\n\t\t<item>stepDown</item>\n\t\t<item>stepUp</item>\n\t\t<item>stopImmediatePropagation</item>\n\t\t<item>stopPropagation</item>\n\t\t<item>submit</item>\n\t\t<item>substringData</item>\n\t\t<item>supports</item>\n\t\t<item>surroundContents</item>\n\t\t<item>takeRecords</item>\n\t\t<item>terminate</item>\n\t\t<item>toBlob</item>\n\t\t<item>toDataURL</item>\n\t\t<item>toggle</item>\n\t\t<item>toString</item>\n\t\t<item>values</item>\n\t\t<item>write</item>\n\t\t<item>writeln</item>\n\t</list>\n\n\t<!-- Event Handler Functions -->\n\t<list name=\"function_eventhandler\">\n\t\t<item>onRowsinserted</item>\n\t\t<item>onRowsdelete</item>\n\t\t<item>onRowenter</item>\n\t\t<item>onRowexit</item>\n\t\t<item>onResize</item>\n\t\t<item>onResizestart</item>\n\t\t<item>onResizeend</item>\n\t\t<item>onReset</item>\n\t\t<item>onReadystatechange</item>\n\t\t<item>onMouseout</item>\n\t\t<item>onMouseover</item>\n\t\t<item>onMousedown</item>\n\t\t<item>onMouseup</item>\n\t\t<item>onMousemove</item>\n\t\t<item>onBeforecut</item>\n\t\t<item>onBeforedeactivate</item>\n\t\t<item>onBeforeunload</item>\n\t\t<item>onBeforeupdate</item>\n\t\t<item>onBeforepaste</item>\n\t\t<item>onBeforeprint</item>\n\t\t<item>onBeforeeditfocus</item>\n\t\t<item>onBeforeactivate</item>\n\t\t<item>onBlur</item>\n\t\t<item>onScrolltop</item>\n\t\t<item>onSubmit</item>\n\t\t<item>onSelect</item>\n\t\t<item>onSelectstart</item>\n\t\t<item>onSelectionchange</item>\n\t\t<item>onHover</item>\n\t\t<item>onHelp</item>\n\t\t<item>onChange</item>\n\t\t<item>onContextmenu</item>\n\t\t<item>onControlselect</item>\n\t\t<item>onCut</item>\n\t\t<item>onCellchange</item>\n\t\t<item>onClock</item>\n\t\t<item>onClose</item>\n\t\t<item>onDeactivate</item>\n\t\t<item>onDatasetchanged</item>\n\t\t<item>onDatasetcomplete</item>\n\t\t<item>onDataavailable</item>\n\t\t<item>onDrop</item>\n\t\t<item>onDrag</item>\n\t\t<item>onDragstart</item>\n\t\t<item>onDragover</item>\n\t\t<item>onDragdrop</item>\n\t\t<item>onDragenter</item>\n\t\t<item>onDragend</item>\n\t\t<item>onDragleave</item>\n\t\t<item>onDblclick</item>\n\t\t<item>onUnload</item>\n\t\t<item>onPaste</item>\n\t\t<item>onPropertychange</item>\n\t\t<item>onError</item>\n\t\t<item>onErrorupdate</item>\n\t\t<item>onKeydown</item>\n\t\t<item>onKeyup</item>\n\t\t<item>onKeypress</item>\n\t\t<item>onFocus</item>\n\t\t<item>onLoad</item>\n\t\t<item>onActivate</item>\n\t\t<item>onAfterupdate</item>\n\t\t<item>onAfterprint</item>\n\t\t<item>onAbort</item>\n\t</list>\n\t<!-- Others Methods of Classes -->\n\t<list name=\"function_common\">\n\t\t<item>shift</item>\n\t\t<item>showModelessDialog</item>\n\t\t<item>showModalDialog</item>\n\t\t<item>showHelp</item>\n\t\t<item>scroll</item>\n\t\t<item>scrollX</item>\n\t\t<item>scrollByPages</item>\n\t\t<item>scrollByLines</item>\n\t\t<item>scrollY</item>\n\t\t<item>scrollTo</item>\n\t\t<item>stop</item>\n\t\t<item>strike</item>\n\t\t<item>sizeToContent</item>\n\t\t<item>sidebar</item>\n\t\t<item>signText</item>\n\t\t<item>sort</item>\n\t\t<item>sup</item>\n\t\t<item>sub</item>\n\t\t<item>substr</item>\n\t\t<item>substring</item>\n\t\t<item>splice</item>\n\t\t<item>split</item>\n\t\t<item>send</item>\n\t\t<item>setMilliseconds</item>\n\t\t<item>setSeconds</item>\n\t\t<item>setMinutes</item>\n\t\t<item>setHours</item>\n\t\t<item>setMonth</item>\n\t\t<item>setYear</item>\n\t\t<item>setFullYear</item>\n\t\t<item>setDate</item>\n\t\t<item>setUTCMilliseconds</item>\n\t\t<item>setUTCSeconds</item>\n\t\t<item>setUTCMinutes</item>\n\t\t<item>setUTCHours</item>\n\t\t<item>setUTCMonth</item>\n\t\t<item>setUTCFullYear</item>\n\t\t<item>setUTCDate</item>\n\t\t<item>setTime</item>\n\t\t<item>setHotkeys</item>\n\t\t<item>setCursor</item>\n\t\t<item>setZOptions</item>\n\t\t<item>setActive</item>\n\t\t<item>setResizable</item>\n\t\t<item>setRequestHeader</item>\n\t\t<item>search</item>\n\t\t<item>slice</item>\n\t\t<item>savePreferences</item>\n\t\t<item>small</item>\n\t\t<item>home</item>\n\t\t<item>handleEvent</item>\n\t\t<item>navigate</item>\n\t\t<item>char</item>\n\t\t<item>charCodeAt</item>\n\t\t<item>charAt</item>\n\t\t<item>concat</item>\n\t\t<item>contextual</item>\n\t\t<item>confirm</item>\n\t\t<item>compile</item>\n\t\t<item>clear</item>\n\t\t<item>captureEvents</item>\n\t\t<item>call</item>\n\t\t<item>createStyleSheet</item>\n\t\t<item>createPopup</item>\n\t\t<item>createEventObject</item>\n\t\t<item>toGMTString</item>\n\t\t<item>toUTCString</item>\n\t\t<item>toString</item>\n\t\t<item>toSource</item>\n\t\t<item>toUpperCase</item>\n\t\t<item>toLowerCase</item>\n\t\t<item>toLocaleString</item>\n\t\t<item>test</item>\n\t\t<item>taint</item>\n\t\t<item>taintEnabled</item>\n\t\t<item>indexOf</item>\n\t\t<item>italics</item>\n\t\t<item>disableExternalCapture</item>\n\t\t<item>dump</item>\n\t\t<item>detachEvent</item>\n\t\t<item>unshift</item>\n\t\t<item>untaint</item>\n\t\t<item>unwatch</item>\n\t\t<item>updateCommands</item>\n\t\t<item>join</item>\n\t\t<item>javaEnabled</item>\n\t\t<item>pop</item>\n\t\t<item>push</item>\n\t\t<item>plugins.refresh</item>\n\t\t<item>paddings</item>\n\t\t<item>parse</item>\n\t\t<item>print</item>\n\t\t<item>prompt</item>\n\t\t<item>preference</item>\n\t\t<item>enableExternalCapture</item>\n\t\t<item>exec</item>\n\t\t<item>execScript</item>\n\t\t<item>valueOf</item>\n\t\t<item>UTC</item>\n\t\t<item>find</item>\n\t\t<item>file</item>\n\t\t<item>fileModifiedDate</item>\n\t\t<item>fileSize</item>\n\t\t<item>fileCreatedDate</item>\n\t\t<item>fileUpdatedDate</item>\n\t\t<item>fixed</item>\n\t\t<item>fontsize</item>\n\t\t<item>fontcolor</item>\n\t\t<item>forward</item>\n\t\t<item>fromCharCode</item>\n\t\t<item>watch</item>\n\t\t<item>link</item>\n\t\t<item>load</item>\n\t\t<item>lastIndexOf</item>\n\t\t<item>anchor</item>\n\t\t<item>attachEvent</item>\n\t\t<item>atob</item>\n\t\t<item>apply</item>\n\t\t<item>alert</item>\n\t\t<item>abort</item>\n\t\t<item>routeEvents</item>\n\t\t<item>resize</item>\n\t\t<item>resizeBy</item>\n\t\t<item>resizeTo</item>\n\t\t<item>recalc</item>\n\t\t<item>returnValue</item>\n\t\t<item>replace</item>\n\t\t<item>reverse</item>\n\t\t<item>reload</item>\n\t\t<item>releaseCapture</item>\n\t\t<item>releaseEvents</item>\n\t\t<item>go</item>\n\t\t<item>getMilliseconds</item>\n\t\t<item>getSeconds</item>\n\t\t<item>getMinutes</item>\n\t\t<item>getHours</item>\n\t\t<item>getMonth</item>\n\t\t<item>getDay</item>\n\t\t<item>getYear</item>\n\t\t<item>getFullYear</item>\n\t\t<item>getTime</item>\n\t\t<item>getDate</item>\n\t\t<item>getTimezoneOffset</item>\n\t\t<item>getUTCMilliseconds</item>\n\t\t<item>getUTCSeconds</item>\n\t\t<item>getUTCMinutes</item>\n\t\t<item>getUTCHours</item>\n\t\t<item>getUTCDay</item>\n\t\t<item>getUTCMonth</item>\n\t\t<item>getUTCFullYear</item>\n\t\t<item>getUTCDate</item>\n\t\t<item>getAttention</item>\n\t\t<item>getSelection</item>\n\t\t<item>getResponseHeader</item>\n\t\t<item>getAllResponseHeaders</item>\n\t\t<item>moveBy</item>\n\t\t<item>moveBelow</item>\n\t\t<item>moveTo</item>\n\t\t<item>moveToAbsolute</item>\n\t\t<item>moveAbove</item>\n\t\t<item>mergeAttributes</item>\n\t\t<item>match</item>\n\t\t<item>margins</item>\n\t\t<item>btoa</item>\n\t\t<item>big</item>\n\t\t<item>bold</item>\n\t\t<item>borderWidths</item>\n\t\t<item>blink</item>\n\t\t<item>back</item>\n\t</list>\n\n\t<contexts>\n\n\t\t<context name=\"Shebang\" attribute=\"Normal Text\" lineEndContext=\"Normal\" lineEmptyContext=\"Normal\" fallthrough=\"true\" fallthroughContext=\"Normal\">\n\t\t\t<Detect2Chars context=\"ShebangLine\" attribute=\"Comment\" char=\"#\" char1=\"!\" column=\"0\" />\n\t\t</context>\n\t\t<context name=\"ShebangLine\" attribute=\"Comment\" lineEndContext=\"#pop!Normal\" />\n\n\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<StringDetect context=\"#stay\" attribute=\"Symbol\" String=\"...\" />\n\t\t\t<IncludeRules context=\"FindNumbers\" />\n\t\t\t<IncludeRules context=\"FindStrings\" />\n\n\t\t\t<!-- Abstract -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Reserved\" String=\"\\b(abstract)(?=\\s+(class|interface)\\b)\" />\n\t\t\t<!-- New -->\n\t\t\t<RegExpr context=\"NewTarget\" attribute=\"Keyword\" String=\"\\bnew(?=\\s*&objectOp;\\.\\s*target\\b)\" />\n\t\t\t<RegExpr context=\"MemberObject\" attribute=\"Objects\" String=\"\\bnew(?=&objectOp;\\.)\" />\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Keyword\" String=\"new\" />\n\n\t\t\t<!-- Keywords: control flow -->\n\t\t\t<keyword context=\"#stay\" attribute=\"ControlFlow\" String=\"controlflow\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"ControlFlow\" String=\"\\bdefault(?=\\s*&objectOp;:)\" />\n\n\t\t\t<!-- NOTE & TODO: The identifiers before \":\" are highlighted as \"dsNormal\".\n\t\t\t     These identifiers should be highlighted in a different way depending on the\n\t\t\t     context, for example, in the declaration of classes or interfaces, in sets, the\n\t\t\t     parameters of a function, or after the keywords: \"const\", \"var\", \"let\" & \"enum\". -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Parameter\" String=\"&identifier;(?=\\s*&objectOp;:)\" />\n\n\t\t\t<!-- Keywords -->\n\t\t\t<WordDetect context=\"TypeDeclaration\" attribute=\"Reserved\" String=\"type\" />\n\t\t\t<keyword context=\"#stay\" attribute=\"Keyword\" String=\"keywords\" /> <!-- NoRegExp? -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Reserved\" String=\"reserved\" />\n\n\t\t\t<!-- Built-in Classes -->\n\t\t\t<IncludeRules context=\"BuiltInClasses\" />\n\t\t\t<!-- Objects -->\n\t\t\t<RegExpr context=\"MemberObject\" attribute=\"Objects\" String=\"&identifier;(?=\\s*&objectOp;\\.)\" />\n\t\t\t<DetectChar context=\"MemberObject\" char=\".\" />\n\n\t\t\t<!-- Import -->\n\t\t\t<WordDetect context=\"Import\" attribute=\"Module\" String=\"import\" />\n\t\t\t<!-- Export types -->\n\t\t\t<keyword context=\"ControlExport\" attribute=\"Module\" String=\"control_export_types\" />\n\t\t\t<!-- Keywords -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Module\" String=\"module\" />\n\t\t\t<keyword context=\"NoRegExp\" attribute=\"Keyword\" String=\"primitives\" />\n\t\t\t<keyword context=\"#stay\" attribute=\"Keyword\" String=\"types_operator_expression\" />\n\n\t\t\t<!-- Functions -->\n\t\t\t<IncludeRules context=\"FindFunctionName\" />\n\t\t\t<keyword context=\"#stay\" attribute=\"Function Name\" String=\"functions\" />\n\n\t\t\t<!-- Symbols & Operators -->\n\t\t\t<DetectChar context=\"Object\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"[\" beginRegion=\"List\" />\n\t\t\t<DetectChar context=\"NoRegExp\" attribute=\"Symbol\" char=\"]\" endRegion=\"List\" />\n\t\t\t<!-- NOTE: Avoid highlighting identifier?: string, -->\n\t\t\t<RegExpr context=\"ConditionalExpression\" attribute=\"Symbol\" String=\"\\?(?=.*&identifier;\\s*\\:)\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"?\" /> <!-- Fix of conditional expression from the JavaScript highlighting -->\n\n\t\t\t<!-- Highlight types after \":\" and between \"<\" and \">\" -->\n\t\t\t<DetectChar context=\"Types\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<RegExpr context=\"TypesAngleBracket\" attribute=\"Symbol\" String=\"&lt;(?=(&identifier;|[\\[\\{\\(&lt;]).*&gt;)\" />\n\n\t\t\t<IncludeRules context=\"Normal##JavaScript\" />\n\t\t</context>\n\n\t\t<context name=\"BuiltInClasses\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<WordDetect context=\"FindMemberObjectMath\" attribute=\"Built-in Objects\" String=\"Math\" />\n\t\t\t<WordDetect context=\"FindMemberObjectPromise\" attribute=\"Built-in Objects\" String=\"Promise\" />\n\t\t\t<WordDetect context=\"FindMemberObjectJSON\" attribute=\"Built-in Objects\" String=\"JSON\" />\n\t\t\t<WordDetect context=\"FindMemberObjectConsole\" attribute=\"Built-in Objects\" String=\"console\" />\n\t\t\t<WordDetect context=\"FindMemberObjectProcess\" attribute=\"Built-in Objects\" String=\"process\" />\n\t\t\t<keyword context=\"#stay\" attribute=\"Built-in Objects\" String=\"class_builtin\" />\n\t\t\t<keyword context=\"FindMemberObjectDOM\" attribute=\"Built-in Objects\" String=\"class_dom\" />\n\t\t\t<keyword context=\"FindMemberObjectNode\" attribute=\"Built-in Objects\" String=\"class_node\" />\n\t\t\t<keyword context=\"FindMemberObjectDOM\" attribute=\"Built-in Objects\" String=\"dom_variable\" />\n\t\t</context>\n\n\t\t<!-- Highlight keywords before \":\" in conditional expressions. -->\n\t\t<context name=\"ConditionalExpression\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\":\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\"?\" />\n\n\t\t\t<!-- Keywords -->\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Reserved\" String=\"type\" />\n\t\t\t<keyword context=\"#stay\" attribute=\"Keyword\" String=\"keywords\" /> <!-- NoRegExp? -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Reserved\" String=\"reserved\" />\n\t\t\t<!-- Built-in Classes -->\n\t\t\t<IncludeRules context=\"BuiltInClasses\" />\n\t\t\t<!-- Import -->\n\t\t\t<WordDetect context=\"#stay\" attribute=\"Module\" String=\"import\" />\n\t\t\t<!-- Export types -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Module\" String=\"control_export_types\" />\n\t\t\t<!-- Keywords -->\n\t\t\t<keyword context=\"#stay\" attribute=\"Module\" String=\"module\" />\n\t\t\t<keyword context=\"NoRegExp\" attribute=\"Keyword\" String=\"primitives\" />\n\t\t\t<keyword context=\"#stay\" attribute=\"Keyword\" String=\"types_operator_expression\" />\n\n\t\t\t<!-- NOTE: The identifiers before \":\" should be highlighted as \"Normal Text\".\n\t\t\t     However, currently, the \"Parameter\" attribute is equivalent to \"Normal Text\". -->\n\t\t\t<!-- <RegExpr context=\"#stay\" attribute=\"Normal Text\" String=\"&identifier;(?=\\s*&objectOp;:)\" /> -->\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\n\t\t<context name=\"Object\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<keyword context=\"NoRegExp\" attribute=\"Keyword\" String=\"keywords\" />\n\t\t\t<!-- Highlight types in the following line.\n\t\t\t     NOTE: Using the \"NoRegExp\" context can cause this to apply to multiple lines. -->\n\t\t\t<RegExpr context=\"TypesNewLine\" attribute=\"Symbol\" String=\":(?=&endLine;)\" minimal=\"true\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\n\t\t<context name=\"NoRegExp\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"NoRegExp##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"NoRegExpSameLine\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"NoRegExp##JavaScript\" />\n\t\t</context>\n\n\t\t<context name=\"FindNumbers\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"NoRegExp\" attribute=\"Hexadecimal\" String=\"\\b0[xX][\\da-fA-F][\\da-fA-F_]*&numSuffix;\" />\n\t\t\t<RegExpr context=\"NoRegExp\" attribute=\"Binary\" String=\"\\b0[bB][01][01_]*&numSuffix;\" />\n\t\t\t<RegExpr context=\"NoRegExp\" attribute=\"Float\" String=\"(\\b\\d[\\d_]*\\.?|(\\b\\d[\\d_]*)?\\.\\d[\\d_]*)[eE][\\+\\-]?\\d[\\d_]*&numSuffix;\" />\n\t\t\t<RegExpr context=\"NoRegExp\" attribute=\"Float\" String=\"(\\.\\d[\\d_]*|\\b\\d[\\d_]*\\.(\\d[\\d_]*)?)&numSuffix;\" />\n\t\t\t<RegExpr context=\"NoRegExp\" attribute=\"Octal\" String=\"\\b0[oO]?[0-7][0-7_]*&numSuffix;\" />\n\t\t\t<RegExpr context=\"NoRegExp\" attribute=\"Decimal\" String=\"\\b\\d[\\d_]*&numSuffix;\" />\n\t\t\t<!-- Avoid highlighting numbers of JavaScript -->\n\t\t\t<RegExpr context=\"NoRegExp\" String=\"\\b([1-9]|0\\d)\\d*\" />\n\t\t</context>\n\n\t\t<context name=\"FindFunctionName\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<!-- function(...) and function<...>(...) -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Function Name\" String=\"&identifier;(?=\\s*(&lt;((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|('(\\\\.|[^'])*')|(&quot;(\\\\.|[^&quot;])*&quot;)|(`(\\\\.|[^`])*`)|[^&lt;&gt;]|&lt;.*&gt;)*&gt;)?\\()\" />\n\t\t</context>\n\n\t\t<context name=\"FindStrings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"Template\" attribute=\"Template\" char=\"`\" />\n\t\t\t<IncludeRules context=\"FindStrings##JavaScript\" />\n\t\t</context>\n\t\t<context name=\"Template\" attribute=\"Template\" lineEndContext=\"#stay\">\n\t\t\t<IncludeRules context=\"Escape##JavaScript\" />\n\t\t\t<Detect2Chars context=\"Substitution\" attribute=\"Substitution\" char=\"$\" char1=\"{\" />\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Template\" char=\"`\" />\n\t\t</context>\n\t\t<context name=\"Substitution\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Substitution\" char=\"}\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\n\t\t<!-- Highlight types after the \"type\" keyword -->\n\n\t\t<context name=\"TypeDeclaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectSpaces />\n\t\t\t<AnyChar context=\"#pop\" String=\";,{})]\" lookAhead=\"true\" />\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"DefaultTypes\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\n\t\t<!-- Highlight types after \":\" -->\n\n\t\t<context name=\"Types\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"FixPopLineEndContext\" />\n\t\t\t<IncludeRules context=\"TypesCommon\" />\n\t\t</context>\n\t\t<context name=\"TypesCommon\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"TypesEnd\" />\n\t\t\t<!-- New line after \"|\" or \"&\".\n\t\t\t     IMPORTANT: If you modify this rule, do so in \"typescript-react.xml\"! -->\n\t\t\t<RegExpr context=\"#pop!TypesNewLine\" attribute=\"Symbol\" String=\"[\\|&amp;](?=&endLine;)\" minimal=\"true\" />\n\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"DefaultTypes\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\t\t<!-- NOTE: Context used by \"typescript-react.xml\" -->\n\t\t<context name=\"TypesEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<AnyChar context=\"#pop\" String=\";,})]\" lookAhead=\"true\" />\n\t\t\t<RegExpr context=\"#pop\" String=\"\\=(?!&gt;)\" lookAhead=\"true\" />\n\t\t\t<Detect2Chars context=\"#pop\" char=\"/\" char1=\"/\" lookAhead=\"true\" />\n\t\t</context>\n\t\t<context name=\"TypesNewLine\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!TypesCommon\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FindComments##JavaScript\" />\n\t\t</context>\n\n\t\t<!-- NOTE: The \"NoRegExp\" context invalidates lineEndContext=\"#pop\",\n\t\t     therefore the following rule is necessary -->\n\t\t<context name=\"FixPopLineEndContext\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<RegExpr context=\"#pop\" String=\"\\S\" firstNonSpace=\"true\" lookAhead=\"true\" />\n\t\t</context>\n\n\t\t<context name=\"DefaultTypes\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<keyword context=\"NoRegExpSameLine\" attribute=\"Types\" String=\"types\" />\n\t\t\t<!-- Type Guards -->\n\t\t\t<WordDetect context=\"NoRegExpSameLine\" attribute=\"Keyword\" String=\"is\" />\n\n\t\t\t<!-- FIXME: For a strange reason, the keywords before \"}\" are not highlighted.\n\t\t\t     This rule fixes it provisionally. -->\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Types\" String=\"\\b(string|number|boolean|symbol|any|void|never|unknown|undefined|null|object)(?=\\})\" />\n\t\t</context>\n\t\t<context name=\"TypesFindBrackets\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"TypesSquareBracket\" attribute=\"Symbol\" char=\"[\" beginRegion=\"List\" />\n\t\t\t<DetectChar context=\"TypesCurlyBracket\" attribute=\"Symbol\" char=\"{\" beginRegion=\"Brace\" />\n\t\t\t<DetectChar context=\"TypesRoundBracket\" char=\"(\" />\n\t\t</context>\n\n\t\t<context name=\"TypesSquareBracket\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop!NoRegExp\" attribute=\"Symbol\" char=\"]\" endRegion=\"List\" />\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"DefaultTypes\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\t\t<context name=\"TypesCurlyBracket\" attribute=\"Normal Text\" lineEndContext=\"#pop!Object\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"}\" endRegion=\"Brace\" />\n\t\t\t<RegExpr context=\"#pop!Object\" String=\"\\S\" firstNonSpace=\"true\" lookAhead=\"true\" /> <!-- FixPopLineEndContext -->\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"DefaultTypes\" />\n\t\t\t<IncludeRules context=\"Object\" />\n\t\t</context>\n\t\t<context name=\"TypesRoundBracket\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!NoRegExp\" char=\")\" />\n\t\t\t<IncludeRules context=\"FixPopLineEndContext\" />\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"DefaultTypes\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\n\t\t<context name=\"TypesAngleBracket\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop\" attribute=\"Symbol\" char=\"&gt;\" />\n\t\t\t<IncludeRules context=\"TypesAngleBracketEnd\" />\n\t\t\t<IncludeRules context=\"FixPopLineEndContext\" />\n\t\t\t<IncludeRules context=\"TypesFindBrackets\" />\n\t\t\t<IncludeRules context=\"DefaultTypes\" />\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\t\t<!-- NOTE: Context used by \"typescript-react.xml\" -->\n\t\t<context name=\"TypesAngleBracketEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<AnyChar context=\"#pop\" String=\"})];\" lookAhead=\"true\" />\n\t\t</context>\n\n\t\t<!-- new.target -->\n\t\t<context name=\"NewTarget\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<DetectSpaces />\n\t\t\t<AnyChar context=\"#stay\" attribute=\"Symbol\" String=\".?!\" />\n\t\t\t<WordDetect context=\"#pop!NoRegExp\" attribute=\"Keyword\" String=\"target\" />\n\t\t</context>\n\n\t\t<!-- After keyword list \"control_export_types\" -->\n\t\t<context name=\"ControlExport\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<AnyChar context=\"#pop\" attribute=\"Normal Text\" String=\"{;\" lookAhead=\"true\" />\n\t\t\t<IncludeRules context=\"FindStrings\" />\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Types\" String=\"&identifier;\" />\n\t\t\t<IncludeRules context=\"FindComments##JavaScript\" />\n\t\t</context>\n\n\t\t<!-- \"import\" keyword -->\n\t\t<context name=\"Import\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<DetectChar context=\"#pop!ImportRequireKey\" attribute=\"Symbol\" char=\"=\" />\n\t\t\t<WordDetect context=\"#pop!NoRegExp\" attribute=\"Keyword\" String=\"meta\" /> <!-- importmeta_property -->\n\t\t\t<IncludeRules context=\"Normal\" />\n\t\t</context>\n\t\t<context name=\"ImportRequireKey\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Keyword\" String=\"\\s*\\b(require)\\s*(?=\\()\" />\n\t\t\t<DetectChar context=\"ImportRequire\" attribute=\"Symbol\" char=\"(\" beginRegion=\"import\" />\n\t\t</context>\n\t\t<context name=\"ImportRequire\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t<DetectChar context=\"#pop#pop\" attribute=\"Symbol\" char=\")\" endRegion=\"import\" />\n\t\t\t<IncludeRules context=\"FindStrings\" />\n\t\t\t<IncludeRules context=\"FindNumbers\" />\n\t\t\t<IncludeRules context=\"FindComments##JavaScript\" />\n\t\t</context>\n\n\t\t<!-- Member Objects -->\n\n\t\t<context name=\"MemberObject\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t\t<!-- Common functions -->\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Function Name\" String=\"function_eventhandler\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Function Name\" String=\"function_common\" />\n\t\t</context>\n\n\t\t<context name=\"DefaultMemberObject\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#stay\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#stay\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\n\t\t\t<RegExpr context=\"#stay\" attribute=\"Objects\" String=\"&identifier;(?=\\s*&objectOp;\\.)\" />\n\t\t\t<IncludeRules context=\"FindFunctionName\" /> <!-- #pop -->\n\t\t\t<RegExpr context=\"#pop!NoRegExp\" attribute=\"Object Member\" String=\"&identifier;\" />\n\t\t\t<IncludeRules context=\"NoRegExp\" />\n\t\t\t<DetectSpaces />\n\n\t\t\t<!-- Generic functions, variables y properties -->\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Member\" String=\"variable_property\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Function Name\" String=\"functions\" />\n\t\t</context>\n\t\t<context name=\"FixPointMemberObject\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Symbol\" String=\"?...\" />\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Symbol\" String=\"!...\" />\n\t\t\t<StringDetect context=\"#pop\" attribute=\"Symbol\" String=\"...\" />\n\t\t</context>\n\n\t\t<!-- Built-in Classes -->\n\n\t\t<!-- DOM Classes -->\n\t\t<context name=\"FindMemberObjectDOM\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!NoRegExp\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#pop!MemberObjectDOM\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectDOM\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectDOM\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\t\t</context>\n\t\t<context name=\"MemberObjectDOM\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Constant\" String=\"dom_constant\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Method (Built-in)\" String=\"dom_functions\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Property (Built-in)\" String=\"dom_property\" />\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Member\" String=\"dom_variable\" />\n\t\t</context>\n\t\t<!-- Node.js Classes -->\n\t\t<context name=\"FindMemberObjectNode\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!NoRegExp\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#pop!MemberObjectNode\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectNode\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectNode\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\t\t</context>\n\t\t<context name=\"MemberObjectNode\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Property (Built-in)\" String=\"node_object\" />\n\t\t</context>\n\t\t<!-- Math Class -->\n\t\t<context name=\"FindMemberObjectMath\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!NoRegExp\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#pop!MemberObjectMath\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectMath\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectMath\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\t\t</context>\n\t\t<context name=\"MemberObjectMath\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Constant\" String=\"math_property_constants\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Method (Built-in)\" String=\"math_functions\" />\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t</context>\n\t\t<!-- Promise Class -->\n\t\t<context name=\"FindMemberObjectPromise\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!NoRegExp\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#pop!MemberObjectPromise\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectPromise\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectPromise\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\t\t</context>\n\t\t<context name=\"MemberObjectPromise\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Method (Built-in)\" String=\"promise_functions\" />\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t</context>\n\t\t<!-- JSON Class -->\n\t\t<context name=\"FindMemberObjectJSON\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!NoRegExp\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#pop!MemberObjectJSON\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectJSON\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectJSON\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\t\t</context>\n\t\t<context name=\"MemberObjectJSON\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Method (Built-in)\" String=\"json_functions\" />\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t</context>\n\t\t<!-- Console Object -->\n\t\t<context name=\"FindMemberObjectConsole\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!NoRegExp\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#pop!MemberObjectConsole\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectConsole\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectConsole\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\t\t</context>\n\t\t<context name=\"MemberObjectConsole\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Method (Built-in)\" String=\"console_functions\" />\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t</context>\n\t\t<!-- Process Object -->\n\t\t<context name=\"FindMemberObjectProcess\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop!NoRegExp\">\n\t\t\t<DetectSpaces />\n\t\t\t<IncludeRules context=\"FixPointMemberObject\" />\n\t\t\t<DetectChar context=\"#pop!MemberObjectProcess\" attribute=\"Symbol\" char=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectProcess\" attribute=\"Symbol\" char=\"?\" char1=\".\" />\n\t\t\t<Detect2Chars context=\"#pop!MemberObjectProcess\" attribute=\"Symbol\" char=\"!\" char1=\".\" />\n\t\t</context>\n\t\t<context name=\"MemberObjectProcess\" attribute=\"Normal Text\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Method (Built-in)\" String=\"process_functions\" />\n\t\t\t<keyword context=\"#pop!NoRegExp\" attribute=\"Object Property (Built-in)\" String=\"process_property\" />\n\t\t\t<IncludeRules context=\"DefaultMemberObject\" />\n\t\t</context>\n\n\t</contexts>\n\n\t<itemDatas>\n\t\t<itemData name=\"Normal Text\"      defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Keyword\"          defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n\t\t<itemData name=\"ControlFlow\"      defStyleNum=\"dsControlFlow\" spellChecking=\"false\" />\n\t\t<itemData name=\"Reserved\"         defStyleNum=\"dsKeyword\" italic=\"true\" spellChecking=\"false\" />\n\t\t<itemData name=\"Module\"           defStyleNum=\"dsImport\" spellChecking=\"false\" />\n\t\t<itemData name=\"Objects\"          defStyleNum=\"dsVariable\" spellChecking=\"false\" />\n\t\t<itemData name=\"Object Member\"    defStyleNum=\"dsAttribute\" spellChecking=\"false\" />\n\t\t<itemData name=\"Function Name\"    defStyleNum=\"dsFunction\" spellChecking=\"false\" />\n\t\t<itemData name=\"Built-in Objects\" defStyleNum=\"dsBuiltIn\" spellChecking=\"false\" />\n\t\t<itemData name=\"Object Property (Built-in)\" defStyleNum=\"dsAttribute\" italic=\"1\" spellChecking=\"false\" />\n\t\t<itemData name=\"Object Method (Built-in)\" defStyleNum=\"dsFunction\" italic=\"1\" spellChecking=\"false\" />\n\t\t<itemData name=\"Constant\"         defStyleNum=\"dsConstant\" spellChecking=\"false\" />\n\t\t<itemData name=\"Types\"            defStyleNum=\"dsDataType\" spellChecking=\"false\" />\n\t\t<itemData name=\"Parameter\"        defStyleNum=\"dsNormal\" spellChecking=\"false\" />\n\n\t\t<itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n\t\t<itemData name=\"Octal\"        defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n\t\t<itemData name=\"Hexadecimal\"  defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n\t\t<itemData name=\"Binary\"       defStyleNum=\"dsBaseN\" spellChecking=\"false\" />\n\t\t<itemData name=\"Float\"        defStyleNum=\"dsFloat\" spellChecking=\"false\" />\n\t\t<itemData name=\"Template\"     defStyleNum=\"dsVerbatimString\" />\n\t\t<itemData name=\"Substitution\" defStyleNum=\"dsSpecialChar\" spellChecking=\"false\" />\n\n\t\t<itemData name=\"Comment\"      defStyleNum=\"dsComment\" />\n\t\t<itemData name=\"Symbol\"       defStyleNum=\"dsOperator\" spellChecking=\"false\" />\n\t</itemDatas>\n\n</highlighting>\n\n<general>\n\t<comments>\n\t\t<comment name=\"singleLine\" start=\"//\" />\n\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n\t</comments>\n\t<keywords casesensitive=\"1\" additionalDeliminator=\"&quot;&apos;`\" weakDeliminator=\"$\" />\n</general>\n\n</language>\n<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/uscript.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"UnrealScript\" version=\"2\" kateversion=\"2.2\" section=\"Scripts\" extensions=\"*.uc\" mimetype=\"text/x-uscript\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>break</item>\n\t\t\t<item>continue</item>\n\t\t\t<item>if</item>\n\t\t\t<item>else</item>\n\t\t\t<item>switch</item>\n\t\t\t<item>while</item>\n\t\t\t<item>for</item>\n\t\t\t<item>do</item>\n\t\t\t<item>foreach</item>\n\t\t\t<item>true</item>\n\t\t\t<item>false</item>\n\t\t\t<item>null</item>\n\t\t\t<item>new</item>\n\t\t\t<item>instanceof</item>\n\t\t\t<item>state</item>\n\t\t\t<item>auto</item>\n\t\t\t<item>exec</item>\n\t\t\t<item>function</item>\n\t\t\t<item>defaultproperties</item>\n\t\t\t<item>native</item>\n\t\t\t<item>noexport</item>\n\t\t\t<item>var</item>\n\t\t\t<item>out</item>\n\t\t\t<item>local</item>\n\t\t\t<item>event</item>\n\t\t\t<item>return</item>\n\t\t\t<item>static</item>\n\t\t\t<item>Static</item>\n\t\t\t<item>synchronized</item>\n\t\t\t<item>transient</item>\n\t\t\t<item>volatile</item>\n\t\t\t<item>final</item>\n\t\t\t<item>throws</item>\n\t\t\t<item>extends</item>\n\t\t\t<item>expands</item>\n\t\t\t<item>public</item>\n\t\t\t<item>protected</item>\n\t\t\t<item>private</item>\n\t\t\t<item>abstract</item>\n\t\t\t<item>case</item>\n\t\t\t<item>default</item>\n\t\t\t<item>final</item>\n\t\t\t<item>simulated</item>\n\t\t\t<item>Dot</item>\n\t\t\t<item>nativereplication</item>\n\t\t\t<item>replication</item>\n\t\t\t<item>unreliable</item>\n\t\t\t<item>reliable</item>\n\t\t\t<item>ignores</item>\n\t\t\t<item>localized</item>\n\t\t\t<item>latent</item>\n\t\t\t<item>singular</item>\n\t\t\t<item>Cross</item>\n\t\t\t<item>config</item>\n\t\t\t<item>enum</item>\n\t\t\t<item>struct</item>\n\t\t\t<item>operator</item>\n\t\t\t<item>preoperator</item>\n\t\t\t<item>postoperator</item>\n\t\t\t<item>iterator</item>\n\t\t\t<item>coerce</item>\n\t\t\t<item>optional</item>\n\t\t\t<item>const</item>\n\t\t\t<item>editconst</item>\n\t\t\t<item>array</item>\n\t\t\t<item>export</item>\n\t\t\t<item>editinline</item>\n\t\t\t<item>editinlinenew</item>\n\t\t\t<item>editinlineuse</item>\n\t\t\t<item>cpptext</item>\n\t\t\t<item>placeable</item>\n\t\t\t<item>virtual</item>\n\t\t\t<item>hidecategories</item>\n\t\t\t<item>super</item>\n\t\t\t<item>global</item>\n\t\t\t<item>none</item>\n\t\t\t<item>self</item>\n\t\t</list>\n\n\t\t<list name=\"types\">\n\t\t\t<item>boolean</item>\n\t\t\t<item>char</item>\n\t\t\t<item>byte</item>\n\t\t\t<item>short</item>\n\t\t\t<item>int</item>\n\t\t\t<item>long</item>\n\t\t\t<item>float</item>\n\t\t\t<item>double</item>\n\t\t\t<item>void</item>\n\t\t\t<item>Pawn</item>\n\t\t\t<item>sound</item>\n\t\t\t<item>ipaddr</item>\n\t\t\t<item>ELightType</item>\n\t\t\t<item>actor</item>\n\t\t\t<item>ammo</item>\n\t\t\t<item>bool</item>\n\t\t\t<item>vector</item>\n\t\t\t<item>rotator</item>\n\t\t\t<item>name</item>\n\t\t\t<item>string</item>\n\t\t\t<item>object</item>\n\t\t\t<item>plane</item>\n\t\t\t<item>staticmesh</item>\n\t\t\t<item>package</item>\n\t\t\t<item>color</item>\n\t\t\t<item>coords</item>\n\t\t\t<item>material</item>\n\t\t\t<item>class</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t\t<keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n                <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n\t\t\t\t<HlCOct attribute=\"Octal\" context=\"#stay\"/>\n\t\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n                <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n\t\t\t\t<HlCChar attribute=\"Char\" context=\"#stay\"/>\n\t\t\t\t<RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//BEGIN.*$\" beginRegion=\"Region1\"/>\n\t\t\t\t<RegExpr attribute=\"Region Marker\" context=\"#stay\" String=\"//END.*$\" endRegion=\"Region1\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&#39;\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\"/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\"/>\n\t\t\t\t<AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=&gt;?[]^{|}~\"/>\n\t\t\t\t<StringDetect attribute=\"Preprocessor\" context=\"Preprocessor\" insensitive=\"true\" String=\"#exec\"/>\n\t\t\t</context>\n            <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n            </context>\n            <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n                <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n            </context>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&#39;\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\"/>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n\t\t\t</context>\n\t\t\t<context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Decimal\" defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Octal\" defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Hex\" defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Float\" defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"Char\" defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"String\" defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"String Char\" defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Symbol\" defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Preprocessor\"  defStyleNum=\"dsOthers\"/>\n\t\t\t<itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" />\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"//\"/>\n\t\t\t<comment name=\"multiLine\" start=\"/*\" end=\"*/\"/>\n\t\t</comments>\n\t\t<keywords casesensitive=\"0\" additionalDeliminator=\"&quot;&#39;\"/>\n\t</general>\n</language>\n\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/vala.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  This file is part of KDE's kate project.\n\n  Copyright 2012 Antoni Boucher (bouanto@hotmail.com)\n\n **********************************************************************\n * This library is free software; you can redistribute it and/or      *\n * modify it under the terms of the GNU Lesser General Public         *\n * License as published by the Free Software Foundation; either       *\n * version 2 of the License, or (at your option) any later version.   *\n *                                                                    *\n * This library is distributed in the hope that it will be useful,    *\n * but WITHOUT ANY WARRANTY; without even the implied warranty of     *\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *\n * Lesser General Public License for more details.                    *\n *                                                                    *\n * You should have received a copy of the GNU Lesser General Public   *\n * License along with this library; if not, write to the              *\n * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,   *\n * Boston, MA  02110-1301, USA.                                       *\n **********************************************************************\n -->\n<language name=\"Vala\" section=\"Sources\" version=\"5\" kateversion=\"3.4\" indenter=\"cstyle\" extensions=\"*.vala\" mimetype=\"text/x-vala\" priority=\"15\" author=\"Antoni Boucher (bouanto@hotmail.com)\" license=\"LGPLv2+\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>abstract</item>\n            <item>as</item>\n            <item>async</item>\n            <item>base</item>\n            <item>break</item>\n            <item>case</item>\n            <item>catch</item>\n            <item>class</item>\n            <item>const</item>\n            <item>construct</item>\n            <item>continue</item>\n            <item>default</item>\n            <item>delegate</item>\n            <item>delete</item>\n            <item>do</item>\n            <item>dynamic</item>\n            <item>else</item>\n            <item>enum</item>\n            <item>ensures</item>\n            <item>errordomain</item>\n            <item>extern</item>\n            <item>false</item>\n            <item>finally</item>\n            <item>for</item>\n            <item>foreach</item>\n            <item>get</item>\n            <item>global</item>\n            <item>if</item>\n            <item>in</item>\n            <item>inline</item>\n            <item>interface</item>\n            <item>internal</item>\n            <item>is</item>\n            <item>lock</item>\n            <item>namespace</item>\n            <item>new</item>\n            <item>null</item>\n            <item>out</item>\n            <item>override</item>\n            <item>owned</item>\n            <item>private</item>\n            <item>protected</item>\n            <item>public</item>\n            <item>ref</item>\n            <item>requires</item>\n            <item>result</item>\n            <item>return</item>\n            <item>set</item>\n            <item>signal</item>\n            <item>sizeof</item>\n            <item>static</item>\n            <item>struct</item>\n            <item>switch</item>\n            <item>this</item>\n            <item>throw</item>\n            <item>throws</item>\n            <item>true</item>\n            <item>try</item>\n            <item>typeof</item>\n            <item>unowned</item>\n            <item>using</item>\n            <item>value</item>\n            <item>virtual</item>\n            <item>weak</item>\n            <item>while</item>\n            <item>yield</item>\n        </list>\n    <list name=\"extensions\">\n        <item>connect</item>\n        <item>connect_after</item>\n        <item>disconnect</item>\n        <item>emit</item>\n    </list>\n    <list name=\"types\">\n        <item>bool</item>\n        <item>char</item>\n        <item>double</item>\n        <item>float</item>\n        <item>int</item>\n        <item>int8</item>\n        <item>int16</item>\n        <item>int32</item>\n        <item>int64</item>\n        <item>long</item>\n        <item>short</item>\n        <item>size_t</item>\n        <item>ssize_t</item>\n        <item>string</item>\n        <item>uchar</item>\n        <item>uint</item>\n        <item>uint8</item>\n        <item>uint16</item>\n        <item>uint32</item>\n        <item>uint64</item>\n        <item>ulong</item>\n        <item>unichar</item>\n        <item>ushort</item>\n        <item>var</item>\n        <item>void</item>\n    </list>\n    <contexts>\n        <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n            <DetectSpaces />\n            <RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\\s*$\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n            <DetectChar context=\"AfterHash\" char=\"#\" firstNonSpace=\"true\" lookAhead=\"true\" />\n            <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//BEGIN\" beginRegion=\"Region1\" firstNonSpace=\"true\" />\n            <StringDetect attribute=\"Region Marker\" context=\"Region Marker\" String=\"//END\" endRegion=\"Region1\" firstNonSpace=\"true\" />\n            <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n            <keyword attribute=\"Extensions\" context=\"#stay\" String=\"extensions\" />\n            <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n            <HlCChar attribute=\"Char\" context=\"#stay\"/>\n\n            <Detect2Chars attribute=\"String\" context=\"String Template\" char=\"@\" char1=\"&quot;\"/>\n            <StringDetect attribute=\"String\" context=\"MultiLine String\" String=\"&quot;&quot;&quot;\"/>\n            <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n            <DetectIdentifier />\n            <Float attribute=\"Float\" context=\"Float Suffixes\"/>\n            <HlCOct attribute=\"Octal\" context=\"#stay\"/>\n            <HlCHex attribute=\"Hex\" context=\"#stay\"/>\n            <Int attribute=\"Decimal\" context=\"Int Suffixes\"/>\n            <IncludeRules context=\"##Doxygen\" />\n            <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n            <Detect2Chars attribute=\"Comment\" context=\"MultiLine Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n            <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n            <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n            <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\"/>\n        </context>\n\n        <context name=\"Float Suffixes\" attribute=\"Float\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n            <AnyChar String=\"fF\" attribute=\"Float\" context=\"#pop\"/>\n        </context>\n\n        <context name=\"Int Suffixes\" attribute=\"Decimal\" lineEndContext=\"#pop\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"ULL\" insensitive=\"true\"/>\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LUL\" insensitive=\"true\"/>\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LLU\" insensitive=\"true\"/>\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"UL\" insensitive=\"true\"/>\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LU\" insensitive=\"true\"/>\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"LL\" insensitive=\"true\"/>\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"U\" insensitive=\"true\"/>\n            <StringDetect attribute=\"Decimal\" context=\"#pop\" String=\"L\" insensitive=\"true\"/>\n        </context>\n\n        <context name=\"String Template Variable\" attribute=\"String\" lineEndContext=\"#stay\">\n            <Detect2Chars attribute=\"Escaped Code\" context=\"#stay\" char=\"$\" char1=\"$\" />\n            <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z_][a-zA-Z0-9_]*\" />\n            <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\(.*\\)\" minimal=\"true\" />\n        </context>\n\n        <context attribute=\"String\" lineEndContext=\"#stay\" name=\"MultiLine String\">\n            <StringDetect attribute=\"String\" context=\"#pop\" String=\"&quot;&quot;&quot;\"/>\n        </context>\n\n        <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n            <LineContinue attribute=\"String\" context=\"#stay\"/>\n            <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n            <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        </context>\n\n        <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String Template\">\n            <IncludeRules context=\"String Template Variable\" />\n            <LineContinue attribute=\"String\" context=\"#stay\"/>\n            <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n            <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n        </context>\n\n        <context attribute=\"Region Marker\" lineEndContext=\"#pop\" name=\"Region Marker\">\n        </context>\n\n        <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n            <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n            <DetectSpaces />\n            <IncludeRules context=\"##Alerts\" />\n            <DetectIdentifier />\n        </context>\n\n        <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"MultiLine Comment\">\n            <DetectSpaces />\n            <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n            <IncludeRules context=\"##Alerts\" />\n            <DetectIdentifier />\n        </context>\n\n        <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"AfterHash\">\n            <!-- elif, else, endif, if -->\n            <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*if(?=\\s+\\S)\" insensitive=\"true\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n            <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*endif\" insensitive=\"true\" endRegion=\"PP\" firstNonSpace=\"true\" />\n            <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*(?:el(?:se|if))\" insensitive=\"true\" firstNonSpace=\"true\" />\n            <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s+[0-9]+\" insensitive=\"true\" firstNonSpace=\"true\" />\n        </context>\n\n        <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n            <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n            <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n            <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n            <IncludeRules context=\"##Doxygen\" />\n            <Detect2Chars attribute=\"Comment\" context=\"Comment/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"MultiLine Comment\" />\n\n            <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n        </context>\n\n        <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment/Preprocessor\">\n            <DetectSpaces />\n            <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n            <DetectIdentifier />\n        </context>\n\n        <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n            <DetectSpaces />\n            <IncludeRules context=\"##Alerts\" />\n            <DetectIdentifier />\n            <IncludeRules context=\"##Doxygen\" />\n            <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n            <Detect2Chars attribute=\"Comment\" context=\"MultiLine Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n            <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n            <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*el(?:se|if)\" firstNonSpace=\"true\" />\n            <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        </context>\n\n        <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n            <DetectSpaces />\n            <IncludeRules context=\"##Alerts\" />\n            <DetectIdentifier />\n            <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n            <IncludeRules context=\"##Doxygen\" />\n            <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n            <Detect2Chars attribute=\"Comment\" context=\"MultiLine Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n            <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n            <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        </context>\n    </contexts>\n    <itemDatas>\n        <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n        <itemData name=\"Char\" defStyleNum=\"dsChar\" spellChecking=\"false\"/>\n        <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n        <itemData name=\"Data Type\" defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n        <itemData name=\"Decimal\" defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n        <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\"/>\n        <itemData name=\"Escaped Code\" defStyleNum=\"dsKeyword\" color=\"#0F0F8F\" selColor=\"#ffffff\" bold=\"true\" italic=\"false\" spellChecking=\"false\" />\n        <itemData name=\"Extensions\" defStyleNum=\"dsKeyword\" color=\"#0095ff\" selColor=\"#ffffff\" bold=\"true\" italic=\"false\" spellChecking=\"false\"/>\n        <itemData name=\"Float\" defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n        <itemData name=\"Hex\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n        <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" spellChecking=\"false\"/>\n        <itemData name=\"Octal\" defStyleNum=\"dsBaseN\" spellChecking=\"false\"/>\n        <itemData name=\"Prep. Lib\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n        <itemData name=\"Preprocessor\" defStyleNum=\"dsOthers\" spellChecking=\"false\"/>\n        <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" spellChecking=\"false\"/>\n        <itemData name=\"String\" defStyleNum=\"dsString\"/>\n        <itemData name=\"String Char\" defStyleNum=\"dsChar\"/>\n        <itemData name=\"Symbol\" defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n        <itemData name=\"Variable\" defStyleNum=\"dsKeyword\" color=\"#5555FF\" selColor=\"#ffffff\" bold=\"false\" italic=\"false\" spellChecking=\"false\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n        <comment name=\"singleLine\" start=\"//\" />\n        <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"true\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/valgrind-suppression.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Valgrind Suppression\" section=\"Other\" extensions=\"*.supp;\" mimetype=\"\" version=\"2\" kateversion=\"2.4\" author=\"Milian Wolff (mail@milianw.de)\" license=\"LGPL\">\n<highlighting>\n<contexts>\n  <context name=\"File\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar char=\"#\" attribute=\"Comment\" context=\"Comment\" firstNonSpace=\"true\" />\n    <DetectChar char=\"{\" attribute=\"Normal Text\" context=\"Rule\" firstNonSpace=\"true\" />\n </context>\n\n  <context name=\"Rule\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n    <RegExpr attribute=\"RuleName\" String=\"^[^\\}]+$\" context=\"Rule2\" />\n    <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop\" firstNonSpace=\"true\" />\n  </context>\n\n  <context name=\"Rule2\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n    <RegExpr attribute=\"ErrorKind\" String=\"\\w+:\\w+\" context=\"Rule3\" />\n    <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop\" firstNonSpace=\"true\" />\n  </context>\n\n  <context name=\"Rule3\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n    <RegExpr attribute=\"FrameKind\" String=\"fun:|obj:|\\.\\.\\.\" context=\"#stay\" />\n    <DetectChar char=\"}\" attribute=\"Normal Text\" context=\"#pop#pop#pop\" firstNonSpace=\"true\" />\n  </context>\n\n  <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n    <DetectSpaces />\n    <IncludeRules context=\"##Alerts\" />\n    <DetectIdentifier />\n  </context>\n</contexts>\n\n\n<itemDatas>\n <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n <itemData name=\"RuleName\" defStyleNum=\"dsKeyword\" />\n <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n <itemData name=\"ErrorKind\" defStyleNum=\"dsOthers\" />\n <itemData name=\"FrameKind\" defStyleNum=\"dsFunction\" />\n</itemDatas>\n</highlighting>\n\n\n<general>\n <comments>\n  <comment name=\"singleLine\" start=\"#\" />\n </comments>\n <keywords casesensitive=\"0\" />\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/varnish.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Varnish Configuration Language\" version=\"3\" kateversion=\"5.0\" section=\"Configuration\" extensions=\"*.vcl;\" mimetype=\"\" author=\"Xavier Guerrin (xavier@tuxfamily.org)\" license=\"WTFPL\">\n  <highlighting>\n    <list name=\"vclStandardSubs\">\n      <item>vcl_recv</item>\n      <item>vcl_pipe</item>\n      <item>vcl_pass</item>\n      <item>vcl_hash</item>\n      <item>vcl_hit</item>\n      <item>vcl_miss</item>\n      <item>vcl_fetch</item>\n      <item>vcl_deliver</item>\n      <item>vcl_init</item>\n      <item>vcl_fini</item>\n      <item>vcl_error</item>\n    </list>\n    <list name=\"vclConditionalKeywords\">\n      <item>if</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>elseif</item>\n    </list>\n    <list name=\"vclKeywords\">\n      <item>set</item>\n      <item>call</item>\n      <item>error</item>\n      <item>esi</item>\n      <item>include</item>\n      <item>remove</item>\n      <item>unset</item>\n      <item>panic</item>\n      <item>rollback</item>\n      <item>purge</item>\n      <item>synthetic</item>\n    </list>\n    <list name=\"vclStandardFunctions\">\n      <item>hash_data</item>\n      <item>regsub</item>\n      <item>regsuball</item>\n      <item>ban</item>\n      <item>ban_url</item>\n    </list>\n    <list name=\"vclModes\">\n      <item>deliver</item>\n      <item>error</item>\n      <item>fetch</item>\n      <item>hash</item>\n      <item>hit_for_pass</item>\n      <item>lookup</item>\n      <item>ok</item>\n      <item>pass</item>\n      <item>pipe</item>\n      <item>restart</item>\n    </list>\n    <list name=\"vclDirectorTypes\">\n      <item>random</item>\n      <item>client</item>\n      <item>hash</item>\n      <item>round-robin</item>\n      <item>dns</item>\n      <item>fallback</item>\n    </list>\n    <!--\n      2013-06-16\n      This list was generated from https://www.varnish-cache.org/vmods, taking\n      only vmods having the \"Used in production\" status, excluding the\n      non-free ones.\n    -->\n    <list name=\"knownVMods\">\n      <item>std</item>\n      <item>example</item>\n      <item>abtest</item>\n      <item>threescale</item>\n      <item>authentication</item>\n      <item>boltsort</item>\n      <item>crashhandler</item>\n      <item>curl</item>\n      <item>digest</item>\n      <item>dns</item>\n      <item>header</item>\n      <item>memcached</item>\n      <item>null</item>\n      <item>querystring</item>\n      <item>shield</item>\n      <item>softpurge</item>\n      <item>statsd</item>\n      <item>throttle</item>\n      <item>timeutils</item>\n      <item>urlcode</item>\n      <item>var</item>\n      <item>timers</item>\n    </list>\n    <contexts>\n      <context name=\"normal_text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <RegExpr attribute=\"Keyword\" context=\"sub_declaration\"      String=\"^\\s*sub\\s+\" />\n        <RegExpr attribute=\"Keyword\" context=\"probe_declaration\"    String=\"^\\s*probe\\s+\" />\n        <RegExpr attribute=\"Keyword\" context=\"backend_declaration\"  String=\"^\\s*backend\\s+\" />\n        <RegExpr attribute=\"Keyword\" context=\"director_declaration\" String=\"^\\s*director\\s+\" />\n        <RegExpr attribute=\"Keyword\" context=\"acl_declaration\"      String=\"^\\s*acl\\s+\" />\n        <RegExpr attribute=\"Keyword\" context=\"import_declaration\"   String=\"^\\s*import\\s+\" />\n        <RegExpr attribute=\"Keyword\" context=\"include_declaration\"  String=\"^\\s*include\\s+\" />\n        <IncludeRules context=\"embedded-c\" />\n      </context>\n      <context name=\"embedded-c\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"C\" char1=\"{\" context=\"embedded-c_enclosure\" attribute=\"Region Marker\" beginRegion=\"embedded_c_block\" />\n      </context>\n      <context name=\"embedded-c_enclosure\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"}\" char1=\"C\" context=\"#pop\" attribute=\"Region Marker\" endRegion=\"embedded_c_block\" />\n        <IncludeRules context=\"##C\" />\n      </context>\n      <context name=\"shell-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      </context>\n      <context name=\"c-like-comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"*\" char1=\"/\" context=\"#pop\" attribute=\"Comment\" />\n      </context>\n      <context name=\"cplusplus-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      </context>\n      <context name=\"comments\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectChar   char=\"#\"           context=\"shell-like-comment\"       attribute=\"Comment\" />\n        <Detect2Chars char=\"/\" char1=\"*\" context=\"c-like-comment\"           attribute=\"Comment\" />\n        <Detect2Chars char=\"/\" char1=\"/\" context=\"cplusplus-like-comment\"   attribute=\"Comment\" />\n      </context>\n      <context name=\"vcl_variables\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Variable\"       context=\"#stay\" String=\"now\" />\n        <RegExpr attribute=\"Storage\"        context=\"#stay\" String=\"storage\\.[a-zA-Z0-9]+(?:\\.(?:free_space|used_space|happy))?\" />\n        <RegExpr attribute=\"TCP Property\"   context=\"#stay\" String=\"client\\.(ip|identity)\" />\n        <RegExpr attribute=\"TCP Property\"   context=\"#stay\" String=\"server\\.(ip|hostname|identity|port)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"req\\.(request|url|proto|backend|restarts|esi_level|ttl|grace|keep|xid|esi|can_gzip|backend\\.healthy|hash_ignore_busy|hash_always_miss)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"bereq\\.(request|url|proto|connect_timeout|first_byte_timeout|between_bytes_timeout)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"obj\\.(proto|status|response|hits|ttl|grace|keep|lastuse)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"beresp\\.(proto|saintmode|status|response|do_esi|do_stream|do_gzip|do_gunzip|ttl|grace|keep|backend\\.(name|ip|port)|storage|cacheable)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"resp\\.(proto|status|response)\" />\n        <RegExpr attribute=\"HTTP X- Header\" context=\"#stay\" String=\"(req|bereq|resp|beresp|obj)\\.http\\.X-[-_A-Za-z0-9]*\" />\n        <RegExpr attribute=\"HTTP Header\"    context=\"#stay\" String=\"(req|bereq|resp|beresp|obj)\\.http\\.[A-Za-z][-_A-Za-z0-9]*\" />\n      </context>\n      <context name=\"vcl_operators\" attribute=\"Operator\" lineEndContext=\"#stay\">\n        <DetectChar   attribute=\"Logical Operator\" context=\"#stay\" char=\"!\" />\n        <Detect2Chars attribute=\"Logical Operator\" context=\"#stay\" char=\"&amp;\" char1=\"&amp;\" />\n        <Detect2Chars attribute=\"Logical Operator\" context=\"#stay\" char=\"|\" char1=\"|\" />\n\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"=\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"!\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"&lt;\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"&gt;\" char1=\"=\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"#stay\" char=\"&lt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"#stay\" char=\"&gt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"#stay\" char=\"~\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"!\" char1=\"~\" />\n\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"+\" />\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"-\" />\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"*\" />\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"/\" />\n\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"+\" char1=\"=\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"-\" char1=\"=\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"*\" char1=\"=\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"/\" char1=\"=\" />\n\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"+\" char1=\"+\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"-\" char1=\"-\" />\n\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"&gt;\" char1=\"&gt;\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n\n        <DetectChar   attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n      </context>\n      <context name=\"minimal_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <RegExpr attribute=\"Duration\" context=\"#stay\" String=\"([0-9]+|[0-9]+\\.[0-9]+|[0-9]+\\.|\\.[0-9]+)\\s*(w|d|h|m|s|ms)\" />\n        <RegExpr attribute=\"Data Size\" context=\"#stay\" String=\"([0-9]+|[0-9]+\\.[0-9]+|[0-9]+\\.|\\.[0-9]+)\\s*[KMGT]?B\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"true\" />\n        <StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"false\" />\n        <DetectChar char=\"&quot;\" context=\"string\" attribute=\"String\" />\n        <Detect2Chars attribute=\"String\" char=\"{\" char1=\"&quot;\" context=\"string_enclosure\" beginRegion=\"string_enclosure_block\" />\n      </context>\n      <context name=\"definition_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"minimal_code\" />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n      </context>\n      <context name=\"basic_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"minimal_code\" />\n        <IncludeRules context=\"vcl_variables\" />\n        <IncludeRules context=\"vcl_operators\" />\n      </context>\n      <context name=\"regular_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"basic_code\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"vclKeywords\" />\n        <keyword attribute=\"Standard VCL Sub\" context=\"#stay\" String=\"vclStandardSubs\" />\n        <keyword attribute=\"Standard VCL Function\" context=\"#stay\" String=\"vclStandardFunctions\" />\n        <keyword attribute=\"Condition Keyword\" context=\"condition_part\" String=\"vclConditionalKeywords\" />\n        <StringDetect attribute=\"Keyword\" context=\"return_statement\" String=\"return\" />\n        <IncludeRules context=\"embedded-c\" />\n      </context>\n      <context name=\"return_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Action Keyword\" context=\"#stay\" String=\"vclModes\" />\n        <DetectChar attribute=\"Normal Text\" char=\";\" context=\"#pop\" />\n      </context>\n      <context name=\"string_enclosure\" attribute=\"String\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"String\" char=\"&quot;\" char1=\"}\" context=\"#pop\" endRegion=\"string_enclosure_block\" />\n      </context>\n      <context name=\"sub_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <keyword attribute=\"Standard VCL Sub\" context=\"#stay\" String=\"vclStandardSubs\" />\n        <DetectChar attribute=\"Region Marker\" context=\"sub_definition\" char=\"{\" beginRegion=\"sub_block\" />\n      </context>\n      <context name=\"sub_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"regular_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"sub_block\" />\n      </context>\n      <context name=\"condition_part\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Condition Keyword\" context=\"#stay\" String=\"vclConditionalKeywords\" />\n        <DetectChar attribute=\"Region Marker\" context=\"conditional_expression\" char=\"(\" beginRegion=\"conditional_expression_block\" />\n        <DetectChar attribute=\"Region Marker\" context=\"conditional_block\" char=\"{\" beginRegion=\"conditional_blockregion\" />\n      </context>\n      <context name=\"conditional_expression\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"basic_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"conditional_expression\" char=\"(\" beginRegion=\"conditional_expression_block\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop\" char=\")\" endRegion=\"conditional_expression_block\" />\n      </context>\n      <context name=\"conditional_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"regular_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"conditional_blockregion\" />\n      </context>\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context name=\"probe_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectChar   attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n        <DetectChar attribute=\"Region Marker\" context=\"probe_definition\" char=\"{\" beginRegion=\"probe_block\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n      </context>\n      <context name=\"probe_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Probe Property\" context=\"#stay\" String=\"\\.(url|request|window|threshold|initial|expected_response|interval|timeout)\" />\n        <IncludeRules context=\"definition_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"probe_block\" />\n      </context>\n      <context name=\"backend_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n        <DetectChar attribute=\"Region Marker\" context=\"backend_definition\" char=\"{\" beginRegion=\"backend_block\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n      </context>\n      <context name=\"backend_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Backend Property\" context=\"#stay\" String=\"\\.(host|port|host_header|connect_timeout|first_byte_timeout|between_bytes_timeout|max_connections|saintmode_threshold)\" />\n        <IncludeRules context=\"definition_code\" />\n        <StringDetect attribute=\"Backend Property\" context=\"probe_declaration\" String=\".probe\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"backend_block\" />\n      </context>\n      <context name=\"director_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <keyword      attribute=\"Director Type\" String=\"vclDirectorTypes\" />\n        <StringDetect attribute=\"Director Type\" String=\"round-robin\" />\n        <DetectChar attribute=\"Region Marker\" context=\"director_definition\" char=\"{\" beginRegion=\"director_block\" />\n      </context>\n      <context name=\"director_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"definition_code\" />\n        <RegExpr attribute=\"Director Property\" context=\"#stay\" String=\"\\.(retries|ttl|suffix)\" />\n        <StringDetect attribute=\"Director Property\" context=\"backend_declaration\" String=\".list\" />\n        <DetectChar attribute=\"Region Marker\" context=\"director_backend\" char=\"{\" beginRegion=\"director_backend_block\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"backend_block\" />\n      </context>\n      <context name=\"director_backend\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"definition_code\" />\n        <RegExpr attribute=\"Director Property\" context=\"#stay\" String=\"\\.(weight|suffix)\" />\n        <StringDetect attribute=\"Director Property\" context=\"backend_declaration\" String=\".backend\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop\" char=\"}\" endRegion=\"director_backend_block\" />\n      </context>\n      <context name=\"acl_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\"> \n        <DetectChar attribute=\"Region Marker\" context=\"acl_definition\" char=\"{\" beginRegion=\"acl_block\" />\n      </context>\n      <context name=\"acl_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\"> \n        <IncludeRules context=\"minimal_code\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"#stay\" char=\"!\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"#stay\" char=\"/\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"acl_block\" />\n      </context>\n      <context name=\"import_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Well-known VMod\" context=\"import_identified\" String=\"knownVMods\" />\n        <DetectIdentifier attribute=\"VMod Identifier\" context=\"import_identified\" />\n      </context>\n      <context name=\"import_identified\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\";\" />\n        <StringDetect attribute=\"Keyword\" context=\"import_from\" String=\"from\" />\n      </context>\n      <context name=\"import_from\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"import_from_path\" attribute=\"String\" />\n      </context>\n      <context name=\"import_from_path\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"import_from_path_complete\" attribute=\"String\" />\n      </context>\n      <context name=\"import_from_path_complete\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop#pop#pop\" char=\";\" />\n      </context>\n      <context name=\"include_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"include_path\" attribute=\"String\" />\n      </context>\n      <context name=\"include_path\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"include_path_complete\" attribute=\"String\" />\n      </context>\n      <context name=\"include_path_complete\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop\" char=\";\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Condition Keyword\"         defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Action Keyword\"            defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Variable\"                  defStyleNum=\"dsVariable\" />\n      <itemData name=\"Director Type\"             defStyleNum=\"dsDataType\" />\n      <itemData name=\"Standard VCL Function\"     defStyleNum=\"dsFunction\" />\n      <itemData name=\"Standard VCL Sub\"          defStyleNum=\"dsFunction\" bold=\"1\" />\n      <itemData name=\"Operator\"                  defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Comparison Operator\"       defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Arithmetic Operator\"       defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Logical Operator\"          defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"String\"                    defStyleNum=\"dsString\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Region Marker\"             defStyleNum=\"dsNormal\" />\n      <itemData name=\"Probe Property\"            defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Backend Property\"          defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Director Property\"         defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Storage\"                   defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"TCP Property\"              defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"HTTP Property\"             defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP Header\"               defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP X- Header\"            defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"Decimal\"                   defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Duration\"                  defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Data Size\"                 defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Float\"                     defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"VMod Identifier\"           defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" />\n      <itemData name=\"Well-known VMod\"           defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/varnish4.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Varnish 4 Configuration Language\" version=\"3\" kateversion=\"3.4\" section=\"Configuration\" extensions=\"*.vcl;\" mimetype=\"\" author=\"Xavier Guerrin (xavier@tuxfamily.org)\" license=\"WTFPL\" priority=\"4\">\n  <highlighting>\n    <list name=\"vclStandardSubs\">\n      <item>vcl_recv</item>\n      <item>vcl_pipe</item>\n      <item>vcl_pass</item>\n      <item>vcl_hash</item>\n      <item>vcl_purge</item>\n      <item>vcl_miss</item>\n      <item>vcl_hit</item>\n      <item>vcl_deliver</item>\n      <item>vcl_synth</item>\n      <item>vcl_backend_fetch</item>\n      <item>vcl_backend_response</item>\n      <item>vcl_backend_error</item>\n      <item>vcl_init</item>\n      <item>vcl_fini</item>\n    </list>\n    <list name=\"vclConditionalKeywords\">\n      <item>if</item>\n      <item>else</item>\n      <item>elif</item>\n      <item>elsif</item>\n      <item>elseif</item>\n    </list>\n    <list name=\"vclKeywords\">\n      <item>call</item>\n      <item>set</item>\n      <item>unset</item>\n      <item>new</item>\n      <item>rollback</item>\n      <item>synthetic</item>\n      <item>esi</item>\n      <item>include</item>\n      <item>panic</item>\n    </list>\n    <list name=\"vclStandardFunctions\">\n      <item>hash_data</item>\n      <item>regsub</item>\n      <item>regsuball</item>\n      <item>ban</item>\n    </list>\n    <list name=\"vclModes\">\n      <item>abandon</item>\n      <item>deliver</item>\n      <item>error</item>\n      <item>fetch</item>\n      <item>hash</item>\n      <item>hit_for_pass</item>\n      <item>lookup</item>\n      <item>ok</item>\n      <item>pass</item>\n      <item>pipe</item>\n      <item>purge</item>\n      <item>restart</item>\n      <item>retry</item>\n      <item>synth</item>\n    </list>\n    <list name=\"vclDirectorTypes\">\n      <item>random</item>\n      <item>client</item>\n      <item>hash</item>\n      <item>round-robin</item>\n      <item>dns</item>\n      <item>fallback</item>\n    </list>\n    <!--\n      2013-06-16\n      This list was generated from https://www.varnish-cache.org/vmods, taking\n      only vmods having the \"Used in production\" status, excluding the\n      non-free ones.\n    -->\n    <list name=\"knownVMods\">\n      <item>std</item>\n      <item>example</item>\n      <item>abtest</item>\n      <item>threescale</item>\n      <item>authentication</item>\n      <item>boltsort</item>\n      <item>crashhandler</item>\n      <item>curl</item>\n      <item>digest</item>\n      <item>dns</item>\n      <item>header</item>\n      <item>memcached</item>\n      <item>null</item>\n      <item>querystring</item>\n      <item>shield</item>\n      <item>softpurge</item>\n      <item>statsd</item>\n      <item>throttle</item>\n      <item>timeutils</item>\n      <item>urlcode</item>\n      <item>var</item>\n      <item>timers</item>\n      <item>directors</item>\n    </list>\n    <contexts>\n      <context name=\"normal_text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <StringDetect attribute=\"Keyword\" context=\"sub_declaration\"      String=\"sub\" />\n        <StringDetect attribute=\"Keyword\" context=\"probe_declaration\"    String=\"probe\" />\n        <StringDetect attribute=\"Keyword\" context=\"backend_declaration\"  String=\"backend\" />\n        <StringDetect attribute=\"Keyword\" context=\"director_declaration\" String=\"director\" />\n        <StringDetect attribute=\"Keyword\" context=\"acl_declaration\"      String=\"acl\" />\n        <StringDetect attribute=\"Keyword\" context=\"import_declaration\"   String=\"import\" />\n        <StringDetect attribute=\"Keyword\" context=\"include_declaration\"  String=\"include\" />\n        <StringDetect attribute=\"Keyword\" context=\"version_declaration\"  String=\"vcl\" />\n        <IncludeRules context=\"embedded-c\" />\n      </context>\n      <context name=\"embedded-c\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"C\" char1=\"{\" context=\"embedded-c_enclosure\" attribute=\"Region Marker\" beginRegion=\"embedded_c_block\" />\n      </context>\n      <context name=\"embedded-c_enclosure\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"}\" char1=\"C\" context=\"#pop\" attribute=\"Region Marker\" endRegion=\"embedded_c_block\" />\n        <IncludeRules context=\"##C\" />\n      </context>\n      <context name=\"shell-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      </context>\n      <context name=\"c-like-comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars char=\"*\" char1=\"/\" context=\"#pop\" attribute=\"Comment\" />\n      </context>\n      <context name=\"cplusplus-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n      </context>\n      <context name=\"comments\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectChar   char=\"#\"           context=\"shell-like-comment\"       attribute=\"Comment\" />\n        <Detect2Chars char=\"/\" char1=\"*\" context=\"c-like-comment\"           attribute=\"Comment\" />\n        <Detect2Chars char=\"/\" char1=\"/\" context=\"cplusplus-like-comment\"   attribute=\"Comment\" />\n      </context>\n      <context name=\"vcl_variables\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Variable\"       context=\"#stay\" String=\"now\" />\n        <RegExpr attribute=\"Storage\"        context=\"#stay\" String=\"storage\\.[a-zA-Z0-9]+(?:\\.(?:free_space|used_space|happy))?\" />\n        <RegExpr attribute=\"TCP Property\"   context=\"#stay\" String=\"client\\.(ip|identity)\" />\n        <RegExpr attribute=\"TCP Property\"   context=\"#stay\" String=\"server\\.(ip|hostname|identity|port)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"req\\.(method|url|proto|restarts|esi_level|ttl|xid|esi|can_gzip|backend_hint|hash_ignore_busy|hash_always_miss)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"bereq\\.(xid|retries|backend|method|url|proto|uncacheable|connect_timeout|first_byte_timeout|between_bytes_timeout)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"obj\\.(proto|status|reason|hits|ttl|grace|keep|uncacheable)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"beresp\\.(proto|status|reason|do_esi|do_stream|do_gzip|do_gunzip|uncacheable|ttl|grace|keep|backend\\.(name|ip)|storage_hint)\" />\n        <RegExpr attribute=\"HTTP Property\"  context=\"#stay\" String=\"resp\\.(proto|status|reason)\" />\n        <RegExpr attribute=\"HTTP X- Header\" context=\"#stay\" String=\"(req|bereq|resp|beresp|obj)\\.http\\.X-[-_A-Za-z0-9]*\" />\n        <RegExpr attribute=\"HTTP Header\"    context=\"#stay\" String=\"(req|bereq|resp|beresp|obj)\\.http\\.[A-Za-z][-_A-Za-z0-9]*\" />\n      </context>\n      <context name=\"vcl_operators\" attribute=\"Operator\" lineEndContext=\"#stay\">\n        <DetectChar   attribute=\"Logical Operator\" context=\"#stay\" char=\"!\" />\n        <Detect2Chars attribute=\"Logical Operator\" context=\"#stay\" char=\"&amp;\" char1=\"&amp;\" />\n        <Detect2Chars attribute=\"Logical Operator\" context=\"#stay\" char=\"|\" char1=\"|\" />\n\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"=\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"!\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"&lt;\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"&gt;\" char1=\"=\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"#stay\" char=\"&lt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"#stay\" char=\"&gt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"#stay\" char=\"~\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"#stay\" char=\"!\" char1=\"~\" />\n\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"+\" />\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"-\" />\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"*\" />\n        <DetectChar   attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"/\" />\n\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"+\" char1=\"=\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"-\" char1=\"=\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"*\" char1=\"=\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"/\" char1=\"=\" />\n\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"+\" char1=\"+\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"-\" char1=\"-\" />\n\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"&gt;\" char1=\"&gt;\" />\n        <Detect2Chars attribute=\"Arithmetic Operator\" context=\"#stay\" char=\"&lt;\" char1=\"&lt;\" />\n\n        <DetectChar   attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n      </context>\n      <context name=\"minimal_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <RegExpr attribute=\"Duration\" context=\"#stay\" String=\"([0-9]+|[0-9]+\\.[0-9]+|[0-9]+\\.|\\.[0-9]+)\\s*(y|w|d|h|m|s|ms)\" />\n        <RegExpr attribute=\"Data Size\" context=\"#stay\" String=\"([0-9]+|[0-9]+\\.[0-9]+|[0-9]+\\.|\\.[0-9]+)\\s*[KMGT]?B\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"true\" />\n        <StringDetect attribute=\"Keyword\" context=\"#stay\" String=\"false\" />\n        <RegExpr attribute=\"Known VMod Function\" context=\"#stay\" String=\"debug\\.(panic|author|obj|test_priv_(?:call|vcl)|str2blob|blob2hex|no_backend|rot52)\" />\n        <RegExpr attribute=\"Known VMod Function\" context=\"#stay\" String=\"\\.(enum|foo|date)\" />\n        <RegExpr attribute=\"Known VMod Function\" context=\"#stay\" String=\"directors\\.(fallback|hash|random|round_robin)\" />\n        <RegExpr attribute=\"Known VMod Function\" context=\"#stay\" String=\"\\.(add_backend|backend)\" />\n        <RegExpr attribute=\"Known VMod Function\" context=\"#stay\" String=\"std\\.(cache_req_body|collect|duration|fileread|healthy|integer|ip|log|port|querysort|random|real|real2time|rollback|set_ip_tos|strstr|syslog|time|time2integer|time2real|timestamp|tolower|toupper)\" />\n        <DetectChar char=\"&quot;\" context=\"string\" attribute=\"String\" />\n        <Detect2Chars attribute=\"String\" char=\"{\" char1=\"&quot;\" context=\"string_enclosure\" beginRegion=\"string_enclosure_block\" />\n      </context>\n      <context name=\"definition_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"minimal_code\" />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n      </context>\n      <context name=\"basic_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"minimal_code\" />\n        <IncludeRules context=\"vcl_variables\" />\n        <IncludeRules context=\"vcl_operators\" />\n      </context>\n      <context name=\"regular_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"basic_code\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"vclKeywords\" />\n        <keyword attribute=\"Standard VCL Sub\" context=\"#stay\" String=\"vclStandardSubs\" />\n        <keyword attribute=\"Standard VCL Function\" context=\"#stay\" String=\"vclStandardFunctions\" />\n        <keyword attribute=\"Condition Keyword\" context=\"condition_part\" String=\"vclConditionalKeywords\" />\n        <StringDetect attribute=\"Keyword\" context=\"return_statement\" String=\"return\" />\n        <IncludeRules context=\"embedded-c\" />\n      </context>\n      <context name=\"return_statement\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <StringDetect attribute=\"Keyword\" context=\"return_synth\" String=\"synth\" />\n        <keyword attribute=\"Action Keyword\" context=\"#stay\" String=\"vclModes\" />\n        <DetectChar attribute=\"Normal Text\" char=\";\" context=\"#pop\" />\n      </context>\n      <context name=\"return_synth\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"basic_code\" />\n        <DetectChar attribute=\"Normal Text\" char=\")\" context=\"#pop\" />\n      </context>\n      <context name=\"string_enclosure\" attribute=\"String\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"String\" char=\"&quot;\" char1=\"}\" context=\"#pop\" endRegion=\"string_enclosure_block\" />\n      </context>\n      <context name=\"sub_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <keyword attribute=\"Standard VCL Sub\" context=\"#stay\" String=\"vclStandardSubs\" />\n        <DetectChar attribute=\"Region Marker\" context=\"sub_definition\" char=\"{\" beginRegion=\"sub_block\" />\n      </context>\n      <context name=\"sub_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"regular_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"sub_block\" />\n      </context>\n      <context name=\"condition_part\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Condition Keyword\" context=\"#stay\" String=\"vclConditionalKeywords\" />\n        <DetectChar attribute=\"Region Marker\" context=\"conditional_expression\" char=\"(\" beginRegion=\"conditional_expression_block\" />\n        <DetectChar attribute=\"Region Marker\" context=\"conditional_block\" char=\"{\" beginRegion=\"conditional_blockregion\" />\n      </context>\n      <context name=\"conditional_expression\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"basic_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"conditional_expression\" char=\"(\" beginRegion=\"conditional_expression_block\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop\" char=\")\" endRegion=\"conditional_expression_block\" />\n      </context>\n      <context name=\"conditional_block\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"regular_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"conditional_blockregion\" />\n      </context>\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context name=\"probe_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectChar   attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n        <DetectChar attribute=\"Region Marker\" context=\"probe_definition\" char=\"{\" beginRegion=\"probe_block\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n      </context>\n      <context name=\"probe_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Probe Property\" context=\"#stay\" String=\"\\.(url|request|window|threshold|initial|expected_response|interval|timeout)\" />\n        <IncludeRules context=\"definition_code\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"probe_block\" />\n      </context>\n      <context name=\"backend_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"=\" />\n        <DetectChar attribute=\"Region Marker\" context=\"backend_definition\" char=\"{\" beginRegion=\"backend_block\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n      </context>\n      <context name=\"backend_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Backend Property\" context=\"#stay\" String=\"\\.(host|port|host_header|connect_timeout|first_byte_timeout|between_bytes_timeout|max_connections)\" />\n        <IncludeRules context=\"definition_code\" />\n        <StringDetect attribute=\"Backend Property\" context=\"probe_declaration\" String=\".probe\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"backend_block\" />\n      </context>\n      <context name=\"director_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectSpaces />\n        <keyword      attribute=\"Director Type\" String=\"vclDirectorTypes\" />\n        <StringDetect attribute=\"Director Type\" String=\"round-robin\" />\n        <DetectChar attribute=\"Region Marker\" context=\"director_definition\" char=\"{\" beginRegion=\"director_block\" />\n      </context>\n      <context name=\"director_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"definition_code\" />\n        <RegExpr attribute=\"Director Property\" context=\"#stay\" String=\"\\.(retries|ttl|suffix)\" />\n        <StringDetect attribute=\"Director Property\" context=\"backend_declaration\" String=\".list\" />\n        <DetectChar attribute=\"Region Marker\" context=\"director_backend\" char=\"{\" beginRegion=\"director_backend_block\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"backend_block\" />\n      </context>\n      <context name=\"director_backend\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"definition_code\" />\n        <RegExpr attribute=\"Director Property\" context=\"#stay\" String=\"\\.(weight|suffix)\" />\n        <StringDetect attribute=\"Director Property\" context=\"backend_declaration\" String=\".backend\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop\" char=\"}\" endRegion=\"director_backend_block\" />\n      </context>\n      <context name=\"acl_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"acl_definition\" char=\"{\" beginRegion=\"acl_block\" />\n      </context>\n      <context name=\"acl_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"minimal_code\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"#stay\" char=\"!\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"#stay\" char=\"/\" />\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"acl_block\" />\n      </context>\n      <context name=\"import_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Well-known VMod\" context=\"import_identified\" String=\"knownVMods\" />\n        <DetectIdentifier attribute=\"VMod Identifier\" context=\"import_identified\" />\n      </context>\n      <context name=\"import_identified\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\";\" />\n        <StringDetect attribute=\"Keyword\" context=\"import_from\" String=\"from\" />\n      </context>\n      <context name=\"import_from\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"import_from_path\" attribute=\"String\" />\n      </context>\n      <context name=\"import_from_path\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"import_from_path_complete\" attribute=\"String\" />\n      </context>\n      <context name=\"import_from_path_complete\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop#pop#pop\" char=\";\" />\n      </context>\n      <context name=\"include_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"include_path\" attribute=\"String\" />\n      </context>\n      <context name=\"include_path\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"include_path_complete\" attribute=\"String\" />\n      </context>\n      <context name=\"include_path_complete\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop#pop#pop\" char=\";\" />\n      </context>\n      <context name=\"version_declaration\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Condition Keyword\"         defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Action Keyword\"            defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Variable\"                  defStyleNum=\"dsVariable\" />\n      <itemData name=\"Director Type\"             defStyleNum=\"dsDataType\" />\n      <itemData name=\"Standard VCL Function\"     defStyleNum=\"dsFunction\" />\n      <itemData name=\"Standard VCL Sub\"          defStyleNum=\"dsFunction\" bold=\"1\" />\n      <itemData name=\"Operator\"                  defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Comparison Operator\"       defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Arithmetic Operator\"       defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Logical Operator\"          defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"String\"                    defStyleNum=\"dsString\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Region Marker\"             defStyleNum=\"dsNormal\" />\n      <itemData name=\"Probe Property\"            defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Backend Property\"          defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Director Property\"         defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Storage\"                   defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"TCP Property\"              defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"HTTP Property\"             defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP Header\"               defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP X- Header\"            defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"Decimal\"                   defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Duration\"                  defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Data Size\"                 defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Float\"                     defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"VMod Identifier\"           defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" />\n      <itemData name=\"Well-known VMod\"           defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"1\" />\n      <itemData name=\"Known VMod Function\"       defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/varnishcc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Varnish 3 module spec file\" version=\"2\" kateversion=\"3.4\" section=\"Sources\" extensions=\"*.vcc;\" mimetype=\"\" author=\"Xavier Guerrin (xavier@tuxfamily.org)\" license=\"WTFPL\" priority=\"3\">\n  <highlighting>\n    <!-- Extracted from the \"ctypes\" hash in lib/libvmod_std/vmod.py -->\n    <list name=\"VCC C Types\">\n      <item>BACKEND</item>\n      <item>BOOL</item>\n      <item>DURATION</item>\n      <item>HEADER</item>\n      <item>INT</item>\n      <item>IP</item>\n      <item>PRIV_CALL</item>\n      <item>PRIV_VCL</item>\n      <item>REAL</item>\n      <item>STRING</item>\n      <item>STRING_LIST</item>\n      <item>TIME</item>\n      <item>VOID</item>\n    </list>\n    <contexts>\n      <!-- Default context: define main keywords. -->\n      <context name=\"vccnormal_text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"module_declaration\"   String=\"Module\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"init_declaration\"     String=\"Init\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"function_declaration\" String=\"Function\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- Contexts for comments. -->\n      <context name=\"comments\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectChar char=\"#\" context=\"shell-like-comment\" attribute=\"Comment\" />\n      </context>\n      <context name=\"shell-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <!-- Contexts for the \"Module\" keyword. -->\n      <context name=\"module_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"VMod Identifier\" context=\"#stay\" String=\"[a-z][a-z0-9_]*$\" />\n      </context>\n\n      <!-- Contexts for the \"Init\" keyword. -->\n      <context name=\"init_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Function Identifier\" context=\"#stay\" String=\"[a-z][a-z0-9_]*$\" />\n      </context>\n\n      <!-- Contexts for the \"Function\" keyword. -->\n      <context name=\"function_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Data Type\" String=\"VCC C Types\" context=\"return_type_declared\" />\n      </context>\n      <context name=\"return_type_declared\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Function Identifier\" context=\"function_name_declared\" String=\"[a-z][a-z0-9_]*\" />\n      </context>\n      <context name=\"function_name_declared\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\"(\" context=\"function_arg_type_expected\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"function_arg_type_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Data Type\" String=\"VCC C Types\" context=\"function_comma_expected\" />\n        <StringDetect String=\"ENUM\" context=\"enum\" attribute=\"Data Type\" />\n        <DetectChar char=\")\" context=\"function_end\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"function_comma_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\",\" context=\"function_arg_type_expected\" attribute=\"Normal Text\" />\n        <DetectChar char=\")\" context=\"function_end\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"function_end\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n      </context>\n\n      <!-- Contexts for enums. -->\n      <context name=\"enum\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\"{\" context=\"enum_c_name_expected\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"enum_c_name_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Symbol\" context=\"enum_comma_expected\" String=\"[a-z][a-z0-9_]*\" />\n        <DetectChar char=\"}\" context=\"function_comma_expected\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"enum_comma_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\",\" context=\"enum_c_name_expected\" attribute=\"Normal Text\" />\n        <DetectChar char=\"}\" context=\"function_comma_expected\" attribute=\"Normal Text\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Data Type\"                 defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"VMod Identifier\"           defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" />\n      <itemData name=\"Function Identifier\"       defStyleNum=\"dsFunction\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n      <itemData name=\"Symbol\"                    defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/varnishcc4.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Varnish 4 module spec file\" version=\"1\" kateversion=\"3.4\" section=\"Sources\" extensions=\"*.vcc;\" mimetype=\"\" author=\"Xavier Guerrin (xavier@tuxfamily.org)\" license=\"WTFPL\" priority=\"4\">\n  <highlighting>\n    <!-- Extracted from the \"ctypes\" hash in lib/libvmod_std/vmod.py -->\n    <list name=\"VCC C Types\">\n      <item>BACKEND</item>\n      <item>BLOB</item>\n      <item>BOOL</item>\n      <item>BYTES</item>\n      <item>DURATION</item>\n      <item>HEADER</item>\n      <item>HTTP</item>\n      <item>INT</item>\n      <item>IP</item>\n      <item>PRIV_CALL</item>\n      <item>PRIV_VCL</item>\n      <item>REAL</item>\n      <item>STRING</item>\n      <item>STRING_LIST</item>\n      <item>TIME</item>\n      <item>VOID</item>\n    </list>\n    <contexts>\n      <!-- Default context: define main keywords. -->\n      <context name=\"vccnormal_text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"##reStructuredText\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"module_declaration\"   String=\"$Module\"   endRegion=\"vcc_block\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"init_declaration\"     String=\"$Init\"     endRegion=\"vcc_block\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"function_declaration\" String=\"$Function\" endRegion=\"vcc_block\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"object_declaration\"   String=\"$Object\"   endRegion=\"vcc_block\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"method_declaration\"   String=\"$Method\"   endRegion=\"vcc_block\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- Contexts for comments. -->\n      <context name=\"comments\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectChar char=\"#\" context=\"shell-like-comment\" attribute=\"Comment\" />\n      </context>\n      <context name=\"shell-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <!-- Contexts for the \"$Module\" keyword. -->\n      <context name=\"module_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"VMod Identifier\" context=\"module_section_expected\" String=\"[a-zA-Z][a-zA-Z0-9_]*\" />\n      </context>\n      <context name=\"module_section_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"module_fullname_expected\" />\n      </context>\n      <context name=\"module_fullname_expected\" attribute=\"String\" lineEndContext=\"#pop\">\n      </context>\n\n      <!-- Contexts for the \"$Init\" keyword. -->\n      <context name=\"init_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Function Identifier\" context=\"#stay\" String=\"[a-zA-Z][a-zA-Z0-9_]*$\" />\n      </context>\n\n      <!-- Contexts for the \"$Function\" keyword. -->\n      <context name=\"function_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Data Type\" String=\"VCC C Types\" context=\"return_type_declared\" />\n      </context>\n      <context name=\"return_type_declared\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Function Identifier\" context=\"function_name_declared\" String=\"[a-zA-Z][a-zA-Z0-9_]*\" />\n      </context>\n      <context name=\"function_name_declared\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\"(\" context=\"function_arg_type_expected\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"function_arg_type_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Data Type\" String=\"VCC C Types\" context=\"function_comma_expected\" />\n        <StringDetect String=\"ENUM\" context=\"enum\" attribute=\"Data Type\" />\n        <DetectChar char=\")\" context=\"function_end\" attribute=\"Normal Text\" beginRegion=\"vcc_block\" />\n      </context>\n      <context name=\"function_comma_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\",\" context=\"function_arg_type_expected\" attribute=\"Normal Text\" />\n        <DetectChar char=\")\" context=\"function_end\" attribute=\"Normal Text\" beginRegion=\"vcc_block\" />\n      </context>\n      <context name=\"function_end\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n      </context>\n\n      <!-- Contexts for the \"$Object\" keyword. -->\n      <context name=\"object_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- Parse $Object as a $Function which does not need to state a return type -->\n        <IncludeRules context=\"return_type_declared\" />\n      </context>\n\n      <!-- Contexts for the \"$Method\" keyword. -->\n      <context name=\"method_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"Data Type\" String=\"VCC C Types\" context=\"method_return_type_declared\" />\n      </context>\n      <context name=\"method_return_type_declared\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Function Identifier\" context=\"function_name_declared\" String=\"\\.[a-zA-Z][a-zA-Z0-9_]*\" />\n      </context>\n\n      <!-- Contexts for enums. -->\n      <context name=\"enum\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\"{\" context=\"enum_c_name_expected\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"enum_c_name_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Symbol\" context=\"enum_comma_expected\" String=\"[a-z][a-z0-9_]*\" />\n        <DetectChar char=\"}\" context=\"function_comma_expected\" attribute=\"Normal Text\" />\n      </context>\n      <context name=\"enum_comma_expected\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar char=\",\" context=\"enum_c_name_expected\" attribute=\"Normal Text\" />\n        <DetectChar char=\"}\" context=\"function_comma_expected\" attribute=\"Normal Text\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Data Type\"                 defStyleNum=\"dsDataType\" spellChecking=\"false\"/>\n      <itemData name=\"Decimal\"                   defStyleNum=\"dsDecVal\" spellChecking=\"false\"/>\n      <itemData name=\"String\"                    defStyleNum=\"dsString\"/>\n      <itemData name=\"VMod Identifier\"           defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" />\n      <itemData name=\"Function Identifier\"       defStyleNum=\"dsFunction\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n      <itemData name=\"Symbol\"                    defStyleNum=\"dsNormal\" spellChecking=\"false\"/>\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/varnishtest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Varnish Test Case language\" version=\"4\" kateversion=\"3.4\" section=\"Configuration\" extensions=\"*.vtc;\" mimetype=\"\" author=\"Xavier Guerrin (xavier@tuxfamily.org)\" license=\"WTFPL\" priority=\"3\">\n  <highlighting>\n    <contexts>\n      <!-- default context: define main keywords -->\n      <context name=\"vtcnormal_text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"global_directives_restricted\" />\n        <IncludeRules context=\"global_directives\" />\n      </context>\n\n      <!-- directives that can be encountered at global scope but not within a loop -->\n      <context name=\"global_directives_restricted\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"varnishtest_declaration\" String=\"varnishtest\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"feature_instruction\"     String=\"feature\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\"     String=\"^\\s*random\\s*$\" />\n      </context>\n\n      <!-- directives that can be encountered at global scope, either directly or within a loop  -->\n      <context name=\"global_directives\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"client_declaration\"      String=\"client\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"server_declaration\"      String=\"server\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"varnish_declaration\"     String=\"varnish\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"sema_instruction\"        String=\"sema\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"shell_instruction\"       String=\"shell\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"delay_instruction\"       String=\"delay\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"global_loop_instruction\" String=\"loop\" />\n      </context>\n\n      <!-- Strings delimited with double quotes -->\n      <context name=\"strings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"string\" attribute=\"String\" />\n      </context>\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n\n      <!-- The following contexts (quoted-, brace- and unquoted- strings) make their parent pop as soon as they parsed a string. -->\n      <context name=\"quoted-strings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"quoted-string\" attribute=\"String\" />\n      </context>\n      <context name=\"quoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"#pop#pop\" char=\"&quot;\" />\n      </context>\n\n      <context name=\"brace-strings\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"brace-string\" char=\"{\" beginRegion=\"string_block\" />\n      </context>\n      <context name=\"brace-string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <!--\n          strings delimited with braces do not require to escape closing braces;\n          therefore, we have to use an extra context to keep track of opening and closing braces\n        -->\n        <DetectChar attribute=\"String\" context=\"brace-string-internal\" char=\"{\" />\n        <DetectChar attribute=\"String\" context=\"#pop#pop\" char=\"}\" endRegion=\"string_block\" />\n      </context>\n      <context name=\"brace-string-internal\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"}\" />\n      </context>\n\n      <context name=\"unquoted-strings\" attribute=\"String\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"String\" context=\"unquoted-string\" String=\"[^ ]\" />\n      </context>\n      <context name=\"unquoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <RegExpr attribute=\"Normal Text\" context=\"#pop#pop\" String=\"\\s\" />\n      </context>\n\n      <!-- This context exits as soon as it parsed a string, be it defined between braces, quotes or spaces -->\n      <context name=\"string-arg\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"HTTP announce\"        context=\"#pop\" String=\"HTTP/[0-9.]+\" />\n        <RegExpr attribute=\"HTTP method\"          context=\"#pop\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP WebDAV method\"   context=\"#pop\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP custom method\"   context=\"#pop\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <IncludeRules context=\"brace-strings\" />\n        <IncludeRules context=\"quoted-strings\" />\n        <IncludeRules context=\"unquoted-strings\" />\n      </context>\n\n      <!-- This context exits as soon as it parsed an integer. -->\n      <context name=\"int-arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"#pop\" />\n      </context>\n\n      <!-- This context exits as soon as it parsed a status integer. -->\n      <context name=\"status-arg\" attribute=\"String\" lineEndContext=\"#pop\">\n        <!-- HTTP status can be provided within quotes too. -->\n        <RegExpr attribute=\"Decimal\" context=\"#pop\" String=\"(&quot;[12345][0-9]{2}&quot;|[12345][0-9]{2})(?![0-9])\" />\n      </context>\n\n      <!-- Comments -->\n      <context name=\"shell-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n      <context name=\"comments\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectChar   char=\"#\" context=\"shell-like-comment\" attribute=\"Comment\" />\n      </context>\n\n      <!-- Define base elements that used within various contexts -->\n      <context name=\"base_elements\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"HTTP announce\"        context=\"#stay\" String=\"HTTP/[0-9.]+\" />\n        <RegExpr attribute=\"HTTP method\"          context=\"#stay\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP WebDAV method\"   context=\"#stay\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP custom method\"   context=\"#stay\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <IncludeRules context=\"strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!--\n        Define syntax of the -expect command for server and client objects.\n        Written from cmd_http_expect() in bin/varnishtest/vtc_http.c.\n      -->\n      <context name=\"http_expectation\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n        <RegExpr    attribute=\"Float\"                context=\"http_expectation_operator\" String=\"[0-9\\.]+(\\s+|$)\" />\n        <RegExpr    attribute=\"Decimal\"              context=\"http_expectation_operator\" String=\"[0-9]+(\\s+|$)\" />\n        <StringDetect attribute=\"Keyword\"              context=\"http_expectation_operator\" String=\"&lt;undef&gt;\" />\n        <!-- Written from cmd_var_resolve() in bin/varnishtest/vtc_http.c. -->\n        <RegExpr    attribute=\"HTTP Property\"        context=\"http_expectation_operator\" String=\"req.(request|url|proto)\" />\n        <RegExpr    attribute=\"HTTP Property\"        context=\"http_expectation_operator\" String=\"resp.(proto|status|msg|chunklen|bodylen|body)\" />\n        <RegExpr    attribute=\"HTTP X- Header\"       context=\"http_expectation_operator\" String=\"(req|resp)\\.http\\.X-[-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP Header\"          context=\"http_expectation_operator\" String=\"(req|resp)\\.http\\.[A-Za-z][-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP announce\"        context=\"http_expectation_operator\" String=\"HTTP/[0-9.]+\" />\n        <RegExpr    attribute=\"HTTP method\"          context=\"http_expectation_operator\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP WebDAV method\"   context=\"http_expectation_operator\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP custom method\"   context=\"http_expectation_operator\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <DetectChar attribute=\"String\"               context=\"http_expectation_arg1_brace-string\" char=\"{\" beginRegion=\"string_block\" />\n        <DetectChar attribute=\"String\"               context=\"http_expectation_arg1_quoted-string\" char=\"&quot;\" />\n        <RegExpr    attribute=\"Normal Text\"          context=\"http_expectation_arg1_unquoted-string\" String=\"[^ ]\" lookAhead=\"true\" />\n      </context>\n      <context name=\"http_expectation_operator\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <IncludeRules context=\"comments\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"=\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"!\" char1=\"=\" />\n      </context>\n      <context name=\"common_expectation_second_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop\">\n        <IncludeRules context=\"comments\" />\n        <RegExpr    attribute=\"Float\"                context=\"common_expectation_end\" String=\"[0-9\\.]+(\\s+|$)\" />\n        <RegExpr    attribute=\"Decimal\"              context=\"common_expectation_end\" String=\"[0-9]+(\\s+|$)\" />\n        <StringDetect attribute=\"Keyword\"              context=\"common_expectation_end\" String=\"&lt;undef&gt;\" />\n        <!-- Written from cmd_var_resolve() in bin/varnishtest/vtc_http.c. -->\n        <RegExpr    attribute=\"HTTP Property\"        context=\"common_expectation_end\" String=\"req.(request|url|proto)\" />\n        <RegExpr    attribute=\"HTTP Property\"        context=\"common_expectation_end\" String=\"resp.(proto|status|msg|chunklen|bodylen|body)\" />\n        <RegExpr    attribute=\"HTTP X- Header\"       context=\"common_expectation_end\" String=\"(req|resp)\\.http\\.X-[-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP Header\"          context=\"common_expectation_end\" String=\"(req|resp)\\.http\\.[A-Za-z][-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP announce\"        context=\"common_expectation_end\" String=\"HTTP/[0-9.]+\" />\n        <RegExpr    attribute=\"HTTP method\"          context=\"common_expectation_end\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP WebDAV method\"   context=\"common_expectation_end\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP custom method\"   context=\"common_expectation_end\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <DetectChar attribute=\"String\"               context=\"common_expectation_arg2_brace-string\" char=\"{\" beginRegion=\"string_block\" />\n        <DetectChar attribute=\"String\"               context=\"common_expectation_arg2_quoted-string\" char=\"&quot;\" />\n        <RegExpr    attribute=\"Normal Text\"          context=\"common_expectation_arg2_unquoted-string\" String=\"[^ ]\" lookAhead=\"true\" />\n      </context>\n      <context name=\"common_expectation_end\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- Contexts to parse first argument of server/client expectations as a string -->\n      <context name=\"http_expectation_arg1_brace-string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"brace-string-internal\" char=\"{\" />\n        <DetectChar attribute=\"String\" context=\"http_expectation_operator\" char=\"}\" endRegion=\"string_block\" />\n      </context>\n      <context name=\"http_expectation_arg1_quoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar   attribute=\"String\" context=\"http_expectation_operator\" char=\"&quot;\" />\n      </context>\n      <context name=\"http_expectation_arg1_unquoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <RegExpr attribute=\"Normal Text\" context=\"http_expectation_operator\" String=\"\\s\" />\n      </context>\n\n      <!-- Contexts to parse second argument of all expectations as a string -->\n      <context name=\"common_expectation_arg2_brace-string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"brace-string-internal\" char=\"{\" />\n        <DetectChar attribute=\"String\" context=\"common_expectation_end\" char=\"}\" endRegion=\"string_block\" />\n      </context>\n      <context name=\"common_expectation_arg2_quoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar   attribute=\"String\" context=\"common_expectation_end\" char=\"&quot;\" />\n      </context>\n      <context name=\"common_expectation_arg2_unquoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <RegExpr attribute=\"Normal Text\" context=\"common_expectation_end\" String=\"\\s\" />\n      </context>\n\n      <!--\n        Define syntax of the -expect command for varnish objects.\n        Written from varnish_expect() in bin/varnishtest/vtc_varnish.c\n      -->\n      <context name=\"varnish_expectation\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- Varnish's expect takes a Varnish counter as first argument. -->\n        <IncludeRules context=\"comments\" />\n        <!-- Mostly extracted using man 7 varnish-counters | grep - - - | grep _ | sort -->\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"(?:accept_fail|losthdr|uptime|vmods)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"backend_(?:busy|conn|fail|recycle|req|retry|reuse|toolate|unhealthy)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"cache_(?:hit(pass)?|miss)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"client_(?:conn|drop_late|drop|req)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"dir_dns_(?:cache_full|failed|hit|lookups)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"esi_(?:errors|warnings)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"fetch_(?:1xx|204|304|bad|chunked|close|eof|failed|head|length|oldhttp|zero)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"hcb_(?:insert|lock|nolock)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"n_(?:backend|ban_(?:add|dups|gone|obj_test|re_test|retire)|ban|expired|gunzip|gzip|lru_moved|lru_nuked|object|objectcore|objecthead|objoverflow|objsendfile|objwrite|sess_mem|sess|vampireobject|vbc|vcl_avail|vcl_discard|vcl|waitinglist|wrk_(?:create|drop|failed|lqueue|max|queued)|wrk)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"s_(?:fetch|pass|pipe|req|(?:body|hdr)bytes|sess)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"sess_(?:closed|herd|linger|pipe_overflow|pipeline|readahead)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"shm_(?:cont|cycles|flushes|records|writes)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"LCK\\.(?:sm[spaf]|hsl|hcb|hcl|vcl|stat|sessmem|wstat|herder|wq|objhdr|exp|lru|cli|ban|vbp|vbe|backend)\\.(?:creat|destroy|locks|colls)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"SMA\\.[a-zA-Z0-9_-]+\\.(?:c_(?:req|fail|bytes|freed)|g_(?:alloc|bytes|space))\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"SMF\\.[a-zA-Z0-9_-]+\\.(?:c_(?:req|fail|bytes|freed)|g_(?:alloc|bytes|space|smf|smf_frag|smf_large))\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"VBE\\..+\\.(?:happy|vcls)\" />\n      </context>\n      <context name=\"varnish_expectation_operator\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <IncludeRules context=\"comments\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"=\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"!\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&gt;\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&lt;\" char1=\"=\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&gt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&lt;\" />\n        <!-- Varnish's expect does not handle the ~ and !~ operators -->\n      </context>\n      <context name=\"varnish_expectation_second_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- Varnish's expect takes an unsigned integer as second argument. -->\n        <Int attribute=\"Decimal\" context=\"common_expectation_end\" />\n      </context>\n\n      <!-- Define macros -->\n      <context name=\"macro_accepted\" attribute=\"String\" lineEndContext=\"#pop\">\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"String\" context=\"macro_identifier\" />\n      </context>\n      <context name=\"macro_identifier\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"String\" context=\"#pop\" />\n      </context>\n\n      <!-- Define syntax for main keywords' options -->\n      <context name=\"common_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"macro_accepted\" />\n        <IncludeRules context=\"base_elements\" />\n      </context>\n\n      <context name=\"client_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- Extracted from bin/varnishtest/vtc_client.c  -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\-(?:run|start|wait)\" />\n        <StringDetect attribute=\"Keyword\" context=\"int-arg\" String=\"-repeat\" />\n        <StringDetect attribute=\"Keyword\" context=\"string-arg\" String=\"-connect\" />\n        <StringDetect attribute=\"Keyword\" context=\"http_expectation\" String=\"-expect\" />\n        <IncludeRules context=\"common_options\" />\n      </context>\n\n      <context name=\"server_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <!-- Extracted from bin/varnishtest/vtc_server.c  -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\-(?:start|wait)\" />\n        <StringDetect attribute=\"Keyword\" context=\"int-arg\" String=\"-repeat\" />\n        <StringDetect attribute=\"Keyword\" context=\"string-arg\" String=\"-listen \" />\n        <StringDetect attribute=\"Keyword\" context=\"http_expectation\" String=\"-expect\" />\n        <IncludeRules context=\"common_options\" />\n      </context>\n\n      <context name=\"varnish_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <!-- Extracted from bin/varnishtest/vtc_varnish.c  -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\-(?:start|stop|wait|wait-running|wait-stopped)\" />\n        <RegExpr attribute=\"Keyword\" context=\"string-arg\" String=\"\\-(?:arg|cli|cliok|storage) \" />\n        <StringDetect attribute=\"Keyword\" context=\"clierr_options\" String=\"-clierr \" />\n        <StringDetect attribute=\"Keyword\" context=\"varnish_expectation\" String=\"-expect\" />\n        <IncludeRules context=\"common_options\" />\n      </context>\n\n      <context name=\"clierr_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- unlike clikok, clierr requires an integer argument first -->\n        <Int attribute=\"Decimal\" context=\"clierr_command\" />\n        <!-- It seems that integer can be provided within quotes though. -->\n        <RegExpr attribute=\"Decimal\" context=\"clierr_command\" String=\"&quot;[0-9]+&quot; \" />\n        <IncludeRules context=\"comments\" />\n      </context>\n      <context name=\"clierr_command\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <context name=\"tx_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- Define syntax for the client-specific txreq keyword -->\n      <context name=\"txreq_options\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"tx_options\" />\n        <RegExpr attribute=\"TxReq Keyword\" context=\"string-arg\" String=\"\\-(?:proto|req|url|hdr|body)\" />\n        <StringDetect attribute=\"TxReq Keyword\" context=\"int-arg\" String=\"-bodylen\" />\n      </context>\n\n      <!-- Define syntax for the server-specific txresp keyword -->\n      <context name=\"txresp_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"tx_options\" />\n        <StringDetect attribute=\"TxResp Keyword\" String=\"-nolen\" />\n        <RegExpr attribute=\"TxResp Keyword\" context=\"int-arg\" String=\"\\-(?:bodylen|gzip(?:len|residual|level))\" />\n        <RegExpr attribute=\"TxResp Keyword\" context=\"string-arg\" String=\"\\-(?:body|gzipbody|hdr|msg|proto)\" />\n        <StringDetect attribute=\"TxResp Keyword\" context=\"status-arg\" String=\"-status\" />\n      </context>\n\n      <!-- Define syntax for the client-specific rxresp keyword -->\n      <context name=\"rxresp_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n        <StringDetect attribute=\"RxResp Keyword\" String=\"-no_obj\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- varnishtest keyword -->\n      <context name=\"varnishtest_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- client/server HTTP commands -->\n      <context name=\"clientserver_common_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <!-- Extracted using:\n            perl -nlE '$p = 1 if m#http_cmds\\[\\]#; say if ($p); exit if ($p && m#^\\}#);' vtc_http.c\n            egrep '(^cmd_http_|^\\s*ONLY_(CLIENT|SERVER))' bin/varnishtest/vtc_http.c\n        -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"timeout_instruction\"     String=\"timeout\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"expect_close\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"http_expectation\"        String=\"expect\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"send_instruction\"        String=\"sendhex\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"send_instruction\"        String=\"send\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"chunkedlen_instruction\"  String=\"chunkedlen\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"send_instruction\"        String=\"chunked\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"delay_instruction\"       String=\"delay\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"sema_instruction\"        String=\"sema\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"close\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"accept\" />\n        <!-- loop is not there as its parsing changes depending on server or client. -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"fatal\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"non-fatal\" />\n      </context>\n\n      <!-- client keyword -->\n      <context name=\"client_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Client Identifier\" context=\"client_identified\" />\n      </context>\n      <context name=\"client_identified\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"client_options\" />\n        <DetectChar attribute=\"Region Marker\" context=\"client_definition\" char=\"{\" beginRegion=\"client_block\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"client_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"clientserver_common_definition\" />\n        <!-- client-specific HTTP commands -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"gunzip\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"txreq_options\"           String=\"txreq\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"rxresp_options\"          String=\"rxresp\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxchunk\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"client_loop_instruction\" String=\"loop\" />\n        <DetectChar attribute=\"Region Marker\" context=\"client_postdefinition\" char=\"}\" endRegion=\"client_block\" />\n      </context>\n      <context name=\"client_postdefinition\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <IncludeRules context=\"client_options\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- server keyword -->\n      <context name=\"server_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Server Identifier\" context=\"server_identified\" />\n      </context>\n      <context name=\"server_identified\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"server_options\" />\n        <DetectChar attribute=\"Region Marker\" context=\"server_definition\" char=\"{\" beginRegion=\"server_block\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"server_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"clientserver_common_definition\" />\n        <!-- server-specific HTTP commands -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxhdrs\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxreq\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxbody\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"txresp_options\"          String=\"txresp\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"server_loop_instruction\" String=\"loop\" />\n        <DetectChar attribute=\"Region Marker\" context=\"server_postdefinition\" char=\"}\" endRegion=\"server_block\" />\n      </context>\n      <context name=\"server_postdefinition\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <IncludeRules context=\"server_options\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- varnish keyword -->\n      <context name=\"varnish_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Varnish Identifier\" context=\"varnish_identified\" />\n      </context>\n      <context name=\"varnish_identified\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"varnish_options\" />\n        <RegExpr attribute=\"Keyword\" context=\"varnish_vclannounced\" String=\"\\s*\\-vcl(?:\\+backend)?\" />\n        <RegExpr attribute=\"Keyword\" context=\"varnish_errvclannounced\" String=\"\\s*\\-badvcl\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"varnish_vclannounced\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_vcldefinition\" char=\"{\" beginRegion=\"varnish_block\" />\n      </context>\n      <context name=\"varnish_vcldefinition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"##Varnish Configuration Language\" />\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_postvcldefinition\" char=\"}\" endRegion=\"varnish_block\" />\n      </context>\n      <context name=\"varnish_postvcldefinition\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop#pop\">\n        <IncludeRules context=\"varnish_options\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"varnish_errvclannounced\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"varnish_errvclcode-quoted\" char=\"&quot;\" />\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_errvclcode\" char=\"{\" beginRegion=\"errvclcode_block\" />\n      </context>\n      <context name=\"varnish_errvclcode-quoted\" attribute=\"String\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"varnish_postvcldefinition\" char=\"&quot;\" />\n      </context>\n      <context name=\"varnish_errvclcode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"varnish_errvclcode-internal\" char=\"{\" />\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_postvcldefinition\" char=\"}\" endRegion=\"errvclcode_block\" />\n      </context>\n      <context name=\"varnish_errvclcode-internal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"varnish_errvclcode-internal\" char=\"{\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" />\n      </context>\n\n      <!-- sema keyword -->\n      <context name=\"sema_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Sema Identifier\" context=\"sema_identified\" />\n      </context>\n      <context name=\"sema_identified\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <StringDetect attribute=\"Keyword\" String=\"sync\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- delay keyword -->\n      <context name=\"delay_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- feature keyword -->\n      <context name=\"feature_instruction\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- chunkedlen keyword -->\n      <context name=\"chunkedlen_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- send / sendhex / chunk keywords -->\n      <context name=\"send_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"string-arg\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- timeout keyword -->\n      <context name=\"timeout_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"int-arg\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- loop keyword at global scope -->\n      <context name=\"global_loop_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Int attribute=\"Decimal\" context=\"global_loop_defined\" />\n      </context>\n      <context name=\"global_loop_defined\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"global_loop_code\" char=\"{\" beginRegion=\"loop_block\" />\n      </context>\n      <context name=\"global_loop_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"loop_block\" />\n        <IncludeRules context=\"global_directives\" />\n      </context>\n\n      <!-- loop keyword for client definitions -->\n      <context name=\"client_loop_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Int attribute=\"Decimal\" context=\"client_loop_defined\" />\n      </context>\n      <context name=\"client_loop_defined\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"client_loop_code\" char=\"{\" beginRegion=\"loop_block\" />\n      </context>\n      <context name=\"client_loop_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"loop_block\" />\n        <IncludeRules context=\"client_definition\" />\n      </context>\n\n      <!-- loop keyword for server definitions -->\n      <context name=\"server_loop_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Int attribute=\"Decimal\" context=\"server_loop_defined\" />\n      </context>\n      <context name=\"server_loop_defined\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"server_loop_code\" char=\"{\" beginRegion=\"loop_block\" />\n      </context>\n      <context name=\"server_loop_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"loop_block\" />\n        <IncludeRules context=\"server_definition\" />\n      </context>\n\n      <!-- shell keyword, one-line version -->\n      <context name=\"shell_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"shell_code\" char=\"{\" beginRegion=\"shell_block\" />\n        <IncludeRules context=\"quoted-strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n      <context name=\"shell_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"shell_block\" />\n        <!-- There does not seem to be a syntax highlighting dedicated to \"standard shell\" so let's use Bash instead -->\n        <IncludeRules context=\"##Bash\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n      <itemData name=\"TxReq Keyword\"             defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"TxResp Keyword\"            defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"RxResp Keyword\"            defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Action Keyword\"            defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Comparison Operator\"       defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"String\"                    defStyleNum=\"dsString\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Region Marker\"             defStyleNum=\"dsNormal\" />\n      <itemData name=\"HTTP Property\"             defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP Header\"               defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP X- Header\"            defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"HTTP announce\"             defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"HTTP method\"               defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"HTTP WebDAV method\"        defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"HTTP custom method\"        defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"VarnishStat metric\"        defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Decimal\"                   defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Float\"                     defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Client Identifier\"         defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n      <itemData name=\"Server Identifier\"         defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n      <itemData name=\"Varnish Identifier\"        defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n      <itemData name=\"Sema Identifier\"           defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/varnishtest4.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Varnish 4 Test Case language\" version=\"4\" kateversion=\"3.4\" section=\"Configuration\" extensions=\"*.vtc;\" mimetype=\"\" author=\"Xavier Guerrin (xavier@tuxfamily.org)\" license=\"WTFPL\" priority=\"4\">\n  <highlighting>\n    <list name=\"VSLGrouping\">\n      <!-- Extracted from lib/libvarnishapi/vsl_arg.c -->\n      <item>raw</item>\n      <item>vxid</item>\n      <item>request</item>\n      <item>session</item>\n    </list>\n    <list name=\"VSLTags\">\n      <!--\n        Extracted using:\n          perl -nlE 'push(@tags, $1) if m#^([^ ]+) - #; END { map { printf(\"      <item>%s</item>\\n\", $_); } @tags; }' lib/libvarnishapi/vsl-tags.rst\n      -->\n      <item>Backend</item>\n      <item>BackendClose</item>\n      <item>BackendOpen</item>\n      <item>BackendReuse</item>\n      <item>Backend_health</item>\n      <item>Begin</item>\n      <item>BereqAcct</item>\n      <item>BereqHeader</item>\n      <item>BereqMethod</item>\n      <item>BereqProtocol</item>\n      <item>BereqURL</item>\n      <item>BerespHeader</item>\n      <item>BerespProtocol</item>\n      <item>BerespReason</item>\n      <item>BerespStatus</item>\n      <item>BogoHeader</item>\n      <item>CLI</item>\n      <item>Debug</item>\n      <item>ESI_BodyBytes</item>\n      <item>ESI_xmlerror</item>\n      <item>End</item>\n      <item>Error</item>\n      <item>ExpBan</item>\n      <item>ExpKill</item>\n      <item>FetchError</item>\n      <item>Fetch_Body</item>\n      <item>Gzip</item>\n      <item>Hash</item>\n      <item>Hit</item>\n      <item>HitPass</item>\n      <item>HttpGarbage</item>\n      <item>Length</item>\n      <item>Link</item>\n      <item>LostHeader</item>\n      <item>ObjHeader</item>\n      <item>ObjProtocol</item>\n      <item>ObjReason</item>\n      <item>ObjStatus</item>\n      <item>PipeAcct</item>\n      <item>ReqAcct</item>\n      <item>ReqHeader</item>\n      <item>ReqMethod</item>\n      <item>ReqProtocol</item>\n      <item>ReqStart</item>\n      <item>ReqURL</item>\n      <item>RespHeader</item>\n      <item>RespProtocol</item>\n      <item>RespReason</item>\n      <item>RespStatus</item>\n      <item>SessClose</item>\n      <item>SessOpen</item>\n      <item>Storage</item>\n      <item>TTL</item>\n      <item>Timestamp</item>\n      <item>VCL_Error</item>\n      <item>VCL_Log</item>\n      <item>VCL_acl</item>\n      <item>VCL_call</item>\n      <item>VCL_return</item>\n      <item>VCL_trace</item>\n      <item>VSL</item>\n      <item>WorkThread</item>\n    </list>\n    <contexts>\n      <!-- default context: define main keywords -->\n      <context name=\"vtcnormal_text\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"global_directives_restricted\" />\n        <IncludeRules context=\"global_directives\" />\n      </context>\n\n      <!-- directives that can be encountered at global scope but not within a loop -->\n      <context name=\"global_directives_restricted\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"varnishtest_declaration\" String=\"varnishtest\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"feature_instruction\"     String=\"feature\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\"     String=\"^\\s*random\\s*$\" />\n      </context>\n\n      <!-- directives that can be encountered at global scope, either directly or within a loop  -->\n      <context name=\"global_directives\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"client_declaration\"      String=\"client\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"server_declaration\"      String=\"server\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"varnish_declaration\"     String=\"varnish\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"logexpect_declaration\"   String=\"logexpect\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"sema_instruction\"        String=\"sema\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"shell_instruction\"       String=\"shell\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"delay_instruction\"       String=\"delay\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Keyword\" context=\"global_loop_instruction\" String=\"loop\" />\n      </context>\n\n      <!-- Strings delimited with double quotes -->\n      <context name=\"strings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"string\" attribute=\"String\" />\n      </context>\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n\n      <!-- The following contexts (quoted-, brace- and unquoted- strings) make their parent pop as soon as they parsed a string. -->\n      <context name=\"quoted-strings\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"quoted-string\" attribute=\"String\" />\n      </context>\n      <context name=\"quoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"#pop#pop\" char=\"&quot;\" />\n      </context>\n\n      <context name=\"brace-strings\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"brace-string\" char=\"{\" beginRegion=\"string_block\" />\n      </context>\n      <context name=\"brace-string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <!--\n          strings delimited with braces do not require to escape closing braces;\n          therefore, we have to use an extra context to keep track of opening and closing braces\n        -->\n        <DetectChar attribute=\"String\" context=\"brace-string-internal\" char=\"{\" />\n        <DetectChar attribute=\"String\" context=\"#pop#pop\" char=\"}\" endRegion=\"string_block\" />\n      </context>\n      <context name=\"brace-string-internal\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"}\" />\n      </context>\n\n      <context name=\"unquoted-strings\" attribute=\"String\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"String\" context=\"unquoted-string\" String=\"[^ ]\" />\n      </context>\n      <context name=\"unquoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <RegExpr attribute=\"Normal Text\" context=\"#pop#pop\" String=\"\\s\" />\n      </context>\n\n      <!-- This context exits as soon as it parsed a string, be it defined between braces, quotes or spaces -->\n      <context name=\"string-arg\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"HTTP announce\"        context=\"#pop\" String=\"HTTP/[0-9.]+\" />\n        <RegExpr attribute=\"HTTP method\"          context=\"#pop\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP WebDAV method\"   context=\"#pop\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP custom method\"   context=\"#pop\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <IncludeRules context=\"brace-strings\" />\n        <IncludeRules context=\"quoted-strings\" />\n        <IncludeRules context=\"unquoted-strings\" />\n      </context>\n\n      <!-- This context exits as soon as it parsed an integer. -->\n      <context name=\"int-arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"#pop\" />\n      </context>\n\n      <!-- This context exits as soon as it parsed a status integer. -->\n      <context name=\"status-arg\" attribute=\"String\" lineEndContext=\"#pop\">\n        <!-- HTTP status can be provided within quotes too. -->\n        <RegExpr attribute=\"Decimal\" context=\"#pop\" String=\"(&quot;[12345][0-9]{2}&quot;|[12345][0-9]{2})(?![0-9])\" />\n      </context>\n\n      <!-- Comments -->\n      <context name=\"shell-like-comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n      <context name=\"comments\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <DetectChar   char=\"#\" context=\"shell-like-comment\" attribute=\"Comment\" />\n      </context>\n\n      <!-- Define base elements that used within various contexts -->\n      <context name=\"base_elements\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"HTTP announce\"        context=\"#stay\" String=\"HTTP/[0-9.]+\" />\n        <RegExpr attribute=\"HTTP method\"          context=\"#stay\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP WebDAV method\"   context=\"#stay\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr attribute=\"HTTP custom method\"   context=\"#stay\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <IncludeRules context=\"strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!--\n        Define syntax of the -expect command for server and client objects.\n        Written from cmd_http_expect() in bin/varnishtest/vtc_http.c.\n      -->\n      <context name=\"http_expectation\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n        <RegExpr    attribute=\"Float\"                context=\"http_expectation_operator\" String=\"[0-9\\.]+(\\s+|$)\" />\n        <RegExpr    attribute=\"Decimal\"              context=\"http_expectation_operator\" String=\"[0-9]+(\\s+|$)\" />\n        <StringDetect attribute=\"Keyword\"            context=\"http_expectation_operator\" String=\"&lt;undef&gt;\" />\n        <!-- Written from cmd_var_resolve() in bin/varnishtest/vtc_http.c. -->\n        <RegExpr    attribute=\"HTTP Property\"        context=\"http_expectation_operator\" String=\"req\\.(method|url|proto|bodylen)\" />\n        <RegExpr    attribute=\"HTTP Property\"        context=\"http_expectation_operator\" String=\"resp\\.(proto|status|msg|chunklen|bodylen|body)\" />\n        <RegExpr    attribute=\"HTTP X- Header\"       context=\"http_expectation_operator\" String=\"(req|resp)\\.http\\.X\\-[\\-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP Header\"          context=\"http_expectation_operator\" String=\"(req|resp)\\.http\\.[A-Za-z][\\-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP announce\"        context=\"http_expectation_operator\" String=\"HTTP/[0-9\\.]+\" />\n        <RegExpr    attribute=\"HTTP method\"          context=\"http_expectation_operator\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP WebDAV method\"   context=\"http_expectation_operator\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP custom method\"   context=\"http_expectation_operator\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <DetectChar attribute=\"String\"               context=\"http_expectation_arg1_brace-string\" char=\"{\" beginRegion=\"string_block\" />\n        <DetectChar attribute=\"String\"               context=\"http_expectation_arg1_quoted-string\" char=\"&quot;\" />\n        <RegExpr    attribute=\"Normal Text\"          context=\"http_expectation_arg1_unquoted-string\" String=\"[^ ]\" lookAhead=\"true\" />\n      </context>\n      <context name=\"http_expectation_operator\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <IncludeRules context=\"comments\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"=\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"!\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"&gt;\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"&lt;\" char1=\"=\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"&gt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"&lt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"~\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"common_expectation_second_arg\" char=\"!\" char1=\"~\" />\n      </context>\n      <context name=\"common_expectation_second_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop\">\n        <IncludeRules context=\"comments\" />\n        <RegExpr    attribute=\"Float\"                context=\"common_expectation_end\" String=\"[0-9\\.]+(\\s+|$)\" />\n        <RegExpr    attribute=\"Decimal\"              context=\"common_expectation_end\" String=\"[0-9]+(\\s+|$)\" />\n        <StringDetect attribute=\"Keyword\"            context=\"common_expectation_end\" String=\"&lt;undef&gt;\" />\n        <!-- Written from cmd_var_resolve() in bin/varnishtest/vtc_http.c. -->\n        <RegExpr    attribute=\"HTTP Property\"        context=\"common_expectation_end\" String=\"req\\.(method|url|proto|bodylen)\" />\n        <RegExpr    attribute=\"HTTP Property\"        context=\"common_expectation_end\" String=\"resp\\.(proto|status|msg|chunklen|bodylen|body)\" />\n        <RegExpr    attribute=\"HTTP X- Header\"       context=\"common_expectation_end\" String=\"(req|resp)\\.http\\.X\\-[\\-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP Header\"          context=\"common_expectation_end\" String=\"(req|resp)\\.http\\.[A-Za-z][\\-_A-Za-z0-9]*\" />\n        <RegExpr    attribute=\"HTTP announce\"        context=\"common_expectation_end\" String=\"HTTP/[0-9\\.]+\" />\n        <RegExpr    attribute=\"HTTP method\"          context=\"common_expectation_end\" String=\"\\s+(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP WebDAV method\"   context=\"common_expectation_end\" String=\"\\s+(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|CONNECT|PATCH)\" />\n        <RegExpr    attribute=\"HTTP custom method\"   context=\"common_expectation_end\" String=\"\\s+(PURGE|PURGESTR)\" />\n        <DetectChar attribute=\"String\"               context=\"common_expectation_arg2_brace-string\" char=\"{\" beginRegion=\"string_block\" />\n        <DetectChar attribute=\"String\"               context=\"common_expectation_arg2_quoted-string\" char=\"&quot;\" />\n        <RegExpr    attribute=\"Normal Text\"          context=\"common_expectation_arg2_unquoted-string\" String=\"[^ ]\" lookAhead=\"true\" />\n      </context>\n      <context name=\"common_expectation_end\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- Contexts to parse first argument of server/client expectations as a string -->\n      <context name=\"http_expectation_arg1_brace-string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"brace-string-internal\" char=\"{\" />\n        <DetectChar attribute=\"String\" context=\"http_expectation_operator\" char=\"}\" endRegion=\"string_block\" />\n      </context>\n      <context name=\"http_expectation_arg1_quoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar   attribute=\"String\" context=\"http_expectation_operator\" char=\"&quot;\" />\n      </context>\n      <context name=\"http_expectation_arg1_unquoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <RegExpr attribute=\"Normal Text\" context=\"http_expectation_operator\" String=\"\\s\" />\n      </context>\n\n      <!-- Contexts to parse second argument of all expectations as a string -->\n      <context name=\"common_expectation_arg2_brace-string\" attribute=\"String\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"brace-string-internal\" char=\"{\" />\n        <DetectChar attribute=\"String\" context=\"common_expectation_end\" char=\"}\" endRegion=\"string_block\" />\n      </context>\n      <context name=\"common_expectation_arg2_quoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar   attribute=\"String\" context=\"common_expectation_end\" char=\"&quot;\" />\n      </context>\n      <context name=\"common_expectation_arg2_unquoted-string\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <RegExpr attribute=\"Normal Text\" context=\"common_expectation_end\" String=\"\\s\" />\n      </context>\n\n      <!--\n        Define syntax of the -expect command for varnish objects.\n        Written from varnish_expect() in bin/varnishtest/vtc_varnish.c\n      -->\n      <context name=\"varnish_expectation\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- Varnish's expect takes a Varnish counter as first argument. -->\n        <IncludeRules context=\"comments\" />\n        <!-- Mostly extracted using man 7 varnish-counters | grep - - - | grep _ | sort -->\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"backend_(?:busy|conn|fail|recycle|req|retry|reuse|toolate|unhealthy)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"bans_(?:added|completed|deleted|dups|lurker_(?:contention|obj_killed|tested|tests_tested)|obj|obj_killed|persisted_(bytes|fragmentation)|req|tested|tests_tested)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"busy_(?:sleep|wakeup)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"cache_(?:hit(pass)?|miss)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"client_(?:req|req_4(?:00|11|13|17))\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"esi_(?:errors|warnings)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"exp_(?:mailed|received)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"fetch_(?:1xx|204|304|bad|chunked|close|eof|failed|head|length|oldhttp|zero)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"hcb_(?:insert|lock|nolock)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"n_(?:backend|expired|gunzip|gzip|lru_moved|lru_nuked|obj_purged|object|objectcore|objecthead|purges|vampireobject|vcl|vcl_avail|vcl_discard|waitinglist)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"s_(?:fetch|pass|pipe|pipe_(?:hdrbytes|in|out)|req|(req|resp)_(?:body|hdr)bytes|sess|synth)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"sess_(?:closed|conn|drop|dropped|fail|herd|pipe_overflow|pipeline|queued|readahead)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"shm_(?:cont|cycles|flushes|records|writes)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"sms_(?:balloc|bfree|nbytes|nobj|nreq)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"thread_(?:queue_len|created|destroyed|failed|limited)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"vsm_(?:cooling|free|overflow(ed)?|user)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"(?:bans|losthdr|pools|threads|uptime|vmods)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"LCK\\.(?:sm[spaf]|hsl|hcb|hcl|vcl|stat|sessmem|wstat|herder|wq|objhdr|exp|lru|cli|ban|vbp|vbe|backend)\\.(?:creat|destroy|locks)\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"SMA\\.[a-zA-Z0-9_\\-]+\\.(?:c_(?:req|fail|bytes|freed)|g_(?:alloc|bytes|space))\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"SMF\\.[a-zA-Z0-9_\\-]+\\.(?:c_(?:req|fail|bytes|freed)|g_(?:alloc|bytes|space|smf|smf_frag|smf_large))\" />\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"VBE\\..+\\.(?:happy|vcls|be(?:req|resp)_(?:body|hdr)bytes|pipe_(?:in|hdrbytes|out))\" />\n        <!-- Found out in c00050.vtc -->\n        <RegExpr attribute=\"VarnishStat metric\"    context=\"varnish_expectation_operator\" String=\"MEMPOOL\\.vbc\\.(?:pool|surplus|timeout)\" />\n      </context>\n      <context name=\"varnish_expectation_operator\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <IncludeRules context=\"comments\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"=\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"!\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&gt;\" char1=\"=\" />\n        <Detect2Chars attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&lt;\" char1=\"=\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&gt;\" />\n        <DetectChar   attribute=\"Comparison Operator\" context=\"varnish_expectation_second_arg\" char=\"&lt;\" />\n        <!-- Varnish's expect does not handle the ~ and !~ operators -->\n      </context>\n      <context name=\"varnish_expectation_second_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- Varnish's expect takes an unsigned integer as second argument. -->\n        <Int attribute=\"Decimal\" context=\"common_expectation_end\" />\n      </context>\n\n      <!-- Define macros -->\n      <context name=\"macro_accepted\" attribute=\"String\" lineEndContext=\"#pop\">\n        <Detect2Chars char=\"$\" char1=\"{\" attribute=\"String\" context=\"macro_identifier\" />\n      </context>\n      <context name=\"macro_identifier\" attribute=\"String\" lineEndContext=\"#pop#pop\">\n        <DetectChar char=\"}\" attribute=\"String\" context=\"#pop\" />\n      </context>\n\n      <!-- Define syntax for main keywords' options -->\n      <context name=\"common_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"macro_accepted\" />\n        <IncludeRules context=\"base_elements\" />\n      </context>\n\n      <context name=\"client_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <!-- Extracted from bin/varnishtest/vtc_client.c  -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\-(?:run|start|wait)\" />\n        <StringDetect attribute=\"Keyword\" context=\"int-arg\" String=\"-repeat\" />\n        <StringDetect attribute=\"Keyword\" context=\"string-arg\" String=\"-connect\" />\n        <StringDetect attribute=\"Keyword\" context=\"http_expectation\" String=\"-expect\" />\n        <IncludeRules context=\"common_options\" />\n      </context>\n\n      <context name=\"server_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <!-- Extracted from bin/varnishtest/vtc_server.c  -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\-(?:break|start|wait)\" />\n        <StringDetect attribute=\"Keyword\" context=\"int-arg\" String=\"-repeat\" />\n        <StringDetect attribute=\"Keyword\" context=\"string-arg\" String=\"-listen \" />\n        <StringDetect attribute=\"Keyword\" context=\"http_expectation\" String=\"-expect\" />\n        <IncludeRules context=\"common_options\" />\n      </context>\n\n      <context name=\"varnish_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <!-- Extracted from bin/varnishtest/vtc_varnish.c  -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\-(?:start|stop|wait|wait-running|wait-stopped)\" />\n        <RegExpr attribute=\"Keyword\" context=\"string-arg\" String=\"\\-(?:arg|cli|cliok|storage) \" />\n        <StringDetect attribute=\"Keyword\" context=\"clierr_options\" String=\"-clierr \" />\n        <StringDetect attribute=\"Keyword\" context=\"varnish_expectation\" String=\"-expect\" />\n        <IncludeRules context=\"common_options\" />\n      </context>\n\n      <context name=\"logexpect_options\" attribute=\"Normal Text\" lineEndContext=\"#stay\" >\n        <!-- Extracted from bin/varnishtest/vtc_logexp.c -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\-(?:start|run|wait)\" />\n      </context>\n\n      <context name=\"clierr_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <!-- unlike clikok, clierr requires an integer argument first -->\n        <Int attribute=\"Decimal\" context=\"clierr_command\" />\n        <!-- It seems that integer can be provided within quotes though. -->\n        <RegExpr attribute=\"Decimal\" context=\"clierr_command\" String=\"&quot;[0-9]+&quot; \" />\n        <IncludeRules context=\"comments\" />\n      </context>\n      <context name=\"clierr_command\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <context name=\"tx_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n        <StringDetect attribute=\"Tx Keyword\" String=\"-nolen\" />\n        <RegExpr attribute=\"Tx Keyword\" context=\"string-arg\" String=\"\\-(?:body|gzipbody|hdr|proto) \" />\n        <RegExpr attribute=\"Tx Keyword\" context=\"int-arg\" String=\"\\-(?:bodylen|gzip(?:len|residual|level))\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- Define syntax for the client-specific txreq keyword -->\n      <context name=\"txreq_options\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"tx_options\" />\n        <RegExpr attribute=\"TxReq Keyword\" context=\"string-arg\" String=\"\\-(?:req|url)\" />\n      </context>\n\n      <!-- Define syntax for the server-specific txresp keyword -->\n      <context name=\"txresp_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"tx_options\" />\n        <StringDetect attribute=\"TxResp Keyword\" context=\"string-arg\" String=\"-msg\" />\n        <StringDetect attribute=\"TxResp Keyword\" context=\"status-arg\" String=\"-status\" />\n      </context>\n\n      <!-- Define syntax for the client-specific rxresp keyword -->\n      <context name=\"rxresp_options\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"comments\" />\n        <StringDetect attribute=\"RxResp Keyword\" String=\"-no_obj\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- varnishtest keyword -->\n      <context name=\"varnishtest_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- client/server HTTP commands -->\n      <context name=\"clientserver_common_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"comments\" />\n        <!-- Extracted using:\n            perl -nlE '$p = 1 if m#http_cmds\\[\\]#; say if ($p); exit if ($p && m#^\\}#);' vtc_http.c\n            egrep '(^cmd_http_|^\\s*ONLY_(CLIENT|SERVER))' bin/varnishtest/vtc_http.c\n        -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"timeout_instruction\"     String=\"timeout\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"gunzip\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"expect_close\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"http_expectation\"        String=\"expect\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"send_instruction\"        String=\"sendhex\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"send_instruction\"        String=\"send\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"chunkedlen_instruction\"  String=\"chunkedlen\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"send_instruction\"        String=\"chunked\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"delay_instruction\"       String=\"delay\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"sema_instruction\"        String=\"sema\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"close\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"accept\" />\n        <!-- loop is not there as its parsing changes depending on server or client. -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"fatal\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"non-fatal\" />\n      </context>\n\n      <!-- client keyword -->\n      <context name=\"client_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Client Identifier\" context=\"client_identified\" />\n      </context>\n      <context name=\"client_identified\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"client_options\" />\n        <DetectChar attribute=\"Region Marker\" context=\"client_definition\" char=\"{\" beginRegion=\"client_block\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"client_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"clientserver_common_definition\" />\n        <!-- client-specific HTTP commands -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"txreq_options\"           String=\"txreq\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxresphdrs\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"rxresp_options\"          String=\"rxresp\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxchunk\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"client_loop_instruction\" String=\"loop\" />\n        <DetectChar attribute=\"Region Marker\" context=\"client_postdefinition\" char=\"}\" endRegion=\"client_block\" />\n      </context>\n      <context name=\"client_postdefinition\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <IncludeRules context=\"client_options\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- server keyword -->\n      <context name=\"server_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Server Identifier\" context=\"server_identified\" />\n      </context>\n      <context name=\"server_identified\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"server_options\" />\n        <DetectChar attribute=\"Region Marker\" context=\"server_definition\" char=\"{\" beginRegion=\"server_block\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"server_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"clientserver_common_definition\" />\n        <!-- server-specific HTTP commands -->\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxreqhdrs\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxreq\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"#stay\"                   String=\"rxbody\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"txresp_options\"          String=\"txresp\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"server_loop_instruction\" String=\"loop\" />\n        <DetectChar attribute=\"Region Marker\" context=\"server_postdefinition\" char=\"}\" endRegion=\"server_block\" />\n      </context>\n      <context name=\"server_postdefinition\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <IncludeRules context=\"server_options\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n\n      <!-- varnish keyword -->\n      <context name=\"varnish_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Varnish Identifier\" context=\"varnish_identified\" />\n      </context>\n      <context name=\"varnish_identified\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"varnish_options\" />\n        <RegExpr attribute=\"Keyword\" context=\"varnish_vclannounced\" String=\"\\s*\\-vcl(?:\\+backend)?\" />\n        <RegExpr attribute=\"Keyword\" context=\"varnish_errvclannounced\" String=\"\\s*\\-errvcl\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"varnish_vclannounced\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_vcldefinition\" char=\"{\" beginRegion=\"varnish_block\" />\n      </context>\n      <context name=\"varnish_vcldefinition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"##Varnish 4 Configuration Language\" />\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_postvcldefinition\" char=\"}\" endRegion=\"varnish_block\" />\n      </context>\n      <context name=\"varnish_postvcldefinition\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop#pop\">\n        <IncludeRules context=\"varnish_options\" />\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n      </context>\n      <context name=\"varnish_errvclannounced\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar char=\"&quot;\" context=\"errvcl_expected_error_quoted\" attribute=\"String\" />\n        <DetectChar char=\"{\" context=\"errvcl_expected_error_brace\" attribute=\"String\" beginRegion=\"string_block\" />\n      </context>\n      <context name=\"errvcl_expected_error_quoted\" attribute=\"String\" lineEndContext=\"#pop\">\n        <Detect2Chars attribute=\"String\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"varnish_errvcldefined\" char=\"&quot;\" />\n      </context>\n      <context name=\"errvcl_expected_error_brace\" attribute=\"String\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"String\" context=\"brace-string-internal\" char=\"{\" />\n        <DetectChar attribute=\"String\" context=\"varnish_errvcldefined\" char=\"}\" endRegion=\"string_block\" />\n      </context>\n      <context name=\"varnish_errvcldefined\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_errvclcode\" char=\"{\" beginRegion=\"errvclcode_block\" />\n      </context>\n      <context name=\"varnish_errvclcode\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"varnish_errvclcode-internal\" char=\"{\" />\n        <DetectChar attribute=\"Region Marker\" context=\"varnish_postvcldefinition\" char=\"}\" endRegion=\"errvclcode_block\" />\n      </context>\n      <context name=\"varnish_errvclcode-internal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Normal Text\" context=\"varnish_errvclcode-internal\" char=\"{\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" />\n      </context>\n\n      <context name=\"logexpect_declaration\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"LogExpect Identifier\" context=\"logexpect_identified\" />\n      </context>\n      <context name=\"logexpect_identified\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"Normal Text\" context=\"#stay\" />\n        <IncludeRules context=\"logexpect_options\" />\n        <!-- Extracted from bin/varnishtest/vtc_logexp.c -->\n        <Detect2Chars attribute=\"Keyword\" char=\"-\" char1=\"v\" context=\"logexpect_varnishinstance_arg\" />\n        <Detect2Chars attribute=\"Keyword\" char=\"-\" char1=\"g\" context=\"logexpect_grouping_arg\" />\n        <Detect2Chars attribute=\"Keyword\" char=\"-\" char1=\"d\" context=\"logexpect_headtailmode_arg\" />\n        <Detect2Chars attribute=\"Keyword\" char=\"-\" char1=\"q\" context=\"logexpect_query_arg\" />\n        <DetectChar attribute=\"Region Marker\" context=\"logexpect_definition\" char=\"{\" beginRegion=\"logexpect_block\" />\n      </context>\n      <context name=\"logexpect_varnishinstance_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Varnish Identifier\" context=\"#pop\" />\n      </context>\n      <context name=\"logexpect_grouping_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"VSL Grouping\" context=\"#pop\" String=\"VSLGrouping\" />\n      </context>\n      <context name=\"logexpect_headtailmode_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Decimal\" context=\"#pop\" char=\"0\" />\n        <DetectChar attribute=\"Decimal\" context=\"#pop\" char=\"1\" />\n      </context>\n      <context name=\"logexpect_query_arg\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"string-arg\" />\n      </context>\n      <context name=\"logexpect_definition\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"logexpect_postdefinition\" char=\"}\" endRegion=\"logexpect_block\" />\n        <StringDetect firstNonSpace=\"true\" attribute=\"Action Keyword\" context=\"logexpect_skip\" String=\"expect\" />\n      </context>\n      <context name=\"logexpect_postdefinition\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop#pop#pop\">\n        <IncludeRules context=\"logexpect_options\" />\n      </context>\n      <context name=\"logexpect_skip\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"logexpect_vxid\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"logexpect_vxid\" char=\"*\" />\n      </context>\n      <context name=\"logexpect_vxid\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"logexpect_tag\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"logexpect_tag\" char=\"*\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"logexpect_tag\" char=\"=\" />\n      </context>\n      <context name=\"logexpect_tag\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <keyword attribute=\"VSL Tag\" context=\"logexpect_regex\" String=\"VSLTags\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"logexpect_regex\" char=\"*\" />\n        <DetectChar attribute=\"Logical Operator\" context=\"logexpect_regex\" char=\"=\" />\n      </context>\n      <context name=\"logexpect_regex\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"brace-strings\" />\n        <IncludeRules context=\"quoted-strings\" />\n      </context>\n\n      <!-- sema keyword -->\n      <context name=\"sema_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <DetectIdentifier attribute=\"Sema Identifier\" context=\"sema_identified\" />\n      </context>\n      <context name=\"sema_identified\" attribute=\"Normal Text\" lineEndContext=\"#pop#pop\">\n        <StringDetect attribute=\"Keyword\" String=\"sync\" />\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- delay keyword -->\n      <context name=\"delay_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <Float attribute=\"Float\" context=\"#stay\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- feature keyword -->\n      <context name=\"feature_instruction\" attribute=\"String\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- chunkedlen keyword -->\n      <context name=\"chunkedlen_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <Int attribute=\"Decimal\" context=\"#stay\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- send / sendhex / chunk keywords -->\n      <context name=\"send_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"string-arg\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- timeout keyword -->\n      <context name=\"timeout_instruction\" attribute=\"Normal Text\" lineEndContext=\"#pop\">\n        <IncludeRules context=\"int-arg\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n\n      <!-- loop keyword at global scope -->\n      <context name=\"global_loop_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Int attribute=\"Decimal\" context=\"global_loop_defined\" />\n      </context>\n      <context name=\"global_loop_defined\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"global_loop_code\" char=\"{\" beginRegion=\"loop_block\" />\n      </context>\n      <context name=\"global_loop_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"loop_block\" />\n        <IncludeRules context=\"global_directives\" />\n      </context>\n\n      <!-- loop keyword for client definitions -->\n      <context name=\"client_loop_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Int attribute=\"Decimal\" context=\"client_loop_defined\" />\n      </context>\n      <context name=\"client_loop_defined\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"client_loop_code\" char=\"{\" beginRegion=\"loop_block\" />\n      </context>\n      <context name=\"client_loop_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"loop_block\" />\n        <IncludeRules context=\"client_definition\" />\n      </context>\n\n      <!-- loop keyword for server definitions -->\n      <context name=\"server_loop_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Int attribute=\"Decimal\" context=\"server_loop_defined\" />\n      </context>\n      <context name=\"server_loop_defined\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"server_loop_code\" char=\"{\" beginRegion=\"loop_block\" />\n      </context>\n      <context name=\"server_loop_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop#pop\" char=\"}\" endRegion=\"loop_block\" />\n        <IncludeRules context=\"server_definition\" />\n      </context>\n\n      <!-- shell keyword, one-line version -->\n      <context name=\"shell_instruction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"shell_code\" char=\"{\" beginRegion=\"shell_block\" />\n        <IncludeRules context=\"quoted-strings\" />\n        <IncludeRules context=\"comments\" />\n      </context>\n      <context name=\"shell_code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Region Marker\" context=\"#pop#pop\" char=\"}\" endRegion=\"shell_block\" />\n        <!-- There does not seem to be a syntax highlighting dedicated to \"standard shell\" so let's use Bash instead -->\n        <IncludeRules context=\"##Bash\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\"               defStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"                   defStyleNum=\"dsComment\" />\n      <itemData name=\"Keyword\"                   defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Tx Keyword\"                defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"TxReq Keyword\"             defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"TxResp Keyword\"            defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"RxResp Keyword\"            defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Action Keyword\"            defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Comparison Operator\"       defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"Logical Operator\"          defStyleNum=\"dsKeyword\" color=\"#008000\" bold=\"0\" />\n      <itemData name=\"String\"                    defStyleNum=\"dsString\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Region Marker\"             defStyleNum=\"dsNormal\" />\n      <itemData name=\"HTTP Property\"             defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP Header\"               defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"HTTP X- Header\"            defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"HTTP announce\"             defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"HTTP method\"               defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"HTTP WebDAV method\"        defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"HTTP custom method\"        defStyleNum=\"dsDataType\" color=\"#562579\" selColor=\"#562579\" bold=\"1\" />\n      <itemData name=\"VarnishStat metric\"        defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"VSL Tag\"                   defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"VSL Grouping\"              defStyleNum=\"dsDataType\" color=\"#0000FF\" selColor=\"#0000FF\" bold=\"0\" italic=\"0\" />\n      <itemData name=\"Decimal\"                   defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Float\"                     defStyleNum=\"dsFloat\" spellChecking=\"false\"/>\n      <itemData name=\"Client Identifier\"         defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n      <itemData name=\"Server Identifier\"         defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n      <itemData name=\"Varnish Identifier\"        defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n      <itemData name=\"LogExpect Identifier\"      defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n      <itemData name=\"Sema Identifier\"           defStyleNum=\"dsDataType\" color=\"#0D62FF\" selColor=\"#0D62FF\" bold=\"0\" underline=\"1\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" />\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/vcard.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<!DOCTYPE language SYSTEM \"language.dtd\" []>\n\n<language name=\"vCard, vCalendar, iCalendar\" version=\"2\" kateversion=\"2.4\" section=\"Markup\" extensions=\"*.iCal;*.iCalendar;.ics;*.ifb;*.iFBf;*.vcal;*.vcalendar;*.vcard;*.vcf;\" author=\"Lukas Sommer\" mimetype=\"text/calendar;text/vcard\" license=\"Public Domain\">\n\n    <highlighting>\n\n        <contexts>\n            <context attribute=\"Property\" lineEndContext=\"#stay\" name=\"contextProperty\">\n                <StringDetect attribute=\"vCard\" String=\"BEGIN:\" beginRegion=\"region\" context=\"contextAttribute\" column=\"0\"/>\n                <StringDetect attribute=\"vCard\" String=\"END:\" endRegion=\"region\" context=\"contextAttribute\" column=\"0\"/>\n                <DetectChar char=\" \" context=\"contextAttribute\" column=\"0\"/>\n                <DetectChar attribute=\"Delimiter\" context=\"contextAttribute\" char=\":\" />\n                <DetectChar attribute=\"Delimiter\" context=\"contextParameterKey\" char=\";\" />\n            </context>\n            <context attribute=\"Parameter key\" lineEndContext=\"#pop\" name=\"contextParameterKey\">\n                <DetectChar attribute=\"Assignment\" context=\"contextParameterValue\" char=\"=\" />\n                <DetectChar attribute=\"Delimiter\" context=\"contextAttribute\" char=\":\" />\n            </context>\n            <context attribute=\"Parameter value\" lineEndContext=\"#pop\" name=\"contextParameterValue\">\n                <DetectChar attribute=\"Delimiter\" context=\"contextParameterKey\" char=\";\" />\n                <DetectChar attribute=\"Delimiter\" context=\"contextAttribute\" char=\":\" />\n            </context>\n            <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"contextAttribute\">\n                <DetectChar attribute=\"Delimiter\" char=\";\" />\n            </context>\n        </contexts>\n\n        <itemDatas>\n          <itemData name=\"Assignment\" defStyleNum=\"dsKeyword\"/>\n          <itemData name=\"Attribute\" defStyleNum=\"dsString\"/>\n          <itemData name=\"Delimiter\" defStyleNum=\"dsKeyword\"/>\n          <itemData name=\"Parameter key\" defStyleNum=\"dsFunction\"/>\n          <itemData name=\"Parameter value\" defStyleNum=\"dsOthers\"/>\n\t  <itemData name=\"Property\" defStyleNum=\"dsKeyword\"/> <!-- dsDataType -->\n          <itemData name=\"vCard\" defStyleNum=\"dsRegionMarker\"/>\n        </itemDatas>\n\n    </highlighting>\n\n    <general>\n    </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/velocity.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Velocity\" version=\"2\" kateversion=\"2.3\" section=\"Scripts\" extensions=\"*.vm;\" mimetype=\"text/x-velocity-src;text/x-vm-src\" author=\"John Christopher (John@animalsinneed.net)\" license=\"\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>#set</item>\n\t\t\t<item>#foreach</item>\n\t\t\t<item>#end</item>\n\t\t\t<item>#if</item>\n\t\t\t<item>#else</item>\n\t\t\t<item>#elseif</item>\n\t\t\t<item>#parse</item>\n\t\t\t<item>#macro</item>\n\t\t\t<item>#stop</item>\n\t\t\t<item>#include</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Keyword\">\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\.\\-]*(\\[[a-zA-Z0-9_]*\\])*\" />\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\.\\-]*(\\[[a-zA-Z0-9_]*\\])*\\}\" />\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$!\\{[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\.\\-]*(\\[[a-zA-Z0-9_]*\\])*\\}.\" />\n\t\t\t\t<RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\{\\$[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\.\\-]*(\\[([0-9]*|&quot;[a-zA-Z_]*&quot;)|'[a-zA-Z_]*'|\\])*(->[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*(\\[[a-zA-Z0-9_]*\\])*(\\[([0-9]*|&quot;[a-zA-Z_]*&quot;)|'[a-zA-Z_]*'|\\])*)*\\}\" />\n\t\t\t\t<RegExpr attribute=\"Properties\" context=\"#stay\" String=\"[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\-]*(\\[[a-zA-Z0-9_]*\\])*\\.[a-zA-Z0-9_\\x7f-\\xff\\-]*\" />\n\t\t\t\t<AnyChar attribute=\"Other\" context=\"#stay\" String=\"(),[]\" />\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"singleline comment\" char=\"#\" char1=\"#\" />\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"multilinecomment\" char=\"#\" char1=\"&#42;\" />\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" name=\"singleline comment\" lineEndContext=\"#pop\">\n\t\t\t</context>\n\t\t\t<context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"multilinecomment\" >\n\t\t\t\t<Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"#\" />\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n\t\t\t<itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n\t\t\t<itemData name=\"Variable\" defStyleNum=\"dsKeyword\" color=\"#5555FF\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\" />\n\t\t\t<itemData name=\"Other\" defStyleNum=\"dsOthers\" />\n\t\t\t<itemData name=\"Properties\" defStyleNum=\"dsNormal\" color=\"#8AC6FF\" selColor=\"#ffffff\" bold=\"0\" italic=\"1\"/>\n\t\t\t<itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"##\" />\n\t\t\t<comment name=\"multiLine\" start=\"#*\" end=\"*#\" />\n\t\t</comments>\n\t\t<keywords casesensitive=\"1\" weakDeliminator=\"+\"/>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/vera.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--***********************************************************************-->\n<!-- $Id: vera.xml 6 2008-12-07 21:19:40Z seanoboyle $                     -->\n<!--***********************************************************************-->\n<!--  This program is free software: you can redistribute it and/or modify -->\n<!--  it under the terms of the GNU General Public License as published by -->\n<!--  the Free Software Foundation, either version 3 of the License, or    -->\n<!--  (at your option) any later version.                                  -->\n<!--                                                                       -->\n<!--  This program is distributed in the hope that it will be useful,      -->\n<!--  but WITHOUT ANY WARRANTY; without even the implied warranty of       -->\n<!--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        -->\n<!--  GNU General Public License for more details.                         -->\n<!--                                                                       -->\n<!--  You should have received a copy of the GNU General Public License    -->\n<!--  along with this program.  If not, see <http://www.gnu.org/licenses/>.-->\n<!--                                                                       -->\n<!--***********************************************************************-->\n<!-- Title:        Vera Language Keywords File for Kate Editor             -->\n<!-- Description:  This file contains the Vera keywords defined in the     -->\n<!--               OpenVera LRM: Testbench Ver 1.4.4 in the format expected-->\n<!--               by the Kate Editor.                                     -->\n<!--                                                                       -->\n<!-- Original Author: Sean O'Boyle                                         -->\n<!-- Contact:         seanoboyle@intelligentdv.com                         -->\n<!-- Company:         Intelligent Design Verification                      -->\n<!-- Company URL:     http://intelligentdv.com                             -->\n<!--                                                                       -->\n<!-- Download the most recent version here:                                -->\n<!--                  http://intelligentdv.com/downloads                   -->\n<!--                                                                       -->\n<!-- File Bugs Here:  http://bugs.intelligentdv.com                        -->\n<!--        Project:  SyntaxKateVera                                       -->\n<!--                                                                       -->\n<!-- File: vera.xml                                                        -->\n<!-- $LastChangedBy: seanoboyle $                                          -->\n<!-- $LastChangedDate: 2008-12-07 13:19:40 -0800 (Sun, 07 Dec 2008) $      -->\n<!-- $LastChangedRevision: 6 $                                             -->\n<!--                                                                       -->\n<!--***********************************************************************-->\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Vera\" version=\"5\" kateversion=\"5.0\" section=\"Hardware\" extensions=\"*.vr;*.vri;*.vrh\" mimetype=\"text/x-vera-src\" author=\"Sean O'Boyle (seanoboyle@intelligentdv.com)\" license=\"GPLv3+\">\n  <highlighting>\n    <list name=\"keywords\">\n       <item>after</item>\n       <item>all</item>\n       <item>any</item>\n       <item>around</item>\n       <item>assoc_index</item>\n       <item>assoc_size</item>\n       <item>async</item>\n       <item>bad_state</item>\n       <item>bad_trans</item>\n       <item>before</item>\n       <item>begin</item>\n       <item>big_endian</item>\n       <item>bind</item>\n       <item>bin_activation</item>\n       <item>bit_normal</item>\n       <item>bit_reverse</item>\n       <item>break</item>\n       <item>breakpoint</item>\n       <item>case</item>\n       <item>casex</item>\n       <item>casez</item>\n       <item>class</item>\n       <item>constraint</item>\n       <item>continue</item>\n       <item>coverage</item>\n       <item>coverage_block</item>\n       <item>coverage_def</item>\n       <item>coverage_depth</item>\n       <item>coverage_goal</item>\n       <item>coverage_group</item>\n       <item>coverage_option</item>\n       <item>coverage_val</item>\n       <item>cross_num_print_missing</item>\n       <item>cross_auto_bin_max</item>\n       <item>cov_comment</item>\n       <item>default</item>\n       <item>depth</item>\n       <item>dist</item>\n       <item>do</item>\n       <item>else</item>\n       <item>end</item>\n       <item>enum</item>\n       <item>exhaustive</item>\n       <item>export</item>\n       <item>extends</item>\n       <item>extern</item>\n       <item>for</item>\n       <item>foreach</item>\n       <item>fork</item>\n       <item>function</item>\n       <item>hdl_task</item>\n       <item>hdl_node</item>\n       <item>hide</item>\n       <item>if</item>\n       <item>illegal_self_transition</item>\n       <item>illegal_state</item>\n       <item>illegal_transition</item>\n       <item>in</item>\n       <item>interface</item>\n       <item>invisible</item>\n       <item>join</item>\n       <item>little_endian</item>\n       <item>local</item>\n       <item>m_bad_state</item>\n       <item>m_bad_trans</item>\n       <item>m_state</item>\n       <item>m_trans</item>\n       <item>negedge</item>\n       <item>new</item>\n       <item>newcov</item>\n       <item>non_rand</item>\n       <item>none</item>\n       <item>not</item>\n       <item>null</item>\n       <item>or</item>\n       <item>ordered</item>\n       <item>packed</item>\n       <item>port</item>\n       <item>posedge</item>\n       <item>proceed</item>\n       <item>prod</item>\n       <item>prodget</item>\n       <item>prodset</item>\n       <item>program</item>\n       <item>protected</item>\n       <item>public</item>\n       <item>rand</item>\n       <item>randc</item>\n       <item>randcase</item>\n       <item>randseq</item>\n       <item>repeat</item>\n       <item>return</item>\n       <item>rules</item>\n       <item>sample</item>\n       <item>sample_event</item>\n       <item>shadow</item>\n       <item>soft</item>\n       <item>state</item>\n       <item>static</item>\n       <item>super</item>\n       <item>task</item>\n       <item>terminate</item>\n       <item>this</item>\n       <item>trans</item>\n       <item>typedef</item>\n       <item>unpacked</item>\n       <item>var</item>\n       <item>vca</item>\n       <item>vector</item>\n       <item>verilog_node</item>\n       <item>verilog_task</item>\n       <item>vhdl_node</item>\n       <item>vhdl_task</item>\n       <item>virtual</item>\n       <item>virtuals</item>\n       <item>visible</item>\n       <item>void</item>\n       <item>while</item>\n       <item>wildcard</item>\n       <item>with</item>\n    </list>\n    <list name=\"types\">\n       <item>integer</item>\n       <item>bit</item>\n       <item>reg</item>\n       <item>string</item>\n       <item>bind_var</item>\n       <item>event</item>\n       <item>inout</item>\n       <item>input</item>\n       <item>output</item>\n       <item>ASYNC</item>\n       <item>CLOCK</item>\n       <item>NDRIVE</item>\n       <item>NHOLD</item>\n       <item>NRX</item>\n       <item>NRZ</item>\n       <item>NR0</item>\n       <item>NR1</item>\n       <item>NSAMPLE</item>\n       <item>PDRIVE</item>\n       <item>PHOLD</item>\n       <item>PRX</item>\n       <item>PRZ</item>\n       <item>PR0</item>\n       <item>PR1</item>\n       <item>PSAMPLE</item>\n    </list>\n    <list name=\"q_values\">\n       <item>gnr</item>\n       <item>grx</item>\n       <item>grz</item>\n       <item>gr0</item>\n       <item>gr1</item>\n       <item>nr</item>\n       <item>rx</item>\n       <item>rz</item>\n       <item>r0</item>\n       <item>r1</item>\n       <item>snr</item>\n       <item>srx</item>\n       <item>srz</item>\n       <item>sr0</item>\n       <item>sr1</item>\n    </list>\n    <list name=\"methods\">\n       <!-- system functions and tasks -->\n       <item>alloc</item>\n       <item>call_func</item>\n       <item>call_task</item>\n       <item>cast_assign</item>\n       <item>close_conn</item>\n       <item>cm_coverage</item>\n       <item>cm_get_coverage</item>\n       <item>cm_get_limit</item>\n       <item>coverage_backup_database_file</item>\n       <item>coverage_save_database</item>\n       <item>delay</item>\n       <item>error</item>\n       <item>error_mode</item>\n       <item>error_wait</item>\n       <item>exit</item>\n       <item>fclose</item>\n       <item>feof</item>\n       <item>ferror</item>\n       <item>fflush</item>\n       <item>flag</item>\n       <item>fopen</item>\n       <item>fprintf</item>\n       <item>freadb</item>\n       <item>freadb</item>\n       <item>freadh</item>\n       <item>freadstr</item>\n       <item>get_bind</item>\n       <item>get_bind_id</item>\n       <item>get_conn_err</item>\n       <item>get_cycle</item>\n       <item>get_env</item>\n       <item>get_memsize</item>\n       <item>get_plus_arg</item>\n       <item>get_systime</item>\n       <item>get_time</item>\n       <item>get_time_unit</item>\n       <item>getstate</item>\n       <item>initstate</item>\n       <item>lock_file</item>\n       <item>mailbox_get</item>\n       <item>mailbox_put</item>\n       <item>mailbox_receive</item>\n       <item>mailbox_send</item>\n       <item>make_client</item>\n       <item>make_server</item>\n       <item>os_command</item>\n       <item>printf</item>\n       <item>psprintf</item>\n       <item>query</item>\n       <item>query_str</item>\n       <item>query_x</item>\n       <item>rand48</item>\n       <item>random</item>\n       <item>region_enter</item>\n       <item>region_exit</item>\n       <item>rewind</item>\n       <item>semaphore_get</item>\n       <item>semaphore_put</item>\n       <item>setstate</item>\n       <item>signal_connect</item>\n       <item>simwave_plot</item>\n       <item>srandom</item>\n       <item>sprintf</item>\n       <item>sscanf</item>\n       <item>stop</item>\n       <item>suspend_thread</item>\n       <item>sync</item>\n       <item>timeout</item>\n       <item>trace</item>\n       <item>trigger</item>\n       <item>unit_delay</item>\n       <item>unlock_file</item>\n       <item>up_connections</item>\n       <item>urand48</item>\n       <item>urandom</item>\n       <item>urandom_range</item>\n       <item>vera_bit_reverse</item>\n       <item>vera_crc</item>\n       <item>vera_pack</item>\n       <item>vera_pack_big_endian</item>\n       <item>vera_plot</item>\n       <item>vera_report_profile</item>\n       <item>vera_unpack</item>\n       <item>vera_unpack_big_endian</item>\n       <item>vsv_call_func</item>\n       <item>vsv_call_task</item>\n       <item>vsv_close_conn</item>\n       <item>vsv_get_conn_err</item>\n       <item>vsv_make_client</item>\n       <item>vsv_make_server</item>\n       <item>vsv_up_connections</item>\n       <item>vsv_wait_for_done</item>\n       <item>vsv_wait_for_input</item>\n       <item>wait_child</item>\n       <item>wait_var</item>\n       <!-- class methods -->\n       <item>Configure</item>\n       <item>DisableTrigger</item>\n       <item>DoAction</item>\n       <item>EnableCount</item>\n       <item>EnableTrigger</item>\n       <item>Event</item>\n       <item>GetAssert</item>\n       <item>GetCount</item>\n       <item>GetFirstAssert</item>\n       <item>GetName</item>\n       <item>GetNextAssert</item>\n       <item>Wait</item>\n       <item>atobin</item>\n       <item>atohex</item>\n       <item>atoi</item>\n       <item>atooct</item>\n       <item>backref</item>\n       <item>bittostr</item>\n       <item>capacity</item>\n       <item>compare</item>\n       <item>constraint_mode</item>\n       <item>delete</item>\n       <item>empty</item>\n       <item>find</item>\n       <item>find_index</item>\n       <item>first</item>\n       <item>first_index</item>\n       <item>get_at_least</item>\n       <item>get_auto_bin</item>\n       <item>get_cov_weight</item>\n       <item>get_coverage_goal</item>\n       <item>get_cross_bin_max</item>\n       <item>get_status</item>\n       <item>get_status_msg</item>\n       <item>getc</item>\n       <item>hash</item>\n       <item>icompare</item>\n       <item>insert</item>\n       <item>inst_get_at_least</item>\n       <item>inst_get_auto_bin_max</item>\n       <item>inst_get_collect</item>\n       <item>inst_get_cov_weight</item>\n       <item>inst_get_coverage_goal</item>\n       <item>inst_getcross_bin_max</item>\n       <item>inst_query</item>\n       <item>inst_set_at_least</item>\n       <item>inst_set_auto_bin_max</item>\n       <item>inst_set_bin_activiation</item>\n       <item>inst_set_collect</item>\n       <item>inst_set_cov_weight</item>\n       <item>inst_set_coverage_goal</item>\n       <item>inst_set_cross_bin_max</item>\n       <item>itoa</item>\n       <item>last</item>\n       <item>last_index</item>\n       <item>len</item>\n       <item>load</item>\n       <item>match</item>\n       <item>max</item>\n       <item>max_index</item>\n       <item>min</item>\n       <item>min_index</item>\n       <item>object_compare</item>\n       <item>object_copy</item>\n       <item>object_print</item>\n       <item>pack</item>\n       <item>pick_index</item>\n       <item>pop_back</item>\n       <item>pop_front</item>\n       <item>post_pack</item>\n       <item>post_randomize</item>\n       <item>post_unpack</item>\n       <item>postmatch</item>\n       <item>pre_pack</item>\n       <item>pre_randomize</item>\n       <item>prematch</item>\n       <item>push_back</item>\n       <item>push_front</item>\n       <item>putc</item>\n       <item>query</item>\n       <item>query_str</item>\n       <item>rand_mode</item>\n       <item>randomize</item>\n       <item>reserve</item>\n       <item>reverse</item>\n       <item>rsort</item>\n       <item>search</item>\n       <item>set_at_least</item>\n       <item>set_auto_bin_max</item>\n       <item>set_bin_activiation</item>\n       <item>set_cov_weight</item>\n       <item>set_coverage_goal</item>\n       <item>set_cross_bin_max</item>\n       <item>set_name</item>\n       <item>size</item>\n       <item>sort</item>\n       <item>substr</item>\n       <item>sum</item>\n       <item>thismatch</item>\n       <item>tolower</item>\n       <item>toupper</item>\n       <item>unique_index</item>\n       <item>unpack</item>\n       <!-- empty methods -->\n       <item>new</item>\n       <item>object_compare</item>\n       <item>post_boundary</item>\n       <item>post_pack</item>\n       <item>post_randomize</item>\n       <item>post_unpack</item>\n       <item>pre-randomize</item>\n       <item>pre_boundary</item>\n       <item>pre_pack</item>\n       <item>pre_unpack</item>\n       <!-- vera-constants -->\n       <item>ALL</item>\n       <item>ANY</item>\n       <item>BAD_STATE</item>\n       <item>BAD_TRANS</item>\n       <item>CALL</item>\n       <item>CHECK</item>\n       <item>CHGEDGE</item>\n       <item>CLEAR</item>\n       <item>COPY_NO_WAIT</item>\n       <item>COPY_WAIT</item>\n       <item>CROSS</item>\n       <item>CROSS_TRANS</item>\n       <item>DEBUG</item>\n       <item>DELETE</item>\n       <item>EC_ARRAYX</item>\n       <item>EC_CODE_END</item>\n       <item>EC_CONFLICT</item>\n       <item>EC_EVNTIMOUT</item>\n       <item>EC_EXPECT</item>\n       <item>EC_FULLEXPECT</item>\n       <item>EC_MBXTMOUT</item>\n       <item>EC_NEXPECT</item>\n       <item>EC_RETURN</item>\n       <item>EC_RGNTMOUT</item>\n       <item>EC_SCONFLICT</item>\n       <item>EC_SEMTMOUT</item>\n       <item>EC_SEXPECT</item>\n       <item>EC_SFULLEXPECT</item>\n       <item>EC_SNEXTPECT</item>\n       <item>EC_USERSET</item>\n       <item>EQ</item>\n       <item>EVENT</item>\n       <item>FAIL</item>\n       <item>FIRST</item>\n       <item>FORK</item>\n       <item>GE</item>\n       <item>GOAL</item>\n       <item>GT</item>\n       <item>HAND_SHAKE</item>\n       <item>HI</item>\n       <item>HIGH</item>\n       <item>HNUM</item>\n       <item>LE</item>\n       <item>LIC_EXIT</item>\n       <item>LIC_PRERR</item>\n       <item>LIC_PRWARN</item>\n       <item>LIC_WAIT</item>\n       <item>LO</item>\n       <item>LOAD</item>\n       <item>LOW</item>\n       <item>LT</item>\n       <item>MAILBOX</item>\n       <item>MAX_COM</item>\n       <item>NAME</item>\n       <item>NE</item>\n       <item>NEGEDGE</item>\n       <item>NEXT</item>\n       <item>NO_OVERLAP</item>\n       <item>NO_OVERLAP_STATE</item>\n       <item>NO_OVERLAP_TRANS</item>\n       <item>NO_VARS</item>\n       <item>NO_WAIT</item>\n       <item>NUM</item>\n       <item>NUM_BIN</item>\n       <item>NUM_DET</item>\n       <item>OFF</item>\n       <item>OK</item>\n       <item>OK_LAST</item>\n       <item>ON</item>\n       <item>ONE_BLAST</item>\n       <item>ONE_SHOT</item>\n       <item>ORDER</item>\n       <item>PAST_IT</item>\n       <item>PERCENT</item>\n       <item>POSEDGE</item>\n       <item>PROGRAM</item>\n       <item>RAWIN</item>\n       <item>REGION</item>\n       <item>REPORT</item>\n       <item>SAMPLE</item>\n       <item>SAVE</item>\n       <item>SEMAPHORE</item>\n       <item>SET</item>\n       <item>SILENT</item>\n       <item>STATE</item>\n       <item>STR</item>\n       <item>STR_ERR_OUT_OF_RANGE</item>\n       <item>STR_ERR_REGEXP_SYNTAX</item>\n       <item>SUM</item>\n       <item>TRANS</item>\n       <item>VERBOSE</item>\n       <item>WAIT</item>\n       <item>stderr</item>\n       <item>stdin</item>\n       <item>stdout</item>\n    </list>\n    \n    \n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Preprocessor\" context=\"Outscoped\" String=\"#\\s*if\\s+0\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <DetectChar context=\"AfterHash\" char=\"#\" firstNonSpace=\"true\" lookAhead=\"true\" />\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <keyword attribute=\"Q Values\" context=\"#stay\" String=\"q_values\"/>\n        <keyword attribute=\"Methods\" context=\"#stay\" String=\"methods\"/>\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[\\d_]*'d[\\d_]+\"/>\n        <RegExpr attribute=\"Octal\" context=\"#stay\" String=\"[\\d_]*'o[0-7xXzZ_]+\"/>\n        <RegExpr attribute=\"Hex\" context=\"#stay\" String=\"[\\d_]*'h[\\da-fA-FxXzZ_]+\"/>\n        <RegExpr attribute=\"Binary\" context=\"#stay\" String=\"[\\d_]*'b[01_zZxX]+\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n        <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <LineContinue attribute=\"Comment\" context=\"#stay\"/>\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop\" name=\"AfterHash\">\n        <!-- define, elif, else, endif, error, if, ifdef, ifndef, include, include_next, line, pragma, undef, warning -->\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*if(?:def|ndef)?(?=\\s+\\S)\" insensitive=\"true\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*endif\" insensitive=\"true\" endRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Define\" String=\"#\\s*define.*((?=\\\\))\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)\" insensitive=\"true\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"Preprocessor\" String=\"#\\s+[0-9]+\" insensitive=\"true\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\" beginRegion=\"Comment2\" />\n\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n      </context>\n\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Define\">\n        <LineContinue attribute=\"Preprocessor\" context=\"#stay\"/>\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <DetectSpaces />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment2\" />\n        <DetectIdentifier />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped\" >\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*el(?:se|if)\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Preprocessor\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Outscoped intern\">\n        <DetectSpaces />\n        <IncludeRules context=\"##Alerts\" />\n        <DetectIdentifier />\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <IncludeRules context=\"##Doxygen\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <RegExpr attribute=\"Comment\" context=\"Outscoped intern\" String=\"#\\s*if\" beginRegion=\"PP\" firstNonSpace=\"true\" />\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"#\\s*endif\" endRegion=\"PP\" firstNonSpace=\"true\" />\n      </context>\n    </contexts>\n    \n    <itemDatas>\n      <itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Q Values\"     defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Methods\"      defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Octal\"        defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n      <itemData name=\"Binary\"       defStyleNum=\"dsOthers\"/>\n      <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsSpecialChar\"/>\n      <itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Prep. Lib\"    defStyleNum=\"dsPreprocessor\"/>\n      <itemData name=\"Error\"        defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/verilog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Verilog\" version=\"4\" kateversion=\"2.4\" section=\"Hardware\" extensions=\"*.v;*.V;*.vl\" mimetype=\"text/x-verilog-src\" author=\"Yevgen Voronenko (ysv22@drexel.edu), Ryan Dalzell (ryan@tullyroan.com)\" license=\"\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>macromodule</item>\n      <item>table</item>\n      <item>endtable</item>\n      <item>specify</item>\n      <item>specparam</item>\n      <item>endspecify</item>\n\n      <item>defparam</item>\n      <item>default</item>\n      <item>if</item>\n      <item>ifnone</item>\n      <item>else</item>\n      <item>forever</item>\n      <item>while</item>\n      <item>for</item>\n      <item>wait</item>\n      <item>repeat</item>\n      <item>disable</item>\n\n      <item>assign</item>\n      <item>deassign</item>\n      <item>force</item>\n      <item>release</item>\n\n      <item>always</item>\n      <item>initial</item>\n      <item>edge</item>\n      <item>posedge</item>\n      <item>negedge</item>\n\n      <!-- verilog-2001 keywords -->\n      <item>config</item>\n      <item>endconfig</item>\n      <item>library</item>\n      <item>design</item>\n      <item>liblist</item>\n      <item>cell</item>\n      <item>use</item>\n      <item>instance</item>\n    </list>\n\n    <list name=\"beginwords\">\n        <item>begin</item>\n        <item>fork</item>\n        <item>module</item>\n        <item>case</item>\n        <item>casex</item>\n        <item>casez</item>\n        <item>task</item>\n        <item>function</item>\n        <item>generate</item>\n    </list>\n\n    <list name=\"endwords\">\n        <item>end</item>\n        <item>join</item>\n        <item>endmodule</item>\n        <item>endcase</item>\n        <item>endtask</item>\n        <item>endfunction</item>\n        <item>endgenerate</item>\n    </list>\n\n    <list name=\"strength\">\n\t<!-- drive strength supply0/supply1 omitted, its in types.. -->\n\t<item>strong0</item>\n\t<item>strong1</item>\n\t<item>pull0</item>\n\t<item>pull1</item>\n\t<item>weak0</item>\n\t<item>weak1</item>\n\t<item>highz0</item>\n\t<item>highz1</item>\n\t<!-- charge strength -->\n\t<item>small</item>\n\t<item>medium</item>\n\t<item>large</item>\n    </list>\n\n    <list name=\"gates\">\n       <item>pullup</item>\n       <item>pulldown</item>\n       <item>cmos</item>\n       <item>rcmos</item>\n       <item>nmos</item>\n       <item>pmos</item>\n       <item>rnmos</item>\n       <item>rpmos</item>\n       <item>and</item>\n       <item>nand</item>\n       <item>or</item>\n       <item>nor</item>\n       <item>xor</item>\n       <item>xnor</item>\n       <item>not</item>\n       <item>buf</item>\n       <item>tran</item>\n       <item>rtran</item>\n       <item>tranif0</item>\n       <item>tranif1</item>\n       <item>rtranif0</item>\n       <item>rtranif1</item>\n       <item>bufif0</item>\n       <item>bufif1</item>\n       <item>notif0</item>\n       <item>notif1</item>\n    </list>\n\n    <list name=\"types\">\n      <!-- port direction -->\n      <item>input</item>\n      <item>output</item>\n      <item>inout</item>\n      <!-- net type -->\n      <item>wire</item>\n      <item>tri</item>\n      <item>tri0</item>\n      <item>tri1</item>\n      <item>wand</item>\n      <item>wor</item>\n      <item>triand</item>\n      <item>trior</item>\n      <item>supply0</item>\n      <item>supply1</item>\n      <!-- reg/variable -->\n      <item>reg</item>\n      <item>integer</item>\n      <item>real</item>\n      <item>realtime</item>\n      <item>time</item>\n      <!-- modifier -->\n      <item>vectored</item>\n      <item>scalared</item>\n      <item>trireg</item>\n      <!-- other -->\n      <item>parameter</item>\n      <item>event</item>\n      <!-- verilog-2001 types -->\n      <item>signed</item>\n      <item>automatic</item>\n      <item>genvar</item>\n      <item>localparam</item>\n    </list>\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Keyword\" context=\"Block name\" String=\"begin\\ *:\" beginRegion=\"Block\"/>\n        <RegExpr attribute=\"Keyword\" context=\"Block name\" String=\"fork\\ *:\" beginRegion=\"Block\"/>\n        <keyword attribute=\"Keyword\" String=\"beginwords\" context=\"#stay\" beginRegion=\"Block\"/>\n        <keyword attribute=\"Keyword\" String=\"endwords\" context=\"#stay\" endRegion=\"Block\"/>\n\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\" />\n        <keyword attribute=\"Drive/charge strength\" context=\"#stay\" String=\"strength\" />\n        <keyword attribute=\"Gate instantiation\" context=\"#stay\" String=\"gates\" />\n\n        <RegExpr attribute=\"Decimal\" context=\"#stay\" String=\"[\\d_]*'d[\\d_]+\"/>\n        <RegExpr attribute=\"Octal\" context=\"#stay\" String=\"[\\d_]*'o[0-7xXzZ_]+\"/>\n        <RegExpr attribute=\"Hex\" context=\"#stay\" String=\"[\\d_]*'h[\\da-fA-FxXzZ_]+\"/>\n        <RegExpr attribute=\"Binary\" context=\"#stay\" String=\"[\\d_]*'b[01_zZxX]+\"/>\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Integer\" context=\"#stay\" />\n\n        <RegExpr attribute=\"Case label\" context=\"#stay\" String=\"[a-zA-Z0-9_, \\t]+\\s*:\" firstNonSpace=\"true\"/>\n        <!--<RegExpr attribute=\"Port map\" context=\"Port\" String=\"\\.[a-zA-Z0-9_]+\"/>-->\n\n        <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 2\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"!%&amp;()+,-&lt;=+/:;&gt;?[]^{|}~@\"/>\n\n        <DetectChar attribute=\"Preprocessor\" context=\"Preprocessor\" char=\"`\" column=\"0\"/>\n        <RegExpr attribute=\"Preprocessor\" context=\"#stay\" String=\"\\`[a-zA-Z_]+\\w*\" />\n        <RegExpr attribute=\"System Task\" context=\"#stay\" String=\"\\$[a-zA-Z_]+\\w*\" />\n        <RegExpr attribute=\"Delay\" context=\"#stay\" String=\"#[\\d_]+\" />\n\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n        <LineContinue attribute=\"String\" context=\"Some Context\"/>\n        <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Commentar 1\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar 2\">\n        <IncludeRules context=\"##Alerts\" />\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n      </context>\n      <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"Preprocessor\">\n        <LineContinue attribute=\"Preprocessor\" context=\"Some Context\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&quot;\" char1=\"&quot;\"/>\n        <RangeDetect attribute=\"Prep. Lib\" context=\"#stay\" char=\"&lt;\" char1=\"&gt;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar 1\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"Commentar/Preprocessor\" char=\"/\" char1=\"*\"/>\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Commentar/Preprocessor\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Some Context\"/>\n\n      <context attribute=\"Block name\" lineEndContext=\"#pop\" name=\"Block name\">\n          <DetectIdentifier attribute=\"Data Type\" context=\"#pop\"/>\n      </context>\n\n<!--      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Port\">\n          <DetectIdentifier attribute=\"Normal Text\" context=\"#pop\"/>\n      </context>-->\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\"  defStyleNum=\"dsDataType\"/>\n\n      <itemData name=\"Decimal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Octal\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Hex\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Binary\"  defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\"/>\n\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Prep. Lib\"  defStyleNum=\"dsFloat\"/>\n      <itemData name=\"System Task\" defStyleNum=\"dsDataType\"/>\n\n      <itemData name=\"Integer\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Delay\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Block name\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Drive/charge strength\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Gate instantiation\" defStyleNum=\"dsDataType\"/>\n<!--       <itemData name=\"Port map\" defStyleNum=\"dsDataType\"/> -->\n      <itemData name=\"Case label\" defStyleNum=\"dsDecVal\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" region=\"Comment\"/>\n    </comments>\n    <keywords casesensitive=\"1\" />\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/vhdl.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\" [\n  <!ENTITY funcname \"[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*\">\n  <!ENTITY varname  \"\\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\\b\">\n  <!ENTITY bos      \"(\\b)\">                        <!-- bol or space following -->\n  <!ENTITY eos      \"\\b\">                <!-- eol or space following -->\n  <!ENTITY noword   \"(?![\\w$+-])\">                <!-- no word, $, + or - following -->\n  <!ENTITY label     \"((&varname;)\\s*:\\s*)?\">\n\n]>\n<language name=\"VHDL\" version=\"6\" kateversion=\"3.0\" section=\"Hardware\" extensions=\"*.vhdl;*.vhd\" mimetype=\"text/x-vhdl\" author=\"Rocky Scaletta (rocky@purdue.edu), Stefan Endrullis (stefan@endrullis.de), Florent Ouchet (outchy@users.sourceforge.net), Chris Higgs (chiggs.99@gmail.com), Jan Michel (jan@mueschelsoft.de), Luigi Calligaris (luigi.calligaris@stfc.ac.uk)\">\n  <highlighting>\n    <list name=\"keywordsToplevel\">\n      <item>file</item>\n      <item>library</item>\n      <item>use</item>\n    </list>\n\n    <list name=\"keywords\">\n      <item>access</item>\n      <item>after</item>\n      <item>alias</item>\n      <item>all</item>\n      <item>array</item>\n      <item>assert</item>\n      <item>assume</item>\n      <item>assume_guarantee</item>\n      <item>attribute</item>\n      <item>begin</item>\n      <item>block</item>\n      <item>body</item>\n      <item>bus</item>\n      <item>component</item>\n      <item>constant</item>\n      <item>context</item>\n      <item>cover</item>\n      <item>default</item>\n      <item>disconnect</item>\n      <item>downto</item>\n      <item>end</item>\n      <item>exit</item>\n      <item>fairness</item>\n      <item>falling_edge</item>\n      <item>file</item>\n      <item>for</item>\n      <item>force</item>\n      <item>function</item>\n      <item>generate</item>\n      <item>generic</item>\n      <item>group</item>\n      <item>guarded</item>\n      <item>impure</item>\n      <item>inertial</item>\n      <item>is</item>\n      <item>label</item>\n      <item>linkage</item>\n      <item>literal</item>\n      <item>map</item>\n      <item>new</item>\n      <item>next</item>\n      <item>null</item>\n      <item>of</item>\n      <item>on</item>\n      <item>open</item>\n      <item>others</item>\n      <item>parameter</item>\n      <item>port</item>\n      <item>postponed</item>\n      <item>procedure</item>\n      <item>process</item>\n      <item>property</item>\n      <item>protected</item>\n      <item>pure</item>\n      <item>range</item>\n      <item>record</item>\n      <item>register</item>\n      <item>reject</item>\n      <item>release</item>\n      <item>report</item>\n      <item>return</item>\n      <item>rising_edge</item>\n      <item>select</item>\n      <item>sequence</item>\n      <item>severity</item>\n      <item>signal</item>\n      <item>shared</item>\n      <item>strong</item>\n      <item>subtype</item>\n      <item>to</item>\n      <item>transport</item>\n      <item>type</item>\n      <item>unaffected</item>\n      <item>units</item>\n      <item>until</item>\n      <item>variable</item>\n      <item>vmode</item>\n      <item>vprop</item>\n      <item>vunit</item>\n      <item>wait</item>\n      <item>when</item>\n      <item>with</item>\n      <item>note</item>\n      <item>warning</item>\n      <item>error</item>\n      <item>failure</item>\n      <item>in</item>\n      <item>inout</item>\n      <item>out</item>\n      <item>buffer</item>\n      <item>and</item>\n      <item>abs</item>\n      <item>or</item>\n      <item>xor</item>\n      <item>xnor</item>\n      <item>not</item>\n      <item>mod</item>\n      <item>nand</item>\n      <item>nor</item>\n      <item>rem</item>\n      <item>rol</item>\n      <item>ror</item>\n      <item>sla</item>\n      <item>sra</item>\n      <item>sll</item>\n      <item>srl</item>\n    </list>\n\n    <list name=\"if\">\n      <item>if</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>then</item>\n    </list>\n\n    <list name=\"signals\">\n      <item>signal</item>\n      <item>variable</item>\n      <item>constant</item>\n      <item>type</item>\n      <item>attribute</item>\n    </list>\n\n    <list name=\"range\">\n      <item>to</item>\n      <item>downto</item>\n      <item>others</item>\n    </list>\n\n    <list name=\"case\">\n      <item>case</item>\n      <item>when</item>\n    </list>\n\n    <list name=\"timeunits\">\n      <item>fs</item>\n      <item>ps</item>\n      <item>ns</item>\n      <item>us</item>\n      <item>ms</item>\n      <item>sec</item>\n      <item>min</item>\n      <item>hr</item>\n    </list>\n\n\n    <list name=\"types\">\n      <item>bit</item>\n      <item>bit_vector</item>\n      <item>character</item>\n      <item>boolean</item>\n      <item>boolean_vector</item>\n      <item>integer</item>\n      <item>integer_vector</item>\n      <item>real</item>\n      <item>real_vector</item>\n      <item>time</item>\n      <item>time_vector</item>\n      <item>delay_length</item>\n      <item>string</item>\n      <item>severity_level</item>\n      <item>positive</item>\n      <item>natural</item>\n      <item>file_open_kind</item>\n      <item>file_open_status</item>\n      <item>signed</item>\n      <item>unsigned</item>\n      <item>unresolved_unsigned</item>\n      <item>unresolved_signed</item>\n      <item>line</item>\n      <item>text</item>\n      <item>side</item>\n      <item>width</item>\n      <item>std_logic</item>\n      <item>std_logic_vector</item>\n      <item>std_ulogic</item>\n      <item>std_ulogic_vector</item>\n      <item>x01</item>\n      <item>x01z</item>\n      <item>ux01</item>\n      <item>ux01z</item>\n      <item>qsim_state</item>\n      <item>qsim_state_vector</item>\n      <item>qsim_12state</item>\n      <item>qsim_12state_vector</item>\n      <item>qsim_strength</item>\n      <item>mux_bit</item>\n      <item>mux_vector</item>\n      <item>reg_bit</item>\n      <item>reg_vector</item>\n      <item>wor_bit</item>\n      <item>wor_vector</item>\n    </list>\n\n\n    <contexts>\n\n<!-- start / global environment -->\n      <context name=\"start\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n\n        <RegExpr attribute=\"Control\" context=\"architecture_main\" insensitive=\"true\" dynamic=\"true\" lookAhead=\"true\"\n                 String=\"&bos;architecture\\s+(&varname;)&eos;\"/>\n        <StringDetect attribute=\"Control\" context=\"entity\"\n                 String=\"entity\"/>\n        <RegExpr attribute=\"Control\" context=\"package\" insensitive=\"true\" lookAhead=\"true\" dynamic=\"true\" beginRegion=\"PackageRegion1\"\n                 String=\"&bos;package\\s+(&varname;)\\s+is&eos;\"/>\n        <RegExpr attribute=\"Control\" context=\"packagebody\" lookAhead=\"true\" insensitive=\"true\" dynamic=\"true\" beginRegion=\"PackageBodyRegion1\"\n                 String=\"&bos;package\\s+body\\s+(&varname;)\\s+is&eos;\"/>\n       <!-- <StringDetect  attribute=\"Control\"  context=\"arch_decl\"      String=\"package\"     />temporary-->\n        <RegExpr attribute=\"Control\" context=\"configuration\" insensitive=\"true\" dynamic=\"true\" lookAhead=\"true\"\n                 String=\"&bos;configuration\\s+(&varname;)&eos;\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywordsToplevel\"/>\n      </context>\n\n\n      <context name=\"package\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\"   context=\"#stay\" insensitive=\"true\" String=\"&bos;package&eos;\" />\n        <RegExpr attribute=\"Keyword\"   context=\"packagemain\" insensitive=\"true\" String=\"&bos;is&eos;\" />\n        <RegExpr attribute=\"Name\"      context=\"#stay\"     insensitive=\"true\" String=\"&bos;%2&eos;\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Redirection\" context=\"#pop\"  dynamic=\"true\" endRegion=\"PackageRegion1\" insensitive=\"true\"\n                 String=\"&bos;end(\\s+package)?(\\s+%2)?\\s*;\" />\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"packagemain\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Keyword\"   context=\"#pop\" lookAhead=\"true\" insensitive=\"true\" String=\"&bos;end&eos;\" />\n        <RegExpr attribute=\"Keyword\"   context=\"packagefunction\" insensitive=\"true\" String=\"&bos;function&eos;\" />\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"packagefunction\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <RegExpr attribute=\"Name\" context=\"#pop\" insensitive=\"true\" String=\"&bos;&varname;&eos;\" />\n      </context>\n\n      <!-- package body environment -->\n\n      <context name=\"packagebody\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\"   context=\"#stay\" insensitive=\"true\" String=\"&bos;package&eos;\" />\n        <RegExpr attribute=\"Keyword\"   context=\"packagebodymain\" insensitive=\"true\" String=\"&bos;is&eos;\" />\n        <RegExpr attribute=\"Name\"      context=\"#stay\"     insensitive=\"true\" String=\"&bos;%2&eos;\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Redirection\" context=\"#pop\" dynamic=\"true\" endRegion=\"PackageBodyRegion1\" insensitive=\"true\"\n                 String=\"&bos;end(\\s+package)?(\\s+%2)?\\s*;\" />\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"packagebodymain\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Keyword\"   context=\"#pop\" lookAhead=\"true\" insensitive=\"true\" String=\"&bos;end\\s+package&eos;\" />\n        <RegExpr attribute=\"Keyword\"   context=\"packagebodyfunc1\" beginRegion=\"PackBodyFunc\" insensitive=\"true\" dynamic=\"true\" lookAhead=\"true\" String=\"&bos;function\\s+(&varname;)&eos;\" />\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"packagebodyfunc1\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Redirection\" context=\"packagebodyfunc2\" beginRegion=\"RegionFunction\" insensitive=\"true\" String=\"&bos;begin&eos;\" />\n        <RegExpr attribute=\"Keyword\"   context=\"#pop\" insensitive=\"true\" endRegion=\"PackBodyFunc\" dynamic=\"true\" String=\"&bos;end(\\s+function)?(\\s+%2)?&eos;\" />\n        <RegExpr attribute=\"Name\" context=\"#stay\" insensitive=\"true\" String=\"&bos;%2&eos;\"  dynamic=\"true\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"packagebodyfunc2\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Redirection\" context=\"#pop\" insensitive=\"true\" dynamic=\"true\" lookAhead=\"true\" endRegion=\"RegionFunction\"\n                 String=\"&bos;end(\\s+function)?&eos;\"/>\n        <!--<RegExpr attribute=\"Error\" context=\"#pop\" insensitive=\"true\" dynamic=\"true\" lookAhead=\"true\" endRegion=\"RegionFunction\"\n                 String=\"&bos;end\\s+function(\\s+&varname;)?&eos;\"/>-->\n        <RegExpr attribute=\"Process\" context=\"#stay\" insensitive=\"true\"\n                 String=\"&bos;begin&eos;\"/>\n        <IncludeRules context=\"proc_rules\"/>\n      </context>\n\n\n<!--====ARCHITECTURE ===============-->\n      <context name=\"architecture_main\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"arch_start\" insensitive=\"true\" lookAhead=\"true\" dynamic=\"true\" beginRegion=\"ArchitectureRegion1\"\n                 String=\"&bos;architecture\\s+(&varname;)\\s+of\\s+(&varname;)\\s+is\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" insensitive=\"true\" dynamic=\"true\" endRegion=\"ArchitectureRegion1\"\n                 String=\"&bos;end(\\s+architecture)?(\\s+%2)?\\s*;\"/>\n        <RegExpr attribute=\"Error\" context=\"#pop#pop\" insensitive=\"true\" dynamic=\"true\" endRegion=\"ArchitectureRegion1\"\n                 String=\"&bos;end(\\s+architecture)?(\\s+&varname;)\\s*;\"/>\n        <IncludeRules context=\"detect_arch_parts\"/>\n      </context>\n\n<!-- architecture environment \"before begin\" -->\n      <context name=\"arch_start\" attribute=\"Control\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Keyword\"   context=\"arch_decl\" insensitive=\"true\" String=\"&bos;is&eos;\" />\n        <RegExpr attribute=\"Name\"      context=\"#stay\"     insensitive=\"true\" String=\"&bos;%2&eos;\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Reference\" context=\"#stay\"     insensitive=\"true\" String=\"&bos;%4&eos;\" dynamic=\"true\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"arch_decl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"preDetection\"/>\n        <keyword attribute=\"Signal\" context=\"signal\"          insensitive=\"true\" String=\"signals\"/>\n        <StringDetect attribute=\"Control\" context=\"archfunc1\" insensitive=\"true\" String=\"function\" beginRegion=\"ArchFunctionRegion1\"/>\n        <StringDetect attribute=\"Control\" context=\"entity\"    insensitive=\"true\" String=\"component\"/>\n        <StringDetect attribute=\"Control\" context=\"#pop#pop\"  insensitive=\"true\" String=\"begin\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"archfunc1\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Redirection\" context=\"archfunc2\" beginRegion=\"RegionFunction\" insensitive=\"true\" String=\"&bos;begin&eos;\" />\n        <RegExpr attribute=\"Keyword\"   context=\"#pop\" insensitive=\"true\" endRegion=\"ArchFunctionRegion1\" dynamic=\"true\" String=\"&bos;end(\\s+function)?(\\s+%2)?&eos;\" />\n        <RegExpr attribute=\"Name\" context=\"#stay\" insensitive=\"true\" String=\"&bos;%2&eos;\"  dynamic=\"true\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"archfunc2\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Redirection\" context=\"#pop\" insensitive=\"true\" dynamic=\"true\" lookAhead=\"true\" endRegion=\"RegionFunction\"\n                 String=\"&bos;end(\\s+function)?&eos;\"/>\n        <!--<RegExpr attribute=\"Error\" context=\"#pop\" insensitive=\"true\" dynamic=\"true\" lookAhead=\"true\" endRegion=\"RegionFunction\"\n                 String=\"&bos;end\\s+function(\\s+&varname;)?&eos;\"/>-->\n        <RegExpr attribute=\"Process\" context=\"#stay\" insensitive=\"true\"\n                 String=\"&bos;begin&eos;\"/>\n        <IncludeRules context=\"proc_rules\"/>\n      </context>\n\n\n<!-- parts of architecture body -->\n      <context name=\"detect_arch_parts\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <RegExpr attribute=\"Normal Text\" context=\"generate1\" lookAhead=\"true\" insensitive=\"true\" dynamic=\"true\"\n                 String=\"&bos;(&varname;\\s*:\\s*)(if|for).*\\s+generate&eos;\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"process1\" lookAhead=\"true\" insensitive=\"true\" dynamic=\"true\"\n                 String=\"&bos;(&varname;\\s*:\\s*)?process&eos;\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"instance\" lookAhead=\"true\" insensitive=\"true\" dynamic=\"true\" beginRegion=\"InstanceRegion1\"\n                 String=\"&bos;(&varname;)\\s*:\\s*((entity\\s+)?(&varname;)(\\.&varname;)?)\"/>\n\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n<!--====generate ===============-->\n      <context name=\"generate1\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"generate2\" insensitive=\"true\" beginRegion=\"GenerateRegion\"\n                 String=\"&bos;(generate|loop)&eos;\"/>\n        <RegExpr attribute=\"Name\"      context=\"#stay\" dynamic=\"true\" insensitive=\"true\"\n                 String=\"&bos;%3&eos;\"/>\n        <RegExpr attribute=\"Control\" context=\"#stay\"                insensitive=\"true\"\n                 String=\"&bos;(for|if|while)&eos;\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"generate2\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"#stay\" insensitive=\"true\"\n                 String=\"&bos;begin&eos;\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" insensitive=\"true\" endRegion=\"GenerateRegion\"\n                 String=\"&bos;end\\s+(generate|loop)(\\s+&varname;)?\"/>\n        <IncludeRules context=\"detect_arch_parts\"/>\n      </context>\n\n\n<!--====process ===============-->\n<!-- process environment -->\n\n      <context name=\"process1\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Process\" context=\"#pop\" insensitive=\"true\" dynamic=\"true\" endRegion=\"RegionProcess\"\n                 String=\"&bos;end\\s+process(\\s+%3)?\"/>\n        <RegExpr attribute=\"Error\" context=\"#pop\" insensitive=\"true\" dynamic=\"true\" endRegion=\"RegionProcess\"\n                 String=\"&bos;end\\s+process(\\s+&varname;)?\"/>\n        <RegExpr attribute=\"Process\" context=\"#stay\" insensitive=\"true\" beginRegion=\"RegionProcess\"\n                 String=\"&bos;process&eos;\"/>\n        <RegExpr attribute=\"Process\" context=\"#stay\" insensitive=\"true\"\n                 String=\"&bos;begin&eos;\"/>\n        <IncludeRules context=\"proc_rules\"/>\n      </context>\n\n      <context name=\"proc_rules\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n         <RegExpr attribute=\"Name\" context=\"#stay\" insensitive=\"true\"\n                  String=\"&bos;&varname;(?=\\s*:(?!=))\"/>\n         <RegExpr attribute=\"Control\" context=\"if_start\" insensitive=\"true\"\n                  String=\"&bos;if&eos;\"/>\n         <RegExpr attribute=\"Control\" context=\"case1\" lookAhead=\"true\" insensitive=\"true\"\n                  String=\"&bos;case&eos;\"/>\n         <RegExpr attribute=\"Control\" context=\"forwhile1\" dynamic=\"true\" lookAhead=\"true\" insensitive=\"true\"\n                  String=\"&bos;((&varname;)\\s*:\\s*)?((for|while)\\s+.+\\s+)loop&eos;\"/>\n         <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n\n\n\n<!--====instance =============== -->\n      <!-- When an instance has been detected-->\n      <context name=\"instance\" attribute=\"Error\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Reference\"   context=\"#stay\" String=\"&bos;%4&eos;\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Name\"        context=\"#stay\" String=\"&bos;%3&eos;\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Keyword\"     context=\"instanceMap\" beginRegion=\"InstanceMapRegion\"\n                 String=\"&bos;(port|generic)\\s+map\\s*\\(\" />\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" endRegion=\"InstanceRegion1\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <!-- Inside a port or generic map-->\n      <context name=\"instanceMap\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&lt;;:\"/>\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\":\" />\n        <IncludeRules context=\"preDetection\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" endRegion=\"InstanceMapRegion\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"instanceInnerPar\" char=\"(\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <!-- Inside parantheses inside a map-->\n      <context name=\"instanceInnerPar\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" endRegion=\"instanceInnerPar\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"instanceInnerPar\" char=\"(\"/>\n        <DetectChar attribute=\"Error\" context=\"#stay\" char=\";\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n<!--====loop ===============-->\n      <context name=\"forwhile1\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"forwhile2\" insensitive=\"true\" beginRegion=\"ForWhileRegion\"\n                 String=\"&bos;loop&eos;\"/>\n        <RegExpr attribute=\"Name\"      context=\"#stay\" dynamic=\"true\" insensitive=\"true\"\n                 String=\"&bos;%3&eos;\"/>\n        <RegExpr attribute=\"Control\" context=\"#stay\"                insensitive=\"true\"\n                 String=\"&bos;(for|while)&eos;\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"forwhile2\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"#stay\" insensitive=\"true\"\n                 String=\"&bos;begin&eos;\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" insensitive=\"true\" endRegion=\"ForWhileRegion\"\n                 String=\"&bos;end\\s+loop(\\s+&varname;)?\"/>\n        <IncludeRules context=\"proc_rules\"/>\n      </context>\n\n<!--====if ===============-->\n      <context name=\"if_start\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"if\" insensitive=\"true\" beginRegion=\"IfRegion1\"\n                 String=\"&bos;then&eos;\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"if\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" insensitive=\"true\" endRegion=\"IfRegion1\"\n                 String=\"&bos;end\\s+if(\\s+&varname;)?\\s*;\"/>\n        <IncludeRules context=\"proc_rules\"/>\n        <keyword attribute=\"Control\" context=\"#stay\" insensitive=\"true\" String=\"if\"/>\n      </context>\n\n\n<!--====case ===============-->\n\n      <context name=\"case1\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Keyword\" context=\"case2\" insensitive=\"true\"\n                 String=\"&bos;is&eos;\"/>\n        <keyword attribute=\"Control\" context=\"#stay\" insensitive=\"true\" beginRegion=\"CaseRegion1\" String=\"case\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"case2\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" insensitive=\"true\" endRegion=\"CaseRegion1\"\n                 String=\"&bos;end\\s+case(&varname;)?\\s*;\"/>\n        <RegExpr attribute=\"Control\" context=\"caseWhen\" lookAhead=\"true\" dynamic=\"true\" insensitive=\"true\"\n                 String=\"&bos;when(\\s+&varname;)?&eos;\"/>\n        <IncludeRules context=\"proc_rules\"/>\n      </context>\n\n      <context name=\"caseWhen\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <Detect2Chars char=\"=\" char1=\"&gt;\" attribute=\"Operator\" context=\"caseWhen2\" beginRegion=\"CaseWhenRegion1\"/>\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" insensitive=\"true\"\n                 String=\"&bos;when&eos;\"/>\n        <RegExpr attribute=\"Name\" insensitive=\"true\" dynamic=\"true\"\n                 String=\"&bos;%2&eos;\"/>\n        <IncludeRules context=\"proc_rules\"/>\n      </context>\n\n      <context name=\"caseWhen2\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" lookAhead=\"true\" insensitive=\"true\" endRegion=\"CaseWhenRegion1\" firstNonSpace=\"true\"\n                 String=\"(when|end\\s+case)&eos;\"/>\n        <IncludeRules context=\"proc_rules\"/>\n      </context>\n      <!-- 'when' and 'end case' are checked at the beginning of the line for better code folding -->\n\n\n\n\n<!--====ENTITY ===============-->\n<!-- entity environment -->\n\n      <context name=\"entity\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Name\" context=\"entity_main\" beginRegion=\"EntityRegion1\" insensitive=\"true\"\n                 String=\"(&varname;)\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n\n      <context name=\"entity_main\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" dynamic=\"true\" insensitive=\"true\" endRegion=\"EntityRegion1\"\n                 String=\"&bos;end(\\s+(entity|component))?(\\s+%1)?\\s*;\"/>\n        <RegExpr attribute=\"Error\" context=\"#pop#pop\" dynamic=\"true\" insensitive=\"true\" endRegion=\"EntityRegion1\"\n                 String=\"&bos;end(\\s+(entity|component))?(\\s+&varname;)?\\s*;\"/>\n        <StringDetect attribute=\"Control\" context=\"#stay\" insensitive=\"true\" String=\"generic\"/>\n        <StringDetect attribute=\"Control\" context=\"#stay\" insensitive=\"true\" String=\"port\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n<!--====Configuration ===============-->\n<!-- configuration environment -->\n      <context name=\"configuration\" attribute=\"Normal Text\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Control\" context=\"conf_start\" insensitive=\"true\" lookAhead=\"true\" dynamic=\"true\" beginRegion=\"ConfigurationRegion1\"\n                 String=\"&bos;configuration\\s+(&varname;)\\s+of\\s+(&varname;)\\s+is\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop#pop\" insensitive=\"true\" dynamic=\"true\" endRegion=\"ConfigurationRegion1\"\n                 String=\"&bos;end(\\s+configuration)?(\\s+%2)?\\s*;\"/>\n        <RegExpr attribute=\"Error\" context=\"#pop#pop\" insensitive=\"true\" dynamic=\"true\" endRegion=\"ConfigurationRegion1\"\n                 String=\"&bos;end(\\s+configuration)?(\\s+&varname;)\\s*;\"/>\n      </context>\n\n      <context name=\"conf_start\" attribute=\"Control\" lineEndContext=\"#stay\" dynamic=\"true\">\n        <IncludeRules context=\"preDetection\"/>\n        <RegExpr attribute=\"Keyword\"   context=\"conf_decl\" insensitive=\"true\" String=\"&bos;is&eos;\" />\n        <RegExpr attribute=\"Name\"      context=\"#stay\"     insensitive=\"true\" String=\"&bos;%2&eos;\" dynamic=\"true\"/>\n        <RegExpr attribute=\"Reference\" context=\"#stay\"     insensitive=\"true\" String=\"&bos;%4&eos;\" dynamic=\"true\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"conf_decl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"preDetection\"/>\n        <StringDetect attribute=\"Control\" context=\"conf_for\" insensitive=\"true\" String=\"for\"/>\n        <StringDetect attribute=\"Control\" context=\"#pop#pop\" insensitive=\"true\" lookAhead=\"true\"  String=\"end\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n      <context name=\"conf_for\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"preDetection\"/>\n        <StringDetect attribute=\"Control\" context=\"conf_for\" insensitive=\"true\" String=\"for\"/>\n        <RegExpr attribute=\"Control\" context=\"#pop\" insensitive=\"true\"  String=\"end(\\s+&varname;)?\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n\n\n<!--====Basic Stuff ===============-->\n<!-- basic rules -->\n      <context name=\"preDetection\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"-\" char1=\"-\"/>\n        <DetectChar attribute=\"Vector\" context=\"string\" char=\"&quot;\"/>\n        <AnyChar attribute=\"Operator\" context=\"#stay\" String=\"[&amp;&gt;&lt;=:+\\-*\\/|].,\"/>\n        <DetectChar attribute=\"Attribute\" context=\"attribute\" char=\"'\"/>\n      </context>\n\n\n\n<!-- general detection -->\n      <context name=\"generalDetection\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n        <keyword attribute=\"Data Type\" context=\"#stay\" String=\"timeunits\"/>\n        <keyword attribute=\"Signal\" context=\"signal\" String=\"signals\" beginRegion=\"sig\"/>\n        <keyword attribute=\"Range\" context=\"#stay\" String=\"range\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <Int attribute=\"Integer\" context=\"#stay\"/>\n        <HlCChar attribute=\"Bit\" context=\"#stay\"/>\n        <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n      </context>\n\n<!-- other environments -->\n      <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n\n      <context name=\"string\" attribute=\"Vector\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Vector\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n\n      <context name=\"attribute\" attribute=\"Attribute\" lineEndContext=\"#pop\">\n        <DetectChar attribute=\"Attribute\" context=\"quot in att\" char=\"&quot;\"/>\n        <DetectChar attribute=\"Attribute\" context=\"par in att\" char=\"(\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\" \"/>\n        <DetectChar attribute=\"Attribute\" context=\"#pop\" char=\"'\"/>\n        <AnyChar attribute=\"Attribute\" context=\"#pop\" String=\")=&lt;&gt;\" lookAhead=\"true\" />\n       </context>\n\n      <context name=\"quot in att\" attribute=\"Attribute\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Attribute\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"par in att\" attribute=\"Attribute\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"Attribute\" context=\"#pop\" char=\")\"/>\n      </context>\n\n      <context name=\"signal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <IncludeRules context=\"preDetection\"/>\n        <DetectChar attribute=\"Normal Text\" lookAhead=\"true\" context=\"#pop\" char=\";\" endRegion=\"sig\"/>\n        <IncludeRules context=\"generalDetection\"/>\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Integer\" defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Bit\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Reference\" defStyleNum=\"dsFunction\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\" color=\"#ff0000\" bold=\"1\"/>\n      <itemData name=\"Vector\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Operator\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Attribute\" defStyleNum=\"dsBaseN\"/>\n      <itemData name=\"Signal\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Range\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Redirection\" defStyleNum=\"dsKeyword\" color=\"#223388\"/>\n      <itemData name=\"Process\" defStyleNum=\"dsKeyword\" color=\"#0099AA\"/>\n      <itemData name=\"Control\" defStyleNum=\"dsKeyword\" color=\"#223388\"/>\n      <itemData name=\"Name\" defStyleNum=\"dsKeyword\" color=\"#bb6600\" bold=\"1\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"--\"/>\n    </comments>\n    <keywords casesensitive=\"0\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/vrml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"VRML\" version=\"4\" kateversion=\"2.3\" section=\"3D\" extensions=\"*.wrl\" mimetype=\"model/vrml\" author=\"Volker Krause (vkrause@kde.org)\" license=\"LGPLv2+\">\n\t<highlighting>\n\t\t<list name=\"keywords\">\n\t\t\t<item>DEF</item>\n\t\t\t<item>EXTERNPROTO</item>\n\t\t\t<item>FALSE</item>\n\t\t\t<item>IS</item>\n\t\t\t<item>NULL</item>\n\t\t\t<item>PROTO</item>\n\t\t\t<item>ROUTE</item>\n\t\t\t<item>TO</item>\n\t\t\t<item>TRUE</item>\n\t\t\t<item>USE</item>\n\t\t\t<item>eventIn</item>\n\t\t\t<item>eventOut</item>\n\t\t\t<item>exposedField</item>\n\t\t\t<item>field</item>\n\t\t</list>\n\t\t<list name=\"types\">\n\t\t\t<item>MFColor</item>\n\t\t\t<item>MFFloat</item>\n\t\t\t<item>MFInt32</item>\n\t\t\t<item>MFNode</item>\n\t\t\t<item>MFRotation</item>\n\t\t\t<item>MFString</item>\n\t\t\t<item>MFTime</item>\n\t\t\t<item>MFVec2f</item>\n\t\t\t<item>MFVec3f</item>\n\t\t\t<item>SFBool</item>\n\t\t\t<item>SFColor</item>\n\t\t\t<item>SFFloat</item>\n\t\t\t<item>SFImage</item>\n\t\t\t<item>SFInt32</item>\n\t\t\t<item>SFNode</item>\n\t\t\t<item>SFRotation</item>\n\t\t\t<item>SFString</item>\n\t\t\t<item>SFTime</item>\n\t\t\t<item>SFVec2f</item>\n\t\t\t<item>SFVec3f</item>\n\t\t</list>\n\t\t<list name=\"nodes\">\n\t\t\t<item>Anchor</item>\n\t\t\t<item>AudioClip</item>\n\t\t\t<item>Appearance</item>\n\t\t\t<item>Background</item>\n\t\t\t<item>Billboard</item>\n\t\t\t<item>Box</item>\n\t\t\t<item>Collision</item>\n\t\t\t<item>Color</item>\n\t\t\t<item>ColorInterpolator</item>\n\t\t\t<item>Cone</item>\n\t\t\t<item>Coordinate</item>\n\t\t\t<item>CoordinateInterpolator</item>\n\t\t\t<item>Cylinder</item>\n\t\t\t<item>CylinderSensor</item>\n\t\t\t<item>DirectionalLight</item>\n\t\t\t<item>ElevationGrid</item>\n\t\t\t<item>Extrusion</item>\n\t\t\t<item>Fog</item>\n\t\t\t<item>FontStyle</item>\n\t\t\t<item>Group</item>\n\t\t\t<item>ImageTexture</item>\n\t\t\t<item>IndexedFaceSet</item>\n\t\t\t<item>IndexedLineSet</item>\n\t\t\t<item>Inline</item>\n\t\t\t<item>LOD</item>\n\t\t\t<item>Material</item>\n\t\t\t<item>MovieTexture</item>\n\t\t\t<item>NavigationInfo</item>\n\t\t\t<item>Normal</item>\n\t\t\t<item>NormalInterpolator</item>\n\t\t\t<item>OrientationInterpolator</item>\n\t\t\t<item>PixelTexture</item>\n\t\t\t<item>Plane</item>\n\t\t\t<item>PlaneSensor</item>\n\t\t\t<item>PointLight</item>\n\t\t\t<item>PointSet</item>\n\t\t\t<item>PositionInterpolator</item>\n\t\t\t<item>ProximitySensor</item>\n\t\t\t<item>ScalarInterpolator</item>\n\t\t\t<item>Script</item>\n\t\t\t<item>Shape</item>\n\t\t\t<item>Sensor</item>\n\t\t\t<item>Sound</item>\n\t\t\t<item>Sphere</item>\n\t\t\t<item>SphereSensor</item>\n\t\t\t<item>SpotLight</item>\n\t\t\t<item>Switch</item>\n\t\t\t<item>Text</item>\n\t\t\t<item>TextureCoordinate</item>\n\t\t\t<item>TextureTransform</item>\n\t\t\t<item>TimeSensor</item>\n\t\t\t<item>TouchSensor</item>\n\t\t\t<item>Transform</item>\n\t\t\t<item>Viewpoint</item>\n\t\t\t<item>VisibilitySensor</item>\n\t\t\t<item>WorldInfo</item>\n\t\t</list>\n\t\t<contexts>\n\t\t\t<context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t\t\t\t<keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t\t\t\t<keyword attribute=\"Node\" context=\"#stay\" String=\"nodes\"/>\n\t\t\t\t<keyword attribute=\"Data Type\" context=\"#stay\" String=\"types\"/>\n\t\t\t\t<Float attribute=\"Float\" context=\"#stay\"/>\n\t\t\t\t<HlCHex attribute=\"Hex\" context=\"#stay\"/>\n\t\t\t\t<Int attribute=\"Decimal\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"{\" beginRegion=\"Brace\"/>\n\t\t\t\t<DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"}\" endRegion=\"Brace\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n\t\t\t\t<DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n\t\t\t</context>\n\t\t\t<context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\"/>\n\t\t\t<context attribute=\"String\" lineEndContext=\"#stay\" name=\"String\">\n\t\t\t\t<LineContinue attribute=\"String\" context=\"#stay\"/>\n\t\t\t\t<HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n\t\t\t\t<DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n\t\t\t</context>\n\t\t</contexts>\n\t\t<itemDatas>\n\t\t\t<itemData name=\"Normal Text\"  defStyleNum=\"dsNormal\"/>\n\t\t\t<itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n\t\t\t<itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n\t\t\t<itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n\t\t\t<itemData name=\"Hex\"          defStyleNum=\"dsBaseN\"/>\n\t\t\t<itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n\t\t\t<itemData name=\"String\"       defStyleNum=\"dsString\"/>\n\t\t\t<itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n\t\t\t<itemData name=\"Comment\"      defStyleNum=\"dsComment\"/>\n\t\t\t<itemData name=\"Node\"         defStyleNum=\"dsNormal\" color=\"#000080\" selColor=\"#FFFFFF\" bold=\"1\" italic=\"0\"/>\n\t\t</itemDatas>\n\t</highlighting>\n\t<general>\n\t\t<comments>\n\t\t\t<comment name=\"singleLine\" start=\"#\"/>\n\t\t</comments>\n\t</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/wavefront-obj.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Wavefront OBJ\" version=\"2\" kateversion=\"5.0\" section=\"3D\" extensions=\"*.obj\" mimetype=\"\" author=\"Volker Krause (vkrause@kde.org)\" license=\"LGPLv2+\">\n    <highlighting>\n        <list name=\"keywords\">\n            <item>v</item>\n            <item>vt</item>\n            <item>vn</item>\n            <item>vp</item>\n            <item>cstype</item>\n            <item>deg</item>\n            <item>bmat</item>\n            <item>step</item>\n            <item>p</item>\n            <item>l</item>\n            <item>f</item>\n            <item>curv</item>\n            <item>curv2</item>\n            <item>surf</item>\n            <item>parm</item>\n            <item>trim</item>\n            <item>hole</item>\n            <item>scrv</item>\n            <item>sp</item>\n            <item>end</item>\n            <item>con</item>\n            <item>g</item>\n            <item>s</item>\n            <item>mg</item>\n            <item>o</item>\n            <item>bevel</item>\n            <item>c_interp</item>\n            <item>d_interp</item>\n            <item>lod</item>\n            <item>usemtl</item>\n            <item>mtllib</item>\n            <item>usemap</item>\n            <item>maplib</item>\n            <item>shadow_obj</item>\n            <item>trace_obj</item>\n            <item>ctech</item>\n            <item>stech</item>\n        </list>\n        <contexts>\n            <context name=\"Normal\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n                <DetectSpaces/>\n                <Float attribute=\"Float\" context=\"#stay\"/>\n                <Int attribute=\"Decimal\" context=\"#stay\"/>\n                <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" column=\"0\"/>\n                <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\"/>\n            </context>\n            <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n                <IncludeRules context=\"##Alerts\"/>\n            </context>\n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n            <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\"/>\n            <itemData name=\"Decimal\"     defStyleNum=\"dsDecVal\"/>\n            <itemData name=\"Float\"       defStyleNum=\"dsFloat\"/>\n            <itemData name=\"Comment\"     defStyleNum=\"dsComment\"/>\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\"/>\n        </comments>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/wayland-trace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n\n<language name=\"Wayland Trace\" section=\"Other\"\n          version=\"1\" kateversion=\"3.4\"\n          extensions=\"\"\n          mimetype=\"\"\n          author=\"Andreas Cord-Landwehr (cordlandwehr@kde.org)\" license=\"MIT\">\n\n<highlighting>\n    <list name=\"ParameterKeywords\">\n        <item>array</item>\n        <item>fd</item>\n        <item>id</item>\n        <item>new</item>\n        <item>nil</item>\n    </list>\n\n    <contexts>\n        <context name=\"WaylandTrace\" attribute=\"Normal\" lineEndContext=\"#stay\">\n            <RegExpr attribute=\"TimeStamp\" context=\"#stay\" String=\"\\[[0-9]*\\.[0-9]*\\]\" />\n            <Detect2Chars attribute=\"Operator\" char=\"-\" char1=\">\" context=\"#stay\" />\n            <RegExpr attribute=\"Interface\" String=\"[a-zA-Z0-9_]*@[0-9]*.\" context=\"Interface\" lookAhead=\"true\" />\n        </context>\n        <context name=\"Interface\" attribute=\"Interface\" lineEndContext=\"#pop\">\n            <RegExpr attribute=\"Interface\" String=\"(\\[unknown\\]|[a-zA-Z0-9_])*@[0-9]*\" />\n            <DetectChar char=\".\" context=\"Message\" />\n            <DetectSpaces lookAhead=\"true\" context=\"#pop\" />\n        </context>\n        <context name=\"Message\" attribute=\"Normal\" lineEndContext=\"#stay\" dynamic=\"true\">\n            <RegExpr attribute=\"Function\" String=\"[a-zA-Z_]\" />\n            <DetectChar char=\"(\" attribute=\"Normal\" context=\"Parameters\" />\n        </context>\n        <context name=\"Parameters\" attribute=\"Normal\" lineEndContext=\"#stay\" dynamic=\"true\">\n            <Int attribute=\"NumberParameter\" />\n            <DetectChar attribute=\"StringParameter\" context=\"String\" char=\"&quot;\"/>\n            <keyword attribute=\"Keyword\" String=\"ParameterKeywords\" />\n            <RegExpr attribute=\"Interface\" String=\"(\\[unknown\\]|[a-zA-Z0-9_])*@[0-9]*\" />\n            <DetectChar char=\")\" attribute=\"Normal\" context=\"#pop#pop\" />\n        </context>\n        <context attribute=\"StringParameter\" lineEndContext=\"#pop\" name=\"String\">\n            <LineContinue attribute=\"StringParameter\" context=\"#stay\"/>\n            <HlCStringChar attribute=\"StringParameter\" context=\"#stay\"/>\n            <DetectChar attribute=\"StringParameter\" context=\"#pop\" char=\"&quot;\"/>\n        </context>\n    </contexts>\n    <itemDatas>\n        <itemData name=\"Normal\" defStyleNum=\"dsNormal\" />\n        <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n        <itemData name=\"Interface\" defStyleNum=\"dsVariable\" />\n        <itemData name=\"TimeStamp\" defStyleNum=\"dsComment\" />\n        <itemData name=\"Operator\" defStyleNum=\"dsOperator\" />\n        <itemData name=\"Function\" defStyleNum=\"dsFunction\" />\n        <itemData name=\"NumberParameter\" defStyleNum=\"dsDecVal\" />\n        <itemData name=\"StringParameter\" defStyleNum=\"dsString\" />\n    </itemDatas>\n</highlighting>\n\n</language>\n\n<!-- kate: replace-tabs: on; tab-width: 4; indent-width: 4; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/winehq.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"WINE Config\" version=\"4\" kateversion=\"2.4\" section=\"Configuration\" extensions=\"*.reg\" mimetype=\"\">\n  <highlighting>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <RegExpr String=\"WINE REGISTRY Version.*$\" attribute=\"RegistryBeginEnd\" context=\"#stay\" />\n        <RegExpr String=\"#\\s*&lt;\\s*wineconf\\s*&gt;\" attribute=\"RegistryBeginEnd\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"#\\s*&lt;\\s*\\/\\s*wineconf\\s*&gt;\" attribute=\"RegistryBeginEnd\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\"\\[.*\\]\" attribute=\"Section\" context=\"#stay\" column=\"0\"/>\n        <RegExpr String=\";.*$\" attribute=\"Comment\" context=\"#stay\"/>\n\n        <RegExpr String=\"\\s*&quot;\\s*[a-zA-Z0-9_.:*]*\\s*&quot;\" attribute=\"Key\" context=\"#stay\" />\n\n        <DetectChar char=\"=\" attribute=\"Normal Text\" context=\"Value\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Value\">\n        <RegExpr String=\"\\s*&quot;.*&quot;\" attribute=\"Value\" context=\"#stay\" />\n        <RegExpr String=\";.*$\" attribute=\"Comment\" context=\"#stay\"/>\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Section\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Key\"  defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Value\"  defStyleNum=\"dsNormal\" color=\"#0000FF\" selColor=\"#ffffff\" italic=\"0\" bold=\"1\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"RegistryBeginEnd\"  defStyleNum=\"dsNormal\" color=\"#00AAAA\" selColor=\"#ffffff\" italic=\"0\" bold=\"1\"/>\n    </itemDatas>\n  </highlighting>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/wml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n  Thread for discussions: http://www.wesnoth.org/forum/viewtopic.php?f=21&t=13781\n  Alternatively try the \"normal\" way: #kate@freenode, kwrite-devel@kde.org\n  Changelog (0.35 and later):\n  ***************************\n* 0.42.1\n  - 2019-01-01 <nibgonz@gmail.com>\n    * Fix infinite loop between the \"section\" & \"error\" contexts.\n    * Only highlight tags with valid name format.\n    * Don't highlight array indices as tags.\n    * Use new default styles & fix embedded Lua code.\n* 0.42\n  - 2011-11-15 <shadowm2006@gmail.com>:\n    * Added preprocessor directives: #error, #warning\n    * Added highlighting for the wmlxgettext annotation metadirective (po:)\n* 0.41\n  - 2011-04-15 <shadowm2006@gmail.com>:\n    * Added preprocessor directives: #if(n)have, #if(n)ver\n    * Revalidated against language.dtd\n\n* 0.40\n  - 2010-06-13 <devel@the-user.org>:\n    * Added lua-highlighting between << and >>.\n    * Added pango-highlighting between \" and \"\n    * Folding for macro-strings between paretheses\n    * Changed colors.\n    * This file is licensed under GPLv2+\n\n* 0.37\n  - 2008-03-29 <shadowm2006@gmail.com>:\n    * WML preprocessor directive (define, if) blocks can be collapsed/expanded\n    * attribute_name = \"string\" WML constructs (note the space surrounding '=') are recognized too\n      (designed considering the mainline about.cfg structure case\n    * Changed various context names and styles\n\n- 2008-03-21 <shadowm2006@gmail.com>:\n    * WML nodes and multiline preprocessing macro/include blocks can be collapsed/expanded\n    * WML nodes that are opened and closed in a single line are properly highlighted now\n  * 0.36\n  - 2008-03-05 <shadowm2006@gmail.com>:\n    * Added wmlscope to list of utility control commands\n\n  * 0.35\n  - 2008-02-23 <shadowm2006@gmail.com>:\n    * Made it possible to comment/uncomment line(s) using the default\n      CTRL-D / CTRL-SHIFT-D shortcuts\n  - 2008-01-27 <shadowm2006@gmail.com>:\n    * Added the *.pbl file name pattern\n    * Made the standard alerts (i.e. TODO, HACK, FIXME,...) be highlighted too\n    * Made the key comments for Wesnoth's mainline maintenance scripts be highlighted (at the moment\n      they are only used for wmllint and wmlindent)\n  - 2008-01-?? <shadowm2006@gmail.com>:\n    * Made #textdomain another preprocessor directive, as is handled by the game at /src/serialization/preprocessor.cpp\n      line 634 and around\n  - 2007-11-?? <shadowm2006@gmail.com>:\n    * Minor improvements?\n  - 2007-11-?? <shadowm2006@gmail.com>:\n    * Made the new #ifndef directive be recognized (implemented on Wesnoth 1.3.11 and later)\n-->\n\n<language name=\"Wesnoth Markup Language\" section=\"Markup\" extensions=\"*.cfg;*.pbl;*.CFG;*.PBL\" version=\"5\"\n          kateversion=\"5.0\" casesensitive=\"true\" author=\"Zachary Palmer (zep01@bahj.com), modif. by Ignacio Riquelme Morelle (shadowm2006@gmail.com) and Jonathan Schmidt-Dominé (devel@the-user.org)\" license=\"GPL\">\n    <highlighting>\n        <list name=\"alerts_wml_utils\">\n            <item>wmllint</item>\n            <item>wmlindent</item>\n            <item>wmlscope</item>\n            <item>po</item>\n        </list>\n        <list name=\"preprocessor_directive_statements\">\n                <item>#textdomain</item>\n                <item>#else</item>\n                <item>#undef</item>\n                <item>#error</item>\n                <item>#warning</item>\n        </list>\n        <list name=\"preprocessor_block_begin_statements\">\n                <item>#define</item>\n                <item>#ifdef</item>\n                <item>#ifndef</item>\n                <item>#ifhave</item>\n                <item>#ifnhave</item>\n                <item>#ifver</item>\n                <item>#ifnver</item>\n        </list>\n        <list name=\"preprocessor_block_end_statements\">\n                <item>#enddef</item>\n                <item>#endif</item>\n        </list>\n        <contexts>            \n            <!-- Main contexts -->\n            <context attribute=\"Normal WML Text\" name=\"text\" lineEndContext=\"#stay\">\n                <RegExpr String=\"(_ *)?&quot;\" attribute=\"String\" context=\"string\" />\n                \n                <RegExpr String=\" *&lt;&lt;\" attribute=\"String\" context=\"luastring\" beginRegion=\"wml_lua\" />\n                \n                <keyword String=\"preprocessor_directive_statements\" attribute=\"Preprocessor\" context=\"preprocessor\" />\n                <keyword String=\"preprocessor_block_begin_statements\" attribute=\"Preprocessor\" context=\"preprocessor\" beginRegion=\"wmlpp_block\" />\n                <keyword String=\"preprocessor_block_end_statements\" attribute=\"Preprocessor\" context=\"preprocessor\" endRegion=\"wmlpp_block\" />\n                \n                <DetectChar char=\"#\" attribute=\"Comment\" context=\"comment\" />\n                \n                <DetectChar char=\"{\" attribute=\"Macro/Include\" context=\"macro\" beginRegion=\"macro_block\" />\n\n                <!-- Tags: https://wiki.wesnoth.org/SyntaxWML#Tag_and_Attribute_Structures -->\n                <RegExpr String=\"\\[/\\s*\\w*\\s*\\]\" attribute=\"WML Node\" context=\"#stay\" endRegion=\"wml_node\" />\n                <RegExpr String=\"\\[\\+?\\w*\\]\" attribute=\"WML Node\" context=\"#stay\" beginRegion=\"wml_node\" />\n\n                <RegExpr String=\"(\\w|,| )+=\" attribute=\"WML Attribute\" context=\"value\"\n                                    lookAhead=\"true\" />\n                \n                <IncludeRules context=\"variableSubstitutionRule\" />\n                \n                <!-- This avoids highlighting array indices as tags -->\n                <RegExpr String=\"(\\w+|\\])\\[(?!/)\" attribute=\"Normal WML Text\" context=\"#stay\" />\n            </context>\n            \n            <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\">\n                <DetectChar char=\"&quot;\" attribute=\"String\" context=\"#pop\" />\n                <DetectChar char=\"{\" attribute=\"Macro/Include\" context=\"macro\" />\n                <IncludeRules context=\"variableSubstitutionRule\" />\n                <IncludeRules context=\"##Pango\" includeAttrib=\"false\"/>\n            </context>\n\n            <context attribute=\"Normal WML Text\" name=\"luastring\" lineEndContext=\"#stay\">\n                <Detect2Chars char=\"&gt;\" char1=\"&gt;\" attribute=\"String\" context=\"#pop\" endRegion=\"wml_lua\" />\n                <IncludeRules context=\"Normal##Lua\" includeAttrib=\"true\"/>\n            </context>\n            \n            <context attribute=\"Normal WML Text\" name=\"luamacrostring\" lineEndContext=\"#stay\">\n                <Detect2Chars char=\"&gt;\" char1=\"&gt;\" attribute=\"Macro String\" context=\"#pop\" endRegion=\"wml_lua\" />\n                <IncludeRules context=\"Normal##Lua\" includeAttrib=\"true\"/>\n            </context>\n            \n            <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n                <keyword attribute=\"Maintenance script statement\" context=\"#stay\" String=\"alerts_wml_utils\" />\n                <IncludeRules context=\"##Alerts\" />\n            </context>\n            \n            <context attribute=\"Macro/Include\" lineEndContext=\"#stay\" name=\"macro\">\n                <DetectChar char=\"{\" attribute=\"Macro/Include\" context=\"macro\" beginRegion=\"macro_block\"/>\n                <RegExpr String=\"(_ *)?&quot;\" attribute=\"Macro String\" context=\"macroString\" />\n                <RegExpr String=\" *&lt;&lt;\" attribute=\"Macro String\" context=\"luamacrostring\" beginRegion=\"wml_lua\" />\n                <DetectChar char=\"(\" attribute=\"Macro String\" context=\"macroString2\" beginRegion=\"macro_paren_string\" />\n                <DetectChar char=\"}\" attribute=\"Macro/Include\" context=\"#pop\" endRegion=\"macro_block\" />\n                <IncludeRules context=\"variableSubstitutionRule\" />\n            </context>\n            \n            <context attribute=\"Macro String\" lineEndContext=\"#stay\" name=\"macroString\">\n                <DetectChar char=\"&quot;\" attribute=\"Macro String\" context=\"#pop\" />\n                <DetectChar char=\"{\" attribute=\"Macro/Include\" context=\"macro\" beginRegion=\"macro_block\" />\n                <IncludeRules context=\"variableSubstitutionRule\" />\n                <IncludeRules context=\"##Pango\" includeAttrib=\"false\"/>\n            </context>\n            \n            <context attribute=\"Macro String\" lineEndContext=\"#stay\" name=\"macroString2\">\n                <DetectChar char=\")\" attribute=\"Macro String\" context=\"#pop\" endRegion=\"macro_paren_string\" />\n                <DetectChar char=\"{\" attribute=\"Macro/Include\" context=\"macro\" beginRegion=\"macro_block\" />\n                <IncludeRules context=\"text\" />\n            </context>\n            \n            <context attribute=\"WML Attribute\" lineEndContext=\"#pop\" name=\"value\">\n                <DetectChar char=\"=\" attribute=\"Normal WML Text\" context=\"#pop\" />\n            </context>\n            \n            <context attribute=\"Preprocessor\" lineEndContext=\"#pop\" name=\"preprocessor\">\n            </context>\n            \n            <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"error\">\n            </context>\n            \n            <context attribute=\"Variable Substitution\" lineEndContext=\"#pop\"\n                     name=\"variableSubstitution\">\n                <DetectChar char=\"|\" attribute=\"Variable Substitution\" context=\"#pop\" />\n                <DetectChar char=\"$\" attribute=\"Variable Substitution\" context=\"variableSubstitution\" />\n                <DetectChar char=\"[\" attribute=\"Variable Subscript\" context=\"variableSubscript\" />\n                <RegExpr String=\"[^A-Za-z0-9_\\.]\" attribute=\"Variable Substitution\" context=\"#pop\"\n                         lookAhead=\"true\" />\n            </context>\n            \n            <context attribute=\"Variable Subscript\" lineEndContext=\"error\" name=\"variableSubscript\">\n                <DetectChar char=\"]\" attribute=\"Variable Subscript\" context=\"#pop\" />\n            </context>\n            \n            <!-- Include contexts -->\n            <context attribute=\"Variable Substitution\" lineEndContext=\"#pop\" name=\"variableSubstitutionRule\">\n                <DetectChar char=\"$\" attribute=\"Variable Substitution\" context=\"variableSubstitution\" />\n            </context>\n            \n        </contexts>\n        <itemDatas>\n            <itemData name=\"Normal WML Text\" defStyleNum=\"dsNormal\" />\n            <itemData name=\"Maintenance script statement\" defStyleNum=\"dsAlert\"/>\n            <itemData name=\"String\" defStyleNum=\"dsString\" />\n            <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n            <itemData name=\"Macro/Include\" defStyleNum=\"dsFunction\" />\n            <itemData name=\"WML Node\" defStyleNum=\"dsKeyword\" />\n            <itemData name=\"WML Attribute\" defStyleNum=\"dsAttribute\" />\n            <itemData name=\"Preprocessor\" defStyleNum=\"dsPreprocessor\" />\n            <itemData name=\"Error\" defStyleNum=\"dsError\" />\n            <itemData name=\"Macro String\" defStyleNum=\"dsChar\" />\n            <itemData name=\"Variable Substitution\" defStyleNum=\"dsDecVal\" />\n            <itemData name=\"Variable Subscript\" defStyleNum=\"dsBaseN\" />\n        </itemDatas>\n    </highlighting>\n    <general>\n        <comments>\n            <comment name=\"singleLine\" start=\"#\"/>\n        </comments>\n        <keywords casesensitive=\"1\"/>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/xharbour.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"xHarbour\" version=\"3\" kateversion=\"2.4\" section=\"Sources\" extensions=\"*.prg;*.PRG;*.ch\" mimetype=\"text/x-xharbour-src\" priority=\"5\" author=\"Giancarlo Niccolai (giancarlo@niccolai.ws)\" license=\"GPL\">\n<highlighting>\n\n   <list name=\"keywords\">\n      <item>local</item>\n      <item>global</item>\n      <item>extern</item>\n      <item>field</item>\n      <item>each</item>\n      <item>as</item>\n      <item>set</item>\n      <item>clear</item>\n      <item>screen</item>\n      <item>databases</item>\n      <item>all</item>\n      <item>close</item>\n      <item>color</item>\n      <item>date</item>\n      <item>else</item>\n      <item>elseif</item>\n      <item>in</item>\n      <item>to</item>\n      <item>do</item>\n      <item>loop</item>\n      <item>catch</item>\n      <item>exit</item>\n      <item>box</item>\n      <item>say</item>\n      <item>case</item>\n      <item>switch</item>\n      <item>self</item>\n      <item>super</item>\n      <item>say</item>\n      <item>get</item>\n      <item>read</item>\n      <item>use</item>\n      <item>select</item>\n      <item>otherwise</item>\n      <item>index</item>\n      <item>alias</item>\n      <item>like</item>\n      <item>has</item>\n      <item>return</item>\n      <item>static</item>\n      <item>on</item>\n      <item>off</item>\n      <item>nil</item>\n      <item>?</item>\n      <item>class</item>\n      <item>external</item>\n   </list>\n\n   <list name=\"context_beginners\">\n      <item>FOR</item>\n      <item>IF</item>\n      <item>SWITCH</item>\n      <item>WHILE</item>\n      <item>TRY</item>\n      <item>BEGIN</item>\n      <item>PROCEDURE</item>\n      <item>FUNCTION</item>\n      <item>METHOD</item>\n   </list>\n\n   <list name=\"context_terminators\">\n      <item>NEXT</item>\n      <item>END</item>\n      <item>ENDIF</item>\n      <item>ENDDO</item>\n      <item>ENDCASE</item>\n   </list>\n\n   <list name=\"class_keywords\">\n      <item>data</item>\n      <item>inline</item>\n      <item>method</item>\n      <item>classdata</item>\n      <item>init</item>\n      <item>from</item>\n      <item>hidden</item>\n   </list>\n\n   <list name=\"set_commands\">\n      <item>INVALID</item>\n      <item>EXACT</item>\n      <item>FIXED</item>\n      <item>DECIMALS</item>\n      <item>DATEFORMAT</item>\n      <item>EPOCH</item>\n      <item>PATH</item>\n      <item>DEFAULT</item>\n      <item>EXCLUSIVE</item>\n      <item>SOFTSEEK</item>\n      <item>UNIQUE</item>\n      <item>DELETED</item>\n      <item>CANCEL</item>\n      <item>DEBUG</item>\n      <item>TYPEAHEAD</item>\n      <item>COLOR</item>\n      <item>CURSOR</item>\n      <item>CONSOLE</item>\n      <item>ALTERNATE</item>\n      <item>ALTFILE</item>\n      <item>DEVICE</item>\n      <item>EXTRA</item>\n      <item>EXTRAFILE</item>\n      <item>PRINTER</item>\n      <item>PRINTFILE</item>\n      <item>MARGIN</item>\n      <item>BELL</item>\n      <item>CONFIRM</item>\n      <item>ESCAPE</item>\n      <item>INSERT</item>\n      <item>EXIT</item>\n      <item>INTENSITY</item>\n      <item>SCOREBOARD</item>\n      <item>DELIMITERS</item>\n      <item>DELIMCHARS</item>\n      <item>WRAP</item>\n      <item>MESSAGE</item>\n      <item>MCENTER</item>\n      <item>SCROLLBREAK</item>\n      <item>EVENTMASK</item>\n      <item>VIDEOMODE</item>\n      <item>MBLOCKSIZE</item>\n      <item>MFILEEXT</item>\n      <item>STRICTREAD</item>\n      <item>OPTIMIZE</item>\n      <item>AUTOPEN</item>\n      <item>AUTORDER</item>\n      <item>AUTOSHARE</item>\n      <item>LANGUAGE</item>\n      <item>IDLEREPEAT</item>\n      <item>TRACE</item>\n      <item>TRACEFILE</item>\n      <item>TRACESTACK</item>\n      <item>FILECASE</item>\n      <item>DIRCASE</item>\n      <item>DIRSEPARATOR</item>\n   </list>\n\n   <list name=\"functions\">\n      <item>aadd</item>\n      <item>adel</item>\n      <item>achoice</item>\n      <item>aclone</item>\n      <item>aeval</item>\n      <item>ains</item>\n      <item>ascan</item>\n      <item>asize</item>\n      <item>adir</item>\n      <item>afill</item>\n      <item>atail</item>\n      <item>asort</item>\n      <item>array</item>\n      <item>TAssociativeArray</item>\n\n      <item>bin21</item>\n      <item>bin2l</item>\n      <item>bin2u</item>\n      <item>bin2w</item>\n      <item>i2bin</item>\n      <item>l2bin</item>\n      <item>u2bin</item>\n      <item>w2bin</item>\n\n      <item>eval</item>\n      <item>fieldblock</item>\n      <item>fieldwblock</item>\n\n      <item>inkey</item>\n      <item>lastkey</item>\n      <item>mcol</item>\n      <item>mrow</item>\n      <item>nextkey</item>\n\n      <item>empty</item>\n      <item>word</item>\n      <item>descend</item>\n      <item>__dbdelim</item>\n      <item>__dbsdf</item>\n\n      <item>os</item>\n      <item>__run</item>\n\n      <item>alert</item>\n      <item>browse</item>\n      <item>dbedit</item>\n      <item>outerr</item>\n      <item>outstd</item>\n      <item>readkey</item>\n      <item>readvar</item>\n      <item>__atprompt</item>\n      <item>__input</item>\n      <item>__menuto</item>\n      <item>__nonoallert</item>\n      <item>__typefile</item>\n      <item>__xrestscreen</item>\n      <item>__xsavescreen</item>\n\n      <item>DBAPPEND</item>\n      <item>DBCLEARFILTER</item>\n      <item>DBCLOSEALL</item>\n      <item>DBCLOSEAREA</item>\n      <item>DBCOMMIT</item>\n      <item>DBCOMMITALL</item>\n      <item>DBCREATE</item>\n      <item>DBDELETE</item>\n      <item>DBEVAL</item>\n      <item>DBF</item>\n      <item>DBFILTER</item>\n      <item>DBGOBOTTOM</item>\n      <item>DBGOTO</item>\n      <item>DBGOTOP</item>\n      <item>DBRECALL</item>\n      <item>DBRLOCK</item>\n      <item>DBRLOCKLIST</item>\n      <item>DBRUNLOCK</item>\n      <item>DBSEEK</item>\n      <item>DBSELECTAREA</item>\n      <item>DBSETDRIVER</item>\n      <item>DBSETFILTER</item>\n      <item>DBSKIP</item>\n      <item>DBSTRUCT</item>\n      <item>DBUNLOCK</item>\n      <item>DBUNLOCKALL</item>\n      <item>DBUSEAREA</item>\n      <item>INDEXEXT</item>\n      <item>INDEXKEY</item>\n      <item>INDEXORD</item>\n      <item>ORDBAGEXT</item>\n      <item>ORDBAGNAME</item>\n      <item>ORDCONDSET</item>\n      <item>ORDCREATE</item>\n      <item>ORDDESTROY</item>\n      <item>ORDFOR</item>\n      <item>ORDKEY</item>\n      <item>ORDLISTADD</item>\n      <item>ORDLISTCLEAR</item>\n      <item>ORDLISTREBUILD</item>\n      <item>ORDNAME</item>\n      <item>ORDNUMBER</item>\n      <item>ORDSETFOCUS</item>\n      <item>RDDLIST</item>\n      <item>RDDNAME</item>\n      <item>RDDSETDEFAULT</item>\n      <item>__DBCONTINUE</item>\n      <item>__DBZAP</item>\n      <item>__FLEDIT</item>\n      <item>__RDDSETDEFAULT</item>\n      <item>__dbCopyStruct</item>\n      <item>__dbCopyXStruct</item>\n      <item>__dbCreate</item>\n      <item>__dbStructFilter</item>\n      <item>dbSkipper</item>\n      <item>CDOW</item>\n      <item>CMONTH</item>\n      <item>CTOD</item>\n      <item>DATE</item>\n      <item>DAY</item>\n      <item>DAYS</item>\n      <item>DOW</item>\n      <item>DTOC</item>\n      <item>DTOS</item>\n      <item>MONTH</item>\n      <item>YEAR</item>\n\n      <item>GETENV</item>\n      <item>SET</item>\n      <item>SETMODE</item>\n      <item>SETTYPEAHEAD</item>\n      <item>VERSION</item>\n      <item>__SETCENTURY</item>\n      <item>__SetFunction</item>\n\n      <item>break</item>\n      <item>errorsys</item>\n      <item>throw</item>\n      <item>errornew</item>\n\n      <item>HB_SETKEYSAVE</item>\n      <item>HB_SetKeyCheck</item>\n      <item>HB_SetKeyGet</item>\n      <item>SETKEY</item>\n      <item>__QUIT</item>\n      <item>__WAIT</item>\n\n      <item>file</item>\n      <item>frename</item>\n      <item>__dir</item>\n\n      <item>col</item>\n      <item>maxcol</item>\n      <item>maxrow</item>\n      <item>row</item>\n      <item>hb_colorindex</item>\n\n      <item>CURDIR</item>\n      <item>DIRCHANGE</item>\n      <item>DIRREMOVE</item>\n      <item>DISKSPACE</item>\n      <item>FCLOSE</item>\n      <item>FCREATE</item>\n      <item>FERASE</item>\n      <item>FERROR</item>\n      <item>FOPEN</item>\n      <item>FREAD</item>\n      <item>FREADSTR</item>\n      <item>FSEEK</item>\n      <item>FWRITE</item>\n      <item>HB_DISKSPACE</item>\n      <item>HB_FEOF</item>\n      <item>ISDISK</item>\n      <item>MAKEDIR</item>\n\n      <item>ABS</item>\n      <item>EXP</item>\n      <item>INT</item>\n      <item>LOG</item>\n      <item>MAX</item>\n      <item>MIN</item>\n      <item>MOD</item>\n      <item>ROUND</item>\n      <item>SQRT</item>\n\n      <item>HB_ISBYREF</item>\n      <item>PROCFILE</item>\n      <item>PROCLINE</item>\n      <item>PROCNAME</item>\n      <item>TYPE</item>\n      <item>VALTYPE</item>\n      <item>valtoprg</item>\n      <item>tone</item>\n\n      <item>HB_LANGNAME</item>\n      <item>HB_LANGSELECT</item>\n      <item>ISAFFIRM</item>\n      <item>ISNEGATIVE</item>\n      <item>NATIONMSG</item>\n\n      <item>pcount</item>\n      <item>HB_pvalue</item>\n\n      <item>ALLTRIM</item>\n      <item>ASC</item>\n      <item>AT</item>\n      <item>CHR</item>\n      <item>HARDCR</item>\n      <item>HB_ANSITOOEM</item>\n      <item>HB_OEMTOANSI</item>\n      <item>HB_VALTOSTR</item>\n      <item>ISALPHA</item>\n      <item>ISDIGIT</item>\n      <item>ISLOWER</item>\n      <item>ISUPPER</item>\n      <item>LEFT</item>\n      <item>LEN</item>\n      <item>LOWER</item>\n      <item>LTRIM</item>\n      <item>MEMOTRAN</item>\n      <item>PADC</item>\n      <item>PADL</item>\n      <item>PADR</item>\n      <item>RAT</item>\n      <item>REPLICATE</item>\n      <item>RIGHT</item>\n      <item>RTRIM</item>\n      <item>SPACE</item>\n      <item>STR</item>\n      <item>STRTRAN</item>\n      <item>STRZERO</item>\n      <item>SUBSTR</item>\n      <item>TRANSFORM</item>\n      <item>TRIM</item>\n      <item>UPPER</item>\n      <item>VAL</item>\n\n      <item>devoutpict</item>\n\n      <item>elaptime</item>\n      <item>seconds</item>\n      <item>secs</item>\n      <item>time</item>\n\n      <item>do</item>\n\n      <item>ThreadStart</item>\n      <item>ThreadStop</item>\n      <item>ThreadSleep</item>\n      <item>ThreadKill</item>\n      <item>ThreadJoin</item>\n      <item>CreateMutex</item>\n      <item>DestroyMutex</item>\n      <item>MutexLock</item>\n      <item>MutexUnlock</item>\n      <item>Subscribe</item>\n      <item>SubscribeNow</item>\n      <item>Notify</item>\n      <item>NotifyAll</item>\n      <item>WaitForThreads</item>\n      <item>KillAllThreads</item>\n\n      <item>InetInit</item>\n      <item>InetCleanup</item>\n      <item>InetCreate</item>\n      <item>InetDestroy</item>\n      <item>InetConnect</item>\n      <item>InetServer</item>\n      <item>InetAccept</item>\n      <item>InetSetTimeout</item>\n      <item>InetGetTimeout</item>\n      <item>InetClearTimeout</item>\n      <item>InetRecv</item>\n      <item>InetRecvAll</item>\n      <item>InetSend</item>\n      <item>InetSendAll</item>\n      <item>InetDGram</item>\n      <item>InetDGramRecv</item>\n      <item>InetDGramSend</item>\n      <item>InetAddress</item>\n      <item>InetPort</item>\n      <item>InetError</item>\n      <item>InetErrorDesc</item>\n      <item>InetGetHosts</item>\n      <item>InetConnectIP</item>\n\n      <item>hb_regex</item>\n      <item>hb_regexmatch</item>\n      <item>hb_regexsplit</item>\n      <item>hb_regexcomp</item>\n      <item>hb_readini</item>\n      <item>hb_writeini</item>\n      <item>hb_random</item>\n      <item>hb_chechsum</item>\n      <item>hb_crypt</item>\n      <item>hb_decrypt</item>\n      <item>hb_hextonum</item>\n      <item>hb_numtohex</item>\n      <item>hb_exec</item>\n      <item>hb_execfromarray</item>\n\n      <item>hb_class</item>\n      <item>hb_keyput</item>\n      <item>hb_osnewline</item>\n\n   </list>\n\n   <list name=\"pragma\">\n      <item>#include</item>\n      <item>#if</item>\n      <item>#ifdef</item>\n      <item>#ifndef</item>\n      <item>#endif</item>\n      <item>#else</item>\n      <item>#define</item>\n   </list>\n\n   <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"TopLevel\">\n\n         <Detect2Chars attribute=\"Comment\" context=\"ml_comment\" char=\"/\" char1=\"*\" beginRegion=\"comment_region\"/>\n         <DetectChar attribute=\"Comment\" context=\"comment\" char=\"*\" firstNonSpace=\"true\"/>\n         <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"/\" />\n\n         <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\" />\n         <DetectChar attribute=\"String\" context=\"stringc\" char=\"'\" />\n\n         <StringDetect attribute=\"Operator\" context=\"#stay\" String=\".and.\" insensitive=\"true\"/>\n         <StringDetect attribute=\"Operator\" context=\"#stay\" String=\".or.\" insensitive=\"true\"/>\n         <StringDetect attribute=\"Operator\" context=\"#stay\" String=\".not.\" insensitive=\"true\"/>\n         <StringDetect attribute=\"Operator\" context=\"#stay\" String=\".f.\" insensitive=\"true\"/>\n         <StringDetect attribute=\"Operator\" context=\"#stay\" String=\".t.\" insensitive=\"true\"/>\n\n         <AnyChar attribute=\"Operator\" context=\"#stay\" String=\":=!\" />\n         <DetectChar attribute=\"Keyword\" context=\"#stay\" char=\"@\"/>\n\n         <RegExpr String=\"CLASS[\\t ]+\" attribute=\"Keyword\" context=\"ClassContext\" insensitive=\"true\" beginRegion=\"ClassDeclRegion\" firstNonSpace=\"true\"/>\n\n         <RegExpr String=\"DO[\\t ]+CASE[\\t ]*$\" attribute=\"Keyword\" context=\"#stay\" insensitive=\"true\" beginRegion=\"IndentRegion\" firstNonSpace=\"true\"/>\n         <keyword attribute=\"Keyword\" context=\"#stay\" String=\"context_beginners\" beginRegion=\"IndentRegion\" />\n         <keyword attribute=\"Keyword\" context=\"#stay\" String=\"context_terminators\" endRegion=\"IndentRegion\" />\n         <RegExpr String=\"return ?\" attribute=\"Keyword\" context=\"#stay\" insensitive=\"true\" endRegion=\"IndentRegion\" column=\"0\"/>\n\n         <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n         <keyword attribute=\"Keyword\" context=\"#stay\" String=\"set_commands\" />\n         <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n         <keyword attribute=\"Preprocessor\" context=\"#stay\" String=\"pragma\" />\n         <Detect2Chars attribute=\"Operator\" context=\"#stay\" char=\"-\" char1=\">\" />\n         <RegExpr attribute=\"Number\" context=\"#stay\" String=\"\\d+\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\"/>\n\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"ml_comment\">\n         <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"comment_region\"/>\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"string\">\n         <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"stringc\">\n         <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ClassContext\">\n\n         <Detect2Chars attribute=\"Comment\" context=\"ml_comment\" char=\"/\" char1=\"*\" beginRegion=\"comment_region\"/>\n         <DetectChar attribute=\"Comment\" context=\"comment\" char=\"*\" firstNonSpace=\"true\"/>\n         <Detect2Chars attribute=\"Comment\" context=\"comment\" char=\"/\" char1=\"/\" />\n\n         <keyword attribute=\"Keyword\" context=\"#stay\" String=\"class_keywords\" />\n         <RegExpr String=\"END(CLASS)? *$\" attribute=\"Keyword\" context=\"#pop\" insensitive=\"true\" endRegion=\"ClassDeclRegion\" firstNonSpace=\"true\"/>\n      </context>\n\n   </contexts>\n\n   <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Operator\"  defStyleNum=\"dsBaseN\" color=\"#A01060\" selColor=\"#400040\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Number\"  defStyleNum=\"dsDecVal\" color=\"#5050C0\" selColor=\"#000000\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"Function\"  defStyleNum=\"dsFunction\" />\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"Preprocessor\"  defStyleNum=\"dsOthers\"/>\n   </itemDatas>\n</highlighting>\n\n<general>\n   <comments>\n      <comment name=\"singleLine\" start=\"*\" />\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n   </comments>\n   <keywords casesensitive=\"0\" />\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/xml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!-- names must start with a letter, ideogram or underscore. \\w matches any\n\t\t word character *or* a number, hence the lookahead -->\n\t<!ENTITY name    \"(?![0-9])[\\w_:][\\w.:_-]*\">\n\t<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n]>\n<language name=\"XML\" version=\"9\" kateversion=\"3.4\" section=\"Markup\" extensions=\"*.docbook;*.xml;*.rc;*.daml;*.rdf;*.rss;*.xspf;*.xsd;*.svg;*.ui;*.kcfg;*.qrc;*.wsdl;*.scxml;*.xbel;*.dae;*.sch;*.brd\" mimetype=\"text/xml;text/book;text/daml;text/rdf;application/rss+xml;application/xspf+xml;image/svg+xml;application/x-designer;application/x-xbel;application/xml;application/scxml+xml\" casesensitive=\"1\" indenter=\"xml\" author=\"Wilbert Berendsen (wilbert@kde.nl)\" license=\"LGPL\">\n\n<highlighting>\n<contexts>\n  <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"FindXML\" />\n  </context>\n\n  <context name=\"FindXML\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectSpaces />\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <StringDetect attribute=\"CDATA\" context=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n    <RegExpr attribute=\"Doctype\" context=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" beginRegion=\"doctype\" />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:_-]*\" beginRegion=\"pi\" />\n    <RegExpr attribute=\"Element\" context=\"Element\" String=\"&lt;&name;\" beginRegion=\"element\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n    <DetectIdentifier />\n  </context>\n\n  <context name=\"FindEntityRefs\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;&lt;\" />\n  </context>\n\n  <context name=\"FindPEntityRefs\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <RegExpr attribute=\"PEntityRef\" context=\"#stay\" String=\"%&name;;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;%\" />\n  </context>\n\n\n  <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <DetectSpaces />\n    <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"-(-(?!-&gt;))+\" />\n    <IncludeRules context=\"##Alerts\" />\n    <DetectIdentifier />\n  </context>\n\n  <context name=\"CDATA\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectSpaces />\n    <DetectIdentifier />\n    <StringDetect attribute=\"CDATA\" context=\"#pop\" String=\"]]&gt;\" endRegion=\"cdata\" />\n    <StringDetect attribute=\"EntityRef\" context=\"#stay\" String=\"]]&amp;gt;\" />\n  </context>\n\n  <context name=\"PI\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n  </context>\n\n  <context name=\"Doctype\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" endRegion=\"doctype\" />\n    <DetectChar attribute=\"Doctype\" context=\"Doctype Internal Subset\" char=\"[\" beginRegion=\"int_subset\" />\n  </context>\n\n  <context name=\"Doctype Internal Subset\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"]\" endRegion=\"int_subset\" />\n    <RegExpr attribute=\"Doctype\" context=\"Doctype Markupdecl\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:_-]*\" beginRegion=\"pi\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Element\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"element\" />\n    <DetectChar attribute=\"Element\" context=\"El Content\" char=\"&gt;\" />\n    <RegExpr attribute=\"Attribute\" context=\"Attribute\" String=\"^&name;\" />\n    <RegExpr attribute=\"Attribute\" context=\"Attribute\" String=\"\\s+&name;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Content\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El End\" String=\"&lt;/&name;\" />\n    <IncludeRules context=\"FindXML\" />\n  </context>\n\n  <context name=\"El End\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop#pop#pop\" char=\"&gt;\" endRegion=\"element\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Attribute\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Value\" attribute=\"Other Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"Value DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Value SQ\" char=\"&apos;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Value DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <context name=\"Value SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n</contexts>\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Other Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Comment\" defStyleNum=\"dsComment\" spellChecking=\"false\" />\n  <itemData name=\"CDATA\" defStyleNum=\"dsBaseN\" bold=\"1\" spellChecking=\"false\" />\n  <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n  <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" spellChecking=\"false\" />\n  <itemData name=\"Element\" defStyleNum=\"dsKeyword\" spellChecking=\"false\" />\n  <itemData name=\"Attribute\" defStyleNum=\"dsOthers\" spellChecking=\"false\" />\n  <itemData name=\"Value\" defStyleNum=\"dsString\" spellChecking=\"false\" />\n  <itemData name=\"EntityRef\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n  <itemData name=\"PEntityRef\" defStyleNum=\"dsDecVal\" spellChecking=\"false\" />\n  <itemData name=\"Error\" defStyleNum=\"dsError\" spellChecking=\"false\" />\n</itemDatas>\n\n</highlighting>\n<general>\n  <comments>\n    <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n  </comments>\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/xmldebug.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language version=\"9\" kateversion=\"5.0\" name=\"XML (Debug)\" section=\"Markup\" extensions=\"\" mimetype=\"\" indenter=\"xml\">\n  <highlighting>\n    <list name=\"AttType\">\n        <item>CDATA</item>\n        <item>ID</item>\n        <item>IDREF</item>\n        <item>IDREFS</item>\n        <item>ENTITY</item>\n        <item>ENTITIES</item>\n        <item>NMTOKEN</item>\n        <item>NMTOKENS</item>\n    </list>\n    <contexts>\n\n\t<context name=\"0:prolog\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"1:XMLDecl Version\" String=\"&lt;\\?xml(\\s+|$)\"/>\n\t</context>\n\n\t<context name=\"1:XMLDecl Version\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"2:XMLDecl Version Eq\" String=\"\\s*version\\s*\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"2:XMLDecl Version Eq\" attribute=\"Error\" lineEndContext=\"5:XMLDecl Encoding Eq\">\n\t  <RegExpr attribute=\"Attribute\" context=\"3:XMLDecl Version\" String=\"\\s*=\\s*\"/>\n\t  <DetectSpaces attribute=\"Attribute\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"3:XMLDecl Version\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"4:XMLDecl Encoding\" String=\"\\s*(&quot;[A-Za-z0-9:._-]*&quot;|'[A-Za-z0-9:._-]*')(?!e)\\s*\"/>\n\t  <DetectSpaces attribute=\"Attribute\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"4:XMLDecl Encoding\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"5:XMLDecl Encoding Eq\" String=\"\\s*encoding\\s*\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <Detect2Chars attribute=\"Doctype Declaration\" context=\"11:Misc after XMLDecl\" char=\"?\" char1=\"&gt;\"/>\n\t</context>\n\n\t<context name=\"5:XMLDecl Encoding Eq\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"6:XMLDecl Encoding\" String=\"\\s*=\\s*\"/>\n\t  <DetectSpaces attribute=\"Attribute\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"6:XMLDecl Encoding\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"7:XMLDecl Standalone\" String=\"\\s*(&quot;[A-Za-z][A-Za-z0-9._-]*&quot;|'[A-Za-z][A-Za-z0-9._-]*')(?!s)\\s*\"/>\n\t  <DetectSpaces attribute=\"Attribute\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"7:XMLDecl Standalone\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"8:XMLDecl Standalone Eq\" String=\"\\s*standalone\\s*\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <Detect2Chars attribute=\"Doctype Declaration\" context=\"11:Misc after XMLDecl\" char=\"?\" char1=\"&gt;\"/>\n\t</context>\n\n\t<context name=\"8:XMLDecl Standalone Eq\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"9:XMLDecl Standalone\" String=\"\\s*=\\s*\"/>\n\t  <DetectSpaces attribute=\"Attribute\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"9:XMLDecl Standalone\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"10:XMLDecl Standalone\" String=\"\\s*&quot;(yes|no)&quot;|'(yes|no)'\\s*\"/>\n\t  <DetectSpaces attribute=\"Attribute\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"10:XMLDecl Standalone\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <Detect2Chars attribute=\"Doctype Declaration\" context=\"11:Misc after XMLDecl\" char=\"?\" char1=\"&gt;\"/>\n\t</context>\n\n\t<context name=\"11:Misc after XMLDecl\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n\t  <RegExpr attribute=\"Comment\" context=\"12:Comment after XMLDecl\" String=\"\\s*&lt;!--\\s*\"/>\n\t  <RegExpr attribute=\"Processing Instruction\" context=\"13:PI after XMLDecl\" String=\"\\s*&lt;\\?xml-stylesheet(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Error\" context=\"13:PI after XMLDecl\" String=\"\\s*&lt;\\??[xX][mM][lL]\"/>\n\t  <RegExpr attribute=\"Processing Instruction\" context=\"13:PI after XMLDecl\" String=\"\\s*&lt;\\?[a-zA-Z_][a-zA-Z0-9_-]*(:[a-zA-Z0-9_-]*)?(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"14:Doctype Decl Name\" String=\"&lt;!DOCTYPE(\\s+|$)\"/>\n\t <RegExpr attribute=\"Error\" context=\"80:STag\" String=\"&lt;[xX][mM][lL](\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n         <RegExpr attribute=\"Normal Tag\" context=\"80:STag\" String=\"&lt;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|_)(\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n\t <RegExpr attribute=\"Error\" context=\"80:STag\" String=\"&lt;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[:_])(\\w|[:_.-])*\"/>\n\t <RegExpr attribute=\"Error\" context=\"85:ETag\" String=\"&lt;/[xX][mM][lL](\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n         <RegExpr attribute=\"Normal Tag\" context=\"85:ETag\" String=\"&lt;/(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|_)(\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n\t <RegExpr attribute=\"Error\" context=\"85:ETag\" String=\"&lt;/(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[:_])(\\w|[:_.-])*\"/>\n\t <RegExpr attribute=\"Entity\" context=\"79:Outside\" String=\"&amp;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t <RegExpr attribute=\"Entity\" context=\"79:Outside\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t <StringDetect attribute=\"Entity\" context=\"86:CDSect\" String=\"&lt;![CDATA[\"/>\n\t <StringDetect attribute=\"Comment\" context=\"87:Comment inside IS\" String=\"&lt;!--\"/>\n\t <RegExpr attribute=\"Normal Tag\" context=\"88:PI inside IS\" String=\"&lt;\\?xml-stylesheet(\\s|$)\"/>\n\t <RegExpr attribute=\"Error\" context=\"88:PI inside IS\" String=\"&lt;\\?[xX][mM][lL](\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n         <RegExpr attribute=\"Normal Tag\" context=\"88:PI inside IS\" String=\"&lt;\\?(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|_)(\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n\t <RegExpr attribute=\"Error\" context=\"88:PI inside IS\" String=\"&lt;\\?(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[:_])(\\w|[:_.-])*\"/>\n\t <DetectChar attribute=\"Error\" context=\"79:Outside\" char=\"&lt;\"/>\n\t <DetectChar attribute=\"Error\" context=\"79:Outside\" char=\"&amp;\"/>\n\t <StringDetect attribute=\"Error\" context=\"79:Outside\" String=\"]]>\"/>\n\t</context>\n\n\t<context name=\"12:Comment after XMLDecl\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t  <StringDetect attribute=\"Error\" context=\"#pop\" String=\"--->\"/>\n\t  <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"-->\"/>\n\t  <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"-\" char1=\"-\"/>\n\t</context>\n\n\t<context name=\"13:PI after XMLDecl\" attribute=\"Processing Instruction Body\" lineEndContext=\"#stay\">\n\t  <Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\"/>\n\t</context>\n\n\t<context name=\"14:Doctype Decl Name\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"15:Doctype Decl ExternalID\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"15:Doctype Decl ExternalID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"16:Doctype Decl PublicID\" String=\"PUBLIC(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"19:Doctype Decl SystemID\" String=\"SYSTEM(\\s+|$)\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\"[\"/>\n    <!-- rodda: this was originally context=\"?\", so my best guess... most likely wrong -->\n    <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\">\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"16:Doctype Decl PublicID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"17:Doctype Decl PublicID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"18:Doctype Decl PublicID q\" char=\"'\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"17:Doctype Decl PublicID qq\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"19:Doctype Decl SystemID\" char=\"&quot;\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9'()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"18:Doctype Decl PublicID q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"19:Doctype Decl SystemID\" char=\"'\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"19:Doctype Decl SystemID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"20:Doctype Decl SystemID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"21:Doctype Decl SystemID q\" char=\"'\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"20:Doctype Decl SystemID qq\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"22:Doctype Decl IS or end\" char=\"&quot;\"/>\n\t</context>\n\n\t<context name=\"21:Doctype Decl SystemID q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"22:Doctype Decl IS or end\" char=\"'\"/>\n\t</context>\n\n\t<context name=\"22:Doctype Decl IS or end\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\"[\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"79:Outside\" char=\">\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"23:Doctype Decl IS\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"%(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"24:elementdecl\" String=\"&lt;!ELEMENT(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"38:AttlistDecl\" String=\"&lt;!ATTLIST(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"50:EntityDecl\" String=\"&lt;!ENTITY(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"71:NotationDecl Name\" String=\"&lt;!NOTATION(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Comment\" context=\"77:Comment inside IS\" String=\"\\s*&lt;!--\\s*\"/>\n\t  <RegExpr attribute=\"Processing Instruction\" context=\"78:PI inside IS\" String=\"\\s*&lt;\\?xml-stylesheet(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Error\" context=\"78:PI inside IS\" String=\"\\s*&lt;\\??[xX][mM][lL]\"/>\n\t  <RegExpr attribute=\"Processing Instruction\" context=\"78:PI inside IS\" String=\"\\s*&lt;\\?[a-zA-Z_][a-zA-Z0-9_-]*(:[a-zA-Z0-9_-]*)?(\\s+|$)\"/>\n\t  <Detect2Chars attribute=\"Doctype Declaration\" context=\"79:Outside\" char=\"]\" char1=\">\"/>\n\t</context>\n\n\t<context name=\"24:elementdecl\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Normal Tag\" context=\"25:contentspec\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"25:contentspec\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"37:element end\" String=\"(EMPTY|ANY)\"/>\n\t  <DetectChar attribute=\"Attribute\" context=\"26:MixedOrChildren\" char=\"(\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"26:MixedOrChildren\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <StringDetect attribute=\"Attribute\" context=\"27:MixedShort\" String=\"#PCDATA\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"30:children unknown\" char=\"(\"/>\n\t  <RegExpr attribute=\"Value\" context=\"30:children unknown\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*[\\?\\*\\+]?\"/>\n\t</context>\n\n\t<context name=\"27:MixedShort\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"28:MixedLong\" char=\"|\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"37:element end\" char=\")\"/>\n\t</context>\n\n\t<context name=\"28:MixedLong\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"29:MixedLong endOrContinue\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"29:MixedLong endOrContinue\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"#pop\" char=\"|\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#pop#pop\"/>\n\t  <Detect2Chars attribute=\"Doctype Declaration\" context=\"37:element end\" char=\")\" char1=\"*\"/>\n\t</context>\n\n\t<context name=\"30:children unknown\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"33:children choice\" char=\"|\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"35:children seq\" char=\",\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"31:children unknownOrEnd\" String=\"\\)[\\?\\*\\+]?\"/>\n\t</context>\n\n\t<context name=\"31:children unknownOrEnd\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"33:children choice\" char=\"|\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"35:children seq\" char=\",\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"#stay\" String=\"\\)[\\?\\*\\+]?\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\">\"/>\n\t</context>\n\n\t<context name=\"32:children unknownName\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"30:children unknown\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*[\\?\\*\\+]?\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"#stay\" char=\"(\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"33:children choice\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"34:children choiceOrEnd\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*[\\?\\*\\+]?\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"32:children unknownName\" char=\"(\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"34:children choiceOrEnd\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"#pop\" char=\"|\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"31:children unknownOrEnd\" String=\"\\)[\\?\\*\\+]?\"/>\n\t</context>\n\n\t<context name=\"35:children seq\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"36:children seqOrEnd\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*[\\?\\*\\+]?\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"32:children unknownName\" char=\"(\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"36:children seqOrEnd\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"#pop\" char=\",\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"31:children unknownOrEnd\" String=\"\\)[\\?\\*\\+]?\"/>\n\t</context>\n\n\t<context name=\"37:element end\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\">\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"38:AttlistDecl\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Normal Tag\" context=\"39:AttDef\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Normal Tag\" context=\"23:Doctype Decl IS\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*>\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"39:AttDef\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"40:AttType\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\">\"/>\n\t</context>\n\n\t<context name=\"40:AttType\" attribute=\"Error\" lineEndContext=\"#stay\">\n          <keyword attribute=\"Doctype Declaration\" context=\"46:DefaultDecl\" String=\"AttType\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"41:NotationStart\" String=\"NOTATION(\\s+|$)\"/>\n          <DetectChar attribute=\"Doctype Declaration\" context=\"42:Notation\" char=\"(\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#pop\"/>\n\t</context>\n\n\t<context name=\"41:NotationStart\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"42:Notation\" char=\"(\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#pop#pop\"/>\n\t</context>\n\n\t<context name=\"42:Notation\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"43:Notation or End\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"43:Notation or End\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"#pop\" char=\"|\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"46:DefaultDecl\" String=\"\\)(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n<!--\n\t<context name=\"44:Enumeration\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"(\\w|[_:.-])+\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"45:Enumeration or End\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"44:Enumeration\" char=\"|\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"46:DefaultDecl\" String=\"\\)(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>-->\n\n\t<context name=\"46:DefaultDecl\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Attribute\" context=\"39:AttDef\" String=\"(#REQUIRED|#IMPLIED)(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Attribute\" context=\"47:DefaultDecl AttValue\" String=\"#FIXED(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t  <DetectChar attribute=\"Value\" context=\"48:DefaultDecl AttValue qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"49:DefaultDecl AttValue q\" char=\"'\"/>\n\t</context>\n\n\t<context name=\"47:DefaultDecl AttValue\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"48:DefaultDecl AttValue qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"49:DefaultDecl AttValue q\" char=\"'\"/>\n\t</context>\n\n \t<context name=\"48:DefaultDecl AttValue qq\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&amp;\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\"/>\n          <DetectChar attribute=\"Value\" context=\"39:AttDef\" char=\"&quot;\"/>\n  \t</context>\n\n\t<context name=\"49:DefaultDecl AttValue q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&amp;\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\"/>\n          <DetectChar attribute=\"Value\" context=\"39:AttDef\" char=\"&quot;\"/>\n\t</context>\n\n\t<context name=\"50:EntityDecl\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"52:GEDecl EntityValueOrExternalID\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*(\\s+|$)\"/>\n\t  <DetectChar attribute=\"Entity\" context=\"61:PEDecl\" char=\"%\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n<!-- \t<context name=\"51:unused\" attribute=\"Error\" lineEndContext=\"#stay\" /> -->\n\n\t<context name=\"52:GEDecl EntityValueOrExternalID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"53:GEDecl EntityValue qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"54:GEDecl EntityValue q\" char=\"'\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"55:GEDecl PublicID\" String=\"PUBLIC(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"58:GEDecl SystemID\" String=\"SYSTEM(\\s+|$)\"/>\n\t</context>\n\n \t<context name=\"53:GEDecl EntityValue qq\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"[&amp;%](?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&amp;\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"%\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\"/>\n          <DetectChar attribute=\"Value\" context=\"69:GEDecl endOrNDATA\" char=\"&quot;\"/>\n  \t</context>\n\n \t<context name=\"54:GEDecl EntityValue q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"[&amp;%](?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t  <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&amp;\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"%\"/>\n\t  <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\"/>\n          <DetectChar attribute=\"Value\" context=\"69:GEDecl endOrNDATA\" char=\"'\"/>\n  \t</context>\n\n\t<context name=\"55:GEDecl PublicID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"56:GEDecl PublicID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"57:GEDecl PublicID q\" char=\"'\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"56:GEDecl PublicID qq\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"58:GEDecl SystemID\" char=\"&quot;\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9'()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"57:GEDecl PublicID q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"58:GEDecl SystemID\" char=\"'\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"58:GEDecl SystemID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"59:GEDecl SystemID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"60:GEDecl SystemID q\" char=\"'\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"59:GEDecl SystemID qq\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"69:GEDecl endOrNDATA\" char=\"&quot;\"/>\n\t</context>\n\n\t<context name=\"60:GEDecl SystemID q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"69:GEDecl endOrNDATA\" char=\"'\"/>\n\t</context>\n\n\t<context name=\"61:PEDecl\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"62:PEDecl EntityValueOrExternalID\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"62:PEDecl EntityValueOrExternalID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"53:GEDecl EntityValue qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"54:GEDecl EntityValue q\" char=\"'\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"63:PEDecl PublicID\" String=\"PUBLIC(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"66:PEDecl SystemID\" String=\"SYSTEM(\\s+|$)\"/>\n\t</context>\n\n\t<context name=\"63:PEDecl PublicID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"64:PEDecl PublicID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"65:PEDecl PublicID q\" char=\"'\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"64:PEDecl PublicID qq\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"66:PEDecl SystemID\" char=\"&quot;\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9'()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"65:PEDecl PublicID q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"66:PEDecl SystemID\" char=\"'\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"66:PEDecl SystemID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"67:PEDecl SystemID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"68:PEDecl SystemID q\" char=\"'\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"67:PEDecl SystemID qq\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"37:element end\" char=\"&quot;\"/>\n\t</context>\n\n\t<context name=\"68:PEDecl SystemID q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"37:element end\" char=\"'\"/>\n\t</context>\n\n\t<context name=\"69:GEDecl endOrNDATA\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\">\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"70:GEDecl NDATA\" String=\"NDATA(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"70:GEDecl NDATA\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"37:element end\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"71:NotationDecl Name\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Entity\" context=\"72:NotationDecl ExternalID\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"72:NotationDecl ExternalID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"73:NotationDecl PublicID\" String=\"PUBLIC(\\s+|$)\"/>\n\t  <RegExpr attribute=\"Doctype Declaration\" context=\"66:PEDecl SystemID\" String=\"SYSTEM(\\s+|$)\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"73:NotationDecl PublicID\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"74:NotationDecl PublicID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"75:NotationDecl PublicID q\" char=\"'\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"74:NotationDecl PublicID qq\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"76:NotationDecl SystemIDOrEnd\" char=\"&quot;\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9'()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"75:NotationDecl PublicID q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"76:NotationDecl SystemIDOrEnd\" char=\"'\"/>\n\t  <RegExpr attribute=\"Value\" context=\"#stay\" String=\"[&#x20;&#xD;&#xA;a-zA-Z0-9()+,./:=?;!*#@$_%-]\"/>\n\t</context>\n\n\t<context name=\"76:NotationDecl SystemIDOrEnd\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t  <DetectChar attribute=\"Value\" context=\"67:PEDecl SystemID qq\" char=\"&quot;\"/>\n\t  <DetectChar attribute=\"Value\" context=\"68:PEDecl SystemID q\" char=\"'\"/>\n\t  <DetectChar attribute=\"Doctype Declaration\" context=\"23:Doctype Decl IS\" char=\">\"/>\n\t  <DetectSpaces attribute=\"Doctype Declaration\" context=\"#stay\"/>\n\t</context>\n\n\t<context name=\"77:Comment inside IS\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t  <StringDetect attribute=\"Error\" context=\"23:Doctype Decl IS\" String=\"--->\"/>\n\t  <StringDetect attribute=\"Comment\" context=\"23:Doctype Decl IS\" String=\"-->\"/>\n\t  <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"-\" char1=\"-\"/>\n\t</context>\n\n\t<context name=\"78:PI inside IS\" attribute=\"Processing Instruction Body\" lineEndContext=\"#stay\">\n\t  <Detect2Chars attribute=\"Processing Instruction\" context=\"23:Doctype Decl IS\" char=\"?\" char1=\"&gt;\"/>\n\t</context>\n\n       <context name=\"79:Outside\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n\t <RegExpr attribute=\"Error\" context=\"80:STag\" String=\"&lt;[xX][mM][lL](\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n         <RegExpr attribute=\"Normal Tag\" context=\"80:STag\" String=\"&lt;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|_)(\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n\t <RegExpr attribute=\"Error\" context=\"80:STag\" String=\"&lt;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[:_])(\\w|[:_.-])*\"/>\n\t <RegExpr attribute=\"Error\" context=\"85:ETag\" String=\"&lt;/[xX][mM][lL](\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n         <RegExpr attribute=\"Normal Tag\" context=\"85:ETag\" String=\"&lt;/(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|_)(\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n\t <RegExpr attribute=\"Error\" context=\"85:ETag\" String=\"&lt;/(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[:_])(\\w|[:_.-])*\"/>\n\t <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t <StringDetect attribute=\"Entity\" context=\"86:CDSect\" String=\"&lt;![CDATA[\"/>\n\t <StringDetect attribute=\"Comment\" context=\"87:Comment inside IS\" String=\"&lt;!--\"/>\n\t <RegExpr attribute=\"Normal Tag\" context=\"88:PI inside IS\" String=\"&lt;\\?xml-stylesheet(\\s|$)\"/>\n\t <RegExpr attribute=\"Error\" context=\"88:PI inside IS\" String=\"&lt;\\?[xX][mM][lL](\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n         <RegExpr attribute=\"Normal Tag\" context=\"88:PI inside IS\" String=\"&lt;\\?(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|_)(\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n\t <RegExpr attribute=\"Error\" context=\"88:PI inside IS\" String=\"&lt;\\?(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[:_])(\\w|[:_.-])*\"/>\n\t <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\"/>\n\t <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&amp;\"/>\n\t <StringDetect attribute=\"Error\" context=\"#stay\" String=\"]]>\"/>\n       </context>\n\n       <context name=\"80:STag\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t <Detect2Chars attribute=\"Normal Tag\" context=\"79:Outside\" char=\"/\" char1=\"&gt;\"/>\n\t <DetectChar attribute=\"Normal Tag\" context=\"79:Outside\" char=\"&gt;\"/>\n\t <RegExpr attribute=\"Attribute\" context=\"81:STag Attribute\" String=\"(xmlns:(\\w|[_.-])*|xmlns|xml:(lang|base|space))\"/>\n\t <RegExpr attribute=\"Error\" context=\"81:STag Attribute\" String=\"[xX][mM][lL](\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n         <RegExpr attribute=\"Attribute\" context=\"81:STag Attribute\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|_)(\\w|[_.-])*(:(\\w|[_.-])+)?\"/>\n\t <RegExpr attribute=\"Error\" context=\"81:STag Attribute\" String=\"(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[:_])(\\w|[:_.-])*\"/>\n         <DetectSpaces attribute=\"Normal Tag\" context=\"#stay\"/>\n       </context>\n\n       <context name=\"81:STag Attribute\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t <DetectChar attribute=\"Attribute\" context=\"82:STag Attribute Value\" char=\"=\"/>\n         <DetectSpaces attribute=\"Normal Tag\" context=\"#stay\"/>\n       </context>\n\n       <context name=\"82:STag Attribute Value\" attribute=\"Error\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Value\" context=\"83:STag Value qq\" char=\"&quot;\"/>\n         <DetectChar attribute=\"Value\" context=\"84:STag Value q\" char=\"'\"/>\n         <DetectSpaces attribute=\"Normal Tag\" context=\"#stay\"/>\n       </context>\n\n       <context name=\"83:STag Value qq\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&amp;\"/>\n\t <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\"/>\n         <RegExpr attribute=\"Error\" context=\"80:STag\" String=\"&quot;(?=(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:]))\"/>\n         <RegExpr attribute=\"Value\" context=\"80:STag\" String=\"&quot;(?=>|/>|\\s|$)\"/>\n       </context>\n\n       <context name=\"84:STag Value q\" attribute=\"Value\" lineEndContext=\"#stay\">\n\t <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:])(\\w|[_:.-])*;\"/>\n\t <RegExpr attribute=\"Entity\" context=\"#stay\" String=\"&amp;#(x[0-9a-fA-F]+|[0-9]+);\"/>\n\t <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&amp;\"/>\n\t <DetectChar attribute=\"Error\" context=\"#stay\" char=\"&lt;\"/>\n         <RegExpr attribute=\"Error\" context=\"80:STag\" String=\"'(?=(?![&#x0660;-&#x0669;&#x06F0;-&#x06F9;&#x0966;-&#x096F;&#x09E6;-&#x09EF;&#x0A66;-&#x0A6F;&#x0AE6;-&#x0AEF;&#x0B66;-&#x0B6F;&#x0BE7;-&#x0BEF;&#x0C66;-&#x0C6F;&#x0CE6;-&#x0CEF;&#x0D66;-&#x0D6F;&#x0E50;-&#x0E59;&#x0ED0;-&#x0ED9;&#x0F20;-&#x0F29;]|\\d)(\\w|[_:]))\"/>\n         <RegExpr attribute=\"Value\" context=\"80:STag\" String=\"'(?=>|/>|\\s|$)\"/>\n       </context>\n\n       <context name=\"85:ETag\" attribute=\"Error\" lineEndContext=\"#stay\">\n\t <DetectChar attribute=\"Normal Tag\" context=\"79:Outside\" char=\"&gt;\"/>\n         <DetectSpaces attribute=\"Normal Tag\" context=\"#stay\"/>\n       </context>\n\n       <context name=\"86:CDSect\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <StringDetect attribute=\"Entity\" context=\"79:Outside\" String=\"]]>\"/>\n       </context>\n\n\t<context name=\"87:Comment inside IS\" attribute=\"Comment\" lineEndContext=\"#stay\">\n\t  <StringDetect attribute=\"Error\" context=\"79:Outside\" String=\"--->\"/>\n\t  <StringDetect attribute=\"Comment\" context=\"79:Outside\" String=\"-->\"/>\n\t  <Detect2Chars attribute=\"Error\" context=\"#stay\" char=\"-\" char1=\"-\"/>\n\t</context>\n\n\t<context name=\"88:PI inside IS\" attribute=\"Processing Instruction Body\" lineEndContext=\"#stay\">\n\t  <Detect2Chars attribute=\"Processing Instruction\" context=\"79:Outside\" char=\"?\" char1=\"&gt;\"/>\n\t</context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Entity\" defStyleNum=\"dsChar\"/>\n      <itemData name=\"Normal Tag\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Attribute\" defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Value\" defStyleNum=\"dsString\"/>\n      <itemData name=\"Doctype Declaration\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Processing Instruction Body\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Error\" defStyleNum=\"dsError\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\"/>\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/xonotic-console.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Xonotic Script\" version=\"3\" kateversion=\"5.0\" section=\"Scripts\" extensions=\"*.cfg\" mimetype=\"\" license=\"LGPLv2+\">\n\n<highlighting>\n  <list name=\"Commands\">\n    <item>alias</item>\n    <item>apropos</item>\n    <item>begin</item>\n    <item>bestweapon</item>\n    <item>bf</item>\n    <item>bind</item>\n    <item>bindlist</item>\n    <item>bottomcolor</item>\n    <item>cd</item>\n    <item>centerview</item>\n    <item>changelevel</item>\n    <item>changing</item>\n    <item>cl_areastats</item>\n    <item>cl_begindownloads</item>\n    <item>cl_cmd</item>\n    <item>cl_downloadbegin</item>\n    <item>cl_downloadfinished</item>\n    <item>cl_modelindexlist</item>\n    <item>cl_particles_reloadeffects</item>\n    <item>cl_soundindexlist</item>\n    <item>clear</item>\n    <item>cmd</item>\n    <item>cmdlist</item>\n    <item>color</item>\n    <item>commandmode</item>\n    <item>condump</item>\n    <item>connect</item>\n    <item>cprint</item>\n    <item>curl</item>\n    <item>cvar_lockdefaults</item>\n    <item>cvar_resettodefaults_all</item>\n    <item>cvar_resettodefaults_nosaveonly</item>\n    <item>cvar_resettodefaults_saveonly</item>\n    <item>cvarlist</item>\n    <item>defer</item>\n    <item>demos</item>\n    <item>dir</item>\n    <item>disconnect</item>\n    <item>download</item>\n    <item>echo</item>\n    <item>entities</item>\n    <item>envmap</item>\n    <item>exec</item>\n    <item>fixtrans</item>\n    <item>fly</item>\n    <item>fog</item>\n    <item>fog_heighttexture</item>\n    <item>force_centerview</item>\n    <item>fs_rescan</item>\n    <item>fullinfo</item>\n    <item>fullserverinfo</item>\n    <item>gamedir</item>\n    <item>give</item>\n    <item>gl_texturemode</item>\n    <item>gl_vbostats</item>\n    <item>god</item>\n    <item>heartbeat</item>\n    <item>history</item>\n    <item>impulse</item>\n    <item>in_bind</item>\n    <item>in_bindlist</item>\n    <item>in_bindmap</item>\n    <item>in_unbind</item>\n    <item>infobar</item>\n    <item>iplog_list</item>\n    <item>kick</item>\n    <item>kill</item>\n    <item>kickban</item>\n    <item>load</item>\n    <item>loadconfig</item>\n    <item>loadfont</item>\n    <item>loadsky</item>\n    <item>locs_add</item>\n    <item>locs_clear</item>\n    <item>locs_reload</item>\n    <item>locs_removenearest</item>\n    <item>locs_save</item>\n    <item>ls</item>\n    <item>map</item>\n    <item>maps</item>\n    <item>maxplayers</item>\n    <item>memlist</item>\n    <item>memstats</item>\n    <item>menu_cmd</item>\n    <item>menu_restart</item>\n    <item>messagemode</item>\n    <item>messagemode2</item>\n    <item>mod_generatelightmaps</item>\n    <item>modeldecompile</item>\n    <item>modellist</item>\n    <item>modelprecache</item>\n    <item>name</item>\n    <item>net_refresh</item>\n    <item>net_slist</item>\n    <item>net_slistqw</item>\n    <item>net_stats</item>\n    <item>nextul</item>\n    <item>noclip</item>\n    <item>notarget</item>\n    <item>packet</item>\n    <item>path</item>\n    <item>pause</item>\n    <item>pausedemo</item>\n    <item>ping</item>\n    <item>pingplreport</item>\n    <item>pings</item>\n    <item>play</item>\n    <item>play2</item>\n    <item>playdemo</item>\n    <item>playermodel</item>\n    <item>playerskin</item>\n    <item>playvideo</item>\n    <item>playvol</item>\n    <item>pmodel</item>\n    <item>pointfile</item>\n    <item>pqrcon</item>\n    <item>prespawn</item>\n    <item>prvm_breakpoint</item>\n    <item>prvm_callprofile</item>\n    <item>prvm_childprofile</item>\n    <item>prvm_edict</item>\n    <item>prvm_edictcount</item>\n    <item>prvm_edictget</item>\n    <item>prvm_edicts</item>\n    <item>prvm_edictset</item>\n    <item>prvm_edictwatchpoint</item>\n    <item>prvm_fields</item>\n    <item>prvm_global</item>\n    <item>prvm_globalget</item>\n    <item>prvm_globals</item>\n    <item>prvm_globalset</item>\n    <item>prvm_globalwatchpoint</item>\n    <item>prvm_printfunction</item>\n    <item>prvm_profile</item>\n    <item>r_editlights_clear</item>\n    <item>r_editlights_copyinfo</item>\n    <item>r_editlights_edit</item>\n    <item>r_editlights_editall</item>\n    <item>r_editlights_help</item>\n    <item>r_editlights_importlightentitiesfrommap</item>\n    <item>r_editlights_importlightsfile</item>\n    <item>r_editlights_lock</item>\n    <item>r_editlights_pasteinfo</item>\n    <item>r_editlights_reload</item>\n    <item>r_editlights_remove</item>\n    <item>r_editlights_save</item>\n    <item>r_editlights_spawn</item>\n    <item>r_editlights_togglecorona</item>\n    <item>r_editlights_toggleshadow</item>\n    <item>r_glsl_dumpshader</item>\n    <item>r_glsl_restart</item>\n    <item>r_listmaptextures</item>\n    <item>r_replacemaptexture</item>\n    <item>r_restart</item>\n    <item>r_texturestats</item>\n    <item>rate</item>\n    <item>rcon</item>\n    <item>reconnect</item>\n    <item>record</item>\n    <item>register_bestweapon</item>\n    <item>restart</item>\n    <item>save</item>\n    <item>saveconfig</item>\n    <item>say</item>\n    <item>say_team</item>\n    <item>screenshot</item>\n    <item>sendcvar</item>\n    <item>set</item>\n    <item>seta</item>\n    <item>setinfo</item>\n    <item>sizedown</item>\n    <item>sizeup</item>\n    <item>skins</item>\n    <item>snd_restart</item>\n    <item>snd_unloadallsounds</item>\n    <item>soundinfo</item>\n    <item>soundlist</item>\n    <item>spawn</item>\n    <item>srcon</item>\n    <item>startdemos</item>\n    <item>status</item>\n    <item>stop</item>\n    <item>stopdemo</item>\n    <item>stopdownload</item>\n    <item>stopsound</item>\n    <item>stopul</item>\n    <item>stopvideo</item>\n    <item>stuffcmds</item>\n    <item>sv_areastats</item>\n    <item>sv_cmd</item>\n    <item>sv_saveentfile</item>\n    <item>sv_startdownload</item>\n    <item>tell</item>\n    <item>timedemo</item>\n    <item>timerefresh</item>\n    <item>toggle</item>\n    <item>toggleconsole</item>\n    <item>togglemenu</item>\n    <item>topcolor</item>\n    <item>unalias</item>\n    <item>unbind</item>\n    <item>unbindall</item>\n    <item>unset</item>\n    <item>user</item>\n    <item>users</item>\n    <item>v_cshift</item>\n    <item>version</item>\n    <item>vid_restart</item>\n    <item>viewframe</item>\n    <item>viewmodel</item>\n    <item>viewnext</item>\n    <item>viewprev</item>\n    <item>wait</item>\n    <item>which</item>\n  </list>\n\n  <list name=\"Variables\">\n    <item>accuracy_color0</item>\n    <item>accuracy_color1</item>\n    <item>accuracy_color2</item>\n    <item>accuracy_color_levels</item>\n    <item>ambient_fade</item>\n    <item>ambient_level</item>\n    <item>bgmvolume</item>\n    <item>bot_ai_aimskill_blendrate</item>\n    <item>bot_ai_aimskill_firetolerance_distdegrees</item>\n    <item>bot_ai_aimskill_firetolerance_maxdegrees</item>\n    <item>bot_ai_aimskill_firetolerance_mindegrees</item>\n    <item>bot_ai_aimskill_fixedrate</item>\n    <item>bot_ai_aimskill_mouse</item>\n    <item>bot_ai_aimskill_offset</item>\n    <item>bot_ai_aimskill_order_filter_1st</item>\n    <item>bot_ai_aimskill_order_filter_2nd</item>\n    <item>bot_ai_aimskill_order_filter_3th</item>\n    <item>bot_ai_aimskill_order_filter_4th</item>\n    <item>bot_ai_aimskill_order_filter_5th</item>\n    <item>bot_ai_aimskill_order_mix_1st</item>\n    <item>bot_ai_aimskill_order_mix_2nd</item>\n    <item>bot_ai_aimskill_order_mix_3th</item>\n    <item>bot_ai_aimskill_order_mix_4th</item>\n    <item>bot_ai_aimskill_order_mix_5th</item>\n    <item>bot_ai_aimskill_think</item>\n    <item>bot_ai_bunnyhop_firstjumpdelay</item>\n    <item>bot_ai_bunnyhop_skilloffset</item>\n    <item>bot_ai_bunnyhop_startdistance</item>\n    <item>bot_ai_bunnyhop_stopdistance</item>\n    <item>bot_ai_chooseweaponinterval</item>\n    <item>bot_ai_custom_weapon_priority_close</item>\n    <item>bot_ai_custom_weapon_priority_distances</item>\n    <item>bot_ai_custom_weapon_priority_far</item>\n    <item>bot_ai_custom_weapon_priority_mid</item>\n    <item>bot_ai_dangerdetectioninterval</item>\n    <item>bot_ai_dangerdetectionupdates</item>\n    <item>bot_ai_dodgeupdateinterval</item>\n    <item>bot_ai_enemydetectioninterval</item>\n    <item>bot_ai_enemydetectionradius</item>\n    <item>bot_ai_friends_aware_pickup_radius</item>\n    <item>bot_ai_ignoregoal_timeout</item>\n    <item>bot_ai_keyboard_distance</item>\n    <item>bot_ai_keyboard_threshold</item>\n    <item>bot_ai_navigation_jetpack</item>\n    <item>bot_ai_navigation_jetpack_mindistance</item>\n    <item>bot_ai_strategyinterval</item>\n    <item>bot_ai_thinkinterval</item>\n    <item>bot_ai_weapon_combo</item>\n    <item>bot_ai_weapon_combo_threshold</item>\n    <item>bot_config_file</item>\n    <item>bot_debug_goalstack</item>\n    <item>bot_debug_tracewalk</item>\n    <item>bot_god</item>\n    <item>bot_ignore_bots</item>\n    <item>bot_join_empty</item>\n    <item>bot_navigation_ignoreplayers</item>\n    <item>bot_nofire</item>\n    <item>bot_number</item>\n    <item>bot_prefix</item>\n    <item>bot_sound_monopoly</item>\n    <item>bot_suffix</item>\n    <item>bot_usemodelnames</item>\n    <item>bot_vs_human</item>\n    <item>bot_wander_enable</item>\n    <item>camera_chase_smoothly</item>\n    <item>camera_enable</item>\n    <item>camera_forward_follows</item>\n    <item>camera_free</item>\n    <item>camera_look_attenuation</item>\n    <item>camera_look_player</item>\n    <item>camera_mouse_threshold</item>\n    <item>camera_reset</item>\n    <item>camera_speed_attenuation</item>\n    <item>camera_speed_chase</item>\n    <item>camera_speed_free</item>\n    <item>camera_speed_roll</item>\n    <item>captureleadlimit_override</item>\n    <item>capturelimit_override</item>\n    <item>cdaudio</item>\n    <item>cdaudioinitialized</item>\n    <item>chase_active</item>\n    <item>chase_back</item>\n    <item>chase_overhead</item>\n    <item>chase_pitchangle</item>\n    <item>chase_stevie</item>\n    <item>chase_up</item>\n    <item>cl_accuracy_data_receive</item>\n    <item>cl_accuracy_data_share</item>\n    <item>cl_allow_uid2name</item>\n    <item>cl_allow_uidtracking</item>\n    <item>cl_anglespeedkey</item>\n    <item>cl_announcer</item>\n    <item>cl_announcer_antispam</item>\n    <item>cl_announcer_maptime</item>\n    <item>cl_autodemo</item>\n    <item>cl_autodemo_delete</item>\n    <item>cl_autodemo_delete_keeprecords</item>\n    <item>cl_autodemo_nameformat</item>\n    <item>cl_autoscreenshot</item>\n    <item>cl_autoswitch</item>\n    <item>cl_autotaunt</item>\n    <item>cl_backspeed</item>\n    <item>cl_beams_instantaimhack</item>\n    <item>cl_beams_lightatend</item>\n    <item>cl_beams_polygons</item>\n    <item>cl_beams_quakepositionhack</item>\n    <item>cl_bob</item>\n    <item>cl_bob2</item>\n    <item>cl_bob2cycle</item>\n    <item>cl_bob2smooth</item>\n    <item>cl_bobcycle</item>\n    <item>cl_bobfall</item>\n    <item>cl_bobfallcycle</item>\n    <item>cl_bobfallminspeed</item>\n    <item>cl_bobmodel</item>\n    <item>cl_bobmodel_side</item>\n    <item>cl_bobmodel_speed</item>\n    <item>cl_bobmodel_up</item>\n    <item>cl_bobup</item>\n    <item>cl_capturevideo</item>\n    <item>cl_capturevideo_demo_stop</item>\n    <item>cl_capturevideo_fps</item>\n    <item>cl_capturevideo_framestep</item>\n    <item>cl_capturevideo_height</item>\n    <item>cl_capturevideo_nameformat</item>\n    <item>cl_capturevideo_number</item>\n    <item>cl_capturevideo_ogg</item>\n    <item>cl_capturevideo_ogg_theora_bitrate</item>\n    <item>cl_capturevideo_ogg_theora_keyframe_auto_threshold</item>\n    <item>cl_capturevideo_ogg_theora_keyframe_bitrate_multiplier</item>\n    <item>cl_capturevideo_ogg_theora_keyframe_maxinterval</item>\n    <item>cl_capturevideo_ogg_theora_keyframe_mininterval</item>\n    <item>cl_capturevideo_ogg_theora_noise_sensitivity</item>\n    <item>cl_capturevideo_ogg_theora_quality</item>\n    <item>cl_capturevideo_ogg_theora_vp3compat</item>\n    <item>cl_capturevideo_ogg_vorbis_quality</item>\n    <item>cl_capturevideo_printfps</item>\n    <item>cl_capturevideo_realtime</item>\n    <item>cl_capturevideo_width</item>\n    <item>cl_casings</item>\n    <item>cl_casings_bronze_time</item>\n    <item>cl_casings_maxcount</item>\n    <item>cl_casings_shell_time</item>\n    <item>cl_casings_sloppy</item>\n    <item>cl_casings_ticrate</item>\n    <item>cl_clippedspectating</item>\n    <item>cl_csqc_generatemousemoveevents</item>\n    <item>cl_curl_enabled</item>\n    <item>cl_curl_maxdownloads</item>\n    <item>cl_curl_maxspeed</item>\n    <item>cl_curl_useragent</item>\n    <item>cl_curl_useragent_append</item>\n    <item>cl_damageeffect</item>\n    <item>cl_damageeffect_bones</item>\n    <item>cl_damageeffect_distribute</item>\n    <item>cl_damageeffect_lifetime</item>\n    <item>cl_damageeffect_lifetime_max</item>\n    <item>cl_damageeffect_lifetime_min</item>\n    <item>cl_damageeffect_ticrate</item>\n    <item>cl_db_saveasdump</item>\n    <item>cl_deathfade</item>\n    <item>cl_deathglow</item>\n    <item>cl_deathnoviewmodel</item>\n    <item>cl_deathscoreboard</item>\n    <item>cl_decals</item>\n    <item>cl_decals_bias</item>\n    <item>cl_decals_fadetime</item>\n    <item>cl_decals_max</item>\n    <item>cl_decals_models</item>\n    <item>cl_decals_newsystem</item>\n    <item>cl_decals_newsystem_bloodsmears</item>\n    <item>cl_decals_newsystem_immediatebloodstain</item>\n    <item>cl_decals_newsystem_intensitymultiplier</item>\n    <item>cl_decals_time</item>\n    <item>cl_decals_visculling</item>\n    <item>cl_demo_mousegrab</item>\n    <item>cl_dlights_decaybrightness</item>\n    <item>cl_dlights_decayradius</item>\n    <item>cl_dodging_timeout</item>\n    <item>cl_effects_lightningarc_branchfactor_add</item>\n    <item>cl_effects_lightningarc_branchfactor_start</item>\n    <item>cl_effects_lightningarc_drift_end</item>\n    <item>cl_effects_lightningarc_drift_start</item>\n    <item>cl_effects_lightningarc_segmentlength</item>\n    <item>cl_effects_lightningarc_simple</item>\n    <item>cl_eventchase_death</item>\n    <item>cl_eventchase_distance</item>\n    <item>cl_eventchase_maxs</item>\n    <item>cl_eventchase_mins</item>\n    <item>cl_eventchase_speed</item>\n    <item>cl_eventchase_viewoffset</item>\n    <item>cl_explosions_alpha_end</item>\n    <item>cl_explosions_alpha_start</item>\n    <item>cl_explosions_lifetime</item>\n    <item>cl_explosions_size_end</item>\n    <item>cl_explosions_size_start</item>\n    <item>cl_firststart</item>\n    <item>cl_followmodel</item>\n    <item>cl_followmodel_side_highpass</item>\n    <item>cl_followmodel_side_highpass1</item>\n    <item>cl_followmodel_side_limit</item>\n    <item>cl_followmodel_side_lowpass</item>\n    <item>cl_followmodel_side_speed</item>\n    <item>cl_followmodel_up_highpass</item>\n    <item>cl_followmodel_up_highpass1</item>\n    <item>cl_followmodel_up_limit</item>\n    <item>cl_followmodel_up_lowpass</item>\n    <item>cl_followmodel_up_speed</item>\n    <item>cl_forcemyplayercolors</item>\n    <item>cl_forcemyplayermodel</item>\n    <item>cl_forcemyplayerskin</item>\n    <item>cl_forceplayercolors</item>\n    <item>cl_forceplayermodels</item>\n    <item>cl_forwardspeed</item>\n    <item>cl_fullbright_items</item>\n    <item>cl_gameplayfix_soundsmovewithentities</item>\n    <item>cl_gentle</item>\n    <item>cl_gentle_damage</item>\n    <item>cl_gentle_gibs</item>\n    <item>cl_gentle_messages</item>\n    <item>cl_ghost_items</item>\n    <item>cl_ghost_items_color</item>\n    <item>cl_gibs_avelocity_scale</item>\n    <item>cl_gibs_damageforcescale</item>\n    <item>cl_gibs_lifetime</item>\n    <item>cl_gibs_maxcount</item>\n    <item>cl_gibs_sloppy</item>\n    <item>cl_gibs_ticrate</item>\n    <item>cl_gibs_velocity_random</item>\n    <item>cl_gibs_velocity_scale</item>\n    <item>cl_gibs_velocity_up</item>\n    <item>cl_gravity</item>\n    <item>cl_gunalign</item>\n    <item>cl_handicap</item>\n    <item>cl_hidewaypoints</item>\n    <item>cl_hitsound</item>\n    <item>cl_hitsound_antispam_time</item>\n    <item>cl_iplog_name</item>\n    <item>cl_itembobheight</item>\n    <item>cl_itembobspeed</item>\n    <item>cl_joinbeforedownloadsfinish</item>\n    <item>cl_leanmodel</item>\n    <item>cl_leanmodel_side_highpass</item>\n    <item>cl_leanmodel_side_highpass1</item>\n    <item>cl_leanmodel_side_limit</item>\n    <item>cl_leanmodel_side_lowpass</item>\n    <item>cl_leanmodel_side_speed</item>\n    <item>cl_leanmodel_up_highpass</item>\n    <item>cl_leanmodel_up_highpass1</item>\n    <item>cl_leanmodel_up_limit</item>\n    <item>cl_leanmodel_up_lowpass</item>\n    <item>cl_leanmodel_up_speed</item>\n    <item>cl_lerpanim_maxdelta_framegroups</item>\n    <item>cl_lerpanim_maxdelta_server</item>\n    <item>cl_lerpexcess</item>\n    <item>cl_lockview</item>\n    <item>cl_loddistance1</item>\n    <item>cl_loddistance2</item>\n    <item>cl_maxfps</item>\n    <item>cl_maxfps_alwayssleep</item>\n    <item>cl_maxidlefps</item>\n    <item>cl_maxphysicsframesperserverframe</item>\n    <item>cl_minfps</item>\n    <item>cl_minfps_fade</item>\n    <item>cl_minfps_force</item>\n    <item>cl_minfps_qualityhysteresis</item>\n    <item>cl_minfps_qualitymax</item>\n    <item>cl_minfps_qualitymin</item>\n    <item>cl_minfps_qualitymultiply</item>\n    <item>cl_minfps_qualitystepmax</item>\n    <item>cl_modeldetailreduction</item>\n    <item>cl_movecliptokeyboard</item>\n    <item>cl_movement</item>\n    <item>cl_movement_accelerate</item>\n    <item>cl_movement_airaccel_qw</item>\n    <item>cl_movement_airaccel_sideways_friction</item>\n    <item>cl_movement_airaccelerate</item>\n    <item>cl_movement_edgefriction</item>\n    <item>cl_movement_errorcompensation</item>\n    <item>cl_movement_friction</item>\n    <item>cl_movement_jumpvelocity</item>\n    <item>cl_movement_maxairspeed</item>\n    <item>cl_movement_maxspeed</item>\n    <item>cl_movement_minping</item>\n    <item>cl_movement_nettimeout</item>\n    <item>cl_movement_replay</item>\n    <item>cl_movement_stepheight</item>\n    <item>cl_movement_stopspeed</item>\n    <item>cl_movement_track_canjump</item>\n    <item>cl_movement_wallfriction</item>\n    <item>cl_movement_wateraccelerate</item>\n    <item>cl_movement_waterfriction</item>\n    <item>cl_movespeedkey</item>\n    <item>cl_netfps</item>\n    <item>cl_netimmediatebuttons</item>\n    <item>cl_netlocalping</item>\n    <item>cl_netpacketloss_receive</item>\n    <item>cl_netpacketloss_send</item>\n    <item>cl_netrepeatinput</item>\n    <item>cl_nettimesyncboundmode</item>\n    <item>cl_nettimesyncboundtolerance</item>\n    <item>cl_nettimesyncfactor</item>\n    <item>cl_noantilag</item>\n    <item>cl_nodelta</item>\n    <item>cl_nogibs</item>\n    <item>cl_nolerp</item>\n    <item>cl_noplayershadow</item>\n    <item>cl_particlegibs</item>\n    <item>cl_particles</item>\n    <item>cl_particles_alpha</item>\n    <item>cl_particles_blood</item>\n    <item>cl_particles_blood_alpha</item>\n    <item>cl_particles_blood_bloodhack</item>\n    <item>cl_particles_blood_decal_alpha</item>\n    <item>cl_particles_blood_decal_scalemax</item>\n    <item>cl_particles_blood_decal_scalemin</item>\n    <item>cl_particles_bubbles</item>\n    <item>cl_particles_bulletimpacts</item>\n    <item>cl_particles_collisions</item>\n    <item>cl_particles_explosions_shell</item>\n    <item>cl_particles_explosions_sparks</item>\n    <item>cl_particles_oldnexbeam</item>\n    <item>cl_particles_quake</item>\n    <item>cl_particles_quality</item>\n    <item>cl_particles_rain</item>\n    <item>cl_particles_size</item>\n    <item>cl_particles_smoke</item>\n    <item>cl_particles_smoke_alpha</item>\n    <item>cl_particles_smoke_alphafade</item>\n    <item>cl_particles_snow</item>\n    <item>cl_particles_sparks</item>\n    <item>cl_particles_visculling</item>\n    <item>cl_pitchspeed</item>\n    <item>cl_playerdetailreduction</item>\n    <item>cl_port</item>\n    <item>cl_precacheplayermodels</item>\n    <item>cl_projectiles_sloppy</item>\n    <item>cl_prydoncursor</item>\n    <item>cl_prydoncursor_notrace</item>\n    <item>cl_readpicture_force</item>\n    <item>cl_reticle</item>\n    <item>cl_reticle_item_nex</item>\n    <item>cl_reticle_item_normal</item>\n    <item>cl_reticle_stretch</item>\n    <item>cl_rollangle</item>\n    <item>cl_rollspeed</item>\n    <item>cl_sandbox_clipboard</item>\n    <item>cl_serverextension_download</item>\n    <item>cl_shownet</item>\n    <item>cl_sidespeed</item>\n    <item>cl_simple_items</item>\n    <item>cl_simpleitems_postfix</item>\n    <item>cl_smoothviewheight</item>\n    <item>cl_sound_hknighthit</item>\n    <item>cl_sound_r_exp3</item>\n    <item>cl_sound_ric1</item>\n    <item>cl_sound_ric2</item>\n    <item>cl_sound_ric3</item>\n    <item>cl_sound_ric_gunshot</item>\n    <item>cl_sound_tink1</item>\n    <item>cl_sound_wizardhit</item>\n    <item>cl_spawn_event_particles</item>\n    <item>cl_spawn_event_sound</item>\n    <item>cl_spawn_point_particles</item>\n    <item>cl_spawnzoom</item>\n    <item>cl_spawnzoom_factor</item>\n    <item>cl_spawnzoom_speed</item>\n    <item>cl_stainmaps</item>\n    <item>cl_stainmaps_clearonload</item>\n    <item>cl_stairsmoothspeed</item>\n    <item>cl_startcount</item>\n    <item>cl_stripcolorcodes</item>\n    <item>cl_unpress_attack_on_weapon_switch</item>\n    <item>cl_unpress_zoom_on_death</item>\n    <item>cl_unpress_zoom_on_spawn</item>\n    <item>cl_unpress_zoom_on_weapon_switch</item>\n    <item>cl_upspeed</item>\n    <item>cl_vehicle_spiderbot_cross_alpha</item>\n    <item>cl_vehicle_spiderbot_cross_size</item>\n    <item>cl_vehicles_hud_tactical</item>\n    <item>cl_vehicles_hudalpha</item>\n    <item>cl_vehicles_hudscale</item>\n    <item>cl_velocityzoom</item>\n    <item>cl_velocityzoom_speed</item>\n    <item>cl_velocityzoom_time</item>\n    <item>cl_velocityzoom_type</item>\n    <item>cl_video_brightness</item>\n    <item>cl_video_fadein</item>\n    <item>cl_video_fadeout</item>\n    <item>cl_video_keepaspectratio</item>\n    <item>cl_video_scale</item>\n    <item>cl_video_scale_vpos</item>\n    <item>cl_video_stipple</item>\n    <item>cl_video_subtitles</item>\n    <item>cl_video_subtitles_lines</item>\n    <item>cl_video_subtitles_textsize</item>\n    <item>cl_viewmodel_scale</item>\n    <item>cl_voice_directional</item>\n    <item>cl_voice_directional_taunt_attenuation</item>\n    <item>cl_warpzone_usetrace</item>\n    <item>cl_weapon_stay_alpha</item>\n    <item>cl_weapon_stay_color</item>\n    <item>cl_weaponimpulsemode</item>\n    <item>cl_weaponpriority</item>\n    <item>cl_weaponpriority0</item>\n    <item>cl_weaponpriority1</item>\n    <item>cl_weaponpriority2</item>\n    <item>cl_weaponpriority3</item>\n    <item>cl_weaponpriority4</item>\n    <item>cl_weaponpriority5</item>\n    <item>cl_weaponpriority6</item>\n    <item>cl_weaponpriority7</item>\n    <item>cl_weaponpriority8</item>\n    <item>cl_weaponpriority9</item>\n    <item>cl_weaponpriority_useforcycling</item>\n    <item>cl_worldbasename</item>\n    <item>cl_worldmessage</item>\n    <item>cl_worldname</item>\n    <item>cl_worldnamenoextension</item>\n    <item>cl_yawspeed</item>\n    <item>cl_zoomfactor</item>\n    <item>cl_zoomsensitivity</item>\n    <item>cl_zoomspeed</item>\n    <item>cmdline</item>\n    <item>collision_cache</item>\n    <item>collision_debug_tracelineasbox</item>\n    <item>collision_endnudge</item>\n    <item>collision_endposnudge</item>\n    <item>collision_enternudge</item>\n    <item>collision_impactnudge</item>\n    <item>collision_leavenudge</item>\n    <item>collision_prefernudgedfraction</item>\n    <item>collision_startnudge</item>\n    <item>collision_triangle_axialsides</item>\n    <item>collision_triangle_bevelsides</item>\n    <item>con_chat</item>\n    <item>con_chatpos</item>\n    <item>con_chatrect</item>\n    <item>con_chatrect_x</item>\n    <item>con_chatrect_y</item>\n    <item>con_chatsize</item>\n    <item>con_chatsound</item>\n    <item>con_chattime</item>\n    <item>con_chatwidth</item>\n    <item>con_closeontoggleconsole</item>\n    <item>con_completion_chmap</item>\n    <item>con_completion_devmap</item>\n    <item>con_completion_exec</item>\n    <item>con_completion_gotomap</item>\n    <item>con_completion_playdemo</item>\n    <item>con_completion_playermodel</item>\n    <item>con_completion_ply</item>\n    <item>con_completion_tdem</item>\n    <item>con_completion_timedemo</item>\n    <item>con_completion_vdomap</item>\n    <item>con_completion_vmap</item>\n    <item>con_completion_vnextmap</item>\n    <item>con_nickcompletion</item>\n    <item>con_nickcompletion_flags</item>\n    <item>con_notify</item>\n    <item>con_notifyalign</item>\n    <item>con_notifysize</item>\n    <item>con_notifytime</item>\n    <item>con_textsize</item>\n    <item>coop</item>\n    <item>crosshair</item>\n    <item>crosshair_alpha</item>\n    <item>crosshair_color</item>\n    <item>crosshair_color_alpha</item>\n    <item>crosshair_color_blue</item>\n    <item>crosshair_color_green</item>\n    <item>crosshair_color_red</item>\n    <item>crosshair_color_special</item>\n    <item>crosshair_color_special_rainbow_brightness</item>\n    <item>crosshair_color_special_rainbow_delay</item>\n    <item>crosshair_crylink</item>\n    <item>crosshair_crylink_alpha</item>\n    <item>crosshair_crylink_color</item>\n    <item>crosshair_crylink_size</item>\n    <item>crosshair_dot</item>\n    <item>crosshair_dot_alpha</item>\n    <item>crosshair_dot_color</item>\n    <item>crosshair_dot_color_custom</item>\n    <item>crosshair_dot_size</item>\n    <item>crosshair_effect_scalefade</item>\n    <item>crosshair_effect_time</item>\n    <item>crosshair_electro</item>\n    <item>crosshair_electro_alpha</item>\n    <item>crosshair_electro_color</item>\n    <item>crosshair_electro_size</item>\n    <item>crosshair_enabled</item>\n    <item>crosshair_fireball</item>\n    <item>crosshair_fireball_alpha</item>\n    <item>crosshair_fireball_color</item>\n    <item>crosshair_fireball_size</item>\n    <item>crosshair_grenadelauncher</item>\n    <item>crosshair_grenadelauncher_alpha</item>\n    <item>crosshair_grenadelauncher_color</item>\n    <item>crosshair_grenadelauncher_size</item>\n    <item>crosshair_hagar</item>\n    <item>crosshair_hagar_alpha</item>\n    <item>crosshair_hagar_color</item>\n    <item>crosshair_hagar_size</item>\n    <item>crosshair_hitindication</item>\n    <item>crosshair_hitindication_color</item>\n    <item>crosshair_hitindication_per_weapon_color</item>\n    <item>crosshair_hitindication_speed</item>\n    <item>crosshair_hittest</item>\n    <item>crosshair_hittest_blur</item>\n    <item>crosshair_hittest_showimpact</item>\n    <item>crosshair_hlac</item>\n    <item>crosshair_hlac_alpha</item>\n    <item>crosshair_hlac_color</item>\n    <item>crosshair_hlac_size</item>\n    <item>crosshair_hook</item>\n    <item>crosshair_hook_alpha</item>\n    <item>crosshair_hook_color</item>\n    <item>crosshair_hook_size</item>\n    <item>crosshair_laser</item>\n    <item>crosshair_laser_alpha</item>\n    <item>crosshair_laser_color</item>\n    <item>crosshair_laser_size</item>\n    <item>crosshair_minelayer</item>\n    <item>crosshair_minelayer_alpha</item>\n    <item>crosshair_minelayer_color</item>\n    <item>crosshair_minelayer_size</item>\n    <item>crosshair_minstanex</item>\n    <item>crosshair_minstanex_alpha</item>\n    <item>crosshair_minstanex_color</item>\n    <item>crosshair_minstanex_size</item>\n    <item>crosshair_nex</item>\n    <item>crosshair_nex_alpha</item>\n    <item>crosshair_nex_color</item>\n    <item>crosshair_nex_size</item>\n    <item>crosshair_per_weapon</item>\n    <item>crosshair_pickup</item>\n    <item>crosshair_pickup_speed</item>\n    <item>crosshair_porto</item>\n    <item>crosshair_porto_alpha</item>\n    <item>crosshair_porto_color</item>\n    <item>crosshair_porto_size</item>\n    <item>crosshair_rifle</item>\n    <item>crosshair_rifle_alpha</item>\n    <item>crosshair_rifle_color</item>\n    <item>crosshair_rifle_size</item>\n    <item>crosshair_ring</item>\n    <item>crosshair_ring_alpha</item>\n    <item>crosshair_ring_hagar</item>\n    <item>crosshair_ring_hagar_alpha</item>\n    <item>crosshair_ring_inner</item>\n    <item>crosshair_ring_minelayer</item>\n    <item>crosshair_ring_minelayer_alpha</item>\n    <item>crosshair_ring_nex</item>\n    <item>crosshair_ring_nex_alpha</item>\n    <item>crosshair_ring_nex_currentcharge_movingavg_rate</item>\n    <item>crosshair_ring_nex_currentcharge_scale</item>\n    <item>crosshair_ring_nex_inner_alpha</item>\n    <item>crosshair_ring_nex_inner_color_blue</item>\n    <item>crosshair_ring_nex_inner_color_green</item>\n    <item>crosshair_ring_nex_inner_color_red</item>\n    <item>crosshair_ring_reload</item>\n    <item>crosshair_ring_reload_alpha</item>\n    <item>crosshair_ring_reload_size</item>\n    <item>crosshair_ring_size</item>\n    <item>crosshair_rocketlauncher</item>\n    <item>crosshair_rocketlauncher_alpha</item>\n    <item>crosshair_rocketlauncher_color</item>\n    <item>crosshair_rocketlauncher_size</item>\n    <item>crosshair_seeker</item>\n    <item>crosshair_seeker_alpha</item>\n    <item>crosshair_seeker_color</item>\n    <item>crosshair_seeker_size</item>\n    <item>crosshair_shotgun</item>\n    <item>crosshair_shotgun_alpha</item>\n    <item>crosshair_shotgun_color</item>\n    <item>crosshair_shotgun_size</item>\n    <item>crosshair_size</item>\n    <item>crosshair_tuba</item>\n    <item>crosshair_tuba_alpha</item>\n    <item>crosshair_tuba_color</item>\n    <item>crosshair_tuba_size</item>\n    <item>crosshair_uzi</item>\n    <item>crosshair_uzi_alpha</item>\n    <item>crosshair_uzi_color</item>\n    <item>crosshair_uzi_size</item>\n    <item>csqc_progcrc</item>\n    <item>csqc_progname</item>\n    <item>csqc_progsize</item>\n    <item>csqc_usedemoprogs</item>\n    <item>cutscene</item>\n    <item>deathmatch</item>\n    <item>developer</item>\n    <item>developer_csqcentities</item>\n    <item>developer_entityparsing</item>\n    <item>developer_extra</item>\n    <item>developer_font</item>\n    <item>developer_fteqccbugs</item>\n    <item>developer_insane</item>\n    <item>developer_loadfile</item>\n    <item>developer_loading</item>\n    <item>developer_memory</item>\n    <item>developer_memorydebug</item>\n    <item>developer_networkentities</item>\n    <item>developer_networking</item>\n    <item>developer_texturelogging</item>\n    <item>edgefriction</item>\n    <item>ekg</item>\n    <item>forceqmenu</item>\n    <item>fov</item>\n    <item>fraglimit</item>\n    <item>fraglimit_override</item>\n    <item>freelook</item>\n    <item>fs_empty_files_in_pack_mark_deletions</item>\n    <item>fs_gamedir</item>\n    <item>find</item>\n    <item>g_allow_oldnexbeam</item>\n    <item>g_antilag</item>\n    <item>g_antilag_bullets</item>\n    <item>g_antilag_nudge</item>\n    <item>g_arena</item>\n    <item>g_arena_maxspawned</item>\n    <item>g_arena_point_leadlimit</item>\n    <item>g_arena_point_limit</item>\n    <item>g_arena_respawn_delay</item>\n    <item>g_arena_respawn_waves</item>\n    <item>g_arena_round_timelimit</item>\n    <item>g_arena_roundbased</item>\n    <item>g_arena_warmup</item>\n    <item>g_arena_weapon_stay</item>\n    <item>g_as_respawn_delay</item>\n    <item>g_as_respawn_waves</item>\n    <item>g_as_weapon_stay</item>\n    <item>g_assault</item>\n    <item>g_balance_armor_blockpercent</item>\n    <item>g_balance_armor_limit</item>\n    <item>g_balance_armor_regen</item>\n    <item>g_balance_armor_regenlinear</item>\n    <item>g_balance_armor_regenstable</item>\n    <item>g_balance_armor_rot</item>\n    <item>g_balance_armor_rotlinear</item>\n    <item>g_balance_armor_rotstable</item>\n    <item>g_balance_armor_start</item>\n    <item>g_balance_cloaked_alpha</item>\n    <item>g_balance_contents_damagerate</item>\n    <item>g_balance_contents_drowndelay</item>\n    <item>g_balance_contents_playerdamage_drowning</item>\n    <item>g_balance_contents_playerdamage_lava</item>\n    <item>g_balance_contents_playerdamage_slime</item>\n    <item>g_balance_contents_projectiledamage</item>\n    <item>g_balance_crylink_primary_ammo</item>\n    <item>g_balance_crylink_primary_animtime</item>\n    <item>g_balance_crylink_primary_bouncedamagefactor</item>\n    <item>g_balance_crylink_primary_bounces</item>\n    <item>g_balance_crylink_primary_damage</item>\n    <item>g_balance_crylink_primary_edgedamage</item>\n    <item>g_balance_crylink_primary_force</item>\n    <item>g_balance_crylink_primary_joindelay</item>\n    <item>g_balance_crylink_primary_joinexplode</item>\n    <item>g_balance_crylink_primary_joinexplode_damage</item>\n    <item>g_balance_crylink_primary_joinexplode_edgedamage</item>\n    <item>g_balance_crylink_primary_joinexplode_force</item>\n    <item>g_balance_crylink_primary_joinexplode_radius</item>\n    <item>g_balance_crylink_primary_joinspread</item>\n    <item>g_balance_crylink_primary_jointime</item>\n    <item>g_balance_crylink_primary_linkexplode</item>\n    <item>g_balance_crylink_primary_middle_fadetime</item>\n    <item>g_balance_crylink_primary_middle_lifetime</item>\n    <item>g_balance_crylink_primary_other_fadetime</item>\n    <item>g_balance_crylink_primary_other_lifetime</item>\n    <item>g_balance_crylink_primary_radius</item>\n    <item>g_balance_crylink_primary_refire</item>\n    <item>g_balance_crylink_primary_shots</item>\n    <item>g_balance_crylink_primary_speed</item>\n    <item>g_balance_crylink_primary_spread</item>\n    <item>g_balance_crylink_reload_ammo</item>\n    <item>g_balance_crylink_reload_time</item>\n    <item>g_balance_crylink_secondary</item>\n    <item>g_balance_crylink_secondary_ammo</item>\n    <item>g_balance_crylink_secondary_animtime</item>\n    <item>g_balance_crylink_secondary_bouncedamagefactor</item>\n    <item>g_balance_crylink_secondary_bounces</item>\n    <item>g_balance_crylink_secondary_damage</item>\n    <item>g_balance_crylink_secondary_edgedamage</item>\n    <item>g_balance_crylink_secondary_force</item>\n    <item>g_balance_crylink_secondary_joindelay</item>\n    <item>g_balance_crylink_secondary_joinexplode</item>\n    <item>g_balance_crylink_secondary_joinexplode_damage</item>\n    <item>g_balance_crylink_secondary_joinexplode_edgedamage</item>\n    <item>g_balance_crylink_secondary_joinexplode_force</item>\n    <item>g_balance_crylink_secondary_joinexplode_radius</item>\n    <item>g_balance_crylink_secondary_joinspread</item>\n    <item>g_balance_crylink_secondary_jointime</item>\n    <item>g_balance_crylink_secondary_line_fadetime</item>\n    <item>g_balance_crylink_secondary_line_lifetime</item>\n    <item>g_balance_crylink_secondary_linkexplode</item>\n    <item>g_balance_crylink_secondary_middle_fadetime</item>\n    <item>g_balance_crylink_secondary_middle_lifetime</item>\n    <item>g_balance_crylink_secondary_radius</item>\n    <item>g_balance_crylink_secondary_refire</item>\n    <item>g_balance_crylink_secondary_shots</item>\n    <item>g_balance_crylink_secondary_speed</item>\n    <item>g_balance_crylink_secondary_spread</item>\n    <item>g_balance_crylink_secondary_spreadtype</item>\n    <item>g_balance_crylink_switchdelay_drop</item>\n    <item>g_balance_crylink_switchdelay_raise</item>\n    <item>g_balance_damagepush_speedfactor</item>\n    <item>g_balance_electro_combo_comboradius</item>\n    <item>g_balance_electro_combo_damage</item>\n    <item>g_balance_electro_combo_edgedamage</item>\n    <item>g_balance_electro_combo_force</item>\n    <item>g_balance_electro_combo_radius</item>\n    <item>g_balance_electro_combo_safeammocheck</item>\n    <item>g_balance_electro_combo_speed</item>\n    <item>g_balance_electro_lightning</item>\n    <item>g_balance_electro_primary_ammo</item>\n    <item>g_balance_electro_primary_animtime</item>\n    <item>g_balance_electro_primary_comboradius</item>\n    <item>g_balance_electro_primary_damage</item>\n    <item>g_balance_electro_primary_edgedamage</item>\n    <item>g_balance_electro_primary_falloff_halflifedist</item>\n    <item>g_balance_electro_primary_falloff_maxdist</item>\n    <item>g_balance_electro_primary_falloff_mindist</item>\n    <item>g_balance_electro_primary_force</item>\n    <item>g_balance_electro_primary_force_up</item>\n    <item>g_balance_electro_primary_lifetime</item>\n    <item>g_balance_electro_primary_radius</item>\n    <item>g_balance_electro_primary_range</item>\n    <item>g_balance_electro_primary_refire</item>\n    <item>g_balance_electro_primary_speed</item>\n    <item>g_balance_electro_primary_spread</item>\n    <item>g_balance_electro_reload_ammo</item>\n    <item>g_balance_electro_reload_time</item>\n    <item>g_balance_electro_secondary_ammo</item>\n    <item>g_balance_electro_secondary_animtime</item>\n    <item>g_balance_electro_secondary_bouncefactor</item>\n    <item>g_balance_electro_secondary_bouncestop</item>\n    <item>g_balance_electro_secondary_count</item>\n    <item>g_balance_electro_secondary_damage</item>\n    <item>g_balance_electro_secondary_damagedbycontents</item>\n    <item>g_balance_electro_secondary_damageforcescale</item>\n    <item>g_balance_electro_secondary_edgedamage</item>\n    <item>g_balance_electro_secondary_force</item>\n    <item>g_balance_electro_secondary_health</item>\n    <item>g_balance_electro_secondary_lifetime</item>\n    <item>g_balance_electro_secondary_radius</item>\n    <item>g_balance_electro_secondary_refire</item>\n    <item>g_balance_electro_secondary_refire2</item>\n    <item>g_balance_electro_secondary_speed</item>\n    <item>g_balance_electro_secondary_speed_up</item>\n    <item>g_balance_electro_secondary_speed_z</item>\n    <item>g_balance_electro_secondary_spread</item>\n    <item>g_balance_electro_switchdelay_drop</item>\n    <item>g_balance_electro_switchdelay_raise</item>\n    <item>g_balance_falldamage_deadminspeed</item>\n    <item>g_balance_falldamage_factor</item>\n    <item>g_balance_falldamage_maxdamage</item>\n    <item>g_balance_falldamage_minspeed</item>\n    <item>g_balance_fireball_primary_animtime</item>\n    <item>g_balance_fireball_primary_bfgdamage</item>\n    <item>g_balance_fireball_primary_bfgforce</item>\n    <item>g_balance_fireball_primary_bfgradius</item>\n    <item>g_balance_fireball_primary_damage</item>\n    <item>g_balance_fireball_primary_damageforcescale</item>\n    <item>g_balance_fireball_primary_edgedamage</item>\n    <item>g_balance_fireball_primary_force</item>\n    <item>g_balance_fireball_primary_health</item>\n    <item>g_balance_fireball_primary_laserburntime</item>\n    <item>g_balance_fireball_primary_laserdamage</item>\n    <item>g_balance_fireball_primary_laseredgedamage</item>\n    <item>g_balance_fireball_primary_laserradius</item>\n    <item>g_balance_fireball_primary_lifetime</item>\n    <item>g_balance_fireball_primary_radius</item>\n    <item>g_balance_fireball_primary_refire</item>\n    <item>g_balance_fireball_primary_refire2</item>\n    <item>g_balance_fireball_primary_speed</item>\n    <item>g_balance_fireball_primary_spread</item>\n    <item>g_balance_fireball_secondary_animtime</item>\n    <item>g_balance_fireball_secondary_damage</item>\n    <item>g_balance_fireball_secondary_damageforcescale</item>\n    <item>g_balance_fireball_secondary_damagetime</item>\n    <item>g_balance_fireball_secondary_force</item>\n    <item>g_balance_fireball_secondary_laserburntime</item>\n    <item>g_balance_fireball_secondary_laserdamage</item>\n    <item>g_balance_fireball_secondary_laseredgedamage</item>\n    <item>g_balance_fireball_secondary_laserradius</item>\n    <item>g_balance_fireball_secondary_lifetime</item>\n    <item>g_balance_fireball_secondary_refire</item>\n    <item>g_balance_fireball_secondary_speed</item>\n    <item>g_balance_fireball_secondary_speed_up</item>\n    <item>g_balance_fireball_secondary_speed_z</item>\n    <item>g_balance_fireball_secondary_spread</item>\n    <item>g_balance_fireball_switchdelay_drop</item>\n    <item>g_balance_fireball_switchdelay_raise</item>\n    <item>g_balance_firetransfer_damage</item>\n    <item>g_balance_firetransfer_time</item>\n    <item>g_balance_fuel_limit</item>\n    <item>g_balance_fuel_regen</item>\n    <item>g_balance_fuel_regenlinear</item>\n    <item>g_balance_fuel_regenstable</item>\n    <item>g_balance_fuel_rot</item>\n    <item>g_balance_fuel_rotlinear</item>\n    <item>g_balance_fuel_rotstable</item>\n    <item>g_balance_grapplehook_airfriction</item>\n    <item>g_balance_grapplehook_damagedbycontents</item>\n    <item>g_balance_grapplehook_force_rubber</item>\n    <item>g_balance_grapplehook_force_rubber_overstretch</item>\n    <item>g_balance_grapplehook_health</item>\n    <item>g_balance_grapplehook_length_min</item>\n    <item>g_balance_grapplehook_speed_fly</item>\n    <item>g_balance_grapplehook_speed_pull</item>\n    <item>g_balance_grapplehook_stretch</item>\n    <item>g_balance_grenadelauncher_bouncefactor</item>\n    <item>g_balance_grenadelauncher_bouncestop</item>\n    <item>g_balance_grenadelauncher_primary_ammo</item>\n    <item>g_balance_grenadelauncher_primary_animtime</item>\n    <item>g_balance_grenadelauncher_primary_damage</item>\n    <item>g_balance_grenadelauncher_primary_damageforcescale</item>\n    <item>g_balance_grenadelauncher_primary_edgedamage</item>\n    <item>g_balance_grenadelauncher_primary_force</item>\n    <item>g_balance_grenadelauncher_primary_health</item>\n    <item>g_balance_grenadelauncher_primary_lifetime</item>\n    <item>g_balance_grenadelauncher_primary_lifetime2</item>\n    <item>g_balance_grenadelauncher_primary_radius</item>\n    <item>g_balance_grenadelauncher_primary_refire</item>\n    <item>g_balance_grenadelauncher_primary_remote_minbouncecnt</item>\n    <item>g_balance_grenadelauncher_primary_speed</item>\n    <item>g_balance_grenadelauncher_primary_speed_up</item>\n    <item>g_balance_grenadelauncher_primary_speed_z</item>\n    <item>g_balance_grenadelauncher_primary_spread</item>\n    <item>g_balance_grenadelauncher_primary_type</item>\n    <item>g_balance_grenadelauncher_reload_ammo</item>\n    <item>g_balance_grenadelauncher_reload_time</item>\n    <item>g_balance_grenadelauncher_secondary_ammo</item>\n    <item>g_balance_grenadelauncher_secondary_animtime</item>\n    <item>g_balance_grenadelauncher_secondary_damage</item>\n    <item>g_balance_grenadelauncher_secondary_damageforcescale</item>\n    <item>g_balance_grenadelauncher_secondary_edgedamage</item>\n    <item>g_balance_grenadelauncher_secondary_force</item>\n    <item>g_balance_grenadelauncher_secondary_health</item>\n    <item>g_balance_grenadelauncher_secondary_lifetime</item>\n    <item>g_balance_grenadelauncher_secondary_lifetime_bounce</item>\n    <item>g_balance_grenadelauncher_secondary_lifetime_stick</item>\n    <item>g_balance_grenadelauncher_secondary_radius</item>\n    <item>g_balance_grenadelauncher_secondary_refire</item>\n    <item>g_balance_grenadelauncher_secondary_remote_detonateprimary</item>\n    <item>g_balance_grenadelauncher_secondary_speed</item>\n    <item>g_balance_grenadelauncher_secondary_speed_up</item>\n    <item>g_balance_grenadelauncher_secondary_speed_z</item>\n    <item>g_balance_grenadelauncher_secondary_spread</item>\n    <item>g_balance_grenadelauncher_secondary_type</item>\n    <item>g_balance_grenadelauncher_switchdelay_drop</item>\n    <item>g_balance_grenadelauncher_switchdelay_raise</item>\n    <item>g_balance_hagar_primary_ammo</item>\n    <item>g_balance_hagar_primary_damage</item>\n    <item>g_balance_hagar_primary_damageforcescale</item>\n    <item>g_balance_hagar_primary_edgedamage</item>\n    <item>g_balance_hagar_primary_force</item>\n    <item>g_balance_hagar_primary_health</item>\n    <item>g_balance_hagar_primary_lifetime</item>\n    <item>g_balance_hagar_primary_radius</item>\n    <item>g_balance_hagar_primary_refire</item>\n    <item>g_balance_hagar_primary_speed</item>\n    <item>g_balance_hagar_primary_spread</item>\n    <item>g_balance_hagar_reload_ammo</item>\n    <item>g_balance_hagar_reload_time</item>\n    <item>g_balance_hagar_secondary</item>\n    <item>g_balance_hagar_secondary_ammo</item>\n    <item>g_balance_hagar_secondary_damage</item>\n    <item>g_balance_hagar_secondary_damageforcescale</item>\n    <item>g_balance_hagar_secondary_edgedamage</item>\n    <item>g_balance_hagar_secondary_force</item>\n    <item>g_balance_hagar_secondary_health</item>\n    <item>g_balance_hagar_secondary_lifetime_min</item>\n    <item>g_balance_hagar_secondary_lifetime_rand</item>\n    <item>g_balance_hagar_secondary_load</item>\n    <item>g_balance_hagar_secondary_load_abort</item>\n    <item>g_balance_hagar_secondary_load_animtime</item>\n    <item>g_balance_hagar_secondary_load_hold</item>\n    <item>g_balance_hagar_secondary_load_linkexplode</item>\n    <item>g_balance_hagar_secondary_load_max</item>\n    <item>g_balance_hagar_secondary_load_releasedeath</item>\n    <item>g_balance_hagar_secondary_load_speed</item>\n    <item>g_balance_hagar_secondary_load_spread</item>\n    <item>g_balance_hagar_secondary_load_spread_bias</item>\n    <item>g_balance_hagar_secondary_radius</item>\n    <item>g_balance_hagar_secondary_refire</item>\n    <item>g_balance_hagar_secondary_speed</item>\n    <item>g_balance_hagar_secondary_spread</item>\n    <item>g_balance_hagar_switchdelay_drop</item>\n    <item>g_balance_hagar_switchdelay_raise</item>\n    <item>g_balance_health_limit</item>\n    <item>g_balance_health_regen</item>\n    <item>g_balance_health_regenlinear</item>\n    <item>g_balance_health_regenstable</item>\n    <item>g_balance_health_rot</item>\n    <item>g_balance_health_rotlinear</item>\n    <item>g_balance_health_rotstable</item>\n    <item>g_balance_health_start</item>\n    <item>g_balance_hlac_primary_ammo</item>\n    <item>g_balance_hlac_primary_animtime</item>\n    <item>g_balance_hlac_primary_damage</item>\n    <item>g_balance_hlac_primary_edgedamage</item>\n    <item>g_balance_hlac_primary_force</item>\n    <item>g_balance_hlac_primary_lifetime</item>\n    <item>g_balance_hlac_primary_radius</item>\n    <item>g_balance_hlac_primary_refire</item>\n    <item>g_balance_hlac_primary_speed</item>\n    <item>g_balance_hlac_primary_spread_add</item>\n    <item>g_balance_hlac_primary_spread_crouchmod</item>\n    <item>g_balance_hlac_primary_spread_max</item>\n    <item>g_balance_hlac_primary_spread_min</item>\n    <item>g_balance_hlac_reload_ammo</item>\n    <item>g_balance_hlac_reload_time</item>\n    <item>g_balance_hlac_secondary</item>\n    <item>g_balance_hlac_secondary_ammo</item>\n    <item>g_balance_hlac_secondary_animtime</item>\n    <item>g_balance_hlac_secondary_damage</item>\n    <item>g_balance_hlac_secondary_edgedamage</item>\n    <item>g_balance_hlac_secondary_force</item>\n    <item>g_balance_hlac_secondary_lifetime</item>\n    <item>g_balance_hlac_secondary_radius</item>\n    <item>g_balance_hlac_secondary_refire</item>\n    <item>g_balance_hlac_secondary_shots</item>\n    <item>g_balance_hlac_secondary_speed</item>\n    <item>g_balance_hlac_secondary_spread</item>\n    <item>g_balance_hlac_secondary_spread_crouchmod</item>\n    <item>g_balance_hlac_switchdelay_drop</item>\n    <item>g_balance_hlac_switchdelay_raise</item>\n    <item>g_balance_hook_primary_animtime</item>\n    <item>g_balance_hook_primary_fuel</item>\n    <item>g_balance_hook_primary_hooked_fuel</item>\n    <item>g_balance_hook_primary_hooked_time_free</item>\n    <item>g_balance_hook_primary_hooked_time_max</item>\n    <item>g_balance_hook_primary_refire</item>\n    <item>g_balance_hook_secondary_ammo</item>\n    <item>g_balance_hook_secondary_animtime</item>\n    <item>g_balance_hook_secondary_damage</item>\n    <item>g_balance_hook_secondary_damageforcescale</item>\n    <item>g_balance_hook_secondary_duration</item>\n    <item>g_balance_hook_secondary_edgedamage</item>\n    <item>g_balance_hook_secondary_force</item>\n    <item>g_balance_hook_secondary_gravity</item>\n    <item>g_balance_hook_secondary_health</item>\n    <item>g_balance_hook_secondary_lifetime</item>\n    <item>g_balance_hook_secondary_power</item>\n    <item>g_balance_hook_secondary_radius</item>\n    <item>g_balance_hook_secondary_refire</item>\n    <item>g_balance_hook_secondary_speed</item>\n    <item>g_balance_hook_switchdelay_drop</item>\n    <item>g_balance_hook_switchdelay_raise</item>\n    <item>g_balance_keyhunt_damageforcescale</item>\n    <item>g_balance_keyhunt_delay_collect</item>\n    <item>g_balance_keyhunt_delay_fadeout</item>\n    <item>g_balance_keyhunt_delay_return</item>\n    <item>g_balance_keyhunt_delay_round</item>\n    <item>g_balance_keyhunt_delay_tracking</item>\n    <item>g_balance_keyhunt_dropvelocity</item>\n    <item>g_balance_keyhunt_maxdist</item>\n    <item>g_balance_keyhunt_protecttime</item>\n    <item>g_balance_keyhunt_score_capture</item>\n    <item>g_balance_keyhunt_score_carrierfrag</item>\n    <item>g_balance_keyhunt_score_collect</item>\n    <item>g_balance_keyhunt_score_destroyed</item>\n    <item>g_balance_keyhunt_score_destroyed_ownfactor</item>\n    <item>g_balance_keyhunt_score_push</item>\n    <item>g_balance_keyhunt_throwvelocity</item>\n    <item>g_balance_kill_antispam</item>\n    <item>g_balance_kill_delay</item>\n    <item>g_balance_laser_primary_animtime</item>\n    <item>g_balance_laser_primary_damage</item>\n    <item>g_balance_laser_primary_delay</item>\n    <item>g_balance_laser_primary_edgedamage</item>\n    <item>g_balance_laser_primary_force</item>\n    <item>g_balance_laser_primary_force_other_scale</item>\n    <item>g_balance_laser_primary_force_velocitybias</item>\n    <item>g_balance_laser_primary_force_zscale</item>\n    <item>g_balance_laser_primary_gauntlet</item>\n    <item>g_balance_laser_primary_lifetime</item>\n    <item>g_balance_laser_primary_radius</item>\n    <item>g_balance_laser_primary_refire</item>\n    <item>g_balance_laser_primary_shotangle</item>\n    <item>g_balance_laser_primary_speed</item>\n    <item>g_balance_laser_primary_spread</item>\n    <item>g_balance_laser_reload_ammo</item>\n    <item>g_balance_laser_reload_time</item>\n    <item>g_balance_laser_secondary</item>\n    <item>g_balance_laser_secondary_animtime</item>\n    <item>g_balance_laser_secondary_damage</item>\n    <item>g_balance_laser_secondary_delay</item>\n    <item>g_balance_laser_secondary_edgedamage</item>\n    <item>g_balance_laser_secondary_force</item>\n    <item>g_balance_laser_secondary_force_other_scale</item>\n    <item>g_balance_laser_secondary_force_velocitybias</item>\n    <item>g_balance_laser_secondary_force_zscale</item>\n    <item>g_balance_laser_secondary_gauntlet</item>\n    <item>g_balance_laser_secondary_lifetime</item>\n    <item>g_balance_laser_secondary_radius</item>\n    <item>g_balance_laser_secondary_refire</item>\n    <item>g_balance_laser_secondary_shotangle</item>\n    <item>g_balance_laser_secondary_speed</item>\n    <item>g_balance_laser_secondary_spread</item>\n    <item>g_balance_laser_switchdelay_drop</item>\n    <item>g_balance_laser_switchdelay_raise</item>\n    <item>g_balance_minelayer_ammo</item>\n    <item>g_balance_minelayer_animtime</item>\n    <item>g_balance_minelayer_damage</item>\n    <item>g_balance_minelayer_damageforcescale</item>\n    <item>g_balance_minelayer_detonatedelay</item>\n    <item>g_balance_minelayer_edgedamage</item>\n    <item>g_balance_minelayer_force</item>\n    <item>g_balance_minelayer_health</item>\n    <item>g_balance_minelayer_lifetime</item>\n    <item>g_balance_minelayer_lifetime_countdown</item>\n    <item>g_balance_minelayer_limit</item>\n    <item>g_balance_minelayer_protection</item>\n    <item>g_balance_minelayer_proximityradius</item>\n    <item>g_balance_minelayer_radius</item>\n    <item>g_balance_minelayer_refire</item>\n    <item>g_balance_minelayer_reload_ammo</item>\n    <item>g_balance_minelayer_reload_time</item>\n    <item>g_balance_minelayer_remote_damage</item>\n    <item>g_balance_minelayer_remote_edgedamage</item>\n    <item>g_balance_minelayer_remote_force</item>\n    <item>g_balance_minelayer_remote_radius</item>\n    <item>g_balance_minelayer_speed</item>\n    <item>g_balance_minelayer_switchdelay_drop</item>\n    <item>g_balance_minelayer_switchdelay_raise</item>\n    <item>g_balance_minelayer_time</item>\n    <item>g_balance_minstanex_ammo</item>\n    <item>g_balance_minstanex_animtime</item>\n    <item>g_balance_minstanex_laser_ammo</item>\n    <item>g_balance_minstanex_laser_animtime</item>\n    <item>g_balance_minstanex_laser_refire</item>\n    <item>g_balance_minstanex_refire</item>\n    <item>g_balance_minstanex_reload_ammo</item>\n    <item>g_balance_minstanex_reload_time</item>\n    <item>g_balance_minstanex_switchdelay_drop</item>\n    <item>g_balance_minstanex_switchdelay_raise</item>\n    <item>g_balance_nex_charge</item>\n    <item>g_balance_nex_charge_animlimit</item>\n    <item>g_balance_nex_charge_limit</item>\n    <item>g_balance_nex_charge_maxspeed</item>\n    <item>g_balance_nex_charge_mindmg</item>\n    <item>g_balance_nex_charge_minspeed</item>\n    <item>g_balance_nex_charge_rate</item>\n    <item>g_balance_nex_charge_rot_pause</item>\n    <item>g_balance_nex_charge_rot_rate</item>\n    <item>g_balance_nex_charge_shot_multiplier</item>\n    <item>g_balance_nex_charge_start</item>\n    <item>g_balance_nex_charge_velocity_rate</item>\n    <item>g_balance_nex_primary_ammo</item>\n    <item>g_balance_nex_primary_animtime</item>\n    <item>g_balance_nex_primary_damage</item>\n    <item>g_balance_nex_primary_damagefalloff_forcehalflife</item>\n    <item>g_balance_nex_primary_damagefalloff_halflife</item>\n    <item>g_balance_nex_primary_damagefalloff_maxdist</item>\n    <item>g_balance_nex_primary_damagefalloff_mindist</item>\n    <item>g_balance_nex_primary_force</item>\n    <item>g_balance_nex_primary_refire</item>\n    <item>g_balance_nex_reload_ammo</item>\n    <item>g_balance_nex_reload_time</item>\n    <item>g_balance_nex_secondary</item>\n    <item>g_balance_nex_secondary_ammo</item>\n    <item>g_balance_nex_secondary_animtime</item>\n    <item>g_balance_nex_secondary_charge</item>\n    <item>g_balance_nex_secondary_charge_rate</item>\n    <item>g_balance_nex_secondary_chargepool</item>\n    <item>g_balance_nex_secondary_chargepool_pause_health_regen</item>\n    <item>g_balance_nex_secondary_chargepool_pause_regen</item>\n    <item>g_balance_nex_secondary_chargepool_regen</item>\n    <item>g_balance_nex_secondary_damage</item>\n    <item>g_balance_nex_secondary_damagefalloff_forcehalflife</item>\n    <item>g_balance_nex_secondary_damagefalloff_halflife</item>\n    <item>g_balance_nex_secondary_damagefalloff_maxdist</item>\n    <item>g_balance_nex_secondary_damagefalloff_mindist</item>\n    <item>g_balance_nex_secondary_force</item>\n    <item>g_balance_nex_secondary_refire</item>\n    <item>g_balance_nex_switchdelay_drop</item>\n    <item>g_balance_nex_switchdelay_raise</item>\n    <item>g_balance_nexball_primary_animtime</item>\n    <item>g_balance_nexball_primary_refire</item>\n    <item>g_balance_nexball_primary_speed</item>\n    <item>g_balance_nexball_secondary_animtime</item>\n    <item>g_balance_nexball_secondary_force</item>\n    <item>g_balance_nexball_secondary_lifetime</item>\n    <item>g_balance_nexball_secondary_refire</item>\n    <item>g_balance_nexball_secondary_speed</item>\n    <item>g_balance_nix_ammo_cells</item>\n    <item>g_balance_nix_ammo_fuel</item>\n    <item>g_balance_nix_ammo_nails</item>\n    <item>g_balance_nix_ammo_rockets</item>\n    <item>g_balance_nix_ammo_shells</item>\n    <item>g_balance_nix_ammoincr_cells</item>\n    <item>g_balance_nix_ammoincr_fuel</item>\n    <item>g_balance_nix_ammoincr_nails</item>\n    <item>g_balance_nix_ammoincr_rockets</item>\n    <item>g_balance_nix_ammoincr_shells</item>\n    <item>g_balance_nix_incrtime</item>\n    <item>g_balance_nix_roundtime</item>\n    <item>g_balance_pause_armor_rot</item>\n    <item>g_balance_pause_armor_rot_spawn</item>\n    <item>g_balance_pause_fuel_regen</item>\n    <item>g_balance_pause_fuel_rot</item>\n    <item>g_balance_pause_fuel_rot_spawn</item>\n    <item>g_balance_pause_health_regen</item>\n    <item>g_balance_pause_health_regen_spawn</item>\n    <item>g_balance_pause_health_rot</item>\n    <item>g_balance_pause_health_rot_spawn</item>\n    <item>g_balance_portal_health</item>\n    <item>g_balance_portal_lifetime</item>\n    <item>g_balance_porto_primary_animtime</item>\n    <item>g_balance_porto_primary_lifetime</item>\n    <item>g_balance_porto_primary_refire</item>\n    <item>g_balance_porto_primary_speed</item>\n    <item>g_balance_porto_secondary</item>\n    <item>g_balance_porto_secondary_animtime</item>\n    <item>g_balance_porto_secondary_lifetime</item>\n    <item>g_balance_porto_secondary_refire</item>\n    <item>g_balance_porto_secondary_speed</item>\n    <item>g_balance_porto_switchdelay_drop</item>\n    <item>g_balance_porto_switchdelay_raise</item>\n    <item>g_balance_powerup_invincible_takedamage</item>\n    <item>g_balance_powerup_invincible_time</item>\n    <item>g_balance_powerup_strength_damage</item>\n    <item>g_balance_powerup_strength_force</item>\n    <item>g_balance_powerup_strength_selfdamage</item>\n    <item>g_balance_powerup_strength_selfforce</item>\n    <item>g_balance_powerup_strength_time</item>\n    <item>g_balance_rifle_bursttime</item>\n    <item>g_balance_rifle_primary_ammo</item>\n    <item>g_balance_rifle_primary_animtime</item>\n    <item>g_balance_rifle_primary_bulletconstant</item>\n    <item>g_balance_rifle_primary_bullethail</item>\n    <item>g_balance_rifle_primary_burstcost</item>\n    <item>g_balance_rifle_primary_damage</item>\n    <item>g_balance_rifle_primary_force</item>\n    <item>g_balance_rifle_primary_lifetime</item>\n    <item>g_balance_rifle_primary_refire</item>\n    <item>g_balance_rifle_primary_shots</item>\n    <item>g_balance_rifle_primary_speed</item>\n    <item>g_balance_rifle_primary_spread</item>\n    <item>g_balance_rifle_primary_tracer</item>\n    <item>g_balance_rifle_reload_ammo</item>\n    <item>g_balance_rifle_reload_time</item>\n    <item>g_balance_rifle_secondary</item>\n    <item>g_balance_rifle_secondary_ammo</item>\n    <item>g_balance_rifle_secondary_animtime</item>\n    <item>g_balance_rifle_secondary_bulletconstant</item>\n    <item>g_balance_rifle_secondary_bullethail</item>\n    <item>g_balance_rifle_secondary_burstcost</item>\n    <item>g_balance_rifle_secondary_damage</item>\n    <item>g_balance_rifle_secondary_force</item>\n    <item>g_balance_rifle_secondary_lifetime</item>\n    <item>g_balance_rifle_secondary_refire</item>\n    <item>g_balance_rifle_secondary_reload</item>\n    <item>g_balance_rifle_secondary_shots</item>\n    <item>g_balance_rifle_secondary_speed</item>\n    <item>g_balance_rifle_secondary_spread</item>\n    <item>g_balance_rifle_secondary_tracer</item>\n    <item>g_balance_rifle_switchdelay_drop</item>\n    <item>g_balance_rifle_switchdelay_raise</item>\n    <item>g_balance_rocketlauncher_ammo</item>\n    <item>g_balance_rocketlauncher_animtime</item>\n    <item>g_balance_rocketlauncher_damage</item>\n    <item>g_balance_rocketlauncher_damageforcescale</item>\n    <item>g_balance_rocketlauncher_detonatedelay</item>\n    <item>g_balance_rocketlauncher_edgedamage</item>\n    <item>g_balance_rocketlauncher_force</item>\n    <item>g_balance_rocketlauncher_guidedelay</item>\n    <item>g_balance_rocketlauncher_guidegoal</item>\n    <item>g_balance_rocketlauncher_guiderate</item>\n    <item>g_balance_rocketlauncher_guideratedelay</item>\n    <item>g_balance_rocketlauncher_guidestop</item>\n    <item>g_balance_rocketlauncher_health</item>\n    <item>g_balance_rocketlauncher_lifetime</item>\n    <item>g_balance_rocketlauncher_radius</item>\n    <item>g_balance_rocketlauncher_refire</item>\n    <item>g_balance_rocketlauncher_reload_ammo</item>\n    <item>g_balance_rocketlauncher_reload_time</item>\n    <item>g_balance_rocketlauncher_remote_damage</item>\n    <item>g_balance_rocketlauncher_remote_edgedamage</item>\n    <item>g_balance_rocketlauncher_remote_force</item>\n    <item>g_balance_rocketlauncher_remote_radius</item>\n    <item>g_balance_rocketlauncher_speed</item>\n    <item>g_balance_rocketlauncher_speedaccel</item>\n    <item>g_balance_rocketlauncher_speedstart</item>\n    <item>g_balance_rocketlauncher_switchdelay_drop</item>\n    <item>g_balance_rocketlauncher_switchdelay_raise</item>\n    <item>g_balance_seeker_flac_ammo</item>\n    <item>g_balance_seeker_flac_animtime</item>\n    <item>g_balance_seeker_flac_damage</item>\n    <item>g_balance_seeker_flac_edgedamage</item>\n    <item>g_balance_seeker_flac_force</item>\n    <item>g_balance_seeker_flac_lifetime</item>\n    <item>g_balance_seeker_flac_lifetime_rand</item>\n    <item>g_balance_seeker_flac_radius</item>\n    <item>g_balance_seeker_flac_refire</item>\n    <item>g_balance_seeker_flac_speed</item>\n    <item>g_balance_seeker_flac_speed_up</item>\n    <item>g_balance_seeker_flac_speed_z</item>\n    <item>g_balance_seeker_flac_spread</item>\n    <item>g_balance_seeker_missile_accel</item>\n    <item>g_balance_seeker_missile_ammo</item>\n    <item>g_balance_seeker_missile_animtime</item>\n    <item>g_balance_seeker_missile_count</item>\n    <item>g_balance_seeker_missile_damage</item>\n    <item>g_balance_seeker_missile_damageforcescale</item>\n    <item>g_balance_seeker_missile_decel</item>\n    <item>g_balance_seeker_missile_delay</item>\n    <item>g_balance_seeker_missile_edgedamage</item>\n    <item>g_balance_seeker_missile_force</item>\n    <item>g_balance_seeker_missile_health</item>\n    <item>g_balance_seeker_missile_lifetime</item>\n    <item>g_balance_seeker_missile_proxy</item>\n    <item>g_balance_seeker_missile_proxy_delay</item>\n    <item>g_balance_seeker_missile_proxy_maxrange</item>\n    <item>g_balance_seeker_missile_radius</item>\n    <item>g_balance_seeker_missile_refire</item>\n    <item>g_balance_seeker_missile_smart</item>\n    <item>g_balance_seeker_missile_smart_mindist</item>\n    <item>g_balance_seeker_missile_smart_trace_max</item>\n    <item>g_balance_seeker_missile_smart_trace_min</item>\n    <item>g_balance_seeker_missile_speed</item>\n    <item>g_balance_seeker_missile_speed_max</item>\n    <item>g_balance_seeker_missile_speed_up</item>\n    <item>g_balance_seeker_missile_speed_z</item>\n    <item>g_balance_seeker_missile_spread</item>\n    <item>g_balance_seeker_missile_turnrate</item>\n    <item>g_balance_seeker_reload_ammo</item>\n    <item>g_balance_seeker_reload_time</item>\n    <item>g_balance_seeker_switchdelay_drop</item>\n    <item>g_balance_seeker_switchdelay_raise</item>\n    <item>g_balance_seeker_tag_ammo</item>\n    <item>g_balance_seeker_tag_animtime</item>\n    <item>g_balance_seeker_tag_damageforcescale</item>\n    <item>g_balance_seeker_tag_health</item>\n    <item>g_balance_seeker_tag_lifetime</item>\n    <item>g_balance_seeker_tag_refire</item>\n    <item>g_balance_seeker_tag_speed</item>\n    <item>g_balance_seeker_tag_spread</item>\n    <item>g_balance_seeker_tag_tracker_lifetime</item>\n    <item>g_balance_seeker_type</item>\n    <item>g_balance_selfdamagepercent</item>\n    <item>g_balance_shotgun_primary_ammo</item>\n    <item>g_balance_shotgun_primary_animtime</item>\n    <item>g_balance_shotgun_primary_bulletconstant</item>\n    <item>g_balance_shotgun_primary_bullets</item>\n    <item>g_balance_shotgun_primary_damage</item>\n    <item>g_balance_shotgun_primary_force</item>\n    <item>g_balance_shotgun_primary_refire</item>\n    <item>g_balance_shotgun_primary_speed</item>\n    <item>g_balance_shotgun_primary_spread</item>\n    <item>g_balance_shotgun_reload_ammo</item>\n    <item>g_balance_shotgun_reload_time</item>\n    <item>g_balance_shotgun_secondary</item>\n    <item>g_balance_shotgun_secondary_animtime</item>\n    <item>g_balance_shotgun_secondary_damage</item>\n    <item>g_balance_shotgun_secondary_force</item>\n    <item>g_balance_shotgun_secondary_melee_delay</item>\n    <item>g_balance_shotgun_secondary_melee_multihit</item>\n    <item>g_balance_shotgun_secondary_melee_no_doubleslap</item>\n    <item>g_balance_shotgun_secondary_melee_nonplayerdamage</item>\n    <item>g_balance_shotgun_secondary_melee_range</item>\n    <item>g_balance_shotgun_secondary_melee_swing_side</item>\n    <item>g_balance_shotgun_secondary_melee_swing_up</item>\n    <item>g_balance_shotgun_secondary_melee_time</item>\n    <item>g_balance_shotgun_secondary_melee_traces</item>\n    <item>g_balance_shotgun_secondary_refire</item>\n    <item>g_balance_shotgun_switchdelay_drop</item>\n    <item>g_balance_shotgun_switchdelay_raise</item>\n    <item>g_balance_superweapons_time</item>\n    <item>g_balance_teams</item>\n    <item>g_balance_teams_prevent_imbalance</item>\n    <item>g_balance_teams_scorefactor</item>\n    <item>g_balance_tuba_animtime</item>\n    <item>g_balance_tuba_attenuation</item>\n    <item>g_balance_tuba_damage</item>\n    <item>g_balance_tuba_edgedamage</item>\n    <item>g_balance_tuba_fadetime</item>\n    <item>g_balance_tuba_force</item>\n    <item>g_balance_tuba_pitchstep</item>\n    <item>g_balance_tuba_radius</item>\n    <item>g_balance_tuba_refire</item>\n    <item>g_balance_tuba_switchdelay_drop</item>\n    <item>g_balance_tuba_switchdelay_raise</item>\n    <item>g_balance_tuba_volume</item>\n    <item>g_balance_uzi_bulletconstant</item>\n    <item>g_balance_uzi_burst</item>\n    <item>g_balance_uzi_burst_ammo</item>\n    <item>g_balance_uzi_burst_animtime</item>\n    <item>g_balance_uzi_burst_damage</item>\n    <item>g_balance_uzi_burst_force</item>\n    <item>g_balance_uzi_burst_refire</item>\n    <item>g_balance_uzi_burst_refire2</item>\n    <item>g_balance_uzi_burst_spread</item>\n    <item>g_balance_uzi_first</item>\n    <item>g_balance_uzi_first_ammo</item>\n    <item>g_balance_uzi_first_damage</item>\n    <item>g_balance_uzi_first_force</item>\n    <item>g_balance_uzi_first_refire</item>\n    <item>g_balance_uzi_first_spread</item>\n    <item>g_balance_uzi_mode</item>\n    <item>g_balance_uzi_reload_ammo</item>\n    <item>g_balance_uzi_reload_time</item>\n    <item>g_balance_uzi_speed</item>\n    <item>g_balance_uzi_spread_add</item>\n    <item>g_balance_uzi_spread_max</item>\n    <item>g_balance_uzi_spread_min</item>\n    <item>g_balance_uzi_sustained_ammo</item>\n    <item>g_balance_uzi_sustained_damage</item>\n    <item>g_balance_uzi_sustained_force</item>\n    <item>g_balance_uzi_sustained_refire</item>\n    <item>g_balance_uzi_sustained_spread</item>\n    <item>g_balance_uzi_switchdelay_drop</item>\n    <item>g_balance_uzi_switchdelay_raise</item>\n    <item>g_ballistics_density_corpse</item>\n    <item>g_ballistics_density_player</item>\n    <item>g_ballistics_materialconstant</item>\n    <item>g_ballistics_mindistance</item>\n    <item>g_ban_default_bantime</item>\n    <item>g_ban_default_masksize</item>\n    <item>g_ban_sync_interval</item>\n    <item>g_ban_sync_timeout</item>\n    <item>g_ban_sync_trusted_servers</item>\n    <item>g_ban_sync_trusted_servers_verify</item>\n    <item>g_ban_sync_uri</item>\n    <item>g_banned_list</item>\n    <item>g_banned_list_idmode</item>\n    <item>g_bastet</item>\n    <item>g_bloodloss</item>\n    <item>g_botclip_collisions</item>\n    <item>g_bugrigs</item>\n    <item>g_bugrigs_accel</item>\n    <item>g_bugrigs_air_steering</item>\n    <item>g_bugrigs_angle_smoothing</item>\n    <item>g_bugrigs_friction_air</item>\n    <item>g_bugrigs_friction_brake</item>\n    <item>g_bugrigs_friction_floor</item>\n    <item>g_bugrigs_planar_movement</item>\n    <item>g_bugrigs_planar_movement_car_jumping</item>\n    <item>g_bugrigs_reverse_speeding</item>\n    <item>g_bugrigs_reverse_spinning</item>\n    <item>g_bugrigs_reverse_stopping</item>\n    <item>g_bugrigs_speed_pow</item>\n    <item>g_bugrigs_speed_ref</item>\n    <item>g_bugrigs_steer</item>\n    <item>g_ca</item>\n    <item>g_ca_damage2score_multiplier</item>\n    <item>g_ca_point_leadlimit</item>\n    <item>g_ca_point_limit</item>\n    <item>g_ca_respawn_delay</item>\n    <item>g_ca_respawn_waves</item>\n    <item>g_ca_round_timelimit</item>\n    <item>g_ca_spectate_enemies</item>\n    <item>g_ca_teams</item>\n    <item>g_ca_teams_override</item>\n    <item>g_ca_warmup</item>\n    <item>g_ca_weapon_stay</item>\n    <item>g_campaign</item>\n    <item>g_campaign_forceteam</item>\n    <item>g_campaign_name</item>\n    <item>g_campaign_skill</item>\n    <item>g_campaignxonoticbeta_index</item>\n    <item>g_campaignxonoticbeta_won</item>\n    <item>g_casings</item>\n    <item>g_cdtracks_dontusebydefault</item>\n    <item>g_cdtracks_remaplist</item>\n    <item>g_changeteam_banned</item>\n    <item>g_changeteam_fragtransfer</item>\n    <item>g_chat_flood_burst</item>\n    <item>g_chat_flood_burst_team</item>\n    <item>g_chat_flood_burst_tell</item>\n    <item>g_chat_flood_lmax</item>\n    <item>g_chat_flood_lmax_team</item>\n    <item>g_chat_flood_lmax_tell</item>\n    <item>g_chat_flood_notify_flooder</item>\n    <item>g_chat_flood_spl</item>\n    <item>g_chat_flood_spl_team</item>\n    <item>g_chat_flood_spl_tell</item>\n    <item>g_chat_nospectators</item>\n    <item>g_chat_teamcolors</item>\n    <item>g_chat_tellprivacy</item>\n    <item>g_cloaked</item>\n    <item>g_configversion</item>\n    <item>g_ctf</item>\n    <item>g_ctf_allow_vehicle_carry</item>\n    <item>g_ctf_allow_vehicle_touch</item>\n    <item>g_ctf_captimerecord_always</item>\n    <item>g_ctf_drop_velocity_side</item>\n    <item>g_ctf_drop_velocity_up</item>\n    <item>g_ctf_dropped_capture_delay</item>\n    <item>g_ctf_dropped_capture_radius</item>\n    <item>g_ctf_dynamiclights</item>\n    <item>g_ctf_flag_blue_model</item>\n    <item>g_ctf_flag_blue_skin</item>\n    <item>g_ctf_flag_collect_delay</item>\n    <item>g_ctf_flag_damageforcescale</item>\n    <item>g_ctf_flag_dropped_floatinwater</item>\n    <item>g_ctf_flag_dropped_waypoint</item>\n    <item>g_ctf_flag_glowtrails</item>\n    <item>g_ctf_flag_health</item>\n    <item>g_ctf_flag_red_model</item>\n    <item>g_ctf_flag_red_skin</item>\n    <item>g_ctf_flag_return_damage</item>\n    <item>g_ctf_flag_return_dropped</item>\n    <item>g_ctf_flag_return_time</item>\n    <item>g_ctf_flag_return_when_unreachable</item>\n    <item>g_ctf_flagcarrier_auto_helpme_damage</item>\n    <item>g_ctf_flagcarrier_auto_helpme_time</item>\n    <item>g_ctf_flagcarrier_damagefactor</item>\n    <item>g_ctf_flagcarrier_forcefactor</item>\n    <item>g_ctf_flagcarrier_selfdamagefactor</item>\n    <item>g_ctf_flagcarrier_selfforcefactor</item>\n    <item>g_ctf_flagcarrier_waypointforenemy_spotting</item>\n    <item>g_ctf_fullbrightflags</item>\n    <item>g_ctf_ignore_frags</item>\n    <item>g_ctf_pass</item>\n    <item>g_ctf_pass_arc</item>\n    <item>g_ctf_pass_arc_max</item>\n    <item>g_ctf_pass_directional_max</item>\n    <item>g_ctf_pass_directional_min</item>\n    <item>g_ctf_pass_radius</item>\n    <item>g_ctf_pass_request</item>\n    <item>g_ctf_pass_timelimit</item>\n    <item>g_ctf_pass_turnrate</item>\n    <item>g_ctf_pass_velocity</item>\n    <item>g_ctf_pass_wait</item>\n    <item>g_ctf_portalteleport</item>\n    <item>g_ctf_respawn_delay</item>\n    <item>g_ctf_respawn_waves</item>\n    <item>g_ctf_reverse</item>\n    <item>g_ctf_score_capture</item>\n    <item>g_ctf_score_capture_assist</item>\n    <item>g_ctf_score_kill</item>\n    <item>g_ctf_score_penalty_drop</item>\n    <item>g_ctf_score_penalty_returned</item>\n    <item>g_ctf_score_penalty_suicidedrop</item>\n    <item>g_ctf_score_pickup_base</item>\n    <item>g_ctf_score_pickup_dropped_early</item>\n    <item>g_ctf_score_pickup_dropped_late</item>\n    <item>g_ctf_score_return</item>\n    <item>g_ctf_shield_force</item>\n    <item>g_ctf_shield_max_ratio</item>\n    <item>g_ctf_shield_min_negscore</item>\n    <item>g_ctf_stalemate</item>\n    <item>g_ctf_stalemate_endcondition</item>\n    <item>g_ctf_stalemate_time</item>\n    <item>g_ctf_throw</item>\n    <item>g_ctf_throw_angle_max</item>\n    <item>g_ctf_throw_angle_min</item>\n    <item>g_ctf_throw_punish_count</item>\n    <item>g_ctf_throw_punish_delay</item>\n    <item>g_ctf_throw_punish_time</item>\n    <item>g_ctf_throw_strengthmultiplier</item>\n    <item>g_ctf_throw_velocity_forward</item>\n    <item>g_ctf_throw_velocity_up</item>\n    <item>g_ctf_weapon_stay</item>\n    <item>g_cts</item>\n    <item>g_cts_finish_kill_delay</item>\n    <item>g_cts_respawn_delay</item>\n    <item>g_cts_respawn_waves</item>\n    <item>g_cts_selfdamage</item>\n    <item>g_cts_weapon_stay</item>\n    <item>g_deathglow</item>\n    <item>g_debug_bot_commands</item>\n    <item>g_debug_defaultsounds</item>\n    <item>g_dm</item>\n    <item>g_dm_respawn_delay</item>\n    <item>g_dm_respawn_waves</item>\n    <item>g_dm_weapon_stay</item>\n    <item>g_dodging</item>\n    <item>g_dom_respawn_delay</item>\n    <item>g_dom_respawn_waves</item>\n    <item>g_dom_weapon_stay</item>\n    <item>g_domination</item>\n    <item>g_domination_default_teams</item>\n    <item>g_domination_disable_frags</item>\n    <item>g_domination_point_amt</item>\n    <item>g_domination_point_capturetime</item>\n    <item>g_domination_point_fullbright</item>\n    <item>g_domination_point_glow</item>\n    <item>g_domination_point_leadlimit</item>\n    <item>g_domination_point_limit</item>\n    <item>g_domination_point_rate</item>\n    <item>g_domination_teams_override</item>\n    <item>g_footsteps</item>\n    <item>g_forced_respawn</item>\n    <item>g_forced_team_blue</item>\n    <item>g_forced_team_otherwise</item>\n    <item>g_forced_team_pink</item>\n    <item>g_forced_team_red</item>\n    <item>g_forced_team_yellow</item>\n    <item>g_freezetag</item>\n    <item>g_freezetag_frozen_force</item>\n    <item>g_freezetag_frozen_maxtime</item>\n    <item>g_freezetag_point_leadlimit</item>\n    <item>g_freezetag_point_limit</item>\n    <item>g_freezetag_revive_clearspeed</item>\n    <item>g_freezetag_revive_extra_size</item>\n    <item>g_freezetag_revive_speed</item>\n    <item>g_freezetag_round_timelimit</item>\n    <item>g_freezetag_teams</item>\n    <item>g_freezetag_teams_override</item>\n    <item>g_freezetag_warmup</item>\n    <item>g_friendlyfire</item>\n    <item>g_friendlyfire_virtual</item>\n    <item>g_friendlyfire_virtual_force</item>\n    <item>g_ft_respawn_delay</item>\n    <item>g_ft_respawn_waves</item>\n    <item>g_ft_weapon_stay</item>\n    <item>g_full_getstatus_responses</item>\n    <item>g_fullbrightitems</item>\n    <item>g_fullbrightplayers</item>\n    <item>g_grab_range</item>\n    <item>g_grappling_hook</item>\n    <item>g_grappling_hook_tarzan</item>\n    <item>g_hitplots</item>\n    <item>g_hitplots_individuals</item>\n    <item>g_invincible_projectiles</item>\n    <item>g_jetpack</item>\n    <item>g_jetpack_acceleration_side</item>\n    <item>g_jetpack_acceleration_up</item>\n    <item>g_jetpack_antigravity</item>\n    <item>g_jetpack_attenuation</item>\n    <item>g_jetpack_fuel</item>\n    <item>g_jetpack_maxspeed_side</item>\n    <item>g_jetpack_maxspeed_up</item>\n    <item>g_jump_grunt</item>\n    <item>g_ka_respawn_delay</item>\n    <item>g_ka_respawn_waves</item>\n    <item>g_ka_weapon_stay</item>\n    <item>g_keepaway</item>\n    <item>g_keepaway_ballcarrier_damage</item>\n    <item>g_keepaway_ballcarrier_effects</item>\n    <item>g_keepaway_ballcarrier_force</item>\n    <item>g_keepaway_ballcarrier_highspeed</item>\n    <item>g_keepaway_ballcarrier_selfdamage</item>\n    <item>g_keepaway_ballcarrier_selfforce</item>\n    <item>g_keepaway_noncarrier_damage</item>\n    <item>g_keepaway_noncarrier_force</item>\n    <item>g_keepaway_noncarrier_selfdamage</item>\n    <item>g_keepaway_noncarrier_selfforce</item>\n    <item>g_keepaway_noncarrier_warn</item>\n    <item>g_keepaway_score_bckill</item>\n    <item>g_keepaway_score_killac</item>\n    <item>g_keepaway_score_timeinterval</item>\n    <item>g_keepaway_score_timepoints</item>\n    <item>g_keepaway_teams</item>\n    <item>g_keepaway_teams_override</item>\n    <item>g_keepawayball_damageforcescale</item>\n    <item>g_keepawayball_effects</item>\n    <item>g_keepawayball_respawntime</item>\n    <item>g_keepawayball_trail_color</item>\n    <item>g_keyhunt</item>\n    <item>g_keyhunt_point_leadlimit</item>\n    <item>g_keyhunt_point_limit</item>\n    <item>g_keyhunt_teams</item>\n    <item>g_keyhunt_teams_override</item>\n    <item>g_kh_respawn_delay</item>\n    <item>g_kh_respawn_waves</item>\n    <item>g_kh_weapon_stay</item>\n    <item>g_lms</item>\n    <item>g_lms_campcheck_damage</item>\n    <item>g_lms_campcheck_distance</item>\n    <item>g_lms_campcheck_interval</item>\n    <item>g_lms_extra_lives</item>\n    <item>g_lms_join_anytime</item>\n    <item>g_lms_last_join</item>\n    <item>g_lms_lives_override</item>\n    <item>g_lms_regenerate</item>\n    <item>g_lms_respawn_delay</item>\n    <item>g_lms_respawn_waves</item>\n    <item>g_lms_start_ammo_cells</item>\n    <item>g_lms_start_ammo_fuel</item>\n    <item>g_lms_start_ammo_nails</item>\n    <item>g_lms_start_ammo_rockets</item>\n    <item>g_lms_start_ammo_shells</item>\n    <item>g_lms_start_armor</item>\n    <item>g_lms_start_health</item>\n    <item>g_lms_weapon_stay</item>\n    <item>g_mapinfo_allow_unsupported_modes_and_let_stuff_break</item>\n    <item>g_mapinfo_settemp_acl</item>\n    <item>g_maplist</item>\n    <item>g_maplist_allow_frustrating</item>\n    <item>g_maplist_allow_hidden</item>\n    <item>g_maplist_check_waypoints</item>\n    <item>g_maplist_index</item>\n    <item>g_maplist_mostrecent</item>\n    <item>g_maplist_mostrecent_count</item>\n    <item>g_maplist_selectrandom</item>\n    <item>g_maplist_shuffle</item>\n    <item>g_maplist_votable</item>\n    <item>g_maplist_votable_abstain</item>\n    <item>g_maplist_votable_keeptwotime</item>\n    <item>g_maplist_votable_nodetail</item>\n    <item>g_maplist_votable_screenshot_dir</item>\n    <item>g_maplist_votable_suggestions</item>\n    <item>g_maplist_votable_suggestions_override_mostrecent</item>\n    <item>g_maplist_votable_timeout</item>\n    <item>g_max_info_autoscreenshot</item>\n    <item>g_maxplayers</item>\n    <item>g_maxplayers_spectator_blocktime</item>\n    <item>g_maxpushtime</item>\n    <item>g_maxspeed</item>\n    <item>g_midair</item>\n    <item>g_midair_shieldtime</item>\n    <item>g_minstagib</item>\n    <item>g_minstagib_ammo_drop</item>\n    <item>g_minstagib_ammo_start</item>\n    <item>g_minstagib_extralives</item>\n    <item>g_minstagib_invis_alpha</item>\n    <item>g_minstagib_speed_highspeed</item>\n    <item>g_mirrordamage</item>\n    <item>g_mirrordamage_virtual</item>\n    <item>g_mod_balance</item>\n    <item>g_mod_config</item>\n    <item>g_mod_physics</item>\n    <item>g_movement_highspeed</item>\n    <item>g_multijump</item>\n    <item>g_multijump_add</item>\n    <item>g_multijump_speed</item>\n    <item>g_mutatormsg</item>\n    <item>g_nb_respawn_delay</item>\n    <item>g_nb_respawn_waves</item>\n    <item>g_nb_weapon_stay</item>\n    <item>g_new_toys</item>\n    <item>g_new_toys_autoreplace</item>\n    <item>g_nexball</item>\n    <item>g_nexball_basketball_bouncefactor</item>\n    <item>g_nexball_basketball_bouncestop</item>\n    <item>g_nexball_basketball_carrier_highspeed</item>\n    <item>g_nexball_basketball_delay_hold</item>\n    <item>g_nexball_basketball_delay_hold_forteam</item>\n    <item>g_nexball_basketball_effects_default</item>\n    <item>g_nexball_basketball_meter</item>\n    <item>g_nexball_basketball_meter_maxpower</item>\n    <item>g_nexball_basketball_meter_minpower</item>\n    <item>g_nexball_basketball_teamsteal</item>\n    <item>g_nexball_basketball_trail</item>\n    <item>g_nexball_delay_collect</item>\n    <item>g_nexball_delay_goal</item>\n    <item>g_nexball_delay_idle</item>\n    <item>g_nexball_delay_start</item>\n    <item>g_nexball_football_boost_forward</item>\n    <item>g_nexball_football_boost_up</item>\n    <item>g_nexball_football_bouncefactor</item>\n    <item>g_nexball_football_bouncestop</item>\n    <item>g_nexball_football_physics</item>\n    <item>g_nexball_football_trail</item>\n    <item>g_nexball_goalleadlimit</item>\n    <item>g_nexball_goallimit</item>\n    <item>g_nexball_meter_period</item>\n    <item>g_nexball_radar_showallplayers</item>\n    <item>g_nexball_safepass_holdtime</item>\n    <item>g_nexball_safepass_maxdist</item>\n    <item>g_nexball_safepass_turnrate</item>\n    <item>g_nexball_sound_bounce</item>\n    <item>g_nexball_tackling</item>\n    <item>g_nexball_trail_color</item>\n    <item>g_nexball_viewmodel_offset</item>\n    <item>g_nexball_viewmodel_scale</item>\n    <item>g_nick_flood_penalty</item>\n    <item>g_nick_flood_penalty_red</item>\n    <item>g_nick_flood_penalty_yellow</item>\n    <item>g_nick_flood_timeout</item>\n    <item>g_nix</item>\n    <item>g_nix_with_healtharmor</item>\n    <item>g_nix_with_laser</item>\n    <item>g_nix_with_powerups</item>\n    <item>g_nodepthtestitems</item>\n    <item>g_nodepthtestplayers</item>\n    <item>g_norecoil</item>\n    <item>g_ons_respawn_delay</item>\n    <item>g_ons_respawn_waves</item>\n    <item>g_ons_weapon_stay</item>\n    <item>g_onslaught</item>\n    <item>g_onslaught_cp_buildhealth</item>\n    <item>g_onslaught_cp_buildtime</item>\n    <item>g_onslaught_cp_health</item>\n    <item>g_onslaught_cp_proxydecap</item>\n    <item>g_onslaught_cp_proxydecap_distance</item>\n    <item>g_onslaught_cp_proxydecap_dps</item>\n    <item>g_onslaught_cp_regen</item>\n    <item>g_onslaught_gen_health</item>\n    <item>g_onslaught_spawn_at_controlpoints</item>\n    <item>g_onslaught_spawn_at_generator</item>\n    <item>g_physical_items</item>\n    <item>g_physical_items_damageforcescale</item>\n    <item>g_physical_items_reset</item>\n    <item>g_pickup_ammo_anyway</item>\n    <item>g_pickup_armorbig</item>\n    <item>g_pickup_armorbig_anyway</item>\n    <item>g_pickup_armorbig_max</item>\n    <item>g_pickup_armorlarge</item>\n    <item>g_pickup_armorlarge_anyway</item>\n    <item>g_pickup_armorlarge_max</item>\n    <item>g_pickup_armormedium</item>\n    <item>g_pickup_armormedium_anyway</item>\n    <item>g_pickup_armormedium_max</item>\n    <item>g_pickup_armorsmall</item>\n    <item>g_pickup_armorsmall_anyway</item>\n    <item>g_pickup_armorsmall_max</item>\n    <item>g_pickup_cells</item>\n    <item>g_pickup_cells_max</item>\n    <item>g_pickup_cells_weapon</item>\n    <item>g_pickup_fuel</item>\n    <item>g_pickup_fuel_jetpack</item>\n    <item>g_pickup_fuel_max</item>\n    <item>g_pickup_fuel_weapon</item>\n    <item>g_pickup_healthlarge</item>\n    <item>g_pickup_healthlarge_anyway</item>\n    <item>g_pickup_healthlarge_max</item>\n    <item>g_pickup_healthmedium</item>\n    <item>g_pickup_healthmedium_anyway</item>\n    <item>g_pickup_healthmedium_max</item>\n    <item>g_pickup_healthmega</item>\n    <item>g_pickup_healthmega_anyway</item>\n    <item>g_pickup_healthmega_max</item>\n    <item>g_pickup_healthsmall</item>\n    <item>g_pickup_healthsmall_anyway</item>\n    <item>g_pickup_healthsmall_max</item>\n    <item>g_pickup_items</item>\n    <item>g_pickup_nails</item>\n    <item>g_pickup_nails_max</item>\n    <item>g_pickup_nails_weapon</item>\n    <item>g_pickup_respawntime_ammo</item>\n    <item>g_pickup_respawntime_long</item>\n    <item>g_pickup_respawntime_medium</item>\n    <item>g_pickup_respawntime_powerup</item>\n    <item>g_pickup_respawntime_short</item>\n    <item>g_pickup_respawntime_superweapon</item>\n    <item>g_pickup_respawntime_weapon</item>\n    <item>g_pickup_respawntimejitter_ammo</item>\n    <item>g_pickup_respawntimejitter_long</item>\n    <item>g_pickup_respawntimejitter_medium</item>\n    <item>g_pickup_respawntimejitter_powerup</item>\n    <item>g_pickup_respawntimejitter_short</item>\n    <item>g_pickup_respawntimejitter_superweapon</item>\n    <item>g_pickup_respawntimejitter_weapon</item>\n    <item>g_pickup_rockets</item>\n    <item>g_pickup_rockets_max</item>\n    <item>g_pickup_rockets_weapon</item>\n    <item>g_pickup_shells</item>\n    <item>g_pickup_shells_max</item>\n    <item>g_pickup_shells_weapon</item>\n    <item>g_pickup_weapons_anyway</item>\n    <item>g_pinata</item>\n    <item>g_player_alpha</item>\n    <item>g_player_brightness</item>\n    <item>g_playerclip_collisions</item>\n    <item>g_playerstats_uri</item>\n    <item>g_powerups</item>\n    <item>g_projectiles_damage</item>\n    <item>g_projectiles_keep_owner</item>\n    <item>g_projectiles_newton_style</item>\n    <item>g_projectiles_newton_style_2_maxfactor</item>\n    <item>g_projectiles_newton_style_2_minfactor</item>\n    <item>g_projectiles_spread_style</item>\n    <item>g_race</item>\n    <item>g_race_laps_limit</item>\n    <item>g_race_qualifying_timelimit</item>\n    <item>g_race_qualifying_timelimit_override</item>\n    <item>g_race_teams</item>\n    <item>g_rc_respawn_delay</item>\n    <item>g_rc_respawn_waves</item>\n    <item>g_rc_weapon_stay</item>\n    <item>g_respawn_delay</item>\n    <item>g_respawn_ghosts</item>\n    <item>g_respawn_ghosts_maxtime</item>\n    <item>g_respawn_ghosts_speed</item>\n    <item>g_respawn_waves</item>\n    <item>g_rocket_flying</item>\n    <item>g_running_guns</item>\n    <item>g_sandbox</item>\n    <item>g_sandbox_editor_distance_edit</item>\n    <item>g_sandbox_editor_distance_spawn</item>\n    <item>g_sandbox_editor_flood</item>\n    <item>g_sandbox_editor_free</item>\n    <item>g_sandbox_editor_maxobjects</item>\n    <item>g_sandbox_info</item>\n    <item>g_sandbox_object_material_velocity_factor</item>\n    <item>g_sandbox_object_material_velocity_min</item>\n    <item>g_sandbox_object_scale_max</item>\n    <item>g_sandbox_object_scale_min</item>\n    <item>g_sandbox_readonly</item>\n    <item>g_sandbox_storage_autoload</item>\n    <item>g_sandbox_storage_autosave</item>\n    <item>g_sandbox_storage_name</item>\n    <item>g_shootfromcenter</item>\n    <item>g_shootfromclient</item>\n    <item>g_shootfromeye</item>\n    <item>g_shootfromfixedorigin</item>\n    <item>g_showweaponspawns</item>\n    <item>g_spawn_alloweffects</item>\n    <item>g_spawn_furthest</item>\n    <item>g_spawn_near_teammate</item>\n    <item>g_spawn_near_teammate_distance</item>\n    <item>g_spawn_useallspawns</item>\n    <item>g_spawnpoints_auto_move_out_of_solid</item>\n    <item>g_spawnshieldtime</item>\n    <item>g_start_ammo_cells</item>\n    <item>g_start_ammo_fuel</item>\n    <item>g_start_ammo_nails</item>\n    <item>g_start_ammo_rockets</item>\n    <item>g_start_ammo_shells</item>\n    <item>g_start_delay</item>\n    <item>g_start_weapon_crylink</item>\n    <item>g_start_weapon_electro</item>\n    <item>g_start_weapon_fireball</item>\n    <item>g_start_weapon_grenadelauncher</item>\n    <item>g_start_weapon_hagar</item>\n    <item>g_start_weapon_hlac</item>\n    <item>g_start_weapon_hook</item>\n    <item>g_start_weapon_laser</item>\n    <item>g_start_weapon_minelayer</item>\n    <item>g_start_weapon_minstanex</item>\n    <item>g_start_weapon_nex</item>\n    <item>g_start_weapon_porto</item>\n    <item>g_start_weapon_rifle</item>\n    <item>g_start_weapon_rocketlauncher</item>\n    <item>g_start_weapon_seeker</item>\n    <item>g_start_weapon_shotgun</item>\n    <item>g_start_weapon_tuba</item>\n    <item>g_start_weapon_uzi</item>\n    <item>g_superspectate</item>\n    <item>g_tdm</item>\n    <item>g_tdm_on_dm_maps</item>\n    <item>g_tdm_respawn_delay</item>\n    <item>g_tdm_respawn_waves</item>\n    <item>g_tdm_team_spawns</item>\n    <item>g_tdm_teams</item>\n    <item>g_tdm_teams_override</item>\n    <item>g_tdm_weapon_stay</item>\n    <item>g_teamdamage_resetspeed</item>\n    <item>g_teamdamage_threshold</item>\n    <item>g_telefrags</item>\n    <item>g_telefrags_avoid</item>\n    <item>g_telefrags_teamplay</item>\n    <item>g_teleport_maxspeed</item>\n    <item>g_throughfloor_damage</item>\n    <item>g_throughfloor_damage_max_stddev</item>\n    <item>g_throughfloor_debug</item>\n    <item>g_throughfloor_force</item>\n    <item>g_throughfloor_force_max_stddev</item>\n    <item>g_throughfloor_max_steps_other</item>\n    <item>g_throughfloor_max_steps_player</item>\n    <item>g_throughfloor_min_steps_other</item>\n    <item>g_throughfloor_min_steps_player</item>\n    <item>g_touchexplode</item>\n    <item>g_touchexplode_damage</item>\n    <item>g_touchexplode_edgedamage</item>\n    <item>g_touchexplode_force</item>\n    <item>g_touchexplode_radius</item>\n    <item>g_triggerimpulse_accel_multiplier</item>\n    <item>g_triggerimpulse_accel_power</item>\n    <item>g_triggerimpulse_directional_multiplier</item>\n    <item>g_triggerimpulse_radial_multiplier</item>\n    <item>g_trueaim_minrange</item>\n    <item>g_turrets</item>\n    <item>g_turrets_aimidle_delay</item>\n    <item>g_turrets_nofire</item>\n    <item>g_turrets_reloadcvars</item>\n    <item>g_turrets_targetscan_maxdelay</item>\n    <item>g_turrets_targetscan_mindelay</item>\n    <item>g_turrets_unit_ewheel_speed_fast</item>\n    <item>g_turrets_unit_ewheel_speed_slow</item>\n    <item>g_turrets_unit_ewheel_speed_slower</item>\n    <item>g_turrets_unit_ewheel_speed_stop</item>\n    <item>g_turrets_unit_ewheel_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_ewheel_std_aim_maxpitch</item>\n    <item>g_turrets_unit_ewheel_std_aim_maxrot</item>\n    <item>g_turrets_unit_ewheel_std_aim_speed</item>\n    <item>g_turrets_unit_ewheel_std_ammo</item>\n    <item>g_turrets_unit_ewheel_std_ammo_max</item>\n    <item>g_turrets_unit_ewheel_std_ammo_recharge</item>\n    <item>g_turrets_unit_ewheel_std_health</item>\n    <item>g_turrets_unit_ewheel_std_respawntime</item>\n    <item>g_turrets_unit_ewheel_std_shot_dmg</item>\n    <item>g_turrets_unit_ewheel_std_shot_force</item>\n    <item>g_turrets_unit_ewheel_std_shot_radius</item>\n    <item>g_turrets_unit_ewheel_std_shot_refire</item>\n    <item>g_turrets_unit_ewheel_std_shot_speed</item>\n    <item>g_turrets_unit_ewheel_std_shot_spread</item>\n    <item>g_turrets_unit_ewheel_std_shot_volly</item>\n    <item>g_turrets_unit_ewheel_std_shot_volly_refire</item>\n    <item>g_turrets_unit_ewheel_std_target_range</item>\n    <item>g_turrets_unit_ewheel_std_target_range_min</item>\n    <item>g_turrets_unit_ewheel_std_target_range_optimal</item>\n    <item>g_turrets_unit_ewheel_std_target_select_anglebias</item>\n    <item>g_turrets_unit_ewheel_std_target_select_missilebias</item>\n    <item>g_turrets_unit_ewheel_std_target_select_playerbias</item>\n    <item>g_turrets_unit_ewheel_std_target_select_rangebias</item>\n    <item>g_turrets_unit_ewheel_std_target_select_samebias</item>\n    <item>g_turrets_unit_ewheel_std_track_accel_pitch</item>\n    <item>g_turrets_unit_ewheel_std_track_accel_rot</item>\n    <item>g_turrets_unit_ewheel_std_track_type</item>\n    <item>g_turrets_unit_ewheel_turnrate</item>\n    <item>g_turrets_unit_flac_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_flac_std_aim_maxpitch</item>\n    <item>g_turrets_unit_flac_std_aim_maxrot</item>\n    <item>g_turrets_unit_flac_std_aim_speed</item>\n    <item>g_turrets_unit_flac_std_ammo</item>\n    <item>g_turrets_unit_flac_std_ammo_max</item>\n    <item>g_turrets_unit_flac_std_ammo_recharge</item>\n    <item>g_turrets_unit_flac_std_health</item>\n    <item>g_turrets_unit_flac_std_respawntime</item>\n    <item>g_turrets_unit_flac_std_shot_dmg</item>\n    <item>g_turrets_unit_flac_std_shot_force</item>\n    <item>g_turrets_unit_flac_std_shot_radius</item>\n    <item>g_turrets_unit_flac_std_shot_refire</item>\n    <item>g_turrets_unit_flac_std_shot_speed</item>\n    <item>g_turrets_unit_flac_std_shot_spread</item>\n    <item>g_turrets_unit_flac_std_shot_volly</item>\n    <item>g_turrets_unit_flac_std_shot_volly_refire</item>\n    <item>g_turrets_unit_flac_std_target_range</item>\n    <item>g_turrets_unit_flac_std_target_range_min</item>\n    <item>g_turrets_unit_flac_std_target_range_optimal</item>\n    <item>g_turrets_unit_flac_std_target_select_anglebias</item>\n    <item>g_turrets_unit_flac_std_target_select_missilebias</item>\n    <item>g_turrets_unit_flac_std_target_select_playerbias</item>\n    <item>g_turrets_unit_flac_std_target_select_rangebias</item>\n    <item>g_turrets_unit_flac_std_target_select_samebias</item>\n    <item>g_turrets_unit_flac_std_track_accel_pitch</item>\n    <item>g_turrets_unit_flac_std_track_accel_rot</item>\n    <item>g_turrets_unit_flac_std_track_blendrate</item>\n    <item>g_turrets_unit_flac_std_track_type</item>\n    <item>g_turrets_unit_fusreac_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_fusreac_std_aim_maxpitch</item>\n    <item>g_turrets_unit_fusreac_std_aim_maxrot</item>\n    <item>g_turrets_unit_fusreac_std_aim_speed</item>\n    <item>g_turrets_unit_fusreac_std_ammo</item>\n    <item>g_turrets_unit_fusreac_std_ammo_max</item>\n    <item>g_turrets_unit_fusreac_std_ammo_recharge</item>\n    <item>g_turrets_unit_fusreac_std_health</item>\n    <item>g_turrets_unit_fusreac_std_respawntime</item>\n    <item>g_turrets_unit_fusreac_std_shot_dmg</item>\n    <item>g_turrets_unit_fusreac_std_shot_force</item>\n    <item>g_turrets_unit_fusreac_std_shot_radius</item>\n    <item>g_turrets_unit_fusreac_std_shot_refire</item>\n    <item>g_turrets_unit_fusreac_std_shot_speed</item>\n    <item>g_turrets_unit_fusreac_std_shot_spread</item>\n    <item>g_turrets_unit_fusreac_std_shot_volly</item>\n    <item>g_turrets_unit_fusreac_std_shot_volly_refire</item>\n    <item>g_turrets_unit_fusreac_std_target_range</item>\n    <item>g_turrets_unit_fusreac_std_target_range_min</item>\n    <item>g_turrets_unit_fusreac_std_target_range_optimal</item>\n    <item>g_turrets_unit_fusreac_std_target_select_anglebias</item>\n    <item>g_turrets_unit_fusreac_std_target_select_playerbias</item>\n    <item>g_turrets_unit_fusreac_std_target_select_rangebias</item>\n    <item>g_turrets_unit_fusreac_std_target_select_samebias</item>\n    <item>g_turrets_unit_fusreac_std_track_accel_pitch</item>\n    <item>g_turrets_unit_fusreac_std_track_accel_rot</item>\n    <item>g_turrets_unit_fusreac_std_track_blendrate</item>\n    <item>g_turrets_unit_fusreac_std_track_type</item>\n    <item>g_turrets_unit_hellion_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_hellion_std_aim_maxpitch</item>\n    <item>g_turrets_unit_hellion_std_aim_maxrot</item>\n    <item>g_turrets_unit_hellion_std_aim_speed</item>\n    <item>g_turrets_unit_hellion_std_ammo</item>\n    <item>g_turrets_unit_hellion_std_ammo_max</item>\n    <item>g_turrets_unit_hellion_std_ammo_recharge</item>\n    <item>g_turrets_unit_hellion_std_health</item>\n    <item>g_turrets_unit_hellion_std_respawntime</item>\n    <item>g_turrets_unit_hellion_std_shot_dmg</item>\n    <item>g_turrets_unit_hellion_std_shot_force</item>\n    <item>g_turrets_unit_hellion_std_shot_radius</item>\n    <item>g_turrets_unit_hellion_std_shot_refire</item>\n    <item>g_turrets_unit_hellion_std_shot_speed</item>\n    <item>g_turrets_unit_hellion_std_shot_speed_gain</item>\n    <item>g_turrets_unit_hellion_std_shot_speed_max</item>\n    <item>g_turrets_unit_hellion_std_shot_spread</item>\n    <item>g_turrets_unit_hellion_std_shot_volly</item>\n    <item>g_turrets_unit_hellion_std_shot_volly_refire</item>\n    <item>g_turrets_unit_hellion_std_target_range</item>\n    <item>g_turrets_unit_hellion_std_target_range_min</item>\n    <item>g_turrets_unit_hellion_std_target_range_optimal</item>\n    <item>g_turrets_unit_hellion_std_target_select_anglebias</item>\n    <item>g_turrets_unit_hellion_std_target_select_missilebias</item>\n    <item>g_turrets_unit_hellion_std_target_select_playerbias</item>\n    <item>g_turrets_unit_hellion_std_target_select_rangebias</item>\n    <item>g_turrets_unit_hellion_std_target_select_samebias</item>\n    <item>g_turrets_unit_hellion_std_track_accel_pitch</item>\n    <item>g_turrets_unit_hellion_std_track_accel_rot</item>\n    <item>g_turrets_unit_hellion_std_track_blendrate</item>\n    <item>g_turrets_unit_hellion_std_track_type</item>\n    <item>g_turrets_unit_hk_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_hk_std_aim_maxpitch</item>\n    <item>g_turrets_unit_hk_std_aim_maxrot</item>\n    <item>g_turrets_unit_hk_std_aim_speed</item>\n    <item>g_turrets_unit_hk_std_ammo</item>\n    <item>g_turrets_unit_hk_std_ammo_max</item>\n    <item>g_turrets_unit_hk_std_ammo_recharge</item>\n    <item>g_turrets_unit_hk_std_health</item>\n    <item>g_turrets_unit_hk_std_respawntime</item>\n    <item>g_turrets_unit_hk_std_shot_dmg</item>\n    <item>g_turrets_unit_hk_std_shot_force</item>\n    <item>g_turrets_unit_hk_std_shot_radius</item>\n    <item>g_turrets_unit_hk_std_shot_refire</item>\n    <item>g_turrets_unit_hk_std_shot_speed</item>\n    <item>g_turrets_unit_hk_std_shot_speed_accel</item>\n    <item>g_turrets_unit_hk_std_shot_speed_accel2</item>\n    <item>g_turrets_unit_hk_std_shot_speed_decel</item>\n    <item>g_turrets_unit_hk_std_shot_speed_max</item>\n    <item>g_turrets_unit_hk_std_shot_speed_turnrate</item>\n    <item>g_turrets_unit_hk_std_shot_spread</item>\n    <item>g_turrets_unit_hk_std_shot_volly</item>\n    <item>g_turrets_unit_hk_std_shot_volly_refire</item>\n    <item>g_turrets_unit_hk_std_target_range</item>\n    <item>g_turrets_unit_hk_std_target_range_min</item>\n    <item>g_turrets_unit_hk_std_target_range_optimal</item>\n    <item>g_turrets_unit_hk_std_target_select_anglebias</item>\n    <item>g_turrets_unit_hk_std_target_select_missilebias</item>\n    <item>g_turrets_unit_hk_std_target_select_playerbias</item>\n    <item>g_turrets_unit_hk_std_target_select_rangebias</item>\n    <item>g_turrets_unit_hk_std_target_select_samebias</item>\n    <item>g_turrets_unit_hk_std_track_accel_pitch</item>\n    <item>g_turrets_unit_hk_std_track_accel_rot</item>\n    <item>g_turrets_unit_hk_std_track_blendrate</item>\n    <item>g_turrets_unit_hk_std_track_type</item>\n    <item>g_turrets_unit_machinegun_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_machinegun_std_aim_maxpitch</item>\n    <item>g_turrets_unit_machinegun_std_aim_maxrot</item>\n    <item>g_turrets_unit_machinegun_std_aim_speed</item>\n    <item>g_turrets_unit_machinegun_std_ammo</item>\n    <item>g_turrets_unit_machinegun_std_ammo_max</item>\n    <item>g_turrets_unit_machinegun_std_ammo_recharge</item>\n    <item>g_turrets_unit_machinegun_std_health</item>\n    <item>g_turrets_unit_machinegun_std_respawntime</item>\n    <item>g_turrets_unit_machinegun_std_shot_dmg</item>\n    <item>g_turrets_unit_machinegun_std_shot_force</item>\n    <item>g_turrets_unit_machinegun_std_shot_radius</item>\n    <item>g_turrets_unit_machinegun_std_shot_refire</item>\n    <item>g_turrets_unit_machinegun_std_shot_speed</item>\n    <item>g_turrets_unit_machinegun_std_shot_spread</item>\n    <item>g_turrets_unit_machinegun_std_shot_volly</item>\n    <item>g_turrets_unit_machinegun_std_shot_volly_refire</item>\n    <item>g_turrets_unit_machinegun_std_target_range</item>\n    <item>g_turrets_unit_machinegun_std_target_range_min</item>\n    <item>g_turrets_unit_machinegun_std_target_range_optimal</item>\n    <item>g_turrets_unit_machinegun_std_target_select_anglebias</item>\n    <item>g_turrets_unit_machinegun_std_target_select_missilebias</item>\n    <item>g_turrets_unit_machinegun_std_target_select_playerbias</item>\n    <item>g_turrets_unit_machinegun_std_target_select_rangebias</item>\n    <item>g_turrets_unit_machinegun_std_target_select_samebias</item>\n    <item>g_turrets_unit_machinegun_std_track_accel_pitch</item>\n    <item>g_turrets_unit_machinegun_std_track_accel_rot</item>\n    <item>g_turrets_unit_machinegun_std_track_blendrate</item>\n    <item>g_turrets_unit_machinegun_std_track_type</item>\n    <item>g_turrets_unit_mlrs_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_mlrs_std_aim_maxpitch</item>\n    <item>g_turrets_unit_mlrs_std_aim_maxrot</item>\n    <item>g_turrets_unit_mlrs_std_aim_speed</item>\n    <item>g_turrets_unit_mlrs_std_ammo</item>\n    <item>g_turrets_unit_mlrs_std_ammo_max</item>\n    <item>g_turrets_unit_mlrs_std_ammo_recharge</item>\n    <item>g_turrets_unit_mlrs_std_health</item>\n    <item>g_turrets_unit_mlrs_std_respawntime</item>\n    <item>g_turrets_unit_mlrs_std_shot_dmg</item>\n    <item>g_turrets_unit_mlrs_std_shot_force</item>\n    <item>g_turrets_unit_mlrs_std_shot_radius</item>\n    <item>g_turrets_unit_mlrs_std_shot_refire</item>\n    <item>g_turrets_unit_mlrs_std_shot_speed</item>\n    <item>g_turrets_unit_mlrs_std_shot_spread</item>\n    <item>g_turrets_unit_mlrs_std_shot_volly</item>\n    <item>g_turrets_unit_mlrs_std_shot_volly_refire</item>\n    <item>g_turrets_unit_mlrs_std_target_range</item>\n    <item>g_turrets_unit_mlrs_std_target_range_min</item>\n    <item>g_turrets_unit_mlrs_std_target_range_optimal</item>\n    <item>g_turrets_unit_mlrs_std_target_select_anglebias</item>\n    <item>g_turrets_unit_mlrs_std_target_select_missilebias</item>\n    <item>g_turrets_unit_mlrs_std_target_select_playerbias</item>\n    <item>g_turrets_unit_mlrs_std_target_select_rangebias</item>\n    <item>g_turrets_unit_mlrs_std_target_select_samebias</item>\n    <item>g_turrets_unit_mlrs_std_track_accel_pitch</item>\n    <item>g_turrets_unit_mlrs_std_track_accel_rot</item>\n    <item>g_turrets_unit_mlrs_std_track_blendrate</item>\n    <item>g_turrets_unit_mlrs_std_track_type</item>\n    <item>g_turrets_unit_phaser_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_phaser_std_aim_maxpitch</item>\n    <item>g_turrets_unit_phaser_std_aim_maxrot</item>\n    <item>g_turrets_unit_phaser_std_aim_speed</item>\n    <item>g_turrets_unit_phaser_std_ammo</item>\n    <item>g_turrets_unit_phaser_std_ammo_max</item>\n    <item>g_turrets_unit_phaser_std_ammo_recharge</item>\n    <item>g_turrets_unit_phaser_std_health</item>\n    <item>g_turrets_unit_phaser_std_respawntime</item>\n    <item>g_turrets_unit_phaser_std_shot_dmg</item>\n    <item>g_turrets_unit_phaser_std_shot_force</item>\n    <item>g_turrets_unit_phaser_std_shot_radius</item>\n    <item>g_turrets_unit_phaser_std_shot_refire</item>\n    <item>g_turrets_unit_phaser_std_shot_speed</item>\n    <item>g_turrets_unit_phaser_std_shot_spread</item>\n    <item>g_turrets_unit_phaser_std_shot_volly</item>\n    <item>g_turrets_unit_phaser_std_shot_volly_refire</item>\n    <item>g_turrets_unit_phaser_std_target_range</item>\n    <item>g_turrets_unit_phaser_std_target_range_min</item>\n    <item>g_turrets_unit_phaser_std_target_range_optimal</item>\n    <item>g_turrets_unit_phaser_std_target_select_anglebias</item>\n    <item>g_turrets_unit_phaser_std_target_select_missilebias</item>\n    <item>g_turrets_unit_phaser_std_target_select_playerbias</item>\n    <item>g_turrets_unit_phaser_std_target_select_rangebias</item>\n    <item>g_turrets_unit_phaser_std_target_select_samebias</item>\n    <item>g_turrets_unit_phaser_std_track_accel_pitch</item>\n    <item>g_turrets_unit_phaser_std_track_accel_rot</item>\n    <item>g_turrets_unit_phaser_std_track_blendrate</item>\n    <item>g_turrets_unit_phaser_std_track_type</item>\n    <item>g_turrets_unit_plasma_dual_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_plasma_dual_aim_maxpitch</item>\n    <item>g_turrets_unit_plasma_dual_aim_maxrot</item>\n    <item>g_turrets_unit_plasma_dual_aim_speed</item>\n    <item>g_turrets_unit_plasma_dual_ammo</item>\n    <item>g_turrets_unit_plasma_dual_ammo_max</item>\n    <item>g_turrets_unit_plasma_dual_ammo_recharge</item>\n    <item>g_turrets_unit_plasma_dual_health</item>\n    <item>g_turrets_unit_plasma_dual_respawntime</item>\n    <item>g_turrets_unit_plasma_dual_shot_dmg</item>\n    <item>g_turrets_unit_plasma_dual_shot_force</item>\n    <item>g_turrets_unit_plasma_dual_shot_radius</item>\n    <item>g_turrets_unit_plasma_dual_shot_refire</item>\n    <item>g_turrets_unit_plasma_dual_shot_speed</item>\n    <item>g_turrets_unit_plasma_dual_shot_spread</item>\n    <item>g_turrets_unit_plasma_dual_shot_volly</item>\n    <item>g_turrets_unit_plasma_dual_shot_volly_refire</item>\n    <item>g_turrets_unit_plasma_dual_target_range</item>\n    <item>g_turrets_unit_plasma_dual_target_range_min</item>\n    <item>g_turrets_unit_plasma_dual_target_range_optimal</item>\n    <item>g_turrets_unit_plasma_dual_target_select_anglebias</item>\n    <item>g_turrets_unit_plasma_dual_target_select_missilebias</item>\n    <item>g_turrets_unit_plasma_dual_target_select_playerbias</item>\n    <item>g_turrets_unit_plasma_dual_target_select_rangebias</item>\n    <item>g_turrets_unit_plasma_dual_target_select_samebias</item>\n    <item>g_turrets_unit_plasma_dual_track_accel_pitch</item>\n    <item>g_turrets_unit_plasma_dual_track_accel_rot</item>\n    <item>g_turrets_unit_plasma_dual_track_blendrate</item>\n    <item>g_turrets_unit_plasma_dual_track_type</item>\n    <item>g_turrets_unit_plasma_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_plasma_std_aim_maxpitch</item>\n    <item>g_turrets_unit_plasma_std_aim_maxrot</item>\n    <item>g_turrets_unit_plasma_std_aim_speed</item>\n    <item>g_turrets_unit_plasma_std_ammo</item>\n    <item>g_turrets_unit_plasma_std_ammo_max</item>\n    <item>g_turrets_unit_plasma_std_ammo_recharge</item>\n    <item>g_turrets_unit_plasma_std_health</item>\n    <item>g_turrets_unit_plasma_std_respawntime</item>\n    <item>g_turrets_unit_plasma_std_shot_dmg</item>\n    <item>g_turrets_unit_plasma_std_shot_force</item>\n    <item>g_turrets_unit_plasma_std_shot_radius</item>\n    <item>g_turrets_unit_plasma_std_shot_refire</item>\n    <item>g_turrets_unit_plasma_std_shot_speed</item>\n    <item>g_turrets_unit_plasma_std_shot_spread</item>\n    <item>g_turrets_unit_plasma_std_shot_volly</item>\n    <item>g_turrets_unit_plasma_std_shot_volly_refire</item>\n    <item>g_turrets_unit_plasma_std_target_range</item>\n    <item>g_turrets_unit_plasma_std_target_range_min</item>\n    <item>g_turrets_unit_plasma_std_target_range_optimal</item>\n    <item>g_turrets_unit_plasma_std_target_select_anglebias</item>\n    <item>g_turrets_unit_plasma_std_target_select_missilebias</item>\n    <item>g_turrets_unit_plasma_std_target_select_playerbias</item>\n    <item>g_turrets_unit_plasma_std_target_select_rangebias</item>\n    <item>g_turrets_unit_plasma_std_target_select_samebias</item>\n    <item>g_turrets_unit_plasma_std_track_accel_pitch</item>\n    <item>g_turrets_unit_plasma_std_track_accel_rot</item>\n    <item>g_turrets_unit_plasma_std_track_blendrate</item>\n    <item>g_turrets_unit_plasma_std_track_type</item>\n    <item>g_turrets_unit_tesla_std_ammo</item>\n    <item>g_turrets_unit_tesla_std_ammo_max</item>\n    <item>g_turrets_unit_tesla_std_ammo_recharge</item>\n    <item>g_turrets_unit_tesla_std_health</item>\n    <item>g_turrets_unit_tesla_std_respawntime</item>\n    <item>g_turrets_unit_tesla_std_shot_dmg</item>\n    <item>g_turrets_unit_tesla_std_shot_force</item>\n    <item>g_turrets_unit_tesla_std_shot_refire</item>\n    <item>g_turrets_unit_tesla_std_shot_volly</item>\n    <item>g_turrets_unit_tesla_std_shot_volly_refire</item>\n    <item>g_turrets_unit_tesla_std_target_range</item>\n    <item>g_turrets_unit_tesla_std_target_range_min</item>\n    <item>g_turrets_unit_tesla_std_target_select_missilebias</item>\n    <item>g_turrets_unit_tesla_std_target_select_playerbias</item>\n    <item>g_turrets_unit_walker_speed_jump</item>\n    <item>g_turrets_unit_walker_speed_roam</item>\n    <item>g_turrets_unit_walker_speed_run</item>\n    <item>g_turrets_unit_walker_speed_stop</item>\n    <item>g_turrets_unit_walker_speed_swim</item>\n    <item>g_turrets_unit_walker_speed_walk</item>\n    <item>g_turrets_unit_walker_std_aim_firetolerance_dist</item>\n    <item>g_turrets_unit_walker_std_aim_maxpitch</item>\n    <item>g_turrets_unit_walker_std_aim_maxrot</item>\n    <item>g_turrets_unit_walker_std_aim_speed</item>\n    <item>g_turrets_unit_walker_std_ammo</item>\n    <item>g_turrets_unit_walker_std_ammo_max</item>\n    <item>g_turrets_unit_walker_std_ammo_recharge</item>\n    <item>g_turrets_unit_walker_std_health</item>\n    <item>g_turrets_unit_walker_std_meele_dmg</item>\n    <item>g_turrets_unit_walker_std_meele_force</item>\n    <item>g_turrets_unit_walker_std_meele_range</item>\n    <item>g_turrets_unit_walker_std_respawntime</item>\n    <item>g_turrets_unit_walker_std_rocket_dmg</item>\n    <item>g_turrets_unit_walker_std_rocket_force</item>\n    <item>g_turrets_unit_walker_std_rocket_radius</item>\n    <item>g_turrets_unit_walker_std_rocket_refire</item>\n    <item>g_turrets_unit_walker_std_rocket_speed</item>\n    <item>g_turrets_unit_walker_std_rocket_turnrate</item>\n    <item>g_turrets_unit_walker_std_rockets_range</item>\n    <item>g_turrets_unit_walker_std_rockets_range_min</item>\n    <item>g_turrets_unit_walker_std_shot_dmg</item>\n    <item>g_turrets_unit_walker_std_shot_force</item>\n    <item>g_turrets_unit_walker_std_shot_radius</item>\n    <item>g_turrets_unit_walker_std_shot_refire</item>\n    <item>g_turrets_unit_walker_std_shot_speed</item>\n    <item>g_turrets_unit_walker_std_shot_spread</item>\n    <item>g_turrets_unit_walker_std_shot_volly</item>\n    <item>g_turrets_unit_walker_std_shot_volly_refire</item>\n    <item>g_turrets_unit_walker_std_target_range</item>\n    <item>g_turrets_unit_walker_std_target_range_min</item>\n    <item>g_turrets_unit_walker_std_target_range_optimal</item>\n    <item>g_turrets_unit_walker_std_target_select_anglebias</item>\n    <item>g_turrets_unit_walker_std_target_select_missilebias</item>\n    <item>g_turrets_unit_walker_std_target_select_playerbias</item>\n    <item>g_turrets_unit_walker_std_target_select_rangebias</item>\n    <item>g_turrets_unit_walker_std_target_select_samebias</item>\n    <item>g_turrets_unit_walker_std_track_accel_pitch</item>\n    <item>g_turrets_unit_walker_std_track_accel_rot</item>\n    <item>g_turrets_unit_walker_std_track_blendrate</item>\n    <item>g_turrets_unit_walker_std_track_type</item>\n    <item>g_turrets_unit_walker_turn</item>\n    <item>g_turrets_unit_walker_turn_run</item>\n    <item>g_turrets_unit_walker_turn_strafe</item>\n    <item>g_turrets_unit_walker_turn_swim</item>\n    <item>g_turrets_unit_walker_turn_walk</item>\n    <item>g_use_ammunition</item>\n    <item>g_vampire</item>\n    <item>g_vehicle_bumblebee</item>\n    <item>g_vehicle_bumblebee_blowup_coredamage</item>\n    <item>g_vehicle_bumblebee_blowup_edgedamage</item>\n    <item>g_vehicle_bumblebee_blowup_forceintensity</item>\n    <item>g_vehicle_bumblebee_blowup_radius</item>\n    <item>g_vehicle_bumblebee_bouncepain</item>\n    <item>g_vehicle_bumblebee_cannon_ammo</item>\n    <item>g_vehicle_bumblebee_cannon_ammo_regen</item>\n    <item>g_vehicle_bumblebee_cannon_ammo_regen_pause</item>\n    <item>g_vehicle_bumblebee_cannon_cost</item>\n    <item>g_vehicle_bumblebee_cannon_damage</item>\n    <item>g_vehicle_bumblebee_cannon_force</item>\n    <item>g_vehicle_bumblebee_cannon_lock</item>\n    <item>g_vehicle_bumblebee_cannon_pitchlimit_down</item>\n    <item>g_vehicle_bumblebee_cannon_pitchlimit_up</item>\n    <item>g_vehicle_bumblebee_cannon_radius</item>\n    <item>g_vehicle_bumblebee_cannon_refire</item>\n    <item>g_vehicle_bumblebee_cannon_speed</item>\n    <item>g_vehicle_bumblebee_cannon_spread</item>\n    <item>g_vehicle_bumblebee_cannon_turnlimit_in</item>\n    <item>g_vehicle_bumblebee_cannon_turnlimit_out</item>\n    <item>g_vehicle_bumblebee_cannon_turnspeed</item>\n    <item>g_vehicle_bumblebee_energy</item>\n    <item>g_vehicle_bumblebee_energy_regen</item>\n    <item>g_vehicle_bumblebee_energy_regen_pause</item>\n    <item>g_vehicle_bumblebee_friction</item>\n    <item>g_vehicle_bumblebee_healgun_amax</item>\n    <item>g_vehicle_bumblebee_healgun_aps</item>\n    <item>g_vehicle_bumblebee_healgun_hmax</item>\n    <item>g_vehicle_bumblebee_healgun_hps</item>\n    <item>g_vehicle_bumblebee_healgun_locktime</item>\n    <item>g_vehicle_bumblebee_healgun_smax</item>\n    <item>g_vehicle_bumblebee_healgun_sps</item>\n    <item>g_vehicle_bumblebee_health</item>\n    <item>g_vehicle_bumblebee_health_regen</item>\n    <item>g_vehicle_bumblebee_health_regen_pause</item>\n    <item>g_vehicle_bumblebee_pitchlimit</item>\n    <item>g_vehicle_bumblebee_pitchspeed</item>\n    <item>g_vehicle_bumblebee_raygun</item>\n    <item>g_vehicle_bumblebee_raygun_aps</item>\n    <item>g_vehicle_bumblebee_raygun_dps</item>\n    <item>g_vehicle_bumblebee_raygun_fps</item>\n    <item>g_vehicle_bumblebee_raygun_pitchlimit_down</item>\n    <item>g_vehicle_bumblebee_raygun_pitchlimit_up</item>\n    <item>g_vehicle_bumblebee_raygun_range</item>\n    <item>g_vehicle_bumblebee_raygun_turnlimit_sides</item>\n    <item>g_vehicle_bumblebee_raygun_turnspeed</item>\n    <item>g_vehicle_bumblebee_respawntime</item>\n    <item>g_vehicle_bumblebee_shield</item>\n    <item>g_vehicle_bumblebee_shield_regen</item>\n    <item>g_vehicle_bumblebee_shield_regen_pause</item>\n    <item>g_vehicle_bumblebee_speed_down</item>\n    <item>g_vehicle_bumblebee_speed_forward</item>\n    <item>g_vehicle_bumblebee_speed_strafe</item>\n    <item>g_vehicle_bumblebee_speed_up</item>\n    <item>g_vehicle_bumblebee_turnspeed</item>\n    <item>g_vehicle_racer</item>\n    <item>g_vehicle_racer_afterburn_cost</item>\n    <item>g_vehicle_racer_anglestabilizer</item>\n    <item>g_vehicle_racer_blowup_coredamage</item>\n    <item>g_vehicle_racer_blowup_edgedamage</item>\n    <item>g_vehicle_racer_blowup_forceintensity</item>\n    <item>g_vehicle_racer_blowup_radius</item>\n    <item>g_vehicle_racer_bouncefactor</item>\n    <item>g_vehicle_racer_bouncepain</item>\n    <item>g_vehicle_racer_bouncestop</item>\n    <item>g_vehicle_racer_cannon_cost</item>\n    <item>g_vehicle_racer_cannon_damage</item>\n    <item>g_vehicle_racer_cannon_force</item>\n    <item>g_vehicle_racer_cannon_radius</item>\n    <item>g_vehicle_racer_cannon_refire</item>\n    <item>g_vehicle_racer_cannon_speed</item>\n    <item>g_vehicle_racer_cannon_spread</item>\n    <item>g_vehicle_racer_collision_multiplier</item>\n    <item>g_vehicle_racer_downforce</item>\n    <item>g_vehicle_racer_energy</item>\n    <item>g_vehicle_racer_energy_regen</item>\n    <item>g_vehicle_racer_energy_regen_pause</item>\n    <item>g_vehicle_racer_friction</item>\n    <item>g_vehicle_racer_health</item>\n    <item>g_vehicle_racer_health_regen</item>\n    <item>g_vehicle_racer_health_regen_pause</item>\n    <item>g_vehicle_racer_hoverpower</item>\n    <item>g_vehicle_racer_hovertype</item>\n    <item>g_vehicle_racer_mass</item>\n    <item>g_vehicle_racer_maxpitch</item>\n    <item>g_vehicle_racer_pitchspeed</item>\n    <item>g_vehicle_racer_respawntime</item>\n    <item>g_vehicle_racer_rocket_accel</item>\n    <item>g_vehicle_racer_rocket_climbspeed</item>\n    <item>g_vehicle_racer_rocket_cost</item>\n    <item>g_vehicle_racer_rocket_damage</item>\n    <item>g_vehicle_racer_rocket_force</item>\n    <item>g_vehicle_racer_rocket_locked_maxangle</item>\n    <item>g_vehicle_racer_rocket_locked_time</item>\n    <item>g_vehicle_racer_rocket_locking_releasetime</item>\n    <item>g_vehicle_racer_rocket_locking_time</item>\n    <item>g_vehicle_racer_rocket_locktarget</item>\n    <item>g_vehicle_racer_rocket_radius</item>\n    <item>g_vehicle_racer_rocket_refire</item>\n    <item>g_vehicle_racer_rocket_speed</item>\n    <item>g_vehicle_racer_rocket_turnrate</item>\n    <item>g_vehicle_racer_shield</item>\n    <item>g_vehicle_racer_shield_regen</item>\n    <item>g_vehicle_racer_shield_regen_pause</item>\n    <item>g_vehicle_racer_speed_afterburn</item>\n    <item>g_vehicle_racer_speed_forward</item>\n    <item>g_vehicle_racer_speed_stop</item>\n    <item>g_vehicle_racer_speed_strafe</item>\n    <item>g_vehicle_racer_springlength</item>\n    <item>g_vehicle_racer_turnroll</item>\n    <item>g_vehicle_racer_turnspeed</item>\n    <item>g_vehicle_racer_upforcedamper</item>\n    <item>g_vehicle_raptor</item>\n    <item>g_vehicle_raptor_bomblet_alt</item>\n    <item>g_vehicle_raptor_bomblet_damage</item>\n    <item>g_vehicle_raptor_bomblet_edgedamage</item>\n    <item>g_vehicle_raptor_bomblet_explode_delay</item>\n    <item>g_vehicle_raptor_bomblet_force</item>\n    <item>g_vehicle_raptor_bomblet_radius</item>\n    <item>g_vehicle_raptor_bomblet_spread</item>\n    <item>g_vehicle_raptor_bomblet_time</item>\n    <item>g_vehicle_raptor_bomblets</item>\n    <item>g_vehicle_raptor_bombs_refire</item>\n    <item>g_vehicle_raptor_bouncefactor</item>\n    <item>g_vehicle_raptor_bouncepain</item>\n    <item>g_vehicle_raptor_bouncestop</item>\n    <item>g_vehicle_raptor_cannon_cost</item>\n    <item>g_vehicle_raptor_cannon_damage</item>\n    <item>g_vehicle_raptor_cannon_force</item>\n    <item>g_vehicle_raptor_cannon_locked_time</item>\n    <item>g_vehicle_raptor_cannon_locking_releasetime</item>\n    <item>g_vehicle_raptor_cannon_locking_time</item>\n    <item>g_vehicle_raptor_cannon_locktarget</item>\n    <item>g_vehicle_raptor_cannon_pitchlimit_down</item>\n    <item>g_vehicle_raptor_cannon_pitchlimit_up</item>\n    <item>g_vehicle_raptor_cannon_predicttarget</item>\n    <item>g_vehicle_raptor_cannon_radius</item>\n    <item>g_vehicle_raptor_cannon_refire</item>\n    <item>g_vehicle_raptor_cannon_speed</item>\n    <item>g_vehicle_raptor_cannon_spread</item>\n    <item>g_vehicle_raptor_cannon_turnlimit</item>\n    <item>g_vehicle_raptor_cannon_turnspeed</item>\n    <item>g_vehicle_raptor_energy</item>\n    <item>g_vehicle_raptor_energy_regen</item>\n    <item>g_vehicle_raptor_energy_regen_pause</item>\n    <item>g_vehicle_raptor_flare_chase</item>\n    <item>g_vehicle_raptor_flare_lifetime</item>\n    <item>g_vehicle_raptor_flare_range</item>\n    <item>g_vehicle_raptor_flare_refire</item>\n    <item>g_vehicle_raptor_friction</item>\n    <item>g_vehicle_raptor_health</item>\n    <item>g_vehicle_raptor_health_regen</item>\n    <item>g_vehicle_raptor_health_regen_pause</item>\n    <item>g_vehicle_raptor_mass</item>\n    <item>g_vehicle_raptor_movestyle</item>\n    <item>g_vehicle_raptor_pitchlimit</item>\n    <item>g_vehicle_raptor_pitchspeed</item>\n    <item>g_vehicle_raptor_respawntime</item>\n    <item>g_vehicle_raptor_shield</item>\n    <item>g_vehicle_raptor_shield_regen</item>\n    <item>g_vehicle_raptor_shield_regen_pause</item>\n    <item>g_vehicle_raptor_speed_down</item>\n    <item>g_vehicle_raptor_speed_forward</item>\n    <item>g_vehicle_raptor_speed_strafe</item>\n    <item>g_vehicle_raptor_speed_up</item>\n    <item>g_vehicle_raptor_takeofftime</item>\n    <item>g_vehicle_raptor_turnroll</item>\n    <item>g_vehicle_raptor_turnspeed</item>\n    <item>g_vehicle_spiderbot</item>\n    <item>g_vehicle_spiderbot_bouncefactor</item>\n    <item>g_vehicle_spiderbot_bouncepain</item>\n    <item>g_vehicle_spiderbot_bouncestop</item>\n    <item>g_vehicle_spiderbot_energy</item>\n    <item>g_vehicle_spiderbot_energy_regen</item>\n    <item>g_vehicle_spiderbot_energy_regen_pause</item>\n    <item>g_vehicle_spiderbot_head_pitchlimit_down</item>\n    <item>g_vehicle_spiderbot_head_pitchlimit_up</item>\n    <item>g_vehicle_spiderbot_head_turnlimit</item>\n    <item>g_vehicle_spiderbot_head_turnspeed</item>\n    <item>g_vehicle_spiderbot_health</item>\n    <item>g_vehicle_spiderbot_health_regen</item>\n    <item>g_vehicle_spiderbot_health_regen_pause</item>\n    <item>g_vehicle_spiderbot_minigun_ammo_cost</item>\n    <item>g_vehicle_spiderbot_minigun_ammo_max</item>\n    <item>g_vehicle_spiderbot_minigun_ammo_regen</item>\n    <item>g_vehicle_spiderbot_minigun_ammo_regen_pause</item>\n    <item>g_vehicle_spiderbot_minigun_bulletconstant</item>\n    <item>g_vehicle_spiderbot_minigun_damage</item>\n    <item>g_vehicle_spiderbot_minigun_force</item>\n    <item>g_vehicle_spiderbot_minigun_refire</item>\n    <item>g_vehicle_spiderbot_minigun_speed</item>\n    <item>g_vehicle_spiderbot_minigun_spread</item>\n    <item>g_vehicle_spiderbot_movement_inertia</item>\n    <item>g_vehicle_spiderbot_respawntime</item>\n    <item>g_vehicle_spiderbot_rocket_damage</item>\n    <item>g_vehicle_spiderbot_rocket_edgedamage</item>\n    <item>g_vehicle_spiderbot_rocket_force</item>\n    <item>g_vehicle_spiderbot_rocket_health</item>\n    <item>g_vehicle_spiderbot_rocket_lifetime</item>\n    <item>g_vehicle_spiderbot_rocket_noise</item>\n    <item>g_vehicle_spiderbot_rocket_radius</item>\n    <item>g_vehicle_spiderbot_rocket_refire</item>\n    <item>g_vehicle_spiderbot_rocket_refire2</item>\n    <item>g_vehicle_spiderbot_rocket_reload</item>\n    <item>g_vehicle_spiderbot_rocket_speed</item>\n    <item>g_vehicle_spiderbot_rocket_spread</item>\n    <item>g_vehicle_spiderbot_rocket_turnrate</item>\n    <item>g_vehicle_spiderbot_shield</item>\n    <item>g_vehicle_spiderbot_shield_block</item>\n    <item>g_vehicle_spiderbot_shield_regen</item>\n    <item>g_vehicle_spiderbot_shield_regen_pause</item>\n    <item>g_vehicle_spiderbot_speed_stop</item>\n    <item>g_vehicle_spiderbot_speed_strafe</item>\n    <item>g_vehicle_spiderbot_speed_walk</item>\n    <item>g_vehicle_spiderbot_springblend</item>\n    <item>g_vehicle_spiderbot_springlength</item>\n    <item>g_vehicle_spiderbot_springup</item>\n    <item>g_vehicle_spiderbot_tiltlimit</item>\n    <item>g_vehicle_spiderbot_turnspeed</item>\n    <item>g_vehicle_spiderbot_turnspeed_strafe</item>\n    <item>g_vehicles</item>\n    <item>g_vehicles_crush_dmg</item>\n    <item>g_vehicles_crush_force</item>\n    <item>g_vehicles_delayspawn</item>\n    <item>g_vehicles_delayspawn_jitter</item>\n    <item>g_vehicles_minstanex_damagerate</item>\n    <item>g_vehicles_nex_damagerate</item>\n    <item>g_vehicles_rifle_damagerate</item>\n    <item>g_vehicles_tag_damagerate</item>\n    <item>g_vehicles_uzi_damagerate</item>\n    <item>g_warmup</item>\n    <item>g_warmup_allguns</item>\n    <item>g_warmup_allow_timeout</item>\n    <item>g_warmup_limit</item>\n    <item>g_warmup_majority_factor</item>\n    <item>g_warmup_start_ammo_cells</item>\n    <item>g_warmup_start_ammo_fuel</item>\n    <item>g_warmup_start_ammo_nails</item>\n    <item>g_warmup_start_ammo_rockets</item>\n    <item>g_warmup_start_ammo_shells</item>\n    <item>g_warmup_start_armor</item>\n    <item>g_warmup_start_health</item>\n    <item>g_waypointeditor</item>\n    <item>g_waypointeditor_auto</item>\n    <item>g_waypoints_for_items</item>\n    <item>g_waypointsprite_alpha</item>\n    <item>g_waypointsprite_crosshairfadealpha</item>\n    <item>g_waypointsprite_crosshairfadedistance</item>\n    <item>g_waypointsprite_crosshairfadescale</item>\n    <item>g_waypointsprite_distancealphaexponent</item>\n    <item>g_waypointsprite_distancefadealpha</item>\n    <item>g_waypointsprite_distancefadedistancemultiplier</item>\n    <item>g_waypointsprite_distancefadescale</item>\n    <item>g_waypointsprite_edgefadealpha</item>\n    <item>g_waypointsprite_edgefadedistance</item>\n    <item>g_waypointsprite_edgefadescale</item>\n    <item>g_waypointsprite_edgeoffset_bottom</item>\n    <item>g_waypointsprite_edgeoffset_left</item>\n    <item>g_waypointsprite_edgeoffset_right</item>\n    <item>g_waypointsprite_edgeoffset_top</item>\n    <item>g_waypointsprite_fontsize</item>\n    <item>g_waypointsprite_minalpha</item>\n    <item>g_waypointsprite_minscale</item>\n    <item>g_waypointsprite_normdistance</item>\n    <item>g_waypointsprite_scale</item>\n    <item>g_waypointsprite_spam</item>\n    <item>g_waypointsprite_stuffbinds</item>\n    <item>g_waypointsprite_tactical</item>\n    <item>g_waypointsprite_timealphaexponent</item>\n    <item>g_waypointsprite_turrets</item>\n    <item>g_waypointsprite_turrets_maxdist</item>\n    <item>g_waypointsprite_uppercase</item>\n    <item>g_weapon_charge_colormod_blue_full</item>\n    <item>g_weapon_charge_colormod_blue_half</item>\n    <item>g_weapon_charge_colormod_green_full</item>\n    <item>g_weapon_charge_colormod_green_half</item>\n    <item>g_weapon_charge_colormod_hdrmultiplier</item>\n    <item>g_weapon_charge_colormod_red_full</item>\n    <item>g_weapon_charge_colormod_red_half</item>\n    <item>g_weapon_stay</item>\n    <item>g_weapon_throwable</item>\n    <item>g_weaponarena</item>\n    <item>g_weaponarena_random</item>\n    <item>g_weaponarena_random_with_laser</item>\n    <item>g_weapondamagefactor</item>\n    <item>g_weaponforcefactor</item>\n    <item>g_weaponratefactor</item>\n    <item>g_weaponreplace_crylink</item>\n    <item>g_weaponreplace_electro</item>\n    <item>g_weaponreplace_fireball</item>\n    <item>g_weaponreplace_grenadelauncher</item>\n    <item>g_weaponreplace_hagar</item>\n    <item>g_weaponreplace_hlac</item>\n    <item>g_weaponreplace_hook</item>\n    <item>g_weaponreplace_laser</item>\n    <item>g_weaponreplace_minelayer</item>\n    <item>g_weaponreplace_minstanex</item>\n    <item>g_weaponreplace_nex</item>\n    <item>g_weaponreplace_porto</item>\n    <item>g_weaponreplace_rifle</item>\n    <item>g_weaponreplace_rocketlauncher</item>\n    <item>g_weaponreplace_seeker</item>\n    <item>g_weaponreplace_shotgun</item>\n    <item>g_weaponreplace_tuba</item>\n    <item>g_weaponreplace_uzi</item>\n    <item>g_weaponspeedfactor</item>\n    <item>g_weaponspreadfactor</item>\n    <item>g_xonoticversion</item>\n    <item>gamecfg</item>\n    <item>gameversion</item>\n    <item>gameversion_max</item>\n    <item>gameversion_min</item>\n    <item>gl_combine</item>\n    <item>gl_dither</item>\n    <item>gl_ext_separatestencil</item>\n    <item>gl_ext_stenciltwoside</item>\n    <item>gl_finish</item>\n    <item>gl_flashblend</item>\n    <item>gl_info_driver</item>\n    <item>gl_info_extensions</item>\n    <item>gl_info_platform</item>\n    <item>gl_info_renderer</item>\n    <item>gl_info_vendor</item>\n    <item>gl_info_version</item>\n    <item>gl_lightmaps</item>\n    <item>gl_max_lightmapsize</item>\n    <item>gl_max_size</item>\n    <item>gl_mesh_drawrangeelements</item>\n    <item>gl_mesh_prefer_short_elements</item>\n    <item>gl_mesh_testmanualfeeding</item>\n    <item>gl_nopartialtextureupdates</item>\n    <item>gl_paranoid</item>\n    <item>gl_picmip</item>\n    <item>gl_picmip_other</item>\n    <item>gl_picmip_sprites</item>\n    <item>gl_picmip_world</item>\n    <item>gl_polyblend</item>\n    <item>gl_printcheckerror</item>\n    <item>gl_texture_anisotropy</item>\n    <item>gl_texturecompression</item>\n    <item>gl_texturecompression_2d</item>\n    <item>gl_texturecompression_color</item>\n    <item>gl_texturecompression_gloss</item>\n    <item>gl_texturecompression_glow</item>\n    <item>gl_texturecompression_lightcubemaps</item>\n    <item>gl_texturecompression_normal</item>\n    <item>gl_texturecompression_q3bspdeluxemaps</item>\n    <item>gl_texturecompression_q3bsplightmaps</item>\n    <item>gl_texturecompression_reflectmask</item>\n    <item>gl_texturecompression_sky</item>\n    <item>gl_texturecompression_sprites</item>\n    <item>gl_vbo</item>\n    <item>gl_vbo_dynamicindex</item>\n    <item>gl_vbo_dynamicvertex</item>\n    <item>halflifebsp</item>\n    <item>host_framerate</item>\n    <item>host_maxwait</item>\n    <item>host_speeds</item>\n    <item>hostname</item>\n    <item>hud_colorflash_alpha</item>\n    <item>hud_colorset_background</item>\n    <item>hud_colorset_foreground_1</item>\n    <item>hud_colorset_foreground_2</item>\n    <item>hud_colorset_foreground_3</item>\n    <item>hud_colorset_foreground_4</item>\n    <item>hud_colorset_kill_1</item>\n    <item>hud_colorset_kill_2</item>\n    <item>hud_colorset_kill_3</item>\n    <item>hud_configure_bg_minalpha</item>\n    <item>hud_configure_checkcollisions</item>\n    <item>hud_configure_grid</item>\n    <item>hud_configure_grid_alpha</item>\n    <item>hud_configure_grid_xsize</item>\n    <item>hud_configure_grid_ysize</item>\n    <item>hud_configure_teamcolorforced</item>\n    <item>hud_contents</item>\n    <item>hud_contents_blur</item>\n    <item>hud_contents_blur_alpha</item>\n    <item>hud_contents_factor</item>\n    <item>hud_contents_fadeintime</item>\n    <item>hud_contents_fadeouttime</item>\n    <item>hud_contents_lava_alpha</item>\n    <item>hud_contents_lava_color</item>\n    <item>hud_contents_slime_alpha</item>\n    <item>hud_contents_slime_color</item>\n    <item>hud_contents_water_alpha</item>\n    <item>hud_contents_water_color</item>\n    <item>hud_cursormode</item>\n    <item>hud_damage</item>\n    <item>hud_damage_blur</item>\n    <item>hud_damage_blur_alpha</item>\n    <item>hud_damage_color</item>\n    <item>hud_damage_factor</item>\n    <item>hud_damage_fade_rate</item>\n    <item>hud_damage_gentle_alpha_multiplier</item>\n    <item>hud_damage_gentle_color</item>\n    <item>hud_damage_maxalpha</item>\n    <item>hud_damage_pain_threshold</item>\n    <item>hud_damage_pain_threshold_lower</item>\n    <item>hud_damage_pain_threshold_lower_health</item>\n    <item>hud_damage_pain_threshold_pulsating_min</item>\n    <item>hud_damage_pain_threshold_pulsating_period</item>\n    <item>hud_dock</item>\n    <item>hud_dock_alpha</item>\n    <item>hud_dock_color</item>\n    <item>hud_dock_color_team</item>\n    <item>hud_fontsize</item>\n    <item>hud_panel_ammo</item>\n    <item>hud_panel_ammo_bg</item>\n    <item>hud_panel_ammo_bg_alpha</item>\n    <item>hud_panel_ammo_bg_border</item>\n    <item>hud_panel_ammo_bg_color</item>\n    <item>hud_panel_ammo_bg_color_team</item>\n    <item>hud_panel_ammo_bg_padding</item>\n    <item>hud_panel_ammo_iconalign</item>\n    <item>hud_panel_ammo_maxammo</item>\n    <item>hud_panel_ammo_onlycurrent</item>\n    <item>hud_panel_ammo_pos</item>\n    <item>hud_panel_ammo_progressbar</item>\n    <item>hud_panel_ammo_progressbar_name</item>\n    <item>hud_panel_ammo_progressbar_xoffset</item>\n    <item>hud_panel_ammo_size</item>\n    <item>hud_panel_ammo_text</item>\n    <item>hud_panel_bg</item>\n    <item>hud_panel_bg_alpha</item>\n    <item>hud_panel_bg_border</item>\n    <item>hud_panel_bg_color</item>\n    <item>hud_panel_bg_color_team</item>\n    <item>hud_panel_bg_padding</item>\n    <item>hud_panel_centerprint</item>\n    <item>hud_panel_centerprint_align</item>\n    <item>hud_panel_centerprint_bg</item>\n    <item>hud_panel_centerprint_bg_alpha</item>\n    <item>hud_panel_centerprint_bg_border</item>\n    <item>hud_panel_centerprint_bg_color</item>\n    <item>hud_panel_centerprint_bg_color_team</item>\n    <item>hud_panel_centerprint_bg_padding</item>\n    <item>hud_panel_centerprint_fade_in</item>\n    <item>hud_panel_centerprint_fade_minfontsize</item>\n    <item>hud_panel_centerprint_fade_out</item>\n    <item>hud_panel_centerprint_fade_subsequent</item>\n    <item>hud_panel_centerprint_fade_subsequent_minfontsize</item>\n    <item>hud_panel_centerprint_fade_subsequent_passone</item>\n    <item>hud_panel_centerprint_fade_subsequent_passone_minalpha</item>\n    <item>hud_panel_centerprint_fade_subsequent_passtwo</item>\n    <item>hud_panel_centerprint_fade_subsequent_passtwo_minalpha</item>\n    <item>hud_panel_centerprint_flip</item>\n    <item>hud_panel_centerprint_fontscale</item>\n    <item>hud_panel_centerprint_pos</item>\n    <item>hud_panel_centerprint_size</item>\n    <item>hud_panel_centerprint_time</item>\n    <item>hud_panel_chat</item>\n    <item>hud_panel_chat_bg</item>\n    <item>hud_panel_chat_bg_alpha</item>\n    <item>hud_panel_chat_bg_border</item>\n    <item>hud_panel_chat_bg_color</item>\n    <item>hud_panel_chat_bg_color_team</item>\n    <item>hud_panel_chat_bg_padding</item>\n    <item>hud_panel_chat_pos</item>\n    <item>hud_panel_chat_size</item>\n    <item>hud_panel_engineinfo</item>\n    <item>hud_panel_engineinfo_bg</item>\n    <item>hud_panel_engineinfo_bg_alpha</item>\n    <item>hud_panel_engineinfo_bg_border</item>\n    <item>hud_panel_engineinfo_bg_color</item>\n    <item>hud_panel_engineinfo_bg_color_team</item>\n    <item>hud_panel_engineinfo_bg_padding</item>\n    <item>hud_panel_engineinfo_framecounter_decimals</item>\n    <item>hud_panel_engineinfo_framecounter_exponentialmovingaverage</item>\n    <item>hud_panel_engineinfo_framecounter_exponentialmovingaverage_instantupdate_change_threshold</item>\n    <item>hud_panel_engineinfo_framecounter_exponentialmovingaverage_new_weight</item>\n    <item>hud_panel_engineinfo_framecounter_time</item>\n    <item>hud_panel_engineinfo_pos</item>\n    <item>hud_panel_engineinfo_size</item>\n    <item>hud_panel_fg_alpha</item>\n    <item>hud_panel_healtharmor</item>\n    <item>hud_panel_healtharmor_baralign</item>\n    <item>hud_panel_healtharmor_bg</item>\n    <item>hud_panel_healtharmor_bg_alpha</item>\n    <item>hud_panel_healtharmor_bg_border</item>\n    <item>hud_panel_healtharmor_bg_color</item>\n    <item>hud_panel_healtharmor_bg_color_team</item>\n    <item>hud_panel_healtharmor_bg_padding</item>\n    <item>hud_panel_healtharmor_flip</item>\n    <item>hud_panel_healtharmor_iconalign</item>\n    <item>hud_panel_healtharmor_maxarmor</item>\n    <item>hud_panel_healtharmor_maxhealth</item>\n    <item>hud_panel_healtharmor_pos</item>\n    <item>hud_panel_healtharmor_progressbar</item>\n    <item>hud_panel_healtharmor_progressbar_armor</item>\n    <item>hud_panel_healtharmor_progressbar_gfx</item>\n    <item>hud_panel_healtharmor_progressbar_gfx_damage</item>\n    <item>hud_panel_healtharmor_progressbar_gfx_lowhealth</item>\n    <item>hud_panel_healtharmor_progressbar_gfx_smooth</item>\n    <item>hud_panel_healtharmor_progressbar_health</item>\n    <item>hud_panel_healtharmor_size</item>\n    <item>hud_panel_healtharmor_text</item>\n    <item>hud_panel_infomessages</item>\n    <item>hud_panel_infomessages_bg</item>\n    <item>hud_panel_infomessages_bg_alpha</item>\n    <item>hud_panel_infomessages_bg_border</item>\n    <item>hud_panel_infomessages_bg_color</item>\n    <item>hud_panel_infomessages_bg_color_team</item>\n    <item>hud_panel_infomessages_bg_padding</item>\n    <item>hud_panel_infomessages_flip</item>\n    <item>hud_panel_infomessages_pos</item>\n    <item>hud_panel_infomessages_size</item>\n    <item>hud_panel_modicons</item>\n    <item>hud_panel_modicons_bg</item>\n    <item>hud_panel_modicons_bg_alpha</item>\n    <item>hud_panel_modicons_bg_border</item>\n    <item>hud_panel_modicons_bg_color</item>\n    <item>hud_panel_modicons_bg_color_team</item>\n    <item>hud_panel_modicons_bg_padding</item>\n    <item>hud_panel_modicons_ca_layout</item>\n    <item>hud_panel_modicons_dom_layout</item>\n    <item>hud_panel_modicons_freezetag_layout</item>\n    <item>hud_panel_modicons_pos</item>\n    <item>hud_panel_modicons_size</item>\n    <item>hud_panel_notify</item>\n    <item>hud_panel_notify_bg</item>\n    <item>hud_panel_notify_bg_alpha</item>\n    <item>hud_panel_notify_bg_border</item>\n    <item>hud_panel_notify_bg_color</item>\n    <item>hud_panel_notify_bg_color_team</item>\n    <item>hud_panel_notify_bg_padding</item>\n    <item>hud_panel_notify_fadetime</item>\n    <item>hud_panel_notify_flip</item>\n    <item>hud_panel_notify_fontsize</item>\n    <item>hud_panel_notify_pos</item>\n    <item>hud_panel_notify_size</item>\n    <item>hud_panel_notify_time</item>\n    <item>hud_panel_physics</item>\n    <item>hud_panel_physics_acceleration_max</item>\n    <item>hud_panel_physics_acceleration_progressbar_mode</item>\n    <item>hud_panel_physics_acceleration_progressbar_nonlinear</item>\n    <item>hud_panel_physics_acceleration_progressbar_scale</item>\n    <item>hud_panel_physics_acceleration_vertical</item>\n    <item>hud_panel_physics_baralign</item>\n    <item>hud_panel_physics_bg</item>\n    <item>hud_panel_physics_bg_alpha</item>\n    <item>hud_panel_physics_bg_border</item>\n    <item>hud_panel_physics_bg_color</item>\n    <item>hud_panel_physics_bg_color_team</item>\n    <item>hud_panel_physics_bg_padding</item>\n    <item>hud_panel_physics_flip</item>\n    <item>hud_panel_physics_pos</item>\n    <item>hud_panel_physics_progressbar</item>\n    <item>hud_panel_physics_size</item>\n    <item>hud_panel_physics_speed_max</item>\n    <item>hud_panel_physics_speed_unit</item>\n    <item>hud_panel_physics_speed_unit_show</item>\n    <item>hud_panel_physics_speed_vertical</item>\n    <item>hud_panel_physics_text</item>\n    <item>hud_panel_physics_text_scale</item>\n    <item>hud_panel_physics_topspeed</item>\n    <item>hud_panel_physics_topspeed_time</item>\n    <item>hud_panel_powerups</item>\n    <item>hud_panel_powerups_baralign</item>\n    <item>hud_panel_powerups_bg</item>\n    <item>hud_panel_powerups_bg_alpha</item>\n    <item>hud_panel_powerups_bg_border</item>\n    <item>hud_panel_powerups_bg_color</item>\n    <item>hud_panel_powerups_bg_color_team</item>\n    <item>hud_panel_powerups_bg_padding</item>\n    <item>hud_panel_powerups_flip</item>\n    <item>hud_panel_powerups_iconalign</item>\n    <item>hud_panel_powerups_pos</item>\n    <item>hud_panel_powerups_progressbar</item>\n    <item>hud_panel_powerups_progressbar_shield</item>\n    <item>hud_panel_powerups_progressbar_strength</item>\n    <item>hud_panel_powerups_progressbar_superweapons</item>\n    <item>hud_panel_powerups_size</item>\n    <item>hud_panel_powerups_text</item>\n    <item>hud_panel_pressedkeys</item>\n    <item>hud_panel_pressedkeys_aspect</item>\n    <item>hud_panel_pressedkeys_attack</item>\n    <item>hud_panel_pressedkeys_bg</item>\n    <item>hud_panel_pressedkeys_bg_alpha</item>\n    <item>hud_panel_pressedkeys_bg_border</item>\n    <item>hud_panel_pressedkeys_bg_color</item>\n    <item>hud_panel_pressedkeys_bg_color_team</item>\n    <item>hud_panel_pressedkeys_bg_padding</item>\n    <item>hud_panel_pressedkeys_pos</item>\n    <item>hud_panel_pressedkeys_size</item>\n    <item>hud_panel_racetimer</item>\n    <item>hud_panel_racetimer_bg</item>\n    <item>hud_panel_racetimer_bg_alpha</item>\n    <item>hud_panel_racetimer_bg_border</item>\n    <item>hud_panel_racetimer_bg_color</item>\n    <item>hud_panel_racetimer_bg_color_team</item>\n    <item>hud_panel_racetimer_bg_padding</item>\n    <item>hud_panel_racetimer_pos</item>\n    <item>hud_panel_racetimer_size</item>\n    <item>hud_panel_radar</item>\n    <item>hud_panel_radar_bg</item>\n    <item>hud_panel_radar_bg_alpha</item>\n    <item>hud_panel_radar_bg_border</item>\n    <item>hud_panel_radar_bg_color</item>\n    <item>hud_panel_radar_bg_color_team</item>\n    <item>hud_panel_radar_bg_padding</item>\n    <item>hud_panel_radar_foreground_alpha</item>\n    <item>hud_panel_radar_maximized_rotation</item>\n    <item>hud_panel_radar_maximized_scale</item>\n    <item>hud_panel_radar_maximized_size</item>\n    <item>hud_panel_radar_maximized_zoommode</item>\n    <item>hud_panel_radar_pos</item>\n    <item>hud_panel_radar_rotation</item>\n    <item>hud_panel_radar_scale</item>\n    <item>hud_panel_radar_size</item>\n    <item>hud_panel_radar_zoommode</item>\n    <item>hud_panel_score</item>\n    <item>hud_panel_score_bg</item>\n    <item>hud_panel_score_bg_alpha</item>\n    <item>hud_panel_score_bg_border</item>\n    <item>hud_panel_score_bg_color</item>\n    <item>hud_panel_score_bg_color_team</item>\n    <item>hud_panel_score_bg_padding</item>\n    <item>hud_panel_score_pos</item>\n    <item>hud_panel_score_rankings</item>\n    <item>hud_panel_score_size</item>\n    <item>hud_panel_timer</item>\n    <item>hud_panel_timer_bg</item>\n    <item>hud_panel_timer_bg_alpha</item>\n    <item>hud_panel_timer_bg_border</item>\n    <item>hud_panel_timer_bg_color</item>\n    <item>hud_panel_timer_bg_color_team</item>\n    <item>hud_panel_timer_bg_padding</item>\n    <item>hud_panel_timer_increment</item>\n    <item>hud_panel_timer_pos</item>\n    <item>hud_panel_timer_size</item>\n    <item>hud_panel_update_interval</item>\n    <item>hud_panel_vote</item>\n    <item>hud_panel_vote_alreadyvoted_alpha</item>\n    <item>hud_panel_vote_bg</item>\n    <item>hud_panel_vote_bg_alpha</item>\n    <item>hud_panel_vote_bg_border</item>\n    <item>hud_panel_vote_bg_color</item>\n    <item>hud_panel_vote_bg_color_team</item>\n    <item>hud_panel_vote_bg_padding</item>\n    <item>hud_panel_vote_pos</item>\n    <item>hud_panel_vote_size</item>\n    <item>hud_panel_weapons</item>\n    <item>hud_panel_weapons_accuracy</item>\n    <item>hud_panel_weapons_ammo</item>\n    <item>hud_panel_weapons_ammo_alpha</item>\n    <item>hud_panel_weapons_ammo_color</item>\n    <item>hud_panel_weapons_ammo_full_cells</item>\n    <item>hud_panel_weapons_ammo_full_fuel</item>\n    <item>hud_panel_weapons_ammo_full_nails</item>\n    <item>hud_panel_weapons_ammo_full_rockets</item>\n    <item>hud_panel_weapons_ammo_full_shells</item>\n    <item>hud_panel_weapons_aspect</item>\n    <item>hud_panel_weapons_bg</item>\n    <item>hud_panel_weapons_bg_alpha</item>\n    <item>hud_panel_weapons_bg_border</item>\n    <item>hud_panel_weapons_bg_color</item>\n    <item>hud_panel_weapons_bg_color_team</item>\n    <item>hud_panel_weapons_bg_padding</item>\n    <item>hud_panel_weapons_complainbubble</item>\n    <item>hud_panel_weapons_complainbubble_color_donthave</item>\n    <item>hud_panel_weapons_complainbubble_color_outofammo</item>\n    <item>hud_panel_weapons_complainbubble_color_unavailable</item>\n    <item>hud_panel_weapons_complainbubble_fadetime</item>\n    <item>hud_panel_weapons_complainbubble_padding</item>\n    <item>hud_panel_weapons_complainbubble_time</item>\n    <item>hud_panel_weapons_label</item>\n    <item>hud_panel_weapons_onlyowned</item>\n    <item>hud_panel_weapons_pos</item>\n    <item>hud_panel_weapons_size</item>\n    <item>hud_panel_weapons_timeout</item>\n    <item>hud_panel_weapons_timeout_effect</item>\n    <item>hud_panel_weapons_timeout_fadebgmin</item>\n    <item>hud_panel_weapons_timeout_fadefgmin</item>\n    <item>hud_panel_weapons_timeout_speed_in</item>\n    <item>hud_panel_weapons_timeout_speed_out</item>\n    <item>hud_postprocessing</item>\n    <item>hud_postprocessing_maxbluralpha</item>\n    <item>hud_postprocessing_maxblurradius</item>\n    <item>hud_powerup</item>\n    <item>hud_progressbar_acceleration_color</item>\n    <item>hud_progressbar_acceleration_neg_color</item>\n    <item>hud_progressbar_alpha</item>\n    <item>hud_progressbar_armor_color</item>\n    <item>hud_progressbar_fuel_color</item>\n    <item>hud_progressbar_health_color</item>\n    <item>hud_progressbar_nexball_color</item>\n    <item>hud_progressbar_shield_color</item>\n    <item>hud_progressbar_speed_color</item>\n    <item>hud_progressbar_strength_color</item>\n    <item>hud_progressbar_superweapons_color</item>\n    <item>hud_showbinds</item>\n    <item>hud_showbinds_limit</item>\n    <item>hud_shownames</item>\n    <item>hud_shownames_alpha</item>\n    <item>hud_shownames_antioverlap</item>\n    <item>hud_shownames_antioverlap_distance</item>\n    <item>hud_shownames_aspect</item>\n    <item>hud_shownames_crosshairdistance</item>\n    <item>hud_shownames_crosshairdistance_antioverlap</item>\n    <item>hud_shownames_crosshairdistance_time</item>\n    <item>hud_shownames_decolorize</item>\n    <item>hud_shownames_enemies</item>\n    <item>hud_shownames_fontsize</item>\n    <item>hud_shownames_maxdistance</item>\n    <item>hud_shownames_mindistance</item>\n    <item>hud_shownames_offset</item>\n    <item>hud_shownames_resize</item>\n    <item>hud_shownames_self</item>\n    <item>hud_shownames_status</item>\n    <item>hud_shownames_statusbar_height</item>\n    <item>hud_skin</item>\n    <item>hud_width</item>\n    <item>in_pitch_max</item>\n    <item>in_pitch_min</item>\n    <item>is_dedicated</item>\n    <item>joy_active</item>\n    <item>joy_axisforward</item>\n    <item>joy_axiskeyevents</item>\n    <item>joy_axiskeyevents_deadzone</item>\n    <item>joy_axispitch</item>\n    <item>joy_axisside</item>\n    <item>joy_axisup</item>\n    <item>joy_axisyaw</item>\n    <item>joy_deadzoneforward</item>\n    <item>joy_deadzonepitch</item>\n    <item>joy_deadzoneside</item>\n    <item>joy_deadzoneup</item>\n    <item>joy_deadzoneyaw</item>\n    <item>joy_detected</item>\n    <item>joy_enable</item>\n    <item>joy_index</item>\n    <item>joy_sensitivityforward</item>\n    <item>joy_sensitivitypitch</item>\n    <item>joy_sensitivityside</item>\n    <item>joy_sensitivityup</item>\n    <item>joy_sensitivityyaw</item>\n    <item>joy_x360_axisforward</item>\n    <item>joy_x360_axispitch</item>\n    <item>joy_x360_axisside</item>\n    <item>joy_x360_axisup</item>\n    <item>joy_x360_axisyaw</item>\n    <item>joy_x360_deadzoneforward</item>\n    <item>joy_x360_deadzonepitch</item>\n    <item>joy_x360_deadzoneside</item>\n    <item>joy_x360_deadzoneup</item>\n    <item>joy_x360_deadzoneyaw</item>\n    <item>joy_x360_sensitivityforward</item>\n    <item>joy_x360_sensitivitypitch</item>\n    <item>joy_x360_sensitivityside</item>\n    <item>joy_x360_sensitivityup</item>\n    <item>joy_x360_sensitivityyaw</item>\n    <item>joyadvanced</item>\n    <item>joyadvaxisr</item>\n    <item>joyadvaxisx</item>\n    <item>joyadvaxisy</item>\n    <item>joyadvaxisz</item>\n    <item>joypitchsensitivity</item>\n    <item>joysidesensitivity</item>\n    <item>joyyawsensitivity</item>\n    <item>join</item>\n    <item>lastlevel</item>\n    <item>leadlimit</item>\n    <item>leadlimit_and_fraglimit</item>\n    <item>leadlimit_override</item>\n    <item>locksession</item>\n    <item>locs_enable</item>\n    <item>locs_show</item>\n    <item>loddebug</item>\n    <item>log_dest_udp</item>\n    <item>log_file</item>\n    <item>lookspring</item>\n    <item>lookstrafe</item>\n    <item>m_accelerate</item>\n    <item>m_accelerate_filter</item>\n    <item>m_accelerate_maxspeed</item>\n    <item>m_accelerate_minspeed</item>\n    <item>m_filter</item>\n    <item>m_forward</item>\n    <item>m_pitch</item>\n    <item>m_side</item>\n    <item>m_yaw</item>\n    <item>mastervolume</item>\n    <item>menu_cdtrack</item>\n    <item>menu_cl_gunalign</item>\n    <item>menu_maxplayers</item>\n    <item>menu_mouse_absolute</item>\n    <item>menu_mouse_speed</item>\n    <item>menu_options_colorcontrol_correctionvalue</item>\n    <item>menu_picmip_bypass</item>\n    <item>menu_progs</item>\n    <item>menu_sandbox_attach_bone</item>\n    <item>menu_sandbox_edit_alpha</item>\n    <item>menu_sandbox_edit_color_glow</item>\n    <item>menu_sandbox_edit_color_main</item>\n    <item>menu_sandbox_edit_force</item>\n    <item>menu_sandbox_edit_frame</item>\n    <item>menu_sandbox_edit_material</item>\n    <item>menu_sandbox_edit_physics</item>\n    <item>menu_sandbox_edit_scale</item>\n    <item>menu_sandbox_edit_skin</item>\n    <item>menu_sandbox_edit_solidity</item>\n    <item>menu_sandbox_spawn_model</item>\n    <item>menu_showboxes</item>\n    <item>menu_skin</item>\n    <item>menu_slist_modfilter</item>\n    <item>menu_slist_showempty</item>\n    <item>menu_slist_showfull</item>\n    <item>menu_slowmo</item>\n    <item>menu_snd_attenuation_method</item>\n    <item>menu_sounds</item>\n    <item>menu_tooltips</item>\n    <item>menu_updatecheck</item>\n    <item>menu_updatecheck_getpacks</item>\n    <item>menu_use_default_hostname</item>\n    <item>menu_vid_scale</item>\n    <item>menu_video_played</item>\n    <item>menu_watermark</item>\n    <item>menu_weaponarena</item>\n    <item>minplayers</item>\n    <item>mod_alias_force_animated</item>\n    <item>mod_alias_supporttagscale</item>\n    <item>mod_bsp_portalize</item>\n    <item>mod_collision_bih</item>\n    <item>mod_generatelightmaps_borderpixels</item>\n    <item>mod_generatelightmaps_gridradius</item>\n    <item>mod_generatelightmaps_gridsamples</item>\n    <item>mod_generatelightmaps_lightmapradius</item>\n    <item>mod_generatelightmaps_lightmapsamples</item>\n    <item>mod_generatelightmaps_texturesize</item>\n    <item>mod_generatelightmaps_unitspersample</item>\n    <item>mod_generatelightmaps_vertexradius</item>\n    <item>mod_generatelightmaps_vertexsamples</item>\n    <item>mod_noshader_default_offsetmapping</item>\n    <item>mod_obj_orientation</item>\n    <item>mod_q1bsp_polygoncollisions</item>\n    <item>mod_q3bsp_curves_collisions</item>\n    <item>mod_q3bsp_curves_collisions_stride</item>\n    <item>mod_q3bsp_curves_stride</item>\n    <item>mod_q3bsp_debugtracebrush</item>\n    <item>mod_q3bsp_lightmapmergepower</item>\n    <item>mod_q3bsp_nolightmaps</item>\n    <item>mod_q3bsp_optimizedtraceline</item>\n    <item>mod_q3bsp_sRGBlightmaps</item>\n    <item>mod_q3bsp_tracelineofsight_brushes</item>\n    <item>mod_q3shader_default_offsetmapping</item>\n    <item>mod_q3shader_default_offsetmapping_bias</item>\n    <item>mod_q3shader_default_offsetmapping_scale</item>\n    <item>mod_q3shader_default_polygonfactor</item>\n    <item>mod_q3shader_default_polygonoffset</item>\n    <item>mod_q3shader_force_addalpha</item>\n    <item>mod_q3shader_force_terrain_alphaflag</item>\n    <item>mod_recalculatenodeboxes</item>\n    <item>music_playlist_current0</item>\n    <item>music_playlist_current1</item>\n    <item>music_playlist_current2</item>\n    <item>music_playlist_current3</item>\n    <item>music_playlist_current4</item>\n    <item>music_playlist_current5</item>\n    <item>music_playlist_current6</item>\n    <item>music_playlist_current7</item>\n    <item>music_playlist_current8</item>\n    <item>music_playlist_current9</item>\n    <item>music_playlist_index</item>\n    <item>music_playlist_list0</item>\n    <item>music_playlist_list1</item>\n    <item>music_playlist_list2</item>\n    <item>music_playlist_list3</item>\n    <item>music_playlist_list4</item>\n    <item>music_playlist_list5</item>\n    <item>music_playlist_list6</item>\n    <item>music_playlist_list7</item>\n    <item>music_playlist_list8</item>\n    <item>music_playlist_list9</item>\n    <item>music_playlist_random0</item>\n    <item>music_playlist_random1</item>\n    <item>music_playlist_random2</item>\n    <item>music_playlist_random3</item>\n    <item>music_playlist_random4</item>\n    <item>music_playlist_random5</item>\n    <item>music_playlist_random6</item>\n    <item>music_playlist_random7</item>\n    <item>music_playlist_random8</item>\n    <item>music_playlist_random9</item>\n    <item>music_playlist_sampleposition0</item>\n    <item>music_playlist_sampleposition1</item>\n    <item>music_playlist_sampleposition2</item>\n    <item>music_playlist_sampleposition3</item>\n    <item>music_playlist_sampleposition4</item>\n    <item>music_playlist_sampleposition5</item>\n    <item>music_playlist_sampleposition6</item>\n    <item>music_playlist_sampleposition7</item>\n    <item>music_playlist_sampleposition8</item>\n    <item>music_playlist_sampleposition9</item>\n    <item>nehx00</item>\n    <item>nehx01</item>\n    <item>nehx02</item>\n    <item>nehx03</item>\n    <item>nehx04</item>\n    <item>nehx05</item>\n    <item>nehx06</item>\n    <item>nehx07</item>\n    <item>nehx08</item>\n    <item>nehx09</item>\n    <item>nehx10</item>\n    <item>nehx11</item>\n    <item>nehx12</item>\n    <item>nehx13</item>\n    <item>nehx14</item>\n    <item>nehx15</item>\n    <item>nehx16</item>\n    <item>nehx17</item>\n    <item>nehx18</item>\n    <item>nehx19</item>\n    <item>net_address</item>\n    <item>net_address_ipv6</item>\n    <item>net_challengefloodblockingtimeout</item>\n    <item>net_connectfloodblockingtimeout</item>\n    <item>net_connecttimeout</item>\n    <item>net_getstatusfloodblockingtimeout</item>\n    <item>net_messagetimeout</item>\n    <item>net_slist_favorites</item>\n    <item>net_slist_maxtries</item>\n    <item>net_slist_pause</item>\n    <item>net_slist_queriesperframe</item>\n    <item>net_slist_queriespersecond</item>\n    <item>net_slist_timeout</item>\n    <item>net_tos_dscp</item>\n    <item>nextmap</item>\n    <item>noaim</item>\n    <item>noexit</item>\n    <item>nomonsters</item>\n    <item>nosound</item>\n    <item>notification_ANNCE_ACHIEVEMENT_AIRSHOT</item>\n    <item>notification_ANNCE_ACHIEVEMENT_AMAZING</item>\n    <item>notification_ANNCE_ACHIEVEMENT_AWESOME</item>\n    <item>notification_ANNCE_ACHIEVEMENT_BOTLIKE</item>\n    <item>notification_ANNCE_ACHIEVEMENT_ELECTROBITCH</item>\n    <item>notification_ANNCE_ACHIEVEMENT_IMPRESSIVE</item>\n    <item>notification_ANNCE_ACHIEVEMENT_YODA</item>\n    <item>notification_ANNCE_BEGIN</item>\n    <item>notification_ANNCE_KILLSTREAK_03</item>\n    <item>notification_ANNCE_KILLSTREAK_05</item>\n    <item>notification_ANNCE_KILLSTREAK_10</item>\n    <item>notification_ANNCE_KILLSTREAK_15</item>\n    <item>notification_ANNCE_KILLSTREAK_20</item>\n    <item>notification_ANNCE_KILLSTREAK_25</item>\n    <item>notification_ANNCE_KILLSTREAK_30</item>\n    <item>notification_ANNCE_MINSTAGIB_LASTSECOND</item>\n    <item>notification_ANNCE_MINSTAGIB_NARROWLY</item>\n    <item>notification_ANNCE_MINSTAGIB_TERMINATED</item>\n    <item>notification_ANNCE_MULTIFRAG</item>\n    <item>notification_ANNCE_NUM_1</item>\n    <item>notification_ANNCE_NUM_10</item>\n    <item>notification_ANNCE_NUM_2</item>\n    <item>notification_ANNCE_NUM_3</item>\n    <item>notification_ANNCE_NUM_4</item>\n    <item>notification_ANNCE_NUM_5</item>\n    <item>notification_ANNCE_NUM_6</item>\n    <item>notification_ANNCE_NUM_7</item>\n    <item>notification_ANNCE_NUM_8</item>\n    <item>notification_ANNCE_NUM_9</item>\n    <item>notification_ANNCE_PREPARE</item>\n    <item>notification_ANNCE_REMAINING_FRAG_1</item>\n    <item>notification_ANNCE_REMAINING_FRAG_2</item>\n    <item>notification_ANNCE_REMAINING_FRAG_3</item>\n    <item>notification_ANNCE_REMAINING_MIN_1</item>\n    <item>notification_ANNCE_REMAINING_MIN_5</item>\n    <item>notification_ANNCE_TIMEOUT</item>\n    <item>notification_ANNCE_VOTE_ACCEPT</item>\n    <item>notification_ANNCE_VOTE_CALL</item>\n    <item>notification_ANNCE_VOTE_FAIL</item>\n    <item>notification_CENTER_ARENA_BEGIN</item>\n    <item>notification_CENTER_ARENA_NEEDPLAYER</item>\n    <item>notification_CENTER_ARENA_ROUNDSTART</item>\n    <item>notification_CENTER_ASSAULT_ATTACKING</item>\n    <item>notification_CENTER_ASSAULT_DEFENDING</item>\n    <item>notification_CENTER_COUNTDOWN_BEGIN</item>\n    <item>notification_CENTER_COUNTDOWN_GAMESTART</item>\n    <item>notification_CENTER_CTF_CAPTURESHIELD_FREE</item>\n    <item>notification_CENTER_CTF_CAPTURESHIELD_SHIELDED</item>\n    <item>notification_CENTER_CTF_CAPTURE_BLUE</item>\n    <item>notification_CENTER_CTF_CAPTURE_RED</item>\n    <item>notification_CENTER_CTF_FLAG_THROW_PUNISH</item>\n    <item>notification_CENTER_CTF_PASS_OTHER_BLUE</item>\n    <item>notification_CENTER_CTF_PASS_OTHER_RED</item>\n    <item>notification_CENTER_CTF_PASS_RECEIVED_BLUE</item>\n    <item>notification_CENTER_CTF_PASS_RECEIVED_RED</item>\n    <item>notification_CENTER_CTF_PASS_REQUESTED</item>\n    <item>notification_CENTER_CTF_PASS_REQUESTING</item>\n    <item>notification_CENTER_CTF_PASS_SENT_BLUE</item>\n    <item>notification_CENTER_CTF_PASS_SENT_RED</item>\n    <item>notification_CENTER_CTF_PICKUP_BLUE</item>\n    <item>notification_CENTER_CTF_PICKUP_ENEMY</item>\n    <item>notification_CENTER_CTF_PICKUP_ENEMY_VERBOSE</item>\n    <item>notification_CENTER_CTF_PICKUP_RED</item>\n    <item>notification_CENTER_CTF_PICKUP_TEAM</item>\n    <item>notification_CENTER_CTF_PICKUP_TEAM_VERBOSE</item>\n    <item>notification_CENTER_CTF_RETURN_BLUE</item>\n    <item>notification_CENTER_CTF_RETURN_RED</item>\n    <item>notification_CENTER_CTF_STALEMATE_CARRIER</item>\n    <item>notification_CENTER_CTF_STALEMATE_OTHER</item>\n    <item>notification_CENTER_DEATH_MURDER_FRAG</item>\n    <item>notification_CENTER_DEATH_MURDER_FRAGGED</item>\n    <item>notification_CENTER_DEATH_MURDER_FRAGGED_VERBOSE</item>\n    <item>notification_CENTER_DEATH_MURDER_FRAG_VERBOSE</item>\n    <item>notification_CENTER_DEATH_MURDER_TYPEFRAG</item>\n    <item>notification_CENTER_DEATH_MURDER_TYPEFRAGGED</item>\n    <item>notification_CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE</item>\n    <item>notification_CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE</item>\n    <item>notification_CENTER_DEATH_SELF_AUTOTEAMCHANGE</item>\n    <item>notification_CENTER_DEATH_SELF_BETRAYAL</item>\n    <item>notification_CENTER_DEATH_SELF_CAMP</item>\n    <item>notification_CENTER_DEATH_SELF_CHEAT</item>\n    <item>notification_CENTER_DEATH_SELF_CUSTOM</item>\n    <item>notification_CENTER_DEATH_SELF_DROWN</item>\n    <item>notification_CENTER_DEATH_SELF_FALL</item>\n    <item>notification_CENTER_DEATH_SELF_FIRE</item>\n    <item>notification_CENTER_DEATH_SELF_GENERIC</item>\n    <item>notification_CENTER_DEATH_SELF_LAVA</item>\n    <item>notification_CENTER_DEATH_SELF_NOAMMO</item>\n    <item>notification_CENTER_DEATH_SELF_ROT</item>\n    <item>notification_CENTER_DEATH_SELF_SHOOTING_STAR</item>\n    <item>notification_CENTER_DEATH_SELF_SLIME</item>\n    <item>notification_CENTER_DEATH_SELF_SUICIDE</item>\n    <item>notification_CENTER_DEATH_SELF_SWAMP</item>\n    <item>notification_CENTER_DEATH_SELF_TEAMCHANGE</item>\n    <item>notification_CENTER_DEATH_SELF_TOUCHEXPLODE</item>\n    <item>notification_CENTER_DEATH_SELF_TURRET</item>\n    <item>notification_CENTER_DEATH_SELF_TURRET_EWHEEL</item>\n    <item>notification_CENTER_DEATH_SELF_TURRET_WALK</item>\n    <item>notification_CENTER_DEATH_SELF_VH_BUMB_DEATH</item>\n    <item>notification_CENTER_DEATH_SELF_VH_CRUSH</item>\n    <item>notification_CENTER_DEATH_SELF_VH_RAPT_BOMB</item>\n    <item>notification_CENTER_DEATH_SELF_VH_RAPT_DEATH</item>\n    <item>notification_CENTER_DEATH_SELF_VH_SPID_DEATH</item>\n    <item>notification_CENTER_DEATH_SELF_VH_SPID_ROCKET</item>\n    <item>notification_CENTER_DEATH_SELF_VH_WAKI_DEATH</item>\n    <item>notification_CENTER_DEATH_SELF_VH_WAKI_ROCKET</item>\n    <item>notification_CENTER_DEATH_SELF_VOID</item>\n    <item>notification_CENTER_DEATH_TEAMKILL_FRAG</item>\n    <item>notification_CENTER_DEATH_TEAMKILL_FRAGGED</item>\n    <item>notification_CENTER_DISCONNECT_IDLING</item>\n    <item>notification_CENTER_FREEZETAG_FREEZE</item>\n    <item>notification_CENTER_FREEZETAG_FROZEN</item>\n    <item>notification_CENTER_FREEZETAG_REVIVE</item>\n    <item>notification_CENTER_FREEZETAG_REVIVED</item>\n    <item>notification_CENTER_FREEZETAG_ROUND_WIN_BLUE</item>\n    <item>notification_CENTER_FREEZETAG_ROUND_WIN_PINK</item>\n    <item>notification_CENTER_FREEZETAG_ROUND_WIN_RED</item>\n    <item>notification_CENTER_FREEZETAG_ROUND_WIN_YELLOW</item>\n    <item>notification_CENTER_FREEZETAG_SELF</item>\n    <item>notification_CENTER_FREEZETAG_SPAWN_LATE</item>\n    <item>notification_CENTER_ITEM_WEAPON_DONTHAVE</item>\n    <item>notification_CENTER_ITEM_WEAPON_DROP</item>\n    <item>notification_CENTER_ITEM_WEAPON_GOT</item>\n    <item>notification_CENTER_ITEM_WEAPON_NOAMMO</item>\n    <item>notification_CENTER_ITEM_WEAPON_PRIMORSEC</item>\n    <item>notification_CENTER_ITEM_WEAPON_UNAVAILABLE</item>\n    <item>notification_CENTER_JOIN_NOSPAWNS</item>\n    <item>notification_CENTER_JOIN_PREVENT</item>\n    <item>notification_CENTER_KEEPAWAY_DROPPED</item>\n    <item>notification_CENTER_KEEPAWAY_PICKUP</item>\n    <item>notification_CENTER_KEEPAWAY_WARN</item>\n    <item>notification_CENTER_KEYHUNT_HELP</item>\n    <item>notification_CENTER_KEYHUNT_INTERFERE_BLUE</item>\n    <item>notification_CENTER_KEYHUNT_INTERFERE_PINK</item>\n    <item>notification_CENTER_KEYHUNT_INTERFERE_RED</item>\n    <item>notification_CENTER_KEYHUNT_INTERFERE_YELLOW</item>\n    <item>notification_CENTER_KEYHUNT_MEET</item>\n    <item>notification_CENTER_KEYHUNT_SCAN</item>\n    <item>notification_CENTER_KEYHUNT_START_BLUE</item>\n    <item>notification_CENTER_KEYHUNT_START_PINK</item>\n    <item>notification_CENTER_KEYHUNT_START_RED</item>\n    <item>notification_CENTER_KEYHUNT_START_YELLOW</item>\n    <item>notification_CENTER_KEYHUNT_WAIT</item>\n    <item>notification_CENTER_LMS_CAMPCHECK</item>\n    <item>notification_CENTER_MINSTA_FINDAMMO</item>\n    <item>notification_CENTER_MINSTA_FINDAMMO_FIRST</item>\n    <item>notification_CENTER_MOTD</item>\n    <item>notification_CENTER_NIX_COUNTDOWN</item>\n    <item>notification_CENTER_NIX_NEWWEAPON</item>\n    <item>notification_CENTER_OVERTIME_FRAG</item>\n    <item>notification_CENTER_OVERTIME_TIME</item>\n    <item>notification_CENTER_POWERDOWN_INVISIBILITY</item>\n    <item>notification_CENTER_POWERDOWN_SHIELD</item>\n    <item>notification_CENTER_POWERDOWN_SPEED</item>\n    <item>notification_CENTER_POWERDOWN_STRENGTH</item>\n    <item>notification_CENTER_POWERUP_INVISIBILITY</item>\n    <item>notification_CENTER_POWERUP_SHIELD</item>\n    <item>notification_CENTER_POWERUP_SPEED</item>\n    <item>notification_CENTER_POWERUP_STRENGTH</item>\n    <item>notification_CENTER_RACE_FINISHLAP</item>\n    <item>notification_CENTER_SUPERWEAPON_BROKEN</item>\n    <item>notification_CENTER_SUPERWEAPON_LOST</item>\n    <item>notification_CENTER_SUPERWEAPON_PICKUP</item>\n    <item>notification_CENTER_TEAMCHANGE_AUTO</item>\n    <item>notification_CENTER_TEAMCHANGE_BLUE</item>\n    <item>notification_CENTER_TEAMCHANGE_PINK</item>\n    <item>notification_CENTER_TEAMCHANGE_RED</item>\n    <item>notification_CENTER_TEAMCHANGE_SPECTATE</item>\n    <item>notification_CENTER_TEAMCHANGE_SUICIDE</item>\n    <item>notification_CENTER_TEAMCHANGE_YELLOW</item>\n    <item>notification_CENTER_TIMEOUT_BEGINNING</item>\n    <item>notification_CENTER_TIMEOUT_ENDING</item>\n    <item>notification_DEATH_MURDER_CHEAT</item>\n    <item>notification_DEATH_MURDER_DROWN</item>\n    <item>notification_DEATH_MURDER_FALL</item>\n    <item>notification_DEATH_MURDER_FIRE</item>\n    <item>notification_DEATH_MURDER_LAVA</item>\n    <item>notification_DEATH_MURDER_SHOOTING_STAR</item>\n    <item>notification_DEATH_MURDER_SLIME</item>\n    <item>notification_DEATH_MURDER_SWAMP</item>\n    <item>notification_DEATH_MURDER_TELEFRAG</item>\n    <item>notification_DEATH_MURDER_TOUCHEXPLODE</item>\n    <item>notification_DEATH_MURDER_VH_BUMB_DEATH</item>\n    <item>notification_DEATH_MURDER_VH_BUMB_GUN</item>\n    <item>notification_DEATH_MURDER_VH_CRUSH</item>\n    <item>notification_DEATH_MURDER_VH_RAPT_BOMB</item>\n    <item>notification_DEATH_MURDER_VH_RAPT_CANNON</item>\n    <item>notification_DEATH_MURDER_VH_RAPT_DEATH</item>\n    <item>notification_DEATH_MURDER_VH_SPID_DEATH</item>\n    <item>notification_DEATH_MURDER_VH_SPID_MINIGUN</item>\n    <item>notification_DEATH_MURDER_VH_SPID_ROCKET</item>\n    <item>notification_DEATH_MURDER_VH_WAKI_DEATH</item>\n    <item>notification_DEATH_MURDER_VH_WAKI_GUN</item>\n    <item>notification_DEATH_MURDER_VH_WAKI_ROCKET</item>\n    <item>notification_DEATH_MURDER_VOID</item>\n    <item>notification_DEATH_SELF_AUTOTEAMCHANGE</item>\n    <item>notification_DEATH_SELF_BETRAYAL</item>\n    <item>notification_DEATH_SELF_CAMP</item>\n    <item>notification_DEATH_SELF_CHEAT</item>\n    <item>notification_DEATH_SELF_CUSTOM</item>\n    <item>notification_DEATH_SELF_DROWN</item>\n    <item>notification_DEATH_SELF_FALL</item>\n    <item>notification_DEATH_SELF_FIRE</item>\n    <item>notification_DEATH_SELF_GENERIC</item>\n    <item>notification_DEATH_SELF_LAVA</item>\n    <item>notification_DEATH_SELF_NOAMMO</item>\n    <item>notification_DEATH_SELF_ROT</item>\n    <item>notification_DEATH_SELF_SHOOTING_STAR</item>\n    <item>notification_DEATH_SELF_SLIME</item>\n    <item>notification_DEATH_SELF_SUICIDE</item>\n    <item>notification_DEATH_SELF_SWAMP</item>\n    <item>notification_DEATH_SELF_TEAMCHANGE</item>\n    <item>notification_DEATH_SELF_TOUCHEXPLODE</item>\n    <item>notification_DEATH_SELF_TURRET</item>\n    <item>notification_DEATH_SELF_TURRET_EWHEEL</item>\n    <item>notification_DEATH_SELF_TURRET_FLAC</item>\n    <item>notification_DEATH_SELF_TURRET_HELLION</item>\n    <item>notification_DEATH_SELF_TURRET_HK</item>\n    <item>notification_DEATH_SELF_TURRET_MACHINEGUN</item>\n    <item>notification_DEATH_SELF_TURRET_MLRS</item>\n    <item>notification_DEATH_SELF_TURRET_PHASER</item>\n    <item>notification_DEATH_SELF_TURRET_PLASMA</item>\n    <item>notification_DEATH_SELF_TURRET_TESLA</item>\n    <item>notification_DEATH_SELF_TURRET_WALK_GUN</item>\n    <item>notification_DEATH_SELF_TURRET_WALK_MEELE</item>\n    <item>notification_DEATH_SELF_TURRET_WALK_ROCKET</item>\n    <item>notification_DEATH_SELF_VH_BUMB_DEATH</item>\n    <item>notification_DEATH_SELF_VH_CRUSH</item>\n    <item>notification_DEATH_SELF_VH_RAPT_BOMB</item>\n    <item>notification_DEATH_SELF_VH_RAPT_DEATH</item>\n    <item>notification_DEATH_SELF_VH_SPID_DEATH</item>\n    <item>notification_DEATH_SELF_VH_SPID_ROCKET</item>\n    <item>notification_DEATH_SELF_VH_WAKI_DEATH</item>\n    <item>notification_DEATH_SELF_VH_WAKI_ROCKET</item>\n    <item>notification_DEATH_SELF_VOID</item>\n    <item>notification_INFO_CTF_CAPTURE_BLUE</item>\n    <item>notification_INFO_CTF_CAPTURE_BROKEN_BLUE</item>\n    <item>notification_INFO_CTF_CAPTURE_BROKEN_RED</item>\n    <item>notification_INFO_CTF_CAPTURE_RED</item>\n    <item>notification_INFO_CTF_CAPTURE_TIME_BLUE</item>\n    <item>notification_INFO_CTF_CAPTURE_TIME_RED</item>\n    <item>notification_INFO_CTF_CAPTURE_UNBROKEN_BLUE</item>\n    <item>notification_INFO_CTF_CAPTURE_UNBROKEN_RED</item>\n    <item>notification_INFO_CTF_FLAGRETURN_ABORTRUN_BLUE</item>\n    <item>notification_INFO_CTF_FLAGRETURN_ABORTRUN_RED</item>\n    <item>notification_INFO_CTF_FLAGRETURN_DAMAGED_BLUE</item>\n    <item>notification_INFO_CTF_FLAGRETURN_DAMAGED_RED</item>\n    <item>notification_INFO_CTF_FLAGRETURN_DROPPED_BLUE</item>\n    <item>notification_INFO_CTF_FLAGRETURN_DROPPED_RED</item>\n    <item>notification_INFO_CTF_FLAGRETURN_NEEDKILL_BLUE</item>\n    <item>notification_INFO_CTF_FLAGRETURN_NEEDKILL_RED</item>\n    <item>notification_INFO_CTF_FLAGRETURN_SPEEDRUN_BLUE</item>\n    <item>notification_INFO_CTF_FLAGRETURN_SPEEDRUN_RED</item>\n    <item>notification_INFO_CTF_FLAGRETURN_TIMEOUT_BLUE</item>\n    <item>notification_INFO_CTF_FLAGRETURN_TIMEOUT_RED</item>\n    <item>notification_INFO_CTF_LOST_BLUE</item>\n    <item>notification_INFO_CTF_LOST_RED</item>\n    <item>notification_INFO_CTF_PICKUP_BLUE</item>\n    <item>notification_INFO_CTF_PICKUP_RED</item>\n    <item>notification_INFO_CTF_RETURN_BLUE</item>\n    <item>notification_INFO_CTF_RETURN_RED</item>\n    <item>notification_INFO_DEATH_MURDER_CHEAT</item>\n    <item>notification_INFO_DEATH_MURDER_DROWN</item>\n    <item>notification_INFO_DEATH_MURDER_FALL</item>\n    <item>notification_INFO_DEATH_MURDER_FIRE</item>\n    <item>notification_INFO_DEATH_MURDER_LAVA</item>\n    <item>notification_INFO_DEATH_MURDER_SHOOTING_STAR</item>\n    <item>notification_INFO_DEATH_MURDER_SLIME</item>\n    <item>notification_INFO_DEATH_MURDER_SWAMP</item>\n    <item>notification_INFO_DEATH_MURDER_TELEFRAG</item>\n    <item>notification_INFO_DEATH_MURDER_TOUCHEXPLODE</item>\n    <item>notification_INFO_DEATH_MURDER_VH_BUMB_DEATH</item>\n    <item>notification_INFO_DEATH_MURDER_VH_BUMB_GUN</item>\n    <item>notification_INFO_DEATH_MURDER_VH_CRUSH</item>\n    <item>notification_INFO_DEATH_MURDER_VH_RAPT_BOMB</item>\n    <item>notification_INFO_DEATH_MURDER_VH_RAPT_CANNON</item>\n    <item>notification_INFO_DEATH_MURDER_VH_RAPT_DEATH</item>\n    <item>notification_INFO_DEATH_MURDER_VH_SPID_DEATH</item>\n    <item>notification_INFO_DEATH_MURDER_VH_SPID_MINIGUN</item>\n    <item>notification_INFO_DEATH_MURDER_VH_SPID_ROCKET</item>\n    <item>notification_INFO_DEATH_MURDER_VH_WAKI_DEATH</item>\n    <item>notification_INFO_DEATH_MURDER_VH_WAKI_GUN</item>\n    <item>notification_INFO_DEATH_MURDER_VH_WAKI_ROCKET</item>\n    <item>notification_INFO_DEATH_MURDER_VOID</item>\n    <item>notification_INFO_DEATH_SELF_AUTOTEAMCHANGE</item>\n    <item>notification_INFO_DEATH_SELF_BETRAYAL</item>\n    <item>notification_INFO_DEATH_SELF_CAMP</item>\n    <item>notification_INFO_DEATH_SELF_CHEAT</item>\n    <item>notification_INFO_DEATH_SELF_CUSTOM</item>\n    <item>notification_INFO_DEATH_SELF_DROWN</item>\n    <item>notification_INFO_DEATH_SELF_FALL</item>\n    <item>notification_INFO_DEATH_SELF_FIRE</item>\n    <item>notification_INFO_DEATH_SELF_GENERIC</item>\n    <item>notification_INFO_DEATH_SELF_LAVA</item>\n    <item>notification_INFO_DEATH_SELF_NOAMMO</item>\n    <item>notification_INFO_DEATH_SELF_ROT</item>\n    <item>notification_INFO_DEATH_SELF_SHOOTING_STAR</item>\n    <item>notification_INFO_DEATH_SELF_SLIME</item>\n    <item>notification_INFO_DEATH_SELF_SUICIDE</item>\n    <item>notification_INFO_DEATH_SELF_SWAMP</item>\n    <item>notification_INFO_DEATH_SELF_TEAMCHANGE</item>\n    <item>notification_INFO_DEATH_SELF_TOUCHEXPLODE</item>\n    <item>notification_INFO_DEATH_SELF_TURRET</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_EWHEEL</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_FLAC</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_HELLION</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_HK</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_MACHINEGUN</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_MLRS</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_PHASER</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_PLASMA</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_TESLA</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_WALK_GUN</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_WALK_MEELE</item>\n    <item>notification_INFO_DEATH_SELF_TURRET_WALK_ROCKET</item>\n    <item>notification_INFO_DEATH_SELF_VH_BUMB_DEATH</item>\n    <item>notification_INFO_DEATH_SELF_VH_CRUSH</item>\n    <item>notification_INFO_DEATH_SELF_VH_RAPT_BOMB</item>\n    <item>notification_INFO_DEATH_SELF_VH_RAPT_DEATH</item>\n    <item>notification_INFO_DEATH_SELF_VH_SPID_DEATH</item>\n    <item>notification_INFO_DEATH_SELF_VH_SPID_ROCKET</item>\n    <item>notification_INFO_DEATH_SELF_VH_WAKI_DEATH</item>\n    <item>notification_INFO_DEATH_SELF_VH_WAKI_ROCKET</item>\n    <item>notification_INFO_DEATH_SELF_VOID</item>\n    <item>notification_INFO_DEATH_TEAMKILL_BLUE</item>\n    <item>notification_INFO_DEATH_TEAMKILL_PINK</item>\n    <item>notification_INFO_DEATH_TEAMKILL_RED</item>\n    <item>notification_INFO_DEATH_TEAMKILL_YELLOW</item>\n    <item>notification_INFO_FREEZETAG_FREEZE</item>\n    <item>notification_INFO_FREEZETAG_REVIVE</item>\n    <item>notification_INFO_FREEZETAG_ROUND_WIN_BLUE</item>\n    <item>notification_INFO_FREEZETAG_ROUND_WIN_PINK</item>\n    <item>notification_INFO_FREEZETAG_ROUND_WIN_RED</item>\n    <item>notification_INFO_FREEZETAG_ROUND_WIN_YELLOW</item>\n    <item>notification_INFO_FREEZETAG_SELF</item>\n    <item>notification_INFO_GODMODE_OFF</item>\n    <item>notification_INFO_ITEM_WEAPON_DONTHAVE</item>\n    <item>notification_INFO_ITEM_WEAPON_DROP</item>\n    <item>notification_INFO_ITEM_WEAPON_GOT</item>\n    <item>notification_INFO_ITEM_WEAPON_NOAMMO</item>\n    <item>notification_INFO_ITEM_WEAPON_PRIMORSEC</item>\n    <item>notification_INFO_ITEM_WEAPON_UNAVAILABLE</item>\n    <item>notification_INFO_JOIN_CONNECT</item>\n    <item>notification_INFO_JOIN_CONNECT_TEAM_BLUE</item>\n    <item>notification_INFO_JOIN_CONNECT_TEAM_PINK</item>\n    <item>notification_INFO_JOIN_CONNECT_TEAM_RED</item>\n    <item>notification_INFO_JOIN_CONNECT_TEAM_YELLOW</item>\n    <item>notification_INFO_JOIN_PLAY</item>\n    <item>notification_INFO_KEEPAWAY_DROPPED</item>\n    <item>notification_INFO_KEEPAWAY_PICKUP</item>\n    <item>notification_INFO_KEYHUNT_CAPTURE_BLUE</item>\n    <item>notification_INFO_KEYHUNT_CAPTURE_PINK</item>\n    <item>notification_INFO_KEYHUNT_CAPTURE_RED</item>\n    <item>notification_INFO_KEYHUNT_CAPTURE_YELLOW</item>\n    <item>notification_INFO_KEYHUNT_DROP_BLUE</item>\n    <item>notification_INFO_KEYHUNT_DROP_PINK</item>\n    <item>notification_INFO_KEYHUNT_DROP_RED</item>\n    <item>notification_INFO_KEYHUNT_DROP_YELLOW</item>\n    <item>notification_INFO_KEYHUNT_LOST_BLUE</item>\n    <item>notification_INFO_KEYHUNT_LOST_PINK</item>\n    <item>notification_INFO_KEYHUNT_LOST_RED</item>\n    <item>notification_INFO_KEYHUNT_LOST_YELLOW</item>\n    <item>notification_INFO_KEYHUNT_PICKUP_BLUE</item>\n    <item>notification_INFO_KEYHUNT_PICKUP_PINK</item>\n    <item>notification_INFO_KEYHUNT_PICKUP_RED</item>\n    <item>notification_INFO_KEYHUNT_PICKUP_YELLOW</item>\n    <item>notification_INFO_LMS_FORFEIT</item>\n    <item>notification_INFO_LMS_NOLIVES</item>\n    <item>notification_INFO_POWERUP_INVISIBILITY</item>\n    <item>notification_INFO_POWERUP_SHIELD</item>\n    <item>notification_INFO_POWERUP_SPEED</item>\n    <item>notification_INFO_POWERUP_STRENGTH</item>\n    <item>notification_INFO_QUIT_DISCONNECT</item>\n    <item>notification_INFO_QUIT_KICK_IDLING</item>\n    <item>notification_INFO_QUIT_KICK_SPECTATING</item>\n    <item>notification_INFO_QUIT_SPECTATE</item>\n    <item>notification_INFO_RACE_ABANDONED</item>\n    <item>notification_INFO_RACE_FAIL_RANKED</item>\n    <item>notification_INFO_RACE_FAIL_UNRANKED</item>\n    <item>notification_INFO_RACE_FINISHED</item>\n    <item>notification_INFO_RACE_NEW_BROKEN</item>\n    <item>notification_INFO_RACE_NEW_IMPROVED</item>\n    <item>notification_INFO_RACE_NEW_MISSING_UID</item>\n    <item>notification_INFO_RACE_NEW_SET</item>\n    <item>notification_INFO_SCORES_BLUE</item>\n    <item>notification_INFO_SCORES_PINK</item>\n    <item>notification_INFO_SCORES_RED</item>\n    <item>notification_INFO_SCORES_YELLOW</item>\n    <item>notification_INFO_SPECTATE_WARNING</item>\n    <item>notification_INFO_SUPERWEAPON_PICKUP</item>\n    <item>notification_INFO_VERSION_BETA</item>\n    <item>notification_INFO_VERSION_OLD</item>\n    <item>notification_INFO_VERSION_OUTDATED</item>\n    <item>notification_INFO_WATERMARK</item>\n    <item>notification_INFO_WEAPON_ACCORDEON_MURDER</item>\n    <item>notification_INFO_WEAPON_ACCORDEON_SUICIDE</item>\n    <item>notification_INFO_WEAPON_CRYLINK_MURDER</item>\n    <item>notification_INFO_WEAPON_CRYLINK_SUICIDE</item>\n    <item>notification_INFO_WEAPON_ELECTRO_MURDER_BOLT</item>\n    <item>notification_INFO_WEAPON_ELECTRO_MURDER_COMBO</item>\n    <item>notification_INFO_WEAPON_ELECTRO_MURDER_ORBS</item>\n    <item>notification_INFO_WEAPON_ELECTRO_SUICIDE_BOLT</item>\n    <item>notification_INFO_WEAPON_ELECTRO_SUICIDE_ORBS</item>\n    <item>notification_INFO_WEAPON_FIREBALL_MURDER_BLAST</item>\n    <item>notification_INFO_WEAPON_FIREBALL_MURDER_FIREMINE</item>\n    <item>notification_INFO_WEAPON_FIREBALL_SUICIDE_BLAST</item>\n    <item>notification_INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE</item>\n    <item>notification_INFO_WEAPON_HAGAR_MURDER_BURST</item>\n    <item>notification_INFO_WEAPON_HAGAR_MURDER_SPRAY</item>\n    <item>notification_INFO_WEAPON_HAGAR_SUICIDE</item>\n    <item>notification_INFO_WEAPON_HLAC_MURDER</item>\n    <item>notification_INFO_WEAPON_HLAC_SUICIDE</item>\n    <item>notification_INFO_WEAPON_HOOK_MURDER</item>\n    <item>notification_INFO_WEAPON_KLEINBOTTLE_MURDER</item>\n    <item>notification_INFO_WEAPON_KLEINBOTTLE_SUICIDE</item>\n    <item>notification_INFO_WEAPON_LASER_MURDER</item>\n    <item>notification_INFO_WEAPON_LASER_SUICIDE</item>\n    <item>notification_INFO_WEAPON_MINELAYER_MURDER</item>\n    <item>notification_INFO_WEAPON_MINELAYER_SUICIDE</item>\n    <item>notification_INFO_WEAPON_MINSTANEX_MURDER</item>\n    <item>notification_INFO_WEAPON_MORTAR_MURDER_BOUNCE</item>\n    <item>notification_INFO_WEAPON_MORTAR_MURDER_EXPLODE</item>\n    <item>notification_INFO_WEAPON_MORTAR_SUICIDE_BOUNCE</item>\n    <item>notification_INFO_WEAPON_MORTAR_SUICIDE_EXPLODE</item>\n    <item>notification_INFO_WEAPON_NEX_MURDER</item>\n    <item>notification_INFO_WEAPON_RIFLE_MURDER</item>\n    <item>notification_INFO_WEAPON_RIFLE_MURDER_HAIL</item>\n    <item>notification_INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING</item>\n    <item>notification_INFO_WEAPON_RIFLE_MURDER_PIERCING</item>\n    <item>notification_INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT</item>\n    <item>notification_INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH</item>\n    <item>notification_INFO_WEAPON_ROCKETLAUNCHER_SUICIDE</item>\n    <item>notification_INFO_WEAPON_SEEKER_MURDER_SPRAY</item>\n    <item>notification_INFO_WEAPON_SEEKER_MURDER_TAG</item>\n    <item>notification_INFO_WEAPON_SEEKER_SUICIDE</item>\n    <item>notification_INFO_WEAPON_SHOTGUN_MURDER</item>\n    <item>notification_INFO_WEAPON_SHOTGUN_MURDER_SLAP</item>\n    <item>notification_INFO_WEAPON_THINKING_WITH_PORTALS</item>\n    <item>notification_INFO_WEAPON_TUBA_MURDER</item>\n    <item>notification_INFO_WEAPON_TUBA_SUICIDE</item>\n    <item>notification_INFO_WEAPON_UZI_MURDER_SNIPE</item>\n    <item>notification_INFO_WEAPON_UZI_MURDER_SPRAY</item>\n    <item>notification_ITEM_WEAPON_DONTHAVE</item>\n    <item>notification_ITEM_WEAPON_DROP</item>\n    <item>notification_ITEM_WEAPON_GOT</item>\n    <item>notification_ITEM_WEAPON_NOAMMO</item>\n    <item>notification_ITEM_WEAPON_PRIMORSEC</item>\n    <item>notification_ITEM_WEAPON_UNAVAILABLE</item>\n    <item>notification_MULTI_ARENA_BEGIN</item>\n    <item>notification_MULTI_COUNTDOWN_BEGIN</item>\n    <item>notification_MULTI_MINSTA_FINDAMMO</item>\n    <item>notification_WEAPON_ACCORDEON_MURDER</item>\n    <item>notification_WEAPON_ACCORDEON_SUICIDE</item>\n    <item>notification_WEAPON_CRYLINK_MURDER</item>\n    <item>notification_WEAPON_CRYLINK_SUICIDE</item>\n    <item>notification_WEAPON_ELECTRO_MURDER_BOLT</item>\n    <item>notification_WEAPON_ELECTRO_MURDER_COMBO</item>\n    <item>notification_WEAPON_ELECTRO_MURDER_ORBS</item>\n    <item>notification_WEAPON_ELECTRO_SUICIDE_BOLT</item>\n    <item>notification_WEAPON_ELECTRO_SUICIDE_ORBS</item>\n    <item>notification_WEAPON_FIREBALL_MURDER_BLAST</item>\n    <item>notification_WEAPON_FIREBALL_MURDER_FIREMINE</item>\n    <item>notification_WEAPON_FIREBALL_SUICIDE_BLAST</item>\n    <item>notification_WEAPON_FIREBALL_SUICIDE_FIREMINE</item>\n    <item>notification_WEAPON_HAGAR_MURDER_BURST</item>\n    <item>notification_WEAPON_HAGAR_MURDER_SPRAY</item>\n    <item>notification_WEAPON_HAGAR_SUICIDE</item>\n    <item>notification_WEAPON_HLAC_MURDER</item>\n    <item>notification_WEAPON_HLAC_SUICIDE</item>\n    <item>notification_WEAPON_HOOK_MURDER</item>\n    <item>notification_WEAPON_KLEINBOTTLE_MURDER</item>\n    <item>notification_WEAPON_KLEINBOTTLE_SUICIDE</item>\n    <item>notification_WEAPON_LASER_MURDER</item>\n    <item>notification_WEAPON_LASER_SUICIDE</item>\n    <item>notification_WEAPON_MINELAYER_MURDER</item>\n    <item>notification_WEAPON_MINELAYER_SUICIDE</item>\n    <item>notification_WEAPON_MINSTANEX_MURDER</item>\n    <item>notification_WEAPON_MORTAR_MURDER_BOUNCE</item>\n    <item>notification_WEAPON_MORTAR_MURDER_EXPLODE</item>\n    <item>notification_WEAPON_MORTAR_SUICIDE_BOUNCE</item>\n    <item>notification_WEAPON_MORTAR_SUICIDE_EXPLODE</item>\n    <item>notification_WEAPON_NEX_MURDER</item>\n    <item>notification_WEAPON_RIFLE_MURDER</item>\n    <item>notification_WEAPON_RIFLE_MURDER_HAIL</item>\n    <item>notification_WEAPON_RIFLE_MURDER_HAIL_PIERCING</item>\n    <item>notification_WEAPON_RIFLE_MURDER_PIERCING</item>\n    <item>notification_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT</item>\n    <item>notification_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH</item>\n    <item>notification_WEAPON_ROCKETLAUNCHER_SUICIDE</item>\n    <item>notification_WEAPON_SEEKER_MURDER_SPRAY</item>\n    <item>notification_WEAPON_SEEKER_MURDER_TAG</item>\n    <item>notification_WEAPON_SEEKER_SUICIDE</item>\n    <item>notification_WEAPON_SHOTGUN_MURDER</item>\n    <item>notification_WEAPON_SHOTGUN_MURDER_SLAP</item>\n    <item>notification_WEAPON_THINKING_WITH_PORTALS</item>\n    <item>notification_WEAPON_TUBA_MURDER</item>\n    <item>notification_WEAPON_TUBA_SUICIDE</item>\n    <item>notification_WEAPON_UZI_MURDER_SNIPE</item>\n    <item>notification_WEAPON_UZI_MURDER_SPRAY</item>\n    <item>notification_allow_chatboxprint</item>\n    <item>notification_ctf_capture_verbose</item>\n    <item>notification_ctf_pickup_enemy_verbose</item>\n    <item>notification_ctf_pickup_team_verbose</item>\n    <item>notification_debug</item>\n    <item>notification_errors_are_fatal</item>\n    <item>notification_frag_verbose</item>\n    <item>notification_item_centerprinttime</item>\n    <item>notification_lifetime_mapload</item>\n    <item>notification_lifetime_runtime</item>\n    <item>notification_server_allows_frag_verbose</item>\n    <item>notification_server_allows_location</item>\n    <item>notification_show_location</item>\n    <item>notification_show_location_string</item>\n    <item>notification_show_sprees</item>\n    <item>notification_show_sprees_center</item>\n    <item>notification_show_sprees_center_specialonly</item>\n    <item>notification_show_sprees_info</item>\n    <item>notification_show_sprees_info_newline</item>\n    <item>notification_show_sprees_info_specialonly</item>\n    <item>pausable</item>\n    <item>physics_ode</item>\n    <item>physics_ode_allowconvex</item>\n    <item>physics_ode_autodisable</item>\n    <item>physics_ode_autodisable_steps</item>\n    <item>physics_ode_autodisable_threshold_angular</item>\n    <item>physics_ode_autodisable_threshold_linear</item>\n    <item>physics_ode_autodisable_threshold_samples</item>\n    <item>physics_ode_autodisable_time</item>\n    <item>physics_ode_constantstep</item>\n    <item>physics_ode_contact_cfm</item>\n    <item>physics_ode_contact_erp</item>\n    <item>physics_ode_contact_maxpoints</item>\n    <item>physics_ode_contact_mu</item>\n    <item>physics_ode_contactsurfacelayer</item>\n    <item>physics_ode_iterationsperframe</item>\n    <item>physics_ode_movelimit</item>\n    <item>physics_ode_printstats</item>\n    <item>physics_ode_quadtree_depth</item>\n    <item>physics_ode_spinlimit</item>\n    <item>physics_ode_trick_fixnan</item>\n    <item>physics_ode_world_cfm</item>\n    <item>physics_ode_world_damping</item>\n    <item>physics_ode_world_damping_angular</item>\n    <item>physics_ode_world_damping_angular_threshold</item>\n    <item>physics_ode_world_damping_linear</item>\n    <item>physics_ode_world_damping_linear_threshold</item>\n    <item>physics_ode_world_erp</item>\n    <item>physics_ode_world_gravitymod</item>\n    <item>physics_ode_worldstep_iterations</item>\n    <item>port</item>\n    <item>pr_checkextension</item>\n    <item>prvm_backtraceforwarnings</item>\n    <item>prvm_breakpointdump</item>\n    <item>prvm_errordump</item>\n    <item>prvm_language</item>\n    <item>prvm_leaktest</item>\n    <item>prvm_leaktest_ignore_classnames</item>\n    <item>prvm_reuseedicts_neverinsameframe</item>\n    <item>prvm_reuseedicts_startuptime</item>\n    <item>prvm_statementprofiling</item>\n    <item>prvm_timeprofiling</item>\n    <item>prvm_traceqc</item>\n    <item>qport</item>\n    <item>quit_and_redirect</item>\n    <item>quit_and_redirect_timer</item>\n    <item>quit_when_empty</item>\n    <item>r_ambient</item>\n    <item>r_batch_debugdynamicvertexpath</item>\n    <item>r_batch_dynamicbuffer</item>\n    <item>r_batch_multidraw</item>\n    <item>r_batch_multidraw_mintriangles</item>\n    <item>r_bloom</item>\n    <item>r_bloom_blur</item>\n    <item>r_bloom_brighten</item>\n    <item>r_bloom_colorexponent</item>\n    <item>r_bloom_colorscale</item>\n    <item>r_bloom_colorsubtract</item>\n    <item>r_bloom_resolution</item>\n    <item>r_bloom_scenebrightness</item>\n    <item>r_bufferdatasize_index16</item>\n    <item>r_bufferdatasize_index32</item>\n    <item>r_bufferdatasize_uniform</item>\n    <item>r_bufferdatasize_vertex</item>\n    <item>r_celoutlines</item>\n    <item>r_celshading</item>\n    <item>r_colormap_palette</item>\n    <item>r_coronas</item>\n    <item>r_coronas_occlusionquery</item>\n    <item>r_coronas_occlusionsizescale</item>\n    <item>r_cullentities_trace</item>\n    <item>r_cullentities_trace_delay</item>\n    <item>r_cullentities_trace_enlarge</item>\n    <item>r_cullentities_trace_samples</item>\n    <item>r_cullentities_trace_tempentitysamples</item>\n    <item>r_damageblur</item>\n    <item>r_deformvertexes</item>\n    <item>r_depthfirst</item>\n    <item>r_draw2d</item>\n    <item>r_drawdecals</item>\n    <item>r_drawdecals_drawdistance</item>\n    <item>r_draweffects</item>\n    <item>r_drawentities</item>\n    <item>r_drawexplosions</item>\n    <item>r_drawexteriormodel</item>\n    <item>r_drawfog</item>\n    <item>r_drawparticles</item>\n    <item>r_drawparticles_drawdistance</item>\n    <item>r_drawparticles_nearclip_max</item>\n    <item>r_drawparticles_nearclip_min</item>\n    <item>r_drawportals</item>\n    <item>r_drawviewmodel</item>\n    <item>r_drawworld</item>\n    <item>r_dynamic</item>\n    <item>r_editlights</item>\n    <item>r_editlights_current_ambient</item>\n    <item>r_editlights_current_angles</item>\n    <item>r_editlights_current_color</item>\n    <item>r_editlights_current_corona</item>\n    <item>r_editlights_current_coronasize</item>\n    <item>r_editlights_current_cubemap</item>\n    <item>r_editlights_current_diffuse</item>\n    <item>r_editlights_current_normalmode</item>\n    <item>r_editlights_current_origin</item>\n    <item>r_editlights_current_radius</item>\n    <item>r_editlights_current_realtimemode</item>\n    <item>r_editlights_current_shadows</item>\n    <item>r_editlights_current_specular</item>\n    <item>r_editlights_current_style</item>\n    <item>r_editlights_cursordistance</item>\n    <item>r_editlights_cursorgrid</item>\n    <item>r_editlights_cursorpushback</item>\n    <item>r_editlights_cursorpushoff</item>\n    <item>r_editlights_drawproperties</item>\n    <item>r_editlights_quakelightsizescale</item>\n    <item>r_enableshadowvolumes</item>\n    <item>r_equalize_entities_by</item>\n    <item>r_equalize_entities_fullbright</item>\n    <item>r_equalize_entities_minambient</item>\n    <item>r_equalize_entities_to</item>\n    <item>r_explosionclip</item>\n    <item>r_fakelight</item>\n    <item>r_fakelight_intensity</item>\n    <item>r_farclip_base</item>\n    <item>r_farclip_world</item>\n    <item>r_fixtrans_auto</item>\n    <item>r_fog_clear</item>\n    <item>r_fog_exp2</item>\n    <item>r_font_antialias</item>\n    <item>r_font_compress</item>\n    <item>r_font_disable_freetype</item>\n    <item>r_font_diskcache</item>\n    <item>r_font_hinting</item>\n    <item>r_font_kerning</item>\n    <item>r_font_nonpoweroftwo</item>\n    <item>r_font_postprocess_blur</item>\n    <item>r_font_postprocess_outline</item>\n    <item>r_font_postprocess_shadow_x</item>\n    <item>r_font_postprocess_shadow_y</item>\n    <item>r_font_postprocess_shadow_z</item>\n    <item>r_font_size_snapping</item>\n    <item>r_font_use_alpha_textures</item>\n    <item>r_framedatasize</item>\n    <item>r_fullbright</item>\n    <item>r_fullbrights</item>\n    <item>r_glsl</item>\n    <item>r_glsl_deluxemapping</item>\n    <item>r_glsl_offsetmapping</item>\n    <item>r_glsl_offsetmapping_lod</item>\n    <item>r_glsl_offsetmapping_lod_distance</item>\n    <item>r_glsl_offsetmapping_reliefmapping</item>\n    <item>r_glsl_offsetmapping_reliefmapping_refinesteps</item>\n    <item>r_glsl_offsetmapping_reliefmapping_steps</item>\n    <item>r_glsl_offsetmapping_scale</item>\n    <item>r_glsl_offsetmapping_steps</item>\n    <item>r_glsl_postprocess</item>\n    <item>r_glsl_postprocess_uservec1</item>\n    <item>r_glsl_postprocess_uservec1_enable</item>\n    <item>r_glsl_postprocess_uservec2</item>\n    <item>r_glsl_postprocess_uservec2_enable</item>\n    <item>r_glsl_postprocess_uservec3</item>\n    <item>r_glsl_postprocess_uservec3_enable</item>\n    <item>r_glsl_postprocess_uservec4</item>\n    <item>r_glsl_postprocess_uservec4_enable</item>\n    <item>r_glsl_saturation</item>\n    <item>r_glsl_saturation_redcompensate</item>\n    <item>r_glsl_skeletal</item>\n    <item>r_glsl_vertextextureblend_usebothalphas</item>\n    <item>r_hdr_glowintensity</item>\n    <item>r_hdr_irisadaptation</item>\n    <item>r_hdr_irisadaptation_fade_down</item>\n    <item>r_hdr_irisadaptation_fade_up</item>\n    <item>r_hdr_irisadaptation_maxvalue</item>\n    <item>r_hdr_irisadaptation_minvalue</item>\n    <item>r_hdr_irisadaptation_multiplier</item>\n    <item>r_hdr_irisadaptation_radius</item>\n    <item>r_hdr_irisadaptation_value</item>\n    <item>r_hdr_scenebrightness</item>\n    <item>r_labelsprites_roundtopixels</item>\n    <item>r_labelsprites_scale</item>\n    <item>r_lerpimages</item>\n    <item>r_lerplightstyles</item>\n    <item>r_lerpmodels</item>\n    <item>r_lerpsprites</item>\n    <item>r_letterbox</item>\n    <item>r_lightningbeam_color_blue</item>\n    <item>r_lightningbeam_color_green</item>\n    <item>r_lightningbeam_color_red</item>\n    <item>r_lightningbeam_qmbtexture</item>\n    <item>r_lightningbeam_repeatdistance</item>\n    <item>r_lightningbeam_scroll</item>\n    <item>r_lightningbeam_thickness</item>\n    <item>r_lockpvs</item>\n    <item>r_lockvisibility</item>\n    <item>r_mipnormalmaps</item>\n    <item>r_mipskins</item>\n    <item>r_mipsprites</item>\n    <item>r_motionblur</item>\n    <item>r_motionblur_averaging</item>\n    <item>r_motionblur_maxblur</item>\n    <item>r_motionblur_minblur</item>\n    <item>r_motionblur_mousefactor</item>\n    <item>r_motionblur_mousefactor_maxspeed</item>\n    <item>r_motionblur_mousefactor_minspeed</item>\n    <item>r_motionblur_randomize</item>\n    <item>r_motionblur_velocityfactor</item>\n    <item>r_motionblur_velocityfactor_maxspeed</item>\n    <item>r_motionblur_velocityfactor_minspeed</item>\n    <item>r_nearclip</item>\n    <item>r_nearest_2d</item>\n    <item>r_nearest_conchars</item>\n    <item>r_nosurftextures</item>\n    <item>r_novis</item>\n    <item>r_overheadsprites_perspective</item>\n    <item>r_overheadsprites_pushback</item>\n    <item>r_overheadsprites_scalex</item>\n    <item>r_overheadsprites_scaley</item>\n    <item>r_picmipsprites</item>\n    <item>r_picmipworld</item>\n    <item>r_polygonoffset_decals_factor</item>\n    <item>r_polygonoffset_decals_offset</item>\n    <item>r_polygonoffset_submodel_factor</item>\n    <item>r_polygonoffset_submodel_offset</item>\n    <item>r_q1bsp_skymasking</item>\n    <item>r_q3bsp_renderskydepth</item>\n    <item>r_render</item>\n    <item>r_renderview</item>\n    <item>r_shadow_bouncegrid</item>\n    <item>r_shadow_bouncegrid_bounceanglediffuse</item>\n    <item>r_shadow_bouncegrid_directionalshading</item>\n    <item>r_shadow_bouncegrid_dlightparticlemultiplier</item>\n    <item>r_shadow_bouncegrid_hitmodels</item>\n    <item>r_shadow_bouncegrid_includedirectlighting</item>\n    <item>r_shadow_bouncegrid_intensity</item>\n    <item>r_shadow_bouncegrid_lightradiusscale</item>\n    <item>r_shadow_bouncegrid_maxbounce</item>\n    <item>r_shadow_bouncegrid_particlebounceintensity</item>\n    <item>r_shadow_bouncegrid_particleintensity</item>\n    <item>r_shadow_bouncegrid_photons</item>\n    <item>r_shadow_bouncegrid_spacing</item>\n    <item>r_shadow_bouncegrid_stablerandom</item>\n    <item>r_shadow_bouncegrid_static</item>\n    <item>r_shadow_bouncegrid_static_directionalshading</item>\n    <item>r_shadow_bouncegrid_static_lightradiusscale</item>\n    <item>r_shadow_bouncegrid_static_maxbounce</item>\n    <item>r_shadow_bouncegrid_static_photons</item>\n    <item>r_shadow_bouncegrid_updateinterval</item>\n    <item>r_shadow_bouncegrid_x</item>\n    <item>r_shadow_bouncegrid_y</item>\n    <item>r_shadow_bouncegrid_z</item>\n    <item>r_shadow_bumpscale_basetexture</item>\n    <item>r_shadow_bumpscale_bumpmap</item>\n    <item>r_shadow_debuglight</item>\n    <item>r_shadow_deferred</item>\n    <item>r_shadow_frontsidecasting</item>\n    <item>r_shadow_gloss</item>\n    <item>r_shadow_gloss2exponent</item>\n    <item>r_shadow_gloss2intensity</item>\n    <item>r_shadow_glossexact</item>\n    <item>r_shadow_glossexponent</item>\n    <item>r_shadow_glossintensity</item>\n    <item>r_shadow_lightattenuationdividebias</item>\n    <item>r_shadow_lightattenuationlinearscale</item>\n    <item>r_shadow_lightintensityscale</item>\n    <item>r_shadow_lightradiusscale</item>\n    <item>r_shadow_polygonfactor</item>\n    <item>r_shadow_polygonoffset</item>\n    <item>r_shadow_projectdistance</item>\n    <item>r_shadow_realtime_dlight</item>\n    <item>r_shadow_realtime_dlight_portalculling</item>\n    <item>r_shadow_realtime_dlight_shadows</item>\n    <item>r_shadow_realtime_dlight_svbspculling</item>\n    <item>r_shadow_realtime_world</item>\n    <item>r_shadow_realtime_world_compile</item>\n    <item>r_shadow_realtime_world_compileportalculling</item>\n    <item>r_shadow_realtime_world_compileshadow</item>\n    <item>r_shadow_realtime_world_compilesvbsp</item>\n    <item>r_shadow_realtime_world_lightmaps</item>\n    <item>r_shadow_realtime_world_shadows</item>\n    <item>r_shadow_scissor</item>\n    <item>r_shadow_shadowmapping</item>\n    <item>r_shadow_shadowmapping_bias</item>\n    <item>r_shadow_shadowmapping_bordersize</item>\n    <item>r_shadow_shadowmapping_depthbits</item>\n    <item>r_shadow_shadowmapping_filterquality</item>\n    <item>r_shadow_shadowmapping_maxsize</item>\n    <item>r_shadow_shadowmapping_minsize</item>\n    <item>r_shadow_shadowmapping_nearclip</item>\n    <item>r_shadow_shadowmapping_polygonfactor</item>\n    <item>r_shadow_shadowmapping_polygonoffset</item>\n    <item>r_shadow_shadowmapping_precision</item>\n    <item>r_shadow_shadowmapping_useshadowsampler</item>\n    <item>r_shadow_shadowmapping_vsdct</item>\n    <item>r_shadow_sortsurfaces</item>\n    <item>r_shadow_texture3d</item>\n    <item>r_shadow_usebihculling</item>\n    <item>r_shadow_usenormalmap</item>\n    <item>r_shadows</item>\n    <item>r_shadows_castfrombmodels</item>\n    <item>r_shadows_darken</item>\n    <item>r_shadows_drawafterrtlighting</item>\n    <item>r_shadows_focus</item>\n    <item>r_shadows_shadowmapbias</item>\n    <item>r_shadows_shadowmapscale</item>\n    <item>r_shadows_throwdirection</item>\n    <item>r_shadows_throwdistance</item>\n    <item>r_showbboxes</item>\n    <item>r_showcollisionbrushes</item>\n    <item>r_showcollisionbrushes_polygonfactor</item>\n    <item>r_showcollisionbrushes_polygonoffset</item>\n    <item>r_showdisabledepthtest</item>\n    <item>r_showlighting</item>\n    <item>r_shownormals</item>\n    <item>r_showoverdraw</item>\n    <item>r_showshadowvolumes</item>\n    <item>r_showsurfaces</item>\n    <item>r_showtris</item>\n    <item>r_skeletal_debugbone</item>\n    <item>r_skeletal_debugbonecomponent</item>\n    <item>r_skeletal_debugbonevalue</item>\n    <item>r_skeletal_debugtranslatex</item>\n    <item>r_skeletal_debugtranslatey</item>\n    <item>r_skeletal_debugtranslatez</item>\n    <item>r_skeletal_use_sse</item>\n    <item>r_sky</item>\n    <item>r_skyscroll1</item>\n    <item>r_skyscroll2</item>\n    <item>r_smoothnormals_areaweighting</item>\n    <item>r_sortentities</item>\n    <item>r_speeds</item>\n    <item>r_speeds_graph</item>\n    <item>r_speeds_graph_filter_b</item>\n    <item>r_speeds_graph_filter_c</item>\n    <item>r_speeds_graph_filter_g</item>\n    <item>r_speeds_graph_filter_m</item>\n    <item>r_speeds_graph_filter_o</item>\n    <item>r_speeds_graph_filter_r</item>\n    <item>r_speeds_graph_filter_w</item>\n    <item>r_speeds_graph_filter_y</item>\n    <item>r_speeds_graph_height</item>\n    <item>r_speeds_graph_length</item>\n    <item>r_speeds_graph_seconds</item>\n    <item>r_speeds_graph_width</item>\n    <item>r_speeds_graph_x</item>\n    <item>r_speeds_graph_y</item>\n    <item>r_stereo_angle</item>\n    <item>r_stereo_horizontal</item>\n    <item>r_stereo_redblue</item>\n    <item>r_stereo_redcyan</item>\n    <item>r_stereo_redgreen</item>\n    <item>r_stereo_separation</item>\n    <item>r_stereo_sidebyside</item>\n    <item>r_stereo_vertical</item>\n    <item>r_subdivisions_collision_maxtess</item>\n    <item>r_subdivisions_collision_maxvertices</item>\n    <item>r_subdivisions_collision_mintess</item>\n    <item>r_subdivisions_collision_tolerance</item>\n    <item>r_subdivisions_maxtess</item>\n    <item>r_subdivisions_maxvertices</item>\n    <item>r_subdivisions_mintess</item>\n    <item>r_subdivisions_tolerance</item>\n    <item>r_test</item>\n    <item>r_textbrightness</item>\n    <item>r_textcontrast</item>\n    <item>r_textshadow</item>\n    <item>r_texture_dds_load</item>\n    <item>r_texture_dds_load_alphamode</item>\n    <item>r_texture_dds_load_logfailure</item>\n    <item>r_texture_dds_save</item>\n    <item>r_texture_dds_swdecode</item>\n    <item>r_texture_jpeg_fastpicmip</item>\n    <item>r_textureunits</item>\n    <item>r_track_sprites</item>\n    <item>r_track_sprites_flags</item>\n    <item>r_track_sprites_scaleh</item>\n    <item>r_track_sprites_scalew</item>\n    <item>r_transparent</item>\n    <item>r_transparent_alphatocoverage</item>\n    <item>r_transparent_sortarraysize</item>\n    <item>r_transparent_sortmaxdist</item>\n    <item>r_transparent_sortmindist</item>\n    <item>r_transparent_sortsurfacesbynearest</item>\n    <item>r_transparent_useplanardistance</item>\n    <item>r_transparentdepthmasking</item>\n    <item>r_trippy</item>\n    <item>r_usedepthtextures</item>\n    <item>r_useinfinitefarclip</item>\n    <item>r_useportalculling</item>\n    <item>r_usesurfaceculling</item>\n    <item>r_viewfbo</item>\n    <item>r_viewscale</item>\n    <item>r_viewscale_fpsscaling</item>\n    <item>r_viewscale_fpsscaling_min</item>\n    <item>r_viewscale_fpsscaling_multiply</item>\n    <item>r_viewscale_fpsscaling_stepmax</item>\n    <item>r_viewscale_fpsscaling_stepsize</item>\n    <item>r_viewscale_fpsscaling_target</item>\n    <item>r_water</item>\n    <item>r_water_clippingplanebias</item>\n    <item>r_water_fbo</item>\n    <item>r_water_hideplayer</item>\n    <item>r_water_lowquality</item>\n    <item>r_water_reflectdistort</item>\n    <item>r_water_refractdistort</item>\n    <item>r_water_resolutionmultiplier</item>\n    <item>r_water_scissormode</item>\n    <item>r_wateralpha</item>\n    <item>r_waterscroll</item>\n    <item>r_waterwarp</item>\n    <item>rcon_address</item>\n    <item>rcon_password</item>\n    <item>rcon_restricted_commands</item>\n    <item>rcon_restricted_password</item>\n    <item>rcon_secure</item>\n    <item>rcon_secure_challengetimeout</item>\n    <item>rcon_secure_maxdiff</item>\n    <item>registered</item>\n    <item>rescan_pending</item>\n    <item>samelevel</item>\n    <item>saved1</item>\n    <item>saved2</item>\n    <item>saved3</item>\n    <item>saved4</item>\n    <item>savedgamecfg</item>\n    <item>sbar_alpha_bg</item>\n    <item>sbar_alpha_fg</item>\n    <item>sbar_flagstatus_pos</item>\n    <item>sbar_flagstatus_right</item>\n    <item>sbar_gametime</item>\n    <item>sbar_hudselector</item>\n    <item>sbar_info_pos</item>\n    <item>sbar_miniscoreboard_size</item>\n    <item>sbar_scorerank</item>\n    <item>scoreboard_accuracy</item>\n    <item>scoreboard_accuracy_border_thickness</item>\n    <item>scoreboard_accuracy_doublerows</item>\n    <item>scoreboard_accuracy_nocolors</item>\n    <item>scoreboard_alpha_bg</item>\n    <item>scoreboard_alpha_fg</item>\n    <item>scoreboard_alpha_name</item>\n    <item>scoreboard_alpha_name_self</item>\n    <item>scoreboard_bg_scale</item>\n    <item>scoreboard_border_thickness</item>\n    <item>scoreboard_color_bg_b</item>\n    <item>scoreboard_color_bg_g</item>\n    <item>scoreboard_color_bg_r</item>\n    <item>scoreboard_color_bg_team</item>\n    <item>scoreboard_columns</item>\n    <item>scoreboard_fadeinspeed</item>\n    <item>scoreboard_fadeoutspeed</item>\n    <item>scoreboard_highlight</item>\n    <item>scoreboard_highlight_alpha</item>\n    <item>scoreboard_highlight_alpha_self</item>\n    <item>scoreboard_offset_left</item>\n    <item>scoreboard_offset_right</item>\n    <item>scoreboard_offset_vertical</item>\n    <item>scoreboard_respawntime_decimals</item>\n    <item>scr_centertime</item>\n    <item>scr_conalpha</item>\n    <item>scr_conalpha2factor</item>\n    <item>scr_conalpha3factor</item>\n    <item>scr_conalphafactor</item>\n    <item>scr_conbrightness</item>\n    <item>scr_conforcewhiledisconnected</item>\n    <item>scr_conscroll2_x</item>\n    <item>scr_conscroll2_y</item>\n    <item>scr_conscroll3_x</item>\n    <item>scr_conscroll3_y</item>\n    <item>scr_conscroll_x</item>\n    <item>scr_conscroll_y</item>\n    <item>scr_infobar_height</item>\n    <item>scr_loadingscreen_background</item>\n    <item>scr_loadingscreen_barcolor</item>\n    <item>scr_loadingscreen_barheight</item>\n    <item>scr_loadingscreen_count</item>\n    <item>scr_loadingscreen_firstforstartup</item>\n    <item>scr_loadingscreen_maxfps</item>\n    <item>scr_loadingscreen_picture</item>\n    <item>scr_loadingscreen_scale</item>\n    <item>scr_loadingscreen_scale_base</item>\n    <item>scr_loadingscreen_scale_limit</item>\n    <item>scr_menuforcewhiledisconnected</item>\n    <item>scr_printspeed</item>\n    <item>scr_refresh</item>\n    <item>scr_screenshot_alpha</item>\n    <item>scr_screenshot_gammaboost</item>\n    <item>scr_screenshot_hwgamma</item>\n    <item>scr_screenshot_jpeg</item>\n    <item>scr_screenshot_jpeg_quality</item>\n    <item>scr_screenshot_name</item>\n    <item>scr_screenshot_name_in_mapdir</item>\n    <item>scr_screenshot_png</item>\n    <item>scr_screenshot_timestamp</item>\n    <item>scr_stipple</item>\n    <item>scratch1</item>\n    <item>scratch2</item>\n    <item>scratch3</item>\n    <item>scratch4</item>\n    <item>sensitivity</item>\n    <item>serverconfig</item>\n    <item>sessionid</item>\n    <item>showblur</item>\n    <item>showbrand</item>\n    <item>showdate</item>\n    <item>showdate_format</item>\n    <item>showfps</item>\n    <item>shownetgraph</item>\n    <item>showpause</item>\n    <item>showram</item>\n    <item>showsound</item>\n    <item>showspeed</item>\n    <item>showtex</item>\n    <item>showtime</item>\n    <item>showtime_format</item>\n    <item>showtopspeed</item>\n    <item>showturtle</item>\n    <item>skill</item>\n    <item>skill_auto</item>\n    <item>skin</item>\n    <item>slowmo</item>\n    <item>snd_attenuation_decibel</item>\n    <item>snd_attenuation_exponent</item>\n    <item>snd_channel0volume</item>\n    <item>snd_channel1volume</item>\n    <item>snd_channel2volume</item>\n    <item>snd_channel3volume</item>\n    <item>snd_channel4volume</item>\n    <item>snd_channel5volume</item>\n    <item>snd_channel6volume</item>\n    <item>snd_channel7volume</item>\n    <item>snd_channel8volume</item>\n    <item>snd_channel9volume</item>\n    <item>snd_channellayout</item>\n    <item>snd_channels</item>\n    <item>snd_csqcchannel0volume</item>\n    <item>snd_csqcchannel1volume</item>\n    <item>snd_csqcchannel2volume</item>\n    <item>snd_csqcchannel3volume</item>\n    <item>snd_csqcchannel4volume</item>\n    <item>snd_csqcchannel5volume</item>\n    <item>snd_csqcchannel6volume</item>\n    <item>snd_csqcchannel7volume</item>\n    <item>snd_entchannel0volume</item>\n    <item>snd_entchannel1volume</item>\n    <item>snd_entchannel2volume</item>\n    <item>snd_entchannel3volume</item>\n    <item>snd_entchannel4volume</item>\n    <item>snd_entchannel5volume</item>\n    <item>snd_entchannel6volume</item>\n    <item>snd_entchannel7volume</item>\n    <item>snd_identicalsoundrandomization_tics</item>\n    <item>snd_identicalsoundrandomization_time</item>\n    <item>snd_initialized</item>\n    <item>snd_maxchannelvolume</item>\n    <item>snd_mutewhenidle</item>\n    <item>snd_noextraupdate</item>\n    <item>snd_playerchannel0volume</item>\n    <item>snd_playerchannel1volume</item>\n    <item>snd_playerchannel2volume</item>\n    <item>snd_playerchannel3volume</item>\n    <item>snd_playerchannel4volume</item>\n    <item>snd_playerchannel5volume</item>\n    <item>snd_playerchannel6volume</item>\n    <item>snd_playerchannel7volume</item>\n    <item>snd_precache</item>\n    <item>snd_show</item>\n    <item>snd_softclip</item>\n    <item>snd_soundradius</item>\n    <item>snd_spatialization_control</item>\n    <item>snd_spatialization_max</item>\n    <item>snd_spatialization_max_radius</item>\n    <item>snd_spatialization_min</item>\n    <item>snd_spatialization_min_radius</item>\n    <item>snd_spatialization_occlusion</item>\n    <item>snd_spatialization_power</item>\n    <item>snd_spatialization_prologic</item>\n    <item>snd_spatialization_prologic_frontangle</item>\n    <item>snd_speed</item>\n    <item>snd_startloopingsounds</item>\n    <item>snd_startnonloopingsounds</item>\n    <item>snd_staticvolume</item>\n    <item>snd_streaming</item>\n    <item>snd_streaming_length</item>\n    <item>snd_swapstereo</item>\n    <item>snd_width</item>\n    <item>snd_worldchannel0volume</item>\n    <item>snd_worldchannel1volume</item>\n    <item>snd_worldchannel2volume</item>\n    <item>snd_worldchannel3volume</item>\n    <item>snd_worldchannel4volume</item>\n    <item>snd_worldchannel5volume</item>\n    <item>snd_worldchannel6volume</item>\n    <item>snd_worldchannel7volume</item>\n    <item>spawn_debug</item>\n    <item>spawn_debugview</item>\n    <item>speedmeter</item>\n    <item>sv_accelerate</item>\n    <item>sv_accuracy_data_send</item>\n    <item>sv_accuracy_data_share</item>\n    <item>sv_adminnick</item>\n    <item>sv_aim</item>\n    <item>sv_airaccel_qw</item>\n    <item>sv_airaccel_qw_stretchfactor</item>\n    <item>sv_airaccel_sideways_friction</item>\n    <item>sv_airaccelerate</item>\n    <item>sv_aircontrol</item>\n    <item>sv_aircontrol_penalty</item>\n    <item>sv_aircontrol_power</item>\n    <item>sv_airspeedlimit_nonqw</item>\n    <item>sv_airstopaccelerate</item>\n    <item>sv_airstrafeaccel_qw</item>\n    <item>sv_airstrafeaccelerate</item>\n    <item>sv_allow_fullbright</item>\n    <item>sv_allowdownloads</item>\n    <item>sv_allowdownloads_archive</item>\n    <item>sv_allowdownloads_config</item>\n    <item>sv_allowdownloads_dlcache</item>\n    <item>sv_allowdownloads_inarchive</item>\n    <item>sv_areadebug</item>\n    <item>sv_areagrid_mingridsize</item>\n    <item>sv_autodemo_perclient</item>\n    <item>sv_autodemo_perclient_discardable</item>\n    <item>sv_autodemo_perclient_nameformat</item>\n    <item>sv_autoscreenshot</item>\n    <item>sv_autotaunt</item>\n    <item>sv_cheats</item>\n    <item>sv_checkforpacketsduringsleep</item>\n    <item>sv_clientcommand_antispam_count</item>\n    <item>sv_clientcommand_antispam_time</item>\n    <item>sv_clmovement_enable</item>\n    <item>sv_clmovement_inputtimeout</item>\n    <item>sv_clmovement_minping</item>\n    <item>sv_clmovement_minping_disabletime</item>\n    <item>sv_clones</item>\n    <item>sv_cullentities_nevercullbmodels</item>\n    <item>sv_cullentities_pvs</item>\n    <item>sv_cullentities_stats</item>\n    <item>sv_cullentities_trace</item>\n    <item>sv_cullentities_trace_delay</item>\n    <item>sv_cullentities_trace_delay_players</item>\n    <item>sv_cullentities_trace_enlarge</item>\n    <item>sv_cullentities_trace_entityocclusion</item>\n    <item>sv_cullentities_trace_prediction</item>\n    <item>sv_cullentities_trace_prediction_time</item>\n    <item>sv_cullentities_trace_samples</item>\n    <item>sv_cullentities_trace_samples_extra</item>\n    <item>sv_cullentities_trace_samples_players</item>\n    <item>sv_curl_defaulturl</item>\n    <item>sv_curl_maxspeed</item>\n    <item>sv_curl_serverpackages</item>\n    <item>sv_curl_serverpackages_auto</item>\n    <item>sv_db_saveasdump</item>\n    <item>sv_debugmove</item>\n    <item>sv_defaultcharacter</item>\n    <item>sv_defaultplayercolors</item>\n    <item>sv_defaultplayermodel</item>\n    <item>sv_defaultplayermodel_blue</item>\n    <item>sv_defaultplayermodel_pink</item>\n    <item>sv_defaultplayermodel_red</item>\n    <item>sv_defaultplayermodel_yellow</item>\n    <item>sv_defaultplayerskin</item>\n    <item>sv_defaultplayerskin_blue</item>\n    <item>sv_defaultplayerskin_pink</item>\n    <item>sv_defaultplayerskin_red</item>\n    <item>sv_defaultplayerskin_yellow</item>\n    <item>sv_disablenotify</item>\n    <item>sv_dodging_delay</item>\n    <item>sv_dodging_height_threshold</item>\n    <item>sv_dodging_horiz_speed</item>\n    <item>sv_dodging_ramp_time</item>\n    <item>sv_dodging_sound</item>\n    <item>sv_dodging_up_speed</item>\n    <item>sv_dodging_wall_distance_threshold</item>\n    <item>sv_dodging_wall_dodging</item>\n    <item>sv_doublejump</item>\n    <item>sv_echobprint</item>\n    <item>sv_entpatch</item>\n    <item>sv_eventlog</item>\n    <item>sv_eventlog_console</item>\n    <item>sv_eventlog_files</item>\n    <item>sv_eventlog_files_counter</item>\n    <item>sv_eventlog_files_nameprefix</item>\n    <item>sv_eventlog_files_namesuffix</item>\n    <item>sv_eventlog_files_timestamps</item>\n    <item>sv_fixedframeratesingleplayer</item>\n    <item>sv_foginterval</item>\n    <item>sv_fraginfo</item>\n    <item>sv_fraginfo_handicap</item>\n    <item>sv_fraginfo_ping</item>\n    <item>sv_fraginfo_stats</item>\n    <item>sv_freezenonclients</item>\n    <item>sv_friction</item>\n    <item>sv_friction_on_land</item>\n    <item>sv_gameplayfix_blowupfallenzombies</item>\n    <item>sv_gameplayfix_consistentplayerprethink</item>\n    <item>sv_gameplayfix_delayprojectiles</item>\n    <item>sv_gameplayfix_downtracesupportsongroundflag</item>\n    <item>sv_gameplayfix_droptofloorstartsolid</item>\n    <item>sv_gameplayfix_droptofloorstartsolid_nudgetocorrect</item>\n    <item>sv_gameplayfix_easierwaterjump</item>\n    <item>sv_gameplayfix_findradiusdistancetobox</item>\n    <item>sv_gameplayfix_fixedcheckwatertransition</item>\n    <item>sv_gameplayfix_gravityunaffectedbyticrate</item>\n    <item>sv_gameplayfix_grenadebouncedownslopes</item>\n    <item>sv_gameplayfix_multiplethinksperframe</item>\n    <item>sv_gameplayfix_noairborncorpse</item>\n    <item>sv_gameplayfix_noairborncorpse_allowsuspendeditems</item>\n    <item>sv_gameplayfix_nogravityonground</item>\n    <item>sv_gameplayfix_nostepmoveonsteepslopes</item>\n    <item>sv_gameplayfix_nudgeoutofsolid</item>\n    <item>sv_gameplayfix_nudgeoutofsolid_separation</item>\n    <item>sv_gameplayfix_q1bsptracelinereportstexture</item>\n    <item>sv_gameplayfix_q2airaccelerate</item>\n    <item>sv_gameplayfix_setmodelrealbox</item>\n    <item>sv_gameplayfix_slidemoveprojectiles</item>\n    <item>sv_gameplayfix_stepdown</item>\n    <item>sv_gameplayfix_stepmultipletimes</item>\n    <item>sv_gameplayfix_swiminbmodels</item>\n    <item>sv_gameplayfix_unstickentities</item>\n    <item>sv_gameplayfix_unstickplayers</item>\n    <item>sv_gameplayfix_upwardvelocityclearsongroundflag</item>\n    <item>sv_gentle</item>\n    <item>sv_gibhealth</item>\n    <item>sv_gravity</item>\n    <item>sv_heartbeatperiod</item>\n    <item>sv_idealpitchscale</item>\n    <item>sv_intermission_cdtrack</item>\n    <item>sv_join_notices</item>\n    <item>sv_join_notices_time</item>\n    <item>sv_jumpspeedcap_max</item>\n    <item>sv_jumpspeedcap_max_disable_on_ramps</item>\n    <item>sv_jumpspeedcap_min</item>\n    <item>sv_jumpstep</item>\n    <item>sv_jumpvelocity</item>\n    <item>sv_logscores_bots</item>\n    <item>sv_logscores_console</item>\n    <item>sv_logscores_file</item>\n    <item>sv_logscores_filename</item>\n    <item>sv_mapchange_delay</item>\n    <item>sv_master1</item>\n    <item>sv_master2</item>\n    <item>sv_master3</item>\n    <item>sv_master4</item>\n    <item>sv_masterextra1</item>\n    <item>sv_masterextra2</item>\n    <item>sv_masterextra3</item>\n    <item>sv_maxairspeed</item>\n    <item>sv_maxairstrafespeed</item>\n    <item>sv_maxidle</item>\n    <item>sv_maxidle_spectatorsareidle</item>\n    <item>sv_maxrate</item>\n    <item>sv_maxspeed</item>\n    <item>sv_maxvelocity</item>\n    <item>sv_motd</item>\n    <item>sv_namechangetimer</item>\n    <item>sv_nostep</item>\n    <item>sv_onlycsqcnetworking</item>\n    <item>sv_player_crouch_maxs</item>\n    <item>sv_player_crouch_mins</item>\n    <item>sv_player_crouch_viewoffset</item>\n    <item>sv_player_headsize</item>\n    <item>sv_player_maxs</item>\n    <item>sv_player_mins</item>\n    <item>sv_player_viewoffset</item>\n    <item>sv_playerphysicsqc</item>\n    <item>sv_precacheitems</item>\n    <item>sv_precacheplayermodels</item>\n    <item>sv_precacheweapons</item>\n    <item>sv_progs</item>\n    <item>sv_protocolname</item>\n    <item>sv_public</item>\n    <item>sv_public_rejectreason</item>\n    <item>sv_q3acompat_machineshotgunswap</item>\n    <item>sv_random_seed</item>\n    <item>sv_ratelimitlocalplayer</item>\n    <item>sv_ready_restart</item>\n    <item>sv_ready_restart_after_countdown</item>\n    <item>sv_ready_restart_repeatable</item>\n    <item>sv_servermodelsonly</item>\n    <item>sv_shownames_cull_distance</item>\n    <item>sv_simple_items</item>\n    <item>sv_sound_land</item>\n    <item>sv_sound_watersplash</item>\n    <item>sv_spectate</item>\n    <item>sv_spectator_speed_multiplier</item>\n    <item>sv_status_privacy</item>\n    <item>sv_status_show_qcstatus</item>\n    <item>sv_stepheight</item>\n    <item>sv_stopspeed</item>\n    <item>sv_strengthsound_antispam_refire_threshold</item>\n    <item>sv_strengthsound_antispam_time</item>\n    <item>sv_taunt</item>\n    <item>sv_teamnagger</item>\n    <item>sv_threaded</item>\n    <item>sv_timeout</item>\n    <item>sv_timeout_leadtime</item>\n    <item>sv_timeout_length</item>\n    <item>sv_timeout_number</item>\n    <item>sv_timeout_resumetime</item>\n    <item>sv_vote_call</item>\n    <item>sv_vote_change</item>\n    <item>sv_vote_command_restriction_allready</item>\n    <item>sv_vote_command_restriction_chmap</item>\n    <item>sv_vote_command_restriction_cointoss</item>\n    <item>sv_vote_command_restriction_endmatch</item>\n    <item>sv_vote_command_restriction_extendmatchtime</item>\n    <item>sv_vote_command_restriction_fraglimit</item>\n    <item>sv_vote_command_restriction_gotomap</item>\n    <item>sv_vote_command_restriction_kick</item>\n    <item>sv_vote_command_restriction_kickban</item>\n    <item>sv_vote_command_restriction_movetoauto</item>\n    <item>sv_vote_command_restriction_movetoblue</item>\n    <item>sv_vote_command_restriction_movetopink</item>\n    <item>sv_vote_command_restriction_movetored</item>\n    <item>sv_vote_command_restriction_movetoyellow</item>\n    <item>sv_vote_command_restriction_nextmap</item>\n    <item>sv_vote_command_restriction_reducematchtime</item>\n    <item>sv_vote_command_restriction_restart</item>\n    <item>sv_vote_commands</item>\n    <item>sv_vote_gamestart</item>\n    <item>sv_vote_limit</item>\n    <item>sv_vote_majority_factor</item>\n    <item>sv_vote_majority_factor_of_voted</item>\n    <item>sv_vote_master</item>\n    <item>sv_vote_master_callable</item>\n    <item>sv_vote_master_commands</item>\n    <item>sv_vote_master_password</item>\n    <item>sv_vote_master_playerlimit</item>\n    <item>sv_vote_no_stops_vote</item>\n    <item>sv_vote_nospectators</item>\n    <item>sv_vote_only_commands</item>\n    <item>sv_vote_override_mostrecent</item>\n    <item>sv_vote_singlecount</item>\n    <item>sv_vote_stop</item>\n    <item>sv_vote_timeout</item>\n    <item>sv_vote_wait</item>\n    <item>sv_wallfriction</item>\n    <item>sv_warsowbunny_accel</item>\n    <item>sv_warsowbunny_airforwardaccel</item>\n    <item>sv_warsowbunny_backtosideratio</item>\n    <item>sv_warsowbunny_topspeed</item>\n    <item>sv_warsowbunny_turnaccel</item>\n    <item>sv_wateraccelerate</item>\n    <item>sv_waterfriction</item>\n    <item>sv_waypointsprite_deadlifetime</item>\n    <item>sv_waypointsprite_deployed_lifetime</item>\n    <item>sv_waypointsprite_limitedrange</item>\n    <item>sv_weaponstats_file</item>\n    <item>sv_worldbasename</item>\n    <item>sv_worldmessage</item>\n    <item>sv_worldname</item>\n    <item>sv_worldnamenoextension</item>\n    <item>sv_writepicture_quality</item>\n    <item>sys_colortranslation</item>\n    <item>sys_debugsleep</item>\n    <item>sys_memsize_physical</item>\n    <item>sys_memsize_virtual</item>\n    <item>sys_specialcharactertranslation</item>\n    <item>sys_ticrate</item>\n    <item>sys_useclockgettime</item>\n    <item>sys_usenoclockbutbenchmark</item>\n    <item>team</item>\n    <item>teamplay</item>\n    <item>teamplay_lockonrestart</item>\n    <item>teamplay_mode</item>\n    <item>temp1</item>\n    <item>the_goggles</item>\n    <item>timedemo_screenshotframelist</item>\n    <item>timeformat</item>\n    <item>timelimit</item>\n    <item>timelimit_decrement</item>\n    <item>timelimit_increment</item>\n    <item>timelimit_max</item>\n    <item>timelimit_min</item>\n    <item>timelimit_override</item>\n    <item>timelimit_overtime</item>\n    <item>timelimit_overtimes</item>\n    <item>timelimit_suddendeath</item>\n    <item>timestamps</item>\n    <item>userbind10_description</item>\n    <item>userbind10_press</item>\n    <item>userbind10_release</item>\n    <item>userbind11_description</item>\n    <item>userbind11_press</item>\n    <item>userbind11_release</item>\n    <item>userbind12_description</item>\n    <item>userbind12_press</item>\n    <item>userbind12_release</item>\n    <item>userbind13_description</item>\n    <item>userbind13_press</item>\n    <item>userbind13_release</item>\n    <item>userbind14_description</item>\n    <item>userbind14_press</item>\n    <item>userbind14_release</item>\n    <item>userbind15_description</item>\n    <item>userbind15_press</item>\n    <item>userbind15_release</item>\n    <item>userbind16_description</item>\n    <item>userbind16_press</item>\n    <item>userbind16_release</item>\n    <item>userbind17_description</item>\n    <item>userbind17_press</item>\n    <item>userbind17_release</item>\n    <item>userbind18_description</item>\n    <item>userbind18_press</item>\n    <item>userbind18_release</item>\n    <item>userbind19_description</item>\n    <item>userbind19_press</item>\n    <item>userbind19_release</item>\n    <item>userbind1_description</item>\n    <item>userbind1_press</item>\n    <item>userbind1_release</item>\n    <item>userbind20_description</item>\n    <item>userbind20_press</item>\n    <item>userbind20_release</item>\n    <item>userbind21_description</item>\n    <item>userbind21_press</item>\n    <item>userbind21_release</item>\n    <item>userbind22_description</item>\n    <item>userbind22_press</item>\n    <item>userbind22_release</item>\n    <item>userbind23_description</item>\n    <item>userbind23_press</item>\n    <item>userbind23_release</item>\n    <item>userbind24_description</item>\n    <item>userbind24_press</item>\n    <item>userbind24_release</item>\n    <item>userbind25_description</item>\n    <item>userbind25_press</item>\n    <item>userbind25_release</item>\n    <item>userbind26_description</item>\n    <item>userbind26_press</item>\n    <item>userbind26_release</item>\n    <item>userbind27_description</item>\n    <item>userbind27_press</item>\n    <item>userbind27_release</item>\n    <item>userbind28_description</item>\n    <item>userbind28_press</item>\n    <item>userbind28_release</item>\n    <item>userbind29_description</item>\n    <item>userbind29_press</item>\n    <item>userbind29_release</item>\n    <item>userbind2_description</item>\n    <item>userbind2_press</item>\n    <item>userbind2_release</item>\n    <item>userbind30_description</item>\n    <item>userbind30_press</item>\n    <item>userbind30_release</item>\n    <item>userbind31_description</item>\n    <item>userbind31_press</item>\n    <item>userbind31_release</item>\n    <item>userbind32_description</item>\n    <item>userbind32_press</item>\n    <item>userbind32_release</item>\n    <item>userbind3_description</item>\n    <item>userbind3_press</item>\n    <item>userbind3_release</item>\n    <item>userbind4_description</item>\n    <item>userbind4_press</item>\n    <item>userbind4_release</item>\n    <item>userbind5_description</item>\n    <item>userbind5_press</item>\n    <item>userbind5_release</item>\n    <item>userbind6_description</item>\n    <item>userbind6_press</item>\n    <item>userbind6_release</item>\n    <item>userbind7_description</item>\n    <item>userbind7_press</item>\n    <item>userbind7_release</item>\n    <item>userbind8_description</item>\n    <item>userbind8_press</item>\n    <item>userbind8_release</item>\n    <item>userbind9_description</item>\n    <item>userbind9_press</item>\n    <item>userbind9_release</item>\n    <item>utf8_enable</item>\n    <item>v_brightness</item>\n    <item>v_centermove</item>\n    <item>v_centerspeed</item>\n    <item>v_color_black_b</item>\n    <item>v_color_black_g</item>\n    <item>v_color_black_r</item>\n    <item>v_color_enable</item>\n    <item>v_color_grey_b</item>\n    <item>v_color_grey_g</item>\n    <item>v_color_grey_r</item>\n    <item>v_color_white_b</item>\n    <item>v_color_white_g</item>\n    <item>v_color_white_r</item>\n    <item>v_contrast</item>\n    <item>v_contrastboost</item>\n    <item>v_deathtilt</item>\n    <item>v_deathtiltangle</item>\n    <item>v_flipped</item>\n    <item>v_gamma</item>\n    <item>v_glslgamma</item>\n    <item>v_glslgamma_2d</item>\n    <item>v_glslgamma_video</item>\n    <item>v_hwgamma</item>\n    <item>v_idlescale</item>\n    <item>v_ipitch_cycle</item>\n    <item>v_ipitch_level</item>\n    <item>v_iroll_cycle</item>\n    <item>v_iroll_level</item>\n    <item>v_iyaw_cycle</item>\n    <item>v_iyaw_level</item>\n    <item>v_kickpitch</item>\n    <item>v_kickroll</item>\n    <item>v_kicktime</item>\n    <item>v_psycho</item>\n    <item>vid_bitsperpixel</item>\n    <item>vid_conheight</item>\n    <item>vid_conwidth</item>\n    <item>vid_fullscreen</item>\n    <item>vid_gl13</item>\n    <item>vid_gl20</item>\n    <item>vid_grabkeyboard</item>\n    <item>vid_hardwaregammasupported</item>\n    <item>vid_height</item>\n    <item>vid_minheight</item>\n    <item>vid_minwidth</item>\n    <item>vid_mouse</item>\n    <item>vid_netwmfullscreen</item>\n    <item>vid_pixelheight</item>\n    <item>vid_refreshrate</item>\n    <item>vid_resizable</item>\n    <item>vid_sRGB</item>\n    <item>vid_sRGB_fallback</item>\n    <item>vid_samples</item>\n    <item>vid_soft</item>\n    <item>vid_soft_interlace</item>\n    <item>vid_soft_threads</item>\n    <item>vid_stereobuffer</item>\n    <item>vid_stick_mouse</item>\n    <item>vid_touchscreen</item>\n    <item>vid_touchscreen_outlinealpha</item>\n    <item>vid_touchscreen_overlayalpha</item>\n    <item>vid_userefreshrate</item>\n    <item>vid_vsync</item>\n    <item>vid_width</item>\n    <item>vid_x11_display</item>\n    <item>viewsize</item>\n    <item>volume</item>\n    <item>waypoint_benchmark</item>\n    <item>welcome_message_time</item>\n    <item>_allow_unacceptable_compiler_bugs</item>\n    <item>_angles</item>\n    <item>_backup_con_chatvars_set</item>\n    <item>_campaign_index</item>\n    <item>_campaign_name</item>\n    <item>_campaign_testrun</item>\n    <item>_cl_color</item>\n    <item>_cl_name</item>\n    <item>_cl_playermodel</item>\n    <item>_cl_playerskin</item>\n    <item>_cl_pmodel</item>\n    <item>_cl_rate</item>\n    <item>_con_chat_maximized</item>\n    <item>_hud_configure</item>\n    <item>_hud_panelorder</item>\n    <item>_hud_showbinds_reload</item>\n    <item>_independent_players</item>\n    <item>_isalnum</item>\n    <item>_isalpha</item>\n    <item>_isascii</item>\n    <item>_isblank</item>\n    <item>_iscntrl</item>\n    <item>_isdigit</item>\n    <item>_isgraph</item>\n    <item>_islower</item>\n    <item>_isprint</item>\n    <item>_ispunct</item>\n    <item>_isspace</item>\n    <item>_isupper</item>\n    <item>_isxdigit</item>\n    <item>_menu_alpha</item>\n    <item>_menu_initialized</item>\n    <item>_menu_prvm_language</item>\n    <item>_menu_vid_height</item>\n    <item>_menu_vid_pixelheight</item>\n    <item>_menu_vid_width</item>\n    <item>_notarget</item>\n    <item>_origin</item>\n    <item>_snd_mixahead</item>\n    <item>_sv_init</item>\n    <item>_togglezoom</item>\n    <item>_urllib_nextslot</item>\n  </list>\n\n  <list name=\"Aliases\">\n    <item>+attack2</item>\n    <item>+con_chat_maximize</item>\n    <item>+crouch</item>\n    <item>+fire</item>\n    <item>+fire2</item>\n    <item>+hook</item>\n    <item>+hud_panel_radar_maximized</item>\n    <item>+show_info</item>\n    <item>+userbind</item>\n    <item>+zoom</item>\n    <item>-attack2</item>\n    <item>-con_chat_maximize</item>\n    <item>-crouch</item>\n    <item>-fire</item>\n    <item>-fire2</item>\n    <item>-hook</item>\n    <item>-hud_panel_radar_maximized</item>\n    <item>-show_info</item>\n    <item>-userbind</item>\n    <item>-zoom</item>\n    <item>addfav</item>\n    <item>addtolist</item>\n    <item>addvote</item>\n    <item>adminmsg</item>\n    <item>allready</item>\n    <item>allspec</item>\n    <item>anticheat</item>\n    <item>asay_ctf_flagcarrier</item>\n    <item>asay_ctf_haveflag</item>\n    <item>asay_drop</item>\n    <item>asay_killed</item>\n    <item>asay_noammo</item>\n    <item>asay_support</item>\n    <item>asay_willgo</item>\n    <item>autoswitch</item>\n    <item>ban</item>\n    <item>banlist</item>\n    <item>bans</item>\n    <item>bbox</item>\n    <item>blurtest</item>\n    <item>bot_cmd</item>\n    <item>bsp</item>\n    <item>checkfail</item>\n    <item>chmap</item>\n    <item>cl_hook_activeweapon</item>\n    <item>cl_hook_gameend</item>\n    <item>cl_hook_gamestart_all</item>\n    <item>cl_hook_gamestart_arena</item>\n    <item>cl_hook_gamestart_as</item>\n    <item>cl_hook_gamestart_ca</item>\n    <item>cl_hook_gamestart_ctf</item>\n    <item>cl_hook_gamestart_cts</item>\n    <item>cl_hook_gamestart_dm</item>\n    <item>cl_hook_gamestart_dom</item>\n    <item>cl_hook_gamestart_ft</item>\n    <item>cl_hook_gamestart_ka</item>\n    <item>cl_hook_gamestart_kh</item>\n    <item>cl_hook_gamestart_lms</item>\n    <item>cl_hook_gamestart_nb</item>\n    <item>cl_hook_gamestart_nop</item>\n    <item>cl_hook_gamestart_ons</item>\n    <item>cl_hook_gamestart_rc</item>\n    <item>cl_hook_gamestart_tdm</item>\n    <item>clearmap</item>\n    <item>clientversion</item>\n    <item>cointoss</item>\n    <item>create_scrshot_ent</item>\n    <item>cvar_changes</item>\n    <item>cvar_purechanges</item>\n    <item>database</item>\n    <item>debugmodel</item>\n    <item>defer_clear</item>\n    <item>defer_clear_all</item>\n    <item>delrec</item>\n    <item>devmap</item>\n    <item>dropweapon</item>\n    <item>dumpcommands</item>\n    <item>dumpdb</item>\n    <item>dumpnotifs</item>\n    <item>effectindexdump</item>\n    <item>endmatch</item>\n    <item>extendmatchtime</item>\n    <item>g_forced_team_matchsetup</item>\n    <item>g_hitplots_add</item>\n    <item>g_hitplots_remove</item>\n    <item>g_maplist_add</item>\n    <item>g_maplist_cleanup</item>\n    <item>g_maplist_putfirst</item>\n    <item>g_maplist_remove</item>\n    <item>g_maplist_shufflenow</item>\n    <item>g_tourney</item>\n    <item>g_tourney_0</item>\n    <item>g_tourney_1</item>\n    <item>g_turrets_reload</item>\n    <item>g_waypointeditor_relinkall</item>\n    <item>g_waypointeditor_remove</item>\n    <item>g_waypointeditor_saveall</item>\n    <item>g_waypointeditor_spawn</item>\n    <item>g_waypointeditor_unreachable</item>\n    <item>g_waypointsprite_clear</item>\n    <item>g_waypointsprite_clear_personal</item>\n    <item>g_waypointsprite_personal</item>\n    <item>g_waypointsprite_personal_d</item>\n    <item>g_waypointsprite_personal_p</item>\n    <item>g_waypointsprite_team_danger</item>\n    <item>g_waypointsprite_team_danger_d</item>\n    <item>g_waypointsprite_team_danger_p</item>\n    <item>g_waypointsprite_team_helpme</item>\n    <item>g_waypointsprite_team_here</item>\n    <item>g_waypointsprite_team_here_d</item>\n    <item>g_waypointsprite_team_here_p</item>\n    <item>g_waypointsprite_toggle</item>\n    <item>gametype</item>\n    <item>gettaginfo</item>\n    <item>gl_flashblend_update</item>\n    <item>gotomap</item>\n    <item>help</item>\n    <item>hud</item>\n    <item>hud_configure</item>\n    <item>hud_panel_radar_maximized</item>\n    <item>hud_panel_radar_rotate</item>\n    <item>hud_save</item>\n    <item>if_client</item>\n    <item>if_dedicated</item>\n    <item>info</item>\n    <item>ladder</item>\n    <item>loadconfig</item>\n    <item>loaddb</item>\n    <item>localprint</item>\n    <item>lockteams</item>\n    <item>lsmaps</item>\n    <item>lsnewmaps</item>\n    <item>make_mapinfo</item>\n    <item>maplist</item>\n    <item>menu_loadmap_prepare</item>\n    <item>menu_showhudexit</item>\n    <item>menu_showhudoptions</item>\n    <item>menu_showquitdialog</item>\n    <item>menu_showsandboxtools</item>\n    <item>menu_showteamselect</item>\n    <item>menu_sync</item>\n    <item>moveplayer</item>\n    <item>movetoauto</item>\n    <item>movetoblue</item>\n    <item>movetopink</item>\n    <item>movetored</item>\n    <item>movetoyellow</item>\n    <item>mute</item>\n    <item>nextframe</item>\n    <item>nospectators</item>\n    <item>playerdemo</item>\n    <item>ply</item>\n    <item>printmaplist</item>\n    <item>printstats</item>\n    <item>qc_cmd_cl</item>\n    <item>qc_cmd_cmd</item>\n    <item>qc_cmd_sv</item>\n    <item>qc_cmd_svcl</item>\n    <item>qc_cmd_svcmd</item>\n    <item>qc_cmd_svmenu</item>\n    <item>qc_curl</item>\n    <item>radar</item>\n    <item>radarmap</item>\n    <item>rankings</item>\n    <item>ready</item>\n    <item>rec</item>\n    <item>records</item>\n    <item>reducematchtime</item>\n    <item>reload</item>\n    <item>removefromlist</item>\n    <item>reportcvar</item>\n    <item>restartnotifs</item>\n    <item>rpn</item>\n    <item>sandbox</item>\n    <item>savedb</item>\n    <item>scoreboard_columns_help</item>\n    <item>scoreboard_columns_set</item>\n    <item>search</item>\n    <item>selectteam</item>\n    <item>selfstuff</item>\n    <item>sendcvar</item>\n    <item>sentcvar</item>\n    <item>setbots</item>\n    <item>sethostname</item>\n    <item>setreport</item>\n    <item>settemp</item>\n    <item>settemp_restore</item>\n    <item>shuffleteams</item>\n    <item>singleplayer_continue</item>\n    <item>singleplayer_levellist</item>\n    <item>singleplayer_start</item>\n    <item>snd_attenuation_method_0</item>\n    <item>snd_attenuation_method_1</item>\n    <item>snd_attenuation_method_2</item>\n    <item>spec</item>\n    <item>spectate</item>\n    <item>startmap_dm</item>\n    <item>startmap_sp</item>\n    <item>stuffto</item>\n    <item>suggestmap</item>\n    <item>sv_fbskin_green</item>\n    <item>sv_fbskin_off</item>\n    <item>sv_fbskin_orange</item>\n    <item>sv_fbskin_rainbow</item>\n    <item>sv_fbskin_red</item>\n    <item>sv_fbskin_unique</item>\n    <item>sv_hook_gameend</item>\n    <item>sv_hook_gamerestart</item>\n    <item>sv_hook_gamestart_all</item>\n    <item>sv_hook_gamestart_arena</item>\n    <item>sv_hook_gamestart_as</item>\n    <item>sv_hook_gamestart_ca</item>\n    <item>sv_hook_gamestart_ctf</item>\n    <item>sv_hook_gamestart_cts</item>\n    <item>sv_hook_gamestart_dm</item>\n    <item>sv_hook_gamestart_dom</item>\n    <item>sv_hook_gamestart_ft</item>\n    <item>sv_hook_gamestart_ka</item>\n    <item>sv_hook_gamestart_kh</item>\n    <item>sv_hook_gamestart_lms</item>\n    <item>sv_hook_gamestart_nb</item>\n    <item>sv_hook_gamestart_ons</item>\n    <item>sv_hook_gamestart_rc</item>\n    <item>sv_hook_gamestart_tdm</item>\n    <item>sv_loadconfig</item>\n    <item>sv_restart</item>\n    <item>tdem</item>\n    <item>team_auto</item>\n    <item>team_blue</item>\n    <item>team_pink</item>\n    <item>team_red</item>\n    <item>team_yellow</item>\n    <item>teamstatus</item>\n    <item>time</item>\n    <item>timein</item>\n    <item>timeout</item>\n    <item>togglezoom</item>\n    <item>trace</item>\n    <item>unban</item>\n    <item>unlockteams</item>\n    <item>unmute</item>\n    <item>use</item>\n    <item>vabstain</item>\n    <item>vcall</item>\n    <item>vdo</item>\n    <item>vdoend</item>\n    <item>vdokick</item>\n    <item>vdokickban</item>\n    <item>vdomap</item>\n    <item>vdontcare</item>\n    <item>vend</item>\n    <item>vhelp</item>\n    <item>vkick</item>\n    <item>vkickban</item>\n    <item>vlogin</item>\n    <item>vmap</item>\n    <item>vmaster</item>\n    <item>vnextmap</item>\n    <item>vno</item>\n    <item>voice</item>\n    <item>vote</item>\n    <item>vstatus</item>\n    <item>vstop</item>\n    <item>vyes</item>\n    <item>warp</item>\n    <item>weapbest</item>\n    <item>weaplast</item>\n    <item>weapnext</item>\n    <item>weapon_crylink</item>\n    <item>weapon_electro</item>\n    <item>weapon_fireball</item>\n    <item>weapon_grenadelauncher</item>\n    <item>weapon_group_0</item>\n    <item>weapon_group_1</item>\n    <item>weapon_group_2</item>\n    <item>weapon_group_3</item>\n    <item>weapon_group_4</item>\n    <item>weapon_group_5</item>\n    <item>weapon_group_6</item>\n    <item>weapon_group_7</item>\n    <item>weapon_group_8</item>\n    <item>weapon_group_9</item>\n    <item>weapon_hagar</item>\n    <item>weapon_hlac</item>\n    <item>weapon_hook</item>\n    <item>weapon_laser</item>\n    <item>weapon_minelayer</item>\n    <item>weapon_minstanex</item>\n    <item>weapon_nex</item>\n    <item>weapon_porto</item>\n    <item>weapon_rifle</item>\n    <item>weapon_rocketlauncher</item>\n    <item>weapon_seeker</item>\n    <item>weapon_shotgun</item>\n    <item>weapon_tuba</item>\n    <item>weapon_uzi</item>\n    <item>weapprev</item>\n    <item>who</item>\n    <item>_backup_con_chatvars</item>\n    <item>_backup_con_chatvars_0</item>\n    <item>_backup_con_chatvars_1</item>\n    <item>_cl_hook_gamestart</item>\n    <item>_cl_hook_gamestart_stage2</item>\n    <item>_detect_dedicated_$qport</item>\n    <item>_detect_dedicated_0</item>\n    <item>_gl_flashblend_update_00</item>\n    <item>_gl_flashblend_update_01</item>\n    <item>_gl_flashblend_update_10</item>\n    <item>_gl_flashblend_update_11</item>\n    <item>_gunalign_01</item>\n    <item>_gunalign_02</item>\n    <item>_gunalign_03</item>\n    <item>_gunalign_04</item>\n    <item>_gunalign_11</item>\n    <item>_gunalign_12</item>\n    <item>_gunalign_13</item>\n    <item>_gunalign_14</item>\n    <item>_gunalign_update</item>\n    <item>_if_dedicated</item>\n    <item>_menu_loadmap_prepare_maxpl</item>\n    <item>_restore_con_chatvars</item>\n    <item>_restore_con_chatvars_0</item>\n    <item>_restore_con_chatvars_1</item>\n    <item>_sv_hook_gamestart</item>\n    <item>_sv_hook_gamestart_stage2</item>\n    <item>_update_configversion_0</item>\n    <item>_update_configversion_1</item>\n    <item>_update_configversion_2</item>\n    <item>_update_configversion_3</item>\n    <item>_update_configversion_4</item>\n    <item>_update_configversion_5</item>\n    <item>_update_configversion_6</item>\n    <item>_update_configversion_7</item>\n    <item>_userbind_call</item>\n    <item>_weapnext_0</item>\n    <item>_weapnext_1</item>\n    <item>_weapnext_2</item>\n    <item>_weapprev_0</item>\n    <item>_weapprev_1</item>\n    <item>_weapprev_2</item>\n  </list>\n\n  <list name=\"Actions\">\n    <item>+attack</item>\n    <item>+back</item>\n    <item>+button10</item>\n    <item>+button11</item>\n    <item>+button12</item>\n    <item>+button13</item>\n    <item>+button14</item>\n    <item>+button15</item>\n    <item>+button16</item>\n    <item>+button3</item>\n    <item>+button4</item>\n    <item>+button5</item>\n    <item>+button6</item>\n    <item>+button7</item>\n    <item>+button8</item>\n    <item>+button9</item>\n    <item>+forward</item>\n    <item>+jump</item>\n    <item>+klook</item>\n    <item>+left</item>\n    <item>+lookdown</item>\n    <item>+lookup</item>\n    <item>+mlook</item>\n    <item>+movedown</item>\n    <item>+moveleft</item>\n    <item>+moveright</item>\n    <item>+moveup</item>\n    <item>+right</item>\n    <item>+showscores</item>\n    <item>+speed</item>\n    <item>+strafe</item>\n    <item>+use</item>\n    <item>-attack</item>\n    <item>-back</item>\n    <item>-button10</item>\n    <item>-button11</item>\n    <item>-button12</item>\n    <item>-button13</item>\n    <item>-button14</item>\n    <item>-button15</item>\n    <item>-button16</item>\n    <item>-button3</item>\n    <item>-button4</item>\n    <item>-button5</item>\n    <item>-button6</item>\n    <item>-button7</item>\n    <item>-button8</item>\n    <item>-button9</item>\n    <item>-forward</item>\n    <item>-jump</item>\n    <item>-klook</item>\n    <item>-left</item>\n    <item>-lookdown</item>\n    <item>-lookup</item>\n    <item>-mlook</item>\n    <item>-movedown</item>\n    <item>-moveleft</item>\n    <item>-moveright</item>\n    <item>-moveup</item>\n    <item>-right</item>\n    <item>-showscores</item>\n    <item>-speed</item>\n    <item>-strafe</item>\n    <item>-use</item>\n  </list>\n\n  <list name=\"KeyTypes\">\n    <item>*</item>\n    <item>[</item>\n    <item>]</item>\n    <item>\\</item>\n    <item>/</item>\n    <item>'</item>\n    <item>=</item>\n    <item>-</item>\n    <item>+</item>\n    <item>,</item>\n    <item>.</item>\n    <item>`</item>\n    <item>~</item>\n    <item>1</item>\n    <item>2</item>\n    <item>3</item>\n    <item>4</item>\n    <item>5</item>\n    <item>6</item>\n    <item>7</item>\n    <item>8</item>\n    <item>9</item>\n    <item>0</item>\n    <item>a</item>\n    <item>b</item>\n    <item>c</item>\n    <item>d</item>\n    <item>e</item>\n    <item>f</item>\n    <item>g</item>\n    <item>h</item>\n    <item>i</item>\n    <item>j</item>\n    <item>k</item>\n    <item>l</item>\n    <item>m</item>\n    <item>n</item>\n    <item>o</item>\n    <item>p</item>\n    <item>q</item>\n    <item>r</item>\n    <item>s</item>\n    <item>t</item>\n    <item>u</item>\n    <item>v</item>\n    <item>x</item>\n    <item>w</item>\n    <item>y</item>\n    <item>z</item>\n    <item>ALT</item>\n    <item>AUX1</item>\n    <item>AUX10</item>\n    <item>AUX11</item>\n    <item>AUX12</item>\n    <item>AUX13</item>\n    <item>AUX14</item>\n    <item>AUX15</item>\n    <item>AUX16</item>\n    <item>AUX17</item>\n    <item>AUX18</item>\n    <item>AUX2</item>\n    <item>AUX20</item>\n    <item>AUX21</item>\n    <item>AUX22</item>\n    <item>AUX23</item>\n    <item>AUX24</item>\n    <item>AUX25</item>\n    <item>AUX26</item>\n    <item>AUX27</item>\n    <item>AUX28</item>\n    <item>AUX29</item>\n    <item>AUX3</item>\n    <item>AUX30</item>\n    <item>AUX31</item>\n    <item>AUX32</item>\n    <item>AUX4</item>\n    <item>AUX5</item>\n    <item>AUX6</item>\n    <item>AUX7</item>\n    <item>AUX8</item>\n    <item>AUX9</item>\n    <item>BACKSPACE</item>\n    <item>CTRL</item>\n    <item>DEL</item>\n    <item>DOWNARROW</item>\n    <item>END</item>\n    <item>ENTER</item>\n    <item>ESCAPE</item>\n    <item>F1</item>\n    <item>F10</item>\n    <item>F11</item>\n    <item>F12</item>\n    <item>F2</item>\n    <item>F3</item>\n    <item>F4</item>\n    <item>F5</item>\n    <item>F6</item>\n    <item>F7</item>\n    <item>F8</item>\n    <item>F9</item>\n    <item>HOME</item>\n    <item>INS</item>\n    <item>JOY1</item>\n    <item>JOY2</item>\n    <item>JOY3</item>\n    <item>JOY4</item>\n    <item>KP_SLASH</item>\n    <item>KP_5</item>\n    <item>KP_UPARROW</item>\n    <item>KP_LEFTARROW</item>\n    <item>KP_RIGHTARROW</item>\n    <item>KP_DOWNARROW</item>\n    <item>KP_HOME</item>\n    <item>KP_END</item>\n    <item>KP_PGUP</item>\n    <item>KP_PGDN</item>\n    <item>KP_INS</item>\n    <item>KP_DEL</item>\n    <item>LEFTARROW</item>\n    <item>MOUSE1</item>\n    <item>MOUSE2</item>\n    <item>MOUSE3</item>\n    <item>MWHEELDOWN</item>\n    <item>MWHEELUP</item>\n    <item>PAUSE</item>\n    <item>PGDN</item>\n    <item>PGUP</item>\n    <item>RIGHTARROW</item>\n    <item>SEMICOLON</item>\n    <item>CAPSLOCK</item>\n    <item>SHIFT</item>\n    <item>SPACE</item>\n    <item>TAB</item>\n    <item>UPARROW</item>\n  </list>\n\n  <list name=\"Symbols\">\n    <item>;</item>\n    <item>$</item>\n  </list>\n\n  <list name=\"BindFamily\">\n    <item>bind</item>\n    <item>unbind</item>\n  </list>\n\n  <list name=\"setFamily\">\n    <item>set</item>\n    <item>seta</item>\n    <item>setu</item>\n    <item>sets</item>\n  </list>\n\n  <list name=\"PrintsString\">\n     <item>echo</item>\n     <item>say_team</item>\n     <item>say</item>\n  </list>\n\n  <contexts>\n    <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal Text\">\n      <keyword attribute=\"Command\" context=\"Arg area\" String=\"Commands\"/>\n      <keyword attribute=\"Variable\" context=\"Arg area\" String=\"Variables\"/>\n      <keyword attribute=\"Aliases\" context=\"#stay\" String=\"Aliases\"/>\n      <keyword attribute=\"Action\" context=\"#stay\" String=\"Actions\"/>\n      <keyword attribute=\"Symbol\" context=\"#stay\" String=\"Symbols\"/>\n      <keyword attribute=\"Command\" context=\"Bind phrase\" String=\"BindFamily\"/>\n      <keyword attribute=\"Command\" context=\"Alias phrase\" String=\"setFamily\"/>\n      <keyword attribute=\"Command\" context=\"Echo\" String=\"PrintsString\"/>\n      <StringDetect attribute=\"Command\" context=\"Alias phrase\" String=\"alias\" insensitive=\"true\"/>\n      <keyword attribute=\"Command\" context=\"Echo\" String=\"PrintsString\"/>\n      <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"$\"/>\n      <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n    </context>\n\n    <context attribute=\"Comment\" lineEndContext=\"Normal Text\" name=\"Comment\"/>\n\n    <context attribute=\"String\" lineEndContext=\"Normal Text\" name=\"String\">\n      <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n    </context>\n\n    <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Arg area\">\n      <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n      <Float attribute=\"Float\" context=\"#stay\"/>\n      <Int attribute=\"Int\" context=\"#stay\"/>\n      <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n      <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n      <DetectChar attribute=\"Symbol\" context=\"Normal Text\" char=\"$\"/>\n    </context>\n\n    <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Arg area in sub phrase\">\n      <Float attribute=\"Float\" context=\"#stay\"/>\n      <Int attribute=\"Int\" context=\"#stay\"/>\n      <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n      <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n    </context>\n\n    <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Sub phrase\">\n      <keyword attribute=\"Command\" context=\"Arg area in sub phrase\" String=\"Commands\"/>\n      <keyword attribute=\"Variable\" context=\"Arg area in sub phrase\" String=\"Variables\"/>\n      <keyword attribute=\"Action\" context=\"#stay\" String=\"Actions\"/>\n      <keyword attribute=\"Symbol\" context=\"#stay\" String=\"Symbols\"/>\n      <keyword attribute=\"Command\" context=\"Bind phrase\" String=\"BindFamily\"/>\n      <keyword attribute=\"Command\" context=\"Normal Text\" String=\"setFamily\"/>\n      <keyword attribute=\"Command\" context=\"Echo\" String=\"PrintsString\"/>\n      <StringDetect attribute=\"Command\" context=\"Alias phrase\" String=\"alias\"/>\n      <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n      <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\";\"/>\n      <Int attribute=\"Int\" context=\"#stay\"/>\n      <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n    </context>\n\n    <context attribute=\"Normal Text\" lineEndContext=\"Normal Text\" name=\"Bind phrase\">\n      <keyword attribute=\"Hex\" context=\"Sub phrase\" String=\"KeyTypes\"/>\n    </context>\n\n    <context attribute=\"Identifier\" lineEndContext=\"Normal Text\" name=\"Alias phrase\">\n      <DetectChar attribute=\"Identifier\" context=\"Sub phrase\" char=\" \"/>\n    </context>\n\n    <context attribute=\"String\" lineEndContext=\"Normal Text\" name=\"Echo\">\n      <DetectChar attribute=\"Symbol\" context=\"#pop\" char=\";\"/>\n      <Detect2Chars attribute=\"Comment\" context=\"Comment\" char=\"/\" char1=\"/\"/>\n    </context>\n\n  </contexts>\n\n  <itemDatas>\n    <itemData name=\"Command\"     defStyleNum=\"dsKeyword\"  />\n    <itemData name=\"Aliases\"     defStyleNum=\"dsVariable\" />\n    <itemData name=\"Action\"      defStyleNum=\"dsNormal\"   color=\"#ffcc00\" selColor=\"#00ff00\" />\n    <itemData name=\"Variable\"    defStyleNum=\"dsKeyword\"  color=\"#7f0000\"/>\n    <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"   />\n    <itemData name=\"Comment\"     defStyleNum=\"dsComment\"  />\n    <itemData name=\"Float\"       defStyleNum=\"dsFloat\"    />\n    <itemData name=\"Int\"         defStyleNum=\"dsFloat\"    />\n    <itemData name=\"String\"      defStyleNum=\"dsString\"   color=\"#ff0000\" selColor=\"#00ff00\" />\n    <itemData name=\"Hex\"         defStyleNum=\"dsBaseN\"    />\n    <itemData name=\"Symbol\"      defStyleNum=\"dsOthers\"   />\n    <itemData name=\"Identifier\"  defStyleNum=\"dsDataType\" />\n  </itemDatas>\n\n</highlighting>\n\n<general>\n  <comments>\n    <comment name=\"singleLine\" start=\"//\"/>\n  </comments>\n\n  <keywords weakDeliminator=\",+~-=/\\.[]$\" additionalDeliminator=\"&quot;;$\" casesensitive=\"0\"/>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/xorg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"x.org Configuration\" section=\"Configuration\" extensions=\"xorg.conf\" mimetype=\"\" version=\"2\" kateversion=\"2.4\" author=\"Jan Janssen (medhefgo@web.de)\" license=\"LGPL\">\n\n<highlighting>\n<contexts>\n <context name=\"xorg\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n  <StringDetect String=\"Section\" attribute=\"Section\" context=\"Section\" beginRegion=\"Section\" insensitive=\"true\" />\n  <DetectChar char=\"#\" context=\"Comment\" />\n </context>\n\n <context name=\"Section\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n  <RangeDetect char=\"&quot;\" char1=\"&quot;\" attribute=\"Section Name\" context=\"Section Content\" />\n  <RangeDetect char=\"'\" char1=\"'\" attribute=\"Section Name\" context=\"Section Content\" />\n  <DetectIdentifier attribute=\"Alert\" />\n  <DetectChar char=\"#\" context=\"Comment\" />\n </context>\n\n <context name=\"Section Content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n  <StringDetect String=\"EndSection\" attribute=\"Section\" context=\"#pop#pop\" endRegion=\"Section\" insensitive=\"true\" />\n  <StringDetect String=\"EndSubSection\" attribute=\"Section\" context=\"#pop#pop\" endRegion=\"SubSection\" insensitive=\"true\" />\n  <StringDetect String=\"SubSection\" attribute=\"Section\" context=\"Section\" beginRegion=\"SubSection\" insensitive=\"true\" />\n  <RegExpr String=\"\\b\\w+\\b\" context=\"Keyword\" />\n  <DetectChar char=\"#\" context=\"Comment\" />\n </context>\n\n <context name=\"Keyword\" attribute=\"Keyword\" lineEndContext=\"#pop\">\n  <RangeDetect attribute=\"Value\" char=\"&quot;\" char1=\"&quot;\" />\n  <RangeDetect attribute=\"Value\" char=\"'\" char1=\"'\" />\n  <Float attribute=\"Float\" />\n  <Int attribute=\"Int\" />\n  <RegExpr attribute=\"Value2\" String=\"[\\w\\d]+\" />\n  <DetectChar char=\"#\" context=\"Comment\" />\n </context>\n\n <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n  <DetectSpaces />\n  <IncludeRules context=\"##Alerts\" />\n  <DetectIdentifier />\n </context>\n</contexts>\n\n\n<itemDatas>\n <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n <itemData name=\"Section\" defStyleNum=\"dsFunction\" />\n <itemData name=\"Section Name\" defStyleNum=\"dsString\" />\n <itemData name=\"Value\" defStyleNum=\"dsDataType\" />\n <itemData name=\"Keyword\" defStyleNum=\"dsKeyword\" />\n <itemData name=\"Alert\" defStyleNum=\"dsError\" />\n <itemData name=\"Int\" defStyleNum=\"dsDecVal\" />\n <itemData name=\"Value2\" defStyleNum=\"dsOthers\" />\n <itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n</itemDatas>\n</highlighting>\n\n\n<general>\n <comments>\n  <comment name=\"singleLine\" start=\"#\" />\n </comments>\n</general>\n\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/xslt.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY qname    \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&qname;);\">\n\t<!ENTITY axisname  \"ancestor|ancestor-or-self|attribute|child|descendant|descendant-or-self|following|following-sibling|namespace|parent|preceding|preceding-sibling|self\">\n]>\n\n<!--\n  Kate syntax highlighting for XSLT\n  2004 by Peter Lammich (views@gmx.de)\n  Published under the LGPL\n  \n  TODO/FIXME\n  \n    - Is qname - entity correct ??\n  \n    - Integrate latest XML highlighting, that supports ...\n      This version is mainly based on kate 2.1 XML highlighting file\n    \n    - highlight functions only if they are followed by a '('. (How to do that ??)\n    - use <IncludeRules> to make things a bit more modular and cleaner \n\n    - I'd like to properly comment this file, but kate 2.1 (I have to work with it) behaves strange whith comments.\n      It seems to immediately stop processing a tag's content when encountering a comment\n      \n    - Define own highlighting rules for patterns (Currently a pattern is highlighted as XPath)\n    \n    - Highlight also XPath keywords, such as 'cast as'\n      \n\n    DONE: !DOCTYPE, ![CDATA[, Processing Instructions support copied from latest XML-highlighting\n    \n    DONE: Added XSLT 2.0 tag- and XPath2.0 and XSLT2.0 function keywords\n    \n    FIXED: axis highlighting does not work, if identifier continues directly behind axis: (self::someWord)\n    \n    DONE: highlight entity references\n      Do not replace the <RegExpr> by <IncludeEntities>, this is a kate 2.1 workaround !\n\n    FIXED axis-names are even highlighted if there are characters in front of them, i.e. in \"xxxself::\", \"self::\" would \n      be highlighted.\n        Now matching any qnames in XPath by own matcher\n\n    &varname; entity, what exactly is allowed by xslt ?\n      &varname; entity not used any more, variable names can be qnames.\n                      \n    CHANGED: Use the Alert style for the highlighting of todo and fixme, etc.\n         Comments are foldable, two dashes inside comment hl as error, \n         use the dsError style for Invalid data (Wilbert Berendsen, wbsoft@xs4all.nl)\n       \n\n-->\n\n<language version=\"4\" kateversion=\"5.0\" name=\"xslt\" section=\"Markup\" extensions=\"*.xsl;*.xslt\" license=\"LGPL\" author=\"Peter Lammich (views@gmx.de)\">\n  <highlighting>\n    <list name=\"keytags\">\n      <item>xsl:value-of</item>\n      <item>xsl:output</item>\n      <item>xsl:decimal-format</item>\n      <item>xsl:apply-templates</item>\n      <item>xsl:param</item>\n      <item>xsl:transform</item>\n      <item>xsl:namespace-alias</item>\n      <item>xsl:comment</item>\n      <item>xsl:element</item>\n      <item>xsl:attribute</item>\n      <item>xsl:apply-imports</item>\n      <item>xsl:text</item>\n      <item>xsl:when</item>\n      <item>xsl:template</item>\n      <item>xsl:processing-instruction</item>\n      <item>xsl:include</item>\n      <item>xsl:copy-of</item>\n      <item>xsl:copy</item>\n      <item>xsl:with-param</item>\n      <item>xsl:stylesheet</item>\n      <item>xsl:for-each</item>\n      <item>xsl:choose</item>\n      <item>xsl:sort</item>\n      <item>xsl:otherwise</item>\n      <item>xsl:key</item>\n      <item>xsl:variable</item>\n      <item>xsl:number</item>\n      <item>xsl:message</item>\n      <item>xsl:fallback</item>\n      <item>xsl:strip-space</item>\n      <item>xsl:import</item>\n      <item>xsl:preserve-space</item>\n      <item>xsl:if</item>\n      <item>xsl:call-template</item>\n      <item>xsl:attribute-set</item>\n    </list>\n  \n    <list name=\"keytags_2.0\">\n      <item>xsl:perform-sort</item>\n      <item>xsl:import-schema</item>\n      <item>xsl:for-each-group</item>\n      <item>xsl:sequence</item>\n      <item>xsl:non-matching-substring</item>\n      <item>xsl:namespace</item>\n      <item>xsl:next-match</item>\n      <item>xsl:function</item>\n      <item>xsl:analyze-string</item>\n      <item>xsl:output-character</item>\n      <item>xsl:matching-substring</item>\n      <item>xsl:result-document</item>\n      <item>xsl:character-map</item>\n      <item>xsl:document</item>\n    </list>\n    \n    <list name=\"functions\">    \n      <item>format-number</item>\n      <item>position</item>\n      <item>lang</item>\n      <item>substring-before</item>\n      <item>substring</item>\n      <item>normalize-space</item>\n      <item>round</item>\n      <item>translate</item>\n      <item>starts-with</item>\n      <item>concat</item>\n      <item>local-name</item>\n      <item>key</item>\n      <item>count</item>\n      <item>document</item>\n      <item>system-property</item>\n      <item>current</item>\n      <item>boolean</item>\n      <item>number</item>\n      <item>contains</item>\n      <item>name</item>\n      <item>last</item>\n      <item>unparsed-entity-uri</item>\n      <item>sum</item>\n      <item>generate-id</item>\n      <item>function-available</item>\n      <item>element-available</item>\n      <item>false</item>\n      <item>substring-after</item>\n      <item>not</item>\n      <item>string-length</item>\n      <item>id</item>\n      <item>floor</item>\n      <item>ceiling</item>\n      <item>namespace-uri</item>\n      <item>true</item>\n      <item>string</item>\n      <item>text</item>\n    </list>\n\n    <list name=\"functions_2.0\">\n      <item>zero-or-one</item>\n      <item>replace</item>\n      <item>namespace-uri-for-prefix</item>\n      <item>current-grouping-key</item>\n      <item>seconds-from-duration</item>\n      <item>resolve-uri</item>\n      <item>node-kind</item>\n      <item>minutes-from-dateTime</item>\n      <item>implicit-timezone</item>\n      <item>exactly-one</item>\n      <item>current-time</item>\n      <item>current-dateTime</item>\n      <item>unordered</item>\n      <item>subtract-dates-yielding-dayTimeDuration</item>\n      <item>string-join</item>\n      <item>static-base-uri</item>\n      <item>months-from-duration</item>\n      <item>input</item>\n      <item>exists</item>\n      <item>default-collation</item>\n      <item>dateTime</item>\n      <item>current-group</item>\n      <item>current-date</item>\n      <item>collection</item>\n      <item>timezone-from-time</item>\n      <item>matches</item>\n      <item>local-name-from-QName</item>\n      <item>day-from-date</item>\n      <item>timezone-from-date</item>\n      <item>round-half-to-even</item>\n      <item>month-from-dateTime</item>\n      <item>month-from-date</item>\n      <item>hours-from-duration</item>\n      <item>escape-uri</item>\n      <item>distinct-values</item>\n      <item>avg</item>\n      <item>years-from-duration</item>\n      <item>unparsed-text</item>\n      <item>unparsed-entity-public-id</item>\n      <item>subtract-dateTimes-yielding-dayTimeDuration</item>\n      <item>subtract-dates-yielding-yearMonthDuration</item>\n      <item>string-to-codepoints</item>\n      <item>sequence-node-identical</item>\n      <item>hours-from-time</item>\n      <item>hours-from-dateTime</item>\n      <item>format-time</item>\n      <item>codepoints-to-string</item>\n      <item>trace</item>\n      <item>tokenize</item>\n      <item>subtract-dateTimes-yielding-yearMonthDuration</item>\n      <item>subsequence</item>\n      <item>seconds-from-dateTime</item>\n      <item>regex-group</item>\n      <item>one-or-more</item>\n      <item>node-name</item>\n      <item>namespace-uri-from-QName</item>\n      <item>min</item>\n      <item>idref</item>\n      <item>format-dateTime</item>\n      <item>format-date</item>\n      <item>days-from-duration</item>\n      <item>compare</item>\n      <item>base-uri</item>\n      <item>seconds-from-time</item>\n      <item>in-scope-prefixes</item>\n      <item>expanded-QName</item>\n      <item>adjust-date-to-timezone</item>\n      <item>year-from-date</item>\n      <item>resolve-QName</item>\n      <item>remove</item>\n      <item>QName</item>\n      <item>minutes-from-time</item>\n      <item>max</item>\n      <item>lower-case</item>\n      <item>index-of</item>\n      <item>doc</item>\n      <item>deep-equal</item>\n      <item>data</item>\n      <item>minutes-from-duration</item>\n      <item>adjust-dateTime-to-timezone</item>\n      <item>abs</item>\n      <item>timezone-from-dateTime</item>\n      <item>reverse</item>\n      <item>error</item>\n      <item>ends-with</item>\n      <item>day-from-dateTime</item>\n      <item>year-from-dateTime</item>\n      <item>upper-case</item>\n      <item>root</item>\n      <item>normalize-unicode</item>\n      <item>empty</item>\n      <item>insert-before</item>\n      <item>document-uri</item>\n      <item>adjust-time-to-timezone</item>\n    </list>\n    \n    <contexts>\n\n       <context name=\"normalText\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <StringDetect attribute=\"Comment\" context=\"comment\" String=\"&lt;!--\" beginRegion=\"comment\"/>\n         \n         <StringDetect attribute=\"CDATA\" context=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n         <RegExpr attribute=\"Doctype\" context=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" beginRegion=\"doctype\" />\n         <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:_-]*\" beginRegion=\"pi\" />\n\n         <DetectChar attribute=\"Tag\" context=\"tagname\" char=\"&lt;\" />\n         <RegExpr attribute=\"Entity Reference\" context=\"#stay\" String=\"&entref;\" />\n       </context>\n\n\n       \n       <context name=\"CDATA\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <DetectSpaces />\n         <DetectIdentifier />\n         <StringDetect attribute=\"CDATA\" context=\"#pop\" String=\"]]&gt;\" endRegion=\"cdata\" />\n         <StringDetect attribute=\"Entity Reference\" context=\"#stay\" String=\"]]&amp;gt;\" />\n       </context>\n       \n       <context name=\"PI\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n       </context>\n       \n       <context name=\"Doctype\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" endRegion=\"doctype\" />\n         <DetectChar attribute=\"Doctype\" context=\"Doctype Internal Subset\" char=\"[\" beginRegion=\"int_subset\" />\n       </context>\n       \n       <context name=\"Doctype Internal Subset\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"]\" endRegion=\"int_subset\" />\n         <RegExpr attribute=\"Doctype\" context=\"Doctype Markupdecl\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n         <StringDetect attribute=\"Comment\" context=\"comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n         <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:_-]*\" beginRegion=\"pi\" />\n         <IncludeRules context=\"FindPEntityRefs\" />\n       </context>\n       \n       <context name=\"Doctype Markupdecl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n         <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n         <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n       </context>\n       \n       <context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n         <IncludeRules context=\"FindPEntityRefs\" />\n       </context>\n       \n       <context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n         <IncludeRules context=\"FindPEntityRefs\" />\n       </context>\n       \n       <context name=\"detectEntRef\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <RegExpr attribute=\"Entity Reference\" context=\"#stay\" String=\"&entref;\" />\n       </context>\n       <context name=\"FindPEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n         <RegExpr attribute=\"Entity Reference\" context=\"#stay\" String=\"&entref;\" />\n         <RegExpr attribute=\"PEntity Reference\" context=\"#stay\" String=\"%&qname;;\" />\n         <AnyChar attribute=\"Invalid\" context=\"#stay\" String=\"&amp;%\" />\n       </context>\n       \n       <context name=\"tagname\" attribute=\"Tag\" lineEndContext=\"#stay\">\n         <keyword attribute=\"XSLT Tag\" context=\"xattributes\" String=\"keytags\" />\n         <keyword attribute=\"XSLT 2.0 Tag\" context=\"xattributes\" String=\"keytags_2.0\" />\n         <RegExpr attribute=\"Attribute\" context=\"attributes\" String=\"\\s*\" />\n         <DetectChar attribute=\"Tag\" context=\"#pop\" char=\"&gt;\" />\n       </context>\n       \n       <context name=\"attributes\" attribute=\"Attribute\" lineEndContext=\"#stay\">\n         <Detect2Chars attribute=\"Tag\" context=\"#pop#pop\" char=\"/\" char1=\"&gt;\" />\n         <DetectChar attribute=\"Tag\" context=\"#pop#pop\" char=\"&gt;\" />\n         <RegExpr attribute=\"Normal Text\" context=\"attrValue\" String=\"\\s*=\\s*\" />\n       </context>\n\n       <context name=\"attrValue\" attribute=\"Invalid\" lineEndContext=\"#stay\">\n         <Detect2Chars attribute=\"Invalid\" context=\"#pop#pop#pop\" char=\"/\" char1=\"&gt;\" />\n         <DetectChar attribute=\"Invalid\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n         <DetectChar attribute=\"Attribute Value\" context=\"string\" char=\"&quot;\" />\n         <DetectChar attribute=\"Attribute Value\" context=\"sqstring\" char=\"'\" />\n       </context>\n\n       <context name=\"xattributes\" attribute=\"Attribute\" lineEndContext=\"#stay\">\n          <Detect2Chars attribute=\"Tag\" context=\"#pop#pop\" char=\"/\" char1=\"&gt;\" />\n          <DetectChar attribute=\"Tag\" context=\"#pop#pop\" char=\"&gt;\" />\n          <RegExpr attribute=\"Attribute\" context=\"xattrValue\" String=\"select\\s*=\\s*\" />\n          <RegExpr attribute=\"Attribute\" context=\"xattrValue\" String=\"test\\s*=\\s*\" />\n          <RegExpr attribute=\"Attribute\" context=\"xattrValue\" String=\"match\\s*=\\s*\" />\n          <RegExpr attribute=\"Attribute\" context=\"attrValue\" String=\"\\s*=\\s*\" />\n       </context>\n\n       <context name=\"xattrValue\" attribute=\"Invalid\" lineEndContext=\"#stay\">\n         <Detect2Chars attribute=\"Invalid\" context=\"#pop#pop#pop\" char=\"/\" char1=\"&gt;\" />\n         <DetectChar attribute=\"Invalid\" context=\"#pop#pop#pop\" char=\"&gt;\" />\n         <DetectChar attribute=\"XPath\" context=\"xpath\" char=\"&quot;\" />\n         <DetectChar attribute=\"XPath\" context=\"sqxpath\" char=\"'\" />\n       </context>\n       \n       \n       <context name=\"string\" attribute=\"Attribute Value\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"XPath\" context=\"xpath\" char=\"{\" />\n         <DetectChar attribute=\"Attribute Value\" context=\"#pop#pop\" char=\"&quot;\" />\n         <IncludeRules context=\"detectEntRef\" />\n       </context>\n\n       <context name=\"sqstring\" attribute=\"Attribute Value\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"XPath\" context=\"sqxpath\" char=\"{\" />\n         <DetectChar attribute=\"Attribute Value\" context=\"#pop#pop\" char=\"'\" />\n         <IncludeRules context=\"detectEntRef\" />\n       </context>\n       \n       <context name=\"comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n         <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n         <RegExpr attribute=\"Invalid\" context=\"#stay\" String=\"-(-(?!-&gt;))+\" />\n         <RegExpr attribute=\"Alert\" context=\"#stay\" String=\"(FIXME|TODO|HACK)\" />\n       </context>\n\n       <context name=\"xpath\" attribute=\"XPath\" lineEndContext=\"#stay\">\n         <keyword attribute=\"XPath/ XSLT Function\" context=\"#stay\" String=\"functions\" />\n         <keyword attribute=\"XPath 2.0/ XSLT 2.0 Function\" context=\"#stay\" String=\"functions_2.0\" />\n         <RegExpr attribute=\"XPath Axis\" context=\"#stay\" String=\"(&axisname;)::\" />\n         <DetectChar attribute=\"XPath\" context=\"#pop\" char=\"}\" />\n         <DetectChar attribute=\"XPath String\" context=\"sqxpathstring\" char=\"'\" />\n         <DetectChar attribute=\"XPath\" context=\"#pop#pop\" char=\"&quot;\" />\n         <RegExpr attribute=\"XPath Attribute\" context=\"#stay\" String=\"@&qname;\" />\n         <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$&qname;\" />\n         <RegExpr attribute=\"XPath\" context=\"#stay\" String=\"&qname;\" />\n         <DetectChar attribute=\"Invalid\" context=\"#stay\" char=\"$\" />\n         <IncludeRules context=\"detectEntRef\" />\n       </context>\n       \n       <context name=\"sqxpath\" attribute=\"XPath\" lineEndContext=\"#stay\">\n         <keyword attribute=\"XPath/ XSLT Function\" context=\"#stay\" String=\"functions\" />\n         <keyword attribute=\"XPath 2.0/ XSLT 2.0 Function\" context=\"#stay\" String=\"functions_2.0\" />\n         <RegExpr attribute=\"XPath Axis\" context=\"#stay\" String=\"(&axisname;)::\" />\n         <DetectChar attribute=\"XPath\" context=\"#pop\" char=\"}\" />\n         <DetectChar attribute=\"XPath String\" context=\"xpathstring\" char=\"&quot;\" />\n         <DetectChar attribute=\"XPath\" context=\"#pop#pop\" char=\"'\" />\n         <RegExpr attribute=\"XPath Attribute\" context=\"#stay\" String=\"@&qname;\" />\n         <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$&qname;\" />\n         <RegExpr attribute=\"XPath\" context=\"#stay\" String=\"&qname;\" />\n         <DetectChar attribute=\"Invalid\" context=\"#stay\" char=\"$\" />\n         <IncludeRules context=\"detectEntRef\" />\n       </context>\n       \n       <context name=\"sqxpathstring\" attribute=\"XPath String\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"XPath String\" context=\"#pop\" char=\"'\" />\n         <IncludeRules context=\"detectEntRef\" />\n       </context>\n       \n       <context name=\"xpathstring\" attribute=\"XPath String\" lineEndContext=\"#stay\">\n         <DetectChar attribute=\"XPath String\" context=\"#pop\" char=\"&quot;\" />\n         <IncludeRules context=\"detectEntRef\" />\n       </context>\n       \n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Tag\" defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Attribute\" defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Value\" defStyleNum=\"dsAttribute\"/>\n      <itemData name=\"Invalid\" defStyleNum=\"dsError\"/>\n      <itemData name=\"Alert\" defStyleNum=\"dsAlert\"/>\n      <itemData name=\"Attribute Value\" defStyleNum=\"dsString\" color=\"#800000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"XPath\" defStyleNum=\"dsOthers\" color=\"#008080\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"XPath String\" defStyleNum=\"dsString\" color=\"#800000\" selColor=\"#ffffff\" bold=\"0\" italic=\"0\"/>\n      <itemData name=\"XPath Axis\" defStyleNum=\"dsKeyword\" color=\"#008080\" selColor=\"#ffffff\" bold=\"0\" italic=\"1\"/>\n      <itemData name=\"XPath/ XSLT Function\" defStyleNum=\"dsKeyword\" color=\"#008080\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"XPath 2.0/ XSLT 2.0 Function\" defStyleNum=\"dsKeyword\" color=\"#008080\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\"/>\n      <itemData name=\"XPath Attribute\" defStyleNum=\"dsNormal\" color=\"#008080\" selColor=\"#ffffff\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"Variable\" defStyleNum=\"dsNormal\" color=\"#008080\" selColor=\"#ffffff\" bold=\"0\" italic=\"1\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\"/>\n      <itemData name=\"XSLT Tag\" defStyleNum=\"dsKeyword\" color=\"#000080\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"XSLT 2.0 Tag\" defStyleNum=\"dsKeyword\" color=\"#000080\" selColor=\"#ffffff\" bold=\"1\" italic=\"0\" />\n      <itemData name=\"Entity Reference\" defStyleNum=\"dsDecVal\" />\n\n      <itemData name=\"CDATA\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n      <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" />\n      <itemData name=\"PEntity Reference\" defStyleNum=\"dsDecVal\" />\n\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n    </comments>\n    <keywords casesensitive=\"0\" weakDeliminator=\"-:\" additionalDeliminator=\"&quot;{}\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/xul.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n\t<!ENTITY name    \"[A-Za-z_:][\\w.:_-]*\">\n\t<!ENTITY entref  \"&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);\">\n]>\n<language name=\"XUL\" version=\"5\" kateversion=\"5.0\" section=\"Markup\" extensions=\"*.xul;*.xbl\" mimetype=\"text/xul\" casesensitive=\"1\" indenter=\"xml\" author=\"Wilbert Berendsen (wilbert@kde.nl), Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net), Marc Dassonneville (marc.dassonneville@gmail.com)\" license=\"LGPL\">\n\n<highlighting>\n   <list name=\"keywords\">\n      <item>if</item>\n      <item>else</item>\n      <item>for</item>\n      <item>in</item>\n      <item>while</item>\n      <item>do</item>\n      <item>continue</item>\n      <item>break</item>\n      <item>with</item>\n      <item>try</item>\n      <item>catch</item>\n      <item>finally</item>\n      <item>switch</item>\n      <item>case</item>\n      <item>new</item>\n      <item>var</item>\n      <item>function</item>\n      <item>return</item>\n      <item>delete</item>\n      <item>true</item>\n      <item>false</item>\n      <item>void</item>\n      <item>throw</item>\n      <item>typeof</item>\n      <item>const</item>\n      <item>default</item>\n   </list>\n   <list name=\"functions\">\n      <item>escape</item>\n      <item>isFinite</item>\n      <item>isNaN</item>\n      <item>Number</item>\n      <item>parseFloat</item>\n      <item>parseInt</item>\n      <item>reload</item>\n      <item>taint</item>\n      <item>unescape</item>\n      <item>untaint</item>\n      <item>write</item>\n   </list>\n   <list name=\"objects\">\n      <item>Anchor</item>\n      <item>Applet</item>\n      <item>Area</item>\n      <item>Array</item>\n      <item>Boolean</item>\n      <item>Button</item>\n      <item>Checkbox</item>\n      <item>Date</item>\n      <item>document</item>\n      <item>window</item>\n      <item>Image</item>\n      <item>FileUpload</item>\n      <item>Form</item>\n      <item>Frame</item>\n      <item>Function</item>\n      <item>Hidden</item>\n      <item>Link</item>\n      <item>MimeType</item>\n      <item>Math</item>\n      <item>Max</item>\n      <item>Min</item>\n      <item>Layer</item>\n      <item>navigator</item>\n      <item>Object</item>\n      <item>Password</item>\n      <item>Plugin</item>\n      <item>Radio</item>\n      <item>RegExp</item>\n      <item>Reset</item>\n      <item>Screen</item>\n      <item>Select</item>\n      <item>String</item>\n      <item>Text</item>\n      <item>Textarea</item>\n      <item>this</item>\n      <item>Window</item>\n   </list>\n   <list name=\"math\">\n      <item>abs</item>\n      <item>acos</item>\n      <item>asin</item>\n      <item>atan</item>\n      <item>atan2</item>\n      <item>ceil</item>\n      <item>cos</item>\n      <item>ctg</item>\n      <item>E</item>\n      <item>exp</item>\n      <item>floor</item>\n      <item>LN2</item>\n      <item>LN10</item>\n      <item>log</item>\n      <item>LOG2E</item>\n      <item>LOG10E</item>\n      <item>PI</item>\n      <item>pow</item>\n      <item>round</item>\n      <item>sin</item>\n      <item>sqrt</item>\n      <item>SQRT1_2</item>\n      <item>SQRT2</item>\n      <item>tan</item>\n   </list>\n   <list name=\"events\">\n      <item>onAbort</item>\n      <item>onBlur</item>\n      <item>onChange</item>\n      <item>onClick</item>\n      <item>onError</item>\n      <item>onFocus</item>\n      <item>onLoad</item>\n      <item>onMouseOut</item>\n      <item>onMouseOver</item>\n      <item>onReset</item>\n      <item>onSelect</item>\n      <item>onSubmit</item>\n      <item>onUnload</item>\n   </list>\n   <list name=\"methods\">\n      <item>above</item>\n      <item>action</item>\n      <item>alinkColor</item>\n      <item>alert</item>\n      <item>anchor</item>\n      <item>anchors</item>\n      <item>appCodeName</item>\n      <item>applets</item>\n      <item>apply</item>\n      <item>appName</item>\n      <item>appVersion</item>\n      <item>argument</item>\n      <item>arguments</item>\n      <item>arity</item>\n      <item>availHeight</item>\n      <item>availWidth</item>\n      <item>back</item>\n      <item>background</item>\n      <item>below</item>\n      <item>bgColor</item>\n      <item>border</item>\n      <item>big</item>\n      <item>blink</item>\n      <item>blur</item>\n      <item>bold</item>\n      <item>border</item>\n      <item>call</item>\n      <item>caller</item>\n      <item>charAt</item>\n      <item>charCodeAt</item>\n      <item>checked</item>\n      <item>clearInterval</item>\n      <item>clearTimeout</item>\n      <item>click</item>\n      <item>clip</item>\n      <item>close</item>\n      <item>closed</item>\n      <item>colorDepth</item>\n      <item>complete</item>\n      <item>compile</item>\n      <item>constructor</item>\n      <item>confirm</item>\n      <item>cookie</item>\n      <item>current</item>\n      <item>cursor</item>\n      <item>data</item>\n      <item>defaultChecked</item>\n      <item>defaultSelected</item>\n      <item>defaultStatus</item>\n      <item>defaultValue</item>\n      <item>description</item>\n      <item>disableExternalCapture</item>\n      <item>domain</item>\n      <item>elements</item>\n      <item>embeds</item>\n      <item>enabledPlugin</item>\n      <item>enableExternalCapture</item>\n      <item>encoding</item>\n      <item>eval</item>\n      <item>exec</item>\n      <item>fgColor</item>\n      <item>filename</item>\n      <item>find</item>\n      <item>fixed</item>\n      <item>focus</item>\n      <item>fontcolor</item>\n      <item>fontsize</item>\n      <item>form</item>\n      <item>forms</item>\n      <item>formName</item>\n      <item>forward</item>\n      <item>frames</item>\n      <item>fromCharCode</item>\n      <item>getDate</item>\n      <item>getDay</item>\n      <item>getHours</item>\n      <item>getMiliseconds</item>\n      <item>getMinutes</item>\n      <item>getMonth</item>\n      <item>getSeconds</item>\n      <item>getSelection</item>\n      <item>getTime</item>\n      <item>getTimezoneOffset</item>\n      <item>getUTCDate</item>\n      <item>getUTCDay</item>\n      <item>getUTCFullYear</item>\n      <item>getUTCHours</item>\n      <item>getUTCMilliseconds</item>\n      <item>getUTCMinutes</item>\n      <item>getUTCMonth</item>\n      <item>getUTCSeconds</item>\n      <item>getYear</item>\n      <item>global</item>\n      <item>go</item>\n      <item>hash</item>\n      <item>height</item>\n      <item>history</item>\n      <item>home</item>\n      <item>host</item>\n      <item>hostname</item>\n      <item>href</item>\n      <item>hspace</item>\n      <item>ignoreCase</item>\n      <item>images</item>\n      <item>index</item>\n      <item>indexOf</item>\n      <item>innerHeight</item>\n      <item>innerWidth</item>\n      <item>input</item>\n      <item>italics</item>\n      <item>javaEnabled</item>\n      <item>join</item>\n      <item>language</item>\n      <item>lastIndex</item>\n      <item>lastIndexOf</item>\n      <item>lastModified</item>\n      <item>lastParen</item>\n      <item>layers</item>\n      <item>layerX</item>\n      <item>layerY</item>\n      <item>left</item>\n      <item>leftContext</item>\n      <item>length</item>\n      <item>link</item>\n      <item>linkColor</item>\n      <item>links</item>\n      <item>location</item>\n      <item>locationbar</item>\n      <item>load</item>\n      <item>lowsrc</item>\n      <item>match</item>\n      <item>MAX_VALUE</item>\n      <item>menubar</item>\n      <item>method</item>\n      <item>mimeTypes</item>\n      <item>MIN_VALUE</item>\n      <item>modifiers</item>\n      <item>moveAbove</item>\n      <item>moveBelow</item>\n      <item>moveBy</item>\n      <item>moveTo</item>\n      <item>moveToAbsolute</item>\n      <item>multiline</item>\n      <item>name</item>\n      <item>NaN</item>\n      <item>NEGATIVE_INFINITY</item>\n      <item>negative_infinity</item>\n      <item>next</item>\n      <item>open</item>\n      <item>opener</item>\n      <item>options</item>\n      <item>outerHeight</item>\n      <item>outerWidth</item>\n      <item>pageX</item>\n      <item>pageY</item>\n      <item>pageXoffset</item>\n      <item>pageYoffset</item>\n      <item>parent</item>\n      <item>parse</item>\n      <item>pathname</item>\n      <item>personalbar</item>\n      <item>pixelDepth</item>\n      <item>platform</item>\n      <item>plugins</item>\n      <item>pop</item>\n      <item>port</item>\n      <item>POSITIVE_INFINITY</item>\n      <item>positive_infinity</item>\n      <item>preference</item>\n      <item>previous</item>\n      <item>print</item>\n      <item>prompt</item>\n      <item>protocol</item>\n      <item>prototype</item>\n      <item>push</item>\n      <item>referrer</item>\n      <item>refresh</item>\n      <item>releaseEvents</item>\n      <item>reload</item>\n      <item>replace</item>\n      <item>reset</item>\n      <item>resizeBy</item>\n      <item>resizeTo</item>\n      <item>reverse</item>\n      <item>rightContext</item>\n      <item>screenX</item>\n      <item>screenY</item>\n      <item>scroll</item>\n      <item>scrollbar</item>\n      <item>scrollBy</item>\n      <item>scrollTo</item>\n      <item>search</item>\n      <item>select</item>\n      <item>selected</item>\n      <item>selectedIndex</item>\n      <item>self</item>\n      <item>setDate</item>\n      <item>setHours</item>\n      <item>setMinutes</item>\n      <item>setMonth</item>\n      <item>setSeconds</item>\n      <item>setTime</item>\n      <item>setTimeout</item>\n      <item>setUTCDate</item>\n      <item>setUTCDay</item>\n      <item>setUTCFullYear</item>\n      <item>setUTCHours</item>\n      <item>setUTCMilliseconds</item>\n      <item>setUTCMinutes</item>\n      <item>setUTCMonth</item>\n      <item>setUTCSeconds</item>\n      <item>setYear</item>\n      <item>shift</item>\n      <item>siblingAbove</item>\n      <item>siblingBelow</item>\n      <item>small</item>\n      <item>sort</item>\n      <item>source</item>\n      <item>splice</item>\n      <item>split</item>\n      <item>src</item>\n      <item>status</item>\n      <item>statusbar</item>\n      <item>strike</item>\n      <item>sub</item>\n      <item>submit</item>\n      <item>substr</item>\n      <item>substring</item>\n      <item>suffixes</item>\n      <item>sup</item>\n      <item>taintEnabled</item>\n      <item>target</item>\n      <item>test</item>\n      <item>text</item>\n      <item>title</item>\n      <item>toGMTString</item>\n      <item>toLocaleString</item>\n      <item>toLowerCase</item>\n      <item>toolbar</item>\n      <item>toSource</item>\n      <item>toString</item>\n      <item>top</item>\n      <item>toUpperCase</item>\n      <item>toUTCString</item>\n      <item>type</item>\n      <item>URL</item>\n      <item>unshift</item>\n      <item>unwatch</item>\n      <item>userAgent</item>\n      <item>UTC</item>\n      <item>value</item>\n      <item>valueOf</item>\n      <item>visibility</item>\n      <item>vlinkColor</item>\n      <item>vspace</item>\n      <item>width</item>\n      <item>watch</item>\n      <item>which</item>\n      <item>width</item>\n      <item>write</item>\n      <item>writeln</item>\n      <item>x</item>\n      <item>y</item>\n      <item>zIndex</item>\n    </list>\n<contexts>\n  <context name=\"Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"FindXML\" />\n  </context>\n\n  <context name=\"FindXML\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectSpaces />\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <StringDetect attribute=\"CDATA\" context=\"CDATA\" String=\"&lt;![CDATA[\" beginRegion=\"cdata\" />\n    <RegExpr attribute=\"Doctype\" context=\"Doctype\" String=\"&lt;!DOCTYPE\\s+\" beginRegion=\"doctype\" />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:_-]*\" beginRegion=\"pi\" />\n    <RegExpr attribute=\"Element\" context=\"Element\" String=\"&lt;&name;\" beginRegion=\"element\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n    <DetectIdentifier />\n  </context>\n\n  <context name=\"FindEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;&lt;\" />\n  </context>\n\n  <context name=\"FindPEntityRefs\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"EntityRef\" context=\"#stay\" String=\"&entref;\" />\n    <RegExpr attribute=\"PEntityRef\" context=\"#stay\" String=\"%&name;;\" />\n    <AnyChar attribute=\"Error\" context=\"#stay\" String=\"&amp;%\" />\n  </context>\n\n\n  <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <DetectSpaces />\n    <StringDetect attribute=\"Comment\" context=\"#pop\" String=\"--&gt;\" endRegion=\"comment\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"-(-(?!-&gt;))+\" />\n    <IncludeRules context=\"##Alerts\" />\n    <DetectIdentifier />\n  </context>\n\n  <context name=\"PI\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Processing Instruction\" context=\"#pop\" char=\"?\" char1=\"&gt;\" endRegion=\"pi\" />\n  </context>\n\n  <context name=\"Doctype\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" endRegion=\"doctype\" />\n    <DetectChar attribute=\"Doctype\" context=\"Doctype Internal Subset\" char=\"[\" beginRegion=\"int_subset\" />\n  </context>\n\n  <context name=\"Doctype Internal Subset\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"]\" endRegion=\"int_subset\" />\n    <RegExpr attribute=\"Doctype\" context=\"Doctype Markupdecl\" String=\"&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\\b\" />\n    <StringDetect attribute=\"Comment\" context=\"Comment\" String=\"&lt;!--\" beginRegion=\"comment\" />\n    <RegExpr attribute=\"Processing Instruction\" context=\"PI\" String=\"&lt;\\?[\\w:_-]*\" beginRegion=\"pi\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Doctype\" context=\"#pop\" char=\"&gt;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Doctype Markupdecl SQ\" char=\"&apos;\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Doctype Markupdecl SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindPEntityRefs\" />\n  </context>\n\n  <context name=\"Element\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Element\" context=\"#pop\" char=\"/\" char1=\"&gt;\" endRegion=\"element\" />\n    <DetectChar attribute=\"Element\" context=\"El Content\" char=\"&gt;\" />\n    <RegExpr attribute=\"Attribute\" context=\"Attribute\" String=\"^&name;\" />\n    <RegExpr attribute=\"Attribute\" context=\"Attribute\" String=\"\\s+&name;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"El Content\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Element\" context=\"El End\" String=\"&lt;/&name;\" />\n    <IncludeRules context=\"FindXML\" />\n  </context>\n\n  <context name=\"El End\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Element\" context=\"#pop#pop#pop\" char=\"&gt;\" endRegion=\"element\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Attribute\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Attribute\" context=\"Value\" char=\"=\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Value\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"Value DQ\" char=\"&quot;\" />\n    <DetectChar attribute=\"Value\" context=\"Value SQ\" char=\"&apos;\" />\n    <RegExpr attribute=\"Error\" context=\"#stay\" String=\"\\S\" />\n  </context>\n\n  <context name=\"Value DQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop#pop\" char=\"&quot;\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <context name=\"Value SQ\" attribute=\"Value\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Value\" context=\"#pop#pop#pop\" char=\"&apos;\" />\n    <IncludeRules context=\"FindEntityRefs\" />\n  </context>\n\n  <context name=\"CDATA\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n     <StringDetect attribute=\"CDATA\" context=\"#pop\" String=\"]]&gt;\" endRegion=\"cdata\" />\n     <StringDetect attribute=\"EntityRef\" context=\"#stay\" String=\"]]&amp;gt;\" />\n     <DetectSpaces/>\n     <StringDetect attribute=\"Region Marker\" context=\"region_marker\" String=\"//BEGIN\" beginRegion=\"Region1\"/>\n     <StringDetect attribute=\"Region Marker\" context=\"region_marker\" String=\"//END\" endRegion=\"Region1\"/>\n     <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n     <keyword attribute=\"Function\" context=\"#stay\" String=\"functions\" />\n     <keyword attribute=\"Objects\" context=\"#stay\" String=\"objects\" />\n     <keyword attribute=\"Math\" context=\"#stay\" String=\"math\" />\n     <keyword attribute=\"Events\" context=\"#stay\" String=\"events\" />\n     <keyword attribute=\"Data Type\" context=\"#stay\" String=\"methods\" />\n     <DetectIdentifier/>\n     <Float attribute=\"Float\" context=\"#stay\" />\n     <Int attribute=\"Decimal\" context=\"#stay\" />\n     <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n     <DetectChar attribute=\"String\" context=\"String 1\" char=\"'\"/>\n     <Detect2Chars attribute=\"Comment\" context=\"JSComment\" char=\"/\" char1=\"/\"/>\n     <Detect2Chars attribute=\"Comment\" context=\"Multi/inline Comment\" char=\"/\" char1=\"*\" beginRegion=\"Comment\"/>\n     <RegExpr attribute=\"Normal Text\" context=\"(Internal regex catch)\" String=\"[=?:]\" />\n     <RegExpr attribute=\"Normal Text\" context=\"(Internal regex catch)\" String=\"\\(\" />\n     <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"{\" beginRegion=\"Brace1\" />\n     <DetectChar attribute=\"Symbol\" context=\"#stay\" char=\"}\" endRegion=\"Brace1\" />\n     <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\":!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;\"/>\n  </context>\n  \n  <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String\">\n     <DetectIdentifier/>\n     <HlCStringChar attribute=\"String Char\" context=\"#stay\"/>\n     <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n  </context>\n  <context attribute=\"String Char\" lineEndContext=\"#pop\" name=\"String 1\">\n     <DetectIdentifier/>\n     <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\"/>\n     <DetectChar attribute=\"String Char\" context=\"#pop\" char=\"'\"/>\n  </context>\n\n  <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"JSComment\">\n     <DetectSpaces />\n     <IncludeRules context=\"##Alerts\" />\n     <DetectIdentifier />\n  </context>\n  <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Multi/inline Comment\">\n     <IncludeRules context=\"##Alerts\" />\n     <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" endRegion=\"Comment\"/>\n  </context>\n  \n  <context attribute=\"Regular Expression\" lineEndContext=\"#stay\" name=\"Regular Expression\">\n     <RegExpr attribute=\"Regular Expression\" context=\"#pop#pop#pop\" String=\"/[ig]{0,2}\" />\n     <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\{[\\d, ]+\\}\" />\n     <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\\\[bB]\" />\n     <RegExpr attribute=\"Pattern Character Class\" context=\"#stay\" String=\"\\\\[nrtvfDdSsWw]\" />\n     <DetectChar attribute=\"Pattern Character Class\" context=\"(charclass caret first check)\" char=\"[\" />\n     <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\\\.\" />\n     <RegExpr attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"\\$(?=/)\" />\n     <AnyChar attribute=\"Pattern Internal Operator\" context=\"#stay\" String=\"?+*()|\" />\n  </context>\n  <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"(Internal regex catch)\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n     <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"\\s*\" />\n     <RegExpr attribute=\"Regular Expression\" context=\"#pop\" String=\"//(?=;)\" />\n     <Detect2Chars attribute=\"Comment\" context=\"JSComment\" char=\"/\" char1=\"/\" />\n     <Detect2Chars attribute=\"Comment\" context=\"Multi/inline Comment\" char=\"/\" char1=\"*\" />\n     <DetectChar attribute=\"Regular Expression\" context=\"(regex caret first check)\" char=\"/\" />\n  </context>\n  <context attribute=\"Pattern Character Class\" lineEndContext=\"#stay\" name=\"Regular Expression Character Class\">\n     <RegExpr attribute=\"Pattern Character Class\" context=\"#stay\" String=\"\\\\[\\[\\]]\" />\n     <DetectChar attribute=\"Pattern Character Class\" context=\"#pop#pop\" char=\"]\" />\n  </context>\n  <context attribute=\"Pattern Internal Operator\" lineEndContext=\"#pop\" name=\"(regex caret first check)\" fallthrough=\"true\" fallthroughContext=\"Regular Expression\">\n     <DetectChar attribute=\"Pattern Internal Operator\" context=\"Regular Expression\" char=\"^\" />\n  </context>\n  <context attribute=\"Pattern Internal Operator\" lineEndContext=\"#pop\" name=\"(charclass caret first check)\" fallthrough=\"true\" fallthroughContext=\"Regular Expression Character Class\">\n     <DetectChar attribute=\"Pattern Internal Operator\" context=\"Regular Expression Character Class\" char=\"^\" />\n  </context>\n  \n  <context name=\"region_marker\" attribute=\"Region Marker\" lineEndContext=\"#pop\" >\n     <DetectIdentifier />\n     <DetectSpaces />\n  </context>\n\n</contexts>\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n  <itemData name=\"CDATA\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n  <itemData name=\"Processing Instruction\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Doctype\" defStyleNum=\"dsDataType\" bold=\"1\" />\n  <itemData name=\"Element\" defStyleNum=\"dsKeyword\" />\n  <itemData name=\"Attribute\" defStyleNum=\"dsOthers\" />\n  <itemData name=\"Value\" defStyleNum=\"dsString\" />\n  <itemData name=\"EntityRef\" defStyleNum=\"dsDecVal\" />\n  <itemData name=\"PEntityRef\" defStyleNum=\"dsDecVal\" />\n  <itemData name=\"Error\" defStyleNum=\"dsError\" />\n\n  <itemData name=\"Keyword\"      defStyleNum=\"dsKeyword\"/>\n  <itemData name=\"Function\" defStyleNum=\"dsFunction\"/>\n  <itemData name=\"Objects\" defStyleNum=\"dsKeyword\" color=\"#008000\" selColor=\"#00ffff\" bold=\"0\" italic=\"0\"/>\n  <itemData name=\"Math\" defStyleNum=\"dsKeyword\" color=\"#DBA716\" selColor=\"#00ffff\" bold=\"0\" italic=\"0\"/>\n  <itemData name=\"Events\" defStyleNum=\"dsKeyword\" color=\"#F766D5\" selColor=\"#00ffff\" bold=\"0\" italic=\"0\"/>\n  <itemData name=\"Data Type\"    defStyleNum=\"dsDataType\"/>\n  <itemData name=\"Decimal\"      defStyleNum=\"dsDecVal\"/>\n  <itemData name=\"Float\"        defStyleNum=\"dsFloat\"/>\n  <itemData name=\"String\"       defStyleNum=\"dsString\"/>\n  <itemData name=\"String Char\"  defStyleNum=\"dsChar\"/>\n  <itemData name=\"Symbol\"       defStyleNum=\"dsNormal\"/>\n  <itemData name=\"Regular Expression\" defStyleNum=\"dsOthers\"   />\n  <itemData name=\"Pattern Internal Operator\" defStyleNum=\"dsFloat\" />\n  <itemData name=\"Pattern Character Class\" defStyleNum=\"dsBaseN\" />\n  <itemData name=\"Region Marker\" defStyleNum=\"dsRegionMarker\" />\n</itemDatas>\n\n</highlighting>\n<general>\n  <comments>\n    <comment name=\"multiLine\" start=\"&lt;!--\" end=\"--&gt;\" />\n    <comment name=\"singleLine\" start=\"//\" />\n    <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n  </comments>\n  <keywords casesensitive=\"1\" />\n</general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/yacas.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"yacas\" version=\"3\" kateversion=\"2.2\" section=\"Scientific\" extensions=\"*.ys\" mimetype=\"text/x-yacassrc\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>And</item>\n      <item>ApplyPure</item>\n      <item>ArrayCreate</item>\n      <item>ArrayGet</item>\n      <item>ArraySet</item>\n      <item>ArraySize</item>\n      <item>Atom</item>\n      <item>Berlekamp</item>\n      <item>BitAnd</item>\n      <item>BitOr</item>\n      <item>BitXor</item>\n      <item>Bodied</item>\n      <item>CTokenizer</item>\n      <item>Check</item>\n      <item>Clear</item>\n      <item>CommonLispTokenizer</item>\n      <item>Concat</item>\n      <item>ConcatStrings</item>\n      <item>CurrentFile</item>\n      <item>CurrentLine</item>\n      <item>CustomEval</item>\n      <item>CustomEval'Expression</item>\n      <item>CustomEval'Locals</item>\n      <item>CustomEval'Result</item>\n      <item>CustomEval'Stop</item>\n      <item>DefLoad</item>\n      <item>DefLoadFunction</item>\n      <item>DefMacroRuleBase</item>\n      <item>DefMacroRuleBaseListed</item>\n      <item>DefaultDirectory</item>\n      <item>DefaultTokenizer</item>\n      <item>Delete</item>\n      <item>DestructiveDelete</item>\n      <item>DestructiveInsert</item>\n      <item>DestructiveReplace</item>\n      <item>DestructiveReverse</item>\n      <item>DllEnumerate</item>\n      <item>DllLoad</item>\n      <item>DllUnload</item>\n      <item>Equals</item>\n      <item>Eval</item>\n      <item>FastArcCos</item>\n      <item>FastArcSin</item>\n      <item>FastArcTan</item>\n      <item>FastAssoc</item>\n      <item>FastCos</item>\n      <item>FastExp</item>\n      <item>FastIsPrime</item>\n      <item>FastLog</item>\n      <item>FastPower</item>\n      <item>FastSin</item>\n      <item>FastTan</item>\n      <item>FindFile</item>\n      <item>FindFunction</item>\n      <item>FlatCopy</item>\n      <item>FromBase</item>\n      <item>FromFile</item>\n      <item>FromString</item>\n      <item>FullForm</item>\n      <item>GarbageCollect</item>\n      <item>GenericTypeName</item>\n      <item>GetExtraInfo</item>\n      <item>GetPrecision</item>\n      <item>GreaterThan</item>\n      <item>Head</item>\n      <item>Hold</item>\n      <item>HoldArg</item>\n      <item>If</item>\n      <item>Infix</item>\n      <item>Insert</item>\n      <item>IsAtom</item>\n      <item>IsBodied</item>\n      <item>IsBound</item>\n      <item>IsFunction</item>\n      <item>IsGeneric</item>\n      <item>IsInfix</item>\n      <item>IsInteger</item>\n      <item>IsList</item>\n      <item>IsNumber</item>\n      <item>IsPostfix</item>\n      <item>IsPrefix</item>\n      <item>IsString</item>\n      <item>LazyGlobal</item>\n      <item>LeftPrecedence</item>\n      <item>Length</item>\n      <item>LessThan</item>\n      <item>LispRead</item>\n      <item>LispReadListed</item>\n      <item>List</item>\n      <item>Listify</item>\n      <item>Load</item>\n      <item>Local</item>\n      <item>LocalSymbols</item>\n      <item>MacroClear</item>\n      <item>MacroLocal</item>\n      <item>MacroRule</item>\n      <item>MacroRuleBase</item>\n      <item>MacroRuleBaseListed</item>\n      <item>MacroRulePattern</item>\n      <item>MacroSet</item>\n      <item>MathAbs</item>\n      <item>MathAdd</item>\n      <item>MathAnd</item>\n      <item>MathArcCos</item>\n      <item>MathArcSin</item>\n      <item>MathArcTan</item>\n      <item>MathCeil</item>\n      <item>MathCos</item>\n      <item>MathDiv</item>\n      <item>MathDivide</item>\n      <item>MathExp</item>\n      <item>MathFac</item>\n      <item>MathFloor</item>\n      <item>MathGcd</item>\n      <item>MathGetExactBits</item>\n      <item>MathLibrary</item>\n      <item>MathLog</item>\n      <item>MathMod</item>\n      <item>MathMultiply</item>\n      <item>MathNot</item>\n      <item>MathNth</item>\n      <item>MathOr</item>\n      <item>MathPi</item>\n      <item>MathPower</item>\n      <item>MathSetExactBits</item>\n      <item>MathSin</item>\n      <item>MathSqrt</item>\n      <item>MathSubtract</item>\n      <item>MathTan</item>\n      <item>MaxEvalDepth</item>\n      <item>Not</item>\n      <item>OpLeftPrecedence</item>\n      <item>OpPrecedence</item>\n      <item>OpRightPrecedence</item>\n      <item>Or</item>\n      <item>PatchLoad</item>\n      <item>PatchString</item>\n      <item>PatternCreate</item>\n      <item>PatternMatches</item>\n      <item>Postfix</item>\n      <item>Precision</item>\n      <item>Prefix</item>\n      <item>PrettyPrinter</item>\n      <item>Prog</item>\n      <item>Read</item>\n      <item>ReadToken</item>\n      <item>Replace</item>\n      <item>Retract</item>\n      <item>RightAssociative</item>\n      <item>RightPrecedence</item>\n      <item>Rule</item>\n      <item>RuleBase</item>\n      <item>RuleBaseArgList</item>\n      <item>RuleBaseDefined</item>\n      <item>RuleBaseListed</item>\n      <item>RulePattern</item>\n      <item>Secure</item>\n      <item>Set</item>\n      <item>SetExtraInfo</item>\n      <item>SetStringMid</item>\n      <item>ShiftLeft</item>\n      <item>ShiftRight</item>\n      <item>String</item>\n      <item>StringMid</item>\n      <item>Subst</item>\n      <item>SystemCall</item>\n      <item>Tail</item>\n      <item>ToBase</item>\n      <item>ToFile</item>\n      <item>ToString</item>\n      <item>TraceRule</item>\n      <item>TraceStack</item>\n      <item>Type</item>\n      <item>UnFence</item>\n      <item>UnList</item>\n      <item>Use</item>\n      <item>Version</item>\n      <item>While</item>\n      <item>Write</item>\n      <item>WriteString</item>\n      <item>XmlExplodeTag</item>\n      <item>XmlTokenizer</item>\n      <item>`</item>\n      <item>=</item>\n    </list>\n    <contexts>\n      <context name=\"default\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n        <DetectChar attribute=\"String\" context=\"string\" char=\"&quot;\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"linecomment\" char=\"/\" char1=\"/\"/>\n        <Detect2Chars attribute=\"Comment\" context=\"multilinecomment\" char=\"/\" char1=\"*\"/>\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n        <AnyChar attribute=\"Parens\" context=\"#stay\" String=\"{[(\" beginRegion=\"brace\"/>\n        <AnyChar attribute=\"Parens\" context=\"#stay\" String=\"}])\" endRegion=\"brace\"/>\n        <AnyChar attribute=\"Symbol\" context=\"#stay\" String=\"+-*/=`~:!@#$^&amp;*_|&lt;&gt;\"/>\n\n        <Float attribute=\"Float\" context=\"#stay\"/>\n        <Int attribute=\"Decimal\" context=\"#stay\"/>\n      </context>\n      <context name=\"string\" attribute=\"String\" lineEndContext=\"#pop\">\n        <LineContinue attribute=\"String\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context name=\"linecomment\" attribute=\"Comment\" lineEndContext=\"#pop\">\n        <RegExpr attribute=\"Highlight\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n      <context name=\"multilinecomment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\"/>\n        <RegExpr attribute=\"Highlight\" context=\"#stay\" String=\"(FIXME|TODO)\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Keyword\"  defStyleNum=\"dsKeyword\"/>\n      <itemData name=\"Decimal\"  defStyleNum=\"dsDecVal\"/>\n      <itemData name=\"Float\"  defStyleNum=\"dsFloat\"/>\n      <itemData name=\"String\"  defStyleNum=\"dsString\"/>\n      <itemData name=\"Comment\"  defStyleNum=\"dsComment\"/>\n      <itemData name=\"Symbol\"  defStyleNum=\"dsOthers\"/>\n      <itemData name=\"Parens\"  defStyleNum=\"dsNormal\"/>\n      <itemData name=\"Highlight\"  defStyleNum=\"dsAlert\"/>\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"//\" />\n      <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"=`\"/>\n  </general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/yacc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<!--\n========================================================================\nYACC.XML supports syntax highlighting for Yacc/Bison source under Kate.\n\nCopyright (C) 2004, Jan Villat <jan.villat@net2000.ch>\nThis code is released under the LGPL as part of kdelibs/kate.\n========================================================================\n\n\n== UPDATE HISTORY ==\n2018-02-20 // Nibaldo González <nibgonz@gmail.com>\n\n  Fix '$' symbol, highlighted as 'dsError' by C++ (isocpp.xml). \n  Update syntax for Bison (3.0.4):\n   - Add declarations, directives in rules and the '@' variable.\n   - Allow a tag in '%union', declarations in multiple lines and \n     grammar declarations in the grammar rules section.\n   - The ';' char is not necessary to finish a rule. Allow '; |' \n     within rules.\n  Add mimetypes and extensions '*.ypp' & '*.y++'.\n\n2007-10-01 // Sebastian Pipping <webmaster@hartwork.org>\n\n  Added: Extension \"*.yy\" for Bison\n\n2004-05-26 // Jan Villat <jan.villat@net2000.ch>\n\n  YACC.XML 1.00 - First released.\n\n\n========================================================================\n-->\n<language name=\"Yacc/Bison\" version=\"5\" kateversion=\"5.0\" section=\"Sources\" extensions=\"*.y;*.yy;*.ypp;*.y++\" mimetype=\"text/x-yacc;text/x-bison\" priority=\"5\" author=\"Jan Villat (jan.villat@net2000.ch)\" license=\"LGPL\">\n\n<highlighting>\n<contexts>\n  <context name=\"Pre Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <DetectSpaces />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"C Declarations\" char=\"%\" char1=\"{\" beginRegion=\"cdeclarations\" column=\"0\" />\n    <RegExpr attribute=\"Normal Text\" context=\"Declarations\" String=\".\" beginRegion=\"declarations\" lookAhead=\"true\" />\n  </context>\n\n  <context name=\"C Declarations\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"#pop\" char=\"%\" char1=\"}\" endRegion=\"cdeclarations\" column=\"0\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n\n  <context name=\"Declarations\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"Rules\" char=\"%\" char1=\"%\" beginRegion=\"rules\" endRegion=\"declarations\" />\n    <!-- Prologue Declarations -->\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"C Declarations\" char=\"%\" char1=\"{\" beginRegion=\"cdeclarations\" column=\"0\" />\n    <IncludeRules context=\"Grammar Declarations\" />\n    <WordDetect attribute=\"Directive\" context=\"Code-Symbols Start\" String=\"%initial-action\" />\n    <WordDetect attribute=\"Directive\" context=\"Code-Symbols Start\" String=\"%param\" />\n    <WordDetect attribute=\"Directive\" context=\"Code-Symbols Start\" String=\"%lex-param\" />\n    <WordDetect attribute=\"Directive\" context=\"Code-Symbols Start\" String=\"%parse-param\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%&lt;flag&gt;\" />\n    <!-- Any word followed by '%' (End with ';' or '%') -->\n    <DetectChar attribute=\"Directive\" context=\"Percent Command\" char=\"%\" />\n  </context>  \n  <context name=\"Grammar Declarations\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <WordDetect attribute=\"Directive\" context=\"Union Start\" String=\"%union\" />\n    <WordDetect attribute=\"Directive\" context=\"Union Start\" String=\"%code\" />\n    <WordDetect attribute=\"Directive\" context=\"Code-Symbols Start\" String=\"%destructor\" />\n    <WordDetect attribute=\"Directive\" context=\"Code-Symbols Start\" String=\"%printer\" />\n  </context>\n\n  <context name=\"Union Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <DetectSpaces />\n    <DetectChar attribute=\"Normal Text\" context=\"Union In\" char=\"{\" beginRegion=\"union\" />\n    <RegExpr attribute=\"Normal Text\" context=\"#pop!Union Tag\" String=\"[^\\s\\{](?=(\\s|$|//))\" />\n  </context>\n  <context name=\"Union Tag\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <DetectSpaces />\n    <DetectChar attribute=\"Normal Text\" context=\"Union In\" char=\"{\" beginRegion=\"union\" />\n    <RegExpr attribute=\"Alert\" context=\"#pop\" String=\".\" />\n  </context>\n  <context name=\"Union In\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Normal Text\" context=\"Union InIn\" char=\"{\" />\n    <DetectChar attribute=\"Normal Text\" context=\"#pop#pop\" char=\"}\" endRegion=\"union\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Union InIn\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Normal Text\" context=\"Union InIn\" char=\"{\" />\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n\n  <!-- '%'<decl> ('{' <Code-Symbols In> '}')+ <Percent Command In> [';'] -->\n  <context name=\"Code-Symbols Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <DetectSpaces />\n    <DetectChar attribute=\"Normal Text\" context=\"Code-Symbols In\" char=\"{\" beginRegion=\"code-symbols\" />\n    <RegExpr attribute=\"Alert\" context=\"#pop\" String=\".\" />\n  </context>\n  <context name=\"Code-Symbols In\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Normal Text\" context=\"#pop#pop!Code-Symbols End\" char=\"}\" endRegion=\"code-symbols\" />\n    <DetectChar attribute=\"Normal Text\" context=\"Code-Symbols InIn\" char=\"{\" />\n    <IncludeRules context=\"Symbol-Variable\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Code-Symbols InIn\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Normal Text\" context=\"Code-Symbols InIn\" char=\"{\" />\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" />\n    <IncludeRules context=\"Symbol-Variable\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Code-Symbols End\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop!Percent Command In\">\n    <IncludeRules context=\"Comment\" />\n    <DetectSpaces />\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" lookAhead=\"true\" />\n    <DetectChar attribute=\"Normal Text\" context=\"Code-Symbols In\" char=\"{\" beginRegion=\"code-symbols\" />\n  </context>\n\n  <context name=\"Rules\" attribute=\"Rule\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"User Code\" char=\"%\" char1=\"%\" beginRegion=\"code\" endRegion=\"rules\" />\n    <DetectChar attribute=\"Normal Text\" context=\"Rule In\" char=\":\" beginRegion=\"rule\" />\n    <DetectChar attribute=\"Rule\" context=\"Grammar Declaration Start\" char=\"%\" lookAhead=\"true\" />\n  </context>\n\n  <context name=\"Rule In\" attribute=\"Definition\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"Comment\" />\n    <DetectChar attribute=\"Normal Text\" context=\"Rule End\" char=\";\" endRegion=\"rule\" />\n    <DetectChar attribute=\"Normal Text\" context=\"Normal C Bloc\" char=\"{\" beginRegion=\"bloc\" />\n    <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\"|\" />\n    <IncludeRules context=\"StringOrChar\" />\n    <RegExpr attribute=\"Directive\" context=\"#stay\" String=\"%\\?(?=\\{)\" />\n    <WordDetect attribute=\"Directive\" context=\"#stay\" String=\"%empty\" />\n    <WordDetect attribute=\"Directive\" context=\"#stay\" String=\"%prec\" />\n    <WordDetect attribute=\"Directive\" context=\"#stay\" String=\"%dprec\" />\n    <WordDetect attribute=\"Directive\" context=\"#stay\" String=\"%merge\" />\n\n    <!-- Finish rule without the ';' character (see the 'rhses.1' rule in the 'src/parse-gram.y' file, from the Bison source) -->\n    <RegExpr attribute=\"Open Rule\" context=\"#pop\" String=\"[\\w\\-\\.](?=[\\w\\-\\.]*:)\" column=\"0\" endRegion=\"rule\" />\n    <Detect2Chars attribute=\"Content-Type Delimiter\" context=\"#pop\" char=\"%\" char1=\"%\" lookAhead=\"true\" firstNonSpace=\"true\" endRegion=\"rule\" />\n    <RegExpr attribute=\"Directive\" context=\"#pop\" String=\"%(union|code|destructor|printer|start|(no\\-)?default\\-prec|nterm|token|type|left|right|nonassoc|precedence)\\b\" lookAhead=\"true\" column=\"0\" endRegion=\"rule\" />\n  </context>\n  <!-- The Bison parser allows to have ';' followed by '|', without the rule ending. \n       The problem here is that the ';' char has endRegion=\"rule\" (although it is not very relevant). -->\n  <context name=\"Rule End\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n    <DetectSpaces />\n    <DetectChar attribute=\"Normal Text\" context=\"#stay\" char=\";\" />\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"|\" />\n    <IncludeRules context=\"Comment\" />\n  </context>\n\n  <context name=\"Grammar Declaration Start\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <!-- In the rules section, only highlighting exact declarations -->\n    <IncludeRules context=\"Grammar Declarations\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%start\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%default-prec\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%no-default-prec\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%nterm\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%token\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%type\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%left\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%right\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%nonassoc\" />\n    <WordDetect attribute=\"Directive\" context=\"Percent Command In\" String=\"%precedence\" /> \n\n    <DetectChar attribute=\"Rule\" context=\"#pop\" char=\"%\" /> <!-- End when there is an invalid declaration -->\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" />\n    <IncludeRules context=\"Comment\" />\n    <DetectSpaces />\n    <RegExpr attribute=\"Alert\" context=\"#pop\" String=\".+\" />\n  </context>\n\n  <context name=\"User Code\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <IncludeRules context=\"##C++\" />\n  </context>\n\n  <context name=\"Percent Command\" attribute=\"Directive\" lineEndContext=\"#pop!Percent Command In\">\n    <IncludeRules context=\"Comment\" />\n    <RegExpr attribute=\"Normal Text\" context=\"#pop!Percent Command In\" String=\"[^\\w\\-]\" lookAhead=\"true\" />\n  </context>\n  <context name=\"Percent Command In\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <!-- This can be applied to multiple lines -->\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\";\" lookAhead=\"true\" />\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"%\" lookAhead=\"true\" firstNonSpace=\"true\" />\n    <Detect2Chars attribute=\"Normal Text\" context=\"#pop\" char=\"%\" char1=\"%\" lookAhead=\"true\" />\n    <IncludeRules context=\"StringOrChar\" />\n    <DetectChar attribute=\"Data Type\" context=\"PC type\" char=\"&lt;\" />\n    <IncludeRules context=\"Comment\" />\n  </context>\n  <context name=\"PC type\" attribute=\"Data Type\" lineEndContext=\"#pop#pop\">\n    <DetectChar attribute=\"Data Type\" context=\"#pop\" char=\"&gt;\" />\n  </context>\n\n  <context name=\"Comment\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Comment\" context=\"CommentStar\" char=\"/\" char1=\"*\" />\n    <Detect2Chars attribute=\"Comment\" context=\"CommentSlash\" char=\"/\" char1=\"/\" />\n  </context>\n  <context name=\"CommentStar\" attribute=\"Comment\" lineEndContext=\"#stay\">\n    <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n    <IncludeRules context=\"##Alerts\" />\n    <IncludeRules context=\"##Modelines\" />\n  </context>\n  <context name=\"CommentSlash\" attribute=\"Comment\" lineEndContext=\"#pop\">\n    <IncludeRules context=\"##Alerts\" />\n    <IncludeRules context=\"##Modelines\" />\n  </context>\n\n  <context name=\"StringOrChar\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"String Char\" context=\"Char\" char=\"'\" />\n    <DetectChar attribute=\"String\" context=\"String\" char=\"&quot;\" />\n  </context>\n  <context name=\"String\" attribute=\"String\" lineEndContext=\"#pop\">\n    <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\.\" />\n    <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n  </context>\n  <context name=\"Char\" attribute=\"String Char\" lineEndContext=\"#pop\">\n    <RegExpr attribute=\"Backslash Code\" context=\"#stay\" String=\"\\\\.\" />\n    <DetectChar attribute=\"String Char\" context=\"#pop\" char=\"'\" />\n  </context>\n\n  <context name=\"Normal C Bloc\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Normal Text\" context=\"Normal C Bloc\" char=\"{\" beginRegion=\"bloc\" />\n    <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\"}\" endRegion=\"bloc\" />\n    <IncludeRules context=\"Symbol-Variable\" />\n    <IncludeRules context=\"##C++\" />\n  </context>\n  <context name=\"Symbol-Variable\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n    <DetectChar attribute=\"Directive\" context=\"Dol\" char=\"$\" />\n    <RegExpr attribute=\"Directive\" context=\"#stay\" String=\"@(\\$?)(\\d+|[A-Za-z_]\\w*)?\" />\n  </context>\n  <context name=\"Dol\" attribute=\"Normal Text\" fallthrough=\"true\" fallthroughContext=\"DolEnd\" lineEndContext=\"#stay\">\n    <RegExpr attribute=\"Data Type\" context=\"DolEnd\" String=\"&lt;[^&gt;]+&gt;\" />\n  </context>\n  <context name=\"DolEnd\" attribute=\"Normal Text\" lineEndContext=\"#stay\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\">\n    <RegExpr attribute=\"Directive\" context=\"#pop#pop\" String=\"@?\\d+\" />\n    <DetectChar attribute=\"Directive\" context=\"#pop#pop\" char=\"$\" />\n    <DetectIdentifier attribute=\"Directive\" context=\"#pop#pop\" />\n  </context>\n</contexts>\n\n<itemDatas>\n  <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Definition\" defStyleNum=\"dsNormal\" />\n  <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n  <itemData name=\"Content-Type Delimiter\" defStyleNum=\"dsBaseN\" bold=\"1\" />\n  <itemData name=\"Directive\" defStyleNum=\"dsKeyword\"/>\n  <itemData name=\"Rule\" defStyleNum=\"dsString\" />\n  <itemData name=\"Open Rule\" defStyleNum=\"dsString\" bold=\"1\" />\n  <itemData name=\"Backslash Code\" defStyleNum=\"dsString\" bold=\"1\" />\n  <itemData name=\"Alert\" defStyleNum=\"dsAlert\" />\n  <itemData name=\"String\" defStyleNum=\"dsString\"/>\n  <itemData name=\"String Char\" defStyleNum=\"dsChar\"/>\n  <itemData name=\"Data Type\" defStyleNum=\"dsDataType\"/>\n</itemDatas>\n\n</highlighting>\n<general>\n  <comments>\n    <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n    <comment name=\"singleLine\" start=\"//\" />\n  </comments>\n</general>\n</language>\n<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/yaml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n  <!ENTITY null \"(null|Null|NULL|~)\">\n  <!ENTITY bool \"(y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)\">\n\n  <!ENTITY int         \"(0|[\\-\\+]?[1-9][0-9_]*)\">\n  <!ENTITY intOther    \"[\\-\\+]?0(x_*[0-9a-fA-F][0-9a-fA-F_]*|o?_*[0-7][0-7_]*|b_*[01][01_]*)\"> <!-- Hex, Octal, Binary -->\n  <!ENTITY intBase60   \"[\\-\\+]?[1-9][0-9_]*(:[0-5]?[0-9])+\">\n  <!ENTITY allInt      \"(&intBase60;|&intOther;|&int;)\">\n\n  <!ENTITY float       \"[\\-\\+]?([0-9][0-9_]*\\.[0-9\\._]*|\\._*[0-9][0-9\\._]*)([eE][\\-\\+]?[0-9]+)?\">\n  <!ENTITY floatExp    \"[\\-\\+]?[0-9][0-9_]*[eE][\\-\\+]?[0-9]+\">\n  <!ENTITY floatBase60 \"[\\-\\+]?[0-9][0-9_]*(:[0-5]?[0-9])+\\.[0-9_]*\">\n  <!ENTITY inf         \"[\\-\\+]?\\.(inf|Inf|INF)\\b\">\n  <!ENTITY nan         \"\\.(nan|NaN|NAN)\\b\">\n  <!ENTITY allFloat    \"(&float;|&floatExp;|&floatBase60;|&inf;|&nan;)\">\n\n  <!ENTITY endValue       \"(?:\\s*$|\\s+#)\">\n  <!ENTITY endValueInline \"\\s*[:,\\[\\]\\{\\}]\">\n  <!ENTITY space          \"[ ]\">\n\n  <!-- Key quoted -->\n  <!ENTITY keyDQ          \"&quot;(?:\\\\.|[^&quot;])+&quot;\\s*\">\n  <!ENTITY keySQ          \"'(?:[^']|'')+'\\s*\">\n  <!-- Literal/folded operator -->\n  <!ENTITY literalOp      \"[\\|&gt;][\\-\\+]?\">\n  <!-- Key after \"?\" or \"-\", used to detect literal/folded operator -->\n  <!ENTITY keyAfterOp     \"(?:[^&quot;'#\\-\\?\\s][^:#]*|\\-(?:[^\\s:#][^:#]*)?|&keyDQ;|&keySQ;)\">\n\n  <!ENTITY dataTypes      \"!!\\S+\">\n  <!ENTITY alias          \"&amp;\\S+\">\n  <!ENTITY reference      \"\\*\\S+\">\n]>\n\n<!-- Author: Dr Orlovsky MA <maxim@orlovsky.info> //-->\n<!-- Modifications (YAML 1.2), values & support for literal/folded style:\n       Nibaldo González S. <nibgonz@gmail.com>\n       These modifications are under the MIT license. //-->\n<language name=\"YAML\" version=\"6\" kateversion=\"5.0\" section=\"Markup\"\n          extensions=\"*.yaml;*.yml\" mimetype=\"text/yaml\" priority=\"9\"\n          author=\"Dr Orlovsky MA (dr.orlovsky@gmail.com), Nibaldo González (nibgonz@gmail.com)\" license=\"LGPL\">\n  <highlighting>\n    <contexts>\n      <context attribute=\"Attribute\" lineEndContext=\"#stay\" name=\"normal\" >\n        <StringDetect attribute=\"Document Header\" context=\"header\" String=\"---\" column=\"0\"/>\n        <RegExpr attribute=\"End of Document\" context=\"EOD\" String=\"^\\.\\.\\.$\" column=\"0\"/>\n        <DetectChar attribute=\"Directive\" context=\"directive\" char=\"%\" column=\"0\"/>\n\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n\n        <!-- Literal/Folded Style -->\n        <IncludeRules context=\"find-literal-block\" />\n\n        <RegExpr attribute=\"Operator\" firstNonSpace=\"true\" context=\"dash\" String=\"\\-(?=\\s|$)\" />\n        <DetectChar attribute=\"Operator\" firstNonSpace=\"true\" context=\"mapping-key\" char=\"?\" />\n\n        <DetectChar attribute=\"Operator\" firstNonSpace=\"true\" context=\"list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" firstNonSpace=\"true\" context=\"hash\" char=\"{\" beginRegion=\"Hash\" />\n\n        <RegExpr attribute=\"Data Types\" firstNonSpace=\"true\" context=\"after-data\" String=\"&dataTypes;\" />\n        <RegExpr attribute=\"Alias\" firstNonSpace=\"true\" context=\"after-data\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" firstNonSpace=\"true\" context=\"after-data\" String=\"&reference;\" />\n\n        <RegExpr attribute=\"Key\" context=\"dpoints-attribute-pre\" String=\"[^&quot;'#\\-\\s][^:#]*(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-attribute-pre\" String=\"\\-([^\\s:#][^:#]*)?(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-attribute-pre\" String=\"&keyDQ;(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-attribute-pre\" String=\"&keySQ;(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key Points Operator\" context=\"attribute-pre\" String=\":(?=\\s|$)\"/>\n\n        <DetectChar attribute=\"String\" firstNonSpace=\"true\" context=\"string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" firstNonSpace=\"true\" context=\"stringx\" char=\"&quot;\" beginRegion=\"String\" />\n        <IncludeRules context=\"values-firstnonspace\" />\n        <DetectSpaces/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"mapping-key\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Comment\" context=\"#pop!comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces />\n        <RegExpr attribute=\"Operator\" context=\"#pop!dash\" String=\"\\-(?=\\s|$)\" />\n        <RegExpr attribute=\"Data Types\" context=\"#pop!after-data\" String=\"&dataTypes;\" />\n        <RegExpr attribute=\"Alias\" context=\"#pop!after-data\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"#pop!after-data\" String=\"&reference;\" />\n\n        <DetectChar attribute=\"Operator\" context=\"#pop!list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop!hash\" char=\"{\" beginRegion=\"Hash\" />\n        <DetectChar attribute=\"String\" context=\"#pop!string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"#pop!stringx\" char=\"&quot;\" beginRegion=\"String\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"dash\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces/>\n        <RegExpr attribute=\"Data Types\" context=\"#stay\" String=\"&dataTypes;\" />\n        <RegExpr attribute=\"Alias\" context=\"#stay\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"#stay\" String=\"&reference;\" />\n        <IncludeRules context=\"values\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop!mapping-key\" char=\"?\" />\n        <RegExpr attribute=\"Operator\" context=\"#stay\" String=\"\\-(?=\\s|$)\" />\n\n        <DetectChar attribute=\"Operator\" context=\"#pop!list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop!hash\" char=\"{\" beginRegion=\"Hash\" />\n        <DetectChar attribute=\"String\" context=\"#pop!string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"#pop!stringx\" char=\"&quot;\" beginRegion=\"String\" />\n      </context>\n\n      <!-- Highlight lists, hashes and strings after a data type, reference or alias -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"after-data\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Comment\" context=\"#pop!comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces />\n        <RegExpr attribute=\"Data Types\" context=\"#stay\" String=\"&dataTypes;\" />\n        <RegExpr attribute=\"Alias\" context=\"#stay\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"#stay\" String=\"&reference;\" />\n\n        <DetectChar attribute=\"Operator\" context=\"list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"hash\" char=\"{\" beginRegion=\"Hash\" />\n        <DetectChar attribute=\"String\" context=\"string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"stringx\" char=\"&quot;\" beginRegion=\"String\" />\n      </context>\n\n      <context attribute=\"Document Header\" lineEndContext=\"#pop\" name=\"header\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n        <RegExpr attribute=\"Literal/Folded Operator\" context=\"header-literal-operator\" String=\"\\s&literalOp;(?=&endValue;)\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Document Header\" lineEndContext=\"#pop#pop\" name=\"header-literal-operator\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectSpaces />\n        <RegExpr attribute=\"Literal/Folded Operator\" context=\"#pop#pop!literal-block-simple\" String=\"&literalOp;\" beginRegion=\"Literal\" />\n      </context>\n\n      <context attribute=\"End of Document\" lineEndContext=\"#stay\" name=\"EOD\">\n      </context>\n\n      <context attribute=\"Directive\" lineEndContext=\"#pop\" name=\"directive\">\n      </context>\n\n      <context attribute=\"Attribute\" lineEndContext=\"#pop#pop\" name=\"attribute\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n      </context>\n\n      <context attribute=\"Attribute\" lineEndContext=\"#stay\" name=\"list-attribute-inline\">\n        <AnyChar attribute=\"Operator\" context=\"#pop#pop\" lookAhead=\"true\" String=\",]\" />\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n      </context>\n      <context attribute=\"Attribute\" lineEndContext=\"#stay\" name=\"hash-attribute-inline\">\n        <AnyChar attribute=\"Operator\" context=\"#pop#pop\" lookAhead=\"true\" String=\",}\" />\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n      </context>\n\n      <!-- Attribute -->\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"dpoints-attribute-pre\" fallthrough=\"true\" fallthroughContext=\"#pop!attribute-pre\">\n        <DetectChar attribute=\"Key Points Operator\" context=\"#pop!attribute-pre\" char=\":\" /> <!-- Highlight two points after Key -->\n      </context>\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"attribute-pre\" fallthrough=\"true\" fallthroughContext=\"attribute\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces/>\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"?\" />\n        <RegExpr attribute=\"Data Types\" context=\"#stay\" String=\"&dataTypes;\" />\n        <DetectChar attribute=\"Operator\" context=\"list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"hash\" char=\"{\" beginRegion=\"Hash\" />\n        <DetectChar attribute=\"String\" context=\"attribute-string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"attribute-stringx\" char=\"&quot;\" beginRegion=\"String\" />\n        <RegExpr attribute=\"Alias\" context=\"#stay\" String=\"&alias;(?=\\s+[\\[\\{])\" />\n        <RegExpr attribute=\"Reference\" context=\"#stay\" String=\"&reference;(?=\\s+[\\[\\{])\" />\n        <RegExpr attribute=\"Alias\" context=\"attribute\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"attribute\" String=\"&reference;\" />\n        <IncludeRules context=\"values\" />\n        <RegExpr attribute=\"Literal/Folded Operator\" context=\"#stay\" String=\"&literalOp;(?=&endValue;)\" />\n      </context>\n\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"default-attribute-pre-inline\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces/>\n\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"?\" />\n        <RegExpr attribute=\"Data Types\" context=\"#stay\" String=\"&dataTypes;\" />\n        <DetectChar attribute=\"Operator\" context=\"list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"hash\" char=\"{\" beginRegion=\"Hash\" />\n        <DetectChar attribute=\"String\" context=\"attribute-string-inline\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"attribute-stringx-inline\" char=\"&quot;\" beginRegion=\"String\" />\n        <RegExpr attribute=\"Alias\" context=\"#stay\" String=\"&alias;(?=\\s+[\\[\\{])\" />\n        <RegExpr attribute=\"Reference\" context=\"#stay\" String=\"&reference;(?=\\s+[\\[\\{])\" />\n      </context>\n\n      <!-- Attribute Inline, Within List -->\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"dpoints-list-attribute-pre-inline\" fallthrough=\"true\" fallthroughContext=\"#pop!list-attribute-pre-inline\">\n        <DetectChar attribute=\"Key Points Operator\" context=\"#pop!list-attribute-pre-inline\" char=\":\" /> <!-- Highlight two points after Key -->\n      </context>\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"list-attribute-pre-inline\" fallthrough=\"true\" fallthroughContext=\"list-attribute-inline\">\n        <IncludeRules context=\"default-attribute-pre-inline\" />\n        <RegExpr attribute=\"Alias\" context=\"list-attribute-inline\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"list-attribute-inline\" String=\"&reference;\" />\n\n        <AnyChar attribute=\"Operator\" context=\"#pop\" lookAhead=\"true\" String=\",]\" />\n        <IncludeRules context=\"values-inline\" />\n      </context>\n\n      <!-- Attribute Inline, Within Hash -->\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"dpoints-hash-attribute-pre-inline\" fallthrough=\"true\" fallthroughContext=\"#pop!hash-attribute-pre-inline\">\n        <DetectChar attribute=\"Key Points Operator\" context=\"#pop!hash-attribute-pre-inline\" char=\":\" /> <!-- Highlight two points after Key -->\n      </context>\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"hash-attribute-pre-inline\" fallthrough=\"true\" fallthroughContext=\"hash-attribute-inline\">\n        <IncludeRules context=\"default-attribute-pre-inline\" />\n        <RegExpr attribute=\"Alias\" context=\"hash-attribute-inline\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"hash-attribute-inline\" String=\"&reference;\" />\n\n        <AnyChar attribute=\"Operator\" context=\"#pop\" lookAhead=\"true\" String=\",}\" />\n        <IncludeRules context=\"values-inline\" />\n      </context>\n\n      <!-- List -->\n      <!-- Context \"find-values-list\" highlights values and then sends to \"list-element\" -->\n      <context attribute=\"List\" lineEndContext=\"#stay\" name=\"list\" fallthrough=\"true\" fallthroughContext=\"#pop!find-values-list\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces />\n        <DetectChar attribute=\"Operator\" context=\"#pop!find-values-list\" char=\"?\" />\n      </context>\n      <context attribute=\"List\" lineEndContext=\"#stay\" name=\"list-element\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n\n        <DetectChar attribute=\"Operator\" context=\"#pop\" char=\"]\" endRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"hash\" char=\"{\" beginRegion=\"Hash\" />\n\n        <RegExpr attribute=\"Key\" context=\"dpoints-list-attribute-pre-inline\" String=\"[^&quot;'#\\-,\\]\\s][^:#,\\]]*(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-list-attribute-pre-inline\" String=\"\\-([^\\s:#,\\]][^:#,\\]]*)?(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-list-attribute-pre-inline\" String=\"&keyDQ;(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-list-attribute-pre-inline\" String=\"&keySQ;(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key Points Operator\" context=\"list-attribute-pre-inline\" String=\":(?=\\s|$)\" firstNonSpace=\"true\" />\n\n        <RegExpr attribute=\"Data Types\" context=\"#stay\" String=\"&dataTypes;\" />\n        <RegExpr attribute=\"Alias\" context=\"#stay\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"#stay\" String=\"&reference;\" />\n        <DetectChar attribute=\"String\" context=\"string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"stringx\" char=\"&quot;\" beginRegion=\"String\" />\n\n        <DetectChar attribute=\"Operator\" context=\"#pop!list\" char=\",\" />\n        <IncludeRules context=\"values-list\" />\n      </context>\n\n      <!-- Hash -->\n      <context attribute=\"Hash\" lineEndContext=\"#stay\" name=\"hash\" fallthrough=\"true\" fallthroughContext=\"#pop!hash-element\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces />\n        <DetectChar attribute=\"Operator\" context=\"#pop!hash-element\" char=\"?\" />\n      </context>\n      <context attribute=\"Hash\" lineEndContext=\"#stay\" name=\"hash-element\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n        <DetectSpaces/>\n\n        <RegExpr attribute=\"Key\" context=\"dpoints-hash-attribute-pre-inline\" String=\"[^\\s&quot;'#\\-,\\}\\s][^:#,\\}]*(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-hash-attribute-pre-inline\" String=\"\\-([^\\s:#,\\}][^:#,\\}]*)?(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-hash-attribute-pre-inline\" String=\"&keyDQ;(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key\" context=\"dpoints-hash-attribute-pre-inline\" String=\"&keySQ;(?=:(\\s|$))\"/>\n        <RegExpr attribute=\"Key Points Operator\" context=\"hash-attribute-pre-inline\" String=\":(?=\\s|$)\"/>\n\n        <DetectChar attribute=\"Operator\" context=\"#pop\" char=\"}\" endRegion=\"Hash\" />\n        <DetectChar attribute=\"Operator\" context=\"#pop!hash\" char=\",\" />\n\n        <!-- This improves highlighting in keys with multiple lines -->\n        <RegExpr attribute=\"Data Types\" context=\"#stay\" String=\"&dataTypes;\" />\n        <RegExpr attribute=\"Alias\" context=\"#stay\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"#stay\" String=\"&reference;\" />\n        <DetectChar attribute=\"String\" context=\"string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"stringx\" char=\"&quot;\" beginRegion=\"String\" />\n      </context>\n\n      <!-- Strings -->\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"attribute-string\" noIndentationBasedFolding=\"true\">\n        <DetectIdentifier />\n        <IncludeRules context=\"escaped-char-singleq\" />\n        <DetectChar attribute=\"String\" context=\"attribute-end\" char=\"'\" endRegion=\"String\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"attribute-stringx\" noIndentationBasedFolding=\"true\">\n        <DetectIdentifier />\n        <IncludeRules context=\"escaped-char-doubleq\" />\n        <DetectChar attribute=\"String\" context=\"attribute-end\" char=\"&quot;\" endRegion=\"String\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"attribute-string-inline\" noIndentationBasedFolding=\"true\">\n          <DetectIdentifier />\n          <IncludeRules context=\"escaped-char-singleq\" />\n          <DetectChar attribute=\"String\" context=\"attribute-end-inline\" char=\"'\" endRegion=\"String\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"attribute-stringx-inline\" noIndentationBasedFolding=\"true\">\n          <DetectIdentifier />\n          <IncludeRules context=\"escaped-char-doubleq\" />\n          <DetectChar attribute=\"String\" context=\"attribute-end-inline\" char=\"&quot;\" endRegion=\"String\" />\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop#pop#pop\" name=\"attribute-end\">\n          <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n          <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n      </context>\n\n      <context attribute=\"Error\" lineEndContext=\"#pop#pop#pop\" name=\"attribute-end-inline\">\n          <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s+)#\" />\n          <DetectSpaces attribute=\"Normal Text\" context=\"#stay\"/>\n          <AnyChar attribute=\"String\" context=\"#pop#pop#pop\"  lookAhead=\"true\" String=\"}]\"/>\n          <DetectChar attribute=\"Operator\" context=\"#pop#pop#pop\" lookAhead=\"true\" char=\",\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"string\" noIndentationBasedFolding=\"true\">\n        <DetectIdentifier />\n        <IncludeRules context=\"escaped-char-singleq\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" endRegion=\"String\" />\n      </context>\n\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"stringx\" noIndentationBasedFolding=\"true\">\n        <DetectIdentifier />\n        <IncludeRules context=\"escaped-char-doubleq\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" endRegion=\"String\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"escaped-char-doubleq\">\n        <RegExpr attribute=\"Escaped Character\" context=\"#stay\" String=\"\\\\([\\s0abtnvfre&quot;/\\\\N_Lp]|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"escaped-char-singleq\">\n        <Detect2Chars attribute=\"Escaped Character\" context=\"#stay\" char=\"'\" char1=\"'\" />\n      </context>\n\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"comment\">\n        <IncludeRules context=\"##Alerts\" />\n        <IncludeRules context=\"##Modelines\" />\n      </context>\n\n      <!-- Values -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"values\">\n        <RegExpr attribute=\"Null\" context=\"#stay\" String=\"&null;(?=&endValue;)\"/>\n        <RegExpr attribute=\"Boolean\" context=\"#stay\" String=\"&bool;(?=&endValue;)\"/>\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"&allFloat;(?=&endValue;)\"/>\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"&allInt;(?=&endValue;)\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"values-firstnonspace\">\n        <RegExpr attribute=\"Null\" firstNonSpace=\"true\" context=\"#stay\" String=\"&null;(?=&endValue;)\"/>\n        <RegExpr attribute=\"Boolean\" firstNonSpace=\"true\" context=\"#stay\" String=\"&bool;(?=&endValue;)\"/>\n        <RegExpr attribute=\"Float\" firstNonSpace=\"true\" context=\"#stay\" String=\"&allFloat;(?=&endValue;)\"/>\n        <RegExpr attribute=\"Integer\" firstNonSpace=\"true\" context=\"#stay\" String=\"&allInt;(?=&endValue;)\"/>\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"values-inline\">\n        <RegExpr attribute=\"Null\" context=\"#stay\" String=\"&null;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Boolean\" context=\"#stay\" String=\"&bool;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"&allFloat;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"&allInt;(?=&endValueInline;|&endValue;)\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"values-list\">\n        <RegExpr attribute=\"Null\" context=\"#stay\" String=\"(\\s|^)&null;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Boolean\" context=\"#stay\" String=\"(\\s|^)&bool;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Float\" context=\"#stay\" String=\"(\\s|^)&allFloat;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Integer\" context=\"#stay\" String=\"(\\s|^)&allInt;(?=&endValueInline;|&endValue;)\"/>\n      </context>\n      <!-- If the value is found immediately at the beginning of the list item -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop!list-element\" name=\"find-values-list\" fallthrough=\"true\" fallthroughContext=\"#pop!list-element\">\n        <RegExpr attribute=\"Null\" context=\"#pop!list-element\" String=\"&null;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Boolean\" context=\"#pop!list-element\" String=\"&bool;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Float\" context=\"#pop!list-element\" String=\"&allFloat;(?=&endValueInline;|&endValue;)\"/>\n        <RegExpr attribute=\"Integer\" context=\"#pop!list-element\" String=\"&allInt;(?=&endValueInline;|&endValue;)\"/>\n      </context>\n\n      <!-- Literal/Folded Style: http://yaml.org/spec/1.2/spec.html#id2795688 -->\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"find-literal-block\">\n        <!-- Do not allow indentation with tabs: -->\n        <RegExpr attribute=\"Alert\" context=\"#stay\" column=\"0\"\n                 String=\"^&space;*\\t+\\s*(?=((&keyDQ;|&keySQ;|[^#])*[^#\\w\\|&lt;&gt;&quot;'])?&literalOp;&endValue;)\" />\n\n        <!-- CASE 1: The literal/folded operator is the first character of a line.\n             The text after a space is considered literal.\n             Ex:\n             > |\n             >  ^Start the literal text\n        -->\n        <RegExpr attribute=\"Literal/Folded Operator\" context=\"literal-block-simple\" column=\"0\"\n                 String=\"^&literalOp;(?=&endValue;)\" beginRegion=\"Literal\" />\n\n        <!-- CASE 2: Only the literal/folded operator is present in a line, after a space (the indentation\n             is captured). The text with the same indentation of the operator will be highlighted as literal.\n             Ex:\n             >  key:\n             >    |\n             >    ^Start the literal text\n\n             However, in this case, the correct way is to use the indentation of the block, not the\n             indentation of the the operator. The problem is that it is difficult to capture.\n             >  key1:\n             >   key2:\n             >    key3:\n             >          |\n             >     ^Block indentation (correct literal text)\n        -->\n        <RegExpr attribute=\"Literal/Folded Operator\" context=\"literal-block-only-operator\" column=\"0\"\n                 String=\"^(&space;+)&literalOp;(?=&endValue;)\" beginRegion=\"Literal\" />\n\n        <!-- CASE 3: There is a Key before the literal/folded operator (Key indentation is captured).\n             The text with the Key's indentation plus a space is considered literal.\n             Ex:\n             >    key: |\n             >     ^Start the literal text\n             >  key: !!type >-\n             >   ^Start the folded text\n        -->\n        <RegExpr attribute=\"Key Points Operator\" context=\"literal-block-key\" column=\"0\"\n                 String=\"^(&space;*)\\:(?=\\s+(?:(?:&keyDQ;|&keySQ;|[^#])*[^#\\w\\|&lt;&gt;&quot;'])?&literalOp;&endValue;)\" />\n        <RegExpr attribute=\"Key\" context=\"literal-block-key\" column=\"0\"\n                 String=\"^(&space;*)(?:[^&quot;'#\\-\\?\\s][^:#]*|\\-(?:[^\\s:#][^:#]*)?|&keyDQ;|&keySQ;)(?=\\:\\s+(?:(?:&keyDQ;|&keySQ;|[^#])*[^#\\w\\|&lt;&gt;&quot;'])?&literalOp;&endValue;)\" />\n\n        <!-- CASE 4: Is there an operator \"?\" or \"-\" at the beginning of the line.\n             NOTE: Nested characters \"-\" and \"?\" are considered as part of the indentation.\n             Therefore, the indentation of the Key or the last operator \"?\" or \"-\" is captured.\n             Ex:\n             >  ? |\n             >   ^Start the literal Text\n             >  ? - - |\n             >       ^Start the literal text\n             >  - Key: |\n             >     ^Start the literal text\n             >  ? - - - - Key: |\n             >             ^Start the literal text\n        -->\n        <RegExpr context=\"start-literal-block-withdash\" lookAhead=\"true\" column=\"0\"\n                 String=\"^&space;*(\\?&space;*|\\-&space;+){1,6}((&keyDQ;|&keySQ;|[^#\\-\\?\\s]|\\-[^\\s#])((&keyDQ;|&keySQ;|[^#])*[^#\\w\\|&lt;&gt;&quot;'])?)?&literalOp;&endValue;\" />\n\n        <!-- CASE 5: Literal/folded operator after a data type or other content.\n             Ex:\n             >  !!type |\n             >   ^Start the literal text\n             >  key1:\n             >   key2:\n             >    !!type |\n             >    ^Start the literal text\n        -->\n        <RegExpr context=\"start-literal-block-other\" lookAhead=\"true\" column=\"0\"\n                 String=\"^&space;*(([&amp;\\*]|!!)\\S+\\s+)+&literalOp;&endValue;\" />\n      </context>\n\n      <!-- If the line with the literal operator starts with the \"-\" or \"?\" operator.\n           NOTE: The indentation capture is limited to 6 nested operators. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"start-literal-block-withdash\" noIndentationBasedFolding=\"true\">\n        <!-- With Key: Capture the Key indentation -->\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-key-withdash-s2\" String=\"^(&space;*)[\\?\\-](&space;*)(?=&keyAfterOp;:\\s)\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-key-withdash-s3\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)(?=&keyAfterOp;:\\s)\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-key-withdash-s4\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)(?=&keyAfterOp;:\\s)\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-key-withdash-s5\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)(?=&keyAfterOp;:\\s)\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-key-withdash-s6\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)(?=&keyAfterOp;:\\s)\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-key-withdash-s7\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)(?=&keyAfterOp;:\\s)\" column=\"0\"/>\n        <!-- Without Key: Capture the indentation of the last operator \"?\" or \"-\" -->\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-withdash-s1\" String=\"^(&space;*)[\\?\\-]\\s*(?=[^#\\-\\?\\s]|\\-[^\\s#])\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-withdash-s2\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-]\\s*(?=[^#\\-\\?\\s]|\\-[^\\s#])\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-withdash-s3\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-]\\s*(?=[^#\\-\\?\\s]|\\-[^\\s#])\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-withdash-s4\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-]\\s*(?=[^#\\-\\?\\s]|\\-[^\\s#])\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-withdash-s5\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-]\\s*(?=[^#\\-\\?\\s]|\\-[^\\s#])\" column=\"0\"/>\n        <RegExpr attribute=\"Operator\" context=\"#pop!literal-block-withdash-s6\" String=\"^(&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-](&space;*)[\\?\\-]\\s*(?=[^#\\-\\?\\s]|\\-[^\\s#])\" column=\"0\"/>\n      </context>\n      <!-- Capture the indentation of data type, reference or alias  -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"start-literal-block-other\" noIndentationBasedFolding=\"true\">\n        <!-- The text with the same indentation will be considered literal -->\n        <RegExpr attribute=\"Data Types\" context=\"#pop!literal-block-after-data\" String=\"^(&space;+)&dataTypes;\" column=\"0\" />\n        <RegExpr attribute=\"Alias\" context=\"#pop!literal-block-after-data\" String=\"^(&space;+)&alias;\" column=\"0\" />\n        <RegExpr attribute=\"Reference\" context=\"#pop!literal-block-after-data\" String=\"^(&space;+)&reference;\" column=\"0\" />\n        <!-- The text after a space will be considered literal (empty text is captured) -->\n        <RegExpr attribute=\"Data Types\" context=\"#pop!literal-block-withdash-s1\" String=\"^()&dataTypes;\" column=\"0\" />\n        <RegExpr attribute=\"Alias\" context=\"#pop!literal-block-withdash-s1\" String=\"^()&alias;\" column=\"0\" />\n        <RegExpr attribute=\"Reference\" context=\"#pop!literal-block-withdash-s1\" String=\"^()&reference;\" column=\"0\" />\n      </context>\n\n      <!-- Highlight data/attribute before the literal operator (Note that if there is a line\n           break within a string or bracket, the literal line will not be highlighted). -->\n      <context attribute=\"Attribute\" lineEndContext=\"#pop#pop\" name=\"before-literal-operator\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Operator\" context=\"#pop!end-literal-operator\" String=\"&literalOp;(?=&endValue;)\" beginRegion=\"Literal\" />\n\n        <RegExpr attribute=\"Error\" context=\"#pop#pop\" String=\"([&amp;\\*]|!!)\\S*&literalOp;(?=&endValue;)\" />\n        <RegExpr attribute=\"Data Types\" context=\"#stay\" String=\"&dataTypes;\" />\n        <RegExpr attribute=\"Alias\" context=\"#stay\" String=\"&alias;\" />\n        <RegExpr attribute=\"Reference\" context=\"#stay\" String=\"&reference;\" />\n\n        <DetectChar attribute=\"Operator\" context=\"list\" char=\"[\" beginRegion=\"List\" />\n        <DetectChar attribute=\"Operator\" context=\"hash\" char=\"{\" beginRegion=\"Hash\" />\n        <DetectChar attribute=\"String\" context=\"string\" char=\"'\" beginRegion=\"String\" />\n        <DetectChar attribute=\"String\" context=\"stringx\" char=\"&quot;\" beginRegion=\"String\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop#pop\" name=\"dpoints-key-before-literal-operator\" fallthrough=\"true\" fallthroughContext=\"#pop#pop\" noIndentationBasedFolding=\"true\">\n        <DetectChar attribute=\"Key Points Operator\" context=\"#pop!key-before-literal-operator\" char=\":\" />\n      </context>\n      <context attribute=\"Attribute\" lineEndContext=\"#pop#pop\" name=\"key-before-literal-operator\" noIndentationBasedFolding=\"true\">\n        <IncludeRules context=\"before-literal-operator\" />\n        <DetectChar attribute=\"Operator\" context=\"#stay\" char=\"?\" />\n      </context>\n      <context attribute=\"Attribute\" lineEndContext=\"#pop\" name=\"end-literal-operator\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Comment\" context=\"#pop!comment\" String=\"(^|\\s+)#\" />\n      </context>\n\n      <!-- Common rules for the content of the literal blocks -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-default\" noIndentationBasedFolding=\"true\">\n        <!-- End literal/folded block -->\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"^\\s*\\S\" lookAhead=\"true\" column=\"0\" endRegion=\"Literal\" />\n        <!-- Find literal/folded operator -->\n        <RegExpr context=\"before-literal-operator\" String=\"\\S\" lookAhead=\"true\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"literal-block-key-default\" noIndentationBasedFolding=\"true\">\n        <!-- End literal/folded block -->\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"^\\s*\\S\" lookAhead=\"true\" column=\"0\" endRegion=\"Literal\" />\n        <!-- Detect Key before the literal/folded operator -->\n        <RegExpr attribute=\"Key\" context=\"dpoints-key-before-literal-operator\" String=\"&keyAfterOp;(?=:\\s)\" />\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"\\S\" lookAhead=\"true\" endRegion=\"Literal\" />\n      </context>\n\n      <!-- Content of the literal block: -->\n\n      <!-- If the literal operator is starting the line (after a space, use block indentation) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-only-operator\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1.*$\" dynamic=\"true\" column=\"0\" />\n\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"^\\s*\\S\" lookAhead=\"true\" column=\"0\" endRegion=\"Literal\" />\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s)#\" />\n        <RegExpr context=\"#pop\" String=\"\\S\" lookAhead=\"true\" endRegion=\"Literal\" />\n      </context>\n      <!-- If the literal operator is the first character of a line (or after header) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-simple\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^\\s.*$\" column=\"0\" />\n\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"^\\s*\\S\" lookAhead=\"true\" column=\"0\" endRegion=\"Literal\" />\n        <RegExpr attribute=\"Comment\" context=\"comment\" String=\"(^|\\s)#\" />\n      </context>\n      <!-- If there is a data type or other content before the liretal operator (use block indentation) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-after-data\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1.*$\" dynamic=\"true\" column=\"0\" />\n\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"^\\s*\\S\" lookAhead=\"true\" column=\"0\" endRegion=\"Literal\" />\n        <RegExpr context=\"before-literal-operator\" String=\"\\S\" lookAhead=\"true\" />\n      </context>\n      <!-- If there is a key before the literal operator -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-key\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1\\s.*$\" dynamic=\"true\" column=\"0\" />\n\n        <RegExpr attribute=\"Normal Text\" context=\"#pop\" String=\"^\\s*\\S\" lookAhead=\"true\" column=\"0\" endRegion=\"Literal\" />\n        <!-- Attribute of the Key (the Key was previously highlighted) -->\n        <RegExpr attribute=\"Key Points Operator\" context=\"key-before-literal-operator\" String=\":\\s\" />\n        <RegExpr context=\"key-before-literal-operator\" String=\"\\S\" lookAhead=\"true\" />\n      </context>\n\n      <!-- If there are dashes/\"?\" before the literal operator -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-withdash-s1\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-withdash-s2\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2&space;\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-withdash-s3\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3&space;{2}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-withdash-s4\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3%4&space;{3}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-withdash-s5\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3%4%5&space;{4}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-withdash-s6\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3%4%5%6&space;{5}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-default\" />\n      </context>\n      <!-- If there are dashes/\"?\" and a Key before the literal operator -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-key-withdash-s2\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2&space;\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-key-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-key-withdash-s3\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3&space;{2}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-key-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-key-withdash-s4\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3%4&space;{3}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-key-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-key-withdash-s5\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3%4%5&space;{4}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-key-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-key-withdash-s6\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3%4%5%6&space;{5}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-key-default\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"literal-block-key-withdash-s7\" dynamic=\"true\" noIndentationBasedFolding=\"true\">\n        <RegExpr attribute=\"Literal/Folded Block\" context=\"#stay\" String=\"^%1%2%3%4%5%6%7&space;{6}\\s.*$\" dynamic=\"true\" column=\"0\" />\n        <IncludeRules context=\"literal-block-key-default\" />\n      </context>\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsAttribute\" />\n      <itemData name=\"Attribute\" defStyleNum=\"dsAttribute\" />\n      <itemData name=\"List\" defStyleNum=\"dsAttribute\" />\n      <itemData name=\"Hash\" defStyleNum=\"dsAttribute\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"End of Document\" defStyleNum=\"dsComment\" />\n      <itemData name=\"Document Header\" defStyleNum=\"dsPreprocessor\" />\n      <itemData name=\"Data Types\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Alias\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Reference\" defStyleNum=\"dsOthers\" />\n      <itemData name=\"Key\" defStyleNum=\"dsFunction\" bold=\"1\" />\n      <itemData name=\"Directive\" defStyleNum=\"dsPreprocessor\" />\n      <itemData name=\"Key Points Operator\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Operator\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Escaped Character\" defStyleNum=\"dsSpecialChar\" />\n      <itemData name=\"Literal/Folded Operator\" defStyleNum=\"dsChar\" bold=\"1\" />\n      <itemData name=\"Literal/Folded Block\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Null\" defStyleNum=\"dsChar\" />\n      <itemData name=\"Boolean\" defStyleNum=\"dsChar\" />\n      <itemData name=\"Integer\" defStyleNum=\"dsDecVal\" />\n      <itemData name=\"Float\" defStyleNum=\"dsFloat\" />\n      <itemData name=\"Error\" defStyleNum=\"dsError\" />\n      <itemData name=\"Alert\" defStyleNum=\"dsAlert\" backgroundColor=\"#EF9A9A\" />\n    </itemDatas>\n  </highlighting>\n\n  <general>\n    <folding indentationsensitive=\"1\" />\n    <emptyLines>\n      <emptyLine regexpr=\"(?:\\s+|\\s*#.*)\"/>\n    </emptyLines>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\" position=\"afterwhitespace\" />\n    </comments>\n    <keywords casesensitive=\"1\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/yang.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"YANG\" version=\"1\" kateversion=\"3.4\" section=\"Markup\" extensions=\"*.yang\" author=\"Nicolás Alvarez (based on yang.vim by Matt Parker)\" license=\"LGPLv2.1+\">\n  <highlighting>\n    <list name=\"Types\">\n      <item>decimal64</item>\n      <item>int8</item>\n      <item>int16</item>\n      <item>int32</item>\n      <item>int64</item>\n      <item>uint8</item>\n      <item>uint16</item>\n      <item>uint32</item>\n      <item>uint64</item>\n      <item>string</item>\n      <item>boolean</item>\n      <item>enumeration</item>\n      <item>bits</item>\n      <item>binary</item>\n      <item>leafref</item>\n      <item>identityref</item>\n      <item>empty</item>\n      <item>instance-identifier</item>\n    </list>\n    <list name=\"Statements\">\n      <item>anyxml</item>\n      <item>argument</item>\n      <item>augment</item>\n      <item>base</item>\n      <item>belongs-to</item>\n      <item>bit</item>\n      <item>case</item>\n      <item>choice</item>\n      <item>config</item>\n      <item>contact</item>\n      <item>container</item>\n      <item>default</item>\n      <item>description</item>\n      <item>enum</item>\n      <item>error-app-tag</item>\n      <item>error-message</item>\n      <item>extension</item>\n      <item>deviation</item>\n      <item>deviate</item>\n      <item>feature</item>\n      <item>fraction-digits</item>\n      <item>grouping</item>\n      <item>identity</item>\n      <item>import</item>\n      <item>include</item>\n      <item>input</item>\n      <item>key</item>\n      <item>leaf</item>\n      <item>leaf-list</item>\n      <item>length</item>\n      <item>list</item>\n      <item>mandatory</item>\n      <item>max-elements</item>\n      <item>min-elements</item>\n      <item>module</item>\n      <item>must</item>\n      <item>namespace</item>\n      <item>notification</item>\n      <item>ordered-by</item>\n      <item>organization</item>\n      <item>output</item>\n      <item>path</item>\n      <item>pattern</item>\n      <item>position</item>\n      <item>prefix</item>\n      <item>presence</item>\n      <item>range</item>\n      <item>reference</item>\n      <item>refine</item>\n      <item>require-instance</item>\n      <item>revision</item>\n      <item>revision-date</item>\n      <item>rpc</item>\n      <item>status</item>\n      <item>submodule</item>\n      <item>type</item>\n      <item>typedef</item>\n      <item>unique</item>\n      <item>units</item>\n      <item>uses</item>\n      <item>value</item>\n      <item>when</item>\n      <item>yang-version</item>\n      <item>yin-element</item>\n    </list>\n    <list name=\"Others\">\n      <item>add</item>\n      <item>current</item>\n      <item>delete</item>\n      <item>deprecated</item>\n      <item>max</item>\n      <item>min</item>\n      <item>not-supported</item>\n      <item>obsolete</item>\n      <item>replace</item>\n      <item>system</item>\n      <item>unbounded</item>\n      <item>user</item>\n    </list>\n    <list name=\"Booleans\">\n      <item>true</item>\n      <item>false</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Block\">\n        <keyword attribute=\"Type\" context=\"#stay\" String=\"Types\" />\n        <keyword attribute=\"Statement\" context=\"#stay\" String=\"Statements\" />\n        <keyword attribute=\"Other Keywords\" context=\"#stay\" String=\"Others\" />\n        <keyword attribute=\"Boolean\" context=\"#stay\" String=\"Booleans\" />\n        <WordDetect attribute=\"Conditional\" context=\"#stay\" String=\"if-feature\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Block comment\" char=\"/\" char1=\"*\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Line comment\" char=\"/\" char1=\"/\" />\n        <DetectChar attribute=\"String\" context=\"dq string\" char=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"sq string\" char=\"'\" />\n        <DetectChar context=\"#pop\" char=\"{\" beginRegion=\"Block\" />\n        <DetectChar context=\"#pop\" char=\"}\" endRegion=\"Block\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Block comment\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\"/\" />\n      </context>\n      <context attribute=\"Comment\" name=\"Line comment\" lineEndContext=\"#pop\">\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"dq string\" >\n        <RegExpr attribute=\"Escape\" String=\"\\\\[nt&quot;\\\\]\" context=\"#stay\" />\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\" />\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#stay\" name=\"sq string\" >\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Type\" defStyleNum=\"dsDataType\" />\n      <itemData name=\"Statement\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Other Keywords\" defStyleNum=\"dsFunction\" />\n      <itemData name=\"Boolean\" defStyleNum=\"dsVariable\" />\n      <itemData name=\"Conditional\" defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Comment\" defStyleNum=\"dsComment\" />\n      <itemData name=\"String\" defStyleNum=\"dsString\" />\n      <itemData name=\"Escape\" defStyleNum=\"dsSpecialChar\"/>\n    </itemDatas>\n  </highlighting>\n    <general>\n      <keywords weakDeliminator=\"-\" casesensitive=\"1\" />\n      <comments>\n        <comment name=\"singleLine\" start=\"//\" />\n        <comment name=\"multiLine\" start=\"/*\" end=\"*/\" />\n      </comments>\n    </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/zonnon.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\">\n<language name=\"Zonnon\" version=\"2\" kateversion=\"2.2\" section=\"Sources\" extensions=\"*.znn\" mimetype=\"text/x-zonnon\">\n  <highlighting>\n    <list name=\"keywords\">\n      <item>accept</item>\n      <item>activity</item>\n      <item>array</item>\n      <item>as</item>\n      <item>await</item>\n      <item>begin</item>\n      <item>by</item>\n      <item>case</item>\n      <item>const</item>\n      <item>definition</item>\n      <item>div</item>\n      <item>do</item>\n      <item>else</item>\n      <item>elsif</item>\n      <item>end</item>\n      <item>exception</item>\n      <item>exit</item>\n      <item>for</item>\n      <item>if</item>\n      <item>implementation</item>\n      <item>implements</item>\n      <item>import</item>\n      <item>in</item>\n      <item>is</item>\n      <item>loop</item>\n      <item>mod</item>\n      <item>module</item>\n      <item>new</item>\n      <item>nil</item>\n      <item>object</item>\n      <item>of</item>\n      <item>on</item>\n      <item>operator</item>\n      <item>or</item>\n      <item>procedure</item>\n      <item>protocol</item>\n      <item>record</item>\n      <item>refines</item>\n      <item>repeat</item>\n      <item>return</item>\n      <item>self</item>\n      <item>termination</item>\n      <item>then</item>\n      <item>to</item>\n      <item>type</item>\n      <item>until</item>\n      <item>var</item>\n      <item>while</item>\n    </list>\n    <list name=\"modifiers\">\n      <item>barrier</item>\n      <item>immutable</item>\n      <item>locked</item>\n      <item>private</item>\n      <item>protected</item>\n      <item>public</item>\n      <item>ref</item>\n      <item>sealed</item>\n      <item>shared</item>\n      <item>value</item>\n    </list>\n    <list name=\"predefines\">\n      <item>abs</item>\n      <item>assert</item>\n      <item>cap</item>\n      <item>copy</item>\n      <item>copyvalue</item>\n      <item>dec</item>\n      <item>excl</item>\n      <item>false</item>\n      <item>halt</item>\n      <item>inc</item>\n      <item>len</item>\n      <item>low</item>\n      <item>max</item>\n      <item>min</item>\n      <item>odd</item>\n      <item>pred</item>\n      <item>read</item>\n      <item>readln</item>\n      <item>reason</item>\n      <item>size</item>\n      <item>succ</item>\n      <item>true</item>\n      <item>write</item>\n      <item>writeln</item>\n    </list>\n    <list name=\"types\">\n      <item>boolean</item>\n      <item>cardinal</item>\n      <item>char</item>\n      <item>fixed</item>\n      <item>integer</item>\n      <item>real</item>\n      <item>set</item>\n      <item>string</item>\n    </list>\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Normal\">\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\"/>\n\t<keyword attribute=\"Type\" context=\"#stay\" String=\"types\"/>\n\t<keyword attribute=\"Modifier\" context=\"#stay\" String=\"modifiers\"/>\n\t<keyword attribute=\"Predefine\" context=\"#stay\" String=\"predefines\"/>\n        <Float attribute=\"Number\" context=\"#stay\"/>\n        <Int attribute=\"Number\" context=\"#stay\"/>\n\t<HlCHex attribute=\"Number\" context=\"#stay\"/>\n        <DetectChar attribute=\"String\" context=\"String1\" char=\"&quot;\" />\n        <DetectChar attribute=\"String\" context=\"String2\" char=\"'\" />\n        <Detect2Chars attribute=\"Comment\" context=\"Comment1\" char=\"(\" char1=\"*\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String1\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"&quot;\"/>\n      </context>\n      <context attribute=\"String\" lineEndContext=\"#pop\" name=\"String2\">\n        <DetectChar attribute=\"String\" context=\"#pop\" char=\"'\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#stay\" name=\"Comment1\">\n        <Detect2Chars attribute=\"Comment\" context=\"#pop\" char=\"*\" char1=\")\"/>\n      </context>\n\n    </contexts>\n    <itemDatas>\n      <itemData name=\"Normal Text\" defStyleNum=\"dsNormal\" />\n      <itemData name=\"Keyword\"     defStyleNum=\"dsKeyword\" />\n      <itemData name=\"Type\"        defStyleNum=\"dsDataType\"/>\n      <itemData name=\"Number\"      defStyleNum=\"dsDecVal\" />\n      <itemData name=\"String\"      defStyleNum=\"dsString\" />\n      <itemData name=\"Modifier\"    defStyleNum=\"dsOthers\" />\n      <itemData name=\"Predefine\"   defStyleNum=\"dsKeyword\"   italic=\"true\" />\n      <itemData name=\"Comment\"     defStyleNum=\"dsComment\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <keywords casesensitive=\"1\" />\n    <comments>\n      <comment name=\"multiLine\" start=\"(*\" end=\"*)\" />\n    </comments>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/syntax/zsh.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE language SYSTEM \"language.dtd\"\n[\n        <!ENTITY funcname \"[A-Za-z_:][A-Za-z0-9_:#&#37;@-]*\">\n        <!ENTITY varname  \"[A-Za-z_][A-Za-z0-9_]*\">\n        <!ENTITY word     \"[^|&amp;;()&lt;&gt;\\s]+\">    <!-- see man bash -->\n        <!ENTITY eos      \"(?=($|\\s))\">                 <!-- eol or space following -->\n        <!ENTITY noword   \"(?![\\w$+-])\">                <!-- no word, $, + or - following -->\n        <!ENTITY pathpart \"([\\w_@.&#37;*?+-]|\\\\ )\">     <!-- valid character in a file name -->\n]>\n<language name=\"Zsh\" version=\"3\" kateversion=\"2.4\" section=\"Scripts\" extensions=\"*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile\" mimetype=\"application/x-shellscript\" casesensitive=\"1\" author=\"Jonathan Kolberg (bulldog98@kubuntu-de.org)\" license=\"LGPL\">\n\n<!-- (c) 2011 by Jonathan Kolberg (bulldog98@kubuntu-de.org)\n  modified for zsh -->\n<!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl)\n    Changes by Matthew Woehlke (mw_triad@users.sourceforge.net)\n    Changes by Sebastian Pipping (webmaster@hartwork.org)\n    Released under the LGPL, part of kdelibs/kate -->\n\n  <highlighting>\n    <list name=\"keywords\">\n      <item>else</item>\n      <item>for</item>\n      <item>function</item>\n      <item>in</item>\n      <item>select</item>\n      <item>until</item>\n      <item>while</item>\n      <item>elif</item>\n      <item>then</item>\n      <item>set</item>\n    </list>\n\n<list name=\"builtins\"><!-- see man zshbuiltins -->\n\t<item>-</item>\n\t<item>.</item>\n\t<item>:</item>\n\t<item>alias</item>\n\t<item>autoload</item>\n\t<item>bg</item>\n\t<item>bindkey</item>\n\t<item>break</item>\n\t<item>builtin</item>\n\t<item>bye</item>\n\t<item>cap</item>\n\t<item>cd</item>\n\t<item>chdir</item>\n\t<item>clone</item>\n\t<item>command</item>\n\t<item>comparguments</item>\n\t<item>compcall</item>\n\t<item>compctl</item>\n\t<item>compdescribe</item>\n\t<item>compfiles</item>\n\t<item>compgroups</item>\n\t<item>compquote</item>\n\t<item>comptags</item>\n\t<item>comptry</item>\n\t<item>compvalues</item>\n\t<item>continue</item>\n\t<item>dirs</item>\n\t<item>disable</item>\n\t<item>disown</item>\n\t<item>echo</item>\n\t<item>echotc</item>\n\t<item>echoti</item>\n\t<item>emulate</item>\n\t<item>enable</item>\n\t<item>eval</item>\n\t<item>exec</item>\n\t<item>exit</item>\n\t<item>false</item>\n\t<item>fc</item>\n\t<item>fg</item>\n\t<item>functions</item>\n\t<item>getcap</item>\n\t<item>getopts</item>\n\t<item>hash</item>\n\t<item>history</item>\n\t<item>jobs</item>\n\t<item>kill</item>\n\t<item>let</item>\n\t<item>limit</item>\n\t<item>log</item>\n\t<item>logout</item>\n\t<item>noglob</item>\n\t<item>popd</item>\n\t<item>print</item>\n\t<item>printf</item>\n\t<item>pushd</item>\n\t<item>pushln</item>\n\t<item>pwd</item>\n\t<item>r</item>\n\t<item>rehash</item>\n\t<item>return</item>\n\t<item>sched</item>\n\t<item>set</item>\n\t<item>setcap</item>\n\t<item>setopt</item>\n\t<item>shift</item>\n\t<item>source</item>\n\t<item>stat</item>\n\t<item>suspend</item>\n\t<item>test</item>\n\t<item>times</item>\n\t<item>trap</item>\n\t<item>true</item>\n\t<item>ttyctl</item>\n\t<item>type</item>\n\t<item>ulimit</item>\n\t<item>umask</item>\n\t<item>unalias</item>\n\t<item>unfunction</item>\n\t<item>unhash</item>\n\t<item>unlimit</item>\n\t<item>unset</item>\n\t<item>unsetopt</item>\n\t<item>vared</item>\n\t<item>wait</item>\n\t<item>whence</item>\n\t<item>where</item>\n\t<item>which</item>\n\t<item>zcompile</item>\n\t<item>zformat</item>\n\t<item>zftp</item>\n\t<item>zle</item>\n\t<item>zmodload</item>\n\t<item>zparseopts</item>\n\t<item>zprof</item>\n\t<item>zpty</item>\n\t<item>zregexparse</item>\n\t<item>zsocket</item>\n\t<item>zstyle</item>\n\t<item>ztcp</item>\n    </list>\n\n    <list name=\"builtins_var\">\n\t<item>declare</item>\n\t<item>export</item>\n\t<item>float</item>\n\t<item>getln</item>\n\t<item>integer</item>\n\t<item>unset</item>\n\t<item>declare</item>\n\t<item>typeset</item>\n\t<item>local</item>\n\t<item>read</item>\n\t<item>readonly</item>\n    </list>\n\n    <list name=\"unixcommands\">\n      <!-- /bin -->\n      <item>arch</item>\n      <item>awk</item>\n      <item>bash</item>\n      <item>bunzip2</item>\n      <item>bzcat</item>\n      <item>bzcmp</item>\n      <item>bzdiff</item>\n      <item>bzegrep</item>\n      <item>bzfgrep</item>\n      <item>bzgrep</item>\n      <item>bzip2</item>\n      <item>bzip2recover</item>\n      <item>bzless</item>\n      <item>bzmore</item>\n      <item>cat</item>\n      <item>chattr</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chown</item>\n      <item>chvt</item>\n      <item>cp</item>\n      <item>date</item>\n      <item>dd</item>\n      <item>deallocvt</item>\n      <item>df</item>\n      <item>dir</item>\n      <item>dircolors</item>\n      <item>dmesg</item>\n      <item>dnsdomainname</item>\n      <item>domainname</item>\n      <item>du</item>\n      <item>dumpkeys</item>\n      <item>echo</item>\n      <item>ed</item>\n      <item>egrep</item>\n      <item>false</item>\n      <item>fgconsole</item>\n      <item>fgrep</item>\n      <item>fuser</item>\n      <item>gawk</item>\n      <item>getkeycodes</item>\n      <item>gocr</item>\n      <item>grep</item>\n      <item>groff</item>\n      <item>groups</item>\n      <item>gunzip</item>\n      <item>gzexe</item>\n      <item>gzip</item>\n      <item>hostname</item>\n      <item>igawk</item>\n      <item>install</item>\n      <item>kbd_mode</item>\n      <item>kbdrate</item>\n      <item>killall</item>\n      <item>last</item>\n      <item>lastb</item>\n      <item>link</item>\n      <item>ln</item>\n      <item>loadkeys</item>\n      <item>loadunimap</item>\n      <item>login</item>\n      <item>ls</item>\n      <item>lsattr</item>\n      <item>lsmod</item>\n      <item>lsmod.old</item>\n      <item>lzcat</item>\n      <item>lzcmp</item>\n      <item>lzdiff</item>\n      <item>lzegrep</item>\n      <item>lzfgrep</item>\n      <item>lzgrep</item>\n      <item>lzless</item>\n      <item>lzcat</item>\n      <item>lzma</item>\n      <item>lzmainfo</item>\n      <item>lzmore</item>\n      <item>mapscrn</item>\n      <item>mesg</item>\n      <item>mkdir</item>\n      <item>mkfifo</item>\n      <item>mknod</item>\n      <item>mktemp</item>\n      <item>more</item>\n      <item>mount</item>\n      <item>mv</item>\n      <item>nano</item>\n      <item>netstat</item>\n      <item>nisdomainname</item>\n      <item>nroff</item>\n      <item>openvt</item>\n      <item>pgawk</item>\n      <item>pidof</item>\n      <item>ping</item>\n      <item>ps</item>\n      <item>pstree</item>\n      <item>pwd</item>\n      <item>rbash</item>\n      <item>readlink</item>\n      <item>red</item>\n      <item>resizecons</item>\n      <item>rm</item>\n      <item>rmdir</item>\n      <item>run-parts</item>\n      <item>sash</item>\n      <item>sed</item>\n      <item>setfont</item>\n      <item>setkeycodes</item>\n      <item>setleds</item>\n      <item>setmetamode</item>\n      <item>setserial</item>\n      <item>sh</item>\n      <item>showkey</item>\n      <item>shred</item>\n      <item>sleep</item>\n      <item>ssed</item>\n      <item>stat</item>\n      <item>stty</item>\n      <item>su</item>\n      <item>sync</item>\n      <item>tar</item>\n      <item>tempfile</item>\n      <item>touch</item>\n      <item>troff</item>\n      <item>true</item>\n      <item>umount</item>\n      <item>uname</item>\n      <item>unicode_start</item>\n      <item>unicode_stop</item>\n      <item>unlink</item>\n      <item>unlzma</item>\n      <item>unxz</item>\n      <item>utmpdump</item>\n      <item>uuidgen</item>\n      <item>vdir</item>\n      <item>wall</item>\n      <item>wc</item>\n      <item>xz</item>\n      <item>xzcat</item>\n      <item>ypdomainname</item>\n      <item>zcat</item>\n      <item>zcmp</item>\n      <item>zdiff</item>\n      <item>zegrep</item>\n      <item>zfgrep</item>\n      <item>zforce</item>\n      <item>zgrep</item>\n      <item>zless</item>\n      <item>zmore</item>\n      <item>znew</item>\n      <item>zsh</item>\n\n      <!-- some from /usr/bin -->\n      <item>aclocal</item>\n      <item>aconnect</item>\n      <item>aplay</item>\n      <item>apm</item>\n      <item>apmsleep</item>\n      <item>apropos</item>\n      <item>ar</item>\n      <item>arecord</item>\n      <item>as</item>\n      <item>as86</item>\n      <item>autoconf</item>\n      <item>autoheader</item>\n      <item>automake</item>\n      <item>awk</item>\n      <item>basename</item>\n      <item>bc</item>\n      <item>bison</item>\n      <item>c++</item>\n      <item>cal</item>\n      <item>cat</item>\n      <item>cc</item>\n      <item>cdda2wav</item>\n      <item>cdparanoia</item>\n      <item>cdrdao</item>\n      <item>cd-read</item>\n      <item>cdrecord</item>\n      <item>chfn</item>\n      <item>chgrp</item>\n      <item>chmod</item>\n      <item>chown</item>\n      <item>chroot</item>\n      <item>chsh</item>\n      <item>clear</item>\n      <item>cmp</item>\n      <item>co</item>\n      <item>col</item>\n      <item>comm</item>\n      <item>cp</item>\n      <item>cpio</item>\n      <item>cpp</item>\n      <item>cut</item>\n      <item>dc</item>\n      <item>dd</item>\n      <item>df</item>\n      <item>diff</item>\n      <item>diff3</item>\n      <item>dir</item>\n      <item>dircolors</item>\n      <item>directomatic</item>\n      <item>dirname</item>\n      <item>du</item>\n      <item>env</item>\n      <item>expr</item>\n      <item>fbset</item>\n      <item>file</item>\n      <item>find</item>\n      <item>flex</item>\n      <item>flex++</item>\n      <item>fmt</item>\n      <item>free</item>\n      <item>ftp</item>\n      <item>funzip</item>\n      <item>fuser</item>\n      <item>g++</item>\n      <item>gawk</item>\n      <item>gc</item>\n      <item>gcc</item>\n      <item>gdb</item>\n      <item>getent</item>\n      <item>getopt</item>\n      <item>gettext</item>\n      <item>gettextize</item>\n      <item>gimp</item>\n      <item>gimp-remote</item>\n      <item>gimptool</item>\n      <item>gmake</item>\n      <item>gs</item>\n      <item>head</item>\n      <item>hexdump</item>\n      <item>id</item>\n      <item>install</item>\n      <item>join</item>\n      <item>kill</item>\n      <item>killall</item>\n      <item>ld</item>\n      <item>ld86</item>\n      <item>ldd</item>\n      <item>less</item>\n      <item>lex</item>\n      <item>ln</item>\n      <item>locate</item>\n      <item>lockfile</item>\n      <item>logname</item>\n      <item>lp</item>\n      <item>lpr</item>\n      <item>ls</item>\n      <item>lynx</item>\n      <item>m4</item>\n      <item>make</item>\n      <item>man</item>\n      <item>mkdir</item>\n      <item>mknod</item>\n      <item>msgfmt</item>\n      <item>mv</item>\n      <item>namei</item>\n      <item>nasm</item>\n      <item>nawk</item>\n      <item>nice</item>\n      <item>nl</item>\n      <item>nm</item>\n      <item>nm86</item>\n      <item>nmap</item>\n      <item>nohup</item>\n      <item>nop</item>\n      <item>od</item>\n      <item>passwd</item>\n      <item>patch</item>\n      <item>pcregrep</item>\n      <item>pcretest</item>\n      <item>perl</item>\n      <item>perror</item>\n      <item>pidof</item>\n      <item>pr</item>\n      <item>printf</item>\n      <item>procmail</item>\n      <item>prune</item>\n      <item>ps2ascii</item>\n      <item>ps2epsi</item>\n      <item>ps2frag</item>\n      <item>ps2pdf</item>\n      <item>ps2ps</item>\n      <item>psbook</item>\n      <item>psmerge</item>\n      <item>psnup</item>\n      <item>psresize</item>\n      <item>psselect</item>\n      <item>pstops</item>\n      <item>rcs</item>\n      <item>rev</item>\n      <item>rm</item>\n      <item>scp</item>\n      <item>sed</item>\n      <item>seq</item>\n      <item>setterm</item>\n      <item>shred</item>\n      <item>size</item>\n      <item>size86</item>\n      <item>skill</item>\n      <item>slogin</item>\n      <item>snice</item>\n      <item>sort</item>\n      <item>sox</item>\n      <item>split</item>\n      <item>ssh</item>\n      <item>ssh-add</item>\n      <item>ssh-agent</item>\n      <item>ssh-keygen</item>\n      <item>ssh-keyscan</item>\n      <item>stat</item>\n      <item>strings</item>\n      <item>strip</item>\n      <item>sudo</item>\n      <item>suidperl</item>\n      <item>sum</item>\n      <item>tac</item>\n      <item>tail</item>\n      <item>tee</item>\n      <item>test</item>\n      <item>tr</item>\n      <item>uniq</item>\n      <item>unlink</item>\n      <item>unzip</item>\n      <item>updatedb</item>\n      <item>updmap</item>\n      <item>uptime</item>\n      <item>users</item>\n      <item>vmstat</item>\n      <item>w</item>\n      <item>wc</item>\n      <item>wget</item>\n      <item>whatis</item>\n      <item>whereis</item>\n      <item>which</item>\n      <item>who</item>\n      <item>whoami</item>\n      <item>write</item>\n      <item>xargs</item>\n      <item>yacc</item>\n      <item>yes</item>\n      <item>zip</item>\n      <item>zsoelim</item>\n\n      <!-- others -->\n      <item>dcop</item>\n      <item>kdialog</item>\n      <item>kfile</item>\n      <item>xhost</item>\n      <item>xmodmap</item>\n      <item>xset</item>\n    </list>\n\n\n    <contexts>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Start\">\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n<!-- ====== The following rulessets are meant to be included ======== -->\n      <!-- FindAll tries to interpret everything -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindAll\">\n        <IncludeRules context=\"FindComments\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- FindMost tries to interpret anything except commands -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindMost\">\n        <IncludeRules context=\"FindComments\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n\n      <!-- FindComments consumes shell comments till EOL -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindComments\">\n        <DetectChar attribute=\"Comment\" context=\"Comment\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"Comment\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"Comment\">\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindCommentsParen\">\n        <DetectChar attribute=\"Comment\" context=\"CommentParen\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"CommentParen\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentParen\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"[^)](?=\\))\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n      <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"FindCommentsBackq\">\n        <DetectChar attribute=\"Comment\" context=\"CommentBackq\" char=\"#\" firstNonSpace=\"true\"/>\n        <RegExpr attribute=\"Normal Text\" context=\"CommentBackq\" String=\"[\\s;](?=#)\" />\n      </context>\n      <context attribute=\"Comment\" lineEndContext=\"#pop\" name=\"CommentBackq\">\n        <RegExpr attribute=\"Comment\" context=\"#pop\" String=\"[^`](?=`)\" />\n        <IncludeRules context=\"##Alerts\" />\n      </context>\n\n\n      <!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindCommands\">\n        <!-- start expression in double parentheses -->\n        <Detect2Chars attribute=\"Keyword\" context=\"ExprDblParen\" char=\"(\" char1=\"(\" beginRegion=\"expression\" />\n        <!-- start expression in double brackets -->\n        <RegExpr attribute=\"Keyword\" context=\"ExprDblBracket\" String=\"\\[\\[&eos;\" beginRegion=\"expression\" column=\"0\"/>\n        <RegExpr attribute=\"Keyword\" context=\"ExprDblBracket\" String=\"\\s\\[\\[&eos;\" beginRegion=\"expression\" />\n        <!-- start expression in single brackets -->\n        <RegExpr attribute=\"Builtin\" context=\"ExprBracket\" String=\"\\[&eos;\" beginRegion=\"expression\" column=\"0\"/>\n        <RegExpr attribute=\"Builtin\" context=\"ExprBracket\" String=\"\\s\\[&eos;\" beginRegion=\"expression\" />\n        <!-- start a group command with { -->\n        <RegExpr attribute=\"Keyword\" context=\"Group\" String=\"\\{&eos;\" beginRegion=\"group\" />\n        <!-- start a subshell -->\n        <DetectChar attribute=\"Keyword\" context=\"SubShell\" char=\"(\" beginRegion=\"subshell\" />\n        <!-- match do and if blocks -->\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bdo&noword;\" beginRegion=\"do\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bdone&noword;\" endRegion=\"do\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bif&eos;\" beginRegion=\"if\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\bfi&noword;\" endRegion=\"if\" />\n        <!-- handle case as a special case -->\n        <RegExpr attribute=\"Keyword\" context=\"Case\" String=\"\\bcase&noword;\" beginRegion=\"case\" />\n        <!-- handle command line options -->\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"-[A-Za-z0-9][A-Za-z0-9_]*\" />\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"--[a-z][A-Za-z0-9_-]*\" />\n        <!-- handle variable assignments -->\n        <RegExpr attribute=\"Variable\" context=\"Assign\" String=\"\\b&varname;\\+?=\" />\n        <RegExpr attribute=\"Variable\" context=\"AssignSubscr\" String=\"\\b&varname;(?=\\[.+\\]\\+?=)\" />\n        <!-- handle functions with function keyword before keywords -->\n        <StringDetect attribute=\"Function\" context=\"#stay\" String=\":()\" />\n        <RegExpr attribute=\"Keyword\" context=\"FunctionDef\" String=\"\\bfunction\\b\" />\n        <!-- handle keywords -->\n        <keyword attribute=\"Keyword\" context=\"#stay\" String=\"keywords\" />\n        <RegExpr attribute=\"Builtin\" context=\"#stay\" String=\"\\.(?=\\s)\" />\n        <keyword attribute=\"Builtin\" context=\"#stay\" String=\"builtins\" />\n        <keyword attribute=\"Command\" context=\"#stay\" String=\"unixcommands\" />\n        <!-- handle commands that have variable names as argument -->\n        <keyword attribute=\"Builtin\" context=\"VarName\" String=\"builtins_var\" />\n        <!-- handle here-string -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"\\d*&lt;&lt;&lt;\" />\n        <!-- handle here document -->\n        <Detect2Chars attribute=\"Redirection\" context=\"HereDoc\" char=\"&lt;\" char1=\"&lt;\" lookAhead=\"true\" />\n        <!-- handle process subst -->\n        <RegExpr attribute=\"Redirection\" context=\"ProcessSubst\" String=\"[&lt;&gt;]\\(\" />\n        <!-- handle redirection -->\n        <RegExpr attribute=\"Redirection\" context=\"#stay\" String=\"([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)\" />\n        <!-- handle &, &&, | and || -->\n        <RegExpr attribute=\"Control\" context=\"#stay\" String=\"([|&amp;])\\1?\" />\n        <!-- mark function definitions without function keyword -->\n        <RegExpr attribute=\"Function\" context=\"#stay\" String=\"&funcname;\\s*\\(\\)\" />\n      </context>\n\n      <!-- FindOthers contains various rules to mark different shell input -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindOthers\">\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\[][;\\\\$`{}()|&amp;&lt;&gt;* ]\" />\n        <RegExpr attribute=\"Keyword\" context=\"#stay\" String=\"\\\\$\" />\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\{(?!(\\s|$))\\S*\\}\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"&pathpart;*(?=/)\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"~\\w*\" />\n        <RegExpr attribute=\"Path\" context=\"#stay\" String=\"/&pathpart;*(?=([\\s/):;$`'&quot;]|$))\" />\n        <!-- TODO: shell globs beside * and ? (in Path's) -->\n      </context>\n\n      <!-- FindStrings looks for single and double quoted strings, also with $-prefix -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindStrings\">\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"\\\" char1=\"'\" />\n        <Detect2Chars attribute=\"Escape\" context=\"#stay\" char=\"\\\" char1=\"&quot;\" />\n        <DetectChar attribute=\"String SingleQ\" context=\"StringSQ\" char=\"'\" />\n        <DetectChar attribute=\"String DoubleQ\" context=\"StringDQ\" char=\"&quot;\" />\n        <Detect2Chars attribute=\"String SingleQ\" context=\"StringEsc\" char=\"$\" char1=\"'\" />\n        <Detect2Chars attribute=\"String Transl.\" context=\"StringDQ\" char=\"$\" char1=\"&quot;\" />\n      </context>\n\n      <!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindSubstitutions\">\n        <RegExpr attribute=\"Variable\" context=\"Subscript\" String=\"\\$&varname;\\[\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$[*@#?$!_0-9-]\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{[*@#?$!_0-9-]\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{#&varname;(\\[[*@]\\])?\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\$\\{!&varname;(\\[[*@]\\]|[*@])?\\}\" />\n        <RegExpr attribute=\"Variable\" context=\"VarBrace\" String=\"\\$\\{#?&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"VarBrace\" String=\"\\$\\{[*@#?$!_0-9-](?=[:#%/=?+-])\" />\n        <StringDetect attribute=\"Variable\" context=\"ExprDblParenSubst\" String=\"$((\" beginRegion=\"expression\" />\n        <StringDetect attribute=\"Redirection\" context=\"SubstFile\" String=\"$(&lt;\" />\n        <Detect2Chars attribute=\"Variable\" context=\"SubstCommand\" char=\"$\" char1=\"(\" />\n        <DetectChar attribute=\"Backquote\" context=\"SubstBackq\" char=\"`\" />\n        <RegExpr attribute=\"Escape\" context=\"#stay\" String=\"\\\\[`$\\\\]\" />\n      </context>\n\n      <!-- FindTests finds operators valid in tests -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"FindTests\">\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-[abcdefghkprstuwxOGLSNozn](?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-([no]t|ef)(?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"([!=]=?|[&gt;&lt;])(?=\\s)\"/>\n        <RegExpr attribute=\"Expression\" context=\"#stay\" String=\"-(eq|ne|[gl][te])(?=\\s)\"/>\n      </context>\n\n\n<!-- ====== These are the contexts that can be branched to ======= -->\n\n      <!-- ExprDblParen consumes an expression started in command mode till )) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblParen\">\n        <Detect2Chars attribute=\"Keyword\" context=\"#pop\" char=\")\" char1=\")\" endRegion=\"expression\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblParenSubst\">\n        <Detect2Chars attribute=\"Variable\" context=\"#pop\" char=\")\" char1=\")\" endRegion=\"expression\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprSubParen consumes an expression till ) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprSubParen\">\n        <DetectChar attribute=\"Normal Text\" context=\"#pop\" char=\")\" />\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprBracket consumes an expression till ] -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprBracket\">\n        <RegExpr attribute=\"Builtin\" context=\"#pop\" String=\"\\s\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" />\n        <RegExpr attribute=\"Builtin\" context=\"#pop\" String=\"\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" column=\"0\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindTests\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- ExprDblBracket consumes an expression till ]] -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ExprDblBracket\">\n        <RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"\\s\\]\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" />\n        <RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"\\]\\](?=($|[\\s;|&amp;]))\" endRegion=\"expression\" column=\"0\"/>\n        <DetectChar attribute=\"Normal Text\" context=\"ExprSubParen\" char=\"(\" />\n        <IncludeRules context=\"FindTests\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- Group consumes shell input till } -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Group\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\"}\" endRegion=\"group\" />\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- SubShell consumes shell input till ) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubShell\">\n        <DetectChar attribute=\"Keyword\" context=\"#pop\" char=\")\" endRegion=\"subshell\" />\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- Assign consumes an expression till EOL or whitespace -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"Assign\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Variable\" context=\"AssignArray\" char=\"(\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[\\w:,+_./-]\" />\n      </context>\n\n      <!-- AssignArray consumes everything till ), marking assignments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"AssignArray\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\")\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"AssignSubscr\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <Detect2Chars attribute=\"Variable\" context=\"Assign\" char=\"+\" char1=\"=\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- Subscript consumes anything till ], marks as Variable -->\n      <context attribute=\"Variable\" lineEndContext=\"#stay\" name=\"Subscript\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\"]\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- FunctionDef consumes a name, possibly with (), marks as Function -->\n      <context attribute=\"Function\" lineEndContext=\"#pop\" name=\"FunctionDef\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <RegExpr attribute=\"Function\" context=\"#pop\" String=\"\\s+&funcname;(\\s*\\(\\))?\" />\n      </context>\n\n      <!-- VarName consumes spare variable names and assignments -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"VarName\" fallthrough=\"true\" fallthroughContext=\"#pop\">\n        <!-- handle command line options -->\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"-[A-Za-z0-9]+\" />\n        <RegExpr attribute=\"Option\" context=\"#stay\" String=\"--[a-z][A-Za-z0-9_-]*\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"\\b&varname;\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <DetectChar attribute=\"Variable\" context=\"Assign\" char=\"=\" />\n        <IncludeRules context=\"FindMost\" />\n        <!-- stay here in spaces and other safe characters -->\n        <RegExpr attribute=\"Normal Text\" context=\"#stay\" String=\"[^]})|;`&amp;&gt;&lt;]\" />\n      </context>\n\n      <!-- ProcessSubst handles <(command) and >(command) -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"ProcessSubst\">\n        <DetectChar attribute=\"Redirection\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- StringSQ consumes anything till ' -->\n      <context attribute=\"String SingleQ\" lineEndContext=\"#stay\" name=\"StringSQ\">\n        <DetectChar attribute=\"String SingleQ\" context=\"#pop\" char=\"'\" />\n      </context>\n\n      <!-- StringDQ consumes anything till \", substitutes vars and expressions -->\n      <context attribute=\"String DoubleQ\" lineEndContext=\"#stay\" name=\"StringDQ\">\n        <DetectChar attribute=\"String DoubleQ\" context=\"#pop\" char=\"&quot;\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\[`&quot;\\\\$\\n]\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- StringEsc eats till ', but escaping many characters -->\n      <context attribute=\"String SingleQ\" lineEndContext=\"#stay\" name=\"StringEsc\">\n        <DetectChar attribute=\"String SingleQ\" context=\"#pop\" char=\"'\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\[abefnrtv\\\\']\" />\n        <RegExpr attribute=\"String Escape\" context=\"#stay\" String=\"\\\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)\" />\n      </context>\n\n      <!-- VarBrace is called as soon as ${xxx is encoutered -->\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"VarBrace\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\"}\" />\n        <DetectChar attribute=\"Variable\" context=\"Subscript\" char=\"[\" />\n        <RegExpr attribute=\"Variable\" context=\"VarAlt\" String=\"(:?[-=?+]|##?|%%?)\" />\n        <RegExpr attribute=\"Variable\" context=\"VarSubst\" String=\"//?\" />\n        <DetectChar attribute=\"Variable\" context=\"VarSub\" char=\":\" />\n      </context>\n\n      <!-- VarAlt is to handle default/alternate/etc values of variables -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"VarAlt\">\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop\" char=\"}\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- VarSubst is to handle substitutions on variables -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"VarSubst\">\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop\" char=\"}\" />\n        <DetectChar attribute=\"Variable\" context=\"VarSubst2\" char=\"/\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"VarSubst2\">\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop#pop\" char=\"}\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <!-- VarSub is to substrings of variables -->\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"VarSub\">\n        <DetectChar attribute=\"Variable\" context=\"VarSub2\" char=\":\" />\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop\" char=\"}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[0-9]+(?=[:}])\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n      <context attribute=\"Error\" lineEndContext=\"#stay\" name=\"VarSub2\">\n        <DetectChar attribute=\"Variable\" context=\"#pop#pop#pop\" char=\"}\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"&varname;\" />\n        <RegExpr attribute=\"Variable\" context=\"#stay\" String=\"[0-9](?=[:}])\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n\n      <!-- SubstFile is called after a <( or >( is encoutered -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstFile\">\n        <DetectChar attribute=\"Redirection\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- SubstCommand is called after a $( is encountered -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstCommand\">\n        <DetectChar attribute=\"Variable\" context=\"#pop\" char=\")\" />\n        <IncludeRules context=\"FindCommentsParen\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- SubstBackq is called when a backquote is encountered -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"SubstBackq\">\n        <DetectChar attribute=\"Backquote\" context=\"#pop\" char=\"`\" />\n        <IncludeRules context=\"FindCommentsBackq\" />\n        <IncludeRules context=\"FindCommands\" />\n        <IncludeRules context=\"FindStrings\" />\n        <IncludeRules context=\"FindSubstitutions\" />\n        <IncludeRules context=\"FindOthers\" />\n      </context>\n\n      <!-- Case is called after the case keyword is encoutered. We handle this because of\n           the lonely closing parentheses that would otherwise disturb the expr matching -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"Case\">\n        <RegExpr attribute=\"Keyword\" context=\"CaseIn\" String=\"\\sin\\b\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- CaseIn is called when the construct 'case ... in' has been found. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"CaseIn\">\n        <RegExpr attribute=\"Keyword\" context=\"#pop#pop\" String=\"\\besac(?=$|[\\s;)])\" endRegion=\"case\" />\n        <DetectChar attribute=\"Keyword\" context=\"CaseExpr\" char=\")\" beginRegion=\"caseexpr\" />\n        <AnyChar attribute=\"Keyword\" context=\"#stay\" String=\"(|\" />\n        <IncludeRules context=\"FindMost\" />\n      </context>\n\n      <!-- CaseExpr eats shell input till ;; -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"CaseExpr\">\n        <Detect2Chars attribute=\"Keyword\" context=\"#pop\" char=\";\" char1=\";\" endRegion=\"caseexpr\" />\n        <RegExpr attribute=\"Keyword\" context=\"#pop\" String=\"esac(?=$|[\\s;)])\" lookAhead=\"true\" firstNonSpace=\"true\" endRegion=\"caseexpr\"/>\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <!-- HereDoc consumes Here-documents. It is called at the beginning of the \"<<\" construct. -->\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDoc\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocIQ\"  String=\"(&lt;&lt;-\\s*&quot;(&word;)&quot;)\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocIQ\"  String=\"(&lt;&lt;-\\s*'(&word;)')\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocIQ\"  String=\"(&lt;&lt;-\\s*\\\\(&word;))\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocINQ\" String=\"(&lt;&lt;-\\s*(&word;))\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocQ\"   String=\"(&lt;&lt;\\s*&quot;(&word;)&quot;)\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocQ\"   String=\"(&lt;&lt;\\s*'(&word;)')\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocQ\"   String=\"(&lt;&lt;\\s*\\\\(&word;))\" lookAhead=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"HereDocNQ\"  String=\"(&lt;&lt;\\s*(&word;))\" lookAhead=\"true\" />\n        <StringDetect attribute=\"Redirection\" context=\"#pop\"  String=\"&lt;&lt;\" /><!-- always met -->\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#pop\" name=\"HereDocRemainder\">\n        <IncludeRules context=\"FindAll\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^%2\\b\" dynamic=\"true\" column=\"0\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocNQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^%2\\b\" dynamic=\"true\" column=\"0\"/>\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocIQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^\\t*%2\\b\" dynamic=\"true\" column=\"0\"/>\n      </context>\n\n      <context attribute=\"Normal Text\" lineEndContext=\"#stay\" name=\"HereDocINQ\" dynamic=\"true\">\n        <RegExpr attribute=\"Redirection\" context=\"HereDocRemainder\" String=\"%1\" dynamic=\"true\" />\n        <RegExpr attribute=\"Redirection\" context=\"#pop#pop\" String=\"^\\t*%2\\b\" dynamic=\"true\" column=\"0\"/>\n        <IncludeRules context=\"FindSubstitutions\" />\n      </context>\n\n    </contexts>\n\n    <itemDatas>\n      <itemData name=\"Normal Text\"\tdefStyleNum=\"dsNormal\" />\n      <itemData name=\"Comment\"\t\tdefStyleNum=\"dsComment\" />\n      <itemData name=\"Keyword\" \t\tdefStyleNum=\"dsKeyword\" />\n      <itemData name=\"Control\" \t\tdefStyleNum=\"dsKeyword\" />\n      <itemData name=\"Builtin\" \t\tdefStyleNum=\"dsKeyword\" color=\"#808\" />\n      <itemData name=\"Command\" \t\tdefStyleNum=\"dsKeyword\" color=\"#c0c\" />\n      <itemData name=\"Redirection\" \tdefStyleNum=\"dsKeyword\" color=\"#238\" />\n      <itemData name=\"Escape\" \t\tdefStyleNum=\"dsDataType\" />\n      <itemData name=\"String SingleQ\" \tdefStyleNum=\"dsString\" />\n      <itemData name=\"String DoubleQ\" \tdefStyleNum=\"dsString\" />\n      <itemData name=\"Backquote\" \tdefStyleNum=\"dsKeyword\" />\n      <itemData name=\"String Transl.\" \tdefStyleNum=\"dsString\" />\n      <itemData name=\"String Escape\" \tdefStyleNum=\"dsDataType\" />\n      <itemData name=\"Variable\" \tdefStyleNum=\"dsOthers\" />\n      <itemData name=\"Expression\" \tdefStyleNum=\"dsOthers\" />\n      <itemData name=\"Function\" \tdefStyleNum=\"dsFunction\" />\n      <itemData name=\"Path\" \t\tdefStyleNum=\"dsNormal\" />\n      <itemData name=\"Option\" \t\tdefStyleNum=\"dsNormal\" />\n      <itemData name=\"Error\"            defStyleNum=\"dsError\" />\n    </itemDatas>\n  </highlighting>\n  <general>\n    <comments>\n      <comment name=\"singleLine\" start=\"#\"/>\n    </comments>\n    <keywords casesensitive=\"1\" weakDeliminator=\"^%#[]$._{}:-/\" additionalDeliminator=\"`\"/>\n  </general>\n</language>\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/breeze-dark.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 2,\n        \"name\" : \"Breeze Dark\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#cfcfc2\",\n            \"selected-text-color\" : \"#cfcfc2\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#cfcfc2\",\n            \"selected-text-color\" : \"#cfcfc2\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#8e44ad\",\n            \"selected-text-color\" : \"#af81ff\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#27aeae\",\n            \"selected-text-color\" : \"#27aeae\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#fdbc4b\",\n            \"selected-text-color\" : \"#fdbc4b\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#cfcfc2\",\n            \"selected-text-color\" : \"#cfcfc2\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#7f8c8d\",\n            \"selected-text-color\" : \"#bdc3c7\"\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#0099ff\",\n            \"selected-text-color\" : \"#bdc3c7\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#27ae60\",\n            \"selected-text-color\" : \"#27ae60\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#2980b9\",\n            \"selected-text-color\" : \"#fdbc4b\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#3daee9\",\n            \"selected-text-color\" : \"#3daee9\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#3daee9\",\n            \"selected-text-color\" : \"#3daee9\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#f44f4f\",\n            \"selected-text-color\" : \"#f44f4f\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#27ae60\",\n            \"selected-text-color\" : \"#27ae60\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#2980b9\",\n            \"selected-text-color\" : \"#fdbc4b\"\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#f67400\",\n            \"selected-text-color\" : \"#f67400\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#f67400\",\n            \"selected-text-color\" : \"#f67400\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#f67400\",\n            \"selected-text-color\" : \"#f67400\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#27aeae\",\n            \"selected-text-color\" : \"#27aeae\",\n            \"bold\" : true\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#7a7c7d\",\n            \"selected-text-color\" : \"#808080\"\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#a43340\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#3f8058\",\n            \"selected-text-color\" : \"#54aa75\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#7f8c8d\",\n            \"selected-text-color\" : \"#94a3a4\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#2980b9\",\n            \"selected-text-color\" : \"#3daee9\",\n            \"background-color\" : \"#153042\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#c45b00\",\n            \"selected-text-color\" : \"#e46700\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#95da4c\",\n            \"selected-text-color\" : \"#95da4c\",\n            \"background-color\" : \"#4d1f24\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#27ae60\",\n            \"selected-text-color\" : \"#27ae60\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#232629\",\n        \"code-folding\" : \"#224e65\",\n        \"bracket-matching\" : \"#8e44ad\",\n        \"current-line\" : \"#2A2E32\",\n        \"icon-border\" : \"#31363b\",\n        \"indentation-line\" : \"#3a3f44\",\n        \"line-numbers\" : \"#7a7c7d\",\n        \"current-line-number\" : \"#a5a6a8\",\n        \"mark-bookmark\" : \"#0404bf\",\n        \"mark-breakpoint-active\" : \"#8b0607\",\n        \"mark-breakpoint-reached\" : \"#6d6e07\",\n        \"mark-breakpoint-disabled\" : \"#820683\",\n        \"mark-execution\" : \"#4d4e50\",\n        \"mark-warning\" : \"#f67400\",\n        \"mark-error\" : \"#da4453\",\n        \"modified-lines\" : \"#c04900\",\n        \"replace-highlight\" : \"#808021\",\n        \"saved-lines\" : \"#1c8042\",\n        \"search-highlight\" : \"#218058\",\n        \"selection\" : \"#2d5c76\",\n        \"separator\" : \"#7a7c7d\",\n        \"spell-checking\" : \"#c0392b\",\n        \"tab-marker\" : \"#4d4d4d\",\n        \"template-background\" : \"#31363b\",\n        \"template-placeholder\" : \"#123723\",\n        \"template-focused-placeholder\" : \"#123723\",\n        \"template-read-only-placeholder\" : \"#4d1f24\",\n        \"word-wrap-marker\" : \"#3a3f44\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/default.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 3,\n        \"name\" : \"Default\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#644a9b\",\n            \"selected-text-color\" : \"#452886\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#644a9b\",\n            \"selected-text-color\" : \"#452886\",\n            \"bold\" : true\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#924c9d\",\n            \"selected-text-color\" : \"#6c2477\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#3daee9\",\n            \"selected-text-color\" : \"#fcfcfc\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#aa5500\",\n            \"selected-text-color\" : \"#5e2f00\"\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#898887\",\n            \"selected-text-color\" : \"#5e5d5d\"\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#607880\",\n            \"selected-text-color\" : \"#46585e\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#ca60ca\",\n            \"selected-text-color\" : \"#a44ea4\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\",\n            \"background-color\" : \"#e0e9f8\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"background-color\" : \"#f7e6e6\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#ffffff\",\n        \"code-folding\" : \"#94caef\",\n        \"bracket-matching\" : \"#ffff00\",\n        \"current-line\" : \"#f8f7f6\",\n        \"icon-border\" : \"#f0f0f0\",\n        \"indentation-line\" : \"#d2d2d2\",\n        \"line-numbers\" : \"#a0a0a0\",\n        \"current-line-number\" : \"#1e1e1e\",\n        \"mark-bookmark\" : \"#0000ff\",\n        \"mark-breakpoint-active\" : \"#ff0000\",\n        \"mark-breakpoint-reached\" : \"#ffff00\",\n        \"mark-breakpoint-disabled\" : \"#ff00ff\",\n        \"mark-execution\" : \"#a0a0a4\",\n        \"mark-warning\" : \"#00ff00\",\n        \"mark-error\" : \"#ff0000\",\n        \"modified-lines\" : \"#fdbc4b\",\n        \"replace-highlight\" : \"#00ff00\",\n        \"saved-lines\" : \"#2ecc71\",\n        \"search-highlight\" : \"#ffff00\",\n        \"selection\" : \"#94caef\",\n        \"separator\" : \"#898887\",\n        \"spell-checking\" : \"#bf0303\",\n        \"tab-marker\" : \"#d2d2d2\",\n        \"template-background\" : \"#d6d2d0\",\n        \"template-placeholder\" : \"#baf8ce\",\n        \"template-focused-placeholder\" : \"#76da98\",\n        \"template-read-only-placeholder\" : \"#f6e6e6\",\n        \"word-wrap-marker\" : \"#ededed\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/markdown-breeze-dark.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 2,\n        \"name\" : \"Markdown Breeze Dark\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#98c379\",\n            \"selected-text-color\" : \"#cfcfc2\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#cfcfc2\",\n            \"selected-text-color\" : \"#cfcfc2\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#8e44ad\",\n            \"selected-text-color\" : \"#af81ff\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#27aeae\",\n            \"selected-text-color\" : \"#27aeae\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#fdbc4b\",\n            \"selected-text-color\" : \"#fdbc4b\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#cfcfc2\",\n            \"selected-text-color\" : \"#cfcfc2\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#7f8c8d\",\n            \"selected-text-color\" : \"#bdc3c7\"\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#0099ff\",\n            \"selected-text-color\" : \"#bdc3c7\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#27ae60\",\n            \"selected-text-color\" : \"#27ae60\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#2980b9\",\n            \"selected-text-color\" : \"#fdbc4b\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#3daee9\",\n            \"selected-text-color\" : \"#3daee9\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#3daee9\",\n            \"selected-text-color\" : \"#3daee9\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#f44f4f\",\n            \"selected-text-color\" : \"#f44f4f\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#27ae60\",\n            \"selected-text-color\" : \"#27ae60\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#2980b9\",\n            \"selected-text-color\" : \"#fdbc4b\"\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#f67400\",\n            \"selected-text-color\" : \"#f67400\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#f67400\",\n            \"selected-text-color\" : \"#f67400\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#f67400\",\n            \"selected-text-color\" : \"#f67400\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#27aeae\",\n            \"selected-text-color\" : \"#27aeae\",\n            \"bold\" : true\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#7a7c7d\",\n            \"selected-text-color\" : \"#808080\"\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#a43340\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#3f8058\",\n            \"selected-text-color\" : \"#54aa75\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#7f8c8d\",\n            \"selected-text-color\" : \"#94a3a4\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#2980b9\",\n            \"selected-text-color\" : \"#3daee9\",\n            \"background-color\" : \"#153042\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#c45b00\",\n            \"selected-text-color\" : \"#e46700\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#95da4c\",\n            \"selected-text-color\" : \"#95da4c\",\n            \"background-color\" : \"#4d1f24\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#da4453\",\n            \"selected-text-color\" : \"#da4453\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#27ae60\",\n            \"selected-text-color\" : \"#27ae60\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#232629\",\n        \"code-folding\" : \"#224e65\",\n        \"bracket-matching\" : \"#8e44ad\",\n        \"current-line\" : \"#2A2E32\",\n        \"icon-border\" : \"#31363b\",\n        \"indentation-line\" : \"#3a3f44\",\n        \"line-numbers\" : \"#7a7c7d\",\n        \"current-line-number\" : \"#a5a6a8\",\n        \"mark-bookmark\" : \"#0404bf\",\n        \"mark-breakpoint-active\" : \"#8b0607\",\n        \"mark-breakpoint-reached\" : \"#6d6e07\",\n        \"mark-breakpoint-disabled\" : \"#820683\",\n        \"mark-execution\" : \"#4d4e50\",\n        \"mark-warning\" : \"#f67400\",\n        \"mark-error\" : \"#da4453\",\n        \"modified-lines\" : \"#c04900\",\n        \"replace-highlight\" : \"#808021\",\n        \"saved-lines\" : \"#1c8042\",\n        \"search-highlight\" : \"#218058\",\n        \"selection\" : \"#2d5c76\",\n        \"separator\" : \"#7a7c7d\",\n        \"spell-checking\" : \"#c0392b\",\n        \"tab-marker\" : \"#4d4d4d\",\n        \"template-background\" : \"#31363b\",\n        \"template-placeholder\" : \"#123723\",\n        \"template-focused-placeholder\" : \"#123723\",\n        \"template-read-only-placeholder\" : \"#4d1f24\",\n        \"word-wrap-marker\" : \"#3a3f44\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/markdown-default.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"name\" : \"Markdown Default\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#673ab7\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#644a9b\",\n            \"selected-text-color\" : \"#452886\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#644a9b\",\n            \"selected-text-color\" : \"#452886\",\n            \"bold\" : true\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#924c9d\",\n            \"selected-text-color\" : \"#6c2477\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#3daee9\",\n            \"selected-text-color\" : \"#fcfcfc\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#aa5500\",\n            \"selected-text-color\" : \"#5e2f00\"\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#898887\",\n            \"selected-text-color\" : \"#5e5d5d\"\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#607880\",\n            \"selected-text-color\" : \"#46585e\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#ca60ca\",\n            \"selected-text-color\" : \"#a44ea4\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\",\n            \"background-color\" : \"#e0e9f8\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"background-color\" : \"#f7e6e6\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#ffffff\",\n        \"code-folding\" : \"#94caef\",\n        \"bracket-matching\" : \"#ffff00\",\n        \"current-line\" : \"#f8f7f6\",\n        \"icon-border\" : \"#f0f0f0\",\n        \"indentation-line\" : \"#d2d2d2\",\n        \"line-numbers\" : \"#a0a0a0\",\n        \"current-line-number\" : \"#1e1e1e\",\n        \"mark-bookmark\" : \"#0000ff\",\n        \"mark-breakpoint-active\" : \"#ff0000\",\n        \"mark-breakpoint-reached\" : \"#ffff00\",\n        \"mark-breakpoint-disabled\" : \"#ff00ff\",\n        \"mark-execution\" : \"#a0a0a4\",\n        \"mark-warning\" : \"#00ff00\",\n        \"mark-error\" : \"#ff0000\",\n        \"modified-lines\" : \"#fdbc4b\",\n        \"replace-highlight\" : \"#00ff00\",\n        \"saved-lines\" : \"#2ecc71\",\n        \"search-highlight\" : \"#ffff00\",\n        \"selection\" : \"#94caef\",\n        \"separator\" : \"#898887\",\n        \"spell-checking\" : \"#bf0303\",\n        \"tab-marker\" : \"#d2d2d2\",\n        \"template-background\" : \"#d6d2d0\",\n        \"template-placeholder\" : \"#baf8ce\",\n        \"template-focused-placeholder\" : \"#76da98\",\n        \"template-read-only-placeholder\" : \"#f6e6e6\",\n        \"word-wrap-marker\" : \"#ededed\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/printing.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 3,\n        \"name\" : \"Printing\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#000000\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#000000\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#644a9b\",\n            \"selected-text-color\" : \"#452886\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#000000\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#000000\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#644a9b\",\n            \"selected-text-color\" : \"#452886\"\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#924c9d\",\n            \"selected-text-color\" : \"#6c2477\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#644a9b\",\n            \"selected-text-color\" : \"#452886\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#aa5500\",\n            \"selected-text-color\" : \"#5e2f00\"\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#898887\",\n            \"selected-text-color\" : \"#5e5d5d\"\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#607880\",\n            \"selected-text-color\" : \"#46585e\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#ca60ca\",\n            \"selected-text-color\" : \"#a44ea4\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\",\n            \"background-color\" : \"#e0e9f8\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"background-color\" : \"#f7e6e6\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#ffffff\",\n        \"code-folding\" : \"#94caef\",\n        \"bracket-matching\" : \"#edf9ff\",\n        \"current-line\" : \"#f8f7f6\",\n        \"icon-border\" : \"#d6d2d0\",\n        \"indentation-line\" : \"#d2d2d2\",\n        \"line-numbers\" : \"#221f1e\",\n        \"current-line-number\" : \"#221f1e\",\n        \"mark-bookmark\" : \"#0000ff\",\n        \"mark-breakpoint-active\" : \"#ff0000\",\n        \"mark-breakpoint-reached\" : \"#ffff00\",\n        \"mark-breakpoint-disabled\" : \"#ff00ff\",\n        \"mark-execution\" : \"#a0a0a4\",\n        \"mark-warning\" : \"#00ff00\",\n        \"mark-error\" : \"#ff0000\",\n        \"modified-lines\" : \"#f6e6e6\",\n        \"replace-highlight\" : \"#00ff00\",\n        \"saved-lines\" : \"#baf8ce\",\n        \"search-highlight\" : \"#ffff00\",\n        \"selection\" : \"#94caef\",\n        \"separator\" : \"#898887\",\n        \"spell-checking\" : \"#bf0303\",\n        \"tab-marker\" : \"#d2d2d2\",\n        \"template-background\" : \"#d6d2d0\",\n        \"template-placeholder\" : \"#baf8ce\",\n        \"template-focused-placeholder\" : \"#76da98\",\n        \"template-read-only-placeholder\" : \"#f6e6e6\",\n        \"word-wrap-marker\" : \"#ededed\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/solarized-dark.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"name\" : \"Solarized Dark\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#839496\",\n            \"selected-text-color\" : \"#586e75\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#cb4b16\",\n            \"selected-text-color\" : \"#cb4b16\"\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#cb4b16\",\n            \"selected-text-color\" : \"#cb4b16\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#b58900\",\n            \"selected-text-color\" : \"#b58900\",\n            \"bold\" : true\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\",\n            \"bold\" : true\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#586e75\",\n            \"selected-text-color\" : \"#93a1a1\",\n            \"italic\" : true\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\",\n            \"background-color\" : \"#073642\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#b58900\",\n            \"selected-text-color\" : \"#b58900\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#cb4b16\",\n            \"selected-text-color\" : \"#cb4b16\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#d33682\",\n            \"selected-text-color\" : \"#d33682\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#002b36\",\n        \"code-folding\" : \"#6c71c4\",\n        \"bracket-matching\" : \"#073642\",\n        \"current-line\" : \"#073642\",\n        \"icon-border\" : \"#073642\",\n        \"indentation-line\" : \"#073642\",\n        \"line-numbers\" : \"#586e75\",\n        \"current-line-number\" : \"#586e75\",\n        \"mark-bookmark\" : \"#268bd2\",\n        \"mark-breakpoint-active\" : \"#dc322f\",\n        \"mark-breakpoint-reached\" : \"#b58900\",\n        \"mark-breakpoint-disabled\" : \"#d33682\",\n        \"mark-execution\" : \"#586e75\",\n        \"mark-warning\" : \"#cb4b16\",\n        \"mark-error\" : \"#dc322f\",\n        \"modified-lines\" : \"#cb4b16\",\n        \"replace-highlight\" : \"#859900\",\n        \"saved-lines\" : \"#2aa198\",\n        \"search-highlight\" : \"#b58900\",\n        \"selection\" : \"#eee8d5\",\n        \"separator\" : \"#586e75\",\n        \"spell-checking\" : \"#dc322f\",\n        \"tab-marker\" : \"#586e75\",\n        \"template-background\" : \"#073642\",\n        \"template-placeholder\" : \"#073642\",\n        \"template-focused-placeholder\" : \"#073642\",\n        \"template-read-only-placeholder\" : \"#073642\",\n        \"word-wrap-marker\" : \"#586e75\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/solarized-light.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"name\" : \"Solarized Light\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#657b83\",\n            \"selected-text-color\" : \"#839496\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#cb4b16\",\n            \"selected-text-color\" : \"#cb4b16\"\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#cb4b16\",\n            \"selected-text-color\" : \"#cb4b16\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#b58900\",\n            \"selected-text-color\" : \"#b58900\",\n            \"bold\" : true\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\",\n            \"bold\" : true\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#93a1a1\",\n            \"selected-text-color\" : \"#586e75\",\n            \"italic\" : true\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#2aa198\",\n            \"selected-text-color\" : \"#2aa198\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#268bd2\",\n            \"selected-text-color\" : \"#268bd2\",\n            \"background-color\" : \"#eee8d5\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#b58900\",\n            \"selected-text-color\" : \"#b58900\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#cb4b16\",\n            \"selected-text-color\" : \"#cb4b16\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#d33682\",\n            \"selected-text-color\" : \"#d33682\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#dc322f\",\n            \"selected-text-color\" : \"#dc322f\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#859900\",\n            \"selected-text-color\" : \"#859900\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#fdf6e3\",\n        \"code-folding\" : \"#6c71c4\",\n        \"bracket-matching\" : \"#eee8d5\",\n        \"current-line\" : \"#eee8d5\",\n        \"icon-border\" : \"#eee8d5\",\n        \"indentation-line\" : \"#eee8d5\",\n        \"line-numbers\" : \"#93a1a1\",\n        \"current-line-number\" : \"#93a1a1\",\n        \"mark-bookmark\" : \"#268bd2\",\n        \"mark-breakpoint-active\" : \"#dc322f\",\n        \"mark-breakpoint-reached\" : \"#b58900\",\n        \"mark-breakpoint-disabled\" : \"#d33682\",\n        \"mark-execution\" : \"#93a1a1\",\n        \"mark-warning\" : \"#cb4b16\",\n        \"mark-error\" : \"#dc322f\",\n        \"modified-lines\" : \"#cb4b16\",\n        \"replace-highlight\" : \"#859900\",\n        \"saved-lines\" : \"#2aa198\",\n        \"search-highlight\" : \"#b58900\",\n        \"selection\" : \"#073642\",\n        \"separator\" : \"#93a1a1\",\n        \"spell-checking\" : \"#dc322f\",\n        \"tab-marker\" : \"#93a1a1\",\n        \"template-background\" : \"#eee8d5\",\n        \"template-placeholder\" : \"#eee8d5\",\n        \"template-focused-placeholder\" : \"#eee8d5\",\n        \"template-read-only-placeholder\" : \"#eee8d5\",\n        \"word-wrap-marker\" : \"#93a1a1\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/syntax-highlighting/themes/vscode-dark.theme",
    "content": "    {\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"name\" : \"vscode-dark\"\n    },\n    \"text-styles\": {\n        \"Normal\" : {\n            \"text-color\" : \"#ffffff\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : false,\n            \"italic\" : false,\n            \"underline\" : false,\n            \"strike-through\" : false\n        },\n        \"Keyword\" : {\n            \"text-color\" : \"#569cd6\",\n            \"selected-text-color\" : \"#469cd6\",\n            \"bold\" : true\n        },\n        \"Function\" : {\n            \"text-color\" : \"#dcdcaa\",\n            \"selected-text-color\" : \"#ccdcaa\"\n        },\n        \"Variable\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"ControlFlow\" : {\n            \"text-color\" : \"#569cd6\",\n            \"selected-text-color\" : \"#469cd6\",\n            \"bold\" : true\n        },\n        \"Operator\" : {\n            \"text-color\" : \"#1f1c1b\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"BuiltIn\" : {\n            \"text-color\" : \"#4ec9b0\",\n            \"selected-text-color\" : \"#5ec9b0\",\n            \"bold\" : true\n        },\n        \"Extension\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"bold\" : true\n        },\n        \"Preprocessor\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        },\n        \"Attribute\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"Char\" : {\n            \"text-color\" : \"#924c9d\",\n            \"selected-text-color\" : \"#6c2477\"\n        },\n        \"SpecialChar\" : {\n            \"text-color\" : \"#3daee9\",\n            \"selected-text-color\" : \"#fcfcfc\"\n        },\n        \"String\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"VerbatimString\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"SpecialString\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"Import\" : {\n            \"text-color\" : \"#ff5500\",\n            \"selected-text-color\" : \"#ff5500\"\n        },\n        \"DataType\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\"\n        },\n        \"DecVal\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"BaseN\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Float\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Constant\" : {\n            \"text-color\" : \"#aa5500\",\n            \"selected-text-color\" : \"#5e2f00\"\n        },\n        \"Comment\" : {\n            \"text-color\" : \"#6A9955\",\n            \"selected-text-color\" : \"#7A9955\"\n        },\n        \"Documentation\" : {\n            \"text-color\" : \"#607880\",\n            \"selected-text-color\" : \"#46585e\"\n        },\n        \"Annotation\" : {\n            \"text-color\" : \"#ca60ca\",\n            \"selected-text-color\" : \"#a44ea4\"\n        },\n        \"CommentVar\" : {\n            \"text-color\" : \"#0095ff\",\n            \"selected-text-color\" : \"#ffffff\"\n        },\n        \"RegionMarker\" : {\n            \"text-color\" : \"#0057ae\",\n            \"selected-text-color\" : \"#00316e\",\n            \"background-color\" : \"#e0e9f8\"\n        },\n        \"Information\" : {\n            \"text-color\" : \"#b08000\",\n            \"selected-text-color\" : \"#805c00\"\n        },\n        \"Warning\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\"\n        },\n        \"Alert\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"background-color\" : \"#f7e6e6\",\n            \"bold\" : true\n        },\n        \"Error\" : {\n            \"text-color\" : \"#bf0303\",\n            \"selected-text-color\" : \"#9c0e0e\",\n            \"underline\" : true\n        },\n        \"Others\" : {\n            \"text-color\" : \"#006e28\",\n            \"selected-text-color\" : \"#006e28\"\n        }\n   },\n    \"editor-colors\": {\n        \"background-color\" : \"#ffffff\",\n        \"code-folding\" : \"#94caef\",\n        \"bracket-matching\" : \"#ffff00\",\n        \"current-line\" : \"#f8f7f6\",\n        \"icon-border\" : \"#f0f0f0\",\n        \"indentation-line\" : \"#d2d2d2\",\n        \"line-numbers\" : \"#a0a0a0\",\n        \"current-line-number\" : \"#1e1e1e\",\n        \"mark-bookmark\" : \"#0000ff\",\n        \"mark-breakpoint-active\" : \"#ff0000\",\n        \"mark-breakpoint-reached\" : \"#ffff00\",\n        \"mark-breakpoint-disabled\" : \"#ff00ff\",\n        \"mark-execution\" : \"#a0a0a4\",\n        \"mark-warning\" : \"#00ff00\",\n        \"mark-error\" : \"#ff0000\",\n        \"modified-lines\" : \"#fdbc4b\",\n        \"replace-highlight\" : \"#00ff00\",\n        \"saved-lines\" : \"#2ecc71\",\n        \"search-highlight\" : \"#ffff00\",\n        \"selection\" : \"#94caef\",\n        \"separator\" : \"#898887\",\n        \"spell-checking\" : \"#bf0303\",\n        \"tab-marker\" : \"#d2d2d2\",\n        \"template-background\" : \"#d6d2d0\",\n        \"template-placeholder\" : \"#baf8ce\",\n        \"template-focused-placeholder\" : \"#76da98\",\n        \"template-read-only-placeholder\" : \"#f6e6e6\",\n        \"word-wrap-marker\" : \"#ededed\"\n    }\n}\n"
  },
  {
    "path": "src/data/extra/tasks/git/git.json",
    "content": "{\n    \"version\": \"0.1.4\",\n    \"label\": \"Git\",\n    \"icon\": \"git.svg\",\n    \"tasks\": [\n        {\n            \"label\": {\n                \"en_US\": \"Initialize\",\n                \"zh_CN\": \"初始化\",\n                \"ja_JP\": \"イニシャライズ\"\n            },\n            \"icon\": \"initialization.svg\",\n            \"command\": \"git init -b main\"\n        },\n        {\n            \"label\": {\n                \"en_US\": \"Status\",\n                \"zh_CN\": \"状态\",\n                \"ja_JP\": \"ステータス\"\n            },\n            \"icon\": \"status.svg\",\n            \"command\": \"git status\"\n        },\n        {\n            \"label\": {\n                \"en_US\": \"Commit\",\n                \"zh_CN\": \"提交\",\n                \"ja_JP\": \"全てコミット\"\n            },\n            \"icon\": \"commit.svg\",\n            \"windows\" :{\n                \"command\": \"git add -A -- . ; if ($?) { git commit --message=\\\"${input:msg}\\\" }\"\n            },\n            \"command\": \"git add -A -- . && git commit --message=\\\"${input:msg}\\\"\",\n            \"inputs\": [\n                {\n                    \"id\": \"msg\",\n                    \"type\": \"promptString\",\n                    \"description\": {\n                        \"en_US\": \"Please input the commit message\",\n                        \"zh_CN\": \"请输入提交信息\",\n                        \"ja_JP\": \"コミットメッセージを提供してください\"\n                    },\n                    \"default\": {\n                        \"en_US\": \"Update note at ${magic:datetime}\",\n                        \"zh_CN\": \"更新笔记于 ${magic:datetime}\",\n                        \"ja_JP\": \"アップデート ${magic:datetime}\"\n                    }\n                }\n            ]\n        },\n        {\n            \"label\": {\n                \"en_US\": \"Push\",\n                \"zh_CN\": \"上传\",\n                \"ja_JP\": \"プッシュ\"\n            },\n            \"icon\": \"push.svg\",\n            \"command\": \"git push\"\n        },\n        {\n            \"label\": {\n                \"en_US\": \"Pull\",\n                \"zh_CN\": \"下载\",\n                \"ja_JP\": \"プル\"\n            },\n            \"icon\": \"pull.svg\",\n            \"command\": \"git pull --no-rebase\"\n        },\n        {\n            \"label\": {\n                \"en_US\": \"Log\",\n                \"zh_CN\": \"日志\",\n                \"ja_JP\": \"ログ\"\n            },\n            \"icon\": \"history.svg\",\n            \"command\": \"git log -10 --graph --pretty=format:'%h -%d %s (%cr) <%an>' --abbrev-commit\"\n        }\n    ]\n}\n"
  },
  {
    "path": "src/data/extra/themes/moonlight/highlight.css",
    "content": "/* PrismJS 1.22.0\nhttps://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+birb+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/**\n * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML\n * Based on https://github.com/chriskempson/tomorrow-theme\n * @author Rose Pritchard\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n    color: #ccc;\n    background: none;\n    font-size: 1em;\n    text-align: left;\n    white-space: pre;\n    word-spacing: normal;\n    word-break: normal;\n    word-wrap: normal;\n    line-height: 1.5;\n\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n\n    -webkit-hyphens: none;\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    hyphens: none;\n\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n    padding: 1em;\n    margin: .5em 0;\n    overflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n    background: #2d323b;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n    padding: .1em;\n    border-radius: .3em;\n    white-space: normal;\n}\n\n.token.comment,\n.token.block-comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n    color: #999;\n}\n\n.token.punctuation {\n    color: #ccc;\n}\n\n.token.tag,\n.token.attr-name,\n.token.namespace,\n.token.deleted {\n    color: #e2777a;\n}\n\n.token.function-name {\n    color: #6196cc;\n}\n\n.token.boolean,\n.token.number,\n.token.function {\n    color: #f08d49;\n}\n\n.token.property,\n.token.class-name,\n.token.constant,\n.token.symbol {\n    color: #f8c555;\n}\n\n.token.selector,\n.token.important,\n.token.atrule,\n.token.keyword,\n.token.builtin {\n    color: #cc99cd;\n}\n\n.token.string,\n.token.char,\n.token.attr-value,\n.token.regex,\n.token.variable {\n    color: #7ec699;\n}\n\n.token.operator,\n.token.entity,\n.token.url {\n    color: #67cdcc;\n}\n\n.token.important,\n.token.bold {\n    font-weight: bold;\n}\n.token.italic {\n    font-style: italic;\n}\n\n.token.entity {\n    cursor: help;\n}\n\n.token.inserted {\n    color: green;\n}\n\npre[class*=\"language-\"].line-numbers {\n    position: relative;\n    padding-left: 3.8em;\n    counter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n    position: relative;\n    white-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n    position: absolute;\n    pointer-events: none;\n    top: 0;\n    font-size: 100%;\n    left: -3.8em;\n    width: 3em; /* works for line-numbers below 1000 lines */\n    letter-spacing: -1px;\n    border-right: 1px solid #999;\n\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n\n}\n\n    .line-numbers-rows > span {\n        display: block;\n        counter-increment: linenumber;\n    }\n\n        .line-numbers-rows > span:before {\n            content: counter(linenumber);\n            color: #999;\n            display: block;\n            padding-right: 0.8em;\n            text-align: right;\n        }\n\ndiv.code-toolbar {\n    position: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n    position: absolute;\n    top: .3em;\n    right: .2em;\n    transition: opacity 0.3s ease-in-out;\n    opacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n    opacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n   IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n    opacity: 1;\n}\n\ndiv.code-toolbar > .toolbar .toolbar-item {\n    display: inline-block;\n}\n\ndiv.code-toolbar > .toolbar a {\n    cursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar button {\n    background: none;\n    border: 0;\n    color: inherit;\n    font: inherit;\n    line-height: normal;\n    overflow: visible;\n    padding: 0;\n    -webkit-user-select: none; /* for button */\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar a,\ndiv.code-toolbar > .toolbar button,\ndiv.code-toolbar > .toolbar span {\n    color: #bbb;\n    font-size: .8em;\n    padding: 0 .5em;\n    background: rgba(224, 224, 224, 0.2);\n    box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n    border-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar a:hover,\ndiv.code-toolbar > .toolbar a:focus,\ndiv.code-toolbar > .toolbar button:hover,\ndiv.code-toolbar > .toolbar button:focus,\ndiv.code-toolbar > .toolbar span:hover,\ndiv.code-toolbar > .toolbar span:focus {\n    color: inherit;\n    text-decoration: none;\n}\n"
  },
  {
    "path": "src/data/extra/themes/moonlight/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-family: \"冬青黑体\", \"YaHei Consolas Hybrid\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\nQWidget[HitSettingWidget=\"true\"] {\n    border: 2px solid @widgets#qwidget#info#border;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 22px 5px 22px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 1px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 1px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: @widgets#qtabbar#tab#bg;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    padding: 2px 2px 2px 2px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: @widgets#qtabbar#tab#selected#bg;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    margin: 16px 0px 16px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 16px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 16px;\n    margin: 0px 16px 0px 16px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-width: 16px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/moonlight/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"//comment\" : \"If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"editor-highlight-theme\" : \"Breeze Dark\",\n        \"//comment\" : \"If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"//comment\" : \"If empty, 'editor-highlight-theme' will be used.\",\n        \"markdown-editor-highlight-theme\" : \"Markdown Breeze Dark\",\n        \"display_name\" : \"Moonlight\",\n        \"//comment\" : \"Display name for different locales\",\n        \"display_name_zh_CN\" : \"月夜\"\n    },\n    \"palette\" : {\n        \"bg1_1\" : \"#07080d\",\n        \"bg1_2\" : \"#101215\",\n        \"bg1_3\" : \"#181b20\",\n        \"bg1_4\" : \"#21252b\",\n        \"bg1_5\" : \"#2a2f36\",\n        \"bg1_51\" : \"#313740\",\n        \"bg1_6\" : \"#3b424c\",\n        \"bg1_7\" : \"#4c5562\",\n        \"bg1_71\" : \"#535d6c\",\n        \"bg1_8\" : \"#576071\",\n        \"bg1_9\" : \"#657184\",\n        \"fg1_1\" : \"#7e899d\",\n        \"fg1_2\" : \"#8a93a6\",\n        \"fg1_3\" : \"#959eae\",\n        \"fg1_4\" : \"#a0a8b7\",\n        \"fg1_5\" : \"#abb2bf\",\n        \"fg1_6\" : \"#b6bcc7\",\n        \"fg1_7\" : \"#c1c6d0\",\n        \"fg1_8\" : \"#ccd1d8\",\n        \"fg1_9\" : \"#d7dae0\",\n        \"fg1_10\" : \"#e3e5e9\",\n        \"bg2_2\" : \"#3a4ba6\",\n        \"bg2_3\" : \"#3f52b4\",\n        \"bg2_4\" : \"#485bbf\",\n        \"bg2_5\" : \"#5768c4\",\n        \"bg2_6\" : \"#6675c9\",\n        \"bg2_7\" : \"#7482ce\",\n        \"bg2_8\" : \"#838fd3\",\n        \"bg2_9\" : \"#919cd8\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#5768c4\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#4f5666\",\n        \"fg15_4\" : \"#60697c\",\n        \"fg15_5\" : \"#9ea5b4\",\n        \"bg10_4\" : \"#2d323b\",\n        \"bg10_5\" : \"#333842\",\n        \"bg10_6\" : \"#3c414d\",\n        \"bg10_7\" : \"#444b58\",\n        \"bg10_8\" : \"#5a5f66\",\n        \"bg11\" : \"#0c7bff\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg1_5\",\n            \"bg\" : \"@palette#bg1_5\",\n            \"border\" : \"@palette#bg1_6\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_4\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg1_51\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg10_5\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#fg1_10\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@palette#fg1_10\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg1_1\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg1_3\",\n            \"bg\" : \"@palette#bg1_3\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_6\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_7\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg1_8\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"bg\" : \"@base#content#bg\"\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"@base#normal#bg\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg1_6\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg1_71\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg1_7\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@palette#bg2_9\",\n                \"border\" : \"@palette#bg2_9\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/moonlight/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"Moonlight\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#ccd1d8\",\n            \"background-color\" : \"#333842\",\n            \"selected-text-color\" : \"#e3e5e9\",\n            \"selected-background-color\" : \"#0c7bff\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#444b58\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#959eae\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#a0a8b7\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dfdf00\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#8a93a6\",\n            \"background-color\" : \"#3c414d\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#ccd1d8\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#838fd3\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#919cd8\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#4c5562\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#3a4ba6\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#ccd1d8\",\n            \"background-color\" : \"#333842\",\n            \"selected-text-color\" : \"#e3e5e9\",\n            \"selected-background-color\" : \"#0c7bff\"\n        },\n        \"Preview\" : {\n            \"background-color\" : \"#b0bec5\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#e06c75\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#e06c75\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#e06c75\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#e06c75\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#e06c75\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#e06c75\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#abb2bf\",\n            \"background-color\" : \"#864046\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#e06c75\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#e06c75\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#61afef\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#61afef\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#61afef\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#4883b3\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#56b6c2\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#7e899d\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#7482ce\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#9575cd\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#e57373\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6e7686\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#d7dae0\",\n            \"background-color\" : \"#898900\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#e06c75\",\n            \"background-color\" : \"#444b58\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/moonlight/web.css",
    "content": "body {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #ccd1d8;\n    line-height: 1.5;\n    padding: 16px;\n    background-color: #333842;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #e06c75;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np {\n    padding: 0;\n    margin-bottom: 16px;\n}\n\nh1 {\n    font-size: 26px;\n}\n\nh2 {\n    font-size: 24px;\n}\n\nh3 {\n    font-size: 22px;\n}\n\nh4 {\n    font-size: 20px;\n}\n\nh5 {\n    font-size: 19px;\n}\n\nh6 {\n    font-size: 18px;\n}\n\na {\n    color: #61afef;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #ba68c8;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\nmark {\n    color: #000000;\n    background-color: #c4c400;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #98c379;\n    word-break: break-word;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #98c379;\n    background-color: #2d323b;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #abb2bf;\n    border-left: .5em solid #abb2bf;\n    padding: 0 1em;\n    margin-left: 0;\n}\n\nblockquote p {\n    color: #abb2bf;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 2px;\n    background-color: #4c5562;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0.5rem;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid #4c5562;\n   background-color: #313740;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:hover {\n   background-color: #3b424c;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid #4c5562;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr td {\n   border: 1px solid #4c5562;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\n::selection {\n  background-color: #0c7bff;\n  color: #e3e5e9;\n}\n\n::-webkit-scrollbar {\n    background-color: #2a2f36;\n    width: 14px;\n    height: 14px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #2a2f36;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 14px;\n    width: 14px;\n    background-color: #2a2f36;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #535d6c;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #313740;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #2a2f36;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #3b424c;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #535d6c;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #4c5562;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n"
  },
  {
    "path": "src/data/extra/themes/native/highlight.css",
    "content": "/* PrismJS 1.21.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+purebasic+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n    color: black;\n    background: none;\n    font-size: 1em;\n    text-align: left;\n    white-space: pre;\n    word-spacing: normal;\n    word-break: normal;\n    word-wrap: normal;\n    line-height: 1.5;\n\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n\n    -webkit-hyphens: none;\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n    text-shadow: none;\n    background-color: #1976d2;\n    color: #ffffff;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n    text-shadow: none;\n    background-color: #1976d2;\n    color: #ffffff;\n}\n\n@media print {\n    code[class*=\"language-\"],\n    pre[class*=\"language-\"] {\n        text-shadow: none;\n    }\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n    padding: 1em;\n    margin: .5em 0;\n    overflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n    background: #ede8e4;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n    padding: .1em;\n    border-radius: .3em;\n    white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n    color: slategray;\n}\n\n.token.punctuation {\n    color: #999;\n}\n\n.token.namespace {\n    opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n    color: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n    color: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n    color: #9a6e3a;\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n    color: #07a;\n}\n\n.token.function,\n.token.class-name {\n    color: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n    color: #e90;\n}\n\n.token.important,\n.token.bold {\n    font-weight: bold;\n}\n.token.italic {\n    font-style: italic;\n}\n\n.token.entity {\n    cursor: help;\n}\n\npre[class*=\"language-\"].line-numbers {\n    position: relative;\n    padding-left: 3.8em;\n    counter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n    position: relative;\n    white-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n    position: absolute;\n    pointer-events: none;\n    top: 0;\n    font-size: 100%;\n    left: -3.8em;\n    width: 3em; /* works for line-numbers below 1000 lines */\n    letter-spacing: -1px;\n    border-right: 1px solid #999;\n\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n\n}\n\n    .line-numbers-rows > span {\n        display: block;\n        counter-increment: linenumber;\n    }\n\n        .line-numbers-rows > span:before {\n            content: counter(linenumber);\n            color: #999;\n            display: block;\n            padding-right: 0.8em;\n            text-align: right;\n        }\n\ndiv.code-toolbar {\n    position: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n    position: absolute;\n    top: .3em;\n    right: .2em;\n    transition: opacity 0.3s ease-in-out;\n    opacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n    opacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n   IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n    opacity: 1;\n}\n\ndiv.code-toolbar > .toolbar .toolbar-item {\n    display: inline-block;\n}\n\ndiv.code-toolbar > .toolbar a {\n    cursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar button {\n    background: none;\n    border: 0;\n    color: inherit;\n    font: inherit;\n    line-height: normal;\n    overflow: visible;\n    padding: 0;\n    -webkit-user-select: none; /* for button */\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar a,\ndiv.code-toolbar > .toolbar button,\ndiv.code-toolbar > .toolbar span {\n    color: #bbb;\n    font-size: .8em;\n    padding: 0 .5em;\n    background: rgba(224, 224, 224, 0.2);\n    box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n    border-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar a:hover,\ndiv.code-toolbar > .toolbar a:focus,\ndiv.code-toolbar > .toolbar button:hover,\ndiv.code-toolbar > .toolbar button:focus,\ndiv.code-toolbar > .toolbar span:hover,\ndiv.code-toolbar > .toolbar span:focus {\n    color: inherit;\n    text-decoration: none;\n}\n"
  },
  {
    "path": "src/data/extra/themes/native/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget[HitSettingWidget=\"true\"] {\n    border: 2px solid @base#info#fg;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @base#info#fg;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @base#warning#fg;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @base#error#fg;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget::Title {\n    background-color: transparent;\n    text-align: center left;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QMainWindow */\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n}\n\n/* NotebookExplorer */\nvnotex--NotebookNodeExplorer QTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\n/* OutlineViewer */\nvnotex--OutlineViewer QTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\n/* QToolButton used for action */\nQToolButton[ActionToolButton=\"true\"]:!hover {\n    padding: 1px;\n    margin: 0px;\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @base#danger#fg;\n    background-color: @base#danger#bg;\n    border: none;\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n"
  },
  {
    "path": "src/data/extra/themes/native/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"//comment\" : \"If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"editor-highlight-theme\" : \"Default\",\n        \"//comment\" : \"If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"//comment\" : \"If empty, 'editor-highlight-theme' will be used.\",\n        \"markdown-editor-highlight-theme\" : \"Markdown Default\",\n        \"display_name\" : \"Native\",\n        \"//comment\" : \"Display name for different locales\",\n        \"display_name_zh_CN\" : \"原素\",\n        \"backfill-system-palette\": true\n    },\n    \"palette\" : {\n        \"//comment\" : \"VNote will backfill the standard system palette.\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#active#window_text\",\n            \"border\" : \"@palette#active#dark\",\n            \"bg\" : \"@palette#active#window\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#active#highlighted_text\",\n            \"bg\" : \"@palette#active#highlight\"\n        },\n        \"error\" : {\n            \"fg\" : \"#b71c1c\"\n        },\n        \"warning\" : {\n            \"fg\" : \"#fc766a\"\n        },\n        \"info\" : {\n            \"fg\" : \"#00a4cc\"\n        },\n        \"danger\" : {\n            \"fg\": \"#f5f5f5\",\n            \"bg\": \"#ed2b33\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#active#text\",\n            \"disabled\" : {\n                \"fg\" : \"@palette#disabled#text\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\": \"@base#info#fg\"\n            }\n        },\n        \"master\" : {\n            \"fg\" : \"#fcf6f5\",\n            \"bg\" : \"#89abe3\"\n        }\n    },\n    \"widgets\" : {\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#disabled#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            }\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@palette#active#dark\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#info#fg\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"border\" : \"@base#normal#border\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                }\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@base#master#bg\",\n                \"border\" : \"@base#master#bg\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#border\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#info#fg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/native/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"Native\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ffffff\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#c5cae9\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#a8a8a8\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#cfcfcf\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dfdf00\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#aaaaaa\",\n            \"background-color\" : \"#fafafa\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#222222\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#6495ed\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#4169e1\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#a9c4f5\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#befbdd\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ffffff\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dac7c9\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#d33682\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#0000ff\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#616161\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#826200\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#8e24aa\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#93a1a1\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#673ab7\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#673ab7\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#00af00\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#0087b5\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#b71c1c\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6c6c6c\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ffff76\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#d33682\",\n            \"background-color\" : \"#e0e0e0\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/native/web.css",
    "content": "body {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #222222;\n    line-height: 1.5;\n    padding: 16px;\n    background-color: #ffffff;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #222222;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np {\n    padding: 0;\n    margin-bottom: 16px;\n}\n\nh1 {\n    font-size: 26px;\n}\n\nh2 {\n    font-size: 24px;\n}\n\nh3 {\n    font-size: 22px;\n}\n\nh4 {\n    font-size: 20px;\n}\n\nh5 {\n    font-size: 19px;\n}\n\nh6 {\n    font-size: 18px;\n}\n\na {\n    color: #0099ff;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #800080;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #8e24aa;\n    word-break: break-word;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #222222;\n    background-color: #e0e0e0;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #666666;\n    border-left: .5em solid #7a7a7a;\n    padding: 0 1em;\n    margin-left: 0;\n}\n\nblockquote p {\n    color: #666666;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 2px;\n    background-color: #999999;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0.5rem;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid #cccccc;\n   background-color: #ffffff;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:hover {\n   background-color: #dadada;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid #cccccc;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr td {\n   border: 1px solid #cccccc;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\n::selection {\n  background-color: #1976d2;\n  color: #ffffff;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n"
  },
  {
    "path": "src/data/extra/themes/pure/highlight.css",
    "content": "/* PrismJS 1.21.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+purebasic+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n    color: black;\n    background: none;\n    font-size: 1em;\n    text-align: left;\n    white-space: pre;\n    word-spacing: normal;\n    word-break: normal;\n    word-wrap: normal;\n    line-height: 1.5;\n\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n\n    -webkit-hyphens: none;\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n    text-shadow: none;\n    background-color: #1976d2;\n    color: #ffffff;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n    text-shadow: none;\n    background-color: #1976d2;\n    color: #ffffff;\n}\n\n@media print {\n    code[class*=\"language-\"],\n    pre[class*=\"language-\"] {\n        text-shadow: none;\n    }\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n    padding: 1em;\n    margin: .5em 0;\n    overflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n    background: #ede8e4;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n    padding: .1em;\n    border-radius: .3em;\n    white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n    color: slategray;\n}\n\n.token.punctuation {\n    color: #999;\n}\n\n.token.namespace {\n    opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n    color: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n    color: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n    color: #9a6e3a;\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n    color: #07a;\n}\n\n.token.function,\n.token.class-name {\n    color: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n    color: #e90;\n}\n\n.token.important,\n.token.bold {\n    font-weight: bold;\n}\n.token.italic {\n    font-style: italic;\n}\n\n.token.entity {\n    cursor: help;\n}\n\npre[class*=\"language-\"].line-numbers {\n    position: relative;\n    padding-left: 3.8em;\n    counter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n    position: relative;\n    white-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n    position: absolute;\n    pointer-events: none;\n    top: 0;\n    font-size: 100%;\n    left: -3.8em;\n    width: 3em; /* works for line-numbers below 1000 lines */\n    letter-spacing: -1px;\n    border-right: 1px solid #999;\n\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n\n}\n\n    .line-numbers-rows > span {\n        display: block;\n        counter-increment: linenumber;\n    }\n\n        .line-numbers-rows > span:before {\n            content: counter(linenumber);\n            color: #999;\n            display: block;\n            padding-right: 0.8em;\n            text-align: right;\n        }\n\ndiv.code-toolbar {\n    position: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n    position: absolute;\n    top: .3em;\n    right: .2em;\n    transition: opacity 0.3s ease-in-out;\n    opacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n    opacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n   IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n    opacity: 1;\n}\n\ndiv.code-toolbar > .toolbar .toolbar-item {\n    display: inline-block;\n}\n\ndiv.code-toolbar > .toolbar a {\n    cursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar button {\n    background: none;\n    border: 0;\n    color: inherit;\n    font: inherit;\n    line-height: normal;\n    overflow: visible;\n    padding: 0;\n    -webkit-user-select: none; /* for button */\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar a,\ndiv.code-toolbar > .toolbar button,\ndiv.code-toolbar > .toolbar span {\n    color: #bbb;\n    font-size: .8em;\n    padding: 0 .5em;\n    background: rgba(224, 224, 224, 0.2);\n    box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n    border-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar a:hover,\ndiv.code-toolbar > .toolbar a:focus,\ndiv.code-toolbar > .toolbar button:hover,\ndiv.code-toolbar > .toolbar button:focus,\ndiv.code-toolbar > .toolbar span:hover,\ndiv.code-toolbar > .toolbar span:focus {\n    color: inherit;\n    text-decoration: none;\n}\n"
  },
  {
    "path": "src/data/extra/themes/pure/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-family: \"冬青黑体\", \"YaHei Consolas Hybrid\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\nQWidget[HitSettingWidget=\"true\"] {\n    border: 2px solid @widgets#qwidget#info#border;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget[MainWindowSideBar=\"true\"] QWidget {\n    background-color: @widgets#mainwindow#side_bar#widget#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:hover {\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 22px 5px 22px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 1px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 1px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar[MainWindowSideBar=\"true\"] {\n    background-color: @widgets#mainwindow#side_bar#bg;\n}\n\nQTabBar[MainWindowSideBar=\"true\"]::tab {\n    color: @widgets#mainwindow#side_bar#fg;\n    background-color: @widgets#mainwindow#side_bar#bg;\n    border: none;\n}\n\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\n/* Only the left one is the mainwindow side bar */\nQMainWindow > QTabBar::tab:left:hover {\n    color: @widgets#mainwindow#side_bar#hover#fg;\n    background-color: @widgets#mainwindow#side_bar#hover#bg;\n}\n\nQMainWindow > QTabBar::tab:left:selected {\n    color: @widgets#mainwindow#side_bar#selected#fg;\n    background-color: @widgets#mainwindow#side_bar#selected#bg;\n}\n\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: @widgets#qtabbar#tab#bg;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    padding: 2px 2px 2px 2px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: @widgets#qtabbar#tab#selected#bg;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    margin: 16px 0px 16px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 16px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 16px;\n    margin: 0px 16px 0px 16px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-width: 16px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/pure/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 2,\n        \"//comment\" : \"If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"editor-highlight-theme\" : \"Default\",\n        \"//comment\" : \"If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"//comment\" : \"If empty, 'editor-highlight-theme' will be used.\",\n        \"markdown-editor-highlight-theme\" : \"Markdown Default\",\n        \"display_name\" : \"Pure\",\n        \"//comment\" : \"Display name for different locales\",\n        \"display_name_zh_CN\" : \"纯净\"\n    },\n    \"palette\" : {\n        \"bg3_0\" : \"#bbbbbb\",\n        \"bg3_1\" : \"#c0c0c0\",\n        \"bg3_2\" : \"#cdcdcd\",\n        \"bg3_3\" : \"#d2d2d2\",\n        \"bg3_4\" : \"#dadada\",\n        \"bg3_41\" : \"#e0e0e0\",\n        \"bg3_43\" : \"#eaeaea\",\n        \"bg3_45\" : \"#eeeeee\",\n        \"bg3_5\" : \"#f5f5f5\",\n        \"bg3_6\" : \"#ffffff\",\n        \"fg3_5\" : \"#222222\",\n        \"fg3_6\" : \"#646464\",\n        \"fg3_7\" : \"#7a7a7a\",\n        \"fg3_8\" : \"#9e9e9e\",\n        \"fg3_9\" : \"#b0b0b0\",\n        \"fg3_10\" : \"#d0d0d0\",\n        \"bg2_4\" : \"#007b6e\",\n        \"bg2_5\" : \"#00897b\",\n        \"bg2_6\" : \"#199488\",\n        \"bg2_7\" : \"#e5f3f1\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#007b6e\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#b0b0b0\",\n        \"fg15_4\" : \"#7a7a7a\",\n        \"fg15_5\" : \"#222222\",\n        \"bg11\" : \"#1976d2\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_5\",\n            \"border\" : \"@palette#fg3_10\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#bg3_6\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_6\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg3_41\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_6\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#bg3_6\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"edit\" : {\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@palette#bg2_7\",\n                \"border\" : \"@base#master#bg\"\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@base#normal#bg\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg3_8\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_1\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_2\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_4\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_3\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            }\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"transparent\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#edit#focus#bg\",\n                \"border\" : \"@base#edit#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#edit#hover#bg\",\n                \"border\" : \"@base#edit#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"transparent\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg3_2\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg3_1\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg3_0\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#edit#focus#bg\",\n                \"border\" : \"@base#edit#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#edit#hover#bg\",\n                \"border\" : \"@base#edit#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@base#master#bg\",\n                \"border\" : \"@base#master#bg\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"side_bar\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@palette#bg3_43\",\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"icon\" : {\n                    \"fg\" : \"@widgets#mainwindow#side_bar#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@widgets#mainwindow#side_bar#selected#fg\"\n                    }\n                },\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"widget\" : {\n                    \"bg\" : \"@palette#bg3_45\"\n                }\n            },\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/pure/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"Pure\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ffffff\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"selected-background-color\" : \"#1976d2\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#c5cae9\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#a8a8a8\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#cfcfcf\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dfdf00\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#aaaaaa\",\n            \"background-color\" : \"#fafafa\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#222222\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#6495ed\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#4169e1\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#a9c4f5\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#befbdd\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ffffff\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"selected-background-color\" : \"#1976d2\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dac7c9\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#d33682\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#0000ff\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#616161\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#826200\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#8e24aa\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#93a1a1\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#673ab7\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#673ab7\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#00af00\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#0087b5\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#b71c1c\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6c6c6c\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ffff76\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#d33682\",\n            \"background-color\" : \"#e0e0e0\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/pure/web.css",
    "content": "body {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #222222;\n    line-height: 1.5;\n    padding: 16px;\n    background-color: #ffffff;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #222222;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np, blockquote, ul, ol, dl, table {\n    margin: 0.4em 0;\n}\n\np {\n    padding: 0;\n}\n\nh1 {\n    font-size: 2rem;\n}\n\nh2 {\n    font-size: 1.75rem;\n}\n\nh3 {\n    font-size: 1.4rem;\n}\n\nh4 {\n    font-size: 1.2rem;\n}\n\nh5 {\n    font-size: 1rem;\n}\n\nh6 {\n    font-size: 1rem;\n}\n\na {\n    color: #0099ff;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: purple;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #8e24aa;\n    word-break: break-word;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #222222;\n    background-color: #e0e0e0;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #666666;\n    border-left: .5em solid #7a7a7a;\n    padding: 0 1em;\n}\n\nblockquote p {\n    color: #666666;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 2px;\n    background-color: #999999;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0.5rem;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid #cccccc;\n   background-color: #ffffff;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:hover {\n   background-color: #dadada;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid #cccccc;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr td {\n   border: 1px solid #cccccc;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\n::selection {\n  background-color: #1976d2;\n  color: #ffffff;\n}\n\n::-webkit-scrollbar {\n    background-color: #f5f5f5;\n    width: 14px;\n    height: 14px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #f5f5f5;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 14px;\n    width: 14px;\n    background-color: #f5f5f5;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #dadada;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #c0c0c0;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #f5f5f5;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #cdcdcd;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #c0c0c0;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #bbbbbb;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n\n.vx-alert{\n    background-color: #E2EDF3 !important;\n    padding: 12px 24px 12px 30px !important;\n    border-radius:0 !important;\n    border:none !important;\n    border-left: 4px solid #498BA7 !important;\n    color: inherit !important;\n}\n\n.vx-alert::before\n{\n    background-color: #498BA7;\n    border-radius: 100%;\n    color: #fff;\n    content: '!';\n    font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;\n    font-size: 14px;\n    font-weight: bold;\n    left: -12px;\n    line-height: 20px;\n    position: absolute;\n    height: 20px;\n    width: 20px;\n    text-align: center;\n    top: 14px;\n}\n\n.alert-success,.alert-s{\n    border-color: #42B983 !important;\n    background-color: #D4EDDA !important;\n}\n\n.alert-success::before,.alert-s::before{\n    background-color: #42B983;\n}\n\n.alert-warning,.alert-w{\n    border-color: #ffa502 !important;\n    background-color: #fff3cd !important;\n}\n\n.alert-warning:before,.alert-w::before{\n    background-color: #ffa502;\n}\n\n.alert-info,.alert-i{\n    border-color: #70a1ff !important;\n    background-color: #CCE5FF !important;\n}\n\n.alert-info:before,.alert-i::before{\n    background-color: #70a1ff;\n}\n\n.alert-danger,.alert-d{\n    border-color: #ff4757 !important;\n    background-color: #F8D7DA !important;\n}\n\n.alert-danger:before,.alert-d::before{\n    background-color: #ff4757;\n}\n\n.alert-light{\n    border-color: #C1C1C1 !important;\n    background-color: #f8f8f8 !important;\n}\n\n.alert-light:before{\n    background-color: #C1C1C1;\n}\n\n.alert-dark{\n    border-color: #484848 !important;\n    background-color: #F0F0F0 !important;\n}\n\n.alert-dark:before{\n    background-color: #484848;\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-dark/highlight.css",
    "content": "/* PrismJS 1.25.0\nhttps://prismjs.com/download.html#themes=prism-solarizedlight&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+birb+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/*\n Solarized Color Schemes originally by Ethan Schoonover\n http://ethanschoonover.com/solarized\n\n Ported for PrismJS by Hector Matos\n Website: https://krakendev.io\n Twitter Handle: https://twitter.com/allonsykraken)\n*/\n\n/*\nSOLARIZED HEX\n--------- -------\nbase03    #002b36\nbase02    #073642\nbase01    #586e75\nbase00    #657b83\nbase0     #839496\nbase1     #93a1a1\nbase2     #eee8d5\nbase3     #fdf6e3\nyellow    #b58900\norange    #cb4b16\nred       #dc322f\nmagenta   #d33682\nviolet    #6c71c4\nblue      #268bd2\ncyan      #2aa198\ngreen     #859900\n*/\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n    color: #657b83; /* base00 */\n    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n    font-size: 1em;\n    text-align: left;\n    white-space: pre;\n    word-spacing: normal;\n    word-break: normal;\n    word-wrap: normal;\n\n    line-height: 1.5;\n\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n\n    -webkit-hyphens: none;\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n    background: #073642; /* base02 */\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n    background: #073642; /* base02 */\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n    padding: 1em;\n    margin: .5em 0;\n    overflow: auto;\n    border-radius: 0.3em;\n}\n\n/* mod by nriver */\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n    background-color: #073642; /* base3 */\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n    padding: .1em;\n    border-radius: .3em;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n    color: #93a1a1; /* base1 */\n}\n\n.token.punctuation {\n    color: #586e75; /* base01 */\n}\n\n.token.namespace {\n    opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n    color: #268bd2; /* blue */\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.url,\n.token.inserted {\n    color: #2aa198; /* cyan */\n}\n\n.token.entity {\n    color: #657b83; /* base00 */\n    background: #eee8d5; /* base2 */\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n    color: #859900; /* green */\n}\n\n.token.function,\n.token.class-name {\n    color: #b58900; /* yellow */\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n    color: #cb4b16; /* orange */\n}\n\n.token.important,\n.token.bold {\n    font-weight: bold;\n}\n.token.italic {\n    font-style: italic;\n}\n\n.token.entity {\n    cursor: help;\n}\n\npre[class*=\"language-\"].line-numbers {\n    position: relative;\n    padding-left: 3.8em;\n    counter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n    position: relative;\n    white-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n    position: absolute;\n    pointer-events: none;\n    top: 0;\n    font-size: 100%;\n    left: -3.8em;\n    width: 3em; /* works for line-numbers below 1000 lines */\n    letter-spacing: -1px;\n    border-right: 1px solid #999;\n\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n\n}\n\n    .line-numbers-rows > span {\n        display: block;\n        counter-increment: linenumber;\n    }\n\n        .line-numbers-rows > span:before {\n            content: counter(linenumber);\n            color: #999;\n            display: block;\n            padding-right: 0.8em;\n            text-align: right;\n        }\n\ndiv.code-toolbar {\n    position: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n    position: absolute;\n    z-index: 10;\n    top: .3em;\n    right: .2em;\n    transition: opacity 0.3s ease-in-out;\n    opacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n    opacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n   IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n    opacity: 1;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item {\n    display: inline-block;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a {\n    cursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > button {\n    background: none;\n    border: 0;\n    color: inherit;\n    font: inherit;\n    line-height: normal;\n    overflow: visible;\n    padding: 0;\n    -webkit-user-select: none; /* for button */\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a,\ndiv.code-toolbar > .toolbar > .toolbar-item > button,\ndiv.code-toolbar > .toolbar > .toolbar-item > span {\n    color: #bbb;\n    font-size: .8em;\n    padding: 0 .5em;\n    background: #f5f2f0;\n    background: rgba(224, 224, 224, 0.2);\n    box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n    border-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > a:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:focus {\n    color: inherit;\n    text-decoration: none;\n}\n\n"
  },
  {
    "path": "src/data/extra/themes/solarized-dark/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-family: \"冬青黑体\", \"YaHei Consolas Hybrid\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 22px 5px 22px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 1px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 1px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: @widgets#qtabbar#tab#bg;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    padding: 2px 2px 2px 2px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: @widgets#qtabbar#tab#selected#bg;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    margin: 16px 0px 16px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 16px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 16px;\n    margin: 0px 16px 0px 16px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-width: 16px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-dark/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"//comment\" : \"If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"editor-highlight-theme\" : \"Solarized Dark\",\n        \"//comment\" : \"If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"//comment\" : \"If empty, 'editor-highlight-theme' will be used.\",\n        \"markdown-editor-highlight-theme\" : \"Solarized Dark\",\n        \"display_name\" : \"Solarized-dark\",\n        \"//comment\" : \"Display name for different locales\",\n        \"display_name_zh_CN\" : \"Solarized-dark\",\n        \"author\": \"nriver\"\n    },\n    \"palette\" : {\n        \"bg1_1\" : \"#002b36\",\n        \"bg1_2\" : \"#022e39\",\n        \"bg1_3\" : \"#04313c\",\n        \"bg1_4\" : \"#05333f\",\n        \"bg1_5\" : \"#073642\",\n        \"bg1_51\" : \"#15414c\",\n        \"bg1_6\" : \"#234c57\",\n        \"bg1_7\" : \"#305761\",\n        \"bg1_71\" : \"#3e626c\",\n        \"bg1_8\" : \"#4c6d76\",\n        \"bg1_9\" : \"#5a7881\",\n        \"fg1_1\" : \"#67838b\",\n        \"fg1_2\" : \"#758e96\",\n        \"fg1_3\" : \"#8398a0\",\n        \"fg1_4\" : \"#91a3aa\",\n        \"fg1_5\" : \"#9eaeb5\",\n        \"fg1_6\" : \"#acb9bf\",\n        \"fg1_7\" : \"#bac4ca\",\n        \"fg1_8\" : \"#c8cfd4\",\n        \"fg1_9\" : \"#d5dadf\",\n        \"fg1_10\" : \"#e3e5e9\",\n        \"bg2_2\" : \"#3a4ba6\",\n        \"bg2_3\" : \"#3f52b4\",\n        \"bg2_4\" : \"#485bbf\",\n        \"bg2_5\" : \"#14161B\",\n        \"bg2_6\" : \"#6675c9\",\n        \"bg2_7\" : \"#7482ce\",\n        \"bg2_8\" : \"#838fd3\",\n        \"bg2_9\" : \"#919cd8\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#5768c4\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#4f5666\",\n        \"fg15_4\" : \"#60697c\",\n        \"fg15_5\" : \"#9ea5b4\",\n        \"bg10_4\" : \"#073642\",\n        \"bg10_5\" : \"#002B36\",\n        \"bg10_6\" : \"#3c414d\",\n        \"bg10_7\" : \"#444b58\",\n        \"bg10_8\" : \"#5a5f66\",\n        \"bg11\" : \"#0c7bff\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg1_5\",\n            \"bg\" : \"@palette#bg1_5\",\n            \"border\" : \"@palette#bg1_6\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_4\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg1_51\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg10_5\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#fg1_10\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@palette#fg1_10\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg1_1\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg1_3\",\n            \"bg\" : \"@palette#bg1_3\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_6\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_7\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg1_8\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"bg\" : \"@base#content#bg\"\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"@base#normal#bg\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg1_6\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg1_71\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg1_7\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@palette#bg2_9\",\n                \"border\" : \"@palette#bg2_9\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-dark/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"Solarized-dark\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#ccd1d8\",\n            \"background-color\" : \"#002B36\",\n            \"selected-text-color\" : \"#e3e5e9\",\n            \"selected-background-color\" : \"#0c7bff\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#073642\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#959eae\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#a0a8b7\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dfdf00\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#8a93a6\",\n            \"background-color\" : \"#04313c\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#ccd1d8\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#838fd3\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#919cd8\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#4c5562\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#3a4ba6\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#ccd1d8\",\n            \"background-color\" : \"#002B36\",\n            \"selected-text-color\" : \"#e3e5e9\",\n            \"selected-background-color\" : \"#0c7bff\"\n        },\n        \"Preview\" : {\n            \"background-color\" : \"#b0bec5\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#abb2bf\",\n            \"background-color\" : \"#864046\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#CA4A17\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#2AA198\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#2AA198\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#2AA198\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#4883b3\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#56b6c2\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#D7BA7D\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#7e899d\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#D7BA7D\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#D7BA7D\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#7482ce\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#9575cd\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#e57373\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6e7686\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#d7dae0\",\n            \"background-color\" : \"#898900\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#CA4A17\",\n            \"background-color\" : \"#444b58\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-dark/web.css",
    "content": "/* \n    https://github.com/Nriver/vnote-solarized-theme\n    made by Nriver\n*/\n\nbody {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #ccd1d8;\n    line-height: 1.5;\n    padding: 16px;\n    background-color: #002B36;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #CA4A17;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np {\n    padding: 0;\n    margin-bottom: 16px;\n}\n\nh1 {\n    font-size: 26px;\n}\n\nh2 {\n    font-size: 24px;\n}\n\nh3 {\n    font-size: 22px;\n}\n\nh4 {\n    font-size: 20px;\n}\n\nh5 {\n    font-size: 19px;\n}\n\nh6 {\n    font-size: 18px;\n}\n\na {\n    color: #2AA198;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #ba68c8;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\nmark {\n    color: #000000;\n    background-color: #c4c400;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #D7BA7D;\n    word-break: break-word;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #D7BA7D;\n    background-color: #073642;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #abb2bf;\n    border-left: .5em solid #abb2bf;\n    padding: 0 1em;\n    margin-left: 0;\n}\n\nblockquote p {\n    color: #abb2bf;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 2px;\n    background-color: #4c5562;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0.5rem;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid #4c5562;\n   background-color: #002B36;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:hover {\n   background-color: #3b424c;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid #4c5562;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr td {\n   border: 1px solid #4c5562;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\n::selection {\n  background-color: #0c7bff;\n  color: #e3e5e9;\n}\n\n::-webkit-scrollbar {\n    background-color: #073642;\n    width: 14px;\n    height: 14px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #073642;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 14px;\n    width: 14px;\n    background-color: #073642;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #535d6c;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #002B36;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #073642;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #304A50;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #465356;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #4C666C;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-light/highlight.css",
    "content": "/* PrismJS 1.25.0\nhttps://prismjs.com/download.html#themes=prism-solarizedlight&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+birb+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/*\n Solarized Color Schemes originally by Ethan Schoonover\n http://ethanschoonover.com/solarized\n\n Ported for PrismJS by Hector Matos\n Website: https://krakendev.io\n Twitter Handle: https://twitter.com/allonsykraken)\n*/\n\n/*\nSOLARIZED HEX\n--------- -------\nbase03    #002b36\nbase02    #073642\nbase01    #586e75\nbase00    #657b83\nbase0     #839496\nbase1     #93a1a1\nbase2     #eee8d5\nbase3     #fdf6e3\nyellow    #b58900\norange    #cb4b16\nred       #dc322f\nmagenta   #d33682\nviolet    #6c71c4\nblue      #268bd2\ncyan      #2aa198\ngreen     #859900\n*/\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n    color: #657b83; /* base00 */\n    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n    font-size: 1em;\n    text-align: left;\n    white-space: pre;\n    word-spacing: normal;\n    word-break: normal;\n    word-wrap: normal;\n\n    line-height: 1.5;\n\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n\n    -webkit-hyphens: none;\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n    background: #073642; /* base02 */\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n    background: #073642; /* base02 */\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n    padding: 1em;\n    margin: .5em 0;\n    overflow: auto;\n    border-radius: 0.3em;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n    background-color: #fdf6e3; /* base3 */\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n    padding: .1em;\n    border-radius: .3em;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n    color: #93a1a1; /* base1 */\n}\n\n.token.punctuation {\n    color: #586e75; /* base01 */\n}\n\n.token.namespace {\n    opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n    color: #268bd2; /* blue */\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.url,\n.token.inserted {\n    color: #2aa198; /* cyan */\n}\n\n.token.entity {\n    color: #657b83; /* base00 */\n    background: #eee8d5; /* base2 */\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n    color: #859900; /* green */\n}\n\n.token.function,\n.token.class-name {\n    color: #b58900; /* yellow */\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n    color: #cb4b16; /* orange */\n}\n\n.token.important,\n.token.bold {\n    font-weight: bold;\n}\n.token.italic {\n    font-style: italic;\n}\n\n.token.entity {\n    cursor: help;\n}\n\npre[class*=\"language-\"].line-numbers {\n    position: relative;\n    padding-left: 3.8em;\n    counter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n    position: relative;\n    white-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n    position: absolute;\n    pointer-events: none;\n    top: 0;\n    font-size: 100%;\n    left: -3.8em;\n    width: 3em; /* works for line-numbers below 1000 lines */\n    letter-spacing: -1px;\n    border-right: 1px solid #999;\n\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n\n}\n\n    .line-numbers-rows > span {\n        display: block;\n        counter-increment: linenumber;\n    }\n\n        .line-numbers-rows > span:before {\n            content: counter(linenumber);\n            color: #999;\n            display: block;\n            padding-right: 0.8em;\n            text-align: right;\n        }\n\ndiv.code-toolbar {\n    position: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n    position: absolute;\n    z-index: 10;\n    top: .3em;\n    right: .2em;\n    transition: opacity 0.3s ease-in-out;\n    opacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n    opacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n   IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n    opacity: 1;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item {\n    display: inline-block;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a {\n    cursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > button {\n    background: none;\n    border: 0;\n    color: inherit;\n    font: inherit;\n    line-height: normal;\n    overflow: visible;\n    padding: 0;\n    -webkit-user-select: none; /* for button */\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a,\ndiv.code-toolbar > .toolbar > .toolbar-item > button,\ndiv.code-toolbar > .toolbar > .toolbar-item > span {\n    color: #bbb;\n    font-size: .8em;\n    padding: 0 .5em;\n    background: #f5f2f0;\n    background: rgba(224, 224, 224, 0.2);\n    box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n    border-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > a:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:focus {\n    color: inherit;\n    text-decoration: none;\n}\n\n"
  },
  {
    "path": "src/data/extra/themes/solarized-light/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-family: \"冬青黑体\", \"YaHei Consolas Hybrid\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 22px 5px 22px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 1px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 1px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: @widgets#qtabbar#tab#bg;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    padding: 2px 2px 2px 2px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: @widgets#qtabbar#tab#selected#bg;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    margin: 16px 0px 16px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 16px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 16px;\n    margin: 0px 16px 0px 16px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-width: 16px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-light/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"//comment\" : \"If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"editor-highlight-theme\" : \"Solarized Light\",\n        \"//comment\" : \"If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"//comment\" : \"If empty, 'editor-highlight-theme' will be used.\",\n        \"markdown-editor-highlight-theme\" : \"Solarized Light\",\n        \"display_name\" : \"Solarized-light\",\n        \"//comment\" : \"Display name for different locales\",\n        \"display_name_zh_CN\" : \"Solarized-light\",\n        \"author\": \"nriver\"\n    },\n    \"palette\" : {\n        \"bg1_1\" : \"#FFFFF5\",\n        \"bg1_2\" : \"#fffdf1\",\n        \"bg1_3\" : \"#fefbec\",\n        \"bg1_4\" : \"#fef8e8\",\n        \"bg1_5\" : \"#FDF6E3\",\n        \"bg1_51\" : \"#efe8d6\",\n        \"bg1_6\" : \"#ECE4D3\",\n        \"bg1_7\" : \"#E4DECC\",\n        \"bg1_71\" : \"#E5DDCC\",\n        \"bg1_8\" : \"#E1DAC9\",\n        \"bg1_9\" : \"#DED6C6\",\n        \"fg1_1\" : \"#DAD3C2\",\n        \"fg1_2\" : \"#D7D0BF\",\n        \"fg1_3\" : \"#D3CCBC\",\n        \"fg1_4\" : \"#CFC9B9\",\n        \"fg1_5\" : \"#657B83\",\n        \"fg1_6\" : \"#C8C2B2\",\n        \"fg1_7\" : \"#C5BEAF\",\n        \"fg1_8\" : \"#657B83\",\n        \"fg1_9\" : \"#657B83\",\n        \"fg1_10\" : \"#c4bfaf\",\n        \"bg2_2\" : \"#3a4ba6\",\n        \"bg2_3\" : \"#3f52b4\",\n        \"bg2_4\" : \"#485bbf\",\n        \"bg2_5\" : \"#F7C399\",\n        \"bg2_6\" : \"#6675c9\",\n        \"bg2_7\" : \"#7482ce\",\n        \"bg2_8\" : \"#838fd3\",\n        \"bg2_9\" : \"#919cd8\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#5768c4\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#4f5666\",\n        \"fg15_4\" : \"#60697c\",\n        \"fg15_5\" : \"#9ea5b4\",\n        \"bg10_4\" : \"#FDF6E3\",\n        \"bg10_5\" : \"#EEE8D5\",\n        \"bg10_6\" : \"#3c414d\",\n        \"bg10_7\" : \"#444b58\",\n        \"bg10_8\" : \"#5a5f66\",\n        \"bg11\" : \"#EEE8D5\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg1_5\",\n            \"bg\" : \"@palette#bg1_5\",\n            \"border\" : \"@palette#bg1_6\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_4\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg1_51\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg10_5\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#fg1_10\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@palette#fg1_10\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg1_1\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg1_3\",\n            \"bg\" : \"@palette#bg1_3\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_6\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_7\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg1_8\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            }\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"@base#normal#bg\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg1_6\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg1_71\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg1_7\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@palette#bg2_9\",\n                \"border\" : \"@palette#bg2_9\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-light/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"Solarized-dark\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#657B83\",\n            \"background-color\" : \"#FDF6E3\",\n            \"selected-text-color\" : \"#657B83\",\n            \"selected-background-color\" : \"#b0bec5\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#e4decc\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#959eae\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#a0a8b7\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dfdf00\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#8a93a6\",\n            \"background-color\" : \"#EEE8D5\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#657B83\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#838fd3\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#919cd8\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#4c5562\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#3a4ba6\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#657B83\",\n            \"background-color\" : \"#FDF6E3\",\n            \"selected-text-color\" : \"#657B83\",\n            \"selected-background-color\" : \"#b0bec5\"\n        },\n        \"Preview\" : {\n            \"background-color\" : \"#b0bec5\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#CA8465\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#CA8465\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#CA8465\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#CA8465\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#CA8465\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#CA8465\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#abb2bf\",\n            \"background-color\" : \"#864046\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#CA8465\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#CA8465\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#2AA198\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#2AA198\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#2AA198\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#4883b3\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#56b6c2\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#7e899d\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#7482ce\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#9575cd\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#e57373\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6e7686\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#d7dae0\",\n            \"background-color\" : \"#898900\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#CA8465\",\n            \"background-color\" : \"#E4DECC\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/solarized-light/web.css",
    "content": "/* \n    https://github.com/Nriver/vnote-solarized-theme\n    made by Nriver\n*/\n\nbody {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #657B83;\n    line-height: 1.5;\n    padding: 16px;\n    background-color: #EEE8D5;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #CA8465;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np {\n    padding: 0;\n    margin-bottom: 16px;\n}\n\nh1 {\n    font-size: 26px;\n}\n\nh2 {\n    font-size: 24px;\n}\n\nh3 {\n    font-size: 22px;\n}\n\nh4 {\n    font-size: 20px;\n}\n\nh5 {\n    font-size: 19px;\n}\n\nh6 {\n    font-size: 18px;\n}\n\na {\n    color: #2AA198;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #ba68c8;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\nmark {\n    color: #000000;\n    background-color: #c4c400;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #D7BA7D;\n    word-break: break-word;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #D7BA7D;\n    background-color: #FDF6E3;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #abb2bf;\n    border-left: .5em solid #abb2bf;\n    padding: 0 1em;\n    margin-left: 0;\n}\n\nblockquote p {\n    color: #abb2bf;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 2px;\n    background-color: #4c5562;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0.5rem;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid #4c5562;\n   background-color: #efe8d6;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:hover {\n   background-color: #FDF6E3;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid #4c5562;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr td {\n   border: 1px solid #4c5562;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\n::selection {\n  background-color: #0c7bff;\n  color: #e3e5e9;\n}\n\n::-webkit-scrollbar {\n    background-color: #FDF6E3;\n    width: 14px;\n    height: 14px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #FDF6E3;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 14px;\n    width: 14px;\n    background-color: #FDF6E3;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #918F8A;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #65625B;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #FDF6E3;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #C0BCB0;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #918F8A;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #65625B;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vscode-dark/highlight.css",
    "content": "/* PrismJS 1.21.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+purebasic+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n    color: #ccc;\n    background: none;\n    font-size: 1em;\n    text-align: left;\n    white-space: pre;\n    word-spacing: normal;\n    word-break: normal;\n    word-wrap: normal;\n    line-height: 1.5;\n\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n\n    -webkit-hyphens: none;\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n    text-shadow: none;\n    background-color: #1976d2;\n    color: #f5f5f5;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n    text-shadow: none;\n    background-color: #1976d2;\n    color: #f5f5f5;\n}\n\n@media print {\n    code[class*=\"language-\"],\n    pre[class*=\"language-\"] {\n        text-shadow: none;\n    }\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n    padding: 1em;\n    margin: .5em 0;\n    overflow: auto;\n}\n\n/* Code background */\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n    background: #161616;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n    padding: .1em;\n    border-radius: .3em;\n    white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n    color: #6A9955;\n}\n\n.token.punctuation {\n    color: #999;\n}\n\n.token.namespace {\n    opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n    color: #9cdcfe;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n    color: #b5cea8;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n    color: #ce9178;\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n    color: #569cd6;\n}\n\n.token.function{\n    color: #dcdcaa;\n}\n\n.token.class-name {\n    color: #4ec9b0;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n    color: #e90;\n}\n\n.token.important,\n.token.bold {\n    font-weight: bold;\n}\n.token.italic {\n    font-style: italic;\n}\n\n.token.entity {\n    cursor: help;\n}\n\npre[class*=\"language-\"].line-numbers {\n    position: relative;\n    padding-left: 3.8em;\n    counter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n    position: relative;\n    white-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n    position: absolute;\n    pointer-events: none;\n    top: 0;\n    font-size: 100%;\n    left: -3.8em;\n    width: 3em; /* works for line-numbers below 1000 lines */\n    letter-spacing: -1px;\n    border-right: 1px solid #999;\n\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n\n}\n\n    .line-numbers-rows > span {\n        display: block;\n        counter-increment: linenumber;\n    }\n\n        .line-numbers-rows > span:before {\n            content: counter(linenumber);\n            color: #999;\n            display: block;\n            padding-right: 0.8em;\n            text-align: right;\n        }\n\ndiv.code-toolbar {\n    position: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n    position: absolute;\n    top: .3em;\n    right: .2em;\n    transition: opacity 0.3s ease-in-out;\n    opacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n    opacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n   IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n    opacity: 1;\n}\n\ndiv.code-toolbar > .toolbar .toolbar-item {\n    display: inline-block;\n}\n\ndiv.code-toolbar > .toolbar a {\n    cursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar button {\n    background: none;\n    border: 0;\n    color: inherit;\n    font: inherit;\n    line-height: normal;\n    overflow: visible;\n    padding: 0;\n    -webkit-user-select: none; /* for button */\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar a,\ndiv.code-toolbar > .toolbar button,\ndiv.code-toolbar > .toolbar span {\n    color: #bbb;\n    font-size: .8em;\n    padding: 0 .5em;\n    background: rgba(224, 224, 224, 0.2);\n    box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n    border-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar a:hover,\ndiv.code-toolbar > .toolbar a:focus,\ndiv.code-toolbar > .toolbar button:hover,\ndiv.code-toolbar > .toolbar button:focus,\ndiv.code-toolbar > .toolbar span:hover,\ndiv.code-toolbar > .toolbar span:focus {\n    color: inherit;\n    text-decoration: none;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vscode-dark/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-family: \"冬青黑体\", \"YaHei Consolas Hybrid\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 22px 5px 22px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 1px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 1px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: @widgets#qtabbar#tab#bg;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    padding: 2px 2px 2px 2px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: @widgets#qtabbar#tab#selected#bg;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    margin: 16px 0px 16px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 16px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 16px;\n    margin: 0px 16px 0px 16px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-width: 16px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vscode-dark/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"//comment\" : \"If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"editor-highlight-theme\" : \"vscode-dark\",\n        \"//comment\" : \"If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"//comment\" : \"If empty, 'editor-highlight-theme' will be used.\",\n        \"markdown-editor-highlight-theme\" : \"vscode-dark\",\n        \"display_name\" : \"VSCode-dark\",\n        \"//comment\" : \"Display name for different locales\",\n        \"display_name_zh_CN\" : \"VSCode-深色\"\n    },\n    \"palette\" : {\n        \"bg1_1\" : \"#07080d\",\n        \"bg1_2\" : \"#101215\",\n        \"bg1_3\" : \"#181b20\",\n        \"bg1_4\" : \"#21252b\",\n        \"bg1_5\" : \"#1e1e1e\",\n        \"bg1_51\" : \"#252526\",\n        \"bg1_6\" : \"#4c4c4c\",\n        \"bg1_7\" : \"#4c4c4c\",\n        \"bg1_71\" : \"#535d6c\",\n        \"bg1_8\" : \"#576071\",\n        \"bg1_9\" : \"#657184\",\n        \"fg1_1\" : \"#7e899d\",\n        \"fg1_2\" : \"#8a93a6\",\n        \"fg1_3\" : \"#959eae\",\n        \"fg1_4\" : \"#a0a8b7\",\n        \"fg1_5\" : \"#ccccc2\",\n        \"fg1_6\" : \"#b6bcc7\",\n        \"fg1_7\" : \"#c1c6d0\",\n        \"fg1_8\" : \"#cccccc\",\n        \"fg1_9\" : \"#07080d\",\n        \"fg1_10\" :\"#e3e5e9\",\n        \"bg2_2\" : \"#3a4ba6\",\n        \"bg2_3\" : \"#3f52b4\",\n        \"bg2_4\" : \"#3f52b4\",\n        \"bg2_5\" : \"#ffffff\",\n        \"bg2_6\" : \"#7482ce\",\n        \"bg2_7\" : \"#7482ce\",\n        \"bg2_8\" : \"#838fd3\",\n        \"bg2_9\" : \"#838fd3\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#5768c4\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#60697c\",\n        \"fg15_4\" : \"#60697c\",\n        \"fg15_5\" : \"#c5c5c5\",\n        \"bg10_4\" : \"#2d323b\",\n        \"bg10_5\" : \"#252526\",\n        \"bg10_6\" : \"#3c414d\",\n        \"bg10_7\" : \"#444b58\",\n        \"bg10_8\" : \"#5a5f66\",\n        \"bg11\" : \"#5a5f66\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg1_5\",\n            \"bg\" : \"@palette#bg1_5\",\n            \"border\" : \"@palette#bg1_6\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_4\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg1_51\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg10_5\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#fg1_10\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@palette#fg1_10\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg1_1\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg1_3\",\n            \"bg\" : \"@palette#bg1_3\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_6\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_7\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg1_8\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"bg\" : \"@base#content#bg\"\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"@base#normal#bg\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg1_6\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg1_71\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg1_7\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@palette#bg2_9\",\n                \"border\" : \"@palette#bg2_9\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/vscode-dark/readme.md",
    "content": "# 参考信息\n参考教程：[主题和样式](https://vnotex.github.io/vnote/zh_cn/#!docs/用户/主题和样式.md)\n同时参考群友Nriver的GitHub教程[vnote-solarized-theme](https://github.com/Nriver/vnote-solarized-theme#自定义主题)\n\n(本文档见主题根目录```readme.md```文件 )\n\n\n## 主题相关\n本主题参考vscode 深色（Visual Studio）主题\n\n\n工具：vscode\n插件：Color Highlight颜色显示\n颜色提取：Faststone Capture屏幕取色\n\n# 相关文件参考\n## 主题样式\n> 使用```palette.json```进行调配\n\n## 阅读模式\n> 使用```web.css```进行文章样式调整，使用```highlight.css```定义语法高亮\n\n## 编辑模式\n> 使用```text-editor.theme```进行样式调整\n\n\n## 笨方法改主题\n1. 安装vscode插件Color Highlight以预览颜色\n2. 使用任意屏幕取色工具抓取主题颜色代码\n3. 修改主题样式\n    1. 打开`palette.json`搜抓取到的颜色代码，替换为自己想要的颜色代码\n\n附上对照表供参考\n在线编辑地址：[vnote主题定义文档](https://kdocs.cn/l/sgsmnihByJWO)"
  },
  {
    "path": "src/data/extra/themes/vscode-dark/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"vscode-dark\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#D4D4D4\",\n            \"background-color\" : \"#1E1E1E\",\n            \"selected-text-color\" : \"#f5f5f5\",\n            \"selected-background-color\" : \"#1976d2\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#282828\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#303030\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#303030\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#C0C0C0\",\n            \"background-color\" : \"#343a40\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#aaaaaa\",\n            \"background-color\" : \"#1E1E1E\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#D4D4D4\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#6495ed\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#4169e1\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#a9c4f5\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#befbdd\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#D4D4D4\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#D4D4D4\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#D4D4D4\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#D4D4D4\",\n            \"background-color\" : \"#1E1E1E\",\n            \"selected-text-color\" : \"#1E1E1E\",\n            \"selected-background-color\" : \"#1976d2\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"background-color\" : \"#dac7c9\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#6797e6\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#6797e6\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#ce8349\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#ce8349\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#ce8349\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#616161\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#826200\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#ce8349\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#8900b5\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#ffffff\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#00af00\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#0087b5\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#b71c1c\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6c6c6c\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#D4D4D4\",\n            \"background-color\" : \"#ffff76\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#d33682\",\n            \"background-color\" : \"#e0e0e0\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/vscode-dark/web.css",
    "content": "body {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #D4D4D4;\n    line-height: 1.5;\n    padding: 16px;\n    background-color: #1E1E1E;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #D4D4D4;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np {\n    padding: 0;\n    margin-bottom: 16px;\n}\n\nh1 {\n    font-size: 26px;\n}\n\nh2 {\n    font-size: 24px;\n}\n\nh3 {\n    font-size: 22px;\n}\n\nh4 {\n    font-size: 20px;\n}\n\nh5 {\n    font-size: 19px;\n}\n\nh6 {\n    font-size: 18px;\n}\n\na {\n    color: #0099ff;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #800080;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #ce8349;\n    word-break: break-word;\n}\n\n/* Code background */\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #222222;\n    background-color: #161616;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #666666;\n    border-left: .5em solid #7a7a7a;\n    padding: 0 1em;\n    margin-left: 0;\n}\n\nblockquote p {\n    color: #666666;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 2px;\n    background-color: #999999;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0.5rem;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid #cccccc;\n   background-color: #1e1e1e;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:hover {\n   background-color: #a5a5a5;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid #cccccc;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr td {\n   border: 1px solid #cccccc;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\n::selection {\n  background-color: #1976d2;\n  color: #f5f5f5;\n}\n\n::-webkit-scrollbar {\n    background-color: #1e1e1e;\n    width: 14px;\n    height: 14px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #1e1e1e;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 14px;\n    width: 14px;\n    background-color: #1e1e1e;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #dadada;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #161616;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #1e1e1e;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #3c3c3c;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #424242;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #bbbbbb;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-dark/highlight.css",
    "content": "/* PrismJS 1.22.0\nhttps://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+birb+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/**\n * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML\n * Based on https://github.com/chriskempson/tomorrow-theme\n * @author Rose Pritchard\n */\n\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n     color: #ccc;\n     background: none;\n     font-size: 1em;\n     text-align: left;\n     white-space: pre;\n     word-spacing: normal;\n     word-break: normal;\n     word-wrap: normal;\n     line-height: 1.5;\n \n     -moz-tab-size: 4;\n     -o-tab-size: 4;\n     tab-size: 4;\n \n     -webkit-hyphens: none;\n     -moz-hyphens: none;\n     -ms-hyphens: none;\n     hyphens: none;\n \n }\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n     padding: 1em;\n     margin: .5em 0;\n     overflow: auto;\n }\n \n :not(pre) > code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n     background: #1A1A1A;\n     border-radius: 6px;\n }\n \n /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n     padding: .1em;\n     border-radius: .3em;\n     white-space: normal;\n }\n \n .token.comment,\n .token.block-comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n     color: #6a9955;\n }\n \n .token.punctuation {\n     color: #ccc;\n }\n \n .token.tag,\n .token.attr-name,\n .token.namespace,\n .token.deleted {\n     color: #e2777a;\n }\n \n .token.function-name {\n     color: #6196cc;\n }\n \n .token.boolean,\n .token.number,\n .token.function {\n     color: #d7ba7d;\n }\n \n .token.property,\n .token.class-name,\n .token.constant,\n .token.symbol {\n     color: #f8c555;\n }\n \n .token.selector,\n .token.important,\n .token.atrule,\n .token.keyword,\n .token.builtin {\n     color: #569cd6;\n }\n \n .token.string,\n .token.char,\n .token.attr-value,\n .token.regex,\n .token.variable {\n     color: #ce9178;\n }\n \n .token.operator,\n .token.entity,\n .token.url {\n     color: #67cdcc;\n }\n \n .token.important,\n .token.bold {\n     font-weight: bold;\n }\n .token.italic {\n     font-style: italic;\n }\n \n .token.entity {\n     cursor: help;\n }\n \n .token.inserted {\n     color: green;\n }\n \n pre[class*=\"language-\"].line-numbers {\n     position: relative;\n     padding-left: 3.8em;\n     counter-reset: linenumber;\n }\n \n pre[class*=\"language-\"].line-numbers > code {\n     position: relative;\n     white-space: inherit;\n }\n \n .line-numbers .line-numbers-rows {\n     position: absolute;\n     pointer-events: none;\n     top: 0;\n     font-size: 100%;\n     left: -3.8em;\n     width: 3em; /* works for line-numbers below 1000 lines */\n     letter-spacing: -1px;\n     border-right: 1px solid #999;\n \n     -webkit-user-select: none;\n     -moz-user-select: none;\n     -ms-user-select: none;\n     user-select: none;\n \n }\n \n     .line-numbers-rows > span {\n         display: block;\n         counter-increment: linenumber;\n     }\n \n         .line-numbers-rows > span:before {\n             content: counter(linenumber);\n             color: #999;\n             display: block;\n             padding-right: 0.8em;\n             text-align: right;\n         }\n \n div.code-toolbar {\n     position: relative;\n }\n \n div.code-toolbar > .toolbar {\n     position: absolute;\n     top: .3em;\n     right: .2em;\n     transition: opacity 0.3s ease-in-out;\n     opacity: 0;\n }\n \n div.code-toolbar:hover > .toolbar {\n     opacity: 1;\n }\n \n /* Separate line b/c rules are thrown out if selector is invalid.\n    IE11 and old Edge versions don't support :focus-within. */\n div.code-toolbar:focus-within > .toolbar {\n     opacity: 1;\n }\n \n div.code-toolbar > .toolbar .toolbar-item {\n     display: inline-block;\n }\n \n div.code-toolbar > .toolbar a {\n     cursor: pointer;\n }\n \n div.code-toolbar > .toolbar button {\n     background: none;\n     border: 0;\n     color: inherit;\n     font: inherit;\n     line-height: normal;\n     overflow: visible;\n     padding: 0;\n     -webkit-user-select: none; /* for button */\n     -moz-user-select: none;\n     -ms-user-select: none;\n }\n \n div.code-toolbar > .toolbar a,\n div.code-toolbar > .toolbar button,\n div.code-toolbar > .toolbar span {\n    color: rgba(235, 235, 235, 0.38);\n    padding: 0 .5em;\n    margin: 0 .5em;\n    background: #252526;\n    border-radius: 4px;\n    font-size: 13px;\n    line-height: 18px;\n    height: 18px;\n }\n \n div.code-toolbar > .toolbar a:hover,\n div.code-toolbar > .toolbar a:focus,\n div.code-toolbar > .toolbar button:hover,\n div.code-toolbar > .toolbar button:focus,\n div.code-toolbar > .toolbar span:hover,\n div.code-toolbar > .toolbar span:focus {\n     color: inherit;\n     cursor: pointer;\n     text-decoration: none;\n }\n "
  },
  {
    "path": "src/data/extra/themes/vue-dark/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-size: 10pt;\n    font-family: \"冬青黑体\", \"YaHei Consolas Hybrid\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\nQWidget[HitSettingWidget=\"true\"] {\n    border: 2px solid @widgets#qwidget#info#border;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 22px 5px 22px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 1px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 1px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: #2D2D2D;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    padding: 2px 2px 2px 2px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: #1E1E1E;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    margin: 16px 0px 16px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 16px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 16px;\n    margin: 0px 16px 0px 16px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-width: 16px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-dark/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"editor-highlight-theme\" : \"Breeze Dark\",\n        \"markdown-editor-highlight-theme\" : \"Markdown Breeze Dark\",\n        \"display_name\" : \"Vue-dark\"\n    },\n    \"palette\" : {\n        \"bg1_1\" : \"#07080d\",\n        \"bg1_2\" : \"#101215\",\n        \"bg1_3\" : \"#181b20\",\n        \"bg1_4\" : \"#21252b\",\n        \"bg1_5\" : \"#1A1A1A\",\n        \"bg1_51\" : \"#424242\",\n        \"bg1_6\" : \"#424242\",\n        \"bg1_7\" : \"#424242\",\n        \"bg1_71\" : \"#535d6c\",\n        \"bg1_8\" : \"#363737\",\n        \"bg1_9\" : \"#657184\",\n        \"fg1_1\" : \"#7e899d\",\n        \"fg1_2\" : \"#8a93a6\",\n        \"fg1_3\" : \"#959eae\",\n        \"fg1_4\" : \"#a0a8b7\",\n        \"fg1_5\" : \"#949494\",\n        \"fg1_6\" : \"#b6bcc7\",\n        \"fg1_7\" : \"#c1c6d0\",\n        \"fg1_8\" : \"#ccd1d8\",\n        \"fg1_9\" : \"#d7dae0\",\n        \"fg1_10\" : \"#e3e5e9\",\n        \"bg2_2\" : \"#3a4ba6\",\n        \"bg2_3\" : \"#3f52b4\",\n        \"bg2_4\" : \"#485bbf\",\n        \"bg2_5\" : \"#5768c4\",\n        \"bg2_6\" : \"#6675c9\",\n        \"bg2_7\" : \"#7482ce\",\n        \"bg2_8\" : \"#838fd3\",\n        \"bg2_9\" : \"#919cd8\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#5768c4\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#4f5666\",\n        \"fg15_4\" : \"#60697c\",\n        \"fg15_5\" : \"#C5C5C5\",\n        \"bg10_4\" : \"#2d323b\",\n        \"bg10_5\" : \"#242424\",\n        \"bg10_6\" : \"#3c414d\",\n        \"bg10_7\" : \"#444b58\",\n        \"bg10_8\" : \"#5a5f66\",\n        \"bg11\" : \"#0c7bff\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg1_5\",\n            \"bg\" : \"@palette#bg1_5\",\n            \"border\" : \"@palette#bg1_6\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_4\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg1_51\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg10_5\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#fg1_10\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@palette#fg1_10\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg1_1\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg1_3\",\n            \"bg\" : \"@palette#bg1_3\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_6\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg1_8\",\n            \"bg\" : \"@palette#bg1_7\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg1_9\",\n            \"bg\" : \"@palette#bg1_8\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"bg\" : \"@base#content#bg\"\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"@base#normal#bg\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg1_6\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg1_71\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg1_7\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@palette#bg2_9\",\n                \"border\" : \"@palette#bg2_9\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-dark/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"Moonlight\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#ccd1d8\",\n            \"background-color\" : \"#242424\",\n            \"selected-text-color\" : \"#e3e5e9\",\n            \"selected-background-color\" : \"#0c7bff\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#424242\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#959eae\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#a0a8b7\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dfdf00\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#525252\",\n            \"background-color\" : \"#2F2F2F\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#ccd1d8\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#838fd3\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#919cd8\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#4c5562\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#3a4ba6\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#ccd1d8\",\n            \"background-color\" : \"#242424\",\n            \"selected-text-color\" : \"#e3e5e9\",\n            \"selected-background-color\" : \"#0c7bff\"\n        },\n        \"Preview\" : {\n            \"background-color\" : \"#b0bec5\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#E3E3E3\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#E3E3E3\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#E3E3E3\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#E3E3E3\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#E3E3E3\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#E3E3E3\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#abb2bf\",\n            \"background-color\" : \"#864046\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#E3E3E3\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#E3E3E3\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#61afef\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#61afef\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#61afef\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#4883b3\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#56b6c2\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#c07855\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#7e899d\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#98c379\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#7482ce\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#9575cd\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#e57373\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6e7686\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#4db6ac\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#d7dae0\",\n            \"background-color\" : \"#898900\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#FFFFFF\",\n            \"background-color\" : \"#424242\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-dark/web.css",
    "content": "body {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #E3E3E3;\n    line-height: 1.5;\n    padding: 16px;\n    background-color: #242424;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #E1E1E1;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np {\n    padding: 0;\n    margin-bottom: 16px;\n}\n\nh1 {\n    font-size: 26px;\n}\n\nh2 {\n    font-size: 24px;\n}\n\nh3 {\n    font-size: 22px;\n}\n\nh4 {\n    font-size: 20px;\n}\n\nh5 {\n    font-size: 19px;\n}\n\nh6 {\n    font-size: 18px;\n}\n\na {\n    color: #9499FF;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #ba68c8;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\nmark {\n    color: #000000;\n    background-color: #c4c400;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #C9DEF1;\n    word-break: break-word;\n}\n\n:is(h1, h2, h3, h4, h5, h6) code {\n  font-size: inherit;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #C9DEF1;\n    background-color: #2d323b;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #2F2F2F;\n    border-left: .2em solid #abb2bf;\n    margin: 1em 0;\n    padding: .3em .5rem;\n    background-color: #3A3A3A;\n}\n\nblockquote p,blockquote ul {\n    color: #abb2bf;\n    margin: 8px 0;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 2px;\n    background-color: #4c5562;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0;\n   width: 100%;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid rgba(84, 84, 84, .65);;\n   background-color: #242424;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:hover {\n   background-color: #3b424c;\n}\n\ntable tr:nth-child(2n){\n    background-color: #2f2f2f;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid rgba(84, 84, 84, .65);;\n   background-color: #1A1A1A;\n   color: #E1E1E1;\n   margin: 0;\n   padding: 12px 16px;\n}\n\ntable tr td {\n   border: 1px solid rgba(84, 84, 84, .65);;\n   margin: 0;\n   padding: 12px 16px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    background: #B0BEC5;\n    color: #6C6C6C;\n}\n\n::selection {\n  background-color: #0c7bff;\n  color: #e3e5e9;\n}\n\n::-webkit-scrollbar {\n    background-color: #1A1A1A;\n    width: 14px;\n    height: 14px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #1A1A1A;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 14px;\n    width: 14px;\n    background-color: #1A1A1A;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #535d6c;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #313740;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #1A1A1A;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #424242;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #535d6c;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #4c5562;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n\n/* 宽度设定 */\n\n#vx-content {\n    margin: 0 auto;\n    padding: 30px 30px 40px;\n}\n\n@media screen and (min-width: 1180px) {\n    #vx-content {\n        max-width: 1100px;\n    }\n}\n\n@media screen and (max-width: 768px) {\n    #vx-content {\n        max-width: 100%;\n        padding: 30px 15px 40px;\n    }\n}\n\n/* 重新定义 alert */\n\n.vx-alert {\n    padding: 16px !important;\n    border: 1px solid #747BFF !important;\n    background-color: #292935 !important;\n    border-radius: 8px !important;\n    margin: 16px 0;\n    font-size: 14px !important;\n    color: #BCC0FF !important;\n}\n\n.vx-alert p,.vx-alert ul {margin: 8px 0;line-height: 24px;font-size: 14px !important;}\n.vx-alert code {\n    padding: 3px 6px;\n    border-radius: 4px;\n    font-weight: bold;\n    color: inherit;\n    font-size: 13px !important;\n    line-height: 21px;\n    background-color: rgba(100, 108, 255, .08);\n}\n\n.alert-success,.alert-s{\n    border-color: #23996E !important;\n    background-color: rgba(35, 153, 110, .08) !important;\n    color: rgba(35, 153, 110, .5) !important;\n}\n\n.alert-warning,.alert-w{\n    border-color: #ffa502 !important;\n    background-color: rgba(255, 165, 2, .08) !important;\n    color: rgba(255, 165, 2, .5) !important;\n}\n\n\n.alert-info,.alert-i{\n    border-color: #70a1ff !important;\n    background-color: rgba(112, 161, 255, .08) !important;\n    color: rgba(112, 161, 255, .5) !important;\n}\n\n.alert-danger,.alert-d{\n    border-color: #ff4757 !important;\n    background-color: rgba(255, 71, 87, .08) !important;\n    color: rgba(255, 71, 87, .5) !important;\n}\n\n.alert-light{\n    border-color: #C1C1C1 !important;\n    background-color: rgba(193, 193, 193, .08) !important;\n    color: rgba(193, 193, 193, .5) !important;\n}\n\n.alert-dark{\n    border-color: #111 !important;\n    background-color: #1E1E1E !important;\n    color: #999 !important;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-light/highlight.css",
    "content": "/* PrismJS 1.21.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+purebasic+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n     color: #525252;\n     background: none;\n     text-shadow: 0 1px white;\n     font-size:  0.9rem;\n     text-align: left;\n     white-space: pre;\n     word-spacing: normal;\n     word-break: normal;\n     word-wrap: normal;\n     line-height: 1.5;\n \n     -moz-tab-size: 4;\n     -o-tab-size: 4;\n     tab-size: 4;\n \n     -webkit-hyphens: none;\n     -moz-hyphens: none;\n     -ms-hyphens: none;\n     hyphens: none;\n }\n \n pre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\n code[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n     text-shadow: none;\n     background-color: #1976D2;\n     color: white;\n }\n \n pre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\n code[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n     text-shadow: none;\n     background-color: #1976D2;\n     color: white;\n }\n \n @media print {\n     code[class*=\"language-\"],\n     pre[class*=\"language-\"] {\n         text-shadow: none;\n     }\n }\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n     padding: 1em;\n     margin: 0;\n     overflow: auto;\n     border-radius: 4px;\n }\n \n :not(pre) > code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n     background:#F8F8F8 !important;\n }\n \n /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n     padding: .1em;\n     border-radius: .3em;\n     white-space: normal;\n }\n \n .token.comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n     color: #a50;\n }\n \n .token.punctuation {\n     color: #999;\n }\n \n .token.namespace {\n     opacity: .7;\n }\n \n .token.property,\n .token.tag,\n .token.boolean,\n .token.number,\n .token.constant,\n .token.symbol,\n .token.deleted {\n     color: #905;\n }\n \n .token.selector,\n .token.attr-name,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted {\n     color: #690;\n }\n \n .token.operator,\n .token.entity,\n .token.url,\n .language-css .token.string,\n .style .token.string {\n     color: #9a6e3a;\n }\n \n .token.atrule,\n .token.attr-value,\n .token.keyword {\n     color: #708;\n }\n \n .token.function,\n .token.class-name {\n     color: #DD4A68;\n }\n \n .token.regex,\n .token.important,\n .token.variable {\n     color: #e90;\n }\n \n .token.important,\n .token.bold {\n     font-weight: bold;\n }\n .token.italic {\n     font-style: italic;\n }\n \n .token.entity {\n     cursor: help;\n }\n \n pre[class*=\"language-\"].line-numbers {\n     position: relative;\n     padding-left: 3.8em;\n     counter-reset: linenumber;\n }\n \n pre[class*=\"language-\"].line-numbers > code {\n     position: relative;\n     white-space: inherit;\n     letter-spacing: 1px;\n }\n \n .line-numbers .line-numbers-rows {\n     position: absolute;\n     pointer-events: none;\n     top: 0;\n     font-size: 100%;\n     left: -3.8em;\n     width: 3em; /* works for line-numbers below 1000 lines */\n     letter-spacing: -1px;\n     border-right: 1px solid #ddd;\n     color: #999;\n     -webkit-user-select: none;\n     -moz-user-select: none;\n     -ms-user-select: none;\n     user-select: none;\n \n }\n \n.line-numbers-rows > span {\n    display: block;\n    counter-increment: linenumber;\n}\n\n.line-numbers-rows > span:before {\n    content: counter(linenumber);\n    color: #999;\n    display: block;\n    padding-right: 0.8em;\n    text-align: right;\n}\n \n div.code-toolbar {\n     position: relative;\n }\n \n div.code-toolbar > .toolbar {\n     position: absolute;\n     top: 0;\n     right: 0;\n     transition: opacity 0.3s ease-in-out;\n     opacity: 0;\n }\n \n div.code-toolbar:hover > .toolbar {\n     opacity: 1;\n }\n \n /* Separate line b/c rules are thrown out if selector is invalid.\n    IE11 and old Edge versions don't support :focus-within. */\n div.code-toolbar:focus-within > .toolbar {\n     opacity: 1;\n }\n \n div.code-toolbar > .toolbar .toolbar-item {\n     display: inline-block;\n }\n \n div.code-toolbar > .toolbar a {\n     cursor: pointer;\n }\n \n div.code-toolbar > .toolbar button {\n     background: none;\n     border: 0;\n     color: inherit;\n     font: inherit;\n     line-height: normal;\n     overflow: visible;\n     padding: 0;\n     -webkit-user-select: none; /* for button */\n     -moz-user-select: none;\n     -ms-user-select: none;\n }\n \n div.code-toolbar > .toolbar a,\n div.code-toolbar > .toolbar button,\n div.code-toolbar > .toolbar span {\n     color: #fff;\n     font-size: .8em;\n     font-weight: bold;\n     padding: .2em .5em;\n     border-radius: 0 4px 0 4px;\n     background-color: #5C9DFF;\n }\n "
  },
  {
    "path": "src/data/extra/themes/vue-light/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-family: \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\nQWidget[HitSettingWidget=\"true\"] {\n    border: 2px solid @widgets#qwidget#info#border;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget[MainWindowSideBar=\"true\"] QWidget {\n    background-color: @widgets#mainwindow#side_bar#widget#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:hover {\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 30px 5px 30px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 1px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 1px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar[MainWindowSideBar=\"true\"] {\n    background-color: @widgets#mainwindow#side_bar#bg;\n}\n\nQTabBar[MainWindowSideBar=\"true\"]::tab {\n    color: @widgets#mainwindow#side_bar#fg;\n    background-color: @widgets#mainwindow#side_bar#bg;\n    border: none;\n}\n\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\n/* Only the left one is the mainwindow side bar */\nQMainWindow > QTabBar::tab:left:hover {\n    color: @widgets#mainwindow#side_bar#hover#fg;\n    background-color: @widgets#mainwindow#side_bar#hover#bg;\n}\n\nQMainWindow > QTabBar::tab:left:selected {\n    color: @widgets#mainwindow#side_bar#selected#fg;\n    background-color: @widgets#mainwindow#side_bar#selected#bg;\n}\n\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: @widgets#qtabbar#tab#bg;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    padding: 2px 2px 2px 2px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: @widgets#qtabbar#tab#selected#bg;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    margin: 16px 0px 16px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 16px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 16px;\n    margin: 0px 16px 0px 16px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-width: 16px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 16px;\n    height: 16px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-light/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 2.0,\n        \"editor-highlight-theme\" : \"Default\",\n        \"markdown-editor-highlight-theme\" : \"Markdown Default\",\n        \"display_name\" : \"Vue-light\"\n    },\n    \"palette\" : {\n        \"bg3_0\" : \"#bbbbbb\",\n        \"bg3_1\" : \"#c0c0c0\",\n        \"bg3_2\" : \"#cdcdcd\",\n        \"bg3_3\" : \"#d2d2d2\",\n        \"bg3_4\" : \"#dadada\",\n        \"bg3_41\" : \"#e0e0e0\",\n        \"bg3_5\" : \"#f5f5f5\",\n        \"bg3_6\" : \"#ffffff\",\n        \"fg3_5\" : \"#222222\",\n        \"fg3_6\" : \"#646464\",\n        \"fg3_7\" : \"#7a7a7a\",\n        \"fg3_8\" : \"#9e9e9e\",\n        \"fg3_9\" : \"#b0b0b0\",\n        \"fg3_10\" : \"#d0d0d0\",\n        \"bg2_4\" : \"#007b6e\",\n        \"bg2_5\" : \"#5C9DFF\",\n        \"bg2_6\" : \"#199488\",\n        \"bg2_7\" : \"#D2E2FF\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#007b6e\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#b0b0b0\",\n        \"fg15_4\" : \"#7a7a7a\",\n        \"fg15_5\" : \"#222222\",\n        \"bg11\" : \"#1976d2\",\n        \"layer1\" : \"#354259\",\n        \"layer2\" : \"#1b2430\",\n        \"layer3\" : \"#6b778d\",\n        \"layer4\" : \"#eeeeee\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_5\",\n            \"border\" : \"@palette#fg3_10\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#bg3_6\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_6\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg3_41\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_6\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#bg3_6\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"edit\" : {\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@palette#bg2_7\",\n                \"border\" : \"@base#master#bg\"\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@base#normal#bg\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg3_8\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_1\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_2\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_4\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_3\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            }\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"transparent\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#edit#focus#bg\",\n                \"border\" : \"@base#edit#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#edit#hover#bg\",\n                \"border\" : \"@base#edit#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"transparent\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg3_2\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg3_1\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg3_0\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#edit#focus#bg\",\n                \"border\" : \"@base#edit#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#edit#hover#bg\",\n                \"border\" : \"@base#edit#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@base#master#bg\",\n                \"border\" : \"@base#master#bg\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"side_bar\" : {\n                \"fg\" : \"@palette#bg3_5\",\n                \"bg\" : \"@palette#layer1\",\n                \"selected\" : {\n                    \"fg\" : \"@palette#bg2_7\",\n                    \"bg\" : \"@palette#layer2\"\n                },\n                \"icon\" : {\n                    \"fg\" : \"@widgets#mainwindow#side_bar#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@widgets#mainwindow#side_bar#selected#fg\"\n                    }\n                },\n                \"hover\" : {\n                    \"fg\" : \"@widgets#mainwindow#side_bar#fg\",\n                    \"bg\" : \"@palette#layer3\"\n                },\n                \"widget\" : {\n                    \"bg\" : \"@palette#layer4\"\n                }\n            },\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-light/text-editor.theme",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 0,\n        \"name\" : \"Moonlight\",\n        \"type\" : \"vtextedit\"\n    },\n    \"editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#FFFFFF\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"selected-background-color\" : \"#1976d2\"\n        },\n        \"CursorLine\" : {\n            \"background-color\" : \"#D2E2FF\"\n        },\n        \"TrailingSpace\" : {\n            \"background-color\" : \"#a8a8a8\"\n        },\n        \"Tab\" : {\n            \"background-color\" : \"#cfcfcf\"\n        },\n        \"SelectedText\" : {\n            \"//comment\" : \"Selected text highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dfdf00\"\n        },\n        \"IndicatorsBorder\" : {\n            \"text-color\" : \"#aaaaaa\",\n            \"background-color\" : \"#fafafa\"\n        },\n        \"CurrentLineNumber\" : {\n            \"text-color\" : \"#222222\"\n        },\n        \"Folding\" : {\n            \"text-color\" : \"#6495ed\"\n        },\n        \"FoldedFolding\" : {\n            \"text-color\" : \"#4169e1\"\n        },\n        \"FoldingHighlight\" : {\n            \"text-color\" : \"#a9c4f5\"\n        },\n        \"FoldedFoldingRangeLine\" : {\n            \"background-color\" : \"#befbdd\"\n        },\n        \"IncrementalSearch\" : {\n            \"//comment\" : \"Incremental search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ce93d8\"\n        },\n        \"Search\" : {\n            \"//comment\" : \"Search highlight\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#4db6ac\"\n        },\n        \"SearchUnderCursor\" : {\n            \"//comment\" : \"Search highlight under cursor\",\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#66bb6a\"\n        }\n    },\n    \"//comment\" : \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\" : {\n        \"Text\" : {\n            \"//comment\" : \"Support a list of fonts separated by ,\",\n            \"font-family\" : \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\" : 12,\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#fefefe\",\n            \"selected-text-color\" : \"#ffffff\",\n            \"selected-background-color\" : \"#1976d2\"\n        }\n    },\n    \"markdown-syntax-styles\" : {\n        \"H1\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 17\n        },\n        \"H2\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 16\n        },\n        \"H3\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 15\n        },\n        \"H4\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 14\n        },\n        \"H5\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 13\n        },\n        \"H6\" : {\n            \"text-color\" : \"#222222\",\n            \"bold\" : true,\n            \"font-size\" : 12\n        },\n        \"HRULE\" : {\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#dac7c9\"\n        },\n        \"LIST_BULLET\" : {\n            \"text-color\" : \"#d33682\",\n            \"bold\" : true\n        },\n        \"LIST_ENUMERATOR\" : {\n            \"text-color\" : \"#0000ff\"\n        },\n        \"LINK\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"AUTO_LINK_URL\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"AUTO_LINK_EMAIL\" : {\n            \"text-color\" : \"#005fff\"\n        },\n        \"IMAGE\" : {\n            \"text-color\" : \"#616161\"\n        },\n        \"REFERENCE\" : {\n            \"text-color\" : \"#826200\"\n        },\n        \"CODE\" : {\n            \"text-color\" : \"#8e24aa\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\" : {\n            \"italic\" : true\n        },\n        \"STRONG\" : {\n            \"bold\" : true\n        },\n        \"HTML_ENTITY\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTML\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"HTMLBLOCK\" : {\n            \"text-color\" : \"#8900b5\"\n        },\n        \"COMMENT\" : {\n            \"text-color\" : \"#93a1a1\"\n        },\n        \"VERBATIM\" : {\n            \"text-color\" : \"#673ab7\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\" : \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\" : {\n            \"text-color\" : \"#673ab7\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\" : {\n            \"text-color\" : \"#00af00\"\n        },\n        \"NOTE\" : {\n            \"text-color\" : \"#0087b5\"\n        },\n        \"STRIKE\" : {\n            \"text-color\" : \"#b71c1c\",\n            \"strike-through\" : true\n        },\n        \"FRONTMATTER\" : {\n            \"text-color\" : \"#6c6c6c\"\n        },\n        \"INLINEEQUATION\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\" : {\n            \"text-color\" : \"#00897b\",\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\" : {\n            \"text-color\" : \"#222222\",\n            \"background-color\" : \"#ffff76\"\n        },\n        \"TABLE\" : {\n            \"font-family\" : \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\" : {\n            \"text-color\" : \"#d33682\",\n            \"background-color\" : \"#e0e0e0\"\n        }\n   }\n}\n"
  },
  {
    "path": "src/data/extra/themes/vue-light/web.css",
    "content": "body {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Noto Sans\", \"Helvetica Neue\", \"Segoe UI\", Helvetica, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\", \"Apple Color Emoji\", \"Segoe UI Emoji\";\n    color: #34495E;\n    line-height: 1.5;\n    padding: 0;\n    background-color: #ffffff;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #34495e;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np,blockquote,table {\n    margin: 1.2em 0;\n}\n\nul,ol,dl{\n    margin: 0.4em 0;\n}\n\np {\n    padding: 0;\n    /* margin-bottom: .e; */\n}\n\nh1 {\n    padding-bottom: .4rem;\n    font-size: 2.2rem;\n    line-height: 1.3;\n}\n\nh2 {\n    font-size: 1.75rem;\n    line-height: 1.225;\n    margin: 35px 0 15px;\n    padding-bottom: 0.5em;\n    border-bottom: 1px solid #ddd;\n}\n\nh3 {\n    font-size: 1.4rem;\n    line-height: 1.43;\n    margin: 20px 0 7px;\n}\n\nh4 {\n    font-size: 1.2rem;\n}\n\nh5 {\n    font-size: 1rem;\n}\n\nh6 {\n    font-size: 1rem;\n    color: #777;\n}\n\na {\n    color: #0099ff;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #800080;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\npre {\n    display: block;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    color: #e96900;\n    padding: 0 4px;\n    margin: 4px 0;\n    border-radius: 2px;\n    background-color: #f8f8f8;\n    word-break: break-word;\n}\n\n:is(h1, h2, h3, h4, h5, h6) code {\n  font-size: inherit;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #34495e;\n    background-color: #e0e0e0;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, \"Andale Mono\", Monospace, \"Courier New\";\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #666666;\n    border-left: .5em solid #7a7a7a;\n    padding: 0 1em;\n    margin-left: 0;\n}\n\nblockquote p {\n    color: #666666;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0;\n    border: none;\n    height: 1px;\n    background-color: #cccccc;\n}\n\ntable {\n    padding: 0;\n    width:100%;\n    margin: 1rem 0;\n    border-collapse: collapse;\n }\n \n table tr {\n    border-top: 1px solid #cccccc;\n    background-color: white;\n    margin: 0;\n    padding: 0;\n }\n \n table tr:nth-child(2n){\n     background-color: #f8f8f8;\n }\n table tr th {\n    font-weight: bold;\n    border: 1px solid #cccccc;\n    background-color: #f2f2f2;\n    text-align: left;\n    margin: 0;\n    padding: 6px 13px;\n }\n \n table tr td {\n    border: 1px solid #cccccc;\n    margin: 0;\n    padding: 6px 13px;\n }\n \n table tr th :first-child, table tr td :first-child {\n    margin-top: 0;\n }\n \n table tr th :last-child, table tr td :last-child {\n    margin-bottom: 0;\n }\n \n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n}\n\n::selection {\n  background-color: #1976d2;\n  color: #ffffff;\n}\n\n::-webkit-scrollbar {\n    background-color: #f5f5f5;\n    width: 14px;\n    height: 14px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #f5f5f5;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 14px;\n    width: 14px;\n    background-color: #f5f5f5;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #dadada;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #c0c0c0;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #f5f5f5;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #cdcdcd;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #c0c0c0;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #bbbbbb;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #222222;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #222222;\n    background-color: #66bb6a;\n}\n\n#vx-content {\n    margin: 0 auto;\n    padding: 30px 30px 40px;\n}\n\n/* 宽度设定 */\n@media screen and (min-width: 1180px) {\n    #vx-content {\n        max-width: 1100px;\n    }\n}\n\n@media screen and (max-width: 768px) {\n    #vx-content {\n        max-width: 100%;\n        padding: 30px 15px 40px;\n    }\n}\n\n.vx-alert{\n    background-color: #F8F8F8 !important;\n    padding: 12px 24px 12px 30px !important;\n    border-radius:0 !important;\n    margin: 2em 0;\n    border:none !important;\n    border-left: 4px solid #498BA7 !important;\n    color: inherit !important;\n}\n.vx-alert::before\n{\n    background-color: #498BA7;\n    border-radius: 100%;\n    color: #fff;\n    content: '!';\n    font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;\n    font-size: 14px;\n    font-weight: bold;\n    left: -12px;\n    line-height: 20px;\n    position: absolute;\n    height: 20px;\n    width: 20px;\n    text-align: center;\n    top: 14px;\n}\n\n.vx-alert p {\n    margin: .4em 0;\n}\n\n.alert-success,.alert-s{\n    border-color: #42B983 !important;\n}\n.alert-success::before,.alert-s::before{\n    background-color: #42B983;\n}\n\n.alert-warning,.alert-w{\n    border-color: #ffa502 !important;\n}\n.alert-warning:before,.alert-w::before{\n    background-color: #ffa502;\n}\n\n\n.alert-info,.alert-i{\n    border-color: #70a1ff !important;\n}\n.alert-info:before,.alert-i::before{\n    background-color: #70a1ff;\n}\n\n.alert-danger,.alert-d{\n    border-color: #ff4757 !important;\n}\n.alert-danger:before,.alert-d::before{\n    background-color: #ff4757;\n}\n\n.alert-light{\n    border-color: #C1C1C1 !important;\n}\n\n.alert-light:before{\n    background-color: #C1C1C1;\n}\n\n\n.alert-dark{\n    border-color: #484848 !important;\n}\n\n.alert-dark:before{\n    background-color: #484848;\n}\n\n/* 标题层级展示 CSS */\n.vx-header-anchor::after{background-color: #eee;padding: 0 5px;border-radius: 3px;}\n.vx-header-anchor{color: #999;display: inline-block;margin-left: 10px;}\n\nh1 .vx-header-anchor::after { content: 'H1';}\nh2 .vx-header-anchor::after { content: 'H2';}\nh3 .vx-header-anchor::after { content: 'H3';}\nh4 .vx-header-anchor::after { content: 'H4';}\nh5 .vx-header-anchor::after { content: 'H5';}\nh6 .vx-header-anchor::after { content: 'H6';}\n\n\nh1 .vx-header-anchor{margin-top: -5px;}\nh2 .vx-header-anchor{margin-top: -4px;}\nh3 .vx-header-anchor{margin-top: -3px;}\nh4 .vx-header-anchor{margin-top: -2px;}\nh5 .vx-header-anchor{margin-top: -1px;}\n\n/* 优化嵌套代码块样式 */\n.vx-alert .code-toolbar pre[class*=\"language-\"]{\n    background-color: #f3f3f3 !important;\n    border: 1px dashed #eee;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vx-idea/README.md",
    "content": "<div style=\"font-size:50px\"><span style=\"color: #ff0000\">v</span><span style=\"color: #ff4000\">n</span><span style=\"color: #ff7f00\">o</span><span style=\"color: #00d2ff\">t</span><span style=\"color: #00e980\">e</span><span style=\"color: #4460a6\">X</span><span style=\"color: #00ff00\"> </span><span style=\"color: #00ff80\">i</span><span style=\"color: #00ffff\">d</span><span style=\"color: #5f9090\">e</span><span style=\"color: #7548c8\">a</span><span style=\"color: #8b00ff\"> </span><span style=\"color: #c50080\">t</span><span style=\"color: #ff0000\">h</span><span style=\"color: #ff7f00\">e</span><span style=\"color: #de4d67\">m</span><span style=\"color: #bc1bce\">e</span></div>\n\n\n\n自定义方式参考[Vnote](https://tamlok.github.io/vnote/zh_cn/)官方文档：[主题和样式](https://tamlok.github.io/vnote/zh_cn/#!docs/%E7%94%A8%E6%88%B7/%E4%B8%BB%E9%A2%98%E5%92%8C%E6%A0%B7%E5%BC%8F.md)\n\n`vx-idea`主题又名`石板灰`，适用于新版本[vnotex](https://vnotex.github.io/vnote/zh_cn/#!vnotex.md)版本；vnote 2.0` 版本请前往源仓库切换至` vnote 分支。\n\n\n👉 尝鲜体验，请移步源仓库：https://gitee.com/uRick/vnote-idea-theme\n\n## 1. 可选配置\n\n### 1.1 适配2套代码高亮主题\n\n详见主题目录 `code_higlight` 文件夹内容，因人而异，可根据需求参考官方自定义。\n\n主题默认样式为`highlight-one-light.css`，当前提供：`highlight-dark.css`、`highlight-one-light.css`两款代码样式；主题样式基于仓库[PrismJS Themes](https://github.com/PrismJS/prism-themes)样式微调而来，具体支持语言样式请参考[Prism.js](https://prismjs.com)。\n\n使用主题时，请将`code_highlight`文件夹下样式，复制重命名替换主题根目录下`highlight.css`样式，重启Vnotex即可生效。\n\n主题首选字体是`YaHei Consolas Hybrid`，可自行搜索下载安装。\n\n```ini\nhighlight-dark.css #dark样式\nhighlight-one-light.css #light样式\n```\n\n\n### 1.2 alert组件增强\n\n> 基于`vnotex`原生 `alert` 组件支持，引入图标增强，主要为编写技术文档适配，当前不支持 `alert-light`、`alert-success`。\n效果如下：\n\n![提示组件预览效果](tips_components/alert.png)\n\n复制 `tips_components/style.css` 中样式然后追加至 `web.css` 文件尾即可。\n\n## 2. 预览\n\n![主题效果图](cover.png)\n\n## 3. 鸣谢\n\n- [tamlok](https://github.com/tamlok) - [VNote](https://github.com/tamlok/vnote)\n"
  },
  {
    "path": "src/data/extra/themes/vx-idea/code_highlight/highlight-dark.css",
    "content": "/* PrismJS 1.23.0\nhttps://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apl+applescript+aql+arduino+arff+asciidoc+aspnet+asm6502+autohotkey+autoit+bash+basic+batch+bbcode+bison+bnf+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cil+clojure+cmake+coffeescript+concurnas+csp+crystal+css-extras+cypher+d+dart+dax+dhall+diff+django+dns-zone-file+docker+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+firestore-security-rules+flow+fortran+ftl+gml+gcode+gdscript+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+http+hpkp+hsts+ichigojam+icon+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keyman+kotlin+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+lolcode+lua+makefile+markdown+markup-templating+matlab+mel+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+pascaligo+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plsql+powerquery+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+purebasic+python+q+qml+qore+r+racket+jsx+tsx+reason+regex+renpy+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+stan+iecst+stylus+swift+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+turtle+twig+typescript+typoscript+unrealscript+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+wiki+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-numbers+toolbar+copy-to-clipboard+filter-highlight-all */\n/**\n * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML\n * Based on https://github.com/chriskempson/tomorrow-theme\n * @author Rose Pritchard\n */\n\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n\t color: #ccc;\n\t background: none;\n\t font-family: \"YaHei Consolas Hybrid\", JetBrains Mono NL, Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\t font-size: 1em;\n\t text-align: left;\n\t white-space: pre;\n\t word-spacing: normal;\n\t word-break: normal;\n\t word-wrap: normal;\n\t line-height: 1.5;\n\t border-radius: .3em;\n\t -moz-tab-size: 4;\n\t -o-tab-size: 4;\n\t tab-size: 4;\n \n\t -webkit-hyphens: none;\n\t -moz-hyphens: none;\n\t -ms-hyphens: none;\n\t hyphens: none;\n \n }\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n\t padding: .4em;\n\t margin: .5em 0;\n\t overflow: auto;\n }\n \n :not(pre) > code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n\t background: #2d2d2d;\n }\n \n /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n\t padding: .1em;\n\t border-radius: .3em;\n\t white-space: normal;\n }\n \n .token.comment,\n .token.block-comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n\t color: #999;\n }\n \n .token.punctuation {\n\t color: #ccc;\n }\n \n .token.tag,\n .token.attr-name,\n .token.namespace,\n .token.deleted {\n\t color: #e2777a;\n }\n \n .token.function-name {\n\t color: #6196cc;\n }\n \n .token.boolean,\n .token.number,\n .token.function {\n\t color: #f08d49;\n }\n \n .token.property,\n .token.class-name,\n .token.constant,\n .token.symbol {\n\t color: #f8c555;\n }\n \n .token.selector,\n .token.important,\n .token.atrule,\n .token.keyword,\n .token.builtin {\n\t color: #cc99cd;\n }\n \n .token.string,\n .token.char,\n .token.attr-value,\n .token.regex,\n .token.variable {\n\t color: #7ec699;\n }\n \n .token.operator,\n .token.entity,\n .token.url {\n\t color: #67cdcc;\n }\n \n .token.important,\n .token.bold {\n\t font-weight: bold;\n }\n .token.italic {\n\t font-style: italic;\n }\n \n .token.entity {\n\t cursor: help;\n }\n \n .token.inserted {\n\t color: green;\n }\n \n pre[class*=\"language-\"].line-numbers {\n\t position: relative;\n\t padding-left: 3.8em;\n\t counter-reset: linenumber;\n }\n \n pre[class*=\"language-\"].line-numbers > code {\n\t position: relative;\n\t white-space: inherit;\n }\n \n .line-numbers .line-numbers-rows {\n\t position: absolute;\n\t pointer-events: none;\n\t top: 0;\n\t font-size: 100%;\n\t left: -3.8em;\n\t width: 3em; /* works for line-numbers below 1000 lines */\n\t letter-spacing: -1px;\n\t border-right: 1px solid #999;\n \n\t -webkit-user-select: none;\n\t -moz-user-select: none;\n\t -ms-user-select: none;\n\t user-select: none;\n \n }\n \n\t .line-numbers-rows > span {\n\t\t display: block;\n\t\t counter-increment: linenumber;\n\t }\n \n\t\t .line-numbers-rows > span:before {\n\t\t\t content: counter(linenumber);\n\t\t\t color: #999;\n\t\t\t display: block;\n\t\t\t padding-right: 0.8em;\n\t\t\t text-align: right;\n\t\t }\n \n div.code-toolbar {\n\t position: relative;\n }\n \n div.code-toolbar > .toolbar {\n\t position: absolute;\n\t top: .3em;\n\t right: .2em;\n\t transition: opacity 0.3s ease-in-out;\n\t opacity: 0;\n }\n \n div.code-toolbar:hover > .toolbar {\n\t opacity: 1;\n }\n \n /* Separate line b/c rules are thrown out if selector is invalid.\n\tIE11 and old Edge versions don't support :focus-within. */\n div.code-toolbar:focus-within > .toolbar {\n\t opacity: 1;\n }\n \n div.code-toolbar > .toolbar .toolbar-item {\n\t display: inline-block;\n }\n \n div.code-toolbar > .toolbar a {\n\t cursor: pointer;\n }\n \n div.code-toolbar > .toolbar button {\n\t background: none;\n\t border: 0;\n\t color: inherit;\n\t font: inherit;\n\t line-height: normal;\n\t overflow: visible;\n\t padding: 0;\n\t -webkit-user-select: none; /* for button */\n\t -moz-user-select: none;\n\t -ms-user-select: none;\n }\n \n div.code-toolbar > .toolbar a,\n div.code-toolbar > .toolbar button,\n div.code-toolbar > .toolbar span {\n\t color: #bbb;\n\t font-size: .8em;\n\t padding: 0 .5em;\n\t background: #f5f2f0;\n\t background: rgba(224, 224, 224, 0.2);\n\t box-shadow: 0 2px 0 0 rgba(66, 185, 131, .1);;\n\t border-radius: .5em;\n }\n \n div.code-toolbar > .toolbar a:hover,\n div.code-toolbar > .toolbar a:focus,\n div.code-toolbar > .toolbar button:hover,\n div.code-toolbar > .toolbar button:focus,\n div.code-toolbar > .toolbar span:hover,\n div.code-toolbar > .toolbar span:focus {\n\t color: #ffffff;\n\t text-decoration: none;\n }\n \n "
  },
  {
    "path": "src/data/extra/themes/vx-idea/code_highlight/highlight-one-light.css",
    "content": "\n/**\n * One Light theme for prism.js\n * Based on Atom's One Light theme: https://github.com/atom/atom/tree/master/packages/one-light-syntax\n */\n\n/**\n * One Light colours in terms of RGB (accurate as of commit eb064bf on 19 Feb 2021)\n * @mono-1: #383a42\n * @mono-2: #696c77\n * @mono-3: #a0a1a7\n * @hue-1: #0184bc <- cyan\n * @hue-2: #4078f2 <- blue\n * @hue-3: #a626a4 <- purple\n * @hue-4: #16a085 <- green\n * @hue-5: #e45649 <- red 1\n * @hue-5-2: #ca1243 <- red 2\n * @hue-6: #b76b01 <- orange 1\n * @hue-6-2: #cb7701 <- orange 2\n * @syntax-fg: #383a42\n * @syntax-bg: #f4f7f9\n * @syntax-gutter: #9d9d9f\n * @syntax-guide: #383a4233\n * @syntax-accent: #526eff\n */\n\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n\t background: #f4f7f9;\n\t color: #383a42;\n\t font-family: \"YaHei Consolas Hybrid\", JetBrains Mono NL, Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\t direction: ltr;\n\t text-align: left;\n\t white-space: pre;\n\t word-spacing: normal;\n\t word-break: normal;\n\t line-height: 1.5;\n \n\t -moz-tab-size: 2;\n\t -o-tab-size: 2;\n\t tab-size: 2;\n \n\t -webkit-hyphens: none;\n\t -moz-hyphens: none;\n\t -ms-hyphens: none;\n\t hyphens: none;\n }\n\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n\t padding: 1em;\n\t margin: 0.5em 0;\n\t overflow: auto;\n\t border-radius: 0.3em;\n }\n \n /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n\t padding: 0.2em 0.3em;\n\t border-radius: 0.3em;\n\t white-space: normal;\n }\n \n .token.comment,\n .token.prolog,\n .token.cdata {\n\t color: #00804e;\n }\n \n .token.doctype,\n .token.punctuation,\n .token.entity {\n\t color: #383a42;\n }\n \n .token.attr-name,\n .token.class-name,\n .token.boolean,\n .token.constant,\n .token.number,\n .token.atrule {\n\t color: #b76b01;\n }\n \n .token.keyword {\n\t color: #a626a4;\n }\n \n .token.property,\n .token.tag,\n .token.symbol,\n .token.deleted,\n .token.important {\n\t color: #e45649;\n }\n \n .token.selector,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted,\n .token.regex,\n .token.attr-value,\n .token.attr-value > .token.punctuation {\n\t color: #16a085;\n }\n \n .token.variable,\n .token.operator,\n .token.function {\n\t color: #4078f2;\n }\n \n .token.url {\n\t color: #0184bc;\n\t text-decoration: underline;\n }\n \n /* HTML overrides */\n .token.attr-value > .token.punctuation.attr-equals,\n .token.special-attr > .token.attr-value > .token.value.css {\n\t color: #383a42;\n }\n \n /* CSS overrides */\n .language-css .token.selector {\n\t color: #e45649;\n }\n \n .language-css .token.property {\n\t color: #383a42;\n }\n \n .language-css .token.url {\n\t text-decoration: none;\n }\n \n .language-css .token.function,\n .language-css .token.url > .token.function {\n\t color: #0184bc;\n }\n \n .language-css .token.url > .token.string.url {\n\t color: #16a085;\n }\n \n .language-css .token.important,\n .language-css .token.atrule .token.rule {\n\t color: #a626a4;\n }\n \n /* JS overrides */\n .language-javascript .token.operator {\n\t color: #a626a4;\n }\n \n .language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation {\n\t color: #ca1243;\n }\n \n /* JSON overrides */\n .language-json .token.operator {\n\t color: #383a42;\n }\n \n .language-json .token.null.keyword {\n\t color: #b76b01;\n }\n \n /* MD overrides */\n .language-markdown .token.url,\n .language-markdown .token.url > .token.operator,\n .language-markdown .token.url-reference.url > .token.string {\n\t color: #383a42;\n\t text-decoration: none;\n }\n \n .language-markdown .token.url > .token.content {\n\t color: #4078f2;\n\t text-decoration: none;\n }\n \n .language-markdown .token.url > .token.url,\n .language-markdown .token.url-reference.url {\n\t color: #0184bc;\n\t text-decoration: underline;\n }\n \n .language-markdown .token.blockquote.punctuation,\n .language-markdown .token.hr.punctuation {\n\t color: #a0a1a7;\n\t font-style: italic;\n }\n \n .language-markdown .token.code-snippet {\n\t color: #16a085;\n }\n \n .language-markdown .token.bold .token.content {\n\t color: #b76b01;\n }\n \n .language-markdown .token.italic .token.content {\n\t color: #a626a4;\n }\n \n .language-markdown .token.strike .token.content,\n .language-markdown .token.strike .token.punctuation,\n .language-markdown .token.list.punctuation,\n .language-markdown .token.title.important > .token.punctuation {\n\t color: #e45649;\n }\n \n /* General */\n .token.bold {\n\t font-weight: bold;\n }\n \n /* .token.comment, */\n .token.italic {\n\t font-style: italic;\n }\n \n .token.entity {\n\t cursor: help;\n }\n \n .token.namespace {\n\t opacity: 0.8;\n }\n \n div.code-toolbar {\n\t position: relative;\n }\n \n div.code-toolbar > .toolbar {\n\t position: absolute;\n\t top: .3em;\n\t right: .2em;\n\t transition: opacity 0.3s ease-in-out;\n\t opacity: 0;\n }\n \n div.code-toolbar:hover > .toolbar {\n\t opacity: 1;\n }\n \n /* Separate line b/c rules are thrown out if selector is invalid.\n\tIE11 and old Edge versions don't support :focus-within. */\n div.code-toolbar:focus-within > .toolbar {\n\t opacity: 1;\n }\n \n div.code-toolbar > .toolbar .toolbar-item {\n\t display: inline-block;\n }\n \n div.code-toolbar > .toolbar a {\n\t cursor: pointer;\n }\n \n div.code-toolbar > .toolbar button {\n\t background: none;\n\t border: 0;\n\t color: inherit;\n\t font: inherit;\n\t line-height: normal;\n\t overflow: visible;\n\t padding: 0;\n\t -webkit-user-select: none; /* for button */\n\t -moz-user-select: none;\n\t -ms-user-select: none;\n }\n \n div.code-toolbar > .toolbar a,\n div.code-toolbar > .toolbar button,\n div.code-toolbar > .toolbar span {\n\t color: #757F9A;\n\t font-size: .8em;\n\t padding: 0 .5em;\n\t background: #D7DDE8;\n\t box-shadow: 0 2px 0 0 rgba(58, 91, 134, 0.1);\n\t border-radius: .5em;\n }\n \n div.code-toolbar > .toolbar a:hover,\n div.code-toolbar > .toolbar a:focus,\n div.code-toolbar > .toolbar button:hover,\n div.code-toolbar > .toolbar button:focus,\n div.code-toolbar > .toolbar span:hover,\n div.code-toolbar > .toolbar span:focus {\n\t color: #757F9A;\n\t text-decoration: none;\n }\n \n "
  },
  {
    "path": "src/data/extra/themes/vx-idea/highlight.css",
    "content": "\n/**\n * One Light theme for prism.js\n * Based on Atom's One Light theme: https://github.com/atom/atom/tree/master/packages/one-light-syntax\n */\n\n/**\n * One Light colours in terms of RGB (accurate as of commit eb064bf on 19 Feb 2021)\n * @mono-1: #383a42\n * @mono-2: #696c77\n * @mono-3: #a0a1a7\n * @hue-1: #0184bc <- cyan\n * @hue-2: #4078f2 <- blue\n * @hue-3: #a626a4 <- purple\n * @hue-4: #16a085 <- green\n * @hue-5: #e45649 <- red 1\n * @hue-5-2: #ca1243 <- red 2\n * @hue-6: #b76b01 <- orange 1\n * @hue-6-2: #cb7701 <- orange 2\n * @syntax-fg: #383a42\n * @syntax-bg: #f4f7f9\n * @syntax-gutter: #9d9d9f\n * @syntax-guide: #383a4233\n * @syntax-accent: #526eff\n */\n\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n\t background: #f4f7f9;\n\t color: #383a42;\n\t font-family: \"YaHei Consolas Hybrid\", JetBrains Mono NL, Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\t direction: ltr;\n\t text-align: left;\n\t white-space: pre;\n\t word-spacing: normal;\n\t word-break: normal;\n\t line-height: 1.5;\n \n\t -moz-tab-size: 2;\n\t -o-tab-size: 2;\n\t tab-size: 2;\n \n\t -webkit-hyphens: none;\n\t -moz-hyphens: none;\n\t -ms-hyphens: none;\n\t hyphens: none;\n }\n\n \n /* Code blocks */\n pre[class*=\"language-\"] {\n\t padding: 1em;\n\t margin: 0.5em 0;\n\t overflow: auto;\n\t border-radius: 0.3em;\n }\n \n /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n\t padding: 0.2em 0.3em;\n\t border-radius: 0.3em;\n\t white-space: normal;\n }\n \n .token.comment,\n .token.prolog,\n .token.cdata {\n\t color: #00804e;\n }\n \n .token.doctype,\n .token.punctuation,\n .token.entity {\n\t color: #383a42;\n }\n \n .token.attr-name,\n .token.class-name,\n .token.boolean,\n .token.constant,\n .token.number,\n .token.atrule {\n\t color: #b76b01;\n }\n \n .token.keyword {\n\t color: #a626a4;\n }\n \n .token.property,\n .token.tag,\n .token.symbol,\n .token.deleted,\n .token.important {\n\t color: #e45649;\n }\n \n .token.selector,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted,\n .token.regex,\n .token.attr-value,\n .token.attr-value > .token.punctuation {\n\t color: #16a085;\n }\n \n .token.variable,\n .token.operator,\n .token.function {\n\t color: #4078f2;\n }\n \n .token.url {\n\t color: #0184bc;\n\t text-decoration: underline;\n }\n \n /* HTML overrides */\n .token.attr-value > .token.punctuation.attr-equals,\n .token.special-attr > .token.attr-value > .token.value.css {\n\t color: #383a42;\n }\n \n /* CSS overrides */\n .language-css .token.selector {\n\t color: #e45649;\n }\n \n .language-css .token.property {\n\t color: #383a42;\n }\n \n .language-css .token.url {\n\t text-decoration: none;\n }\n \n .language-css .token.function,\n .language-css .token.url > .token.function {\n\t color: #0184bc;\n }\n \n .language-css .token.url > .token.string.url {\n\t color: #16a085;\n }\n \n .language-css .token.important,\n .language-css .token.atrule .token.rule {\n\t color: #a626a4;\n }\n \n /* JS overrides */\n .language-javascript .token.operator {\n\t color: #a626a4;\n }\n \n .language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation {\n\t color: #ca1243;\n }\n \n /* JSON overrides */\n .language-json .token.operator {\n\t color: #383a42;\n }\n \n .language-json .token.null.keyword {\n\t color: #b76b01;\n }\n \n /* MD overrides */\n .language-markdown .token.url,\n .language-markdown .token.url > .token.operator,\n .language-markdown .token.url-reference.url > .token.string {\n\t color: #383a42;\n\t text-decoration: none;\n }\n \n .language-markdown .token.url > .token.content {\n\t color: #4078f2;\n\t text-decoration: none;\n }\n \n .language-markdown .token.url > .token.url,\n .language-markdown .token.url-reference.url {\n\t color: #0184bc;\n\t text-decoration: underline;\n }\n \n .language-markdown .token.blockquote.punctuation,\n .language-markdown .token.hr.punctuation {\n\t color: #a0a1a7;\n\t font-style: italic;\n }\n \n .language-markdown .token.code-snippet {\n\t color: #16a085;\n }\n \n .language-markdown .token.bold .token.content {\n\t color: #b76b01;\n }\n \n .language-markdown .token.italic .token.content {\n\t color: #a626a4;\n }\n \n .language-markdown .token.strike .token.content,\n .language-markdown .token.strike .token.punctuation,\n .language-markdown .token.list.punctuation,\n .language-markdown .token.title.important > .token.punctuation {\n\t color: #e45649;\n }\n \n /* General */\n .token.bold {\n\t font-weight: bold;\n }\n \n /* .token.comment, */\n .token.italic {\n\t font-style: italic;\n }\n \n .token.entity {\n\t cursor: help;\n }\n \n .token.namespace {\n\t opacity: 0.8;\n }\n \n div.code-toolbar {\n\t position: relative;\n }\n \n div.code-toolbar > .toolbar {\n\t position: absolute;\n\t top: .3em;\n\t right: .2em;\n\t transition: opacity 0.3s ease-in-out;\n\t opacity: 0;\n }\n \n div.code-toolbar:hover > .toolbar {\n\t opacity: 1;\n }\n \n /* Separate line b/c rules are thrown out if selector is invalid.\n\tIE11 and old Edge versions don't support :focus-within. */\n div.code-toolbar:focus-within > .toolbar {\n\t opacity: 1;\n }\n \n div.code-toolbar > .toolbar .toolbar-item {\n\t display: inline-block;\n }\n \n div.code-toolbar > .toolbar a {\n\t cursor: pointer;\n }\n \n div.code-toolbar > .toolbar button {\n\t background: none;\n\t border: 0;\n\t color: inherit;\n\t font: inherit;\n\t line-height: normal;\n\t overflow: visible;\n\t padding: 0;\n\t -webkit-user-select: none; /* for button */\n\t -moz-user-select: none;\n\t -ms-user-select: none;\n }\n \n div.code-toolbar > .toolbar a,\n div.code-toolbar > .toolbar button,\n div.code-toolbar > .toolbar span {\n\t color: #757F9A;\n\t font-size: .8em;\n\t padding: 0 .5em;\n\t background: #D7DDE8;\n\t box-shadow: 0 2px 0 0 rgba(58, 91, 134, 0.1);\n\t border-radius: .5em;\n }\n \n div.code-toolbar > .toolbar a:hover,\n div.code-toolbar > .toolbar a:focus,\n div.code-toolbar > .toolbar button:hover,\n div.code-toolbar > .toolbar button:focus,\n div.code-toolbar > .toolbar span:hover,\n div.code-toolbar > .toolbar span:focus {\n\t color: #757F9A;\n\t text-decoration: none;\n }\n \n "
  },
  {
    "path": "src/data/extra/themes/vx-idea/interface.qss",
    "content": "/* Qt Style Sheets file\n * Please refer to https://doc.qt.io/qt-5.12/stylesheet-reference.html\n * for detailed inforamtion.\n * **Notice** that selectors using base class and child class are considered to have the\n * same specificity and the rule that appears last takes precedence.\n * VNote specific syntax:\n *  - @widgets#toolbox#title#border: reference to a color defined in palette.ini;\n */\n\nQWidget {\n    color: @widgets#qwidget#fg;\n    background-color: @widgets#qwidget#bg;\n    font-family: \"冬青黑体\", \"YaHei Consolas Hybrid\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", \"Dengxian\", \"等线体\", \"STXihei\", \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", \"NSimSun\", \"新宋体\", \"SimSun\", \"宋体\", \"Helvetica\", \"sans-serif\", \"Tahoma\", \"Arial\", \"Verdana\", \"Geneva\", \"Georgia\", \"Times New Roman\";\n}\n\nQWidget[DialogCentralWidget=\"true\"] {\n    border: none;\n}\n\nQWidget[HitSettingWidget=\"true\"] {\n    border: 2px solid @widgets#qwidget#info#border;\n}\n\n/* All widgets */\n*[State=\"info\"] {\n    border: 1px solid @widgets#qwidget#info#border;\n}\n\n*[State=\"warning\"] {\n    border: 1px solid @widgets#qwidget#warning#border;\n}\n\n*[State=\"error\"] {\n    border: 1px solid @widgets#qwidget#error#border;\n}\n\n/* QAbstractScrollArea */\nQAbstractScrollArea {\n    border: 1px solid @widgets#qabstractscrollarea#border;\n}\n\nQAbstractScrollArea::corner {\n    background-color: @widgets#qabstractscrollarea#corner#bg;\n    border: none;\n}\n\nvnotex--SearchPanel QAbstractScrollArea {\n    border: none;\n}\n\n/* ToolBox */\nvnotex--ToolBox QWidget[ToolBoxTitle=\"true\"] {\n    border-bottom: 2px solid @widgets#toolbox#title#border;\n    margin: 0px;\n    padding: 0px;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"] {\n    padding: 4px 10px 4px 4px;\n    margin: 0px;\n    border: none;\n}\n\nvnotex--ToolBox QToolButton[ToolBoxTitleButton=\"true\"]:checked {\n    font-weight: bold;\n    /* Reverse */\n    color: @widgets#toolbox#title#button#active#fg;\n    background-color: @widgets#toolbox#title#button#active#bg;\n}\n\n/* TitleBar */\n/* The height should be large enough regarding to the action buttons. */\nvnotex--TitleBar QLabel[TitleBarTitle=\"true\"] {\n    padding: 5px 1px;\n    margin: 0px;\n}\n\n/* QDockWidget */\nQDockWidget[MainWindowSideBar=\"true\"] QWidget {\n    background-color: @widgets#mainwindow#side_bar#widget#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:hover {\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQDockWidget[MainWindowSideBar=\"true\"] QToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\nQDockWidget {\n    color: @widgets#qdockwidget#fg;\n    background-color: @widgets#qdockwidget#bg;\n    titlebar-close-icon: url(close.svg);\n    titlebar-normal-icon: url(float.svg);\n}\n\nQDockWidget::Title {\n    background-color: @widgets#qdockwidget#title#bg;\n    text-align: center left;\n}\n\nQDockWidget::close-button, QDockWidget::float-button {\n    border: none;\n    icon-size: 16px;\n    width: 16px;\n}\n\nQDockWidget::close-button:hover, QDockWidget::float-button:hover {\n    background-color: @widgets#qdockwidget#title#button#hover#bg;\n}\n\nQDockWidget::close-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 0px; bottom: 0px;\n}\n\nQDockWidget::float-button {\n    subcontrol-position: top right;\n    subcontrol-origin: margin;\n    position: absolute;\n    top: 0px; right: 18px; bottom: 0px;\n}\n\n\nQToolTip\n{\n    border: none;\n    color: @widgets#qtooltip#fg;\n    background-color: @widgets#qtooltip#bg;\n}\n\n/* QMainWindow */\nQMainWindow {\n    color: @widgets#qmainwindow#fg;\n    background-color: @widgets#qmainwindow#bg;\n}\n\nQMainWindow::separator {\n    /* For vertical */\n    width: 1px;\n    /* For horizontal */\n    height: 1px;\n    background-color: @widgets#qmainwindow#separator#bg;\n}\n\n/* QToolBar */\nQToolBar {\n    border: none;\n    background-color: @widgets#qtoolbar#bg;\n}\n\nQToolBar::separator {\n    width: 1px;\n    height: 1px;\n    border: none;\n    background-color: @widgets#qtoolbar#separator#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button {\n    qproperty-icon: url(expand_toolbar.svg);\n    background-color: @widgets#qtoolbutton#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:hover {\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolBarExtension#qt_toolbar_ext_button:pressed {\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* QToolButton */\n/* Only for MenuButtonPopup */\nQToolButton[popupMode=\"1\"] {\n    /* Make way for the popup button */\n    padding-right: 16px; /* make way for the popup button */\n}\n\n/* Must put after popupMode related styles */\nQToolButton[ActionToolButton=\"true\"] {\n    border: none;\n}\n\nQToolButton[ActionToolButton=\"true\"]::menu-indicator {\n    image: none;\n}\n\nQToolButton[NoMenuIndicator=\"true\"]::menu-indicator {\n    image: none;\n}\n\n/* QPushButton, QToolButton */\nQToolButton {\n    border: none;\n    color: @widgets#qtoolbutton#fg;\n    background-color: @widgets#qtoolbutton#bg;\n    margin: 1px 3px 1px 3px;\n    padding: 0px;\n}\n\nQToolButton:checked {\n    color: @widgets#qtoolbutton#checked#fg;\n    background-color: @widgets#qtoolbutton#checked#bg;\n}\n\nQToolButton:hover {\n    border:none;\n    color: @widgets#qtoolbutton#hover#fg;\n    background-color: @widgets#qtoolbutton#hover#bg;\n}\n\nQToolButton:pressed {\n    color: @widgets#qtoolbutton#pressed#fg;\n    background-color: @widgets#qtoolbutton#pressed#bg;\n}\n\n/* the subcontrols below are used only in the MenuButtonPopup mode */\nQToolButton::menu-button {\n    border: none;\n    width: 16px;\n}\n\nQToolButton::menu-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\nQPushButton[DangerButton=\"true\"]:hover, QToolButton[DangerButton=\"true\"]:hover {\n    color: @widgets#qwidget#danger#fg;\n    background-color: @widgets#qwidget#danger#bg;\n    border: none;\n}\n\n/* QPushButton */\nQPushButton {\n    color: @widgets#qpushbutton#fg;\n    background-color: @widgets#qpushbutton#bg;\n    border: 1px solid @widgets#qpushbutton#border;\n    padding: 3px;\n    min-width: 80px;\n}\n\nQPushButton:default {\n    border: 1px solid @widgets#qpushbutton#default#border;\n}\n\nQPushButton:focus {\n    color: @widgets#qpushbutton#focus#fg;\n    background-color: @widgets#qpushbutton#focus#bg;\n}\n\nQPushButton:checked {\n    color: @widgets#qpushbutton#checked#fg;\n    background-color: @widgets#qpushbutton#checked#bg;\n}\n\nQPushButton:flat {\n    border: none;\n}\n\nQPushButton:hover {\n    color: @widgets#qpushbutton#hover#fg;\n    background-color: @widgets#qpushbutton#hover#bg;\n}\n\nQPushButton:pressed {\n    color: @widgets#qpushbutton#pressed#fg;\n    background-color: @widgets#qpushbutton#pressed#bg;\n}\n\nQPushButton:disabled {\n    color: @widgets#qpushbutton#disabled#fg;\n    background-color: @widgets#qpushbutton#disabled#bg;\n}\n\nQPushButton::menu-indicator {\n    image: url(arrow_dropdown.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* QMenu */\nQMenu {\n    color: @widgets#qmenu#fg;\n    background-color: @widgets#qmenu#bg;\n    border: 2px solid @widgets#qmenu#border;\n}\n\nQMenu::icon {\n    margin: 5px;\n}\n\nQMenu::item {\n    padding: 5px 30px 5px 30px;\n    border: 1px solid transparent;\n}\n\nQMenu::item:selected {\n    color: @widgets#qmenu#item#selected#fg;\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nQMenu::item:disabled {\n    color: @widgets#qmenu#item#disabled#fg;\n}\n\nQMenu::icon:checked { /* appearance of a 'checked' icon */\n    border: 2px solid @widgets#qmenu#fg;\n}\n\nQMenu::separator {\n    height: 1px;\n    background-color: @widgets#qmenu#separator#bg;\n    margin-left: 10px;\n    margin-right: 5px;\n}\n\nQMenu::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQMenu::indicator:non-exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:non-exclusive:checked {\n    image: url(menu_checkbox.svg);\n}\n\nQMenu::indicator:exclusive:unchecked {\n    image: none;\n}\n\nQMenu::indicator:exclusive:checked {\n    image: url(menu_radiobutton.svg);\n}\n\n/* QWidgetAction item */\nvnotex--LabelWithButtonsWidget {\n    background-color: @widgets#qmenu#bg;\n}\n\nvnotex--LabelWithButtonsWidget:hover {\n    background-color: @widgets#qmenu#item#selected#bg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel {\n    color: @widgets#qmenu#fg;\n}\n\nvnotex--LabelWithButtonsWidget QLabel:hover {\n    color: @widgets#qmenu#item#selected#fg;\n}\n/* End QMenu */\n\nQDialog {\n    color: @widgets#qdialog#fg;\n    background-color: @widgets#qdialog#bg\n}\n\n/* DrapDropAreaIndicator */\nvnotex--DragDropAreaIndicator {\n    border: 2px dashed @widgets#dragdropareaindicator#border;\n    margin: 2px;\n    max-height: 200px;\n}\n\n/* QComboBox */\nQComboBox {\n    padding: 3px;\n    color: @widgets#qcombobox#fg;\n    background-color: @widgets#qcombobox#bg;\n    border: 1px solid @widgets#qcombobox#border;\n}\n\nQComboBox:focus, QComboBox:on {\n    background-color: @widgets#qcombobox#focus#bg;\n    border: 2px solid @widgets#qcombobox#focus#border;\n}\n\nQComboBox:hover {\n    background-color: @widgets#qcombobox#hover#bg;\n    border: 2px solid @widgets#qcombobox#hover#border;\n}\n\nQComboBox:disabled {\n    color: @widgets#qcombobox#disabled#fg;\n}\n\nQComboBox::drop-down {\n    subcontrol-origin: padding;\n    subcontrol-position: top right;\n    width: 20px;\n    border: none;\n    background-color: transparent;\n}\n\nQComboBox::down-arrow {\n    image: url(arrow_dropdown.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox::down-arrow:disabled {\n    image: url(arrow_dropdown_disabled.svg);\n    width: 20px;\n    height: 20px;\n}\n\nQComboBox QAbstractItemView {\n    padding: 2px;\n    border: 1px solid @widgets#qcombobox#view#border;\n    background-color: @widgets#qcombobox#view#bg;\n    selection-color: @widgets#qcombobox#view#selection#fg;\n    selection-background-color: @widgets#qcombobox#view#selection#bg;\n}\n\nQComboBox QAbstractItemView::item {\n    background-color: transparent;\n    padding: 3px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n    color: @widgets#qcombobox#item#hover#fg;\n    background-color: @widgets#qcombobox#item#hover#bg;\n}\n\n/* NotebookSelector */\nvnotex--NotebookSelector {\n    icon-size: 20px;\n}\n\n/* QLabel */\nQLabel {\n    border: none;\n    color: @widgets#qlabel#fg;\n    background-color: transparent;\n}\n\nvnotex--DragDropAreaIndicator QLabel {\n    color: @widgets#dragdropareaindicator#fg;\n    font-size: 12pt;\n    font-weight: bold;\n}\n\nvnotex--MainWindow QLabel#MainWindowTipsLabel {\n    font-size: 20pt;\n    font-weight: bold;\n    color: @widgets#mainwindow#tips_label#fg;\n    background-color: @widgets#mainwindow#tips_label#bg;\n}\n\n/* QLineEdit */\nQLineEdit[EmbeddedLineEdit=\"true\"] {\n    border: none;\n    padding: 0px;\n    margin: 0px;\n    color: @widgets#qlineedit#fg;\n    background-color: transparent;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:focus {\n    border: none;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit[EmbeddedLineEdit=\"true\"]:hover {\n    border: none;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit {\n    border: 1px solid @widgets#qlineedit#border;\n    padding: 3px;\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\nQLineEdit:focus {\n    border: 2px solid @widgets#qlineedit#focus#border;\n    background-color: @widgets#qlineedit#focus#bg;\n}\n\nQLineEdit:hover {\n    border: 2px solid @widgets#qlineedit#hover#border;\n    background-color: @widgets#qlineedit#hover#bg;\n}\n\nQLineEdit:disabled {\n    color: @widgets#qlineedit#disabled#fg;\n}\n\n/* QPlainTextEdit and QTextEdit */\nQPlainTextEdit, QTextEdit {\n    color: @widgets#qlineedit#fg;\n    background-color: @widgets#qlineedit#bg;\n    selection-color: @widgets#qlineedit#selection#fg;\n    selection-background-color: @widgets#qlineedit#selection#bg;\n}\n\n/* QTabWidget */\nQTabWidget {\n    border: none;\n}\n\nQTabWidget::pane {\n    border: none;\n}\n\nQTabWidget::tab-bar {\n    alignment: left;\n}\n\n/* QTabBar */\nQTabBar[MainWindowSideBar=\"true\"] {\n    background-color: @widgets#mainwindow#side_bar#bg;\n}\n\nQTabBar[MainWindowSideBar=\"true\"]::tab {\n    color: @widgets#mainwindow#side_bar#fg;\n    background-color: @widgets#mainwindow#side_bar#bg;\n    border: none;\n}\n\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 8px 8px -8px 8px;\n}\n\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -8px 8px 8px 8px;\n}\n\n/* Only the left one is the mainwindow side bar */\nQMainWindow > QTabBar::tab:left:hover {\n    color: @widgets#mainwindow#side_bar#hover#fg;\n    background-color: @widgets#mainwindow#side_bar#hover#bg;\n}\n\nQMainWindow > QTabBar::tab:left:selected {\n    color: @widgets#mainwindow#side_bar#selected#fg;\n    background-color: @widgets#mainwindow#side_bar#selected#bg;\n}\n\nQTabBar {\n    border: none;\n}\n\nQTabBar::tab {\n    color: @widgets#qtabbar#tab#fg;\n    background-color: @widgets#qtabbar#tab#bg;\n    border: none;\n}\n\nQTabBar::tab:top, QTabBar::tab:bottom {\n    border-top: 2px solid transparent;\n    border-right: 1px solid @widgets#qtabbar#tab#border;\n    /* MUST leave right and left padding 0px. */\n    padding: 2px 0px 2px 0px;\n    height: 20px;\n}\n\nQTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\nQTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: 1px solid @widgets#qtabbar#tab#border;\n    padding: 5px 2px 5px 2px;\n    min-width: 20px;\n}\n\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:right {\n    border-right: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: 6px 2px -10px 2px;\n}\n\n/* Tabified QDockWidget */\nQMainWindow > QTabBar::tab:left {\n    border-left: 3px solid transparent;\n    border-bottom: none;\n    margin: 0px;\n    padding: -10px 2px 6px 2px;\n}\n\nQTabBar::tab:hover {\n    color: @widgets#qtabbar#tab#hover#fg;\n    background-color: @widgets#qtabbar#tab#hover#bg;\n}\n\nQTabBar::tab:selected {\n    color: @widgets#qtabbar#tab#selected#fg;\n    background-color: @widgets#qtabbar#tab#selected#bg;\n}\n\nQTabBar::tab:top:selected, QTabBar::tab:bottom:selected {\n    border-top: 2px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:right:selected {\n    border-right: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::tab:left:selected {\n    border-left: 3px solid @widgets#qtabbar#tab#selected#border;\n}\n\nQTabBar::close-button {\n    image: url(close_grey.svg);\n}\n\nQTabBar::close-button:focus {\n    image: url(close.svg);\n}\n\nQTabBar::close-button:hover {\n    image: url(close.svg);\n}\n\nQTabBar::scroller {\n    width: 20px;\n}\n\nQTabBar QToolButton {\n    border: none;\n}\n\nQTabBar QToolButton::right-arrow:enabled {\n    image: url(right.svg);\n}\n\nQTabBar QToolButton::left-arrow:enabled {\n    image: url(left.svg);\n}\n\nQTabBar QToolButton::right-arrow:disabled {\n    image: url(right_disabled.svg);\n}\n\nQTabBar QToolButton::left-arrow:disabled {\n    image: url(left_disabled.svg);\n}\n\n/* QTreeView */\nQTreeView {\n    color: @widgets#qtreeview#fg;\n    background-color: @widgets#qtreeview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQTreeView::item {\n    padding-top: 5px;\n    padding-bottom: 5px;\n}\n\nQTreeView::item:hover {\n    color: @widgets#qtreeview#item#hover#fg;\n    background-color: @widgets#qtreeview#item#hover#bg;\n}\n\nQTreeView::item:selected {\n    color: @widgets#qtreeview#item#selected#fg;\n    background-color: @widgets#qtreeview#item#selected#bg;\n}\n\nQTreeView::item:selected:active {\n    color: @widgets#qtreeview#item#selected#active#fg;\n    background-color: @widgets#qtreeview#item#selected#active#bg;\n}\n\nQTreeView::item:selected:!active {\n    color: @widgets#qtreeview#item#selected#inactive#fg;\n    background-color: @widgets#qtreeview#item#selected#inactive#bg;\n}\n\nQTreeView::branch:has-siblings:!adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:!has-children:!has-siblings:adjoins-item {\n    border-image: none;\n}\n\nQTreeView::branch:has-children:!has-siblings:closed,\nQTreeView::branch:closed:has-children:has-siblings {\n    border-image: none;\n    image: url(branch_closed.svg);\n}\n\nQTreeView::branch:open:has-children:!has-siblings,\nQTreeView::branch:open:has-children:has-siblings  {\n    border-image: none;\n    image: url(branch_open.svg);\n}\n\n/* QListView */\nQListView {\n    color: @widgets#qlistview#fg;\n    background-color: @widgets#qlistview#bg;\n    show-decoration-selected: 0;\n    border: none;\n    selection-background-color: transparent;\n    outline: none;\n}\n\nQListView::item {\n    padding-top: 5px;\n    padding-bottom: 5px;\n}\n\nQListView::item:hover {\n    color: @widgets#qlistview#item#hover#fg;\n    background-color: @widgets#qlistview#item#hover#bg;\n}\n\nQListView::item:selected {\n    color: @widgets#qlistview#item#selected#fg;\n    background-color: @widgets#qlistview#item#selected#bg;\n}\n\nQListView::item:selected:active {\n    color: @widgets#qlistview#item#selected#active#fg;\n    background-color: @widgets#qlistview#item#selected#active#bg;\n}\n\nQListView::item:selected:!active {\n    color: @widgets#qlistview#item#selected#inactive#fg;\n    background-color: @widgets#qlistview#item#selected#inactive#bg;\n}\n\nQListView::item:disabled {\n    background-color: transparent;\n}\n\n/* QSplitter */\nQSplitter {\n    border: none;\n}\n\nQSplitter::handle {\n    background-color: @widgets#qsplitter#handle#bg;\n}\n\nQSplitter::handle:pressed {\n    background-color: @widgets#qsplitter#handle#pressed#bg;\n}\n\nQSplitter::handle:vertical {\n    height: 2px;\n}\n\nQSplitter::handle:horizontal {\n    width: 2px;\n}\n\n/* QStatusBar */\nQStatusBar {\n    color: @widgets#qstatusbar#fg;\n    background-color: @widgets#qstatusbar#bg;\n    border: none;\n}\n\nQStatusBar::item {\n    border: none;\n}\n\n/* QScrollBar */\nQScrollBar::add-page, QScrollBar::sub-page {\n    background-color: @widgets#qscrollbar#addpage#bg;\n}\n\nQScrollBar:vertical {\n    background-color: @widgets#qscrollbar#bg;\n    width: 14px;\n    margin: 14px 0px 14px 0px;\n    padding: 0px 2px 0px 2px;\n    border: none;\n}\n\nQScrollBar::handle:vertical {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 14px;\n    border-radius:4px;\n}\n\nQScrollBar::handle:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n    border-radius:4px;\n}\n\nQScrollBar::handle:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 14px;\n    height: 14px;\n    subcontrol-position: bottom;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:vertical {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 14px;\n    height: 14px;\n    subcontrol-position: top;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:vertical:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:vertical:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::down-arrow:vertical {\n    image: url(down.svg);\n    width: 14px;\n    height: 14px;\n}\n\nQScrollBar::up-arrow:vertical {\n    image: url(up.svg);\n    width: 14px;\n    height: 14px;\n}\n\nQScrollBar:horizontal {\n    background-color: @widgets#qscrollbar#bg;\n    height: 14px;\n    margin: 0px 14px 0px 14px;\n    padding: 2px 0px 2px 0px;\n    border: none;\n}\n\nQScrollBar::handle:horizontal {\n    background-color: @widgets#qscrollbar#handle#bg;\n    min-height: 14px;\n    border-radius:4px;\n}\n\nQScrollBar::handle:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n    border-radius:4px;\n}\n\nQScrollBar::handle:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::add-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 14px;\n    height: 14px;\n    subcontrol-position: right;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::add-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::add-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::sub-line:horizontal {\n    border: none;\n    background-color: @widgets#qscrollbar#bg;\n    width: 14px;\n    height: 14px;\n    subcontrol-position: left;\n    subcontrol-origin: margin;\n}\n\nQScrollBar::sub-line:horizontal:hover {\n    background-color: @widgets#qscrollbar#handle#hover#bg;\n}\n\nQScrollBar::sub-line:horizontal:pressed {\n    background-color: @widgets#qscrollbar#handle#pressed#bg;\n}\n\nQScrollBar::right-arrow:horizontal {\n    image: url(right.svg);\n    width: 14px;\n    height: 14px;\n}\n\nQScrollBar::left-arrow:horizontal {\n    image: url(left.svg);\n    width: 14px;\n    height: 14px;\n}\n\n/* QCheckBox */\nQCheckBox {\n    spacing: 5px;\n}\n\nQCheckBox:disabled {\n    color: @widgets#qcheckbox#disabled#fg;\n}\n\nQCheckBox::indicator:unchecked {\n    image: url(checkbox_unchecked.svg);\n}\n\nQCheckBox::indicator:unchecked:disabled {\n    image: url(checkbox_unchecked_disabled.svg);\n}\n\nQCheckBox::indicator:checked {\n    image: url(checkbox_checked.svg);\n}\n\nQCheckBox::indicator:checked:disabled {\n    image: url(checkbox_checked_disabled.svg);\n}\n\nQCheckBox::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQCheckBox::indicator:focus {\n    background-color: @widgets#qcheckbox#indicator#focus#bg;\n}\n\nQCheckBox::indicator:hover {\n    background-color: @widgets#qcheckbox#indicator#hover#bg;\n}\n\nQCheckBox::indicator:pressed {\n    background-color: @widgets#qcheckbox#indicator#pressed#bg;\n}\n\n/* QRadioButton */\nQRadioButton {\n    spacing: 5px;\n}\n\nQRadioButton:disabled {\n    color: @widgets#qradiobutton#disabled#fg;\n}\n\nQRadioButton::indicator:unchecked {\n    image: url(radiobutton_unchecked.svg);\n}\n\nQRadioButton::indicator:unchecked:disabled {\n    image: url(radiobutton_unchecked_disabled.svg);\n}\n\nQRadioButton::indicator:checked {\n    image: url(radiobutton_checked.svg);\n}\n\nQRadioButton::indicator:checked:disabled {\n    image: url(radiobutton_checked_disabled.svg);\n}\n\nQRadioButton::indicator {\n    width: 20px;\n    height: 20px;\n}\n\nQRadioButton::indicator:focus {\n    background-color: @widgets#qradiobutton#indicator#focus#bg;\n}\n\nQRadioButton::indicator:hover {\n    background-color: @widgets#qradiobutton#indicator#hover#bg;\n}\n\nQRadioButton::indicator:pressed {\n    background-color: @widgets#qradiobutton#indicator#pressed#bg;\n}\n\nQAbstractSpinBox {\n    border: 1px solid @widgets#qspinbox#border;\n    color: @widgets#qspinbox#fg;\n    background-color: @widgets#qspinbox#bg;\n    padding-right: 25px;\n    min-height: 25px;\n    selection-color: @widgets#qspinbox#selection#fg;\n    selection-background-color: @widgets#qspinbox#selection#bg;\n}\n\nQAbstractSpinBox:disabled {\n    color: @widgets#qspinbox#disabled#fg;\n    background-color: @widgets#qspinbox#disabled#bg;\n}\n\nQAbstractSpinBox:focus {\n    border: 2px solid @widgets#qspinbox#focus#border;\n    background-color: @widgets#qspinbox#focus#bg;\n}\n\nQAbstractSpinBox:hover {\n    border: 2px solid @widgets#qspinbox#hover#border;\n    background-color: @widgets#qspinbox#hover#bg;\n}\n\nQAbstractSpinBox::up-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: top right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::up-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::up-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off {\n    image: url(up_disabled.svg);\n}\n\nQAbstractSpinBox::down-button {\n    subcontrol-origin: border;\n    /* Position at the top right corner */\n    subcontrol-position: bottom right;\n    width: 25px;\n    border: none;\n    background-color: transparent;\n}\n\nQAbstractSpinBox::down-button:hover {\n    background-color: @widgets#qspinbox#button#hover#bg;\n}\n\nQAbstractSpinBox::down-button:pressed {\n    background-color: @widgets#qspinbox#button#pressed#bg;\n}\n\nQAbstractSpinBox::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off {\n    image: url(down_disabled.svg);\n}\n\n/* QHeaderView */\nQHeaderView::section {\n    color: @widgets#qheaderview#section#fg;\n    background-color: @widgets#qheaderview#section#bg;\n    padding-left: 4px;\n    border: none;\n    border-left: 1px solid @widgets#qheaderview#section#border;\n    border-bottom: 1px solid @widgets#qheaderview#section#border;\n}\n\nQHeaderView::section:checked\n{\n    color: @widgets#qheaderview#section#checked#fg;\n    background-color: @widgets#qheaderview#section#checked#bg;\n}\n\n/* style the sort indicator */\nQHeaderView::down-arrow {\n    image: url(down.svg);\n    width: 12px;\n    height: 12px;\n}\n\nQHeaderView::up-arrow {\n    image: url(up.svg);\n    width: 12px;\n    height: 12px;\n}\n\n/* QProgressBar */\nQProgressBar {\n    background-color: @widgets#qprogressbar#bg;\n    border: 1px solid @widgets#qprogressbar#border;\n    text-align: center;\n}\n\nQProgressBar::chunk {\n    background-color: @widgets#qprogressbar#chunk#bg;\n    width: 20px;\n}\n\n/* QGroupBox */\nQGroupBox {\n    border: 2px solid @widgets#qgroupbox#border;\n    border-radius: 5px;\n    margin-top: 2ex;\n}\n\nQGroupBox::title {\n    color: @widgets#qgroupbox#title#fg;\n    subcontrol-origin: margin;\n    subcontrol-position: top left;\n    position: absolute;\n    padding: 0 3px;\n    top: 0px;\n    left: 10px;\n    bottom: 0px;\n}\n\n/* QSlider */\nQSlider::groove:horizontal {\n    border: 1px solid @widgets#qslider#groove#border;\n    height: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 2px 0;\n}\n\nQSlider::handle:horizontal {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    width: 18px;\n    margin: -2px 0;\n}\n\nQSlider::add-page:horizontal {\n    background-color: transparent;\n}\n\nQSlider::sub-page:horizontal {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 2px 0;\n}\n\nQSlider::groove:vertical {\n    border: 1px solid @widgets#qslider#groove#border;\n    width: 8px;\n    background-color: @widgets#qslider#groove#bg;\n    margin: 0 2px;\n}\n\nQSlider::handle:vertical {\n    border: 1px solid @widgets#qslider#handle#border;\n    background-color: @widgets#qslider#handle#bg;\n    height: 18px;\n    margin: 0 -2px;\n}\n\nQSlider::add-page:vertical {\n    background-color: transparent;\n}\n\nQSlider::sub-page:vertical {\n    border: 1px solid @widgets#qslider#subpage#border;\n    background-color: @widgets#qslider#subpage#bg;\n    margin: 0 2px;\n}\n\nQSizeGrip {\n    image: url(sizegrip.svg);\n    width: 16px;\n    height: 16px;\n}\n\n/* ViewWindow */\nvnotex--ViewWindow QToolBar[ViewWindowToolBar=\"true\"] {\n    background-color: @widgets#viewwindow#toolbar#bg;\n}\n\n/* ViewSplit */\nvnotex--ViewSplit QTabBar::tab:selected {\n    color: @widgets#viewsplit#tabbar#tab#selected#fg;\n    background-color: @widgets#viewsplit#tabbar#tab#selected#bg;\n}\n\nvnotex--ViewSplit QTabBar[ViewSplitFlash=\"true\"]::tab:selected {\n    background-color: @widgets#viewsplit#flash#bg;\n}\n\nvte--VTextEdit {\n    border: none;\n}\n\nvnotex--EntryPopup {\n    border: 1px solid @widgets#unitedentry#popup#border;\n}\n"
  },
  {
    "path": "src/data/extra/themes/vx-idea/palette.json",
    "content": "{\n    \"metadata\" : {\n        \"revision\" : 1,\n        \"//comment\" : \"If there is a file named 'editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"editor-highlight-theme\" : \"Default\",\n        \"//comment\" : \"If there is a file named 'markdown-editor-highlight.theme' under theme folder, this value will be ignored.\",\n        \"//comment\" : \"Otherwise, this value specify the theme name to use for syntax highlighting.\",\n        \"//comment\" : \"If empty, 'editor-highlight-theme' will be used.\",\n        \"markdown-editor-highlight-theme\" : \"Markdown Default\",\n        \"display_name\" : \"vx-idea\",\n        \"//comment\" : \"Display name for different locales\",\n        \"display_name_zh_CN\" : \"vx-idea\"\n    },\n    \"palette\" : {\n        \"bg3_0\" : \"#b4c0cf\",\n        \"bg3_1\" : \"#ced6e0\",\n        \"bg3_2\" : \"#b4c0cf\",\n        \"bg3_3\" : \"#cfd8e2\",\n        \"bg3_4\" : \"#dae3ea\",\n        \"bg3_41\" : \"#cfd8e2\",\n        \"bg3_5\" : \"#f1f2f6\",\n        \"bg3_6\" : \"#fafafa\",\n        \"fg3_5\" : \"#34495e\",\n        \"fg3_6\" : \"#646464\",\n        \"fg3_7\" : \"#7a7a7a\",\n        \"fg3_8\" : \"#9e9e9e\",\n        \"fg3_9\" : \"#b0b0b0\",\n        \"fg3_10\" : \"#ced4da\",\n        \"bg2_4\" : \"#007b6e\",\n        \"//comment\": \"menu highliht\",\n        \"bg2_5\" : \"#2980b9\",\n        \"bg2_6\" : \"#199488\",\n        \"bg2_7\" : \"#e5f3f1\",\n        \"fg10\" : \"#b71c1c\",\n        \"fg11\" : \"#ab5683\",\n        \"fg12\" : \"#283593\",\n        \"fg13\" : \"#b42b1f\",\n        \"fg15_3\" : \"#b0b0b0\",\n        \"fg15_4\" : \"#7a7a7a\",\n        \"fg15_5\" : \"#34495e\",\n        \"bg11\" : \"#79889e\",\n        \"layer1\" : \"#f1f2f6\",\n        \"layer2\" : \"#dae3ea\",\n        \"layer3\" : \"#c3d1e0\",\n        \"layer4\" : \"#ffffff\"\n    },\n    \"base\" : {\n        \"normal\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_5\",\n            \"border\" : \"@palette#fg3_10\"\n        },\n        \"master\" : {\n            \"fg\" : \"@palette#bg3_6\",\n            \"bg\" : \"@palette#bg2_5\",\n            \"alt\" : \"@palette#bg2_6\"\n        },\n        \"header\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"footer\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"title\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@palette#bg3_41\"\n        },\n        \"content\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_6\",\n            \"border\" : \"@base#normal#border\",\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@base#content#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#focus#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#hover#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@palette#bg3_6\",\n                \"bg\" : \"@palette#bg11\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#selected#bg\",\n                \"active\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                },\n                \"inactive\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"edit\" : {\n            \"focus\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#master#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@palette#bg2_7\",\n                \"border\" : \"@base#master#bg\"\n            }\n        },\n        \"error\" : {\n            \"fg\" : \"@palette#fg10\"\n        },\n        \"warning\" : {\n            \"fg\" : \"@palette#fg11\"\n        },\n        \"info\" : {\n            \"fg\" : \"@palette#fg12\"\n        },\n        \"danger\" : {\n            \"fg\": \"@base#normal#bg\",\n            \"bg\": \"@palette#fg13\"\n        },\n        \"disabled\" : {\n            \"fg\" : \"@palette#fg3_8\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"pressed\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_1\"\n        },\n        \"focus\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_2\"\n        },\n        \"hover\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_4\"\n        },\n        \"selected\" : {\n            \"fg\" : \"@palette#fg3_5\",\n            \"bg\" : \"@palette#bg3_3\"\n        },\n        \"icon\" : {\n            \"fg\" : \"@palette#fg15_5\",\n            \"inactive\" : {\n                \"fg\" : \"@palette#fg15_4\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@palette#fg15_3\"\n            },\n            \"warning\" : {\n                \"fg\" : \"@base#warning#fg\"\n            },\n            \"danger\" : {\n                \"fg\": \"@base#danger#fg\"\n            },\n            \"selected\" : {\n                \"fg\" : \"@base#master#bg\"\n            }\n        }\n    },\n    \"widgets\" : {\n        \"separator\" : {\n            \"bg\" : \"@base#normal#border\"\n        },\n        \"qwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"info\" : {\n                \"border\" : \"@base#info#fg\"\n            },\n            \"warning\" : {\n                \"border\" : \"@base#warning#fg\"\n            },\n            \"error\" : {\n                \"border\" : \"@base#error#fg\"\n            },\n            \"danger\" : {\n                \"fg\" : \"@base#danger#fg\",\n                \"bg\" : \"@base#danger#bg\"\n            }\n        },\n        \"toolbox\" : {\n            \"title\" : {\n                \"border\" : \"@widgets#toolbox#title#button#active#bg\",\n                \"button\": {\n                    \"fg\" : \"@base#normal#fg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#master#fg\",\n                        \"bg\" : \"@base#master#bg\"\n                    }\n                }\n            }\n        },\n        \"titlebar\" : {\n            \"button\" : {\n                \"fg\" : \"@base#icon#fg\"\n            },\n            \"menu_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                }\n            }\n        },\n        \"toolbar\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"disabled\" : {\n                    \"fg\" : \"@base#icon#disabled#fg\"\n                },\n                \"danger\" : {\n                    \"fg\" : \"@base#icon#danger#fg\"\n                }\n            }\n        },\n        \"notebookexplorer\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"invalid\" : {\n                    \"fg\" : \"@base#icon#warning#fg\"\n                }\n            },\n            \"external_node_icon\" : {\n                \"fg\" : \"@base#icon#inactive#fg\"\n            }\n        },\n        \"locationlist\" : {\n            \"node_icon\" : {\n                \"fg\" : \"@base#icon#fg\"\n            }\n        },\n        \"viewsplit\" : {\n            \"action_button\" : {\n                \"fg\" : \"@base#icon#inactive#fg\",\n                \"active\" : {\n                    \"fg\" : \"@base#icon#fg\"\n                }\n            },\n            \"tabbar\" : {\n                \"tab\" : {\n                    \"selected\" : {\n                        \"fg\" : \"@base#content#fg\",\n                        \"bg\" : \"@base#content#bg\"\n                    }\n                }\n            },\n            \"flash\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qmainwindow\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"dragdropareaindicator\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"border\" : \"@widgets#dragdropareaindicator#fg\"\n        },\n        \"navigationlabel\" : {\n            \"fg\" : \"@widgets#toolbox#title#button#active#fg\",\n            \"bg\" : \"@widgets#toolbox#title#button#active#bg\"\n        },\n        \"qmenu\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"border\" : \"@base#normal#border\",\n            \"item\" : {\n                \"selected\" : {\n                    \"fg\" : \"@base#selected#fg\",\n                    \"bg\" : \"@base#selected#bg\"\n                },\n                \"disabled\" : {\n                    \"fg\" : \"@base#disabled#fg\"\n                }\n            },\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            }\n        },\n        \"qtooltip\" : {\n            \"fg\" : \"@base#master#fg\",\n            \"bg\" : \"@base#master#bg\"\n        },\n        \"qtoolbar\" : {\n            \"bg\" : \"@base#header#bg\",\n            \"separator\" : {\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"extension\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                }\n            }\n        },\n        \"qtoolbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            }\n        },\n        \"qdockwidget\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\",\n            \"title\" : {\n                \"bg\" : \"@base#title#bg\",\n                \"button\" : {\n                    \"hover\" : {\n                        \"bg\" : \"@base#hover#bg\"\n                    }\n                }\n            }\n        },\n        \"qpushbutton\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"transparent\",\n            \"border\" : \"@base#normal#border\",\n            \"default\" : {\n                \"border\" : \"@base#master#bg\"\n            },\n            \"focus\" : {\n                \"fg\" : \"@base#focus#fg\",\n                \"bg\" : \"@base#focus#bg\"\n            },\n            \"checked\" : {\n                \"fg\" : \"@base#selected#fg\",\n                \"bg\" : \"@base#selected#bg\"\n            },\n            \"hover\" : {\n                \"fg\" : \"@base#hover#fg\",\n                \"bg\" : \"@base#hover#bg\"\n            },\n            \"pressed\" : {\n                \"fg\" : \"@base#pressed#fg\",\n                \"bg\" : \"@base#pressed#bg\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\",\n                \"bg\" : \"@widgets#qpushbutton#bg\"\n            }\n        },\n        \"qdialog\" : {\n            \"fg\" : \"@base#normal#fg\",\n            \"bg\" : \"@base#normal#bg\"\n        },\n        \"qcombobox\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"focus\" : {\n                \"bg\" : \"@base#content#focus#bg\",\n                \"border\" : \"@base#content#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#content#hover#bg\",\n                \"border\" : \"@base#content#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            },\n            \"view\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@widgets#qcombobox#bg\",\n                \"selection\" : {\n                    \"fg\" : \"@base#content#selection#fg\",\n                    \"bg\" : \"@base#content#selection#bg\"\n                }\n            },\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                }\n            }\n        },\n        \"qlabel\" : {\n            \"fg\" : \"@base#normal#fg\"\n        },\n        \"qlineedit\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#edit#focus#bg\",\n                \"border\" : \"@base#edit#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#edit#hover#bg\",\n                \"border\" : \"@base#edit#hover#border\"\n            },\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\"\n            }\n        },\n        \"qtabbar\" : {\n            \"tab\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@base#normal#bg\",\n                \"border\" : \"@base#normal#border\",\n                \"hover\" : {\n                    \"fg\" : \"@base#hover#fg\",\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#fg\",\n                    \"bg\" : \"@base#content#bg\",\n                    \"border\" : \"@base#master#bg\"\n                }\n            }\n        },\n        \"qtreeview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qlistview\" : {\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"item\" : {\n                \"hover\" : {\n                    \"fg\" : \"@base#content#hover#fg\",\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"selected\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\",\n                    \"active\" : {\n                        \"fg\" : \"@base#content#selected#active#fg\",\n                        \"bg\" : \"@base#content#selected#active#bg\"\n                    },\n                    \"inactive\" : {\n                        \"fg\" : \"@base#content#selected#inactive#fg\",\n                        \"bg\" : \"@base#content#selected#inactive#bg\"\n                    }\n                }\n            }\n        },\n        \"qsplitter\" : {\n            \"handle\" : {\n                \"bg\" : \"@base#normal#border\",\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qstatusbar\" : {\n            \"fg\" : \"@base#footer#fg\",\n            \"bg\" : \"@base#footer#bg\"\n        },\n        \"qscrollbar\" : {\n            \"bg\" : \"@base#normal#bg\",\n            \"addpage\" : {\n                \"bg\" : \"transparent\"\n            },\n            \"handle\" : {\n                \"bg\" : \"@palette#bg3_2\",\n                \"hover\" : {\n                    \"bg\" : \"@palette#bg3_1\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@palette#bg3_0\"\n                }\n            }\n        },\n        \"qcheckbox\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qradiobutton\" : {\n            \"disabled\" : {\n                \"fg\" : \"@base#disabled#fg\"\n            },\n            \"indicator\" : {\n                \"focus\" : {\n                    \"bg\" : \"@base#focus#bg\"\n                },\n                \"hover\" : {\n                    \"bg\" : \"@base#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#pressed#bg\"\n                }\n            }\n        },\n        \"qspinbox\" : {\n            \"border\" : \"@base#content#border\",\n            \"fg\" : \"@base#content#fg\",\n            \"bg\" : \"@base#content#bg\",\n            \"disabled\" : {\n                \"fg\" : \"@base#content#disabled#fg\",\n                \"bg\" : \"@base#content#disabled#bg\"\n            },\n            \"selection\" : {\n                \"fg\" : \"@base#content#selection#fg\",\n                \"bg\" : \"@base#content#selection#bg\"\n            },\n            \"focus\" : {\n                \"bg\" : \"@base#edit#focus#bg\",\n                \"border\" : \"@base#edit#focus#border\"\n            },\n            \"hover\" : {\n                \"bg\" : \"@base#edit#hover#bg\",\n                \"border\" : \"@base#edit#hover#border\"\n            },\n            \"button\" : {\n                \"hover\" : {\n                    \"bg\" : \"@base#content#hover#bg\"\n                },\n                \"pressed\" : {\n                    \"bg\" : \"@base#content#pressed#bg\"\n                }\n            }\n        },\n        \"qheaderview\" : {\n            \"section\" : {\n                \"fg\" : \"@base#content#fg\",\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\",\n                \"checked\" : {\n                    \"fg\" : \"@base#content#selected#fg\",\n                    \"bg\" : \"@base#content#selected#bg\"\n                }\n            }\n        },\n        \"qprogressbar\" : {\n            \"bg\" : \"@base#content#bg\",\n            \"border\" : \"@base#content#border\",\n            \"chunk\" : {\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"qgroupbox\" : {\n            \"border\" : \"@base#normal#border\",\n            \"title\" : {\n                \"fg\" : \"@base#normal#fg\"\n            }\n        },\n        \"qabstractscrollarea\" : {\n            \"border\" : \"@base#normal#border\",\n            \"corner\" : {\n                \"bg\" : \"@widgets#qscrollbar#bg\"\n            }\n        },\n        \"qslider\" : {\n            \"groove\" : {\n                \"bg\" : \"@base#content#bg\",\n                \"border\" : \"@base#content#border\"\n            },\n            \"handle\" : {\n                \"border\" : \"@base#content#border\",\n                \"bg\" : \"@base#master#bg\"\n            },\n            \"subpage\" : {\n                \"border\" : \"@widgets#qslider#handle#border\",\n                \"bg\" : \"@base#master#alt\"\n            }\n        },\n        \"viewwindow\" : {\n            \"toolbar\" : {\n                \"bg\" : \"@base#content#bg\"\n            }\n        },\n        \"quickselector\" : {\n            \"item_icon\" : {\n                \"fg\" : \"@base#master#bg\",\n                \"border\" : \"@base#master#bg\"\n            }\n        },\n        \"styleditemdelegate\" : {\n            \"separator\" : {\n                \"fg\" : \"@base#normal#fg\",\n                \"bg\" : \"@widgets#separator#bg\"\n            },\n            \"highlight\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"mainwindow\" : {\n            \"side_bar\" : {\n                \"fg\" : \"@palette#fg15_5\",\n                \"bg\" : \"@palette#layer1\",\n                \"selected\" : {\n                    \"fg\" : \"@palette#bg2_7\",\n                    \"bg\" : \"@palette#layer2\"\n                },\n                \"icon\" : {\n                    \"fg\" : \"@widgets#mainwindow#side_bar#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@widgets#mainwindow#side_bar#selected#fg\"\n                    }\n                },\n                \"hover\" : {\n                    \"fg\" : \"@widgets#mainwindow#side_bar#fg\",\n                    \"bg\" : \"@palette#layer3\"\n                },\n                \"widget\" : {\n                    \"bg\" : \"@palette#layer4\"\n                }\n            },\n            \"dockwidget_tabbar\" : {\n                \"icon\" : {\n                    \"fg\" : \"@base#icon#fg\",\n                    \"selected\" : {\n                        \"fg\" : \"@base#icon#selected#fg\"\n                    }\n                }\n            },\n            \"tips_label\" : {\n                \"fg\" : \"@base#master#fg\",\n                \"bg\" : \"@base#master#bg\"\n            }\n        },\n        \"unitedentry\" : {\n            \"icon\" : {\n                \"fg\" : \"@base#icon#fg\",\n                \"busy\" : {\n                    \"fg\" : \"@base#master#bg\"\n                }\n            },\n            \"popup\" : {\n                \"border\" : \"@base#normal#border\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/themes/vx-idea/text-editor.theme",
    "content": "{\n    \"metadata\": {\n        \"revision\": 0,\n        \"name\": \"vx-idea\",\n        \"type\": \"vtextedit\"\n    },\n    \"editor-styles\": {\n        \"Text\": {\n            \"//comment\": \"Support a list of fonts separated by ,\",\n            \"font-family\": \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\",\n            \"font-size\": 12,\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#ffffff\",\n            \"selected-text-color\": \"#f5f5f5\",\n            \"selected-background-color\": \"#1976d2\"\n        },\n        \"CursorLine\": {\n            \"background-color\": \"#f1f2f6\"\n        },\n        \"TrailingSpace\": {\n            \"background-color\": \"#f1f2f6\"\n        },\n        \"Tab\": {\n            \"background-color\": \"#cfcfcf\"\n        },\n        \"SelectedText\": {\n            \"//comment\": \"Selected text highlight\",\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#dfdf00\"\n        },\n        \"IndicatorsBorder\": {\n            \"text-color\": \"#aaaaaa\",\n            \"background-color\": \"#e6edf5\"\n        },\n        \"CurrentLineNumber\": {\n            \"text-color\": \"#34495e\"\n        },\n        \"Folding\": {\n            \"text-color\": \"#6495ed\"\n        },\n        \"FoldedFolding\": {\n            \"text-color\": \"#4169e1\"\n        },\n        \"FoldingHighlight\": {\n            \"text-color\": \"#a9c4f5\"\n        },\n        \"FoldedFoldingRangeLine\": {\n            \"background-color\": \"#befbdd\"\n        },\n        \"IncrementalSearch\": {\n            \"//comment\": \"Incremental search highlight\",\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#ce93d8\"\n        },\n        \"Search\": {\n            \"//comment\": \"Search highlight\",\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#4db6ac\"\n        },\n        \"SearchUnderCursor\": {\n            \"//comment\": \"Search highlight under cursor\",\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#66bb6a\"\n        }\n    },\n    \"//comment\": \"Override the Text style in editor-styles\",\n    \"markdown-editor-styles\": {\n        \"Text\": {\n            \"//comment\": \"Support a list of fonts separated by ,\",\n            \"font-family\": \"YaHei Consolas Hybrid, 冬青黑体, Microsoft YaHei, 微软雅黑, Microsoft YaHei UI, WenQuanYi Micro Hei, 文泉驿雅黑, Dengxian, 等线体, STXihei, 华文细黑, Liberation Sans, Droid Sans, NSimSun, 新宋体, SimSun, 宋体, Verdana, Helvetica, sans-serif, Tahoma, Arial, Geneva, Georgia, Times New Roman\",\n            \"font-size\": 12,\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#ffffff\",\n            \"selected-text-color\": \"#f5f5f5\",\n            \"selected-background-color\": \"#1976d2\"\n        }\n    },\n    \"markdown-syntax-styles\": {\n        \"H1\": {\n            \"text-color\": \"#34495e\",\n            \"bold\": true,\n            \"font-size\": 17\n        },\n        \"H2\": {\n            \"text-color\": \"#34495e\",\n            \"bold\": true,\n            \"font-size\": 16\n        },\n        \"H3\": {\n            \"text-color\": \"#34495e\",\n            \"bold\": true,\n            \"font-size\": 15\n        },\n        \"H4\": {\n            \"text-color\": \"#34495e\",\n            \"bold\": true,\n            \"font-size\": 14\n        },\n        \"H5\": {\n            \"text-color\": \"#34495e\",\n            \"bold\": true,\n            \"font-size\": 13\n        },\n        \"H6\": {\n            \"text-color\": \"#34495e\",\n            \"bold\": true,\n            \"font-size\": 12\n        },\n        \"HRULE\": {\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#dac7c9\"\n        },\n        \"LIST_BULLET\": {\n            \"text-color\": \"#d33682\",\n            \"bold\": true\n        },\n        \"LIST_ENUMERATOR\": {\n            \"text-color\": \"#0000ff\"\n        },\n        \"LINK\": {\n            \"text-color\": \"#005fff\"\n        },\n        \"AUTO_LINK_URL\": {\n            \"text-color\": \"#005fff\"\n        },\n        \"AUTO_LINK_EMAIL\": {\n            \"text-color\": \"#005fff\"\n        },\n        \"IMAGE\": {\n            \"text-color\": \"#616161\"\n        },\n        \"REFERENCE\": {\n            \"text-color\": \"#826200\"\n        },\n        \"CODE\": {\n            \"text-color\": \"#8e24aa\",\n            \"font-family\": \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"EMPH\": {\n            \"italic\": true\n        },\n        \"STRONG\": {\n            \"bold\": true\n        },\n        \"HTML_ENTITY\": {\n            \"text-color\": \"#8900b5\"\n        },\n        \"HTML\": {\n            \"text-color\": \"#8900b5\"\n        },\n        \"HTMLBLOCK\": {\n            \"text-color\": \"#8900b5\"\n        },\n        \"COMMENT\": {\n            \"text-color\": \"#93a1a1\"\n        },\n        \"VERBATIM\": {\n            \"text-color\": \"#673ab7\",\n            \"font-family\": \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"//comment\": \"Please modify the syntax highlight theme as well if you change this\",\n        \"FENCEDCODEBLOCK\": {\n            \"text-color\": \"#673ab7\",\n            \"font-family\": \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"BLOCKQUOTE\": {\n            \"text-color\": \"#00af00\"\n        },\n        \"NOTE\": {\n            \"text-color\": \"#0087b5\"\n        },\n        \"STRIKE\": {\n            \"text-color\": \"#b71c1c\",\n            \"strike-through\": true\n        },\n        \"FRONTMATTER\": {\n            \"text-color\": \"#6c6c6c\"\n        },\n        \"INLINEEQUATION\": {\n            \"text-color\": \"#00897b\",\n            \"font-family\": \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"DISPLAYFORMULA\": {\n            \"text-color\": \"#00897b\",\n            \"font-family\": \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"MARK\": {\n            \"text-color\": \"#34495e\",\n            \"background-color\": \"#ffff76\"\n        },\n        \"TABLE\": {\n            \"font-family\": \"YaHei Consolas Hybrid, Consolas, Monaco, Andale Mono, Monospace, Courier New\"\n        },\n        \"TABLEBORDER\": {\n            \"text-color\": \"#d33682\",\n            \"background-color\": \"#ffffff\"\n        }\n    }\n}"
  },
  {
    "path": "src/data/extra/themes/vx-idea/tips_components/sytle.css",
    "content": "@font-face {\n  font-family: \"vx-alert\"; /* Project id 3575329 */\nsrc: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAAaAAA0AAAAADDAAAAYqAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCYhEICossiH8LEgABNgIkAxgEIAWFAgdxGwcKUZROUpvsZ4KpsnIjDE5dNucqeN4hZnC54KFeJ0K+8yfSr8F/31533+z8ZEOp1RhQuNo0CIsrTSIMioPC4bpFYaNo7keiond4tvm9t7kCWYKxiL5S1w24X4EsIuCu4a5dB/6KcruK4vl/b/dt/wx8EHkYUQRZFgCEnSSBQvtqTW2AVWLEhuwLEysv9wECC4QKxqNSUUVU6IBc37UyrVG1ugPbJeJTNwIEKN9P2gLgr+P6F+65BepAB4CRoEgcGPBCFxnstE8AN8Dv6yM2tmCyDnfz5T1jOzibt1VKApc4hBseCOBkyGUOsLkvPLnPktx/ITMHUCcy/rbliTmZb6+UpAR48/mv/lA/qmdVh4EIXo3K1kANMOC/RwA5/YkRRLwm7b2AHoBtoKJTu5E4F5YmmazFnSR7FsKBkDvKih9BYuQKxAU62DmygoIe5JX6IZGgBjicVAwighE3Ao4gSCNNJY1Cfko5pBxCxYAkmqL1FF0SVlpuVJRmoIfRS1qCjTidoEzcVgwOYVJdkKaUdLlwP/seIZJ6AHDD+DJd/ieQxB0QDioG1yBJe16HfKxCOQShb8KpFTBuDs9FL0B+NdSI7wMcJRdMEPI7UEyUAOCWt2JQ3k7CUVeRNskL3f2VNMc1qnH3afe94XsfvZtsJs3UCqUYdDW5TnpOek157Uk6U4QbiRH1SIi04jHhPu4+rFIFLQWd0J5IOhN3wHeVXm3m4TI+DAAi/dCoScBJelBY5ggKIOJDB0OR06GnI/dDXv86IBSpFUoALnqnbvlREhFMrhAF3HKXQJpJM+BidiVICVAigJEjALfvGoqKNw5AOMQr4FAYPBN2Ju4A5OlVerVTzjVJKCbu4E3dGQ1coQaxeDLysRFKPMWdFE7zZ9ANCAwaGoOQH1UEQtSCGyECQHfV6OGDqorhmVOok3hmri4RTnx7PWdEEGEQWvJDKCoOgGl/h5GmxlGPkZs3RzykxiZJ+bjklPduutiYyX8I55vv5hdIncbqqu8uqFx+/Pr5kwP2Kq1vVVVjQ3tbTk5b+zMR34HvPmp7uf2mgTCcQGI32/F2k/u4ILqdaW85gBg4jsXZ9kBkKJWaDoN/a2tVtS+Wjm7zdfQrjUp+z/pprKyd3j/R5tNvY97+D+E84j/sYu058k6Z+Br8wKc4/LHp2uM3nKyfNi5Es1rMkzr/feDNvCB19ouPZD6pLevbacac5OGYI2amv3m43On1oPOq8+D/2Px8e+AbuqZh9wWH+Ml9ITX3IqjW+X+DhXvhZ29pi+2KsK1JVA5zoHjnmX12xz9oeJpQ/+b2cNUcYu+lePqkpj/r0Ssz2dH3pTf2P/PnvwfK/3PpSq7wtMjyKwzUgx1qAN4c+8nFrezD8jXDiK/bs3l5FD3sZtxi2/YPy9wIy/EvYXG8hXWxhgzJCspID84MXYSRhizkfDdSu0WJx29iv37W5YQF8YUzcdLqidLtdGxZTDQZo2eydxZ1VbwGvsyMltnIQr3MhZ7PehaavcIskQdFZRwBcx3dxbtymBh9NFkWQ8dalh2MxXzdfDH1CC2Ad086ZnWMRsPo2J8IpCELOcf/ROZ3IhMDJp0kXsfkyfn9PHSxWr+zoXpx+AnWa1sNkbRqz79xd3Awi+xeXjXVlco5FWaqnWKhPJ99dg+lRdxJ1FsiAAj80f3jX21y0FUj6gxDF6T/ElcWToDIcpBDh2+/QAwP+tkKAC+DlA2C/C+aT0kUiF400k1fIwIkRFu8V1a4VbANEi2CKTqEIDqlO/sWMrXeoSD6ghqz0Z1fqzUvE6hKwAQAgDTRgWmwBUGTerqzBch0WICCJtegxqZPjqs1kQqQpgljixZVdjtvW3USK21Tr45hpgU4GMMTFDyBmgBS9ASft4rBalVjiybg98NRk48OEjcxmjSrbPcWI1I0sG+yekxkdFb6gqEu++A+5jdrw4oNEbUw+A2a4HQtb5lF+Bk1YrKet4bwTaowtmkRCRy6FTa3sbEtLYadFny/HC94ND9xBwE4Kn+9BhpRohhKDkbaVqcZLITNhsx4JtkzFZmmBqPHU8RiCnJlKtRMqQ0Rs0+L3LLVsYQ6DM81WZh6Sql2qWevAAA=') format('woff2'),\n     url('data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAjAAA0AAAAADDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAIpAAAABoAAAAck9E28UdERUYAAAiEAAAAHgAAAB4AKQAOT1MvMgAAAaQAAABGAAAAYDxKSiBjbWFwAAACBAAAAFQAAAFizMm3t2dhc3AAAAh8AAAACAAAAAj//wADZ2x5ZgAAAmwAAAR8AAAFrELvgJRoZWFkAAABMAAAADEAAAA2IUxT5WhoZWEAAAFkAAAAIAAAACQH3gOFaG10eAAAAewAAAAYAAAAGAyeAYxsb2NhAAACWAAAABIAAAASBjIELG1heHAAAAGEAAAAHwAAACABIQDGbmFtZQAABugAAAFGAAACgl6CAQJwb3N0AAAIMAAAAEoAAABxJnkN4XjaY2BkYGAA4pxmxth4fpuvDNwsDCBwX6z9C4z+/+9/AwsTcwOQy8HABBIFADTwC+0AAAB42mNgZGBgbvjfwBDDwvD/HwMDCxMDUAQFsAAAdeoEbHjaY2BkYGDgYNjFwM8AAkxAzAWEDAz/wXwGABylAegAeNpjYGFhYJzAwMrAwNTJdIaBgaEfQjO+ZjBi5ACKMrAyM2AFAWmuKQwHnok8D2Ru+N/AwMB8h6ERKMyIpESBgREAbmoM5gAABAAAAAAAAAAEAAAABAABAABcAI4AQf/+eNpjYGBgZoBgGQZGBhCIAfIYwXwWBgcgzcPAwcDEwPJM5Jnds5BnKc8D//9nYEDmSb6XPCa5UXKRxDaoCXDAyMYAF2JkAhJMDGgKGIY9AABQLxT3AAAAAAAAAAABFgGWAkYClgLWAAB42l1UTYzbRBSeF8eexH/58V8SJ3E8Tmw3TnfXTpxoyWbTIrW7XbotS7fdBXpAoq1W2l660D8kRCsh1AqJC+LApRIHOJVLVSQ4IbgDFy5IXCouHDgBN2iWsbeVWjyevzdv3nzve/MGFQAhniln/kF11EMLaICOozX0OjqP3kBX0fvoU/Q5+gp9gxCQeXAHUxhGFuhqATzXIRzmNNUCzHnGyI0HwxEt/cgYeYY3MqjMY7jnN3E4kXb+Z4qLU13yjAnd0DWVmvcOztCj4QRcz1Wc0TLEg3kY0blnNEGTAXv9YTxwPQ7TLYZN3AkMhn070hugch07tuGzAv8Wz//AN4Q9QTgqSwqWuaIkrwvvXJ6XigWxIMoV1dndu7F2/c60NP2Nz00wrmMNT3I5M8f7PvbhKo9vY1yhwrS7tsvshiQ62OxUlSzIYoVgGRdr7VqGlzc/ti1iYlHKd4MQrMbUPVyrZtnqe7OeVC5L8DNtZz58P1uGDr8nNCg6irHBv1iQWFbSypJ8iv9kd16tKETk2azo7F65vnZjjqKb3QUKT6P4KDw1Z2LY8jn/Ib5NJxVM0Wm4itvXLjOXZ3dD52B7VTU5rtQSjVup8VpV4Qq8NHub2Bu9xVAWxBI36rg747lzTmvyknfCyuF4fObLstiTSiWpJ5b9CqIfoPP7t5h7zC10mk5wTAPyTMHcs4VG8OnKKA3qKJXpNGaGnigU4ImclkSLQevAMFxOkEpqre54c8m4qFSbzuTwEi8fWXsoiGJJLOTymUyx3PbGAJlMXlQrq5LAZmVBFqutVs9dIL5mZJi2l+mvyyXFrNlWu9WxSK1RbrpuPLcYRI1weePlN89d2pCK5Zpp257b9Xpe0BYKRcNomK1FnxyyHUpSjpfVqtUOwsXp6ulthLLoo/0PmT3q/xAdQVfQu5SFhZD60gAnHg3ngCRpQTiaEpoTD6hXTkpAPEicfHKpD3x3iOvFfXrFGYLTG55yE+qGxqmGpjZhDNEyTGA48OLhKExZSi26ik0P0On9Hg7czP0mXzzzKg+KmT95jjeV/IUzJd4CV7VLetc/tvLFyjG/a5SJ6u7cUerwe337wtZmGJmab3QtFqAZN+/QCsDWg4qvm1G4uRXPfpQURYKItlCriYpiPnotT22f3MrTcy4+MjVVqtma44UvbK4ePxQEh46vbo4jv6O1/qgrWllrMK/0o7PbF1cnC0G1XcMLLGa7VmzRP8hidp6rtKu9cPnExe2zUf/fk4pJj1BQwu/R/e+Yb5kp0pCFItRPXp2EnpSdKOEgpcAxIl3liEvTXKHEJzwN3HmI+yVVp9Rn0M2dS+PJZHxp58+ng5tCMwiWgqB5+6+mVCxKza9pZabP6aSDe8FSt7sUPP61JbC6dF/WWcGe7Uu0ayFmf7b/UzbDxEhGBvIQ6sAcfdKAawKNB83kBFICbaRyAdDnrDQY0jjqGvP3bCK4rjCbyJxdYT6oEPbxrEpIRAgR8qfyQtqMM78osqw89vS+4/RXktWIPEgWAeUEIfcfLZDnm3jafZDNSsNAFIXP9E9tQcSC61kVQUh/lqW7Qt25cFHXbTpJW5JMmEwLXbp15QO49TF8AJ9BcOWDeBqvCBWakMs3595zZiYALvEJhZ+njWthhVPcCVdwgli4Sv1RuEZ+Ea6jhTfhBvUP4SZu1Ei4hbZ6ZoKqnXHVKdP2rHCBkXAF53gQrlK3wjXyk3AdV3gVblB/F25iii/hFjpqiTEcDGbwrAtozLFjXSFkboaorB4YOzPzZqHnO70KbRbZjOK/qb/WPeNibJAw2nFp4k0yc0ctR1pTpjkUHNm3NPoI0KNsXLGyme4HvaP2W9qzMuLwngW2POaAqqdR83O0p6SJxBheISFr5GVvTSWkHjDWZMb9/pViGw+8j3TkbKon3NYkidW5s2sTeg4vyz1yDNHlGx2kB+XhU455nw+73UgCgtCm+AYPanCHAAB42mNgYoAALjDJyIAOOMCiTIxMjMyMLIysjGxciTmpRSW6KYlF2TwwZl56ahFUPDMvLZ8XwiwoysxNLKqE8soTi/Iy89IB5VoXfgAAAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAMABwABAAQAAAACAAAAAHjaY2BgYGQAgqtL1DlA9H2x9i8wGgA/SwaKAAA=') format('woff'),\n     url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTZPRNvEAAAwUAAAAHEdERUYAKQAOAAAL9AAAAB5PUy8yPEpKIAAAAVgAAABgY21hcMzJt7cAAAHQAAABYmdhc3D//wADAAAL7AAAAAhnbHlmQu+AlAAAA0gAAAWsaGVhZCFMU+UAAADcAAAANmhoZWEH3gOFAAABFAAAACRobXR4DJ4BjAAAAbgAAAAYbG9jYQYyBCwAAAM0AAAAEm1heHABIQDGAAABOAAAACBuYW1lXoIBAgAACPQAAAKCcG9zdCZ5DeEAAAt4AAAAcQABAAAAAQAAbIMBXV8PPPUACwQAAAAAAN8Wh/QAAAAA3xaH9P/+/4AEAgOAAAAACAACAAAAAAAAAAEAAAOA/4AAXAQA//4AAAQCAAEAAAAAAAAAAAAAAAAAAAAEAAEAAAAIALoADwAAAAAAAgAAAAoACgAAAP8AAAAAAAAABAQAAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZADA5hTnUQOA/4AAAAPcAIEAAAABAAAAAAAAAAAAAAAgAAEEAAAAAAAAAAQAAAAEAAEAAFwAjgBB//4AAAADAAAAAwAAABwAAQAAAAAAXAADAAEAAAAcAAQAQAAAAAwACAACAATmFOY+5lTmZOdR//8AAOYU5j7mVOZk51H//xnvGcYZsRmiGLYAAQAAAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARYBlgJGApYC1gAAAA8BAAAKAxIC+wAcACwAMAA0AEYASgBbAFwAYAB1AIQAmQClALUAuQAAASIvASY0PwE2Mh8BFhQPAScmIyIGBwYVFB8BBwYnFzcmNTQ2NzY3NjMyFzcnFyc3FycXNycDBi8BJjQ/ATYyHwEWFA8BBgcnFzcnJSIvASY0PwE2Mh8BFhQPAQY1Jxc3JwMiJjU0Njc2NzYzMhcWFxYVFAYHBiciBgcGFRQWMjY9ASYnJhMjNz4BNTQvATc2PQEnFx4BFQ4BByczNjU0JicGBxYVFBchIiY9ATQ2MyEyFh0BFAYlITUhAaEPCnMKCs0KHQtyCwtBDg0TBw4GEA0OTQt6bC8NEA8MDwwOGBQja3J4SneIPxE/4woIPQcHHAcVBz0ICBsICigoBygBdQoHgQcHGAcVB4EHBxgHdmsDazEiMhAPDA8MDiMZEwQBDgwYIgcOBxAaJBoCCg5UkyEfIhsHDA0JKisxAR8dPyYtGhkEBRl//iwNEhINAdQNEhL+KAHC/j4BJQpyCx0KzQoKcwodCkIPDQUFDRUSDQ5OCpVrLxQYEyIMCgUEDCNrcXdKeC4/ET/+iQEIPQcVBxwHBz0IFAgbBwFXKAYotAeBCBQIGAcHgQcVBxkHJHZsA2z+iTEjEyIMCgUEGRQbBgYRIAwXgAUFDRUSGhkTBg8KDf50IiFRLDkxDgsMEQY3JSZoOy5WIyA9SydJHwgHNTtTrRIMLA0REQ0sDBIoGAAAAAABAFz/gAOeA4AATwAAAQc1JicmJyYnJicmJyYnJicHBgcGBwYHBgcGBwYHBhcWFycmJyYnJicmNzY3Njc2NwcGFxYXFhceARcWBwYHBg8BNzY3Njc2NzY3NicmJyYDAE0BAwMGCAsNERQaHCMnLgMGCAsQExkeIz0tPAoOQEq0CwwMEQwPCAkCAhASJCc7AQECAgkMFBhIDQsFBA4LDgwZICAsJjAiKBUXAgMkJwIzTQ4RExsaIR8kICUfIhodEh4mJjUuOSsyHTE+UVBjVmZRDRASGhshIScmKicsJyskCw8QFxcdGyA5KCIpISMaGRMICg4UGR8kKzE5P0hPWAAABACO/4sDcgOAADYAQABxAH0AAAEwMQYHBh0BIzU3Ni4BIg8BJyYiBhQfARUjNTQnJicjJicmJyY1NDc2NzYyFxYXFhUUBwYHBg8BIyImJzUzFRQGAyIHBgcGFRQXFhcWFzEWFxUGFBcVFB4BOwEyPgE9ATY0JzU2NzE2NzY3NjU0JyYnJhMhIgYUFjMhMjY0JgKsHgoQU1kKARMbCUxWChsTCWRTEQofASYUIREWKihFR6ZHRSgqFxIiFCZoiBMcAegcWGRXVDEyGxUoFyofBQEBHjUeiB41HgEBBRwrGCgWGzIxVFc1/s4NExMNATINExMBGhoMExMb4VoJGxMJTFcJExsJZeEbFRQNGiEVIycxOlRIRikrKylGSFQ7MiglFSDsHBMVEhUdA1IzMlVYZUg9MCsZJBoHMAUHBSofNR8fNR8rBAcFLwYYJBksMT5JZVhVMjP8TBMbExMbEwAAAAQAQf/BA78DPwAVAB8AMgAzAAABIgcGBwYUFxYXFjI3Njc2NCcmJyYjFzIWFAYiJjQ2MxMjNTc+AT0BNCYvATUzERQWHwEVAgB5aGY7PT07ZmjyaGY7PT07Zmh5Cx4rKzwrKx6B8x4NEBANHrgQDR4DPz07ZmjyaGY7PT07ZmjyaGY7PZ4rPCoqPCv93CALBRYNrA4WBQsh/v8NFgULIAAD//7/zwQCAzUADgAXACcAACUBLgEGBwEGHgEzITI+ASUiJjQ2MhYUBjcUBisBIiY1ETQ2OwEyFhUD9P49CyYmC/49DgYhGAOGGCIF/f4ZIiIyIiIiCwlOCQsLCU4JCzsC2RMODhP9JxYzIyMzRyIyIiIyIrIJCwsJAQAICwsIAAAAEgDeAAEAAAAAAAAAEwAoAAEAAAAAAAEACABOAAEAAAAAAAIABwBnAAEAAAAAAAMACACBAAEAAAAAAAQACACcAAEAAAAAAAUACwC9AAEAAAAAAAYACADbAAEAAAAAAAoAKwE8AAEAAAAAAAsAEwGQAAMAAQQJAAAAJgAAAAMAAQQJAAEAEAA8AAMAAQQJAAIADgBXAAMAAQQJAAMAEABvAAMAAQQJAAQAEACKAAMAAQQJAAUAFgClAAMAAQQJAAYAEADJAAMAAQQJAAoAVgDkAAMAAQQJAAsAJgFoAEMAcgBlAGEAdABlAGQAIABiAHkAIABpAGMAbwBuAGYAbwBuAHQAAENyZWF0ZWQgYnkgaWNvbmZvbnQAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AAEdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC4AAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAGh0dHA6Ly9mb250ZWxsby5jb20AAAAAAgAAAAAAAAAKAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAAAAQACAQIBAwEEAQUBBgphbGVydC1kYXJrDGFsZXJ0LWRhbmdlcgphbGVydC1pbmZvDWFsZXJ0LXByaW1hcnkNYWxlcnQtd2FybmluZwAAAAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADAAcAAQAEAAAAAgAAAAAAAAABAAAAANWkJwgAAAAA3xaH9AAAAADfFof0') format('truetype');\n}\n\n.vx-alert {\n  font-family: \"vx-alert\" !important;\n  font-size: 2.5em;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.alert-dark:before {\n  content: \"\\e614\";\n  color: #2c2c2c;\n  float: left;\n  padding-right: .2em;\n}\n\n.alert-primary:before {\n  content: \"\\e664\";\n  color: #0077b9;\n  float: left;\n  padding-right: .2em;\n}\n\n.alert-info:before {\n  content: \"\\e654\";\n  color: #23a3ba;\n  float: left;\n  padding-right: .2em;\n}\n\n.alert-danger:before {\n  content: \"\\e63e\";\n  color: #bf3300;\n  float: left;\n  padding-right: .2em;\n}\n\n.alert-warning:before {\n  content: \"\\e751\";\n  color: #d88400;\n  float: left;\n  padding-right: .2em;\n}"
  },
  {
    "path": "src/data/extra/themes/vx-idea/web.css",
    "content": "@media print {\n  page-break-inside: avoid !important;\n  page-break-after: avoid; !important;\n  page-break-before: avoid !important;\n}\n\nbody {\n    margin: 0 auto;\n    font-family: \"YaHei Consolas Hybrid\", \"Segoe UI\", Helvetica, sans-serif, Tahoma, Arial, Geneva, Georgia, Palatino, \"Times New Roman\", \"冬青黑体\", \"Microsoft YaHei\", \"微软雅黑\", \"Microsoft YaHei UI\", \"WenQuanYi Micro Hei\", \"文泉驿雅黑\", Dengxian, \"等线体\", STXihei, \"华文细黑\", \"Liberation Sans\", \"Droid Sans\", NSimSun, \"新宋体\", SimSun, \"宋体\";\n    color: #34495e;\n    line-height: 1.5;\n    padding: 15px;\n    background-color: #ffffff;\n    font-size: 16px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    color: #34495e;\n    font-weight: bold;\n    margin-top: 20px;\n    margin-bottom: 10px;\n    padding: 0;\n}\n\np {\n    padding: 0;\n    margin-top: 16px;\n    margin-bottom: 16px;\n}\n\nh1 {\n    font-size: 26px;\n}\n\nh2 {\n    font-size: 24px;\n}\n\nh3 {\n    font-size: 22px;\n}\n\nh4 {\n    font-size: 20px;\n}\n\nh5 {\n    font-size: 19px;\n}\n\nh6 {\n    font-size: 18px;\n}\n\na {\n    color: #0099ff;\n    margin: 0;\n    padding: 0;\n    vertical-align: baseline;\n    text-decoration: none;\n    word-break: break-word;\n}\n\na:hover {\n    text-decoration: underline;\n}\n\na:visited {\n    color: #800080;\n}\n\nul, ol {\n    padding: 0;\n    padding-left: 24px;\n}\n\nli {\n    line-height: 24px;\n}\n\nli ul, li ol {\n    margin-left: 16px;\n}\n\np, ul, ol {\n    font-size: 16px;\n    line-height: 24px;\n}\n\nmark {\n    color: #000000;\n    background-color: #c4c400;\n}\n\npre {\n    display: block;\n    /*overflow-y: hidden;*/\n    /*overflow-x: auto;*/\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\ncode {\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, Monospace, Courier;\n    color: #e96900;\n    word-break: break-word;\n}\n\npre code {\n    display: block;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: #e8eaf6;\n    background-color: #272822;\n    line-height: 1.5;\n    font-family: \"YaHei Consolas Hybrid\", Consolas, Monaco, Monospace, Courier;\n    white-space: pre;\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n}\n\naside {\n    display: block;\n    float: right;\n    width: 390px;\n}\n\nblockquote {\n    color: #34495e;\n    border-left: .2em solid #a0c1dd;\n    padding: .1em 1em;\n    background-color: #f4f7f9;\n    margin-left: 0;\n}\n\nblockquote p {\n    color: #34495e;\n}\n\nhr {\n    display: block;\n    text-align: left;\n    margin: 1em 0; \n    border: none;\n    height: 1px;\n    background-color: #bdc3c7;\n}\n\ntable {\n   padding: 0;\n   margin: 1rem 0.5rem;\n   border-collapse: collapse;\n}\n\ntable tr {\n   border-top: 1px solid #dfe2e5;\n   background-color: #ffffff;\n   margin: 0;\n   padding: 0;\n}\n\ntable tr:nth-child(2n),\nth {\n    background-color: #fafafa;\n}\n\ntable tr:hover {\n   background-color: #f1f2f6;\n}\n\ntable tr th {\n   font-weight: bold;\n   border: 1px solid #dfe2e5;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr td {\n   border: 1px solid #dfe2e5;\n   margin: 0;\n   padding: 6px 13px;\n}\n\ntable tr th :first-child, table tr td :first-child {\n   margin-top: 0;\n}\n\ntable tr th :last-child, table tr td :last-child {\n   margin-bottom: 0;\n}\n\ndiv.vx-mermaid-graph {\n    margin: 16px 0px 16px 0px;\n    overflow-y: hidden;\n    /* background: #bdcbd3; */\n    color: #c4c4c4;\n}\n\ndiv.vx-flowchartjs-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    /* background: #bdcbd3; */\n    color: #c7c4c4;\n}\n\ndiv.vx-wavedrom-graph {\n    padding: 0px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    /* background: #bdcbd3; */\n    color: #c4c4c4;\n}\n\ndiv.vx-plantuml-graph {\n    padding: 5px 5px 0px 5px;\n    margin: 16px 0px 16px 0px;\n    width: fit-content;\n    overflow: hidden;\n    /* background: #bdcbd3; */\n    color: #c4c4c4;\n}\n\n/* ::selection {\n  background-color: #dae3ea;\n  color: #34495e;\n} */\n\n::-webkit-scrollbar {\n    background-color: #eaeaea;\n    width: 10px;\n    height: 10px;\n    border: none;\n}\n\n::-webkit-scrollbar-corner {\n    background-color: #eaeaea;\n}\n\n::-webkit-scrollbar-button {\n    /* This selector affects the styling of both the up & down and left & right buttons of a scrollbar */\n    height: 10px;\n    width: 10px;\n    background-color: #eaeaea;\n}\n\n::-webkit-scrollbar-button:hover {\n    background-color: #ced6e0;\n}\n\n::-webkit-scrollbar-button:active {\n    background-color: #b4c0cf;\n}\n\n::-webkit-scrollbar-track {\n    /* This selector affects the styling of the area in the scrollbar between the two buttons */\n    background-color: #eaeaea;\n    border-radius: 10px;\n}\n\n::-webkit-scrollbar-thumb {\n    /* This selector affects the styling of draggable element of the scollbar */\n    border: none;\n    background-color: #b4c0cf;\n    border-radius: 10px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background-color: #ced6e0;\n}\n\n::-webkit-scrollbar-thumb:active {\n    background-color: #b4c0cf;\n}\n\n::-webkit-scrollbar-button:horizontal:increment {\n    background-image: url(right.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:horizontal:decrement {\n    background-image: url(left.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:increment {\n    background-image: url(down.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n::-webkit-scrollbar-button:vertical:decrement {\n    background-image: url(up.svg);\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n#vx-content span.vx-search-match {\n    color: #34495e;\n    background-color: #4db6ac;\n}\n\n#vx-content span.vx-current-search-match {\n    color: #34495e;\n    background-color: #66bb6a;\n}"
  },
  {
    "path": "src/data/extra/web/css/exportglobalstyles.css",
    "content": "div.code-toolbar > div.toolbar {\n    display: none;\n}\n"
  },
  {
    "path": "src/data/extra/web/css/globalstyles.css",
    "content": "/* Styles here will be placed in the header of the HTML template as global embedded styles. */\n/* Section numbering */\n#vx-content.vx-section-number,\n#vx-content.vx-section-number-2 h1,\n#vx-content.vx-section-number-3 h1,\n#vx-content.vx-section-number-3 h2 {\n    counter-reset: section1 section2 section3 section4 section5 section6;\n}\n\n#vx-content.vx-section-number-1 h1,\n#vx-content.vx-section-number-2 h2,\n#vx-content.vx-section-number-3 h3 {\n    counter-reset: section2 section3 section4 seciton5 section6;\n}\n\n#vx-content.vx-section-number-1 h2,\n#vx-content.vx-section-number-2 h3,\n#vx-content.vx-section-number-3 h4 {\n    counter-reset: section3 section4 section5 section6;\n}\n\n#vx-content.vx-section-number-1 h3,\n#vx-content.vx-section-number-2 h4,\n#vx-content.vx-section-number-3 h5 {\n    counter-reset: section4 section5 section6;\n}\n\n#vx-content.vx-section-number-1 h4,\n#vx-content.vx-section-number-2 h5 {\n    counter-reset: section5 section6;\n}\n\n#vx-content.vx-section-number-1 h5 {\n    counter-reset: section6;\n}\n\n#vx-content.vx-section-number-1 h1::before,\n#vx-content.vx-section-number-2 h2::before,\n#vx-content.vx-section-number-3 h3::before {\n    counter-increment: section1;\n    content: counter(section1) \". \";\n}\n\n#vx-content.vx-section-number-1 h2::before,\n#vx-content.vx-section-number-2 h3::before,\n#vx-content.vx-section-number-3 h4::before {\n    counter-increment: section2;\n    content: counter(section1) \".\" counter(section2) \". \";\n}\n\n#vx-content.vx-section-number-1 h3::before,\n#vx-content.vx-section-number-2 h4::before,\n#vx-content.vx-section-number-3 h5::before {\n    counter-increment: section3;\n    content: counter(section1) \".\" counter(section2) \".\" counter(section3) \". \";\n}\n\n#vx-content.vx-section-number-1 h4::before,\n#vx-content.vx-section-number-2 h5::before,\n#vx-content.vx-section-number-3 h6::before {\n    counter-increment: section4;\n    content: counter(section1) \".\" counter(section2) \".\" counter(section3) \".\" counter(section4) \". \";\n}\n\n#vx-content.vx-section-number-1 h5::before,\n#vx-content.vx-section-number-2 h6::before {\n    counter-increment: section5;\n    content: counter(section1) \".\" counter(section2) \".\" counter(section3) \".\" counter(section4) \".\" counter(section5) \". \";\n}\n\n#vx-content.vx-section-number-1 h6::before {\n    counter-increment: section6;\n    content: counter(section1) \".\" counter(section2) \".\" counter(section3) \".\" counter(section4) \".\" counter(section5) \".\" counter(section6) \". \";\n}\n\n#vx-content.vx-constrain-image-width img,\n#vx-content.vx-constrain-image-width div.vx-plantuml-graph > svg,\n#vx-content.vx-constrain-image-width div.vx-mermaid-graph,\n#vx-content.vx-constrain-image-width div.vx-flowchartjs-graph,\n#vx-content.vx-constrain-image-width div.vx-wavedrom-graph {\n    max-width: 100% !important;\n    height: auto !important;\n}\n\nfigure {\n    margin: auto;\n}\n\nfigcaption {\n    font-style: italic;\n}\n\n#vx-content.vx-image-align-center figure {\n    text-align: center;\n}\n\n#vx-content.vx-image-align-center figcaption {\n    text-align: center;\n}\n\n#vx-content.vx-image-align-center div.vx-plantuml-graph,\n#vx-content.vx-image-align-center div.vx-mermaid-graph,\n#vx-content.vx-image-align-center div.vx-flowchartjs-graph,\n#vx-content.vx-image-align-center div.vx-wavedrom-graph {\n    margin-left: auto;\n    margin-right: auto;\n}\n\n/* Table of Contents */\n.vx-table-of-contents ol {\n    list-style: none;\n}\n\n#vx-content.vx-section-number-1 .vx-table-of-contents ol {\n    counter-reset: toc;\n}\n#vx-content.vx-section-number-1 .vx-table-of-contents ol li {\n    counter-increment: toc;\n}\n#vx-content.vx-section-number-1 .vx-table-of-contents ol li:before {\n    content: counters(toc, '.') '. ';\n    font-family: cursive;\n}\n\n#vx-content.vx-section-number-2 .vx-table-of-contents > ol > li ol {\n    counter-reset: toc;\n}\n#vx-content.vx-section-number-2 .vx-table-of-contents > ol > li ol li {\n    counter-increment: toc;\n}\n#vx-content.vx-section-number-2 .vx-table-of-contents > ol > li ol li:before {\n    content: counters(toc, '.') '. ';\n    font-family: cursive;\n}\n\n#vx-content.vx-section-number-3 .vx-table-of-contents > ol > li > ol > li ol {\n    counter-reset: toc;\n}\n#vx-content.vx-section-number-3 .vx-table-of-contents > ol > li > ol > li ol li {\n    counter-increment: toc;\n}\n#vx-content.vx-section-number-3 .vx-table-of-contents > ol > li > ol > li ol li:before {\n    content: counters(toc, '.') '. ';\n    font-family: cursive;\n}\n\n.vx-header-anchor {\n    visibility: hidden;\n    vertical-align: middle;\n}\n\n.vx-header-anchor::after {\n    content: attr(vx-data-anchor-icon);\n}\n\n#vx-content h1:hover .vx-header-anchor, #vx-content h2:hover .vx-header-anchor, #vx-content h3:hover .vx-header-anchor, #vx-content h4:hover .vx-header-anchor, #vx-content h5:hover .vx-header-anchor, #vx-content h6:hover .vx-header-anchor {\n    visibility: visible;\n    vertical-align: middle;\n}\n\n#vx-content.vx-indent-first-line p {\n    text-indent: 2em;\n}\n\nbody.vx-transparent-background {\n    background-color: transparent !important;\n}\n\n#vx-content.vx-nonscrollable pre {\n    white-space: pre-wrap !important;\n    word-break: break-all !important;\n    overflow: hidden !important;\n}\n\n#vx-content.vx-nonscrollable pre code {\n    white-space: pre-wrap !important;\n    word-break: break-all !important;\n}\n\n#vx-content.vx-nonscrollable code,\n#vx-content.vx-nonscrollable a {\n    word-break: break-all !important;\n}\n"
  },
  {
    "path": "src/data/extra/web/css/imageviewer.css",
    "content": ".vx-image-view-image {\n    transition: 0.3s;\n}\n\n.vx-modal-box {\n    display: none;\n    position: fixed;\n    z-index: 1000;\n    padding-top: 50px;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    background-color: rgba(51, 56, 66, 0.85);\n}\n\n.vx-modal-content {\n    margin: auto;\n    display: block;\n    width: auto;\n    height: auto;\n    cursor: move;\n}\n\n/* Add Animation */\n.vx-modal-content {\n    -webkit-animation-name: zoom;\n    -webkit-animation-duration: 0.6s;\n    animation-name: zoom;\n    animation-duration: 0.6s;\n}\n\n@-webkit-keyframes zoom {\n    from {-webkit-transform:scale(0)}\n    to {-webkit-transform:scale(1)}\n}\n\n@keyframes zoom {\n    from {transform:scale(0)}\n    to {transform:scale(1)}\n}\n\n/* The Close Button */\nspan.vx-modal-close {\n    position: absolute;\n    z-index: 1000;\n    top: 15px;\n    right: 35px;\n    color: #abb2bf;\n    font-size: 40px;\n    font-weight: bold;\n    transition: 0.3s;\n}\n\nspan.vx-modal-close:hover,\nspan.vx-modal-close:focus {\n    color: #d7dae0;\n    text-decoration: none;\n    cursor: pointer;\n}\n"
  },
  {
    "path": "src/data/extra/web/css/markdownit.css",
    "content": "ul.contains-task-list {\n    list-style-type: none;\n}\n\n/* Alert */\n.vx-alert {\n    position: relative;\n    padding: .75rem 1.25rem;\n    margin-bottom: 1rem;\n    border: 1px solid transparent;\n    border-radius: .25rem;\n}\n\n.alert-primary {\n    color: #004085;\n    background-color: #cce5ff;\n    border-color: #b8daff;\n}\n\n.alert-secondary {\n    color: #383d41;\n    background-color: #e2e3e5;\n    border-color: #d6d8db;\n}\n\n.alert-success {\n    color: #155724;\n    background-color: #d4edda;\n    border-color: #c3e6cb;\n}\n\n.alert-info {\n    color: #0c5460;\n    background-color: #d1ecf1;\n    border-color: #bee5eb;\n}\n\n.alert-warning {\n    color: #856404;\n    background-color: #fff3cd;\n    border-color: #ffeeba;\n}\n\n.alert-danger {\n    color: #721c24;\n    background-color: #f8d7da;\n    border-color: #f5c6cb;\n}\n\n.alert-light {\n    color: #818182;\n    background-color: #fefefe;\n    border-color: #fdfdfe;\n}\n\n.alert-dark {\n    color: #1b1e21;\n    background-color: #d6d8d9;\n    border-color: #c6c8ca;\n}\n/* Alert */\n"
  },
  {
    "path": "src/data/extra/web/css/outline.css",
    "content": "*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n.container-fluid {\n    width: 100%;\n    padding-right: 15px;\n    padding-left: 15px;\n    margin-right: auto;\n    margin-left: auto;\n}\n\n.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {\n    position: relative;\n    width: 100%;\n    min-height: 1px;\n    padding-right: 15px;\n    padding-left: 15px;\n}\n\n.col-12 {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n}\n\n@media (min-width: 768px) {\n    .col-md-3 {\n        -webkit-box-flex: 0;\n        -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n        max-width: 25%;\n    }\n}\n\n@media (min-width: 768px) {\n    .col-md-9 {\n        -webkit-box-flex: 0;\n        -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n        max-width: 75%;\n    }\n}\n\n@media (min-width: 1200px) {\n    .col-xl-2 {\n        -webkit-box-flex: 0;\n        -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n        max-width: 16.666667%;\n    }\n}\n\n@media (min-width: 1200px) {\n    .col-xl-10 {\n        -webkit-box-flex: 0;\n        -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n        max-width: 83.333333%;\n    }\n}\n\n@media (min-width: 768px) {\n    .pt-md-3, .py-md-3 {\n        padding-top: 1rem!important;\n    }\n}\n\n@media (min-width: 768px) {\n    .pb-md-3, .py-md-3 {\n        padding-bottom: 1rem!important;\n    }\n}\n\n@media (min-width: 768px) {\n    .pl-md-5, .px-md-5 {\n        padding-left: 3rem!important;\n    }\n}\n\n.d-none {\n    display: none!important;\n}\n\n@media (min-width: 1200px) {\n    .d-xl-block {\n        display: block!important;\n    }\n}\n\n@media (min-width: 768px) {\n    .d-md-block {\n        display: block!important;\n    }\n}\n\n.bd-content {\n    -webkit-box-ordinal-group: 1;\n    -ms-flex-order: 0;\n    order: 0;\n}\n\n.bd-toc {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 4rem;\n    height: calc(100vh - 10rem);\n    overflow-y: auto;\n}\n\n.bd-toc {\n    -webkit-box-ordinal-group: 2;\n    -ms-flex-order: 1;\n    order: 1;\n    padding-top: 1.5rem;\n    padding-bottom: 1.5rem;\n    font-size: .875rem;\n}\n\n.section-nav {\n    padding-left: 0;\n}\n\n.section-nav ul {\n    font-size: .875rem;\n    list-style-type: none;\n}\n\n.section-nav li {\n    font-size: .875rem;\n}\n\n.section-nav a {\n    color: inherit !important;\n    white-space: nowrap;\n}\n\n.row {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap;\n    margin-right: -15px;\n    margin-left: -15px;\n}\n\n@media (min-width: 1200px) {\n    .flex-xl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n}\n\n#floating-button {\n    width: 2.5rem;\n    height: 2.5rem;\n    border-radius: 50%;\n    background: #00897B;\n    position: fixed;\n    top: .5rem;\n    right: .5rem;\n    cursor: pointer;\n    box-shadow: 0px 2px 5px #666;\n}\n\n#floating-button .more {\n    color: #F5F5F5;\n    position: absolute;\n    top: 0;\n    display: block;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    text-align: center;\n    padding: 0;\n    margin: 0;\n    line-height: 2.5rem;\n    font-size: 2rem;\n    font-family: 'monospace';\n    font-weight: 300;\n}\n\n.hide-none {\n    display: none !important;\n}\n\n.col-expand {\n    -webkit-box-flex: 0;\n    -ms-flex: 0 0 100% !important;\n    flex: 0 0 100% !important;\n    max-width: 100% !important;\n    padding-right: 3rem !important;\n}\n\n.outline-bold {\n    font-weight: bolder !important;\n}\n\n@media print {\n    #floating-button {\n        display: none !important;\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/css/user.css",
    "content": "/* Styles here will be placed in the header of the HTML template as global embedded styles. */\n/* This file is to hold customized styles provided by user. */\n"
  },
  {
    "path": "src/data/extra/web/js/computed-style-to-inline-style.js",
    "content": "(function (global, factory) {\n  if (typeof define === \"function\" && define.amd) {\n    define([\"module\"], factory);\n  } else if (typeof exports !== \"undefined\") {\n    factory(module);\n  } else {\n    var mod = {\n      exports: {}\n    };\n    factory(mod);\n    global.computedStyleToInlineStyle = mod.exports;\n  }\n})(this, function (module) {\n  \"use strict\";\n\n  var each = Array.prototype.forEach;\n\n\n  function computedStyleToInlineStyle(element) {\n    var _context2;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (!element) {\n      throw new Error(\"No element specified.\");\n    }\n\n    if (options.recursive) {\n      var _context;\n\n      (_context = element.children, each).call(_context, function (child) {\n        computedStyleToInlineStyle(child, options);\n      });\n    }\n\n    var computedStyle = getComputedStyle(element);\n    (_context2 = options.properties || computedStyle, each).call(_context2, function (property) {\n      element.style[property] = computedStyle.getPropertyValue(property);\n    });\n  }\n\n  module.exports = computedStyleToInlineStyle;\n});"
  },
  {
    "path": "src/data/extra/web/js/crosscopy.js",
    "content": "// Class to cross copy contents to different targets.\nclass CrossCopy {\n    constructor(p_adapter) {\n        this.adapter = p_adapter;\n\n        // Target name -> {rules}.\n        this.targets = {};\n\n        // Add targets here.\n        this.addTargetNoBackground();\n\n        this.addTargetEvernote();\n\n        this.addTargetOneNote();\n\n        this.addTargetMicrosoftWord();\n\n        this.addTargetWeChatPublicAccountEditor();\n\n        this.addTargetRawHtml();\n\n        this.updateTargets();\n\n        // Mark styles used to transform to span.\n        this.markStyle = null;\n    }\n\n    updateTargets() {\n        let targets = [];\n        for (let key in this.targets) {\n            targets.push(key);\n        }\n\n        this.adapter.setCrossCopyTargets(targets);\n    }\n\n    // ATTENTION: please add one entry in MarkdownViewerAdapter's getCrossCopyTargetDisplayName() for translations.\n    addTarget(p_name, p_callback) {\n        this.targets[p_name] = p_callback;\n    }\n\n    addTargetNoBackground() {\n        let rules = [\n            CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'svg']),\n            CrossCopy.rule_fixRelativeImage\n        ];\n\n        this.addTarget('No Background', {\n            rules: rules\n        });\n    }\n\n    addTargetEvernote() {\n        let rules = [\n            CrossCopy.rule_addFragment,\n            CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'pre', 'svg']),\n            CrossCopy.rule_replaceLocalImageWithLabel\n        ];\n\n        this.addTarget('Evernote', {\n            rules: rules\n        });\n    }\n\n    addTargetOneNote() {\n        let rules = [\n            CrossCopy.rule_addFragment,\n            CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'svg']),\n            CrossCopy.rule_replaceSvgWithLabel,\n            CrossCopy.rule_fixRelativeImage,\n            CrossCopy.rule_removeMarginPadding.bind(undefined, []),\n            CrossCopy.rule_transformMarkToSpan\n        ];\n\n        this.addTarget('OneNote', {\n            rules: rules\n        });\n    }\n\n    addTargetMicrosoftWord() {\n        let rules = [\n            CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'pre', 'svg']),\n            CrossCopy.rule_replaceSvgWithLabel,\n            CrossCopy.rule_fixRelativeImage,\n            CrossCopy.rule_removeMarginPadding.bind(undefined, []),\n            CrossCopy.rule_transformMarkToSpan,\n        ];\n\n        this.addTarget('Microsoft Word', {\n            rules: rules\n        });\n    }\n\n    addTargetWeChatPublicAccountEditor() {\n        let rules = [\n            CrossCopy.rule_removeBackground.bind(undefined, ['mark', 'pre', 'svg']),\n            CrossCopy.rule_replaceLocalImageWithLabel,\n            CrossCopy.rule_removeMarginPadding.bind(undefined, [])\n        ];\n\n        this.addTarget('WeChat Public Account Editor', {\n            rules: rules\n        });\n    }\n\n    addTargetRawHtml() {\n        let rules = [\n            CrossCopy.rule_removeAllStyles.bind(undefined, [])\n        ];\n\n        this.addTarget('Raw HTML', {\n            rules: rules\n        });\n    }\n\n    crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html) {\n        let target = this.targets[p_target];\n        if (!target) {\n            console.error(\"no matching cross-copy target\", p_target);\n            this.adapter.setCrossCopyResult(p_id, p_timeStamp, p_html);\n        }\n\n        let info = {\n            inst: this,\n            baseUrl: p_baseUrl\n        };\n\n        let result = this.executeRules(target.rules, info, p_html);\n        this.adapter.setCrossCopyResult(p_id, p_timeStamp, result);\n    }\n\n    executeRules(p_rules, p_info, p_html) {\n        if (!p_rules || p_rules.length == 0) {\n            return p_html;\n        }\n\n        let doc = new DOMParser().parseFromString(p_html, \"text/html\");\n\n        // Remove <head>.\n        let htmlNode = doc.firstElementChild;\n        htmlNode.removeChild(htmlNode.firstElementChild);\n\n        // Remove the copy button in code blocks.\n        let codeToolBars = doc.querySelectorAll('div.code-toolbar div.toolbar');\n        for (let i = 0; i < codeToolBars.length; ++i) {\n            let paNode = codeToolBars[i].parentNode;\n            paNode.removeChild(codeToolBars[i]);\n        }\n\n        // Go through each rule.\n        for (let i = 0; i < p_rules.length; ++i) {\n            p_rules[i](p_info, doc);\n        }\n\n        return doc.documentElement.outerHTML;\n    }\n\n    getMarkStyle() {\n        if (this.markStyle) {\n            return this.markStyle;\n        }\n\n        let marks = this.adapter.contentContainer.getElementsByTagName('mark');\n        if (marks.length > 0) {\n            let style = window.getComputedStyle(marks[0], null);\n            this.markStyle = {\n                color: style.color,\n                backgroundColor: style.backgroundColor\n            }\n        }\n        return this.markStyle;\n    }\n\n    // Add <!--StartFragment--> and <!--EndFragment--> inside <body>.\n    static rule_addFragment(p_info, p_doc) {\n        let bodyNode = p_doc.getElementsByTagName('body')[0];\n        let startNode = p_doc.createComment('StartFragment');\n        let endNode = p_doc.createComment('EndFragment');\n        if (bodyNode.firstChild) {\n            bodyNode.insertBefore(startNode, bodyNode.firstChild);\n            bodyNode.appendChild(endNode);\n        } else {\n            bodyNode.appendChild(startNode);\n            bodyNode.appendChild(endNode);\n        }\n    }\n\n    // Remove background color of all tags except @p_tagsToExclude.\n    static rule_removeBackground(p_tagsToExclude, p_info, p_doc) {\n        CrossCopy.removeStyles(p_tagsToExclude, ['background', 'backgroundColor'], p_doc);\n    }\n\n    static rule_fixRelativeImage(p_info, p_doc) {\n        let imgs = p_doc.getElementsByTagName('img');\n        for (let i = 0; i < imgs.length; ++i) {\n            let img = imgs[i];\n            let src = img.getAttribute('src');\n            let httpRegExp = new RegExp('^http[s]://');\n            if (httpRegExp.test(src)) {\n                continue;\n            }\n\n            let dataRegExp = new RegExp('^data:image/');\n            if (dataRegExp.test(src)) {\n                continue;\n            }\n\n            let fileRegExp = new RegExp('^file://');\n            if (!fileRegExp.test(src)) {\n                // img.src will automatically resolve the absolute url from relative one.\n                img.setAttribute('src', img.src);\n            }\n\n            // Check if we need to fix the encoding.\n            // Win needs only space-encoded.\n            if (window.vxcore.os === \"Windows\") {\n                let decodedUrl = decodeURI(img.src);\n                if (decodedUrl.length != img.src.length) {\n                    // May need other encoding.\n                    img.src = decodedUrl.replace(/ /g, '%20');\n                }\n            }\n        }\n    }\n\n    static rule_removeMarginPadding(p_tagsToExclude, p_info, p_doc) {\n        CrossCopy.removeStyles(p_tagsToExclude,\n                               ['margin-left', 'margin-right', 'padding-left', 'padding-right'],\n                               p_doc);\n    }\n\n    static removeStyles(p_tagsToExclude, p_styles, p_doc) {\n        let allElements = p_doc.getElementsByTagName('*');\n        for (let i = 0; i < allElements.length; ++i) {\n            let ele = allElements[i];\n            if (p_tagsToExclude.indexOf(ele.tagName.toLowerCase()) > -1) {\n                continue;\n            }\n\n            for (let j = 0; j < p_styles.length; ++j) {\n                ele.style.removeProperty(p_styles[j]);\n            }\n        }\n    }\n\n    static rule_transformMarkToSpan(p_info, p_doc) {\n        let marks = p_doc.getElementsByTagName('mark');\n        while (marks.length > 0) {\n            let mark = marks[0];\n            let spanNode = p_doc.createElement('span');\n            spanNode.innerHTML = mark.innerHTML;\n\n            let markStyle = p_info.inst.getMarkStyle();\n            if (markStyle) {\n                spanNode.style.color = markStyle.color;\n                spanNode.style.backgroundColor = markStyle.backgroundColor;\n            }\n\n            mark.parentNode.replaceChild(spanNode, mark);\n        }\n    }\n\n    // Seems not needed with Prism highlight.\n    static rule_useCodeBackgroundForPre(p_info, p_doc) {\n        let preCodes = p_doc.querySelectorAll('pre code');\n        for (let i = 0; i < preCodes.length; ++i) {\n            let preNode = preCodes[i].parentNode;\n            preNode.style.background = preCodes[i].style.background;\n            preNode.style.backgroundColor = preCodes[i].style.backgroundColor;\n        }\n    }\n\n    // TODO: if we deploy a http server, can we eliminate this tricky rule?\n    static rule_replaceLocalImageWithLabel(p_info, p_doc) {\n        let imgs = p_doc.getElementsByTagName('img');\n        for (let i = 0; i < imgs.length; ++i) {\n            let img = imgs[i];\n            let httpRegExp = new RegExp('^http[s]://');\n            if (httpRegExp.test(img.src)) {\n                continue;\n            }\n\n            let dataRegExp = new RegExp('^data:image/');\n            if (dataRegExp.test(img.src)) {\n                continue;\n            }\n\n            let spanNode = p_doc.createElement('span');\n            spanNode.style = 'font-weight: bold; color: white; background-color: red;'\n            spanNode.textContent = 'INSERT_IMAGE_HERE';\n            img.parentNode.replaceChild(spanNode, img);\n            --i;\n        }\n    }\n\n    static rule_removeAllStyles(p_tagsToExclude, p_info, p_doc) {\n        let allElements = p_doc.getElementsByTagName('*');\n        for (let i = 0; i < allElements.length; ++i) {\n            let ele = allElements[i];\n            if (p_tagsToExclude.indexOf(ele.tagName.toLowerCase()) > -1) {\n                continue;\n            }\n\n            ele.style = '';\n        }\n    }\n\n    static rule_replaceSvgWithLabel(p_info, p_doc) {\n        let allSvgs = p_doc.getElementsByTagName('svg');\n        while (allSvgs.length > 0) {\n            let spanNode = p_doc.createElement('span');\n            spanNode.style = 'font-weight: bold; color: white; background-color: red;'\n            spanNode.textContent = 'INSERT_SVG_HERE';\n\n            let node = allSvgs[0];\n            if (node.parentNode.childElementCount == 1 && node.parentNode.tagName.toLowerCase() === 'div') {\n                node = node.parentNode;\n            }\n            node.parentNode.replaceChild(spanNode, node);\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/easyaccess.js",
    "content": "class EasyAccess {\n    constructor() {\n        // Implement mouse drag with Ctrl and left button pressed to scroll.\n        this.lastMouseClientX = 0;\n        this.lastMouseClientY = 0;\n        this.readyToScroll = false;\n        this.scrolled = false;\n\n        // Vi-like navigation.\n        // Pending keys for keydown.\n        this.pendingKeys = [];\n        // The repeat token from user input.\n        this.repeatToken =  0;\n\n        window.vxcore.on('ready', () => {\n            this.setupMouseMove();\n            this.setupViNavigation();\n            this.setupZoomOnWheel();\n        });\n    }\n\n    setupMouseMove() {\n        window.addEventListener('mousedown', (e) => {\n            e = e || window.event;\n            let isCtrl = window.vxcore.os === 'Mac' ? e.metaKey : e.ctrlKey;\n            // Left button and Ctrl key.\n            if (e.buttons == 1\n                && isCtrl\n                && window.getSelection().type != 'Range'\n                && !window.vxImageViewer.isViewingImage()) {\n                this.lastMouseClientX = e.clientX;\n                this.lastMouseClientY = e.clientY;\n                this.readyToScroll = true;\n                this.scrolled = false;\n                e.preventDefault();\n            } else {\n                this.readyToScroll = false;\n                this.scrolled = false;\n            }\n        });\n\n        window.addEventListener('mouseup', (e) => {\n            e = e || window.event;\n            if (this.scrolled || this.readyToScroll) {\n                // Have been scrolled, restore the cursor style.\n                document.body.style.cursor = \"auto\";\n                e.preventDefault();\n            }\n\n            this.readyToScroll = false;\n            this.scrolled = false;\n        });\n\n        window.addEventListener('mousemove', (e) => {\n            e = e || window.event;\n            if (this.readyToScroll) {\n                let deltaX = e.clientX - this.lastMouseClientX;\n                let deltaY = e.clientY - this.lastMouseClientY;\n\n                let threshold = 5;\n                if (Math.abs(deltaX) >= threshold || Math.abs(deltaY) >= threshold) {\n                    this.lastMouseClientX = e.clientX;\n                    this.lastMouseClientY = e.clientY;\n\n                    if (!this.scrolled) {\n                        this.scrolled = true;\n                        document.body.style.cursor = \"all-scroll\";\n                    }\n\n                    let scrollX = -deltaX;\n                    let scrollY = -deltaY;\n                    window.scrollBy(scrollX, scrollY);\n                }\n\n                e.preventDefault();\n            }\n        });\n    }\n\n    setupViNavigation() {\n        document.addEventListener('keydown', (e) => {\n            // Need to clear pending kyes.\n            let needClear = true;\n\n            // This event has been handled completely. No need to call the default handler.\n            let accepted = true;\n\n            e = e || window.event;\n            let key = null;\n            let shift = null;\n            let ctrl = null;\n            let meta = null;\n            if (e.which) {\n                key = e.which;\n            } else {\n                key = e.keyCode;\n            }\n\n            shift = !!e.shiftKey;\n            ctrl = !!e.ctrlKey;\n            meta = !!e.metaKey;\n            let isCtrl = window.vxcore.os === 'Mac' ? e.metaKey : e.ctrlKey;\n            switch (key) {\n            // Skip Ctrl, Shift, Alt, Supper.\n            case 16:\n            case 17:\n            case 18:\n            case 91:\n            case 92:\n                needClear = false;\n                break;\n\n            // 0 - 9.\n            case 48:\n            case 49:\n            case 50:\n            case 51:\n            case 52:\n            case 53:\n            case 54:\n            case 55:\n            case 56:\n            case 57:\n            case 96:\n            case 97:\n            case 98:\n            case 99:\n            case 100:\n            case 101:\n            case 102:\n            case 103:\n            case 104:\n            case 105:\n            {\n                if (this.pendingKeys.length != 0 || ctrl || shift || meta) {\n                    accepted = false;\n                    break;\n                }\n\n                let num = key >= 96 ? key - 96 : key - 48;\n                this.repeatToken = this.repeatToken * 10 + num;\n                needClear = false;\n                break;\n            }\n\n            case 74: // J\n                if (!shift && (!ctrl || isCtrl) && (!meta || isCtrl)) {\n                    EasyAccess.scroll(true);\n                    break;\n                }\n\n                accepted = false;\n                break;\n\n            case 75: // K\n                if (!shift && (!ctrl || isCtrl) && (!meta || isCtrl)) {\n                    EasyAccess.scroll(false);\n                    break;\n                }\n\n                accepted = false;\n                break;\n\n            case 72: // H\n                if (!ctrl && !shift && !meta) {\n                    window.scrollBy(-100, 0);\n                    break;\n                }\n\n                accepted = false;\n                break;\n\n            case 76: // L\n                if (!ctrl && !shift && !meta) {\n                    window.scrollBy(100, 0);\n                    break;\n                }\n\n                accepted = false;\n                break;\n\n            case 71: // G\n                if (shift) {\n                    if (this.pendingKeys.length == 0) {\n                        let scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft || window.pageXOffset;\n                        let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;\n                        window.scrollTo(scrollLeft, scrollHeight);\n                        break;\n                    }\n                } else if (!ctrl && !meta) {\n                    if (this.pendingKeys.length == 0) {\n                        // First g, pend it.\n                        this.pendingKeys.push({\n                            key: key,\n                            ctrl: ctrl,\n                            shift: shift\n                        });\n\n                        needClear = false;\n                        break;\n                    } else if (this.pendingKeys.length == 1) {\n                        let pendKey = this.pendingKeys[0];\n                        if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) {\n                            let scrollLeft = document.documentElement.scrollLeft\n                                             || document.body.scrollLeft\n                                             || window.pageXOffset;\n                            window.scrollTo(scrollLeft, 0);\n                            break;\n                        }\n                    }\n                }\n\n                accepted = false;\n                break;\n\n            case 85: // U\n                if (ctrl) {\n                    let clientHeight = document.documentElement.clientHeight;\n                    window.scrollBy(0, -clientHeight / 2);\n                    break;\n                }\n\n                accepted = false;\n                break;\n\n            case 68: // D\n                if (ctrl) {\n                    let clientHeight = document.documentElement.clientHeight;\n                    window.scrollBy(0, clientHeight / 2);\n                    break;\n                }\n\n                accepted = false;\n                break;\n\n            case 219: // [ or {\n            {\n                let repeat = this.repeatToken < 1 ? 1 : this.repeatToken;\n                if (shift) {\n                    // {\n                    if (this.pendingKeys.length == 1) {\n                        let pendKey = this.pendingKeys[0];\n                        if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) {\n                            // [{, jump to previous title at a higher level.\n                            this.jumpTitle(false, -1, repeat);\n                            break;\n                        }\n                    }\n                } else if (!ctrl && !meta) {\n                    // [\n                    if (this.pendingKeys.length == 0) {\n                        // First [, pend it.\n                        this.pendingKeys.push({\n                            key: key,\n                            ctrl: ctrl,\n                            shift: shift\n                        });\n\n                        needClear = false;\n                        break;\n                    } else if (this.pendingKeys.length == 1) {\n                        let pendKey = this.pendingKeys[0];\n                        if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) {\n                            // [[, jump to previous title.\n                            this.jumpTitle(false, 1, repeat);\n                            break;\n                        } else if (pendKey.key == 221 && !pendKey.shift && !pendKey.ctrl) {\n                            // ][, jump to next title at the same level.\n                            this.jumpTitle(true, 0, repeat);\n                            break;\n                        }\n                    }\n                }\n\n                accepted = false;\n                break;\n            }\n\n            case 221: // ] or }\n            {\n                let repeat = this.repeatToken < 1 ? 1 : this.repeatToken;\n                if (shift) {\n                    // }\n                    if (this.pendingKeys.length == 1) {\n                        let pendKey = this.pendingKeys[0];\n                        if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) {\n                            // ]}, jump to next title at a higher level.\n                            this.jumpTitle(true, -1, repeat);\n                            break;\n                        }\n                    }\n                } else if (!ctrl && !meta) {\n                    // ]\n                    if (this.pendingKeys.length == 0) {\n                        // First ], pend it.\n                        this.pendingKeys.push({\n                            key: key,\n                            ctrl: ctrl,\n                            shift: shift\n                        });\n\n                        needClear = false;\n                        break;\n                    } else if (this.pendingKeys.length == 1) {\n                        let pendKey = this.pendingKeys[0];\n                        if (pendKey.key == key && !pendKey.shift && !pendKey.ctrl) {\n                            // ]], jump to next title.\n                            this.jumpTitle(true, 1, repeat);\n                            break;\n                        } else if (pendKey.key == 219 && !pendKey.shift && !pendKey.ctrl) {\n                            // [], jump to previous title at the same level.\n                            this.jumpTitle(false, 0, repeat);\n                            break;\n                        }\n                    }\n                }\n\n                accepted = false;\n                break;\n            }\n\n            default:\n                accepted = false;\n                break;\n            }\n\n            if (needClear) {\n                this.repeatToken = 0;\n                this.pendingKeys = [];\n            }\n\n            if (accepted) {\n                e.preventDefault();\n            } else {\n                window.vxcore.setKeyPress(key, ctrl, shift, meta);\n            }\n        });\n    }\n\n    // @forward: jump forward or backward.\n    // @relativeLevel: 0 for the same level as current header;\n    //                 negative value for upper level;\n    //                 positive value is ignored.\n    jumpTitle(forward, relativeLevel, repeat) {\n        let headings = window.vxcore.nodeLineMapper.headingNodes;\n        if (headings.length == 0) {\n            return;\n        }\n\n        let currentHeadingIdx = window.vxcore.nodeLineMapper.currentHeadingIndex();\n        if (currentHeadingIdx == -1) {\n            // At the beginning, before any headings.\n            if (relativeLevel < 0 || !forward) {\n                return;\n            }\n        }\n\n        let targetIdx = -1;\n        // -1: skip level check.\n        let targetLevel = 0;\n\n        let delta = 1;\n        if (!forward) {\n            delta = -1;\n        }\n\n        let scrollTop = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;\n        for (targetIdx = (currentHeadingIdx == -1 ? 0 : currentHeadingIdx);\n             targetIdx >= 0 && targetIdx < headings.length;\n             targetIdx += delta) {\n            let level = parseInt(headings[targetIdx].tagName.substr(1));\n            if (targetLevel == 0) {\n                targetLevel = level;\n                if (relativeLevel < 0) {\n                    targetLevel += relativeLevel;\n                    if (targetLevel < 1) {\n                        // Invalid level.\n                        return;\n                    }\n                } else if (relativeLevel > 0) {\n                    targetLevel = -1;\n                }\n            }\n\n            if (targetLevel == -1 || level == targetLevel) {\n                if (targetIdx == currentHeadingIdx) {\n                    // If current heading is visible, skip it.\n                    // Minus 2 to tolerate some margin.\n                    if (forward || scrollTop  - 2 <= headings[targetIdx].offsetTop) {\n                        continue;\n                    }\n                }\n\n                if (--repeat == 0) {\n                    break;\n                }\n            } else if (level < targetLevel) {\n                return;\n            }\n        }\n\n        if (targetIdx < 0 || targetIdx >= headings.length) {\n            return;\n        }\n\n        window.vxcore.nodeLineMapper.scrollToNode(headings[targetIdx], false, false);\n        window.setTimeout(function() {\n            window.vxcore.nodeLineMapper.updateCurrentHeading();\n        }, 1000);\n    };\n\n    setupZoomOnWheel() {\n        window.addEventListener('wheel', (e) => {\n            e = e || window.event;\n            let isCtrl = window.vxcore.os === 'Mac' ? e.metaKey : e.ctrlKey;\n            if (isCtrl) {\n                if (e.deltaY != 0) {\n                    window.vxcore.zoom(e.deltaY < 0);\n                }\n                e.preventDefault();\n            }\n        });\n    }\n\n    static scroll(p_up) {\n        let delta = 100;\n        if (p_up) {\n            window.scrollBy(0, delta);\n        } else {\n            window.scrollBy(0, -delta);\n        }\n    }\n}\n\nwindow.vxEasyAccess = new EasyAccess;\n"
  },
  {
    "path": "src/data/extra/web/js/eventemitter.js",
    "content": "/* An EventEmitter implementation. */\nclass EventEmitter {\n    constructor() {\n        this.events = {};\n    }\n\n    on(event, listener) {\n        if (typeof this.events[event] !== 'object') {\n            this.events[event] = [];\n        }\n        this.events[event].push(listener);\n        return () => this.removeListener(event, listener);\n    }\n\n    removeListener(event, listener) {\n        if (typeof this.events[event] === 'object') {\n            const idx = this.events[event].indexOf(listener);\n            if (idx > -1) {\n                this.events[event].splice(idx, 1);\n            }\n        }\n    }\n\n    emit(event, ...args) {\n        if (typeof this.events[event] === 'object') {\n            console.log('emit event ' + event);\n            this.events[event].forEach(listener => listener.apply(this, args));\n        }\n    }\n\n    once(event, listener) {\n        const remove = this.on(event, (...args) => {\n            remove();\n            listener.apply(this, args);\n        });\n    }\n};\n"
  },
  {
    "path": "src/data/extra/web/js/flowchart.js/README.md",
    "content": "# [flowchart.js](https://github.com/adrai/flowchart.js)\nv1.18.0\n\n# [Raphael](https://github.com/DmitryBaranovskiy/raphael)\nv2.3.0\n"
  },
  {
    "path": "src/data/extra/web/js/flowchartjs.js",
    "content": "// Does not support dynamically libraries loading.\nclass FlowchartJs extends GraphRenderer {\n    constructor() {\n        super();\n\n        this.name = 'flowchartjs';\n\n        this.graphDivClass = 'vx-flowchartjs-graph';\n\n        this.langs = ['flow', 'flowchart'];\n    }\n\n    // Render @p_node as Flowchart.js graph.\n    // Return true on success.\n    renderOne(p_node, p_idx) {\n        let graph = null;\n        try {\n            graph = flowchart.parse(p_node.textContent);\n        } catch (p_err) {\n            console.error('failed to render Flowchart.js', p_err);\n            this.finishRenderingOne();\n            return false;\n        }\n\n        if (!graph) {\n            this.finishRenderingOne();\n            return false;\n        }\n\n        // Create a div container.\n        let graphDiv = document.createElement('div');\n        graphDiv.id = 'vx-flowchartjs-graph-' + p_idx;\n        graphDiv.classList.add(this.graphDivClass);\n\n        Utils.checkSourceLine(p_node, graphDiv);\n\n        let childNode = p_node;\n        let parentNode = p_node.parentNode;\n        if (parentNode.tagName.toLowerCase() == 'pre') {\n            childNode = parentNode;\n            parentNode = parentNode.parentNode;\n        }\n        parentNode.replaceChild(graphDiv, childNode);\n\n        // Draw on it after adding div to page.\n        try {\n            graph.drawSVG(graphDiv.id);\n            window.vxImageViewer.setupSVGToView(graphDiv.children[0], true);\n        } catch (p_err) {\n            console.error('failed to draw Flowchart.js SVG', p_err);\n            parentNode.replaceChild(childNode, graphDiv);\n            this.finishRenderingOne();\n            return false;\n        }\n\n        this.finishRenderingOne();\n        return true;\n    }\n\n    // Render a graph from @p_text.\n    // Will append a div to @p_container and return the div.\n    // p_callback(graphDiv).\n    renderText(p_container, p_text, p_idx, p_callback) {\n        let graph = null;\n\n        try {\n            graph = flowchart.parse(p_text);\n        } catch (p_err) {\n            console.error('failed to render Flowchart.js', p_err);\n            graph = null;\n        }\n\n        if (!graph) {\n            p_callback(null);\n            return;\n        }\n\n        // Create a div container.\n        let graphDiv = document.createElement('div');\n        graphDiv.id = 'vx-flowchartjs-graph-stand-alone-' + p_idx;\n\n        p_container.appendChild(graphDiv);\n\n        // Draw on it after adding div to page.\n        try {\n            graph.drawSVG(graphDiv.id);\n        } catch (p_err) {\n            console.error('failed to draw Flowchart.js SVG', p_err);\n            p_container.removeChild(graphDiv);\n            return null;\n        }\n\n        this.fixStandAloneGraph(graphDiv.firstElementChild);\n\n        p_callback(graphDiv);\n    }\n\n    // Raphael will reuse some global unique marker.\n    // We need to insert it into the graph to make it stand-alone.\n    // @p_graph: the <svg> node.\n    fixStandAloneGraph(p_graph) {\n        let markerBlock = document.getElementById('raphael-marker-block');\n        if (!p_graph.contains(markerBlock)) {\n            let clonedMarkerBlock = markerBlock.cloneNode(true);\n            let defs = p_graph.getElementsByTagName('defs');\n            if (defs.length > 0) {\n                defs[0].insertAdjacentElement('afterbegin', clonedMarkerBlock);\n            }\n        }\n    }\n}\n\nwindow.vxcore.registerWorker(new FlowchartJs());\n"
  },
  {
    "path": "src/data/extra/web/js/graphcache.js",
    "content": "// Cache all rendered graph.\n// {type, format, text} -> data.\nclass GraphCache {\n    constructor() {\n        this.cache = new LruCache();\n    }\n\n    generateKey(p_type, p_format, p_text) {\n        return p_type + p_format + p_text;\n    }\n\n    set(p_type, p_format, p_text, p_graph) {\n        this.cache.set(generateKey(p_type, p_format, p_text), p_graph);\n    }\n\n    get(p_type, p_format, p_text, p_graph) {\n        return this.cache.get(generateKey(p_type, p_format, p_text));\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/graphpreviewer.js",
    "content": "class GraphPreviewer {\n    constructor(p_vxcore, p_container) {\n        this.vxcore = p_vxcore;\n\n        // Preview will take place here.\n        this.container = p_container;\n\n        this.flowchartJsIdx = 0;\n        this.waveDromIdx = 0;\n        this.mermaidIdx = 0;\n\n        // Used to decide the width with 100% relative value.\n        this.windowWidth = 800;\n\n        this.firstPreview = true;\n\n        this.currentColor = null;\n\n        window.addEventListener(\n            'resize',\n            () => {\n                if (window.innerWidth > 0) {\n                    this.windowWidth = window.innerWidth;\n                }\n            },\n            { passive: true });\n    }\n\n    // Interface 1.\n    previewGraph(p_id, p_timeStamp, p_lang, p_text) {\n        if (p_text.length == 0) {\n            this.setGraphPreviewData(p_id, p_timeStamp);\n            return;\n        }\n\n        this.initOnFirstPreview();\n\n        if (p_lang === 'flow' || p_lang === 'flowchart') {\n            this.vxcore.getWorker('flowchartjs').renderText(this.container,\n                p_text,\n                this.flowchartJsIdx++,\n                (graphDiv) => {\n                    this.processGraph(p_id, p_timeStamp, graphDiv);\n                });\n        } else if (p_lang === 'wavedrom') {\n            this.vxcore.getWorker('wavedrom').renderText(this.container,\n                p_text,\n                this.waveDromIdx++,\n                (graphDiv) => {\n                    this.processGraph(p_id, p_timeStamp, graphDiv);\n                });\n        } else if (p_lang === 'mermaid') {\n            this.vxcore.getWorker('mermaid').renderText(this.container,\n                p_text,\n                this.mermaidIdx++,\n                (graphDiv) => {\n                    this.fixSvgRelativeWidth(graphDiv.firstElementChild);\n                    this.processGraph(p_id, p_timeStamp, graphDiv);\n                });\n        } else if (p_lang === 'puml' || p_lang === 'plantuml') {\n            let func = function(p_previewer, p_id, p_timeStamp) {\n                let previewer = p_previewer;\n                let id = p_id;\n                let timeStamp = p_timeStamp;\n                return function(p_format, p_data) {\n                    previewer.setGraphPreviewData(id, timeStamp, p_format, p_data, false, true);\n                };\n            };\n            this.vxcore.getWorker('plantuml').renderText(p_text, func(this, p_id, p_timeStamp));\n            return;\n        } else if (p_lang === 'dot' || p_lang === 'graphviz') {\n            let func = function(p_previewer, p_id, p_timeStamp) {\n                let previewer = p_previewer;\n                let id = p_id;\n                let timeStamp = p_timeStamp;\n                return function(p_svgNode) {\n                    previewer.setGraphPreviewData(id, timeStamp, 'svg', p_svgNode.outerHTML, false, true);\n                };\n            };\n            this.vxcore.getWorker('graphviz').renderText(p_text, func(this, p_id, p_timeStamp));\n            return;\n        } else if (p_lang === 'mathjax') {\n            this.renderMath(p_id, p_timeStamp, p_text, null);\n            return;\n        } else {\n            this.setGraphPreviewData(p_id, p_timeStamp);\n        }\n    }\n\n    // Interface 2.\n    previewMath(p_id, p_timeStamp, p_text) {\n        if (p_text.length == 0) {\n            this.setMathPreviewData(p_id, p_timeStamp);\n            return;\n        }\n\n        this.initOnFirstPreview();\n\n        // Do we need to go through TexMath plugin? I don't think so.\n        this.renderMath(p_id, p_timeStamp, p_text, this.setMathPreviewData.bind(this));\n    }\n\n    initOnFirstPreview() {\n        if (this.firstPreview) {\n            this.firstPreview = false;\n\n            let contentStyle = window.getComputedStyle(this.vxcore.contentContainer);\n            this.currentColor = contentStyle.getPropertyValue('color');\n            console.log('currentColor', this.currentColor);\n        }\n    }\n\n    renderMath(p_id, p_timeStamp, p_text, p_dataSetter) {\n        let func = function(p_previewer, p_id, p_timeStamp) {\n            let previewer = p_previewer;\n            let id = p_id;\n            let timeStamp = p_timeStamp;\n            return function(p_svgNode) {\n                previewer.fixSvgCurrentColor(p_svgNode);\n                previewer.fixSvgRelativeWidth(p_svgNode);\n                previewer.processSvgAsPng(id, timeStamp, p_svgNode, p_dataSetter);\n            };\n        };\n        this.vxcore.getWorker('mathjax').renderText(this.container,\n                                                    p_text,\n                                                    func(this, p_id, p_timeStamp));\n    }\n\n    processGraph(p_id, p_timeStamp, p_graphDiv) {\n        if (!p_graphDiv) {\n            console.error('failed to preview graph', p_id, p_timeStamp);\n            this.setGraphPreviewData(p_id, p_timeStamp);\n            return;\n        }\n\n        this.container.removeChild(p_graphDiv);\n\n        this.processSvgAsPng(p_id, p_timeStamp, p_graphDiv.firstElementChild);\n    }\n\n    processSvgAsPng(p_id, p_timeStamp, p_svgNode, p_dataSetter = null) {\n        if (!p_dataSetter) {\n            p_dataSetter = this.setGraphPreviewData.bind(this);\n        }\n        if (!p_svgNode) {\n            console.warn('failed to preview graph', p_id, p_timeStamp);\n            p_dataSetter(p_id, p_timeStamp);\n            return;\n        }\n\n        this.scaleSvg(p_svgNode);\n\n        SvgToImage.svgToImage(p_svgNode.outerHTML,\n            { crossOrigin: 'Anonymous' },\n            (p_err, p_image) => {\n                if (p_err) {\n                    p_dataSetter(p_id, p_timeStamp);\n                    return;\n                }\n\n                let canvas = document.createElement('canvas');\n                let ctx = canvas.getContext('2d');\n                canvas.height = p_image.height;\n                canvas.width = p_image.width;\n                ctx.drawImage(p_image, 0, 0);\n                let dataUrl = null;\n                try {\n                    dataUrl = canvas.toDataURL();\n                } catch (err) {\n                    // Tainted canvas may be caused by the <foreignObject> in SVG.\n                    console.error('failed to draw image on canvas', err);\n\n                    // Try simply using the SVG.\n                    p_dataSetter(p_id, p_timeStamp, 'svg', p_svgNode.outerHTML, false, false);\n                    return;\n                }\n\n                let png = dataUrl ? dataUrl.substring(dataUrl.indexOf(',') + 1) : '';\n                p_dataSetter(p_id, p_timeStamp, 'png', png, true, false);\n        });\n    }\n\n    // Fix SVG with width and height being '100%'.\n    fixSvgRelativeWidth(p_svgNode) {\n        if (!p_svgNode) {\n            return;\n        }\n\n        if (p_svgNode.getAttribute('width').indexOf('%') != -1) {\n            // Try maxWidth.\n            if (p_svgNode.style.maxWidth && p_svgNode.style.maxWidth.endsWith('px') && p_svgNode.style.maxWidth != \"0px\") {\n                p_svgNode.setAttribute('width', p_svgNode.style.maxWidth);\n            } else {\n                // Set as window width.\n                p_svgNode.setAttribute('width', Math.max(this.windowWidth - 100, 100) + 'px');\n            }\n        }\n    }\n\n    // Fix SVG with stroke=\"currentColor\" and fill=\"currentColor\".\n    fixSvgCurrentColor(p_svgNode) {\n        let currentColor = this.currentColor;\n        if (currentColor && p_svgNode) {\n            let nodes = p_svgNode.querySelectorAll(\"g[fill='currentColor']\");\n            for (let i = 0; i < nodes.length; ++i) {\n                let node = nodes[i];\n                if (node.getAttribute('stroke') === 'currentColor') {\n                    node.setAttribute('stroke', currentColor);\n                }\n                if (node.getAttribute('fill') === 'currentColor') {\n                    node.setAttribute('fill', currentColor);\n                }\n            }\n        }\n    }\n\n    scaleSvg(p_svgNode) {\n        let scaleFactor = window.devicePixelRatio;\n        if (scaleFactor == 1 || !p_svgNode) {\n            return;\n        }\n\n        let width = p_svgNode.getAttribute('width')\n        if (width && width.indexOf('%') == -1) {\n            p_svgNode.width.baseVal.valueInSpecifiedUnits *= scaleFactor;\n        }\n        let height = p_svgNode.getAttribute('height')\n        if (height && height.indexOf('%') == -1) {\n            p_svgNode.height.baseVal.valueInSpecifiedUnits *= scaleFactor;\n        }\n    }\n\n    setGraphPreviewData(p_id, p_timeStamp, p_format = '', p_data = '', p_base64 = false, p_needScale = false) {\n        let previewData = {\n            id: p_id,\n            timeStamp: p_timeStamp,\n            format: p_format,\n            data: p_data,\n            base64: p_base64,\n            needScale: p_needScale\n        };\n        this.vxcore.setGraphPreviewData(previewData);\n    }\n\n    setMathPreviewData(p_id, p_timeStamp, p_format = '', p_data = '', p_base64 = false, p_needScale = false) {\n        let previewData = {\n            id: p_id,\n            timeStamp: p_timeStamp,\n            format: p_format,\n            data: p_data,\n            base64: p_base64,\n            needScale: p_needScale\n        };\n        this.vxcore.setMathPreviewData(previewData);\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/graphrenderer.js",
    "content": "// Should be singleton for each renderer.\nclass GraphRenderer extends VxWorker {\n    constructor() {\n        super();\n\n        this.initialized = false;\n        this.graphIdx = 0;\n        this.graphDivClass = '';\n\n        // Nodes need to render.\n        this.nodesToRender = [];\n        this.numOfRenderedNodes = 0;\n\n        // Used for loading scripts dynamically.\n        this.scriptFolderPath = Utils.parentFolder(document.currentScript.src);\n\n        // Extra scripts that need to load dynamically.\n        this.extraScripts = [];\n\n        // Langs for this graph render to render.\n        this.langs = [];\n    }\n\n    reset() {\n        this.graphIdx = 0;\n        this.nodesToRender = [];\n        this.numOfRenderedNodes = 0;\n    }\n\n    registerInternal() {\n        this.vxcore.on('basicMarkdownRendered', () => {\n            this.reset();\n            this.renderCodeNodes();\n        });\n\n        this.vxcore.getWorker('markdownit').addLangsToSkipHighlight(this.langs);\n    }\n\n    // Return ture if we could continue.\n    // Initialize may load additional libraries dynamically, in which case we need\n    // to suspend our execution for now and call p_callback() later.\n    initialize(p_callback) {\n        if (this.initialized) {\n            return true;\n        }\n\n        console.info('render initialized:', this.name);\n\n        this.initialized = true;\n        if (this.extraScripts.length > 0) {\n            Utils.loadScripts(this.extraScripts, p_callback);\n            return false;\n        }\n\n        return true;\n    }\n\n    // Interface 1.\n    // Fetch nodes with class @p_classList in @p_node and render as graph.\n    render(p_node, p_classList) {\n        // Collect nodes to render.\n        this.nodesToRender = [];\n        this.numOfRenderedNodes = 0;\n        p_classList.forEach((p_class) => {\n            let nodes = p_node.getElementsByClassName(p_class);\n            if (nodes.length == 0) {\n                return;\n            }\n\n            for (let i = 0; i < nodes.length; ++i) {\n                // Do we need to de-duplicate nodes?\n                this.nodesToRender.push(nodes[i]);\n            }\n        });\n\n        this.doRender();\n    }\n\n    // Interface 2.\n    // Get code nodes from markdownIt directly.\n    renderCodeNodes() {\n        this.nodesToRender = this.vxcore.getWorker('markdownit').getCodeNodes(this.langs);\n        this.numOfRenderedNodes = 0;\n        this.doRender();\n    }\n\n    doRender() {\n        if (this.nodesToRender.length == 0) {\n            this.finishWork();\n            return;\n        }\n\n        if (!this.initialize(() => { this.renderNodes(); })) {\n            return;\n        }\n\n        this.renderNodes();\n    }\n\n    renderNodes() {\n        this.nodesToRender.forEach((p_nodeToRender) => {\n            this.renderOne(p_nodeToRender, this.graphIdx++);\n        });\n    }\n\n    // Render @p_node as a graph.\n    // Return true on success.\n    renderOne(p_node, p_idx) {\n        return false;\n    }\n\n    // Called when finishing rendering one node.\n    finishRenderingOne() {\n        if (++this.numOfRenderedNodes == this.nodesToRender.length) {\n            this.nodesToRender = [];\n            this.numOfRenderedNodes = 0;\n            this.finishWork();\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/graphviz.js",
    "content": "class Graphviz extends GraphRenderer {\n    constructor() {\n        super();\n\n        this.name = 'graphviz';\n\n        this.graphDivClass = 'vx-graphviz-graph';\n\n        this.extraScripts = [this.scriptFolderPath + '/viz.js/viz.js',\n                             this.scriptFolderPath + '/viz.js/lite.render.js'];\n\n        this.viz = null;\n\n        this.format = 'svg';\n\n        this.langs = ['dot', 'graphviz'];\n\n        this.useWeb = true;\n\n        this.nextLocalGraphIndex = 1;\n    }\n\n    registerInternal() {\n        this.vxcore.on('basicMarkdownRendered', () => {\n            this.reset();\n            this.renderCodeNodes(window.vxOptions.transformSvgToPngEnabled ? 'png' : 'svg');\n        });\n\n        this.vxcore.getWorker('markdownit').addLangsToSkipHighlight(this.langs);\n        this.useWeb = window.vxOptions.webGraphviz;\n        if (!this.useWeb) {\n            this.extraScripts = [];\n        }\n    }\n\n    initialize(p_callback) {\n        return super.initialize(() => {\n            if (this.useWeb) {\n                this.viz = new Viz();\n            }\n            p_callback();\n        });\n    }\n\n    // Interface 1.\n    render(p_node, p_classList, p_format) {\n        this.format = p_format;\n\n        super.render(p_node, p_classList);\n    }\n\n    // Interface 2.\n    renderCodeNodes(p_format) {\n        this.format = p_format;\n\n        super.renderCodeNodes();\n    }\n\n    renderOne(p_node, p_idx) {\n        if (this.useWeb) {\n            this.renderOnline(p_node, p_idx);\n        } else {\n            this.renderLocal(p_node);\n        }\n    }\n\n    renderOnline(p_node, p_idx) {\n        console.assert(this.viz);\n        let func = function(p_graphviz, p_renderNode) {\n            let graphviz = p_graphviz;\n            let node = p_renderNode;\n            return function(p_element) {\n                if (node) {\n                    let wrapperDiv = document.createElement('div');\n                    wrapperDiv.classList.add(graphviz.graphDivClass);\n                    wrapperDiv.appendChild(p_element);\n\n                    Utils.checkSourceLine(p_node, wrapperDiv);\n\n                    Utils.replaceNodeWithPreCheck(p_node, wrapperDiv);\n\n                    if (graphviz.format === 'svg') {\n                        window.vxImageViewer.setupSVGToView(p_element, false);\n                    } else {\n                        window.vxImageViewer.setupIMGToView(p_element);\n                    }\n                }\n                graphviz.finishRenderingOne();\n            };\n        };\n\n        if (this.format === 'svg') {\n            this.viz.renderSVGElement(p_node.textContent)\n                .then(func(this, p_node))\n                .catch(function(p_err) {\n                    console.error('failed to render Graphviz', p_err);\n                });\n        } else {\n            this.viz.renderImageElement(p_node.textContent)\n                .then(func(this, p_node))\n                .catch(function(p_err) {\n                    console.error('failed to render Graphviz', p_err);\n                });\n\n        }\n\n        return true;\n    }\n\n    renderLocal(p_node) {\n        let func = function(p_graphviz, p_renderNode) {\n            let graphviz = p_graphviz;\n            let node = p_renderNode;\n            return function(format, data) {\n                if (node && data.length > 0) {\n                    let obj = null;\n                    if (format == 'svg') {\n                        obj = document.createElement('div');\n                        obj.classList.add(graphviz.graphDivClass);\n                        obj.innerHTML = data;\n                        window.vxImageViewer.setupSVGToView(obj.children[0], false);\n                    } else {\n                        obj = document.createElement('div');\n                        obj.classList.add(graphviz.graphDivClass);\n\n                        let imgObj = document.createElement('img');\n                        obj.appendChild(imgObj);\n                        imgObj.src = \"data:image/\" + format + \";base64, \" + data;\n                        window.vxImageViewer.setupIMGToView(imgObj);\n                    }\n\n                    Utils.checkSourceLine(p_node, obj);\n\n                    Utils.replaceNodeWithPreCheck(p_node, obj);\n                }\n                graphviz.finishRenderingOne();\n            };\n        };\n\n        let callback = func(this, p_node);\n        this.vxcore.renderGraph(this.id,\n            this.nextLocalGraphIndex++,\n            this.format,\n            'dot',\n            p_node.textContent,\n            function(id, index, format, data) {\n                callback(format, data);\n            });\n    }\n\n    // Render a graph from @p_text in SVG format.\n    // p_callback(svgNode).\n    renderText(p_text, p_callback) {\n        console.assert(this.useWeb, \"renderText() should be called only when web Graphviz is enabled\");\n\n        let func = () => {\n            if (!this.viz) {\n                console.log(\"viz is not ready yet\");\n                return;\n            }\n            this.viz.renderSVGElement(p_text)\n                .then(p_callback)\n                .catch(function(err) {\n                    console.error('failed to render Graphviz', err);\n                    p_callback(null);\n                });\n        };\n\n        if (!this.initialize(func)) {\n            return;\n        }\n\n        func();\n    }\n}\n\nwindow.vxcore.registerWorker(new Graphviz());\n"
  },
  {
    "path": "src/data/extra/web/js/imageviewer.js",
    "content": "class ImageViewer {\n    constructor() {\n        this.viewBoxMouseDown = false;\n        this.viewBoxOffsetToMouse = { x: 0, y: 0 }\n        this.viewImageClass = 'vx-image-view-image';\n\n        window.vxcore.on('ready', () => {\n            this.viewBoxContainer = document.getElementById('vx-image-view-box');\n            this.viewBox = document.getElementById('vx-image-view');\n            this.closeButton = document.getElementById('vx-image-view-close');\n\n            this.setupImageViewBox();\n        });\n    }\n\n    setupImageViewBox() {\n        // Left and top in pixel.\n        let moveImage = (img, left, top) => {\n            if (img.style.position != 'absolute') {\n                img.style.position = 'absolute';\n                img.style.zIndex = parseInt(this.closeButton.style.zIndex) - 1;\n            }\n\n            img.style.left = left + 'px';\n            img.style.top  = top + 'px';\n        };\n\n        // View box.\n        this.viewBoxContainer.onclick = (e) => {\n            e = e || window.event;\n            if (e.target.id != this.viewBox.id) {\n                // Click outside the image to close the box.\n                this.closeImageViewBox();\n            }\n\n            e.preventDefault();\n        };\n\n        this.viewBoxContainer.onwheel = (e) => {\n            e = e || window.event;\n            let ctrl = !!e.ctrlKey;\n            if (ctrl) {\n                return;\n            }\n\n            let target = e.target;\n            if (target != this.viewBox) {\n                return;\n            }\n\n            let rect = target.getBoundingClientRect();\n            let centerX = e.clientX - rect.left;\n            let centerY = e.clientY - rect.top;\n\n            let oriWidth = target.getAttribute('oriWidth');\n            let oriHeight = target.getAttribute('oriWidth');\n            if (!oriWidth) {\n                oriWidth = rect.width;\n                oriHeight = rect.height;\n\n                target.setAttribute('oriWidth', oriWidth);\n                target.setAttribute('oriHeight', oriHeight);\n            }\n\n            let step = Math.floor(oriWidth / 4);\n\n            let value = e.wheelDelta || -e.detail;\n            // delta >= 0 is up, which will trigger zoom in.\n            let delta = Math.max(-1, Math.min(1, value));\n\n            let newWidth = rect.width + (delta < 0 ? -step : step);\n            if (newWidth < 200) {\n                e.preventDefault();\n                return;\n            }\n\n            let factor = newWidth / rect.width;\n\n            target.style.width = newWidth + 'px';\n\n            // Adjust the image around the center point.\n            moveImage(target, e.clientX - centerX * factor, e.clientY - centerY * factor);\n\n            e.preventDefault();\n        };\n\n        // Content image.\n        this.viewBox.onmousedown = (e) => {\n            e = e || window.event;\n            let target = e.target;\n            this.viewBoxMouseDown = true;\n            this.viewBoxOffsetToMouse = {\n                x: target.offsetLeft - e.clientX,\n                y: target.offsetTop - e.clientY\n            };\n            e.preventDefault();\n        };\n\n        this.viewBox.onmouseup = (e) => {\n            e = e || window.event;\n            this.viewBoxMouseDown = false;\n            e.preventDefault();\n        };\n\n        this.viewBox.onmousemove = (e) => {\n            e = e || window.event;\n            let target = e.target;\n            if (this.viewBoxMouseDown) {\n                moveImage(target,\n                          e.clientX + this.viewBoxOffsetToMouse.x,\n                          e.clientY + this.viewBoxOffsetToMouse.y);\n            }\n\n            e.preventDefault();\n        };\n\n        // Close button.\n        this.closeButton.onclick = () => {\n            this.closeImageViewBox();\n        };\n    };\n\n    closeImageViewBox() {\n        this.viewBoxContainer.style.display = \"none\";\n    };\n\n    setupForAllImages(p_container) {\n        this.closeImageViewBox();\n\n        let images = p_container.getElementsByTagName('img');\n        for (let i = 0; i < images.length; ++i) {\n            if (images[i] === this.viewBox) {\n                continue;\n            }\n\n            this.setupIMGToView(images[i]);\n        }\n    };\n\n    setupIMGToView(p_node) {\n        if (!p_node || p_node.nodeName.toLowerCase() != 'img') {\n            return;\n        }\n\n        p_node.classList.add(this.viewImageClass);\n        let func = function(p_imageViewer, p_node) {\n            let imageViewer = p_imageViewer;\n            let node = p_node;\n            return function() {\n                imageViewer.viewIMG(node);\n            };\n        };\n        p_node.ondblclick = func(this, p_node);\n    };\n\n    viewImage(p_imgSrc, p_background = 'transparent') {\n        this.viewBoxMouseDown = false;\n        this.viewBoxContainer.style.display = 'block';\n\n        this.viewBox.src = p_imgSrc;\n        this.viewBox.style.backgroundColor = p_background;\n\n        // Restore view box.\n        this.viewBox.style.width = '';\n        this.viewBox.style.position = '';\n        this.viewBox.style.zIndex = '';\n    };\n\n    viewIMG(p_imgNode) {\n        this.viewImage(p_imgNode.src);\n    };\n\n    isViewingImage() {\n        return this.viewBoxContainer.style.display === 'block';\n    };\n\n    setupSVGToView(p_node, p_forceBackground = false) {\n        if (!p_node || p_node.nodeName.toLowerCase() != 'svg') {\n            return;\n        }\n\n        let onSVGDoubleClick = function(imageViewer, node, forceBackground, e) {\n            e = e || window.event;\n            let name = e.target.nodeName.toLowerCase();\n            if (name != 'text' && name != 'tspan') {\n                if (forceBackground) {\n                    // Use <svg>'s parent's background color.\n                    let svgNode = e.target;\n                    while (svgNode && svgNode.nodeName.toLowerCase() != 'svg') {\n                        svgNode = svgNode.parentNode;\n                    }\n\n                    if (svgNode) {\n                        let style = window.getComputedStyle(svgNode.parentNode, null);\n                        if (style.backgroundColor === 'rgba(0, 0, 0, 0)') {\n                            imageViewer.viewSVG(node, '#ffffff');\n                        } else {\n                            imageViewer.viewSVG(node, style.backgroundColor);\n                        }\n                    }\n                } else {\n                    imageViewer.viewSVG(node);\n                }\n\n                e.preventDefault();\n            }\n        };\n\n        p_node.classList.add(this.viewImageClass);\n        let func = function(p_imageViewer, p_node, p_forceBackground) {\n            let imageViewer = p_imageViewer;\n            let node = p_node;\n            let forceBackground = p_forceBackground;\n            return function(e) {\n                onSVGDoubleClick(imageViewer, node, forceBackground, e);\n            };\n        };\n        p_node.ondblclick = func(this, p_node, p_forceBackground);\n    };\n\n    viewSVG(p_svgNode, p_background = 'transparent') {\n        var svg = p_svgNode.outerHTML.replace(/#/g, '%23').replace(/[\\r\\n]/g, '');\n        var src = 'data:image/svg+xml;utf8,' + svg;\n\n        this.viewImage(src, p_background);\n    };\n}\n\nwindow.vxImageViewer = new ImageViewer;\n"
  },
  {
    "path": "src/data/extra/web/js/lrucache.js",
    "content": "class LruCache {\n    constructor(p_capacity = 100) {\n        this.capacity = p_capacity;\n        this.cache = new Map();\n    }\n\n    get(p_key) {\n        let item = this.cache.get(p_key);\n        if (item) {\n            this.cache.delete(p_key);\n            this.cache.set(p_key, item);\n        }\n        return item;\n    }\n\n    set(p_key, p_val) {\n        if (this.cache.has(p_key)) {\n            this.cache.delete(p_key);\n        }\n        else if (this.cache.size == this.capacity) {\n            this.cache.delete(this.first());\n        }\n        this.cache.set(p_key, p_val);\n    }\n\n    first() {\n        return this.cache.keys().next().value;\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/mark.js/README.md",
    "content": "# [mark.js](https://github.com/julmot/mark.js)\nv8.11.1  \nJulian Kühnel\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/README.md",
    "content": "# [markdown-it](https://github.com/markdown-it/markdown-it)\nv14.1.0\n\n# [markdown-it-task-lists](https://github.com/revin/markdown-it-task-lists)\nv2.1.0\n\n# [markdown-it-footnote](https://github.com/markdown-it/markdown-it-footnote)\nv3.0.2\n\n# [markdown-it-sub](https://github.com/markdown-it/markdown-it-sub)\nv1.0.0\n\n# [markdown-it-sup](https://github.com/markdown-it/markdown-it-sup)\nv1.0.0\n\n# [markddown-it-front-matter](https://github.com/craigdmckenna/markdown-it-front-matter)\nv0.2.1\nWrapped by Le Tan\n\n# [markdown-it-imsize](https://github.com/tatsy/markdown-it-imsize)\nv2.0.1\nTatsuya Yatagawa\n\n# [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji)\nv1.4.0\n\n# [markdown-it-texmath](https://github.com/vnotex/markdown-it-texmath)\nb08ddd342f26ddcdc3afa2218f1b55410f44029b\nLe Tan\n\n# [markdown-it-container](https://github.com/markdown-it/markdown-it-container)\nv3.0.0\nVitaly Puzrin\n\n# [markdown-it-inject-linenumbers](https://github.com/digitalmoksha/markdown-it-inject-linenumbers)\nv0.0.0\nModified by Le Tan\n\n# [markdonw-it-anchor](https://github.com/valeriangalliat/markdown-it-anchor)\nv6.0.1\n\n# [markdonw-it-toc-done-right](https://github.com/nagaozen/markdown-it-toc-done-right)\nv4.2.0\n\n# [markdown-it-implicit-figures](https://github.com/arve0/markdown-it-implicit-figures)\nv0.10.0\n\n# [markdown-it-mark](https://github.com/markdown-it/markdown-it-mark)\nv4.0.0\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdown-it-front-matter.js",
    "content": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownitFrontMatter = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n\n// Process front matter and pass to cb\n'use strict';\n\nmodule.exports = function front_matter_plugin(md, cb) {\n  var min_markers = 3,\n      marker_str  = '-',\n      marker_char = marker_str.charCodeAt(0),\n      marker_len  = marker_str.length;\n\n  function frontMatter(state, startLine, endLine, silent) {\n    var pos,\n        nextLine,\n        marker_count,\n        token,\n        old_parent,\n        old_line_max,\n        start_content,\n        auto_closed = false,\n        start = state.bMarks[startLine] + state.tShift[startLine],\n        max = state.eMarks[startLine];\n\n    // Check out the first character of the first line quickly,\n    // this should filter out non-front matter\n    if (startLine !== 0 || marker_char !== state.src.charCodeAt(0)) {\n      return false;\n    }\n\n    // Check out the rest of the marker string\n    // while pos <= 3\n    for (pos = start + 1; pos <= max; pos++) {\n      if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n        start_content = pos + 1;\n        break;\n      }\n    }\n\n    marker_count = Math.floor((pos - start) / marker_len);\n\n    if (marker_count < min_markers) {\n      return false;\n    }\n    pos -= (pos - start) % marker_len;\n\n    // Since start is found, we can report success here in validation mode\n    if (silent) {\n      return true;\n    }\n\n    // Search for the end of the block\n    nextLine = startLine;\n\n    for (;;) {\n      nextLine++;\n      if (nextLine >= endLine) {\n        // unclosed block should be autoclosed by end of document.\n        // also block seems to be autoclosed by end of parent\n        break;\n      }\n\n      if (state.src.slice(start, max) === '...') {\n        break;\n      }\n\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (start < max && state.sCount[nextLine] < state.blkIndent) {\n        // non-empty line with negative indent should stop the list:\n        // - ```\n        //  test\n        break;\n      }\n\n      if (marker_char !== state.src.charCodeAt(start)) {\n        continue;\n      }\n\n      if (state.sCount[nextLine] - state.blkIndent >= 4) {\n        // closing fence should be indented less than 4 spaces\n        continue;\n      }\n\n      for (pos = start + 1; pos <= max; pos++) {\n        if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n          break;\n        }\n      }\n\n      // closing code fence must be at least as long as the opening one\n      if (Math.floor((pos - start) / marker_len) < marker_count) {\n        continue;\n      }\n\n      // make sure tail has spaces only\n      pos -= (pos - start) % marker_len;\n      pos = state.skipSpaces(pos);\n\n      if (pos < max) {\n        continue;\n      }\n\n      // found!\n      auto_closed = true;\n      break;\n    }\n\n    old_parent = state.parentType;\n    old_line_max = state.lineMax;\n    state.parentType = 'container';\n\n    // this will prevent lazy continuations from ever going past our end marker\n    state.lineMax = nextLine;\n\n    token        = state.push('front_matter', null, 0);\n    token.hidden = true;\n    token.markup = state.src.slice(startLine, pos);\n    token.block  = true;\n    token.map    = [ startLine, pos ];\n    token.meta   = state.src.slice(start_content, start - 1);\n\n    state.parentType = old_parent;\n    state.lineMax = old_line_max;\n    state.line = nextLine + (auto_closed ? 1 : 0);\n\n    cb(token.meta);\n\n    return true;\n  }\n\n  md.block.ruler.before(\n    'table',\n    'front_matter',\n    frontMatter,\n    {\n      alt: [\n        'paragraph',\n        'reference',\n        'blockquote',\n        'list'\n      ]\n    }\n  );\n};\n\n},{}]},{},[1])(1)\n});\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdown-it-implicit-figure.js",
    "content": "/* https://github.com/arve0/markdown-it-implicit-figures @c709117 */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownitImplicitFigure = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function implicitFiguresPlugin(md, options) {\n  options = options || {};\n\n  function implicitFigures(state) {\n    // reset tabIndex on md.render()\n    var tabIndex = 1;\n\n    // do not process first and last token\n    for (var i=1, l=state.tokens.length; i < (l - 1); ++i) {\n      var token = state.tokens[i];\n\n      if (token.type !== 'inline') { continue; }\n      // children: image alone, or link_open -> image -> link_close\n      if (!token.children || (token.children.length !== 1 && token.children.length !== 3)) { continue; }\n      // one child, should be img\n      if (token.children.length === 1 && token.children[0].type !== 'image') { continue; }\n      // three children, should be image enclosed in link\n      if (token.children.length === 3 &&\n          (token.children[0].type !== 'link_open' ||\n           token.children[1].type !== 'image' ||\n           token.children[2].type !== 'link_close')) {\n        continue;\n      }\n      // prev token is paragraph open\n      if (i !== 0 && state.tokens[i - 1].type !== 'paragraph_open') { continue; }\n      // next token is paragraph close\n      if (i !== (l - 1) && state.tokens[i + 1].type !== 'paragraph_close') { continue; }\n\n      // We have inline token containing an image only.\n      // Previous token is paragraph open.\n      // Next token is paragraph close.\n      // Lets replace the paragraph tokens with figure tokens.\n      var figure = state.tokens[i - 1];\n      figure.type = 'figure_open';\n      figure.tag = 'figure';\n      state.tokens[i + 1].type = 'figure_close';\n      state.tokens[i + 1].tag = 'figure';\n\n      if (options.dataType == true) {\n        state.tokens[i - 1].attrPush(['data-type', 'image']);\n      }\n      var image;\n\n      if (options.link == true && token.children.length === 1) {\n        image = token.children[0];\n        token.children.unshift(\n          new state.Token('link_open', 'a', 1)\n        );\n        token.children[0].attrPush(['href', image.attrGet('src')]);\n        token.children.push(\n          new state.Token('link_close', 'a', -1)\n        );\n      }\n\n      // for linked images, image is one off\n      image = token.children.length === 1 ? token.children[0] : token.children[1];\n\n      if (options.figcaption == true) {\n        if (image.children && image.children.length) {\n          token.children.push(\n            new state.Token('figcaption_open', 'figcaption', 1)\n            );\n          token.children.splice(token.children.length, 0, ...image.children);\n          token.children.push(\n            new state.Token('figcaption_close', 'figcaption', -1)\n            );\n          image.children.length = 0;\n        }\n      }\n\n      if (options.copyAttrs && image.attrs) {\n        const f = options.copyAttrs === true ? '' : options.copyAttrs\n        figure.attrs = image.attrs.filter(([k,v]) => k.match(f))\n      }\n\n      if (options.tabindex == true) {\n        // add a tabindex property\n        // you could use this with css-tricks.com/expanding-images-html5\n        state.tokens[i - 1].attrPush(['tabindex', tabIndex]);\n        tabIndex++;\n      }\n    }\n  }\n  md.core.ruler.before('linkify', 'implicit_figures', implicitFigures);\n};\n\n\n},{}]},{},[1])(1)\n});\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdown-it-inject-linenumbers.js",
    "content": "/*! markdown-it-inject-linenumbers 0.2.0 https://github.com//digitalmoksha/markdown-it-inject-linenumbers @license MIT */(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownitInjectLinenumbers = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';\n\n\nmodule.exports = function inject_linenumbers_plugin(md) {\n  //\n  // Inject line numbers for sync scroll. Notes:\n  //\n  // - We track only headings and paragraphs, at any level.\n  // - TODO Footnotes content causes jumps. Level limit filters it automatically.\n  function injectLineNumbers(tokens, idx, options, env, slf) {\n    // if (tokens[idx].map && tokens[idx].level === 0) {\n    if (tokens[idx].map) {\n      addLineNumber(tokens[idx], tokens[idx].map[0]);\n    }\n    return slf.renderToken(tokens, idx, options, env, slf);\n  }\n\n  function addLineNumber(token, line) {\n    token.attrJoin('class', 'source-line');\n    token.attrSet('data-source-line', String(line));\n  }\n\n  let defaultFenceRender = md.renderer.rules.fence || function(tokens, idx, options, env, slf) {\n    return slf.renderToken(tokens, idx, options);\n  }\n\n  function injectLineNumbersForFence(tokens, idx, options, env, slf) {\n    if (tokens[idx].map) {\n      addLineNumber(tokens[idx], tokens[idx].map[0]);\n    }\n    return defaultFenceRender(tokens, idx, options, env, slf);\n  }\n\n  let defaultCodeBlockRender = md.renderer.rules.code_block || function(tokens, idx, options, env, slf) {\n    return slf.renderToken(tokens, idx, options);\n  }\n\n  function injectLineNumbersForCodeBlock(tokens, idx, options, env, slf) {\n    if (tokens[idx].map) {\n      addLineNumber(tokens[idx], tokens[idx].map[0]);\n    }\n    return defaultCodeBlockRender(tokens, idx, options, env, slf);\n  }\n\n  md.renderer.rules.paragraph_open = injectLineNumbers;\n  md.renderer.rules.heading_open   = injectLineNumbers;\n  md.renderer.rules.list_item_open = injectLineNumbers;\n  md.renderer.rules.table_open     = injectLineNumbers;\n  md.renderer.rules.fence          = injectLineNumbersForFence;\n  md.renderer.rules.code_block     = injectLineNumbersForCodeBlock;\n};\n\n},{}]},{},[1])(1)\n});\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdown-it-task-lists.js",
    "content": "/*! markdown-it-task-lists 2.1.0 https://github.com/revin/markdown-it-task-lists#readme by @license ISC */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownitTaskLists = f()}})(function(){var define,module,exports;return (function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){\n// Markdown-it plugin to render GitHub-style task lists; see\n//\n// https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments\n// https://github.com/blog/1825-task-lists-in-all-markdown-documents\n\nvar disableCheckboxes = true;\nvar useLabelWrapper = false;\nvar useLabelAfter = false;\n\nmodule.exports = function(md, options) {\n\tif (options) {\n\t\tdisableCheckboxes = !options.enabled;\n\t\tuseLabelWrapper = !!options.label;\n\t\tuseLabelAfter = !!options.labelAfter;\n\t}\n\n\tmd.core.ruler.after('inline', 'github-task-lists', function(state) {\n\t\tvar tokens = state.tokens;\n\t\tfor (var i = 2; i < tokens.length; i++) {\n\t\t\tif (isTodoItem(tokens, i)) {\n\t\t\t\ttodoify(tokens[i], state.Token);\n\t\t\t\tattrSet(tokens[i-2], 'class', 'task-list-item' + (!disableCheckboxes ? ' enabled' : ''));\n\t\t\t\tattrSet(tokens[parentToken(tokens, i-2)], 'class', 'contains-task-list');\n\t\t\t}\n\t\t}\n\t});\n};\n\nfunction attrSet(token, name, value) {\n\tvar index = token.attrIndex(name);\n\tvar attr = [name, value];\n\n\tif (index < 0) {\n\t\ttoken.attrPush(attr);\n\t} else {\n\t\ttoken.attrs[index] = attr;\n\t}\n}\n\nfunction parentToken(tokens, index) {\n\tvar targetLevel = tokens[index].level - 1;\n\tfor (var i = index - 1; i >= 0; i--) {\n\t\tif (tokens[i].level === targetLevel) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction isTodoItem(tokens, index) {\n\treturn isInline(tokens[index]) &&\n\t       isParagraph(tokens[index - 1]) &&\n\t       isListItem(tokens[index - 2]) &&\n\t       startsWithTodoMarkdown(tokens[index]);\n}\n\nfunction todoify(token, TokenConstructor) {\n\ttoken.children.unshift(makeCheckbox(token, TokenConstructor));\n\ttoken.children[1].content = token.children[1].content.slice(3);\n\ttoken.content = token.content.slice(3);\n\n\tif (useLabelWrapper) {\n\t\tif (useLabelAfter) {\n\t\t\ttoken.children.pop();\n\n\t\t\t// Use large random number as id property of the checkbox.\n\t\t\tvar id = 'task-item-' + Math.ceil(Math.random() * (10000 * 1000) - 1000);\n\t\t\ttoken.children[0].content = token.children[0].content.slice(0, -1) + ' id=\"' + id + '\">';\n\t\t\ttoken.children.push(afterLabel(token.content, id, TokenConstructor));\n\t\t} else {\n\t\t\ttoken.children.unshift(beginLabel(TokenConstructor));\n\t\t\ttoken.children.push(endLabel(TokenConstructor));\n\t\t}\n\t}\n}\n\nfunction makeCheckbox(token, TokenConstructor) {\n\tvar checkbox = new TokenConstructor('html_inline', '', 0);\n\tvar disabledAttr = disableCheckboxes ? ' disabled=\"\" ' : '';\n\tif (token.content.indexOf('[ ] ') === 0) {\n\t\tcheckbox.content = '<input class=\"task-list-item-checkbox\"' + disabledAttr + 'type=\"checkbox\">';\n\t} else if (token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0) {\n\t\tcheckbox.content = '<input class=\"task-list-item-checkbox\" checked=\"\"' + disabledAttr + 'type=\"checkbox\">';\n\t}\n\treturn checkbox;\n}\n\n// these next two functions are kind of hacky; probably should really be a\n// true block-level token with .tag=='label'\nfunction beginLabel(TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '<label>';\n\treturn token;\n}\n\nfunction endLabel(TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '</label>';\n\treturn token;\n}\n\nfunction afterLabel(content, id, TokenConstructor) {\n\tvar token = new TokenConstructor('html_inline', '', 0);\n\ttoken.content = '<label class=\"task-list-item-label\" for=\"' + id + '\">' + content + '</label>';\n\ttoken.attrs = [{for: id}];\n\treturn token;\n}\n\nfunction isInline(token) { return token.type === 'inline'; }\nfunction isParagraph(token) { return token.type === 'paragraph_open'; }\nfunction isListItem(token) { return token.type === 'list_item_open'; }\n\nfunction startsWithTodoMarkdown(token) {\n\t// leading whitespace in a list item is already trimmed off by markdown-it\n\treturn token.content.indexOf('[ ] ') === 0 || token.content.indexOf('[x] ') === 0 || token.content.indexOf('[X] ') === 0;\n}\n\n},{}]},{},[1])(1)\n});"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdown-it-texmath.js",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Stefan Goessner - 2017-21. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nfunction escapeHTML(text) {\n    return text\n        .replace(/&/g, \"&amp;\")\n        .replace(/</g, \"&lt;\")\n        .replace(/>/g, \"&gt;\")\n        .replace(/\"/g, \"&quot;\")\n        .replace(/'/g, \"&#039;\");\n}\n\nfunction texmath(md, options) {\n    const delimitersList = options && options.delimitersList || ['dollars'];\n    const outerSpace = options && options.outerSpace || false;         // inline rules, effectively `dollars` require surrounding spaces, i.e ` $\\psi$ `, to be accepted as inline formulas. This is primarily a guard against misinterpreting single `$`'s in normal markdown text (relevant for inline math only. Default: `false`, for backwards compatibility).\n    const katexOptions = options && options.katexOptions || {};\n    katexOptions.throwOnError = katexOptions.throwOnError || false;\n    katexOptions.macros = katexOptions.macros || options && options.macros;  // ensure backwards compatibility\n\n    if (!texmath.katex) { // else ... deprecated `use` method was used ...\n        if (options && typeof options.engine === 'object') {\n            texmath.katex = options.engine;\n        }\n        else if (typeof module === \"object\")\n            texmath.katex = require('katex');\n        else  // artifical error object.\n            texmath.katex = { renderToString() { return 'No math renderer found.' } };\n    }\n\n    delimitersList.forEach(function(delimiters) {\n        if (delimiters in texmath.rules) {\n            for (const rule of texmath.rules[delimiters].inline) {\n                if (!!outerSpace && 'outerSpace' in rule) rule.outerSpace = true;\n                md.inline.ruler.before('escape', rule.name, texmath.inline(rule));  // ! important\n                md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\\$1/,texmath.render(tokens[idx].content,!!rule.displayMode,katexOptions));\n            }\n\n            for (const rule of texmath.rules[delimiters].block) {\n                md.block.ruler.before('fence', rule.name, texmath.block(rule));  // ! important for ```math delimiters\n                md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\\$2/,escapeHTML(tokens[idx].info))  // equation number .. ?\n                                                                         .replace(/\\$1/,texmath.render(tokens[idx].content,true,katexOptions));\n            }\n        }\n    });\n}\n\n// texmath.inline = (rule) => dollar;  // just for debugging/testing ..\n\ntexmath.inline = (rule) =>\n    function(state, silent) {\n        const pos = state.pos;\n        const str = state.src;\n        const pre = str.startsWith(rule.tag, rule.rex.lastIndex = pos) && (!rule.pre || rule.pre(str, rule.outerSpace, pos));  // valid pre-condition ...\n        const match = pre && rule.rex.exec(str);\n        const res = !!match && pos < rule.rex.lastIndex && (!rule.post || rule.post(str, rule.outerSpace, rule.rex.lastIndex - 1));\n\n        if (res) {\n            if (!silent) {\n                const token = state.push(rule.name, 'math', 0);\n                token.content = match[1];\n                token.markup = rule.tag;\n            }\n            state.pos = rule.rex.lastIndex;\n        }\n        return res;\n    }\n\ntexmath.block = (rule) =>\n    function block(state, begLine, endLine, silent) {\n        const pos = state.bMarks[begLine] + state.tShift[begLine];\n        const str = state.src;\n        const pre = str.startsWith(rule.tag, rule.rex.lastIndex = pos) && (!rule.pre || rule.pre(str, false, pos));  // valid pre-condition ....\n        const match = pre && rule.rex.exec(str);\n        const res = !!match\n                 && pos < rule.rex.lastIndex\n                 && (!rule.post || rule.post(str, false, rule.rex.lastIndex - 1));\n\n        if (res && !silent) {    // match and valid post-condition ...\n            const endpos = rule.rex.lastIndex - 1;\n            let curline;\n\n            for (curline = begLine; curline < endLine; curline++)\n                if (endpos >= state.bMarks[curline] + state.tShift[curline] && endpos <= state.eMarks[curline]) // line for end of block math found ...\n                    break;\n\n            // \"this will prevent lazy continuations from ever going past our end marker\"\n            // s. https://github.com/markdown-it/markdown-it-container/blob/master/index.js\n            const lineMax = state.lineMax;\n            const parentType = state.parentType;\n            state.lineMax = curline;\n            state.parentType = 'math';\n\n            if (parentType === 'blockquote') // remove all leading '>' inside multiline formula\n                match[1] = match[1].replace(/(\\n*?^(?:\\s*>)+)/gm,'');\n            // begin token\n            let token = state.push(rule.name, 'math', 1);  // 'math_block'\n            token.block = true;\n            token.tag = rule.tag;\n            token.markup = '';\n            token.content = match[1];\n            token.info = match[match.length-1];    // eq.no\n            token.map = [ begLine, curline ];\n//            token.hidden = true;\n            // end token ... superfluous ...\n\n            state.parentType = parentType;\n            state.lineMax = lineMax;\n            state.line = curline+1;\n        }\n        return res;\n    }\n\ntexmath.render = function(tex,displayMode,options) {\n    options.displayMode = displayMode;\n    let res;\n    /*\n    try {\n        res = texmath.katex.renderToString(tex, options);\n    }\n    catch(err) {\n        res = tex+\": \"+err.message.replace(\"<\",\"&lt;\");\n    }\n    */\n    if (displayMode) {\n        res = '$$$$' + escapeHTML(tex) + '$$$$';\n    } else {\n        res = '$$' + escapeHTML(tex) + '$$';\n    }\n    return res;\n}\n\n// ! deprecated ... use options !\ntexmath.use = function(katex) {  // math renderer used ...\n    texmath.katex = katex;       // ... katex solely at current ...\n    return texmath;\n}\n\n/*\nfunction dollar(state, silent) {\n  var start, max, marker, matchStart, matchEnd, token,\n      pos = state.pos,\n      ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x24) { return false; }  // $\n\n  start = pos;\n  pos++;\n  max = state.posMax;\n\n  while (pos < max && state.src.charCodeAt(pos) === 0x24) { pos++; }\n\n  marker = state.src.slice(start, pos);\n\n  matchStart = matchEnd = pos;\n\n  while ((matchStart = state.src.indexOf('$', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x24) { matchEnd++; }\n\n    if (matchEnd - matchStart === marker.length) {\n      if (!silent) {\n        token         = state.push('math_inline', 'math', 0);\n        token.markup  = marker;\n        token.content = state.src.slice(pos, matchStart)\n                                 .replace(/[ \\n]+/g, ' ')\n                                 .trim();\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += marker; }\n  state.pos += marker.length;\n  return true;\n};\n*/\n\n// used for enable/disable math rendering by `markdown-it`\ntexmath.inlineRuleNames = ['math_inline','math_inline_double'];\ntexmath.blockRuleNames  = ['math_block','math_block_eqno'];\n\ntexmath.$_pre = (str,outerSpace,beg) => {\n    const prv = beg > 0 ? str[beg-1].charCodeAt(0) : false;\n    return outerSpace ? !prv || prv === 0x20           // space  (avoiding regex's for performance reasons)\n                      : !prv || prv !== 0x5c           // no backslash,\n                             && (prv < 0x30 || prv > 0x39); // no decimal digit .. before opening '$'\n}\ntexmath.$_post = (str,outerSpace,end) => {\n    const nxt = str[end+1] && str[end+1].charCodeAt(0);\n    return outerSpace ? !nxt || nxt === 0x20           // space  (avoiding regex's for performance reasons)\n                             || nxt === 0x2e           // '.'\n                             || nxt === 0x2c           // ','\n                             || nxt === 0x3b           // ';'\n                      : !nxt || nxt < 0x30 || nxt > 0x39;   // no decimal digit .. after closing '$'\n}\n\ntexmath.rules = {\n    brackets: {\n        inline: [\n            {   name: 'math_brackets_inline',\n                rex: /\\\\\\((.+?)\\\\\\)/gy,\n                tmpl: '<eq class=\"tex-to-render\">$1</eq>',\n                tag: '\\\\('\n            }\n        ],\n        block: [\n            {   name: 'math_brackets_block_eqno',\n                rex: /\\\\\\[(((?!\\\\\\]|\\\\\\[)[\\s\\S])+?)\\\\\\]\\s*?\\(([^)$\\r\\n]+?)\\)/gmy,\n                tmpl: '<section class=\"eqno\"><eqn class=\"tex-to-render\">$1</eqn><span>($2)</span></section>',\n                tag: '\\\\['\n            },\n            {   name: 'math_brackets_block',\n                rex: /\\\\\\[([\\s\\S]+?)\\\\\\]/gmy,\n                tmpl: '<section><eqn class=\"tex-to-render\">$1</eqn></section>',\n                tag: '\\\\['\n            }\n        ]\n    },\n    doxygen: {\n        inline: [\n            {   name: 'math_doxygen_inline',\n                rex: /\\\\f\\$(.+?)\\\\f\\$/gy,\n                tmpl: '<eq>$1</eq>',\n                tag: '\\\\f$'\n            }\n        ],\n        block: [\n            {   name: 'math_doxygen_block_eqno',\n                rex: /\\\\f\\[([^]+?)\\\\f\\]\\s*?\\(([^)\\s]+?)\\)/gmy,\n                tmpl: '<section class=\"eqno\"><eqn>$1</eqn><span>($2)</span></section>',\n                tag: '\\\\f['\n            },\n            {   name: 'math_doxygen_block',\n                rex: /\\\\f\\[([^]+?)\\\\f\\]/gmy,\n                tmpl: '<section><eqn>$1</eqn></section>',\n                tag: '\\\\f['\n            }\n        ]\n    },\n    gitlab: {\n        inline: [\n            {   name: 'math_gitlab_inline',\n                rex: /\\$`(.+?)`\\$/gy,\n                tmpl: '<eq class=\"tex-to-render\">$1</eq>',\n                tag: '$`'\n            }\n        ],\n        block: [\n            {   name: 'math_gitlab_block_eqno',\n                rex: /`{3}math\\s*([^`]+?)\\s*?`{3}\\s*\\(([^)\\r\\n]+?)\\)/gm,\n                tmpl: '<section class=\"eqno\"><eqn class=\"tex-to-render\">$1</eqn><span>($2)</span></section>',\n                tag: '```math'\n            },\n            {   name: 'math_gitlab_block',\n                rex: /`{3}math\\s*([^`]*?)\\s*`{3}/gm,\n                tmpl: '<section><eqn class=\"tex-to-render\">$1</eqn></section>',\n                tag: '```math'\n            }\n        ]\n    },\n    julia: {\n        inline: [\n            {   name: 'math_julia_inline',\n                rex: /`{2}([^`]+?)`{2}/gy,\n                tmpl: '<eq class=\"tex-to-render\">$1</eq>',\n                tag: '``'\n            },\n            {   name: 'math_julia_inline',\n                rex: /\\$((?:\\S?)|(?:\\S.*?\\S))\\$/gy,\n                tmpl: '<eq class=\"tex-to-render\">$1</eq>',\n                tag: '$',\n\t\t\t\tspaceEnclosed: false,\n                pre: texmath.$_pre,\n                post: texmath.$_post\n            }\n        ],\n        block: [\n            {   name: 'math_julia_block_eqno',\n                rex: /`{3}math\\s+?([^`]+?)\\s+?`{3}\\s*?\\(([^)$\\r\\n]+?)\\)/gmy,\n                tmpl: '<section class=\"eqno\"><eqn class=\"tex-to-render\">$1</eqn><span>($2)</span></section>',\n                tag: '```math'\n            },\n            {   name: 'math_julia_block',\n                rex: /`{3}math\\s+?([^`]+?)\\s+?`{3}/gmy,\n                tmpl: '<section><eqn class=\"tex-to-render\">$1</eqn></section>',\n                tag: '```math'\n            }\n        ]\n    },\n    kramdown: {\n        inline: [\n            {   name: 'math_kramdown_inline',\n                rex: /\\${2}(.+?)\\${2}/gy,\n                tmpl: '<eq class=\"tex-to-render\">$1</eq>',\n                tag: '$$'\n            }\n        ],\n        block: [\n            {   name: 'math_kramdown_block_eqno',\n                rex: /\\${2}([^$]+?)\\${2}\\s*?\\(([^)\\s]+?)\\)/gmy,\n                tmpl: '<section class=\"eqno\"><eqn class=\"tex-to-render\">$1</eqn><span>($2)</span></section>',\n                tag: '$$'\n            },\n            {   name: 'math_kramdown_block',\n                rex: /\\${2}([^$]+?)\\${2}/gmy,\n                tmpl: '<section><eqn class=\"tex-to-render\">$1</eqn></section>',\n                tag: '$$'\n            }\n        ]\n    },\n    dollars: {\n        inline: [\n            {   name: 'math_dollars_inline_double',\n                rex: /\\${2}([^$]*?[^\\\\])\\${2}/gy,\n                tmpl: '<section><eqn class=\"tex-to-render\">$1</eqn></section>',\n                tag: '$$',\n                displayMode: true,\n                pre: texmath.$_pre,\n                post: texmath.$_post\n            },\n            {   name: 'math_dollars_inline',\n                rex: /\\$((?:[^\\s\\\\])|(?:\\S.*?[^\\s\\\\]))\\$/gy,\n                tmpl: '<eq class=\"tex-to-render\">$1</eq>',\n                tag: '$',\n                outerSpace: false,\n                pre: texmath.$_pre,\n                post: texmath.$_post\n            }\n        ],\n        block: [\n            {   name: 'math_dollars_block_eqno',\n                rex: /\\${2}((?:[^$]|\\$(?!\\$))+?)\\${2}\\s*?\\(([^)\\s]+?)\\)\\s*$/gmy,\n                tmpl: '<section class=\"eqno\"><eqn class=\"tex-to-render\">$1</eqn><span>($2)</span></section>',\n                tag: '$$'\n            },\n            {   name: 'math_dollars_block',\n                rex: /\\${2}((?:[^$]|\\$(?!\\$))+?)\\${2}\\s*$/gmy,\n                tmpl: '<section><eqn class=\"tex-to-render\">$1</eqn></section>',\n                tag: '$$'\n            }\n        ]\n    },\n    raw: {\n        inline: [],\n        block: [\n            {\n                name: 'math_raw_block',\n                rex: /(\\\\begin\\s*\\{([^{}\\s\\r\\n]+)\\}(?:[^\\\\]|\\\\(?!end\\s*\\{\\2\\}))*\\\\end\\s*\\{\\2\\})/gmy,\n                tmpl: '<section><eqn class=\"tex-to-render\">$1</eqn></section>',\n                tag: '\\\\begin'\n            }\n        ]\n    }\n};\n\nif (typeof module === \"object\" && module.exports)\n   module.exports = texmath;\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdown-it-xss.js",
    "content": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownItXSS = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function protect_xss(md, opts = {}) {\n  const proxy = (tokens, idx, options, env, self) => self.renderToken(tokens, idx, options);\n  const defaultHtmlInlineRenderer = md.renderer.rules.html_inline || proxy;\n  const defaultHtmlBlockRenderer = md.renderer.rules.html_block || proxy;\n  opts.whiteList = {...window.filterXSS.getDefaultWhiteList(), ...opts.whiteList};\n  // Do not escape value when it is a tag and attr in the whitelist.\n  opts.safeAttrValue = (tag, name, value, cssFilter) => { return value; }\n\n  function protectFromXSS(html) {\n    return filterXSS(html, opts);\n  }\n\n  function filterContent(tokens, idx, options, env, slf, fallback) {\n    tokens[idx].content = protectFromXSS(tokens[idx].content);\n    return fallback(tokens, idx, options, env, slf);\n  }\n\n  md.renderer.rules.html_inline = (tokens, idx, options, env, slf) =>\n    filterContent(tokens, idx, options, env, slf, defaultHtmlInlineRenderer);\n  md.renderer.rules.html_block = (tokens, idx, options, env, slf) =>\n    filterContent(tokens, idx, options, env, slf, defaultHtmlBlockRenderer);\n};\n\n},{}]},{},[1])(1)\n});\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdownItAnchor.umd.js",
    "content": "!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(n=n||self).markdownItAnchor=e()}(this,function(){var n={false:\"push\",true:\"unshift\"},e=Object.prototype.hasOwnProperty,t=function(n,t,r,i){var u=n,o=i;if(r&&e.call(t,u))throw Error(\"User defined id attribute '\"+n+\"' is NOT unique. Please fix it in your markdown to continue.\");for(;e.call(t,u);)u=n+\"-\"+o++;return t[u]=!0,u},r=function n(e,r){r=Object.assign({},n.defaults,r),e.core.ruler.push(\"anchor\",function(n){var e,i={},u=n.tokens,o=Array.isArray(r.level)?(e=r.level,function(n){return e.includes(n)}):function(n){return function(e){return e>=n}}(r.level);u.filter(function(n){return\"heading_open\"===n.type}).filter(function(n){return o(Number(n.tag.substr(1)))}).forEach(function(e){var o=u[u.indexOf(e)+1].children.filter(function(n){return\"text\"===n.type||\"code_inline\"===n.type}).reduce(function(n,e){return n+e.content},\"\"),c=e.attrGet(\"id\");c=null==c?t(r.slugify(o),i,!1,r.uniqueSlugStartIndex):t(c,i,!0,r.uniqueSlugStartIndex),e.attrSet(\"id\",c),r.permalink&&r.renderPermalink(c,r,n,u.indexOf(e)),r.callback&&r.callback(e,{slug:c,title:o})})})};return r.defaults={level:1,slugify:function(n){return encodeURIComponent(String(n).trim().toLowerCase().replace(/\\s+/g,\"-\"))},uniqueSlugStartIndex:1,permalink:!1,renderPermalink:function(e,t,r,i){var u,o=[Object.assign(new r.Token(\"link_open\",\"a\",1),{attrs:[].concat(t.permalinkClass?[[\"class\",t.permalinkClass]]:[],[[\"href\",t.permalinkHref(e,r)]],Object.entries(t.permalinkAttrs(e,r)))}),Object.assign(new r.Token(\"html_block\",\"\",0),{content:t.permalinkSymbol}),new r.Token(\"link_close\",\"a\",-1)];t.permalinkSpace&&o[n[!t.permalinkBefore]](Object.assign(new r.Token(\"text\",\"\",0),{content:\" \"})),(u=r.tokens[i+1].children)[n[t.permalinkBefore]].apply(u,o)},permalinkClass:\"header-anchor\",permalinkSpace:!0,permalinkSymbol:\"¶\",permalinkBefore:!1,permalinkHref:function(n){return\"#\"+n},permalinkAttrs:function(n){return{}}},r});\n//# sourceMappingURL=markdownItAnchor.umd.js.map\n"
  },
  {
    "path": "src/data/extra/web/js/markdown-it/markdownItTocDoneRight.umd.js",
    "content": "!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(e=e||self).markdownItTocDoneRight=n()}(this,function(){function e(e){return encodeURIComponent(String(e).trim().toLowerCase().replace(/\\s+/g,\"-\"))}function n(e){return String(e).replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}return function(t,r){var l;r=Object.assign({},{placeholder:\"(\\\\$\\\\{toc\\\\}|\\\\[\\\\[?_?toc_?\\\\]?\\\\]|\\\\$\\\\<toc(\\\\{[^}]*\\\\})\\\\>)\",slugify:e,uniqueSlugStartIndex:1,containerClass:\"table-of-contents\",containerId:void 0,listClass:void 0,itemClass:void 0,linkClass:void 0,level:1,listType:\"ol\",format:void 0,callback:void 0},r);var i=new RegExp(\"^\"+r.placeholder+\"$\",\"i\");t.renderer.rules.tocOpen=function(e,t){var l=Object.assign({},r);return e&&t>=0&&(l=Object.assign(l,e[t].inlineOptions)),\"<nav\"+(l.containerId?' id=\"'+n(l.containerId)+'\"':\"\")+' class=\"'+n(l.containerClass)+'\">'},t.renderer.rules.tocClose=function(){return\"</nav>\"},t.renderer.rules.tocBody=function(e,t){var i=Object.assign({},r);e&&t>=0&&(i=Object.assign(i,e[t].inlineOptions));var o,s={},c=Array.isArray(i.level)?(o=i.level,function(e){return o.includes(e)}):function(e){return function(n){return n>=e}}(i.level);return function e(t){var l=i.listClass?' class=\"'+n(i.listClass)+'\"':\"\",o=i.itemClass?' class=\"'+n(i.itemClass)+'\"':\"\",a=i.linkClass?' class=\"'+n(i.linkClass)+'\"':\"\";if(0===t.c.length)return\"\";var u=\"\";return(0===t.l||c(t.l))&&(u+=\"<\"+(n(i.listType)+l)+\">\"),t.c.forEach(function(t){c(t.l)?u+=\"<li\"+o+\"><a\"+a+' href=\"#'+function(e){for(var n=e,t=i.uniqueSlugStartIndex;Object.prototype.hasOwnProperty.call(s,n);)n=e+\"-\"+t++;return s[n]=!0,n}(r.slugify(t.n))+'\">'+(\"function\"==typeof i.format?i.format(t.n,n):n(t.n))+\"</a>\"+e(t)+\"</li>\":u+=e(t)}),(0===t.l||c(t.l))&&(u+=\"</\"+n(i.listType)+\">\"),u}(l)},t.core.ruler.push(\"generateTocAst\",function(e){l=function(e){for(var n={l:0,n:\"\",c:[]},t=[n],r=0,l=e.length;r<l;r++){var i=e[r];if(\"heading_open\"===i.type){var o=e[r+1].children.filter(function(e){return\"text\"===e.type||\"code_inline\"===e.type}).reduce(function(e,n){return e+n.content},\"\"),s={l:parseInt(i.tag.substr(1),10),n:o,c:[]};if(s.l>t[0].l)t[0].c.push(s),t.unshift(s);else if(s.l===t[0].l)t[1].c.push(s),t[0]=s;else{for(;s.l<=t[0].l;)t.shift();t[0].c.push(s),t.unshift(s)}}}return n}(e.tokens),\"function\"==typeof r.callback&&r.callback(t.renderer.rules.tocOpen()+t.renderer.rules.tocBody()+t.renderer.rules.tocClose(),l)}),t.block.ruler.before(\"heading\",\"toc\",function(e,n,t,r){var l,o=e.src.slice(e.bMarks[n]+e.tShift[n],e.eMarks[n]).split(\" \")[0];if(!i.test(o))return!1;if(r)return!0;var s=i.exec(o),c={};if(null!==s&&3===s.length)try{c=JSON.parse(s[2])}catch(e){}return e.line=n+1,(l=e.push(\"tocOpen\",\"nav\",1)).markup=\"\",l.map=[n,e.line],l.inlineOptions=c,(l=e.push(\"tocBody\",\"\",0)).markup=\"\",l.map=[n,e.line],l.inlineOptions=c,l.children=[],(l=e.push(\"tocClose\",\"nav\",-1)).markup=\"\",!0},{alt:[\"paragraph\",\"reference\",\"blockquote\"]})}});\n//# sourceMappingURL=markdownItTocDoneRight.umd.js.map\n"
  },
  {
    "path": "src/data/extra/web/js/markdownit.js",
    "content": "class MarkdownItOptions {\n    constructor() {\n        // Enable HTML tags in source.\n        this.enableHtmlTag = true;\n        // Convert '\\n' in paragraphs into <br>.\n        this.enableAutoBreaks = false;\n        // CSS language prefix for fenced code blocks.\n        this.languagePrefix = 'lang-';\n        // Convert URL-like text to links.\n        this.enableLinkify = true;\n        // Enable some language-neural replacement and quotes beautification.\n        this.enableTypographer = false;\n        // Double and single quotes replacement pairs.\n        this.quotes = '';\n    }\n}\n\n// Classify code nodes by lang.\nclass CodeNodeStoreByLang {\n    constructor() {\n        this.prefix = 'lang-';\n\n        // [class] -> NodeList.\n        this.knownNodes = new Map();\n\n        // Nodes without lang specified or unknown langs.\n        this.unknownNodes = [];\n    }\n\n    // Register @p_langs as known langs.\n    registerLangs(p_langs) {\n        p_langs.forEach((p_lang) => {\n            this.knownNodes.set(this.prefix + p_lang, []);\n        });\n    }\n\n    // Add one node to store.\n    addNode(p_node) {\n        if (!p_node || p_node.tagName.toLowerCase() != 'code') {\n            return;\n        }\n\n        for (let i = 0; i < p_node.classList.length; ++i) {\n            let key = p_node.classList[i];\n            if (key.startsWith(this.prefix)) {\n                if (this.knownNodes.has(key)) {\n                    let val = this.knownNodes.get(key);\n                    val.push(p_node);\n                    this.knownNodes.set(key, val);\n                    return;\n                }\n                // We assume that there is only one lang- class.\n                break;\n            }\n        }\n\n        this.unknownNodes.push(p_node);\n    }\n\n    // Clear all nodes.\n    clearNodes() {\n        for (let key of this.knownNodes.keys()) {\n            this.knownNodes.set(key, []);\n        }\n\n        this.unknownNodes = [];\n    }\n\n    getNodes(p_langs) {\n        if (!p_langs || p_langs.length == 0) {\n            return this.unknownNodes;\n        }\n\n        let nodes = [];\n        p_langs.forEach((p_lang) => {\n            let c = this.prefix + p_lang;\n            if (this.knownNodes.has(c)) {\n                if (nodes.length == 0) {\n                    nodes = this.knownNodes.get(c);\n                } else {\n                    nodes = nodes.concat(this.knownNodes.get(c));\n                }\n            }\n        });\n\n        return nodes;\n    }\n}\n\nclass MarkdownIt extends VxWorker {\n    constructor(p_options) {\n        super();\n\n        this.name = 'markdownit';\n\n        this.options = p_options;\n        if (!this.options) {\n            this.options = new MarkdownItOptions();\n            this.options.enableHtmlTag = window.vxOptions.htmlTagEnabled;\n            this.options.enableAutoBreaks = window.vxOptions.autoBreakEnabled;\n            this.options.enableLinkify = window.vxOptions.linkifyEnabled;\n        }\n\n        // Languages of code blocks that need to skip highlight.\n        this.langsToSkipHighlight = new Set();\n\n        // Node to prepend for FrontMatter metadata.\n        this.frontMatterNode = null;\n\n        this.lastContainerNode = null;\n\n        // Pre nodes collection.\n        this.preNodes = null;\n\n        this.codeNodesStore = new CodeNodeStoreByLang();\n\n        this.codeNodesCollected = false;\n\n        // Used to deduplicate header Ids.\n        // One for markdownItAnchor and one for markdownItTocDoneRight.\n        this.headerIds = [new Set(), new Set()];\n\n        this.mdit = window.markdownit({\n            html: this.options.enableHtmlTag,\n            breaks: this.options.enableAutoBreaks,\n            linkify: this.options.enableLinkify,\n            typographer: this.options.enableTypographer,\n            langPrefix: this.options.languagePrefix,\n            quotes: this.options.quotes,\n            highlight: (p_str, p_lang) => {\n                /* We will use asynchronous higlight.\n                if (p_lang && !this.langsToSkipHighlight.has(p_lang)) {\n                    if (Prism.languages[p_lang]) {\n                        return Prism.highlight(p_str, Prism.languages[p_lang], p_lang);\n                    }\n                }\n                */\n                // Use external default escaping.\n                return '';\n            }\n        });\n\n        // Enable file: schema of markdownIt.\n        this.defaultValidateLink = this.mdit.validateLink;\n        this.mdit.validateLink = (p_url) => {\n            let str = p_url.trim().toLowerCase();\n            return /^file:/.test(str) ? true : this.defaultValidateLink(p_url);\n        };\n\n        this.mdit.use(window.markdownitTaskLists);\n\n        this.mdit.use(window.markdownitSub);\n\n        this.mdit.use(window.markdownitSup);\n\n        this.mdit.use(window.markdownitEmoji);\n        this.mdit.renderer.rules.emoji = function(p_tokens, p_idx) {\n            return '<span class=\"emoji emoji_' + p_tokens[p_idx].markup + '\">'\n                   + p_tokens[p_idx].content\n                   + '</span>';\n        };\n\n        this.mdit.use(window.markdownitFootnote);\n\n        this.mdit.use(window['markdown-it-imsize.js']);\n\n        this.mdit.use(texmath, { delimitersList: ['dollars', 'raw'] });\n\n        // Support '::: alert-xxx \\n contents \\n :::\\n'.\n        this.mdit.use(window.markdownitContainer, 'alert', {\n            validate: function(p_params) {\n                return p_params.trim().match(/^alert-\\S+$/);\n            },\n\n            render: function (p_tokens, p_idx) {\n                let type = p_tokens[p_idx].info.trim().match(/^(alert-\\S+)$/);\n                if (p_tokens[p_idx].nesting === 1) {\n                    // opening tag\n                    let alertClass = type[1];\n                    return '<div class=\"vx-alert ' + alertClass + '\" role=\"alert\">';\n                } else {\n                    // closing tag\n                    return '</div>\\n';\n                }\n            }\n        });\n\n        this.mdit.use(window.markdownitFrontMatter, (p_metaData) => {\n            if (p_metaData) {\n                let detailsNode = document.createElement('details');\n                detailsNode.classList.add('vx-frontmatter');\n\n                let summaryNode = document.createElement('summary');\n                summaryNode.textContent = 'Metadata';\n                detailsNode.appendChild(summaryNode);\n\n                let preNode = document.createElement('pre');\n                preNode.innerHTML = p_metaData;\n                detailsNode.appendChild(preNode);\n\n                this.frontMatterNode = detailsNode;\n            } else {\n                this.frontMatterNode = null;\n            }\n        });\n\n        this.mdit.use(window.markdownitInjectLinenumbers);\n\n        if (window.vxOptions.protectFromXss) {\n            let scriptFolderPath = Utils.parentFolder(document.currentScript.src);\n            Utils.loadScripts([scriptFolderPath + '/markdown-it/xss.min.js',\n                               scriptFolderPath + '/markdown-it/markdown-it-xss.js'],\n                              () => {\n                                  this.mdit.use(window.markdownItXSS, {\n                                      whiteList: {\n                                          input: [\"style\", \"class\", \"disabled\", \"type\", \"checked\"],\n                                          span: [\"style\", \"class\"],\n                                      }\n                                  });\n                              });\n        }\n\n        this.mdit.use(window.markdownItAnchor, {\n            slugify: (str) => {\n                return this.generateHeaderId(this.headerIds[0], str);\n            },\n            permalink: true,\n            permalinkBefore: false,\n            permalinkClass: 'vx-header-anchor',\n            permalinkSpace: false,\n            // We use CSS:after to add the mark.\n            permalinkSymbol: '',\n            permalinkAttrs: (slug, state) => {\n                return {\n                    'vx-data-anchor-icon': '¶'\n                }\n            }\n        });\n\n        this.mdit.use(window.markdownItTocDoneRight, {\n            slugify: (str) => {\n                return this.generateHeaderId(this.headerIds[1], str);\n            },\n            containerClass: 'vx-table-of-contents'\n        });\n\n        this.mdit.use(window.markdownitImplicitFigure, {\n            figcaption: true\n        });\n\n        this.mdit.use(window.markdownitMark);\n    }\n\n    registerInternal() {\n        this.vxcore.on('markdownTextUpdated', (p_text) => {\n            this.render(this.vxcore.contentContainer,\n                        p_text,\n                        'window.vxcore.getWorker(\\'markdownit\\').markdownRenderFinished();');\n        });\n    }\n\n    // Render Markdown @p_text to HTML in @p_node.\n    // @p_finishCbStr will be called after finishing loading new content nodes.\n    // This could prevent Mermaid Gantt from negative width error.\n    render(p_node, p_text, p_finishCbStr) {\n        this.frontMatterNode = null;\n        this.codeNodesStore.clearNodes();\n        this.codeNodesCollected = false;\n        this.headerIds[0].clear();\n        this.headerIds[1].clear();\n\n        if (p_node != this.lastContainerNode) {\n            this.lastContainerNode = p_node;\n            this.preNodes = null;\n        }\n\n        if (!p_text) {\n            p_node.innerHTML = '';\n            this.finishWork();\n            this.markdownRenderFinished();\n            return;\n        }\n\n        let html = this.mdit.render(p_text);\n        p_node.innerHTML = html + this.loadedGuard(p_finishCbStr);\n\n        if (this.preNodes == null) {\n            this.preNodes = p_node.getElementsByTagName('pre');\n        }\n\n        if (this.frontMatterNode) {\n            p_node.insertAdjacentElement('afterbegin', this.frontMatterNode);\n        }\n\n        this.finishWork();\n    }\n\n    loadedGuard(p_cbStr) {\n        if (!p_cbStr) {\n            return '';\n        }\n        // Add 1x1 transparent GIF image at the end to monitor the load process.\n        return '<img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" onload=\"'\n               + p_cbStr + ' try { this.parentNode.removeChild(this); } catch(error) { console.log(error); }\">';\n    }\n\n    addLangsToSkipHighlight(p_langs) {\n        p_langs.forEach((p_lang) => {\n            this.langsToSkipHighlight.add(p_lang);\n        });\n\n        this.codeNodesStore.registerLangs(p_langs);\n    }\n\n    // Will be called when basic markdown is rendered.\n    markdownRenderFinished() {\n        window.vxImageViewer.setupForAllImages(this.lastContainerNode);\n        this.vxcore.setBasicMarkdownRendered();\n    }\n\n    getCodeNodes(p_langs) {\n        if (!this.preNodes) {\n            return [];\n        }\n\n        if (!this.codeNodesCollected) {\n            // Collect code nodes.\n            this.codeNodesCollected = true;\n            for (let i = 0; i < this.preNodes.length; ++i) {\n                this.codeNodesStore.addNode(this.preNodes[i].firstElementChild);\n            }\n        }\n\n        return this.codeNodesStore.getNodes(p_langs);\n    }\n\n    generateHeaderId(p_headerIds, p_str) {\n        // Remove leading heading sequence.\n        let regExp = Utils.headingSequenceRegExp();\n        let idBase = p_str.replace(regExp, '');\n        idBase = idBase.replace(/\\s/g, '-').toLowerCase();\n        let id = idBase;\n        let idx = 1;\n        while (p_headerIds.has(id)) {\n            id = idBase + '-' + idx;\n            ++idx;\n        }\n        p_headerIds.add(id);\n        return id;\n    }\n}\n\nwindow.vxcore.registerWorker(new MarkdownIt(null));\n"
  },
  {
    "path": "src/data/extra/web/js/markdownviewer.js",
    "content": "/* Main script file for MarkdownViewer. */\n\nnew QWebChannel(qt.webChannelTransport,\n    function(p_channel) {\n        let adapter = p_channel.objects.vxAdapter;\n        // Export the adapter globally.\n        window.vxMarkdownAdapter = adapter;\n\n        // Connect signals from CPP side.\n        adapter.textUpdated.connect(function(p_text) {\n            window.vxcore.setMarkdownText(p_text);\n        });\n\n        adapter.editLineNumberUpdated.connect(function(p_lineNumber) {\n            window.vxcore.scrollToLine(p_lineNumber);\n        });\n\n        adapter.anchorScrollRequested.connect(function(p_anchor) {\n            window.vxcore.scrollToAnchor(p_anchor);\n        });\n\n        adapter.graphPreviewRequested.connect(function(p_id, p_timeStamp, p_lang, p_text) {\n            window.vxcore.previewGraph(p_id, p_timeStamp, p_lang, p_text);\n        });\n\n        adapter.mathPreviewRequested.connect(function(p_id, p_timeStamp, p_text) {\n            window.vxcore.previewMath(p_id, p_timeStamp, p_text);\n        });\n\n        adapter.scrollRequested.connect(function(p_up) {\n            window.vxcore.scroll(p_up);\n        });\n\n        adapter.htmlToMarkdownRequested.connect(function(p_id, p_timeStamp, p_html) {\n            window.vxcore.htmlToMarkdown(p_id, p_timeStamp, p_html);\n        });\n\n        adapter.highlightCodeBlockRequested.connect(function(p_idx, p_timeStamp, p_text) {\n            window.vxcore.highlightCodeBlock(p_idx, p_timeStamp, p_text);\n        });\n\n        adapter.parseStyleSheetRequested.connect(function(p_id, p_styleSheet) {\n            window.vxcore.parseStyleSheet(p_id, p_styleSheet);\n        });\n\n        adapter.crossCopyRequested.connect(function(p_id, p_timeStamp, p_target, p_baseUrl, p_html) {\n            window.vxcore.crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html);\n        });\n\n        adapter.findTextRequested.connect(function(p_texts, p_options, p_currentMatchLine) {\n            window.vxcore.findText(p_texts, p_options, p_currentMatchLine);\n        });\n\n        adapter.contentRequested.connect(function() {\n            window.vxcore.saveContent();\n        });\n\n        adapter.graphRenderDataReady.connect(function(p_id, p_index, p_format, p_data) {\n            window.vxcore.graphRenderDataReady(p_id, p_index, p_format, p_data);\n        });\n\n        console.log('QWebChannel has been set up');\n        if (window.vxcore.initialized) {\n            window.vxcore.kickOffMarkdown();\n        }\n    });\n\nwindow.vxcore.on('ready', function() {\n    if (window.vxMarkdownAdapter) {\n        window.vxcore.kickOffMarkdown();\n    }\n});\n"
  },
  {
    "path": "src/data/extra/web/js/markdownviewercore.js",
    "content": "/*\n    Markdown events:\n        - markdownTextUpdated(p_text)\n        - basicMarkdownRendered()\n        - fullMarkdownRendered()\n*/\nclass MarkdownViewerCore extends VXCore {\n    constructor() {\n        super();\n\n        // name -> worker.\n        this.workers = new Map();\n\n        this.numOfOngoingWorkers = 0;\n\n        this.pendingData = {\n            text: null,\n            lineNumber: -1,\n            anchor: null\n        }\n\n        this.numOfMuteScroll = 0;\n\n        this.turndown = null;\n\n        this.sectionNumberBaseLevel = 2;\n\n        // Dict mapping from {id, index} to callback for renderGraph().\n        this.renderGraphCallbacks = {}\n    }\n\n    initOnLoad() {\n        // Init DOM nodes.\n        this.contentContainer = document.getElementById('vx-content');\n        this.inplacePreviewContainer = document.getElementById('vx-inplace-preview');\n\n        this.nodeLineMapper = new NodeLineMapper(this, this.contentContainer);\n\n        this.graphPreviewer = new GraphPreviewer(this, this.inplacePreviewContainer);\n\n        this.crossCopyer = new CrossCopy(this);\n\n        this.searcher = new MarkJs(this, this.contentContainer);\n\n        this.sectionNumberBaseLevel = window.vxOptions.sectionNumberBaseLevel;\n        if (this.sectionNumberBaseLevel > 3) {\n            console.warn('only support section number base level less than 3', this.sectionNumberBaseLevel);\n            this.sectionNumberBaseLevel = 3;\n        }\n\n        this.setContentContainerOption('vx-constrain-image-width',\n                                       window.vxOptions.constrainImageWidthEnabled || !window.vxOptions.scrollable);\n        this.setContentContainerOption('vx-image-align-center',\n                                       window.vxOptions.imageAlignCenterEnabled);\n        this.setContentContainerOption('vx-indent-first-line',\n                                       window.vxOptions.indentFirstLineEnabled);\n        this.setContentContainerOption('line-numbers',\n                                       window.vxOptions.codeBlockLineNumberEnabled);\n        this.setBodyOption('vx-transparent-background',\n                           window.vxOptions.transparentBackgroundEnabled);\n        this.setContentContainerOption('vx-nonscrollable',\n                                       !window.vxOptions.scrollable);\n\n        this.setBodySize(window.vxOptions.bodyWidth, window.vxOptions.bodyHeight);\n        document.body.style.height = '800';\n    }\n\n    setContentContainerOption(p_class, p_enabled) {\n        if (p_enabled) {\n            this.contentContainer.classList.add(p_class);\n        } else {\n            this.contentContainer.classList.remove(p_class);\n        }\n    }\n\n    setBodyOption(p_class, p_enabled) {\n        if (p_enabled) {\n            document.body.classList.add(p_class);\n        } else {\n            document.body.classList.remove(p_class);\n        }\n    }\n\n    registerWorker(p_worker) {\n        this.workers.set(p_worker.name, p_worker);\n\n        p_worker.register(this);\n    }\n\n    finishWorker(p_name) {\n        --this.numOfOngoingWorkers;\n        if (this.numOfOngoingWorkers == 0) {\n            // Signal out anyway.\n            this.emit('fullMarkdownRendered');\n            window.vxMarkdownAdapter.setWorkFinished();\n\n            // Check pending work.\n            if (this.pendingData.text) {\n                this.setMarkdownText(this.pendingData.text);\n            } else if (this.pendingData.lineNumber > -1) {\n                this.scrollToLine(this.pendingData.lineNumber);\n            }\n        }\n    }\n\n    getWorker(p_name) {\n        return this.workers.get(p_name);\n    }\n\n    kickOffMarkdown() {\n        if (this.kickedOff) {\n            return;\n        }\n\n        console.log('viewer is ready now, kick off Markdown');\n        this.kickedOff = true;\n\n        window.vxMarkdownAdapter.setReady(true);\n    }\n\n    setMarkdownText(p_text) {\n        if (this.numOfOngoingWorkers > 0) {\n            this.pendingData.text = p_text;\n            console.info('wait for last render finish with remaing workers',\n                         this.numOfOngoingWorkers);\n        } else {\n            this.numOfOngoingWorkers = this.workers.size;\n            this.pendingData.text = null;\n            console.log('start new round with ' + this.numOfOngoingWorkers + ' workers');\n            this.emit('markdownTextUpdated', p_text);\n        }\n    }\n\n    scrollToLine(p_lineNumber) {\n        if (p_lineNumber < 0) {\n            return;\n        }\n        if (this.numOfOngoingWorkers > 0) {\n            this.pendingData.lineNumber = p_lineNumber;\n            console.log('wait for render finish before scroll');\n        } else {\n            this.pendingData.lineNumber = -1;\n            this.nodeLineMapper.scrollToLine(p_lineNumber);\n        }\n    }\n\n    scrollToAnchor(p_anchor) {\n        if (!p_anchor) {\n            return;\n        }\n        if (this.numOfOngoingWorkers > 0) {\n            this.pendingData.anchor = p_anchor;\n            console.log('wait for render finish before scroll');\n        } else {\n            this.pendingData.anchor = '';\n            this.nodeLineMapper.scrollToAnchor(p_anchor);\n        }\n    }\n\n    setBasicMarkdownRendered() {\n        this.emit('basicMarkdownRendered');\n    }\n\n    muteScroll() {\n        ++this.numOfMuteScroll;\n    }\n\n    unmuteScroll() {\n        window.setTimeout(() => {\n            if (this.numOfMuteScroll > 0) {\n                --this.numOfMuteScroll;\n                if (this.numOfMuteScroll == 0) {\n                    this.nodeLineMapper.updateAfterScrollUnmuted();\n                }\n            }\n        }, 1000);\n    }\n\n    isScrollMuted() {\n        return this.numOfMuteScroll > 0;\n    }\n\n    setTopLineNumber(p_lineNumber) {\n        window.vxMarkdownAdapter.setTopLineNumber(p_lineNumber);\n    }\n\n    previewGraph(p_id, p_timeStamp, p_lang, p_text) {\n        if (this.graphPreviewer) {\n            this.graphPreviewer.previewGraph(p_id, p_timeStamp, p_lang, p_text);\n        }\n    }\n\n    previewMath(p_id, p_timeStamp, p_text) {\n        if (this.graphPreviewer) {\n            this.graphPreviewer.previewMath(p_id, p_timeStamp, p_text);\n        }\n    }\n\n    setGraphPreviewData(p_data) {\n        window.vxMarkdownAdapter.setGraphPreviewData(p_data.id,\n                                                     p_data.timeStamp,\n                                                     p_data.format,\n                                                     p_data.data,\n                                                     p_data.base64,\n                                                     p_data.needScale);\n    }\n\n    setMathPreviewData(p_data) {\n        window.vxMarkdownAdapter.setMathPreviewData(p_data.id,\n                                                    p_data.timeStamp,\n                                                    p_data.format,\n                                                    p_data.data,\n                                                    p_data.base64,\n                                                    p_data.needScale);\n    }\n\n    setHeadings(p_headings) {\n        window.vxMarkdownAdapter.setHeadings(p_headings);\n    }\n\n    setCurrentHeadingAnchor(p_idx, p_anchor) {\n        window.vxMarkdownAdapter.setCurrentHeadingAnchor(p_idx, p_anchor);\n    }\n\n    setSectionNumberEnabled(p_enabled) {\n        let sectionClass = 'vx-section-number';\n        let sectionLevelClass = 'vx-section-number-' + this.sectionNumberBaseLevel;\n        this.setContentContainerOption(sectionClass, p_enabled);\n        this.setContentContainerOption(sectionLevelClass, p_enabled);\n    }\n\n    scroll(p_up) {\n        EasyAccess.scroll(p_up);\n    }\n\n    setKeyPress(p_key, p_ctrl, p_shift, p_meta) {\n        window.vxMarkdownAdapter.setKeyPress(p_key, p_ctrl, p_shift, p_meta);\n    }\n\n    zoom(p_zoomIn) {\n        window.vxMarkdownAdapter.zoom(p_zoomIn);\n    }\n\n    htmlToMarkdown(p_id, p_timeStamp, p_html) {\n        if (!this.turndown) {\n            this.turndown = new TurndownConverter(this);\n        }\n\n        let markdown = this.turndown.turndown(p_html);\n        window.vxMarkdownAdapter.setMarkdownFromHtml(p_id, p_timeStamp, markdown);\n    }\n\n    highlightCodeBlock(p_idx, p_timeStamp, p_text) {\n        let match = /^```[^\\S\\n]*(\\S+)?\\s*\\n([\\s\\S]+)\\n```\\s*$/.exec(p_text);\n        if (!match || !match[1] || !match[2]) {\n            window.vxMarkdownAdapter.setCodeBlockHighlightHtml(p_idx, p_timeStamp, '');\n            return;\n        }\n\n        let lang = match[1];\n        let body = match[2];\n\n        if (Prism && Prism.languages[lang]) {\n             let html = Prism.highlight(body, Prism.languages[lang], lang);\n            window.vxMarkdownAdapter.setCodeBlockHighlightHtml(p_idx, p_timeStamp, html);\n        } else {\n            window.vxMarkdownAdapter.setCodeBlockHighlightHtml(p_idx, p_timeStamp, '');\n        }\n    }\n\n    parseStyleSheet(p_id, p_styleSheet) {\n        let doc = document.implementation.createHTMLDocument('');\n        let styleEle = document.createElement('style');\n        styleEle.textContent = p_styleSheet;\n        doc.body.appendChild(styleEle);\n\n        let styles = [];\n        for (let i = 0; i < styleEle.sheet.cssRules.length; ++i) {\n            let rule = styleEle.sheet.cssRules[i];\n            if (rule.type != CSSRule.STYLE_RULE) {\n                continue;\n            }\n\n            styles.push({\n                selector: rule.selectorText,\n                color: rule.style.color,\n                backgroundColor: rule.style.backgroundColor,\n                fontWeight: rule.style.fontWeight,\n                fontStyle: rule.style.fontStyle\n            });\n        }\n\n        window.vxMarkdownAdapter.setStyleSheetStyles(p_id, styles);\n    }\n\n    setCrossCopyTargets(p_targets) {\n        window.vxMarkdownAdapter.setCrossCopyTargets(p_targets);\n    }\n\n    crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html) {\n        this.crossCopyer.crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html);\n    }\n\n    setCrossCopyResult(p_id, p_timeStamp, p_html) {\n        window.vxMarkdownAdapter.setCrossCopyResult(p_id, p_timeStamp, p_html);\n    }\n\n    findText(p_texts, p_options, p_currentMatchLine) {\n        this.searcher.findText(p_texts, p_options, p_currentMatchLine);\n    }\n\n    showFindResult(p_texts, p_totalMatches, p_currentMatchIndex) {\n        window.vxMarkdownAdapter.setFindText(p_texts, p_totalMatches, p_currentMatchIndex);\n    }\n\n    saveContent() {\n        if (!this.initialized) {\n            console.warn('saveContent() called before initialization');\n            window.vxMarkdownAdapter.setSavedContent('', '', '');\n            return;\n        }\n        window.vxMarkdownAdapter.setSavedContent(\"\",\n                                                 Utils.fetchStyleContent(),\n                                                 this.contentContainer.outerHTML,\n                                                 document.body.classList.value);\n    }\n\n    setBodySize(p_width, p_height) {\n        if (p_width > 0) {\n            document.body.style.width = p_width + 'px';\n        }\n\n        if (p_height > 0) {\n            document.body.style.height = p_height + 'px';\n        }\n    }\n\n    renderGraph(p_id, p_index, p_format, p_lang, p_text, p_callback) {\n        this.renderGraphCallbacks[p_id + '_' + p_index] = p_callback;\n        window.vxMarkdownAdapter.renderGraph(p_id, p_index, p_format, p_lang, p_text);\n    }\n\n    graphRenderDataReady(p_id, p_index, p_format, p_data) {\n        let key = p_id + '_' + p_index;\n        if (key in this.renderGraphCallbacks) {\n            this.renderGraphCallbacks[key](p_id, p_index, p_format, p_data);\n            delete this.renderGraphCallbacks[key];\n        }\n    }\n}\n\nwindow.vxcore = new MarkdownViewerCore();\n"
  },
  {
    "path": "src/data/extra/web/js/markjs.js",
    "content": "class MarkJs {\n    constructor(p_adapter, p_container) {\n        this.className = 'vx-search-match';\n        this.currentMatchClassName = 'vx-current-search-match';\n        this.adapter = p_adapter;\n        this.container = p_container;\n        this.markjs = null;\n        this.cache = null;\n        this.matchedNodes = null;\n        this.currentMatchedNodes = null;\n\n        this.adapter.on('basicMarkdownRendered', () => {\n            this.clearCache();\n        });\n\n        this.adapter.on('rendered', () => {\n            this.clearCache();\n        });\n    }\n\n    // @p_options: {\n    //     findBackward,\n    //     caseSensitive,\n    //     wholeWordOnly,\n    //     regularExpression\n    // }\n    findText(p_texts, p_options, p_currentMatchLine) {\n        if (!this.markjs) {\n            this.markjs = new Mark(this.container);\n        }\n\n        if (!p_texts || p_texts.length == 0) {\n            // Clear the cache and highlight.\n            this.clearCache();\n            return;\n        }\n\n        if (this.findInCache(p_texts, p_options, p_currentMatchLine)) {\n            return;\n        }\n\n        // A new find.\n        this.clearCache();\n\n        let callbackFunc = function(markjs, texts, options, currentMatchLine) {\n            let _markjs = markjs;\n            let _texts = texts;\n            let _options = options;\n            let _currentMatchLine = currentMatchLine;\n            return function() {\n                if (_markjs.matchedNodes === null) {\n                    _markjs.matchedNodes = _markjs.container.getElementsByClassName(_markjs.className);\n                    _markjs.currentMatchedNodes = _markjs.container.getElementsByClassName(_markjs.currentMatchClassName);\n                }\n\n                // Update cache.\n                _markjs.cache = {\n                    texts: _texts,\n                    options: _options,\n                    currentIdx: -1\n                }\n\n                _markjs.updateCurrentMatch(_texts, !_options.findBackward, _currentMatchLine);\n            };\n        }\n\n        if (p_options.regularExpression) {\n            this.findByOneRegExp({\n                'texts': p_texts,\n                'options': p_options,\n                'textIdx': 0,\n                'lastCallback': callbackFunc(this, p_texts, p_options, p_currentMatchLine)\n            });\n        } else {\n            let opt = this.createMarkjsOptions(p_options);\n            opt.done = callbackFunc(this, p_texts, p_options, p_currentMatchLine);\n            this.markjs.mark(p_texts, opt);\n        }\n    }\n\n    createMarkjsOptions(p_options) {\n        let opt = {\n            'element': 'span',\n            'className': this.className,\n            'caseSensitive': p_options.caseSensitive,\n            'accuracy': p_options.wholeWordOnly ? 'exactly' : 'partially',\n            // Ignore SVG, or SVG will be corrupted.\n            'exclude': ['svg *'],\n            'separateWordSearch': false,\n            'acrossElements': true\n        }\n        return opt;\n    }\n\n    // @p_paras: {\n    //     texts,\n    //     options,\n    //     textIdx,\n    //     lastCallback\n    // }\n    findByOneRegExp(p_paras) {\n        console.log('findByOneRegExp', p_paras.texts.length, p_paras.textIdx);\n\n        if (p_paras.textIdx >= p_paras.texts.length) {\n            return;\n        }\n\n        let opt = this.createMarkjsOptions(p_paras.options);\n        if (p_paras.textIdx == p_paras.texts.length - 1) {\n            opt.done = p_paras.lastCallback;\n        } else {\n            let callbackFunc = function(markjs, paras) {\n                let _markjs = markjs;\n                let _paras = paras;\n                return function() {\n                    _paras.textIdx += 1;\n                    _markjs.findByOneRegExp(_paras);\n                };\n            };\n            opt.done = callbackFunc(this, p_paras);\n        }\n\n        // TODO: may need transformation from QRegularExpression to RegExp.\n        this.markjs.markRegExp(new RegExp(p_paras.texts[p_paras.textIdx]), opt);\n    }\n\n    clearCache() {\n        if (!this.markjs) {\n            return;\n        }\n\n        this.cache = null;\n        this.markjs.unmark();\n    }\n\n    findInCache(p_texts, p_options, p_currentMatchLine) {\n        if (!this.cache) {\n            return false;\n        }\n\n        if (p_texts.length != this.cache.texts.length) {\n            return false;\n        }\n\n        for (let i = 0; i < p_texts.length; ++i) {\n            if (!(p_texts[i] === this.cache.texts[i])) {\n                return false;\n            }\n        }\n\n        if (this.cache.options.caseSensitive == p_options.caseSensitive\n            && this.cache.options.wholeWordOnly == p_options.wholeWordOnly\n            && this.cache.options.regularExpression == p_options.regularExpression) {\n            // Matched. Move current match forward or backward.\n            this.updateCurrentMatch(p_texts, !p_options.findBackward, p_currentMatchLine);\n            return true;\n        }\n\n        return false;\n    }\n\n    updateCurrentMatch(p_texts, p_forward, p_currentMatchLine) {\n        let matches = this.matchedNodes.length;\n        if (matches == 0) {\n            this.adapter.showFindResult(p_texts, 0, 0);\n            return;\n        }\n\n        if (this.currentMatchedNodes.length > 0) {\n            console.assert(this.currentMatchedNodes.length == 1);\n            if (this.cache.currentIdx >= matches\n                || this.cache.currentIdx < 0\n                || this.matchedNodes[this.cache.currentIdx] != this.currentMatchedNodes[0]) {\n                // Need to update current index.\n                // The mismatch may comes from the rendering of graphs which may change the matches.\n                for (let i = 0; i < matches; ++i) {\n                    if (this.matchedNodes[i] === this.currentMatchedNodes[0]) {\n                        this.cache.currentIdx = i;\n                        break;\n                    }\n                }\n            }\n\n            this.matchedNodes[this.cache.currentIdx].classList.remove(this.currentMatchClassName);\n        } else {\n            this.cache.currentIdx = -1;\n        }\n\n        if (p_currentMatchLine > -1) {\n            this.cache.currentIdx = this.binarySearchCurrentIndexForLineNumber(p_currentMatchLine);\n        } else if (p_forward) {\n            this.cache.currentIdx += 1;\n            if (this.cache.currentIdx >= matches) {\n                this.cache.currentIdx = 0;\n            }\n        } else {\n            this.cache.currentIdx -= 1;\n            if (this.cache.currentIdx < 0) {\n                this.cache.currentIdx = matches - 1;\n            }\n        }\n\n        let node = this.matchedNodes[this.cache.currentIdx];\n        node.classList.add(this.currentMatchClassName);\n        if (!Utils.isVisible(node)) {\n            node.scrollIntoView();\n        }\n        this.adapter.showFindResult(p_texts, matches, this.cache.currentIdx);\n    }\n\n    binarySearchCurrentIndexForLineNumber(p_lineNumber) {\n        let viewY = this.adapter.nodeLineMapper.getViewYOfLine(p_lineNumber);\n        if (viewY === null) {\n            return 0;\n        }\n\n        let left = 0;\n        let right = this.matchedNodes.length - 1;\n        let lastIdx = -1;\n        while (left <= right) {\n            let mid = Math.floor((left + right) / 2);\n            let y = this.matchedNodes[mid].getBoundingClientRect().top;\n            if (y >= viewY) {\n                lastIdx = mid;\n                right = mid - 1;\n            } else {\n                left = mid + 1;\n            }\n        }\n\n        if (lastIdx != -1) {\n            return lastIdx;\n        } else {\n            return 0;\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/mathjax.js",
    "content": "window.MathJax = {\n    tex: {\n        inlineMath: [['$', '$'], ['\\\\(', '\\\\)']],\n        processEscapes: true,\n        tags: 'ams'\n    },\n    options: {\n        processHtmlClass: 'tex2jax_process|language-mathjax|lang-mathjax'\n    },\n    startup: {\n        typeset: false,\n        ready: function() {\n            MathJax.startup.defaultReady();\n            MathJax.startup.promise.then(() => {\n                window.vxcore.getWorker('mathjax').setMathJaxReady();\n            });\n        }\n    },\n    svg: {\n        // Make SVG self-contained.\n        fontCache: 'local',\n        scale: window.vxOptions.mathJaxScale > 0 ? window.vxOptions.mathJaxScale : 1\n    }\n};\n\nclass MathJaxRenderer extends VxWorker {\n    constructor() {\n        super();\n\n        this.name = 'mathjax';\n\n        this.initialized = false;\n\n        this.nodesToRender = [];\n\n        this.mathJaxScript = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js';\n\n        this.langs = ['mathjax'];\n\n        // Will be called when MathJax is ready.\n        this.readyCallback = function() {};\n    }\n\n    registerInternal() {\n        this.vxcore.on('basicMarkdownRendered', () => {\n            this.render(this.vxcore.contentContainer, 'tex-to-render');\n        });\n\n        this.vxcore.getWorker('markdownit').addLangsToSkipHighlight(this.langs);\n    }\n\n    initialize(p_callback) {\n        if (this.initialized) {\n            return true;\n        }\n\n        this.initialized = true;\n        this.readyCallback = p_callback;\n        if (!!window.vxOptions.mathJaxScript) {\n            this.mathJaxScript = window.vxOptions.mathJaxScript;\n            console.log('override MathJax script', this.mathJaxScript);\n        }\n        Utils.loadScript(this.mathJaxScript, null);\n        return false;\n    }\n\n    setMathJaxReady() {\n        this.readyCallback();\n    }\n\n    // Fetch all nodes of @p_className to render.\n    // Will fetch extra code nodes, too.\n    render(p_node, p_className) {\n        this.nodesToRender = [];\n\n        // Transform extra class nodes.\n        let extraNodes = this.vxcore.getWorker('markdownit').getCodeNodes(this.langs);\n        this.transformExtraNodes(p_node, p_className, extraNodes);\n\n        // Collect nodes to render.\n        let nodes = p_node.getElementsByClassName(p_className);\n        if (nodes.length == 0) {\n            this.finishWork();\n            return;\n        }\n\n        this.nodesToRender = Array.from(nodes);\n\n        if (!this.initialize(() => {\n            this.renderNodes();\n            })) {\n            return;\n        }\n\n        this.renderNodes();\n    }\n\n    // p_callback(svgNode).\n    renderText(p_container, p_text, p_callback) {\n        let func = () => {\n            // Check text and remove the guards.\n            let check = this.removeTextGuard(p_text);\n            if (!check) {\n                p_callback(null);\n                return;\n            }\n            let options = null;\n            try {\n                options = MathJax.getMetricsFor(p_container, check.display);\n            } catch (err) {\n                console.error('failed to render MathJax', err);\n                p_callback(null);\n                return;\n            }\n\n            let mathNode = null;\n            try {\n                mathNode = MathJax.tex2svg(check.text, options);\n            } catch (err) {\n                console.error('failed to render MathJax', err);\n            }\n            p_callback(mathNode ? mathNode.firstElementChild : null);\n        };\n\n        if (!this.initialize(func)) {\n            return;\n        }\n\n        func();\n    }\n\n    transformExtraNodes(p_node, p_className, p_extraNodes) {\n        p_extraNodes.forEach((node) => {\n            MathJaxRenderer.transformNode(node, p_className);\n        });\n    }\n\n    static transformNode(p_node, p_className) {\n        // Replace it with <section><eqn></eqn></section>.\n        let eqn = document.createElement('eqn');\n        eqn.classList.add(p_className);\n        eqn.textContent = p_node.textContent;\n\n        let section = document.createElement('section');\n        section.appendChild(eqn);\n\n        Utils.replaceNodeWithPreCheck(p_node, section);\n    }\n\n    renderNodes() {\n        if (this.nodesToRender.length > 0) {\n            try {\n                MathJax.texReset();\n            } catch (err) {\n                console.error('MathJax is not ready', err);\n                this.postProcessMathJax();\n                return;\n            }\n\n            MathJax.typesetPromise(this.nodesToRender)\n                .then(() => {\n                    this.postProcessMathJax();\n                })\n                .catch((err) => {\n                    console.error('failed to render MathJax', err);\n                    this.postProcessMathJax();\n                });\n        }\n    }\n\n    postProcessMathJax() {\n        this.finishWork();\n    }\n\n    // Return { text, display }.\n    removeTextGuard(p_text) {\n        let text = p_text.trim();\n        let display = false;\n\n        if (text.startsWith('$$') && text.endsWith('$$')) {\n            text = text.substring(2, text.length - 2);\n            display = true;\n        } else if (text.startsWith('$') && text.endsWith('$')) {\n            text = text.substring(1, text.length - 1);\n        } else if (text.match(/^\\\\begin\\s*\\{\\S+}[\\s\\S]+\\\\end\\s*\\{\\S+\\}$/)) {\n            display = true;\n        } else {\n            return null;\n        }\n\n        return { text: text, display: display };\n    }\n}\n\nwindow.vxcore.registerWorker(new MathJaxRenderer());\n"
  },
  {
    "path": "src/data/extra/web/js/mermaid/README.md",
    "content": "# [mermaid](https://github.com/mermaid-js/mermaid)\nv10.9.1\n"
  },
  {
    "path": "src/data/extra/web/js/mermaid.js",
    "content": "class Mermaid extends GraphRenderer {\n    constructor() {\n        super();\n\n        this.name = 'mermaid';\n\n        this.graphDivClass = 'vx-mermaid-graph';\n\n        this.extraScripts = [this.scriptFolderPath + '/mermaid/mermaid.min.js'];\n\n        // default/dark/forest/neutral.\n        this.theme = 'default';\n\n        this.langs = ['mermaid'];\n    }\n\n    initialize(p_callback) {\n        return super.initialize(() => {\n           mermaid.initialize({\n               startOnLoad: false,\n               theme: this.theme\n           });\n            p_callback();\n        });\n    }\n\n    // Render @p_node as Mermaid graph.\n    // Return true on success.\n    async renderOne(p_node, p_idx) {\n        let graphSvg = null;\n        try {\n            const { svg } = await mermaid.render('vx-mermaid-graph-' + p_idx,\n                                                 p_node.textContent);\n            graphSvg = svg;\n        } catch (p_err) {\n            console.error('failed to render Mermaid', p_err);\n            // Clean the container element, or Mermaid won't render the graph with\n            // the same id.\n            let graphNode = document.getElementById('vx-mermaid-graph-' + p_idx);\n            if (graphNode) {\n                let parentNode = graphNode.parentElement;\n                parentNode.outerHTML = '';\n                delete graphNode.parentElement;\n            }\n            this.finishRenderingOne();\n            return false;\n        }\n\n        if (!graphSvg) {\n            this.finishRenderingOne();\n            return false;\n        }\n\n        let graphDiv = document.createElement('div');\n        graphDiv.classList.add(this.graphDivClass);\n        try {\n            graphDiv.innerHTML = graphSvg;\n            window.vxImageViewer.setupSVGToView(graphDiv.children[0], true);\n        } catch (p_err) {\n            console.error('incorrect graph SVG definition', p_err);\n            this.finishRenderingOne();\n            return false;\n        }\n\n        Utils.checkSourceLine(p_node, graphDiv);\n\n        Utils.replaceNodeWithPreCheck(p_node, graphDiv);\n\n        this.finishRenderingOne();\n        return true;\n    }\n\n    // Render a graph from @p_text.\n    // Will append a div to @p_container and return the div.\n    async renderTextInternal(p_container, p_text, p_idx) {\n        let graphSvg = null;\n        try {\n            const { svg } = await mermaid.render('vx-mermaid-graph-stand-alone-' + p_idx,\n                                                 p_text);\n            graphSvg = svg;\n        } catch (p_err) {\n            console.error('failed to render Mermaid', p_err);\n            // Clean the container element, or Mermaid won't render the graph with\n            // the same id.\n            let graphNode = document.getElementById('vx-mermaid-graph-stand-alone-' + p_idx);\n            if (graphNode) {\n                let parentNode = graphNode.parentElement;\n                parentNode.outerHTML = '';\n                delete graphNode.parentElement;\n            }\n            return null;\n        }\n\n        if (!graphSvg) {\n            return null;\n        }\n\n        let graphDiv = document.createElement('div');\n        try {\n            graphDiv.innerHTML = graphSvg;\n        } catch (p_err) {\n            console.error('incorrect graph SVG definition', p_err);\n            return null;\n        }\n\n        p_container.appendChild(graphDiv);\n        console.log(graphDiv);\n        return graphDiv;\n    }\n\n    // p_callback(graphDiv).\n    async renderText(p_container, p_text, p_idx, p_callback) {\n        if (!this.initialize(async () => {\n                let graphDiv = await this.renderTextInternal(p_container, p_text, p_idx);\n                p_callback(graphDiv);\n            })) {\n            return;\n        }\n\n        let graphDiv = await this.renderTextInternal(p_container, p_text, p_idx);\n        console.log(graphDiv);\n        p_callback(graphDiv);\n    }\n}\n\nwindow.vxcore.registerWorker(new Mermaid());\n"
  },
  {
    "path": "src/data/extra/web/js/mindmap/core/mindmap-core.js",
    "content": "/**\n * 思维导图核心类\n * 负责功能模块的管理和基础功能的实现\n */\nclass MindMapCore {\n    constructor() {\n        // 功能模块映射表\n        this.features = new Map();\n        // MindElixir 实例\n        this.mindElixir = null;\n        // 事件发射器\n        this.eventEmitter = new EventEmitter();\n        // 初始化标志\n        this.initialized = false;\n        // MutationObserver 实例\n        this.observer = null;\n    }\n\n    /**\n     * 初始化\n     * 步骤：\n     * 1. 初始化思维导图实例\n     * 2. 设置功能模块\n     * 3. 初始化各功能模块\n     */\n    init() {\n        console.log('MindMapCore: init called');\n\n        // 初始化思维导图实例\n        console.log('MindMapCore: About to init MindElixir');\n        this.initMindElixir();\n\n        // 设置和初始化功能模块\n        console.log('MindMapCore: About to setup features');\n        this.setupFeatures();\n        console.log('MindMapCore: About to init features');\n        this.initFeatures();\n\n        // 监听内容变更事件\n        this.on('contentChanged', () => {\n            console.log('MindMapCore: Content changed, triggering auto-save');\n            // 自动保存统一使用ID 'auto_save'，在saveData中会被转换成0\n            this.saveData('auto_save');\n        });\n\n        // 添加键盘快捷键监听\n        this.setupKeyboardShortcuts();\n\n        // 设置初始化标志并触发ready事件\n        this.initialized = true;\n        console.log('MindMapCore: Emitting ready event');\n        this.emit('ready');\n    }\n\n    /**\n     * 事件监听\n     * @param {string} event - 事件名称\n     * @param {function} callback - 回调函数\n     */\n    on(event, callback) {\n        this.eventEmitter.on(event, callback);\n    }\n\n    /**\n     * 触发事件\n     * @param {string} event - 事件名称\n     * @param {...any} args - 事件参数\n     */\n    emit(event, ...args) {\n        this.eventEmitter.emit(event, ...args);\n    }\n\n\n\n    /**\n     * 初始化思维导图实例\n     */\n    initMindElixir() {\n        // 确保 MindElixir 已加载\n        if (typeof MindElixir === 'undefined') {\n            console.error('MindElixir library not loaded');\n            return;\n        }\n\n        // 创建思维导图实例\n        this.mindElixir = new MindElixir({\n            el: '#vx-mindmap',\n            direction: 2,\n            draggable: true,\n            contextMenu: true,\n            toolBar: true,\n            nodeMenu: true,\n            keypress: true,\n            allowUndo: true,\n            theme: {\n                primary: 'var(--vx-mindmap-primary-color)',\n                box: 'var(--vx-mindmap-box-color)',\n                line: 'var(--vx-mindmap-line-color)',\n                root: {\n                    color: 'var(--vx-mindmap-root-color)',\n                    background: 'var(--vx-mindmap-root-background)',\n                    fontSize: '16px',\n                    borderRadius: '4px',\n                    padding: '8px 16px'\n                },\n                child: {\n                    color: 'var(--vx-mindmap-child-color)',\n                    background: 'var(--vx-mindmap-child-background)',\n                    fontSize: '14px',\n                    borderRadius: '4px',\n                    padding: '6px 12px'\n                }\n            },\n            before: {\n                insertSibling: () => true,\n                async addChild() { return true; }\n            }\n        });\n\n        // 等待MindElixir实例初始化完成\n        const waitForInit = () => {\n            if (this.mindElixir && typeof this.mindElixir.getData === 'function') {\n                this.setupMindElixirEvents();\n            } else {\n                setTimeout(waitForInit, 100);\n            }\n        };\n        waitForInit();\n\n        // 使用MutationObserver监听DOM变化，确保链接在所有操作后都能重新渲染\n        this.setupMutationObserver();\n\n        console.log('MindMapCore: MindElixir instance created');\n    }\n\n    /**\n     * 设置MindElixir事件监听器\n     */\n    setupMindElixirEvents() {\n        console.log('MindMapCore: Setting up MindElixir events');\n\n        // 监听操作事件，这些事件包括节点的添加、删除、移动和编辑\n        this.mindElixir.bus.addListener('operation', (name, obj) => {\n            console.log('MindMapCore: MindElixir operation event received. Name:', name, 'Object:', obj);\n\n            // 针对Hyperlink的编辑，进行一次即时的、有针对性的重绘\n            if (name === 'editHyperLink' && obj) {\n                // 使用微任务或短延迟确保在MindElixir的DOM操作后执行\n                setTimeout(() => {\n                    const linkHandler = this.getFeature('linkHandler');\n                    const domNode = document.querySelector(`tpc[data-nodeid=me${obj.id}]`);\n                    if (linkHandler && domNode) {\n                        console.log('MindMapCore: Directly processing node after hyperlink edit:', obj.id);\n                        linkHandler.processNodeWithData(domNode, linkHandler.nodeDataMap);\n                    } else {\n                        console.warn('MindMapCore: Could not find linkHandler or domNode for hyperlink edit.');\n                    }\n                }, 50);\n                // 此次操作已精确处理，无需触发全局重绘\n                return;\n            }\n            \n            // 对其他所有操作使用防抖处理，避免频繁的全局更新\n            if (this._processNodesTimeout) {\n                clearTimeout(this._processNodesTimeout);\n            }\n            \n            this._processNodesTimeout = setTimeout(() => {\n                this.processNodesAndRelayout();\n            }, 100);\n        });\n\n        // 监听展开/折叠事件\n        // MindElixir的expandNode事件同时处理展开和折叠\n        this.mindElixir.bus.addListener('expandNode', () => {\n            console.log('MindMapCore: Node expanded/collapsed');\n            // 添加一个短暂的延迟，以确保DOM更新稳定后再进行处理\n            setTimeout(() => {\n                this.processNodesAndRelayout();\n            }, 50);\n        });\n\n        console.log('MindMapCore: MindElixir events setup complete');\n    }\n\n    /**\n     * 设置MutationObserver来监听DOM变化\n     * 这是一种更可靠的方式来捕捉所有由MindElixir引起的UI更新\n     */\n    setupMutationObserver() {\n        if (!this.mindElixir || !this.mindElixir.box) {\n            console.error('MindMapCore: Cannot setup MutationObserver, mindElixir.box is not available.');\n            return;\n        }\n\n        this.observer = new MutationObserver((mutations) => {\n            // 使用防抖避免过于频繁的调用\n            if (this._mutationTimeout) {\n                clearTimeout(this._mutationTimeout);\n            }\n            this._mutationTimeout = setTimeout(() => {\n                console.log('MindMapCore: DOM changed, processing nodes due to mutation.');\n                this.processNodesAndRelayout();\n            }, 150);\n        });\n\n        this.observer.observe(this.mindElixir.box, {\n            childList: true, // 监听子节点的添加或删除\n            subtree: true,   // 监听所有后代节点\n        });\n\n        console.log('MindMapCore: MutationObserver setup complete, watching for changes.');\n    }\n\n    /**\n     * 禁用MutationObserver\n     */\n    disableObserver() {\n        if (this.observer) {\n            this.observer.disconnect();\n            // console.log('MindMapCore: MutationObserver disabled.');\n        }\n    }\n\n    /**\n     * 启用MutationObserver\n     */\n    enableObserver() {\n        if (this.observer) {\n            this.observer.observe(this.mindElixir.box, {\n                childList: true,\n                subtree: true,\n            });\n            // console.log('MindMapCore: MutationObserver enabled.');\n        }\n    }\n\n    /**\n     * 处理节点并强制重新布局\n     * 确保在添加自定义元素（如链接图标）后，思维导图的布局能够更新\n     */\n    processNodesAndRelayout() {\n        if (!this.mindElixir || typeof this.mindElixir.getAllData !== 'function') {\n            console.warn('MindMapCore: MindElixir not ready, skipping node processing.');\n            return;\n        }\n\n        const linkHandler = this.getFeature('linkHandler');\n        if (!linkHandler) {\n            console.warn('MindMapCore: LinkHandler feature not available');\n            return;\n        }\n\n        try {\n            // 1. 触发linkHandler处理所有节点，添加自定义图标\n            linkHandler.processAllNodes();\n\n            // 2. 强制MindElixir重新计算布局和连线\n            //    这是解决布局错乱的关键\n            if (this.mindElixir && typeof this.mindElixir.linkDiv === 'function') {\n                console.log('MindMapCore: Forcing re-layout after node processing.');\n                this.mindElixir.linkDiv();\n            }\n\n            // 3. 触发内容变更事件，以启动自动保存\n            this.emit('contentChanged');\n\n        } catch (error) {\n            console.error('MindMapCore: Error processing nodes and re-layouting:', error);\n        }\n    }\n\n    /**\n     * 设置功能模块\n     * 在此方法中注册所需的功能模块\n     * 子类应该重写此方法来注册具体的功能模块\n     */\n    setupFeatures() {\n        // 子类应该重写此方法\n        console.log('MindMapCore: setupFeatures called - should be overridden by subclass');\n    }\n\n    /**\n     * 初始化所有功能模块\n     * 步骤：\n     * 1. 遍历所有已注册的功能模块\n     * 2. 调用每个模块的init方法进行初始化\n     */\n    initFeatures() {\n        console.log('MindMapCore: initFeatures called, features count:', this.features.size);\n        for (const [name, feature] of this.features.entries()) {\n            console.log('MindMapCore: Initializing feature:', name);\n            if (typeof feature.init === 'function') {\n                feature.init();\n                console.log('MindMapCore: Feature', name, 'initialized');\n            } else {\n                console.warn('MindMapCore: Feature', name, 'has no init method');\n            }\n        }\n    }\n\n    /**\n     * 注册功能模块\n     * 步骤：\n     * 1. 将功能模块实例保存到映射表中\n     * 2. 注入核心实例到功能模块中\n     * \n     * @param {string} name - 功能模块名称\n     * @param {object} feature - 功能模块实例\n     */\n    registerFeature(name, feature) {\n        this.features.set(name, feature);\n        // 注入核心实例到功能模块\n        if (typeof feature.setCore === 'function') {\n            feature.setCore(this);\n        }\n    }\n\n    /**\n     * 获取功能模块实例\n     * @param {string} name - 功能模块名称\n     * @returns {object} 功能模块实例\n     */\n    getFeature(name) {\n        return this.features.get(name);\n    }\n\n    /**\n     * 设置思维导图数据\n     * 步骤：\n     * 1. 验证数据有效性\n     * 2. 保存数据\n     * 3. 更新思维导图显示\n     * 4. 通知所有功能模块数据变更\n     * \n     * @param {object} p_data - 思维导图数据\n     */\n    setData(p_data) {\n        console.log('MindMapCore: setData called with:', p_data);\n\n        let data;\n        try {\n            // 解析数据或使用默认数据\n            if (p_data && p_data !== \"\") {\n                // 检查p_data是否已经是对象\n                if (typeof p_data === 'object') {\n                    data = p_data;\n                } else {\n                    data = JSON.parse(p_data);\n                }\n                console.log('MindMapCore: Using data:', data);\n            } else {\n                data = MindElixir.new('New Topic');\n                console.log('MindMapCore: Using default data');\n            }\n\n            // 检查数据格式\n            if (!data.nodeData) {\n                console.error('MindMapCore: Invalid data format - missing nodeData');\n                data = MindElixir.new('New Topic');\n            }\n\n            // 保存数据供功能模块使用\n            this.data = data;\n\n            // 初始化思维导图\n            console.log('MindMapCore: Initializing MindElixir with data');\n            this.mindElixir.init(data);\n\n            // 通知所有功能模块数据变更\n            console.log('MindMapCore: Notifying features of data change');\n            for (const feature of this.features.values()) {\n                if (typeof feature.onDataChange === 'function') {\n                    feature.onDataChange(data);\n                }\n            }\n\n            // 等待MindElixir渲染完成后处理节点，确保链接标签正确显示\n            this.processNodesAndRelayout();\n            \n            // 触发渲染完成事件\n            console.log('MindMapCore: Emitting rendered event');\n            this.emit('rendered');\n\n        } catch (error) {\n            console.error('MindMapCore: Error in setData:', error);\n            // 如果解析失败，使用默认数据\n            data = MindElixir.new('New Topic');\n            this.mindElixir.init(data);\n        }\n    }\n\n    /**\n     * 设置键盘快捷键\n     * 监听保存快捷键 (Ctrl+S / Cmd+S)\n     */\n    setupKeyboardShortcuts() {\n        document.addEventListener('keydown', (event) => {\n            // 检查是否是保存快捷键\n            const isSaveShortcut = (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 's';\n            \n            if (isSaveShortcut) {\n                event.preventDefault(); // 阻止浏览器默认的保存行为\n                console.log('MindMapCore: Save shortcut detected, notifying contents changed.');\n                \n                // 标准做法：只通知后端内容已变更，由后端处理后续保存逻辑\n                if (window.vxAdapter?.notifyContentsChanged) {\n                    window.vxAdapter.notifyContentsChanged();\n                }\n            }\n        });\n        \n        console.log('MindMapCore: Keyboard shortcuts setup complete');\n    }\n\n    /**\n     * 保存思维导图数据\n     * @param {number|string} p_id - 数据ID\n     */\n    saveData(p_id) {\n        console.log('MindMapCore: saveData called with id:', p_id);\n        \n        if (!this.mindElixir) {\n            const error = 'Cannot save - mindElixir instance is null';\n            console.error('MindMapCore:', error);\n            this.emitSaveResult(p_id, false, error);\n            return;\n        }\n\n        try {\n            console.log('MindMapCore: Getting all data from mindElixir');\n            const allData = this.mindElixir.getAllData();\n            \n            // 验证数据有效性\n            if (!allData || !allData.nodeData) {\n                const error = 'Invalid mind map data structure';\n                console.error('MindMapCore:', error);\n                this.emitSaveResult(p_id, false, error);\n                return;\n            }\n\n            // 准备要保存的数据\n            const dataToSave = JSON.stringify(allData);\n\n            if (window.vxAdapter?.setSavedData) {\n                // 将内部使用的 'auto_save' ID 转换为后端能理解的 0\n                const saveId = p_id === 'auto_save' ? 0 : p_id;\n                window.vxAdapter.setSavedData(saveId, dataToSave);\n                this.emitSaveResult(saveId, true, '', dataToSave);\n            } else {\n                const error = 'vxAdapter.setSavedData is not available';\n                console.error('MindMapCore:', error);\n                this.emitSaveResult(p_id, false, error);\n            }\n        } catch (error) {\n            console.error('MindMapCore: Error in save process:', error);\n            this.emitSaveResult(p_id, false, error.message);\n        }\n    }\n\n    /**\n     * 发送保存结果事件\n     * @param {number|string} id - 保存ID\n     * @param {boolean} success - 是否成功\n     * @param {string} [error] - 错误信息\n     * @param {string} [data] - 保存的数据\n     */\n    emitSaveResult(id, success, error = '', data = '') {\n        const result = {\n            id: id,\n            success: success,\n            error: error,\n            timestamp: Date.now(),\n            data: data\n        };\n\n        this.emit('saveCompleted', result);\n    }\n} "
  },
  {
    "path": "src/data/extra/web/js/mindmap/features/link-handler/link-handler.js",
    "content": "/**\n * 思维导图链接处理功能模块\n * 提供节点链接的可视化和交互功能\n */\nclass LinkHandlerFeature {\n    constructor() {\n        this.core = null;\n        this.nodeDataMap = new Map();\n    }\n\n    /**\n     * 设置核心实例引用\n     * @param {MindMapCore} core - 核心实例\n     */\n    setCore(core) {\n        this.core = core;\n    }\n\n    /**\n     * 初始化链接处理功能\n     */\n    init() {\n        console.log('LinkHandlerFeature: init called');\n        this.setupLinkTagClickListener();\n        console.log('LinkHandlerFeature: initialization complete');\n    }\n\n    /**\n     * 处理节点数据添加 link 增强功能\n     * 步骤：\n     * 1. 验证节点数据\n     * 2. 检查是否存在超链接\n     * 3. 添加链接标签\n     * \n     * @param {HTMLElement} domNode - DOM节点元素\n     * @param {object} nodeDataMapOrNodeData - 节点数据映射或单个节点数据\n     */\n    processNodeWithData(domNode, nodeDataMapOrNodeData) {\n        if (!domNode) {\n            console.warn('LinkHandlerFeature: No DOM node provided');\n            return;\n        }\n\n        let nodeData = null;\n        let nodeId = null;\n\n        // 检查第二个参数是Map还是单个nodeData对象\n        if (nodeDataMapOrNodeData instanceof Map) {\n            // 如果是Map，需要通过domNode查找对应的nodeData\n            const nodeDataMap = nodeDataMapOrNodeData;\n            \n            // 通过data-nodeid属性获取节点ID\n            if (domNode.hasAttribute('data-nodeid')) {\n                nodeId = domNode.getAttribute('data-nodeid');\n                // console.log('LinkHandlerFeature: Processing node with ID:', nodeId);\n                \n                // 处理MindElixir的ID前缀（DOM中可能有\"me\"前缀，但nodeData中没有）\n                let cleanNodeId = nodeId;\n                if (nodeId.startsWith('me')) {\n                    cleanNodeId = nodeId.substring(2); // 移除\"me\"前缀\n                    // console.log('LinkHandlerFeature: Cleaned node ID:', cleanNodeId);\n                }\n                \n                // 首先尝试用原始ID匹配\n                nodeData = nodeDataMap.get(nodeId);\n                \n                // 如果失败，尝试用清理后的ID匹配\n                if (!nodeData) {\n                    nodeData = nodeDataMap.get(cleanNodeId);\n                }\n\n                // debug use\n                // if (nodeData) {\n                //     console.log('LinkHandlerFeature: Found node data:', {\n                //         id: nodeData.id,\n                //         topic: nodeData.topic,\n                //         hyperLink: nodeData.hyperLink\n                //     });\n                // } else {\n                //     console.warn('LinkHandlerFeature: No node data found for ID:', nodeId);\n                // }\n            }\n        } else {\n            // 如果是单个nodeData对象\n            nodeData = nodeDataMapOrNodeData;\n            nodeId = nodeData ? nodeData.id : null;\n        }\n\n        // 移除MindElixir默认生成的超链接元素，避免重叠\n        const defaultLink = domNode.querySelector('a.hyper-link');\n        if (defaultLink) {\n            defaultLink.remove();\n        }\n\n        // 如果没有找到nodeData或没有hyperLink，移除可能存在的旧标签并返回\n        if (!nodeData || !nodeData.hyperLink) {\n            const existingContainer = domNode.querySelector('.vx-link-container');\n            if (existingContainer) {\n                existingContainer.remove();\n            }\n            return;\n        }\n\n        // 查找或创建链接容器\n        let textContainer = this.findTextContainer(domNode);\n        if (!textContainer) {\n            console.warn('LinkHandlerFeature: Could not find text container for node:', nodeId);\n            return;\n        }\n\n        // 检查是否已存在链接标签\n        let existingContainer = textContainer.querySelector('.vx-link-container');\n        if (existingContainer) {\n            existingContainer.remove();\n        }\n\n        // 提取文件扩展名\n        const extension = this.extractFileExtension(nodeData.hyperLink);\n        if (!extension) {\n            console.warn('LinkHandlerFeature: Could not extract extension from:', nodeData.hyperLink);\n            return;\n        }\n\n        // debug use\n        // console.log('LinkHandlerFeature: Creating link tag for node:', {\n        //     nodeId: nodeId,\n        //     extension: extension,\n        //     hyperLink: nodeData.hyperLink\n        // });\n\n        // 获取样式配置\n        const style = this.getLinkTagStyle(extension);\n\n        // 创建链接标签容器\n        const linkContainer = document.createElement('span');\n        linkContainer.className = 'vx-link-container';\n        linkContainer.style.cssText = `\n            display: inline-flex;\n            align-items: center;\n            margin-left: 4px;\n            vertical-align: baseline;\n            flex-shrink: 0;\n            position: relative;\n            z-index: 1;\n        `;\n\n        // 创建链接标签\n        const linkTag = document.createElement('span');\n        linkTag.className = 'vx-link-tag';\n        linkTag.textContent = `[${extension}]`;\n        linkTag.dataset.url = nodeData.hyperLink;\n        linkTag.dataset.nodeid = nodeId;\n        linkTag.title = `点击打开: ${nodeData.hyperLink}\\n拖拽到不同方向可以控制打开位置\\n↑上方 ↓下方 ←左侧 →右侧（默认）`;\n        linkTag.style.cssText = `\n            background: ${style.backgroundColor};\n            color: ${style.textColor};\n            padding: 2px 4px;\n            border-radius: 3px;\n            font-size: 10px;\n            font-weight: bold;\n            cursor: pointer;\n            user-select: none;\n            border: 1px solid ${style.borderColor};\n            display: inline-flex;\n            align-items: center;\n            line-height: 1;\n            min-width: 16px;\n            text-align: center;\n            transition: all 0.2s ease;\n            font-family: monospace;\n            box-shadow: 0 1px 2px rgba(0,0,0,0.1);\n            white-space: nowrap;\n        `;\n\n        // 将链接标签添加到容器中\n        linkContainer.appendChild(linkTag);\n\n        // 确保文本容器使用正确的布局\n        textContainer.style.display = 'inline-flex';\n        textContainer.style.alignItems = 'center';\n        textContainer.style.flexWrap = 'nowrap';\n        textContainer.style.gap = '4px';\n        textContainer.style.width = 'auto';\n        textContainer.style.position = 'relative';\n\n        // 添加链接标签到文本容器\n        textContainer.appendChild(linkContainer);\n\n        // 设置拖拽事件处理\n        this.setupDragEvents(linkTag);\n\n        // 确保父节点计算正确的宽度\n        const parentNode = domNode.closest('.map-node');\n        if (parentNode) {\n            parentNode.style.width = 'auto';\n            parentNode.style.minWidth = 'fit-content';\n        }\n\n        // console.log('LinkHandlerFeature: Link tag added successfully for node:', nodeId);\n    }\n\n    /**\n     * 设置拖拽事件处理\n     * @param {HTMLElement} linkTag - 链接标签元素\n     */\n    setupDragEvents(linkTag) {\n        // 拖拽状态变量\n        let isDragging = false;\n        let startX = 0;\n        let startY = 0;\n        let dragThreshold = 15; // 拖拽阈值（像素）\n\n        // 添加hover效果\n        linkTag.addEventListener('mouseenter', () => {\n            if (!isDragging) {\n                linkTag.style.transform = 'scale(1.05)';\n                linkTag.style.boxShadow = '0 3px 6px rgba(0,0,0,0.2)';\n            }\n        });\n        \n        linkTag.addEventListener('mouseleave', () => {\n            if (!isDragging) {\n                linkTag.style.transform = 'scale(1)';\n                linkTag.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';\n            }\n        });\n\n        // 鼠标按下事件 - 开始拖拽检测\n        linkTag.addEventListener('mousedown', (event) => {\n            event.preventDefault();\n            event.stopPropagation();\n            \n            isDragging = false;\n            startX = event.clientX;\n            startY = event.clientY;\n            \n            // 添加拖拽样式\n            linkTag.style.cursor = 'grabbing';\n            linkTag.style.transform = 'scale(1.1)';\n            linkTag.style.boxShadow = '0 4px 12px rgba(0,0,0,0.3)';\n            linkTag.style.transition = 'none';\n            \n            // 显示拖拽指示器（初始状态）\n            this.showDragIndicator(startX, startY, 0, 0, 'Right');\n\n            // 添加文档级别的事件监听器\n            document.addEventListener('mousemove', handleMouseMove);\n            document.addEventListener('mouseup', handleMouseUp);\n        });\n\n        // 鼠标移动事件 - 检测拖拽方向\n        const handleMouseMove = (event) => {\n            if (event.buttons !== 1) return; // 确保鼠标左键按下\n            \n            const deltaX = event.clientX - startX;\n            const deltaY = event.clientY - startY;\n            const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n            \n            if (distance > dragThreshold) {\n                isDragging = true;\n            }\n            \n            // 如果开始拖拽，更新指示器和方向线\n            if (distance > 5) { // 更低的阈值，更敏感的响应\n                this.updateDragIndicator(startX, startY, deltaX, deltaY);\n            }\n        };\n\n        // 鼠标释放事件 - 处理点击或拖拽\n        const handleMouseUp = (event) => {\n            event.preventDefault();\n            event.stopPropagation();\n            \n            // 移除事件监听器\n            document.removeEventListener('mousemove', handleMouseMove);\n            document.removeEventListener('mouseup', handleMouseUp);\n            \n            // 恢复样式\n            linkTag.style.cursor = 'pointer';\n            linkTag.style.transform = 'scale(1)';\n            linkTag.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';\n            linkTag.style.transition = 'all 0.2s ease';\n            \n            // 移除拖拽指示器\n            this.hideDragIndicator();\n            \n            if (isDragging) {\n                // 计算拖拽方向\n                const deltaX = event.clientX - startX;\n                const deltaY = event.clientY - startY;\n                const direction = this.calculateDragDirection(deltaX, deltaY);\n                \n                // 发送带方向的URL点击事件\n                this.handleUrlClickWithDirection(linkTag.dataset.url, direction);\n            } else {\n                // 普通点击 - 默认右边\n                this.handleUrlClickWithDirection(linkTag.dataset.url, 'Right');\n            }\n            \n            isDragging = false;\n        };\n    }\n\n    // 提取节点文本\n    extractNodeText(domNode) {\n        let text = '';\n        \n        // 尝试多种方式获取文本\n        const textElement = domNode.querySelector('tpc') || \n                           domNode.querySelector('.topic') ||\n                           domNode;\n        \n        if (textElement) {\n            // 排除已有的链接标签\n            const cloned = textElement.cloneNode(true);\n            const linkContainers = cloned.querySelectorAll('.vx-link-container');\n            linkContainers.forEach(container => container.remove());\n            text = cloned.textContent || cloned.innerText || '';\n        }\n        \n        return text.trim();\n    }\n\n    /**\n     * 查找节点的文本容器\n     * 步骤：\n     * 1. 查找内容元素\n     * 2. 查找或使用文本容器\n     * \n     * @param {HTMLElement} nodeElement - 节点元素\n     * @returns {HTMLElement} 文本容器元素\n     */\n    findTextContainer(nodeElement) {\n        const selectors = ['tpc', '.topic', '.node-topic', '.mind-elixir-topic'];\n        \n        for (const selector of selectors) {\n            const container = nodeElement.querySelector(selector);\n            if (container) {\n                return container;\n            }\n        }\n        \n        // 如果找不到特定容器，返回节点本身\n        return nodeElement;\n    }\n\n    /**\n     * 提取文件扩展名或URL类型\n     * @param {string} hyperLink - 超链接URL\n     * @returns {string} 文件扩展名或URL类型\n     */\n    extractFileExtension(hyperLink) {\n        if (!hyperLink) {\n            return 'link';\n        }\n\n        // HTTP/HTTPS URLs\n        if (hyperLink.startsWith('https://')) {\n            return 'https';\n        }\n        if (hyperLink.startsWith('http://')) {\n            return 'http';\n        }\n\n        // 文件路径 - 提取扩展名\n        const match = hyperLink.match(/\\.([a-zA-Z0-9]+)$/);\n        if (match) {\n            return match[1].toLowerCase();\n        }\n\n        // 如果无法识别，返回通用的'link'\n        return 'link';\n    }\n\n    /**\n     * 根据链接类型获取样式配置\n     * @param {string} extension - 文件扩展名\n     * @returns {object} 样式配置对象\n     */\n    getLinkTagStyle(extension) {\n        let backgroundColor, borderColor, textColor;\n        \n        switch (extension) {\n            case 'md':\n                backgroundColor = '#276f86';\n                borderColor = '#276f86';\n                textColor = '#f7f7f7';\n                break;\n            case 'pdf':\n                backgroundColor = '#f6f6f6';\n                borderColor = '#ff6b35';\n                textColor = '#ff6b35';\n                break;\n            case 'http':\n            case 'https':\n                backgroundColor = '#f7f7f7';\n                borderColor = '#00aaff';\n                textColor = '#26b4f9';\n                break;\n            default:\n                backgroundColor = '#f7f7f7';\n                borderColor = '#444444';\n                textColor = '#444444';\n                break;\n        }\n        \n        return { backgroundColor, borderColor, textColor };\n    }\n\n    /**\n     * 创建链接标签\n     * 步骤：\n     * 1. 创建标签容器和标签\n     * 2. 设置样式和内容\n     * 3. 添加拖拽事件\n     * 4. 添加到容器\n     * \n     * @param {HTMLElement} textContainer - 文本容器元素\n     * @param {string} nodeId - 节点ID\n     * @param {string} hyperLink - 超链接URL\n     * @param {string} extension - 文件扩展名\n     */\n    createLinkTag(textContainer, nodeId, hyperLink, extension) {\n        // 获取样式配置\n        const style = this.getLinkTagStyle(extension);\n\n        // 创建链接标签容器\n        const linkContainer = document.createElement('span');\n        linkContainer.className = 'vx-link-container';\n        linkContainer.style.cssText = `\n            display: inline-flex;\n            align-items: center;\n            margin-left: 4px;\n            vertical-align: baseline;\n            flex-shrink: 0;\n        `;\n\n        // 创建链接标签\n        const linkTag = document.createElement('span');\n        linkTag.className = 'vx-link-tag';\n        linkTag.textContent = `[${extension}]`;\n        linkTag.dataset.url = hyperLink;\n        linkTag.dataset.nodeid = nodeId;\n        linkTag.title = `点击打开: ${hyperLink}\\n拖拽到不同方向可以控制打开位置\\n↑上方 ↓下方 ←左侧 →右侧（默认）`;\n        linkTag.style.cssText = `\n            background: ${style.backgroundColor};\n            color: ${style.textColor};\n            padding: 2px 4px;\n            border-radius: 3px;\n            font-size: 10px;\n            font-weight: bold;\n            cursor: pointer;\n            user-select: none;\n            border: 1px solid ${style.borderColor};\n            display: inline-flex;\n            align-items: center;\n            line-height: 1;\n            min-width: 16px;\n            text-align: center;\n            transition: all 0.2s ease;\n            font-family: monospace;\n            box-shadow: 0 1px 2px rgba(0,0,0,0.1);\n            white-space: nowrap;\n            position: relative;\n            z-index: 1;\n        `;\n\n        // 拖拽状态变量\n        let isDragging = false;\n        let startX = 0;\n        let startY = 0;\n        let dragThreshold = 15; // 拖拽阈值（像素）\n\n        // 添加hover效果\n        linkTag.addEventListener('mouseenter', () => {\n            if (!isDragging) {\n                linkTag.style.transform = 'scale(1.05)';\n                linkTag.style.boxShadow = '0 3px 6px rgba(0,0,0,0.2)';\n            }\n        });\n        \n        linkTag.addEventListener('mouseleave', () => {\n            if (!isDragging) {\n                linkTag.style.transform = 'scale(1)';\n                linkTag.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';\n            }\n        });\n\n        // 鼠标按下事件 - 开始拖拽检测\n        linkTag.addEventListener('mousedown', (event) => {\n            event.preventDefault();\n            event.stopPropagation();\n            \n            isDragging = false;\n            startX = event.clientX;\n            startY = event.clientY;\n            \n            // 添加拖拽样式\n            linkTag.style.cursor = 'grabbing';\n            linkTag.style.transform = 'scale(1.1)';\n            linkTag.style.boxShadow = '0 4px 12px rgba(0,0,0,0.3)';\n            linkTag.style.transition = 'none';\n            \n            // 显示拖拽指示器（初始状态）\n            this.showDragIndicator(startX, startY, 0, 0, 'Right');\n        });\n\n        // 鼠标移动事件 - 检测拖拽方向\n        const handleMouseMove = (event) => {\n            if (event.buttons !== 1) return; // 确保鼠标左键按下\n            \n            const deltaX = event.clientX - startX;\n            const deltaY = event.clientY - startY;\n            const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n            \n            if (distance > dragThreshold) {\n                isDragging = true;\n            }\n            \n            // 如果开始拖拽，更新指示器和方向线\n            if (distance > 5) { // 更低的阈值，更敏感的响应\n                this.updateDragIndicator(startX, startY, deltaX, deltaY);\n            }\n        };\n\n        // 鼠标释放事件 - 处理点击或拖拽\n        const handleMouseUp = (event) => {\n            event.preventDefault();\n            event.stopPropagation();\n            \n            // 移除事件监听器\n            document.removeEventListener('mousemove', handleMouseMove);\n            document.removeEventListener('mouseup', handleMouseUp);\n            \n            // 恢复样式\n            linkTag.style.cursor = 'pointer';\n            linkTag.style.transform = 'scale(1)';\n            linkTag.style.boxShadow = '0 2px 4px rgba(0,0,0,0.1)';\n            linkTag.style.transition = 'all 0.2s ease';\n            \n            // 移除拖拽指示器\n            this.hideDragIndicator();\n            \n            if (isDragging) {\n                // 计算拖拽方向\n                const deltaX = event.clientX - startX;\n                const deltaY = event.clientY - startY;\n                const direction = this.calculateDragDirection(deltaX, deltaY);\n                \n                console.log(`LinkHandlerFeature: Drag detected, direction: ${direction}`);\n                \n                // 发送带方向的URL点击事件\n                this.handleUrlClickWithDirection(hyperLink, direction);\n            } else {\n                // 普通点击 - 默认右边\n                console.log('LinkHandlerFeature: Normal click, using default right direction');\n                this.handleUrlClickWithDirection(hyperLink, 'Right');\n            }\n            \n            isDragging = false;\n        };\n\n        // 添加文档级别的事件监听器\n        linkTag.addEventListener('mousedown', () => {\n            document.addEventListener('mousemove', handleMouseMove);\n            document.addEventListener('mouseup', handleMouseUp);\n        });\n\n        linkContainer.appendChild(linkTag);\n        textContainer.appendChild(linkContainer);\n\n        console.log(`LinkHandlerFeature: Link tag [${extension}] created successfully with style:`, style);\n    }\n\n    /**\n     * 显示拖拽方向指示器\n     */\n    showDragIndicator(startX, startY, deltaX, deltaY, initialDirection) {\n        // 移除现有指示器\n        this.hideDragIndicator();\n        \n        const direction = deltaX === 0 && deltaY === 0 ? initialDirection : this.calculateDragDirection(deltaX, deltaY);\n        \n        // 创建指示器容器\n        const container = document.createElement('div');\n        container.id = 'vx-drag-indicator-container';\n        container.style.cssText = `\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100vw;\n            height: 100vh;\n            pointer-events: none;\n            z-index: 10000;\n        `;\n\n        // 创建方向线条（如果有移动）\n        if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {\n            const line = document.createElement('div');\n            line.className = 'vx-drag-line';\n            \n            const endX = startX + deltaX;\n            const endY = startY + deltaY;\n            const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n            const angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;\n            \n            line.style.cssText = `\n                position: absolute;\n                left: ${startX}px;\n                top: ${startY}px;\n                width: ${length}px;\n                height: 2px;\n                background: linear-gradient(to right, \n                    rgba(74, 144, 226, 0.8) 0%, \n                    rgba(74, 144, 226, 0.6) 50%,\n                    rgba(74, 144, 226, 1) 100%);\n                transform-origin: 0 50%;\n                transform: rotate(${angle}deg);\n                border-radius: 1px;\n                box-shadow: 0 0 6px rgba(74, 144, 226, 0.4);\n                transition: none;\n            `;\n            container.appendChild(line);\n\n            // 在线条末端添加箭头\n            const arrowHead = document.createElement('div');\n            arrowHead.className = 'vx-drag-arrow';\n            arrowHead.style.cssText = `\n                position: absolute;\n                left: ${endX - 6}px;\n                top: ${endY - 6}px;\n                width: 12px;\n                height: 12px;\n                background: #4a90e2;\n                border-radius: 50%;\n                box-shadow: 0 2px 8px rgba(74, 144, 226, 0.6);\n            `;\n            container.appendChild(arrowHead);\n        }\n        \n        // 创建文字指示器\n        const indicator = document.createElement('div');\n        indicator.id = 'vx-drag-indicator';\n        indicator.style.cssText = `\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            background: rgba(0, 0, 0, 0.85);\n            color: white;\n            padding: 12px 24px;\n            border-radius: 8px;\n            font-size: 18px;\n            font-weight: bold;\n            white-space: nowrap;\n            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n            border: 2px solid #4a90e2;\n        `;\n        \n        let directionText = '';\n        let arrow = '';\n        switch (direction) {\n            case 'Up':\n                directionText = '上方打开';\n                arrow = '↑';\n                break;\n            case 'Down':\n                directionText = '下方打开';\n                arrow = '↓';\n                break;\n            case 'Left':\n                directionText = '左侧打开';\n                arrow = '←';\n                break;\n            case 'Right':\n            default:\n                directionText = '右侧打开';\n                arrow = '→';\n                break;\n        }\n        \n        indicator.innerHTML = `${arrow} ${directionText}`;\n        container.appendChild(indicator);\n        \n        // 添加CSS动画\n        if (!document.getElementById('vx-drag-styles')) {\n            const style = document.createElement('style');\n            style.id = 'vx-drag-styles';\n            style.textContent = `\n                @keyframes dragFadeIn {\n                    from { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }\n                    to { opacity: 1; transform: translate(-50%, -50%) scale(1); }\n                }\n                #vx-drag-indicator {\n                    animation: dragFadeIn 0.2s ease;\n                }\n            `;\n            document.head.appendChild(style);\n        }\n        \n        document.body.appendChild(container);\n    }\n\n    /**\n     * 更新拖拽指示器\n     */\n    updateDragIndicator(startX, startY, deltaX, deltaY) {\n        const container = document.getElementById('vx-drag-indicator-container');\n        if (!container) {\n            // 如果容器不存在，重新创建\n            this.showDragIndicator(startX, startY, deltaX, deltaY, 'Right');\n            return;\n        }\n\n        const direction = this.calculateDragDirection(deltaX, deltaY);\n        \n        // 更新方向线条\n        let line = container.querySelector('.vx-drag-line');\n        let arrowHead = container.querySelector('.vx-drag-arrow');\n        \n        if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {\n            const endX = startX + deltaX;\n            const endY = startY + deltaY;\n            const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n            const angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;\n            \n            if (!line) {\n                line = document.createElement('div');\n                line.className = 'vx-drag-line';\n                container.appendChild(line);\n            }\n            \n            line.style.cssText = `\n                position: absolute;\n                left: ${startX}px;\n                top: ${startY}px;\n                width: ${length}px;\n                height: 2px;\n                background: linear-gradient(to right, \n                    rgba(74, 144, 226, 0.8) 0%, \n                    rgba(74, 144, 226, 0.6) 50%,\n                    rgba(74, 144, 226, 1) 100%);\n                transform-origin: 0 50%;\n                transform: rotate(${angle}deg);\n                border-radius: 1px;\n                box-shadow: 0 0 6px rgba(74, 144, 226, 0.4);\n                transition: none;\n            `;\n\n            if (!arrowHead) {\n                arrowHead = document.createElement('div');\n                arrowHead.className = 'vx-drag-arrow';\n                container.appendChild(arrowHead);\n            }\n            \n            arrowHead.style.cssText = `\n                position: absolute;\n                left: ${endX - 6}px;\n                top: ${endY - 6}px;\n                width: 12px;\n                height: 12px;\n                background: #4a90e2;\n                border-radius: 50%;\n                box-shadow: 0 2px 8px rgba(74, 144, 226, 0.6);\n            `;\n        }\n        \n        // 更新文字指示器\n        const indicator = container.querySelector('#vx-drag-indicator');\n        if (indicator) {\n            let directionText = '';\n            let arrow = '';\n            switch (direction) {\n                case 'Up':\n                    directionText = '上方打开';\n                    arrow = '↑';\n                    break;\n                case 'Down':\n                    directionText = '下方打开';\n                    arrow = '↓';\n                    break;\n                case 'Left':\n                    directionText = '左侧打开';\n                    arrow = '←';\n                    break;\n                case 'Right':\n                default:\n                    directionText = '右侧打开';\n                    arrow = '→';\n                    break;\n            }\n            indicator.innerHTML = `${arrow} ${directionText}`;\n        }\n    }\n\n    /**\n     * 隐藏拖拽指示器\n     */\n    hideDragIndicator() {\n        const container = document.getElementById('vx-drag-indicator-container');\n        if (container) {\n            container.remove();\n        }\n        \n        // 清理旧的指示器（向后兼容）\n        const oldIndicator = document.getElementById('vx-drag-indicator');\n        if (oldIndicator) {\n            oldIndicator.remove();\n        }\n    }\n\n    /**\n     * 计算拖拽方向\n     */\n    calculateDragDirection(deltaX, deltaY) {\n        const absDeltaX = Math.abs(deltaX);\n        const absDeltaY = Math.abs(deltaY);\n        \n        // 判断主要拖拽方向\n        if (absDeltaX > absDeltaY) {\n            // 水平方向\n            return deltaX > 0 ? 'Right' : 'Left';\n        } else {\n            // 垂直方向\n            return deltaY > 0 ? 'Down' : 'Up';\n        }\n    }\n\n    /**\n     * 根据方向处理URL点击\n     * 步骤：\n     * 1. 验证URL\n     * 2. 根据方向选择打开方式\n     * \n     * @param {string} url - 链接URL\n     * @param {string} direction - 拖拽方向\n     */\n    handleUrlClickWithDirection(url, direction) {\n        if (!url) return;\n\n        // 根据方向处理点击\n        if (window.vxAdapter && window.vxAdapter.handleUrlClickWithDirection) {\n            window.vxAdapter.handleUrlClickWithDirection(url, direction);\n        } else {\n            console.warn('vxAdapter.handleUrlClickWithDirection not available, falling back to normal click');\n            this.handleUrlClick(url);\n        }\n    }\n\n    /**\n     * 设置链接标签点击监听器\n     */\n    setupLinkTagClickListener() {\n        document.addEventListener('click', (e) => {\n            const linkTag = e.target.closest('.link-tag');\n            if (linkTag) {\n                const url = linkTag.dataset.url;\n                if (url) {\n                    this.handleUrlClick(url);\n                }\n            }\n        });\n    }\n\n    /**\n     * 处理URL点击\n     * @param {string} url - 链接URL\n     */\n    handleUrlClick(url) {\n        if (!url) return;\n        \n        if (window.vxAdapter && window.vxAdapter.handleUrlClick) {\n            window.vxAdapter.handleUrlClick(url);\n        } else {\n            console.warn('vxAdapter.handleUrlClick not available');\n        }\n    }\n\n    /**\n     * 移除所有链接标签\n     */\n    removeAllLinkTags() {\n        try {\n            const linkContainers = document.querySelectorAll('.vx-link-container');\n            console.log('LinkHandlerFeature: Removing', linkContainers.length, 'existing link tags');\n            linkContainers.forEach(container => container.remove());\n        } catch (error) {\n            console.error('LinkHandlerFeature: Error removing link tags:', error);\n        }\n    }\n\n    /**\n     * 数据变更处理\n     * 步骤：\n     * 1. 清空节点数据映射\n     * 2. 重建节点数据映射\n     * 3. 处理所有节点\n     * \n     * @param {object} data - 新的数据\n     */\n    onDataChange(data) {\n        console.log('LinkHandlerFeature: onDataChange called with data:', data);\n        \n        // 清空现有映射\n        this.nodeDataMap.clear();\n        \n        if (!data || !data.nodeData) {\n            console.warn('LinkHandlerFeature: Invalid data structure');\n            return;\n        }\n\n        // 重建节点数据映射\n        this.buildNodeDataMapRecursive(data, this.nodeDataMap);\n        \n        // 验证映射结果\n        this.validateNodeDataMap();\n        \n        console.log('LinkHandlerFeature: Built nodeDataMap with', this.nodeDataMap.size, 'entries');\n        \n        // 处理所有节点\n        this.processAllNodes();\n    }\n\n    /**\n     * 验证节点数据映射\n     */\n    validateNodeDataMap() {\n        console.log('LinkHandlerFeature: Validating nodeDataMap');\n        let hyperLinkCount = 0;\n        \n        this.nodeDataMap.forEach((nodeData, nodeId) => {\n            if (nodeData.hyperLink) {\n                hyperLinkCount++;\n                console.log('LinkHandlerFeature: Found node with hyperlink:', {\n                    nodeId: nodeId,\n                    topic: nodeData.topic,\n                    hyperLink: nodeData.hyperLink\n                });\n            }\n        });\n        \n        console.log(`LinkHandlerFeature: Found ${hyperLinkCount} nodes with hyperlinks out of ${this.nodeDataMap.size} total nodes`);\n    }\n\n    /**\n     * 递归构建节点数据映射\n     * @param {object} data - 节点数据\n     * @param {Map} map - 映射表\n     */\n    buildNodeDataMapRecursive(data, map) {\n        if (!data) return;\n\n        // 如果是根节点，从nodeData开始\n        const nodeData = data.nodeData || data;\n        if (!nodeData) return;\n\n        // debug use\n        // 添加当前节点到映射\n        // console.log('LinkHandlerFeature: Adding node to map:', {\n        //     id: nodeData.id,\n        //     topic: nodeData.topic,\n        //     hyperLink: nodeData.hyperLink\n        // });\n        map.set(nodeData.id, nodeData);\n\n        // 如果有子节点，递归处理\n        if (nodeData.children && Array.isArray(nodeData.children)) {\n            nodeData.children.forEach(child => {\n                this.buildNodeDataMapRecursive(child, map);\n            });\n        }\n    }\n\n    // 检查是否是脑图节点\n    isMindmapNode(element) {\n        // 检查多种可能的脑图节点特征\n        return element.hasAttribute && (\n            element.hasAttribute('data-nodeid') ||\n            element.classList.contains('topic') ||\n            element.classList.contains('node') ||\n            element.tagName.toLowerCase() === 'tpc'\n        );\n    }\n\n    /**\n     * 处理所有节点\n     * 步骤：\n     * 1. 移除现有链接标签\n     * 2. 获取所有思维导图节点\n     * 3. 为每个节点处理链接\n     */\n    processAllNodes() {\n        if (!this.core) {\n            console.warn('LinkHandlerFeature: Core not available, cannot process nodes.');\n            return;\n        }\n\n        try {\n            // 在处理DOM前禁用观察者，防止无限循环\n            this.core.disableObserver();\n\n            console.log('LinkHandlerFeature: processAllNodes called');\n            \n            // 关键修复：每次处理时，都从core主动获取最新的数据，确保数据同步\n            if (this.core && this.core.mindElixir) {\n                const mindmapData = this.core.mindElixir.getAllData();\n                if (mindmapData && mindmapData.nodeData) {\n                    this.nodeDataMap.clear();\n                    this.buildNodeDataMapRecursive(mindmapData.nodeData, this.nodeDataMap);\n                    console.log('LinkHandlerFeature: Node data map rebuilt with latest data. Size:', this.nodeDataMap.size);\n                } else {\n                    console.warn('LinkHandlerFeature: Could not get latest data from core.');\n                }\n            } else {\n                console.warn('LinkHandlerFeature: Core or MindElixir instance not available to fetch latest data.');\n                return; // 如果没有核心实例，无法继续\n            }\n            \n            this.removeAllLinkTags();\n            \n            try {\n                // 查找所有可能的脑图节点\n                const mindmapElement = document.getElementById('vx-mindmap');\n                if (!mindmapElement) {\n                    console.warn('LinkHandlerFeature: Could not find #vx-mindmap element');\n                    return;\n                }\n\n                // 查找所有节点\n                const mindmapNodes = mindmapElement.querySelectorAll('tpc[data-nodeid]');\n                \n                console.log('LinkHandlerFeature: Found', mindmapNodes.length, 'potential mindmap nodes');\n                console.log('LinkHandlerFeature: nodeDataMap size:', this.nodeDataMap.size);\n                \n                // 处理每个节点\n                mindmapNodes.forEach((domNode, index) => {\n                    const nodeId = domNode.dataset.nodeid;\n                    if (nodeId) {\n                        const cleanNodeId = nodeId.startsWith('me') ? nodeId.substring(2) : nodeId;\n                        const nodeData = this.nodeDataMap.get(cleanNodeId);\n                        if (nodeData && nodeData.hyperLink) {\n                            // console.log(`LinkHandlerFeature: Processing node ${index + 1}/${mindmapNodes.length}:`, {\n                            //     nodeId: cleanNodeId,\n                            //     hyperLink: nodeData.hyperLink\n                            // });\n                            this.processNodeWithData(domNode, this.nodeDataMap);\n                        }\n                    }\n                });\n\n                // 验证处理结果\n                const addedTags = document.querySelectorAll('.vx-link-container');\n                console.log('LinkHandlerFeature: Added', addedTags.length, 'link tags');\n\n            } catch (error) {\n                console.error('LinkHandlerFeature: Error processing nodes:', error);\n            }\n        } finally {\n            // 在finally块中重新启用观察者，确保即使发生错误也能恢复\n            // 使用setTimeout确保在当前事件循环结束后再启用，避免立即重新触发\n            setTimeout(() => {\n                if (this.core) {\n                    this.core.enableObserver();\n                }\n            }, 50);\n        }\n    }\n} "
  },
  {
    "path": "src/data/extra/web/js/mindmap/features/outline/outline.js",
    "content": "/**\n * 思维导图大纲功能模块\n * 提供思维导图节点的大纲视图和导航功能\n */\nclass OutlineFeature {\n    constructor() {\n        this.core = null;\n        this.outlineWindow = null;\n        this.nodeDataMap = new Map();\n        this.isCollapsed = false;\n        this.isResizing = false;\n        this.originalSize = { width: 280, height: 500 };\n        this.minimumSize = { width: 200, height: 300 };\n        this.defaultPosition = { top: 580, right: 20 };\n        this.lastPosition = null; // 记录最后的位置\n        this.lastSize = null; // 记录最后的大小\n        this.COLLAPSE_THRESHOLD = 750; // 思维导图尺寸小于这个值时自动折叠\n        this.titleBarHeight = 45; // 标题栏高度\n        \n        // 添加防抖和监听器管理\n        this.updateTimer = null;\n        this.mutationObserver = null;\n        this.isUpdating = false;\n        this.lastUpdateTime = 0;\n        this.UPDATE_DEBOUNCE_DELAY = 300; // 防抖延迟300ms\n    }\n\n    /**\n     * 设置核心实例引用\n     * @param {MindMapCore} core - 核心实例\n     */\n    setCore(core) {\n        this.core = core;\n    }\n\n    /**\n     * 初始化大纲功能\n     * 步骤：\n     * 1. 创建大纲窗口\n     * 2. 设置DOM观察器\n     */\n    init() {\n        console.log('OutlineFeature: init called');\n        // 先清理之前的实例（如果有的话）\n        this.cleanupObservers();\n        \n        // 先检查并删除已存在的大纲窗口\n        const existingWindow = document.getElementById('vx-outline-window');\n        if (existingWindow) {\n            existingWindow.remove();\n        }\n        this.createOutlineWindow();\n        this.setupDOMObserver();\n        this.setupResizeObserver();\n        console.log('OutlineFeature: initialization complete');\n    }\n\n    /**\n     * 创建大纲窗口\n     * 步骤：\n     * 1. 创建窗口容器\n     * 2. 添加标题栏、搜索框和内容区\n     * 3. 设置拖拽功能\n     * 4. 添加事件监听\n     */\n    createOutlineWindow() {\n        // 创建大纲窗口容器\n        this.outlineWindow = document.createElement('div');\n        this.outlineWindow.id = 'vx-outline-window';\n        this.outlineWindow.className = 'vx-outline-window';\n        \n        // 设置窗口样式\n        this.outlineWindow.style.cssText = `\n            position: fixed;\n            top: ${this.defaultPosition.top}px;\n            right: ${this.defaultPosition.right}px;\n            width: ${this.originalSize.width}px;\n            height: ${this.originalSize.height}px;\n            background: #ffffff;\n            border: 1px solid #e0e0e0;\n            border-radius: 8px;\n            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n            z-index: 1000;\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n            overflow: hidden;\n            user-select: none;\n            display: flex;\n            flex-direction: column;\n            transition: width 0.3s ease, height 0.3s ease;\n        `;\n\n        // 创建标题栏\n        const titleBar = document.createElement('div');\n        titleBar.className = 'vx-outline-title';\n        titleBar.style.cssText = `\n            background: #f8f9fa;\n            padding: 12px 16px;\n            border-bottom: 1px solid #e0e0e0;\n            cursor: move;\n            user-select: none;\n            font-weight: 600;\n            font-size: 14px;\n            color: #333;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            flex-shrink: 0;\n            height: ${this.titleBarHeight}px;\n            box-sizing: border-box;\n            position: relative;\n            z-index: 2;\n        `;\n\n        // 创建标题文本\n        const titleText = document.createElement('span');\n        titleText.textContent = '脑图大纲';\n        titleText.style.cssText = `\n            flex: 1;\n            text-align: center;\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        `;\n\n        // 创建折叠按钮\n        const collapseButton = document.createElement('button');\n        collapseButton.className = 'vx-outline-collapse-btn';\n        collapseButton.innerHTML = '◀';\n        collapseButton.title = '折叠/展开';\n        collapseButton.style.cssText = `\n            width: 24px;\n            height: 24px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            background: #fff;\n            color: #666;\n            cursor: pointer;\n            font-size: 12px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: all 0.2s ease;\n            margin-left: 8px;\n            outline: none;\n            position: relative;\n            z-index: 3;\n        `;\n\n        collapseButton.addEventListener('click', () => this.toggleCollapse());\n        collapseButton.addEventListener('mouseenter', () => {\n            collapseButton.style.backgroundColor = '#f0f0f0';\n            collapseButton.style.borderColor = '#999';\n        });\n        collapseButton.addEventListener('mouseleave', () => {\n            collapseButton.style.backgroundColor = '#fff';\n            collapseButton.style.borderColor = '#ddd';\n        });\n\n        titleBar.appendChild(titleText);\n        titleBar.appendChild(collapseButton);\n\n        // 创建搜索框容器\n        const searchContainer = document.createElement('div');\n        searchContainer.className = 'vx-outline-search';\n        searchContainer.style.cssText = `\n            padding: 8px 12px;\n            border-bottom: 1px solid #e0e0e0;\n            background: #fafafa;\n            flex-shrink: 0;\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            position: relative;\n            z-index: 1;\n        `;\n\n        // 创建搜索框\n        const searchInput = document.createElement('input');\n        searchInput.type = 'text';\n        searchInput.placeholder = '搜索节点...';\n        searchInput.className = 'vx-outline-search-input';\n        searchInput.style.cssText = `\n            flex: 1;\n            padding: 6px 10px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            font-size: 12px;\n            outline: none;\n            background: #fff;\n            transition: border-color 0.2s ease;\n            min-width: 0;\n        `;\n\n        // 创建清空按钮\n        const clearButton = document.createElement('button');\n        clearButton.className = 'vx-outline-clear-btn';\n        clearButton.innerHTML = '✕';\n        clearButton.title = '清空搜索';\n        clearButton.style.cssText = `\n            width: 24px;\n            height: 24px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            background: #fff;\n            color: #666;\n            cursor: pointer;\n            font-size: 14px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: all 0.2s ease;\n            flex-shrink: 0;\n            opacity: 0.5;\n        `;\n\n        // 搜索框事件\n        searchInput.addEventListener('input', (e) => {\n            this.searchTerm = e.target.value.toLowerCase().trim();\n            this.updateOutlineWindow();\n            clearButton.style.opacity = this.searchTerm ? '1' : '0.5';\n        });\n\n        searchInput.addEventListener('focus', () => {\n            searchInput.style.borderColor = '#4a90e2';\n        });\n\n        searchInput.addEventListener('blur', () => {\n            searchInput.style.borderColor = '#ddd';\n        });\n\n        // 清空按钮事件\n        clearButton.addEventListener('click', () => {\n            searchInput.value = '';\n            this.searchTerm = '';\n            this.updateOutlineWindow();\n            clearButton.style.opacity = '0.5';\n            searchInput.focus();\n        });\n\n        clearButton.addEventListener('mouseenter', () => {\n            clearButton.style.backgroundColor = '#f0f0f0';\n            clearButton.style.borderColor = '#999';\n        });\n\n        clearButton.addEventListener('mouseleave', () => {\n            clearButton.style.backgroundColor = '#fff';\n            clearButton.style.borderColor = '#ddd';\n        });\n\n        searchContainer.appendChild(searchInput);\n        searchContainer.appendChild(clearButton);\n\n        // 创建内容容器（用于折叠动画）\n        const contentWrapper = document.createElement('div');\n        contentWrapper.className = 'vx-outline-content-wrapper';\n        contentWrapper.style.cssText = `\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            transition: all 0.1s;\n            overflow: hidden;\n            position: relative;\n            z-index: 1;\n            height: ${this.originalSize.height - this.titleBarHeight}px;\n        `;\n\n        // 创建内容区域\n        const content = document.createElement('div');\n        content.className = 'vx-outline-content';\n        content.style.cssText = `\n            padding: 8px;\n            overflow-y: auto;\n            flex: 1;\n            font-size: 13px;\n            line-height: 1.4;\n            position: relative;\n            z-index: 1;\n        `;\n\n        // 创建调整大小的手柄\n        const resizeHandle = document.createElement('div');\n        resizeHandle.className = 'vx-outline-resize-handle';\n        resizeHandle.style.cssText = `\n            position: absolute;\n            bottom: 0;\n            right: 0;\n            width: 15px;\n            height: 15px;\n            cursor: nwse-resize;\n            background: linear-gradient(135deg, transparent 50%, #ccc 50%);\n            border-radius: 0 0 8px 0;\n            z-index: 2;\n            transition: opacity 0.3s ease;\n        `;\n\n        contentWrapper.appendChild(searchContainer);\n        contentWrapper.appendChild(content);\n\n        this.outlineWindow.appendChild(titleBar);\n        this.outlineWindow.appendChild(contentWrapper);\n        this.outlineWindow.appendChild(resizeHandle);\n\n        // 添加到页面\n        document.body.appendChild(this.outlineWindow);\n\n        // 设置拖动功能\n        this.setupWindowDrag(titleBar);\n        // 设置调整大小功能\n        this.setupWindowResize(resizeHandle);\n\n        // 初始化变量\n        this.outlineVisible = true;\n        this.collapsedNodes = new Set();\n        this.searchTerm = '';\n\n        console.log('OutlineFeature: Outline window created with search functionality');\n    }\n\n    /**\n     * 设置窗口拖拽功能\n     * @param {HTMLElement} titleBar - 标题栏元素\n     */\n    setupWindowDrag(titleBar) {\n        let isDragging = false;\n        let startX, startY;\n        let initialX, initialY;\n        let lastValidX, lastValidY;\n        let animationFrameId = null;\n\n        const updatePosition = (e) => {\n            if (!isDragging) return;\n\n            const deltaX = e.clientX - startX;\n            const deltaY = e.clientY - startY;\n\n            // 计算新位置\n            let newX = initialX + deltaX;\n            let newY = initialY + deltaY;\n\n            // 获取窗口尺寸\n            const windowWidth = window.innerWidth;\n            const windowHeight = window.innerHeight;\n            const outlineWidth = this.outlineWindow.offsetWidth;\n            const outlineHeight = this.outlineWindow.offsetHeight;\n\n            // 限制在窗口内\n            newX = Math.max(0, Math.min(newX, windowWidth - outlineWidth));\n            newY = Math.max(0, Math.min(newY, windowHeight - outlineHeight));\n\n            // 使用 transform 进行平滑移动\n            this.outlineWindow.style.transform = `translate3d(${newX - initialX}px, ${newY - initialY}px, 0)`;\n\n            // 记录有效位置\n            lastValidX = newX;\n            lastValidY = newY;\n        };\n\n        const handleMouseMove = (e) => {\n            if (animationFrameId) {\n                cancelAnimationFrame(animationFrameId);\n            }\n            animationFrameId = requestAnimationFrame(() => updatePosition(e));\n        };\n\n        const handleMouseUp = () => {\n            if (!isDragging) return;\n            isDragging = false;\n\n            // 移除临时事件监听\n            document.removeEventListener('mousemove', handleMouseMove);\n            document.removeEventListener('mouseup', handleMouseUp);\n\n            // 重置 transform 并设置实际位置\n            this.outlineWindow.style.transform = 'none';\n            if (lastValidX !== undefined && lastValidY !== undefined) {\n                this.outlineWindow.style.left = lastValidX + 'px';\n                this.outlineWindow.style.top = lastValidY + 'px';\n                this.lastPosition = { left: lastValidX, top: lastValidY };\n            }\n\n            if (animationFrameId) {\n                cancelAnimationFrame(animationFrameId);\n            }\n        };\n\n        titleBar.addEventListener('mousedown', (e) => {\n            if (e.target.classList.contains('vx-outline-collapse-btn')) return;\n            isDragging = true;\n            startX = e.clientX;\n            startY = e.clientY;\n            initialX = this.outlineWindow.offsetLeft;\n            initialY = this.outlineWindow.offsetTop;\n            lastValidX = initialX;\n            lastValidY = initialY;\n\n            // 添加临时事件监听\n            document.addEventListener('mousemove', handleMouseMove);\n            document.addEventListener('mouseup', handleMouseUp);\n        });\n    }\n\n    /**\n     * 设置窗口大小调整功能\n     * @param {HTMLElement} handle - 调整大小的手柄元素\n     */\n    setupWindowResize(handle) {\n        let startX, startY, startWidth, startHeight, startLeft, startTop;\n\n        const handleMouseDown = (e) => {\n            // 如果处于折叠状态，不允许调整大小\n            if (this.isCollapsed) return;\n\n            this.isResizing = true;\n            startX = e.clientX;\n            startY = e.clientY;\n            startWidth = this.outlineWindow.offsetWidth;\n            startHeight = this.outlineWindow.offsetHeight;\n            startLeft = this.outlineWindow.offsetLeft;\n            startTop = this.outlineWindow.offsetTop;\n\n            document.addEventListener('mousemove', handleMouseMove);\n            document.addEventListener('mouseup', handleMouseUp);\n            e.preventDefault(); // 防止文本选择\n        };\n\n        const handleMouseMove = (e) => {\n            if (!this.isResizing) return;\n\n            // 计算新的尺寸\n            let newWidth = Math.max(this.minimumSize.width, startWidth + (e.clientX - startX));\n            let newHeight = Math.max(this.minimumSize.height, startHeight + (e.clientY - startY));\n\n            // 限制最大尺寸\n            const maxWidth = window.innerWidth - startLeft;\n            const maxHeight = window.innerHeight - startTop;\n            newWidth = Math.min(newWidth, maxWidth);\n            newHeight = Math.min(newHeight, maxHeight);\n\n            // 更新窗口大小\n            this.outlineWindow.style.width = `${newWidth}px`;\n            this.outlineWindow.style.height = `${newHeight}px`;\n\n            // 更新内容区域高度\n            const contentWrapper = this.outlineWindow.querySelector('.vx-outline-content-wrapper');\n            if (contentWrapper) {\n                contentWrapper.style.height = `${newHeight - this.titleBarHeight}px`;\n            }\n\n            // 保存新的尺寸\n            this.lastSize = { width: newWidth, height: newHeight };\n\n            // 请求动画帧以提高性能\n            requestAnimationFrame(() => {\n                // 触发内容更新\n                this.updateOutlineWindow();\n            });\n        };\n\n        const handleMouseUp = () => {\n            this.isResizing = false;\n            document.removeEventListener('mousemove', handleMouseMove);\n            document.removeEventListener('mouseup', handleMouseUp);\n        };\n\n        handle.addEventListener('mousedown', handleMouseDown);\n    }\n\n    /**\n     * 设置窗口大小监视器\n     */\n    setupResizeObserver() {\n        const mindmapContainer = document.querySelector('.map-container');\n        if (!mindmapContainer) return;\n\n        const resizeObserver = new ResizeObserver(entries => {\n            for (const entry of entries) {\n                const { width, height } = entry.contentRect;\n                const isSmall = width < this.COLLAPSE_THRESHOLD || height < this.COLLAPSE_THRESHOLD;\n                \n                if (isSmall) {\n                    // 保存当前位置和大小（如果还没有保存）\n                    if (!this.lastPosition) {\n                        this.lastPosition = {\n                            left: this.outlineWindow.offsetLeft,\n                            top: this.outlineWindow.offsetTop\n                        };\n                        this.lastSize = {\n                            width: this.outlineWindow.offsetWidth,\n                            height: this.outlineWindow.offsetHeight\n                        };\n                    }\n\n                    // 无论当前是否已经折叠，都确保窗口移动到左上角\n                    this.outlineWindow.style.top = '80px';\n                    this.outlineWindow.style.left = '20px';\n\n                    // 如果还没有折叠，则进行折叠\n                    if (!this.isCollapsed) {\n                        this.toggleCollapse(true);\n                    }\n                } else {\n                    // 只有在之前是由于窗口大小变化导致的折叠时，才自动展开和恢复位置\n                    if (this.isCollapsed && this.lastPosition) {\n                        this.toggleCollapse(false);\n                        // 恢复到之前保存的位置\n                        this.outlineWindow.style.left = this.lastPosition.left + 'px';\n                        this.outlineWindow.style.top = this.lastPosition.top + 'px';\n                    }\n                }\n            }\n        });\n\n        resizeObserver.observe(mindmapContainer);\n    }\n\n    /**\n     * 切换大纲窗口的折叠状态\n     * @param {boolean} [forceCollapse] - 是否强制折叠\n     */\n    toggleCollapse(forceCollapse) {\n        const newState = forceCollapse !== undefined ? forceCollapse : !this.isCollapsed;\n        this.isCollapsed = newState;\n\n        const collapseBtn = this.outlineWindow.querySelector('.vx-outline-collapse-btn');\n        const contentWrapper = this.outlineWindow.querySelector('.vx-outline-content-wrapper');\n        const resizeHandle = this.outlineWindow.querySelector('.vx-outline-resize-handle');\n\n        if (this.isCollapsed) {\n            // 折叠状态 - 只保留标题栏\n            contentWrapper.style.height = '0';\n            contentWrapper.style.opacity = '0';\n            resizeHandle.style.opacity = '0';\n            resizeHandle.style.pointerEvents = 'none';\n            collapseBtn.innerHTML = '▶';\n            \n            // 保存当前位置和大小（如果不是强制折叠）\n            if (!forceCollapse) {\n                this.lastPosition = {\n                    left: this.outlineWindow.offsetLeft,\n                    top: this.outlineWindow.offsetTop\n                };\n                this.lastSize = {\n                    width: this.outlineWindow.offsetWidth,\n                    height: this.outlineWindow.offsetHeight\n                };\n            }\n\n            // 如果是由于窗口大小变化触发的折叠，则移动到左上角\n            if (forceCollapse) {\n                this.outlineWindow.style.top = '80px';\n                this.outlineWindow.style.left = '20px';\n            }\n            \n            this.outlineWindow.style.height = this.titleBarHeight + 'px';\n        } else {\n            // 展开状态\n            const targetHeight = this.lastSize?.height || this.originalSize.height;\n            const targetWidth = this.lastSize?.width || this.originalSize.width;\n            \n            this.outlineWindow.style.width = targetWidth + 'px';\n            this.outlineWindow.style.height = targetHeight + 'px';\n            contentWrapper.style.height = (targetHeight - this.titleBarHeight) + 'px';\n            contentWrapper.style.opacity = '1';\n            resizeHandle.style.opacity = '1';\n            resizeHandle.style.pointerEvents = 'auto';\n            collapseBtn.innerHTML = '◀';\n\n            // 只在手动折叠后展开时才恢复到之前保存的位置\n            if (this.lastPosition && !forceCollapse && !this.isWindowSmall()) {\n                this.outlineWindow.style.left = this.lastPosition.left + 'px';\n                this.outlineWindow.style.top = this.lastPosition.top + 'px';\n            }\n        }\n\n        // 更新内容\n        setTimeout(() => {\n            this.updateOutlineWindow();\n        }, 300);\n    }\n\n    /**\n     * 检查窗口是否处于小尺寸状态\n     * @returns {boolean} 如果窗口小于阈值返回 true\n     */\n    isWindowSmall() {\n        const mindmapContainer = document.querySelector('.map-container');\n        if (!mindmapContainer) return false;\n\n        const { width, height } = mindmapContainer.getBoundingClientRect();\n        return width < this.COLLAPSE_THRESHOLD || height < this.COLLAPSE_THRESHOLD;\n    }\n\n    /**\n     * 更新大纲窗口内容（带防抖）\n     * 步骤：\n     * 1. 清空现有内容\n     * 2. 获取根节点数据\n     * 3. 递归渲染节点结构\n     */\n    updateOutlineWindow() {\n        // 防抖处理 - 清除之前的定时器\n        if (this.updateTimer) {\n            clearTimeout(this.updateTimer);\n        }\n\n        // 如果正在更新，直接返回\n        if (this.isUpdating) {\n            return;\n        }\n\n        // 检查更新频率限制\n        const now = Date.now();\n        const timeSinceLastUpdate = now - this.lastUpdateTime;\n        \n        if (timeSinceLastUpdate < 500) { // 500ms内不重复更新\n            this.updateTimer = setTimeout(() => {\n                this.doUpdateOutlineWindow();\n            }, this.UPDATE_DEBOUNCE_DELAY);\n            return;\n        }\n\n        // 设置延迟更新\n        this.updateTimer = setTimeout(() => {\n            this.doUpdateOutlineWindow();\n        }, 50); // 短延迟确保DOM更新完成\n    }\n\n    /**\n     * 实际执行大纲窗口更新\n     */\n    doUpdateOutlineWindow() {\n        if (!this.outlineWindow) {\n            console.warn('OutlineFeature: outlineWindow not found');\n            return;\n        }\n\n        const content = this.outlineWindow.querySelector('.vx-outline-content');\n        if (!content) {\n            console.warn('OutlineFeature: content area not found');\n            return;\n        }\n\n        try {\n            this.isUpdating = true;\n            this.lastUpdateTime = Date.now();\n\n            // 获取MindElixir数据\n            const allData = this.core.mindElixir && this.core.mindElixir.getAllData();\n            \n            if (allData && allData.nodeData) {\n                content.innerHTML = '';\n                this.renderOutlineNode(allData.nodeData, content, 0);\n                console.log('OutlineFeature: Outline window updated successfully');\n            } else {\n                console.warn('OutlineFeature: No valid data found');\n                content.innerHTML = '<div style=\"color: #666; text-align: center; padding: 20px;\">暂无数据</div>';\n            }\n        } catch (error) {\n            console.error('OutlineFeature: Error updating outline window:', error);\n            content.innerHTML = '<div style=\"color: #e74c3c; text-align: center; padding: 20px;\">数据加载失败</div>';\n        } finally {\n            this.isUpdating = false;\n            // 清除定时器\n            if (this.updateTimer) {\n                clearTimeout(this.updateTimer);\n                this.updateTimer = null;\n            }\n        }\n    }\n\n    // 检查节点是否匹配搜索条件\n    nodeMatchesSearch(nodeData) {\n        if (!this.searchTerm) return true;\n        const topic = (nodeData.topic || '').toLowerCase();\n        return topic.includes(this.searchTerm);\n    }\n\n    // 检查节点或其子节点是否匹配搜索条件\n    nodeOrChildrenMatchSearch(nodeData) {\n        if (this.nodeMatchesSearch(nodeData)) return true;\n        \n        if (nodeData.children && nodeData.children.length > 0) {\n            return nodeData.children.some(child => this.nodeOrChildrenMatchSearch(child));\n        }\n        \n        return false;\n    }\n\n    /**\n     * 渲染大纲节点\n     * 步骤：\n     * 1. 检查搜索过滤\n     * 2. 创建节点元素\n     * 3. 添加展开/折叠控件和内容\n     * 4. 递归渲染子节点\n     * \n     * @param {object} nodeData - 节点数据\n     * @param {HTMLElement} container - 容器元素\n     * @param {number} level - 节点层级\n     */\n    renderOutlineNode(nodeData, container, level) {\n        if (!nodeData) return;\n\n        // 如果有搜索词，检查是否应该显示此节点\n        if (this.searchTerm && !this.nodeOrChildrenMatchSearch(nodeData)) {\n            return;\n        }\n\n        // 创建节点容器\n        const nodeDiv = document.createElement('div');\n        nodeDiv.className = 'vx-outline-node';\n        nodeDiv.style.cssText = `\n            margin-left: ${level * 16}px;\n            margin-bottom: 2px;\n        `;\n\n        // 创建节点内容\n        const nodeContent = document.createElement('div');\n        nodeContent.className = 'vx-outline-node-content';\n        nodeContent.dataset.nodeid = nodeData.id;\n        nodeContent.style.cssText = `\n            padding: 6px 8px;\n            border-radius: 4px;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            transition: background-color 0.2s ease;\n            word-break: break-word;\n            border: 1px solid transparent;\n        `;\n\n        // 添加展开/折叠图标\n        const hasChildren = nodeData.children && nodeData.children.length > 0;\n        const isCollapsed = this.collapsedNodes.has(nodeData.id);\n        \n        let expandIcon = '';\n        if (hasChildren) {\n            expandIcon = isCollapsed ? '▶' : '▼';\n        } else {\n            expandIcon = '●';\n        }\n\n        const iconSpan = document.createElement('span');\n        iconSpan.className = 'vx-outline-expand-icon';\n        iconSpan.style.cssText = `\n            font-size: 10px;\n            color: #666;\n            min-width: 12px;\n            text-align: center;\n            cursor: ${hasChildren ? 'pointer' : 'default'};\n            padding: 2px;\n            border-radius: 2px;\n            transition: background-color 0.2s ease;\n        `;\n        iconSpan.textContent = expandIcon;\n\n        // 折叠/展开功能\n        if (hasChildren) {\n            iconSpan.addEventListener('click', (e) => {\n                e.stopPropagation();\n                this.toggleNodeCollapse(nodeData.id);\n            });\n        }\n\n        // 创建文本内容\n        const textSpan = document.createElement('span');\n        textSpan.style.cssText = `\n            flex: 1;\n            color: ${nodeData.root ? '#2c3e50' : '#34495e'};\n            font-weight: ${nodeData.root ? 'bold' : 'normal'};\n            font-size: ${nodeData.root ? '14px' : '13px'};\n        `;\n\n        // 高亮搜索匹配的文本\n        const topic = nodeData.topic || '未命名节点';\n        if (this.searchTerm && this.nodeMatchesSearch(nodeData)) {\n            const regex = new RegExp(`(${this.searchTerm.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')})`, 'gi');\n            const highlightedText = topic.replace(regex, '<mark style=\"background: #ffff00; color: #000;\">$1</mark>');\n            textSpan.innerHTML = highlightedText;\n        } else {\n            textSpan.textContent = topic;\n        }\n\n        nodeContent.appendChild(iconSpan);\n        nodeContent.appendChild(textSpan);\n\n        // 添加点击事件\n        nodeContent.addEventListener('click', (e) => {\n            if (e.target === iconSpan) return; // 避免与折叠图标冲突\n            e.stopPropagation();\n            \n            this.highlightOutlineNode(nodeContent);\n            this.locateNodeInMindMap(nodeData.id);\n        });\n\n        nodeDiv.appendChild(nodeContent);\n        container.appendChild(nodeDiv);\n\n        // 递归渲染子节点（如果未折叠且有子节点）\n        if (hasChildren && !isCollapsed) {\n            nodeData.children.forEach(child => {\n                this.renderOutlineNode(child, container, level + 1);\n            });\n        }\n    }\n\n    /**\n     * 切换节点的展开/折叠状态\n     * @param {string} nodeId - 节点ID\n     */\n    toggleNodeCollapse(nodeId) {\n        if (this.collapsedNodes.has(nodeId)) {\n            this.collapsedNodes.delete(nodeId);\n        } else {\n            this.collapsedNodes.add(nodeId);\n        }\n        this.updateOutlineWindow();\n    }\n\n    /**\n     * 高亮显示大纲节点\n     * 步骤：\n     * 1. 移除之前的高亮\n     * 2. 添加新的高亮\n     * \n     * @param {HTMLElement} nodeElement - 节点元素\n     */\n    highlightOutlineNode(nodeElement) {\n        // 清除之前所有大纲节点的高亮\n        const prevHighlighted = this.outlineWindow.querySelectorAll('.vx-outline-highlighted');\n        prevHighlighted.forEach(el => {\n            el.classList.remove('vx-outline-highlighted');\n            el.style.backgroundColor = 'transparent';\n            el.style.borderColor = 'transparent';\n            el.style.boxShadow = '';\n            el.style.transition = '';\n        });\n\n        // 添加新的高亮\n        nodeElement.classList.add('vx-outline-highlighted');\n        nodeElement.style.transition = 'all 0.3s ease';\n        nodeElement.style.backgroundColor = '#e3f2fd'; // 浅蓝色高亮\n        nodeElement.style.borderColor = '#1976d2';\n        nodeElement.style.boxShadow = '0 2px 8px rgba(25, 118, 210, 0.3)';\n\n        // 2秒后移除高亮\n        setTimeout(() => {\n            if (nodeElement.classList.contains('vx-outline-highlighted')) {\n                nodeElement.style.transition = 'all 0.3s ease';\n                nodeElement.classList.remove('vx-outline-highlighted');\n                nodeElement.style.backgroundColor = 'transparent';\n                nodeElement.style.borderColor = 'transparent';\n                nodeElement.style.boxShadow = '';\n                \n                setTimeout(() => {\n                    nodeElement.style.transition = '';\n                }, 300);\n            }\n        }, 2000);\n    }\n\n    /**\n     * 定位到思维导图中的节点\n     * @param {string} nodeId - 节点ID\n     */\n    locateNodeInMindMap(nodeId) {\n        if (!nodeId) return;\n        \n        if (this.isLocatingNode) {\n            console.log('MindMapEditorCore: Skipping locate request - already locating node:', nodeId);\n            return;\n        }\n\n        try {\n            this.isLocatingNode = true;\n            console.log('MindMapEditorCore: Attempting to locate node:', nodeId);\n            \n            // 查找目标节点元素（限制在脑图区域）\n            const mindmapContainer = document.querySelector('.map-container');\n            if (!mindmapContainer) {\n                console.warn('MindMapEditorCore: Could not find .map-container');\n                this.isLocatingNode = false;\n                return;\n            }\n            \n            const selectors = [\n                `[data-nodeid=\"${nodeId}\"]`,\n                `[data-nodeid=\"me${nodeId}\"]`\n            ];\n            \n            let targetElement = null;\n            for (const selector of selectors) {\n                // 只在脑图容器中查找，避免选择到大纲窗口的节点\n                targetElement = mindmapContainer.querySelector(selector);\n                if (targetElement) {\n                    console.log('MindMapEditorCore: Found target element in mindmap for node:', nodeId);\n                    break;\n                }\n            }\n            \n            if (!targetElement) {\n                console.warn('MindMapEditorCore: Could not find element in mindmap for node:', nodeId);\n                this.isLocatingNode = false;\n                return;\n            }\n            \n            // 找到 MindElixir 的真实容器（map-container，有overflow:scroll的那个）\n            const mapContainer = document.querySelector('.map-container');\n            if (!mapContainer) {\n                console.warn('MindMapEditorCore: Could not find .map-container');\n                this.isLocatingNode = false;\n                return;\n            }\n            \n            // 获取节点在20000x20000画布中的绝对位置\n            // 直接从style属性获取，因为MindElixir的节点都是绝对定位\n            let nodeCanvasX, nodeCanvasY;\n            \n            // 尝试从父元素或节点本身获取位置信息\n            let positionElement = targetElement;\n            console.log('MindMapEditorCore: Target element tagName:', targetElement.tagName, 'style:', targetElement.style.cssText);\n            \n            while (positionElement && !positionElement.style.left) {\n                positionElement = positionElement.parentElement;\n                if (positionElement) {\n                    console.log('MindMapEditorCore: Checking parent:', positionElement.tagName, 'style:', positionElement.style.cssText);\n                }\n                if (positionElement && positionElement.tagName.toLowerCase() === 'body') {\n                    break;\n                }\n            }\n            \n            if (positionElement && positionElement.style.left && positionElement.style.top) {\n                // 从style属性直接获取位置\n                const styleLeft = parseFloat(positionElement.style.left);\n                const styleTop = parseFloat(positionElement.style.top);\n                nodeCanvasX = styleLeft + positionElement.offsetWidth / 2;\n                nodeCanvasY = styleTop + positionElement.offsetHeight / 2;\n                \n                console.log('MindMapEditorCore: Using style positioning:', JSON.stringify({\n                    element: positionElement.tagName,\n                    styleLeft: styleLeft,\n                    styleTop: styleTop,\n                    offsetWidth: positionElement.offsetWidth,\n                    offsetHeight: positionElement.offsetHeight,\n                    calculatedCenter: { x: nodeCanvasX, y: nodeCanvasY }\n                }));\n            } else {\n                // 回退方案：使用getBoundingClientRect计算\n                const nodeRect = targetElement.getBoundingClientRect();\n                const canvasRect = document.querySelector('.map-canvas').getBoundingClientRect();\n                nodeCanvasX = nodeRect.left - canvasRect.left + nodeRect.width / 2 + mapContainer.scrollLeft;\n                nodeCanvasY = nodeRect.top - canvasRect.top + nodeRect.height / 2 + mapContainer.scrollTop;\n                \n                console.log('MindMapEditorCore: Using fallback getBoundingClientRect positioning');\n            }\n            \n            // MindElixir 居中算法：让容器滚动到 (节点位置 - 容器大小/2)\n            const targetScrollX = nodeCanvasX - mapContainer.offsetWidth / 2;\n            const targetScrollY = nodeCanvasY - mapContainer.offsetHeight / 2;\n            \n            console.log('MindMapEditorCore: MindElixir positioning calculation:', JSON.stringify({\n                nodeInCanvas: { x: Math.round(nodeCanvasX), y: Math.round(nodeCanvasY) },\n                containerSize: { width: mapContainer.offsetWidth, height: mapContainer.offsetHeight },\n                targetScroll: { x: Math.round(targetScrollX), y: Math.round(targetScrollY) }\n            }));\n            \n            // 使用 MindElixir 的容器执行滚动（关键！）\n            mapContainer.scrollTo({\n                left: targetScrollX,\n                top: targetScrollY,\n                behavior: 'smooth'\n            });\n            \n            // 添加高亮效果，并在高亮后恢复原始背景色\n            const originalBg = targetElement.style.backgroundColor;\n            targetElement.style.backgroundColor = '#ffff00';\n            setTimeout(() => {\n                targetElement.style.backgroundColor = originalBg;\n            }, 1000);\n            \n            console.log('MindMapEditorCore: Successfully scrolled MindElixir container to center node');\n            \n            // 滚动完成后重置状态\n            setTimeout(() => {\n                this.isLocatingNode = false;\n                console.log('MindMapEditorCore: Node location completed for:', nodeId);\n            }, 300);\n            \n        } catch (error) {\n            console.error('MindMapEditorCore: Error in locateNodeInMindMap:', error);\n            this.isLocatingNode = false;\n        }\n    }\n\n    /**\n     * 设置DOM观察器\n     * 监听思维导图变化并更新大纲\n     */\n    setupDOMObserver() {\n        // 清理之前的监听器\n        this.cleanupObservers();\n\n        // 监听 MindElixir 的 operation 事件\n        this.core.mindElixir.bus.addListener('operation', (operation) => {\n            console.log('OutlineFeature: Operation detected:', operation.name);\n            \n            // 根据操作类型决定是否需要更新大纲\n            const outlineUpdateOperations = [\n                'addChild',      // 添加子节点\n                'removeNode',    // 删除节点\n                'moveNode',      // 移动节点\n                'finishEdit'     // 完成编辑（文本内容变化）\n            ];\n\n            const immediateUpdateOperations = [\n                'addChild',\n                'removeNode', \n                'moveNode'\n            ];\n\n            const delayedUpdateOperations = [\n                'finishEdit'     // 编辑完成时再更新，避免输入过程中频繁更新\n            ];\n\n            if (immediateUpdateOperations.includes(operation.name)) {\n                // 立即更新（有50ms防抖）\n                this.updateOutlineWindow();\n            } else if (delayedUpdateOperations.includes(operation.name)) {\n                // 延迟更新，给更多时间让用户完成编辑\n                if (this.updateTimer) {\n                    clearTimeout(this.updateTimer);\n                }\n                this.updateTimer = setTimeout(() => {\n                    this.doUpdateOutlineWindow();\n                }, this.UPDATE_DEBOUNCE_DELAY);\n            }\n\n            // 不再监听 editStyle, editTags, editIcons 等，这些不影响大纲结构\n        });\n\n        // 创建单一的 MutationObserver 作为备用监听器\n        // 只监听结构性变化，不监听文本内容变化\n        const mindmapElement = document.getElementById('vx-mindmap');\n        if (mindmapElement) {\n            this.mutationObserver = new MutationObserver((mutations) => {\n                let needsUpdate = false;\n                \n                mutations.forEach((mutation) => {\n                    // 只关注子节点的添加/删除，忽略文本内容变化\n                    if (mutation.type === 'childList' && \n                        (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0)) {\n                        needsUpdate = true;\n                    }\n                });\n\n                if (needsUpdate) {\n                    console.log('OutlineFeature: DOM structure change detected via MutationObserver');\n                    this.updateOutlineWindow();\n                }\n            });\n\n            // 只监听子节点变化，不监听characterData\n            this.mutationObserver.observe(mindmapElement, {\n                childList: true,\n                subtree: true\n                // 不包含 characterData: true，避免文本编辑时的频繁触发\n            });\n        }\n    }\n\n    /**\n     * 清理所有观察器和监听器\n     */\n    cleanupObservers() {\n        // 清理定时器\n        if (this.updateTimer) {\n            clearTimeout(this.updateTimer);\n            this.updateTimer = null;\n        }\n\n        // 清理 MutationObserver\n        if (this.mutationObserver) {\n            this.mutationObserver.disconnect();\n            this.mutationObserver = null;\n        }\n\n        // 重置状态\n        this.isUpdating = false;\n    }\n\n    /**\n     * 数据变更处理\n     * 步骤：\n     * 1. 构建节点数据映射\n     * 2. 更新大纲显示\n     * \n     * @param {object} data - 新的数据\n     */\n    onDataChange(data) {\n        console.log('OutlineFeature: onDataChange called with data:', data);\n        this.buildNodeDataMap(data);\n        console.log('OutlineFeature: Built nodeDataMap with', this.nodeDataMap.size, 'entries');\n        this.updateOutlineWindow();\n    }\n\n    /**\n     * 构建节点数据映射表\n     * @param {object} data - 思维导图数据\n     */\n    buildNodeDataMap(data) {\n        this.nodeDataMap.clear();\n        this.buildNodeDataMapRecursive(data, this.nodeDataMap);\n    }\n\n    /**\n     * 递归构建节点数据映射表\n     * @param {object} nodeData - 节点数据\n     * @param {Map} map - 映射表\n     */\n    buildNodeDataMapRecursive(nodeData, map) {\n        if (!nodeData) return;\n        \n        map.set(nodeData.id, nodeData);\n        \n        if (nodeData.children) {\n            nodeData.children.forEach(child => {\n                this.buildNodeDataMapRecursive(child, map);\n            });\n        }\n    }\n\n    /**\n     * 销毁大纲功能，清理所有资源\n     */\n    destroy() {\n        console.log('OutlineFeature: destroy called');\n        \n        // 清理所有观察器和监听器\n        this.cleanupObservers();\n        \n        // 移除大纲窗口\n        if (this.outlineWindow && this.outlineWindow.parentNode) {\n            this.outlineWindow.parentNode.removeChild(this.outlineWindow);\n        }\n        \n        // 清理所有引用\n        this.outlineWindow = null;\n        this.core = null;\n        this.nodeDataMap.clear();\n        this.collapsedNodes = null;\n        this.lastPosition = null;\n        this.lastSize = null;\n        \n        console.log('OutlineFeature: destroyed successfully');\n    }\n} "
  },
  {
    "path": "src/data/extra/web/js/mindmap/lib/mind-elixir/MindElixir.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.MindElixir=t():e.MindElixir=t()}(self,(function(){return(()=>{var e={74:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>m});var i=n(81),o=n.n(i),a=n(645),s=n.n(a),r=n(667),l=n.n(r),c=new URL(n(848),n.b),d=new URL(n(295),n.b),h=s()(o()),p=l()(c),u=l()(d);h.push([e.id,\".mind-elixir {\\n  position: relative;\\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n  font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, sans-serif;\\n}\\n.mind-elixir .hyper-link {\\n  text-decoration: none;\\n}\\n.map-container {\\n  user-select: none;\\n  height: 100%;\\n  width: 100%;\\n  overflow: scroll;\\n  font-size: 15px;\\n}\\n.map-container::-webkit-scrollbar {\\n  width: 0px;\\n  height: 0px;\\n}\\n.map-container .focus-mode {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  height: 100%;\\n  width: 100%;\\n  background: #fff;\\n}\\n.map-container .map-canvas {\\n  height: 20000px;\\n  width: 20000px;\\n  position: relative;\\n  user-select: none;\\n  transition: all 0.3s;\\n  transform: scale(1);\\n  background: #f6f6f6;\\n}\\n.map-container .map-canvas .selected {\\n  outline: 2px solid #4dc4ff;\\n}\\n.map-container .map-canvas root {\\n  position: absolute;\\n}\\n.map-container .map-canvas root tpc {\\n  display: block;\\n  color: #ffffff;\\n  padding: 10px 15px;\\n  background-color: #00aaff;\\n  border-radius: 5px;\\n  font-size: 25px;\\n  white-space: pre-wrap;\\n}\\n.map-container .map-canvas root tpc #input-box {\\n  padding: 10px 15px;\\n}\\n.map-container .box > grp {\\n  position: absolute;\\n}\\n.map-container .box > grp > t > tpc {\\n  background-color: #ffffff;\\n  border: 1px solid #444444;\\n  border-radius: 5px;\\n  color: #735c45;\\n  padding: 8px 10px;\\n  margin: 0;\\n}\\n.map-container .box > grp > t > tpc #input-box {\\n  padding: 8px 10px;\\n}\\n.map-container .box .lhs {\\n  direction: rtl;\\n}\\n.map-container .box .lhs tpc {\\n  direction: ltr;\\n}\\n.map-container .box grp {\\n  display: block;\\n  pointer-events: none;\\n}\\n.map-container .box children,\\n.map-container .box t {\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n.map-container .box t {\\n  position: relative;\\n  cursor: pointer;\\n  padding: 0 15px;\\n  margin-top: 10px;\\n}\\n.map-container .box t tpc {\\n  position: relative;\\n  display: block;\\n  padding: 5px;\\n  border-radius: 3px;\\n  color: #666666;\\n  pointer-events: all;\\n  max-width: 800px;\\n  white-space: pre-wrap;\\n  line-height: 1.2;\\n}\\n.map-container .box t tpc #input-box {\\n  padding: 5px;\\n}\\n.map-container .box t tpc .tags {\\n  direction: ltr;\\n}\\n.map-container .box t tpc .tags span {\\n  display: inline-block;\\n  border-radius: 3px;\\n  padding: 2px 4px;\\n  background: #d6f0f8;\\n  color: #276f86;\\n  margin: 0px;\\n  font-size: 12px;\\n  height: 16px;\\n  line-height: 16px;\\n  margin-right: 3px;\\n  margin-top: 2px;\\n}\\n.map-container .box t tpc .icons {\\n  display: inline-block;\\n  direction: ltr;\\n  margin-right: 10px;\\n}\\n.map-container .box t tpc .insert-preview {\\n  position: absolute;\\n  width: 100%;\\n  left: 0px;\\n  z-index: 9;\\n}\\n.map-container .box t tpc .before {\\n  height: 14px;\\n  top: -14px;\\n}\\n.map-container .box t tpc .show {\\n  background: #7ad5ff;\\n  pointer-events: none;\\n  opacity: 0.7;\\n}\\n.map-container .box t tpc .in {\\n  height: 100%;\\n  top: 0px;\\n}\\n.map-container .box t tpc .after {\\n  height: 14px;\\n  bottom: -14px;\\n}\\n.map-container .box t epd {\\n  position: absolute;\\n  height: 18px;\\n  width: 18px;\\n  background-image: url(\"+p+\");\\n  background-repeat: no-repeat;\\n  background-size: contain;\\n  background-position: center;\\n  pointer-events: all;\\n  z-index: 9;\\n}\\n.map-container .box t epd.minus {\\n  background-image: url(\"+u+\") !important;\\n  transition: all 0.3s;\\n  opacity: 0;\\n}\\n.map-container .box t epd.minus:hover {\\n  opacity: 1;\\n}\\n.map-container .icon {\\n  width: 1em;\\n  height: 1em;\\n  vertical-align: -0.15em;\\n  fill: currentColor;\\n  overflow: hidden;\\n}\\n.map-container .lines,\\n.map-container .subLines,\\n.map-container .topiclinks,\\n.map-container .linkcontroller {\\n  position: absolute;\\n  height: 102%;\\n  width: 100%;\\n  top: 0;\\n  left: 0;\\n}\\n.map-container .topiclinks,\\n.map-container .linkcontroller {\\n  pointer-events: none;\\n}\\n.map-container .topiclinks g,\\n.map-container .linkcontroller g {\\n  pointer-events: all;\\n}\\n.map-container .lines,\\n.map-container .subLines {\\n  pointer-events: none;\\n  z-index: -1;\\n}\\n.map-container .topiclinks *,\\n.map-container .linkcontroller * {\\n  z-index: 100;\\n}\\n.map-container .topiclinks g {\\n  cursor: pointer;\\n}\\n.down t,\\n.down children {\\n  display: block !important;\\n}\\n.down grp {\\n  display: inline-block !important;\\n}\\n.circle {\\n  position: absolute;\\n  height: 10px;\\n  width: 10px;\\n  margin-top: -5px;\\n  margin-left: -5px;\\n  border-radius: 100%;\\n  background: #aaa;\\n  cursor: pointer;\\n}\\n#input-box {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  background-color: #fff;\\n  color: #666666;\\n  width: max-content;\\n  max-width: 800px;\\n  z-index: 11;\\n  direction: ltr;\\n  user-select: auto;\\n}\\n\",\"\"]);const m=h},165:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>r});var i=n(81),o=n.n(i),a=n(645),s=n.n(a)()(o());s.push([e.id,\"cmenu {\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  z-index: 99;\\n}\\ncmenu .menu-list {\\n  position: fixed;\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n  font: 300 15px 'Roboto', sans-serif;\\n  color: #333;\\n  box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);\\n}\\ncmenu .menu-list * {\\n  transition: color 0.4s, background-color 0.4s;\\n}\\ncmenu .menu-list li {\\n  min-width: 150px;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  padding: 6px 10px;\\n  background-color: #fff;\\n  border-bottom: 1px solid #ecf0f1;\\n}\\ncmenu .menu-list li a {\\n  color: #333;\\n  text-decoration: none;\\n}\\ncmenu .menu-list li.disabled {\\n  color: #5e5e5e;\\n  background-color: #f7f7f7;\\n}\\ncmenu .menu-list li.disabled:hover {\\n  cursor: default;\\n  background-color: #f7f7f7;\\n}\\ncmenu .menu-list li:hover {\\n  cursor: pointer;\\n  background-color: #ecf0f1;\\n}\\ncmenu .menu-list li:first-child {\\n  border-radius: 5px 5px 0 0;\\n}\\ncmenu .menu-list li:last-child {\\n  border-bottom: 0;\\n  border-radius: 0 0 5px 5px;\\n}\\ncmenu .menu-list li span:last-child {\\n  float: right;\\n}\\n\",\"\"]);const r=s},787:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>r});var i=n(81),o=n.n(i),a=n(645),s=n.n(a)()(o());s.push([e.id,\"mmenu {\\n  position: absolute;\\n  left: 20px;\\n  bottom: 70px;\\n  z-index: 99;\\n  margin: 0;\\n  padding: 0;\\n  color: #333;\\n  border-radius: 5px;\\n  box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);\\n  overflow: hidden;\\n}\\nmmenu * {\\n  transition: color 0.4s, background-color 0.4s;\\n}\\nmmenu div {\\n  float: left;\\n  text-align: center;\\n  width: 30px;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  padding: 8px;\\n  background-color: #fff;\\n  border-bottom: 1px solid #ecf0f1;\\n}\\nmmenu div a {\\n  color: #333;\\n  text-decoration: none;\\n}\\nmmenu div.disabled {\\n  color: #5e5e5e;\\n  background-color: #f7f7f7;\\n}\\nmmenu div.disabled:hover {\\n  cursor: default;\\n  background-color: #f7f7f7;\\n}\\nmmenu div:hover {\\n  cursor: pointer;\\n  background-color: #ecf0f1;\\n}\\n\",\"\"]);const r=s},519:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>r});var i=n(81),o=n.n(i),a=n(645),s=n.n(a)()(o());s.push([e.id,\"nmenu {\\n  position: absolute;\\n  right: 20px;\\n  top: 20px;\\n  background: #fff;\\n  padding: 10px;\\n  border-radius: 5px;\\n  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);\\n  width: 240px;\\n  box-sizing: border-box;\\n  padding: 0 15px 15px;\\n  transition: 0.3s all;\\n}\\nnmenu.close {\\n  height: 30px;\\n  width: 46px;\\n  overflow: hidden;\\n}\\nnmenu .button-container {\\n  padding: 3px 0;\\n  direction: rtl;\\n}\\nnmenu #nm-tag {\\n  margin-top: 20px;\\n}\\nnmenu .nm-fontsize-container {\\n  display: flex;\\n  justify-content: space-around;\\n  margin-bottom: 20px;\\n}\\nnmenu .nm-fontsize-container div {\\n  height: 36px;\\n  width: 36px;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);\\n  background-color: white;\\n  color: tomato;\\n  border-radius: 100%;\\n}\\nnmenu .nm-fontcolor-container {\\n  margin-bottom: 10px;\\n}\\nnmenu input,\\nnmenu textarea {\\n  background: #f7f9fa;\\n  border: 1px solid #dce2e6;\\n  border-radius: 3px;\\n  padding: 5px;\\n  margin: 10px 0;\\n  width: 100%;\\n  box-sizing: border-box;\\n}\\nnmenu textarea {\\n  resize: none;\\n}\\nnmenu .split6 {\\n  display: inline-block;\\n  width: 16.66%;\\n  margin-bottom: 5px;\\n}\\nnmenu .palette {\\n  border-radius: 100%;\\n  width: 21px;\\n  height: 21px;\\n  border: 1px solid #edf1f2;\\n  margin: auto;\\n}\\nnmenu .nmenu-selected,\\nnmenu .palette:hover {\\n  box-shadow: tomato 0 0 0 2px;\\n  background-color: #c7e9fa;\\n}\\nnmenu .size-selected {\\n  background-color: tomato !important;\\n  border-color: tomato;\\n  fill: white;\\n  color: white;\\n}\\nnmenu .size-selected svg {\\n  color: #fff;\\n}\\nnmenu .bof {\\n  text-align: center;\\n}\\nnmenu .bof span {\\n  display: inline-block;\\n  font-size: 14px;\\n  border-radius: 4px;\\n  padding: 2px 5px;\\n}\\nnmenu .bof .selected {\\n  background-color: tomato;\\n  color: white;\\n}\\n\",\"\"]);const r=s},301:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>r});var i=n(81),o=n.n(i),a=n(645),s=n.n(a)()(o());s.push([e.id,\"toolbar {\\n  position: absolute;\\n  background: #fff;\\n  padding: 10px;\\n  border-radius: 5px;\\n  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);\\n}\\ntoolbar span:active {\\n  opacity: 0.5;\\n}\\n.rb {\\n  right: 20px;\\n  bottom: 20px;\\n  font-family: iconfont;\\n}\\n.rb span + span {\\n  margin-left: 10px;\\n}\\n.lt {\\n  font-size: 20px;\\n  left: 20px;\\n  top: 20px;\\n  width: 20px;\\n}\\n.lt span {\\n  display: block;\\n}\\n.lt span + span {\\n  margin-top: 10px;\\n}\\n\",\"\"]);const r=s},645:e=>{\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=\"\",i=void 0!==t[5];return t[4]&&(n+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(n+=\"@media \".concat(t[2],\" {\")),i&&(n+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),n+=e(t),i&&(n+=\"}\"),t[2]&&(n+=\"}\"),t[4]&&(n+=\"}\"),n})).join(\"\")},t.i=function(e,n,i,o,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var s={};if(i)for(var r=0;r<this.length;r++){var l=this[r][0];null!=l&&(s[l]=!0)}for(var c=0;c<e.length;c++){var d=[].concat(e[c]);i&&s[d[0]]||(void 0!==a&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=a),n&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=n):d[2]=n),o&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=o):d[4]=\"\".concat(o)),t.push(d))}},t}},667:e=>{\"use strict\";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['\"].*['\"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/[\"'() \\t\\n]|(%20)/.test(e)||t.needQuotes?'\"'.concat(e.replace(/\"/g,'\\\\\"').replace(/\\n/g,\"\\\\n\"),'\"'):e):e}},81:e=>{\"use strict\";e.exports=function(e){return e[1]}},379:e=>{\"use strict\";var t=[];function n(e){for(var n=-1,i=0;i<t.length;i++)if(t[i].identifier===e){n=i;break}return n}function i(e,i){for(var a={},s=[],r=0;r<e.length;r++){var l=e[r],c=i.base?l[0]+i.base:l[0],d=a[c]||0,h=\"\".concat(c,\" \").concat(d);a[c]=d+1;var p=n(h),u={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(u);else{var m=o(u,i);i.byIndex=r,t.splice(r,0,{identifier:h,updater:m,references:1})}s.push(h)}return s}function o(e,t){var n=t.domAPI(t);n.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,o){var a=i(e=e||[],o=o||{});return function(e){e=e||[];for(var s=0;s<a.length;s++){var r=n(a[s]);t[r].references--}for(var l=i(e,o),c=0;c<a.length;c++){var d=n(a[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}a=l}}},569:e=>{\"use strict\";var t={};e.exports=function(e,n){var i=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!i)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");i.appendChild(n)}},216:e=>{\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,n)=>{\"use strict\";e.exports=function(e){var t=n.nc;t&&e.setAttribute(\"nonce\",t)}},795:e=>{\"use strict\";e.exports=function(e){var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var i=\"\";n.supports&&(i+=\"@supports (\".concat(n.supports,\") {\")),n.media&&(i+=\"@media \".concat(n.media,\" {\"));var o=void 0!==n.layer;o&&(i+=\"@layer\".concat(n.layer.length>0?\" \".concat(n.layer):\"\",\" {\")),i+=n.css,o&&(i+=\"}\"),n.media&&(i+=\"}\"),n.supports&&(i+=\"}\");var a=n.sourceMap;a&&\"undefined\"!=typeof btoa&&(i+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),t.styleTagTransform(i,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},857:()=>{!function(e){var t,n,i,o,a,s,r='<svg><symbol id=\"icon-edit\" viewBox=\"0 0 1024 1024\"><path d=\"M423.765333 128a42.666667 42.666667 0 0 1 3.2 85.205333L423.765333 213.333333H234.666667a64 64 0 0 0-63.872 60.245334L170.666667 277.333333v512a64 64 0 0 0 60.245333 63.872L234.666667 853.333333h512a64 64 0 0 0 63.872-60.245333L810.666667 789.333333v-189.098666a42.666667 42.666667 0 0 1 85.205333-3.2l0.128 3.2V789.333333a149.333333 149.333333 0 0 1-144.213333 149.248L746.666667 938.666667h-512a149.333333 149.333333 0 0 1-149.248-144.213334L85.333333 789.333333v-512a149.333333 149.333333 0 0 1 144.213334-149.248L234.666667 128h189.098666z m324.949334-53.248a42.666667 42.666667 0 0 1 60.330666 0l150.869334 150.869333a42.666667 42.666667 0 0 1 0 60.330667l-329.386667 329.386667a42.666667 42.666667 0 0 1-29.44 12.458666l-153.386667 2.517334a42.666667 42.666667 0 0 1-43.349333-43.349334l2.56-153.386666a42.666667 42.666667 0 0 1 12.458667-29.44z m30.165333 90.496L491.946667 452.266667l-1.493334 91.989333 92.032-1.493333 286.976-286.976-90.538666-90.538667z\"  ></path></symbol><symbol id=\"icon-rising\" viewBox=\"0 0 1024 1024\"><path d=\"M553.173333 803.84h-64l0.021334-474.581333-224.021334 224-45.269333-45.226667L521.6 206.293333l301.717333 301.696-45.269333 45.269334-224.853333-224.896v475.477333z\"  ></path></symbol><symbol id=\"icon-falling\" viewBox=\"0 0 1024 1024\"><path d=\"M553.173333 238.314667h-64l0.021334 474.602666-224.021334-224-45.269333 45.226667L521.6 835.861333l301.717333-301.717333-45.269333-45.226667-224.853333 224.853334V238.336z\"  ></path></symbol><symbol id=\"icon-shanchu2\" viewBox=\"0 0 1024 1024\"><path d=\"M516.60601807 107.93026734c-82.64382935 0-149.71865844 65.51751709-152.5729065 147.77160644H171.37136841c-21.40603638 0-38.92044068 17.38504028-38.92044068 38.92126465 0 21.40686036 17.38504028 38.92208862 38.92126466 38.92208862h42.94308471v435.40136719c0 81.73498536 55.39828492 148.55026245 123.90106201 148.55026245h348.99444581c68.37341309 0 123.90106201-66.42553711 123.901062-148.55026245V333.80477906h38.92126465c21.40686036 0 38.92126464-17.38586426 38.92126465-38.92208863 0-21.40686036-17.38504028-38.92126464-38.92126465-38.92126465H668.91854859C666.45321656 173.44860839 599.24902344 107.93109131 516.60601807 107.93109131z m-79.65939331 147.77160644c2.85424805-42.16442872 37.2354126-74.85809326 79.78875732-74.85809326s76.93450927 32.82302857 79.39984131 74.85809326H436.94662476z m-98.86047364 589.01165771c-24.2611084 0-50.98754883-31.13717651-50.98754883-75.76693725V333.80477906h450.97036744V769.33551026c0 44.50039673-26.72644043 75.76776123-50.98754884 75.76776122H338.08615112v-0.38973999z m0 0\"  ></path><path d=\"M390.37063599 751.17263794c17.77313232 0 32.43411255-17.7739563 32.43411255-40.08883667V482.35504151c0-22.31488037-14.53079224-40.08966065-32.43411255-40.08966065-17.77478027 0-32.43493653 17.77478027-32.43493653 40.08966065v228.72875976c0 22.18469239 14.27124023 40.08883667 32.43493653 40.08883667z m117.41308594 0c17.7739563 0 32.43411255-17.7739563 32.43411255-40.08883667V482.35504151c0-22.31488037-14.53079224-40.08966065-32.43411255-40.08966065-17.7739563 0-32.43493653 17.77478027-32.43493653 40.08966065v228.72875976c0 22.18469239 14.66098023 40.08883667 32.43493653 40.08883667z m123.51049804 0c17.7739563 0 32.43493653-17.7739563 32.43493652-40.08883667V482.35504151c0-22.31488037-14.53079224-40.08966065-32.43493652-40.08966065-17.7739563 0-32.43411255 17.77478027-32.43411255 40.08966065v228.72875976c0 22.18469239 14.14105224 40.08883667 32.43411255 40.08883667z m0 0\"  ></path></symbol><symbol id=\"icon-zijiedian\" viewBox=\"0 0 1024 1024\"><path d=\"M312.208 472c19.568-157.856 153.432-280 315.656-280 175.68 0 318.112 143.272 318.112 320S803.552 832 627.864 832c-162.224 0-296.08-122.144-315.656-280H120a40 40 0 0 1 0-80h192.208zM632 752c132.552 0 240-107.448 240-240 0-132.552-107.448-240-240-240-132.552 0-240 107.448-240 240 0 132.552 107.448 240 240 240z m-40-280v-80a40 40 0 0 1 80 0v80h80a40 40 0 0 1 0 80h-80v80a40 40 0 0 1-80 0v-80h-80a40 40 0 0 1 0-80h80z\"  ></path></symbol><symbol id=\"icon-tongjijiedian-\" viewBox=\"0 0 1024 1024\"><path d=\"M803.84 131.626667H410.24A59.733333 59.733333 0 0 0 350.506667 192v45.226667H199.68a51.626667 51.626667 0 0 0-51.626667 51.626666v465.92a51.626667 51.626667 0 0 0 51.626667 51.626667h187.52v-55.466667h-162.133333a21.333333 21.333333 0 0 1-21.333334-21.333333V313.386667a21.333333 21.333333 0 0 1 21.333334-21.333334h125.653333v64a59.733333 59.733333 0 0 0 59.733333 59.733334h393.386667a59.733333 59.733333 0 0 0 59.733333-59.733334V192a59.733333 59.733333 0 0 0-59.733333-60.373333z m4.266667 224.64a4.266667 4.266667 0 0 1-4.266667 4.266666H410.24a4.266667 4.266667 0 0 1-4.266667-4.266666V192a4.266667 4.266667 0 0 1 4.266667-4.266667h393.6a4.266667 4.266667 0 0 1 4.266667 4.266667zM716.16 749.44h-81.28v-81.493333a27.733333 27.733333 0 0 0-55.466667 0v81.28h-81.493333a27.733333 27.733333 0 1 0 0 55.466666h81.28v81.28a27.733333 27.733333 0 1 0 55.466667 0v-81.066666h81.28a27.733333 27.733333 0 0 0 0-55.466667z\"  ></path></symbol><symbol id=\"icon-close\" viewBox=\"0 0 1024 1024\"><path d=\"M557.312 513.248l265.28-263.904c12.544-12.48 12.608-32.704 0.128-45.248-12.512-12.576-32.704-12.608-45.248-0.128L512.128 467.904l-263.04-263.84c-12.448-12.48-32.704-12.544-45.248-0.064-12.512 12.48-12.544 32.736-0.064 45.28l262.976 263.776L201.6 776.8c-12.544 12.48-12.608 32.704-0.128 45.248a31.937 31.937 0 0 0 22.688 9.44c8.16 0 16.32-3.104 22.56-9.312l265.216-263.808 265.44 266.24c6.24 6.272 14.432 9.408 22.656 9.408a31.94 31.94 0 0 0 22.592-9.344c12.512-12.48 12.544-32.704 0.064-45.248L557.312 513.248z\" fill=\"\" ></path></symbol><symbol id=\"icon-menu\" viewBox=\"0 0 1024 1024\"><path d=\"M109.714 292.571h804.572c21.943 0 36.571-21.942 36.571-43.885 0-14.629-14.628-29.257-36.571-29.257H109.714c-21.943 0-36.571 14.628-36.571 36.571 0 14.629 14.628 36.571 36.571 36.571zM914.286 512H109.714c-21.943 0-36.571 14.629-36.571 36.571 0 14.629 14.628 36.572 36.571 36.572h804.572c21.943 0 36.571-21.943 36.571-43.886 0-14.628-14.628-29.257-36.571-29.257z m0 292.571H109.714c-21.943 0-36.571 14.629-36.571 36.572s14.628 36.571 36.571 36.571h804.572c21.943 0 36.571-21.943 36.571-36.571 0-21.943-14.628-36.572-36.571-36.572z\"  ></path></symbol><symbol id=\"icon-right\" viewBox=\"0 0 1024 1024\"><path d=\"M385 560.69999999L385 738.9c0 36.90000001 26.4 68.5 61.3 68.5l150.2 0c1.5 0 3-0.1 4.5-0.3 10.2 38.7 45.5 67.3 87.5 67.3 50 0 90.5-40.5 90.5-90.5s-40.5-90.5-90.5-90.5c-42 0-77.3 28.6-87.5 67.39999999-1.4-0.3-2.9-0.4-4.5-0.39999999L446.3 760.4c-6.8 0-14.3-8.9-14.3-21.49999999l0-427.00000001c0-12.7 7.40000001-21.5 14.30000001-21.5l150.19999999 0c1.5 0 3-0.2 4.5-0.4 10.2 38.8 45.5 67.3 87.5 67.3 50 0 90.5-40.5 90.5-90.4 0-49.9-40.5-90.6-90.5-90.59999999-42 0-77.3 28.6-87.5 67.39999999-1.4-0.2-2.9-0.4-4.49999999-0.4L446.3 243.3c-34.80000001 0-61.3 31.6-61.3 68.50000001L385 513.7l-79.1 0c-10.4-38.5-45.49999999-67-87.4-67-50 0-90.5 40.5-90.5 90.5s40.5 90.5 90.5 90.5c41.79999999 0 77.00000001-28.4 87.4-67L385 560.69999999z\" fill=\"#333333\" ></path></symbol><symbol id=\"icon-left\" viewBox=\"0 0 1024 1024\"><path d=\"M639 463.30000001L639 285.1c0-36.90000001-26.4-68.5-61.3-68.5l-150.2 0c-1.5 0-3 0.1-4.5 0.3-10.2-38.7-45.5-67.3-87.5-67.3-50 0-90.5 40.5-90.5 90.5s40.5 90.5 90.5 90.5c42 0 77.3-28.6 87.5-67.39999999 1.4 0.3 2.9 0.4 4.5 0.39999999L577.7 263.6c6.8 0 14.3 8.9 14.3 21.49999999l0 427.00000001c0 12.7-7.40000001 21.5-14.30000001 21.5l-150.19999999 0c-1.5 0-3 0.2-4.5 0.4-10.2-38.8-45.5-67.3-87.5-67.3-50 0-90.5 40.5-90.5 90.4 0 49.9 40.5 90.6 90.5 90.59999999 42 0 77.3-28.6 87.5-67.39999999 1.4 0.2 2.9 0.4 4.49999999 0.4L577.7 780.7c34.80000001 0 61.3-31.6 61.3-68.50000001L639 510.3l79.1 0c10.4 38.5 45.49999999 67 87.4 67 50 0 90.5-40.5 90.5-90.5s-40.5-90.5-90.5-90.5c-41.79999999 0-77.00000001 28.4-87.4 67L639 463.30000001z\" fill=\"#333333\" ></path></symbol><symbol id=\"icon-side\" viewBox=\"0 0 1024 1024\"><path d=\"M851.91168 328.45312c-59.97056 0-108.6208 48.47104-108.91264 108.36992l-137.92768 38.4a109.14304 109.14304 0 0 0-63.46752-46.58688l1.39264-137.11872c47.29344-11.86816 82.31936-54.66624 82.31936-105.64096 0-60.15488-48.76288-108.91776-108.91776-108.91776s-108.91776 48.76288-108.91776 108.91776c0 49.18784 32.60928 90.75712 77.38368 104.27392l-1.41312 138.87488a109.19936 109.19936 0 0 0-63.50336 48.55808l-138.93632-39.48544 0.01024-0.72704c0-60.15488-48.76288-108.91776-108.91776-108.91776s-108.91776 48.75776-108.91776 108.91776c0 60.15488 48.76288 108.91264 108.91776 108.91264 39.3984 0 73.91232-20.92032 93.03552-52.2496l139.19232 39.552-0.00512 0.2304c0 25.8304 9.00096 49.5616 24.02816 68.23424l-90.14272 132.63872a108.7488 108.7488 0 0 0-34.2528-5.504c-60.15488 0-108.91776 48.768-108.91776 108.91776 0 60.16 48.76288 108.91776 108.91776 108.91776 60.16 0 108.92288-48.75776 108.92288-108.91776 0-27.14624-9.9328-51.968-26.36288-71.04l89.04704-131.03104a108.544 108.544 0 0 0 37.6832 6.70208 108.672 108.672 0 0 0 36.48512-6.272l93.13792 132.57216a108.48256 108.48256 0 0 0-24.69888 69.0688c0 60.16 48.768 108.92288 108.91776 108.92288 60.16 0 108.91776-48.76288 108.91776-108.92288 0-60.14976-48.75776-108.91776-108.91776-108.91776a108.80512 108.80512 0 0 0-36.69504 6.3488l-93.07136-132.48a108.48768 108.48768 0 0 0 24.79616-72.22784l136.09984-37.888c18.99008 31.93856 53.84192 53.3504 93.69088 53.3504 60.16 0 108.92288-48.75776 108.92288-108.91264-0.00512-60.15488-48.77312-108.92288-108.92288-108.92288z\"  ></path></symbol><symbol id=\"icon-B\" viewBox=\"0 0 1024 1024\"><path d=\"M98.067692 65.457231H481.28c75.854769 0 132.411077 3.150769 169.668923 9.452307 37.336615 6.301538 70.656 19.534769 100.036923 39.620924 29.459692 20.007385 53.956923 46.710154 73.570462 80.029538 19.692308 33.398154 29.459692 70.734769 29.459692 112.167385 0 44.898462-12.130462 86.094769-36.233846 123.588923a224.886154 224.886154 0 0 1-98.461539 84.283077c58.368 17.092923 103.266462 46.08 134.695385 87.04 31.350154 40.96 47.025231 89.088 47.025231 144.462769 0 43.638154-10.082462 86.016-30.404923 127.212308-20.243692 41.196308-47.891692 74.043077-83.02277 98.697846-35.052308 24.654769-78.296615 39.778462-129.732923 45.449846-32.295385 3.465846-110.119385 5.671385-233.472 6.537846H98.067692V65.457231z m193.536 159.507692V446.621538h126.818462c75.460923 0 122.328615-1.024 140.603077-3.229538 33.083077-3.938462 59.155692-15.36 78.139077-34.343385 18.904615-18.904615 28.435692-43.874462 28.435692-74.830769 0-29.696-8.192-53.720615-24.497231-72.310154-16.384-18.510769-40.644923-29.696-72.940307-33.634461-19.140923-2.205538-74.279385-3.308308-165.415385-3.308308h-111.064615z m0 381.243077v256.315077h179.2c69.710769 0 113.979077-1.969231 132.726154-5.907692 28.750769-5.198769 52.145231-17.959385 70.262154-38.281847 18.116923-20.243692 27.096615-47.340308 27.096615-81.368615 0-28.750769-6.931692-53.169231-20.873846-73.255385a118.232615 118.232615 0 0 0-60.494769-43.795692c-26.387692-9.137231-83.574154-13.705846-171.638154-13.705846H291.603692z\"  ></path></symbol><symbol id=\"icon-a\" viewBox=\"0 0 1024 1024\"><path d=\"M757.76 665.6q0 20.48 1.536 34.304t7.68 22.016 18.944 12.288 34.304 4.096q-3.072 25.6-15.36 44.032-11.264 16.384-33.28 29.696t-62.976 13.312q-11.264 0-20.48-0.512t-17.408-2.56l-6.144-2.048-1.024 0q-4.096-1.024-10.24-4.096-2.048-2.048-4.096-2.048-1.024-1.024-2.048-1.024-14.336-8.192-23.552-17.408t-14.336-17.408q-6.144-10.24-9.216-20.48-63.488 75.776-178.176 75.776-48.128 0-88.064-15.36t-69.12-44.032-45.056-68.096-15.872-88.576 16.896-89.088 47.616-67.584 74.24-42.496 96.768-14.848q48.128 0 88.576 17.408t66.048 49.152q0-8.192 0.512-16.384t0.512-15.36q0-71.68-39.936-104.448t-128-32.768q-43.008 0-84.992 6.656t-84.992 17.92q14.336-28.672 25.088-47.616t24.064-29.184q30.72-24.576 158.72-24.576 79.872 0 135.168 13.824t90.624 43.52 51.2 75.264 15.872 108.032l0 200.704zM487.424 743.424q50.176 0 79.872-33.28t29.696-95.744q0-61.44-28.672-93.696t-76.8-32.256q-52.224 0-82.944 33.28t-30.72 94.72q0 58.368 31.744 92.672t77.824 34.304z\"  ></path></symbol><symbol id=\"icon-full\" viewBox=\"0 0 1024 1024\"><path d=\"M639.328 416c8.032 0 16.096-3.008 22.304-9.056l202.624-197.184-0.8 143.808c-0.096 17.696 14.144 32.096 31.808 32.192 0.064 0 0.128 0 0.192 0 17.6 0 31.904-14.208 32-31.808l1.248-222.208c0-0.672-0.352-1.248-0.384-1.92 0.032-0.512 0.288-0.896 0.288-1.408 0.032-17.664-14.272-32-31.968-32.032L671.552 96l-0.032 0c-17.664 0-31.968 14.304-32 31.968C639.488 145.632 653.824 160 671.488 160l151.872 0.224-206.368 200.8c-12.672 12.32-12.928 32.608-0.64 45.248C622.656 412.736 630.976 416 639.328 416z\"  ></path><path d=\"M896.032 639.552 896.032 639.552c-17.696 0-32 14.304-32.032 31.968l-0.224 151.872-200.832-206.4c-12.32-12.64-32.576-12.96-45.248-0.64-12.672 12.352-12.928 32.608-0.64 45.248l197.184 202.624-143.808-0.8c-0.064 0-0.128 0-0.192 0-17.6 0-31.904 14.208-32 31.808-0.096 17.696 14.144 32.096 31.808 32.192l222.24 1.248c0.064 0 0.128 0 0.192 0 0.64 0 1.12-0.32 1.76-0.352 0.512 0.032 0.896 0.288 1.408 0.288l0.032 0c17.664 0 31.968-14.304 32-31.968L928 671.584C928.032 653.952 913.728 639.584 896.032 639.552z\"  ></path><path d=\"M209.76 159.744l143.808 0.8c0.064 0 0.128 0 0.192 0 17.6 0 31.904-14.208 32-31.808 0.096-17.696-14.144-32.096-31.808-32.192L131.68 95.328c-0.064 0-0.128 0-0.192 0-0.672 0-1.248 0.352-1.888 0.384-0.448 0-0.8-0.256-1.248-0.256 0 0-0.032 0-0.032 0-17.664 0-31.968 14.304-32 31.968L96 352.448c-0.032 17.664 14.272 32 31.968 32.032 0 0 0.032 0 0.032 0 17.664 0 31.968-14.304 32-31.968l0.224-151.936 200.832 206.4c6.272 6.464 14.624 9.696 22.944 9.696 8.032 0 16.096-3.008 22.304-9.056 12.672-12.32 12.96-32.608 0.64-45.248L209.76 159.744z\"  ></path><path d=\"M362.368 617.056l-202.624 197.184 0.8-143.808c0.096-17.696-14.144-32.096-31.808-32.192-0.064 0-0.128 0-0.192 0-17.6 0-31.904 14.208-32 31.808l-1.248 222.24c0 0.704 0.352 1.312 0.384 2.016 0 0.448-0.256 0.832-0.256 1.312-0.032 17.664 14.272 32 31.968 32.032L352.448 928c0 0 0.032 0 0.032 0 17.664 0 31.968-14.304 32-31.968s-14.272-32-31.968-32.032l-151.936-0.224 206.4-200.832c12.672-12.352 12.96-32.608 0.64-45.248S375.008 604.704 362.368 617.056z\"  ></path></symbol><symbol id=\"icon-add\" viewBox=\"0 0 1024 1024\"><path d=\"M863.328 482.56l-317.344-1.12L545.984 162.816c0-17.664-14.336-32-32-32s-32 14.336-32 32l0 318.4L159.616 480.064c-0.032 0-0.064 0-0.096 0-17.632 0-31.936 14.24-32 31.904C127.424 529.632 141.728 544 159.392 544.064l322.592 1.152 0 319.168c0 17.696 14.336 32 32 32s32-14.304 32-32l0-318.944 317.088 1.12c0.064 0 0.096 0 0.128 0 17.632 0 31.936-14.24 32-31.904C895.264 496.992 880.96 482.624 863.328 482.56z\"  ></path></symbol><symbol id=\"icon-move\" viewBox=\"0 0 1024 1024\"><path d=\"M863.744 544 163.424 544c-17.664 0-32-14.336-32-32s14.336-32 32-32l700.32 0c17.696 0 32 14.336 32 32S881.44 544 863.744 544z\"  ></path></symbol><symbol id=\"icon-living\" viewBox=\"0 0 1024 1024\"><path d=\"M514.133333 488.533333m-106.666666 0a106.666667 106.666667 0 1 0 213.333333 0 106.666667 106.666667 0 1 0-213.333333 0Z\" fill=\"#666666\" ></path><path d=\"M512 64C264.533333 64 64 264.533333 64 512c0 236.8 183.466667 428.8 416 445.866667v-134.4c-53.333333-59.733333-200.533333-230.4-200.533333-334.933334 0-130.133333 104.533333-234.666667 234.666666-234.666666s234.666667 104.533333 234.666667 234.666666c0 61.866667-49.066667 153.6-145.066667 270.933334l-59.733333 68.266666V960C776.533333 942.933333 960 748.8 960 512c0-247.466667-200.533333-448-448-448z\" fill=\"#666666\" ></path></symbol></svg>',l=(l=document.getElementsByTagName(\"script\"))[l.length-1].getAttribute(\"data-injectcss\");if(l&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(e){console}}function c(){a||(a=!0,i())}t=function(){var e,t,n,i;(i=document.createElement(\"div\")).innerHTML=r,r=null,(n=i.getElementsByTagName(\"svg\")[0])&&(n.setAttribute(\"aria-hidden\",\"true\"),n.style.position=\"absolute\",n.style.width=0,n.style.height=0,n.style.overflow=\"hidden\",e=n,(t=document.body).firstChild?(i=e,(n=t.firstChild).parentNode.insertBefore(i,n)):t.appendChild(e))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(t,0):(n=function(){document.removeEventListener(\"DOMContentLoaded\",n,!1),t()},document.addEventListener(\"DOMContentLoaded\",n,!1)):document.attachEvent&&(i=t,o=e.document,a=!1,(s=function(){try{o.documentElement.doScroll(\"left\")}catch(e){return void setTimeout(s,50)}c()})(),o.onreadystatechange=function(){\"complete\"==o.readyState&&(o.onreadystatechange=null,c())})}(window)},848:e=>{\"use strict\";e.exports=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdD0iMTY1NjY1NDcxNzI0MiIgY2xhc3M9Imljb24iIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIKICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+CiAgICA8cGF0aCBkPSJNNTEyIDc0LjY2NjY2N0MyNzAuOTMzMzMzIDc0LjY2NjY2NyA3NC42NjY2NjcgMjcwLjkzMzMzMyA3NC42NjY2NjcgNTEyUzI3MC45MzMzMzMgOTQ5LjMzMzMzMyA1MTIgOTQ5LjMzMzMzMyA5NDkuMzMzMzMzIDc1My4wNjY2NjcgOTQ5LjMzMzMzMyA1MTIgNzUzLjA2NjY2NyA3NC42NjY2NjcgNTEyIDc0LjY2NjY2N3oiIHN0cm9rZS13aWR0aD0iNTQiIHN0cm9rZT0nYmxhY2snIGZpbGw9J3doaXRlJyA+PC9wYXRoPgogICAgPHBhdGggZD0iTTY4Mi42NjY2NjcgNDgwaC0xMzguNjY2NjY3VjM0MS4zMzMzMzNjMC0xNy4wNjY2NjctMTQuOTMzMzMzLTMyLTMyLTMycy0zMiAxNC45MzMzMzMtMzIgMzJ2MTM4LjY2NjY2N0gzNDEuMzMzMzMzYy0xNy4wNjY2NjcgMC0zMiAxNC45MzMzMzMtMzIgMzJzMTQuOTMzMzMzIDMyIDMyIDMyaDEzOC42NjY2NjdWNjgyLjY2NjY2N2MwIDE3LjA2NjY2NyAxNC45MzMzMzMgMzIgMzIgMzJzMzItMTQuOTMzMzMzIDMyLTMydi0xMzguNjY2NjY3SDY4Mi42NjY2NjdjMTcuMDY2NjY3IDAgMzItMTQuOTMzMzMzIDMyLTMycy0xNC45MzMzMzMtMzItMzItMzJ6Ij48L3BhdGg+Cjwvc3ZnPg==\"},295:e=>{\"use strict\";e.exports=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdD0iMTY1NjY1NTU2NDk4NSIgY2xhc3M9Imljb24iIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIKICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+CiAgICA8cGF0aCBkPSJNNTEyIDc0LjY2NjY2N0MyNzAuOTMzMzMzIDc0LjY2NjY2NyA3NC42NjY2NjcgMjcwLjkzMzMzMyA3NC42NjY2NjcgNTEyUzI3MC45MzMzMzMgOTQ5LjMzMzMzMyA1MTIgOTQ5LjMzMzMzMyA5NDkuMzMzMzMzIDc1My4wNjY2NjcgOTQ5LjMzMzMzMyA1MTIgNzUzLjA2NjY2NyA3NC42NjY2NjcgNTEyIDc0LjY2NjY2N3oiIHN0cm9rZS13aWR0aD0iNTQiIHN0cm9rZT0nYmxhY2snIGZpbGw9J3doaXRlJyA+PC9wYXRoPgogICAgPHBhdGggZD0iTTY4Mi42NjY2NjcgNTQ0SDM0MS4zMzMzMzNjLTE3LjA2NjY2NyAwLTMyLTE0LjkzMzMzMy0zMi0zMnMxNC45MzMzMzMtMzIgMzItMzJoMzQxLjMzMzMzNGMxNy4wNjY2NjcgMCAzMiAxNC45MzMzMzMgMzIgMzJzLTE0LjkzMzMzMyAzMi0zMiAzMnoiPjwvcGF0aD4KPC9zdmc+\"}},t={};function n(i){var o=t[i];if(void 0!==o)return o.exports;var a=t[i]={id:i,exports:{}};return e[i](a,a.exports,n),a.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.b=document.baseURI||self.location.href;var i={};return(()=>{\"use strict\";n.d(i,{default:()=>be});function e(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/\"/g,\"&quot;\")}const t=e=>e.replace(/\\brgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/g,(function(e,t,n,i){return\"#\"+(\"0\"+Number(t).toString(16)).substr(-2)+(\"0\"+Number(n).toString(16)).substr(-2)+(\"0\"+Number(i).toString(16)).substr(-2)})),o=function(e,t){if((t=t||this.nodeData).id===e)return t;if(!t.children||!t.children.length)return null;for(let n=0;n<t.children.length;n++){const i=o(e,t.children[n]);if(i)return i}},a=(e,t)=>{if(e.parent=t,e.children)for(let t=0;t<e.children.length;t++)a(e.children[t],e)};function s(e){if(e.id=h(),e.children)for(let t=0;t<e.children.length;t++)s(e.children[t])}const r=(e,t)=>{var n=Date.now();return function(){var i=this,o=arguments,a=Date.now();a-n>=t&&(e.apply(i,o),n=Date.now())}};function l(e,t,n,i){const o=i-t,a=e-n;let s=Math.atan(Math.abs(o)/Math.abs(a))/3.14*180;a<0&&o>0&&(s=180-s),a<0&&o<0&&(s=180+s),a>0&&o<0&&(s=360-s);var r=s+30;const l=s-30;return{x1:n+20*Math.cos(Math.PI*r/180),y1:i-20*Math.sin(Math.PI*r/180),x2:n+20*Math.cos(Math.PI*l/180),y2:i-20*Math.sin(Math.PI*l/180)}}function c(e,t,n){let i,o;const a=(e.cy-n)/(t-e.cx);return a>e.h/e.w||a<-e.h/e.w?e.cy-n<0?(i=e.cx-e.h/2/a,o=e.cy+e.h/2):(i=e.cx+e.h/2/a,o=e.cy-e.h/2):e.cx-t<0?(i=e.cx+e.w/2,o=e.cy-e.w*a/2):(i=e.cx-e.w/2,o=e.cy+e.w*a/2),{x:i,y:o}}function d(e,t,n){let i,o;const a=(e.cy-n)/(t-e.cx);return a>e.h/e.w||a<-e.h/e.w?e.cy-n<0?(i=e.cx-e.h/2/a,o=e.cy+e.h/2):(i=e.cx+e.h/2/a,o=e.cy-e.h/2):e.cx-t<0?(i=e.cx+e.w/2,o=e.cy-e.w*a/2):(i=e.cx-e.w/2,o=e.cy+e.w*a/2),{x:i,y:o}}function h(){return((new Date).getTime().toString(16)+Math.random().toString(16).substr(2)).substr(2,16)}function p(e){const t=e.parent.children,n=t.indexOf(e);return t.splice(n,1),t.length}const u={afterMoving:!1,mousedown:!1,lastX:null,lastY:null,onMove(e,t){if(this.mousedown){if(this.afterMoving=!0,!this.lastX)return this.lastX=e.pageX,void(this.lastY=e.pageY);const n=this.lastX-e.pageX,i=this.lastY-e.pageY;t.scrollTo(t.scrollLeft+n,t.scrollTop+i),this.lastX=e.pageX,this.lastY=e.pageY}},clear(){this.afterMoving=!1,this.mousedown=!1,this.lastX=null,this.lastY=null}};function m(e){this.dom=e,this.mousedown=!1,this.lastX=null,this.lastY=null}m.prototype.init=function(e,t){this.handleMouseMove=e=>{if(e.stopPropagation(),this.mousedown){if(!this.lastX)return this.lastX=e.pageX,void(this.lastY=e.pageY);const n=this.lastX-e.pageX,i=this.lastY-e.pageY;t(n,i),this.lastX=e.pageX,this.lastY=e.pageY}},this.handleMouseDown=e=>{e.stopPropagation(),this.mousedown=!0},this.handleClear=e=>{e.stopPropagation(),this.clear()},e.addEventListener(\"mousemove\",this.handleMouseMove),e.addEventListener(\"mouseleave\",this.handleClear),e.addEventListener(\"mouseup\",this.handleClear),this.dom.addEventListener(\"mousedown\",this.handleMouseDown)},m.prototype.destory=function(e){e.removeEventListener(\"mousemove\",this.handleMouseMove),e.removeEventListener(\"mouseleave\",this.handleClear),e.removeEventListener(\"mouseup\",this.handleClear),this.dom.removeEventListener(\"mousedown\",this.handleMouseDown)},m.prototype.clear=function(){this.mousedown=!1,this.lastX=null,this.lastY=null};const f=document,g=(e,t)=>(t?t.mindElixirBox:f).querySelector(`[data-nodeid=me${e}]`),b=function(t,n){if(t.textContent=n.topic,n.style&&(t.style.color=n.style.color||\"inherit\",t.style.background=n.style.background||\"inherit\",t.style.fontSize=n.style.fontSize+\"px\",t.style.fontWeight=n.style.fontWeight||\"normal\"),n.hyperLink){const e=f.createElement(\"a\");e.className=\"hyper-link\",e.target=\"_blank\",e.innerText=\"🔗\",e.href=n.hyperLink,t.appendChild(e),t.linkContainer=e}else t.linkContainer&&(t.linkContainer.remove(),t.linkContainer=null);if(n.icons&&n.icons.length){const i=f.createElement(\"span\");i.className=\"icons\",i.innerHTML=n.icons.map((t=>`<span>${e(t)}</span>`)).join(\"\"),t.appendChild(i)}if(n.tags&&n.tags.length){const i=f.createElement(\"div\");i.className=\"tags\",i.innerHTML=n.tags.map((t=>`<span>${e(t)}</span>`)).join(\"\"),t.appendChild(i)}};const y=function(e){const t=f.createElement(\"epd\");return t.expanded=!1!==e,t.className=!1!==e?\"minus\":\"\",t};const x=document,N=\"http://www.w3.org/2000/svg\",v=function(e){const t=x.createElementNS(N,\"svg\");return t.setAttribute(\"class\",e),t},M=function(e,t,n,i){const o=x.createElementNS(N,\"line\");return o.setAttribute(\"x1\",e),o.setAttribute(\"y1\",t),o.setAttribute(\"x2\",n),o.setAttribute(\"y2\",i),o.setAttribute(\"stroke\",\"#bbb\"),o.setAttribute(\"fill\",\"none\"),o.setAttribute(\"stroke-width\",\"2\"),o},k=function(e){const t=x.createElementNS(N,\"path\");return t.setAttribute(\"d\",e),t.setAttribute(\"stroke\",\"#555\"),t.setAttribute(\"fill\",\"none\"),t.setAttribute(\"stroke-linecap\",\"square\"),t.setAttribute(\"stroke-width\",\"1\"),t};function C(e){return e.isFocusMode?e.nodeDataBackup:e.nodeData}const z=document,w=function(e,t){if(!e)return;const n=e.nodeObj;!1===n.expanded&&(this.expandNode(e,!0),e=g(n.id));const i=t||this.generateNewObj();n.children?n.children.push(i):n.children=[i],a(this.nodeData);const o=e.parentElement,{grp:s,top:r}=this.createGroup(i);if(\"T\"===o.tagName){if(o.children[1])o.nextSibling.appendChild(s);else{const e=z.createElement(\"children\");e.appendChild(s),o.appendChild(y(!0)),o.insertAdjacentElement(\"afterend\",e)}this.linkDiv(s.offsetParent)}else\"ROOT\"===o.tagName&&(this.judgeDirection(s,i),o.nextSibling.appendChild(s),this.linkDiv());return{newTop:r,newNodeObj:i}};function j(e,t,n){let i=\"\";const o=t.offsetTop,a=t.offsetLeft,s=t.offsetWidth,r=t.offsetHeight;for(let t=0;t<e.length;t++){const l=e[t],c=l.children[0],d=c.offsetTop,h=c.offsetHeight;let p;p=n?o+r/2:o+r;const u=d+h;let m,f,g;const b=l.offsetParent.className;\"lhs\"===b?(m=a+15,g=a,f=a-c.offsetWidth+15):\"rhs\"===b&&(m=a+s-15,g=a+s,f=a+s+c.offsetWidth-15),i+=S({x1:m,y1:p,x2:f,y2:u,xMiddle:g});const y=c.children[1];if(!y)continue;if(y.style.top=(c.offsetHeight-y.offsetHeight)/2+\"px\",\"lhs\"===b?y.style.left=\"-10px\":\"rhs\"===b&&(y.style.left=c.offsetWidth-10+\"px\"),!y.expanded)continue;const x=l.children[1].children;x.length>0&&(i+=j(x,c))}return i}function L({x1:e,y1:t,x2:n,y2:i}){return`M ${e} 10000 V ${i>t?i-20:i+20} C ${e} ${i} ${e} ${i} ${n>e?e+20:e-20} ${i} H ${n}`}function E({x1:e,y1:t,x2:n,y2:i}){return`M ${e} ${t} Q ${e} ${i} ${n} ${i}`}function S({x1:e,y1:t,x2:n,y2:i,xMiddle:o}){return i<t+50&&i>t-50?`M ${e} ${t} H ${o} V ${i} H ${n}`:i>=t?`M ${e} ${t} H ${o} V ${i-8} A 8 8 0 0 ${e>n?1:0} ${e>n?o-8:o+8} ${i} H ${n}`:`M ${e} ${t} H ${o} V ${i+8} A 8 8 0 0 ${e>n?0:1} ${e>n?o-8:o+8} ${i} H ${n}`}const D={addChild:\"插入子节点\",addParent:\"插入父节点\",addSibling:\"插入同级节点\",removeNode:\"删除节点\",focus:\"专注\",cancelFocus:\"取消专注\",moveUp:\"上移\",moveDown:\"下移\",link:\"连接\",clickTips:\"请点击目标节点\",font:\"文字\",background:\"背景\",tag:\"标签\",icon:\"图标\",tagsSeparate:\"多个标签半角逗号分隔\",iconsSeparate:\"多个图标半角逗号分隔\",url:\"URL\"},T={cn:D,zh_CN:D,zh_TW:{addChild:\"插入子節點\",addParent:\"插入父節點\",addSibling:\"插入同級節點\",removeNode:\"刪除節點\",focus:\"專注\",cancelFocus:\"取消專注\",moveUp:\"上移\",moveDown:\"下移\",link:\"連接\",clickTips:\"請點擊目標節點\",font:\"文字\",background:\"背景\",tag:\"標簽\",icon:\"圖標\",tagsSeparate:\"多個標簽半角逗號分隔\",iconsSeparate:\"多個圖標半角逗號分隔\",url:\"URL\"},en:{addChild:\"Add child\",addParent:\"Add parent\",addSibling:\"Add sibling\",removeNode:\"Remove node\",focus:\"Focus Mode\",cancelFocus:\"Cancel Focus Mode\",moveUp:\"Move up\",moveDown:\"Move down\",link:\"Link\",clickTips:\"Please click the target node\",font:\"Font\",background:\"Background\",tag:\"Tag\",icon:\"Icon\",tagsSeparate:\"Separate tags by comma\",iconsSeparate:\"Separate icons by comma\",url:\"URL\"},ru:{addChild:\"Добавить дочерний элемент\",addParent:\"Добавить родительский элемент\",addSibling:\"Добавить на этом уровне\",removeNode:\"Удалить узел\",focus:\"Режим фокусировки\",cancelFocus:\"Отменить режим фокусировки\",moveUp:\"Поднять выше\",moveDown:\"Опустить ниже\",link:\"Ссылка\",clickTips:\"Пожалуйста, нажмите на целевой узел\",font:\"Цвет шрифта\",background:\"Цвет фона\",tag:\"Тег\",icon:\"Иконка\",tagsSeparate:\"Разделяйте теги запятой\",iconsSeparate:\"Разделяйте иконки запятой\"},ja:{addChild:\"子ノードを追加する\",addParent:\"親ノードを追加します\",addSibling:\"兄弟ノードを追加する\",removeNode:\"ノードを削除\",focus:\"集中\",cancelFocus:\"集中解除\",moveUp:\"上へ移動\",moveDown:\"下へ移動\",link:\"コネクト\",clickTips:\"ターゲットノードをクリックしてください\",font:\"フォント\",background:\"バックグラウンド\",tag:\"タグ\",icon:\"アイコン\",tagsSeparate:\"複数タグはカンマ区切り\",iconsSeparate:\"複数アイコンはカンマ区切り\",url:\"URL\"},pt:{addChild:\"Adicionar item filho\",addParent:\"Adicionar item pai\",addSibling:\"Adicionar item irmao\",removeNode:\"Remover item\",focus:\"Modo Foco\",cancelFocus:\"Cancelar Modo Foco\",moveUp:\"Mover para cima\",moveDown:\"Mover para baixo\",link:\"Link\",clickTips:\"Favor clicar no item alvo\",font:\"Fonte\",background:\"Cor de fundo\",tag:\"Tag\",icon:\"Icone\",tagsSeparate:\"Separe tags por virgula\",iconsSeparate:\"Separe icones por virgula\",url:\"URL\"}};var A=n(379),I=n.n(A),O=n(795),P=n.n(O),$=n(569),H=n.n($),Y=n(565),B=n.n(Y),R=n(216),Z=n.n(R),V=n(589),F=n.n(V),W=n(165),q={};q.styleTagTransform=F(),q.setAttributes=B(),q.insert=H().bind(null,\"head\"),q.domAPI=P(),q.insertStyleElement=Z();I()(W.Z,q);W.Z&&W.Z.locals&&W.Z.locals;function U(t,n){const i=(t,n,i)=>{const o=document.createElement(\"li\");return o.id=t,o.innerHTML=`<span>${e(n)}</span><span>${e(i)}</span>`,o},o=T[t.locale]?t.locale:\"en\",a=i(\"cm-add_child\",T[o].addChild,\"tab\"),s=i(\"cm-add_parent\",T[o].addParent,\"\"),r=i(\"cm-add_sibling\",T[o].addSibling,\"enter\"),l=i(\"cm-remove_child\",T[o].removeNode,\"delete\"),c=i(\"cm-fucus\",T[o].focus,\"\"),d=i(\"cm-unfucus\",T[o].cancelFocus,\"\"),h=i(\"cm-up\",T[o].moveUp,\"PgUp\"),p=i(\"cm-down\",T[o].moveDown,\"Pgdn\"),u=i(\"cm-down\",T[o].link,\"\"),m=document.createElement(\"ul\");if(m.className=\"menu-list\",m.appendChild(a),m.appendChild(s),m.appendChild(r),m.appendChild(l),n&&!n.focus||(m.appendChild(c),m.appendChild(d)),m.appendChild(h),m.appendChild(p),n&&!n.link||m.appendChild(u),n&&n.extend)for(let e=0;e<n.extend.length;e++){const t=n.extend[e],o=i(t.name,t.name,t.key||\"\");m.appendChild(o),o.onclick=e=>{t.onclick(e)}}const f=document.createElement(\"cmenu\");f.appendChild(m),f.hidden=!0,t.container.append(f);let g=!0;t.container.oncontextmenu=function(e){if(e.preventDefault(),!t.editable)return;const n=e.target;if(\"TPC\"===n.tagName){g=\"ROOT\"===n.parentElement.tagName,g?(c.className=\"disabled\",h.className=\"disabled\",p.className=\"disabled\",r.className=\"disabled\",l.className=\"disabled\"):(c.className=\"\",h.className=\"\",p.className=\"\",r.className=\"\",l.className=\"\"),t.selectNode(n),f.hidden=!1;const i=m.offsetHeight,o=m.offsetWidth;i+e.clientY>window.innerHeight?(m.style.top=\"\",m.style.bottom=\"0px\"):(m.style.bottom=\"\",m.style.top=e.clientY+15+\"px\"),o+e.clientX>window.innerWidth?(m.style.left=\"\",m.style.right=\"0px\"):(m.style.right=\"\",m.style.left=e.clientX+10+\"px\")}},f.onclick=e=>{e.target===f&&(f.hidden=!0)},a.onclick=e=>{t.addChild(),f.hidden=!0},s.onclick=e=>{t.insertParent(),f.hidden=!0},r.onclick=e=>{g||(t.insertSibling(),f.hidden=!0)},l.onclick=e=>{g||(t.removeNode(),f.hidden=!0)},c.onclick=e=>{g||(t.focusNode(t.currentNode),f.hidden=!0)},d.onclick=e=>{t.cancelFocus(),f.hidden=!0},h.onclick=e=>{g||(t.moveUpNode(),f.hidden=!0)},p.onclick=e=>{g||(t.moveDownNode(),f.hidden=!0)},u.onclick=e=>{f.hidden=!0;const n=t.currentNode,i=(e=>{const t=document.createElement(\"div\");return t.innerText=e,t.style.cssText=\"position:absolute;bottom:20px;left:50%;transform:translateX(-50%);\",t})(T[o].clickTips);t.container.appendChild(i),t.map.addEventListener(\"click\",(e=>{e.preventDefault(),i.remove(),\"T\"!==e.target.parentElement.nodeName&&\"ROOT\"!==e.target.parentElement.nodeName||t.createLink(n,t.currentNode)}),{once:!0})}}var G=n(301),X={};X.styleTagTransform=F(),X.setAttributes=B(),X.insert=H().bind(null,\"head\"),X.domAPI=P(),X.insertStyleElement=Z();I()(G.Z,X);G.Z&&G.Z.locals&&G.Z.locals;const _=(e,t)=>{const n=document.createElement(\"span\");return n.id=e,n.innerHTML=`<svg class=\"icon\" aria-hidden=\"true\">\\n    <use xlink:href=\"#icon-${t}\"></use>\\n  </svg>`,n};function J(e){e.container.append(function(e){const t=document.createElement(\"toolbar\"),n=_(\"fullscreen\",\"full\"),i=_(\"toCenter\",\"living\"),o=_(\"zoomout\",\"move\"),a=_(\"zoomin\",\"add\");return document.createElement(\"span\").innerText=\"100%\",t.appendChild(n),t.appendChild(i),t.appendChild(o),t.appendChild(a),t.className=\"rb\",n.onclick=()=>{e.container.requestFullscreen()},i.onclick=()=>{e.toCenter()},o.onclick=()=>{e.scaleVal<.6||e.scale(e.scaleVal-=.2)},a.onclick=()=>{e.scaleVal>1.6||e.scale(e.scaleVal+=.2)},t}(e)),e.container.append(function(e){const t=document.createElement(\"toolbar\"),n=_(\"tbltl\",\"left\"),i=_(\"tbltr\",\"right\"),o=_(\"tblts\",\"side\");return t.appendChild(n),t.appendChild(i),t.appendChild(o),t.className=\"lt\",n.onclick=()=>{e.initLeft()},i.onclick=()=>{e.initRight()},o.onclick=()=>{e.initSide()},t}(e))}var Q=n(519),K={};K.styleTagTransform=F(),K.setAttributes=B(),K.insert=H().bind(null,\"head\"),K.domAPI=P(),K.insertStyleElement=Z();I()(Q.Z,K);Q.Z&&Q.Z.locals&&Q.Z.locals;const ee=(e,t)=>{const n=document.createElement(\"div\");return n.id=e,n.innerHTML=t,n},te=[\"#2c3e50\",\"#34495e\",\"#7f8c8d\",\"#94a5a6\",\"#bdc3c7\",\"#ecf0f1\",\"#8e44ad\",\"#9b59b6\",\"#2980b9\",\"#3298db\",\"#c0392c\",\"#e74c3c\",\"#d35400\",\"#f39c11\",\"#f1c40e\",\"#17a085\",\"#27ae61\",\"#2ecc71\"];var ne=function(e,t,n,i){return new(n||(n=Promise))((function(o,a){function s(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}l((i=i.apply(e,t||[])).next())}))};const ie=document,oe=function(e){if(!e)return;const t=e.getElementsByClassName(\"insert-preview\");for(const e of t||[])e.remove()},ae=function(e,t){const n=t.parentNode.parentNode.contains(e);return e&&\"TPC\"===e.tagName&&e!==t&&!n&&!0!==e.nodeObj.root};function se(e){let t,n,i;e.map.addEventListener(\"dragstart\",(function(e){t=e.target,t.parentNode.parentNode.style.opacity=\"0.5\",u.clear()})),e.map.addEventListener(\"dragend\",(function(o){return ne(this,void 0,void 0,(function*(){o.target.style.opacity=\"\",oe(i);const a=t.nodeObj;switch(n){case\"before\":e.moveNodeBefore(t,i),e.selectNode(g(a.id));break;case\"after\":e.moveNodeAfter(t,i),e.selectNode(g(a.id));break;case\"in\":e.moveNode(t,i)}t.parentNode.parentNode.style.opacity=\"1\",t=null}))})),e.map.addEventListener(\"dragover\",r((function(e){oe(i);const o=ie.elementFromPoint(e.clientX,e.clientY-12);if(ae(o,t)){i=o;const t=o.getBoundingClientRect().y;e.clientY>t+o.clientHeight?n=\"after\":e.clientY>t+o.clientHeight/2&&(n=\"in\")}else{const o=ie.elementFromPoint(e.clientX,e.clientY+12);if(ae(o,t)){i=o;const t=o.getBoundingClientRect().y;e.clientY<t?n=\"before\":e.clientY<t+o.clientHeight/2&&(n=\"in\")}else n=i=null}i&&function(e,t){if(!t)return oe(e),e;const n=e.getElementsByClassName(\"insert-preview\"),i=`insert-preview ${t} show`;if(n.length>0)n[0].className=i;else{const t=ie.createElement(\"div\");t.className=i,e.appendChild(t)}}(i,n)}),200))}var re=n(787),le={};le.styleTagTransform=F(),le.setAttributes=B(),le.insert=H().bind(null,\"head\"),le.domAPI=P(),le.insertStyleElement=Z();I()(re.Z,le);re.Z&&re.Z.locals&&re.Z.locals;function ce(){this.handlers={}}ce.prototype={showHandler:function(){},addListener:function(e,t){void 0===this.handlers[e]&&(this.handlers[e]=[]),this.handlers[e].push(t)},fire:function(e,...t){if(this.handlers[e]instanceof Array)for(var n=this.handlers[e],i=0;i<n.length;i++)n[i](...t)},removeListener:function(e,t){if(this.handlers[e]){var n=this.handlers[e];if(t){if(n.length)for(var i=0;i<n.length;i++)n[i]===t&&this.handlers[e].splice(i,1)}else n.length=0}}};var de=n(74),he={};he.styleTagTransform=F(),he.setAttributes=B(),he.insert=H().bind(null,\"head\"),he.domAPI=P(),he.insertStyleElement=Z();I()(de.Z,he);de.Z&&de.Z.locals&&de.Z.locals;n(857);var pe=function(e,t,n,i){return new(n||(n=Promise))((function(o,a){function s(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}l((i=i.apply(e,t||[])).next())}))};const ue=g,me=document;function fe({el:e,direction:t,locale:n,draggable:i,editable:o,contextMenu:a,contextMenuOption:s,toolBar:r,nodeMenu:l,keypress:c,before:d,newTopicName:h,allowUndo:p,primaryLinkStyle:m,overflowHidden:f,primaryNodeHorizontalGap:g,primaryNodeVerticalGap:b,mobileMenu:y}){let x;const N=Object.prototype.toString.call(e);if(\"[object HTMLDivElement]\"===N?x=e:\"[object String]\"===N&&(x=document.querySelector(e)),!x)return new Error(\"MindElixir: el is not a valid element\");var k;this.mindElixirBox=x,this.before=d||{},this.locale=n,this.contextMenuOption=s,this.contextMenu=void 0===a||a,this.toolBar=void 0===r||r,this.nodeMenu=void 0===l||l,this.keypress=void 0===c||c,this.mobileMenu=y,this.direction=\"number\"==typeof t?t:1,this.draggable=void 0===i||i,this.newTopicName=h,this.editable=void 0===o||o,this.allowUndo=void 0===p||p,this.currentNode=null,this.currentLink=null,this.inputDiv=null,this.scaleVal=1,this.tempDirection=null,this.primaryLinkStyle=m||0,this.overflowHidden=f,this.primaryNodeHorizontalGap=g,this.primaryNodeVerticalGap=b,this.bus=new ce,this.bus.addListener(\"operation\",(e=>{this.isUndo?this.isUndo=!1:[\"moveNode\",\"removeNode\",\"addChild\",\"finishEdit\",\"editStyle\",\"editTags\",\"editIcons\"].includes(e.name)&&this.history.push(e)})),this.history=[],this.isUndo=!1,this.undo=function(){const e=this.history.pop();e&&(this.isUndo=!0,\"moveNode\"===e.name?this.moveNode(ue(e.obj.fromObj.id),ue(e.obj.originParentId)):\"removeNode\"===e.name?e.originSiblingId?this.insertBefore(ue(e.originSiblingId),e.obj):this.addChild(ue(e.originParentId),e.obj):\"addChild\"===e.name||\"copyNode\"===e.name?this.removeNode(ue(e.obj.id)):\"finishEdit\"===e.name?this.setNodeTopic(ue(e.obj.id),e.origin):this.isUndo=!1)},this.mindElixirBox.className+=\" mind-elixir\",this.mindElixirBox.innerHTML=\"\",this.container=me.createElement(\"div\"),this.container.className=\"map-container\",this.map=me.createElement(\"div\"),this.map.className=\"map-canvas\",this.map.setAttribute(\"tabindex\",\"0\"),this.container.appendChild(this.map),this.mindElixirBox.appendChild(this.container),this.root=me.createElement(\"root\"),this.box=me.createElement(\"children\"),this.box.className=\"box\",this.lines=v(\"lines\"),this.linkController=v(\"linkcontroller\"),this.P2=me.createElement(\"div\"),this.P3=me.createElement(\"div\"),this.P2.className=this.P3.className=\"circle\",this.line1=M(0,0,0,0),this.line2=M(0,0,0,0),this.linkController.appendChild(this.line1),this.linkController.appendChild(this.line2),this.linkSvgGroup=v(\"topiclinks\"),this.map.appendChild(this.root),this.map.appendChild(this.box),this.map.appendChild(this.lines),this.map.appendChild(this.linkController),this.map.appendChild(this.linkSvgGroup),this.map.appendChild(this.P2),this.map.appendChild(this.P3),this.overflowHidden?this.container.style.overflow=\"hidden\":((k=this).map.addEventListener(\"click\",(e=>{\"EPD\"===e.target.nodeName?k.expandNode(e.target.previousSibling):\"T\"===e.target.parentElement.nodeName||\"ROOT\"===e.target.parentElement.nodeName?k.selectNode(e.target,!1,e):\"path\"===e.target.nodeName?\"g\"===e.target.parentElement.nodeName&&k.selectLink(e.target.parentElement):\"circle\"===e.target.className||(k.unselectNode(),k.hideLinkController&&k.hideLinkController())})),k.map.addEventListener(\"dblclick\",(e=>{e.preventDefault(),k.editable&&(\"T\"!==e.target.parentElement.nodeName&&\"ROOT\"!==e.target.parentElement.nodeName||k.beginEdit(e.target))})),k.map.addEventListener(\"mousemove\",(e=>{\"true\"!==e.target.contentEditable&&u.onMove(e,k.container)})),k.map.addEventListener(\"mousedown\",(e=>{\"true\"!==e.target.contentEditable&&(u.afterMoving=!1,u.mousedown=!0)})),k.map.addEventListener(\"mouseleave\",(e=>{u.clear()})),k.map.addEventListener(\"mouseup\",(e=>{u.clear()})))}function ge(e,t){return function(...n){return pe(this,void 0,void 0,(function*(){this.before[t]&&!(yield this.before[t].apply(this,n))||e.apply(this,n)}))}}fe.prototype={addParentLink:a,getObjById:o,generateNewObj:function(){const e=h();return{topic:this.newTopicName||\"new node\",id:e}},insertSibling:ge((function(e,t){const n=e||this.currentNode;if(!n)return;const i=n.nodeObj;if(!0===i.root)return void this.addChild();const o=t||this.generateNewObj();!function(e,t){const n=e.parent.children,i=n.indexOf(e);n.splice(i+1,0,t)}(i,o),a(this.nodeData);const s=n.parentElement,{grp:r,top:l}=this.createGroup(o),c=s.parentNode.parentNode;c.insertBefore(r,s.parentNode.nextSibling),\"box\"===c.className?(this.judgeDirection(r,o),this.linkDiv()):this.linkDiv(r.offsetParent),t||this.createInputDiv(l.children[0]),this.selectNode(l.children[0],!0),this.bus.fire(\"operation\",{name:\"insertSibling\",obj:o})}),\"insertSibling\"),insertBefore:ge((function(e,t){const n=e||this.currentNode;if(!n)return;const i=n.nodeObj;if(!0===i.root)return void this.addChild();const o=t||this.generateNewObj();!function(e,t){const n=e.parent.children,i=n.indexOf(e);n.splice(i,0,t)}(i,o),a(this.nodeData);const s=n.parentElement,{grp:r,top:l}=this.createGroup(o),c=s.parentNode.parentNode;c.insertBefore(r,s.parentNode),\"box\"===c.className?(this.judgeDirection(r,o),this.linkDiv()):this.linkDiv(r.offsetParent),t||this.createInputDiv(l.children[0]),this.selectNode(l.children[0],!0),this.bus.fire(\"operation\",{name:\"insertSibling\",obj:o})}),\"insertBefore\"),insertParent:ge((function(e,t){const n=e||this.currentNode;if(!n)return;const i=n.nodeObj;if(!0===i.root)return;const o=t||this.generateNewObj();!function(e,t){const n=e.parent.children,i=n.indexOf(e);n[i]=t,t.children=[e]}(i,o),a(this.nodeData);const s=n.parentElement.parentElement,{grp:r,top:l}=this.createGroup(o,!0);l.appendChild(y(!0));const c=s.parentNode;s.insertAdjacentElement(\"afterend\",r);const d=z.createElement(\"children\");d.appendChild(s),l.insertAdjacentElement(\"afterend\",d),\"box\"===c.className?(r.className=s.className,s.className=\"\",s.querySelector(\".subLines\").remove(),this.linkDiv()):this.linkDiv(r.offsetParent),t||this.createInputDiv(l.children[0]),this.selectNode(l.children[0],!0),this.bus.fire(\"operation\",{name:\"insertParent\",obj:o})}),\"insertParent\"),addChild:ge((function(e,t){const n=e||this.currentNode;if(!n)return;const{newTop:i,newNodeObj:o}=w.call(this,n,t);this.bus.fire(\"operation\",{name:\"addChild\",obj:o}),t||this.createInputDiv(i.children[0]),this.selectNode(i.children[0],!0)}),\"addChild\"),copyNode:ge((function(e,t){const n=JSON.parse(JSON.stringify(e.nodeObj,((e,t)=>{if(\"parent\"!==e)return t})));s(n);const{newNodeObj:i}=w.call(this,t,n);this.bus.fire(\"operation\",{name:\"copyNode\",obj:i})}),\"copyNode\"),moveNode:ge((function(e,t){const n=e.nodeObj,i=t.nodeObj,o=n.parent.id;if(!1===i.expanded&&(this.expandNode(t,!0),e=g(n.id),t=g(i.id)),!function(e,t){let n=!0;for(;t.parent;){if(t.parent===e){n=!1;break}t=t.parent}return n}(n,i))return;!function(e,t){p(e),t.children?t.children.push(e):t.children=[e]}(n,i),a(this.nodeData);const s=e.parentElement,r=s.parentNode.parentNode,l=t.parentElement;if(\"box\"===r.className?s.parentNode.lastChild.remove():\"box\"===s.parentNode.className&&(s.style.cssText=\"\"),\"T\"===l.tagName)if(\"box\"===r.className&&(s.parentNode.className=\"\"),l.children[1])l.nextSibling.appendChild(s.parentNode);else{const e=z.createElement(\"children\");e.appendChild(s.parentNode),l.appendChild(y(!0)),l.parentElement.insertBefore(e,l.nextSibling)}else\"ROOT\"===l.tagName&&(this.judgeDirection(s.parentNode,n),l.nextSibling.appendChild(s.parentNode));this.linkDiv(),this.bus.fire(\"operation\",{name:\"moveNode\",obj:{fromObj:n,toObj:i,originParentId:o}})}),\"moveNode\"),removeNode:ge((function(e){const t=e||this.currentNode;if(!t)return;const n=t.nodeObj;if(!0===n.root)throw new Error(\"Can not remove root node\");const i=n.parent.children.findIndex((e=>e===n)),o=n.parent.children[i+1],a=o&&o.id,s=p(n),r=t.parentNode;if(\"ROOT\"!==r.tagName){if(0===s){const e=r.parentNode.parentNode.previousSibling;\"ROOT\"!==e.tagName&&e.children[1].remove(),this.selectParent()}else{this.selectPrevSibling()||this.selectNextSibling()}for(const e in this.linkData){const t=this.linkData[e];t.from!==r.firstChild&&t.to!==r.firstChild||this.removeLink(this.mindElixirBox.querySelector(`[data-linkid=${this.linkData[e].id}]`))}r.parentNode.remove(),this.linkDiv(),this.bus.fire(\"operation\",{name:\"removeNode\",obj:n,originSiblingId:a,originParentId:n.parent.id})}}),\"removeNode\"),moveUpNode:ge((function(e){const t=e||this.currentNode;if(!t)return;const n=t.parentNode.parentNode,i=t.nodeObj;!function(e){const t=e.parent.children,n=t.indexOf(e),i=t[n];0===n?(t[n]=t[t.length-1],t[t.length-1]=i):(t[n]=t[n-1],t[n-1]=i)}(i),n.parentNode.insertBefore(n,n.previousSibling),this.linkDiv(),this.bus.fire(\"operation\",{name:\"moveUpNode\",obj:i})}),\"moveUpNode\"),moveDownNode:ge((function(e){const t=e||this.currentNode;if(!t)return;const n=t.parentNode.parentNode,i=t.nodeObj;!function(e){const t=e.parent.children,n=t.indexOf(e),i=t[n];n===t.length-1?(t[n]=t[0],t[0]=i):(t[n]=t[n+1],t[n+1]=i)}(i),n.nextSibling?n.insertAdjacentElement(\"afterend\",n.nextSibling):n.parentNode.prepend(n),this.linkDiv(),this.bus.fire(\"operation\",{name:\"moveDownNode\",obj:i})}),\"moveDownNode\"),beginEdit:ge((function(e){const t=e||this.currentNode;t&&this.createInputDiv(t)}),\"beginEdit\"),moveNodeBefore:ge((function(e,t){const n=e.nodeObj,i=t.nodeObj,o=n.parent.id;!function(e,t){p(e);const n=t.parent.children;let i=0;for(let e=0;e<n.length;e++)if(n[e]===t){i=e;break}n.splice(i,0,e)}(n,i),a(this.nodeData);const s=e.parentElement.parentNode,r=t.parentElement,l=r.parentNode;r.parentNode.parentNode.insertBefore(s,l),l.className&&(s.className=l.className),this.linkDiv(),this.bus.fire(\"operation\",{name:\"moveNodeBefore\",obj:{fromObj:n,toObj:i,originParentId:o}})}),\"moveNodeBefore\"),moveNodeAfter:ge((function(e,t){const n=e.nodeObj,i=t.nodeObj,o=n.parent.id;!function(e,t){p(e);const n=t.parent.children;let i=0;for(let e=0;e<n.length;e++)if(n[e]===t){i=e;break}n.splice(i+1,0,e)}(n,i),a(this.nodeData);const s=e.parentElement.parentNode,r=t.parentElement,l=r.parentNode;r.parentNode.parentNode.insertBefore(s,l.nextSibling),l.className&&(s.className=l.className),this.linkDiv(),this.bus.fire(\"operation\",{name:\"moveNodeAfter\",obj:{fromObj:n,toObj:i,originParentId:o}})}),\"moveNodeAfter\"),updateNodeStyle:function(e){if(!e.style)return;const n=g(e.id,this),i={color:n.style.color&&t(n.style.color),background:n.style.background&&t(n.style.background),fontSize:n.style.fontSize&&n.style.fontSize+\"px\",fontWeight:n.style.fontWeight};n.style.color=e.style.color,n.style.background=e.style.background,n.style.fontSize=e.style.fontSize+\"px\",n.style.fontWeight=e.style.fontWeight||\"normal\",this.linkDiv(),this.bus.fire(\"operation\",{name:\"editStyle\",obj:e,origin:i})},updateNodeTags:function(e,t){const n=e.tags;e.tags=t;const i=g(e.id);b(i,e),this.linkDiv(),this.bus.fire(\"operation\",{name:\"editTags\",obj:e,origin:n})},updateNodeIcons:function(e,t){const n=e.icons;e.icons=t;const i=g(e.id);b(i,e),this.linkDiv(),this.bus.fire(\"operation\",{name:\"editIcons\",obj:e,origin:n})},updateNodeHyperLink:function(e,t){const n=e.hyperLink;e.hyperLink=t;const i=g(e.id);b(i,e),this.linkDiv(),this.bus.fire(\"operation\",{name:\"editHyperLink\",obj:e,origin:n})},judgeDirection:function(e,t){if(0===this.direction)e.className=\"lhs\";else if(1===this.direction)e.className=\"rhs\";else if(2===this.direction){z.querySelectorAll(\".lhs\").length<=z.querySelectorAll(\".rhs\").length?(e.className=\"lhs\",t.direction=0):(e.className=\"rhs\",t.direction=1)}},setNodeTopic:function(e,t){e.childNodes[0].textContent=t,e.nodeObj.topic=t,this.linkDiv()},createLink:function(e,t,n,i){const o=this.map.getBoundingClientRect();if(!e||!t)return;const a=e.getBoundingClientRect(),s=t.getBoundingClientRect(),r=(a.x+a.width/2-o.x)/this.scaleVal,p=(a.y+a.height/2-o.y)/this.scaleVal,u=(s.x+s.width/2-o.x)/this.scaleVal,m=(s.y+s.height/2-o.y)/this.scaleVal;let f,g,b,y;n?(f=r+i.delta1.x,g=p+i.delta1.y,b=u+i.delta2.x,y=m+i.delta2.y):(p+m)/2-p<=a.height/2?(f=(a.x+a.width-o.x)/this.scaleVal+100,g=p,b=(s.x+s.width-o.x)/this.scaleVal+100,y=m):(f=(r+u)/2,g=(p+m)/2,b=(r+u)/2,y=(p+m)/2);const v={cx:r,cy:p,w:a.width,h:a.height},M={cx:u,cy:m,w:s.width,h:s.height},k=c(v,f,g),C=k.x,z=k.y,w=d(M,b,y),j=w.x,L=w.y,E=l(b,y,j,L),S=function(e,t){const n=x.createElementNS(N,\"g\"),i=x.createElementNS(N,\"path\"),o=x.createElementNS(N,\"path\");return o.setAttribute(\"d\",t),o.setAttribute(\"stroke\",\"rgb(235, 95, 82)\"),o.setAttribute(\"fill\",\"none\"),o.setAttribute(\"stroke-linecap\",\"cap\"),o.setAttribute(\"stroke-width\",\"2\"),i.setAttribute(\"d\",e),i.setAttribute(\"stroke\",\"rgb(235, 95, 82)\"),i.setAttribute(\"fill\",\"none\"),i.setAttribute(\"stroke-linecap\",\"cap\"),i.setAttribute(\"stroke-width\",\"2\"),n.appendChild(i),n.appendChild(o),n}(`M ${C} ${z} C ${f} ${g} ${b} ${y} ${j} ${L}`,`M ${E.x1} ${E.y1} L ${j} ${L} L ${E.x2} ${E.y2}`);let D;n?(D={id:i.id,label:\"\",from:e,to:t,delta1:{x:f-r,y:g-p},delta2:{x:b-u,y:y-m}},this.linkData[i.id]=D,S.linkObj=D,S.dataset.linkid=i.id):(D={id:h(),label:\"\",from:e,to:t,delta1:{x:f-r,y:g-p},delta2:{x:b-u,y:y-m}},this.linkData[D.id]=D,S.linkObj=D,S.dataset.linkid=D.id,this.currentLink=S),this.linkSvgGroup.appendChild(S),n||this.showLinkController(f,g,b,y,D,v,M)},removeLink:function(e){let t;if(t=e||this.currentLink,!t)return;this.hideLinkController();const n=t.linkObj.id;delete this.linkData[n],t.remove(),t=null},selectLink:function(e){this.currentLink=e;const t=e.linkObj,n=t.from,i=t.to,o=this.map.getBoundingClientRect(),a=n.getBoundingClientRect(),s=i.getBoundingClientRect(),r=(a.x+a.width/2-o.x)/this.scaleVal,l=(a.y+a.height/2-o.y)/this.scaleVal,c=(s.x+s.width/2-o.x)/this.scaleVal,d=(s.y+s.height/2-o.y)/this.scaleVal,h={cx:r,cy:l,w:a.width,h:a.height},p={cx:c,cy:d,w:s.width,h:s.height},u=r+t.delta1.x,m=l+t.delta1.y,f=c+t.delta2.x,g=d+t.delta2.y;this.showLinkController(u,m,f,g,t,h,p)},hideLinkController:function(){this.linkController.style.display=\"none\",this.P2.style.display=\"none\",this.P3.style.display=\"none\"},showLinkController:function(e,t,n,i,o,a,s){this.linkController.style.display=\"initial\",this.P2.style.display=\"initial\",this.P3.style.display=\"initial\";const r=c(a,e,t);let h=r.x,p=r.y;const u=d(s,n,i);let f=u.x,g=u.y;this.P2.style.cssText=`top:${t}px;left:${e}px;`,this.P3.style.cssText=`top:${i}px;left:${n}px;`,this.line1.setAttribute(\"x1\",h),this.line1.setAttribute(\"y1\",p),this.line1.setAttribute(\"x2\",e),this.line1.setAttribute(\"y2\",t),this.line2.setAttribute(\"x1\",n),this.line2.setAttribute(\"y1\",i),this.line2.setAttribute(\"x2\",f),this.line2.setAttribute(\"y2\",g),this.helper1&&(this.helper1.destory(this.map),this.helper2.destory(this.map)),this.helper1=new m(this.P2),this.helper2=new m(this.P3),this.helper1.init(this.map,((s,r)=>{e-=s/this.scaleVal,t-=r/this.scaleVal;const l=c(a,e,t);h=l.x,p=l.y,this.P2.style.top=t+\"px\",this.P2.style.left=e+\"px\",this.currentLink.children[0].setAttribute(\"d\",`M ${h} ${p} C ${e} ${t} ${n} ${i} ${f} ${g}`),this.line1.setAttribute(\"x1\",h),this.line1.setAttribute(\"y1\",p),this.line1.setAttribute(\"x2\",e),this.line1.setAttribute(\"y2\",t),o.delta1.x=e-a.cx,o.delta1.y=t-a.cy})),this.helper2.init(this.map,((a,r)=>{n-=a/this.scaleVal,i-=r/this.scaleVal;const c=d(s,n,i);f=c.x,g=c.y;const u=l(n,i,f,g);this.P3.style.top=i+\"px\",this.P3.style.left=n+\"px\",this.currentLink.children[0].setAttribute(\"d\",`M ${h} ${p} C ${e} ${t} ${n} ${i} ${f} ${g}`),this.currentLink.children[1].setAttribute(\"d\",`M ${u.x1} ${u.y1} L ${f} ${g} L ${u.x2} ${u.y2}`),this.line2.setAttribute(\"x1\",n),this.line2.setAttribute(\"y1\",i),this.line2.setAttribute(\"x2\",f),this.line2.setAttribute(\"y2\",g),o.delta2.x=n-s.cx,o.delta2.y=i-s.cy}))},layout:function(){this.root.innerHTML=\"\",this.box.innerHTML=\"\";const e=this.createTopic(this.nodeData);b(e,this.nodeData),e.draggable=!1,this.root.appendChild(e);const t=this.nodeData.children;if(t&&0!==t.length){if(2===this.direction){let e=0,n=0;t.map((t=>{void 0===t.direction?e<=n?(t.direction=0,e+=1):(t.direction=1,n+=1):0===t.direction?e+=1:n+=1}))}this.createChildren(this.nodeData.children,this.box,this.direction)}},linkDiv:function(e){var t=this.primaryNodeHorizontalGap||65,n=this.primaryNodeVerticalGap||25;const i=this.root;i.style.cssText=`top:${1e4-i.offsetHeight/2}px;left:${1e4-i.offsetWidth/2}px;`;const o=this.box.children;this.lines.innerHTML=\"\";let a,s,r=0,l=0,c=0,d=0,h=0,p=0;if(2===this.direction){let e=0,t=0,i=0,r=0;for(let a=0;a<o.length;a++){const s=o[a];\"lhs\"===s.className?(h+=s.offsetHeight+n,i+=s.offsetHeight,e+=1):(p+=s.offsetHeight+n,r+=s.offsetHeight,t+=1)}h>p?(s=1e4-Math.max(h)/2,a=\"r\",l=(h-r)/(t-1)):(s=1e4-Math.max(p)/2,a=\"l\",l=(p-i)/(e-1))}else{for(let e=0;e<o.length;e++){r+=o[e].offsetHeight+n}s=1e4-r/2}let u=\"\";const m=1e4-i.offsetWidth/2-t,f=1e4+i.offsetWidth/2+t;for(let e=0;e<o.length;e++){let t=1e4;const r=1e4;let h,p;const g=o[e],b=g.offsetHeight;\"lhs\"===g.className?(g.style.top=s+c+\"px\",g.style.left=m-g.offsetWidth+\"px\",h=m-15,p=s+c+b/2,c+=\"l\"===a?b+l:b+n):(g.style.top=s+d+\"px\",g.style.left=f+\"px\",h=f+15,p=s+d+b/2,d+=\"r\"===a?b+l:b+n),2===this.primaryLinkStyle?(2===this.direction&&(t=\"lhs\"===g.className?1e4-i.offsetWidth/6:1e4+i.offsetWidth/6),u+=L({x1:t,y1:r,x2:h,y2:p})):u+=E({x1:t,y1:r,x2:h,y2:p});const y=g.children[0].children[1];y&&(y.style.top=(y.parentNode.offsetHeight-y.offsetHeight)/2+\"px\",\"lhs\"===g.className?y.style.left=\"-10px\":y.style.left=y.parentNode.offsetWidth-10+\"px\")}this.lines.appendChild(function(e){const t=x.createElementNS(N,\"path\");return t.setAttribute(\"d\",e),t.setAttribute(\"stroke\",\"#666\"),t.setAttribute(\"fill\",\"none\"),t.setAttribute(\"stroke-width\",\"2\"),t}(u));for(let t=0;t<o.length;t++){const n=o[t];if((!e||e===o[t])&&n.childElementCount){const e=v(\"subLines\");\"svg\"===n.lastChild.tagName&&n.lastChild.remove(),n.appendChild(e);const t=n.children[0],i=j(n.children[1].children,t,!0);e.appendChild(k(i))}}this.linkSvgGroup.innerHTML=\"\";for(const e in this.linkData){const t=this.linkData[e];\"string\"==typeof t.from?this.createLink(g(t.from),g(t.to),!0,t):this.createLink(g(t.from.nodeObj.id),g(t.to.nodeObj.id),!0,t)}},createInputDiv:function(e){if(!e)return;let t=f.createElement(\"div\");const n=e.childNodes[0].textContent;e.appendChild(t),t.id=\"input-box\",t.textContent=n,t.contentEditable=\"true\",t.spellcheck=!1,t.style.cssText=`min-width:${e.offsetWidth-8}px;`,0===this.direction&&(t.style.right=\"0\"),t.focus(),function(e){const t=f.createRange();t.selectNodeContents(e);const n=window.getSelection();n&&(n.removeAllRanges(),n.addRange(t))}(t),this.inputDiv=t,this.bus.fire(\"operation\",{name:\"beginEdit\",obj:e.nodeObj}),t.addEventListener(\"keydown\",(e=>{e.stopPropagation();const t=e.key;if(\"Enter\"===t||\"Tab\"===t){if(e.shiftKey)return;e.preventDefault(),this.inputDiv.blur(),this.map.focus()}})),t.addEventListener(\"blur\",(()=>{if(!t)return;const i=e.nodeObj,o=t.textContent.trim();i.topic=\"\"===o?n:o,t.remove(),this.inputDiv=t=null,o!==n&&(e.childNodes[0].textContent=i.topic,this.linkDiv(),this.bus.fire(\"operation\",{name:\"finishEdit\",obj:i,origin:n}))}))},createChildren:function(e,t,n){let i;i=t||f.createElement(\"children\");for(let t=0;t<e.length;t++){const o=e[t],a=f.createElement(\"GRP\");0===n?a.className=\"lhs\":1===n?a.className=\"rhs\":2===n&&(0===o.direction?a.className=\"lhs\":1===o.direction&&(a.className=\"rhs\"));const s=this.createTop(o);if(o.children&&o.children.length>0){if(s.appendChild(y(o.expanded)),a.appendChild(s),!1!==o.expanded){const e=this.createChildren(o.children);a.appendChild(e)}}else a.appendChild(s);i.appendChild(a)}return i},createGroup:function(e,t){const n=f.createElement(\"GRP\"),i=this.createTop(e);if(n.appendChild(i),!t&&e.children&&e.children.length>0&&(i.appendChild(y(e.expanded)),!1!==e.expanded)){const t=this.createChildren(e.children);n.appendChild(t)}return{grp:n,top:i}},createTop:function(e){const t=f.createElement(\"t\"),n=this.createTopic(e);return b(n,e),t.appendChild(n),t},createTopic:function(e){const t=f.createElement(\"tpc\");return t.nodeObj=e,t.dataset.nodeid=\"me\"+e.id,t.draggable=this.draggable,t},selectNode:function(e,t,n){if(e){if(\"string\"==typeof e)return this.selectNode(g(e));this.currentNode&&(this.currentNode.className=\"\"),e.className=\"selected\",this.currentNode=e,t?this.bus.fire(\"selectNewNode\",e.nodeObj,n):this.bus.fire(\"selectNode\",e.nodeObj,n)}},unselectNode:function(){this.currentNode&&(this.currentNode.className=\"\"),this.currentNode=null,this.bus.fire(\"unselectNode\")},selectNextSibling:function(){if(!this.currentNode||\"meroot\"===this.currentNode.dataset.nodeid)return;const e=this.currentNode.parentElement.parentElement.nextSibling;let t;const n=this.currentNode.parentElement.parentElement;if(\"rhs\"===n.className||\"lhs\"===n.className){const e=this.mindElixirBox.querySelectorAll(\".\"+n.className),i=Array.from(e).indexOf(n);if(!(i+1<e.length))return!1;t=e[i+1].firstChild.firstChild}else{if(!e)return!1;t=e.firstChild.firstChild}return this.selectNode(t),!0},selectPrevSibling:function(){if(!this.currentNode||\"meroot\"===this.currentNode.dataset.nodeid)return;const e=this.currentNode.parentElement.parentElement.previousSibling;let t;const n=this.currentNode.parentElement.parentElement;if(\"rhs\"===n.className||\"lhs\"===n.className){const e=this.mindElixirBox.querySelectorAll(\".\"+n.className),i=Array.from(e).indexOf(n);if(!(i-1>=0))return!1;t=e[i-1].firstChild.firstChild}else{if(!e)return!1;t=e.firstChild.firstChild}return this.selectNode(t),!0},selectFirstChild:function(){if(!this.currentNode)return;const e=this.currentNode.parentElement.nextSibling;if(e&&e.firstChild){const t=e.firstChild.firstChild.firstChild;this.selectNode(t)}},selectParent:function(){if(!this.currentNode||\"meroot\"===this.currentNode.dataset.nodeid)return;const e=this.currentNode.parentElement.parentElement.parentElement.previousSibling;if(e){const t=e.firstChild;this.selectNode(t)}},getAllDataString:function(){const e={nodeData:C(this),linkData:this.linkData,direction:this.direction};return JSON.stringify(e,((e,t)=>{if(\"parent\"!==e)return\"from\"===e||\"to\"===e?t.nodeObj.id:t}))},getAllData:function(){const e={nodeData:C(this),linkData:this.linkData,direction:this.direction};return JSON.parse(JSON.stringify(e,((e,t)=>{if(\"parent\"!==e)return\"from\"===e||\"to\"===e?t.nodeObj.id:t})))},getAllDataMd:function(){const e=C(this);let t=\"# \"+e.topic+\"\\n\\n\";return function e(n,i){for(let o=0;o<n.length;o++)t+=i<=6?\"\".padStart(i,\"#\")+\" \"+n[o].topic+\"\\n\\n\":\"\".padStart(i-7,\"\\t\")+\"- \"+n[o].topic+\"\\n\",n[o].children&&e(n[o].children,i+1)}(e.children,2),t},scale:function(e){this.scaleVal=e,this.map.style.transform=\"scale(\"+e+\")\"},toCenter:function(){this.container.scrollTo(1e4-this.container.offsetWidth/2,1e4-this.container.offsetHeight/2)},focusNode:function(e){e.nodeObj.root||(null===this.tempDirection&&(this.tempDirection=this.direction),this.isFocusMode||(this.nodeDataBackup=this.nodeData,this.isFocusMode=!0),this.nodeData=e.nodeObj,this.nodeData.root=!0,this.initRight(),this.toCenter())},cancelFocus:function(){this.isFocusMode=!1,null!==this.tempDirection&&(delete this.nodeData.root,this.nodeData=this.nodeDataBackup,this.direction=this.tempDirection,this.tempDirection=null,this.refresh(),this.toCenter())},initLeft:function(){this.direction=0,this.refresh()},initRight:function(){this.direction=1,this.refresh()},initSide:function(){this.direction=2,this.refresh()},setLocale:function(e){this.locale=e,this.refresh()},enableEdit:function(){this.editable=!0},disableEdit:function(){this.editable=!1},expandNode:function(e,t){const n=e.nodeObj;\"boolean\"==typeof t?n.expanded=t:!1!==n.expanded?n.expanded=!1:n.expanded=!0,this.layout(),this.linkDiv(),this.bus.fire(\"expandNode\",n)},refresh:function(e){e&&(this.nodeData=e.nodeData,this.linkData=e.linkData||{}),this.addParentLink(this.nodeData),this.layout(),this.linkDiv()},install(e){e(this)},init(e){if(!e||!e.nodeData)return new Error(\"MindElixir: `data` is required\");e.direction&&(this.direction=e.direction),this.nodeData=e.nodeData,this.linkData=e.linkData||{},this.toolBar&&J(this),this.nodeMenu&&function(e){function t(t,n){var i=e.container.querySelectorAll(t);[].forEach.call(i,(function(e){e.classList.remove(n)}))}const n=T[e.locale]?e.locale:\"en\",i=ee(\"nm-style\",`\\n  <div class=\"nm-fontsize-container\">\\n    ${[\"15\",\"24\",\"32\"].map((e=>`<div class=\"size\"  data-size=\"${e}\">\\n    <svg class=\"icon\" style=\"width: ${e}px;height: ${e}px\" aria-hidden=\"true\">\\n      <use xlink:href=\"#icon-a\"></use>\\n    </svg></div>`)).join(\"\")}<div class=\"bold\"><svg class=\"icon\" aria-hidden=\"true\">\\n<use xlink:href=\"#icon-B\"></use>\\n</svg></div>\\n  </div>\\n  <div class=\"nm-fontcolor-container\">\\n    ${te.map((e=>`<div class=\"split6\"><div class=\"palette\" data-color=\"${e}\" style=\"background-color: ${e};\"></div></div>`)).join(\"\")}\\n  </div>\\n  <div class=\"bof\">\\n  <span class=\"font\">${T[n].font}</span>\\n  <span class=\"background\">${T[n].background}</span>\\n  </div>`),o=ee(\"nm-tag\",`${T[n].tag}<input class=\"nm-tag\" tabindex=\"-1\" placeholder=\"${T[n].tagsSeparate}\" />`),a=ee(\"nm-icon\",`${T[n].icon}<input class=\"nm-icon\" tabindex=\"-1\" placeholder=\"${T[n].iconsSeparate}\" />`),s=ee(\"nm-url\",`${T[n].url}<input class=\"nm-url\" tabindex=\"-1\" />`),r=ee(\"nm-memo\",`${T[n].memo||\"Memo\"}<textarea class=\"nm-memo\" rows=\"5\" tabindex=\"-1\" />`),l=document.createElement(\"nmenu\");l.innerHTML='\\n  <div class=\"button-container\"><svg class=\"icon\" aria-hidden=\"true\">\\n  <use xlink:href=\"#icon-close\"></use>\\n  </svg></div>\\n  ',l.appendChild(i),l.appendChild(o),l.appendChild(a),l.appendChild(s),l.appendChild(r),l.hidden=!0,e.container.append(l);const c=l.querySelectorAll(\".size\"),d=l.querySelector(\".bold\"),h=l.querySelector(\".button-container\"),p=l.querySelector(\".font\"),u=e.container.querySelector(\".nm-tag\"),m=e.container.querySelector(\".nm-icon\"),f=e.container.querySelector(\".nm-url\"),g=e.container.querySelector(\".nm-memo\");let b;l.onclick=n=>{if(!e.currentNode)return;const i=e.currentNode.nodeObj,o=n.target;\"palette\"===o.className?(i.style||(i.style={}),t(\".palette\",\"nmenu-selected\"),o.className=\"palette nmenu-selected\",\"font\"===b?i.style.color=o.dataset.color:\"background\"===b&&(i.style.background=o.dataset.color),e.updateNodeStyle(i)):\"background\"===o.className?(t(\".palette\",\"nmenu-selected\"),b=\"background\",o.className=\"background selected\",o.previousElementSibling.className=\"font\",i.style&&i.style.background&&(l.querySelector('.palette[data-color=\"'+i.style.background+'\"]').className=\"palette nmenu-selected\")):\"font\"===o.className&&(t(\".palette\",\"nmenu-selected\"),b=\"font\",o.className=\"font selected\",o.nextElementSibling.className=\"background\",i.style&&i.style.color&&(l.querySelector('.palette[data-color=\"'+i.style.color+'\"]').className=\"palette nmenu-selected\"))},Array.from(c).map((n=>{n.onclick=n=>{e.currentNode.nodeObj.style||(e.currentNode.nodeObj.style={}),t(\".size\",\"size-selected\");const i=n.currentTarget;e.currentNode.nodeObj.style.fontSize=i.dataset.size,i.className=\"size size-selected\",e.updateNodeStyle(e.currentNode.nodeObj)}})),d.onclick=t=>{e.currentNode.nodeObj.style||(e.currentNode.nodeObj.style={}),\"bold\"===e.currentNode.nodeObj.style.fontWeight?(delete e.currentNode.nodeObj.style.fontWeight,t.currentTarget.className=\"bold\",e.updateNodeStyle(e.currentNode.nodeObj)):(e.currentNode.nodeObj.style.fontWeight=\"bold\",t.currentTarget.className=\"bold size-selected\",e.updateNodeStyle(e.currentNode.nodeObj))},u.onchange=t=>{if(e.currentNode&&\"string\"==typeof t.target.value){const n=t.target.value.split(\",\");e.updateNodeTags(e.currentNode.nodeObj,n.filter((e=>e)))}},m.onchange=t=>{if(e.currentNode&&\"string\"==typeof t.target.value){const n=t.target.value.split(\",\");e.updateNodeIcons(e.currentNode.nodeObj,n.filter((e=>e)))}},f.onchange=t=>{e.currentNode&&e.updateNodeHyperLink(e.currentNode.nodeObj,t.target.value)},g.onchange=t=>{e.currentNode&&(e.currentNode.nodeObj.memo=t.target.value)};let y=\"open\";h.onclick=e=>{\"open\"===y?(y=\"close\",l.className=\"close\",h.innerHTML='<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-menu\"></use></svg>'):(y=\"open\",l.className=\"\",h.innerHTML='<svg class=\"icon\" aria-hidden=\"true\"><use xlink:href=\"#icon-close\"></use></svg>')},e.bus.addListener(\"unselectNode\",(function(){l.hidden=!0})),e.bus.addListener(\"selectNode\",(function(e,n){n&&(l.hidden=!1,t(\".palette\",\"nmenu-selected\"),t(\".size\",\"size-selected\"),t(\".bold\",\"size-selected\"),b=\"font\",p.className=\"font selected\",p.nextElementSibling.className=\"background\",e.style&&(e.style.fontSize&&(l.querySelector('.size[data-size=\"'+e.style.fontSize+'\"]').className=\"size size-selected\"),e.style.fontWeight&&(l.querySelector(\".bold\").className=\"bold size-selected\"),e.style.color&&(l.querySelector('.palette[data-color=\"'+e.style.color+'\"]').className=\"palette nmenu-selected\")),e.tags?u.value=e.tags.join(\",\"):u.value=\"\",e.icons?m.value=e.icons.join(\",\"):m.value=\"\",f.value=e.hyperLink||\"\",g.value=e.memo||\"\")}))}(this),this.keypress&&function(e){const t={13:()=>{e.insertSibling()},9:()=>{e.addChild()},113:()=>{e.beginEdit()},38:()=>{e.selectPrevSibling()},40:()=>{e.selectNextSibling()},37:()=>{e.currentNode&&(\"rhs\"===e.currentNode.offsetParent.offsetParent.className?e.selectParent():(\"lhs\"===e.currentNode.offsetParent.offsetParent.className||e.currentNode.nodeObj.root)&&e.selectFirstChild())},39:()=>{e.currentNode&&(\"rhs\"===e.currentNode.offsetParent.offsetParent.className||e.currentNode.nodeObj.root?e.selectFirstChild():\"lhs\"===e.currentNode.offsetParent.offsetParent.className&&e.selectParent())},33(){e.moveUpNode()},34(){e.moveDownNode()},67(t){(t.metaKey||t.ctrlKey)&&(e.waitCopy=e.currentNode)},86(t){e.waitCopy&&(t.metaKey||t.ctrlKey)&&(e.copyNode(e.waitCopy,e.currentNode),e.waitCopy=null)},90:t=>{e.allowUndo&&(t.metaKey||t.ctrlKey)&&e.undo()},187:t=>{if(t.metaKey||t.ctrlKey){if(e.scaleVal>1.6)return;e.scale(e.scaleVal+=.2)}},189:t=>{if(t.metaKey||t.ctrlKey){if(e.scaleVal<.6)return;e.scale(e.scaleVal-=.2)}}};e.map.onkeydown=n=>{n.preventDefault(),e.editable&&n.target===n.currentTarget&&(8===n.keyCode||46===n.keyCode?e.currentLink?e.removeLink():e.removeNode():t[n.keyCode]&&t[n.keyCode](n))}}(this),/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&this.mobileMenu?function(e,t){const n=(e,t)=>{const n=document.createElement(\"div\");return n.id=e,n.innerHTML=`<svg class=\"icon\" aria-hidden=\"true\">\\n    <use xlink:href=\"#icon-${t}\"></use>\\n  </svg>`,n},i=n(\"cm-add_child\",\"zijiedian\"),o=n(\"cm-add_sibling\",\"tongjijiedian-\"),a=n(\"cm-remove_child\",\"shanchu2\"),s=n(\"cm-up\",\"rising\"),r=n(\"cm-down\",\"falling\"),l=n(\"cm-edit\",\"edit\"),c=document.createElement(\"ul\");if(c.className=\"menu-list\",t&&t.extend)for(let e=0;e<t.extend.length;e++){const i=t.extend[e],o=n(i.name,i.name);c.appendChild(o),o.onclick=e=>{i.onclick(e)}}const d=document.createElement(\"mmenu\");d.appendChild(i),d.appendChild(o),d.appendChild(a),d.appendChild(s),d.appendChild(r),d.appendChild(l),d.hidden=!0,e.container.append(d);let h=!0;e.bus.addListener(\"unselectNode\",(function(){d.hidden=!0})),e.bus.addListener(\"selectNode\",(function(e){d.hidden=!1,h=!!e.root})),d.onclick=e=>{e.target===d&&(d.hidden=!0)},i.onclick=t=>{e.addChild()},o.onclick=t=>{h||e.insertSibling()},a.onclick=t=>{h||e.removeNode()},s.onclick=t=>{h||e.moveUpNode()},r.onclick=t=>{h||e.moveDownNode()},l.onclick=t=>{e.beginEdit()}}(this):this.contextMenu&&U(this,this.contextMenuOption),this.draggable&&se(this),a(this.nodeData),this.toCenter(),this.layout(),this.linkDiv()}},fe.LEFT=0,fe.RIGHT=1,fe.SIDE=2,fe.version=\"1.0.0\",fe.E=g,fe.new=e=>({nodeData:{id:h(),topic:e||\"new topic\",root:!0,children:[]},linkData:{}});const be=fe})(),i=i.default})()}));"
  },
  {
    "path": "src/data/extra/web/js/mindmap/lib/mind-elixir/README.md",
    "content": "# [mind-elixir](https://github.com/ssshooter/mind-elixir-core)\nv1.1.3\n"
  },
  {
    "path": "src/data/extra/web/js/mindmap/mindmap-readme.md",
    "content": "# VNote 自定义思维导图（Mind Map）功能文档\n\n本功能基于 `MindElixir.js` 实现了相关思维导图与 VNote 笔记的增强。\n\n## 1. 工程架构\n\n新的思维导图功能遵循清晰的模块化目录结构，以便于维护和扩展。所有相关文件都位于 `src/data/extra/web/js/mindmap/` 目录下。\n\n```\nmindmap/\n├── core/\n│   └── mindmap-core.js       # 核心逻辑，封装第三方库\n├── features/\n│   ├── link-handler/\n│   │   └── link-handler.js   # 功能模块：链接增强\n│   └── outline/\n│       └── outline.js        # 功能模块：大纲视图\n├── lib/\n│   └── mind-elixir/\n│       └── MindElixir.js     # 第三方依赖库\n└── mindmap-readme.md         # 本文档\n```\n\n- **`lib/`**: 存放第三方依赖库，目前为 `MindElixir.js`。这使得主代码与外部库解耦。\n- **`core/`**: 存放核心封装和逻辑。`mindmap-core.js` 作为 `MindElixir.js` 的直接封装层，为上层应用提供统一、稳定的接口，并管理各个功能模块的生命周期。\n- **`features/`**: 存放所有可插拔的功能模块。每个子目录代表一个独立的功能（如链接处理、大纲视图）\n\n此外，在 `mindmapeditor.js` 的同级目录下，还有一个 `vxcore.js` 文件，它提供了与Qt后端通信的基础能力。\n\n## 2. 架构设计与开发指南\n\n为了实现高度的灵活性和可扩展性，我们采用了分层和面向对象的插件式架构。\n\n### 2.1. 核心关系：`mindmapeditor.js` 与 `mindmap-core.js`\n\n两者的关系是 **组合（Composition）而非继承**，这是一种“has-a”关系，遵循了组合优于继承的设计原则。\n\n-   **`MindMapEditor` (`mindmapeditor.js`)**:\n    -   **角色**: **集成与通信层 (The Integrator)**。\n    -   **职责**:\n        1.  **继承 `VXCore`**: 获取与Qt后端通信的基础能力。\n        2.  **对接Qt**: 作为JavaScript世界与Qt世界的桥梁，处理来自 `vxAdapter` 对象的信号（如 `saveDataRequested`, `dataUpdated`）和调用其方法（如 `setSavedData`）。\n        3.  **创建核心实例**: `MindMapEditor` 在其构造函数中创建 `MindMapCore` 的实例。它“拥有”一个 `MindMapCore`。\n        4.  **注册功能模块**: 它决定加载哪些功能，并调用 `mindMapCore.registerFeature()` 方法将 `OutlineFeature` 和 `LinkHandlerFeature` 等模块“注入”到核心中。\n\n-   **`MindMapCore` (`mindmap-core.js`)**:\n    -   **角色**: **封装与管理层 (The Engine)**。\n    -   **职责**:\n        1.  **封装 `MindElixir`**: 直接初始化和操作 `MindElixir.js` 实例。所有对思维导图的底层操作（如设置数据、获取数据、布局）都由它代理。这隐藏了第三方库的实现细节。\n        2.  **管理功能模块**: 内部维护一个功能模块列表（`features` Map）。提供了 `registerFeature()`、`getFeature()` 等方法，并负责在适当的时机（如 `init`, `onDataChange`）调用每个模块的生命周期方法。\n        3.  **事件中心**: 拥有自己的事件系统（`on`, `emit`），发布如 `ready`, `contentChanged`, `saveCompleted` 等关键事件，让上层和同级模块能响应核心状态的变化。\n\n这种设计带来了几个好处：\n-   **解耦**: `MindMapEditor` 不关心用的是哪个思维导图库，它只与 `MindMapCore` 的稳定API交互。未来如果更换 `MindElixir.js`，只需重写 `MindMapCore`，而 `MindMapEditor` 和所有功能模块几乎不受影响。\n-   **清晰职责**: `MindMapEditor` 负责“对外”（与Qt通信），`MindMapCore` 负责“对内”（管理思维导图和功能）。\n-   **可扩展性**: 新功能可以作为独立的`Feature`类开发，然后在 `MindMapEditor` 中注册即可，无需修改核心代码。\n\n### 2.2. 功能模块（Feature）的实现规范\n\n所有功能模块（如 `LinkHandlerFeature`, `OutlineFeature`）都遵循一个统一的接口约定：\n\n-   是一个独立的 `class`。\n-   **`setCore(core)`**: 一个方法，由 `MindMapCore` 在注册时调用，用于将核心实例注入到模块中，使模块能访问核心功能（如 `this.core.mindElixir`）。\n-   **`init()`**: 初始化方法。在 `MindMapCore` 初始化完成后被调用，用于设置事件监听、创建UI元素等。\n-   **`onDataChange(data)`**: 当思维导图加载新数据时被调用，用于同步模块状态。\n\n### 2.3. 未来如何开发新功能\n\n如果你想基于当前架构添加一个新的自定义功能（例如“节点计数器”），应遵循以下步骤：\n\n1.  **创建功能文件**: 在 `features/` 目录下创建一个新的子目录，例如 `node-counter/`，并在其中创建 `node-counter.js` 文件。\n2.  **实现功能类**: 在 `node-counter.js` 中，创建一个 `NodeCounterFeature` 类，并实现 `setCore`, `init` 等必要方法。\n    ```javascript\n    class NodeCounterFeature {\n        setCore(core) {\n            this.core = core;\n        }\n\n        init() {\n            // 创建一个显示计数的UI元素\n            // ...\n            this.updateCount();\n        }\n\n        onDataChange(data) {\n            // 数据变化时更新计数\n            this.updateCount();\n        }\n\n        updateCount() {\n            const nodeCount = this.core.mindElixir.getAllData().nodeData.children.length;\n            // 更新UI...\n        }\n    }\n    ```\n3.  **注册新功能**: 在 `mindmapeditor.js` 的 `setupFeatures` 方法中，实例化并注册你的新功能。\n    ```javascript\n    // in mindmapeditor.js\n    setupFeatures() {\n        // ... aiting other features\n        this.mindMapCore.registerFeature('nodeCounter', new NodeCounterFeature());\n    }\n    ```\n4.  **更新HTML模板**: 根据项目的设计模式 [[memory:4144812]]，不要在 `mindmap-editor-template.html` 中硬编码JS路径。应在 `VNote` 的资源管理系统中注册新JS文件，使其在后端被自动注入。\n\n## 3. 已实现功能介绍\n\n### 3.1. 链接增强 (`LinkHandlerFeature`)\n\n此功能彻底重做了 `MindElixir` 的默认超链接行为，提供了更强大、更符合 `VNote` 使用场景的交互。\n\n-   **可视化标签**: 它会检测节点数据中的 `hyperLink` 字段，并自动在节点文本旁生成一个可视化的标签（如 `[md]`, `[pdf]`, `[http]`）。标签的样式会根据链接类型（文件扩展名）变化，一目了然。\n-   **定向打开**: 这是此功能的核心。用户可以通过 **拖拽** 这个链接标签来决定在 `VNote` 的哪个区域打开链接：\n    -   向上拖拽: 在上方打开\n    -   向下拖拽: 在下方打开\n    -   向左拖拽: 在左侧打开\n    -   向右拖拽或直接点击: 在右侧打开（默认）\n-   **动态更新**: 利用 `MutationObserver`，无论是添加新节点、编辑现有节点还是撤销/重做操作，链接标签都能被实时、正确地渲染，并保持布局不乱。\n\n### 3.2. 大纲 (`OutlineFeature`)\n\n此功能为复杂的思维导图提供了一个悬浮的、可交互的大纲窗口，极大地提升了导航和概览效率。\n\n-   **悬浮窗口**: 大纲是一个独立、可拖拽、可调整大小的悬浮窗口。\n-   **实时同步**: 大纲内容与思维导图实时双向同步。在思维导图中做的任何修改都会立刻反映到大纲树状图中。\n-   **快速导航**: 在大纲窗口中点击任意节点，主思维导图视图会自动平移并将该节点居中高亮显示。\n-   **搜索过滤**: 内置的搜索框可以快速过滤大纲，只显示匹配关键词的节点及其父节点，方便在大型脑图中快速定位信息。\n-   **界面调整**:\n    -   **折叠/展开**: 用户可以在大纲中自由折叠和展开节点，以关注不同层级的内容。\n    -   **自适应布局**: 当主窗口尺寸缩小时，大纲窗口会自动折叠并移动到角落，避免遮挡内容；当主窗口恢复尺寸时，大纲窗口也会自动展开并恢复到原来的位置和大小。\n"
  },
  {
    "path": "src/data/extra/web/js/mindmapeditor.js",
    "content": "/**\n * 思维导图编辑器主入口文件\n * 负责初始化和管理思维导图功能\n */\n\n/**\n * 思维导图编辑器主类\n * 负责与Qt后端对接和功能模块的管理\n * 继承自VXCore以获取基础功能\n */\nclass MindMapEditor extends VXCore {\n    /**\n     * 构造函数\n     * 步骤：\n     * 1. 调用父类构造函数\n     * 2. 初始化MindMapCore实例\n     */\n    constructor() {\n        super();\n        // MindMapCore实例\n        this.mindMapCore = null;\n        // 初始化标志\n        this.initialized = false;\n    }\n\n    /**\n     * 初始化加载\n     * 步骤：\n     * 1. 调用父类初始化\n     * 2. 初始化MindMapCore\n     * 3. 设置事件监听\n     */\n    initOnLoad() {\n        console.log('MindMapEditor: initOnLoad called');\n        \n        // 确保父类初始化完成\n        super.initOnLoad();\n\n        // 创建MindMapCore实例\n        console.log('MindMapEditor: Creating MindMapCore instance');\n        this.mindMapCore = new MindMapCore();\n\n        // 设置功能模块\n        console.log('MindMapEditor: Setting up features');\n        this.setupFeatures();\n\n        // 设置事件监听\n        console.log('MindMapEditor: Setting up event listeners');\n        this.setupEventListeners();\n\n        // 初始化MindMapCore\n        console.log('MindMapEditor: Initializing MindMapCore');\n        this.mindMapCore.init();\n\n        // 设置初始化标志\n        this.initialized = true;\n        console.log('MindMapEditor: Initialization complete');\n    }\n\n    /**\n     * 设置功能模块\n     * 步骤：\n     * 1. 注册大纲功能模块\n     * 2. 注册链接处理模块\n     */\n    setupFeatures() {\n        console.log('MindMapEditor: setupFeatures called');\n        // 注册功能模块\n        this.mindMapCore.registerFeature('outline', new OutlineFeature());\n        this.mindMapCore.registerFeature('linkHandler', new LinkHandlerFeature());\n        console.log('MindMapEditor: Features registered:', this.mindMapCore.features.size);\n    }\n\n    /**\n     * 生成数字ID\n     * @returns {number} 时间戳的数字形式\n     */\n    generateNumericId() {\n        return parseInt(Date.now().toString().slice(-8), 10);\n    }\n\n    /**\n     * 设置事件监听\n     */\n    setupEventListeners() {\n        // 监听MindMapCore的ready事件\n        this.mindMapCore.on('ready', () => {\n            if (window.vxAdapter) {\n                window.vxAdapter.setReady(true);\n\n                // 监听保存请求\n                if (typeof window.vxAdapter.saveDataRequested === 'function') {\n                    window.vxAdapter.saveDataRequested.connect((id) => {\n                        this.saveData(id);\n                    });\n                }\n            }\n        });\n\n        // 监听内容变更事件\n        this.mindMapCore.on('contentChanged', () => {\n            if (window.vxAdapter?.notifyContentsChanged) {\n                window.vxAdapter.notifyContentsChanged();\n            }\n        });\n\n        // 监听保存完成事件\n        this.mindMapCore.on('saveCompleted', (result) => {\n            // 只有手动保存（ID>0）成功时才显示消息，或在任何保存失败时显示消息\n            if (window.vxAdapter?.showMessage) {\n                if (result.success) {\n                    if (typeof result.id === 'number' && result.id > 0) {\n                        window.vxAdapter.showMessage('保存成功');\n                    }\n                } else {\n                    window.vxAdapter.showMessage('保存失败: ' + (result.error || '未知错误'));\n                }\n            }\n        });\n    }\n\n    /**\n     * 设置思维导图数据\n     * @param {object} data - 思维导图数据\n     */\n    setData(data) {\n        // console.log('MindMapEditor: setData called with data:', data);\n        if (this.mindMapCore) {\n            this.mindMapCore.setData(data);\n        }\n    }\n\n    /**\n     * 保存思维导图数据\n     * @param {number} id - 数据ID\n     */\n    saveData(id) {\n        if (this.mindMapCore) {\n            this.mindMapCore.saveData(id);\n        }\n    }\n\n    /**\n     * 获取功能模块\n     * @param {string} name - 功能模块名称\n     * @returns {object} 功能模块实例\n     */\n    getFeature(name) {\n        return this.mindMapCore ? this.mindMapCore.getFeature(name) : null;\n    }\n}\n\n// 等待 DOM 加载完成后初始化\ndocument.addEventListener('DOMContentLoaded', () => {\n    // 确保所有依赖都已加载\n    if (typeof VXCore === 'undefined') {\n        console.error('VXCore not loaded');\n        return;\n    }\n    \n    if (typeof MindMapCore === 'undefined') {\n        console.error('MindMapCore not loaded');\n        return;\n    }\n    \n    if (typeof OutlineFeature === 'undefined') {\n        console.error('OutlineFeature not loaded');\n        return;\n    }\n    \n    if (typeof LinkHandlerFeature === 'undefined') {\n        console.error('LinkHandlerFeature not loaded');\n        return;\n    }\n\n    // 创建全局实例\n    window.mindMapEditor = new MindMapEditor();\n\n    // 设置Qt后端对接\n    new QWebChannel(qt.webChannelTransport, function(p_channel) {\n        let adapter = p_channel.objects.vxAdapter;\n        // Export the adapter globally.\n        window.vxAdapter = adapter;\n\n        // Connect signals from CPP side.\n        adapter.saveDataRequested.connect(function(p_id) {\n            window.mindMapEditor.saveData(p_id);\n        });\n\n        adapter.dataUpdated.connect(function(p_data) {\n            window.mindMapEditor.setData(p_data);\n        });\n\n        // 添加URL点击处理函数到adapter对象\n        adapter.handleUrlClick = function(url) {\n            console.log('MindMapEditor: handleUrlClick called with URL:', url);\n            try {\n                if (typeof adapter.urlClicked === 'function') {\n                    console.log('MindMapEditor: Calling adapter.urlClicked');\n                    adapter.urlClicked(url);\n                } else {\n                    console.error('MindMapEditor: adapter.urlClicked is not a function');\n                    console.log('MindMapEditor: Available adapter methods:', Object.getOwnPropertyNames(adapter));\n                }\n            } catch (error) {\n                console.error('MindMapEditor: Error in handleUrlClick:', error);\n            }\n        };\n\n        // 添加带方向的URL点击处理函数\n        adapter.handleUrlClickWithDirection = function(url, direction) {\n            console.log('MindMapEditor: handleUrlClickWithDirection called with URL:', url, 'Direction:', direction);\n            try {\n                if (typeof adapter.urlClickedWithDirection === 'function') {\n                    console.log('MindMapEditor: Calling adapter.urlClickedWithDirection');\n                    adapter.urlClickedWithDirection(url, direction);\n                } else {\n                    console.error('MindMapEditor: adapter.urlClickedWithDirection is not a function');\n                }\n            } catch (error) {\n                console.error('MindMapEditor: Error in handleUrlClickWithDirection:', error);\n            }\n        };\n\n        console.log('MindMapEditor: QWebChannel has been set up successfully');\n        console.log('MindMapEditor: Adapter methods available:', Object.getOwnPropertyNames(adapter));\n\n        // 检查window.load是否已经触发\n        if (document.readyState === 'complete') {\n            console.log('MindMapEditor: Window already loaded, calling initOnLoad manually');\n            window.mindMapEditor.initOnLoad();\n        } else {\n            console.log('MindMapEditor: Window not yet loaded, VXCore will handle initOnLoad');\n        }\n    });\n});\n\n// 添加全局大纲窗口控制函数\nwindow.showOutline = function() {\n    if (window.mindMapEditor) {\n        const outlineFeature = window.mindMapEditor.getFeature('outline');\n        if (outlineFeature) {\n            outlineFeature.showOutlineWindow();\n        }\n    }\n}; "
  },
  {
    "path": "src/data/extra/web/js/nodelinemapper.js",
    "content": "// Manage nodes with line number and heading nodes.\nclass NodeLineMapper {\n    constructor(p_adapter, p_container) {\n        // Provide functionality.\n        this.adapter = p_adapter;\n\n        this.container = p_container;\n\n        this.sourceLineClassName = 'source-line';\n\n        this.sourceLineAttributeName = 'data-source-line';\n\n        this.nodesWithSourceLine = null;\n\n        this.headingNodes = [];\n\n        this.smoothAnchorScroll = false;\n\n        window.addEventListener(\n            'scroll',\n            (p_event) => {\n                if (this.adapter.isScrollMuted()) {\n                    return;\n                }\n\n                this.updateAfterScrollUnmuted();\n            },\n            { passive: true });\n\n        this.adapter.on('basicMarkdownRendered', () => {\n            this.updateHeadingNodes();\n        });\n    }\n\n    fetchAllNodesWithLineNumber() {\n        if (!this.nodesWithSourceLine) {\n            this.nodesWithSourceLine = this.container.getElementsByClassName(this.sourceLineClassName);\n        }\n    }\n\n    getHeadingContent(p_node) {\n        return p_node.textContent;\n    }\n\n    updateHeadingNodes() {\n        this.headingNodes = this.container.querySelectorAll(\"h1, h2, h3, h4, h5, h6\");\n        let headings = [];\n        let needSectionNumber = window.vxOptions.sectionNumberEnabled;\n        let regExp = Utils.headingSequenceRegExp();\n        for (let i = 0; i < this.headingNodes.length; ++i) {\n            let node = this.headingNodes[i];\n            let headingContent = this.getHeadingContent(node);\n            headings.push({\n                name: headingContent,\n                level: parseInt(node.tagName.substr(1)),\n                anchor: node.id\n            });\n            if (needSectionNumber && regExp.test(headingContent)) {\n                needSectionNumber = false;\n            }\n        }\n\n        this.adapter.setSectionNumberEnabled(needSectionNumber);\n\n        this.adapter.setHeadings(headings);\n    }\n\n    getViewYOfLine(p_lineNumber) {\n        if (p_lineNumber == 0) {\n            return null;\n        }\n\n        this.fetchAllNodesWithLineNumber();\n\n        // Binary search the last node with line number not larger than @p_lineNumber.\n        let targetNode = this.binarySearchNodeForLineNumber(this.nodesWithSourceLine, p_lineNumber);\n        if (targetNode) {\n            return targetNode.getBoundingClientRect().top;\n        } else {\n            return null;\n        }\n    }\n\n    scrollToLine(p_lineNumber) {\n        if (p_lineNumber == 0) {\n            this.scrollToY(0, false, true);\n            return;\n        }\n\n        this.fetchAllNodesWithLineNumber();\n\n        // Binary search the last node with line number not larger than @p_lineNumber.\n        let targetNode = this.binarySearchNodeForLineNumber(this.nodesWithSourceLine, p_lineNumber);\n        if (targetNode) {\n            this.scrollToNode(targetNode, false, true);\n        } else {\n            this.scrollToY(0, false, true);\n        }\n    }\n\n    scrollToAnchor(p_anchor) {\n        let node = document.getElementById(p_anchor);\n        if (node) {\n            // No need to defer since it is driven by user interaction.\n            this.scrollToNode(node, this.smoothAnchorScroll, false);\n        }\n    }\n\n    isValidY(p_pos) {\n        let maxm = document.documentElement.scrollHeight - document.documentElement.clientHeight;\n        return p_pos >= 0 && p_pos <= maxm;\n    }\n\n    scrollToY(p_pos, p_smooth, p_deferred) {\n        if (!this.isValidY(p_pos)) {\n            return;\n        }\n\n        if (p_deferred) {\n            window.setTimeout(() => {\n                this.scrollToY(p_pos, p_smooth, false);\n            }, 300);\n        } else {\n            this.adapter.muteScroll();\n            window.scrollTo({ top: p_pos,\n                              behavior: p_smooth ? 'smooth' : 'auto' });\n            this.adapter.unmuteScroll();\n        }\n    }\n\n    scrollToNode(p_node, p_smooth, p_deferred) {\n        if (p_deferred) {\n            window.setTimeout(() => {\n                this.scrollToNode(p_node, p_smooth, false);\n            }, 300);\n        } else {\n            this.adapter.muteScroll();\n            p_node.scrollIntoView({ behavior: p_smooth ? 'smooth' : 'auto',\n                                    block: 'start',\n                                    inline: 'nearest' });\n            this.adapter.unmuteScroll();\n        }\n    }\n\n    binarySearchNodeForLineNumber(p_nodes, p_lineNumber) {\n        let left = 0;\n        let right = p_nodes.length - 1;\n        let lastIdx = -1;\n        while (left <= right) {\n            let mid = Math.floor((left + right) / 2);\n            let lineNumber = parseInt(p_nodes[mid].getAttribute(this.sourceLineAttributeName));\n            if (lineNumber > p_lineNumber) {\n                right = mid - 1;\n            } else if (lineNumber == p_lineNumber) {\n                return p_nodes[mid];\n            } else {\n                lastIdx = mid;\n                left = mid + 1;\n            }\n        }\n\n        if (lastIdx != -1) {\n            return p_nodes[lastIdx];\n        } else {\n            return null;\n        }\n    }\n\n    // Return the index, -1 if not found.\n    binarySearchTopNode(p_nodes) {\n        if (p_nodes.length == 0) {\n            return -1;\n        }\n\n        let threshold = 30;\n        let left = 0;\n        let right = p_nodes.length - 1;\n        while (left < right) {\n            let mid = Math.ceil((left + right) / 2);\n            let rect = p_nodes[mid].getBoundingClientRect();\n            if (rect.y > threshold) {\n                right = mid - 1;\n            } else if (rect.bottom > 0) {\n                return mid;\n            } else {\n                left = mid;\n            }\n        }\n\n        let rect = p_nodes[left].getBoundingClientRect();\n        if (rect.y <= threshold) {\n            return left;\n        }\n        return -1;\n    }\n\n    updateTopLineNumber() {\n        this.fetchAllNodesWithLineNumber();\n\n        let idx = this.binarySearchTopNode(this.nodesWithSourceLine);\n        let lineNumber = -1;\n        if (idx > -1) {\n            lineNumber = parseInt(this.nodesWithSourceLine[idx].getAttribute(this.sourceLineAttributeName));\n        } else if (document.documentElement.scrollTop < 30) {\n            lineNumber = 0;\n        }\n\n        this.adapter.setTopLineNumber(lineNumber);\n    }\n\n    updateCurrentHeading() {\n        let idx = this.currentHeadingIndex();\n        let anchor = '';\n        if (idx > -1) {\n            anchor = this.headingNodes[idx].id;\n        }\n\n        this.adapter.setCurrentHeadingAnchor(idx, anchor);\n    }\n\n    currentHeadingIndex() {\n        return this.binarySearchTopNode(this.headingNodes);\n    }\n\n    updateAfterScrollUnmuted() {\n        this.updateCurrentHeading();\n        this.updateTopLineNumber();\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/outline.js",
    "content": "var vxOutlineToc = [];\n\nvar setVisible = function(node, visible) {\n    var cl = 'hide-none';\n    if (visible) {\n        node.classList.remove(cl);\n    } else {\n        node.classList.add(cl);\n    }\n};\n\nvar isVisible = function(node) {\n    var cl = 'hide-none';\n    return !node.classList.contains(cl);\n};\n\nvar setPostContentExpanded = function(node, expanded) {\n    var cl = 'col-expand';\n    if (expanded) {\n        node.classList.add(cl);\n    } else {\n        node.classList.remove(cl);\n    }\n};\n\nvar setOutlinePanelVisible = function(visible) {\n    var outlinePanel = document.getElementById('outline-panel');\n    var postContent = document.getElementById('post-content');\n\n    setVisible(outlinePanel, visible);\n    setPostContentExpanded(postContent, !visible);\n};\n\nvar isOutlinePanelVisible = function() {\n    var outlinePanel = document.getElementById('outline-panel');\n    return isVisible(outlinePanel);\n};\n\nwindow.addEventListener('load', function() {\n    var outlinePanel = document.getElementById('outline-panel');\n    outlinePanel.style.display = 'initial';\n\n    var floatingContainer = document.getElementById('container-floating');\n    floatingContainer.style.display = 'initial';\n\n    var outlineContent = document.getElementById('outline-content');\n    var postContent = document.getElementById('post-content');\n\n    // Escape @text to Html.\n    var escapeHtml = function(text) {\n        var map = {\n            '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&#039;'\n        };\n\n        return text.replace(/[&<>\"']/g, function(m) { return map[m]; });\n    }\n\n    // Fetch the outline.\n    var headers = postContent.querySelectorAll(\"h1, h2, h3, h4, h5, h6\");\n    vxOutlineToc = [];\n    for (var i = 0; i < headers.length; ++i) {\n        var header = headers[i];\n\n        vxOutlineToc.push({\n            level: parseInt(header.tagName.substr(1)),\n            anchor: header.id,\n            title: escapeHtml(header.textContent)\n        });\n    }\n\n    if (vxOutlineToc.length == 0) {\n        setOutlinePanelVisible(false);\n        setVisible(floatingContainer, false);\n        return;\n    }\n\n    var baseLevel = baseLevelOfToc(vxOutlineToc);\n    var tocTree = tocToTree(toPerfectToc(vxOutlineToc, baseLevel), baseLevel);\n\n    outlineContent.innerHTML = tocTree;\n    setOutlinePanelVisible(true);\n    setVisible(floatingContainer, true);\n});\n\n// Return the topest level of @vxOutlineToc, starting from 1.\nvar baseLevelOfToc = function(p_toc) {\n    var level = -1;\n    for (i in p_toc) {\n        if (level == -1) {\n            level = p_toc[i].level;\n        } else if (level > p_toc[i].level) {\n            level = p_toc[i].level;\n        }\n    }\n\n    if (level == -1) {\n        level = 1;\n    }\n\n    return level;\n};\n\n// Handle wrong title levels, such as '#' followed by '###'\nvar toPerfectToc = function(p_toc, p_baseLevel) {\n    var i;\n    var curLevel = p_baseLevel - 1;\n    var perfToc = [];\n    for (i in p_toc) {\n        var item = p_toc[i];\n\n        // Insert empty header.\n        while (item.level > curLevel + 1) {\n            curLevel += 1;\n            var tmp = { level: curLevel,\n                        anchor: '',\n                        title: '[EMPTY]'\n                      };\n            perfToc.push(tmp);\n        }\n\n        perfToc.push(item);\n        curLevel = item.level;\n    }\n\n    return perfToc;\n};\n\nvar itemToHtml = function(item) {\n    return '<a href=\"#' + item.anchor + '\" title=\"' + item.title + '\" data=\"' + item.anchor + '\">' + item.title + '</a>';\n};\n\n// Turn a perfect toc to a tree using <ul>\nvar tocToTree = function(p_toc, p_baseLevel) {\n    var i;\n    var front = '<li>';\n    var ending = ['</li>'];\n    var curLevel = p_baseLevel;\n    for (i in p_toc) {\n        var item = p_toc[i];\n        if (item.level == curLevel) {\n            front += '</li>';\n            front += '<li>';\n            front += itemToHtml(item);\n        } else if (item.level > curLevel) {\n            // assert(item.level - curLevel == 1)\n            front += '<ul>';\n            ending.push('</ul>');\n            front += '<li>';\n            front += itemToHtml(item);\n            ending.push('</li>');\n            curLevel = item.level;\n        } else {\n            while (item.level < curLevel) {\n                var ele = ending.pop();\n                front += ele;\n                if (ele == '</ul>') {\n                    curLevel--;\n                }\n            }\n            front += '</li>';\n            front += '<li>';\n            front += itemToHtml(item);\n        }\n    }\n    while (ending.length > 0) {\n        front += ending.pop();\n    }\n    front = front.replace(\"<li></li>\", \"\");\n    front = '<ul>' + front + '</ul>';\n    return front;\n};\n\nvar toggleMore = function() {\n    if (vxOutlineToc.length == 0) {\n        return;\n    }\n\n    var p = document.getElementById('floating-more');\n    if (isOutlinePanelVisible()) {\n        p.textContent = '<';\n        setOutlinePanelVisible(false);\n    } else {\n        p.textContent = '>';\n        setOutlinePanelVisible(true);\n    }\n};\n\nwindow.addEventListener('scroll', function() {\n    if (vxOutlineToc.length == 0 || !isOutlinePanelVisible()) {\n        return;\n    }\n\n    var postContent = document.getElementById('post-content');\n    var scrollTop = document.documentElement.scrollTop\n                    || document.body.scrollTop\n                    || window.pageYOffset;\n    var eles = postContent.querySelectorAll(\"h1, h2, h3, h4, h5, h6\");\n\n    if (eles.length == 0) {\n        return;\n    }\n\n    var idx = -1;\n    var biaScrollTop = scrollTop + 50;\n    for (var i = 0; i < eles.length; ++i) {\n        if (biaScrollTop >= eles[i].offsetTop) {\n            idx = i;\n        } else {\n            break;\n        }\n    }\n\n    var header = '';\n    if (idx != -1) {\n        header = eles[idx].id;\n    }\n\n    highlightItemOnlyInOutline(header);\n});\n\nvar highlightItemOnlyInOutline = function(id) {\n    var cl = 'outline-bold';\n    var outlineContent = document.getElementById('outline-content');\n    var eles = outlineContent.querySelectorAll(\"a\");\n    var target = null;\n    for (var i = 0; i < eles.length; ++i) {\n        var ele = eles[i];\n        if (ele.getAttribute('data') == id) {\n            target = ele;\n            ele.classList.add(cl);\n        } else {\n            ele.classList.remove(cl);\n        }\n    }\n\n    // TODO: scroll target into view within the outline panel scroll area.\n};\n"
  },
  {
    "path": "src/data/extra/web/js/plantuml/README.md",
    "content": "# [synchro2](http://s.plantuml.com/synchro2.js)\n\n# [zopfli](https://github.com/imaya/zopfli.js)\n"
  },
  {
    "path": "src/data/extra/web/js/plantuml/synchro2.js",
    "content": "GID = function(id){ return document.getElementById(id) };\n\nfunction encode64_(data) {\n r = \"\";\n for (i=0; i<data.length; i+=3) {\n  if (i+2==data.length) {\n   r +=append3bytes(data[i], data[i+1], 0);\n  } else if (i+1==data.length) {\n   r += append3bytes(data[i], 0, 0);\n  } else {\n   r += append3bytes(data[i], data[i+1], data[i+2]);\n  }\n}\nreturn r;\n}\n\nfunction append3bytes(b1, b2, b3) {\nc1 = b1 >> 2;\nc2 = ((b1 & 0x3) << 4) | (b2 >> 4);\nc3 = ((b2 & 0xF) << 2) | (b3 >> 6);\nc4 = b3 & 0x3F;\nr = \"\";\nr += encode6bit(c1 & 0x3F);\nr += encode6bit(c2 & 0x3F);\nr += encode6bit(c3 & 0x3F);\nr += encode6bit(c4 & 0x3F);\nreturn r;\n}\n\nfunction encode6bit(b) {\nif (b < 10) {\n return String.fromCharCode(48 + b);\n}\nb -= 10;\nif (b < 26) {\n return String.fromCharCode(65 + b);\n}\nb -= 26;\nif (b < 26) {\n return String.fromCharCode(97 + b);\n}\nb -= 26;\nif (b == 0) {\n return '-';\n}\nif (b == 1) {\n return '_';\n}\nreturn '?';\n}"
  },
  {
    "path": "src/data/extra/web/js/plantuml.js",
    "content": "class PlantUml extends GraphRenderer {\n    constructor() {\n        super();\n\n        this.name = 'plantuml';\n\n        this.graphDivClass = 'vx-plantuml-graph';\n\n        this.extraScripts = [this.scriptFolderPath + '/plantuml/synchro2.js',\n                             this.scriptFolderPath + '/plantuml/zopfli.raw.min.js'];\n\n        this.serverUrl = 'http://www.plantuml.com/plantuml';\n\n        this.format = 'svg';\n\n        this.langs = ['plantuml', 'puml'];\n\n        this.useWeb = true;\n\n        this.nextLocalGraphIndex = 1;\n    }\n\n    registerInternal() {\n        this.vxcore.on('basicMarkdownRendered', () => {\n            this.reset();\n            this.renderCodeNodes(window.vxOptions.transformSvgToPngEnabled ? 'png' : 'svg');\n        });\n\n        this.vxcore.getWorker('markdownit').addLangsToSkipHighlight(this.langs);\n\n        this.useWeb = window.vxOptions.webPlantUml;\n        if (!this.useWeb) {\n            this.extraScripts = [];\n        }\n    }\n\n    initialize(p_callback) {\n        if (super.initialized) {\n            return true;\n        }\n\n        if (!!window.vxOptions.plantUmlWebService) {\n            this.serverUrl = window.vxOptions.plantUmlWebService;\n            console.log('override PlantUml Web service', this.serverUrl);\n        }\n\n        return super.initialize(p_callback);\n    }\n\n    // Interface 1.\n    render(p_node, p_format) {\n        this.format = p_format;\n\n        super.render(p_node, p_classList);\n    }\n\n    // Interface 2.\n    renderCodeNodes(p_format) {\n        this.format = p_format;\n\n        super.renderCodeNodes();\n    }\n\n    renderOne(p_node, p_idx) {\n        let func = function(p_plantUml, p_node) {\n            let plantUml = p_plantUml;\n            let node = p_node;\n            return function(p_format, p_data) {\n                plantUml.handlePlantUmlResult(node, p_format, p_data);\n            };\n        };\n\n        if (this.useWeb) {\n            this.renderOnline(this.serverUrl,\n                              this.format,\n                              p_node.textContent,\n                              func(this, p_node));\n        } else {\n            this.renderLocal(this.format, p_node.textContent, func(this, p_node));\n        }\n        return true;\n    }\n\n    // Render a graph from @p_text in SVG format.\n    // p_callback(format, data).\n    renderText(p_text, p_callback) {\n        console.assert(this.useWeb, \"renderText() should be called only when web PlantUml is enabled\");\n\n        let func = () => {\n            this.renderOnline(this.serverUrl,\n                              'svg',\n                              p_text,\n                              p_callback);\n        }\n\n        if (!this.initialize(func)) {\n            return;\n        }\n\n        func();\n    }\n\n    // A helper function to render PlantUml online.\n    // Send request to @p_serverUrl to render @p_text as format @p_format.\n    renderOnline(p_serverUrl, p_format, p_text, p_callback) {\n        let url = this.getPlantUMLOnlineUrl(p_serverUrl, p_format, p_text);\n\n        if (p_format == 'png') {\n            Utils.httpGet(url, 'blob', function(p_resp) {\n                let blob = p_resp;\n                let reader = new FileReader();\n                reader.onload = function () {\n                    let dataUrl = reader.result;\n                    let png = dataUrl.substring(dataUrl.indexOf(',') + 1);\n                    p_callback(p_format, png);\n                };\n\n                reader.readAsDataURL(blob);\n            });\n        } else if (p_format == 'svg') {\n            Utils.httpGet(url, 'text', function(p_resp) {\n                p_callback(p_format, p_resp);\n            });\n        }\n    }\n\n    getPlantUMLOnlineUrl(p_serverUrl, p_format, p_text) {\n        let s = unescape(encodeURIComponent(p_text));\n        let arr = [];\n        for (let i = 0; i < s.length; i++) {\n            arr.push(s.charCodeAt(i));\n        }\n\n        let compressor = new Zopfli.RawDeflate(arr);\n        let compressed = compressor.compress();\n        let url = p_serverUrl + \"/\" + p_format + \"/\" + encode64_(compressed);\n        return url;\n    }\n\n    // A helper function to render PlantUml via local JAR.\n    renderLocal(p_format, p_text, p_callback) {\n        this.vxcore.renderGraph(this.id,\n            this.nextLocalGraphIndex++,\n            p_format,\n            'puml',\n            p_text,\n            function(id, index, format, data) {\n                p_callback(format, data);\n            });\n    }\n\n    handlePlantUmlResult(p_node, p_format, p_result) {\n        if (p_node && p_result.length > 0) {\n            let obj = null;\n            if (p_format == 'svg') {\n                obj = document.createElement('div');\n                obj.classList.add(this.graphDivClass);\n                obj.innerHTML = p_result;\n                window.vxImageViewer.setupSVGToView(obj.children[0], false);\n            } else {\n                obj = document.createElement('div');\n                obj.classList.add(this.graphDivClass);\n\n                let imgObj = document.createElement('img');\n                obj.appendChild(imgObj);\n                imgObj.src = \"data:image/\" + p_format + \";base64, \" + p_result;\n                window.vxImageViewer.setupIMGToView(imgObj);\n            }\n\n            Utils.checkSourceLine(p_node, obj);\n\n            Utils.replaceNodeWithPreCheck(p_node, obj);\n        }\n        this.finishRenderingOne();\n    }\n}\n\nwindow.vxcore.registerWorker(new PlantUml());\n"
  },
  {
    "path": "src/data/extra/web/js/prism/README.md",
    "content": "# [clipboard.min.js](https://github.com/zenorocha/clipboard.js)\nv2.0.6\n\n# [prism](https://prismjs.com/index.html)\nv1.21.0\n"
  },
  {
    "path": "src/data/extra/web/js/prism.js",
    "content": "(function() {\n    let scriptNode = document.createElement('script');\n\n    let scriptFolderPath = document.currentScript.src;\n    scriptFolderPath = scriptFolderPath.substr(0, scriptFolderPath.lastIndexOf('/'));\n    scriptNode.src = scriptFolderPath + '/prism/prism.min.js';\n    scriptNode.setAttribute('data-manual', '');\n    document.head.appendChild(scriptNode);\n})();\n\nclass PrismRenderer extends VxWorker {\n    constructor() {\n        super();\n\n        this.name = 'prism';\n\n        this.initialized = false;\n    }\n\n    registerInternal() {\n        this.vxcore.on('basicMarkdownRendered', () => {\n            this.renderCodeNodes(this.vxcore.contentContainer);\n        });\n    }\n\n    initialize() {\n        if (this.initialized) {\n            return;\n        }\n\n        this.initialized = true;\n\n        let markdownIt = this.vxcore.getWorker('markdownit');\n        Prism.plugins.filterHighlightAll.add((p_env) => {\n            return !markdownIt.langsToSkipHighlight.has(p_env.language);\n        });\n\n        /*\n        Prism.hooks.add('complete', () => {\n            this.finishWork();\n        });\n        */\n    }\n\n    // Interface 1.\n    // Fetch nodes to render from @p_node.\n    render(p_node) {\n        this.initialize();\n\n        // We use querySelectorAll() to get a snapshot since other VxWorkers may\n        // be changing the nodes, too.\n        let codeNodes = p_node.querySelectorAll('pre code');\n        this.doRender(p_node, codeNodes);\n    }\n\n    // Interface 2.\n    // Get code nodes from markdownIt directly.\n    renderCodeNodes(p_node) {\n        this.initialize();\n\n        let codeNodes = this.vxcore.getWorker('markdownit').getCodeNodes(null);\n        this.doRender(p_node, codeNodes);\n    }\n\n    // Whether has class lang- or language-.\n    hasLangSpecified(p_node) {\n        for (let i = 0; i < p_node.classList.length; ++i) {\n            let key = p_node.classList[i];\n            if (key.startsWith('lang-') || key.startsWith('language-')) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    doRender(p_containerNode, p_nodes) {\n        if (p_nodes.length > 0) {\n            // Add `lang-txt` to code nodes without any class to let Prism catch them.\n            for (let i = 0; i < p_nodes.length; ++i) {\n                if (!this.hasLangSpecified(p_nodes[i])) {\n                    p_nodes[i].classList.add('lang-txt');\n                }\n            }\n\n            Prism.highlightAllUnder(p_containerNode, false /* async or not */);\n\n            // Remove the toolbar.\n            if (window.vxOptions.removeCodeToolBarEnabled) {\n                this.removeToolBar(p_containerNode);\n            }\n        }\n\n        this.finishWork();\n    }\n\n    removeToolBar(p_containerNode) {\n        // Static list.\n        let toolBarNodes = p_containerNode.querySelectorAll('div.code-toolbar > div.toolbar');\n        for (let i = 0; i < toolBarNodes.length; ++i) {\n            toolBarNodes[i].outerHTML = '';\n            try { delete toolBarNodes[i]; } catch (err) {}\n        }\n    }\n}\n\nwindow.vxcore.registerWorker(new PrismRenderer());\n"
  },
  {
    "path": "src/data/extra/web/js/qwebchannel.js",
    "content": "/****************************************************************************\n**\n** Copyright (C) 2016 The Qt Company Ltd.\n** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com>\n** Contact: https://www.qt.io/licensing/\n**\n** This file is part of the QtWebChannel module of the Qt Toolkit.\n**\n** $QT_BEGIN_LICENSE:LGPL$\n** Commercial License Usage\n** Licensees holding valid commercial Qt licenses may use this file in\n** accordance with the commercial license agreement provided with the\n** Software or, alternatively, in accordance with the terms contained in\n** a written agreement between you and The Qt Company. For licensing terms\n** and conditions see https://www.qt.io/terms-conditions. For further\n** information use the contact form at https://www.qt.io/contact-us.\n**\n** GNU Lesser General Public License Usage\n** Alternatively, this file may be used under the terms of the GNU Lesser\n** General Public License version 3 as published by the Free Software\n** Foundation and appearing in the file LICENSE.LGPL3 included in the\n** packaging of this file. Please review the following information to\n** ensure the GNU Lesser General Public License version 3 requirements\n** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.\n**\n** GNU General Public License Usage\n** Alternatively, this file may be used under the terms of the GNU\n** General Public License version 2.0 or (at your option) the GNU General\n** Public license version 3 or any later version approved by the KDE Free\n** Qt Foundation. The licenses are as published by the Free Software\n** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3\n** included in the packaging of this file. Please review the following\n** information to ensure the GNU General Public License requirements will\n** be met: https://www.gnu.org/licenses/gpl-2.0.html and\n** https://www.gnu.org/licenses/gpl-3.0.html.\n**\n** $QT_END_LICENSE$\n**\n****************************************************************************/\n\n\"use strict\";\n\nvar QWebChannelMessageTypes = {\n    signal: 1,\n    propertyUpdate: 2,\n    init: 3,\n    idle: 4,\n    debug: 5,\n    invokeMethod: 6,\n    connectToSignal: 7,\n    disconnectFromSignal: 8,\n    setProperty: 9,\n    response: 10,\n};\n\nvar QWebChannel = function(transport, initCallback)\n{\n    if (typeof transport !== \"object\" || typeof transport.send !== \"function\") {\n        console.error(\"The QWebChannel expects a transport object with a send function and onmessage callback property.\" +\n                      \" Given is: transport: \" + typeof(transport) + \", transport.send: \" + typeof(transport.send));\n        return;\n    }\n\n    var channel = this;\n    this.transport = transport;\n\n    this.send = function(data)\n    {\n        if (typeof(data) !== \"string\") {\n            data = JSON.stringify(data);\n        }\n        channel.transport.send(data);\n    }\n\n    this.transport.onmessage = function(message)\n    {\n        var data = message.data;\n        if (typeof data === \"string\") {\n            data = JSON.parse(data);\n        }\n        switch (data.type) {\n            case QWebChannelMessageTypes.signal:\n                channel.handleSignal(data);\n                break;\n            case QWebChannelMessageTypes.response:\n                channel.handleResponse(data);\n                break;\n            case QWebChannelMessageTypes.propertyUpdate:\n                channel.handlePropertyUpdate(data);\n                break;\n            default:\n                console.error(\"invalid message received:\", message.data);\n                break;\n        }\n    }\n\n    this.execCallbacks = {};\n    this.execId = 0;\n    this.exec = function(data, callback)\n    {\n        if (!callback) {\n            // if no callback is given, send directly\n            channel.send(data);\n            return;\n        }\n        if (channel.execId === Number.MAX_VALUE) {\n            // wrap\n            channel.execId = Number.MIN_VALUE;\n        }\n        if (data.hasOwnProperty(\"id\")) {\n            console.error(\"Cannot exec message with property id: \" + JSON.stringify(data));\n            return;\n        }\n        data.id = channel.execId++;\n        channel.execCallbacks[data.id] = callback;\n        channel.send(data);\n    };\n\n    this.objects = {};\n\n    this.handleSignal = function(message)\n    {\n        var object = channel.objects[message.object];\n        if (object) {\n            object.signalEmitted(message.signal, message.args);\n        } else {\n            console.warn(\"Unhandled signal: \" + message.object + \"::\" + message.signal);\n        }\n    }\n\n    this.handleResponse = function(message)\n    {\n        if (!message.hasOwnProperty(\"id\")) {\n            console.error(\"Invalid response message received: \", JSON.stringify(message));\n            return;\n        }\n        channel.execCallbacks[message.id](message.data);\n        delete channel.execCallbacks[message.id];\n    }\n\n    this.handlePropertyUpdate = function(message)\n    {\n        for (var i in message.data) {\n            var data = message.data[i];\n            var object = channel.objects[data.object];\n            if (object) {\n                object.propertyUpdate(data.signals, data.properties);\n            } else {\n                console.warn(\"Unhandled property update: \" + data.object + \"::\" + data.signal);\n            }\n        }\n        channel.exec({type: QWebChannelMessageTypes.idle});\n    }\n\n    this.debug = function(message)\n    {\n        channel.send({type: QWebChannelMessageTypes.debug, data: message});\n    };\n\n    channel.exec({type: QWebChannelMessageTypes.init}, function(data) {\n        for (var objectName in data) {\n            var object = new QObject(objectName, data[objectName], channel);\n        }\n        // now unwrap properties, which might reference other registered objects\n        for (var objectName in channel.objects) {\n            channel.objects[objectName].unwrapProperties();\n        }\n        if (initCallback) {\n            initCallback(channel);\n        }\n        channel.exec({type: QWebChannelMessageTypes.idle});\n    });\n};\n\nfunction QObject(name, data, webChannel)\n{\n    this.__id__ = name;\n    webChannel.objects[name] = this;\n\n    // List of callbacks that get invoked upon signal emission\n    this.__objectSignals__ = {};\n\n    // Cache of all properties, updated when a notify signal is emitted\n    this.__propertyCache__ = {};\n\n    var object = this;\n\n    // ----------------------------------------------------------------------\n\n    this.unwrapQObject = function(response)\n    {\n        if (response instanceof Array) {\n            // support list of objects\n            var ret = new Array(response.length);\n            for (var i = 0; i < response.length; ++i) {\n                ret[i] = object.unwrapQObject(response[i]);\n            }\n            return ret;\n        }\n        if (!response\n            || !response[\"__QObject*__\"]\n            || response.id === undefined) {\n            return response;\n        }\n\n        var objectId = response.id;\n        if (webChannel.objects[objectId])\n            return webChannel.objects[objectId];\n\n        if (!response.data) {\n            console.error(\"Cannot unwrap unknown QObject \" + objectId + \" without data.\");\n            return;\n        }\n\n        var qObject = new QObject( objectId, response.data, webChannel );\n        qObject.destroyed.connect(function() {\n            if (webChannel.objects[objectId] === qObject) {\n                delete webChannel.objects[objectId];\n                // reset the now deleted QObject to an empty {} object\n                // just assigning {} though would not have the desired effect, but the\n                // below also ensures all external references will see the empty map\n                // NOTE: this detour is necessary to workaround QTBUG-40021\n                var propertyNames = [];\n                for (var propertyName in qObject) {\n                    propertyNames.push(propertyName);\n                }\n                for (var idx in propertyNames) {\n                    delete qObject[propertyNames[idx]];\n                }\n            }\n        });\n        // here we are already initialized, and thus must directly unwrap the properties\n        qObject.unwrapProperties();\n        return qObject;\n    }\n\n    this.unwrapProperties = function()\n    {\n        for (var propertyIdx in object.__propertyCache__) {\n            object.__propertyCache__[propertyIdx] = object.unwrapQObject(object.__propertyCache__[propertyIdx]);\n        }\n    }\n\n    function addSignal(signalData, isPropertyNotifySignal)\n    {\n        var signalName = signalData[0];\n        var signalIndex = signalData[1];\n        object[signalName] = {\n            connect: function(callback) {\n                if (typeof(callback) !== \"function\") {\n                    console.error(\"Bad callback given to connect to signal \" + signalName);\n                    return;\n                }\n\n                object.__objectSignals__[signalIndex] = object.__objectSignals__[signalIndex] || [];\n                object.__objectSignals__[signalIndex].push(callback);\n\n                if (!isPropertyNotifySignal && signalName !== \"destroyed\") {\n                    // only required for \"pure\" signals, handled separately for properties in propertyUpdate\n                    // also note that we always get notified about the destroyed signal\n                    webChannel.exec({\n                        type: QWebChannelMessageTypes.connectToSignal,\n                        object: object.__id__,\n                        signal: signalIndex\n                    });\n                }\n            },\n            disconnect: function(callback) {\n                if (typeof(callback) !== \"function\") {\n                    console.error(\"Bad callback given to disconnect from signal \" + signalName);\n                    return;\n                }\n                object.__objectSignals__[signalIndex] = object.__objectSignals__[signalIndex] || [];\n                var idx = object.__objectSignals__[signalIndex].indexOf(callback);\n                if (idx === -1) {\n                    console.error(\"Cannot find connection of signal \" + signalName + \" to \" + callback.name);\n                    return;\n                }\n                object.__objectSignals__[signalIndex].splice(idx, 1);\n                if (!isPropertyNotifySignal && object.__objectSignals__[signalIndex].length === 0) {\n                    // only required for \"pure\" signals, handled separately for properties in propertyUpdate\n                    webChannel.exec({\n                        type: QWebChannelMessageTypes.disconnectFromSignal,\n                        object: object.__id__,\n                        signal: signalIndex\n                    });\n                }\n            }\n        };\n    }\n\n    /**\n     * Invokes all callbacks for the given signalname. Also works for property notify callbacks.\n     */\n    function invokeSignalCallbacks(signalName, signalArgs)\n    {\n        var connections = object.__objectSignals__[signalName];\n        if (connections) {\n            connections.forEach(function(callback) {\n                callback.apply(callback, signalArgs);\n            });\n        }\n    }\n\n    this.propertyUpdate = function(signals, propertyMap)\n    {\n        // update property cache\n        for (var propertyIndex in propertyMap) {\n            var propertyValue = propertyMap[propertyIndex];\n            object.__propertyCache__[propertyIndex] = propertyValue;\n        }\n\n        for (var signalName in signals) {\n            // Invoke all callbacks, as signalEmitted() does not. This ensures the\n            // property cache is updated before the callbacks are invoked.\n            invokeSignalCallbacks(signalName, signals[signalName]);\n        }\n    }\n\n    this.signalEmitted = function(signalName, signalArgs)\n    {\n        invokeSignalCallbacks(signalName, this.unwrapQObject(signalArgs));\n    }\n\n    function addMethod(methodData)\n    {\n        var methodName = methodData[0];\n        var methodIdx = methodData[1];\n        object[methodName] = function() {\n            var args = [];\n            var callback;\n            for (var i = 0; i < arguments.length; ++i) {\n                var argument = arguments[i];\n                if (typeof argument === \"function\")\n                    callback = argument;\n                else if (argument instanceof QObject && webChannel.objects[argument.__id__] !== undefined)\n                    args.push({\n                        \"id\": argument.__id__\n                    });\n                else\n                    args.push(argument);\n            }\n\n            webChannel.exec({\n                \"type\": QWebChannelMessageTypes.invokeMethod,\n                \"object\": object.__id__,\n                \"method\": methodIdx,\n                \"args\": args\n            }, function(response) {\n                if (response !== undefined) {\n                    var result = object.unwrapQObject(response);\n                    if (callback) {\n                        (callback)(result);\n                    }\n                }\n            });\n        };\n    }\n\n    function bindGetterSetter(propertyInfo)\n    {\n        var propertyIndex = propertyInfo[0];\n        var propertyName = propertyInfo[1];\n        var notifySignalData = propertyInfo[2];\n        // initialize property cache with current value\n        // NOTE: if this is an object, it is not directly unwrapped as it might\n        // reference other QObject that we do not know yet\n        object.__propertyCache__[propertyIndex] = propertyInfo[3];\n\n        if (notifySignalData) {\n            if (notifySignalData[0] === 1) {\n                // signal name is optimized away, reconstruct the actual name\n                notifySignalData[0] = propertyName + \"Changed\";\n            }\n            addSignal(notifySignalData, true);\n        }\n\n        Object.defineProperty(object, propertyName, {\n            configurable: true,\n            get: function () {\n                var propertyValue = object.__propertyCache__[propertyIndex];\n                if (propertyValue === undefined) {\n                    // This shouldn't happen\n                    console.warn(\"Undefined value in property cache for property \\\"\" + propertyName + \"\\\" in object \" + object.__id__);\n                }\n\n                return propertyValue;\n            },\n            set: function(value) {\n                if (value === undefined) {\n                    console.warn(\"Property setter for \" + propertyName + \" called with undefined value!\");\n                    return;\n                }\n                object.__propertyCache__[propertyIndex] = value;\n                var valueToSend = value;\n                if (valueToSend instanceof QObject && webChannel.objects[valueToSend.__id__] !== undefined)\n                    valueToSend = { \"id\": valueToSend.__id__ };\n                webChannel.exec({\n                    \"type\": QWebChannelMessageTypes.setProperty,\n                    \"object\": object.__id__,\n                    \"property\": propertyIndex,\n                    \"value\": valueToSend\n                });\n            }\n        });\n\n    }\n\n    // ----------------------------------------------------------------------\n\n    data.methods.forEach(addMethod);\n\n    data.properties.forEach(bindGetterSetter);\n\n    data.signals.forEach(function(signal) { addSignal(signal, false); });\n\n    for (var name in data.enums) {\n        object[name] = data.enums[name];\n    }\n}\n\n//required for use with nodejs\nif (typeof module === 'object') {\n    module.exports = {\n        QWebChannel: QWebChannel\n    };\n}\n"
  },
  {
    "path": "src/data/extra/web/js/svg-to-image.js",
    "content": "class SvgToImage {\n    constructor() {\n\n    }\n\n    static loadImage(p_src, p_opt, p_callback) {\n        if (typeof p_opt === 'function') {\n            callback = p_opt;\n            p_opt = null;\n        }\n\n        let el = document.createElement('img');\n        let locked;\n\n        el.onload = function onLoaded () {\n            if (locked) return;\n            locked = true;\n\n            if (p_callback) p_callback(undefined, el);\n        };\n\n        el.onerror = function onError () {\n            if (locked) return;\n            locked = true;\n\n            if (p_callback) p_callback(new Error('Unable to load \"' + p_src + '\"'), el);\n        };\n\n        if (p_opt && p_opt.crossOrigin) {\n            el.crossOrigin = p_opt.crossOrigin;\n        }\n\n        el.src = p_src;\n\n        return el;\n    }\n\n    static svgToImage(p_svg, p_opt, p_callback) {\n        if (typeof p_opt === 'function') {\n            p_callback = p_opt;\n            p_opt = {};\n        }\n        p_callback = p_callback || function() {};\n        p_opt = p_opt || {};\n\n        let domUrl = this.getUrl();\n        if (!Array.isArray(p_svg)) {\n            p_svg = [ p_svg ];\n        }\n\n        let blob = null;\n        try {\n            blob = new window.Blob(p_svg, {\n                type: 'image/svg+xml;charset=utf-8'\n            });\n        } catch (e) {\n            console.error('failed to create blob', e);\n        }\n\n        let url = domUrl.createObjectURL(blob);\n        this.loadImage(url, p_opt, function(err, img) {\n            domUrl.revokeObjectURL(url);\n            if (err || SvgToImage.checkCanvasToDataURL(img) === null) {\n                // try again for Safari 8.0, using simple encodeURIComponent\n                // this will fail with DOM content but at least it works with SVG.\n                let url2 = 'data:image/svg+xml,' + encodeURIComponent(p_svg.join(''));\n                return SvgToImage.loadImage(url2, p_opt, p_callback);\n            }\n\n            p_callback(err, img)\n        });\n    }\n\n    static getUrl() {\n        return window.URL || window.webkitURL || window.mozURL || window.msURL;\n    }\n\n    static checkCanvasToDataURL(p_image) {\n        let canvas = document.createElement('canvas');\n        let ctx = canvas.getContext('2d');\n        canvas.height = p_image.height;\n        canvas.width = p_image.width;\n        ctx.drawImage(p_image, 0, 0);\n        let dataUrl = null;\n        try {\n            dataUrl = canvas.toDataURL();\n        } catch (err) {\n\n        }\n        return dataUrl\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/turndown/README.md",
    "content": "# [turndown](https://github.com/domchristie/turndown)\nv7.0.0  \nDom Christie\n\n# [turndown](https://github.com/domchristie/turndown-plugin-gfm)\nv1.0.2  \nDom Christie\n"
  },
  {
    "path": "src/data/extra/web/js/turndown/turndown-plugin-gfm.js",
    "content": "var turndownPluginGfm = (function (exports) {\n'use strict';\n\nvar highlightRegExp = /highlight-(?:text|source)-([a-z0-9]+)/;\n\nfunction highlightedCodeBlock (turndownService) {\n  turndownService.addRule('highlightedCodeBlock', {\n    filter: function (node) {\n      var firstChild = node.firstChild;\n      return (\n        node.nodeName === 'DIV' &&\n        highlightRegExp.test(node.className) &&\n        firstChild &&\n        firstChild.nodeName === 'PRE'\n      )\n    },\n    replacement: function (content, node, options) {\n      var className = node.className || '';\n      var language = (className.match(highlightRegExp) || [null, ''])[1];\n\n      return (\n        '\\n\\n' + options.fence + language + '\\n' +\n        node.firstChild.textContent +\n        '\\n' + options.fence + '\\n\\n'\n      )\n    }\n  });\n}\n\nfunction strikethrough (turndownService) {\n  turndownService.addRule('strikethrough', {\n    filter: ['del', 's', 'strike'],\n    replacement: function (content) {\n      return '~' + content + '~'\n    }\n  });\n}\n\nvar indexOf = Array.prototype.indexOf;\nvar every = Array.prototype.every;\nvar rules = {};\nvar configs = { autoHead: false };\n\nrules.tableCell = {\n  filter: ['th', 'td'],\n  replacement: function (content, node) {\n    content = content.replace(/[\\r\\n]/g, '');\n    return cell(content, node)\n  }\n};\n\nrules.tableRow = {\n  filter: 'tr',\n  replacement: function (content, node) {\n    var borderCells = '';\n    var alignMap = { left: ':--', right: '--:', center: ':-:' };\n\n    if (isHeadingRow(node)) {\n      for (var i = 0; i < node.childNodes.length; i++) {\n        var border = '---';\n        var align = (\n          node.childNodes[i].getAttribute('align') || ''\n        ).toLowerCase();\n\n        if (align) border = alignMap[align] || border;\n\n        borderCells += cell(border, node.childNodes[i]);\n      }\n    } else if (configs.autoHead && isFirstRow(node)) {\n      var fakeHead = '';\n\n      for (var i = 0; i < node.childNodes.length; i++) {\n        // Add a fake head.\n        fakeHead += cell('<br>', node.childNodes[i]);\n\n        var border = '---';\n        var align = (\n          node.childNodes[i].getAttribute('align') || ''\n        ).toLowerCase();\n\n        if (align) border = alignMap[align] || border;\n\n        borderCells += cell(border, node.childNodes[i]);\n      }\n\n      return '\\n' + fakeHead + '\\n' + borderCells + '\\n' + content;\n    }\n\n    return '\\n' + content + (borderCells ? '\\n' + borderCells : '')\n  }\n};\n\nrules.table = {\n  // If configs.autoHead is false, only convert tables with a heading row.\n  // Tables with no heading row are kept using `keep` (see below).\n  filter: function (node) {\n    return node.nodeName === 'TABLE'\n           && (configs.autoHead || isHeadingRow(node.rows[0]))\n  },\n\n  replacement: function (content) {\n    // Ensure there are no blank lines\n    content = content.replace('\\n\\n', '\\n');\n    return '\\n\\n' + content + '\\n\\n'\n  }\n};\n\nrules.tableSection = {\n  filter: ['thead', 'tbody', 'tfoot'],\n  replacement: function (content) {\n    return content\n  }\n};\n\nfunction isFirstRow (tr) {\n  var parentNode = tr.parentNode;\n  return parentNode.firstChild === tr\n         && (parentNode.nodeName === 'TABLE' || isFirstTbody(parentNode));\n}\n\n// A tr is a heading row if:\n// - the parent is a THEAD\n// - or if its the first child of the TABLE or the first TBODY (possibly\n//   following a blank THEAD)\n// - and every cell is a TH\nfunction isHeadingRow (tr) {\n  var parentNode = tr.parentNode;\n  return (\n    parentNode.nodeName === 'THEAD' ||\n    (\n      parentNode.firstChild === tr &&\n      (parentNode.nodeName === 'TABLE' || isFirstTbody(parentNode)) &&\n      every.call(tr.childNodes, function (n) { return n.nodeName === 'TH' })\n    )\n  )\n}\n\nfunction isFirstTbody (element) {\n  var previousSibling = element.previousSibling;\n  return (\n    element.nodeName === 'TBODY' && (\n      !previousSibling ||\n      (\n        previousSibling.nodeName === 'THEAD' &&\n        /^\\s*$/i.test(previousSibling.textContent)\n      ) ||\n      // For parsting table from Microsoft Excel.\n      previousSibling.nodeName == 'COLGROUP'\n    )\n  )\n}\n\nfunction cell (content, node) {\n  var index = indexOf.call(node.parentNode.childNodes, node);\n  var prefix = ' ';\n  if (index === 0) prefix = '| ';\n  return prefix + content + ' |'\n}\n\nfunction tables (turndownService) {\n  if (!configs.autoHead) {\n    turndownService.keep(function (node) {\n      return node.nodeName === 'TABLE' && !isHeadingRow(node.rows[0])\n    });\n  }\n\n  for (var key in rules) turndownService.addRule(key, rules[key]);\n}\n\nfunction taskListItems (turndownService) {\n  turndownService.addRule('taskListItems', {\n    filter: function (node) {\n      return node.type === 'checkbox' && node.parentNode.nodeName === 'LI'\n    },\n    replacement: function (content, node) {\n      return (node.checked ? '[x]' : '[ ]') + ' '\n    }\n  });\n}\n\nfunction gfm (turndownService) {\n  turndownService.use([\n    highlightedCodeBlock,\n    strikethrough,\n    tables,\n    taskListItems\n  ]);\n}\n\nexports.gfm = gfm;\nexports.highlightedCodeBlock = highlightedCodeBlock;\nexports.strikethrough = strikethrough;\nexports.tables = tables;\nexports.taskListItems = taskListItems;\nexports.options = configs;\n\nreturn exports;\n\n}({}));\n"
  },
  {
    "path": "src/data/extra/web/js/turndown/turndown.js",
    "content": "var TurndownService = (function () {\n  'use strict';\n\n  function extend (destination) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (source.hasOwnProperty(key)) destination[key] = source[key];\n      }\n    }\n    return destination\n  }\n\n  function repeat (character, count) {\n    return Array(count + 1).join(character)\n  }\n\n  var blockElements = [\n    'ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS',\n    'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE',\n    'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER',\n    'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES',\n    'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD',\n    'TFOOT', 'TH', 'THEAD', 'TR', 'UL'\n  ];\n\n  function isBlock (node) {\n    return is(node, blockElements)\n  }\n\n  var voidElements = [\n    'AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT',\n    'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR'\n  ];\n\n  function isVoid (node) {\n    return is(node, voidElements)\n  }\n\n  function hasVoid (node) {\n    return has(node, voidElements)\n  }\n\n  var meaningfulWhenBlankElements = [\n    'A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT',\n    'AUDIO', 'VIDEO'\n  ];\n\n  function isMeaningfulWhenBlank (node) {\n    return is(node, meaningfulWhenBlankElements)\n  }\n\n  function hasMeaningfulWhenBlank (node) {\n    return has(node, meaningfulWhenBlankElements)\n  }\n\n  function is (node, tagNames) {\n    return tagNames.indexOf(node.nodeName) >= 0\n  }\n\n  function has (node, tagNames) {\n    return (\n      node.getElementsByTagName &&\n      tagNames.some(function (tagName) {\n        return node.getElementsByTagName(tagName).length\n      })\n    )\n  }\n\n  var rules = {};\n\n  rules.paragraph = {\n    filter: 'p',\n\n    replacement: function (content) {\n      return '\\n\\n' + content + '\\n\\n'\n    }\n  };\n\n  rules.lineBreak = {\n    filter: 'br',\n\n    replacement: function (content, node, options) {\n      return options.br + '\\n'\n    }\n  };\n\n  rules.heading = {\n    filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n    replacement: function (content, node, options) {\n      var hLevel = Number(node.nodeName.charAt(1));\n\n      if (options.headingStyle === 'setext' && hLevel < 3) {\n        var underline = repeat((hLevel === 1 ? '=' : '-'), content.length);\n        return (\n          '\\n\\n' + content + '\\n' + underline + '\\n\\n'\n        )\n      } else {\n        return '\\n\\n' + repeat('#', hLevel) + ' ' + content + '\\n\\n'\n      }\n    }\n  };\n\n  rules.blockquote = {\n    filter: 'blockquote',\n\n    replacement: function (content) {\n      content = content.replace(/^\\n+|\\n+$/g, '');\n      content = content.replace(/^/gm, '> ');\n      return '\\n\\n' + content + '\\n\\n'\n    }\n  };\n\n  rules.list = {\n    filter: ['ul', 'ol'],\n\n    replacement: function (content, node) {\n      var parent = node.parentNode;\n      if (parent.nodeName === 'LI' && parent.lastElementChild === node) {\n        return '\\n' + content\n      } else {\n        return '\\n\\n' + content + '\\n\\n'\n      }\n    }\n  };\n\n  rules.listItem = {\n    filter: 'li',\n\n    replacement: function (content, node, options) {\n      content = content\n        .replace(/^\\n+/, '') // remove leading newlines\n        .replace(/\\n+$/, '\\n') // replace trailing newlines with just a single one\n        .replace(/\\n/gm, '\\n    '); // indent\n      var prefix = options.bulletListMarker + '   ';\n      var parent = node.parentNode;\n      if (parent.nodeName === 'OL') {\n        var start = parent.getAttribute('start');\n        var index = Array.prototype.indexOf.call(parent.children, node);\n        prefix = (start ? Number(start) + index : index + 1) + '.  ';\n      }\n      return (\n        prefix + content + (node.nextSibling && !/\\n$/.test(content) ? '\\n' : '')\n      )\n    }\n  };\n\n  rules.indentedCodeBlock = {\n    filter: function (node, options) {\n      return (\n        options.codeBlockStyle === 'indented' &&\n        node.nodeName === 'PRE' &&\n        node.firstChild &&\n        node.firstChild.nodeName === 'CODE'\n      )\n    },\n\n    replacement: function (content, node, options) {\n      return (\n        '\\n\\n    ' +\n        node.firstChild.textContent.replace(/\\n/g, '\\n    ') +\n        '\\n\\n'\n      )\n    }\n  };\n\n  rules.fencedCodeBlock = {\n    filter: function (node, options) {\n      return (\n        options.codeBlockStyle === 'fenced' &&\n        node.nodeName === 'PRE' &&\n        node.firstChild &&\n        node.firstChild.nodeName === 'CODE'\n      )\n    },\n\n    replacement: function (content, node, options) {\n      var className = node.firstChild.getAttribute('class') || '';\n      var language = (className.match(/language-(\\S+)/) || [null, ''])[1];\n      var code = node.firstChild.textContent;\n\n      var fenceChar = options.fence.charAt(0);\n      var fenceSize = 3;\n      var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm');\n\n      var match;\n      while ((match = fenceInCodeRegex.exec(code))) {\n        if (match[0].length >= fenceSize) {\n          fenceSize = match[0].length + 1;\n        }\n      }\n\n      var fence = repeat(fenceChar, fenceSize);\n\n      return (\n        '\\n\\n' + fence + language + '\\n' +\n        code.replace(/\\n$/, '') +\n        '\\n' + fence + '\\n\\n'\n      )\n    }\n  };\n\n  rules.horizontalRule = {\n    filter: 'hr',\n\n    replacement: function (content, node, options) {\n      return '\\n\\n' + options.hr + '\\n\\n'\n    }\n  };\n\n  rules.inlineLink = {\n    filter: function (node, options) {\n      return (\n        options.linkStyle === 'inlined' &&\n        node.nodeName === 'A' &&\n        node.getAttribute('href')\n      )\n    },\n\n    replacement: function (content, node) {\n      var href = node.getAttribute('href');\n      var title = cleanAttribute(node.getAttribute('title'));\n      if (title) title = ' \"' + title + '\"';\n      return '[' + content + '](' + href + title + ')'\n    }\n  };\n\n  rules.referenceLink = {\n    filter: function (node, options) {\n      return (\n        options.linkStyle === 'referenced' &&\n        node.nodeName === 'A' &&\n        node.getAttribute('href')\n      )\n    },\n\n    replacement: function (content, node, options) {\n      var href = node.getAttribute('href');\n      var title = cleanAttribute(node.getAttribute('title'));\n      if (title) title = ' \"' + title + '\"';\n      var replacement;\n      var reference;\n\n      switch (options.linkReferenceStyle) {\n        case 'collapsed':\n          replacement = '[' + content + '][]';\n          reference = '[' + content + ']: ' + href + title;\n          break\n        case 'shortcut':\n          replacement = '[' + content + ']';\n          reference = '[' + content + ']: ' + href + title;\n          break\n        default:\n          var id = this.references.length + 1;\n          replacement = '[' + content + '][' + id + ']';\n          reference = '[' + id + ']: ' + href + title;\n      }\n\n      this.references.push(reference);\n      return replacement\n    },\n\n    references: [],\n\n    append: function (options) {\n      var references = '';\n      if (this.references.length) {\n        references = '\\n\\n' + this.references.join('\\n') + '\\n\\n';\n        this.references = []; // Reset references\n      }\n      return references\n    }\n  };\n\n  rules.emphasis = {\n    filter: ['em', 'i'],\n\n    replacement: function (content, node, options) {\n      if (!content.trim()) return ''\n      return options.emDelimiter + content + options.emDelimiter\n    }\n  };\n\n  rules.strong = {\n    filter: ['strong', 'b'],\n\n    replacement: function (content, node, options) {\n      if (!content.trim()) return ''\n      return options.strongDelimiter + content + options.strongDelimiter\n    }\n  };\n\n  rules.code = {\n    filter: function (node) {\n      var hasSiblings = node.previousSibling || node.nextSibling;\n      var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings;\n\n      return node.nodeName === 'CODE' && !isCodeBlock\n    },\n\n    replacement: function (content) {\n      if (!content.trim()) return ''\n\n      var delimiter = '`';\n      var leadingSpace = '';\n      var trailingSpace = '';\n      var matches = content.match(/`+/gm);\n      if (matches) {\n        if (/^`/.test(content)) leadingSpace = ' ';\n        if (/`$/.test(content)) trailingSpace = ' ';\n        while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`';\n      }\n\n      return delimiter + leadingSpace + content + trailingSpace + delimiter\n    }\n  };\n\n  rules.image = {\n    filter: 'img',\n\n    replacement: function (content, node) {\n      var alt = cleanAttribute(node.getAttribute('alt'));\n      var src = node.getAttribute('src') || '';\n      var title = cleanAttribute(node.getAttribute('title'));\n      var titlePart = title ? ' \"' + title + '\"' : '';\n      return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''\n    }\n  };\n\n  function cleanAttribute (attribute) {\n    return attribute ? attribute.replace(/(\\n+\\s*)+/g, '\\n') : ''\n  }\n\n  /**\n   * Manages a collection of rules used to convert HTML to Markdown\n   */\n\n  function Rules (options) {\n    this.options = options;\n    this._keep = [];\n    this._remove = [];\n\n    this.blankRule = {\n      replacement: options.blankReplacement\n    };\n\n    this.keepReplacement = options.keepReplacement;\n\n    this.defaultRule = {\n      replacement: options.defaultReplacement\n    };\n\n    this.array = [];\n    for (var key in options.rules) this.array.push(options.rules[key]);\n  }\n\n  Rules.prototype = {\n    add: function (key, rule) {\n      this.array.unshift(rule);\n    },\n\n    keep: function (filter) {\n      this._keep.unshift({\n        filter: filter,\n        replacement: this.keepReplacement\n      });\n    },\n\n    remove: function (filter) {\n      this._remove.unshift({\n        filter: filter,\n        replacement: function () {\n          return ''\n        }\n      });\n    },\n\n    forNode: function (node) {\n      if (node.isBlank) return this.blankRule\n      var rule;\n\n      if ((rule = findRule(this.array, node, this.options))) return rule\n      if ((rule = findRule(this._keep, node, this.options))) return rule\n      if ((rule = findRule(this._remove, node, this.options))) return rule\n\n      return this.defaultRule\n    },\n\n    forEach: function (fn) {\n      for (var i = 0; i < this.array.length; i++) fn(this.array[i], i);\n    }\n  };\n\n  function findRule (rules, node, options) {\n    for (var i = 0; i < rules.length; i++) {\n      var rule = rules[i];\n      if (filterValue(rule, node, options)) return rule\n    }\n    return void 0\n  }\n\n  function filterValue (rule, node, options) {\n    var filter = rule.filter;\n    if (typeof filter === 'string') {\n      if (filter === node.nodeName.toLowerCase()) return true\n    } else if (Array.isArray(filter)) {\n      if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true\n    } else if (typeof filter === 'function') {\n      if (filter.call(rule, node, options)) return true\n    } else {\n      throw new TypeError('`filter` needs to be a string, array, or function')\n    }\n  }\n\n  /**\n   * The collapseWhitespace function is adapted from collapse-whitespace\n   * by Luc Thevenard.\n   *\n   * The MIT License (MIT)\n   *\n   * Copyright (c) 2014 Luc Thevenard <lucthevenard@gmail.com>\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy\n   * of this software and associated documentation files (the \"Software\"), to deal\n   * in the Software without restriction, including without limitation the rights\n   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   * copies of the Software, and to permit persons to whom the Software is\n   * furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in\n   * all copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n   * THE SOFTWARE.\n   */\n\n  /**\n   * collapseWhitespace(options) removes extraneous whitespace from an the given element.\n   *\n   * @param {Object} options\n   */\n  function collapseWhitespace (options) {\n    var element = options.element;\n    var isBlock = options.isBlock;\n    var isVoid = options.isVoid;\n    var isPre = options.isPre || function (node) {\n      return node.nodeName === 'PRE'\n    };\n\n    if (!element.firstChild || isPre(element)) return\n\n    var prevText = null;\n    var prevVoid = false;\n\n    var prev = null;\n    var node = next(prev, element, isPre);\n\n    while (node !== element) {\n      if (node.nodeType === 3 || node.nodeType === 4) { // Node.TEXT_NODE or Node.CDATA_SECTION_NODE\n        var text = node.data.replace(/[ \\r\\n\\t]+/g, ' ');\n\n        if ((!prevText || / $/.test(prevText.data)) &&\n            !prevVoid && text[0] === ' ') {\n          text = text.substr(1);\n        }\n\n        // `text` might be empty at this point.\n        if (!text) {\n          node = remove(node);\n          continue\n        }\n\n        node.data = text;\n\n        prevText = node;\n      } else if (node.nodeType === 1) { // Node.ELEMENT_NODE\n        if (isBlock(node) || node.nodeName === 'BR') {\n          if (prevText) {\n            prevText.data = prevText.data.replace(/ $/, '');\n          }\n\n          prevText = null;\n          prevVoid = false;\n        } else if (isVoid(node)) {\n          // Avoid trimming space around non-block, non-BR void elements.\n          prevText = null;\n          prevVoid = true;\n        }\n      } else {\n        node = remove(node);\n        continue\n      }\n\n      var nextNode = next(prev, node, isPre);\n      prev = node;\n      node = nextNode;\n    }\n\n    if (prevText) {\n      prevText.data = prevText.data.replace(/ $/, '');\n      if (!prevText.data) {\n        remove(prevText);\n      }\n    }\n  }\n\n  /**\n   * remove(node) removes the given node from the DOM and returns the\n   * next node in the sequence.\n   *\n   * @param {Node} node\n   * @return {Node} node\n   */\n  function remove (node) {\n    var next = node.nextSibling || node.parentNode;\n\n    node.parentNode.removeChild(node);\n\n    return next\n  }\n\n  /**\n   * next(prev, current, isPre) returns the next node in the sequence, given the\n   * current and previous nodes.\n   *\n   * @param {Node} prev\n   * @param {Node} current\n   * @param {Function} isPre\n   * @return {Node}\n   */\n  function next (prev, current, isPre) {\n    if ((prev && prev.parentNode === current) || isPre(current)) {\n      return current.nextSibling || current.parentNode\n    }\n\n    return current.firstChild || current.nextSibling || current.parentNode\n  }\n\n  /*\n   * Set up window for Node.js\n   */\n\n  var root = (typeof window !== 'undefined' ? window : {});\n\n  /*\n   * Parsing HTML strings\n   */\n\n  function canParseHTMLNatively () {\n    var Parser = root.DOMParser;\n    var canParse = false;\n\n    // Adapted from https://gist.github.com/1129031\n    // Firefox/Opera/IE throw errors on unsupported types\n    try {\n      // WebKit returns null on unsupported types\n      if (new Parser().parseFromString('', 'text/html')) {\n        canParse = true;\n      }\n    } catch (e) {}\n\n    return canParse\n  }\n\n  function createHTMLParser () {\n    var Parser = function () {};\n\n    {\n      if (shouldUseActiveX()) {\n        Parser.prototype.parseFromString = function (string) {\n          var doc = new window.ActiveXObject('htmlfile');\n          doc.designMode = 'on'; // disable on-page scripts\n          doc.open();\n          doc.write(string);\n          doc.close();\n          return doc\n        };\n      } else {\n        Parser.prototype.parseFromString = function (string) {\n          var doc = document.implementation.createHTMLDocument('');\n          doc.open();\n          doc.write(string);\n          doc.close();\n          return doc\n        };\n      }\n    }\n    return Parser\n  }\n\n  function shouldUseActiveX () {\n    var useActiveX = false;\n    try {\n      document.implementation.createHTMLDocument('').open();\n    } catch (e) {\n      if (window.ActiveXObject) useActiveX = true;\n    }\n    return useActiveX\n  }\n\n  var HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser();\n\n  function RootNode (input) {\n    var root;\n    if (typeof input === 'string') {\n      var doc = htmlParser().parseFromString(\n        // DOM parsers arrange elements in the <head> and <body>.\n        // Wrapping in a custom element ensures elements are reliably arranged in\n        // a single element.\n        '<x-turndown id=\"turndown-root\">' + input + '</x-turndown>',\n        'text/html'\n      );\n      root = doc.getElementById('turndown-root');\n    } else {\n      root = input.cloneNode(true);\n    }\n    collapseWhitespace({\n      element: root,\n      isBlock: isBlock,\n      isVoid: isVoid\n    });\n\n    return root\n  }\n\n  var _htmlParser;\n  function htmlParser () {\n    _htmlParser = _htmlParser || new HTMLParser();\n    return _htmlParser\n  }\n\n  function Node (node) {\n    node.isBlock = isBlock(node);\n    node.isCode = node.nodeName.toLowerCase() === 'code' || node.parentNode.isCode;\n    node.isBlank = isBlank(node);\n    node.flankingWhitespace = flankingWhitespace(node);\n    return node\n  }\n\n  function isBlank (node) {\n    return (\n      !isVoid(node) &&\n      !isMeaningfulWhenBlank(node) &&\n      /^\\s*$/i.test(node.textContent) &&\n      !hasVoid(node) &&\n      !hasMeaningfulWhenBlank(node)\n    )\n  }\n\n  function flankingWhitespace (node) {\n    var leading = '';\n    var trailing = '';\n\n    if (!node.isBlock) {\n      var hasLeading = /^\\s/.test(node.textContent);\n      var hasTrailing = /\\s$/.test(node.textContent);\n      var blankWithSpaces = node.isBlank && hasLeading && hasTrailing;\n\n      if (hasLeading && !isFlankedByWhitespace('left', node)) {\n        leading = ' ';\n      }\n\n      if (!blankWithSpaces && hasTrailing && !isFlankedByWhitespace('right', node)) {\n        trailing = ' ';\n      }\n    }\n\n    return { leading: leading, trailing: trailing }\n  }\n\n  function isFlankedByWhitespace (side, node) {\n    var sibling;\n    var regExp;\n    var isFlanked;\n\n    if (side === 'left') {\n      sibling = node.previousSibling;\n      regExp = / $/;\n    } else {\n      sibling = node.nextSibling;\n      regExp = /^ /;\n    }\n\n    if (sibling) {\n      if (sibling.nodeType === 3) {\n        isFlanked = regExp.test(sibling.nodeValue);\n      } else if (sibling.nodeType === 1 && !isBlock(sibling)) {\n        isFlanked = regExp.test(sibling.textContent);\n      }\n    }\n    return isFlanked\n  }\n\n  var reduce = Array.prototype.reduce;\n  var leadingNewLinesRegExp = /^\\n*/;\n  var trailingNewLinesRegExp = /\\n*$/;\n  var escapes = [\n    [/\\\\/g, '\\\\\\\\'],\n    [/\\*/g, '\\\\*'],\n    [/^-/g, '\\\\-'],\n    [/^\\+ /g, '\\\\+ '],\n    [/^(=+)/g, '\\\\$1'],\n    [/^(#{1,6}) /g, '\\\\$1 '],\n    [/`/g, '\\\\`'],\n    [/^~~~/g, '\\\\~~~'],\n    [/\\[/g, '\\\\['],\n    [/\\]/g, '\\\\]'],\n    [/^>/g, '\\\\>'],\n    [/_/g, '\\\\_'],\n    [/^(\\d+)\\. /g, '$1\\\\. ']\n  ];\n\n  function TurndownService (options) {\n    if (!(this instanceof TurndownService)) return new TurndownService(options)\n\n    var defaults = {\n      rules: rules,\n      headingStyle: 'setext',\n      hr: '* * *',\n      bulletListMarker: '*',\n      codeBlockStyle: 'indented',\n      fence: '```',\n      emDelimiter: '_',\n      strongDelimiter: '**',\n      linkStyle: 'inlined',\n      linkReferenceStyle: 'full',\n      br: '  ',\n      blankReplacement: function (content, node) {\n        return node.isBlock ? '\\n\\n' : ''\n      },\n      keepReplacement: function (content, node) {\n        return node.isBlock ? '\\n\\n' + node.outerHTML + '\\n\\n' : node.outerHTML\n      },\n      defaultReplacement: function (content, node) {\n        return node.isBlock ? '\\n\\n' + content + '\\n\\n' : content\n      }\n    };\n    this.options = extend({}, defaults, options);\n    this.rules = new Rules(this.options);\n  }\n\n  TurndownService.prototype = {\n    /**\n     * The entry point for converting a string or DOM node to Markdown\n     * @public\n     * @param {String|HTMLElement} input The string or DOM node to convert\n     * @returns A Markdown representation of the input\n     * @type String\n     */\n\n    turndown: function (input) {\n      if (!canConvert(input)) {\n        throw new TypeError(\n          input + ' is not a string, or an element/document/fragment node.'\n        )\n      }\n\n      if (input === '') return ''\n\n      var output = process.call(this, new RootNode(input));\n      return postProcess.call(this, output)\n    },\n\n    /**\n     * Add one or more plugins\n     * @public\n     * @param {Function|Array} plugin The plugin or array of plugins to add\n     * @returns The Turndown instance for chaining\n     * @type Object\n     */\n\n    use: function (plugin) {\n      if (Array.isArray(plugin)) {\n        for (var i = 0; i < plugin.length; i++) this.use(plugin[i]);\n      } else if (typeof plugin === 'function') {\n        plugin(this);\n      } else {\n        throw new TypeError('plugin must be a Function or an Array of Functions')\n      }\n      return this\n    },\n\n    /**\n     * Adds a rule\n     * @public\n     * @param {String} key The unique key of the rule\n     * @param {Object} rule The rule\n     * @returns The Turndown instance for chaining\n     * @type Object\n     */\n\n    addRule: function (key, rule) {\n      this.rules.add(key, rule);\n      return this\n    },\n\n    /**\n     * Keep a node (as HTML) that matches the filter\n     * @public\n     * @param {String|Array|Function} filter The unique key of the rule\n     * @returns The Turndown instance for chaining\n     * @type Object\n     */\n\n    keep: function (filter) {\n      this.rules.keep(filter);\n      return this\n    },\n\n    /**\n     * Remove a node that matches the filter\n     * @public\n     * @param {String|Array|Function} filter The unique key of the rule\n     * @returns The Turndown instance for chaining\n     * @type Object\n     */\n\n    remove: function (filter) {\n      this.rules.remove(filter);\n      return this\n    },\n\n    /**\n     * Escapes Markdown syntax\n     * @public\n     * @param {String} string The string to escape\n     * @returns A string with Markdown syntax escaped\n     * @type String\n     */\n\n    escape: function (string) {\n      return escapes.reduce(function (accumulator, escape) {\n        return accumulator.replace(escape[0], escape[1])\n      }, string)\n    }\n  };\n\n  /**\n   * Reduces a DOM node down to its Markdown string equivalent\n   * @private\n   * @param {HTMLElement} parentNode The node to convert\n   * @returns A Markdown representation of the node\n   * @type String\n   */\n\n  function process (parentNode) {\n    var self = this;\n    return reduce.call(parentNode.childNodes, function (output, node) {\n      node = new Node(node);\n\n      var replacement = '';\n      if (node.nodeType === 3) {\n        replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue);\n      } else if (node.nodeType === 1) {\n        replacement = replacementForNode.call(self, node);\n      }\n\n      return join(output, replacement)\n    }, '')\n  }\n\n  /**\n   * Appends strings as each rule requires and trims the output\n   * @private\n   * @param {String} output The conversion output\n   * @returns A trimmed version of the ouput\n   * @type String\n   */\n\n  function postProcess (output) {\n    var self = this;\n    this.rules.forEach(function (rule) {\n      if (typeof rule.append === 'function') {\n        output = join(output, rule.append(self.options));\n      }\n    });\n\n    return output.replace(/^[\\t\\r\\n]+/, '').replace(/[\\t\\r\\n\\s]+$/, '')\n  }\n\n  /**\n   * Converts an element node to its Markdown equivalent\n   * @private\n   * @param {HTMLElement} node The node to convert\n   * @returns A Markdown representation of the node\n   * @type String\n   */\n\n  function replacementForNode (node) {\n    var rule = this.rules.forNode(node);\n    var content = process.call(this, node);\n    var whitespace = node.flankingWhitespace;\n    if (whitespace.leading || whitespace.trailing) content = content.trim();\n    return (\n      whitespace.leading +\n      rule.replacement(content, node, this.options) +\n      whitespace.trailing\n    )\n  }\n\n  /**\n   * Determines the new lines between the current output and the replacement\n   * @private\n   * @param {String} output The current conversion output\n   * @param {String} replacement The string to append to the output\n   * @returns The whitespace to separate the current output and the replacement\n   * @type String\n   */\n\n  function separatingNewlines (output, replacement) {\n    var newlines = [\n      output.match(trailingNewLinesRegExp)[0],\n      replacement.match(leadingNewLinesRegExp)[0]\n    ].sort();\n    var maxNewlines = newlines[newlines.length - 1];\n    return maxNewlines.length < 2 ? maxNewlines : '\\n\\n'\n  }\n\n  function join (string1, string2) {\n    var separator = separatingNewlines(string1, string2);\n\n    // Remove trailing/leading newlines and replace with separator\n    string1 = string1.replace(trailingNewLinesRegExp, '');\n    string2 = string2.replace(leadingNewLinesRegExp, '');\n\n    return string1 + separator + string2\n  }\n\n  /**\n   * Determines whether an input can be converted\n   * @private\n   * @param {String|HTMLElement} input Describe this parameter\n   * @returns Describe what it returns\n   * @type String|Object|Array|Boolean|Number\n   */\n\n  function canConvert (input) {\n    return (\n      input != null && (\n        typeof input === 'string' ||\n        (input.nodeType && (\n          input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11\n        ))\n      )\n    )\n  }\n\n  return TurndownService;\n\n}());\n"
  },
  {
    "path": "src/data/extra/web/js/turndown.js",
    "content": "// Convert HTML to Markdown.\nclass TurndownConverter {\n    constructor(p_adapter) {\n        this.adapter = p_adapter;\n\n        turndownPluginGfm.options.autoHead = true;\n\n        this.ts = new TurndownService({headingStyle: 'atx',\n                                       bulletListMarker: '*',\n                                       emDelimiter: '*',\n                                       hr: '***',\n                                       codeBlockStyle: 'fenced',\n                                       blankReplacement: function(content, node) {\n                                           if (node.nodeName == 'SPAN') {\n                                               return content;\n                                           }\n\n                                           return node.isBlock ? '\\n\\n' : ''\n                                       }});\n        this.ts.use(turndownPluginGfm.gfm);\n\n        // TODO: verify and copy several rules from VNote 2.0.\n        // No <head> and <style> parse.\n        this.ts.remove(['head', 'style']);\n\n        this.fixMark();\n\n        this.fixParagraph();\n    }\n\n    turndown(p_html) {\n        let markdown = this.ts.turndown(p_html);\n        return markdown;\n    }\n\n    // Trim a string into 3 parts: leading spaces, content, trailing spaces.\n    trimString(p_str) {\n        let result = { leadingSpaces: '',\n                       content: '',\n                       trailingSpaces: ''\n                     };\n        if (!p_str) {\n            return result;\n        }\n\n        let lRe = /^\\s+/;\n        let ret = lRe.exec(p_str);\n        if (ret) {\n            result.leadingSpaces = ret[0];\n            if (result.leadingSpaces.length == p_str.length) {\n                return result;\n            }\n        }\n\n        let tRe = /\\s+$/;\n        ret = tRe.exec(p_str);\n        if (ret) {\n            result.trailingSpaces = ret[0];\n        }\n\n        result.content = p_str.slice(result.leadingSpaces.length, p_str.length - result.trailingSpaces.length);\n        return result;\n    };\n\n    fixMark() {\n        this.ts.addRule('mark', {\n            filter: 'mark',\n            replacement: function(content, node, options) {\n                if (!content) {\n                    return '';\n                }\n\n                return '<mark>' + content + '</mark>';\n            }\n        });\n    }\n\n    fixParagraph() {\n        this.ts.addRule('paragraph', {\n            filter: 'p',\n            replacement: function(content) {\n                // Replace leading spaces with &nbsp; to avoid being parsed as code block.\n                let lRe = /^\\s+/;\n                let ret = lRe.exec(content);\n                if (ret) {\n                    let leadingSpaces = ret[0];\n                    if (leadingSpaces.length > 3) {\n                        content = '&nbsp;'.repeat(leadingSpaces.length) + content.slice(leadingSpaces.length);\n                    }\n                }\n\n                return '\\n\\n' + content + '\\n\\n'\n            }\n        });\n    }\n\n    fixImage() {\n        this.ts.addRule('img_fix', {\n            filter: 'img',\n            replacement: function (content, node) {\n                let alt = node.alt || '';\n                if (/[\\r\\n\\[\\]]/g.test(alt)) {\n                    alt= '';\n                }\n\n                let src = node.getAttribute('src') || '';\n\n                let title = node.title || '';\n                if (/[\\r\\n\\)\"]/g.test(title)) {\n                    title = '';\n                }\n\n                let titlePart = title ? ' \"' + title + '\"' : '';\n                return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/utils.js",
    "content": "class Utils {\n    constructor() {\n    }\n\n    static parentFolder(p_path) {\n        return p_path.substr(0, p_path.lastIndexOf('/'));\n    }\n\n    // @p_type: 'blob'/'text'.\n    static httpGet(p_url, p_type, p_callback) {\n        let xmlHttp = new XMLHttpRequest();\n        xmlHttp.open(\"GET\", p_url);\n        xmlHttp.responseType = p_type;\n\n        xmlHttp.onload = function() {\n            p_callback(xmlHttp.response);\n        };\n\n        xmlHttp.send(null);\n    }\n\n    static loadScript(p_src, p_callback) {\n        let script = document.createElement('script');\n        if (p_callback) {\n            script.onload = p_callback;\n        }\n        script.type = 'text/javascript';\n        script.src = p_src;\n        document.head.appendChild(script);\n    }\n\n    static loadScripts(p_srcs, p_callback) {\n        if (p_srcs.length == 1) {\n            this.loadScript(p_srcs[0], p_callback);\n            return;\n        }\n\n        let func = (function() {\n            let scriptsToLoad = p_srcs.length;\n            let callback = p_callback;\n            return function() {\n                --scriptsToLoad;\n                if (scriptsToLoad == 0) {\n                    callback();\n                }\n            };\n        })();\n\n        let scriptsToLoad = p_srcs.length;\n        p_srcs.forEach((p_src) => {\n            this.loadScript(p_src, func);\n        });\n    }\n\n    // 'lang-' + ['cpp', 'md'] => ['lang-cpp', 'lang-md'].\n    static addPrefix(p_prefix, p_elements) {\n        let res = [];\n        p_elements.forEach(function(p_ele) {\n            res.push(p_prefix + p_ele);\n        });\n        return res;\n    }\n\n    // Check if @p_node contains source line info. If yes, add it to @p_newNode.\n    static checkSourceLine(p_node, p_newNode) {\n        if (p_node.classList.contains('source-line')) {\n            p_newNode.classList.add('source-line');\n            p_newNode.setAttribute('data-source-line', p_node.getAttribute('data-source-line'));\n        }\n    }\n\n    // Replace @p_node with @p_newNode.\n    static replaceNodeWithPreCheck(p_node, p_newNode) {\n        let childNode = p_node;\n        let parentNode = p_node.parentNode;\n        if (parentNode.tagName.toLowerCase() == 'pre') {\n            childNode = parentNode;\n            parentNode = parentNode.parentNode;\n        }\n        parentNode.replaceChild(p_newNode, childNode);\n    }\n\n    static viewPortRect() {\n        return {\n            left: document.documentElement.scrollLeft || document.body.scrollLeft || window.pageXOffset,\n            top: document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset,\n            width: document.documentElement.clientWidth || document.body.clientWidth,\n            height: document.documentElement.clientHeight || document.body.clientHeight\n        }\n    }\n\n    static nodeRectInContent(p_node) {\n        let rect = p_node.getBoundingClientRect();\n        let vrect = this.viewPortRect();\n        return {\n            left: vrect.left + rect.left,\n            top: vrect.top + rect.top,\n            width: rect.width,\n            height: rect.height\n        };\n    }\n\n    static isVisible(p_node) {\n        let rect = p_node.getBoundingClientRect();\n        let vrect = this.viewPortRect();\n        if (rect.top < 0 || rect.left < 0\n            || rect.bottom > vrect.height || rect.right > vrect.width) {\n            return false;\n        }\n        return true;\n    }\n\n    static headingSequenceRegExp() {\n        return /^\\d{1,3}(?:\\.\\d+)*\\. /;\n    }\n\n    static fetchStyleContent() {\n        let styles = \"\";\n        for (let styleIdx = 0; styleIdx < document.styleSheets.length; ++styleIdx) {\n            let styleSheet = document.styleSheets[styleIdx];\n            if (styleSheet.cssRules) {\n                let baseUrl = null;\n                if (styleSheet.href) {\n                    let scheme = Utils.getUrlScheme(styleSheet.href);\n                    // We only translate local resources.\n                    if (scheme === 'file' || scheme === 'qrc') {\n                        baseUrl = styleSheet.href.substr(0, styleSheet.href.lastIndexOf('/'));\n                    }\n                }\n\n                for (let ruleIdx = 0; ruleIdx < styleSheet.cssRules.length; ++ruleIdx) {\n                    let css = styleSheet.cssRules[ruleIdx].cssText;\n                    if (baseUrl) {\n                        // Try to replace the url() with absolute path.\n                        css = Utils.translateCssUrlToAbsolute(baseUrl, css);\n                    }\n\n                    styles = styles + css + \"\\n\";\n                }\n            }\n        }\n\n        return styles;\n    }\n\n    static translateCssUrlToAbsolute(p_baseUrl, p_css) {\n        let replaceCssUrl = function(baseUrl, match, p1, offset, str) {\n            if (Utils.getUrlScheme(p1)) {\n                return match;\n            }\n\n            let url = baseUrl + '/' + p1;\n            return \"url(\\\"\" + url + \"\\\");\";\n        };\n\n        return p_css.replace(/\\burl\\(\\\"([^\\\"\\)]+)\\\"\\);/g, replaceCssUrl.bind(undefined, p_baseUrl));\n    }\n\n    static getUrlScheme(p_url) {\n        let idx = p_url.indexOf(':');\n        if (idx > -1) {\n            return p_url.substr(0, idx);\n        } else {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/viz.js/README.md",
    "content": "# [viz.js](https://github.com/mdaines/viz.js)\nv2.1.2\n"
  },
  {
    "path": "src/data/extra/web/js/viz.js/lite.render.js",
    "content": "/*\nViz.js 2.1.2 (Graphviz 2.40.1, Emscripten 1.37.36)\n*/\n(function(global) {\nvar Module = function(Module) {\n  Module = Module || {};\nvar Module=typeof Module!==\"undefined\"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=(function(status,toThrow){throw toThrow});Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module[\"ENVIRONMENT\"]){if(Module[\"ENVIRONMENT\"]===\"WEB\"){ENVIRONMENT_IS_WEB=true}else if(Module[\"ENVIRONMENT\"]===\"WORKER\"){ENVIRONMENT_IS_WORKER=true}else if(Module[\"ENVIRONMENT\"]===\"NODE\"){ENVIRONMENT_IS_NODE=true}else if(Module[\"ENVIRONMENT\"]===\"SHELL\"){ENVIRONMENT_IS_SHELL=true}else{throw new Error(\"Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.\")}}else{ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename)}return binary?ret:ret.toString()};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\")}Module[\"arguments\"]=process[\"argv\"].slice(2);if(typeof module!==\"undefined\"){module[\"exports\"]=Module}process[\"on\"](\"uncaughtException\",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process[\"on\"](\"unhandledRejection\",(function(reason,p){process[\"exit\"](1)}));Module[\"inspect\"]=(function(){return\"[Emscripten Module object]\"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}if(typeof quit===\"function\"){Module[\"quit\"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}Module[\"setWindowTitle\"]=(function(title){document.title=title})}Module[\"print\"]=typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null;Module[\"printErr\"]=typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||Module[\"print\"];Module.print=Module[\"print\"];Module.printErr=Module[\"printErr\"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args))}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}var JSfuncs={\"stackSave\":(function(){stackSave()}),\"stackRestore\":(function(){stackRestore()}),\"arrayToC\":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),\"stringToC\":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType===\"string\")ret=Pointer_stringify(ret);if(stack!==0){stackRestore(stack)}return ret}function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab===\"number\"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types===\"string\"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc===\"function\"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType===\"i8\"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type==\"i64\")type=\"i32\";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function Pointer_stringify(ptr,length){if(length===0||!ptr)return\"\";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js)}var PAGE_SIZE=16384;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort(\"Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value \"+TOTAL_MEMORY+\", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)Module.printErr(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+TOTAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");if(Module[\"buffer\"]){buffer=Module[\"buffer\"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}Module[\"buffer\"]=buffer}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw\"Runtime error: expected the system to be little-endian!\";function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}if(!Math[\"imul\"]||Math[\"imul\"](4294967295,5)!==-5)Math[\"imul\"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math[\"imul\"];if(!Math[\"clz32\"])Math[\"clz32\"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math[\"clz32\"];if(!Math[\"trunc\"])Math[\"trunc\"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math[\"trunc\"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[(function($0,$1){var path=Pointer_stringify($0);var data=Pointer_stringify($1);FS.createPath(\"/\",PATH.dirname(path));FS.writeFile(PATH.join(\"/\",path),data)})];function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+176368;__ATINIT__.push();memoryInitializer=\"data:application/octet-stream;base64,AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkACEAAAAAAAAAAAAAAAABBAWC8AAAgAAAABAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICWQAAAAAAAgJZABJDDAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUkAAAAAAAABSQAAgAwIAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAABCQAAAAAAAAEJAAAAAAAAgg0AAAAAAAMCIQAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAAEJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQACwwQAAAAAAAAAAAAAAEED4NQAAkwAAAAEAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAEAACAAAAAAAAAAAAABBAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAALDBAAAAAAAAAAAAAAAAANQ5AAAQAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQEAgPgMAAAAAAAAAAAAAEEDcOgAAegAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAQAAAAAAAAABAAAAAAAAAAAAAAAAAPA/AQAAAAAAAAACAAAAAAAAAAAAAAAAAPA/AgAAAAAAAAADAAAAAAAAAAAAAAAAAOA/AwAAAAAAAAAEAAAAAAAAAAAAAAAAAPA/BAAAAAAAAAAFAAAAAAAAADMzMzMzM/M/BQAAAAAAAAAGAAAAAAAAAJqZmZmZmek/BgAAAAAAAAAHAAAAAAAAAAAAAAAAAPA/BwAAAAAAAAAIAAAAAAAAAAAAAAAAAOA/CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAzMzMzMzPTvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAACARkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAACamZmZmZnZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMzMzM+M/AAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAB7FK5H4XrkvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAQAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiRSAAABAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAACAZkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAACAZkCamZmZmZnZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAACAZkB7FK5H4XrkvwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAACARkAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAABAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAAABAAAAAAAAAAAAAAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/WKg1zTtO1T8ldQKaCBvaPwAAAAAAAOA/AAAAAAAA4D8s1JrmHafqP2recYqO5Og/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA4D9d3EYDeAviPwAAAAAAANA/WKg1zTtO1T8AAAAAAADQP9O84xQdydE/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D/TvOMUHcnRP9O84xQdydE/XdxGA3gL4j9d3EYDeAviP13cRgN4C+I/DXGsi9to3D9kXdxGA3jtP9JvXwfOGec/EHo2qz5X5T8QejarPlflP9JvXwfOGec/eAskKH6M4z+1FfvL7snhP9JvXwfOGec/0m9fB84Z5z9YqDXNO07VP4iFWtO849g/0m9fB84Z5z94CyQofozjP8RCrWnecew/0m9fB84Z5z/Sb18HzhnnP7UV+8vuyeE/0m9fB84Z5z8QejarPlflP7UV+8vuyeE/eAskKH6M4z/Sb18HzhnnP9JvXwfOGec/hjjWxW007j/Sb18HzhnnP9JvXwfOGec/eAskKH6M4z9YqDXNO07VP9O84xQdydE/WKg1zTtO1T+mCkYldQLePwAAAAAAAOA/WKg1zTtO1T8NcayL22jcPwAAAAAAAOA/DXGsi9to3D8AAAAAAADgPw1xrIvbaNw/WKg1zTtO1T8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T/TvOMUHcnRPwAAAAAAAOA/07zjFB3J0T9q3nGKjuToPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/WKg1zTtO1T+IhVrTvOPYP9O84xQdydE/AAAAAAAA4D8AAAAAAADgP9JvXwfOGec/AAAAAAAA4D8AAAAAAADgPw1xrIvbaNw/9GxWfa623j8RNjy9UpbJP/RsVn2utt4/OwFNhA1P4T8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP1ioNc07TtU/AAAAAAAA4D8AAAAAAADgPz7o2az6XMU/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D+Cc0aU9gbHPw1xrIvbaNw/AAAAAAAA4D9YqDXNO07VP1ioNc07TtU/tRX7y+7J4T+1FfvL7snhPwAAAAAAANA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA0D8AAAAAAADQPwfwFkhQ/Nw/orQ3+MJk1j9YqDXNO07VPw1xrIvbaNw/DXGsi9to3D8AAAAAAADgPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADQPw1xrIvbaNw/AAAAAAAA0D9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA0D9YqDXNO07VP1ioNc07TtU/AAAAAAAA0D9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T8AAAAAAADwPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/xEKtad5x7D8AAAAAAADQP3/ZPXlYqNE/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D94CyQofozjP9JvXwfOGec/xEKtad5x7D8T8kHPZtXTPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8QejarPlflPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP9O84xQdydE/AAAAAAAA0D8AAAAAAADQP9O84xQdydE/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/9GxWfa621j+1FfvL7snhP7UV+8vuyeE/xEKtad5x7D8QejarPlflP/Xb14FzRsw/WKg1zTtO1T9YqDXNO07VP4iFWtO849g/AU2EDU+v4j/TvOMUHcnRP1ioNc07TtU/07zjFB3J0T/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/07zjFB3J0T/TvOMUHcnRPwFNhA1Pr+I/AU2EDU+v4j8BTYQNT6/iP7UV+8vuyeE/zF1LyAc98D8QejarPlflPxB6Nqs+V+U/0m9fB84Z5z/Sb18HzhnnPxB6Nqs+V+U/eAskKH6M4z9q3nGKjuToP9JvXwfOGec/07zjFB3J0T8AAAAAAADgPxB6Nqs+V+U/tRX7y+7J4T8s1JrmHafqP9JvXwfOGec/at5xio7k6D8QejarPlflP2recYqO5Og/0m9fB84Z5z8QejarPlflP3gLJCh+jOM/0m9fB84Z5z8QejarPlflP4Y41sVtNO4/EHo2qz5X5T8QejarPlflP3gLJCh+jOM/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/pgpGJXUC3j+1FfvL7snhP0i/fR04Z8w/tRX7y+7J4T+1FfvL7snhPwAAAAAAAOA/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/tRX7y+7J4T+1FfvL7snhP0i/fR04Z8w/SL99HThnzD8AAAAAAADgP0i/fR04Z8w/LNSa5h2n6j+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP1ioNc07TtU/AAAAAAAA4D/TvOMUHcnRP7UV+8vuyeE/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwKaCBueXtU/4L4OnDOi0D8Cmggbnl7VPwFNhA1Pr+I/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T9YqDXNO07VP7UV+8vuyeE/tRX7y+7J4T8+6Nms+lzFP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/HThnRGlvyD9YqDXNO07VP7UV+8vuyeE/WKg1zTtO1T9YqDXNO07VPwAAAAAAAOA/AAAAAAAA4D/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/07zjFB3J0T/nHafoSC7hP6K0N/jCZNY/SL99HThnzD9YqDXNO07VP1ioNc07TtU/tRX7y+7J4T8AAAAAAADwPwAAAAAAAPA/07zjFB3J0T94CyQofozjP9O84xQdydE/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP9O84xQdydE/WKg1zTtO1T9YqDXNO07VP9O84xQdydE/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA8D/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRPwAAAAAAAPA/07zjFB3J0T/qlbIMcazXP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/tRX7y+7J4T9q3nGKjuToPwAAAAAAAPA/mN2Th4Va1z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/xEKtad5x7D/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T9Iv30dOGfMP3gLJCh+jOM/hjjWxW007j94CyQofozjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/UaBP5EnSDkC0yHa+nzo1wDoi36XUJdW/84I+R5ouij+f5Xlwd9b5v379EBssnOY/luzYCMTrzD/NzqJ3KuDQP7Djv0AQIO2/raHUXkTb2D87oXzmUZZ2P9NucPl6hHs/gczOoncq5L/Rrdf0oKDIP2rfNxmwP4Q/vsqQGV7/hD8clgZ+VMPEv6VJKej24iNAqdkDrcCQwT8IxJBBk2mJP/pEniRdM9C/AfCZNi3CXj8NnH0vz5SXP4m1+BQA44k/5alYRjTLsb+PAMnPoWemv1y1xvvMtIg/TaSPVDqzkD/mxwShYdagv8dpZxwT94K/Kn9r5S1wXL/kV2JUCJp1P9Hxh1VyBLc/ldQJaCI8M8BkIxCv63cQwKchqvBneMc/2v8Aa9WuwT9OKETAIVT3v6pIhbGFIPU/nWhXIeUn9j9NLsbAOo7NP1lrKLUX0dy/Az+qYb8nzD+mR1M9mX/aP7aBO1CnPK4/UUzeADPfub/1dpX/2gumP9SlNbwP9pQ/H60gvCzckD8oLPGAsskjQCNa4UwCirc/SKNlUZYpfz+7tIb3wZ6TPxeoe1NHfaC/ISuu4G2Uiz8zc9yE1h61v6B4hIn1/I8/aTUk7rH0kb+4zTN6Xr9qP5I+raI/NM2/frDnxk8+mL8HI5tQLcekPz4YwntYuZG/LXx9rUuNxj8AAABA+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1tOgAAKAqAAADAAAAyCwAAAMAAACgLwAAAwAAAGgwAAADAAAAuDEAAAMAAAAwNQAAAwAAAGw4AAADAAAAfC4AAAMAAAA0OQAAAwAAADw6AAADAAAAyD4AAAMAAADsPAAAAAAAAIwsAAAAAAAAeC8AAAAAAADILwAAAAAAAJAxAAAAAAAA4DEAAAAAAABEOAAAAAAAABguAAAAAAAADDkAAAAAAAAUOgAAAAAAAKA+AAAAAAAAxDwAAAQAAADwPgAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAQAAAAEAAAADAAAAAAAAAAAAAADQjQIA4I0CAPCNAgAAjgIAEI4CACCOAgAwjgIAQI4CAOCNAgDgjQIAII4CACCOAgAfAAAAPwAAAH8AAAAAAAAAHUsBAAEAAABgKwAAaAAAAAQAAADW7AAAAQAAANgrAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbukAAAEAAAAAAAAA4AAAAAAAAAB26QAAAQAAAAAAAADgAAAAAQAAAH3pAAABAAAAAAAAAKgAAAACAAAAh+kAAAEAAAAAAAAA4AAAAAMAAACR6QAAAQAAAAAAAADgAAAABAAAAJ/pAAABAAAAAAAAAOAAAAAFAAAAqekAAAEAAAAAAAAA4AAAAAYAAAC26QAAAQAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2+wAAAEAAAB8LQAAGAEAAAEAAADg7AAAAQAAAHwtAAAYAQAAAgAAAObsAAABAAAAfC0AABgBAAADAAAA7+wAAAEAAAB8LQAAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPnsAAABAAAAAAAAAHABAAABAAAAA+0AAAEAAAAAAAAAcAEAAAIAAAAO7QAAAQAAAAAAAAA4AQAAAwAAABztAAABAAAAAAAAADgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAwAAAANAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAYAAAACAAAAAgAAAAcAAAACAAAAAAAAAPrcAQD/xQEAkMcBANDNAQDH1AEABtkBAIbcAQCX3AEAAAAAAGPtAAABAAAA4C4AAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn7QAAAQAAAAAAAADIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAb+0AAAEAAADwLwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAKfuAAABAAAAAAAAACACAAACAAAAse4AAAEAAAAAAAAAWAIAAAAAAAC67gAAAQAAAAAAAABYAgAAAwAAAMPuAAABAAAAAAAAAFgCAAAAAAAAze4AAAEAAAAAAAAAIAIAAAMAAADZ7gAAAQAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAFgAAABcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAMAAAAJAAAAAwAAAAMAAAAKAAAABAAAAAAAAAD63AEA/8UBANDNAQCQxwEABtkBAMfUAQCX3AEAhtwBAAAAAAAAAAAAlvAAAP/////0MAAAkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnwAAD/////AAAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcUwEAAQAAAAgyAADoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGQAAABoAAAAAAAAABAAAAAAAAAAbAAAAHAAAAB0AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAgAAAAIQAAACIAAAACAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAMAAAABQAAAAQAAAANAAAABQAAAAMAAACW9AAApPQAALr0AABpqAIAyPQAANf0AADc9AAA+vQAAGmoAgAM9QAAPPUAAGmoAgBa9QAAgvUAAJD1AAC/9QAA8/UAAAT2AAAp9gAATPYAAFL2AABu9gAAi/YAAKb2AADH9gAA4fYAAAP3AAAi9wAASPcAAGD3AACA9wAAnfcAAMH3AADN9wAAaagCANj3AAD+9wAAIvgAAEj4AABpqAIAfvgAAJb4AACj+AAA0vgAAM33AABpqAIA3/gAAOj4AAAJ+QAARPkAAI/5AADj+QAABfoAABr6AAAx+gAAR/oAAF/6AABpqAIAdfoAAJD6AAC0+gAA2PoAAP36AABpqAIAHvsAADj7AABK+wAAV/sAAGT7AAB4+wAAh/sAAI/7AACk+wAAsvsAAPD7AAD7+wAAzfcAAGmoAgAB/AAADfwAABz8AABM9gAAaagCAC/8AABY/AAAdvwAAIb8AACX/AAAnvwAAK38AAC9/AAAAf0AAAj9AABM9gAAaagCABL9AAA+/QAASf0AAFL9AABb/QAAbP0AAH39AACR/QAAzfcAAGmoAgCd/QAArf0AALv9AADJ/QAA1v0AAOP9AAD5/QAAAv4AABH+AAAe/gAAL/4AAM33AABpqAIAOv4AAFn+AABpqAIAa/4AAHr+AACq/gAAtP4AAMH+AADO/gAA2/4AAOj+AADr/gAAaagCAO/+AABpqAIAEv8AAEP/AABy/wAAif8AAKT/AAC//wAAzfcAAGmoAgDb/wAAaagCAAMAAQAPAAEAIgABADUAAQBKAAEAXwABAGMAAQBM9gAAaagCAG8AAQBpqAIAfwABAI0AAQCZAAEApgABAMYAAQDcAAEAaagCAPAAAQA5AQEAfwEBAK8BAQDiAQEA6QEBABACAQA3AgEAaagCADwCAQAAAAAAAAAAAPorAQABAAAAAAAAAAgDAAABAAAAsAIBAAEAAAAAAAAACAMAAAIAAADzKwEAAQAAAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAACQAAAAlAAAABgAAACYAAAAnAAAAKAAAACkAAAAqAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAEAAAALwAAAAAAAAAAAAAADgAAAAAAAAAPAAAABwAAAAUAAAAQAAAABgAAAAAAAAAXxQEAIcUBAHoVAQBmxQEAocUBAMPFAQDJxQEA+twBAPDFAQD/xQEAHMYBACfGAQBJxgEAf8YBALXGAQDwxgEAJscBAEjHAQBXxwEAiMcBAJDHAQBACQEASQkBAK3HAQBSCQEA98cBAFsJAQAByAEAZAkBAAvIAQBayAEAlcgBAHAJAQDQyAEA28gBACDJAQAuyQEAeMkBAIbJAQCUyQEAn8kBANDJAQAQygEAGMoBACDKAQBbygEAkcoBAJ3KAQB/FQEAqcoBALPKAQC+ygEA28oBABHLAQDQzQEA8s0BAP7NAQC90AEA7tABABrRAQBQ0QEAXdEBAH/RAQCh0QEAqtEBAPTRAQD+0QEAQ9IBAHnSAQCE0gEACdMBAB7TAQB4CQEAKNMBADLTAQBo0wEAqNMBALbTAQAK1AEAGdQBACjUAQB31AEAhxUBALfUAQDB1AEAx9QBAPPUAQAa1QEAK9UBADbVAQB71QEAwNUBAM/VAQDf1QEA8dUBAAHWAQAR1gEAHtYBACjWAQBe1gEAZ9YBAKfWAQC61gEAjBUBAMLWAQD41gEAH9cBAFXXAQB81wEAitcBAMDXAQAK2AEAVNgBAF/YAQCV2AEAmtgBALfYAQDU2AEA39gBAAbZAQAe2QEAVNkBAIrZAQCW2QEAvdkBAMjZAQD52QEAKtoBAHkgAQBR2gEAfdoBALPaAQDp2gEA89oBABDbAQBQ2wEAhtsBAJIVAQCe2wEAytsBAPHbAQAn3AEAZNwBAIbcAQCM3AEAl9wBAL7cAQAAAAAAX1MBAAEAAACANQAAeAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANEsAQABAAAAAAAAAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAABIAAAAIAAAABgAAABMAAAAHAAAAAAAAAAAAAACuCgEAAQAAAJQ4AADQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsQoBAAEAAAAAAAAA8AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAA1AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADcAAAAAAAAAAAAAABQAAAAAAAAAFQAAAAkAAAAHAAAAFgAAAAgAAAAAAAAAehUBAPrcAQD/xQEAfxUBABHLAQDQzQEAhxUBAPPUAQCn1gEAjBUBAN/YAQAG2QEAeSABAJIVAQCG3AEAl9wBAAAAAACXFQEAAQAAAFw5AAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmxUBAAEAAAAAAAAASAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAA5AAAAOgAAAAoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQQAAAEIAAABDAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAGAAAAAsAAAAIAAAAGQAAAAkAAAAAAAAAZsUBAA8fAQD63AEA/8UBABzGAQAaHwEAIB8BACsfAQAyHwEAJ8YBAH/GAQA6HwEAQB8BAEsfAQAmxwEASMcBAJDHAQBSHwEA98cBAAvIAQCVyAEAXB8BACDJAQAuyQEAeMkBAGcfAQCGyQEAbx8BAHgfAQCGHwEAkB8BAFvKAQCZHwEAncoBAL7KAQDbygEAnx8BACLLAQBNywEAdssBAJnLAQDCywEA5csBAA7MAQAxzAEAWswBAH3MAQCmzAEAycwBAPLMAQAVzQEAPs0BAGHNAQCKzQEArc0BANDNAQCmHwEA8s0BALIfAQAa0QEAf9EBAEPSAQC/HwEAKNQBAMwfAQC31AEAx9QBANYfAQDz1AEAGtUBACvVAQDlHwEA9x8BADbVAQDA1QEAz9UBAN/VAQDx1QEAAdYBAAcgAQASIAEAHSABABHWAQCn1gEArNYBACIgAQArIAEANCABAEQgAQBLIAEA+NYBAB/XAQBV1wEAitcBAJrYAQC32AEAUyABAAbZAQBaIAEAltkBAGMgAQDI2QEAayABACraAQB5IAEAUdoBAH3aAQCAIAEAENsBAFDbAQCKIAEAhtsBAJ7bAQDx2wEAlCABAKIgAQAn3AEALtwBAGTcAQCG3AEAl9wBAL7cAQAAAAAAtCABAAEAAABkOgAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALggAQABAAAAAAAAAKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEUAAAAAAAAAAAAAAEYAAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABsAAAAMAAAACQAAABwAAAAKAAAAAAAAAEFCAABEZwEAQUkAAB5nAQBBUgAA8WYBAEFYAABZZwEAQiAAAJVpAQBCSQAApmkBAENCAADeZwEAQ08AAMxnAQBDWAAA62cBAEggAAAPaAEASEIAABloAQBISQAApWgBAEhYAAAoaAEASGIAAFloAQBIaQAAjGgBAEhyAAA+aAEASHgAAG9oAQBJIAAAt2kBAEtCAABwZwEAS0kAALhnAQBLUgAApGcBAEtYAACRZwEATkIAALdoAQBOSQAA/mgBAE5SAAAWaQEATlgAAOJoAQBQQQAAd2kBAFBCAAAzaQEAUEkAAGdpAQBQWAAAU2kBAFIgAABjawEAUyAAAIZpAQBaRAAA9GkBAAAAAAAAAAAAAQAAAAAAAABnKwEA/////xQ9AADYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaysBAP////8AAAAA+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHMrAQABAAAA2EIAAAAAAAAQAAAAeysBAAEAAADYQgAAAAAAABEAAACDKwEAAQAAANhCAAAAAAAAEQAAAIwrAQABAAAA2EIAAAAAAAARAAAAlCsBAAEAAADYQgAAAAAAABMAAACcKwEAAQAAANxCAAAAAAAAFAAAAKQrAQABAAAA3EIAAAAAAAAVAAAArCsBAAEAAADcQgAAAAAAABUAAAC1KwEAAQAAANxCAAAAAAAAFQAAAL0rAQABAAAA3EIAAAAAAAAWAAAAxSsBAAEAAADgQgAAAAAAABcAAADOKwEAAQAAAOBCAAAAAAAAGAAAANcrAQABAAAA4EIAAAAAAAAYAAAA4SsBAAEAAADgQgAAAAAAABgAAADqKwEAAQAAAOBCAAAAAAAAGQAAAPMrAQABAAAA5EIAAAAAAAAZAAAA+isBAAEAAADkQgAAAAAAABoAAAAALAEAAQAAAOhCAAAAAAAACgAAAAksAQABAAAA7EIAAAAAAAALAAAAESwBAAEAAADsQgAAAAAAAAwAAAAZLAEAAQAAAOxCAAAAAAAADAAAACIsAQABAAAA7EIAAAAAAAAMAAAAKiwBAAEAAADsQgAAAAAAAA4AAAAyLAEAAQAAAOxCAAAAAAAADgAAADksAQABAAAA7EIAAAAAAAANAAAAQSwBAAEAAADsQgAAAAAAAAUAAABJLAEAAQAAAOxCAAAAAAAABgAAAFEsAQABAAAA7EIAAAAAAAAHAAAAWSwBAAEAAADsQgAAAAAAAAcAAABiLAEAAQAAAOxCAAAAAAAABwAAAGosAQABAAAA7EIAAAAAAAAJAAAAciwBAAEAAADsQgAAAAAAAAkAAAB5LAEAAQAAAOxCAAAAAAAACAAAAIEsAQABAAAA7EIAAAAAAAAAAAAAiSwBAAEAAADwQgAAAAAAAAEAAACSLAEAAQAAAPBCAAAAAAAAAgAAAJssAQABAAAA8EIAAAAAAAACAAAApSwBAAEAAADwQgAAAAAAAAIAAACuLAEAAQAAAPBCAAAAAAAABAAAALcsAQABAAAA8EIAAAAAAAAEAAAAvywBAAEAAADwQgAAAAAAAAMAAADILAEAAQAAAPBCAAAAAAAAEgAAANEsAQABAAAA2EIAAAAAAAAbAAAA2SwBAAEAAAD0QgAAAAAAABwAAADhLAEAAQAAAPRCAAAAAAAAHQAAAOksAQABAAAA9EIAAAAAAAAdAAAA8iwBAAEAAAD0QgAAAAAAAB0AAAD6LAEAAQAAAPRCAAAAAAAAHgAAAAItAQABAAAA+EIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAG0wAQAEQwAAAQAAACBDAAAAAAAAAAAAAEgAAABJAAAAAQAAAAAAAAAdSwEAAAAAABRDAAAcQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAQAAAAYAQAAMAEAALAAAACXOAEAnDgBAKA4AQCnOAEAqzgBAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAdAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAABAAAAQAAAANhDAADoQwAAAgAAAAQAAAD0QwAAAgAAAAgAAAACAAAABAAAAPxDAAAABAAACAAAAP////8AAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAwAAAAAAAAACAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAwAAAAAAAAACAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAABAAAAAAAAAACAAAAAAAAAAkAAAALAAAACAAAAAoAAACARQAABEUAAGhFAAABAAAAAQAAAAUAAAAWAAAABgAAAEoAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAAAAAAAAAIAAAAAAAAAAwAAAAIAAAADAAAABAAAAAAAAAAAAAAABAAAAAMAAAAJAAAACwAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAsAAAAAAAAAAgAAAAAAAAAIAAAACAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/////wAAAAAAAAAAJAAAAAAAAAAAAAAAAgAAAAAAAAABAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAMAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAQAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABgAAAAEAAAABAAAABwAAAAgAAAAJAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAEAAAABAAAACwAAAAEAAAAMAAAAAQAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAATAAAAEwAAABMAAAATAAAAFwAAABgAAAAZAAAAEwAAABoAAAAbAAAAHAAAAB0AAAATAAAAEwAAABMAAAATAAAAEwAAAAEAAAAeAAAAAQAAAAEAAAATAAAAAQAAAB8AAAAgAAAAIQAAACIAAAAjAAAAEwAAACQAAAAlAAAAJgAAABMAAAATAAAAEwAAABMAAAAnAAAAKAAAACkAAAATAAAAKgAAACsAAAAsAAAALQAAABMAAAATAAAAEwAAABMAAAATAAAAAQAAAAEAAAABAAAAAQAAAAEAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAC4AAAATAAAAEwAAABMAAAAvAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAAwAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAAAAAAABAAAAAQAAAAIAAAADAAAAAQAAAAQAAAABAAAABQAAAAEAAAAGAAAABwAAAAcAAAABAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAMAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAACAAAAAEXgBAO13AQBjQQEAHngBABZ4AQAkeAEAAAAAAGlFAQByRQEAeUUBAIdFAQCORQEAOngBAJVFAQCcRQEAAQAAAAgAAAD/////AAAAAAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAADpHAQAIAAAAAwAAAENHAQBHRwEACwAAAAYAAABcUwEAU0cBAAIAAAABAAAAVkcBAFpHAQAEAAAAAgAAAF9HAQBjRwEABAAAAAQAAABoRwEAbUcBAAUAAAAFAAAAc0cBAHdHAQAEAAAABwAAAHxHAQCARwEABQAAAAkAAACGRwEAikcBAAQAAAAKAAAAj0cBAJRHAQAEAAAADAAAAJlHAQBaTAEAAAAAAAEAAABiTAEAAQAAAAAAAAA4dwEAAQAAAAEAAAC11gEAAAAAAAAAAAAAAAAAAAAAAAAAAABGSwEAMQAAAAAAAAAAAAAAWXIBABAAAADw4gEAgAAAAD9LAQBAAAAAomUBABAAAABBSwEAQAAAAAAAAAAAAAAADUsBAAEAAAAUSwEAAgAAABlLAQADAAAAiWIBAAQAAADEYgEABQAAAB1LAQAGAAAAtdYBAAgAAAAhSwEAIQAAACVLAQAiAAAAKUsBACIAAAAtSwEAAQAAADJLAQAHAAAAOEsBACcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAP////8AAAAAJgAAAAAAAAAAAAAAAAAAAAAAAACEUAEAi1ABAAAAAABZUwEAXFMBAF9TAQAAAAAAAAAAAAEAAAACAAAA/////xxTAQAiUwEAtdYBAAAAAABkAAAAZQAAAGYAAABkAAAACAAAAAgAAAAAAAAAAAAAACcAAAAMAAAAAAAAAAAAAAAAAAAACAAAAP////8AAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAiWIBAIxRAABABgAAAAAAAI1iAQCMUQAAcAYAAAAAAABbawEAjFEAAKAGAAAAAAAAlWIBAIxRAACgBgAAAAAAAJpiAQCMUQAA0AYAAAAAAAChYgEApFEAANAGAAAAAAAAp2IBAIxRAAAABwAAAAAAAKtiAQCMUQAAMAcAAAAAAAC11gEAjFEAAGAHAAAAAAAAtGIBAIxRAABgBwAAAAAAAL5iAQCMUQAAEAYAAAAAAADEYgEAjFEAAJAHAAAAAAAAzGIBAIxRAADABwAAAAAAANZiAQCMUQAA8AcAAAAAAADkYgEAjFEAACAIAAAAAAAA6mIBAIxRAABQCAAAAAAAAPNiAQCMUQAAgAgAAAAAAAD7YgEAjFEAALAIAAAAAAAABGMBAIxRAADgCAAAAAAAAAxjAQCMUQAAEAkAAAAAAAARYwEAjFEAAEAJAAAAAAAAFWMBAIxRAABwCQAAAAAAABxjAQCMUQAAoAkAAAAAAAAiYwEAjFEAANAJAAAAAAAALGMBALxRAAAACgAAAAAAADVjAQCMUQAAQAYAAAAAAAA6YwEAjFEAAEAGAAAAAAAARGMBAIxRAAAwCgAAAAAAAEtjAQCMUQAAYAoAAAAAAABYYwEAjFEAAJAKAAAAAAAAZmMBAIxRAADACgAAAAAAAHRjAQCMUQAA8AoAAAAAAACAYwEAjFEAACALAAAAAAAAjWMBAIxRAABQCwAAAAAAAJZjAQCMUQAAgAsAAAAAAACgYwEAjFEAALALAAAAAAAAqWMBAIxRAADgCwAAAAAAALFjAQCMUQAAEAwAAAAAAAC5YwEAjFEAAEAMAAAAAAAAwmMBAIxRAABwDAAAAAAAAMZjAQCMUQAAoAwAAAAAAADRYwEAjFEAANAMAAAAAAAA1WMBAIxRAAAADQAAAAAAAN9jAQCMUQAAMA0AAAAAAADoYwEAjFEAAGANAAAAAAAA8GMBAIxRAACQDQAAAAAAAP1jAQCMUQAAwA0AAAAAAAAJZAEAjFEAAPANAAAAAAAAFGQBAIxRAAAgDgAAAAAAACRkAQCMUQAAUA4AAAAAAAAyZAEAjFEAAIAOAAAAAAAAQWQBAIxRAACwDgAAAAAAAEtkAQCMUQAA4A4AAAAAAABUZAEAjFEAABAPAAAAAAAAXmQBAIxRAABADwAAAAAAAGhkAQCMUQAAcA8AAAAAAABvZAEAjFEAAKAPAAAAAAAAdmQBAIxRAADQDwAAAAAAAIBkAQDUUQAAAAAAAAAAAACHZAEA1FEAAAAAAAAAAAAAZWIBAOxRAAAAAAAAAAAAAI9kAQAEUgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAEwAAAAXAAAABAAAAAIAAAAMAAAATQAAAEwAAAAXAAAABQAAAAAAAAANAAAASwAAAEwAAAAXAAAABAAAAAIAAAAMAAAATgAAAE8AAAAYAAAABgAAAAMAAAAOAAAAUAAAAFEAAAAXAAAABwAAAAAAAAAPAAAASwAAAEwAAAAXAAAACAAAAAIAAAAMAAAAEAAAABEAAAASAAAAEwAAAJFlAQCYZQEAAAAAAKBlAQCiZQEAKuMBAKRlAQAMAAAABAAAAAYAAAACAAAAAwAAAAEAAAAJAAAACAAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAADxZgEAAWcBAA5nAQAAAAAAAAAAAAQAAAATZwEAAAAAAAAAAAAeZwEAAWcBAA5nAQAAAAAANWcBAAUAAAATZwEAAAAAAD1nAQBEZwEAAWcBAFRnAQAAAAAAAAAAAAYAAAATZwEAoXYBAAAAAABZZwEAAWcBAFRnAQAAAAAANWcBAAcAAAATZwEAoXYBAD1nAQBwZwEAfWcBAFRnAQAAAAAAAAAAAAoAAACLZwEAoXYBAAAAAACRZwEAfWcBAFRnAQAAAAAAPWcBAAsAAACLZwEAoXYBAD1nAQCkZwEAfWcBALJnAQAAAAAAAAAAAAgAAACLZwEAAAAAAAAAAAC4ZwEAfWcBALJnAQAAAAAAPWcBAAkAAACLZwEAAAAAAD1nAQDMZwEAzGcBAAAAAAAAAAAAAAAAAAwAAADUZwEAAAAAAAAAAADeZwEAzGcBAKF2AQAAAAAAAAAAAA4AAADUZwEAoXYBAAAAAADrZwEAzGcBAKF2AQAAAAAANWcBAA8AAADUZwEAoXYBAD1nAQD/ZwEAzGcBAAAAAAAAAAAANWcBAA0AAADUZwEAAAAAAD1nAQAPaAEAD2gBAAAAAAAAAAAAAAAAABAAAAATZwEAAAAAAAAAAAAZaAEAD2gBAKF2AQAAAAAAAAAAABIAAAATZwEAoXYBAAAAAAAoaAEAD2gBAKF2AQAAAAAANWcBABMAAAATZwEAoXYBAD1nAQA+aAEAD2gBAAAAAABPaAEAAAAAABQAAAATZwEAAAAAAAAAAABZaAEAD2gBAKF2AQBPaAEAAAAAABYAAAATZwEAoXYBAAAAAABvaAEAD2gBAKF2AQBPaAEANWcBABcAAAATZwEAoXYBAD1nAQCMaAEAD2gBAAAAAABPaAEANWcBABUAAAATZwEAAAAAAD1nAQClaAEAD2gBAAAAAAAAAAAANWcBABEAAAATZwEAAAAAAD1nAQC3aAEAzWgBAKF2AQAAAAAAAAAAABoAAACLZwEAoXYBAAAAAADiaAEAzWgBAKF2AQAAAAAAPWcBABsAAACLZwEAoXYBAD1nAQD+aAEAzWgBAAAAAAAAAAAAPWcBABkAAACLZwEAAAAAAD1nAQAWaQEAzWgBAC1pAQAAAAAAAAAAABgAAACLZwEAAAAAAAAAAAAzaQEAQWkBAKF2AQAAAAAAAAAAAB4AAACLZwEAoXYBAAAAAABTaQEAQWkBAKF2AQAAAAAAPWcBAB8AAACLZwEAoXYBAD1nAQBnaQEAQWkBAAAAAAAAAAAAPWcBAB0AAACLZwEAAAAAAD1nAQB3aQEAQWkBAC1pAQAAAAAAAAAAABwAAACLZwEAAAAAAAAAAACGaQEAhmkBAAAAAAAAAAAAAAAAACAAAACNaQEAAAAAAAAAAACVaQEAoGkBAKF2AQAAAAAAAAAAAAIAAACLZwEAoXYBAAAAAACmaQEAoGkBAKF2AQAAAAAAPWcBAAMAAACLZwEAoXYBAD1nAQC3aQEAoGkBAAAAAAAAAAAAPWcBAAEAAACLZwEAAAAAAD1nAQBjawEAoGkBAAAAAAAAAAAAAAAAAAAAAACLZwEAAAAAAAAAAADEaQEA3mkBAO1pAQAAAAAAPWcBACEAAACLZwEAAAAAAD1nAQD0aQEAAWoBAAAAAAAAAAAAAAAAACIAAACNaQEAAAAAAAAAAAAIAAAA/////wAAAAAAAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAC/awEAxgAAAMVrAQDBAAAAzGsBAMIAAADSawEAwAAAANlrAQCRAwAA32sBAMUAAADlawEAwwAAAOxrAQDEAAAA8WsBAJIDAAD2awEAxwAAAP1rAQCnAwAAAWwBACEgAAAIbAEAlAMAAA5sAQDQAAAAEmwBAMkAAAAZbAEAygAAAB9sAQDIAAAAJmwBAJUDAAAubAEAlwMAADJsAQDLAAAAN2wBAJMDAAA9bAEAzQAAAERsAQDOAAAASmwBAMwAAABRbAEAmQMAAFZsAQDPAAAAW2wBAJoDAABhbAEAmwMAAGhsAQCcAwAAa2wBANEAAABybAEAnQMAAHVsAQBSAQAAe2wBANMAAACCbAEA1AAAAIhsAQDSAAAAj2wBAKkDAACVbAEAnwMAAJ1sAQDYAAAApGwBANUAAACrbAEA1gAAALBsAQCmAwAAtGwBAKADAAC3bAEAMyAAAL1sAQCoAwAAwWwBAKEDAADFbAEAYAEAAMxsAQCjAwAA0mwBAN4AAADYbAEApAMAANxsAQCYAwAA4mwBANoAAADpbAEA2wAAAO9sAQDZAAAA9mwBAKUDAAD+bAEA3AAAAANtAQCeAwAABm0BAN0AAAANbQEAeAEAABJtAQCWAwAAF20BAOEAAAAebQEA4gAAACRtAQC0AAAAKm0BAOYAAAAwbQEA4AAAADdtAQA1IQAAP20BALEDAABFbQEAJgAAAEltAQAnIgAATW0BACAiAABRbQEA5QAAAFdtAQBIIgAAXW0BAOMAAABkbQEA5AAAAGltAQAeIAAAb20BALIDAAB0bQEApgAAAHttAQAiIAAAgG0BACkiAACEbQEA5wAAAIttAQC4AAAAkW0BAKIAAACWbQEAxwMAAJptAQDGAgAAn20BAGMmAAClbQEARSIAAKptAQCpAAAAr20BALUhAAC1bQEAKiIAALltAQCkAAAAwG0BANMhAADFbQEAICAAAMxtAQCTIQAA0W0BALAAAADVbQEAtAMAANttAQBmJgAA4W0BAPcAAADobQEA6QAAAO9tAQDqAAAA9W0BAOgAAAD8bQEABSIAAAJuAQADIAAAB24BAAIgAAAMbgEAtQMAABRuAQBhIgAAGm4BALcDAAAebgEA8AAAACJuAQDrAAAAJ24BAKwgAAAsbgEAAyIAADJuAQCSAQAAN24BAAAiAAA+bgEAvQAAAEVuAQC8AAAATG4BAL4AAABTbgEARCAAAFluAQCzAwAAX24BAGUiAABibgEAPgAAAGVuAQDUIQAAam4BAJQhAABvbgEAZSYAAHZuAQAmIAAAfW4BAO0AAACEbgEA7gAAAIpuAQChAAAAkG4BAOwAAACXbgEAESEAAJ1uAQAeIgAAo24BACsiAACnbgEAuQMAAKxuAQC/AAAAs24BAAgiAAC4bgEA7wAAAL1uAQC6AwAAw24BANAhAADIbgEAuwMAAM9uAQApIwAA1G4BAKsAAADabgEAkCEAAN9uAQAIIwAA5W4BABwgAADrbgEAZCIAAO5uAQAKIwAA9W4BABciAAD8bgEAyiUAAABvAQAOIAAABG8BADkgAAALbwEAGCAAABFvAQA8AAAAFG8BAK8AAAAZbwEAFCAAAB9vAQC1AAAAJW8BALcAAADRdwEAEiIAACxvAQC8AwAAL28BAAciAAA1bwEAoAAAADpvAQATIAAAQG8BAGAiAABDbwEACyIAAEZvAQCsAAAASm8BAAkiAABQbwEAhCIAAFVvAQDxAAAAXG8BAL0DAABfbwEA8wAAAGZvAQD0AAAAbG8BAFMBAABybwEA8gAAAHlvAQA+IAAAf28BAMkDAACFbwEAvwMAAI1vAQCVIgAAk28BACgiAACWbwEAqgAAAJtvAQC6AAAAoG8BAPgAAACnbwEA9QAAAK5vAQCXIgAAtW8BAPYAAAC6bwEAtgAAAL9vAQACIgAAxG8BADAgAADLbwEApSIAANBvAQDGAwAA1G8BAMADAADXbwEA1gMAANtvAQCxAAAA4m8BAKMAAADobwEAMiAAAO5vAQAPIgAA828BAB0iAAD4bwEAyAMAAPxvAQAiAAAAAXABANIhAAAGcAEAGiIAAAxwAQAqIwAAEXABALsAAAAXcAEAkiEAABxwAQAJIwAAInABAB0gAAAocAEAHCEAAC1wAQCuAAAAMXABAAsjAAA4cAEAwQMAADxwAQAPIAAAQHABADogAABHcAEAGSAAAE1wAQAaIAAAU3ABAGEBAABacAEAxSIAAF9wAQCnAAAAZHABAK0AAABocAEAwwMAAG5wAQDCAwAAdXABADwiAAB5cAEAYCYAAIBwAQCCIgAAhHABAIYiAACJcAEAESIAAI1wAQCDIgAAkXABALkAAACWcAEAsgAAAJtwAQCzAAAAoHABAIciAAClcAEA3wAAAKtwAQDEAwAAr3ABADQiAAC2cAEAuAMAALxwAQDRAwAAxXABAAkgAADMcAEA/gAAANJwAQDcAgAA2HABANcAAADecAEAIiEAAORwAQDRIQAA6XABAPoAAADwcAEAkSEAAPVwAQD7AAAA+3ABAPkAAAACcQEAqAAAAAZxAQDSAwAADHEBAMUDAAAUcQEA/AAAABlxAQAYIQAAIHEBAL4DAAAjcQEA/QAAACpxAQClAAAALnEBAP8AAAAzcQEAtgMAADhxAQANIAAAPHEBAAwgAAAFAAAABgAAAAEBAAAIAAAACAAAAAAAAAAAAAAAKgAAAA0AAAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAAAAAKwAAAA4AAAAAAAAAAAAAAAAAAACRdwEABwAAAJN3AQAIAAAAmHcBAAgAAACgdwEACQAAAKZ3AQAJAAAAr3cBAAoAAACydwEACgAAALh3AQALAAAAvXcBAAsAAADFdwEADAAAAMp3AQAMAAAA0XcBAA0AAADXdwEADQAAAON3AQAOAAAAUgAAACwAAAAtAAAAFAAAAC4AAABTAAAALwAAABUAAAAwAAAACAAAAAQAAAD/////AAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAO3kBAFVdyX/Jf/8ARnkBALst1L6u1P8AUXkBABR3/f3Ahv8AXHkBAFVdyX/Jf/8AZ3kBALst1L6u1P8AcnkBABR3/f3Ahv8AfXkBACpm////mf8AiHkBAFVdyX/Jf/8Ak3kBALst1L6u1P8AnnkBABR3/f3Ahv8AqXkBACpm////mf8AtHkBAJetsDhssP8Av3kBAFVdyX/Jf/8AynkBALst1L6u1P8A1XkBABR3/f3Ahv8A4HkBACpm////mf8A63kBAJetsDhssP8A9nkBAOj88PACf/8AAXoBAFVdyX/Jf/8ADHoBALst1L6u1P8AF3oBABR3/f3Ahv8AInoBACpm////mf8ALXoBAJetsDhssP8AOHoBAOj88PACf/8AQ3oBABHgv79bF/8ATnoBAFVdyX/Jf/8AWXoBALst1L6u1P8AZHoBABR3/f3Ahv8Ab3oBACpm////mf8AenoBAJetsDhssP8AhXoBAOj88PACf/8AkHoBABHgv79bF/8Am3oBAAAAZmZmZv8ApnoBAJMZ997r9/8AsHoBAI5L4Z7K4f8AunoBAJG8vTGCvf8AxHoBAJ8Q/+/z//8AznoBAI8u573X5/8A2HoBAI9/1muu1v8A4noBAJPQtSFxtf8A7HoBAJ8Q/+/z//8A9noBAI8u573X5/8AAHsBAI9/1muu1v8ACnsBAJG8vTGCvf8AFHsBAJXxnAhRnP8AHnsBAJ8Q/+/z//8AKHsBAJQr78bb7/8AMnsBAI5L4Z7K4f8APHsBAI9/1muu1v8ARnsBAJG8vTGCvf8AUHsBAJXxnAhRnP8AWnsBAJ8Q/+/z//8AZHsBAJQr78bb7/8AbnsBAI5L4Z7K4f8AeHsBAI9/1muu1v8AgnsBAJCpxkKSxv8AjHsBAJPQtSFxtf8AlnsBAJfxlAhFlP8AoHsBAJQI//f7//8AqnsBAJMZ997r9/8AtHsBAJQr78bb7/8AvnsBAI5L4Z7K4f8AyHsBAI9/1muu1v8A0nsBAJCpxkKSxv8A3HsBAJPQtSFxtf8A5nsBAJfxlAhFlP8A8HsBAJQI//f7//8A+nsBAJMZ997r9/8ABHwBAJQr78bb7/8ADnwBAI5L4Z7K4f8AGHwBAI9/1muu1v8AInwBAJCpxkKSxv8ALHwBAJPQtSFxtf8ANnwBAJXxnAhRnP8AQHwBAJjrawgwa/8ASnwBABfvVFQwBf8AVHwBAHf/PAA8MP8AX3wBABfsjIxRCv8AaXwBABjCv7+BLf8Ac3wBAB1w39/Cff8AfXwBAB409vbow/8Ah3wBAHkm6sfq5f8AkXwBAHhfzYDNwf8Am3wBAHyllzWXj/8ApXwBAHz8ZgFmXv8Ar3wBABfvVFQwBf8AuXwBAHz8ZgFmXv8AxHwBAHf/PAA8MP8Az3wBABfsjIxRCv8A2XwBABjCv7+BLf8A43wBAB1w39/Cff8A7XwBAB409vbow/8A93wBAAAA9fX19f8AAX0BAHkm6sfq5f8AC30BAHhfzYDNwf8AFX0BAHyllzWXj/8AH30BAByH2NizZf8AKH0BAAAA9fX19f8AMX0BAHt/tFq0rP8AOn0BABXXpqZhGv8AQ30BAB1w39/Cff8ATH0BAHhfzYDNwf8AVX0BAHn9hQGFcf8AXn0BABXXpqZhGv8AZ30BAB1w39/Cff8AcH0BAAAA9fX19f8AeX0BAHhfzYDNwf8Agn0BAHn9hQGFcf8Ai30BABfsjIxRCv8AlH0BAByH2NizZf8AnX0BAB409vbow/8Apn0BAHkm6sfq5f8Ar30BAHt/tFq0rP8AuH0BAHz8ZgFmXv8AwX0BABfsjIxRCv8Ayn0BAByH2NizZf8A030BAB409vbow/8A3H0BAAAA9fX19f8A5X0BAHkm6sfq5f8A7n0BAHt/tFq0rP8A930BAHz8ZgFmXv8AAH4BABfsjIxRCv8ACX4BABjCv7+BLf8AEn4BAB1w39/Cff8AG34BAB409vbow/8AJH4BAHkm6sfq5f8ALX4BAHhfzYDNwf8ANn4BAHyllzWXj/8AP34BAHz8ZgFmXv8ASH4BABfsjIxRCv8AUX4BABjCv7+BLf8AWn4BAB1w39/Cff8AY34BAB409vbow/8AbH4BAAAA9fX19f8AdX4BAHkm6sfq5f8Afn4BAHhfzYDNwf8Ah34BAHyllzWXj/8AkH4BAHz8ZgFmXv8AmX4BAIcU+eX1+f8Aon4BAHVK2JnYyf8Aq34BAGe5oiyiX/8AtH4BAIgO++34+/8AvX4BAH824rLi4v8Axn4BAHF4wmbCpP8Az34BAGK+iyOLRf8A2H4BAIgO++34+/8A4X4BAH824rLi4v8A6n4BAHF4wmbCpP8A834BAGe5oiyiX/8A/H4BAGb/bQBtLP8ABX8BAIgO++34+/8ADn8BAHci7Mzs5v8AF38BAHVK2JnYyf8AIH8BAHF4wmbCpP8AKX8BAGe5oiyiX/8AMn8BAGb/bQBtLP8AO38BAIgO++34+/8ARH8BAHci7Mzs5v8ATX8BAHVK2JnYyf8AVn8BAHF4wmbCpP8AX38BAGmfrkGudv8AaH8BAGK+iyOLRf8AcX8BAGb/WABYJP8Aen8BAIYG/ff8/f8Ag38BAIcU+eX1+f8AjH8BAHci7Mzs5v8AlX8BAHVK2JnYyf8Ann8BAHF4wmbCpP8Ap38BAGmfrkGudv8AsH8BAGK+iyOLRf8AuX8BAGb/WABYJP8Awn8BAIYG/ff8/f8Ay38BAIcU+eX1+f8A1H8BAHci7Mzs5v8A3X8BAHVK2JnYyf8A5n8BAHF4wmbCpP8A738BAGmfrkGudv8A+H8BAGK+iyOLRf8AAYABAGb/bQBtLP8ACoABAGX/RABEG/8AE4ABAJAU9ODs9P8AHIABAJRG2p682v8AJYABAMR7p4hWp/8ALoABAIgO++34+/8AN4ABAJI147PN4/8AQIABAKJKxoyWxv8ASYABAMqVnYhBnf8AUoABAIgO++34+/8AW4ABAJI147PN4/8AZIABAKJKxoyWxv8AbYABAMR7p4hWp/8AdoABANbhgYEPfP8Af4ABAIgO++34+/8AiIABAJQr5r/T5v8AkYABAJRG2p682v8AmoABAKJKxoyWxv8Ao4ABAMR7p4hWp/8ArIABANbhgYEPfP8AtYABAIgO++34+/8AvoABAJQr5r/T5v8Ax4ABAJRG2p682v8A0IABAKJKxoyWxv8A2YABAL5ksYxrsf8A4oABAMqVnYhBnf8A64ABANX8bm4Ba/8A9IABAIYG/ff8/f8A/YABAJAU9ODs9P8ABoEBAJQr5r/T5v8AD4EBAJRG2p682v8AGIEBAKJKxoyWxv8AIYEBAL5ksYxrsf8AKoEBAMqVnYhBnf8AM4EBANX8bm4Ba/8APIEBAIYG/ff8/f8ARYEBAJAU9ODs9P8AToEBAJQr5r/T5v8AV4EBAJRG2p682v8AYIEBAKJKxoyWxv8AaYEBAL5ksYxrsf8AcoEBAMqVnYhBnf8Ae4EBANbhgYEPfP8AhIEBANX/TU0AS/8AjYEBAHLTnhued/8Al4EBABL82dlfAv8AoYEBAK1fs3Vws/8Aq4EBAHLTnhued/8AtYEBABL82dlfAv8Av4EBAK1fs3Vws/8AyYEBAOnR5+cpiv8A04EBAHLTnhued/8A3YEBABL82dlfAv8A54EBAK1fs3Vws/8A8YEBAOnR5+cpiv8A+4EBAD7QpmamHv8ABYIBAHLTnhued/8AD4IBABL82dlfAv8AGYIBAK1fs3Vws/8AI4IBAOnR5+cpiv8ALYIBAD7QpmamHv8AN4IBAB/85uarAv8AQYIBAHLTnhued/8AS4IBABL82dlfAv8AVYIBAK1fs3Vws/8AX4IBAOnR5+cpiv8AaYIBAD7QpmamHv8Ac4IBAB/85uarAv8AfYIBABvSpqZ2Hf8Ah4IBAHLTnhued/8AkYIBABL82dlfAv8Am4IBAK1fs3Vws/8ApYIBAOnR5+cpiv8Ar4IBAD7QpmamHv8AuYIBAB/85uarAv8Aw4IBABvSpqZ2Hf8AzYIBAAAAZmZmZv8A14IBAEwZ8+Dz2/8A4IIBAF893ajdtf8A6YIBAIyqykOiyv8A8oIBAEER+fD56P8A+4IBAFcu5LrkvP8ABIMBAHtlzHvMxP8ADYMBAI3FviuMvv8AFoMBAEER+fD56P8AH4MBAFcu5LrkvP8AKIMBAHtlzHvMxP8AMYMBAIyqykOiyv8AOoMBAJHzrAhorP8AQ4MBAEER+fD56P8ATIMBAE0p68zrxf8AVYMBAF893ajdtf8AXoMBAHtlzHvMxP8AZ4MBAIyqykOiyv8AcIMBAJHzrAhorP8AeYMBAEER+fD56P8AgoMBAE0p68zrxf8Ai4MBAF893ajdtf8AlIMBAHtlzHvMxP8AnYMBAImg006z0/8ApoMBAI3FviuMvv8Ar4MBAJPynghYnv8AuIMBADwM/Pf88P8AwYMBAEwZ8+Dz2/8AyoMBAE0p68zrxf8A04MBAF893ajdtf8A3IMBAHtlzHvMxP8A5YMBAImg006z0/8A7oMBAI3FviuMvv8A94MBAJPynghYnv8AAIQBADwM/Pf88P8ACYQBAEwZ8+Dz2/8AEoQBAE0p68zrxf8AG4QBAF893ajdtf8AJIQBAHtlzHvMxP8ALYQBAImg006z0/8ANoQBAI3FviuMvv8AP4QBAJHzrAhorP8ASIQBAJbvgQhAgf8AUYQBAEoV9eX14P8AXIQBAFBI2aHZm/8AZ4QBAGKyozGjVP8AcoQBAEkP+O346f8AfYQBAE425Lrks/8AiIQBAFZoxHTEdv8Ak4QBAGK+iyOLRf8AnoQBAEkP+O346f8AqYQBAE425Lrks/8AtIQBAFZoxHTEdv8Av4QBAGKyozGjVP8AyoQBAGb/bQBtLP8A1YQBAEkP+O346f8A4IQBAE0s6cfpwP8A64QBAFBI2aHZm/8A9oQBAFZoxHTEdv8AAYUBAGKyozGjVP8ADIUBAGb/bQBtLP8AF4UBAEkP+O346f8AIoUBAE0s6cfpwP8ALYUBAFBI2aHZm/8AOIUBAFZoxHTEdv8AQ4UBAGCeq0GrXf8AToUBAGK+iyOLRf8AWYUBAGz/WgBaMv8AZIUBAEgH/Pf89f8Ab4UBAEoV9eX14P8AeoUBAE0s6cfpwP8AhYUBAFBI2aHZm/8AkIUBAFZoxHTEdv8Am4UBAGCeq0GrXf8ApoUBAGK+iyOLRf8AsYUBAGz/WgBaMv8AvIUBAEgH/Pf89f8Ax4UBAEoV9eX14P8A0oUBAE0s6cfpwP8A3YUBAFBI2aHZm/8A6IUBAFZoxHTEdv8A84UBAGCeq0GrXf8A/oUBAGK+iyOLRf8ACYYBAGb/bQBtLP8AFIYBAGX/RABEG/8AH4YBAAAA8PDw8P8AKYYBAAAAvb29vf8AM4YBAAAAY2NjY/8APYYBAAAA9/f39/8AR4YBAAAAzMzMzP8AUYYBAAAAlpaWlv8AW4YBAAAAUlJSUv8AZYYBAAAA9/f39/8Ab4YBAAAAzMzMzP8AeYYBAAAAlpaWlv8Ag4YBAAAAY2NjY/8AjYYBAAAAJSUlJf8Al4YBAAAA9/f39/8AoYYBAAAA2dnZ2f8Aq4YBAAAAvb29vf8AtYYBAAAAlpaWlv8Av4YBAAAAY2NjY/8AyYYBAAAAJSUlJf8A04YBAAAA9/f39/8A3YYBAAAA2dnZ2f8A54YBAAAAvb29vf8A8YYBAAAAlpaWlv8A+4YBAAAAc3Nzc/8ABYcBAAAAUlJSUv8AD4cBAAAAJSUlJf8AGYcBAAAA//////8AI4cBAAAA8PDw8P8ALYcBAAAA2dnZ2f8AN4cBAAAAvb29vf8AQYcBAAAAlpaWlv8AS4cBAAAAc3Nzc/8AVYcBAAAAUlJSUv8AX4cBAAAAJSUlJf8AaYcBAAAA//////8Ac4cBAAAA8PDw8P8AfYcBAAAA2dnZ2f8Ah4cBAAAAvb29vf8AkYcBAAAAlpaWlv8Am4cBAAAAc3Nzc/8ApYcBAAAAUlJSUv8Ar4cBAAAAJSUlJf8AuYcBAAAAAAAAAP8Aw4cBABUw/v7mzv8Az4cBABOT/f2ua/8A24cBAA7w5uZVDf8A54cBABMg/v7t3v8A84cBABR4/f2+hf8A/4cBABHC/f2NPP8AC4gBAA392dlHAf8AF4gBABMg/v7t3v8AI4gBABR4/f2+hf8AL4gBABHC/f2NPP8AO4gBAA7w5uZVDf8AR4gBAA36pqY2A/8AU4gBABMg/v7t3v8AX4gBABVb/f3Qov8Aa4gBABOT/f2ua/8Ad4gBABHC/f2NPP8Ag4gBAA7w5uZVDf8Aj4gBAA36pqY2A/8Am4gBABMg/v7t3v8Ap4gBABVb/f3Qov8As4gBABOT/f2ua/8Av4gBABHC/f2NPP8Ay4gBABDq8fFpE/8A14gBAA392dlIAf8A44gBAAz3jIwtBP8A74gBABUU///16/8A+4gBABUw/v7mzv8AB4kBABVb/f3Qov8AE4kBABOT/f2ua/8AH4kBABHC/f2NPP8AK4kBABDq8fFpE/8AN4kBAA392dlIAf8AQ4kBAAz3jIwtBP8AT4kBABUU///16/8AW4kBABUw/v7mzv8AZ4kBABVb/f3Qov8Ac4kBABOT/f2ua/8Af4kBABHC/f2NPP8Ai4kBABDq8fFpE/8Al4kBAA392dlIAf8Ao4kBAA36pqY2A/8Ar4kBAAz2f38nBP8Au4kBABk2/v7oyP8AxIkBABN5/f27hP8AzYkBAAXF4+NKM/8A1okBABol/v7w2f8A34kBABhz/f3Miv8A6IkBAA2k/PyNWf8A8YkBAAPa19cwH/8A+okBABol/v7w2f8AA4oBABhz/f3Miv8ADIoBAA2k/PyNWf8AFYoBAAXF4+NKM/8AHooBAAD/s7MAAP8AJ4oBABol/v7w2f8AMIoBABhf/f3Unv8AOYoBABN5/f27hP8AQooBAA2k/PyNWf8AS4oBAAXF4+NKM/8AVIoBAAD/s7MAAP8AXYoBABol/v7w2f8AZooBABhf/f3Unv8Ab4oBABN5/f27hP8AeIoBAA2k/PyNWf8AgYoBAAey7+9lSP8AiooBAAPa19cwH/8Ak4oBAAD/mZkAAP8AnIoBABgS///37P8ApYoBABk2/v7oyP8ArooBABhf/f3Unv8At4oBABN5/f27hP8AwIoBAA2k/PyNWf8AyYoBAAey7+9lSP8A0ooBAAPa19cwH/8A24oBAAD/mZkAAP8A5IoBABgS///37P8A7YoBABk2/v7oyP8A9ooBABhf/f3Unv8A/4oBABN5/f27hP8ACIsBAA2k/PyNWf8AEYsBAAey7+9lSP8AGosBAAPa19cwH/8AI4sBAAD/s7MAAP8ALIsBAAD/f38AAP8ANYsBAI5E46bO4/8AQYsBAL6Zmmo9mv8ATosBAJDTtB94tP8AWosBAEFh37Lfiv8AZosBAFK4oDOgLP8AcosBAABj+/uamf8AfosBAP7h4+MaHP8AiosBABeP/f2/b/8AlosBABX///9/AP8AoosBAMYq1sqy1v8ArosBAI5E46bO4/8AuosBAL6Zmmo9mv8Ax4sBACpm////mf8A1IsBAJDTtB94tP8A4IsBAEFh37Lfiv8A7IsBAFK4oDOgLP8A+IsBAABj+/uamf8ABIwBAP7h4+MaHP8AEIwBABeP/f2/b/8AHIwBABX///9/AP8AKIwBAMYq1sqy1v8ANIwBAI5E46bO4/8AQIwBAL6Zmmo9mv8ATYwBACpm////mf8AWowBAA/FsbFZKP8AZ4wBAJDTtB94tP8Ac4wBAEFh37Lfiv8Af4wBAFK4oDOgLP8Ai4wBAABj+/uamf8Al4wBAP7h4+MaHP8Ao4wBABeP/f2/b/8Ar4wBABX///9/AP8Au4wBAMYq1sqy1v8Ax4wBAI5E46bO4/8A0owBAJDTtB94tP8A3YwBAEFh37Lfiv8A6IwBAI5E46bO4/8A84wBAJDTtB94tP8A/owBAEFh37Lfiv8ACY0BAFK4oDOgLP8AFI0BAI5E46bO4/8AH40BAJDTtB94tP8AKo0BAEFh37Lfiv8ANY0BAFK4oDOgLP8AQI0BAABj+/uamf8AS40BAI5E46bO4/8AVo0BAJDTtB94tP8AYY0BAEFh37Lfiv8AbI0BAFK4oDOgLP8Ad40BAABj+/uamf8Ago0BAP7h4+MaHP8AjY0BAI5E46bO4/8AmI0BAJDTtB94tP8Ao40BAEFh37Lfiv8Aro0BAFK4oDOgLP8AuY0BAABj+/uamf8AxI0BAP7h4+MaHP8Az40BABeP/f2/b/8A2o0BAI5E46bO4/8A5Y0BAJDTtB94tP8A8I0BAEFh37Lfiv8A+40BAFK4oDOgLP8ABo4BAABj+/uamf8AEY4BAP7h4+MaHP8AHI4BABeP/f2/b/8AJ44BABX///9/AP8AMo4BAI5E46bO4/8APY4BAJDTtB94tP8ASI4BAEFh37Lfiv8AU44BAFK4oDOgLP8AXo4BAABj+/uamf8AaY4BAP7h4+MaHP8AdI4BABeP/f2/b/8Af44BABX///9/AP8Aio4BAMYq1sqy1v8AlY4BAANO+/u0rv8AoY4BAJI147PN4/8ArY4BAE0p68zrxf8AuY4BAANO+/u0rv8AxY4BAJI147PN4/8A0Y4BAE0p68zrxf8A3Y4BAMob5N7L5P8A6Y4BAANO+/u0rv8A9Y4BAJI147PN4/8AAY8BAE0p68zrxf8ADY8BAMob5N7L5P8AGY8BABhY/v7Zpv8AJY8BAANO+/u0rv8AMY8BAJI147PN4/8APY8BAE0p68zrxf8ASY8BAMob5N7L5P8AVY8BABhY/v7Zpv8AYY8BACoy////zP8AbY8BAANO+/u0rv8AeY8BAJI147PN4/8AhY8BAE0p68zrxf8AkY8BAMob5N7L5P8AnY8BABhY/v7Zpv8AqY8BACoy////zP8AtY8BABws5eXYvf8AwY8BAANO+/u0rv8AzY8BAJI147PN4/8A2Y8BAE0p68zrxf8A5Y8BAMob5N7L5P8A8Y8BABhY/v7Zpv8A/Y8BACoy////zP8ACZABABws5eXYvf8AFZABAOkj/f3a7P8AIZABAANO+/u0rv8ALZABAJI147PN4/8AOZABAE0p68zrxf8ARZABAMob5N7L5P8AUZABABhY/v7Zpv8AXZABACoy////zP8AaZABABws5eXYvf8AdZABAOkj/f3a7P8AgZABAAAA8vLy8v8AjZABAGw14rPizf8AmZABABFR/f3NrP8ApZABAJsf6MvV6P8AsZABAGw14rPizf8AvZABABFR/f3NrP8AyZABAJsf6MvV6P8A1ZABAOQr9PTK5P8A4ZABAGw14rPizf8A7ZABABFR/f3NrP8A+ZABAJsf6MvV6P8ABZEBAOQr9PTK5P8AEZEBADgt9eb1yf8AHZEBAGw14rPizf8AKZEBABFR/f3NrP8ANZEBAJsf6MvV6P8AQZEBAOQr9PTK5P8ATZEBADgt9eb1yf8AWZEBACNR///yrv8AZZEBAGw14rPizf8AcZEBABFR/f3NrP8AfZEBAJsf6MvV6P8AiZEBAOQr9PTK5P8AlZEBADgt9eb1yf8AoZEBACNR///yrv8ArZEBABkn8fHizP8AuZEBAGw14rPizf8AxZEBABFR/f3NrP8A0ZEBAJsf6MvV6P8A3ZEBAOQr9PTK5P8A6ZEBADgt9eb1yf8A9ZEBACNR///yrv8AAZIBABkn8fHizP8ADZIBAAAAzMzMzP8AGZIBAOb9jo4BUv8AI5IBAE2/ZCdkGf8ALpIBAObcxcUbff8AOJIBAOh23t53rv8AQpIBAOU+8fG22v8ATJIBAOkd/f3g7/8AVpIBADsm9eb10P8AYJIBAD1n4bjhhv8AapIBAD+mvH+8Qf8AdJIBAETFkk2SIf8AfpIBAOb9jo4BUv8AiJIBAETFkk2SIf8Ak5IBAE2/ZCdkGf8AnpIBAObcxcUbff8AqJIBAOh23t53rv8AspIBAOU+8fG22v8AvJIBAOkd/f3g7/8AxpIBAAAA9/f39/8A0JIBADsm9eb10P8A2pIBAD1n4bjhhv8A5JIBAD+mvH+8Qf8A7pIBAOdM6emjyf8A95IBAAAA9/f39/8AAJMBAD+B16HXav8ACZMBAOTc0NAci/8AEpMBAOU+8fG22v8AG5MBAD1n4bjhhv8AJJMBAEjGrE2sJv8ALZMBAOTc0NAci/8ANpMBAOU+8fG22v8AP5MBAAAA9/f39/8ASJMBAD1n4bjhhv8AUZMBAEjGrE2sJv8AWpMBAObcxcUbff8AY5MBAOdM6emjyf8AbJMBAOkd/f3g7/8AdZMBADsm9eb10P8AfpMBAD+B16HXav8Ah5MBAETFkk2SIf8AkJMBAObcxcUbff8AmZMBAOdM6emjyf8AopMBAOkd/f3g7/8Aq5MBAAAA9/f39/8AtJMBADsm9eb10P8AvZMBAD+B16HXav8AxpMBAETFkk2SIf8Az5MBAObcxcUbff8A2JMBAOh23t53rv8A4ZMBAOU+8fG22v8A6pMBAOkd/f3g7/8A85MBADsm9eb10P8A/JMBAD1n4bjhhv8ABZQBAD+mvH+8Qf8ADpQBAETFkk2SIf8AF5QBAObcxcUbff8AIJQBAOh23t53rv8AKZQBAOU+8fG22v8AMpQBAOkd/f3g7/8AO5QBAAAA9/f39/8ARJQBADsm9eb10P8ATZQBAD1n4bjhhv8AVpQBAD+mvH+8Qf8AX5QBAETFkk2SIf8AaJQBAM7/S0AAS/8AcpQBAGX/RABEG/8AfZQBAM6tg3Yqg/8Ah5QBAMdXq5lwq/8AkZQBAMczz8Klz/8Am5QBANIV6OfU6P8ApZQBAEwe8Nnw0/8Ar5QBAFBE26bboP8AuZQBAFh7rlquYf8Aw5QBAGHFeBt4N/8AzZQBAM7/S0AAS/8A15QBAGHFeBt4N/8A4pQBAGX/RABEG/8A7ZQBAM6tg3Yqg/8A95QBAMdXq5lwq/8AAZUBAMczz8Klz/8AC5UBANIV6OfU6P8AFZUBAAAA9/f39/8AH5UBAEwe8Nnw0/8AKZUBAFBE26bboP8AM5UBAFh7rlquYf8APZUBAMRGw6+Nw/8ARpUBAAAA9/f39/8AT5UBAFJav3+/e/8AWJUBAMmolHsylP8AYZUBAMczz8Klz/8AapUBAFBE26bboP8Ac5UBAGb/iACIN/8AfJUBAMmolHsylP8AhZUBAMczz8Klz/8AjpUBAAAA9/f39/8Al5UBAFBE26bboP8AoJUBAGb/iACIN/8AqZUBAM6tg3Yqg/8AspUBAMRGw6+Nw/8Au5UBANIV6OfU6P8AxJUBAEwe8Nnw0/8AzZUBAFJav3+/e/8A1pUBAGHFeBt4N/8A35UBAM6tg3Yqg/8A6JUBAMRGw6+Nw/8A8ZUBANIV6OfU6P8A+pUBAAAA9/f39/8AA5YBAEwe8Nnw0/8ADJYBAFJav3+/e/8AFZYBAGHFeBt4N/8AHpYBAM6tg3Yqg/8AJ5YBAMdXq5lwq/8AMJYBAMczz8Klz/8AOZYBANIV6OfU6P8AQpYBAEwe8Nnw0/8AS5YBAFBE26bboP8AVJYBAFh7rlquYf8AXZYBAGHFeBt4N/8AZpYBAM6tg3Yqg/8Ab5YBAMdXq5lwq/8AeJYBAMczz8Klz/8AgZYBANIV6OfU6P8AipYBAAAA9/f39/8Ak5YBAEwe8Nnw0/8AnJYBAFBE26bboP8ApZYBAFh7rlquYf8ArpYBAGHFeBt4N/8At5YBAL0L8uzn8v8AwJYBAJc926a92/8AyZYBAI3FviuMvv8A0pYBALkI9vHu9v8A25YBAJso4b3J4f8A5JYBAJFwz3Spz/8A7ZYBAI/3sAVwsP8A9pYBALkI9vHu9v8A/5YBAJso4b3J4f8ACJcBAJFwz3Spz/8AEZcBAI3FviuMvv8AGpcBAI/3jQRajf8AI5cBALkI9vHu9v8ALJcBAKgY5tDR5v8ANZcBAJc926a92/8APpcBAJFwz3Spz/8AR5cBAI3FviuMvv8AUJcBAI/3jQRajf8AWZcBALkI9vHu9v8AYpcBAKgY5tDR5v8Aa5cBAJc926a92/8AdJcBAJFwz3Spz/8AfZcBAI63wDaQwP8AhpcBAI/3sAVwsP8Aj5cBAI/4ewNOe/8AmJcBAOkI///3+/8AoZcBAL0L8uzn8v8AqpcBAKgY5tDR5v8As5cBAJc926a92/8AvJcBAJFwz3Spz/8AxZcBAI63wDaQwP8AzpcBAI/3sAVwsP8A15cBAI/4ewNOe/8A4JcBAOkI///3+/8A6ZcBAL0L8uzn8v8A8pcBAKgY5tDR5v8A+5cBAJc926a92/8ABJgBAJFwz3Spz/8ADZgBAI63wDaQwP8AFpgBAI/3sAVwsP8AH5gBAI/3jQRajf8AKJgBAI/5WAI4WP8AMZgBAMgO8Ozi8P8APJgBAJc926a92/8AR5gBAILQmRyQmf8AUpgBAM8I9/bv9/8AXZgBAJso4b3J4f8AaJgBAI+Az2epz/8Ac5gBAIL7igKBiv8AfpgBAM8I9/bv9/8AiZgBAJso4b3J4f8AlJgBAI+Az2epz/8An5gBAILQmRyQmf8AqpgBAHf8bAFsWf8AtZgBAM8I9/bv9/8AwJgBAKgY5tDR5v8Ay5gBAJc926a92/8A1pgBAI+Az2epz/8A4ZgBAILQmRyQmf8A7JgBAHf8bAFsWf8A95gBAM8I9/bv9/8AApkBAKgY5tDR5v8ADZkBAJc926a92/8AGJkBAI+Az2epz/8AI5kBAI63wDaQwP8ALpkBAIL7igKBiv8AOZkBAHb8ZAFkUP8ARJkBAOkI///3+/8AT5kBAMgO8Ozi8P8AWpkBAKgY5tDR5v8AZZkBAJc926a92/8AcJkBAI+Az2epz/8Ae5kBAI63wDaQwP8AhpkBAIL7igKBiv8AkZkBAHb8ZAFkUP8AnJkBAOkI///3+/8Ap5kBAMgO8Ozi8P8AspkBAKgY5tDR5v8AvZkBAJc926a92/8AyJkBAI+Az2epz/8A05kBAI63wDaQwP8A3pkBAIL7igKBiv8A6ZkBAHf8bAFsWf8A9JkBAHX7RgFGNv8A/5kBABLuf387CP8ACZoBAMP/Sy0AS/8AFJoBABT2s7NYBv8AHpoBABbo4OCCFP8AKJoBABeb/f24Y/8AMpoBABhI/v7gtv8APJoBAKUU69ja6/8ARpoBALEv0rKr0v8AUJoBALNUrIBzrP8AWpoBAL21iFQniP8AZJoBABLuf387CP8AbpoBAL21iFQniP8AeZoBAMP/Sy0AS/8AhJoBABT2s7NYBv8AjpoBABbo4OCCFP8AmJoBABeb/f24Y/8AopoBABhI/v7gtv8ArJoBAAAA9/f39/8AtpoBAKUU69ja6/8AwJoBALEv0rKr0v8AypoBALNUrIBzrP8A1JoBABe78fGjQP8A3ZoBAAAA9/f39/8A5poBALJFw5mOw/8A75oBABH95uZhAf8A+JoBABeb/f24Y/8AAZsBALEv0rKr0v8ACpsBALmbmV48mf8AE5sBABH95uZhAf8AHJsBABeb/f24Y/8AJZsBAAAA9/f39/8ALpsBALEv0rKr0v8AN5sBALmbmV48mf8AQJsBABT2s7NYBv8ASZsBABe78fGjQP8AUpsBABhI/v7gtv8AW5sBAKUU69ja6/8AZJsBALJFw5mOw/8AbZsBAL21iFQniP8AdpsBABT2s7NYBv8Af5sBABe78fGjQP8AiJsBABhI/v7gtv8AkZsBAAAA9/f39/8AmpsBAKUU69ja6/8Ao5sBALJFw5mOw/8ArJsBAL21iFQniP8AtZsBABT2s7NYBv8AvpsBABbo4OCCFP8Ax5sBABeb/f24Y/8A0JsBABhI/v7gtv8A2ZsBAKUU69ja6/8A4psBALEv0rKr0v8A65sBALNUrIBzrP8A9JsBAL21iFQniP8A/ZsBABT2s7NYBv8ABpwBABbo4OCCFP8AD5wBABeb/f24Y/8AGJwBABhI/v7gtv8AIZwBAAAA9/f39/8AKpwBAKUU69ja6/8AM5wBALEv0rKr0v8APJwBALNUrIBzrP8ARZwBAL21iFQniP8ATpwBALwO7+fh7/8AV5wBANZDycmUx/8AYJwBAOre3d0cd/8AaZwBALkI9vHu9v8AcpwBANMp2Ne12P8Ae5wBAOSL399lsP8AhJwBAO/ozs4SVv8AjZwBALkI9vHu9v8AlpwBANMp2Ne12P8An5wBAOSL399lsP8AqJwBAOre3d0cd/8AsZwBAOz/mJgAQ/8AupwBALkI9vHu9v8Aw5wBAMwm2tS52v8AzJwBANZDycmUx/8A1ZwBAOSL399lsP8A3pwBAOre3d0cd/8A55wBAOz/mJgAQ/8A8JwBALkI9vHu9v8A+ZwBAMwm2tS52v8AAp0BANZDycmUx/8AC50BAOSL399lsP8AFJ0BAOnR5+cpiv8AHZ0BAO/ozs4SVv8AJp0BAOz/kZEAP/8AL50BAMMF+ff0+f8AOJ0BALwO7+fh7/8AQZ0BAMwm2tS52v8ASp0BANZDycmUx/8AU50BAOSL399lsP8AXJ0BAOnR5+cpiv8AZZ0BAO/ozs4SVv8Abp0BAOz/kZEAP/8Ad50BAMMF+ff0+f8AgJ0BALwO7+fh7/8AiZ0BAMwm2tS52v8Akp0BANZDycmUx/8Am50BAOSL399lsP8ApJ0BAOnR5+cpiv8ArZ0BAO/ozs4SVv8Atp0BAOz/mJgAQ/8Av50BAPL/Z2cAH/8AyJ0BALQI9e/t9f8A1J0BAKgl3Ly93P8A4J0BALBksXVrsf8A7J0BALYH9/Lw9/8A+J0BAK0c4svJ4v8ABJ4BAK06yJ6ayP8AEJ4BALaAo2pRo/8AHJ4BALYH9/Lw9/8AKJ4BAK0c4svJ4v8ANJ4BAK06yJ6ayP8AQJ4BALBksXVrsf8ATJ4BALy5j1Qnj/8AWJ4BALYH9/Lw9/8AZJ4BAKoS69ra6/8AcJ4BAKgl3Ly93P8AfJ4BAK06yJ6ayP8AiJ4BALBksXVrsf8AlJ4BALy5j1Qnj/8AoJ4BALYH9/Lw9/8ArJ4BAKoS69ra6/8AuJ4BAKgl3Ly93P8AxJ4BAK06yJ6ayP8A0J4BAKxTuoB9uv8A3J4BALaAo2pRo/8A6J4BAL7YhkoUhv8A9J4BAL8C/fz7/f8AAJ8BALQI9e/t9f8ADJ8BAKoS69ra6/8AGJ8BAKgl3Ly93P8AJJ8BAK06yJ6ayP8AMJ8BAKxTuoB9uv8APJ8BALaAo2pRo/8ASJ8BAL7YhkoUhv8AVJ8BAL8C/fz7/f8AYJ8BALQI9e/t9f8AbJ8BAKoS69ra6/8AeJ8BAKgl3Ly93P8AhJ8BAK06yJ6ayP8AkJ8BAKxTuoB9uv8AnJ8BALaAo2pRo/8AqJ8BALy5j1Qnj/8AtJ8BAL//fT8Aff8AwJ8BAPL/Z2cAH/8Ayp8BAJbxYQUwYf8A1Z8BAPncsrIYK/8A358BAAWj1tZgTf8A6Z8BAA139PSlgv8A858BAA82/f3bx/8A/Z8BAI4g8NHl8P8AB6ABAI1X3pLF3v8AEaABAI+nw0OTw/8AG6ABAJTOrCFmrP8AJaABAPL/Z2cAH/8AL6ABAJTOrCFmrP8AOqABAJbxYQUwYf8ARaABAPncsrIYK/8AT6ABAAWj1tZgTf8AWaABAA139PSlgv8AY6ABAA82/f3bx/8AbaABAAAA9/f39/8Ad6ABAI4g8NHl8P8AgaABAI1X3pLF3v8Ai6ABAI+nw0OTw/8AlaABAAyW7++KYv8AnqABAAAA9/f39/8Ap6ABAI+Az2epz/8AsKABAPj/ysoAIP8AuaABAA139PSlgv8AwqABAI1X3pLF3v8Ay6ABAI/3sAVxsP8A1KABAPj/ysoAIP8A3aABAA139PSlgv8A5qABAAAA9/f39/8A76ABAI1X3pLF3v8A+KABAI/3sAVxsP8AAaEBAPncsrIYK/8ACqEBAAyW7++KYv8AE6EBAA82/f3bx/8AHKEBAI4g8NHl8P8AJaEBAI+Az2epz/8ALqEBAJTOrCFmrP8AN6EBAPncsrIYK/8AQKEBAAyW7++KYv8ASaEBAA82/f3bx/8AUqEBAAAA9/f39/8AW6EBAI4g8NHl8P8AZKEBAI+Az2epz/8AbaEBAJTOrCFmrP8AdqEBAPncsrIYK/8Af6EBAAWj1tZgTf8AiKEBAA139PSlgv8AkaEBAA82/f3bx/8AmqEBAI4g8NHl8P8Ao6EBAI1X3pLF3v8ArKEBAI+nw0OTw/8AtaEBAJTOrCFmrP8AvqEBAPncsrIYK/8Ax6EBAAWj1tZgTf8A0KEBAA139PSlgv8A2aEBAA82/f3bx/8A4qEBAAAA9/f39/8A66EBAI4g8NHl8P8A9KEBAI1X3pLF3v8A/aEBAI+nw0OTw/8ABqIBAJTOrCFmrP8AD6IBAPL/Z2cAH/8AGaIBAAAAGhoaGv8AJKIBAPncsrIYK/8ALqIBAAWj1tZgTf8AOKIBAA139PSlgv8AQqIBAA82/f3bx/8ATKIBAAAA4ODg4P8AVqIBAAAAurq6uv8AYKIBAAAAh4eHh/8AaqIBAAAATU1NTf8AdKIBAPL/Z2cAH/8AfqIBAAAATU1NTf8AiaIBAAAAGhoaGv8AlKIBAPncsrIYK/8AnqIBAAWj1tZgTf8AqKIBAA139PSlgv8AsqIBAA82/f3bx/8AvKIBAAAA//////8AxqIBAAAA4ODg4P8A0KIBAAAAurq6uv8A2qIBAAAAh4eHh/8A5KIBAAyW7++KYv8A7aIBAAAA//////8A9qIBAAAAmZmZmf8A/6IBAPj/ysoAIP8ACKMBAA139PSlgv8AEaMBAAAAurq6uv8AGqMBAAAAQEBAQP8AI6MBAPj/ysoAIP8ALKMBAA139PSlgv8ANaMBAAAA//////8APqMBAAAAurq6uv8AR6MBAAAAQEBAQP8AUKMBAPncsrIYK/8AWaMBAAyW7++KYv8AYqMBAA82/f3bx/8Aa6MBAAAA4ODg4P8AdKMBAAAAmZmZmf8AfaMBAAAATU1NTf8AhqMBAPncsrIYK/8Aj6MBAAyW7++KYv8AmKMBAA82/f3bx/8AoaMBAAAA//////8AqqMBAAAA4ODg4P8As6MBAAAAmZmZmf8AvKMBAAAATU1NTf8AxaMBAPncsrIYK/8AzqMBAAWj1tZgTf8A16MBAA139PSlgv8A4KMBAA82/f3bx/8A6aMBAAAA4ODg4P8A8qMBAAAAurq6uv8A+6MBAAAAh4eHh/8ABKQBAAAATU1NTf8ADaQBAPncsrIYK/8AFqQBAAWj1tZgTf8AH6QBAA139PSlgv8AKKQBAA82/f3bx/8AMaQBAAAA//////8AOqQBAAAA4ODg4P8AQ6QBAAAAurq6uv8ATKQBAAAAh4eHh/8AVaQBAAAATU1NTf8AXqQBAAMg/f3g3f8AZ6QBAPRc+vqftf8AcKQBAOPcxcUbiv8AeaQBAA0c/v7r4v8AgqQBAPxI+/u0uf8Ai6QBAO6T9/doof8AlKQBAOD9rq4Bfv8AnaQBAA0c/v7r4v8ApqQBAPxI+/u0uf8Ar6QBAO6T9/doof8AuKQBAOPcxcUbiv8AwaQBANX8enoBd/8AyqQBAA0c/v7r4v8A06QBAAM8/PzFwP8A3KQBAPRc+vqftf8A5aQBAO6T9/doof8A7qQBAOPcxcUbiv8A96QBANX8enoBd/8AAKUBAA0c/v7r4v8ACaUBAAM8/PzFwP8AEqUBAPRc+vqftf8AG6UBAO6T9/doof8AJKUBAObD3d00l/8ALaUBAOD9rq4Bfv8ANqUBANX8enoBd/8AP6UBAA4M///38/8ASKUBAAMg/f3g3f8AUaUBAAM8/PzFwP8AWqUBAPRc+vqftf8AY6UBAO6T9/doof8AbKUBAObD3d00l/8AdaUBAOD9rq4Bfv8AfqUBANX8enoBd/8Ah6UBAA4M///38/8AkKUBAAMg/f3g3f8AmaUBAAM8/PzFwP8AoqUBAPRc+vqftf8Aq6UBAO6T9/doof8AtKUBAObD3d00l/8AvaUBAOD9rq4Bfv8AxqUBANX8enoBd/8Az6UBAMf/akkAav8A2KUBAPX/paUAJv8A5KUBAKerlTE2lf8A8aUBAALQ19cwJ/8A/aUBAAq49PRtQ/8ACaYBABSd/f2uYf8AFaYBAB5u/v7gkP8AIaYBAIgY+ODz+P8ALaYBAIpD6avZ6f8AOaYBAI9x0XSt0f8ARaYBAJedtEV1tP8AUaYBAPX/paUAJv8AXaYBAJedtEV1tP8AaqYBAKerlTE2lf8Ad6YBAALQ19cwJ/8Ag6YBAAq49PRtQ/8Aj6YBABSd/f2uYf8Am6YBAB5u/v7gkP8Ap6YBACpA////v/8As6YBAIgY+ODz+P8Av6YBAIpD6avZ6f8Ay6YBAI9x0XSt0f8A16YBAA2k/PyNWf8A4qYBACpA////v/8A7aYBAI9W25G/2/8A+KYBAP7h19cZHP8AA6cBABSd/f2uYf8ADqcBAIpD6avZ6f8AGacBAJHBtix7tv8AJKcBAP7h19cZHP8AL6cBABSd/f2uYf8AOqcBACpA////v/8ARacBAIpD6avZ6f8AUKcBAJHBtix7tv8AW6cBAALQ19cwJ/8AZqcBAA2k/PyNWf8AcacBAB5u/v7gkP8AfKcBAIgY+ODz+P8Ah6cBAI9W25G/2/8AkqcBAJedtEV1tP8AnacBAALQ19cwJ/8AqKcBAA2k/PyNWf8As6cBAB5u/v7gkP8AvqcBACpA////v/8AyacBAIgY+ODz+P8A1KcBAI9W25G/2/8A36cBAJedtEV1tP8A6qcBAALQ19cwJ/8A9acBAAq49PRtQ/8AAKgBABSd/f2uYf8AC6gBAB5u/v7gkP8AFqgBAIgY+ODz+P8AIagBAIpD6avZ6f8ALKgBAI9x0XSt0f8AN6gBAJedtEV1tP8AQqgBAALQ19cwJ/8ATagBAAq49PRtQ/8AWKgBABSd/f2uYf8AY6gBAB5u/v7gkP8AbqgBACpA////v/8AeagBAIgY+ODz+P8AhKgBAIpD6avZ6f8Aj6gBAI9x0XSt0f8AmqgBAJedtEV1tP8ApagBAPX/paUAJv8AsagBAGv/aABoN/8AvqgBAALQ19cwJ/8AyqgBAAq49PRtQ/8A1qgBABSd/f2uYf8A4qgBAB9z/v7gi/8A7qgBADNq79nvi/8A+qgBAD6C2abZav8ABqkBAFN5vWa9Y/8AEqkBAGfTmBqYUP8AHqkBAPX/paUAJv8AKqkBAGfTmBqYUP8AN6kBAGv/aABoN/8ARKkBAALQ19cwJ/8AUKkBAAq49PRtQ/8AXKkBABSd/f2uYf8AaKkBAB9z/v7gi/8AdKkBACpA////v/8AgKkBADNq79nvi/8AjKkBAD6C2abZav8AmKkBAFN5vWa9Y/8ApKkBAA2k/PyNWf8Ar6kBACpA////v/8AuqkBAEKIz5HPYP8AxakBAP7h19cZHP8A0KkBABSd/f2uYf8A26kBAD6C2abZav8A5qkBAGLSlhqWQf8A8akBAP7h19cZHP8A/KkBABSd/f2uYf8AB6oBACpA////v/8AEqoBAD6C2abZav8AHaoBAGLSlhqWQf8AKKoBAALQ19cwJ/8AM6oBAA2k/PyNWf8APqoBAB9z/v7gi/8ASaoBADNq79nvi/8AVKoBAEKIz5HPYP8AX6oBAGfTmBqYUP8AaqoBAALQ19cwJ/8AdaoBAA2k/PyNWf8AgKoBAB9z/v7gi/8Ai6oBACpA////v/8AlqoBADNq79nvi/8AoaoBAEKIz5HPYP8ArKoBAGfTmBqYUP8At6oBAALQ19cwJ/8AwqoBAAq49PRtQ/8AzaoBABSd/f2uYf8A2KoBAB9z/v7gi/8A46oBADNq79nvi/8A7qoBAD6C2abZav8A+aoBAFN5vWa9Y/8ABKsBAGfTmBqYUP8AD6sBAALQ19cwJ/8AGqsBAAq49PRtQ/8AJasBABSd/f2uYf8AMKsBAB9z/v7gi/8AO6sBACpA////v/8ARqsBADNq79nvi/8AUasBAD6C2abZav8AXKsBAFN5vWa9Y/8AZ6sBAGfTmBqYUP8AcqsBAA0s/v7g0v8Ae6sBAAmL/PyScv8AhKsBAAHT3t4tJv8AjasBAA0l/v7l2f8AlqsBAAts/Pyukf8An6sBAAez+/tqSv8AqKsBAP3gy8sYHf8AsasBAA0l/v7l2f8AuqsBAAts/Pyukf8Aw6sBAAez+/tqSv8AzKsBAAHT3t4tJv8A1asBAP3npaUPFf8A3qsBAA0l/v7l2f8A56sBAAxc/Py7of8A8KsBAAmL/PyScv8A+asBAAez+/tqSv8AAqwBAAHT3t4tJv8AC6wBAP3npaUPFf8AFKwBAA0l/v7l2f8AHawBAAxc/Py7of8AJqwBAAmL/PyScv8AL6wBAAez+/tqSv8AOKwBAAPQ7+87LP8AQawBAP3gy8sYHf8ASqwBAPv/mZkADf8AU6wBAA4P///18P8AXKwBAA0s/v7g0v8AZawBAAxc/Py7of8AbqwBAAmL/PyScv8Ad6wBAAez+/tqSv8AgKwBAAPQ7+87LP8AiawBAP3gy8sYHf8AkqwBAPv/mZkADf8Am6wBAA4P///18P8ApKwBAA0s/v7g0v8ArawBAAxc/Py7of8AtqwBAAmL/PyScv8Av6wBAAez+/tqSv8AyKwBAAPQ7+87LP8A0awBAP3gy8sYHf8A2qwBAP3npaUPFf8A46wBAPn/Z2cADf8A7KwBAP7h5OQaHP8A9awBAJKyuDd+uP8A/qwBAFOTr02vSv8AB60BAP7h5OQaHP8AEK0BAJKyuDd+uP8AGa0BAFOTr02vSv8AIq0BAM+Eo5hOo/8AK60BAP7h5OQaHP8ANK0BAJKyuDd+uP8APa0BAFOTr02vSv8ARq0BAM+Eo5hOo/8AT60BABX///9/AP8AWK0BAP7h5OQaHP8AYa0BAJKyuDd+uP8Aaq0BAFOTr02vSv8Ac60BAM+Eo5hOo/8AfK0BABX///9/AP8Aha0BACrM////M/8Ajq0BAP7h5OQaHP8Al60BAJKyuDd+uP8AoK0BAFOTr02vSv8Aqa0BAM+Eo5hOo/8Asq0BABX///9/AP8Au60BACrM////M/8AxK0BAA/BpqZWKP8Aza0BAP7h5OQaHP8A1q0BAJKyuDd+uP8A360BAFOTr02vSv8A6K0BAM+Eo5hOo/8A8a0BABX///9/AP8A+q0BACrM////M/8AA64BAA/BpqZWKP8ADK4BAOh59/eBv/8AFa4BAP7h5OQaHP8AHq4BAJKyuDd+uP8AJ64BAFOTr02vSv8AMK4BAM+Eo5hOo/8AOa4BABX///9/AP8AQq4BACrM////M/8AS64BAA/BpqZWKP8AVK4BAOh59/eBv/8AXa4BAAAAmZmZmf8AZq4BAHJ4wmbCpf8Ab64BAAub/PyNYv8AeK4BAJxNy42gy/8Aga4BAHJ4wmbCpf8Aiq4BAAub/PyNYv8Ak64BAJxNy42gy/8AnK4BAORm5+eKw/8Apa4BAHJ4wmbCpf8Arq4BAAub/PyNYv8At64BAJxNy42gy/8AwK4BAORm5+eKw/8Aya4BADqb2KbYVP8A0q4BAHJ4wmbCpf8A264BAAub/PyNYv8A5K4BAJxNy42gy/8A7a4BAORm5+eKw/8A9q4BADqb2KbYVP8A/64BACLQ///ZL/8ACK8BAHJ4wmbCpf8AEa8BAAub/PyNYv8AGq8BAJxNy42gy/8AI68BAORm5+eKw/8ALK8BADqb2KbYVP8ANa8BACLQ///ZL/8APq8BABla5eXElP8AR68BAHJ4wmbCpf8AUK8BAAub/PyNYv8AWa8BAJxNy42gy/8AYq8BAORm5+eKw/8Aa68BADqb2KbYVP8AdK8BACLQ///ZL/8Afa8BABla5eXElP8Ahq8BAAAAs7Ozs/8Aj68BAHhU043Tx/8Ama8BANNSvbyAvf8ApK8BACpM////s/8Arq8BAK8l2r662v8AuK8BAASL+/uAcv8Awq8BAJBk04Cx0/8AzK8BABac/f20Yv8A1q8BADqG3rPeaf8A4K8BAOkv/PzN5f8A6q8BAAAA2dnZ2f8A9K8BAHhU043Tx/8A/q8BANNSvbyAvf8ACbABAE0p68zrxf8AFLABACpM////s/8AHrABAK8l2r662v8AKLABAASL+/uAcv8AMrABAJBk04Cx0/8APLABABac/f20Yv8ARrABADqG3rPeaf8AULABAOkv/PzN5f8AWrABAAAA2dnZ2f8AZLABAHhU043Tx/8AbrABANNSvbyAvf8AebABAE0p68zrxf8AhLABACWQ///tb/8Aj7ABACpM////s/8AmbABAK8l2r662v8Ao7ABAASL+/uAcv8ArbABAJBk04Cx0/8At7ABABac/f20Yv8AwbABADqG3rPeaf8Ay7ABAOkv/PzN5f8A1bABAAAA2dnZ2f8A37ABAHhU043Tx/8A6LABACpM////s/8A8bABAK8l2r662v8A+rABAHhU043Tx/8AA7EBACpM////s/8ADLEBAK8l2r662v8AFbEBAASL+/uAcv8AHrEBAHhU043Tx/8AJ7EBACpM////s/8AMLEBAK8l2r662v8AObEBAASL+/uAcv8AQrEBAJBk04Cx0/8AS7EBAHhU043Tx/8AVLEBACpM////s/8AXbEBAK8l2r662v8AZrEBAASL+/uAcv8Ab7EBAJBk04Cx0/8AeLEBABac/f20Yv8AgbEBAHhU043Tx/8AirEBACpM////s/8Ak7EBAK8l2r662v8AnLEBAASL+/uAcv8ApbEBAJBk04Cx0/8ArrEBABac/f20Yv8At7EBADqG3rPeaf8AwLEBAHhU043Tx/8AybEBACpM////s/8A0rEBAK8l2r662v8A27EBAASL+/uAcv8A5LEBAJBk04Cx0/8A7bEBABac/f20Yv8A9rEBADqG3rPeaf8A/7EBAOkv/PzN5f8ACLIBAHhU043Tx/8AEbIBACpM////s/8AGrIBAK8l2r662v8AI7IBAASL+/uAcv8ALLIBAJBk04Cx0/8ANbIBABac/f20Yv8APrIBADqG3rPeaf8AR7IBAOkv/PzN5f8AULIBAAAA2dnZ2f8AWbIBAO39np4BQv8AZ7IBALGCol5Pov8AdrIBAPq01dU+T/8AhLIBAAq49PRtQ/8AkrIBABSd/f2uYf8AoLIBAB9z/v7gi/8ArrIBADFg9eb1mP8AvLIBAE9B3avdpP8AyrIBAHJ4wmbCpf8A2LIBAI+7vTKIvf8A5rIBAO39np4BQv8A9LIBAI+7vTKIvf8AA7MBALGCol5Pov8AErMBAPq01dU+T/8AILMBAAq49PRtQ/8ALrMBABSd/f2uYf8APLMBAB9z/v7gi/8ASrMBACpA////v/8AWLMBADFg9eb1mP8AZrMBAE9B3avdpP8AdLMBAHJ4wmbCpf8AgrMBAA2k/PyNWf8Aj7MBACpA////v/8AnLMBAFFN1ZnVlP8AqbMBAP7h19cZHP8AtrMBABSd/f2uYf8Aw7MBAE9B3avdpP8A0LMBAI/EuiuDuv8A3bMBAP7h19cZHP8A6rMBABSd/f2uYf8A97MBACpA////v/8ABLQBAE9B3avdpP8AEbQBAI/EuiuDuv8AHrQBAPq01dU+T/8AK7QBAA2k/PyNWf8AOLQBAB9z/v7gi/8ARbQBADFg9eb1mP8AUrQBAFFN1ZnVlP8AX7QBAI+7vTKIvf8AbLQBAPq01dU+T/8AebQBAA2k/PyNWf8AhrQBAB9z/v7gi/8Ak7QBACpA////v/8AoLQBADFg9eb1mP8ArbQBAFFN1ZnVlP8AurQBAI+7vTKIvf8Ax7QBAPq01dU+T/8A1LQBAAq49PRtQ/8A4bQBABSd/f2uYf8A7rQBAB9z/v7gi/8A+7QBADFg9eb1mP8ACLUBAE9B3avdpP8AFbUBAHJ4wmbCpf8AIrUBAI+7vTKIvf8AL7UBAPq01dU+T/8APLUBAAq49PRtQ/8ASbUBABSd/f2uYf8AVrUBAB9z/v7gi/8AY7UBACpA////v/8AcLUBADFg9eb1mP8AfbUBAE9B3avdpP8AirUBAHJ4wmbCpf8Al7UBAI+7vTKIvf8ApLUBAJMP//D4//8As7UBABgj+vrr1/8AxbUBAH///wD///8Az7UBAHGA/3//1P8A37UBAH8P//D///8A6rUBACoa9fX13P8A9bUBABc6///kxP8AAbYBAAAAAAAAAP8ADLYBABkx///rzf8AILYBAKr//wAA//8AKrYBAMDO4oor4v8AOrYBAAC+paUqKv8ARbYBABdj3t64h/8AVLYBAIBnoF+eoP8AY7YBAD///3//AP8Ac7YBABHa0tJpHv8AgrYBAAuv//9/UP8AjbYBAJqT7WSV7f8AobYBACEi///43P8Ar7YBAPbn3NwUPP8AvLYBAH///wD///8AxrYBAKr/iwAAi/8A1LYBAH//iwCLi/8A4rYBAB7vuLiGC/8A9bYBAAAAqampqf8AA7cBAFX/ZABkAP8AErcBAAAAqampqf8AILcBACduvb23a/8AL7cBANT/i4sAi/8AQLcBADqOa1VrL/8AVLcBABf///+MAP8AZLcBAMbAzJkyzP8AdLcBAAD/i4sAAP8AgbcBAAp56emWev8AkbcBAFU9vI+8j/8Ao7cBAK+Pi0g9i/8AtrcBAH9nTy9PT/8AybcBAH9nTy9PT/8A3LcBAID/0QDO0f8A77cBAMf/05QA0/8A/7cBAOjr//8Uk/8ADbgBAIr//wC///8AHrgBAAAAaWlpaf8AK7gBAAAAaWlpaf8AOLgBAJTh/x6Q//8ASLgBAADOsrIiIv8AV7gBABwP///68P8AaLgBAFXAiyKLIv8AebgBANT///8A//8AhrgBAAAA3Nzc3P8AlbgBAKoH//j4//8ApbgBACP////XAP8Ar7gBAB7Z2tqlIP8AvrgBAAAAgICAgP8AyLgBAFX/gACAAP8A07gBADvQ/63/L/8A5LgBAAAAgICAgP8A7rgBAFUP//D/8P8A/LgBAOmW//9ptP8ACbkBAACMzc1cXP8AGLkBAML/gksAgv8AJLkBACoP////8P8AL7kBACZq8PDmjP8AOrkBAKoU+ubm+v8ASLkBAPAP///w9f8AW7kBAED//Hz8AP8AarkBACYx///6zf8AfLkBAIk/5q3Y5v8Ai7kBAAB38PCAgP8Am7kBAH8f/+D///8AqrkBACoo+vr60v8AxLkBAAAA09PT0/8A07kBAFVk7pDukP8A47kBAAAA09PT0/8A8rkBAPhJ//+2wf8AAboBAAyE//+gev8AEroBAH3RsiCyqv8AJboBAI91+ofO+v8AN7oBAJQ4mXeImf8AS7oBAJQ4mXeImf8AX7oBAJc03rDE3v8Ac7oBACof////4P8AhLoBAFX//wD/AP8AjroBAFXAzTLNMv8AnboBABUU+vrw5v8AqLoBANT///8A//8AtboBAAD/gIAAAP8AwboBAHGAzWbNqv8A17oBAKr/zQAAzf8A57oBAMyY07pV0/8A+boBALd825Nw2/8AC7sBAGepszyzcf8AH7sBALCP7nto7v8ANLsBAG//+gD6mv8AS7sBAH2n0UjRzP8AYLsBAOTkx8cVhf8AdbsBAKrGcBkZcP8Ah7sBAGoJ//X/+v8AlrsBAAQe///k4f8ApbsBABpJ///ktf8As7sBABlR///erf8AxLsBAKr/gAAAgP8AzrsBABsX/f315v8A27sBACr/gICAAP8A5rsBADjAjmuOI/8A9bsBABv///+lAP8AAbwBAAv///9FAP8AELwBANZ72tpw1v8AHLwBACZI7u7oqv8AL7wBAFVk+5j7mP8APrwBAH9D7q/u7v8AUbwBAPF829twk/8AZLwBABop///v1f8AdLwBABRG///auf8Ag7wBABSwzc2FP/8AjbwBAPc////Ay/8Al7wBANRG3d2g3f8AobwBAIQ75rDg5v8AsbwBANT/gIAAgP8AvbwBAAD///8AAP8AxrwBAAA9vLyPj/8A1bwBAJ+14UFp4f8A5LwBABHci4tFE/8A9bwBAASK+vqAcv8AAb0BABOa9PSkYP8AEb0BAGeqiy6LV/8AH70BABEQ///17v8ALb0BAA23oKBSLf8AOb0BAAAAwMDAwP8ARb0BAIts64fO6/8AUr0BAK+PzWpazf8AYb0BAJQ4kHCAkP8AcL0BAJQ4kHCAkP8Af70BAAAF///6+v8Aib0BAGr//wD/f/8Amr0BAJKbtEaCtP8Aqb0BABhU0tK0jP8Asr0BAH//gACAgP8AvL0BANQd2Ni/2P8Ayb0BAAa4//9jR/8A1b0BAHu24EDg0P8A5L0BANRz7u6C7v8A8L0BABtE9fXes/8A+70BAAAA//////8ABr4BAAAA9fX19f8AFr4BACr/////AP8AIr4BADjAzZrNMv8AM74BAC1D/Pf8uf8APL4BAERb3a3djv8ARb4BAGKyozGjVP8ATr4BACoy////zP8AV74BAD5V5sLmmf8AYL4BAFVkxnjGef8Aab4BAGO7hCOEQ/8Acr4BACoy////zP8Ae74BAD5V5sLmmf8AhL4BAFVkxnjGef8Ajb4BAGKyozGjVP8Alr4BAGv/aABoN/8An74BACoy////zP8AqL4BADdR8Nnwo/8Asb4BAERb3a3djv8Aur4BAFVkxnjGef8Aw74BAGKyozGjVP8AzL4BAGv/aABoN/8A1b4BACoy////zP8A3r4BADdR8Nnwo/8A574BAERb3a3djv8A8L4BAFVkxnjGef8A+b4BAGCeq0GrXf8AAr8BAGO7hCOEQ/8AC78BAGz/WgBaMv8AFL8BACoZ////5f8AHb8BAC1D/Pf8uf8AJr8BADdR8Nnwo/8AL78BAERb3a3djv8AOL8BAFVkxnjGef8AQb8BAGCeq0GrXf8ASr8BAGO7hCOEQ/8AU78BAGz/WgBaMv8AXL8BACoZ////5f8AZb8BAC1D/Pf8uf8Abr8BADdR8Nnwo/8Ad78BAERb3a3djv8AgL8BAFVkxnjGef8Aib8BAGCeq0GrXf8Akr8BAGO7hCOEQ/8Am78BAGv/aABoN/8ApL8BAG7/RQBFKf8Arb8BADFJ+O34sf8AuL8BAHVhzX/Nu/8Aw78BAJDCuCx/uP8Azr8BACoy////zP8A2b8BAGNC2qHatP8A5L8BAISqxEG2xP8A778BAJbLqCJeqP8A+r8BACoy////zP8ABcABAGNC2qHatP8AEMABAISqxEG2xP8AG8ABAJDCuCx/uP8AJsABAKS/lCU0lP8AMcABACoy////zP8APMABAEU66cfptP8AR8ABAHVhzX/Nu/8AUsABAISqxEG2xP8AXcABAJDCuCx/uP8AaMABAKS/lCU0lP8Ac8ABACoy////zP8AfsABAEU66cfptP8AicABAHVhzX/Nu/8AlMABAISqxEG2xP8An8ABAIvYwB2RwP8AqsABAJbLqCJeqP8AtcABAJ7nhAwshP8AwMABACom////2f8Ay8ABADFJ+O34sf8A1sABAEU66cfptP8A4cABAHVhzX/Nu/8A7MABAISqxEG2xP8A98ABAIvYwB2RwP8AAsEBAJbLqCJeqP8ADcEBAJ7nhAwshP8AGMEBACom////2f8AI8EBADFJ+O34sf8ALsEBAEU66cfptP8AOcEBAHVhzX/Nu/8ARMEBAISqxEG2xP8AT8EBAIvYwB2RwP8AWsEBAJbLqCJeqP8AZcEBAKS/lCU0lP8AcMEBAJ7nWAgdWP8Ae8EBACVC///3vP8AhsEBAByv/v7ET/8AkcEBABDu2dlfDv8AnMEBACoq////1P8Ap8EBABxw/v7Zjv8AssEBABbV/v6ZKf8AvcEBAA/8zMxMAv8AyMEBACoq////1P8A08EBABxw/v7Zjv8A3sEBABbV/v6ZKf8A6cEBABDu2dlfDv8A9MEBAA34mZk0BP8A/8EBACoq////1P8ACsIBAB9t/v7jkf8AFcIBAByv/v7ET/8AIMIBABbV/v6ZKf8AK8IBABDu2dlfDv8ANsIBAA34mZk0BP8AQcIBACoq////1P8ATMIBAB9t/v7jkf8AV8IBAByv/v7ET/8AYsIBABbV/v6ZKf8AbcIBABLp7OxwFP8AeMIBAA/8zMxMAv8Ag8IBAAz3jIwtBP8AjsIBACoZ////5f8AmcIBACVC///3vP8ApMIBAB9t/v7jkf8Ar8IBAByv/v7ET/8AusIBABbV/v6ZKf8AxcIBABLp7OxwFP8A0MIBAA/8zMxMAv8A28IBAAz3jIwtBP8A5sIBACoZ////5f8A8cIBACVC///3vP8A/MIBAB9t/v7jkf8AB8MBAByv/v7ET/8AEsMBABbV/v6ZKf8AHcMBABLp7OxwFP8AKMMBAA/8zMxMAv8AM8MBAA34mZk0BP8APsMBAA3wZmYlBv8AScMBACJf///toP8AVMMBABiy/v6yTP8AX8MBAAXd8PA7IP8AasMBACpN////sv8AdcMBAB2i/v7MXP8AgMMBABHC/f2NPP8Ai8MBAP7h4+MaHP8AlsMBACpN////sv8AocMBAB2i/v7MXP8ArMMBABHC/f2NPP8At8MBAAXd8PA7IP8AwsMBAPb/vb0AJv8AzcMBACpN////sv8A2MMBAB6I/v7Zdv8A48MBABiy/v6yTP8A7sMBABHC/f2NPP8A+cMBAAXd8PA7IP8ABMQBAPb/vb0AJv8AD8QBACpN////sv8AGsQBAB6I/v7Zdv8AJcQBABiy/v6yTP8AMMQBABHC/f2NPP8AO8QBAAfU/PxOKv8ARsQBAP7h4+MaHP8AUcQBAPX/sbEAJv8AXMQBACoy////zP8AZ8QBACJf///toP8AcsQBAB6I/v7Zdv8AfcQBABiy/v6yTP8AiMQBABHC/f2NPP8Ak8QBAAfU/PxOKv8AnsQBAP7h4+MaHP8AqcQBAPX/sbEAJv8AtMQBACoy////zP8Av8QBACJf///toP8AysQBAB6I/v7Zdv8A1cQBABiy/v6yTP8A4MQBABHC/f2NPP8A68QBAAfU/PxOKv8A9sQBAP7h4+MaHP8AAcUBAPb/vb0AJv8ADMUBAPL/gIAAJv8AF8UBAJMP//D4//8AIcUBABgj+vrr1/8ALsUBABck///v2/8APMUBABck7u7fzP8ASsUBABckzc3AsP8AWMUBABgii4uDeP8AZsUBAHGA/3//1P8AccUBAHGA/3//1P8AfcUBAHGA7nbuxv8AicUBAHGAzWbNqv8AlcUBAHGAi0WLdP8AocUBAH8P//D///8Ap8UBAH8P//D///8ArsUBAH8P7uDu7v8AtcUBAH8OzcHNzf8AvMUBAH8Oi4OLi/8Aw8UBACoa9fX13P8AycUBABc6///kxP8A0MUBABc6///kxP8A2MUBABc67u7Vt/8A4MUBABY6zc23nv8A6MUBABc6i4t9a/8A+twBAAAAAAAAAP8A8MUBABkx///rzf8A/8UBAKr//wAA//8ABMYBAKr//wAA//8ACsYBAKr/7gAA7v8AEMYBAKr/zQAAzf8AFsYBAKr/iwAAi/8AHMYBAMDO4oor4v8AJ8YBAAC+paUqKv8ALcYBAAC///9AQP8ANMYBAAC/7u47O/8AO8YBAAC/zc0zM/8AQsYBAAC+i4sjI/8AScYBABdj3t64h/8AU8YBABdk///Tm/8AXsYBABdj7u7Fkf8AacYBABdjzc2qff8AdMYBABdji4tzVf8Af8YBAIBnoF+eoP8AicYBAINn/5j1//8AlMYBAINm7o7l7v8An8YBAINnzXrFzf8AqsYBAINmi1OGi/8AtcYBAD///3//AP8AwMYBAD///3//AP8AzMYBAD//7nbuAP8A2MYBAD//zWbNAP8A5MYBAD//i0WLAP8A8MYBABHa0tJpHv8A+sYBABHb//9/JP8ABccBABHb7u52If8AEMcBABHazc1mHf8AG8cBABHci4tFE/8AJscBAAuv//9/UP8ALMcBAAep//9yVv8AM8cBAAap7u5qUP8AOscBAAapzc1bRf8AQccBAAaoi4s+L/8ASMcBAJqT7WSV7f8AV8cBACEi///43P8AYMcBACEi///43P8AascBACIj7u7ozf8AdMcBACIizc3Isf8AfscBACMii4uIeP8AiMcBAPbn3NwUPP8AkMcBAH///wD///8AlccBAH///wD///8Am8cBAH//7gDu7v8AoccBAH//zQDNzf8Ap8cBAH//iwCLi/8ArccBAB7vuLiGC/8Au8cBAB7w//+5D/8AyscBAB7w7u6tDv8A2ccBAB7wzc2VDP8A6McBAB7wi4tlCP8A98cBAFX/ZABkAP8AAcgBACduvb23a/8AC8gBADqOa1VrL/8AGsgBADqP/8r/cP8AKsgBADqP7rzuaP8AOsgBADqPzaLNWv8ASsgBADqPi26LPf8AWsgBABf///+MAP8AZcgBABX///9/AP8AccgBABX/7u52AP8AfcgBABX/zc1mAP8AicgBABX/i4tFAP8AlcgBAMbAzJkyzP8AoMgBAMbB/78+//8ArMgBAMbA7rI67v8AuMgBAMbAzZoyzf8AxMgBAMbAi2gii/8A0MgBAAp56emWev8A28gBAFU9vI+8j/8A6MgBAFU+/8H/wf8A9sgBAFU+7rTutP8ABMkBAFU+zZvNm/8AEskBAFU+i2mLaf8AIMkBAK+Pi0g9i/8ALskBAH9nTy9PT/8APMkBAH9o/5f///8AS8kBAH9n7o3u7v8AWskBAH9ozXnNzf8AackBAH9oi1KLi/8AeMkBAH9nTy9PT/8AhskBAID/0QDO0f8AlMkBAMf/05QA0/8An8kBAOjr//8Uk/8AqMkBAOjr//8Uk/8AsskBAOjr7u4Sif8AvMkBAOjrzc0Qdv8AxskBAOfsi4sKUP8A0MkBAIr//wC///8A3MkBAIr//wC///8A6ckBAIr/7gCy7v8A9skBAIr/zQCazf8AA8oBAIr/iwBoi/8AEMoBAAAAaWlpaf8AGMoBAAAAaWlpaf8AIMoBAJTh/x6Q//8AK8oBAJTh/x6Q//8AN8oBAJTh7hyG7v8AQ8oBAJThzRh0zf8AT8oBAJThixBOi/8AW8oBAADOsrIiIv8AZcoBAADP//8wMP8AcMoBAADP7u4sLP8Ae8oBAADPzc0mJv8AhsoBAADPi4saGv8AkcoBABwP///68P8AncoBAFXAiyKLIv8AqcoBAAAA3Nzc3P8As8oBAKoH//j4//8AvsoBACP////XAP8Aw8oBACP////XAP8AycoBACP/7u7JAP8Az8oBACP/zc2tAP8A1coBACP/i4t1AP8A28oBAB7Z2tqlIP8A5coBAB7a///BJf8A8MoBAB7a7u60Iv8A+8oBAB7azc2bHf8ABssBAB7ai4tpFP8AEcsBAAAAwMDAwP8AFssBAAAAAAAAAP8AHMsBAAAAAwMDA/8AIssBAAAAGhoaGv8AKcsBAAAA//////8AMcsBAAAAHBwcHP8AOMsBAAAAHx8fH/8AP8sBAAAAISEhIf8ARssBAAAAJCQkJP8ATcsBAAAAJiYmJv8AVMsBAAAAKSkpKf8AW8sBAAAAKysrK/8AYssBAAAALi4uLv8AacsBAAAAMDAwMP8AcMsBAAAABQUFBf8AdssBAAAAMzMzM/8AfcsBAAAANjY2Nv8AhMsBAAAAODg4OP8Ai8sBAAAAOzs7O/8AkssBAAAAPT09Pf8AmcsBAAAAQEBAQP8AoMsBAAAAQkJCQv8Ap8sBAAAARUVFRf8ArssBAAAAR0dHR/8AtcsBAAAASkpKSv8AvMsBAAAACAgICP8AwssBAAAATU1NTf8AycsBAAAAT09PT/8A0MsBAAAAUlJSUv8A18sBAAAAVFRUVP8A3ssBAAAAV1dXV/8A5csBAAAAWVlZWf8A7MsBAAAAXFxcXP8A88sBAAAAXl5eXv8A+ssBAAAAYWFhYf8AAcwBAAAAY2NjY/8ACMwBAAAACgoKCv8ADswBAAAAZmZmZv8AFcwBAAAAaWlpaf8AHMwBAAAAa2tra/8AI8wBAAAAbm5ubv8AKswBAAAAcHBwcP8AMcwBAAAAc3Nzc/8AOMwBAAAAdXV1df8AP8wBAAAAeHh4eP8ARswBAAAAenp6ev8ATcwBAAAAfX19ff8AVMwBAAAADQ0NDf8AWswBAAAAf39/f/8AYcwBAAAAgoKCgv8AaMwBAAAAhYWFhf8Ab8wBAAAAh4eHh/8AdswBAAAAioqKiv8AfcwBAAAAjIyMjP8AhMwBAAAAj4+Pj/8Ai8wBAAAAkZGRkf8AkswBAAAAlJSUlP8AmcwBAAAAlpaWlv8AoMwBAAAADw8PD/8ApswBAAAAmZmZmf8ArcwBAAAAnJycnP8AtMwBAAAAnp6env8Au8wBAAAAoaGhof8AwswBAAAAo6Ojo/8AycwBAAAApqampv8A0MwBAAAAqKioqP8A18wBAAAAq6urq/8A3swBAAAAra2trf8A5cwBAAAAsLCwsP8A7MwBAAAAEhISEv8A8swBAAAAs7Ozs/8A+cwBAAAAtbW1tf8AAM0BAAAAuLi4uP8AB80BAAAAurq6uv8ADs0BAAAAvb29vf8AFc0BAAAAv7+/v/8AHM0BAAAAwsLCwv8AI80BAAAAxMTExP8AKs0BAAAAx8fHx/8AMc0BAAAAycnJyf8AOM0BAAAAFBQUFP8APs0BAAAAzMzMzP8ARc0BAAAAz8/Pz/8ATM0BAAAA0dHR0f8AU80BAAAA1NTU1P8AWs0BAAAA1tbW1v8AYc0BAAAA2dnZ2f8AaM0BAAAA29vb2/8Ab80BAAAA3t7e3v8Ads0BAAAA4ODg4P8Afc0BAAAA4+Pj4/8AhM0BAAAAFxcXF/8Ais0BAAAA5eXl5f8Akc0BAAAA6Ojo6P8AmM0BAAAA6+vr6/8An80BAAAA7e3t7f8Aps0BAAAA8PDw8P8Arc0BAAAA8vLy8v8AtM0BAAAA9fX19f8Au80BAAAA9/f39/8Aws0BAAAA+vr6+v8Ayc0BAAAA/Pz8/P8A0M0BAFX//wD/AP8A1s0BAFX//wD/AP8A3c0BAFX/7gDuAP8A5M0BAFX/zQDNAP8A680BAFX/iwCLAP8A8s0BADvQ/63/L/8A/s0BAAAAwMDAwP8AA84BAAAAAAAAAP8ACc4BAAAAAwMDA/8AD84BAAAAGhoaGv8AFs4BAAAA//////8AHs4BAAAAHBwcHP8AJc4BAAAAHx8fH/8ALM4BAAAAISEhIf8AM84BAAAAJCQkJP8AOs4BAAAAJiYmJv8AQc4BAAAAKSkpKf8ASM4BAAAAKysrK/8AT84BAAAALi4uLv8AVs4BAAAAMDAwMP8AXc4BAAAABQUFBf8AY84BAAAAMzMzM/8Aas4BAAAANjY2Nv8Acc4BAAAAODg4OP8AeM4BAAAAOzs7O/8Af84BAAAAPT09Pf8Ahs4BAAAAQEBAQP8Ajc4BAAAAQkJCQv8AlM4BAAAARUVFRf8Am84BAAAAR0dHR/8Aos4BAAAASkpKSv8Aqc4BAAAACAgICP8Ar84BAAAATU1NTf8Ats4BAAAAT09PT/8Avc4BAAAAUlJSUv8AxM4BAAAAVFRUVP8Ay84BAAAAV1dXV/8A0s4BAAAAWVlZWf8A2c4BAAAAXFxcXP8A4M4BAAAAXl5eXv8A584BAAAAYWFhYf8A7s4BAAAAY2NjY/8A9c4BAAAACgoKCv8A+84BAAAAZmZmZv8AAs8BAAAAaWlpaf8ACc8BAAAAa2tra/8AEM8BAAAAbm5ubv8AF88BAAAAcHBwcP8AHs8BAAAAc3Nzc/8AJc8BAAAAdXV1df8ALM8BAAAAeHh4eP8AM88BAAAAenp6ev8AOs8BAAAAfX19ff8AQc8BAAAADQ0NDf8AR88BAAAAf39/f/8ATs8BAAAAgoKCgv8AVc8BAAAAhYWFhf8AXM8BAAAAh4eHh/8AY88BAAAAioqKiv8Aas8BAAAAjIyMjP8Acc8BAAAAj4+Pj/8AeM8BAAAAkZGRkf8Af88BAAAAlJSUlP8Ahs8BAAAAlpaWlv8Ajc8BAAAADw8PD/8Ak88BAAAAmZmZmf8Ams8BAAAAnJycnP8Aoc8BAAAAnp6env8AqM8BAAAAoaGhof8Ar88BAAAAo6Ojo/8Ats8BAAAApqampv8Avc8BAAAAqKioqP8AxM8BAAAAq6urq/8Ay88BAAAAra2trf8A0s8BAAAAsLCwsP8A2c8BAAAAEhISEv8A388BAAAAs7Ozs/8A5s8BAAAAtbW1tf8A7c8BAAAAuLi4uP8A9M8BAAAAurq6uv8A+88BAAAAvb29vf8AAtABAAAAv7+/v/8ACdABAAAAwsLCwv8AENABAAAAxMTExP8AF9ABAAAAx8fHx/8AHtABAAAAycnJyf8AJdABAAAAFBQUFP8AK9ABAAAAzMzMzP8AMtABAAAAz8/Pz/8AOdABAAAA0dHR0f8AQNABAAAA1NTU1P8AR9ABAAAA1tbW1v8ATtABAAAA2dnZ2f8AVdABAAAA29vb2/8AXNABAAAA3t7e3v8AY9ABAAAA4ODg4P8AatABAAAA4+Pj4/8AcdABAAAAFxcXF/8Ad9ABAAAA5eXl5f8AftABAAAA6Ojo6P8AhdABAAAA6+vr6/8AjNABAAAA7e3t7f8Ak9ABAAAA8PDw8P8AmtABAAAA8vLy8v8AodABAAAA9fX19f8AqNABAAAA9/f39/8Ar9ABAAAA+vr6+v8AttABAAAA/Pz8/P8AvdABAFUP//D/8P8AxtABAFUP//D/8P8A0NABAFUP7uDu4P8A2tABAFUOzcHNwf8A5NABAFUOi4OLg/8A7tABAOmW//9ptP8A9tABAOqR//9utP8A/9ABAOuN7u5qp/8ACNEBAOyHzc1gkP8AEdEBAOqUi4s6Yv8AGtEBAACMzc1cXP8AJNEBAACU//9qav8AL9EBAACU7u5jY/8AOtEBAACVzc1VVf8ARdEBAACUi4s6Ov8AUNEBAML/gksAgv8AV9EBACoA/////gAAXdEBACoP////8P8AY9EBACoP////8P8AatEBACoP7u7u4P8AcdEBACoOzc3Nwf8AeNEBACoOi4uLg/8Af9EBACZq8PDmjP8AhdEBACdw///2j/8AjNEBACdw7u7mhf8Ak9EBACdvzc3Gc/8AmtEBACdvi4uGTv8AodEBAKoU+ubm+v8AqtEBAPAP///w9f8AuNEBAPAP///w9f8Ax9EBAO8P7u7g5f8A1tEBAPAOzc3Bxf8A5dEBAO8Oi4uDhv8A9NEBAED//Hz8AP8A/tEBACYx///6zf8AC9IBACYx///6zf8AGdIBACUy7u7pv/8AJ9IBACYxzc3Jpf8ANdIBACcxi4uJcP8AQ9IBAIk/5q3Y5v8ATdIBAIpA/7/v//8AWNIBAIpA7rLf7v8AY9IBAIo/zZrAzf8AbtIBAIlAi2iDi/8AedIBAAB38PCAgP8AhNIBAH8f/+D///8AjtIBAH8f/+D///8AmdIBAH8f7tHu7v8ApNIBAH8fzbTNzf8Ar9IBAH8fi3qLi/8AutIBACNz7u7dgv8AydIBACN0///si/8A2dIBACNz7u7cgv8A6dIBACNzzc2+cP8A+dIBACNzi4uBTP8ACdMBACoo+vr60v8AHtMBAAAA09PT0/8AKNMBAAAA09PT0/8AMtMBAPhJ//+2wf8APNMBAPlR//+uuf8AR9MBAPhR7u6irf8AUtMBAPlQzc2Mlf8AXdMBAPlQi4tfZf8AaNMBAAyE//+gev8AdNMBAAyE//+gev8AgdMBAAuE7u6Vcv8AjtMBAAyFzc2BYv8Am9MBAAyFi4tXQv8AqNMBAH3RsiCyqv8AttMBAI91+ofO+v8Aw9MBAI9P/7Di//8A0dMBAI9P7qTT7v8A39MBAI5PzY22zf8A7dMBAI9Oi2B7i/8A+9MBAK+P/4Rw//8ACtQBAJQ4mXeImf8AGdQBAJQ4mXeImf8AKNQBAJc03rDE3v8AN9QBAJc1/8rh//8AR9QBAJc17rzS7v8AV9QBAJc1zaK1zf8AZ9QBAJY1i257i/8Ad9QBACof////4P8Ag9QBACof////4P8AkNQBACof7u7u0f8AndQBACofzc3NtP8AqtQBACofi4uLev8At9QBAFXAzTLNMv8AwdQBABUU+vrw5v8Ax9QBANT///8A//8Az9QBANT///8A//8A2NQBANT/7u4A7v8A4dQBANT/zc0Azf8A6tQBANT/i4sAi/8A89QBAO+5sLAwYP8A+tQBAOTL//80s/8AAtUBAOTL7u4wp/8ACtUBAOTMzc0pkP8AEtUBAOTLi4scYv8AGtUBAHGAzWbNqv8AK9UBAKr/zQAAzf8ANtUBAMyY07pV0/8AQ9UBAMuZ/+Bm//8AUdUBAMuZ7tFf7v8AX9UBAMuZzbRSzf8AbdUBAMuai3o3i/8Ae9UBALd825Nw2/8AiNUBALd9/6uC//8AltUBALd97p957v8ApNUBALd9zYlozf8AstUBALd8i11Hi/8AwNUBAGepszyzcf8Az9UBALCP7nto7v8A39UBAG//+gD6mv8A8dUBAH2n0UjRzP8AAdYBAOTkx8cVhf8AEdYBAKrGcBkZcP8AHtYBAGoJ//X/+v8AKNYBAAQe///k4f8AMtYBAAQe///k4f8APdYBAAQe7u7V0v8ASNYBAAMdzc23tf8AU9YBAAUdi4t9e/8AXtYBABpJ///ktf8AZ9YBABlR///erf8Ac9YBABlR///erf8AgNYBABlS7u7Pof8AjdYBABlSzc2zi/8AmtYBABlSi4t5Xv8Ap9YBAKr/gAAAgP8ArNYBAKr/gAAAgP8AtdYBACoA/////gAAutYBABsX/f315v8AwtYBADjAjmuOI/8AzNYBADjB/8D/Pv8A19YBADjA7rPuOv8A4tYBADjAzZrNMv8A7dYBADjAi2mLIv8A+NYBABv///+lAP8A/9YBABv///+lAP8AB9cBABv/7u6aAP8AD9cBABv/zc2FAP8AF9cBABv/i4taAP8AH9cBAAv///9FAP8AKdcBAAv///9FAP8ANNcBAAv/7u5AAP8AP9cBAAv/zc03AP8AStcBAAv/i4slAP8AVdcBANZ72tpw1v8AXNcBANZ8//+D+v8AZNcBANZ87u566f8AbNcBANZ8zc1pyf8AdNcBANV8i4tHif8AfNcBACZI7u7oqv8AitcBAFVk+5j7mP8AlNcBAFVl/5r/mv8An9cBAFVk7pDukP8AqtcBAFVkzXzNfP8AtdcBAFVki1SLVP8AwNcBAH9D7q/u7v8AztcBAH9E/7v///8A3dcBAH9E7q7u7v8A7NcBAH9EzZbNzf8A+9cBAH9Di2aLi/8ACtgBAPF829twk/8AGNgBAPF9//+Cq/8AJ9gBAPF97u55n/8ANtgBAPF9zc1oif8ARdgBAPF8i4tHXf8AVNgBABop///v1f8AX9gBABRG///auf8AadgBABRG///auf8AdNgBABNF7u7Lrf8Af9gBABNFzc2vlf8AitgBABRFi4t3Zf8AldgBABSwzc2FP/8AmtgBAPc////Ay/8An9gBAPVJ//+1xf8ApdgBAPVJ7u6puP8Aq9gBAPVKzc2Rnv8AsdgBAPVJi4tjbP8At9gBANRG3d2g3f8AvNgBANRE//+7//8AwtgBANRE7u6u7v8AyNgBANREzc2Wzf8AztgBANRDi4tmi/8A1NgBAIQ75rDg5v8A39gBAMTd8KAg8P8A5tgBAL/P/5sw//8A7tgBAMDP7pEs7v8A9tgBAMDPzX0mzf8A/tgBAMDPi1Uai/8ABtkBAAD///8AAP8ACtkBAAD///8AAP8AD9kBAAD/7u4AAP8AFNkBAAD/zc0AAP8AGdkBAAD/i4sAAP8AHtkBAAA9vLyPj/8AKNkBAAA+///Bwf8AM9kBAAA+7u60tP8APtkBAAA+zc2bm/8ASdkBAAA+i4tpaf8AVNkBAJ+14UFp4f8AXtkBAJ+3/0h2//8AadkBAJ+37kNu7v8AdNkBAJ+2zTpfzf8Af9kBAJ+3iydAi/8AitkBABHci4tFE/8AltkBAASK+vqAcv8AndkBAAmW//+Maf8ApdkBAAmW7u6CYv8ArdkBAAmWzc1wVP8AtdkBAAmWi4tMOf8AvdkBABOa9PSkYP8AyNkBAGeqiy6LV/8A0dkBAGer/1T/n/8A29kBAGer7k7ulP8A5dkBAGerzUPNgP8A79kBAGeqiy6LV/8A+dkBABEQ///17v8AAtoBABEQ///17v8ADNoBABIR7u7l3v8AFtoBABIRzc3Fv/8AINoBABIQi4uGgv8AKtoBAA23oKBSLf8AMdoBAA24//+CR/8AOdoBAA247u55Qv8AQdoBAA24zc1oOf8ASdoBAA25i4tHJv8AUdoBAIts64fO6/8AWdoBAJB4/4fO//8AYtoBAJB47n7A7v8Aa9oBAJB4zWymzf8AdNoBAJF3i0pwi/8AfdoBAK+PzWpazf8Ah9oBAK+Q/4Nv//8AktoBAK+Q7npn7v8AndoBAK+QzWlZzf8AqNoBAK+Qi0c8i/8As9oBAJQ4kHCAkP8AvdoBAJU4/8bi//8AyNoBAJU47rnT7v8A09oBAJQ5zZ+2zf8A3toBAJU4i2x7i/8A6doBAJQ4kHCAkP8A89oBAAAF///6+v8A+NoBAAAF///6+v8A/toBAAAF7u7p6f8ABNsBAAAEzc3Jyf8ACtsBAAADi4uJif8AENsBAGr//wD/f/8AHNsBAGr//wD/f/8AKdsBAGr/7gDudv8ANtsBAGr/zQDNZv8AQ9sBAGr/iwCLRf8AUNsBAJKbtEaCtP8AWtsBAJKc/2O4//8AZdsBAJKc7lys7v8AcNsBAJKczU+Uzf8Ae9sBAJObizZki/8AhtsBABhU0tK0jP8AitsBABSw//+lT/8Aj9sBABSw7u6aSf8AlNsBABSwzc2FP/8AmdsBABSwi4taK/8AntsBANQd2Ni/2P8AptsBANQe///h//8Ar9sBANQe7u7S7v8AuNsBANQdzc21zf8AwdsBANQdi4t7i/8AytsBAAa4//9jR/8A0dsBAAa4//9jR/8A2dsBAAa47u5cQv8A4dsBAAa4zc1POf8A6dsBAAa5i4s2Jv8AO90BACoA/////gAA8dsBAHu24EDg0P8A+9sBAIH//wD1//8ABtwBAIH/7gDl7v8AEdwBAIH/zQDFzf8AHNwBAIH/iwCGi/8AJ9wBANRz7u6C7v8ALtwBAOPX0NAgkP8AONwBAOvB//8+lv8AQ9wBAOvA7u46jP8ATtwBAOvAzc0yeP8AWdwBAOvAi4siUv8AZNwBABtE9fXes/8AatwBABtF///nuv8AcdwBABtE7u7Yrv8AeNwBABtEzc26lv8Af9wBABtDi4t+Zv8AhtwBAAAA//////8AjNwBAAAA9fX19f8Al9wBACr/////AP8AntwBACr/////AP8AptwBACr/7u7uAP8ArtwBACr/zc3NAP8AttwBACr/i4uLAP8AvtwBADjAzZrNMv8AReEBAE7dAQBQ3QEAUt0BAFTdAQBW3QEAWN0BAFrdAQBc3QEAXt0BAGDdAQBj3QEAZt0BAGndAQBs3QEAb90BAHLdAQB13QEAeN0BAHvdAQB+3QEAAAAAAAQAAAAEAAAABQAAADEAAAAQAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAAlNcAABQAAABDLlVURi04AAAAAAAAAAAAAAAAAN4SBJUAAAAA////////////////AgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzTeNgAAAkAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAHAAAAcqgCAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD42AAABQAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAcAAAB6rAIAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACv////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPjYAAB82QAABQAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAcAAACCsAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+JoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6nAPU1ggBEuy4AnOmEALQmcABBfl8A1pE5AFODOQCc9DkAi1+EACj5vQD4HzsA3v+XAA+YBQARL+8AClqLAG0fbQDPfjYACcsnAEZPtwCeZj8ALepfALondQDl68cAPXvxAPc5BwCSUooA+2vqAB+xXwAIXY0AMANWAHv8RgDwq2sAILzPADb0mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAIAAAAAkAAAAKAAAADQAAAAsAAAAMAAAAhQAAAAAgAAABIAAAAiAAAAMgAAAEIAAABSAAAAYgAAAIIAAACSAAAAogAAAoIAAAKSAAAF8gAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BV9wiQD/CS8PdAAAAPMOAgBuAAAA9Q4CAHIAAAD3DgIAZgAAAPkOAgBhAAAA+w4CAGUAAAD9DgIAdwAAAP8OAgBXAAAADA8CAHMAAAAaDwIAUwAAACYPAgBkAAAAMw8CAEQAAAA/DwIAAAAAAAAAAAAAAAAAAAAEAAQAGwAbACAAIAAjACEACgACABYACQAhACEAIQAVABwAAQAUABQAFAAUABQAFAAUAAgABAAFABsAAgAXABsAIAAfAB4AHQAJABMAAAAVABIAFQADAAcAFQAVABQAFAAUABQAFAAUABQAFAAIAAQABQAFAAYAGwAaABgAGQAgAAcAFQAUABQAFAAUABQAFAALABQADQAUAAwAFAAUABQADgAUABQAFAAQABQADwAUABEAAAAAAAAArgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAAAADbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMABAAHAAMABAAFAAUABgAGAAgABwAHABEAFgASABEAEgAIAAgADwAPABcADwAYAA8AGQAaABoAHgAWADQAHgAFADIABgAiACIAMwAXABgANQAZABoAGgAqADYAKgA0ADcAMgBFADsAPAAzADsAPABGADUARwBIAEwANgAiAEkASgA3AEUATgBQAGIAUQBSAFQARgBHAFUASABMAFYASQBKAFgAWgBOAEQAUABRAFIAVAA4AC8ALABVACkAVgAbABAAWABaAF0AXQBdAF0AXQBdAF0AXgBeAF4AXgBeAF4AXgBfAF8AXwBfAF8AXwBfAGAACQBgAGAAYABgAGAAYQBhAGMAAgBjAGMAYwBjAGMAZAAAAGQAAABkAGQAZABlAAAAZQBlAGUAZQBlAGYAZgAAAGYAZgBmAGYAZwAAAGcAZwBnAGcAaAAAAGgAaABoAGgAaABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAAXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBmAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAAACgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBcACcAJwAnACcAJwAwADAAOQAcADkAOQA5ADkAOQA6AFwAOgBcADoAOgA6ADsAXAA7ADsAOwA7ADsAPgA+AFwAPgA+AD4APgBCAFwAQgBCAEIAQgBDAFwAQwBDAEMAQwBDAAkAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwACACu/9EACgCu/67/CwCu/67/rv+u/67/rv+u/67/BQDRAK7/0QDRANEA0QDRANEA0QDRAK7/+/+u/w4A7P+u/67/rv+u/9EA0QDRANEA0QANACUADABCABAAUAATAG0AewAUAJgADwCmAMMArv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/FwCu/3cArv8HAC4Arv8mAK7/FwARACMArv8NAK7/rv+u/67/OgCu/67/NQCu/67/rv8oAK7/BwCu/zsARQCu/0gArv+u/67/rv+u/67/rv/8/+gA9v///xoAAAAnAAEAMgCu/67/AgAkAAMALwCu/67/rv+u/67//v+UAK7/CQAbAK7/vP+u/67/r/+u/67/rv+u/67/rv+u/wAAAAAAAG3m7N4FAAsASQAxAVMAfwEwAWkAeAH/AIEBUwKCAYMBhAGFAYYBVAKHAYgBiQFWAooBVwKLAYwBjgHdAY8BWQKQAVsCkQGSAZMBYAKUAWMClgFpApcBaAKYAZkBnAFvAp0BcgKfAXUCpgGAAqcBqAGpAYMCrAGtAa4BiAKvAbABsQGKArIBiwK3AZICuAG5AbwBvQHEAcYBxAHFAcUBxgHHAckBxwHIAcgByQHKAcwBygHLAcsBzAHxAfMB8QHyAfIB8wH0AfUB9gGVAfcBvwEgAp4BhgOsA4gDrQOJA64DigOvA4wDzAOOA80DjwPOA5kDRQOZA74fowPCA/cD+AP6A/sDYB6bHp4e3wBZH1EfWx9TH10fVR9fH1cfvB+zH8wfwx/sH+Uf/B/zHzoCZSw7AjwCPQKaAT4CZixBAkICQwKAAUQCiQJFAowC9AO4A/kD8gP9A3sD/gN8A/8DfQPABM8EJiHJAyohawArIeUAMiFOIYMhhCFgLGEsYixrAmMsfR1kLH0CbSxRAm4scQJvLFACcCxSAnIscyx1LHYsfiw/An8sQALyLPMsfad5HYunjKeNp2UCqqdmAscQJy3NEC0tdgN3A5wDtQCSA9ADmAPRA6YD1QOgA9YDmgPwA6ED8QOVA/UDzwPXAwAAAABBACAawAAgHwABAS8yAQEFOQEBD0oBAS15AQEFcAMBA5EDIBGjAyAJAARQEBAEICBgBAEhigQBNcEEAQ3QBAE/FAUBEzEFMCagAQEFswEBA80BAQ/eAQER+AEBJyICARHYAwEXAB4BlaAeAV8IH/gIGB/4Bigf+Ag4H/gISB/4Bmgf+AiIH/gImB/4CKgf+Ai4H/gCuh+2AsgfqgTYH/gC2h+cAugf+ALqH5AC+B+AAvofggJGAgEJEAUBA2AhEBAALDAvZywBBYAsAWPrLAEDQKYBLYCmARcipwENMqcBPXmnAQN+pwEJkKcBA6CnAQkh/yAaAAAAAHsgdmFyIHBhdGggPSBQb2ludGVyX3N0cmluZ2lmeSgkMCk7IHZhciBkYXRhID0gUG9pbnRlcl9zdHJpbmdpZnkoJDEpOyBGUy5jcmVhdGVQYXRoKCIvIiwgUEFUSC5kaXJuYW1lKHBhdGgpKTsgRlMud3JpdGVGaWxlKFBBVEguam9pbigiLyIsIHBhdGgpLCBkYXRhKTsgfQBjb3JlAHhkb3R2ZXJzaW9uADEuNwAxLjQAMS4yAF9sZHJhd18AX2hkcmF3XwBfdGRyYXdfAF9obGRyYXdfAF90bGRyYXdfAHhkb3QgdmVyc2lvbiAiJXMiIHRvbyBsb25nACAlZCAAJS4wMmYAJXMlZCAtACMlMDJ4JTAyeCUwMnglMDJ4AHNldGxpbmV3aWR0aCgAJS4zZgBTIABDIAAyIAAlLjAzZgBFIABlIABGIAB0ICV1IABUIABkb3Q6ZG90AGd2OmRvdABjYW5vbjpkb3QAcGxhaW46ZG90AHBsYWluLWV4dDpkb3QAeGRvdDp4ZG90AHhkb3QxLjI6eGRvdAB4ZG90MS40Onhkb3QASSAAIl9zdWJncmFwaF9jbnQiOiAlZAAiX2d2aWQiOiAlZAAiZWRnZXMiOiBbCgAiX2d2aWQiOiAlZCwKACJ0YWlsIjogJWQsCgAiaGVhZCI6ICVkACJvYmplY3RzIjogWwoAIm5vZGVzIjogWwoAIm5hbWUiOiAiJXMiAFwiAFwvAFxiAFxmAFxuAFxyAFx0ACJzdWJncmFwaHMiOiBbCgAiJXMiOiAAIiVzIgBDb3VsZCBub3QgcGFyc2UgeGRvdCAiJXMiCgBbCgAib3AiOiAiJWMiLAoAInJlY3QiOiBbJS4wM2YsJS4wM2YsJS4wM2YsJS4wM2ZdCgAib3AiOiAiTCIsCgAib3AiOiAiVCIsCgAicHQiOiBbJS4wM2YsJS4wM2ZdLAoAImFsaWduIjogIiVjIiwKACJ3aWR0aCI6ICUuMDNmLAoAInRleHQiOiAiJXMiCgAiZ3JhZCI6ICJub25lIiwKACJjb2xvciI6ICIlcyIKACJncmFkIjogImxpbmVhciIsCgAiZ3JhZCI6ICJyYWRpYWwiLAoAIm9wIjogIkYiLAoAInNpemUiOiAlLjAzZiwKACJmYWNlIjogIiVzIgoAIm9wIjogIlMiLAoAInN0eWxlIjogIiVzIgoAIm9wIjogInQiLAoAImZvbnRjaGFyIjogJWQKACJwMCI6IFslLjAzZiwlLjAzZiwlLjAzZl0sCgAicDEiOiBbJS4wM2YsJS4wM2YsJS4wM2ZdLAoAInN0b3BzIjogWwB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogIiVzIn0AXQoAInAwIjogWyUuMDNmLCUuMDNmXSwKACJwMSI6IFslLjAzZiwlLjAzZl0sCgAicG9pbnRzIjogWwBbJS4wM2YsJS4wM2ZdAGRyYXdfAGxkcmF3XwBoZHJhd18AdGRyYXdfAGhsZHJhd18AdGxkcmF3XwAiZGlyZWN0ZWQiOiAlcywKACJzdHJpY3QiOiAlcwAgIABEdXBsaWNhdGUgY2x1c3RlciBuYW1lICIlcyIKAHhkb3QAanNvbgBqc29uMABkb3RfanNvbgB4ZG90X2pzb24AanNvbjpqc29uAGpzb24wOmpzb24AZG90X2pzb246anNvbgB4ZG90X2pzb246anNvbgBuID49IDQAZ3ZyZW5kZXJfY29yZV9maWcuYwBmaWdfYmV6aWVyAGZpZ19yZXNvbHZlX2NvbG9yAGZpZwBmaWc6ZmlnAG1hcAByZWN0ICVzICVkLCVkICVkLCVkCgBjaXJjbGUgJXMgJWQsJWQsJWQKAHBvbHkgJXMAICVkLCVkAGd2cmVuZGVyX2NvcmVfbWFwLmMAbWFwX291dHB1dF9zaGFwZQByZWN0YW5nbGUgKCVkLCVkKSAoJWQsJWQpICVzICVzCgA8YXJlYSBzaGFwZT0iY2lyY2xlIgA8YXJlYSBzaGFwZT0icmVjdCIAPGFyZWEgc2hhcGU9InBvbHkiACBocmVmPSIAIHRpdGxlPSIAIGFsdD0iIgAgY29vcmRzPSIAJWQsJWQsJWQAJWQsJWQsJWQsJWQAJWQsJWQALCVkLCVkACI+CgA8L21hcD4KAGJhc2UgcmVmZXJlcgoAZGVmYXVsdCAAPG1hcCBpZD0iACIgbmFtZT0iAGlzbWFwOm1hcABjbWFwOm1hcABpbWFwOm1hcABjbWFweDptYXAAaW1hcF9ucDptYXAAY21hcHhfbnA6bWFwACMgJXMKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQKACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuM2YgJWQgJS40ZiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAJWQgJWQgIyUwMnglMDJ4JTAyeAoAZ3ZyZW5kZXJfY29yZV9tcC5jAG1wX3Jlc29sdmVfY29sb3IAJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlLjRmICVkICUuMWYgJS4xZiAlZCAlZCAlc1wwMDEKACMgZW5kIG9mIEZJRyBmaWxlCgAjRklHIDMuMgoAIyBHZW5lcmF0ZWQgYnkgJXMgdmVyc2lvbiAlcyAoJXMpCgAjIFRpdGxlOiAlcwoAIyBQYWdlczogJWQKAFBvcnRyYWl0CgBDZW50ZXIKAEluY2hlcwoATGV0dGVyCgAxMDAuMDAKAFNpbmdsZQoALTIKADEyMDAAIDIKAG1wAG1wOm1wACBdICAlZCB0cnVlICVzCgAgXSAgJWQgZmFsc2UgJXMKACBzZXRsaW5ld2lkdGgKACVzIABzZXRoc2IAJS41ZyAlLjVnICUuNWcgJXNjb2xvcgoAJSAAbmV3cGF0aCAAIG1vdmV0bwoAIGxpbmV0bwoAc3Ryb2tlCgAgY3VydmV0bwoAY2xvc2VwYXRoIGZpbGwKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggZmlsbAoAIGVsbGlwc2VfcGF0aCBzdHJva2UKACAvJXMgc2V0X2ZvbnQKACBtb3ZldG8gACAlcyBhbGlnbmVkdGV4dAoAWyAvUmVjdCBbIAAgXQoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgBnc2F2ZQoAJSUgJXMKADAgMCAwIGVkZ2Vjb2xvcgoAZW5kcGFnZQpzaG93cGFnZQpncmVzdG9yZQoAJSVQYWdlVHJhaWxlcgoAJSUlJUVuZFBhZ2U6ICVkCgAlJSUlUGFnZTogJWQgJWQKACUlJSVQYWdlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgBMYW5kc2NhcGUAUG9ydHJhaXQAJSUlJVBhZ2VPcmllbnRhdGlvbjogJXMKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKACVkICVkICVkIGJlZ2lucGFnZQoAZ3NhdmUKJWQgJWQgJWQgJWQgYm94cHJpbSBjbGlwIG5ld3BhdGgKACVnICVnIHNldF9zY2FsZSAlZCByb3RhdGUgJWcgJWcgdHJhbnNsYXRlCgBjYW52YXMgc2l6ZSAoJWQsJWQpIGV4Y2VlZHMgUERGIGxpbWl0ICglZCkKCShzdWdnZXN0IHNldHRpbmcgYSBib3VuZGluZyBib3ggc2l6ZSwgc2VlIGRvdCgxKSkKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAJWQgJWQgc2V0bGF5ZXIKACUlJSVUaXRsZTogJXMKACUlUGFnZXM6IChhdGVuZCkKACUlUGFnZXM6IDEKACUlQm91bmRpbmdCb3g6IChhdGVuZCkKACUlJSVCb3VuZGluZ0JveDogJWQgJWQgJWQgJWQKACUlRW5kQ29tbWVudHMKc2F2ZQoAc2V0dXBMYXRpbjEKAFsge0NhdGFsb2d9IDw8IC9VUkkgPDwgL0Jhc2UgJXMgPj4gPj4KL1BVVCBwZGZtYXJrCgAlJUJlZ2luUHJvbG9nAC9Eb3REaWN0IDIwMCBkaWN0IGRlZgBEb3REaWN0IGJlZ2luAC9zZXR1cExhdGluMSB7AG1hcmsAL0VuY29kaW5nVmVjdG9yIDI1NiBhcnJheSBkZWYAIEVuY29kaW5nVmVjdG9yIDAASVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwARW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQAJSBTZXQgdXAgSVNPIExhdGluIDEgY2hhcmFjdGVyIGVuY29kaW5nAC9zdGFybmV0SVNPIHsAICAgICAgICBkdXAgZHVwIGZpbmRmb250IGR1cCBsZW5ndGggZGljdCBiZWdpbgAgICAgICAgIHsgMSBpbmRleCAvRklEIG5lIHsgZGVmIH17IHBvcCBwb3AgfSBpZmVsc2UAICAgICAgICB9IGZvcmFsbAAgICAgICAgIC9FbmNvZGluZyBFbmNvZGluZ1ZlY3RvciBkZWYAICAgICAgICBjdXJyZW50ZGljdCBlbmQgZGVmaW5lZm9udAB9IGRlZgAvVGltZXMtUm9tYW4gc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUl0YWxpYyBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZCBzdGFybmV0SVNPIGRlZgAvVGltZXMtQm9sZEl0YWxpYyBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhIHN0YXJuZXRJU08gZGVmAC9IZWx2ZXRpY2EtT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYS1Cb2xkT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvQ291cmllciBzdGFybmV0SVNPIGRlZgAvQ291cmllci1PYmxpcXVlIHN0YXJuZXRJU08gZGVmAC9Db3VyaWVyLUJvbGQgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXItQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAY2xlYXJ0b21hcmsAfSBiaW5kIGRlZgAlJUJlZ2luUmVzb3VyY2U6IHByb2NzZXQgZ3JhcGh2aXogMCAwAC9jb29yZC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmAC9kZWZhdWx0LWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYAL2Nvb3JkZm9udCBjb29yZC1mb250LWZhbWlseSBmaW5kZm9udCA4IHNjYWxlZm9udCBkZWYAL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYAL3NldF9zY2FsZSB7ACAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYAICAgICAgIHNjYWxlACUgc3R5bGVzAC9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYAL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYAL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmAC9maWxsZWQgeyB9IGJpbmQgZGVmAC91bmZpbGxlZCB7IH0gYmluZCBkZWYAL3JvdW5kZWQgeyB9IGJpbmQgZGVmAC9kaWFnb25hbHMgeyB9IGJpbmQgZGVmAC90YXBlcmVkIHsgfSBiaW5kIGRlZgAlIGhvb2tzIGZvciBzZXR0aW5nIGNvbG9yIAAvbm9kZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZWRnZWNvbG9yIHsgc2V0aHNiY29sb3IgfSBiaW5kIGRlZgAvZ3JhcGhjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL25vcGNvbG9yIHtwb3AgcG9wIHBvcH0gYmluZCBkZWYAL2JlZ2lucGFnZSB7CSUgaSBqIG5wYWdlcwAJL25wYWdlcyBleGNoIGRlZgAJL2ogZXhjaCBkZWYACS9pIGV4Y2ggZGVmAAkvc3RyIDEwIHN0cmluZyBkZWYACW5wYWdlcyAxIGd0IHsACQlnc2F2ZQAJCQljb29yZGZvbnQgc2V0Zm9udAAJCQkwIDAgbW92ZXRvAAkJCShcKCkgc2hvdyBpIHN0ciBjdnMgc2hvdyAoLCkgc2hvdyBqIHN0ciBjdnMgc2hvdyAoXCkpIHNob3cACQlncmVzdG9yZQAJfSBpZgAvc2V0X2ZvbnQgewAJZmluZGZvbnQgZXhjaAAJc2NhbGVmb250IHNldGZvbnQAJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAAvYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAAJL3RleHQgZXhjaCBkZWYACS93aWR0aCBleGNoIGRlZgAJZ3NhdmUACQl3aWR0aCAwIGd0IHsACQkJW10gMCBzZXRkYXNoAAkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cACQl9IGlmAAlncmVzdG9yZQAvYm94cHJpbSB7CQkJCSUgeGNvcm5lciB5Y29ybmVyIHhzaXplIHlzaXplAAkJNCAyIHJvbGwACQltb3ZldG8ACQkyIGNvcHkACQlleGNoIDAgcmxpbmV0bwAJCTAgZXhjaCBybGluZXRvAAkJcG9wIG5lZyAwIHJsaW5ldG8ACQljbG9zZXBhdGgAL2VsbGlwc2VfcGF0aCB7AAkvcnkgZXhjaCBkZWYACS9yeCBleGNoIGRlZgAJL3kgZXhjaCBkZWYACS94IGV4Y2ggZGVmAAltYXRyaXggY3VycmVudG1hdHJpeAAJbmV3cGF0aAAJeCB5IHRyYW5zbGF0ZQAJcnggcnkgc2NhbGUACTAgMCAxIDAgMzYwIGFyYwAJc2V0bWF0cml4AC9lbmRwYWdlIHsgc2hvd3BhZ2UgfSBiaW5kIGRlZgAvc2hvd3BhZ2UgeyB9IGRlZgAvbGF5ZXJjb2xvcnNlcQAJWwklIGxheWVyIGNvbG9yIHNlcXVlbmNlIC0gZGFya2VzdCB0byBsaWdodGVzdAAJCVswIDAgMF0ACQlbLjIgLjggLjhdAAkJWy40IC44IC44XQAJCVsuNiAuOCAuOF0ACQlbLjggLjggLjhdAAldAGRlZgAvbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmAC9zZXRsYXllciB7L21heGxheWVyIGV4Y2ggZGVmIC9jdXJsYXllciBleGNoIGRlZgAJbGF5ZXJjb2xvcnNlcSBjdXJsYXllciAxIHN1YiBsYXllcmxlbiBtb2QgZ2V0AAlhbG9hZCBwb3Agc2V0aHNiY29sb3IACS9ub2RlY29sb3Ige25vcGNvbG9yfSBkZWYACS9lZGdlY29sb3Ige25vcGNvbG9yfSBkZWYACS9ncmFwaGNvbG9yIHtub3Bjb2xvcn0gZGVmAC9vbmxheWVyIHsgY3VybGF5ZXIgbmUge2ludmlzfSBpZiB9IGRlZgAvb25sYXllcnMgewAJL215dXBwZXIgZXhjaCBkZWYACS9teWxvd2VyIGV4Y2ggZGVmAAljdXJsYXllciBteWxvd2VyIGx0AAljdXJsYXllciBteXVwcGVyIGd0AAlvcgAJe2ludmlzfSBpZgAvY3VybGF5ZXIgMCBkZWYAJSVFbmRSZXNvdXJjZQAlJUVuZFByb2xvZwAlJUJlZ2luU2V0dXAAMTQgZGVmYXVsdC1mb250LWZhbWlseSBzZXRfZm9udAAlIC9hcnJvd2xlbmd0aCAxMCBkZWYAJSAvYXJyb3d3aWR0aCA1IGRlZgAlIG1ha2Ugc3VyZSBwZGZtYXJrIGlzIGhhcm1sZXNzIGZvciBQUy1pbnRlcnByZXRlcnMgb3RoZXIgdGhhbiBEaXN0aWxsZXIAL3BkZm1hcmsgd2hlcmUge3BvcH0ge3VzZXJkaWN0IC9wZGZtYXJrIC9jbGVhcnRvbWFyayBsb2FkIHB1dH0gaWZlbHNlACUgbWFrZSAnPDwnIGFuZCAnPj4nIHNhZmUgb24gUFMgTGV2ZWwgMSBkZXZpY2VzAC9sYW5ndWFnZWxldmVsIHdoZXJlIHtwb3AgbGFuZ3VhZ2VsZXZlbH17MX0gaWZlbHNlADIgbHQgewAgICAgdXNlcmRpY3QgKDw8KSBjdm4gKFspIGN2biBsb2FkIHB1dAAgICAgdXNlcmRpY3QgKD4+KSBjdm4gKFspIGN2biBsb2FkIHB1dAB9IGlmACUlRW5kU2V0dXAAJSVUcmFpbGVyCgAlJSUlUGFnZXM6ICVkCgBlbmQKcmVzdG9yZQoAJSVFT0YKACUhUFMtQWRvYmUtMy4wACBFUFNGLTMuMAoAJSUlJUNyZWF0b3I6ICVzIHZlcnNpb24gJXMgKCVzKQoAcHMyOnBzADwhLS0gADxwb2x5bGluZQAgcG9pbnRzPSIAIi8+CgAgZmlsbD0iAHVybCgjbF8lZCkAdXJsKCNyXyVkKQAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2U9IgAiIHN0cm9rZS13aWR0aD0iACIgc3Ryb2tlLWRhc2hhcnJheT0iJXMANSwyADEsNQAiIHN0cm9rZS1vcGFjaXR5PSIlZgBndnJlbmRlcl9jb3JlX3N2Zy5jAHN2Z19wcmludF9jb2xvcgA8cGF0aAAgaWQ9IgBfcCIgACBkPSIAJWMAPGRlZnM+CjxyYWRpYWxHcmFkaWVudCBpZD0icl8lZCIgY3g9IjUwJSUiIGN5PSI1MCUlIiByPSI3NSUlIiBmeD0iJWQlJSIgZnk9IiVkJSUiPgoAPHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjoAO3N0b3Atb3BhY2l0eToAMS4AOyIvPgoAPHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8L2RlZnM+CgA8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJsXyVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgAHgxPSIAIiB5MT0iACIgeDI9IgAiIHkyPSIAIiA+CgA8c3RvcCBvZmZzZXQ9IiUuMDNmIiBzdHlsZT0ic3RvcC1jb2xvcjoAOyIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+CgA8cG9seWdvbgA8ZWxsaXBzZQAgY3g9IgAiIGN5PSIAIiByeD0iACIgcnk9IgA8dGV4dAAgdGV4dC1hbmNob3I9InN0YXJ0IgAgdGV4dC1hbmNob3I9ImVuZCIAIHRleHQtYW5jaG9yPSJtaWRkbGUiACB4PSIAIiB5PSIAIGZvbnQtZmFtaWx5PSIlcwAsJXMAIGZvbnQtd2VpZ2h0PSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAIGZvbnQtZmFtaWx5PSIlcyIAIGZvbnQtd2VpZ2h0PSJib2xkIgAgZm9udC1zdHlsZT0iaXRhbGljIgAgdGV4dC1kZWNvcmF0aW9uPSIAJXNvdmVybGluZQAlc2xpbmUtdGhyb3VnaAAgYmFzZWxpbmUtc2hpZnQ9InN1cGVyIgAgYmFzZWxpbmUtc2hpZnQ9InN1YiIAIGZvbnQtc2l6ZT0iJS4yZiIAIGZpbGw9IiVzIgAgZmlsbD0iIyUwMnglMDJ4JTAyeCIAc3ZnX3RleHRzcGFuAD4APHRleHRQYXRoIHhsaW5rOmhyZWY9IiMlc19wIiBzdGFydE9mZnNldD0iNTAlJSI+ADx0c3BhbiB4PSIwIiBkeT0iACI+ADwvdHNwYW4+PC90ZXh0UGF0aD4APC90ZXh0PgoAPC9nPgoAPGcAIGlkPSJhXwAgeGxpbms6aHJlZj0iACB4bGluazp0aXRsZT0iACB0YXJnZXQ9IgA8dGl0bGU+ADwvdGl0bGU+CgA8ZyBpZD0iAF8lcwAiIGNsYXNzPSIlcwBjbGFzcwAgdHJhbnNmb3JtPSJzY2FsZSgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAKSI+CgA8L3N2Zz4KADwhLS0AIFBhZ2VzOiAlZCAtLT4KADxzdmcgd2lkdGg9IiVkcHQiIGhlaWdodD0iJWRwdCIKACB2aWV3Qm94PSIlLjJmICUuMmYgJS4yZiAlLjJmIgAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgoAc3R5bGVzaGVldAA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIHR5cGU9InRleHQvY3NzIj8+CgA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iCgAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CgA8IS0tIEdlbmVyYXRlZCBieSAAZGFya2JsdWUAZGFya2N5YW4AZGFya2dyYXkAZGFya2dyZXkAZGFya21hZ2VudGEAZGFya3JlZABsaWdodGdyZWVuACMgACBjcmVhdGUgbGluZSAAIC1maWxsIAAgLWRhc2ggNQAgLWRhc2ggMgBndnJlbmRlcl9jb3JlX3RrLmMAdGtnZW5fcHJpbnRfdGFncwBncmFwaCBsYWJlbAAgLXRhZ3MgeyVkJXMlcH0AdGtnZW5fcHJpbnRfY29sb3IAJGMAIC13aWR0aCAAIC1zbW9vdGggYmV6aWVyIAAgY3JlYXRlIHBvbHlnb24gACAtb3V0bGluZSAAIGNyZWF0ZSBvdmFsIAAgY3JlYXRlIHRleHQgACAtdGV4dCB7AH0AIC1mb250IHsAICVkfQAgLWFuY2hvciB3ACAtYW5jaG9yIGUAIwAgVGl0bGU6IAAgUGFnZXM6ICVkCgAjIEdlbmVyYXRlZCBieSAAKQoAdGsAdGs6dGsAICAgICAgPCEtLSAAIC0tPgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gIFF1aXRpbmcuCgAgPHY6c2hhcGUgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIgZmlsbGVkPSJmYWxzZSI+ADx2OnBhdGggdj0iACBtIAAlLjBmLCUuMGYgACBsIAAgZSAAIi8+ADwvdjpzaGFwZT4KADx2OnN0cm9rZSBjb2xvcj0iACIgd2VpZ2h0PSIlLjBmcHQAIiBkYXNoc3R5bGU9ImRhc2gAIiBkYXNoc3R5bGU9ImRvdAAiIC8+ACMlMDJ4JTAyeCUwMngAZ3ZyZW5kZXJfY29yZV92bWwuYwB2bWxfcHJpbnRfY29sb3IAIHdpZHRoOiAlZDsgaGVpZ2h0OiAlZCIAID4APHY6cGF0aCAgdj0iAC8+PC92OnNoYXBlPgoAbSAAJXMlLjBmLCUuMGYgAGMgACBmaWxsZWQ9InRydWUiIGZpbGxjb2xvcj0iACIgACBmaWxsZWQ9ImZhbHNlIiAAJS4wZiAlLjBmIABsIAB4IGUgIi8+ACAgPHY6b3ZhbCBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7ACBsZWZ0OiAlLjJmOyB0b3A6ICUuMmY7ACB3aWR0aDogJS4yZjsgaGVpZ2h0OiAlLjJmIgA8L3Y6b3ZhbD4KADx2OnJlY3Qgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyAAIHN0cm9rZWQ9ImZhbHNlIiBmaWxsZWQ9ImZhbHNlIj4KADx2OnRleHRib3ggaW5zZXQ9IjAsMCwwLDAiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdi10ZXh0LXdyYXBwaW5nOidmYWxzZSc7cGFkZGluZzonMCc7AGZvbnQtZmFtaWx5OiAnJXMnOwBmb250LXdlaWdodDogJXM7AGZvbnQtc3RyZXRjaDogJXM7AGZvbnQtc3R5bGU6ICVzOwAgZm9udC1zaXplOiAlLjJmcHQ7AGNvbG9yOiVzOwBjb2xvcjojJTAyeCUwMnglMDJ4OwB2bWxfdGV4dHNwYW4AIj48Y2VudGVyPgA8L2NlbnRlcj48L3Y6dGV4dGJveD4KADwvdjpyZWN0PgoAPC9hPgoAPGEAIGhyZWY9IiVzIgAgdGl0bGU9IiVzIgAgdGFyZ2V0PSIlcyIAPgoAPC92Omdyb3VwPgoAPC9ESVY+CgA8RElWIGlkPSdfVk1MMl8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbiI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgaHRtbCBjb250ZW50IGhlcmUgLS0+CgA8RElWIGlkPSdfbm90Vk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgoAPCEtLSB0aGlzIHNob3VsZCBvbmx5IGRpc3BsYXkgb24gTk9OLUlFIGJyb3dzZXJzIC0tPgoAPEgyPlNvcnJ5LCB0aGlzIGRpYWdyYW0gd2lsbCBvbmx5IGRpc3BsYXkgY29ycmVjdGx5IG9uIEludGVybmV0IEV4cGxvcmVyIDUgKGFuZCB1cCkgYnJvd3NlcnMuPC9IMj4KADxESVYgaWQ9J19ub3RWTUwyXycgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+CgA8IS0tIGluc2VydCBhbnkgb3RoZXIgTk9OLUlFIGh0bWwgY29udGVudCBoZXJlIC0tPgoAPC9CT0RZPgo8L0hUTUw+CgA8SEVBRD4APE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoAPFRJVExFPgA8L1RJVExFPgA8IS0tIFBhZ2VzOiAlZCAtLT4KACAgIDxTQ1JJUFQgTEFOR1VBR0U9J0phdmFzY3JpcHQnPgoAICAgZnVuY3Rpb24gYnJvd3NlcmNoZWNrKCkKACAgIHsKACAgICAgIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50CgAgICAgICB2YXIgbXNpZSA9IHVhLmluZGV4T2YgKCAnTVNJRSAnICkKACAgICAgIHZhciBpZXZlcnM7CgAgICAgICB2YXIgaXRlbTsKACAgICAgIHZhciBWTUx5ZXM9bmV3IEFycmF5KCdfVk1MMV8nLCdfVk1MMl8nKTsKACAgICAgIHZhciBWTUxubz1uZXcgQXJyYXkoJ19ub3RWTUwxXycsJ19ub3RWTUwyXycpOwoAICAgICAgaWYgKCBtc2llID4gMCApeyAgICAgIC8vIElmIEludGVybmV0IEV4cGxvcmVyLCByZXR1cm4gdmVyc2lvbiBudW1iZXIKACAgICAgICAgIGlldmVycz0gcGFyc2VJbnQgKHVhLnN1YnN0cmluZyAobXNpZSs1LCB1YS5pbmRleE9mICgnLicsIG1zaWUgKSkpCgAgICAgICB9CgAgICAgICBpZiAoaWV2ZXJzPj01KXsKACAgICAgICBmb3IgKHggaW4gVk1MeWVzKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUx5ZXNbeF0pOwoAICAgICAgICAgaWYgKGl0ZW0pIHsKACAgICAgICAgICAgaXRlbS5zdHlsZS52aXNpYmlsaXR5PSd2aXNpYmxlJzsKACAgICAgICAgIH0KACAgICAgICB9CgAgICAgICAgZm9yICh4IGluIFZNTG5vKXsKACAgICAgICAgIGl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWTUxub1t4XSk7CgAgICAgICAgICAgIGl0ZW0uc3R5bGUudmlzaWJpbGl0eT0naGlkZGVuJzsKACAgICAgfWVsc2V7CgAgICAgIH0KACAgIH0KACAgIDwvU0NSSVBUPgoAPC9IRUFEPgA8Qk9EWSBvbmxvYWQ9J2Jyb3dzZXJjaGVjaygpOyc+CgA8RElWIGlkPSdfVk1MMV8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgZGlzcGxheTppbmxpbmU7IHZpc2liaWxpdHk6aGlkZGVuACB3aWR0aDogJWRwdDsgaGVpZ2h0OiAlZHB0Ij4KADxTVFlMRT4KAHZcOiogeyBiZWhhdmlvcjogdXJsKCNkZWZhdWx0I1ZNTCk7ZGlzcGxheTppbmxpbmUtYmxvY2t9CgA8L1NUWUxFPgoAPHhtbDpuYW1lc3BhY2UgbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiBwcmVmaXg9InYiIC8+CgAgPHY6Z3JvdXAgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyAAIHdpZHRoOiAlZHB0OyBoZWlnaHQ6ICVkcHQiACBjb29yZG9yaWdpbj0iMCwwIiBjb29yZHNpemU9IiVkLCVkIiA+ADxIVE1MPgoACjwhLS0gR2VuZXJhdGVkIGJ5IAAgdmVyc2lvbiAAICgAKQotLT4KAGFxdWEAZnVjaHNpYQBsaW1lAG9saXZlAHRlYWwAdm1sAHZtbDp2bWwALy8qKiogY29tbWVudDogJXMKAC8vKioqIHBvbHlsaW5lCgBzY2FsZSAgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KAHJvdGF0ZSAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgoAdHJhbnNsYXRlPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICVkLAoAbGluZWFyX3NwbGluZQA8JTkuM2YsICU5LjNmLCAlOS4zZj4sICUuM2YKACVzICAgICVzACAgICB0b2xlcmFuY2UgMC4wMQogICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgAlcyVzACVzIHRyYW5zbWl0ICUuM2YAUmVkAEdyZWVuAEJsdWUAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgBndnJlbmRlcl9jb3JlX3Bvdi5jAHBvdl9jb2xvcl9hc19zdHIAcGlnbWVudCB7IGNvbG9yICVzIH0KAHBvdiByZW5kZXJlcjplbCAtICVzCgAvLyoqKiBiZXppZXIKAGJfc3BsaW5lACAgICAgICAgdG9sZXJhbmNlIDAuMDEKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogcG9seWdvbgoAICAgIHRvbGVyYW5jZSAwLjEKICAgICVzICAgICVzICAgICVzICAgICVzfQoAcG9seWdvbiB7ICVkLAoAPCU5LjNmLCAlOS4zZiwgJTkuM2Y+ACVzCiAgICAlcwAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogZWxsaXBzZQoAdG9ydXMgeyAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAHNwaGVyZSB7PCU5LjNmLCAlOS4zZiwgJTkuM2Y+LCAxLjAKICAgICVzICAgICVzICAgICVzICAgICVzfQoALy8qKiogdGV4dHNwYW46ICVzLCBmb250c2l6ZSA9ICUuM2YsIGZvbnRuYW1lID0gJXMKAHNjYWxlICUuM2YKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAlcyAgICAlcyAgICAlcyAgICAlcyAgICAlc30KACAgICBub19zaGFkb3cKAC8vKioqIGVuZF9lZGdlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfbm9kZQoALy8qKiogYmVnaW5fbm9kZTogJXMKAC8vKioqIGVuZF9jbHVzdGVyCgAvLyoqKiBiZWdpbl9jbHVzdGVyCgAvLyoqKiBlbmRfcGFnZQoALy8qKiogYmVnaW5fcGFnZQoALy8qKiogZW5kX2xheWVyCgAvLyoqKiBiZWdpbl9sYXllcjogJXMsICVkLyVkCgAvLyoqKiBlbmRfZ3JhcGgKAC8vKioqIGJlZ2luX2dyYXBoICVzCgBjYW1lcmEgeyBsb2NhdGlvbiA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICBsb29rX2F0ICA8JS4zZiAsICUuM2YgLCAlLjNmPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAvL3NreQpwbGFuZSB7IDwwLCAxLCAwPiwgMSBob2xsb3cKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnQgeyBib3pvIHR1cmJ1bGVuY2UgMC45NQogICAgICAgICAgICBjb2xvcl9tYXAgewogICAgICAgICAgICAgICAgWzAuMDAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjUwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwwLjI1LCAwLjI1LCAwLjI1Pl0KICAgICAgICAgICAgICAgIFsxLjAwIHJnYiA8MC41MCwgMC41MCwgMC41MD5dCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2NhbGUgPDEuMDAsIDEuMDAsIDEuNTA+ICogMi41MAogICAgICAgICAgICB0cmFuc2xhdGUgPDAuMDAsIDAuMDAsIDAuMDA+CiAgICAgICAgfQogICAgICAgIGZpbmlzaCB7IGFtYmllbnQgMSBkaWZmdXNlIDAgfQogICAgfQogICAgc2NhbGUgMTAwMDAKfQovL21pc3QKZm9nIHsgZm9nX3R5cGUgMgogICAgZGlzdGFuY2UgNTAKICAgIGNvbG9yIHJnYiA8MS4wMCwgMS4wMCwgMS4wMD4gKiAwLjc1CiAgICBmb2dfb2Zmc2V0IDAuMTAKICAgIGZvZ19hbHQgMS41MAogICAgdHVyYnVsZW5jZSAxLjc1Cn0KLy9nbmQKcGxhbmUgeyA8MC4wMCwgMS4wMCwgMC4wMD4sIDAKICAgIHRleHR1cmUgewogICAgICAgIHBpZ21lbnR7IGNvbG9yIHJnYiA8MC4yNSwgMC40NSwgMC4wMD4gfQogICAgICAgIG5vcm1hbCB7IGJ1bXBzIDAuNzUgc2NhbGUgMC4wMSB9CiAgICAgICAgZmluaXNoIHsgcGhvbmcgMC4xMCB9CiAgICB9Cn0KAGxpZ2h0X3NvdXJjZSB7IDwxNTAwLDMwMDAsLTI1MDA+IGNvbG9yIFdoaXRlIH0KACN2ZXJzaW9uIDMuNjsKAGdsb2JhbF9zZXR0aW5ncyB7IGFzc3VtZWRfZ2FtbWEgMS4wIH0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgAjZGVjbGFyZSAlcyA9ICVzOwoAQmxhY2sAV2hpdGUAYmFrZXJzY2hvYwBicmFzcwBicmlnaHRnb2xkAGJyb256ZQBicm9uemUyAGNsZWFyAGNvb2xjb3BwZXIAY29wcGVyAGRhcmticm93bgBkYXJrcHVycGxlAGRhcmt0YW4AZGFya3dvb2QAZGtncmVlbmNvcHBlcgBkdXN0eXJvc2UAZmVsZHNwYXIAZmxlc2gAZ3JheTA1AGdyZWVuY29wcGVyAGh1bnRlcnNncmVlbgBsaWdodF9wdXJwbGUAbGlnaHR3b29kAG1hbmRhcmlub3JhbmdlAG1lZGl1bWZvcmVzdGdyZWVuAG1lZGl1bWdvbGRlbnJvZABtZWRpdW13b29kAG1lZF9wdXJwbGUAbWljYQBuZW9uYmx1ZQBuZW9ucGluawBuZXdtaWRuaWdodGJsdWUAbmV3dGFuAG9sZGdvbGQAcXVhcnR6AHJpY2hibHVlAHNjYXJsZXQAc2VtaVN3ZWV0Q2hvYwBzaWx2ZXIAc3BpY3lwaW5rAHN1bW1lcnNreQB2ZXJ5ZGFya2Jyb3duAHZlcnlfbGlnaHRfcHVycGxlAHBvdgBwb3Y6cG92ACVzICVzCgAuXCIgACAlZCAlZAAgJXMKACAlZABmaWxsIABlbGxpcHNlIGF0dHJzJWQgJXN3aWQgJS41ZiBodCAlLjVmIGF0ICglLjVmLCUuNWYpOwoALmZ0ICVzCgAucHMgJWQqXG4oU0Z1LyUuMGZ1CgAiJXMiIGF0ICglLjVmLCUuNWYpOwoAJTAzbwAlcyVzIGlzIG5vdCBhIHRyb2ZmIGZvbnQKAGRvdCBwaWMgcGx1Z2luOiAAUgBdCi5QRQoALlBTICUuNWYgJS41ZgoAJXMgdG8gY2hhbmdlIGRyYXdpbmcgc2l6ZSwgbXVsdGlwbHkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb24gdGhlIC5QUyBsaW5lIGFib3ZlIGFuZCB0aGUgbnVtYmVyIG9uIHRoZSB0d28gbGluZXMgYmVsb3cgKHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikgYnkgYSBzY2FsZSBmYWN0b3IKAC5uciBTRiAlLjBmCnNjYWxldGhpY2tuZXNzID0gJS4wZgoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKACVzIG5vbi1mYXRhbCBydW4tdGltZSBwaWMgdmVyc2lvbiBkZXRlcm1pbmF0aW9uLCB2ZXJzaW9uIDIKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBzY2FsZT0xLjAgJXMgcmVxdWlyZWQgZm9yIGNvbXBhcmlzb25zCgAlcyBib3hyYWQgaXMgbm93IDAuMCBpbiBncGljLCBlbHNlIGl0IHJlbWFpbnMgMi4wCgAlcyBkYXNod2lkIGlzIDAuMSBpbiAxMHRoIEVkaXRpb24sIDAuMDUgaW4gRFdCIDIgYW5kIGluIGdwaWMKACVzIGZpbGx2YWwgaXMgMC4zIGluIDEwdGggRWRpdGlvbiAoZmlsbCAwIG1lYW5zIGJsYWNrKSwgMC41IGluIGdwaWMgKGZpbGwgMCBtZWFucyB3aGl0ZSksIHVuZGVmaW5lZCBpbiBEV0IgMgoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKACVzIERXQiAyIGRvZXNuJ3QgdXNlIGZpbGwgYW5kIGRvZXNuJ3QgZGVmaW5lIGZpbGx2YWwKACVzIHJlc2V0IHdvcmtzIGluIGdwaWMgYW5kIDEwdGggZWRpdGlvbiwgYnV0IGlzbid0IGRlZmluZWQgaW4gRFdCIDIKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGlmIGJveHJhZCA+IDEuMCAmJiBkYXNod2lkIDwgMC4wNzUgdGhlbiBYCglmaWxsdmFsID0gMTsKCWRlZmluZSBmaWxsIFkgWTsKCWRlZmluZSBzb2xpZCBZIFk7CglkZWZpbmUgcmVzZXQgWSBzY2FsZT0xLjAgWTsKWAoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAaWYgZmlsbHZhbCA+IDAuNCB0aGVuIFgKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IDEgLSBZOwoJZGVmaW5lIGJvbGQgWSB0aGlja25lc3MgMiBZOwoACSVzIGlmIHlvdSB1c2UgZ3BpYyBhbmQgaXQgYmFyZnMgb24gZW5jb3VudGVyaW5nICJzb2xpZCIsCgAJJXMJaW5zdGFsbCBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ3BpYyBvciBzd2l0Y2ggdG8gRFdCIG9yIDEwdGggRWRpdGlvbiBwaWM7CgAJJXMJc29ycnksIHRoZSBncm9mZiBmb2xrcyBjaGFuZ2VkIGdwaWM7IHNlbmQgYW55IGNvbXBsYWludCB0byB0aGVtOwoAWCBlbHNlIFoKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IFk7CglkZWZpbmUgYm9sZCBZIFk7CglkZWZpbmUgZmlsbGVkIFkgZmlsbCBZOwpaCgAlcyBhcnJvd2hlYWQgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGFycm93aGVhZCA9IDcgbWFrZXMgZmlsbGVkIGFycm93aGVhZHMgaW4gZ3BpYyBhbmQgaW4gMTB0aCBFZGl0aW9uCgAlcyBhcnJvd2hlYWQgaXMgdW5kZWZpbmVkIGluIERXQiAyLCBpbml0aWFsbHkgMSBpbiBncGljLCAyIGluIDEwdGggRWRpdGlvbgoAYXJyb3doZWFkID0gNyAlcyBub3QgdXNlZCBieSBncmFwaHZpegoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGJveHJhZCB2YXJpYWJsZSB0byBkcmF3IGJveGVzIHdpdGggcm91bmRlZCBjb3JuZXJzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAYm94cmFkID0gMCAlcyBubyByb3VuZGVkIGNvcm5lcnMgaW4gZ3JhcGh2aXoKACVzIEdOVSBwaWMgc3VwcG9ydHMgYSBsaW5ldGhpY2sgdmFyaWFibGUgdG8gc2V0IGxpbmUgdGhpY2tuZXNzOyBEV0IgYW5kIDEwdGggRWQuIGRvIG5vdAoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAlcyAuUFMgdy9vIGFyZ3MgY2F1c2VzIEdOVSBwaWMgdG8gc2NhbGUgZHJhd2luZyB0byBmaXQgOC41eDExIHBhcGVyOyBEV0IgZG9lcyBub3QKACVzIG1heHBzaHQgYW5kIG1heHBzd2lkIGhhdmUgbm8gbWVhbmluZyBpbiBEV0IgMi4wLCBzZXQgcGFnZSBib3VuZGFyaWVzIGluIGdwaWMgYW5kIGluIDEwdGggRWRpdGlvbgoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgYXJlIHByZWRlZmluZWQgdG8gMTEuMCBhbmQgOC41IGluIGdwaWMKAG1heHBzaHQgPSAlZgptYXhwc3dpZCA9ICVmCgBEb3Q6IFsKAGRlZmluZSBhdHRyczAgJSUgJSU7IGRlZmluZSB1bmZpbGxlZCAlJSAlJTsgZGVmaW5lIHJvdW5kZWQgJSUgJSU7IGRlZmluZSBkaWFnb25hbHMgJSUgJSUKACVzJXMgdW5zdXBwb3J0ZWQKAHJvdGF0aW9uACVzIHJlc3RvcmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoucHMgXG4oLlMKLmZ0IFxuKERGCgAlcyBDcmVhdG9yOiAlcyB2ZXJzaW9uICVzICglcykKACVzIFRpdGxlOiAlcwoAJXMgc2F2ZSBwb2ludCBzaXplIGFuZCBmb250Ci5uciAuUyBcbigucwoubnIgREYgXG4oLmYKAHBpYwBwaWM6cGljAHBuZzpzdmcAZ2lmOnN2ZwBqcGVnOnN2ZwBqcGU6c3ZnAGpwZzpzdmcAcG5nOmZpZwBnaWY6ZmlnAGpwZWc6ZmlnAGpwZTpmaWcAanBnOmZpZwBwbmc6dnJtbABnaWY6dnJtbABqcGVnOnZybWwAanBlOnZybWwAanBnOnZybWwAZXBzOnBzAHBzOnBzAChsaWIpOnBzAHBuZzptYXAAZ2lmOm1hcABqcGVnOm1hcABqcGU6bWFwAGpwZzptYXAAcHM6bWFwAGVwczptYXAAc3ZnOm1hcABwbmc6ZG90AGdpZjpkb3QAanBlZzpkb3QAanBlOmRvdABqcGc6ZG90AHBzOmRvdABlcHM6ZG90AHN2Zzpkb3QAcG5nOnhkb3QAZ2lmOnhkb3QAanBlZzp4ZG90AGpwZTp4ZG90AGpwZzp4ZG90AHBzOnhkb3QAZXBzOnhkb3QAc3ZnOnhkb3QAc3ZnOnN2ZwBwbmc6dm1sAGdpZjp2bWwAanBlZzp2bWwAanBlOnZtbABqcGc6dm1sAGdpZjp0awBpbWFnZSBjcmVhdGUgcGhvdG8gInBob3RvXyVzIiAtZmlsZSAiJXMiCgAkYyBjcmVhdGUgaW1hZ2UgJS4yZiAlLjJmIC1pbWFnZSAicGhvdG9fJXMiCgA8djppbWFnZSBzcmM9IiVzIiBzdHlsZT0iIHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDolLjJmOyBoZWlnaHQ6JS4yZjsgbGVmdDolLjJmIDsgdG9wOiUuMmYiACAvPgoAZ3Zsb2FkaW1hZ2VfY29yZS5jAGNvcmVfbG9hZGltYWdlX3BzbGliAFsgACVnICVnIABdICAlZCB0cnVlICVzCgBdICAlZCBmYWxzZSAlcwoAY29yZV9sb2FkaW1hZ2VfcHMAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAHVzZXJfc2hhcGVfJWQKAGdyZXN0b3JlCgBjb3JlX2xvYWRpbWFnZV92cm1sAFNoYXBlIHsKACAgYXBwZWFyYW5jZSBBcHBlYXJhbmNlIHsKACAgICBtYXRlcmlhbCBNYXRlcmlhbCB7CgAgICAgICBhbWJpZW50SW50ZW5zaXR5IDAuMzMKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAgICAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICB9CgBjb3JlX2xvYWRpbWFnZV9maWcAJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJS4xZiAlZCAlZCAlZCAlZCAlZCAlZAogJWQgJXMKACAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZAoAY29yZV9sb2FkaW1hZ2Vfc3ZnADxpbWFnZSB4bGluazpocmVmPSIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4PSIlZyIgeT0iJWciACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4gbWVldCIgeD0iJWciIHk9IiVnIgAvPgoAZG90X2xheW91dABwaGFzZQBkb3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBmb3IgZGlzY29ubmVjdGVkIGdyYXBocyBvciBncmFwaHMgd2l0aCBjbHVzdGVycwoAY29tcG91bmQAdiA9PSBuAGRvdGluaXQuYwByZW1vdmVfZnJvbV9yYW5rAG9yZGVyAGVkZ2UgbGFiZWxzIHdpdGggc3BsaW5lcz1jdXJ2ZWQgbm90IHN1cHBvcnRlZCBpbiBkb3QgLSB1c2UgeGxhYmVscwoARURfbGFiZWwoZmUpAGRvdHNwbGluZXMuYwBfZG90X3NwbGluZXMAZmxhdCBlZGdlIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMgb25lIG9mIHdoaWNoIGhhcyBhIHJlY29yZCBzaGFwZSAtIHJlcGxhY2UgcmVjb3JkcyB3aXRoIEhUTUwtbGlrZSBsYWJlbHMKACAgRWRnZSAlcyAlcyAlcwoAeHh4ADEwMDAwAHslc30AYXV4ZwBsYWJlbF9mbG9hdABmaXhlZAAobCA9IEVEX2xhYmVsKGZlKSkAc2V0RWRnZUxhYmVsUG9zAGUgIT0gTlVMTABmYXN0Z3IuYwBkZWxldGVfZmFzdF9lZGdlAG4gIT0gTkRfbmV4dChuKQBmYXN0X25vZGUAdSAhPSB2AGZhc3Rfbm9kZWFwcABORF9uZXh0KHYpID09IE5VTEwAZmluZF9mYXN0X25vZGUoZywgbikAZGVsZXRlX2Zhc3Rfbm9kZQBkZWxldGVfZmxhdF9lZGdlAG1lcmdlX29uZXdheSBnbGl0Y2gKAG1lcmdlX29uZXdheQBzYWZlX2RlbGV0ZV9mYXN0X2VkZ2UAbGcAaW5mbwBjb21wAGNudCA9PSBzegBtaW5jcm9zcy5jAGZpeExhYmVsT3JkZXIAcmVtaW5jcm9zcwBtaW5jcm9zcyAlczogJWQgY3Jvc3NpbmdzLCAlLjJmIHNlY3MuCgB2AG5laWdoYm9yAChydiA9PSAwKSB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGNvbnN0cmFpbmluZ19mbGF0X2VkZ2UoZyx2LGUpID09IEZBTFNFAGZsYXRfcmVvcmRlcgBORF9yYW5rKHYpID09IHIAcG9zdG9yZGVyAGZsYXRpbmRleChhZ2hlYWQoZSkpIDwgTS0+bnJvd3MAZmxhdF9zZWFyY2gAZmxhdGluZGV4KGFndGFpbChlKSkgPCBNLT5uY29scwBvdXQAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZC4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQgZm9yIG5vZGUgJyVzJy4KAG1lcmdlMjogZ3JhcGggJXMsIHJhbmsgJWQgaGFzIG9ubHkgJWQgPCAlZCBub2RlcwoAbWluY3Jvc3M6IHBhc3MgJWQgaXRlciAlZCB0cnlpbmcgJWQgY3VyX2Nyb3NzICVkIGJlc3RfY3Jvc3MgJWQKAE5EX29yZGVyKHYpIDwgTkRfb3JkZXIodykAYmFsYW5jZQB0cmFuc3Bvc2Vfc3RlcABzdXJwcmlzZQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiAlcyAlcyByYW5rICVkIGkgPSAlZCBhbiA9IDAKAEdEX3JhbmsoZylbcl0ubiA8PSBHRF9yYW5rKGcpW3JdLmFuAGluc3RhbGxfaW5fcmFuawBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IE5EX29yZGVyKCVzKSBbJWRdID4gR0RfcmFuayhSb290KVslZF0uYW4gWyVkXQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiByYW5rICVkIG5vdCBpbiByYW5rIHJhbmdlIFslZCwlZF0KAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogR0RfcmFuayhnKVslZF0udiArIE5EX29yZGVyKCVzKSBbJWRdID4gR0RfcmFuayhnKVslZF0uYXYgKyBHRF9yYW5rKFJvb3QpWyVkXS5hbiBbJWRdCgBfbmV3X3JhbmsAbWNsaW1pdAByYW5rKGcsIDIsIG5zaXRlcjIoZykpID09IDAAcG9zaXRpb24uYwBkb3RfcG9zaXRpb24AQVI9JTAuNGxmCSBBcmVhPSAlMC40bGYJAER1bW15PSVkCgBHb2luZyB0byBhcHBseSBhbm90aGVyIGV4cGFuc2lvbi4KAG5leHQjaXRlcj0lZAoAaHAAY29ubmVjdEdyYXBoAEVkZ2UgbGVuZ3RoICVmIGxhcmdlciB0aGFuIG1heGltdW0gJXUgYWxsb3dlZC4KQ2hlY2sgZm9yIG92ZXJ3aWRlIG5vZGUocykuCgBuc2xpbWl0AGNvbnRhaW5fbm9kZXMgY2x1c3QgJXMgcmFuayAlZCBtaXNzaW5nIG5vZGUKAG5zbGltaXQxAG5ld3JhbmsATWF4cmFuayA9ICVkLCBtaW5yYW5rID0gJWQKAGxlYWRlciAhPSBOVUxMAHJhbmsuYwBjbHVzdGVyX2xlYWRlcgAoTkRfVUZfc2l6ZShuKSA8PSAxKSB8fCAobiA9PSBsZWFkZXIpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAbWlubWF4X2VkZ2VzAGFndGFpbChlKSA9PSBVRl9maW5kKGFndGFpbChlKSkAcmFuawBzYW1lAG1pbgBzb3VyY2UAbWF4AHNpbmsAbGV2ZWwgYXNzaWdubWVudCBjb25zdHJhaW50cwBsZXZlbCBncmFwaCByZWMAf3Jvb3QAf3RvcAB/Ym90AGNvbXBhY3QAX3dlYWtfJWQAcmFua2luZzogZmFpbHVyZSB0byBjcmVhdGUgc3Ryb25nIGNvbnN0cmFpbnQgZWRnZSBiZXR3ZWVuIG5vZGVzICVzIGFuZCAlcwoAJXMgaGFzIHVucmVjb2duaXplZCByYW5rPSVzAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAHNhbWVoZWFkAHNhbWV0YWlsAHRvbyBtYW55ICg+ICVkKSBzYW1le2hlYWQsdGFpbH0gZ3JvdXBzIGZvciBub2RlICVzCgBjb21iaUFSID0gJWxmCgAlbGYsJWQAdGhlIGFzcGVjdCBhdHRyaWJ1dGUgaGFzIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGltcGxlbWVudGF0aW9uIGZsYXdzIC0gYXR0cmlidXRlIGlnbm9yZWQuCgBFRF90b192aXJ0KGUpID09IE5VTEwAY2xhc3MyLmMAbWVyZ2VfY2hhaW4ARURfdG9fdmlydChvcmlnKSA9PSBOVUxMAG1ha2VfY2hhaW4ARURfdG9fdmlydChvcmlnKSAhPSBOVUxMAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBjbHVzdGVyLmMAbWFwX3BhdGgAJXMgd2FzIGFscmVhZHkgaW4gYSByYW5rc2V0LCBkZWxldGVkIGZyb20gY2x1c3RlciAlcwoAbGhlYWQAbHRhaWwAJXMgLT4gJXM6IHNwbGluZSBzaXplID4gMSBub3Qgc3VwcG9ydGVkCgAlcyAtPiAlczogaGVhZCBub3QgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgaXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAYmV6LT5zZmxhZwBjb21wb3VuZC5jAG1ha2VDb21wb3VuZEVkZ2UAYmV6LT5lZmxhZwAlcyAtPiAlczogdGFpbCBub3QgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgaXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAc2VnbWVudCBbJXMsJXNdIGRvZXMgbm90IGludGVyc2VjdCBib3ggbGw9JXMsdXI9JXMKAGJveEludGVyc2VjdGYAKCUuNWcsJS41ZykAY2x1c3RlciBuYW1lZCAlcyBub3QgZm91bmQKAGNvbmNlbnRyYXRlPXRydWUgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4KAHJlYnVpbHRkX3ZsaXN0czogcmFuayBsZWFkICVzIG5vdCBpbiBvcmRlciAlZCBvZiByYW5rICVkCgBkZWdlbmVyYXRlIGNvbmNlbnRyYXRlZCByYW5rICVzLCVkCgBORF9pbihyaWdodCkuc2l6ZSArIE5EX291dChyaWdodCkuc2l6ZSA9PSAwAGNvbmMuYwBtZXJnZXZpcnR1YWwAZG90OiBPdXQgb2YgbWVtb3J5CgBORF9vdXQodikuc2l6ZSA9PSAyAGZsYXQuYwBzZXRib3VuZHMAR0RfbWlucmFuayhnKSA9PSAwAGFib21pbmF0aW9uAEVycm9yAFdhcm5pbmcAJXM6IAB1c2Vyb3V0OiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5CgBfQUdfc3RyZGF0YQBfQUdfZGF0YWRpY3QAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAJWMlbGQAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQBhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABfQUdfcGVuZGluZwBhZ3JlY29yZF9jYWxsYmFjayBvZiBhIGJhZCBvYmplY3QAcGVuZCBkaWN0b2YgYSBiYWQgb2JqZWN0AG1vdmUgdG8gZnJvbnQgbG9jayBpbmNvbnNpc3RlbmN5AFxcAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kACVzCgBmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkAGZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3cAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ19nZXRfbmV4dF9idWZmZXIoKQBpbnB1dABzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnACcgaW4gbGluZSAlZCBvZiAAIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKACVzAGxpbmUAJWQgJTFbIl0lbgBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnX2NyZWF0ZV9idWZmZXIoKQBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnZW5zdXJlX2J1ZmZlcl9zdGFjaygpADogACBpbiBsaW5lICVkACBuZWFyICcAIHNjYW5uaW5nIGEgcXVvdGVkIHN0cmluZyAobWlzc2luZyBlbmRxdW90ZT8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOiIAIHNjYW5uaW5nIGEgSFRNTCBzdHJpbmcgKG1pc3NpbmcgJz4nPyBiYWQgbmVzdGluZz8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOjwAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93ACIiAHN0cmljdABsaW5lbGVuZ3RoADsKACBba2V5PQBdACBbACwKAD0AXyVsZF9TVVNQRUNUAGRpAHN0cmljdCAAewoAXTsKABLu7hQJA+7+7u7uAe7u7gHu7gr+7hMZFe4TAe7u7u4LEe7u7u7u7u7u7gHu7hYJAQEdDxfu7hoXG+7uHO7u7u4BGfvu7u4B7hDu7h7u7u7uAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcRAgICAgICAgICAgICAhIQAhMCAhYCAgICAgICAgICAgICAgICAgICAgICAgICAhQCFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICDgIPAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0LAwQFDwcDDA0GDA0ODA0aFRYAAQADBw4GDwgMDRITKhARCRAvMBEyFxMNFBIuEhRBEzITLEAqQhksQkYiDA0OIw8JEBEKEBHJEBEtRUb8AQb2Dwf2JAIQES8wNk1OKCY7PCo2MTk9Py86QNhEMD4lN0M1Sys4SUwAAwkAAAABDgILDAgjJCU2Oz0ADRASGxYcEicyIhczHjwGBzUFDxEUGCkAEykAAAAAADcVKB0eACEmNB8wPhksABsAIBoqACs6Li8AMTg5LQACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIBAQMCAQADAgEAAQEAAQEBAwAYGRkZGhscHB0dHh4fHyAgISEiIiMkJCYnJSUoKCkpKSoqKysrLCwtLS4vLzAxMTIzNDY1Nzc3ODg4OTk6Ou7u/+7u7u7u7h8g7gDv7u7uDO7u7ggN7u7u+O7u7u7u7vXu/wMIBCEFCxITJxQVFikyQRcYGRosMzRCR0gbShwdLh5PHyBrZXkAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAJXM6JXMAQ291bGQgbm90IG9wZW4gIiVzIiBmb3Igd3JpdGluZyA6ICVzCgBObyBsaWJ6IHN1cHBvcnQuCgAuJWQAbm9uYW1lLmd2AGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCgBObyBsaWJ6IHN1cHBvcnQKAGd2cHJpbnRmOiAlcwoALTk5OTk5OTk5OTk5OTk5OS45OQBncmFwaHZpegAyLjQwLjEAMjAxNjEyMjUuMDMwNAByZW5kZXIAbGF5b3V0AGRldmljZQBsb2FkaW1hZ2UAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKAFVzaW5nICVzOiAlczolcwoAZ3Z1c2Vyc2hhcGUuYwBndnVzZXJzaGFwZV9maW5kAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgAlcyB3aGlsZSBvcGVuaW5nICVzCgB1cy0+ZgBndnVzZXJzaGFwZV9vcGVuACIlcyIgd2FzIG5vdCBmb3VuZCBhcyBhIGZpbGUgb3IgYXMgYSBzaGFwZSBsaWJyYXJ5IG1lbWJlcgoAL01lZGlhQm94AChbYS16XVthLXpBLVpdKik9IihbXiJdKikiAGNhbm5vdCBjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiAlcwAlbGYlMnMAcHQAdmlld0JveAAlbGYgJWxmICVsZiAlbGYAaW4AcHgAcGMAIgBjbQBtbQAlJUJvdW5kaW5nQm94OgAB0NHS09TV1tfY2QA8c3ZnAFdFQlAAd2VicAAobGliKQCJUE5HDQoaCgBwbmcAJSFQUy1BZG9iZS0AQk0AYm1wAEdJRjgAZ2lmAP/Y/+AAanBlZwAlUERGLQBwZGYAxdDTxgBlcHMAPD94bWwAeG1sAFJJRkYAcmlmZgAAAAEAAGljbwBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAJWQgJWQgJWQgJWQATGF5b3V0IHdhcyBub3QgZG9uZQoAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAGdjOiBPdXQgb2YgbWVtb3J5CgBfY2NfAG9yaWcAb3AAY2NvbXBzLmMAbWFwQ2x1c3QAY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AKCU0bGQpICU3bGQgbm9kZXMgJTdsZCBlZGdlcwoAICAgICAgICU3ZCBub2RlcyAlN2QgZWRnZXMgJTdsZCBjb21wb25lbnRzICVzCgBkZwBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAc29ydHYAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBhcnJheSBwYWNraW5nOiAlcyAlZCByb3dzICVkIGNvbHVtbnMKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgBzdGVwIHNpemUgPSAlZAoAcG9zWyVkXSAlZCAlZAoAY2MgKCVkIGNlbGxzKSBhdCAoJWQsJWQpICglZCwlZCkKAGNjICglZCBjZWxscykgYXQgKCVkLCVkKQoAJXMgbm8uIGNlbGxzICVkIFcgJWQgSCAlZAoAICAlZCAlZCBjZWxsCgBsaWJwYWNrOiBkaXNjID0gJWYgKCA8IDApCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgByb290ICVkICglZikgJWQgKCVmKQoAIHIxICVmIHIyICVmCgBwaW5mbwBwYWNrLmMAZ2V0UGFja0luZm8AICBtYXJnaW4gJWQKAHBhY2ttb2RlAHBhcnNlUGFja01vZGVJbmZvAGFycmF5AGFzcGVjdAAlZgBwYWNrIGluZm86CgAgIG1vZGUgICAlcwoAICBhc3BlY3QgJWYKACAgc2l6ZSAgICVkCgAgIGZsYWdzICAlZAoAdW5kZWZpbmVkAHBhY2sAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAbm9ybWFsAGNyb3cAdGVlAGRvdABpbnYAdmVlAHBlbgBtcHR5AGN1cnZlAGljdXJ2ZQBsAGhhbGYAaW52ZW1wdHkAX2JhY2tncm91bmQAX2RyYXdfAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAICAiJXMiCgBubyBtZW1vcnkgZnJvbSB6bWFsbG9jKCkKAG9iagBlbWl0LmMAcG9wX29ial9zdGF0ZQBjbHVzdAAlbGQAcGFnZSVkLCVkXwBUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAElsbGVnYWwgbGVuZ3RoIHZhbHVlIGluICIlcyIgY29sb3IgYXR0cmlidXRlIABjb2xvcnNjaGVtZQBlbWl0X2VkZ2VfbGFiZWwAJXMtJXMAZm9yd2FyZABiYWNrACAtPiAAIC0tIABpbiBlZGdlICVzJXMlcwoAbGFiZWxhbGlnbmVkAGVkZ2VocmVmAGVkZ2VVUkwAbGFiZWxocmVmAGxhYmVsVVJMAHRhaWxocmVmAHRhaWxVUkwAaGVhZGhyZWYAaGVhZFVSTAB0YXJnZXQAZWRnZXRhcmdldABsYWJlbHRhcmdldAB0YWlsdGFyZ2V0AGhlYWR0YXJnZXQAZWRnZXRvb2x0aXAAbGFiZWx0b29sdGlwAHRhaWx0b29sdGlwAGhlYWR0b29sdGlwAAFuZXN0aW5nIG5vdCBhbGxvd2VkIGluIHN0eWxlOiAlcwoAdW5tYXRjaGVkICcpJyBpbiBzdHlsZTogJXMKAHRydW5jYXRpbmcgc3R5bGUgJyVzJwoAdW5tYXRjaGVkICcoJyBpbiBzdHlsZTogJXMKAGFsbABiZ2NvbG9yAGluIGNsdXN0ZXIgJXMKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAGxheW91dCB3YXMgbm90IGRvbmUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAcGFnZWRpcj0lcyBpZ25vcmVkCgB2aWV3cG9ydAAlbGYsJWxmLCVsZiwnJVteJ10nACVsZiwlbGYsJWxmLCVbXixdJXMAJWxmLCVsZiwlbGYsJWxmLCVsZgBvdXRwdXRvcmRlcgBvZGVzZmlyc3QAZGdlc2ZpcnN0AGxheWVycwBsYXllcnNlbGVjdABUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KAGxheWVyc2VwADoJIABsYXllcmxpc3RzZXAALABUaGUgY2hhcmFjdGVyICclYycgYXBwZWFycyBpbiBib3RoIHRoZSBsYXllcnNlcCBhbmQgbGF5ZXJsaXN0c2VwIGF0dHJpYnV0ZXMgLSBsYXllcmxpc3RzZXAgaWdub3JlZC4KAHBhZABCTABwYWdlZGlyAHNvbGlkAABzZXRsaW5ld2lkdGgAMQAAc3BsLT5zaXplID4gMABpbml0X3NwbGluZXNfYmIAYnouc2l6ZSA+IDAAYmV6aWVyX2JiAGJ6LnNpemUgJSAzID09IDEAbGFiZWwAJWxmAGZvbnRwYXRoAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAaW1hZ2VwYXRoAHF1YW50dW0AcmFua2RpcgBMUgBCVABSTABub2Rlc2VwAHJhbmtzZXAAZXF1YWxseQBzaG93Ym94ZXMAZm9udG5hbWVzAHNpemUAcGFnZQBjZW50ZXIAcm90YXRlAG9yaWVudGF0aW9uAGxhbmRzY2FwZQBjbHVzdGVycmFuawBjb25jZW50cmF0ZQBkcGkAcmVzb2x1dGlvbgBvcmRlcmluZwBncmFkaWVudGFuZ2xlAGZpbGxjb2xvcgBzdHlsZQBmb250c2l6ZQBmb250bmFtZQBmb250Y29sb3IAeGxhYmVsAHBlbndpZHRoAHNpZGVzAHBlcmlwaGVyaWVzAHNrZXcAZGlzdG9ydGlvbgBmaXhlZHNpemUAbm9qdXN0aWZ5AGxheWVyAGdyb3VwAGNvbW1lbnQAdmVydGljZXMAegB3ZWlnaHQAbGFiZWxmbG9hdABkaXIAYXJyb3doZWFkAGFycm93dGFpbABoZWFkbGFiZWwAdGFpbGxhYmVsAGxhYmVsZm9udHNpemUAbGFiZWxmb250bmFtZQBsYWJlbGZvbnRjb2xvcgBsYWJlbGRpc3RhbmNlAGxhYmVsYW5nbGUAbWlubGVuAGRlY29yYXRlAGFycm93c2l6ZQBjb25zdHJhaW50AHRhaWxjbGlwAGhlYWRjbGlwAGlkAGxhYmVsanVzdABsb2NhbABnbG9iYWwAJWxmLCVsZiVjACVsZiVjAHJhdGlvAGF1dG8AY29tcHJlc3MAZXhwYW5kAGZpbGwAZ2QAcHMAc3ZnAGNoYXJzZXQAdXRmLTgAbGF0aW4tMQBsYXRpbjEAbDEASVNPLTg4NTktMQBJU09fODg1OS0xAElTTzg4NTktMQBJU08tSVItMTAwAGJpZy01AGJpZzUAdXRmOABVbnN1cHBvcnRlZCBjaGFyc2V0ICIlcyIgLSBhc3N1bWluZyB1dGYtOAoAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKAGtpbmQgPT0gTFRfTk9ORQBsYWJlbHMuYwBtYWtlX2xhYmVsAFxMAFxHAFxFAFxIAFxUACYjMTM7ACYjMTA7ACZxdW90OwAmIzE2MDsAJmFtcDsAJmd0OwAmIzM5OwAmIzQ1OwAmbHQ7ACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoAbmV0d29yayBzaW1wbGV4OiAAJWQgACVzJWQgbm9kZXMgJWQgZWRnZXMgJWQgaXRlciAlLjJmIHNlYwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbnMuYwBmZWFzaWJsZV90cmVlACFUUkVFX0VER0UoZSkAbWVyZ2VfdHJlZXMAKHIwLT5oZWFwX2luZGV4ID4gLTEpIHx8IChyMS0+aGVhcF9pbmRleCA+IC0xKQBTVHNldFVuaW9uAHItPmhlYXBfaW5kZXggPj0gMABhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAYWRkX3RyZWVfZWRnZTogZW1wdHkgb3V0ZWRnZSBsaXN0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBpbmVkZ2UgbGlzdAoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAAklcyAlZAoAc2VhcmNoc2l6ZQBncmFwaCAAIABub2RlIABzdG9wCgAlLjVnAHBvcwByZWN0cwB4bHAAbHAAaGVhZF9scAB0YWlsX2xwAGx3aWR0aABsaGVpZ2h0AGJiACUuNWcsJS41ZywlLjVnACwlLjVnACUuNWcsJS41ZwBzYW1wbGVwb2ludHMAJS41ZyAlLjVnAHMsJS41ZywlLjVnIABlLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZwAlLjJmACUuNWcsJS41ZywlLjVnLCUuNWcgAC9wYXRoYm94IHsKICAgIC9YIGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC94IGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL3kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAbG9zdCAlcyAlcyBlZGdlCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGxhYmVsICVzAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGhlYWQgbGFiZWwgJXMAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMAZm9yY2VsYWJlbHMAJWQgb3V0IG9mICVkIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb3V0IG9mICVkIGV4dGVyaW9yIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb2JqcyAlZCB4bGFiZWxzIGZvcmNlPSVkIGJiPSglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKQoAb2JqZWN0cwoAIFslZF0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAHhsYWJlbHMKACBbJWRdICVwIHNldCAlZCAoJS4wMmYsJS4wMmYpICglLjAyZiwlLjAyZikgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAByZWFkAEJvdW5kaW5nQm94IG5vdCBmb3VuZCBpbiBlcHNmIGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBjYW4ndCBvcGVuIGxpYnJhcnkgZmlsZSAlcwoARU9GAEJFR0lOAEVORABUUkFJTEVSAC91c2VyX3NoYXBlXyVkIHsKACUlQmVnaW5Eb2N1bWVudDoKACUlRW5kRG9jdW1lbnQKAH0gYmluZCBkZWYKAFVURi04IGlucHV0IHVzZXMgbm9uLUxhdGluMSBjaGFyYWN0ZXJzIHdoaWNoIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgUG9zdFNjcmlwdCBkcml2ZXIKAGNhbm5vdCByZS1hbGxvY2F0ZSBwcwoAcm91dGVzcGxpbmVzaW5pdDogY2Fubm90IGFsbG9jYXRlIHBzCgByb3V0ZXNwbGluZXM6ICVkIGVkZ2VzLCAlZCBib3hlcyAlLjJmIHNlYwoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBpbGxlZ2FsIHZhbHVlcyBvZiBwcmV2ICVkIGFuZCBuZXh0ICVkLCBsaW5lICVkCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIFBzaG9ydGVzdHBhdGggZmFpbGVkCgBpbiByb3V0ZXNwbGluZXMsIFByb3V0ZXNwbGluZSBmYWlsZWQKAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBpbiBjaGVja3BhdGgsIGJveCAwIGhhcyBMTCBjb29yZCA+IFVSIGNvb3JkCgBpbiBjaGVja3BhdGgsIGJveCAlZCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3hlcyAlZCBhbmQgJWQgZG9uJ3QgdG91Y2gKAGluIGNoZWNrcGF0aCwgc3RhcnQgcG9ydCBub3QgaW4gZmlyc3QgYm94CgBpbiBjaGVja3BhdGgsIGVuZCBwb3J0IG5vdCBpbiBsYXN0IGJveAoAJWQgYm94ZXM6CgAlZCAoJS41ZywgJS41ZyksICglLjVnLCAlLjVnKQoAY29uc3RyYWluZWQAbm90IGNvbnN0cmFpbmVkAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgBzaWRlcyA9PSA0AHNoYXBlcy5jAHJvdW5kX2Nvcm5lcnMAYmFkIGxhYmVsIGZvcm1hdCAlcwoAXE4AbWFyZ2luACVsZiwlbGYAcmVndWxhcgBjdXN0b20Ac2hhcGVmaWxlADxuaWw+AE5vIG9yIGltcHJvcGVyIHNoYXBlZmlsZT0iJXMiIGZvciBub2RlICIlcyIKAE5vIG9yIGltcHJvcGVyIGltYWdlPSIlcyIgZm9yIG5vZGUgIiVzIgoAbGFiZWxsb2MAc2hhcGUAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAZXBzZgB1c2luZyAlcyBmb3IgdW5rbm93biBzaGFwZSAlcwoAYm94AHBvbHlnb24Ab3ZhbABjaXJjbGUAcG9pbnQAZWdnAHRyaWFuZ2xlAHBsYWludGV4dABwbGFpbgBkaWFtb25kAHRyYXBleml1bQBwYXJhbGxlbG9ncmFtAGhvdXNlAHBlbnRhZ29uAGhleGFnb24Ac2VwdGFnb24Ab2N0YWdvbgBub3RlAHRhYgBmb2xkZXIAYm94M2QAY29tcG9uZW50AGN5bGluZGVyAHJlY3QAcmVjdGFuZ2xlAHNxdWFyZQBkb3VibGVjaXJjbGUAZG91Ymxlb2N0YWdvbgB0cmlwbGVvY3RhZ29uAGludnRyaWFuZ2xlAGludnRyYXBleml1bQBpbnZob3VzZQB1bmRlcmxpbmUATWRpYW1vbmQATXNxdWFyZQBNY2lyY2xlAHByb21vdGVyAGNkcwB0ZXJtaW5hdG9yAHV0cgBpbnN1bGF0b3IAcmlib3NpdGUAcm5hc3RhYgBwcm90ZWFzZXNpdGUAcHJvdGVpbnN0YWIAcHJpbWVyc2l0ZQByZXN0cmljdGlvbnNpdGUAZml2ZXBvdmVyaGFuZwB0aHJlZXBvdmVyaGFuZwBub3ZlcmhhbmcAYXNzZW1ibHkAc2lnbmF0dXJlAHJwcm9tb3RlcgBsYXJyb3cAcmFycm93AGxwcm9tb3RlcgByZWNvcmQATXJlY29yZABzdGFyACM4MDgwODAAI2ZjZmNmYwAjMzAzMDMwACNlOGU4ZTgAI2UwZTBlMAAjZjBmMGYwACMxMDEwMTAAI2Y4ZjhmOABpbiBub2RlICVzCgByb3VuZGVkAGRpYWdvbmFscwByYWRpYWwAc3RyaXBlZAB3ZWRnZWQAXwBub2RlICVzLCBwb3J0ICVzLCB1bnJlY29nbml6ZWQgY29tcGFzcyBwb2ludCAnJXMnIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcyB1bnJlY29nbml6ZWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBpbnZpcwAAZmlsbGVkAABzAGUAdwBzcGxpbmVzLmMAYmVnaW5wYXRoAFAtPmVuZC50aGV0YSA8IDIgKiBNX1BJAGVuZHBhdGgAbWFrZVNlbGZFZGdlAGdldHNwbGluZXBvaW50czogbm8gc3BsaW5lIHBvaW50cyBhdmFpbGFibGUgZm9yIGVkZ2UgKCVzLCVzKQoAcG9seWxpbmVNaWRwb2ludABzcGFuLT5mb250AHRleHRzcGFuLmMAdGV4dHNwYW5fc2l6ZQBmb250LT5uYW1lAGZvbnRuYW1lOiAiJXMiIHJlc29sdmVkIHRvOiAlcwoAZm9udG5hbWU6IHVuYWJsZSB0byByZXNvbHZlICIlcyIKAGNvdXIAYXJpYWwAaGVsdmV0aWNhAFtpbnRlcm5hbCB0aW1lc10AW2ludGVybmFsIGNvdXJpZXJdAFtpbnRlcm5hbCBhcmlhbF0AQXZhbnRHYXJkZS1Cb29rAFVSVyBHb3RoaWMgTABib29rAHNhbnMtU2VyaWYAQXZhbnRHYXJkZS1Cb29rT2JsaXF1ZQBvYmxpcXVlAGl0YWxpYwBBdmFudEdhcmRlLURlbWkAZGVtaQBBdmFudEdhcmRlLURlbWlPYmxpcXVlAEJvb2ttYW4tRGVtaQBVUlcgQm9va21hbiBMAHNlcmlmAEJvb2ttYW4tRGVtaUl0YWxpYwBCb29rbWFuLUxpZ2h0AGxpZ2h0AEJvb2ttYW4tTGlnaHRJdGFsaWMAQ291cmllcgBtb25vc3BhY2UAQ291cmllci1Cb2xkAENvdXJpZXItQm9sZE9ibGlxdWUAQ291cmllci1PYmxpcXVlAEhlbHZldGljYQBIZWx2ZXRpY2EtQm9sZABIZWx2ZXRpY2EtQm9sZE9ibGlxdWUASGVsdmV0aWNhLU5hcnJvdwBjb25kZW5zZWQASGVsdmV0aWNhLU5hcnJvdy1Cb2xkAEhlbHZldGljYS1OYXJyb3ctQm9sZE9ibGlxdWUASGVsdmV0aWNhLU5hcnJvdy1PYmxpcXVlAEhlbHZldGljYS1PYmxpcXVlAE5ld0NlbnR1cnlTY2hsYmstQm9sZABDZW50dXJ5IFNjaG9vbGJvb2sgTABOZXdDZW50dXJ5U2NobGJrLUJvbGRJdGFsaWMATmV3Q2VudHVyeVNjaGxiay1JdGFsaWMATmV3Q2VudHVyeVNjaGxiay1Sb21hbgByb21hbgBQYWxhdGluby1Cb2xkAFBhbGF0aW5vIExpbm90eXBlAFBhbGF0aW5vLUJvbGRJdGFsaWMAUGFsYXRpbm8tSXRhbGljAFBhbGF0aW5vLVJvbWFuAFN5bWJvbABmYW50YXN5AFRpbWVzLUJvbGQAVGltZXMAVGltZXMtQm9sZEl0YWxpYwBUaW1lcy1JdGFsaWMAWmFwZkNoYW5jZXJ5LU1lZGl1bUl0YWxpYwBVUlcgQ2hhbmNlcnkgTABtZWRpdW0AWmFwZkRpbmdiYXRzAERpbmdiYXRzAG5vAHRydWUAeWVzAHV0aWxzLmMAdSA9PSBVRl9maW5kKHUpAFVGX3NldG5hbWUAAWZpbGUgbG9hZGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBjb250YWlucyBTRVJWRVJfTkFNRT0iJXMiCmFuZCB0aGUgR1ZfRklMRV9QQVRIIHZhcmlhYmxlIGlzIHVuc2V0IG9yIGVtcHR5LgoAUGF0aCBwcm92aWRlZCB0byBmaWxlOiAiJXMiIGhhcyBiZWVuIGlnbm9yZWQgYmVjYXVzZSBmaWxlcyBhcmUgb25seSBwZXJtaXR0ZWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIGRpcmVjdG9yaWVzIGluICIlcyIgd2hlbiBydW5uaW5nIGluIGFuIGh0dHAgc2VydmVyLgoAJXMlcyVzAC8AOgBlbGxpcHNlAFRpbWVzLVJvbWFuAGNsdXN0ZXIAX19jbHVzdGVybm9kZXMAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAG1hcE4AQUVsaWcAQWFjdXRlAEFjaXJjAEFncmF2ZQBBbHBoYQBBcmluZwBBdGlsZGUAQXVtbABCZXRhAENjZWRpbABDaGkARGFnZ2VyAERlbHRhAEVUSABFYWN1dGUARWNpcmMARWdyYXZlAEVwc2lsb24ARXRhAEV1bWwAR2FtbWEASWFjdXRlAEljaXJjAElncmF2ZQBJb3RhAEl1bWwAS2FwcGEATGFtYmRhAE11AE50aWxkZQBOdQBPRWxpZwBPYWN1dGUAT2NpcmMAT2dyYXZlAE9tZWdhAE9taWNyb24AT3NsYXNoAE90aWxkZQBPdW1sAFBoaQBQaQBQcmltZQBQc2kAUmhvAFNjYXJvbgBTaWdtYQBUSE9STgBUYXUAVGhldGEAVWFjdXRlAFVjaXJjAFVncmF2ZQBVcHNpbG9uAFV1bWwAWGkAWWFjdXRlAFl1bWwAWmV0YQBhYWN1dGUAYWNpcmMAYWN1dGUAYWVsaWcAYWdyYXZlAGFsZWZzeW0AYWxwaGEAYW1wAGFuZABhbmcAYXJpbmcAYXN5bXAAYXRpbGRlAGF1bWwAYmRxdW8AYmV0YQBicnZiYXIAYnVsbABjYXAAY2NlZGlsAGNlZGlsAGNlbnQAY2hpAGNpcmMAY2x1YnMAY29uZwBjb3B5AGNyYXJyAGN1cABjdXJyZW4AZEFycgBkYWdnZXIAZGFycgBkZWcAZGVsdGEAZGlhbXMAZGl2aWRlAGVhY3V0ZQBlY2lyYwBlZ3JhdmUAZW1wdHkAZW1zcABlbnNwAGVwc2lsb24AZXF1aXYAZXRhAGV0aABldW1sAGV1cm8AZXhpc3QAZm5vZgBmb3JhbGwAZnJhYzEyAGZyYWMxNABmcmFjMzQAZnJhc2wAZ2FtbWEAZ2UAZ3QAaEFycgBoYXJyAGhlYXJ0cwBoZWxsaXAAaWFjdXRlAGljaXJjAGlleGNsAGlncmF2ZQBpbWFnZQBpbmZpbgBpbnQAaW90YQBpcXVlc3QAaXNpbgBpdW1sAGthcHBhAGxBcnIAbGFtYmRhAGxhbmcAbGFxdW8AbGFycgBsY2VpbABsZHF1bwBsZQBsZmxvb3IAbG93YXN0AGxvegBscm0AbHNhcXVvAGxzcXVvAGx0AG1hY3IAbWRhc2gAbWljcm8AbWlkZG90AG11AG5hYmxhAG5ic3AAbmRhc2gAbmUAbmkAbm90AG5vdGluAG5zdWIAbnRpbGRlAG51AG9hY3V0ZQBvY2lyYwBvZWxpZwBvZ3JhdmUAb2xpbmUAb21lZ2EAb21pY3JvbgBvcGx1cwBvcgBvcmRmAG9yZG0Ab3NsYXNoAG90aWxkZQBvdGltZXMAb3VtbABwYXJhAHBhcnQAcGVybWlsAHBlcnAAcGhpAHBpAHBpdgBwbHVzbW4AcG91bmQAcHJpbWUAcHJvZABwcm9wAHBzaQBxdW90AHJBcnIAcmFkaWMAcmFuZwByYXF1bwByYXJyAHJjZWlsAHJkcXVvAHJlYWwAcmVnAHJmbG9vcgByaG8AcmxtAHJzYXF1bwByc3F1bwBzYnF1bwBzY2Fyb24Ac2RvdABzZWN0AHNoeQBzaWdtYQBzaWdtYWYAc2ltAHNwYWRlcwBzdWIAc3ViZQBzdW0Ac3VwAHN1cDEAc3VwMgBzdXAzAHN1cGUAc3psaWcAdGF1AHRoZXJlNAB0aGV0YQB0aGV0YXN5bQB0aGluc3AAdGhvcm4AdGlsZGUAdGltZXMAdHJhZGUAdUFycgB1YWN1dGUAdWFycgB1Y2lyYwB1Z3JhdmUAdW1sAHVwc2loAHVwc2lsb24AdXVtbAB3ZWllcnAAeGkAeWFjdXRlAHllbgB5dW1sAHpldGEAendqAHp3bmoAVVRGOCBjb2RlcyA+IDQgYnl0ZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIChncmFwaCAlcykgLSB0cmVhdGVkIGFzIExhdGluLTEuIFBlcmhhcHMgIi1HY2hhcnNldD1sYXRpbjEiIGlzIG5lZWRlZD8KAEludmFsaWQgJWQtYnl0ZSBVVEY4IGZvdW5kIGluIGlucHV0IG9mIGdyYXBoICVzIC0gdHJlYXRlZCBhcyBMYXRpbi0xLiBQZXJoYXBzICItR2NoYXJzZXQ9bGF0aW4xIiBpcyBuZWVkZWQ/CgBiei5zaXplAG92ZXJsYXBfYmV6aWVyAHVydmVkAG9tcG91bmQAYWxzZQBpbmUAb25lAG8AcnRobwBvbHlsaW5lAHBsaW5lAHJ1ZQBlcwBVbmtub3duICJzcGxpbmVzIiB2YWx1ZTogIiVzIiAtIGlnbm9yZWQKAHNwbGluZXMAb2RiAE9ydGhvZ29uYWwgZWRnZXMgZG8gbm90IGN1cnJlbnRseSBoYW5kbGUgZWRnZSBsYWJlbHMuIFRyeSB1c2luZyB4bGFiZWxzLgoAb3J0aG8gJXMgJXMKAGNoYW5pAG9ydGhvLmMAY2hhblNlYXJjaABjcAAlJSFQUy1BZG9iZS0yLjAKJSUlJUJvdW5kaW5nQm94OiAoYXRlbmQpCi9wb2ludCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIG5ld3BhdGgKICBYIFkgMyAwIDM2MCBhcmMgZmlsbAp9IGRlZgovY2VsbCB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKL25vZGUgewogL3UgZXhjaCBkZWYKIC9yIGV4Y2ggZGVmCiAvZCBleGNoIGRlZgogL2wgZXhjaCBkZWYKIG5ld3BhdGggbCBkIG1vdmV0bwogciBkIGxpbmV0byByIHUgbGluZXRvIGwgdSBsaW5ldG8KIGNsb3NlcGF0aCBmaWxsCn0gZGVmCgoAJWQgJWQgdHJhbnNsYXRlCgAwLjggMC44IDAuOCBzZXRyZ2Jjb2xvcgoAc2hvd3BhZ2UKJSUlJVRyYWlsZXIKJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAbmV3cGF0aCAlZCAlZCBtb3ZldG8KACVkICVkIGxpbmV0bwoAJWQgJWQgbGluZXRvIHN0cm9rZQoAY2hhbm5lbCAlZCAoJWYsJWYpCgAgLT4KACAgICAgACgoJWYsJWYpLCglZiwlZikpICVzICVzAEJfUklHSFQAQl9ET1dOAEJfTEVGVABCX1VQAEJfTk9ERQBzZWcAbmV4dF9zZWcAZGVjaWRlX3BvaW50AGluY29tcGFyYWJsZSBzZWdtZW50cyAhISAtLSBBYm9ydGluZwoAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAGlzX3BhcmFsbGVsAGdyYXBoIEcgewoAIG5vZGVbc2hhcGU9cG9pbnRdCgAgICVkIFtwb3M9IiVkLCVkIl0KACAgJWQgLS0gJWRbbGVuPSIlZiJdCgB9CgBjb2xvciAlcwAlcyBpcyBub3QgYSBrbm93biBjb2xvci4KAGVycm9yIGluIGNvbHhsYXRlKCkKAHNvbGlkAGludmlzaWJsZQBib2xkAHNldGxpbmV3aWR0aABmaWxsZWQAdW5maWxsZWQAdGFwZXJlZABndnJlbmRlcl9zZXRfc3R5bGU6IHVuc3VwcG9ydGVkIHN0eWxlICVzIC0gaWdub3JpbmcKAGd2cmVuZGVyLmMAZ3ZyZW5kZXJfdXNlcnNoYXBlAG5hbWUAbmFtZVswXQB3aWR0aABoZWlnaHQAYm90aABqb2IAZ3Zsb2FkaW1hZ2UuYwBndmxvYWRpbWFnZQB1cwB1cy0+bmFtZQB1cy0+bmFtZVswXQBObyBsb2FkaW1hZ2UgcGx1Z2luIGZvciAiJXMiCgBRAExlZnQAS1BfTGVmdABSaWdodABLUF9SaWdodABVcABLUF9VcABEb3duAEtQX0Rvd24AcGx1cwBLUF9BZGQAbWludXMAS1BfU3VidHJhY3QARgB0b29sdGlwAGVkZ2UAdGFpbHBvcnQAaGVhZHBvcnQAa2V5AGhyZWYAVVJMAG5vZGUAZGlncmFwaABncmFwaABzdWJncmFwaABfTFRYX2xpYnJhcnkAdGV4dGxheW91dABvYmpwLT5sYmwAeGxhYmVscy5jAHhsYWRqdXN0AHhsaW50ZXJzZWN0aW9ucwBscCAhPSBjbHAAZ2V0aW50cnN4aQBvYmpwMS0+c3oueCA9PSAwICYmIG9ianAxLT5zei55ID09IDAAbGJsZW5jbG9zaW5nAHZwAHhsaGR4dW5sb2FkAHNpemU9PWZyZWVkAHJlY3QuYm91bmRhcnlbMl0gPCBJTlRfTUFYAG9ianBscG1rcwByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWABvdXQgb2YgbWVtb3J5CgAjJTJ4JTJ4JTJ4JTJ4ACVsZiVsZiVsZgAvYWNjZW50My8xAC9hY2NlbnQzLzIAL2FjY2VudDMvMwAvYWNjZW50NC8xAC9hY2NlbnQ0LzIAL2FjY2VudDQvMwAvYWNjZW50NC80AC9hY2NlbnQ1LzEAL2FjY2VudDUvMgAvYWNjZW50NS8zAC9hY2NlbnQ1LzQAL2FjY2VudDUvNQAvYWNjZW50Ni8xAC9hY2NlbnQ2LzIAL2FjY2VudDYvMwAvYWNjZW50Ni80AC9hY2NlbnQ2LzUAL2FjY2VudDYvNgAvYWNjZW50Ny8xAC9hY2NlbnQ3LzIAL2FjY2VudDcvMwAvYWNjZW50Ny80AC9hY2NlbnQ3LzUAL2FjY2VudDcvNgAvYWNjZW50Ny83AC9hY2NlbnQ4LzEAL2FjY2VudDgvMgAvYWNjZW50OC8zAC9hY2NlbnQ4LzQAL2FjY2VudDgvNQAvYWNjZW50OC82AC9hY2NlbnQ4LzcAL2FjY2VudDgvOAAvYmx1ZXMzLzEAL2JsdWVzMy8yAC9ibHVlczMvMwAvYmx1ZXM0LzEAL2JsdWVzNC8yAC9ibHVlczQvMwAvYmx1ZXM0LzQAL2JsdWVzNS8xAC9ibHVlczUvMgAvYmx1ZXM1LzMAL2JsdWVzNS80AC9ibHVlczUvNQAvYmx1ZXM2LzEAL2JsdWVzNi8yAC9ibHVlczYvMwAvYmx1ZXM2LzQAL2JsdWVzNi81AC9ibHVlczYvNgAvYmx1ZXM3LzEAL2JsdWVzNy8yAC9ibHVlczcvMwAvYmx1ZXM3LzQAL2JsdWVzNy81AC9ibHVlczcvNgAvYmx1ZXM3LzcAL2JsdWVzOC8xAC9ibHVlczgvMgAvYmx1ZXM4LzMAL2JsdWVzOC80AC9ibHVlczgvNQAvYmx1ZXM4LzYAL2JsdWVzOC83AC9ibHVlczgvOAAvYmx1ZXM5LzEAL2JsdWVzOS8yAC9ibHVlczkvMwAvYmx1ZXM5LzQAL2JsdWVzOS81AC9ibHVlczkvNgAvYmx1ZXM5LzcAL2JsdWVzOS84AC9ibHVlczkvOQAvYnJiZzEwLzEAL2JyYmcxMC8xMAAvYnJiZzEwLzIAL2JyYmcxMC8zAC9icmJnMTAvNAAvYnJiZzEwLzUAL2JyYmcxMC82AC9icmJnMTAvNwAvYnJiZzEwLzgAL2JyYmcxMC85AC9icmJnMTEvMQAvYnJiZzExLzEwAC9icmJnMTEvMTEAL2JyYmcxMS8yAC9icmJnMTEvMwAvYnJiZzExLzQAL2JyYmcxMS81AC9icmJnMTEvNgAvYnJiZzExLzcAL2JyYmcxMS84AC9icmJnMTEvOQAvYnJiZzMvMQAvYnJiZzMvMgAvYnJiZzMvMwAvYnJiZzQvMQAvYnJiZzQvMgAvYnJiZzQvMwAvYnJiZzQvNAAvYnJiZzUvMQAvYnJiZzUvMgAvYnJiZzUvMwAvYnJiZzUvNAAvYnJiZzUvNQAvYnJiZzYvMQAvYnJiZzYvMgAvYnJiZzYvMwAvYnJiZzYvNAAvYnJiZzYvNQAvYnJiZzYvNgAvYnJiZzcvMQAvYnJiZzcvMgAvYnJiZzcvMwAvYnJiZzcvNAAvYnJiZzcvNQAvYnJiZzcvNgAvYnJiZzcvNwAvYnJiZzgvMQAvYnJiZzgvMgAvYnJiZzgvMwAvYnJiZzgvNAAvYnJiZzgvNQAvYnJiZzgvNgAvYnJiZzgvNwAvYnJiZzgvOAAvYnJiZzkvMQAvYnJiZzkvMgAvYnJiZzkvMwAvYnJiZzkvNAAvYnJiZzkvNQAvYnJiZzkvNgAvYnJiZzkvNwAvYnJiZzkvOAAvYnJiZzkvOQAvYnVnbjMvMQAvYnVnbjMvMgAvYnVnbjMvMwAvYnVnbjQvMQAvYnVnbjQvMgAvYnVnbjQvMwAvYnVnbjQvNAAvYnVnbjUvMQAvYnVnbjUvMgAvYnVnbjUvMwAvYnVnbjUvNAAvYnVnbjUvNQAvYnVnbjYvMQAvYnVnbjYvMgAvYnVnbjYvMwAvYnVnbjYvNAAvYnVnbjYvNQAvYnVnbjYvNgAvYnVnbjcvMQAvYnVnbjcvMgAvYnVnbjcvMwAvYnVnbjcvNAAvYnVnbjcvNQAvYnVnbjcvNgAvYnVnbjcvNwAvYnVnbjgvMQAvYnVnbjgvMgAvYnVnbjgvMwAvYnVnbjgvNAAvYnVnbjgvNQAvYnVnbjgvNgAvYnVnbjgvNwAvYnVnbjgvOAAvYnVnbjkvMQAvYnVnbjkvMgAvYnVnbjkvMwAvYnVnbjkvNAAvYnVnbjkvNQAvYnVnbjkvNgAvYnVnbjkvNwAvYnVnbjkvOAAvYnVnbjkvOQAvYnVwdTMvMQAvYnVwdTMvMgAvYnVwdTMvMwAvYnVwdTQvMQAvYnVwdTQvMgAvYnVwdTQvMwAvYnVwdTQvNAAvYnVwdTUvMQAvYnVwdTUvMgAvYnVwdTUvMwAvYnVwdTUvNAAvYnVwdTUvNQAvYnVwdTYvMQAvYnVwdTYvMgAvYnVwdTYvMwAvYnVwdTYvNAAvYnVwdTYvNQAvYnVwdTYvNgAvYnVwdTcvMQAvYnVwdTcvMgAvYnVwdTcvMwAvYnVwdTcvNAAvYnVwdTcvNQAvYnVwdTcvNgAvYnVwdTcvNwAvYnVwdTgvMQAvYnVwdTgvMgAvYnVwdTgvMwAvYnVwdTgvNAAvYnVwdTgvNQAvYnVwdTgvNgAvYnVwdTgvNwAvYnVwdTgvOAAvYnVwdTkvMQAvYnVwdTkvMgAvYnVwdTkvMwAvYnVwdTkvNAAvYnVwdTkvNQAvYnVwdTkvNgAvYnVwdTkvNwAvYnVwdTkvOAAvYnVwdTkvOQAvZGFyazIzLzEAL2RhcmsyMy8yAC9kYXJrMjMvMwAvZGFyazI0LzEAL2RhcmsyNC8yAC9kYXJrMjQvMwAvZGFyazI0LzQAL2RhcmsyNS8xAC9kYXJrMjUvMgAvZGFyazI1LzMAL2RhcmsyNS80AC9kYXJrMjUvNQAvZGFyazI2LzEAL2RhcmsyNi8yAC9kYXJrMjYvMwAvZGFyazI2LzQAL2RhcmsyNi81AC9kYXJrMjYvNgAvZGFyazI3LzEAL2RhcmsyNy8yAC9kYXJrMjcvMwAvZGFyazI3LzQAL2RhcmsyNy81AC9kYXJrMjcvNgAvZGFyazI3LzcAL2RhcmsyOC8xAC9kYXJrMjgvMgAvZGFyazI4LzMAL2RhcmsyOC80AC9kYXJrMjgvNQAvZGFyazI4LzYAL2RhcmsyOC83AC9kYXJrMjgvOAAvZ25idTMvMQAvZ25idTMvMgAvZ25idTMvMwAvZ25idTQvMQAvZ25idTQvMgAvZ25idTQvMwAvZ25idTQvNAAvZ25idTUvMQAvZ25idTUvMgAvZ25idTUvMwAvZ25idTUvNAAvZ25idTUvNQAvZ25idTYvMQAvZ25idTYvMgAvZ25idTYvMwAvZ25idTYvNAAvZ25idTYvNQAvZ25idTYvNgAvZ25idTcvMQAvZ25idTcvMgAvZ25idTcvMwAvZ25idTcvNAAvZ25idTcvNQAvZ25idTcvNgAvZ25idTcvNwAvZ25idTgvMQAvZ25idTgvMgAvZ25idTgvMwAvZ25idTgvNAAvZ25idTgvNQAvZ25idTgvNgAvZ25idTgvNwAvZ25idTgvOAAvZ25idTkvMQAvZ25idTkvMgAvZ25idTkvMwAvZ25idTkvNAAvZ25idTkvNQAvZ25idTkvNgAvZ25idTkvNwAvZ25idTkvOAAvZ25idTkvOQAvZ3JlZW5zMy8xAC9ncmVlbnMzLzIAL2dyZWVuczMvMwAvZ3JlZW5zNC8xAC9ncmVlbnM0LzIAL2dyZWVuczQvMwAvZ3JlZW5zNC80AC9ncmVlbnM1LzEAL2dyZWVuczUvMgAvZ3JlZW5zNS8zAC9ncmVlbnM1LzQAL2dyZWVuczUvNQAvZ3JlZW5zNi8xAC9ncmVlbnM2LzIAL2dyZWVuczYvMwAvZ3JlZW5zNi80AC9ncmVlbnM2LzUAL2dyZWVuczYvNgAvZ3JlZW5zNy8xAC9ncmVlbnM3LzIAL2dyZWVuczcvMwAvZ3JlZW5zNy80AC9ncmVlbnM3LzUAL2dyZWVuczcvNgAvZ3JlZW5zNy83AC9ncmVlbnM4LzEAL2dyZWVuczgvMgAvZ3JlZW5zOC8zAC9ncmVlbnM4LzQAL2dyZWVuczgvNQAvZ3JlZW5zOC82AC9ncmVlbnM4LzcAL2dyZWVuczgvOAAvZ3JlZW5zOS8xAC9ncmVlbnM5LzIAL2dyZWVuczkvMwAvZ3JlZW5zOS80AC9ncmVlbnM5LzUAL2dyZWVuczkvNgAvZ3JlZW5zOS83AC9ncmVlbnM5LzgAL2dyZWVuczkvOQAvZ3JleXMzLzEAL2dyZXlzMy8yAC9ncmV5czMvMwAvZ3JleXM0LzEAL2dyZXlzNC8yAC9ncmV5czQvMwAvZ3JleXM0LzQAL2dyZXlzNS8xAC9ncmV5czUvMgAvZ3JleXM1LzMAL2dyZXlzNS80AC9ncmV5czUvNQAvZ3JleXM2LzEAL2dyZXlzNi8yAC9ncmV5czYvMwAvZ3JleXM2LzQAL2dyZXlzNi81AC9ncmV5czYvNgAvZ3JleXM3LzEAL2dyZXlzNy8yAC9ncmV5czcvMwAvZ3JleXM3LzQAL2dyZXlzNy81AC9ncmV5czcvNgAvZ3JleXM3LzcAL2dyZXlzOC8xAC9ncmV5czgvMgAvZ3JleXM4LzMAL2dyZXlzOC80AC9ncmV5czgvNQAvZ3JleXM4LzYAL2dyZXlzOC83AC9ncmV5czgvOAAvZ3JleXM5LzEAL2dyZXlzOS8yAC9ncmV5czkvMwAvZ3JleXM5LzQAL2dyZXlzOS81AC9ncmV5czkvNgAvZ3JleXM5LzcAL2dyZXlzOS84AC9ncmV5czkvOQAvb3JhbmdlczMvMQAvb3JhbmdlczMvMgAvb3JhbmdlczMvMwAvb3JhbmdlczQvMQAvb3JhbmdlczQvMgAvb3JhbmdlczQvMwAvb3JhbmdlczQvNAAvb3JhbmdlczUvMQAvb3JhbmdlczUvMgAvb3JhbmdlczUvMwAvb3JhbmdlczUvNAAvb3JhbmdlczUvNQAvb3JhbmdlczYvMQAvb3JhbmdlczYvMgAvb3JhbmdlczYvMwAvb3JhbmdlczYvNAAvb3JhbmdlczYvNQAvb3JhbmdlczYvNgAvb3JhbmdlczcvMQAvb3JhbmdlczcvMgAvb3JhbmdlczcvMwAvb3JhbmdlczcvNAAvb3JhbmdlczcvNQAvb3JhbmdlczcvNgAvb3JhbmdlczcvNwAvb3JhbmdlczgvMQAvb3JhbmdlczgvMgAvb3JhbmdlczgvMwAvb3JhbmdlczgvNAAvb3JhbmdlczgvNQAvb3JhbmdlczgvNgAvb3JhbmdlczgvNwAvb3JhbmdlczgvOAAvb3JhbmdlczkvMQAvb3JhbmdlczkvMgAvb3JhbmdlczkvMwAvb3JhbmdlczkvNAAvb3JhbmdlczkvNQAvb3JhbmdlczkvNgAvb3JhbmdlczkvNwAvb3JhbmdlczkvOAAvb3JhbmdlczkvOQAvb3JyZDMvMQAvb3JyZDMvMgAvb3JyZDMvMwAvb3JyZDQvMQAvb3JyZDQvMgAvb3JyZDQvMwAvb3JyZDQvNAAvb3JyZDUvMQAvb3JyZDUvMgAvb3JyZDUvMwAvb3JyZDUvNAAvb3JyZDUvNQAvb3JyZDYvMQAvb3JyZDYvMgAvb3JyZDYvMwAvb3JyZDYvNAAvb3JyZDYvNQAvb3JyZDYvNgAvb3JyZDcvMQAvb3JyZDcvMgAvb3JyZDcvMwAvb3JyZDcvNAAvb3JyZDcvNQAvb3JyZDcvNgAvb3JyZDcvNwAvb3JyZDgvMQAvb3JyZDgvMgAvb3JyZDgvMwAvb3JyZDgvNAAvb3JyZDgvNQAvb3JyZDgvNgAvb3JyZDgvNwAvb3JyZDgvOAAvb3JyZDkvMQAvb3JyZDkvMgAvb3JyZDkvMwAvb3JyZDkvNAAvb3JyZDkvNQAvb3JyZDkvNgAvb3JyZDkvNwAvb3JyZDkvOAAvb3JyZDkvOQAvcGFpcmVkMTAvMQAvcGFpcmVkMTAvMTAAL3BhaXJlZDEwLzIAL3BhaXJlZDEwLzMAL3BhaXJlZDEwLzQAL3BhaXJlZDEwLzUAL3BhaXJlZDEwLzYAL3BhaXJlZDEwLzcAL3BhaXJlZDEwLzgAL3BhaXJlZDEwLzkAL3BhaXJlZDExLzEAL3BhaXJlZDExLzEwAC9wYWlyZWQxMS8xMQAvcGFpcmVkMTEvMgAvcGFpcmVkMTEvMwAvcGFpcmVkMTEvNAAvcGFpcmVkMTEvNQAvcGFpcmVkMTEvNgAvcGFpcmVkMTEvNwAvcGFpcmVkMTEvOAAvcGFpcmVkMTEvOQAvcGFpcmVkMTIvMQAvcGFpcmVkMTIvMTAAL3BhaXJlZDEyLzExAC9wYWlyZWQxMi8xMgAvcGFpcmVkMTIvMgAvcGFpcmVkMTIvMwAvcGFpcmVkMTIvNAAvcGFpcmVkMTIvNQAvcGFpcmVkMTIvNgAvcGFpcmVkMTIvNwAvcGFpcmVkMTIvOAAvcGFpcmVkMTIvOQAvcGFpcmVkMy8xAC9wYWlyZWQzLzIAL3BhaXJlZDMvMwAvcGFpcmVkNC8xAC9wYWlyZWQ0LzIAL3BhaXJlZDQvMwAvcGFpcmVkNC80AC9wYWlyZWQ1LzEAL3BhaXJlZDUvMgAvcGFpcmVkNS8zAC9wYWlyZWQ1LzQAL3BhaXJlZDUvNQAvcGFpcmVkNi8xAC9wYWlyZWQ2LzIAL3BhaXJlZDYvMwAvcGFpcmVkNi80AC9wYWlyZWQ2LzUAL3BhaXJlZDYvNgAvcGFpcmVkNy8xAC9wYWlyZWQ3LzIAL3BhaXJlZDcvMwAvcGFpcmVkNy80AC9wYWlyZWQ3LzUAL3BhaXJlZDcvNgAvcGFpcmVkNy83AC9wYWlyZWQ4LzEAL3BhaXJlZDgvMgAvcGFpcmVkOC8zAC9wYWlyZWQ4LzQAL3BhaXJlZDgvNQAvcGFpcmVkOC82AC9wYWlyZWQ4LzcAL3BhaXJlZDgvOAAvcGFpcmVkOS8xAC9wYWlyZWQ5LzIAL3BhaXJlZDkvMwAvcGFpcmVkOS80AC9wYWlyZWQ5LzUAL3BhaXJlZDkvNgAvcGFpcmVkOS83AC9wYWlyZWQ5LzgAL3BhaXJlZDkvOQAvcGFzdGVsMTMvMQAvcGFzdGVsMTMvMgAvcGFzdGVsMTMvMwAvcGFzdGVsMTQvMQAvcGFzdGVsMTQvMgAvcGFzdGVsMTQvMwAvcGFzdGVsMTQvNAAvcGFzdGVsMTUvMQAvcGFzdGVsMTUvMgAvcGFzdGVsMTUvMwAvcGFzdGVsMTUvNAAvcGFzdGVsMTUvNQAvcGFzdGVsMTYvMQAvcGFzdGVsMTYvMgAvcGFzdGVsMTYvMwAvcGFzdGVsMTYvNAAvcGFzdGVsMTYvNQAvcGFzdGVsMTYvNgAvcGFzdGVsMTcvMQAvcGFzdGVsMTcvMgAvcGFzdGVsMTcvMwAvcGFzdGVsMTcvNAAvcGFzdGVsMTcvNQAvcGFzdGVsMTcvNgAvcGFzdGVsMTcvNwAvcGFzdGVsMTgvMQAvcGFzdGVsMTgvMgAvcGFzdGVsMTgvMwAvcGFzdGVsMTgvNAAvcGFzdGVsMTgvNQAvcGFzdGVsMTgvNgAvcGFzdGVsMTgvNwAvcGFzdGVsMTgvOAAvcGFzdGVsMTkvMQAvcGFzdGVsMTkvMgAvcGFzdGVsMTkvMwAvcGFzdGVsMTkvNAAvcGFzdGVsMTkvNQAvcGFzdGVsMTkvNgAvcGFzdGVsMTkvNwAvcGFzdGVsMTkvOAAvcGFzdGVsMTkvOQAvcGFzdGVsMjMvMQAvcGFzdGVsMjMvMgAvcGFzdGVsMjMvMwAvcGFzdGVsMjQvMQAvcGFzdGVsMjQvMgAvcGFzdGVsMjQvMwAvcGFzdGVsMjQvNAAvcGFzdGVsMjUvMQAvcGFzdGVsMjUvMgAvcGFzdGVsMjUvMwAvcGFzdGVsMjUvNAAvcGFzdGVsMjUvNQAvcGFzdGVsMjYvMQAvcGFzdGVsMjYvMgAvcGFzdGVsMjYvMwAvcGFzdGVsMjYvNAAvcGFzdGVsMjYvNQAvcGFzdGVsMjYvNgAvcGFzdGVsMjcvMQAvcGFzdGVsMjcvMgAvcGFzdGVsMjcvMwAvcGFzdGVsMjcvNAAvcGFzdGVsMjcvNQAvcGFzdGVsMjcvNgAvcGFzdGVsMjcvNwAvcGFzdGVsMjgvMQAvcGFzdGVsMjgvMgAvcGFzdGVsMjgvMwAvcGFzdGVsMjgvNAAvcGFzdGVsMjgvNQAvcGFzdGVsMjgvNgAvcGFzdGVsMjgvNwAvcGFzdGVsMjgvOAAvcGl5ZzEwLzEAL3BpeWcxMC8xMAAvcGl5ZzEwLzIAL3BpeWcxMC8zAC9waXlnMTAvNAAvcGl5ZzEwLzUAL3BpeWcxMC82AC9waXlnMTAvNwAvcGl5ZzEwLzgAL3BpeWcxMC85AC9waXlnMTEvMQAvcGl5ZzExLzEwAC9waXlnMTEvMTEAL3BpeWcxMS8yAC9waXlnMTEvMwAvcGl5ZzExLzQAL3BpeWcxMS81AC9waXlnMTEvNgAvcGl5ZzExLzcAL3BpeWcxMS84AC9waXlnMTEvOQAvcGl5ZzMvMQAvcGl5ZzMvMgAvcGl5ZzMvMwAvcGl5ZzQvMQAvcGl5ZzQvMgAvcGl5ZzQvMwAvcGl5ZzQvNAAvcGl5ZzUvMQAvcGl5ZzUvMgAvcGl5ZzUvMwAvcGl5ZzUvNAAvcGl5ZzUvNQAvcGl5ZzYvMQAvcGl5ZzYvMgAvcGl5ZzYvMwAvcGl5ZzYvNAAvcGl5ZzYvNQAvcGl5ZzYvNgAvcGl5ZzcvMQAvcGl5ZzcvMgAvcGl5ZzcvMwAvcGl5ZzcvNAAvcGl5ZzcvNQAvcGl5ZzcvNgAvcGl5ZzcvNwAvcGl5ZzgvMQAvcGl5ZzgvMgAvcGl5ZzgvMwAvcGl5ZzgvNAAvcGl5ZzgvNQAvcGl5ZzgvNgAvcGl5ZzgvNwAvcGl5ZzgvOAAvcGl5ZzkvMQAvcGl5ZzkvMgAvcGl5ZzkvMwAvcGl5ZzkvNAAvcGl5ZzkvNQAvcGl5ZzkvNgAvcGl5ZzkvNwAvcGl5ZzkvOAAvcGl5ZzkvOQAvcHJnbjEwLzEAL3ByZ24xMC8xMAAvcHJnbjEwLzIAL3ByZ24xMC8zAC9wcmduMTAvNAAvcHJnbjEwLzUAL3ByZ24xMC82AC9wcmduMTAvNwAvcHJnbjEwLzgAL3ByZ24xMC85AC9wcmduMTEvMQAvcHJnbjExLzEwAC9wcmduMTEvMTEAL3ByZ24xMS8yAC9wcmduMTEvMwAvcHJnbjExLzQAL3ByZ24xMS81AC9wcmduMTEvNgAvcHJnbjExLzcAL3ByZ24xMS84AC9wcmduMTEvOQAvcHJnbjMvMQAvcHJnbjMvMgAvcHJnbjMvMwAvcHJnbjQvMQAvcHJnbjQvMgAvcHJnbjQvMwAvcHJnbjQvNAAvcHJnbjUvMQAvcHJnbjUvMgAvcHJnbjUvMwAvcHJnbjUvNAAvcHJnbjUvNQAvcHJnbjYvMQAvcHJnbjYvMgAvcHJnbjYvMwAvcHJnbjYvNAAvcHJnbjYvNQAvcHJnbjYvNgAvcHJnbjcvMQAvcHJnbjcvMgAvcHJnbjcvMwAvcHJnbjcvNAAvcHJnbjcvNQAvcHJnbjcvNgAvcHJnbjcvNwAvcHJnbjgvMQAvcHJnbjgvMgAvcHJnbjgvMwAvcHJnbjgvNAAvcHJnbjgvNQAvcHJnbjgvNgAvcHJnbjgvNwAvcHJnbjgvOAAvcHJnbjkvMQAvcHJnbjkvMgAvcHJnbjkvMwAvcHJnbjkvNAAvcHJnbjkvNQAvcHJnbjkvNgAvcHJnbjkvNwAvcHJnbjkvOAAvcHJnbjkvOQAvcHVidTMvMQAvcHVidTMvMgAvcHVidTMvMwAvcHVidTQvMQAvcHVidTQvMgAvcHVidTQvMwAvcHVidTQvNAAvcHVidTUvMQAvcHVidTUvMgAvcHVidTUvMwAvcHVidTUvNAAvcHVidTUvNQAvcHVidTYvMQAvcHVidTYvMgAvcHVidTYvMwAvcHVidTYvNAAvcHVidTYvNQAvcHVidTYvNgAvcHVidTcvMQAvcHVidTcvMgAvcHVidTcvMwAvcHVidTcvNAAvcHVidTcvNQAvcHVidTcvNgAvcHVidTcvNwAvcHVidTgvMQAvcHVidTgvMgAvcHVidTgvMwAvcHVidTgvNAAvcHVidTgvNQAvcHVidTgvNgAvcHVidTgvNwAvcHVidTgvOAAvcHVidTkvMQAvcHVidTkvMgAvcHVidTkvMwAvcHVidTkvNAAvcHVidTkvNQAvcHVidTkvNgAvcHVidTkvNwAvcHVidTkvOAAvcHVidTkvOQAvcHVidWduMy8xAC9wdWJ1Z24zLzIAL3B1YnVnbjMvMwAvcHVidWduNC8xAC9wdWJ1Z240LzIAL3B1YnVnbjQvMwAvcHVidWduNC80AC9wdWJ1Z241LzEAL3B1YnVnbjUvMgAvcHVidWduNS8zAC9wdWJ1Z241LzQAL3B1YnVnbjUvNQAvcHVidWduNi8xAC9wdWJ1Z242LzIAL3B1YnVnbjYvMwAvcHVidWduNi80AC9wdWJ1Z242LzUAL3B1YnVnbjYvNgAvcHVidWduNy8xAC9wdWJ1Z243LzIAL3B1YnVnbjcvMwAvcHVidWduNy80AC9wdWJ1Z243LzUAL3B1YnVnbjcvNgAvcHVidWduNy83AC9wdWJ1Z244LzEAL3B1YnVnbjgvMgAvcHVidWduOC8zAC9wdWJ1Z244LzQAL3B1YnVnbjgvNQAvcHVidWduOC82AC9wdWJ1Z244LzcAL3B1YnVnbjgvOAAvcHVidWduOS8xAC9wdWJ1Z245LzIAL3B1YnVnbjkvMwAvcHVidWduOS80AC9wdWJ1Z245LzUAL3B1YnVnbjkvNgAvcHVidWduOS83AC9wdWJ1Z245LzgAL3B1YnVnbjkvOQAvcHVvcjEwLzEAL3B1b3IxMC8xMAAvcHVvcjEwLzIAL3B1b3IxMC8zAC9wdW9yMTAvNAAvcHVvcjEwLzUAL3B1b3IxMC82AC9wdW9yMTAvNwAvcHVvcjEwLzgAL3B1b3IxMC85AC9wdW9yMTEvMQAvcHVvcjExLzEwAC9wdW9yMTEvMTEAL3B1b3IxMS8yAC9wdW9yMTEvMwAvcHVvcjExLzQAL3B1b3IxMS81AC9wdW9yMTEvNgAvcHVvcjExLzcAL3B1b3IxMS84AC9wdW9yMTEvOQAvcHVvcjMvMQAvcHVvcjMvMgAvcHVvcjMvMwAvcHVvcjQvMQAvcHVvcjQvMgAvcHVvcjQvMwAvcHVvcjQvNAAvcHVvcjUvMQAvcHVvcjUvMgAvcHVvcjUvMwAvcHVvcjUvNAAvcHVvcjUvNQAvcHVvcjYvMQAvcHVvcjYvMgAvcHVvcjYvMwAvcHVvcjYvNAAvcHVvcjYvNQAvcHVvcjYvNgAvcHVvcjcvMQAvcHVvcjcvMgAvcHVvcjcvMwAvcHVvcjcvNAAvcHVvcjcvNQAvcHVvcjcvNgAvcHVvcjcvNwAvcHVvcjgvMQAvcHVvcjgvMgAvcHVvcjgvMwAvcHVvcjgvNAAvcHVvcjgvNQAvcHVvcjgvNgAvcHVvcjgvNwAvcHVvcjgvOAAvcHVvcjkvMQAvcHVvcjkvMgAvcHVvcjkvMwAvcHVvcjkvNAAvcHVvcjkvNQAvcHVvcjkvNgAvcHVvcjkvNwAvcHVvcjkvOAAvcHVvcjkvOQAvcHVyZDMvMQAvcHVyZDMvMgAvcHVyZDMvMwAvcHVyZDQvMQAvcHVyZDQvMgAvcHVyZDQvMwAvcHVyZDQvNAAvcHVyZDUvMQAvcHVyZDUvMgAvcHVyZDUvMwAvcHVyZDUvNAAvcHVyZDUvNQAvcHVyZDYvMQAvcHVyZDYvMgAvcHVyZDYvMwAvcHVyZDYvNAAvcHVyZDYvNQAvcHVyZDYvNgAvcHVyZDcvMQAvcHVyZDcvMgAvcHVyZDcvMwAvcHVyZDcvNAAvcHVyZDcvNQAvcHVyZDcvNgAvcHVyZDcvNwAvcHVyZDgvMQAvcHVyZDgvMgAvcHVyZDgvMwAvcHVyZDgvNAAvcHVyZDgvNQAvcHVyZDgvNgAvcHVyZDgvNwAvcHVyZDgvOAAvcHVyZDkvMQAvcHVyZDkvMgAvcHVyZDkvMwAvcHVyZDkvNAAvcHVyZDkvNQAvcHVyZDkvNgAvcHVyZDkvNwAvcHVyZDkvOAAvcHVyZDkvOQAvcHVycGxlczMvMQAvcHVycGxlczMvMgAvcHVycGxlczMvMwAvcHVycGxlczQvMQAvcHVycGxlczQvMgAvcHVycGxlczQvMwAvcHVycGxlczQvNAAvcHVycGxlczUvMQAvcHVycGxlczUvMgAvcHVycGxlczUvMwAvcHVycGxlczUvNAAvcHVycGxlczUvNQAvcHVycGxlczYvMQAvcHVycGxlczYvMgAvcHVycGxlczYvMwAvcHVycGxlczYvNAAvcHVycGxlczYvNQAvcHVycGxlczYvNgAvcHVycGxlczcvMQAvcHVycGxlczcvMgAvcHVycGxlczcvMwAvcHVycGxlczcvNAAvcHVycGxlczcvNQAvcHVycGxlczcvNgAvcHVycGxlczcvNwAvcHVycGxlczgvMQAvcHVycGxlczgvMgAvcHVycGxlczgvMwAvcHVycGxlczgvNAAvcHVycGxlczgvNQAvcHVycGxlczgvNgAvcHVycGxlczgvNwAvcHVycGxlczgvOAAvcHVycGxlczkvMQAvcHVycGxlczkvMgAvcHVycGxlczkvMwAvcHVycGxlczkvNAAvcHVycGxlczkvNQAvcHVycGxlczkvNgAvcHVycGxlczkvNwAvcHVycGxlczkvOAAvcHVycGxlczkvOQAvcmRidTEwLzEAL3JkYnUxMC8xMAAvcmRidTEwLzIAL3JkYnUxMC8zAC9yZGJ1MTAvNAAvcmRidTEwLzUAL3JkYnUxMC82AC9yZGJ1MTAvNwAvcmRidTEwLzgAL3JkYnUxMC85AC9yZGJ1MTEvMQAvcmRidTExLzEwAC9yZGJ1MTEvMTEAL3JkYnUxMS8yAC9yZGJ1MTEvMwAvcmRidTExLzQAL3JkYnUxMS81AC9yZGJ1MTEvNgAvcmRidTExLzcAL3JkYnUxMS84AC9yZGJ1MTEvOQAvcmRidTMvMQAvcmRidTMvMgAvcmRidTMvMwAvcmRidTQvMQAvcmRidTQvMgAvcmRidTQvMwAvcmRidTQvNAAvcmRidTUvMQAvcmRidTUvMgAvcmRidTUvMwAvcmRidTUvNAAvcmRidTUvNQAvcmRidTYvMQAvcmRidTYvMgAvcmRidTYvMwAvcmRidTYvNAAvcmRidTYvNQAvcmRidTYvNgAvcmRidTcvMQAvcmRidTcvMgAvcmRidTcvMwAvcmRidTcvNAAvcmRidTcvNQAvcmRidTcvNgAvcmRidTcvNwAvcmRidTgvMQAvcmRidTgvMgAvcmRidTgvMwAvcmRidTgvNAAvcmRidTgvNQAvcmRidTgvNgAvcmRidTgvNwAvcmRidTgvOAAvcmRidTkvMQAvcmRidTkvMgAvcmRidTkvMwAvcmRidTkvNAAvcmRidTkvNQAvcmRidTkvNgAvcmRidTkvNwAvcmRidTkvOAAvcmRidTkvOQAvcmRneTEwLzEAL3JkZ3kxMC8xMAAvcmRneTEwLzIAL3JkZ3kxMC8zAC9yZGd5MTAvNAAvcmRneTEwLzUAL3JkZ3kxMC82AC9yZGd5MTAvNwAvcmRneTEwLzgAL3JkZ3kxMC85AC9yZGd5MTEvMQAvcmRneTExLzEwAC9yZGd5MTEvMTEAL3JkZ3kxMS8yAC9yZGd5MTEvMwAvcmRneTExLzQAL3JkZ3kxMS81AC9yZGd5MTEvNgAvcmRneTExLzcAL3JkZ3kxMS84AC9yZGd5MTEvOQAvcmRneTMvMQAvcmRneTMvMgAvcmRneTMvMwAvcmRneTQvMQAvcmRneTQvMgAvcmRneTQvMwAvcmRneTQvNAAvcmRneTUvMQAvcmRneTUvMgAvcmRneTUvMwAvcmRneTUvNAAvcmRneTUvNQAvcmRneTYvMQAvcmRneTYvMgAvcmRneTYvMwAvcmRneTYvNAAvcmRneTYvNQAvcmRneTYvNgAvcmRneTcvMQAvcmRneTcvMgAvcmRneTcvMwAvcmRneTcvNAAvcmRneTcvNQAvcmRneTcvNgAvcmRneTcvNwAvcmRneTgvMQAvcmRneTgvMgAvcmRneTgvMwAvcmRneTgvNAAvcmRneTgvNQAvcmRneTgvNgAvcmRneTgvNwAvcmRneTgvOAAvcmRneTkvMQAvcmRneTkvMgAvcmRneTkvMwAvcmRneTkvNAAvcmRneTkvNQAvcmRneTkvNgAvcmRneTkvNwAvcmRneTkvOAAvcmRneTkvOQAvcmRwdTMvMQAvcmRwdTMvMgAvcmRwdTMvMwAvcmRwdTQvMQAvcmRwdTQvMgAvcmRwdTQvMwAvcmRwdTQvNAAvcmRwdTUvMQAvcmRwdTUvMgAvcmRwdTUvMwAvcmRwdTUvNAAvcmRwdTUvNQAvcmRwdTYvMQAvcmRwdTYvMgAvcmRwdTYvMwAvcmRwdTYvNAAvcmRwdTYvNQAvcmRwdTYvNgAvcmRwdTcvMQAvcmRwdTcvMgAvcmRwdTcvMwAvcmRwdTcvNAAvcmRwdTcvNQAvcmRwdTcvNgAvcmRwdTcvNwAvcmRwdTgvMQAvcmRwdTgvMgAvcmRwdTgvMwAvcmRwdTgvNAAvcmRwdTgvNQAvcmRwdTgvNgAvcmRwdTgvNwAvcmRwdTgvOAAvcmRwdTkvMQAvcmRwdTkvMgAvcmRwdTkvMwAvcmRwdTkvNAAvcmRwdTkvNQAvcmRwdTkvNgAvcmRwdTkvNwAvcmRwdTkvOAAvcmRwdTkvOQAvcmR5bGJ1MTAvMQAvcmR5bGJ1MTAvMTAAL3JkeWxidTEwLzIAL3JkeWxidTEwLzMAL3JkeWxidTEwLzQAL3JkeWxidTEwLzUAL3JkeWxidTEwLzYAL3JkeWxidTEwLzcAL3JkeWxidTEwLzgAL3JkeWxidTEwLzkAL3JkeWxidTExLzEAL3JkeWxidTExLzEwAC9yZHlsYnUxMS8xMQAvcmR5bGJ1MTEvMgAvcmR5bGJ1MTEvMwAvcmR5bGJ1MTEvNAAvcmR5bGJ1MTEvNQAvcmR5bGJ1MTEvNgAvcmR5bGJ1MTEvNwAvcmR5bGJ1MTEvOAAvcmR5bGJ1MTEvOQAvcmR5bGJ1My8xAC9yZHlsYnUzLzIAL3JkeWxidTMvMwAvcmR5bGJ1NC8xAC9yZHlsYnU0LzIAL3JkeWxidTQvMwAvcmR5bGJ1NC80AC9yZHlsYnU1LzEAL3JkeWxidTUvMgAvcmR5bGJ1NS8zAC9yZHlsYnU1LzQAL3JkeWxidTUvNQAvcmR5bGJ1Ni8xAC9yZHlsYnU2LzIAL3JkeWxidTYvMwAvcmR5bGJ1Ni80AC9yZHlsYnU2LzUAL3JkeWxidTYvNgAvcmR5bGJ1Ny8xAC9yZHlsYnU3LzIAL3JkeWxidTcvMwAvcmR5bGJ1Ny80AC9yZHlsYnU3LzUAL3JkeWxidTcvNgAvcmR5bGJ1Ny83AC9yZHlsYnU4LzEAL3JkeWxidTgvMgAvcmR5bGJ1OC8zAC9yZHlsYnU4LzQAL3JkeWxidTgvNQAvcmR5bGJ1OC82AC9yZHlsYnU4LzcAL3JkeWxidTgvOAAvcmR5bGJ1OS8xAC9yZHlsYnU5LzIAL3JkeWxidTkvMwAvcmR5bGJ1OS80AC9yZHlsYnU5LzUAL3JkeWxidTkvNgAvcmR5bGJ1OS83AC9yZHlsYnU5LzgAL3JkeWxidTkvOQAvcmR5bGduMTAvMQAvcmR5bGduMTAvMTAAL3JkeWxnbjEwLzIAL3JkeWxnbjEwLzMAL3JkeWxnbjEwLzQAL3JkeWxnbjEwLzUAL3JkeWxnbjEwLzYAL3JkeWxnbjEwLzcAL3JkeWxnbjEwLzgAL3JkeWxnbjEwLzkAL3JkeWxnbjExLzEAL3JkeWxnbjExLzEwAC9yZHlsZ24xMS8xMQAvcmR5bGduMTEvMgAvcmR5bGduMTEvMwAvcmR5bGduMTEvNAAvcmR5bGduMTEvNQAvcmR5bGduMTEvNgAvcmR5bGduMTEvNwAvcmR5bGduMTEvOAAvcmR5bGduMTEvOQAvcmR5bGduMy8xAC9yZHlsZ24zLzIAL3JkeWxnbjMvMwAvcmR5bGduNC8xAC9yZHlsZ240LzIAL3JkeWxnbjQvMwAvcmR5bGduNC80AC9yZHlsZ241LzEAL3JkeWxnbjUvMgAvcmR5bGduNS8zAC9yZHlsZ241LzQAL3JkeWxnbjUvNQAvcmR5bGduNi8xAC9yZHlsZ242LzIAL3JkeWxnbjYvMwAvcmR5bGduNi80AC9yZHlsZ242LzUAL3JkeWxnbjYvNgAvcmR5bGduNy8xAC9yZHlsZ243LzIAL3JkeWxnbjcvMwAvcmR5bGduNy80AC9yZHlsZ243LzUAL3JkeWxnbjcvNgAvcmR5bGduNy83AC9yZHlsZ244LzEAL3JkeWxnbjgvMgAvcmR5bGduOC8zAC9yZHlsZ244LzQAL3JkeWxnbjgvNQAvcmR5bGduOC82AC9yZHlsZ244LzcAL3JkeWxnbjgvOAAvcmR5bGduOS8xAC9yZHlsZ245LzIAL3JkeWxnbjkvMwAvcmR5bGduOS80AC9yZHlsZ245LzUAL3JkeWxnbjkvNgAvcmR5bGduOS83AC9yZHlsZ245LzgAL3JkeWxnbjkvOQAvcmVkczMvMQAvcmVkczMvMgAvcmVkczMvMwAvcmVkczQvMQAvcmVkczQvMgAvcmVkczQvMwAvcmVkczQvNAAvcmVkczUvMQAvcmVkczUvMgAvcmVkczUvMwAvcmVkczUvNAAvcmVkczUvNQAvcmVkczYvMQAvcmVkczYvMgAvcmVkczYvMwAvcmVkczYvNAAvcmVkczYvNQAvcmVkczYvNgAvcmVkczcvMQAvcmVkczcvMgAvcmVkczcvMwAvcmVkczcvNAAvcmVkczcvNQAvcmVkczcvNgAvcmVkczcvNwAvcmVkczgvMQAvcmVkczgvMgAvcmVkczgvMwAvcmVkczgvNAAvcmVkczgvNQAvcmVkczgvNgAvcmVkczgvNwAvcmVkczgvOAAvcmVkczkvMQAvcmVkczkvMgAvcmVkczkvMwAvcmVkczkvNAAvcmVkczkvNQAvcmVkczkvNgAvcmVkczkvNwAvcmVkczkvOAAvcmVkczkvOQAvc2V0MTMvMQAvc2V0MTMvMgAvc2V0MTMvMwAvc2V0MTQvMQAvc2V0MTQvMgAvc2V0MTQvMwAvc2V0MTQvNAAvc2V0MTUvMQAvc2V0MTUvMgAvc2V0MTUvMwAvc2V0MTUvNAAvc2V0MTUvNQAvc2V0MTYvMQAvc2V0MTYvMgAvc2V0MTYvMwAvc2V0MTYvNAAvc2V0MTYvNQAvc2V0MTYvNgAvc2V0MTcvMQAvc2V0MTcvMgAvc2V0MTcvMwAvc2V0MTcvNAAvc2V0MTcvNQAvc2V0MTcvNgAvc2V0MTcvNwAvc2V0MTgvMQAvc2V0MTgvMgAvc2V0MTgvMwAvc2V0MTgvNAAvc2V0MTgvNQAvc2V0MTgvNgAvc2V0MTgvNwAvc2V0MTgvOAAvc2V0MTkvMQAvc2V0MTkvMgAvc2V0MTkvMwAvc2V0MTkvNAAvc2V0MTkvNQAvc2V0MTkvNgAvc2V0MTkvNwAvc2V0MTkvOAAvc2V0MTkvOQAvc2V0MjMvMQAvc2V0MjMvMgAvc2V0MjMvMwAvc2V0MjQvMQAvc2V0MjQvMgAvc2V0MjQvMwAvc2V0MjQvNAAvc2V0MjUvMQAvc2V0MjUvMgAvc2V0MjUvMwAvc2V0MjUvNAAvc2V0MjUvNQAvc2V0MjYvMQAvc2V0MjYvMgAvc2V0MjYvMwAvc2V0MjYvNAAvc2V0MjYvNQAvc2V0MjYvNgAvc2V0MjcvMQAvc2V0MjcvMgAvc2V0MjcvMwAvc2V0MjcvNAAvc2V0MjcvNQAvc2V0MjcvNgAvc2V0MjcvNwAvc2V0MjgvMQAvc2V0MjgvMgAvc2V0MjgvMwAvc2V0MjgvNAAvc2V0MjgvNQAvc2V0MjgvNgAvc2V0MjgvNwAvc2V0MjgvOAAvc2V0MzEwLzEAL3NldDMxMC8xMAAvc2V0MzEwLzIAL3NldDMxMC8zAC9zZXQzMTAvNAAvc2V0MzEwLzUAL3NldDMxMC82AC9zZXQzMTAvNwAvc2V0MzEwLzgAL3NldDMxMC85AC9zZXQzMTEvMQAvc2V0MzExLzEwAC9zZXQzMTEvMTEAL3NldDMxMS8yAC9zZXQzMTEvMwAvc2V0MzExLzQAL3NldDMxMS81AC9zZXQzMTEvNgAvc2V0MzExLzcAL3NldDMxMS84AC9zZXQzMTEvOQAvc2V0MzEyLzEAL3NldDMxMi8xMAAvc2V0MzEyLzExAC9zZXQzMTIvMTIAL3NldDMxMi8yAC9zZXQzMTIvMwAvc2V0MzEyLzQAL3NldDMxMi81AC9zZXQzMTIvNgAvc2V0MzEyLzcAL3NldDMxMi84AC9zZXQzMTIvOQAvc2V0MzMvMQAvc2V0MzMvMgAvc2V0MzMvMwAvc2V0MzQvMQAvc2V0MzQvMgAvc2V0MzQvMwAvc2V0MzQvNAAvc2V0MzUvMQAvc2V0MzUvMgAvc2V0MzUvMwAvc2V0MzUvNAAvc2V0MzUvNQAvc2V0MzYvMQAvc2V0MzYvMgAvc2V0MzYvMwAvc2V0MzYvNAAvc2V0MzYvNQAvc2V0MzYvNgAvc2V0MzcvMQAvc2V0MzcvMgAvc2V0MzcvMwAvc2V0MzcvNAAvc2V0MzcvNQAvc2V0MzcvNgAvc2V0MzcvNwAvc2V0MzgvMQAvc2V0MzgvMgAvc2V0MzgvMwAvc2V0MzgvNAAvc2V0MzgvNQAvc2V0MzgvNgAvc2V0MzgvNwAvc2V0MzgvOAAvc2V0MzkvMQAvc2V0MzkvMgAvc2V0MzkvMwAvc2V0MzkvNAAvc2V0MzkvNQAvc2V0MzkvNgAvc2V0MzkvNwAvc2V0MzkvOAAvc2V0MzkvOQAvc3BlY3RyYWwxMC8xAC9zcGVjdHJhbDEwLzEwAC9zcGVjdHJhbDEwLzIAL3NwZWN0cmFsMTAvMwAvc3BlY3RyYWwxMC80AC9zcGVjdHJhbDEwLzUAL3NwZWN0cmFsMTAvNgAvc3BlY3RyYWwxMC83AC9zcGVjdHJhbDEwLzgAL3NwZWN0cmFsMTAvOQAvc3BlY3RyYWwxMS8xAC9zcGVjdHJhbDExLzEwAC9zcGVjdHJhbDExLzExAC9zcGVjdHJhbDExLzIAL3NwZWN0cmFsMTEvMwAvc3BlY3RyYWwxMS80AC9zcGVjdHJhbDExLzUAL3NwZWN0cmFsMTEvNgAvc3BlY3RyYWwxMS83AC9zcGVjdHJhbDExLzgAL3NwZWN0cmFsMTEvOQAvc3BlY3RyYWwzLzEAL3NwZWN0cmFsMy8yAC9zcGVjdHJhbDMvMwAvc3BlY3RyYWw0LzEAL3NwZWN0cmFsNC8yAC9zcGVjdHJhbDQvMwAvc3BlY3RyYWw0LzQAL3NwZWN0cmFsNS8xAC9zcGVjdHJhbDUvMgAvc3BlY3RyYWw1LzMAL3NwZWN0cmFsNS80AC9zcGVjdHJhbDUvNQAvc3BlY3RyYWw2LzEAL3NwZWN0cmFsNi8yAC9zcGVjdHJhbDYvMwAvc3BlY3RyYWw2LzQAL3NwZWN0cmFsNi81AC9zcGVjdHJhbDYvNgAvc3BlY3RyYWw3LzEAL3NwZWN0cmFsNy8yAC9zcGVjdHJhbDcvMwAvc3BlY3RyYWw3LzQAL3NwZWN0cmFsNy81AC9zcGVjdHJhbDcvNgAvc3BlY3RyYWw3LzcAL3NwZWN0cmFsOC8xAC9zcGVjdHJhbDgvMgAvc3BlY3RyYWw4LzMAL3NwZWN0cmFsOC80AC9zcGVjdHJhbDgvNQAvc3BlY3RyYWw4LzYAL3NwZWN0cmFsOC83AC9zcGVjdHJhbDgvOAAvc3BlY3RyYWw5LzEAL3NwZWN0cmFsOS8yAC9zcGVjdHJhbDkvMwAvc3BlY3RyYWw5LzQAL3NwZWN0cmFsOS81AC9zcGVjdHJhbDkvNgAvc3BlY3RyYWw5LzcAL3NwZWN0cmFsOS84AC9zcGVjdHJhbDkvOQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL2FxdWEAL3N2Zy9hcXVhbWFyaW5lAC9zdmcvYXp1cmUAL3N2Zy9iZWlnZQAvc3ZnL2Jpc3F1ZQAvc3ZnL2JsYWNrAC9zdmcvYmxhbmNoZWRhbG1vbmQAL3N2Zy9ibHVlAC9zdmcvYmx1ZXZpb2xldAAvc3ZnL2Jyb3duAC9zdmcvYnVybHl3b29kAC9zdmcvY2FkZXRibHVlAC9zdmcvY2hhcnRyZXVzZQAvc3ZnL2Nob2NvbGF0ZQAvc3ZnL2NvcmFsAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9jb3Juc2lsawAvc3ZnL2NyaW1zb24AL3N2Zy9jeWFuAC9zdmcvZGFya2JsdWUAL3N2Zy9kYXJrY3lhbgAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9kYXJrZ3JheQAvc3ZnL2RhcmtncmVlbgAvc3ZnL2RhcmtncmV5AC9zdmcvZGFya2toYWtpAC9zdmcvZGFya21hZ2VudGEAL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9kYXJrb3JjaGlkAC9zdmcvZGFya3JlZAAvc3ZnL2RhcmtzYWxtb24AL3N2Zy9kYXJrc2VhZ3JlZW4AL3N2Zy9kYXJrc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyZXkAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvZGFya3Zpb2xldAAvc3ZnL2RlZXBwaW5rAC9zdmcvZGVlcHNreWJsdWUAL3N2Zy9kaW1ncmF5AC9zdmcvZGltZ3JleQAvc3ZnL2RvZGdlcmJsdWUAL3N2Zy9maXJlYnJpY2sAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2ZvcmVzdGdyZWVuAC9zdmcvZnVjaHNpYQAvc3ZnL2dhaW5zYm9ybwAvc3ZnL2dob3N0d2hpdGUAL3N2Zy9nb2xkAC9zdmcvZ29sZGVucm9kAC9zdmcvZ3JheQAvc3ZnL2dyZWVuAC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9ncmV5AC9zdmcvaG9uZXlkZXcAL3N2Zy9ob3RwaW5rAC9zdmcvaW5kaWFucmVkAC9zdmcvaW5kaWdvAC9zdmcvaXZvcnkAL3N2Zy9raGFraQAvc3ZnL2xhdmVuZGVyAC9zdmcvbGF2ZW5kZXJibHVzaAAvc3ZnL2xhd25ncmVlbgAvc3ZnL2xlbW9uY2hpZmZvbgAvc3ZnL2xpZ2h0Ymx1ZQAvc3ZnL2xpZ2h0Y29yYWwAL3N2Zy9saWdodGN5YW4AL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL2xpZ2h0Z3JheQAvc3ZnL2xpZ2h0Z3JlZW4AL3N2Zy9saWdodGdyZXkAL3N2Zy9saWdodHBpbmsAL3N2Zy9saWdodHNhbG1vbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2xpZ2h0c2xhdGVncmV5AC9zdmcvbGlnaHRzdGVlbGJsdWUAL3N2Zy9saWdodHllbGxvdwAvc3ZnL2xpbWUAL3N2Zy9saW1lZ3JlZW4AL3N2Zy9saW5lbgAvc3ZnL21hZ2VudGEAL3N2Zy9tYXJvb24AL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvbWVkaXVtYmx1ZQAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL21lZGl1bXB1cnBsZQAvc3ZnL21lZGl1bXNlYWdyZWVuAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvbWVkaXVtc3ByaW5nZ3JlZW4AL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9taWRuaWdodGJsdWUAL3N2Zy9taW50Y3JlYW0AL3N2Zy9taXN0eXJvc2UAL3N2Zy9tb2NjYXNpbgAvc3ZnL25hdmFqb3doaXRlAC9zdmcvbmF2eQAvc3ZnL29sZGxhY2UAL3N2Zy9vbGl2ZQAvc3ZnL29saXZlZHJhYgAvc3ZnL29yYW5nZQAvc3ZnL29yYW5nZXJlZAAvc3ZnL29yY2hpZAAvc3ZnL3BhbGVnb2xkZW5yb2QAL3N2Zy9wYWxlZ3JlZW4AL3N2Zy9wYWxldHVycXVvaXNlAC9zdmcvcGFsZXZpb2xldHJlZAAvc3ZnL3BhcGF5YXdoaXAAL3N2Zy9wZWFjaHB1ZmYAL3N2Zy9wZXJ1AC9zdmcvcGluawAvc3ZnL3BsdW0AL3N2Zy9wb3dkZXJibHVlAC9zdmcvcHVycGxlAC9zdmcvcmVkAC9zdmcvcm9zeWJyb3duAC9zdmcvcm95YWxibHVlAC9zdmcvc2FkZGxlYnJvd24AL3N2Zy9zYWxtb24AL3N2Zy9zYW5keWJyb3duAC9zdmcvc2VhZ3JlZW4AL3N2Zy9zZWFzaGVsbAAvc3ZnL3NpZW5uYQAvc3ZnL3NpbHZlcgAvc3ZnL3NreWJsdWUAL3N2Zy9zbGF0ZWJsdWUAL3N2Zy9zbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyZXkAL3N2Zy9zbm93AC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9zdGVlbGJsdWUAL3N2Zy90YW4AL3N2Zy90ZWFsAC9zdmcvdGhpc3RsZQAvc3ZnL3RvbWF0bwAvc3ZnL3R1cnF1b2lzZQAvc3ZnL3Zpb2xldAAvc3ZnL3doZWF0AC9zdmcvd2hpdGUAL3N2Zy93aGl0ZXNtb2tlAC9zdmcveWVsbG93AC9zdmcveWVsbG93Z3JlZW4AL3lsZ24zLzEAL3lsZ24zLzIAL3lsZ24zLzMAL3lsZ240LzEAL3lsZ240LzIAL3lsZ240LzMAL3lsZ240LzQAL3lsZ241LzEAL3lsZ241LzIAL3lsZ241LzMAL3lsZ241LzQAL3lsZ241LzUAL3lsZ242LzEAL3lsZ242LzIAL3lsZ242LzMAL3lsZ242LzQAL3lsZ242LzUAL3lsZ242LzYAL3lsZ243LzEAL3lsZ243LzIAL3lsZ243LzMAL3lsZ243LzQAL3lsZ243LzUAL3lsZ243LzYAL3lsZ243LzcAL3lsZ244LzEAL3lsZ244LzIAL3lsZ244LzMAL3lsZ244LzQAL3lsZ244LzUAL3lsZ244LzYAL3lsZ244LzcAL3lsZ244LzgAL3lsZ245LzEAL3lsZ245LzIAL3lsZ245LzMAL3lsZ245LzQAL3lsZ245LzUAL3lsZ245LzYAL3lsZ245LzcAL3lsZ245LzgAL3lsZ245LzkAL3lsZ25idTMvMQAveWxnbmJ1My8yAC95bGduYnUzLzMAL3lsZ25idTQvMQAveWxnbmJ1NC8yAC95bGduYnU0LzMAL3lsZ25idTQvNAAveWxnbmJ1NS8xAC95bGduYnU1LzIAL3lsZ25idTUvMwAveWxnbmJ1NS80AC95bGduYnU1LzUAL3lsZ25idTYvMQAveWxnbmJ1Ni8yAC95bGduYnU2LzMAL3lsZ25idTYvNAAveWxnbmJ1Ni81AC95bGduYnU2LzYAL3lsZ25idTcvMQAveWxnbmJ1Ny8yAC95bGduYnU3LzMAL3lsZ25idTcvNAAveWxnbmJ1Ny81AC95bGduYnU3LzYAL3lsZ25idTcvNwAveWxnbmJ1OC8xAC95bGduYnU4LzIAL3lsZ25idTgvMwAveWxnbmJ1OC80AC95bGduYnU4LzUAL3lsZ25idTgvNgAveWxnbmJ1OC83AC95bGduYnU4LzgAL3lsZ25idTkvMQAveWxnbmJ1OS8yAC95bGduYnU5LzMAL3lsZ25idTkvNAAveWxnbmJ1OS81AC95bGduYnU5LzYAL3lsZ25idTkvNwAveWxnbmJ1OS84AC95bGduYnU5LzkAL3lsb3JicjMvMQAveWxvcmJyMy8yAC95bG9yYnIzLzMAL3lsb3JicjQvMQAveWxvcmJyNC8yAC95bG9yYnI0LzMAL3lsb3JicjQvNAAveWxvcmJyNS8xAC95bG9yYnI1LzIAL3lsb3JicjUvMwAveWxvcmJyNS80AC95bG9yYnI1LzUAL3lsb3JicjYvMQAveWxvcmJyNi8yAC95bG9yYnI2LzMAL3lsb3JicjYvNAAveWxvcmJyNi81AC95bG9yYnI2LzYAL3lsb3JicjcvMQAveWxvcmJyNy8yAC95bG9yYnI3LzMAL3lsb3JicjcvNAAveWxvcmJyNy81AC95bG9yYnI3LzYAL3lsb3JicjcvNwAveWxvcmJyOC8xAC95bG9yYnI4LzIAL3lsb3JicjgvMwAveWxvcmJyOC80AC95bG9yYnI4LzUAL3lsb3JicjgvNgAveWxvcmJyOC83AC95bG9yYnI4LzgAL3lsb3JicjkvMQAveWxvcmJyOS8yAC95bG9yYnI5LzMAL3lsb3JicjkvNAAveWxvcmJyOS81AC95bG9yYnI5LzYAL3lsb3JicjkvNwAveWxvcmJyOS84AC95bG9yYnI5LzkAL3lsb3JyZDMvMQAveWxvcnJkMy8yAC95bG9ycmQzLzMAL3lsb3JyZDQvMQAveWxvcnJkNC8yAC95bG9ycmQ0LzMAL3lsb3JyZDQvNAAveWxvcnJkNS8xAC95bG9ycmQ1LzIAL3lsb3JyZDUvMwAveWxvcnJkNS80AC95bG9ycmQ1LzUAL3lsb3JyZDYvMQAveWxvcnJkNi8yAC95bG9ycmQ2LzMAL3lsb3JyZDYvNAAveWxvcnJkNi81AC95bG9ycmQ2LzYAL3lsb3JyZDcvMQAveWxvcnJkNy8yAC95bG9ycmQ3LzMAL3lsb3JyZDcvNAAveWxvcnJkNy81AC95bG9ycmQ3LzYAL3lsb3JyZDcvNwAveWxvcnJkOC8xAC95bG9ycmQ4LzIAL3lsb3JyZDgvMwAveWxvcnJkOC80AC95bG9ycmQ4LzUAL3lsb3JyZDgvNgAveWxvcnJkOC83AC95bG9ycmQ4LzgAL3lsb3JyZDkvMQAveWxvcnJkOS8yAC95bG9ycmQ5LzMAL3lsb3JyZDkvNAAveWxvcnJkOS81AC95bG9ycmQ5LzYAL3lsb3JyZDkvNwAveWxvcnJkOS84AC95bG9ycmQ5LzkAYWxpY2VibHVlAGFudGlxdWV3aGl0ZQBhbnRpcXVld2hpdGUxAGFudGlxdWV3aGl0ZTIAYW50aXF1ZXdoaXRlMwBhbnRpcXVld2hpdGU0AGFxdWFtYXJpbmUAYXF1YW1hcmluZTEAYXF1YW1hcmluZTIAYXF1YW1hcmluZTMAYXF1YW1hcmluZTQAYXp1cmUAYXp1cmUxAGF6dXJlMgBhenVyZTMAYXp1cmU0AGJlaWdlAGJpc3F1ZQBiaXNxdWUxAGJpc3F1ZTIAYmlzcXVlMwBiaXNxdWU0AGJsYW5jaGVkYWxtb25kAGJsdWUAYmx1ZTEAYmx1ZTIAYmx1ZTMAYmx1ZTQAYmx1ZXZpb2xldABicm93bgBicm93bjEAYnJvd24yAGJyb3duMwBicm93bjQAYnVybHl3b29kAGJ1cmx5d29vZDEAYnVybHl3b29kMgBidXJseXdvb2QzAGJ1cmx5d29vZDQAY2FkZXRibHVlAGNhZGV0Ymx1ZTEAY2FkZXRibHVlMgBjYWRldGJsdWUzAGNhZGV0Ymx1ZTQAY2hhcnRyZXVzZQBjaGFydHJldXNlMQBjaGFydHJldXNlMgBjaGFydHJldXNlMwBjaGFydHJldXNlNABjaG9jb2xhdGUAY2hvY29sYXRlMQBjaG9jb2xhdGUyAGNob2NvbGF0ZTMAY2hvY29sYXRlNABjb3JhbABjb3JhbDEAY29yYWwyAGNvcmFsMwBjb3JhbDQAY29ybmZsb3dlcmJsdWUAY29ybnNpbGsAY29ybnNpbGsxAGNvcm5zaWxrMgBjb3Juc2lsazMAY29ybnNpbGs0AGNyaW1zb24AY3lhbgBjeWFuMQBjeWFuMgBjeWFuMwBjeWFuNABkYXJrZ29sZGVucm9kAGRhcmtnb2xkZW5yb2QxAGRhcmtnb2xkZW5yb2QyAGRhcmtnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2Q0AGRhcmtncmVlbgBkYXJra2hha2kAZGFya29saXZlZ3JlZW4AZGFya29saXZlZ3JlZW4xAGRhcmtvbGl2ZWdyZWVuMgBkYXJrb2xpdmVncmVlbjMAZGFya29saXZlZ3JlZW40AGRhcmtvcmFuZ2UAZGFya29yYW5nZTEAZGFya29yYW5nZTIAZGFya29yYW5nZTMAZGFya29yYW5nZTQAZGFya29yY2hpZABkYXJrb3JjaGlkMQBkYXJrb3JjaGlkMgBkYXJrb3JjaGlkMwBkYXJrb3JjaGlkNABkYXJrc2FsbW9uAGRhcmtzZWFncmVlbgBkYXJrc2VhZ3JlZW4xAGRhcmtzZWFncmVlbjIAZGFya3NlYWdyZWVuMwBkYXJrc2VhZ3JlZW40AGRhcmtzbGF0ZWJsdWUAZGFya3NsYXRlZ3JheQBkYXJrc2xhdGVncmF5MQBkYXJrc2xhdGVncmF5MgBkYXJrc2xhdGVncmF5MwBkYXJrc2xhdGVncmF5NABkYXJrc2xhdGVncmV5AGRhcmt0dXJxdW9pc2UAZGFya3Zpb2xldABkZWVwcGluawBkZWVwcGluazEAZGVlcHBpbmsyAGRlZXBwaW5rMwBkZWVwcGluazQAZGVlcHNreWJsdWUAZGVlcHNreWJsdWUxAGRlZXBza3libHVlMgBkZWVwc2t5Ymx1ZTMAZGVlcHNreWJsdWU0AGRpbWdyYXkAZGltZ3JleQBkb2RnZXJibHVlAGRvZGdlcmJsdWUxAGRvZGdlcmJsdWUyAGRvZGdlcmJsdWUzAGRvZGdlcmJsdWU0AGZpcmVicmljawBmaXJlYnJpY2sxAGZpcmVicmljazIAZmlyZWJyaWNrMwBmaXJlYnJpY2s0AGZsb3JhbHdoaXRlAGZvcmVzdGdyZWVuAGdhaW5zYm9ybwBnaG9zdHdoaXRlAGdvbGQAZ29sZDEAZ29sZDIAZ29sZDMAZ29sZDQAZ29sZGVucm9kAGdvbGRlbnJvZDEAZ29sZGVucm9kMgBnb2xkZW5yb2QzAGdvbGRlbnJvZDQAZ3JheQBncmF5MABncmF5MQBncmF5MTAAZ3JheTEwMABncmF5MTEAZ3JheTEyAGdyYXkxMwBncmF5MTQAZ3JheTE1AGdyYXkxNgBncmF5MTcAZ3JheTE4AGdyYXkxOQBncmF5MgBncmF5MjAAZ3JheTIxAGdyYXkyMgBncmF5MjMAZ3JheTI0AGdyYXkyNQBncmF5MjYAZ3JheTI3AGdyYXkyOABncmF5MjkAZ3JheTMAZ3JheTMwAGdyYXkzMQBncmF5MzIAZ3JheTMzAGdyYXkzNABncmF5MzUAZ3JheTM2AGdyYXkzNwBncmF5MzgAZ3JheTM5AGdyYXk0AGdyYXk0MABncmF5NDEAZ3JheTQyAGdyYXk0MwBncmF5NDQAZ3JheTQ1AGdyYXk0NgBncmF5NDcAZ3JheTQ4AGdyYXk0OQBncmF5NQBncmF5NTAAZ3JheTUxAGdyYXk1MgBncmF5NTMAZ3JheTU0AGdyYXk1NQBncmF5NTYAZ3JheTU3AGdyYXk1OABncmF5NTkAZ3JheTYAZ3JheTYwAGdyYXk2MQBncmF5NjIAZ3JheTYzAGdyYXk2NABncmF5NjUAZ3JheTY2AGdyYXk2NwBncmF5NjgAZ3JheTY5AGdyYXk3AGdyYXk3MABncmF5NzEAZ3JheTcyAGdyYXk3MwBncmF5NzQAZ3JheTc1AGdyYXk3NgBncmF5NzcAZ3JheTc4AGdyYXk3OQBncmF5OABncmF5ODAAZ3JheTgxAGdyYXk4MgBncmF5ODMAZ3JheTg0AGdyYXk4NQBncmF5ODYAZ3JheTg3AGdyYXk4OABncmF5ODkAZ3JheTkAZ3JheTkwAGdyYXk5MQBncmF5OTIAZ3JheTkzAGdyYXk5NABncmF5OTUAZ3JheTk2AGdyYXk5NwBncmF5OTgAZ3JheTk5AGdyZWVuAGdyZWVuMQBncmVlbjIAZ3JlZW4zAGdyZWVuNABncmVlbnllbGxvdwBncmV5AGdyZXkwAGdyZXkxAGdyZXkxMABncmV5MTAwAGdyZXkxMQBncmV5MTIAZ3JleTEzAGdyZXkxNABncmV5MTUAZ3JleTE2AGdyZXkxNwBncmV5MTgAZ3JleTE5AGdyZXkyAGdyZXkyMABncmV5MjEAZ3JleTIyAGdyZXkyMwBncmV5MjQAZ3JleTI1AGdyZXkyNgBncmV5MjcAZ3JleTI4AGdyZXkyOQBncmV5MwBncmV5MzAAZ3JleTMxAGdyZXkzMgBncmV5MzMAZ3JleTM0AGdyZXkzNQBncmV5MzYAZ3JleTM3AGdyZXkzOABncmV5MzkAZ3JleTQAZ3JleTQwAGdyZXk0MQBncmV5NDIAZ3JleTQzAGdyZXk0NABncmV5NDUAZ3JleTQ2AGdyZXk0NwBncmV5NDgAZ3JleTQ5AGdyZXk1AGdyZXk1MABncmV5NTEAZ3JleTUyAGdyZXk1MwBncmV5NTQAZ3JleTU1AGdyZXk1NgBncmV5NTcAZ3JleTU4AGdyZXk1OQBncmV5NgBncmV5NjAAZ3JleTYxAGdyZXk2MgBncmV5NjMAZ3JleTY0AGdyZXk2NQBncmV5NjYAZ3JleTY3AGdyZXk2OABncmV5NjkAZ3JleTcAZ3JleTcwAGdyZXk3MQBncmV5NzIAZ3JleTczAGdyZXk3NABncmV5NzUAZ3JleTc2AGdyZXk3NwBncmV5NzgAZ3JleTc5AGdyZXk4AGdyZXk4MABncmV5ODEAZ3JleTgyAGdyZXk4MwBncmV5ODQAZ3JleTg1AGdyZXk4NgBncmV5ODcAZ3JleTg4AGdyZXk4OQBncmV5OQBncmV5OTAAZ3JleTkxAGdyZXk5MgBncmV5OTMAZ3JleTk0AGdyZXk5NQBncmV5OTYAZ3JleTk3AGdyZXk5OABncmV5OTkAaG9uZXlkZXcAaG9uZXlkZXcxAGhvbmV5ZGV3MgBob25leWRldzMAaG9uZXlkZXc0AGhvdHBpbmsAaG90cGluazEAaG90cGluazIAaG90cGluazMAaG90cGluazQAaW5kaWFucmVkAGluZGlhbnJlZDEAaW5kaWFucmVkMgBpbmRpYW5yZWQzAGluZGlhbnJlZDQAaW5kaWdvAGludmlzAGl2b3J5AGl2b3J5MQBpdm9yeTIAaXZvcnkzAGl2b3J5NABraGFraQBraGFraTEAa2hha2kyAGtoYWtpMwBraGFraTQAbGF2ZW5kZXIAbGF2ZW5kZXJibHVzaABsYXZlbmRlcmJsdXNoMQBsYXZlbmRlcmJsdXNoMgBsYXZlbmRlcmJsdXNoMwBsYXZlbmRlcmJsdXNoNABsYXduZ3JlZW4AbGVtb25jaGlmZm9uAGxlbW9uY2hpZmZvbjEAbGVtb25jaGlmZm9uMgBsZW1vbmNoaWZmb24zAGxlbW9uY2hpZmZvbjQAbGlnaHRibHVlAGxpZ2h0Ymx1ZTEAbGlnaHRibHVlMgBsaWdodGJsdWUzAGxpZ2h0Ymx1ZTQAbGlnaHRjb3JhbABsaWdodGN5YW4AbGlnaHRjeWFuMQBsaWdodGN5YW4yAGxpZ2h0Y3lhbjMAbGlnaHRjeWFuNABsaWdodGdvbGRlbnJvZABsaWdodGdvbGRlbnJvZDEAbGlnaHRnb2xkZW5yb2QyAGxpZ2h0Z29sZGVucm9kMwBsaWdodGdvbGRlbnJvZDQAbGlnaHRnb2xkZW5yb2R5ZWxsb3cAbGlnaHRncmF5AGxpZ2h0Z3JleQBsaWdodHBpbmsAbGlnaHRwaW5rMQBsaWdodHBpbmsyAGxpZ2h0cGluazMAbGlnaHRwaW5rNABsaWdodHNhbG1vbgBsaWdodHNhbG1vbjEAbGlnaHRzYWxtb24yAGxpZ2h0c2FsbW9uMwBsaWdodHNhbG1vbjQAbGlnaHRzZWFncmVlbgBsaWdodHNreWJsdWUAbGlnaHRza3libHVlMQBsaWdodHNreWJsdWUyAGxpZ2h0c2t5Ymx1ZTMAbGlnaHRza3libHVlNABsaWdodHNsYXRlYmx1ZQBsaWdodHNsYXRlZ3JheQBsaWdodHNsYXRlZ3JleQBsaWdodHN0ZWVsYmx1ZQBsaWdodHN0ZWVsYmx1ZTEAbGlnaHRzdGVlbGJsdWUyAGxpZ2h0c3RlZWxibHVlMwBsaWdodHN0ZWVsYmx1ZTQAbGlnaHR5ZWxsb3cAbGlnaHR5ZWxsb3cxAGxpZ2h0eWVsbG93MgBsaWdodHllbGxvdzMAbGlnaHR5ZWxsb3c0AGxpbWVncmVlbgBsaW5lbgBtYWdlbnRhAG1hZ2VudGExAG1hZ2VudGEyAG1hZ2VudGEzAG1hZ2VudGE0AG1hcm9vbgBtYXJvb24xAG1hcm9vbjIAbWFyb29uMwBtYXJvb240AG1lZGl1bWFxdWFtYXJpbmUAbWVkaXVtYmx1ZQBtZWRpdW1vcmNoaWQAbWVkaXVtb3JjaGlkMQBtZWRpdW1vcmNoaWQyAG1lZGl1bW9yY2hpZDMAbWVkaXVtb3JjaGlkNABtZWRpdW1wdXJwbGUAbWVkaXVtcHVycGxlMQBtZWRpdW1wdXJwbGUyAG1lZGl1bXB1cnBsZTMAbWVkaXVtcHVycGxlNABtZWRpdW1zZWFncmVlbgBtZWRpdW1zbGF0ZWJsdWUAbWVkaXVtc3ByaW5nZ3JlZW4AbWVkaXVtdHVycXVvaXNlAG1lZGl1bXZpb2xldHJlZABtaWRuaWdodGJsdWUAbWludGNyZWFtAG1pc3R5cm9zZQBtaXN0eXJvc2UxAG1pc3R5cm9zZTIAbWlzdHlyb3NlMwBtaXN0eXJvc2U0AG1vY2Nhc2luAG5hdmFqb3doaXRlAG5hdmFqb3doaXRlMQBuYXZham93aGl0ZTIAbmF2YWpvd2hpdGUzAG5hdmFqb3doaXRlNABuYXZ5AG5hdnlibHVlAG5vbmUAb2xkbGFjZQBvbGl2ZWRyYWIAb2xpdmVkcmFiMQBvbGl2ZWRyYWIyAG9saXZlZHJhYjMAb2xpdmVkcmFiNABvcmFuZ2UAb3JhbmdlMQBvcmFuZ2UyAG9yYW5nZTMAb3JhbmdlNABvcmFuZ2VyZWQAb3JhbmdlcmVkMQBvcmFuZ2VyZWQyAG9yYW5nZXJlZDMAb3JhbmdlcmVkNABvcmNoaWQAb3JjaGlkMQBvcmNoaWQyAG9yY2hpZDMAb3JjaGlkNABwYWxlZ29sZGVucm9kAHBhbGVncmVlbgBwYWxlZ3JlZW4xAHBhbGVncmVlbjIAcGFsZWdyZWVuMwBwYWxlZ3JlZW40AHBhbGV0dXJxdW9pc2UAcGFsZXR1cnF1b2lzZTEAcGFsZXR1cnF1b2lzZTIAcGFsZXR1cnF1b2lzZTMAcGFsZXR1cnF1b2lzZTQAcGFsZXZpb2xldHJlZABwYWxldmlvbGV0cmVkMQBwYWxldmlvbGV0cmVkMgBwYWxldmlvbGV0cmVkMwBwYWxldmlvbGV0cmVkNABwYXBheWF3aGlwAHBlYWNocHVmZgBwZWFjaHB1ZmYxAHBlYWNocHVmZjIAcGVhY2hwdWZmMwBwZWFjaHB1ZmY0AHBlcnUAcGluawBwaW5rMQBwaW5rMgBwaW5rMwBwaW5rNABwbHVtAHBsdW0xAHBsdW0yAHBsdW0zAHBsdW00AHBvd2RlcmJsdWUAcHVycGxlAHB1cnBsZTEAcHVycGxlMgBwdXJwbGUzAHB1cnBsZTQAcmVkAHJlZDEAcmVkMgByZWQzAHJlZDQAcm9zeWJyb3duAHJvc3licm93bjEAcm9zeWJyb3duMgByb3N5YnJvd24zAHJvc3licm93bjQAcm95YWxibHVlAHJveWFsYmx1ZTEAcm95YWxibHVlMgByb3lhbGJsdWUzAHJveWFsYmx1ZTQAc2FkZGxlYnJvd24Ac2FsbW9uAHNhbG1vbjEAc2FsbW9uMgBzYWxtb24zAHNhbG1vbjQAc2FuZHlicm93bgBzZWFncmVlbgBzZWFncmVlbjEAc2VhZ3JlZW4yAHNlYWdyZWVuMwBzZWFncmVlbjQAc2Vhc2hlbGwAc2Vhc2hlbGwxAHNlYXNoZWxsMgBzZWFzaGVsbDMAc2Vhc2hlbGw0AHNpZW5uYQBzaWVubmExAHNpZW5uYTIAc2llbm5hMwBzaWVubmE0AHNreWJsdWUAc2t5Ymx1ZTEAc2t5Ymx1ZTIAc2t5Ymx1ZTMAc2t5Ymx1ZTQAc2xhdGVibHVlAHNsYXRlYmx1ZTEAc2xhdGVibHVlMgBzbGF0ZWJsdWUzAHNsYXRlYmx1ZTQAc2xhdGVncmF5AHNsYXRlZ3JheTEAc2xhdGVncmF5MgBzbGF0ZWdyYXkzAHNsYXRlZ3JheTQAc2xhdGVncmV5AHNub3cAc25vdzEAc25vdzIAc25vdzMAc25vdzQAc3ByaW5nZ3JlZW4Ac3ByaW5nZ3JlZW4xAHNwcmluZ2dyZWVuMgBzcHJpbmdncmVlbjMAc3ByaW5nZ3JlZW40AHN0ZWVsYmx1ZQBzdGVlbGJsdWUxAHN0ZWVsYmx1ZTIAc3RlZWxibHVlMwBzdGVlbGJsdWU0AHRhbgB0YW4xAHRhbjIAdGFuMwB0YW40AHRoaXN0bGUAdGhpc3RsZTEAdGhpc3RsZTIAdGhpc3RsZTMAdGhpc3RsZTQAdG9tYXRvAHRvbWF0bzEAdG9tYXRvMgB0b21hdG8zAHRvbWF0bzQAdHVycXVvaXNlAHR1cnF1b2lzZTEAdHVycXVvaXNlMgB0dXJxdW9pc2UzAHR1cnF1b2lzZTQAdmlvbGV0AHZpb2xldHJlZAB2aW9sZXRyZWQxAHZpb2xldHJlZDIAdmlvbGV0cmVkMwB2aW9sZXRyZWQ0AHdoZWF0AHdoZWF0MQB3aGVhdDIAd2hlYXQzAHdoZWF0NAB3aGl0ZQB3aGl0ZXNtb2tlAHllbGxvdwB5ZWxsb3cxAHllbGxvdzIAeWVsbG93MwB5ZWxsb3c0AHllbGxvd2dyZWVuAGxhY2sAaGl0ZQBpZ2h0Z3JleQBYMTEvAC8lcy8lcwBpbWFnZXNjYWxlAGZhbHNlAGJsYWNrAGRvdHRlZABkYXNoZWQAY3AtPnNyYwBodG1sdGFibGUuYwBlbWl0X2h0bWxfaW1nAGNwLT5zcmNbMF0AdHJhbnNwYXJlbnQAXyVkACVkADEAMgAzADQANQA2ADcAOAA5ADEwADExADEyADEzADE0ADE1ADE2ADE3ADE4ADE5ADIwAEFnbm9kZWluZm9fdABBZ2VkZ2VpbmZvX3QAcm93ZwBjb2xnAEFncmFwaGluZm9fdAA8VEFCTEU+AGRlbHggPj0gMABwb3NfaHRtbF90YmwAZGVseSA+PSAwAHRhYmxlIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCB0YWJsZSBzaXplIHdpdGggdW5zcGVjaWZpZWQgd2lkdGggb3IgaGVpZ2h0CgBjZWxsIHNpemUgdG9vIHNtYWxsIGZvciBjb250ZW50CgBmaXhlZCBjZWxsIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAE5vIG9yIGltcHJvcGVyIGltYWdlIGZpbGU9IiVzIgoAcGVuY29sb3IAY29sb3IALT4ALS0AZlBRLmMAUFFjaGVjawBIZWFwIG92ZXJmbG93CgAlIVBTLUFkb2JlLTIuMAovbm9kZSB7CiAgL1kgZXhjaCBkZWYKICAvWCBleGNoIGRlZgogIC95IGV4Y2ggZGVmCiAgL3ggZXhjaCBkZWYKICBuZXdwYXRoCiAgeCB5IG1vdmV0bwogIHggWSBsaW5ldG8KICBYIFkgbGluZXRvCiAgWCB5IGxpbmV0bwogIGNsb3NlcGF0aCBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAc2hvd3BhZ2UKAGZhaWxlZCBhdCBub2RlICVkWzBdCgBucC0+Y2VsbHNbMF0AbWF6ZS5jAGNoa1NncmFwaABmYWlsZWQgYXQgbm9kZSAlZFsxXQoAbnAtPmNlbGxzWzFdAGRpdGVtcwBmaW5kU1ZlcnQAJSUlJVBhZ2U6IDEgMQolJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJWYgJWYgdHJhbnNsYXRlCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAJWYgJWYgJWYgJWYgbm9kZQoAMCAwIDAgc2V0cmdiY29sb3IKACVmICVmICVmICVmIGNlbGwKADEgMCAwIHNldHJnYmNvbG9yCgB1bmV4cGVjdGVkIGNhc2UgaW4gbG9jYXRlX2VuZHBvaW50CgAwAHRyYXBlem9pZC5jAGxvY2F0ZV9lbmRwb2ludABhZGRfc2VnbWVudDogZXJyb3IKAG5ld25vZGU6IFF1ZXJ5LXRhYmxlIG92ZXJmbG93CgBuZXdub2RlAG5ld3RyYXA6IFRyYXBlem9pZC10YWJsZSBvdmVyZmxvdyAlZAoAbmV3dHJhcABpbmRleC5jAFJUcmVlU2VhcmNoAG4tPmxldmVsID49IDAAUlRyZWVJbnNlcnQAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbAByLT5ib3VuZGFyeVtpXSA8PSByLT5ib3VuZGFyeVtOVU1ESU1TICsgaV0AciAmJiBuICYmIG5ldwBSVHJlZUluc2VydDIAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSBuLT5sZXZlbABGQUxTRQBub2RlLmMATm9kZUNvdmVyAHIgJiYgbgBQaWNrQnJhbmNoAEFkZEJyYW5jaABpIDwgTk9ERUNBUkQAbmV3AG4gJiYgaSA+PSAwICYmIGkgPCBOT0RFQ0FSRABEaXNjb25CcmFuY2gAcgByZWN0YW5nbGUuYwBSZWN0QXJlYQByICYmIHJyAENvbWJpbmVSZWN0AHIgJiYgcwBPdmVybGFwAG4Ac3BsaXQucS5jAFNwbGl0Tm9kZQBiAG4tPmNvdW50ICsgKCpubiktPmNvdW50ID09IE5PREVDQVJEICsgMQBMb2FkTm9kZXMAcQBwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMCB8fCBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDEAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdICsgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID09IE5PREVDQVJEICsgMQBNZXRob2RaZXJvAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSBydHAtPk1pbkZpbGwgJiYgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzFdID49IHJ0cC0+TWluRmlsbAAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAENsYXNzaWZ5AEdldEJyYW5jaGVzAG4tPmJyYW5jaFtpXS5jaGlsZAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AAAAAAAAAAAAKSstMDIABC8AJCMAEhQWGhweIBgABQcvLy8ALy8AAAkIKAAAASICBgAAAAAACAAAAAAAAAAAAAAAAAAlAyYTCikVCyoXDi0ZERsMKx0NLB8PIRAAMwAwAC9DADEALwA1LidCMkEAOjgAPDRFADYAQAAAPwBENzs5PQACAwMBAQIBAQEDAwMDAwMDAwEBAQEBAQEBAQEBAQEBAQECAQECAAYBAwMDAwMBAAECAwAEAQIDAAQABAAEAAMCAQIBAgFTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBiZWZvcmUgPFRBQkxFPgBTeW50YXggZXJyb3I6IG5vbi1zcGFjZSBzdHJpbmcgdXNlZCBhZnRlciA8L1RBQkxFPgAAKSoqKissLC0tLS0tLS0tLS0uLzAxMjM0NTY3ODk6Ozw9Pj4/P0FAQkJCQkJCQ0NERERGRUdHR0lISkhLSExITU1OTk9P/wMPEBEjOiQ9JUAVQyZFJ0gYSxlNGigcTh0eUFFSWVpsa25jZFdpc3ludGF4IGVycm9yAG1lbW9yeSBleGhhdXN0ZWQAJXMgaW4gbGluZSAlZCAKAE5vdCBidWlsdCB3aXRoIGxpYmV4cGF0LiBUYWJsZSBmb3JtYXR0aW5nIGlzIG5vdCBhdmFpbGFibGUuCgByb3V0ZS5jAGxpYnBhdGgvJXM6JWQ6ICVzCgBzaG9ydGVzdC5jAHNvdXJjZSBwb2ludCBub3QgaW4gYW55IHRyaWFuZ2xlAGRlc3RpbmF0aW9uIHBvaW50IG5vdCBpbiBhbnkgdHJpYW5nbGUAY2Fubm90IGZpbmQgdHJpYW5nbGUgcGF0aABjYW5ub3QgbWFsbG9jIG9wcwBjYW5ub3QgcmVhbGxvYyBvcHMAdHJpYW5ndWxhdGlvbiBmYWlsZWQAY2Fubm90IG1hbGxvYyB0cmlzAGNhbm5vdCByZWFsbG9jIHRyaXMAY2Fubm90IG1hbGxvYyBkcS5wbmxzAGNhbm5vdCByZWFsbG9jIGRxLnBubHMAY2Fubm90IG1hbGxvYyBwbmxzAGNhbm5vdCBtYWxsb2MgcG5scHMAY2Fubm90IHJlYWxsb2MgcG5scwBjYW5ub3QgcmVhbGxvYyBwbmxwcwBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AABIQExQVFhcYGRobHB0eHyAhEBAiIxAkJSYnKCkqKxAsLS4RLzARETEREREyMzQ1Njc4OREQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQOhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQOxA8PT4/QEEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQQhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQQxAQRBBFRkcQSBBJEBAQEEpLTE0QEE4QT1AQEBAQURAQEBAQEBAQEBAQEBBSEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBTEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQVFVWVxAQWFkQEBAQEBAQEBAQEBAQEBAQEBAQEBAQWhBbXF1eX2BhYhAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////////////////////wAAAAD+/wD8AQAA+AEAAHgAAAAA//vf+wAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAD8/+Cv/////////////9///////yBAsAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAD8AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAACG/v///wBASQAAAAAAGADf/wDIAAAAAAAAAAEAPAAAAAAAAAAAAAAAABDgAR4AYP+/AAAAAAAA/wcAAAAAAAAAAAAAAAAAAAAAAAAA+M8DAAAAAwAg/38AAABOAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAEAAgHgAwAAEAAAAAAAAAABAAIAAAAAD8DwAAAAAAAAAQACAAAAAAAAAAAAAAAAAAEAAgAAAAAAMAAAAAAAAAABAAIAAAAAD9AAAAAAAAAAAAACAAAAAA/wcAAAAAAAAAAAAgAAAAAAD/AAAAAAAAABAAIAAAAAAAAAAAAAAAAAAAACAAAAAAPwIAAAAAAAAAAAAEAAAAABAAAAAAAACAAIDA3wAMAAAAAAAAAAAAAAAAAB8AAAAAAAD+////APz//wAAAAAAAAAA/AAAAAAAAMD/3/8HAAAAAAAAAAAAAIAGAPwAABg+AACAvwDMAAAAAAAAAAAAAAAIAAAAAAAAAAAAAABg////HwAA/wMAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAABAAAYAAAAAAAAAAAAOAAAAAAQAAAAcAAAAAAAAAAAAAAAAAAAADAAAP5/LwAA/wP/fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOMQAAAAAAAAAAAAAAAAAAAAAAAMT/////AAAAwAAAAAAAAAAAAQDgnwAAAAB/PwAAAAAAAAAAAAAAAAAAAAAQABAAAPz///8fAAAAAAAMAAAAAAAAQAAM8AAAAAAAAMD4AAAAAAAAAMAAAAAAAAAAAP8A////IRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////38AAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAD4ADgAOAAYID4/////P//////fx/88X//fwAA////AwAA/////wEAewPQwa9CAAwfvP//AAAAAAAC//////////////////////////////////////////////////////////8PAP////9/AAAA/wcAAP////////////8/AAAAAAAA/P///v////////////////////////////////////////////////////8f/wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADghwP+AAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAD//////3//DwAAAAAAAAAA////+/////////////8PAP//////////////////////////////////PwAAAP8PHv///wH8weAAAAAAAAAAAAAAAB4BAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAD/////DwAAAP///3////////////////////////////////////9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAD///////9/AAAAAAAAwADgAAAAAAAAAAAAAACAD3AAAAAAAAAAAAAAAAAAAP8A//9/AAMAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAABECAAAAA//AwAAAAAAAPAAAAAAAAAAAAAQwAAA//8DBwAAAAAA+AAAAAAIgAAAAAAAAAAAAAAIAP8/AMAAAAAAAAAAAAAAAAAAAADwAACACwAAAAAAAACAAgAAwAAAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA/P8DAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw////A38A//////f/fw8AAAAAAAAAAAAAAAAAAAAAAID+/wD8AQAA+AEAAPg/AAAAAAAAAAAAAAAAAAAAf38AMIf//////4//AAAAAAAA4P//B/8PAAAAAAAA//////8/AAAAAA8AAAAAAAAAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwI8AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIf/AP8BAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAP/z/PwAAAAMAAAAAAAD+AwAAAAAAAAAAAAAAAAAYAA8AAAAAAAAAAAAAAAAAAADhAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAHAAAAAAAAAAAAAAAAAP///////////////////////////////////////z8A/////3/+////////////////////////////PwAAAAD//////////z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////9/AP//AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAgAACAAAAAgAACAAAAAgAAAAAIAAAACAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA//////8P////////////////DwD/f/5//v/+/wAAAAD/B////3//////////D///////BwAAAAAAAAAAwP///wcA//////8H/wEDAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wEAv///////////H///DwD/////3wcAAP//AQD/////////f/3/////////////////////////////Hv////////8/DwD///8AAAAAAAAAAAAAAAAAAAAAAAD4///////////h/wAAAAAAAP//////////PwAAAAAAAAD//////////////////w8AAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEhETFBUWFxgZGhscHR4fICERIiMkESUmJygpKissES0uLxAQMBAQEBAQEBAxMjMQNDUQEBERERERERERERERERERERERERERERERERE2ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERNxERERE4ETk6Ozw9PhERERERERERERERERERERERERERERERERERERERERERERERERERERERERE/EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEUBBEUJDREVGR0hJEBAQSktMTU4QEBBPUBAQEBBREBAQEBAQEBAQERERUlMQEBAQEBAQEBAQEBERERFUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQERFVEBAQEFYQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQVxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQWFlaWxAQEBAQEBAQEBAQEBAQEBAQEBAQEBBcEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////AAAAAAAAAAD+//8H/v//BwAAAAAABCAE//9/////f//////////////////////////////////D/wMAH1AAAAAAAAAAAAAAIAAAAAAA3zxA1///+////////////7///////////////////////wP8/////////////////////////wD+////fwL+/////wAAAAAA/7+2AP///wcHAAAA/wf//////////v/D////////////////7x/+4f+fAAD///////8A4P///////////////wMA//////8HMAT////8/x8AAP///wEAAAAAAAAAAP0fAAAAAAAA8AP/f//////////v/9/h/8///v7un/n///3F459ZgLDP/wMA7of5///9bcOHGQJewP8/AO6/+////e3jvxsBAM//AADun/n///3t458ZwLDP/wIA7Mc91hjH/8PHHYEAwP8AAO7f/f///e/j3x1gA8//AADs3/3///3v498dYEDP/wYA7N/9/////+ffXYAAz/8A/Oz/f/z///svf4Bf/wAADAD+/////3//Bz8g/wMAAAAAliXw/q7s/ztfIP/zAAAAAAEAAAD/AwAA//7///8f/v8D///+////HwAAAAAAAAAA////////f/n/A///58H//39A/zP/////vyD///////f///////////89fz3//////z3/////PX89/3//////////Pf//////////hwAAAAD//wAA/////////////x8A/v//////////////////////////////////////////////////////////n////v//B////////////8cBAP/fDwD//w8A//8PAP/fDQD////////P//8BgBD/AwAAAAD/A///////////////AP//////B///////////PwD///8f/w//AcD/////Px8A//////8P////A/8DAAAAAP///w//////////f/7/HwD/A/8DgAAAAAAAAAAAAAAA////////7//vD/8DAAAAAP//////8////////7//AwD///////8/AP/j//////8/AAAAAAAAAAAAAAAAAN5vAP///////////////////////////////wAAAAAAAAAA//8/P/////8/P/+q////P////////99f3B/PD/8f3B8AAAAAAAAAAAAAAAAAAAKAAAD/HwAAAAAAAAAAAAAAAIT8Lz5Qvf/z4EMAAP//////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMD///////8DAAD//////3///////3//////////////////////H3gMAP////+/IP////////+AAAD//38Af39/f39/f3//////AAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA/gM+H/7///////////9/4P7/////////////9+D/////P/7/////////////fwAA////BwAAAAAAAP///////////////////////////////z8AAAAAAAAAAAD/////////////////////////////////HwAAAAAAAP//////////////////////HwAAAAAAAAAA//////8//x////8PAAD//////3/wj////4D/////////////AAAAAID//P///////////////3kPAP8HAAAAAAAAAAAA/7v3////AAAA////////DwD//////////w8A/wMAAPwI//////8H/////wcA////H/////////f/AID/AwAAAAD///////9/AP8//wP//38E/////////38FAAA4//88AH5+fgB/fwAAAAAAAAAAAAAAAAAAAAAAAP//////B/8D//////////////////////////8PAP//f/j//////w//////////////////P/////////////////8DAAAAAH8A+OD//X9f2/////////////////8DAAAA+P///////////////z8AAP///////////P///////wAAAAAA/w8AAAAAAAAAAAAAAAAAAN//////////////////////HwAA/wP+//8H/v//B8D/////////////f/z8/BwAAAAA/+///3///7f/P/8/AAAAAP///////////////////wcAAAAAAAAAAP///////x8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8f////////AQAAAAAA////fwAA////BwAAAAAAAP///z//////D/8+AAAAAAD/////////////////////////P/8DAAAAAAAAAAAAAD/9/////7+R//8/AAAAAAAAAAAAAAAAAAAAAAAAAAAA//8/AP///wMAAAAAAAAAAP/////////AAAAAAAAAAABv8O/+//8PAAAAAAD///8fAAAAAAAAAAAAAAAAAAAAAP///////z8A//8/AP//BwAAAAAAAAAAAAAAAAAAAAAA////////////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////z8AAADA/wAA/P///////wEAAP///wH/A////////8f/AAAAAAAAAAD//////////x4A/wMAAAAAAAAAAAAAAAAAAAAAAAAAAP///////z8A/wMAAAAAAAD/////////////////fwAAAAAAAAAAAAAAAAAAAAAAAP///////////////wcAAAAAAAAAAAAAAAAAAAAAAAAA//////9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////HwD//////38AAPj/AAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////3///////////32Te/+vv/////////7/n39////97X/z9//////////////////////////////////////////////////////8//////f//9/////f//9/////f//9/////f/////3////9///3z////////+////+W/vcKhOqWqpb3917/+/8P7vv/DwAAAAAAAAAATENfQUxMAExDX0NUWVBFAAAAAExDX05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAExBTkcAQy5VVEYtOABQT1NJWABNVVNMX0xPQ1BBVEgAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBhbG51bQBhbHBoYQBibGFuawBjbnRybABkaWdpdABncmFwaABsb3dlcgBwcmludABwdW5jdABzcGFjZQB1cHBlcgB4ZGlnaXQAQy5VVEYtOAAAAAAAAAAAAEMAL3Byb2Mvc2VsZi9mZC8AcndhAGluZmluaXR5AG5hbgAJAAoADQAMAAcAGwBbWzphbG51bTpdX10AW15bOmFsbnVtOl1fXQBbWzpzcGFjZTpdXQBbXls6c3BhY2U6XV0AW1s6ZGlnaXQ6XV0AW15bOmRpZ2l0Ol1dAC90bXAvdG1wZmlsZV9YWFhYWFgAdys=\";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___assert_fail(condition,filename,line,func){abort(\"Assertion failed: \"+Pointer_stringify(condition)+\", at: \"+[filename?Pointer_stringify(filename):\"unknown filename\",line,func?Pointer_stringify(func):\"unknown function\"])}function _emscripten_get_now(){abort()}function _emscripten_get_now_is_monotonic(){return ENVIRONMENT_IS_NODE||typeof dateNow!==\"undefined\"||(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self[\"performance\"]&&self[\"performance\"][\"now\"]}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if(clk_id===1&&_emscripten_get_now_is_monotonic()){now=_emscripten_get_now()}else{___setErrNo(ERRNO_CODES.EINVAL);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(){return _clock_gettime.apply(null,arguments)}function ___lock(){}function ___map_file(pathname,size){___setErrNo(ERRNO_CODES.EPERM);return-1}var ERRNO_MESSAGES={0:\"Success\",1:\"Not super-user\",2:\"No such file or directory\",3:\"No such process\",4:\"Interrupted system call\",5:\"I/O error\",6:\"No such device or address\",7:\"Arg list too long\",8:\"Exec format error\",9:\"Bad file number\",10:\"No children\",11:\"No more processes\",12:\"Not enough core\",13:\"Permission denied\",14:\"Bad address\",15:\"Block device required\",16:\"Mount device busy\",17:\"File exists\",18:\"Cross-device link\",19:\"No such device\",20:\"Not a directory\",21:\"Is a directory\",22:\"Invalid argument\",23:\"Too many open files in system\",24:\"Too many open files\",25:\"Not a typewriter\",26:\"Text file busy\",27:\"File too large\",28:\"No space left on device\",29:\"Illegal seek\",30:\"Read only file system\",31:\"Too many links\",32:\"Broken pipe\",33:\"Math arg out of domain of func\",34:\"Math result not representable\",35:\"File locking deadlock error\",36:\"File or path name too long\",37:\"No record locks available\",38:\"Function not implemented\",39:\"Directory not empty\",40:\"Too many symbolic links\",42:\"No message of desired type\",43:\"Identifier removed\",44:\"Channel number out of range\",45:\"Level 2 not synchronized\",46:\"Level 3 halted\",47:\"Level 3 reset\",48:\"Link number out of range\",49:\"Protocol driver not attached\",50:\"No CSI structure available\",51:\"Level 2 halted\",52:\"Invalid exchange\",53:\"Invalid request descriptor\",54:\"Exchange full\",55:\"No anode\",56:\"Invalid request code\",57:\"Invalid slot\",59:\"Bad font file fmt\",60:\"Device not a stream\",61:\"No data (for no delay io)\",62:\"Timer expired\",63:\"Out of streams resources\",64:\"Machine is not on the network\",65:\"Package not installed\",66:\"The object is remote\",67:\"The link has been severed\",68:\"Advertise error\",69:\"Srmount error\",70:\"Communication error on send\",71:\"Protocol error\",72:\"Multihop attempted\",73:\"Cross mount point (not really error)\",74:\"Trying to read unreadable message\",75:\"Value too large for defined data type\",76:\"Given log. name not unique\",77:\"f.d. invalid for this operation\",78:\"Remote address changed\",79:\"Can   access a needed shared lib\",80:\"Accessing a corrupted shared lib\",81:\".lib section in a.out corrupted\",82:\"Attempting to link in too many libs\",83:\"Attempting to exec a shared library\",84:\"Illegal byte sequence\",86:\"Streams pipe error\",87:\"Too many users\",88:\"Socket operation on non-socket\",89:\"Destination address required\",90:\"Message too long\",91:\"Protocol wrong type for socket\",92:\"Protocol not available\",93:\"Unknown protocol\",94:\"Socket type not supported\",95:\"Not supported\",96:\"Protocol family not supported\",97:\"Address family not supported by protocol family\",98:\"Address already in use\",99:\"Address not available\",100:\"Network interface is not configured\",101:\"Network is unreachable\",102:\"Connection reset by network\",103:\"Connection aborted\",104:\"Connection reset by peer\",105:\"No buffer space available\",106:\"Socket is already connected\",107:\"Socket is not connected\",108:\"Can't send after socket shutdown\",109:\"Too many references\",110:\"Connection timed out\",111:\"Connection refused\",112:\"Host is down\",113:\"Host is unreachable\",114:\"Socket already connected\",115:\"Connection already in progress\",116:\"Stale file handle\",122:\"Quota exceeded\",123:\"No medium (in tape drive)\",125:\"Operation canceled\",130:\"Previous owner died\",131:\"State not recoverable\"};var PATH={splitPath:(function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter((function(p){return!!p})),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))}),join2:(function(l,r){return PATH.normalize(l+\"/\"+r)}),resolve:(function(){var resolvedPath=\"\",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!==\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\")}else if(!path){return\"\"}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=path.charAt(0)===\"/\"}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter((function(p){return!!p})),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\"}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\")})};var TTY={ttys:[],init:(function(){}),shutdown:(function(){}),register:(function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)}),stream_ops:{open:(function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}stream.tty=tty;stream.seekable=false}),close:(function(stream){stream.tty.ops.flush(stream.tty)}),flush:(function(stream){stream.tty.ops.flush(stream.tty)}),read:(function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead}),write:(function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO)}for(var i=0;i<length;i++){try{stream.tty.ops.put_char(stream.tty,buffer[offset+i])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}}if(length){stream.node.timestamp=Date.now()}return i})},default_tty_ops:{get_char:(function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!=\"win32\";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync(\"/dev/stdin\",\"r\");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf(\"EOF\")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\")}else{result=null}}else if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\"}}else if(typeof readline==\"function\"){result=readline();if(result!==null){result+=\"\\n\"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module[\"print\"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module[\"print\"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module[\"printErr\"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module[\"printErr\"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,\"/\",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents}),getFileDataAsTypedArray:(function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)}),expandFileStorage:(function(node,newCapacity){if(node.contents&&node.contents.subarray&&newCapacity>node.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.length<newCapacity)node.contents.push(0)}),resizeFileStorage:(function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length<newSize)node.contents.push(0);node.usedBytes=newSize}),node_ops:{getattr:(function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr}),setattr:(function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}}),lookup:(function(parent,name){throw FS.genericErrors[ERRNO_CODES.ENOENT]}),mknod:(function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)}),rename:(function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir}),unlink:(function(parent,name){delete parent.contents[name]}),rmdir:(function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}delete parent.contents[name]}),readdir:(function(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries}),symlink:(function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node}),readlink:(function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return node.link})},stream_ops:{read:(function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size}),write:(function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position}),allocate:(function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(ERRNO_CODES.ENOMEM)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0})}};var IDBFS={dbs:{},indexedDB:(function(){if(typeof indexedDB!==\"undefined\")return indexedDB;var ret=null;if(typeof window===\"object\")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,\"IDBFS used, but indexedDB not supported\");return ret}),DB_VERSION:21,DB_STORE_NAME:\"FILE_DATA\",mount:(function(mount){return MEMFS.mount.apply(null,arguments)}),syncfs:(function(mount,populate,callback){IDBFS.getLocalSet(mount,(function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,(function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)}))}))}),getDB:(function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback(\"Unable to connect to IndexedDB\")}req.onupgradeneeded=(function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains(\"timestamp\")){fileStore.createIndex(\"timestamp\",\"timestamp\",{unique:false})}});req.onsuccess=(function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),getLocalSet:(function(mount,callback){var entries={};function isRealDir(p){return p!==\".\"&&p!==\"..\"}function toAbsolute(root){return(function(p){return PATH.join2(root,p)})}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:\"local\",entries:entries})}),getRemoteSet:(function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,(function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readonly\");transaction.onerror=(function(e){callback(this.error);e.preventDefault()});var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index(\"timestamp\");index.openKeyCursor().onsuccess=(function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:\"remote\",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()})}catch(e){return callback(e)}}))}),loadLocalEntry:(function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error(\"node type not supported\"))}}),storeLocalEntry:(function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error(\"node type not supported\"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)}),removeLocalEntry:(function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)}),loadRemoteEntry:(function(store,path,callback){var req=store.get(path);req.onsuccess=(function(event){callback(null,event.target.result)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),storeRemoteEntry:(function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=(function(){callback(null)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),removeRemoteEntry:(function(store,path,callback){var req=store.delete(path);req.onsuccess=(function(){callback(null)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),reconcile:(function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach((function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type===\"remote\"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readwrite\");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type===\"local\"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type===\"local\"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process[\"binding\"](\"constants\");if(flags[\"fs\"]){flags=flags[\"fs\"]}NODEFS.flagsForNodeMap={\"1024\":flags[\"O_APPEND\"],\"64\":flags[\"O_CREAT\"],\"128\":flags[\"O_EXCL\"],\"0\":flags[\"O_RDONLY\"],\"2\":flags[\"O_RDWR\"],\"4096\":flags[\"O_SYNC\"],\"512\":flags[\"O_TRUNC\"],\"1\":flags[\"O_WRONLY\"]}}),bufferFrom:(function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,\"/\",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,\"\",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:(function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,\"/\",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split(\"/\");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join(\"/\");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split(\"/\");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts[\"files\"]||[],(function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)}));(mount.opts[\"blobs\"]||[]).forEach((function(obj){WORKERFS.createNode(ensureParent(obj[\"name\"]),base(obj[\"name\"]),WORKERFS.FILE_MODE,0,obj[\"data\"])}));(mount.opts[\"packages\"]||[]).forEach((function(pack){pack[\"metadata\"].files.forEach((function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack[\"blob\"].slice(file.start,file.end))}))}));return root}),createNode:(function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node}),node_ops:{getattr:(function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}}),setattr:(function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}}),lookup:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}),mknod:(function(parent,name,mode,dev){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),rename:(function(oldNode,newDir,newName){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),unlink:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),rmdir:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),readdir:(function(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries}),symlink:(function(parent,newName,oldPath){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),readlink:(function(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM)})},stream_ops:{read:(function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+\" : \"+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split(\"/\").filter((function(p){return!!p})),false);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?mount+\"/\"+path:mount+path}path=path?node.name+\"/\"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{\"r\":0,\"rs\":1052672,\"r+\":2,\"w\":577,\"wx\":705,\"xw\":705,\"w+\":578,\"wx+\":706,\"xw+\":706,\"a\":1089,\"ax\":1217,\"xa\":1217,\"a+\":1090,\"ax+\":1218,\"xa+\":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags===\"undefined\"){throw new Error(\"Unknown file open mode: \"+str)}return flags}),flagsToPermissionString:(function(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf(\"r\")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf(\"w\")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf(\"x\")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,\"x\");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,\"wx\")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,\"wx\");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate===\"function\"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log(\"warning: \"+FS.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+=\"/\"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=ERRNO_CODES.EEXIST)throw e}}}),mkdev:(function(path,mode,dev){if(typeof dev===\"undefined\"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,\"w\");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate[\"willMovePath\"]){FS.trackingDelegate[\"willMovePath\"](old_path,new_path)}}catch(e){console.log(\"FS.trackingDelegate['willMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate[\"onMovePath\"])FS.trackingDelegate[\"onMovePath\"](old_path,new_path)}catch(e){console.log(\"FS.trackingDelegate['onMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path)}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path)}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path)}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path)}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,\"w\");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===\"\"){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags===\"string\"?FS.modeStringToFlags(flags):flags;mode=typeof mode===\"undefined\"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path===\"object\"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module[\"logReadFiles\"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module[\"printErr\"](\"read file: \"+path)}}try{if(FS.trackingDelegate[\"onOpenFile\"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate[\"onOpenFile\"](path,trackingFlags)}}catch(e){console.log(\"FS.trackingDelegate['onOpenFile']('\"+path+\"', flags) threw an exception: \"+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate[\"onWriteToFile\"])FS.trackingDelegate[\"onWriteToFile\"](stream.path)}catch(e){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+path+\"') threw an exception: \"+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||\"r\";opts.encoding=opts.encoding||\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){throw new Error('Invalid encoding type \"'+opts.encoding+'\"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding===\"binary\"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||\"w\";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data===\"string\"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error(\"Unsupported data type\")}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,\"x\");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\")}),createDefaultDevices:(function(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var random_device;if(typeof crypto!==\"undefined\"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require(\"crypto\")[\"randomBytes\"](1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice(\"/dev\",\"random\",random_device);FS.createDevice(\"/dev\",\"urandom\",random_device);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\")}),createSpecialDirectories:(function(){FS.mkdir(\"/proc\");FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount:(function(){var node=FS.createNode(\"/proc/self\",\"fd\",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},\"/proc/self/fd\")}),createStandardStreams:(function(){if(Module[\"stdin\"]){FS.createDevice(\"/dev\",\"stdin\",Module[\"stdin\"])}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\")}if(Module[\"stdout\"]){FS.createDevice(\"/dev\",\"stdout\",null,Module[\"stdout\"])}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\")}if(Module[\"stderr\"]){FS.createDevice(\"/dev\",\"stderr\",null,Module[\"stderr\"])}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\")}var stdin=FS.open(\"/dev/stdin\",\"r\");assert(stdin.fd===0,\"invalid handle for stdin (\"+stdin.fd+\")\");var stdout=FS.open(\"/dev/stdout\",\"w\");assert(stdout.fd===1,\"invalid handle for stdout (\"+stdout.fd+\")\");var stderr=FS.open(\"/dev/stderr\",\"w\");assert(stderr.fd===2,\"invalid handle for stderr (\"+stderr.fd+\")\")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack)Object.defineProperty(this,\"stack\",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"<generic error, no stack>\"}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={\"MEMFS\":MEMFS,\"IDBFS\":IDBFS,\"NODEFS\":NODEFS,\"WORKERFS\":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.init.initialized=true;FS.ensureErrnoError();Module[\"stdin\"]=input||Module[\"stdin\"];Module[\"stdout\"]=output||Module[\"stdout\"];Module[\"stderr\"]=error||Module[\"stderr\"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module[\"_fflush\"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}}),getMode:(function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}),joinPath:(function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]==\"/\")path=path.substr(1);return path}),absolutePath:(function(relative,base){return PATH.resolve(base,relative)}),standardizePath:(function(path){return PATH.normalize(path)}),findObject:(function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}}),analyzePath:(function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\"}catch(e){ret.error=e.errno}return ret}),createFolder:(function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)}),createPath:(function(parent,path,canRead,canWrite){parent=typeof parent===\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current}),createFile:(function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)}),createDataFile:(function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data===\"string\"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,\"w\");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node}),createDevice:(function(parent,name,input,output){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:(function(stream){stream.seekable=false}),close:(function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}}),read:(function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead}),write:(function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}}if(length){stream.node.timestamp=Date.now()}return i})});return FS.mkdev(path,mode,dev)}),createLink:(function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);return FS.symlink(target,path)}),forceLoadFile:(function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!==\"undefined\"){throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\")}else if(Module[\"read\"]){try{obj.contents=intArrayFromString(Module[\"read\"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error(\"Cannot load without read() or XMLHttpRequest.\")}if(!success)___setErrNo(ERRNO_CODES.EIO);return success}),createLazyFile:(function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);if(typeof Uint8Array!=\"undefined\")xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||\"\",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]===\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]===\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log(\"LazyFiles on gzip forces download of the whole file when length is accessed\")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!==\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node}),createPreloadedFile:(function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(\"cp \"+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module[\"preloadPlugins\"].forEach((function(plugin){if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,(function(){if(onerror)onerror();removeRunDependency(dep)}));handled=true}}));if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url==\"string\"){Browser.asyncLoad(url,(function(byteArray){processData(byteArray)}),onerror)}else{processData(url)}}),indexedDB:(function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}),DB_NAME:(function(){return\"EM_FS_\"+window.location.pathname}),DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:(function(paths,onload,onerror){onload=onload||(function(){});onerror=onerror||(function(){});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log(\"creating db\");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],\"readwrite\");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach((function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}}));transaction.onerror=onerror};openRequest.onerror=onerror}),loadFilesFromDB:(function(paths,onload,onerror){onload=onload||(function(){});onerror=onerror||(function(){});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],\"readonly\")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach((function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}}));transaction.onerror=onerror};openRequest.onerror=onerror})};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:(function(dirfd,path){if(path[0]!==\"/\"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path}),doStat:(function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]===\"/\")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret}),doWritev:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.unlink(path);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall192(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get(),prot=SYSCALLS.get(),flags=SYSCALLS.get(),fd=SYSCALLS.get(),off=SYSCALLS.get();off<<=12;var ptr;var allocated=false;if(fd===-1){ptr=_memalign(PAGE_SIZE,len);if(!ptr)return-ERRNO_CODES.ENOMEM;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-ERRNO_CODES.EBADF;var res=FS.mmap(info,HEAPU8,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,flags:flags};return ptr}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall33(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),amode=SYSCALLS.get();return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort(\"bad ioctl syscall \"+op)}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],\"i8\",ALLOC_STATIC);function ___unlock(){}function __exit(status){Module[\"exit\"](status)}function _exit(status){__exit(status)}var _environ=STATICTOP;STATICTOP+=16;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV[\"USER\"]=ENV[\"LOGNAME\"]=\"web_user\";ENV[\"PATH\"]=\"/\";ENV[\"PWD\"]=\"/\";ENV[\"HOME\"]=\"/home/web_user\";ENV[\"LANG\"]=\"C.UTF-8\";ENV[\"_\"]=Module[\"thisProgram\"];poolPtr=staticAlloc(TOTAL_ENV_SIZE);envPtr=staticAlloc(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]===\"string\"){var line=key+\"=\"+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error(\"Environment size exceeded TOTAL_ENV_SIZE!\")}var ptrSize=4;for(var i=0;i<strings.length;i++){var line=strings[i];writeAsciiToMemory(line,poolPtr);HEAP32[envPtr+i*ptrSize>>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}var _llvm_ceil_f64=Math_ceil;var _llvm_fabs_f64=Math_abs;var _llvm_floor_f64=Math_floor;var _llvm_pow_f64=Math_pow;var _llvm_sqrt_f64=Math_sqrt;function _llvm_trap(){abort(\"trap!\")}function _longjmp(env,value){Module[\"setThrew\"](env,value||1);throw\"longjmp\"}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function _setenv(envname,envval,overwrite){if(envname===0){___setErrNo(ERRNO_CODES.EINVAL);return-1}var name=Pointer_stringify(envname);var val=Pointer_stringify(envval);if(name===\"\"||name.indexOf(\"=\")!==-1){___setErrNo(ERRNO_CODES.EINVAL);return-1}if(ENV.hasOwnProperty(name)&&!overwrite)return 0;ENV[name]=val;___buildEnvironment(ENV);return 0}function _times(buffer){if(buffer!==0){_memset(buffer,0,16)}return 0}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process[\"hrtime\"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!==\"undefined\"){_emscripten_get_now=dateNow}else if(typeof self===\"object\"&&self[\"performance\"]&&typeof self[\"performance\"][\"now\"]===\"function\"){_emscripten_get_now=(function(){return self[\"performance\"][\"now\"]()})}else if(typeof performance===\"object\"&&typeof performance[\"now\"]===\"function\"){_emscripten_get_now=(function(){return performance[\"now\"]()})}else{_emscripten_get_now=Date.now}FS.staticInit();__ATINIT__.unshift((function(){if(!Module[\"noFSInit\"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var NODEJS_PATH=require(\"path\");NODEFS.staticInit()}___buildEnvironment(ENV);DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\")  at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob===\"function\"?atob:(function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output});function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE===\"boolean\"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,\"base64\")}catch(_){buf=new Buffer(s,\"base64\")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error(\"Converting base64 string to bytes failed.\")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}function invoke_d(index){try{return Module[\"dynCall_d\"](index)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_dddd(index,a1,a2,a3){try{return Module[\"dynCall_dddd\"](index,a1,a2,a3)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_i(index){try{return Module[\"dynCall_i\"](index)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_ii(index,a1){try{return Module[\"dynCall_ii\"](index,a1)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iii(index,a1,a2){try{return Module[\"dynCall_iii\"](index,a1,a2)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiii(index,a1,a2,a3){try{return Module[\"dynCall_iiii\"](index,a1,a2,a3)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){try{return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){try{return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){try{return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_v(index){try{Module[\"dynCall_v\"](index)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_vi(index,a1){try{Module[\"dynCall_vi\"](index,a1)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_vii(index,a1,a2){try{Module[\"dynCall_vii\"](index,a1,a2)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viii(index,a1,a2,a3){try{Module[\"dynCall_viii\"](index,a1,a2,a3)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiiddi(index,a1,a2,a3,a4,a5,a6){try{Module[\"dynCall_viiiddi\"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiii(index,a1,a2,a3,a4){try{Module[\"dynCall_viiii\"](index,a1,a2,a3,a4)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){try{Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){try{Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}Module.asmGlobalArg={\"Math\":Math,\"Int8Array\":Int8Array,\"Int16Array\":Int16Array,\"Int32Array\":Int32Array,\"Uint8Array\":Uint8Array,\"Uint16Array\":Uint16Array,\"Uint32Array\":Uint32Array,\"Float32Array\":Float32Array,\"Float64Array\":Float64Array,\"NaN\":NaN,\"Infinity\":Infinity};Module.asmLibraryArg={\"abort\":abort,\"assert\":assert,\"enlargeMemory\":enlargeMemory,\"getTotalMemory\":getTotalMemory,\"abortOnCannotGrowMemory\":abortOnCannotGrowMemory,\"invoke_d\":invoke_d,\"invoke_dddd\":invoke_dddd,\"invoke_i\":invoke_i,\"invoke_ii\":invoke_ii,\"invoke_iii\":invoke_iii,\"invoke_iiii\":invoke_iiii,\"invoke_iiiii\":invoke_iiiii,\"invoke_iiiiii\":invoke_iiiiii,\"invoke_iiiiiii\":invoke_iiiiiii,\"invoke_v\":invoke_v,\"invoke_vi\":invoke_vi,\"invoke_vii\":invoke_vii,\"invoke_viii\":invoke_viii,\"invoke_viiiddi\":invoke_viiiddi,\"invoke_viiii\":invoke_viiii,\"invoke_viiiii\":invoke_viiiii,\"invoke_viiiiii\":invoke_viiiiii,\"___assert_fail\":___assert_fail,\"___buildEnvironment\":___buildEnvironment,\"___clock_gettime\":___clock_gettime,\"___lock\":___lock,\"___map_file\":___map_file,\"___setErrNo\":___setErrNo,\"___syscall10\":___syscall10,\"___syscall140\":___syscall140,\"___syscall145\":___syscall145,\"___syscall146\":___syscall146,\"___syscall192\":___syscall192,\"___syscall195\":___syscall195,\"___syscall197\":___syscall197,\"___syscall221\":___syscall221,\"___syscall33\":___syscall33,\"___syscall5\":___syscall5,\"___syscall54\":___syscall54,\"___syscall6\":___syscall6,\"___syscall91\":___syscall91,\"___unlock\":___unlock,\"__exit\":__exit,\"_clock_gettime\":_clock_gettime,\"_emscripten_asm_const_iii\":_emscripten_asm_const_iii,\"_emscripten_get_now\":_emscripten_get_now,\"_emscripten_get_now_is_monotonic\":_emscripten_get_now_is_monotonic,\"_emscripten_memcpy_big\":_emscripten_memcpy_big,\"_exit\":_exit,\"_getenv\":_getenv,\"_llvm_ceil_f64\":_llvm_ceil_f64,\"_llvm_fabs_f64\":_llvm_fabs_f64,\"_llvm_floor_f64\":_llvm_floor_f64,\"_llvm_pow_f64\":_llvm_pow_f64,\"_llvm_sqrt_f64\":_llvm_sqrt_f64,\"_llvm_trap\":_llvm_trap,\"_longjmp\":_longjmp,\"_setenv\":_setenv,\"_times\":_times,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR,\"tempDoublePtr\":tempDoublePtr,\"ABORT\":ABORT,\"STACKTOP\":STACKTOP,\"STACK_MAX\":STACK_MAX,\"cttz_i8\":cttz_i8};// EMSCRIPTEN_START_ASM\nvar asm=(/** @suppress {uselessCode} */ function(global,env,buffer) {\n\"use asm\";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=env.cttz_i8|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0;var z=0;var A=global.Math.floor;var B=global.Math.abs;var C=global.Math.sqrt;var D=global.Math.pow;var E=global.Math.cos;var F=global.Math.sin;var G=global.Math.tan;var H=global.Math.acos;var I=global.Math.asin;var J=global.Math.atan;var K=global.Math.atan2;var L=global.Math.exp;var M=global.Math.log;var N=global.Math.ceil;var O=global.Math.imul;var P=global.Math.min;var Q=global.Math.max;var R=global.Math.clz32;var S=env.abort;var T=env.assert;var U=env.enlargeMemory;var V=env.getTotalMemory;var W=env.abortOnCannotGrowMemory;var X=env.invoke_d;var Y=env.invoke_dddd;var Z=env.invoke_i;var _=env.invoke_ii;var $=env.invoke_iii;var aa=env.invoke_iiii;var ba=env.invoke_iiiii;var ca=env.invoke_iiiiii;var da=env.invoke_iiiiiii;var ea=env.invoke_v;var fa=env.invoke_vi;var ga=env.invoke_vii;var ha=env.invoke_viii;var ia=env.invoke_viiiddi;var ja=env.invoke_viiii;var ka=env.invoke_viiiii;var la=env.invoke_viiiiii;var ma=env.___assert_fail;var na=env.___buildEnvironment;var oa=env.___clock_gettime;var pa=env.___lock;var qa=env.___map_file;var ra=env.___setErrNo;var sa=env.___syscall10;var ta=env.___syscall140;var ua=env.___syscall145;var va=env.___syscall146;var wa=env.___syscall192;var xa=env.___syscall195;var ya=env.___syscall197;var za=env.___syscall221;var Aa=env.___syscall33;var Ba=env.___syscall5;var Ca=env.___syscall54;var Da=env.___syscall6;var Ea=env.___syscall91;var Fa=env.___unlock;var Ga=env.__exit;var Ha=env._clock_gettime;var Ia=env._emscripten_asm_const_iii;var Ja=env._emscripten_get_now;var Ka=env._emscripten_get_now_is_monotonic;var La=env._emscripten_memcpy_big;var Ma=env._exit;var Na=env._getenv;var Oa=env._llvm_ceil_f64;var Pa=env._llvm_fabs_f64;var Qa=env._llvm_floor_f64;var Ra=env._llvm_pow_f64;var Sa=env._llvm_sqrt_f64;var Ta=env._llvm_trap;var Ua=env._longjmp;var Va=env._setenv;var Wa=env._times;var Xa=0.0;\n// EMSCRIPTEN_START_FUNCS\nfunction nb(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function ob(){return l|0}function pb(a){a=a|0;l=a}function qb(a,b){a=a|0;b=b|0;l=a;m=b}function rb(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function sb(a){a=a|0;z=a}function tb(){return z|0}function ub(a){a=a|0;c[41840]=a;return 0}function vb(){return c[41840]|0}function wb(a,b){a=a|0;b=b|0;Ia(0,a|0,b|0)|0;return}function xb(a){a=a|0;c[42184]=a;return}function yb(a){a=a|0;if(a|0)c[42179]=a;return}function zb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i+4|0;g=i;c[f>>2]=0;h=ls()|0;qs(h,10904);qs(h,17148);_l(1)|0;Zl(16)|0;fp(1);while(1){a=Tn(a)|0;e=c[f>>2]|0;if(!a)break;if(!e){ms(h,a,d)|0;ps(h,a,b,f,g)|0;ir(h,a)|0}mn(a)|0;a=174185}l=i;return e|0}function Ab(a){a=a|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;f=c[(c[a+16>>2]|0)+8>>2]|0;a=a+64|0;switch(c[a>>2]|0){case 0:{wx(f);break}case 1:{if(b[(c[f+16>>2]|0)+136>>1]&1)oB(f);break}case 4:case 5:case 6:{tx(f,e,d);Db(f,c[e>>2]|0,c[d>>2]|0,c[a>>2]|0);break}default:{}}l=g;return}function Bb(a){a=a|0;var b=0,d=0,e=0,f=0;d=c[(c[a+16>>2]|0)+8>>2]|0;if(!(c[41841]|0)){c[41841]=c[4442];c[41842]=9;c[41843]=17}e=d+64|0;f=(c[e>>2]|0)+8|0;b=c[f>>2]|0;c[f>>2]=167364;switch(c[a+64>>2]|0){case 2:{jx(a,d,a,0);break}case 3:{jx(a,d,a,1);break}case 1:case 0:{if(!(c[a+152>>2]&134217728))$p(d,a)|0;break}case 6:case 5:case 4:{Cb(d);if(!(c[a+152>>2]&134217728))$p(d,a)|0;break}default:{}}c[(c[e>>2]|0)+8>>2]=b;return}function Cb(b){b=b|0;var d=0,e=0;d=c[41845]|0;if((d|0)!=(c[41844]|0)){e=c[c[41876]>>2]|0;if(!e){e=uB(b,0,84827,174185)|0;c[c[41876]>>2]=e;d=c[41845]|0}if(d>>>0>=(c[41846]|0)>>>0){em(167376,1)|0;d=c[41845]|0}a[d>>0]=0;d=c[41844]|0;c[41845]=d;Dm(b,e,d)|0}if(c[(c[b+16>>2]|0)+12>>2]|0){e=c[(c[41876]|0)+4>>2]|0;d=c[41861]|0;if(d>>>0>=(c[41862]|0)>>>0){em(167440,1)|0;d=c[41861]|0}a[d>>0]=0;d=c[41860]|0;c[41861]=d;Dm(b,e,d)|0}Mm(b,59577,c[(c[41876]|0)+8236>>2]|0,174185)|0;d=0;while(1){if((d|0)==8)break;hm(167376+(d<<4)|0);d=d+1|0}$I(c[41876]|0);h[1]=1.0;h[5]=1.0;c[41877]=0;c[41881]=0;return}function Db(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=_I(8240)|0;c[41876]=i;a:do switch(g|0){case 6:{b[i+8232>>1]=14;g=59593;break}case 5:{b[i+8232>>1]=12;g=59597;break}default:{g=Jm(d,59577)|0;if((g|0?a[g>>0]|0:0)?(h=Eb(g)|0,(h&65535)>10):0){i=c[41876]|0;b[i+8232>>1]=h;break a}g=Eb(59589)|0;i=c[41876]|0;b[i+8232>>1]=g;g=59589}}while(0);c[i+8236>>2]=g;j=d+16|0;g=c[j>>2]|0;if(!(c[g+180>>2]|0))h=0;else{h=uB(d,0,84827,174185)|0;i=c[41876]|0;g=c[j>>2]|0}c[i>>2]=h;if(!(a[g+113>>0]&8))g=0;else g=uB(d,0,59601,174185)|0;c[(c[41876]|0)+4>>2]=g;i=uB(d,1,84827,174185)|0;c[(c[41876]|0)+8>>2]=i;i=uB(d,1,59601,174185)|0;c[(c[41876]|0)+12>>2]=i;i=uB(d,2,84827,174185)|0;g=c[41876]|0;c[g+16>>2]=i;if(!f)h=0;else{h=uB(d,2,59609,174185)|0;g=c[41876]|0}c[g+20>>2]=h;if(!e)h=0;else{h=uB(d,2,59617,174185)|0;g=c[41876]|0}c[g+24>>2]=h;h=a[(c[j>>2]|0)+113>>0]|0;if(!(h&33))i=0;else{i=uB(d,2,59601,174185)|0;g=c[41876]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+28>>2]=i;if(!(h&2))i=0;else{i=uB(d,2,59625,174185)|0;g=c[41876]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+32>>2]=i;if(!(h&4))h=0;else{h=uB(d,2,59634,174185)|0;g=c[41876]|0}c[g+36>>2]=h;g=0;while(1){if((g|0)==8)break;dm(167376+(g<<4)|0,1024,(c[41876]|0)+40+(g<<10)|0);g=g+1|0}return}function Eb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+1040|0;h=j;g=j+8|0;f=0;d=b;a:while(1){do{e=d;d=d+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a}while(((e<<24>>24)+-48|0)>>>0>=10);if((f|0)>=1023){i=7;break}a[g+f>>0]=e;f=f+1|0}if((i|0)==7){c[h>>2]=b;$l(0,59643,h)|0}a[g+f>>0]=0;i=(sM(g)|0)&65535;l=j;return i|0}function Fb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;d=c[c[41876]>>2]|0;b=c[41849]|0;if(b>>>0>=(c[41850]|0)>>>0){em(167392,1)|0;b=c[41849]|0}a[b>>0]=0;b=c[41848]|0;c[41849]=b;Dm(e,d,b)|0;if(c[(c[e+16>>2]|0)+12>>2]|0){d=c[(c[41876]|0)+4>>2]|0;b=c[41865]|0;if(b>>>0>=(c[41866]|0)>>>0){em(167456,1)|0;b=c[41865]|0}a[b>>0]=0;b=c[41864]|0;c[41865]=b;Dm(e,d,b)|0}h[2]=1.0;h[6]=1.0;c[41878]=0;c[41882]=0;return}function Gb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[41849]|0;if((c[41848]|0)!=(b|0)){d=c[(c[41876]|0)+8>>2]|0;if(b>>>0>=(c[41850]|0)>>>0){em(167392,1)|0;b=c[41849]|0}a[b>>0]=0;b=c[41848]|0;c[41849]=b;Dm(e,d,b)|0}b=c[41865]|0;if((c[41864]|0)!=(b|0)){d=c[(c[41876]|0)+12>>2]|0;if(b>>>0>=(c[41866]|0)>>>0){em(167456,1)|0;b=c[41865]|0}a[b>>0]=0;b=c[41864]|0;c[41865]=b;Dm(e,d,b)|0}h[9]=1.0;h[11]=1.0;c[41885]=0;c[41887]=0;return}function Hb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[41849]|0;if((c[41848]|0)!=(b|0)){d=c[(c[41876]|0)+16>>2]|0;if(b>>>0>=(c[41850]|0)>>>0){em(167392,1)|0;b=c[41849]|0}a[b>>0]=0;b=c[41848]|0;c[41849]=b;Dm(e,d,b)|0}b=c[41853]|0;if((c[41852]|0)!=(b|0)){d=c[(c[41876]|0)+24>>2]|0;if(b>>>0>=(c[41854]|0)>>>0){em(167408,1)|0;b=c[41853]|0}a[b>>0]=0;b=c[41852]|0;c[41853]=b;Dm(e,d,b)|0}b=c[41857]|0;if((c[41856]|0)!=(b|0)){d=c[(c[41876]|0)+20>>2]|0;if(b>>>0>=(c[41858]|0)>>>0){em(167424,1)|0;b=c[41857]|0}a[b>>0]=0;b=c[41856]|0;c[41857]=b;Dm(e,d,b)|0}b=c[41865]|0;if((c[41864]|0)!=(b|0)){d=c[(c[41876]|0)+28>>2]|0;if(b>>>0>=(c[41866]|0)>>>0){em(167456,1)|0;b=c[41865]|0}a[b>>0]=0;b=c[41864]|0;c[41865]=b;Dm(e,d,b)|0}b=c[41869]|0;if((c[41868]|0)!=(b|0)){d=c[(c[41876]|0)+36>>2]|0;if(b>>>0>=(c[41870]|0)>>>0){em(167472,1)|0;b=c[41869]|0}a[b>>0]=0;b=c[41868]|0;c[41869]=b;Dm(e,d,b)|0}b=c[41873]|0;if((c[41872]|0)!=(b|0)){d=c[(c[41876]|0)+32>>2]|0;if(b>>>0>=(c[41874]|0)>>>0){em(167488,1)|0;b=c[41873]|0}a[b>>0]=0;b=c[41872]|0;c[41873]=b;Dm(e,d,b)|0}h[10]=1.0;h[12]=1.0;h[3]=1.0;h[4]=1.0;h[7]=1.0;h[8]=1.0;c[41886]=0;c[41888]=0;c[41879]=0;c[41880]=0;c[41883]=0;c[41884]=0;return}function Ib(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1056|0;j=t+16|0;s=t+8|0;r=t;k=t+32|0;o=c[(c[d+16>>2]|0)+12>>2]|0;p=c[11344+(o<<2)>>2]|0;gm(p,59746)|0;g=f+4|0;Rb(k,+h[(c[g>>2]|0)+16>>3]);gm(p,k)|0;Ub(d,174185,c[c[g>>2]>>2]|0);Ob(d);q=a[f+48>>0]|0;q=q<<24>>24==108?-1:q<<24>>24==114&1;g=c[g>>2]|0;if(!g)g=0;else g=c[g+24>>2]&127;i=b[(c[41876]|0)+8232>>1]|0;if((i&65535)>14?(m=c[11392+((i&65535)+-15<<2)>>2]&g,n=167508+(o<<2)|0,(c[n>>2]|0)!=(m|0)):0){c[r>>2]=m;qL(k,59749,r)|0;gm(p,k)|0;c[n>>2]=m}r=e+8|0;h[r>>3]=+h[r>>3]+ +h[f+24>>3];gm(p,59755)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];Qb(p,j);c[s>>2]=q;qL(k,87254,s)|0;gm(p,k)|0;Rb(k,+h[f+32>>3]);gm(p,k)|0;Ub(d,174185,c[f>>2]|0);l=t;return}function Jb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+1040|0;f=i;g=i+16|0;e=c[(c[a+16>>2]|0)+12>>2]|0;Nb(a);Ob(a);if(!d){a=c[11344+(e<<2)>>2]|0;gm(a,59743)|0}else{if((d|1|0)==3)Wb(a,d,b,2);else Xb(a);a=c[11344+(e<<2)>>2]|0;gm(a,59740)|0};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Qb(a,f);Rb(g,+h[b+16>>3]-+h[b>>3]);gm(a,g)|0;Rb(g,+h[b+24>>3]-+h[b+8>>3]);gm(a,g)|0;l=i;return}function Kb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Nb(a);Ob(a);if(!d)Pb(a,112,b,c);else{if((d|1|0)==3)Wb(a,d,b,c);else Xb(a);Pb(a,80,b,c)}return}function Lb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Nb(a);Ob(a);if(!f)Pb(a,66,b,c);else{if((f|1|0)==3)Wb(a,f,b,c);else Xb(a);Pb(a,98,b,c)}return}function Mb(a,b,c){a=a|0;b=b|0;c=c|0;Nb(a);Ob(a);Pb(a,76,b,c);return}function Nb(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+1184|0;i=n;f=n+24|0;m=n+8|0;dm(m,1024,n+152|0);j=b+16|0;d=c[j>>2]|0;g=+h[d+152>>3];e=8+(c[d+12>>2]<<3)|0;if(g!=+h[e>>3]){h[e>>3]=g;gm(m,59706)|0;h[i>>3]=+h[(c[j>>2]|0)+152>>3];qL(f,59720,i)|0;Sb(f,0);gm(m,f)|0;f=m+4|0;d=c[f>>2]|0;e=m+8|0;if(d>>>0>=(c[e>>2]|0)>>>0){em(m,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=41;d=c[f>>2]|0;if(d>>>0>=(c[e>>2]|0)>>>0){em(m,1)|0;d=c[f>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[f>>2]=d;Ub(b,59725,d);d=c[j>>2]|0}d=c[d+160>>2]|0;if(d|0){j=m+4|0;k=m+8|0;a:while(1){i=d+4|0;d=c[d>>2]|0;if(!d)break;switch(a[d>>0]|0){case 102:{if(!(yJ(d,95923)|0)){d=i;continue a}break}case 98:{if(!(yJ(d,95905)|0)){d=i;continue a}break}case 115:{if(!(yJ(d,95910)|0)){d=i;continue a}break}default:{}}gm(m,d)|0;do{f=d;d=d+1|0}while((a[f>>0]|0)!=0);if(a[d>>0]|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=40;f=0;while(1){if(!(a[d>>0]|0))break;if(f|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=44}gm(m,d)|0;do{e=d;d=d+1|0}while((a[e>>0]|0)!=0);f=f+1|0}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=41}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){em(m,1)|0;d=c[j>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[j>>2]=d;Ub(b,59725,d);d=i}hm(m)}l=n;return}function Ob(a){a=a|0;Tb((c[a+16>>2]|0)+16|0);Ub(a,68667,173886);return}function Pb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;j=k;i=k+16|0;h=c[11344+(c[(c[b+16>>2]|0)+12>>2]<<2)>>2]|0;g=h+4|0;b=c[g>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){em(h,1)|0;b=c[g>>2]|0}c[g>>2]=b+1;a[b>>0]=d;c[j>>2]=f;qL(i,59670,j)|0;gm(h,i)|0;b=0;while(1){if((b|0)>=(f|0))break;i=e+(b<<4)|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];Qb(h,j);b=b+1|0}l=k;return}function Qb(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+1024|0;d=c;Rb(d,+h[b>>3]);gm(a,d)|0;Rb(d,+ix(+h[b+8>>3]));gm(a,d)|0;l=c;return}function Rb(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;h[d>>3]=b>-1.0e-08&b<1.0e-08?0.0:b;qL(a,59675,d)|0;Sb(a,1);l=c;return}function Sb(b,c){b=b|0;c=c|0;var d=0,e=0;d=XJ(b,46)|0;if(!d){if(c|0){d=b+(sJ(b)|0)|0;e=10}}else{while(1){b=d+1|0;if(!(a[b>>0]|0))break;else d=b}a:while(1){switch(a[d>>0]|0){case 46:{e=5;break a}case 48:break;default:{e=6;break a}}a[d>>0]=0;d=d+-1|0}if((e|0)==5)a[d>>0]=0;else if((e|0)==6)d=d+1|0;if(c|0)e=10}if((e|0)==10){a[d>>0]=32;a[d+1>>0]=0}return}function Tb(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j;e=a[b+3>>0]|0;f=d[b>>0]|0;g=d[b+1>>0]|0;b=d[b+2>>0]|0;if(e<<24>>24==-1){c[h>>2]=f;c[h+4>>2]=g;c[h+8>>2]=b;qL(173886,68547,h)|0}else{c[i>>2]=f;c[i+4>>2]=g;c[i+8>>2]=b;c[i+12>>2]=e&255;qL(173886,59688,i)|0}l=j;return}function Ub(a,b,d){a=a|0;b=b|0;d=d|0;Vb(c[11344+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0,b,d);return}function Vb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+1040|0;h=f;g=f+8|0;i=sJ(e)|0;c[h>>2]=d;c[h+4>>2]=i;qL(g,59681,h)|0;gm(b,g)|0;gm(b,e)|0;e=b+4|0;d=c[e>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){em(b,1)|0;d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=32;l=f;return}function Wb(b,d,f,i){b=b|0;d=d|0;f=f|0;i=i|0;var j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+1120|0;t=x+64|0;w=x+80|0;k=x+32|0;r=x+16|0;s=x;u=c[b+16>>2]|0;j=+(c[u+136>>2]|0)*.017453292519943295;if((e[(c[41876]|0)+8232>>1]|0)<14)Xb(b);else{dm(w,1024,x+96|0);v=(d|0)==2;if(v){KB(f,k,i,j,2);f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){em(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=91;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];Qb(w,t);s=k+16|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];Qb(w,t)}else{KB(f,k,i,0.0,3);q=+h[k+24>>3];o=+h[k>>3];if(j==0.0){n=+h[k+8>>3];p=q*.25;j=n;m=o}else{p=q*.25;y=p;m=+E(+j)*y+o;n=+h[k+8>>3];j=+F(+j)*y+n}h[r>>3]=m;h[r+8>>3]=j;h[s>>3]=o;h[s+8>>3]=n;f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){em(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=40;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];Qb(w,t);Yb(w,p);c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];Qb(w,t);Yb(w,q)}gm(w,59731)|0;d=u+140|0;j=+g[d>>2];f=u+56|0;if(j>0.0){Zb(w,j,f);Zb(w,+g[d>>2],u+96|0)}else{Zb(w,0.0,f);Zb(w,1.0,u+96|0)}im(w)|0;k=w+4|0;d=c[k>>2]|0;i=w+8|0;f=d>>>0>=(c[i>>2]|0)>>>0;if(v){if(f){em(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=93}else{if(f){em(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=41}d=c[k>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){em(w,1)|0;d=c[k>>2]|0}a[d>>0]=0;v=c[w>>2]|0;c[k>>2]=v;Ub(b,59728,v);hm(w)}l=x;return}function Xb(a){a=a|0;Tb((c[a+16>>2]|0)+56|0);Ub(a,59728,173886);return}function Yb(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+1024|0;d=c;Rb(d,b);gm(a,d)|0;l=c;return}function Zb(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;h[f>>3]=b;qL(e,59734,f)|0;Sb(e,1);Tb(c);Vb(a,e,173886);l=d;return}function _b(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0;e=l;l=l+1040|0;i=e;f=e+16|0;g=c[11344+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0;gm(g,59843)|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];Qb(g,i);Rb(f,+h[d+16>>3]-+h[d>>3]);gm(g,f)|0;Rb(f,+h[d+24>>3]-+h[d+8>>3]);gm(g,f)|0;Ub(a,174185,c[b+8>>2]|0);l=e;return}function $b(a){a=a|0;var b=0;switch(c[a+64>>2]|0){case 0:{b=zr(c[a>>2]|0)|0;ns(b,c[(c[a+16>>2]|0)+8>>2]|0,60630,0)|0;Ar(b);break}case 1:{wx(c[(c[a>>2]|0)+168>>2]|0);break}default:{}}return}function ac(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;e=c[(c[b+16>>2]|0)+8>>2]|0;if(!(c[41889]|0)){c[41889]=c[4442];c[41890]=9;c[41891]=17}c[(c[e+64>>2]|0)+8>>2]=167556;bc(e,1);c[d>>2]=0;a[d+4>>0]=(a[(c[e+16>>2]|0)+115>>0]|0)==1&1;g=c[b+64>>2]|0;a[d+5>>0]=((g|0)==0|(g|0)==3)&1;a[d+6>>0]=0;cc(e,b,1,d);l=f;return}function bc(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=Kp(a)|0;while(1){if(!d)break;bc(d,0);d=Lp(d)|0}a:do if(b|0){b=eo(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Qm(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Sm(a,d)|0}b=fo(a,b)|0}}while(0);return}function cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q+8|0;o=q;n=(d|0)!=0;if(n){m=Rl(11764,c[4345]|0)|0;To(a,1,86799,12,0);To(a,2,86799,12,0);To(a,0,86799,-12,0);f=dc(a,0,m)|0;j=eo(a)|0;i=0;g=0;while(1){if(!j)break;if(!(WJ(En(j)|0,93039,7)|0)){k=g;g=ec(m,En(j)|0)|0}else{k=g+1|0;g=g+f|0}c[(Mo(j,86799,0)|0)+8>>2]=g;h=Qm(a,j)|0;g=i;while(1){if(!h)break;c[(Mo(h,86799,0)|0)+8>>2]=g;h=Sm(a,h)|0;g=g+1|0}j=fo(a,j)|0;i=g;g=k}Ll(m)|0}else f=0;m=c[e>>2]|0;c[e>>2]=m+1;fc(b,m);nr(b,82337)|0;gc(a,b,d,e);hc(a,b,e);nr(b,82308)|0;fc(b,c[e>>2]|0);if(n){c[o>>2]=f;tr(b,59846,o)}else{c[p>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,59866,p)}jc(a,b,d,ic(a,b,d,e)|0,e);kc(a,b,d,e);nr(b,134901)|0;p=(c[e>>2]|0)+-1|0;c[e>>2]=p;fc(b,p);if(n)nr(b,95830)|0;else nr(b,68190)|0;l=q;return}function dc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((to(a)|0)!=(a|0)){e=b+1|0;c[(Mo(a,86799,0)|0)+8>>2]=b;if(!(WJ(En(a)|0,93039,7)|0)){b=En(a)|0;wc(d,b,c[(Mo(a,86799,0)|0)+8>>2]|0);b=e}else b=e}e=Kp(a)|0;while(1){if(!e)break;a=dc(e,b,d)|0;e=Lp(e)|0;b=a}return b|0}function ec(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b,512)|0;if(!a)a=-1;else a=c[a+12>>2]|0;return a|0}function fc(a,b){a=a|0;b=b|0;while(1){if((b|0)<=0)break;nr(a,60598)|0;b=b+-1|0}return}function gc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;i=h;j=En(a)|0;fc(b,c[e>>2]|0);c[i>>2]=nc(j,e)|0;tr(b,59954,i);if(d|0){nr(b,82308)|0;fc(b,c[e>>2]|0);j=(rn(a)|0)!=0;c[f>>2]=j?92685:122100;tr(b,60568,f);fc(b,c[e>>2]|0);j=(tn(a)|0)!=0;c[g>>2]=j?92685:122100;tr(b,60585,g)}l=h;return}function hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;i=to(b)|0;j=c[b>>2]&3;f=Em(i,j,0)|0;a:do if(f|0){k=e+5|0;while(1){if(!f)break a;g=Km(b,f)|0;do if(g|0){h=f+8|0;if(!(a[g>>0]|0)){g=c[h>>2]|0;if((a[g>>0]|0)!=108)break;if(yJ(g,86240)|0)break}nr(d,82308)|0;fc(d,c[e>>2]|0);c[m>>2]=nc(c[h>>2]|0,e)|0;tr(d,60004,m);if(a[k>>0]|0?pc(c[h>>2]|0)|0:0){qc(Km(b,f)|0,d,e);break}c[n>>2]=nc(Km(b,f)|0,e)|0;tr(d,60011,n)}while(0);f=Em(i,j,f)|0}}while(0);l=o;return}function ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=Kp(a)|0;if(f){nr(b,82308)|0;g=c[e>>2]|0;c[e>>2]=g+1;fc(b,g);g=(d|0)!=0;if(g){nr(b,59928)|0;a=0;d=f}else{nr(b,59988)|0;fc(b,c[e>>2]|0);a=0;d=f}while(1){if(!d)break;if(!a)a=1;else nr(b,82308)|0;if(g)oc(d,b,e);else{c[h>>2]=c[(Mo(d,86799,0)|0)+8>>2];tr(b,122187,h)}d=Lp(d)|0}if(g)a=1;else{c[e>>2]=(c[e>>2]|0)+-1;nr(b,134901)|0;fc(b,c[e>>2]|0);nr(b,82303)|0;a=1}}else a=0;l=i;return a|0}function jc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=eo(a)|0;if(!g){if((d|0)!=0&(e|0)!=0){c[f>>2]=(c[f>>2]|0)+-1;nr(b,134901)|0;fc(b,c[f>>2]|0);nr(b,82303)|0}}else{nr(b,82308)|0;h=(d|0)!=0;if(h)if(!e){e=c[f>>2]|0;c[f>>2]=e+1;fc(b,e);nr(b,59928)|0;e=0}else e=0;else{e=c[f>>2]|0;c[f>>2]=e+1;fc(b,e);nr(b,59942)|0;fc(b,c[f>>2]|0);e=0}while(1){if(!g)break;if(WJ(En(g)|0,93039,7)|0){do if(e)if(h){nr(b,82308)|0;break}else{nr(b,86030)|0;break}else e=1;while(0);mc(g,b,d,f)}g=fo(a,g)|0}c[f>>2]=(c[f>>2]|0)+-1;nr(b,134901)|0;fc(b,c[f>>2]|0);nr(b,82303)|0}return}function kc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=eo(a)|0;a:do if(f|0){while(1){if(!f)break a;if(Qm(a,f)|0)break;f=fo(a,f)|0}nr(b,82308)|0;i=c[e>>2]|0;c[e>>2]=i+1;fc(b,i);nr(b,59878)|0;i=(d|0)!=0;if(i)g=0;else{fc(b,c[e>>2]|0);g=0}while(1){if(!f)break;h=Qm(a,f)|0;while(1){if(!h)break;do if(g)if(i){nr(b,82308)|0;break}else{nr(b,86030)|0;break}else g=1;while(0);lc(h,b,d,e);h=Sm(a,h)|0}f=fo(a,f)|0}c[e>>2]=(c[e>>2]|0)+-1;nr(b,134901)|0;fc(b,c[e>>2]|0);nr(b,82303)|0}while(0);return}function lc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;h=j+16|0;g=j+8|0;f=j;if(!d){c[i>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,122187,i)}else{i=c[e>>2]|0;c[e>>2]=i+1;fc(b,i);nr(b,82337)|0;fc(b,c[e>>2]|0);c[f>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,59890,f);fc(b,c[e>>2]|0);c[g>>2]=c[(Mo(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0,86799,0)|0)+8>>2];tr(b,59904,g);fc(b,c[e>>2]|0);c[h>>2]=c[(Mo(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0,86799,0)|0)+8>>2];tr(b,59917,h);hc(a,b,e);nr(b,134901)|0;i=(c[e>>2]|0)+-1|0;c[e>>2]=i;fc(b,i);nr(b,68190)|0}l=j;return}function mc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i+16|0;g=i+8|0;f=i;if(!d){c[h>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,122187,h)}else{h=c[e>>2]|0;c[e>>2]=h+1;fc(b,h);nr(b,82337)|0;fc(b,c[e>>2]|0);c[f>>2]=c[(Mo(a,86799,0)|0)+8>>2];tr(b,59890,f);fc(b,c[e>>2]|0);c[g>>2]=nc(En(a)|0,e)|0;tr(b,59954,g);hc(a,b,e);nr(b,134901)|0;h=(c[e>>2]|0)+-1|0;c[e>>2]=h;fc(b,h);nr(b,68190)|0}l=i;return}function nc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+4|0;if(a[g>>0]|0)b=zB(b)|0;if(!(c[41892]|0)){dm(167568,1024,0);e=b}else e=b;a:while(1){f=a[e>>0]|0;switch(f<<24>>24){case 0:break a;case 34:{gm(167568,59967)|0;break}case 92:{gm(167568,81579)|0;break}case 47:{gm(167568,59970)|0;break}case 8:{gm(167568,59973)|0;break}case 12:{gm(167568,59976)|0;break}case 10:{gm(167568,59979)|0;break}case 13:{gm(167568,59982)|0;break}case 9:{gm(167568,59985)|0;break}default:{d=c[41893]|0;if(d>>>0>=(c[41894]|0)>>>0){em(167568,1)|0;d=c[41893]|0}c[41893]=d+1;a[d>>0]=f}}e=e+1|0}d=c[41893]|0;if(d>>>0>=(c[41894]|0)>>>0){em(167568,1)|0;d=c[41893]|0}a[d>>0]=0;d=c[41892]|0;c[41893]=d;if(a[g>>0]|0)$I(b);return d|0}function oc(a,b,c){a=a|0;b=b|0;c=c|0;cc(a,b,0,c);a=Kp(a)|0;while(1){if(!a)break;nr(b,82308)|0;oc(a,b,c);a=Lp(a)|0}return}function pc(b){b=b|0;var c=0;c=b+1|0;a:do if((a[b>>0]|0)==95){b=(a[c>>0]|0)+-100<<24>>24;switch(((b&255)>>>2|b<<6&255)<<24>>24){case 0:{if(!(yJ(c,60525)|0)){b=1;break a}break}case 2:{if(!(yJ(c,60531)|0)){b=1;break a}break}case 1:{if(!(yJ(c,60538)|0)){b=1;break a}return (yJ(c,60552)|0)==0|0}case 4:{if(!(yJ(c,60545)|0)){b=1;break a}b=(yJ(c,60560)|0)==0&1;break a}default:{b=0;break a}}b=0}else b=0;while(0);return b|0}function qc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;do if(b|0?a[b>>0]|0:0){h=xt(b)|0;if(!h){c[f>>2]=b;$l(0,60016,f)|0;break}nr(d,134901)|0;g=c[e>>2]|0;c[e>>2]=g+1;fc(d,g);nr(d,60043)|0;g=h+8|0;b=0;f=0;while(1){if((f|0)>=(c[h>>2]|0))break;if(!b)b=1;else nr(d,82308)|0;rc((c[g>>2]|0)+(f*80|0)|0,d,e);f=f+1|0}c[e>>2]=(c[e>>2]|0)+-1;nr(d,134901)|0;fc(d,c[e>>2]|0);nr(d,82303)|0;yt(h)}while(0);l=i;return}function rc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;A=l;l=l+240|0;y=A+224|0;x=A+216|0;w=A+208|0;v=A+200|0;u=A+192|0;t=A+184|0;s=A+176|0;r=A+152|0;q=A+136|0;p=A+128|0;o=A+112|0;n=A+104|0;m=A+96|0;k=A+88|0;j=A+72|0;i=A+48|0;z=A+40|0;g=A+8|0;f=A;e=c[d>>2]|0;c[d>>2]=e+1;fc(b,e);nr(b,82337)|0;fc(b,c[d>>2]|0);e=c[a>>2]|0;a:do switch(e|0){case 1:case 0:{c[f>>2]=(e|0)==0?69:101;tr(b,60046,f);fc(b,c[d>>2]|0);D=+h[a+16>>3];C=+h[a+24>>3];B=+h[a+32>>3];h[g>>3]=+h[a+8>>3];h[g+8>>3]=D;h[g+16>>3]=C;h[g+24>>3]=B;tr(b,60059,g);break}case 3:case 2:{c[z>>2]=(e|0)==2?80:112;tr(b,60046,z);fc(b,c[d>>2]|0);sc(b,a+8|0);break}case 5:case 4:{c[i>>2]=(e|0)==4?66:98;tr(b,60046,i);fc(b,c[d>>2]|0);sc(b,a+8|0);break}case 6:{tr(b,60094,A+56|0);fc(b,c[d>>2]|0);sc(b,a+8|0);break}case 7:{tr(b,60106,A+64|0);fc(b,c[d>>2]|0);D=+h[a+16>>3];h[j>>3]=+h[a+8>>3];h[j+8>>3]=D;tr(b,60118,j);fc(b,c[d>>2]|0);z=c[a+24>>2]|0;c[k>>2]=(z|0)==0?108:(z|0)==1?99:114;tr(b,60140,k);fc(b,c[d>>2]|0);h[m>>3]=+h[a+32>>3];tr(b,60156,m);fc(b,c[d>>2]|0);c[n>>2]=nc(c[a+40>>2]|0,d)|0;tr(b,60173,n);break}case 9:case 8:{c[o>>2]=(e|0)==8?67:99;tr(b,60046,o);fc(b,c[d>>2]|0);tr(b,60187,A+120|0);fc(b,c[d>>2]|0);c[p>>2]=nc(c[a+8>>2]|0,d)|0;tr(b,60204,p);break}case 13:case 14:{c[q>>2]=(e|0)==13?67:99;tr(b,60046,q);fc(b,c[d>>2]|0);switch(c[a+8>>2]|0){case 0:{tr(b,60187,A+144|0);fc(b,c[d>>2]|0);c[r>>2]=nc(c[a+16>>2]|0,d)|0;tr(b,60204,r);break a}case 1:{tr(b,60219,A+160|0);fc(b,c[d>>2]|0);tc(b,a+16|0,d);break a}default:{tr(b,60238,A+168|0);fc(b,c[d>>2]|0);uc(b,a+16|0,d);break a}}}case 10:{tr(b,60257,s);fc(b,c[d>>2]|0);h[t>>3]=+h[a+8>>3];tr(b,60269,t);fc(b,c[d>>2]|0);c[u>>2]=nc(c[a+16>>2]|0,d)|0;tr(b,60285,u);break}case 11:{tr(b,60299,v);fc(b,c[d>>2]|0);c[w>>2]=nc(c[a+8>>2]|0,d)|0;tr(b,60311,w);break}case 15:{tr(b,60326,x);fc(b,c[d>>2]|0);c[y>>2]=c[a+8>>2];tr(b,60338,y);break}default:{}}while(0);z=(c[d>>2]|0)+-1|0;c[d>>2]=z;fc(b,z);nr(b,68190)|0;l=A;return}function sc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;j=l;l=l+48|0;i=j+32|0;g=j+16|0;f=j+8|0;e=c[b>>2]|0;d=c[b+4>>2]|0;tr(a,60499,j);b=0;while(1){if((b|0)>=(e|0))break;if((b|0)>0)tr(a,86030,f);k=+h[d+(b*24|0)+8>>3];h[g>>3]=+h[d+(b*24|0)>>3];h[g+8>>3]=k;tr(a,60511,g);b=b+1|0}tr(a,60452,i);l=j;return}function tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0;e=l;l=l+32|0;f=e+16|0;i=e;fc(a,c[d>>2]|0);g=+h[b+8>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=g;tr(a,60455,i);fc(a,c[d>>2]|0);g=+h[b+24>>3];h[f>>3]=+h[b+16>>3];h[f+8>>3]=g;tr(a,60477,f);fc(a,c[d>>2]|0);vc(a,c[b+32>>2]|0,c[b+36>>2]|0,d);l=e;return}function uc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0;e=l;l=l+48|0;f=e+24|0;j=e;fc(a,c[d>>2]|0);g=+h[b+8>>3];i=+h[b+16>>3];h[j>>3]=+h[b>>3];h[j+8>>3]=g;h[j+16>>3]=i;tr(a,60354,j);fc(a,c[d>>2]|0);i=+h[b+32>>3];g=+h[b+40>>3];h[f>>3]=+h[b+24>>3];h[f+8>>3]=i;h[f+16>>3]=g;tr(a,60382,f);fc(a,c[d>>2]|0);vc(a,c[b+48>>2]|0,c[b+52>>2]|0,d);l=e;return}function vc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+48|0;k=m+32|0;j=m+16|0;i=m+8|0;tr(a,60410,m);f=0;while(1){if((f|0)>=(b|0))break;if((f|0)>0)tr(a,86030,i);o=+g[d+(f<<3)>>2];n=nc(c[d+(f<<3)+4>>2]|0,e)|0;h[j>>3]=o;c[j+8>>2]=n;tr(a,60421,j);f=f+1|0}tr(a,60452,k);l=m;return}function wc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=bb[c[a>>2]&31](a,b,512)|0;if(e){if((c[e+12>>2]|0)!=(d|0)){c[f>>2]=b;$l(0,60601,f)|0}}else{f=aJ(1,16)|0;c[f+8>>2]=HL(b)|0;c[f+12>>2]=d;bb[c[a>>2]&31](a,f,1)|0}l=g;return}function xc(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b+8>>2]|0);$I(b);return}function yc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;nr(a,61456)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;tr(a,61466,g);c[e>>2]=En(c[f+8>>2]|0)|0;tr(a,61501,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;tr(a,61514,d);nr(a,61527)|0;nr(a,61537)|0;nr(a,61545)|0;nr(a,61553)|0;nr(a,61561)|0;nr(a,61569)|0;nr(a,61577)|0;nr(a,61581)|0;nr(a,61586)|0;l=b;return}function zc(a){a=a|0;nr(a,61437)|0;return}function Ac(a){a=a|0;c[41896]=2;return}function Bc(a){a=a|0;c[41896]=1;return}function Cc(a){a=a|0;c[41896]=2;return}function Dc(a){a=a|0;c[41896]=0;return}function Ec(a){a=a|0;c[41896]=2;return}function Fc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;p=l;l=l+80|0;o=p;m=c[(c[b+16>>2]|0)+16>>2]|0;n=c[41896]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;j=c[e>>2]|0;k=g*.3333333333333333*+((sJ(j)|0)>>>0);f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;s=a[e+48>>0]|0;r=+h[d>>3];q=+h[d+8>>3];e=Pc(j)|0;c[o>>2]=4;c[o+4>>2]=s<<24>>24==108?0:s<<24>>24==114?2:1;c[o+8>>2]=m;c[o+12>>2]=n;c[o+16>>2]=0;c[o+20>>2]=f;h[o+24>>3]=g;h[o+32>>3]=i;c[o+40>>2]=6;h[o+48>>3]=g;h[o+56>>3]=k;c[o+64>>2]=~~(r+(r>=0.0?.5:-.5));c[o+68>>2]=~~(q+(q+-72.0>=0.0?-71.5:-72.5));c[o+72>>2]=e;tr(b,61382,o);l=p;return}function Gc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12652+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(yJ(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(Oc(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;tr(b,61325,j);k=10}break}default:ma(123205,60722,163,60753)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[41896]|0;Mc(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));tr(a,61260,f);l=e;return}function Ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[41896]|0;Mc(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;tr(a,61164,g);Nc(a,b,d,1);l=f;return}function Jc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;i=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;f=a+16|0;e=c[f>>2]|0;q=~~+h[e+152>>3];r=c[e+16>>2]|0;s=c[41896]|0;if((d|0)<=3)ma(60715,60722,360,60742);t=_I((d*140|0)+140|0)|0;Mc(e,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[f>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[i>>2]=~~(E+(E>=0.0?.5:-.5));c[i+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(qL(t,73932,i)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;QA(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(qL(e,73932,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;tr(a,61215,A);c[z>>2]=t;tr(a,73939,z);$I(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;tr(a,73944,B);e=e+1|0}nr(a,134901)|0;l=C;return}function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[41896]|0;Mc(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;tr(a,61164,f);Nc(a,b,d,0);l=e;return}function Lc(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a,61158,e);l=d;return}function Mc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function Nc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));tr(a,73932,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));tr(a,73932,i)}nr(a,134901)|0;l=j;return}function Oc(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[41897]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[170808+(g<<1)>>1]|0)-d|0;n=(b[171320+(g<<1)>>1]|0)-e|0;j=(b[171832+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[41897]=k+1;if((k|0)==256)g=i;else{b[170808+(g<<1)>>1]=d;b[171320+(g<<1)>>1]=e;b[171832+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function Pc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41898]|0;if(!d){c[41899]=64;d=_I(64)|0;c[41898]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[41899]|0;if((e|0)>(b+-8|0)){d=b<<1;c[41899]=d;d=bJ(c[41898]|0,d)|0;c[41898]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;qL(d+1|0,74057,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[41898]|0}function Qc(b){b=b|0;var d=0,e=0,f=0;e=c[b+16>>2]|0;switch(c[b+64>>2]|0){case 0:{nr(b,61053)|0;d=e+208|0;e=c[d>>2]|0;if(e|0?a[e>>0]|0:0){nr(b,61067)|0;nr(b,sw(c[d>>2]|0)|0)|0;nr(b,134901)|0}break}case 1:{d=e+208|0;f=c[d>>2]|0;if(f|0?a[f>>0]|0:0){nr(b,61067)|0;nr(b,sw(c[d>>2]|0)|0)|0;nr(b,87638)|0;nr(b,sw(En(c[e+8>>2]|0)|0)|0)|0;nr(b,134901)|0}break}case 3:{f=sw(En(c[e+8>>2]|0)|0)|0;nr(b,61076)|0;nr(b,f)|0;nr(b,61086)|0;nr(b,f)|0;nr(b,61041)|0;break}default:{}}return}function Rc(a){a=a|0;var b=0;b=c[a+16>>2]|0;switch(c[a+64>>2]|0){case 2:{Tc(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);break}case 3:{Tc(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);nr(a,61045)|0;break}default:{}}return}function Sc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+16>>2]|0;Tc(a,c[g+264>>2]|0,c[g+272>>2]|0,c[g+268>>2]|0,b,d,e,f);return}function Tc(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;y=l;l=l+128|0;x=y+120|0;u=y+112|0;t=y+96|0;s=y+80|0;r=y+56|0;w=y+48|0;q=y+40|0;v=y+24|0;p=y;a:do if((e|0)!=0&(f|0)!=0){m=f+10|0;if((c[41900]|0)<(f|0)){c[41900]=m;o=bJ(c[41901]|0,m<<3)|0;c[41901]=o}else o=c[41901]|0;m=0;while(1){if((m|0)>=(f|0))break;z=+h[e+(m<<4)>>3];c[o+(m<<3)>>2]=~~(z+(z>=0.0?.5:-.5));z=+h[e+(m<<4)+8>>3];c[o+(m<<3)+4>>2]=~~(z+(z>=0.0?.5:-.5));m=m+1|0}n=b+64|0;m=c[n>>2]|0;e=(g|0)!=0;if(e&(m|0)==0){if(!(a[g>>0]|0))break;switch(d|0){case 0:{v=c[o>>2]|0;w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[p>>2]=g;c[p+4>>2]=v;c[p+8>>2]=w;c[p+12>>2]=x;c[p+16>>2]=f;tr(b,60787,p);break a}case 1:{w=c[o>>2]|0;x=c[o+4>>2]|0;f=(c[o+8>>2]|0)-w|0;c[v>>2]=g;c[v+4>>2]=w;c[v+8>>2]=x;c[v+12>>2]=f;tr(b,60808,v);break a}case 2:{c[q>>2]=g;tr(b,60828,q);m=0;while(1){if((m|0)>=(f|0))break;v=c[41901]|0;x=c[v+(m<<3)+4>>2]|0;c[w>>2]=c[v+(m<<3)>>2];c[w+4>>2]=x;tr(b,60836,w);m=m+1|0}nr(b,134901)|0;break a}default:ma(123205,60843,63,60863)}}if(e&(m|0)==1){if(!(a[g>>0]|0))break;if(!d){w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[r>>2]=c[o>>2];c[r+4>>2]=w;c[r+8>>2]=x;c[r+12>>2]=f;c[r+16>>2]=g;c[r+20>>2]=i;tr(b,60880,r);break}else ma(123205,60843,75,60863)}if((m&-2|0)==2){switch(d|0){case 1:{nr(b,60913)|0;break}case 0:{nr(b,60934)|0;break}case 2:{nr(b,60953)|0;break}default:ma(123205,60843,91,60863)}if(k|0?a[k>>0]|0:0){nr(b,66433)|0;nr(b,vw(k)|0)|0;nr(b,83714)|0}if(e?a[g>>0]|0:0){nr(b,60972)|0;nr(b,vw(g)|0)|0;nr(b,83714)|0}if(j|0?a[j>>0]|0:0){nr(b,67392)|0;nr(b,sw(j)|0)|0;nr(b,83714)|0}if(i|0?a[i>>0]|0:0){nr(b,60980)|0;nr(b,sw(i)|0)|0;nr(b,83714)|0}nr(b,60989)|0;nr(b,60997)|0;b:do switch(d|0){case 1:{f=c[41901]|0;w=c[f>>2]|0;x=c[f+4>>2]|0;f=(c[f+8>>2]|0)-w|0;c[s>>2]=w;c[s+4>>2]=x;c[s+8>>2]=f;tr(b,61007,s);break}case 0:{v=c[41901]|0;w=c[v+12>>2]|0;x=c[v+8>>2]|0;f=c[v+4>>2]|0;c[t>>2]=c[v>>2];c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=f;tr(b,61016,t);break}case 2:{w=c[41901]|0;m=c[w+4>>2]|0;c[u>>2]=c[w>>2];c[u+4>>2]=m;tr(b,61028,u);m=1;while(1){if((m|0)>=(f|0))break b;v=c[41901]|0;w=c[v+(m<<3)+4>>2]|0;c[x>>2]=c[v+(m<<3)>>2];c[x+4>>2]=w;tr(b,61034,x);m=m+1|0}}default:{}}while(0);if((c[n>>2]|0)==3){nr(b,66257)|0;break}else{nr(b,61041)|0;break}}}while(0);l=y;return}function Uc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;nr(a,61456)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;tr(a,61466,g);c[e>>2]=En(c[f+8>>2]|0)|0;tr(a,61501,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;tr(a,61514,d);nr(a,61527)|0;nr(a,61537)|0;nr(a,61545)|0;nr(a,61553)|0;nr(a,61561)|0;nr(a,61569)|0;nr(a,61577)|0;nr(a,61581)|0;nr(a,61586)|0;l=b;return}function Vc(a){a=a|0;nr(a,61437)|0;return}function Wc(a){a=a|0;c[41902]=2;return}function Xc(a){a=a|0;c[41902]=1;return}function Yc(a){a=a|0;c[41902]=2;return}function Zc(a){a=a|0;c[41902]=0;return}function _c(a){a=a|0;c[41902]=2;return}function $c(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0;n=l;l=l+80|0;m=n;j=c[(c[b+16>>2]|0)+16>>2]|0;k=c[41902]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;q=a[e+48>>0]|0;p=+h[d>>3];o=+h[d+8>>3];e=jd(c[e>>2]|0)|0;c[m>>2]=4;c[m+4>>2]=q<<24>>24==108?0:q<<24>>24==114?2:1;c[m+8>>2]=j;c[m+12>>2]=k;c[m+16>>2]=0;c[m+20>>2]=f;h[m+24>>3]=g;h[m+32>>3]=i;c[m+40>>2]=4;h[m+48>>3]=0.0;h[m+56>>3]=0.0;c[m+64>>2]=~~(p+(p>=0.0?.5:-.5));c[m+68>>2]=~~(o+(o>=0.0?.5:-.5));c[m+72>>2]=e;tr(b,61382,m);l=n;return}function ad(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12652+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(yJ(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(id(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;tr(b,61325,j);k=10}break}case 0:{f=0;k=10;break}default:ma(123205,61346,168,61365)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function bd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[41902]|0;gd(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));tr(a,61260,f);l=e;return}function cd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[41902]|0;gd(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;tr(a,61164,g);hd(a,b,d,1);l=f;return}function dd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;f=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;e=a+16|0;p=c[e>>2]|0;q=~~+h[p+152>>3];r=c[p+16>>2]|0;s=c[41902]|0;t=_I((d*140|0)+140|0)|0;gd(p,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[e>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[f>>2]=~~(E+(E>=0.0?.5:-.5));c[f+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(qL(t,73932,f)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;QA(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(qL(e,73932,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;tr(a,61215,A);c[z>>2]=t;tr(a,73939,z);$I(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;tr(a,73944,B);e=e+1|0}nr(a,134901)|0;l=C;return}function ed(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[41902]|0;gd(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;tr(a,61164,f);hd(a,b,d,0);l=e;return}function fd(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a,61158,e);l=d;return}function gd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function hd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));tr(a,73932,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));tr(a,73932,i)}nr(a,134901)|0;l=j;return}function id(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[41903]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[172344+(g<<1)>>1]|0)-d|0;n=(b[172856+(g<<1)>>1]|0)-e|0;j=(b[173368+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[41903]=k+1;if((k|0)==256)g=i;else{b[172344+(g<<1)>>1]=d;b[172856+(g<<1)>>1]=e;b[173368+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function jd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41904]|0;if(!d){c[41905]=64;d=_I(64)|0;c[41904]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[41905]|0;if((e|0)>(b+-8|0)){d=b<<1;c[41905]=d;d=bJ(c[41904]|0,d)|0;c[41904]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;qL(d+1|0,74057,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[41904]|0}function kd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;b=d;nr(a,66165)|0;if((c[a+64>>2]|0)==2)nr(a,66180)|0;else nr(a,134901)|0;g=c[c[a+12>>2]>>2]|0;f=c[g+4>>2]|0;e=c[g+8>>2]|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;c[b+8>>2]=e;tr(a,66191,b);l=d;return}function ld(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+8|0;e=g;nr(a,66119)|0;d=a+64|0;b=a+12|0;if((c[d>>2]|0)!=2){c[e>>2]=c[(c[b>>2]|0)+28>>2];tr(a,66130,e)}if((c[(c[b>>2]|0)+20>>2]|0)==0?(c[d>>2]|0)!=2:0){b=c[a+476>>2]|0;d=c[a+480>>2]|0;e=c[a+484>>2]|0;c[f>>2]=c[a+472>>2];c[f+4>>2]=b;c[f+8>>2]=d;c[f+12>>2]=e;tr(a,62499,f)}nr(a,66145)|0;nr(a,66158)|0;l=g;return}function md(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+32|0;j=k+24|0;f=k+8|0;i=k;g=c[b+16>>2]|0;a[173896]=0;e=b+12|0;h=g+8|0;if(!(c[(c[e>>2]|0)+28>>2]|0)){c[i>>2]=En(c[h>>2]|0)|0;tr(b,62430,i);d=b+64|0;if((c[d>>2]|0)==2)nr(b,62463)|0;else nr(b,62445)|0;do if(!(c[(c[e>>2]|0)+20>>2]|0))if((c[d>>2]|0)==2){n=c[b+460>>2]|0;m=c[b+464>>2]|0;d=c[b+468>>2]|0;c[f>>2]=c[b+456>>2];c[f+4>>2]=n;c[f+8>>2]=m;c[f+12>>2]=d;tr(b,62499,f);break}else{nr(b,62475)|0;break}while(0);nr(b,62529)|0;fy(b,c[(c[e>>2]|0)+24>>2]|0,12928);hy(b);d=c[(c[e>>2]|0)+20>>2]|0;if(d|0){c[i>>2]=c[d>>2];c[i+4>>2]=0;fy(b,0,i)}}c[41906]=(a[(c[(c[h>>2]|0)+16>>2]|0)+115>>0]|0)==1?1:-1;if(!(a[173896]|0)){nr(b,62549)|0;a[173896]=1}d=c[g+208>>2]|0;if(d|0){c[j>>2]=iy(d,c[41906]|0)|0;tr(b,62562,j)}l=k;return}function nd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;b=l;l=l+16|0;f=b;c[f>>2]=d;c[f+4>>2]=e;tr(a,62414,f);l=b;return}function od(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0;s=l;l=l+144|0;r=s+128|0;q=s+112|0;p=s+72|0;o=s+56|0;n=s+40|0;m=s+32|0;e=s+24|0;b=s+8|0;d=s;f=c[a+456>>2]|0;j=c[a+460>>2]|0;g=c[a+464>>2]|0;i=c[a+468>>2]|0;k=a+12|0;t=(c[(c[k>>2]|0)+28>>2]|0)+1|0;c[d>>2]=t;c[d+4>>2]=t;tr(a,62041,d);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[b>>2]=f;c[b+4>>2]=j;c[b+8>>2]=g;c[b+12>>2]=i;tr(a,62058,b)}d=a+360|0;c[e>>2]=c[d>>2]|0?62092:62102;tr(a,62111,e);b=a+64|0;if((c[b>>2]|0)==1){c[m>>2]=g;c[m+4>>2]=i;tr(a,62136,m)}m=c[a+200>>2]|0;t=c[a+204>>2]|0;c[n>>2]=c[a+196>>2];c[n+4>>2]=m;c[n+8>>2]=t;tr(a,62175,n);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[o>>2]=f;c[o+4>>2]=j;c[o+8>>2]=g-f;c[o+12>>2]=i-j;tr(a,62195,o)}w=+h[a+496>>3];t=c[d>>2]|0;v=+h[a+504>>3];u=+h[a+512>>3];h[p>>3]=+h[a+488>>3];h[p+8>>3]=w;c[p+16>>2]=t;h[p+24>>3]=v;h[p+32>>3]=u;tr(a,62235,p);if((c[b>>2]|0)==1){if((g|0)>14399|(i|0)>14399){t=c[(c[k>>2]|0)+16>>2]|0;c[q>>2]=g;c[q+4>>2]=i;c[q+8>>2]=14400;hb[t&31](62278,q)}c[r>>2]=f;c[r+4>>2]=j;c[r+8>>2]=g;c[r+12>>2]=i;tr(a,62373,r)}l=s;return}function pd(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=a+12|0;if(c[(c[b>>2]|0)+20>>2]|0){nr(a,61965)|0;fy(a,0,(c[(c[b>>2]|0)+20>>2]|0)+4|0)}nr(a,61982)|0;nr(a,62009)|0;c[d>>2]=c[(c[b>>2]|0)+28>>2];tr(a,62024,d);l=e;return}function qd(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=En(c[(c[a+16>>2]|0)+8>>2]|0)|0;tr(a,61958,d);nr(a,61951)|0;l=b;return}function rd(a){a=a|0;nr(a,77394)|0;return}function sd(a){a=a|0;nr(a,61951)|0;return}function td(a){a=a|0;nr(a,77394)|0;return}function ud(a){a=a|0;nr(a,61951)|0;return}function vd(a){a=a|0;nr(a,77394)|0;return}function wd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;e=l;l=l+16|0;d=e;if(b|0?(g=(c[a+16>>2]|0)+272|0,c[g>>2]|0):0){nr(a,61847)|0;xr(a,c[g>>2]|0,2);nr(a,61858)|0;c[d>>2]=iy(b,c[41906]|0)|0;tr(a,61862,d)}l=e;return}function xd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;k=m;f=c[b+16>>2]|0;if(!(+h[f+40>>3]<.5)){Ed(b,f+16|0);i=e+4|0;ur(b,+h[(c[i>>2]|0)+16>>3]);c[j>>2]=c[c[i>>2]>>2];tr(b,61806,j);i=iy(c[e>>2]|0,c[41906]|0)|0;switch(a[e+48>>0]|0){case 114:{n=e+32|0;f=n;g=+h[n>>3];break}case 108:{f=e+32|0;g=0.0;break}default:{n=e+32|0;f=n;g=+h[n>>3]*.5}}h[d>>3]=+h[d>>3]-g;n=d+8|0;h[n>>3]=+h[n>>3]+ +h[e+24>>3];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];wr(b,j);nr(b,61821)|0;ur(b,+h[f>>3]);c[k>>2]=i;tr(b,61830,k)}l=m;return}function yd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];h[f+16>>3]=+h[b+16>>3]-+h[b>>3];h[f+24>>3]=+h[b+24>>3]-+h[b+8>>3];b=a+16|0;if(d|0?(e=c[b>>2]|0,+h[e+80>>3]>.5):0){Ed(a,e+56|0);xr(a,f,2);nr(a,61764)|0}if(+h[(c[b>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[b>>2]|0)+16|0);xr(a,f,2);nr(a,61784)|0}l=g;return}function zd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+16|0;i=j;g=a+16|0;if(e|0?(f=c[g>>2]|0,+h[f+80>>3]>.5):0){Ed(a,f+56|0);nr(a,61685)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];wr(a,i);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;f=b+(e<<4)|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];wr(a,i);nr(a,61703)|0;e=e+1|0}nr(a,61730)|0}if(+h[(c[g>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[g>>2]|0)+16|0);nr(a,61685)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];wr(a,i);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;g=b+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];wr(a,i);nr(a,61703)|0;e=e+1|0}nr(a,61746)|0}l=j;return}function Ad(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0;k=l;l=l+16|0;f=k;i=a+16|0;if(g|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Ed(a,j+56|0);nr(a,61685)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];wr(a,f);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;xr(a,b+(e<<4)|0,3);nr(a,61720)|0;e=e+3|0}nr(a,61730)|0}if(+h[(c[i>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[i>>2]|0)+16|0);nr(a,61685)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];wr(a,f);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;xr(a,b+(e<<4)|0,3);nr(a,61720)|0;e=e+3|0}nr(a,61712)|0}l=k;return}function Bd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;g=l;l=l+16|0;f=g;e=a+16|0;if(+h[(c[e>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[e>>2]|0)+16|0);nr(a,61685)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];wr(a,f);nr(a,61694)|0;e=1;while(1){if((e|0)>=(d|0))break;i=b+(e<<4)|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];wr(a,f);nr(a,61703)|0;e=e+1|0}nr(a,61712)|0}l=g;return}function Cd(a,b){a=a|0;b=b|0;nr(a,61682)|0;nr(a,b)|0;nr(a,134901)|0;return}function Dd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;g=n+16|0;m=n+8|0;k=n;i=a+16|0;if(f|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Ed(a,j+56|0);nr(a,77289)|0;xr(a,d,e);nr(a,87638)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];wr(a,g);c[k>>2]=e;c[k+4>>2]=b;tr(a,61599,k)}if(+h[(c[i>>2]|0)+40>>3]>.5){Fd(a);Ed(a,(c[i>>2]|0)+16|0);nr(a,77289)|0;xr(a,d,e);nr(a,87638)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];wr(a,g);c[m>>2]=e;c[m+4>>2]=b;tr(a,61615,m)}l=n;return}function Ed(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=l;l=l+32|0;e=f;if(b|0){switch(c[(c[a+16>>2]|0)+4>>2]|0){case 1:case 0:{d=96286;break}case 2:{d=96273;break}case 3:{d=96237;break}default:d=61651}i=+h[b+8>>3];g=+h[b+16>>3];h[e>>3]=+h[b>>3];h[e+8>>3]=i;h[e+16>>3]=g;c[e+24>>2]=d;tr(a,61658,e)}l=f;return}function Fd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m+8|0;j=m;g=b+16|0;i=c[g>>2]|0;d=c[i+160>>2]|0;ur(b,+h[i+152>>3]);nr(b,61632)|0;while(1){if(!d)break;i=d+4|0;f=c[d>>2]|0;if(!f)break;if(!(yJ(f,95910)|0)){d=i;continue}else e=f;while(1){d=e+1|0;if(!(a[e>>0]|0))break;else e=d}a:while(1){if(!(a[d>>0]|0))break;c[j>>2]=d;tr(b,61647,j);while(1){e=d+1|0;if(!(a[d>>0]|0)){d=e;continue a}else d=e}}if(!(yJ(f,119127)|0))h[(c[g>>2]|0)+152>>3]=0.0;c[k>>2]=f;tr(b,81633,k);d=i}l=m;return}function Gd(b){b=b|0;var d=0;nr(b,67671)|0;d=Jm(c[(c[b>>2]|0)+168>>2]|0,67727)|0;if(d|0?a[d>>0]|0:0){nr(b,67738)|0;nr(b,d)|0;nr(b,67762)|0}nr(b,67783)|0;nr(b,67831)|0;nr(b,67885)|0;d=b+12|0;nr(b,sw(c[c[c[d>>2]>>2]>>2]|0)|0)|0;nr(b,71014)|0;nr(b,sw(c[(c[c[d>>2]>>2]|0)+4>>2]|0)|0)|0;nr(b,71024)|0;nr(b,sw(c[(c[c[d>>2]>>2]|0)+8>>2]|0)|0)|0;nr(b,68267)|0;nr(b,68291)|0;return}function Hd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;i=l;l=l+48|0;g=i+16|0;f=i+8|0;e=i;d=c[b+16>>2]|0;nr(b,67506)|0;d=d+8|0;if(a[(En(c[d>>2]|0)|0)>>0]|0){nr(b,68230)|0;nr(b,sw(En(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;tr(b,67511,e);e=c[b+452>>2]|0;c[f>>2]=c[b+448>>2];c[f+4>>2]=e;tr(b,67527,f);m=+h[b+392>>3];k=+h[b+400>>3];j=+h[b+408>>3];h[g>>3]=+h[b+384>>3];h[g+8>>3]=m;h[g+16>>3]=k;h[g+24>>3]=j;tr(b,67560,g);nr(b,67591)|0;nr(b,67627)|0;nr(b,69221)|0;l=i;return}function Id(a){a=a|0;nr(a,67498)|0;return}function Jd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;ee(a,b,0,86583,c[(c[a+16>>2]|0)+8>>2]|0);nr(a,69221)|0;return}function Kd(a){a=a|0;nr(a,67346)|0;return}function Ld(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=c[b+16>>2]|0;d=g+8|0;ee(b,c[g+212>>2]|0,0,96286,c[d>>2]|0);nr(b,67450)|0;ur(b,+h[b+488>>3]);nr(b,87638)|0;ur(b,+h[b+496>>3]);c[f>>2]=0-(c[b+360>>2]|0);tr(b,67469,f);ur(b,+h[b+504>>3]);nr(b,87638)|0;ur(b,-+h[b+512>>3]);nr(b,67493)|0;if(a[(En(c[d>>2]|0)|0)>>0]|0){nr(b,67402)|0;nr(b,sw(En(c[d>>2]|0)|0)|0)|0;nr(b,67410)|0}l=e;return}function Md(a){a=a|0;nr(a,67346)|0;return}function Nd(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;ee(a,c[d+212>>2]|0,0,93039,c[b>>2]|0);nr(a,69221)|0;nr(a,67402)|0;nr(a,sw(En(c[b>>2]|0)|0)|0)|0;nr(a,67410)|0;return}function Od(a){a=a|0;nr(a,67346)|0;return}function Pd(a){a=a|0;var b=0,d=0,e=0;d=c[a+16>>2]|0;b=c[a+160>>2]|0;if((b|0)>1)b=c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0;else b=0;e=d+8|0;ee(a,c[d+212>>2]|0,b,96273,c[e>>2]|0);nr(a,69221)|0;nr(a,67402)|0;nr(a,sw(En(c[e>>2]|0)|0)|0)|0;nr(a,67410)|0;return}function Qd(a){a=a|0;nr(a,67346)|0;return}function Rd(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;ee(a,c[d+212>>2]|0,0,96237,c[b>>2]|0);nr(a,69221)|0;nr(a,67402)|0;b=rw(87129,c[b>>2]|0)|0;nr(a,sw(b)|0)|0;$I(b);nr(a,67410)|0;return}function Sd(a){a=a|0;nr(a,67346)|0;return}function Td(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;nr(b,67352)|0;if(f|0){nr(b,67355)|0;nr(b,sw(f)|0)|0;nr(b,83714)|0}nr(b,67245)|0;nr(b,69182)|0;if(c|0?a[c>>0]|0:0){nr(b,67363)|0;nr(b,c)|0;nr(b,83714)|0}if(d|0?a[d>>0]|0:0){nr(b,67377)|0;nr(b,tw(d,1)|0)|0;nr(b,83714)|0}if(e|0?a[e>>0]|0:0){nr(b,67392)|0;nr(b,sw(e)|0)|0;nr(b,83714)|0}nr(b,69221)|0;return}function Ud(a){a=a|0;nr(a,69176)|0;nr(a,67346)|0;return}function Vd(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+176|0;L=M+160|0;K=M+152|0;F=M+136|0;J=M+128|0;E=M+120|0;D=M+112|0;C=M+104|0;B=M+96|0;A=M+88|0;y=M+80|0;w=M+72|0;v=M+64|0;u=M+56|0;t=M+48|0;i=M+40|0;q=M+32|0;s=M+24|0;r=M+16|0;p=M+8|0;o=M;I=c[e+16>>2]|0;nr(e,66877)|0;switch(a[g+48>>0]|0){case 108:{nr(e,66883)|0;break}case 114:{nr(e,66904)|0;break}default:nr(e,66923)|0}H=f+8|0;G=+h[H>>3]+ +h[g+24>>3];h[H>>3]=G;H=I+260|0;if(!(b[H>>1]&512)){nr(e,66945)|0;ur(e,+h[f>>3]);nr(e,66950)|0;ur(e,-G);nr(e,83714)|0}x=g+4|0;f=c[x>>2]|0;n=c[f+8>>2]|0;if(n){switch(c[(c[(c[(c[e>>2]|0)+168>>2]|0)+16>>2]|0)+244>>2]|0){case 1:{m=n;f=n+16|0;i=n+8|0;break}case 2:{m=n+24|0;f=n+32|0;i=n+28|0;break}default:{m=n+4|0;f=n+16|0;i=n+8|0}}j=c[f>>2]|0;f=c[i>>2]|0;k=c[n+12>>2]|0;c[o>>2]=c[m>>2];tr(e,66956,o);i=c[n+24>>2]|0;if(i|0){c[p>>2]=i;tr(e,66973,p)}nr(e,83714)|0;if(f|0){c[r>>2]=f;tr(e,66977,r)}if(k|0){c[s>>2]=k;tr(e,66995,s)}if(!j)j=0;else{c[q>>2]=j;tr(e,67014,q)}}else{c[i>>2]=c[f>>2];tr(e,67031,i);j=0;f=0}i=c[x>>2]|0;if(i|0?(z=c[i+24>>2]|0,z&127|0):0){if(!((f|0)!=0|(z&1|0)==0))tr(e,67049,t);if(!((j|0)!=0|(z&2|0)==0))tr(e,67069,u);if(z&100|0){tr(e,67090,v);if(!(z&4))f=0;else{tr(e,91030,w);f=1}if(z&64){c[y>>2]=f|0?86030:174185;tr(e,67109,y);f=1}if(z&32|0){c[A>>2]=f|0?86030:174185;tr(e,67120,A)}tr(e,83714,B)}if(z&8|0)tr(e,67135,C);if(z&16|0)tr(e,67159,D)}h[E>>3]=+h[(c[x>>2]|0)+16>>3];tr(e,67181,E);f=I+16|0;switch(c[I+48>>2]|0){case 5:{f=c[f>>2]|0;if(jK(f,122106)|0){c[J>>2]=f;tr(e,67199,J)}break}case 1:{E=d[f+1>>0]|0;J=d[f+2>>0]|0;c[F>>2]=d[f>>0];c[F+4>>2]=E;c[F+8>>2]=J;tr(e,67210,F);break}default:ma(123205,66391,486,67232)}nr(e,67245)|0;if(b[H>>1]&512){c[K>>2]=sw(c[I+212>>2]|0)|0;tr(e,67247,K);nr(e,67296)|0;ur(e,-G);nr(e,67314)|0}nr(e,tw(c[g>>2]|0,1)|0)|0;if(b[H>>1]&512)tr(e,67317,L);nr(e,67337)|0;l=M;return}function Wd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 2:{d=be(a,b,2)|0;break}case 3:{d=ce(a)|0;break}default:d=0}nr(a,66841)|0;$d(a,c,d);nr(a,66850)|0;ur(a,+h[b>>3]);nr(a,66856)|0;c=b+8|0;ur(a,-+h[c>>3]);nr(a,66863)|0;ur(a,+h[b+16>>3]-+h[b>>3]);nr(a,66870)|0;ur(a,+h[b+24>>3]-+h[c>>3]);nr(a,66257)|0;return}function Xd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;switch(d|0){case 2:{e=be(a,b,c)|0;break}case 3:{e=ce(a)|0;break}default:e=0}nr(a,66832)|0;$d(a,d,e);nr(a,66247)|0;e=0;while(1){if((e|0)>=(c|0))break;ur(a,+h[b+(e<<4)>>3]);nr(a,86030)|0;ur(a,-+h[b+(e<<4)+8>>3]);nr(a,87638)|0;e=e+1|0}ur(a,+h[b>>3]);nr(a,86030)|0;ur(a,-+h[b+8>>3]);nr(a,66257)|0;return}function Yd(a,d,e,f,g,h){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;g=c[a+16>>2]|0;switch(h|0){case 2:{f=be(a,d,e)|0;break}case 3:{f=ce(a)|0;break}default:f=0}nr(a,66427)|0;if(b[g+260>>1]&512){nr(a,66433)|0;nr(a,sw(c[g+212>>2]|0)|0)|0;nr(a,66439)|0}$d(a,h,f);nr(a,66444)|0;de(a,d,e);nr(a,66257)|0;return}function Zd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;nr(a,66237)|0;$d(a,0,0);nr(a,66247)|0;d=0;while(1){if((d|0)>=(c|0))break;ur(a,+h[b+(d<<4)>>3]);nr(a,86030)|0;ur(a,-+h[b+(d<<4)+8>>3]);nr(a,87638)|0;d=d+1|0}nr(a,66257)|0;return}function _d(a,b){a=a|0;b=b|0;nr(a,66231)|0;nr(a,sw(b)|0)|0;nr(a,68291)|0;return}function $d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+96|0;k=q+48|0;p=q+40|0;n=q+32|0;o=q+24|0;j=q+16|0;g=q+8|0;f=q;m=c[b+16>>2]|0;nr(b,66262)|0;a:do switch(d|0){case 2:{c[f>>2]=e;tr(b,66270,f);break}case 3:{c[g>>2]=e;tr(b,66281,g);break}case 0:{nr(b,120501)|0;break}default:{d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:break a;default:{}}h[j>>3]=+(d&255)*.00392156862745098;tr(b,66292,j)}}}while(0);nr(b,66311)|0;e=m+16|0;f=k;g=e;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);d=m+152|0;if(+h[d>>3]!=1.0){nr(b,66322)|0;ur(b,+h[d>>3])}switch(c[m+144>>2]|0){case 1:{c[o>>2]=66362;tr(b,66339,o);break}case 2:{c[n>>2]=66366;tr(b,66339,n);break}default:{}}b:do if((c[m+48>>2]|0)==1){d=a[e+3>>0]|0;switch(d<<24>>24){case -1:case 0:break b;default:{}}h[p>>3]=+(d&255)*.00392156862745098;tr(b,66370,p)}while(0);nr(b,83714)|0;l=q;return}function ae(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{nr(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){nr(b,122171)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;tr(b,68547,f);break a}default:ma(123205,66391,117,66411)}while(0);l=g;return}function be(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;o=t+64|0;r=t+56|0;n=t+48|0;m=t+40|0;i=t+32|0;k=t;q=c[41908]|0;c[41908]=q+1;p=c[b+16>>2]|0;f=+(c[p+136>>2]|0)*.017453292519943295;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;KB(d,k,e,f,0);c[o>>2]=q;tr(b,66664,o);nr(b,66729)|0;ur(b,+h[k>>3]);nr(b,66734)|0;ur(b,+h[k+8>>3]);nr(b,66741)|0;ur(b,+h[k+16>>3]);nr(b,66748)|0;ur(b,+h[k+24>>3]);nr(b,66755)|0;k=p+140|0;f=+g[k>>2];if(f>0.0){h[i>>3]=f+-.001;tr(b,66760,i)}else nr(b,66536)|0;d=p+56|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));ae(b,o);nr(b,66572)|0;a:do if((c[p+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=7;break a}default:{}}h[m>>3]=+(d&255)*.00392156862745098;tr(b,84631,m)}else s=7;while(0);if((s|0)==7)nr(b,66587)|0;nr(b,66590)|0;f=+g[k>>2];if(f>0.0){h[n>>3]=f;tr(b,66760,n)}else nr(b,66596)|0;d=p+96|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));ae(b,o);nr(b,66572)|0;b:do if((c[p+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=14;break b}default:{}}h[r>>3]=+(d&255)*.00392156862745098;tr(b,84631,r)}else s=14;while(0);if((s|0)==14)nr(b,66587)|0;nr(b,66800)|0;l=t;return q|0}function ce(b){b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;k=q+16|0;o=q+8|0;j=q;n=c[41907]|0;c[41907]=n+1;m=c[b+16>>2]|0;r=+(c[m+136>>2]|0)*.017453292519943295;e=r;if(r==0.0){f=50;d=50}else{f=~~((+E(+e)+1.0)*50.0);d=~~((1.0-+F(+e))*50.0)}c[k>>2]=n;c[k+4>>2]=f;c[k+8>>2]=d;tr(b,66452,k);nr(b,66536)|0;d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);nr(b,66572)|0;a:do if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=6;break a}default:{}}h[j>>3]=+(d&255)*.00392156862745098;tr(b,84631,j)}else p=6;while(0);if((p|0)==6)nr(b,66587)|0;nr(b,66590)|0;nr(b,66596)|0;d=m+96|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));ae(b,k);nr(b,66572)|0;b:do if((c[m+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=10;break b}default:{}}h[o>>3]=+(d&255)*.00392156862745098;tr(b,84631,o)}else p=10;while(0);if((p|0)==10)nr(b,66587)|0;nr(b,66632)|0;l=q;return n|0}function de(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+16|0;g=i;e=77;f=0;while(1){if((f|0)>=(d|0))break;c[g>>2]=e;tr(a,66449,g);ur(a,+h[b+(f<<4)>>3]);nr(a,86030)|0;ur(a,-+h[b+(f<<4)+8>>3]);e=(f|0)==0?67:32;f=f+1|0}l=i;return}function ee(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;nr(b,67420)|0;nr(b,sw(d)|0)|0;if(e|0){c[h>>2]=sw(e)|0;tr(b,67428,h)}c[i>>2]=f;tr(b,67432,i);d=Jm(g,67444)|0;if(d|0?a[d>>0]|0:0){nr(b,87638)|0;nr(b,sw(d)|0)|0}nr(b,83714)|0;l=j;return}function fe(a){a=a|0;var b=0;nr(a,68251)|0;b=a+12|0;nr(a,pe(c[c[c[b>>2]>>2]>>2]|0)|0)|0;nr(a,71014)|0;nr(a,pe(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;nr(a,71024)|0;nr(a,pe(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;nr(a,68267)|0;return}function ge(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[b+16>>2]|0;nr(b,68228)|0;d=d+8|0;if(a[(En(c[d>>2]|0)|0)>>0]|0){nr(b,68230)|0;nr(b,pe(En(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;tr(b,68239,e);c[41909]=0;l=f;return}function he(a){a=a|0;c[41909]=1;return}function ie(a){a=a|0;c[41909]=-1;return}function je(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;i=n+8|0;m=n;f=c[b+16>>2]|0;if(c[f+144>>2]|0?(k=e+4|0,j=~~(+h[b+352>>3]*+h[(c[k>>2]|0)+16>>3]),j|0):0){qe(b);nr(b,68167)|0;g=d+8|0;h[g>>3]=+h[g>>3]-+(j|0)*.55;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];wr(b,i);nr(b,68181)|0;nr(b,c[e>>2]|0)|0;nr(b,68190)|0;nr(b,67988)|0;g=i;d=f+16|0;f=g+40|0;do{c[g>>2]=c[d>>2];g=g+4|0;d=d+4|0}while((g|0)<(f|0));re(b,i);nr(b,68192)|0;i=c[k>>2]|0;k=c[i+8>>2]|0;k=c[((k|0)==0?i:k+4|0)>>2]|0;nr(b,83714)|0;nr(b,k)|0;nr(b,83714)|0;c[m>>2]=j;tr(b,68201,m);switch(a[e+48>>0]|0){case 108:{nr(b,68206)|0;break}case 114:{nr(b,68217)|0;break}default:{}}se(b);nr(b,134901)|0}l=n;return}function ke(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){n=+h[b>>3];m=+h[b+24>>3];e=b+8|0;k=+h[e>>3];h[b>>3]=n-+h[b+16>>3]+n;h[e>>3]=k-m+k;qe(a);nr(a,68153)|0;xr(a,b,2);nr(a,67988)|0;do if(!d)if(!(c[41909]|0)){nr(a,82272)|0;break}else{nr(a,121990)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f)}while(0);if((c[41909]|0)==1)c[41909]=0;nr(a,68099)|0;ur(a,+h[g+152>>3]);nr(a,68142)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f);b=c[i>>2]|0;if((b|0)==1){nr(a,67996)|0;b=c[i>>2]|0}if((b|0)==2)nr(a,68005)|0;se(a);nr(a,134901)|0}l=j;return}function le(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){qe(a);nr(a,68125)|0;xr(a,b,d);nr(a,67988)|0;do if(!e)if(!(c[41909]|0)){nr(a,82272)|0;break}else{nr(a,121990)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f)}while(0);if((c[41909]|0)==1)c[41909]=0;nr(a,68099)|0;ur(a,+h[g+152>>3]);nr(a,68142)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));re(a,f);b=c[i>>2]|0;if((b|0)==1){nr(a,67996)|0;b=c[i>>2]|0}if((b|0)==2)nr(a,68005)|0;se(a);nr(a,134901)|0}l=j;return}function me(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m;j=c[a+16>>2]|0;k=j+144|0;if(c[k>>2]|0){qe(a);nr(a,67974)|0;xr(a,b,d);nr(a,67988)|0;e=i;f=j+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));re(a,i);nr(a,68099)|0;ur(a,+h[j+152>>3]);e=c[k>>2]|0;if((e|0)==1){nr(a,67996)|0;e=c[k>>2]|0}if((e|0)==2)nr(a,68005)|0;nr(a,68108)|0;se(a);nr(a,134901)|0}l=m;return}function ne(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;g=i;e=c[a+16>>2]|0;h=e+144|0;if(c[h>>2]|0){qe(a);nr(a,67974)|0;xr(a,b,d);nr(a,67988)|0;f=g;b=e+16|0;d=f+40|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0}while((f|0)<(d|0));re(a,g);b=c[h>>2]|0;if((b|0)==1){nr(a,67996)|0;b=c[h>>2]|0}if((b|0)==2)nr(a,68005)|0;se(a);nr(a,134901)|0}l=i;return}function oe(a,b){a=a|0;b=b|0;nr(a,67971)|0;nr(a,pe(b)|0)|0;nr(a,134901)|0;return}function pe(a){a=a|0;return a|0}function qe(b){b=b|0;if(!(a[b+144>>0]|0))nr(b,68096)|0;else nr(b,c[b+148>>2]|0)|0;return}function re(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{nr(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){nr(b,82272)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;tr(b,68547,f);break a}default:ma(123205,68014,49,68078)}while(0);l=g;return}function se(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[a+16>>2]|0;switch(c[f+12>>2]|0){case 8:{b=1;d=96273;e=f+8|0;break}case 10:{b=0;d=96273;e=f+8|0;break}case 3:case 2:case 9:{b=1;d=96237;e=f+8|0;break}case 7:case 6:case 11:{b=0;d=96237;e=f+8|0;break}case 0:{b=1;d=96286;e=f+8|0;break}case 4:{b=0;d=68050;e=f+8|0;break}case 1:{b=1;d=96286;e=f+8|0;break}case 5:{b=0;d=96286;e=f+8|0;break}default:ma(123205,68014,106,68033)}f=c[(c[e>>2]|0)+8>>2]|0;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=f;tr(a,68062,g);l=h;return}function te(a){a=a|0;var b=0;nr(a,70986)|0;nr(a,70994)|0;b=a+12|0;nr(a,Ee(c[c[c[b>>2]>>2]>>2]|0)|0)|0;nr(a,71014)|0;nr(a,Ee(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;nr(a,71024)|0;nr(a,Ee(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;nr(a,71027)|0;return}function ue(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;d=c[b+16>>2]|0;c[41913]=~~(+h[b+232>>3]-+h[b+216>>3]);c[41912]=~~(+h[b+224>>3]-+h[b+208>>3]);nr(b,69673)|0;nr(b,69680)|0;d=En(c[d+8>>2]|0)|0;if(a[d>>0]|0){nr(b,69749)|0;nr(b,Ee(d)|0)|0;nr(b,69757)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;tr(b,69766,e);nr(b,69786)|0;nr(b,69821)|0;nr(b,69849)|0;nr(b,69855)|0;nr(b,69898)|0;nr(b,69939)|0;nr(b,69958)|0;nr(b,69975)|0;nr(b,70023)|0;nr(b,70076)|0;nr(b,70152)|0;nr(b,70228)|0;nr(b,70237)|0;nr(b,70260)|0;nr(b,70287)|0;nr(b,70340)|0;nr(b,70362)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70429)|0;nr(b,70455)|0;nr(b,70340)|0;nr(b,70507)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70551)|0;nr(b,70260)|0;nr(b,70287)|0;nr(b,70340)|0;nr(b,70507)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70429)|0;nr(b,70455)|0;nr(b,70340)|0;nr(b,70362)|0;nr(b,70407)|0;nr(b,70419)|0;nr(b,70564)|0;nr(b,70572)|0;nr(b,70578)|0;nr(b,70592)|0;nr(b,70600)|0;nr(b,70633)|0;e=(c[41913]|0)+10|0;c[f>>2]=c[41912];c[f+4>>2]=e;tr(b,70710,f);nr(b,70740)|0;nr(b,70749)|0;nr(b,70807)|0;nr(b,70817)|0;nr(b,70882)|0;f=c[41913]|0;c[g>>2]=c[41912];c[g+4>>2]=f;tr(b,70919,g);g=c[41913]|0;c[i>>2]=c[41912];c[i+4>>2]=g;tr(b,70947,i);l=j;return}function ve(a){a=a|0;nr(a,69224)|0;nr(a,69236)|0;nr(a,69244)|0;nr(a,69307)|0;nr(a,69236)|0;nr(a,69352)|0;nr(a,69401)|0;nr(a,69455)|0;nr(a,69236)|0;nr(a,69555)|0;nr(a,69604)|0;nr(a,69236)|0;nr(a,69656)|0;return}function we(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j+8|0;g=j;nr(b,69182)|0;if(d|0?a[d>>0]|0:0){c[g>>2]=Ee(d)|0;tr(b,69185,g)}if(e|0?a[e>>0]|0:0){c[h>>2]=Ee(e)|0;tr(b,69196,h)}if(f|0?a[f>>0]|0:0){c[i>>2]=Ee(f)|0;tr(b,69208,i)}nr(b,69221)|0;l=j;return}function xe(a){a=a|0;nr(a,69176)|0;return}function ye(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0;A=l;l=l+112|0;y=A+96|0;z=A+88|0;w=A+80|0;q=A+72|0;v=A+64|0;t=A+56|0;s=A+48|0;r=A+40|0;p=A+24|0;o=A+8|0;n=A;x=c[b+16>>2]|0;switch(a[f+48>>0]|0){case 108:{j=+h[e>>3];m=+h[f+32>>3];break}case 114:{m=+h[f+32>>3];j=+h[e>>3]-m;break}default:{m=+h[f+32>>3];j=+h[e>>3]-m*.5}}g=f+40|0;i=+h[g>>3];u=f+4|0;k=+h[(c[u>>2]|0)+16>>3];if(i<k){i=k*1.1+1.0;h[g>>3]=i}B=j+-8.0;k=+((c[41913]|0)>>>0)-+h[e+8>>3]-i+k*.2+(k<12.0?1.4:2.0);tr(b,68838,n);h[o>>3]=B;h[o+8>>3]=k;tr(b,68775,o);h[p>>3]=j+8.0+m-B;h[p+8>>3]=i;tr(b,68799,p);nr(b,68873)|0;nr(b,68907)|0;g=c[u>>2]|0;e=c[g+8>>2]|0;if(e){c[r>>2]=c[e+4>>2];tr(b,68997,r);g=c[e+8>>2]|0;if(g|0){c[s>>2]=g;tr(b,69016,s)}g=c[e+12>>2]|0;if(g|0){c[t>>2]=g;tr(b,69033,t)}g=c[e+16>>2]|0;if(g|0){c[v>>2]=g;tr(b,69051,v)}}else{c[q>>2]=c[g>>2];tr(b,68997,q)}h[w>>3]=+h[(c[u>>2]|0)+16>>3];tr(b,69067,w);g=x+16|0;switch(c[x+48>>2]|0){case 5:{g=c[g>>2]|0;if(jK(g,122106)|0){c[z>>2]=g;tr(b,69087,z)}break}case 1:{x=d[g+1>>0]|0;z=d[g+2>>0]|0;c[y>>2]=d[g>>0];c[y+4>>2]=x;c[y+8>>2]=z;tr(b,69097,y);break}default:ma(123205,68561,438,69118)}nr(b,69131)|0;nr(b,Ee(c[f>>2]|0)|0)|0;nr(b,69142)|0;nr(b,69165)|0;l=A;return}function ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;e=l;l=l+32|0;f=e+16|0;j=e;nr(a,68739)|0;m=+h[b>>3];i=+h[b+16>>3]-m;k=+h[b+24>>3];g=k-+h[b+8>>3];k=+((c[41913]|0)>>>0)-k;h[j>>3]=m-i;h[j+8>>3]=k;tr(a,68775,j);h[f>>3]=i*2.0;h[f+8>>3]=g*2.0;tr(a,68799,f);Ie(a,d);nr(a,68621)|0;Ge(a);nr(a,68827)|0;l=e;return}function Ae(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+24|0;j=m+8|0;g=m;nr(a,68344)|0;n=c[41913]|0;c[g>>2]=c[41912];c[g+4>>2]=n;tr(a,68597,g);Ie(a,e);nr(a,68621)|0;Ge(a);nr(a,68624)|0;g=d+-1|0;e=0;while(1){if((e|0)>=(d|0))break;i=+h[b+(e<<4)>>3];f=+((c[41913]|0)>>>0)-+h[b+(e<<4)+8>>3];if(!e){nr(a,68651)|0;h[j>>3]=i;h[j+8>>3]=f;tr(a,68717,j);nr(a,68728)|0}else{h[k>>3]=i;h[k+8>>3]=f;tr(a,68717,k)}if((e|0)==(g|0))nr(a,68731)|0;e=e+1|0}nr(a,68460)|0;l=m;return}function Be(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;f=l;l=l+16|0;e=f;nr(a,68344)|0;h=c[41913]|0;c[e>>2]=c[41912];c[e+4>>2]=h;tr(a,68597,e);Ie(a,g);nr(a,68621)|0;Ge(a);nr(a,68624)|0;Je(a,b,d);nr(a,68637)|0;l=f;return}function Ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0.0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;f=k;nr(a,68344)|0;g=c[41913]|0;c[f>>2]=c[41912];c[f+4>>2]=g;tr(a,68381,f);nr(a,68421)|0;f=d+-1|0;g=b+8|0;e=0;while(1){if((e|0)>=(d|0))break;if(!e){nr(a,68433)|0;m=+((c[41913]|0)>>>0)-+h[g>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=m;tr(a,68437,i);nr(a,68448)|0}else{m=+((c[41913]|0)>>>0)-+h[b+(e<<4)+8>>3];h[j>>3]=+h[b+(e<<4)>>3];h[j+8>>3]=m;tr(a,68437,j)}if((e|0)==(f|0))nr(a,68452)|0;e=e+1|0}nr(a,68456)|0;Ge(a);nr(a,68460)|0;l=k;return}function De(a,b){a=a|0;b=b|0;nr(a,68279)|0;nr(a,Ee(b)|0)|0;nr(a,68291)|0;return}function Ee(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;e=u;d=c[41910]|0;if(!d){c[41911]=64;d=xw(64)|0;c[41910]=d}s=e+15|0;r=e+14|0;g=0;q=0;o=0;e=0;f=0;a:while(1){n=(o|0)!=0;k=g;p=b;j=e;b:while(1){if(!p){t=32;break a}e=a[p>>0]|0;if(!(e<<24>>24)){t=32;break a}b=c[41911]|0;if((q|0)>(b+-8|0)){d=b<<1;c[41911]=d;d=zw(c[41910]|0,d)|0;c[41910]=d;d=d+q|0;e=a[p>>0]|0}switch(e<<24>>24){case 60:{e=4;b=87187;t=26;break b}case 62:{e=4;b=87170;t=27;break b}case 38:{t=10;break b}case 45:{e=5;b=87181;i=j;break b}default:{}}if(n&e<<24>>24==32){t=12;break}switch(e<<24>>24){case 34:{e=6;b=87150;t=26;break b}case 39:{e=5;b=87175;t=27;break b}default:{}}if(e<<24>>24<0){i=127;b=0}else{e=1;b=p;t=26;break}while(1){g=i&255;h=e&255;if(g>>>0>=h>>>0)break;e=i&h&255;i=g>>>1;b=b+1|0}if((b|0)<=1){g=PN(j|0,f|0,6)|0;g=IN(g|0,z|0,e&255|0,0)|0;f=z;m=k+-1|0;if((k|0)>1){b=m;e=g}else{t=21;break}}else{b=b+-1|0;e=e&255;f=0}k=b;p=p+1|0;j=e}if((t|0)==10){t=0;b=(Fe(p)|0)==0;e=b?5:1;b=b?87164:p;i=j}else if((t|0)==12){t=0;b=(a[o>>0]|0)==32;e=b?6:1;b=b?87157:p;i=j}else if((t|0)==21){t=0;a[s>>0]=59;e=3;h=r;i=g;j=f;while(1){b=NN(i|0,j|0,10,0)|0;g=h+-1|0;a[h>>0]=b|48;b=i;i=MN(i|0,j|0,10,0)|0;f=j;j=z;o=e;e=e+1|0;if((o|0)>11){t=23;break a}if(!(f>>>0>0|(f|0)==0&b>>>0>9))break;else h=g}b=h+-2|0;a[g>>0]=35;a[b>>0]=38;k=m;f=j}else if((t|0)==26){t=0;i=j}else if((t|0)==27){t=0;i=j}h=d+e|0;g=e;while(1){if(!g)break;a[d>>0]=a[b>>0]|0;g=g+-1|0;b=b+1|0;d=d+1|0}g=k;b=p+1|0;q=e+q|0;o=p;d=h;e=i}if((t|0)==23){YL(68297,46,1,c[13918]|0)|0;Ma(1)}else if((t|0)==32){a[d>>0]=0;l=u;return c[41910]|0}return 0}function Fe(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function Ge(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;d=k+8|0;j=k;i=c[a+16>>2]|0;nr(a,68472)|0;e=d;f=i+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));He(a,d);b=+h[i+152>>3];if(b!=1.0){h[j>>3]=b;tr(a,68490,j)}switch(c[i+144>>2]|0){case 1:{nr(a,68507)|0;break}case 2:{nr(a,68525)|0;break}default:{}}nr(a,68542)|0;l=k;return}function He(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{nr(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){nr(b,120501)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;tr(b,68547,f);break a}default:ma(123205,68561,94,68581)}while(0);l=g;return}function Ie(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;if(!b)nr(a,68700)|0;else{d=c[a+16>>2]|0;nr(a,68670)|0;b=f;d=d+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));He(a,f);nr(a,68697)|0}l=g;return}function Je(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+32|0;g=i;e=68651;f=0;while(1){if((f|0)>=(d|0))break;k=+h[b+(f<<4)>>3];j=+((c[41913]|0)>>>0)-+h[b+(f<<4)+8>>3];c[g>>2]=e;h[g+8>>3]=k;h[g+16>>3]=j;tr(a,68654,g);e=(f|0)==0?68667:174185;f=f+1|0}nr(a,83714)|0;l=i;return}function Ke(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;nr(a,73284)|0;nr(a,73299)|0;nr(a,73338)|0;nr(a,73387)|0;c[e>>2]=122106;c[e+4>>2]=73475;tr(a,73456,e);c[d>>2]=121990;c[d+4>>2]=73481;tr(a,73456,d);l=b;return}function Le(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;b=l;l=l+64|0;d=b+8|0;j=b;c[j>>2]=En(c[(c[a+16>>2]|0)+8>>2]|0)|0;tr(a,72237,j);i=+h[a+368>>3]*.5*+h[a+488>>3];g=+h[a+376>>3]*.5*+h[a+496>>3];f=+J(+(i*2.0000000949949026e-03))*180.0*.6366197723675814;e=+J(+(g*2.0000000949949026e-03))*180.0*.6366197723675814;h[d>>3]=i;h[d+8>>3]=g;h[d+16>>3]=-500.0;h[d+24>>3]=i;h[d+32>>3]=g;h[d+40>>3]=0.0;h[d+48>>3]=(f>e?f:e)*1.2;tr(a,72259,d);nr(a,72406)|0;nr(a,73236)|0;l=b;return}function Me(a){a=a|0;nr(a,72220)|0;return}function Ne(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0;f=l;l=l+16|0;h=f;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=e;tr(a,72190,h);g[41914]=+(O(d,-10)|0);l=f;return}function Oe(a){a=a|0;nr(a,72173)|0;return}function Pe(a){a=a|0;nr(a,72155)|0;return}function Qe(a){a=a|0;nr(a,72139)|0;return}function Re(a){a=a|0;nr(a,72118)|0;g[41914]=+g[41914]+-2.0;return}function Se(a){a=a|0;nr(a,72099)|0;return}function Te(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=En(c[(c[a+16>>2]|0)+8>>2]|0)|0;tr(a,72077,d);l=b;return}function Ue(a){a=a|0;nr(a,72061)|0;return}function Ve(a){a=a|0;nr(a,72043)|0;g[41914]=+g[41914]+-5.0;return}function We(a){a=a|0;nr(a,72027)|0;g[41914]=+g[41914]+5.0;return}function Xe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0;r=l;l=l+144|0;o=r+104|0;q=r+56|0;m=r+32|0;j=r+24|0;n=r;p=e+4|0;i=c[p>>2]|0;f=+h[i+16>>3];i=c[i>>2]|0;c[n>>2]=c[e>>2];h[n+8>>3]=f;c[n+16>>2]=i;tr(b,71873,n);g[41915]=+g[41914]+-9.0;switch(a[e+48>>0]|0){case 108:{f=+h[d>>3];break}case 114:{i=d;f=+h[d>>3]-+h[e+32>>3];k=5;break}default:{i=d;f=+h[d>>3]-+h[e+32>>3]*.5;k=5}}if((k|0)==5)h[i>>3]=f;u=+h[b+488>>3];t=(+h[b+504>>3]+f)*u;s=(+h[b+512>>3]+ +h[d+8>>3])*+h[b+496>>3];h[j>>3]=+h[(c[p>>2]|0)+16>>3]*u;n=bf(b,71925,j)|0;f=+(c[b+360>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=f;i=bf(b,71142,m)|0;f=+g[41915];h[o>>3]=t;h[o+8>>3]=s;h[o+16>>3]=f;d=bf(b,71174,o)|0;j=o;k=(c[b+16>>2]|0)+16|0;m=j+40|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(m|0));o=cf(b,o,0.0)|0;e=c[e>>2]|0;c[q>>2]=c[c[p>>2]>>2];h[q+8>>3]=.25;h[q+16>>3]=0.0;c[q+24>>2]=e;c[q+28>>2]=72012;c[q+32>>2]=n;c[q+36>>2]=i;c[q+40>>2]=d;c[q+44>>2]=o;q=bf(b,71937,q)|0;nr(b,q)|0;$I(q);$I(i);$I(o);$I(d);$I(n);l=r;return}function Ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;z=l;l=l+240|0;x=z+192|0;y=z+152|0;t=z+128|0;r=z+104|0;o=z+80|0;n=z+48|0;e=z+24|0;m=z;nr(a,71750)|0;g[41915]=+g[41914]+-6.0;i=+h[b>>3];j=+h[a+488>>3];p=(+h[a+504>>3]+i)*j;A=+h[b+8>>3];k=+h[a+496>>3];q=(+h[a+512>>3]+A)*k;j=(+h[b+16>>3]-i)*j;k=(+h[b+24>>3]-A)*k;s=a+16|0;A=k+j;i=+h[(c[s>>2]|0)+152>>3]/A*2.5;h[m>>3]=j;h[m+8>>3]=A*.25;h[m+16>>3]=k;b=bf(a,71110,m)|0;m=a+360|0;A=+(c[m>>2]|0);h[e>>3]=90.0;h[e+8>>3]=0.0;h[e+16>>3]=A;e=bf(a,71142,e)|0;A=+g[41915];h[x>>3]=p;h[x+8>>3]=q;h[x+16>>3]=A;f=bf(a,71174,x)|0;u=x;v=(c[s>>2]|0)+16|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));v=cf(a,x,0.0)|0;h[n>>3]=1.0;h[n+8>>3]=i;c[n+16>>2]=b;c[n+20>>2]=e;c[n+24>>2]=f;c[n+28>>2]=v;w=bf(a,71765,n)|0;nr(a,w)|0;$I(b);$I(e);$I(f);$I(v);$I(w);if(d|0){h[o>>3]=j;h[o+8>>3]=k;h[o+16>>3]=1.0;f=bf(a,71110,o)|0;A=+(c[m>>2]|0);h[r>>3]=0.0;h[r+8>>3]=0.0;h[r+16>>3]=A;e=bf(a,71142,r)|0;A=+g[41915];h[t>>3]=p;h[t+8>>3]=q;h[t+16>>3]=A;b=bf(a,71174,t)|0;u=x;v=(c[s>>2]|0)+56|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));x=cf(a,x,0.0)|0;h[y>>3]=0.0;h[y+8>>3]=0.0;h[y+16>>3]=0.0;c[y+24>>2]=f;c[y+28>>2]=e;c[y+32>>2]=b;c[y+36>>2]=x;y=bf(a,71811,y)|0;nr(a,y)|0;$I(f);$I(e);$I(b);$I(x);$I(y)}l=z;return}function Ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0.0;K=l;l=l+336|0;B=K+296|0;J=K+288|0;I=K+272|0;H=K+264|0;G=K+240|0;D=K+232|0;A=K+208|0;z=K+184|0;w=K+160|0;v=K+152|0;u=K+136|0;t=K+128|0;s=K+96|0;r=K+88|0;q=K+56|0;f=K+48|0;m=K+24|0;k=K;nr(a,71615)|0;g[41915]=+g[41914]+-2.0;o=a+488|0;p=a+496|0;L=+h[p>>3];h[k>>3]=+h[o>>3];h[k+8>>3]=L;h[k+16>>3]=1.0;k=bf(a,71110,k)|0;y=a+360|0;L=+(c[y>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=L;m=bf(a,71142,m)|0;L=+g[41915]+-2.0;h[B>>3]=0.0;h[B+8>>3]=0.0;h[B+16>>3]=L;n=bf(a,71174,B)|0;C=a+16|0;i=B;j=(c[C>>2]|0)+16|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=cf(a,B,0.0)|0;c[f>>2]=71237;c[f+4>>2]=d+1;E=a+504|0;F=a+512|0;i=0;f=bf(a,71206,f)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];L=+h[(c[C>>2]|0)+152>>3];h[q>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[q+8>>3]=N;h[q+16>>3]=0.0;h[q+24>>3]=L;M=bf(a,71251,q)|0;c[r>>2]=f;c[r+4>>2]=M;x=bf(a,71280,r)|0;$I(M);$I(f);i=i+1|0;f=x}L=+h[F>>3]+ +h[b+8>>3];N=+h[(c[C>>2]|0)+152>>3];h[s>>3]=+h[E>>3]+ +h[b>>3];h[s+8>>3]=L;h[s+16>>3]=0.0;h[s+24>>3]=N;x=bf(a,71251,s)|0;c[t>>2]=f;c[t+4>>2]=x;M=bf(a,71280,t)|0;$I(x);$I(f);c[u>>2]=k;c[u+4>>2]=m;c[u+8>>2]=n;c[u+12>>2]=j;x=bf(a,71630,u)|0;c[v>>2]=M;c[v+4>>2]=x;M=bf(a,71335,v)|0;$I(x);nr(a,M)|0;$I(k);$I(m);$I(n);$I(j);$I(M);if(e|0){N=+h[p>>3];h[w>>3]=+h[o>>3];h[w+8>>3]=N;h[w+16>>3]=1.0;n=bf(a,71110,w)|0;N=+(c[y>>2]|0);h[z>>3]=0.0;h[z+8>>3]=0.0;h[z+16>>3]=N;m=bf(a,71142,z)|0;N=+g[41915]+-2.0;h[A>>3]=0.0;h[A+8>>3]=0.0;h[A+16>>3]=N;k=bf(a,71174,A)|0;i=B;j=(c[C>>2]|0)+56|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=cf(a,B,.25)|0;c[D>>2]=d;i=0;f=bf(a,71675,D)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];h[G>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[G+8>>3]=N;h[G+16>>3]=0.0;D=bf(a,71690,G)|0;c[H>>2]=f;c[H+4>>2]=D;M=bf(a,71712,H)|0;$I(D);$I(f);i=i+1|0;f=M}c[I>>2]=n;c[I+4>>2]=m;c[I+8>>2]=k;c[I+12>>2]=j;I=bf(a,71722,I)|0;c[J>>2]=f;c[J+4>>2]=I;M=bf(a,71335,J)|0;$I(I);nr(a,M)|0;$I(n);$I(m);$I(k);$I(j);$I(M)}l=K;return}function _e(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0;B=l;l=l+208|0;e=B+160|0;A=B+152|0;z=B+136|0;y=B+128|0;x=B+96|0;w=B+88|0;v=B+56|0;k=B+48|0;s=B+24|0;r=B;nr(a,71542)|0;g[41915]=+g[41914]+-4.0;C=+h[a+496>>3];h[r>>3]=+h[a+488>>3];h[r+8>>3]=C;h[r+16>>3]=1.0;r=bf(a,71110,r)|0;C=+(c[a+360>>2]|0);h[s>>3]=0.0;h[s+8>>3]=0.0;h[s+16>>3]=C;s=bf(a,71142,s)|0;C=+g[41915]+-2.0;h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=C;t=bf(a,71174,e)|0;u=a+16|0;f=e;i=(c[u>>2]|0)+56|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));n=cf(a,e,0.0)|0;c[k>>2]=71556;c[k+4>>2]=d+2;o=a+504|0;p=a+512|0;q=d+-1|0;m=0;e=bf(a,71206,k)|0;while(1){if((m|0)>=(d|0))break;f=b+(m<<4)|0;i=b+(m<<4)+8|0;D=+h[p>>3]+ +h[i>>3];C=+h[(c[u>>2]|0)+152>>3];h[v>>3]=+h[o>>3]+ +h[f>>3];h[v+8>>3]=D;h[v+16>>3]=0.0;h[v+24>>3]=C;k=bf(a,71251,v)|0;c[w>>2]=e;c[w+4>>2]=k;j=bf(a,71280,w)|0;$I(k);$I(e);if((m|0)==0|(m|0)==(q|0)){C=+h[p>>3]+ +h[i>>3];D=+h[(c[u>>2]|0)+152>>3];h[x>>3]=+h[o>>3]+ +h[f>>3];h[x+8>>3]=C;h[x+16>>3]=0.0;h[x+24>>3]=D;k=bf(a,71251,x)|0;c[y>>2]=j;c[y+4>>2]=k;e=bf(a,71280,y)|0;$I(k);$I(j)}else e=j;m=m+1|0}c[z>>2]=r;c[z+4>>2]=s;c[z+8>>2]=t;c[z+12>>2]=n;b=bf(a,71565,z)|0;c[A>>2]=e;c[A+4>>2]=b;d=bf(a,71335,A)|0;$I(b);nr(a,d)|0;$I(r);$I(s);$I(t);$I(n);$I(d);l=B;return}function $e(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0.0;v=l;l=l+160|0;e=v+120|0;u=v+112|0;t=v+96|0;s=v+88|0;r=v+56|0;m=v+48|0;n=v+24|0;q=v;nr(a,71094)|0;g[41915]=+g[41914]+-6.0;w=+h[a+496>>3];h[q>>3]=+h[a+488>>3];h[q+8>>3]=w;h[q+16>>3]=1.0;q=bf(a,71110,q)|0;w=+(c[a+360>>2]|0);h[n>>3]=0.0;h[n+8>>3]=0.0;h[n+16>>3]=w;n=bf(a,71142,n)|0;w=+g[41915];h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=w;o=bf(a,71174,e)|0;p=a+16|0;f=e;i=(c[p>>2]|0)+16|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));i=cf(a,e,0.0)|0;c[m>>2]=71237;c[m+4>>2]=d;j=a+504|0;k=a+512|0;f=0;e=bf(a,71206,m)|0;while(1){if((f|0)>=(d|0))break;y=+h[k>>3]+ +h[b+(f<<4)+8>>3];w=+h[(c[p>>2]|0)+152>>3];h[r>>3]=+h[j>>3]+ +h[b+(f<<4)>>3];h[r+8>>3]=y;h[r+16>>3]=0.0;h[r+24>>3]=w;x=bf(a,71251,r)|0;c[s>>2]=e;c[s+4>>2]=x;m=bf(a,71280,s)|0;$I(x);$I(e);f=f+1|0;e=m}c[t>>2]=q;c[t+4>>2]=n;c[t+8>>2]=o;c[t+12>>2]=i;t=bf(a,71289,t)|0;c[u>>2]=e;c[u+4>>2]=t;x=bf(a,71335,u)|0;$I(t);nr(a,x)|0;$I(q);$I(n);$I(o);$I(i);$I(x);l=v;return}function af(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a,71075,e);l=d;return}function bf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;h=i;e=i+24|0;f=i+8|0;c[f>>2]=d;g=MK(e,1024,b,f)|0;do if((g|0)>=0)if((g|0)>1023){a=_I(g+1|0)|0;c[f>>2]=d;rL(a,b,f)|0;break}else{a=HL(e)|0;break}else{a=c[(c[a+12>>2]|0)+16>>2]|0;c[h>>2]=zJ(c[(kJ()|0)>>2]|0)|0;hb[a&31](71520,h);a=HL(174185)|0}while(0);l=i;return a|0}function cf(a,b,e){a=a|0;b=b|0;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+112|0;o=q+104|0;j=q+96|0;i=q+64|0;n=q+48|0;p=q+32|0;m=q+16|0;k=q;g=c[b+32>>2]|0;a:do switch(g|0){case 5:{f=c[b>>2]|0;if(!(yJ(f,121094)|0)){c[k>>2]=71357;h[k+8>>3]=e;f=bf(a,71340,k)|0;break a}if(!(yJ(f,118224)|0)){c[m>>2]=71361;h[m+8>>3]=e;f=bf(a,71340,m)|0;break a}if(!(yJ(f,116223)|0)){c[p>>2]=71367;h[p+8>>3]=e;f=bf(a,71340,p)|0;break a}else{c[n>>2]=f;h[n+8>>3]=e;f=bf(a,71340,n)|0;break a}}case 1:{s=+(d[b+1>>0]|0)*.00390625;r=+(d[b+2>>0]|0)*.00390625;h[i>>3]=+(d[b>>0]|0)*.00390625;h[i+8>>3]=s;h[i+16>>3]=r;h[i+24>>3]=e;f=bf(a,71372,i)|0;break}default:{p=c[13918]|0;n=c[b>>2]|0;c[j>>2]=g;c[j+4>>2]=n;AL(p,71411,j)|0;ma(123205,71461,436,71481)}}while(0);c[o>>2]=f;p=bf(a,71498,o)|0;$I(f);l=q;return p|0}function df(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;h=c[c[a+12>>2]>>2]|0;j=c[h>>2]|0;i=c[h+4>>2]|0;h=c[h+8>>2]|0;c[g>>2]=73927;c[g+4>>2]=j;c[g+8>>2]=i;c[g+12>>2]=h;tr(a,76546,g);f=En(c[f+8>>2]|0)|0;c[e>>2]=73927;c[e+4>>2]=f;tr(a,76578,e);c[d>>2]=73927;tr(a,76592,d);l=b;return}function ef(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=73927;tr(a,76494,d);l=b;return}function ff(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+304|0;V=W+296|0;U=W+288|0;T=W+272|0;R=W+264|0;Q=W+256|0;P=W+248|0;O=W+240|0;N=W+232|0;M=W+224|0;L=W+216|0;K=W+208|0;J=W+200|0;I=W+192|0;H=W+184|0;G=W+176|0;F=W+168|0;E=W+160|0;C=W+152|0;A=W+144|0;z=W+136|0;y=W+128|0;x=W+120|0;w=W+112|0;v=W+104|0;u=W+96|0;t=W+88|0;s=W+80|0;r=W+72|0;q=W+64|0;p=W+56|0;o=W+48|0;S=W+40|0;B=W+24|0;n=W+16|0;m=W;g=c[a+456>>2]|0;i=c[a+460>>2]|0;j=c[a+464>>2]|0;k=c[a+468>>2]|0;f=a+360|0;a:do if(c[4007]|0){switch(c[f>>2]|0){case 90:case 0:break a;default:{}}sf();c[4007]=0}while(0);e=(+(k|0)-+(i|0))*.013888888888888888;b=(+(j|0)-+(g|0))*.013888888888888888;k=(c[f>>2]|0)==90;d=k?e:b;e=k?b:e;h[m>>3]=d;h[m+8>>3]=e;tr(a,74114,m);c[n>>2]=73927;tr(a,74129,n);if(d>0.0){b=+GJ(d);h[16877]=b;b=b+3.0-+(~~b|0)}else b=3.0;b=+D(10.0,+b);h[16877]=b;h[B>>3]=b;h[B+8>>3]=b;tr(a,74298,B);c[S>>2]=73927;tr(a,74333,S);c[o>>2]=73927;tr(a,74391,o);c[p>>2]=73927;tr(a,74451,p);c[q>>2]=73927;tr(a,74500,q);c[r>>2]=73927;tr(a,74539,r);c[s>>2]=73927;tr(a,74590,s);c[t>>2]=73927;tr(a,74652,t);c[u>>2]=73927;tr(a,74762,u);c[v>>2]=73927;tr(a,74853,v);c[w>>2]=73927;tr(a,74907,w);c[x>>2]=73927;tr(a,74976,x);tr(a,75012,y);c[z>>2]=73927;tr(a,75137,z);c[A>>2]=73927;tr(a,75166,A);tr(a,75206,C);c[E>>2]=73927;tr(a,75299,E);c[F>>2]=73927;tr(a,75358,F);c[G>>2]=73927;tr(a,75439,G);tr(a,75509,H);c[I>>2]=73927;tr(a,75598,I);c[J>>2]=73927;tr(a,75703,J);c[K>>2]=73927;tr(a,75779,K);c[L>>2]=73927;tr(a,75818,L);c[M>>2]=73927;tr(a,75917,M);c[N>>2]=73927;tr(a,75963,N);tr(a,76052,O);c[P>>2]=73927;tr(a,76093,P);c[Q>>2]=73927;tr(a,76176,Q);c[R>>2]=73927;tr(a,76277,R);h[T>>3]=e;h[T+8>>3]=d;tr(a,76341,T);tr(a,76369,U);tr(a,76377,V);l=W;return}function gf(a){a=a|0;var b=0;b=l;l=l+16|0;tr(a,74107,b);l=b;return}function hf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;q=r+24|0;p=r+8|0;o=r;switch(a[e+48>>0]|0){case 108:{k=d;i=+h[e+32>>3];j=+h[d>>3];break}case 114:{i=+h[e+32>>3];g=i;f=5;break}default:{i=+h[e+32>>3];g=i*.5;f=5}}if((f|0)==5){j=+h[d>>3]-g;h[d>>3]=j;k=d}m=e+4|0;f=c[m>>2]|0;g=+h[f+16>>3];d=d+8|0;n=+h[d>>3]+g*.004629629629629629;h[d>>3]=n;i=j+i*.006944444444444444;h[k>>3]=i;f=c[f>>2]|0;do if(f){d=c[41916]|0;if(d|0?(yJ(d,f)|0)==0:0)break;c[o>>2]=qf(f)|0;tr(b,74006,o);o=c[m>>2]|0;c[41916]=c[o>>2];g=+h[o+16>>3]}while(0);f=~~g;f=(f|0)>1?f:1;if((f|0)!=(c[41917]|0)){j=+h[16877];c[p>>2]=f;h[p+8>>3]=j;tr(b,74014,p);c[41917]=f}c[q>>2]=rf(c[e>>2]|0)|0;h[q+8>>3]=i;h[q+16>>3]=n;tr(b,74035,q);l=r;return}function jf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[b>>3];k=(+h[b+16>>3]-i)*.027777777777777776;g=+h[b+8>>3];j=(+h[b+24>>3]-g)*.027777777777777776;c[f>>2]=1;c[f+4>>2]=d|0?73948:174185;h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i*.013888888888888888;h[f+32>>3]=g*.013888888888888888;tr(a,73954,f);l=e;return}function kf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=l;l=l+16|0;of(c[a+16>>2]|0,e+8|0,e);pf(a,b,d,1);l=e;return}function lf(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0;t=l;l=l+128|0;s=t+112|0;q=t+104|0;p=t+96|0;e=t+88|0;n=t+16|0;o=t;k=c[a+16>>2]|0;j=_I((d*140|0)+140|0)|0;of(k,t+116|0,t+80|0);v=+h[b>>3];k=n+48|0;h[k>>3]=v;u=+h[b+8>>3];h[n+56>>3]=u;c[e>>2]=~~(v+(v>=0.0?.5:-.5));c[e+4>>2]=~~(u+(u>=0.0?.5:-.5));i=o+8|0;e=j+(qL(j,73932,e)|0)|0;r=1;g=0;while(1){m=g+3|0;if((m|0)>=(d|0))break;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];f=1;while(1){if((f|0)==4){f=1;break}w=f+g|0;h[n+(f<<4)>>3]=+h[b+(w<<4)>>3];h[n+(f<<4)+8>>3]=+h[b+(w<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;QA(o,n,3,+(f|0)*.16666666666666666,0,0);u=+h[o>>3];v=+h[i>>3];c[p>>2]=~~(u+(u>=0.0?.5:-.5));c[p+4>>2]=~~(v+(v>=0.0?.5:-.5));f=f+1|0;e=e+(qL(e,73932,p)|0)|0}r=r+6|0;g=m}c[q>>2]=j;tr(a,73939,q);$I(j);f=r+-1|0;e=0;while(1){if((e|0)>=(r|0))break;c[s>>2]=((e|0)%(f|0)|0|0)!=0&1;tr(a,73944,s);e=e+1|0}nr(a,134901)|0;l=t;return}function mf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;of(c[a+16>>2]|0,e+8|0,e);pf(a,b,d,0);l=e;return}function nf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=73927;c[e+4>>2]=b;tr(a,73920,e);l=d;return}function of(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));tr(a,73932,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));tr(a,73932,i)}nr(a,134901)|0;l=j;return}function qf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;a:while(1){d=15756;while(1){e=c[d+4>>2]|0;if(!e)break;if(!(yJ(e,b)|0)){g=6;break a}d=d+8|0}c[f>>2]=74088;c[f+4>>2]=b;$l(1,74062,f)|0;d=IL(b,45)|0;if(!d){d=74105;break}a[d>>0]=0}l=h;return d|0}function rf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41918]|0;if(!d){c[41919]=64;d=_I(64)|0;c[41918]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[41919]|0;if((e|0)>(b+-8|0)){d=b<<1;c[41919]=d;d=bJ(c[41918]|0,d)|0;c[41918]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;qL(d+1|0,74057,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[41918]|0}function sf(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=74088;c[b+4>>2]=76485;$l(0,76467,b)|0;l=a;return}function tf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;e=l;l=l+32|0;f=e+8|0;j=e;b=b+8|0;k=c[b>>2]|0;c[j>>2]=k;c[j+4>>2]=k;tr(a,77065,j);i=(+h[d>>3]+ +h[d+16>>3])*.5;g=(+h[d+8>>3]+ +h[d+24>>3])*.5;c[f>>2]=c[b>>2];h[f+8>>3]=i;h[f+16>>3]=g;tr(a,77107,f);l=e;return}function uf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[d>>3];k=+h[d+16>>3]-i;g=+h[d+24>>3];j=g-+h[d+8>>3];g=+(~~(+h[a+232>>3]-+h[a+216>>3])>>>0)-g;c[f>>2]=c[b+8>>2];h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i;h[f+32>>3]=g;tr(a,77152,f);nr(a,77244)|0;l=e;return}function vf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function wf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+160|0;s=t+152|0;r=t+136|0;q=t+120|0;k=t+112|0;n=t+104|0;m=t+88|0;j=t+72|0;i=t+64|0;o=t;if(!a)ma(96061,77249,212,77268);if(!b)ma(96091,77249,213,77268);p=b+8|0;if(!(c[p>>2]|0))ma(96094,77249,214,77268);if(c[b+52>>2]|0){c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];b=o+32|0;d=d+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];f=+h[o>>3];h[o+16>>3]=f;h[o+24>>3]=+h[o+40>>3];h[o+48>>3]=+h[b>>3];g=+h[o+8>>3];h[o+56>>3]=g;if(e<<24>>24){tr(a,77289,i);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[j>>3]=+h[o+(b<<4)>>3];h[j+8>>3]=u;tr(a,77292,j);b=b+1|0}h[m>>3]=f;h[m+8>>3]=g;tr(a,77292,m);m=c[p>>2]|0;c[n>>2]=4;c[n+4>>2]=m;tr(a,77299,n)}tr(a,77289,k);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[q>>3]=+h[o+(b<<4)>>3];h[q+8>>3]=u;tr(a,77292,q);b=b+1|0}h[r>>3]=f;h[r+8>>3]=g;tr(a,77292,r);r=c[p>>2]|0;c[s>>2]=4;c[s+4>>2]=r;tr(a,77314,s)}l=t;return}function xf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+112|0;n=o+24|0;m=o+16|0;k=o;i=o+28|0;if(!b)ma(96061,77249,153,77330);if(!d)ma(96091,77249,154,77330);if(!(c[d+8>>2]|0))ma(96094,77249,155,77330);j=d+52|0;if(c[j>>2]|0){f=d+60|0;g=c[f>>2]|0;if((g|0)==84)g=18;else{gb[g&127](d);c[j>>2]=0;c[f>>2]=0;c[d+56>>2]=0;g=10}}else g=10;do if((g|0)==10){if(!((Nr(d)|0)<<24>>24))break;f=AN(c[d+20>>2]|0)|0;if((c[d+24>>2]&-2|0)==6){$L(f,i)|0;i=c[i+36>>2]|0;c[d+56>>2]=i;f=qJ(0,i,1,1,f,0)|0;c[j>>2]=f;a[d+16>>0]=1}else f=c[j>>2]|0;if(f|0)c[d+60>>2]=84;Or(d);if(c[j>>2]|0)g=18}while(0);if((g|0)==18){p=+h[e+8>>3]-+(c[d+36>>2]|0);h[k>>3]=+h[e>>3]-+(c[d+32>>2]|0);h[k+8>>3]=p;tr(b,77348,k);if(!(a[d+16>>0]|0)){c[m>>2]=c[d+12>>2];tr(b,77379,m)}else gy(b,d);tr(b,77394,n)}l=o;return}function yf(a){a=a|0;oJ(c[a+52>>2]|0,c[a+56>>2]|0)|0;return}function zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+80|0;f=g+48|0;if(!a)ma(96061,77249,121,77404);e=c[a+16>>2]|0;if(!e)ma(84921,77249,123,77404);if(!b)ma(96091,77249,124,77404);d=b+8|0;if(!(c[d>>2]|0))ma(96094,77249,125,77404);if(!(c[e+8>>2]|0))ma(123690,77249,128,77404);else{tr(a,77424,g);tr(a,77433,g+8|0);tr(a,77460,g+16|0);tr(a,77485,g+24|0);tr(a,77514,g+32|0);tr(a,77542,g+40|0);c[f>>2]=c[d>>2];tr(a,77549,f);tr(a,77588,g+56|0);tr(a,95830,g+64|0);l=g;return}}function Af(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0;i=l;l=l+128|0;g=i+80|0;f=i;if(!a)ma(96061,77249,97,77593);if(!b)ma(96091,77249,98,77593);e=c[b+8>>2]|0;if(!e)ma(96094,77249,99,77593);else{m=+h[d>>3];j=~~(m+(m>=0.0?.5:-.5));m=+h[d+8>>3];b=~~(m+(m>=0.0?.5:-.5));m=+h[d+16>>3];k=~~(m+(m>=0.0?.5:-.5));m=+h[d+24>>3];d=~~(m+(m>=0.0?.5:-.5));c[f>>2]=2;c[f+4>>2]=5;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=-1;c[f+24>>2]=1;c[f+28>>2]=-1;c[f+32>>2]=0;h[f+40>>3]=0.0;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=5;c[f+72>>2]=0;c[f+76>>2]=e;tr(a,77612,f);c[g>>2]=j;c[g+4>>2]=b;c[g+8>>2]=j;c[g+12>>2]=d;c[g+16>>2]=k;c[g+20>>2]=d;c[g+24>>2]=k;c[g+28>>2]=b;c[g+32>>2]=j;c[g+36>>2]=b;tr(a,77670,g);l=i;return}}function Bf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;o=l;l=l+96|0;n=o+56|0;m=o+32|0;k=o;i=+h[d>>3];j=+h[d+16>>3]-i;f=+h[d+24>>3];g=f-+h[d+8>>3];if(!a)ma(96061,77249,53,77702);if(!b)ma(96091,77249,54,77702);e=b+8|0;if(!(c[e>>2]|0))ma(96094,77249,55,77702);nr(a,77721)|0;nr(a,c[e>>2]|0)|0;e=a+360|0;f=-f;if(!(c[e>>2]|0)){h[n>>3]=j;h[n+8>>3]=g;h[n+16>>3]=i;h[n+24>>3]=f;tr(a,77850,n)}else{h[k>>3]=g;h[k+8>>3]=j;h[k+16>>3]=i;h[k+24>>3]=f;tr(a,77741,k);c[m>>2]=c[e>>2];h[m+8>>3]=i;h[m+16>>3]=f;tr(a,77820,m)}nr(a,77929)|0;l=o;return}function Cf(a){a=a|0;var b=0,c=0;b=eo(a)|0;while(1){if(!b)break;Df(b);b=fo(a,b)|0}c=eo(a)|0;while(1){if(!c)break;b=Qm(a,c)|0;while(1){if(!b)break;Ef(b);b=Sm(a,b)|0}c=fo(a,c)|0}return}function Df(a){a=a|0;var b=0,d=0;Oo(a,122241,304,1)|0;XA(a);LB(a,c[(c[(so(a)|0)+16>>2]|0)+116>>2]&1);a=a+16|0;c[(c[a>>2]|0)+176>>2]=0;b=ww(20)|0;d=c[a>>2]|0;c[d+172>>2]=b;c[d+184>>2]=0;d=ww(20)|0;b=c[a>>2]|0;c[b+180>>2]=d;c[b+200>>2]=0;b=ww(12)|0;d=c[a>>2]|0;c[d+196>>2]=b;c[d+192>>2]=0;d=ww(12)|0;b=c[a>>2]|0;c[b+188>>2]=d;c[b+208>>2]=0;b=ww(12)|0;a=c[a>>2]|0;c[a+204>>2]=b;c[a+216>>2]=1;return}function Ef(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;Oo(d,122254,176,1)|0;YA(d)|0;h=EA(d,c[42219]|0,1,0)|0;g=d+16|0;c[(c[g>>2]|0)+156>>2]=h;h=GA(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,c[42213]|0,174185)|0;i=GA(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,c[42213]|0,174185)|0;e=c[g>>2]|0;f=e+154|0;b[f>>1]=1;b[e+168>>1]=1;if((h|0)==(i|0)&(a[h>>0]|0)!=0){b[f>>1]=1e3;i=e+156|0;c[i>>2]=(c[i>>2]|0)*100}if(Ak(d)|0){i=c[g>>2]|0;b[i+154>>1]=0;c[i+156>>2]=0}i=(EA(d,c[42232]|0,0,0)|0)&255;a[(c[g>>2]|0)+152>>0]=i;i=(EA(d,c[42220]|0,1,0)|0)&65535;b[(c[g>>2]|0)+170>>1]=i;return}function Ff(a){a=a|0;var b=0,d=0;Gf(c[(c[a+16>>2]|0)+192>>2]|0);d=eo(a)|0;while(1){if(!d)break;b=Qm(a,d)|0;while(1){if(!b)break;sB(b);b=Sm(a,b)|0}Hf(d);d=fo(a,d)|0}If(a);return}function Gf(b){b=b|0;var d=0,e=0,f=0,g=0;while(1){if(!b)break;f=b+16|0;g=c[(c[f>>2]|0)+164>>2]|0;Jf(b);d=c[f>>2]|0;if((a[d+156>>0]|0)!=1){b=g;continue}e=c[d+180>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+172>>2]|0;if(e){$I(e);d=c[f>>2]|0}$I(d);$I(b);b=g}return}function Hf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+172>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+180>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+188>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+196>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+204>>2]|0;if(d){$I(d);b=c[e>>2]|0}pw(c[b+104>>2]|0);pw(c[(c[e>>2]|0)+108>>2]|0);b=c[(c[e>>2]|0)+8>>2]|0;if(b|0)gb[c[(c[b+4>>2]|0)+4>>2]&127](a);Qo(a,122241)|0;return}function If(a){a=a|0;var d=0,e=0,f=0;d=Kp(a)|0;while(1){if(!d)break;If(d);d=Lp(d)|0}if(Oo(a,122277,0,1)|0){f=a+16|0;d=c[f>>2]|0;e=c[d+184>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+268>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+216>>2]|0;if(e){$I(e);d=c[f>>2]|0}do if(c[d+196>>2]|0){e=b[d+236>>1]|0;while(1){if((e|0)>(b[d+238>>1]|0))break;$I(c[(c[d+196>>2]|0)+(e<<6)+12>>2]|0);e=e+1|0;d=c[f>>2]|0}e=c[d+196>>2]|0;if((b[d+236>>1]|0)==-1){$I(e+-64|0);break}else{$I(e);break}}while(0);if((to(a)|0)!=(a|0)){pw(c[(c[f>>2]|0)+12>>2]|0);Qo(a,122277)|0}}return}function Jf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+176>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[d+172>>2]|0)+(a<<2)>>2]|0;Yg(b);$I(c[b+16>>2]|0);$I(b);b=a;d=c[e>>2]|0}b=c[d+184>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[(c[e>>2]|0)+180>>2]|0)+(a<<2)>>2]|0;Yg(b);$I(c[b+16>>2]|0);$I(b);b=a}return}function Kf(a){a=a|0;if(nn(a)|0)Lf(a);ay(a);return}function Lf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+48|0;g=h+32|0;f=h;b=ft(a,-1,8)|0;d=gt(a,0,f)|0;et(a,2,8,f)|0;d=(d|0)==0;e=(b|0)<0;if(e&d)Mf(a);else{if(d)c[f+16>>2]=3;else b=e?8:b;c[f+8>>2]=b;c[f+20>>2]=0;e=Cs(a,g,0)|0;b=c[g>>2]|0;do if((b|0)==1){Mf(a);b=0}else{if(c[(c[(c[a+16>>2]|0)+8>>2]|0)+84>>2]|0){Mf(a);b=0;break}c[f+12>>2]=1;d=0;while(1){if((d|0)>=(b|0))break;b=c[e+(d<<2)>>2]|0;Nf(b,a);Mf(b);d=d+1|0;b=c[g>>2]|0}Of(a);dt(c[g>>2]|0,e,a,f)|0;Pf(a);Qf(c[g>>2]|0,e,a);b=0}while(0);while(1){if((b|0)>=(c[g>>2]|0))break;f=e+(b<<2)|0;$I(c[(c[(c[f>>2]|0)+16>>2]|0)+8>>2]|0);If(c[f>>2]|0);ro(a,c[f>>2]|0)|0;b=b+1|0}$I(e)}l=h;return}function Mf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+40|0;e=m;i=EA(a,zm(a,0,77944,0)|0,-1,1)|0;JB(a,10);d=zk(a,e)|0;Sf(a,a);Cf(a);f=(i|0)==1;g=e+32|0;h=(i|0)==2;i=(i|0)==3;j=e+28|0;e=e+24|0;while(1){lj(a,d);if(f){d=3;break}if(c[g>>2]|0){$l(0,77950,k)|0;c[e>>2]=0;d=0}vh(a,(d|0)!=0&1);if(h){d=7;break}yi(a,d);if(i){d=9;break}n=(c[j>>2]|0)+-1|0;c[j>>2]=n;if(!((n|0)!=0&(c[e>>2]|0)!=0)){d=11;break}}if((d|0)==3)Tf(a,1);else if((d|0)==7)Tf(a,2);else if((d|0)==9)Tf(a,2);else if((d|0)==11){if(b[(c[a+16>>2]|0)+136>>1]&16)Uf(a);fk(a);Yf(a);if((JA(Jm(a,78041)|0)|0)<<24>>24)$k(a)}l=m;return}function Nf(b,d){b=b|0;d=d|0;var e=0,f=0;Oo(b,122277,280,1)|0;e=ww(96)|0;b=c[b+16>>2]|0;c[b+8>>2]=e;d=c[d+16>>2]|0;f=c[d+8>>2]|0;h[e>>3]=+h[f>>3];h[e+24>>3]=+h[f+24>>3];c[b+144>>2]=c[d+144>>2];a[b+115>>0]=a[d+115>>0]|0;c[b+116>>2]=c[d+116>>2];c[b+248>>2]=c[d+248>>2];c[b+252>>2]=c[d+252>>2];c[b+244>>2]=c[d+244>>2];return}function Of(a){a=a|0;var b=0,d=0,e=0;b=ww((nn(a)|0)<<4)|0;d=eo(a)|0;while(1){if(!d)break;e=c[d+16>>2]|0;c[e+132>>2]=b;h[b>>3]=+h[e+16>>3]*.013888888888888888;h[b+8>>3]=+h[e+24>>3]*.013888888888888888;b=b+16|0;d=fo(a,d)|0}return}function Pf(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[(c[(eo(a)|0)+16>>2]|0)+132>>2]|0;b=e;d=eo(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;c[f+132>>2]=0;h[f+16>>3]=+h[b>>3]*72.0;h[f+24>>3]=+h[b+8>>3]*72.0;b=b+16|0;d=fo(a,d)|0}$I(e);return}function Qf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=0;f=0;while(1){if((e|0)>=(a|0))break;i=(c[(c[(c[b+(e<<2)>>2]|0)+16>>2]|0)+180>>2]|0)+f|0;e=e+1|0;f=i}i=d+16|0;c[(c[i>>2]|0)+180>>2]=f;g=ww((f<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=g;g=0;e=1;while(1){if((g|0)>=(a|0))break;h=(c[b+(g<<2)>>2]|0)+16|0;f=1;while(1){d=c[h>>2]|0;if((f|0)>(c[d+180>>2]|0))break;d=Bs(c[(c[d+184>>2]|0)+(f<<2)>>2]|0)|0;c[(c[(c[i>>2]|0)+184>>2]|0)+(e<<2)>>2]=d;Rf(c[(c[(c[h>>2]|0)+184>>2]|0)+(f<<2)>>2]|0,d);f=f+1|0;e=e+1|0}g=g+1|0}return}function Rf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;Oo(d,122277,280,1)|0;g=d+16|0;d=(c[g>>2]|0)+16|0;f=b+16|0;b=(c[f>>2]|0)+16|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];c[d+24>>2]=c[b+24>>2];c[d+28>>2]=c[b+28>>2];b=c[f>>2]|0;d=c[g>>2]|0;a[d+275>>0]=a[b+275>>0]|0;d=d+48|0;b=b+48|0;e=d+64|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(e|0));b=c[(c[f>>2]|0)+180>>2]|0;c[(c[g>>2]|0)+180>>2]=b;d=ww((b<<2)+4|0)|0;c[(c[g>>2]|0)+184>>2]=d;d=1;while(1){e=c[f>>2]|0;if((d|0)>(b|0))break;e=Bs(c[(c[e+184>>2]|0)+(d<<2)>>2]|0)|0;c[(c[(c[g>>2]|0)+184>>2]|0)+(d<<2)>>2]=e;Rf(c[(c[(c[f>>2]|0)+184>>2]|0)+(d<<2)>>2]|0,e);d=d+1|0}f=e+12|0;c[(c[g>>2]|0)+12>>2]=c[f>>2];c[f>>2]=0;return}function Sf(a,b){a=a|0;b=b|0;if((to(a)|0)!=(a|0))Oo(a,122277,280,1)|0;if((a|0)==(b|0))c[(c[(to(a)|0)+16>>2]|0)+188>>2]=a;a=Kp(a)|0;while(1){if(!a)break;Sf(a,b);a=Lp(a)|0}return}function Tf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1040|0;k=m+8|0;j=m;e=m+16|0;f=zm(a,1,80018,174185)|0;g=zm(a,1,78084,174185)|0;h=(b|0)>0;d=(b|0)==1;b=eo(a)|0;while(1){if(!b)break;if(h?(i=b+16|0,c[j>>2]=c[(c[i>>2]|0)+232>>2],qL(e,122187,j)|0,Dm(b,f,e)|0,!d):0){c[k>>2]=c[(c[i>>2]|0)+236>>2];qL(e,122187,k)|0;Dm(b,g,e)|0}b=fo(a,b)|0}l=m;return}function Uf(a){a=a|0;var b=0,c=0,d=0;c=Jp(a,79522,0)|0;if(c|0){b=eo(c)|0;while(1){if(!b)break;d=fo(c,b)|0;eh(a,b);Vf(a,b);Hf(b);qo(a,b)|0;b=d}Np(a,c)|0}return}function Vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=c[(c[b+16>>2]|0)+232>>2]|0;i=a+16|0;a=c[(c[i>>2]|0)+196>>2]|0;d=c[a+(j<<6)>>2]|0;h=a+(j<<6)+4|0;g=0;e=0;while(1){if((e|0)>=(d|0)){f=7;break}f=c[(c[h>>2]|0)+(e<<2)>>2]|0;e=e+1|0;if((f|0)==(b|0)){f=4;break}else g=f}if((f|0)==4){while(1){if((e|0)>=(d|0))break;f=c[a+(j<<6)+4>>2]|0;c[f+(e+-1<<2)>>2]=c[f+(e<<2)>>2];f=c[(c[i>>2]|0)+196>>2]|0;e=e+1|0;d=c[f+(j<<6)>>2]|0;a=f;f=4}c[a+(j<<6)>>2]=d+-1}else if((f|0)==7?(g|0)!=(b|0):0)ma(78050,78057,248,78067);return}function Wf(a){a=a|0;return c[(c[(to(a)|0)+16>>2]|0)+188>>2]|0}function Xf(b,c){b=b|0;c=c|0;var d=0;d=a[b+28>>0]|0;if(a[c+28>>0]|0)if(d<<24>>24){d=~~(+h[b>>3]-+h[c>>3]);if(!d)d=~~(+h[b+8>>3]-+h[c+8>>3])}else d=-1;else d=d<<24>>24!=0&1;return d|0}function Yf(a){a=a|0;Zf(a,1);return}function Zf(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0;Z=l;l=l+656|0;O=Z+592|0;N=Z+552|0;f=Z+544|0;T=Z+96|0;U=Z;Y=Z+632|0;V=d+16|0;X=b[(c[V>>2]|0)+136>>1]&14;P=X&65535;Q=T+16|0;c[Q>>2]=Z+368;R=U+16|0;c[R>>2]=Z+192;do if(X<<16>>16){S=X<<16>>16==4;do if(S){_f(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1))A=9;else{$l(0,78090,f)|0;A=9}}else if(X<<16>>16==8){_f(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)){MB(d,0);n=0;m=0;k=0;break}else{$f(d);MB(d,1);n=0;m=0;k=0;break}}else A=9;while(0);if((A|0)==9){Zk(d);if(my()|0)break;W=ww(96)|0;K=c[(c[V>>2]|0)+248>>2]|0;c[Y+8>>2]=(K|0)/4|0;c[Y+12>>2]=K;k=ww(512)|0;F=Y+4|0;c[F>>2]=0;c[Y>>2]=0;j=c[V>>2]|0;C=b[j+236>>1]|0;D=0;L=0;M=k;E=k;m=k;n=k;o=k;H=0;I=0;a:while(1){if((C|0)>(b[j+238>>1]|0))break;p=c[j+196>>2]|0;i=c[p+(C<<6)>>2]|0;G=i+D|0;g=c[p+(C<<6)+4>>2]|0;f=c[g>>2]|0;if(!f)f=H;else{_=+(H|0);f=c[f+16>>2]|0;y=+h[f+16>>3]-+h[f+88>>3];f=~~(y>_?_:y)}if((i|0)!=0?(J=c[g+(i+-1<<2)>>2]|0,(J|0)!=0):0){y=+(I|0);g=c[J+16>>2]|0;_=+h[g+96>>3]+ +h[g+16>>3];g=~~(_<y?y:_)}else g=I;B=f+-16|0;z=g+16|0;x=0;t=L;r=M;q=j;u=E;v=m;g=k;f=p;while(1){if((x|0)>=(i|0))break;k=c[(c[f+(C<<6)+4>>2]|0)+(x<<2)>>2]|0;w=k+16|0;f=c[w>>2]|0;i=c[f+112>>2]|0;if(i){i=i+16|0;j=c[(c[i>>2]|0)+96>>2]|0;if(!j){A=21;break a}s=j+56|0;f=f+16|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];a[(c[(c[i>>2]|0)+96>>2]|0)+81>>0]=1;f=c[w>>2]|0}if((a[f+156>>0]|0)!=0?($a[c[17228>>2]&31](k)|0)<<24>>24==0:0){q=t;f=r;j=u;k=v;i=o}else{s=0;q=t;j=u;k=v;A=25}b:do if((A|0)==25){while(1){A=0;p=c[w>>2]|0;i=c[(c[p+180>>2]|0)+(s<<2)>>2]|0;if(!i)break;switch(a[(c[i+16>>2]|0)+112>>0]|0){case 6:case 4:{f=q;i=r;break}default:{ag(i,1,16,64);f=q+1|0;c[r+(q<<2)>>2]=i;if(!(f&127)){g=zw(g,(q<<2)+516|0)|0;i=g;j=g;k=g;n=g;o=g}else i=r}}s=s+1|0;q=f;r=i;A=25}f=c[p+188>>2]|0;c:do if(!f)i=o;else{s=0;i=o;while(1){f=c[f+(s<<2)>>2]|0;if(!f)break c;ag(f,2,0,128);o=q+1|0;c[r+(q<<2)>>2]=f;if(!(o&127)){g=zw(i,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=r;p=c[w>>2]|0;s=s+1|0;q=o;r=f;f=c[p+188>>2]|0}}while(0);f=c[p+204>>2]|0;if(!f)f=r;else{if(!(a[p+156>>0]|0)){v=p+96|0;_=+h[v>>3];s=p+240|0;h[v>>3]=+h[s>>3];h[s>>3]=_;s=0;p=r}else{s=0;p=r}while(1){f=c[f+(s<<2)>>2]|0;if(!f){f=p;break b}ag(f,0,0,128);o=q+1|0;c[p+(q<<2)>>2]=f;if(!(o&127)){g=zw(n,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=p;s=s+1|0;q=o;p=f;f=c[(c[w>>2]|0)+204>>2]|0}}}while(0);u=c[V>>2]|0;w=c[u+196>>2]|0;x=x+1|0;t=q;r=f;q=u;u=j;v=k;o=i;i=c[w+(C<<6)>>2]|0;f=w}C=C+1|0;D=G;L=t;M=r;E=u;j=q;m=v;k=g;H=B;I=z}if((A|0)==21)ma(78158,78171,313,78184);c[Y>>2]=H;c[F>>2]=I;sL(E,L,4,10);c[W+84>>2]=ww((D<<5)+11520|0)|0;c[Y+16>>2]=ww(C<<5)|0;d:do if(X<<16>>16==2){f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break d;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){cg(g);f=c[i>>2]|0}f=f+164|0}}while(0);z=U+48|0;A=U+-48|0;B=T+48|0;C=T+-48|0;y=+(K|0);x=0;e:while(1){if((x|0)>=(L|0))break;v=M+(x<<2)|0;r=c[v>>2]|0;s=dg(r)|0;t=r+16|0;g=c[t>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:r;f=g;g=c[g+16>>2]|0}else f=r;i=f+16|0;if(c[g+164>>2]&32){g=c[Q>>2]|0;UN(g|0,c[i>>2]|0,176)|0;n=T;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[Q>>2]=g;o=c[f>>2]&3;n=c[T>>2]&3;c[((n|0)==3?T:B)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?T:C)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f;f=T}q=f+16|0;w=1;f=x;while(1){u=f+1|0;if((u|0)>=(L|0))break;j=M+(u<<2)|0;f=c[j>>2]|0;if((s|0)!=(dg(f)|0))break;if(!(a[(c[t>>2]|0)+113>>0]|0)){k=f+16|0;g=c[k>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:f;f=g;g=c[g+16>>2]|0}i=f+16|0;if(c[g+164>>2]&32){g=c[R>>2]|0;UN(g|0,c[i>>2]|0,176)|0;n=U;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[R>>2]=g;o=c[f>>2]&3;n=c[U>>2]&3;c[((n|0)==3?U:z)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?U:A)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f}i=c[q>>2]|0;f=g+16|0;n=N;o=i+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(Xf(N,O)|0)break;f=g+56|0;n=N;o=i+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(Xf(N,O)|0)break;K=c[t>>2]|0;if((c[K+164>>2]&15|0)==2?(c[K+96>>2]|0)!=(c[(c[k>>2]|0)+96>>2]|0):0)break;if(c[(c[(c[j>>2]|0)+16>>2]|0)+164>>2]&64|0)break}w=w+1|0;f=u}if(S){if((w|0)==1)f=O;else f=ww(w<<2)|0;c[f>>2]=dg(c[v>>2]|0)|0;g=1;while(1){if((g|0)>=(w|0))break;c[f+(g<<2)>>2]=c[v+(g<<2)>>2];g=g+1|0}vy(d,f,w,P,17224);if((w|0)>1)$I(f);x=u;continue}f=c[r>>2]&3;K=c[((f|0)==3?r:r+48|0)+40>>2]|0;f=c[((f|0)==2?r:r+-48|0)+40>>2]|0;g=c[K+16>>2]|0;i=c[g+232>>2]|0;if((K|0)!=(f|0))if((i|0)==(c[(c[f+16>>2]|0)+232>>2]|0)){eg(d,Y,W,M,x,w,P);x=u;continue}else{fg(d,Y,W,M,x,w,P);x=u;continue}f=c[V>>2]|0;do if((i|0)==(b[f+238>>1]|0))if((i|0)>0){f=~~(+h[(c[(c[c[(c[f+196>>2]|0)+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[g+24>>3]);break}else{f=~~+h[g+80>>3];break}else if((i|0)==(b[f+236>>1]|0)){f=~~(+h[g+24>>3]-+h[(c[(c[c[(c[f+196>>2]|0)+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);break}else{f=c[f+196>>2]|0;_=+h[g+24>>3];K=~~(+h[(c[(c[c[f+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-_);f=~~(_-+h[(c[(c[c[f+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);f=(K|0)<(f|0)?K:f;break}while(0);Sz(W,M,x,w,y,+((f|0)/2|0|0),17224);f=0;while(1){if((f|0)>=(w|0)){x=u;continue e}g=c[(c[(c[M+(f+x<<2)>>2]|0)+16>>2]|0)+96>>2]|0;if(g|0)cB(d,g);f=f+1|0}}f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){cg(g);cB(d,c[(c[i>>2]|0)+104>>2]|0);f=c[i>>2]|0}f=f+164|0}if(!e){n=W;k=W}else{gg(d);n=W;k=W}}f:do if((c[42242]|0)!=0|(c[42243]|0)!=0?(c[42248]|0)!=0|(c[42247]|0)!=0:0){j=eo(d)|0;while(1){if(!j)break f;g:do if(c[42242]|0){f=Tm(d,j)|0;while(1){if(!f)break g;g=f+-48|0;i=(c[f>>2]&3|0)==2?f:g;if(c[(c[i+16>>2]|0)+100>>2]|0){_z(i,1)|0;cB(d,c[(c[((c[f>>2]&3|0)==2?f:g)+16>>2]|0)+100>>2]|0)}f=Um(d,f)|0}}while(0);h:do if(c[42243]|0){f=Qm(d,j)|0;while(1){if(!f)break h;g=f+16|0;if(c[(c[g>>2]|0)+104>>2]|0?_z(f,0)|0:0)cB(d,c[(c[g>>2]|0)+104>>2]|0);f=Sm(d,f)|0}}while(0);j=fo(d,j)|0}}while(0);switch(X&15){case 4:case 8:break;default:{$I(m);$I(c[n+84>>2]|0);$I(k);$I(c[Y+16>>2]|0);ny()}}c[42182]=1;c[42183]=1}while(0);l=Z;return}function _f(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=eo(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;if(c[d+204>>2]|0){f=d+96|0;e=+h[f>>3];d=d+240|0;h[f>>3]=+h[d>>3];h[d>>3]=e}b=fo(a,b)|0}return}function $f(b){b=b|0;var d=0,e=0,f=0,g=0;d=(c[b+16>>2]|0)+192|0;a:while(1){f=c[d>>2]|0;if(!f){d=12;break}g=f+16|0;d=c[g>>2]|0;do if((a[d+156>>0]|0)==1){e=c[d+112>>2]|0;if(!e){e=c[d+104>>2]|0;if(!e)break;cg(f);d=e}else{e=c[(c[e+16>>2]|0)+96>>2]|0;if(!e){d=6;break a}f=e+56|0;d=d+16|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];a[e+81>>0]=1;d=e}cB(b,d);d=c[g>>2]|0}while(0);d=d+164|0}if((d|0)==6)ma(78358,78171,234,78377);else if((d|0)==12)return}function ag(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;do if(!d){g=c[b>>2]&3;d=c[((g|0)==3?b:b+48|0)+40>>2]|0;g=c[((g|0)==2?b:b+-48|0)+40>>2]|0;if((d|0)!=(g|0)){d=(c[(c[d+16>>2]|0)+232>>2]|0)==(c[(c[g+16>>2]|0)+232>>2]|0)?2:1;break}d=c[b+16>>2]|0;if(!(a[d+44>>0]|0))d=(a[d+84>>0]|0)==0?8:4;else d=4}while(0);a:do if(!e)switch(d|0){case 1:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)?16:32;break a}case 2:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)?16:32;break a}default:{e=16;break a}}while(0);c[(c[b+16>>2]|0)+164>>2]=d|f|e;return}function bg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+624|0;z=D+584|0;y=D+544|0;s=D+368|0;e=D+192|0;t=D+96|0;v=D;u=t+16|0;c[u>>2]=s;w=v+16|0;c[w>>2]=e;C=c[b>>2]|0;B=c[d>>2]|0;x=C+16|0;q=c[x>>2]|0;d=c[q+164>>2]|0;f=d&15;A=B+16|0;b=c[A>>2]|0;g=c[b+164>>2]&15;do if((g|0)==(f|0)){p=dg(C)|0;r=dg(B)|0;n=c[p>>2]|0;g=n&3;f=c[(c[((g|0)==3?p:p+48|0)+40>>2]|0)+16>>2]|0;g=c[(c[((g|0)==2?p:p+-48|0)+40>>2]|0)+16>>2]|0;i=(c[f+232>>2]|0)-(c[g+232>>2]|0)|0;o=c[r>>2]|0;m=o&3;k=c[(c[((m|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0;m=c[(c[((m|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0;j=(c[k+232>>2]|0)-(c[m+232>>2]|0)|0;i=(i|0)>-1?i:0-i|0;j=(j|0)>-1?j:0-j|0;if((i|0)!=(j|0)){b=i-j|0;break}g=~~(+h[f+16>>3]-+h[g+16>>3]);g=(g|0)>-1?g:0-g|0;f=~~(+h[k+16>>3]-+h[m+16>>3]);f=(f|0)>-1?f:0-f|0;if((g|0)!=(f|0)){b=g-f|0;break}g=n>>>4;f=o>>>4;if((g|0)!=(f|0)){b=g-f|0;break}if(!(a[q+44>>0]|0)){d=(a[q+84>>0]|0)==0?p:C;g=d;d=c[(c[d+16>>2]|0)+164>>2]|0}else g=C;f=g+16|0;if(d&32){UN(s|0,c[f>>2]|0,176)|0;i=t;j=g;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[u>>2]=s;j=c[g>>2]&3;i=c[t>>2]&3;c[((i|0)==3?t:t+48|0)+40>>2]=c[((j|0)==2?g:g+-48|0)+40>>2];c[((i|0)==2?t:t+-48|0)+40>>2]=c[((j|0)==3?g:g+48|0)+40>>2];i=s+16|0;j=(c[f>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=s+56|0;j=(c[f>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[s+112>>0]=1;c[s+116>>2]=g;g=t;b=c[A>>2]|0}if(!(a[b+44>>0]|0)){b=(a[b+84>>0]|0)==0?r:B;f=b;b=c[b+16>>2]|0}else f=B;d=f+16|0;if(!(c[b+164>>2]&32))e=b;else{UN(e|0,c[d>>2]|0,176)|0;i=v;j=f;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[w>>2]=e;j=c[f>>2]&3;i=c[v>>2]&3;c[((i|0)==3?v:v+48|0)+40>>2]=c[((j|0)==2?f:f+-48|0)+40>>2];c[((i|0)==2?v:v+-48|0)+40>>2]=c[((j|0)==3?f:f+48|0)+40>>2];i=e+16|0;j=(c[d>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=e+56|0;j=(c[d>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[e+112>>0]=1;c[e+116>>2]=f}d=c[g+16>>2]|0;b=e+16|0;i=y;j=d+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=Xf(y,z)|0;if(!b){b=e+56|0;i=y;j=d+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=Xf(y,z)|0;if(!b){d=c[(c[x>>2]|0)+164>>2]&192;b=c[(c[A>>2]|0)+164>>2]&192;if((d|0)==(b|0)){b=((c[C>>2]|0)>>>4)-((c[B>>2]|0)>>>4)|0;break}else{b=d-b|0;break}}}}else b=g-f|0;while(0);l=D;return b|0}function cg(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=b+16|0;d=c[f>>2]|0;if(c[d+176>>2]|0){d=c[d+180>>2]|0;while(1){d=(c[d>>2]|0)+16|0;e=c[d>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}e=c[e+96>>2]|0;g=+h[e+24>>3];i=+h[e+32>>3];e=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=c[f>>2]|0;f=c[(c[d>>2]|0)+96>>2]|0;h[f+56>>3]=(e?i:g)*.5+ +h[b+16>>3];h[f+64>>3]=+h[b+24>>3];a[f+81>>0]=1}return}function dg(a){a=a|0;var b=0,d=0;while(1){b=c[a+16>>2]|0;d=c[b+172>>2]|0;if(!d)break;else a=d}while(1){b=c[b+116>>2]|0;if(!b)break;a=b;b=c[b+16>>2]|0}return a|0}function eg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;B=l;l=l+1712|0;x=B+1664|0;s=B+1488|0;t=B+1392|0;A=B+1696|0;y=B+696|0;z=B;p=t+16|0;c[p>>2]=s;q=c[f+(g<<2)>>2]|0;r=q+16|0;k=c[r>>2]|0;u=a[k+113>>0]|0;if(c[k+164>>2]&32){UN(s|0,k|0,176)|0;k=t;n=q;o=k+48|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));c[p>>2]=s;k=c[t>>2]&3;c[((k|0)==3?t:t+48|0)+40>>2]=c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2];c[((k|0)==2?t:t+-48|0)+40>>2]=c[((c[q>>2]&3|0)==3?q:q+48|0)+40>>2];k=s+16|0;n=(c[r>>2]|0)+56|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));k=s+56|0;n=(c[r>>2]|0)+16|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));a[s+112>>0]=1;c[s+116>>2]=q;q=t}k=1;while(1){if((k|0)>=(i|0)){w=6;break}if(!(a[(c[(c[f+(k+g<<2)>>2]|0)+16>>2]|0)+113>>0]|0))k=k+1|0;else{w=7;break}}a:do if((w|0)==6)if(!(u<<24>>24)){k=c[q+16>>2]|0;if(c[k+96>>2]|0){Eg(b,d,e,q,j);break}if((j|0)==2){A=c[q>>2]&3;Fg(c[((A|0)==3?q:q+48|0)+40>>2]|0,c[((A|0)==2?q:q+-48|0)+40>>2]|0,f,g,i,2);break}t=a[k+49>>0]|0;u=a[k+89>>0]|0;if(!(t<<24>>24==1&u<<24>>24!=4)?!(t<<24>>24!=4&u<<24>>24==1):0){p=c[q>>2]&3;o=c[((p|0)==3?q:q+48|0)+40>>2]|0;p=c[((p|0)==2?q:q+-48|0)+40>>2]|0;k=c[o+16>>2]|0;n=c[k+232>>2]|0;if((n|0)>0){u=c[(c[b+16>>2]|0)+196>>2]|0;t=n+~(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1)|0;m=+h[(c[(c[c[u+(t<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[u+(t<<6)+16>>3]-+h[k+24>>3]-+h[u+(n<<6)+24>>3]}else m=+(c[(c[b+16>>2]|0)+252>>2]|0);C=+(i+1|0);v=+(c[d+12>>2]|0)/C;m=m/C;Hg(b,d,e,o,q,y,1);Hg(b,d,e,p,q,z,0);s=y+52|0;t=z+52|0;p=(j|0)==10;q=e+80|0;k=0;while(1){if((k|0)>=(i|0))break a;r=c[f+(k+g<<2)>>2]|0;o=c[s>>2]|0;n=o+-1|0;G=+h[y+56+(n<<5)>>3];F=+h[y+56+(n<<5)+16>>3];E=+h[y+56+(n<<5)+24>>3];h[16878]=G;h[16879]=E;k=k+1|0;C=+(k|0);D=v*C;h[16880]=F+D;C=E+m*C;h[16881]=C;h[16882]=G;h[16883]=C;n=(c[t>>2]|0)+-1|0;G=+h[z+56+(n<<5)+16>>3];h[16884]=G;h[16885]=C+m;E=+h[z+56+(n<<5)>>3];F=+h[z+56+(n<<5)+24>>3];h[16888]=G;h[16887]=F;h[16886]=E-D;h[16889]=C;n=0;while(1){if((n|0)>=(o|0)){n=0;break}o=y+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];Mz(e,x);n=n+1|0;o=c[s>>2]|0}while(1){if((n|0)==3)break;j=135024+(n<<5)|0;c[x>>2]=c[j>>2];c[x+4>>2]=c[j+4>>2];c[x+8>>2]=c[j+8>>2];c[x+12>>2]=c[j+12>>2];c[x+16>>2]=c[j+16>>2];c[x+20>>2]=c[j+20>>2];c[x+24>>2]=c[j+24>>2];c[x+28>>2]=c[j+28>>2];Mz(e,x);n=n+1|0}o=c[t>>2]|0;while(1){n=o+-1|0;if((o|0)<=0)break;o=z+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];Mz(e,x);o=n}if(p)n=oy(e,A)|0;else n=uy(e,A)|0;o=c[A>>2]|0;if(!o)break a;Kz(r,c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0,n,o,17224);c[q>>2]=0}}Gg(b,d,e,f,g,i,q,(j|0)==10&1)}else w=7;while(0);if((w|0)==7)Dg(b,f,g,i,q,j);l=B;return}function fg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ba=l;l=l+2576|0;S=ba+2528|0;_=ba+2568|0;k=ba+2352|0;n=ba+2176|0;t=ba+1904|0;Y=ba+1808|0;$=ba+1712|0;T=ba+1016|0;U=ba+320|0;V=ba+256|0;X=ba+2564|0;Z=ba+2560|0;z=ba+288|0;A=ba+224|0;L=ba+192|0;M=ba+160|0;N=ba+128|0;P=ba+96|0;Q=ba+64|0;R=ba+32|0;W=ba;s=t+16|0;c[s>>2]=k;o=Y+16|0;c[o>>2]=n;aa=$+16|0;c[aa>>2]=ba+2e3;if(!(c[41920]|0)){c[41920]=xw(32e3)|0;c[41921]=xw(32e3)|0;c[41922]=2e3;c[41923]=2e3}u=c[f+(g<<2)>>2]|0;K=c[u>>2]&3;p=u+48|0;q=u+-48|0;K=(c[(c[(c[((K|0)==3?u:p)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((K|0)==2?u:q)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0;r=u+16|0;if((((K|0)>-1?K:0-K|0)|0)<=1){k=c[r>>2]|0;if(!(c[k+164>>2]&32)){K=u;n=0}else{n=c[s>>2]|0;UN(n|0,k|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=n;w=c[t>>2]&3;c[((w|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?t:t+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[s>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;n=0;J=12}}else{UN(k|0,c[r>>2]|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));w=t+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=k;k=c[r>>2]|0;if(!(c[k+164>>2]&32)){UN(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=Y+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}else{n=c[o>>2]|0;UN(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;w=c[Y>>2]&3;c[((w|0)==3?Y:Y+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?Y:Y+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[o>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=u;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];w=(c[s>>2]|0)+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}k=dg(u)|0;while(1){n=c[(c[k+16>>2]|0)+172>>2]|0;if(!n)break;else k=n}c[((o&3|0)==2?t:t+-48|0)+40>>2]=c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2];k=c[s>>2]|0;a[k+84>>0]=0;a[k+112>>0]=1;n=k+56|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=1;J=12}if((J|0)==12){c[k+116>>2]=u;K=t}H=(j|0)==2;if(H?(v=jg(b,K,c[41920]|0,_)|0,c[Z>>2]=v,(v|0)!=0):0)J=63;else J=15;a:do if((J|0)==15){G=(j|0)==10;c[Z>>2]=0;o=c[K>>2]&3;k=c[((o|0)==3?K:K+48|0)+40>>2]|0;o=c[((o|0)==2?K:K+-48|0)+40>>2]|0;c[_>>2]=o;kg(z,b,d,k,0,K);c[T>>2]=c[z>>2];c[T+4>>2]=c[z+4>>2];c[T+8>>2]=c[z+8>>2];c[T+12>>2]=c[z+12>>2];c[T+16>>2]=c[z+16>>2];c[T+20>>2]=c[z+20>>2];c[T+24>>2]=c[z+24>>2];c[T+28>>2]=c[z+28>>2];c[V>>2]=c[z>>2];c[V+4>>2]=c[z+4>>2];c[V+8>>2]=c[z+8>>2];c[V+12>>2]=c[z+12>>2];c[V+16>>2]=c[z+16>>2];c[V+20>>2]=c[z+20>>2];Nz(e,K,1,T,lg(k)|0);B=T+52|0;I=(c[B>>2]|0)+-1|0;D=V+24|0;h[D>>3]=+h[T+56+(I<<5)+24>>3];E=V+8|0;h[E>>3]=+h[T+56+(I<<5)+8>>3];I=c[k+16>>2]|0;F=b+16|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];mg(A,S,1,m);c[V>>2]=c[A>>2];c[V+4>>2]=c[A+4>>2];c[V+8>>2]=c[A+8>>2];c[V+12>>2]=c[A+12>>2];c[V+16>>2]=c[A+16>>2];c[V+20>>2]=c[A+20>>2];c[V+24>>2]=c[A+24>>2];c[V+28>>2]=c[A+28>>2];A=V+16|0;if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){I=c[B>>2]|0;c[B>>2]=I+1;I=T+56+(I<<5)|0;c[I>>2]=c[V>>2];c[I+4>>2]=c[V+4>>2];c[I+8>>2]=c[V+8>>2];c[I+12>>2]=c[V+12>>2];c[I+16>>2]=c[V+16>>2];c[I+20>>2]=c[V+20>>2];c[I+24>>2]=c[V+24>>2];c[I+28>>2]=c[V+28>>2]}w=b+60|0;C=U+52|0;x=e+56|0;y=e+69|0;j=e+16|0;z=e+29|0;I=K;q=0;r=-1;b:while(1){s=k;t=0;k=0;u=I;while(1){p=o;v=o;if((a[(c[p+16>>2]|0)+156>>0]|0)!=1)break b;if(($a[c[17228>>2]&31](p)|0)<<24>>24)break b;o=t|1;ca=135024+(t<<5)|0;ng(L,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[ca>>2]=c[L>>2];c[ca+4>>2]=c[L+4>>2];c[ca+8>>2]=c[L+8>>2];c[ca+12>>2]=c[L+12>>2];c[ca+16>>2]=c[L+16>>2];c[ca+20>>2]=c[L+20>>2];c[ca+24>>2]=c[L+24>>2];c[ca+28>>2]=c[L+28>>2];if(!k){q=og(p)|0;k=(q|0)<((a[(c[(c[w>>2]|0)+16>>2]|0)+113>>0]<<1&2)+3&255|0);q=k?q:q+-2|0;r=k?r:1;k=(k^1)&1}if(!((k|0)==0|(r|0)>0))break;ca=135024+(o<<5)|0;kg(M,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[ca>>2]=c[M>>2];c[ca+4>>2]=c[M+4>>2];c[ca+8>>2]=c[M+8>>2];c[ca+12>>2]=c[M+12>>2];c[ca+16>>2]=c[M+16>>2];c[ca+20>>2]=c[M+20>>2];c[ca+24>>2]=c[M+24>>2];c[ca+28>>2]=c[M+28>>2];ca=c[c[(c[v+16>>2]|0)+180>>2]>>2]|0;o=c[ca>>2]&3;s=c[((o|0)==3?ca:ca+48|0)+40>>2]|0;o=c[((o|0)==2?ca:ca+-48|0)+40>>2]|0;c[_>>2]=o;t=t+2|0;r=r+-1|0;u=ca}kg(N,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[U>>2]=c[N>>2];c[U+4>>2]=c[N+4>>2];c[U+8>>2]=c[N+8>>2];c[U+12>>2]=c[N+12>>2];c[U+16>>2]=c[N+16>>2];c[U+20>>2]=c[N+20>>2];c[U+24>>2]=c[N+24>>2];c[U+28>>2]=c[N+28>>2];Qz(e,u,1,U,lg(c[((c[u>>2]&3|0)==2?u:u+-48|0)+40>>2]|0)|0);ca=U+56+((c[C>>2]|0)+-1<<5)|0;t=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[t+232>>2]<<6)+24>>3]+ +h[t+24>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];mg(V,S,4,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[x>>3]=1.5707963267948966;a[y>>0]=1;pg(e,I,u,T,U,o);if(!G){k=uy(e,X)|0;o=c[X>>2]|0;if(H&(o|0)>4){ca=k+16|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];ca=k+32|0;o=k+(o+-1<<4)|0;c[ca>>2]=c[o>>2];c[ca+4>>2]=c[o+4>>2];c[ca+8>>2]=c[o+8>>2];c[ca+12>>2]=c[o+12>>2];VN(k+48|0,o|0,16)|0;c[X>>2]=4;o=4}else J=33}else{k=oy(e,X)|0;o=c[X>>2]|0;J=33}if((J|0)==33){J=0;if(!o)break a}u=c[Z>>2]|0;p=u+o|0;if((p|0)>(c[41922]|0)){c[41922]=p<<1;t=zw(c[41920]|0,p<<5)|0;c[41920]=t;o=c[X>>2]|0}else t=c[41920]|0;s=0;p=u;while(1){if((s|0)>=(o|0))break;ca=t+(p<<4)|0;u=k+(s<<4)|0;c[ca>>2]=c[u>>2];c[ca+4>>2]=c[u+4>>2];c[ca+8>>2]=c[u+8>>2];c[ca+12>>2]=c[u+12>>2];s=s+1|0;p=p+1|0}c[Z>>2]=p;o=qg(c[c[(c[v+16>>2]|0)+180>>2]>>2]|0,q,t,Z)|0;rg(I,e);p=c[o>>2]&3;k=c[((p|0)==3?o:o+48|0)+40>>2]|0;p=c[((p|0)==2?o:o+-48|0)+40>>2]|0;c[_>>2]=p;I=k+16|0;kg(P,b,d,k,c[c[(c[I>>2]|0)+172>>2]>>2]|0,o);c[T>>2]=c[P>>2];c[T+4>>2]=c[P+4>>2];c[T+8>>2]=c[P+8>>2];c[T+12>>2]=c[P+12>>2];c[T+16>>2]=c[P+16>>2];c[T+20>>2]=c[P+20>>2];c[T+24>>2]=c[P+24>>2];c[T+28>>2]=c[P+28>>2];Nz(e,o,1,T,lg(k)|0);ca=T+56+((c[B>>2]|0)+-1<<5)|0;I=c[I>>2]|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];mg(V,S,1,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[B>>2]|0;c[B>>2]=ca+1;ca=T+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[j>>3]=-1.5707963267948966;a[z>>0]=1;I=o;o=p}k=t|1;r=135024+(t<<5)|0;ng(Q,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[r>>2]=c[Q>>2];c[r+4>>2]=c[Q+4>>2];c[r+8>>2]=c[Q+8>>2];c[r+12>>2]=c[Q+12>>2];c[r+16>>2]=c[Q+16>>2];c[r+20>>2]=c[Q+20>>2];c[r+24>>2]=c[Q+24>>2];c[r+28>>2]=c[Q+28>>2];kg(R,b,d,p,u,0);c[U>>2]=c[R>>2];c[U+4>>2]=c[R+4>>2];c[U+8>>2]=c[R+8>>2];c[U+12>>2]=c[R+12>>2];c[U+16>>2]=c[R+16>>2];c[U+20>>2]=c[R+20>>2];c[U+24>>2]=c[R+24>>2];c[U+28>>2]=c[R+28>>2];c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[V+20>>2]=c[R+20>>2];c[V+24>>2]=c[R+24>>2];c[V+28>>2]=c[R+28>>2];r=(n|0)!=0;s=u+-48|0;Qz(e,r?Y:u,1,U,lg(c[((c[u>>2]&3|0)==2?u:s)+40>>2]|0)|0);ca=(c[C>>2]|0)+-1|0;h[D>>3]=+h[U+56+(ca<<5)+24>>3];h[E>>3]=+h[U+56+(ca<<5)+8>>3];ca=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[ca+232>>2]<<6)+24>>3]+ +h[ca+24>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];mg(W,S,4,m);c[V>>2]=c[W>>2];c[V+4>>2]=c[W+4>>2];c[V+8>>2]=c[W+8>>2];c[V+12>>2]=c[W+12>>2];c[V+16>>2]=c[W+16>>2];c[V+20>>2]=c[W+20>>2];c[V+24>>2]=c[W+24>>2];c[V+28>>2]=c[W+28>>2];if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}pg(e,I,u,T,U,k);if(G)q=oy(e,X)|0;else q=uy(e,X)|0;k=c[X>>2]|0;if(!(H&(k|0)>4)){if(!k)break}else{ca=q+16|0;c[ca>>2]=c[q>>2];c[ca+4>>2]=c[q+4>>2];c[ca+8>>2]=c[q+8>>2];c[ca+12>>2]=c[q+12>>2];ca=q+32|0;k=q+(k+-1<<4)|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];VN(q+48|0,k|0,16)|0;c[X>>2]=4;k=4}o=c[Z>>2]|0;n=o+k|0;if((n|0)>(c[41922]|0)){c[41922]=n<<1;p=zw(c[41920]|0,n<<5)|0;c[41920]=p;k=c[X>>2]|0}else p=c[41920]|0;n=0;while(1){if((n|0)>=(k|0))break;ca=p+(o<<4)|0;X=q+(n<<4)|0;c[ca>>2]=c[X>>2];c[ca+4>>2]=c[X+4>>2];c[ca+8>>2]=c[X+8>>2];c[ca+12>>2]=c[X+12>>2];n=n+1|0;o=o+1|0}c[Z>>2]=o;rg(I,e);if(r)k=(c[Y>>2]&3|0)==2?Y:Y+-48|0;else k=(c[u>>2]&3|0)==2?u:s;c[_>>2]=c[k+40>>2];v=o;J=63}while(0);c:do if((J|0)==63){if((i|0)==1){Kz(K,c[_>>2]|0,c[41920]|0,v,17224);break}t=d+12|0;u=v+-1|0;m=+((O(c[t>>2]|0,i+-1|0)|0)/2|0|0);n=c[41920]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=n+(k<<4)|0;h[ca>>3]=+h[ca>>3]-m;k=k+1|0}k=c[41922]|0;if((k|0)>(c[41923]|0)){c[41923]=k;o=zw(c[41921]|0,k<<4)|0;c[41921]=o;n=c[41920]|0}else o=c[41921]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=o+(k<<4)|0;d=n+(k<<4)|0;c[ca>>2]=c[d>>2];c[ca+4>>2]=c[d+4>>2];c[ca+8>>2]=c[d+8>>2];c[ca+12>>2]=c[d+12>>2];k=k+1|0}Kz(K,c[_>>2]|0,o,v,17224);r=$+48|0;s=$+-48|0;q=1;while(1){if((q|0)>=(i|0))break c;o=c[f+(q+g<<2)>>2]|0;p=o+16|0;k=c[p>>2]|0;if(c[k+164>>2]&32){n=c[aa>>2]|0;UN(n|0,k|0,176)|0;w=$;x=o;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[aa>>2]=n;w=c[$>>2]&3;c[((w|0)==3?$:r)+40>>2]=c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2];c[((w|0)==2?$:s)+40>>2]=c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2];w=n+16|0;x=(c[p>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[aa>>2]|0;w=k+56|0;x=(c[p>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=o;o=$}p=c[41920]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=p+(k<<4)|0;h[ca>>3]=+h[ca>>3]+ +(c[t>>2]|0);k=k+1|0}n=c[41921]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=n+(k<<4)|0;_=p+(k<<4)|0;c[ca>>2]=c[_>>2];c[ca+4>>2]=c[_+4>>2];c[ca+8>>2]=c[_+8>>2];c[ca+12>>2]=c[_+12>>2];k=k+1|0}Kz(o,c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0,n,v,17224);q=q+1|0}}while(0);l=ba;return}function gg(a){a=a|0;var b=0,d=0,e=0;b=eo(a)|0;while(1){if(!b)break;d=Qm(a,b)|0;while(1){if(!d)break;if(($a[c[4306]&31](d)|0)<<24>>24?(e=c[(c[d+16>>2]|0)+8>>2]|0,e|0):0)hg(e);d=Sm(a,d)|0}b=fo(a,b)|0}return}function hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[a+4>>2]|0;g=xw(f*48|0)|0;b=g;d=0;e=(c[a>>2]|0)+((f+-1|0)*48|0)|0;while(1){if((d|0)>=(f|0)){b=0;break}ig(e,b);b=b+48|0;d=d+1|0;e=e+-48|0}while(1){d=c[a>>2]|0;if((b|0)>=(f|0))break;$I(c[d+(b*48|0)>>2]|0);b=b+1|0}$I(d);c[a>>2]=g;return}function ig(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[a+4>>2]|0;h=xw(g<<4)|0;d=h;e=0;f=(c[a>>2]|0)+(g+-1<<4)|0;while(1){if((e|0)>=(g|0))break;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];d=d+16|0;e=e+1|0;f=f+-16|0}c[b>>2]=h;c[b+4>>2]=g;c[b+8>>2]=c[a+12>>2];c[b+12>>2]=c[a+8>>2];h=b+16|0;g=a+32|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];h=b+32|0;g=a+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];return}function jg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+96|0;q=x+80|0;s=x+64|0;r=x+48|0;u=x+32|0;v=x+16|0;w=x;m=d;while(1){t=m+16|0;g=c[t>>2]|0;if(!(a[g+112>>0]|0))break;m=c[g+116>>2]|0}g=c[m>>2]&3;o=c[((g|0)==2?m:m+-48|0)+40>>2]|0;g=c[((g|0)==3?m:m+48|0)+40>>2]|0;m=o+16|0;n=g+16|0;y=(c[(c[m>>2]|0)+232>>2]|0)-(c[(c[n>>2]|0)+232>>2]|0)|0;switch(((y|0)>-1?y:0-y|0)|0){case 1:{g=0;break}case 2:{if(!(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1))p=6;else g=0;break}default:p=6}do if((p|0)==6){if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(g|0)){c[f>>2]=o;y=(c[n>>2]|0)+16|0;p=(c[t>>2]|0)+16|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Bg(u,s,q);p=(c[m>>2]|0)+16|0;y=(c[t>>2]|0)+56|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Bg(v,s,q)}else{c[f>>2]=g;y=(c[m>>2]|0)+16|0;p=(c[t>>2]|0)+56|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Bg(u,s,q);p=(c[n>>2]|0)+16|0;y=(c[t>>2]|0)+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Bg(v,s,q)}g=c[(c[t>>2]|0)+96>>2]|0;if(!g){g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+48|0;y=e+32|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=4;break}j=+h[g+24>>3];i=+h[g+32>>3];p=(c[(c[(so(o)|0)+16>>2]|0)+116>>2]&1|0)==0;k=p?i:j;y=(c[(c[t>>2]|0)+96>>2]|0)+56|0;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];y=(Cg(r,s,q)|0)==0;i=(p?j:i)*.5;j=+h[w>>3];if(y){h[w>>3]=j-i;y=w+8|0;h[y>>3]=+h[y>>3]+k*.5}else{h[w>>3]=j+i;y=w+8|0;h[y>>3]=+h[y>>3]-k*.5}g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+32|0;y=e+48|0;u=e+64|0;c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2];g=e+80|0;y=e+96|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=7}while(0);l=x;return g|0}function kg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0;q=c[f+16>>2]|0;p=+h[q+16>>3];j=p-+h[q+88>>3];m=j+-4.0;l=xg(d,f,g,i,-1)|0;if(!l){n=~~(j+(m>=0.0?-3.5:-4.5));k=c[e>>2]|0;k=(k|0)>(n|0)?n:k}else{k=yg(d,f,l)|0;do if(!k){n=c[l+16>>2]|0;j=+h[n+240>>3]+ +h[n+16>>3];if(!(a[n+156>>0]|0)){j=+(c[(c[d+16>>2]|0)+248>>2]|0)*.5+j;break}else{j=j+ +(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+32>>3]+ +(c[e+8>>2]|0);while(0);o=j<m?j:m;k=~~(o+(o>=0.0?.5:-.5))}o=+(k|0);n=(a[q+156>>0]|0)==1;if(n?(c[q+104>>2]|0)!=0:0)m=p+10.0;else m=p+4.0+ +h[q+96>>3];l=xg(d,f,g,i,1)|0;if(!l){f=~~(m+(m>=0.0?.5:-.5));k=c[e+4>>2]|0;k=(k|0)<(f|0)?f:k}else{k=yg(d,f,l)|0;do if(!k){f=c[l+16>>2]|0;j=+h[f+16>>3]-+h[f+88>>3];if(!(a[f+156>>0]|0)){j=j-+(c[(c[d+16>>2]|0)+248>>2]|0)*.5;break}else{j=j-+(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+16>>3]-+(c[e+8>>2]|0);while(0);m=j>m?j:m;k=~~(m+(m>=0.0?.5:-.5))}j=+(k|0);if(n?(c[q+104>>2]|0)!=0:0){j=j-+h[q+96>>3];if(j<o)j=p}p=+h[q+24>>3];d=c[(c[d+16>>2]|0)+196>>2]|0;q=c[q+232>>2]|0;m=p-+h[d+(q<<6)+16>>3];p=+h[d+(q<<6)+24>>3]+p;h[b>>3]=o;h[b+8>>3]=m;h[b+16>>3]=j;h[b+24>>3]=p;return}function lg(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)if((c[b+176>>2]|0)>1)b=1;else b=(c[b+184>>2]|0)>1&1;else b=0;return b|0}function mg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=l;l=l+32|0;f=g;switch(d|0){case 1:{wg(f,+h[b>>3],e,+h[b+16>>3],+h[b+8>>3]);break}case 4:{wg(f,+h[b>>3],+h[b+24>>3],+h[b+16>>3],e);break}default:{}}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];c[a+20>>2]=c[f+20>>2];c[a+24>>2]=c[f+24>>2];c[a+28>>2]=c[f+28>>2];l=g;return}function ng(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0;l=c[b+16>>2]|0;k=l+(e<<5)|0;j=+h[k>>3];m=l+(e<<5)+8|0;g=+h[m>>3];n=l+(e<<5)+16|0;f=+h[n>>3];l=l+(e<<5)+24|0;i=+h[l>>3];if(j==f){d=c[(c[d+16>>2]|0)+196>>2]|0;o=e+1|0;j=+(c[b>>2]|0);g=+h[d+(o<<6)+24>>3]+ +h[(c[(c[c[d+(o<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];f=+(c[b+4>>2]|0);i=+h[(c[(c[c[d+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[d+(e<<6)+16>>3];h[k>>3]=j;h[m>>3]=g;h[n>>3]=f;h[l>>3]=i}h[a>>3]=j;h[a+8>>3]=g;h[a+16>>3]=f;h[a+24>>3]=i;return}function og(b){b=b|0;var d=0,e=0;b=c[b+16>>2]|0;e=b+16|0;d=0;while(1){b=c[c[b+180>>2]>>2]|0;b=c[(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0;if((a[b+156>>0]|0)!=1)break;if((c[b+184>>2]|0)!=1)break;if((c[b+176>>2]|0)!=1)break;if(+h[b+16>>3]!=+h[e>>3])break;d=d+1|0}return d|0}function pg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+32|0;j=k;h=tg(b,-1)|0;b=tg(b,1)|0;if(!((h|0)!=0?!($z(h)|0):0))i=3;do if((i|0)==3){if(b|0?($z(b)|0)==0:0)break;h=ug(d,-1)|0;b=ug(d,1)|0;if(h|0?($z(h)|0)==0:0)break;if(b|0?($z(b)|0)==0:0)break;h=e+52|0;b=0;while(1){if((b|0)>=(c[h>>2]|0))break;d=e+56+(b<<5)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];c[j+20>>2]=c[d+20>>2];c[j+24>>2]=c[d+24>>2];c[j+28>>2]=c[d+28>>2];Mz(a,j);b=b+1|0}h=c[a+80>>2]|0;i=g+-3|0;b=0;while(1){if((b|0)>=(g|0))break;e=135024+(b<<5)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[j+16>>2]=c[e+16>>2];c[j+20>>2]=c[e+20>>2];c[j+24>>2]=c[e+24>>2];c[j+28>>2]=c[e+28>>2];Mz(a,j);b=b+1|0}d=h+1|0;i=i+d|0;h=c[f+52>>2]|0;while(1){b=h+-1|0;if((h|0)<=0)break;h=f+56+(b<<5)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];c[j+20>>2]=c[h+20>>2];c[j+24>>2]=c[h+24>>2];c[j+28>>2]=c[h+28>>2];Mz(a,j);h=b}vg(a,d,i)}while(0);l=k;return}function qg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[e>>2]|0;while(1){if(!b)break;a=c[c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0;b=b+-1|0}c[e>>2]=f+1;g=d+(f<<4)|0;b=d+(f+-1<<4)|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];f=c[e>>2]|0;c[e>>2]=f+1;f=d+(f<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];f=d+(c[e>>2]<<4)|0;e=(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];return a|0}function rg(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0;m=d+84|0;l=d+80|0;e=0;d=b;a:while(1){j=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;k=j+16|0;if((a[(c[k>>2]|0)+156>>0]|0)!=1)break;if(($a[c[17228>>2]&31](j)|0)<<24>>24)break;d=c[l>>2]|0;while(1){if((e|0)>=(d|0))break a;if(!(+h[(c[m>>2]|0)+(e<<5)+8>>3]>+h[(c[k>>2]|0)+24>>3]))break;e=e+1|0}d=c[m>>2]|0;b=c[k>>2]|0;do if(!(+h[d+(e<<5)+24>>3]<+h[b+24>>3])){g=+h[d+(e<<5)>>3];i=~~g;f=+h[d+(e<<5)+16>>3];if(!(c[b+104>>2]|0)){sg(j,i,~~((f+g)*.5),~~f);break}else{sg(j,i,~~f,~~(+h[b+96>>3]+f));break}}while(0);d=c[c[(c[k>>2]|0)+180>>2]>>2]|0}return}function sg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+16>>2]|0;h[a+16>>3]=+(d|0);h[a+88>>3]=+(d-b|0);h[a+96>>3]=+(e-d|0);return}function tg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180>>2]|0;h=((h|0)==2?a:a+-48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function ug(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172>>2]|0;h=((h|0)==3?a:a+48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function vg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0;l=a+84|0;i=b+-1|0;while(1){if((i|0)>(d|0))break;f=c[l>>2]|0;j=f+(i<<5)|0;e=+h[j>>3];if(!(i-b&1)){f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e>=m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}else{f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e+16.0>m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}i=i+1|0}k=(c[a+80>>2]|0)+-1|0;g=0;while(1){if((g|0)>=(k|0))break;i=c[l>>2]|0;f=i+(g<<5)|0;j=g+1|0;a=i+(j<<5)|0;if(!((g|0)<(b|0)|(g|0)>(d|0))?(g-b&1|0)==0:0){e=+h[f>>3]+16.0;f=i+(j<<5)+16|0;if(e>+h[f>>3])h[f>>3]=e;e=+h[i+(g<<5)+16>>3]+-16.0;if(!(e<+h[a>>3])){g=j;continue}h[a>>3]=e;g=j;continue}if(!((g|0)<(d|0)&(j|0)>=(b|0))){g=j;continue}if(j-b&1|0){g=j;continue}e=+h[i+(j<<5)+16>>3];if(+h[f>>3]+16.0>e)h[f>>3]=e+-16.0;f=i+(g<<5)+16|0;e=+h[a>>3];if(!(+h[f>>3]+-16.0<e)){g=j;continue}h[f>>3]=e+16.0;g=j}return}function wg(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function xg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=c[(c[b+16>>2]|0)+196>>2]|0;h=c[d+16>>2]|0;j=c[h+232>>2]|0;i=k+(j<<6)|0;j=k+(j<<6)+4|0;h=c[h+236>>2]|0;a:do{h=h+g|0;if((h|0)<=-1){b=0;break}if((h|0)>=(c[i>>2]|0)){b=0;break}b=c[(c[j>>2]|0)+(h<<2)>>2]|0;k=c[b+16>>2]|0;switch(a[k+156>>0]|0){case 0:break a;case 1:{if(c[k+104>>2]|0)break a;break}default:{}}}while((Ag(b,d,e,f)|0)<<24>>24!=0);return b|0}function yg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){i=c[d+212>>2]|0;h=i}else{i=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[i>>2]&3;h=c[(c[(c[((g|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;i=c[(c[(c[((g|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0}d=c[e+16>>2]|0;if(!(a[d+156>>0]|0)){e=c[d+212>>2]|0;e=(e|0)==(b|0)?0:e;return ((e|0)==(h|0)|((e|0)==0|(e|0)==(i|0))?0:e)|0}f=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[f>>2]&3;d=c[(c[(c[((g|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if(!(!((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))?(zg(d,e)|0)!=0:0)){d=c[(c[(c[((g|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))d=0;else{e=(zg(d,e)|0)==0;return (e?0:d)|0}}return d|0}function zg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;d=c[a+16>>2]|0;a=c[b+16>>2]|0;f=+h[a+16>>3];if((+h[d+16>>3]<=f?f<=+h[d+32>>3]:0)?(e=+h[a+24>>3],+h[d+24>>3]<=e):0)a=e<=+h[d+40>>3]&1;else a=0;return a|0}function Ag(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=c[b+16>>2]|0;j=(c[i+236>>2]|0)>(c[(c[d+16>>2]|0)+236>>2]|0);a:do if((c[i+184>>2]|0)==1){b:do if(f|0){h=0;b=c[c[i+180>>2]>>2]|0;while(1){if((h|0)>=2)break b;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((b|0)==(d|0))break b;g=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[g+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[g+184>>2]|0)!=1)break b;if(!(a[g+156>>0]|0))break b;if((c[b+184>>2]|0)!=1)break b;if(!(a[b+156>>0]|0))break b;h=h+1|0;f=c[c[b+180>>2]>>2]|0;b=c[c[g+180>>2]>>2]|0}}while(0);if(e|0?(c[i+176>>2]|0)==1:0){g=0;d=e;b=c[c[i+172>>2]>>2]|0;while(1){if((g|0)>=2){b=0;break a}b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((b|0)==(d|0)){b=0;break a}f=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[f+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[f+176>>2]|0)!=1){b=0;break a}if(!(a[f+156>>0]|0)){b=0;break a}if((c[b+176>>2]|0)!=1){b=0;break a}if(!(a[b+156>>0]|0)){b=0;break a}g=g+1|0;d=c[c[b+172>>2]>>2]|0;b=c[c[f+172>>2]>>2]|0}}else b=0}else b=0;while(0);return b|0}function Bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Cg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return (~~((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))|0)>0|0}function Dg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=l;l=l+256|0;D=R+232|0;C=R+216|0;P=R+88|0;O=R+80|0;K=R+64|0;L=R+200|0;M=R+184|0;N=R;E=R+168|0;F=R+152|0;G=R+136|0;H=R+120|0;I=R+104|0;B=c[g>>2]&3;J=c[((B|0)==3?g:g+48|0)+40>>2]|0;B=c[((B|0)==2?g:g+-48|0)+40>>2]|0;do if((Cy(J)|0)!=2?(Cy(B)|0)!=2:0){g=0;j=0;k=0;while(1){if((k|0)>=(f|0))break;A=c[(c[d+(k+e<<2)>>2]|0)+16>>2]|0;g=g+((c[A+96>>2]|0)!=0&1)|0;if(!((a[A+44>>0]|0)==0?(a[A+84>>0]|0)==0:0))j=1;k=k+1|0}if(!j)if(!g){Fg(J,B,d,e,f,i);break}else{Kg(J,B,d,e,f,i,g);break}y=ww(156)|0;z=Lg(b,y)|0;t=Jp(z,78320,1)|0;Oo(t,122277,280,1)|0;Lm(t,80018,80032)|0;m=+h[(c[B+16>>2]|0)+16>>3];s=+h[(c[J+16>>2]|0)+16>>3];A=b+16|0;q=(c[(c[A>>2]|0)+116>>2]&1|0)==0;r=q?B:J;q=q?J:B;t=Mg(t,q)|0;u=Mg(z,r)|0;g=0;p=0;while(1){if((p|0)>=(f|0))break;j=d+(p+e<<2)|0;while(1){o=c[j>>2]|0;n=o+16|0;j=c[n>>2]|0;if(!(a[j+112>>0]|0))break;else j=j+116|0}if((c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0)==(q|0))k=Ng(z,t,u,o)|0;else k=Ng(z,u,t,o)|0;j=c[n>>2]|0;c[j+120>>2]=k;if(!g)if((a[j+44>>0]|0)==0?(a[j+84>>0]|0)==0:0){c[(c[k+16>>2]|0)+120>>2]=o;g=k}else g=0;p=p+1|0}if(!g)x=bn(z,t,u,0,1)|0;else x=g;Dm(x,c[42219]|0,78324)|0;g=z+16|0;n=c[g>>2]|0;c[n+144>>2]=c[(c[A>>2]|0)+144>>2];c[n+188>>2]=z;JB(z,i);Cf(z);lj(z,0);vh(z,0);yi(z,0);q=q+16|0;i=c[q>>2]|0;n=c[r+16>>2]|0;r=t+16|0;o=c[r>>2]|0;p=o+16|0;v=+(~~m|0);w=+(~~((+h[(c[u+16>>2]|0)+16>>3]+ +h[p>>3])*.5)|0);m=+(~~s|0);s=+(~~((+h[i+16>>3]-+h[i+96>>3]+ +h[n+16>>3]+ +h[n+88>>3])*.5)|0);n=o+24|0;g=(c[g>>2]|0)+192|0;while(1){j=c[g>>2]|0;if(!j)break;do if((j|0)!=(t|0)){g=c[j+16>>2]|0;k=g+24|0;if((j|0)==(u|0)){h[k>>3]=m;h[g+16>>3]=w;break}else{h[k>>3]=s;break}}else{h[n>>3]=v;h[p>>3]=w;g=o}while(0);g=g+164|0}fk(z);Zf(z,0);ay(z);k=c[q>>2]|0;g=c[r>>2]|0;if(!(c[(c[A>>2]|0)+116>>2]&1)){j=g+16|0;m=+h[k+24>>3]-+h[g+24>>3]}else{j=g+24|0;m=+h[g+16>>3]+ +h[k+24>>3]}h[K>>3]=+h[k+16>>3]-+h[j>>3];h[K+8>>3]=m;i=N+16|0;t=N+32|0;u=N+48|0;r=0;while(1){if((r|0)>=(f|0))break;g=d+(r+e<<2)|0;while(1){j=c[g>>2]|0;q=j+16|0;g=c[q>>2]|0;if(!(a[g+112>>0]|0))break;else g=g+116|0}o=c[g+120>>2]|0;p=o+16|0;g=c[p>>2]|0;if(!((o|0)==(x|0)&(c[g+120>>2]|0)==0)){n=c[c[g+8>>2]>>2]|0;o=n+4|0;j=Jz(j,c[o>>2]|0)|0;c[j+8>>2]=c[n+8>>2];g=j+16|0;k=n+16|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(L,C,D,S);c[g>>2]=c[L>>2];c[g+4>>2]=c[L+4>>2];c[g+8>>2]=c[L+8>>2];c[g+12>>2]=c[L+12>>2];c[j+12>>2]=c[n+12>>2];g=j+32|0;S=n+32|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(M,C,D,k);c[g>>2]=c[M>>2];c[g+4>>2]=c[M+4>>2];c[g+8>>2]=c[M+8>>2];c[g+12>>2]=c[M+12>>2];g=0;while(1){if((g|0)>=(c[o>>2]|0))break;k=(c[j>>2]|0)+(g<<4)|0;T=(c[n>>2]|0)+(g<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[T>>2];c[C+4>>2]=c[T+4>>2];c[C+8>>2]=c[T+8>>2];c[C+12>>2]=c[T+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(E,C,D,S);c[k>>2]=c[E>>2];c[k+4>>2]=c[E+4>>2];c[k+8>>2]=c[E+8>>2];c[k+12>>2]=c[E+12>>2];c[N>>2]=c[E>>2];c[N+4>>2]=c[E+4>>2];c[N+8>>2]=c[E+8>>2];c[N+12>>2]=c[E+12>>2];k=g+1|0;if((k|0)>=(c[o>>2]|0)){Q=48;break}S=(c[j>>2]|0)+(k<<4)|0;k=(c[n>>2]|0)+(k<<4)|0;T=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(F,C,D,T);c[S>>2]=c[F>>2];c[S+4>>2]=c[F+4>>2];c[S+8>>2]=c[F+8>>2];c[S+12>>2]=c[F+12>>2];c[i>>2]=c[F>>2];c[i+4>>2]=c[F+4>>2];c[i+8>>2]=c[F+8>>2];c[i+12>>2]=c[F+12>>2];S=g+2|0;T=(c[j>>2]|0)+(S<<4)|0;S=(c[n>>2]|0)+(S<<4)|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(G,C,D,k);c[T>>2]=c[G>>2];c[T+4>>2]=c[G+4>>2];c[T+8>>2]=c[G+8>>2];c[T+12>>2]=c[G+12>>2];c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];T=g+3|0;k=(c[n>>2]|0)+(T<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(H,C,D,S);c[u>>2]=c[H>>2];c[u+4>>2]=c[H+4>>2];c[u+8>>2]=c[H+8>>2];c[u+12>>2]=c[H+12>>2];fu((c[A>>2]|0)+16|0,N);g=T}if((Q|0)==48)Q=0;g=c[(c[q>>2]|0)+96>>2]|0;if(g|0){T=g+56|0;p=(c[(c[p>>2]|0)+96>>2]|0)+56|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[p>>2];c[C+4>>2]=c[p+4>>2];c[C+8>>2]=c[p+8>>2];c[C+12>>2]=c[p+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];Og(I,C,D,S);c[T>>2]=c[I>>2];c[T+4>>2]=c[I+4>>2];c[T+8>>2]=c[I+8>>2];c[T+12>>2]=c[I+12>>2];T=c[(c[q>>2]|0)+96>>2]|0;a[T+81>>0]=1;cB(b,T)}}r=r+1|0}Pg(z,y)}else Q=3;while(0);if((Q|0)==3?(c[41924]|0)==0:0){c[41924]=1;$l(0,78197,O)|0;Q=En(J)|0;S=(rn(b)|0)!=0;T=En(B)|0;c[P>>2]=Q;c[P+4>>2]=S?122546:122549;c[P+8>>2]=T;$l(3,78303,P)|0}l=R;return}function Eg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;z=l;l=l+1600|0;u=z+1552|0;n=z+1536|0;t=z+840|0;v=z+144|0;w=z+1584|0;j=z+32|0;s=z+16|0;o=z;q=c[f>>2]&3;p=c[((q|0)==3?f:f+48|0)+40>>2]|0;x=f+-48|0;q=c[((q|0)==2?f:x)+40>>2]|0;r=f+16|0;k=c[r>>2]|0;i=c[k+172>>2]|0;while(1){m=c[(c[i+16>>2]|0)+172>>2]|0;if(!m)break;else i=m}k=(c[k+96>>2]|0)+56|0;i=(c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)+16|0;m=(c[i>>2]|0)+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[r>>2]|0;a[(c[k+96>>2]|0)+81>>0]=1;if((g|0)!=2){k=c[i>>2]|0;C=+h[k+16>>3];E=C-+h[k+88>>3];C=+h[k+96>>3]+C;B=+h[k+24>>3];D=+h[k+80>>3]*.5+B;k=c[(c[b+16>>2]|0)+196>>2]|0;m=c[p+16>>2]|0;j=c[m+232>>2]|0;B=+(~~(+(~~(B-+h[k+(j<<6)+16>>3]-+h[m+24>>3]+ +h[k+(j<<6)+24>>3])|0)*.16666666666666666)|0);B=D-(B<5.0?5.0:B);Hg(b,d,e,p,f,t,1);Hg(b,d,e,q,f,v,0);j=t+52|0;k=c[j>>2]|0;m=k+-1|0;A=+h[t+56+(m<<5)>>3];h[16878]=A;h[16879]=+h[t+56+(m<<5)+24>>3];h[16880]=E;h[16881]=B;h[16882]=A;h[16883]=B;m=v+52|0;i=(c[m>>2]|0)+-1|0;A=+h[v+56+(i<<5)+16>>3];h[16884]=A;h[16885]=D;h[16886]=C;h[16889]=B;h[16887]=+h[v+56+(i<<5)+24>>3];h[16888]=A;i=0;while(1){if((i|0)>=(k|0)){i=0;break}k=t+56+(i<<5)|0;c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];c[u+16>>2]=c[k+16>>2];c[u+20>>2]=c[k+20>>2];c[u+24>>2]=c[k+24>>2];c[u+28>>2]=c[k+28>>2];Mz(e,u);i=i+1|0;k=c[j>>2]|0}while(1){if((i|0)==3)break;t=135024+(i<<5)|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];Mz(e,u);i=i+1|0}j=c[m>>2]|0;while(1){i=j+-1|0;if((j|0)<=0)break;j=v+56+(i<<5)|0;c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];c[u+16>>2]=c[j+16>>2];c[u+20>>2]=c[j+20>>2];c[u+24>>2]=c[j+24>>2];c[u+28>>2]=c[j+28>>2];Mz(e,u);j=i}if((g|0)==10)j=oy(e,w)|0;else j=uy(e,w)|0;i=c[w>>2]|0;if(i|0)y=17}else{i=(c[p+16>>2]|0)+16|0;v=k+16|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];Bg(s,n,u);v=(c[q+16>>2]|0)+16|0;i=(c[r>>2]|0)+56|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];c[u>>2]=c[i>>2];c[u+4>>2]=c[i+4>>2];c[u+8>>2]=c[i+8>>2];c[u+12>>2]=c[i+12>>2];Bg(o,n,u);i=c[(c[r>>2]|0)+96>>2]|0;D=+h[i+56>>3];E=+h[i+64>>3]-+h[i+32>>3]*.5;i=j+16|0;c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[j+12>>2]=c[s+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];i=j+32|0;v=j+48|0;y=j+64|0;h[j+64>>3]=D;h[j+72>>3]=E;c[v>>2]=c[y>>2];c[v+4>>2]=c[y+4>>2];c[v+8>>2]=c[y+8>>2];c[v+12>>2]=c[y+12>>2];c[i>>2]=c[y>>2];c[i+4>>2]=c[y+4>>2];c[i+8>>2]=c[y+8>>2];c[i+12>>2]=c[y+12>>2];i=j+80|0;y=j+96|0;c[y>>2]=c[o>>2];c[y+4>>2]=c[o+4>>2];c[y+8>>2]=c[o+8>>2];c[y+12>>2]=c[o+12>>2];c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[w>>2]=7;i=7;y=17}if((y|0)==17)Kz(f,c[((c[f>>2]&3|0)==2?f:x)+40>>2]|0,j,i,17224);l=z;return}function Fg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=l;l=l+352|0;x=N+336|0;w=N+320|0;L=N+128|0;u=N+304|0;y=N+288|0;M=N+112|0;E=N+96|0;F=N+80|0;G=N+64|0;H=N+48|0;I=N+32|0;J=N+16|0;K=N;a=a+16|0;q=(c[a>>2]|0)+16|0;v=(c[d+(e<<2)>>2]|0)+16|0;s=(c[v>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[x>>2]=c[s>>2];c[x+4>>2]=c[s+4>>2];c[x+8>>2]=c[s+8>>2];c[x+12>>2]=c[s+12>>2];Bg(u,w,x);C=+h[u>>3];D=+h[u+8>>3];u=(c[b+16>>2]|0)+16|0;v=(c[v>>2]|0)+56|0;c[w>>2]=c[u>>2];c[w+4>>2]=c[u+4>>2];c[w+8>>2]=c[u+8>>2];c[w+12>>2]=c[u+12>>2];c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];Bg(y,w,x);A=+h[y>>3];B=+h[y+8>>3];if((f|0)>1){z=+h[(c[a>>2]|0)+80>>3];i=z*.5;z=z/+(f+-1|0)}else{i=0.0;z=0.0}p=(g|8|0)==10;m=L+8|0;q=L+16|0;r=(A+C*2.0)*.3333333333333333;s=L+32|0;t=(A*2.0+C)*.3333333333333333;n=L+24|0;u=L+48|0;v=L+64|0;w=L+80|0;x=L+96|0;y=L+112|0;k=L+128|0;o=L+136|0;i=D-i;b=0;while(1){if((b|0)>=(f|0))break;j=c[d+(b+e<<2)>>2]|0;h[L>>3]=C;h[m>>3]=D;if(p){Jg(M,r,i);c[q>>2]=c[M>>2];c[q+4>>2]=c[M+4>>2];c[q+8>>2]=c[M+8>>2];c[q+12>>2]=c[M+12>>2];Jg(E,t,i);c[s>>2]=c[E>>2];c[s+4>>2]=c[E+4>>2];c[s+8>>2]=c[E+8>>2];c[s+12>>2]=c[E+12>>2];a=4;g=3}else{h[q>>3]=C;h[n>>3]=D;Jg(F,r,i);c[s>>2]=c[F>>2];c[s+4>>2]=c[F+4>>2];c[s+8>>2]=c[F+8>>2];c[s+12>>2]=c[F+12>>2];Jg(G,r,i);c[u>>2]=c[G>>2];c[u+4>>2]=c[G+4>>2];c[u+8>>2]=c[G+8>>2];c[u+12>>2]=c[G+12>>2];Jg(H,r,i);c[v>>2]=c[H>>2];c[v+4>>2]=c[H+4>>2];c[v+8>>2]=c[H+8>>2];c[v+12>>2]=c[H+12>>2];Jg(I,t,i);c[w>>2]=c[I>>2];c[w+4>>2]=c[I+4>>2];c[w+8>>2]=c[I+8>>2];c[w+12>>2]=c[I+12>>2];Jg(J,t,i);c[x>>2]=c[J>>2];c[x+4>>2]=c[J+4>>2];c[x+8>>2]=c[J+8>>2];c[x+12>>2]=c[J+12>>2];Jg(K,t,i);c[y>>2]=c[K>>2];c[y+4>>2]=c[K+4>>2];c[y+8>>2]=c[K+8>>2];c[y+12>>2]=c[K+12>>2];h[k>>3]=A;h[o>>3]=B;a=10;g=9}h[L+(g<<4)>>3]=A;h[L+(g<<4)+8>>3]=B;Kz(j,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0,L,a,17224);i=i+z;b=b+1|0}l=N;return}function Gg(a,d,e,f,g,i,j,k){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;x=l;l=l+1440|0;t=x+1392|0;v=x+1424|0;w=x+696|0;u=x;r=c[j>>2]&3;q=c[((r|0)==3?j:j+48|0)+40>>2]|0;r=c[((r|0)==2?j:j+-48|0)+40>>2]|0;m=c[q+16>>2]|0;o=c[m+232>>2]|0;p=c[a+16>>2]|0;if((o|0)<(b[p+238>>1]|0)){y=c[p+196>>2]|0;p=o+1|0;n=+h[m+24>>3]-+h[y+(o<<6)+32>>3]-+h[(c[(c[c[y+(p<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[y+(p<<6)+40>>3]}else n=+(c[p+252>>2]|0);z=+(i+1|0);s=+(c[d+12>>2]|0)/z;n=n/z;Ig(a,d,e,q,j,w,1);Ig(a,d,e,r,j,u,0);r=w+52|0;j=u+52|0;a=(k|0)==0;d=e+80|0;m=0;while(1){if((m|0)>=(i|0))break;q=c[f+(m+g<<2)>>2]|0;p=c[r>>2]|0;o=p+-1|0;D=+h[w+56+(o<<5)>>3];B=+h[w+56+(o<<5)+8>>3];C=+h[w+56+(o<<5)+16>>3];h[16878]=D;h[16881]=B;m=m+1|0;z=+(m|0);A=s*z;h[16880]=C+A;z=B-n*z;h[16879]=z;h[16882]=D;h[16885]=z;o=(c[j>>2]|0)+-1|0;D=+h[u+56+(o<<5)+16>>3];h[16884]=D;h[16883]=z-n;B=+h[u+56+(o<<5)>>3];C=+h[u+56+(o<<5)+8>>3];h[16888]=D;h[16889]=C;h[16886]=B-A;h[16887]=z;o=0;while(1){if((o|0)>=(p|0)){o=0;break}p=w+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];Mz(e,t);o=o+1|0;p=c[r>>2]|0}while(1){if((o|0)==3)break;y=135024+(o<<5)|0;c[t>>2]=c[y>>2];c[t+4>>2]=c[y+4>>2];c[t+8>>2]=c[y+8>>2];c[t+12>>2]=c[y+12>>2];c[t+16>>2]=c[y+16>>2];c[t+20>>2]=c[y+20>>2];c[t+24>>2]=c[y+24>>2];c[t+28>>2]=c[y+28>>2];Mz(e,t);o=o+1|0}p=c[j>>2]|0;while(1){o=p+-1|0;if((p|0)<=0)break;p=u+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];Mz(e,t);p=o}if(a)o=uy(e,v)|0;else o=oy(e,v)|0;p=c[v>>2]|0;if(!p)break;Kz(q,c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0,o,p,17224);c[d>>2]=0}l=x;return}function Hg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;kg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=4;if(!(i<<24>>24))Qz(d,f,2,g,0);else Nz(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3]+ +h[e+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];mg(m,j,4,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Ig(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;kg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=1;if(!(i<<24>>24))Qz(d,f,2,g,0);else Nz(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[e+24>>3]-+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];mg(m,j,1,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Jg(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Kg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0.0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0;Y=l;l=l+288|0;R=Y+256|0;Q=Y+240|0;P=Y+224|0;V=Y+280|0;W=Y+272|0;X=Y+32|0;S=Y+16|0;T=Y;m=Y+208|0;n=Y+192|0;o=c[e+(f<<2)>>2]|0;U=ww(g<<2)|0;k=0;while(1){if((k|0)>=(g|0))break;c[U+(k<<2)>>2]=c[e+(k+f<<2)>>2];k=k+1|0}sL(U,g,4,11);e=b+16|0;f=(c[e>>2]|0)+16|0;o=o+16|0;C=(c[o>>2]|0)+16|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[C>>2];c[R+4>>2]=c[C+4>>2];c[R+8>>2]=c[C+8>>2];c[R+12>>2]=c[C+12>>2];Bg(m,Q,R);c[S>>2]=c[m>>2];c[S+4>>2]=c[m+4>>2];c[S+8>>2]=c[m+8>>2];c[S+12>>2]=c[m+12>>2];C=d+16|0;f=(c[C>>2]|0)+16|0;o=(c[o>>2]|0)+56|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[o>>2];c[R+4>>2]=c[o+4>>2];c[R+8>>2]=c[o+8>>2];c[R+12>>2]=c[o+12>>2];Bg(n,Q,R);c[T>>2]=c[n>>2];c[T+4>>2]=c[n+4>>2];c[T+8>>2]=c[n+8>>2];c[T+12>>2]=c[n+12>>2];w=+h[(c[e>>2]|0)+96>>3]+ +h[S>>3];x=+h[T>>3]-+h[(c[C>>2]|0)+88>>3];u=x+w;v=u*.5;C=c[U>>2]|0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];o=X+16|0;c[o>>2]=c[S>>2];c[o+4>>2]=c[S+4>>2];c[o+8>>2]=c[S+8>>2];c[o+12>>2]=c[S+12>>2];e=X+32|0;c[e>>2]=c[T>>2];c[e+4>>2]=c[T+4>>2];c[e+8>>2]=c[T+8>>2];c[e+12>>2]=c[T+12>>2];f=X+48|0;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];Kz(C,c[((c[C>>2]&3|0)==2?C:C+-48|0)+40>>2]|0,X,4,17224);C=c[(c[C+16>>2]|0)+96>>2]|0;h[C+56>>3]=v;z=S+8|0;r=+h[z>>3];s=+h[C+32>>3];h[C+64>>3]=(s+6.0)*.5+r;a[C+81>>0]=1;r=r+3.0;B=+h[C+24>>3];A=(u-B)*.5;B=(B+u)*.5;C=X+24|0;D=X+40|0;E=X+56|0;F=X+64|0;G=T+8|0;H=X+72|0;I=X+80|0;J=X+88|0;K=X+96|0;L=X+104|0;M=X+112|0;N=X+120|0;O=V+4|0;n=(i|0)==6&1;q=0.0;p=0.0;s=s+r;m=1;while(1){if((m|0)>=(j|0)){y=6;break}d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];h[N>>3]=Z;s=+h[(c[(c[d+16>>2]|0)+96>>2]|0)+32>>3];t=Z+s*.5;s=Z+s}else{k=d+16|0;b=c[(c[k>>2]|0)+96>>2]|0;if((m|0)==1){p=+h[b+24>>3];q=(p+u)*.5;p=(u-p)*.5}r=r+-6.0-+h[b+32>>3];c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];t=r+-6.0;h[C>>3]=t;h[e>>3]=+h[T>>3];h[D>>3]=t;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=r;h[K>>3]=p;h[L>>3]=r;h[M>>3]=p;h[N>>3]=+h[z>>3];t=+h[(c[(c[k>>2]|0)+96>>2]|0)+32>>3]*.5+r}c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=ky(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break;i=c[(c[d+16>>2]|0)+96>>2]|0;h[i+56>>3]=v;h[i+64>>3]=t;a[i+81>>0]=1;Kz(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17224);m=m+1|0}a:do if((y|0)==6){v=(x+w*2.0)*.3333333333333333;u=(x*2.0+w)*.3333333333333333;while(1){if((m|0)>=(g|0))break;d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];s=Z;t=p;p=Z}else{y=(m|0)==1;t=y?v:p;q=y?u:q;p=r+-6.0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];r=r+-12.0;h[C>>3]=r;h[e>>3]=+h[T>>3];h[D>>3]=r;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=p;h[K>>3]=t;h[L>>3]=p;h[M>>3]=t;r=p;p=+h[z>>3]}h[N>>3]=p;c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=ky(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break a;Kz(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17224);m=m+1|0;p=t}$I(U)}while(0);l=Y;return}function Lg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0;g=l;l=l+16|0;f=g;j=(rn(b)|0)==0;j=j?17648:17640;a[f>>0]=a[j>>0]|0;a[f+1>>0]=a[j+1>>0]|0;a[f+2>>0]=a[j+2>>0]|0;a[f+3>>0]=a[j+3>>0]|0;f=hn(78335,f,0)|0;Oo(f,122277,280,1)|0;zm(f,0,80018,174185)|0;j=ww(96)|0;e=c[f+16>>2]|0;c[e+8>>2]=j;i=c[b+16>>2]|0;k=c[i+8>>2]|0;h[j>>3]=+h[k>>3];h[j+24>>3]=+h[k+24>>3];a[e+115>>0]=a[i+115>>0]|0;c[e+116>>2]=c[i+116>>2]&1^1;c[e+248>>2]=c[i+248>>2];c[e+252>>2]=c[i+252>>2];e=Em(to(b)|0,1,0)|0;while(1){if(!e)break;zm(f,1,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=Em(to(b)|0,1,e)|0}e=Em(to(b)|0,2,0)|0;while(1){if(!e)break;zm(f,2,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=Em(to(b)|0,2,e)|0}if(!(zm(f,2,96251,0)|0))zm(f,2,96251,174185)|0;if(!(zm(f,2,96242,0)|0))zm(f,2,96242,174185)|0;Qg(f,d);l=g;return f|0}function Mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;a=oo(a,En(b)|0,1)|0;Oo(a,122241,304,1)|0;Nm(b,a)|0;if((Cy(b)|0)==2){f=b+16|0;b=xw((sJ(c[c[(c[f>>2]|0)+104>>2]>>2]|0)|0)+3|0)|0;c[d>>2]=c[c[(c[f>>2]|0)+104>>2]>>2];qL(b,78330,d)|0;Lm(a,86240,b)|0}l=e;return a|0}function Ng(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=bn(a,b,c,0,1)|0;Oo(c,122254,176,1)|0;Nm(d,c)|0;return c|0}function Og(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i+16|0;f=i;if(e|0){j=+h[b>>3];e=b+8|0;h[b>>3]=+h[e>>3];h[e>>3]=-j};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];Bg(a,f,g);l=i;return}function Pg(a,b){a=a|0;b=b|0;c[42234]=c[b>>2];c[42238]=c[b+4>>2];c[42239]=c[b+8>>2];c[42219]=c[b+12>>2];c[42220]=c[b+16>>2];c[42226]=c[b+20>>2];c[42225]=c[b+24>>2];c[42224]=c[b+28>>2];c[42250]=c[b+32>>2];c[42242]=c[b+36>>2];c[42227]=c[b+40>>2];c[42237]=c[b+44>>2];c[42246]=c[b+48>>2];c[42245]=c[b+52>>2];c[42244]=c[b+56>>2];c[42249]=c[b+60>>2];c[42243]=c[b+64>>2];c[42228]=c[b+68>>2];c[42190]=c[b+72>>2];c[42191]=c[b+76>>2];c[42192]=c[b+80>>2];c[42202]=c[b+84>>2];c[42195]=c[b+88>>2];c[42196]=c[b+92>>2];c[42197]=c[b+96>>2];c[42199]=c[b+100>>2];c[42200]=c[b+104>>2];c[42203]=c[b+108>>2];c[42206]=c[b+112>>2];c[42204]=c[b+116>>2];c[42205]=c[b+120>>2];c[42208]=c[b+124>>2];c[42207]=c[b+128>>2];c[42209]=c[b+132>>2];c[42210]=c[b+136>>2];c[42201]=c[b+140>>2];c[42213]=c[b+144>>2];c[42185]=c[b+148>>2];c[42182]=c[b+152>>2];$I(b);Ff(a);mn(a)|0;return}function Qg(a,b){a=a|0;b=b|0;c[b>>2]=c[42234];c[b+4>>2]=c[42238];c[b+8>>2]=c[42239];c[b+12>>2]=c[42219];c[b+16>>2]=c[42220];c[b+20>>2]=c[42226];c[b+24>>2]=c[42225];c[b+28>>2]=c[42224];c[b+32>>2]=c[42250];c[b+36>>2]=c[42242];c[b+40>>2]=c[42227];c[b+44>>2]=c[42237];c[b+48>>2]=c[42246];c[b+52>>2]=c[42245];c[b+56>>2]=c[42244];c[b+60>>2]=c[42249];c[b+64>>2]=c[42243];c[b+68>>2]=c[42228];c[b+72>>2]=c[42190];c[b+76>>2]=c[42191];c[b+80>>2]=c[42192];c[b+84>>2]=c[42202];c[b+88>>2]=c[42195];c[b+92>>2]=c[42196];c[b+96>>2]=c[42197];c[b+100>>2]=c[42199];c[b+104>>2]=c[42200];c[b+108>>2]=c[42203];c[b+112>>2]=c[42206];c[b+116>>2]=c[42204];c[b+120>>2]=c[42205];c[b+124>>2]=c[42208];c[b+128>>2]=c[42207];c[b+132>>2]=c[42209];c[b+136>>2]=c[42210];c[b+140>>2]=c[42201];c[b+144>>2]=c[42213];c[b+152>>2]=c[42182];c[b+148>>2]=c[42185];c[42234]=0;c[42238]=zm(a,2,80259,0)|0;c[42239]=zm(a,2,80268,0)|0;b=zm(a,2,86614,0)|0;c[42219]=b;if(!b)c[42219]=zm(a,2,86614,174185)|0;c[42220]=0;c[42226]=0;c[42225]=zm(a,2,86494,0)|0;c[42224]=zm(a,2,86485,0)|0;c[42250]=zm(a,2,86790,0)|0;c[42242]=0;c[42227]=zm(a,2,86240,0)|0;c[42237]=zm(a,2,78340,0)|0;c[42246]=0;c[42245]=zm(a,2,86690,0)|0;c[42244]=zm(a,2,86676,0)|0;c[42249]=zm(a,2,86781,0)|0;c[42243]=0;c[42228]=0;c[42190]=zm(a,1,96049,0)|0;c[42191]=zm(a,1,96043,0)|0;c[42192]=zm(a,1,90671,0)|0;c[42202]=0;c[42195]=zm(a,1,86485,0)|0;c[42196]=zm(a,1,86494,0)|0;c[42197]=0;c[42199]=zm(a,1,86240,0)|0;c[42200]=0;c[42203]=0;c[42206]=zm(a,1,86446,0)|0;c[42204]=zm(a,1,86529,0)|0;c[42205]=zm(a,1,86535,0)|0;c[42208]=zm(a,1,86547,0)|0;c[42207]=zm(a,1,86385,0)|0;c[42209]=zm(a,1,86552,0)|0;c[42210]=zm(a,1,78352,0)|0;c[42201]=0;c[42213]=0;c[42185]=zm(a,0,86446,0)|0;return}function Rg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0;d=c[(c[(c[a>>2]|0)+16>>2]|0)+96>>2]|0;a=c[(c[(c[b>>2]|0)+16>>2]|0)+96>>2]|0;b=(a|0)!=0;if(d)if(b?(f=+h[d+24>>3],i=+h[d+32>>3],e=+h[a+24>>3],g=+h[a+32>>3],!(f>e)):0)if(!(f<e))if(i>g)a=-1;else a=i<g&1;else a=1;else a=-1;else a=b&1;return a|0}function Sg(a){a=a|0;var b=0,d=0,e=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;d=c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;e=c[d+232>>2]|0;a=c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;b=c[a+232>>2]|0;if((e|0)<=(b|0))if((e|0)<(b|0))a=1;else a=(c[d+236>>2]|0)<(c[a+236>>2]|0)&1;else a=0;return a|0}function Tg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+180|0;g=(c[b+16>>2]|0)+172|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=Ug(a,f,b,e)|0;l=d;return b|0}function Ug(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[b+4>>2]|0;a:do if((f|0)>0?(g=c[e+4>>2]|0,(g|0)>0):0)if((f|0)<(g|0)){f=c[b>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)==(d|0))break;else e=e+1|0}}else{f=c[e>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)==(a|0))break;else e=e+1|0}}else b=0;while(0);return b|0}function Vg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+188|0;g=(c[b+16>>2]|0)+196|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=Ug(a,f,b,e)|0;l=d;return b|0}function Wg(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+180>>2]|0;if(!b)b=xw((c[d+184>>2]<<2)+8|0)|0;else b=zw(b,(c[d+184>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+180>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;d=c[f+180>>2]|0;f=f+184|0;b=c[f>>2]|0;c[f>>2]=b+1;c[d+(b<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=a+-48|0;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=xw((c[b+176>>2]<<2)+8|0)|0;else b=zw(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;b=b+176|0;f=c[b>>2]|0;c[b>>2]=f+1;c[d+(f<<2)>>2]=a;f=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;return a|0}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=a+4|0;f=c[e>>2]|0;d=0;while(1){if((d|0)>=(f|0))break;g=c[a>>2]|0;h=g+(d<<2)|0;if((c[h>>2]|0)==(b|0)){i=4;break}else d=d+1|0}if((i|0)==4){i=f+-1|0;c[e>>2]=i;c[h>>2]=c[g+(i<<2)>>2];c[(c[a>>2]|0)+(i<<2)>>2]=0}return}function Yg(a){a=a|0;if(!a)ma(78393,78403,117,78412);else{Xg((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180|0,a);Xg((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172|0,a);return}}function Zg(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+204>>2]|0;if(!b)b=xw((c[d+208>>2]<<2)+8|0)|0;else b=zw(b,(c[d+208>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+204>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[f+204>>2]|0;f=f+208|0;d=c[f>>2]|0;c[f>>2]=d+1;c[b+(d<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+204>>2]|0)+(c[e+208>>2]<<2)>>2]=0;return}function _g(a){a=a|0;$g(a,(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+204|0);return}function $g(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+4|0;e=c[h>>2]|0;f=c[b>>2]|0;d=0;while(1){if((d|0)>=(e|0)){g=4;break}if((c[f+(d<<2)>>2]|0)==(a|0))break;else d=d+1|0}if((g|0)==4){if(!f)d=xw((e<<2)+8|0)|0;else d=zw(f,(e<<2)+8|0)|0;c[b>>2]=d;f=c[h>>2]|0;g=f+1|0;c[h>>2]=g;c[d+(f<<2)>>2]=a;c[(c[b>>2]|0)+(g<<2)>>2]=0}return}function ah(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=ww(96)|0;g=n+48|0;c[g>>2]=c[g>>2]|3;c[n>>2]=c[n>>2]&-4|2;h=ww(176)|0;m=n+16|0;c[m>>2]=h;c[((c[n>>2]&3|0)==3?n:g)+40>>2]=d;j=n+-48|0;c[((c[n>>2]&3|0)==2?n:j)+40>>2]=e;a[h+112>>0]=1;if(!f){c[h+156>>2]=1;b[h+154>>1]=1;b[h+168>>1]=1;b[h+170>>1]=1}else{c[n>>2]=c[n>>2]&15|c[f>>2]&-16;c[g>>2]=c[g>>2]&15|c[f>>2]&-16;l=f+16|0;i=c[l>>2]|0;b[h+168>>1]=b[i+168>>1]|0;b[h+154>>1]=b[i+154>>1]|0;c[h+156>>2]=c[i+156>>2];b[h+170>>1]=b[i+170>>1]|0;d=c[((c[n>>2]&3|0)==3?n:g)+40>>2]|0;e=c[f>>2]&3;k=f+48|0;if((d|0)!=(c[((e|0)==3?f:k)+40>>2]|0)){g=f+-48|0;if((d|0)==(c[((e|0)==2?f:g)+40>>2]|0)){h=h+16|0;d=i+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=h+16|0;d=i+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0));g=f+-48|0}d=c[((c[n>>2]&3|0)==2?n:j)+40>>2]|0;e=c[f>>2]&3;if((d|0)!=(c[((e|0)==2?f:g)+40>>2]|0)){if((d|0)==(c[((e|0)==3?f:k)+40>>2]|0)){h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}d=(c[l>>2]|0)+172|0;if(!(c[d>>2]|0))c[d>>2]=n;c[(c[m>>2]|0)+116>>2]=f}return n|0}function bh(a,b,c){a=a|0;b=b|0;c=c|0;return Wg(ah(a,b,c)|0)|0}function ch(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;f=c[a>>2]|0;d=c[b+16>>2]|0;c[d+164>>2]=f;e=f;if(f|0)c[(c[e+16>>2]|0)+168>>2]=b;c[a>>2]=b;c[d+168>>2]=0;if((e|0)==(b|0))ma(78429,78403,215,78445);else return}function dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)==(b|0))ma(78455,78403,220,78462);f=c[b+16>>2]|0;d=f+164|0;if(c[d>>2]|0)ma(78475,78403,221,78462);e=(c[a+16>>2]|0)+164|0;c[d>>2]=c[e>>2];d=c[e>>2]|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=b;c[f+168>>2]=a;c[e>>2]=b;return}function eh(a,b){a=a|0;b=b|0;var d=0,e=0;if(!(fh(a,b)|0))ma(78494,78403,231,78515);b=c[b+16>>2]|0;d=c[b+164>>2]|0;e=d;b=b+168|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=c[b>>2];b=c[b>>2]|0;if(!b)c[(c[a+16>>2]|0)+192>>2]=e;else c[(c[b+16>>2]|0)+164>>2]=e;return}function fh(a,b){a=a|0;b=b|0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if((a|0)==0|(a|0)==(b|0))break;a=(c[a+16>>2]|0)+164|0}return a|0}function gh(b){b=b|0;var d=0,e=0,f=0,g=0;d=ww(64)|0;c[d>>2]=c[d>>2]&-4|1;e=d+16|0;c[e>>2]=ww(304)|0;c[d+24>>2]=to(b)|0;g=c[e>>2]|0;a[g+156>>0]=1;h[g+96>>3]=1.0;h[g+88>>3]=1.0;h[g+80>>3]=1.0;c[g+216>>2]=1;c[g+176>>2]=0;g=ww(20)|0;f=c[e>>2]|0;c[f+172>>2]=g;c[f+184>>2]=0;f=ww(20)|0;c[(c[e>>2]|0)+180>>2]=f;ch(b,d);b=(c[b+16>>2]|0)+232|0;c[b>>2]=(c[b>>2]|0)+1;return d|0}function hh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+48|0;e=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[e+188>>2]|0;if(!f)e=xw((c[e+192>>2]<<2)+8|0)|0;else e=zw(f,(c[e+192>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0)+188>>2]=e;h=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[h+188>>2]|0;h=h+192|0;e=c[h>>2]|0;c[h>>2]=e+1;c[f+(e<<2)>>2]=d;g=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;c[(c[g+188>>2]|0)+(c[g+192>>2]<<2)>>2]=0;g=d+-48|0;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;if(!f)e=xw((c[e+200>>2]<<2)+8|0)|0;else e=zw(f,(c[e+200>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+196>>2]=e;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;e=e+200|0;h=c[e>>2]|0;c[e>>2]=h+1;c[f+(h<<2)>>2]=d;h=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;c[(c[h+196>>2]|0)+(c[h+200>>2]<<2)>>2]=0;a[(c[b+16>>2]|0)+240>>0]=1;a[(c[(Wf(b)|0)+16>>2]|0)+240>>0]=1;return}function ih(a){a=a|0;var b=0,d=0;if(!a)ma(78393,78403,269,78532);b=c[(c[a+16>>2]|0)+116>>2]|0;if(b|0?(d=(c[b+16>>2]|0)+172|0,(c[d>>2]|0)==(a|0)):0)c[d>>2]=0;Xg((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+188|0,a);Xg((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+196|0,a);return}function jh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;d=(c[a+16>>2]|0)+172|0;e=c[d>>2]|0;do if((e|0)!=(b|0))if(!e){c[d>>2]=b;kh(a,b);break}else ma(80440,78403,340,78570);else $l(0,78549,f)|0;while(0);l=f;return}function kh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;f=(c[d+16>>2]|0)+170|0;i=c[a+16>>2]|0;a=b[i+170>>1]|0;if((e[f>>1]|0)<(a&65535))b[f>>1]=a;g=i+168|0;h=i+154|0;f=i+156|0;a=d;while(1){if(!a)break;d=c[a+16>>2]|0;i=d+168|0;b[i>>1]=(e[i>>1]|0)+(e[g>>1]|0);i=d+154|0;b[i>>1]=(e[i>>1]|0)+(e[h>>1]|0);i=d+156|0;c[i>>2]=(c[i>>2]|0)+(c[f>>2]|0);a=c[d+172>>2]|0}return}function lh(d){d=d|0;var e=0,f=0,g=0,h=0;f=d+16|0;e=c[(c[f>>2]|0)+172>>2]|0;a:while(1){if(!e)break;mh(e,d);h=c[e+16>>2]|0;g=c[h+172>>2]|0;if(!(b[h+168>>1]|0))nh(e);while(1){if((a[(c[e+16>>2]|0)+112>>0]|0)!=1){e=g;continue a}e=c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){e=g;continue a}if((c[e+184>>2]|0)!=1){e=g;continue a}e=c[c[e+180>>2]>>2]|0;mh(e,d)}}c[(c[f>>2]|0)+172>>2]=0;return}function mh(a,d){a=a|0;d=d|0;var f=0;f=c[d+16>>2]|0;d=c[a+16>>2]|0;a=d+168|0;b[a>>1]=(e[a>>1]|0)-(e[f+168>>1]|0);a=d+154|0;b[a>>1]=(e[a>>1]|0)-(e[f+154>>1]|0);d=d+156|0;c[d>>2]=(c[d>>2]|0)-(c[f+156>>2]|0);return}function nh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)ma(78393,78403,128,78583);g=a+48|0;d=0;while(1){b=c[a>>2]|0;e=(c[(c[((b&3|0)==3?a:g)+40>>2]|0)+16>>2]|0)+180|0;f=c[(c[e>>2]|0)+(d<<2)>>2]|0;if(!f)break;if((f|0)==(a|0))Xg(e,a);d=d+1|0}g=a+-48|0;f=0;while(1){d=(c[(c[((b&3|0)==2?a:g)+40>>2]|0)+16>>2]|0)+172|0;e=c[(c[d>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)==(a|0)){Xg(d,a);b=c[a>>2]|0}f=f+1|0}return}function oh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+1040|0;n=p+1032|0;o=p;m=p+8|0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;i=c[d+196>>2]|0;h=i+(j<<6)|0;i=i+(j<<6)+4|0;g=0;d=0;while(1){if((g|0)>=(c[h>>2]|0))break;e=c[(c[i>>2]|0)+(g<<2)>>2]|0;f=e+16|0;if(c[(c[f>>2]|0)+112>>2]|0){if(!d){a[n>>0]=a[17644]|0;a[n+1>>0]=a[17645]|0;a[n+2>>0]=a[17646]|0;a[n+3>>0]=a[17647]|0;d=hn(78605,n,0)|0}c[o>>2]=g;qL(m,122187,o)|0;t=oo(d,m,1)|0;Oo(t,78608,24,1)|0;q=c[(c[f>>2]|0)+180>>2]|0;r=c[q>>2]|0;r=c[(c[(c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;q=c[q+4>>2]|0;q=c[(c[(c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;s=(r|0)>(q|0);f=c[t+16>>2]|0;c[f+12>>2]=s?q:r;c[f+16>>2]=s?r:q;c[f+20>>2]=e}g=g+1|0}if(d|0){if((nn(d)|0)>1)ph(d,h);mn(d)|0}j=j+1|0;d=c[k>>2]|0}l=p;return}function ph(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=0;h=eo(a)|0;a:while(1){if(!h)break;i=fo(a,h)|0;j=h+16|0;g=i;while(1){if(!g){h=i;continue a}f=c[g+16>>2]|0;e=c[j>>2]|0;if((c[f+16>>2]|0)>(c[e+12>>2]|0)){if((c[e+16>>2]|0)<=(c[f+12>>2]|0))bn(a,h,g,0,1)|0}else{bn(a,g,h,0,1)|0;d=1}g=fo(a,g)|0}}do if(d|0){h=Jp(a,78613,1)|0;j=ww((nn(a)|0)<<2)|0;i=ww((nn(a)|0)<<2)|0;f=b+4|0;e=eo(a)|0;b:while(1){if(!e){d=23;break}if((c[(c[e+16>>2]|0)+8>>2]|0)==0?pn(a,e,1,1)|0:0){c:do if(qh(a,e,h,i)|0){g=nn(h)|0;if((rh(a,h,j)|0)!=(g|0)){d=17;break b}sL(i,g,4,12);d=0;while(1){if((d|0)>=(g|0))break c;b=i+(d<<2)|0;k=c[j+(d<<2)>>2]|0;c[(c[k+16>>2]|0)+236>>2]=c[b>>2];c[(c[f>>2]|0)+(c[b>>2]<<2)>>2]=k;d=d+1|0}}while(0);th(h)}e=fo(a,e)|0}if((d|0)==17)ma(78618,78628,265,78639);else if((d|0)==23){$I(j);break}}while(0);return}function qh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=c[b+16>>2]|0;c[h+8>>2]=1;h=c[(c[(c[h+20>>2]|0)+16>>2]|0)+236>>2]|0;c[e+((nn(d)|0)<<2)>>2]=h;jo(d,b,1)|0;h=Qm(a,b)|0;f=0;while(1){if(!h)break;j=c[h>>2]&3;g=c[((j|0)==2?h:h+-48|0)+40>>2]|0;i=c[g+16>>2]|0;f=f+((c[(c[(c[i+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[(c[(c[((j|0)==3?h:h+48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[i+8>>2]|0))f=(qh(a,g,d,e)|0)+f|0;h=Sm(a,h)|0}h=Tm(a,b)|0;while(1){if(!h)break;i=c[h>>2]&3;g=c[((i|0)==3?h:h+48|0)+40>>2]|0;j=c[g+16>>2]|0;f=f+((c[(c[(c[(c[(c[((i|0)==2?h:h+-48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[j+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[j+8>>2]|0))f=(qh(a,g,d,e)|0)+f|0;h=Um(a,h)|0}return f|0}function rh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=0;while(1){e=uh(a,b)|0;if(!e)break;c[d+(f<<2)>>2]=c[(c[e+16>>2]|0)+20>>2];qo(b,e)|0;e=Qm(a,e)|0;while(1){if(!e)break;g=Sm(a,e)|0;en(a,e)|0;e=g}f=f+1|0}return f|0}function sh(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function th(a){a=a|0;var b=0,c=0;b=eo(a)|0;while(1){if(!b)break;c=fo(a,b)|0;qo(a,b)|0;b=c}return}function uh(a,b){a=a|0;b=b|0;var c=0;c=eo(b)|0;while(1){if(!c){c=0;break}if(!(pn(a,c,1,0)|0))break;c=fo(b,c)|0}return c|0}function vh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;wh(b);i=b+16|0;f=0;e=0;while(1){if((f|0)>=(c[(c[i>>2]|0)+220>>2]|0))break;xh(b,f);f=f+1|0;e=(yh(b,0,d)|0)+e|0}zh(b);h=1;while(1){f=c[i>>2]|0;g=c[f+180>>2]|0;if((h|0)>(g|0))break;g=(Ah(c[(c[f+184>>2]|0)+(h<<2)>>2]|0,d)|0)+e|0;h=h+1|0;e=g}do if((g|0)>0){f=Jm(b,78653)|0;if(f|0?(JA(f)|0)<<24>>24==0:0)break;Zk(b);a[173897]=1;e=yh(b,2,d)|0}while(0);Bh(b,e);return}function wh(d){d=d|0;var e=0;if(0)yA();a[173897]=0;c[41927]=d;e=((on(Wf(d)|0)|0)<<2)+4|0;c[41926]=ww(e)|0;c[41925]=ww(e)|0;ri(d);e=d+16|0;if(b[(c[e>>2]|0)+136>>1]&16)si(d);Gk(d);ul(d,1);ti(d);Ih(d);e=c[e>>2]|0;c[41928]=b[e+236>>1];c[41929]=b[e+238>>1];return}function xh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;a=c[a+16>>2]|0;c[a+192>>2]=c[(c[a+216>>2]|0)+(d<<2)>>2];a:do if((d|0)>0){d=b[a+238>>1]|0;e=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(d|0))break a;f=c[e>>2]|0;g=f+(a<<6)+4|0;f=f+(a<<6)|0;c[g>>2]=(c[g>>2]|0)+(c[f>>2]<<2);c[f>>2]=0;a=a+1|0}}while(0);return}function yh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;n=o;if((b|0)>1){e=Yh(0)|0;Zh(a)}else e=2147483647;m=c[13918]|0;k=b;f=0;b=e;while(1){if((k|0)>=3)break;f=c[42181]|0;if((k|0)==2)if((e|0)>(b|0)){$h(a);e=b}else e=b;else{e=(f|0)<4?f:4;if((Wf(a)|0)==(a|0))_h(a,k);if(!k)Jh(a);Kh(a);g=Yh(0)|0;if((g|0)>(b|0)){f=e;e=g}else{Zh(a);f=e;e=g;b=g}}g=0;j=0;while(1){if((j|0)>=(f|0))break;if(0){c[n>>2]=k;c[n+4>>2]=j;c[n+8>>2]=g;c[n+12>>2]=e;c[n+16>>2]=b;AL(m,79046,n)|0}i=g+1|0;if((e|0)==0|(g|0)>=(c[41930]|0))break;ai(a,j);e=Yh(0)|0;if((e|0)>(b|0))g=i;else{Zh(a);g=+h[20878]*+(b|0)>+(e|0)?0:i;b=e}j=j+1|0}if(!e){e=0;break}else k=k+1|0}if((e|0)>(b|0))$h(a);if((b|0)>0){bi(a,0);e=Yh(0)|0}else e=b;a:do if(d|0){b=0;while(1){if((b|0)>=(f|0))break a;ci(a);b=b+1|0}}while(0);l=o;return e|0}function zh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;Xh(a);k=a+16|0;d=c[k>>2]|0;m=c[13918]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;e=c[d+196>>2]|0;f=c[e+(j<<6)+8>>2]|0;c[e+(j<<6)>>2]=f;g=c[e+(j<<6)+12>>2]|0;c[e+(j<<6)+4>>2]=g;i=0;while(1){if((i|0)>=(f|0))break;h=c[g+(i<<2)>>2]|0;if(!h){o=6;break}c[(c[h+16>>2]|0)+236>>2]=i;i=i+1|0}if((o|0)==6){o=0;if(0){e=En(a)|0;d=c[(c[(c[k>>2]|0)+196>>2]|0)+(j<<6)>>2]|0;c[n>>2]=e;c[n+4>>2]=j;c[n+8>>2]=i;c[n+12>>2]=d;AL(m,78996,n)|0;d=c[k>>2]|0;e=c[d+196>>2]|0}c[e+(j<<6)>>2]=i}j=j+1|0}l=p;return}function Ah(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;Tk(a);Ih(a);Jh(a);Kh(a);f=a+16|0;d=yh(a,2,b)|0;e=1;while(1){g=c[f>>2]|0;if((e|0)>(c[g+180>>2]|0))break;d=(Ah(c[(c[g+184>>2]|0)+(e<<2)>>2]|0,b)|0)+d|0;e=e+1|0}Lh(a);return d|0}function Bh(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;p=q;f=c[41925]|0;if(f|0){$I(f);c[41925]=0}f=c[41926]|0;if(f|0){$I(f);c[41926]=0}o=d+16|0;f=1;while(1){g=c[o>>2]|0;if((f|0)>(c[g+180>>2]|0))break;Ch(c[(c[g+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0}n=b[g+236>>1]|0;f=g;while(1){if((n|0)>(b[f+238>>1]|0))break;else m=0;while(1){f=c[f+196>>2]|0;if((m|0)>=(c[f+(n<<6)>>2]|0))break;k=(c[(c[f+(n<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;f=c[k>>2]|0;c[f+236>>2]=m;f=c[f+188>>2]|0;a:do if(f|0){g=0;while(1){i=c[f+(g<<2)>>2]|0;if(!i)break a;j=i+16|0;if((a[(c[j>>2]|0)+112>>0]|0)==4){ih(i);$I(c[j>>2]|0);$I(i);g=g+-1|0;f=c[(c[k>>2]|0)+188>>2]|0}g=g+1|0}}while(0);m=m+1|0;f=c[o>>2]|0}Dh(c[f+(n<<6)+56>>2]|0);n=n+1|0;f=c[o>>2]|0}if(0){o=c[13918]|0;d=En(d)|0;r=+zA();c[p>>2]=d;c[p+4>>2]=e;h[p+8>>3]=r;AL(o,78664,p)|0}l=q;return}function Ch(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+16|0;d=1;while(1){f=c[g>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Ch(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a:do if(c[f+268>>2]|0){e=b[f+236>>1]|0;d=f;while(1){if((e|0)>(b[d+238>>1]|0))break a;j=c[(c[d+268>>2]|0)+(e<<2)>>2]|0;i=Eh(a,j,-1)|0;j=Eh(a,j,1)|0;c[(c[(c[g>>2]|0)+268>>2]|0)+(e<<2)>>2]=i;k=c[(c[(c[(Wf(a)|0)+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0;i=c[(c[i+16>>2]|0)+236>>2]|0;f=c[g>>2]|0;h=c[f+196>>2]|0;c[h+(e<<6)+4>>2]=k+(i<<2);c[h+(e<<6)>>2]=(c[(c[j+16>>2]|0)+236>>2]|0)+1-i;e=e+1|0;d=f}}while(0);return}function Dh(a){a=a|0;if(a|0){$I(c[a+8>>2]|0);$I(a)}return}function Eh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=b;while(1){b=Fh(b,c)|0;if(!b)break;if(Gh(a,b)|0){d=b;continue}e=(Hh(a,b)|0)==0;d=e?d:b}return d|0}function Fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a)ma(78703,78628,1023,78705);if((b|0)<0){a=c[a+16>>2]|0;e=c[a+236>>2]|0;if((e|0)>0){a=(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+-1|0;f=7}else g=0}else{a=c[a+16>>2]|0;e=c[a+236>>2]|0;a=(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+1|0;f=7}if((f|0)==7){a=c[(c[a>>2]|0)+(d<<2)>>2]|0;if(a)if((O((c[(c[a+16>>2]|0)+236>>2]|0)-e|0,b)|0)>0)g=a;else ma(78714,78628,1029,78705);else g=0}return g|0}function Gh(b,d){b=b|0;d=d|0;if(!(a[(c[d+16>>2]|0)+156>>0]|0))b=(Co(b,d)|0)!=0&1;else b=0;return b|0}function Hh(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d+16>>2]|0;if(((a[d+156>>0]|0)==1?(c[d+176>>2]|0)==1:0)?(c[d+184>>2]|0)==1:0){d=c[d+180>>2]|0;while(1){d=c[d>>2]|0;e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}if(Co(b,d)|0)d=1;else f=7}else f=7;if((f|0)==7)d=0;return d|0}function Ih(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[42185]|0;a:do if((d|0)!=0|(c[42206]|0)!=0){d=GA(b,d,0)|0;if(d|0){switch(a[d>>0]|0){case 0:break a;case 111:{if(!(yJ(d,78916)|0)){Sh(b,1);break a}break}case 105:{if(!(yJ(d,83705)|0)){Sh(b,0);break a}break}default:{}}c[e>>2]=d;$l(1,78920,e)|0;break}d=Kp(b)|0;while(1){if(!d)break;if(!(Dj(d)|0))Ih(d);d=Lp(d)|0}if(c[42206]|0)Th(b)}while(0);l=f;return}function Jh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;e=c[k>>2]|0;j=b[e+236>>1]|0;while(1){if((j|0)>(b[e+238>>1]|0))break;else{f=0;i=0}while(1){g=c[e+196>>2]|0;h=c[g+(j<<6)>>2]|0;if((i|0)>=(h|0))break;g=c[(c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;a[g+158>>0]=0;a[g+157>>0]=0;c[g+284>>2]=i;if((f|0)==0&(c[g+192>>2]|0)>0){f=Qh(h,h)|0;e=c[k>>2]|0;c[(c[e+196>>2]|0)+(j<<6)+56>>2]=f;f=1}i=i+1|0}a:do if(f){i=0;f=h;while(1){if((i|0)>=(f|0))break a;h=c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0;if(!(a[(c[h+16>>2]|0)+157>>0]|0)){Rh(d,h);e=c[k>>2]|0;f=c[e+196>>2]|0;g=f;f=c[f+(j<<6)>>2]|0}i=i+1|0}}while(0);j=j+1|0}return}function Kh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=d+16|0;e=c[s>>2]|0;if(a[e+240>>0]|0){h=0;r=b[e+236>>1]|0;q=0;i=0;a:while(1){if((r|0)>(b[e+238>>1]|0))break;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if(!g){g=q;f=i}else{f=c[f+(r<<6)+4>>2]|0;o=c[(c[(c[f>>2]|0)+16>>2]|0)+236>>2]|0;e=0;while(1){if((e|0)>=(g|0))break;a[(c[(c[f+(e<<2)>>2]|0)+16>>2]|0)+157>>0]=0;e=e+1|0}e=(e<<2)+4|0;if(!h)p=xw(e)|0;else p=zw(i,e)|0;m=0;n=0;while(1){e=c[s>>2]|0;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if((g|0)<=(n|0))break;j=c[(c[f+(r<<6)+4>>2]|0)+(((c[e+116>>2]&1|0)==0?g+~n|0:n)<<2)>>2]|0;l=j+16|0;e=0;k=0;while(1){i=c[l>>2]|0;if((e|0)>=(c[i+200>>2]|0)){f=0;g=0;e=i;break}i=k+((Mh(d,c[(c[i+196>>2]|0)+(e<<2)>>2]|0)|0)!=0&1)|0;e=e+1|0;k=i}while(1){if((g|0)>=(c[e+192>>2]|0))break;i=f+((Mh(d,c[(c[e+188>>2]|0)+(g<<2)>>2]|0)|0)!=0&1)|0;f=i;g=g+1|0;e=c[l>>2]|0}if(f|k)if((k|0)==0&(a[e+157>>0]|0)==0)e=(Nh(d,j,p+(m<<2)|0,r)|0)+m|0;else e=m;else{c[p+(m<<2)>>2]=j;e=m+1|0}m=e;n=n+1|0}b:do if(m){c:do if(!(c[e+116>>2]&1)){f=p;e=p+(m<<2)|0;while(1){e=e+-4|0;if(f>>>0>=e>>>0){g=0;break c}n=c[f>>2]|0;c[f>>2]=c[e>>2];c[e>>2]=n;f=f+4|0}}else g=0;while(0);while(1){e=c[s>>2]|0;i=c[e+196>>2]|0;f=c[i+(r<<6)>>2]|0;if((g|0)>=(f|0)){m=0;g=i;break}n=c[p+(g<<2)>>2]|0;c[(c[i+(r<<6)+4>>2]|0)+(g<<2)>>2]=n;c[(c[n+16>>2]|0)+236>>2]=g+o;g=g+1|0}while(1){if((m|0)>=(f|0))break b;l=(c[(c[g+(r<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;i=c[(c[l>>2]|0)+188>>2]|0;if(i){k=0;f=i;while(1){g=c[f+(k<<2)>>2]|0;e=c[s>>2]|0;if(!g)break;j=c[g>>2]&3;i=c[(c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=c[(c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;if(!(c[e+116>>2]&1))if((i|0)<(j|0))t=36;else e=k;else if((i|0)>(j|0))t=36;else e=k;if((t|0)==36){t=0;if(Mh(d,g)|0){t=37;break a}ih(g);Oh(d,g);e=k+-1|0;f=c[(c[l>>2]|0)+188>>2]|0}k=e+1|0}f=c[e+196>>2]|0;g=f;f=c[f+(r<<6)>>2]|0}m=m+1|0}}while(0);a[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(r<<6)+49>>0]=0;h=p;g=p;f=p}r=r+1|0;q=g;i=f}if((t|0)==37)ma(78762,78628,1561,78801);if(h|0)$I(q)}return}function Lh(a){a=a|0;var d=0,e=0;e=a+16|0;a=c[e>>2]|0;a:do if(c[a+268>>2]|0){d=b[a+236>>1]|0;while(1){if((d|0)>(b[a+238>>1]|0))break a;c[(c[a+268>>2]|0)+(d<<2)>>2]=c[c[(c[a+196>>2]|0)+(d<<6)+4>>2]>>2];d=d+1|0;a=c[e>>2]|0}}while(0);return}function Mh(a,b){a=a|0;b=b|0;if((c[(c[b+16>>2]|0)+156>>2]|0)!=0?(Ph(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)!=0:0)a=(Ph(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)!=0&1;else a=0;return a|0}function Nh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+16|0;g=c[l>>2]|0;a[g+157>>0]=1;a:do if((c[g+192>>2]|0)>0){h=0;j=0;while(1){i=c[(c[g+188>>2]|0)+(j<<2)>>2]|0;if(!i)break a;if((Mh(b,i)|0)!=0?(k=c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,(a[(c[k+16>>2]|0)+157>>0]|0)==0):0)h=(Nh(b,k,e+(h<<2)|0,f)|0)+h|0;j=j+1|0;g=c[l>>2]|0}}else h=0;while(0);if((c[g+232>>2]|0)==(f|0)){c[e+(h<<2)>>2]=d;return h+1|0}else ma(78814,78628,1490,78830);return 0}function Oh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[d>>2]&3;j=c[((i|0)==2?d:d+-48|0)+40>>2]|0;f=c[(c[j+16>>2]|0)+188>>2]|0;a:do if(!f){e=d+48|0;m=15}else{l=d+48|0;g=((i|0)==3?d:l)+40|0;e=0;while(1){h=c[f+(e<<2)>>2]|0;if(!h){e=l;m=15;break a}if((c[((c[h>>2]&3|0)==2?h:h+-48|0)+40>>2]|0)==(c[g>>2]|0))break;else e=e+1|0}jh(d,h);e=(c[d+16>>2]|0)+172|0;if(!(c[e>>2]|0))c[e>>2]=h;e=c[h+16>>2]|0;if((a[e+112>>0]|0)==4?(k=e+116|0,(c[k>>2]|0)==0):0)c[k>>2]=d;e=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;f=c[e+204>>2]|0;if(!f)e=xw((c[e+208>>2]<<2)+8|0)|0;else e=zw(f,(c[e+208>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0)+204>>2]=e;i=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;j=c[i+204>>2]|0;i=i+208|0;k=c[i>>2]|0;c[i>>2]=k+1;c[j+(k<<2)>>2]=d;d=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;c[(c[d+204>>2]|0)+(c[d+208>>2]<<2)>>2]=0}while(0);if((m|0)==15){m=ah(j,c[((i|0)==3?d:e)+40>>2]|0,d)|0;l=c[d+16>>2]|0;d=c[m+16>>2]|0;a[d+112>>0]=(a[l+112>>0]|0)==4?4:3;c[d+96>>2]=c[l+96>>2];hh(b,m)}return}function Ph(a,b){a=a|0;b=b|0;var c=0;c=Gh(a,b)|0;return Hh(a,b)|0|c|0}function Qh(a,b){a=a|0;b=b|0;var d=0;d=ww(12)|0;c[d>>2]=a;c[d+4>>2]=b;c[d+8>>2]=ww(O(b,a)|0)|0;return d|0}function Rh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=d+16|0;l=c[o>>2]|0;k=c[(c[(c[b+16>>2]|0)+196>>2]|0)+(c[l+232>>2]<<6)+56>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=(c[(c[(Wf(b)|0)+16>>2]|0)+180>>2]|0)>0;e=c[o>>2]|0;f=c[e+188>>2]|0;a:do if(f){m=k+4|0;n=k+8|0;d=0;b:while(1){j=c[f+(d<<2)>>2]|0;if(!j){p=e;break a}if(l){if((Co(b,c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)|0)!=0?(Co(b,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0)!=0:0)q=7}else q=7;do if((q|0)==7){q=0;h=j+16|0;if(c[(c[h>>2]|0)+156>>2]|0){e=c[j>>2]&3;g=j+-48|0;r=c[(c[((e|0)==2?j:g)+40>>2]|0)+16>>2]|0;i=c[r+284>>2]|0;f=(i|0)<(c[k>>2]|0);if((a[r+158>>0]|0)==1){if(!f){q=10;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=12;break b}a[(c[n>>2]|0)+((O(f,i)|0)+e)>>0]=1;ih(j);d=d+-1|0;if((a[(c[h>>2]|0)+112>>0]|0)==4)break;Oh(b,j);break}else{if(!f){q=16;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=18;break b}a[(c[n>>2]|0)+((O(f,e)|0)+i)>>0]=1;e=c[((c[j>>2]&3|0)==2?j:g)+40>>2]|0;if(a[(c[e+16>>2]|0)+157>>0]|0)break;Rh(b,e);break}}}while(0);f=c[o>>2]|0;d=d+1|0;e=f;f=c[f+188>>2]|0}if((q|0)==10)ma(78840,78628,1251,78872);else if((q|0)==12)ma(78884,78628,1252,78872);else if((q|0)==16)ma(78840,78628,1260,78872);else if((q|0)==18)ma(78884,78628,1261,78872)}else p=e;while(0);a[p+158>>0]=0;return}function Sh(a,b){a=a|0;b=b|0;var c=0;c=eo(a)|0;while(1){if(!c)break;Uh(a,c,b);c=fo(a,c)|0}return}function Th(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=eo(b)|0;while(1){if(!d)break;e=GA(d,c[42206]|0,0)|0;a:do if(e|0){switch(a[e>>0]|0){case 0:break a;case 111:{if(!(yJ(e,78916)|0)){Uh(b,d,1);break a}break}case 105:{if(!(yJ(e,83705)|0)){Uh(b,d,0);break a}break}default:{}}h=En(d)|0;c[f>>2]=e;c[f+4>>2]=h;$l(1,78951,f)|0}while(0);d=fo(b,d)|0}l=g;return}function Uh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[41926]|0;h=d+16|0;f=c[h>>2]|0;a:do if(!(c[f+212>>2]|0)){i=(e|0)!=0;b:do if(i){g=0;d=0;e=f;while(1){f=c[(c[e+180>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(Vh(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}else{g=0;d=0;e=f;while(1){f=c[(c[e+172>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(Vh(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}while(0);if((d|0)>=2){c[j+(d<<2)>>2]=0;sL(j,d,4,13);h=i?2:3;g=i?-1:1;f=1;while(1){d=c[j+(f<<2)>>2]|0;if(!d)break a;e=c[j+(f+-1<<2)>>2]|0;e=c[((c[e>>2]&3|0)==(h|0)?e:e+(g*48|0)|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==(h|0)?d:d+(g*48|0)|0)+40>>2]|0;if(Vg(e,d)|0)break a;i=ah(e,d,0)|0;a[(c[i+16>>2]|0)+112>>0]=4;hh(b,i);f=f+1|0}}}while(0);return}function Vh(a){a=a|0;var b=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;return (c[(c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)!=(c[(c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)|0}function Wh(a,b){a=a|0;b=b|0;return ((c[c[a>>2]>>2]|0)>>>4)-((c[c[b>>2]>>2]|0)>>>4)|0}function Xh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[a+16>>2]|0;g=f+220|0;h=c[g>>2]|0;if((h|0)>=2){i=f+216|0;a=0;e=0;while(1){if((e|0)>=(h|0))break;d=c[(c[i>>2]|0)+(e<<2)>>2]|0;if(a|0)c[(c[a+16>>2]|0)+164>>2]=d;j=c[d+16>>2]|0;c[j+168>>2]=a;a=d;d=j;while(1){d=c[d+164>>2]|0;if(!d)break;a=d;d=c[d+16>>2]|0}e=e+1|0}c[g>>2]=1;c[f+192>>2]=c[c[f+216>>2]>>2];b[f+236>>1]=c[41928];b[f+238>>1]=c[41929]}return}function Yh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=c[41927]|0;j=i+16|0;f=c[j>>2]|0;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>=(b[f+238>>1]|0))break;d=c[f+196>>2]|0;if(!(a[d+(h<<6)+49>>0]|0)){e=pi(i,h)|0;d=c[j>>2]|0;f=c[d+196>>2]|0;c[f+(h<<6)+52>>2]=e;a[f+(h<<6)+49>>0]=1}else{e=c[d+(h<<6)+52>>2]|0;d=f}g=e+g|0;h=h+1|0;f=d}return g|0}function Zh(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0;a=c[a+16>>2]|0;g=b[a+238>>1]|0;i=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(g|0))break;f=c[i>>2]|0;e=c[f+(a<<6)>>2]|0;f=f+(a<<6)+4|0;d=0;while(1){if((d|0)>=(e|0))break;j=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;h[j+16>>3]=+(c[j+236>>2]|0);d=d+1|0}a=a+1|0}return}function _h(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;m=r;n=d+16|0;o=AA(c[(c[n>>2]|0)+232>>2]|0)|0;j=c[n>>2]|0;f=j+192|0;g=f;while(1){g=c[g>>2]|0;if(!g)break;g=c[g+16>>2]|0;a[g+157>>0]=0;g=g+164|0}h=b[j+238>>1]|0;i=j+196|0;g=b[j+236>>1]|0;while(1){if((g|0)>(h|0))break;c[(c[i>>2]|0)+(g<<6)>>2]=0;g=g+1|0}i=(e|0)==0;while(1){g=c[f>>2]|0;if(!g)break;h=g+16|0;f=c[h>>2]|0;if((c[c[(i?f+172|0:f+180|0)>>2]>>2]|0)==0?(k=f+157|0,(a[k>>0]|0)==0):0){a[k>>0]=1;CA(o,g);while(1){f=DA(o)|0;if(!f)break;if((a[(c[f+16>>2]|0)+159>>0]|0)==7){Yk(d,f,e,o);continue}else{ni(d,f);oi(o,f,e);continue}}f=c[h>>2]|0}f=f+164|0}if(DA(o)|0)$l(1,79159,m)|0;f=c[n>>2]|0;j=b[f+236>>1]|0;while(1){if((j|0)>(b[f+238>>1]|0))break;a[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(j<<6)+49>>0]=0;if((c[f+116>>2]&1|0)!=0?(p=c[f+196>>2]|0,q=c[p+(j<<6)>>2]|0,(q|0)>0):0){g=c[p+(j<<6)+4>>2]|0;h=q+-1|0;i=(h|0)/2|0;f=0;while(1){if((f|0)>(i|0))break;hi(c[g+(f<<2)>>2]|0,c[g+(h-f<<2)>>2]|0);f=f+1|0}f=c[n>>2]|0}j=j+1|0}if((Wf(d)|0)==(d|0)?(Yh(0)|0)>0:0)bi(d,0);BA(o);l=r;return}function $h(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;d=c[n>>2]|0;f=b[d+236>>1]|0;e=b[d+238>>1]|0;l=e<<16>>16;m=d+196|0;g=f;while(1){if((g|0)>(l|0))break;k=c[m>>2]|0;j=c[k+(g<<6)>>2]|0;k=k+(g<<6)+4|0;i=0;while(1){if((i|0)>=(j|0))break;o=c[(c[(c[k>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;c[o+236>>2]=~~+h[o+16>>3];i=i+1|0}g=g+1|0}while(1){if((f|0)>(e<<16>>16|0))break;a[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(f<<6)+49>>0]=0;o=c[d+196>>2]|0;sL(c[o+(f<<6)+4>>2]|0,c[o+(f<<6)>>2]|0,4,14);o=c[n>>2]|0;f=f+1|0;e=b[o+238>>1]|0;d=o}return}function ai(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=((d|0)%4|0|0)<2&1;e=c[a+16>>2]|0;if(!(d&1)){d=b[e+236>>1]|0;f=1;e=b[e+238>>1]|0;d=(d<<16>>16<=(b[(c[(c[41927]|0)+16>>2]|0)+236>>1]|0)&1)+(d<<16>>16)|0}else{d=b[e+238>>1]|0;f=-1;e=b[e+236>>1]|0;d=((d<<16>>16>=(b[(c[(c[41927]|0)+16>>2]|0)+238>>1]|0))<<31>>31)+(d<<16>>16)|0}e=f+e|0;while(1){if((d|0)==(e|0))break;ki(a,d,g,(ji(a,d,d-f|0)|0)&255);d=d+f|0}bi(a,g^1);return}function bi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;g=c[k>>2]|0;i=b[g+236>>1]|0;j=b[g+238>>1]|0;h=g+196|0;f=i<<16>>16;while(1){if((f|0)>(j|0)){h=i;break}a[(c[h>>2]|0)+(f<<6)+48>>0]=1;f=f+1|0}while(1){f=0;h=h<<16>>16;while(1){if((h|0)>(b[g+238>>1]|0))break;if(a[(c[g+196>>2]|0)+(h<<6)+48>>0]|0){f=(ii(d,h,e)|0)+f|0;g=c[k>>2]|0}h=h+1|0}if((f|0)<=0)break;h=b[g+236>>1]|0}return}function ci(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=d+16|0;e=c[o>>2]|0;n=b[e+238>>1]|0;a:while(1){if((n|0)<(b[e+236>>1]|0)){e=16;break}f=c[e+196>>2]|0;a[f+(n<<6)+48>>0]=0;p=(n|0)>0;q=n+1|0;g=0;b:while(1){l=(c[f+(n<<6)>>2]|0)+-1|0;m=f+(n<<6)+4|0;k=f+(q<<6)|0;while(1){if((g|0)>=(l|0))break b;j=c[m>>2]|0;i=c[j+(g<<2)>>2]|0;g=g+1|0;j=c[j+(g<<2)>>2]|0;if((c[(c[i+16>>2]|0)+236>>2]|0)>=(c[(c[j+16>>2]|0)+236>>2]|0)){e=7;break a}if(di(d,i,j)|0)continue;if(p){f=ei(i,j)|0;h=ei(j,i)|0}else{f=0;h=0}if((c[k>>2]|0)>0){f=(fi(i,j)|0)+f|0;h=(fi(j,i)|0)+h|0}if((h|0)<=(f|0))break}gi(d,n,i,j);e=c[o>>2]|0;f=c[e+196>>2]|0}n=n+-1|0}if((e|0)==7)ma(79110,78628,721,79136);else if((e|0)==16)return}function di(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+16>>2]|0;i=c[j+212>>2]|0;f=c[e+16>>2]|0;g=c[f+212>>2]|0;h=(i|0)!=(g|0);do if(!(a[173897]|0))if((g|0)==0|((i|0)==0|h^1))k=9;else{if((a[j+159>>0]|0)==7?(a[j+156>>0]|0)==1:0){b=0;break}if((a[f+159>>0]|0)==7?(a[f+156>>0]|0)==1:0){b=0;break}b=1}else if(h)b=1;else k=9;while(0);if((k|0)==9){f=c[b+16>>2]|0;b=c[(c[f+196>>2]|0)+(c[j+232>>2]<<6)+56>>2]|0;if(!b)b=0;else{j=(c[f+116>>2]&1|0)==0;k=O(c[b+4>>2]|0,c[(c[(j?d:e)+16>>2]|0)+284>>2]|0)|0;b=a[(c[b+8>>2]|0)+((c[(c[(j?e:d)+16>>2]|0)+284>>2]|0)+k)>>0]|0}}return b|0}function ei(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+172>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+16|0;f=c[(c[l>>2]|0)+172>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+16>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function fi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+180>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+56|0;f=c[(c[l>>2]|0)+180>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+56>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function gi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=a[(c[e+16>>2]|0)+156>>0]|0;if(i<<24>>24!=(a[(c[f+16>>2]|0)+156>>0]|0)){j=b+16|0;l=c[(c[j>>2]|0)+196>>2]|0;k=c[l+(d<<6)>>2]|0;l=l+(d<<6)+4|0;b=0;g=0;h=0;while(1){if((b|0)>=(k|0))break;o=(a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)==0;b=b+1|0;g=g+(o&1)|0;h=h+((o^1)&1)|0}i=i<<24>>24==0;h=(g|0)<(h|0)?(i?e:f):i?f:e;i=0;b=0;while(1){if((b|0)>=(k|0))break;i=(c[(c[l>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}o=(a[(c[h+16>>2]|0)+156>>0]|0)==0&1;n=0;g=i;while(1){b=g+-1|0;if((g|0)<=0){m=0;b=i;break}if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){m=0;b=i;break}n=n+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;m=m+1|0}hi(e,f);j=c[(c[j>>2]|0)+196>>2]|0;k=c[j+(d<<6)>>2]|0;j=j+(d<<6)+4|0;b=0;while(1){if((b|0)>=(k|0)){h=0;g=i;break}i=(c[(c[j>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}while(1){b=g+-1|0;if((g|0)<=0){g=0;b=i;break}if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){g=0;b=i;break}h=h+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;g=g+1|0}d=h-g|0;o=n-m|0;if((((d|0)>-1?d:0-d|0)|0)>(((o|0)>-1?o:0-o|0)|0))hi(e,f)}return}function hi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+16>>2]|0;e=c[f+232>>2]|0;f=f+236|0;d=c[f>>2]|0;g=b+16|0;h=c[(c[g>>2]|0)+236>>2]|0;c[f>>2]=h;f=(c[41927]|0)+16|0;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(h<<2)>>2]=a;c[(c[g>>2]|0)+236>>2]=d;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return}function ii(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=d+16|0;n=c[(c[q>>2]|0)+196>>2]|0;a[n+(e<<6)+48>>0]=0;r=(e|0)>0;s=e+1|0;o=(f|0)!=0;p=e+-1|0;g=0;i=0;f=n;a:while(1){l=(c[f+(e<<6)>>2]|0)+-1|0;m=f+(e<<6)+4|0;h=f+(s<<6)|0;n=g;while(1){if((n|0)>=(l|0)){f=17;break a}k=c[m>>2]|0;j=c[k+(n<<2)>>2]|0;n=n+1|0;k=c[k+(n<<2)>>2]|0;if((c[(c[j+16>>2]|0)+236>>2]|0)>=(c[(c[k+16>>2]|0)+236>>2]|0)){f=5;break a}if(di(d,j,k)|0)continue;if(r){f=ei(j,k)|0;g=ei(k,j)|0}else{f=0;g=0}if((c[h>>2]|0)>0){f=(fi(j,k)|0)+f|0;g=(fi(k,j)|0)+g|0}if((f|0)>(g|0))break;if((f|0)==(g|0)&(o&(f|0)>0)){f=g;break}}hi(j,k);i=f-g+i|0;g=c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0;a[g+(e<<6)+49>>0]=0;h=c[q>>2]|0;f=c[h+196>>2]|0;a[f+(e<<6)+48>>0]=1;if((b[h+236>>1]|0)<(e|0)){a[g+(p<<6)+49>>0]=0;a[f+(p<<6)+48>>0]=1}if((b[h+238>>1]|0)<=(e|0)){g=n;continue}a[g+(s<<6)+49>>0]=0;a[f+(s<<6)+48>>0]=1;g=n}if((f|0)==5)ma(79110,78628,770,79144);else if((f|0)==17)return i|0;return 0}function ji(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[41925]|0;q=a+16|0;a=c[(c[q>>2]|0)+196>>2]|0;r=c[a+(e<<6)+4>>2]|0;n=(f|0)>(e|0);o=p+4|0;m=0;while(1){f=c[a+(e<<6)>>2]|0;if((m|0)>=(f|0)){a=0;j=0;break}l=(c[r+(m<<2)>>2]|0)+16|0;a=c[l>>2]|0;a:do if(n){k=c[a+180>>2]|0;a=0;j=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+88>>0];a=a+1|0}j=j+1|0}}else{k=c[a+172>>2]|0;j=0;a=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+48>>0];a=a+1|0}j=j+1|0}}while(0);b:do switch(a|0){case 0:{i=-1.0;break}case 1:{i=+(c[p>>2]|0);break}case 2:{i=+(((c[o>>2]|0)+(c[p>>2]|0)|0)/2|0|0);break}default:{sL(p,a,4,12);f=(a|0)/2|0;if(a&1|0){i=+(c[p+(f<<2)>>2]|0);break b}j=c[p+(f<<2)>>2]|0;g=(c[p+(a+-1<<2)>>2]|0)-j|0;a=c[p+(f+-1<<2)>>2]|0;f=a-(c[p>>2]|0)|0;if((f|0)==(g|0)){i=+((a+j|0)/2|0|0);break b}else{i=+(((O(f,j)|0)+(O(a,g)|0)|0)/(f+g|0)|0|0);break b}}}while(0);h[(c[l>>2]|0)+240>>3]=i;m=m+1|0;a=c[(c[q>>2]|0)+196>>2]|0}while(1){if((j|0)>=(f|0))break;g=c[r+(j<<2)>>2]|0;p=c[g+16>>2]|0;if((c[p+184>>2]|0)==0?(c[p+176>>2]|0)==0:0){a=(li(g)|0|a&255)&255;f=c[(c[(c[q>>2]|0)+196>>2]|0)+(e<<6)>>2]|0}j=j+1|0}return a|0}function ki(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;o=c[(c[b+16>>2]|0)+196>>2]|0;s=c[o+(d<<6)+4>>2]|0;o=c[o+(d<<6)>>2]|0;q=(e|0)!=0;p=(f|e|0)==0;f=0;e=o;o=s+(o<<2)|0;while(1){n=e+-1|0;if((e|0)>0)e=s;else break;a:while(1){b:while(1){if(e>>>0>=o>>>0)break a;while(1){if(e>>>0>=o>>>0)break a;l=c[e>>2]|0;m=+h[(c[l+16>>2]|0)+240>>3];if(!(m<0.0))break;e=e+4|0}k=0;while(1){g=k<<24>>24==0;while(1){e=e+4|0;if(e>>>0>=o>>>0)break a;if(g){g=11;break}i=c[e>>2]|0;if(!(c[(c[i+16>>2]|0)+212>>2]|0)){g=13;break}}if((g|0)==11){i=c[e>>2]|0;j=i}else if((g|0)==13)j=i;if(di(b,l,j)|0)continue b;g=c[i+16>>2]|0;if(+h[g+240>>3]>=0.0)break;k=(c[g+212>>2]|0)==0?k:1}g=~~m;k=~~+h[(c[i+16>>2]|0)+240>>3];if((g|0)>(k|0)|q&(g|0)==(k|0))break}hi(l,j);f=f+1|0}e=n;o=p?o+-4|0:o}if(f|0?(r=c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0,a[r+(d<<6)+49>>0]=0,(d|0)>0):0)a[r+(d+-1<<6)+49>>0]=0;return}function li(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;g=c[a+16>>2]|0;if((c[g+200>>2]|0)>0){f=c[g+196>>2]|0;a=c[f>>2]|0;a=c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0;d=1;while(1){e=c[f+(d<<2)>>2]|0;if(!e)break;e=c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;a=(c[(c[e+16>>2]|0)+236>>2]|0)>(c[(c[a+16>>2]|0)+236>>2]|0)?e:a;d=d+1|0}b=+h[(c[a+16>>2]|0)+240>>3];if(!(b>=0.0))a=1;else{h[g+240>>3]=b+1.0;a=0}}else if((c[g+192>>2]|0)>0){e=c[g+188>>2]|0;d=c[e>>2]|0;a=1;d=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;while(1){f=c[e+(a<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;a=a+1|0;d=(c[(c[f+16>>2]|0)+236>>2]|0)<(c[(c[d+16>>2]|0)+236>>2]|0)?f:d}b=+h[(c[d+16>>2]|0)+240>>3];if(b>0.0){h[g+240>>3]=b+-1.0;a=0}else a=1}else a=1;return a|0}function mi(a,b){a=a|0;b=b|0;return (c[(c[(c[a>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[b>>2]|0)+16>>2]|0)+236>>2]|0)|0}function ni(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+96|0;o=p+64|0;n=p+48|0;h=p+24|0;f=p;j=d+16|0;k=c[(c[j>>2]|0)+232>>2]|0;m=a+16|0;e=c[(c[m>>2]|0)+196>>2]|0;i=c[e+(k<<6)>>2]|0;do if((c[e+(k<<6)+8>>2]|0)>=1){c[(c[e+(k<<6)+4>>2]|0)+(i<<2)>>2]=d;c[(c[j>>2]|0)+236>>2]=i;a=c[m>>2]|0;f=c[a+196>>2]|0;e=f+(k<<6)|0;g=c[e>>2]|0;c[e>>2]=g+1;if((g|0)>=(c[f+(k<<6)+8>>2]|0))ma(79224,78628,1346,79260);g=c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;if((i|0)>(g|0)){m=En(d)|0;n=c[(c[j>>2]|0)+236>>2]|0;o=c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;c[h>>2]=1359;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=k;c[h+16>>2]=o;$l(1,79276,h)|0;break}e=b[a+236>>1]|0;a=b[a+238>>1]|0;if((k|0)<(e|0)|(k|0)>(a<<16>>16|0)){c[n>>2]=1364;c[n+4>>2]=k;c[n+8>>2]=e;c[n+12>>2]=a<<16>>16;$l(1,79349,n)|0;break}if(((c[f+(k<<6)+4>>2]|0)+(i<<2)|0)>>>0>((c[f+(k<<6)+12>>2]|0)+(g<<2)|0)>>>0){i=En(d)|0;n=c[(c[m>>2]|0)+196>>2]|0;m=(c[n+(k<<6)+4>>2]|0)+(c[(c[j>>2]|0)+236>>2]<<2)|0;n=(c[n+(k<<6)+12>>2]|0)+(c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]<<2)|0;c[o>>2]=1370;c[o+4>>2]=k;c[o+8>>2]=i;c[o+12>>2]=m;c[o+16>>2]=k;c[o+20>>2]=k;c[o+24>>2]=n;$l(1,79410,o)|0}}else{n=En(a)|0;o=En(d)|0;c[f>>2]=1339;c[f+4>>2]=n;c[f+8>>2]=o;c[f+12>>2]=k;c[f+16>>2]=i;$l(1,79169,f)|0}while(0);l=p;return}function oi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=d+16|0;a:do if(!e){g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+184>>2]|0))break a;d=c[(c[d+180>>2]|0)+(g<<2)>>2]|0;e=d+-48|0;f=(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;CA(b,c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)}g=g+1|0}}else{g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+176>>2]|0))break a;d=c[(c[d+172>>2]|0)+(g<<2)>>2]|0;e=d+48|0;f=(c[(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;CA(b,c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)}g=g+1|0}}while(0);return}function pi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;u=v;g=d+16|0;f=c[(c[g>>2]|0)+196>>2]|0;s=c[f+(e<<6)+4>>2]|0;t=e+1|0;d=c[(c[(c[(c[41927]|0)+16>>2]|0)+196>>2]|0)+(t<<6)>>2]|0;if((c[41931]|0)>(d|0))q=c[41932]|0;else{d=d+1|0;c[41931]=d;f=c[41932]|0;if(!f)d=xw(d<<2)|0;else d=zw(f,d<<2)|0;c[41932]=d;f=c[(c[g>>2]|0)+196>>2]|0;q=d}r=f+(t<<6)|0;d=0;while(1){if((d|0)>=(c[r>>2]|0))break;c[q+(d<<2)>>2]=0;d=d+1|0}p=f+(e<<6)|0;o=0;h=0;d=0;j=q;while(1){k=c[p>>2]|0;if((o|0)>=(k|0))break;n=c[(c[(c[s+(o<<2)>>2]|0)+16>>2]|0)+180>>2]|0;a:do if((h|0)>0){m=0;while(1){g=c[n+(m<<2)>>2]|0;if(!g)break a;k=g+16|0;i=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;while(1){g=i+1|0;if((i|0)>=(h|0))break;i=g;d=(O(c[j+(g<<2)>>2]|0,b[(c[k>>2]|0)+154>>1]|0)|0)+d|0}m=m+1|0}}while(0);i=0;while(1){g=c[n+(i<<2)>>2]|0;if(!g)break;j=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;m=q+(j<<2)|0;c[m>>2]=(c[m>>2]|0)+(b[(c[g+16>>2]|0)+154>>1]|0);h=(j|0)>(h|0)?j:h;i=i+1|0;j=q}o=o+1|0}i=f+(e<<6)+4|0;h=0;while(1){if((h|0)>=(k|0))break;g=c[(c[(c[i>>2]|0)+(h<<2)>>2]|0)+16>>2]|0;if(a[g+145>>0]|0){e=g+180|0;c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];d=(qi(u,1)|0)+d|0}h=h+1|0}i=c[r>>2]|0;h=f+(t<<6)+4|0;g=0;while(1){if((g|0)>=(i|0))break;f=c[(c[(c[h>>2]|0)+(g<<2)>>2]|0)+16>>2]|0;if(a[f+145>>0]|0){t=f+172|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];d=(qi(u,-1)|0)+d|0}g=g+1|0}l=v;return d|0}function qi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(d|0)<1;l=c[a>>2]|0;d=0;a=0;a:while(1){m=c[l+(d<<2)>>2]|0;if(!m)break;d=d+1|0;if(n){j=m+48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+56>>3]-+h[g+56>>3])*+((c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==3?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}else{j=m+-48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+16>>3]-+h[g+16>>3])*+((c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==2?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}}return a|0}function ri(a){a=a|0;var b=0.0,d=0.0;c[41930]=8;c[42181]=24;h[20878]=.995;a=Jm(a,79532)|0;if(a|0?(b=+tM(a),b>0.0):0){d=b*+(c[41930]|0);c[41930]=~~(d>1.0?d:1.0);b=b*+(c[42181]|0);c[42181]=~~(b>1.0?b:1.0)}return}function si(a){a=a|0;var d=0,e=0;e=(b[(c[a+16>>2]|0)+238>>1]|0)+2|0;d=ww(e<<2)|0;ui(a,d,e,0)|0;$I(d);return}\nfunction Vq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(b|0)==2;d=(c[42039]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;e=d+4|0;f=c[e>>2]|0;if(!((g?(a[f>>0]|0)==(a[83089]|0):0)?!(yJ(f,83089)|0):0)){h=zm(c[c[42039]>>2]|0,b,f,0)|0;c[e>>2]=h;if(!h)c[e>>2]=zm(c[c[42039]>>2]|0,b,f,174185)|0;c[d>>2]=266;cp(c[42038]|0,f)|0}d=d+12|0}return}function Wq(a){a=a|0;Xq(c[a>>2]|0);c[a+4>>2]=0;c[a>>2]=0;return}function Xq(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;switch(c[a>>2]|0){case 265:{Xq(c[a+4>>2]|0);break}case 266:case 267:{cp(c[42038]|0,c[a+8>>2]|0)|0;break}default:{}}_n(c[42038]|0,a);a=b}return}function Yq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;f=h;g=h+8|0;d=sJ(a)|0;d=d+2+(sJ(b)|0)|0;if(d>>>0<1025)e=g;else e=_I(d)|0;c[f>>2]=a;c[f+4>>2]=b;qL(e,83126,f)|0;d=ap(c[42038]|0,e)|0;cp(c[42038]|0,a)|0;cp(c[42038]|0,b)|0;if((e|0)!=(g|0))$I(e);l=h;return d|0}function Zq(a,b){a=a|0;b=b|0;return Tq(259,a,b)|0}function _q(a){a=a|0;return Tq(265,a,0)|0}function $q(a){a=a|0;return Tq(262,a,0)|0}function ar(a){a=a|0;var b=0,d=0;b=(c[42039]|0)+24|0;while(1){b=c[b>>2]|0;if(!b)break;if((c[b>>2]|0)==266?(d=c[b+4>>2]|0,d|0):0)Dm(a,d,c[b+8>>2]|0)|0;b=b+12|0}return}function br(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=d+4|0;a:do if((c[d>>2]|0)==262){d=c[f>>2]|0;f=eo(d)|0;while(1){if(!f)break a;cr(a,b,jo(c[c[42039]>>2]|0,f,0)|0,0,e);f=fo(d,f)|0}}else while(1){f=c[f>>2]|0;if(!f)break a;d=jo(c[c[42039]>>2]|0,c[f+4>>2]|0,0)|0;cr(a,b,d,c[f+8>>2]|0,e);f=f+12|0}while(0);return}function cr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;d=bn(c[c[42039]>>2]|0,a,d,f,1)|0;if(d|0){g=c[d>>2]&3;f=c[((g|0)==2?d:d+-48|0)+40>>2]|0;a=(f|0)==(a|0)?(c[((g|0)==3?d:d+48|0)+40>>2]|0)!=(f|0):0;dr(d,96242,a?e:b);dr(d,96251,a?b:e);ar(d)}return}function dr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d|0){e=zm(c[c[42039]>>2]|0,2,b,0)|0;if(!e)e=zm(c[c[42039]>>2]|0,2,b,174185)|0;Dm(a,e,d)|0}return}function er(a,b,d){a=a|0;b=b|0;d=d|0;c[42007]=b;c[42038]=a;c[41987]=0;a=d|0?d:17656;c[42041]=a;hp(a,b);Cq()|0;a=c[41987]|0;if(!a){Gp();a=c[41987]|0}return a|0}function fr(a,b){a=a|0;b=b|0;return er(0,a,b)|0}function gr(a,b){a=a|0;b=b|0;b=Kr(a,1,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+184>>2]=c[b+4>>2];c[a+172>>2]=c[b+12>>2];c[a+176>>2]=c[b>>2];c[a+180>>2]=c[b+16>>2];b=300}return b|0}function hr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;Oo(b,122277,280,1)|0;g=b+16|0;c[(c[g>>2]|0)+144>>2]=a;if((to(b)|0)!=(b|0))c[(c[(to(b)|0)+16>>2]|0)+144>>2]=a;e=Jm(b,83342)|0;d=a+172|0;if((e|0)!=0?(c[d>>2]=0,(gr(a,e)|0)==999):0){d=Lr(a,1,e)|0;c[f>>2]=e;c[f+4>>2]=d;$l(1,83869,f)|0;d=-1}else{e=c[d>>2]|0;if(!e)d=-1;else{Gv(1);ew(b,c[c[a+180>>2]>>2]&1);d=c[(c[g>>2]|0)+8>>2]|0;c[(c[(to(b)|0)+16>>2]|0)+8>>2]=d;Fz();d=c[e>>2]|0;if(d|0?(gb[d&127](b),h=c[e+4>>2]|0,h|0):0)c[(c[g>>2]|0)+148>>2]=h;Gv(0);d=0}}l=i;return d|0}function ir(a,b){a=a|0;b=b|0;var d=0,e=0;if(Oo(b,122277,0,1)|0){d=b+16|0;a=c[d>>2]|0;e=c[a+148>>2]|0;if(e){gb[e&127](b);a=c[d>>2]|0;c[a+148>>2]=0}if(c[a+8>>2]|0)jw(b)}return 0}function jr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;d=c[b+76>>2]|0;f=c[b>>2]|0;if((d|0)!=0?(e=c[d>>2]|0,(e|0)!=0):0){gb[e&127](b);g=12}else g=4;do if((g|0)==4)if((c[b+40>>2]|0)==0?(h=b+36|0,(c[h>>2]|0)==0):0){if(a[f+13>>0]|0)kr(b);d=b+32|0;e=c[d>>2]|0;if(!e){c[h>>2]=c[13885];g=12;break}f=bM(e,91556)|0;c[h>>2]=f;if(!f){j=c[(c[b+12>>2]|0)+16>>2]|0;h=c[d>>2]|0;d=zJ(c[(kJ()|0)>>2]|0)|0;c[i>>2]=h;c[i+4>>2]=d;hb[j&31](83132,i);d=1}else g=12}else g=12;while(0);if((g|0)==12)if(!(c[b+152>>2]&1024))d=0;else{hb[c[(c[b+12>>2]|0)+16>>2]&31](83170,j);d=1}l=k;return d|0}function kr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+112|0;e=h;g=h+4|0;d=c[b+24>>2]|0;if(!d)a[g>>0]=0;else{c[e>>2]=d+1;qL(g,83188,e)|0}e=c[b+20>>2]|0;e=e|0?e:83192;d=sJ(e)|0;i=sJ(g)|0;f=b+52|0;i=d+1+i+(sJ(c[f>>2]|0)|0)|0;d=i+11|0;if((c[42042]|0)>>>0<(i+1|0)>>>0){c[42042]=d;d=bJ(c[42043]|0,d)|0;c[42043]=d}else d=c[42043]|0;yK(d,e)|0;JL(c[42043]|0,g)|0;d=c[42043]|0;d=d+(sJ(d)|0)|0;a[d>>0]=46;a[d+1>>0]=0;d=HL(c[f>>2]|0)|0;f=c[42043]|0;while(1){e=IL(d,58)|0;if(!e)break;JL(f,e+1|0)|0;i=c[42043]|0;g=i+(sJ(i)|0)|0;a[g>>0]=46;a[g+1>>0]=0;a[e>>0]=0;f=i}JL(f,d)|0;$I(d);c[b+32>>2]=c[42043];l=h;return}function lr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+8|0;f=h;if((b|0)!=0&(d|0)!=0){if(c[a+152>>2]&1024|0){hb[c[(c[a+12>>2]|0)+16>>2]&31](83170,f);Ma(1)}if((mr(a,b,d)|0)==(d|0))e=d;else{f=c[(c[a+12>>2]|0)+16>>2]|0;c[g>>2]=d;hb[f&31](83202,g);Ma(1)}}else e=0;l=h;return e|0}function mr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=c[(c[b>>2]|0)+104>>2]|0;do if(!f){j=b+40|0;h=c[j>>2]|0;if(!h){e=YL(d,1,e,c[b+36>>2]|0)|0;break}f=b+44|0;i=b+48|0;g=c[i>>2]|0;do if(((c[f>>2]|0)+-1-g|0)>>>0<e>>>0){g=e+4096+g&-4096;c[f>>2]=g;f=bJ(h,g)|0;c[j>>2]=f;if(!f){hb[c[(c[b+12>>2]|0)+16>>2]&31](83227,n);Ma(1)}else{k=f;m=c[i>>2]|0;break}}else{k=h;m=g}while(0);UN(k+m|0,d|0,e|0)|0;n=(c[i>>2]|0)+e|0;c[i>>2]=n;a[(c[j>>2]|0)+n>>0]=0}else e=bb[f&31](b,d,e)|0;while(0);l=o;return e|0}function nr(a,b){a=a|0;b=b|0;var c=0;c=sJ(b)|0;b=(lr(a,b,c)|0)==(c|0);return (b?1:-1)|0}function or(b,c){b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;a[e>>0]=c;b=(lr(b,e,1)|0)==1;l=d;return (b?c:-1)|0}function pr(b){b=b|0;var d=0;d=c[b+36>>2]|0;if(((d|0)!=0?(a[b+144>>0]|0)==0:0)?(c[(c[b>>2]|0)+104>>2]|0)==0:0)b=QL(d)|0;else b=0;return b|0}function qr(a){a=a|0;var b=0,d=0;b=c[a+76>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)gb[d&127](a);pr(a)|0;return}function rr(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=c[a+76>>2]|0;if(c[a+152>>2]&1024|0){hb[c[(c[a+12>>2]|0)+16>>2]&31](83254,e);Ma(1)}if((d|0)!=0?(b=c[d+8>>2]|0,(b|0)!=0):0)gb[b&127](a);else{pr(a)|0;sr(a)}l=e;return}function sr(b){b=b|0;var d=0,e=0,f=0;d=b+32|0;if((c[d>>2]|0?(e=b+36|0,f=c[e>>2]|0,(f|0)!=(c[13885]|0)):0)?(a[b+144>>0]|0)==0:0){if(f|0){ML(f)|0;c[e>>2]=0}c[d>>2]=0}return}function tr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;f=i;h=i+24|0;g=i+8|0;c[g>>2]=d;e=MK(h,1024,b,g)|0;if((e|0)>=0){if((e|0)>1023){e=xw(e+1|0)|0;c[g>>2]=d;f=e;e=rL(e,b,g)|0}else f=h;lr(a,f,e)|0;if((f|0)!=(h|0))$I(f)}else{c[f>>2]=zJ(c[(kJ()|0)>>2]|0)|0;$l(1,83271,f)|0}l=i;return}function ur(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=vr(e,b)|0;lr(a,f,c[e>>2]|0)|0;l=d;return}function vr(b,d){b=b|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(d<-1.0e15))if(!(d>1.0e15)){d=d*1.0e4;f=~~((d<0.0?-.5:.5)+d);if(!f){f=123205;e=1}else{l=(f|0)<0;k=4;i=0;e=173952;f=l?0-f|0:f;while(1){if(!((f|0)!=0|(k|0)>0))break;g=(f|0)%10|0;j=(f|0)/10|0;h=e+-1|0;if((g|0)==0&i<<24>>24==0)f=0;else{a[h>>0]=g|48;f=1;e=h}if((k|0)==1)if(!(f<<24>>24))f=1;else{e=e+-1|0;a[e>>0]=46;f=1}k=k+-1|0;i=f;f=j}if(l){e=e+-1|0;a[e>>0]=45}f=e;e=173952-e|0}}else{f=83286;e=18}else{f=83285;e=19}c[b>>2]=e;return f|0}function wr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=vr(e,+h[b>>3])|0;lr(a,f,c[e>>2]|0)|0;lr(a,87638,1)|0;b=vr(e,+h[b+8>>3])|0;lr(a,b,c[e>>2]|0)|0;l=d;return}function xr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;e=0;while(1){h=b+(e<<4)|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];wr(a,f);e=e+1|0;if((e|0)>=(d|0))break;lr(a,87638,1)|0}l=g;return}function yr(a,b){a=a|0;b=b|0;var d=0;d=ww(392)|0;if(d|0){c[d>>2]=19212;c[d+16>>2]=22;c[d+32>>2]=a;c[d+36>>2]=b}return d|0}function zr(a){a=a|0;var b=0,d=0,e=0,f=0;b=ww(392)|0;d=b;e=a;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=b+60|0;e=a+60|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];f=b+80|0;e=a+80|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];return b|0}function Ar(a){a=a|0;Hr(a);$I(a);return}function Br(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[42044]|0;if(e){d=c[e+4>>2]|0;if(!d){d=ww(632)|0;c[(c[42044]|0)+4>>2]=d}}}else{d=ww(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[42044]=d;c[d+32>>2]=b;c[d>>2]=a;return}function Cr(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[42045]|0;if(e){d=c[e+4>>2]|0;if(!d){d=ww(632)|0;c[(c[42045]|0)+4>>2]=d}}}else{d=ww(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[42045]=d;c[d+52>>2]=b;c[d>>2]=a;return (Kr(a,3,b)|0)!=0|0}function Dr(a){a=a|0;var b=0;b=c[a+160>>2]|0;c[a+164>>2]=b;return b|0}function Er(a){a=a|0;var b=0,d=0,e=0;a=a+164|0;b=c[a>>2]|0;d=c[b+4>>2]|0;if(d|0?(e=d+52|0,(c[e>>2]|0)==0):0)c[e>>2]=c[b+52>>2];c[a>>2]=d;return d|0}function Fr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;f=b+10|0;if((c[e>>2]|0)>(b|0))a=c[a>>2]|0;else{c[e>>2]=f;f=zw(c[a>>2]|0,f<<2)|0;c[a>>2]=f;a=f}c[a+(b<<2)>>2]=d;return}function Gr(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)$I(b);c[a>>2]=0;c[a+8>>2]=0;c[a+4>>2]=0;return}function Hr(a){a=a|0;var b=0,d=0,e=0;d=a+160|0;b=c[d>>2]|0;while(1){if(!b)break;e=c[b+4>>2]|0;Gr(b+604|0);Gr(b+592|0);$I(c[b+584>>2]|0);$I(c[b+588>>2]|0);$I(b);b=e}c[42045]=0;c[42044]=0;c[a+192>>2]=0;c[a+164>>2]=0;c[d>>2]=0;c[a+28>>2]=0;return}function Ir(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;k=n+64|0;m=n;nL(k,e,63)|0;i=XJ(k,58)|0;if(i|0)a[i>>0]=0;b=b+60+(d<<2)|0;while(1){d=c[b>>2]|0;if(!d){d=b;b=0;break}nL(m,c[d+4>>2]|0,63)|0;d=XJ(m,58)|0;if(d|0)a[d>>0]=0;if((yJ(k,m)|0)<1){j=9;break}b=c[b>>2]|0}while(1){if((j|0)==9){d=b;b=c[b>>2]|0}if(!b)break;nL(m,c[b+4>>2]|0,63)|0;b=XJ(m,58)|0;if(b|0)a[b>>0]=0;if(yJ(k,m)|0)break;b=c[d>>2]|0;if((c[b+8>>2]|0)<=(f|0))break;j=9}m=xw(20)|0;c[m>>2]=c[d>>2];c[d>>2]=m;c[m+4>>2]=e;c[m+8>>2]=f;c[m+12>>2]=g;c[m+16>>2]=h;l=n;return 1}function Jr(a,b){a=a|0;b=b|0;b=l;l=l+16|0;$l(1,83366,b)|0;l=b;return 0}function Kr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+144|0;r=s;o=s+80|0;p=s+16|0;n=(d+-3|0)>>>0<2?0:d;nL(o,e,63)|0;e=XJ(o,58)|0;if(e){f=e+1|0;a[e>>0]=0;e=XJ(f,58)|0;if(!e)m=0;else{a[e>>0]=0;m=e+1|0}}else{m=0;f=0}i=(f|0)!=0;j=(m|0)==0;k=(n|0)==(d|0);h=b+60+(d<<2)|0;a:while(1){e=c[h>>2]|0;if(!e){e=0;break}nL(p,c[e+4>>2]|0,63)|0;e=XJ(p,58)|0;if(!e)e=0;else{a[e>>0]=0;e=e+1|0}do if(!(yJ(p,o)|0)){g=(e|0)!=0;if(i&g?yJ(e,f)|0:0)break;if(!j?yJ(m,c[(c[(c[h>>2]|0)+12>>2]|0)+8>>2]|0)|0:0)break;if(k|g^1){q=16;break a}if(Kr(b,n,e)|0){q=16;break a}}while(0);h=c[h>>2]|0}do if((q|0)==16){e=c[h>>2]|0;if(e){f=e+16|0;if((c[f>>2]|0)==0?(Jr(0,0)|0,(c[f>>2]|0)==0):0){e=0;break}if((c[b+8>>2]|0)>0){q=c[13918]|0;o=c[e+4>>2]|0;p=c[(c[e+12>>2]|0)+8>>2]|0;c[r>>2]=c[19224+(d<<2)>>2];c[r+4>>2]=o;c[r+8>>2]=p;AL(q,83397,r)|0}}else e=0}while(0);c[b+80+(d<<2)>>2]=e;l=s;return e|0}function Lr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;do if(!e)e=0;else{if(c[4811]|0){dm(168184,0,0);c[4811]=0}h=HL(e)|0;e=XJ(h,58)|0;if(e){a[e>>0]=0;f=b+60+(d<<2)|0;e=1;g=f;while(1){b=c[g>>2]|0;if(!b)break;d=HL(c[b+4>>2]|0)|0;b=XJ(d,58)|0;if(b|0)a[b>>0]=0;if(!((a[h>>0]|0)!=0?(jK(h,d)|0)!=0:0)){e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}c[42047]=e+1;a[e>>0]=32;gm(168184,c[(c[g>>2]|0)+4>>2]|0)|0;e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}c[42047]=e+1;a[e>>0]=58;gm(168184,c[(c[(c[g>>2]|0)+12>>2]|0)+8>>2]|0)|0;e=0}$I(d);g=c[g>>2]|0}$I(h);if(e<<24>>24){g=0;i=19}}else{$I(h);g=0;f=b+60+(d<<2)|0;e=1;i=19}if((i|0)==19){while(1){b=c[f>>2]|0;if(!b)break;d=HL(c[b+4>>2]|0)|0;b=XJ(d,58)|0;if(b|0)a[b>>0]=0;if(!((g|0)!=0?(jK(g,d)|0)==0:0)){e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}c[42047]=e+1;a[e>>0]=32;gm(168184,d)|0;e=0}g=d;f=c[f>>2]|0;i=19}if(e<<24>>24){e=174185;break}}e=c[42047]|0;if(e>>>0>=(c[42048]|0)>>>0){em(168184,1)|0;e=c[42047]|0}a[e>>0]=0;e=c[42046]|0;c[42047]=e}while(0);return e|0}function Mr(b){b=b|0;var d=0;if(!b)ma(96030,83414,573,83428);if(!(a[b>>0]|0))ma(96035,83414,574,83428);d=c[42050]|0;if(!d)b=0;else b=bb[c[d>>2]&31](d,b,512)|0;return b|0}function Nr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;if(!b)ma(96091,83414,589,83445);g=b+8|0;e=c[g>>2]|0;if(!e)ma(96094,83414,590,83445);if(!(a[e>>0]|0))ma(96103,83414,591,83445);h=b+20|0;f=c[h>>2]|0;do if(!f){d=SA(e)|0;if(!d){c[i>>2]=c[g>>2];$l(0,83469,i)|0;d=0;break}i=bM(d,123632)|0;c[h>>2]=i;if(!i){c[j>>2]=zJ(c[(kJ()|0)>>2]|0)|0;c[j+4>>2]=d;$l(0,83494,j)|0;d=0;break}d=c[42051]|0;if((d|0)>49){a[b+17>>0]=1;d=1;break}else{c[42051]=d+1;d=1;break}}else{pM(f,0,0)|0;if(!(c[h>>2]|0))ma(83515,83414,614,83445);else d=1}while(0);l=k;return d|0}function Or(b){b=b|0;var d=0,e=0;if(a[b+17>>0]|0?(d=b+20|0,e=c[d>>2]|0,e|0):0){ML(e)|0;c[d>>2]=0}return}function Pr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0;if(!b){e=-1;d=-1}else{e=c[b+48>>2]|0;f=+(e|0);if(!e){g=+h[d>>3];f=+h[d+8>>3]}else{h[d+8>>3]=f;h[d>>3]=f;g=f}e=~~(+((c[b+40>>2]|0)*72|0)/g);d=~~(+((c[b+44>>2]|0)*72|0)/f)}c[a>>2]=e;c[a+4>>2]=d;return}function Qr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;f=m+16|0;j=m;k=m+32|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){if((0==0?(g=c[42178]|0,(c[42052]|0)!=(g|0)):0)?(c[42052]=g,i=c[42050]|0,i|0):0){Ll(i)|0;c[42050]=0}n=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];n=!(n>=1.0)?96.0:n;h[j+8>>3]=n;h[j>>3]=n;d=Rr(e)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];Pr(k,d,f);d=c[k>>2]|0;f=c[k+4>>2]|0}else{d=-1;f=-1}c[b>>2]=d;c[b+4>>2]=f;l=m;return}function Rr(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;if(!a)ma(96030,83414,638,83521);if(!(c[42050]|0))c[42050]=Rl(19248,c[4353]|0)|0;b=Mr(a)|0;a:do if(!b){b=ww(64)|0;if(!b)b=0;else{d=b+8|0;c[d>>2]=ap(0,a)|0;if(!((Nr(b)|0)<<24>>24)){Sr(b);b=0;break}if(!(c[b+20>>2]|0))ma(83515,83414,653,83521);do switch(Tr(b)|0){case 0:{a=Qy(c[d>>2]|0)|0;c[b+52>>2]=a;if(!a){c[e>>2]=c[d>>2];$l(0,83538,e)|0;Sr(b);b=0;break a}break}case 2:{Ur(b);break}case 3:{Vr(b);break}case 1:{Wr(b);break}case 4:{Xr(b);break}case 6:{Yr(b);break}case 11:{Zr(b);break}case 8:{_r(b);break}case 5:{$r(b);break}case 12:{as(b);break}default:{}}while(0);Or(b);e=c[42050]|0;bb[c[e>>2]&31](e,b,1)|0}}else Or(b);while(0);l=f;return b|0}function Sr(a){a=a|0;var b=0;b=c[a+8>>2]|0;if(b|0)cp(0,b)|0;$I(a);return}function Tr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+224|0;f=j+200|0;g=j;h=a+20|0;b=c[h>>2]|0;a:do if((b|0)!=0?(xN(f,1,20,b)|0)==20:0){d=0;while(1){if(d>>>0>=10){i=13;break a}if(!(eL(f,c[19284+(d<<4)>>2]|0,c[19284+(d<<4)+4>>2]|0)|0))break;d=d+1|0}e=a+28|0;c[e>>2]=c[19284+(d<<4)+12>>2];b=c[19284+(d<<4)+8>>2]|0;a=a+24|0;c[a>>2]=b;switch(d|0){case 7:break;case 8:{if(eL(f+8|0,83754,4)|0)break a;c[e>>2]=83759;c[a>>2]=11;b=11;break a}default:break a}while(1){if(!(hL(g,200,c[h>>2]|0)|0)){i=11;break}if(!(eL(g,83749,4)|0)){i=8;break}}if((i|0)==8){c[e>>2]=86879;c[a>>2]=8;b=8;break}else if((i|0)==11){b=c[a>>2]|0;break}}else i=13;while(0);if((i|0)==13){c[a+28>>2]=83764;c[a+24>>2]=0;b=0}l=j;return b|0}function Ur(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,6,0)|0;if((js(c[e>>2]|0,2,b)|0)<<24>>24?(js(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function Vr(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,16,0)|0;if((bs(c[e>>2]|0,4,b)|0)<<24>>24?(bs(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function Wr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;b=h+12|0;d=h+8|0;e=h+4|0;f=h;c[a+48>>2]=0;g=a+20|0;pM(c[g>>2]|0,16,0)|0;if((((js(c[g>>2]|0,2,b)|0)<<24>>24?(js(c[g>>2]|0,2,d)|0)<<24>>24:0)?(js(c[g>>2]|0,2,e)|0)<<24>>24:0)?(js(c[g>>2]|0,2,f)|0)<<24>>24:0){c[a+40>>2]=c[b>>2]<<16|c[d>>2];c[a+44>>2]=c[e>>2]<<16|c[f>>2]}l=h;return}function Xr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;b=m+16|0;e=m+12|0;f=m+8|0;h=m+4|0;i=m;c[a+48>>2]=0;j=a+20|0;while(1){if(!((bs(c[j>>2]|0,1,b)|0)<<24>>24))break;d=c[b>>2]|0;if((d|0)==255)continue;if(XJ(83737,d)|0)continue;if((d|0)==192){k=6;break}g=c[j>>2]|0;if((d|0)==194){k=11;break}if(!((bs(g,2,e)|0)<<24>>24))break;pM(c[j>>2]|0,(c[e>>2]|0)+-2|0,1)|0}if((k|0)==6){if(((bs(c[j>>2]|0,3,i)|0)<<24>>24?(bs(c[j>>2]|0,2,f)|0)<<24>>24:0)?(bs(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}}else if((((k|0)==11?(bs(g,3,i)|0)<<24>>24:0)?(bs(c[j>>2]|0,2,f)|0)<<24>>24:0)?(bs(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}l=m;return}function Yr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1056|0;j=m;b=m+32|0;e=m+28|0;f=m+24|0;g=m+20|0;h=m+16|0;c[a+48>>2]=72;i=a+20|0;pM(c[i>>2]|0,0,0)|0;while(1){if(!(hL(b,1024,c[i>>2]|0)|0))break;d=iL(b,83722)|0;if(!d)continue;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=g;c[j+12>>2]=h;if((dM(d,89345,j)|0)==4){k=5;break}}if((k|0)==5){j=c[e>>2]|0;c[a+32>>2]=j;k=c[f>>2]|0;c[a+36>>2]=k;c[a+40>>2]=(c[g>>2]|0)-j;c[a+44>>2]=(c[h>>2]|0)-k}l=m;return}function Zr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;b=g+4|0;d=g;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,15,0)|0;h=(CN(c[e>>2]|0)|0)==88;f=c[e>>2]|0;if(h){pM(f,24,0)|0;if((js(c[e>>2]|0,4,b)|0)<<24>>24?(js(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}else{pM(f,26,0)|0;if((js(c[e>>2]|0,2,b)|0)<<24>>24?(js(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}l=g;return}function _r(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=l;l=l+352|0;C=F+80|0;B=F+72|0;E=F+64|0;D=F+56|0;A=F+48|0;d=F+40|0;s=F+32|0;t=F+24|0;u=F+16|0;v=F+8|0;w=F;x=F+328|0;y=F+128|0;z=F+96|0;if(!(c[42053]|0)){if(FM(168216,83607,1)|0){c[d>>2]=83607;$l(1,83634,d)|0}c[42053]=168216}m=b+20|0;pM(c[m>>2]|0,0,0)|0;n=z+12|0;o=z+20|0;p=z+8|0;q=z+16|0;r=z+4|0;d=0;g=0;f=0;e=0;a:while(1){if(!(hL(y,200,c[m>>2]|0)|0))break;if(g<<24>>24==0|d<<24>>24==0){i=y;k=e}else break;b:while(1){j=f;c:while(1){while(1){if(rN(168216,i,4,z,0)|0){f=j;e=k;continue a}a[i+(c[n>>2]|0)>>0]=0;a[i+(c[o>>2]|0)>>0]=0;e=i+(c[p>>2]|0)|0;f=i+(c[q>>2]|0)|0;i=i+((c[r>>2]|0)+1)|0;if(!(yJ(e,96043)|0))break;if(!(yJ(e,96049)|0))break c;if(yJ(e,83681)|0)continue;c[C>>2]=t;c[C+4>>2]=u;c[C+8>>2]=v;c[C+12>>2]=w;if((dM(f,83689,C)|0)==4)break b}c[A>>2]=s;c[A+4>>2]=x;if((dM(f,83671,A)|0)!=2){c[D>>2]=s;if((dM(f,86246,D)|0)==1){e=1;f=is(+h[s>>3],83678)|0}else{e=g;f=j}}else{e=1;f=is(+h[s>>3],x)|0}if(!(d<<24>>24)){d=0;g=e;j=f}else{g=e;e=k;continue a}}c[E>>2]=s;c[E+4>>2]=x;if((dM(f,83671,E)|0)!=2){c[B>>2]=s;if((dM(f,86246,B)|0)==1){d=1;e=is(+h[s>>3],83678)|0}else e=k}else{d=1;e=is(+h[s>>3],x)|0}if(!(g<<24>>24)){g=0;f=j;k=e}else{f=j;continue a}}d=1;g=1;f=~~(+h[v>>3]+1.0-+h[t>>3])>>>0;e=~~(+h[w>>3]+1.0-+h[u>>3])>>>0}c[b+48>>2]=0;c[b+40>>2]=f;c[b+44>>2]=e;l=F;return}function $r(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0;d=l;l=l+32|0;b=d;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,0,0)|0;if(!(cs(c[e>>2]|0,b)|0)){g=+h[b>>3];c[a+32>>2]=~~g;f=+h[b+8>>3];c[a+36>>2]=~~f;c[a+40>>2]=~~(+h[b+16>>3]-g);c[a+44>>2]=~~(+h[b+24>>3]-f)}l=d;return}function as(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;pM(c[e>>2]|0,6,0)|0;if((bs(c[e>>2]|0,1,b)|0)<<24>>24?(bs(c[e>>2]|0,1,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=CN(a)|0;if(LL(a)|0){e=0;break}c[d>>2]=c[d>>2]<<8|f;e=e+1|0}return e|0}function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;d=h;e=h+16|0;while(1){if(!(hL(e,1024,a)|0)){a=1;break}f=iL(e,83597)|0;if(f|0){g=4;break}}if((g|0)==4){c[d+4>>2]=e;c[d>>2]=f+9;c[d+8>>2]=a;a=ds(d,b)|0}l=h;return a|0}function ds(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+1024|0;f=g;es(b);e=a[c[b>>2]>>0]|0;if(!(e<<24>>24))e=(fs(b)|0)&255;else e=e<<24>>24;if((((e|0)==91?(c[b>>2]=(c[b>>2]|0)+1,gs(b,f),(hs(f,d)|0)==0):0)?(gs(b,f),(hs(f,d+8|0)|0)==0):0)?(gs(b,f),(hs(f,d+16|0)|0)==0):0){gs(b,f);e=(hs(f,d+24|0)|0)!=0&1}else e=1;l=g;return e|0}function es(b){b=b|0;var d=0;d=c[b>>2]|0;while(1){d=a[d>>0]|0;if(!(d<<24>>24))d=(fs(b)|0)&255;else d=d<<24>>24;if(!((d&255)<<24>>24))break;if(!(YJ(d&255)|0))break;d=(c[b>>2]|0)+1|0;c[b>>2]=d}return}function fs(b){b=b|0;var d=0;d=b+4|0;if(!(hL(c[d>>2]|0,1024,c[b+8>>2]|0)|0))b=0;else{d=c[d>>2]|0;c[b>>2]=d;b=a[d>>0]|0}return b|0}function gs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;es(b);e=0;f=c[b>>2]|0;while(1){f=a[f>>0]|0;if(!(f<<24>>24))g=(fs(b)|0)&255;else g=f<<24>>24;f=g<<24>>24;if(!f)break;if(!((f|0)==46|(f+-48|0)>>>0<10))break;a[d+e>>0]=g;e=e+1|0;f=(c[b>>2]|0)+1|0;c[b>>2]=f;if((e|0)==1023){e=1023;break}}a[d+e>>0]=0;return}function hs(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=l;l=l+16|0;f=e;d=+uM(a,f);if((c[f>>2]|0)==(a|0))a=1;else{h[b>>3]=d;a=0}l=e;return a|0}function is(a,b){a=+a;b=b|0;var c=0.0;do if(!(yJ(b,83705)|0)){a=a*72.0;c=a;a=a>=0.0?.5:-.5}else{if(!(yJ(b,83708)|0)){a=a*.75;c=a;a=a>=0.0?.5:-.5;break}if(!(yJ(b,83711)|0)){a=a*12.0;c=a;a=a>=0.0?.5:-.5;break}if(yJ(b,83678)|0?yJ(b,83714)|0:0)if(!(yJ(b,83716)|0)){a=a*28.346456664;c=a;a=a>=0.0?.5:-.5;break}else{b=(yJ(b,83719)|0)==0;c=a*2.8346456663999997;return (b?~~(c+(c>=0.0?.5:-.5)):0)|0}c=a>=0.0?.5:-.5}while(0);return ~~(a+c)|0}function js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=CN(a)|0;if(LL(a)|0){e=0;break}c[d>>2]=c[d>>2]|f<<(e<<3);e=e+1|0}return e|0}function ks(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[b+20>>2]|0;if(a|0)ML(a)|0;if(c[b+52>>2]|0?(e=c[b+60>>2]|0,e|0):0)gb[e&127](b);$I(b);return}function ls(){var a=0;zm(0,1,86240,90527)|0;a=yr(0,1)|0;tE(a,0);return a|0}function ms(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0;k=l;l=l+304|0;j=k+24|0;i=k+8|0;f=k;g=k+40|0;if((gr(b,e)|0)!=999)if((hr(b,d)|0)==-1)b=-1;else{b=c[d+16>>2]|0;e=b+16|0;if(!(a[(c[b+8>>2]|0)+81>>0]|0)){p=+h[e>>3];o=+h[b+24>>3];n=+h[b+32>>3];m=+h[b+40>>3];c[j>>2]=~~(p+(p>=0.0?.5:-.5));c[j+4>>2]=~~(o+(o>=0.0?.5:-.5));c[j+8>>2]=~~(n+(n>=0.0?.5:-.5));c[j+12>>2]=~~(m+(m>=0.0?.5:-.5));qL(g,83918,j)|0}else{m=+h[b+24>>3];n=+h[e>>3];o=+h[b+40>>3];p=+h[b+32>>3];c[i>>2]=~~(m+(m>=0.0?.5:-.5));c[i+4>>2]=~~(n+(n>=0.0?.5:-.5));c[i+8>>2]=~~(o+(o>=0.0?.5:-.5));c[i+12>>2]=~~(p+(p>=0.0?.5:-.5));qL(g,83918,i)|0}Mm(d,87705,g,174185)|0;b=0}else{b=Lr(b,1,e)|0;c[f>>2]=e;c[f+4>>2]=b;$l(1,83869,f)|0;b=-1}l=k;return b|0}function ns(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;Cr(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=cD(b,c[b+52>>2]|0)|0;if((Oo(f,122277,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){cm(83930,g);b=-1}else h=5;if((h|0)==5){c[b+36>>2]=e;if(!e){h=b+152|0;c[h>>2]=c[h>>2]|134217728}h=Hv(a,f)|0;eD(b);Hr(a);b=h}l=i;return b|0}function os(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;Cr(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=cD(b,c[b+52>>2]|0)|0;if((Oo(f,122277,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){cm(83930,g);b=-1}else h=5;if((h|0)==5){Br(a,e);h=Hv(a,f)|0;eD(b);rr(b);Hr(a);b=h}l=i;return b|0}function ps(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m+8|0;g=m;b=c[b+60>>2]|0;Cr(a,d)|0;j=c[a+164>>2]|0;c[j+56>>2]=cD(j,c[j+52>>2]|0)|0;if((Oo(b,122277,0,1)|0)!=0?(c[(c[b+16>>2]|0)+8>>2]|0)!=0:0)k=5;else if(!(c[j+152>>2]&67108864)){cm(83930,g);b=-1}else k=5;do if((k|0)==5){if(e|0?(i=_I(4096)|0,c[e>>2]=i,i|0):0){g=j+40|0;c[g>>2]=i;c[j+44>>2]=4096;d=j+48|0;c[d>>2]=0;b=Hv(a,b)|0;eD(j);if(!b){c[e>>2]=c[g>>2];c[f>>2]=c[d>>2]}Hr(a);break}$l(1,83951,h)|0;b=-1}while(0);l=m;return b|0}function qs(a,b){a=a|0;b=b|0;rE(a,0,b);return}function rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((a|0)!=0?(zs(a)|0)!=0:0))a=84007;e=sJ(a)|0;if((e|0)>=104){d=xw(e+25|0)|0;if(!d)d=0;else f=6}else f=6;if((f|0)==6){yK(d,a)|0;c[b>>2]=e}return d|0}function ss(a,b){a=a|0;b=b|0;jo(b,a,1)|0;return}function ts(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[b>>2]=d;c[b+4>>2]=d+4096;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;c[a+12>>2]=e;c[a+16>>2]=f;return}function us(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;xs(e,b);i=e+12|0;j=e+16|0;b=0;a:while(1){k=ys(e)|0;if(!k)break;b=b+1|0;f=c[i>>2]|0;if(f|0)hb[f&31](k,d);h=Vm(a,k)|0;while(1){if(!h)continue a;g=c[h>>2]&3;f=c[((g|0)==3?h:h+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?h:h+-48|0)+40>>2]|0;if(!(ab[c[j>>2]&63](f,-1)|0))xs(e,f);h=Wm(a,h,k)|0}}return b|0}function vs(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;ws(a);a=b}return}function ws(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function xs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;f=k;g=a+8|0;i=a+4|0;d=c[i>>2]|0;if((c[g>>2]|0)==(c[d+4>>2]|0)){d=c[d+12>>2]|0;do if(!d){e=xw(16)|0;if(!e){$l(1,83988,f)|0;Ua(168248,1)}c[e+8>>2]=c[i>>2];c[e+12>>2]=0;d=xw(4e6)|0;c[e>>2]=d;if(!d){$l(1,83988,j)|0;Ua(168248,1)}else{c[e+4>>2]=d+4e6;c[(c[i>>2]|0)+12>>2]=e;h=e;break}}else h=d;while(0);c[i>>2]=h;c[g>>2]=c[h>>2]}ab[c[a+16>>2]&63](b,1)|0;j=c[g>>2]|0;c[g>>2]=j+4;c[j>>2]=b;l=k;return}function ys(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function zs(b){b=b|0;var c=0;a:while(1){c=b;b=b+1|0;c=a[c>>0]|0;switch(c<<24>>24){case 95:continue a;case 0:{b=1;break a}default:{}}if(!(hK(c&255)|0)){b=0;break}}return b|0}function As(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=0;f=eo(a)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;if(jo(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,0)|0){fn(a,e,1)|0;d=d+1|0}e=Sm(b,e)|0}f=fo(a,f)|0}return d|0}function Bs(a){a=a|0;a=Mo(a,84012,0)|0;if(!a)ma(84017,84020,529,84029);else return c[a+8>>2]|0;return 0}function Cs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=l;l=l+4320|0;s=u+24|0;r=u+8|0;q=u;t=u+4184|0;p=u+4160|0;f=u+40|0;if(nn(b)|0){To(b,0,84038,-12,0);To(b,1,84050,16,0);o=rs(e,f,t)|0;k=Ds(b)|0;m=xw((nn(k)|0)<<2)|0;ts(p,u+4144|0,u+48|0,23,22);h=eo(k)|0;n=p+16|0;i=o+(c[f>>2]|0)|0;j=c[13918]|0;e=0;while(1){if(!h)break;if(!(ab[c[n>>2]&63](h,-1)|0)){c[q>>2]=e;qL(i,84952,q)|0;v=Jp(k,o,1)|0;w=Jp(b,o,1)|0;Oo(w,84038,12,0)|0;a[(Mo(w,84038,0)|0)+8>>0]=1;f=us(k,h,v,p)|0;Fs(v,w);g=Gs(w)|0;Hs(b,w);c[m+(e<<2)>>2]=w;ro(k,v)|0;if(0){c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=g;AL(j,84062,r)|0}e=e+1|0}h=fo(k,h)|0}if(0){r=nn(b)|0;v=on(b)|0;w=En(b)|0;c[s>>2]=r;c[s+4>>2]=v;c[s+8>>2]=e;c[s+12>>2]=w;AL(j,84092,s)|0}mn(k)|0;Uo(b,0,84038);Uo(b,1,84050);vs(p);f=zw(m,e<<2)|0;if((o|0)!=(t|0))$I(o)}else{f=0;e=0}c[d>>2]=e;l=u;return f|0}function Ds(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a[h>>0]=a[17652]|0;a[h+1>>0]=a[17653]|0;a[h+2>>0]=a[17654]|0;a[h+3>>0]=a[17655]|0;h=hn(84139,h,0)|0;Ks(h,b);d=eo(b)|0;while(1){if(!d)break;if(!(c[(Mo(d,84050,0)|0)+12>>2]|0)){g=oo(h,En(d)|0,1)|0;Oo(g,84050,16,1)|0;c[(c[g+16>>2]|0)+12>>2]=d;c[(Mo(d,84050,0)|0)+12>>2]=g}d=fo(b,d)|0}e=eo(b)|0;while(1){if(!e)break;f=c[(Mo(e,84050,0)|0)+12>>2]|0;d=Qm(b,e)|0;while(1){if(!d)break;g=c[(Mo(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,84050,0)|0)+12>>2]|0;do if((g|0)!=(f|0))if(g>>>0>f>>>0){bn(h,f,g,0,1)|0;break}else{bn(h,g,f,0,1)|0;break}while(0);d=Sm(b,d)|0}e=fo(b,e)|0}l=i;return h|0}function Es(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+8|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=eo(a)|0;while(1){if(!e)break;f=c[(c[e+16>>2]|0)+12>>2]|0;a:do if((c[f>>2]&3|0)==1)jo(b,f,1)|0;else{d=eo(f)|0;while(1){if(!d)break a;jo(b,d,1)|0;d=fo(f,d)|0}}while(0);e=fo(a,e)|0}return}function Gs(a){a=a|0;return As(a,c[a+60>>2]|0)|0}function Hs(a,b){a=a|0;b=b|0;Is(a,b,0);return}function Is(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=(d|0)==0;b=Kp(b)|0;while(1){if(!b)break;if((a[(Mo(b,84038,0)|0)+8>>0]|0)==0?(f=Js(b,c,d)|0,f|0):0){if(g)e=(WJ(En(b)|0,93039,7)|0)==0;else e=1;Is(b,f,e&1)}b=Lp(b)|0}return}function Js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=0;g=eo(a)|0;while(1){if(!g)break;f=oo(b,En(g)|0,0)|0;if(f){if(!e)e=Jp(b,En(a)|0,1)|0;jo(e,f,1)|0}g=fo(a,g)|0}if((d|0)!=0&(e|0)==0)e=Jp(b,En(a)|0,1)|0;if(e|0?(As(e,a)|0,Nm(a,e)|0,(WJ(En(e)|0,93039,7)|0)==0):0)c[(Oo(e,84012,12,0)|0)+8>>2]=a;return e|0}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;d=Kp(b)|0;e=c[13918]|0;while(1){if(!d)break;a:do if(!(WJ(En(d)|0,93039,7)|0)){f=oo(a,En(d)|0,1)|0;Oo(f,84050,16,1)|0;c[(c[f+16>>2]|0)+12>>2]=d;b=eo(d)|0;while(1){if(!b)break a;if(c[(Mo(b,84050,0)|0)+12>>2]|0){k=En(b)|0;j=En(d)|0;i=En(c[(Mo(b,84050,0)|0)+12>>2]|0)|0;c[g>>2]=k;c[g+4>>2]=j;c[g+8>>2]=i;AL(e,84142,g)|0}c[(Mo(b,84050,0)|0)+12>>2]=f;b=fo(d,b)|0}}else Ks(a,d);while(0);d=Lp(d)|0}l=h;return}function Ls(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0;n=+h[a>>3];j=~~(n+(n>=0.0?.5:-.5));n=+h[a+8>>3];a=~~(n+(n>=0.0?.5:-.5));n=+h[b>>3];g=~~(n+(n>=0.0?.5:-.5));n=+h[b+8>>3];f=~~(n+(n>=0.0?.5:-.5));l=g-j|0;i=((l|0)>-1?l:0-l|0)<<1;l=l>>31|1;m=f-a|0;k=((m|0)>-1?m:0-m|0)<<1;m=m>>31|1;a:do if((i|0)>(k|0)){e=0-i|0;d=k-(i>>1)|0;b=j;while(1){Dx(c,b,a);if((b|0)==(g|0))break a;j=(d|0)>-1;d=d+k+(j?e:0)|0;b=b+l|0;a=(j?m:0)+a|0}}else{e=0-k|0;d=j;b=i-(k>>1)|0;while(1){Dx(c,d,a);if((a|0)==(f|0))break a;k=(b|0)>-1;d=(k?l:0)+d|0;b=b+i+(k?e:0)|0;a=a+m|0}}while(0);return}function Ms(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;j=n+4|0;do if((a|0)<1)d=0;else{f=e+16|0;if((c[f>>2]|0)>>>0<4){d=Ns(a,b,d,e)|0;break}m=xw(a<<5)|0;d=0;while(1){if((d|0)==(a|0))break;g=c[b+(d<<2)>>2]|0;eB(g);h=m+(d<<5)|0;g=(c[g+16>>2]|0)+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];c[h+24>>2]=c[g+24>>2];c[h+28>>2]=c[g+28>>2];d=d+1|0}if((c[f>>2]|0)==4){h=e+28|0;a:do if(c[h>>2]&2|0){f=e+24|0;c[f>>2]=ww(a<<2)|0;d=0;while(1){if((d|0)==(a|0))break a;g=Jm(c[b+(d<<2)>>2]|0,84209)|0;if(g|0?(c[k>>2]=j,g=(dM(g,122187,k)|0)>0,i=c[j>>2]|0,g&(i|0)>-1):0)c[(c[f>>2]|0)+(d<<2)>>2]=i;d=d+1|0}}while(0);d=Os(a,m,e)|0;if(c[h>>2]&2)$I(c[e+24>>2]|0)}else d=0;$I(m)}while(0);l=n;return d|0}function Ns(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0;G=l;l=l+144|0;B=G+136|0;A=G+64|0;F=G+48|0;v=G+40|0;u=G;t=G+120|0;x=G+104|0;C=G+96|0;D=c[f+20>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;a:do if((b|0)>=1){o=(D|0)==0;E=c[13918]|0;p=t+4|0;q=t+8|0;r=t+12|0;y=x+4|0;w=x+8|0;z=x+12|0;n=0;g=0;while(1){if((n|0)==(b|0))break;s=c[d+(n<<2)>>2]|0;eB(s);if(!o?(a[D+n>>0]|0)!=0:0){m=c[s+16>>2]|0;H=+h[m+16>>3];i=~~(H+(H>=0.0?.5:-.5));c[t>>2]=i;H=+h[m+24>>3];j=~~(H+(H>=0.0?.5:-.5));c[p>>2]=j;H=+h[m+32>>3];k=~~(H+(H>=0.0?.5:-.5));c[q>>2]=k;H=+h[m+40>>3];m=~~(H+(H>=0.0?.5:-.5));c[r>>2]=m;if(!g){c[x>>2]=c[t>>2];c[x+4>>2]=c[t+4>>2];c[x+8>>2]=c[t+8>>2];c[x+12>>2]=c[t+12>>2]}else{c[x>>2]=c[((c[x>>2]|0)>(i|0)?t:x)>>2];c[y>>2]=c[((c[y>>2]|0)>(j|0)?t:x)+4>>2];c[w>>2]=c[((c[w>>2]|0)<(k|0)?t:x)+8>>2];c[z>>2]=c[((c[z>>2]|0)<(m|0)?t:x)+12>>2]}g=g+1|0}if(0>2){m=En(s)|0;s=c[s+16>>2]|0;K=+h[s+16>>3];J=+h[s+24>>3];I=+h[s+32>>3];H=+h[s+40>>3];c[u>>2]=m;h[u+8>>3]=K;h[u+16>>3]=J;h[u+24>>3]=I;h[u+32>>3]=H;AL(E,84276,u)|0}n=n+1|0}q=xw(b<<5)|0;g=0;while(1){if((g|0)==(b|0))break;u=q+(g<<5)|0;t=(c[(c[d+(g<<2)>>2]|0)+16>>2]|0)+16|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];g=g+1|0}o=f+8|0;p=Rs(b,q,c[o>>2]|0)|0;if(0){c[v>>2]=p;AL(E,84304,v)|0}if((p|0)>=1){n=(D|0)!=0;if(n){i=((c[w>>2]|0)+(c[x>>2]|0)|0)/2|0;g=((c[z>>2]|0)+(c[y>>2]|0)|0)/2|0}else{i=0;g=0}c[C+4>>2]=g;c[C>>2]=i;m=ww(b<<4)|0;k=f+16|0;g=0;while(1){if((g|0)>=(b|0))break;i=c[d+(g<<2)>>2]|0;j=m+(g<<4)|0;c[m+(g<<4)+12>>2]=g;if((c[k>>2]|0)==3){x=(c[i+16>>2]|0)+16|0;y=c[o>>2]|0;z=En(i)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];c[A+16>>2]=c[x+16>>2];c[A+20>>2]=c[x+20>>2];c[A+24>>2]=c[x+24>>2];c[A+28>>2]=c[x+28>>2];c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];Ss(A,j,p,y,B,z)}else{c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];Ts(e,i,j,p,f,B)}g=g+1|0}j=ww(b<<2)|0;g=0;while(1){if((g|0)>=(b|0))break;c[j+(g<<2)>>2]=m+(g<<4);g=g+1|0}sL(j,b,4,23);k=xx()|0;g=ww(b<<3)|0;b:do if(n){i=0;while(1){if((i|0)>=(b|0)){i=0;break}if(a[D+i>>0]|0){e=c[j+(i<<2)>>2]|0;f=g+(c[e+12>>2]<<3)|0;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];Vs(e,k,f,B)}i=i+1|0}while(1){if((i|0)>=(b|0))break b;if(!(a[D+i>>0]|0)){C=c[j+(i<<2)>>2]|0;Ws(i,C,k,g+(c[C+12>>2]<<3)|0,p,c[o>>2]|0,q)}i=i+1|0}}else{i=0;while(1){if((i|0)>=(b|0))break b;D=c[j+(i<<2)>>2]|0;Ws(i,D,k,g+(c[D+12>>2]<<3)|0,p,c[o>>2]|0,q);i=i+1|0}}while(0);$I(j);i=0;while(1){if((i|0)>=(b|0))break;$I(c[m+(i<<4)+4>>2]|0);i=i+1|0}$I(m);Ax(k);$I(q);if(0>1){i=0;while(1){if((i|0)>=(b|0))break a;C=c[g+(i<<3)>>2]|0;D=c[g+(i<<3)+4>>2]|0;c[F>>2]=i;c[F+4>>2]=C;c[F+8>>2]=D;AL(E,84320,F)|0;i=i+1|0}}}else g=0}else g=0;while(0);l=G;return g|0}function Os(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+16|0;g=z;x=ww(a<<3)|0;f=c[d+4>>2]|0;y=d+28|0;e=(f|0)>0;do if(!(c[y>>2]&1))if(e){k=1;w=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=1;w=(a+-1+f|0)/(f|0)|0;break}else if(e){k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}while(0);if(0){v=c[13918]|0;c[g>>2]=k|0?84215:84225;c[g+4>>2]=w;c[g+8>>2]=f;AL(v,84238,g)|0}t=ww((f<<3)+8|0)|0;u=ww((w<<3)+8|0)|0;v=ww(a*24|0)|0;j=d+8|0;e=0;g=v;while(1){if((e|0)>=(a|0))break;p=+h[b+(e<<5)+8>>3];o=+h[b+(e<<5)+24>>3];q=+((c[j>>2]|0)>>>0);h[g>>3]=+h[b+(e<<5)+16>>3]-+h[b+(e<<5)>>3]+q;h[g+8>>3]=o-p+q;c[g+16>>2]=e;e=e+1|0;g=g+24|0}s=ww(a<<2)|0;e=0;while(1){if((e|0)>=(a|0))break;c[s+(e<<2)>>2]=v+(e*24|0);e=e+1|0}e=c[d+24>>2]|0;if(!e){if(!(c[y>>2]&64))sL(s,a,4,25)}else{c[42101]=e;sL(s,a,4,24)}r=(k|0)==0;e=0;g=0;j=0;while(1){if((j|0)>=(a|0)){i=0.0;e=0;break}k=c[s+(j<<2)>>2]|0;d=t+(g<<3)|0;q=+h[d>>3];p=+h[k>>3];h[d>>3]=q>p?q:p;d=u+(e<<3)|0;p=+h[d>>3];q=+h[k+8>>3];h[d>>3]=p>q?p:q;if(r){e=e+1|0;d=(e|0)==(w|0);e=d?0:e;g=g+(d&1)|0}else{g=g+1|0;d=(g|0)==(f|0);e=e+(d&1)|0;g=d?0:g}j=j+1|0}while(1){if((e|0)>(f|0)){i=0.0;e=w;break}d=t+(e<<3)|0;q=+h[d>>3];h[d>>3]=i;i=q+i;e=e+1|0}while(1){if((e|0)<=0)break;d=e+-1|0;q=+h[u+(d<<3)>>3];h[u+(e<<3)>>3]=i;i=q+i;e=d}h[u>>3]=i;e=0;g=0;d=0;while(1){if((d|0)>=(a|0))break;k=c[(c[s+(d<<2)>>2]|0)+16>>2]|0;i=+h[b+(k<<5)>>3];m=-i;p=+h[b+(k<<5)+8>>3];q=-p;n=+h[b+(k<<5)+16>>3];o=+h[b+(k<<5)+24>>3];j=c[y>>2]|0;do if(!(j&4))if(!(j&8)){i=(m-n+ +h[t+(g<<3)>>3]+ +h[t+(g+1<<3)>>3])*.5;break}else{i=i-n+ +h[t+(g+1<<3)>>3];break}else i=+h[t+(g<<3)>>3];while(0);c[x+(k<<3)>>2]=~~i;do if(!(j&16))if(!(j&32)){i=(q-o+ +h[u+(e<<3)>>3]+ +h[u+(e+1<<3)>>3])*.5;break}else{i=+h[u+(e+1<<3)>>3];break}else i=p-o+ +h[u+(e<<3)>>3];while(0);c[x+(k<<3)+4>>2]=~~i;if(r){e=e+1|0;k=(e|0)==(w|0);e=k?0:e;g=g+(k&1)|0}else{g=g+1|0;k=(g|0)==(f|0);e=e+(k&1)|0;g=k?0:g}d=d+1|0}$I(v);$I(s);$I(t);$I(u);l=z;return x|0}function Ps(a,b){a=a|0;b=b|0;var d=0;d=c[42101]|0;a=c[d+(c[(c[a>>2]|0)+16>>2]<<2)>>2]|0;b=c[d+(c[(c[b>>2]|0)+16>>2]<<2)>>2]|0;return ((a|0)>(b|0)?1:((a|0)<(b|0))<<31>>31)|0}function Qs(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;e=+h[a>>3]+ +h[a+8>>3];d=+h[b>>3]+ +h[b+8>>3];return (e<d?1:(e>d)<<31>>31)|0}function Rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0;s=l;l=l+96|0;q=s+80|0;r=s+48|0;p=s+8|0;m=s;k=(a*100|0)+-1|0;e=+(d<<1|0);n=0.0;o=0.0;d=0;while(1){if((d|0)>=(a|0))break;j=+h[b+(d<<5)+16>>3]-+h[b+(d<<5)>>3]+e;i=+h[b+(d<<5)+24>>3]-+h[b+(d<<5)+8>>3]+e;n=n-j-i;o=o-i*j;d=d+1|0}i=+(k|0);j=n*n-i*4.0*o;if(!(j<0.0)){e=+C(+j);g=i*2.0;f=(e-n)/g;g=(-n-e)/g;d=~~f;d=(d|0)==0?1:d;if(0>2){m=c[13918]|0;YL(84463,27,1,m)|0;h[p>>3]=i;h[p+8>>3]=n;h[p+16>>3]=o;h[p+24>>3]=j;h[p+32>>3]=e;AL(m,84491,p)|0;c[r>>2]=d;h[r+8>>3]=f;c[r+16>>2]=~~g;h[r+24>>3]=g;AL(m,84517,r)|0;h[q>>3]=(f*i+n)*f+o;h[q+8>>3]=(g*i+n)*g+o;AL(m,84539,q)|0}}else{h[m>>3]=j;$l(1,84436,m)|0;d=-1}l=s;return d|0}function Ss(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0.0;u=l;l=l+32|0;t=u+16|0;s=u;p=+h[a>>3];q=+h[a+8>>3];n=+h[a+16>>3];o=+h[a+24>>3];r=xx()|0;j=c[f>>2]|0;a=j-e|0;k=c[f+4>>2]|0;i=k-e|0;j=e-~~(p+(p>=0.0?.5:-.5))+j+~~(n+(n>=0.0?.5:-.5))|0;k=e-~~(q+(q>=0.0?.5:-.5))+k+~~(o+(o>=0.0?.5:-.5))|0;if((a|0)>-1)f=(a|0)/(d|0)|0;else f=((a+1|0)/(d|0)|0)+-1|0;if((i|0)>-1)m=(i|0)/(d|0)|0;else m=((i+1|0)/(d|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(d|0)|0;else j=((j+1|0)/(d|0)|0)+-1|0;if((k|0)>-1)i=(k|0)/(d|0)|0;else i=((k+1|0)/(d|0)|0)+-1|0;while(1){if((f|0)>(j|0))break;else a=m;while(1){if((a|0)>(i|0))break;Dx(r,f,a);a=a+1|0}f=f+1|0}k=b+4|0;c[k>>2]=Hx(r)|0;j=Gx(r)|0;m=b+8|0;c[m>>2]=j;w=+(e<<1|0);v=+(d|0);i=~~+N(+((n+w-p)/v));a=~~+N(+((o+w-q)/v));c[b>>2]=a+i;a:do if(0>2){f=c[13918]|0;c[s>>2]=g;c[s+4>>2]=j;c[s+8>>2]=i;c[s+12>>2]=a;AL(f,84395,s)|0;a=0;while(1){if((a|0)>=(c[m>>2]|0))break a;g=c[k>>2]|0;s=c[g+(a<<3)+4>>2]|0;c[t>>2]=c[g+(a<<3)>>2];c[t+4>>2]=s;AL(f,84422,t)|0;a=a+1|0}}while(0);Ax(r);l=u;return}function Ts(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0.0;P=l;l=l+128|0;F=P+112|0;E=P+104|0;O=P+16|0;M=P;H=P+64|0;I=P+56|0;z=P+40|0;A=P+96|0;y=P+88|0;v=P+24|0;w=P+80|0;x=P+72|0;K=c[f+8>>2]|0;G=c[f+12>>2]|0;C=(a|0)==0?b:a;L=xx()|0;J=b+16|0;B=c[J>>2]|0;t=+h[B+16>>3];D=(c[g>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;t=+h[B+24>>3];B=(c[g+4>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;a:do if((c[f+16>>2]|0)==1){v=xw((nn(b)|0)<<2)|0;a=0;g=eo(b)|0;while(1){if(!g)break;x=g+16|0;c[v+(a<<2)>>2]=c[(c[x>>2]|0)+112>>2];c[(c[x>>2]|0)+112>>2]=0;a=a+1|0;g=fo(b,g)|0}o=D-K|0;p=B-K|0;q=D+K|0;r=B+K|0;n=1;while(1){a=c[J>>2]|0;if((n|0)>(c[a+180>>2]|0))break;m=c[(c[a+184>>2]|0)+(n<<2)>>2]|0;i=c[m+16>>2]|0;t=+h[i+16>>3];a=~~(t+(t>=0.0?.5:-.5));t=+h[i+24>>3];g=~~(t+(t>=0.0?.5:-.5));t=+h[i+32>>3];f=~~(t+(t>=0.0?.5:-.5));t=+h[i+40>>3];i=~~(t+(t>=0.0?.5:-.5));b:do if((f|0)>(a|0)&(i|0)>(g|0)){a=o+a|0;j=p+g|0;f=q+f|0;k=r+i|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(e|0)|0;else j=((j+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)i=(f|0)/(e|0)|0;else i=((f+1|0)/(e|0)|0)+-1|0;if((k|0)>-1)f=(k|0)/(e|0)|0;else f=((k+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=j;while(1){if((a|0)>(f|0))break;Dx(L,g,a);a=a+1|0}g=g+1|0}a=eo(m)|0;while(1){if(!a)break b;c[(c[a+16>>2]|0)+212>>2]=m;a=fo(m,a)|0}}while(0);n=n+1|0}r=z+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=A+4|0;p=y+4|0;o=eo(b)|0;while(1){if(!o)break;PA(z,o);R=+h[z>>3];Q=+h[r>>3];m=D+~~(R+(R>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(Q+(Q>=0.0?.5:-.5))|0;c[s>>2]=n;g=o+16|0;a=c[g>>2]|0;c:do if(!(c[a+212>>2]|0)){c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Ys(A,E,F);a=c[A>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Zs(y,E,F);i=c[y>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;Dx(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Qm(C,o)|0;while(1){if(!a)break c;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];_s(a,F,L,D,B,e,G);a=Sm(C,a)|0}}else{if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Qm(C,o)|0;while(1){if(!a)break c;if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)){c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];_s(a,F,L,D,B,e,G)}a=Sm(C,a)|0}}while(0);o=fo(b,o)|0}a=0;g=eo(b)|0;while(1){if(!g)break;c[(c[g+16>>2]|0)+112>>2]=c[v+(a<<2)>>2];a=a+1|0;g=fo(b,g)|0}$I(v)}else{r=v+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=w+4|0;p=x+4|0;o=eo(b)|0;while(1){if(!o)break a;PA(v,o);Q=+h[v>>3];R=+h[r>>3];m=D+~~(Q+(Q>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(R+(R>=0.0?.5:-.5))|0;c[s>>2]=n;a=c[o+16>>2]|0;c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Ys(w,E,F);a=c[w>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];Zs(x,E,F);i=c[x>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;Dx(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Qm(C,o)|0;while(1){if(!a)break;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];_s(a,F,L,D,B,e,G);a=Sm(C,a)|0}o=fo(b,o)|0}}while(0);i=d+4|0;c[i>>2]=Hx(L)|0;j=d+8|0;c[j>>2]=Gx(L)|0;g=c[J>>2]|0;Q=+(K<<1|0);R=+(e|0);a=~~+N(+((+h[g+32>>3]+Q-+h[g+16>>3])/R));g=~~+N(+((+h[g+40>>3]+Q-+h[g+24>>3])/R));c[d>>2]=g+a;d:do if(0>2){f=c[13918]|0;d=En(b)|0;b=c[j>>2]|0;c[M>>2]=d;c[M+4>>2]=b;c[M+8>>2]=a;c[M+12>>2]=g;AL(f,84395,M)|0;a=0;while(1){if((a|0)>=(c[j>>2]|0))break d;b=c[i>>2]|0;M=c[b+(a<<3)+4>>2]|0;c[O>>2]=c[b+(a<<3)>>2];c[O+4>>2]=M;AL(f,84422,O)|0;a=a+1|0}}while(0);Ax(L);l=P;return}function Us(a,b){a=a|0;b=b|0;return (c[c[b>>2]>>2]|0)-(c[c[a>>2]>>2]|0)|0}function Vs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;h=j+16|0;i=j;k=c[a+4>>2]|0;g=c[a+8>>2]|0;c[d>>2]=0-(c[e>>2]|0);f=d+4|0;c[f>>2]=0-(c[e+4>>2]|0);a=0;e=k;while(1){if((a|0)>=(g|0))break;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];Bx(b,h);a=a+1|0;e=e+8|0}if(0>1){k=c[13918]|0;b=c[d>>2]|0;d=c[f>>2]|0;c[i>>2]=g;c[i+4>>2]=b;c[i+8>>2]=d;AL(k,84369,i)|0}l=j;return}function Ws(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;k=c[b+12>>2]|0;l=+h[i+(k<<5)>>3];m=+h[i+(k<<5)+8>>3];n=+h[i+(k<<5)+16>>3];o=+h[i+(k<<5)+24>>3];if(!((a|0)==0?(q=+(g<<1|0),p=+(f|0),(Xs((~~+N(+((q-l+n)/p))|0)/-2|0,(~~+N(+((q-m+o)/p))|0)/-2|0,b,d,e,f,i)|0)!=0):0))j=3;a:do if((j|0)==3?(Xs(0,0,b,d,e,f,i)|0)==0:0)if((~~+N(+(n-l))|0)<(~~+N(+(o-m))|0)){k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)<=(j|0)){g=j;break}if(Xs(j,a,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)>=(k|0))break;if(Xs(g,a,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)>=(k|0))break;if(Xs(g,a,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)<=(j|0))break;if(Xs(g,a,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)<=0)break;if(!(Xs(g,a,b,d,e,f,i)|0))a=a+-1|0;else break a}k=k+1|0}}else{k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)>=(k|0)){g=j;break}if(Xs(a,j,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)>=(k|0))break;if(Xs(a,g,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)<=(j|0))break;if(Xs(a,g,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)<=(j|0))break;if(Xs(a,g,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)>=0)break;if(!(Xs(a,g,b,d,e,f,i)|0))a=a+1|0;else break a}k=k+1|0}}while(0);return}function Xs(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0;t=l;l=l+48|0;r=t+32|0;s=t+8|0;q=t;m=d+4|0;o=c[d+8>>2]|0;p=q+4|0;j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0)){n=5;break}v=j;u=c[v+4>>2]|0;c[q>>2]=(c[v>>2]|0)+a;c[p>>2]=u+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];if(Ex(e,r)|0){j=0;break}j=j+8|0;k=k+1|0}if((n|0)==5){d=c[d+12>>2]|0;x=+h[i+(d<<5)>>3];w=+h[i+(d<<5)+8>>3];c[f>>2]=(O(g,a)|0)-~~(x+(x>=0.0?.5:-.5));d=f+4|0;c[d>>2]=(O(g,b)|0)-~~(w+(w>=0.0?.5:-.5));j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0))break;u=j;v=c[u+4>>2]|0;c[q>>2]=(c[u>>2]|0)+a;c[p>>2]=v+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];Bx(e,r);j=j+8|0;k=k+1|0}if(0>1){j=c[13918]|0;u=c[f>>2]|0;v=c[d>>2]|0;c[s>>2]=o;c[s+4>>2]=a;c[s+8>>2]=b;c[s+12>>2]=u;c[s+16>>2]=v;AL(j,84335,s)|0;j=1}else j=1}l=t;return j|0}function Ys(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;c[a>>2]=(c[b>>2]|0)-(c[d>>2]|0);c[a+4>>2]=e;return}function Zs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function _s(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;x=A+96|0;w=A+80|0;r=A+48|0;s=A+32|0;y=A+16|0;z=A;n=A+64|0;h[y>>3]=+(c[b>>2]|0);t=y+8|0;h[t>>3]=+(c[b+4>>2]|0);a:do if((i|0)!=0?(u=a+16|0,m=c[(c[u>>2]|0)+8>>2]|0,(m|0)!=0):0){q=+(e|0);p=+(f|0);o=1.0/+(g|0);n=z+8|0;i=0;while(1){if((i|0)>=(c[m+4>>2]|0))break a;f=c[m>>2]|0;a=c[f+(i*48|0)>>2]|0;b=c[f+(i*48|0)+4>>2]|0;g=c[f+(i*48|0)+8>>2]|0;e=c[f+(i*48|0)+12>>2]|0;m=f+(i*48|0)+16|0;c[r>>2]=c[m>>2];c[r+4>>2]=c[m+4>>2];c[r+8>>2]=c[m+8>>2];c[r+12>>2]=c[m+12>>2];f=f+(i*48|0)+32|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];if(!g){c[y>>2]=c[a>>2];c[y+4>>2]=c[a+4>>2];c[y+8>>2]=c[a+8>>2];c[y+12>>2]=c[a+12>>2];m=a+16|0;c[z>>2]=c[m>>2];c[z+4>>2]=c[m+4>>2];c[z+8>>2]=c[m+8>>2];c[z+12>>2]=c[m+12>>2];m=2}else{c[y>>2]=c[r>>2];c[y+4>>2]=c[r+4>>2];c[y+8>>2]=c[r+8>>2];c[y+12>>2]=c[r+12>>2];c[z>>2]=c[a>>2];c[z+4>>2]=c[a+4>>2];c[z+8>>2]=c[a+8>>2];c[z+12>>2]=c[a+12>>2];m=1}j=+h[y>>3]+q;h[y>>3]=j;k=+h[t>>3]+p;h[t>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[y>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[t>>3]=j;j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d);while(1){if((m|0)>=(b|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];g=a+(m<<4)|0;c[z>>2]=c[g>>2];c[z+4>>2]=c[g+4>>2];c[z+8>>2]=c[g+8>>2];c[z+12>>2]=c[g+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d);m=m+1|0}if(e|0){c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[z>>2]=c[s>>2];c[z+4>>2]=c[s+4>>2];c[z+8>>2]=c[s+8>>2];c[z+12>>2]=c[s+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d)}i=i+1|0;m=c[(c[u>>2]|0)+8>>2]|0}}else v=4;while(0);if((v|0)==4){PA(n,c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0);c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];c[z+8>>2]=c[n+8>>2];c[z+12>>2]=c[n+12>>2];j=+h[z>>3]+ +(e|0);h[z>>3]=j;m=z+8|0;k=+h[m>>3]+ +(f|0);h[m>>3]=k;if(!(j>=0.0))j=(j+1.0)/+(g|0)+-1.0;else j=j/+(g|0);h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)/+(g|0)+-1.0;else j=k/+(g|0);h[m>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];Ls(w,x,d)}l=A;return}function $s(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;a:do if((a|0)<1)f=0-a|0;else{s=(e|0)==0;q=(f|0)==0;j=0;while(1){if((j|0)==(a|0)){f=0;break a}r=c[b+(j<<2)>>2]|0;g=s?r:e;k=c[d+(j<<3)>>2]|0;l=c[d+(j<<3)+4>>2]|0;m=+(k|0);n=m*.013888888888888888;o=+(l|0);p=o*.013888888888888888;i=eo(r)|0;while(1){if(!i)break;f=c[i+16>>2]|0;t=c[f+132>>2]|0;h[t>>3]=+h[t>>3]+n;t=t+8|0;h[t>>3]=+h[t>>3]+p;t=f+16|0;h[t>>3]=+h[t>>3]+m;t=f+24|0;h[t>>3]=+h[t>>3]+o;f=c[f+108>>2]|0;if(f|0){t=f+56|0;h[t>>3]=+h[t>>3]+m;t=f+64|0;h[t>>3]=+h[t>>3]+o}b:do if(!q){f=Qm(g,i)|0;while(1){if(!f)break b;at(f,k,l);f=Sm(g,f)|0}}while(0);i=fo(r,i)|0}bt(r,k,l);j=j+1|0}}while(0);return f|0}function at(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0;e=c[a+16>>2]|0;a=c[e+96>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+108>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+100>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+104>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}m=c[e+8>>2]|0;a:do if(m|0){l=+(b|0);j=+(d|0);b=c[m+4>>2]|0;a=0;while(1){if((a|0)>=(b|0))break a;k=c[m>>2]|0;d=c[k+(a*48|0)>>2]|0;f=c[k+(a*48|0)+4>>2]|0;g=c[k+(a*48|0)+8>>2]|0;i=c[k+(a*48|0)+12>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;n=d+(e<<4)|0;h[n>>3]=+h[n>>3]+l;n=d+(e<<4)+8|0;h[n>>3]=+h[n>>3]+j;e=e+1|0}if(g|0){n=k+(a*48|0)+16|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+24|0;h[n>>3]=+h[n>>3]+j}if(i|0){n=k+(a*48|0)+32|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+40|0;h[n>>3]=+h[n>>3]+j}a=a+1|0}}while(0);return}function bt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0;j=b+16|0;b=c[j>>2]|0;o=b+16|0;m=b+24|0;f=b+32|0;b=b+40|0;g=+(d|0);l=+h[f>>3]+g;i=+(e|0);n=+h[m>>3]+i;k=+h[b>>3]+i;h[o>>3]=+h[o>>3]+g;h[m>>3]=n;h[f>>3]=l;h[b>>3]=k;b=c[j>>2]|0;f=c[b+12>>2]|0;if((f|0)!=0?(a[f+81>>0]|0)!=0:0){o=f+56|0;h[o>>3]=+h[o>>3]+g;f=f+64|0;h[f>>3]=+h[f>>3]+i;f=1}else f=1;while(1){if((f|0)>(c[b+180>>2]|0))break;bt(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[j>>2]|0}return}function ct(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Ms(a,b,d,e)|0;if(!f)a=1;else{a=$s(a,b,f,d,c[e+12>>2]|0)|0;$I(f)}return a|0}function dt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;o=p;n=ct(a,b,d,e)|0;if(!n){eB(d);m=(c[d+16>>2]|0)+16|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];c[o+20>>2]=c[m+20>>2];c[o+24>>2]=c[m+24>>2];c[o+28>>2]=c[m+28>>2];f=o+8|0;g=o+16|0;i=o+24|0;e=0;while(1){if((e|0)>=(a|0))break;k=c[(c[b+(e<<2)>>2]|0)+16>>2]|0;j=c[k+180>>2]|0;k=k+184|0;d=1;while(1){if((d|0)>(j|0))break;r=(c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+16|0;h[o>>3]=+h[(+h[o>>3]<+h[r>>3]?o:r)>>3];r=c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;q=r+16|0;h[f>>3]=+h[(+h[f>>3]<+h[r+24>>3]?o:q)+8>>3];h[g>>3]=+h[(+h[g>>3]>+h[r+32>>3]?o:q)+16>>3];h[i>>3]=+h[(+h[i>>3]>+h[r+40>>3]?o:q)+24>>3];d=d+1|0}e=e+1|0}c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[m+16>>2]=c[o+16>>2];c[m+20>>2]=c[o+20>>2];c[m+24>>2]=c[o+24>>2];c[m+28>>2]=c[o+28>>2]}l=p;return n|0}function et(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=l;l=l+16|0;f=g;if(!e)ma(84553,84559,1400,84566);d=ft(a,d,d)|0;c[e+8>>2]=d;if(0){h=c[13918]|0;c[f>>2]=d;AL(h,84578,f)|0}c[e+12>>2]=0;c[e+20>>2]=0;gt(a,b,e)|0;l=g;return c[e+16>>2]|0}function ft(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=i+4|0;g=Jm(b,84708)|0;a:do if(g){c[h>>2]=f;h=(dM(g,122187,h)|0)==1;b=c[f>>2]|0;if(h&(b|0)>-1)d=b;else{switch(a[g>>0]|0){case 84:case 116:break;default:break a}d=e}}while(0);l=i;return d|0}function gt(a,b,c){a=a|0;b=b|0;c=c|0;return ht(Jm(a,84591)|0,b,c)|0}function ht(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+64|0;r=u+40|0;q=u+32|0;t=u+24|0;s=u+16|0;m=u+8|0;k=u;i=u+48|0;j=u+44|0;if(!e)ma(84553,84559,1292,84600);o=e+28|0;c[o>>2]=0;p=e+16|0;c[p>>2]=d;n=e+4|0;c[n>>2]=0;c[e+24>>2]=0;a:do if(b|0?(f=a[b>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:if(!(WJ(b,84618,5)|0)){c[p>>2]=4;m=it(b+5|0,e)|0;c[k>>2]=j;m=(dM(m,122187,k)|0)>0;d=c[j>>2]|0;if(!(m&(d|0)>0))break a;c[n>>2]=d;break a}else{if(WJ(b,84624,6)|0)break a;c[p>>2]=5;c[m>>2]=i;m=(dM(b+5|0,84631,m)|0)>0;v=+g[i>>2];g[e>>2]=m&v>0.0?v:1.0;break a}case 99:{if(f<<24>>24!=99)break a;if(yJ(b,93039)|0)break a;c[p>>2]=1;break a}case 103:{if(f<<24>>24!=103)break a;if(yJ(b,96286)|0)break a;c[p>>2]=3;break a}case 110:{if(f<<24>>24!=110)break a;if(yJ(b,96273)|0)break a;c[p>>2]=2;break a}default:break a}while(0);if(0){d=c[13918]|0;YL(84634,11,1,d)|0;c[s>>2]=jt(c[p>>2]|0)|0;AL(d,84646,s)|0;if((c[p>>2]|0)==5){h[t>>3]=+g[e>>2];AL(d,84659,t)|0}c[q>>2]=c[n>>2];AL(d,84672,q)|0;c[r>>2]=c[o>>2];AL(d,84685,r)|0}l=u;return c[p>>2]|0}function it(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a:do if((a[b>>0]|0)==95){f=d+28|0;e=1;while(1){b=b+1|0;b:while(1){if(!e)break a;d=a[b>>0]|0;if(!(d<<24>>24))break a;switch(d<<24>>24|0){case 99:{g=10;break b}case 105:{g=9;break b}case 117:{g=11;break b}case 116:{g=12;break b}case 98:{d=32;break b}case 108:{g=7;break b}case 114:{g=8;break b}default:e=0}}if((g|0)==7){g=0;d=4}else if((g|0)==8){g=0;d=8}else if((g|0)==9){g=0;d=64}else if((g|0)==10){g=0;d=1}else if((g|0)==11){g=0;d=2}else if((g|0)==12){g=0;d=16}c[f>>2]=c[f>>2]|d}}while(0);return b|0}function jt(a){a=a|0;switch(a|0){case 1:{a=93039;break}case 2:{a=96273;break}case 3:{a=96286;break}case 4:{a=84618;break}case 5:{a=84624;break}default:a=84698}return a|0}function kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n;m=n+80|0;do if(a){if(!e){e=aJ(1,20)|0;c[e+4>>2]=d>>>0>80?d:80}d=c[e>>2]|0;j=c[e+4>>2]|0;if(!d){h=100;d=a;i=aJ(100,j)|0}else{h=d+100|0;i=bJ(c[e+8>>2]|0,O(h,j)|0)|0;WN(i+(O(j,d)|0)|0,0,j*100|0)|0;d=a}while(1){d=lt(k,d,b,m)|0;if(!d)break;a=c[e>>2]|0;f=h<<1;g=O(h,j)|0;if((a|0)==(h|0)){i=bJ(i,O(f,j)|0)|0;WN(i+g|0,0,g|0)|0;a=c[e>>2]|0}else f=h;a=i+(O(a,j)|0)|0;g=k;h=a+80|0;do{c[a>>2]=c[g>>2];a=a+4|0;g=g+4|0}while((a|0)<(h|0));c[e>>2]=(c[e>>2]|0)+1;h=f}if(c[m>>2]|0){m=e+16|0;c[m>>2]=c[m>>2]|1}d=c[e>>2]|0;if(!d){$I(i);$I(e);e=0;break}else{c[e+8>>2]=bJ(i,O(d,j)|0)|0;break}}while(0);l=n;return e|0}function lt(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+80|0;h=j+64|0;i=j;c[f>>2]=0;do{g=a[d>>0]|0;d=d+1|0}while((YJ(g)|0)!=0);a:do switch(g|0){case 69:{c[b>>2]=0;d=mt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 101:{c[b>>2]=1;d=mt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 80:{c[b>>2]=2;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 112:{c[b>>2]=3;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 98:{c[b>>2]=4;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 66:{c[b>>2]=5;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 99:{d=ot(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=pt(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=9;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+24>>2];break a}else{c[b>>2]=14;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 67:{d=ot(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=pt(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=8;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+20>>2];break a}else{c[b>>2]=13;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 76:{c[b>>2]=6;d=nt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+12>>2];break}case 84:{c[b>>2]=7;d=qt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=qt(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=rt(d,b+24|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=qt(d,b+32|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=ot(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+16>>2];break}case 70:{c[b>>2]=10;d=qt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=ot(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+28>>2];break}case 83:{c[b>>2]=11;d=ot(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+32>>2];break}case 73:{c[b>>2]=12;d=mt(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=ot(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+36>>2];break}case 116:{c[b>>2]=15;d=st(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+44>>2];break}case 0:{d=0;break}default:{c[f>>2]=1;d=0}}while(0);l=j;return d|0}function mt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0;i=l;l=l+16|0;e=i;h[b>>3]=+uM(a,e);f=c[e>>2]|0;if(((f|0)!=(a|0)?(h[b+8>>3]=+uM(f,e),g=c[e>>2]|0,(f|0)!=(g|0)):0)?(h[b+16>>3]=+uM(g,e),d=c[e>>2]|0,(g|0)!=(d|0)):0){h[b+24>>3]=+uM(d,e);a=c[e>>2]|0;a=(d|0)==(a|0)?0:a}else a=0;l=i;return a|0}function nt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+4|0;g=k;a=tt(a,j)|0;do if(a){d=c[j>>2]|0;i=aJ(d,24)|0;c[b>>2]=d;e=i;f=0;while(1){if((f|0)>=(d|0)){d=9;break}h[e>>3]=+uM(a,g);d=c[g>>2]|0;if((a|0)==(d|0)){d=5;break}h[e+8>>3]=+uM(d,g);a=c[g>>2]|0;if((d|0)==(a|0)){d=7;break}h[e+16>>3]=0.0;e=e+24|0;d=c[b>>2]|0;f=f+1|0}if((d|0)==5){c[j>>2]=f;$I(i);a=0;break}else if((d|0)==7){c[j>>2]=f;$I(i);a=0;break}else if((d|0)==9){c[j>>2]=f;c[b+4>>2]=i;break}}else a=0;while(0);l=k;return a|0}function ot(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;b=tt(b,i)|0;f=c[i>>2]|0;do if(!((b|0)==0|(f|0)<1)){while(1){h=a[b>>0]|0;e=h<<24>>24==0;if(e^h<<24>>24!=45)b=b+1|0;else break}if(!e){h=aJ(f+1|0,1)|0;g=h;e=f;while(1){b=b+1|0;if((e|0)<=0){e=9;break}e=a[b>>0]|0;if(!(e<<24>>24)){e=8;break}a[g>>0]=e;e=(c[i>>2]|0)+-1|0;c[i>>2]=e;g=g+1|0}if((e|0)==8){$I(h);b=0;break}else if((e|0)==9){a[g>>0]=0;c[d>>2]=h;break}}else b=0}else b=0;while(0);l=j;return b|0}function pt(b,d){b=b|0;d=d|0;var e=0;e=a[b>>0]|0;switch(e|0){case 91:{b=ut(b+1|0,d)|0;break}case 40:{b=vt(b+1|0,d)|0;break}case 47:case 35:{c[d>>2]=0;c[d+8>>2]=b;break}default:if(!(hK(e)|0))b=0;else{c[d>>2]=0;c[d+8>>2]=b}}return b|0}function qt(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;f=l;l=l+16|0;d=f;e=+uM(a,d);d=c[d>>2]|0;if((d|0)==(a|0))d=0;else h[b>>3]=e;l=f;return d|0}function rt(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=tt(a,e)|0;e=c[e>>2]|0;c[b>>2]=(e|0)<0?0:e|0?2:1;l=d;return a|0}function st(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=ZJ(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function tt(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=CL(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;c[b>>2]=1;n=b+8|0;i=qt(a,n)|0;do if(((((i|0)!=0?(j=qt(i,b+16|0)|0,(j|0)!=0):0)?(e=qt(j,b+24|0)|0,(e|0)!=0):0)?(f=qt(e,b+32|0)|0,(f|0)!=0):0)?(k=b+40|0,d=tt(f,k)|0,(d|0)!=0):0){b=c[k>>2]|0;f=aJ(b,8)|0;e=0;while(1){if((e|0)>=(b|0)){d=13;break}d=qt(d,m)|0;if(!d){d=9;break}g[f+(e<<3)>>2]=+h[m>>3];d=ot(d,f+(e<<3)+4|0)|0;if(!d){d=12;break}e=e+1|0;b=c[k>>2]|0}if((d|0)==9){$I(f);a=0;break}else if((d|0)==12){$I(f);a=0;break}else if((d|0)==13){c[n+36>>2]=f;break}}else a=0;while(0);l=o;return a|0}function vt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;c[b>>2]=2;k=qt(a,b+8|0)|0;do if(((((((k|0)!=0?(m=qt(k,b+16|0)|0,(m|0)!=0):0)?(e=qt(m,b+24|0)|0,(e|0)!=0):0)?(f=qt(e,b+32|0)|0,(f|0)!=0):0)?(i=qt(f,b+40|0)|0,(i|0)!=0):0)?(j=qt(i,b+48|0)|0,(j|0)!=0):0)?(o=b+56|0,d=tt(j,o)|0,(d|0)!=0):0){e=c[o>>2]|0;i=aJ(e,8)|0;f=0;while(1){if((f|0)>=(e|0)){d=15;break}d=qt(d,n)|0;if(!d){d=11;break}g[i+(f<<3)>>2]=+h[n>>3];d=ot(d,i+(f<<3)+4|0)|0;if(!d){d=14;break}f=f+1|0;e=c[o>>2]|0}if((d|0)==11){$I(i);a=0;break}else if((d|0)==14){$I(i);a=0;break}else if((d|0)==15){c[b+60>>2]=i;break}}else a=0;while(0);l=p;return a|0}function wt(a,b,c){a=a|0;b=b|0;c=c|0;return kt(a,b,c,0)|0}function xt(a){a=a|0;return wt(a,0,0)|0}function yt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[a+12>>2]|0;if(a|0){f=c[a+8>>2]|0;g=a+4|0;h=(e|0)==0;b=0;while(1){if((b|0)>=(c[a>>2]|0))break;d=f+(O(c[g>>2]|0,b)|0)|0;if(!h)gb[e&127](d);zt(d);b=b+1|0}$I(f);$I(a)}return}function zt(a){a=a|0;switch(c[a>>2]|0){case 3:case 2:{$I(c[a+8+4>>2]|0);break}case 5:case 4:{$I(c[a+8+4>>2]|0);break}case 6:{$I(c[a+8+4>>2]|0);break}case 7:{$I(c[a+40>>2]|0);break}case 9:case 8:{$I(c[a+8>>2]|0);break}case 14:case 13:{At(a+8|0);break}case 10:{$I(c[a+16>>2]|0);break}case 11:{$I(c[a+8>>2]|0);break}case 12:{$I(c[a+40>>2]|0);break}default:{}}return}function At(a){a=a|0;var b=0,d=0,e=0;switch(c[a>>2]|0){case 1:{e=a+40|0;b=a+8+36|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(c[e>>2]|0))break;$I(c[d+(a<<3)+4>>2]|0);a=a+1|0}$I(d);break}case 2:{e=a+56|0;d=a+60|0;a=0;while(1){b=c[d>>2]|0;if((a|0)>=(c[e>>2]|0))break;$I(c[b+(a<<3)+4>>2]|0);a=a+1|0}$I(b);break}default:{}}return}function Bt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;k=o+4|0;n=o;c[d>>2]=0;c[e>>2]=(rn(so(b)|0)|0)!=0&1;f=c[42229]|0;a:do if(f|0?(h=Km(b,f)|0,i=a[h>>0]|0,i<<24>>24):0){f=19444;while(1){g=c[f>>2]|0;if(!g)break a;if(i<<24>>24==(a[g>>0]|0)?(yJ(h,g)|0)==0:0)break;f=f+12|0}c[d>>2]=c[f+4>>2];c[e>>2]=c[f+8>>2]}while(0);f=c[42240]|0;if((f|0?(c[e>>2]|0)==1:0)?(j=Km(b,f)|0,a[j>>0]|0):0)Ct(j,e);f=c[42241]|0;if((f|0?(c[d>>2]|0)==1:0)?(m=Km(b,f)|0,a[m>>0]|0):0)Ct(m,d);if(a[(c[b+16>>2]|0)+153>>0]|0){j=b+-48|0;i=so(c[((c[b>>2]&3|0)==2?b:j)+40>>2]|0)|0;m=c[b>>2]&3;Bt(bn(i,c[((m|0)==2?b:j)+40>>2]|0,c[((m|0)==3?b:b+48|0)+40>>2]|0,0,0)|0,k,n);c[e>>2]=c[k>>2]|c[e>>2];c[d>>2]=c[n>>2]|c[d>>2]}l=o;return}function Ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;k=o+4|0;j=0;e=0;a:while(1){c[d>>2]=e;g=(j|0)<4;h=(j|0)==3;i=(j|0)==0;while(1){if(!(g&(a[b>>0]|0)!=0))break a;c[k>>2]=0;f=Dt(b,k)|0;e=c[k>>2]|0;if(!e){n=5;break a}b=(e|0)==8;if(!(h&b)){if(!(i&b))break;if(a[f>>0]|0)break}c[k>>2]=0;b=f}e=c[d>>2]|e<<(j<<3);j=j+1|0;b=f}if((n|0)==5){c[m>>2]=b;$l(0,84713,m)|0}l=o;return}function Dt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=0;d=Et(a,19504,e)|0;if((d|0)==(a|0)){while(1){d=Et(a,19520,e)|0;if((a|0)==(d|0))break;else a=d}d=Et(a,19568,e)|0}a=c[e>>2]|0;if((a|0)!=0&(a&15|0)==0){a=a|1;c[e>>2]=a}c[b>>2]=c[b>>2]|a;l=f;return d|0}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;while(1){e=c[b>>2]|0;if(!e)break;f=sJ(e)|0;if(!(WJ(a,e,f)|0)){g=4;break}b=b+8|0}if((g|0)==4){c[d>>2]=c[d>>2]|c[b+4>>2];a=a+f|0}return a|0}function Ft(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0;g=0;d=0.0;while(1){if((g|0)==4)break;f=b>>(g<<3)&15;e=1336;while(1){if(!(c[e+16>>2]|0))break;if((f|0)==(c[e>>2]|0)){i=6;break}e=e+24|0}if((i|0)==6){i=0;d=+h[e+8>>3]+d}g=g+1|0}return +(d*10.0*+FA(a,c[42233]|0,1.0,0.0))}function Gt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0;p=l;l=l+96|0;m=p+80|0;o=p;k=f>4.0?f*.0875:.35;i=+h[d+8>>3];n=i*k;j=+h[d>>3];k=j*k;e=+h[b>>3];j=e+j;h[m>>3]=j;f=+h[b+8>>3];i=i+f;h[m+8>>3]=i;d=o+64|0;if(!(g&32)){c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=o+32|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];f=i;e=j}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];b=o+32|0;c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2]}h[o+16>>3]=e+n;h[o+24>>3]=f-k;h[o+48>>3]=e-n;h[o+56>>3]=f+k;do if(!(g&64))if(!(g&128)){ID(a,o+16|0,3,g>>>4&1^1);break}else{ID(a,o+32|0,3,g>>>4&1^1);break}else ID(a,o,3,g>>>4&1^1);while(0);l=p;return}function Ht(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0;x=l;l=l+160|0;n=x+144|0;w=x;q=e*4.0;y=(g&32|0)==0;q=!(q<f)|y?.45:f/q*.45;s=!(f>1.0)|y?0.0:(f+-1.0)*.05/e;u=+h[d+8>>3];r=-u;v=q*r;t=+h[d>>3];q=t*q;r=s*r;s=t*s;p=+h[b>>3];e=p+t;h[n>>3]=e;o=+h[b+8>>3];f=u+o;h[n+8>>3]=f;t=t*.5+p;u=u*.5+o;d=w+128|0;if(y){c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];y=w+64|0;c[y>>2]=c[b>>2];c[y+4>>2]=c[b+4>>2];c[y+8>>2]=c[b+8>>2];c[y+12>>2]=c[b+12>>2];i=o;j=p;k=o;m=p;f=o;e=p}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[w>>2]=c[b>>2];c[w+4>>2]=c[b+4>>2];c[w+8>>2]=c[b+8>>2];c[w+12>>2]=c[b+12>>2];y=w+64|0;c[y>>2]=c[n>>2];c[y+4>>2]=c[n+4>>2];c[y+8>>2]=c[n+8>>2];c[y+12>>2]=c[n+12>>2];i=f+s;j=e+r;k=f-s;m=e-r}h[w+16>>3]=e-v;h[w+24>>3]=f-q;h[w+32>>3]=t-r;h[w+40>>3]=u-s;h[w+48>>3]=m;h[w+56>>3]=k;h[w+80>>3]=j;h[w+88>>3]=i;h[w+96>>3]=t+r;h[w+104>>3]=u+s;h[w+112>>3]=e+v;h[w+120>>3]=f+q;do if(!(g&64))if(!(g&128)){ID(a,w,9,1);break}else{ID(a,w+48|0,6,1);break}else ID(a,w,6,1);while(0);l=x;return}function It(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;q=l;l=l+64|0;p=q;t=+h[d+8>>3];s=+h[d>>3];k=+h[b>>3];e=k+s;m=+h[b+8>>3];f=m+t;i=k+s*.2;j=m+t*.2;k=k+s*.6;m=m+t*.6;h[p>>3]=i-t;h[p+8>>3]=j+s;n=p+16|0;h[n>>3]=i+t;o=p+24|0;h[o>>3]=j-s;h[p+32>>3]=k+t;h[p+40>>3]=m-s;h[p+48>>3]=k-t;h[p+56>>3]=m+s;if(!(g&64)){if(g&128|0){d=2;g=1;r=3}}else{d=3;g=0;r=3}if((r|0)==3){h[p+(g<<4)>>3]=i;h[p+(g<<4)+8>>3]=j;h[p+(d<<4)>>3]=k;h[p+(d<<4)+8>>3]=m}ID(a,p,4,1);c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];h[n>>3]=e;h[o>>3]=f;LD(a,p,2);l=q;return}function Jt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+64|0;n=o;j=+h[d+8>>3];r=j*-.4;i=+h[d>>3];q=i*.4;t=+h[b>>3];e=t+i*.8;s=+h[b+8>>3];f=s+j*.8;i=t+i;j=s+j;h[n>>3]=t+r;k=n+8|0;h[k>>3]=s+q;d=n+16|0;h[d>>3]=t-r;m=n+24|0;h[m>>3]=s-q;h[n+32>>3]=e-r;h[n+40>>3]=f-q;h[n+48>>3]=e+r;h[n+56>>3]=f+q;if(!(g&64)){if(g&128|0){c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=2;p=5}}else{c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];d=3;p=5}if((p|0)==5){h[n+(d<<4)>>3]=e;h[n+(d<<4)+8>>3]=f}ID(a,n,4,g>>>4&1^1);h[n>>3]=e;h[k>>3]=f;h[n+16>>3]=i;h[m>>3]=j;LD(a,n,2);l=o;return}function Kt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;j=l;l=l+80|0;i=j;n=+h[d+8>>3];k=n*-.3333333333333333;p=+h[d>>3];f=p*.3333333333333333;q=+h[b>>3];m=q+p*.5;o=+h[b+8>>3];e=o+n*.5;d=i+64|0;h[i+64>>3]=q+p;h[i+72>>3]=o+n;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];h[i+16>>3]=m+k;h[i+24>>3]=e+f;d=i+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[i+48>>3]=m-k;h[i+56>>3]=e-f;do if(!(g&64)){d=g>>>4&1^1;if(!(g&128)){ID(a,i,4,d);break}else{ID(a,i,3,d);break}}else ID(a,d,3,g>>>4&1^1);while(0);l=j;return}function Lt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+32|0;i=g;k=+h[c>>3];e=+h[c+8>>3];d=+C(+(e*e+k*k))*.5;m=+h[b>>3];k=k*.5;h[i>>3]=m+k-d;j=+h[b+8>>3];e=e*.5;h[i+8>>3]=j-d+e;h[i+16>>3]=m+d+k;h[i+24>>3]=j+d+e;HD(a,i,2,f>>>4&1^1);l=g;return}function Mt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;q=t+48|0;r=t+16|0;s=t;n=f>4.0?f*.125:.5;p=+h[b>>3];o=+h[d>>3];i=+h[b+8>>3];m=+h[d+8>>3];e=m*n;f=o*n;c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];h[r+16>>3]=o+p;h[r+24>>3]=m+i;h[q>>3]=n*(o-m)+p;j=n*(m+o);k=j+i;h[q+8>>3]=k;h[q+48>>3]=j+p;i=n*(m-o)+i;h[q+56>>3]=i;o=e*-.95;m=o+f+p;n=f*1.3333333333333333;if(!(g&32)){e=e*1.3333333333333333;j=f*-.33333333333333326;i=i-e;f=k-e;e=m-n}else{e=e*1.3333333333333333;j=f*2.333333333333333;i=i+e;f=k+e;e=m+n}h[q+16>>3]=e;h[q+24>>3]=f;h[q+32>>3]=j-o+p;h[q+40>>3]=i;LD(a,r,2);if(!(g&64)){if(g&128|0)QA(s,q,3,.5,q,0)}else QA(s,q,3,.5,0,q);KD(a,q,4,0,0,0);l=t;return}function Nt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0;g=l;l=l+32|0;i=g;e=+h[d>>3]+ +h[b>>3];f=+h[d+8>>3]+ +h[b+8>>3];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=e;h[i+24>>3]=f;LD(a,i,2);l=g;return}function Ot(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+80|0;j=n+72|0;k=n+8|0;m=n;i=+Ft(a,g);i=i*i;h[m>>3]=i;c[f+12>>2]=g;g=f+32|0;a=e+3|0;f=b+(a<<4)|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];if((e|0)>(d|0)?(o=+h[b+(e<<4)>>3]-+h[f>>3],p=+h[b+(e<<4)+8>>3]-+h[b+(a<<4)+8>>3],p*p+o*o<i):0)e=e+-3|0;s=k+48|0;r=b+(e<<4)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];q=k+32|0;a=b+(e+1<<4)|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];f=k+16|0;d=b+(e+2<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];c[j>>2]=k;c[j+4>>2]=m;Gz(j,26,k,1);c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];c[a>>2]=c[q>>2];c[a+4>>2]=c[q+4>>2];c[a+8>>2]=c[q+8>>2];c[a+12>>2]=c[q+12>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];m=b+(e+3<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];l=n;return e|0}function Pt(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a>>2]|0;d=+h[b>>3]-+h[f>>3];e=+h[b+8>>3]-+h[f+8>>3];return e*e+d*d<=+h[c[a+4>>2]>>3]|0}function Qt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0;o=l;l=l+80|0;k=o+72|0;m=o+8|0;n=o;j=+Ft(a,g);j=j*j;h[n>>3]=j;c[f+8>>2]=g;f=f+16|0;a=b+(d<<4)|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];if(!((e|0)>(d|0)?(i=d+3|0,p=+h[a>>3]-+h[b+(i<<4)>>3],q=+h[b+(d<<4)+8>>3]-+h[b+(i<<4)+8>>3],q*q+p*p<j):0))i=d;e=b+(i+3<<4)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];g=m+16|0;d=b+(i+2<<4)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];r=m+32|0;a=b+(i+1<<4)|0;c[r>>2]=c[a>>2];c[r+4>>2]=c[a+4>>2];c[r+8>>2]=c[a+8>>2];c[r+12>>2]=c[a+12>>2];s=m+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[k>>2]=s;c[k+4>>2]=n;Gz(k,26,m,0);n=b+(i<<4)|0;c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];c[n+8>>2]=c[s+8>>2];c[n+12>>2]=c[s+12>>2];c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];l=o;return i|0}function Rt(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0;u=(g|0)!=0;l=(i|0)!=0;if(!((e|0)==(d|0)&(u&l))){if(l){j=+Ft(a,i);k=+h[b+(e<<4)>>3];p=+h[b+(e<<4)+8>>3];l=e+3|0;r=b+(l<<4)|0;n=+h[r>>3];l=b+(l<<4)+8|0;o=+h[l>>3];t=k-n;s=p-o;t=+C(+(s*s+t*t))*.9;j=j>=t?t:j;if(p==o){m=(k<n?-j:j)+n;j=p}else{m=k;j=(p<o?-j:j)+o}w=e+1|0;h[b+(w<<4)>>3]=k;h[b+(w<<4)+8>>3]=p;e=b+(e+2<<4)|0;h[r>>3]=m;h[l>>3]=j;c[e>>2]=c[r>>2];c[e+4>>2]=c[r+4>>2];c[e+8>>2]=c[r+8>>2];c[e+12>>2]=c[r+12>>2];c[f+12>>2]=i;h[f+32>>3]=n;h[f+40>>3]=o}if(u){m=+Ft(a,g);l=b+(d<<4)|0;k=+h[l>>3];j=+h[b+(d<<4)+8>>3];w=d+3|0;o=+h[b+(w<<4)>>3];p=+h[b+(w<<4)+8>>3];t=k-o;s=j-p;t=+C(+(s*s+t*t))*.9;m=m>=t?t:m;if(j==p){n=(k<o?m:-m)+k;m=j}else{n=k;m=(j<p?m:-m)+j}w=d+1|0;v=b+(w<<4)|0;h[v>>3]=n;h[b+(w<<4)+8>>3]=m;c[l>>2]=c[v>>2];c[l+4>>2]=c[v+4>>2];c[l+8>>2]=c[v+8>>2];c[l+12>>2]=c[v+12>>2];v=d+2|0;h[b+(v<<4)>>3]=o;h[b+(v<<4)+8>>3]=p;v=16}}else{r=b+(e<<4)|0;s=+h[r>>3];t=+h[b+(e<<4)+8>>3];l=e+3|0;u=b+(l<<4)|0;k=+h[u>>3];l=b+(l<<4)+8|0;j=+h[l>>3];m=+Ft(a,g);q=+Ft(a,i);n=s-k;p=t-j;n=+C(+(p*p+n*n));w=!(q+m>=n);n=n*.3333333333333333;m=w?m:n;n=w?q:n;if(t==j){w=s<k;p=(w?-n:n)+k;q=(w?m:-m)+s;o=t;m=t}else{w=t<j;p=s;q=s;o=(w?m:-m)+t;m=(w?-n:n)+j}w=e+1|0;v=b+(w<<4)|0;h[v>>3]=q;h[b+(w<<4)+8>>3]=o;c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];v=b+(e+2<<4)|0;h[u>>3]=p;h[l>>3]=m;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];c[f+12>>2]=i;h[f+32>>3]=s;h[f+40>>3]=t;v=16}if((v|0)==16){c[f+8>>2]=g;h[f+16>>3]=k;h[f+24>>3]=j}return}function St(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;n=+h[b>>3];k=+h[c>>3]-n;o=+h[b+8>>3];l=+h[c+8>>3]-o;j=d*10.0/(+C(+(k*k+l*l))+.0001);k=j*((k>=0.0?.0001:-.0001)+k);j=((l>=0.0?.0001:-.0001)+l)*j;l=k*.5;m=j*.5;i=n-m;f=o-l;n=m+n;l=o+l;o=i+k;m=f+j;k=n+k;j=l+j;g=o>k?o:k;g=n>g?n:g;d=m>j?m:j;d=l>d?l:d;k=o<k?o:k;k=n<k?n:k;j=m<j?m:j;j=l<j?l:j;h[a>>3]=i<k?i:k;h[a+8>>3]=f<j?f:j;h[a+16>>3]=i>g?i:g;h[a+24>>3]=f>d?f:d;return}function Tt(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;q=l;l=l+48|0;m=q+32|0;k=q+16|0;p=q;n=(c[a+16>>2]|0)+12|0;o=c[n>>2]|0;c[n>>2]=b;GD(a,c[(c[a>>2]|0)+336>>2]|0);PD(a,g);t=+h[e>>3]-+h[d>>3];b=e+8|0;s=+h[b>>3]-+h[d+8>>3];r=10.0/(+C(+(t*t+s*s))+.0001);h[e>>3]=r*((t>=0.0?.0001:-.0001)+t);h[b>>3]=((s>=0.0?.0001:-.0001)+s)*r;b=0;while(1){if((b|0)>=4)break;j=i>>(b<<3)&255;if(!j)break;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];Ut(p,a,k,m,f,g,j);c[d>>2]=c[p>>2];c[d+4>>2]=c[p+4>>2];c[d+8>>2]=c[p+8>>2];c[d+12>>2]=c[p+12>>2];b=b+1|0}c[n>>2]=o;l=q;return}function Ut(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;m=q+16|0;k=q;n=i&15;j=1336;while(1){o=c[j>>2]|0;if(!o)break;if((n|0)==(o|0)){p=4;break}j=j+24|0}if((p|0)==4){r=+h[j+8>>3]*f;h[e>>3]=r*+h[e>>3];o=e+8|0;h[o>>3]=r*+h[o>>3];p=c[j+16>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];jb[p&15](b,k,m,f,g,i);h[d>>3]=+h[e>>3]+ +h[d>>3];p=d+8|0;h[p>>3]=+h[o>>3]+ +h[p>>3]};c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=q;return}function Vt(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i+8|0;f=i;d=Jm(b,84815)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else{d=Jm(b,84827)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else d=0}if((h|0)==5){d=wt(e,0,120)|0;if(!d){c[f>>2]=En(b)|0;$l(0,84834,f)|0;c[g>>2]=e;$l(3,84887,g)|0}}l=i;return d|0}function Wt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;f=ww(304)|0;if(!f)$l(1,84895,g)|0;e=a+16|0;a=c[e>>2]|0;c[f>>2]=a;c[e>>2]=f;if(!a){c[f+144>>2]=3;c[f+148>>2]=0;h[f+152>>3]=1.0}else{b=f+16|0;d=a+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));b=f+56|0;d=a+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[f+144>>2]=c[a+144>>2];c[f+148>>2]=c[a+148>>2];h[f+152>>3]=+h[a+152>>3];c[f+136>>2]=c[a+136>>2];b=f+96|0;d=a+96|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0))}l=g;return f|0}function Xt(a){a=a|0;var b=0;a=a+16|0;b=c[a>>2]|0;if(!b)ma(84921,84925,117,84932);else{$I(c[b+212>>2]|0);$I(c[b+208>>2]|0);$I(c[b+216>>2]|0);$I(c[b+220>>2]|0);$I(c[b+224>>2]|0);$I(c[b+228>>2]|0);$I(c[b+232>>2]|0);$I(c[b+236>>2]|0);$I(c[b+240>>2]|0);$I(c[b+244>>2]|0);$I(c[b+248>>2]|0);$I(c[b+252>>2]|0);$I(c[b+256>>2]|0);$I(c[b+272>>2]|0);$I(c[b+284>>2]|0);$I(c[b+280>>2]|0);c[a>>2]=c[b>>2];$I(b);return}}function Yt(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=c[d+16>>2]|0;k=c[d+152>>2]|0;if((e|0)!=0&(k&32768|0)!=0)c[l+192>>2]=e;if(((k&65536|0)!=0?(c[l+212>>2]=rw(i,j)|0,(f|0)!=0):0)?(a[f>>0]|0)!=0:0){c[l+208>>2]=rw(f,j)|0;d=1}else d=0;do if(k&4194304){if(g|0?a[g>>0]|0:0){c[l+228>>2]=rw(g,j)|0;d=l+260|0;b[d>>1]=b[d>>1]|1;d=1;break}e=c[l+192>>2]|0;if(e){c[l+228>>2]=HL(e)|0;d=1}}while(0);if((h|0)!=0&(k&8388608|0)!=0?(a[h>>0]|0)!=0:0){c[l+244>>2]=rw(h,j)|0;d=1}return d|0}function Zt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;i=j;h=j+8|0;g=c[(c[b>>2]|0)+168>>2]|0;f=c[(c[(c[g+16>>2]|0)+8>>2]|0)+92>>2]|0;_t(b,e);b=Jm(d,86799)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0){gm(e,b)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}else{if((g|0)!=(d|0)&(f|0)!=0){gm(e,f)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;b=c[f>>2]|0}c[f>>2]=b+1;a[b>>0]=95}switch(Do(d)|0){case 0:{f=(g|0)==(d|0)?96286:84946;b=(c[d>>2]|0)>>>4;break}case 1:{f=96273;b=(c[d>>2]|0)>>>4;break}case 2:{f=96237;b=(c[d>>2]|0)>>>4;break}default:{f=0;b=0}}gm(e,f)|0;c[i>>2]=b;qL(h,84952,i)|0;gm(e,h)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}l=j;return b|0}function _t(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+144|0;h=i;g=i+8|0;e=c[b+160>>2]|0;if((e|0)>1?c[b+152>>2]&64|0:0){gm(d,c[(c[(c[b>>2]|0)+308>>2]|0)+(e<<2)>>2]|0)|0;f=d+4|0;e=c[f>>2]|0;if(e>>>0>=(c[d+8>>2]|0)>>>0){em(d,1)|0;e=c[f>>2]|0}c[f>>2]=e+1;a[e>>0]=95}f=c[b+196>>2]|0;e=c[b+200>>2]|0;if((f|0)>0|(e|0)>0){c[h>>2]=f;c[h+4>>2]=e;qL(g,84956,h)|0;gm(d,g)|0}l=i;return}function $t(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;s=l;l=l+48|0;p=s+16|0;f=s+32|0;q=s;r=+h[(c[a+16>>2]|0)+152>>3];o=au(d,0,f)|0;if((o+-1|0)>>>0>=2){e=+h[b+16>>3];k=(e+ +h[b>>3])*.5;h[q>>3]=k;i=+h[b+24>>3];m=(i+ +h[b+8>>3])*.5;h[q+8>>3]=m;k=e-k;m=i-m;n=r>.5;if(n)PD(a,.5);j=c[f>>2]|0;i=0.0;f=c[j+8>>2]|0;while(1){d=c[f>>2]|0;if(!d)break;b=f+4|0;if(+g[b>>2]==0.0)e=i;else{ED(a,d);if(!(c[f+12>>2]|0))e=6.283185307179586;else e=+g[b>>2]*6.283185307179586+i;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];b=$E(p,k,m,i,e)|0;KD(a,c[b>>2]|0,c[b+4>>2]|0,0,0,1);YI(b)}i=e;f=f+12|0}if(n)PD(a,r);bu(j)}l=s;return o|0}function au(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r+8|0;n=r;q=ww(12)|0;i=HL(b)|0;a:do if(!d){d=1;f=i;while(1){switch(a[f>>0]|0){case 0:break a;case 58:{d=d+1|0;break}default:{}}f=f+1|0}}while(0);c[q+4>>2]=i;p=ww((d*12|0)+12|0)|0;c[q+8>>2]=p;m=1.0;h=0;d=0;f=i;while(1){f=EL(f,93017)|0;if(!f){f=20;break}j=+cu(f);if(!(j>=0.0)){f=17;break}k=j-m;if(k>0.0)if((c[4920]|0)!=0?!(k<1.0e-05&k>-1.0e-05):0){c[n>>2]=b;$l(0,84967,n)|0;c[4920]=0;j=m;d=3}else j=m;k=m-j;if(j>0.0)a[p+(h*12|0)+8>>0]=1;if(a[f>>0]|0)c[p+(h*12|0)>>2]=f;f=h+1|0;g[p+(h*12|0)+4>>2]=j;if(k<1.0e-05&k>-1.0e-05){h=f;f=30;break}else{m=k;h=f;f=0}}b:do if((f|0)==17){if(!(c[4920]|0))d=1;else{c[o>>2]=b;$l(1,85002,o)|0;c[4920]=0;d=2}bu(q)}else if((f|0)==20)if(m>0.0){f=0;i=0;while(1){if((f|0)>=(h|0))break;o=i+(+g[p+(f*12|0)+4>>2]==0.0&1)|0;f=f+1|0;i=o}if((i|0)<=0){f=p+((h+-1|0)*12|0)+4|0;g[f>>2]=m+ +g[f>>2];f=30;break}j=m/+(i|0);f=0;while(1){if((f|0)>=(h|0)){f=30;break b}i=p+(f*12|0)+4|0;if(+g[i>>2]==0.0)g[i>>2]=j;f=f+1|0}}else f=30;while(0);if((f|0)==30){while(1){f=h+-1|0;if((h|0)<=0)break;if(+g[p+(f*12|0)+4>>2]>0.0)break;else h=f}c[p+(h*12|0)>>2]=0;c[q>>2]=h;c[e>>2]=q}l=r;return d|0}function bu(a){a=a|0;$I(c[a+4>>2]|0);$I(c[a+8>>2]|0);$I(a);return}function cu(b){b=b|0;var d=0.0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;b=XJ(b,59)|0;if(!b)d=0.0;else{g=b+1|0;a[b>>0]=0;d=+uM(g,e);d=(d>=0.0?(c[e>>2]|0)!=(g|0):0)?d:-1.0}l=f;return +d}function du(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0;t=l;l=l+80|0;i=t+64|0;r=t;s=+h[(c[a+16>>2]|0)+152>>3];q=au(d,0,i)|0;if((q+-1|0)>>>0>=2){if(!e){c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];p=r+16|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;o=b+32|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+48|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}else{p=b+32|0;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+16|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];p=r+48|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}k=r+16|0;m=+h[k>>3];f=+h[r>>3];n=m-f;o=r+32|0;h[o>>3]=f;h[k>>3]=f;p=s>.5;if(p)PD(a,.5);i=c[i>>2]|0;j=r+48|0;e=c[i+8>>2]|0;while(1){d=c[e>>2]|0;if(!d)break;b=e+4|0;if(!(+g[b>>2]==0.0)){ED(a,d);if(!(c[e+12>>2]|0))f=m;else f=n*+g[b>>2]+ +h[r>>3];h[o>>3]=f;h[k>>3]=f;ID(a,r,4,1);f=+h[k>>3];h[j>>3]=f;h[r>>3]=f}e=e+12|0}if(p)PD(a,s);bu(i)}l=t;return q|0}function eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;g=f>>>16^2;c[d+264>>2]=g;h=d+268|0;c[h>>2]=g+2;g=d+272|0;$I(c[g>>2]|0);d=ww(c[h>>2]<<4)|0;c[g>>2]=d;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];g=d+16|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];if(!(e&8192))gD(a,d,d,2)|0;if(!f)_v(d)}return}function fu(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+144|0;c=q+80|0;e=q+16|0;f=q;k=+h[b>>3];o=a+16|0;m=+h[o>>3];if(!(((((((((!(k>m)?(n=+h[a>>3],!(k<n)):0)?(d=+h[b+8>>3],i=+h[a+24>>3],!(d>i)):0)?(j=+h[a+8>>3],!(d<j)):0)?(k=+h[b+16>>3],!(k>m|k<n)):0)?(k=+h[b+24>>3],!(k>i|k<j)):0)?(k=+h[b+32>>3],!(k>m|k<n)):0)?(k=+h[b+40>>3],!(k>i|k<j)):0)?(k=+h[b+48>>3],!(k>m|k<n)):0)?(n=+h[b+56>>3],!(n>i|n<j)):0))p=11;a:do if((p|0)==11){if(!(gu(b)|0)){QA(f,b,3,.5,c,e);fu(a,c);fu(a,e);break}f=a+24|0;g=a+8|0;e=0;while(1){if((e|0)==4)break a;d=+h[b+(e<<4)>>3];if(!(d>+h[o>>3])){if(d<+h[a>>3]){c=a;p=16}}else{c=o;p=16}if((p|0)==16){p=0;h[c>>3]=d}d=+h[b+(e<<4)+8>>3];if(!(d>+h[f>>3])){if(d<+h[g>>3]){c=a;p=19}}else{c=o;p=19}if((p|0)==19){p=0;h[c+8>>3]=d}e=e+1|0}}while(0);l=q;return}function gu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,h=0,i=0;b=l;l=l+48|0;d=b+32|0;e=b+16|0;f=b;i=a+48|0;h=a+16|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];g=+dw(f,e,d);h=a+32|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];a=g<4.0&+dw(f,e,d)<4.0&1;l=b;return a|0}function hu(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0.0;m=l;l=l+16|0;k=m;j=c[b+152>>2]|0;n=+h[b+432>>3];i=+h[b+352>>3]*.013888888888888888;f=i*n;h[b+488>>3]=f;g=+h[b+440>>3];i=i*g;h[b+496>>3]=i;h[b+520>>3]=n*.013888888888888888;e=b+528|0;h[e>>3]=g*.013888888888888888;if(j&4096|c[42184]|0)h[e>>3]=g*-.013888888888888888;e=(c[b+360>>2]|0)==0;n=+((c[b+448>>2]|0)>>>0);g=+((c[b+452>>2]|0)>>>0);h[b+368>>3]=(e?n:g)/f;h[b+376>>3]=(e?g:n)/i;MD(b,GA(d,zm(d,0,86595,0)|0,174185)|0);c[b+160>>2]=0;iu(b,d);if(j&2|0)ju(b,d);e=eo(d)|0;while(1){if(!e)break;a[(c[e+16>>2]|0)+116>>0]=0;e=fo(d,e)|0}ku(b,k);while(1){if(!((lu(b)|0)<<24>>24))break;if((mu(b)|0)>1)lD(b);nu(b);while(1){if(!((ou(b)|0)<<24>>24))break;pu(b,d);qu(b)}if((mu(b)|0)>1)mD(b);ru(b,k)}su(b);l=m;return}function iu(a,b){a=a|0;b=b|0;var d=0;d=Wt(a)|0;c[d+4>>2]=0;c[d+8>>2]=b;c[d+12>>2]=0;rv(a,c[(c[b+16>>2]|0)+12>>2]|0,b);hD(a,b);return}function ju(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;ED(b,119592);d=Jm(c,85423)|0;if(d|0?a[d>>0]|0:0)ED(b,d);d=Jm(c,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);Dv(b,c);g=eo(c)|0;while(1){if(!g)break;d=Jm(g,122540)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(g,122531)|0;if(d|0?a[d>>0]|0:0)ED(b,d);d=Jm(g,86469)|0;do if(d|0?a[d>>0]|0:0){if(!(XJ(d,58)|0)){CD(b,d);break}e=HL(d)|0;d=e;while(1){d=EL(d,93017)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}CD(b,d);d=0}$I(e)}while(0);d=Jm(g,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);f=Qm(c,g)|0;while(1){if(!f)break;d=Jm(f,122540)|0;do if(d|0?a[d>>0]|0:0){if(!(XJ(d,58)|0)){CD(b,d);break}e=HL(d)|0;d=e;while(1){d=EL(d,93017)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}CD(b,d);d=0}$I(e)}while(0);d=Jm(f,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);f=Sm(c,f)|0}g=fo(c,g)|0}return}function ku(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;g=i;h=c[a>>2]|0;d=c[h+312>>2]|0;f=a+156|0;c[f>>2]=d;h=c[h+316>>2]|0;if(!h)if((d|0)>1?(c[a+152>>2]&64|0)==0:0){c[e>>2]=c[a+52>>2];$l(0,85598,e)|0;c[f>>2]=1;e=1;d=0}else{e=1;d=0}else{d=h+4|0;if((c[h>>2]|0)>1?(c[a+152>>2]&64|0)==0:0){c[g>>2]=c[a+52>>2];$l(0,85598,g)|0;c[h+8>>2]=(c[f>>2]|0)+1}e=c[d>>2]|0;d=h+8|0}c[a+160>>2]=e;c[b>>2]=d;l=i;return}function lu(a){a=a|0;return (c[a+160>>2]|0)<=(c[a+156>>2]|0)|0}function mu(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+316>>2]|0;return c[((b|0)==0?a+156|0:b)>>2]|0}function nu(a){a=a|0;var b=0,d=0;d=a+172|0;b=c[d+4>>2]|0;a=a+196|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function ou(a){a=a|0;var b=0,d=0;d=c[a+196>>2]|0;if(((d|0)>-1?(d|0)<(c[a+164>>2]|0):0)?(b=c[a+200>>2]|0,(b|0)>-1):0)a=(b|0)<(c[a+168>>2]|0)&1;else a=0;return a|0}function pu(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+176|0;k=p;f=p+48|0;m=p+32|0;n=c[d+16>>2]|0;o=c[d+152>>2]|0;if((c[d+160>>2]|0)<=1?(c[d+196>>2]|0)<=0:0)h=0;else{dm(m,128,f);g=n+212|0;h=c[g>>2]|0;_t(d,m);gm(m,h)|0;i=m+4|0;f=c[i>>2]|0;if(f>>>0>=(c[m+8>>2]|0)>>>0){em(m,1)|0;f=c[i>>2]|0}a[f>>0]=0;f=c[m>>2]|0;c[i>>2]=f;c[g>>2]=f}_E(Jm(e,85048)|0);uu(d);jD(d);CD(d,122106);ED(d,119592);do if(o&4259840|0){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;if(o&655360){i=o&131072;c[n+264>>2]=i>>>16^2;f=ww((i>>>12^32)+32|0)|0;g=d+288|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];g=f+16|0;q=d+304|0;c[g>>2]=c[q>>2];c[g+4>>2]=c[q+4>>2];c[g+8>>2]=c[q+8>>2];c[g+12>>2]=c[q+12>>2];if(!i){_v(f);g=4}else g=2}else{f=0;g=0}if(!(o&8192))gD(d,f,f,g)|0;c[n+272>>2]=f;c[n+268>>2]=g}while(0);if(o&32768|0?(j=c[(c[e+16>>2]|0)+12>>2]|0,j|0):0)c[n+192>>2]=c[j>>2];g=(o&4|0)!=0;do if(!g){f=n+208|0;if((c[f>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;q=d+256|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[k+16>>2]=c[q+16>>2];c[k+20>>2]=c[q+20>>2];c[k+24>>2]=c[q+24>>2];c[k+28>>2]=c[q+28>>2];eu(d,k);xD(d,c[f>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}while(0);vu(d,e);f=c[(c[e+16>>2]|0)+12>>2]|0;if(f|0)qw(d,4,f);do if(!g){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;yD(d)}while(0);wu(d,e,o);kD(d);if(h|0){hm(m);c[n+212>>2]=h}l=p;return}function qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;d=h+24|0;b=h+16|0;j=h+8|0;f=h;g=a+196|0;i=a+188|0;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];tu(j,b,d);i=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=i;if(!((ou(a)|0)<<24>>24)){e=a+180|0;if(!(c[a+184>>2]|0))c[a+200>>2]=c[a+176>>2];else c[g>>2]=c[a+172>>2];c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];tu(f,b,d);i=c[f+4>>2]|0;j=g;c[j>>2]=c[f>>2];c[j+4>>2]=i}l=h;return}function ru(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;if(!d){d=a+160|0;c[d>>2]=(c[d>>2]|0)+1}else{c[a+160>>2]=c[d>>2];c[b>>2]=d+4}return}function su(a){a=a|0;iD(a);Xt(a);return}function tu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function uu(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+48|0;n=t+32|0;f=t+24|0;j=t+8|0;k=t+16|0;m=t;r=a+196|0;q=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=q;c[p+4>>2]=r;p=a+164|0;i=c[p>>2]|0;p=c[p+4>>2]|0;s=j;c[s>>2]=i;c[s+4>>2]=p;s=a+360|0;if(!(c[s>>2]|0)){k=q;j=r}else{c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];Cv(k,n);r=k;k=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=k;c[p+4>>2]=r;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];Cv(m,n);p=m;i=c[p>>2]|0;p=c[p+4>>2]|0;c[j>>2]=i;c[j+4>>2]=p;j=r}d=+h[a+320>>3];g=d*+(k|0)-+h[a+240>>3];h[a+288>>3]=g;e=+h[a+328>>3];o=e*+(j|0)-+h[a+248>>3];h[a+296>>3]=o;h[a+304>>3]=d+g;h[a+312>>3]=e+o;f=a+472|0;if(!(c[(c[a+12>>2]|0)+28>>2]|0)){r=a+456|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2]}else{q=a+456|0;c[f>>2]=c[((c[f>>2]|0)<(c[q>>2]|0)?f:q)>>2];r=a+476|0;c[r>>2]=c[((c[r>>2]|0)<(c[a+460>>2]|0)?f:q)+4>>2];r=a+480|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+464>>2]|0)?f:q)+8>>2];r=a+484|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+468>>2]|0)?f:q)+12>>2]}m=c[a+152>>2]|0;b=+h[a+336>>3];if(!(m&128)){b=(+(k|0)-+(i|0)*.5)*d+b;h[a+256>>3]=b;g=(+(j|0)-+(p|0)*.5)*e+ +h[a+344>>3];o=g;d=d+b;g=g+e}else{d=+h[a+368>>3]*.5;e=b-d;h[a+256>>3]=e;g=+h[a+344>>3];u=+h[a+376>>3]*.5;o=g-u;d=d+b;g=u+g;b=e}h[a+264>>3]=o;h[a+272>>3]=d;h[a+280>>3]=g;if(!(c[s>>2]|0)){e=+h[a+352>>3];h[a+504>>3]=+h[a+384>>3]/e-b;if(!(m&4096|c[42184])){d=+h[a+392>>3]/e;b=o}else{d=-g;b=+h[a+392>>3]/e}h[a+512>>3]=d-b}else{f=a+384|0;e=+h[a+352>>3];h[a+512>>3]=-g-+h[a+392>>3]/e;if(!(m&4096|c[42184]))d=+h[f>>3]/e;else{d=-d;b=+h[f>>3]/e}h[a+504>>3]=d-b}l=t;return}function vu(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;q=s;o=s+40|0;p=s+36|0;r=s+32|0;e=Jm(d,85423)|0;if(!e){j=1;e=121990}else{i=(a[e>>0]|0)==0;j=i&1;e=i?121990:e}h=c[b+152>>2]|0;i=(a[e>>0]|0)==116;if(!(h&256))if(i){m=(yJ(e,122171)|0)==0;k=m?121990:e;m=m?1:j;n=8}else{k=e;m=j;n=8}else if(!(i?!(yJ(e,122171)|0):0)){k=e;m=j;n=8}if((n|0)==8?!((m|0)!=0&(h&33554432|0)!=0):0)if(!((yv(k,o,p)|0)<<24>>24)){ED(b,k);CD(b,122171);r=b+256|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];c[q+20>>2]=c[r+20>>2];c[q+24>>2]=c[r+24>>2];c[q+28>>2]=c[r+28>>2];JD(b,q,1)}else{c[r>>2]=0;i=c[o>>2]|0;ED(b,i);CD(b,122171);xv(d,r)|0;e=c[o+4>>2]|0;h=EA(d,c[42188]|0,0,0)|0;f=+g[p>>2];if(!e)FD(b,122106,h,f);else FD(b,e,h,f);r=(c[r>>2]|0)>>>1&1|2;p=b+256|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[q+16>>2]=c[p+16>>2];c[q+20>>2]=c[p+20>>2];c[q+24>>2]=c[p+24>>2];c[q+28>>2]=c[p+28>>2];JD(b,q,r);$I(i)}e=c[(c[(c[d+16>>2]|0)+8>>2]|0)+88>>2]|0;if(e|0)Av(b,e);l=s;return}function wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[a>>2]|0)+28|0;c[g>>2]=(c[g>>2]|0)+1;g=(d&4|0)!=0;if(!g)xu(a,b,d);a:do if(!(d&1)){if(d&16|0){rD(a);f=eo(b)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}sD(a);pD(a);e=eo(b)|0;while(1){if(!e)break;yu(a,e);e=fo(b,e)|0}qD(a);break}if(!(d&8)){f=eo(b)|0;while(1){if(!f)break a;yu(a,f);e=Qm(b,f)|0;while(1){if(!e)break;yu(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0);zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}}pD(a);e=eo(b)|0;while(1){if(!e)break;if((Au(b,e)|0)<<24>>24)yu(a,e);e=fo(b,e)|0}qD(a);rD(a);f=eo(b)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;if((Bu(b,e)|0)<<24>>24)zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}sD(a)}else{pD(a);e=eo(b)|0;while(1){if(!e)break;yu(a,e);e=fo(b,e)|0}qD(a);rD(a);f=eo(b)|0;while(1){if(!f)break;e=Qm(b,f)|0;while(1){if(!e)break;zu(a,e);e=Sm(b,e)|0}f=fo(b,f)|0}sD(a)}while(0);if(g)xu(a,b,d);return}function xu(e,f,i){e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=l;l=l+128|0;w=P+72|0;N=P+64|0;H=P+112|0;I=P;J=P+104|0;K=f+16|0;L=(i&4|0)!=0;M=e+16|0;x=I+32|0;y=I+16|0;A=I+8|0;B=I+24|0;C=I+48|0;D=I+40|0;E=I+56|0;F=(i&8|0)==0;G=J+4|0;v=1;while(1){j=c[K>>2]|0;if((v|0)>(c[j+180>>2]|0))break;u=c[(c[j+184>>2]|0)+(v<<2)>>2]|0;if((vv(e,u)|0)<<24>>24){if(L)xu(e,u,i);wv(e,u);r=c[M>>2]|0;s=r+208|0;if(!(c[s>>2]|0))t=(b[r+260>>1]&1)!=0;else t=1;_E(Jm(u,85048)|0);if(!(L|t^1)){q=(c[u+16>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[w+16>>2]=c[q+16>>2];c[w+20>>2]=c[q+20>>2];c[w+24>>2]=c[q+24>>2];c[w+28>>2]=c[q+28>>2];eu(e,w);xD(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}c[H>>2]=0;j=xv(u,H)|0;if(!j)p=0;else{GD(e,j);p=c[H>>2]&1}q=u+16|0;j=d[(c[q>>2]|0)+112>>0]|0;do if(!(j&1)){if(j&2|0){j=HA(u,0,91300)|0;k=HA(u,0,91308)|0;O=29;break}if(j&8|0){j=HA(u,0,91316)|0;k=HA(u,0,91324)|0;O=29;break}if(j&4|0){j=HA(u,0,91332)|0;k=HA(u,0,91340)|0;O=29;break}j=Jm(u,122540)|0;if(!j)k=0;else k=(a[j>>0]|0)==0?0:j;j=Jm(u,122531)|0;if(!j)j=k;else j=(a[j>>0]|0)==0?k:j;m=Jm(u,86469)|0;if(m)k=(a[m>>0]|0)==0?k:m;if(!((p|0)!=0&(k|0)!=0)){m=Jm(u,85423)|0;if(m|0?a[m>>0]|0:0){k=m;O=29;break}j=(j|0)==0?122106:j;n=(k|0)==0?119592:k;c[J>>2]=0;if(!p)k=0;else O=31}else O=29}else{j=HA(u,0,91284)|0;k=HA(u,0,91292)|0;O=29}while(0);if((O|0)==29){c[J>>2]=0;j=(j|0)==0?122106:j;n=(k|0)==0?119592:k;O=31}if((O|0)==31){O=0;if(!((yv(n,J,w)|0)<<24>>24)){ED(e,n);k=1}else{ED(e,c[J>>2]|0);k=c[G>>2]|0;m=EA(u,c[42188]|0,0,0)|0;o=+g[w>>2];if(!k)FD(e,122106,m,o);else FD(e,k,m,o);k=(c[H>>2]|0)>>>1&1|2}}m=c[42187]|0;if((m|0?(z=Km(u,m)|0,z|0):0)?a[z>>0]|0:0)PD(e,+FA(u,c[42187]|0,1.0,0.0));p=c[H>>2]|0;do if(p&4){m=EA(u,c[42186]|0,1,0)|0;if(m|k|0){n=c[q>>2]|0;Q=n+16|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];n=n+32|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!m)CD(e,122171);else CD(e,j);zy(e,I,4,p,k)}}else{if(!(p&64)){if(EA(u,c[42186]|0,1,0)|0){CD(e,j);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];JD(e,w,k);break}if(!k)break;CD(e,122171);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];JD(e,w,k);break}Q=c[q>>2]|0;p=Q+16|0;c[I>>2]=c[p>>2];c[I+4>>2]=c[p+4>>2];c[I+8>>2]=c[p+8>>2];c[I+12>>2]=c[p+12>>2];Q=Q+32|0;c[x>>2]=c[Q>>2];c[x+4>>2]=c[Q+4>>2];c[x+8>>2]=c[Q+8>>2];c[x+12>>2]=c[Q+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!(EA(u,c[42186]|0,1,0)|0))CD(e,122171);else CD(e,j);if((du(e,I,n,0)|0)>1){c[N>>2]=En(u)|0;$l(3,85431,N)|0}Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];JD(e,w,0)}while(0);$I(c[J>>2]|0);j=c[(c[q>>2]|0)+12>>2]|0;if(j|0)qw(e,5,j);if(t){if(L){Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];eu(e,w);xD(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}yD(e)}a:do if(!F){k=eo(u)|0;while(1){if(!k)break a;yu(e,k);j=Qm(u,k)|0;while(1){if(!j)break;zu(e,j);j=Sm(u,j)|0}k=fo(u,k)|0}}while(0);zv(e,f);if(!L)xu(e,u,i)}v=v+1|0}l=P;return}function yu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;e=j;h=c[b>>2]|0;i=d+16|0;a:do if(((c[(c[i>>2]|0)+8>>2]|0?(nv(b,so(d)|0,d)|0)<<24>>24:0)?(k=b+256|0,c[e>>2]=c[k>>2],c[e+4>>2]=c[k+4>>2],c[e+8>>2]=c[k+8>>2],c[e+12>>2]=c[k+12>>2],c[e+16>>2]=c[k+16>>2],c[e+20>>2]=c[k+20>>2],c[e+24>>2]=c[k+24>>2],c[e+28>>2]=c[k+28>>2],(ov(d,e)|0)<<24>>24):0)?(f=(c[i>>2]|0)+116|0,g=c[h+28>>2]|0,(g|0)!=(a[f>>0]|0)):0){a[f>>0]=g;MD(b,En(d)|0);e=GA(d,c[42214]|0,174185)|0;if(a[e>>0]|0)MD(b,e);e=GA(d,c[42202]|0,174185)|0;b:do if(a[e>>0]|0){Eu(e)|0;e=168408;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f)break b;if((a[f>>0]|0)!=105)continue;if(!(yJ(f,119127)|0))break a}}while(0);pv(b,d);hb[c[(c[(c[(c[i>>2]|0)+8>>2]|0)+4>>2]|0)+20>>2]&31](b,d);e=c[(c[i>>2]|0)+108>>2]|0;if(e|0?a[e+81>>0]|0:0)qw(b,10,e);qv(b)}while(0);l=j;return}function zu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;g=h;e=b+256|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];c[g+24>>2]=c[e+24>>2];c[g+28>>2]=c[e+28>>2];a:do if((Cu(d,g)|0)<<24>>24?(f=d+-48|0,(Du(b,d)|0)<<24>>24):0){i=d+48|0;e=sJ(En(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;e=_I(e+3+(sJ(En(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)|0)|0;yK(e,En(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;i=(rn(so(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)==0;g=e+(sJ(e)|0)|0;if(i){a[g>>0]=a[122549]|0;a[g+1>>0]=a[122550]|0;a[g+2>>0]=a[122551]|0}else{a[g>>0]=a[122546]|0;a[g+1>>0]=a[122547]|0;a[g+2>>0]=a[122548]|0}JL(e,En(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0;MD(b,e);$I(e);e=GA(d,c[42236]|0,174185)|0;if(a[e>>0]|0)MD(b,e);e=GA(d,c[42230]|0,174185)|0;b:do if(!(a[e>>0]|0))e=0;else{Eu(e)|0;e=168408;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f){e=168408;break b}if((a[f>>0]|0)!=105)continue;if(!(yJ(f,119127)|0))break a}}while(0);Fu(b,d,e);Gu(b,d,e);Hu(b)}while(0);l=h;return}function Au(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(Co(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function Bu(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(Co(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function Cu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+64|0;i=j+32|0;f=j;g=b+16|0;b=c[g>>2]|0;e=c[b+8>>2]|0;if((e|0)!=0?(e=e+8|0,c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+16>>2]=c[e+16>>2],c[f+20>>2]=c[e+20>>2],c[f+24>>2]=c[e+24>>2],c[f+28>>2]=c[e+28>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(mv(f,i)|0)!=0):0)b=1;else h=3;do if((h|0)==3){e=c[b+96>>2]|0;if(e){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];if((DB(e,i)|0)<<24>>24){b=1;break}b=c[g>>2]|0}b=c[b+108>>2]|0;if((b|0?a[b+81>>0]|0:0)?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(DB(b,i)|0)<<24>>24):0){b=1;break}b=0}while(0);l=j;return b|0}function Du(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((c[b+156>>2]|0)>=2?(e=GA(d,c[42235]|0,174185)|0,(iv(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=0;while(1){if((e|0)>=2){e=0;break a}f=(e|0)==1;f=GA(c[((c[d>>2]&3|0)==((f?2:3)|0)?d:d+((f?-1:1)*48|0)|0)+40>>2]|0,c[42212]|0,174185)|0;if(!(a[f>>0]|0)){e=1;break a}if(!((iv(b,f)|0)<<24>>24))e=e+1|0;else{e=1;break}}}else e=0;else e=1;while(0);return e|0}function Eu(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+192|0;o=p+24|0;n=p+16|0;m=p+8|0;k=p;g=p+48|0;j=p+32|0;if(a[85305]|0){dm(168672,128,173952);a[85305]=0}dm(j,128,p+56|0);c[g>>2]=b;h=j+4|0;i=j+8|0;d=0;e=0;a:while(1){f=d;b:while(1)switch(gv(g,j)|0){case 0:{d=21;break a}case 40:if(!(f<<24>>24)){f=1;continue b}else{d=7;break a}case 41:if(!(f<<24>>24)){d=9;break a}else{f=0;continue b}default:break b}if(!(f<<24>>24)){if((e|0)==63){d=12;break}d=c[42169]|0;if(d>>>0>=(c[42170]|0)>>>0){em(168672,1)|0;d=c[42169]|0}c[42169]=d+1;a[d>>0]=0;c[168408+(e<<2)>>2]=c[42169];e=e+1|0}d=c[h>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){em(j,1)|0;d=c[h>>2]|0}a[d>>0]=0;d=c[j>>2]|0;c[h>>2]=d;gm(168672,d)|0;d=c[42169]|0;if(d>>>0>=(c[42170]|0)>>>0){em(168672,1)|0;d=c[42169]|0}c[42169]=d+1;a[d>>0]=0;d=f}do if((d|0)==7){c[k>>2]=b;$l(1,85306,k)|0;c[42102]=0;hm(j)}else if((d|0)==9){c[m>>2]=b;$l(1,85340,m)|0;c[42102]=0;hm(j)}else if((d|0)==12){c[n>>2]=b;$l(0,85368,n)|0;c[42165]=0;hm(j)}else if((d|0)==21){if(f<<24>>24){c[o>>2]=b;$l(1,85391,o)|0;c[42102]=0;hm(j);break}c[168408+(e<<2)>>2]=0;hm(j);d=c[42169]|0;if(d>>>0>=(c[42170]|0)>>>0){em(168672,1)|0;d=c[42169]|0}a[d>>0]=0;c[42169]=c[42168]}while(0);l=p;return 168408}function Fu(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+160|0;y=A+24|0;w=A+20|0;v=A+16|0;o=A;p=A+32|0;x=c[d+152>>2]|0;c[y>>2]=0;c[w>>2]=0;c[v>>2]=0;z=Wt(d)|0;c[z+4>>2]=3;c[z+8>>2]=f;c[z+12>>2]=9;t=f+16|0;n=c[(c[t>>2]|0)+96>>2]|0;if((n|0?(a[n+82>>0]|0)==0:0)?(KA(Jm(f,85121)|0,0)|0)<<24>>24:0){n=z+260|0;b[n>>1]=b[n>>1]|512}if(g|0?c[(c[t>>2]|0)+8>>2]|0:0)GD(d,g);g=c[42251]|0;if((g|0?(i=Km(f,g)|0,i|0):0)?a[i>>0]|0:0)PD(d,+FA(f,c[42251]|0,1.0,0.0));do if(x&16777216|0){g=f+48|0;if((e[(c[(so(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)|0)+16>>2]|0)+178>>1]|0)>2){m=+h[(c[(c[(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+176>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);m=+h[(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+184>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);break}else{n=z+176|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;break}}while(0);if(x&32768|0){n=c[t>>2]|0;g=c[n+96>>2]|0;if(!g)g=c[z+192>>2]|0;else{g=c[g>>2]|0;c[z+192>>2]=g}i=z+196|0;c[i>>2]=g;k=z+204|0;c[k>>2]=g;j=z+200|0;c[j>>2]=g;g=c[n+108>>2]|0;if(g|0)c[i>>2]=c[g>>2];g=c[n+104>>2]|0;if(g|0)c[j>>2]=c[g>>2];g=c[n+100>>2]|0;if(g|0)c[k>>2]=c[g>>2]}if(!(x&65536))j=0;else{dm(o,128,p);c[z+212>>2]=rw(Zt(d,f,o)|0,f)|0;hm(o);g=Jm(f,96264)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else{g=Jm(f,96269)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else i=0}if((q|0)==31)i=rw(g,f)|0;g=Jm(f,85134)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=36;else q=34;do if((q|0)==34){g=Jm(f,85143)|0;if(g|0?a[g>>0]|0:0){q=36;break}if(i|0){g=HL(i)|0;q=39}}while(0);if((q|0)==36){g=rw(g,f)|0;q=39}if((q|0)==39)c[z+208>>2]=g;g=Jm(f,85151)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=44;else q=42;do if((q|0)==42){g=Jm(f,85161)|0;if(g|0?a[g>>0]|0:0){q=44;break}if(i|0){g=HL(i)|0;q=47}}while(0);if((q|0)==44){g=rw(g,f)|0;q=47}if((q|0)==47)c[z+216>>2]=g;g=Jm(f,85170)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=52;else q=50;do if((q|0)==50){g=Jm(f,85179)|0;if(g|0?a[g>>0]|0:0){q=52;break}if(i|0)c[z+220>>2]=HL(i)|0}while(0);if((q|0)==52){c[z+220>>2]=rw(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|128}g=Jm(f,85187)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=59;else q=57;do if((q|0)==57){g=Jm(f,85196)|0;if(g|0?a[g>>0]|0:0){q=59;break}if(i|0)c[z+224>>2]=HL(i)|0}while(0);if((q|0)==59){c[z+224>>2]=rw(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|256}j=i}do if(x&8388608){g=Jm(f,85204)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)i=rw(g,f)|0;else i=0;g=Jm(f,85211)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){q=z+260|0;b[q>>1]=b[q>>1]|64;g=rw(g,f)|0;q=72}else q=70;if((q|0)==70?i|0:0){g=HL(i)|0;q=72}if((q|0)==72)c[z+244>>2]=g;g=Jm(f,85222)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){g=rw(g,f)|0;q=78}else q=76;if((q|0)==76?i|0:0){g=HL(i)|0;q=78}if((q|0)==78)c[z+248>>2]=g;g=Jm(f,85234)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){c[z+252>>2]=rw(g,f)|0;p=z+260|0;b[p>>1]=b[p>>1]|16}else q=82;if((q|0)==82?i|0:0)c[z+252>>2]=HL(i)|0;g=Jm(f,85245)|0;if(g|0?a[g>>0]|0:0){q=z+260|0;b[q>>1]=b[q>>1]|32;c[z+256>>2]=rw(g,f)|0;break}if(i)c[z+256>>2]=HL(i)|0;else i=0}else i=0;while(0);do if(x&4194304|0){g=Jm(f,96229)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=94;else q=92;do if((q|0)==92){g=Jm(f,85256)|0;if(g|0?a[g>>0]|0:0){q=94;break}g=c[z+192>>2]|0;if(g|0)c[z+228>>2]=HL(g)|0}while(0);if((q|0)==94){p=_u(g,f)|0;c[z+228>>2]=rw(p,f)|0;$I(p);p=z+260|0;b[p>>1]=b[p>>1]|1}g=Jm(f,85268)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){p=_u(g,f)|0;c[z+232>>2]=rw(p,f)|0;$I(p);p=z+260|0;b[p>>1]=b[p>>1]|8}else q=100;if((q|0)==100?(r=c[z+192>>2]|0,r|0):0)c[z+232>>2]=HL(r)|0;g=Jm(f,85281)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){r=_u(g,f)|0;c[z+236>>2]=rw(r,f)|0;$I(r);r=z+260|0;b[r>>1]=b[r>>1]|2}else q=105;if((q|0)==105?(s=c[z+200>>2]|0,s|0):0)c[z+236>>2]=HL(s)|0;g=Jm(f,85293)|0;if(g|0?a[g>>0]|0:0){s=_u(g,f)|0;c[z+240>>2]=rw(s,f)|0;$I(s);s=z+260|0;b[s>>1]=b[s>>1]|4;break}g=c[z+204>>2]|0;if(g|0)c[z+240>>2]=HL(g)|0}while(0);$I(j);$I(i);do if(x&4259840|0?(u=c[(c[t>>2]|0)+8>>2]|0,u|0):0){if(!(c[z+208>>2]|0)){if((x&524288|0)==0|(c[z+228>>2]|0)==0)break}else if(!(x&524288))break;m=+h[(c[d+16>>2]|0)+152>>3]*.5;m=m>2.0?m:2.0;i=c[u+4>>2]|0;g=0;while(1){if((g|0)>=(i|0))break;$u(y,w,v,(c[u>>2]|0)+(g*48|0)|0,m);g=g+1|0}j=c[v>>2]|0;c[z+276>>2]=j;k=c[w>>2]|0;c[z+280>>2]=k;if(!(x&8192)){g=0;i=0;while(1){if((i|0)>=(j|0))break;g=(c[k+(i<<2)>>2]|0)+g|0;i=i+1|0}y=c[y>>2]|0;gD(d,y,y,g)|0;g=y}else g=c[y>>2]|0;c[z+284>>2]=g;c[z+264>>2]=2;c[z+272>>2]=g;c[z+268>>2]=c[k>>2]}while(0);vD(d,f);g=c[z+208>>2]|0;if(!((g|0)==0?!(b[z+260>>1]&1):0))xD(d,g,c[z+228>>2]|0,c[z+244>>2]|0,c[z+212>>2]|0);l=A;return}function Gu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0;P=l;l=l+240|0;L=P+224|0;K=P+208|0;x=P+128|0;w=P+112|0;O=P+64|0;C=P+48|0;D=P+32|0;E=P+16|0;F=P;G=P+192|0;H=P+176|0;y=P+160|0;B=P+144|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;M=+h[(c[b+16>>2]|0)+152>>3];_E(Jm(e,85048)|0);J=e+16|0;a:do if(c[(c[J>>2]|0)+8>>2]|0){N=+FA(e,c[42233]|0,1.0,0.0);k=GA(e,c[42221]|0,174185)|0;v=(f|0)!=0;b:do if(v){g=f;while(1){i=g;g=g+4|0;i=c[i>>2]|0;if(!i){o=0;break b}if((a[i>>0]|0)!=116)continue;if(!(yJ(i,95939)|0)){o=1;break}}}else o=0;while(0);j=k;q=0;i=0;c:while(1){switch(a[j>>0]|0){case 0:break c;case 58:{g=q+1|0;break}case 59:{g=q;i=i+1|0;break}default:g=q}j=j+1|0;q=g}n=(q|0)!=0;if((i|0)!=0&n)if(!(Ou(b,e,f,k,q+1|0,N,M)|0))break;else m=122106;else m=k;g=d[(c[J>>2]|0)+115>>0]|0;if(!(g&1))if(!(g&2))if(!(g&8))if(!(g&4)){i=m;j=HA(e,c[42222]|0,m)|0}else{j=91340;g=91332;k=168892;i=168892;p=18}else{j=91324;g=91316;k=168892;i=168892;p=18}else{j=91308;g=91300;k=168892;i=168892;p=18}else{j=91292;g=91284;k=168892;i=168892;p=18}if((p|0)==18){i=c[i>>2]|0;i=HA(e,i,Pu(m,g)|0)|0;g=HA(e,c[k>>2]|0,j)|0;if((i|0)==(m|0)){i=m;j=g}else{CD(b,i);j=g}}if((j|0)!=(m|0))ED(b,j);if(o<<24>>24){i=(a[i>>0]|0)==0?122106:i;g=(a[j>>0]|0)==0?122106:j;CD(b,122171);ED(b,i);u=O;r=c[c[(c[J>>2]|0)+8>>2]>>2]|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));J=eA(O,Qu(e)|0,M,0,0)|0;ID(b,c[J+8>>2]|0,c[J>>2]|0,1);Ru(J);CD(b,i);if((g|0)!=(i|0))ED(b,g);g=c[O+8>>2]|0;if(g|0){I=O+16|0;J=c[O>>2]|0;c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];Tt(b,2,K,L,N,M,g)}g=c[O+12>>2]|0;if(!g)break;J=O+32|0;O=(c[O>>2]|0)+((c[O+4>>2]|0)+-1<<4)|0;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[L>>2]=c[O>>2];c[L+4>>2]=c[O+4>>2];c[L+8>>2]=c[O+8>>2];c[L+12>>2]=c[O+12>>2];Tt(b,3,K,L,N,M,g);break}g=c[J>>2]|0;if(!n){do if(!(a[g+115>>0]&3)){if(a[i>>0]|0){CD(b,i);ED(b,j);break}CD(b,122106);if(!(a[j>>0]|0)){ED(b,122106);break}else{ED(b,j);break}}while(0);k=b+152|0;m=O+4|0;n=O+8|0;o=O+12|0;p=O+32|0;q=O+16|0;j=0;while(1){g=c[(c[J>>2]|0)+8>>2]|0;if((j|0)>=(c[g+4>>2]|0))break a;u=O;r=(c[g>>2]|0)+(j*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[O>>2]|0;i=c[m>>2]|0;do if(!(c[k>>2]&16384)){KD(b,g,i,0,0,0);g=c[n>>2]|0;if(g|0){I=c[O>>2]|0;c[K>>2]=c[q>>2];c[K+4>>2]=c[q+4>>2];c[K+8>>2]=c[q+8>>2];c[K+12>>2]=c[q+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];Tt(b,2,K,L,N,M,g)}g=c[o>>2]|0;if(g|0){I=(c[O>>2]|0)+((c[m>>2]|0)+-1<<4)|0;c[K>>2]=c[p>>2];c[K+4>>2]=c[p+4>>2];c[K+8>>2]=c[p+8>>2];c[K+12>>2]=c[p+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];Tt(b,3,K,L,N,M,g)}if((c[(c[(c[J>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[n>>2]|0)){if(!(v&(c[o>>2]|0)!=0))break}else if(!v)break;GD(b,f)}}else KD(b,g,i,c[n>>2]|0,c[o>>2]|0,0);while(0);j=j+1|0}}I=c[(c[g+8>>2]|0)+4>>2]|0;A=I*48|0;z=_I(A)|0;A=_I(A)|0;t=+(q+2|0)*.5;v=O+4|0;p=C+8|0;q=D+8|0;e=E+8|0;f=F+8|0;o=0;while(1){if((o|0)>=(I|0))break;u=O;r=(c[c[(c[J>>2]|0)+8>>2]>>2]|0)+(o*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[v>>2]|0;c[z+(o*48|0)+4>>2]=g;c[A+(o*48|0)+4>>2]=g;n=g<<4;m=_I(n)|0;c[z+(o*48|0)>>2]=m;n=_I(n)|0;c[A+(o*48|0)>>2]=n;k=c[O>>2]|0;c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];k=0;while(1){if((k|0)>=(g+-1|0))break;c[C>>2]=c[F>>2];c[C+4>>2]=c[F+4>>2];c[C+8>>2]=c[F+8>>2];c[C+12>>2]=c[F+12>>2];g=k+1|0;j=(c[O>>2]|0)+(g<<4)|0;c[D>>2]=c[j>>2];c[D+4>>2]=c[j+4>>2];c[D+8>>2]=c[j+8>>2];c[D+12>>2]=c[j+12>>2];j=m+(k<<4)|0;if(!k){c[K>>2]=c[C>>2];c[K+4>>2]=c[C+4>>2];c[K+8>>2]=c[C+8>>2];c[K+12>>2]=c[C+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];Su(G,K,L);c[j>>2]=c[G>>2];c[j+4>>2]=c[G+4>>2];c[j+8>>2]=c[G+8>>2];c[j+12>>2]=c[G+12>>2]}else{c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];Su(H,K,L);c[j>>2]=c[H>>2];c[j+4>>2]=c[H+4>>2];c[j+8>>2]=c[H+8>>2];c[j+12>>2]=c[H+12>>2]}R=c[O>>2]|0;s=k+2|0;S=R+(s<<4)|0;c[E>>2]=c[S>>2];c[E+4>>2]=c[S+4>>2];c[E+8>>2]=c[S+8>>2];c[E+12>>2]=c[S+12>>2];u=k+3|0;R=R+(u<<4)|0;c[F>>2]=c[R>>2];c[F+4>>2]=c[R+4>>2];c[F+8>>2]=c[R+8>>2];c[F+12>>2]=c[R+12>>2];Q=m+(g<<4)|0;r=m+(s<<4)|0;c[w>>2]=c[C>>2];c[w+4>>2]=c[C+4>>2];c[w+8>>2]=c[C+8>>2];c[w+12>>2]=c[C+12>>2];c[x>>2]=c[D>>2];c[x+4>>2]=c[D+4>>2];c[x+8>>2]=c[D+8>>2];c[x+12>>2]=c[D+12>>2];c[K>>2]=c[S>>2];c[K+4>>2]=c[S+4>>2];c[K+8>>2]=c[S+8>>2];c[K+12>>2]=c[S+12>>2];c[L>>2]=c[R>>2];c[L+4>>2]=c[R+4>>2];c[L+8>>2]=c[R+8>>2];c[L+12>>2]=c[R+12>>2];Tu(y,w,x,K,L);c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[Q>>2]=c[y>>2];c[Q+4>>2]=c[y+4>>2];c[Q+8>>2]=c[y+8>>2];c[Q+12>>2]=c[y+12>>2];h[n+(k<<4)>>3]=+h[C>>3]-+h[j>>3]*t;h[n+(k<<4)+8>>3]=+h[p>>3]-+h[m+(k<<4)+8>>3]*t;h[n+(g<<4)>>3]=+h[D>>3]-+h[Q>>3]*t;h[n+(g<<4)+8>>3]=+h[q>>3]-+h[m+(g<<4)+8>>3]*t;h[n+(s<<4)>>3]=+h[E>>3]-+h[r>>3]*t;h[n+(s<<4)+8>>3]=+h[e>>3]-+h[m+(s<<4)+8>>3]*t;k=u;g=c[v>>2]|0}S=m+(k<<4)|0;c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];Su(B,K,L);c[S>>2]=c[B>>2];c[S+4>>2]=c[B+4>>2];c[S+8>>2]=c[B+8>>2];c[S+12>>2]=c[B+12>>2];h[n+(k<<4)>>3]=+h[F>>3]-+h[S>>3]*t;h[n+(k<<4)+8>>3]=+h[f>>3]-+h[m+(k<<4)+8>>3]*t;o=o+1|0}s=HL(i)|0;f=0;r=i;g=i;j=i;i=s;while(1){i=EL(i,93017)|0;if(!i)break;e=(a[i>>0]|0)==0?122106:i;if((e|0)!=(j|0))if(!(a[(c[J>>2]|0)+115>>0]&3)){CD(b,e);ED(b,e);j=e}else j=e;m=(f|0)==0;n=f>>>0<2;i=0;while(1){if((i|0)>=(I|0))break;o=c[A+(i*48|0)>>2]|0;p=c[z+(i*48|0)>>2]|0;q=c[A+(i*48|0)+4>>2]|0;k=0;while(1){if((k|0)>=(q|0))break;S=o+(k<<4)|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)>>3];S=o+(k<<4)+8|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)+8>>3];k=k+1|0}KD(b,o,q,0,0,0);i=i+1|0}f=f+1|0;r=m?e:r;g=n?e:g;i=0}i=c[O+8>>2]|0;if(!i)i=0;else{if(g){if(!(a[(c[J>>2]|0)+115>>0]&3)){CD(b,g);ED(b,g)}}else g=0;R=O+16|0;S=c[O>>2]|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];Tt(b,2,K,L,N,M,i);i=g}j=O+12|0;g=c[j>>2]|0;if(g|0){if((i|0)!=(r|0)?(a[(c[J>>2]|0)+115>>0]&3)==0:0){CD(b,r);ED(b,r);g=c[j>>2]|0}R=O+32|0;S=(c[O>>2]|0)+((c[v>>2]|0)+-1<<4)|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];Tt(b,3,K,L,N,M,g)}$I(s);g=0;while(1){if((g|0)>=(I|0))break;$I(c[z+(g*48|0)>>2]|0);$I(c[A+(g*48|0)>>2]|0);g=g+1|0}$I(z);$I(A)}while(0);l=P;return}function Hu(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+64|0;r=x+48|0;u=x+32|0;t=x+16|0;s=x;w=c[a+16>>2]|0;v=c[w+8>>2]|0;q=w+208|0;if(!((c[q>>2]|0)==0?!(b[w+260>>1]&1):0))d=3;a:do if((d|0)==3?(yD(a),p=w+276|0,e=c[p>>2]|0,e|0):0){h=w+280|0;d=c[h>>2]|0;i=w+268|0;j=w+284|0;k=w+272|0;m=w+228|0;n=w+244|0;o=w+212|0;f=c[d>>2]|0;g=1;while(1){if((g|0)>=(e|0))break a;c[i>>2]=c[d+(g<<2)>>2];c[k>>2]=(c[j>>2]|0)+(f<<4);xD(a,c[q>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0);yD(a);y=c[h>>2]|0;f=(c[y+(g<<2)>>2]|0)+f|0;g=g+1|0;e=c[p>>2]|0;d=y}}while(0);c[w+268>>2]=0;c[w+272>>2]=0;q=v+16|0;d=c[q>>2]|0;e=c[d+8>>2]|0;if(!e)f=w+260|0;else{p=c[e>>2]|0;d=c[p>>2]|0;y=c[p+8>>2]|0;o=p+16|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[o+4>>2];c[t+8>>2]=c[o+8>>2];c[t+12>>2]=c[o+12>>2];p=p+32|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];if(!y){c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];c[u+12>>2]=c[d+12>>2]}else{c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2]}f=w+260|0;p=b[f>>1]|0;o=c[w+220>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];Iu(a,r,(p<<8&65535)<<16>>16>>15&255,o,(p<<14&65535)<<16>>16>>15&255);p=c[(c[q>>2]|0)+8>>2]|0;o=c[p>>2]|0;p=(c[p+4>>2]|0)+-1|0;d=c[o+(p*48|0)>>2]|0;e=c[o+(p*48|0)+4>>2]|0;y=c[o+(p*48|0)+12>>2]|0;n=o+(p*48|0)+16|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];t=o+(p*48|0)+32|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];if(!y){y=d+(e+-1<<4)|0;c[u>>2]=c[y>>2];c[u+4>>2]=c[y+4>>2];c[u+8>>2]=c[y+8>>2];c[u+12>>2]=c[y+12>>2]}else{c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];c[u+8>>2]=c[s+8>>2];c[u+12>>2]=c[s+12>>2]}d=b[f>>1]|0;y=c[w+224>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];Iu(a,r,(d<<7&65535)<<16>>16>>15&255,y,(d<<13&65535)<<16>>16>>15&255);d=c[q>>2]|0}e=c[d+96>>2]|0;g=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;m=w+216|0;h=c[m>>2]|0;n=w+232|0;i=c[n>>2]|0;o=w+248|0;j=c[o>>2]|0;p=w+212|0;k=c[p>>2]|0;if(!((JA(GA(v,c[42231]|0,122100)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;Ju(a,e,11,g,h,i,j,k,d);j=c[(c[q>>2]|0)+108>>2]|0;k=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;i=c[m>>2]|0;h=c[n>>2]|0;e=c[o>>2]|0;g=c[p>>2]|0;if(!((JA(GA(v,c[42231]|0,122100)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;Ju(a,j,11,k,i,h,e,g,d);Ju(a,c[(c[q>>2]|0)+100>>2]|0,7,(b[f>>1]<<13&65535)<<16>>16>>15<<16>>16,c[w+224>>2]|0,c[w+240>>2]|0,c[w+256>>2]|0,c[p>>2]|0,0);Ju(a,c[(c[q>>2]|0)+104>>2]|0,6,(b[f>>1]<<14&65535)<<16>>16>>15<<16>>16,c[w+220>>2]|0,c[w+236>>2]|0,c[w+252>>2]|0,c[p>>2]|0,0);wD(a);Xt(a);l=x;return}function Iu(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j;i=c[a+16>>2]|0;if(!(e<<24>>24))f=c[i+208>>2]|0;if(!(g<<24>>24==0?((f|0)==0?(b[i+260>>1]&1)==0:0):0)){c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];Nu(a,h)}l=j;return}function Ju(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r;q=c[b+152>>2]|0;if(d|0?a[d+81>>0]|0:0){if(!j)n=0;else{n=ww((sJ(j)|0)+11|0)|0;switch(e|0){case 11:{m=86240;break}case 7:{m=86656;break}case 6:{m=86666;break}default:ma(123205,84925,2730,85060)}c[o>>2]=j;c[o+4>>2]=m;qL(n,85076,o)|0}o=b+16|0;j=(c[o>>2]|0)+12|0;p=c[j>>2]|0;c[j>>2]=e;j=(f|0)!=0|(g|0)!=0;m=(q&4|0)==0;if(j&m){Ku(b,d);xD(b,g,h,i,n)}qw(b,e,d);if(k|0)Lu(b,d,k);if(j){if(!m){Ku(b,d);xD(b,g,h,i,n)}yD(b)}$I(n);c[(c[o>>2]|0)+12>>2]=p}l=r;return}function Ku(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;i=f>>>16^2;c[d+264>>2]=i;j=d+268|0;c[j>>2]=i+2;i=d+272|0;$I(c[i>>2]|0);d=ww(c[j>>2]<<4)|0;c[i>>2]=d;i=b+56|0;j=b+24|0;h[d>>3]=+h[i>>3]-+h[j>>3]*.5;g=b+64|0;b=b+32|0;h[d+8>>3]=+h[g>>3]-+h[b>>3]*.5;h[d+16>>3]=+h[j>>3]*.5+ +h[i>>3];h[d+24>>3]=+h[b>>3]*.5+ +h[g>>3];if(!(e&8192))gD(a,d,d,2)|0;if(!f)_v(d)}return}function Lu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+96|0;g=o+80|0;i=o+32|0;j=o+16|0;k=o;f=c[d>>2]|0;while(1){m=a[f>>0]|0;if(!(m<<24>>24))break;if(!(YJ(m&255)|0)){n=4;break}else f=f+1|0}if((n|0)==4){p=+h[d+24>>3];m=d+56|0;Mu(i,+h[m>>3]+p*.5,+h[d+64>>3]-+h[d+32>>3]*.5);n=i+16|0;Mu(j,+h[i>>3]-p,+h[i+8>>3]);c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];n=i+32|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];WA(k,e,g);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];GD(b,c[(c[b>>2]|0)+336>>2]|0);CD(b,c[d+8>>2]|0);LD(b,i,3)}l=o;return}function Mu(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;j=f>>>16^2;c[d+264>>2]=j;k=d+268|0;c[k>>2]=j+2;j=d+272|0;$I(c[j>>2]|0);d=ww(c[k>>2]<<4)|0;c[j>>2]=d;i=+h[b>>3];h[d>>3]=i+-3.0;g=+h[b+8>>3];h[d+8>>3]=g+-3.0;h[d+16>>3]=i+3.0;h[d+24>>3]=g+3.0;if(!(e&8192))gD(a,d,d,2)|0;if(!f)_v(d)}return}function Ou(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;var j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=l;l=l+256|0;D=J+224|0;C=J+208|0;j=J+192|0;F=J+144|0;G=J+96|0;H=J+48|0;E=J;k=J+240|0;e=au(e,f,k)|0;if((e|0)>1){z=b+48|0;A=so(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;z=En(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;A=(rn(A)|0)!=0;B=En(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[j>>2]=z;c[j+4>>2]=A?85095:85100;c[j+8>>2]=B;$l(3,85105,j)|0;if((e|0)==2)e=1;else I=4}else if((e|0)==1)e=1;else I=4;if((I|0)==4){B=b+16|0;r=c[k>>2]|0;s=r+8|0;t=H+4|0;u=F+8|0;v=F+12|0;w=(d|0)!=0;q=(d|0)==0;x=F+32|0;y=F+4|0;z=F+16|0;A=E+4|0;e=0;p=0;while(1){f=c[(c[B>>2]|0)+8>>2]|0;if((p|0)>=(c[f+4>>2]|0))break;j=F;f=(c[f>>2]|0)+(p*48|0)|0;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));b=1;m=1.0;o=c[s>>2]|0;a:while(1){f=c[o>>2]|0;if(!f)break;k=o+4|0;n=+g[k>>2];do if(n<1.0e-05&n>-1.0e-05)f=b;else{CD(a,f);n=+g[k>>2];m=m-n;e=c[o>>2]|0;if(b|0){Yu(F,n,H,E);k=c[H>>2]|0;KD(a,k,c[t>>2]|0,0,0,0);$I(k);if(m<1.0e-05&m>-1.0e-05){I=11;break a}else{f=0;break}}if(m<1.0e-05&m>-1.0e-05){I=13;break a}j=G;f=E;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));n=+g[k>>2];Yu(G,n/(m+n),H,E);$I(c[G>>2]|0);f=c[H>>2]|0;KD(a,f,c[t>>2]|0,0,0,0);$I(f);f=0}while(0);b=f;o=o+12|0}if((I|0)==11){I=0;$I(c[E>>2]|0)}else if((I|0)==13){I=0;o=c[E>>2]|0;KD(a,o,c[A>>2]|0,0,0,0);$I(o)}if(c[u>>2]|0){CD(a,c[c[s>>2]>>2]|0);ED(a,c[c[s>>2]>>2]|0);k=c[F>>2]|0;o=c[u>>2]|0;c[C>>2]=c[z>>2];c[C+4>>2]=c[z+4>>2];c[C+8>>2]=c[z+8>>2];c[C+12>>2]=c[z+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];Tt(a,2,C,D,h,i,o)}if(c[v>>2]|0){CD(a,e);ED(a,e);k=(c[F>>2]|0)+((c[y>>2]|0)+-1<<4)|0;o=c[v>>2]|0;c[C>>2]=c[x>>2];c[C+4>>2]=c[x+4>>2];c[C+8>>2]=c[x+8>>2];c[C+12>>2]=c[x+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];Tt(a,3,C,D,h,i,o)}do if((c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[u>>2]|0)){if(!(w&(c[v>>2]|0)!=0))break}else if(q)break;GD(a,d)}while(0);p=p+1|0}bu(r);e=0}l=J;return e|0}function Pu(b,d){b=b|0;d=d|0;var e=0,f=0;e=1;a:while(1){switch(a[b>>0]|0){case 0:break a;case 58:{e=e+1|0;break}default:{}}b=b+1|0}f=O((sJ(d)|0)+1|0,e)|0;b=f+10|0;if((c[42166]|0)<(f|0)){c[42166]=b;b=bJ(c[42167]|0,b)|0;c[42167]=b}else b=c[42167]|0;yK(b,d)|0;while(1){e=e+-1|0;b=c[42167]|0;if(!e)break;f=b+(sJ(b)|0)|0;a[f>>0]=58;a[f+1>>0]=0;JL(b,d)|0}return b|0}function Qu(b){b=b|0;var d=0,e=0;d=c[42229]|0;a:do if(!d)e=7;else{d=Km(b,d)|0;switch(a[d>>0]|0){case 110:if(!(yJ(d,120501)|0)){d=1;break a}else{e=7;break a}case 102:if(!(yJ(d,85082)|0)){d=2;break a}else{e=7;break a}case 98:{if(!(yJ(d,85090)|0)){d=3;break a}if(!(yJ(d,96056)|0)){d=4;break a}else{e=7;break a}}default:{e=7;break a}}}while(0);if((e|0)==7){d=(rn(so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0)!=0;d=d?2:1}return d|0}function Ru(a){a=a|0;if(a|0){$I(c[a+8>>2]|0);$I(a)}return}function Su(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[b>>3]-+h[c>>3];f=+h[b+8>>3]-+h[c+8>>3];d=2.0/+C(+(e*e+.0001+f*f));h[a>>3]=d*f;h[a+8>>3]=-(e*d);return}function Tu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0;g=+h[c>>3]-+h[d>>3];i=+h[c+8>>3]-+h[d+8>>3];f=+C(+(i*i+g*g));if(f<.0001){j=+h[b>>3]-+h[e>>3];f=+h[b+8>>3]-+h[e+8>>3];i=f;g=j;f=+C(+(j*j+.0001+f*f))}j=2.0/f;h[a>>3]=i*j;h[a+8>>3]=-(j*g);return}function Uu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(1.0-a/b))}function Vu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5)}function Wu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(a/b))}function Xu(a,b,c){a=+a;b=+b;c=+c;b=a/b;return +((!(b<=.5)?1.0-b:b)*c)}function Yu(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0;p=l;l=l+16|0;o=p;n=c[a+4>>2]|0;j=(n+-1|0)/3|0;if((n+-4|0)>>>0<3){c[d+4>>2]=4;c[d>>2]=ww(64)|0;c[e+4>>2]=4;n=ww(64)|0;c[e>>2]=n;QA(o,c[a>>2]|0,3,b,c[d>>2]|0,n)}else{n=ww(j<<3)|0;g=0;i=c[a>>2]|0;f=0.0;while(1){if((g|0)>=(j|0))break;q=+Zu(i);h[n+(g<<3)>>3]=q;g=g+1|0;i=i+48|0;f=q+f}b=f*b;m=0;f=0.0;while(1){if((j|0)<=(m|0))break;f=+h[n+(m<<3)>>3]+f;if(f>=b)break;m=m+1|0}k=m*3|0;g=k+4|0;i=d+4|0;c[i>>2]=g;c[d>>2]=ww(g<<4)|0;g=((j-m|0)*3|0)+1|0;j=e+4|0;c[j>>2]=g;c[e>>2]=ww(g<<4)|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;r=(c[d>>2]|0)+(g<<4)|0;s=(c[a>>2]|0)+(g<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}g=g+-4|0;i=0;while(1){if((i|0)>=(c[j>>2]|0))break;s=(c[e>>2]|0)+(i<<4)|0;r=(c[a>>2]|0)+(g<<4)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];g=g+1|0;i=i+1|0}q=+h[n+(m<<3)>>3];QA(o,(c[a>>2]|0)+(k<<4)|0,3,(b-f+q)/q,(c[d>>2]|0)+(k<<4)|0,c[e>>2]|0);$I(n)}l=p;return}function Zu(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0;e=+h[a+16>>3];d=+h[a>>3]-e;f=+h[a+24>>3];b=+h[a+8>>3]-f;d=+C(+(b*b+d*d));b=+h[a+32>>3];e=e-b;c=+h[a+40>>3];f=f-c;d=+C(+(f*f+e*e))+d;b=b-+h[a+48>>3];c=c-+h[a+56>>3];return +(d+ +C(+(c*c+b*b)))}function _u(b,d){b=b|0;d=d|0;d=to(d)|0;if((a[(c[d+16>>2]|0)+115>>0]|0)==1)d=zB(b)|0;else d=wB(b,d)|0;return fv(d)|0}function $u(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+1664|0;m=q+1600|0;n=q+800|0;o=q;p=xw(24)|0;c[p+16>>2]=1;j=((c[e+4>>2]|0)+-1|0)/3|0;h=0;i=p;while(1){if((h|0)>=(j|0))break;k=h*3|0;g=0;while(1){if((g|0)==4)break;r=m+(g<<4)|0;s=(c[e>>2]|0)+(g+k<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}h=h+1|0;i=av(m,i)|0}g=0;h=0;i=p;while(1){if(!i){h=p;g=p;break}j=c[i+16>>2]|0;k=n+(g<<4)|0;e=o+(g<<4)|0;bv(h,i,j,k,e,f);g=g+1|0;if(!((g|0)==50|(j|0)==0)){h=i;i=j;continue}cv(a,b,d,g,n,o);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];h=i;g=1;i=j}while(1){if(!h)break;s=c[h+16>>2]|0;$I(g);h=s;g=s}l=q;return}function av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+144|0;f=g+128|0;d=g+64|0;e=g;if(!(gu(a)|0)){QA(f,a,3,.5,d,e);d=av(e,av(d,b)|0)|0}else{d=b+16|0;if((c[d>>2]|0)==1){c[d>>2]=0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2]}d=a+48|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=ev(f,b)|0}l=g;return d|0}function bv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;r=l;l=l+96|0;n=r+80|0;m=r+64|0;k=r+48|0;o=r+32|0;p=r+16|0;q=r;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];do if(a){c[p>>2]=c[a>>2];c[p+4>>2]=c[a+4>>2];c[p+8>>2]=c[a+8>>2];c[p+12>>2]=c[a+12>>2];if(!d){i=+h[o>>3];h[q>>3]=i*2.0-+h[p>>3];j=+h[o+8>>3];h[q+8>>3]=j*2.0-+h[p+8>>3];break}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];j=+h[o+8>>3];break}}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];h[p>>3]=i*2.0-+h[q>>3];j=+h[o+8>>3];h[p+8>>3]=j*2.0-+h[q+8>>3]}while(0);c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[k+12>>2]=c[p+12>>2];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];t=+dv(k,m,n);s=+E(+t)*g;g=+F(+t)*g;h[e>>3]=i+s;h[e+8>>3]=j+g;h[f>>3]=i-s;h[f+8>>3]=j-g;l=r;return}function cv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;i=e<<1;j=c[d>>2]|0;h=0;k=0;while(1){if((h|0)>=(j|0))break;l=(c[(c[b>>2]|0)+(h<<2)>>2]|0)+k|0;h=h+1|0;k=l}l=j+1|0;c[d>>2]=l;l=zw(c[b>>2]|0,l<<2)|0;c[b>>2]=l;c[l+(h<<2)>>2]=i;c[a>>2]=zw(c[a>>2]|0,k+i<<4)|0;b=i+-1+k|0;h=0;while(1){if((h|0)>=(e|0))break;l=(c[a>>2]|0)+(h+k<<4)|0;j=f+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];l=(c[a>>2]|0)+(b-h<<4)|0;j=g+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];h=h+1|0}return}function dv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+h[b+8>>3];d=+h[b>>3];e=+K(+(+h[c+8>>3]-f),+(+h[c>>3]-d));d=+K(+(+h[a+8>>3]-f),+(+h[a>>3]-d));e=e-d;return +((e>0.0?e+-6.283185307179586:e)*.5+d)}function ev(a,b){a=a|0;b=b|0;var d=0;d=xw(24)|0;c[d+16>>2]=0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b+16>>2]=d;return d|0}function fv(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;c=b;f=b;a:while(1){e=0;while(1){d=c;c=c+1|0;d=a[d>>0]|0;if(!(d<<24>>24))break a;if(e<<24>>24){g=5;break}if(d<<24>>24!=92)break;else e=1}b:do if((g|0)==5){g=0;switch(d<<24>>24|0){case 114:{d=13;break b}case 108:case 110:{d=10;break b}default:break b}}while(0);a[f>>0]=d;f=f+1|0}a[f>>0]=0;return b|0}function gv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;while(1){g=a[e>>0]|0;if(!(g<<24>>24)){f=0;break}f=g<<24>>24;if(!(g<<24>>24==44|(YJ(f)|0)!=0)){h=5;break}e=e+1|0}a:do if((h|0)==5){switch(f|0){case 0:{f=0;break a}case 41:case 40:{e=e+1|0;break a}default:{}}h=d+4|0;i=d+8|0;while(1){if((hv(g<<24>>24)|0)<<24>>24){f=1;break a}f=c[h>>2]|0;if(f>>>0>=(c[i>>2]|0)>>>0){em(d,1)|0;f=c[h>>2]|0}c[h>>2]=f+1;a[f>>0]=g;f=e+1|0;e=f;g=a[f>>0]|0}}while(0);c[b>>2]=e;return f|0}function hv(a){a=a|0;switch(a|0){case 0:case 44:case 41:case 40:{a=1;break}default:a=0}return a|0}function iv(a,b){a=a|0;b=b|0;return jv(c[a>>2]|0,c[a+160>>2]|0,c[a+156>>2]|0,b)|0}function jv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+160|0;k=o+20|0;m=o+16|0;n=o;c[k>>2]=0;c[m>>2]=0;dm(n,128,o+24|0);gm(n,f)|0;g=n+4|0;f=c[g>>2]|0;if(f>>>0>=(c[n+8>>2]|0)>>>0){em(n,1)|0;f=c[g>>2]|0}a[f>>0]=0;h=c[n>>2]|0;c[g>>2]=h;i=b+300|0;j=b+296|0;f=0;g=h;a:while(1){if(f){f=1;break}f=GL(g,c[i>>2]|0,k)|0;if(!f){f=0;break}g=GL(f,c[j>>2]|0,m)|0;h=(g|0)!=0;if(h)f=GL(0,c[j>>2]|0,m)|0;else f=0;switch(((f|0)!=0&1)+(h&1)&3){case 2:{g=kv(b,g,0)|0;f=kv(b,f,e)|0;h=(g|0)>(f|0);f=(f&g|0)>-1&(((h?g:f)|0)>=(d|0)&((h?f:g)|0)<=(d|0));g=0;continue a}case 1:{f=(kv(b,g,d)|0)==(d|0);g=0;continue a}default:{f=0;g=0;continue a}}}hm(n);l=o;return f|0}function kv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=a[d>>0]|0;if(!(h<<24>>24==97?(yJ(d,85419)|0)==0:0))f=3;a:do if((f|0)==3){if((lv(d)|0)<<24>>24){e=sM(d)|0;break}g=c[b+308>>2]|0;if(!g)e=-1;else{b=c[b+312>>2]|0;e=1;while(1){if((e|0)>(b|0)){e=-1;break a}f=c[g+(e<<2)>>2]|0;if(h<<24>>24==(a[f>>0]|0)?(yJ(d,f)|0)==0:0)break a;e=e+1|0}}}while(0);return e|0}function lv(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=1;break}if(((c&255)+-48|0)>>>0<10)b=b+1|0;else{b=0;break}}return b|0}function mv(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function nv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c[b+156>>2]|0)>=2?(f=GA(e,c[42212]|0,174185)|0,(iv(b,f)|0)<<24>>24==0):0)if(!(a[f>>0]|0))if(!(Vm(d,e)|0))f=1;else{f=Vm(d,e)|0;while(1){if(!f){f=0;break a}g=GA(f,c[42235]|0,174185)|0;if(!(a[g>>0]|0)){f=1;break a}if((iv(b,g)|0)<<24>>24){f=1;break a}f=Wm(d,f,e)|0}}else f=0;else f=1;while(0);return f|0}function ov(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+64|0;e=d+32|0;f=d;a=(c[a+16>>2]|0)+48|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[f+16>>2]=c[a+16>>2];c[f+20>>2]=c[a+20>>2];c[f+24>>2]=c[a+24>>2];c[f+28>>2]=c[a+28>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];b=(mv(f,e)|0)&255;l=d;return b|0}function pv(a,d){a=a|0;d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0;r=c[a+152>>2]|0;s=Wt(a)|0;c[s+4>>2]=2;c[s+8>>2]=d;c[s+12>>2]=8;if(r&16777216|0){if((e[(c[(so(d)|0)+16>>2]|0)+178>>1]|0)>2){f=+h[(c[(c[d+16>>2]|0)+132>>2]|0)+16>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0)}else f=0.0;h[s+168>>3]=f}k=d+16|0;rv(a,c[(c[k>>2]|0)+104>>2]|0,d);do if(r&4259840|0){if((c[s+208>>2]|0)==0?(b[s+260>>1]&1)==0:0)break;p=Cy(d)|0;l=c[k>>2]|0;f=+h[l+16>>3];q=+h[l+24>>3];l=sv(d)|0;a:do if((p|2|0)==3){n=c[(c[k>>2]|0)+12>>2]|0;if(!((tv(n)|0)<<24>>24))g=0;else g=(c[n+4>>2]|l|0)!=0;if(!((r&524288|0)==0|((n|0)==0|g))){i=n+8|0;o=c[i>>2]|0;o=(o|0)<3?1:o;j=n+4|0;m=c[j>>2]|0;m=(m|0)>1?m:1;p=c[n+44>>2]|0;g=Jm(d,87739)|0;if(!g)g=0;else g=sM(g)|0;g=(g+-4|0)>>>0>56?20:g;if(!(c[j>>2]|l)){c[s+264>>2]=0;i=ww(32)|0;g=c[k>>2]|0;v=+h[g+88>>3];h[i>>3]=f-v;u=+h[g+80>>3]*.5;h[i+8>>3]=q-u;h[i+16>>3]=v+f;h[i+24>>3]=u+q;g=2;break}i=c[i>>2]|0;if(((i|0)<3?+h[n+32>>3]==0.0:0)?+h[n+24>>3]==0.0:0){i=s+264|0;if(c[n>>2]|0){c[i>>2]=1;i=ww(32)|0;h[i>>3]=f;h[i+8>>3]=q;g=(m<<1)+-1|0;h[i+16>>3]=+h[p+(g<<4)>>3]+f;h[i+24>>3]=+h[p+(g<<4)+8>>3]+q;g=2;break}c[i>>2]=2;i=(m<<1)+-1|0;i=uv(+h[p+(i<<4)>>3],+h[p+(i<<4)+8>>3],g)|0;j=0;while(1){if((j|0)>=(g|0))break a;p=i+(j<<4)|0;h[p>>3]=+h[p>>3]+f;p=i+(j<<4)+8|0;h[p>>3]=+h[p>>3]+q;j=j+1|0}}m=O(i,m+-1|0)|0;c[s+264>>2]=2;if((i|0)<(g|0)){i=ww(o<<4)|0;g=0;while(1){if((g|0)>=(o|0)){g=o;break a}n=g+m|0;h[i+(g<<4)>>3]=+h[p+(n<<4)>>3]+f;h[i+(g<<4)+8>>3]=+h[p+(n<<4)+8>>3]+q;g=g+1|0}}else{l=(i|0)/(g|0)|0;i=ww(g<<4)|0;j=0;k=0;while(1){if((j|0)>=(g|0))break a;o=k+m|0;h[i+(j<<4)>>3]=+h[p+(o<<4)>>3]+f;h[i+(j<<4)+8>>3]=+h[p+(o<<4)+8>>3]+q;j=j+1|0;k=k+l|0}}}else t=31}else t=31;while(0);if((t|0)==31){c[s+264>>2]=0;i=ww(32)|0;g=c[k>>2]|0;h[i>>3]=f-+h[g+88>>3];v=+h[g+80>>3]*.5;h[i+8>>3]=q-v;h[i+16>>3]=+h[g+96>>3]+f;h[i+24>>3]=v+q;g=2}if(!(r&8192))gD(a,i,i,g)|0;c[s+272>>2]=i;c[s+268>>2]=g}while(0);_E(Jm(d,85048)|0);tD(a,d);return}function qv(a){a=a|0;uD(a);Xt(a);return}function rv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m;f=Jm(e,96264)|0;i=Jm(e,96229)|0;k=Jm(e,85204)|0;dm(j,128,m+16|0);if(!d)h=0;else h=c[d>>2]|0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))f=Jm(e,96269)|0;g=Zt(b,e,j)|0;if(!i)d=0;else d=_u(i,e)|0;Yt(b,h,f,d,k,g,e)|0;$I(d);hm(j);l=m;return}function sv(b){b=b|0;var d=0,e=0;b=HA(b,c[42202]|0,174185)|0;a:do if(!(a[b>>0]|0))b=0;else{Eu(b)|0;b=0;d=168408;while(1){e=c[d>>2]|0;if(!e)break a;e=(yJ(e,95923)|0)==0;b=e?1:b;d=d+4|0}}while(0);return b|0}function tv(a){a=a|0;var b=0.0;if(((c[a+8>>2]|0)==4?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function uv(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0,f=0.0,g=0;f=6.283185307179586/+(c|0);g=ww(c<<4)|0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;h[g+(e<<4)>>3]=+E(+d)*a;h[g+(e<<4)+8>>3]=+F(+d)*b;d=d+f;e=e+1|0}return g|0}function vv(b,d){b=b|0;d=d|0;var e=0;a:do if((c[b+156>>2]|0)>=2?(e=GA(d,zm(d,0,86583,0)|0,174185)|0,(iv(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=eo(d)|0;while(1){if(!e){e=0;break a}if((nv(b,d,e)|0)<<24>>24){e=1;break a}e=fo(d,e)|0}}else e=0;else e=1;while(0);return e|0}function wv(a,b){a=a|0;b=b|0;var d=0;d=Wt(a)|0;c[d+4>>2]=1;c[d+8>>2]=b;c[d+12>>2]=1;rv(a,c[(c[b+16>>2]|0)+12>>2]|0,b);nD(a,b);return}function xv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;b=Jm(b,86479)|0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){Eu(b)|0;e=168408;b=0;while(1){while(1){f=c[e>>2]|0;if(!f){e=168408;break a}if(!(yJ(f,95923)|0)){g=10;break}if(!(yJ(f,91378)|0)){f=e;g=12;break}if(!(yJ(f,91385)|0)){f=e;g=14;break}if(!(yJ(f,91360)|0)){f=e;g=16;break}e=e+4|0}if((g|0)==10){e=e+4|0;b=b|1;continue}else if((g|0)==12){while(1){h=f;f=f+4|0;g=c[f>>2]|0;c[h>>2]=g;if(!g)break;else g=12}b=b|3;continue}else if((g|0)==14){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=14}b=b|64;continue}else if((g|0)==16){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=16}b=b|4;continue}}}else{e=0;b=0}while(0);c[d>>2]=b;return e|0}function yv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;i=k;j=k+4|0;c[j>>2]=0;m=(au(b,0,j)|0)==0;j=c[j>>2]|0;if((m?(f=c[j>>2]|0,(f|0)>=2):0)?(h=j+8|0,(c[c[h>>2]>>2]|0)!=0):0){if((f|0)>2)$l(0,85446,i)|0;m=xw((sJ(b)|0)+1|0)|0;c[d>>2]=m;yK(m,c[c[h>>2]>>2]|0)|0;if(!(c[(c[h>>2]|0)+12>>2]|0))c[d+4>>2]=0;else{m=c[d>>2]|0;m=m+((sJ(m)|0)+1)|0;c[d+4>>2]=m;yK(m,c[(c[h>>2]|0)+12>>2]|0)|0}b=c[h>>2]|0;do if(!(a[b+8>>0]|0))if(!(a[b+20>>0]|0)){g[e>>2]=0.0;break}else{g[e>>2]=1.0-+g[b+16>>2];break}else c[e>>2]=c[b+4>>2];while(0);bu(j);b=1}else{c[d>>2]=0;bu(j);b=0}l=k;return b|0}function zv(a,b){a=a|0;b=b|0;oD(a,b);Xt(a);return}function Av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;p=x+48|0;s=x+16|0;w=x+8|0;v=x;t=x+80|0;c[t>>2]=1e3;f=xw(16e3)|0;u=a+256|0;e=1;j=1;i=0;q=0;r=c[b+8>>2]|0;while(1){if((q|0)>=(c[b>>2]|0))break;d=c[r>>2]|0;a:do switch(d|0){case 1:case 0:{n=r+80|0;c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];c[s+16>>2]=c[n+16>>2];c[s+20>>2]=c[n+20>>2];c[s+24>>2]=c[n+24>>2];c[s+28>>2]=c[n+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{z=r+8|0;A=r+24|0;h[f>>3]=+h[z>>3]-+h[A>>3];n=r+16|0;y=r+32|0;h[f+8>>3]=+h[n>>3]-+h[y>>3];h[f+16>>3]=+h[A>>3]+ +h[z>>3];h[f+24>>3]=+h[y>>3]+ +h[n>>3];HD(a,f,2,(d|0)==0?j:0);d=j}break}case 3:case 2:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{d=r+8|0;f=Bv(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;ID(a,f,c[d>>2]|0,(c[r>>2]|0)==2?j:0);d=j}break}case 5:case 4:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{d=r+8|0;f=Bv(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;KD(a,f,c[d>>2]|0,0,0,(c[r>>2]|0)==4?j&255:0);d=j}break}case 6:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{d=r+8|0;f=Bv(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;LD(a,f,c[d>>2]|0);d=j}break}case 7:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(mv(s,p)|0))d=j;else{h[f>>3]=+h[r+8>>3];h[f+8>>3]=+h[r+16>>3];d=c[r+112>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];BD(a,p,d);d=j}break}case 8:{ED(a,c[r+8>>2]|0);d=1;break}case 9:{CD(a,c[r+8>>2]|0);d=1;break}case 13:{if((c[r+8>>2]|0)!=2){d=r+16|0;z=c[d+36>>2]|0;A=c[z+12>>2]|0;o=+g[z+8>>2];d=~~(+K(+(+h[r+40>>3]-+h[r+24>>3]),+(+h[r+32>>3]-+h[d>>3]))*57.29577951308232);ED(a,c[z+4>>2]|0);FD(a,A,d,o);d=2;break a}A=c[r+68>>2]|0;j=c[A+4>>2]|0;n=c[A+12>>2]|0;o=+g[A+8>>2];k=+h[r+40>>3];m=+h[r+16>>3];if(k==m?+h[r+48>>3]==+h[r+24>>3]:0)d=0;else d=~~(+H(+((m-k)/+h[r+32>>3]))*57.29577951308232);ED(a,j);FD(a,n,d,o);d=3;break}case 14:{$l(0,85512,v)|0;d=j;break}case 12:{if(!e){e=0;d=j}else{$l(0,85552,w)|0;e=0;d=j}break}case 11:{Eu(c[r+8>>2]|0)|0;GD(a,168408);i=168408;d=j;break}default:d=j}while(0);j=d;q=q+1|0;r=r+120|0}if(i|0)GD(a,c[(c[a>>2]|0)+336>>2]|0);$I(f);l=x;return}function Bv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[b>>2]|0;f=g<<1;f=(f|0)>(e|0)?f:e;if((g|0)<(e|0)){a=zw(a,f<<4)|0;c[b>>2]=f}b=0;while(1){if((b|0)>=(e|0))break;h[a+(b<<4)>>3]=+h[d+(b*24|0)>>3];h[a+(b<<4)+8>>3]=+h[d+(b*24|0)+8>>3];b=b+1|0}return a|0}function Cv(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=c[b+4>>2];c[a+4>>2]=d;return}function Dv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+16|0;f=1;while(1){d=c[g>>2]|0;if((f|0)>(c[d+180>>2]|0))break;e=c[(c[d+184>>2]|0)+(f<<2)>>2]|0;Dv(b,e);d=Jm(e,122540)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(e,122531)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(e,85423)|0;if(d|0?a[d>>0]|0:0)CD(b,d);d=Jm(e,86469)|0;if(d|0?a[d>>0]|0:0)ED(b,d);d=Jm(e,86503)|0;if(d|0?a[d>>0]|0:0)CD(b,d);f=f+1|0}return}function Ev(a){a=a|0;var b=0,d=0,e=0;b=c[42172]|0;if(!b){b=Rl(19684,c[4345]|0)|0;c[42172]=b}if(!(bb[c[b>>2]&31](b,a,4)|0)){d=c[42172]|0;e=c[d>>2]|0;b=HL(a)|0;bb[e&31](d,b,1)|0;b=1}else b=0;return b|0}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function Gv(a){a=a|0;var b=0;b=c[42173]|0;if(!a){if((b|0)>0?(b=b+-1|0,c[42173]=b,(b|0)==0):0){cL(1,c[42174]|0)|0;$I(c[42174]|0)}}else{c[42173]=b+1;if(!b){c[42174]=HL(cL(1,0)|0)|0;cL(1,134865)|0}}return}function Hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+96|0;r=u+72|0;q=u+56|0;p=u+48|0;t=u+32|0;s=u+24|0;e=u+8|0;d=u;if(0)yA();do if((Oo(b,122277,0,1)|0)!=0?(o=b+16|0,(c[(c[o>>2]|0)+8>>2]|0)!=0):0){Iv(b);Jv(a,b);Kv(a,b);Gv(1);j=a+56|0;k=a+184|0;m=a+192|0;n=a+28|0;i=Dr(a)|0;a:while(1){if(!i){g=33;break}d=c[j>>2]|0;if(!d){c[i+20>>2]=0;d=0}else{c[i+20>>2]=c[d+8>>2];d=c[d+12>>2]|0}c[i+24>>2]=d;c[i+12>>2]=a;c[i+28>>2]=c[k>>2];c[i+620>>2]=24748;c[i+624>>2]=14;if(!(c[(c[o>>2]|0)+8>>2]|0)){g=13;break}e=i+52|0;g=cD(i,c[e>>2]|0)|0;c[i+56>>2]=g;switch(g|0){case 999:{g=16;break a}case 21:{d=1;break}case 24:{d=520;break}default:d=Lv(b)|0}f=i+152|0;c[f>>2]=c[f>>2]|d;d=c[m>>2]|0;do if(!d)g=24;else{if(c[d+152>>2]&32|0?(yJ(c[e>>2]|0,c[d+52>>2]|0)|0)==0:0){d=c[42175]|0;if(!d){g=27;break}c[d+8>>2]=i;c[i+36>>2]=c[d+36>>2];g=29;break}eD(d);c[m>>2]=0;c[n>>2]=0;g=24}while(0);if((g|0)==24){c[42175]=0;g=27}if((g|0)==27?(g=0,(dD(i)|0)==0):0){c[m>>2]=i;g=29}if((g|0)==29){c[i+8>>2]=0;c[i+104>>2]=24860;Mv(i);Nv(i);Ov(i,b);Pv(i,b);Qv(i,b);if(!(c[f>>2]&128))hu(i,b);c[42175]=i}i=Er(a)|0}if((g|0)==13){$l(1,85710,s)|0;Gv(0);if(!0){d=-1;break}d=c[13918]|0;s=En(b)|0;v=+zA();c[t>>2]=s;h[t+8>>3]=v;AL(d,85681,t)|0;d=-1;break}else if((g|0)==16){c[p>>2]=c[e>>2];$l(1,85731,p)|0;Gv(0);if(!0){d=-1;break}d=c[13918]|0;t=En(b)|0;v=+zA();c[q>>2]=t;h[q+8>>3]=v;AL(d,85681,q)|0;d=-1;break}else if((g|0)==33){Gv(0);if(!0){d=0;break}d=c[13918]|0;t=En(b)|0;v=+zA();c[r>>2]=t;h[r+8>>3]=v;AL(d,85681,r)|0;d=0;break}}else g=5;while(0);if((g|0)==5){$l(1,85633,d)|0;if(!0)d=-1;else{d=c[13918]|0;t=En(b)|0;v=+zA();c[e>>2]=t;h[e+8>>3]=v;AL(d,85681,e)|0;d=-1}}l=u;return d|0}function Iv(a){a=a|0;var b=0;b=eo(a)|0;while(1){if(!b)break;Vv(a,b);b=fo(a,b)|0}return}function Jv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+24|0;f=o+16|0;j=o+8|0;n=o;c[b+168>>2]=d;g=b+293|0;a[g>>0]=0;e=Jm(d,90530)|0;if(e|0?(c[f>>2]=j,c[f+4>>2]=n,i=dM(e,90537,f)|0,(i|0)>0):0){p=+h[j>>3]*72.0;e=b+208|0;h[e>>3]=p;h[b+200>>3]=p;if((i|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[g>>0]=1}f=b+292|0;a[f>>0]=0;e=Jm(d,86133)|0;if(e|0?(c[k>>2]=j,c[k+4>>2]=n,m=dM(e,90537,k)|0,(m|0)>0):0){p=+h[j>>3]*72.0;e=b+224|0;h[e>>3]=p;h[b+216>>3]=p;if((m|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[f>>0]=1}e=b+294|0;a[e>>0]=0;f=b+232|0;g=d+16|0;n=(c[(c[g>>2]|0)+8>>2]|0)+48|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];f=c[(c[g>>2]|0)+8>>2]|0;if(+h[f+48>>3]>.001?+h[f+56>>3]>.001:0)a[e>>0]=1;c[b+288>>2]=a[f+81>>0]|0?90:0;e=b+196|0;c[e>>2]=86137;f=Jm(d,86140)|0;if(f|0?a[f>>0]|0:0)c[e>>2]=f;n=b+256|0;m=(c[g>>2]|0)+16|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=c[m+20>>2];c[n+24>>2]=c[m+24>>2];c[n+28>>2]=c[m+28>>2];c[42186]=zm(d,0,86535,0)|0;c[42187]=zm(d,0,86520,0)|0;c[b+320>>2]=HA(0,c[42196]|0,93027)|0;h[b+328>>3]=+FA(0,c[42195]|0,14.0,1.0);c[b+336>>2]=19720;c[b+188>>2]=En(d)|0;l=o;return}function Kv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+304|0;f=c[e>>2]|0;if(f|0){$I(f);c[e>>2]=0}f=b+308|0;e=c[f>>2]|0;if(e|0){$I(e);c[f>>2]=0}g=b+316|0;e=c[g>>2]|0;if(e|0){$I(e);c[g>>2]=0}e=Jm(d,85884)|0;if(e){c[b+312>>2]=Tv(b,d,e)|0;e=Jm(d,85891)|0;if(e|0?a[e>>0]|0:0)c[g>>2]=Uv(b,e)|0}else{c[f>>2]=0;c[b+312>>2]=1}return}function Lv(b){b=b|0;b=Jm(b,85852)|0;a:do if(!b)b=0;else switch(a[b>>0]|0){case 110:{if(!(yJ(b+1|0,85864)|0))b=1;else{b=0;break a}break}case 101:{if(!(yJ(b+1|0,85874)|0))b=16;else{b=0;break a}break}default:{b=0;break a}}while(0);return b|0}function Mv(b){b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(!(a[e+292>>0]|0)){if((c[b+56>>2]|0)==300)d=+h[(c[b+68>>2]|0)+8>>3];else d=4.0;h[b+248>>3]=d;h[b+240>>3]=d}else{b=b+240|0;e=e+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}return}function Nv(b){b=b|0;var d=0;d=c[b>>2]|0;a:do if(!(a[d+293>>0]|0))switch(c[b+56>>2]|0){case 300:{d=b+416|0;b=(c[b+84>>2]|0)+8|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break a}case 30:case 21:case 22:case 4:case 3:case 2:{h[b+424>>3]=36.0;h[b+416>>3]=36.0;break a}default:{d=b+416|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;break a}}else{b=b+416|0;d=d+200|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2]}while(0);return}function Ov(b,d){b=b|0;d=d|0;var e=0.0,f=0;f=c[(c[b>>2]|0)+192>>2]|0;e=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];do if(!(e!=0.0)){if(f|0?a[f+128>>0]|0:0){b=b+432|0;f=f+112|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];break}d=b+432|0;if((c[b+56>>2]|0)==300){b=(c[b+84>>2]|0)+40|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break}else{h[b+440>>3]=96.0;h[d>>3]=96.0;break}}else{h[b+440>>3]=e;h[b+432>>3]=e}while(0);return}function Pv(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;t=A+80|0;u=A+56|0;s=A+40|0;v=A+32|0;w=A+24|0;x=A+16|0;y=A+8|0;z=A;m=c[b>>2]|0;o=+h[m+272>>3];q=+h[m+280>>3];p=+h[m+256>>3];r=+h[m+264>>3];f=+h[b+240>>3];e=p-f;h[b+208>>3]=e;i=+h[b+248>>3];j=r-i;h[b+216>>3]=j;f=f+o;h[b+224>>3]=f;i=i+q;h[b+232>>3]=i;e=f-e;j=i-j;h[x>>3]=1.0;g=c[(c[d+16>>2]|0)+8>>2]|0;i=+h[g+64>>3];do if(i>.001?(k=+h[g+72>>3],k>.001):0){e=e==0.0?i:e;f=j==0.0?k:j;if(!(i<e|k<f)?!(k>f&(i>e&(a[g+80>>0]|0)!=0)):0){k=e;j=f;i=1.0;break}n=i/e<k/f;i=(n?i:k)/(n?e:f);h[x>>3]=i;k=e;j=f}else{k=e;i=1.0}while(0);f=(p+o)*.5;h[y>>3]=f;e=(r+q)*.5;h[z>>3]=e;c[b+360>>2]=c[m+288>>2];k=i*k;h[v>>3]=k;j=i*j;h[w>>3]=j;g=Jm(d,85783)|0;if(g){m=_I((sJ(g)|0)+1|0)|0;n=_I((sJ(g)|0)+1|0)|0;c[s>>2]=v;c[s+4>>2]=w;c[s+8>>2]=x;c[s+12>>2]=m;do if((dM(g,85792,s)|0)==4){g=oo(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}else{c[u>>2]=v;c[u+4>>2]=w;c[u+8>>2]=x;c[u+12>>2]=m;c[u+16>>2]=n;if((dM(g,85812,u)|0)!=4){c[t>>2]=v;c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=y;c[t+16>>2]=z;dM(g,85832,t)|0;break}g=oo(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}while(0);$I(m);$I(n);k=+h[v>>3];j=+h[w>>3];i=+h[x>>3];f=+h[y>>3];e=+h[z>>3]}h[b+368>>3]=k;h[b+376>>3]=j;h[b+352>>3]=i;h[b+336>>3]=f;h[b+344>>3]=e;l=A;return}function Qv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0,Q=0.0;M=l;l=l+224|0;J=M+200|0;z=M+168|0;E=M+144|0;I=M+120|0;F=M+96|0;G=M+64|0;e=M+184|0;v=M+176|0;w=M+160|0;y=M+136|0;x=M+112|0;A=M+80|0;B=M+48|0;C=M+32|0;D=M+16|0;K=M+8|0;L=M;u=c[b>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;H=b+368|0;c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];H=b+360|0;if(c[H>>2]|0){c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];Rv(e,J);c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2]}t=b+416|0;c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];if((a[u+294>>0]|0)!=0?(c[b+152>>2]&32|0)!=0:0){i=+h[u+232>>3]-+h[F>>3]*2.0;h[E>>3]=i;k=+h[u+240>>3]-+h[F+8>>3]*2.0;p=E+8|0;h[p>>3]=k;if(!(i<.0001)){o=+h[I>>3];e=~~(o/i);f=b+164|0;c[f>>2]=e;if(o-i*+(e|0)>.0001){e=e+1|0;c[f>>2]=e}}else{c[b+164>>2]=1;e=1}if(!(k<.0001)){g=+h[I+8>>3];f=~~(g/k);j=b+168|0;c[j>>2]=f;if(g-k*+(f|0)>.0001){f=f+1|0;c[j>>2]=f}}else{c[b+168>>2]=1;f=1;g=+h[I+8>>3]}c[b+204>>2]=O(f,e)|0;o=+h[(+h[I>>3]<i?I:E)>>3];h[I>>3]=o;e=p;f=I;m=+h[(g<k?I:E)+8>>3];g=o;j=21}else{if(c[b+68>>2]|0){e=c[b+84>>2]|0;i=+h[e+24>>3]-+h[F>>3]*2.0;i=i<0.0?0.0:i;h[E>>3]=i;o=+h[e+32>>3]-+h[F+8>>3]*2.0;e=E+8|0;h[e>>3]=o;if(o<0.0){f=E;j=17}else e=E}else{h[E+8>>3]=0.0;f=E;e=E;j=17}if((j|0)==17){h[e>>3]=0.0;e=f;i=+h[f>>3]}c[b+204>>2]=1;c[b+168>>2]=1;c[b+164>>2]=1;g=+h[I>>3];if(i<g){h[e>>3]=g;i=g}e=E+8|0;k=+h[e>>3];m=+h[I+8>>3];if(k<m){f=E;j=21}else{r=e;m=k}}if((j|0)==21){h[f+8>>3]=m;r=e;m=+h[e>>3]}n=+h[F>>3];s=b+432|0;k=+h[s>>3]*.013888888888888888*(n*2.0+i);c[b+448>>2]=~~(k+(k>=0.0?.5:-.5));q=F+8|0;k=+h[q>>3];t=b+440|0;o=+h[t>>3]*.013888888888888888*(k*2.0+m);c[b+452>>2]=~~(o+(o>=0.0?.5:-.5));j=b+188|0;p=b+180|0;e=b+172|0;f=u+196|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;Sv(v,b,a[c[f>>2]>>0]|0);u=v;v=c[u+4>>2]|0;e=p;c[e>>2]=c[u>>2];c[e+4>>2]=v;Sv(w,b,a[(c[f>>2]|0)+1>>0]|0);e=w;w=c[e>>2]|0;e=c[e+4>>2]|0;v=j;c[v>>2]=w;c[v+4>>2]=e;w=(c[p>>2]|0)+w|0;if(!((((w|0)>-1?w:0-w|0)|0)==1?(w=(c[b+184>>2]|0)+e|0,(((w|0)>-1?w:0-w|0)|0)==1):0)){Sv(y,b,66);v=y;y=c[v+4>>2]|0;w=p;c[w>>2]=c[v>>2];c[w+4>>2]=y;Sv(x,b,76);w=x;x=c[w+4>>2]|0;y=j;c[y>>2]=c[w>>2];c[y+4>>2]=x;c[z>>2]=c[f>>2];$l(0,85763,z)|0}if(a[(c[(c[d+16>>2]|0)+8>>2]|0)+82>>0]|0){if(i>g){m=(i-g)*.5;h[G>>3]=m}else m=0.0;i=+h[r>>3];o=+h[I+8>>3];if(i>o){i=(i-o)*.5;h[G+8>>3]=i}else i=0.0}else{i=0.0;m=0.0}if(!(c[H>>2]|0))j=1;else{c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];Rv(A,J);c[I>>2]=c[A>>2];c[I+4>>2]=c[A+4>>2];c[I+8>>2]=c[A+8>>2];c[I+12>>2]=c[A+12>>2];c[J>>2]=c[E>>2];c[J+4>>2]=c[E+4>>2];c[J+8>>2]=c[E+8>>2];c[J+12>>2]=c[E+12>>2];Rv(B,J);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];Rv(C,J);c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];Rv(D,J);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];n=+h[F>>3];m=+h[G>>3];k=+h[q>>3];i=+h[G+8>>3];g=+h[I>>3];j=(c[H>>2]|0)==0}o=m+n;h[b+384>>3]=o;P=i+k;h[b+392>>3]=P;N=m+n+g;h[b+400>>3]=N;Q=+h[I+8>>3];n=i+k+Q;h[b+408>>3]=n;m=+h[b+352>>3];h[b+320>>3]=g/m;h[b+328>>3]=Q/m;m=+h[s>>3];o=o*.013888888888888888*m;f=b+456|0;c[f>>2]=~~(o+(o>=0.0?.5:-.5));o=+h[t>>3];k=P*.013888888888888888*o;c[b+460>>2]=~~(k+(k>=0.0?.5:-.5));m=N*.013888888888888888*m;e=b+464|0;c[e>>2]=~~(m+(m>=0.0?.5:-.5));o=n*.013888888888888888*o;c[b+468>>2]=~~(o+(o>=0.0?.5:-.5));if(!j){c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];Cv(K,J);I=K;K=c[I+4>>2]|0;b=f;c[b>>2]=c[I>>2];c[b+4>>2]=K;c[J>>2]=c[e>>2];c[J+4>>2]=c[e+4>>2];Cv(L,J);b=L;K=c[b+4>>2]|0;L=e;c[L>>2]=c[b>>2];c[L+4>>2]=K}l=M;return}function Rv(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b>>3];h[a>>3]=+h[b+8>>3];h[a+8>>3]=c;return}function Sv(a,b,d){a=a|0;b=b|0;d=d|0;d=(d<<24>>24)+-66|0;switch(d>>>1|d<<31|0){case 9:{c[b+176>>2]=(c[b+168>>2]|0)+-1;b=0;d=-1;break}case 0:{b=0;d=1;break}case 5:{b=1;d=0;break}case 8:{c[b+172>>2]=(c[b+164>>2]|0)+-1;b=-1;d=0;break}default:{b=0;d=0}}c[a>>2]=b;c[a+4>>2]=d;return}function Tv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;f=Jm(d,86004)|0;i=b+296|0;c[i>>2]=(f|0)==0?86013:f;d=Jm(d,86017)|0;f=b+300|0;d=(d|0)==0?86030:d;c[f>>2]=d;d=KL(c[i>>2]|0,d)|0;if(d|0){c[g>>2]=a[d>>0];$l(0,86032,g)|0;c[f>>2]=174185}d=HL(e)|0;c[b+304>>2]=d;h=b+308|0;f=0;b=0;while(1){e=EL(d,c[i>>2]|0)|0;if(!e)break;g=b+1|0;if((b|0)<(f|0))d=c[h>>2]|0;else{f=f+128|0;d=c[h>>2]|0;if(!d)d=xw(f<<2)|0;else d=zw(d,f<<2)|0;c[h>>2]=d}c[d+(g<<2)>>2]=e;b=g;d=0}if(b|0){i=zw(c[h>>2]|0,(b<<2)+8|0)|0;c[h>>2]=i;c[i>>2]=0;c[(c[h>>2]|0)+(b+1<<2)>>2]=0}l=j;return b|0}function Uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=a+312|0;d=xw((c[i>>2]<<2)+8|0)|0;e=0;h=1;while(1){g=c[i>>2]|0;if((h|0)>(g|0))break;f=e+1|0;if((jv(a,h,g,b)|0)<<24>>24){c[d+(f<<2)>>2]=h;e=f}h=h+1|0}if(!e){c[j>>2]=b;$l(0,85903,j)|0;$I(d);d=0}else{c[d>>2]=e;c[d+(e+1<<2)>>2]=(c[i>>2]|0)+1}l=k;return d|0}function Vv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0;d=c[b+16>>2]|0;g=+h[d+16>>3];h[d+48>>3]=g-+h[d+88>>3];e=+h[d+24>>3];f=+h[d+80>>3]*.5;h[d+56>>3]=e-f;h[d+64>>3]=+h[d+96>>3]+g;h[d+72>>3]=f+e;b=Qm(a,b)|0;while(1){if(!b)break;Wv(b);b=Sm(a,b)|0}return}function Wv(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a|0)Xv(a);return}function Xv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=l;l=l+240|0;v=C+192|0;u=C+176|0;w=C+64|0;x=C+32|0;y=C;z=C+144|0;A=C+112|0;B=a+4|0;if((c[B>>2]|0)<=0)ma(86171,84925,3994,86185);b=c[a>>2]|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));Yv(x,v);i=x+8|0;j=y+8|0;k=x+16|0;m=y+16|0;n=x+24|0;o=y+24|0;p=w+8|0;q=w+12|0;r=w+32|0;s=w+4|0;t=w+16|0;g=0;while(1){if((g|0)>=(c[B>>2]|0))break;if((g|0)>0){b=(c[a>>2]|0)+(g*48|0)|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));Yv(y,v);h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[p>>2]|0;if(b|0){f=c[w>>2]|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];St(z,u,v,1.0,b);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[q>>2]|0;if(b|0){f=(c[w>>2]|0)+((c[s>>2]|0)+-1<<4)|0;c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];St(A,u,v,1.0,b);c[y>>2]=c[A>>2];c[y+4>>2]=c[A+4>>2];c[y+8>>2]=c[A+8>>2];c[y+12>>2]=c[A+12>>2];c[y+16>>2]=c[A+16>>2];c[y+20>>2]=c[A+20>>2];c[y+24>>2]=c[A+24>>2];c[y+28>>2]=c[A+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}g=g+1|0}B=a+8|0;c[B>>2]=c[x>>2];c[B+4>>2]=c[x+4>>2];c[B+8>>2]=c[x+8>>2];c[B+12>>2]=c[x+12>>2];c[B+16>>2]=c[x+16>>2];c[B+20>>2]=c[x+20>>2];c[B+24>>2]=c[x+24>>2];c[B+28>>2]=c[x+28>>2];l=C;return}function Yv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0;n=l;l=l+48|0;i=n+32|0;j=n;k=c[b+4>>2]|0;if((k|0)<=0)ma(86201,84925,3968,86213);if(((k>>>0)%3|0|0)!=1)ma(86223,84925,3969,86213);m=j+16|0;d=c[b>>2]|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];e=i+8|0;f=j+8|0;g=j+24|0;b=1;while(1){if((b|0)>=(k|0))break;p=+h[d+(b<<4)+8>>3];t=b+1|0;o=+h[d+(t<<4)+8>>3];r=(+h[d+(t<<4)>>3]+ +h[d+(b<<4)>>3])*.5;h[i>>3]=r;p=(o+p)*.5;h[e>>3]=p;o=+h[(+h[j>>3]<r?j:i)>>3];h[j>>3]=o;s=+h[(+h[f>>3]<p?j:i)+8>>3];h[f>>3]=s;r=+h[(+h[m>>3]>r?m:i)>>3];h[m>>3]=r;p=+h[(+h[g>>3]>p?m:i)+8>>3];h[g>>3]=p;t=d+(b+2<<4)|0;c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];q=+h[i>>3];h[j>>3]=+h[(o<q?j:i)>>3];o=+h[e>>3];h[f>>3]=+h[(s<o?j:i)+8>>3];h[m>>3]=+h[(r>q?m:i)>>3];h[g>>3]=+h[(p>o?m:i)+8>>3];b=b+3|0}c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];c[a+16>>2]=c[j+16>>2];c[a+20>>2]=c[j+20>>2];c[a+24>>2]=c[j+24>>2];c[a+28>>2]=c[j+28>>2];l=n;return}function Zv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;q=+h[a>>3];r=+h[c>>3];k=!(q>=r);if((!k?q<=+h[c+16>>3]:0)?(e=+h[a+8>>3],e>=+h[c+8>>3]):0)i=e<=+h[c+24>>3];else i=0;e=+h[b>>3];if((e>=r?e<=+h[c+16>>3]:0)?(f=+h[b+8>>3],f>=+h[c+8>>3]):0){d=f<=+h[c+24>>3];if(!(i^d))if(i&d)d=1;else l=11;else d=0}else if(i)d=0;else l=11;a:do if((l|0)==11){p=+h[a+8>>3];do if(q==e){r=+h[c+8>>3];if(!(k|p>=r^+h[b+8>>3]>=r^1)?q<=+h[c+16>>3]:0){d=0;break a}}else{j=+h[b+8>>3];if(p==j){if(!(q>=r^e>=r))break;if(!(p>=+h[c+8>>3]))break;if(!(p<=+h[c+24>>3]))break;else{d=0;break a}}o=(j-p)/(e-q);l=q<e;g=l?q:e;e=l?e:q;f=(r-q)*o+p;m=+h[c+8>>3];if(!(!(r>=g)|!(r<=e)|!(f>=m))?f<=+h[c+24>>3]:0){d=0;break a}n=+h[c+16>>3];f=(n-r)*o+f;if(f>=m?!(!(n<=e)|(n>=g?!(f<=+h[c+24>>3]):1)):0){d=0;break a}l=p<j;g=l?p:j;f=l?j:p;e=(m-p)/o+q;if(e>=r?!(!(m<=f)|(!(m>=g)|!(e<=n))):0){d=0;break a}p=+h[c+24>>3];q=(p-m)/o+e;if(q>=r?!(!(p<=f)|(!(p>=g)|!(q<=n))):0){d=0;break a}}while(0);d=-1}while(0);return d|0}function _v(a){a=a|0;var b=0,c=0.0;b=a+16|0;c=+h[b>>3];h[a+32>>3]=c;h[a+48>>3]=c;h[a+40>>3]=+h[a+24>>3];h[a+56>>3]=+h[a+8>>3];h[b>>3]=+h[a>>3];return}function $v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;if((c[42176]|0)!=(d|0)){TJ(+(d|0)*.15915494309189535,167112,167120);c[42176]=d}g=+h[b>>3];e=+h[20890];f=+h[b+8>>3];i=+h[20889];h[a>>3]=e*g-i*f;h[a+8>>3]=i*g+f*e;return}function aw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=g;e=-e;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];bw(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];aw(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];$v(a,f,d);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=-g;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];aw(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];bw(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];$v(a,f,360-d|0);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function cw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[c>>3];d=+h[c+8>>3];f=d+ +h[b>>3];e=g+ +h[b+24>>3];d=d+ +h[b+16>>3];h[a>>3]=g+ +h[b+8>>3];h[a+8>>3]=f;h[a+16>>3]=e;h[a+24>>3]=d;return}function dw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;f=+h[a>>3];d=+h[b>>3]-f;g=+h[a+8>>3];e=+h[b+8>>3]-g;f=(+h[c+8>>3]-g)*d-(+h[c>>3]-f)*e;f=f*f;return +(f<1.0e-10?0.0:f/(e*e+d*d))}function ew(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;g=n+8|0;i=n;e=ww(96)|0;m=b+16|0;c[(c[m>>2]|0)+8>>2]=e;e=Jm(b,86250)|0;if(!e){e=Na(86259)|0;if(e|0)k=3}else k=3;if((k|0)==3)Va(86271,e|0,1)|0;e=(fw(b)|0)&255;a[(c[m>>2]|0)+115>>0]=e;if(0==0?(e=Jm(b,86282)|0,c[42178]=e,(e|0)==0):0)c[42178]=c[42177];f=+FA(b,zm(b,0,86292,0)|0,0.0,0.0);h[c[(c[m>>2]|0)+8>>2]>>3]=f;e=Jm(b,86300)|0;a:do if(!e)e=0;else{switch(a[e>>0]|0){case 76:{if(!(yJ(e,86308)|0)){e=1;break a}break}case 66:{if(!(yJ(e,86311)|0)){e=2;break a}break}case 82:{e=(yJ(e,86314)|0)==0;e=e?3:0;break a}default:{e=0;break a}}e=0}while(0);c[(c[m>>2]|0)+116>>2]=e<<2|(d<<24>>24==0?0:e);f=+FA(b,zm(b,0,86317,0)|0,.25,.02);h[i>>3]=f;f=f*72.0;c[(c[m>>2]|0)+248>>2]=~~(f+(f>=0.0?.5:-.5));e=GA(b,zm(b,0,86325,0)|0,0)|0;if(e){c[g>>2]=i;if(dM(e,86246,g)|0){f=+h[i>>3];if(f<.02){h[i>>3]=.02;f=.02}}else{h[i>>3]=.5;f=.5}if(iL(e,86333)|0)a[(c[m>>2]|0)+276>>0]=1}else{h[i>>3]=.5;f=.5}f=f*72.0;c[(c[m>>2]|0)+252>>2]=~~(f+(f>=0.0?.5:-.5));i=(EA(b,zm(b,0,86341,0)|0,0,0)|0)&255;a[(c[m>>2]|0)+243>>0]=i;i=VA(GA(b,zm(b,0,86351,0)|0,0)|0,19732,19748)|0;c[(c[m>>2]|0)+244>>2]=i;gw(b);i=hw(b,86361,(c[(c[m>>2]|0)+8>>2]|0)+64|0)|0;e=c[(c[m>>2]|0)+8>>2]|0;a[e+80>>0]=i;hw(b,86366,e+48|0)|0;e=JA(Jm(b,86371)|0)|0;a[(c[(c[m>>2]|0)+8>>2]|0)+82>>0]=e;e=Jm(b,86378)|0;do if(!e){e=Jm(b,86385)|0;if(e|0){e=(a[e>>0]|32)<<24>>24==108&1;k=27;break}e=Jm(b,86397)|0;if(e|0){e=JA(e)|0;k=27}}else{e=(sM(e)|0)==90&1;k=27}while(0);if((k|0)==27)a[(c[(c[m>>2]|0)+8>>2]|0)+81>>0]=e;c[42180]=VA(Jm(b,86407)|0,19764,19780)|0;a[174080]=JA(Jm(b,86419)|0)|0;c[42182]=0;c[42183]=0;h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=0.0;e=Jm(b,86431)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)k=32;else k=30;if(((k|0)==30?(j=Jm(b,86435)|0,j|0):0)?a[j>>0]|0:0){e=j;k=32}if((k|0)==32){f=+tM(e);h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=f}iw(b);c[42185]=zm(b,0,86446,0)|0;c[42188]=zm(b,0,86455,0)|0;c[42189]=zm(b,0,90530,0)|0;c[42190]=zm(b,1,96049,0)|0;c[42191]=zm(b,1,96043,0)|0;c[42192]=zm(b,1,90671,0)|0;c[42193]=zm(b,1,122540,0)|0;c[42194]=zm(b,1,86469,0)|0;c[42202]=zm(b,1,86479,0)|0;c[42195]=zm(b,1,86485,0)|0;c[42196]=zm(b,1,86494,0)|0;c[42197]=zm(b,1,86503,0)|0;k=zm(b,1,86240,0)|0;c[42199]=k;if(!k)c[42199]=zm(b,1,86240,90527)|0;c[42200]=zm(b,1,86513,0)|0;c[42203]=zm(b,1,86341,0)|0;c[42217]=zm(b,1,86520,0)|0;c[42206]=zm(b,1,86446,0)|0;c[42198]=zm(b,1,90530,0)|0;c[42204]=zm(b,1,86529,0)|0;c[42205]=zm(b,1,86535,0)|0;c[42208]=zm(b,1,86547,0)|0;c[42207]=zm(b,1,86385,0)|0;c[42209]=zm(b,1,86552,0)|0;c[42210]=zm(b,1,86563,0)|0;c[42211]=zm(b,1,122089,0)|0;c[42201]=zm(b,1,86573,0)|0;c[42212]=zm(b,1,86583,0)|0;c[42213]=zm(b,1,86589,0)|0;c[42214]=zm(b,1,86595,0)|0;c[42215]=zm(b,1,86603,0)|0;c[42216]=zm(b,1,86612,0)|0;c[42218]=zm(b,1,86455,0)|0;c[42219]=zm(b,2,86614,0)|0;c[42221]=zm(b,2,122540,0)|0;c[42222]=zm(b,2,86469,0)|0;c[42224]=zm(b,2,86485,0)|0;c[42225]=zm(b,2,86494,0)|0;c[42226]=zm(b,2,86503,0)|0;c[42227]=zm(b,2,86240,0)|0;c[42228]=zm(b,2,86513,0)|0;c[42237]=zm(b,2,86621,0)|0;c[42229]=zm(b,2,86632,0)|0;c[42240]=zm(b,2,86636,0)|0;c[42241]=zm(b,2,86646,0)|0;c[42242]=zm(b,2,86656,0)|0;c[42243]=zm(b,2,86666,0)|0;c[42244]=zm(b,2,86676,0)|0;c[42245]=zm(b,2,86690,0)|0;c[42246]=zm(b,2,86704,0)|0;c[42247]=zm(b,2,86719,0)|0;c[42248]=zm(b,2,86733,0)|0;c[42220]=zm(b,2,86744,0)|0;c[42232]=zm(b,2,86341,0)|0;c[42230]=zm(b,2,86479,0)|0;c[42231]=zm(b,2,86751,0)|0;c[42233]=zm(b,2,86760,0)|0;c[42234]=zm(b,2,86770,0)|0;c[42235]=zm(b,2,86583,0)|0;c[42236]=zm(b,2,86595,0)|0;c[42249]=zm(b,2,86781,0)|0;c[42250]=zm(b,2,86790,0)|0;c[42251]=zm(b,2,86520,0)|0;e=Vt(b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+88>>2]=e;e=Jm(b,86799)|0;if(e|0?a[e>>0]|0:0){b=rw(e,b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+92>>2]=b}l=n;return}function fw(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=HA(a,zm(a,0,86883,0)|0,86891)|0;if(((((((jK(a,86897)|0)!=0?(jK(a,86905)|0)!=0:0)?(jK(a,86912)|0)!=0:0)?(jK(a,86915)|0)!=0:0)?(jK(a,86926)|0)!=0:0)?(jK(a,86937)|0)!=0:0)?(jK(a,86947)|0)!=0:0)if((jK(a,86958)|0)!=0?(jK(a,86964)|0)!=0:0)if((jK(a,86891)|0)!=0?(jK(a,86969)|0)!=0:0){c[b>>2]=a;$l(0,86974,b)|0;a=0}else a=0;else a=2;else a=1;l=d;return a|0}function gw(b){b=b|0;var d=0.0,e=0,f=0;e=Jm(b,86841)|0;a:do if(e|0?(f=a[e>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:{if(f<<24>>24!=97)break a;if(yJ(e,86847)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=4;break a}case 99:{if(f<<24>>24!=99)break a;if(yJ(e,86852)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=3;break a}case 101:{if(f<<24>>24!=101)break a;if(yJ(e,86861)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=5;break a}case 102:{if(f<<24>>24!=102)break a;if(yJ(e,86868)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=2;break a}default:{d=+tM(e);if(!(d>0.0))break a;b=c[(c[b+16>>2]|0)+8>>2]|0;c[b+84>>2]=1;h[b+16>>3]=d;break a}}while(0);return}function hw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o+32|0;i=o+16|0;k=o+8|0;j=o;n=o+40|0;a[n>>0]=0;b=Jm(b,d)|0;do if(b){c[i>>2]=k;c[i+4>>2]=j;c[i+8>>2]=n;i=(dM(b,86825,i)|0)>1;g=+h[k>>3];f=+h[j>>3];if(i&g>0.0&f>0.0){g=g*72.0;h[e>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);g=f*72.0;h[e+8>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);b=(a[n>>0]|0)==33;break}a[n>>0]=0;c[m>>2]=k;c[m+4>>2]=n;m=(dM(b,86835,m)|0)>0;f=+h[k>>3];if(m&f>0.0){g=f*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);h[e>>3]=g;h[e+8>>3]=g;b=(a[n>>0]|0)==33}else b=0}else b=0;while(0);l=o;return b&1|0}function iw(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0;d=Jm(b,86240)|0;do if(d|0?a[d>>0]|0:0){e=(c[(c[b+60>>2]|0)+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|8;e=(dp(d)|0)!=0;g=+FA(b,zm(b,0,86485,0)|0,14.0,1.0);i=HA(b,zm(b,0,86494,0)|0,93027)|0;d=mw(b,d,e?2:0,g,i,HA(b,zm(b,0,86503,0)|0,122106)|0)|0;i=b+16|0;c[(c[i>>2]|0)+12>>2]=d;d=Jm(b,90662)|0;e=(d|0)!=0;do if((to(b)|0)==(b|0)){if(e?(a[d>>0]|0)==116:0){d=1;break}d=0}else{if(e?(a[d>>0]|0)==98:0){d=0;break}d=1}while(0);e=Jm(b,86802)|0;a:do if(e)switch(a[e>>0]|0){case 108:{d=d|2;break a}case 114:{d=d|4;break a}default:break a}while(0);a[(c[i>>2]|0)+275>>0]=d;if((to(b)|0)!=(b|0)){d=c[(c[i>>2]|0)+12>>2]|0;f=+h[d+24>>3]+16.0;g=+h[d+32>>3]+8.0;b=(c[(c[(to(b)|0)+16>>2]|0)+116>>2]&1|0)==0;d=c[i>>2]|0;e=a[d+275>>0]<<1&2;if(b){b=e&255;h[d+48+(b<<4)>>3]=f;h[d+48+(b<<4)+8>>3]=g;break}else{b=(e^3)&255;h[d+48+(b<<4)>>3]=g;h[d+48+(b<<4)+8>>3]=f;break}}}while(0);return}function jw(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+8>>2]|0;do if(!b)b=d;else{d=c[b+88>>2]|0;if(d){yt(d);d=c[e>>2]|0;b=c[d+8>>2]|0;if(!b){b=d;break}}$I(c[b+92>>2]|0);b=c[e>>2]|0}while(0);$I(c[b+8>>2]|0);e=c[e>>2]|0;c[e+8>>2]=0;pw(c[e+12>>2]|0);Uo(a,0,122277);return}function kw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[d>>2]|0;l=d+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;if(a[f>>0]|0){i=xw((sJ(f)|0)+1|0)|0;a[i>>0]=0;j=d+12|0;e=i;a:while(1){b:while(1){h=f+1|0;g=a[f>>0]|0;if(!(g<<24>>24))break a;if(!(g<<24>>24==-1|((g&255)<161|(c[j>>2]|0)!=2))){a[e>>0]=g;h=a[h>>0]|0;g=e+2|0;a[e+1>>0]=h;if(!(h<<24>>24)){e=g;break a}else{e=g;f=f+2|0;continue}}switch(g<<24>>24){case 92:break b;case 10:{k=12;break b}default:{}}a[e>>0]=g;e=e+1|0;f=h}if((k|0)==12){k=0;f=e+1|0;a[e>>0]=0;lw(b,d,i,110);e=f;i=f;f=h;continue}g=a[h>>0]|0;switch(g<<24>>24|0){case 114:case 108:case 110:{g=e+1|0;a[e>>0]=0;lw(b,d,i,a[h>>0]|0);e=g;break}default:{a[e>>0]=g;e=e+1|0;g=i}}i=g;f=(a[h>>0]|0)==0?h:f+2|0}if((i|0)!=(e|0)){a[e>>0]=0;lw(b,d,i,110)}d=d+40|0;c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];c[d+12>>2]=c[l+12>>2]}return}function lw(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+32|0;q=s+16|0;p=s;r=e+76|0;k=b[r>>1]|0;o=e+72|0;m=c[o>>2]|0;if(!m)n=ww((k*56|0)+112|0)|0;else n=yw(m,k+2|0,56,k+1|0)|0;c[o>>2]=n;k=b[r>>1]|0;m=n+(k*56|0)|0;c[m>>2]=f;a[n+(k*56|0)+48>>0]=g;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[41782]=c[e+4>>2];h[20893]=+h[e+16>>3];g=c[d+144>>2]|0;c[n+(k*56|0)+4>>2]=bb[c[g>>2]&31](g,167128,1)|0;qA(p,d,m);j=+h[p>>3];h[q>>3]=j;i=+h[p+8>>3]}else{h[q>>3]=0.0;i=+(~~(+h[e+16>>3]*1.2)|0);h[n+(k*56|0)+40>>3]=i;j=0.0}b[r>>1]=(b[r>>1]|0)+1<<16>>16;r=e+24|0;h[r>>3]=+h[(+h[r>>3]>j?r:q)>>3];r=e+32|0;h[r>>3]=+h[r>>3]+i;l=s;return}function mw(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;r=u+16|0;q=u+8|0;p=u;t=ww(88)|0;switch(Do(b)|0){case 0:{m=0;s=c[b+60>>2]|0;n=b;o=0;break}case 1:{m=0;s=to(so(b)|0)|0;n=0;o=b;break}case 2:{m=b;s=to(so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0;n=0;o=0;break}default:{m=0;s=0;n=0;o=0}}c[t+4>>2]=i;c[t+8>>2]=j;h[t+16>>3]=g;k=s+16|0;j=t+12|0;c[j>>2]=d[(c[k>>2]|0)+115>>0];a:do if(f&4){c[t>>2]=HL(e)|0;if(f&2|0)a[t+82>>0]=1}else switch(f|0){case 2:{c[t>>2]=HL(e)|0;a[t+82>>0]=1;if(!(UF(b,t)|0))break a;switch(Do(b)|0){case 0:{c[p>>2]=En(n)|0;$l(3,87017,p)|0;break a}case 1:{c[q>>2]=En(o)|0;$l(3,87039,q)|0;break a}case 2:{p=En(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;q=(rn(s)|0)!=0;s=En(c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0)|0;c[r>>2]=p;c[r+4>>2]=q?122546:122549;c[r+8>>2]=s;$l(3,87060,r)|0;break a}default:break a}}case 0:{i=nw(e,b,0)|0;c[t>>2]=i;if((c[j>>2]|0)==1)i=zB(i)|0;else i=wB(i,s)|0;$I(c[t>>2]|0);c[t>>2]=i;kw(c[(c[k>>2]|0)+144>>2]|0,t);break a}default:ma(87087,87103,166,87112)}while(0);l=u;return t|0}function nw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;switch(Do(d)|0){case 0:{i=En(d)|0;g=sJ(i)|0;f=c[(c[d+16>>2]|0)+12>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;h=2;y=87135;m=87132;j=90527;o=174185;q=174185;p=0;r=0;n=2;w=f;x=87129}else{v=0;t=2;u=2;s=2;h=2;y=87135;m=87132;j=90527;o=174185;q=174185;p=0;r=0;n=sJ(f)|0;w=f;x=87129}}else{v=0;t=2;u=2;s=2;h=2;y=87135;m=87132;j=90527;o=174185;q=174185;p=0;r=0;n=2;w=87123;x=87129}break}case 1:{i=En(so(d)|0)|0;g=sJ(i)|0;j=En(d)|0;h=sJ(j)|0;f=c[(c[d+16>>2]|0)+104>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;y=87135;m=87132;o=174185;q=174185;p=0;r=0;n=2;w=f;x=87129}else{v=0;t=2;u=2;s=2;y=87135;m=87132;o=174185;q=174185;p=0;r=0;n=sJ(f)|0;w=f;x=87129}}else{v=0;t=2;u=2;s=2;y=87135;m=87132;o=174185;q=174185;p=0;r=0;n=2;w=87123;x=87129}break}case 2:{h=d+48|0;i=En(to(so(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0;g=sJ(i)|0;l=En(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0;k=sJ(l)|0;f=d+16|0;q=c[(c[f>>2]|0)+52>>2]|0;if(!q)r=0;else r=sJ(q)|0;m=En(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;f=c[f>>2]|0;o=c[f+92>>2]|0;if(!o)p=0;else p=sJ(o)|0;j=sJ(m)|0;f=c[f+96>>2]|0;if(f){f=c[f>>2]|0;if(!b)n=2;else n=sJ(f)|0}else{n=2;f=87123}x=(rn(to(so(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0)==0;v=1;t=k;u=j;s=k+2+(r|0?r+1|0:0)+j+(p|0?p+1|0:0)|0;h=2;y=l;j=90527;w=f;x=x?122549:122546;break}default:{v=0;t=2;u=2;s=2;h=2;g=2;y=87135;m=87132;j=90527;i=87126;o=174185;q=174185;p=0;r=0;n=2;w=87123;x=87129}}e=(e|0)==0;l=0;f=b;a:while(1){d=f+1|0;b:do switch(a[f>>0]|0){case 0:break a;case 92:{f=f+2|0;switch(a[d>>0]|0){case 78:{k=h;break b}case 71:{k=g;break b}case 69:{k=s;break b}case 72:{k=u;break b}case 84:{k=t;break b}case 76:{k=n;break b}case 92:{if(!e){k=1;break b}break}default:{}}k=2;break}default:{k=1;f=d}}while(0);l=l+k|0}s=xw(l+1|0)|0;n=(v|0)==0;l=(r|0)==0;d=(p|0)==0;f=s;g=b;c:while(1){k=g+1|0;h=a[g>>0]|0;switch(h<<24>>24){case 0:break c;case 92:break;default:{a[f>>0]=h;f=f+1|0;g=k;continue c}}h=g+2|0;g=a[k>>0]|0;switch(g<<24>>24|0){case 71:{g=i;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 78:{g=j;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 69:{if(n){g=h;continue c}else g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(l)g=x;else{a[f>>0]=58;g=q;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=x;break}else g=g+1|0}}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=m;break}g=g+1|0;f=f+1|0}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(d){g=h;continue c}a[f>>0]=58;g=o;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}else g=g+1|0}}case 84:{g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 72:{g=m;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 76:{g=w;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 92:{if(!e){a[f>>0]=92;f=f+1|0;g=h;continue c}break}default:{}}a[f>>0]=92;a[f+1>>0]=g;f=f+2|0;g=h}a[f>>0]=0;return s|0}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(a|0){d=a;e=0;while(1){if((e|0)>=(b|0))break;if(!e)$I(c[d>>2]|0);g=c[d+8>>2]|0;if(g|0?(f=c[d+12>>2]|0,f|0):0)gb[f&127](g);d=d+56|0;e=e+1|0}$I(a)}return}function pw(d){d=d|0;var e=0;if(d|0){$I(c[d>>2]|0);e=d+72|0;if(a[d+82>>0]|0){e=c[e>>2]|0;if(e|0)FF(e,1)}else ow(c[e>>2]|0,b[d+76>>1]|0);$I(d)}return}function qw(d,e,f){d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;q=u+16|0;r=u;k=c[d+16>>2]|0;s=k+12|0;t=c[s>>2]|0;c[s>>2]=e;if(!(a[f+82>>0]|0)){p=f+76|0;if((b[p>>1]|0)>=1){zD(d,0);CD(d,c[f+8>>2]|0);switch(a[f+80>>0]|0){case 116:{j=+h[f+64>>3];g=+h[f+48>>3]*.5+j;break}case 98:{j=+h[f+64>>3];g=+h[f+48>>3]*-.5+j+ +h[f+32>>3];break}default:{j=+h[f+64>>3];g=+h[f+32>>3]*.5+j}}g=g-+h[f+16>>3];o=r+8|0;h[o>>3]=g;if(b[k+260>>1]&512)h[o>>3]=g-j;m=f+72|0;n=f+56|0;i=f+40|0;e=0;while(1){if((e|0)>=(b[p>>1]|0))break;k=c[m>>2]|0;switch(a[k+(e*56|0)+48>>0]|0){case 108:{g=+h[n>>3]-+h[i>>3]*.5;break}case 114:{g=+h[i>>3]*.5+ +h[n>>3];break}default:g=+h[n>>3]}h[r>>3]=g;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];BD(d,q,k+(e*56|0)|0);h[o>>3]=+h[o>>3]-+h[(c[m>>2]|0)+(e*56|0)+40>>3];e=e+1|0}AD(d);i=18}}else{kF(d,c[f+72>>2]|0,f);i=18}if((i|0)==18)c[s>>2]=t;l=u;return}function rw(a,b){a=a|0;b=b|0;return nw(a,b,1)|0}function sw(a){a=a|0;return tw(a,0)|0}function tw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[42252]|0;if(!e){c[42253]=64;e=xw(64)|0;c[42252]=e}j=d<<24>>24==0;i=0;f=0;h=b;while(1){if(!h)break;d=a[h>>0]|0;if(!(d<<24>>24))break;b=c[42253]|0;if((i|0)>(b+-8|0)){e=b<<1;c[42253]=e;e=zw(c[42252]|0,e)|0;c[42252]=e;e=e+i|0;d=a[h>>0]|0}a:do switch(d<<24>>24){case 38:{if(j?(uw(h)|0)!=0:0)k=18;else{f=5;d=87164}break}case 60:{f=4;d=87187;break}case 62:{f=4;d=87170;break}case 45:{f=5;d=87181;break}default:{if((f|0)!=0&d<<24>>24==32)if((a[f>>0]|0)==32){f=6;d=87157;break a}else{k=18;break a}switch(d<<24>>24){case 34:{f=6;d=87150;break a}case 39:{f=5;d=87175;break a}case 10:if(j){k=18;break a}else{f=5;d=87144;break a}default:{k=18;break a}}}}while(0);if((k|0)==18){k=0;d=j|d<<24>>24!=13;f=d?1:5;d=d?h:87138}g=e+f|0;b=f;while(1){if(!b)break;a[e>>0]=a[d>>0]|0;b=b+-1|0;d=d+1|0;e=e+1|0}b=h;i=f+i|0;e=g;h=h+1|0;f=b}a[e>>0]=0;return c[42252]|0}function uw(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function vw(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[42254]|0;if(!d){c[42255]=64;d=xw(64)|0;c[42254]=d;i=0}else i=0;while(1){if(!b)break;e=a[b>>0]|0;if(!(e<<24>>24))break;f=c[42255]|0;if((i|0)>(f+-8|0)){d=f<<1;c[42255]=d;d=zw(c[42254]|0,d)|0;c[42254]=d;d=d+i|0;e=a[b>>0]|0}switch(e<<24>>24){case 38:{if(!(uw(b)|0)){g=5;e=87164}else j=12;break}case 60:{g=4;e=87187;break}case 62:{g=4;e=87170;break}case 34:{g=6;e=87150;break}case 39:{g=5;e=87175;break}default:j=12}if((j|0)==12){j=0;g=1;e=b}h=d+g|0;f=g;while(1){if(!f)break;a[d>>0]=a[e>>0]|0;f=f+-1|0;e=e+1|0;d=d+1|0}i=g+i|0;d=h;b=b+1|0}a[d>>0]=0;return c[42254]|0}function ww(a){a=a|0;var b=0;if(!a)a=0;else{b=xw(a)|0;WN(b|0,0,a|0)|0;a=b}return a|0}function xw(a){a=a|0;if(a){a=_I(a)|0;if(!a){YL(96532,14,1,c[13918]|0)|0;a=0}}else a=0;return a|0}function yw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=bJ(a,O(d,b)|0)|0;if(!((b|0)!=0&(a|0)==0)){if(b>>>0>e>>>0)WN(a+(O(e,d)|0)|0,0,O(b-e|0,d)|0)|0}else YL(96532,14,1,c[13918]|0)|0;return a|0}function zw(a,b){a=a|0;b=b|0;a=bJ(a,b)|0;if((b|0)!=0&(a|0)==0)YL(96532,14,1,c[13918]|0)|0;return a|0}function Aw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;r=u+40|0;q=u+32|0;n=u+24|0;m=u;s=4;t=_I(40)|0;c[t>>2]=0;f=u+68|0;g=u+64|0;if(0){o=0;ha(57,a|0,f|0,g|0);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=TN(c[i>>2]|0,t|0,s|0)|0;if(!j)Ua(i|0,p|0);z=p}else j=-1;if((j|0)!=1){j=c[13918]|0;i=c[f>>2]|0;f=c[g>>2]|0;o=0;c[m>>2]=87236;c[m+4>>2]=i;c[m+8>>2]=f;c[m+12>>2]=d;c[m+16>>2]=b;aa(13,j|0,87192,m|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){o=0;ea(1);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1)j=6;else{f=z;j=15}}else{f=z;j=15}}else{f=z;j=15}}else j=6;do if((j|0)==6){o=0;f=_(20,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=TN(c[g>>2]|0,t|0,s|0)|0;if(!i)Ua(g|0,p|0);z=p}else i=-1;if((i|0)!=1){if(!f){o=0;ea(2);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}}if((d|0)<1){o=0;ea(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;break}else{c[42256]=(e|0)>-1?e:30;t=SN(169028,1,t|0,s|0)|0;s=z;o=0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;j=15;break}}else{f=z;j=15}}while(0);a:do if((j|0)==15){b:while(1){if(f|0){f=2;break a}o=0;ea(4);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}a=c[13918]|0;m=0;while(1){o=0;j=Z(1)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}if(!j)break;o=0;f=_(21,j|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=TN(c[g>>2]|0,t|0,s|0)|0;if(!i)Ua(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}o=0;ga(24,j|0,f|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}m=m+1|0;do if(((m|0)%100|0|0)==0&0!=0){f=(m|0)%1e3|0;if((f|0)==100){o=0;$(27,87236,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;c[n>>2]=m;aa(13,a|0,87254,n|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}o=0;c[q>>2]=m;aa(13,a|0,87254,q|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=TN(c[g>>2]|0,t|0,s|0)|0;if(!i)Ua(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}if(!f){o=0;$(28,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}while(0);if((m|0)>=(d|0))break}switch(b|0){case 1:{o=0;ea(5);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}case 2:{o=0;ea(6);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}default:{o=0;ea(7);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;ea(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}if(!0){f=0;break a}if((m|0)>99){o=0;$(28,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}}f=c[42296]|0;g=c[42297]|0;o=0;k=+X(1);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=TN(c[i>>2]|0,t|0,s|0)|0;if(!j)Ua(i|0,p|0);z=p}else j=-1;if((j|0)==1){f=z;j=15;continue}o=0;c[r>>2]=87236;c[r+4>>2]=f;c[r+8>>2]=g;c[r+12>>2]=m;h[r+16>>3]=k;aa(13,a|0,87258,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,s|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15}else break}f=0}while(0);$I(t|0);l=u;return f|0}function Bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c[a+16>>2]|0)+192|0;e=0;h=0;while(1){a=c[a>>2]|0;if(!a)break;g=c[a+16>>2]|0;f=c[g+180>>2]|0;a=0;while(1){if(!(c[f+(a<<2)>>2]|0))break;a=a+1|0;e=e+1|0}a=g+164|0;h=h+1|0}c[b>>2]=h;c[d>>2]=e;return}function Cw(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[42299]=b;c[42306]=0;c[42297]=0;c[42296]=0;i=b+16|0;b=(c[i>>2]|0)+192|0;h=0;f=0;while(1){b=c[b>>2]|0;if(!b)break;g=c[b+16>>2]|0;a[g+157>>0]=0;h=h+1|0;c[42296]=h;d=c[g+180>>2]|0;b=0;while(1){if(!(c[d+(b<<2)>>2]|0))break;k=f+1|0;c[42297]=k;b=b+1|0;f=k}b=g+164|0}b=c[42307]|0;if(!b)b=xw(h<<2)|0;else b=zw(b,h<<2)|0;c[42307]=b;c[42308]=0;b=c[42301]|0;if(!b)b=xw(c[42296]<<2)|0;else b=zw(b,c[42296]<<2)|0;c[42301]=b;c[42300]=0;d=1;b=(c[i>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;k=b+16|0;i=c[k>>2]|0;j=i+292|0;c[j>>2]=0;i=c[i+172>>2]|0;h=d;g=0;b=0;while(1){d=c[i+(g<<2)>>2]|0;if(!d)break;f=b+1|0;c[j>>2]=f;b=c[d+16>>2]|0;c[b+160>>2]=0;c[b+164>>2]=-1;if(!h)b=0;else{l=c[d>>2]&3;b=((c[(c[(c[((l|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((l|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)<(e[b+170>>1]|0|0)?0:h}h=b;g=g+1|0;b=f}b=ww((g<<2)+4|0)|0;d=c[k>>2]|0;c[d+264>>2]=b;c[d+268>>2]=0;d=c[d+180>>2]|0;b=0;do{l=b;b=b+1|0}while((c[d+(l<<2)>>2]|0)!=0);d=ww(b<<2)|0;b=c[k>>2]|0;c[b+272>>2]=d;c[b+276>>2]=0;d=h;b=b+164|0}return d|0}function Dw(){var a=0,b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;k=o;m=AA(c[42296]|0)|0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b){j=0;break}d=b+16|0;a=c[d>>2]|0;if(!(c[a+292>>2]|0)){CA(m,b);a=c[d>>2]|0}a=a+164|0}while(1){a=DA(m)|0;if(!a)break;i=a+16|0;a=c[i>>2]|0;f=a+232|0;c[f>>2]=0;d=c[a+172>>2]|0;b=0;h=0;while(1){g=c[d+(b<<2)>>2]|0;if(!g){f=0;break}g=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[(c[g+16>>2]|0)+170>>1]|0)|0;g=(h|0)>(g|0)?h:g;c[f>>2]=g;b=b+1|0;h=g}while(1){b=c[(c[a+180>>2]|0)+(f<<2)>>2]|0;if(!b)break;d=b+-48|0;g=(c[(c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0)+16>>2]|0)+292|0;h=c[g>>2]|0;c[g>>2]=h+-1;if((h|0)<2){CA(m,c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0);a=c[i>>2]|0}f=f+1|0}j=j+1|0}a:do if((j|0)!=(c[42296]|0)){$l(1,87590,k)|0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break a;d=b+16|0;a=c[d>>2]|0;if(c[a+292>>2]|0){k=En(b)|0;a=c[(c[d>>2]|0)+292>>2]|0;c[n>>2]=k;c[n+4>>2]=a;$l(3,87612,n)|0;a=c[d>>2]|0}a=a+164|0}}while(0);BA(m);l=o;return}function Ew(){var b=0,d=0,e=0;b=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+264>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+272>>2]|0;if(d){$I(d);b=c[e>>2]|0}a[b+157>>0]=0;b=b+164|0}return}function Fw(){var a=0,b=0,d=0,e=0,f=0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;a=c[a+16>>2]|0;c[a+280>>2]=0;a=a+164|0}f=ww(c[42296]<<2)|0;e=0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break;d=b+16|0;a=c[d>>2]|0;if(!(c[a+280>>2]|0)){c[f+(e<<2)>>2]=Sw(b)|0;b=e+1|0;a=c[d>>2]|0}else b=e;e=b;a=a+164|0}a=Tw(f,e)|0;while(1){if((Uw(a)|0)<=1)break;Yw(a,c[(Xw(Ww(Vw(a)|0)|0)|0)+8>>2]|0)}$I(a);a=0;while(1){if((a|0)>=(e|0))break;$I(c[f+(a<<2)>>2]|0);a=a+1|0}$I(f);if((c[42300]|0)==((c[42296]|0)+-1|0)){Zw();return}else ma(87335,87365,523,87370)}function Gw(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[42306]|0;f=c[42300]|0;j=c[42301]|0;k=c[42256]|0;b=0;a=0;g=i;while(1){if((g|0)>=(f|0)){h=8;break}e=c[j+(g<<2)>>2]|0;d=c[(c[e+16>>2]|0)+160>>2]|0;if((d|0)<0){if(!a)a=e;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(d|0)?e:a;b=b+1|0;if((b|0)>=(k|0))break}e=g+1|0;c[42306]=e;g=e}if((h|0)==8)if((i|0)>0){f=0;while(1){if((f|0)>=(i|0))break;d=c[j+(f<<2)>>2]|0;e=c[(c[d+16>>2]|0)+160>>2]|0;if((e|0)<0){if(!a)a=d;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(e|0)?d:a;b=b+1|0;if((b|0)>=(k|0))break}f=f+1|0}c[42306]=f}return a|0}function Hw(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;a=c[((b|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[d+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0);a=b?d:a;c[42302]=0;c[42303]=2147483647;d=c[a+16>>2]|0;c[42304]=c[d+284>>2];c[42305]=c[d+288>>2];if(b)Rw(a);else Qw(a);return c[42302]|0}function Iw(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;g=c[b>>2]&3;m=b+-48|0;j=b+48|0;k=b+16|0;g=(c[(c[(c[((g|0)==2?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((g|0)==3?b:j)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[k>>2]|0)+170>>1]|0)|0;do if((g|0)>0){d=c[a>>2]&3;h=c[((d|0)==3?a:a+48|0)+40>>2]|0;i=c[h+16>>2]|0;if(((c[i+276>>2]|0)+(c[i+268>>2]|0)|0)==1){Mw(h,g);break}d=c[((d|0)==2?a:a+-48|0)+40>>2]|0;f=c[d+16>>2]|0;if(((c[f+276>>2]|0)+(c[f+268>>2]|0)|0)==1){Mw(d,0-g|0);break}if((c[i+288>>2]|0)<(c[f+288>>2]|0)){Mw(h,g);break}else{Mw(d,0-g|0);break}}while(0);d=a+16|0;f=c[(c[d>>2]|0)+160>>2]|0;g=c[b>>2]&3;g=Nw(c[((g|0)==3?b:j)+40>>2]|0,c[((g|0)==2?b:m)+40>>2]|0,f,1)|0;i=c[b>>2]&3;if((Nw(c[((i|0)==2?b:m)+40>>2]|0,c[((i|0)==3?b:j)+40>>2]|0,f,0)|0)==(g|0)){c[(c[k>>2]|0)+160>>2]=0-f;c[(c[d>>2]|0)+160>>2]=0;Ow(a,b);n=c[g+16>>2]|0;Pw(g,c[n+280>>2]|0,c[n+284>>2]|0)|0;l=o;return}else{$l(1,87296,n)|0;Ua(169028,1)}}function Jw(){var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;Lw();m=ww((c[42298]<<2)+4|0)|0;d=c[42298]|0;b=0;while(1){if((b|0)>(d|0))break;c[m+(b<<2)>>2]=0;b=b+1|0}b=(c[(c[42299]|0)+16>>2]|0)+192|0;d=b;while(1){d=c[d>>2]|0;if(!d)break;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){l=m+(c[d+232>>2]<<2)|0;c[l>>2]=(c[l>>2]|0)+1}d=d+164|0}while(1){b=c[b>>2]|0;if(!b)break;l=b+16|0;b=c[l>>2]|0;if(!(a[b+156>>0]|0)){h=c[42298]|0;f=c[b+172>>2]|0;k=0;j=0;d=0;while(1){g=c[f+(d<<2)>>2]|0;if(!g)break;n=c[g+16>>2]|0;i=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[n+170>>1]|0)|0;k=(c[n+156>>2]|0)+k|0;j=(j|0)>(i|0)?j:i;d=d+1|0}g=c[b+180>>2]|0;i=0;d=0;while(1){f=c[g+(d<<2)>>2]|0;if(!f)break;o=c[f+16>>2]|0;n=(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[o+170>>1]|0)|0;i=(c[o+156>>2]|0)+i|0;h=(h|0)<(n|0)?h:n;d=d+1|0}d=(j|0)>0?j:0;if((k|0)==(i|0)){g=d;f=d;while(1){d=f+1|0;if((f|0)>=(h|0))break;g=(c[m+(d<<2)>>2]|0)<(c[m+(g<<2)>>2]|0)?d:g;f=d}o=b+232|0;n=m+(c[o>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+-1;n=m+(g<<2)|0;c[n>>2]=(c[n>>2]|0)+1;c[o>>2]=g}d=c[b+264>>2]|0;if(d){$I(d);b=c[l>>2]|0}d=c[b+272>>2]|0;if(d){$I(d);b=c[l>>2]|0}a[b+157>>0]=0}b=b+164|0}$I(m);return}function Kw(){var a=0,b=0,d=0,f=0,g=0,h=0;b=0;while(1){if((b|0)>=(c[42300]|0))break;a=c[(c[42301]|0)+(b<<2)>>2]|0;do if(((c[(c[a+16>>2]|0)+160>>2]|0)==0?(d=Hw(a)|0,d|0):0)?(f=c[d>>2]&3,f=(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0,(f|0)>=2):0){h=c[a>>2]&3;g=c[((h|0)==3?a:a+48|0)+40>>2]|0;a=c[((h|0)==2?a:a+-48|0)+40>>2]|0;if((c[(c[g+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0)){Mw(g,f>>>1);break}else{Mw(a,(f|0)/-2|0);break}}while(0);b=b+1|0}Ew();return}function Lw(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;c[h>>2]=0;c[h>>2]=2147483647;c[42298]=-2147483647;b=(c[(c[42299]|0)+16>>2]|0)+192|0;e=b;g=2147483647;f=-2147483647;while(1){d=c[e>>2]|0;if(!d)break;e=c[d+16>>2]|0;if(!(a[e+156>>0]|0)){j=c[e+232>>2]|0;d=(g|0)<(j|0)?g:j;c[h>>2]=d;f=(f|0)>(j|0)?f:j;c[42298]=f}else d=g;e=e+164|0;g=d}if(g|0){while(1){b=c[b>>2]|0;if(!b)break;b=c[b+16>>2]|0;j=b+232|0;c[j>>2]=(c[j>>2]|0)-g;b=b+164|0}c[42298]=f-g;c[h>>2]=0}l=i;return}function Mw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;a=c[f>>2]|0;e=a+232|0;c[e>>2]=(c[e>>2]|0)-b;e=0;while(1){d=c[(c[a+272>>2]|0)+(e<<2)>>2]|0;if(!d){e=0;break}if((d|0)!=(c[a+280>>2]|0)){Mw(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(c[a+280>>2]|0)){Mw(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}return}function Nw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=(e|0)==0&1;h=0-d|0;f=c[(c[b+16>>2]|0)+288>>2]|0;b=a;while(1){a=c[b+16>>2]|0;if((c[a+284>>2]|0)<=(f|0)?(f|0)<=(c[a+288>>2]|0):0)break;a=c[a+280>>2]|0;i=a+48|0;j=(c[a+16>>2]|0)+160|0;c[j>>2]=(((b|0)==(c[((c[a>>2]&3|0)==3?a:i)+40>>2]|0)?e:g)|0?d:h)+(c[j>>2]|0);j=c[a>>2]&3;i=c[((j|0)==3?a:i)+40>>2]|0;a=c[((j|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[i+16>>2]|0)+288>>2]|0)>(c[(c[a+16>>2]|0)+288>>2]|0)?i:a}return b|0}function Ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+16|0;e=(c[i>>2]|0)+164|0;c[(c[b+16>>2]|0)+164>>2]=c[e>>2];c[(c[42301]|0)+(c[e>>2]<<2)>>2]=b;c[(c[i>>2]|0)+164>>2]=-1;i=(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+276|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+272|0;h=0;while(1){if((h|0)>=(f|0)){k=3;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==3)d=c[e+272>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+272>>2]|0)+(j<<2)>>2]=0;i=(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+268|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+264|0;h=0;while(1){if((h|0)>=(f|0)){k=8;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==8)d=c[e+264>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+264>>2]|0)+(j<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)+16|0;a=c[k>>2]|0;j=c[a+272>>2]|0;a=a+276|0;i=c[a>>2]|0;c[a>>2]=i+1;c[j+(i<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+272>>2]|0)+(c[k+276>>2]<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16|0;i=c[k>>2]|0;j=c[i+264>>2]|0;i=i+268|0;a=c[i>>2]|0;c[i>>2]=a+1;c[j+(a<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+264>>2]|0)+(c[k+268>>2]<<2)>>2]=0;return}function Pw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;c[a+280>>2]=b;c[a+284>>2]=d;f=0;while(1){e=c[(c[a+272>>2]|0)+(f<<2)>>2]|0;if(!e){f=0;break}if((e|0)!=(b|0)){d=Pw(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}while(1){e=c[(c[a+264>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)!=(b|0)){d=Pw(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}c[a+288>>2]=d;return d+1|0}function Qw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+180>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[42304]|0)>(j|0)|(j|0)>(c[42305]|0)?(h=(c[b+232>>2]|0)-(c[(c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[42303]|0)|(c[42302]|0)==0):0){c[42302]=d;c[42303]=h}}else{b=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))Qw(b)}g=g+1|0}while(1){b=c[(c[a+264>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[42303]|0)>0))break;b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){Qw(b);a=c[i>>2]|0}d=d+1|0}return}function Rw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+172>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[42304]|0)>(j|0)|(j|0)>(c[42305]|0)?(h=(c[(c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[b+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[42303]|0)|(c[42302]|0)==0):0){c[42302]=d;c[42303]=h}}else{b=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))Rw(b)}g=g+1|0}while(1){b=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[42303]|0)>0))break;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){Rw(b);a=c[i>>2]|0}d=d+1|0}return}function Sw(a){a=a|0;var b=0;b=ww(16)|0;c[b>>2]=a;c[b+4>>2]=gx(a,b)|0;c[b+12>>2]=b;return b|0}function Tw(a,b){a=a|0;b=b|0;var d=0,e=0;e=ww(8)|0;c[e>>2]=a;c[e+4>>2]=b;d=0;while(1){if((d|0)>=(b|0))break;c[(c[a+(d<<2)>>2]|0)+8>>2]=d;d=d+1|0}d=(b|0)/2|0;while(1){if((d|0)<=-1)break;Yw(e,d);d=d+-1|0}return e|0}function Uw(a){a=a|0;return c[a+4>>2]|0}function Vw(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[a>>2]|0;b=c[f>>2]|0;c[b+8>>2]=-1;d=a+4|0;e=(c[d>>2]|0)+-1|0;c[f>>2]=c[f+(e<<2)>>2];f=c[a>>2]|0;c[(c[f>>2]|0)+8>>2]=0;c[f+(e<<2)>>2]=b;c[d>>2]=e;Yw(a,0);return b|0}function Ww(a){a=a|0;return fx(c[a>>2]|0,0,0)|0}function Xw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0;b=a+16|0;if((c[(c[b>>2]|0)+164>>2]|0)>-1)ma(87384,87365,463,87398);g=a+48|0;d=bx(c[((c[a>>2]&3|0)==3?a:g)+40>>2]|0)|0;i=a+-48|0;f=bx(c[((c[a>>2]&3|0)==2?a:i)+40>>2]|0)|0;h=c[a>>2]&3;b=(c[(c[(c[((h|0)==2?a:i)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?a:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[b>>2]|0)+170>>1]|0)|0;if((c[d+8>>2]|0)==-1)cx(c[d>>2]|0,0,b);else cx(c[f>>2]|0,0,0-b|0);dx(a);return ex(d,f)|0}function Yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]|0;g=c[a+4>>2]|0;while(1){a=b<<1;f=a+2|0;a=a|1;if(!((a|0)<(g|0)?(c[(c[h+(a<<2)>>2]|0)+4>>2]|0)<(c[(c[h+(b<<2)>>2]|0)+4>>2]|0):0))a=b;if((f|0)>=(g|0))break;d=h+(f<<2)|0;e=c[d>>2]|0;if((f|0)==(b|0)?1:(c[e+4>>2]|0)>=(c[(c[h+(a<<2)>>2]|0)+4>>2]|0))break;i=h+(b<<2)|0;a=c[i>>2]|0;c[i>>2]=e;c[d>>2]=a;c[(c[i>>2]|0)+8>>2]=b;c[a+8>>2]=f;b=f}return}function Zw(){Pw(c[(c[(c[42299]|0)+16>>2]|0)+192>>2]|0,0,1)|0;_w(c[(c[(c[42299]|0)+16>>2]|0)+192>>2]|0,0);return}function _w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;d=0;while(1){a=c[f>>2]|0;e=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!e){e=0;break}if((e|0)!=(b|0))_w(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e);d=d+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(b|0)){_w(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,d);a=c[f>>2]|0}e=e+1|0}if(b|0)$w(b);return}function $w(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;e=c[d+16>>2]|0;if((c[e+280>>2]|0)==(a|0))i=1;else{e=c[((b|0)==2?a:a+-48|0)+40>>2]|0;i=-1;d=e;e=c[e+16>>2]|0}g=c[e+180>>2]|0;b=0;f=0;while(1){h=c[g+(f<<2)>>2]|0;if(!h)break;b=(ax(h,d,i)|0)+b|0;f=f+1|0}g=c[e+172>>2]|0;e=0;while(1){f=c[g+(e<<2)>>2]|0;if(!f)break;b=(ax(f,d,i)|0)+b|0;e=e+1|0}c[(c[a+16>>2]|0)+160>>2]=b;return}function ax(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=(h|0)==3?a:a+48|0;e=c[i+40>>2]|0;if((e|0)==(b|0))e=c[((h|0)==2?a:a+-48|0)+40>>2]|0;g=c[b+16>>2]|0;f=c[(c[e+16>>2]|0)+288>>2]|0;if((c[g+284>>2]|0)<=(f|0)?(f|0)<=(c[g+288>>2]|0):0){f=c[a+16>>2]|0;if((c[f+164>>2]|0)>-1)e=c[f+160>>2]|0;else e=0;g=1;e=e-(c[f+156>>2]|0)|0}else{g=0;e=c[(c[a+16>>2]|0)+156>>2]|0}i=(c[((d|0)>0?((h|0)==2?a:a+-48|0):i)+40>>2]|0)==(b|0)?1:-1;return (((g?i:0-i|0)|0)<0?0-e|0:e)|0}function bx(a){a=a|0;var b=0,d=0;a=c[(c[a+16>>2]|0)+280>>2]|0;while(1){b=a+12|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[d+12>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function cx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=a+16|0;e=c[h>>2]|0;g=e+232|0;c[g>>2]=(c[g>>2]|0)+d;g=0;while(1){f=c[(c[e+264>>2]|0)+(g<<2)>>2]|0;if(!f){g=0;break}f=c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0;if((f|0)!=(b|0)){cx(f,a,d);e=c[h>>2]|0}g=g+1|0}while(1){f=c[(c[e+272>>2]|0)+(g<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((f|0)!=(b|0)){cx(f,a,d);e=c[h>>2]|0}g=g+1|0}return}function dx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;d=(c[b+16>>2]|0)+164|0;if((c[d>>2]|0)>-1){$l(1,87487,h)|0;Ua(169028,1)}g=c[42300]|0;c[d>>2]=g;d=c[42301]|0;c[42300]=g+1;c[d+(g<<2)>>2]=b;d=c[b>>2]|0;g=b+48|0;e=c[((d&3|0)==3?b:g)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){f=c[42307]|0;d=c[42308]|0;c[42308]=d+1;c[f+(d<<2)>>2]=e;d=c[b>>2]|0}f=b+-48|0;e=c[((d&3|0)==2?b:f)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){i=c[42307]|0;d=c[42308]|0;c[42308]=d+1;c[i+(d<<2)>>2]=e;d=c[b>>2]|0}i=(c[((d&3|0)==3?b:g)+40>>2]|0)+16|0;d=c[i>>2]|0;a[d+157>>0]=1;e=c[d+272>>2]|0;d=d+276|0;g=c[d>>2]|0;c[d>>2]=g+1;c[e+(g<<2)>>2]=b;g=c[i>>2]|0;c[(c[g+272>>2]|0)+(c[g+276>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+180>>2]|0)+((c[i+276>>2]|0)+-1<<2)>>2]|0)){$l(1,87521,h+8|0)|0;Ua(169028,1)}i=(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16|0;e=c[i>>2]|0;a[e+157>>0]=1;f=c[e+264>>2]|0;e=e+268|0;g=c[e>>2]|0;c[e>>2]=g+1;c[f+(g<<2)>>2]=b;b=c[i>>2]|0;c[(c[b+264>>2]|0)+(c[b+268>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+172>>2]|0)+((c[i+268>>2]|0)+-1<<2)>>2]|0)){$l(1,87556,h+16|0)|0;Ua(169028,1)}else{l=h;return}}function ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;while(1){g=a+12|0;d=c[g>>2]|0;if((d|0)==0|(d|0)==(a|0))break;else a=d}while(1){f=b+12|0;d=c[f>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else b=d}if((a|0)!=(b|0)){e=c[a+8>>2]|0;d=c[b+8>>2]|0;do if((e|0)>-1)if((d|0)==-1)h=a;else j=10;else if((d|0)>-1)if((e|0)==-1){h=b;break}else{j=10;break}else ma(87410,87365,327,87457);while(0);if((j|0)==10)h=(c[b+4>>2]|0)<(c[a+4>>2]|0)?a:b;c[f>>2]=h;c[g>>2]=h;c[h+4>>2]=(c[b+4>>2]|0)+(c[a+4>>2]|0);if((c[h+8>>2]|0)>-1)i=h;else ma(87468,87365,335,87457)}else i=a;return i|0}function fx(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=bx(a)|0;if(d){k=c[d>>2]&3;if(((c[(c[(c[((k|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((k|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)!=(e[(c[d+16>>2]|0)+170>>1]|0|0))f=3}else{d=0;f=3}a:do if((f|0)==3){k=a+16|0;j=0;while(1){f=c[k>>2]|0;i=c[(c[f+180>>2]|0)+(j<<2)>>2]|0;if(!i){j=0;break}f=i+16|0;g=i+-48|0;h=c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0;do if((c[(c[f>>2]|0)+164>>2]|0)>-1){if((h|0)!=(b|0))d=fx(h,a,d)|0}else if((bx(h)|0)!=(l|0)){if(d|0?(m=c[i>>2]&3,h=c[d>>2]&3,((c[(c[(c[((m|0)==2?i:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[f>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((h|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=i}while(0);j=j+1|0}while(1){f=c[(c[f+172>>2]|0)+(j<<2)>>2]|0;if(!f)break a;g=f+16|0;h=f+48|0;i=c[((c[f>>2]&3|0)==3?f:h)+40>>2]|0;do if((c[(c[g>>2]|0)+164>>2]|0)>-1){if((i|0)!=(b|0))d=fx(i,a,d)|0}else if((bx(i)|0)!=(l|0)){if(d|0?(i=c[f>>2]&3,m=c[d>>2]&3,((c[(c[(c[((i|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((i|0)==3?f:h)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[g>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((m|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=f}while(0);j=j+1|0;f=c[k>>2]|0}}while(0);return d|0}function gx(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;d=c[l>>2]|0;c[d+280>>2]=b;a=1;h=0;while(1){g=c[(c[d+172>>2]|0)+(h<<2)>>2]|0;if(!g){h=0;break}f=c[g+16>>2]|0;if(((c[f+164>>2]|0)<=-1?(i=c[g>>2]&3,j=g+48|0,k=c[(c[((i|0)==3?g:j)+40>>2]|0)+16>>2]|0,(c[k+280>>2]|0)==0):0)?((c[(c[(c[((i|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[k+232>>2]|0)|0)==(e[f+170>>1]|0|0):0){dx(g);a=(gx(c[((c[g>>2]&3|0)==3?g:j)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}while(1){f=c[(c[d+180>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;if(((c[g+164>>2]|0)<=-1?(m=c[f>>2]&3,n=f+-48|0,o=c[(c[((m|0)==2?f:n)+40>>2]|0)+16>>2]|0,(c[o+280>>2]|0)==0):0)?((c[o+232>>2]|0)-(c[(c[(c[((m|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)==(e[g+170>>1]|0|0):0){dx(f);a=(gx(c[((c[f>>2]&3|0)==2?f:n)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}return a|0}function hx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Jm(a,87620)|0;if(!d)d=30;else d=sM(d)|0;return Aw(a,b,c,d)|0}function ix(a){a=+a;return +((c[42184]|0)==0?a:+h[20895]-a)}function jx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0;r=l;l=l+16|0;q=r;c[42309]=c[(c[(c[d+64>>2]|0)+8>>2]|0)+4>>2];kx(d);i=c[d+16>>2]|0;t=+h[i+32>>3];s=+h[i+40>>3];lx(e,87631,+h[b+352>>3]);lx(e,87638,t*.013888888888888888);lx(e,87638,s*.013888888888888888);mx(e);i=eo(d)|0;while(1){if(!i)break;g=i+16|0;if(!(a[(c[g>>2]|0)+118>>0]|0)){nx(e,87640,Xp(En(i)|0)|0);p=(c[g>>2]|0)+16|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];ox(e,q);if(!(a[(c[(c[g>>2]|0)+104>>2]|0)+82>>0]|0)){b=so(i)|0;b=px(b,c[c[(c[g>>2]|0)+104>>2]>>2]|0)|0}else b=Xp(Km(i,c[42199]|0)|0)|0;lx(e,87638,+h[(c[g>>2]|0)+32>>3]);lx(e,87638,+h[(c[g>>2]|0)+40>>3]);nx(e,87638,b);nx(e,87638,HA(i,c[42202]|0,95889)|0);nx(e,87638,c[c[(c[g>>2]|0)+8>>2]>>2]|0);nx(e,87638,HA(i,c[42193]|0,122106)|0);b=HA(i,c[42194]|0,174185)|0;if(!(a[b>>0]|0))b=HA(i,c[42193]|0,119592)|0;nx(e,87638,b);mx(e)}i=fo(d,i)|0}o=f<<24>>24==0;n=eo(d)|0;while(1){if(!n)break;m=Qm(d,n)|0;while(1){if(!m)break;if(o){f=174185;j=174185}else{j=Jm(m,96242)|0;f=Jm(m,96251)|0;f=f|0?f:174185;j=j|0?j:174185}p=m+16|0;b=c[p>>2]|0;k=c[b+8>>2]|0;a:do if(k){i=c[k+4>>2]|0;b=0;g=0;while(1){if((b|0)>=(i|0))break;u=(c[(c[k>>2]|0)+(b*48|0)+4>>2]|0)+g|0;b=b+1|0;g=u}nx(e,0,96237);qx(e,c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0,j);qx(e,c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0,f);rx(e,g);f=0;while(1){b=c[p>>2]|0;g=c[b+8>>2]|0;if((f|0)>=(c[g+4>>2]|0))break a;i=c[g>>2]|0;g=c[i+(f*48|0)>>2]|0;i=c[i+(f*48|0)+4>>2]|0;b=0;while(1){if((b|0)>=(i|0))break;u=g+(b<<4)|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];ox(e,q);b=b+1|0}f=f+1|0}}while(0);if(c[b+96>>2]|0){u=so(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;nx(e,87638,px(u,c[c[(c[p>>2]|0)+96>>2]>>2]|0)|0);u=(c[(c[p>>2]|0)+96>>2]|0)+56|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];ox(e,q)}nx(e,87638,HA(m,c[42230]|0,95889)|0);nx(e,87638,HA(m,c[42221]|0,122106)|0);mx(e);m=Sm(d,m)|0}n=fo(d,n)|0}sx(87646,e);l=r;return}function kx(a){a=a|0;var b=0.0;if(c[42184]|0){a=c[a+16>>2]|0;b=+h[a+24>>3]+ +h[a+40>>3];h[20895]=b;h[20896]=b*.013888888888888888}return}function lx(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;if(b|0)sx(b,a);h[e>>3]=c;qL(d,87652,e)|0;sx(d,a);l=f;return}function mx(b){b=b|0;a[174081]=10;ab[c[42309]&63](b,174081)|0;return}function nx(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)sx(b,a);sx(c,a);return}function ox(a,b){a=a|0;b=b|0;var d=0.0;lx(a,87638,+h[b>>3]*.013888888888888888);if(!(c[42184]|0))d=+h[b+8>>3];else d=+h[20895]-+h[b+8>>3];lx(a,87638,d*.013888888888888888);return}function px(a,b){a=a|0;b=b|0;var c=0;c=ap(a,b)|0;b=Xp(c)|0;cp(a,c)|0;return b|0}function qx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!(a[(c[d+16>>2]|0)+118>>0]|0))d=Xp(En(d)|0)|0;else{f=so(d)|0;d=px(f,(XJ(En(d)|0,58)|0)+1|0)|0}nx(b,87638,d);if(e|0?a[e>>0]|0:0)nx(b,93017,Xp(e)|0);return}function rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;sx(87638,a);c[f>>2]=b;qL(e,122187,f)|0;sx(e,a);l=d;return}function sx(a,b){a=a|0;b=b|0;ab[c[42309]&63](b,a)|0;return}\nfunction FB(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function GB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n+64|0;j=n+48|0;i=n+32|0;f=n+16|0;g=n;m=a+4|0;d=c[m>>2]|0;if(!d)ma(94759,92694,1637,94767);e=c[a>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)>=(d|0)){h=7;break}d=(c[a>>2]|0)+(e<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if((Zv(i,j,k)|0)!=-1){d=1;break};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];e=e+1|0;d=c[m>>2]|0}do if((h|0)==7){d=c[a+8>>2]|0;if(d|0?(g=a+16|0,h=c[a>>2]|0,c[i>>2]=c[g>>2],c[i+4>>2]=c[g+4>>2],c[i+8>>2]=c[g+8>>2],c[i+12>>2]=c[g+12>>2],c[j>>2]=c[h>>2],c[j+4>>2]=c[h+4>>2],c[j+8>>2]=c[h+8>>2],c[j+12>>2]=c[h+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(HB(i,j,d,k)|0)<<24>>24):0){d=1;break}d=c[a+12>>2]|0;if(d|0?(h=a+32|0,m=(c[a>>2]|0)+((c[m>>2]|0)+-1<<4)|0,c[i>>2]=c[h>>2],c[i+4>>2]=c[h+4>>2],c[i+8>>2]=c[h+8>>2],c[i+12>>2]=c[h+12>>2],c[j>>2]=c[m>>2],c[j+4>>2]=c[m+4>>2],c[j+8>>2]=c[m+8>>2],c[j+12>>2]=c[m+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(HB(i,j,d,k)|0)<<24>>24):0){d=1;break}d=0}while(0);l=n;return d|0}function HB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+160|0;g=m+144|0;f=m+128|0;n=m+96|0;i=m+64|0;j=m+32|0;k=m;o=+h[e+16>>3];c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];St(n,f,g,1.0,d);if(((o>=+h[n>>3]?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],St(i,f,g,1.0,d),+h[i+16>>3]>=+h[e>>3]):0)?(o=+h[e+24>>3],c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],St(j,f,g,1.0,d),o>=+h[j+8>>3]):0)?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],St(k,f,g,1.0,d),+h[k+24>>3]>=+h[e+8>>3]):0)f=1;else f=0;l=m;return f|0}function IB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;a:do if((b|0)!=0?(e=a[b>>0]|0,e<<24>>24!=0):0){do switch(e<<24>>24|0){case 48:{d=2;break a}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{d=10;break a}case 67:case 99:{e=b+1|0;if(!(jK(e,94782)|0)){d=4;break a}if(!(jK(e,94788)|0)){d=12;break a}break}case 70:case 102:{if(!(jK(b+1|0,94796)|0)){d=2;break a}break}case 76:case 108:{if(!(jK(b+1|0,94801)|0)){d=2;break a}break}case 78:case 110:{e=b+1|0;if(!(jK(e,94805)|0)){d=0;break a}if(!(jK(e,94809)|0)){d=2;break a}break}case 79:case 111:{if(!(jK(b+1|0,94811)|0)){d=8;break a}break}case 80:case 112:{if(!(jK(b+1|0,94816)|0)){d=6;break a}break}case 83:case 115:{if(!(jK(b+1|0,94824)|0)){d=10;break a}break}case 84:case 116:{if(!(jK(b+1|0,94830)|0)){d=10;break a}break}case 89:case 121:{if(!(jK(b+1|0,94834)|0)){d=10;break a}break}default:{}}while(0);c[f>>2]=b;$l(0,94837,f)|0}while(0);l=g;return d|0}function JB(d,f){d=d|0;f=f|0;var g=0;g=Jm(d,94878)|0;if(g)if(!(a[g>>0]|0))f=0;else f=IB(g,f)|0;d=(c[d+16>>2]|0)+136|0;b[d>>1]=f|e[d>>1];return}function KB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0;v=l;l=l+32|0;p=v+16|0;r=v;t=e&1;u=e&2;a:do if((c|0)==2){s=+h[a+16>>3];f=+h[a>>3];j=+h[a+24>>3];i=+h[a+8>>3];f=f-(s-f);h[p>>3]=f;h[r>>3]=s;i=i-(j-i);h[p+8>>3]=i;h[r+8>>3]=j}else{g=+h[a>>3];h[r>>3]=g;h[p>>3]=g;j=+h[a+8>>3];m=r+8|0;h[m>>3]=j;n=p+8|0;h[n>>3]=j;e=0;f=g;i=j;while(1){if((e|0)>=(c|0)){s=g;break a}w=a+(e<<4)|0;q=+h[w>>3];k=+h[(q<f?w:p)>>3];h[p>>3]=k;s=+h[a+(e<<4)+8>>3];o=+h[(s<i?w:p)+8>>3];h[n>>3]=o;q=+h[(q>g?w:r)>>3];h[r>>3]=q;s=+h[(s>j?w:r)+8>>3];h[m>>3]=s;e=e+1|0;f=k;i=o;g=q;j=s}}while(0);g=(s-f)*.5;q=g+f;o=(j-i)*.5;k=o+i;if(!t){f=j-k;j=d;i=+F(+j);j=+E(+j);if(!u){g=i*f-k;f=-k-o*i}else{f=i*f;g=k-f;f=f+k}h[b+8>>3]=g;h[b+24>>3]=f;d=j*(s-q);h[b>>3]=q-d;h[b+16>>3]=d+q}else{d=+C(+(o*o+g*g));h[b+8>>3]=u|0?k:-k;h[b>>3]=q;h[b+16>>3]=d*.25;h[b+24>>3]=d}l=v;return}function LB(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=a+16|0;f=c[e>>2]|0;if(!(b<<24>>24)){d=+h[f+32>>3]*36.0;h[f+88>>3]=d;a=f+40|0}else{d=+h[f+40>>3]*36.0;h[f+88>>3]=d;a=f+32|0}h[f+96>>3]=d;h[(c[e>>2]|0)+80>>3]=+h[a>>3]*72.0;return}function MB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;y=l;l=l+16|0;j=y+8|0;x=4;w=_I(40)|0;c[w>>2]=0;s=y;o=0;e=_(22,b|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;a:do if((g|0)!=1){o=0;v=_(23,e<<3|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){e=TN(c[f>>2]|0,w|0,x|0)|0;if(!e)Ua(f|0,p|0);z=p}else e=-1;if((e|0)!=1){if(!(a[174080]|0))t=0;else{o=0;e=Z(2)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=0;k=0;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}t=e}o=0;e=$(31,b|0,94886)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[42367]=0;b:do if(e|0?(i=a[e>>0]|0,i<<24>>24):0){h=e;f=i;g=0;while(1){i=h+1|0;if(!(f<<24>>24))break b;switch(f<<24>>24|0){case 99:{e=8;u=16;break}case 105:{e=18;u=16;break}case 109:{e=1;u=16;break}case 114:{e=4;u=16;break}case 115:{e=2;u=16;break}default:e=g}if((u|0)==16){u=0;e=g|e;c[42367]=e}h=i;f=a[i>>0]|0;g=e}}while(0);if(d|0){o=0;aa(11,0,94890,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}}o=0;r=$(32,b|0,0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){m=c[r+16>>2]|0;if(c[42367]&2|0){o=0;ga(25,c[13918]|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break}}o=0;g=_(24,b|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){n=0;while(1){if(!g)break;o=0;e=$(33,b|0,g|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}i=n;while(1){if(!e)break;if(!((c[42179]|0)==2?(c[(c[e+16>>2]|0)+8>>2]|0)!=0:0))u=32;c:do if((u|0)==32){u=0;do if(a[174080]|0){k=c[e>>2]&3;j=(c[c[((k|0)==3?e:e+48|0)+40>>2]>>2]|0)>>>4;k=(c[c[((k|0)==2?e:e+-48|0)+40>>2]>>2]|0)>>>4;if(j>>>0>k>>>0){o=0;f=aa(15,t|0,k|0,j|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=TN(c[h>>2]|0,w|0,x|0)|0;if(!d)Ua(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ha(59,t|0,k|0,j|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}else{o=0;f=aa(15,t|0,j|0,k|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=TN(c[h>>2]|0,w|0,x|0)|0;if(!d)Ua(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ha(59,t|0,j|0,k|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}}while(0);c[v+(i<<3)+4>>2]=e;o=0;d=_(25,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}c[v+(i<<3)>>2]=d;i=i+1|0}while(0);o=0;e=$(34,b|0,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=TN(c[f>>2]|0,w|0,x|0)|0;if(!h)Ua(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}}o=0;g=$(35,b|0,g|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}n=i}o=0;j=_(26,n<<3|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;ja(25,v|0,n|0,8,36);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){g=c[m>>2]|0;o=0;fa(87,g+2|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){i=c[m+16>>2]|0;d=i+(g*40|0)|0;i=i+((g+1|0)*40|0)|0;q=c[13918]|0;h=0;while(1){if((h|0)>=(n|0))break;if((h|0)>0?c[42367]&16|0:0){o=0;ga(25,q|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}e=c[v+(h<<3)+4>>2]|0;k=c[e>>2]&3;g=c[(c[(c[((k|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;e=c[(c[(c[((k|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if((g|0)==(e|0)){o=0;ja(26,m|0,g|0,i|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}else{o=0;ha(60,m|0,e|0,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}o=0;ha(60,m|0,g|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}o=0;e=aa(16,m|0,i|0,d|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}if(e|0){k=t;m=j;i=r;d=v;h=v;break a}e=j+(h<<3)|0;o=0;ja(27,s|0,m|0,d|0,i|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}g=s;k=c[g+4>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=k;o=0;fa(88,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}h=h+1|0}o=0;ea(8);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;e=_(27,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+20>>2]=e;o=0;e=_(28,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+24>>2]=e;o=0;ha(61,n|0,j|0,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){w=SN(169472,1,w|0,x|0)|0;x=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)!=1){k=t;m=j;i=r;d=v;h=v;e=0;g=q;u=74}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=0;e=z;g=0;u=74}while(0);d:while(1){if((u|0)==74){u=0;if(e|0){q=g;continue}o=0;fa(89,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){A=g;f=h;q=d;r=i;s=j;t=m;v=k;u=n;e=z;g=A;h=f;d=q;i=r;j=s;m=t;k=v;n=u;u=74;continue}if(c[42367]&4|0){o=0;ka(7,g|0,i|0,n|0,m|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}}o=0;la(10,b|0,i|0,n|0,m|0,d|0,0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}q=g}if(!(a[174080]|0))e=0;else{o=0;fa(90,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}e=0}while(1){if((e|0)>=(n|0))break;o=0;fa(91,c[m+(e<<3)+4>>2]|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,w|0,x|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;g=q;u=74;continue d}e=e+1|0}o=0;fa(91,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;fa(92,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;fa(91,h|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,w|0,x|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74}else break}$I(w|0);l=y;return}function NB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;p=q+32|0;o=q+16|0;j=q;k=q+48|0;XL(95757,a)|0;XL(95768,a)|0;m=b+16|0;n=j+8|0;i=k+4|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;d=c[m>>2]|0;e=c[d+(g*40|0)+20>>2]|0;f=c[d+(g*40|0)+24>>2]|0;if((e|0)==(f|0)){GC(j,e);d=~~+h[j>>3];e=~~+h[n>>3]}else{IC(k,(c[e>>2]&1|0)==0?e:f,d+(g*40|0)|0);d=c[k>>2]|0;e=c[i>>2]|0}c[o>>2]=g;c[o+4>>2]=d;c[o+8>>2]=e;AL(a,95788,o)|0;g=g+1|0}f=b+4|0;e=b+20|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;o=c[e>>2]|0;b=c[o+(d*24|0)+16>>2]|0;r=+h[o+(d*24|0)>>3];c[p>>2]=c[o+(d*24|0)+12>>2];c[p+4>>2]=b;h[p+8>>3]=r;AL(a,95808,p)|0;d=d+1|0}XL(95830,a)|0;l=q;return}function OB(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;f=c[a>>2]&3;e=c[(c[((f|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;a=c[(c[((f|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;b=+h[e+16>>3]-+h[a+16>>3];d=+h[e+24>>3]-+h[a+24>>3];return ~~(d*d+b*b)|0}function PB(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function QB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n;GC(n+16|0,d);k=d+32|0;m=d+36|0;g=0;while(1){if((g|0)>=(c[k>>2]|0))break;h=c[(c[m>>2]|0)+(g<<2)>>2]|0;do if(!(a[h+36>>0]|0)){i=c[h+20>>2]|0;if((i|0)==(d|0)){EC(j,h,c[h+24>>2]|0);ZC(b,f,h,0.0)|0;break}else{EC(j,h,i);ZC(b,e,h,0.0)|0;break}}while(0);g=g+1|0}c[b>>2]=(c[b>>2]|0)+2;l=n;return}function RB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;h=k;GC(k+16|0,b);i=b+32|0;j=b+36|0;f=0;while(1){if((f|0)>=(c[i>>2]|0))break;g=c[(c[j>>2]|0)+(f<<2)>>2]|0;e=c[g+20>>2]|0;if((e|0)==(b|0))e=c[g+24>>2]|0;EC(h,g,e);ZC(a,d,g,0.0)|0;f=f+1|0}c[a>>2]=(c[a>>2]|0)+1;c[d+24>>2]=b;c[d+20>>2]=b;l=k;return}function SB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+128|0;C=H+64|0;n=H+48|0;D=H+32|0;E=H+16|0;F=H;g=0;i=e;while(1){if(!i)break;g=g+1|0;i=c[i+8>>2]|0}B=ww((g*56|0)+-112|0)|0;c[C+52>>2]=0;c[C+48>>2]=0;A=e+8|0;e=c[A>>2]|0;i=c[e+8>>2]|0;g=c[e+20>>2]|0;if(c[g>>2]&1)g=c[e+24>>2]|0;EC(n,e,g);j=e;q=e;p=0.0;o=+h[n>>3];z=0;m=0.0;x=+h[n+8>>3];while(1){y=i+8|0;if(!(c[y>>2]|0))break;v=FC(j,i)|0;vG(d,v,c[q+12>>2]|0);t=q+36|0;u=i+36|0;if((a[t>>0]|0)==(a[u>>0]|0))if((c[y>>2]|0)==(f|0)){EC(E,i,v);e=E;G=12}else{j=q;e=z;k=x}else{GC(D,v);e=D;G=12}if((G|0)==12){G=0;w=+h[e>>3];k=+h[e+8>>3];e=a[t>>0]|0;s=e<<24>>24==0;r=(q|0)==(c[A>>2]|0);if(s){if(!(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?4:2;n=v+48|0;q=g+48|0;j=g+40|0;g=r?0:p>o?4:2}else{if(e<<24>>24==(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?1:3;n=v+40|0;q=g+40|0;j=g+48|0;g=r?0:m>x?1:3}HC(C,s&1,+h[j>>3],+h[q>>3],+h[n>>3],g,e);q=z+1|0;g=B+(z*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));if((a[t>>0]|0)!=(a[u>>0]|0)?(c[y>>2]|0)==(f|0):0){EC(F,i,v);n=(a[u>>0]|0)==0;e=v+40|0;g=v+48|0;p=+h[(n?g:e)>>3];HC(C,n&1,+h[(n?e:g)>>3],p,p,n?(o>w?4:2):x>k?1:3,0);n=z+2|0;g=B+(q*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));g=v;j=i;p=o;o=w;e=n;m=x}else{g=v;j=i;p=o;o=w;e=q;m=x}}v=i;i=c[y>>2]|0;q=j;z=e;x=k;j=v}i=bJ(B,z*56|0)|0;e=z+-1|0;g=0;while(1){if((g|0)>=(z|0))break;if((g|0)>0)c[i+(g*56|0)+48>>2]=i+((g+-1|0)*56|0);if((g|0)<(e|0)){G=g+1|0;c[i+(g*56|0)+52>>2]=i+(G*56|0);g=G;continue}else{g=g+1|0;continue}}c[b>>2]=z;c[b+4>>2]=i;l=H;return}function TB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Rl(24676,c[4345]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&4)){while(1){d=c[(c[b+36>>2]|0)+8>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=ww(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+40>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|4;d=c[c[f+36>>2]>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+56>>3];zC(j,g,+h[b+48>>3])}i=i+1|0}return j|0}function UB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Rl(24676,c[4345]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&2)){while(1){d=c[(c[b+36>>2]|0)+12>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=ww(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+48>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|2;d=c[(c[f+36>>2]|0)+4>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+64>>3];zC(j,g,+h[b+40>>3])}i=i+1|0}return j|0}function VB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+20|0;i=e+24|0;e=0;while(1){if((e|0)>=(b|0))break;g=c[d+(e<<3)>>2]|0;h=c[d+(e<<3)+4>>2]|0;f=0;while(1){if((f|0)>=(g|0))break;k=h+(f*56|0)|0;yC(cC(c[((a[k>>0]|0)==0?j:i)>>2]|0,k)|0,k);f=f+1|0}e=e+1|0}return}function WB(a){a=a|0;var b=0,d=0;d=a+20|0;eC(c[d>>2]|0);b=a+24|0;eC(c[b>>2]|0);fC(c[d>>2]|0);fC(c[b>>2]|0);gC(c[d>>2]|0,a);gC(c[b>>2]|0,a);hC(c[d>>2]|0);hC(c[b>>2]|0);return}function XB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0.0;z=l;l=l+224|0;n=z+176|0;m=z+208|0;x=z+160|0;y=z+128|0;k=z+96|0;t=z+64|0;u=z;o=z+32|0;v=u+8|0;h[v>>3]=1797693134862315708145274.0e284;h[u>>3]=1797693134862315708145274.0e284;w=u+24|0;h[w>>3]=-1797693134862315708145274.0e284;p=u+16|0;h[p>>3]=-1797693134862315708145274.0e284;XL(95005,a)|0;c[n>>2]=10;c[n+4>>2]=10;AL(a,95411,n)|0;XL(123076,a)|0;i=b+4|0;j=b+12|0;q=t+8|0;r=t+16|0;s=t+24|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;D=(c[j>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];C=+h[q>>3];B=+h[r>>3];A=+h[s>>3];h[k>>3]=+h[t>>3];h[k+8>>3]=C;h[k+16>>3]=B;h[k+24>>3]=A;AL(a,123095,k)|0;g=g+1|0}g=0;while(1){if((g|0)>=(d|0))break;D=c[f+(g<<3)+4>>2]|0;k=e+(g<<3)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];c[n+16>>2]=c[u+16>>2];c[n+20>>2]=c[u+20>>2];c[n+24>>2]=c[u+24>>2];c[n+28>>2]=c[u+28>>2];dC(o,a,D,m,b,n);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[u+8>>2]=c[o+8>>2];c[u+12>>2]=c[o+12>>2];c[u+16>>2]=c[o+16>>2];c[u+20>>2]=c[o+20>>2];c[u+24>>2]=c[o+24>>2];c[u+28>>2]=c[o+28>>2];g=g+1|0}XL(95428,a)|0;i=b+8|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;D=(c[i>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];E=+h[t>>3];A=+h[q>>3];B=+h[r>>3];C=+h[s>>3];h[y>>3]=E;h[y+8>>3]=A;h[y+16>>3]=B;h[y+24>>3]=C;AL(a,123132,y)|0;h[u>>3]=+h[(+h[u>>3]<E?u:t)>>3];h[v>>3]=+h[(+h[v>>3]<A?u:t)+8>>3];h[p>>3]=+h[(+h[p>>3]>B?u:t)+16>>3];h[w>>3]=+h[(+h[w>>3]>C?u:t)+24>>3];g=g+1|0}v=~~(+h[v>>3]+10.0);y=~~(+h[p>>3]+10.0);D=~~(+h[w>>3]+10.0);c[x>>2]=~~(+h[u>>3]+10.0);c[x+4>>2]=v;c[x+8>>2]=y;c[x+12>>2]=D;AL(a,95453,x)|0;l=z;return}function YB(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;N=l;l=l+112|0;F=N+88|0;E=N+72|0;M=N+32|0;I=N+16|0;J=N;K=N+56|0;L=N+40|0;G=c[13918]|0;w=(i|0)==0;x=J+8|0;y=I+8|0;v=0;m=0;n=0;o=0;p=0;i=0;while(1){if((v|0)>=(e|0))break;z=c[g+(v<<3)+4>>2]|0;A=z+48|0;u=(c[(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)+16>>2]|0)+16|0;B=z+16|0;C=(c[B>>2]|0)+16|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];ZB(K,E,F);c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];C=z+-48|0;u=(c[(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)+16>>2]|0)+16|0;t=(c[B>>2]|0)+56|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];ZB(L,E,F);c[J>>2]=c[L>>2];c[J+4>>2]=c[L+4>>2];c[J+8>>2]=c[L+8>>2];c[J+12>>2]=c[L+12>>2];t=c[f+(v<<3)>>2]|0;u=c[f+(v<<3)+4>>2]|0;s=t*3|0;D=s+1|0;if((s|0)>=(n|0)){if(m|0)$I(i);p=xw(D<<4)|0;m=p;n=D;o=p;i=p}if(!(a[u>>0]|0)){k=+($B(u,d)|0);j=+h[I>>3]}else{j=+_B(u,d);k=+h[y>>3]}r=m+16|0;h[m+16>>3]=j;h[m+24>>3]=k;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];r=1;q=u;s=2;while(1){if((r|0)>=(t|0))break;q=u+(r*56|0)|0;if(!(a[q>>0]|0))k=+($B(q,d)|0);else j=+_B(q,d);O=m+(s+2<<4)|0;Q=m+(s+1<<4)|0;P=m+(s<<4)|0;h[P>>3]=j;h[m+(s<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];r=r+1|0;s=s+3|0}if(!(a[q>>0]|0)){k=+($B(q,d)|0);j=+h[J>>3]}else{j=+_B(q,d);k=+h[x>>3]}Q=m+(s<<4)|0;O=s+1|0;P=m+(O<<4)|0;h[P>>3]=j;h[m+(O<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];if(0>1){P=En(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)|0;Q=En(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)|0;c[M>>2]=P;c[M+4>>2]=Q;AL(G,94964,M)|0}Kz(z,c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0,m,D,24664);if((!w?(H=c[(c[B>>2]|0)+96>>2]|0,H|0):0)?(a[H+81>>0]|0)==0:0){c[E>>2]=c[I>>2];c[E+4>>2]=c[I+4>>2];c[E+8>>2]=c[I+8>>2];c[E+12>>2]=c[I+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];dA(b,z,E,F)}v=v+1|0}$I(o);l=N;return}function ZB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function _B(a,b){a=a|0;b=b|0;var d=0.0,e=0;b=cC(c[b+24>>2]|0,a)|0;e=c[b+36>>2]|0;d=+h[e+40>>3];return +((+h[e+56>>3]-d)*(+(c[a+44>>2]|0)/+((c[b+24>>2]|0)+1|0))+d)}function $B(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=cC(c[b+20>>2]|0,a)|0;b=c[e+36>>2]|0;d=+h[b+48>>3];return ~~((1.0-+(c[a+44>>2]|0)/+((c[e+24>>2]|0)+1|0))*(+h[b+64>>3]-d)+d)|0}function aC(a){a=a|0;return 0}function bC(a){a=a|0;return 0}function cC(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b+8|0,512)|0;if(!a)ma(94977,94983,423,94991);a=c[a+16>>2]|0;a=bb[c[a>>2]&31](a,b+16|0,512)|0;if(!a)ma(95002,94983,425,94991);else return a|0;return 0}function dC(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;z=l;l=l+32|0;y=z+16|0;u=z+8|0;m=z;j=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;t=c[f+4>>2]|0;if(!(a[t>>0]|0)){k=+h[j+56>>3];s=+h[j+40>>3];j=$B(t,g)|0;k=(s+k)*.5}else{k=+h[j+64>>3];s=+h[j+48>>3];j=~~((s+k)*.5);k=+_B(t,g)}A=~~k;p=+h[i>>3];r=+(A|0);p=p<r?p:r;h[i>>3]=p;v=i+8|0;q=+h[v>>3];s=+(j|0);q=q<s?q:s;h[v>>3]=q;w=i+16|0;k=+h[w>>3];r=k>r?k:r;h[w>>3]=r;x=i+24|0;k=+h[x>>3];s=k>s?k:s;h[x>>3]=s;c[m>>2]=A;c[m+4>>2]=j;AL(d,95504,m)|0;o=c[f>>2]|0;m=t;n=1;f=A;while(1){if((n|0)>=(o|0))break;m=t+(n*56|0)|0;if(!(a[m>>0]|0))j=$B(m,g)|0;else f=~~+_B(m,g);B=+(f|0);D=p<B?p:B;h[i>>3]=D;k=+(j|0);C=q<k?q:k;h[v>>3]=C;B=r>B?r:B;h[w>>3]=B;k=s>k?s:k;h[x>>3]=k;c[u>>2]=f;c[u+4>>2]=j;AL(d,95526,u)|0;n=n+1|0;p=D;q=C;r=B;s=k}j=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if(!(a[m>>0]|0)){k=+h[j+56>>3];D=+h[j+40>>3];j=$B(m,g)|0;k=(D+k)*.5}else{k=+h[j+64>>3];D=+h[j+48>>3];j=~~((D+k)*.5);k=+_B(m,g)}A=~~k;C=+(A|0);h[i>>3]=p<C?p:C;D=+(j|0);h[v>>3]=q<D?q:D;h[w>>3]=r>C?r:C;h[x>>3]=s>D?s:D;c[y>>2]=A;c[y+4>>2]=j;AL(d,95540,y)|0;c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];c[b+16>>2]=c[i+16>>2];c[b+20>>2]=c[i+20>>2];c[b+24>>2]=c[i+24>>2];c[b+28>>2]=c[i+28>>2];l=z;return}function eC(a){a=a|0;var b=0;a=Pl(a)|0;while(1){if(!a)break;b=Pl(c[a+16>>2]|0)|0;while(1){if(!b)break;c[b+32>>2]=JC(c[b+24>>2]|0)|0;b=c[b>>2]|0}a=c[a>>2]|0}return}function fC(a){a=a|0;var b=0;a=Pl(a)|0;while(1){if(!a)break;b=Pl(c[a+16>>2]|0)|0;while(1){if(!b)break;if(c[b+24>>2]|0)xC(b);b=c[b>>2]|0}a=c[a>>2]|0}return}function gC(a,b){a=a|0;b=b|0;var d=0;d=Pl(a)|0;while(1){if(!d)break;a=Pl(c[d+16>>2]|0)|0;while(1){if(!a)break;lC(a,b);a=c[a>>2]|0}d=c[d>>2]|0}return}function hC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0;e=Pl(a)|0;while(1){if(!e)break;i=e+8|0;f=Pl(c[e+16>>2]|0)|0;while(1){if(!f)break;a=f+24|0;a:do if(c[a>>2]|0){if(c[42367]&8|0)iC(f,~~+h[i>>3]);g=f+32|0;OC(c[g>>2]|0);b=c[a>>2]|0;d=f+28|0;a=0;while(1){if((a|0)>=(b|0))break a;c[(c[(c[d>>2]|0)+(a<<2)>>2]|0)+44>>2]=(c[(c[(c[g>>2]|0)+4>>2]|0)+(a*12|0)+4>>2]|0)+1;a=a+1|0}}while(0);f=c[f>>2]|0}e=c[e>>2]|0}return}function iC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+32|0;d=j;g=a+24|0;a:do if((c[g>>2]|0)>=2){i=c[13918]|0;m=+h[a+8>>3];k=+h[a+16>>3];c[d>>2]=b;h[d+8>>3]=m;h[d+16>>3]=k;AL(i,95561,d)|0;f=a+32|0;a=a+28|0;b=0;while(1){if((b|0)>=(c[g>>2]|0))break a;e=c[(c[(c[f>>2]|0)+4>>2]|0)+(b*12|0)+8>>2]|0;b:do if(Tl(e)|0){jC(i,c[(c[a>>2]|0)+(b<<2)>>2]|0);XL(95581,i)|0;d=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!d)break b;XL(95586,i)|0;jC(i,c[(c[a>>2]|0)+(c[d>>2]<<2)>>2]|0);XL(134901,i)|0;d=bb[c[e>>2]&31](e,d,8)|0}}while(0);b=b+1|0}}while(0);l=j;return}function jC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+80|0;f=g+40|0;e=g;if(!(a[d>>0]|0)){m=+h[d+16>>3];j=+h[d+8>>3];k=+h[d+24>>3];i=kC(c[d+32>>2]|0)|0;e=kC(c[d+36>>2]|0)|0;h[f>>3]=m;h[f+8>>3]=j;h[f+16>>3]=k;h[f+24>>3]=j;c[f+32>>2]=i;c[f+36>>2]=e;AL(b,95592,f)|0}else{k=+h[d+8>>3];j=+h[d+16>>3];m=+h[d+24>>3];f=kC(c[d+32>>2]|0)|0;i=kC(c[d+36>>2]|0)|0;h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=k;h[e+24>>3]=m;c[e+32>>2]=f;c[e+36>>2]=i;AL(b,95592,e)|0}l=g;return}function kC(a){a=a|0;switch(a|0){case 0:{a=95643;break}case 1:{a=95638;break}case 2:{a=95631;break}case 3:{a=95624;break}case 4:{a=95616;break}default:a=0}return a|0}function lC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;r=w+8|0;t=w;u=c[a+32>>2]|0;v=c[a+28>>2]|0;p=a+24|0;m=r+4|0;n=t+4|0;j=0;a=c[p>>2]|0;a:while(1){q=j+1|0;if((q|0)>=(a|0))break;o=v+(j<<2)|0;k=q;while(1){if((k|0)>=(a|0)){j=q;continue a}b:do if(((NC(u,j,k)|0)==0?(NC(u,k,j)|0)==0:0)?(s=v+(k<<2)|0,mC(c[o>>2]|0,c[s>>2]|0)|0):0){f=c[o>>2]|0;a=c[f+48>>2]|0;i=c[s>>2]|0;d=c[i+48>>2]|0;e=(d|0)==0;if(a)if(e)a=1;else a=+h[a+8>>3]!=+h[d+8>>3];else a=e^1;g=a&1;nC(r,f,i,0,g);a=c[r>>2]|0;i=c[m>>2]|0;f=g^1;nC(t,c[o>>2]|0,c[s>>2]|0,1,f);d=c[t>>2]|0;e=c[n>>2]|0;switch(i|0){case -1:{oC(c[s>>2]|0,c[o>>2]|0,g,0,a,b);oC(c[s>>2]|0,c[o>>2]|0,f,1,d,b);if((e|0)!=1)break b;pC(c[o>>2]|0,c[s>>2]|0,f,b);break b}case 0:switch(e|0){case -1:{oC(c[s>>2]|0,c[o>>2]|0,g,0,a,b);oC(c[s>>2]|0,c[o>>2]|0,f,1,d,b);break b}case 0:{oC(c[o>>2]|0,c[s>>2]|0,0,g,a,b);oC(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}case 1:{oC(c[o>>2]|0,c[s>>2]|0,0,g,a,b);oC(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}default:break b}case 1:{oC(c[o>>2]|0,c[s>>2]|0,0,g,a,b);oC(c[o>>2]|0,c[s>>2]|0,1,f,d,b);if((e|0)!=-1)break b;pC(c[o>>2]|0,c[s>>2]|0,f,b);break b}default:break b}}while(0);k=k+1|0;a=c[p>>2]|0}}l=w;return}function mC(a,b){a=a|0;b=b|0;if(!(+h[a+8>>3]==+h[b+8>>3]))ma(95714,94983,843,95745);if((+h[a+16>>3]==+h[b+16>>3]?+h[a+24>>3]==+h[b+24>>3]:0)?(c[a+32>>2]|0)==(c[b+32>>2]|0):0)a=(c[a+36>>2]|0)==(c[b+36>>2]|0)&1;else a=0;return a|0}function nC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=0;while(1){b=qC(b,e)|0;if(!b){h=0;break}d=qC(d,f)|0;if(!d){i=6;break}if(!(mC(b,d)|0)){i=7;break}g=g+1|0}if((i|0)==6)ma(123205,94983,871,95663);else if((i|0)==7)h=sC(b,rC(b,d)|0,g+1|0,1-e|0)|0;c[a>>2]=g;c[a+4>>2]=h;return}function oC(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i+20|0;n=i+24|0;i=cC(c[((a[b>>0]|0)==0?o:n)>>2]|0,b)|0;LC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0);k=1;while(1){if((k|0)>(g|0))break;l=qC(b,e)|0;m=qC(d,f)|0;do if(!(a[b>>0]|0)){j=cC(c[n>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==1;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==1;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}}else{j=cC(c[o>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==2;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==2;i=(NC(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){LC(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{LC(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}}while(0);b=l;d=m;k=k+1|0}return}function pC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;while(1){if(!(mC(b,d)|0))break;g=qC(b,1)|0;d=qC(d,e)|0;b=g}g=c[(cC(c[((a[b>>0]|0)==0?f+20|0:f+24|0)>>2]|0,b)|0)+32>>2]|0;MC(g,c[b+40>>2]|0,c[d+40>>2]|0);return}function qC(a,b){a=a|0;b=b|0;if(!a)ma(95650,94983,798,95654);else return c[((b|0)==0?a+48|0:a+52|0)>>2]|0;return 0}function rC(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=a[b>>0]|0;if(d<<24>>24==(a[c>>0]|0)?!(+h[b+8>>3]!=+h[c+8>>3]):0){if(!(d<<24>>24))b=tC(b,c,3,1)|0;else b=tC(b,c,4,2)|0;l=f;return b|0}$l(1,95676,e)|0;Ua(169472,1);return 0}function sC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0;j=1;while(1){if((j|0)>(e|0))break;i=qC(b,f)|0;g=+h[i+8>>3]==+h[b+16>>3];do if(!(a[b>>0]|0))if(g){g=(c[b+32>>2]|0)==1;break}else{g=(c[b+36>>2]|0)==3;break}else if(g){g=(c[b+32>>2]|0)==4;break}else{g=(c[b+36>>2]|0)==2;break}while(0);b=i;j=j+1|0;d=g?0-d|0:d}return d|0}function tC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;j=+h[a+24>>3];k=+h[b+16>>3];do if(!(j<k)?(g=+h[a+16>>3],i=+h[b+24>>3],!(g>i)):0){if(k<j&g<k){b=uC(a,b,d,e)|0;break}if(k<g&g<i){b=0-(uC(b,a,d,e)|0)|0;break}if(!(g==k))if(j==k){d=c[a+36>>2]|0;return ((d|0)==(c[b+32>>2]|0)?0:(d|0)==(e|0)?1:-1)|0}else{d=c[a+32>>2]|0;b=(d|0)==(c[b+36>>2]|0)?0:(d|0)==(e|0)?1:-1;break}if(!(j==i))if(j<i){o=(c[a+36>>2]|0)==(d|0);d=wC(c[b+32>>2]|0,c[a+32>>2]|0,d,e)|0;return (o?d:0-d|0)|0}else{o=(c[b+36>>2]|0)==(e|0);b=wC(c[a+32>>2]|0,c[b+32>>2]|0,d,e)|0;b=o?b:0-b|0;break}o=c[a+32>>2]|0;n=c[b+32>>2]|0;if((o|0)==(n|0)){b=c[b+36>>2]|0;if((c[a+36>>2]|0)==(b|0)){b=0;break}}else b=c[b+36>>2]|0;m=(n|0)==(d|0);if((n|0)==(b|0)){if(m){b=1;break}if((n|0)==(e|0)){b=-1;break}if((o|0)!=(d|0)?(c[a+36>>2]|0)!=(d|0):0){b=1;break}if((o|0)!=(e|0)?(c[a+36>>2]|0)!=(e|0):0){b=-1;break}b=0;break}f=(b|0)==(e|0);if(m&f){b=(c[a+36>>2]|0)==(e|0);if((o|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}l=(b|0)==(d|0);if((n|0)==(e|0)&l){b=(o|0)==(e|0);if((c[a+36>>2]|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}if(!n){if(l){b=vC(o,c[a+36>>2]|0,d)|0;break}if(f){b=0-(vC(o,c[a+36>>2]|0,e)|0)|0;break}}f=c[a+36>>2]|0;if(m&(b|0)==0){b=vC(f,o,d)|0;break}else{b=0-(vC(f,o,e)|0)|0;break}}else b=0;while(0);return b|0}function uC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0;i=+h[a+24>>3];j=+h[b+24>>3];do if(i<j){a=c[a+36>>2]|0;if((a|0)==(d|0)?(c[b+32>>2]|0)==(e|0):0){a=-1;break}if((a|0)==(e|0)?(c[b+32>>2]|0)==(d|0):0){a=1;break}a=0}else{f=c[b+32>>2]|0;g=(f|0)==(e|0);if(i==j)if(g){a=wC(c[a+36>>2]|0,c[b+36>>2]|0,d,e)|0;break}else{a=0-(wC(c[b+36>>2]|0,c[a+36>>2]|0,d,e)|0)|0;break}if(g?(c[b+36>>2]|0)==(e|0):0){a=-1;break}if((f|0)==(d|0)?(c[b+36>>2]|0)==(d|0):0){a=1;break}a=0}while(0);return a|0}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)==(c|0)?((b|0)==(c|0))<<31>>31:1)|0}function wC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(d|0)){b=(a|0)==0;if(b)return 0;else b=b&1}return ((a|0)!=0|(b|0)!=(c|0))<<31>>31|0}function xC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=c[a+28>>2]|0;h=c[a+24>>2]|0;d=c[a+32>>2]|0;a=0;a:while(1){e=a+1|0;if((e|0)>=(h|0))break;f=g+(a<<2)|0;b=e;while(1){if((b|0)==(h|0)){a=e;continue a}switch(rC(c[f>>2]|0,c[g+(b<<2)>>2]|0)|0){case 1:{LC(d,a,b);break}case -1:{LC(d,b,a);break}default:{}}b=b+1|0}}return}function yC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+24|0;e=c[f>>2]|0;d=e+1|0;c[f>>2]=d;c[b+40>>2]=e;e=a+28|0;a=c[e>>2]|0;if(!a)a=xw(d<<2)|0;else a=zw(a,d<<2)|0;c[e>>2]=a;c[a+((c[f>>2]|0)+-1<<2)>>2]=b;return}function zC(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;h[f>>3]=d;e=bb[c[a>>2]&31](a,f,512)|0;if(!e){e=ww(24)|0;h[e+8>>3]=+h[f>>3];c[e+16>>2]=Rl(24712,c[4345]|0)|0;bb[c[a>>2]&31](a,e,1)|0}f=c[e+16>>2]|0;bb[c[f>>2]&31](f,b,1)|0;l=g;return}function AC(a,b,d){a=a|0;b=b|0;d=d|0;KC(c[b+32>>2]|0);$I(c[b+28>>2]|0);$I(b);return}function BC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(e<f)a=!(+h[b+8>>3]>=+h[c+8>>3])<<31>>31;else a=0;else a=!(+h[b+8>>3]<=+h[c+8>>3])&1;return a|0}function CC(a,b,d){a=a|0;b=b|0;d=d|0;Ll(c[b+16>>2]|0)|0;$I(b);return}function DC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[b>>3];e=+h[c>>3];return (f>e?1:(f<e)<<31>>31)|0}function EC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;i=(a[d+36>>0]|0)!=0;j=e+40|0;do if((c[d+24>>2]|0)==(e|0)){f=+h[j>>3];if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;break}else{g=+h[e+48>>3];f=(+h[e+56>>3]+f)*.5;break}}else if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;f=+h[e+56>>3];break}else{g=+h[e+64>>3];f=(+h[e+56>>3]+ +h[j>>3])*.5;break}while(0);h[b>>3]=f;h[b+8>>3]=g;return}function FC(a,b){a=a|0;b=b|0;var d=0;d=c[a+20>>2]|0;if((d|0)!=(c[b+20>>2]|0)?(d|0)!=(c[b+24>>2]|0):0)d=c[a+24>>2]|0;return d|0}function GC(a,b){a=a|0;b=b|0;var c=0.0;c=(+h[b+64>>3]+ +h[b+48>>3])*.5;h[a>>3]=(+h[b+56>>3]+ +h[b+40>>3])*.5;h[a+8>>3]=c;return}function HC(b,d,e,f,g,i,j){b=b|0;d=d|0;e=+e;f=+f;g=+g;i=i|0;j=j|0;var k=0,l=0;a[b>>0]=d;h[b+8>>3]=e;if(f<g){k=0;l=i;d=j;e=f;f=g}else{k=1;l=j;d=i;e=g}h[b+24>>3]=f;h[b+16>>3]=e;c[b+36>>2]=d;c[b+32>>2]=l;a[b+1>>0]=k;return}function IC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+36>>2]|0;do if((c[e+4>>2]|0)!=(d|0)){if((c[e+12>>2]|0)==(d|0)){e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+48>>3];break}if((c[e+8>>2]|0)==(d|0)){e=~~+h[b+40>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5);break}if((c[e>>2]|0)==(d|0)){e=~~+h[b+56>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5)}else{e=0;d=0}}else{e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+64>>3]}while(0);c[a>>2]=e;c[a+4>>2]=d;return}function JC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=ww(8)|0;c[d>>2]=a;e=d+4|0;c[e>>2]=ww(a*12|0)|0;b=0;while(1){if((b|0)>=(a|0))break;g=gG()|0;f=c[e>>2]|0;c[f+(b*12|0)+8>>2]=g;c[f+(b*12|0)>>2]=0;b=b+1|0}return d|0}function KC(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=0;while(1){e=c[d>>2]|0;if((b|0)>=(c[a>>2]|0))break;Ll(c[e+(b*12|0)+8>>2]|0)|0;b=b+1|0}$I(e);$I(a);return}function LC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;bb[c[d>>2]&31](d,f,1)|0;l=e;return}function MC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[f>>2]=d;a=a+4|0;g=c[(c[a>>2]|0)+(b*12|0)+8>>2]|0;bb[c[g>>2]&31](g,f,2)|0;c[f>>2]=b;d=c[(c[a>>2]|0)+(d*12|0)+8>>2]|0;bb[c[d>>2]&31](d,f,2)|0;l=e;return}function NC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;d=(bb[c[d>>2]&31](d,f,512)|0)!=0&1;l=e;return d|0}function OC(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;switch(b|0){case 0:break;case 1:{c[(c[a+4>>2]|0)+4>>2]=0;break}default:{e=PC(b)|0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[a>>2]|0)){b=0;break}if(!(c[(c[f>>2]|0)+(d*12|0)>>2]|0))b=QC(a,d,b,e)|0;d=d+1|0}while(1){d=RC(e)|0;if((d|0)<=-1)break;c[(c[f>>2]|0)+(d*12|0)+4>>2]=b;b=b+1|0}SC(e)}}return}function PC(a){a=a|0;var b=0;b=ww(8)|0;c[b+4>>2]=ww(a<<2)|0;c[b>>2]=-1;return b|0}function QC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;g=c[i>>2]|0;j=g+(b*12|0)|0;c[j>>2]=1;g=c[g+(b*12|0)+8>>2]|0;h=g+4|0;d=d+1|0;g=Pl(g)|0;while(1){if(!g)break;f=c[(c[h>>2]|0)+8>>2]|0;if((f|0)<0)f=c[g+8>>2]|0;else f=g+(0-f)|0;f=c[f>>2]|0;if(!(c[(c[i>>2]|0)+(f*12|0)>>2]|0))d=QC(a,f,d,e)|0;g=c[g>>2]|0}c[j>>2]=2;TC(e,b);return d+1|0}function RC(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if((b|0)==-1)a=-1;else{d=c[(c[a+4>>2]|0)+(b<<2)>>2]|0;c[a>>2]=b+-1;a=d}return a|0}function SC(a){a=a|0;$I(c[a+4>>2]|0);$I(a);return}function TC(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+1|0;c[a>>2]=d;c[(c[a+4>>2]|0)+(d<<2)>>2]=b;return}function UC(a){a=a|0;var d=0,e=0,f=0;e=c[a>>2]|0;c[a+8>>2]=e;c[a+12>>2]=c[a+4>>2];d=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;f=c[d>>2]|0;b[f+(a*40|0)+18>>1]=b[f+(a*40|0)+16>>1]|0;a=a+1|0}return}function VC(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;c[a>>2]=d;c[a+4>>2]=c[a+12>>2];e=a+16|0;a=0;while(1){if((a|0)>=(d|0))break;f=c[e>>2]|0;b[f+(a*40|0)+16>>1]=b[f+(a*40|0)+18>>1]|0;a=a+1|0}d=d+2|0;while(1){if((a|0)>=(d|0))break;b[(c[e>>2]|0)+(a*40|0)+16>>1]=0;a=a+1|0}return}function WC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=ww(((c[a>>2]|0)*6|0)+(b<<1)<<2)|0;c[a+20>>2]=ww((((c[a>>2]|0)*3|0)+b|0)*24|0)|0;e=c[a>>2]|0;f=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+24|0;a=a+1|0}e=e+2|0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+(b<<2)|0;a=a+1|0}return}function XC(a){a=a|0;var b=0;b=ww(24)|0;c[b>>2]=0;c[b+16>>2]=ww(a*40|0)|0;return b|0}function YC(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=c[a>>2]|0;c[d+(b*40|0)+32>>2]=b;c[a>>2]=b+1;return d+(b*40|0)|0}function ZC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=a+4|0;f=c[g>>2]|0;c[g>>2]=f+1;g=c[a+20>>2]|0;a=g+(f*24|0)|0;c[g+(f*24|0)+12>>2]=c[b+32>>2];c[g+(f*24|0)+16>>2]=c[d+32>>2];h[a>>3]=e;c[g+(f*24|0)+8>>2]=0;_C(b,f);_C(d,f);return a|0}function _C(a,d){a=a|0;d=d|0;var e=0,f=0;e=a+16|0;f=b[e>>1]|0;c[(c[a+28>>2]|0)+(f<<16>>16<<2)>>2]=d;b[e>>1]=f+1<<16>>16;return}function $C(a){a=a|0;var b=0;b=a+16|0;$I(c[(c[b>>2]|0)+28>>2]|0);$I(c[b>>2]|0);$I(c[a+20>>2]|0);$I(a);return}function aD(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[a>>2]|0;i=a+16|0;f=0;while(1){if((f|0)>=(g|0))break;c[(c[i>>2]|0)+(f*40|0)>>2]=-2147483648;f=f+1|0}oG();a:do if(!(rG(d)|0)){c[d+8>>2]=0;c[d>>2]=0;d=a+20|0;b:while(1){g=tG()|0;if(!g){f=0;break a}c[g>>2]=0-(c[g>>2]|0);if((g|0)==(e|0)){f=0;break a}i=g+16|0;j=g+28|0;f=0;while(1){if((f|0)>=(b[i>>1]|0))continue b;k=(c[d>>2]|0)+((c[(c[j>>2]|0)+(f<<2)>>2]|0)*24|0)|0;l=bD(a,k,g)|0;m=c[l>>2]|0;do if((m|0)<0){n=~~-(+h[k>>3]+ +(c[g>>2]|0));if((m|0)==-2147483648){c[l>>2]=n;if(rG(l)|0){f=1;break a}c[l+8>>2]=g;c[l+12>>2]=k;break}else{if((m|0)>=(n|0))break;uG(l,n);c[l+8>>2]=g;c[l+12>>2]=k;break}}while(0);f=f+1|0}}}else f=1;while(0);return f|0}function bD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+12>>2]|0;if((e|0)==(c[d+32>>2]|0))e=c[b+16>>2]|0;return (c[a+16>>2]|0)+(e*40|0)|0}function cD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;Kr(g,3,b)|0;b=c[g+92>>2]|0;do if(b){d=c[b+16>>2]|0;h=c[d+12>>2]|0;c[a+76>>2]=h;e=c[d+16>>2]|0;c[a+84>>2]=e;f=a+80|0;c[f>>2]=c[d>>2];c[a+88>>2]=c[b+4>>2];d=a+152|0;e=c[d>>2]|c[e>>2];c[d>>2]=e;b=c[g+80>>2]|0;if(!b){c[a+60>>2]=0;b=999;break}else{g=c[b+16>>2]|0;c[a+60>>2]=c[g+12>>2];i=c[g+16>>2]|0;c[a+68>>2]=i;c[a+72>>2]=c[b+4>>2];c[d>>2]=e|c[i>>2];c[a+64>>2]=c[((h|0)==0?f:g)>>2];b=300;break}}else b=999;while(0);return b|0}function dD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(!(jr(a)|0))if((b|0)!=0?(d=c[b>>2]|0,(d|0)!=0):0){gb[d&127](a);a=0}else a=0;else a=1;return a|0}function eD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)gb[d&127](a);c[(c[a>>2]|0)+24>>2]=0;rr(a);return}function fD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;e=+h[b+504>>3];f=+h[b+512>>3];i=+h[b+352>>3];if(!(c[b+360>>2]|0)){g=+h[d>>3]+e;d=d+8|0;e=f}else g=-(f+ +h[d+8>>3]);f=+h[b+528>>3]*i*(+h[d>>3]+e);h[a>>3]=+h[b+520>>3]*i*g;h[a+8>>3]=f;return}function gD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;f=+h[a+504>>3];g=+h[a+512>>3];i=+h[a+352>>3];j=+h[a+520>>3]*i;i=+h[a+528>>3]*i;a:do if(!(c[a+360>>2]|0)){a=0;while(1){if((a|0)>=(e|0))break a;h[d+(a<<4)>>3]=(+h[b+(a<<4)>>3]+f)*j;h[d+(a<<4)+8>>3]=(+h[b+(a<<4)+8>>3]+g)*i;a=a+1|0}}else{a=0;while(1){if((a|0)>=(e|0))break a;k=-(j*(+h[b+(a<<4)+8>>3]+g));h[d+(a<<4)+8>>3]=(+h[b+(a<<4)>>3]+f)*i;h[d+(a<<4)>>3]=k;a=a+1|0}}while(0);return d|0}function hD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+8>>2]|0,d|0):0)gb[d&127](a);return}function iD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+12>>2]|0,d|0):0)gb[d&127](a);qr(a);return}function jD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+24>>2]|0,d|0):0)gb[d&127](a);return}function kD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+28>>2]|0,d|0):0)gb[d&127](a);return}function lD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+16>>2]|0,d|0):0){b=c[a+160>>2]|0;kb[d&31](a,c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0,b,c[a+156>>2]|0)}return}function mD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+20>>2]|0,d|0):0)gb[d&127](a);return}function nD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+32>>2]|0,d|0):0)gb[d&127](a);return}function oD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+36>>2]|0,d|0):0)gb[d&127](a);return}function pD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+40>>2]|0,d|0):0)gb[d&127](a);return}function qD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+44>>2]|0,d|0):0)gb[d&127](a);return}function rD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+48>>2]|0,d|0):0)gb[d&127](a);return}function sD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+52>>2]|0,d|0):0)gb[d&127](a);return}function tD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+56>>2]|0,d|0):0)gb[d&127](a);return}function uD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+60>>2]|0,d|0):0)gb[d&127](a);return}function vD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+64>>2]|0,d|0):0)gb[d&127](a);return}function wD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+68>>2]|0,d|0):0)gb[d&127](a);return}function xD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+60>>2]|0;if(g|0?(h=c[g+72>>2]|0,h|0):0)lb[h&7](a,b,d,e,f);return}function yD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+76>>2]|0,d|0):0)gb[d&127](a);return}function zD(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+60>>2]|0;if(d|0?(e=c[d+80>>2]|0,e|0):0)hb[e&31](a,b);return}function AD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+84>>2]|0,d|0):0)gb[d&127](a);return}function BD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;f=k+32|0;h=k;i=k+16|0;j=c[b+60>>2]|0;m=c[e>>2]|0;do if(m|0?a[m>>0]|0:0){m=c[b+16>>2]|0;if(m|0?(c[m+144>>2]|0)==0:0)break;if(!(c[b+152>>2]&8192)){c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];fD(i,b,f);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2]}else{c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2]}if(j|0?(g=c[j+88>>2]|0,g|0):0){c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];ib[g&127](b,f,e)}}while(0);l=k;return}function CD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+16|0;i=XJ(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(DD(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)hb[e&31](b,g);if(h)a[i>>0]=58;return}function DD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;g=k+16|0;j=k+8|0;i=k;c[d>>2]=b;c[d+32>>2]=5;e=SE(b)|0;f=c[a+16>>2]|0;if(!((f|0)!=0?(wM(e,f,c[a+20>>2]|0,4,37)|0)!=0:0))h=3;a:do if((h|0)==3){switch(TE(b,d,c[a+24>>2]|0)|0){case 0:break a;case 1:break;default:{$l(1,95868,g)|0;break a}}a=xw((sJ(b)|0)+16|0)|0;c[i>>2]=b;qL(a,95833,i)|0;if(Ev(a)|0){c[j>>2]=b;$l(0,95842,j)|0}$I(a)}while(0);l=k;return}function ED(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+56|0;i=XJ(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(DD(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)hb[e&31](b,g);if(h)a[i>>0]=58;return}function FD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0;h=c[a+60>>2]|0;i=a+16|0;j=(c[i>>2]|0)+96|0;if(h|0?(DD(c[a+68>>2]|0,b,j),f=c[h+92>>2]|0,f|0):0)hb[f&31](a,j);j=c[i>>2]|0;c[j+136>>2]=d;g[j+140>>2]=e;return}function GD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m;j=c[b+60>>2]|0;b=c[b+16>>2]|0;c[b+160>>2]=d;a:do if((d|0)!=0&(j|0)!=0){j=b+144|0;i=b+152|0;g=b+148|0;b=d;b:while(1){f=b+4|0;b=c[b>>2]|0;if(!b)break a;c:do switch(a[b>>0]|0){case 115:{if(!(yJ(b,95889)|0)){c[j>>2]=3;b=f;continue b}if(!(yJ(b,95910)|0)){e=115;while(1){d=b+1|0;if(!(e<<24>>24))break;b=d;e=a[d>>0]|0}h[i>>3]=+tM(d);b=f;continue b}break}case 100:{if(!(yJ(b,122119)|0)){c[j>>2]=1;b=f;continue b}if(!(yJ(b,122112)|0)){c[j>>2]=2;b=f;continue b}break}case 105:{if(yJ(b,119127)|0?yJ(b,95895)|0:0)break c;c[j>>2]=0;b=f;continue b}case 98:{if(!(yJ(b,95905)|0)){h[i>>3]=2.0;b=f;continue b}break}case 102:{if(!(yJ(b,95923)|0)){c[g>>2]=1;b=f;continue b}break}case 117:{if(!(yJ(b,95930)|0)){c[g>>2]=0;b=f;continue b}break}case 116:{if(!(yJ(b,95939)|0)){b=f;continue b}break}default:{}}while(0);c[k>>2]=b;$l(0,95947,k)|0;b=f}}while(0);l=m;return}function HD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;d=c[a+60>>2]|0;if((d|0?(i=d+96|0,f=c[i>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){d=b+16|0;h[g>>3]=(+h[d>>3]+ +h[b>>3])*.5;h[g+8>>3]=(+h[b+24>>3]+ +h[b+8>>3])*.5;b=g+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];if(!(c[a+152>>2]&8192)){gD(a,g,g,2)|0;f=c[i>>2]|0}ib[f&127](a,g,e)}l=j;return}function ID(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o;f=c[a+60>>2]|0;if((f|0?(n=f+100|0,c[n>>2]|0):0)?(k=a+16|0,j=c[k>>2]|0,c[j+144>>2]|0):0){if(!(e&4)){f=e;g=0}else{f=e&-5;e=j+16|0;g=m;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=e;h=j+56|0;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=1}if(!(c[a+152>>2]&8192)){e=d+10|0;if((c[42407]|0)<(d|0)){c[42407]=e;e=zw(c[42408]|0,e<<4)|0;c[42408]=e}else e=c[42408]|0;gD(a,b,e,d)|0;kb[c[n>>2]&31](a,e,d,f)}else kb[c[n>>2]&31](a,b,d,f);if(g|0){g=(c[k>>2]|0)+16|0;h=m;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0))}}l=o;return}function JD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+64|0;f=e;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];g=f+32|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[f+16>>3]=+h[f>>3];h[f+24>>3]=+h[f+40>>3];h[f+48>>3]=+h[g>>3];h[f+56>>3]=+h[f+8>>3];ID(a,f,4,d);l=e;return}function KD(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=c[a+60>>2]|0;do if((i|0?(j=i+104|0,h=c[j>>2]|0,h|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){mb[h&15](a,b,d,e,f,g&255);break}h=d+10|0;if((c[42407]|0)<(d|0)){c[42407]=h;h=zw(c[42408]|0,h<<4)|0;c[42408]=h}else h=c[42408]|0;gD(a,b,h,d)|0;mb[c[j>>2]&15](a,h,d,e,f,g&255)}while(0);return}function LD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a+60>>2]|0;do if((e|0?(g=e+108|0,f=c[g>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){ib[f&127](a,b,d);break}e=d+10|0;if((c[42407]|0)<(d|0)){c[42407]=e;e=zw(c[42408]|0,e<<4)|0;c[42408]=e}else e=c[42408]|0;gD(a,b,e,d)|0;ib[c[g>>2]&127](a,e,d)}while(0);return}function MD(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+60>>2]|0;if((d|0?!((e|0)==0|(a[d>>0]|0)==0):0)?(f=c[e+112>>2]|0,f|0):0)hb[f&31](b,d);return}function ND(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+112|0;B=F+64|0;E=F;n=F+96|0;x=F+48|0;y=F+32|0;C=c[b+60>>2]|0;if(!b)ma(96061,96e3,691,96011);if(!d)ma(96030,96e3,692,96011);if(!(a[d>>0]|0))ma(96035,96e3,693,96011);D=Mr(d)|0;if(!D){if((C|0)!=0&(Qy(d)|0)!=0?(m=c[C+116>>2]|0,m|0):0)lb[m&7](b,d,e,f,g&255)}else{s=b+432|0;c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];Pr(n,D,B);s=c[n>>2]|0;m=c[n+4>>2]|0;if(!((s|0)<1&(m|0)<1)){n=E+16|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];c[E>>2]=c[e>>2];c[E+4>>2]=c[e+4>>2];c[E+8>>2]=c[e+8>>2];c[E+12>>2]=c[e+12>>2];z=E+8|0;A=E+24|0;d=1;while(1){if((d|0)>=(f|0))break;G=e+(d<<4)|0;v=+h[G>>3];h[E>>3]=+h[(+h[E>>3]<v?E:G)>>3];w=+h[e+(d<<4)+8>>3];h[z>>3]=+h[(+h[z>>3]<w?E:G)+8>>3];h[n>>3]=+h[(+h[n>>3]>v?n:G)>>3];h[A>>3]=+h[(+h[A>>3]>w?n:G)+8>>3];d=d+1|0}k=+h[n>>3];j=+h[E>>3];t=k-j;u=+h[A>>3];v=+h[z>>3];w=u-v;o=+(m|0);p=+(s|0);q=t/p;r=w/o;a:do switch(OD(i)|0){case 1:if(q<r){p=q*p;o=q*o;break a}else{p=r*p;o=r*o;break a}case 2:{p=q*p;break}case 3:{o=r*o;break}case 4:{p=q*p;o=r*o;break}default:{}}while(0);if(p<t){t=(t-p)*.5;j=j+t;h[E>>3]=j;k=k-t;h[n>>3]=k}if(o<w){w=(w-o)*.5;h[z>>3]=v+w;h[A>>3]=u-w}if(!(c[b+152>>2]&8192)){c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];fD(x,b,B);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2];c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];fD(y,b,B);c[n>>2]=c[y>>2];c[n+4>>2]=c[y+4>>2];c[n+8>>2]=c[y+8>>2];c[n+12>>2]=c[y+12>>2];k=+h[n>>3];j=+h[E>>3]}if(j>k){h[E>>3]=k;h[n>>3]=j}j=+h[z>>3];k=+h[A>>3];if(j>k){h[z>>3]=k;h[A>>3]=j}if(C|0){G=c[b+72>>2]|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];c[B+16>>2]=c[E+16>>2];c[B+20>>2]=c[E+20>>2];c[B+24>>2]=c[E+24>>2];c[B+28>>2]=c[E+28>>2];QD(b,D,B,g,G)}}}l=F;return}function OD(b){b=b|0;if(a[b>>0]|0)if(jK(b,96043)|0)if(jK(b,96049)|0)if(!(jK(b,96056)|0))b=4;else b=(JA(b)|0)<<24>>24!=0&1;else b=3;else b=2;else b=0;return b|0}function PD(a,b){a=a|0;b=+b;if(c[a+60>>2]|0)h[(c[a+16>>2]|0)+152>>3]=b;return}function QD(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+176|0;k=n+8|0;j=n;h=n+40|0;if(!b)ma(96061,96065,52,96079);if(!d)ma(96091,96065,53,96079);i=c[d+8>>2]|0;if(!i)ma(96094,96065,54,96079);if(!(a[i>>0]|0))ma(96103,96065,55,96079);yK(h,c[d+28>>2]|0)|0;i=h+(sJ(h)|0)|0;a[i>>0]=58;a[i+1>>0]=0;JL(h,g)|0;if((RD(b,h)|0)==999){c[j>>2]=h;$l(0,96115,j)|0}g=c[b+92>>2]|0;if(g|0?(m=c[g>>2]|0,m|0):0){c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];kb[m&31](b,d,k,f)}l=n;return}function RD(a,b){a=a|0;b=b|0;b=Kr(c[a>>2]|0,4,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+92>>2]=c[b+12>>2];c[a+96>>2]=c[b>>2];b=300}return b|0}function SD(a){a=a|0;return 1}function TD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function UD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function VD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function WD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function XD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*1.1;a[b+537>>0]=1;return 0}function YD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*.9090909090909091;a[b+537>>0]=1;return 0}function ZD(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;e=b+536|0;d=(a[e>>0]|0)==0;a[e>>0]=d&1;if(d){d=c[b+448>>2]|0;e=c[b+452>>2]|0;i=+(d>>>0);g=+(e>>>0);f=i/+(d|0)<g/+(e|0);h[b+352>>3]=(f?i:g)/+((f?d:e)|0);e=b+336|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;a[b+537>>0]=1}return 0}function _D(b){b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+168>>2]|0;e=b+580|0;if(!(c[e>>2]|0)){c[e>>2]=d;e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]|2;oE(b,d)}hu(b,d);a[b+540>>0]=1;return}function $D(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;k=l;l=l+16|0;f=k;switch(d|0){case 1:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];hE(b,f);nE(b);a[b+538>>0]=1;a[b+541>>0]=1;j=13;break}case 2:{a[b+538>>0]=1;a[b+541>>0]=2;j=13;break}case 3:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];hE(b,f);a[b+538>>0]=1;a[b+541>>0]=3;j=13;break}case 4:{a[b+536>>0]=0;if(!(c[b+360>>2]|0)){f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i)+ +h[d>>3];g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;d=b+528|0}else{f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=+h[d>>3]-(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i);g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;d=b+520|0}j=b+344|0;h[j>>3]=g*.10000000000000009/(+h[d>>3]*i)+ +h[j>>3];h[f>>3]=i*1.1;j=13;break}case 5:{a[b+536>>0]=0;j=b+352|0;i=+h[j>>3]*.9090909090909091;h[j>>3]=i;if(!(c[b+360>>2]|0)){f=b+336|0;h[f>>3]=+h[f>>3]-(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i);g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;f=b+528|0}else{f=b+336|0;h[f>>3]=(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i)+ +h[f>>3];g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;f=b+520|0}j=b+344|0;h[j>>3]=+h[j>>3]-g*.10000000000000009/(+h[f>>3]*i);j=13;break}default:{}}if((j|0)==13)a[b+537>>0]=1;b=b+560|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];l=k;return}function aE(b,c,d){b=b|0;c=c|0;d=d|0;a[b+538>>0]=0;a[b+541>>0]=0;return}function bE(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0;k=l;l=l+16|0;e=k;i=b+560|0;j=(+h[d>>3]-+h[i>>3])/+h[b+520>>3];g=(+h[d+8>>3]-+h[b+568>>3])/+h[b+528>>3];if(!(+B(+j)<.0001&+B(+g)<.0001)){switch(a[b+541>>0]|0){case 0:{c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];hE(b,e);break}case 2:{f=+h[b+352>>3];if(!(c[b+360>>2]|0)){e=b+336|0;h[e>>3]=+h[e>>3]-j/f;e=b+344|0;h[e>>3]=+h[e>>3]-g/f}else{e=b+336|0;h[e>>3]=+h[e>>3]-g/f;e=b+344|0;h[e>>3]=+h[e>>3]+j/f}a[b+537>>0]=1;break}default:{}}c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2]}l=k;return}function cE(a,b,c){a=a|0;b=b|0;c=c|0;return}function dE(a){a=a|0;return}function eE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[b>>2]|0;if(d){d=bM(d,123632)|0;if(d|0){i=fr(d,0)|0;ML(d)|0;f=5}}else{i=fr(c[13853]|0,0)|0;f=5}if((f|0)==5?i|0:0){g=j+168|0;d=c[g>>2]|0;if(d|0){f=c[j+172>>2]|0;if((f|0)!=0?(h=c[f+4>>2]|0,(h|0)!=0):0){gb[h&127](d);d=c[g>>2]|0}jw(d);mn(c[g>>2]|0)|0}To(i,0,122277,280,1);To(i,1,122241,304,1);To(i,2,122254,176,1);c[g>>2]=i;c[(c[i+16>>2]|0)+144>>2]=j;if((ms(j,i,e)|0)!=-1){c[b+580>>2]=0;c[b+576>>2]=0;a[b+537>>0]=1}}return}function fE(a,b){a=a|0;b=b|0;a=c[a>>2]|0;ms(a,c[a+168>>2]|0,b)|0;return}function gE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;f=g+160|0;e=c[f>>2]|0;if((e|0)!=0?(c[g+164>>2]|0)==0:0){i=g+192|0;h=c[i>>2]|0;c[f>>2]=0;c[i>>2]=0;f=h}else{f=0;e=0}os(g,c[g+168>>2]|0,b,d)|0;if(e|0){i=c[a>>2]|0;c[i+160>>2]=e;c[i+192>>2]=f}return}function hE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0;f=l;l=l+80|0;e=f+48|0;g=f;m=f+32|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];iE(m,b,e);k=+h[m>>3];j=+h[m+8>>3];i=1.0/+h[b+352>>3];h[g+16>>3]=i+k;h[g+24>>3]=i+j;h[g>>3]=k-i;h[g+8>>3]=j-i;d=c[(c[b>>2]|0)+168>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];c[e+16>>2]=c[g+16>>2];c[e+20>>2]=c[g+20>>2];c[e+24>>2]=c[g+24>>2];c[e+28>>2]=c[g+28>>2];d=jE(d,e)|0;e=b+576|0;if((d|0)!=(c[e>>2]|0)){kE(b);c[e>>2]=d;lE(b);a[b+537>>0]=1}l=f;return}function iE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0;if(!(c[b+360>>2]|0)){e=+h[b+352>>3];f=+h[d+8>>3];g=e;i=b+528|0;e=+h[d>>3]/(+h[b+520>>3]*e)-+h[b+504>>3]}else{e=+h[b+352>>3];f=-+h[d>>3];g=e;i=b+520|0;e=+h[d+8>>3]/(+h[b+528>>3]*e)-+h[b+504>>3]}g=f/(+h[i>>3]*g)-+h[b+512>>3];h[a>>3]=e;h[a+8>>3]=g;return}function jE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=eo(a)|0;a:while(1){if(!e){e=9;break}d=Qm(a,e)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((EB(d,f)|0)<<24>>24){e=6;break a}d=Sm(a,d)|0}e=fo(a,e)|0}do if((e|0)!=6)if((e|0)==9){d=go(a)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((BB(d,f)|0)<<24>>24){e=12;break}d=ho(a,d)|0}if((e|0)==12)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];d=mE(a,f)|0;if(!d){d=a;break}else break}while(0);l=g;return d|0}function kE(b){b=b|0;var d=0;d=c[b+576>>2]|0;a:do if(d|0)switch(Do(d)|0){case 0:{d=(c[d+16>>2]|0)+112|0;a[d>>0]=a[d>>0]&-2;break a}case 1:{d=(c[d+16>>2]|0)+117|0;a[d>>0]=a[d>>0]&-2;break a}case 2:{d=(c[d+16>>2]|0)+115|0;a[d>>0]=a[d>>0]&-2;break a}default:break a}while(0);c[b+584>>2]=0;return}function lE(b){b=b|0;var d=0,e=0;e=b+584|0;d=c[e>>2]|0;if(d|0){$I(d);c[e>>2]=0}d=c[b+576>>2]|0;a:do if(d|0)switch(Do(d)|0){case 0:{b=(c[d+16>>2]|0)+112|0;a[b>>0]=a[b>>0]|1;b=zm(d,0,96229,0)|0;if(!b)break a;c[e>>2]=rw(Km(d,b)|0,d)|0;break a}case 1:{b=(c[d+16>>2]|0)+117|0;a[b>>0]=a[b>>0]|1;b=zm(so(d)|0,1,96229,0)|0;if(!b)break a;c[e>>2]=rw(Km(d,b)|0,d)|0;break a}case 2:{b=(c[d+16>>2]|0)+115|0;a[b>>0]=a[b>>0]|1;b=zm(so(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0,2,96229,0)|0;if(!b)break a;c[e>>2]=rw(Km(d,b)|0,d)|0;break a}default:break a}while(0);return}function mE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;e=m;g=c[a+16>>2]|0;i=c[g+180>>2]|0;j=g+184|0;d=1;while(1){if((d|0)>(i|0)){k=4;break}f=c[(c[j>>2]|0)+(d<<2)>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];f=mE(f,e)|0;if(!f)d=d+1|0;else{a=f;break}}do if((k|0)==4){o=+h[g+24>>3];n=+h[g+40>>3];if(((+h[b+16>>3]>=+h[g+16>>3]?+h[g+32>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=o:0)?n>=+h[b+8>>3]:0)break;a=0}while(0);l=m;return a|0}function nE(b){b=b|0;var d=0,e=0,f=0;f=b+580|0;d=c[f>>2]|0;a:do if(d|0)switch(Do(d)|0){case 0:{e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]&-7|4;break a}case 1:{e=(c[d+16>>2]|0)+117|0;a[e>>0]=a[e>>0]&-7|4;break a}case 2:{e=(c[d+16>>2]|0)+115|0;a[e>>0]=a[e>>0]&-7|4;break a}default:break a}while(0);d=b+588|0;e=c[d>>2]|0;if(e|0){$I(e);c[d>>2]=0}d=c[b+576>>2]|0;c[f>>2]=d;b:do if(d|0)switch(Do(d)|0){case 0:{f=(c[d+16>>2]|0)+112|0;a[f>>0]=a[f>>0]|2;oE(b,d);break b}case 1:{f=(c[d+16>>2]|0)+117|0;a[f>>0]=a[f>>0]|2;pE(b,d);break b}case 2:{f=(c[d+16>>2]|0)+115|0;a[f>>0]=a[f>>0]|2;qE(b,d);break b}default:break b}while(0);return}function oE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+592|0;do if((to(b)|0)==(b|0))if(!(rn(b)|0)){Fr(d,0,96286);break}else{Fr(d,0,96278);break}else Fr(d,0,96292);while(0);Fr(d,1,En(b)|0);c[a+596>>2]=2;f=a+604|0;d=0;e=2;while(1){d=Em(b,0,d)|0;if(!d)break;Fr(f,e,c[d+8>>2]|0);Fr(f,e+1|0,Km(b,d)|0);Fr(f,e+2|0,0);e=e+3|0}c[a+608>>2]=e;d=zm(b,0,96264,0)|0;if(!d){d=zm(b,0,96269,0)|0;if(d|0)g=11}else g=11;if((g|0)==11)c[a+588>>2]=rw(Km(b,d)|0,b)|0;return}function pE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+592|0;Fr(f,0,96273);Fr(f,1,En(b)|0);c[a+596>>2]=2;f=a+604|0;g=to(so(b)|0)|0;e=2;d=0;while(1){d=Em(g,1,d)|0;if(!d)break;Fr(f,e,c[d+8>>2]|0);Fr(f,e|1,Km(b,d)|0);e=e+2|0}c[a+608>>2]=e;d=zm(so(b)|0,1,96264,0)|0;if(!d){d=zm(so(b)|0,1,96269,0)|0;if(d|0)h=6}else h=6;if((h|0)==6)c[a+588>>2]=rw(Km(b,d)|0,b)|0;return}function qE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=a+592|0;Fr(h,0,96237);k=b+48|0;Fr(h,1,En(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0);k=(rn(so(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0)|0)!=0;Fr(h,3,k?122546:122549);k=b+-48|0;Fr(h,4,En(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0);c[a+596>>2]=7;i=a+604|0;j=to(so(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0)|0;g=7;d=0;a:while(1){while(1){d=Em(j,2,d)|0;if(!d)break a;e=d+8|0;f=c[e>>2]|0;if(!(yJ(f,96242)|0)){l=5;break}if(!(yJ(f,96251)|0)){l=7;break}if(yJ(f,96260)|0)break;Fr(h,6,Km(b,d)|0)}if((l|0)==5){l=0;Fr(h,2,Km(b,d)|0)}else if((l|0)==7){l=0;Fr(h,5,Km(b,d)|0)}Fr(i,g,c[e>>2]|0);Fr(i,g+1|0,Km(b,d)|0);g=g+2|0}c[a+608>>2]=g;d=zm(so(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,96264,0)|0;if(!d){d=zm(so(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,96269,0)|0;if(d|0)l=13}else l=13;if((l|0)==13)c[a+588>>2]=rw(Km(b,d)|0,b)|0;return}function rE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=sE(a,b,c[d>>2]|0)|0;d=c[d+4>>2]|0;while(1){f=c[d+4>>2]|0;if(!f)break;b=0;while(1){e=c[f+(b*20|0)+4>>2]|0;if(!e)break;Ir(a,c[d>>2]|0,e,c[f+(b*20|0)+8>>2]|0,g,f+(b*20|0)|0)|0;b=b+1|0}d=d+8|0}return}function sE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=xw(12)|0;if(!b)b=0;else b=HL(b)|0;c[e+4>>2]=b;c[e+8>>2]=HL(d)|0;d=a+100|0;c[e>>2]=c[d>>2];c[d>>2]=e;return e|0}function tE(b,c){b=b|0;c=c|0;uE(b);a[b+44>>0]=0;vE(b)|0;uA(b)|0;return}function uE(b){b=b|0;var d=0,e=0;d=c[b+32>>2]|0;a:do if(d|0)while(1){e=c[d>>2]|0;if(!e)break a;if((a[e>>0]|0)==103?iL(e,96301)|0:0)rE(b,0,c[d+4>>2]|0);d=d+8|0}while(0);return}function vE(a){a=a|0;var b=0;b=Kr(a,2,96314)|0;if(!b)a=999;else{c[a+148>>2]=c[(c[b+16>>2]|0)+12>>2];a=300}return a|0}function wE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[a+148>>2]|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=0):0)a=ab[e&63](b,d)|0;else a=0;return a|0}function xE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function yE(a){a=a|0;var b=0.0,d=0.0;a=c[a+16>>2]|0;d=+h[a+16>>3];b=+h[a+24>>3];return (zE(~~(d>b?d:b)>>>0)|0)+1|0}function zE(a){a=a|0;var b=0,c=0;if(!a)a=-1;else{c=a>>>0>65535;a=c?a>>>16:a;c=c?16:0;b=a>>>0>255;a=b?a>>>8:a;c=b?c|8:c;b=a>>>0>15;a=b?a>>>4:a;c=b?c|4:c;b=a>>>0>3;a=(b?c|2:c)+((b?a>>>2:a)>>>0>1&1)|0}return a|0}function AE(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;q=r;p=BE(b,d,e,f,g)|0;e=CE(p)|0;if((e|0)>=0){n=q+16|0;o=q+24|0;m=q+8|0;k=g+32|0;e=0;g=0;while(1){if((g|0)>=(d|0))break;f=b+(g*40|0)+32|0;do if(c[f>>2]|0){DE(q,p,b+(g*40|0)|0);i=+h[n>>3];j=+h[o>>3];if(!(c[q>>2]|0)){a[(c[f>>2]|0)+36>>0]=1;break}if(+h[m>>3]==0.0){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1;break}if((a[k>>0]|0)==1){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1}else e=1}while(0);g=g+1|0}EE(p)}l=r;return e|0}function BE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=ww(28)|0;j=Rl(24896,c[4348]|0)|0;h=g+20|0;c[h>>2]=j;do if(j){j=kH()|0;c[g+24>>2]=j;if(!j){YL(96532,14,1,c[13918]|0)|0;i=6;break}else{c[g>>2]=a;c[g+4>>2]=b;c[g+8>>2]=d;c[g+12>>2]=e;c[g+16>>2]=f;break}}else{YL(96532,14,1,c[13918]|0)|0;i=6}while(0);if((i|0)==6){a=c[h>>2]|0;if(a|0)Ll(a)|0;a=c[g+24>>2]|0;if(a|0)mH(a)|0;$I(g);g=0}return g|0}function CE(a){a=a|0;var b=0;b=NE(a)|0;if((b|0)>=0){OE(a);PE(a);b=Ll(c[a+20>>2]|0)|0}return b|0}function DE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0;M=l;l=l+464|0;J=M+416|0;L=M+400|0;G=M+384|0;m=M+352|0;n=M+320|0;o=M+288|0;p=M+256|0;r=M+224|0;s=M+192|0;t=M+160|0;u=M+128|0;v=M+96|0;x=M+64|0;y=M+32|0;H=M;z=c[d+32>>2]|0;e=+h[z>>3];C=d+16|0;A=(e*2.0+ +h[C>>3])*.125;D=z+8|0;I=d+24|0;i=+h[I>>3];K=(+h[D>>3]*2.0+i)*.5;if(!z)ma(96325,96335,445,96345);f=J;g=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));B=z+16|0;h[B>>3]=+h[d>>3]-e;E=d+8|0;F=z+24|0;h[F>>3]=i+ +h[E>>3];FE(m,b,d,J);j=c[m>>2]|0;f=c[m+4>>2]|0;e=+h[m+8>>3];m=m+16|0;c[L>>2]=c[m>>2];c[L+4>>2]=c[m+4>>2];c[L+8>>2]=c[m+8>>2];c[L+12>>2]=c[m+12>>2];a:do if(!j){c[a>>2]=0;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}else{h[F>>3]=+h[E>>3];FE(n,b,d,J);g=c[n>>2]|0;m=c[n+4>>2]|0;i=+h[n+8>>3];n=n+16|0;c[G>>2]=c[n>>2];c[G+4>>2]=c[n+4>>2];c[G+8>>2]=c[n+8>>2];c[G+12>>2]=c[n+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=m;e=i}else g=j;h[F>>3]=+h[E>>3]-+h[D>>3];FE(o,b,d,J);m=c[o>>2]|0;j=c[o+4>>2]|0;i=+h[o+8>>3];o=o+16|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];if(!m){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else m=g;h[B>>3]=+h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];FE(p,b,d,J);g=c[p>>2]|0;j=c[p+4>>2]|0;i=+h[p+8>>3];p=p+16|0;c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];FE(r,b,d,J);g=c[r>>2]|0;j=c[r+4>>2]|0;i=+h[r+8>>3];r=r+16|0;c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[B>>3]=+h[C>>3]+ +h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];FE(s,b,d,J);g=c[s>>2]|0;j=c[s+4>>2]|0;i=+h[s+8>>3];s=s+16|0;c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3];FE(t,b,d,J);g=c[t>>2]|0;j=c[t+4>>2]|0;i=+h[t+8>>3];t=t+16|0;c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[G+8>>2]=c[t+8>>2];c[G+12>>2]=c[t+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];FE(u,b,d,J);g=c[u>>2]|0;j=c[u+4>>2]|0;i=+h[u+8>>3];u=u+16|0;c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else g=m;j=(c[J+28>>2]|0)==0;do if(!(c[J+24>>2]|0))if(j){if(c[J+32>>2]|0){w=38;break}if(!((c[J+12>>2]|0)==0&(c[J>>2]|0)==0))w=38}else w=46;else if(j)w=38;else w=46;while(0);b:do if((w|0)==38)if(!(c[J+32>>2]|0)){h[B>>3]=+h[d>>3]-+h[z>>3];p=v+4|0;r=v+8|0;s=v+16|0;m=F;j=E;i=+h[I>>3];c:while(1){while(1){h[m>>3]=+h[j>>3]+i;if(!(+h[B>>3]<=+h[C>>3]+ +h[d>>3])){w=46;break b}FE(v,b,d,J);n=c[v>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break c;if(k<e)break;else{m=B;j=B;i=A}}c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}else w=46;while(0);d:do if((w|0)==46)if((c[J+12>>2]|0)==0&(c[J>>2]|0)==0){h[B>>3]=+h[d>>3]-+h[z>>3];k=+h[E>>3];n=x+4|0;o=x+8|0;p=x+16|0;i=k;k=+h[I>>3]+k;while(1){h[F>>3]=k;if(!(k>=i-+h[D>>3]))break d;FE(x,b,d,J);j=c[x>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}i=+h[E>>3];k=+h[F>>3]-K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);i=+h[d>>3];k=+h[C>>3]+i;h[B>>3]=k;q=+h[D>>3];h[F>>3]=+h[E>>3]-q;j=c[J+4>>2]|0;do if(!(c[J+8>>2]|0)){m=c[J>>2]|0;if(!((j|0)==0&(m|0)==0)){w=59;break}if(c[J+20>>2]|0){j=0;m=0;w=59;break}if(c[J+32>>2]|0){j=0;m=0;w=59}}else{m=c[J>>2]|0;w=59}while(0);e:do if((w|0)==59){f:do if((j|0)==0&(m|0)==0){h[B>>3]=k;p=y+4|0;r=y+8|0;s=y+16|0;m=F;j=E;i=q;g:while(1){while(1){h[m>>3]=+h[j>>3]-i;i=+h[d>>3];if(!(+h[B>>3]>=i-+h[z>>3]))break f;FE(y,b,d,J);n=c[y>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break g;if(k<e)break;else{m=B;j=B;i=A}}c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);if(c[J+20>>2]|0)break;if(c[J+32>>2]|0)break;h[B>>3]=+h[C>>3]+i;i=+h[E>>3];n=H+4|0;o=H+8|0;p=H+16|0;k=i;i=i-+h[D>>3];while(1){h[F>>3]=i;if(!(i<=+h[I>>3]+k))break e;FE(H,b,d,J);j=c[H>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}k=+h[E>>3];i=+h[F>>3]+K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}while(0);l=M;return}function EE(a){a=a|0;mH(c[a+24>>2]|0)|0;$I(a);return}function FE(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;s=t+16|0;p=t;g=c[e+32>>2]|0;if(!g)ma(96325,96335,382,96354);o=g+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];o=d+4|0;m=0;g=0;while(1){if((m|0)>=(c[o>>2]|0))break;j=c[d>>2]|0;k=j+(m*40|0)|0;do if((k|0)!=(e|0)){if(+h[j+(m*40|0)+16>>3]>0.0?+h[j+(m*40|0)+24>>3]>0.0:0)break;g=g+((GE(e,k)|0)!=0&1)|0}while(0);m=m+1|0}HE(e,q);m=c[d+24>>2]|0;m=oH(m,c[m>>2]|0,q)|0;if(!m){c[b>>2]=g;h[b+8>>3]=0.0;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}else{k=m;i=0.0;while(1){if(!k)break;j=c[(c[k+4>>2]|0)+16>>2]|0;if((j|0)!=(e|0)){IE(j,s);n=+JE(q,s);if(n>0.0){g=g+1|0;i=+KE(e,j,q,n,f)+i}d=c[j+32>>2]|0;if(((d|0)!=0?(a[d+36>>0]|0)!=0:0)?(HE(j,s),r=+JE(q,s),r>0.0):0){g=g+1|0;i=+LE(e,j,q,r,f)+i}}k=c[k>>2]|0}jH(m);c[b>>2]=g;h[b+8>>3]=i;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}l=t;return}function GE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0;a=c[a+32>>2]|0;if(+h[b+16>>3]==0.0?+h[b+24>>3]==0.0:0){if((((a|0)!=0?(d=+h[b>>3],e=+h[a+16>>3],d>e):0)?d<+h[a>>3]+e:0)?(f=+h[b+8>>3],g=+h[a+24>>3],f>g):0)a=f<+h[a+8>>3]+g&1;else a=0;return a|0}ma(96391,96335,219,96428);return 0}function HE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a+32>>2]|0;e=+h[a+16>>3];c[b>>2]=~~e;d=+h[a+24>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a>>3]+e);c[b+12>>2]=~~(+h[a+8>>3]+d);return}function IE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;e=+h[a>>3];c[b>>2]=~~e;d=+h[a+8>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a+16>>3]+e);c[b+12>>2]=~~(+h[a+24>>3]+d);return}function JE(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=c[a+8>>2]|0;j=c[b>>2]|0;if((((i|0)>=(j|0)?(k=c[a>>2]|0,l=c[b+8>>2]|0,(k|0)<=(l|0)):0)?(e=c[a+12>>2]|0,f=c[b+4>>2]|0,(e|0)>=(f|0)):0)?(g=c[a+4>>2]|0,h=c[b+12>>2]|0,(g|0)<=(h|0)):0)d=(+(c[((e|0)<(h|0)?a:b)+12>>2]|0)-+(c[((g|0)>(f|0)?a:b)+4>>2]|0))*(+(c[((i|0)<(l|0)?a:b)+8>>2]|0)-+(c[((k|0)>(j|0)?a:b)>>2]|0));else d=0.0;return +d}function KE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=ME(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{IE(a,i);g=+JE(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(HE(a,i),h=+JE(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function LE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=ME(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{IE(a,i);g=+JE(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(HE(a,i),h=+JE(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function ME(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=c[b+32>>2]|0;f=c[d+32>>2]|0;if((e|0)==(f|0))ma(96370,96335,276,96380);do if((a[e+36>>0]|0)!=0?(a[f+36>>0]|0)!=0:0){j=+h[b>>3];if(j==0.0?+h[b+8>>3]==0.0:0){e=-1;break}k=+h[d>>3];i=+h[d+8>>3];if(!(k==0.0&i==0.0)){g=+h[b+8>>3];if(i<g){if(k<j){e=0;break}e=k>j?2:1;break}e=k<j;if(i>g){if(e){e=6;break}e=k>j?8:7;break}if(!e)if(k>j)e=5;else e=-1;else e=3}else e=-1}else e=-1;while(0);return e|0}function NE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+32|0;d=k+24|0;e=k+16|0;f=k;g=yE(a)|0;h=a+4|0;i=e+4|0;j=a+20|0;b=0;while(1){if((b|0)>=(c[h>>2]|0)){b=0;break}m=ww(32)|0;o=(c[a>>2]|0)+(b*40|0)|0;n=m+12|0;c[m+28>>2]=o;QE(f,o);c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];c[n+8>>2]=c[f+8>>2];c[n+12>>2]=c[f+12>>2];n=c[n>>2]|0;c[e>>2]=(((c[m+20>>2]|0)-n|0)/2|0)+n;n=c[m+16>>2]|0;c[i>>2]=(((c[m+24>>2]|0)-n|0)/2|0)+n;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[m+8>>2]=RE(d,g)|0;n=c[j>>2]|0;if(!(bb[c[n>>2]&31](n,m,1)|0)){b=-1;break}else b=b+1|0}l=k;return b|0}function OE(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;e=c[d>>2]|0;b=a+24|0;a=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!a)break;e=c[b>>2]|0;pH(e,a+12|0,c[a+28>>2]|0,e,0)|0;e=c[d>>2]|0;a=bb[c[e>>2]&31](e,a,8)|0}return}function PE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=a+20|0;f=Tl(c[e>>2]|0)|0;d=0;while(1){if(!(Tl(c[e>>2]|0)|0))break;g=c[e>>2]|0;a=c[(c[g+8>>2]|0)+4>>2]|0;if(!a){h=8;break}b=c[(c[g+4>>2]|0)+8>>2]|0;if((b|0)<0)a=c[a+8>>2]|0;else a=a+(0-b)|0;if(!a){h=8;break}bb[c[g>>2]&31](g,a,4096)|0;$I(a);d=d+1|0}if((h|0)==8)ma(96441,96335,616,96444);if((f|0)==(d|0))return;else ma(96456,96335,623,96444)}function QE(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0.0;d=c[b+32>>2]|0;if(!d){e=0.0;f=0.0}else{e=+h[d>>3];f=+h[d+8>>3]}l=+h[b>>3];k=~~+A(+(l-e));g=+h[b+8>>3];j=~~+A(+(g-f));i=~~+N(+(l+e+ +h[b+16>>3]));if((i|0)==2147483647)ma(96468,96335,264,96495);d=~~+N(+(g+f+ +h[b+24>>3]));if((d|0)==2147483647)ma(96505,96335,266,96495);else{c[a>>2]=k;c[a+4>>2]=j;c[a+8>>2]=i;c[a+12>>2]=d;return}}function RE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=0;e=c[a>>2]|0;d=c[a+4>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;i=e>>>a&1;b=d>>>a&1;g=b+-1|0;h=g&(e^d);g=g&0-i;f=i<<1|f<<2|i^b;b=a;e=h^e^g;d=h^d^g}return f|0}function SE(b){b=b|0;var d=0,e=0,f=0,g=0;d=sJ(b)|0;if(d>>>0>=(c[42409]|0)>>>0){d=d+11|0;c[42409]=d;d=zw(c[42410]|0,d)|0;c[42410]=d;if(!d)d=0;else e=4}else{d=c[42410]|0;e=4}if((e|0)==4){g=d;while(1){e=a[b>>0]|0;if(!(e<<24>>24))break;f=e&255;if(lK(f)|0)e=(kK(f)|0)&255;a[g>>0]=e;g=g+1|0;b=b+1|0}a[g>>0]=0}return d|0}function TE(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0;F=l;l=l+144|0;s=F+96|0;p=F+80|0;v=F+124|0;t=F+72|0;w=F+64|0;x=F+56|0;C=F+48|0;D=F+40|0;E=F+32|0;y=F+24|0;z=F+16|0;A=F+8|0;B=F;i=F+120|0;m=F+116|0;n=F+112|0;o=F+108|0;c[e+32>>2]=f;r=b;while(1)if((a[r>>0]|0)==32)r=r+1|0;else break;c[o>>2]=255;b=a[r>>0]|0;a:do if(b<<24>>24==35){c[p>>2]=i;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=o;if((dM(r,96547,p)|0)<=2){b=a[r>>0]|0;q=12;break}switch(f|0){case 0:{G=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=G;g=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=g;j=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=j;k=+((c[o>>2]|0)>>>0)*.00392156862745098;UE(G,g,j,t,w,x);h[e>>3]=+h[t>>3];h[e+8>>3]=+h[w>>3];h[e+16>>3]=+h[x>>3];h[e+24>>3]=k;b=0;break a}case 1:{a[e>>0]=c[i>>2];a[e+1>>0]=c[m>>2];a[e+2>>0]=c[n>>2];a[e+3>>0]=c[o>>2];b=0;break a}case 3:{j=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=j;k=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=k;G=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=G;VE(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break a}case 2:{c[e>>2]=(((c[i>>2]|0)*65535|0)>>>0)/255|0;c[e+4>>2]=(((c[m>>2]|0)*65535|0)>>>0)/255|0;c[e+8>>2]=(((c[n>>2]|0)*65535|0)>>>0)/255|0;c[e+12>>2]=(((c[o>>2]|0)*65535|0)>>>0)/255|0;b=0;break a}case 4:{h[e>>3]=+((c[i>>2]|0)>>>0)*.00392156862745098;h[e+8>>3]=+((c[m>>2]|0)>>>0)*.00392156862745098;h[e+16>>3]=+((c[n>>2]|0)>>>0)*.00392156862745098;h[e+24>>3]=+((c[o>>2]|0)>>>0)*.00392156862745098;b=0;break a}default:{b=0;break a}}}else q=12;while(0);b:do if((q|0)==12){if(!(b<<24>>24!=46?((b&255)+-48|0)>>>0>=10:0)){b=sJ(r)|0;if(b>>>0>=(c[42411]|0)>>>0){b=b+11|0;c[42411]=b;b=zw(c[42412]|0,b)|0;c[42412]=b;if(!b){b=-1;break}}else b=c[42412]|0;m=b;i=r;c:while(1){n=i+1|0;i=a[i>>0]|0;switch(i<<24>>24){case 0:break c;case 44:{i=32;break}default:{}}a[m>>0]=i;m=m+1|0;i=n}a[m>>0]=0;c[s>>2]=t;c[s+4>>2]=w;c[s+8>>2]=x;if((dM(b,96561,s)|0)==3){k=+h[t>>3];k=k<1.0?k:1.0;k=k>0.0?k:0.0;h[t>>3]=k;j=+h[w>>3];j=j<1.0?j:1.0;j=j>0.0?j:0.0;h[w>>3]=j;g=+h[x>>3];g=g<1.0?g:1.0;g=g>0.0?g:0.0;h[x>>3]=g;switch(f|0){case 0:{h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=g;h[e+24>>3]=1.0;b=0;break b}case 1:{WE(k,j,g,C,D,E);a[e>>0]=~~(+h[C>>3]*255.0);a[e+1>>0]=~~(+h[D>>3]*255.0);a[e+2>>0]=~~(+h[E>>3]*255.0);a[e+3>>0]=-1;b=0;break b}case 3:{WE(k,j,g,C,D,E);VE(+h[C>>3],+h[D>>3],+h[E>>3],y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{WE(k,j,g,C,D,E);c[e>>2]=~~(+h[C>>3]*65535.0);c[e+4>>2]=~~(+h[D>>3]*65535.0);c[e+8>>2]=~~(+h[E>>3]*65535.0);c[e+12>>2]=65535;b=0;break b}case 4:{WE(k,j,g,C,D,E);h[e>>3]=+h[C>>3];h[e+8>>3]=+h[D>>3];h[e+16>>3]=+h[E>>3];h[e+24>>3]=1.0;b=0;break b}default:{b=0;break b}}}}i=XE(r)|0;c[v>>2]=i;if(!i)b=-1;else{b=c[42413]|0;if(!(((b|0)!=0?(u=c[b>>2]|0,(a[u>>0]|0)==(a[i>>0]|0)):0)?(yJ(u,i)|0)==0:0)){b=wM(v,24932,2491,12,38)|0;c[42413]=b;if(!b)switch(f|0){case 0:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}case 1:{a[e+2>>0]=0;a[e+1>>0]=0;a[e>>0]=0;a[e+3>>0]=-1;b=1;break b}case 3:{c[e>>2]=0;b=1;break b}case 2:{c[e+8>>2]=0;c[e+4>>2]=0;c[e>>2]=0;c[e+12>>2]=65535;b=1;break b}case 4:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}default:{b=1;break b}}}switch(f|0){case 0:{h[e>>3]=+(d[b+4>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+5>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+6>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}case 1:{a[e>>0]=a[b+7>>0]|0;a[e+1>>0]=a[b+8>>0]|0;a[e+2>>0]=a[b+9>>0]|0;a[e+3>>0]=a[b+10>>0]|0;b=0;break b}case 3:{j=+(d[b+7>>0]|0)*.00392156862745098;h[C>>3]=j;k=+(d[b+8>>0]|0)*.00392156862745098;h[D>>3]=k;G=+(d[b+9>>0]|0)*.00392156862745098;h[E>>3]=G;VE(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{c[e>>2]=(d[b+7>>0]|0)*257;c[e+4>>2]=(d[b+8>>0]|0)*257;c[e+8>>2]=(d[b+9>>0]|0)*257;c[e+12>>2]=(d[b+10>>0]|0)*257;b=0;break b}case 4:{h[e>>3]=+(d[b+7>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+8>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+9>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}default:{b=0;break b}}}}while(0);l=F;return b|0}function UE(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;i=b<c?b:c;m=b>c?b:c;m=m<a?a:m;i=m-(i>a?a:i);g=i/m;if(m>0.0)if(g>0.0){j=(m-a)/i;k=(m-b)/i;l=(m-c)/i;do if(!(m==a)){if(m==b){a=j+2.0-l;break}if(m==c)a=k+4.0-j;else a=0.0}else a=(b-c)/i;while(0);a=a*60.0;if(a<0.0)a=a+360.0}else a=0.0;else{g=0.0;a=0.0}h[d>>3]=a*.002777777777777778;h[f>>3]=m;h[e>>3]=g;return}function VE(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h[d>>3]=1.0-a;h[e>>3]=1.0-b;h[f>>3]=1.0-c;b=+h[d>>3];c=+h[e>>3];c=b<c?b:c;h[g>>3]=c;b=+h[f>>3];c=b<c?b:c;h[g>>3]=c;h[d>>3]=+h[d>>3]-c;h[e>>3]=+h[e>>3]-+h[g>>3];h[f>>3]=+h[f>>3]-+h[g>>3];return}function WE(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0,l=0;a:do if(!(b<=0.0)){i=!(a>=1.0)?a*6.0:0.0;l=~~i;i=i-+(l|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(l|0){case 0:{g=a;i=b;a=c;k=8;break a}case 1:{g=a;i=c;a=j;k=8;break a}case 2:{g=b;i=c;k=8;break a}case 3:{g=c;i=j;k=8;break a}case 4:{g=c;i=a;a=b;k=8;break a}case 5:{g=j;i=a;a=c;k=8;break a}default:break a}}else{g=c;i=c;a=c;k=8}while(0);if((k|0)==8){h[d>>3]=a;h[e>>3]=i;h[f>>3]=g}return}function XE(b){b=b|0;var d=0,e=0;d=a[b>>0]|0;if(((d<<24>>24!=98?(e=b+1|0,!(d<<24>>24==119|(WJ(e,122058,4)|0)==0)):0)?!(d<<24>>24==108|(WJ(e,122063,4)|0)==0):0)?(WJ(e,122068,8)|0)!=0:0){do if(d<<24>>24==47){d=XJ(e,47)|0;if(!d)b=e;else{if((a[e>>0]|0)!=47){e=(qK(122077,e,4)|0)==0;b=e?d+1|0:b;break}d=c[42414]|0;if((d|0?a[d>>0]|0:0)?qK(122077,d,3)|0:0){b=ZE(d,b+2|0)|0;break}b=b+2|0}}else{d=c[42414]|0;if(((d|0)!=0?(a[d>>0]|0)!=0:0)?(qK(122077,d,3)|0)!=0:0)b=ZE(d,b)|0}while(0);b=SE(b)|0}return b|0}function YE(a,b){a=a|0;b=b|0;return jK(c[a>>2]|0,c[b>>2]|0)|0}function ZE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=sJ(a)|0;g=(sJ(b)|0)+g|0;d=g+13|0;if((g+3|0)>>>0<(c[42415]|0)>>>0)d=c[42416]|0;else{c[42415]=d;d=zw(c[42416]|0,d)|0;c[42416]=d}c[e>>2]=a;c[e+4>>2]=b;qL(d,122082,e)|0;l=f;return c[42416]|0}function _E(a){a=a|0;c[42414]=a;return}function $E(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,g=0;f=l;l=l+208|0;g=f;aF(g,+h[a>>3],+h[a+8>>3],b,c,d,e);a=bF(g)|0;l=f;return a|0}function aF(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var i=0,j=0;h[a>>3]=b;h[a+8>>3]=c;j=a+16|0;h[j>>3]=d;i=a+24|0;h[i>>3]=e;h[a+32>>3]=0.0;c=+K(+(+F(+f)/e),+(+E(+f)/d));h[a+56>>3]=c;e=+K(+(+F(+g)/e),+(+E(+g)/d));h[a+40>>3]=1.0;h[a+48>>3]=0.0;e=e-+A(+((e-c)*.15915494309189535))*6.283185307179586;h[a+64>>3]=g-f>3.141592653589793&e-c<3.141592653589793?e+6.283185307179586:e;hF(a);iF(a);jF(a);g=+h[j>>3];g=(g-+h[i>>3])/g;h[a+168>>3]=g;h[a+176>>3]=(2.0-g)*g;g=1.0-g;h[a+184>>3]=g;h[a+192>>3]=g*g;return}function bF(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;q=ww(8)|0;f=+h[a+56>>3];e=+h[a+64>>3]-f;p=1;b=0;while(1){o=e/+(p|0);if(!(b<<24>>24==0&(p|0)<1024))break;a:do if(!(o<=1.5707963267948966))b=0;else{c=f;d=0;b=1;while(1){if(!(b<<24>>24!=0&(d|0)<(p|0)))break a;n=c+o;b=+cF(a,c,n)<=1.0e-05&1;c=n;d=d+1|0}}while(0);p=p<<1}i=+E(+f);u=+F(+f);d=a+16|0;s=+h[d>>3];v=s*i;j=a+24|0;c=+h[j>>3];g=c*u;i=c*i;c=+h[a>>3];k=a+40|0;t=+h[k>>3];l=a+48|0;r=+h[l>>3];e=t*v+c-r*g;m=a+8|0;n=+h[m>>3];g=r*v+t*g+n;s=-(u*s);dF(q,c,n);eF(q,e,g);n=+G(+(o*.5));n=+F(+o)*.3333333333333333*(+C(+(n*n*3.0+4.0))+-1.0);c=f;f=g;g=r*s+t*i;i=t*s-r*i;b=0;while(1){if((b|0)>=(p|0))break;r=c+o;u=+E(+r);v=+F(+r);x=+h[d>>3];z=x*u;w=+h[j>>3];t=w*v;u=w*u;w=+h[k>>3];y=+h[l>>3];s=w*z+ +h[a>>3]-y*t;t=y*z+w*t+ +h[m>>3];x=-(v*x);v=w*x-y*u;u=y*x+w*u;fF(q,e+i*n,f+g*n,s-v*n,t-u*n,s,t);c=r;e=s;f=t;g=u;i=v;b=b+1|0}gF(q);return q|0}function cF(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;d=c+b;i=+h[a+16>>3];e=+h[a+24>>3]/i;g=+E(+d);f=+E(+(d*2.0));d=+E(+(d*3.0));a=e<.25?10328:10584;return +(((e*.001+4.98)*e+.207)/(e+.0067)*i*+L(+(((+h[a+32>>3]*e+ +h[a+40>>3])*e+ +h[a+48>>3])/(+h[a+56>>3]+e)*g+((+h[a>>3]*e+ +h[a+8>>3])*e+ +h[a+16>>3])/(+h[a+24>>3]+e)+((+h[a+64>>3]*e+ +h[a+72>>3])*e+ +h[a+80>>3])/(+h[a+88>>3]+e)*f+((+h[a+96>>3]*e+ +h[a+104>>3])*e+ +h[a+112>>3])/(+h[a+120>>3]+e)*d+(((+h[a+160>>3]*e+ +h[a+168>>3])*e+ +h[a+176>>3])/(+h[a+184>>3]+e)*g+((+h[a+128>>3]*e+ +h[a+136>>3])*e+ +h[a+144>>3])/(+h[a+152>>3]+e)+((+h[a+192>>3]*e+ +h[a+200>>3])*e+ +h[a+208>>3])/(+h[a+216>>3]+e)*f+((+h[a+224>>3]*e+ +h[a+232>>3])*e+ +h[a+240>>3])/(+h[a+248>>3]+e)*d)*(c-b))))}function dF(a,b,d){a=a|0;b=+b;d=+d;var e=0;c[42417]=100;e=ww(1600)|0;c[a>>2]=e;h[e>>3]=b;h[e+8>>3]=d;c[a+4>>2]=1;return}function eF(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;f=c[a>>2]|0;e=(c[a+4>>2]|0)+-1|0;fF(a,+h[f+(e<<4)>>3],+h[f+(e<<4)+8>>3],b,d,b,d);return}function fF(a,b,d,e,f,g,i){a=a|0;b=+b;d=+d;e=+e;f=+f;g=+g;i=+i;var j=0,k=0,l=0,m=0;l=a+4|0;j=c[l>>2]|0;k=c[42417]|0;if((j+3|0)<(k|0))a=c[a>>2]|0;else{c[42417]=k<<1;j=bJ(c[a>>2]|0,k<<5)|0;c[a>>2]=j;a=j;j=c[l>>2]|0}h[a+(j<<4)>>3]=b;m=j+1|0;h[a+(j<<4)+8>>3]=d;h[a+(m<<4)>>3]=e;k=j+2|0;h[a+(m<<4)+8>>3]=f;h[a+(k<<4)>>3]=g;c[l>>2]=j+3;h[a+(k<<4)+8>>3]=i;return}function gF(a){a=a|0;var b=0;b=c[a>>2]|0;eF(a,+h[b>>3],+h[b+8>>3]);c[a>>2]=bJ(c[a>>2]|0,c[a+4>>2]<<4)|0;c[42417]=0;return}function hF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0;d=+h[a+16>>3];b=+h[a+24>>3];b=+C(+(d*d-b*b));d=b*+h[a+40>>3];b=b*+h[a+48>>3];e=+h[a>>3];h[a+104>>3]=e-d;c=+h[a+8>>3];h[a+112>>3]=c-b;h[a+120>>3]=e+d;h[a+128>>3]=c+b;return}function iF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;d=+h[a+16>>3];i=+h[a+56>>3];j=+E(+i)*d;b=+h[a+24>>3];i=+F(+i)*b;g=+h[a+64>>3];d=+E(+g)*d;b=+F(+g)*b;g=+h[a>>3];c=+h[a+40>>3];e=+h[a+48>>3];h[a+72>>3]=c*j+g-e*i;f=+h[a+8>>3];h[a+80>>3]=e*j+f+c*i;h[a+88>>3]=g+c*d-e*b;h[a+96>>3]=f+e*d+c*b;return}function jF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0;k=+h[a+24>>3];l=+h[a+16>>3];e=k/l;m=+h[a+48>>3];n=+B(+m)<.1;j=+h[a+40>>3];do if(n){b=m/j;c=+J(+(b*e));d=-c;if(j<0.0){b=+J(+(b/e));e=d;d=3.141592653589793-c;c=4.71238898038469-b;b=1.5707963267948966-b;break}else{b=+J(+(b/e));e=-3.141592653589793-c;c=1.5707963267948966-b;b=-1.5707963267948966-b;break}}else{b=j/m;c=+J(+(b/e));d=c+1.5707963267948966;if(m<0.0){b=+J(+(b*e));e=c+-1.5707963267948966;c=b+3.141592653589793;break}else{b=+J(+(b*e));e=d;d=c+4.71238898038469;c=b;b=b+-3.141592653589793;break}}while(0);g=+h[a+56>>3];e=e-+A(+((e-g)*.15915494309189535))*6.283185307179586;b=b-+A(+((b-g)*.15915494309189535))*6.283185307179586;f=d-+A(+((d-g)*.15915494309189535))*6.283185307179586;g=c-+A(+((c-g)*.15915494309189535))*6.283185307179586;i=+h[a+64>>3];if(!(e<=i)){e=+h[a+72>>3];c=+h[a+88>>3];c=e<c?e:c}else c=+E(+e)*l*j+ +h[a>>3]-k*+F(+e)*m;h[a+136>>3]=c;if(!(b<=i)){e=+h[a+80>>3];d=+h[a+96>>3];d=e<d?e:d}else d=+E(+b)*l*m+ +h[a+8>>3]+ +F(+b)*k*j;h[a+144>>3]=d;if(!(f<=i)){f=+h[a+72>>3];b=+h[a+88>>3];b=f>b?f:b}else b=+E(+f)*l*j+ +h[a>>3]-k*+F(+f)*m;h[a+152>>3]=b-c;if(!(g<=i)){m=+h[a+80>>3];b=+h[a+96>>3];b=m>b?m:b}else b=+E(+g)*l*m+ +h[a+8>>3]+ +F(+g)*k*j;h[a+160>>3]=b-d;return}function kF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+80|0;m=n;lF(b);k=+h[e+56>>3];g=+h[e+64>>3];switch(a[e+80>>0]|0){case 116:{g=(+h[e+48>>3]-+mF(d))*.5+g;f=4;break}case 98:{g=g-(+h[e+48>>3]-+mF(d))*.5;f=4;break}default:{}}if((f|0)==4)g=g+-1.0;h[m>>3]=k;h[m+8>>3]=g;c[m+20>>2]=c[e+8>>2];c[m+16>>2]=c[e+4>>2];h[m+32>>3]=+h[e+16>>3];j=b+16|0;f=Jm(c[(c[j>>2]|0)+8>>2]|0,122089)|0;e=m+56|0;c[e>>2]=f;i=m+60|0;c[i>>2]=c[(c[j>>2]|0)+212>>2];j=m+64|0;a[j>>0]=0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))c[e>>2]=122100;if((a[d+4>>0]|0)==1){e=c[d>>2]|0;GD(b,c[(c[b>>2]|0)+336>>2]|0);f=c[e+24>>2]|0;if(!f)CD(b,122106);else CD(b,f);oF(b,e,m);if(a[j>>0]|0)$I(c[i>>2]|0)}else nF(b,c[d>>2]|0,m);pF(b);l=n;return}function lF(a){a=a|0;var d=0,e=0,f=0;d=Wt(a)|0;e=c[d>>2]|0;a=c[e+4>>2]|0;c[d+4>>2]=a;c[d+12>>2]=c[e+12>>2];switch(a|0){case 2:{a=e+8|0;f=6;break}case 0:{a=e+8|0;f=6;break}case 1:{a=e+8|0;f=6;break}case 3:{a=e+8|0;f=6;break}default:{}}if((f|0)==6)c[d+8>>2]=c[a>>2];c[d+208>>2]=c[e+208>>2];c[d+228>>2]=c[e+228>>2];c[d+244>>2]=c[e+244>>2];f=d+260|0;b[f>>1]=b[f>>1]&-2|b[e+260>>1]&1;return}function mF(b){b=b|0;var d=0.0,e=0,f=0;switch(a[b+4>>0]|0){case 1:{e=c[b>>2]|0;b=e+72|0;e=e+56|0;f=5;break}case 3:{e=c[b>>2]|0;b=e+24|0;e=e+8|0;f=5;break}case 2:{e=c[b>>2]|0;b=e+32|0;e=e+16|0;f=5;break}default:d=0.0}if((f|0)==5)d=+h[b>>3]-+h[e>>3];return +d}function nF(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+96|0;j=n+64|0;i=n+32|0;g=n+16|0;k=n;m=b[e+4>>1]|0;if(m<<16>>16>=1){r=e+8|0;p=+h[e+24>>3];o=+h[r>>3];h[k>>3]=(o+p)*.5+ +h[f>>3];h[k+8>>3]=(+h[e+16>>3]+ +h[e+32>>3])*.5+ +h[f+8>>3];q=c[e>>2]|0;s=f+16|0;f=a[e+6>>0]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[i+16>>2]=c[s+16>>2];c[i+20>>2]=c[s+20>>2];c[i+24>>2]=c[s+24>>2];c[i+28>>2]=c[s+28>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];c[j+16>>2]=c[r+16>>2];c[j+20>>2]=c[r+20>>2];c[j+24>>2]=c[r+24>>2];c[j+28>>2]=c[r+28>>2];BF(d,m<<16>>16,q,g,(p-o)*.5,i,j,f)}l=n;return}function oF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+176|0;t=y+96|0;v=y+64|0;w=y+136|0;p=y;q=y+128|0;r=f+48|0;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];c[v+12>>2]=c[r+12>>2];c[v+16>>2]=c[r+16>>2];c[v+20>>2]=c[r+20>>2];c[v+24>>2]=c[r+24>>2];c[v+28>>2]=c[r+28>>2];m=+h[g>>3];n=+h[g+8>>3];r=f+84|0;i=c[r>>2]|0;if(!(c[f>>2]|0))x=(c[f+8>>2]|0)!=0;else x=1;u=f+108|0;j=c[u>>2]|0;if(j|0)qF(g,j,167296);h[v>>3]=+h[v>>3]+m;s=v+16|0;h[s>>3]=+h[s>>3]+m;s=v+8|0;h[s>>3]=+h[s>>3]+n;s=v+24|0;h[s>>3]=+h[s>>3]+n;if(x?(c[e+152>>2]&4|0)==0:0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];s=rF(e,g,f,t,w)|0}else s=0;o=f+42|0;j=b[o>>1]|0;if(!(j&32)){k=c[f+20>>2]|0;if(k){j=sF(e,k,c[f+28>>2]|0,j&65535,q)|0;if(!(b[o>>1]&4)){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];JD(e,t,j)}else{o=d[f+33>>0]|0;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];zy(e,tF(p,t,o)|0,4,4,j)}$I(c[q>>2]|0)}while(1){j=c[i>>2]|0;if(!j)break;uF(e,j,g);i=i+4|0}i=c[r>>2]|0;PD(e,1.0);j=f+24|0;while(1){k=i+4|0;i=c[i>>2]|0;if(!i)break;if(!(a[i+100>>0]|0)){i=k;continue}vF(e,i,g,c[j>>2]|0,c[k>>2]|0);i=k}if(a[f+33>>0]|0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];wF(e,f,t)}}if(s|0)xF(e,w);if((x?c[e+152>>2]&4|0:0)?(c[t>>2]=c[v>>2],c[t+4>>2]=c[v+4>>2],c[t+8>>2]=c[v+8>>2],c[t+12>>2]=c[v+12>>2],c[t+16>>2]=c[v+16>>2],c[t+20>>2]=c[v+20>>2],c[t+24>>2]=c[v+24>>2],c[t+28>>2]=c[v+28>>2],rF(e,g,f,t,w)|0):0)xF(e,w);if(c[u>>2]|0)yF(g,167296);l=y;return}function pF(a){a=a|0;var b=0;b=c[a+16>>2]|0;c[b+208>>2]=0;c[b+228>>2]=0;c[b+244>>2]=0;c[b+212>>2]=0;Xt(a);return}function qF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;i=a+16|0;f=c[i>>2]|0;if(f|0){if(!(c[b>>2]|0)){f=0;g=d}else{c[d>>2]=f;f=c[b>>2]|0;g=i}c[g>>2]=f}f=c[a+20>>2]|0;if(f|0){g=b+4|0;if(!(c[g>>2]|0)){f=0;g=d}else{c[d+4>>2]=f;f=c[g>>2]|0;g=i}c[g+4>>2]=f}e=+h[a+32>>3];if(e>=0.0){f=b+16|0;if(!(+h[f>>3]>=0.0))e=-1.0;else{h[d+16>>3]=e;e=+h[f>>3];d=i}h[d+16>>3]=e}return}function rF(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+224|0;n=u+8|0;k=u;t=u+40|0;j=u+184|0;i=u+56|0;m=c[d+16>>2]|0;o=m+208|0;c[h>>2]=c[o>>2];p=m+228|0;c[h+4>>2]=c[p>>2];q=m+244|0;c[h+8>>2]=c[q>>2];r=m+212|0;c[h+12>>2]=c[r>>2];s=m+260|0;a[h+16>>0]=(b[s>>1]<<15&65535)<<16>>16>>15;h=c[f+16>>2]|0;if((h|0)!=0?(a[h>>0]|0)!=0:0)i=0;else{dm(t,128,i);i=e+60|0;h=c[i>>2]|0;if(!h){h=HL(Zt(d,c[m+8>>2]|0,t)|0)|0;c[i>>2]=h;a[e+64>>0]=1}gm(t,h)|0;i=c[42418]|0;c[42418]=i+1;c[k>>2]=i;qL(j,122183,k)|0;gm(t,j)|0;i=t+4|0;h=c[i>>2]|0;if(h>>>0>=(c[t+8>>2]|0)>>>0){em(t,1)|0;h=c[i>>2]|0}a[h>>0]=0;h=c[t>>2]|0;c[i>>2]=h;i=1}h=Yt(d,0,c[f>>2]|0,c[f+12>>2]|0,c[f+8>>2]|0,h,c[m+8>>2]|0)|0;if(i)hm(t);do if(h|0){if((c[o>>2]|0)==0?(b[s>>1]&1)==0:0)break;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];c[n+16>>2]=c[g+16>>2];c[n+20>>2]=c[g+20>>2];c[n+24>>2]=c[g+24>>2];c[n+28>>2]=c[g+28>>2];eu(d,n);xD(d,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)}while(0);l=u;return h|0}function sF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;if(!((yv(b,f,i)|0)<<24>>24)){ED(a,b);b=1}else{ED(a,c[f>>2]|0);b=c[f+4>>2]|0;h=+g[i>>2];if(!b)FD(a,122106,d,h);else FD(a,b,d,h);b=e>>>1&1|2}CD(a,122171);l=j;return b|0}function tF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];e=a+32|0;b=b+16|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];if((d|0)>1){j=+(d|0)*.5;i=+h[a>>3]+j;h[a>>3]=i;d=a+8|0;g=+h[d>>3]+j;h[d>>3]=g;f=+h[e>>3]-j;h[e>>3]=f;e=a+40|0;j=+h[e>>3]-j;h[e>>3]=j}else{f=+h[e>>3];g=+h[a+8>>3];i=+h[a>>3];j=+h[a+40>>3]}h[a+16>>3]=f;h[a+24>>3]=g;h[a+48>>3]=i;h[a+56>>3]=j;return a|0}function uF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+176|0;r=v+96|0;s=v+136|0;t=v+64|0;p=v;q=v+128|0;u=f+48|0;c[t>>2]=c[u>>2];c[t+4>>2]=c[u+4>>2];c[t+8>>2]=c[u+8>>2];c[t+12>>2]=c[u+12>>2];c[t+16>>2]=c[u+16>>2];c[t+20>>2]=c[u+20>>2];c[t+24>>2]=c[u+24>>2];c[t+28>>2]=c[u+28>>2];j=+h[g>>3];k=+h[g+8>>3];if(!(c[f>>2]|0))u=(c[f+8>>2]|0)!=0;else u=1;h[t>>3]=+h[t>>3]+j;o=t+16|0;h[o>>3]=+h[o>>3]+j;o=t+8|0;h[o>>3]=+h[o>>3]+k;o=t+24|0;h[o>>3]=+h[o>>3]+k;if(u?(c[e+152>>2]&4|0)==0:0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];o=rF(e,g,f,r,s)|0}else o=0;n=f+42|0;i=b[n>>1]|0;a:do if(!(i&32)){m=c[f+20>>2]|0;if(m|0){i=sF(e,m,c[f+28>>2]|0,i&65535,q)|0;if(!(b[n>>1]&4)){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];JD(e,r,i)}else{n=d[f+33>>0]|0;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];zy(e,tF(p,r,n)|0,4,4,i)}$I(c[q>>2]|0)}if(a[f+33>>0]|0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];wF(e,f,r)}i=f+88|0;switch(a[f+92>>0]|0){case 1:{oF(e,c[i>>2]|0,g);break a}case 3:{AF(e,c[i>>2]|0,g);break a}default:{nF(e,c[i>>2]|0,g);break a}}}while(0);if(o|0)xF(e,s);if((u?c[e+152>>2]&4|0:0)?(c[r>>2]=c[t>>2],c[r+4>>2]=c[t+4>>2],c[r+8>>2]=c[t+8>>2],c[r+12>>2]=c[t+12>>2],c[r+16>>2]=c[t+16>>2],c[r+20>>2]=c[t+20>>2],c[r+24>>2]=c[t+24>>2],c[r+28>>2]=c[t+28>>2],rF(e,g,f,r,s)|0):0)xF(e,s);l=v;return}function vF(f,g,i,j,k){f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+32|0;y=A+16|0;z=A;r=+h[i>>3];x=+h[i+8>>3];q=(j|0)==0?122106:j;ED(f,q);CD(f,q);t=+h[g+48>>3];o=+h[g+56>>3];u=+h[g+64>>3];p=+h[g+72>>3];s=t+r;r=u+r;x=o+x;q=g+100|0;i=a[q>>0]|0;if((i&1)!=0?(n=c[g+96>>2]|0,((e[g+80>>1]|0)+(e[g+84>>1]|0)|0)<(c[n+104>>2]|0)):0){i=b[g+86>>1]|0;do if(i<<16>>16)if(((e[g+82>>1]|0)+(i&65535)|0)==(c[n+100>>2]|0)){B=a[n+32>>0]|0;C=(B<<24>>24)/2|0;j=(C<<24>>24)+(d[n+33>>0]|0)|0;i=j;j=j&255;m=x-+(C<<24>>24);n=B;break}else{n=a[n+32>>0]|0;i=0;j=((n<<24>>24)/2|0)<<24>>24;m=x;break}else{C=a[n+32>>0]|0;j=((C<<24>>24)/2|0)<<24>>24;i=j+(d[n+33>>0]|0)|0;m=x;n=C}while(0);h[z+8>>3]=m-+(j|0);h[z>>3]=r+ +(((n<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];zF(f,y,0.0,p-o+ +(i&255|0)+ +(n<<24>>24));i=a[q>>0]|0}if(i&2?(v=b[g+86>>1]|0,w=c[g+96>>2]|0,((e[g+82>>1]|0)+(v&65535)|0)<(c[w+100>>2]|0)):0){i=b[g+84>>1]|0;do if(!(i<<16>>16)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;n=(C<<24>>24)+(d[w+33>>0]|0)|0;j=n&255;n=n&255;m=+(C<<24>>24);h[z>>3]=s-m-+(n|0);if((c[w+104>>2]|0)==(e[g+80>>1]|0)){j=n<<1&255;break}if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+(j&255)-u+ +h[w+64>>3]-m)&255}else{if(((e[g+80>>1]|0)+(i&65535)|0)==(c[w+104>>2]|0)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;j=(C&255)+(d[w+33>>0]|0)&255;h[z>>3]=s-+(C<<24>>24);break}i=a[w+32>>0]|0;m=+(((i<<24>>24)/2|0)<<24>>24);h[z>>3]=s-m;if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+h[w+64>>3]-u-m)&255;else j=0}while(0);h[z+8>>3]=x-+(((i<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];zF(f,y,u-t+ +(j&255)+ +(i<<24>>24),0.0)}l=A;return}function wF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;p=l;l=l+160|0;o=p+112|0;n=p;j=p+144|0;m=c[f+24>>2]|0;CD(e,(m|0)==0?122106:m);m=f+42|0;i=b[m>>1]|0;if(!(i&384))GD(e,c[(c[e>>2]|0)+336>>2]|0);else{c[j+4>>2]=0;c[j>>2]=0;i=i&65535;if(!(i&256)){if(i&128|0){i=122112;k=4}}else{i=122119;k=4}if((k|0)==4)c[j>>2]=i;GD(e,j)}k=f+33|0;PD(e,+(d[k>>0]|0));a:do if(!(b[m>>1]&4)){i=b[f+36>>1]&15360;if(!(i<<16>>16)){i=a[k>>0]|0;if((i&255)>1){q=+(i&255)*.5;h[g>>3]=+h[g>>3]+q;n=g+8|0;h[n>>3]=+h[n>>3]+q;n=g+16|0;h[n>>3]=+h[n>>3]-q;n=g+24|0;h[n>>3]=+h[n>>3]-q};c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];JD(e,o,0);break}j=n+16|0;m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];tF(j,o,m)|0;do switch(((i&65535)+-1024|0)>>>10&4194303|0){case 7:{LD(e,j,2);break a}case 3:{LD(e,n+32|0,2);break a}case 1:{LD(e,n+48|0,2);break a}case 0:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,2);break a}case 11:{LD(e,j,3);break a}case 5:{LD(e,n+32|0,3);break a}case 2:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];LD(e,n+48|0,3);break a}case 8:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,3);break a}case 13:{LD(e,j,4);break a}case 6:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];LD(e,n+32|0,4);break a}case 10:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];g=n+96|0;o=n+32|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];LD(e,n+48|0,4);break a}case 12:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,4);break a}case 9:{LD(e,j,2);LD(e,n+48|0,2);break a}case 4:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];LD(e,n,2);LD(e,n+32|0,2);break a}default:break a}while(0)}else{m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];zy(e,tF(n,o,m)|0,4,4,0)}while(0);l=p;return}function xF(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=c[d+16>>2]|0;f=h+208|0;if((c[f>>2]|0)==0?(b[h+260>>1]&1)==0:0)d=0;else{yD(d);d=c[f>>2]|0}if((d|0)!=(c[e>>2]|0)){$I(d);c[f>>2]=c[e>>2]}d=h+228|0;f=c[d>>2]|0;g=e+4|0;if((f|0)!=(c[g>>2]|0)){$I(f);c[d>>2]=c[g>>2]}d=h+244|0;f=c[d>>2]|0;g=e+8|0;if((f|0)!=(c[g>>2]|0)){$I(f);c[d>>2]=c[g>>2]}d=h+212|0;f=c[d>>2]|0;g=e+12|0;if((f|0)!=(c[g>>2]|0)){$I(f);c[d>>2]=c[g>>2]}h=h+260|0;b[h>>1]=b[h>>1]&-2|a[e+16>>0]&1;return}function yF(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(e|0)c[a+16>>2]=e;e=c[b+4>>2]|0;if(e|0)c[a+20>>2]=e;d=+h[b+16>>3];if(d>=0.0)h[a+32>>3]=d;return}function zF(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0;f=l;l=l+64|0;g=f+32|0;i=f;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=+h[b>>3]+d;h[i+24>>3]=+h[b+8>>3]+e;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];c[g+20>>2]=c[i+20>>2];c[g+24>>2]=c[i+24>>2];c[g+28>>2]=c[i+28>>2];JD(a,g,1);l=f;return}function AF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0;i=l;l=l+64|0;g=i;k=+h[e>>3];n=k+ +h[d>>3];m=+h[e+8>>3];j=m+ +h[d+8>>3];k=k+ +h[d+16>>3];m=m+ +h[d+24>>3];h[g>>3]=k;h[g+8>>3]=m;h[g+32>>3]=n;h[g+40>>3]=j;h[g+16>>3]=n;h[g+24>>3]=m;h[g+48>>3]=k;h[g+56>>3]=j;f=c[d+36>>2]|0;if(!f)f=c[e+56>>2]|0;e=c[d+32>>2]|0;if(!e)ma(122126,122134,623,122146);if(!(a[e>>0]|0))ma(122160,122134,624,122146);else{ND(b,e,g,4,1,f);l=i;return}}function BF(d,e,f,g,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=j|0;k=k|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0;R=l;l=l+128|0;K=R+104|0;O=R+48|0;P=R+16|0;L=R;J=L;c[J>>2]=0;c[J+4>>2]=0;M=+h[g>>3];N=M-i;I=M+i;J=L+8|0;h[J>>3]=(+h[k+24>>3]-+h[k+8>>3])*.5+ +h[g+8>>3];zD(d,1);D=P+16|0;E=P+4|0;F=P+24|0;G=O+4|0;H=O+16|0;s=(m|0)==0;t=O+24|0;u=O+8|0;v=O+32|0;w=O+40|0;x=O+48|0;y=j+16|0;z=j+4|0;A=P+8|0;q=0;while(1){if((q|0)>=(e|0))break;switch(a[f+(q*24|0)+6>>0]|0){case 108:{i=N;break}case 114:{i=I-+h[f+(q*24|0)+8>>3];break}default:i=M-+h[f+(q*24|0)+8>>3]*.5}h[g>>3]=i;B=f+(q*24|0)+16|0;h[J>>3]=+h[J>>3]-+h[B>>3];C=f+(q*24|0)+4|0;p=c[f+(q*24|0)>>2]|0;r=0;while(1){if((r|0)>=(b[C>>1]|0))break;o=p+4|0;m=c[o>>2]|0;if(m){h[D>>3]=+h[(+h[m+16>>3]>0.0?m:j)+16>>3];c[P>>2]=c[((c[m>>2]|0)==0?j:m)>>2];k=c[((c[m+4>>2]|0)==0?j:m)+4>>2]|0;c[E>>2]=k;m=c[m+24>>2]&127;if(!m)Q=12;else m=c[F>>2]&-128|m}else{h[D>>3]=+h[y>>3];c[P>>2]=c[j>>2];k=c[z>>2]|0;c[E>>2]=k;Q=12}if((Q|0)==12){Q=0;m=c[F>>2]&-128}c[F>>2]=m;CD(d,k);c[O>>2]=c[p>>2];c[G>>2]=P;h[H>>3]=+h[p+16>>3];if(s)n=1.0;else n=+h[p+24>>3];h[t>>3]=n;c[A>>2]=c[(c[o>>2]|0)+8>>2];c[u>>2]=c[p+8>>2];o=p+32|0;h[v>>3]=+h[o>>3];h[w>>3]=+h[B>>3];a[x>>0]=108;h[L>>3]=i;c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];BD(d,K,O);n=+h[o>>3]+i;h[g>>3]=n;p=p+56|0;r=r+1|0;i=n}q=q+1|0}AD(d);l=R;return}function CF(a){a=a|0;$I(c[a>>2]|0);$I(c[a+4>>2]|0);$I(c[a+8>>2]|0);$I(c[a+16>>2]|0);$I(c[a+12>>2]|0);$I(c[a+20>>2]|0);$I(c[a+24>>2]|0);return}function DF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(a|0){j=a+4|0;e=0;g=c[a>>2]|0;while(1){if((e|0)>=(b[j>>1]|0))break;k=g+4|0;d=0;f=c[g>>2]|0;while(1){if((d|0)>=(b[k>>1]|0))break;$I(c[f>>2]|0);h=c[f+8>>2]|0;if(h|0?(i=c[f+12>>2]|0,i|0):0)gb[i&127](h);d=d+1|0;f=f+56|0}e=e+1|0;g=g+24|0}d=c[a>>2]|0;if(d|0)$I(d);$I(a)}return}function EF(a){a=a|0;$I(c[a+32>>2]|0);$I(a);return}function FF(b,d){b=b|0;d=d|0;switch(a[b+4>>0]|0){case 1:{GF(c[b>>2]|0);break}case 3:{EF(c[b>>2]|0);break}default:DF(c[b>>2]|0)}if(d|0)$I(b);return}function GF(a){a=a|0;var b=0,d=0,e=0;e=a+84|0;if((c[a+100>>2]|0)==-1)Ll(c[e>>2]|0)|0;else{b=c[e>>2]|0;$I(c[a+92>>2]|0);$I(c[a+96>>2]|0);while(1){d=c[b>>2]|0;if(!d)break;HF(d);b=b+4|0}$I(c[e>>2]|0)}CF(a);$I(a);return}function HF(a){a=a|0;FF(a+88|0,0);CF(a);$I(a);return}function IF(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;b=c[(c[(c[b+16>>2]|0)+104>>2]|0)+72>>2]|0;if((a[b+4>>0]|0)!=2?(g=JF(c[b>>2]|0,e)|0,(g|0)!=0):0){c[f>>2]=d[g+35>>0];b=g+48|0}else b=0;return b|0}function JF(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+4>>2]|0;if(!((d|0)!=0?(jK(d,b)|0)==0:0))e=3;a:do if((e|0)==3){d=c[a+84>>2]|0;while(1){a=c[d>>2]|0;if(!a){a=0;break a}a=KF(a,b)|0;if(!a)d=d+4|0;else break}}while(0);return a|0}function KF(b,d){b=b|0;d=d|0;var e=0;e=c[b+4>>2]|0;if(!((e|0)!=0?(jK(e,d)|0)==0:0))if((a[b+92>>0]|0)==1)b=JF(c[b+88>>2]|0,d)|0;else b=0;return b|0}function LF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function MF(d){d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=d+92|0;c[p>>2]=ww((c[d+100>>2]<<2)+4|0)|0;n=ww((c[d+104>>2]<<2)+4|0)|0;c[d+96>>2]=n;o=d+32|0;m=c[d+84>>2]|0;while(1){l=c[m>>2]|0;if(!l)break;d=b[l+82>>1]|0;f=+h[l+72>>3];if(d<<16>>16==1)i=~~f;else{i=~~((f-+(O((a[o>>0]|0)+-1|0,(d&65535)+-1|0)|0))/+(d&65535));i=(i|0)>1?i:1}j=b[l+80>>1]|0;f=+h[l+64>>3];if(j<<16>>16==1)k=~~f;else{k=~~((f-+(O((a[o>>0]|0)+-1|0,(j&65535)+-1|0)|0))/+(j&65535));k=(k|0)>1?k:1}q=e[l+86>>1]|0;g=(d&65535)+q|0;d=q;while(1){if((d|0)>=(g|0))break;q=(c[p>>2]|0)+(d<<2)|0;r=c[q>>2]|0;c[q>>2]=(r|0)>(i|0)?r:i;d=d+1|0}d=e[l+84>>1]|0;g=(j&65535)+d|0;while(1){if((d|0)>=(g|0))break;r=n+(d<<2)|0;q=c[r>>2]|0;c[r>>2]=(q|0)>(k|0)?q:k;d=d+1|0}m=m+4|0}return}function NF(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;if(a>>>0<21)a=c[54824+(a<<2)>>2]|0;else{c[b>>2]=a;qL(174085,122187,b)|0;a=174085}l=d;return a|0}function OF(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=a+104|0;l=a+100|0;j=d+16|0;f=0;g=0;while(1){if((f|0)>(c[k>>2]|0))break;i=oo(d,NF(f)|0,1)|0;Oo(i,122241,304,1)|0;m=i+16|0;c[(c[m>>2]|0)+176>>2]=0;o=ww((c[l>>2]<<2)+4|0)|0;n=c[m>>2]|0;c[n+172>>2]=o;c[n+184>>2]=0;n=ww((c[l>>2]<<2)+4|0)|0;c[(c[m>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}j=b+16|0;f=0;g=0;while(1){if((f|0)>(c[l>>2]|0))break;i=oo(b,NF(f)|0,1)|0;Oo(i,122241,304,1)|0;o=i+16|0;c[(c[o>>2]|0)+176>>2]=0;m=ww((c[k>>2]<<2)+4|0)|0;n=c[o>>2]|0;c[n+172>>2]=m;c[n+184>>2]=0;n=ww((c[k>>2]<<2)+4|0)|0;c[(c[o>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}f=c[a+84>>2]|0;while(1){g=c[f>>2]|0;if(!g)break;o=g+84|0;n=oo(d,NF(e[o>>1]|0)|0,0)|0;o=oo(d,NF((e[g+80>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;PF(d,n,o,~~+h[g+64>>3]);o=g+86|0;n=oo(b,NF(e[o>>1]|0)|0,0)|0;o=oo(b,NF((e[g+82>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;PF(b,n,o,~~+h[g+72>>3]);f=f+4|0}QF(d);QF(b);return}function PF(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;h=bn(a,d,f,0,0)|0;if(!h){i=bn(a,d,f,0,1)|0;Oo(i,122254,176,1)|0;b[(c[i+16>>2]|0)+170>>1]=g;d=d+16|0;a=c[d>>2]|0;h=c[a+180>>2]|0;if(!h)a=xw((c[a+184>>2]<<2)+8|0)|0;else a=zw(h,(c[a+184>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+180>>2]=a;g=g+184|0;h=c[g>>2]|0;c[g>>2]=h+1;c[a+(h<<2)>>2]=i;d=c[d>>2]|0;c[(c[d+180>>2]|0)+(c[d+184>>2]<<2)>>2]=0;d=f+16|0;a=c[d>>2]|0;h=c[a+172>>2]|0;if(!h)a=xw((c[a+176>>2]<<2)+8|0)|0;else a=zw(h,(c[a+176>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+172>>2]=a;g=g+176|0;f=c[g>>2]|0;c[g>>2]=f+1;c[a+(f<<2)>>2]=i;i=c[d>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0}else{i=(c[h+16>>2]|0)+170|0;f=e[i>>1]|0;b[i>>1]=(f|0)>(g|0)?f:g}return}function QF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[a+16>>2]|0)+192>>2]|0;while(1){f=d+16|0;h=c[(c[f>>2]|0)+164>>2]|0;if(!h)break;if(bn(a,d,h,0,0)|0){d=h;continue}g=bn(a,d,h,0,1)|0;Oo(g,122254,176,1)|0;b[(c[g+16>>2]|0)+170>>1]=0;d=c[f>>2]|0;e=c[d+180>>2]|0;if(!e)d=xw((c[d+184>>2]<<2)+8|0)|0;else d=zw(e,(c[d+184>>2]<<2)+8|0)|0;i=c[f>>2]|0;c[i+180>>2]=d;i=i+184|0;e=c[i>>2]|0;c[i>>2]=e+1;c[d+(e<<2)>>2]=g;f=c[f>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;f=h+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(!e)d=xw((c[d+176>>2]<<2)+8|0)|0;else d=zw(e,(c[d+176>>2]<<2)+8|0)|0;e=c[f>>2]|0;c[e+172>>2]=d;e=e+176|0;i=c[e>>2]|0;c[e>>2]=i+1;c[d+(i<<2)>>2]=g;d=c[f>>2]|0;c[(c[d+172>>2]|0)+(c[d+176>>2]<<2)>>2]=0;d=h}return}function RF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+92|0;e=0;f=0;b=c[(c[(c[b+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[g>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}a=a+96|0;e=0;f=0;b=c[(c[(c[d+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[a>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}return}function SF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+4|0;d=h;c[d>>2]=c[4411];e=c[b+100>>2]|0;if((e|0)!=1?(f=b+104|0,(c[f>>2]|0)!=1):0){c[b+92>>2]=ww((e<<2)+4|0)|0;c[b+96>>2]=ww((c[f>>2]<<2)+4|0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;f=hn(122267,g,0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;g=hn(122272,g,0)|0;Oo(f,122277,280,1)|0;Oo(g,122277,280,1)|0;OF(b,f,g);hx(f,2,2147483647)|0;hx(g,2,2147483647)|0;RF(b,f,g);TF(f,g)}else MF(b);l=h;return}function TF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;f=d+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(e){$I(e);d=c[f>>2]|0}e=c[d+180>>2]|0;if(e){$I(e);d=c[f>>2]|0}d=d+164|0}mn(a)|0;mn(b)|0;return}function UF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;p=l;l=l+272|0;n=p+104|0;o=p+136|0;j=p+72|0;k=p;g=p+144|0;c[k+48>>2]=b;switch(Do(b)|0){case 0:{e=c[b+60>>2]|0;break}case 1:{e=so(b)|0;break}case 2:{e=so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;break}default:{}}i=k+52|0;c[i>>2]=e;m=c[e+60>>2]|0;h[k+32>>3]=+h[d+16>>3];c[k+16>>2]=c[d+4>>2];c[k+20>>2]=c[d+8>>2];c[k+40>>2]=0;f=cI(c[d>>2]|0,o,k)|0;if(!f){dm(n,128,g);a[d+82>>0]=0;e=HL(VF(b,n)|0)|0;c[d>>2]=e;if((c[d+12>>2]|0)==1)e=zB(e)|0;else e=wB(e,c[i>>2]|0)|0;$I(c[d>>2]|0);c[d>>2]=e;kw(c[(c[m+16>>2]|0)+144>>2]|0,d);hm(n);e=c[o>>2]|0}else{e=f+4|0;if((a[e>>0]|0)==1){if((c[(c[f>>2]|0)+24>>2]|0)==0?WF(b)|0:0){i=HL(WF(b)|0)|0;c[(c[f>>2]|0)+24>>2]=i}m=XF(m,c[f>>2]|0,0,k)|0;c[o>>2]=c[o>>2]|m;m=c[f>>2]|0;r=+h[m+64>>3]*.5;q=+h[m+72>>3]*.5;YF(j,-r,-q,r,q);m=c[f>>2]|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2];ZF(m,n,15)}else{_F(c[(c[m+16>>2]|0)+144>>2]|0,c[f>>2]|0,k);n=c[f>>2]|0;q=+h[n+24>>3]*.5;r=+h[n+32>>3]*.5;YF(j,-q,-r,q,r);n=(c[f>>2]|0)+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2]}h[d+24>>3]=+h[j+16>>3]-+h[j>>3];h[d+32>>3]=+h[j+24>>3]-+h[j+8>>3];c[d+72>>2]=f;if((a[e>>0]|0)==1){$I(c[d>>2]|0);c[d>>2]=HL(122290)|0}e=c[o>>2]|0}l=p;return e|0}function VF(b,d){b=b|0;d=d|0;var e=0;a:do switch(Do(b)|0){case 0:{gm(d,En(b)|0)|0;break}case 1:{gm(d,En(b)|0)|0;break}case 2:{gm(d,En(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)|0;e=b+-48|0;gm(d,En(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0;if(!(rn(so(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0)){gm(d,122549)|0;break a}else{gm(d,122546)|0;break a}}default:{}}while(0);e=d+4|0;b=c[e>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){em(d,1)|0;b=c[e>>2]|0}a[b>>0]=0;d=c[d>>2]|0;c[e>>2]=d;return d|0}function WF(b){b=b|0;var c=0,d=0;c=Jm(b,122531)|0;if(!((c|0)!=0?(a[c>>0]|0)!=0:0))d=3;do if((d|0)==3){c=Jm(b,122540)|0;if(c|0?a[c>>0]|0:0)break;c=0}while(0);return c|0}function XF(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;u=w+8|0;t=w;v=g+108|0;k=c[v>>2]|0;if(k|0)qF(j,k,167328);c[g+80>>2]=i;k=cG(f,g,j)|0;r=g+36|0;f=b[r>>1]|0;if(!(f&128))a[g+32>>0]=2;i=g+33|0;if(!(f&32))a[i>>0]=1;SF(g);n=c[g+104>>2]|0;p=a[g+32>>0]|0;f=O(n+1|0,p)|0;o=d[i>>0]<<1;q=c[g+100>>2]|0;p=O(q+1|0,p)|0;m=g+96|0;f=o+f|0;i=0;while(1){if((i|0)>=(n|0))break;f=(c[(c[m>>2]|0)+(i<<2)>>2]|0)+f|0;i=i+1|0}n=g+92|0;i=p+o|0;m=0;while(1){if((m|0)>=(q|0))break;i=(c[(c[n>>2]|0)+(m<<2)>>2]|0)+i|0;m=m+1|0}n=g+38|0;do if(b[r>>1]&1){r=b[n>>1]|0;m=r&65535;if(r<<16>>16?(s=b[g+40>>1]|0,s<<16>>16):0){if(!((f|0)>(m|0)|(i|0)>(s&65535|0))){i=0;f=0;break}$l(0,122331,t)|0;k=1;i=0;f=0;break}$l(0,122365,u)|0;k=1}while(0);u=e[n>>1]|0;h[g+64>>3]=+(((f|0)>(u|0)?f:u)|0);u=e[g+40>>1]|0;h[g+72>>3]=+(((i|0)>(u|0)?i:u)|0);if(c[v>>2]|0)yF(j,167328);l=w;return k|0}function YF(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function ZF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0;I=l;l=l+64|0;G=I+32|0;H=I;E=c[e+84>>2]|0;k=c[e+80>>2]|0;if((k|0?(i=c[k+24>>2]|0,i|0):0)?(j=e+24|0,(c[j>>2]|0)==0):0)c[j>>2]=HL(i)|0;F=e+48|0;i=f+16|0;n=+h[i>>3];m=+h[f>>3];k=~~(n-m-+(~~+h[e+64>>3]|0));if((k|0)<=-1)ma(122298,122134,1761,122308);o=f+24|0;y=+h[o>>3];p=f+8|0;q=+h[p>>3];r=+(~~+h[e+72>>3]|0);s=~~(y-q-r);if((s|0)<=-1)ma(122321,122134,1764,122308);t=b[e+36>>1]|0;j=t&65535;a:do if(j&1){b:do if((k|0)>0)switch(j&6){case 4:{h[i>>3]=m+r;break b}case 2:{J=+(k|0);h[i>>3]=n+J;m=m+J;h[f>>3]=m;break b}default:{J=+(k>>>1|0);m=m+J;h[f>>3]=m;h[i>>3]=n-J;break b}}while(0);if((s|0)>0)switch(t&24){case 16:{y=q+r;h[o>>3]=y;s=0;i=0;break a}case 8:{J=+(s|0);y=y+J;h[o>>3]=y;h[p>>3]=q+J;s=0;i=0;break a}default:{J=+(s>>>1|0);h[p>>3]=q+J;y=y-J;h[o>>3]=y;s=0;i=0;break a}}else{s=0;i=0}}else i=k;while(0);n=+(d[e+33>>0]|0);C=e+32|0;u=a[C>>0]|0;q=+(u<<24>>24);D=e+104|0;k=c[D>>2]|0;t=(i|0)/(k|0)|0;o=i-(O(t,k)|0)|0;o=~~(((o|0)>-1?.5:-.5)+ +(o|0));B=e+96|0;p=u<<24>>24;i=~~(m+n+q);j=0;while(1){if((j|0)>(k|0))break;A=(c[B>>2]|0)+(j<<2)|0;k=c[A>>2]|0;c[A>>2]=i;i=i+t+((j|0)<(o|0)&1)+k+p|0;j=j+1|0;k=c[D>>2]|0}A=e+100|0;k=c[A>>2]|0;t=(s|0)/(k|0)|0;p=s-(O(t,k)|0)|0;p=~~(((p|0)>-1?.5:-.5)+ +(p|0));z=e+92|0;o=u<<24>>24;i=~~(y-n-q);j=0;while(1){if((j|0)>(k|0))break;x=(c[z>>2]|0)+(j<<2)|0;k=c[x>>2]|0;c[x>>2]=i;i=i-t+(((j|0)<(p|0))<<31>>31)-k-o|0;j=j+1|0;k=c[A>>2]|0}u=(g|0)==0;v=H+16|0;w=H+24|0;x=H+8|0;i=E;while(1){o=c[i>>2]|0;if(!o)break;k=b[o+84>>1]|0;if(u){j=0;p=b[o+80>>1]|0;s=b[o+86>>1]|0;t=b[o+82>>1]|0}else{j=k<<16>>16==0?8:0;s=b[o+86>>1]|0;j=s<<16>>16==0?j|4:j;p=b[o+80>>1]|0;t=b[o+82>>1]|0;j=(((p&65535)+(k&65535)|0)==(c[D>>2]|0)?j|2:j)|((t&65535)+(s&65535)|0)==(c[A>>2]|0)}K=c[B>>2]|0;k=k&65535;h[H>>3]=+(c[K+(k<<2)>>2]|0);E=a[C>>0]|0;h[v>>3]=+((c[K+((p&65535)+k<<2)>>2]|0)-E|0);p=c[z>>2]|0;h[w>>3]=+(c[p+((s&65535)<<2)>>2]|0);h[x>>3]=+((c[p+((t&65535)+(s&65535)<<2)>>2]|0)+E|0);c[G>>2]=c[H>>2];c[G+4>>2]=c[H+4>>2];c[G+8>>2]=c[H+8>>2];c[G+12>>2]=c[H+12>>2];c[G+16>>2]=c[H+16>>2];c[G+20>>2]=c[H+20>>2];c[G+24>>2]=c[H+24>>2];c[G+28>>2]=c[H+28>>2];$F(o,G,j&g);i=i+4|0}a[e+35>>0]=g;c[F>>2]=c[f>>2];c[F+4>>2]=c[f+4>>2];c[F+8>>2]=c[f+8>>2];c[F+12>>2]=c[f+12>>2];c[F+16>>2]=c[f+16>>2];c[F+20>>2]=c[f+20>>2];c[F+24>>2]=c[f+24>>2];c[F+28>>2]=c[f+28>>2];l=I;return}function _F(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0.0;O=l;l=l+112|0;H=O+48|0;I=O+16|0;J=O;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;c[I+16>>2]=0;c[I+20>>2]=0;c[I+24>>2]=0;c[I+28>>2]=0;K=e+4|0;L=f+16|0;M=f+32|0;N=I+16|0;r=b[K>>1]|0;n=r<<16>>16;g=0;j=-1.0;m=0;while(1){if((m|0)>=(n|0)){g=1;break}i=c[e>>2]|0;if((b[i+(m*24|0)+4>>1]|0)>1){g=0;break}i=c[(c[i+(m*24|0)>>2]|0)+4>>2]|0;if(!i){k=+h[M>>3];h[N>>3]=k;i=L}else{if(c[i+24>>2]&127|0){g=0;break}k=+h[(+h[i+16>>3]>0.0?i:L)+16>>3];h[N>>3]=k;i=(c[i>>2]|0)==0?L:i}i=c[i>>2]|0;c[I>>2]=i;if(!(j==-1.0)){if(k!=j){g=0;break}}else j=k;if(g){if(yJ(i,g)|0){g=0;break}}else g=i;m=m+1|0}a[e+6>>0]=g;E=f+48|0;F=f+20|0;G=I+4|0;w=f+40|0;x=I+24|0;y=d+144|0;z=H+4|0;v=J+8|0;A=H+16|0;B=H+24|0;C=H+8|0;D=H+12|0;f=(g|0)==0;j=0.0;s=0.0;t=0.0;u=0.0;n=0;g=r;while(1){if((n|0)>=(g<<16>>16|0))break;k=0.0;q=0.0;m=0;p=0.0;j=0.0;i=c[e>>2]|0;while(1){if((m|0)>=(b[i+(n*24|0)+4>>1]|0))break;c[H>>2]=rw(c[(c[i+(n*24|0)>>2]|0)+(m*56|0)>>2]|0,c[E>>2]|0)|0;i=(c[e>>2]|0)+(n*24|0)|0;g=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;if(!g){h[N>>3]=+h[M>>3];c[I>>2]=c[L>>2];c[G>>2]=c[F>>2];c[x>>2]=c[x>>2]&-128|c[w>>2]&127}else{g=c[g+24>>2]&127;if(!g)g=c[w>>2]&127;c[x>>2]=c[x>>2]&-128|g;r=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;h[N>>3]=+h[(+h[r+16>>3]>0.0?r:L)+16>>3];c[I>>2]=c[((c[r>>2]|0)==0?L:r)>>2];c[G>>2]=c[((c[r+4>>2]|0)==0?L:r)+4>>2]}i=c[y>>2]|0;c[z>>2]=bb[c[i>>2]&31](i,I,1)|0;qA(J,d,H);Q=+h[J>>3];o=+h[v>>3];$I(c[(c[(c[e>>2]|0)+(n*24|0)>>2]|0)+(m*56|0)>>2]|0);i=c[e>>2]|0;r=c[i+(n*24|0)>>2]|0;c[r+(m*56|0)>>2]=c[H>>2];h[r+(m*56|0)+32>>3]=Q;h[r+(m*56|0)+16>>3]=+h[A>>3];h[r+(m*56|0)+24>>3]=+h[B>>3];c[r+(m*56|0)+4>>2]=c[z>>2];c[r+(m*56|0)+8>>2]=c[C>>2];c[r+(m*56|0)+12>>2]=c[D>>2];P=+h[N>>3];R=+h[B>>3];k=R>k?R:k;q=Q+q;m=m+1|0;p=P>p?P:p;j=o>j?o:j}h[i+(n*24|0)+8>>3]=q;g=(n|0)==0;do if(f)if(g){o=p;k=p-k;g=i;break}else{o=p;k=t-u+p-k;g=i+(n*24|0)|0;break}else{o=j;k=g?p:j;g=i+(n*24|0)|0}while(0);h[g+16>>3]=k;s=q>s?q:s;t=o+t;u=+h[i+(n*24|0)+16>>3]+u;n=n+1|0;g=b[K>>1]|0}h[e+24>>3]=s;h[e+32>>3]=g<<16>>16==1?j:t;l=O;return}function $F(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;v=y+32|0;x=y;j=e+24|0;if((c[j>>2]|0)==0?(i=c[(c[e+96>>2]|0)+24>>2]|0,i|0):0)c[j>>2]=HL(i)|0;t=e+36|0;w=b[t>>1]|0;i=w&65535;a:do if(i&1){k=+h[e+64>>3];q=+h[e+72>>3];j=f+16|0;m=+h[j>>3];o=+h[f>>3];n=m-o-k;b:do if(n>0.0)switch(i&6){case 4:{m=o+k;h[j>>3]=m;k=o;break b}case 2:{m=n+m;h[j>>3]=m;k=o+n;h[f>>3]=k;break b}default:{p=n*.5;k=p+o;h[f>>3]=k;m=m-p;h[j>>3]=m;break b}}else k=o;while(0);i=f+24|0;p=+h[i>>3];j=f+8|0;n=+h[j>>3];o=p-n-q;if(o>0.0)switch(w&24){case 16:{o=n+q;h[i>>3]=o;break a}case 8:{q=o+p;h[i>>3]=q;n=n+o;h[j>>3]=n;o=q;break a}default:{o=o*.5;n=o+n;h[j>>3]=n;o=p-o;h[i>>3]=o;break a}}else o=p}else{k=+h[f>>3];n=+h[f+8>>3];m=+h[f+16>>3];o=+h[f+24>>3]}while(0);s=e+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[s+16>>2]=c[f+16>>2];c[s+20>>2]=c[f+20>>2];c[s+24>>2]=c[f+24>>2];c[s+28>>2]=c[f+28>>2];a[e+35>>0]=g;A=+(d[e+33>>0]|0);z=+(d[e+34>>0]|0);p=k+A+z;h[x>>3]=p;q=n+A+z;s=x+8|0;h[s>>3]=q;n=m-A-z;f=x+16|0;h[f>>3]=n;o=o-A-z;r=x+24|0;h[r>>3]=o;j=e+88|0;switch(a[e+92>>0]|0){case 1:{w=c[j>>2]|0;c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];ZF(w,v,g);break}case 3:{i=c[j>>2]|0;k=+h[i+24>>3];m=n-p-+h[i+16>>3];c:do if(m>0.0)switch(w&6){case 4:{h[f>>3]=n-m;break c}case 2:{h[x>>3]=m+p;break c}default:break c}while(0);k=o-q-k;d:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break d}case 8:{h[s>>3]=k+q;break d}default:break d}while(0);c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];aG(i,v);break}default:{i=c[j>>2]|0;k=+h[i+32>>3];m=n-p-+h[i+24>>3];e:do if(m>0.0?(u=w&6,u<<16>>16!=6):0)switch(u&7){case 4:{h[f>>3]=n-m;break e}case 2:{h[x>>3]=m+p;break e}default:{A=m*.5;h[x>>3]=A+p;h[f>>3]=n-A;break e}}while(0);k=o-q-k;f:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break f}case 8:{h[s>>3]=k+q;break f}default:{A=k*.5;h[s>>3]=A+q;h[r>>3]=o-A;break f}}while(0);w=i+8|0;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];c[w+12>>2]=c[x+12>>2];c[w+16>>2]=c[x+16>>2];c[w+20>>2]=c[x+20>>2];c[w+24>>2]=c[x+24>>2];c[w+28>>2]=c[x+28>>2];x=b[t>>1]&768;bG(c[j>>2]|0,(x&1023)==512?108:(x&1023)==256?114:110)}}l=y;return}function aG(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function bG(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;g=b[d+4>>1]|0;f=0;while(1){if((f|0)>=(g|0))break;h=(c[d>>2]|0)+(f*24|0)+6|0;if(!(a[h>>0]|0))a[h>>0]=e;f=f+1|0}return}function cG(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=f+84|0;t=c[l>>2]|0;u=xx()|0;v=gG()|0;i=0;h=0;k=Pl(t)|0;while(1){if(!k)break;j=Pl(c[k+8>>2]|0)|0;while(1){if(!j)break;j=c[j>>2]|0;i=i+1|0}h=h+1|0;if(a[k+12>>0]|0)kG(v,h);k=c[k>>2]|0}h=ww((i<<2)+4|0)|0;c[l>>2]=h;i=0;j=0;k=0;q=0;r=Pl(t)|0;while(1){if(!r)break;s=q&65535;p=0;o=Pl(c[r+8>>2]|0)|0;while(1){if(!o)break;n=c[o+8>>2]|0;c[h>>2]=n;k=dG(d,n,f,g)|0|k;l=eG(u,q,p,n)|0;b[n+86>>1]=s;b[n+84>>1]=l;l=l+(e[n+80>>1]|0)|0;m=q+(e[n+82>>1]|0)|0;if(lG(v,m)|0){p=n+100|0;a[p>>0]=a[p>>0]|2}p=l;h=h+4|0;o=c[o>>2]|0;i=(l|0)>(i|0)?l:i;j=(m|0)>(j|0)?m:j}q=q+1|0;r=c[r>>2]|0}c[f+100>>2]=j;c[f+104>>2]=i;Ll(t)|0;Ll(v)|0;Ax(u);return k|0}function dG(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+16|0;t=u+8|0;s=u;c[g+96>>2]=i;q=g+36|0;o=b[q>>1]|0;if(!(o&64)){if(!(b[i+36>>1]&64))n=2;else n=a[i+34>>0]|0;a[g+34>>0]=n}if(!(o&32)){n=a[i+88>>0]|0;if(n<<24>>24<=-1)if(!(b[i+36>>1]&32))n=1;else n=a[i+33>>0]|0;a[g+33>>0]=n}n=g+88|0;p=g+92|0;switch(a[p>>0]|0){case 1:{o=XF(f,c[n>>2]|0,g,j)|0;i=c[n>>2]|0;n=o;o=i+64|0;i=i+72|0;break}case 3:{o=fG(c[n>>2]|0,j)|0;i=c[n>>2]|0;n=o;o=i+16|0;i=i+24|0;break}default:{_F(c[(c[f+16>>2]|0)+144>>2]|0,c[n>>2]|0,j);i=c[n>>2]|0;n=0;o=i+24|0;i=i+32|0}}k=+((d[g+33>>0]|0)+(d[g+34>>0]|0)<<1|0);m=+h[o>>3]+k;k=+h[i>>3]+k;i=g+38|0;do if(b[q>>1]&1){o=b[i>>1]|0;if(o<<16>>16?(r=b[g+40>>1]|0,r<<16>>16):0){if(!(m>+(o&65535)|k>+(r&65535))){m=0.0;k=0.0;break}if((a[p>>0]|0)==3){m=0.0;k=0.0;break}$l(0,122416,s)|0;n=1;m=0.0;k=0.0;break}$l(0,122449,t)|0;n=1}while(0);v=+(e[i>>1]|0);h[g+64>>3]=m>v?m:v;m=+(e[g+40>>1]|0);h[g+72>>3]=k>m?k:m;l=u;return n|0}function eG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;j=d+80|0;i=(e[j>>1]|0)+-1|0;h=0;a:while(1){f=c;while(1){if(h)break a;g=i+f|0;while(1){if((g|0)<(f|0)){c=f;h=1;continue a}if(Fx(a,g,b)|0)break;g=g+-1|0}f=g+1|0}}h=d+82|0;f=c;while(1){if((f|0)<(c+(e[j>>1]|0)|0))g=b;else break;while(1){if((g|0)>=((e[h>>1]|0)+b|0))break;Dx(a,f,g);g=g+1|0}f=f+1|0}return c|0}function fG(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;i=m+8|0;d=d+52|0;g=b+32|0;Qr(i,c[d>>2]|0,c[g>>2]|0);k=c[i>>2]|0;i=c[i+4>>2]|0;if((i&k|0)==-1){c[j>>2]=c[g>>2];$l(1,122499,j)|0;d=1;f=0.0;e=0.0}else{a[(c[(c[d>>2]|0)+16>>2]|0)+114>>0]=1;d=0;f=+(i|0);e=+(k|0)}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;h[b+16>>3]=e;h[b+24>>3]=f;l=m;return d|0}function gG(){return Rl(54908,c[4345]|0)|0}function hG(a,b,d){a=a|0;b=b|0;d=d|0;d=ww(12)|0;c[d>>2]=c[b>>2];return d|0}function iG(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function jG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)>(e|0)?1:((b|0)<(e|0))<<31>>31)|0}function kG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;bb[c[a>>2]&31](a,e,1)|0;l=d;return}function lG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(bb[c[a>>2]&31](a,e,512)|0)!=0&1;l=d;return b|0}function mG(a){a=a|0;var b=0;if(!(c[42419]|0)){b=ww((a<<2)+4|0)|0;c[42419]=b;c[b>>2]=169680;c[42430]=a}c[42431]=0;return}function nG(){$I(c[42419]|0);c[42419]=0;c[42431]=0;return}function oG(){c[42431]=0;return}function pG(){var a=0,b=0,d=0;b=c[42431]|0;d=c[42419]|0;a=1;while(1){if((a|0)>(b|0)){a=5;break}if((c[(c[d+(a<<2)>>2]|0)+4>>2]|0)==(a|0))a=a+1|0;else{a=4;break}}if((a|0)==4)ma(123205,122552,59,122558);else if((a|0)==5)return}function qG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=c[42419]|0;g=c[f+(a<<2)>>2]|0;h=c[g>>2]|0;while(1){b=(a|0)/2|0;d=c[f+(b<<2)>>2]|0;e=f+(a<<2)|0;if((c[d>>2]|0)>=(h|0))break;c[e>>2]=d;c[d+4>>2]=a;a=b}c[e>>2]=g;c[g+4>>2]=a;return}function rG(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=c[42431]|0;if((b|0)==(c[42430]|0)){$l(1,122566,d)|0;a=1}else{b=b+1|0;c[42431]=b;c[(c[42419]|0)+(b<<2)>>2]=a;qG(b);pG();a=0}l=d;return a|0}function sG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[42419]|0;f=c[e+(a<<2)>>2]|0;g=c[f>>2]|0;h=c[42431]|0;i=(h|0)/2|0;while(1){if((a|0)>(i|0))break;d=a<<1;b=c[e+(d<<2)>>2]|0;if((d|0)<(h|0)){l=d|1;j=c[e+(l<<2)>>2]|0;k=(c[b>>2]|0)<(c[j>>2]|0);d=k?l:d;b=k?j:b}if((g|0)>=(c[b>>2]|0))break;c[e+(a<<2)>>2]=b;c[b+4>>2]=a;a=d}c[e+(a<<2)>>2]=f;c[f+4>>2]=a;return}function tG(){var a=0,b=0,d=0,e=0;b=c[42431]|0;if(!b)a=0;else{e=c[42419]|0;d=e+4|0;a=c[d>>2]|0;c[d>>2]=c[e+(b<<2)>>2];b=b+-1|0;c[42431]=b;if(b|0)sG(1);pG()}return a|0}function uG(a,b){a=a|0;b=b|0;c[a>>2]=b;qG(c[a+4>>2]|0);pG();return}function vG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+16|0;j=c[m>>2]|0;j=(a[j+((c[e+12>>2]|0)*40|0)+36>>0]|0)!=(a[j+((c[e+16>>2]|0)*40|0)+36>>0]|0);k=~~((+h[d+64>>3]+-3.0-+h[d+48>>3])*.5);l=~~((+h[d+56>>3]+-3.0-+h[d+40>>3])*.5);g=(k|0)<(l|0)?k:l;n=d+4|0;f=0;while(1){b=c[n>>2]|0;if((f|0)>=(b|0)){g=f;break}i=c[d+8+(f<<2)>>2]|0;o=c[m>>2]|0;if((a[o+((c[i+12>>2]|0)*40|0)+36>>0]|0)==(a[o+((c[i+16>>2]|0)*40|0)+36>>0]|0)){g=f;break}wG(i,g);f=f+1|0}while(1){if((g|0)>=(b|0))break;f=c[d+8+(g<<2)>>2]|0;if(j|(f|0)==(e|0)){wG(f,a[(c[m>>2]|0)+((c[f+12>>2]|0)*40|0)+36>>0]|0?k:l);b=c[n>>2]|0}g=g+1|0}return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;c[d>>2]=e+1;if((e|0)>=(b|0)){c[d>>2]=0;h[a>>3]=+h[a>>3]+16384.0}return}function xG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0.0;x=l;l=l+112|0;u=x+64|0;t=x+96|0;m=x+32|0;v=x;w=ww(28)|0;b=nn(a)|0;s=w+4|0;c[s>>2]=b;b=ww(b*72|0)|0;r=w+12|0;c[r>>2]=b;e=v+8|0;h[e>>3]=1797693134862315708145274.0e284;h[v>>3]=1797693134862315708145274.0e284;f=v+24|0;h[f>>3]=-1797693134862315708145274.0e284;g=v+16|0;h[g>>3]=-1797693134862315708145274.0e284;i=m+16|0;j=m+8|0;k=m+24|0;d=eo(a)|0;n=1797693134862315708145274.0e284;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;q=-1797693134862315708145274.0e284;while(1){if(!d)break;C=d+16|0;D=c[C>>2]|0;z=(+h[D+96>>3]+ +h[D+88>>3])*.5;z=z<1.0?1.0:z;y=+h[D+80>>3]*.5;y=y<1.0?1.0:y;E=+h[D+16>>3];B=E-z;h[m>>3]=B;z=E+z;h[i>>3]=z;E=+h[D+24>>3];A=E-y;h[j>>3]=A;y=E+y;h[k>>3]=y;B=+h[(n<B?v:m)>>3];h[v>>3]=B;A=+h[(o<A?v:m)+8>>3];h[e>>3]=A;z=+h[(p>z?v:m)+16>>3];h[g>>3]=z;y=+h[(q>y?v:m)+24>>3];h[f>>3]=y;D=b+40|0;c[D>>2]=c[m>>2];c[D+4>>2]=c[m+4>>2];c[D+8>>2]=c[m+8>>2];c[D+12>>2]=c[m+12>>2];c[D+16>>2]=c[m+16>>2];c[D+20>>2]=c[m+20>>2];c[D+24>>2]=c[m+24>>2];c[D+28>>2]=c[m+28>>2];c[b>>2]=c[b>>2]|1;c[(c[C>>2]|0)+112>>2]=b;b=b+72|0;d=fo(a,d)|0;n=B;o=A;p=z;q=y}h[v>>3]=n+-36.0;h[e>>3]=o+-36.0;h[g>>3]=p+36.0;h[f>>3]=q+36.0;D=c[r>>2]|0;f=c[s>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];f=HG(D,f,t,u)|0;if(c[42367]&1|0){r=c[r>>2]|0;C=c[s>>2]|0;D=c[t>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];yG(r,C,u,f,D)}e=w+8|0;c[e>>2]=ww((c[t>>2]|0)*72|0)|0;c[w>>2]=c[t>>2];d=c[t>>2]|0;b=0;while(1){if((b|0)>=(d|0))break;D=(c[e>>2]|0)+(b*72|0)+40|0;C=f+(b<<5)|0;c[D>>2]=c[C>>2];c[D+4>>2]=c[C+4>>2];c[D+8>>2]=c[C+8>>2];c[D+12>>2]=c[C+12>>2];c[D+16>>2]=c[C+16>>2];c[D+20>>2]=c[C+20>>2];c[D+24>>2]=c[C+24>>2];c[D+28>>2]=c[C+28>>2];b=b+1|0}$I(f);c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];c[w+16>>2]=zG(w,u)|0;l=x;return w|0}function yG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0;q=l;l=l+128|0;p=q+96|0;o=q+64|0;j=q+32|0;r=q+16|0;s=q;m=+h[d+16>>3];n=+h[d>>3];k=+h[d+24>>3];g=+h[d+8>>3];i=c[13918]|0;XL(122581,i)|0;c[s>>2]=10;c[s+4>>2]=10;c[s+8>>2]=~~(m+10.0-n);c[s+12>>2]=~~(k+10.0-g);AL(i,123011,s)|0;h[r>>3]=10.0-n;h[r+8>>3]=10.0-g;AL(i,123059,r)|0;XL(123076,i)|0;d=0;while(1){if((d|0)>=(b|0))break;v=+h[a+(d*72|0)+48>>3];u=+h[a+(d*72|0)+56>>3];t=+h[a+(d*72|0)+64>>3];h[j>>3]=+h[a+(d*72|0)+40>>3];h[j+8>>3]=v;h[j+16>>3]=u;h[j+24>>3]=t;AL(i,123095,j)|0;d=d+1|0}XL(123113,i)|0;d=0;while(1){if((d|0)>=(f|0))break;t=+h[e+(d<<5)+8>>3];u=+h[e+(d<<5)+16>>3];v=+h[e+(d<<5)+24>>3];h[o>>3]=+h[e+(d<<5)>>3];h[o+8>>3]=t;h[o+16>>3]=u;h[o+24>>3]=v;AL(i,123132,o)|0;d=d+1|0}XL(123150,i)|0;h[p>>3]=n;h[p+8>>3]=g;h[p+16>>3]=m;h[p+24>>3]=k;AL(i,123132,p)|0;XL(122897,i)|0;l=q;return}function zG(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=l;l=l+32|0;t=A+16|0;k=A;w=c[a>>2]|0;y=XC(w<<2|2)|0;z=Rl(54944,c[4345]|0)|0;v=Rl(54980,c[4345]|0)|0;w=ww(w<<7)|0;f=ww(c[a>>2]<<4)|0;x=a+8|0;g=b+16|0;i=k+8|0;j=b+24|0;m=b+8|0;d=0;while(1){if((d|0)>=(c[a>>2]|0))break;n=c[x>>2]|0;o=n+(d*72|0)|0;c[n+(d*72|0)+32>>2]=4;p=n+(d*72|0)+36|0;c[p>>2]=f+(d<<2<<2);q=n+(d*72|0)+40|0;e=+h[n+(d*72|0)+56>>3];if(e<+h[g>>3]){h[k>>3]=e;h[i>>3]=+h[n+(d*72|0)+48>>3];c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=AG(y,z,t,w,1)|0;c[s+20>>2]=o;c[c[p>>2]>>2]=s}e=+h[n+(d*72|0)+64>>3];if(e<+h[j>>3]){h[k>>3]=+h[q>>3];h[i>>3]=e;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=AG(y,v,t,w,0)|0;c[s+20>>2]=o;c[(c[p>>2]|0)+4>>2]=s}if(+h[q>>3]>+h[b>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=AG(y,z,t,w,1)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+8>>2]=s}if(+h[n+(d*72|0)+48>>3]>+h[m>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=AG(y,v,t,w,0)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+12>>2]=s}d=d+1|0}o=ww(c[y>>2]<<2)|0;r=a+4|0;s=a+12|0;p=t+8|0;m=0;q=0;n=0;while(1){d=c[r>>2]|0;if((n|0)>=(d|0)){b=0;break}g=c[s>>2]|0;i=g+(n*72|0)|0;j=g+(n*72|0)+36|0;c[j>>2]=o+(m<<2);b=g+(n*72|0)+40|0;c[t>>2]=c[b>>2];c[t+4>>2]=c[b+4>>2];c[t+8>>2]=c[b+8>>2];c[t+12>>2]=c[b+12>>2];b=g+(n*72|0)+56|0;k=g+(n*72|0)+32|0;d=bb[c[v>>2]&31](v,t,512)|0;while(1){if(!d)break;if(!(+h[d+8>>3]<+h[b>>3]))break;C=c[d>>2]|0;B=c[j>>2]|0;f=c[k>>2]|0;c[k>>2]=f+1;c[B+(f<<2)>>2]=C;c[(c[d>>2]|0)+24>>2]=i;d=bb[c[v>>2]&31](v,d,8)|0}f=g+(n*72|0)+64|0;d=bb[c[z>>2]&31](z,t,512)|0;while(1){if(!d){u=20;break}e=+h[f>>3];if(!(+h[d+16>>3]<e))break;b=c[d>>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=b;c[(c[d>>2]|0)+24>>2]=i;d=bb[c[z>>2]&31](z,d,8)|0}if((u|0)==20){u=0;e=+h[f>>3]}h[p>>3]=e;b=g+(n*72|0)+56|0;d=bb[c[v>>2]&31](v,t,512)|0;while(1){if(!d){u=25;break}e=+h[b>>3];if(!(+h[d+8>>3]<e))break;D=c[d>>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=D;c[(c[d>>2]|0)+20>>2]=i;d=bb[c[v>>2]&31](v,d,8)|0}if((u|0)==25){u=0;e=+h[b>>3]}h[t>>3]=e;h[p>>3]=+h[g+(n*72|0)+48>>3];d=bb[c[z>>2]&31](z,t,512)|0;while(1){if(!d)break;if(!(+h[d+16>>3]<+h[f>>3]))break;B=c[d>>2]|0;C=c[j>>2]|0;D=c[k>>2]|0;c[k>>2]=D+1;c[C+(D<<2)>>2]=B;c[(c[d>>2]|0)+20>>2]=i;d=bb[c[z>>2]&31](z,d,8)|0}D=c[k>>2]|0;m=D+m|0;q=(D|0)>(q|0)?D:q;n=n+1|0}while(1){if((b|0)>=(d|0))break;BG((c[s>>2]|0)+(b*72|0)|0);b=b+1|0;d=c[r>>2]|0}d=c[y>>2]|0;D=c[y+16>>2]|0;c[D+(d*40|0)+32>>2]=d;d=d+1|0;c[D+(d*40|0)+32>>2]=d;WC(y,q);d=0;while(1){if((d|0)>=(c[a>>2]|0))break;CG((c[x>>2]|0)+(d*72|0)|0,y);d=d+1|0}Ll(z)|0;Ll(v)|0;$I(w);DG(y);UC(y);l=A;return y|0}function AG(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=bb[c[d>>2]&31](d,e,512)|0;do if(!h){b=YC(b)|0;if(!f)ma(122994,122942,291,123001);else{h=c[b+32>>2]|0;i=f+(h<<5)|0;f=f+(h<<5)+8|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[i>>2]=b;a[b+36>>0]=g;bb[c[d>>2]&31](d,i,1)|0;break}}else i=h;while(0);return c[i>>2]|0}function BG(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;a:do if((+h[b+64>>3]+-3.0-+h[b+48>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break a;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;b:do if(a[d+36>>0]|0){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|8;d=c[c[d+36>>2]>>2]|0;if(!d)break b;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|8;d=c[(c[e+36>>2]|0)+8>>2]|0;if(!d)break b;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);c:do if((+h[b+56>>3]+-3.0-+h[b+40>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break c;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;d:do if(!(a[d+36>>0]|0)){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|16;d=c[(c[d+36>>2]|0)+4>>2]|0;if(!d)break d;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|16;d=c[(c[e+36>>2]|0)+12>>2]|0;if(!d)break d;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);return}function CG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;g=+h[a+56>>3]-+h[a+40>>3];i=+h[a+64>>3]-+h[a+48>>3];f=(i+g)*.5+500.0;if((i+-3.0)*.5<2.0){l=(c[a>>2]&8|0)==0;f=l?16384.0:f;p=l?16384.0:g}else p=g;if((g+-3.0)*.5<2.0){l=(c[a>>2]&16|0)==0;i=l?16384.0:i;f=l?16384.0:f}l=a+36|0;d=c[l>>2]|0;e=c[d+8>>2]|0;if((e|0)!=0?(j=c[d+4>>2]|0,(j|0)!=0):0){j=ZC(b,e,j,f)|0;e=a+4|0;d=c[e>>2]|0;c[e>>2]=d+1;c[a+8+(d<<2)>>2]=j;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(k=c[d>>2]|0,(k|0)!=0):0){k=ZC(b,e,k,f)|0;j=a+4|0;d=c[j>>2]|0;c[j>>2]=d+1;c[a+8+(d<<2)>>2]=k;d=c[l>>2]|0}e=c[d+8>>2]|0;if((e|0)!=0?(m=c[d+12>>2]|0,(m|0)!=0):0){m=ZC(b,e,m,f)|0;k=a+4|0;d=c[k>>2]|0;c[k>>2]=d+1;c[a+8+(d<<2)>>2]=m;d=c[l>>2]|0}e=c[d+12>>2]|0;if((e|0)!=0?(n=c[d>>2]|0,(n|0)!=0):0){n=ZC(b,e,n,f)|0;m=a+4|0;d=c[m>>2]|0;c[m>>2]=d+1;c[a+8+(d<<2)>>2]=n;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(o=c[d+12>>2]|0,(o|0)!=0):0){o=ZC(b,e,o,i)|0;n=a+4|0;d=c[n>>2]|0;c[n>>2]=d+1;c[a+8+(d<<2)>>2]=o;d=c[l>>2]|0}e=c[d+8>>2]|0;if(e|0?(q=c[d>>2]|0,q|0):0){b=ZC(b,e,q,p)|0;o=a+4|0;q=c[o>>2]|0;c[o>>2]=q+1;c[a+8+(q<<2)>>2]=b}return}function DG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;f=a+16|0;g=c[13918]|0;e=0;while(1){if((e|0)>=(c[a>>2]|0)){b=10;break}b=c[f>>2]|0;d=b+(e*40|0)+20|0;if((c[d>>2]|0)==0?(c[h>>2]=e,AL(g,122907,h)|0,(c[d>>2]|0)==0):0){b=5;break}b=b+(e*40|0)+24|0;if((c[b>>2]|0)==0?(c[i>>2]=e,AL(g,122959,i)|0,(c[b>>2]|0)==0):0){b=8;break}e=e+1|0}if((b|0)==5)ma(122929,122942,311,122949);else if((b|0)==8)ma(122981,122942,313,122949);else if((b|0)==10){l=j;return}}function EG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[c+8>>3];if(!(e>f))if(!(e<f)){f=+h[b>>3];e=+h[c>>3];if(f>e)a=1;else a=(f<e)<<31>>31}else a=-1;else a=1;return a|0}function FG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(!(e<f)){f=+h[b+8>>3];e=+h[c+8>>3];if(f>e)a=1;else a=(f<e)<<31>>31}else a=-1;else a=1;return a|0}function GG(a){a=a|0;var b=0,d=0;d=a+8|0;$I(c[(c[d>>2]|0)+36>>2]|0);b=a+12|0;$I(c[(c[b>>2]|0)+36>>2]|0);$I(c[d>>2]|0);$I(c[b>>2]|0);$C(c[a+16>>2]|0);Ll(c[a+20>>2]|0)|0;Ll(c[a+24>>2]|0)|0;$I(a);return}function HG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;h=p;i=b<<2;f=i+4|0;i=i+5|0;o=xw(i*56|0)|0;i=ww(i<<2)|0;g=f*5|1;j=xw(g*72|0)|0;m=g<<5;k=ww(m)|0;m=ww(m)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];IG(a,b,h,o,0);zM(173);JG(f,i);TG(f,o,i,g,j)|0;n=KG(f,o,j,0,k)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];IG(a,b,h,o,1);JG(f,i);TG(f,o,i,g,j)|0;f=KG(f,o,j,1,m)|0;g=ww(O(n<<5,f)|0)|0;b=0;a=0;while(1){if((b|0)>=(f|0))break;h=m+(b<<5)|0;e=0;while(1){if((e|0)>=(n|0))break;q=a+((LG(g+(a<<5)|0,h,k+(e<<5)|0)|0)!=0&1)|0;e=e+1|0;a=q}b=b+1|0}q=zw(g,a<<5)|0;$I(o);$I(i);$I(j);$I(k);$I(m);c[d>>2]=a;l=p;return q|0}function IG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=l;l=l+96|0;h=j+64|0;i=j;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];c[h+16>>2]=c[d+16>>2];c[h+20>>2]=c[d+20>>2];c[h+24>>2]=c[d+24>>2];c[h+28>>2]=c[d+28>>2];RG(h,f,1,i);d=SG(e,1,i)|0;g=0;while(1){if((g|0)>=(b|0))break;k=a+(g*72|0)+40|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];c[h+16>>2]=c[k+16>>2];c[h+20>>2]=c[k+20>>2];c[h+24>>2]=c[k+24>>2];c[h+28>>2]=c[k+28>>2];RG(h,f,0,i);d=SG(e,d,i)|0;g=g+1|0}l=j;return}function JG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=0;while(1){if((d|0)>(a|0))break;c[b+(d<<2)>>2]=d;d=d+1|0}g=a+1|0;d=1;while(1){if((d|0)>(a|0))break;h=~~(+BM()*+(g-d|0)+ +(d|0));e=b+(d<<2)|0;f=b+(h<<2)|0;if((d|0)!=(h|0)){h=c[e>>2]|0;c[e>>2]=c[f>>2];c[f>>2]=h}d=d+1|0}return}function KG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=a*5|0;j=g+1|0;l=ww(j<<2)|0;c[42432]=ww(j<<4)|0;c[42433]=ww((a*56|0)+56|0)|0;j=ww(a<<2)|0;c[42434]=j;k=0;while(1){if((k|0)>(g|0))break;if(MG(d+(k*72|0)|0,b)|0)break;k=k+1|0}h=c[42432]|0;i=c[42433]|0;g=1;while(1){if((g|0)>(a|0))break;c[h+(g<<4)+8>>2]=c[b+(g*56|0)+48>>2];m=b+(g*56|0)+44|0;c[h+(g<<4)+4>>2]=c[m>>2];c[h+(g<<4)>>2]=g;n=i+(g*56|0)|0;o=b+(g*56|0)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[i+(g*56|0)+16>>2]=c[m>>2];c[i+(g*56|0)+32>>2]=g;c[i+(g*56|0)+48>>2]=1;g=g+1|0}c[42435]=a;c[42436]=0;c[j>>2]=1;g=c[d+(k*72|0)+40>>2]|0;if((g|0)<=0){g=c[d+(k*72|0)+48>>2]|0;if((g|0)>0)g=NG(l,f,0,b,d,0,k,g,e,2)|0;else g=0}else g=NG(l,f,0,b,d,0,k,g,e,1)|0;$I(l);$I(c[42432]|0);$I(c[42433]|0);$I(c[42434]|0);return g|0}function LG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[(+h[b>>3]>+h[c>>3]?b:c)>>3];f=+h[(+h[b+16>>3]<+h[c+16>>3]?b:c)+16>>3];h[a+16>>3]=f;h[a>>3]=g;e=+h[(+h[b+8>>3]>+h[c+8>>3]?b:c)+8>>3];d=+h[(+h[b+24>>3]<+h[c+24>>3]?b:c)+24>>3];h[a+24>>3]=d;h[a+8>>3]=e;return !(g>=f)&!(e>=d)&1|0}function MG(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a+4>>2]|0;do if((c[a+68>>2]|0)!=2?!((f|0)<1|(c[a>>2]|0)<1):0){if(!((c[a+40>>2]|0)<1?(c[a+44>>2]|0)<1:0)){if((c[a+48>>2]|0)>=1){a=0;break}if((c[a+52>>2]|0)>=1){a=0;break}}d=+h[b+(f*56|0)+24>>3];e=+h[b+(f*56|0)+8>>3];if(!(d>e+1.0e-07))if(d<e+-1.0e-07)a=0;else a=+h[b+(f*56|0)+16>>3]>+h[b+(f*56|0)>>3]&1;else a=1}else a=0;while(0);return a|0}function NG(a,b,d,e,f,g,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0;D=(k|0)==0;C=i;a:while(1){y=f+(C*72|0)|0;if((C|0)<1)break;i=a+(C<<2)|0;if(c[i>>2]|0)break;c[i>>2]=1;v=f+(C*72|0)+8|0;t=f+(C*72|0)+16|0;p=+h[t>>3];w=f+(C*72|0)+24|0;x=f+(C*72|0)+32|0;o=+h[x>>3];if((p>o?(A=c[y>>2]|0,I=+h[e+(A*56|0)>>3],I==+h[e+(A*56|0)+16>>3]):0)?(A=c[f+(C*72|0)+4>>2]|0,K=+h[e+(A*56|0)>>3],K==+h[e+(A*56|0)+16>>3]):0){i=b+(d<<5)|0;if(D){h[i>>3]=I;q=p;p=K}else{h[i>>3]=o;q=-I;o=-K}h[b+(d<<5)+8>>3]=o;h[b+(d<<5)+16>>3]=p;h[b+(d<<5)+24>>3]=q;d=d+1|0}i=f+(C*72|0)+40|0;z=c[i>>2]|0;do if((z|0)<1?(L=f+(C*72|0)+44|0,(c[L>>2]|0)<1):0){i=f+(C*72|0)+48|0;n=f+(C*72|0)+52|0;if((c[i>>2]|0)>0?(M=c[n>>2]|0,(M|0)>0):0){m=c[f+(M*72|0)>>2]|0;l=c[y>>2]|0;if((M|0)==(j|0)){l=OG(g,l,m)|0;d=NG(a,b,d,e,f,g,c[n>>2]|0,C,k,1)|0;g=l;l=1;break}else{l=OG(g,m,l)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;g=l;i=n;l=1;break}}d=NG(a,b,d,e,f,g,z,C,k,2)|0;d=NG(a,b,d,e,f,g,c[L>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;i=n;l=1}else P=19;while(0);do if((P|0)==19){P=0;A=f+(C*72|0)+48|0;r=c[A>>2]|0;if((r|0)<1?(N=f+(C*72|0)+52|0,(c[N>>2]|0)<1):0){n=f+(C*72|0)+44|0;if((z|0)>0?(O=c[n>>2]|0,(O|0)>0):0){m=c[f+(C*72|0)+4>>2]|0;l=c[f+(z*72|0)+4>>2]|0;if((O|0)==(j|0)){l=OG(g,l,m)|0;d=NG(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;g=l;l=2;break}else{l=OG(g,m,l)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=n;l=2;break}}d=NG(a,b,d,e,f,g,z,C,k,2)|0;d=NG(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;i=N;l=1;break}u=f+(C*72|0)+44|0;s=c[u>>2]|0;m=(s|0)>0;if((z|0)>0){if(m){if((r|0)>0?(E=f+(C*72|0)+52|0,F=c[E>>2]|0,(F|0)>0):0){n=c[f+(F*72|0)>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if(!((l|0)==2&(F|0)==(j|0))?!((l|0)==1&(s|0)==(j|0)):0){l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=E;l=1;break}l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[E>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}m=c[y>>2]|0;if(+B(+(+h[x>>3]-+h[e+(m*56|0)+24>>3]))<=1.0e-07?+B(+(+h[w>>3]-+h[e+(m*56|0)+16>>3]))<=1.0e-07:0){n=c[f+(z*72|0)+4>>2]|0;m=c[e+(m*56|0)+44>>2]|0;if((l|0)==1&(z|0)==(j|0)){l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+52|0;l=1;break}else{l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;l=2;break}}n=c[f+(C*72|0)+4>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if((l|0)==1&(s|0)==(j|0)){l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;g=l;l=2;break}else{l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=u;l=2;break}}}else if(!m)break a;if((r|0)>0?(G=f+(C*72|0)+52|0,H=c[G>>2]|0,(H|0)>0):0){n=c[y>>2]|0;if(+B(+(+h[t>>3]-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0){m=c[f+(H*72|0)>>2]|0;if((l|0)==2&(r|0)==(j|0)){l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}else{l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}}m=c[f+(H*72|0)>>2]|0;n=c[e+((c[f+(C*72|0)+4>>2]|0)*56|0)+44>>2]|0;if((l|0)==2&(H|0)==(j|0)){l=OG(g,n,m)|0;d=NG(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}else{l=OG(g,m,n)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}}o=+h[t>>3];n=c[y>>2]|0;if(((+B(+(o-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0)?(J=c[f+(C*72|0)+4>>2]|0,+B(+(+h[x>>3]-+h[e+(J*56|0)+8>>3]))<=1.0e-07):0)?+B(+(+h[w>>3]-+h[e+(J*56|0)>>3]))<=1.0e-07:0)if((l|0)==1){l=OG(g,n,J)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=OG(g,J,n)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}j=c[f+(C*72|0)+4>>2]|0;if(((+B(+(o-+h[e+(j*56|0)+24>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(j*56|0)+16>>3]))<=1.0e-07:0)?+B(+(+h[x>>3]-+h[e+(n*56|0)+24>>3]))<=1.0e-07:0)?+B(+(+h[w>>3]-+h[e+(n*56|0)+16>>3]))<=1.0e-07:0){m=c[e+(j*56|0)+44>>2]|0;j=c[e+(n*56|0)+44>>2]|0;if((l|0)==1){l=OG(g,j,m)|0;d=NG(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=NG(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=OG(g,m,j)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}}d=NG(a,b,d,e,f,g,z,C,k,2)|0;d=NG(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=NG(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;i=f+(C*72|0)+52|0;l=1}while(0);j=C;C=c[i>>2]|0}return d|0}function OG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+16|0;r=f+4|0;i=f;e=(c[42436]|0)+1|0;c[42436]=e;m=c[42433]|0;PG(b,d,r,i);r=c[r>>2]|0;h=c[m+(b*56|0)+32+(r<<2)>>2]|0;i=c[m+(d*56|0)+32+(c[i>>2]<<2)>>2]|0;n=c[42435]|0;g=n+1|0;n=n+2|0;c[42435]=n;q=c[42432]|0;c[q+(g<<4)>>2]=b;c[q+(n<<4)>>2]=d;o=q+(h<<4)+4|0;p=q+(g<<4)+4|0;c[p>>2]=c[o>>2];c[q+(c[o>>2]<<4)+8>>2]=g;c[q+(g<<4)+8>>2]=n;c[q+(n<<4)+4>>2]=g;j=q+(i<<4)+8|0;c[q+(n<<4)+8>>2]=c[j>>2];c[q+(c[j>>2]<<4)+4>>2]=n;c[o>>2]=i;c[j>>2]=h;j=m+(b*56|0)+48|0;o=c[j>>2]|0;i=m+(d*56|0)+48|0;k=c[i>>2]|0;c[m+(b*56|0)+16+(r<<2)>>2]=d;c[m+(b*56|0)+32+(o<<2)>>2]=g;c[m+(b*56|0)+16+(o<<2)>>2]=c[q+(c[p>>2]<<4)>>2];c[m+(d*56|0)+32+(k<<2)>>2]=n;c[m+(d*56|0)+16+(k<<2)>>2]=b;c[j>>2]=(c[j>>2]|0)+1;c[i>>2]=(c[i>>2]|0)+1;d=c[42434]|0;c[d+(a<<2)>>2]=h;c[d+(e<<2)>>2]=g;l=f;return e|0}function PG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0;l=c[42433]|0;m=l+(a*56|0)|0;n=l+(b*56|0)|0;f=0;g=-4.0;i=0;while(1){if((i|0)==4)break;h=c[l+(a*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(j=+QG(m,l+(h*56|0)|0,n),j>g):0){f=i;g=j}i=i+1|0}c[d>>2]=f;f=0;i=0;g=-4.0;while(1){if((i|0)==4)break;h=c[l+(b*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(k=+QG(n,l+(h*56|0)|0,m),k>g):0){f=i;g=k}i=i+1|0}c[e>>2]=f;return}function QG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;g=+h[a>>3];i=+h[b>>3]-g;d=+h[a+8>>3];f=+h[b+8>>3]-d;g=+h[c>>3]-g;d=+h[c+8>>3]-d;e=d*f+g*i;if(!(d*i-g*f>=0.0))d=-e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)))+-2.0;else d=e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)));return +d}function RG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0.0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];i=e+32|0;j=a+16|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];if(!d){f=a+8|0;g=j;i=a+24|0;d=a}else{f=a+24|0;g=a;i=a+8|0;d=j}k=+h[g>>3];l=+h[i>>3];h[e+16>>3]=+h[d>>3];h[e+24>>3]=l;h[e+48>>3]=k;h[e+56>>3]=+h[f>>3];a:do if(b|0){d=0;while(1){if((d|0)==4)break a;j=e+(d<<4)+8|0;l=+h[j>>3];b=e+(d<<4)|0;h[j>>3]=+h[b>>3];h[b>>3]=-l;d=d+1|0}}while(0);return}function SG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=b+3|0;i=b+1|0;j=b+2|0;k=a+(b*56|0)+44|0;l=a+(h*56|0)+44|0;e=0;f=b;while(1){if((f|0)>(h|0))break;do if((f|0)!=(b|0))if((f|0)==(h|0)){c[l>>2]=b;g=j;break}else{c[a+(f*56|0)+44>>2]=f+1;g=f+-1|0;break}else{c[k>>2]=i;g=h}while(0);c[a+(f*56|0)+48>>2]=g;c[a+(f*56|0)+32>>2]=0;n=a+(f*56|0)|0;m=d+(e<<4)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];VN(a+(g*56|0)+16|0,m|0,16)|0;e=e+1|0;f=f+1|0}return b+4|0}function TG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;c[42437]=e<<1;c[42438]=e;k=ww(e*80|0)|0;c[42439]=1;c[42440]=1;WN(f|0,0,e*72|0)|0;g=UG(c[d+4>>2]|0,b,f,k)|0;e=1;while(1){if((e|0)>(a|0))break;c[b+(e*56|0)+40>>2]=g;c[b+(e*56|0)+36>>2]=g;e=e+1|0}j=VG(a)|0;g=2;i=1;while(1){if((i|0)>(j|0))break;e=WG(a,i+-1|0)|0;h=WG(a,i)|0;while(1){if((e|0)>=(h|0)){e=1;break}XG(c[d+(g<<2)>>2]|0,b,f,k);e=e+1|0;g=g+1|0}while(1){if((e|0)>(a|0))break;YG(e,b,f,k);e=e+1|0}i=i+1|0}e=WG(a,j)|0;while(1){if((e|0)>=(a|0))break;XG(c[d+(g<<2)>>2]|0,b,f,k);g=g+1|0;e=e+1|0}$I(k);return c[42439]|0}function UG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=bH()|0;c[e+(f*40|0)>>2]=2;s=e+(f*40|0)+8|0;k=b+(a*56|0)|0;l=b+(a*56|0)+16|0;fH(s,k,l);n=bH()|0;c[e+(f*40|0)+36>>2]=n;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+28>>2]=f;j=bH()|0;c[e+(f*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=2;r=e+(j*40|0)+8|0;gH(r,k,l);c[e+(j*40|0)+28>>2]=f;l=bH()|0;c[e+(j*40|0)+32>>2]=l;c[e+(l*40|0)>>2]=3;c[e+(l*40|0)+28>>2]=j;k=bH()|0;c[e+(j*40|0)+36>>2]=k;c[e+(k*40|0)>>2]=1;c[e+(k*40|0)+4>>2]=a;c[e+(k*40|0)+28>>2]=j;j=bH()|0;c[e+(k*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=3;c[e+(j*40|0)+28>>2]=k;g=bH()|0;c[e+(k*40|0)+36>>2]=g;c[e+(g*40|0)>>2]=3;c[e+(g*40|0)+28>>2]=k;k=aH(d)|0;i=aH(d)|0;m=aH(d)|0;o=aH(d)|0;p=d+(k*72|0)+8|0;q=d+(i*72|0)+8|0;t=d+(o*72|0)+24|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];VN(q|0,s|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];p=d+(k*72|0)+24|0;q=d+(i*72|0)+24|0;s=d+(m*72|0)+8|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];VN(q|0,r|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[d+(o*72|0)+16>>3]=1073741824.0;h[d+(o*72|0)+8>>3]=1073741824.0;h[d+(m*72|0)+32>>3]=-1073741824.0;h[d+(m*72|0)+24>>3]=-1073741824.0;c[d+(i*72|0)>>2]=a;c[d+(k*72|0)+4>>2]=a;c[d+(i*72|0)+40>>2]=o;c[d+(k*72|0)+40>>2]=o;c[d+(i*72|0)+48>>2]=m;c[d+(k*72|0)+48>>2]=m;c[d+(m*72|0)+40>>2]=k;c[d+(o*72|0)+48>>2]=k;c[d+(m*72|0)+44>>2]=i;c[d+(o*72|0)+52>>2]=i;c[d+(k*72|0)+56>>2]=j;c[d+(i*72|0)+56>>2]=g;c[d+(m*72|0)+56>>2]=l;c[d+(o*72|0)+56>>2]=n;c[d+(i*72|0)+68>>2]=1;c[d+(k*72|0)+68>>2]=1;c[d+(o*72|0)+68>>2]=1;c[d+(m*72|0)+68>>2]=1;c[e+(n*40|0)+24>>2]=o;c[e+(l*40|0)+24>>2]=m;c[e+(j*40|0)+24>>2]=k;c[e+(g*40|0)+24>>2]=i;c[b+(a*56|0)+32>>2]=1;return f|0}function VG(a){a=a|0;var b=0.0;b=+(a|0);a=0;while(1){if(!(b>=1.0))break;b=+DJ(b);a=a+1|0}return a+-1|0}function WG(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+(a|0);c=d;a=0;while(1){if((a|0)>=(b|0))break;c=+DJ(c);a=a+1|0}return ~~+N(+(d/c))|0}function XG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;W=l;l=l+96|0;S=W+32|0;f=W+16|0;T=W;s=S;k=b+(a*56|0)|0;r=s+56|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));U=S+16|0;V=S+24|0;i=+h[V>>3];H=S+8|0;j=+h[H>>3];do if(!(i>j+1.0e-07)){if(!(i<j+-1.0e-07)?+h[U>>3]>+h[S>>3]:0){G=4;break}G=($G(a,b,1)|0)==0;f=c[S+36>>2]|0;if(G){n=0;G=7}else{f=ZG(S,U,f,b,e)|0;G=20}}else G=4;while(0);if((G|0)==4){c[f>>2]=c[S>>2];c[f+4>>2]=c[S+4>>2];c[f+8>>2]=c[S+8>>2];c[f+12>>2]=c[S+12>>2];c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];c[U>>2]=c[f>>2];c[U+4>>2]=c[f+4>>2];c[U+8>>2]=c[f+8>>2];c[U+12>>2]=c[f+12>>2];E=S+36|0;F=c[E>>2]|0;G=S+40|0;f=c[G>>2]|0;c[E>>2]=f;c[G>>2]=F;if(!($G(a,b,2)|0)){n=1;G=7}else{f=ZG(S,U,f,b,e)|0;G=19}}if((G|0)==7){m=ZG(S,U,f,b,e)|0;f=aH(d)|0;c[d+(f*72|0)+68>>2]=1;s=d+(f*72|0)|0;k=d+(m*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[H>>3];h[d+(f*72|0)+16>>3]=q;h[d+(m*72|0)+32>>3]=q;q=+h[S>>3];h[d+(f*72|0)+8>>3]=q;h[d+(m*72|0)+24>>3]=q;c[d+(m*72|0)+48>>2]=f;c[d+(m*72|0)+52>>2]=0;c[d+(f*72|0)+40>>2]=m;c[d+(f*72|0)+44>>2]=0;g=c[d+(f*72|0)+48>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}g=c[d+(f*72|0)+52>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}E=bH()|0;G=bH()|0;F=d+(m*72|0)+56|0;D=c[F>>2]|0;c[e+(D*40|0)>>2]=2;C=e+(D*40|0)+8|0;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[e+(D*40|0)+4>>2]=a;c[e+(D*40|0)+32>>2]=G;c[e+(D*40|0)+36>>2]=E;c[e+(E*40|0)>>2]=3;c[e+(E*40|0)+24>>2]=m;c[e+(E*40|0)+28>>2]=D;c[e+(G*40|0)>>2]=3;c[e+(G*40|0)+24>>2]=f;c[e+(G*40|0)+28>>2]=D;c[F>>2]=E;c[d+(f*72|0)+56>>2]=G;if(n)G=19;else G=20}if((G|0)==19)if(!($G(a,b,1)|0)){g=1;G=21}else{g=1;G=32}else if((G|0)==20)if(!($G(a,b,2)|0)){g=0;G=21}else{g=0;G=32}if((G|0)==21){o=ZG(U,S,c[S+40>>2]|0,b,e)|0;n=aH(d)|0;c[d+(n*72|0)+68>>2]=1;s=d+(n*72|0)|0;k=d+(o*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[V>>3];h[d+(n*72|0)+16>>3]=q;h[d+(o*72|0)+32>>3]=q;q=+h[U>>3];h[d+(n*72|0)+8>>3]=q;h[d+(o*72|0)+24>>3]=q;c[d+(o*72|0)+48>>2]=n;c[d+(o*72|0)+52>>2]=0;c[d+(n*72|0)+40>>2]=o;c[d+(n*72|0)+44>>2]=0;k=c[d+(n*72|0)+48>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}k=c[d+(n*72|0)+52>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}D=bH()|0;F=bH()|0;E=d+(o*72|0)+56|0;C=c[E>>2]|0;c[e+(C*40|0)>>2]=2;A=e+(C*40|0)+8|0;c[A>>2]=c[U>>2];c[A+4>>2]=c[U+4>>2];c[A+8>>2]=c[U+8>>2];c[A+12>>2]=c[U+12>>2];c[e+(C*40|0)+4>>2]=a;c[e+(C*40|0)+32>>2]=F;c[e+(C*40|0)+36>>2]=D;c[e+(D*40|0)>>2]=3;c[e+(D*40|0)+24>>2]=o;c[e+(D*40|0)+28>>2]=C;c[e+(F*40|0)>>2]=3;c[e+(F*40|0)+24>>2]=n;c[e+(F*40|0)+28>>2]=C;c[E>>2]=D;c[d+(n*72|0)+56>>2]=F;F=f;f=0}else if((G|0)==32){F=f;o=ZG(U,S,c[S+40>>2]|0,b,e)|0;f=1}a:do if((F|0)>0){D=d+(o*72|0)+24|0;E=d+(o*72|0)+32|0;C=(f|0)!=0;y=g?b+(a*56|0)+48|0:b+(a*56|0)+44|0;z=T+8|0;g=0;f=0;x=F;b:while(1){k=d+(x*72|0)|0;v=d+(x*72|0)+24|0;if(!(cH(v,D)|0))break a;m=d+(x*72|0)+56|0;u=c[m>>2]|0;n=bH()|0;p=bH()|0;c[e+(u*40|0)>>2]=1;c[e+(u*40|0)+4>>2]=a;c[e+(u*40|0)+32>>2]=n;c[e+(u*40|0)+36>>2]=p;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+24>>2]=x;c[e+(n*40|0)+28>>2]=u;c[e+(p*40|0)>>2]=3;w=aH(d)|0;c[e+(p*40|0)+24>>2]=w;A=d+(w*72|0)|0;c[d+(w*72|0)+68>>2]=1;c[e+(p*40|0)+28>>2]=u;g=(x|0)==(F|0)?w:g;u=d+(x*72|0)+32|0;if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0)f=w;s=A;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));c[m>>2]=n;c[d+(w*72|0)+56>>2]=p;t=d+(x*72|0)+48|0;m=d+(x*72|0)+52|0;k=(c[m>>2]|0)<1;do if((c[t>>2]|0)<1){if(k)break b;s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(M=d+(x*72|0)+44|0,N=c[M>>2]|0,(N|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=N;c[d+(w*72|0)+44>>2]=-1;c[M>>2]=-1;c[d+(N*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=N;c[M>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=N}else{c[d+(w*72|0)+44>>2]=-1;t=d+(w*72|0)+40|0;c[t>>2]=c[M>>2];n=c[s>>2]|0;c[M>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[t>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=77;while(0);do if((G|0)==77){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(_G(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(_G(k,b,S)|0)!=0:0){c[d+((c[m>>2]|0)*72|0)+40>>2]=x;n=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+52>>2]|0)*72|0)+44>>2]=w;n=m;k=x}c[n>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[m>>2]|0;break}k=c[m>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(O=c[p>>2]|0,P=(n|0)==(x|0),(O|0)>0):0){c[d+(k*72|0)+60>>2]=P?O:n;c[d+(k*72|0)+64>>2]=P?1:2}c[m>>2]=x;c[p>>2]=w}else{if(!k){i=+h[u>>3];j=+h[H>>3];q=i-j;if(!(+B(+q)<=1.0e-07)){h[z>>3]=i;i=+h[S>>3];h[T>>3]=(+h[U>>3]-i)*(q/(+h[V>>3]-j))+i;s=(dH(T,v)|0)!=0}else s=+h[v>>3]>+h[S>>3];r=d+(x*72|0)+40|0;k=c[r>>2]|0;do if((k|0)>0?(Q=d+(x*72|0)+44|0,R=c[Q>>2]|0,(R|0)>0):0){p=d+(x*72|0)+60|0;k=c[p>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=R;c[d+(w*72|0)+44>>2]=-1;c[Q>>2]=-1;c[d+(R*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=R;c[Q>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;n=w;m=R}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[Q>>2];m=c[r>>2]|0;c[Q>>2]=m;c[r>>2]=k;c[d+(k*72|0)+48>>2]=x;n=x;k=c[X>>2]|0}c[d+(m*72|0)+48>>2]=n;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[p>>2]=0}else G=106;while(0);do if((G|0)==106){G=0;m=d+(k*72|0)+48|0;n=c[m>>2]|0;k=d+(k*72|0)+52|0;if((n|0)>0?(c[k>>2]|0)>0:0){k=c[d+(n*72|0)+4>>2]|0;if((k|0)>0?(_G(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[r>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;break}c[m>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;c[d+(k*72|0)+44>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=w;c[d+(X*72|0)+44>>2]=-1;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;c[k>>2]=-1;k=-1}else G=116;do if((G|0)==116){G=0;k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;m=d+(k*72|0)+44|0;if(s){c[m>>2]=w;X=d+(x*72|0)+52|0;v=c[X>>2]|0;c[d+(v*72|0)+40>>2]=w;c[d+(v*72|0)+44>>2]=-1;c[X>>2]=-1;break}else{c[m>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=x;c[d+(X*72|0)+44>>2]=w;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;k=c[k>>2]|0;break}}while(0);break}s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(I=d+(x*72|0)+44|0,J=c[I>>2]|0,(J|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=J;c[d+(w*72|0)+44>>2]=-1;c[I>>2]=-1;c[d+(J*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=J;c[I>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=J}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[I>>2];n=c[s>>2]|0;c[I>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[X>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=51;while(0);do if((G|0)==51){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(_G(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(_G(k,b,S)|0)!=0:0){c[d+((c[t>>2]|0)*72|0)+40>>2]=x;m=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+48>>2]|0)*72|0)+44>>2]=w;k=x}c[m>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[t>>2]|0;break}k=c[t>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(K=c[p>>2]|0,L=(n|0)==(x|0),(K|0)>0):0){c[d+(k*72|0)+60>>2]=L?K:n;c[d+(k*72|0)+64>>2]=L?1:2}c[m>>2]=x;c[p>>2]=w}while(0);c[A>>2]=a;c[d+(x*72|0)+4>>2]=a;if((k|0)>0)x=k;else break a}YL(123235,19,1,c[13918]|0)|0}else{g=0;f=0}while(0);eH(a,F,o,1,d,e);eH(a,g,f,2,d,e);c[b+(a*56|0)+32>>2]=1;l=W;return}function YG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!(c[b+(a*56|0)+32>>2]|0)){f=b+(a*56|0)|0;g=b+(a*56|0)+16|0;h=b+(a*56|0)+36|0;c[h>>2]=c[d+((ZG(f,g,c[h>>2]|0,b,e)|0)*72|0)+56>>2];a=b+(a*56|0)+40|0;c[a>>2]=c[d+((ZG(g,f,c[a>>2]|0,b,e)|0)*72|0)+56>>2]}return}function ZG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0;o=a+8|0;q=b+8|0;a:while(1){b:do switch(c[f+(d*40|0)>>2]|0){case 3:{r=3;break a}case 2:{g=+h[o>>3];i=f+(d*40|0)+8|0;j=+h[f+(d*40|0)+16>>3];k=j+1.0e-07;do if(!(g>k)){l=j+-1.0e-07;if(!(g<l)?+h[a>>3]>+h[i>>3]:0)break;if(+B(+(g-j))<=1.0e-07?(m=+h[i>>3],+B(+(+h[a>>3]-m))<=1.0e-07):0){g=+h[q>>3];do if(!(g>k)){if(!(g<l)?+h[b>>3]>m:0)break;d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break b}d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break}case 1:{g=+h[o>>3];i=c[f+(d*40|0)+4>>2]|0;if(+B(+(g-+h[e+(i*56|0)+8>>3]))<=1.0e-07?(n=+h[a>>3],+B(+(n-+h[e+(i*56|0)>>3]))<=1.0e-07):0)j=n;else r=19;do if((r|0)==19){r=0;if(+B(+(g-+h[e+(i*56|0)+24>>3]))<=1.0e-07?(p=+h[a>>3],+B(+(p-+h[e+(i*56|0)+16>>3]))<=1.0e-07):0){j=p;break}if(!(_G(i,e,a)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}}while(0);if(!(+B(+(g-+h[q>>3]))<=1.0e-07))if(!(_G(i,e,b)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}else if(+h[b>>3]<j){d=f+(d*40|0)+32|0;break b}else{d=f+(d*40|0)+36|0;break b}}default:{r=31;break a}}while(0);d=c[d>>2]|0}if((r|0)==3)return c[f+(d*40|0)+24>>2]|0;else if((r|0)==31){YL(123169,35,1,c[13918]|0)|0;ma(123205,123207,349,123219)}return 0}function _G(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0.0;f=b+(a*56|0)+16|0;g=+h[b+(a*56|0)+24>>3];i=b+(a*56|0)|0;e=+h[b+(a*56|0)+8>>3];do if(!(g>e+1.0e-07)){if(!(g<e+-1.0e-07)?+h[f>>3]>+h[i>>3]:0){j=4;break}d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[f>>3];d=(+h[i>>3]-k)*(d-g)-(+h[c>>3]-k)*(e-g);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}else j=4;while(0);do if((j|0)==4){d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[i>>3];d=(+h[f>>3]-k)*(d-e)-(+h[c>>3]-k)*(g-e);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}while(0);return d>0.0|0}function $G(a,b,d){a=a|0;b=b|0;d=d|0;return c[b+((c[((d|0)==1?b+(a*56|0)+48|0:b+(a*56|0)+44|0)>>2]|0)*56|0)+32>>2]|0}function aH(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[42439]|0;if((b|0)<(c[42438]|0)){c[a+(b*72|0)>>2]=-1;c[a+(b*72|0)+4>>2]=-1;c[a+(b*72|0)+68>>2]=1;c[42439]=b+1;l=e;return b|0}else{e=c[13918]|0;c[d>>2]=b;AL(e,123294,d)|0;ma(123205,123207,88,123332)}return 0}function bH(){var a=0;a=c[42440]|0;if((a|0)<(c[42437]|0)){c[42440]=a+1;return a|0}else{YL(123255,30,1,c[13918]|0)|0;ma(123205,123207,72,123286)}return 0}function cH(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d+1.0e-07))if(c<d+-1.0e-07)a=0;else a=+h[a>>3]>=+h[b>>3]&1;else a=1;return a|0}function dH(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c<d+-1.0e-07))if(c>d+1.0e-07)a=0;else a=+h[a>>3]<+h[b>>3]&1;else a=1;return a|0}function eH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f+(d*72|0)+24|0;p=(e|0)==1;a:while(1){o=f+(b*72|0)+24|0;j=f+(b*72|0)+48|0;k=f+(b*72|0)+52|0;l=f+(b*72|0)|0;m=f+(b*72|0)+4|0;n=f+(b*72|0)+56|0;if((b|0)<=0)break;while(1){if(!(cH(o,q)|0))break a;d=c[j>>2]|0;e=(d|0)>0;do if(p){if(e?(c[f+(d*72|0)+4>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)+4>>2]|0)!=(a|0)){b=d;continue a}}else{if(e?(c[f+(d*72|0)>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)>>2]|0)!=(a|0)){b=d;continue a}}while(0);if((c[l>>2]|0)!=(c[f+(d*72|0)>>2]|0)){b=d;continue a}if((c[m>>2]|0)!=(c[f+(d*72|0)+4>>2]|0)){b=d;continue a}r=c[f+(d*72|0)+56>>2]|0;e=c[g+(r*40|0)+28>>2]|0;h=g+(e*40|0)+32|0;i=c[n>>2]|0;if((c[h>>2]|0)==(r|0))c[h>>2]=i;else c[g+(e*40|0)+36>>2]=i;e=c[f+(d*72|0)+48>>2]|0;c[j>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);e=c[f+(d*72|0)+52>>2]|0;c[k>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);r=f+(d*72|0)+24|0;c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];c[f+(d*72|0)+68>>2]=2}}return}function fH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>f+1.0e-07)){if(!(+B(+(e-f))<=1.0e-07)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]>+h[d>>3]+1.0e-07){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function gH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e<f+-1.0e-07)){if(!(+B(+(e-f))<=1.0e-07)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]<+h[d>>3]){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function hH(a){a=a|0;var b=0;b=ww(8)|0;if(b|0){c[b+4>>2]=a;c[b>>2]=0}return b|0}function iH(a,b){a=a|0;b=b|0;if(b){b=hH(b)|0;c[b>>2]=a;a=b}return a|0}function jH(a){a=a|0;var b=0;do{b=a;a=c[a>>2]|0;$I(b)}while((a|0)!=0);return}function kH(){var a=0;a=ww(1992)|0;if(a|0)c[a>>2]=lH(a)|0;return a|0}function lH(a){a=a|0;var b=0;b=rH(a)|0;c[b+4>>2]=0;a=a+1972|0;c[a>>2]=(c[a>>2]|0)+1;return b|0}function mH(a){a=a|0;nH(a,c[a>>2]|0);$I(c[a>>2]|0);$I(a);return 0}function nH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=a+1980|0;h=a+1912|0;i=a+1936|0;a:do if((c[b+4>>2]|0)>0){d=0;while(1){if((d|0)==64)break a;e=b+8+(d*20|0)+16|0;f=c[e>>2]|0;if(f|0?(nH(a,f),$I(c[e>>2]|0),xH(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}else{d=0;while(1){if((d|0)==64)break a;if(c[b+8+(d*20|0)+16>>2]|0?(xH(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}while(0);return}function oH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!b)ma(123690,123340,194,123348);e=c[b+4>>2]|0;if((e|0)<=-1)ma(123360,123340,195,123348);if(!d)ma(123632,123340,196,123348);i=a+1952|0;c[i>>2]=(c[i>>2]|0)+1;a:do if((e|0)>0){i=0;e=0;while(1){if((i|0)==64)break a;f=b+8+(i*20|0)+16|0;if((c[f>>2]|0)!=0?(CH(d,b+8+(i*20|0)|0)|0)!=0:0){g=oH(a,c[f>>2]|0,d)|0;if(!e)e=g;else{f=e;while(1){h=c[f>>2]|0;if(!h)break;else f=h}c[f>>2]=g}}i=i+1|0}}else{g=0;e=0;while(1){if((g|0)==64)break a;f=b+8+(g*20|0)|0;if((c[b+8+(g*20|0)+16>>2]|0)!=0?(CH(d,f)|0)!=0:0)e=iH(e,f)|0;g=g+1|0}}while(0);return e|0}function pH(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+52|0;m=p+32|0;n=p+16|0;o=p;c[k>>2]=0;if(!((b|0)!=0&(e|0)!=0))ma(123546,123340,247,123374);if((f|0)>-1?(j=c[e>>2]|0,(c[j+4>>2]|0)>=(f|0)):0){g=0;while(1){if((g|0)>=2)break;if((c[b+(g<<2)>>2]|0)>(c[b+(g+2<<2)>>2]|0)){h=8;break}else g=g+1|0}if((h|0)==8)ma(123421,123340,250,123374);i=a+1912|0;g=a+1908|0;h=c[g>>2]|0;if(c[i>>2]|0){q=h|0?a+1924|0:a+1916|0;c[q>>2]=(c[q>>2]|0)+1}if(!h){q=a+1964|0;c[q>>2]=(c[q>>2]|0)+1}if(!(qH(a,b,d,j,k,f)|0))g=0;else{if(c[i>>2]|0){q=c[g>>2]|0?a+1948|0:a+1944|0;c[q>>2]=(c[q>>2]|0)+1}g=rH(a)|0;q=a+1976|0;c[q>>2]=(c[q>>2]|0)+1;q=c[e>>2]|0;c[g+4>>2]=(c[q+4>>2]|0)+1;uH(n,q);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];q=m+16|0;c[q>>2]=c[e>>2];wH(a,m,g,0)|0;uH(o,c[k>>2]|0);c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[q>>2]=c[k>>2];wH(a,m,g,0)|0;c[e>>2]=g;g=a+1980|0;c[g>>2]=(c[g>>2]|0)+2;g=1}l=p;return g|0}ma(123386,123340,248,123374);return 0}function qH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;m=q+52|0;n=q+48|0;o=q+32|0;p=q+16|0;k=q;c[n>>2]=0;if(!((b|0)!=0&(e|0)!=0&(f|0)!=0))ma(123464,123340,311,123478);if((g|0)>-1?(i=e+4|0,h=c[i>>2]|0,(h|0)>=(g|0)):0){if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i>>2]|0}do if((h|0)>(g|0)){i=vH(b,e)|0;h=e+8+(i*20|0)+16|0;i=e+8+(i*20|0)|0;if(!(qH(a,b,d,c[h>>2]|0,n,g)|0)){BH(o,b,i);c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];j=0;break}else{uH(p,c[h>>2]|0);c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];j=c[n>>2]|0;c[m+16>>2]=j;uH(k,j);c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=wH(a,m,e,f)|0;break}}else if((h|0)==(g|0)){c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];c[m+16>>2]=d;j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=wH(a,m,e,f)|0;break}else ma(123523,123340,341,123478);while(0);l=q;return j|0}ma(123491,123340,312,123478);return 0}function rH(a){a=a|0;a=a+1968|0;c[a>>2]=(c[a>>2]|0)+1;a=_I(1288)|0;sH(a);return a|0}function sH(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=-1;b=0;while(1){if((b|0)==64)break;tH(a+8+(b*20|0)|0);b=b+1|0}return}function tH(a){a=a|0;yH(a);c[a+16>>2]=0;return}function uH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;g=i+16|0;h=i;if(!b)ma(123690,123529,99,123536);yH(g);d=1;f=0;while(1){if((f|0)==64)break;do if(c[b+8+(f*20|0)+16>>2]|0){e=b+8+(f*20|0)|0;if(!d){BH(h,g,e);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];d=0;break}else{c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];d=0;break}}while(0);f=f+1|0}c[a>>2]=c[g>>2];c[a+4>>2]=c[g+4>>2];c[a+8>>2]=c[g+8>>2];c[a+12>>2]=c[g+12>>2];l=i;return}function vH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;k=l;l=l+32|0;i=k+16|0;j=k;if(!((a|0)!=0&(b|0)!=0))ma(123546,123529,125,123553);d=0;e=0;f=0;g=1;h=0;while(1){if((h|0)==64)break;if(c[b+8+(h*20|0)+16>>2]|0){n=b+8+(h*20|0)|0;p=AH(n)|0;BH(j,a,n);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];n=(AH(i)|0)-p|0;m=(g|0)!=0|(n|0)<(f|0);o=m|(p|0)<(e|0)&(n|0)==(f|0);d=o?h:d;e=o?p:e;f=o?n:f;g=m?0:g}h=h+1|0}l=k;return d|0}function wH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!b)ma(123712,123529,167,123564);if(!d)ma(123690,123529,168,123564);do if((c[d>>2]|0)<64){a=0;while(1){if((a|0)>=64){e=10;break}if(!(c[d+8+(a*20|0)+16>>2]|0)){e=8;break}a=a+1|0}if((e|0)==8){f=d+8+(a*20|0)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];f=0;g=d;break}else if((e|0)==10)ma(123574,123529,178,123564)}else{if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1}if(!e)ma(123587,123529,187,123564);else{DH(a,d,b,e);f=1;g=(c[d+4>>2]|0)==0?a+1972|0:a+1976|0;break}}while(0);c[g>>2]=(c[g>>2]|0)+1;return f|0}function xH(a,b){a=a|0;b=b|0;if(!((a|0)!=0&b>>>0<64))ma(123591,123529,201,123619);if(!(c[a+8+(b*20|0)+16>>2]|0))ma(124113,123529,202,123619);else{tH(a+8+(b*20|0)|0);c[a>>2]=(c[a>>2]|0)+-1;return}}function yH(a){a=a|0;var b=0;b=0;while(1){if((b|0)==4)break;c[a+(b<<2)>>2]=0;b=b+1|0}return}function zH(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;c[d>>2]=1;c[d+8>>2]=-1;b=1;while(1){if((b|0)==2)break;c[d+(b+2<<2)>>2]=0;c[d+(b<<2)>>2]=0;b=b+1|0}c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=e;return}function AH(a){a=a|0;var b=0,d=0,e=0;if(!a)ma(123632,123634,128,123646);a:do if((c[a>>2]|0)>(c[a+8>>2]|0))b=0;else{b=1;d=0;while(1){if((d|0)==2)break a;e=O(c[a+(d+2<<2)>>2]|0,b)|0;b=e-(c[a+(d<<2)>>2]|0)|0;d=d+1|0}}while(0);return b|0}function BH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=l;l=l+16|0;f=g;if(!((b|0)!=0&(d|0)!=0))ma(123655,123634,195,123663);do if((c[b>>2]|0)>(c[b+8>>2]|0)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2]}else{if((c[d>>2]|0)>(c[d+8>>2]|0)){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else e=0;while(1){if((e|0)==2)break;j=c[b+(e<<2)>>2]|0;h=c[d+(e<<2)>>2]|0;c[f+(e<<2)>>2]=(j|0)<(h|0)?j:h;h=e+2|0;j=c[b+(h<<2)>>2]|0;i=c[d+(h<<2)>>2]|0;c[f+(h<<2)>>2]=(j|0)>(i|0)?j:i;e=e+1|0}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2]}while(0);l=g;return}function CH(a,b){a=a|0;b=b|0;var d=0,e=0;if((a|0)!=0&(b|0)!=0)d=0;else ma(123675,123634,216,123682);while(1){if((d|0)>=2){d=1;break}e=d+2|0;if((c[a+(d<<2)>>2]|0)>(c[b+(e<<2)>>2]|0)){d=0;break}if((c[b+(d<<2)>>2]|0)>(c[a+(e<<2)>>2]|0)){d=0;break}else d=d+1|0}return d|0}function DH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0;if(!b)ma(123690,123692,40,123702);if(!d)ma(123712,123692,41,123702);j=a+1912|0;if(c[j>>2]|0){i=c[a+1908>>2]|0?a+1932|0:a+1928|0;c[i>>2]=(c[i>>2]|0)+1}h=b+4|0;i=c[h>>2]|0;EH(a,b,d);d=a+1324|0;FH(a);f=AH(a+1852|0)|0;f=(AH(a+1868|0)|0)+f|0;if(c[j>>2]|0?(f|0)!=0&(c[a+1908>>2]|0)==0:0){j=a+1960|0;g[j>>2]=+((c[a+1320>>2]|0)>>>0)/+(f|0)+ +g[j>>2]}j=rH(a)|0;c[e>>2]=j;c[h>>2]=i;c[j+4>>2]=i;GH(a,b,j,d);if(((c[c[e>>2]>>2]|0)+(c[b>>2]|0)|0)==65)return;else ma(123714,123692,86,123702)}function EH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h;if(!b)ma(123690,123692,106,124101);if(!d)ma(123712,123692,107,124101);else e=0;while(1){if((e|0)>=64)break;if(!(c[b+8+(e*20|0)+16>>2]|0)){f=7;break}j=b+8+(e*20|0)|0;i=a+4+(e*20|0)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];c[i+16>>2]=c[j+16>>2];e=e+1|0}if((f|0)==7)ma(124113,123692,111,124101);e=a+4|0;j=a+1284|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];d=a+1304|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)==65)break;BH(g,d,a+4+(e*20|0)|0);c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];e=e+1|0}c[a+1320>>2]=AH(d)|0;sH(b);l=h;return}function FH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+48|0;i=u+32|0;k=u+16|0;m=u;HH(a);IH(a);q=a+1844|0;s=a+1848|0;t=a+1892|0;n=a+1852|0;o=a+1884|0;p=a+1868|0;j=a+1888|0;f=0;e=0;while(1){d=c[q>>2]|0;b=c[s>>2]|0;if((b+d|0)>=65)break;h=65-(c[t>>2]|0)|0;if((d|0)<(h|0)&(b|0)<(h|0)){g=-1;h=0}else{r=12;break}while(1){if((h|0)==65)break;if(!(c[a+1584+(h<<2)>>2]|0)){v=a+4+(h*20|0)|0;BH(k,v,n);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];b=AH(i)|0;d=c[o>>2]|0;BH(m,v,p);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];v=AH(i)|0;b=v-(c[j>>2]|0)+(d-b)|0;d=(b|0)>-1;b=d?b:0-b|0;d=(d^1)&1;if((b|0)<=(g|0))if((b|0)==(g|0)){v=(c[a+1844+(d<<2)>>2]|0)<(c[a+1844+(f<<2)>>2]|0);b=g;d=v?d:f;e=v?h:e}else{b=g;d=f}else e=h}else{b=g;d=f}g=b;h=h+1|0;f=d}JH(a,e,f)}if((r|0)==12){b=(d|0)>=(65-(c[t>>2]|0)|0)&1;d=0;while(1){if((d|0)==65)break;if(!(c[a+1584+(d<<2)>>2]|0))JH(a,d,b);d=d+1|0}d=c[q>>2]|0;b=c[s>>2]|0}if((b+d|0)!=65)ma(123857,123692,210,123943);v=c[t>>2]|0;if((d|0)<(v|0)|(b|0)<(v|0))ma(123954,123692,212,123943);else{l=u;return}}function GH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if(!b)ma(123690,123692,297,123754);if(!d)ma(123764,123692,298,123754);if(!e)ma(123766,123692,299,123754);else f=0;while(1){if((f|0)>=65){e=14;break}e=c[a+1324+(f<<2)>>2]|0;if(e>>>0>=2){e=9;break}switch(e|0){case 0:{wH(a,a+4+(f*20|0)|0,b,0)|0;break}case 1:{wH(a,a+4+(f*20|0)|0,d,0)|0;break}default:{}}f=f+1|0}if((e|0)==9)ma(123768,123692,303,123754);else if((e|0)==14)return}function HH(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[a+1848>>2]=0;c[a+1844>>2]=0;b=a+1852|0;f=a+1868|0;zH(e);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[a+1888>>2]=0;c[a+1884>>2]=0;b=0;while(1){if((b|0)==65)break;c[a+1584+(b<<2)>>2]=0;c[a+1324+(b<<2)>>2]=-1;b=b+1|0}l=d;return}function IH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+304|0;k=o+32|0;m=o+16|0;n=o;b=0;while(1){if((b|0)==65)break;c[k+(b<<2)>>2]=AH(a+4+(b*20|0)|0)|0;b=b+1|0}b=0;d=0;e=0;g=0;a:while(1){if((g|0)==64)break;i=g+1|0;j=a+4+(g*20|0)|0;h=k+(g<<2)|0;f=i;while(1){if((f|0)==65){g=i;continue a}BH(n,j,a+4+(f*20|0)|0);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];p=AH(m)|0;p=p-(c[h>>2]|0)-(c[k+(f<<2)>>2]|0)|0;q=p>>>0>e>>>0;r=q?f:b;f=f+1|0;b=r;d=q?g:d;e=q?p:e}}JH(a,d,0);JH(a,b,1);l=o;return}function JH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;e=a+1584+(b<<2)|0;if(c[e>>2]|0)ma(124057,123692,257,124092);c[a+1324+(b<<2)>>2]=d;c[e>>2]=1;g=a+1844+(d<<2)|0;f=a+1852+(d<<4)|0;e=a+4+(b*20|0)|0;if(!(c[g>>2]|0)){c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2]}else{BH(h,e,f);c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2]}c[a+1884+(d<<2)>>2]=AH(f)|0;c[g>>2]=(c[g>>2]|0)+1;l=i;return}function KH(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[42441]=0;c[42442]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=95;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=_I(k*6|3)|0;if(h){UN(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;UN(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{$I(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=96;break a}case 4:{s=95;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==31){e=0;s=96;break}e=b[58358+(p<<1)>>1]|0;j=e<<16>>16;do if(e<<16>>16!=-82){h=c[42442]|0;if((h|0)==-2){h=hI()|0;c[42442]=h}if((h|0)>=1)if(h>>>0<296)i=d[124132+h>>0]|0;else i=2;else{c[42442]=0;i=0}h=i+j|0;if(h>>>0<=271?(i|0)==(a[124428+h>>0]|0):0){p=a[124700+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[42442]=-2;g=g+4|0;c[g>>2]=0;j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[124972+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[42442]|0;b:do switch(q|0){case 0:{c[42441]=(c[42441]|0)+1;dI(125369);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=96;break a}else{h=o;break b}else{c[42442]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<16>>16==8)break;if((h|0)==(f|0)){e=1;s=96;break a}e=h+-2|0;g=g+-4|0;h=e;e=b[58358+(b[e>>1]<<1)>>1]|0}g=g+4|0;c[g>>2]=0;e=1;j=3}else s=23}do if((s|0)==23){s=0;j=d[125088+h>>0]|0;e=c[g+(1-j<<2)>>2]|0;do switch(h|0){case 4:{s=26;break a}case 2:{c[42443]=LH(c[g+-4>>2]|0,2)|0;break}case 3:{c[42443]=LH(c[g+-4>>2]|0,1)|0;break}case 5:{e=NH()|0;break}case 8:{OH(c[42444]|0);break}case 9:{PH(c[g>>2]|0);break}case 18:{QH(c[g>>2]|0);break}case 19:{RH();break}case 20:{QH(c[g>>2]|0);break}case 21:{RH();break}case 22:{QH(c[g>>2]|0);break}case 23:{RH();break}case 24:{QH(c[g>>2]|0);break}case 25:{RH();break}case 26:{QH(c[g>>2]|0);break}case 27:{RH();break}case 28:{QH(c[g>>2]|0);break}case 29:{RH();break}case 30:{QH(c[g>>2]|0);break}case 31:{RH();break}case 32:{QH(c[g>>2]|0);break}case 33:{RH();break}case 34:{e=c[g+-4>>2]|0;break}case 35:{e=c[g>>2]|0;break}case 38:{e=c[42444]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;i=c[42444]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(SH(p)|0){s=51;break a}c[(c[g>>2]|0)+80>>2]=c[42445];e=Rl(55016,c[4344]|0)|0;c[(c[g>>2]|0)+84>>2]=e;c[42445]=c[g>>2];c[(c[g>>2]|0)+108>>2]=c[c[42446]>>2];e=c[g>>2]|0;break}case 39:{e=c[42444]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){em(e,1)|0;i=c[42444]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(SH(p)|0){s=56;break a}e=c[42445]|0;c[42445]=c[e+80>>2];break}case 40:{e=c[g>>2]|0;break}case 41:{e=c[g+-4>>2]|0;break}case 42:{e=c[g+-4>>2]|0;break}case 43:{e=c[g+-4>>2]|0;break}case 44:{e=c[g+-4>>2]|0;break}case 45:{e=c[g+-4>>2]|0;break}case 48:{e=c[g>>2]|0;break}case 49:{e=c[g>>2]|0;break}case 50:{a[(c[g+-8>>2]|0)+12>>0]=1;e=c[g>>2]|0;break}case 51:{TH();break}case 52:{e=UH()|0;break}case 53:{e=c[g>>2]|0;break}case 54:{e=c[g>>2]|0;break}case 55:{e=(c[g+-8>>2]|0)+100|0;a[e>>0]=a[e>>0]|1;e=c[g>>2]|0;break}case 56:{VH(c[g+-4>>2]|0,c[g>>2]|0,1);break}case 57:{e=c[g+-12>>2]|0;break}case 58:{VH(c[g+-4>>2]|0,c[g>>2]|0,2);break}case 59:{e=c[g+-12>>2]|0;break}case 60:{VH(c[g+-4>>2]|0,c[g>>2]|0,3);break}case 61:{e=c[g+-12>>2]|0;break}case 62:{VH(c[g>>2]|0,NH()|0,2);break}case 63:{e=c[g+-8>>2]|0;break}case 64:{e=c[g+-4>>2]|0;break}case 65:{e=c[g>>2]|0;break}default:{}}while(0);i=0-j|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[125260+h>>0]|0)+-41|0;p=b[i>>1]|0;h=p+(b[58590+(e<<1)>>1]|0)|0;if(h>>>0<272?(a[124428+h>>0]|0)==(p|0):0){e=a[124700+h>>0]|0;j=q;h=i;break}e=a[125330+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==26){MH();e=1;s=96}else if((s|0)==51){dI(125158);MH();e=1;s=96}else if((s|0)==56){dI(125209);MH();e=1;s=96}else if((s|0)==95){dI(125382);e=2;s=96}if((s|0)==96)if((f|0)!=(r|0))$I(f);l=t;return e|0}function LH(b,d){b=b|0;d=d|0;var e=0;e=ww(8)|0;a[e+4>>0]=d;c[e>>2]=b;return e|0}function MH(){var a=0,b=0;a=c[42445]|0;b=c[42443]|0;if(b|0){FF(b,1);c[42443]=0}c[13767]=62;while(1){if(!a)break;b=c[a+80>>2]|0;ZH(a);a=b}c[13767]=51;c[13776]=63;b=c[42448]|0;bb[c[b>>2]&31](b,0,64)|0;c[13776]=51;c[13785]=64;b=c[42449]|0;bb[c[b>>2]&31](b,0,64)|0;c[13785]=51;aI();return}function NH(){var a=0,d=0,e=0,f=0,g=0,h=0;e=c[42449]|0;f=ww(40)|0;if(Tl(c[42448]|0)|0)PH(0);a=Tl(e)|0;b[f+4>>1]=a;a:do if(!a)a=e;else{c[f>>2]=ww(a*24|0)|0;a=0;d=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!d){a=e;break a}g=(c[f>>2]|0)+(a*24|0)|0;h=d+8|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=c[h+16>>2];c[g+20>>2]=c[h+20>>2];a=a+1|0;d=bb[c[e>>2]&31](e,d,8)|0}}while(0);bb[c[a>>2]&31](e,0,64)|0;return f|0}function OH(b){b=b|0;var d=0,e=0,f=0;e=ww(64)|0;f=b+4|0;d=c[f>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){em(b,1)|0;d=c[f>>2]|0}a[d>>0]=0;b=c[b>>2]|0;c[f>>2]=b;c[e+8>>2]=HL(b)|0;c[e+12>>2]=c[c[42446]>>2];f=c[42448]|0;bb[c[f>>2]&31](f,e,1)|0;return}function PH(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=ww(32)|0;j=c[42448]|0;e=Tl(j)|0;k=i+8|0;a[i+14>>0]=d;a:do if(!e){c[k>>2]=ww(56)|0;b[i+12>>1]=1;h=HL(174185)|0;k=c[k>>2]|0;c[k>>2]=h;c[k+4>>2]=c[c[42446]>>2]}else{b[i+12>>1]=e;c[k>>2]=ww(e*56|0)|0;d=0;e=Pl(j)|0;while(1){if(!e)break a;f=(c[k>>2]|0)+(d*56|0)|0;g=e+8|0;h=f+56|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));d=d+1|0;e=c[e>>2]|0}}while(0);bb[c[j>>2]&31](j,0,64)|0;k=c[42449]|0;bb[c[k>>2]&31](k,i,1)|0;return}function QH(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;i=ww(8)|0;f=c[c[42446]>>2]|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];if(f|0){a=g+4|0;if((c[a>>2]|0)==0?(b=c[f+4>>2]|0,b|0):0)c[a>>2]=b;a=g+16|0;if(+h[a>>3]<0.0?(d=+h[f+16>>3],d>=0.0):0)h[a>>3]=d;if((c[g>>2]|0)==0?(e=c[f>>2]|0,e|0):0)c[g>>2]=e;a=c[f+24>>2]&127;if(a|0){f=g+24|0;e=c[f>>2]|0;c[f>>2]=e&127|a|e&-128}}f=c[(c[42447]|0)+144>>2]|0;c[i>>2]=bb[c[f>>2]&31](f,g,1)|0;c[i+4>>2]=c[42446];c[42446]=i;l=j;return}function RH(){var a=0,b=0;b=c[42446]|0;a=c[b+4>>2]|0;$I(b);c[42446]=a;return}function SH(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=0;break}if(c<<24>>24==32)b=b+1|0;else{b=1;break}}return b|0}function TH(){var b=0,d=0,e=0;e=Rl(55052,c[4344]|0)|0;b=c[42445]|0;d=ww(16)|0;c[d+8>>2]=e;if(a[b+112>>0]&2)a[d+12>>0]=1;e=c[b+84>>2]|0;bb[c[e>>2]&31](e,d,1)|0;return}function UH(){var a=0;a=c[(c[42445]|0)+84>>2]|0;return bb[c[a>>2]&31](a,0,256)|0}function VH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=ww(16)|0;f=c[42445]|0;h=c[f+84>>2]|0;h=c[(bb[c[h>>2]&31](h,0,256)|0)+8>>2]|0;c[g+8>>2]=b;bb[c[h>>2]&31](h,g,1)|0;a[b+92>>0]=e;if(a[f+112>>0]&1)a[b+100>>0]=1;c[b+88>>2]=d;return}function WH(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function XH(a,b,d){a=a|0;b=b|0;d=d|0;Ll(c[b+8>>2]|0)|0;$I(b);return}function YH(a,b,d){a=a|0;b=b|0;d=d|0;bI(c[b+8>>2]|0);$I(b);return}function ZH(a){a=a|0;Ll(c[a+84>>2]|0)|0;CF(a);$I(a);return}function _H(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b+8>>2]|0);$I(b);return}function $H(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d+12|0;a=b[g>>1]|0;if(a<<16>>16){h=d+8|0;e=0;f=c[h>>2]|0;while(1){if((e|0)>=(a<<16>>16|0))break;$I(c[f>>2]|0);e=e+1|0;f=f+56|0;a=b[g>>1]|0}$I(c[h>>2]|0)}$I(d);return}function aI(){var a=0,b=0;a=c[42446]|0;while(1){b=c[a+4>>2]|0;if(!b)break;$I(a);a=b}return}function bI(b){b=b|0;var d=0;d=b+88|0;switch(a[b+92>>0]|0){case 1:{ZH(c[d>>2]|0);break}case 2:{DF(c[d>>2]|0);break}default:{}}CF(b);$I(b);return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+160|0;e=f+8|0;g=f;c[g>>2]=0;c[g+4>>2]=0;c[42446]=g;c[42445]=0;c[42443]=0;c[42447]=c[(c[(c[d+52>>2]|0)+16>>2]|0)+144>>2];c[42448]=Rl(55088,c[4344]|0)|0;c[42449]=Rl(55124,c[4344]|0)|0;dm(e,128,f+24|0);c[42444]=e;if(!(fI(a,e,d)|0)){KH()|0;c[b>>2]=gI()|0;a=c[42443]|0}else{c[b>>2]=2;a=0}Ll(c[42448]|0)|0;Ll(c[42449]|0)|0;c[42448]=0;c[42449]=0;c[42446]=0;hm(e);l=f;return a|0}function dI(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[169800]|0)){a[169800]=1;c[d>>2]=b;c[d+4>>2]=0;$l(1,125399,d)|0;eI()}else{l=e;return}}function eI(){Ta()}function fI(a,b,d){a=a|0;b=b|0;d=d|0;a=l;l=l+16|0;if(!(c[42451]|0)){$l(0,125415,a)|0;c[42451]=(c[42451]|0)+1}l=a;return 1}function gI(){return 1}function hI(){return -1}function iI(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;m=u+48|0;k=u+32|0;s=4;j=_I(40)|0;c[j>>2]=0;n=u+16|0;q=u;r=c[d>>2]|0;i=c[d+4>>2]|0;s=SN(169808,1,j|0,s|0)|0;j=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1)d=z;else d=0;while(1){if(d|0){d=-1;break}o=0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];ga(26,n|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];h=e+16|0;o=0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];ga(26,q|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[42491]=0;o=0;fa(93,4);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=TN(c[d>>2]|0,s|0,j|0)|0;if(!g)Ua(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue}g=c[42492]|0;d=c[42491]|0;c[42491]=d+1;d=g+(d<<4)|0;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];o=0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];d=da(1,a|0,b|0,r|0,i|0,k|0,m|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=TN(c[g>>2]|0,s|0,j|0)|0;if(!h)Ua(g|0,p|0);z=p}else h=-1;if((h|0)==1)d=z;else{t=8;break}}if((t|0)==8)if((d|0)==-1)d=-1;else{c[f+4>>2]=c[42491];c[f>>2]=c[42492];d=0}$I(s|0);l=u;return d|0}function jI(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0.0;d=+h[b>>3];e=b+8|0;f=+h[e>>3];i=f*f+d*d;g=+C(+i);if(i>1.0e-06){h[b>>3]=d/g;h[e>>3]=f/g};c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function kI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42495]|0)<(a|0)){b=c[42492]|0;if(!b){e=_I(a<<4)|0;c[42492]=e;if(!e){e=c[13918]|0;c[d>>2]=125476;c[d+4>>2]=531;c[d+8>>2]=125611;AL(e,125484,d)|0;Ua(169808,1)}}else{d=bJ(b,a<<4)|0;c[42492]=d;if(!d){d=c[13918]|0;c[e>>2]=125476;c[e+4>>2]=537;c[e+8>>2]=125629;AL(d,125484,e)|0;Ua(169808,1)}}c[42495]=a}l=f;return}function lI(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0;R=l;l=l+336|0;J=R+320|0;I=R+304|0;w=R+144|0;q=R+128|0;G=R+112|0;H=R+96|0;Q=R+80|0;A=R+64|0;C=R+48|0;K=R+32|0;L=R+16|0;M=R;x=R+288|0;y=R+272|0;z=R+256|0;B=R+240|0;D=R+224|0;E=R+208|0;N=R+192|0;O=R+176|0;P=R+160|0;i=c[42494]|0;do if((c[42493]|0)<(e|0)){if(!i){i=_I(e*40|0)|0;c[42494]=i;if(!i){i=-1;break}}else{i=bJ(i,e*40|0)|0;c[42494]=i;if(!i){i=-1;break}}c[42493]=e;k=6}else k=6;while(0);if((k|0)==6){h[i>>3]=0.0;k=1;j=0.0;while(1){if((k|0)>=(e|0))break;n=d+(k<<4)|0;F=d+(k+-1<<4)|0;c[I>>2]=c[n>>2];c[I+4>>2]=c[n+4>>2];c[I+8>>2]=c[n+8>>2];c[I+12>>2]=c[n+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];v=+mI(I,J)+j;h[i+(k*40|0)>>3]=v;k=k+1|0;j=v}F=e+-1|0;n=i+(F*40|0)|0;k=1;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)|0;h[S>>3]=+h[S>>3]/+h[n>>3];k=k+1|0}k=0;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)+8|0;n=i+(k*40|0)|0;v=+nI(+h[n>>3]);c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];c[J+8>>2]=c[f+8>>2];c[J+12>>2]=c[f+12>>2];oI(x,J,v);c[S>>2]=c[x>>2];c[S+4>>2]=c[x+4>>2];c[S+8>>2]=c[x+8>>2];c[S+12>>2]=c[x+12>>2];S=i+(k*40|0)+24|0;v=+pI(+h[n>>3]);c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];oI(y,J,v);c[S>>2]=c[y>>2];c[S+4>>2]=c[y+4>>2];c[S+8>>2]=c[y+8>>2];c[S+12>>2]=c[y+12>>2];k=k+1|0}c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];qI(d,e,i,I,J,G,A,H,C);c[q>>2]=c[G>>2];c[q+4>>2]=c[G+4>>2];c[q+8>>2]=c[G+8>>2];c[q+12>>2]=c[G+12>>2];c[w>>2]=c[A>>2];c[w+4>>2]=c[A+4>>2];c[w+8>>2]=c[A+8>>2];c[w+12>>2]=c[A+12>>2];c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];if(!(rI(a,b,q,w,I,J,d,e)|0)){c[J>>2]=c[A>>2];c[J+4>>2]=c[A+4>>2];c[J+8>>2]=c[A+8>>2];c[J+12>>2]=c[A+12>>2];oI(z,J,.3333333333333333);c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[z>>2];c[J+4>>2]=c[z+4>>2];c[J+8>>2]=c[z+8>>2];c[J+12>>2]=c[z+12>>2];sI(B,I,J);v=+h[B>>3];u=+h[B+8>>3];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];oI(D,J,.3333333333333333);c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[D>>2];c[J+4>>2]=c[D+4>>2];c[J+8>>2]=c[D+8>>2];c[J+12>>2]=c[D+12>>2];tI(E,I,J);t=+h[E>>3];p=+h[E+8>>3];q=c[42494]|0;r=+h[G>>3];s=+h[H>>3];o=+h[G+8>>3];m=+h[H+8>>3];n=Q+8|0;i=-1;j=-1.0;k=1;while(1){if((k|0)>=(F|0))break;T=+h[q+(k*40|0)>>3];U=+uI(T);V=+nI(T);W=+pI(T);T=+vI(T);h[Q>>3]=V*v+r*U+W*t+s*T;h[n>>3]=W*p+V*u+o*U+m*T;S=d+(k<<4)|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];T=+mI(I,J);S=T>j;i=S?k:i;j=S?T:j;k=k+1|0}S=d+(i<<4)|0;Q=d+(i+-1<<4)|0;c[I>>2]=c[S>>2];c[I+4>>2]=c[S+4>>2];c[I+8>>2]=c[S+8>>2];c[I+12>>2]=c[S+12>>2];c[J>>2]=c[Q>>2];c[J+4>>2]=c[Q+4>>2];c[J+8>>2]=c[Q+8>>2];c[J+12>>2]=c[Q+12>>2];tI(N,I,J);c[J>>2]=c[N>>2];c[J+4>>2]=c[N+4>>2];c[J+8>>2]=c[N+8>>2];c[J+12>>2]=c[N+12>>2];jI(L,J);Q=i+1|0;N=d+(Q<<4)|0;c[I>>2]=c[N>>2];c[I+4>>2]=c[N+4>>2];c[I+8>>2]=c[N+8>>2];c[I+12>>2]=c[N+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];tI(O,I,J);c[J>>2]=c[O>>2];c[J+4>>2]=c[O+4>>2];c[J+8>>2]=c[O+8>>2];c[J+12>>2]=c[O+12>>2];jI(M,J);c[I>>2]=c[L>>2];c[I+4>>2]=c[L+4>>2];c[I+8>>2]=c[L+8>>2];c[I+12>>2]=c[L+12>>2];c[J>>2]=c[M>>2];c[J+4>>2]=c[M+4>>2];c[J+8>>2]=c[M+8>>2];c[J+12>>2]=c[M+12>>2];sI(P,I,J);c[J>>2]=c[P>>2];c[J+4>>2]=c[P+4>>2];c[J+8>>2]=c[P+8>>2];c[J+12>>2]=c[P+12>>2];jI(K,J);c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];lI(a,b,d,Q,I,J)|0;c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];lI(a,b,S,e-i|0,I,J)|0;i=0}else i=0}l=R;return i|0}function mI(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[b>>3]-+h[a>>3];d=+h[b+8>>3]-+h[a+8>>3];return +(+C(+(d*d+c*c)))}function nI(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(a*3.0))}function oI(a,b,d){a=a|0;b=b|0;d=+d;var e=0;h[b>>3]=+h[b>>3]*d;e=b+8|0;h[e>>3]=+h[e>>3]*d;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function pI(a){a=+a;return +(a*a*3.0*(1.0-a))}function qI(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0;G=l;l=l+128|0;B=G+112|0;v=G+80|0;u=G;r=G+96|0;s=G+64|0;t=G+48|0;C=G+32|0;D=G+16|0;E=a+(b+-1<<4)|0;q=0;w=0.0;x=0.0;y=0.0;z=0.0;A=0.0;while(1){if((q|0)>=(b|0))break;K=d+(q*40|0)+8|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];H=+BI(v,B)+x;J=d+(q*40|0)+24|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];p=+BI(v,B)+A;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];o=+BI(v,B)+y;L=a+(q<<4)|0;M=d+(q*40|0)|0;I=+CI(+h[M>>3]);c[B>>2]=c[a>>2];c[B+4>>2]=c[a+4>>2];c[B+8>>2]=c[a+8>>2];c[B+12>>2]=c[a+12>>2];oI(s,B,I);I=+DI(+h[M>>3]);c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];oI(t,B,I);c[v>>2]=c[s>>2];c[v+4>>2]=c[s+4>>2];c[v+8>>2]=c[s+8>>2];c[v+12>>2]=c[s+12>>2];c[B>>2]=c[t>>2];c[B+4>>2]=c[t+4>>2];c[B+8>>2]=c[t+8>>2];c[B+12>>2]=c[t+12>>2];sI(r,v,B);c[v>>2]=c[L>>2];c[v+4>>2]=c[L+4>>2];c[v+8>>2]=c[L+8>>2];c[v+12>>2]=c[L+12>>2];c[B>>2]=c[r>>2];c[B+4>>2]=c[r+4>>2];c[B+8>>2]=c[r+8>>2];c[B+12>>2]=c[r+12>>2];tI(u,v,B);c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];I=+BI(v,B)+w;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];q=q+1|0;w=I;x=H;y=o;z=+BI(v,B)+z;A=p}o=y*x-A*A;p=o>=0.0?o:-o;if(!(p>=1.0e-06?(m=(y*w-A*z)/o,n=(x*z-A*w)/o,!(p<1.0e-06|m<=0.0|n<=0.0)):0))F=6;if((F|0)==6){c[v>>2]=c[a>>2];c[v+4>>2]=c[a+4>>2];c[v+8>>2]=c[a+8>>2];c[v+12>>2]=c[a+12>>2];c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];m=+mI(v,B)*.3333333333333333;n=m};c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];oI(C,B,m);c[i>>2]=c[C>>2];c[i+4>>2]=c[C+4>>2];c[i+8>>2]=c[C+8>>2];c[i+12>>2]=c[C+12>>2];c[j>>2]=c[E>>2];c[j+4>>2]=c[E+4>>2];c[j+8>>2]=c[E+8>>2];c[j+12>>2]=c[E+12>>2];c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];oI(D,B,n);c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];l=G;return}function rI(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0;C=l;l=l+64|0;B=C;z=(j|0)==2;y=+h[d>>3];u=+h[d+8>>3];v=B+8|0;w=+h[e>>3];x=B+16|0;p=+h[e+8>>3];q=B+24|0;r=+h[f>>3];s=+h[g>>3];t=B+32|0;o=+h[f+8>>3];n=+h[g+8>>3];e=B+40|0;f=B+48|0;g=B+56|0;d=1;k=4.0;m=4.0;while(1){h[B>>3]=y;h[v>>3]=u;D=m*.3333333333333333;h[x>>3]=D*w+y;h[q>>3]=D*p+u;D=k*.3333333333333333;h[t>>3]=r-D*s;h[e>>3]=o-D*n;h[f>>3]=r;h[g>>3]=o;if(d?(D=+wI(B,4),D<+wI(i,j)+-.001):0){d=0;break}if(xI(a,b,B)|0){A=5;break}if(m==0.0&k==0.0){A=9;break}E=m>.01;d=0;k=E?k*.5:0.0;m=E?m*.5:0.0}a:do if((A|0)==5){kI((c[42491]|0)+4|0);e=c[42492]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[42491]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[42491]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else if((A|0)==9)if(z){kI((c[42491]|0)+4|0);e=c[42492]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[42491]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[42491]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else d=0;while(0);l=C;return d|0}function sI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function tI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]-+h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]-+h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function uI(a){a=+a;a=1.0-a;return +(a*a*a)}function vI(a){a=+a;return +(a*a*a)}function wI(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0;c=0.0;d=1;while(1){if((d|0)>=(b|0))break;g=d+-1|0;e=+h[a+(d<<4)>>3]-+h[a+(g<<4)>>3];f=+h[a+(d<<4)+8>>3]-+h[a+(g<<4)+8>>3];c=+C(+(f*f+e*e))+c;d=d+1|0}return +c}function xI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=l;l=l+64|0;t=C+32|0;u=C;w=u+16|0;y=d+16|0;z=d+32|0;A=d+48|0;B=d+8|0;g=d+24|0;i=d+40|0;j=d+56|0;k=u+8|0;m=u+24|0;f=0;a:while(1){if((f|0)>=(b|0)){e=1;break}n=a+(f<<5)|0;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];n=a+(f<<5)+16|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];n=yI(d,u,t)|0;b:do if((n|0)!=4){o=+h[u>>3];p=+h[k>>3];q=+h[w>>3];r=+h[m>>3];e=0;while(1){if((e|0)>=(n|0))break b;s=+h[t+(e<<3)>>3];if((!(s<1.0e-06|s>.999999)?(x=s*s*s,E=s*3.0,D=1.0-s,s=E*s*D,v=D*D,E=v*E,D=v*D,v=+h[y>>3]*E+ +h[d>>3]*D+ +h[z>>3]*s+ +h[A>>3]*x,x=+h[g>>3]*E+ +h[B>>3]*D+ +h[i>>3]*s+ +h[j>>3]*x,s=v-o,D=x-p,!(D*D+s*s<.001)):0)?(E=v-q,D=x-r,!(D*D+E*E<.001)):0){e=0;break a}e=e+1|0}}while(0);f=f+1|0}l=C;return e|0}function yI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+96|0;s=v+48|0;t=v+24|0;k=v;u=v+80|0;p=+h[b>>3];g=+h[b+16>>3]-p;q=+h[b+8>>3];j=+h[b+24>>3]-q;c[u>>2]=0;a:do if(!(g==0.0)){j=j/g;m=a+16|0;n=a+32|0;o=a+48|0;zI(+h[a+8>>3]-+h[a>>3]*j,+h[a+24>>3]-+h[m>>3]*j,+h[a+40>>3]-+h[n>>3]*j,+h[a+56>>3]-+h[o>>3]*j,s);h[s>>3]=j*p-q+ +h[s>>3];e=VI(s,t)|0;if((e|0)==4)b=4;else{f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/g;b=0;while(1){if((b|0)>=(e|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(zI(+h[a>>3],+h[m>>3],+h[n>>3],+h[o>>3],s),q=(+h[s>>3]-p+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,q>=0.0&q<=1.0):0)AI(j,d,u);b=b+1|0}b=c[u>>2]|0}}else{zI(+h[a>>3],+h[a+16>>3],+h[a+32>>3],+h[a+48>>3],s);h[s>>3]=+h[s>>3]-p;r=VI(s,t)|0;if(!(j==0.0)){if((r|0)==4){b=4;break}m=a+8|0;n=a+24|0;o=a+40|0;e=a+56|0;f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/j;b=0;while(1){if((b|0)>=(r|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(zI(+h[m>>3],+h[n>>3],+h[o>>3],+h[e>>3],s),p=(+h[s>>3]-q+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,p>=0.0&p<=1.0):0)AI(j,d,u);b=b+1|0}b=c[u>>2]|0;break}zI(+h[a+8>>3],+h[a+24>>3],+h[a+40>>3],+h[a+56>>3],s);h[s>>3]=+h[s>>3]-q;i=VI(s,k)|0;b=(i|0)==4;b:do if((r|0)==4){if(b){b=4;break a}else b=0;while(1){if((b|0)>=(i|0))break b;AI(+h[k+(b<<3)>>3],d,u);b=b+1|0}}else{if(b){b=0;while(1){if((b|0)>=(r|0))break b;AI(+h[t+(b<<3)>>3],d,u);b=b+1|0}}else e=0;while(1){if((e|0)>=(r|0))break b;f=t+(e<<3)|0;b=0;while(1){if((b|0)>=(i|0))break;g=+h[f>>3];if(g==+h[k+(b<<3)>>3])AI(g,d,u);b=b+1|0}e=e+1|0}}while(0);b=c[u>>2]|0}while(0);l=v;return b|0}function zI(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=e|0;h[e+24>>3]=d-a+(b-c)*3.0;h[e+16>>3]=(c+a)*3.0-b*6.0;h[e+8>>3]=(b-a)*3.0;h[e>>3]=a;return}function AI(a,b,d){a=+a;b=b|0;d=d|0;var e=0;if(a>=0.0&a<=1.0){e=c[d>>2]|0;h[b+(e<<3)>>3]=a;c[d>>2]=e+1}return}function BI(a,b){a=a|0;b=b|0;return +(+h[b+8>>3]*+h[a+8>>3]+ +h[b>>3]*+h[a>>3])}function CI(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(b+a*3.0))}function DI(a){a=+a;return +(a*a*((1.0-a)*3.0+a))}\nfunction tx(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=l;l=l+2288|0;W=Y+208|0;V=Y+192|0;U=Y+176|0;T=Y+160|0;S=Y+144|0;R=Y+128|0;P=Y+112|0;O=Y+96|0;N=Y+80|0;M=Y+64|0;L=Y+56|0;K=Y+48|0;X=Y+32|0;Q=Y+24|0;J=Y;G=Y+1264|0;H=Y+224|0;I=d+16|0;C=(e[(c[I>>2]|0)+178>>1]|0)>2;Gv(1);kx(d);dm(H,1024,Y+240|0);uB(d,1,87657,174185)|0;uB(d,1,87661,174185)|0;c[42191]=uB(d,1,96043,174185)|0;c[42190]=uB(d,1,96049,174185)|0;uB(d,2,87657,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0;if(i&16){uB(d,1,87667,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&1){uB(d,2,87671,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&32){uB(d,2,87667,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&2){uB(d,2,87674,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&4){uB(d,2,87682,174185)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(!(i&8)){v=0;w=0;x=0}else{x=uB(d,0,87671,174185)|0;w=uB(d,0,87690,174185)|0;v=uB(d,0,87697,174185)|0}z=uB(d,0,87705,174185)|0;A=H+4|0;B=H+8|0;u=0;i=0;y=eo(d)|0;while(1){if(!y)break;t=y+16|0;k=c[t>>2]|0;o=+h[k+16>>3];j=(c[42184]|0)==0;if(C){if(j)m=+h[k+24>>3];else m=+h[20895]-+h[k+24>>3];q=+h[(c[k+132>>2]|0)+16>>3]*72.0;h[J>>3]=o;h[J+8>>3]=m;h[J+16>>3]=q;qL(G,87708,J)|0;gm(H,G)|0;j=3;while(1){if((j|0)>=(e[(c[I>>2]|0)+178>>1]|0))break;h[Q>>3]=+h[(c[(c[t>>2]|0)+132>>2]|0)+(j<<3)>>3]*72.0;qL(G,87723,Q)|0;gm(H,G)|0;j=j+1|0}j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;s=c[H>>2]|0;c[A>>2]=s;Lm(y,87657,s)|0;s=y}else{if(j)m=+h[k+24>>3];else m=+h[20895]-+h[k+24>>3];h[X>>3]=o;h[X+8>>3]=m;qL(G,87729,X)|0;Lm(y,87657,G)|0;s=y}h[K>>3]=+h[(c[t>>2]|0)+80>>3]*.013888888888888888;qL(G,87652,K)|0;Dm(s,c[42190]|0,G)|0;j=c[t>>2]|0;h[L>>3]=(+h[j+96>>3]+ +h[j+88>>3])*.013888888888888888;qL(G,87652,L)|0;Dm(s,c[42191]|0,G)|0;j=c[t>>2]|0;k=c[j+108>>2]|0;if((k|0)!=0?(a[k+81>>0]|0)!=0:0){q=+h[k+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[M>>3]=+h[k+56>>3];h[M+8>>3]=q;qL(G,87729,M)|0;Lm(s,87667,G)|0;j=c[t>>2]|0}if(yJ(c[c[j+8>>2]>>2]|0,91264)|0){if(c[42215]|0?(Py(y)|0)<<24>>24:0){k=c[(c[t>>2]|0)+12>>2]|0;r=k+8|0;j=c[r>>2]|0;if((j|0)<3){j=Jm(s,87739)|0;if(!j)j=8;else j=sM(j)|0;j=(j|0)<3?8:j}p=k+44|0;q=1.0/+(j|0);n=0;while(1){if((n|0)>=(j|0))break;if((n|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32}if((c[r>>2]|0)>2){k=c[p>>2]|0;if(!(c[42184]|0))m=+h[k+(n<<4)+8>>3]*.013888888888888888;else m=+h[20896]-+h[k+(n<<4)+8>>3]*.013888888888888888;h[N>>3]=+h[k+(n<<4)>>3]*.013888888888888888;h[N+8>>3]=m;qL(G,87752,N)|0}else{k=c[t>>2]|0;m=q*+(n|0)*6.283185307179586;o=+h[k+32>>3]*.5*+E(+m);if(!(c[42184]|0))m=+h[k+40>>3]*.5*+F(+m);else m=+h[20896]-+h[k+40>>3]*.5*+F(+m);h[O>>3]=o;h[O+8>>3]=m;qL(G,87752,O)|0}gm(H,G)|0;n=n+1|0}k=c[42215]|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;Dm(s,k,t)|0}}else{ux(y,c[j+12>>2]|0,H);im(H)|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;Lm(s,87661,t)|0}a:do if((c[42182]|0)>0){t=Qm(d,y)|0;j=u;while(1){if(!t)break a;s=t+16|0;k=c[s>>2]|0;do if((a[k+112>>0]|0)!=6?(D=c[k+8>>2]|0,(D|0)!=0):0){r=0;k=D;while(1){if((r|0)>=(c[k+4>>2]|0))break;if((r|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=59;k=c[(c[s>>2]|0)+8>>2]|0}k=c[k>>2]|0;if(c[k+(r*48|0)+8>>2]|0){if(!(c[42184]|0))m=+h[k+(r*48|0)+24>>3];else m=+h[20895]-+h[k+(r*48|0)+24>>3];h[P>>3]=+h[k+(r*48|0)+16>>3];h[P+8>>3]=m;qL(G,87762,P)|0;gm(H,G)|0;i=1;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}if(c[k+(r*48|0)+12>>2]|0){if(!(c[42184]|0))m=+h[k+(r*48|0)+40>>3];else m=+h[20895]-+h[k+(r*48|0)+40>>3];h[R>>3]=+h[k+(r*48|0)+32>>3];h[R+8>>3]=m;qL(G,87775,R)|0;gm(H,G)|0;j=1}p=0;while(1){k=c[(c[s>>2]|0)+8>>2]|0;n=c[k>>2]|0;if((p|0)>=(c[n+(r*48|0)+4>>2]|0))break;if((p|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}else k=n;u=c[k+(r*48|0)>>2]|0;q=+h[u+(p<<4)+8>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[S>>3]=+h[u+(p<<4)>>3];h[S+8>>3]=q;qL(G,87729,S)|0;gm(H,G)|0;p=p+1|0}r=r+1|0}k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){em(H,1)|0;k=c[A>>2]|0}a[k>>0]=0;k=c[H>>2]|0;c[A>>2]=k;Lm(t,87657,k)|0;k=c[s>>2]|0;n=c[k+96>>2]|0;if(n){q=+h[n+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[T>>3]=+h[n+56>>3];h[T+8>>3]=q;qL(G,87729,T)|0;Lm(t,87671,G)|0;k=c[s>>2]|0}n=c[k+108>>2]|0;do if(n){if(!(a[n+81>>0]|0))break;q=+h[n+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[U>>3]=+h[n+56>>3];h[U+8>>3]=q;qL(G,87729,U)|0;Lm(t,87667,G)|0;k=c[s>>2]|0}while(0);n=c[k+100>>2]|0;if(n){q=+h[n+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[V>>3]=+h[n+56>>3];h[V+8>>3]=q;qL(G,87729,V)|0;Lm(t,87674,G)|0;k=c[s>>2]|0}k=c[k+104>>2]|0;if(!k)break;q=+h[k+64>>3];q=(c[42184]|0)==0?q:+h[20895]-q;h[W>>3]=+h[k+56>>3];h[W+8>>3]=q;qL(G,87729,W)|0;Lm(t,87682,G)|0}while(0);t=Sm(d,t)|0}}else j=u;while(0);u=j;y=fo(d,y)|0}vx(d,z,x,w,v);hm(H);if(b[(c[I>>2]|0)+136>>1]&1)oB(d);c[f>>2]=i;c[g>>2]=u;Gv(0);l=Y;return}function ux(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+1056|0;k=n;j=n+32|0;m=b+48|0;if(!(c[m>>2]|0)){e=c[a+16>>2]|0;i=+h[e+16>>3];if(!(c[42184]|0)){g=+h[e+24>>3];f=g+ +h[b+24>>3];g=g+ +h[b+40>>3]}else{g=+h[e+24>>3];f=+h[20895]-+h[b+24>>3]-g;g=+h[20895]-+h[b+40>>3]-g}o=i+ +h[b+32>>3];h[k>>3]=i+ +h[b+16>>3];h[k+8>>3]=f;h[k+16>>3]=o;h[k+24>>3]=g;qL(j,87813,k)|0;gm(d,j)|0}b=b+56|0;e=0;while(1){if((e|0)>=(c[m>>2]|0))break;ux(a,c[(c[b>>2]|0)+(e<<2)>>2]|0,d);e=e+1|0}l=n;return}function vx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+1088|0;o=s+56|0;q=s+48|0;p=s+32|0;j=s;n=s+64|0;r=b+16|0;i=c[r>>2]|0;if(!(c[42184]|0)){k=+h[i+24>>3];m=+h[i+40>>3]}else{m=+h[20895];k=m-+h[i+24>>3];m=m-+h[i+40>>3]}t=+h[i+32>>3];h[j>>3]=+h[i+16>>3];h[j+8>>3]=k;h[j+16>>3]=t;h[j+24>>3]=m;qL(n,87788,j)|0;Dm(b,d,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;if((i|0)!=0?(a[c[i>>2]>>0]|0)!=0:0){t=+h[i+64>>3];t=(c[42184]|0)==0?t:+h[20895]-t;h[p>>3]=+h[i+56>>3];h[p+8>>3]=t;qL(n,87729,p)|0;Dm(b,e,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;t=+h[i+32>>3];h[q>>3]=+h[i+24>>3]*.013888888888888888;qL(n,87808,q)|0;Dm(b,f,n)|0;h[o>>3]=t*.013888888888888888;qL(n,87808,o)|0;Dm(b,g,n)|0;i=1}else i=1;while(1){j=c[r>>2]|0;if((i|0)>(c[j+180>>2]|0))break;vx(c[(c[j+184>>2]|0)+(i<<2)>>2]|0,d,e,f,g);i=i+1|0}l=s;return}function wx(a){a=a|0;var b=0;b=l;l=l+16|0;tx(a,b,b+4|0);l=b;return}function xx(){return Rl(19796,c[4345]|0)|0}function yx(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function zx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if((a|0)<=(e|0))if((a|0)<(e|0))a=-1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return ((b|0)>(d|0)?1:((b|0)<(d|0))<<31>>31)|0}else a=1;return a|0}function Ax(a){a=a|0;Ll(a)|0;return}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];b=Cx(e)|0;if((bb[c[a>>2]&31](a,b,1)|0)!=(b|0))$I(b);l=d;return}function Cx(a){a=a|0;var b=0,d=0,e=0;b=ww(16)|0;e=a;d=c[e+4>>2]|0;a=b+8|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function Dx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[g>>2]=b;c[g+4>>2]=d;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];b=Cx(f)|0;if((bb[c[a>>2]&31](a,b,1)|0)!=(b|0))$I(b);l=e;return}function Ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d;g=b;f=c[g+4>>2]|0;b=e+8|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;b=(bb[c[a>>2]&31](a,e,4)|0)!=0&1;l=d;return b|0}function Fx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f+8>>2]=b;c[f+12>>2]=d;d=(bb[c[a>>2]&31](a,f,4)|0)!=0&1;l=e;return d|0}function Gx(a){a=a|0;return Tl(a)|0}function Hx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=ww((Tl(a)|0)<<3)|0;b=d;a=Pl(a)|0;while(1){if(!a)break;g=a+8|0;f=c[g+4>>2]|0;e=b;c[e>>2]=c[g>>2];c[e+4>>2]=f;b=b+8|0;a=c[a>>2]|0}return d|0}function Ix(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+160|0;q=t+144|0;d=t+48|0;j=t+128|0;k=t+112|0;m=t+96|0;n=t+80|0;o=t+32|0;p=t+16|0;r=t;s=a+16|0;a=c[s>>2]|0;e=+h[a+16>>3];f=+h[a+24>>3];g=+h[a+32>>3];i=+h[a+40>>3];if((b+-1|0)>>>0<2){Jx(j,e,i);c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];Kx(d,q);p=d+16|0;Jx(k,g,f);c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];Kx(m,q);c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2]}else{Jx(n,e,f);c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];Kx(d,q);n=d+16|0;Jx(o,g,i);c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];Kx(p,q);c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2]}a=(c[s>>2]|0)+16|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];a=c[(c[s>>2]|0)+12>>2]|0;if(!a)a=1;else{a=a+56|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];Kx(r,q);c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];a=1}while(1){d=c[s>>2]|0;if((a|0)>(c[d+180>>2]|0))break;Ix(c[(c[d+184>>2]|0)+(a<<2)>>2]|0,b);a=a+1|0}l=t;return}function Jx(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Kx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;g=d+16|0;e=d;f=(c[42310]|0)*90|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];bw(e,g,f);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];h[b>>3]=+h[b>>3]-+h[20897];e=b+8|0;h[e>>3]=+h[e>>3]-+h[20898];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Lx(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+1168|0;s=w+144|0;v=w+96|0;u=w+64|0;t=w+48|0;o=w+32|0;p=w+16|0;q=w;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;r=b+16|0;m=c[(c[r>>2]|0)+116>>2]|0;c[42310]=m&3;m=m&1;a[174083]=m;if(!(m<<24>>24))Nx(b);else Mx(b);Ox(b);m=c[r>>2]|0;e=c[m+12>>2]|0;do if(e|0?(a[e+81>>0]|0)==0:0){g=e+24|0;c[t>>2]=c[g>>2];c[t+4>>2]=c[g+4>>2];c[t+8>>2]=c[g+8>>2];c[t+12>>2]=c[g+12>>2];n=+h[t>>3]+16.0;h[t>>3]=n;g=t+8|0;f=+h[g>>3]+8.0;h[g>>3]=f;g=(a[m+275>>0]&1)!=0;if(a[174083]|0){if(g){i=m+32|0;h[i>>3]=+h[i>>3]+f}else{i=m+16|0;h[i>>3]=+h[i>>3]-f}g=m+40|0;f=+h[g>>3];i=m+24|0;j=+h[i>>3];k=f-j;if(!(n>k))break;n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n;break}i=(c[42310]|0)==0;do if(g)if(i){i=m+40|0;h[i>>3]=+h[i>>3]+f;break}else{i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else if(i){i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else{i=m+40|0;h[i>>3]=+h[i>>3]+f;break}while(0);g=m+32|0;f=+h[g>>3];i=m+16|0;j=+h[i>>3];k=f-j;if(n>k){n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n}}while(0);if(d){switch(c[42310]|0){case 0:{q=m+16|0;c[41794]=c[q>>2];c[41795]=c[q+4>>2];c[41796]=c[q+8>>2];c[41797]=c[q+12>>2];break}case 1:{Jx(o,-+h[m+40>>3],+h[m+16>>3]);c[41794]=c[o>>2];c[41795]=c[o+4>>2];c[41796]=c[o+8>>2];c[41797]=c[o+12>>2];break}case 2:{Jx(p,+h[m+16>>3],-+h[m+40>>3]);c[41794]=c[p>>2];c[41795]=c[p+4>>2];c[41796]=c[p+8>>2];c[41797]=c[p+12>>2];break}case 3:{Jx(q,+h[m+24>>3],+h[m+16>>3]);c[41794]=c[q>>2];c[41795]=c[q+4>>2];c[41796]=c[q+8>>2];c[41797]=c[q+12>>2];break}default:{}}Px(b);e=c[(c[r>>2]|0)+12>>2]|0}if(e|0?(a[e+81>>0]|0)==0:0){c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];Qx(b,s)}if(!0){l=w;return}if(!(a[174083]|0)){n=+h[20898];k=+h[20897];h[v>>3]=n;h[v+8>>3]=k;h[v+16>>3]=n;h[v+24>>3]=k;h[v+32>>3]=-k;h[v+40>>3]=-n;qL(s,88049,v)|0}else{k=+h[20897];n=+h[20898];h[u>>3]=k;h[u+8>>3]=n;h[u+16>>3]=k;h[u+24>>3]=n;qL(s,87834,u)|0}HL(s)|0;Ta()}function Mx(b){b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=b+16|0;if(((to(b)|0)!=(b|0)?(g=c[j>>2]|0,i=c[g+12>>2]|0,(i|0)!=0):0)?(a[i+81>>0]|0)==0:0){d=a[g+275>>0]|0;if(!(d&1)){f=+h[g+16>>3]+ +h[g+96>>3]*.5;b=g+104|0}else{f=+h[g+32>>3]-+h[g+64>>3]*.5;b=g+72|0}e=+h[b>>3];b=d<<24>>24;do if(!(b&4))if(!(b&2)){e=(+h[g+40>>3]+ +h[g+24>>3])*.5;break}else{e=+h[g+40>>3]-e*.5;break}else e=+h[g+24>>3]+e*.5;while(0);h[i+56>>3]=f;h[i+64>>3]=e;a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[j>>2]|0;if((b|0)>(c[d+180>>2]|0))break;Mx(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function Nx(b){b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0;k=b+16|0;if(((to(b)|0)!=(b|0)?(i=c[k>>2]|0,j=c[i+12>>2]|0,(j|0)!=0):0)?(a[j+81>>0]|0)==0:0){d=a[i+275>>0]|0;if(!(d&1)){g=+h[i+24>>3]+ +h[i+56>>3]*.5;b=i+48|0}else{g=+h[i+40>>3]-+h[i+88>>3]*.5;b=i+80|0}f=+h[b>>3];b=d<<24>>24;do if(!(b&4)){e=+h[i+16>>3];if(!(b&2)){e=(+h[i+32>>3]+e)*.5;break}else{e=e+f*.5;break}}else e=+h[i+32>>3]-f*.5;while(0);h[j+56>>3]=e;h[j+64>>3]=g;a[(c[(c[k>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[k>>2]|0;if((b|0)>(c[d+180>>2]|0))break;Nx(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function Ox(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=l;l=l+544|0;L=S+504|0;R=S+416|0;Q=S+376|0;K=S+352|0;J=S+312|0;I=S+288|0;H=S+248|0;M=S+200|0;B=S+152|0;O=S+96|0;p=S+488|0;C=S+456|0;D=S+424|0;E=S+384|0;F=S+360|0;G=S+320|0;w=S+296|0;x=S+256|0;y=S+232|0;z=S+168|0;A=S+136|0;f=S+56|0;N=S+16|0;P=S;o=e+16|0;u=c[o>>2]|0;g=b[u+136>>1]&14;u=d[u+113>>0]|0;if(!((u&54|0)==0?(u&1|0)==0|(c[42183]|0)!=0:0)){u=g<<16>>16==0;n=eo(e)|0;h=0;j=0;i=0;while(1){if(!n)break;g=c[(c[n+16>>2]|0)+108>>2]|0;do if(g)if(!(a[g+81>>0]|0)){i=i+1|0;break}else{h=h+1|0;break}while(0);m=Qm(e,n)|0;g=j;while(1){if(!m)break;k=c[m+16>>2]|0;j=c[k+108>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+100>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+104>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+96>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);m=Sm(e,m)|0}n=fo(e,n)|0;j=g}if(!(a[(c[o>>2]|0)+113>>0]&8))o=0;else o=Sx(e)|0;t=j+i|0;if(t|0){q=h+j+o+(nn(e)|0)|0;r=ww(q*40|0)|0;s=ww(t*40|0)|0;Jx(M,2147483647.0,2147483647.0);g=M+16|0;Jx(p,-2147483647.0,-2147483647.0);c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];g=s;i=r;n=eo(e)|0;while(1){if(!n)break;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Tx(C,n,i,L);c[M>>2]=c[C>>2];c[M+4>>2]=c[C+4>>2];c[M+8>>2]=c[C+8>>2];c[M+12>>2]=c[C+12>>2];c[M+16>>2]=c[C+16>>2];c[M+20>>2]=c[C+20>>2];c[M+24>>2]=c[C+24>>2];c[M+28>>2]=c[C+28>>2];h=c[(c[n+16>>2]|0)+108>>2]|0;do if(h)if(!(a[h+81>>0]|0)){c[L>>2]=c[B>>2];c[L+4>>2]=c[B+4>>2];c[L+8>>2]=c[B+8>>2];c[L+12>>2]=c[B+12>>2];Vx(h,i,g,0,L);g=g+40|0;break}else{i=i+40|0;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(D,h,i,L);c[M>>2]=c[D>>2];c[M+4>>2]=c[D+4>>2];c[M+8>>2]=c[D+8>>2];c[M+12>>2]=c[D+12>>2];c[M+16>>2]=c[D+16>>2];c[M+20>>2]=c[D+20>>2];c[M+24>>2]=c[D+24>>2];c[M+28>>2]=c[D+28>>2];break}while(0);m=Qm(e,n)|0;i=i+40|0;while(1){if(!m)break;k=m+16|0;h=c[k>>2]|0;j=c[h+96>>2]|0;a:do if(!j)v=52;else{do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){aA(F,e,m);c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[H>>2]=c[j>>2];$l(0,88861,H)|0;break a}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(E,j,i,L);c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[M+8>>2]=c[E+8>>2];c[M+12>>2]=c[E+12>>2];c[M+16>>2]=c[E+16>>2];c[M+20>>2]=c[E+20>>2];c[M+24>>2]=c[E+24>>2];c[M+28>>2]=c[E+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0;v=52}while(0);b:do if((v|0)==52){v=0;j=c[h+104>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){Wx(w,m);c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];c[L+8>>2]=c[w+8>>2];c[L+12>>2]=c[w+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[I>>2]=c[j>>2];$l(0,88896,I)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(G,j,i,L);c[M>>2]=c[G>>2];c[M+4>>2]=c[G+4>>2];c[M+8>>2]=c[G+8>>2];c[M+12>>2]=c[G+12>>2];c[M+16>>2]=c[G+16>>2];c[M+20>>2]=c[G+20>>2];c[M+24>>2]=c[G+24>>2];c[M+28>>2]=c[G+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+100>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){Xx(y,m);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];c[L+8>>2]=c[y+8>>2];c[L+12>>2]=c[y+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[J>>2]=c[j>>2];$l(0,88936,J)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(x,j,i,L);c[M>>2]=c[x>>2];c[M+4>>2]=c[x+4>>2];c[M+8>>2]=c[x+8>>2];c[M+12>>2]=c[x+12>>2];c[M+16>>2]=c[x+16>>2];c[M+20>>2]=c[x+20>>2];c[M+24>>2]=c[x+24>>2];c[M+28>>2]=c[x+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+108>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){aA(A,e,m);c[L>>2]=c[A>>2];c[L+4>>2]=c[A+4>>2];c[L+8>>2]=c[A+8>>2];c[L+12>>2]=c[A+12>>2];Vx(j,i,g,1,L);g=g+40|0;break}c[K>>2]=c[j>>2];$l(0,88976,K)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];Ux(z,j,i,L);c[M>>2]=c[z>>2];c[M+4>>2]=c[z+4>>2];c[M+8>>2]=c[z+8>>2];c[M+12>>2]=c[z+12>>2];c[M+16>>2]=c[z+16>>2];c[M+20>>2]=c[z+20>>2];c[M+24>>2]=c[z+24>>2];c[M+28>>2]=c[z+28>>2]}while(0);i=i+40|0}}while(0);m=Sm(e,m)|0}n=fo(e,n)|0}if(o|0){c[f>>2]=c[M>>2];c[f+4>>2]=c[M+4>>2];c[f+8>>2]=c[M+8>>2];c[f+12>>2]=c[M+12>>2];c[f+16>>2]=c[M+16>>2];c[f+20>>2]=c[M+20>>2];c[f+24>>2]=c[M+24>>2];c[f+28>>2]=c[M+28>>2];c[f+32>>2]=i;h=L;g=h+40|0;do{c[h>>2]=c[f>>2];h=h+4|0;f=f+4|0}while((h|0)<(g|0));Yx(N,e,L);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];c[M+16>>2]=c[N+16>>2];c[M+20>>2]=c[N+20>>2];c[M+24>>2]=c[N+24>>2];c[M+28>>2]=c[N+28>>2]}a[O+32>>0]=IA(e,zm(e,0,89012,0)|0,1)|0;c[O>>2]=c[M>>2];c[O+4>>2]=c[M+4>>2];c[O+8>>2]=c[M+8>>2];c[O+12>>2]=c[M+12>>2];c[O+16>>2]=c[M+16>>2];c[O+20>>2]=c[M+20>>2];c[O+24>>2]=c[M+24>>2];c[O+28>>2]=c[M+28>>2];AE(r,q,s,t,O)|0;if(0)Zx(r,q,s,t,O);f=0;g=0;h=s;while(1){if((g|0)>=(t|0))break;if(a[h+36>>0]|0){O=c[h+32>>2]|0;a[O+81>>0]=1;N=O+56|0;_x(P,h);c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];c[N+12>>2]=c[P+12>>2];cB(e,O);f=f+1|0}g=g+1|0;h=h+40|0}if(!0){if((f|0)!=(t|0)){c[R>>2]=f;c[R+4>>2]=t;$l(0,89057,R)|0}}else{R=c[13918]|0;c[Q>>2]=f;c[Q+4>>2]=t;AL(R,89024,Q)|0}$I(r);$I(s)}}l=S;return}function Px(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;i=l;l=l+48|0;e=i+32|0;f=i+16|0;g=i;if(+h[20897]!=0.0|+h[20898]!=0.0|(c[42310]|0)!=0){d=eo(a)|0;while(1){if(!d)break;if(c[42310]|0)LB(d,0);b=d+16|0;j=(c[b>>2]|0)+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];Kx(f,e);c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];b=c[(c[b>>2]|0)+108>>2]|0;if(b|0){j=b+56|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];Kx(g,e);c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2]}a:do if((c[42182]|0)==1){b=Qm(a,d)|0;while(1){if(!b)break a;Rx(b);b=Sm(a,b)|0}}while(0);d=fo(a,d)|0}Ix(a,c[(c[a+16>>2]|0)+116>>2]&3)}l=i;return}function Qx(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0;i=b+16|0;j=c[i>>2]|0;g=a[j+275>>0]|0;b=g<<24>>24;do if(!(b&4)){e=+h[j+16>>3];if(!(b&2)){f=(+h[j+32>>3]+e)*.5;break}else{f=+h[d>>3]*.5+e;break}}else f=+h[j+32>>3]-+h[d>>3]*.5;while(0);if(!(g&1))e=+h[d+8>>3]*.5+ +h[j+24>>3];else e=+h[j+40>>3]-+h[d+8>>3]*.5;j=c[j+12>>2]|0;h[j+56>>3]=f;h[j+64>>3]=e;a[(c[(c[i>>2]|0)+12>>2]|0)+81>>0]=1;return}function Rx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+144|0;q=s+120|0;e=s+16|0;i=s+104|0;j=s+88|0;k=s+72|0;m=s+56|0;n=s+40|0;o=s+24|0;r=s;p=b+16|0;d=c[p>>2]|0;f=c[d+8>>2]|0;if(!f){if((a[174080]|0)==0?(a[d+112>>0]|0)!=6:0){q=En(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;r=En(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[e>>2]=q;c[e+4>>2]=r;$l(1,88844,e)|0}}else{h=0;b=f;while(1){if((h|0)>=(c[b+4>>2]|0))break;g=c[b>>2]|0;b=c[g+(h*48|0)>>2]|0;e=c[g+(h*48|0)+4>>2]|0;f=c[g+(h*48|0)+8>>2]|0;g=c[g+(h*48|0)+12>>2]|0;d=0;while(1){if((d|0)>=(e|0))break;t=b+(d<<4)|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(i,q);c[t>>2]=c[i>>2];c[t+4>>2]=c[i+4>>2];c[t+8>>2]=c[i+8>>2];c[t+12>>2]=c[i+12>>2];d=d+1|0}if(f|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+16|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(j,q);c[t>>2]=c[j>>2];c[t+4>>2]=c[j+4>>2];c[t+8>>2]=c[j+8>>2];c[t+12>>2]=c[j+12>>2]}if(g|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+32|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(k,q);c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2]}d=c[p>>2]|0;h=h+1|0;b=c[d+8>>2]|0}b=c[d+96>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];Kx(m,q);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];d=c[p>>2]|0}b=c[d+108>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];Kx(n,q);c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];d=c[p>>2]|0}b=c[d+100>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];Kx(o,q);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];d=c[p>>2]|0}d=c[d+104>>2]|0;if(d|0){t=d+56|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];Kx(r,q);c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2]}}l=s;return}function Sx(b){b=b|0;var d=0,e=0,f=0;f=b+16|0;if((to(b)|0)!=(b|0)?(d=c[(c[f>>2]|0)+12>>2]|0,(d|0)!=0):0){e=1;b=(a[d+81>>0]|0)!=0&1}else{e=1;b=0}while(1){d=c[f>>2]|0;if((e|0)>(c[d+180>>2]|0))break;d=(Sx(c[(c[d+184>>2]|0)+(e<<2)>>2]|0)|0)+b|0;e=e+1|0;b=d}return b|0}function Tx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[174083]|0)==0;d=d+16|0;m=c[d>>2]|0;k=+h[(n?m+32|0:m+40|0)>>3];h[e+16>>3]=k*72.0;j=+h[(n?m+40|0:m+32|0)>>3];h[e+24>>3]=j*72.0;d=(c[d>>2]|0)+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*36.0;d=e+8|0;h[d>>3]=+h[d>>3]-j*36.0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];$x(b,e,i);l=g;return}function Ux(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[174083]|0)==0;m=d+24|0;k=+h[(n?m:d+32|0)>>3];h[e+16>>3]=k;j=+h[(n?d+32|0:m)>>3];h[e+24>>3]=j;d=d+56|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*.5;d=e+8|0;h[d>>3]=+h[d>>3]-j*.5;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];$x(b,e,i);l=g;return}function Vx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(f|0){f=d+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2]}if(!(a[174083]|0)){g=b+24|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2]}else{h[e>>3]=+h[b+32>>3];h[e+8>>3]=+h[b+24>>3]}c[e+32>>2]=b;a[e+36>>0]=0;c[d+32>>2]=e;return}function Wx(a,b){a=a|0;b=b|0;b=$z(b)|0;do if(b){b=c[b>>2]|0;if(!(c[b+8>>2]|0)){b=c[b>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{b=b+16|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function Xx(a,b){a=a|0;b=b|0;var d=0;b=$z(b)|0;do if(b){d=c[b>>2]|0;b=(c[b+4>>2]|0)+-1|0;if(!(c[d+(b*48|0)+12>>2]|0)){d=(c[d+(b*48|0)>>2]|0)+((c[d+(b*48|0)+4>>2]|0)+-1<<4)|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}else{d=d+(b*48|0)+32|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function Yx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+112|0;k=q+72|0;n=q+32|0;o=q;p=d+16|0;j=1;while(1){f=c[p>>2]|0;if((j|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(j<<2)>>2]|0;g=k;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));Yx(n,f,k);g=e;h=n;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));j=j+1|0}if(((to(d)|0)!=(d|0)?(m=c[(c[p>>2]|0)+12>>2]|0,m|0):0)?a[m+81>>0]|0:0){p=e+32|0;n=c[p>>2]|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];Ux(o,m,n,k);c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];c[e+20>>2]=c[o+20>>2];c[e+24>>2]=c[o+24>>2];c[e+28>>2]=c[o+28>>2];c[p>>2]=(c[p>>2]|0)+40}g=b;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=q;return}function Zx(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+160|0;r=s+96|0;p=s+48|0;o=s;q=c[13918]|0;n=d[g+32>>0]|0;i=+h[g>>3];j=+h[g+8>>3];k=+h[g+16>>3];m=+h[g+24>>3];c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=n;h[o+16>>3]=i;h[o+24>>3]=j;h[o+32>>3]=k;h[o+40>>3]=m;AL(q,89099,o)|0;a:do if(0>=2){YL(89159,8,1,q)|0;o=0;while(1){if((o|0)>=(b|0))break;g=c[a+32>>2]|0;i=+h[a>>3];j=+h[a+8>>3];k=+h[a+16>>3];m=+h[a+24>>3];if(!g)n=174185;else n=c[c[g+32>>2]>>2]|0;c[p>>2]=o;h[p+8>>3]=i;h[p+16>>3]=j;h[p+24>>3]=k;h[p+32>>3]=m;c[p+40>>2]=g;c[p+44>>2]=n;AL(q,89168,p)|0;o=o+1|0;a=a+40|0}YL(89211,8,1,q)|0;g=0;while(1){if((g|0)>=(f|0))break a;b=d[e+36>>0]|0;i=+h[e+16>>3];j=+h[e+24>>3];k=+h[e>>3];m=+h[e+8>>3];p=c[c[e+32>>2]>>2]|0;c[r>>2]=g;c[r+4>>2]=e;c[r+8>>2]=b;h[r+16>>3]=i;h[r+24>>3]=j;h[r+32>>3]=k;h[r+40>>3]=m;c[r+48>>2]=p;AL(q,89220,r)|0;e=e+40|0;g=g+1|0}}while(0);l=s;return}function _x(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b+8>>3]*.5+ +h[b+24>>3];h[a>>3]=+h[b>>3]*.5+ +h[b+16>>3];h[a+8>>3]=c;return}function $x(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0;e=l;l=l+16|0;f=e;j=+h[b>>3];h[d>>3]=+h[(+h[d>>3]<j?d:b)>>3];g=d+8|0;i=+h[b+8>>3];h[g>>3]=+h[(+h[g>>3]<i?d:b)+8>>3];j=+h[b+16>>3]+j;h[f>>3]=j;i=+h[b+24>>3]+i;h[f+8>>3]=i;g=d+16|0;h[g>>3]=+h[(+h[g>>3]>j?g:f)>>3];b=d+24|0;h[b>>3]=+h[(+h[b>>3]>i?g:f)+8>>3];c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];l=e;return}function ay(a){a=a|0;Lx(a,1);return}function by(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e;b=SA(Jm(a,90560)|0)|0;if(b){b=cy(b)|0;if(b|0){f=c[b+40>>2]|0;d=c[b+44>>2]|0;g=a+16|0;a=c[g>>2]|0;h[a+32>>3]=+(f|0)*.013888888888888888;h[a+40>>3]=+(d|0)*.013888888888888888;a=ww(12)|0;c[(c[g>>2]|0)+12>>2]=a;c[a>>2]=c[b+12>>2];c[a+4>>2]=((f|0)/-2|0)-(c[b+32>>2]|0);c[a+8>>2]=((d|0)/-2|0)-(c[b+36>>2]|0)}}else{c[d>>2]=En(a)|0;$l(0,89268,d)|0}l=e;return}function cy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+1152|0;i=p+24|0;h=p+8|0;e=p;f=p+120|0;j=p+44|0;k=p+40|0;m=p+36|0;n=p+32|0;o=p+28|0;d=c[42311]|0;if(!d){d=Rl(19832,c[4345]|0)|0;c[42311]=d}d=bb[c[d>>2]&31](d,b,512)|0;do if(!d){g=bM(b,123632)|0;if(!g){c[e>>2]=b;$l(0,89317,e)|0;d=0;break}else{d=0;e=0}while(1){if(!(hL(f,1024,g)|0)){f=11;break}c[h>>2]=k;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=o;q=(dM(f,89345,h)|0)==4;e=q?1:e;if((a[f>>0]|0)!=37){q=(iL(f,89374)|0)==0;d=q?d:1}if((e|0)!=0&(d|0)!=0){f=12;break}}if((f|0)==11)if(!e){c[i>>2]=b;$l(0,89379,i)|0;d=0}else f=12;if((f|0)==12){q=xw(64)|0;k=c[k>>2]|0;c[q+32>>2]=k;m=c[m>>2]|0;c[q+40>>2]=(c[n>>2]|0)-k;c[q+36>>2]=(c[o>>2]|0)-m;c[q+8>>2]=b;o=c[42312]|0;c[42312]=o+1;c[q+12>>2]=o;$L(AN(g)|0,j)|0;o=c[j+36>>2]|0;n=xw(o+1|0)|0;c[q+52>>2]=n;pM(g,0,0)|0;xN(n,o,1,g)|0;a[n+o>>0]=0;o=c[42311]|0;bb[c[o>>2]&31](o,q,1)|0;a[q+16>>0]=d;d=q}ML(g)|0}while(0);l=p;return d|0}function dy(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b+52>>2]|0);return}function ey(a){a=a|0;$I(c[(c[a+16>>2]|0)+12>>2]|0);return}function fy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+8|0;k=n;j=(d|0)!=0;a:do if(j){h=0;f=0;b:while(1)while(1){if(h)break a;g=c[d+(f<<2)>>2]|0;if(!g){i=6;break a}f=f+1|0;if(!(a[g>>0]|0)){h=1;continue b}}}else i=6;while(0);c:do if((i|0)==6)while(1){f=c[e>>2]|0;if(!f)break c;nr(b,f)|0;nr(b,134901)|0;e=e+4|0;i=6}while(0);d:do if(j){h=0;while(1){f=c[d+(h<<2)>>2]|0;if(!f)break d;do if(a[f>>0]|0){e=SA(f)|0;if(!e){c[k>>2]=f;$l(0,89418,k)|0;break}g=bM(e,123632)|0;if(!g){c[m>>2]=e;$l(0,89446,m)|0;break}while(1){f=RA(g)|0;if(!f)break;nr(b,f)|0}nr(b,134901)|0;ML(g)|0}while(0);h=h+1|0}}while(0);l=n;return}function gy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;d=c[d+52>>2]|0;a:while(1){e=a[d>>0]|0;b:do switch(e<<24>>24){case 0:break a;case 37:{if((a[d+1>>0]|0)==37){e=d+2|0;if((((qK(e,89474,3)|0)!=0?(qK(e,89478,5)|0)!=0:0)?(qK(e,89484,3)|0)!=0:0)?(qK(e,89488,7)|0)!=0:0){e=37;break b}else g=37;c:while(1){switch(g<<24>>24){case 13:{f=10;break c}case 10:case 0:{f=12;break c}default:{}}g=d+1|0;d=g;g=a[g>>0]|0}if((f|0)==10){e=d+1|0;if((a[e>>0]|0)==10){d=d+2|0;continue a}}else if((f|0)==12)e=d+1|0;d=g<<24>>24==0?d:e;continue a}else e=37;break}default:{}}while(0);d:while(1){switch(e<<24>>24){case 10:case 13:case 0:break d;default:{}}or(b,e<<24>>24)|0;g=d+1|0;d=g;e=a[g>>0]|0}f=d+1|0;if(e<<24>>24==13?(a[f>>0]|0)==10:0)d=d+2|0;else d=e<<24>>24==0?d:f;or(b,10)|0}return}function hy(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;d=c[42311]|0;a:do if(d|0){d=bb[c[d>>2]&31](d,0,128)|0;while(1){if(!d)break a;if(!(a[d+16>>0]|0)){c[e>>2]=c[d+12>>2];tr(b,89496,e);nr(b,89514)|0;gy(b,d);nr(b,89532)|0;nr(b,89547)|0}g=c[42311]|0;d=bb[c[g>>2]&31](g,d,8)|0}}while(0);l=f;return}function iy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;a:do switch(d|0){case 0:{f=b;break}case 1:{f=AB(b)|0;break}default:{switch(jy(b)|0){case 2:break;case 1:{f=AB(b)|0;break a}default:{f=b;break a}}if(!(c[42313]|0)){$l(0,89559,e)|0;c[42313]=1;f=b}else f=b}}while(0);if(!(c[42314]|0))dm(169256,0,0);d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}c[42315]=d+1;a[d>>0]=40;e=f;b:while(1){switch(a[e>>0]|0){case 0:break b;case 92:case 41:case 40:{d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}c[42315]=d+1;a[d>>0]=92;break}default:{}}d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}h=a[e>>0]|0;c[42315]=d+1;a[d>>0]=h;e=e+1|0}d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}c[42315]=d+1;a[d>>0]=41;if((f|0)!=(b|0))$I(f);d=c[42315]|0;if(d>>>0>=(c[42316]|0)>>>0){em(169256,1)|0;d=c[42315]|0}a[d>>0]=0;h=c[42314]|0;c[42315]=h;l=g;return h|0}function jy(b){b=b|0;var c=0,d=0;c=0;a:while(1){while(1){d=a[b>>0]|0;if(!(d<<24>>24))break a;if((d&255)<127)b=b+1|0;else break}if((d&-4)<<24>>24==-64){c=1;b=b+2|0}else{c=2;break}}return c|0}function ky(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+96|0;i=n+80|0;j=n+72|0;m=n+64|0;g=n+32|0;k=n;h[g>>3]=+h[a>>3];h[g+8>>3]=+h[a+8>>3];h[g+16>>3]=+h[b>>3];h[g+24>>3]=+h[b+8>>3];do if((EI(d,g,j)|0)>=0){if(!f){b=d+4|0;a=c[b>>2]|0;f=c[42319]|0;if((a|0)>(c[42318]|0)){if(!f)a=xw(a<<5)|0;else a=zw(f,a<<5)|0;c[42319]=a;g=c[b>>2]|0;c[42318]=g;f=a}else g=a;b=c[d>>2]|0;a=0;while(1){if((a|0)>=(g|0))break;o=f+(a<<5)|0;d=b+(a<<4)|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];o=f+(a<<5)+16|0;d=a+1|0;p=b+(((d|0)%(g|0)|0)<<4)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];a=d}c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];if((iI(f,g,i,k,m)|0)<0){a=0;break}}else{c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];ZI(i,m)}a=m+4|0;if(!(ly(c[a>>2]|0)|0)){g=c[a>>2]|0;a=c[42320]|0;f=c[m>>2]|0;b=0;while(1){if((b|0)>=(g|0))break;p=a+(b<<4)|0;o=f+(b<<4)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];b=b+1|0}c[e>>2]=g}else a=0}else a=0;while(0);l=n;return a|0}function ly(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[42321]|0;do if((b|0)<(a|0)){a=a+300-((a|0)%300|0)+b|0;b=zw(c[42320]|0,a<<4)|0;c[42320]=b;if(!b){$l(1,89649,d)|0;a=1;break}else{c[42321]=a;a=0;break}}else a=0;while(0);l=e;return a|0}function my(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;d=c[42322]|0;c[42322]=d+1;do if((d|0)<=0){d=xw(4800)|0;c[42320]=d;if(!d){$l(1,89672,a)|0;a=1;break}c[42321]=300;c[42323]=0;c[42324]=0;if(0){yA();a=0}else a=0}else a=0;while(0);l=b;return a|0}function ny(){var a=0,b=0,d=0,e=0.0,f=0,g=0;b=l;l=l+16|0;a=b;d=c[42322]|0;c[42322]=d+-1;if((d|0)<=1?($I(c[42320]|0),0):0){d=c[13918]|0;g=c[42323]|0;f=c[42324]|0;e=+zA();c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;AL(d,89710,a)|0}l=b;return}function oy(a,b){a=a|0;b=b|0;return py(a,b,0)|0}function py(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;L=l;l=l+176|0;G=L+168|0;K=L+128|0;x=L+120|0;v=L+112|0;i=L+104|0;s=L+88|0;n=L+72|0;g=L+64|0;t=L+160|0;I=L+152|0;y=L+144|0;u=L+32|0;w=L;J=L+136|0;c[42323]=(c[42323]|0)+1;H=c[b+80>>2]|0;c[42324]=(c[42324]|0)+H;f=b+88|0;while(1){C=c[f>>2]|0;if(!C){D=4;break}f=c[C+16>>2]|0;if(!(a[f+112>>0]|0)){D=5;break}else f=f+116|0}do if((D|0)==4){$l(1,89753,g)|0;f=0}else if((D|0)==5){B=c[b+84>>2]|0;if(!(qy(H,B,b)|0)){g=H<<3;if((g|0)>(c[42325]|0)){f=c[42326]|0;if(!f)f=xw(H<<7)|0;else f=zw(f,H<<7)|0;c[42326]=f;c[42325]=g}a:do if((H|0)>1?+h[B+8>>3]>+h[B+40>>3]:0){f=0;while(1){if((f|0)==(H|0)){p=1;break a}z=B+(f<<5)+24|0;m=+h[z>>3];A=B+(f<<5)+8|0;h[z>>3]=-+h[A>>3];h[A>>3]=-m;f=f+1|0}}else p=0;while(0);r=c[C>>2]&3;z=C+48|0;f=c[((r|0)==3?C:z)+40>>2]|0;A=C+-48|0;if((f|0)==(c[((r|0)==2?C:A)+40>>2]|0)){c[i>>2]=En(f)|0;$l(1,89860,i)|0;f=0;break}o=H+-1|0;q=c[42326]|0;r=q;f=0;j=0;b:while(1){if((j|0)>=(H|0)){j=o;n=f;break}if((j|0)>0)g=+h[B+(j<<5)+8>>3]>+h[B+(j+-1<<5)+8>>3]?-1:1;else g=0;if((j|0)<(o|0))i=+h[B+(j+1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else i=0;c:do if((g|0)!=(i|0))if((g|0)==1|(i|0)==-1){g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29;break}else{g=B+(j<<5)+16|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+24|0;D=29;break}else{switch(g|0){case -1:break c;case 0:break;default:{D=28;break b}}g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29}while(0);if((D|0)==29){D=0;h[q+(i<<4)+8>>3]=+h[g>>3];f=f+2|0}j=j+1|0}if((D|0)==28){c[n>>2]=g;c[n+4>>2]=g;c[n+8>>2]=480;$l(1,89795,n)|0;f=0;break}d:while(1){if((j|0)<=-1)break;if((j|0)<(o|0))f=+h[B+(j<<5)+8>>3]>+h[B+(j+1<<5)+8>>3]?-1:1;else f=0;if((j|0)>0)g=+h[B+(j+-1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else g=0;e:do if((f|0)!=(g|0))if((f|0)==1|(g|0)==-1){f=B+(j<<5)|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+8|0;i=2;break}else{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break}else switch(f|0){case 0:{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break e}case -1:{N=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[N>>3];f=B+(j<<5)+8|0;i=n+1|0;h[q+(n<<4)+8>>3]=+h[f>>3];h[q+(i<<4)>>3]=+h[N>>3];N=B+(j<<5)+24|0;M=n+2|0;h[q+(i<<4)+8>>3]=+h[N>>3];i=B+(j<<5)|0;h[q+(M<<4)>>3]=+h[i>>3];g=n+3|0;h[q+(M<<4)+8>>3]=+h[N>>3];h[q+(g<<4)>>3]=+h[i>>3];i=4;break e}default:{D=42;break d}}while(0);h[q+(g<<4)+8>>3]=+h[f>>3];j=j+-1|0;n=n+i|0}if((D|0)==42){c[s>>2]=f;c[s+4>>2]=f;c[s+8>>2]=513;$l(1,89795,s)|0;f=0;break}f:do if(!p)f=0;else{f=0;while(1){if((f|0)>=(H|0)){f=0;break}M=B+(f<<5)+24|0;m=+h[M>>3];N=B+(f<<5)+8|0;h[M>>3]=-+h[N>>3];h[N>>3]=-m;f=f+1|0}while(1){if((f|0)>=(n|0)){f=0;break f}N=q+(f<<4)+8|0;h[N>>3]=-+h[N>>3];f=f+1|0}}while(0);while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}c[t>>2]=r;i=t+4|0;c[i>>2]=n;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[b+8>>3];h[u+16>>3]=+h[b+40>>3];h[u+24>>3]=+h[b+48>>3];if((EI(t,u,I)|0)<0){$l(1,89899,v)|0;f=0;break}if(!e){g=c[i>>2]|0;f=c[42319]|0;if((g|0)>(c[42318]|0)){if(!f)f=xw(g<<5)|0;else f=zw(f,g<<5)|0;c[42319]=f;g=c[i>>2]|0;c[42318]=g}j=c[42326]|0;i=0;while(1){if((i|0)>=(g|0))break;M=f+(i<<5)|0;N=j+(i<<4)|0;c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];M=f+(i<<5)+16|0;N=i+1|0;v=j+(((N|0)%(g|0)|0)<<4)|0;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[M+8>>2]=c[v+8>>2];c[M+12>>2]=c[v+12>>2];i=N}if(!(a[b+29>>0]|0)){k=0.0;m=0.0}else{m=+h[b+16>>3];k=+E(+m);m=+F(+m)}h[w+8>>3]=m;h[w>>3]=k;if(!(a[b+69>>0]|0)){k=0.0;m=0.0}else{m=+h[b+56>>3];k=-+E(+m);m=-+F(+m)}h[w+24>>3]=m;h[w+16>>3]=k;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];if((iI(f,g,G,w,y)|0)<0){$l(1,89938,x)|0;f=0;break}}else{c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];ZI(G,y)}n=y+4|0;if(!(ly(c[n>>2]|0)|0)){f=0;while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}i=c[n>>2]|0;j=c[42320]|0;g=c[y>>2]|0;f=0;while(1){if((f|0)>=(i|0)){i=1;f=10;g=0;break}N=j+(f<<4)|0;M=g+(f<<4)|0;c[N>>2]=c[M>>2];c[N+4>>2]=c[M+4>>2];c[N+8>>2]=c[M+8>>2];c[N+12>>2]=c[M+12>>2];f=f+1|0}while(1){if(!((g|0)<15&i<<24>>24!=0))break;ry(B,H,c[42320]|0,c[n>>2]|0,f);j=0;while(1){if((j|0)>=(H|0))break;if(+h[B+(j<<5)>>3]==2147483647.0){D=82;break}if(+h[B+(j<<5)+16>>3]==-2147483648.0){D=82;break}j=j+1|0}if((D|0)==82){D=0;N=f<<1;f=N;g=(N|0)>(2147483647/(H|0)|0|0)?15:g}i=(j|0)==(H|0)?0:i;g=g+1|0}if(i<<24>>24){M=En(c[((c[C>>2]&3|0)==3?C:z)+40>>2]|0)|0;N=En(c[((c[C>>2]&3|0)==2?C:A)+40>>2]|0)|0;c[K>>2]=M;c[K+4>>2]=N;$l(0,89976,K)|0;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];ZI(G,J);ry(B,H,c[J>>2]|0,c[J+4>>2]|0,10);$I(c[J>>2]|0)}c[d>>2]=c[n>>2];f=c[42320]|0}else f=0}else f=0}while(0);l=L;return f|0}function qy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0;R=l;l=l+32|0;I=R+16|0;H=R+8|0;k=R;e=0;j=0;while(1){if((j|0)>=(a|0))break;i=b+(j<<5)|0;s=+h[b+(j<<5)+8>>3]-+h[b+(j<<5)+24>>3];if(!((s>=0.0?s:-s)<.01)?(s=+h[i>>3]-+h[b+(j<<5)+16>>3],!((s>=0.0?s:-s)<.01)):0){if((e|0)!=(j|0)){P=b+(e<<5)|0;c[P>>2]=c[i>>2];c[P+4>>2]=c[i+4>>2];c[P+8>>2]=c[i+8>>2];c[P+12>>2]=c[i+12>>2];c[P+16>>2]=c[i+16>>2];c[P+20>>2]=c[i+20>>2];c[P+24>>2]=c[i+24>>2];c[P+28>>2]=c[i+28>>2]}e=e+1|0}j=j+1|0}J=b+16|0;do if(!(+h[b>>3]>+h[J>>3])?(L=b+8|0,N=b+24|0,!(+h[L>>3]>+h[N>>3])):0){P=e+-1|0;M=c[13918]|0;w=0;while(1){if((w|0)>=(P|0))break;D=w+1|0;E=b+(D<<5)|0;f=+h[E>>3];F=b+(D<<5)+16|0;g=+h[F>>3];if(f>g){Q=16;break}A=b+(D<<5)+8|0;m=+h[A>>3];B=b+(D<<5)+24|0;n=+h[B>>3];if(m>n){Q=16;break}G=b+(w<<5)+16|0;v=+h[G>>3]<f;e=v&1;C=b+(w<<5)|0;u=+h[C>>3]>g;a=u&1;z=b+(w<<5)+24|0;t=+h[z>>3]<m;j=t&1;y=b+(w<<5)+8|0;k=+h[y>>3]>n;i=k&1;x=a+e+j+i|0;o=(x|0)!=0;if(!(0==0|o^1)){c[I>>2]=w;c[I+4>>2]=D;AL(M,90176,I)|0;sy(d)}a:do if(o){if(!v)if(!u)if(!t){if(k){k=0;o=e;e=B;i=y;Q=24}}else{k=i;j=0;o=e;e=A;i=z;Q=24}else{k=i;a=0;o=e;e=F;i=C;Q=24}else{k=i;o=0;e=E;i=G;Q=24}if((Q|0)==24){Q=0;w=~~+h[i>>3];h[i>>3]=+h[e>>3];h[e>>3]=+(w|0);i=k;e=o}o=x+-1|0;k=0;while(1){if((k|0)>=(o|0))break a;do if((e|0)!=1){if((a|0)==1){s=+(~~((+h[F>>3]+ +h[C>>3])*.5+.5)|0);h[F>>3]=s;h[C>>3]=s;a=0;break}if((j|0)==1){s=+(~~((+h[A>>3]+ +h[z>>3])*.5+.5)|0);h[A>>3]=s;h[z>>3]=s;j=0;break}if((i|0)==1){s=+(~~((+h[B>>3]+ +h[y>>3])*.5+.5)|0);h[B>>3]=s;h[y>>3]=s;i=0}}else{s=+(~~((+h[E>>3]+ +h[G>>3])*.5+.5)|0);h[E>>3]=s;h[G>>3]=s;e=0}while(0);k=k+1|0}}while(0);p=+h[C>>3];q=+h[G>>3];r=+h[E>>3];s=+h[F>>3];i=ty(~~p,~~q,~~r,~~s)|0;n=+h[y>>3];m=+h[z>>3];g=+h[A>>3];f=+h[B>>3];e=ty(~~n,~~m,~~g,~~f)|0;if(!((i|0)!=0&(e|0)!=0)){w=D;continue}if((i|0)<(e|0)){B=q-p>s-r;w=q<s;h[(B?(w?G:C):w?E:F)>>3]=B?(w?r:s):w?q:p;w=D;continue}else{B=m-n>f-g;w=m<f;h[(B?(w?G:C):w?E:F)+8>>3]=B?(w?g:f):w?m:n;w=D;continue}}if((Q|0)==16){c[H>>2]=D;$l(1,90130,H)|0;sy(d);e=1;break}f=+h[d>>3];g=+h[b>>3];if(!(((!(f<g)?!(f>+h[J>>3]):0)?(K=+h[d+8>>3],!(K<+h[L>>3])):0)?!(K>+h[N>>3]):0)){if(0){YL(90219,42,1,M)|0;sy(d);g=+h[b>>3];f=+h[d>>3]}if(f<g)h[d>>3]=g;else g=f;f=+h[J>>3];if(g>f)h[d>>3]=f;e=d+8|0;g=+h[e>>3];f=+h[L>>3];if(g<f){h[e>>3]=f;g=f}f=+h[N>>3];if(g>f)h[e>>3]=f}i=d+40|0;f=+h[i>>3];e=b+(P<<5)|0;g=+h[e>>3];if(((!(f<g)?!(f>+h[b+(P<<5)+16>>3]):0)?(O=+h[d+48>>3],!(O<+h[b+(P<<5)+8>>3])):0)?!(O>+h[b+(P<<5)+24>>3]):0){e=0;break}if(0){YL(90262,39,1,M)|0;sy(d);g=+h[e>>3];f=+h[i>>3]}if(f<g){h[i>>3]=g;f=g}g=+h[b+(P<<5)+16>>3];if(f>g)h[i>>3]=g;e=d+48|0;f=+h[e>>3];g=+h[b+(P<<5)+8>>3];if(f<g)h[e>>3]=g;else g=f;f=+h[b+(P<<5)+24>>3];if(g>f){h[e>>3]=f;e=0}else e=0}else Q=12;while(0);if((Q|0)==12){$l(1,90085,k)|0;sy(d);e=1}l=R;return e|0}function ry(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;s=O(e,b)|0;t=1.0/+(s|0);e=0;a:while(1){u=e+3|0;if((u|0)>=(d|0))break;o=c+(e<<4)|0;p=c+(e<<4)+8|0;r=e+1|0;q=c+(r<<4)|0;r=c+(r<<4)+8|0;j=e+2|0;i=c+(j<<4)|0;j=c+(j<<4)+8|0;k=c+(u<<4)|0;l=c+(u<<4)+8|0;g=0;while(1){if((g|0)>(s|0)){e=u;continue a}v=t*+(g|0);m=+h[o>>3];n=+h[p>>3];y=+h[q>>3];w=+h[r>>3];z=+h[i>>3];x=+h[j>>3];m=(y-m)*v+m;n=(w-n)*v+n;y=(z-y)*v+y;w=(x-w)*v+w;m=(y-m)*v+m;n=(w-n)*v+n;m=((z-y+(+h[k>>3]-z)*v)*v+y-m)*v+m;n=((x-w+(+h[l>>3]-x)*v)*v+w-n)*v+n;f=0;while(1){if((f|0)>=(b|0))break;if(n<=+h[a+(f<<5)+24>>3]+.0001?n>=+h[a+(f<<5)+8>>3]+-.0001:0){e=a+(f<<5)|0;if(+h[e>>3]>m)h[e>>3]=m;e=a+(f<<5)+16|0;if(+h[e>>3]<m)h[e>>3]=m}f=f+1|0}g=g+1|0}}return}function sy(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=l;l=l+112|0;j=m+80|0;k=m+48|0;i=m+8|0;g=m;e=c[13918]|0;f=b+80|0;c[g>>2]=c[f>>2];AL(e,90302,g)|0;g=b+84|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;r=c[g>>2]|0;q=+h[r+(d<<5)>>3];p=+h[r+(d<<5)+8>>3];o=+h[r+(d<<5)+16>>3];n=+h[r+(d<<5)+24>>3];c[i>>2]=d;h[i+8>>3]=q;h[i+16>>3]=p;h[i+24>>3]=o;h[i+32>>3]=n;AL(e,90313,i)|0;d=d+1|0}q=+h[b+8>>3];p=+h[b+16>>3];r=a[b+29>>0]|0?90344:90356;h[k>>3]=+h[b>>3];h[k+8>>3]=q;h[k+16>>3]=p;c[k+24>>2]=r;AL(e,90372,k)|0;p=+h[b+48>>3];q=+h[b+56>>3];r=a[b+69>>0]|0?90344:90356;h[j>>3]=+h[b+40>>3];h[j+8>>3]=p;h[j+16>>3]=q;c[j+24>>2]=r;AL(e,90423,j)|0;l=m;return}function ty(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if((b|0)>(c|0)&(d|0)>(a|0)){if(!((c|0)>(a|0)|(d|0)<(a|0))){a=d-a|0;break}if((b|0)<(c|0)|(b|0)>(d|0)){b=b-a|0;a=d-c|0;a=(b|0)<(a|0)?b:a;break}else{a=b-c|0;break}}else a=0;while(0);return a|0}function uy(a,b){a=a|0;b=b|0;return py(a,b,1)|0}function vy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,P=0,Q=0;K=l;l=l+304|0;A=K+272|0;z=K+208|0;G=K+96|0;H=K+32|0;I=K+16|0;J=K;r=K+192|0;y=K+176|0;i=K+160|0;B=K+296|0;D=K+288|0;j=c[d>>2]|0;w=c[j>>2]&3;k=j+-48|0;E=c[((w|0)==2?j:k)+40>>2]|0;t=G+16|0;w=(c[(c[((w|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+16|0;x=j+16|0;F=(c[x>>2]|0)+16|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[F>>2];c[A+4>>2]=c[F+4>>2];c[A+8>>2]=c[F+8>>2];c[A+12>>2]=c[F+12>>2];wy(r,z,A);c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[I>>2]=c[r>>2];c[I+4>>2]=c[r+4>>2];c[I+8>>2]=c[r+8>>2];c[I+12>>2]=c[r+12>>2];r=G+32|0;F=G+48|0;w=(c[E+16>>2]|0)+16|0;x=(c[x>>2]|0)+56|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];wy(y,z,A);c[F>>2]=c[y>>2];c[F+4>>2]=c[y+4>>2];c[F+8>>2]=c[y+8>>2];c[F+12>>2]=c[y+12>>2];c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[J>>2]=c[y>>2];c[J+4>>2]=c[y+4>>2];c[J+8>>2]=c[y+8>>2];c[J+12>>2]=c[y+12>>2];a:do if((e|0)!=1&(a[174080]|0)==0){m=+h[G>>3];n=+h[F>>3];L=m-n;o=+h[G+8>>3];p=+h[G+56>>3];s=o-p;q=s*s;if(q+L*L<1.0e-06){c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];y=G+24|0;x=G+40|0;n=0.0;m=0.0}else{M=n-m;L=+C(+(q+M*M));w=c[(c[(c[b+60>>2]|0)+16>>2]|0)+248>>2]|0;N=+((O(w,e+-1|0)|0)/2|0|0);q=s*N/L;h[t>>3]=q+m;m=M*N/L;y=G+24|0;h[y>>3]=m+o;h[r>>3]=q+n;x=G+40|0;h[x>>3]=p+m;m=+(0-w|0);n=M*m/L;m=s*m/L}f=(f|0)==6;u=D+4|0;v=B+4|0;j=0;while(1){if((j|0)>=(e|0))break a;w=c[d+(j<<2)>>2]|0;k=w+-48|0;b:do if((c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0)==(E|0)){c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];i=0;while(1){if((i|0)==4)break b;P=H+(i<<4)|0;Q=G+(i<<4)|0;c[P>>2]=c[Q>>2];c[P+4>>2]=c[Q+4>>2];c[P+8>>2]=c[Q+8>>2];c[P+12>>2]=c[Q+12>>2];i=i+1|0}}else{c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];c[I+8>>2]=c[F+8>>2];c[I+12>>2]=c[F+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];i=0;while(1){if((i|0)==4)break b;Q=H+(3-i<<4)|0;P=G+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}}while(0);if(f){c[u>>2]=4;c[D>>2]=z;i=0;while(1){if((i|0)==4)break;Q=z+(i<<4)|0;P=H+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];ZI(A,B);Kz(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,c[B>>2]|0,c[v>>2]|0,g)}else Kz(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,H,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];dA(b,w,z,A);h[t>>3]=+h[t>>3]+m;h[y>>3]=+h[y>>3]+n;h[r>>3]=+h[r>>3]+m;h[x>>3]=+h[x>>3]+n;j=j+1|0}}else{if((f|0)==4){xy(i,b);c[A>>2]=c[i>>2];c[A+4>>2]=c[i+4>>2];c[A+8>>2]=c[i+8>>2];c[A+12>>2]=c[i+12>>2];yy(G,A)}Kz(j,c[((c[j>>2]&3|0)==2?j:k)+40>>2]|0,G,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];dA(b,j,z,A)}while(0);l=K;return}function wy(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function xy(a,b){a=a|0;b=b|0;b=c[b+16>>2]|0;h[20899]=(+h[b+32>>3]+ +h[b+16>>3])*.5;h[20900]=(+h[b+40>>3]+ +h[b+24>>3])*.5;c[a>>2]=c[41798];c[a+4>>2]=c[41799];c[a+8>>2]=c[41800];c[a+12>>2]=c[41801];return}function yy(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;f=+h[a>>3];d=+h[a+48>>3];i=(d+f)*.5;g=+h[a+8>>3];c=+h[a+56>>3];e=(c+g)*.5;f=d-f;g=c-g;f=+C(+(g*g+f*f))*.2;g=+h[b>>3]-i;c=+h[b+8>>3]-e;d=+C(+(c*c+g*g));if(!(d==0.0)){g=i-g/d*f;i=e-c/d*f;h[a+32>>3]=g;h[a+16>>3]=g;h[a+40>>3]=i;h[a+24>>3]=i}return}function zy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0.0,G=0,H=0.0,I=0.0,J=0.0;E=l;l=l+208|0;t=E+192|0;s=E+176|0;B=E+32|0;w=E+16|0;x=E;y=E+160|0;z=E+144|0;u=E+128|0;v=E+112|0;g=e&2130706432;A=(e&8|0)==0?((g|0)==0?4:g):8;if((A|0)==436207616)Ay(a,b,d,f);else{D=ww((d<<6)+64|0)|0;p=d+-1|0;q=x+8|0;r=w+8|0;o=12.0;e=0;while(1){if((e|0)>=(d|0))break;n=b+(e<<4)|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];if((e|0)<(p|0)){e=e+1|0;n=b+(e<<4)|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2];e=e+1|0}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=+C(+(F*F+m*m))*.3333333333333333;o=o<m?o:m}k=(g|16777216|0)==83886080;n=(A|0)==4;j=(g|0)==16777216;e=0;i=0;while(1){if((i|0)>=(d|0))break;g=b+(i<<4)|0;c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if((i|0)<(p|0)){g=b+(i+1<<4)|0;c[x>>2]=c[g>>2];c[x+4>>2]=c[g+4>>2];c[x+8>>2]=c[g+8>>2];c[x+12>>2]=c[g+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2]}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=o/+C(+(F*F+m*m));m=k?m*.3333333333333333:j?m*.5:m;g=D+(e<<4)|0;if(n){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(y,m*.5,s,t);c[g>>2]=c[y>>2];c[g+4>>2]=c[y+4>>2];c[g+8>>2]=c[y+8>>2];c[g+12>>2]=c[y+12>>2]}else{c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2]}g=D+(e+1<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(z,m,s,t);c[g>>2]=c[z>>2];c[g+4>>2]=c[z+4>>2];c[g+8>>2]=c[z+8>>2];c[g+12>>2]=c[z+12>>2];g=e+3|0;G=D+(e+2<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(u,1.0-m,s,t);c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(n){G=D+(g<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];By(v,1.0-m*.5,s,t);c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[G+8>>2]=c[v+8>>2];c[G+12>>2]=c[v+12>>2];e=e+4|0}else e=g;i=i+1|0}k=D+(e<<4)|0;c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];k=D+(e+1<<4)|0;j=D+16|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];e=D+(e+2<<4)|0;k=D+32|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];e=A&2147483647;a:do if((e|0)<201326592){if((e|0)>=83886080){if((e|0)<134217728){if((e|0)<100663296){switch(e|0){case 83886080:break;default:break a}if((d|0)==4){G=ww(192)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];p=G+16|0;t=b+16|0;c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];p=D+48|0;t=D+64|0;o=+h[t>>3];n=G+32|0;h[n>>3]=o;q=D+56|0;r=D+72|0;H=+h[r>>3];z=G+40|0;h[z>>3]=H;F=+h[p>>3]+o-+h[k>>3];u=G+48|0;h[u>>3]=F;J=+h[q>>3]+H-+h[D+40>>3];x=G+56|0;h[x>>3]=J;I=+h[t>>3]+F-+h[p>>3];p=G+64|0;h[p>>3]=I;m=+h[r>>3]+J-+h[q>>3];q=G+72|0;h[q>>3]=m;r=G+80|0;h[r>>3]=o+I-F;h[G+88>>3]=H+m-J;t=D+96|0;v=D+80|0;J=+h[v>>3];d=G+144|0;h[d>>3]=J;w=D+104|0;s=D+88|0;m=+h[s>>3];h[G+152>>3]=m;H=+h[t>>3]+J-+h[D+112>>3];y=G+128|0;h[y>>3]=H;F=+h[w>>3]+m-+h[D+120>>3];A=G+136|0;h[A>>3]=F;I=+h[v>>3]+H-+h[t>>3];t=G+112|0;h[t>>3]=I;o=+h[s>>3]+F-+h[w>>3];w=G+120|0;h[w>>3]=o;s=G+96|0;h[s>>3]=J+I-H;v=G+104|0;h[v>>3]=m+o-F;k=G+160|0;j=b+32|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];k=G+176|0;b=b+48|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];ID(a,G,12,f);c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];F=+h[n>>3];o=+h[u>>3];F=F+F-o;u=B+16|0;h[u>>3]=F;m=+h[z>>3];H=+h[x>>3];m=m+m-H;x=B+24|0;h[x>>3]=m;z=B+32|0;h[z>>3]=+h[p>>3]+F-o;b=B+40|0;h[b>>3]=+h[q>>3]+m-H;f=B+48|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2];LD(a,B,4);c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];H=+h[s>>3];m=+h[t>>3];H=H-(m-H);h[u>>3]=H;o=+h[v>>3];F=+h[w>>3];o=o-(F-o);h[x>>3]=o;h[z>>3]=+h[y>>3]+H-m;h[b>>3]=+h[A>>3]+o-F;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];LD(a,B,4);$I(G);break}else ma(90472,90483,737,90492)}if((e|0)<117440512){switch(e|0){case 100663296:break;default:break a}y=d+5|0;G=ww(y<<4)|0;z=b+16|0;H=+h[z>>3];H=(+h[b>>3]-H)*.625+H;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;v=D+48|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*1.5;h[G+8>>3]=J;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+16>>3]=I;h[G+24>>3]=J;h[G+32>>3]=I;F=+h[A>>3];h[G+40>>3]=(+h[d>>3]-F)*.5+F;I=(+h[k>>3]-+h[v>>3])*.5+I;h[G+48>>3]=I;F=+h[A>>3];h[G+56>>3]=(+h[d>>3]-F)*.5+F;h[G+64>>3]=I;I=+h[A>>3];I=(+h[d>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3]);h[G+72>>3]=I;h[G+80>>3]=H;h[G+88>>3]=I;h[G+96>>3]=H;I=I-(+h[w>>3]-+h[x>>3])*.25;h[G+104>>3]=I;h[G+112>>3]=+h[k>>3]+H-+h[v>>3];h[G+120>>3]=(+h[w>>3]-+h[x>>3])*.5+I;h[G+128>>3]=+h[G>>3];h[G+136>>3]=(+h[w>>3]-+h[x>>3])*.25+J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 117440512:break;default:break a}d=d+1|0;G=ww(d<<4)|0;h[G>>3]=+h[j>>3];z=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[z>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[D+48>>3];J=+h[z>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];B=b+40|0;h[G+40>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];h[G+48>>3]=+h[j>>3];h[G+56>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];J=+h[b+8>>3];h[G+72>>3]=J-(J-+h[b+56>>3])*.5;h[G+64>>3]=+h[b>>3];ID(a,G,d,f);$I(G);break}}if((e|0)<167772160)if((e|0)<150994944){switch(e|0){case 134217728:break;default:break a}y=d+4|0;G=ww(y<<4)|0;z=b+16|0;F=+h[z>>3];x=D+48|0;F=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*.25;h[G>>3]=F;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=F;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.5+J;h[G+24>>3]=H;F=(+h[k>>3]-+h[x>>3])*.5+F;h[G+32>>3]=F;h[G+40>>3]=H;h[G+48>>3]=F;F=(+h[v>>3]-+h[w>>3])*.5+H;h[G+56>>3]=F;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=F;h[G+80>>3]=I;h[G+88>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.25;h[G+96>>3]=I;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 150994944:break;default:break a}y=d+2|0;G=ww(y<<4)|0;z=b+16|0;H=+h[z>>3];x=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[x>>3])*.75;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=H;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.25+J;h[G+24>>3]=H;I=+h[z>>3];h[G+32>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*.25;I=(+h[v>>3]-+h[w>>3])*.5+H;h[G+40>>3]=I;F=+h[z>>3];h[G+48>>3]=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*-.25;h[G+56>>3]=I;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=H;h[G+80>>3]=I;h[G+88>>3]=J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else if((e|0)<184549376){switch(e|0){case 167772160:break;default:break a}y=d+1|0;G=ww(y<<4)|0;z=b+16|0;H=+h[z>>3];v=D+48|0;H=+h[k>>3]+H+(+h[b>>3]-H)*.5-+h[v>>3];h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*.25;h[G+8>>3]=J;H=H-+h[k>>3]+ +h[v>>3];h[G+16>>3]=H;h[G+24>>3]=+h[w>>3]+J-+h[x>>3];h[G+32>>3]=H;H=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+48>>3]=I;h[G+56>>3]=H;h[G+64>>3]=I;h[G+72>>3]=J;ID(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 184549376:break;default:break a}z=d+4|0;G=ww(z<<4)|0;y=b+16|0;H=+h[y>>3];I=+h[b>>3]-H;u=D+48|0;I=I*.125+H+(+h[k>>3]-+h[u>>3]+I)*.5;h[G>>3]=I;w=b+40|0;H=+h[w>>3];x=b+24|0;d=D+56|0;v=D+72|0;H=(+h[x>>3]-H)*.5+H+(+h[d>>3]-+h[v>>3])*.25;h[G+8>>3]=H;J=+h[y>>3];J=(+h[b>>3]-J)*.375+J;h[G+16>>3]=J;h[G+24>>3]=H;h[G+32>>3]=J;H=(+h[d>>3]-+h[v>>3])*.5+H;h[G+40>>3]=H;J=J-(+h[k>>3]-+h[u>>3])*.5;h[G+48>>3]=J;h[G+56>>3]=H;A=G+64|0;h[A>>3]=J;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[d>>3]-+h[v>>3])*-.25;h[G+72>>3]=J;H=I-(+h[k>>3]-+h[u>>3])*.5;h[G+80>>3]=H;h[G+88>>3]=J;h[G+96>>3]=H;J=J-(+h[d>>3]-+h[v>>3])*.5;h[G+104>>3]=J;v=G+112|0;h[v>>3]=I;h[G+120>>3]=J;ID(a,G,z,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[A>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[b>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);$I(G);break}}if((e|0)<33554432){if((e|0)<8){switch(e|0){case 4:break;default:break a}i=xw((d*96|0)+32|0)|0;e=0;g=0;while(1){j=g|1;k=i+(g<<4)|0;if((e|0)>=(d|0))break;b=e<<2;G=D+(b<<4)|0;c[k>>2]=c[G>>2];c[k+4>>2]=c[G+4>>2];c[k+8>>2]=c[G+8>>2];c[k+12>>2]=c[G+12>>2];G=i+(j<<4)|0;B=D+((b|1)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+2<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+3<<4)|0;B=D+((b|2)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+4<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+5<<4)|0;b=D+((b|3)<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];e=e+1|0;g=g+6|0}c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];d=i+(j<<4)|0;G=i+16|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];KD(a,G,j,0,0,f&255);$I(i);break}if((e|0)<16777216){switch(e|0){case 8:break;default:break a}ID(a,b,d,f);g=B+16|0;e=0;while(1){if((e|0)>=(d|0))break a;G=e*3|0;f=D+(G+2<<4)|0;c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];G=D+(G+4<<4)|0;c[g>>2]=c[G>>2];c[g+4>>2]=c[G+4>>2];c[g+8>>2]=c[G+8>>2];c[g+12>>2]=c[G+12>>2];LD(a,B,2);e=e+1|0}}switch(e|0){case 16777216:break;default:break a}g=d+1|0;i=ww(g<<4)|0;e=1;while(1){if((e|0)>=(d|0))break;G=i+(e<<4)|0;A=b+(e<<4)|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];e=e+1|0}b=d*3|0;A=D+(b+1<<4)|0;c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];d=i+(d<<4)|0;G=D+(b+-1<<4)|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];ID(a,i,g,f);$I(i);c[B>>2]=c[G>>2];c[B+4>>2]=c[G+4>>2];c[B+8>>2]=c[G+8>>2];c[B+12>>2]=c[G+12>>2];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];f=B+32|0;h[f>>3]=+h[B>>3]+ +h[G>>3]-+h[D+(b<<4)>>3];h[B+40>>3]=+h[B+8>>3]+ +h[B+24>>3]-+h[D+(b<<4)+8>>3];LD(a,G,2);c[G>>2]=c[f>>2];c[G+4>>2]=c[f+4>>2];c[G+8>>2]=c[f+8>>2];c[G+12>>2]=c[f+12>>2];LD(a,B,2);break}else{if((e|0)<50331648){switch(e|0){case 33554432:break;default:break a}g=d+2|0;i=ww(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];j=i+16|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];j=D+48|0;d=D+64|0;h[i+32>>3]=(+h[j>>3]-+h[d>>3])*.3333333333333333+ +h[k>>3];G=D+56|0;e=D+72|0;h[i+40>>3]=(+h[G>>3]-+h[e>>3])*.3333333333333333+ +h[D+40>>3];J=+h[j>>3];h[i+48>>3]=(J-+h[d>>3])*.3333333333333333+J;J=+h[G>>3];h[i+56>>3]=(J-+h[e>>3])*.3333333333333333+J;e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-2<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}ID(a,i,g,f);$I(i);c[B>>2]=c[j>>2];c[B+4>>2]=c[j+4>>2];c[B+8>>2]=c[j+8>>2];c[B+12>>2]=c[j+12>>2];G=B+16|0;c[G>>2]=c[k>>2];c[G+4>>2]=c[k+4>>2];c[G+8>>2]=c[k+8>>2];c[G+12>>2]=c[k+12>>2];LD(a,B,2);break}if((e|0)>=67108864){switch(e|0){case 67108864:break;default:break a}if((d|0)==4){G=ww(96)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];d=G+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];d=G+32|0;A=D+64|0;c[d>>2]=c[A>>2];c[d+4>>2]=c[A+4>>2];c[d+8>>2]=c[A+8>>2];c[d+12>>2]=c[A+12>>2];d=G+48|0;b=b+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=G+64|0;d=D+128|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=G+80|0;z=D+160|0;c[b>>2]=c[z>>2];c[b+4>>2]=c[z+4>>2];c[b+8>>2]=c[z+8>>2];c[b+12>>2]=c[z+12>>2];ID(a,G,6,f);$I(G);h[B>>3]=+h[D+176>>3]+ +h[j>>3]-+h[D>>3];h[B+8>>3]=+h[D+184>>3]+ +h[D+24>>3]-+h[D+8>>3];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];LD(a,B,2);c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];LD(a,B,2);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];LD(a,B,2);break}else ma(90472,90483,714,90492)}switch(e|0){case 50331648:break;default:break a}g=d+3|0;i=ww(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];J=+h[b>>3];h[i+16>>3]=J-(J-+h[j>>3])*.25;e=D+56|0;J=(+h[e>>3]-+h[D+72>>3])*.3333333333333333+ +h[b+8>>3];h[i+24>>3]=J;I=+h[b>>3];h[i+32>>3]=I-(I-+h[j>>3])*2.0;h[i+40>>3]=J;J=+h[b>>3];h[i+48>>3]=J-(J-+h[j>>3])*2.25;h[i+56>>3]=+h[e>>3];h[i+64>>3]=+h[D+48>>3];h[i+72>>3]=+h[e>>3];e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-3<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}ID(a,i,g,f);$I(i);break}}else if((e|0)<318767104){if((e|0)<251658240){if((e|0)<218103808){switch(e|0){case 201326592:break;default:break a}G=d<<4;u=ww(G)|0;v=b+16|0;J=+h[v>>3];h[u>>3]=J;z=b+40|0;I=+h[z>>3];A=b+24|0;y=D+48|0;w=D+56|0;x=D+72|0;I=(+h[A>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[w>>3]-+h[x>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;ID(a,u,d,f);$I(u);G=ww(G)|0;I=+h[k>>3]+ +h[v>>3]-+h[y>>3];h[G>>3]=I;J=+h[z>>3];J=(+h[A>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*-.625;h[G+8>>3]=J;H=+h[k>>3]-+h[y>>3]+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;ID(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}if((e|0)<234881024){switch(e|0){case 218103808:break;default:break a}G=d<<4;w=ww(G)|0;J=+h[b>>3];h[w>>3]=J;y=b+40|0;I=+h[y>>3];z=b+24|0;x=D+56|0;A=D+72|0;I=(+h[z>>3]-I)*.5+I+(+h[x>>3]-+h[A>>3])*.125;h[w+8>>3]=I;h[w+16>>3]=J;H=(+h[x>>3]-+h[A>>3])*.5+I;h[w+24>>3]=H;J=J-(+h[x>>3]-+h[A>>3])*2.0;h[w+32>>3]=J;h[w+40>>3]=H;h[w+48>>3]=J;h[w+56>>3]=I;ID(a,w,d,f);$I(w);G=ww(G)|0;I=+h[b>>3]-+h[k>>3]+ +h[D+48>>3];h[G>>3]=I;J=+h[y>>3];J=(+h[z>>3]-J)*.5+J+(+h[x>>3]-+h[A>>3])*-.625;h[G+8>>3]=J;h[G+16>>3]=I;H=(+h[x>>3]-+h[A>>3])*.5+J;h[G+24>>3]=H;I=I-(+h[x>>3]-+h[A>>3]);h[G+32>>3]=I;h[G+40>>3]=H;A=G+48|0;h[A>>3]=I;h[G+56>>3]=J;ID(a,G,d,f);h[B>>3]=+h[b+16>>3];J=+h[y>>3];h[B+8>>3]=(+h[z>>3]-J)*.5+J;h[B+16>>3]=+h[A>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 234881024:break;default:break a}G=d<<4;y=ww(G)|0;u=b+16|0;I=+h[u>>3];v=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=I;w=b+40|0;J=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*.125;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;ID(a,y,d,f);$I(y);y=ww(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;h[y+16>>3]=H;h[y+24>>3]=I;h[y+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=I;ID(a,y,d,f);$I(y);y=ww(G)|0;I=+h[u>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*.125;h[y>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;ID(a,y,d,f);$I(y);G=ww(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*.125;h[G>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[G+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;y=G+16|0;h[y>>3]=H;h[G+24>>3]=I;h[G+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[G+40>>3]=I;h[G+48>>3]=J;h[G+56>>3]=I;ID(a,G,d,f);h[B>>3]=+h[y>>3];I=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-I)*.5+I;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+I;LD(a,B,2);I=+h[u>>3];h[B>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=I;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);$I(G);break}}if((e|0)<285212672)if((e|0)<268435456){switch(e|0){case 251658240:break;default:break a}G=d<<4;u=ww(G)|0;v=b+16|0;J=+h[v>>3];y=D+48|0;J=J-+h[k>>3]+(+h[b>>3]-J)*.5+ +h[y>>3];h[u>>3]=J;w=b+40|0;I=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;ID(a,u,d,f);$I(u);G=ww(G)|0;I=+h[v>>3];I=I-+h[k>>3]+(+h[b>>3]-I)*.5+ +h[y>>3];h[G>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[G+8>>3]=J;H=(+h[k>>3]-+h[y>>3])*2.0+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;ID(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[G>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 268435456:break;default:break a}G=ww(d<<4)|0;h[G>>3]=+h[b>>3];v=D+48|0;x=D+56|0;y=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[x>>3]-+h[y>>3])*.5;h[G+16>>3]=+h[v>>3];J=+h[x>>3];h[G+24>>3]=J-(J-+h[y>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[b>>3];h[G+56>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];ID(a,G,d,f);w=b+16|0;J=(+h[k>>3]-+h[v>>3])*.25;I=J+ +h[w>>3];h[B>>3]=I;H=+h[z>>3];u=b+24|0;F=+h[x>>3]-+h[y>>3];H=(+h[u>>3]-H)*.5+H+F*.125;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J+I;f=B+24|0;h[f>>3]=H-F*.25;LD(a,B,2);F=(+h[k>>3]-+h[v>>3])*.25;H=F+ +h[w>>3];h[B>>3]=H;I=+h[z>>3];J=+h[x>>3]-+h[y>>3];I=(+h[u>>3]-I)*.5+I+J*-.125;h[A>>3]=I;h[d>>3]=F+H;h[f>>3]=J*.25+I;LD(a,B,2);I=(+h[k>>3]-+h[v>>3])*.25;h[B>>3]=I+ +h[w>>3];J=(+h[x>>3]-+h[y>>3])*.75+ +h[z>>3];h[A>>3]=J;h[d>>3]=+h[b>>3]-I;h[f>>3]=J;LD(a,B,2);$I(G);break}else if((e|0)<301989888){switch(e|0){case 285212672:break;default:break a}y=ww(d<<4)|0;v=b+16|0;I=+h[v>>3];z=D+48|0;I=(+h[k>>3]-+h[z>>3]+(+h[b>>3]-I))*.5+I;h[y>>3]=I;w=b+40|0;F=+h[w>>3];x=b+24|0;F=(+h[k>>3]-+h[z>>3]+(+h[x>>3]-F))*.5+F;h[y+8>>3]=F;h[y+16>>3]=I;I=+h[w>>3];o=+h[k>>3]-+h[z>>3];I=(+h[x>>3]-I-o)*.5+I;h[y+24>>3]=I;J=+h[v>>3];J=(+h[b>>3]-J-o)*.5+J;h[y+32>>3]=J;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=F;ID(a,y,d,f);$I(y);F=+h[v>>3];F=(+h[b>>3]-F)*.5+F;J=+h[k>>3]-+h[z>>3];I=J*.75;o=F+I;h[B>>3]=o;H=+h[w>>3];H=(+h[x>>3]-H)*.5+H;I=H+I;y=B+8|0;h[y>>3]=I;A=B+16|0;h[A>>3]=o;J=J*-.75;H=H+J;G=B+24|0;h[G>>3]=H;J=F+J;h[B+32>>3]=J;h[B+40>>3]=H;h[B+48>>3]=J;h[B+56>>3]=I;d=B+64|0;c[d>>2]=c[B>>2];c[d+4>>2]=c[B+4>>2];c[d+8>>2]=c[B+8>>2];c[d+12>>2]=c[B+12>>2];LD(a,B,5);I=+h[v>>3];J=+h[b>>3];h[B>>3]=(J-I)*.5+I+(+h[k>>3]-+h[z>>3])*.75;I=+h[w>>3];h[y>>3]=(+h[x>>3]-I)*.5+I;h[A>>3]=J;d=b+8|0;f=b+56|0;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+I;LD(a,B,2);I=+h[v>>3];h[B>>3]=I;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[A>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[z>>3])*-.75;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+J;LD(a,B,2);break}else{switch(e|0){case 301989888:break;default:break a}A=d+12|0;G=ww(A<<4)|0;x=b+16|0;m=+h[x>>3];s=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[s>>3])*.25;h[G>>3]=m;y=b+40|0;F=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;F=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-F))*.5+F;u=G+8|0;h[u>>3]=F;h[G+16>>3]=m;F=(+h[v>>3]-+h[w>>3])*.125+F;t=G+24|0;h[t>>3]=F;H=m-(+h[k>>3]-+h[s>>3])*.125;d=G+32|0;h[d>>3]=H;o=(+h[v>>3]-+h[w>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;I=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=I;h[G+64>>3]=m;m=(+h[v>>3]-+h[w>>3])*.125+I;h[G+72>>3]=m;h[G+80>>3]=H;h[G+88>>3]=m;H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[G+96>>3]=H;h[G+104>>3]=I;J=H-(+h[k>>3]-+h[s>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[s>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=I;I=(+h[k>>3]-+h[s>>3])*.125+J;h[G+160>>3]=I;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[u>>3];h[G+200>>3]=J;h[G+208>>3]=I;h[G+216>>3]=J;u=G+224|0;h[u>>3]=H;h[G+232>>3]=+h[t>>3];h[G+240>>3]=+h[d>>3];h[G+248>>3]=J;ID(a,G,A,f);J=+h[u>>3];h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;LD(a,B,2);H=+h[u>>3];h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;LD(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}}else{if((e|0)<369098752){if((e|0)<335544320){switch(e|0){case 318767104:break;default:break a}A=d+4|0;G=ww(A<<4)|0;x=b+16|0;H=+h[x>>3];d=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[d>>3])*.125;h[G>>3]=H;y=b+40|0;J=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;J=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-J))*.5+J;h[G+8>>3]=J;o=(+h[k>>3]-+h[d>>3])*.125+H;h[G+16>>3]=o;I=(+h[v>>3]-+h[w>>3])*.125+J;h[G+24>>3]=I;h[G+32>>3]=o;o=(+h[v>>3]-+h[w>>3])*.25+I;h[G+40>>3]=o;h[G+48>>3]=H;F=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=F;H=H-(+h[k>>3]-+h[d>>3])*.25;h[G+64>>3]=H;h[G+72>>3]=F;F=H-(+h[k>>3]-+h[d>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=I;h[G+112>>3]=H;h[G+120>>3]=J;ID(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;LD(a,B,2);H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;LD(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}if((e|0)<352321536){switch(e|0){case 335544320:break;default:break a}x=d+12|0;G=ww(x<<4)|0;y=b+16|0;m=+h[y>>3];u=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[u>>3])*.25;h[G>>3]=m;z=b+40|0;F=+h[z>>3];A=b+24|0;s=D+56|0;t=D+72|0;F=(+h[s>>3]-+h[t>>3]+(+h[A>>3]-F))*.5+F;d=G+8|0;h[d>>3]=F;h[G+16>>3]=m;F=(+h[s>>3]-+h[t>>3])*.125+F;v=G+24|0;h[v>>3]=F;I=m-(+h[k>>3]-+h[u>>3])*.125;w=G+32|0;h[w>>3]=I;o=(+h[s>>3]-+h[t>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;H=(+h[s>>3]-+h[t>>3])*.125+o;h[G+56>>3]=H;h[G+64>>3]=m;m=(+h[s>>3]-+h[t>>3])*.125+H;h[G+72>>3]=m;h[G+80>>3]=I;h[G+88>>3]=m;I=+h[y>>3];I=(+h[b>>3]-I)*.5+I;h[G+96>>3]=I;h[G+104>>3]=H;J=I-(+h[k>>3]-+h[u>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[u>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=H;H=(+h[k>>3]-+h[u>>3])*.125+J;h[G+160>>3]=H;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[d>>3];h[G+200>>3]=J;h[G+208>>3]=H;h[G+216>>3]=J;d=G+224|0;h[d>>3]=I;h[G+232>>3]=+h[v>>3];h[G+240>>3]=+h[w>>3];h[G+248>>3]=J;ID(a,G,x,f);c[B>>2]=c[d>>2];c[B+4>>2]=c[d+4>>2];c[B+8>>2]=c[d+8>>2];c[B+12>>2]=c[d+12>>2];d=B+16|0;h[d>>3]=+h[B>>3];J=+h[z>>3];f=B+24|0;h[f>>3]=(+h[A>>3]-J)*.5+J;LD(a,B,2);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}else{switch(e|0){case 352321536:break;default:break a}A=d+4|0;G=ww(A<<4)|0;x=b+16|0;I=+h[x>>3];w=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[w>>3])*.125;h[G>>3]=I;y=b+40|0;J=+h[y>>3];z=b+24|0;u=D+56|0;v=D+72|0;J=(+h[u>>3]-+h[v>>3]+(+h[z>>3]-J))*.5+J;d=G+8|0;h[d>>3]=J;o=(+h[k>>3]-+h[w>>3])*.125+I;h[G+16>>3]=o;H=(+h[u>>3]-+h[v>>3])*.125+J;h[G+24>>3]=H;h[G+32>>3]=o;o=(+h[u>>3]-+h[v>>3])*.25+H;h[G+40>>3]=o;h[G+48>>3]=I;F=(+h[u>>3]-+h[v>>3])*.125+o;h[G+56>>3]=F;I=I-(+h[k>>3]-+h[w>>3])*.25;h[G+64>>3]=I;h[G+72>>3]=F;F=I-(+h[k>>3]-+h[w>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;ID(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;A=B+8|0;h[A>>3]=+h[d>>3];d=B+16|0;h[d>>3]=J;J=+h[y>>3];f=B+24|0;h[f>>3]=(+h[z>>3]-J)*.5+J;LD(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;LD(a,B,2);$I(G);break}}if((e|0)<402653184)if((e|0)<385875968){switch(e|0){case 369098752:break;default:break a}d=d+5|0;G=ww(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=+h[z>>3];J=+h[k>>3];h[G+48>>3]=(J-+h[B>>3])*.5+J;h[G+56>>3]=+h[z>>3];J=+h[k>>3];h[G+64>>3]=(J-+h[B>>3])*.5+J;h[G+72>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+80>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+88>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+104>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+120>>3]=J-(J-+h[z>>3])*.5;h[G+112>>3]=+h[b>>3];h[G+136>>3]=+h[A>>3];h[G+128>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;ID(a,G,d,f);$I(G);break}else{switch(e|0){case 385875968:break;default:break a}d=d+3|0;G=ww(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+56>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+64>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+72>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+88>>3]=J-(J-+h[z>>3])*.5;h[G+80>>3]=+h[b>>3];h[G+104>>3]=+h[A>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;ID(a,G,d,f);$I(G);break}else if((e|0)<419430400){switch(e|0){case 402653184:break;default:break a}d=d+3|0;G=ww(d<<4)|0;h[G>>3]=+h[b>>3];y=b+8|0;z=D+48|0;A=D+56|0;B=D+72|0;h[G+8>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[z>>3])*.5+J;h[G+24>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[z>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];y=b+40|0;h[G+56>>3]=J-(J-+h[y>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[z>>3])*.5+J;h[G+72>>3]=+h[y>>3];h[G+88>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[y>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[z>>3])*.5+J;h[G+104>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[b+56>>3];h[G+96>>3]=+h[b>>3];ID(a,G,d,f);$I(G);break}else{switch(e|0){case 419430400:break;default:break a}d=d+5|0;G=ww(d<<4)|0;h[G>>3]=+h[b>>3];B=b+8|0;A=D+48|0;y=D+56|0;z=D+72|0;h[G+8>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[A>>3])*.5+J;h[G+24>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[A>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];B=b+40|0;h[G+56>>3]=J-(J-+h[B>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[A>>3])*.5+J;h[G+72>>3]=+h[B>>3];h[G+88>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[A>>3])*.5+J;B=b+56|0;h[G+104>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+112>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+120>>3]=+h[B>>3];h[G+128>>3]=+h[b+48>>3];h[G+136>>3]=+h[B>>3];ID(a,G,d,f);$I(G);break}}while(0);$I(D)}l=E;return}function Ay(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0;f=l;l=l+112|0;g=f;k=+h[b+8>>3]*2.0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[g+16>>3]=+h[b+16>>3];h[g+24>>3]=k-+h[b+24>>3];h[g+32>>3]=+h[b+32>>3];h[g+40>>3]=k-+h[b+40>>3];h[g+48>>3]=+h[b+48>>3];h[g+56>>3]=k-+h[b+56>>3];h[g+64>>3]=+h[b+64>>3];h[g+72>>3]=k-+h[b+72>>3];h[g+80>>3]=+h[b+80>>3];h[g+88>>3]=k-+h[b+88>>3];i=g+96|0;j=b+96|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];KD(a,b,d,0,0,e&255);KD(a,g,7,0,0,0);l=f;return}function By(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[c>>3];e=+h[c+8>>3];e=(+h[d+8>>3]-e)*b+e;h[a>>3]=(+h[d>>3]-f)*b+f;h[a+8>>3]=e;return}function Cy(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a){a=c[c[a+4>>2]>>2]|0;if((a|0)!=75)if((a|0)==78)a=2;else return ((a|0)==77?3:(a|0)==80?4:0)|0;else a=1}else a=0;return a|0}function Dy(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,D=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,P=0.0,Q=0.0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0;aa=l;l=l+144|0;J=aa+112|0;N=aa+104|0;G=aa+96|0;H=aa+88|0;i=aa+80|0;Y=aa+64|0;_=aa+48|0;R=aa+40|0;S=aa+32|0;j=aa+24|0;p=aa+16|0;D=aa+136|0;A=aa+128|0;L=aa;$=ww(48)|0;Z=b+16|0;W=c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0;g=(W|0)==1552;X=c[W>>2]|0;d=c[W+4>>2]|0;e=c[W+8>>2]|0;m=+h[W+16>>3];n=+h[W+32>>3];o=+h[W+24>>3];X=X|(JA(Jm(b,90545)|0)|0)&255;do if(!g){if(!X){W=c[Z>>2]|0;k=+h[W+32>>3]*72.0;f=+h[W+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);break}k=+Ny(b);if(k>0.0)f=k;else{W=c[Z>>2]|0;f=+h[W+32>>3];k=+h[W+40>>3];k=(f<k?f:k)*72.0;k=+(~~(k+(k>=0.0?.5:-.5))|0);f=k}}else{f=0.0;k=0.0}while(0);W=EA(b,c[42205]|0,d,0)|0;V=+FA(b,c[42207]|0,0.0,-360.0)+m;if(!e){U=+FA(b,c[42208]|0,0.0,-100.0);I=EA(b,c[42204]|0,4,0)|0;T=+FA(b,c[42209]|0,0.0,-100.0)}else{I=e;U=n;T=o}d=c[(c[Z>>2]|0)+104>>2]|0;e=d+24|0;c[Y>>2]=c[e>>2];c[Y+4>>2]=c[e+4>>2];c[Y+8>>2]=c[e+8>>2];c[Y+12>>2]=c[e+12>>2];q=+h[Y>>3];if(q>0.0){if(!g)M=11}else if(!(g|!(+h[Y+8>>3]>0.0)))M=11;if((M|0)==11){d=Jm(b,90530)|0;do if(d){h[p>>3]=0.0;h[j>>3]=0.0;c[i>>2]=j;c[i+4>>2]=p;d=dM(d,90537,i)|0;m=+h[j>>3];if(m<0.0){h[j>>3]=0.0;m=0.0}n=+h[p>>3];if(n<0.0){h[p>>3]=0.0;o=0.0}else o=n;if((d|0)<=0){n=q+16.0;h[Y>>3]=n;m=8.0;break}m=m*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0);n=q+m;h[Y>>3]=n;if((d|0)!=1){m=o*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0)}}else{n=q+16.0;h[Y>>3]=n;m=8.0}while(0);d=Y+8|0;h[d>>3]=+h[d>>3]+m;d=c[(c[Z>>2]|0)+104>>2]|0;q=n}s=+h[d+24>>3];m=+h[c[(c[(so(b)|0)+16>>2]|0)+8>>2]>>3];if(m>0.0){P=m*72.0;P=+(~~(P+(P>=0.0?.5:-.5))|0);Q=+Oy(q,P);h[Y>>3]=Q;p=Y+8|0;h[p>>3]=+Oy(+h[p>>3],P)}else Q=q;d=c[(c[Z>>2]|0)+8>>2]|0;do if(!(a[d+12>>0]|0)){e=Jm(b,93847)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){Qr(A,so(b)|0,e);d=c[A>>2]|0;g=c[A+4>>2]|0;if((g&d|0)==-1){d=En(b)|0;c[G>>2]=e;c[G+4>>2]=d;$l(0,90621,G)|0;e=0;d=0;break}else{a[(c[(so(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}else{d=c[d>>2]|0;if((a[d>>0]|0)==99?(yJ(d,90553)|0)==0:0){e=Jm(b,90560)|0;Qr(D,so(b)|0,e);d=c[D>>2]|0;g=c[D+4>>2]|0;if((g&d|0)==-1){d=En(b)|0;c[H>>2]=e|0?e:90570;c[H+4>>2]=d;$l(0,90576,H)|0;e=0;d=0;break}else{a[(c[(so(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}while(0);P=+(e|0);h[_>>3]=Q>P?Q:P;P=+h[Y+8>>3];r=+(d|0);d=_+8|0;h[d>>3]=P>r?P:r;e=(I|0)<3&(T!=0.0|U!=0.0)?120:I;g=Jm(b,90662)|0;if(!g)i=99;else{i=a[g>>0]|0;i=i<<24>>24==116?116:i<<24>>24==98?98:99}g=c[Z>>2]|0;a[(c[g+104>>2]|0)+80>>0]=i;if((e|0)==4?(T==0.0?((~~(V+(V>=0.0?.5:-.5))|0)%90|0|0)==0:0)&U==0.0:0)p=1;else M=39;do if((M|0)==39){g=c[(c[(c[g+8>>2]|0)+8>>2]|0)+44>>2]|0;if(g|0){p=c[g>>2]|0;c[J>>2]=c[_>>2];c[J+4>>2]=c[_+4>>2];c[J+8>>2]=c[_+8>>2];c[J+12>>2]=c[_+12>>2];hb[p&31](L,J);c[_>>2]=c[L>>2];c[_+4>>2]=c[L+4>>2];c[_+8>>2]=c[L+8>>2];c[_+12>>2]=c[L+12>>2];p=0;break}m=+h[d>>3];n=m*1.4142135623730951;if(f>n&i<<24>>24==99){o=m/f;o=+C(+(1.0/(1.0-o*o)));o=+h[_>>3]*o;h[_>>3]=o}else{o=+h[_>>3]*1.4142135623730951;h[_>>3]=o;h[d>>3]=n;m=n}if((e|0)>2){z=+E(+(3.141592653589793/+(e|0)));h[_>>3]=o/z;h[d>>3]=m/z;p=0}else p=0}while(0);m=+h[d>>3];g=GA(b,c[42210]|0,122100)|0;if((a[g>>0]|0)==115?(yJ(g,90671)|0)==0:0){h[_>>3]=k;h[d>>3]=f;N=$+40|0;c[N>>2]=c[N>>2]|2048}else{if(!((JA(g)|0)<<24>>24)){z=+h[_>>3];k=k>z?k:z;h[_>>3]=k;z=+h[d>>3];f=f>z?f:z}else{M=c[(c[Z>>2]|0)+104>>2]|0;if(!(!(k<+h[M+24>>3])?!(f<+h[M+32>>3]):0)){L=En(b)|0;M=En(so(b)|0)|0;c[N>>2]=L;c[N+4>>2]=M;$l(0,90677,N)|0}h[_>>3]=k}h[d>>3]=f}if(!X){z=f;y=k}else{y=k>f?k:f;h[d>>3]=y;h[_>>3]=y;z=y}do if(!((JA(GA(b,c[42201]|0,122100)|0)|0)<<24>>24)){if(p){f=+h[(Q>+h[_>>3]?Y:_)>>3];break}f=+h[d>>3];if(P<f){f=+h[_>>3]*+C(+(1.0-P*P/(f*f)));f=Q>f?Q:f}else f=Q}else f=Q;while(0);g=c[(c[Z>>2]|0)+104>>2]|0;h[g+40>>3]=s-q+f;A=$+40|0;if(!(c[A>>2]&2048)){x=+h[d>>3]-m;h[g+48>>3]=(P<r?r-P+x:x)+P}j=(W|0)>1;g=j?W:1;a:do if((e|0)<3){g=ww(g<<5)|0;k=+h[_>>3]*.5;f=+h[d>>3]*.5;h[g>>3]=-k;h[g+8>>3]=-f;h[g+16>>3]=k;h[g+24>>3]=f;if(j){e=1;i=2;while(1){if((e|0)==(W|0))break;y=k+4.0;z=f+4.0;h[g+(i<<4)>>3]=-y;h[g+(i<<4)+8>>3]=-z;S=i|1;h[g+(S<<4)>>3]=y;h[g+(S<<4)+8>>3]=z;e=e+1|0;i=i+2|0;k=y;f=z}h[_>>3]=k*2.0;h[d>>3]=f*2.0;e=2}else e=2}else{g=ww(O(g<<4,e)|0)|0;i=c[(c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0)+44>>2]|0;b:do if(!i){q=6.283185307179586/+(e|0);t=q*.5;r=+F(+t);s=+RJ(+B(+U)+ +B(+T),1.0);t=T*1.4142135623730951/+E(+t);u=U*.5;TJ((q+-3.141592653589793)*.5,R,S);v=V*.017453292519943295;k=0.0;f=0.0;m=0.0;i=0;n=+h[S>>3]*.5;o=+h[R>>3]*.5;while(1){if((i|0)>=(e|0))break b;m=m+q;TJ(m,R,S);n=+h[S>>3]*r+n;o=+h[R>>3]*r+o;x=(o*t+s)*n+u*o;TJ(+K(+o,+x)+v,R,S);x=+RJ(x,o);w=+h[S>>3]*x*+h[_>>3];x=+h[R>>3]*x*+h[d>>3];ba=+B(+w);f=ba>f?ba:f;ba=+B(+x);k=ba>k?ba:k;h[g+(i<<4)>>3]=w;h[g+(i<<4)+8>>3]=x;if(p)break;else i=i+1|0}ba=-w;h[g+16>>3]=ba;h[g+24>>3]=x;h[g+32>>3]=ba;ba=-x;h[g+40>>3]=ba;h[g+48>>3]=w;h[g+56>>3]=ba}else{hb[c[i+4>>2]&31](g,_);k=+h[d>>3]*.5;f=+h[_>>3]*.5}while(0);f=f*2.0;k=k*2.0;y=y>f?y:f;h[_>>3]=y;ba=z>k?z:k;h[d>>3]=ba;f=y/f;k=ba/k;i=0;while(1){if((i|0)>=(e|0))break;N=g+(i<<4)|0;b=g+(i<<4)+8|0;ba=+h[b>>3]*k;h[N>>3]=+h[N>>3]*f;h[b>>3]=ba;i=i+1|0}if(j){j=e+-1|0;k=+h[g>>3];m=+h[g+8>>3];f=+K(+(m-+h[g+(j<<4)+8>>3]),+(k-+h[g+(j<<4)>>3]));j=0;c:while(1){if((j|0)>=(e|0))break;p=j+1|0;i=(p|0)%(e|0)|0;n=+h[g+(i<<4)>>3];o=+h[g+(i<<4)+8>>3];q=+K(+(o-m),+(n-k));z=(f+3.141592653589793-q)*.5;ba=4.0/+F(+z);TJ(f-z,R,S);h[R>>3]=+h[R>>3]*ba;h[S>>3]=+h[S>>3]*ba;i=1;f=m;while(1){if((i|0)==(W|0)){f=q;j=p;k=n;m=o;continue c}z=+h[S>>3]+k;ba=+h[R>>3]+f;b=(O(i,e)|0)+j|0;h[g+(b<<4)>>3]=z;h[g+(b<<4)+8>>3]=ba;i=i+1|0;k=z;f=ba}}j=O(e,W+-1|0)|0;i=0;while(1){if((i|0)>=(e|0))break a;S=i+j|0;z=+h[g+(S<<4)+8>>3];y=+B(+(+h[g+(S<<4)>>3]))*2.0;ba=+h[_>>3];h[_>>3]=y>ba?y:ba;z=+B(+z)*2.0;ba=+h[d>>3];h[d>>3]=z>ba?z:ba;i=i+1|0}}}while(0);c[$>>2]=X;c[$+4>>2]=W;c[$+8>>2]=e;h[$+16>>3]=V;h[$+32>>3]=U;h[$+24>>3]=T;c[$+44>>2]=g;f=+h[_>>3];if(!(c[A>>2]&2048)){e=c[Z>>2]|0;h[e+32>>3]=f*.013888888888888888}else{e=c[Z>>2]|0;h[e+32>>3]=+h[(Q>f?Y:_)>>3]*.013888888888888888;d=(P>+h[d>>3]?Y:_)+8|0}h[e+40>>3]=+h[d>>3]*.013888888888888888;c[e+12>>2]=$;l=aa;return}function Ey(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;j=o+40|0;e=o+32|0;k=o+16|0;n=o;d=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]|0)>>>2&1^1;m=a+16|0;f=c[c[(c[m>>2]|0)+104>>2]>>2]|0;c[42327]=f;f=sJ(f)|0;f=ww(((f|0)>1?f:1)+1|0)|0;b=Gy(a,d,1,f)|0;if(!b){c[e>>2]=c[c[(c[m>>2]|0)+104>>2]>>2];$l(1,90506,e)|0;c[42327]=90527;b=Gy(a,d,1,f)|0}$I(f);Hy(j,a,b);d=c[m>>2]|0;i=+h[d+32>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))|0);h[n>>3]=i;g=+h[d+40>>3]*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);d=n+8|0;h[d>>3]=g;if(!((JA(GA(a,c[42210]|0,122100)|0)|0)<<24>>24)){i=+h[(+h[b>>3]>i?b:n)>>3];h[n>>3]=i;e=b+8|0;g=+h[(+h[e>>3]>g?b:n)+8>>3];h[d>>3]=g;d=e;e=b}else{d=b+8|0;e=b}a=(JA(GA(a,c[42201]|0,122100)|0)|0)&255;c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];Iy(b,j,a);Jy(k,i*-.5,g*.5);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];Ky(b,j,15);n=c[m>>2]|0;h[n+32>>3]=+h[e>>3]*.013888888888888888;h[n+40>>3]=(+h[d>>3]+1.0)*.013888888888888888;c[n+12>>2]=b;l=o;return}function Fy(a){a=a|0;var b=0.0,d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0.0,m=0;j=ww(48)|0;k=a+16|0;g=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+8>>2]|0)+4>>2]|0;f=+FA(a,c[42191]|0,1797693134862315708145274.0e284,0.0);b=+FA(a,c[42190]|0,1797693134862315708145274.0e284,0.0);f=f<b?f:b;f=b==1797693134862315708145274.0e284&f==1797693134862315708145274.0e284?.05:f>0.0?(f>.0003?f:.0003):f;i=c[k>>2]|0;h[i+40>>3]=f;h[i+32>>3]=f;b=f*72.0;g=EA(a,c[42205]|0,g,0)|0;i=ww((g|0)<1?32:g<<5)|0;f=f*36.0;e=-f;h[i>>3]=e;h[i+8>>3]=e;h[i+16>>3]=f;h[i+24>>3]=f;if((g|0)>1){a=1;d=2;e=f;b=f;while(1){if((a|0)==(g|0))break;l=e+4.0;f=b+4.0;h[i+(d<<4)>>3]=-l;h[i+(d<<4)+8>>3]=-f;m=d|1;h[i+(m<<4)>>3]=l;h[i+(m<<4)+8>>3]=f;a=a+1|0;d=d+2|0;e=l;b=f}b=e*2.0}c[j>>2]=1;c[j+4>>2]=g;c[j+8>>2]=2;m=j+16|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[j+44>>2]=i;l=b*.013888888888888888;m=c[k>>2]|0;h[m+32>>3]=l;h[m+40>>3]=l;c[m+12>>2]=j;return}function Gy(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=ww(72)|0;n=c[(c[b+16>>2]|0)+104>>2]|0;m=0;i=1;j=c[42327]|0;a:while(1){k=a[j>>0]|0;switch(k<<24>>24){case 0:break a;case 92:{j=j+1|0;k=a[j>>0]|0;switch(k<<24>>24){case 124:case 125:case 123:case 92:{l=m;break}default:E=4}break}default:E=4}if((E|0)==4){E=0;switch(k<<24>>24){case 123:{l=m+1|0;break}case 125:{l=m+-1|0;break}default:{l=m;i=i+((m|0)==0&k<<24>>24==124&1)|0}}if((l|0)<0)break}m=l;j=j+1|0}B=g+56|0;c[B>>2]=ww(i<<2)|0;a[g+64>>0]=d;y=(d|0)==0&1;z=n+82|0;A=f+1|0;v=(e|0)!=0;w=n+16|0;x=n+4|0;u=n+8|0;k=0;m=0;d=0;t=0;l=0;e=0;n=f;i=0;j=0;b:while(1){p=k;k=0;c:while(1){d:while(1){s=e;e:while(1){r=k;o=i;f:while(1){q=m;g:while(1){while(1){if(t){E=78;break b}m=c[42327]|0;i=a[m>>0]|0;if((i+-1&255)>=31)break;c[42327]=m+1}switch(i<<24>>24|0){case 92:{E=53;break d}case 0:case 124:case 125:break e;case 60:break f;case 62:break g;case 123:break;default:{k=d;i=m;break d}}i=m+1|0;c[42327]=i;if(l|0){E=34;break b}if(!(a[i>>0]|0)){E=34;break b}e=Gy(b,y,0,f)|0;c[(c[B>>2]|0)+(q<<2)>>2]=e;if(!e){E=36;break b}else{q=q+1|0;l=4}}if(a[z>>0]|0){k=d;i=m;break d}if(!(l&16)){E=27;break b}if(o>>>0>A>>>0?(C=o+-1|0,(C|0)!=(s|0)):0)i=(a[C>>0]|0)==32?C:o;else i=o;a[i>>0]=0;r=HL(f)|0;c[42327]=(c[42327]|0)+1;m=q;l=l&-17;o=i}if(l&6|0){E=22;break b}if(a[z>>0]|0){k=d;i=m;break d}c[42327]=m+1;m=q;l=l|18;k=r;s=f;i=f}if(!((l&16|0)==0&(v|i<<24>>24!=0))){E=38;break b}if(!(l&4)){k=ww(72)|0;c[(c[B>>2]|0)+(q<<2)>>2]=k;m=q+1|0}else{k=p;m=q}if(r|0)c[k+60>>2]=r;if(!(l&5)){a[f+j>>0]=32;l=l|1;j=j+1|0}i=f+j|0;if(l&1){if((j|0)>1?(D=i+-1|0,(D|0)!=(n|0)):0)i=(a[D>>0]|0)==32?D:i;a[i>>0]=0;n=HL(f)|0;c[k+52>>2]=mw(b,n,a[z>>0]|0?2:0,+h[w>>3],c[x>>2]|0,c[u>>2]|0)|0;a[k+64>>0]=1;n=f;j=0}i=c[42327]|0;switch(a[i>>0]|0){case 0:{t=1;e=s;i=o;continue b}case 125:{E=51;break b}default:{}}c[42327]=i+1;p=k;l=0;k=0;e=s;i=o}h:do if((E|0)==53){E=0;k=f+j|0;i=m+1|0;switch(a[i>>0]|0){case 0:{k=d;i=m;break h}case 62:case 60:case 124:case 125:case 123:{k=d;break}case 32:{if(!(a[z>>0]|0))k=1;else E=55;break}default:E=55}if((E|0)==55){E=0;a[k>>0]=92;k=d;l=l|9;j=j+1|0}c[42327]=i}while(0);d=f+j|0;if(l&4|0?(a[i>>0]|0)!=32:0){E=59;break b}if(!(l&24))l=(a[i>>0]|0)==32?l:l|9;if(!(l&8))if(!(l&16))e=s;else{m=a[i>>0]|0;d=(k|0)!=0;if(!(d|m<<24>>24!=32))if((o|0)!=(f|0))if((a[o+-1>>0]|0)==32)m=o;else E=73;else m=f;else E=73;if((E|0)==73){E=0;a[o>>0]=m;m=o+1|0;i=c[42327]|0}e=d?m+-1|0:s;o=m}else{m=a[i>>0]|0;e=(k|0)!=0;if(!((!(e|m<<24>>24!=32)?(a[d+-1>>0]|0)==32:0)?(a[z>>0]|0)==0:0)){a[d>>0]=m;j=j+1|0}if(e){e=s;n=f+j+-1|0}else e=s}i=i+1|0;c[42327]=i;while(1){if((a[i>>0]|0)>=0){m=q;d=k;k=r;i=o;continue c}s=i+1|0;c[42327]=s;a[f+j>>0]=a[i>>0]|0;j=j+1|0;i=s}}}if((E|0)==22){Ly(g,r);g=0}else if((E|0)==27){Ly(g,r);g=0}else if((E|0)==34){Ly(g,r);g=0}else if((E|0)==36){Ly(g,r);g=0}else if((E|0)==38){Ly(g,r);g=0}else if((E|0)==51){c[42327]=i+1;c[g+48>>2]=m}else if((E|0)==59){Ly(g,r);g=0}else if((E|0)==78)c[g+48>>2]=q;return g|0}function Hy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;k=u+48|0;m=u+40|0;n=u+32|0;t=u+16|0;s=u;j=c[e+52>>2]|0;a:do if(!j){n=t+8|0;o=e+48|0;p=e+56|0;q=e+64|0;r=s+8|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;j=0;while(1){if((j|0)>=(c[o>>2]|0))break a;Hy(s,d,c[(c[p>>2]|0)+(j<<2)>>2]|0);if(!(a[q>>0]|0)){h[n>>3]=+h[n>>3]+ +h[r>>3];k=t;m=+h[t>>3]>+h[s>>3]?t:s}else{h[t>>3]=+h[t>>3]+ +h[s>>3];k=n;m=(+h[n>>3]>+h[r>>3]?t:s)+8|0}h[k>>3]=+h[m>>3];j=j+1|0}}else{g=+h[j+24>>3];f=+h[j+32>>3];if(g>0.0|f>0.0){j=Jm(d,90530)|0;do if(j){c[k>>2]=m;c[k+4>>2]=n;j=dM(j,90537,k)|0;if((j|0)<=0){i=8.0;g=g+16.0;break}i=+h[m>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0);g=g+i;if((j|0)!=1){i=+h[n>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0)}}else{i=8.0;g=g+16.0}while(0);f=i+f}h[t>>3]=g;h[t+8>>3]=f}while(0);c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];c[e+8>>2]=c[t+8>>2];c[e+12>>2]=c[t+12>>2];c[b>>2]=c[t>>2];c[b+4>>2]=c[t+4>>2];c[b+8>>2]=c[t+8>>2];c[b+12>>2]=c[t+12>>2];l=u;return}function Iy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;s=l;l=l+32|0;o=s+16|0;p=s;q=+h[d>>3];i=q-+h[b>>3];r=+h[d+8>>3];f=r-+h[b+8>>3];c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];d=c[b+52>>2]|0;if(!((e|0)!=0|(d|0)==0)){n=d+40|0;h[n>>3]=+h[n>>3]+i;n=d+48|0;h[n>>3]=+h[n>>3]+f}m=b+48|0;d=c[m>>2]|0;a:do if(d|0){n=b+64|0;f=((a[n>>0]|0)==0?f:i)/+(d|0);k=b+56|0;j=0;while(1){if((j|0)>=(d|0))break a;b=c[(c[k>>2]|0)+(j<<2)>>2]|0;g=j+1|0;d=~~(f*+(g|0))-~~(f*+(j|0))|0;if(!(a[n>>0]|0))Jy(p,q,+h[b+8>>3]+ +(d|0));else Jy(p,+h[b>>3]+ +(d|0),r);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];Iy(b,o,e);j=g;d=c[m>>2]|0}}while(0);l=s;return}function Jy(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Ky(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+48|0;j=q+32|0;n=q+16|0;m=q;a[b+65>>0]=e;k=b+16|0;s=+h[d>>3];p=d+8|0;r=+h[p>>3];Jy(n,s,r-+h[b+8>>3]);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];k=b+32|0;Jy(m,+h[b>>3]+s,r);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[b+48>>2]|0;m=k+-1|0;n=(e|0)==0;o=b+56|0;i=b+64|0;g=0;while(1){if((g|0)>=(k|0))break;do if(!n){b=(g|0)==0;f=(g|0)==(m|0);if(!(a[i>>0]|0))if(b){b=f?15:14;break}else{b=f?11:10;break}else if(b){b=f?15:13;break}else{b=f?7:5;break}}else b=0;while(0);f=c[(c[o>>2]|0)+(g<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];Ky(f,j,b&e);if(!(a[i>>0]|0))h[p>>3]=+h[p>>3]-+h[(c[(c[o>>2]|0)+(g<<2)>>2]|0)+8>>3];else h[d>>3]=+h[c[(c[o>>2]|0)+(g<<2)>>2]>>3]+ +h[d>>3];g=g+1|0}l=q;return}function Ly(a,b){a=a|0;b=b|0;My(a);$I(b);return}function My(a){a=a|0;var b=0,d=0,e=0;d=a+48|0;e=a+56|0;b=0;while(1){if((b|0)>=(c[d>>2]|0))break;My(c[(c[e>>2]|0)+(b<<2)>>2]|0);b=b+1|0}$I(c[a+60>>2]|0);pw(c[a+52>>2]|0);$I(c[e>>2]|0);$I(a);return}function Ny(a){a=a|0;var b=0.0,d=0.0;d=+FA(a,c[42191]|0,0.0,.01);b=+FA(a,c[42190]|0,0.0,.02);b=(d>b?d:b)*72.0;return +(+(~~(b+(b>=0.0?.5:-.5))|0))}function Oy(a,b){a=+a;b=+b;var c=0;c=~~(a/b);return +(+((+(c|0)*b+1.0e-05<a&1)+c|0)*b)}function Py(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[c[a+4>>2]>>2]|0)==75&1;return a|0}function Qy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[42328]|0;a:do if(!f)d=0;else{g=c[42329]|0;e=0;while(1){if((e|0)>=(g|0)){d=0;break a}d=c[f+(e<<2)>>2]|0;h=c[d>>2]|0;if((a[h>>0]|0)==(a[b>>0]|0)?(yJ(h,b)|0)==0:0)break a;e=e+1|0}}while(0);return d|0}function Ry(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(SA(Jm(d,90560)|0)|0)if((a[b>>0]|0)==101?(yJ(b,90725)|0)==0:0){d=101;g=6}else{b=90553;g=4}else g=4;if((g|0)==4){d=a[b>>0]|0;if(d<<24>>24==99)if(!(yJ(b,90553)|0))g=11;else{d=99;g=6}else g=6}a:do if((g|0)==6){e=19868;while(1){f=c[e>>2]|0;if(!f){g=11;break a}if((a[f>>0]|0)==d<<24>>24?(yJ(f,b)|0)==0:0){b=e;break a}e=e+16|0}}while(0);if((g|0)==11)b=Sy(b)|0;return b|0}function Sy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=Qy(b)|0;if(!d){f=c[42329]|0;d=f+1|0;c[42329]=d;e=c[42328]|0;if(!e)d=xw(d<<2)|0;else d=zw(e,d<<2)|0;c[42328]=d;d=ww(16)|0;c[(c[42328]|0)+(f<<2)>>2]=d;c[d>>2]=c[4967];c[d+4>>2]=c[4968];c[d+8>>2]=c[4969];c[d+12>>2]=c[4970];e=HL(b)|0;c[d>>2]=e;do if(!0){if((a[b>>0]|0)==99?(yJ(b,90553)|0)==0:0){e=1;break}c[g>>2]=c[4967];c[g+4>>2]=e;$l(0,90730,g)|0;e=0}else e=1;while(0);a[d+12>>0]=e}l=h;return d|0}function Ty(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[b>>3]*.5257311121191336;c=+h[b+8>>3]*.8944271909999159;c=d>c?d:c;h[a>>3]=c*4.97979656976556;h[a+8>>3]=c*4.73606797749979;return}function Uy(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0.0;d=+h[b>>3];k=b+8|0;e=+h[k>>3];c=e/d;if(!(c>.9510565162951536))if(c<.9510565162951536){j=d;e=d*.9510565162951536}else j=d;else j=e*1.0514622242382672;d=j*.5257311121191336;g=j*.20081141588622725;i=j*.05020285397155681;c=.3141592653589793;f=0;while(1){if((f|0)>=10)break;h[a+(f<<4)>>3]=+E(+c)*d;h[a+(f<<4)+8>>3]=+F(+c)*d-i;m=c+.6283185307179586;l=f|1;h[a+(l<<4)>>3]=+E(+m)*g;h[a+(l<<4)+8>>3]=+F(+m)*g-i;c=c+1.2566370614359172;f=f+2|0}h[b>>3]=j;h[k>>3]=e;return}function Vy(a){a=a|0;a=c[(c[a+16>>2]|0)+12>>2]|0;if(a|0){$I(c[a+44>>2]|0);$I(a)}return}function Wy(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+80|0;k=o+40|0;g=o;n=o+64|0;h=o+56|0;if(!(a[e>>0]|0)){g=4144;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}else{i=(f|0)==0?91400:f;c[n>>2]=15;j=d+16|0;f=c[j>>2]|0;do if(a[(c[f+104>>2]|0)+82>>0]|0){f=IF(d,e,n)|0;if(!f){f=c[j>>2]|0;m=8;break}if(iz(d,f,g,i,c[n>>2]|0,0)|0){c[k>>2]=En(d)|0;c[k+4>>2]=e;c[k+8>>2]=i;$l(0,91402,k)|0}}else m=8;while(0);if((m|0)==8){if((c[(c[f+8>>2]|0)+8>>2]|0)==1600)h=0;else{c[h>>2]=d;c[h+4>>2]=0}if(iz(d,0,g,e,c[n>>2]|0,h)|0)jz(d,e)}c[g+36>>2]=0;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}l=o;return}function Xy(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0;r=l;l=l+112|0;n=r+96|0;m=r+80|0;p=r+64|0;k=r+48|0;q=r+32|0;o=r;f=r+16|0;if(!a){c[42332]=0;a=0}else{g=c[a+4>>2]|0;a=c[a>>2]|0;i=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];bw(f,n,i);c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[q+8>>2]=c[f+8>>2];c[q+12>>2]=c[f+12>>2];a:do if(g){d=+h[g+8>>3];e=+h[g+24>>3];s=+h[q>>3];if((+h[g>>3]<=s?s<=+h[g+16>>3]:0)?(j=+h[q+8>>3],d<=j):0)a=j<=e&1;else a=0}else{if((a|0)==(c[42332]|0)){f=c[42333]|0;g=c[42335]|0;i=c[42334]|0}else{g=c[(c[a+16>>2]|0)+12>>2]|0;c[42336]=g;i=c[g+44>>2]|0;c[42334]=i;f=c[g+8>>2]|0;c[42333]=f;g=O((c[g+4>>2]|0)+-1|0,f)|0;g=(g|0)>0?g:0;c[42335]=g;c[42332]=a}a=0;b=0;while(1){if((a|0)>=(f|0)){a=1;break a}t=i+(g+a<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=i+(g+((a+4|0)%(f|0)|0)<<4)|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[p>>2]=c[41802];c[p+4>>2]=c[41803];c[p+8>>2]=c[41804];c[p+12>>2]=c[41805];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];b=b+((hz(k,p,m,n)|0)==0&1)|0;if((b|0)==2){a=0;break}else a=a+2|0}}while(0)}l=r;return a|0}function Yy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;e=c[b+16>>2]|0;if((a[(c[e+104>>2]|0)+82>>0]|0)!=0?(a[e+145>>0]|0)!=0:0)b=LF(b,d,0,f,g)|0;else b=0;return b|0}function Zy(e,f){e=e|0;f=f|0;var i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;P=l;l=l+48|0;H=P+24|0;G=P+16|0;A=P+8|0;z=P;L=P+32|0;n=P+28|0;M=c[e+16>>2]|0;N=M+208|0;i=c[N>>2]|0;if((i|0)==0?(b[M+260>>1]&1)==0:0)J=0;else E=4;if((E|0)==4)if(!(c[e+152>>2]&4)){xD(e,i,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);J=1}else J=1;I=f+16|0;i=c[I>>2]|0;r=c[i+12>>2]|0;F=c[r+44>>2]|0;K=c[r+8>>2]|0;r=c[r+4>>2]|0;if((c[42330]|0)<(K|0)){i=K+5|0;c[42330]=i;j=c[42331]|0;if(!j)i=xw(i<<4)|0;else i=zw(j,i<<4)|0;c[42331]=i;i=c[I>>2]|0}D=(c[i+104>>2]|0)+56|0;i=i+16|0;c[D>>2]=c[i>>2];c[D+4>>2]=c[i+4>>2];c[D+8>>2]=c[i+8>>2];c[D+12>>2]=c[i+12>>2];D=c[I>>2]|0;B=+h[D+32>>3]*72.0;B=(+h[D+96>>3]+ +h[D+88>>3])/+(~~(B+(B>=0.0?.5:-.5))|0);C=+h[D+40>>3]*72.0;C=+h[D+80>>3]/+(~~(C+(C>=0.0?.5:-.5))|0);D=_y(e,f)|0;c[L>>2]=0;i=d[(c[I>>2]|0)+117>>0]|0;do if(!(i&1)){if(i&2|0){s=HA(f,0,91300)|0;CD(e,s);ED(e,HA(f,0,91308)|0);j=0;i=1;break}if(i&8|0){s=HA(f,0,91316)|0;CD(e,s);ED(e,HA(f,0,91324)|0);j=0;i=1;break}if(i&4|0){s=HA(f,0,91332)|0;CD(e,s);ED(e,HA(f,0,91340)|0);j=0;i=1;break}if(!(D&1))if(!(D&576)){j=0;i=0}else{j=$y(f)|0;i=1}else{j=$y(f)|0;if(!((yv(j,L,n)|0)<<24>>24)){ED(e,j);i=1}else{ED(e,c[L>>2]|0);i=c[L+4>>2]|0;m=EA(f,c[42218]|0,0,0)|0;k=+g[n>>2];if(!i)FD(e,122106,m,k);else FD(e,i,m,k);i=(D&2)>>>1|2}}s=az(e,f)|0}else{s=HA(f,0,91284)|0;CD(e,s);ED(e,HA(f,0,91292)|0);j=0;i=1}while(0);m=c[(c[I>>2]|0)+8>>2]|0;if(a[m+12>>0]|0){m=c[m>>2]|0;if((a[m>>0]|0)==99){m=(yJ(m,90553)|0)==0;E=33}else u=1}else{m=1;E=33}if((E|0)==33){m=m^1;if((r|0)!=0|i<<24>>24==0|m)u=m;else{CD(e,122171);r=1;u=0}}v=(K|0)<3;w=(D&512|0)!=0;y=(D&8|0)==0;x=(D&64|0)==0;p=(D&1024|0)==0;q=(D&2130706444|0)==0;t=0;while(1){if((t|0)>=(r|0))break;n=O(t,K)|0;o=c[42331]|0;m=0;while(1){if((m|0)>=(K|0))break;R=m+n|0;k=+h[F+(R<<4)+8>>3];Q=c[I>>2]|0;h[o+(m<<4)>>3]=+h[Q+16>>3]+ +h[F+(R<<4)>>3]*B;h[o+(m<<4)+8>>3]=+h[Q+24>>3]+k*C;m=m+1|0}do if(v){if(w&(t|0)==0?(XJ(j,58)|0)!=0:0)if(($t(e,o,j)|0)>1){c[z>>2]=En(f)|0;$l(3,91348,z)|0;i=0}else i=0;HD(e,c[42331]|0,K,i&255);if(!y)bz(e,f)}else{if(!x){if((t|0)==0?(du(e,o,j,1)|0)>1:0){c[A>>2]=En(f)|0;$l(3,91348,A)|0}ID(e,c[42331]|0,K,0);break}if(!p){CD(e,122171);ID(e,c[42331]|0,K,i&255);CD(e,s);LD(e,(c[42331]|0)+32|0,2);break}i=i&255;if(q){ID(e,o,K,i);break}else{zy(e,o,K,D,i);break}}while(0);t=t+1|0;i=0}m=c[(c[I>>2]|0)+8>>2]|0;if(!(a[m+12>>0]|0)){m=Jm(f,93847)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{m=c[m>>2]|0;if((a[m>>0]|0)==99?(yJ(m,90553)|0)==0:0){m=Jm(f,90560)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{o=m;E=65}}if((E|0)==65){n=c[42331]|0;m=0;while(1){if((m|0)>=(K|0))break;k=+h[F+(m<<4)+8>>3];R=c[I>>2]|0;h[n+(m<<4)>>3]=+h[R+16>>3]+ +h[F+(m<<4)>>3]*B;h[n+(m<<4)+8>>3]=+h[R+24>>3]+k*C;m=m+1|0}m=i&255;do if(!(u|i<<24>>24==0)){if(v){if(w&(t|0)==0?(XJ(j,58)|0)!=0:0)if(($t(e,n,j)|0)>1){c[G>>2]=En(f)|0;$l(3,91348,G)|0;i=0}else i=0;HD(e,c[42331]|0,K,i&255);if(y)break;bz(e,f);break}if(x)if(!(D&12)){ID(e,n,K,m);break}else{zy(e,n,K,D,m);break}else{if((du(e,n,j,1)|0)>1){c[H>>2]=En(f)|0;$l(3,91348,H)|0}ID(e,c[42331]|0,K,0);break}}while(0);R=c[42331]|0;ND(e,o,R,K,i,GA(f,c[42211]|0,122100)|0)}$I(c[L>>2]|0);qw(e,10,c[(c[I>>2]|0)+104>>2]|0);if(J){if(c[e+152>>2]&4|0)xD(e,c[N>>2]|0,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);yD(e)}l=P;return}function _y(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;e=ez(d,f)|0;if(e|0)GD(b,e);e=c[42217]|0;if((e|0?(g=Km(d,e)|0,g|0):0)?a[g>>0]|0:0)PD(b,+FA(d,c[42217]|0,1.0,0.0));l=h;return c[f>>2]|0}function $y(a){a=a|0;return dz(a,119592)|0}function az(b,d){b=b|0;d=d|0;d=HA(d,c[42193]|0,174185)|0;d=a[d>>0]|0?d:122106;CD(b,d);return d|0}function bz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0;d=l;l=l+96|0;j=d+80|0;k=d+64|0;e=d+32|0;m=d+16|0;g=d;b=c[b+16>>2]|0;f=+h[b+80>>3];h[m+8>>3]=f*.375;i=+h[b+96>>3];h[m>>3]=i*.6614;b=b+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];cz(g,k,j);c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];g=e+8|0;b=e+24|0;h[b>>3]=+h[g>>3];h[e+16>>3]=+h[e>>3]-i*1.3228;LD(a,e,2);f=+h[g>>3]-f*.75;h[g>>3]=f;h[b>>3]=f;LD(a,e,2);l=d;return}function cz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function dz(b,d){b=b|0;d=d|0;var e=0;e=HA(b,c[42194]|0,174185)|0;if(!(a[e>>0]|0)){e=HA(b,c[42193]|0,174185)|0;return ((a[e>>0]|0)==0?d:e)|0}else return e|0;return 0}function ez(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=HA(b,c[42202]|0,174185)|0;a:do if(!(a[e>>0]|0)){g=0;e=0}else{g=Eu(e)|0;h=g;e=0;b:while(1){f=c[h>>2]|0;if(!f)break a;switch(a[f>>0]|0){case 102:{if(!(yJ(f,95923)|0)){h=h+4|0;e=e|1;continue b}break}case 114:{if(!(yJ(f,91360)|0)){f=h;do{j=f;f=f+4|0;i=c[f>>2]|0;c[j>>2]=i}while((i|0)!=0);j=h;e=e|4;h=j;continue b}if(!(yJ(f,91378)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|3;h=j;continue b}break}case 100:{if(!(yJ(f,91368)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|8;h=j;continue b}break}case 105:{if(!(yJ(f,119127)|0)){h=h+4|0;e=e|32;continue b}break}case 115:{if((yJ(f,91385)|0)==0?fz(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|64;h=j;continue b}break}case 119:{if((yJ(f,91393)|0)==0?gz(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|512;h=j;continue b}break}default:{}}h=h+4|0}}while(0);f=c[(c[(c[b+16>>2]|0)+8>>2]|0)+8>>2]|0;if(f)e=c[f+40>>2]|e;c[d>>2]=e;return g|0}function fz(a){a=a|0;var b=0.0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if((((a|0)!=0?(c[a+8>>2]|0)==4:0)?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function gz(a){a=a|0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[a+8>>2]|0)<3&1;return a|0}function hz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;i=+h[c+8>>3];g=-(+h[d+8>>3]-i);f=+h[c>>3];e=+h[d>>3]-f;f=e*i+f*g;return (+h[a+8>>3]*e+ +h[a>>3]*g-f>=0.0^+h[b>>3]*g-f+ +h[b+8>>3]*e>=0.0^1)&1|0}function iz(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;G=l;l=l+192|0;B=G+176|0;E=G+160|0;m=G+144|0;z=G+128|0;A=G+112|0;n=G+96|0;o=G+80|0;p=G+64|0;v=G+48|0;w=G+32|0;x=G+16|0;D=G;if(!d){c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;m=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)==0;C=c[b+16>>2]|0;q=+h[C+80>>3]*.5;j=+h[C+88>>3];t=m?q:j;q=m?j:q;m=0;C=E;j=0.0;k=-q;r=t;F=E+8|0;s=0.0;t=-t}else{k=+h[d>>3];t=+h[d+8>>3];q=+h[d+16>>3];r=+h[d+24>>3];Jy(m,(q+k)*.5,(r+t)*.5);c[E>>2]=c[m>>2];c[E+4>>2]=c[m+4>>2];c[E+8>>2]=c[m+8>>2];c[E+12>>2]=c[m+12>>2];H=E+8|0;m=1;C=E;j=+h[E>>3];F=H;s=+h[H>>3]}u=(q>r?q:r)*4.0;a:do if((f|0)!=0?(y=a[f>>0]|0,y<<24>>24!=0):0){f=f+1|0;switch(y<<24>>24|0){case 99:{p=1;g=0;f=0;n=0;j=0.0;o=0;break a}case 101:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=q;else{kz(z,i,s,u);c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2]}p=0;g=g&2;f=0;n=1;j=0.0;o=0;m=1;break a}case 115:{h[F>>3]=t;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{kz(A,i,-u,j);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2]}p=0;g=g&1;f=0;n=1;j=-1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{kz(n,i,-u,u);c[E>>2]=c[n>>2];c[E+4>>2]=c[n+4>>2];c[E+8>>2]=c[n+8>>2];c[E+12>>2]=c[n+12>>2]}p=0;g=g&3;f=0;n=1;j=-.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{u=-u;kz(o,i,u,u);c[E>>2]=c[o>>2];c[E+4>>2]=c[o+4>>2];c[E+8>>2]=c[o+8>>2];c[E+12>>2]=c[o+12>>2]}p=0;g=g&9;f=0;n=1;j=-2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 119:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=k;else{kz(p,i,s,-u);c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[E+8>>2]=c[p+8>>2];c[E+12>>2]=c[p+12>>2]}p=0;g=g&8;f=0;n=1;j=3.141592653589793;o=0;m=1;break a}case 110:{h[F>>3]=r;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{kz(v,i,u,j);c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2]}p=0;g=g&4;f=0;n=1;j=1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{kz(w,i,u,u);c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[E+8>>2]=c[w+8>>2];c[E+12>>2]=c[w+12>>2]}p=0;g=g&6;f=0;n=1;j=.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{kz(x,i,u,-u);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2]}p=0;g=g&12;f=0;n=1;j=2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 95:{p=1;f=1;n=0;j=0.0;o=0;break a}default:{p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}else{p=1;g=0;f=0;n=0;j=0.0;o=0}while(0);H=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&3)*90|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];aw(D,B,H);c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];if(!(f<<24>>24))g=lz(g,c[(c[(so(b)|0)+16>>2]|0)+116>>2]&3)|0;a[e+33>>0]=g;c[e+24>>2]=d;k=+h[C>>3];h[e>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);k=+h[F>>3];h[e+8>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);h[e+16>>3]=+mz(j,c[(c[(so(b)|0)+16>>2]|0)+116>>2]&3);k=+h[C>>3];j=+h[F>>3];if(k==0.0&j==0.0)g=-128;else{u=+K(+j,+k);t=u+4.71238898038469;g=~~((!(t>=6.283185307179586)?t:u+-1.5707963267948966)*40.74366543152521)&255}a[e+32>>0]=g;a[e+29>>0]=n;a[e+28>>0]=m;a[e+30>>0]=p;a[e+31>>0]=f;l=G;return o|0}function jz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=En(a)|0;c[e+4>>2]=b;$l(0,91463,e)|0;l=d;return}function kz(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+128|0;g=p+112|0;j=p+48|0;k=p+16|0;m=p+32|0;n=p;o=c[b>>2]|0;i=c[(c[(so(o)|0)+16>>2]|0)+116>>2]&3;h[k>>3]=e;h[k+8>>3]=d;f=(i|0)!=0;if(f){c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];aw(m,g,i*90|0);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}m=j+48|0;q=j+32|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];Gz(b,c[(c[(c[(c[o+16>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0,j,1);if(f){c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];bw(n,g,i*90|0);c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2]};c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=p;return}function lz(a,b){a=a|0;b=b|0;a:do switch(b|0){case 3:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=1;break a}case 2:{a=4;break a}default:break a}case 2:switch(a|0){case 4:{a=1;break a}case 1:{a=4;break a}default:break a}case 1:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=4;break a}case 2:{a=1;break a}default:break a}default:{}}while(0);return a|0}function mz(a,b){a=+a;b=b|0;switch(b|0){case 3:{if(!(a==3.141592653589793))if(!(a==2.356194490192345))if(!(a==1.5707963267948966))if(!(a==0.0))if(!(a==-.7853981633974483)){if(a==-1.5707963267948966)a=3.141592653589793}else a=2.356194490192345;else a=1.5707963267948966;else a=0.0;else a=-.7853981633974483;else a=-1.5707963267948966;break}case 2:{a=-a;break}case 1:{a=a+-1.5707963267948966;break}default:{}}return +a}function nz(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;e=l;l=l+32|0;k=e+16|0;i=e;a=c[a>>2]|0;j=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];bw(i,k,j);d=+h[i>>3];g=+h[i+8>>3];a=c[a+16>>2]|0;f=+h[a+80>>3]*.5;if(!(!(g>=-f)|!(g<=f))?d>=-+h[a+88>>3]:0)a=d<=+h[a+96>>3]&1;else a=0;l=e;return a|0}function oz(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+32|0;m=n;i=c[a+16>>2]|0;j=i+208|0;g=c[j>>2]|0;if(!g)k=(b[i+260>>1]&1)!=0;else k=1;e=d+16|0;d=c[e>>2]|0;f=c[d+12>>2]|0;if(f|0){if(k?(c[a+152>>2]&4|0)==0:0){xD(a,g,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);d=c[e>>2]|0}g=c[a+36>>2]|0;p=+h[d+24>>3]+ +(c[f+8>>2]|0);o=c[f>>2]|0;h[m>>3]=+h[d+16>>3]+ +(c[f+4>>2]|0);h[m+8>>3]=p;c[m+16>>2]=o;AL(g,91494,m)|0;g=c[e>>2]|0;m=(c[g+104>>2]|0)+56|0;g=g+16|0;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];qw(a,10,c[(c[e>>2]|0)+104>>2]|0);if(k){if(c[a+152>>2]&4|0)xD(a,c[j>>2]|0,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);yD(a)}}l=n;return}function pz(a){a=a|0;My(c[(c[a+16>>2]|0)+12>>2]|0);return}function qz(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;k=m+40|0;h=m;if(!(a[f>>0]|0)){h=4144;g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}else{g=(g|0)==0?91400:g;i=c[(c[e+16>>2]|0)+12>>2]|0;j=wz(i,f)|0;if(!j){if(iz(e,i+16|0,h,f,15,0)|0)jz(e,f)}else if(iz(e,j+16|0,h,g,d[j+65>>0]|0,0)|0){c[k>>2]=En(e)|0;c[k+4>>2]=f;c[k+8>>2]=g;$l(0,91402,k)|0}g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}l=m;return}function rz(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0.0;k=l;l=l+32|0;m=k+16|0;i=k;f=c[a+4>>2]|0;a=c[a>>2]|0;g=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];bw(i,m,g);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];if(!f){f=c[(c[a+16>>2]|0)+12>>2]|0;g=f+16|0;a=f+24|0;i=f+32|0;f=f+40|0}else{g=f;a=f+8|0;i=f+16|0;f=f+24|0}e=+h[a>>3];d=+h[f>>3];n=+h[b>>3];if((+h[g>>3]<=n?n<=+h[i>>3]:0)?(j=+h[b+8>>3],e<=j):0)a=j<=d&1;else a=0;l=k;return a|0}function sz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0;u=l;l=l+80|0;r=u+64|0;q=u+32|0;t=u;a:do if(!(a[d+28>>0]|0))e=0;else{i=+h[d>>3];p=b+16|0;m=c[(c[p>>2]|0)+12>>2]|0;k=m+48|0;m=m+56|0;d=0;while(1){if((d|0)>=(c[k>>2]|0))break a;n=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[(c[m>>2]|0)+(d<<2)>>2]|0;j=+(~~+h[(n?o+16|0:o+24|0)>>3]|0);if(i>=j?(s=+(~~+h[(n?o+32|0:o+40|0)>>3]|0),i<=s):0)break;d=d+1|0}if(!(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1)){t=c[p>>2]|0;v=+h[t+16>>3];h[f>>3]=v+j;j=+h[t+24>>3];i=+h[t+80>>3];h[f+8>>3]=j-i*.5;h[f+16>>3]=v+s}else{o=(c[(c[m>>2]|0)+(d<<2)>>2]|0)+16|0;b=(c[p>>2]|0)+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];c[q+16>>2]=c[o+16>>2];c[q+20>>2]=c[o+20>>2];c[q+24>>2]=c[o+24>>2];c[q+28>>2]=c[o+28>>2];c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];cw(t,q,r);c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];c[f+16>>2]=c[t+16>>2];c[f+20>>2]=c[t+20>>2];c[f+24>>2]=c[t+24>>2];c[f+28>>2]=c[t+28>>2];t=c[p>>2]|0;i=+h[t+80>>3];j=+h[t+24>>3]}h[f+24>>3]=i*.5+j;c[g>>2]=1}while(0);l=u;return e|0}function tz(d,e){d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;w=l;l=l+144|0;n=w+96|0;p=w+64|0;r=w;s=w+128|0;t=c[d+16>>2]|0;u=t+208|0;f=c[u>>2]|0;if(!f)v=(b[t+260>>1]&1)!=0;else v=1;m=e+16|0;q=c[m>>2]|0;o=c[q+12>>2]|0;j=o+16|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];c[p+8>>2]=c[j+8>>2];c[p+12>>2]=c[j+12>>2];c[p+16>>2]=c[j+16>>2];c[p+20>>2]=c[j+20>>2];c[p+24>>2]=c[j+24>>2];c[p+28>>2]=c[j+28>>2];x=+h[q+16>>3];h[p>>3]=+h[p>>3]+x;k=+h[q+24>>3];q=p+8|0;h[q>>3]=+h[q>>3]+k;q=p+16|0;h[q>>3]=+h[q>>3]+x;j=p+24|0;h[j>>3]=+h[j>>3]+k;if(v?(c[d+152>>2]&4|0)==0:0)xD(d,f,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);f=_y(d,e)|0;az(d,e)|0;c[s>>2]=0;if(!(f&1))i=0;else{i=$y(e)|0;if(!((yv(i,s,n)|0)<<24>>24)){ED(d,i);i=1}else{ED(d,c[s>>2]|0);i=c[s+4>>2]|0;j=EA(e,c[42218]|0,0,0)|0;k=+g[n>>2];if(!i)FD(d,122106,j,k);else FD(d,i,j,k);i=f>>>1&1|2}}j=c[c[(c[m>>2]|0)+8>>2]>>2]|0;if((a[j>>0]|0)==77){m=(yJ(j,91271)|0)==0;f=m?f|4:f}if(!(f&2130706444)){c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[n+16>>2]=c[p+16>>2];c[n+20>>2]=c[p+20>>2];c[n+24>>2]=c[p+24>>2];c[n+28>>2]=c[p+28>>2];JD(d,n,i)}else{c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+32|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[r+16>>3]=+h[p>>3];h[r+24>>3]=+h[r+8>>3];h[r+48>>3]=+h[r>>3];h[r+56>>3]=+h[r+40>>3];zy(d,r,4,f,i)}uz(d,e,o);$I(c[s>>2]|0);if(v){if(c[d+152>>2]&4|0)xD(d,c[u>>2]|0,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);yD(d)}l=w;return}function uz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+144|0;p=u+128|0;o=u+112|0;q=u+16|0;r=u;g=u+96|0;i=u+80|0;s=u+64|0;t=u+48|0;j=e+52|0;f=c[j>>2]|0;if(!f)f=d+16|0;else{n=f+56|0;m=e+16|0;f=e+32|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];vz(g,o,p);f=d+16|0;m=(c[f>>2]|0)+16|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2];cz(i,o,p);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];qw(b,10,c[j>>2]|0);az(b,d)|0}k=(c[f>>2]|0)+16|0;c[r>>2]=c[k>>2];c[r+4>>2]=c[k+4>>2];c[r+8>>2]=c[k+8>>2];c[r+12>>2]=c[k+12>>2];k=e+48|0;m=e+64|0;n=q+16|0;j=e+56|0;e=q+16|0;i=0;while(1){if((i|0)>=(c[k>>2]|0))break;if((i|0)>0){f=(c[j>>2]|0)+(i<<2)|0;g=c[f>>2]|0;if(!(a[m>>0]|0)){g=g+32|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];h[q>>3]=+h[(c[f>>2]|0)+16>>3];f=n;g=0}else{g=g+16|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[q+8>>2]=c[g+8>>2];c[q+12>>2]=c[g+12>>2];h[e>>3]=+h[q>>3];f=(c[f>>2]|0)+32|0;g=1}h[q+(g<<4)+8>>3]=+h[f+8>>3];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];cz(s,o,p);c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];cz(t,o,p);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];LD(b,q,2)}uz(b,d,c[(c[j>>2]|0)+(i<<2)>>2]|0);i=i+1|0}l=u;return}function vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function wz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[b+60>>2]|0;if(!(((e|0)!=0?(a[e>>0]|0)==(a[d>>0]|0):0)?(yJ(e,d)|0)==0:0))f=4;a:do if((f|0)==4){g=b+56|0;f=c[b+48>>2]|0;e=0;while(1){if((e|0)>=(f|0)){b=0;break a}b=wz(c[(c[g>>2]|0)+(e<<2)>>2]|0,d)|0;if(!b)e=e+1|0;else break}}while(0);return b|0}function xz(a,b){a=a|0;b=b|0;var d=0;d=b+8|0;h[d>>3]=+h[d>>3]*1.375;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function yz(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;k=+h[b>>3];f=k*.5;m=+h[b+8>>3];i=m*.5;h[a>>3]=f;e=m*.40909090909090906;h[a+8>>3]=e;h[a+16>>3]=f;g=m*.4592530909090909;h[a+24>>3]=g;j=k*.275892;h[a+32>>3]=j;h[a+40>>3]=i;h[a+48>>3]=0.0;h[a+56>>3]=i;k=k*-.275892;h[a+64>>3]=k;h[a+72>>3]=i;l=-f;h[a+80>>3]=l;h[a+88>>3]=g;d=a+96|0;h[d>>3]=l;h[a+104>>3]=e;b=a+112|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+128|0;h[b>>3]=l;h[a+136>>3]=m*-.40909090909090906;d=a+144|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[a+160>>3]=l;g=-g;h[a+168>>3]=g;h[a+176>>3]=k;i=-i;h[a+184>>3]=i;h[a+192>>3]=0.0;h[a+200>>3]=i;h[a+208>>3]=j;h[a+216>>3]=i;h[a+224>>3]=f;h[a+232>>3]=g;d=a+240|0;h[d>>3]=f;h[a+248>>3]=-e;b=a+256|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+288|0;d=a+272|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];return}function zz(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+144|0;u=x+112|0;t=x+96|0;v=x+80|0;s=x+64|0;w=x+32|0;q=x+16|0;r=x;g=x+48|0;do if(a){j=c[a+4>>2]|0;k=c[a>>2]|0;o=(c[(c[(so(k)|0)+16>>2]|0)+116>>2]&3)*90|0;c[u>>2]=c[b>>2];c[u+4>>2]=c[b+4>>2];c[u+8>>2]=c[b+8>>2];c[u+12>>2]=c[b+12>>2];bw(g,u,o);c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if(j|0){d=+h[w>>3];if(!(+h[j>>3]<=d)){a=0;break}if(!(d<=+h[j+16>>3])){a=0;break}d=+h[w+8>>3];if(!(+h[j+8>>3]<=d)){a=0;break}a=d<=+h[j+24>>3];break}if((k|0)==(c[42337]|0)){d=+h[20903];e=+h[20904];i=+h[20905]}else{a=k+16|0;b=c[(c[a>>2]|0)+12>>2]|0;c[42338]=b;c[42339]=c[b+44>>2];c[42340]=c[b+8>>2];if(!(c[b+40>>2]&2048)){n=(c[(c[(so(k)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[a>>2]|0;h[(n?167248:167256)>>3]=+h[o+96>>3]+ +h[o+88>>3];h[(n?167256:167248)>>3]=+h[o+80>>3];i=+h[o+32>>3]*72.0;f=+h[o+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);i=+(~~(i+(i>=0.0?.5:-.5))|0)}else{bB(u,b);i=+h[u+16>>3]-+h[u>>3];f=+h[u+24>>3]-+h[u+8>>3];o=(c[(c[(so(k)|0)+16>>2]|0)+116>>2]&1|0)==0;h[(o?167248:167256)>>3]=i;h[(o?167256:167248)>>3]=f}d=+h[20906];if(d==0.0){h[20906]=1.0;d=1.0}e=+h[20907];if(e==0.0){h[20907]=1.0;e=1.0}d=i/d;h[20903]=d;e=f/e;h[20904]=e;i=i*.5;h[20905]=i;h[20908]=f*.5;o=O((c[(c[42338]|0)+4>>2]|0)+-1|0,c[42340]|0)|0;c[42341]=(o|0)>0?o:0;c[42337]=k}f=+h[w>>3]*d;h[w>>3]=f;o=w+8|0;d=+h[o>>3]*e;h[o>>3]=d;if(!(+B(+f)>i)?(e=+B(+d),p=+h[20908],!(e>p)):0){o=c[42340]|0;if((o|0)<3){a=+RJ(f/i,d/p)<1.0;break}b=(c[42342]|0)%(o|0)|0;a=(b+1|0)%(o|0)|0;k=c[42339]|0;m=c[42341]|0;n=k+(m+b<<4)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];n=k+(m+a<<4)|0;c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[41818];c[v+4>>2]=c[41819];c[v+8>>2]=c[41820];c[v+12>>2]=c[41821];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];if(hz(s,v,t,u)|0){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[q>>2];c[v+4>>2]=c[q+4>>2];c[v+8>>2]=c[q+8>>2];c[v+12>>2]=c[q+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[u>>2]=c[41818];c[u+4>>2]=c[41819];c[u+8>>2]=c[41820];c[u+12>>2]=c[41821];n=(hz(s,v,t,u)|0)!=0;if(n?(c[s>>2]=c[w>>2],c[s+4>>2]=c[w+4>>2],c[s+8>>2]=c[w+8>>2],c[s+12>>2]=c[w+12>>2],c[v>>2]=c[r>>2],c[v+4>>2]=c[r+4>>2],c[v+8>>2]=c[r+8>>2],c[v+12>>2]=c[r+12>>2],c[t>>2]=c[41818],c[t+4>>2]=c[41819],c[t+8>>2]=c[41820],c[t+12>>2]=c[41821],c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],c[u+12>>2]=c[q+12>>2],(hz(s,v,t,u)|0)!=0):0){a=1;break}else{j=b;b=1}while(1){if((b|0)>=(o|0)){b=31;break}if(n){g=a;a=(a+1|0)%(o|0)|0}else{g=(j+-1+o|0)%(o|0)|0;a=j}q=k+(m+g<<4)|0;r=k+(m+a<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[41818];c[v+4>>2]=c[41819];c[v+8>>2]=c[41820];c[v+12>>2]=c[41821];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];if(!(hz(s,v,t,u)|0)){b=30;break}else{j=g;b=b+1|0}}if((b|0)==30){c[42342]=g;a=0;break}else if((b|0)==31){c[42342]=j;a=1;break}}else a=0}else a=0}else{c[42337]=0;a=0}while(0);l=x;return a&1|0}function Az(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;j=l;l=l+32|0;f=j+16|0;i=j;if(a){a=c[a>>2]|0;k=(c[(c[(so(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];bw(i,f,k);g=+h[i>>3];e=+h[i+8>>3];if((a|0)==(c[42345]|0))d=+h[20911];else{i=c[(c[a+16>>2]|0)+12>>2]|0;k=(c[i+4>>2]<<1)+-2|0;d=+h[(c[i+44>>2]|0)+((((k|0)>0?k:0)|1)<<4)>>3];h[20911]=d;c[42345]=a}if(+B(+g)>d|+B(+e)>d)a=0;else a=+RJ(g,e)<=d&1}else{c[42345]=0;a=0}l=j;return a|0}function Bz(e,f){e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0;t=l;l=l+16|0;j=t;r=c[e+16>>2]|0;s=r+208|0;g=c[s>>2]|0;if((g|0)==0?(b[r+260>>1]&1)==0:0)q=0;else if(!(c[e+152>>2]&4)){xD(e,g,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);q=1}else q=1;n=f+16|0;k=c[(c[n>>2]|0)+12>>2]|0;o=c[k+44>>2]|0;p=c[k+8>>2]|0;k=c[k+4>>2]|0;if((c[42343]|0)<(p|0)){g=p+2|0;c[42343]=g;i=c[42344]|0;if(!i)g=xw(g<<4)|0;else g=zw(i,g<<4)|0;c[42344]=g}ez(f,j)|0;if(!(c[j>>2]&32))GD(e,21040);else GD(e,21036);g=c[42217]|0;if(g|0)PD(e,+FA(f,g,1.0,0.0));g=d[(c[n>>2]|0)+117>>0]|0;do if(!(g&1)){if(g&2|0){CD(e,HA(f,0,91300)|0);g=HA(f,0,91308)|0;ED(e,g);break}if(g&8|0){CD(e,HA(f,0,91316)|0);g=HA(f,0,91324)|0;ED(e,g);break}if(!(g&4)){g=dz(f,122106)|0;ED(e,g);az(e,f)|0;break}else{CD(e,HA(f,0,91332)|0);g=HA(f,0,91340)|0;ED(e,g);break}}else{CD(e,HA(f,0,91284)|0);g=HA(f,0,91292)|0;ED(e,g)}while(0);if(!k)if(!(a[g>>0]|0))i=1;else{CD(e,g);i=1}else i=k;j=1;f=0;while(1){if((f|0)>=(i|0))break;k=O(f,p)|0;m=c[42344]|0;g=0;while(1){if((g|0)>=(p|0))break;w=g+k|0;u=+h[o+(w<<4)+8>>3];v=c[n>>2]|0;h[m+(g<<4)>>3]=+h[v+16>>3]+ +h[o+(w<<4)>>3];h[m+(g<<4)+8>>3]=+h[v+24>>3]+u;g=g+1|0}HD(e,m,p,j);j=0;f=f+1|0}if(q){if(c[e+152>>2]&4|0)xD(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);yD(e)}l=t;return}function Cz(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+48|0;h=g;e=Dz(b,e,f)|0;c[h+36>>2]=c[f+36>>2];iz(b,c[f+24>>2]|0,h,e,d[f+33>>0]|0,0)|0;b=h;e=a+40|0;do{c[a>>2]=c[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(e|0));l=g;return}function Dz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0;z=l;l=l+32|0;y=z;g=z+24|0;k=z+16|0;x=c[(c[(c[(so(b)|0)+60>>2]|0)+16>>2]|0)+116>>2]&3;f=b+16|0;w=(c[f>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];Ez(g,y,x);w=(c[d+16>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];Ez(k,y,x);x=a[e+33>>0]|0;y=x&255;a:do switch(x<<24>>24){case 0:case 15:{d=0;break}default:{d=c[e+24>>2]|0;if(!d){x=(c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1|0)==0;w=c[f>>2]|0;B=+h[w+80>>3]*.5;A=-B;m=+h[w+88>>3];j=-m;n=x?j:A;i=x?m:B;m=x?B:m;j=x?A:j}else{n=+h[d>>3];i=+h[d+16>>3];m=+h[d+24>>3];j=+h[d+8>>3]}x=c[g>>2]|0;v=c[g+4>>2]|0;w=c[k>>2]|0;s=c[k+4>>2]|0;t=~~j;u=~~((i+n)*.5);r=~~i;q=~~((m+j)*.5);p=~~m;o=~~n;g=0;k=0;d=0;e=0;b=0;while(1){if((k|0)==4)break a;if(1<<k&y){switch(k|0){case 0:{e=u;b=t;break}case 1:{e=r;b=q;break}case 2:{e=u;b=p;break}case 3:{e=o;b=q;break}default:{}}e=x+e|0;b=v+b|0;f=e-w|0;C=b-s|0;f=(O(C,C)|0)+(O(f,f)|0)|0;if((d|0)==0|(f|0)<(g|0))d=c[21048+(k<<2)>>2]|0;else f=g}else f=g;g=f;k=k+1|0}}}while(0);l=z;return d|0}function Ez(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;switch(d|0){case 0:{f=+h[b>>3];e=+h[b+8>>3];break}case 2:{f=+h[b>>3];e=-+h[b+8>>3];break}case 1:{f=-+h[b+8>>3];e=+h[b>>3];break}case 3:{f=+h[b+8>>3];e=+h[b>>3];break}default:{f=0.0;e=0.0}}c[a>>2]=~~(f+(f>=0.0?.5:-.5));c[a+4>>2]=~~(e+(e>=0.0?.5:-.5));return}function Fz(){var a=0,b=0,d=0;a=l;l=l+32|0;b=a+16|0;d=a;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];zz(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];Az(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];Xy(0,b)|0;l=a;return}function Gz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=l;l=l+192|0;s=z+176|0;x=z+112|0;y=z+48|0;t=z+32|0;u=z+24|0;v=z+16|0;w=z;if(!(e<<24>>24)){k=d+48|0;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];k=u;m=v;n=x;o=0}else{c[t>>2]=c[d>>2];c[t+4>>2]=c[d+4>>2];c[t+8>>2]=c[d+8>>2];c[t+12>>2]=c[d+12>>2];k=v;m=u;n=0;o=x}h[u>>3]=0.0;h[v>>3]=1.0;q=t+8|0;f=0.0;g=1.0;j=0;p=+h[t>>3];while(1){r=+h[q>>3];f=(f+g)*.5;QA(w,d,3,f,n,o);c[t>>2]=c[w>>2];c[t+4>>2]=c[w+4>>2];c[t+8>>2]=c[w+8>>2];c[t+12>>2]=c[w+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];a:do if(!((ab[b&63](a,s)|0)<<24>>24)){e=0;while(1){if((e|0)==4){e=k;j=1;break a}j=y+(e<<4)|0;A=x+(e<<4)|0;c[j>>2]=c[A>>2];c[j+4>>2]=c[A+4>>2];c[j+8>>2]=c[A+8>>2];c[j+12>>2]=c[A+12>>2];e=e+1|0}}else e=m;while(0);h[e>>3]=f;i=+h[t>>3];p=p-i;if(!((p>=0.0?p:-p)>.5)?(r=r-+h[q>>3],!((r>=0.0?r:-r)>.5)):0)break;f=+h[u>>3];g=+h[v>>3];p=i}b:do if(!(j<<24>>24)){e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;y=x+(e<<4)|0;c[A>>2]=c[y>>2];c[A+4>>2]=c[y+4>>2];c[A+8>>2]=c[y+8>>2];c[A+12>>2]=c[y+12>>2];e=e+1|0}}else{e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;x=y+(e<<4)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];e=e+1|0}}while(0);l=z;return}function Hz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;d=m+16|0;e=m;f=m+32|0;g=a+16|0;i=c[g>>2]|0;j=c[i+8>>2]|0;if(j|0?(k=j+4|0,c[(c[k>>2]|0)+12>>2]|0):0){c[f>>2]=a;c[f+4>>2]=0;n=+h[i+96>>3];h[e>>3]=+h[b>>3]-+h[i+16>>3];h[e+8>>3]=+h[b+8>>3]-+h[i+24>>3];k=c[(c[k>>2]|0)+12>>2]|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];k=ab[k&63](f,d)|0;h[(c[g>>2]|0)+96>>3]=n;Iz(f,a,b,k)}l=m;return}function Iz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+64|0;m=n;j=b+16|0;g=c[j>>2]|0;k=+h[g+96>>3];i=g+16|0;f=g+24|0;b=0;while(1){if((b|0)==4)break;h[m+(b<<4)>>3]=+h[d+(b<<4)>>3]-+h[i>>3];h[m+(b<<4)+8>>3]=+h[d+(b<<4)+8>>3]-+h[f>>3];b=b+1|0}Gz(a,c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0,m,e);b=0;while(1){if((b|0)==4)break;e=c[j>>2]|0;h[d+(b<<4)>>3]=+h[e+16>>3]+ +h[m+(b<<4)>>3];h[d+(b<<4)+8>>3]=+h[e+24>>3]+ +h[m+(b<<4)+8>>3];b=b+1|0}h[(c[j>>2]|0)+96>>3]=k;l=n;return}function Jz(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=b+16|0;b=c[f>>2]|0;if(!(a[b+112>>0]|0))break;b=c[b+116>>2]|0}b=c[b+8>>2]|0;if(!b){b=ww(40)|0;c[(c[f>>2]|0)+8>>2]=b}e=c[b>>2]|0;if(!e)b=xw(((c[b+4>>2]|0)*48|0)+48|0)|0;else b=zw(e,((c[b+4>>2]|0)*48|0)+48|0)|0;f=c[(c[f>>2]|0)+8>>2]|0;c[f>>2]=b;f=f+4|0;e=c[f>>2]|0;c[f>>2]=e+1;f=b+(e*48|0)|0;c[f>>2]=ww(d<<4)|0;c[b+(e*48|0)+4>>2]=d;b=b+(e*48|0)+8|0;e=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));return f|0}function Kz(b,e,f,g,i){b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0;D=l;l=l+96|0;A=D+16|0;u=D;x=D+92|0;y=D+88|0;v=D+80|0;m=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;z=so(m)|0;B=Jz(b,g)|0;n=b;while(1){o=c[n+16>>2]|0;if(!(a[o+112>>0]|0))break;n=c[o+116>>2]|0}if((a[i+8>>0]|0)==0?(j=c[m+16>>2]|0,k=c[e+16>>2]|0,(c[j+232>>2]|0)==(c[k+232>>2]|0)):0){p=(c[j+236>>2]|0)>(c[k+236>>2]|0);w=p?m:e;m=p?e:m}else w=e;if((m|0)==(c[((c[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)){j=o+80|0;k=o+40|0;p=d[o+86>>0]|0;e=d[o+46>>0]|0}else{j=o+40|0;k=o+80|0;p=d[o+46>>0]|0;e=d[o+86>>0]|0}o=c[j>>2]|0;j=c[k>>2]|0;if(((e|0)!=0?(r=m+16|0,q=c[(c[r>>2]|0)+8>>2]|0,(q|0)!=0):0)?(c[(c[q+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=m;c[v+4>>2]=j;j=g+-4|0;e=u+8|0;k=0;while(1){if((k|0)>=(j|0))break;n=k+3|0;q=c[r>>2]|0;h[u>>3]=+h[f+(n<<4)>>3]-+h[q+16>>3];h[e>>3]=+h[f+(n<<4)+8>>3]-+h[q+24>>3];q=c[(c[(c[q+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((ab[q&63](v,A)|0)<<24>>24))break;else k=n}c[x>>2]=k;Iz(v,m,f+(k<<4)|0,1)}else{c[x>>2]=0;k=0}if(((p|0)!=0?(t=w+16|0,s=c[(c[t>>2]|0)+8>>2]|0,(s|0)!=0):0)?(c[(c[s+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=w;c[v+4>>2]=o;m=g+-4|0;e=u+8|0;j=m;while(1){if((j|0)<=0)break;g=c[t>>2]|0;h[u>>3]=+h[f+(j<<4)>>3]-+h[g+16>>3];h[e>>3]=+h[f+(j<<4)+8>>3]-+h[g+24>>3];g=c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((ab[g&63](v,A)|0)<<24>>24))break;j=j+-3|0}c[y>>2]=j;Iz(v,w,f+(j<<4)|0,0)}else{m=g+-4|0;c[y>>2]=m;j=m}while(1){if((k|0)>=(m|0))break;e=k+3|0;E=+h[f+(k<<4)>>3]-+h[f+(e<<4)>>3];F=+h[f+(k<<4)+8>>3]-+h[f+(e<<4)+8>>3];if(F*F+E*E<1.0e-06)k=e;else break}c[x>>2]=k;while(1){if((j|0)<=0)break;v=j+3|0;F=+h[f+(j<<4)>>3]-+h[f+(v<<4)>>3];E=+h[f+(j<<4)+8>>3]-+h[f+(v<<4)+8>>3];if(!(E*E+F*F<1.0e-06))break;j=j+-3|0}c[y>>2]=j;Lz(b,w,f,x,y,B,i);r=c[x>>2]|0;n=c[y>>2]|0;m=n+4|0;n=n+3|0;o=A+16|0;p=A+32|0;q=A+48|0;k=z+16|0;j=r;while(1){if((j|0)>=(m|0))break;z=(c[B>>2]|0)+(j-r<<4)|0;e=f+(j<<4)|0;c[z>>2]=c[e>>2];c[z+4>>2]=c[e+4>>2];c[z+8>>2]=c[e+8>>2];c[z+12>>2]=c[e+12>>2];c[A>>2]=c[e>>2];c[A+4>>2]=c[e+4>>2];c[A+8>>2]=c[e+8>>2];c[A+12>>2]=c[e+12>>2];e=j+1|0;if((j|0)>=(n|0)){C=38;break}y=(c[B>>2]|0)+(e-r<<4)|0;z=f+(e<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[o>>2]=c[z>>2];c[o+4>>2]=c[z+4>>2];c[o+8>>2]=c[z+8>>2];c[o+12>>2]=c[z+12>>2];z=j+2|0;y=(c[B>>2]|0)+(z-r<<4)|0;z=f+(z<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[p>>2]=c[z>>2];c[p+4>>2]=c[z+4>>2];c[p+8>>2]=c[z+8>>2];c[p+12>>2]=c[z+12>>2];z=j+3|0;y=f+(z<<4)|0;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];fu((c[k>>2]|0)+16|0,A);j=z}c[B+4>>2]=m-r;l=D;return}function Lz(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+4|0;n=p;o=b;while(1){j=c[(c[o+16>>2]|0)+116>>2]|0;if(!j)break;else o=j}if(!(a[i+8>>0]|0))j=($a[c[i>>2]&31](o)|0)&255;else j=0;Bt(o,m,n);k=i+4|0;if(($a[c[k>>2]&31](d)|0)<<24>>24)c[n>>2]=0;if(($a[c[k>>2]&31](c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)<<24>>24)c[m>>2]=0;if(j|0){d=c[m>>2]|0;c[m>>2]=c[n>>2];c[n>>2]=d}if(!(a[i+9>>0]|0)){j=c[m>>2]|0;if(j|0)c[f>>2]=Qt(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0;j=c[n>>2]|0;if(j|0)c[g>>2]=Ot(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0}else{k=c[n>>2]|0;j=c[m>>2]|0;if(j|k|0)Rt(o,e,c[f>>2]|0,c[g>>2]|0,h,j,k)}l=p;return}function Mz(a,b){a=a|0;b=b|0;var d=0,e=0;if(+h[b>>3]<+h[b+16>>3]?+h[b+8>>3]<+h[b+24>>3]:0){d=c[a+84>>2]|0;e=a+80|0;a=c[e>>2]|0;c[e>>2]=a+1;a=d+(a<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2]}return}function Nz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;x=l;l=l+112|0;u=x+72|0;o=x+56|0;n=x+16|0;q=x;j=c[d>>2]&3;p=d+48|0;w=c[((j|0)==3?d:p)+40>>2]|0;t=d+16|0;r=c[t>>2]|0;i=r+16|0;if(a[r+47>>0]|0){Cz(n,w,c[((j|0)==2?d:d+-48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}r=w+16|0;j=c[r>>2]|0;i=c[j+8>>2]|0;if(!i)n=0;else n=c[(c[i+4>>2]|0)+16>>2]|0;i=j+16|0;j=(c[t>>2]|0)+16|0;c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];Oz(q,o,u);c[b>>2]=c[q>>2];c[b+4>>2]=c[q+4>>2];c[b+8>>2]=c[q+8>>2];c[b+12>>2]=c[q+12>>2];if(!(g<<24>>24)){i=c[t>>2]|0;if(!(a[i+45>>0]|0))i=0;else{k=+h[i+32>>3];v=9}}else{k=+Pz(c[((c[d>>2]&3|0)==3?d:p)+40>>2]|0);v=9}if((v|0)==9){h[b+16>>3]=k;i=1}a[b+29>>0]=i;c[b+80>>2]=0;c[b+88>>2]=d;q=f+32|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];switch(e|0){case 1:{j=c[r>>2]|0;if((a[j+156>>0]|0)==0?(q=a[(c[t>>2]|0)+49>>0]|0,s=q&255,q<<24>>24!=0):0){c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(s&4)){if(s&1|0){c[f+48>>2]=1;i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}i=f+48|0;if(!(s&8)){c[i>>2]=2;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{c[i>>2]=8;h[u+16>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{c[f+48>>2]=4;k=+h[u>>3];if(+h[b>>3]<+h[j+16>>3]){z=k+-1.0;y=+h[b+8>>3];b=u+16|0;k=+h[b>>3];m=+h[j+80>>3]*.5+ +h[j+24>>3];m=m+ +((c[(c[(so(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[r>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[u+24>>3]=y;h[u+8>>3]=+h[i+24>>3]-+h[i+80>>3]*.5;h[u>>3]=z;h[f+56>>3]=z;h[f+64>>3]=y;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{m=+h[b+8>>3];i=u+16|0;y=+h[i>>3]+1.0;z=+h[j+80>>3]*.5+ +h[j+24>>3];z=z+ +((c[(c[(so(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+24>>3]=m;h[u+8>>3]=+h[b+24>>3]-+h[b+80>>3]*.5;h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0}else{j=1;v=47}break}case 2:{s=a[(c[t>>2]|0)+49>>0]|0;j=s&255;if(!(s<<24>>24))v=46;else{c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){i=c[r>>2]|0;z=+h[i+24>>3]-+h[i+80>>3]*.5;i=u+16|0;y=+h[i>>3]+1.0;k=+h[b>>3];m=z-+((c[(c[(so(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+8>>3]=z;h[u+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}k=+h[b>>3];if(!(j&8)){h[u>>3]=k;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3];i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0;i=u+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{i=u+16|0;h[i>>3]=k+1.0;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3]+-1.0;i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{i=u+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+8>>3]?u:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0;c[f+48>>2]=j}break}default:v=46}if((v|0)==46){j=c[f+48>>2]|0;v=47}a:do if((v|0)==47){if(n){d=f+56|0;i=f+52|0;j=db[n&3](w,(c[t>>2]|0)+16|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{ma(123205,91558,569,91568);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+8>>3];break a}case 1:{h[f+80>>3]=+h[b+8>>3];c[f+48>>2]=1;break a}default:break a}}while(0);l=x;return}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Pz(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,l=0.0;i=c[a+16>>2]|0;j=c[i+172>>2]|0;f=0.0;g=0;while(1){a=c[j+(g<<2)>>2]|0;if(!a)break;f=+h[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16>>3]+f;g=g+1|0}e=c[i+180>>2]|0;b=0.0;a=0;while(1){d=c[e+(a<<2)>>2]|0;if(!d)break;b=+h[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+16>>3]+b;a=a+1|0}k=+h[i+16>>3];l=+h[i+24>>3];j=c[j>>2]|0;f=+K(+(l-+h[(c[(c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+24>>3]),+(k-f/+(g|0)));j=c[e>>2]|0;return +((+K(+(+h[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+24>>3]-l),+(b/+(a|0)-k))+f)*.5)}function Qz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+112|0;w=z+72|0;p=z+56|0;n=z+16|0;t=z;j=c[d>>2]&3;r=d+-48|0;y=c[((j|0)==2?d:r)+40>>2]|0;u=d+16|0;s=c[u>>2]|0;i=s+56|0;if(a[s+87>>0]|0){Cz(n,y,c[((j|0)==3?d:d+48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}s=y+16|0;j=c[s>>2]|0;i=c[j+8>>2]|0;if(!i)o=0;else o=c[(c[i+4>>2]|0)+16>>2]|0;n=b+40|0;i=j+16|0;j=(c[u>>2]|0)+56|0;c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];c[w>>2]=c[j>>2];c[w+4>>2]=c[j+4>>2];c[w+8>>2]=c[j+8>>2];c[w+12>>2]=c[j+12>>2];Oz(t,p,w);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];if(!(g<<24>>24)){i=c[u>>2]|0;if(!(a[i+85>>0]|0))q=0;else{h[b+56>>3]=+h[i+72>>3];q=1}}else{m=+Pz(c[((c[d>>2]&3|0)==2?d:r)+40>>2]|0)+3.141592653589793;h[b+56>>3]=m;if(m<6.283185307179586)q=1;else ma(91578,91558,606,91602)}a[b+69>>0]=q;t=f+32|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];switch(e|0){case 1:{j=c[s>>2]|0;if((a[j+156>>0]|0)==0?(t=a[(c[u>>2]|0)+89>>0]|0,v=t&255,t<<24>>24!=0):0){c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(v&4))if(!(v&1)){i=f+48|0;if(!(v&8)){c[i>>2]=2;h[w>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{c[i>>2]=8;h[w+16>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{c[f+48>>2]=1;k=+h[w>>3];if(+h[n>>3]<+h[j+16>>3]){B=k+-1.0;m=+h[b+48>>3];b=w+16|0;k=+h[b>>3];A=+h[j+80>>3]*-.5+ +h[j+24>>3];A=A-+((c[(c[(so(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[w+8>>3]=m;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=B;h[f+56>>3]=B;h[f+64>>3]=A;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{B=+h[b+48>>3];i=w+16|0;A=+h[i>>3]+1.0;m=+h[j+80>>3]*-.5+ +h[j+24>>3];m=m-+((c[(c[(so(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[s>>2]|0;h[w>>3]=+h[b+96>>3]+ +h[b+16>>3];h[w+8>>3]=B;h[w+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=A;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}}else{c[f+48>>2]=4;i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=v}else{j=4;x=47}break}case 2:{v=a[(c[u>>2]|0)+89>>0]|0;j=v&255;if(!(v<<24>>24))x=46;else{c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){k=+h[w>>3]+-1.0;i=c[s>>2]|0;B=+h[i+24>>3]-+h[i+80>>3]*.5;A=+h[n>>3];m=B-+((c[(c[(so(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[w+16>>3]=+h[i+16>>3]+-2.0-+h[i+88>>3];h[w+8>>3]=B;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=k;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{i=w+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?w+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}k=+h[n>>3];if(!(j&8)){h[w>>3]=k+-1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3];i=w+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{i=w+16|0;h[i>>3]=k+1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=j}break}default:x=46}if((x|0)==46){j=c[f+48>>2]|0;x=47}a:do if((x|0)==47){if(o){d=f+56|0;i=f+52|0;j=db[o&3](y,(c[u>>2]|0)+56|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{ma(123205,91558,765,91602);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+48>>3];break a}case 1:{h[f+64>>3]=+h[b+48>>3];c[f+48>>2]=4;break a}default:break a}}while(0);l=z;return}function Rz(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;g=c[b+16>>2]|0;i=c[g+96>>2]|0;if((a[g+44>>0]|0)==0?(a[g+84>>0]|0)==0:0)j=6;else{d=a[g+49>>0]|0;e=d&255;if(((e&8|0)==0?(f=a[g+89>>0]|0,(f&8)==0):0)?((e&5|0)==0?1:d<<24>>24!=f<<24>>24):0)j=6;else b=0}if((j|0)==6)if(!i)b=18;else{b=(c[(c[(so(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=~~(+h[(b?i+32|0:i+24|0)>>3]+18.0)}return b|0}function Sz(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;i=i|0;var j=0,k=0,l=0,m=0;b=c[(c[d+(e<<2)>>2]|0)+16>>2]|0;if((a[b+44>>0]|0)==0?(a[b+84>>0]|0)==0:0)l=6;else l=3;do if((l|0)==3){j=a[b+49>>0]|0;k=j&255;if(!(k&8)){m=a[b+89>>0]|0;if((m&8)==0?((k&5|0)==0?1:j<<24>>24!=m<<24>>24):0){l=6;break}if(!(a[b+89>>0]&8)){if(k&4|0){Uz(d,e,f,g,h,i);break}if(!(k&1))ma(123205,91558,1231,91610);else{Wz(d,e,f,g,h,i);break}}}if((j&2)==0?(a[b+89>>0]&2)==0:0){Vz(d,e,f,g,h,i);break}Uz(d,e,f,g,h,i)}while(0);if((l|0)==6)Tz(d,e,f,g,h,i);return}function Tz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+96>>3];switch(Xz(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 65:case 32:{if(F==H)k=0-k|0;break}default:{}}Q=(p-m)*3.0;m=(p-i)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p<Q?p:Q;m=p<m?p:m;while(1){if((r|0)>=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;Yz(M,n*.3333333333333333+E,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=p+C;Yz(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];Yz(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;Yz(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];Yz(K,m*.3333333333333333+G,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*.5+p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;Kz(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function Uz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0;Q=l;l=l+16080|0;M=Q+80|0;N=Q+64|0;O=Q+48|0;P=Q+32|0;K=Q+16|0;L=Q;C=c[b+(e<<2)>>2]|0;q=g*.5/+(f|0);q=q>2.0?q:2.0;E=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;m=c[E>>2]|0;H=+h[m+16>>3];D=+h[m+24>>3];C=c[C+16>>2]|0;k=+h[C+16>>3];p=+h[C+24>>3];F=k+H;G=p+D;g=+h[C+56>>3];o=+h[C+64>>3];H=g+H;I=o+D;n=!(F>=H)?-1.0:1.0;s=+h[m+80>>3]*.5;switch(Xz(d[C+49>>0]|0,d[C+89>>0]|0)|0){case 15:{k=(q-g+ +h[m+96>>3])*n;break}case 38:{k=(g+q+ +h[m+88>>3])*n;break}case 41:{k=(q-k+ +h[m+96>>3])*n;break}case 48:{k=(q-k+ +h[m+96>>3])*n;break}case 58:case 57:case 51:case 47:case 37:case 14:{k=n*.3333333333333333*(k-g+ +h[m+88>>3]+ +h[m+96>>3]);break}case 73:{k=(k+q+ +h[m+88>>3])*n;break}case 83:{k=(+h[m+88>>3]+k)*n;break}case 84:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q)*n;break}case 85:case 75:case 74:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q*2.0)*n;break}default:k=0.0}p=(s-p)*3.0;o=(s-o)*3.0;q=n*q;w=M+8|0;x=M+16|0;y=M+32|0;z=M+48|0;A=(H+F)*.5;B=M+64|0;C=M+80|0;u=M+96|0;v=M+104|0;t=0;g=s;p=s<p?s:p;n=s<o?s:o;while(1){if((t|0)>=(f|0))break;r=e+1|0;e=c[b+(e<<2)>>2]|0;o=g+i;p=p+i;n=n+i;k=k+q;h[M>>3]=F;h[w>>3]=G;s=k+F;Yz(N,s,p*.3333333333333333+G);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];R=o+D;Yz(O,s,R);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Yz(P,A,R);c[z>>2]=c[P>>2];c[z+4>>2]=c[P+4>>2];c[z+8>>2]=c[P+8>>2];c[z+12>>2]=c[P+12>>2];s=H-k;Yz(K,s,R);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];Yz(L,s,n*.3333333333333333+I);c[C>>2]=c[L>>2];c[C+4>>2]=c[L+4>>2];c[C+8>>2]=c[L+8>>2];c[C+12>>2]=c[L+12>>2];h[u>>3]=H;h[v>>3]=I;m=e+16|0;if((c[(c[m>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,m=c[(c[m>>2]|0)+96>>2]|0,J=+h[(S?m+32|0:m+24|0)>>3],S=c[E>>2]|0,h[m+64>>3]=J*.5+o+ +h[S+24>>3],h[m+56>>3]=+h[S+16>>3],a[m+81>>0]=1,J>i):0)g=J+g;else g=o;Kz(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,M,7,j);e=r;t=t+1|0}l=Q;return}function Vz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+88>>3];switch(Xz(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 67:case 12:{if(F==H)k=0-k|0;break}default:{}}Q=(m+p)*3.0;m=(i+p)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p<Q?p:Q;m=p<m?p:m;while(1){if((r|0)>=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;Yz(M,E-n*.3333333333333333,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=C-p;Yz(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];Yz(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;Yz(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];Yz(K,G-m*.3333333333333333,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*-.5-p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;Kz(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function Wz(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;C=c[b+(e<<2)>>2]|0;B=g*.5/+(f|0);w=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;D=c[w>>2]|0;z=+h[D+16>>3];v=+h[D+24>>3];C=c[C+16>>2]|0;m=+h[C+24>>3];x=+h[C+16>>3]+z;y=m+v;n=+h[C+64>>3];z=+h[C+56>>3]+z;A=n+v;u=!(x>=z)?-1:1;o=+h[D+80>>3]*.5;C=(Xz(d[C+49>>0]|0,d[C+89>>0]|0)|0)==67;m=(m+o)*3.0;n=(n+o)*3.0;B=(B>2.0?B:2.0)*+((C?0-u|0:u)|0);u=L+8|0;C=L+16|0;D=L+32|0;E=L+48|0;F=(z+x)*.5;G=L+64|0;H=L+80|0;s=L+96|0;t=L+104|0;g=o;k=0.0;m=o<m?o:m;n=o<n?o:n;q=0;while(1){if((q|0)>=(f|0))break;r=e+1|0;p=c[b+(e<<2)>>2]|0;o=g+i;m=m+i;n=n+i;k=k+B;h[L>>3]=x;h[u>>3]=y;Q=k+x;Yz(M,Q,y-m*.3333333333333333);c[C>>2]=c[M>>2];c[C+4>>2]=c[M+4>>2];c[C+8>>2]=c[M+8>>2];c[C+12>>2]=c[M+12>>2];R=v-o;Yz(N,Q,R);c[D>>2]=c[N>>2];c[D+4>>2]=c[N+4>>2];c[D+8>>2]=c[N+8>>2];c[D+12>>2]=c[N+12>>2];Yz(O,F,R);c[E>>2]=c[O>>2];c[E+4>>2]=c[O+4>>2];c[E+8>>2]=c[O+8>>2];c[E+12>>2]=c[O+12>>2];Q=z-k;Yz(J,Q,R);c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];Yz(K,Q,A-n*.3333333333333333);c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];h[s>>3]=z;h[t>>3]=A;e=p+16|0;if((c[(c[e>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(so(c[((c[p>>2]&3|0)==3?p:p+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,e=c[(c[e>>2]|0)+96>>2]|0,I=+h[(S?e+32|0:e+24|0)>>3],S=c[w>>2]|0,h[e+64>>3]=I*-.5-o+ +h[S+24>>3],h[e+56>>3]=+h[S+16>>3],a[e+81>>0]=1,I>i):0)g=I+g;else g=o;Kz(p,c[((c[p>>2]&3|0)==2?p:p+-48|0)+40>>2]|0,L,7,j);e=r;q=q+1|0}l=P;return}function Xz(a,b){a=a|0;b=b|0;var d=0;d=0;while(1){if((d|0)>=8){b=-1;break}if((c[21064+(d<<2)>>2]|0)==(b|0)){b=d;break}d=d+1|0}d=0;while(1){if((d|0)>=8){d=-1;break}if((c[21064+(d<<2)>>2]|0)==(a|0))break;d=d+1|0}if((d|b|0)<0)d=0;else d=c[21096+(d<<5)+(b<<2)>>2]|0;return d|0}function Yz(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Zz(b){b=b|0;var d=0,e=0;if((c[42248]|0)!=0|(c[42247]|0)!=0){d=b+16|0;e=c[(c[d>>2]|0)+100>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?_z(b,1)|0:0){e=so(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;cB(e,c[(c[d>>2]|0)+100>>2]|0)}e=c[(c[d>>2]|0)+104>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?_z(b,0)|0:0){e=so(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;cB(e,c[(c[d>>2]|0)+104>>2]|0)}}return}function _z(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;o=q+32|0;m=q+16|0;n=q;i=b+16|0;do if((a[(c[i>>2]|0)+112>>0]|0)!=6){e=c[42248]|0;if(!((e|0)!=0?(a[(Km(b,e)|0)>>0]|0)!=0:0)){e=c[42247]|0;if(!e){e=0;break}if(!(a[(Km(b,e)|0)>>0]|0)){e=0;break}}d=d<<24>>24==0;p=c[i>>2]|0;p=c[(d?p+104|0:p+100|0)>>2]|0;e=$z(b)|0;if(e){k=c[e>>2]|0;do if(d){if(c[k+8>>2]|0){e=c[k>>2]|0;j=+h[e>>3];g=+h[k+16>>3];e=e+8|0;f=+h[k+24>>3];break}e=c[k>>2]|0;g=+h[e>>3];f=+h[e+8>>3];e=0;while(1){if((e|0)==4)break;n=o+(e<<4)|0;i=(c[k>>2]|0)+(e<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];e=e+1|0}QA(m,o,3,.1,0,0);j=+h[m>>3];e=m+8|0}else{d=(c[e+4>>2]|0)+-1|0;i=k+(d*48|0)|0;if(c[k+(d*48|0)+12>>2]|0){o=c[i>>2]|0;e=(c[k+(d*48|0)+4>>2]|0)+-1|0;j=+h[o+(e<<4)>>3];g=+h[k+(d*48|0)+32>>3];e=o+(e<<4)+8|0;f=+h[k+(d*48|0)+40>>3];break}m=c[i>>2]|0;d=k+(d*48|0)+4|0;e=(c[d>>2]|0)+-1|0;g=+h[m+(e<<4)>>3];f=+h[m+(e<<4)+8>>3];e=0;while(1){if((e|0)==4)break;m=o+(e<<4)|0;k=(c[i>>2]|0)+(e+-4+(c[d>>2]|0)<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];e=e+1|0}QA(n,o,3,.9,0,0);j=+h[n>>3];e=n+8|0}while(0);r=+K(+(+h[e>>3]-f),+(j-g));r=+FA(b,c[42248]|0,-25.0,-180.0)*.017453292519943295+r;j=+FA(b,c[42247]|0,1.0,0.0)*10.0;h[p+56>>3]=j*+E(+r)+g;h[p+64>>3]=+F(+r)*j+f;a[p+81>>0]=1;e=1}else e=0}else e=0;while(0);l=q;return e|0}function $z(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b;while(1){e=c[d+16>>2]|0;d=c[e+8>>2]|0;if(d|0)break;if(!(a[e+112>>0]|0)){g=5;break}d=c[e+116>>2]|0}if((g|0)==5){g=En(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;d=En(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[f>>2]=g;c[f+4>>2]=d;$l(1,91623,f)|0;d=0}l=h;return d|0}function aA(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+96|0;m=s+80|0;n=s+64|0;o=s+48|0;p=s+32|0;q=s+16|0;r=s;k=b[(c[d+16>>2]|0)+136>>1]|0;d=e+16|0;bA(c[(c[d>>2]|0)+8>>2]|0,p,q);f=+h[p>>3];g=+h[q>>3];t=f-g;i=+h[p+8>>3];j=+h[q+8>>3];u=i-j;a:do if(u*u+t*t<1.0e-06){c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2]}else switch(k&14){case 4:case 10:{h[n>>3]=(g+f)*.5;h[n+8>>3]=(j+i)*.5;q=c[(c[d>>2]|0)+8>>2]|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];WA(r,q,m);c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];break a}default:{cA(o,c[(c[d>>2]|0)+8>>2]|0,p,q);break a}}while(0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];l=s;return}function bA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+32|0;g=h+16|0;f=h;j=c[a>>2]|0;e=c[j>>2]|0;i=c[j+8>>2]|0;k=j+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];j=j+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!i){c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}else{c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2]}i=c[a>>2]|0;j=(c[a+4>>2]|0)+-1|0;e=c[i+(j*48|0)>>2]|0;a=c[i+(j*48|0)+4>>2]|0;k=c[i+(j*48|0)+12>>2]|0;b=i+(j*48|0)+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];j=i+(j*48|0)+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!k){k=e+(a+-1<<4)|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2]}else{c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2]}l=h;return}function cA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0;r=c[b+4>>2]|0;g=0.0;f=0;while(1){if((f|0)>=(r|0))break;l=c[b>>2]|0;k=c[l+(f*48|0)>>2]|0;l=c[l+(f*48|0)+4>>2]|0;i=3;j=0;while(1){if((i|0)>=(l|0))break;q=+h[k+(j<<4)>>3]-+h[k+(i<<4)>>3];p=+h[k+(j<<4)+8>>3]-+h[k+(i<<4)+8>>3];i=i+3|0;j=j+3|0;g=+C(+(p*p+q*q))+g}f=f+1|0}l=0;g=g*.5;a:while(1){if((l|0)>=(r|0)){f=15;break}k=c[b>>2]|0;j=c[k+(l*48|0)>>2]|0;k=c[k+(l*48|0)+4>>2]|0;f=3;i=0;while(1){if((f|0)>=(k|0))break;m=+h[j+(i<<4)>>3];p=+h[j+(i<<4)+8>>3];n=+h[j+(f<<4)>>3];o=+h[j+(f<<4)+8>>3];q=m-n;s=p-o;q=+C(+(s*s+q*q));if(q>=g){f=12;break a}f=f+3|0;i=i+3|0;g=g-q}l=l+1|0}if((f|0)==12){h[d>>3]=m;h[d+8>>3]=p;h[e>>3]=n;h[e+8>>3]=o;s=q-g;h[a>>3]=(s*m+n*g)/q;h[a+8>>3]=(s*p+o*g)/q;return}else if((f|0)==15)ma(123523,91558,1316,91685)}function dA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Zz(b);return}function eA(b,d,e,f,g){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,G=0,H=0,I=0,J=0,K=0,L=0;J=fA(b)|0;I=c[J+4>>2]|0;K=c[J>>2]|0;H=I+-1|0;B=+h[K+(H<<6)+16>>3];C=+(I|0);D=(g|0)==2;G=(f|0)!=0;n=0;j=0.0;i=0.0;l=0.0;m=0.0;while(1){if((n|0)>=(I|0))break;b=~~+gA(+(n+-1|0),C);A=n+1|0;L=~~+gA(+(A|0),C);o=K+(n<<6)|0;m=+h[o>>3];z=K+(n<<6)+8|0;l=+h[z>>3];s=K+(n<<6)+16|0;t=+h[s>>3];u=K+(n<<6)+24|0;v=K+(n<<6)+32|0;w=K+(n<<6)+40|0;x=K+(n<<6)+48|0;y=K+(n<<6)+56|0;k=+hA(+h[K+(L<<6)+8>>3]-l,+h[K+(L<<6)>>3]-m);q=+hA(+h[K+(b<<6)+8>>3]-l,+h[K+(b<<6)>>3]-m);r=+Za[d&7](t,B,e);b=(n|0)==0;do if(b|(n|0)==(H|0))if(b){i=k+1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+k)*r;m=m-+E(+k)*r;break}else{i=q+-1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+q)*r;m=m-+E(+q)*r;break}else{p=k-q;p=1.5707963267948966-(p<0.0?p+6.283185307179586:p)*.5;j=+E(+p);j=j==0.0?0.0:r/j;i=k+1.5707963267948966;k=p+i;if(G|j>r*10.0){q=+gA(q+-1.5707963267948966,6.283185307179586);b=1;p=+gA(i,6.283185307179586);j=r;i=q}else{b=0;p=k;i=k}}while(0);h[o>>3]=m;h[z>>3]=l;h[s>>3]=t;a[u>>0]=108;h[v>>3]=i;h[w>>3]=j;c[x>>2]=b;h[y>>3]=p;n=A}o=ww(12)|0;b=0;while(1){if((b|0)>=(I|0))break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];i=+h[K+(b<<6)+32>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;k=+h[K+(b<<6)+56>>3];iA(o,+E(+i)*j+m,+F(+i)*j+l);if(L|0)jA(m,l,j,1,i,k,f,o);b=b+1|0}n=(g|0)==1;k=i+3.141592653589793;if(n)kA(o,m,l,j,i,k);else{iA(o,+E(+k)*j+m,+F(+k)*j+l);i=k}b=I+-2|0;k=m;while(1){if((b|0)<=-1)break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;i=+h[K+(b<<6)+32>>3]+3.141592653589793;k=+h[K+(b<<6)+56>>3]+3.141592653589793;iA(o,+E(+k)*j+m,+F(+k)*j+l);if(L|0)jA(m,l,j,0,i,k,f,o);b=b+-1|0;k=m}if(n)kA(o,k,l,j,i,i+3.141592653589793);lA(J);return o|0}function fA(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;q=l;l=l+144|0;i=q+128|0;h=q+112|0;j=q+96|0;k=q+64|0;m=q;n=q+80|0;o=mA()|0;p=c[a+4>>2]|0;f=c[a>>2]|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];nA(o,i,0.0);g=m+48|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];d=0;b=0.0;a:while(1){e=d+3|0;if((e|0)>=(p|0))break;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];a=1;while(1){if((a|0)==4)break;r=m+(a<<4)|0;s=f+(a+d<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];a=a+1|0}c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];a=1;while(1){if((a|0)==21){d=e;continue a}QA(n,m,3,+(a|0)*.05,0,0);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];t=+oA(h,i)+b;c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];nA(o,i,t);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];a=a+1|0;b=t}}pA(o);l=q;return o|0}function gA(a,b){a=+a;b=+b;var c=0.0;c=a-+A(+(a/b))*b;return +(!(a<0.0)&!(a>=b)?a:c)}function hA(a,b){a=+a;b=+b;if(!(a==0.0&b==0.0)){a=+K(+a,+b);if(!(a>=0.0))a=a+6.283185307179586}else a=0.0;return +a}function iA(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=c[a>>2]|0;f=a+4|0;if((e|0)<(c[f>>2]|0))f=c[a+8>>2]|0;else{c[f>>2]=2e3;e=a+8|0;f=zw(c[e>>2]|0,32e3)|0;c[e>>2]=f;e=c[a>>2]|0}c[a>>2]=e+1;h[f+(e<<4)>>3]=b;h[f+(e<<4)+8>>3]=d;return}function jA(a,b,c,d,e,f,g,h){a=+a;b=+b;c=+c;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0.0;d=(d|0)==0;i=d?e:f;do if((g|0)==1){e=(d?f:e)-i;e=!(e<=1.7453292519943296e-03)?e:e+6.283185307179586;if(e<3.141592653589793){kA(h,a,b,c,e+i,i);break}else{iA(h,+E(+i)*c+a,+F(+i)*c+a);break}}else iA(h,+E(+i)*c+a,+F(+i)*c+a);while(0);return}function kA(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0.0;iA(a,+E(+e)*d+b,+F(+e)*d+c);a:do if(!(d==0.0)){while(1){if(!(f>e))break;f=f+-6.283185307179586}f=e-f;while(1){if(!(f>6.283185307179586))break;f=f+-6.283185307179586}f=f*.05263157894736842;g=1;while(1){if((g|0)==20)break a;h=e-f*+(g|0);iA(a,+E(+h)*d+b,+F(+h)*d+c);g=g+1|0}}while(0);return}function lA(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function mA(){var a=0;a=ww(12)|0;c[a+4>>2]=0;c[a+8>>2]=2e3;c[a>>2]=ww(128e3)|0;return a|0}function nA(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=a+4|0;e=c[i>>2]|0;f=a+8|0;g=c[f>>2]|0;if((e|0)<(g|0))a=c[a>>2]|0;else{c[f>>2]=g<<1;e=zw(c[a>>2]|0,g<<7)|0;c[a>>2]=e;a=e;e=c[i>>2]|0}h[a+(e<<6)>>3]=+h[b>>3];h[a+(e<<6)+8>>3]=+h[b+8>>3];c[i>>2]=e+1;h[a+(e<<6)+16>>3]=d;return}function oA(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function pA(a){a=a|0;var b=0;b=c[a+4>>2]|0;if((c[a+8>>2]|0)>(b|0))c[a>>2]=zw(c[a>>2]|0,b<<6)|0;return}function qA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;g=k+12|0;c[g>>2]=0;h=c[d+4>>2]|0;if(!h)ma(91702,91713,203,91724);e=c[h>>2]|0;if(!e)ma(91738,91713,206,91724);f=h+8|0;if(!(c[f>>2]|0))c[f>>2]=rA(e)|0;if(!0)e=0;else{e=(Ev(c[h>>2]|0)|0)==0;e=e?0:g}if(!((wE(b,d,e)|0)<<24>>24))sA(d,e);do if(e|0){f=c[g>>2]|0;b=c[13918]|0;e=c[h>>2]|0;if(!f){c[j>>2]=e;AL(b,91781,j)|0;break}else{c[i>>2]=e;c[i+4>>2]=f;AL(b,91749,i)|0;break}}while(0);j=d+32|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=k;return}function rA(a){a=a|0;var b=0;b=c[42346]|0;if((b|0)!=0?(jK(b,a)|0)==0:0)a=c[42355]|0;else{$I(b);c[42346]=HL(a)|0;a=wM(169384,21352,35,36,29)|0;c[42355]=a}return a|0}function sA(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0.0;j=c[b+4>>2]|0;e=c[j>>2]|0;i=+h[j+16>>3];j=b+32|0;h[j>>3]=0.0;h[b+40>>3]=i*1.2;h[b+16>>3]=0.0;h[b+24>>3]=i*.1;c[b+8>>2]=0;c[b+12>>2]=0;if(qK(e,91815,4)|0)if((qK(e,91820,5)|0)!=0?(qK(e,91826,9)|0)!=0:0){g=4184;e=91836}else{g=8280;e=91872}else{g=6232;e=91853}if(d|0)c[d>>2]=e;e=c[b>>2]|0;if(e|0){f=0.0;while(1){b=a[e>>0]|0;if(!(b<<24>>24))break;k=f+ +h[g+((b&255)<<3)>>3];h[j>>3]=k;e=e+1|0;f=k}h[j>>3]=f*i}return}function tA(a,b){a=a|0;b=b|0;return jK(c[a>>2]|0,c[b>>2]|0)|0}function uA(a){a=a|0;var b=0;b=a+108|0;c[b>>2]=0;c[a+112>>2]=32;c[a+116>>2]=-1;c[a+120>>2]=14;c[a+124>>2]=58;c[a+128>>2]=20;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;b=Rl(b,c[4345]|0)|0;c[a+144>>2]=b;return b|0}function vA(a,b,d){a=a|0;b=b|0;d=d|0;d=aJ(1,32)|0;a=c[b>>2]|0;if(a|0)c[d>>2]=HL(a)|0;a=c[b+4>>2]|0;if(a|0)c[d+4>>2]=HL(a)|0;c[d+24>>2]=c[b+24>>2]&127;h[d+16>>3]=+h[b+16>>3];c[d+8>>2]=c[b+8>>2];return d|0}function wA(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b>>2]|0);$I(c[b+4>>2]|0);$I(b);return}function xA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;a=c[b>>2]|0;e=c[d>>2]|0;i=(e|0)==0;if(!a)if(i)j=5;else a=-1;else if(!i){a=yJ(a,e)|0;if(!a)j=5}else a=1;do if((j|0)==5){a=c[b+4>>2]|0;e=c[d+4>>2]|0;i=(e|0)==0;if(!a){if(!i){a=-1;break}}else{if(i){a=1;break}a=yJ(a,e)|0;if(a|0)break}a=(c[b+24>>2]&127)-(c[d+24>>2]&127)|0;if(!a){g=+h[b+16>>3];f=+h[d+16>>3];if(g<f)a=-1;else a=g>f&1}}while(0);return a|0}function yA(){Wa(169424)|0;return}function zA(){var a=0,b=0;b=l;l=l+16|0;a=b;Wa(a|0)|0;l=b;return +(+((c[a+4>>2]|0)+(c[a>>2]|0)-(c[42356]|0)-(c[42357]|0)|0)*.016666666666666666)}function AA(a){a=a|0;var b=0,d=0;b=ww(16)|0;a=(a|0)>2?a:2;d=ww(a<<2)|0;c[b>>2]=d;c[b+12>>2]=d;c[b+8>>2]=d;c[b+4>>2]=d+(a<<2);return b|0}function BA(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function CA(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;c[d>>2]=e+4;c[e>>2]=b;if((c[d>>2]|0)>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2];return}function DA(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;b=c[d>>2]|0;if((b|0)!=(c[a+12>>2]|0)){e=b+4|0;c[d>>2]=e;b=c[b>>2]|0;if(e>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2]}else b=0;return b|0}function EA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;if(((d|0)!=0?(h=Km(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){d=CL(h,g,10)|0;e=(h|0)==(c[g>>2]|0)?e:(d|0)<(f|0)?f:d}l=i;return e|0}function FA(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;g=i;if(((b|0)!=0&(d|0)!=0?(h=Km(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){j=+uM(h,g);e=(h|0)==(c[g>>2]|0)?e:j<f?f:j}l=i;return +e}function GA(a,b,c){a=a|0;b=b|0;c=c|0;if((a|0)!=0&(b|0)!=0)c=Km(a,b)|0;return c|0}function HA(b,c,d){b=b|0;c=c|0;d=d|0;b=GA(b,c,d)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)d=b;return d|0}function IA(a,b,c){a=a|0;b=b|0;c=c|0;if(!b)a=c&255;else a=JA(Km(a,b)|0)|0;return a|0}function JA(a){a=a|0;return KA(a,0)|0}function KA(b,c){b=b|0;c=c|0;var d=0;if((b|0)!=0?(d=a[b>>0]|0,d<<24>>24!=0):0)if((jK(b,122100)|0)!=0?(jK(b,92682)|0)!=0:0)if((jK(b,92685)|0)!=0?(jK(b,92690)|0)!=0:0){if(((d<<24>>24)+-48|0)>>>0<10)c=(sM(b)|0)&255}else c=1;else c=0;return c|0}function LA(a){a=a|0;var b=0,d=0;while(1){b=(c[a+16>>2]|0)+220|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[(c[d+16>>2]|0)+220>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function MA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((a|0)!=(b|0)){d=c[a+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=a;c[d+216>>2]=1}else a=LA(a)|0;d=c[b+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=b;c[d+216>>2]=1}else{d=LA(b)|0;b=d;d=c[d+16>>2]|0}g=a+16|0;e=c[g>>2]|0;f=b+16|0;h=(c[e+120>>2]|0)>(c[d+120>>2]|0);a=h?b:a;c[(h?e:d)+220>>2]=a;e=(c[(h?f:g)>>2]|0)+216|0;c[e>>2]=(c[e>>2]|0)+(c[(c[(h?g:f)>>2]|0)+216>>2]|0)}return a|0}function NA(b){b=b|0;b=c[b+16>>2]|0;c[b+216>>2]=1;c[b+220>>2]=0;a[b+159>>0]=0;return}function OA(a,b){a=a|0;b=b|0;if((LA(a)|0)==(a|0)){a=c[a+16>>2]|0;c[a+220>>2]=b;b=(c[b+16>>2]|0)+216|0;c[b>>2]=(c[b>>2]|0)+(c[a+216>>2]|0);return}else ma(92702,92694,194,92718)}function PA(a,b){a=a|0;b=b|0;var d=0.0;b=c[(c[b+16>>2]|0)+132>>2]|0;d=+h[b+8>>3]*72.0;h[a>>3]=+h[b>>3]*72.0;h[a+8>>3]=d;return}function QA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0;o=l;l=l+576|0;n=o;i=0;while(1){if((i|0)>(d|0))break;k=n+(i<<4)|0;j=b+(i<<4)|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];i=i+1|0}m=1.0-e;i=1;while(1){if((i|0)>(d|0))break;j=d-i|0;k=i+-1|0;b=0;while(1){if((b|0)>(j|0))break;p=b+1|0;h[n+(i*96|0)+(b<<4)>>3]=+h[n+(k*96|0)+(p<<4)>>3]*e+ +h[n+(k*96|0)+(b<<4)>>3]*m;h[n+(i*96|0)+(b<<4)+8>>3]=+h[n+(k*96|0)+(p<<4)+8>>3]*e+ +h[n+(k*96|0)+(b<<4)+8>>3]*m;b=p}i=i+1|0}a:do if(f|0){i=0;while(1){if((i|0)>(d|0))break a;p=f+(i<<4)|0;k=n+(i*96|0)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];i=i+1|0}}while(0);b:do if(g|0){i=0;while(1){if((i|0)>(d|0))break b;p=g+(i<<4)|0;f=n+((d-i|0)*96|0)+(i<<4)|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];i=i+1|0}}while(0);p=n+(d*96|0)|0;c[a>>2]=c[p>>2];c[a+4>>2]=c[p+4>>2];c[a+8>>2]=c[p+8>>2];c[a+12>>2]=c[p+12>>2];l=o;return}function RA(b){b=b|0;var d=0,e=0,f=0,g=0;e=0;do{d=c[42360]|0;f=d+1024|0;if((d-e|0)<1024){c[42360]=f;f=zw(c[42361]|0,f)|0;c[42361]=f;d=c[42360]|0}else f=c[42361]|0;d=hL(f+e|0,d-e|0,b)|0;if(!d){g=6;break}e=(sJ(d)|0)+e|0;d=c[42361]|0}while((a[d+(e+-1)>>0]|0)!=10);if((g|0)==6)d=c[42361]|0;return ((e|0)>0?d:0)|0}function SA(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0)if(!0){d=c[42178]|0;e=c[42363]|0;if((c[42362]|0)==(d|0))d=e;else{if(e){$I(c[e>>2]|0);$I(c[42363]|0);c[42363]=0;d=c[42178]|0}c[42362]=d;if(!d)break;if(!(a[d>>0]|0))break;d=TA(d)|0;c[42363]=d}if(!((a[b>>0]|0)!=47&(d|0)!=0))break;b=UA(d,c[42364]|0,b)|0;break}else S();else b=0;while(0);l=f;return b|0}function TA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=0;f=0;g=0;b=HL(a)|0;d=0;while(1){b=EL(b,93017)|0;if(!b)break;a=(g<<2)+8|0;if(!f)a=xw(a)|0;else a=zw(d,a)|0;c[a+(g<<2)>>2]=b;f=sJ(b)|0;e=e>>>0>f>>>0?e:f;f=a;g=g+1|0;b=0;d=a}c[f+(g<<2)>>2]=0;c[42364]=e;return f|0}function UA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;h=c[42365]|0;c[42365]=bJ(h,b+2+(sJ(d)|0)|0)|0;while(1){b=c[a>>2]|0;if(!b){a=0;break}h=c[42365]|0;c[e>>2]=b;c[e+4>>2]=93015;c[e+8>>2]=d;qL(h,93008,e)|0;if(!(aM(c[42365]|0,4)|0)){f=4;break}else a=a+4|0}if((f|0)==4)a=c[42365]|0;l=g;return a|0}function VA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=(b|0)==0;f=0;while(1){h=c[d+(f<<2)>>2]|0;if(!h)break;if((!g?(a[b>>0]|0)==(a[h>>0]|0):0)?(yJ(b,h)|0)==0:0)break;f=f+1|0}return c[e+(f<<2)>>2]|0}function WA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;z=l;l=l+80|0;x=z+16|0;y=z;u=c[b+4>>2]|0;v=c[b>>2]|0;w=d+8|0;f=0;e=-1;g=1.e+38;b=-1;while(1){if((f|0)>=(u|0))break;s=c[v+(f*48|0)>>2]|0;t=c[v+(f*48|0)+4>>2]|0;r=0;while(1){if((r|0)>=(t|0))break;q=+h[s+(r<<4)>>3]-+h[d>>3];p=+h[s+(r<<4)+8>>3]-+h[w>>3];q=p*p+q*q;A=(e|0)==-1|q<g;C=A?r:e;r=r+1|0;b=A?f:b;e=C;g=A?q:g}f=f+1|0}f=c[v+(b*48|0)>>2]|0;e=e+(((e|0)==((c[v+(b*48|0)+4>>2]|0)+-1|0))<<31>>31)|0;e=e-((e|0)%3|0)|0;b=0;while(1){if((b|0)==4)break;C=b+e|0;h[x+(b<<4)>>3]=+h[f+(C<<4)>>3];h[x+(b<<4)+8>>3]=+h[f+(C<<4)+8>>3];b=b+1|0}q=+h[d>>3];k=+h[x>>3]-q;o=+h[w>>3];p=+h[x+8>>3]-o;j=+h[x+48>>3]-q;n=+h[x+56>>3]-o;b=y+8|0;g=1.0;i=0.0;j=n*n+j*j;k=p*p+k*k;while(1){p=(g+i)*.5;QA(y,x,3,p,0,0);m=+h[y>>3];n=+h[b>>3];if(+B(+(k-j))<1.0)break;if(+B(+(g-i))<1.0e-05)break;C=k<j;m=m-q;n=n-o;n=n*n+m*m;g=C?p:g;i=C?i:p;j=C?n:j;k=C?k:n}h[a>>3]=m;h[a+8>>3]=n;l=z;return}function XA(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;d=+FA(b,c[42191]|0,.75,.01);g=b+16|0;h[(c[g>>2]|0)+32>>3]=d;d=+FA(b,c[42190]|0,.5,.02);h[(c[g>>2]|0)+40>>3]=d;l=Ry(HA(b,c[42192]|0,93019)|0,b)|0;c[(c[g>>2]|0)+8>>2]=l;l=Km(b,c[42199]|0)|0;d=+FA(b,c[42195]|0,14.0,1.0);e=HA(b,c[42196]|0,93027)|0;f=HA(b,c[42197]|0,122106)|0;i=(dp(l)|0)!=0;k=(Cy(b)|0)==2;i=mw(b,l,(k?4:0)|(i?2:0),d,e,f)|0;c[(c[g>>2]|0)+104>>2]=i;i=c[42200]|0;if((i|0?(j=Km(b,i)|0,j|0):0)?a[j>>0]|0:0){l=(dp(j)|0)!=0;l=mw(b,j,l?2:0,d,e,f)|0;c[(c[g>>2]|0)+108>>2]=l;l=(c[(so(b)|0)+16>>2]|0)+113|0;a[l>>0]=a[l>>0]|16}k=(EA(b,c[42203]|0,0,0)|0)&255;l=c[g>>2]|0;a[l+144>>0]=k;gb[c[c[(c[l+8>>2]|0)+4>>2]>>2]&127](b);return}function YA(b){b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+112|0;m=v+96|0;n=v+80|0;s=v+40|0;u=v;r=b+48|0;p=so(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)|0;g=m+8|0;c[g>>2]=0;o=n+8|0;c[o>>2]=0;d=c[42227]|0;if(((d|0)!=0?(e=Km(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0){ZA(b,m);t=(dp(e)|0)!=0;i=+h[m>>3];f=c[g>>2]|0;d=c[m+12>>2]|0;e=mw(b,e,t?2:0,i,f,d)|0;t=b+16|0;c[(c[t>>2]|0)+96>>2]=e;e=(c[p+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|1;e=JA(GA(b,c[42237]|0,122100)|0)|0;a[(c[t>>2]|0)+114>>0]=e;t=1;e=f}else{t=0;d=0;i=0.0;e=0}f=c[42228]|0;if((f|0?(j=Km(b,f)|0,j|0):0)?a[j>>0]|0:0){if(!e){ZA(b,m);i=+h[m>>3];e=c[g>>2]|0;d=c[m+12>>2]|0}g=(dp(j)|0)!=0;j=mw(b,j,g?2:0,i,e,d)|0;c[(c[b+16>>2]|0)+108>>2]=j;j=(c[p+16>>2]|0)+113|0;a[j>>0]=a[j>>0]|32}d=c[42242]|0;if(((d|0)!=0?(k=Km(b,d)|0,(k|0)!=0):0)?(a[k>>0]|0)!=0:0){_A(b,m,n);j=(dp(k)|0)!=0;i=+h[n>>3];d=c[o>>2]|0;e=c[n+12>>2]|0;k=mw(b,k,j?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+100>>2]=k;k=(c[p+16>>2]|0)+113|0;a[k>>0]=a[k>>0]|2}else{e=0;i=0.0;d=0}f=c[42243]|0;if((f|0?(q=Km(b,f)|0,q|0):0)?a[q>>0]|0:0){if(!d){_A(b,m,n);e=c[n+12>>2]|0;i=+h[n>>3];d=c[o>>2]|0}o=(dp(q)|0)!=0;q=mw(b,q,o?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+104>>2]=q;q=(c[p+16>>2]|0)+113|0;a[q>>0]=a[q>>0]|4}d=Jm(b,96242)|0;d=d|0?d:174185;if(a[d>>0]|0)a[(c[(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)+16>>2]|0)+145>>0]=1;g=b+16|0;f=(c[g>>2]|0)+16|0;e=c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0;$A(s,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=s;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((aB(b,c[42249]|0)|0)<<24>>24)a[(c[g>>2]|0)+46>>0]=0;d=Jm(b,96251)|0;d=d|0?d:174185;if(!(a[d>>0]|0))e=b+-48|0;else{e=b+-48|0;a[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+145>>0]=1}f=(c[g>>2]|0)+56|0;e=c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0;$A(u,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=u;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((aB(b,c[42250]|0)|0)<<24>>24)a[(c[g>>2]|0)+86>>0]=0;l=v;return t|0}function ZA(a,b){a=a|0;b=b|0;h[b>>3]=+FA(a,c[42224]|0,14.0,1.0);c[b+8>>2]=HA(a,c[42225]|0,93027)|0;c[b+12>>2]=HA(a,c[42226]|0,122106)|0;return}function _A(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=b+8|0;if(!(c[e>>2]|0))ZA(a,b);h[d>>3]=+FA(a,c[42244]|0,+h[b>>3],1.0);c[d+8>>2]=HA(a,c[42245]|0,c[e>>2]|0)|0;c[d+12>>2]=HA(a,c[42246]|0,c[b+12>>2]|0)|0;return}function $A(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+128|0;k=m+80|0;h=m+40|0;g=m;if((f|0)!=0?(j=XJ(f,58)|0,(j|0)!=0):0){a[j>>0]=0;i=j+1|0;kb[d&31](h,e,f,i);e=k;g=h;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));a[j>>0]=58;f=i}else{kb[d&31](g,e,f,0);e=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0))}e=b;g=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));c[b+36>>2]=f;l=m;return}function aB(b,c){b=b|0;c=c|0;var d=0;if(((c|0)!=0?(d=Km(b,c)|0,(d|0)!=0):0)?(a[d>>0]|0)!=0:0)b=(JA(d)|0)<<24>>24==0&1;else b=0;return b|0}function bB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;k=l;l=l+32|0;i=k;j=c[b+8>>2]|0;d=c[b+4>>2]|0;d=(c[b+44>>2]|0)+((O((d|0)>1?d+-1|0:0,j)|0)<<4)|0;e=i+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];f=i+8|0;g=i+24|0;b=1;while(1){if((b|0)>=(j|0))break;m=d+(b<<4)|0;o=+h[m>>3];h[i>>3]=+h[(+h[i>>3]<o?i:m)>>3];n=+h[m+8>>3];h[f>>3]=+h[(+h[f>>3]<n?i:m)+8>>3];h[e>>3]=+h[(+h[e>>3]>o?e:m)>>3];h[g>>3]=+h[(+h[g>>3]>n?e:m)+8>>3];b=b+1|0}c[a>>2]=c[i>>2];c[a+4>>2]=c[i+4>>2];c[a+8>>2]=c[i+8>>2];c[a+12>>2]=c[i+12>>2];c[a+16>>2]=c[i+16>>2];c[a+20>>2]=c[i+20>>2];c[a+24>>2]=c[i+24>>2];c[a+28>>2]=c[i+28>>2];l=k;return}function cB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+64|0;g=d+32|0;e=d;f=c[a+16>>2]|0;a=f+16|0;f=c[f+116>>2]&1;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];dB(e,g,b,f);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=c[e+20>>2];c[a+24>>2]=c[e+24>>2];c[a+28>>2]=c[e+28>>2];l=d;return}function dB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;g=+h[d+56>>3];l=+h[d+64>>3];j=e<<24>>24==0;k=+h[d+24>>3];i=+h[d+32>>3];m=(j?k:i)*.5;f=g-m;g=m+g;if(f<+h[b>>3])h[b>>3]=f;e=b+16|0;if(g>+h[e>>3])h[e>>3]=g;g=(j?i:k)*.5;f=l-g;g=g+l;e=b+8|0;if(f<+h[e>>3])h[e>>3]=f;e=b+24|0;if(g>+h[e>>3])h[e>>3]=g;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function eB(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0;L=l;l=l+448|0;H=L+416|0;t=L+384|0;u=L+304|0;K=L+256|0;G=L+192|0;B=L+144|0;C=L+96|0;d=L+400|0;e=L+368|0;f=L+352|0;g=L+336|0;v=L+288|0;w=L+224|0;x=L+160|0;y=L+112|0;z=L+64|0;A=L+32|0;I=L;J=b+16|0;if((nn(b)|0)==0?(c[(c[J>>2]|0)+180>>2]|0)==0:0){fB(d,0.0,0.0);c[K>>2]=c[d>>2];c[K+4>>2]=c[d+4>>2];c[K+8>>2]=c[d+8>>2];c[K+12>>2]=c[d+12>>2];K=K+16|0;fB(e,0.0,0.0);c[K>>2]=c[e>>2];c[K+4>>2]=c[e+4>>2];c[K+8>>2]=c[e+8>>2];c[K+12>>2]=c[e+12>>2]}else{fB(f,2147483647.0,2147483647.0);c[K>>2]=c[f>>2];c[K+4>>2]=c[f+4>>2];c[K+8>>2]=c[f+8>>2];c[K+12>>2]=c[f+12>>2];F=K+16|0;fB(g,-2147483647.0,-2147483647.0);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];o=C+8|0;p=u+16|0;D=K+8|0;q=u+8|0;E=K+24|0;r=u+24|0;s=B+8|0;n=eo(b)|0;while(1){if(!n)break;PA(B,n);d=n+16|0;m=c[d>>2]|0;h[C>>3]=(+h[m+96>>3]+ +h[m+88>>3])*.5;h[o>>3]=+h[m+80>>3]*.5;c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];gB(u,t,H);c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];hB(v,t,H);c[p>>2]=c[v>>2];c[p+4>>2]=c[v+4>>2];c[p+8>>2]=c[v+8>>2];c[p+12>>2]=c[v+12>>2];h[K>>3]=+h[(+h[K>>3]<+h[u>>3]?K:u)>>3];h[D>>3]=+h[(+h[D>>3]<+h[q>>3]?K:u)+8>>3];h[F>>3]=+h[(+h[F>>3]>+h[p>>3]?K:u)+16>>3];h[E>>3]=+h[(+h[E>>3]>+h[r>>3]?K:u)+24>>3];d=c[(c[d>>2]|0)+108>>2]|0;if(d|0?a[d+81>>0]|0:0){m=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(w,H,d,m);c[K>>2]=c[w>>2];c[K+4>>2]=c[w+4>>2];c[K+8>>2]=c[w+8>>2];c[K+12>>2]=c[w+12>>2];c[K+16>>2]=c[w+16>>2];c[K+20>>2]=c[w+20>>2];c[K+24>>2]=c[w+24>>2];c[K+28>>2]=c[w+28>>2]}m=Qm(b,n)|0;while(1){if(!m)break;k=m+16|0;d=c[k>>2]|0;j=d+8|0;e=c[j>>2]|0;if(e|0){i=0;while(1){if((i|0)<(c[e+4>>2]|0))g=0;else break;while(1){f=c[e>>2]|0;if((g|0)>=(c[f+(i*48|0)+4>>2]|0))break;e=(c[f+(i*48|0)>>2]|0)+(g<<4)|0;c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];N=+h[B>>3];h[K>>3]=+h[(+h[K>>3]<N?K:B)>>3];M=+h[s>>3];h[D>>3]=+h[(+h[D>>3]<M?K:B)+8>>3];h[F>>3]=+h[(+h[F>>3]>N?F:B)>>3];h[E>>3]=+h[(+h[E>>3]>M?F:B)+8>>3];g=g+1|0;e=c[j>>2]|0}i=i+1|0}e=c[d+96>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(x,H,e,d);c[K>>2]=c[x>>2];c[K+4>>2]=c[x+4>>2];c[K+8>>2]=c[x+8>>2];c[K+12>>2]=c[x+12>>2];c[K+16>>2]=c[x+16>>2];c[K+20>>2]=c[x+20>>2];c[K+24>>2]=c[x+24>>2];c[K+28>>2]=c[x+28>>2];d=c[k>>2]|0}e=c[d+100>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(y,H,e,d);c[K>>2]=c[y>>2];c[K+4>>2]=c[y+4>>2];c[K+8>>2]=c[y+8>>2];c[K+12>>2]=c[y+12>>2];c[K+16>>2]=c[y+16>>2];c[K+20>>2]=c[y+20>>2];c[K+24>>2]=c[y+24>>2];c[K+28>>2]=c[y+28>>2];d=c[k>>2]|0}e=c[d+104>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(z,H,e,d);c[K>>2]=c[z>>2];c[K+4>>2]=c[z+4>>2];c[K+8>>2]=c[z+8>>2];c[K+12>>2]=c[z+12>>2];c[K+16>>2]=c[z+16>>2];c[K+20>>2]=c[z+20>>2];c[K+24>>2]=c[z+24>>2];c[K+28>>2]=c[z+28>>2];d=c[k>>2]|0}d=c[d+108>>2]|0;if(d|0?a[d+81>>0]|0:0){k=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(A,H,d,k);c[K>>2]=c[A>>2];c[K+4>>2]=c[A+4>>2];c[K+8>>2]=c[A+8>>2];c[K+12>>2]=c[A+12>>2];c[K+16>>2]=c[A+16>>2];c[K+20>>2]=c[A+20>>2];c[K+24>>2]=c[A+24>>2];c[K+28>>2]=c[A+28>>2]}}m=Sm(b,m)|0}n=fo(b,n)|0}d=c[J>>2]|0;f=c[d+180>>2]|0;g=d+184|0;i=G+8|0;j=G+16|0;k=G+24|0;e=1;while(1){if((e|0)>(f|0))break;P=+h[(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+16>>3];h[G>>3]=P;C=c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0;O=+h[C+24>>3];h[i>>3]=O;M=+h[C+32>>3];h[j>>3]=M;N=+h[C+40>>3];h[k>>3]=N;h[K>>3]=+h[(+h[K>>3]<P?K:G)>>3];h[D>>3]=+h[(+h[D>>3]<O?K:G)+8>>3];h[F>>3]=+h[(+h[F>>3]>M?K:G)+16>>3];h[E>>3]=+h[(+h[E>>3]>N?K:G)+24>>3];e=e+1|0}e=c[d+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[d+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];dB(I,H,e,d);c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[K+16>>2]=c[I+16>>2];c[K+20>>2]=c[I+20>>2];c[K+24>>2]=c[I+24>>2];c[K+28>>2]=c[I+28>>2];d=c[J>>2]|0}J=d+16|0;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];c[J+20>>2]=c[K+20>>2];c[J+24>>2]=c[K+24>>2];c[J+28>>2]=c[K+28>>2]}l=L;return}function fB(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function gB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function hB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function iB(a){a=a|0;if((c[a+60>>2]|0)==(a|0))a=1;else a=(qK(En(a)|0,93039,7)|0)==0&1;return a|0}function jB(a){a=a|0;var b=0;b=Rl(22612,c[4345]|0)|0;mB(a,b);return b|0}function kB(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b,512)|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function lB(a,b,c){a=a|0;b=b|0;c=c|0;c=bn(so(b)|0,b,c,0,1)|0;Oo(c,122254,176,1)|0;Nm(a,c)|0;return c|0}function mB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;f=a+16|0;e=1;while(1){a=c[f>>2]|0;if((e|0)>(c[a+180>>2]|0))break;a=c[(c[a+184>>2]|0)+(e<<2)>>2]|0;d=En(a)|0;if(!(bb[c[b>>2]&31](b,d,512)|0)){i=ww(16)|0;c[i+8>>2]=d;c[i+12>>2]=a;bb[c[b>>2]&31](b,i,1)|0}else{c[g>>2]=d;$l(0,93062,g)|0}mB(a,b);e=e+1|0}l=h;return}function nB(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}function oB(a){a=a|0;var b=0,c=0,d=0;d=Jp(a,93047,1)|0;Oo(d,122277,280,1)|0;b=eo(a)|0;while(1){if(!b)break;c=Qm(a,b)|0;while(1){if(!c)break;pB(c,d);c=Sm(a,c)|0}b=fo(a,b)|0}b=eo(d)|0;while(1){if(!b)break;c=fo(d,b)|0;qB(b);ro(a,b)|0;b=c}mn(d)|0;return}function pB(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]&3;f=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;if(!((a[(c[f+16>>2]|0)+118>>0]|0)==0?!(a[(c[e+16>>2]|0)+118>>0]|0):0)){f=rB(f,d)|0;e=lB(b,f,rB(e,d)|0)|0;f=c[b+16>>2]|0;d=f+8|0;e=c[e+16>>2]|0;c[e+8>>2]=c[d>>2];c[d>>2]=0;d=f+96|0;c[e+96>>2]=c[d>>2];c[d>>2]=0;d=f+108|0;c[e+108>>2]=c[d>>2];c[d>>2]=0;d=f+100|0;c[e+100>>2]=c[d>>2];c[d>>2]=0;f=f+104|0;c[e+104>>2]=c[f>>2];c[f>>2]=0;sB(b)}return}function qB(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+132>>2]|0;if(d){$I(d);b=c[e>>2]|0}d=c[b+8>>2]|0;if(d){gb[c[(c[d+4>>2]|0)+4>>2]&127](a);b=c[e>>2]|0}pw(c[b+104>>2]|0);pw(c[(c[e>>2]|0)+108>>2]|0);Qo(a,122241)|0;return}function rB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=so(b)|0;a:do if(a[(c[b+16>>2]|0)+118>>0]|0){jo(d,b,1)|0;b=XJ(En(b)|0,58)|0;if(!b)ma(96030,92694,1225,93114);d=b+1|0;b=oo(f,d,0)|0;if(!b){b=oo(f,d,1)|0;Oo(b,122241,304,1)|0;d=Em(f,1,0)|0;while(1){if(!d)break a;g=Km(b,d)|0;e=c[d+12>>2]|0;if((g|0)!=(e|0))Dm(b,d,e)|0;d=Em(f,1,d)|0}}}while(0);return b|0}function sB(a){a=a|0;var b=0;b=a+16|0;$I(c[(c[b>>2]|0)+144>>2]|0);tB(a);pw(c[(c[b>>2]|0)+96>>2]|0);pw(c[(c[b>>2]|0)+108>>2]|0);pw(c[(c[b>>2]|0)+100>>2]|0);pw(c[(c[b>>2]|0)+104>>2]|0);Qo(a,122254)|0;return}function tB(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;a=c[e>>2]|0;b=c[a+8>>2]|0;if(b){d=0;while(1){a=c[b>>2]|0;if((d|0)>=(c[b+4>>2]|0))break;$I(c[a+(d*48|0)>>2]|0);d=d+1|0;b=c[(c[e>>2]|0)+8>>2]|0}$I(a);$I(c[(c[e>>2]|0)+8>>2]|0);a=c[e>>2]|0}c[a+8>>2]=0;return}function uB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=zm(a,b,c,0)|0;if(!e)e=zm(a,b,c,d)|0;return e|0}function vB(a,b){a=a|0;b=b|0;return yJ(c[a>>2]|0,c[b>>2]|0)|0}function wB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+1072|0;k=q+8|0;j=q;i=q+16|0;o=q+24|0;c[i>>2]=b;if((c[42366]|0)!=(d|0)){c[42366]=d;a[174084]=0}dm(o,1024,q+40|0);p=o+4|0;n=o+8|0;while(1){f=b+1|0;c[i>>2]=f;e=a[b>>0]|0;if(!(e<<24>>24))break;do if((e&255)<192)if(e<<24>>24==38){f=yB(i)|0;if(!f)e=38;else{if(f>>>0<127){e=f&255;break}b=c[p>>2]|0;e=b>>>0>=(c[n>>2]|0)>>>0;if(f>>>0<2047){if(e){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6|192;e=(f&63|128)&255;break}if(e){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>12|224;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6&63|128;e=(f&63|128)&255}}else{h=0;m=9}else if((e&255)>=224)if((e&255)>=240)if((e&255)<248){h=3;m=9}else{if(!(a[174084]|0)){c[j>>2]=En(d)|0;$l(0,94529,j)|0;a[174084]=1}h=-1;e=xB(e,o)|0;m=9}else{h=2;m=9}else{h=1;m=9}while(0);do if((m|0)==9){m=0;g=0;while(1){if((g|0)>=(h|0)){m=34;break}if((a[f>>0]&-64)<<24>>24!=-128)break;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;g=g+1|0;e=a[f>>0]|0;f=f+1|0}if((m|0)==34){m=0;c[i>>2]=f;break}c[i>>2]=f;if(!(a[174084]|0)){g=En(d)|0;c[k>>2]=h+1;c[k+4>>2]=g;$l(0,94650,k)|0;a[174084]=1}e=xB(e,o)|0}while(0);b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;b=c[i>>2]|0}b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){em(o,1)|0;b=c[p>>2]|0}a[b>>0]=0;n=c[o>>2]|0;c[p>>2]=n;p=HL(n)|0;hm(o);l=q;return p|0}function xB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;g=j;a[g>>0]=b;a[g+1>>0]=0;g=zB(g)|0;h=d+4|0;i=d+8|0;e=sJ(g)|0;f=g;while(1){if((e|0)<=1)break;b=c[h>>2]|0;if(b>>>0>=(c[i>>2]|0)>>>0){em(d,1)|0;b=c[h>>2]|0}k=a[f>>0]|0;c[h>>2]=b+1;a[b>>0]=k;e=e+-1|0;f=f+1|0}k=a[f>>0]|0;$I(g);l=j;return k|0}function yB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;d=i+8|0;e=c[b>>2]|0;a:do if((a[e>>0]|0)!=35){c[h>>2]=d;g=0;b:while(1){if((g|0)>=8){d=0;break a}f=a[e+g>>0]|0;switch(f<<24>>24){case 0:{d=0;break a}case 59:break b;default:{}}a[d>>0]=f;d=d+1|0;g=g+1|0}a[d>>0]=0;d=wM(h,22648,252,8,30)|0;if(!d)d=0;else{e=e+(g+1)|0;d=c[d+4>>2]|0}}else{h=a[e+1>>0]|0;d=h&255;c:do if((h|32)<<24>>24==120){h=0;g=2;while(1){if((g|0)>=8){f=h;break c}f=a[e+g>>0]|0;d=f&255;if((f+-65&255)>=6)if((f+-97&255)>=6)if((f+-48&255)<10)f=-48;else{f=h;break c}else f=-87;else f=-55;d=f+d|0;h=d+(h<<4)|0;g=g+1|0}}else{f=0;g=1;while(1){if((g|0)>=8)break c;h=a[e+g>>0]|0;d=h&255;if((h+-48&255)>=10)break c;f=(f*10|0)+-48+d|0;g=g+1|0}}while(0);d=(d|0)==59;e=d?e+(g+1)|0:e;d=d?f:0}while(0);c[b>>2]=e;l=i;return d|0}function zB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1056|0;g=k;i=k+8|0;c[g>>2]=b;dm(i,1024,k+24|0);j=i+4|0;h=i+8|0;while(1){c[g>>2]=b+1;d=a[b>>0]|0;if(!(d<<24>>24))break;b=d&255;if(d<<24>>24==38){b=yB(g)|0;if(!b){b=38;f=6}else f=5}else f=5;do if((f|0)==5){f=0;if(b>>>0<127)f=6;else{d=c[j>>2]|0;e=d>>>0>=(c[h>>2]|0)>>>0;if(b>>>0<2047){if(e){em(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6|192;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}b=b&63|128;break}if(e){em(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>12|224;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6&63|128;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}b=b&63|128}}while(0);if((f|0)==6){d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;d=c[j>>2]|0}}c[j>>2]=d+1;a[d>>0]=b;b=c[g>>2]|0}b=c[j>>2]|0;if(b>>>0>=(c[h>>2]|0)>>>0){em(i,1)|0;b=c[j>>2]|0}a[b>>0]=0;h=c[i>>2]|0;c[j>>2]=h;j=HL(h)|0;hm(i);l=k;return j|0}function AB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+1040|0;g=i;dm(g,1024,i+16|0);h=g+4|0;f=g+8|0;while(1){d=b+1|0;e=a[b>>0]|0;if(!(e<<24>>24))break;if((e&255)<127){b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){em(g,1)|0;b=c[h>>2]|0}c[h>>2]=b+1;a[b>>0]=e;b=d;continue}else{e=a[d>>0]&63|e<<6&255;d=c[h>>2]|0;if(d>>>0>=(c[f>>2]|0)>>>0){em(g,1)|0;d=c[h>>2]|0}c[h>>2]=d+1;a[d>>0]=e;b=b+2|0;continue}}b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){em(g,1)|0;b=c[h>>2]|0}a[b>>0]=0;f=c[g>>2]|0;c[h>>2]=f;h=HL(f)|0;hm(g);l=i;return h|0}function BB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;e=n+48|0;d=n+32|0;f=n+64|0;g=n+16|0;i=n;j=b+16|0;k=a+16|0;m=c[k>>2]|0;if(((+h[j>>3]>=+h[m+48>>3]?+h[m+64>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=+h[m+56>>3]:0)?+h[m+72>>3]>=+h[b+8>>3]:0){m=m+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];CB(g,d,e);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];gB(i,d,e);c[f>>2]=a;c[f+4>>2]=0;d=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0;c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];d=ab[d&63](f,e)|0}else d=0;l=n;return d|0}function CB(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function DB(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;e=l;l=l+80|0;j=e+64|0;k=e+48|0;m=e;n=e+32|0;g=e+16|0;h[m>>3]=+h[a+24>>3]*.5;h[m+8>>3]=+h[a+32>>3]*.5;a=a+56|0;c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];gB(n,k,j);i=+h[n>>3];f=+h[n+8>>3];c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];hB(g,k,j);d=+h[g+8>>3];if((+h[b+16>>3]>=i?+h[g>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=f:0)a=d>=+h[b+8>>3]&1;else a=0;l=e;return a|0}function EB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;k=n+48|0;j=n;h=a+16|0;a=c[h>>2]|0;i=c[a+8>>2]|0;a:do if((i|0)!=0?(g=i+8|0,c[j>>2]=c[g>>2],c[j+4>>2]=c[g+4>>2],c[j+8>>2]=c[g+8>>2],c[j+12>>2]=c[g+12>>2],c[j+16>>2]=c[g+16>>2],c[j+20>>2]=c[g+20>>2],c[j+24>>2]=c[g+24>>2],c[j+28>>2]=c[g+28>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(FB(j,k)|0)!=0):0){d=i+4|0;a=0;while(1){if((a|0)>=(c[d>>2]|0))break;e=j;f=(c[i>>2]|0)+(a*48|0)|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if(!((GB(j,k)|0)<<24>>24))a=a+1|0;else{a=1;break a}}a=c[h>>2]|0;m=7}else m=7;while(0);do if((m|0)==7){a=c[a+96>>2]|0;if(a|0?(c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(DB(a,k)|0)<<24>>24):0){a=1;break}a=0}while(0);l=n;return a|0}\nfunction ti(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=a+16|0;i=ww((b[(c[h>>2]|0)+238>>1]<<2)+8|0)|0;g=eo(a)|0;while(1){if(!g)break;f=i+(c[(c[g+16>>2]|0)+232>>2]<<2)|0;c[f>>2]=(c[f>>2]|0)+1;f=Qm(a,g)|0;while(1){if(!f)break;j=c[f>>2]&3;d=c[(c[(c[((j|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;j=c[(c[(c[((j|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;k=(d|0)>(j|0);e=k?d:j;d=k?j:d;while(1){d=d+1|0;if((d|0)>=(e|0))break;k=i+(d<<2)|0;c[k>>2]=(c[k>>2]|0)+1}f=Sm(a,f)|0}g=fo(a,g)|0}f=ww((b[(c[h>>2]|0)+238>>1]<<6)+128|0)|0;e=c[h>>2]|0;c[e+196>>2]=f;d=b[e+236>>1]|0;while(1){if((d|0)>(b[e+238>>1]|0))break;j=i+(d<<2)|0;e=c[j>>2]|0;c[f+(d<<6)>>2]=e;c[f+(d<<6)+8>>2]=e;j=ww((c[j>>2]<<2)+4|0)|0;e=c[h>>2]|0;k=c[e+196>>2]|0;c[k+(d<<6)+4>>2]=j;c[k+(d<<6)+12>>2]=j;d=d+1|0;f=k}$I(i);return}function ui(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;i=1;while(1){g=c[m>>2]|0;if((i|0)>(c[g+180>>2]|0))break;l=ui(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,d,e,f)|0;i=i+1|0;f=l}a:do if((Wf(a)|0)!=(a|0)){WN(d|0,0,e<<2|0)|0;g=eo(a)|0;while(1){if(!g)break;k=g+16|0;c[d+(c[(c[k>>2]|0)+232>>2]<<2)>>2]=1;i=Qm(a,g)|0;while(1){if(!i)break;l=i+-48|0;j=c[(c[k>>2]|0)+232>>2]|0;while(1){e=j+1|0;if((j|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:l)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;c[d+(e<<2)>>2]=1;j=e}i=Sm(a,i)|0}g=fo(a,g)|0}g=c[m>>2]|0;i=b[g+236>>1]|0;while(1){if((i|0)>(b[g+238>>1]|0))break a;if(!(c[d+(i<<2)>>2]|0)){if(!f)f=Jp(Wf(a)|0,79522,1)|0;g=oo(f,0,1)|0;Oo(g,122241,304,1)|0;l=g+16|0;j=c[l>>2]|0;c[j+232>>2]=i;h[j+96>>3]=.5;h[j+88>>3]=.5;h[j+80>>3]=1.0;c[j+216>>2]=1;c[j+176>>2]=0;j=ww(20)|0;k=c[l>>2]|0;c[k+172>>2]=j;c[k+184>>2]=0;k=ww(20)|0;c[(c[l>>2]|0)+180>>2]=k;jo(a,g,1)|0;g=c[m>>2]|0}i=i+1|0}}while(0);return f|0}function vi(a){a=a|0;var b=0,d=0;Lh(a);b=a+16|0;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;vi(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function wi(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=xi(c[((b|0)==3?a:a+48|0)+40>>2]|0)|0;b=c[17236+(d*12|0)+((xi(c[((b|0)==2?a:a+-48|0)+40>>2]|0)|0)<<2)>>2]|0;a=(c[a+16>>2]|0)+156|0;c[a>>2]=O(c[a>>2]|0,b)|0;return}function xi(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)b=2;else b=(a[b+160>>0]|0)<2&1;return b|0}function yi(b,d){b=b|0;d=d|0;if(c[(c[b+16>>2]|0)+192>>2]|0){Zk(b);zi(b);if(a[174080]|0)ll(b);Ai(b);if(Dl(b)|0)zi(b);Bi(b);if(hx(b,2,Ci(b)|0)|0?(Di(b),hx(b,2,Ci(b)|0)|0):0)ma(79540,79568,134,79579);Ei(b);Fi(b,d);Gi(b)}return}function zi(d){d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;v=d+16|0;e=c[v>>2]|0;w=c[e+196>>2]|0;t=b[e+236>>1]|0;while(1){if((t|0)>(b[e+238>>1]|0))break;n=w+(t<<6)|0;o=w+(t<<6)+4|0;p=w+(t<<6)+40|0;q=w+(t<<6)+24|0;r=w+(t<<6)+32|0;s=w+(t<<6)+16|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break;l=(c[(c[o>>2]|0)+(m<<2)>>2]|0)+16|0;e=c[l>>2]|0;j=+h[e+80>>3]*.5;i=c[e+204>>2]|0;a:do if(i){g=0;while(1){f=c[i+(g<<2)>>2]|0;if(!f)break a;x=c[f>>2]&3;if((c[((x|0)==3?f:f+48|0)+40>>2]|0)==(c[((x|0)==2?f:f+-48|0)+40>>2]|0)?(u=c[(c[f+16>>2]|0)+96>>2]|0,(u|0)!=0):0){k=+h[u+32>>3]*.5;j=j>k?j:k}g=g+1|0}}while(0);if(+h[p>>3]<j){h[q>>3]=j;h[p>>3]=j}if(+h[r>>3]<j){h[s>>3]=j;h[r>>3]=j}f=c[e+212>>2]|0;if(f|0){if((f|0)==(d|0))g=0;else{g=EA(f,c[42189]|0,8,0)|0;e=c[l>>2]|0}i=c[e+232>>2]|0;f=c[f+16>>2]|0;e=f+128|0;j=j+ +(g|0);if((i|0)==(b[f+236>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}e=f+120|0;if((i|0)==(b[f+238>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}}m=m+1|0}t=t+1|0;e=c[v>>2]|0}m=fj(d)|0;g=c[v>>2]|0;e=b[g+238>>1]|0;h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[w+(e<<6)+16>>3];f=b[g+236>>1]|0;i=g+252|0;k=0.0;while(1){l=e+-1|0;if((e|0)<=(f|0))break;y=+h[w+(l<<6)+32>>3]+ +h[w+(e<<6)+40>>3]+ +(c[i>>2]|0);j=+h[w+(e<<6)+24>>3]+8.0+ +h[w+(l<<6)+16>>3];j=y>j?y:j;if((c[w+(l<<6)>>2]|0)>0)h[(c[(c[c[w+(l<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+j;k=k>j?k:j;e=l}b:do if((m|0)!=0?(c[g+116>>2]&1|0)!=0:0){gj(d,0);g=c[v>>2]|0;if(a[g+276>>0]|0){e=b[g+238>>1]|0;f=b[g+236>>1]|0;j=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];k=0.0;while(1){i=e+-1|0;if((e|0)<=(f|0))break b;z=+h[(c[(c[c[w+(i<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];y=z-j;j=z;k=k>y?k:y;e=i}}}while(0);c:do if(a[g+276>>0]|0){i=b[g+236>>1]|0;f=b[g+238>>1]|0;while(1){e=f+-1|0;if((f|0)<=(i|0))break c;if((c[w+(e<<6)>>2]|0)<=0){f=e;continue}h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+k;f=e}}while(0);e=g+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;h[e+24>>3]=+h[(c[(c[c[w+(c[e+232>>2]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];e=e+164|0}return}function Ai(a){a=a|0;var b=0,d=0,e=0;bj(a);b=(c[a+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+224>>2]|0;if(d){cj(a,d);b=c[e>>2]|0}d=c[b+228>>2]|0;if(!d)d=b;else{cj(a,d);d=c[e>>2]|0}e=c[d+204>>2]|0;if(e|0){b=0;while(1)if(!(c[e+(b<<2)>>2]|0))break;else b=b+1|0}b=d+164|0}return}function Bi(a){a=a|0;Pi(a);Qi(a);Ri(a);Si(a);Ti(a);return}function Ci(a){a=a|0;var b=0,c=0.0;b=Jm(a,79768)|0;if(!b)a=2147483647;else{c=+tM(b);a=~~(c*+(nn(a)|0))}return a|0}function Di(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+16|0;e=c[r>>2]|0;q=b[e+236>>1]|0;while(1){p=b[e+238>>1]|0;if((q|0)>(p|0)){s=19;break}n=c[e+196>>2]|0;o=n+(q<<6)|0;m=c[o>>2]|0;n=n+(q<<6)+4|0;l=0;f=0;a:while(1){if((l|0)>=(m|0)){s=14;break}f=c[(c[n>>2]|0)+(l<<2)>>2]|0;h=c[f+16>>2]|0;i=c[h+256>>2]|0;b:do if(i|0){g=0;while(1){j=c[i+(g<<2)>>2]|0;if(!j)break b;k=c[j>>2]&3;if((c[(c[(c[((k|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((k|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);h=c[h+248>>2]|0;c:do if(h|0){g=0;while(1){i=c[h+(g<<2)>>2]|0;if(!i)break c;j=c[i>>2]&3;if((c[(c[(c[((j|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((j|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);l=l+1|0}if((s|0)==14){s=0;if(f){f=c[c[n>>2]>>2]|0;e=c[c[o+(((q|0)<(p|0)?1:-1)<<6)+4>>2]>>2]|0;if(!e){s=16;break}o=gh(d)|0;p=o+16|0;a[(c[p>>2]|0)+156>>0]=2;Ni(o,f,0.0,0)|0;Ni(o,e,0.0,0)|0;c[(c[p>>2]|0)+232>>2]=c[(c[((c[(c[f+16>>2]|0)+232>>2]|0)<(c[(c[e+16>>2]|0)+232>>2]|0)?f:e)+16>>2]|0)+232>>2];e=c[r>>2]|0}}q=q+1|0}if((s|0)==16)ma(79676,79568,111,79679);else if((s|0)==19)return}function Ei(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;a=c[a+16>>2]|0;i=c[a+196>>2]|0;e=b[a+238>>1]|0;a=b[a+236>>1]|0;while(1){if((a|0)>(e|0))break;f=c[i+(a<<6)>>2]|0;g=i+(a<<6)+4|0;d=0;while(1){if((d|0)>=(f|0))break;k=c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;j=k+232|0;h[k+16>>3]=+(c[j>>2]|0);c[j>>2]=a;d=d+1|0}a=a+1|0}return}function Fi(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;Hi(a,a);g=a+16|0;k=c[g>>2]|0;a:do if((b[k+238>>1]|0)>0?(j=c[k+8>>2]|0,e=c[j+84>>2]|0,e|0):0){o=~~(+h[k+32>>3]-+h[k+16>>3]);m=~~(+h[k+40>>3]-+h[k+24>>3]);p=(c[k+116>>2]&1|0)==0;n=p?m:o;m=p?o:m;if((e|0)==4){e=Ii(a)|0;k=c[g>>2]|0;j=c[k+8>>2]|0}else e=(e|0)==2&1;b:do if(!(e<<24>>24)){switch(c[j+84>>2]|0){case 5:{f=+h[j+64>>3];if(f<=0.0)break a;i=f/+h[k+32>>3];l=+h[j+72>>3]/+h[k+40>>3];f=i<l?i:l;if(i>1.0&l>1.0){l=f;break b}else break a}case 1:break;default:break a}i=+h[j+16>>3];f=+(n|0)/+(m|0);if(f<i){l=1.0;f=i/f;break}else{l=f/i;f=1.0;break}}else{f=+h[j+64>>3];if(f<=0.0)break a;i=f/+(m|0);f=+h[j+72>>3]/+(n|0);if(i<1.0|f<1.0)if(i<f){l=1.0;f=f/i;break}else{l=i/f;f=1.0;break}else l=i}while(0);e=(c[k+116>>2]&1|0)==0;i=e?f:l;f=e?l:f;e=k+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;p=e+16|0;l=+h[p>>3]*f;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);p=e+24|0;l=+h[p>>3]*i;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);e=e+164|0}Ji(a,f,i)}while(0);if(d|0)Ki(a,d);return}function Gi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+16|0;b=(c[h>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;g=b+16|0;d=0;while(1){b=c[g>>2]|0;f=c[b+180>>2]|0;e=c[f+(d<<2)>>2]|0;if(!e)break;$I(c[e+16>>2]|0);$I(e);d=d+1|0}if(f){$I(f);b=c[g>>2]|0}d=c[b+172>>2]|0;if(d){$I(d);b=c[g>>2]|0}f=b+256|0;e=c[f+4>>2]|0;b=b+180|0;c[b>>2]=c[f>>2];c[b+4>>2]=e;b=c[g>>2]|0;e=b+248|0;f=c[e+4>>2]|0;b=b+172|0;c[b>>2]=c[e>>2];c[b+4>>2]=f;b=(c[g>>2]|0)+164|0}b=0;d=c[(c[h>>2]|0)+192>>2]|0;a:while(1){g=(b|0)==0;f=b+16|0;b=d;while(1){if(!b)break a;e=c[b+16>>2]|0;d=c[e+164>>2]|0;if((a[e+156>>0]|0)!=2)continue a;if(g)c[(c[h>>2]|0)+192>>2]=d;else c[(c[f>>2]|0)+164>>2]=d;$I(e);$I(b);b=d}}c[(c[(c[(c[h>>2]|0)+192>>2]|0)+16>>2]|0)+168>>2]=0;return}function Hi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=a+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Hi(c[(c[f+184>>2]|0)+(d<<2)>>2]|0,b);d=d+1|0}Mi(a,b);return}function Ii(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;s=l;l=l+80|0;e=s+64|0;d=s+48|0;f=s+16|0;m=s;r=s+32|0;a=a+16|0;b=c[(c[a>>2]|0)+8>>2]|0;t=b+48|0;c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];if((!(+h[f>>3]<.001)?(g=f+8|0,!(+h[g>>3]<.001)):0)?(i=b+32|0,c[m>>2]=c[i>>2],c[m+4>>2]=c[i+4>>2],c[m+8>>2]=c[i+8>>2],c[m+12>>2]=c[i+12>>2],c[d>>2]=c[f>>2],c[d+4>>2]=c[f+4>>2],c[d+8>>2]=c[f+8>>2],c[d+12>>2]=c[f+12>>2],c[e>>2]=c[i>>2],c[e+4>>2]=c[i+4>>2],c[e+8>>2]=c[i+8>>2],c[e+12>>2]=c[i+12>>2],Li(r,d,e),c[f>>2]=c[r>>2],c[f+4>>2]=c[r+4>>2],c[f+8>>2]=c[r+8>>2],c[f+12>>2]=c[r+12>>2],c[d>>2]=c[r>>2],c[d+4>>2]=c[r+4>>2],c[d+8>>2]=c[r+8>>2],c[d+12>>2]=c[r+12>>2],c[e>>2]=c[m>>2],c[e+4>>2]=c[m+4>>2],c[e+8>>2]=c[m+8>>2],c[e+12>>2]=c[m+12>>2],Li(f,d,e),i=c[a>>2]|0,j=+h[i+32>>3],k=+h[i+40>>3],n=+h[f>>3],o=n/j,p=+h[g>>3],q=p/k,!(o>=1.0&q>=1.0)):0){o=o<q?o:q;o=o>.5?o:.5;q=+N(+(o*k/p))*p/k;p=+N(+(o*j/n))*n/j*j;a=c[i+8>>2]|0;h[a+64>>3]=p;h[a+72>>3]=q*k;a=1}else a=0;l=s;return a|0}function Ji(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=a+16|0;a=1;while(1){f=c[e>>2]|0;if((a|0)>(c[f+180>>2]|0))break;Ji(c[(c[f+184>>2]|0)+(a<<2)>>2]|0,b,d);a=a+1|0}e=f+16|0;h[e>>3]=+h[e>>3]*b;e=f+24|0;h[e>>3]=+h[e>>3]*d;e=f+32|0;h[e>>3]=+h[e>>3]*b;f=f+40|0;h[f>>3]=+h[f>>3]*d;return}function Ki(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+24|0;g=m+16|0;f=m;n=c[a+16>>2]|0;e=+h[n+32>>3]-+h[n+16>>3];d=+h[n+40>>3]-+h[n+24>>3];i=e/d;if(0){n=c[13918]|0;h[f>>3]=i;h[f+8>>3]=e*.0001*d;AL(n,79592,f)|0;c[g>>2]=lk(a)|0;AL(n,79617,g)|0}d=+h[b>>3];do if(!(i>d*1.1)){a=b+24|0;if(!(i<=d*.8)){c[a>>2]=0;k=9;break}c[a>>2]=-1;if(0){YL(79627,34,1,c[13918]|0)|0;k=9}}else{c[b+24>>2]=~~(d*+((c[b+20>>2]|0)-(c[b+16>>2]|0)|0)/i);k=9}while(0);if((k|0)==9?0:0){n=c[13918]|0;c[j>>2]=c[b+24>>2];AL(n,79662,j)|0}l=m;return}function Li(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function Mi(d,e){d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;s=(Wf(d)|0)==(d|0);v=d+16|0;w=c[v>>2]|0;a:do if(s){f=b[w+236>>1]|0;d=b[w+238>>1]|0;q=d<<16>>16;r=w+196|0;s=w+196|0;p=f<<16>>16;i=-2147483647.0;g=2147483647.0;while(1){if((p|0)>(q|0))break;j=c[r>>2]|0;o=c[j+(p<<6)>>2]|0;if((o|0)!=0?(t=c[j+(p<<6)+4>>2]|0,u=c[t>>2]|0,(u|0)!=0):0){l=1;j=u;while(1){j=c[j+16>>2]|0;k=a[j+156>>0]|0;if(!((l|0)<(o|0)&k<<24>>24!=0))break;j=c[t+(l<<2)>>2]|0;l=l+1|0}if(!(k<<24>>24)){m=+h[j+16>>3]-+h[j+88>>3];n=g<m;l=c[(c[s>>2]|0)+(p<<6)+4>>2]|0;k=o+-2|0;j=o+-1|0;while(1){j=c[(c[l+(j<<2)>>2]|0)+16>>2]|0;if(!(a[j+156>>0]|0))break;else{j=k;k=k+-1|0}}x=+h[j+96>>3]+ +h[j+16>>3];i=i>x?i:x;g=n?g:m}}p=p+1|0}k=c[w+180>>2]|0;l=w+184|0;j=1;while(1){if((j|0)>(k|0))break a;u=c[(c[(c[l>>2]|0)+(j<<2)>>2]|0)+16>>2]|0;x=+h[u+16>>3]+-8.0;m=+h[u+32>>3]+8.0;j=j+1|0;i=i>m?i:m;g=g<x?g:x}}else{i=+(c[(c[(c[w+260>>2]|0)+16>>2]|0)+232>>2]|0);g=+(c[(c[(c[w+256>>2]|0)+16>>2]|0)+232>>2]|0);f=b[w+236>>1]|0;d=b[w+238>>1]|0}while(0);e=c[(c[e+16>>2]|0)+196>>2]|0;m=+h[(c[(c[c[e+(d<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[w+120>>3];x=+h[w+128>>3]+ +h[(c[(c[c[e+(f<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];h[w+16>>3]=g;h[w+24>>3]=m;e=c[v>>2]|0;h[e+32>>3]=i;h[e+40>>3]=x;return}function Ni(a,d,e,f){a=a|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0;i=ww(96)|0;j=i+48|0;c[j>>2]=c[j>>2]|3;c[i>>2]=c[i>>2]&-4|2;g=ww(176)|0;h=i+16|0;c[h>>2]=g;c[((c[i>>2]&3|0)==3?i:j)+40>>2]=a;c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]=d;if(e>65535.0){Oi(e);e=65535.0;g=c[h>>2]|0}b[g+170>>1]=~~(e+(e>=0.0?.5:-.5));c[g+156>>2]=f;Wg(i)|0;return i|0}function Oi(a){a=+a;var b=0,d=0;b=l;l=l+16|0;d=b;h[d>>3]=a;c[d+8>>2]=65535;$l(1,79692,d)|0;l=b;return}function Pi(a){a=a|0;var b=0,d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;f=a+16|0;e=c[f>>2]|0;a=e+172|0;d=c[a+4>>2]|0;e=e+248|0;c[e>>2]=c[a>>2];c[e+4>>2]=d;e=c[f>>2]|0;d=e+180|0;a=c[d+4>>2]|0;e=e+256|0;c[e>>2]=c[d>>2];c[e+4>>2]=a;e=c[f>>2]|0;a=c[e+180>>2]|0;d=0;while(1)if(!(c[a+(d<<2)>>2]|0))break;else d=d+1|0;b=c[e+172>>2]|0;a=0;while(1)if(!(c[b+(a<<2)>>2]|0))break;else a=a+1|0;c[e+176>>2]=0;a=ww((a+d<<2)+16|0)|0;e=c[f>>2]|0;c[e+172>>2]=a;c[e+184>>2]=0;e=ww(16)|0;a=c[f>>2]|0;c[a+180>>2]=e;a=a+164|0}return}function Qi(d){d=d|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+16|0;w=z;x=d+16|0;u=c[x>>2]|0;y=c[u+196>>2]|0;d=(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)!=0;v=c[u+248>>2]|0;c[w>>2]=v;c[w+4>>2]=d?5:v;v=b[u+236>>1]|0;d=u;while(1){if((v|0)>(b[d+238>>1]|0))break;r=y+(v<<6)+4|0;c[(c[(c[c[r>>2]>>2]|0)+16>>2]|0)+232>>2]=0;s=y+(v<<6)|0;t=+(c[w+((v&1)<<2)>>2]|0);p=0.0;k=0;a:while(1){if((k|0)>=(c[s>>2]|0))break;f=c[r>>2]|0;m=c[f+(k<<2)>>2]|0;u=m+16|0;d=c[u>>2]|0;i=+h[d+96>>3];h[d+240>>3]=i;if((c[d+208>>2]|0)>0){j=0;f=0;while(1){g=c[(c[d+204>>2]|0)+(j<<2)>>2]|0;if(!g)break;q=c[g>>2]&3;if((c[((q|0)==3?g:g+48|0)+40>>2]|0)==(c[((q|0)==2?g:g+-48|0)+40>>2]|0)){f=(Rz(g)|0)+f|0;d=c[u>>2]|0}j=j+1|0}q=d+96|0;i=+h[q>>3]+ +(f|0);h[q>>3]=i;f=c[r>>2]|0}q=k+1|0;f=c[f+(q<<2)>>2]|0;if(f){o=f+16|0;i=i+t+ +h[(c[o>>2]|0)+88>>3];Ni(m,f,i,0)|0;d=~~(i+p);c[(c[o>>2]|0)+232>>2]=d;p=+(d|0);d=c[u>>2]|0}f=c[d+112>>2]|0;if(f){j=c[d+256>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;d=(c[(c[(c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0);g=d?j:k;j=d?k:j;k=f+16|0;d=c[k>>2]|0;i=+((O(c[(c[x>>2]|0)+248>>2]|0,e[d+170>>1]|0)|0)/2|0|0);o=c[g>>2]&3;f=c[((o|0)==2?g:g+-48|0)+40>>2]|0;g=c[((o|0)==3?g:g+48|0)+40>>2]|0;if(!($i(g,f)|0))Ni(f,g,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[g+16>>2]|0)+88>>3])|0),c[d+156>>2]|0)|0;d=c[j>>2]&3;f=c[((d|0)==3?j:j+48|0)+40>>2]|0;d=c[((d|0)==2?j:j+-48|0)+40>>2]|0;if(!($i(d,f)|0)){Ni(f,d,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[d+16>>2]|0)+88>>3])|0),c[(c[k>>2]|0)+156>>2]|0)|0;o=0}else o=0}else o=0;while(1){d=c[u>>2]|0;if((o|0)>=(c[d+192>>2]|0)){k=q;continue a}m=c[(c[d+188>>2]|0)+(o<<2)>>2]|0;k=c[m>>2]&3;g=c[((k|0)==3?m:m+48|0)+40>>2]|0;k=c[((k|0)==2?m:m+-48|0)+40>>2]|0;j=(c[(c[g+16>>2]|0)+236>>2]|0)<(c[(c[k+16>>2]|0)+236>>2]|0);f=j?g:k;g=j?k:g;i=+h[(c[g+16>>2]|0)+88>>3]+ +h[(c[f+16>>2]|0)+96>>3];k=m+16|0;j=~~(i+ +(O(c[(c[x>>2]|0)+248>>2]|0,e[(c[k>>2]|0)+170>>1]|0)|0));n=Tg(f,g)|0;if(!n){d=c[k>>2]|0;if(!(c[d+96>>2]|0))Ni(f,g,+(j|0),c[d+156>>2]|0)|0}else{A=+(j|0);d=c[k>>2]|0;B=+h[d+136>>3];i=i+ +(c[(c[x>>2]|0)+248>>2]|0)+ +(~~(B+(B>=0.0?.5:-.5))|0);f=~~(i<A?A:i);if((f|0)>65535){Oi(+(f|0));f=65535;d=c[k>>2]|0}k=c[n+16>>2]|0;j=k+170|0;g=e[j>>1]|0;b[j>>1]=(f|0)<(g|0)?g:f;k=k+156|0;c[k>>2]=c[(c[((c[k>>2]|0)>(c[d+156>>2]|0)?n:m)+16>>2]|0)+156>>2]}o=o+1|0}}v=v+1|0;d=c[x>>2]|0}l=z;return}function Ri(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+256>>2]|0;a:do if(e){f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e)break a;n=gh(b)|0;d=n+16|0;a[(c[d>>2]|0)+156>>0]=2;l=e+16|0;k=c[l>>2]|0;i=~~(+h[k+56>>3]-+h[k+16>>3]);m=(i|0)>0;j=m?0:0-i|0;i=m?i:0;m=e+48|0;Ni(n,c[((c[e>>2]&3|0)==3?e:m)+40>>2]|0,+(i+1|0),c[k+156>>2]|0)|0;k=e+-48|0;Ni(n,c[((c[e>>2]&3|0)==2?e:k)+40>>2]|0,+(j+1|0),c[(c[l>>2]|0)+156>>2]|0)|0;l=c[e>>2]&3;i=(c[(c[(c[((l|0)==3?e:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-i|0;e=(c[(c[(c[((l|0)==2?e:k)+40>>2]|0)+16>>2]|0)+232>>2]|0)-j|0;c[(c[d>>2]|0)+232>>2]=((i|0)<(e|0)?i:e)+-1;d=c[g>>2]|0;f=f+1|0;e=c[d+256>>2]|0}}while(0);d=d+164|0}return}function Si(a){a=a|0;if((c[(c[a+16>>2]|0)+180>>2]|0)>0){Wi(a);Xi(a);Yi(a);Zi(a)}return}function Ti(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;e=a+16|0;f=c[(c[e>>2]|0)+8>>2]|0;if((c[f+84>>2]|0)==3?(b=+h[f+64>>3],d=+h[f+72>>3],!(d*b<=1.0)):0){Ui(a);f=c[e>>2]|0;d=(c[f+116>>2]&1|0)==0?b:d;Ni(c[f+256>>2]|0,c[f+260>>2]|0,d<65535.0?d:65535.0,1e3)|0}return}function Ui(a){a=a|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;e=EA(a,c[42189]|0,8,0)|0;Vi(a);i=a+16|0;g=c[i>>2]|0;j=c[g+256>>2]|0;k=c[g+260>>2]|0;f=+(e|0);e=b[g+236>>1]|0;while(1){if((e|0)>(b[g+238>>1]|0))break;d=c[g+196>>2]|0;do if(c[d+(e<<6)>>2]|0){d=c[c[d+(e<<6)+4>>2]>>2]|0;if(!d){c[m>>2]=En(a)|0;c[m+4>>2]=e;$l(1,79776,m)|0;break}else{Ni(j,d,+h[(c[d+16>>2]|0)+88>>3]+f+ +h[g+96>>3],0)|0;g=c[i>>2]|0;d=c[g+196>>2]|0;d=c[(c[d+(e<<6)+4>>2]|0)+((c[d+(e<<6)>>2]|0)+-1<<2)>>2]|0;Ni(d,k,+h[(c[d+16>>2]|0)+96>>3]+f+ +h[g+64>>3],0)|0;break}}while(0);e=e+1|0;g=c[i>>2]|0}l=n;return}function Vi(b){b=b|0;var d=0,e=0,f=0;d=b+16|0;if(!(c[(c[d>>2]|0)+256>>2]|0)){f=gh(Wf(b)|0)|0;a[(c[f+16>>2]|0)+156>>0]=2;e=gh(Wf(b)|0)|0;a[(c[e+16>>2]|0)+156>>0]=2;if((c[(c[d>>2]|0)+12>>2]|0?(Wf(b)|0)!=(b|0):0)?(c[(c[(to(b)|0)+16>>2]|0)+116>>2]&1|0)==0:0){b=c[d>>2]|0;Ni(f,e,+(~~+h[b+48+((+h[b+48>>3]>+h[b+80>>3]?0:2)<<4)>>3]|0),0)|0}d=c[d>>2]|0;c[d+256>>2]=f;c[d+260>>2]=e}return}function Wi(a){a=a|0;var b=0,d=0;do if((Wf(a)|0)!=(a|0)){Ui(a);a=a+16|0;b=c[a>>2]|0;b=Tg(c[b+256>>2]|0,c[b+260>>2]|0)|0;if(!b){d=c[a>>2]|0;Ni(c[d+256>>2]|0,c[d+260>>2]|0,1.0,128)|0;break}else{d=(c[b+16>>2]|0)+156|0;c[d>>2]=(c[d>>2]|0)+128;break}}else a=a+16|0;while(0);b=1;while(1){d=c[a>>2]|0;if((b|0)>(c[d+180>>2]|0))break;Wi(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function Xi(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;k=EA(d,c[42189]|0,8,0)|0;o=d+16|0;e=c[o>>2]|0;m=+(k|0);k=b[e+236>>1]|0;while(1){if((k|0)>(b[e+238>>1]|0)){f=1;break}e=c[e+196>>2]|0;a:do if(c[e+(k<<6)>>2]|0?(l=c[c[e+(k<<6)+4>>2]>>2]|0,l|0):0){i=l+16|0;f=c[(c[i>>2]|0)+236>>2]|0;while(1){if((f|0)<=0)break;f=f+-1|0;j=c[(c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=j+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0)){n=10;break}if(_i(d,j)|0){n=9;break}}if((n|0)==9){e=c[g>>2]|0;n=10}if((n|0)==10){n=0;Ni(j,c[(c[o>>2]|0)+256>>2]|0,+h[e+96>>3]+m,0)|0}f=(c[(c[(c[o>>2]|0)+196>>2]|0)+(k<<6)>>2]|0)+(c[(c[i>>2]|0)+236>>2]|0)|0;while(1){if((f|0)>=(c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)>>2]|0))break a;i=c[(c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=i+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0))break;if(!(_i(d,i)|0))f=f+1|0;else{n=15;break}}if((n|0)==15){n=0;e=c[g>>2]|0}Ni(c[(c[o>>2]|0)+260>>2]|0,i,+h[e+88>>3]+m,0)|0}while(0);k=k+1|0;e=c[o>>2]|0}while(1){if((f|0)>(c[e+180>>2]|0))break;Xi(c[(c[e+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0;e=c[o>>2]|0}return}function Yi(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0;e=EA(a,c[42189]|0,8,0)|0;Vi(a);b=a+16|0;d=+(e|0);a=1;while(1){e=c[b>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;Vi(e);f=c[b>>2]|0;g=e+16|0;Ni(c[f+256>>2]|0,c[(c[g>>2]|0)+256>>2]|0,+h[f+96>>3]+d,0)|0;f=c[b>>2]|0;Ni(c[(c[g>>2]|0)+260>>2]|0,c[f+260>>2]|0,+h[f+64>>3]+d,0)|0;Yi(e);a=a+1|0}return}function Zi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;d=EA(a,c[42189]|0,8,0)|0;n=a+16|0;a=1;while(1){f=c[n>>2]|0;e=c[f+180>>2]|0;if((a|0)>(e|0))break;Vi(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}m=+(d|0);l=1;a=e;d=f;while(1){if((l|0)>(a|0))break;k=l+1|0;j=k;while(1){e=c[d+184>>2]|0;f=c[e+(l<<2)>>2]|0;if((j|0)>(a|0))break;e=c[e+(j<<2)>>2]|0;g=(b[(c[f+16>>2]|0)+236>>1]|0)>(b[(c[e+16>>2]|0)+236>>1]|0);i=g?e:f;e=g?f:e;f=c[i+16>>2]|0;g=c[e+16>>2]|0;o=b[g+236>>1]|0;h=o<<16>>16;if((b[f+238>>1]|0)>=o<<16>>16){a=(c[(c[(c[c[(c[f+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[c[(c[g+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0);Ni(c[(c[(a?i:e)+16>>2]|0)+260>>2]|0,c[(c[(a?e:i)+16>>2]|0)+256>>2]|0,m,0)|0;a=c[n>>2]|0;d=a;a=c[a+180>>2]|0}j=j+1|0}Zi(f);d=c[n>>2]|0;l=k;a=c[d+180>>2]|0}return}function _i(b,d){b=b|0;d=d|0;var e=0;d=c[d+16>>2]|0;if((a[d+156>>0]|0)==1){d=c[c[d+256>>2]>>2]|0;while(1){e=c[(c[d+16>>2]|0)+116>>2]|0;if(!e)break;else d=e}if(!(Co(b,c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0))d=(Co(b,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0)==0&1;else d=0}else d=0;return d|0}function $i(a,b){a=a|0;b=b|0;return aj(a,b)|0}function aj(a,b){a=a|0;b=b|0;var d=0,e=0;a:do if((a|0)==(b|0))a=1;else{d=c[(c[a+16>>2]|0)+180>>2]|0;a=0;while(1){e=c[d+(a<<2)>>2]|0;if(!e){a=0;break a}if(!(aj(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,b)|0))a=a+1|0;else{a=1;break}}}while(0);return a|0}function bj(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;h=c[d+196>>2]|0;g=c[h+(j<<6)>>2]|0;h=h+(j<<6)+4|0;i=0;f=0;while(1){if((f|0)>=(g|0))break;e=c[(c[(c[h>>2]|0)+(f<<2)>>2]|0)+16>>2]|0;c[e+236>>2]=i;if((a[e+159>>0]|0)==6)e=c[e+216>>2]|0;else e=1;i=e+i|0;f=f+1|0}if((i|0)>(g|0)){d=c[h>>2]|0;if(!d)d=xw((i<<2)+4|0)|0;else d=zw(d,(i<<2)+4|0)|0;f=c[(c[k>>2]|0)+196>>2]|0;c[f+(j<<6)+4>>2]=d;e=c[f+(j<<6)>>2]|0;while(1){d=e+-1|0;if((e|0)<=0)break;h=c[f+(j<<6)+4>>2]|0;e=c[h+(d<<2)>>2]|0;c[h+(c[(c[e+16>>2]|0)+236>>2]<<2)>>2]=e;e=d;f=c[(c[k>>2]|0)+196>>2]|0}c[f+(j<<6)>>2]=i;c[(c[f+(j<<6)+4>>2]|0)+(i<<2)>>2]=0;d=c[k>>2]|0}j=j+1|0}return}function cj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+48|0;n=o+32|0;m=o+8|0;d=o+24|0;k=o+16|0;j=o;e=b+16|0;f=c[e>>2]|0;a:do if((c[f+216>>2]|0)>=2){c[m>>2]=~~(+h[f+16>>3]-+h[f+88>>3]);c[m+4>>2]=~~+h[f+24>>3];c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];dj(d,b,n);g=d;i=c[g+4>>2]|0;d=m;c[d>>2]=c[g>>2];c[d+4>>2]=i;d=c[e>>2]|0;if((c[d+184>>2]|0)>0){j=c[c[d+180>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;j=Tm(a,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0;while(1){if(!j)break a;i=(c[j>>2]&3|0)==2?j:j+-48|0;e=i+48|0;f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;if((f|0)!=(b|0)?(LA(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];ej(k,a,f,n,d);f=k;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;lh(i);g=i+-48|0;e=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;f=c[e+172>>2]|0;if(!f)e=xw((c[e+176>>2]<<2)+8|0)|0;else e=zw(f,(c[e+176>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0)+172>>2]=e;p=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;e=c[p+172>>2]|0;p=p+176|0;f=c[p>>2]|0;c[p>>2]=f+1;c[e+(f<<2)>>2]=i;i=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0;d=d+1|0}j=Um(a,j)|0}}else{i=c[c[d+172>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;i=Qm(a,c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)|0;while(1){if(!i)break a;e=i+-48|0;f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;if((f|0)!=(b|0)?(LA(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];ej(j,a,f,n,d);f=j;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;lh(i);g=i+48|0;e=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;f=c[e+180>>2]|0;if(!f)e=xw((c[e+184>>2]<<2)+8|0)|0;else e=zw(f,(c[e+184>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0)+180>>2]=e;f=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;k=c[f+180>>2]|0;f=f+184|0;p=c[f>>2]|0;c[f>>2]=p+1;c[k+(p<<2)>>2]=i;p=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;c[(c[p+180>>2]|0)+(c[p+184>>2]<<2)>>2]=0;d=d+1|0}i=Sm(a,i)|0}}}while(0);l=o;return}function dj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;LB(b,c[(c[(so(b)|0)+16>>2]|0)+116>>2]&1);e=c[b+16>>2]|0;h[e+24>>3]=+(c[d+4>>2]|0);f=+h[e+88>>3]+ +(c[d>>2]|0);h[e+16>>3]=f;f=f+ +h[e+96>>3];c[d>>2]=~~(f+ +(c[(c[(so(b)|0)+16>>2]|0)+248>>2]|0));e=d;b=c[e+4>>2]|0;d=a;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function ej(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;b=Wf(b)|0;g=LA(d)|0;if((g|0)!=(d|0))dh(g,d);j=c[d+16>>2]|0;c[j+236>>2]=f;g=c[(c[g+16>>2]|0)+232>>2]|0;c[j+232>>2]=g;c[(c[(c[(c[b+16>>2]|0)+196>>2]|0)+(g<<6)+4>>2]|0)+(f<<2)>>2]=d;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];dj(a,d,h);l=i;return}function fj(a){a=a|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0.0;m=c[(c[(Wf(a)|0)+16>>2]|0)+196>>2]|0;if((Wf(a)|0)==(a|0))j=8.0;else j=+(EA(a,c[42189]|0,8,0)|0);l=a+16|0;g=c[l>>2]|0;f=0;k=1;e=+h[g+120>>3];d=+h[g+128>>3];while(1){if((k|0)>(c[g+180>>2]|0))break;i=c[(c[g+184>>2]|0)+(k<<2)>>2]|0;f=fj(i)|0|f;i=c[i+16>>2]|0;g=c[l>>2]|0;if((b[i+238>>1]|0)==(b[g+238>>1]|0)){n=+h[i+120>>3]+j;e=e>n?e:n}if((b[i+236>>1]|0)==(b[g+236>>1]|0)){n=+h[i+128>>3]+j;d=d>n?d:n}k=k+1|0}if((Wf(a)|0)!=(a|0)?(c[(c[l>>2]|0)+12>>2]|0)!=0:0)if(!(c[(c[(to(a)|0)+16>>2]|0)+116>>2]&1)){k=c[l>>2]|0;f=1;e=+h[k+56>>3]+e;d=+h[k+88>>3]+d}else f=1;k=c[l>>2]|0;h[k+120>>3]=e;h[k+128>>3]=d;if((Wf(a)|0)!=(a|0)){l=c[l>>2]|0;a=m+(b[l+236>>1]<<6)+24|0;n=+h[a>>3];h[a>>3]=n>d?n:d;m=m+(b[l+238>>1]<<6)+16|0;n=+h[m>>3];h[m>>3]=n>e?n:e}return f|0}function gj(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;o=c[(c[(Wf(a)|0)+16>>2]|0)+196>>2]|0;if((Wf(a)|0)==(a|0))e=0;else e=EA(a,c[42189]|0,8,0)|0;l=a+16|0;i=c[l>>2]|0;m=e+d|0;k=+(e|0);j=1;f=+h[i+128>>3];g=+h[i+120>>3];e=i;while(1){if((j|0)>(c[e+180>>2]|0))break;i=c[(c[e+184>>2]|0)+(j<<2)>>2]|0;gj(i,m);i=c[i+16>>2]|0;e=c[l>>2]|0;if((b[i+238>>1]|0)==(b[e+238>>1]|0)){q=+h[i+120>>3]+k;g=g>q?g:q}if((b[i+236>>1]|0)==(b[e+236>>1]|0)){q=+h[i+128>>3]+k;f=f>q?f:q}j=j+1|0}h[e+120>>3]=g;h[e+128>>3]=f;if(((Wf(a)|0)!=(a|0)?(n=c[l>>2]|0,c[n+12>>2]|0):0)?(p=-g-f+ +h[n+48+((+h[n+104>>3]>+h[n+72>>3]?3:1)<<4)+8>>3]-+h[(c[(c[c[o+(b[n+236>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +h[(c[(c[c[o+(b[n+238>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3],p>0.0):0)hj(a,~~p,d);if((Wf(a)|0)!=(a|0)){n=c[l>>2]|0;m=o+(b[n+236>>1]<<6)+24|0;q=+h[m>>3];p=+h[n+128>>3];h[m>>3]=q>p?q:p;o=o+(b[n+238>>1]<<6)+16|0;p=+h[o>>3];q=+h[n+120>>3];h[o>>3]=p>q?p:q}return}function hj(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0;k=c[(Wf(a)|0)+16>>2]|0;q=c[k+196>>2]|0;p=c[a+16>>2]|0;a=b[p+238>>1]|0;f=b[p+236>>1]|0;l=(d+1|0)/2|0;m=p+120|0;n=+h[m>>3];o=+(l|0);i=+(e|0);e=~~(o+i+n-+h[q+(a<<6)+16>>3]);if((e|0)>0){g=+(e|0);while(1){if((a|0)<(f|0))break;if((c[q+(a<<6)>>2]|0)>0){r=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[r>>3]=+h[r>>3]+g}a=a+-1|0}j=+h[p+128>>3];a=e;g=j+ +(d-l|0)}else{j=+h[p+128>>3];a=d-l|0;g=j}a=~~(+(a|0)+i+g-+h[q+(f<<6)+24>>3]);a:do if((a|0)>0){e=b[k+236>>1]|0;g=+(a|0);while(1){a=f+-1|0;if((f|0)<=(e|0))break a;if((c[q+(a<<6)>>2]|0)<=0){f=a;continue}f=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[f>>3]=+h[f>>3]+g;f=a}}while(0);h[p+128>>3]=j+ +(d-l|0);h[m>>3]=n+o;return}function ij(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+16>>2]|0;f=a[e+84>>0]|0;b=c[d+16>>2]|0;do if(f<<24>>24==(a[b+84>>0]|0)){if(+h[e+56>>3]==+h[b+56>>3]){if(!(f<<24>>24==0?1:+h[e+64>>3]==+h[b+64>>3])){b=0;break}}else if(f<<24>>24){b=0;break}if(+h[e+16>>3]==+h[b+16>>3]?+h[e+24>>3]==+h[b+24>>3]:0){b=1;break}b=(a[e+44>>0]|0)==0&1}else b=0;while(0);return b|0}function jj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;b[d+236>>1]=32767;b[d+238>>1]=-1;d=0;h=eo(a)|0;while(1){e=c[i>>2]|0;if(!h)break;f=e+238|0;g=c[(c[h+16>>2]|0)+232>>2]|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;e=e+236|0;if((g|0)<(b[e>>1]|0))b[e>>1]=g;if(!d)d=h;else d=(g|0)<(c[(c[d+16>>2]|0)+232>>2]|0)?h:d;h=fo(a,h)|0}c[e+264>>2]=d;return}function kj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0;b=Jm(a,79821)|0;if(!b)b=2147483647;else{g=+tM(b);b=~~(g*+(nn(a)|0))}e=a+16|0;d=0;while(1){f=c[e>>2]|0;if((d|0)>=(c[f+220>>2]|0))break;c[f+192>>2]=c[(c[f+216>>2]|0)+(d<<2)>>2];hx(a,(c[f+180>>2]|0)==0&1,b)|0;d=d+1|0}return}function lj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;if(!(Jm(a,79830)|0))nj(a,d);else{g=(c[a+16>>2]|0)+136|0;b[g>>1]=b[g>>1]|16;mj(a,d)}if(0){g=c[13918]|0;a=c[a+16>>2]|0;d=b[a+236>>1]|0;c[e>>2]=b[a+238>>1];c[e+4>>2]=d;AL(g,79838,e)|0}l=f;return}function mj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;h=i;c[41933]=0;a[h>>0]=a[17644]|0;a[h+1>>0]=a[17645]|0;a[h+2>>0]=a[17646]|0;a[h+3>>0]=a[17647]|0;h=hn(80048,h,0)|0;Oo(h,80077,280,1)|0;Ao(h,17332,17272);oj(b);e=Jm(b,79821)|0;if(!e)f=2147483647;else{j=+tM(e);f=~~(j*+(nn(b)|0))}Ej(b,0);Fj(b,h);Gj(b,h);Hj(b,h,0,0);Ij(h);g=Jj(h)|0;Kj(h);if(d|0){yk(h);mk(h)}e=Jm(b,87620)|0;if(!e)e=-1;else e=sM(e)|0;Aw(h,1,f,e)|0;Lj(b,h,g);mn(h)|0;l=i;return}function nj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g;oj(a);do if(!b){pj(a,a);Bk(a);qj(d,a);h=d;d=c[h+4>>2]|0;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=d;ul(a,0);b=0}else{yk(a);mk(a);pj(a,a);Bk(a);qj(d,a);i=d;d=c[i+4>>2]|0;h=e;c[h>>2]=c[i>>2];c[h+4>>2]=d;ul(a,0);h=c[a+16>>2]|0;if((c[h+220>>2]|0)<=1?(c[h+180>>2]|0)<=0:0)break;c[b+32>>2]=1;b=0}while(0);jk(a);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];if(rj(a,f)|0)ul(a,0);if(!b)kj(a);else nk(a,b);sj(a,b);tj(a);l=g;return}function oj(d){d=d|0;var f=0,g=0,h=0;if(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1){g=eo(d)|0;while(1){if(!g)break;f=Qm(d,g)|0;while(1){if(!f)break;h=(c[f+16>>2]|0)+170|0;b[h>>1]=(e[h>>1]|0)<<1;f=Sm(d,f)|0}g=fo(d,g)|0}h=(c[d+16>>2]|0)+252|0;c[h>>2]=((c[h>>2]|0)+1|0)/2|0}return}function pj(a,b){a=a|0;b=b|0;var d=0;b=Kp(b)|0;while(1){if(!b)break;d=Bj(b)|0;do if(d)if((d|0)==7&(c[42180]|0)==100){xj(a,b);break}else{Cj(a,b,d);break}else pj(a,b);while(0);b=Lp(b)|0}return}function qj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=d+16|0;e=c[i>>2]|0;d=c[e+228>>2]|0;e=c[e+224>>2]|0;f=(e|0)==0;if(!d)if(f){j=0;k=0}else g=4;else if(f)g=5;else g=4;if((g|0)==4){d=LA(e)|0;e=c[i>>2]|0;c[e+224>>2]=d;d=c[e+228>>2]|0;if(!d){h=0;d=e;g=12}else g=5}do if((g|0)==5){d=LA(d)|0;e=c[i>>2]|0;c[e+228>>2]=d;if(d){e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==5&1;while(1){d=c[c[d+180>>2]>>2]|0;if(!d){g=11;break}h=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((h|0)!=(LA(h)|0)){g=9;break}ik(d);d=c[e>>2]|0}if((g|0)==9)ma(79941,79881,346,79973);else if((g|0)==11){h=f;d=c[i>>2]|0;g=12;break}}else{h=0;d=e;g=12}}while(0);a:do if((g|0)==12){d=c[d+224>>2]|0;if(!d){j=0;k=h}else{e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==3&1;while(1){d=c[c[d+172>>2]>>2]|0;if(!d){j=f;k=h;break a}i=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((i|0)!=(LA(i)|0))break;ik(d);d=c[e>>2]|0}ma(79986,79881,353,79973)}}while(0);c[b>>2]=j;c[b+4>>2]=k;return}function rj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+16|0;i=c[j>>2]|0;if((c[i+228>>2]|0)==0?(c[i+224>>2]|0)==0:0)d=0;else e=3;a:do if((e|0)==3){g=eo(a)|0;i=d+4|0;h=c[d>>2]&65535;d=0;while(1){if(!g)break a;if((g|0)==(LA(g)|0)){f=g+16|0;e=c[f>>2]|0;if((c[e+184>>2]|0)==0?(k=c[(c[j>>2]|0)+228>>2]|0,!((k|0)==0|(g|0)==(k|0))):0){d=bh(g,k,0)|0;e=c[d+16>>2]|0;b[e+170>>1]=c[i>>2];c[e+156>>2]=0;e=c[f>>2]|0}if((c[e+176>>2]|0)==0?(l=c[(c[j>>2]|0)+224>>2]|0,!((l|0)==0|(g|0)==(l|0))):0){d=bh(l,g,0)|0;f=c[d+16>>2]|0;b[f+170>>1]=h;c[f+156>>2]=0}}g=fo(a,g)|0}}while(0);return (d|0)!=0|0}function sj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;g=eo(d)|0;k=d+16|0;f=c[k>>2]|0;a:do if(g){b[f+236>>1]=32767;b[f+238>>1]=-1;j=(e|0)==0;while(1){if(!g)break;f=LA(g)|0;i=c[g+16>>2]|0;e=c[i+232>>2]|0;do if((f|0)!=(g|0)){if(!j)if(!e)e=0;else break;e=e+(c[(c[f+16>>2]|0)+232>>2]|0)|0;c[i+232>>2]=e}while(0);f=c[k>>2]|0;h=f+238|0;if((e|0)>(b[h>>1]|0))b[h>>1]=e;f=f+236|0;if((e|0)<(b[f>>1]|0))b[f>>1]=e;switch(a[i+159>>0]|0){case 6:case 0:break;default:NA(g)}g=fo(d,g)|0}if((Wf(d)|0)==(d|0)){if((c[42180]|0)==100)e=1;else{wj(d);break}while(1){f=c[k>>2]|0;if((e|0)>(c[f+180>>2]|0))break a;vj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}}}else{b[f+238>>1]=0;b[f+236>>1]=0}while(0);return}function tj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=b+16|0;e=0;while(1){d=c[j>>2]|0;if((e|0)>=(c[d+220>>2]|0))break;i=c[(c[d+216>>2]|0)+(e<<2)>>2]|0;c[d+192>>2]=i;d=i;while(1){if(!d)break;i=d+16|0;uj((c[i>>2]|0)+172|0);uj((c[i>>2]|0)+180|0);i=c[i>>2]|0;a[i+157>>0]=0;d=c[i+164>>2]|0}e=e+1|0}i=eo(b)|0;while(1){if(!i)break;h=Qm(b,i)|0;while(1){if(!h)break;f=h+16|0;d=c[f>>2]|0;g=c[d+172>>2]|0;if((g|0)!=0?(k=g+16|0,(h|0)==(c[(c[k>>2]|0)+116>>2]|0)):0){d=eo(b)|0;while(1){if(!d)break;e=Qm(b,d)|0;while(1){if(!e)break;if((h|0)!=(e|0)?(l=(c[e+16>>2]|0)+172|0,m=c[l>>2]|0,(m|0)!=0&(g|0)==(m|0)):0)c[l>>2]=0;e=Sm(b,e)|0}d=fo(b,d)|0}$I(c[k>>2]|0);$I(g);d=c[f>>2]|0}c[d+172>>2]=0;h=Sm(b,h)|0}i=fo(b,i)|0}$I(c[(c[j>>2]|0)+216>>2]|0);m=c[j>>2]|0;c[m+216>>2]=0;c[m+220>>2]=0;return}function uj(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;while(1){if((b|0)<=-1)break;c[(c[a>>2]|0)+(b<<2)>>2]=0;b=b+-1|0}c[d>>2]=0;return}function vj(a){a=a|0;var d=0,f=0,g=0;d=a+16|0;f=c[d>>2]|0;g=c[(c[(c[f+264>>2]|0)+16>>2]|0)+232>>2]|0;a=f+236|0;b[a>>1]=g+(e[a>>1]|0);a=f+238|0;b[a>>1]=g+(e[a>>1]|0);a=1;while(1){if((a|0)>(c[f+180>>2]|0))break;vj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0;f=c[d>>2]|0}return}function wj(b){b=b|0;var d=0;d=Kp(Wf(b)|0)|0;while(1){if(!d)break;if((a[(c[d+16>>2]|0)+274>>0]|0)==7)xj(b,d);d=Lp(d)|0}return}function xj(a,b){a=a|0;b=b|0;var d=0;d=(c[b+16>>2]|0)+200|0;do if((c[d>>2]|0)==0?(c[d>>2]=a,yj(a,b),eo(b)|0):0){zj(a,b);if((c[42180]|0)==100){nj(b,0);Aj(b);break}else{jj(b);break}}while(0);return}function yj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=b+16|0;g=eo(d)|0;while(1){if(!g)break;i=fo(d,g)|0;j=g+16|0;if(!(a[(c[j>>2]|0)+159>>0]|0))f=1;else{ro(d,g)|0;g=i;continue}while(1){e=c[h>>2]|0;b=c[e+180>>2]|0;if((f|0)>=(b|0))break;if(Co(c[(c[e+184>>2]|0)+(f<<2)>>2]|0,g)|0){k=7;break}f=f+1|0}if((k|0)==7){k=0;b=c[(c[h>>2]|0)+180>>2]|0}if((f|0)<(b|0))ro(d,g)|0;c[(c[j>>2]|0)+212>>2]=0;g=i}e=eo(d)|0;while(1){if(!e)break;b=Qm(Wf(d)|0,e)|0;while(1){if(!b)break;if(Co(d,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)fn(d,b,1)|0;b=Sm(Wf(d)|0,b)|0}e=fo(d,e)|0}return}function zj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=ww((a<<2)+8|0)|0;else a=yw(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;iw(b);return}function Aj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[b+16>>2]|0;d=g+192|0;h=0;while(1){d=c[d>>2]|0;if(!d)break;f=c[d+16>>2]|0;if(!(c[f+232>>2]|0))e=(a[f+156>>0]|0)==0?d:h;else e=h;d=f+164|0;h=e}if(!h)ma(79866,79881,238,79888);c[g+264>>2]=h;d=eo(b)|0;while(1){if(!d){d=13;break}e=d+16|0;if(!((d|0)==(h|0)?1:(c[(c[e>>2]|0)+216>>2]|0)<2)){d=11;break}MA(d,h)|0;a[(c[e>>2]|0)+159>>0]=7;d=fo(b,d)|0}if((d|0)==11)ma(79903,79881,242,79888);else if((d|0)==13)return}function Bj(b){b=b|0;var d=0;if(!(Dj(b)|0)){d=VA(Jm(b,80018)|0,17284,17308)|0;a[(c[b+16>>2]|0)+274>>0]=d;b=d}else b=7;return b|0}function Cj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=eo(d)|0;a:do if(g|0){j=e&255;i=g+16|0;f=g;h=j;while(1){a[(c[f+16>>2]|0)+159>>0]=h;f=fo(d,f)|0;if(!f)break;MA(g,f)|0;h=a[(c[i>>2]|0)+159>>0]|0}switch(e|0){case 3:case 2:{b=b+16|0;f=c[b>>2]|0;h=c[f+224>>2]|0;if(h){g=MA(h,g)|0;f=c[b>>2]|0}c[f+224>>2]=g;break}case 5:case 4:{b=b+16|0;f=c[b>>2]|0;h=c[f+228>>2]|0;if(h){g=MA(h,g)|0;f=c[b>>2]|0}c[f+228>>2]=g;break}default:break a}switch(e|0){case 3:{f=f+224|0;break}case 5:{f=f+228|0;break}default:break a}a[(c[(c[f>>2]|0)+16>>2]|0)+159>>0]=j}while(0);return}function Dj(a){a=a|0;return (WJ(En(a)|0,93039,7)|0)==0|0}function Ej(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;g=m;if(!(Zj(b)|0)){do if(iB(b)|0)if(!d){c[(c[b+16>>2]|0)+204>>2]=0;d=b;break}else{c[(c[b+16>>2]|0)+204>>2]=(c[(c[d+16>>2]|0)+204>>2]|0)+1;_j(b,d);d=b;break}while(0);e=Kp(b)|0;while(1){if(!e)break;Ej(e,d);e=Lp(e)|0}a:do if(iB(b)|0){e=eo(b)|0;while(1){if(!e)break a;f=(c[e+16>>2]|0)+212|0;if(!(c[f>>2]|0))c[f>>2]=b;e=fo(b,e)|0}}while(0);switch($j(b)|0){case 3:{d=d+16|0;a[(c[d>>2]|0)+241>>0]=1;k=19;break}case 2:{d=d+16|0;k=19;break}case 5:{d=d+16|0;a[(c[d>>2]|0)+242>>0]=1;k=21;break}case 4:{d=d+16|0;k=21;break}case 1:{ak(b)|0;break}case 6:break;default:{e=En(b)|0;f=Jm(b,80018)|0;c[g>>2]=e;c[g+4>>2]=f;$l(0,80201,g)|0}}if((k|0)==19){k=ak(b)|0;k=bk(k,c[(c[d>>2]|0)+208>>2]|0)|0;c[(c[d>>2]|0)+208>>2]=k}else if((k|0)==21){k=ak(b)|0;k=bk(k,c[(c[d>>2]|0)+212>>2]|0)|0;c[(c[d>>2]|0)+212>>2]=k}if((iB(b)|0?(h=b+16|0,i=c[h>>2]|0,j=c[i+208>>2]|0,j|0):0)?(j|0)==(c[i+212>>2]|0):0){j=ak(b)|0;k=c[h>>2]|0;c[k+208>>2]=j;c[k+212>>2]=j}}l=m;return}function Fj(a,b){a=a|0;b=b|0;var d=0,e=0;c[41933]=0;d=eo(a)|0;while(1){if(!d)break;if((Mj(d)|0)==(d|0)){e=Pj(b,En(d)|0)|0;c[(c[d+16>>2]|0)+148>>2]=e}d=fo(a,d)|0}d=eo(a)|0;while(1){if(!d)break;b=d+16|0;if(!(c[(c[b>>2]|0)+148>>2]|0)){e=c[(c[(Mj(d)|0)+16>>2]|0)+148>>2]|0;c[(c[b>>2]|0)+148>>2]=e}d=fo(a,d)|0}return}function Gj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=eo(a)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+148>>2]|0;i=Qm(a,h)|0;while(1){if(!i)break;do if((Uj(i)|0)==0?(j=i+-48|0,k=c[(c[(Mj(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)|0)+16>>2]|0)+148>>2]|0,(d|0)!=(k|0)):0){f=c[i>>2]&3;g=i+48|0;e=((f|0)==3?i:g)+40|0;f=c[(c[(c[((f|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0;if(!(Vj(i)|0)){if((Tj(c[(c[(c[e>>2]|0)+16>>2]|0)+212>>2]|0)|0)==0?(Tj(f)|0)==0:0){Wj(b,d,k,i);break}Xj(b,d,k,i);break}else{f=Mj(c[e>>2]|0)|0;e=c[i>>2]&3;if((f|0)!=(c[(c[(c[(c[(c[((e|0)==3?i:g)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+212>>2]|0)?(g=Mj(c[((e|0)==2?i:j)+40>>2]|0)|0,(g|0)!=(c[(c[(c[(c[(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+208>>2]|0)):0)e=k;else{e=d;d=k}Wj(b,d,e,i);break}}while(0);i=Sm(a,i)|0}h=fo(a,h)|0}return}function Hj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if((iB(a)|0)!=0?(Tj(a)|0)!=0:0){g=eo(a)|0;while(1){if(!g)break;if(!(Tm(a,g)|0)){f=c[(c[(Mj(g)|0)+16>>2]|0)+148>>2]|0;if(!d)d=Pj(b,80099)|0;bn(b,d,f,0,1)|0}if(!(Qm(a,g)|0)){f=c[(c[(Mj(g)|0)+16>>2]|0)+148>>2]|0;if(!e)e=Pj(b,80104)|0;bn(b,f,e,0,1)|0}g=fo(a,g)|0}if((e|0)!=0&(d|0)!=0){Sj(bn(b,d,e,0,1)|0,0,1e3);f=d}else f=d}else f=d;d=Kp(a)|0;while(1){if(!d)break;Hj(d,b,f,e);d=Lp(d)|0}return}function Ij(b){b=b|0;var d=0,e=0;d=eo(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;a[e+158>>0]=0;a[e+157>>0]=0;d=fo(b,d)|0}d=eo(b)|0;while(1){if(!d)break;Qj(b,d);d=fo(b,d)|0}return}function Jj(a){a=a|0;var b=0,d=0,e=0,f=0;b=eo(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+128>>2]=0;b=fo(a,b)|0}b=0;e=eo(a)|0;while(1){if(!e)break;d=b+1|0;if(!(c[(c[e+16>>2]|0)+128>>2]|0)){Oj(a,e,d);b=d}e=fo(a,e)|0}a:do if((b|0)>1){f=Pj(a,80093)|0;d=1;e=eo(a)|0;while(1){if(!e)break a;if((c[(c[e+16>>2]|0)+128>>2]|0)==(d|0)){bn(a,f,e,0,1)|0;d=d+1|0}e=fo(a,e)|0}}while(0);return b|0}function Kj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=eo(a)|0;while(1){if(!g)break;h=g+16|0;f=Qm(a,g)|0;while(1){if(!f)break;b=c[h>>2]|0;d=c[b+180>>2]|0;if(!d)b=xw((c[b+184>>2]<<2)+8|0)|0;else b=zw(d,(c[b+184>>2]<<2)+8|0)|0;d=c[h>>2]|0;c[d+180>>2]=b;d=d+184|0;e=c[d>>2]|0;c[d>>2]=e+1;c[b+(e<<2)>>2]=f;e=c[h>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=f+-48|0;b=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=xw((c[b+176>>2]<<2)+8|0)|0;else b=zw(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;i=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;b=c[i+172>>2]|0;i=i+176|0;d=c[i>>2]|0;c[i>>2]=d+1;c[b+(d<<2)>>2]=f;e=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;c[(c[e+172>>2]|0)+(c[e+176>>2]<<2)>>2]=0;f=Sm(a,f)|0}g=fo(a,g)|0}return}function Lj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=a+16|0;o=c[n>>2]|0;b[o+236>>1]=32767;b[o+238>>1]=-1;a:do if((f|0)>1){h=ww((f<<2)+4|0)|0;g=f+1|0;f=1;while(1){if((f|0)==(g|0)){m=h;o=h;break a}c[h+(f<<2)>>2]=32767;f=f+1|0}}else{m=0;o=0}while(0);i=(m|0)==0;h=eo(a)|0;while(1){if(!h)break;j=c[(c[(c[(Mj(h)|0)+16>>2]|0)+148>>2]|0)+16>>2]|0;k=c[j+232>>2]|0;l=c[h+16>>2]|0;c[l+232>>2]=k;f=c[n>>2]|0;g=f+238|0;if((k|0)>(b[g>>1]|0))b[g>>1]=k;f=f+236|0;if((k|0)<(b[f>>1]|0))b[f>>1]=k;if(!i){j=c[j+128>>2]|0;c[l+128>>2]=j;l=m+(j<<2)|0;j=c[l>>2]|0;c[l>>2]=(j|0)<(k|0)?j:k}h=fo(a,h)|0}j=(m|0)!=0;b:do if(!j){m=b[(c[n>>2]|0)+236>>1]|0;g=m<<16>>16;if(m<<16>>16>0){f=eo(a)|0;while(1){if(!f)break;m=(c[f+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-g;f=fo(a,f)|0}f=c[n>>2]|0;n=f+236|0;b[n>>1]=(e[n>>1]|0)-g;f=f+238|0;b[f>>1]=(e[f>>1]|0)-g;f=0}else f=0}else{f=eo(a)|0;while(1){if(!f){f=1;break b}l=c[f+16>>2]|0;n=l+232|0;c[n>>2]=(c[n>>2]|0)-(c[m+(c[l+128>>2]<<2)>>2]|0);f=fo(a,f)|0}}while(0);Nj(a,f);i=eo(d)|0;while(1){if(!i)break;g=i+16|0;f=c[g>>2]|0;h=c[f+172>>2]|0;if(h){$I(h);f=c[g>>2]|0}f=c[f+180>>2]|0;if(f|0)$I(f);i=fo(d,i)|0}$I(c[(c[(eo(a)|0)+16>>2]|0)+112>>2]|0);f=eo(a)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+112>>2]=0;f=fo(a,f)|0}if(j)$I(o);return}function Mj(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;d=(c[b>>2]|0)+152|0;e=c[d>>2]|0;if(e){if((e|0)!=(a|0)){e=Mj(e)|0;c[(c[b>>2]|0)+152>>2]=e;return e|0}}else c[d>>2]=a;return a|0}function Nj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=a+16|0;e=1;while(1){f=c[i>>2]|0;if((e|0)>(c[f+180>>2]|0))break;Nj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0,0);e=e+1|0}if((d|0)!=0|(c[f+200>>2]|0)!=0){b[f+236>>1]=32767;b[f+238>>1]=-1;e=0;h=eo(a)|0;while(1){if(!h)break;g=c[(c[h+16>>2]|0)+232>>2]|0;d=c[i>>2]|0;f=d+238|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;d=d+236|0;if((g|0)<(b[d>>1]|0)){b[d>>1]=g;e=h}h=fo(a,h)|0}c[(c[i>>2]|0)+264>>2]=e}return}function Oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+16>>2]|0)+128|0;a:do if(!(c[e>>2]|0)){c[e>>2]=d;e=Qm(a,b)|0;while(1){if(!e)break;Oj(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,d);e=Sm(a,e)|0}e=Tm(a,b)|0;while(1){if(!e)break a;Oj(a,c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,d);e=Um(a,e)|0}}while(0);return}function Pj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=oo(a,b,1)|0;b=f+16|0;c[(c[b>>2]|0)+176>>2]=0;e=ww(20)|0;d=c[b>>2]|0;c[d+172>>2]=e;c[d+184>>2]=0;d=ww(20)|0;b=c[b>>2]|0;c[b+180>>2]=d;d=c[41933]|0;e=b+168|0;if(!d){c[e>>2]=0;c[(c[a+16>>2]|0)+192>>2]=f}else{c[e>>2]=d;c[(c[d+16>>2]|0)+164>>2]=f}c[41933]=f;c[b+164>>2]=0;return f|0}function Qj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=d+16|0;e=c[h>>2]|0;f=e+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;a[e+158>>0]=1;d=Qm(b,d)|0;while(1){if(!d)break;e=Sm(b,d)|0;f=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;g=c[f+16>>2]|0;if(a[g+158>>0]|0){Rj(b,d);d=e;continue}if(a[g+157>>0]|0){d=e;continue}Qj(b,f);d=e}a[(c[h>>2]|0)+158>>0]=0}return}function Rj(a,b){a=a|0;b=b|0;var d=0,f=0,g=0;d=c[b>>2]&3;g=b+-48|0;f=b+48|0;d=bn(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,0)|0;if(!d){d=c[b>>2]&3;d=bn(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,1)|0}g=c[b+16>>2]|0;Sj(d,e[g+170>>1]|0,c[g+156>>2]|0);ro(a,b)|0;return}function Sj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0;a=c[a+16>>2]|0;g=a+170|0;h=e[g>>1]|0;b[g>>1]=(h|0)>(d|0)?h:d;d=a+156|0;c[d>>2]=(c[d>>2]|0)+f;return}function Tj(a){a=a|0;return (KA(Jm(a,80109)|0,0)|0)&255|0}function Uj(b){b=b|0;var d=0,e=0;d=c[42234]|0;if((((d|0)!=0?(e=Km(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(JA(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function Vj(a){a=a|0;var b=0,d=0;d=c[a>>2]&3;b=c[(c[(c[((d|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;a=c[(c[(c[((d|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;if((b|0)==(a|0))return 1;else{d=Yj(b,a)|0;return ((d|0)==(b|0)|(d|0)==(a|0))&1|0}return 0}function Wj(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;h=j;g=bn(a,b,d,0,0)|0;if(!g){g=bn(a,d,b,0,0)|0;if(!g){g=bn(a,b,d,0,1)|0;if(!g){b=En(b)|0;f=En(d)|0;c[h>>2]=b;c[h+4>>2]=f;$l(1,80126,h)|0}else i=4}else i=4}else i=4;if((i|0)==4){i=c[f+16>>2]|0;Sj(g,e[i+170>>1]|0,c[i+156>>2]|0)}l=j;return}function Xj(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+112|0;j=m;i=m+4|0;h=Tm(a,d)|0;while(1){if(!h){k=6;break}n=Qm(a,c[((c[h>>2]&3|0)==3?h:h+48|0)+40>>2]|0)|0;if(n|0?(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)==(f|0):0)break;h=Um(a,h)|0}if((k|0)==6){n=c[41934]|0;c[41934]=n+1;c[j>>2]=n;qL(i,80117,j)|0;i=Pj(a,i)|0;n=bn(a,i,d,0,1)|0;i=bn(a,i,f,0,1)|0;f=c[g+16>>2]|0;k=f+156|0;n=(c[n+16>>2]|0)+156|0;c[n>>2]=(c[n>>2]|0)+((c[k>>2]|0)*1e3|0);n=c[i+16>>2]|0;j=n+170|0;b[j>>1]=b[(c[((e[j>>1]|0)>(e[f+170>>1]|0)?i:g)+16>>2]|0)+170>>1]|0;n=n+156|0;c[n>>2]=(c[n>>2]|0)+(c[k>>2]|0)}l=m;return}function Yj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:while(1){e=a+16|0;while(1){if((a|0)==(b|0))break a;f=c[e>>2]|0;d=c[b+16>>2]|0;if((c[f+204>>2]|0)>=(c[d+204>>2]|0))break;b=c[d+200>>2]|0}a=c[f+200>>2]|0}return a|0}function Zj(a){a=a|0;return (eo(a)|0)==0|0}function _j(a,b){a=a|0;b=b|0;c[(c[a+16>>2]|0)+200>>2]=b;zj(b,a);yj(b,a);return}function $j(b){b=b|0;var c=0;b=Jm(b,80018)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)if(yJ(b,80028)|0)if(yJ(b,80032)|0)if(yJ(b,80039)|0)if(yJ(b,80043)|0)if(!(yJ(b,80023)|0))b=1;else c=8;else b=5;else b=4;else b=3;else b=2;else c=8;if((c|0)==8)b=6;return b|0}function ak(a){a=a|0;var b=0,c=0;c=eo(a)|0;a:do if(!c)b=0;else{b=Mj(c)|0;while(1){c=fo(a,c)|0;if(!c)break a;bk(b,c)|0}}while(0);return b|0}function bk(a,b){a=a|0;b=b|0;if(b){a=Mj(a)|0;c[(c[(Mj(b)|0)+16>>2]|0)+152>>2]=a}return a|0}function ck(a,b,d){a=a|0;b=b|0;d=d|0;Oo(b,80077,c[d>>2]|0,1)|0;return}function dk(a,b,d){a=a|0;b=b|0;d=d|0;Oo(b,80244,c[d+4>>2]|0,1)|0;return}function ek(a,b,d){a=a|0;b=b|0;d=d|0;Oo(b,80229,c[d+8>>2]|0,1)|0;return}function fk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+240|0;m=p+120|0;n=p;c[42238]=zm(b,2,80259,0)|0;k=zm(b,2,80268,0)|0;c[42239]=k;a:do if((k|0)!=0|(c[42238]|0)!=0){k=eo(b)|0;while(1){if(!k)break a;j=0;d=0;i=Vm(b,k)|0;while(1){if(!i){f=0;break}e=c[i>>2]|0;g=e&3;f=c[((g|0)==2?i:i+-48|0)+40>>2]|0;h=i+48|0;b:do if((f|0)!=(c[((g|0)==3?i:h)+40>>2]|0)){g=c[42238]|0;do if((f|0)==(k|0)&(g|0)!=0){f=Km(i,g)|0;if(!(a[f>>0]|0)){e=c[i>>2]|0;break}else{e=j;d=gk(m,d,k,i,f)|0;break b}}while(0);f=c[42239]|0;if((f|0?(c[((e&3|0)==3?i:h)+40>>2]|0)==(k|0):0)?(o=Km(i,f)|0,(a[o>>0]|0)!=0):0)e=gk(n,j,k,i,o)|0;else e=j}else e=j;while(0);j=e;i=Wm(b,i,k)|0}while(1){if((f|0)>=(d|0)){e=0;break}e=m+(f*24|0)+4|0;if((c[m+(f*24|0)+8>>2]|0)>1)hk(k,e);e=c[e>>2]|0;if(e|0)$I(e);f=f+1|0}while(1){if((e|0)>=(j|0))break;d=n+(e*24|0)+4|0;if((c[n+(e*24|0)+8>>2]|0)>1)hk(k,d);d=c[d>>2]|0;if(d|0)$I(d);e=e+1|0}k=fo(b,k)|0}}while(0);l=p;return}function gk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;k=p;m=p+12|0;n=p+8|0;o=0;while(1){if((o|0)>=(d|0)){j=10;break}j=c[b+(o*24|0)>>2]|0;if((a[j>>0]|0)==(a[g>>0]|0)?(yJ(j,g)|0)==0:0){j=5;break}o=o+1|0}do if((j|0)==5){k=b+(o*24|0)+4|0;j=c[k>>2]|0;if(!j){j=b+(o*24|0)+8|0;g=j;j=xw((c[j>>2]<<2)+8|0)|0}else{q=b+(o*24|0)+8|0;g=q;j=zw(j,(c[q>>2]<<2)+8|0)|0}c[k>>2]=j;r=c[g>>2]|0;q=r+1|0;c[g>>2]=q;c[j+(r<<2)>>2]=f;c[(c[k>>2]|0)+(q<<2)>>2]=0;j=13}else if((j|0)==10)if((d|0)>4){r=En(e)|0;c[k>>2]=5;c[k+4>>2]=r;$l(1,80277,k)|0;break}else{s=b+(o*24|0)+8|0;c[s>>2]=0;k=ww(8)|0;r=b+(o*24|0)+4|0;c[r>>2]=k;q=c[s>>2]|0;j=q+1|0;c[s>>2]=j;c[k+(q<<2)>>2]=f;c[(c[r>>2]|0)+(j<<2)>>2]=0;c[b+(o*24|0)>>2]=g;c[b+(o*24|0)+12>>2]=0;h[b+(o*24|0)+16>>3]=0.0;d=d+1|0;j=13;break}while(0);if((j|0)==13){Bt(f,m,n);j=(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)==(e|0)?c[n>>2]|0:c[m>>2]|0;if(j){r=b+(o*24|0)+12|0;s=c[r>>2]|0;c[r>>2]=s+1;if(!s)i=+Ft(f,j);else i=0.0;h[b+(o*24|0)+16>>3]=i}}l=p;return d|0}function hk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+80|0;t=x+68|0;u=x+64|0;r=x;v=d+4|0;n=c[v>>2]|0;w=b+16|0;i=0;p=0.0;q=0.0;while(1){if((i|0)>=(n|0))break;f=c[(c[d>>2]|0)+(i<<2)>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;g=c[e+16>>2]|0;s=c[w>>2]|0;k=+h[g+16>>3]-+h[s+16>>3];m=+h[g+24>>3]-+h[s+24>>3];o=+RJ(k,m);i=i+1|0;p=k/o+p;q=m/o+q}j=+RJ(p,q);s=c[w>>2]|0;k=+h[s+16>>3];m=+h[s+24>>3];y=+h[s+96>>3]+ +h[s+88>>3];o=+h[s+80>>3];s=y>o+ +(c[(c[(so(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0;if(s)o=+h[e+96>>3]+ +h[e+88>>3];else{o=+h[e+80>>3];o=o+ +(c[(c[(so(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0}y=+h[e+16>>3]+o*(p/j);j=+h[e+24>>3]+o*(q/j);h[r>>3]=k;n=r+8|0;h[n>>3]=m;h[r+16>>3]=(y+k*2.0)*.3333333333333333;h[r+24>>3]=(j+m*2.0)*.3333333333333333;h[r+32>>3]=(y*2.0+k)*.3333333333333333;h[r+40>>3]=(j*2.0+m)*.3333333333333333;h[r+48>>3]=y;h[r+56>>3]=j;Hz(b,r);s=c[w>>2]|0;j=+h[r>>3]-+h[s+16>>3];k=+h[n>>3]-+h[s+24>>3];j=+(~~(j+(j>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);y=+h[s+88>>3];s=~~((y+j)*256.0/(+h[s+96>>3]+y))&255;r=0;while(1){if((r|0)>=(c[v>>2]|0))break;n=c[(c[d>>2]|0)+(r<<2)>>2]|0;Bt(n,t,u);while(1){if(!n)break;else g=n;while(1){if(!g){i=n;break}e=c[g>>2]|0;i=g+-48|0;if((c[((e&3|0)==2?g:i)+40>>2]|0)==(b|0)){e=c[g+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[g>>2]|0}f=g+16|0;if((c[((e&3|0)==3?g:g+48|0)+40>>2]|0)==(b|0)){e=c[f>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[f>>2]|0)+112>>0]|0)!=1){g=0;continue}e=c[(c[((c[g>>2]&3|0)==2?g:i)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){g=0;continue}if((c[e+184>>2]|0)!=1){g=0;continue}g=c[c[e+180>>2]>>2]|0}while(1){if(!i)break;e=c[i>>2]|0;if((c[((e&3|0)==2?i:i+-48|0)+40>>2]|0)==(b|0)){e=c[i+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[i>>2]|0}f=i+48|0;g=i+16|0;if((c[((e&3|0)==3?i:f)+40>>2]|0)==(b|0)){e=c[g>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[g>>2]|0)+112>>0]|0)!=1){i=0;continue}e=c[(c[((c[i>>2]&3|0)==3?i:f)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){i=0;continue}if((c[e+176>>2]|0)!=1){i=0;continue}i=c[c[e+172>>2]>>2]|0}n=c[(c[n+16>>2]|0)+172>>2]|0}r=r+1|0}a[(c[w>>2]|0)+145>>0]=1;l=x;return}function ik(a){a=a|0;var b=0,d=0,e=0;Yg(a);b=c[a>>2]&3;d=a+-48|0;e=a+48|0;b=Tg(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0)|0;if(!b){b=c[a>>2]&3;bh(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0,a)|0}else jh(a,b);return}function jk(b){b=b|0;var d=0,e=0,f=0,g=0;f=b+16|0;e=0;while(1){b=c[f>>2]|0;if((e|0)>=(c[b+220>>2]|0))break;d=c[(c[b+216>>2]|0)+(e<<2)>>2]|0;c[b+192>>2]=d;b=d;d=b;while(1){if(!d)break;g=c[d+16>>2]|0;a[g+157>>0]=0;d=c[g+164>>2]|0}while(1){if(!b)break;kk(b);b=c[(c[b+16>>2]|0)+164>>2]|0}e=e+1|0}return}function kk(b){b=b|0;var d=0,e=0,f=0,g=0;g=b+16|0;d=c[g>>2]|0;b=d+157|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[d+158>>0]=1;b=0;while(1){f=c[(c[d+180>>2]|0)+(b<<2)>>2]|0;if(!f)break;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;e=c[d+16>>2]|0;if(!(a[e+158>>0]|0)){if(!(a[e+157>>0]|0))kk(d)}else{ik(f);b=b+-1|0}b=b+1|0;d=c[g>>2]|0}a[d+158>>0]=0}return}function lk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=eo(a)|0;b=0;while(1){if(!e)break;d=Qm(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;h=c[(c[(c[((g|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;g=c[(c[(c[((g|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;f=h-g|0;d=Sm(a,d)|0;b=((h|0)==(g|0)?0:((f|0)>-1?f:0-f|0)+-1|0)+b|0}e=fo(a,e)|0}return b|0}function mk(b){b=b|0;var d=0,e=0,f=0,g=0;e=eo(b)|0;while(1){if(!e)break;g=c[e+16>>2]|0;f=c[g+176>>2]|0;g=g+172|0;d=0;while(1){if((d|0)>=(f|0))break;a[(c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+112>>0]=0;d=d+1|0}e=fo(b,e)|0}return}function nk(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;o=q;j=c[b+24>>2]|0;ok(a);k=(j|0)==-1;m=b+8|0;i=k^1;n=c[13918]|0;f=1797693134862315708145274.0e284;g=0;while(1){if(!(k|(g|0)<(j|0)))break;d=eo(a)|0;while(1){if(!d)break;c[(c[d+16>>2]|0)+232>>2]=0;d=fo(a,d)|0}kj(a);e=+pk(a);h[m>>3]=e;if(0){h[o>>3]=e;AL(n,80329,o)|0;e=+h[m>>3]}if(!(!(e<=+h[b>>3])&(!(f<=e)|i))){p=9;break}qk(a);f=e;g=g+1|0}if((p|0)==9){p=b+20|0;c[b+16>>2]=c[p>>2];c[p>>2]=g}kj(a);rk(a);sk();h[m>>3]=+pk(a);l=q;return}function ok(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0;c[41938]=xw((nn(a)|0)*24|0)|0;c[41937]=0;b=eo(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+120>>2]=-1;b=fo(a,b)|0}i=eo(a)|0;while(1){if(!i)break;j=i+16|0;do if(!(c[(c[j>>2]|0)+216>>2]|0)){f=ww(4)|0;g=c[41938]|0;k=c[41937]|0;c[g+(k*24|0)>>2]=f;c[f>>2]=i;c[g+(k*24|0)+4>>2]=1;j=c[j>>2]|0;h[g+(k*24|0)+8>>3]=+h[j+32>>3];h[g+(k*24|0)+16>>3]=+h[j+40>>3];c[j+120>>2]=k;c[41937]=k+1}else{g=LA(i)|0;k=g+16|0;b=c[k>>2]|0;d=c[b+120>>2]|0;if((d|0)>-1){g=c[41938]|0;f=c[g+(d*24|0)>>2]|0;e=g+(d*24|0)+4|0;k=c[e>>2]|0;c[e>>2]=k+1;c[f+(k<<2)>>2]=i;k=c[j>>2]|0;j=g+(d*24|0)+8|0;h[j>>3]=+h[j>>3]+ +h[k+32>>3];j=g+(d*24|0)+16|0;l=+h[j>>3];m=+h[k+40>>3];h[j>>3]=l<m?m:l;c[k+120>>2]=d;break}d=ww(c[b+216>>2]<<2)|0;e=c[41938]|0;f=c[41937]|0;b=e+(f*24|0)|0;c[b>>2]=d;c[d>>2]=g;if((g|0)==(i|0)){h[e+(f*24|0)+8>>3]=+h[(c[k>>2]|0)+32>>3];d=1;b=i}else{c[(c[b>>2]|0)+4>>2]=i;n=c[k>>2]|0;b=c[j>>2]|0;h[e+(f*24|0)+8>>3]=+h[b+32>>3]+ +h[n+32>>3];d=2;b=+h[n+40>>3]<+h[b+40>>3]?i:g}c[e+(f*24|0)+4>>2]=d;h[e+(f*24|0)+16>>3]=+h[(c[b+16>>2]|0)+40>>3];c[(c[k>>2]|0)+120>>2]=f;c[(c[j>>2]|0)+120>>2]=f;c[41937]=f+1}while(0);i=fo(a,i)|0}return}function pk(a){a=a|0;var b=0.0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0;rk(a);g=c[41935]|0;e=c[a+16>>2]|0;b=+(O(c[e+252>>2]|0,g+-1|0)|0);f=c[41936]|0;e=e+248|0;a=0;d=0.0;while(1){if((a|0)>=(g|0))break;i=+h[f+(a*40|0)+24>>3]+ +(O(c[e>>2]|0,c[f+(a*40|0)+16>>2]|0)|0);j=+h[f+(a*40|0)+32>>3]+b;a=a+1|0;b=j;d=d<i?i:d}return +(d/b)}function qk(a){a=a|0;var b=0;c[41939]=ww((nn(a)|0)<<2)|0;b=0;while(1){if((b|0)>=(nn(a)|0))break;c[(c[41939]|0)+(b<<2)>>2]=b;b=b+1|0}rk(a);tk(a);uk(a);return}function rk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0;c[41935]=0;b=c[41936]|0;if(b|0){e=0;while(1){if((e|0)>=(c[41937]|0))break;d=c[b+(e*40|0)+4>>2]|0;if(d){$I(d);b=c[41936]|0}d=c[b+(e*40|0)+8>>2]|0;if(d){$I(d);b=c[41936]|0}e=e+1|0}$I(b)}c[41936]=ww((c[41937]|0)*40|0)|0;b=0;while(1){d=c[41937]|0;if((b|0)>=(d|0))break;k=ww(d<<2)|0;c[(c[41936]|0)+(b*40|0)+4>>2]=k;k=ww(c[41937]<<2)|0;l=c[41936]|0;c[l+(b*40|0)+8>>2]=k;c[l+(b*40|0)>>2]=b;c[l+(b*40|0)+12>>2]=0;c[l+(b*40|0)+16>>2]=0;l=l+(b*40|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;b=b+1|0}e=eo(a)|0;while(1){if(!e)break;d=Qm(a,e)|0;while(1){if(!d)break;i=c[d>>2]|0;f=d+-48|0;g=c[41936]|0;b=c[(c[(c[((i&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){b=b+1|0;if((b|0)>=(c[(c[(c[((i&3|0)==2?d:f)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=g+(b*40|0)+16|0;c[i>>2]=(c[i>>2]|0)+1;i=c[d>>2]|0}d=Sm(a,d)|0}e=fo(a,e)|0}i=c[41937]|0;k=c[41938]|0;l=c[41936]|0;d=a+16|0;b=0;while(1){if((b|0)>=(i|0))break;e=(c[c[k+(b*24|0)>>2]>>2]|0)+16|0;f=c[(c[e>>2]|0)+232>>2]|0;if((f|0)>=(c[41935]|0))c[41935]=f+1;g=l+(f*40|0)+24|0;j=+h[g>>3];h[g>>3]=j+ +h[k+(b*24|0)+8>>3]*72.0+(j>0.0?+(c[(c[d>>2]|0)+248>>2]|0):0.0);g=l+(f*40|0)+32|0;j=+h[k+(b*24|0)+16>>3]*72.0;if(+h[g>>3]<j)h[g>>3]=j;c[(c[l+(f*40|0)+4>>2]|0)+(c[l+(f*40|0)+12>>2]<<2)>>2]=k+(b*24|0);a=l+((c[(c[e>>2]|0)+232>>2]|0)*40|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;b=b+1|0}return}function sk(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=c[41935]|0;l=c[41936]|0;j=0;b=0;a=0;while(1){if((j|0)>=(k|0))break;d=l+(j*40|0)|0;i=c[l+(j*40|0)+12>>2]|0;e=(b|0)==0;a:do if(i)if(!e){if((c[d>>2]|0)>(a|0)){f=l+(j*40|0)+4|0;d=0;while(1){if((d|0)>=(i|0))break a;g=c[(c[f>>2]|0)+(d<<2)>>2]|0;h=c[g+4>>2]|0;e=0;while(1){if((e|0)>=(h|0))break;m=(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-b;e=e+1|0}d=d+1|0}}}else b=0;else{if(e)a=c[d>>2]|0;b=b+1|0}while(0);j=j+1|0}return}function tk(a){a=a|0;var b=0;b=c[41939]|0;sL(b,nn(a)|0,4,15);return}function uk(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;j=c[41935]|0;k=c[41936]|0;g=c[41939]|0;i=0;while(1){if((i|0)>=(j|0)){e=0;d=0.0;break}e=c[g+(i<<2)>>2]|0;f=i+1|0;if((c[k+(e*40|0)+12>>2]|0)<2)i=f;else{l=4;break}}if((l|0)==4)if((j|0)>(f|0))d=+h[k+((c[g+(f<<2)>>2]|0)*40|0)+24>>3];else d=0.0;a:do if((i|0)!=(j|0)){sL(c[k+(e*40|0)+4>>2]|0,c[k+(e*40|0)+12>>2]|0,4,16);g=c[41936]|0;r=+h[g+(e*40|0)+24>>3];r=!(d<=r*.25)&!(d>=r*.75)?d:r*.5;s=c[g+(e*40|0)+12>>2]|0;q=b+16|0;n=0;o=0;d=0.0;f=0;p=0;while(1){if((p|0)>=(f+s|0))break a;do if(!(c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]|0)){l=c[(c[g+(e*40|0)+4>>2]|0)+(p<<2)>>2]|0;b=l+8|0;m=+h[b>>3]*72.0+d+(d>0.0?+(c[(c[q>>2]|0)+248>>2]|0):0.0);i=(o|0)!=0;if(!(i&!(m<=r))){j=i?n:l;i=i?o:1;d=m;break}j=n+4|0;k=l+4|0;i=0;while(1){if((i|0)<(c[j>>2]|0))g=0;else break;while(1){if((g|0)>=(c[k>>2]|0))break;a[(c[(bh(c[(c[n>>2]|0)+(i<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0,0)|0)+16>>2]|0)+112>>0]=1;g=g+1|0}i=i+1|0}g=c[41936]|0;c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]=1;j=g+(e*40|0)+12|0;c[j>>2]=(c[j>>2]|0)+-1;j=g+(e*40|0)+16|0;c[j>>2]=(c[j>>2]|0)+1;j=g+(e*40|0)+24|0;h[j>>3]=+h[b>>3]*-72.0-+(c[(c[q>>2]|0)+248>>2]|0)+ +h[j>>3];j=n;i=o}else{j=n;i=o;f=f+1|0}while(0);n=j;o=i;p=p+1|0}}while(0);return}function vk(a,b){a=a|0;b=b|0;a=wk(c[a>>2]|0)|0;b=wk(c[b>>2]|0)|0;return ((b|0)<(a|0)&1)-((b|0)>(a|0)&1)|0}function wk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[f>>2]|0))break;e=c[(c[a>>2]|0)+(d<<2)>>2]|0;g=so(e)|0;e=Qm(g,e)|0;while(1){if(!e)break;e=Sm(g,e)|0;b=b+1|0}d=d+1|0}return b|0}function xk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[41936]|0;e=+h[f+((c[b>>2]|0)*40|0)+24>>3];d=+h[f+((c[a>>2]|0)*40|0)+24>>3];return (e>d&1)-(e<d&1)|0}function yk(a){a=a|0;var b=0;b=eo(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+216>>2]=0;b=fo(a,b)|0}return}function zk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g+20|0;c[d>>2]=5;a=Jm(a,84624)|0;if(a|0?(c[e>>2]=g,c[e+4>>2]=d,(dM(a,80344,e)|0)>=1):0)$l(0,80351,f)|0;c[b+24>>2]=0;c[b+32>>2]=0;l=g;return 0}function Ak(b){b=b|0;var d=0,e=0;d=c[42234]|0;if((((d|0)!=0?(e=Km(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(JA(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function Bk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;Wk(a);b=eo(a)|0;while(1){if(!b)break;d=Qm(a,b)|0;while(1){if(!d)break;do if(((c[(c[d+16>>2]|0)+172>>2]|0)==0?(Ak(d)|0)==0:0)?(e=d+48|0,f=LA(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)|0,g=d+-48|0,h=LA(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)|0,(f|0)!=(h|0)):0){if((c[(c[f+16>>2]|0)+212>>2]|0)==0?(c[(c[h+16>>2]|0)+212>>2]|0)==0:0){i=Tg(f,h)|0;if(!i){bh(f,h,d)|0;break}else{jh(d,i);break}}i=c[d>>2]&3;Ck(a,c[((i|0)==3?d:e)+40>>2]|0,c[((i|0)==2?d:g)+40>>2]|0,d)}while(0);d=Sm(a,d)|0}b=fo(a,b)|0}return}function Ck(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[g>>2]&3;h=c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)k=0;else k=(c[h+232>>2]|0)-(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)|0;h=c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)h=0;else h=(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)-(c[h+232>>2]|0)|0;j=g+16|0;k=h+k+(e[(c[j>>2]|0)+170>>1]|0)|0;b=gh(b)|0;a[(c[b+16>>2]|0)+156>>0]=2;i=LA(d)|0;d=LA(f)|0;f=Ni(b,i,(k|0)>0?0.0:+(0-k|0),(c[(c[j>>2]|0)+156>>2]|0)*10|0)|0;c[(c[(Ni(b,d,+(((k|0)>0?k:0)|0),c[(c[j>>2]|0)+156>>2]|0)|0)+16>>2]|0)+116>>2]=g;c[(c[f+16>>2]|0)+116>>2]=g;return}function Dk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[d>>2]&3;i=(j|0)==3?d:d+48|0;j=(j|0)==2?d:d+-48|0;j=c[(c[(c[((c[(c[(c[i+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[(c[j+40>>2]|0)+16>>2]|0)+232>>2]|0)?i:j)+40>>2]|0)+16>>2]|0)+232>>2]|0;i=d+16|0;d=(c[i>>2]|0)+172|0;if(c[d>>2]|0)ma(80440,80462,148,80471);c[d>>2]=f;h=(g|0)==0;do{d=c[i>>2]|0;if(h)g=c[f+16>>2]|0;else{g=c[f+16>>2]|0;k=g+168|0;b[k>>1]=(e[k>>1]|0)+(e[d+168>>1]|0)}k=g+154|0;b[k>>1]=(e[k>>1]|0)+(e[d+154>>1]|0);g=g+156|0;c[g>>2]=(c[g>>2]|0)+(c[d+156>>2]|0);d=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)==(j|0))break;Ek(a,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((f|0)!=0);return}function Ek(a,b){a=a|0;b=b|0;var d=0.0;d=+((c[(c[a+16>>2]|0)+248>>2]|0)/2|0|0);b=c[b+16>>2]|0;a=b+88|0;h[a>>3]=+h[a>>3]+d;b=b+96|0;h[b>>3]=+h[b>>3]+d;return}function Fk(a,b){a=a|0;b=b|0;var d=0,e=0;if(((((a|0)!=0&(b|0)!=0?(e=c[a>>2]&3,d=c[b>>2]&3,(c[((e|0)==3?a:a+48|0)+40>>2]|0)==(c[((d|0)==3?b:b+48|0)+40>>2]|0)):0)?(c[((e|0)==2?a:a+-48|0)+40>>2]|0)==(c[((d|0)==2?b:b+-48|0)+40>>2]|0):0)?(c[(c[a+16>>2]|0)+96>>2]|0)==(c[(c[b+16>>2]|0)+96>>2]|0):0)?(ij(a,b)|0)!=0:0)a=1;else a=0;return a|0}function Gk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=b+16|0;d=c[r>>2]|0;c[d+192>>2]=0;c[d+232>>2]=0;Wk(b);d=1;while(1){e=c[r>>2]|0;if((d|0)>(c[e+180>>2]|0))break;Xk(b,c[(c[e+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}h=eo(b)|0;while(1){if(!h)break;g=Qm(b,h)|0;while(1){if(!g)break;d=c[g>>2]|0;e=(c[(c[((d&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+160|0;f=a[e>>0]|0;if(f<<24>>24<3){a[e>>0]=f+1<<24>>24;d=c[g>>2]|0}d=(c[(c[((d&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+160|0;e=a[d>>0]|0;if(e<<24>>24<3)a[d>>0]=e+1<<24>>24;g=Sm(b,g)|0}h=fo(b,h)|0}m=eo(b)|0;while(1){if(!m)break;if((c[(c[m+16>>2]|0)+212>>2]|0)==0?(m|0)==(LA(m)|0):0){ch(b,m);l=(c[r>>2]|0)+232|0;c[l>>2]=(c[l>>2]|0)+1}d=0;l=Qm(b,m)|0;while(1){if(!l)break;k=l+16|0;h=c[k>>2]|0;a:do if(!(c[h+172>>2]|0)){if(Hk(l)|0){if(!(Fk(d,l)|0)){Ik(b,l);d=l;break}e=c[(c[d+16>>2]|0)+172>>2]|0;if(e|0){Dk(b,l,e,0);Zg(l);break}k=c[l>>2]&3;if((c[(c[(c[((k|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)!=(c[(c[(c[((k|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;jh(l,d);Zg(l);break}if(d){i=c[l>>2]&3;e=l+48|0;f=c[((i|0)==3?l:e)+40>>2]|0;g=c[d>>2]&3;if((f|0)==(c[((g|0)==3?d:d+48|0)+40>>2]|0)?(n=c[((i|0)==2?l:l+-48|0)+40>>2]|0,(n|0)==(c[((g|0)==2?d:d+-48|0)+40>>2]|0)):0){if((c[(c[f+16>>2]|0)+232>>2]|0)==(c[(c[n+16>>2]|0)+232>>2]|0)){jh(l,d);Zg(l);break}if(((c[h+96>>2]|0)==0?(o=d+16|0,(c[(c[o>>2]|0)+96>>2]|0)==0):0)?(ij(l,d)|0)!=0:0)if(!(a[174080]|0)){Dk(b,l,c[(c[o>>2]|0)+172>>2]|0,1);Zg(l);break}else{a[(c[k>>2]|0)+112>>0]=6;break}else i=e}else i=e}else i=l+48|0;h=c[l>>2]&3;e=c[((h|0)==3?l:i)+40>>2]|0;j=l+-48|0;if((e|0)==(c[((h|0)==2?l:j)+40>>2]|0)){Zg(l);d=l;break}e=LA(e)|0;f=LA(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)|0;h=c[l>>2]&3;if((c[((h|0)==3?l:i)+40>>2]|0)==(e|0)?(c[((h|0)==2?l:j)+40>>2]|0)==(f|0):0){g=c[(c[e+16>>2]|0)+232>>2]|0;h=c[(c[f+16>>2]|0)+232>>2]|0;if((g|0)==(h|0)){hh(b,l);d=l;break}if((h|0)>(g|0)){Jk(b,e,f,l);d=l;break}e=bn(b,f,e,0,0)|0;do if(e|0?(p=c[e>>2]&3,q=c[((p|0)==2?e:e+-48|0)+40>>2]|0,(q|0)!=(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)):0){f=e+16|0;if(!(c[(c[f>>2]|0)+172>>2]|0))Jk(b,c[((p|0)==3?e:e+48|0)+40>>2]|0,q,e);if((c[(c[k>>2]|0)+96>>2]|0)==0?(c[(c[f>>2]|0)+96>>2]|0)==0:0){if(!(ij(l,e)|0))break;if(!(a[174080]|0)){Zg(l);Dk(b,l,c[(c[f>>2]|0)+172>>2]|0,1);break a}else{a[(c[k>>2]|0)+112>>0]=6;a[(c[f>>2]|0)+153>>0]=1;break a}}}while(0);d=c[l>>2]&3;Jk(b,c[((d|0)==2?l:j)+40>>2]|0,c[((d|0)==3?l:i)+40>>2]|0,l);d=l}}else d=l;while(0);l=Sm(b,l)|0}m=fo(b,m)|0}if((Wf(b)|0)!=(b|0)){d=c[(c[r>>2]|0)+216>>2]|0;if(!d)d=xw(4)|0;else d=zw(d,4)|0;r=c[r>>2]|0;c[r+216>>2]=d;c[d>>2]=c[r+192>>2]}return}function Hk(b){b=b|0;var d=0;d=c[b>>2]&3;if((a[(c[(c[((d|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7)b=1;else b=(a[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7&1;return b|0}function Ik(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=Mk(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;g=Mk(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;i=(c[(c[f+16>>2]|0)+232>>2]|0)>(c[(c[g+16>>2]|0)+232>>2]|0);e=i?f:g;f=i?g:f;g=f+16|0;i=e+16|0;a:do if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[i>>2]|0)+212>>2]|0)){h=Tg(f,e)|0;if(h|0){Dk(b,d,h,1);break}if((c[(c[g>>2]|0)+232>>2]|0)!=(c[(c[i>>2]|0)+232>>2]|0)){Jk(b,f,e,d);e=(c[d+16>>2]|0)+172|0;while(1){e=c[e>>2]|0;if(!e)break a;f=e+-48|0;if((c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[i>>2]|0)+232>>2]|0))break a;a[(c[e+16>>2]|0)+112>>0]=5;e=c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+180>>2]|0}}}while(0);return}function Jk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;f=c[k>>2]|0;if(!(c[f+96>>2]|0))j=-1;else j=((c[(c[d+16>>2]|0)+232>>2]|0)+(c[(c[b+16>>2]|0)+232>>2]|0)|0)/2|0;if(c[f+172>>2]|0)ma(80483,80462,89,80508);i=d+16|0;h=c[(c[b+16>>2]|0)+232>>2]|0;while(1){g=h+1|0;f=c[(c[i>>2]|0)+232>>2]|0;if((h|0)>=(f|0))break;if((g|0)<(f|0)){if((g|0)==(j|0))f=Kk(a,e)|0;else f=Lk(a)|0;c[(c[f+16>>2]|0)+232>>2]=g}else f=d;wi(bh(b,f,e)|0);h=g;b=f}if(!(c[(c[k>>2]|0)+172>>2]|0))ma(80519,80462,103,80508);else return}function Kk(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0.0;i=d+16|0;g=c[(c[i>>2]|0)+96>>2]|0;e=+h[g+24>>3];f=+h[g+32>>3];g=gh(b)|0;d=g+16|0;c[(c[d>>2]|0)+104>>2]=c[(c[i>>2]|0)+96>>2];j=+(c[(c[(to(g)|0)+16>>2]|0)+248>>2]|0);h[(c[d>>2]|0)+88>>3]=j;if(!(a[(c[i>>2]|0)+114>>0]|0)){b=(c[(c[(to(b)|0)+16>>2]|0)+116>>2]&1|0)==0;i=c[d>>2]|0;h[i+80>>3]=b?f:e;h[i+96>>3]=b?e:f}return g|0}function Lk(a){a=a|0;var b=0;b=gh(a)|0;Ek(a,b);return b|0}function Mk(b){b=b|0;var d=0;d=c[b+16>>2]|0;if((a[d+159>>0]|0)==7)b=c[(c[(c[(c[d+212>>2]|0)+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;else b=LA(b)|0;return b|0}function Nk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=Wf(a)|0;h=eo(a)|0;while(1){if(!h)break;b=Vm(j,h)|0;i=0;while(1){if(!b)break;l=Wm(j,b,h)|0;if(Co(a,b)|0){k=i;b=l;i=k;continue}k=(c[b>>2]&3|0)==2?b:b+-48|0;m=(Fk(i,k)|0)==0;e=c[k>>2]&3;b=c[((e|0)==3?k:k+48|0)+40>>2]|0;d=c[(c[b+16>>2]|0)+232>>2]|0;e=c[((e|0)==2?k:k+-48|0)+40>>2]|0;f=c[(c[e+16>>2]|0)+232>>2]|0;g=(d|0)==(f|0);if(!m){c[(c[k+16>>2]|0)+172>>2]=g?i:0;b=c[(c[i+16>>2]|0)+172>>2]|0;if(!b){m=i;b=l;i=m;continue}Dk(a,k,b,0);_g(k);m=i;b=l;i=m;continue}if(!g)if((f|0)>(d|0)){Ok(b,e,k);b=l;i=k;continue}else{Ok(e,b,k);b=l;i=k;continue}b=Vg(b,e)|0;if(!b){hh(j,k);b=l;i=k;continue}if((k|0)==(b|0)){m=i;b=l;i=m;continue}_g(k);if(c[(c[k+16>>2]|0)+172>>2]|0){m=i;b=l;i=m;continue}jh(k,b);m=i;b=l;i=m}h=fo(a,h)|0}return}function Ok(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=Pk(a)|0;e=Pk(b)|0;Qk(f,e,d,c[(c[d+16>>2]|0)+172>>2]|0,(f|0)==(a|0)&(e|0)==(b|0)?1:5);return}function Pk(b){b=b|0;var d=0,e=0,f=0;d=c[b+16>>2]|0;e=c[d+212>>2]|0;if((e|0)!=0?(f=c[e+16>>2]|0,(a[f+272>>0]|0)==0):0)b=c[(c[f+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;return b|0}function Qk(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;k=c[(c[n>>2]|0)+232>>2]|0;o=e+16|0;i=c[(c[o>>2]|0)+232>>2]|0;if((i|0)<=(k|0))ma(80544,80572,81,80582);m=c[g>>2]&3;if(!((c[((m|0)==3?g:g+48|0)+40>>2]|0)==(d|0)?(c[((m|0)==2?g:g+-48|0)+40>>2]|0)==(e|0):0))l=5;a:do if((l|0)==5){if((b[(c[g+16>>2]|0)+168>>1]|0)>1){c[(c[f+16>>2]|0)+172>>2]=0;if(((i-k|0)==1?(j=Tg(d,e)|0,j|0):0)?ij(f,j)|0:0){jh(f,j);if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;Zg(f);break}m=h&255;h=d;l=c[(c[n>>2]|0)+232>>2]|0;while(1){i=c[(c[o>>2]|0)+232>>2]|0;if((l|0)>=(i|0))break a;if((l|0)<(i+-1|0)){i=Wf(d)|0;j=g+-48|0;i=Rk(i,c[((c[g>>2]&3|0)==2?g:j)+40>>2]|0)|0;k=g}else{i=e;j=g+-48|0;k=g}a[(c[(bh(h,i,f)|0)+16>>2]|0)+112>>0]=m;n=(c[g+16>>2]|0)+168|0;b[n>>1]=(b[n>>1]|0)+-1<<16>>16;h=i;l=l+1|0;g=c[c[(c[(c[((c[k>>2]&3|0)==2?g:j)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}}do if((i-k|0)==1){g=Tg(d,e)|0;if(g|0?ij(f,g)|0:0){c[(c[f+16>>2]|0)+172>>2]=g;m=c[g+16>>2]|0;a[m+112>>0]=h;m=m+168|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16;if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;Zg(f);break}c[(c[f+16>>2]|0)+172>>2]=0;g=bh(d,e,f)|0;a[(c[g+16>>2]|0)+112>>0]=h}while(0);i=c[(c[o>>2]|0)+232>>2]|0;if((i-(c[(c[n>>2]|0)+232>>2]|0)|0)>1){if((c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)==(d|0))l=i;else{n=f+16|0;c[(c[n>>2]|0)+172>>2]=0;l=bh(d,c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0,f)|0;c[(c[n>>2]|0)+172>>2]=l;Yg(g);g=l;l=c[(c[o>>2]|0)+232>>2]|0}while(1){i=c[g>>2]&3;j=c[((i|0)==2?g:g+-48|0)+40>>2]|0;k=c[j+16>>2]|0;if((c[k+232>>2]|0)==(l|0))break;g=c[c[k+180>>2]>>2]|0}if((j|0)!=(e|0)){a[(c[(bh(c[((i|0)==3?g:g+48|0)+40>>2]|0,e,f)|0)+16>>2]|0)+112>>0]=h;Yg(g)}}}while(0);return}function Rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=b+16|0;b=c[d>>2]|0;e=c[b+232>>2]|0;Sk(a,e,c[b+236>>2]|0,2);b=gh(a)|0;d=c[d>>2]|0;f=c[b+16>>2]|0;h[f+88>>3]=+h[d+88>>3];h[f+96>>3]=+h[d+96>>3];c[f+232>>2]=c[d+232>>2];d=(c[d+236>>2]|0)+1|0;c[f+236>>2]=d;c[(c[(c[(c[a+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return b|0}function Sk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=a+16|0;f=c[(c[h>>2]|0)+196>>2]|0;i=c[f+(b<<6)+4>>2]|0;a:do if((e|0)<1){d=d-e|0;while(1){g=d+1|0;a=c[f+(b<<6)>>2]|0;if((g|0)>=(a|0))break;a=c[i+(g<<2)>>2]|0;f=d+e|0;c[(c[a+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=a;d=g;f=c[(c[h>>2]|0)+196>>2]|0}g=e+-1|0;d=g+a|0;while(1){if((d|0)>=(a|0))break a;c[i+(d<<2)>>2]=0;f=c[(c[h>>2]|0)+196>>2]|0;d=d+1|0;a=c[f+(b<<6)>>2]|0}}else{g=e+-1|0;a=c[f+(b<<6)>>2]|0;while(1){a=a+-1|0;if((a|0)<=(d|0))break;j=c[i+(a<<2)>>2]|0;f=g+a|0;c[(c[j+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=j}f=e+d|0;a=d;while(1){a=a+1|0;if((a|0)>=(f|0))break;c[i+(a<<2)>>2]=0}a=c[(c[h>>2]|0)+196>>2]|0;f=a;a=c[a+(b<<6)>>2]|0}while(0);c[f+(b<<6)>>2]=g+a;return}function Tk(a){a=a|0;var b=0;Gk(a);b=c[a+16>>2]|0;c[b+220>>2]=1;c[c[b+216>>2]>>2]=c[b+192>>2];ti(a);_h(a,0);Uk(a);Nk(a);Vk(a);return}function Uk(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=Wf(d)|0;l=d+16|0;f=c[l>>2]|0;j=b[f+236>>1]|0;e=j<<16>>16;m=k+16|0;if(j<<16>>16>0)a[(c[(c[m>>2]|0)+196>>2]|0)+(e+-1<<6)+49>>0]=0;j=e;while(1){if((j|0)>(b[f+238>>1]|0))break;i=c[(c[(c[(c[f+268>>2]|0)+(j<<2)>>2]|0)+16>>2]|0)+236>>2]|0;Sk(k,j,i,c[(c[f+196>>2]|0)+(j<<6)>>2]|0);g=0;h=i;while(1){f=c[l>>2]|0;e=c[f+196>>2]|0;if((g|0)>=(c[e+(j<<6)>>2]|0))break;e=c[(c[e+(j<<6)+4>>2]|0)+(g<<2)>>2]|0;c[(c[(c[(c[m>>2]|0)+196>>2]|0)+(j<<6)+4>>2]|0)+(h<<2)>>2]=e;f=c[e+16>>2]|0;c[f+236>>2]=h;if((a[f+156>>0]|0)==1)c[e+24>>2]=to(k)|0;eh(d,e);ch(k,e);f=(c[m>>2]|0)+232|0;c[f>>2]=(c[f>>2]|0)+1;g=g+1|0;h=h+1|0}h=c[(c[m>>2]|0)+196>>2]|0;c[e+(j<<6)+4>>2]=(c[h+(j<<6)+4>>2]|0)+(i<<2);a[h+(j<<6)+49>>0]=0;j=j+1|0}e=c[m>>2]|0;if((j|0)<(b[e+238>>1]|0))a[(c[e+196>>2]|0)+(j<<6)+49>>0]=0;a[f+272>>0]=1;return}function Vk(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;h=b[d+236>>1]|0;while(1){if((h|0)>(b[d+238>>1]|0))break;f=c[(c[d+268>>2]|0)+(h<<2)>>2]|0;g=f+16|0;while(1){d=c[g>>2]|0;e=c[c[d+180>>2]>>2]|0;if(!e)break;Yg(e)}while(1){d=c[c[d+172>>2]>>2]|0;if(!d)break;Yg(d);d=c[g>>2]|0}eh(Wf(a)|0,f);c[(c[(c[i>>2]|0)+268>>2]|0)+(h<<2)>>2]=0;h=h+1|0;d=c[i>>2]|0}return}function Wk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=eo(b)|0;while(1){if(!f)break;e=f+16|0;d=c[e>>2]|0;if((a[d+159>>0]|0)==7){NA(f);d=c[e>>2]|0}c[d+212>>2]=0;f=fo(b,f)|0}m=b+16|0;k=1;while(1){d=c[m>>2]|0;if((k|0)>(c[d+180>>2]|0))break;h=c[(c[d+184>>2]|0)+(k<<2)>>2]|0;i=h+16|0;d=eo(h)|0;a:while(1){if(!d)break;j=fo(h,d)|0;e=d+16|0;if(a[(c[e>>2]|0)+159>>0]|0){f=En(d)|0;g=En(b)|0;c[n>>2]=f;c[n+4>>2]=g;$l(0,80591,n)|0;ro(h,d)|0;d=j;continue}OA(d,c[(c[i>>2]|0)+264>>2]|0);g=c[e>>2]|0;c[g+212>>2]=h;a[g+159>>0]=7;g=Qm(h,d)|0;while(1){if(!g){d=j;continue a}d=c[(c[g+16>>2]|0)+172>>2]|0;b:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break b;c[f+212>>2]=h;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Sm(h,g)|0}}k=k+1|0}l=o;return}function Xk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;g=ww((b[(c[k>>2]|0)+238>>1]<<2)+8|0)|0;f=c[k>>2]|0;c[f+268>>2]=g;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>(b[f+238>>1]|0))break;f=gh(d)|0;c[(c[(c[k>>2]|0)+268>>2]|0)+(h<<2)>>2]=f;j=c[f+16>>2]|0;c[j+232>>2]=h;a[j+159>>0]=7;c[j+212>>2]=e;if(g|0){j=(c[(bh(g,f,0)|0)+16>>2]|0)+154|0;b[j>>1]=(b[j>>1]|0)*1e3}g=f;h=h+1|0;f=c[k>>2]|0}j=eo(e)|0;while(1){f=c[k>>2]|0;if(!j)break;h=(c[(c[f+268>>2]|0)+(c[(c[j+16>>2]|0)+232>>2]<<2)>>2]|0)+16|0;f=(c[h>>2]|0)+216|0;c[f>>2]=(c[f>>2]|0)+1;f=Qm(e,j)|0;while(1){if(!f)break;i=c[f>>2]|0;d=f+-48|0;g=c[(c[(c[((i&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){if((g|0)>=(c[(c[(c[((i&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=(c[(c[c[(c[h>>2]|0)+180>>2]>>2]|0)+16>>2]|0)+168|0;b[i>>1]=(b[i>>1]|0)+1<<16>>16;g=g+1|0;i=c[f>>2]|0}f=Sm(e,f)|0}j=fo(e,j)|0}d=b[f+238>>1]|0;i=f+268|0;f=b[f+236>>1]|0;while(1){if((f|0)>(d|0))break;g=(c[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+16>>2]|0)+216|0;h=c[g>>2]|0;if((h|0)>1)c[g>>2]=h+-1;f=f+1|0}return}function Yk(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[(c[e+16>>2]|0)+212>>2]|0)+16|0;e=c[k>>2]|0;j=f+1|0;if((j|0)!=(a[e+273>>0]|0)){i=b[e+236>>1]|0;while(1){h=b[e+238>>1]|0;if((i|0)>(h<<16>>16|0))break;ni(d,c[(c[e+268>>2]|0)+(i<<2)>>2]|0);i=i+1|0;e=c[k>>2]|0}i=b[e+236>>1]|0;while(1){if((i|0)>(h<<16>>16|0))break;oi(g,c[(c[e+268>>2]|0)+(i<<2)>>2]|0,f);d=c[k>>2]|0;i=i+1|0;h=b[d+238>>1]|0;e=d}a[e+273>>0]=j}return}function Zk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=eo(b)|0;while(1){if(!h)break;c[(c[h+16>>2]|0)+212>>2]=0;g=Qm(b,h)|0;while(1){if(!g)break;d=c[(c[g+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;c[f+212>>2]=0;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Sm(b,g)|0}h=fo(b,h)|0}_k(b);return}function _k(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;_k(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}i=eo(b)|0;while(1){if(!i)break;d=(c[i+16>>2]|0)+212|0;if(!(c[d>>2]|0))c[d>>2]=b;h=Qm(b,i)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=c[d>>2]|0;g=d+-48|0;f=c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;f=f+212|0;if(!(c[f>>2]|0)){c[f>>2]=b;e=c[d>>2]|0}d=c[c[(c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);h=Sm(b,h)|0}i=fo(b,i)|0}return}function $k(a){a=a|0;var b=0,c=0,d=0;d=jB(a)|0;c=eo(a)|0;while(1){if(!c)break;b=Qm(a,c)|0;while(1){if(!b)break;al(b,d);b=Sm(a,b)|0}c=fo(a,c)|0}Ll(d)|0;return}function al(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+320|0;H=M+296|0;G=M+280|0;x=M+136|0;w=M+120|0;n=M+104|0;i=M+88|0;f=M+80|0;E=M+16|0;z=M;j=M+264|0;k=M+248|0;m=M+232|0;o=M+216|0;A=M+200|0;B=M+184|0;y=M+168|0;D=M+152|0;g=bl(Jm(a,80645)|0,b)|0;q=bl(Jm(a,80651)|0,b)|0;r=(q|0)!=0;b=(g|0)!=0;do if(b|r?(L=a+16|0,e=c[(c[L>>2]|0)+8>>2]|0,e|0):0){if((c[e+4>>2]|0)>1){K=En(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)|0;L=En(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)|0;c[f>>2]=K;c[f+4>>2]=L;$l(0,80657,f)|0;break}I=c[e>>2]|0;e=c[I+4>>2]|0;p=c[a>>2]&3;s=a+-48|0;t=c[((p|0)==2?a:s)+40>>2]|0;u=a+48|0;p=c[((p|0)==3?a:u)+40>>2]|0;J=xw(48)|0;v=I+12|0;c[J+12>>2]=c[v>>2];C=I+8|0;c[J+8>>2]=c[C>>2];do if(b){h=(c[g+16>>2]|0)+16|0;g=(c[t+16>>2]|0)+16|0;c[H>>2]=c[g>>2];c[H+4>>2]=c[g+4>>2];c[H+8>>2]=c[g+8>>2];c[H+12>>2]=c[g+12>>2];if(!(cl(H,h)|0)){o=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80645)|0;c[i>>2]=o;c[i+4>>2]=F;c[i+8>>2]=K;$l(0,80698,i)|0;K=26;break}b=c[I>>2]|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(cl(H,h)|0){F=(c[p+16>>2]|0)+16|0;c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[H+8>>2]=c[F+8>>2];c[H+12>>2]=c[F+12>>2];if(cl(H,h)|0){o=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80645)|0;c[n>>2]=o;c[n+4>>2]=F;c[n+8>>2]=K;$l(0,80741,n)|0;K=26;break}if(!(c[C>>2]|0))ma(80783,80794,369,80805);o=I+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];dl(z,G,H,h);F=(c[I>>2]|0)+48|0;c[F>>2]=c[z>>2];c[F+4>>2]=c[z+4>>2];c[F+8>>2]=c[z+8>>2];c[F+12>>2]=c[z+12>>2];F=(c[I>>2]|0)+16|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];el(j,G,H);c[F>>2]=c[j>>2];c[F+4>>2]=c[j+4>>2];c[F+8>>2]=c[j+8>>2];c[F+12>>2]=c[j+12>>2];F=c[I>>2]|0;b=F+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];el(k,G,H);c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];F=c[I>>2]|0;b=F+32|0;F=F+16|0;c[G>>2]=c[F>>2];c[G+4>>2]=c[F+4>>2];c[G+8>>2]=c[F+8>>2];c[G+12>>2]=c[F+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];el(m,G,H);c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2];b=c[v>>2]|0;if(!b){F=3;break}F=(Ot(a,c[I>>2]|0,0,0,J,b)|0)+3|0;break}g=e+-1|0;b=0;while(1){if((b|0)>=(g|0))break;if(fl((c[I>>2]|0)+(b<<4)|0,h)|0)break;b=b+3|0}e=c[v>>2]|0;f=(e|0)!=0;if((b|0)==(g|0))if(f){F=J+32|0;m=I+32|0;n=(c[I>>2]|0)+(g<<4)|0;c[G>>2]=c[m>>2];c[G+4>>2]=c[m+4>>2];c[G+8>>2]=c[m+8>>2];c[G+12>>2]=c[m+12>>2];c[H>>2]=c[n>>2];c[H+4>>2]=c[n+4>>2];c[H+8>>2]=c[n+8>>2];c[H+12>>2]=c[n+12>>2];dl(o,G,H,h);c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=g;break}else ma(80822,80794,387,80805);else{if(f)b=Ot(a,c[I>>2]|0,0,b,J,e)|0;F=b+3|0;break}}else K=26;while(0);if((K|0)==26){b=e+-1|0;if(!(c[v>>2]|0))F=b;else{F=J+32|0;o=I+32|0;c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=b}}do if(r){f=(c[q+16>>2]|0)+16|0;r=(c[p+16>>2]|0)+16|0;c[H>>2]=c[r>>2];c[H+4>>2]=c[r+4>>2];c[H+8>>2]=c[r+8>>2];c[H+12>>2]=c[r+12>>2];if(!(cl(H,f)|0)){G=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80651)|0;c[w>>2]=G;c[w+4>>2]=H;c[w+8>>2]=K;$l(0,80833,w)|0;K=52;break}b=(c[I>>2]|0)+(F<<4)|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(cl(H,f)|0){E=(c[t+16>>2]|0)+16|0;c[H>>2]=c[E>>2];c[H+4>>2]=c[E+4>>2];c[H+8>>2]=c[E+8>>2];c[H+12>>2]=c[E+12>>2];if(cl(H,f)|0){G=En(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=En(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=Jm(a,80651)|0;c[x>>2]=G;c[x+4>>2]=H;c[x+8>>2]=K;$l(0,80876,x)|0;K=52;break}if(!(c[v>>2]|0))ma(80822,80794,429,80805);x=J+32|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];dl(z,G,H,f);d=F+-3|0;E=(c[I>>2]|0)+(d<<4)|0;c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2];E=F+-1|0;b=(c[I>>2]|0)+(E<<4)|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];el(A,G,H);c[b>>2]=c[A>>2];c[b+4>>2]=c[A+4>>2];c[b+8>>2]=c[A+8>>2];c[b+12>>2]=c[A+12>>2];b=c[I>>2]|0;D=b+(F<<4)|0;b=b+(E<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];el(B,G,H);c[D>>2]=c[B>>2];c[D+4>>2]=c[B+4>>2];c[D+8>>2]=c[B+8>>2];c[D+12>>2]=c[B+12>>2];D=c[I>>2]|0;b=D+(F+-2<<4)|0;E=D+(E<<4)|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];el(y,G,H);c[b>>2]=c[y>>2];c[b+4>>2]=c[y+4>>2];c[b+8>>2]=c[y+8>>2];c[b+12>>2]=c[y+12>>2];b=c[C>>2]|0;if(!b)break;d=Qt(a,c[I>>2]|0,d,d,J,b)|0;break}e=F;while(1){if((e|0)>0)b=0;else break;while(1){if((b|0)==4)break;B=E+(b<<4)|0;A=(c[I>>2]|0)+(e-b<<4)|0;c[B>>2]=c[A>>2];c[B+4>>2]=c[A+4>>2];c[B+8>>2]=c[A+8>>2];c[B+12>>2]=c[A+12>>2];b=b+1|0}if(fl(E,f)|0){b=0;K=43;break}e=e+-3|0}a:do if((K|0)==43)while(1){K=0;if((b|0)==4)break a;K=(c[I>>2]|0)+(e-b<<4)|0;B=E+(b<<4)|0;c[K>>2]=c[B>>2];c[K+4>>2]=c[B+4>>2];c[K+8>>2]=c[B+8>>2];c[K+12>>2]=c[B+12>>2];b=b+1|0;K=43}while(0);if(e|0){d=e+-3|0;b=c[C>>2]|0;if(!b)break;d=Qt(a,c[I>>2]|0,d,F+-3|0,J,b)|0;break}if(!(c[C>>2]|0))ma(80783,80794,452,80805);else{d=J+16|0;E=I+16|0;a=c[I>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[a>>2];c[H+4>>2]=c[a+4>>2];c[H+8>>2]=c[a+8>>2];c[H+12>>2]=c[a+12>>2];dl(D,G,H,f);c[d>>2]=c[D>>2];c[d+4>>2]=c[D+4>>2];c[d+8>>2]=c[D+8>>2];c[d+12>>2]=c[D+12>>2];d=0;break}}else K=52;while(0);if((K|0)==52)if(!(c[C>>2]|0))d=0;else{d=J+16|0;K=I+16|0;c[d>>2]=c[K>>2];c[d+4>>2]=c[K+4>>2];c[d+8>>2]=c[K+8>>2];c[d+12>>2]=c[K+12>>2];d=0}b=F-d+1|0;e=J+4|0;c[e>>2]=b;c[J>>2]=xw(b<<4)|0;b=0;while(1){if((b|0)>=(c[e>>2]|0))break;K=(c[J>>2]|0)+(b<<4)|0;a=(c[I>>2]|0)+(d<<4)|0;c[K>>2]=c[a>>2];c[K+4>>2]=c[a+4>>2];c[K+8>>2]=c[a+8>>2];c[K+12>>2]=c[a+12>>2];d=d+1|0;b=b+1|0}$I(c[I>>2]|0);$I(I);c[c[(c[L>>2]|0)+8>>2]>>2]=J}while(0);l=M;return}function bl(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((b|0)!=0?(a[b>>0]|0)!=0:0){d=kB(d,b)|0;if(!d){c[e>>2]=b;$l(0,80996,e)|0;d=0}}else d=0;l=f;return d|0}function cl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a>>3];if((+h[b>>3]<=d?d<=+h[b+16>>3]:0)?(c=+h[a+8>>3],+h[b+8>>3]<=c):0)a=c<=+h[b+24>>3]&1;else a=0;return a|0}function dl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0;C=l;l=l+464|0;n=C+48|0;B=C+32|0;u=C+16|0;v=C;w=C+364|0;x=C+264|0;z=C+164|0;A=C+64|0;q=+h[b>>3];r=+h[b+8>>3];s=+h[d>>3];t=+h[d+8>>3];c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];c[u+8>>2]=c[e+8>>2];c[u+12>>2]=c[e+12>>2];e=e+16|0;c[v>>2]=c[e>>2];c[v+4>>2]=c[e+4>>2];c[v+8>>2]=c[e+8>>2];c[v+12>>2]=c[e+12>>2];k=+h[u>>3];if((s<k?(f=r+ +(~~((k-q)*(r-t)/(q-s))|0),f>=+h[u+8>>3]):0)?f<=+h[v+8>>3]:0){o=f;p=k}else i=4;do if((i|0)==4){j=+h[v>>3];if(s>j){g=r+ +(~~((j-q)*(r-t)/(q-s))|0);f=+h[u+8>>3];if(g>=f?g<=+h[v+8>>3]:0){o=g;p=j;break}}else f=+h[u+8>>3];if(t<f?(m=q+ +(~~((f-r)*(q-s)/(r-t))|0),!(!(m>=k)|!(m<=j))):0){o=f;p=m;break}f=+h[v+8>>3];if(t>f?(y=q+ +(~~((f-r)*(q-s)/(r-t))|0),!(!(y>=k)|!(y<=j))):0){o=f;p=y;break};c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];w=kl(n,w)|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];x=kl(n,x)|0;c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];z=kl(n,z)|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];A=kl(n,A)|0;c[B>>2]=w;c[B+4>>2]=x;c[B+8>>2]=z;c[B+12>>2]=A;$l(1,80918,B)|0;ma(123205,80794,78,80970)}while(0);h[a>>3]=p;h[a+8>>3]=o;l=C;return}function el(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function fl(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+80|0;j=m+16|0;k=m;e=0;while(1){if((e|0)==4)break;i=j+(e<<4)|0;g=a+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];e=e+1|0}e=b+8|0;i=b+24|0;d=+gl(a,0.0,1.0,+h[b>>3],+h[e>>3],+h[i>>3]);if(d>=0.0&d<2.0)QA(k,j,3,d,a,0);else d=2.0;g=b+16|0;f=+gl(a,0.0,d>1.0?1.0:d,+h[g>>3],+h[e>>3],+h[i>>3]);if(f>=0.0&f<d){QA(k,j,3,f,a,0);d=f}f=+hl(a,0.0,d>1.0?1.0:d,+h[e>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f<d){QA(k,j,3,f,a,0);d=f}f=+hl(a,0.0,d>1.0?1.0:d,+h[i>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f<d){QA(k,j,3,f,a,0);d=f}l=m;return d<2.0|0}function gl(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m+80|0;k=m+16|0;i=m;a:do if(!(b==c)){switch(jl(a,d)|0){case 0:{b=-1.0;break a}case 1:{if(+B(+(+h[a+48>>3]-d))<=.005){b=+h[a+56>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}QA(i,a,3,.5,j,k);g=(c+b)*.5;b=+gl(j,b,g,d,e,f);if(!(b>=0.0))b=+gl(k,g,c,d,e,f)}while(0);l=m;return +b}function hl(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m+80|0;k=m+16|0;i=m;a:do if(!(b==c)){switch(il(a,d)|0){case 0:{b=-1.0;break a}case 1:{if(+B(+(+h[a+56>>3]-d))<=.005){b=+h[a+48>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}QA(i,a,3,.5,j,k);g=(c+b)*.5;b=+hl(j,b,g,d,e,f);if(!(b>=0.0))b=+hl(k,g,c,d,e,f)}while(0);l=m;return +b}function il(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a+8>>3];e=f<b?-1:f>b&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)+8>>3];i=f<b?-1:f>b&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function jl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a>>3];e=f<b?-1:f>b&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)>>3];i=f<b?-1:f>b&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function kl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=l;l=l+16|0;d=c;e=+h[a+8>>3];h[d>>3]=+h[a>>3];h[d+8>>3]=e;qL(b,80984,d)|0;l=c;return b|0}function ll(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;s=v;u=4;t=_I(40)|0;c[t>>2]=0;r=a+16|0;e=c[r>>2]|0;a:do if(((b[e+238>>1]|0)-(b[e+236>>1]|0)|0)>=2){m=1;d=e;e=c[e+196>>2]|0;b:while(1){n=m+1|0;if(!(c[e+(n<<6)>>2]|0)){q=15;break}else k=0;while(1){h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0)){m=n;continue b}j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=_(18,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,u|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break b}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=$(17,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,t|0,u|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break b}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;ka(6,a|0,m|0,k|0,i|0,1);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break b}}}e=c[r>>2]|0;k=k+1|0;d=e;e=c[e+196>>2]|0}}c:do if((q|0)==15){while(1){if((m|0)>0)k=0;else break;while(1){e=c[d+196>>2]|0;h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0))break;j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=_(19,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,t|0,u|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break c}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=$(18,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,t|0,u|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break c}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;ka(6,a|0,m|0,k|0,i|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break c}}}k=k+1|0;d=c[r>>2]|0}m=m+-1|0;q=15}t=SN(167760,1,t|0,u|0)|0;u=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else d=0}while(0);d:while(1){if(d){o=0;aa(11,3,81024,s|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}else break}else f=1;while(1){d=c[r>>2]|0;if((f|0)>(c[d+180>>2]|0))break a;o=0;fa(85,c[(c[d+184>>2]|0)+(f<<2)>>2]|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=TN(c[d>>2]|0,t|0,u|0)|0;if(!e)Ua(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue d}f=f+1|0}}}while(0);$I(t|0);l=v;return}function ml(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+176>>2]|0)==1:0)?(c[b+184>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function nl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+172>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+172>>2]>>2]|0;if(((ml(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0):0)?(tl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+16|0;f=g;a=(c[e+16>>2]|0)+16|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(Xf(g,h)|0)==0&1}else a=0;l=i;return a|0}function ol(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=a+16|0;q=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(d<<2)>>2]|0;p=d+1|0;m=(f|0)==1;n=q+16|0;l=p;while(1){if((l|0)>(e|0)){g=e;s=p;break}o=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(l<<2)>>2]|0;k=o+16|0;a:do if(m)while(1){d=c[k>>2]|0;j=c[c[d+180>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+180>>2]|0;i=j+-48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=8;break}if((c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==8){r=0;d=bh(q,c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0,j)|0}while(1){f=c[c[(c[k>>2]|0)+172>>2]>>2]|0;if(!f)break;jh(f,d);Yg(f)}Yg(j)}else while(1){d=c[k>>2]|0;j=c[c[d+172>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+172>>2]|0;i=j+48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=17;break}if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==17){r=0;d=bh(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0,q,j)|0}while(1){f=c[c[(c[k>>2]|0)+180>>2]>>2]|0;if(!f)break;jh(f,d);Yg(f)}Yg(j)}while(0);if((c[d+176>>2]|0)!=(0-(c[d+184>>2]|0)|0)){r=23;break}eh(a,o);l=l+1|0}if((r|0)==23)ma(81160,81204,115,81211);while(1){g=g+1|0;d=c[(c[t>>2]|0)+196>>2]|0;f=d+(b<<6)|0;if((g|0)>=(c[f>>2]|0))break;e=c[d+(b<<6)+4>>2]|0;r=c[e+(g<<2)>>2]|0;c[e+(s<<2)>>2]=r;c[(c[r+16>>2]|0)+236>>2]=s;s=s+1|0}c[f>>2]=s;c[(c[d+(b<<6)+4>>2]|0)+(s<<2)>>2]=0;return}function pl(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+184>>2]|0)==1:0)?(c[b+176>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function ql(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+180>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+180>>2]>>2]|0;if(((pl(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0):0)?(tl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+56|0;f=g;a=(c[e+16>>2]|0)+56|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(Xf(g,h)|0)==0&1}else a=0;l=i;return a|0}function rl(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;p=r+16|0;o=r;m=d+16|0;f=c[m>>2]|0;e=b[f+236>>1]|0;while(1){if((e|0)>(b[f+238>>1]|0))break;c[(c[f+268>>2]|0)+(e<<2)>>2]=0;e=e+1|0;f=c[m>>2]|0}jj(d);j=eo(d)|0;while(1){if(!j)break;sl(d,j);i=Qm(d,j)|0;while(1){if(!i)break;else f=i;while(1){e=c[(c[f+16>>2]|0)+172>>2]|0;if(!e)break;else f=e}h=i+-48|0;while(1){e=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:h)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;sl(d,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}i=Sm(d,i)|0}j=fo(d,j)|0}e=c[m>>2]|0;i=b[e+236>>1]|0;while(1){if((i|0)>(b[e+238>>1]|0)){k=1;n=e;break}e=c[(c[e+268>>2]|0)+(i<<2)>>2]|0;j=c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;f=e+16|0;if((c[j+(c[(c[f>>2]|0)+236>>2]<<2)>>2]|0)!=(e|0)){q=17;break}h=c[(c[(c[(Wf(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;e=c[m>>2]|0;f=c[e+196>>2]|0;c[f+(i<<6)+4>>2]=h+(c[(c[(c[(c[e+268>>2]|0)+(i<<2)>>2]|0)+16>>2]|0)+236>>2]<<2);e=-1;h=0;a:while(1){if((h|0)>=(c[f+(i<<6)>>2]|0))break;f=c[(c[f+(i<<6)+4>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;b:do if(!(a[g+156>>0]|0))if(!(Co(d,f)|0))break a;else e=h;else{f=c[c[g+172>>2]>>2]|0;while(1){if(!f)break b;g=c[(c[f+16>>2]|0)+116>>2]|0;if(!g)break;else f=g}if(Co(d,c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)|0){j=(Co(d,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)|0)==0;e=j?e:h}}while(0);h=h+1|0;f=c[(c[m>>2]|0)+196>>2]|0}if((e|0)==-1){c[p>>2]=En(d)|0;c[p+4>>2]=i;$l(0,81124,p)|0}j=c[m>>2]|0;c[(c[j+196>>2]|0)+(i<<6)>>2]=e+1;i=i+1|0;e=j}if((q|0)==17){p=En(e)|0;q=c[(c[f>>2]|0)+236>>2]|0;c[o>>2]=p;c[o+4>>2]=q;c[o+8>>2]=i;$l(1,81066,o)|0;Ua(167760,1)}while(1){if((k|0)>(c[n+180>>2]|0))break;rl(c[(c[n+184>>2]|0)+(k<<2)>>2]|0);k=k+1|0;n=c[m>>2]|0}l=r;return}function sl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b+16>>2]|0;a=(c[(c[a+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)|0;e=c[a>>2]|0;if(!((e|0)!=0?(c[(c[e+16>>2]|0)+236>>2]|0)<=(c[d+236>>2]|0):0))c[a>>2]=b;return}function tl(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=c[b+16>>2]|0;if(!(a[f+112>>0]|0))break;b=c[f+116>>2]|0}while(1){e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;d=c[e+116>>2]|0}if((a[f+153>>0]|0)==0?(a[e+153>>0]|0)==0:0){f=c[d>>2]&3;e=c[b>>2]&3;b=(O((c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0,(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)|0)>0&1}else b=0;return b|0}function ul(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+544|0;j=k+528|0;vl(j,k+512|0,k);e=(a[173898]|0)+1<<24>>24;a[173898]=e<<24>>24==0?1:e;e=c[b+16>>2]|0;c[e+220>>2]=0;c[e+232>>2]=0;e=(d|0)>0;d=eo(b)|0;while(1){if(!d)break;if(e?(h=c[d+16>>2]|0,i=c[h+212>>2]|0,(i|0)!=0):0){g=c[(c[(c[i+16>>2]|0)+268>>2]|0)+(c[h+232>>2]<<2)>>2]|0;f=7}else f=6;if((f|0)==6?(f=0,(d|0)==(LA(d)|0)):0){g=d;f=7}if((f|0)==7?(0,(a[(c[g+16>>2]|0)+157>>0]|0)!=(a[173898]|0)):0){wl(b);xl(j,b,g);yl(b)}d=fo(b,d)|0}zl(j);l=k;return}function vl(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=d;c[b+4>>2]=d+512;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;return}function wl(a){a=a|0;c[(c[a+16>>2]|0)+192>>2]=0;c[41979]=0;return}function xl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q;Al(b,e);k=p+8|0;m=p+16|0;n=p+24|0;a:while(1){o=Bl(b)|0;if(!o)break;e=o+16|0;if((a[(c[e>>2]|0)+157>>0]|0)==(a[173898]|0))continue;Cl(d,o);h=c[e>>2]|0;g=h+180|0;j=c[g+4>>2]|0;i=p;c[i>>2]=c[g>>2];c[i+4>>2]=j;i=h+172|0;j=c[i+4>>2]|0;g=k;c[g>>2]=c[i>>2];c[g+4>>2]=j;g=h+188|0;j=c[g+4>>2]|0;i=m;c[i>>2]=c[g>>2];c[i+4>>2]=j;h=h+196|0;i=c[h+4>>2]|0;j=n;c[j>>2]=c[h>>2];c[j+4>>2]=i;j=3;while(1){if((j|0)<=-1)continue a;e=c[p+(j<<3)>>2]|0;b:do if(e|0){i=(c[p+(j<<3)+4>>2]|0)+-1|0;h=e+(i<<2)|0;while(1){if((i|0)<=-1)break b;f=c[h>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(o|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;if((a[(c[e+16>>2]|0)+157>>0]|0)!=(a[173898]|0)?(e|0)==(LA(e)|0):0)Al(b,e);h=h+-4|0;i=i+-1|0}}while(0);j=j+-1|0}}l=q;return}function yl(a){a=a|0;var b=0,d=0,e=0,f=0;d=a+16|0;b=c[d>>2]|0;f=b+220|0;e=c[f>>2]|0;a=e+1|0;c[f>>2]=a;b=c[b+216>>2]|0;if(!b)a=xw(a<<2)|0;else a=zw(b,a<<2)|0;f=c[d>>2]|0;c[f+216>>2]=a;c[a+(e<<2)>>2]=c[f+192>>2];return}function zl(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;$I(c[a>>2]|0);$I(a);a=b}return}function Al(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;h=k+8|0;g=k;j=b+8|0;f=c[j>>2]|0;i=b+4|0;b=c[i>>2]|0;if((f|0)==(c[b+4>>2]|0)){f=c[b+12>>2]|0;if(!f){f=ww(16)|0;if(!f)$l(1,83988,g)|0;c[f+8>>2]=c[i>>2];c[f+12>>2]=0;b=ww(4e6)|0;c[f>>2]=b;if(!b){$l(1,81224,h)|0;b=c[f>>2]|0}c[f+4>>2]=b+4e6;c[(c[i>>2]|0)+12>>2]=f}c[i>>2]=f;f=c[f>>2]|0;c[j>>2]=f}a[(c[e+16>>2]|0)+157>>0]=(d[173898]|0)+1;c[j>>2]=f+4;c[f>>2]=e;l=k;return}function Bl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function Cl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[b+16>>2]|0;g=f+232|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+16>>2]|0;a[g+157>>0]=a[173898]|0;b=c[41979]|0;e=g+168|0;if(!b){c[e>>2]=0;c[f+192>>2]=d}else{c[e>>2]=b;c[(c[b+16>>2]|0)+164>>2]=d}c[41979]=d;c[g+164>>2]=0;return}function Dl(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;m=b+16|0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+188>>2]|0;a:do if(!e)f=0;else{f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e){f=0;break a}El(e);d=c[g>>2]|0;f=f+1|0;e=c[d+188>>2]|0}}while(0);while(1){if((f|0)>=(c[d+208>>2]|0))break;e=c[(c[d+204>>2]|0)+(f<<2)>>2]|0;l=c[e>>2]&3;if((c[(c[(c[((l|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)==(c[(c[(c[((l|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)){El(e);d=c[g>>2]|0}f=f+1|0}d=d+164|0}l=c[m>>2]|0;d=c[l+196>>2]|0;if(!((c[d+56>>2]|0)==0?(c[l+180>>2]|0)<=0:0))i=13;b:do if((i|0)==13){i=c[d+4>>2]|0;g=0;c:while(1){d=c[i+(g<<2)>>2]|0;if(!d)break b;e=c[(c[d+16>>2]|0)+196>>2]|0;d=0;while(1){f=c[e+(d<<2)>>2]|0;if(!f)break;l=c[f+16>>2]|0;if(c[l+96>>2]|0?(a[l+113>>0]|0)==0:0)break c;d=d+1|0}g=g+1|0}Fl(b)}while(0);vi(b);e=0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;l=d+16|0;d=c[l>>2]|0;f=c[d+188>>2]|0;d:do if(f){k=0;while(1){g=c[f+(k<<2)>>2]|0;if(!g){k=0;break}i=c[g+16>>2]|0;j=c[i+96>>2]|0;do if(j)if(!(a[i+113>>0]|0)){Gl(g);f=c[l>>2]|0;e=1;d=f;f=c[f+188>>2]|0;break}else{h[i+136>>3]=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?j+24|0:j+32|0)>>3];break}while(0);k=k+1|0}while(1){if((k|0)>=(c[d+208>>2]|0))break d;i=c[(c[d+204>>2]|0)+(k<<2)>>2]|0;j=c[i>>2]&3;g=c[((j|0)==3?i:i+48|0)+40>>2]|0;j=c[((j|0)==2?i:i+-48|0)+40>>2]|0;do if(!((g|0)==(j|0)?1:(c[(c[g+16>>2]|0)+232>>2]|0)!=(c[(c[j+16>>2]|0)+232>>2]|0))){f=i;do{j=c[f+16>>2]|0;f=c[j+172>>2]|0}while((f|0)!=0);f=a[j+113>>0]|0;g=c[i+16>>2]|0;a[g+113>>0]=f;g=c[g+96>>2]|0;if(g)if(!(f<<24>>24)){Gl(i);e=1;d=c[l>>2]|0;break}else{o=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?g+24|0:g+32|0)>>3];j=j+136|0;n=+h[j>>3];h[j>>3]=o>n?o:n;break}}while(0);k=k+1|0}}while(0);d=d+164|0}if(e|0){oh(b);Ch(b)}return e|0}function El(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[b>>2]&3;i=c[((d|0)==3?b:b+48|0)+40>>2]|0;f=i+16|0;g=c[(c[f>>2]|0)+236>>2]|0;d=c[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;h=(g|0)<(d|0);e=h?d:g;i=c[(c[(Wf(i)|0)+16>>2]|0)+196>>2]|0;f=i+(c[(c[f>>2]|0)+232>>2]<<6)+4|0;d=h?g:d;a:while(1){d=d+1|0;if((d|0)>=(e|0))break;g=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;switch(a[g+156>>0]|0){case 0:break a;case 1:break;default:continue a}if(c[g+104>>2]|0)break}if((d|0)==(e|0))do{i=c[b+16>>2]|0;a[i+113>>0]=1;b=c[i+172>>2]|0}while((b|0)!=0);return}function Fl(a){a=a|0;var d=0,e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;if(b[a+236>>1]|0)ma(81281,81264,190,81300);d=(b[a+238>>1]|0)+3|0;a=c[a+196>>2]|0;if(!a)a=xw(d<<6)|0;else a=zw(a,d<<6)|0;d=a+64|0;a=c[g>>2]|0;c[a+196>>2]=d;a=b[a+238>>1]|0;while(1){if((a|0)<=-1)break;f=a+-1|0;e=d+(a<<6)|0;a=d+(f<<6)|0;d=e+64|0;do{c[e>>2]=c[a>>2];e=e+4|0;a=a+4|0}while((e|0)<(d|0));a=f;d=c[(c[g>>2]|0)+196>>2]|0}c[d+(a<<6)+8>>2]=0;c[d+(a<<6)>>2]=0;e=ww(8)|0;g=c[g>>2]|0;f=c[g+196>>2]|0;c[f+(a<<6)+12>>2]=e;c[f+(a<<6)+4>>2]=e;c[f+(a<<6)+56>>2]=0;h[f+(a<<6)+24>>3]=1.0;h[f+(a<<6)+16>>3]=1.0;h[f+(a<<6)+40>>3]=1.0;h[f+(a<<6)+32>>3]=1.0;g=g+236|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;return}function Gl(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;j=b+16|0;if(c[(c[j>>2]|0)+96>>2]|0){m=b+48|0;k=Wf(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)|0;d=c[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0;l=Hl(k,b)|0;n=k+16|0;e=c[n>>2]|0;g=c[e+196>>2]|0;o=d+-1|0;i=c[c[g+(o<<6)+4>>2]>>2]|0;if(!i)f=+h[g+(d<<6)+24>>3]+ +h[(c[(c[c[g+(d<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +(c[e+252>>2]|0);else f=+h[(c[i+16>>2]|0)+24>>3]-+h[g+(o<<6)+16>>3];d=Il(k,o,l)|0;k=c[(c[j>>2]|0)+96>>2]|0;q=+h[k+24>>3];p=+h[k+32>>3];j=(c[(c[n>>2]|0)+116>>2]&1|0)==0;r=j?p:q;g=d+16|0;e=c[g>>2]|0;h[e+80>>3]=r;l=~~(r*.5);p=(j?q:p)*.5;h[e+96>>3]=p;h[e+88>>3]=p;c[e+104>>2]=k;h[e+24>>3]=+(l+~~f|0);e=bh(d,c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0,b)|0;e=c[e+16>>2]|0;h[e+16>>3]=-+h[(c[g>>2]|0)+88>>3];h[e+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+96>>3];a[e+112>>0]=4;e=b+-48|0;d=bh(d,c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0,b)|0;g=c[g>>2]|0;d=c[d+16>>2]|0;h[d+16>>3]=+h[g+96>>3];h[d+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+88>>3];a[d+112>>0]=4;d=c[(c[n>>2]|0)+196>>2]|0;e=d+(o<<6)+16|0;f=+(l|0);if(+h[e>>3]<f)h[e>>3]=f;d=d+(o<<6)+24|0;if(+h[d>>3]<f)h[d>>3]=f;c[g+112>>2]=b}return}function Hl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n+8|0;f=n+4|0;g=n;d=c[b>>2]&3;e=c[((d|0)==3?b:b+48|0)+40>>2]|0;k=(c[(c[e+16>>2]|0)+232>>2]|0)+-1|0;a=c[(c[a+16>>2]|0)+196>>2]|0;h=c[a+(k<<6)+4>>2]|0;a=c[a+(k<<6)>>2]|0;k=j+8|0;c[k>>2]=-1;c[j>>2]=-1;m=j+12|0;c[m>>2]=a;i=j+4|0;c[i>>2]=a;Jl(e,c[((d|0)==2?b:b+-48|0)+40>>2]|0,f,g);f=c[f>>2]|0;g=c[g>>2]|0;d=0;e=a;b=-1;while(1){if((d|0)>=(e|0))break;e=e+-1|0;Kl(c[h+(d<<2)>>2]|0,j,f,g);if((d|0)!=(e|0))Kl(c[h+(e<<2)>>2]|0,j,f,g);a=c[i>>2]|0;b=c[j>>2]|0;if((a-b|0)<2)break;else d=d+1|0}if((b|0)>(a|0))a=(c[m>>2]|0)+(c[k>>2]|0)|0;else a=a+b|0;l=n;return (a+1|0)/2|0|0}function Il(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+16|0;f=c[(c[g>>2]|0)+196>>2]|0;e=f+(b<<6)|0;f=c[f+(b<<6)+4>>2]|0;if(!f)f=xw((c[e>>2]<<2)+8|0)|0;else f=zw(f,(c[e>>2]<<2)+8|0)|0;e=c[(c[g>>2]|0)+196>>2]|0;c[e+(b<<6)+4>>2]=f;e=c[e+(b<<6)>>2]|0;while(1){if((e|0)<=(d|0))break;h=e+-1|0;i=c[f+(h<<2)>>2]|0;c[f+(e<<2)>>2]=i;i=(c[i+16>>2]|0)+236|0;c[i>>2]=(c[i>>2]|0)+1;e=h}h=gh(a)|0;i=f+(d<<2)|0;c[i>>2]=h;h=c[h+16>>2]|0;c[h+236>>2]=d;c[h+232>>2]=b;g=(c[(c[g>>2]|0)+196>>2]|0)+(b<<6)|0;h=(c[g>>2]|0)+1|0;c[g>>2]=h;c[f+(h<<2)>>2]=0;return c[i>>2]|0}function Jl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a=c[(c[a+16>>2]|0)+236>>2]|0;b=c[(c[b+16>>2]|0)+236>>2]|0;f=(a|0)>(b|0);c[d>>2]=f?b:a;c[e>>2]=f?a:b;return}function Kl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;h=m+4|0;g=m;b=c[b+16>>2]|0;do if((a[b+156>>0]|0)==1){k=c[b+236>>2]|0;if(c[b+176>>2]|0){i=c[b+180>>2]|0;b=0;g=0;h=0;while(1){j=c[i+(h<<2)>>2]|0;if(!j)break;n=c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=(n|0)>(e|0);b=j?((n|0)<(f|0)?b:1):b;g=j?g:1;h=h+1|0}if(g<<24>>24!=0&b<<24>>24==0){c[d>>2]=k+1;break}if(!(g<<24>>24==0&b<<24>>24!=0))break;c[d+4>>2]=k+-1;break}if((c[b+184>>2]|0)!=2)ma(81244,81264,63,81271);i=c[b+180>>2]|0;n=c[i>>2]|0;i=c[i+4>>2]|0;Jl(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0,c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,h,g);i=c[g>>2]|0;if((i|0)<=(e|0)){c[d>>2]=k;c[d+8>>2]=k;break}b=c[h>>2]|0;if((b|0)>=(f|0)){c[d+4>>2]=k;c[d+12>>2]=k;break}g=(b|0)<(e|0);h=(i|0)>(f|0);if(!(h&g)){if(!(!g?!((i|0)<(f|0)&(b|0)==(e|0)):0))c[d+8>>2]=k;if(!h?!((i|0)==(f|0)&(b|0)>(e|0)):0)break;c[d+12>>2]=k}}while(0);l=m;return}function Ll(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;do if((a|0)!=0?(c[a+24>>2]|0)<=0:0){h=c[a+4>>2]|0;g=h+32|0;b=c[g>>2]|0;if(b){b=cb[b&31](a,2,0,h)|0;if((b|0)<0){b=-1;break}}else b=0;if(c[a+28>>2]|0)Xl(a,0)|0;f=(b|0)==0;if(f){bb[c[c[a+16>>2]>>2]&31](a,0,64)|0;if((Tl(a)|0)>0){b=-1;break}d=a+8|0;b=c[d>>2]|0;if((c[b+12>>2]|0)>0){e=a+12|0;cb[c[e>>2]&31](a,c[b+8>>2]|0,0,h)|0;b=c[d>>2]|0}else e=a+12|0;cb[c[e>>2]&31](a,b,0,h)|0}b=c[a+20>>2]|0;if(b){if(f&(b|0)==1)cb[c[a+12>>2]&31](a,a,0,h)|0}else $I(a);b=c[g>>2]|0;if(!b)b=0;else{cb[b&31](a,6,0,h)|0;b=0}}else b=-1;while(0);return b|0}function Ml(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=a+4|0;n=c[f>>2]|0;a:do if(n)if(b){m=c[c[a+16>>2]>>2]|0;g=a+8|0;if(c[c[g>>2]>>2]&4096|0)Sl(a,0)|0;e=c[n+32>>2]|0;if(e|0?(cb[e&31](a,3,b,n)|0)<0:0){b=0;break}c[f>>2]=b;e=c[b+28>>2]|0;c[a+12>>2]=(e|0)==0?19:e;e=c[c[g>>2]>>2]|0;if(!(e&112)){do if(!(e&2))if(!(e&3))if(!(d&1))break;else{b=n;break a}else if((d&3|0)==3){b=n;break a}else break;else if(d&2|0){b=n;break a}while(0);h=Pl(a)|0;e=c[g>>2]|0;l=c[e>>2]|0;c[e>>2]=l&-4097;c[e+4>>2]=0;c[e+16>>2]=0;b:do if(l&3|0){l=c[e+8>>2]|0;f=l+(c[e+12>>2]<<2)|0;e=l;while(1){if(e>>>0>=f>>>0)break b;c[e>>2]=0;e=e+4|0}}while(0);i=(d&2|0)==0;j=b+8|0;k=b+4|0;l=b+24|0;while(1){if(!h){b=n;break a}d=c[h>>2]|0;if(i){e=c[j>>2]|0;if((e|0)<0)e=c[h+8>>2]|0;else e=h+(0-e)|0;g=c[k>>2]|0;e=e+(c[b>>2]|0)|0;if((g|0)<0)e=c[e>>2]|0;f=c[l>>2]|0;if(!f)e=Vl(0,e,g)|0;else e=bb[f&31](a,e,b)|0;c[h+4>>2]=e}bb[m&31](a,h,32)|0;h=d}}else b=n}else b=n;else{c[f>>2]=b;n=c[b+28>>2]|0;c[a+12>>2]=(n|0)==0?19:n}while(0);return b|0}function Nl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=(c|0)==0;do if(!b)if(a)a=0;else a=_I(c)|0;else if(a){$I(b);a=0;break}else{a=bJ(b,c)|0;break}while(0);return a|0}function Ol(a){a=a|0;var b=0,d=0,e=0;e=a+8|0;b=c[e>>2]|0;d=c[b>>2]|0;a:do if(!(d&12)){if(!(d&3)){d=b+8|0;a=c[d>>2]|0;c[d>>2]=0;break}a=Pl(a)|0;d=c[e>>2]|0;b=c[d+8>>2]|0;d=b+(c[d+12>>2]<<2)|0;while(1){if(b>>>0>=d>>>0)break a;c[b>>2]=0;b=b+4|0}}else a=c[b+4>>2]|0;while(0);e=c[e>>2]|0;c[e>>2]=c[e>>2]&-4097;c[e+16>>2]=0;c[e+4>>2]=0;return a|0}function Pl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+8|0;a=c[g>>2]|0;b=c[a>>2]|0;if(!(b&4096)){a:do if(!(b&3)){if(b&112|0){a=c[a+8>>2]|0;break}a=c[a+4>>2]|0;if(!a)a=0;else{while(1){b=a+4|0;d=c[b>>2]|0;if(!d){e=a;break}c[b>>2]=c[d>>2];c[d>>2]=a;a=d}while(1){b=c[e>>2]|0;if(!b)break a;d=c[b+4>>2]|0;if(!d){e=b;continue}while(1){c[b+4>>2]=c[d>>2];c[d>>2]=b;b=c[d+4>>2]|0;if(!b)break;else{f=d;d=b;b=f}}c[e>>2]=d;e=d}}}else{e=c[a+8>>2]|0;f=e+(c[a+12>>2]<<2)|0;b=0;a=0;while(1){if(e>>>0>=f>>>0)break a;d=c[e>>2]|0;if(d){if(!b){b=d;a=d}else c[b>>2]=d;while(1){d=c[b>>2]|0;if(!d)break;else b=d}c[e>>2]=b}e=e+4|0}}while(0);g=c[g>>2]|0;c[g+4>>2]=a;c[g>>2]=c[g>>2]|4096}else a=c[a+4>>2]|0;return a|0}function Ql(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=a+8|0;if(c[c[s>>2]>>2]&4096|0)Sl(a,0)|0;r=c[a+4>>2]|0;m=c[r>>2]|0;n=c[r+4>>2]|0;q=r+8|0;u=c[q>>2]|0;o=c[r+20>>2]|0;p=a+20|0;f=c[p>>2]&-32769;c[p>>2]=f;a:do if(!b){if(d&384|0){f=c[s>>2]|0;e=c[f+8>>2]|0;if(!e){e=0;break}if(d&256){e=c[e+4>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}else c[f+4>>2]=e;if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}if(d&4098|0){e=c[s>>2]|0;if(c[e>>2]&144|0){e=0;break}e=c[e+8>>2]|0;if(!e){e=0;break}else{h=e;t=84;break}}if(!(d&64))e=0;else{i=r+16|0;b:do if((c[i>>2]|0)!=0|(u|0)<0){j=a+12|0;k=(u|0)<0;f=0-u|0;e=c[(c[s>>2]|0)+8>>2]|0;while(1){if(!e)break b;g=c[e>>2]|0;h=c[i>>2]|0;if(h|0){if(k)b=c[e+8>>2]|0;else b=e+f|0;ib[h&127](a,b,r)}if((c[q>>2]|0)>=0){e=g;continue}cb[c[j>>2]&31](a,e,0,r)|0;e=g}}while(0);e=c[s>>2]|0;c[e+4>>2]=0;c[e+8>>2]=0;c[(c[s>>2]|0)+16>>2]=0;e=0}}else{if(d&2049|0){g=r+12|0;e=c[g>>2]|0;h=(d&1|0)==0;if(!(h|(e|0)==0)){e=bb[e&31](a,b,r)|0;if(!e){e=0;break}else f=e}else f=b;do if((u|0)>-1)h=f+u|0;else{e=cb[c[a+12>>2]&31](a,0,12,r)|0;if(e|0){c[e+8>>2]=f;h=e;break}if(!(c[g>>2]|0)){e=0;break a}e=c[r+16>>2]|0;if(h|(e|0)==0){e=0;break a}ib[e&127](a,f,r);e=0;break a}while(0);g=c[s>>2]|0;e=c[g>>2]|0;do if(!(e&128)){if(!(e&16))if(!(e&32)){t=51;break}else{t=48;break}f=c[g+4>>2]|0;e=(f|0)!=0;if(!(d&8192)){if(!e){t=48;break}if((f|0)==(c[g+8>>2]|0)){t=48;break}r=f+4|0;a=c[r>>2]|0;c[h+4>>2]=a;c[a>>2]=h;c[h>>2]=f;c[r>>2]=h;break}else{if(!e){t=51;break}e=c[f>>2]|0;if(!e){t=51;break}c[h>>2]=e;c[e+4>>2]=h;c[h+4>>2]=f;c[f>>2]=h;break}}else if(!(d&8192))t=48;else t=51;while(0);if((t|0)==48){e=c[g+8>>2]|0;c[h>>2]=e;if(!e)e=h;else c[h+4>>2]=c[e+4>>2];c[e+4>>2]=h;c[(c[s>>2]|0)+8>>2]=h}else if((t|0)==51){f=g+8|0;e=c[f>>2]|0;if(!e){c[f>>2]=h;e=h}else{r=e+4|0;c[c[r>>2]>>2]=h;c[h+4>>2]=c[r>>2]}c[e+4>>2]=h;c[h>>2]=0}e=c[s>>2]|0;f=e+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1;c[e+4>>2]=h;if((u|0)<0){e=c[h+8>>2]|0;break}else{e=h+(0-u)|0;break}}h=c[s>>2]|0;do if(!(d&512)){e=c[h+4>>2]|0;if(e|0){if((u|0)<0)g=c[e+8>>2]|0;else g=e+(0-u)|0;if((g|0)==(b|0))break}e=b+m|0;if((n|0)<0){b=c[e>>2]|0;t=68}else{b=e;t=68}}else t=68;while(0);if((t|0)==68){g=(u|0)<0;i=(n|0)<0;j=(o|0)==0;k=(n|0)<1;l=0-u|0;e=h+8|0;do{e=c[e>>2]|0;if(!e){e=0;break a}if(g)f=c[e+8>>2]|0;else f=e+l|0;f=f+m|0;if(i)f=c[f>>2]|0;do if(j)if(k){f=yJ(b,f)|0;break}else{f=eL(b,f,n)|0;break}else f=cb[o&31](a,b,f,r)|0;while(0)}while((f|0)!=0);f=c[p>>2]|0}c[p>>2]=f|32768;if(!(d&4098)){do if(!(d&8)){f=c[s>>2]|0;if(!(d&16)){c[f+4>>2]=e;break}if((e|0)==(c[f+8>>2]|0)){c[f+4>>2]=0;e=0;break a}else{e=e+4|0;t=108;break}}else{f=c[s>>2]|0;t=108}while(0);if((t|0)==108){e=c[e>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}else{h=e;t=84}}while(0);if((t|0)==84){e=c[h>>2]|0;if(e){c[e+4>>2]=c[h+4>>2];e=c[h>>2]|0}f=(c[s>>2]|0)+8|0;g=c[f>>2]|0;if((h|0)==(g|0)){c[f>>2]=e;e=c[(c[s>>2]|0)+8>>2]|0;if(e|0)c[e+4>>2]=c[h+4>>2]}else{f=h+4|0;c[c[f>>2]>>2]=e;e=g+4|0;if((h|0)==(c[e>>2]|0))c[e>>2]=c[f>>2]}e=c[s>>2]|0;f=e+4|0;if((h|0)==(c[f>>2]|0))g=c[h>>2]|0;else g=0;c[f>>2]=g;t=e+16|0;c[t>>2]=(c[t>>2]|0)+-1;if((u|0)<0)e=c[h+8>>2]|0;else e=h+(0-u)|0;f=c[r+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))ib[f&127](a,e,r);if((c[q>>2]|0)<0)cb[c[a+12>>2]&31](a,h,0,r)|0}return e|0}function Rl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if((a|0)!=0&(b|0)!=0?(f=_I(40)|0,(f|0)!=0):0){c[f>>2]=0;c[f+16>>2]=0;c[f+4>>2]=0;Ml(f,a,0)|0;d=f+20|0;i=a+32|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;d=c[i>>2]|0;do if(d){c[g>>2]=0;d=cb[d&31](f,1,g,a)|0;if((d|0)>=0)if(d){e=c[g>>2]|0;if(e|0)if(!(c[b+4>>2]&c[e>>2])){d=f;h=12;break}else{d=f;break}d=a+28|0;if(!(c[d>>2]|0)){d=f;h=12}else{$I(f);e=cb[c[d>>2]&31](0,0,40,a)|0;if(!e){d=0;break a}c[e>>2]=0;c[e+16>>2]=0;c[e+4>>2]=0;Ml(e,a,0)|0;c[e+20>>2]=1;c[e+24>>2]=0;c[e+32>>2]=0;c[e+28>>2]=0;d=e;f=e;h=11}}else{d=f;h=11}else{d=f;h=12}}else{d=f;h=11}while(0);if((h|0)==11){e=cb[c[d+12>>2]&31](d,0,28,a)|0;c[g>>2]=e;if(!e){d=f;h=12}else{c[e>>2]=c[b+4>>2];g=e+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0}}if((h|0)==12){$I(d);d=0;break}c[d+8>>2]=e;c[d>>2]=c[b>>2];c[d+16>>2]=b;e=c[i>>2]|0;if(e)cb[e&31](d,5,f,a)|0}else d=0;while(0);l=j;return d|0}function Sl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[c[a+16>>2]>>2]|0;j=a+8|0;g=c[j>>2]|0;h=c[g>>2]|0;d=h&4096;if(!b)if(!d)b=-1;else{e=d;b=c[g+4>>2]|0;i=5}else if(!(c[g+16>>2]|0)){e=0;i=5}else b=-1;a:do if((i|0)==5){c[g>>2]=h&-4097;if(!(h&3)){d=g+4|0;if(!(h&12)){c[d>>2]=0;d=g+8|0}c[d>>2]=b;if(e|0){b=0;break}c[(c[j>>2]|0)+16>>2]=-1;b=0;break}c[g+4>>2]=0;if(!e){c[g+16>>2]=0;while(1){if(!b){b=0;break a}j=c[b>>2]|0;bb[f&31](a,b,32)|0;b=j}}e=c[g+8>>2]|0;a=e+(c[g+12>>2]<<2)|0;while(1){if(e>>>0>=a>>>0){b=0;break a}d=c[e>>2]|0;if(d){c[e>>2]=b;b=c[d>>2]|0;c[d>>2]=0}e=e+4|0}}while(0);return b|0}function Tl(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(c[d>>2]&4096){Sl(a,0)|0;d=c[b>>2]|0}e=d+16|0;a=c[e>>2]|0;do if((a|0)<0){b=c[d>>2]|0;if(b&12|0){a=Ul(c[d+4>>2]|0)|0;c[e>>2]=a;break}if(b&112){a=0;b=d+8|0;while(1){b=c[b>>2]|0;if(!b)break;a=a+1|0}c[e>>2]=a}}while(0);return a|0}function Ul(a){a=a|0;var b=0;if(!a)return 0;else{b=Ul(c[a+4>>2]|0)|0;return b+1+(Ul(c[a>>2]|0)|0)|0}return 0}function Vl(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;g=c;if((e|0)>=1){h=c+e+-1|0;g=(h>>>0<c>>>0?c:h)+(1-g)&-2;f=c;while(1){if(f>>>0>=h>>>0)break;b=O(((d[f>>0]|0)<<8)+b+(d[f+1>>0]|0)|0,17109811)|0;f=f+2|0}f=c+g|0;if(f>>>0>h>>>0)c=e;else{c=e;b=O(((d[f>>0]|0)<<8)+b|0,17109811)|0}}else{while(1){f=a[c>>0]|0;if(!(f<<24>>24))break;h=a[c+1>>0]|0;e=O(((f&255)<<8)+b+(h&255)|0,17109811)|0;b=e;c=c+(h<<24>>24?2:1)|0}c=c-g|0}return O(b+c|0,17109811)|0}function Wl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=l;l=l+128|0;z=G+120|0;r=G;F=a+8|0;e=c[F>>2]|0;if(c[e>>2]&4096){Sl(a,0)|0;e=c[F>>2]|0}E=c[a+4>>2]|0;A=c[E>>2]|0;B=c[E+4>>2]|0;x=E+8|0;D=c[x>>2]|0;C=c[E+20>>2]|0;t=a+20|0;c[t>>2]=c[t>>2]&-32769;h=c[e+4>>2]|0;a:do if(!b)if((d&448|0)==0|(h|0)==0)e=0;else{if(!(d&64)){b:do if(!(d&256)){e=h;while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break b;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}}else{e=h;while(1){f=c[e>>2]|0;if(!f)break b;a=f+4|0;c[e>>2]=c[a>>2];c[a>>2]=e;e=f}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-D)|0;break}}b=E+16|0;if((c[b>>2]|0)!=0|(D|0)<0){j=a+12|0;k=(D|0)<0;i=0-D|0;e=h;do{h=e;while(1){e=h+4|0;f=c[e>>2]|0;if(!f)break;c[e>>2]=c[f>>2];c[f>>2]=h;h=f}e=c[h>>2]|0;f=c[b>>2]|0;if(f|0){if(k)g=c[h+8>>2]|0;else g=h+i|0;ib[f&127](a,g,E)}if((c[x>>2]|0)<0)cb[c[j>>2]&31](a,h,0,E)|0}while((e|0)!=0);e=c[F>>2]|0}c[e+16>>2]=0;c[e+4>>2]=0;e=0}else{y=a+16|0;u=(d&4098|0)==0;c:do if(u|(c[(c[y>>2]|0)+4>>2]|0)!=8)v=45;else{k=(B|0)<0;e=b+A|0;if(k)e=c[e>>2]|0;i=(C|0)==0;j=(B|0)<1;g=bb[c[a>>2]&31](a,b,4)|0;while(1){if(!g){v=45;break c}f=g+A|0;if(k)f=c[f>>2]|0;do if(i)if(j){f=yJ(e,f)|0;break}else{f=eL(e,f,B)|0;break}else f=cb[C&31](a,e,f,E)|0;while(0);if(f|0){v=45;break c}if((g|0)==(b|0))break;g=bb[c[a>>2]&31](a,g,8)|0}h=c[(c[F>>2]|0)+4>>2]|0;c[z>>2]=c[h+4>>2];c[z+4>>2]=c[h>>2];e=z;v=180}while(0);d:do if((v|0)==45){do if(!(d&2565)){if(d&32|0){if((D|0)<0)g=c[b+8>>2]|0;else g=b+(0-D)|0;e=g+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e;if(!h){e=b;f=z;h=z;v=198;break}else{e=b;s=f;j=b;v=64;break}}if(h){if((D|0)<0)e=c[h+8>>2]|0;else e=h+(0-D)|0;if((e|0)!=(b|0)){f=b+A|0;if((B|0)<0){g=b;e=0;s=c[f>>2]|0;j=0;v=64}else{g=b;e=0;s=f;j=0;v=64}}else{e=0;g=b;f=z;k=z;j=0;v=141}}else{e=0;g=b;f=z;h=z;v=198}}else{if(!(d&512)){e=b+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e}else f=b;if(!h){e=0;g=b;f=z;h=z;v=198}else{g=b;e=0;s=f;j=0;v=64}}while(0);e:do if((v|0)==64){f:do if((c[(c[y>>2]|0)+4>>2]|0)==4?(q=c[(c[F>>2]|0)+24>>2]|0,!((d&516|0)==0|(q|0)==0)):0){b=(D|0)<0;m=(B|0)<0;n=(C|0)==0;o=(B|0)<1;p=0-D|0;k=0;f=h;while(1){if((k|0)>=(q|0)){f=z;k=z;m=0;break}if(b)i=c[f+8>>2]|0;else i=f+p|0;i=i+A|0;if(m)i=c[i>>2]|0;do if(n)if(o){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if(!i){v=80;break}c[r+(k<<2)>>2]=i;f=c[((i|0)<0?f+4|0:f)>>2]|0;if(!f){e=0;break a}else k=k+1|0}if((v|0)==80)if(b){e=c[f+8>>2]|0;break a}else{e=f+p|0;break a}while(1){if((m|0)>=(q|0))break f;do if((c[r+(m<<2)>>2]|0)<0){i=h+4|0;b=c[i>>2]|0;if((c[r+((m|1)<<2)>>2]|0)<0){c[i>>2]=c[b>>2];c[b>>2]=h;c[f+4>>2]=b;f=b;h=k;i=b+4|0;break}else{c[k>>2]=b;c[f+4>>2]=h;f=h;h=b;i=b;break}}else{i=c[h>>2]|0;if((c[r+((m|1)<<2)>>2]|0)>0){p=i+4|0;c[h>>2]=c[p>>2];c[p>>2]=h;c[k>>2]=i;h=i;break}else{c[f+4>>2]=i;c[k>>2]=h;f=i;i=i+4|0;break}}while(0);k=h;m=m+2|0;h=c[i>>2]|0}}else{f=z;k=z}while(0);n=(D|0)<0;o=(B|0)<0;p=(C|0)!=0;q=(B|0)<1;r=0-D|0;i=h;g:while(1){h=i;while(1){if(n)i=c[h+8>>2]|0;else i=h+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if(!i){v=140;break g}if((i|0)>=0)break;b=h+4|0;m=c[b>>2]|0;if(!m){v=121;break g}if(n)i=c[m+8>>2]|0;else i=m+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if((i|0)>=0){v=118;break}c[b>>2]=c[m>>2];c[m>>2]=h;c[f+4>>2]=m;h=c[m+4>>2]|0;if(!h){f=m;h=k;v=198;break e}else f=m}if((v|0)==118){v=0;if(!i){v=119;break}c[k>>2]=m;c[f+4>>2]=h;i=c[m>>2]|0;if(!i){f=h;h=m;v=198;break e}else{f=h;k=m;continue}}b=c[h>>2]|0;if(!b){v=139;break}if(n)i=c[b+8>>2]|0;else i=b+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=yJ(s,i)|0;break}else{i=eL(s,i,B)|0;break}else i=cb[C&31](a,s,i,E)|0;while(0);if((i|0)>0){i=b+4|0;c[h>>2]=c[i>>2];c[i>>2]=h;c[k>>2]=b;i=c[b>>2]|0;if(!i){h=b;v=198;break e}else{k=b;continue}}if(!i){v=137;break}c[f+4>>2]=b;c[k>>2]=h;i=c[b+4>>2]|0;if(!i){f=b;v=198;break e}else{f=b;k=h}}if((v|0)==119){c[f+4>>2]=h;f=h;h=m;v=141;break}else if((v|0)==121){c[f+4>>2]=h;f=h;h=k;v=198;break}else if((v|0)==137){c[k>>2]=h;k=h;h=b;v=141;break}else if((v|0)==139){c[k>>2]=h;v=198;break}else if((v|0)==140)if(!h){h=k;v=198;break}else{v=141;break}}while(0);do if((v|0)==141){c[t>>2]=c[t>>2]|32768;i=h+4|0;c[k>>2]=c[i>>2];c[f+4>>2]=c[h>>2];if(!(d&516)){if(d&8|0){c[i>>2]=c[z>>2];c[h>>2]=0;c[z>>2]=h;v=169;break}if(d&16|0){v=z+4|0;c[h>>2]=c[v>>2];c[i>>2]=0;c[v>>2]=h;v=175;break}if(!u){e=f;v=180;break d}if(d&2049|0){if(c[(c[y>>2]|0)+4>>2]&4|0){e=h;break}c[i>>2]=0;e=z+4|0;c[h>>2]=c[e>>2];c[e>>2]=h;e=h;v=205;break}if(!(d&32)){e=0;break a}if(!(c[(c[y>>2]|0)+4>>2]&4)){c[e+4>>2]=0;x=z+4|0;c[e>>2]=c[x>>2];c[x>>2]=j;e=(c[F>>2]|0)+16|0;c[e>>2]=(c[e>>2]|0)+1;e=h;break}e=c[E+16>>2]|0;if(e|0)ib[e&127](a,g,E);if((c[x>>2]|0)<0){cb[c[a+12>>2]&31](a,j,0,E)|0;e=h}else e=h}else e=h}else if((v|0)==198){c[f+4>>2]=0;c[h>>2]=0;if(!(d&8))if(!(d&16)){if(d&516|0){e=f;break d}if(!(d&2049)){if(!(d&32)){g=0;e=f;break d}x=(c[F>>2]|0)+16|0;c[x>>2]=(c[x>>2]|0)+1}else{e=0;v=205}}else v=175;else v=169}while(0);if((v|0)==169){h=z+4|0;e=c[h>>2]|0;if(!e){e=f;break}while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}c[h>>2]=c[e>>2]}else if((v|0)==175){e=c[z>>2]|0;if(!e){e=f;break}while(1){f=c[e>>2]|0;if(!f)break;x=f+4|0;c[e>>2]=c[x>>2];c[x>>2]=e;e=f}c[z>>2]=c[e+4>>2]}else if((v|0)==205){i=E+12|0;h=c[i>>2]|0;j=(d&1|0)==0;if(!(j|(h|0)==0))g=bb[h&31](a,g,E)|0;do if(g){if((D|0)>-1){e=g+D|0;v=215;break}e=cb[c[a+12>>2]&31](a,0,12,E)|0;if(e|0){c[e+8>>2]=g;break}if((c[i>>2]|0)!=0?(w=c[E+16>>2]|0,!(j|(w|0)==0)):0){ib[w&127](a,g,E);v=215}else v=215}else v=215;while(0);if((v|0)==215)if(!e){e=f;break}f=(c[F>>2]|0)+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1}c[e+4>>2]=c[z>>2];c[e>>2]=c[z+4>>2];h:do if(!((d&516|0)==0?1:(c[(c[y>>2]|0)+4>>2]&8|0)==0)){m=(D|0)<0;if(m)f=c[e+8>>2]|0;else f=e+(0-D)|0;n=(B|0)<0;f=f+A|0;if(n)f=c[f>>2]|0;j=(C|0)==0;k=(B|0)<1;b=0-D|0;while(1){i=e+4|0;g=c[i>>2]|0;if(!g)break h;while(1){h=c[g>>2]|0;if(!h)break;z=h+4|0;c[g>>2]=c[z>>2];c[z>>2]=g;g=h}c[i>>2]=g;if(m)h=c[g+8>>2]|0;else h=g+b|0;h=h+A|0;if(n)h=c[h>>2]|0;do if(j)if(k){h=yJ(f,h)|0;break}else{h=eL(f,h,B)|0;break}else h=cb[C&31](a,f,h,E)|0;while(0);if(h|0)break h;c[i>>2]=c[g>>2];c[g>>2]=e;e=g}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break a}else{e=e+(0-D)|0;break a}}while(0);if((v|0)==180){if((D|0)<0)g=c[h+8>>2]|0;else g=h+(0-D)|0;f=c[E+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))ib[f&127](a,g,E);if((c[x>>2]|0)<0)cb[c[a+12>>2]&31](a,h,0,E)|0;a=(c[F>>2]|0)+16|0;E=c[a>>2]|0;c[a>>2]=(E|0)<1?-1:E+-1|0}do{f=e+4|0;e=c[f>>2]|0}while((e|0)!=0);c[f>>2]=c[z>>2];c[(c[F>>2]|0)+4>>2]=c[z+4>>2];e=d&2|0?g:0}while(0);l=G;return e|0}function Xl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(c[c[a+8>>2]>>2]&4096|0)Sl(a,0)|0;f=(b|0)!=0;if(f){if(c[c[b+8>>2]>>2]&4096|0)Sl(b,0)|0;if((c[b+16>>2]|0)==(c[a+16>>2]|0)){d=b;e=7}else b=0}else{d=0;e=7}a:do if((e|0)==7){while(1){if(!d)break;if((d|0)==(a|0)){b=0;break a}d=c[d+28>>2]|0;e=7}d=a+28|0;e=c[d>>2]|0;if(e|0){g=e+24|0;c[g>>2]=(c[g>>2]|0)+-1}c[a+32>>2]=0;c[d>>2]=0;if(f){c[d>>2]=b;c[a>>2]=12;g=b+24|0;c[g>>2]=(c[g>>2]|0)+1;break}else{c[a>>2]=c[c[a+16>>2]>>2];b=e;break}}while(0);return b|0}function Yl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;a:do if(!(d&99)){if((d&516|0)==0?(e=c[(c[a+16>>2]|0)+4>>2]|0,!((d&384|0)!=0&(e&12|0)==0)):0){if(e&12|0){if(!(d&408)){e=0;break}o=(d&136|0)!=0;p=(d&272|0)!=0;l=0;f=0;e=0;n=a;while(1){if(!n)break;m=bb[c[c[n+16>>2]>>2]&31](n,b,d)|0;do if(!m)g=l;else{h=c[n+4>>2]|0;i=c[h+4>>2]|0;j=c[h+20>>2]|0;g=m+(c[h>>2]|0)|0;if((i|0)<0)k=c[g>>2]|0;else k=g;if(e|0){do if(!j)if((i|0)<1){g=yJ(k,f)|0;break}else{g=eL(k,f,i)|0;break}else g=cb[j&31](n,k,f,h)|0;while(0);if(!(o&(g|0)<0|p&(g|0)>0)){g=l;break}}g=n;f=k;e=m}while(0);l=g;n=c[n+28>>2]|0}c[a+32>>2]=l;break}if(!(d&24)){e=0;break}j=a+32|0;f=c[j>>2]|0;if(f){e=c[(c[f+4>>2]|0)+8>>2]|0;g=c[(c[f+8>>2]|0)+4>>2]|0;if((e|0)<0)e=c[g+8>>2]|0;else e=g+(0-e)|0;if((e|0)==(b|0))e=b;else{f=a;h=32}}else{f=a;h=32}do if((h|0)==32){while(1){if(!f){h=33;break}e=bb[c[c[f+16>>2]>>2]&31](f,b,4)|0;if(e|0){h=36;break}f=c[f+28>>2]|0;h=32}if((h|0)==33){c[j>>2]=0;e=0;break a}else if((h|0)==36){c[j>>2]=f;break}}while(0);i=(d<<4&128^128)+128|0;e=bb[c[c[f+16>>2]>>2]&31](f,e,d)|0;while(1){h=f+16|0;while(1){if(!e)break;else g=a;while(1){if((g|0)==(f|0))break a;if(bb[c[c[g+16>>2]>>2]&31](g,e,4)|0)break;g=c[g+28>>2]|0}e=bb[c[c[h>>2]>>2]&31](f,e,d)|0}f=c[f+28>>2]|0;c[j>>2]=f;if(!f){e=0;break a}e=bb[c[c[f+16>>2]>>2]&31](f,0,i)|0}}else f=a;while(1){if(!f){f=0;e=0;break}e=bb[c[c[f+16>>2]>>2]&31](f,b,d)|0;if(e|0)break;f=c[f+28>>2]|0}c[a+32>>2]=f}else e=bb[c[c[a+16>>2]>>2]&31](a,b,d)|0;while(0);return e|0}function Zl(a){a=a|0;var b=0;b=c[41980]|0;c[41980]=a;return b|0}function _l(a){a=a|0;var b=0;b=c[41981]|0;c[41981]=a;return b|0}function $l(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=am(a,b,f)|0;l=e;return d|0}function am(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=(a|0)==3;h=f?c[41983]|0:(a|0)==2?1:a;c[41983]=h;i=c[41984]|0;c[41984]=i>>>0>h>>>0?i:h;do if(h>>>0<(c[41981]|0)>>>0){a=c[41982]|0;if(!a){a=BN()|0;c[41982]=a;if(!a){a=1;break}}if(!f){EN(a)|0;a=c[41982]|0}NK(a,b,d)|0;a=0}else{if(c[41980]|0){bm(a,b,d);a=0;break}if(f)a=c[13918]|0;else{i=c[13918]|0;c[e>>2]=(a|0)==1?81312:81318;AL(i,81326,e)|0;a=i}NK(a,b,d)|0;a=0}while(0);l=g;return a|0}function bm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[41985]|0)==0?(f=_I(c[4354]|0)|0,c[41985]=f,(f|0)==0):0)XL(81331,c[13918]|0)|0;else e=4;do if((e|0)==4){if((a|0)!=3){$a[c[41980]&31]((a|0)==1?81312:81318)|0;$a[c[41980]&31](81990)|0}while(1){a=MK(c[41985]|0,c[4354]|0,b,d)|0;e=c[4354]|0;if((a|0)>-1&(a|0)<(e|0)){e=7;break}e=e<<1;f=a+1|0;f=(e|0)>(f|0)?e:f;c[4354]=f;if(!(bJ(c[41985]|0,f)|0)){e=9;break}}if((e|0)==7){$a[c[41980]&31](c[41985]|0)|0;break}else if((e|0)==9){XL(81331,c[13918]|0)|0;break}}while(0);return}function cm(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;am(1,a,e)|0;l=d;return}function dm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!e){e=(d|0)==0?1024:d;d=e;e=_I(e)|0;f=1}else f=0;c[b+12>>2]=f;c[b>>2]=e;c[b+8>>2]=e+d;c[b+4>>2]=e;a[e>>0]=0;return}function em(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;f=c[a>>2]|0;g=(c[h>>2]|0)-f|0;e=g<<1;g=g+b|0;e=g>>>0>e>>>0?g:e;g=a+4|0;b=f;f=(c[g>>2]|0)-f|0;d=a+12|0;if(!(c[d>>2]|0)){i=_I(e)|0;UN(i|0,b|0,f|0)|0;c[d>>2]=1;b=i}else b=bJ(b,e)|0;c[a>>2]=b;c[g>>2]=b+f;c[h>>2]=b+e;return 0}function fm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=a+4|0;e=c[f>>2]|0;if((e+d|0)>>>0>(c[a+8>>2]|0)>>>0){em(a,d)|0;e=c[f>>2]|0}UN(e|0,b|0,d|0)|0;c[f>>2]=(c[f>>2]|0)+d;return d|0}function gm(a,b){a=a|0;b=b|0;return fm(a,b,sJ(b)|0)|0}function hm(a){a=a|0;if(c[a+12>>2]|0)$I(c[a>>2]|0);return}function im(a){a=a|0;var b=0,e=0;b=a+4|0;e=c[b>>2]|0;if(e>>>0>(c[a>>2]|0)>>>0){c[b>>2]=e+-1;a=d[e>>0]|0}else a=-1;return a|0}function jm(a,b,d){a=a|0;b=b|0;d=d|0;cp(c[41987]|0,c[b+8>>2]|0)|0;cp(c[41987]|0,c[b+12>>2]|0)|0;_n(c[41987]|0,b);return}function km(a,b){a=a|0;b=b|0;var c=0;c=Mo(a,81379,0)|0;if((b|0)!=0&(c|0)==0){lm(a);c=Mo(a,81379,0)|0}return c|0}function lm(a){a=a|0;var b=0,c=0,d=0;d=to(a)|0;xq(d,d,86,0,1)|0;c=eo(d)|0;while(1){if(!c)break;nm(a,c);b=Qm(d,c)|0;while(1){if(!b)break;om(a,b);b=Sm(d,b)|0}c=fo(d,c)|0}return}function mm(b){b=b|0;var c=0;c=b+24|0;a[c>>0]=a[c>>0]|64;tm(b);c=Mp(b)|0;qm((c|0)==0?b:c,b);return}function nm(a,b){a=a|0;b=b|0;var d=0;d=pm(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))qm(a,b);return}function om(a,b){a=a|0;b=b|0;var d=0;d=pm(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))qm(a,b);return}function pm(a){a=a|0;return Mo(a,81367,0)|0}function qm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=Oo(b,81367,16,0)|0;f=rm(a,c[b>>2]&3)|0;e=d+8|0;a:do if(!(c[e>>2]|0)){a=to(a)|0;c[e>>2]=rm(a,c[b>>2]&3)|0;a=sm(b)|0;d=d+12|0;c[d>>2]=Zn(so(b)|0,((a|0)>4?a:4)<<2)|0;a=bb[c[f>>2]&31](f,0,128)|0;while(1){if(!a)break a;e=so(b)|0;e=ap(e,c[a+12>>2]|0)|0;c[(c[d>>2]|0)+(c[a+16>>2]<<2)>>2]=e;a=bb[c[f>>2]&31](f,a,8)|0}}while(0);return}function rm(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;a=km(a,0)|0;a:do if(!a)a=0;else switch(b|0){case 0:{a=c[a+16>>2]|0;break a}case 1:{a=c[a+8>>2]|0;break a}case 2:case 3:{a=c[a+12>>2]|0;break a}default:{c[d>>2]=b;$l(1,81392,d)|0;a=0;break a}}while(0);l=e;return a|0}function sm(a){a=a|0;var b=0;b=to(so(a)|0)|0;a=rm(b,c[a>>2]&3)|0;if(!a)a=0;else a=Tl(a)|0;return a|0}function tm(a){a=a|0;var b=0,d=0,e=0,f=0;d=Oo(a,81379,20,0)|0;e=d+8|0;c[e>>2]=Qp(a,17420,c[4353]|0)|0;f=d+12|0;c[f>>2]=Qp(a,17420,c[4353]|0)|0;d=d+16|0;c[d>>2]=Qp(a,17420,c[4353]|0)|0;b=Mp(a)|0;if(!b){b=c[41986]|0;if(!((b|0)==0|(b|0)==(a|0))){b=km(b,0)|0;um(c[b+8>>2]|0,c[e>>2]|0,a,1);um(c[b+12>>2]|0,c[f>>2]|0,a,2);um(c[b+16>>2]|0,c[d>>2]|0,a,0)}}else{a=km(b,0)|0;Xl(c[e>>2]|0,c[a+8>>2]|0)|0;Xl(c[f>>2]|0,c[a+12>>2]|0)|0;Xl(c[d>>2]|0,c[a+16>>2]|0)|0}return}function um(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=bb[c[b>>2]&31](b,0,128)|0;while(1){if(!g)break;h=vm(e,c[g+8>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,f)|0;a[h+22>>0]=a[g+22>>0]|0;a[h+21>>0]=a[g+21>>0]|0;bb[c[d>>2]&31](d,h,1)|0;g=bb[c[b>>2]&31](b,g,8)|0}return}function vm(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=Zn(b,24)|0;a[h+20>>0]=g;c[h+8>>2]=ap(b,d)|0;c[h+12>>2]=ap(b,e)|0;c[h+16>>2]=f;return h|0}function wm(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+8>>2]=b;b=bb[c[a>>2]&31](a,e,4)|0;l=d;return b|0}function xm(a,b){a=a|0;b=b|0;var c=0;c=Xl(a,0)|0;b=wm(a,b)|0;Xl(a,c)|0;return b|0}function ym(a,b){a=a|0;b=b|0;a=pm(a)|0;if(!a)a=0;else a=wm(c[a+8>>2]|0,b)|0;return a|0}function zm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!b){b=c[41986]|0;if(!b){a[g>>0]=a[17456]|0;a[g+1>>0]=a[17457]|0;a[g+2>>0]=a[17458]|0;a[g+3>>0]=a[17459]|0;b=hn(0,g,0)|0;c[41986]=b}}if(!f)b=Bm(b,d,e)|0;else b=Am(b,d,e,f)|0;l=h;return b|0}function Am(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=to(a)|0;km(a,1)|0;g=rm(a,b)|0;f=xm(g,d)|0;a:do if(!f){f=wm(g,d)|0;if(f|0){f=vm(a,d,e,c[f+16>>2]|0,b)|0;bb[c[g>>2]&31](g,f,1)|0;h=16;break}g=rm(i,b)|0;f=vm(a,d,e,Tl(g)|0,b)|0;bb[c[g>>2]&31](g,f,1)|0;switch(b|0){case 0:{xq(i,i,52,f,1)|0;h=16;break a}case 1:{d=eo(i)|0;while(1){if(!d){h=16;break a}Cm(a,d,f);d=fo(i,d)|0}}case 2:case 3:{g=eo(i)|0;while(1){if(!g){h=16;break a}d=Qm(i,g)|0;while(1){if(!d)break;Cm(a,d,f);d=Sm(i,d)|0}g=fo(i,g)|0}}default:break a}}else{h=f+12|0;cp(a,c[h>>2]|0)|0;c[h>>2]=ap(a,e)|0;h=16}while(0);if((h|0)==16)if((b|0)==0&(f|0)!=0)Dm(a,f,e)|0;wo(a,a,f);return f|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=rm(a,b)|0;if(!a)a=0;else a=wm(a,c)|0;return a|0}function Cm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;b=pm(b)|0;f=d+16|0;e=c[f>>2]|0;if((e|0)>3){g=c[a+64>>2]|0;b=b+12|0;e=e<<2;c[b>>2]=cb[c[(c[g>>2]|0)+8>>2]&31](c[g+12>>2]|0,c[b>>2]|0,e,e+4|0)|0}else b=b+12|0;g=ap(a,c[d+12>>2]|0)|0;c[(c[b>>2]|0)+(c[f>>2]<<2)>>2]=g;return}function Dm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=so(a)|0;g=(pm(a)|0)+12|0;i=b+16|0;cp(h,c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]|0)|0;f=ap(h,d)|0;c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]=f;do if(!(c[a>>2]&3)){e=c[(km(h,0)|0)+16>>2]|0;f=b+8|0;g=xm(e,c[f>>2]|0)|0;if(!g){i=vm(h,c[f>>2]|0,d,c[i>>2]|0,c[a>>2]&3)|0;bb[c[e>>2]&31](e,i,1)|0;break}else{i=g+12|0;cp(h,c[i>>2]|0)|0;c[i>>2]=ap(h,d)|0;break}}while(0);wo(h,a,b);return 0}function Em(a,b,d){a=a|0;b=b|0;d=d|0;a=rm(a,b)|0;do if(a){b=c[a>>2]|0;if(!d){a=bb[b&31](a,0,128)|0;break}else{a=bb[b&31](a,d,8)|0;break}}else a=0;while(0);return a|0}function Fm(a){a=a|0;var b=0;c[41987]=a;b=pm(a)|0;if(b|0){Gm(a,b);Qo(a,c[b>>2]|0)|0}b=km(a,0)|0;if(b)if(((Sp(a,c[b+8>>2]|0)|0)==0?(Sp(a,c[b+12>>2]|0)|0)==0:0)?(Sp(a,c[b+16>>2]|0)|0)==0:0){Qo(a,c[b>>2]|0)|0;b=0}else b=1;else b=0;return b|0}function Gm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=so(a)|0;e=sm(a)|0;b=b+12|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(e|0))break;cp(f,c[d+(a<<2)>>2]|0)|0;a=a+1|0}_n(f,d);return}function Hm(a){a=a|0;var b=0;b=pm(a)|0;if(b|0){Gm(a,b);Qo(a,81367)|0}return}function Im(a){a=a|0;var b=0;b=pm(a)|0;if(b|0){Gm(a,b);Qo(a,81367)|0}return}function Jm(a,b){a=a|0;b=b|0;b=ym(a,b)|0;if(!b)b=0;else{a=c[(pm(a)|0)+12>>2]|0;b=c[a+(c[b+16>>2]<<2)>>2]|0}return b|0}function Km(a,b){a=a|0;b=b|0;a=c[(pm(a)|0)+12>>2]|0;return c[a+(c[b+16>>2]<<2)>>2]|0}function Lm(a,b,c){a=a|0;b=b|0;c=c|0;b=ym(a,b)|0;if(!b)b=-1;else{Dm(a,b,c)|0;b=0}return b|0}function Mm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=so(a)|0;f=zm(f,c[a>>2]&3,b,0)|0;if(!f){f=so(a)|0;f=zm(f,c[a>>2]&3,b,e)|0}Dm(a,f,d)|0;return 0}function Nm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=so(a)|0;f=c[a>>2]|0;a:do if(!((c[b>>2]^f)&3)){d=1;e=0;while(1){e=Em(g,f&3,e)|0;if(!e)break a;d=ym(b,c[e+8>>2]|0)|0;if(!d){d=1;break a}f=Km(a,e)|0;Dm(b,d,f)|0;if(dp(f)|0)ep(Km(b,d)|0);d=0;f=c[a>>2]|0}}else d=1;while(0);return d|0}function Om(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a=c[b+40>>2]|0;f=c[d+40>>2]|0;if((a|0)==(f|0)){e=(c[b>>2]|0)>>>4;a=(c[d>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}else{e=(c[a>>2]|0)>>>4;a=(c[f>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}if((g|0)==6)a=0;return a|0}function Pm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=(c[b+40>>2]|0)+8|0;g=c[a>>2]|0;a=c[a+4>>2]|0;f=(c[d+40>>2]|0)+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;do if(!(a>>>0<f>>>0|(a|0)==(f|0)&g>>>0<e>>>0))if(a>>>0>f>>>0|(a|0)==(f|0)&g>>>0>e>>>0)a=1;else{e=b+8|0;a=c[e>>2]|0;e=c[e+4>>2]|0;if(!((a|0)==0&(e|0)==0)?(i=d+8|0,h=c[i>>2]|0,i=c[i+4>>2]|0,!((h|0)==0&(i|0)==0)):0){if(e>>>0<i>>>0|(e|0)==(i|0)&a>>>0<h>>>0){a=-1;break}if(e>>>0>i>>>0|(e|0)==(i|0)&a>>>0>h>>>0){a=1;break}}a=0}else a=-1;while(0);return a|0}function Qm(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+32|0;Sl(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=bb[c[b>>2]&31](b,0,128)|0;c[a>>2]=Ol(c[d>>2]|0)|0}return b|0}function Rm(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+48|0;d=e;if((c[b+24>>2]|0)==(a|0))a=b+28|0;else{c[d+16>>2]=b;a=c[a+40>>2]|0;a=bb[c[a>>2]&31](a,d,4)|0}l=e;return a|0}function Sm(a,b){a=a|0;b=b|0;var d=0,e=0;d=Rm(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+32|0;Sl(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=bb[c[a>>2]&31](a,b,8)|0;c[d>>2]=Ol(c[e>>2]|0)|0}return a|0}function Tm(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+28|0;Sl(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=bb[c[b>>2]&31](b,0,128)|0;c[a>>2]=Ol(c[d>>2]|0)|0}return b|0}function Um(a,b){a=a|0;b=b|0;var d=0,e=0;d=Rm(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+28|0;Sl(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=bb[c[a>>2]&31](a,b,8)|0;c[d>>2]=Ol(c[e>>2]|0)|0}return a|0}function Vm(a,b){a=a|0;b=b|0;var c=0;c=Qm(a,b)|0;if(!c)c=Tm(a,b)|0;return c|0}function Wm(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((c[b>>2]&3|0)==2){b=Sm(a,b)|0;if(!b){b=0;do{if(!b)b=Tm(a,d)|0;else b=Um(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0))}}else do{b=Um(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0));while(0);return b|0}function Xm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if((tn(a)|0)!=0?(c[g>>2]=0,c[g+4>>2]=0,c[g+8>>2]=0,c[g+12>>2]=0,c[f>>2]=c[g>>2],c[f+4>>2]=c[g+4>>2],c[f+8>>2]=c[g+8>>2],c[f+12>>2]=c[g+12>>2],($m(a,b,e,f)|0)!=0):0)f=0;else f=((d[a+24>>0]|0)>>>2&1^1)&255|(b|0)!=(e|0);l=h;return f|0}function Ym(a,b){a=a|0;b=b|0;_m(a,b);return}function Zm(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;jo(b,d,1)|0;jo(b,e,1)|0;h=Zn(b,96)|0;i=h+48|0;l=ln(b,2)|0;j=c[i>>2]|0;k=c[h>>2]|0;m=h+8|0;c[m>>2]=f;c[m+4>>2]=g;m=h+56|0;c[m>>2]=f;c[m+4>>2]=g;g=l<<4;c[h>>2]=k&12|g|2;c[i>>2]=j&12|g|3;c[h+88>>2]=d;c[h+40>>2]=e;_m(b,h);if(a[b+24>>0]&64){Oo(h,81367,16,0)|0;om(b,h)}uo(b,h);return h|0}function _m(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;i=l;l=l+16|0;d=i;h=c[b>>2]&3;g=(h|0)==2?b:b+-48|0;h=(h|0)==3?b:b+48|0;e=c[h+40>>2]|0;f=c[g+40>>2]|0;while(1){if(!a)break;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];if($m(a,e,f,d)|0)break;j=Rm(a,e)|0;m=a+44|0;an(c[m>>2]|0,j+32|0,g);k=a+48|0;an(c[k>>2]|0,j+24|0,g);j=Rm(a,f)|0;an(c[m>>2]|0,j+28|0,h);an(c[k>>2]|0,j+20|0,h);a=Mp(a)|0}l=i;return}function $m(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+48|0;f=h;if(!((b|0)==0|(d|0)==0)?(c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+40>>2]=b,g=Rm(a,d)|0,(g|0)!=0):0){e=a+48|0;g=g+20|0;Sl(c[e>>2]|0,c[g>>2]|0)|0;a=c[e>>2]|0;a=bb[c[a>>2]&31](a,f,4)|0;c[g>>2]=Ol(c[e>>2]|0)|0}else a=0;l=h;return a|0}function an(a,b,d){a=a|0;b=b|0;d=d|0;Sl(a,c[b>>2]|0)|0;bb[c[a>>2]&31](a,d,1)|0;c[b>>2]=Ol(a)|0;return}function bn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;i=n+24|0;k=n+16|0;j=n;do if(!(Bn(a,2,e,k,0)|0))if(!e){if(f|0?(tn(a)|0)==0:0){m=18;break};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;m=7}else m=17;else{o=j;c[o>>2]=0;c[o+4>>2]=0;o=k;g=c[o+4>>2]|0;m=j+8|0;c[m>>2]=c[o>>2];c[m+4>>2]=g;c[j>>2]=2;m=7}while(0);a:do if((m|0)==7){c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=$m(a,b,d,i)|0;b:do if(!g){if(sn(a)|0?(c[i>>2]=c[j>>2],c[i+4>>2]=c[j+4>>2],c[i+8>>2]=c[j+8>>2],c[i+12>>2]=c[j+12>>2],h=$m(a,d,b,i)|0,h|0):0){g=h;break}do if(f|0){g=to(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=$m(g,b,d,i)|0;if(!g){if(!(sn(a)|0))break;g=to(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=$m(g,d,b,i)|0;if(!g)break}Ym(a,g);break b}while(0);m=17;break a}while(0)}while(0);if((m|0)==17)if(!f)g=0;else m=18;if((m|0)==18)if((Xm(a,b,d)|0)!=0?(Bn(a,2,e,k,1)|0)!=0:0){g=k;g=Zm(a,b,d,c[g>>2]|0,c[g+4>>2]|0)|0;Fn(a,2,g)}else g=0;l=n;return g|0}function cn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;d=(c[b>>2]&3|0)==3;g=d?b+-48|0:b;d=d?b:b+48|0;b=c[g+40>>2]|0;h=Rm(a,c[d+40>>2]|0)|0;f=a+44|0;dn(c[f>>2]|0,h+32|0,g);e=a+48|0;dn(c[e>>2]|0,h+24|0,g);b=Rm(a,b)|0;dn(c[f>>2]|0,b+28|0,d);dn(c[e>>2]|0,b+20|0,d);return}function dn(a,b,d){a=a|0;b=b|0;d=d|0;Sl(a,c[b>>2]|0)|0;bb[c[a>>2]&31](a,d,2)|0;c[b>>2]=Ol(a)|0;return}function en(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;d=(c[d>>2]&3|0)==2?d:d+-48|0;g=c[d>>2]&3;h=c[((g|0)==3?d:d+48|0)+40>>2]|0;g=c[((g|0)==2?d:d+-48|0)+40>>2]|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];if($m(b,h,g,f)|0){if((to(b)|0)==(b|0)){if(a[b+24>>0]&64)Im(d);yo(b,d);Wo(d);h=d+8|0;Dn(b,2,c[h>>2]|0,c[h+4>>2]|0)}if(!(xq(b,d,53,0,0)|0))if((to(b)|0)==(b|0)){_n(b,d);d=0}else d=0;else d=-1}else d=-1;l=e;return d|0}function fn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;f=jo(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0,d)|0;g=jo(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0,d)|0;do if((f|0)!=0&(g|0)!=0){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=$m(a,f,g,e)|0;f=(e|0)==0;if(!((d|0)!=0&f)){if(f)break}else{_m(a,b);e=b}d=c[e>>2]&3;l=h;return ((d|0)==(c[b>>2]&3|0)?e:e+(((d|0)==3?-1:1)*48|0)|0)|0}while(0);l=h;return 0}function gn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=b+8|0;e=d+8|0;e=JN(c[b>>2]|0,c[b+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;return ((e|0)==0?0:e>>31|1)|0}function hn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;j=jn(e)|0;f=ab[c[(c[j>>2]|0)+4>>2]&63](c[j+12>>2]|0,72)|0;c[f>>2]=c[f>>2]&-4;i=f+64|0;c[i>>2]=j;k=f+24|0;d=c[d>>2]|0;c[k>>2]=d;a[k>>0]=d&255|8;c[f+60>>2]=f;e=ab[c[c[j+4>>2]>>2]&63](f,e)|0;c[(c[i>>2]|0)+16>>2]=e;if(Bn(f,0,b,g,1)|0){i=g;j=c[i+4>>2]|0;k=f+8|0;c[k>>2]=c[i>>2];c[k+4>>2]=j}k=kn(f)|0;Fn(k,0,f);l=h;return k|0}function jn(b){b=b|0;var d=0,e=0,f=0,g=0;d=(b|0)!=0;if(d){e=c[b>>2]|0;e=(e|0)==0?17792:e}else e=17792;g=$a[c[e>>2]&31](b)|0;f=ab[c[e+4>>2]&63](g,80)|0;c[f>>2]=e;c[f+12>>2]=g;if(d){g=c[b+4>>2]|0;c[f+4>>2]=(g|0)==0?17668:g;b=c[b+8>>2]|0;b=(b|0)==0?17768:b}else{c[f+4>>2]=17668;b=17768}c[f+8>>2]=b;a[f+52>>0]=1;return f|0}function kn(b){b=b|0;var d=0,e=0;c[b+36>>2]=Qp(b,17848,c[4353]|0)|0;c[b+40>>2]=Qp(b,17812,c[4353]|0)|0;d=(to(b)|0)==(b|0);c[b+44>>2]=Qp(b,d?17460:17496,c[4353]|0)|0;d=(to(b)|0)==(b|0);c[b+48>>2]=Qp(b,d?17532:17568,c[4353]|0)|0;c[b+52>>2]=Qp(b,17604,c[4353]|0)|0;d=Mp(b)|0;if(!((d|0)!=0?(e=ln(d,0)|0,c[b>>2]=c[b>>2]&15|e<<4,e=c[d+52>>2]|0,bb[c[e>>2]&31](e,b,1)|0,!(a[d+24>>0]&64)):0))mm(b);uo(b,b);return b|0}function ln(a,b){a=a|0;b=b|0;var d=0;d=(c[a+64>>2]|0)+24+(b<<3)|0;b=d;b=IN(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;a=z;c[d>>2]=b;c[d+4>>2]=a;z=a;return b|0}function mn(b){b=b|0;var d=0,e=0,f=0,g=0;f=Mp(b)|0;g=(f|0)==0;if(g?(d=b+64|0,(c[(c[c[d>>2]>>2]|0)+16>>2]|0)!=0):0){yo(b,b);g=b+8|0;Dn(b,0,c[g>>2]|0,c[g+4>>2]|0);d=c[d>>2]|0;gb[c[(c[d>>2]|0)+16>>2]&127](c[d+12>>2]|0);d=0}else e=4;do if((e|0)==4){d=Kp(b)|0;while(1){if(!d)break;e=Lp(d)|0;mn(d)|0;d=e}d=eo(b)|0;while(1){if(!d)break;e=fo(b,d)|0;qo(b,d)|0;d=e}On(b);yo(b,b);if(((((Sp(b,c[b+40>>2]|0)|0)==0?(Sp(b,c[b+36>>2]|0)|0)==0:0)?(Sp(b,c[b+48>>2]|0)|0)==0:0)?(Sp(b,c[b+44>>2]|0)|0)==0:0)?(Sp(b,c[b+52>>2]|0)|0)==0:0){if(a[b+24>>0]&64?Fm(b)|0:0){d=-1;break}Wo(b);e=b+8|0;Dn(b,0,c[e>>2]|0,c[e+4>>2]|0);if(!g){Np(f,b)|0;_n(f,b);d=0;break}d=b+64|0;while(1){e=c[d>>2]|0;f=c[e+48>>2]|0;if(!f)break;Bo(b,c[f>>2]|0)|0}gb[c[(c[e+4>>2]|0)+20>>2]&127](c[e+16>>2]|0);if(!(Xo(b)|0)){d=c[d>>2]|0;g=c[d+12>>2]|0;f=(c[d>>2]|0)+12|0;hb[c[f>>2]&31](g,b);hb[c[f>>2]&31](g,d);d=0}else d=-1}else d=-1}while(0);return d|0}function nn(a){a=a|0;return Tl(c[a+40>>2]|0)|0}function on(a){a=a|0;var b=0,c=0,d=0;b=0;c=eo(a)|0;while(1){if(!c)break;d=(pn(a,c,0,1)|0)+b|0;b=d;c=fo(a,c)|0}return b|0}function pn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Rm(a,b)|0;if(f){if(!e)b=0;else b=qn(c[a+44>>2]|0,f+32|0)|0;if(d)b=(qn(c[a+44>>2]|0,f+28|0)|0)+b|0}else b=0;return b|0}function qn(a,b){a=a|0;b=b|0;var d=0;Sl(a,c[b>>2]|0)|0;d=Tl(a)|0;c[b>>2]=Ol(a)|0;return d|0}function rn(b){b=b|0;return a[b+24>>0]&1|0}function sn(a){a=a|0;return (rn(a)|0)==0|0}function tn(a){a=a|0;return (d[a+24>>0]|0)>>>1&1|0}function un(a,b){a=a|0;b=b|0;return a|0}function vn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!d){f=1328;d=c[f>>2]|0;f=c[f+4>>2]|0;c[e>>2]=d;c[e+4>>2]=f;f=IN(d|0,f|0,2,0)|0;e=1328;c[e>>2]=f;c[e+4>>2]=z}else{if(!f)a=Zo(a,d)|0;else a=ap(a,d)|0;c[e>>2]=a;c[e+4>>2]=0}return 1}function wn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function xn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((c&1|0)==0&0==0)cp(a,c)|0;return}function yn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ((c&1|0)==0&0==0?c:0)|0}function zn(a){a=a|0;return}function An(a,b,c){a=a|0;b=b|0;c=c|0;return}function Bn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=(e|0)!=0;do if(i){if((a[e>>0]|0)!=37?(h=c[b+64>>2]|0,h=db[c[(c[h+4>>2]|0)+4>>2]&3](c[h+16>>2]|0,d,e,f,g)|0,h|0):0)break;h=Gn(b,d,e,f)|0;if(!h)j=5}else j=5;while(0);if((j|0)==5)if(g){h=c[b+64>>2]|0;h=db[c[(c[h+4>>2]|0)+4>>2]&3](c[h+16>>2]|0,d,0,f,g)|0;if(i&(h|0)!=0){j=f;Hn(b,d,e,c[j>>2]|0,c[j+4>>2]|0)}}else h=0;return h|0}function Cn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+64>>2]|0;return cb[c[(c[a+4>>2]|0)+8>>2]&31](c[a+16>>2]|0,b,d,e)|0}function Dn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Mn(a,b,d,e)|0;a=c[a+64>>2]|0;kb[c[(c[a+4>>2]|0)+12>>2]&31](c[a+16>>2]|0,b,d,e);return}function En(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=so(a)|0;f=a+8|0;b=f;b=Kn(d,c[a>>2]&3,c[b>>2]|0,c[b+4>>2]|0)|0;do if(!b){b=c[d+64>>2]|0;d=c[(c[b+4>>2]|0)+16>>2]|0;if(d|0?(e=f,e=cb[d&31](c[b+16>>2]|0,c[a>>2]&3,c[e>>2]|0,c[e+4>>2]|0)|0,e|0):0){b=e;break}if((c[a>>2]&3|0)==2)b=0;else{e=c[f>>2]|0;f=c[f+4>>2]|0;c[g>>2]=37;b=g+8|0;c[b>>2]=e;c[b+4>>2]=f;qL(173899,81419,g)|0;b=173899}}while(0);l=h;return b|0}function Fn(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+64>>2]|0;ib[c[(c[a+4>>2]|0)+24>>2]&127](c[a+16>>2]|0,b,d);return}function Gn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;b=c[(c[a+64>>2]|0)+56+(((b|0)==3?2:b)<<2)>>2]|0;if(((b|0)!=0?(f=Zo(a,d)|0,(f|0)!=0):0)?(c[h+24>>2]=f,g=bb[c[b>>2]&31](b,h,4)|0,(g|0)!=0):0){d=g+16|0;h=c[d+4>>2]|0;b=e;c[b>>2]=c[d>>2];c[b+4>>2]=h;b=1}else b=0;l=i;return b|0}function Hn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=Zn(a,32)|0;g=h+16|0;c[g>>2]=e;c[g+4>>2]=f;c[h+24>>2]=ap(a,d)|0;e=(b|0)==3?2:b;g=a+64|0;d=c[g>>2]|0;b=c[d+56+(e<<2)>>2]|0;if(!b){f=Qp(a,17696,c[4353]|0)|0;c[(c[g>>2]|0)+56+(e<<2)>>2]=f;b=c[g>>2]|0}else{f=b;b=d}b=c[b+68+(e<<2)>>2]|0;if(!b){b=Qp(a,17732,c[4353]|0)|0;c[(c[g>>2]|0)+68+(e<<2)>>2]=b}bb[c[f>>2]&31](f,h,1)|0;bb[c[b>>2]&31](b,h,1)|0;return}function In(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=b+16|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=d+16|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0?1:(a>>>0<d>>>0|(a|0)==(d|0)&b>>>0<e>>>0)<<31>>31)|0}function Jn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b+24>>2]|0;e=c[d+24>>2]|0;return (b>>>0>e>>>0?1:(b>>>0<e>>>0)<<31>>31)|0}function Kn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=Ln(a,b,d,e)|0;if(!a)a=0;else a=c[a+24>>2]|0;return a|0}function Ln(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;a=c[(c[a+64>>2]|0)+68+(((b|0)==3?2:b)<<2)>>2]|0;if(!a)a=0;else{b=f+16|0;c[b>>2]=d;c[b+4>>2]=e;a=bb[c[a>>2]&31](a,f,4)|0}l=g;return a|0}function Mn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=(b|0)==3?2:b;b=Ln(a,f,d,e)|0;if(!b)b=0;else{e=a+64|0;d=c[(c[e>>2]|0)+56+(f<<2)>>2]|0;bb[c[d>>2]&31](d,b,2)|0;e=c[(c[e>>2]|0)+68+(f<<2)>>2]|0;bb[c[e>>2]&31](e,b,2)|0;cp(a,c[b+24>>2]|0)|0;_n(a,b);b=1}return b|0}function Nn(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[41987]=b;g=c[b+64>>2]|0;f=0;while(1){if((f|0)==3)break;h=g+56+(f<<2)|0;d=c[h>>2]|0;a:do if(d|0){d=bb[c[d>>2]&31](d,0,128)|0;while(1){if(!d)break a;e=c[h>>2]|0;e=bb[c[e>>2]&31](e,d,8)|0;if((a[c[d+24>>2]>>0]|0)!=37){d=e;continue}i=d+16|0;Mn(b,f,c[i>>2]|0,c[i+4>>2]|0)|0;d=e}}while(0);f=f+1|0}return}function On(a){a=a|0;c[41987]=a;a=a+64|0;Pn((c[a>>2]|0)+56|0);Pn((c[a>>2]|0)+68|0);return}function Pn(a){a=a|0;var b=0,d=0,e=0;b=0;while(1){if((b|0)==3)break;d=a+(b<<2)|0;e=c[d>>2]|0;if(e|0){Ll(e)|0;c[d>>2]=0}b=b+1|0}return}function Qn(a,b,c){a=a|0;b=b|0;c=c|0;if(!(hL(b,c,a)|0))a=0;else a=sJ(b)|0;return a|0}function Rn(a,b){a=a|0;b=b|0;return XL(b,a)|0}function Sn(a){a=a|0;return QL(a)|0}function Tn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+32|0;e=b+12|0;d=b;c[4446]=c[4443];c[4447]=c[4444];c[e>>2]=a;c[e+4>>2]=sJ(a)|0;c[e+8>>2]=0;c[d>>2]=17792;c[d+4>>2]=17668;c[d+8>>2]=17780;a=fr(e,d)|0;gp(0);l=b;return a|0}function Un(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((e|0)!=0?(h=b+8|0,f=c[h>>2]|0,(f|0)<(c[b+4>>2]|0)):0){i=(c[b>>2]|0)+f|0;b=0;g=a[i>>0]|0;f=d;d=i;while(1){d=d+1|0;a[f>>0]=g;b=b+1|0;if(!(g<<24>>24!=10&(b|0)<(e|0)))break;g=a[d>>0]|0;if(!(g<<24>>24))break;else f=f+1|0}c[h>>2]=(c[h>>2]|0)+b}else b=0;return b|0}function Vn(a){a=a|0;return 0}function Wn(a,b){a=a|0;b=b|0;a=_I(b)|0;WN(a|0,0,b|0)|0;return a|0}function Xn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=bJ(b,d)|0;if(d>>>0>c>>>0)WN(a+c|0,0,d-c|0)|0;return a|0}function Yn(a,b){a=a|0;b=b|0;$I(b);return}function Zn(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;a=c[a+64>>2]|0;a=ab[c[(c[a>>2]|0)+4>>2]&63](c[a+12>>2]|0,b)|0;if(!a)$l(1,81425,d)|0;l=d;return a|0}function _n(a,b){a=a|0;b=b|0;if(b|0){a=c[a+64>>2]|0;hb[c[(c[a>>2]|0)+12>>2]&31](c[a+12>>2]|0,b)}return}function $n(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b+16>>2]|0)+8|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=(c[d+16>>2]|0)+8|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0<d>>>0|(a|0)==(d|0)&b>>>0<e>>>0?-1:(a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0)&1)|0}function ao(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+16>>2]|0;if((a+28|0)!=(b|0))_n(c[a+24>>2]|0,b);return}function bo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=(c[c[b+16>>2]>>2]|0)>>>4;e=(c[c[d+16>>2]>>2]|0)>>>4;return (b>>>0<e>>>0?-1:b>>>0>e>>>0&1)|0}function co(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=167040;c[e>>2]=b;c[e+4>>2]=d;c[41992]=167032;a=c[a+40>>2]|0;a=bb[c[a>>2]&31](a,167952,4)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function eo(a){a=a|0;a=c[a+36>>2]|0;a=bb[c[a>>2]&31](a,0,128)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function fo(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=bb[c[d>>2]&31](d,b,8)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function go(a){a=a|0;a=c[a+36>>2]|0;a=bb[c[a>>2]&31](a,0,256)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function ho(a,b){a=a|0;b=b|0;var d=0;b=Rm(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=bb[c[d>>2]&31](d,b,16)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function io(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=co(a,b,c)|0;do if((d|0)!=0&(e|0)==0){e=to(a)|0;if((e|0)!=(a|0)?(f=co(e,b,c)|0,f|0):0){jo(a,f,1)|0;e=f;break}if(!(Cn(a,1,b,c)|0))e=0;else{e=ln(a,1)|0;e=ko(a,b,c,e,z)|0;lo(a,e);mo(a,e)}}while(0);return e|0}function jo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=to(a)|0;if((e|0)==(c[b+24>>2]|0)){e=b+8|0;e=co(a,c[e>>2]|0,c[e+4>>2]|0)|0;if((d|0)!=0&(e|0)==0){e=Mp(a)|0;if(!e)e=0;else{d=jo(e,b,d)|0;no(a,d);return d|0}}}else e=0;return e|0}function ko(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;g=Zn(b,64)|0;h=c[g>>2]|0;i=g+8|0;c[i>>2]=d;c[i+4>>2]=e;c[g>>2]=h&12|f<<4|1;c[g+24>>2]=to(b)|0;if(a[(to(b)|0)+24>>0]&64)Oo(g,81367,16,0)|0;return g|0}function lo(a,b){a=a|0;b=b|0;do{no(a,b);a=Mp(a)|0}while((a|0)!=0);return}function mo(b,c){b=b|0;c=c|0;if(a[(to(b)|0)+24>>0]&64)nm(b,c);uo(b,c);return}function no(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+40|0;Tl(c[e>>2]|0)|0;if((to(a)|0)==(a|0))d=b+28|0;else d=Zn(a,36)|0;c[d+16>>2]=b;e=c[e>>2]|0;bb[c[e>>2]&31](e,d,1)|0;e=c[a+36>>2]|0;bb[c[e>>2]&31](e,d,1)|0;return}function oo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;h=to(a)|0;if(Bn(a,1,b,g,0)|0){e=g;e=co(a,c[e>>2]|0,c[e+4>>2]|0)|0;if(!e)if(!((d|0)==0|(h|0)==(a|0))?(f=g,f=co(h,c[f>>2]|0,c[f+4>>2]|0)|0,(f|0)!=0):0)e=jo(a,f,1)|0;else i=6}else i=6;if((i|0)==6)if((d|0)!=0?(Bn(a,1,b,g,1)|0)!=0:0){i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;e=ln(a,1)|0;e=ko(a,h,i,e,z)|0;lo(a,e);mo(a,e);Fn(a,1,e)}else e=0;l=j;return e|0}function po(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[42001]=b;d=Vm(a,b)|0;while(1){if(!d)break;e=Wm(a,d,b)|0;cn(a,d,0);d=e}e=c[a+40>>2]|0;bb[c[e>>2]&31](e,167988,2)|0;e=c[a+36>>2]|0;bb[c[e>>2]&31](e,167988,2)|0;return}function qo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+8|0;e=f;if(co(b,c[e>>2]|0,c[e+4>>2]|0)|0){if((to(b)|0)==(b|0)){e=Vm(b,d)|0;while(1){if(!e)break;g=Wm(b,e,d)|0;en(b,e)|0;e=g}if(a[b+24>>0]&64)Hm(d);yo(b,d);Wo(d);g=f;Dn(b,1,c[g>>2]|0,c[g+4>>2]|0)}if(!(xq(b,d,54,0,0)|0))if((to(b)|0)==(b|0)){_n(b,d);e=0}else e=0;else e=-1}else e=-1;return e|0}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;d=c[b>>2]|0;do if(!(d&3))if((Mp(b)|0)==(a|0)){d=c[b>>2]|0;g=5;break}else{$l(1,81451,e)|0;f=-1;break}else g=5;while(0);a:do if((g|0)==5)switch(d&3){case 1:{f=qo(a,b)|0;break a}case 2:case 3:{f=en(a,b)|0;break a}case 0:{f=mn(b)|0;break a}default:{}}while(0);l=h;return f|0}function so(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=c[(c[a+40>>2]|0)+24>>2]|0;break}case 1:{b=c[a+24>>2]|0;break}case 0:{b=a;break}default:{}}return b|0}function to(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=(c[a+40>>2]|0)+24|0;break}case 1:{b=a+24|0;break}case 0:{b=a+60|0;break}default:{}}return c[b>>2]|0}function uo(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))Eo(b,d,100,0);else vo(b,d,c[e+48>>2]|0);return}function vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){vo(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=c[d>>2]|0;break}case 1:{e=(c[d>>2]|0)+12|0;break}case 2:{e=(c[d>>2]|0)+24|0;break}default:break a}e=c[e>>2]|0;if(e|0)ib[e&127](a,b,c[d+4>>2]|0)}while(0);return}function wo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+64>>2]|0;if(!(a[f+52>>0]|0))Eo(b,d,101,e);else xo(b,d,e,c[f+48>>2]|0);return}function xo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a:do if(e|0){xo(a,b,d,c[e+8>>2]|0);switch(c[b>>2]&3){case 0:{f=(c[e>>2]|0)+4|0;break}case 1:{f=(c[e>>2]|0)+16|0;break}case 2:{f=(c[e>>2]|0)+28|0;break}default:break a}f=c[f>>2]|0;if(f|0)kb[f&31](a,b,c[e+4>>2]|0,d)}while(0);return}function yo(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))Eo(b,d,102,0);else zo(b,d,c[e+48>>2]|0);return}function zo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){zo(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=(c[d>>2]|0)+8|0;break}case 1:{e=(c[d>>2]|0)+20|0;break}case 2:{e=(c[d>>2]|0)+32|0;break}default:break a}e=c[e>>2]|0;if(e|0)ib[e&127](a,b,c[d+4>>2]|0)}while(0);return}function Ao(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Zn(a,12)|0;c[e>>2]=b;c[e+4>>2]=d;d=(c[a+64>>2]|0)+48|0;c[e+8>>2]=c[d>>2];c[d>>2]=e;return}function Bo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=(c[a+64>>2]|0)+48|0;d=c[e>>2]|0;a:do if(!d)d=-1;else{if((c[d>>2]|0)!=(b|0)){while(1){if(!d){d=-1;break a}e=d+8|0;f=c[e>>2]|0;if((c[f>>2]|0)==(b|0))break;else d=f}if(f)c[e>>2]=c[f+8>>2]}else c[e>>2]=c[d+8>>2];_n(a,d);d=0}while(0);return d|0}function Co(a,b){a=a|0;b=b|0;var d=0;d=to(a)|0;a:do if((d|0)==(to(b)|0))switch(c[b>>2]&3){case 0:{while(1){if((b|0)==(a|0)){b=1;break a}b=Mp(b)|0;if(!b){b=0;break}}break}case 1:{b=b+8|0;b=(io(a,c[b>>2]|0,c[b+4>>2]|0,0)|0)!=0;break a}default:{b=(fn(a,b,0)|0)!=0;break a}}else b=0;while(0);return b&1|0}function Do(a){a=a|0;return c[a>>2]&3|0}function Eo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=Oo(a,81475,44,0)|0;switch(c|0){case 100:{e=Fo(f,b,100)|0;if(!(Go(e,b)|0))Ho(e,a,b,d)|0;break}case 101:{if(((Go(Fo(f,b,100)|0,b)|0)==0?(Go(Fo(f,b,102)|0,b)|0)==0:0)?(e=Fo(f,b,101)|0,(Go(e,b)|0)==0):0)Ho(e,a,b,d)|0;break}case 102:{Io(Fo(f,b,100)|0,b);Io(Fo(f,b,101)|0,b);e=Fo(f,b,102)|0;if(!(Go(e,b)|0))Ho(e,a,b,d)|0;break}default:$l(1,81487,g)|0}l=h;return}function Fo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;a:do switch(c[b>>2]&3){case 0:switch(d|0){case 100:{d=a+8|0;break a}case 101:{d=a+20|0;break a}case 102:{d=a+32|0;break a}default:{f=14;break a}}case 1:switch(d|0){case 100:{d=a+12|0;break a}case 101:{d=a+24|0;break a}case 102:{d=a+36|0;break a}default:{f=14;break a}}case 2:switch(d|0){case 100:{d=a+16|0;break a}case 101:{d=a+28|0;break a}case 102:{d=a+40|0;break a}default:{f=14;break a}}default:f=14}while(0);if((f|0)==14){$l(1,81521,e)|0;d=0}a=c[d>>2]|0;if(!a){a=so(b)|0;a=Qp(a,17884,c[4353]|0)|0;c[d>>2]=a}l=g;return a|0}function Go(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=Jo(b)|0;b=e+8|0;c[b>>2]=f;c[b+4>>2]=z;b=bb[c[a>>2]&31](a,e,4)|0;l=d;return b|0}function Ho(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Zn(so(d)|0,32)|0;c[f+20>>2]=d;g=Jo(d)|0;d=f+8|0;c[d>>2]=g;c[d+4>>2]=z;c[f+16>>2]=b;if(e|0){g=Zn(b,8)|0;c[f+24>>2]=g;c[g>>2]=e}bb[c[a>>2]&31](a,f,1)|0;return f|0}function Io(a,b){a=a|0;b=b|0;b=Go(a,b)|0;if(b|0)bb[c[a>>2]&31](a,b,2)|0;return}function Jo(a){a=a|0;a=a+8|0;z=c[a+4>>2]|0;return c[a>>2]|0}function Ko(a,b,d){a=a|0;b=b|0;d=d|0;Lo(b);_n(c[b+16>>2]|0,b);return}function Lo(a){a=a|0;var b=0,d=0;b=a+16|0;a=c[a+24>>2]|0;while(1){if(!a)break;d=c[a+4>>2]|0;_n(c[b>>2]|0,a);a=d}return}function Mo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=c[b+16>>2]|0;f=h;while(1){if(!f){f=0;break}g=c[f>>2]|0;if((g|0)==(d|0)){j=7;break}if((a[d>>0]|0)==(a[g>>0]|0)?(yJ(d,g)|0)==0:0){j=7;break}f=c[f+4>>2]|0;if((f|0)==(h|0)){f=0;break}}do if((j|0)==7){if(!(c[b>>2]&4)){if((f|0)==(h|0)&(e|0)==0){f=h;break}No(b,f,e);break}if(e)if((h|0)==(f|0))f=h;else $l(1,81546,i)|0}while(0);l=k;return f|0}function No(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a+16>>2]=b;e=c[a>>2]|0;d=d<<2&4;c[a>>2]=e&-5|d;if(e&2|0){e=(e&3|0)==3?-1:1;c[a+(e*48|0)+16>>2]=b;e=a+(e*48|0)|0;c[e>>2]=c[e>>2]&-5|d}return}function Oo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=so(a)|0;f=Mo(a,b,0)|0;a:do if((d|0)!=0&(f|0)==0){d=Zn(h,d)|0;c[d>>2]=ap(h,b)|0;switch(c[a>>2]&3){case 0:{Po(a,d);g=d;break a}case 1:{Po(a,d);g=d;break a}case 2:case 3:{Po(a,d);g=d;break a}default:{}}}else g=f;while(0);if(e|0)Mo(a,b,1)|0;return g|0}function Po(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+16>>2]|0;do if(d){e=d+4|0;f=c[e>>2]|0;if((f|0)==(d|0)){c[e>>2]=b;e=d;d=b;break}else{c[b+4>>2]=f;e=b;break}}else{e=b;d=b}while(0);c[d+4>>2]=e;if(!(c[a>>2]&4))No(a,b,0);return}function Qo(a,b){a=a|0;b=b|0;var d=0,e=0;e=so(a)|0;d=Mo(a,b,0)|0;if(!d)b=-1;else{Ro(a,d);if(!(c[a>>2]&3)){So(e,a,d);b=d}else{xq(to(e)|0,a,55,d,0)|0;b=d}cp(e,c[d>>2]|0)|0;_n(e,b);b=0}return b|0}function Ro(a,b){a=a|0;b=b|0;var d=0;a=c[a+16>>2]|0;do{d=a+4|0;a=c[d>>2]|0}while((a|0)!=(b|0));c[d>>2]=c[b+4>>2];return}function So(a,b,d){a=a|0;b=b|0;d=d|0;if((c[b+16>>2]|0)==(d|0)){a=c[d+4>>2]|0;No(b,(a|0)==(d|0)?0:a,0)}return}function To(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=(d|0)>-1;g=f?d:0-d|0;a:do switch(b|0){case 0:{Oo(a,c,g,e)|0;if(!f){b=Kp(a)|0;while(1){if(!b)break a;To(b,0,c,d,e);b=Lp(b)|0}}break}case 3:case 2:case 1:{d=(b|0)==1;b=eo(a)|0;while(1){if(!b)break a;b:do if(d)Oo(b,c,g,e)|0;else{f=Qm(a,b)|0;while(1){if(!f)break b;Oo(f,c,g,e)|0;f=Sm(a,f)|0}}while(0);b=fo(a,b)|0}}default:{}}while(0);return}function Uo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a:do switch(b|0){case 0:{xq(a,a,56,c,1)|0;break}case 3:case 2:case 1:{e=(b|0)==1;d=eo(a)|0;while(1){if(!d)break a;b:do if(e)Qo(d,c)|0;else{b=Qm(a,d)|0;while(1){if(!b)break b;Qo(b,c)|0;b=Sm(a,b)|0}}while(0);d=fo(a,d)|0}}default:{}}while(0);return}function Vo(a,b,c){a=a|0;b=b|0;c=c|0;Qo(b,c)|0;return}function Wo(a){a=a|0;var b=0,d=0,e=0;d=so(a)|0;b=a+16|0;a=c[b>>2]|0;if(a|0)do{e=a;a=c[a+4>>2]|0;cp(d,c[e>>2]|0)|0;_n(d,e)}while((a|0)!=(c[b>>2]|0));c[b>>2]=0;return}function Xo(a){a=a|0;return Sp(a,Yo(a)|0)|0}function Yo(a){a=a|0;var b=0,d=0;if(!a)d=168024;else d=(c[a+64>>2]|0)+20|0;b=c[d>>2]|0;if(!b){b=Qp(a,17920,c[4353]|0)|0;c[d>>2]=b;a=167096;c[a>>2]=-2147483648;c[a+4>>2]=0;a=167104;c[a>>2]=2147483647;c[a+4>>2]=-1}return b|0}function Zo(a,b){a=a|0;b=b|0;return _o(Yo(a)|0,b)|0}function _o(a,b){a=a|0;b=b|0;a=$o(a,b)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function $o(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+16>>2]=b;b=bb[c[a>>2]&31](a,e,4)|0;l=d;return b|0}function ap(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)d=0;else{e=Yo(a)|0;d=$o(e,b)|0;if(!d){d=(sJ(b)|0)+24|0;if(!a)d=_I(d)|0;else d=Zn(a,d)|0;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;a=d+20|0;yK(a,b)|0;c[d+16>>2]=a;bb[c[e>>2]&31](e,d,1)|0}else{e=d+8|0;b=e;b=IN(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;c[e>>2]=b;c[e+4>>2]=z}d=c[d+16>>2]|0}return d|0}function bp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b)d=0;else{e=Yo(a)|0;d=$o(e,b)|0;if(!d){d=(sJ(b)|0)+24|0;if(!a)d=_I(d)|0;else d=Zn(a,d)|0;g=167096;f=c[g+4>>2]|0;a=d+8|0;c[a>>2]=c[g>>2]|1;c[a+4>>2]=f;a=d+20|0;yK(a,b)|0;c[d+16>>2]=a;bb[c[e>>2]&31](e,d,1)|0}else{g=d+8|0;f=g;f=IN(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[g>>2]=f;c[g+4>>2]=z}d=c[d+16>>2]|0}return d|0}function cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((b|0)!=0?(d=Yo(a)|0,e=$o(d,b)|0,(e|0)!=0):0)if((c[e+16>>2]|0)==(b|0)?(b=e+8|0,g=b,g=IN(c[g>>2]|0,c[g+4>>2]|0,-1,-1)|0,f=z,b,c[b>>2]=g,c[b+4>>2]=f,b=167104,(g|0)==0&(f|0)==0|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0):0){Rp(a,d,e)|0;a=0}else a=0;else a=-1;return a|0}function dp(a){a=a|0;var b=0;if(!a)a=0;else{a=a+-12|0;b=167096;a=c[b>>2]&c[a>>2]}return a|0}function ep(a){a=a|0;var b=0,d=0,e=0;if(a|0){d=167096;a=a+-12|0;e=a;b=c[e+4>>2]|c[d+4>>2];c[a>>2]=c[e>>2]|c[d>>2];c[a+4>>2]=b}return}function fp(a){a=a|0;c[4489]=a;return}function gp(a){a=a|0;c[42011]=a;c[4489]=1;return}function hp(a,b){a=a|0;b=b|0;c[42012]=a;c[42013]=b;c[42014]=0;return}function ip(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!(c[42015]|0)){c[42015]=1;if(!(c[42016]|0))c[42016]=1;if(!(c[42007]|0))c[42007]=c[13853];if(!(c[42008]|0))c[42008]=c[13885];k=c[42017]|0;if(!((k|0)!=0?(c[k>>2]|0)!=0:0)){jp();k=kp(c[42007]|0,16384)|0;c[c[42017]>>2]=k}lp()}a:while(1){j=c[42018]|0;a[j>>0]=a[173931]|0;e=(c[(c[c[42017]>>2]|0)+28>>2]|0)+(c[42016]|0)|0;f=j;b:while(1){h=f;while(1){f=c[17960+(d[h>>0]<<2)>>2]|0;if(b[56680+(e<<1)>>1]|0){c[42019]=e;c[42020]=h}c:while(1){g=f&255;do{f=g+(b[56866+(e<<1)>>1]|0)|0;if((e|0)==(b[57076+(f<<1)>>1]|0))break c;k=b[57612+(e<<1)>>1]|0;e=k<<16>>16}while(k<<16>>16<=92);f=c[18984+(g<<2)>>2]|0}e=b[57822+(f<<1)>>1]|0;f=h+1|0;if((b[56866+(e<<1)>>1]|0)==219)break;else h=f}d:while(1){k=j;e:while(1){e=b[56680+(e<<1)>>1]|0;if(!(e<<16>>16)){e=b[56680+(c[42019]<<1)>>1]|0;f=c[42020]|0}else e=e<<16>>16;c[42009]=j;i=f;c[42010]=i-k;a[173931]=a[f>>0]|0;a[f>>0]=0;c[42018]=f;f:while(1){switch(e|0){case 1:{m=27;break a}case 12:{m=53;break a}case 13:{m=55;break a}case 14:{m=57;break a}case 15:{m=61;break a}case 16:{m=65;break a}case 17:{m=67;break a}case 18:{m=69;break a}case 19:{m=72;break a}case 20:{m=75;break a}case 21:{m=78;break a}case 23:{m=86;break a}case 33:{m=118;break a}case 39:case 38:case 37:case 36:{l=0;break a}case 2:{m=29;break b}case 3:{m=32;break b}case 4:{m=35;break b}case 5:{m=37;break b}case 6:{m=39;break b}case 7:{m=42;break b}case 8:{m=44;break b}case 9:{m=47;break b}case 10:{m=49;break b}case 11:{m=51;break b}case 22:{m=83;break b}case 24:{m=89;break b}case 25:{m=92;break b}case 26:{m=95;break b}case 27:{m=98;break b}case 28:{m=101;break b}case 29:{m=104;break b}case 30:{m=109;break b}case 31:{m=112;break b}case 32:{m=115;break b}case 34:{m=121;break b}case 0:break f;case 35:break;default:{m=134;break a}}h=c[42009]|0;a[f>>0]=a[173931]|0;e=c[42017]|0;g=c[e>>2]|0;if(!(c[g+44>>2]|0)){n=c[g+16>>2]|0;c[42022]=n;c[g>>2]=c[42007];g=c[e>>2]|0;c[g+44>>2]=1;e=n}else e=c[42022]|0;if((c[42018]|0)>>>0<=((c[g+4>>2]|0)+e|0)>>>0){m=128;break e}switch(up()|0){case 0:{m=132;break d}case 2:{m=133;break e}case 1:break;default:continue a}c[42018]=c[42009];e=(((c[42016]|0)+-1|0)/2|0)+36|0}a[f>>0]=a[173931]|0;f=c[42020]|0;e=c[42019]|0}if((m|0)==128){m=0;g=i-h|0;h=c[42009]|0;f=h+(g+-1)|0;c[42018]=f;e=sp()|0;i=tp(e)|0;j=c[42009]|0;if(!i)continue;else{m=129;break}}else if((m|0)==133){m=0;f=(c[(c[c[42017]>>2]|0)+4>>2]|0)+(c[42022]|0)|0;c[42018]=f;e=sp()|0;j=c[42009]|0;continue}}if((m|0)==129){m=0;f=h+g|0;c[42018]=f;e=i;continue}else if((m|0)==132){m=0;f=(c[42009]|0)+(i-h+-1)|0;c[42018]=f;e=sp()|0;j=c[42009]|0;continue}}switch(m|0){case 29:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[4489]=(c[4489]|0)+1;continue a}case 32:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=3;continue a}case 35:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 37:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 39:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=1;continue a}case 42:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 44:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;mp();continue a}case 47:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 49:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 51:{m=0;e=c[42010]|0;if(!e)continue a;c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;continue a}case 83:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=5;op();continue a}case 89:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;qp(83714);continue a}case 92:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;qp(81579);continue a}case 95:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[4489]=(c[4489]|0)+1;continue a}case 98:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;qp(e);continue a}case 101:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=7;c[42021]=1;op();continue a}case 104:{m=0;e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;n=(c[42021]|0)+-1|0;c[42021]=n;if(!n){m=108;break a}qp(c[42009]|0);continue a}case 109:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[42021]=(c[42021]|0)+1;qp(e);continue a}case 112:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;qp(e);c[4489]=(c[4489]|0)+1;continue a}case 115:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;qp(e);continue a}case 121:{m=0;f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;YL(e,f,1,c[42008]|0)|0;continue a}}}switch(m|0){case 27:{e=c[42010]|0;if(!e)l=-1;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=-1}break}case 53:{e=c[42010]|0;if(!e)l=259;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=259}break}case 55:{e=c[42010]|0;if(!e)l=260;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=260}break}case 57:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;if(!(c[42014]|0)){c[42014]=258;l=258}else l=258;break}case 61:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;if(!(c[42014]|0)){c[42014]=261;l=261}else l=261;break}case 65:{e=c[42010]|0;if(!e)l=263;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=263}break}case 67:{e=c[42010]|0;if(!e)l=262;else{c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=262}break}case 69:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=(c[42014]|0)==261?264:45;break}case 72:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;l=(c[42014]|0)==258?264:45;break}case 75:{f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[42037]=ap(c[41987]|0,e)|0;l=267;break}case 78:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;if(np()|0){m=(c[42010]|0)+-1|0;a[f>>0]=a[173931]|0;n=j+m|0;c[42018]=n;c[42009]=j;c[42010]=m;a[173931]=a[n>>0]|0;a[n>>0]=0;c[42018]=n}c[42037]=ap(c[41987]|0,c[42009]|0)|0;l=267;break}case 86:{e=c[42010]|0;if(e|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[(c[42009]|0)+(e+-1)>>0]|0)==10&1;c[42016]=1;pp();l=268;break}case 108:{c[42016]=1;rp();l=268;break}case 118:{f=c[42010]|0;e=c[42009]|0;if(f|0)c[(c[c[42017]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;l=a[e>>0]|0;break}case 134:{vp(81582);break}}return l|0}function jp(){var a=0,b=0,d=0;b=c[42017]|0;do if(!b){a=Cp(4)|0;c[42017]=a;if(!a)vp(81940);else{c[a>>2]=0;a=1;d=9;break}}else{a=c[42028]|0;if(0>=(a+-1|0)>>>0){a=a+8|0;b=wp(b,a<<2)|0;c[42017]=b;if(!b)vp(81940);else{d=b+(c[42028]<<2)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;d=9;break}}}while(0);if((d|0)==9)c[42028]=a;return}function kp(a,b){a=a|0;b=b|0;var d=0;d=Cp(48)|0;if(!d)vp(81895);c[d+12>>2]=b;b=Cp(b+2|0)|0;c[d+4>>2]=b;if(!b)vp(81895);else{c[d+20>>2]=1;yp(d,a);return d|0}return 0}function lp(){var b=0,d=0;d=c[42017]|0;b=c[d>>2]|0;c[42022]=c[b+16>>2];b=c[b+8>>2]|0;c[42018]=b;c[42009]=b;c[42007]=c[c[d>>2]>>2];a[173931]=a[b>>0]|0;return}function mp(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;d=g+16|0;e=g+12|0;h=c[42009]|0;b=h+1|0;i=(WJ(b,81879,4)|0)==0;b=i?h+5|0:b;c[f>>2]=e;c[f+4>>2]=g+20;c[f+8>>2]=d;f=dM(b,81884,f)|0;if((f|0)>0?(c[4489]=(c[e>>2]|0)+-1,(f|0)!=1):0){d=b+(c[d>>2]|0)|0;b=d;a:while(1){e=a[b>>0]|0;switch(e<<24>>24){case 0:case 34:break a;default:{}}b=b+1|0}if((b|0)!=(d|0)&e<<24>>24==34){a[b>>0]=0;Bp(d,b-d|0)}}l=g;return}function np(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+2080|0;i=j+8|0;f=j;b=j+1056|0;d=j+32|0;h=j+16|0;k=a[(c[42009]|0)+((c[42010]|0)+-1)>>0]|0;e=k<<24>>24==46;if(e|((k&255)+-48|0)>>>0<10)if(e?(Ap()|0)!=0:0)g=4;else b=0;else g=4;if((g|0)==4){k=c[42011]|0;dm(h,1024,b);gm(h,81790)|0;gm(h,c[42009]|0)|0;c[f>>2]=c[4489];qL(d,81834,f)|0;gm(h,d)|0;gm(h,(k|0)==0?81784:k)|0;gm(h,81851)|0;d=h+4|0;b=c[d>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){em(h,1)|0;b=c[d>>2]|0}a[b>>0]=0;b=c[h>>2]|0;c[d>>2]=b;c[i>>2]=b;$l(0,81876,i)|0;hm(h);b=1}l=j;return b|0}function op(){var b=0;b=c[42023]|0;if(!b){b=_I(1024)|0;c[42023]=b;c[42025]=b+1024}c[42024]=b;a[b>>0]=0;return}function pp(){c[42037]=ap(c[41987]|0,c[42023]|0)|0;a[c[42023]>>0]=0;return}function qp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=c[42024]|0;d=c[42023]|0;if(e>>>0>d>>>0){e=e+-1|0;f=3}a:while(1){if((f|0)==3)c[42024]=e;f=c[42025]|0;g=f;do{h=b;b=b+1|0;h=a[h>>0]|0;i=e;e=e+1|0;a[i>>0]=h;if(!(h<<24>>24))break a}while(e>>>0<f>>>0);c[42024]=e;f=d;i=g-f<<1;d=bJ(d,i)|0;c[42023]=d;c[42025]=d+i;e=d+(e-f)|0;f=3}c[42024]=e;return}function rp(){c[42037]=bp(c[41987]|0,c[42023]|0)|0;a[c[42023]>>0]=0;return}function sp(){var d=0,e=0,f=0,g=0,h=0;h=c[42018]|0;g=c[42009]|0;e=(c[(c[c[42017]>>2]|0)+28>>2]|0)+(c[42016]|0)|0;while(1){if(g>>>0>=h>>>0)break;d=a[g>>0]|0;if(!(d<<24>>24))d=1;else d=c[17960+((d&255)<<2)>>2]|0;if(b[56680+(e<<1)>>1]|0){c[42019]=e;c[42020]=g}a:while(1){f=d&255;do{d=f+(b[56866+(e<<1)>>1]|0)|0;if((e|0)==(b[57076+(d<<1)>>1]|0))break a;d=b[57612+(e<<1)>>1]|0;e=d<<16>>16}while(d<<16>>16<=92);d=c[18984+(f<<2)>>2]|0}g=g+1|0;e=b[57822+(d<<1)>>1]|0}return e|0}function tp(a){a=a|0;var d=0;if(b[56680+(a<<1)>>1]|0){d=c[42018]|0;c[42019]=a;c[42020]=d}while(1){d=(b[56866+(a<<1)>>1]|0)+1|0;if((a|0)==(b[57076+(d<<1)>>1]|0))break;a=b[57612+(a<<1)>>1]|0}d=b[57822+(d<<1)>>1]|0;return (d<<16>>16==92?0:d<<16>>16)|0}function up(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[42017]|0;g=c[j>>2]|0;i=c[g+4>>2]|0;f=c[42009]|0;l=c[42018]|0;k=l;if(l>>>0>(i+((c[42022]|0)+1)|0)>>>0)vp(81637);h=k-f|0;if(!(c[g+40>>2]|0))b=(h|0)==1?1:2;else{l=h+-1|0;h=i;g=0;while(1){if((g|0)>=(l|0))break;a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0;g=g+1|0}f=c[j>>2]|0;do if((c[f+44>>2]|0)==2){c[42022]=0;c[f+16>>2]=0;e=f;m=17}else{while(1){i=f+12|0;h=c[i>>2]|0;g=h-l+-1|0;if(g|0){m=16;break}g=f+4|0;j=c[g>>2]|0;if(!(c[f+20>>2]|0)){m=12;break}f=h<<1;f=(f|0)==0?(h>>>3)+h|0:f;c[i>>2]=f;f=wp(j,f+2|0)|0;c[g>>2]=f;if(!f)break;j=f+(k-j)|0;c[42018]=j;f=c[c[42017]>>2]|0;k=j}if((m|0)==12)c[g>>2]=0;else if((m|0)==16){d=bb[c[c[(c[42012]|0)+8>>2]>>2]&31](c[42013]|0,(c[f+4>>2]|0)+l|0,g>>>0<8192?g:8192)|0;e=c[c[42017]>>2]|0;c[42022]=d;c[e+16>>2]=d;if(!d){m=17;break}else{b=0;break}}vp(81693)}while(0);do if((m|0)==17)if(!l){xp(c[42007]|0);b=1;d=c[42022]|0;e=c[c[42017]>>2]|0;break}else{c[e+44>>2]=2;b=2;d=0;break}while(0);f=d+l|0;do if(f>>>0>(c[e+12>>2]|0)>>>0){m=wp(c[e+4>>2]|0,f+(d>>>1)|0)|0;d=c[42017]|0;c[(c[d>>2]|0)+4>>2]=m;d=c[(c[d>>2]|0)+4>>2]|0;if(!d)vp(81737);else{n=c[42022]|0;o=d;break}}else{n=d;o=c[e+4>>2]|0}while(0);n=n+l|0;c[42022]=n;a[o+n>>0]=0;o=c[42017]|0;a[(c[(c[o>>2]|0)+4>>2]|0)+((c[42022]|0)+1)>>0]=0;c[42009]=c[(c[o>>2]|0)+4>>2]}return b|0}function vp(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=c[13918]|0;c[b>>2]=a;AL(d,81633,b)|0;Ma(2)}function wp(a,b){a=a|0;b=b|0;return bJ(a,b)|0}function xp(a){a=a|0;var b=0,d=0,e=0;d=c[42017]|0;if((d|0)!=0?(b=c[d>>2]|0,(b|0)!=0):0)e=4;else{jp();b=kp(c[42007]|0,16384)|0;d=c[42017]|0;c[d>>2]=b;if(!d)b=0;else e=4}yp(b,a);lp();return}function yp(a,b){a=a|0;b=b|0;var d=0;d=c[(kJ()|0)>>2]|0;zp(a);c[a>>2]=b;c[a+40>>2]=1;b=c[42017]|0;if(!b)b=0;else b=c[b>>2]|0;if((b|0)!=(a|0)){c[a+32>>2]=1;c[a+36>>2]=0}c[a+24>>2]=0;c[(kJ()|0)>>2]=d;return}function zp(b){b=b|0;var d=0;if(b|0){c[b+16>>2]=0;d=b+4|0;a[c[d>>2]>>0]=0;a[(c[d>>2]|0)+1>>0]=0;c[b+8>>2]=c[d>>2];c[b+28>>2]=1;c[b+44>>2]=0;d=c[42017]|0;if(!d)d=0;else d=c[d>>2]|0;if((d|0)==(b|0))lp()}return}function Ap(){var b=0,d=0;d=c[42009]|0;b=(c[42010]|0)+-2|0;while(1){if((b|0)<=-1){b=0;break}if((a[d+b>>0]|0)==46){b=1;break}else b=b+-1|0}return b|0}function Bp(a,b){a=a|0;b=b|0;var d=0;d=c[42026]|0;if((d|0)<(b|0)){if(!d)d=_I(b+1|0)|0;else d=bJ(c[42027]|0,b+1|0)|0;c[42027]=d;c[42026]=b}else d=c[42027]|0;yK(d,a)|0;c[42011]=c[42027];return}function Cp(a){a=a|0;return _I(a)|0}function Dp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+2112|0;k=m+32|0;i=m+24|0;h=m+16|0;g=m+8|0;f=m;d=m+56|0;j=m+40|0;dm(j,1024,m+1080|0);e=c[42011]|0;if(e|0){gm(j,e)|0;gm(j,81990)|0}gm(j,b)|0;c[f>>2]=c[4489];qL(d,81993,f)|0;gm(j,d)|0;a:do if(!(a[c[42009]>>0]|0))switch(((c[42016]|0)+-1|0)/2|0|0){case 2:{c[g>>2]=16384;qL(d,82013,g)|0;gm(j,d)|0;b=c[42023]|0;if(!(a[b>>0]|0))break a;i=sJ(b)|0;gm(j,82075)|0;b=c[42023]|0;if((i|0)>80)a[b+80>>0]=0;gm(j,b)|0;break a}case 3:{c[h>>2]=16384;qL(d,82094,h)|0;gm(j,d)|0;b=c[42023]|0;if(!(a[b>>0]|0))break a;i=sJ(b)|0;gm(j,82162)|0;b=c[42023]|0;if((i|0)>80)a[b+80>>0]=0;gm(j,b)|0;break a}case 1:{c[i>>2]=16384;qL(d,82181,i)|0;gm(j,d)|0;break a}default:break a}else{gm(j,82005)|0;gm(j,c[42009]|0)|0;d=j+4|0;b=c[d>>2]|0;if(b>>>0>=(c[j+8>>2]|0)>>>0){em(j,1)|0;b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=39}while(0);e=j+4|0;b=c[e>>2]|0;d=j+8|0;if(b>>>0>=(c[d>>2]|0)>>>0){em(j,1)|0;b=c[e>>2]|0}c[e>>2]=b+1;a[b>>0]=10;b=c[e>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0){em(j,1)|0;b=c[e>>2]|0}a[b>>0]=0;i=c[j>>2]|0;c[e>>2]=i;c[k>>2]=i;$l(1,81876,k)|0;hm(j);l=m;return}function Ep(){Fp(c[42009]|0);return}function Fp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[42018]|0;a[j>>0]=a[173931]|0;i=c[42017]|0;e=c[i>>2]|0;d=c[e+4>>2]|0;if(j>>>0<(d+2|0)>>>0){f=d+((c[42022]|0)+2)|0;g=d+((c[e+12>>2]|0)+2)|0;k=d;h=e;while(1){if(f>>>0<=k>>>0)break;e=f+-1|0;k=g+-1|0;a[k>>0]=a[e>>0]|0;h=c[i>>2]|0;f=e;g=k;k=c[h+4>>2]|0}e=g-f|0;d=j+e|0;j=c[h+12>>2]|0;c[42022]=j;c[h+16>>2]=j;if(d>>>0<(k+2|0)>>>0)vp(82240);else{l=b+e|0;m=d}}else{l=b;m=j}b=m+-1|0;a[b>>0]=64;c[42009]=l;a[173931]=a[b>>0]|0;c[42018]=b;return}function Gp(){var a=0;a=c[42017]|0;if(!a)a=0;else a=c[a>>2]|0;zp(a);return}function Hp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+80|0;f=e;g=a+52|0;Tp(a,c[g>>2]|0,17604);a=f+8|0;c[a>>2]=b;c[a+4>>2]=d;d=c[g>>2]|0;d=bb[c[d>>2]&31](d,f,4)|0;l=e;return d|0}function Ip(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=Hp(b,d,e)|0;if(!f){f=Zn(b,72)|0;c[f+64>>2]=c[b+64>>2];g=f+24|0;h=c[b+24>>2]|0;c[g>>2]=h;a[g>>0]=h&255&-9;c[f+56>>2]=b;c[f+60>>2]=c[b+60>>2];b=f+8|0;c[b>>2]=d;c[b+4>>2]=e;kn(f)|0}return f|0}function Jp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;if(!(((b|0)!=0?(Bn(a,0,b,f,0)|0)!=0:0)?(e=f,e=Hp(a,c[e>>2]|0,c[e+4>>2]|0)|0,(e|0)!=0):0))if((d|0)!=0?(Bn(a,0,b,f,1)|0)!=0:0){e=f;e=Ip(a,c[e>>2]|0,c[e+4>>2]|0)|0;Fn(a,0,e)}else e=0;l=g;return e|0}function Kp(a){a=a|0;a=c[a+52>>2]|0;return bb[c[a>>2]&31](a,0,128)|0}function Lp(a){a=a|0;var b=0;b=Mp(a)|0;if(!b)a=0;else{b=c[b+52>>2]|0;a=bb[c[b>>2]&31](b,a,8)|0}return a|0}function Mp(a){a=a|0;return c[a+56>>2]|0}function Np(a,b){a=a|0;b=b|0;a=c[a+52>>2]|0;return bb[c[a>>2]&31](a,b,2)|0}function Op(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[42029]|0;e=(b|0)!=0;do if(!a)if(e){$I(b);a=0;break}else{a=_I(d)|0;break}else if(e){_n(a,b);a=0;break}else{a=Zn(a,d)|0;break}while(0);return a|0}function Pp(a,b,d){a=a|0;b=b|0;d=d|0;a=c[42029]|0;if(!a)$I(b);else _n(a,b);return}function Qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=b+28|0;f=c[e>>2]|0;c[e>>2]=2;c[42029]=a;d=Rl(b,d)|0;c[e>>2]=f;c[42029]=0;return d|0}function Rp(a,b,d){a=a|0;b=b|0;d=d|0;c[42029]=a;return bb[c[b>>2]&31](b,d,2)|0}function Sp(a,b){a=a|0;b=b|0;var d=0,e=0;d=(Ml(b,0,0)|0)+28|0;e=c[d>>2]|0;c[d>>2]=2;c[42029]=a;if(!(Ll(b)|0)){c[d>>2]=e;c[42029]=0;a=0}else a=1;return a|0}function Tp(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0?(Ml(b,0,0)|0)!=(c|0):0)Ml(b,c,0)|0;return}function Up(a,b){a=a|0;b=b|0;if(!(dp(a)|0))b=Wp(a,b)|0;else Vp(a,b)|0;return b|0}function Vp(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a[c>>0]=60;e=c;while(1){d=e+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;a[d>>0]=f;b=b+1|0;e=d}a[d>>0]=62;a[e+2>>0]=0;return c|0}function Wp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){a[d>>0]=34;l=a[b>>0]|0;q=0;g=((l+-45&255)<2|((l&255)+-48|0)>>>0<10)&1;h=0;i=0;j=0;e=d+1|0;f=b+1|0;b:while(1){k=e;while(1){if(!(l<<24>>24))break b;e=l&255;c:do if(l<<24>>24==34){a[k>>0]=92;m=g;n=1;k=k+1|0}else{if(!g){n=l<<24>>24>-1&(l<<24>>24!=95&(hK(e)|0)==0);m=0;n=n?1:h;break}switch(l<<24>>24){case 45:{n=(j|0)==0;m=n?g:0;n=n?h:1;break c}case 46:{n=(i|0)==0;m=n?g:0;n=n?h:1;i=i+1|0;break c}default:{n=(e+-48|0)>>>0<10;m=n?g:0;n=n?h:1;break c}}}while(0);e=k+1|0;a[k>>0]=l;p=f+1|0;o=a[f>>0]|0;j=j+1|0;f=c[4795]|0;if(!f){g=m;h=n;k=e;f=p;l=o;continue}g=o&255;h=o<<24>>24!=0;if((q&h?!(l<<24>>24==92|l<<24>>24>-1&((l+-45&255)>1&(hK(l<<24>>24)|0)==0)^1):0)?!(o<<24>>24>-1&((o+-45&255)>1&(hK(g)|0)==0)):0)break;if((j|0)<(f|0)|h^1){g=m;h=n;k=e;f=p;l=o;continue}if(l<<24>>24==92|l<<24>>24>-1&((hK(l<<24>>24)|0)==0&(l+-45&255)>1)^1){q=1;g=m;h=n;l=o;f=p;continue b}if(o<<24>>24>-1&((o+-45&255)>1&(hK(g)|0)==0)){q=1;g=m;h=n;l=o;f=p;continue b}a[e>>0]=92;a[k+2>>0]=10;g=m;h=1;j=0;k=k+3|0;f=p;l=o}a[e>>0]=92;a[k+2>>0]=10;q=0;g=m;h=1;j=0;l=o;e=k+3|0;f=p}a[k>>0]=34;a[k+1>>0]=0;if(!h){if((j|0)==1?((a[b>>0]|0)+-45&255)<2:0){b=d;break}else e=19184;while(1){f=c[e>>2]|0;if(!f)break a;if(!(jK(f,b)|0)){b=d;break}else e=e+4|0}}else b=d}else b=82272;while(0);return b|0}function Xp(a){a=a|0;return Up(a,Yp(a)|0)|0}function Yp(a){a=a|0;var b=0;b=((sJ(a)|0)<<1)+2|0;b=b>>>0>1024?b:1024;a=c[42031]|0;if(b>>>0>(c[42030]|0)>>>0){if(!a)a=_I(b)|0;else a=bJ(a,b)|0;c[42031]=a;c[42030]=b}return a|0}function Zp(a,b){a=a|0;b=b|0;a=Kp(a)|0;while(1){if(!a){a=0;break}if((_p(a)|0)==0?jo(a,b,0)|0:0){a=1;break}a=Lp(a)|0}return a|0}function _p(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=En(b)|0;if((h|0)!=0?(a[h>>0]|0)!=37:0)d=0;else e=3;a:do if((e|0)==3){d=pm(b)|0;b:do if(d|0?(f=pm(Mp(b)|0)|0,f|0):0){h=Tl(c[(pm(to(b)|0)|0)+8>>2]|0)|0;g=d+12|0;e=f+12|0;d=0;while(1){if((d|0)>=(h|0))break b;f=c[(c[g>>2]|0)+(d<<2)>>2]|0;if((f|0?(i=c[(c[e>>2]|0)+(d<<2)>>2]|0,i|0):0)?yJ(f,i)|0:0){d=0;break a}d=d+1|0}}while(0);d=km(b,0)|0;if(d)if((Tl(c[d+8>>2]|0)|0)>0)d=0;else return (Tl(c[d+12>>2]|0)|0)<1|0;else d=1}while(0);return d|0}function $p(b,d){b=b|0;d=d|0;var e=0,f=0;c[42032]=0;e=Jm(b,82282)|0;if((e|0?((a[e>>0]|0)+-48|0)>>>0<10:0)?(f=CL(e,0,10)|0,(f|0)==0|(f|0)>59):0)c[4795]=f;aq(b,1);if(((bq(b,d,1)|0)!=-1?(cq(b,d)|0)!=-1:0)?(dq(b,d)|0)!=-1:0){c[4795]=128;b=$a[c[(c[(c[b+64>>2]|0)+8>>2]|0)+8>>2]&31](d)|0}else b=-1;return b|0}function aq(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=Kp(a)|0;while(1){if(!d)break;aq(d,0);d=Lp(d)|0}a:do if(b|0){b=eo(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Qm(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Sm(a,d)|0}b=fo(a,b)|0}}while(0);return}function bq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if((e|0)==0?(Mp(b)|0)!=0:0){i=0;g=174185;k=94336}else{k=(a[b+24>>0]&1)==0?174185:82326;g=(tn(b)|0)==0;c[42033]=zm(b,2,96242,0)|0;c[42034]=zm(b,2,96251,0)|0;i=1;g=g?174185:82329}f=En(b)|0;if((f|0)!=0?(a[f>>0]|0)!=37:0){h=1;j=87638}else{h=0;j=174185;f=174185}do if((eq(b,d)|0)!=-1?(fq(b,d,g)|0)!=-1:0){g=(h|0)==0;if(h|i|0){if((fq(b,d,k)|0)==-1){f=-1;break}if((fq(b,d,87631)|0)==-1){f=-1;break}}if(!g?(qq(b,d,f)|0)==-1:0){f=-1;break}if(((fq(b,d,j)|0)!=-1?(fq(b,d,82337)|0)!=-1:0)?(c[42032]=(c[42032]|0)+1,(vq(b,d,e)|0)!=-1):0){c[b>>2]=c[b>>2]|8;f=0}else f=-1}else f=-1;while(0);return f|0}function cq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if((gq(a,b)|0)==-1)d=-1;else{k=km(to(a)|0,0)|0;i=(k|0)==0;j=k+12|0;k=k+8|0;h=eo(a)|0;while(1){if(!h){d=0;break a}if(hq(a,h,(c[h>>2]|0)>>>4,0)|0){if(i)d=0;else d=c[k>>2]|0;if((iq(h,b,d)|0)==-1){d=-1;break a}}g=Qm(a,h)|0;d=h;while(1){if(!g)break;f=g+-48|0;e=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0;if((d|0)!=(e|0)?(hq(a,e,(c[h>>2]|0)>>>4,0)|0)!=0:0){if(i)d=0;else d=c[k>>2]|0;if((iq(c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0,b,d)|0)==-1){d=-1;break a}d=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0}if(jq(a,g)|0){if(i)e=0;else e=c[j>>2]|0;if((kq(g,b,e)|0)==-1){d=-1;break a}}g=Sm(a,g)|0}h=fo(a,h)|0}}while(0);return d|0}function dq(a,b){a=a|0;b=b|0;c[42032]=(c[42032]|0)+-1;if((eq(a,b)|0)==-1)a=-1;else a=((fq(a,b,95830)|0)==-1)<<31>>31;return a|0}function eq(a,b){a=a|0;b=b|0;var d=0;d=c[42032]|0;while(1){if((d|0)<=0){d=0;break}if((fq(a,b,134899)|0)==-1){d=-1;break}else d=d+-1|0}return d|0}function fq(a,b,d){a=a|0;b=b|0;d=d|0;return ab[c[(c[(c[a+64>>2]|0)+8>>2]|0)+4>>2]&63](b,d)|0}function gq(a,b){a=a|0;b=b|0;a=Kp(a)|0;while(1){if(!a){a=0;break}if(!(_p(a)|0)){if((bq(a,b,0)|0)==-1){a=-1;break}if((cq(a,b)|0)==-1){a=-1;break}if((dq(a,b)|0)==-1){a=-1;break}}else gq(a,b)|0;a=Lp(a)|0}return a|0}function hq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((Zp(a,b)|0)==0?(sq(a,b,c,d)|0)!=0:0)if((tq(a,b)|0)==0?(uq(b)|0)==0:0)e=5;else a=1;else e=5;if((e|0)==5)a=0;return a|0}function iq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=so(a)|0;do if((eq(d,b)|0)!=-1?(lq(a,b)|0)!=-1:0){if((nq(a)|0)==0?(oq(a,b,c)|0)==-1:0){a=-1;break}a=fq(d,b,82293)|0}else a=-1;while(0);return a|0}function jq(a,b){a=a|0;b=b|0;a=Kp(a)|0;while(1){if(!a){a=1;break}if((_p(a)|0)==0?fn(a,b,0)|0:0){a=0;break}a=Lp(a)|0}return a|0}function kq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]&3;g=c[((e|0)==3?a:a+48|0)+40>>2]|0;e=c[((e|0)==2?a:a+-48|0)+40>>2]|0;f=so(g)|0;do if((((((eq(f,b)|0)!=-1?(lq(g,b)|0)!=-1:0)?(mq(a,b,c[42033]|0)|0)!=-1:0)?(g=(rn(so(g)|0)|0)!=0,(fq(f,b,g?85095:85100)|0)!=-1):0)?(lq(e,b)|0)!=-1:0)?(mq(a,b,c[42034]|0)|0)!=-1:0){if(!(nq(a)|0)){if((oq(a,b,d)|0)==-1){a=-1;break}}else if((pq(a,b,1)|0)==-1){a=-1;break}a=fq(f,b,82293)|0}else a=-1;while(0);return a|0}function lq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;g=i;d=i+8|0;e=En(a)|0;f=so(a)|0;if(!e){j=a+8|0;a=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=a;qL(d,82313,g)|0;if((fq(f,b,d)|0)==-1)a=-1;else h=4}else if((qq(f,b,e)|0)==-1)a=-1;else h=4;if((h|0)==4)a=0;l=i;return a|0}function mq(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if((d|0)!=0?(e=so(b)|0,f=Km(b,d)|0,(a[f>>0]|0)!=0):0)if((fq(e,c,93017)|0)==-1)b=-1;else{do if(dp(f)|0){if((qq(e,c,f)|0)==-1){b=-1;break a}}else{b=XJ(f,58)|0;if(!b)if((rq(e,c,f,0)|0)==-1){b=-1;break a}else break;a[b>>0]=0;if((rq(e,c,f,0)|0)==-1){b=-1;break a}if((fq(e,c,93017)|0)==-1){b=-1;break a}if((rq(e,c,b+1|0,0)|0)==-1){b=-1;break a}a[b>>0]=58}while(0);b=0}else b=0;while(0);return b|0}function nq(a){a=a|0;return (c[a>>2]|0)>>>3&1|0}function oq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!(c[a>>2]&2)){e=0;k=4}else{switch(pq(a,b,0)|0){case -1:{e=-1;break a}case 0:{e=0;k=4;break a}default:{}}e=1;k=4}while(0);b:do if((k|0)==4){f=pm(a)|0;j=so(a)|0;c:do if(f){i=f+12|0;h=bb[c[d>>2]&31](d,0,128)|0;while(1){if(!h)break c;do if(c[a>>2]&2){g=c[42033]|0;if(g|0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0)break;g=c[42034]|0;if(!((g|0)!=0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0))k=12}else k=12;while(0);if((k|0)==12){k=0;f=h+16|0;if((c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)!=(c[h+12>>2]|0)){g=e+1|0;if(e){if((fq(j,b,82308)|0)==-1){e=-1;break b}if((eq(j,b)|0)==-1){e=-1;break b}}else{if((eq(j,b)|0)==-1){e=-1;break b}if((fq(j,b,82305)|0)==-1){e=-1;break b}c[42032]=(c[42032]|0)+1}if((qq(j,b,c[h+8>>2]|0)|0)==-1){e=-1;break b}if((fq(j,b,82311)|0)==-1){e=-1;break b}if((qq(j,b,c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)|0)==-1){e=-1;break b}else e=g}}h=bb[c[d>>2]&31](d,h,8)|0}}while(0);if((e|0)>0){if((fq(j,b,82303)|0)==-1){e=-1;break}c[42032]=(c[42032]|0)+-1}c[a>>2]=c[a>>2]|8;e=0}while(0);return e|0}function pq(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=En(b)|0;b=so(b)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)if((fq(b,c,82296)|0)!=-1?(qq(b,c,e)|0)!=-1:0)if((d|0)!=0?(fq(b,c,82303)|0)==-1:0)b=-1;else{b=1;f=7}else b=-1;else{b=0;f=7}return b|0}function qq(a,b,c){a=a|0;b=b|0;c=c|0;return rq(a,b,c,1)|0}function rq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!d)c=Wp(c,Yp(c)|0)|0;else c=Xp(c)|0;return fq(a,b,c)|0}function sq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do if(0<e>>>0|(0==(e|0)?(c[b>>2]|0)>>>4>>>0<d>>>0:0))b=0;else{b=Tm(a,b)|0;while(1){if(!b){b=1;break a}if(0<e>>>0|(0==(e|0)?(c[c[b+40>>2]>>2]|0)>>>4>>>0<d>>>0:0)){b=0;break a}b=Um(a,b)|0}}while(0);return b|0}function tq(a,b){a=a|0;b=b|0;if(!(Tm(a,b)|0))a=(Qm(a,b)|0)==0&1;else a=0;return a|0}function uq(a){a=a|0;var b=0,d=0,e=0;a=pm(a)|0;a:do if(!a)a=0;else{d=a+8|0;e=c[d>>2]|0;b=a+12|0;a=bb[c[e>>2]&31](e,0,128)|0;while(1){if(!a){a=0;break a}if((c[(c[b>>2]|0)+(c[a+16>>2]<<2)>>2]|0)!=(c[a+12>>2]|0)){a=1;break a}e=c[d>>2]|0;a=bb[c[e>>2]&31](e,a,8)|0}}while(0);return a|0}function vq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=km(a,0)|0;if(e)if(((wq(a,b,96286,c[e+16>>2]|0,d)|0)!=-1?(wq(a,b,96273,c[e+8>>2]|0,d)|0)!=-1:0)?(wq(a,b,96237,c[e+12>>2]|0,d)|0)!=-1:0)f=5;else a=-1;else f=5;if((f|0)==5)a=0;return a|0}function wq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=(g|0)!=0;if(m)l=0;else l=Xl(f,0)|0;k=(l|0)==0;j=bb[c[f>>2]&31](f,0,128)|0;g=0;while(1){if(!j){n=23;break}i=j+12|0;n=c[i>>2]|0;if((n|0)!=0?(a[n>>0]|0)!=0:0)n=12;else n=7;do if((n|0)==7){n=0;if(!(a[j+22>>0]|0)){if(!k){h=bb[c[l>>2]&31](l,j,4)|0;o=c[h+12>>2]|0;if(o|0?a[o>>0]|0:0){n=12;break}if(!(a[h+22>>0]|0))n=12}}else n=12}while(0);if((n|0)==12){n=0;h=g+1|0;if(g){if((fq(b,d,82308)|0)==-1){g=-1;break}if((eq(b,d)|0)==-1){g=-1;break}}else{if((eq(b,d)|0)==-1){g=-1;break}if((fq(b,d,e)|0)==-1){g=-1;break}if((fq(b,d,82305)|0)==-1){g=-1;break}c[42032]=(c[42032]|0)+1}if((qq(b,d,c[j+8>>2]|0)|0)==-1){g=-1;break}if((fq(b,d,82311)|0)==-1){g=-1;break}if((qq(b,d,c[i>>2]|0)|0)==-1){g=-1;break}else g=h}j=bb[c[f>>2]&31](f,j,8)|0}do if((n|0)==23){if((g|0)>0){c[42032]=(c[42032]|0)+-1;if((g|0)!=1){if((fq(b,d,134901)|0)==-1){g=-1;break}if((eq(b,d)|0)==-1){g=-1;break}}g=(fq(b,d,82340)|0)==-1;if(m|g){g=g<<31>>31;break}}else if(m){g=0;break}Xl(f,l)|0;g=0}while(0);return g|0}function xq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(c[b>>2]&3){case 0:{g=19;break}case 1:{g=20;break}case 3:case 2:{g=21;break}default:{}}b=ab[g&63](a,b)|0;if(!b)b=-1;else{Bq(a,b,d,e,g,f);b=0}return b|0}function yq(a,b){a=a|0;b=b|0;if((so(b)|0)!=(a|0))b=fn(a,b,0)|0;return b|0}function zq(a,b){a=a|0;b=b|0;if((so(b)|0)!=(a|0))b=jo(a,b,0)|0;return b|0}function Aq(a,b){a=a|0;b=b|0;return a|0}function Bq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=(f|0)!=0;if(h)ib[c&127](a,b,d);g=Kp(a)|0;while(1){if(!g)break;i=ab[e&63](g,b)|0;if(i|0)Bq(g,i,c,d,e,f);g=Lp(g)|0}if(!h)ib[c&127](a,b,d);return}function Cq(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[42035]=0;c[42036]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=75;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=_I(k*6|3)|0;if(h){UN(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;UN(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{$I(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=76;break a}case 4:{s=75;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==6){e=0;s=76;break}e=a[82344+p>>0]|0;j=e<<24>>24;do if(e<<24>>24!=-18){h=c[42036]|0;if((h|0)==-2){h=ip()|0;c[42036]=h}if((h|0)>=1)if(h>>>0<269)i=d[82424+h>>0]|0;else i=2;else{c[42036]=0;i=0}h=i+j|0;if(h>>>0<=59?(i|0)==(d[82693+h>>0]|0):0){p=a[82753+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[42036]=-2;g=g+4|0;c[g>>2]=c[42037];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[82813+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[42036]|0;b:do switch(q|0){case 0:{c[42035]=(c[42035]|0)+1;Dp(125369);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=76;break a}else{h=o;break b}else{c[42036]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<24>>24==18)break;if((h|0)==(f|0)){e=1;s=76;break a}e=h+-2|0;g=g+-4|0;h=e;e=a[82344+(b[e>>1]|0)>>0]|0}g=g+4|0;c[g>>2]=c[42037];e=1;j=3}else s=23}do if((s|0)==23){s=0;i=d[82893+h>>0]|0;e=c[g+(1-i<<2)>>2]|0;c:do switch(h|0){case 2:{Dq();Eq();break}case 3:{if(c[42038]|0){Dq();Eq();mn(c[42038]|0)|0;c[41987]=0;c[42038]=0}break}case 6:{Fq(c[g>>2]|0,c[g+-4>>2]|0,c[g+-8>>2]|0);break}case 7:{e=c[g>>2]|0;break}case 8:{e=0;break}case 9:{e=1;break}case 10:{e=0;break}case 11:{e=0;break}case 12:{e=1;break}case 21:if(!(c[g+-4>>2]|0)){Hq();break c}else{Gq();break c}case 24:{Iq();break}case 25:{Iq();break}case 26:{e=1;break}case 27:{e=0;break}case 30:{Jq(c[g>>2]|0,0,0);break}case 31:{Jq(c[g+-8>>2]|0,c[g>>2]|0,0);break}case 32:{Jq(c[g+-16>>2]|0,c[g+-8>>2]|0,c[g>>2]|0);break}case 33:{Kq(c[g+-8>>2]|0,c[g+-4>>2]|0);break}case 34:{Kq(258,0);break}case 35:{e=258;break}case 36:{e=259;break}case 37:{e=260;break}case 38:{e=c[g+-4>>2]|0;break}case 39:{e=0;break}case 48:{Lq(c[g+-8>>2]|0,c[g>>2]|0);break}case 49:{Lq(c[g>>2]|0,0);break}case 51:{Mq(c[g>>2]|0);break}case 52:{Nq();break}case 53:{e=c[g>>2]|0;break}case 54:{e=0;break}case 55:{e=0;break}case 59:{e=c[g>>2]|0;break}case 60:{e=c[g>>2]|0;break}case 61:{e=c[g>>2]|0;break}case 62:{e=Oq(c[g+-8>>2]|0,c[g>>2]|0)|0;break}default:{}}while(0);i=0-i|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[82956+h>>0]|0)+-24|0;p=b[i>>1]|0;h=p+(a[83019+e>>0]|0)|0;if(h>>>0<60?(d[82693+h>>0]|0)==(p|0):0){e=a[82753+h>>0]|0;j=q;h=i;break}e=a[83054+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==75){Dp(125382);e=2;s=76}if((s|0)==76)if((f|0)!=(r|0))$I(f);l=t;return e|0}function Dq(){var a=0,b=0;a=c[42039]|0;while(1){if(!a)break;Wq(a+8|0);Wq((c[42039]|0)+24|0);Wq((c[42039]|0)+16|0);b=Pq(c[42039]|0)|0;c[42039]=b;a=b}return}function Eq(){Ep();Nn(c[42038]|0);return}function Fq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[42038]|0;if(!f){a[168160]=d&1|(e&255)<<1&2|a[168160]&-12|8;f=c[42041]|0;a[g>>0]=a[168160]|0;a[g+1>>0]=a[168161]|0;a[g+2>>0]=a[168162]|0;a[g+3>>0]=a[168163]|0;f=hn(b,g,f)|0;c[42038]=f}c[41987]=f;c[42039]=Qq(c[42039]|0,f)|0;cp(0,b)|0;l=h;return}function Gq(){var b=0,d=0,e=0,f=0,g=0,h=0;Vq(2);e=c[42039]|0;f=a[83089]|0;h=0;b=e+24|0;while(1){d=c[b>>2]|0;if(!d)break;if(((c[d>>2]|0)==267?(g=c[d+4>>2]|0,(a[g>>0]|0)==f<<24>>24):0)?(yJ(g,83089)|0)==0:0)b=c[d+8>>2]|0;else b=h;h=b;b=d+12|0}b=e+16|0;a:while(1){e=c[b>>2]|0;b=e+12|0;if(!(c[b>>2]|0))break;d=e+4|0;if((c[e>>2]|0)==262){e=c[d>>2]|0;d=eo(e)|0;while(1){if(!d)continue a;g=jo(c[c[42039]>>2]|0,d,0)|0;br(g,0,c[b>>2]|0,h);d=fo(e,d)|0}}else while(1){d=c[d>>2]|0;if(!d)continue a;br(c[d+4>>2]|0,c[d+8>>2]|0,c[b>>2]|0,h);d=d+12|0}}Wq((c[42039]|0)+8|0);Wq((c[42039]|0)+16|0);Wq((c[42039]|0)+24|0);c[(c[42039]|0)+4>>2]=0;return}function Hq(){var a=0;Vq(1);a=(c[42039]|0)+8|0;while(1){a=c[a>>2]|0;if(!a)break;ar(c[a+4>>2]|0);a=a+12|0}Wq((c[42039]|0)+8|0);Wq((c[42039]|0)+24|0);Wq((c[42039]|0)+16|0);c[(c[42039]|0)+4>>2]=0;return}function Iq(){var a=0,b=0;a=c[42039]|0;b=c[a+8>>2]|0;if(!b){b=c[a+4>>2]|0;if(!b)b=0;else{b=$q(b)|0;a=c[42039]|0}c[a+4>>2]=0}else{b=_q(b)|0;a=c[42039]|0;c[a+12>>2]=0;c[a+8>>2]=0}if(b|0)Sq(a+16|0,b);return}function Jq(a,b,d){a=a|0;b=b|0;d=d|0;if(d)b=Yq(b,d)|0;d=Zq(oo(c[c[42039]>>2]|0,a,1)|0,b)|0;Sq((c[42039]|0)+8|0,d);cp(c[42038]|0,a)|0;return}function Kq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(d|0)Uq();d=(c[42039]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;if(!(c[d+8>>2]|0))Uq();d=d+12|0}g=(b|0)==260?2:(b|0)==259&1;Vq(g);b=c[42039]|0;d=b+24|0;while(1){f=c[d>>2]|0;if(!f)break;do if((c[f>>2]|0)!=267){d=c[f+4>>2]|0;e=c[b>>2]|0;if(!((a[d+21>>0]|0)!=0&(e|0)==(c[42038]|0))){d=zm(e,g,c[d+8>>2]|0,c[f+8>>2]|0)|0;b=c[42039]|0;if((c[b>>2]|0)!=(c[42038]|0))break}a[d+22>>0]=1}while(0);d=f+12|0}Wq(b+24|0);return}function Lq(a,b){a=a|0;b=b|0;b=Rq(a,b)|0;Sq((c[42039]|0)+24|0,b);return}function Mq(a){a=a|0;var b=0;b=c[42039]|0;c[42039]=Qq(b,Jp(c[b>>2]|0,a,1)|0)|0;cp(c[42038]|0,a)|0;return}function Nq(){var a=0,b=0;a=c[42039]|0;b=c[a>>2]|0;a=Pq(a)|0;c[42039]=a;c[a+4>>2]=b;return}function Oq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+1024|0;f=g;d=sJ(a)|0;d=d+1+(sJ(b)|0)|0;if(d>>>0<1025)d=f;else d=_I(d)|0;yK(d,a)|0;JL(d,b)|0;e=ap(c[42038]|0,d)|0;cp(c[42038]|0,a)|0;cp(c[42038]|0,b)|0;if((d|0)!=(f|0))$I(d);l=g;return e|0}function Pq(a){a=a|0;var b=0;b=c[(c[42039]|0)+32>>2]|0;_n(c[42038]|0,a);return b|0}function Qq(a,b){a=a|0;b=b|0;var d=0;d=Zn(c[42038]|0,36)|0;c[d+32>>2]=a;c[d>>2]=b;return d|0}function Rq(a,b){a=a|0;b=b|0;return Tq(267,a,b)|0}function Sq(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;e=c[d>>2]|0;if(e|0)c[e+12>>2]=b;c[d>>2]=b;if(!(c[a>>2]|0))c[a>>2]=b;return}function Tq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Zn(c[42038]|0,16)|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;return e|0}function Uq(){var a=0;a=l;l=l+16|0;$l(0,83093,a)|0;l=a;return}\nfunction EI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+112|0;E=H+80|0;D=H+64|0;C=H+48|0;G=4;F=_I(40)|0;c[F>>2]=0;w=H+32|0;x=H+16|0;y=H;A=H+96|0;G=SN(169984,1,F|0,G|0)|0;F=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1)e=z;else e=0;a:while(1){if(e|0){e=-2;break}g=a+4|0;o=0;fa(94,c[g>>2]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}c[42535]=0;c[42536]=0;o=0;fa(95,c[g>>2]<<1|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}m=(c[42538]|0)/2|0;c[42539]=m;c[42540]=m+-1;m=c[g>>2]|0;g=c[a>>2]|0;e=0;f=-1;i=t;while(1){if((e|0)>=(m|0))break;I=+h[g+(e<<4)>>3];v=i>I;u=v?e:f;e=e+1|0;f=u;i=v?I:i}v=g+(f<<4)|0;c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];v=g+(((f|0)==0?m:f)+-1<<4)|0;c[w>>2]=c[v>>2];c[w+4>>2]=c[v+4>>2];c[w+8>>2]=c[v+8>>2];c[w+12>>2]=c[v+12>>2];v=g+(((f|0)==(m+-1|0)?0:f+1|0)<<4)|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];I=+h[x>>3];if((+h[w>>3]==I?I==+h[y>>3]:0)?+h[y+8>>3]>+h[x+8>>3]:0)v=15;else v=12;b:do if((v|0)==12){v=0;o=0;e=aa(17,w|0,x|0,y|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,G|0,F|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((e|0)==1){g=c[42542]|0;e=c[42543]|0;f=0;while(1){if((f|0)>=(m|0))break b;j=c[a>>2]|0;if(!(((f|0)>0?(B=f+-1|0,+h[j+(f<<4)>>3]==+h[j+(B<<4)>>3]):0)?+h[j+(f<<4)+8>>3]==+h[j+(B<<4)+8>>3]:0)){u=c[42535]|0;c[g+(u<<3)>>2]=j+(f<<4);c[g+(u<<3)+4>>2]=g+(((u|0)%(m|0)|0)<<3);c[e+(u<<2)>>2]=g+(u<<3);c[42535]=u+1}f=f+1|0}}else v=15}while(0);c:do if((v|0)==15){v=0;j=c[42542]|0;e=c[42543]|0;g=m;while(1){f=g+-1|0;if((g|0)<=0)break c;k=c[a>>2]|0;if(((g|0)<(m|0)?+h[k+(f<<4)>>3]==+h[k+(g<<4)>>3]:0)?+h[k+(f<<4)+8>>3]==+h[k+(g<<4)+8>>3]:0){g=f;continue}g=c[42535]|0;c[j+(g<<3)>>2]=k+(f<<4);c[j+(g<<3)+4>>2]=j+(((g|0)%(m|0)|0)<<3);c[e+(g<<2)>>2]=j+(g<<3);c[42535]=g+1;g=f}}while(0);o=0;ga(27,e|0,c[42535]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}j=0;e=c[42536]|0;d:while(1){if((j|0)>=(e|0)){s=0;break}k=j+1|0;g=k;while(1){if((g|0)>=(e|0)){j=k;continue d}o=0;ga(28,j|0,g|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue a}g=g+1|0;e=c[42536]|0}}while(1){if((s|0)>=(e|0))break;o=0;f=$(39,s|0,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;s=s+1|0}if((s|0)==(e|0)){e=c[13918]|0;o=0;c[C>>2]=125503;c[C+4>>2]=192;c[C+8>>2]=125514;aa(13,e|0,125484,C|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=41;break}}u=b+16|0;k=0;while(1){if((k|0)>=(e|0))break;o=0;f=$(39,k|0,u|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;k=k+1|0}if((k|0)==(e|0)){e=c[13918]|0;o=0;c[D>>2]=125503;c[D+4>>2]=200;c[D+8>>2]=125547;aa(13,e|0,125484,D|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=48;break}}o=0;e=$(40,s|0,k|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=TN(c[f>>2]|0,G|0,F|0)|0;if(!g)Ua(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}if(!e){e=c[13918]|0;o=0;c[E>>2]=125503;c[E+4>>2]=207;c[E+8>>2]=125585;aa(13,e|0,125484,E|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}o=0;fa(96,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=53;break}}if((s|0)==(k|0)){o=0;fa(96,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=TN(c[e>>2]|0,G|0,F|0)|0;if(!f)Ua(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=56;break}}c[A>>2]=b;c[A+4>>2]=0;f=A+8|0;c[f>>2]=u;c[A+12>>2]=0;o=0;ga(29,1,A|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}c[42541]=c[42539];q=s;e:while(1){if((q|0)==-1){g=f;e=0;break}r=c[42545]|0;c[r+(q*52|0)>>2]=2;e=0;while(1){if((e|0)>=3){v=65;break}v=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(v|0?(c[v>>2]|0)==1:0){v=68;break}e=e+1|0}if((v|0)==65){v=0;if((e|0)==3){e=c[42537]|0;k=c[e+(c[42540]<<2)>>2]|0;o=0;e=aa(17,u|0,c[c[e+(c[42539]<<2)>>2]>>2]|0,c[k>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?f:k;j=j?k:f}else v=68}if((v|0)==68){v=0;k=c[r+(q*52|0)+4+(e<<4)>>2]|0;m=c[r+(q*52|0)+4+(e<<4)+4>>2]|0;o=0;e=aa(17,c[k>>2]|0,c[c[r+(q*52|0)+4+(((e+1|0)%3|0)<<4)+4>>2]>>2]|0,c[m>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?k:m;j=j?m:k}do if((q|0)==(s|0)){o=0;ga(29,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(29,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}e=0}else{m=c[42537]|0;if((c[m+(c[42539]<<2)>>2]|0)!=(n|0)?(c[m+(c[42540]<<2)>>2]|0)!=(n|0):0){o=0;j=_(29,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(30,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(29,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((j|0)<=(c[42541]|0)){e=0;break}c[42541]=j;e=0;break}o=0;k=_(29,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(30,1,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ga(29,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=TN(c[e>>2]|0,G|0,F|0)|0;if(!g)Ua(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((k|0)>=(c[42541]|0)){e=0;break}c[42541]=k;e=0}while(0);while(1){if((e|0)>=3){q=-1;continue e}g=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(g|0?(c[g>>2]|0)==1:0)break;e=e+1|0}q=(g-(c[42545]|0)|0)/52|0}while(1){if(!g)break;g=c[g+4>>2]|0;e=e+1|0}o=0;fa(96,e|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){j=TN(c[g>>2]|0,G|0,F|0)|0;if(!j)Ua(g|0,p|0);z=p}else j=-1;if((j|0)==1)e=z;else{v=94;break}}if((v|0)==41)e=-1;else if((v|0)==48)e=-1;else if((v|0)==53){c[d+4>>2]=2;e=c[42544]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==56){c[d+4>>2]=2;e=c[42544]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==94){c[d+4>>2]=e;g=c[42544]|0;while(1){e=e+-1|0;if(!f)break;F=g+(e<<4)|0;E=c[f>>2]|0;c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];f=c[f+4>>2]|0}c[d>>2]=g;e=0}$I(G|0);l=H;return e|0}function FI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+64|0;e=h+48|0;g=h+32|0;f=h+16|0;d=h;if((c[42548]|0)<(a|0)){b=c[42542]|0;if(!b){g=_I(a<<3)|0;c[42542]=g;if(!g){g=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=523;c[d+8>>2]=125753;AL(g,125484,d)|0;Ua(169984,1)}g=_I(a<<2)|0;c[42543]=g;if(!g){g=c[13918]|0;c[f>>2]=125503;c[f+4>>2]=527;c[f+8>>2]=125772;AL(g,125484,f)|0;Ua(169984,1)}}else{f=bJ(b,a<<3)|0;c[42542]=f;if(!f){f=c[13918]|0;c[g>>2]=125503;c[g+4>>2]=533;c[g+8>>2]=125792;AL(f,125484,g)|0;Ua(169984,1)}g=bJ(c[42543]|0,a<<2)|0;c[42543]=g;if(!g){g=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=539;c[e+8>>2]=125812;AL(g,125484,e)|0;Ua(169984,1)}}c[42548]=a}l=h;return}function GI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42538]|0)<(a|0)){b=c[42537]|0;if(!b){e=_I(a<<2)|0;c[42537]=e;if(!e){e=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=573;c[d+8>>2]=125708;AL(e,125484,d)|0;Ua(169984,1)}}else{d=bJ(b,a<<2)|0;c[42537]=d;if(!d){d=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=580;c[e+8>>2]=125730;AL(d,125484,e)|0;Ua(169984,1)}}c[42538]=a}l=f;return}function HI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>0.0?1:d<0.0?2:3)|0}function II(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a:while(1){if((b|0)>3)e=0;else{b=9;break}while(1){if((e|0)>=(b|0)){b=8;break a}f=e+1|0;d=(f|0)%(b|0)|0;g=(e+2|0)%(b|0)|0;if(!(QI(e,g,a,b)|0))e=f;else break}RI(c[a+(e<<2)>>2]|0,c[a+(d<<2)>>2]|0,c[a+(g<<2)>>2]|0);b=b+-1|0;while(1){if((d|0)>=(b|0))continue a;g=d+1|0;c[a+(d<<2)>>2]=c[a+(g<<2)>>2];d=g}}if((b|0)==8){a=c[13918]|0;c[h>>2]=125503;c[h+4>>2]=324;c[h+8>>2]=125648;AL(a,125484,h)|0}else if((b|0)==9)RI(c[a>>2]|0,c[a+4>>2]|0,c[a+8>>2]|0);l=i;return}function JI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=c[42545]|0;j=i+(a*52|0)|0;k=i+(b*52|0)|0;g=0;while(1){if((g|0)==3)break;l=i+(a*52|0)+4+(g<<4)|0;m=i+(a*52|0)+4+(g<<4)+4|0;n=i+(a*52|0)+4+(g<<4)+12|0;f=0;while(1){if((f|0)==3)break;o=c[c[l>>2]>>2]|0;h=c[c[i+(b*52|0)+4+(f<<4)>>2]>>2]|0;if((o|0)==(h|0)){d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;if((c[c[m>>2]>>2]|0)==(d|0))e=10;else e=8}else{d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;e=8}if(((e|0)==8?(e=0,(o|0)==(d|0)):0)?(c[c[m>>2]>>2]|0)==(h|0):0)e=10;if((e|0)==10){c[n>>2]=k;c[i+(b*52|0)+4+(f<<4)+12>>2]=j}f=f+1|0}g=g+1|0}return}function KI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[42545]|0;d=0;e=0;while(1){if((e|0)==3)break;d=d+((HI(c[c[f+(a*52|0)+4+(e<<4)>>2]>>2]|0,c[c[f+(a*52|0)+4+(e<<4)+4>>2]>>2]|0,b)|0)!=2&1)|0;e=e+1|0}return ((d|0)==3|(d|0)==0)&1|0}function LI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[42545]|0;e=d+(a*52|0)|0;a:do if(!(c[e>>2]|0)){c[e>>2]=1;if((a|0)==(b|0))d=1;else{f=0;while(1){if((f|0)>=3)break;e=c[d+(a*52|0)+4+(f<<4)+12>>2]|0;if(e){if(LI((e-d|0)/52|0,b)|0){d=1;break a}d=c[42545]|0}f=f+1|0}c[d+(a*52|0)>>2]=0;d=0}}else d=0;while(0);return d|0}function MI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42546]|0)<(a|0)){b=c[42544]|0;if(!b){e=_I(a<<4)|0;c[42544]=e;if(!e){e=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=593;c[d+8>>2]=125611;AL(e,125484,d)|0;Ua(169984,1)}}else{d=bJ(b,a<<4)|0;c[42544]=d;if(!d){d=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=599;c[e+8>>2]=125629;AL(d,125484,e)|0;Ua(169984,1)}}c[42546]=a}l=f;return}function NI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[42540]|0;e=c[42539]|0;f=(d|0)>=(e|0);if((a|0)==1)if(f){c[b+4>>2]=c[(c[42537]|0)+(e<<2)>>2];a=170156;d=-1}else{a=170156;d=-1}else if(f){c[b+4>>2]=c[(c[42537]|0)+(d<<2)>>2];a=170160;d=1}else{a=170160;d=1}f=(c[a>>2]|0)+d|0;c[a>>2]=f;c[(c[42537]|0)+(f<<2)>>2]=b;return}function OI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[42541]|0;g=c[42537]|0;b=c[42539]|0;while(1){if((b|0)>=(f|0)){e=4;break}d=b+1|0;if((HI(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==1)break;else b=d}a:do if((e|0)==4){b=c[42540]|0;while(1){if((b|0)<=(f|0)){b=f;break a}d=b+-1|0;if((HI(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==2)break;else b=d}}while(0);return b|0}function PI(a,b){a=a|0;b=b|0;c[((a|0)==1?170160:170156)>>2]=b;return}function QI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[c[d+(((a+-1+e|0)%(e|0)|0)<<2)>>2]>>2]|0;i=c[c[d+(a<<2)>>2]>>2]|0;g=c[c[d+(((a+1|0)%(e|0)|0)<<2)>>2]>>2]|0;k=(HI(f,i,g)|0)==1;j=c[c[d+(b<<2)>>2]>>2]|0;if(k)if((HI(i,j,f)|0)==1){f=HI(j,i,g)|0;g=1;h=5}else f=0;else{f=HI(i,j,g)|0;g=2;h=5}a:do if((h|0)==5)if((f|0)==(g|0)){f=0;while(1){if((f|0)>=(e|0)){f=1;break a}g=f;f=f+1|0;h=(f|0)%(e|0)|0;if((h|0)==(b|0)|((g|0)==(b|0)|((g|0)==(a|0)|(h|0)==(a|0))))continue;if(TI(i,j,c[c[d+(g<<2)>>2]>>2]|0,c[c[d+(h<<2)>>2]>>2]|0)|0){f=0;break}}}else f=0;while(0);return f|0}function RI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[42536]|0;f=c[42547]|0;if((e|0)<(f|0))h=e;else{SI(f+20|0);h=c[42536]|0}g=c[42545]|0;c[42536]=h+1;f=g+(h*52|0)|0;c[f>>2]=0;c[g+(h*52|0)+4>>2]=a;c[g+(h*52|0)+8>>2]=b;c[g+(h*52|0)+16>>2]=0;c[g+(h*52|0)+20>>2]=b;c[g+(h*52|0)+24>>2]=d;c[g+(h*52|0)+32>>2]=0;c[g+(h*52|0)+36>>2]=d;c[g+(h*52|0)+40>>2]=a;c[g+(h*52|0)+48>>2]=0;e=0;while(1){if((e|0)==3)break;c[g+(h*52|0)+4+(e<<4)+8>>2]=f;e=e+1|0}return}function SI(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[42547]|0)<(a|0)){b=c[42545]|0;if(!b){e=_I(a*52|0)|0;c[42545]=e;if(!e){e=c[13918]|0;c[d>>2]=125503;c[d+4>>2]=552;c[d+8>>2]=125669;AL(e,125484,d)|0;Ua(169984,1)}}else{d=bJ(b,a*52|0)|0;c[42545]=d;if(!d){d=c[13918]|0;c[e>>2]=125503;c[e+4>>2]=558;c[e+8>>2]=125688;AL(d,125484,e)|0;Ua(169984,1)}}c[42547]=a}l=f;return}function TI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=HI(a,b,c)|0;if((((f|0)!=3?(g=HI(a,b,d)|0,(g|0)!=3):0)?(h=HI(c,d,a)|0,(h|0)!=3):0)?(e=HI(c,d,b)|0,(e|0)!=3):0)return ((f|0)==1^(g|0)==1)&((h|0)==1^(e|0)==1)&1|0;if(((UI(a,b,c)|0)==0?(UI(a,b,d)|0)==0:0)?(UI(c,d,a)|0)==0:0)return (UI(c,d,b)|0)!=0|0;return 1}function UI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;e=+h[a>>3];g=+h[b>>3]-e;f=+h[a+8>>3];d=+h[b+8>>3]-f;e=+h[c>>3]-e;f=+h[c+8>>3]-f;if((HI(a,b,c)|0)==3?f*d+e*g>=0.0:0)a=f*f+e*e<=d*d+g*g&1;else a=0;return a|0}function VI(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;d=+h[a+24>>3];a:do if(d<1.0e-07&d>-1.0e-07)a=WI(a,b)|0;else{g=+h[a+16>>3]/(d*3.0);f=+h[a+8>>3]/d;e=g*g;d=g*2.0*e-g*f+ +h[a>>3]/d;e=f*.3333333333333333-e;e=e*e*4.0*e;f=d*d+e;if(!(f<0.0)){i=(+C(+f)-d)*.5;e=+KJ(i);d=+KJ(-d-i)+e;h[b>>3]=d;if(f>0.0)a=1;else{d=d*-.5;h[b+16>>3]=d;a=1;c=7}}else{i=+K(+(+C(+-f)),+-d);d=+KJ(+C(+-e)*.5)*2.0;h[b>>3]=d*+E(+(i*.3333333333333333));h[b+8>>3]=+E(+((i+6.283185307179586)*.3333333333333333))*d;d=+E(+((i+-6.283185307179586)*.3333333333333333))*d;a=2;c=7}if((c|0)==7){h[b+(a<<3)>>3]=d;a=3}c=0;while(1){if((c|0)>=(a|0))break a;j=b+(c<<3)|0;h[j>>3]=+h[j>>3]-g;c=c+1|0}}while(0);return a|0}function WI(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+16>>3];do if(!(c<1.0e-07&c>-1.0e-07)){d=+h[a+8>>3]/(c*2.0);c=d*d-+h[a>>3]/c;if(!(c<0.0))if(c==0.0){h[b>>3]=-d;a=1;break}else{c=+C(+c)-d;h[b>>3]=c;h[b+8>>3]=d*-2.0-c;a=2;break}else a=0}else a=XI(a,b)|0;while(0);return a|0}function XI(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a+8>>3];c=+h[a>>3];if(d<1.0e-07&d>-1.0e-07)a=c<1.0e-07&c>-1.0e-07?4:0;else{h[b>>3]=-c/d;a=1}return a|0}function YI(a){a=a|0;$I(c[a>>2]|0);$I(a);return}function ZI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=c[a+4>>2]|0;i=(e*3|0)+-2|0;d=c[42550]|0;if((i|0)>(c[42549]|0)){if(!d)d=_I(i<<4)|0;else d=bJ(d,i<<4)|0;c[42550]=d;c[42549]=i;h=d;g=d}else{h=d;g=d}f=c[a>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];VN(h+16|0,f|0,16)|0;e=e+-1|0;d=1;a=2;while(1){if((d|0)>=(e|0))break;j=h+(a+2<<4)|0;k=h+(a+1<<4)|0;m=h+(a<<4)|0;l=f+(d<<4)|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];VN(k|0,l|0,16)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];d=d+1|0;a=a+3|0}l=h+(a<<4)|0;m=f+(d<<4)|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];VN(h+(a+1<<4)|0,m|0,16)|0;c[b+4>>2]=i;c[b>>2]=g;return}function _I(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[42551]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=170244+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[42551]=o&~(1<<b);else{c[g+12>>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[42553]|0;if(m>>>0>n>>>0){if(d|0){b=2<<a;b=d<<a&(b|0-b);b=(b&0-b)+-1|0;i=b>>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=170244+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=o&~(1<<e);c[42551]=a}else{c[d+12>>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[42556]|0;b=n>>>3;d=170244+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[42551]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[42553]=h;c[42556]=f;w=i;l=x;return w|0}j=c[42552]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[170508+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0<d>>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=170508+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[42552]=j&~(1<<b);break}}else{c[f+16+(((c[f+16>>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[42556]|0;b=n>>>3;d=170244+(b<<1<<2)|0;b=1<<b;if(!(o&b)){c[42551]=o|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[42553]=h;c[42556]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[42552]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<<o;n=(v+520192|0)>>>16&4;v=v<<n;j=(v+245760|0)>>>16&2;j=14-(n|o|j)+(v<<j>>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[170508+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0<e>>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<<j;a=k&(a|0-a);if(!a){n=m;break}o=(a&0-a)+-1|0;i=o>>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[170508+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0<e>>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[42553]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|0}f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=170508+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<<a);c[42552]=e;break}}else{c[f+16+(((c[f+16>>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<<b;if(!(a&b)){c[42551]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<<v;u=(w+520192|0)>>>16&4;w=w<<u;b=(w+245760|0)>>>16&2;b=14-(u|v|b)+(w<<b>>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=170508+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<b;if(!(e&a)){c[42552]=e|a;c[d>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[42553]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[42556]|0;if(b>>>0>15){w=a+n|0;c[42556]=w;c[42553]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[42553]=0;c[42556]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[42554]|0;if(i>>>0>n>>>0){u=i-n|0;c[42554]=u;w=c[42557]|0;v=w+n|0;c[42557]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[42669]|0)){c[42671]=4096;c[42670]=4096;c[42672]=-1;c[42673]=-1;c[42674]=0;c[42662]=0;c[42669]=p&-16^1431655768;a=4096}else a=c[42671]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[42661]|0;if(a|0?(o=c[42659]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[42662]&4)){d=c[42557]|0;c:do if(d){e=170652;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=XN(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=XN(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[42670]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[42659]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[42661]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=XN(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[42671]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((XN(a|0)|0)==(-1|0)){XN(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[42662]=c[42662]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=XN(m|0)|0,s=XN(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0<s>>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[42659]|0)+h|0;c[42659]=b;if(b>>>0>(c[42660]|0)>>>0)c[42660]=b;j=c[42557]|0;do if(j){b=170652;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[42554]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[42557]=v;c[42554]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[42558]=c[42673];break}if(g>>>0<(c[42555]|0)>>>0)c[42555]=g;a=g+h|0;b=170652;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=170652;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[42556]|0)==(b|0)){w=(c[42553]|0)+i|0;c[42553]=w;c[42556]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[42551]=c[42551]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=170508+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[42552]=c[42552]&~(1<<d);break d}while(0);c[a+24>>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<<b;if(!(a&b)){c[42551]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<<v;u=(w+520192|0)>>>16&4;w=w<<u;b=(w+245760|0)>>>16&2;b=14-(u|v|b)+(w<<b>>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=170508+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[42552]|0;d=1<<b;if(!(a&d)){c[42552]=a|d;c[e>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[42554]|0)+i|0;c[42554]=w;c[42557]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=170652;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;b=a+8|0;d=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[42557]=v;c[42554]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[42558]=c[42673];d=a+4|0;c[d>>2]=27;c[b>>2]=c[42663];c[b+4>>2]=c[42664];c[b+8>>2]=c[42665];c[b+12>>2]=c[42666];c[42663]=g;c[42664]=h;c[42666]=0;c[42665]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+8|0)>>>0<w>>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<<b;if(!(a&b)){c[42551]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{v=(b+1048320|0)>>>16&8;w=b<<v;u=(w+520192|0)>>>16&4;w=w<<u;d=(w+245760|0)>>>16&2;d=14-(u|v|d)+(w<<d>>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=170508+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[42552]|0;a=1<<d;if(!(b&a)){c[42552]=b|a;c[e>>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[42555]|0;if((w|0)==0|g>>>0<w>>>0)c[42555]=g;c[42663]=g;c[42664]=h;c[42666]=0;c[42560]=c[42669];c[42559]=-1;c[42564]=170244;c[42563]=170244;c[42566]=170252;c[42565]=170252;c[42568]=170260;c[42567]=170260;c[42570]=170268;c[42569]=170268;c[42572]=170276;c[42571]=170276;c[42574]=170284;c[42573]=170284;c[42576]=170292;c[42575]=170292;c[42578]=170300;c[42577]=170300;c[42580]=170308;c[42579]=170308;c[42582]=170316;c[42581]=170316;c[42584]=170324;c[42583]=170324;c[42586]=170332;c[42585]=170332;c[42588]=170340;c[42587]=170340;c[42590]=170348;c[42589]=170348;c[42592]=170356;c[42591]=170356;c[42594]=170364;c[42593]=170364;c[42596]=170372;c[42595]=170372;c[42598]=170380;c[42597]=170380;c[42600]=170388;c[42599]=170388;c[42602]=170396;c[42601]=170396;c[42604]=170404;c[42603]=170404;c[42606]=170412;c[42605]=170412;c[42608]=170420;c[42607]=170420;c[42610]=170428;c[42609]=170428;c[42612]=170436;c[42611]=170436;c[42614]=170444;c[42613]=170444;c[42616]=170452;c[42615]=170452;c[42618]=170460;c[42617]=170460;c[42620]=170468;c[42619]=170468;c[42622]=170476;c[42621]=170476;c[42624]=170484;c[42623]=170484;c[42626]=170492;c[42625]=170492;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[42557]=v;c[42554]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[42558]=c[42673]}while(0);b=c[42554]|0;if(b>>>0>n>>>0){u=b-n|0;c[42554]=u;w=c[42557]|0;v=w+n|0;c[42557]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(kJ()|0)>>2]=12;w=0;l=x;return w|0}function $I(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[42555]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0<f>>>0)return;if((c[42556]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[42553]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[42551]=c[42551]&~(1<<d);i=h;b=g;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=170508+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[42552]=c[42552]&~(1<<b);i=h;b=g;break}}else{c[f+16+(((c[f+16>>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[42557]|0)==(j|0)){j=(c[42554]|0)+b|0;c[42554]=j;c[42557]=i;c[i+4>>2]=j|1;if((i|0)!=(c[42556]|0))return;c[42556]=0;c[42553]=0;return}if((c[42556]|0)==(j|0)){j=(c[42553]|0)+b|0;c[42553]=j;c[42556]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[42551]=c[42551]&~(1<<d);break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=170508+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[42552]=c[42552]&~(1<<a);break}}else{c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[42556]|0)){c[42553]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=170244+(a<<1<<2)|0;b=c[42551]|0;a=1<<a;if(!(b&a)){c[42551]=b|a;a=d;b=d+8|0}else{b=d+8|0;a=c[b>>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<<h;g=(j+520192|0)>>>16&4;j=j<<g;a=(j+245760|0)>>>16&2;a=14-(g|h|a)+(j<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=170508+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[42552]|0;d=1<<a;do if(b&d){b=f<<((a|0)==31?0:25-(a>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=d;c[i+24>>2]=0;break}}else{c[42552]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[42559]|0)+-1|0;c[42559]=j;if(!j)a=170660;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[42559]=-1;return}function aJ(a,b){a=a|0;b=b|0;var d=0;if(a){d=O(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=_I(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;WN(a|0,0,d|0)|0;return a|0}function bJ(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=_I(b)|0;return b|0}if(b>>>0>4294967231){c[(kJ()|0)>>2]=12;b=0;return b|0}d=cJ(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=_I(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;UN(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;$I(a);b=d;return b|0}function cJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[42671]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;dJ(k,d);return a|0}if((c[42557]|0)==(i|0)){k=(c[42554]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[42557]=e;c[42554]=d;return a|0}if((c[42556]|0)==(i|0)){e=(c[42553]|0)+d|0;if(e>>>0<b>>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[42553]=d;c[42556]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0<b>>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[42551]=c[42551]&~(1<<f);break}else{c[e+12>>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=170508+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[42552]=c[42552]&~(1<<d);break}}else{c[h+16+(((c[h+16>>2]|0)!=(i|0)&1)<<2)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=j|m&1|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;dJ(i,k);return a|0}return 0}function dJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[42556]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[42553]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[42551]=c[42551]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=170508+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[42552]=c[42552]&~(1<<d);break}}else{c[g+16+(((c[g+16>>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[42557]|0)==(i|0)){i=(c[42554]|0)+b|0;c[42554]=i;c[42557]=h;c[h+4>>2]=i|1;if((h|0)!=(c[42556]|0))return;c[42556]=0;c[42553]=0;return}if((c[42556]|0)==(i|0)){i=(c[42553]|0)+b|0;c[42553]=i;c[42556]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[42551]=c[42551]&~(1<<d);break}else{c[a+12>>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=170508+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[42552]=c[42552]&~(1<<b);break}}else{c[g+16+(((c[g+16>>2]|0)!=(i|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[42556]|0)){c[42553]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=170244+(b<<1<<2)|0;a=c[42551]|0;b=1<<b;if(!(a&b)){c[42551]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)b=31;else{g=(b+1048320|0)>>>16&8;i=b<<g;e=(i+520192|0)>>>16&4;i=i<<e;b=(i+245760|0)>>>16&2;b=14-(e|g|b)+(i<<b>>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=170508+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[42552]|0;d=1<<b;if(!(a&d)){c[42552]=a|d;c[e>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=d;c[h+24>>2]=0;return}}function eJ(a,b){a=a|0;b=b|0;if(a>>>0<9){b=_I(b)|0;return b|0}else{b=fJ(a,b)|0;return b|0}return 0}function fJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;a=a>>>0>16?a:16;if(a+-1&a){d=16;while(1)if(d>>>0<a>>>0)d=d<<1;else{a=d;break}}if((-64-a|0)>>>0<=b>>>0){c[(kJ()|0)>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=_I(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;dJ(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;dJ(f,i)}i=b+8|0;return i|0}function gJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=lJ(c[a+60>>2]|0)|0;a=jJ(Da(6,d|0)|0)|0;l=b;return a|0}function hJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=jJ(ua(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function iJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((jJ(ta(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function jJ(a){a=a|0;if(a>>>0>4294963200){c[(kJ()|0)>>2]=0-a;a=-1}return a|0}function kJ(){return 170700}function lJ(a){a=a|0;return a|0}function mJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=9;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ca(54,f|0)|0):0)a[b+75>>0]=-1;f=nJ(b,d,e)|0;l=g;return f|0}function nJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=jJ(va(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=jJ(va(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function oJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=jJ(Ea(91,e|0)|0)|0;l=d;return b|0}function pJ(){return}function qJ(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=l;l=l+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){c[(kJ()|0)>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=jJ(wa(192,h|0)|0)|0}else{c[(kJ()|0)>>2]=22;a=-1}while(0);l=i;return a|0}function rJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(sJ(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=O(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function sJ(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function tJ(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[125833+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=125921;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=125921;else{f=125921;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return uJ(f,c[e+20>>2]|0)|0}function uJ(a,b){a=a|0;b=b|0;return vJ(a,b)|0}function vJ(a,b){a=a|0;b=b|0;if(!b)b=0;else b=wJ(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function wJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=xJ(c[b+8>>2]|0,o)|0;f=xJ(c[b+12>>2]|0,o)|0;g=xJ(c[b+16>>2]|0,o)|0;a:do if((h>>>0<d>>>2>>>0?(n=d-(h<<2)|0,f>>>0<n>>>0&g>>>0<n>>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=xJ(c[b+(g<<2)>>2]|0,o)|0;g=xJ(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0<d>>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=yJ(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=xJ(c[b+(f<<2)>>2]|0,o)|0;f=xJ(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0<d>>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function xJ(a,b){a=a|0;b=b|0;var c=0;c=RN(a|0)|0;return ((b|0)==0?a:c)|0}function yJ(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function zJ(a){a=a|0;return tJ(a,c[(AJ()|0)+188>>2]|0)|0}function AJ(){return BJ()|0}function BJ(){return 55800}function CJ(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0.0,f=0.0;f=a*a;d=f*(f*f)*(f*1.58969099521155e-10+-2.5050760253406863e-08)+(f*(f*2.7557313707070068e-06+-1.984126982985795e-04)+.00833333333332249);e=f*a;if(!c)a=e*(f*d+-.16666666666666632)+a;else a=a-(e*.16666666666666632+(f*(b*.5-e*d)-b));return +a}function DJ(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;m=+h[j>>3]+-1.0;k=m*(m*.5);i=m/(m+2.0);l=i*i;g=l*l;h[j>>3]=m-k;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=m-a-k+i*(k+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));l=a*1.4426950407214463;k=+(e+(f>>>20)|0);i=l+k;a=i+(l+(k-i)+(g*1.4426950407214463+(g+a)*1.6751713164886512e-10))}return +a}function EJ(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=ON(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+EJ(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function FJ(a,b){a=+a;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0;c=a*a;d=c*c;e=c*.5;f=1.0-e;return +(f+(1.0-f-e+(c*(c*(c*(c*2.480158728947673e-05+-.001388888888887411)+.0416666666666666)+d*d*(c*(2.087572321298175e-09-c*1.1359647557788195e-11)+-2.7557314351390663e-07))-a*b)))}function GJ(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;k=+h[j>>3]+-1.0;i=k*(k*.5);l=k/(k+2.0);m=l*l;g=m*m;h[j>>3]=k-i;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=k-a-i+l*(i+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+m*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));m=a*.4342944818781689;i=+(e+(f>>>20)|0);l=i*.30102999566361177;k=l+m;a=k+(m+(l-k)+(g*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return +a}function HJ(a,b){a=+a;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+48|0;m=r+16|0;n=r;h[j>>3]=a;d=c[j>>2]|0;i=c[j+4>>2]|0;o=ON(d|0,i|0,63)|0;q=i&2147483647;do if(q>>>0<1074752123)if((i&1048575|0)!=598523){d=(o|0)!=0;if(q>>>0<1073928573)if(d){g=a+1.5707963267341256;k=g+6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+6.077100506506192e-11;d=-1;break}else{g=a+-1.5707963267341256;k=g+-6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+-6.077100506506192e-11;d=1;break}else if(d){g=a+3.1415926534682512;k=g+1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.2154201013012384e-10;d=-2;break}else{g=a+-3.1415926534682512;k=g+-1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.2154201013012384e-10;d=2;break}}else p=21;else{if(q>>>0<1075594812)if(q>>>0<1075183037){if((q|0)==1074977148){p=21;break}if(!o){g=a+-4.712388980202377;k=g+-1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.8231301519518578e-10;d=3;break}else{g=a+4.712388980202377;k=g+1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.8231301519518578e-10;d=-3;break}}else{if((q|0)==1075388923){p=21;break}if(!o){g=a+-6.2831853069365025;k=g+-2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+-2.430840202602477e-10;d=4;break}else{g=a+6.2831853069365025;k=g+2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+2.430840202602477e-10;d=-4;break}}if(q>>>0>=1094263291){if(q>>>0>2146435071){k=a-a;h[b+8>>3]=k;h[b>>3]=k;d=0;break}c[j>>2]=d;c[j+4>>2]=i&1048575|1096810496;a=+h[j>>3];d=0;do{k=+(~~a|0);h[m+(d<<3)>>3]=k;a=(a-k)*16777216.0;d=d+1|0}while((d|0)!=2);h[m+16>>3]=a;if(a==0.0){d=1;while(1)if(+h[m+(d<<3)>>3]==0.0)d=d+-1|0;else break}else d=2;d=IJ(m,n,(q>>>20)+-1046|0,d+1|0,1)|0;a=+h[n>>3];if(!o){h[b>>3]=a;h[b+8>>3]=+h[n+8>>3];break}else{h[b>>3]=-a;h[b+8>>3]=-+h[n+8>>3];d=0-d|0;break}}else p=21}while(0);if((p|0)==21){g=a*.6366197723675814+6755399441055744.0+-6755399441055744.0;d=~~g;e=a-g*1.5707963267341256;f=g*6.077100506506192e-11;a=e-f;h[b>>3]=a;h[j>>3]=a;p=ON(c[j>>2]|0,c[j+4>>2]|0,52)|0;i=q>>>20;if((i-(p&2047)|0)>16){f=g*6.077100506303966e-11;k=e-f;f=g*2.0222662487959506e-21-(e-k-f);a=k-f;h[b>>3]=a;h[j>>3]=a;q=ON(c[j>>2]|0,c[j+4>>2]|0,52)|0;s=g*2.0222662487111665e-21;e=k-s;g=g*8.4784276603689e-32-(k-e-s);if((i-(q&2047)|0)>49){a=e-g;h[b>>3]=a;f=g}else e=k}h[b+8>>3]=e-a-f}l=r;return d|0}function IJ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+560|0;C=H+480|0;z=H+320|0;G=H+160|0;E=H;D=c[56044+(f<<2)>>2]|0;p=e+-1|0;y=(d+-3|0)/24|0;y=(y|0)>0?y:0;B=O(y,-24)|0;j=d+-24+B|0;if((D+p|0)>=0){n=D+e|0;k=y-p|0;m=0;while(1){if((k|0)<0)g=0.0;else g=+(c[56060+(k<<2)>>2]|0);h[z+(m<<3)>>3]=g;m=m+1|0;if((m|0)==(n|0))break;else k=k+1|0}}o=(e|0)>0;n=0;while(1){if(o){m=n+p|0;g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(D|0))n=n+1|0;else break}t=(j|0)>0;u=24-j|0;v=23-j|0;w=(e|0)>0;x=(j|0)==0;k=D;a:while(1){g=+h[E+(k<<3)>>3];o=(k|0)>0;if(o){m=k;n=0;while(1){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(n<<2)>>2]=~~(g-i*16777216.0);s=m;m=m+-1|0;g=+h[E+(m<<3)>>3]+i;if((s|0)<=1)break;else n=n+1|0}}g=+JJ(g,j);g=g-+A(+(g*.125))*8.0;m=~~g;g=g-+(m|0);do if(!t)if(!x)if(!(g>=.5)){p=0;s=m;break}else{n=2;F=20;break}else{n=c[C+(k+-1<<2)>>2]>>23;F=19;break}else{s=C+(k+-1<<2)|0;n=c[s>>2]|0;F=n>>u;n=n-(F<<u)|0;c[s>>2]=n;n=n>>v;m=F+m|0;F=19}while(0);if((F|0)==19){F=0;if((n|0)>0)F=20;else{p=n;s=m}}if((F|0)==20){F=0;s=m+1|0;if(o){m=0;r=0;do{p=C+(r<<2)|0;q=c[p>>2]|0;if(!m)if(!q)m=0;else{m=1;o=16777216;F=23}else{o=16777215;F=23}if((F|0)==23){F=0;c[p>>2]=o-q}r=r+1|0}while((r|0)!=(k|0))}else m=0;b:do if(t){switch(j|0){case 1:{o=8388607;break}case 2:{o=4194303;break}default:break b}r=C+(k+-1<<2)|0;c[r>>2]=c[r>>2]&o}while(0);if((n|0)==2){g=1.0-g;if(!m)p=2;else{p=2;g=g-+JJ(1.0,j)}}else p=n}if(!(g==0.0)){F=42;break}if((k|0)>(D|0)){m=0;n=k;do{n=n+-1|0;m=c[C+(n<<2)>>2]|m}while((n|0)>(D|0));if(m){F=41;break}else m=1}else m=1;while(1)if(!(c[C+(D-m<<2)>>2]|0))m=m+1|0;else break;o=m+k|0;if((m|0)<=0){k=o;continue}while(1){n=k+1|0;m=k+e|0;h[z+(m<<3)>>3]=+(c[56060+(n+y<<2)>>2]|0);if(w){g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(o|0))k=n;else{k=o;continue a}}}if((F|0)==41)while(1){F=0;j=j+-24|0;k=k+-1|0;if(!(c[C+(k<<2)>>2]|0))F=41;else{o=k;break}}else if((F|0)==42){g=+JJ(g,0-j|0);if(g>=16777216.0){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(k<<2)>>2]=~~(g-i*16777216.0);j=B+d|0;k=k+1|0;g=i}c[C+(k<<2)>>2]=~~g;o=k}g=+JJ(1.0,j);n=(o|0)>-1;if(n){j=o;while(1){h[E+(j<<3)>>3]=g*+(c[C+(j<<2)>>2]|0);if((j|0)>0){g=g*5.9604644775390625e-08;j=j+-1|0}else break}if(n){k=o;while(1){m=o-k|0;j=0;g=0.0;while(1){g=g+ +h[10840+(j<<3)>>3]*+h[E+(j+k<<3)>>3];if((j|0)>=(D|0)|(j|0)>=(m|0))break;else j=j+1|0}h[G+(m<<3)>>3]=g;if((k|0)>0)k=k+-1|0;else break}}}switch(f|0){case 0:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;i=(p|0)==0?g:-g;F=72;break}case 2:case 1:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;k=(p|0)==0;h[b>>3]=k?g:-g;g=+h[G>>3]-g;if((o|0)>=1){j=1;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)==(o|0))break;else j=j+1|0}}i=k?g:-g;b=b+8|0;F=72;break}case 3:{if((o|0)>0){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;i=+h[E>>3];I=g;g=i+g;h[G+(F<<3)>>3]=I+(i-g);h[E>>3]=g}while((F|0)>1);k=(o|0)>1;if(k){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;I=+h[E>>3];i=g;g=I+g;h[G+(F<<3)>>3]=i+(I-g);h[E>>3]=g}while((F|0)>2);if(k){j=o;i=0.0;while(1){i=i+ +h[G+(j<<3)>>3];if((j|0)>2)j=j+-1|0;else break}}else i=0.0}else i=0.0}else i=0.0;g=+h[G>>3];if(!p){h[b>>3]=g;g=+h[G+8>>3]}else{h[b>>3]=-g;i=-i;g=-+h[G+8>>3]}h[b+8>>3]=g;b=b+16|0;F=72;break}default:{}}if((F|0)==72)h[b>>3]=i;l=H;return s&7|0}function JJ(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=PN(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function KJ(a){a=+a;var b=0,d=0,e=0,f=0.0,g=0.0;h[j>>3]=a;d=c[j+4>>2]|0;b=d&2147483647;do if(b>>>0>2146435071)a=a+a;else{if(b>>>0<1048576){h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;b=d&2147483647;if(!b)break;else e=696219795}else e=715094163;c[j>>2]=0;c[j+4>>2]=((b>>>0)/3|0)+e|d&-2147483648;f=+h[j>>3];g=f*f*(f/a);h[j>>3]=(g*(g*g)*(g*.14599619288661245+-.758397934778766)+(g*(g*1.6214297201053545+-1.8849797954337717)+1.87595182427177))*f;d=IN(c[j>>2]|0,c[j+4>>2]|0,-2147483648,0)|0;e=z;c[j>>2]=d&-1073741824;c[j+4>>2]=e;f=+h[j>>3];a=a/(f*f);a=(a-f)/(f+f+a)*f+f}while(0);return +a}function LJ(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function MJ(a,b){a=+a;b=+b;return +(+LJ(a,b))}function NJ(a,b){a=+a;b=b|0;return +(+JJ(a,b))}function OJ(a,b){a=+a;b=+b;return +(+PJ(a,b))}function PJ(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=ON(i|0,l|0,52)|0;e=e&2047;m=ON(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=PN(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=QJ(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=PN(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=PN(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=PN(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=PN(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=PN(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=PN(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=PN(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=JN(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=PN(f|0,d|0,1)|0;g=z;e=e+-1|0;f=JN(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=PN(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=IN(f|0,d|0,0,-1048576)|0;d=z;e=PN(e|0,0,52)|0;d=d|z;e=o|e}else{e=ON(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function QJ(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function RJ(a,b){a=+a;b=+b;var d=0.0,e=0,f=0,g=0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+32|0;m=q+24|0;n=q+16|0;o=q+8|0;p=q;h[j>>3]=a;t=c[j>>2]|0;g=c[j+4>>2]|0;h[j>>3]=b;e=c[j>>2]|0;g=g&2147483647;f=c[j+4>>2]&2147483647;i=g>>>0<f>>>0|(g|0)==(f|0)&t>>>0<e>>>0;s=i?e:t;r=i?f:g;e=i?t:e;f=i?g:f;g=ON(s|0,r|0,52)|0;i=ON(e|0,f|0,52)|0;c[j>>2]=s;c[j+4>>2]=r;a=+h[j>>3];c[j>>2]=e;c[j+4>>2]=f;k=+h[j>>3];do if((i|0)!=2047){if(!((e|0)==0&(f|0)==0|(g|0)==2047)){if((g-i|0)>64){a=a+k;break}if((g|0)>1533){d=5260135901548373507240989.0e186;b=a*1.90109156629516e-211;a=k*1.90109156629516e-211}else{t=(i|0)<573;d=t?1.90109156629516e-211:1.0;b=t?a*5260135901548373507240989.0e186:a;a=t?k*5260135901548373507240989.0e186:k}SJ(m,n,b);SJ(o,p,a);a=d*+C(+(+h[p>>3]+ +h[n>>3]+ +h[o>>3]+ +h[m>>3]))}}else a=k;while(0);l=q;return +a}function SJ(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=c*134217729.0;e=e+(c-e);d=c-e;c=c*c;h[a>>3]=c;h[b>>3]=d*d+(e*e-c+e*2.0*d);return}function TJ(a,b,d){a=+a;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,k=0,m=0;k=l;l=l+16|0;g=k;h[j>>3]=a;f=c[j+4>>2]&2147483647;do if(f>>>0<1072243196)if(f>>>0<1044816030){h[b>>3]=a;h[d>>3]=1.0;break}else{h[b>>3]=+CJ(a,0.0,0);h[d>>3]=+FJ(a,0.0);break}else{if(f>>>0>2146435071){i=a-a;h[d>>3]=i;h[b>>3]=i;break}f=HJ(a,g)|0;m=g+8|0;e=+CJ(+h[g>>3],+h[m>>3],1);a=+FJ(+h[g>>3],+h[m>>3]);switch(f&3){case 0:{h[b>>3]=e;i=a;break}case 1:{h[b>>3]=a;i=-e;break}case 2:{h[b>>3]=-e;i=-a;break}case 3:{h[b>>3]=-a;i=e;break}default:{}}h[d>>3]=i}while(0);l=k;return}function UJ(a,b){a=+a;b=b|0;return +(+EJ(a,b))}function VJ(a){a=a|0;if(a>>>0<131072)a=(d[127725+((d[127725+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=0;return a|0}function WJ(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function XJ(b,c){b=b|0;c=c|0;b=rJ(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function YJ(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function ZJ(a,b,c){a=a|0;b=b|0;c=c|0;c=aK(a,b,c,-1,0)|0;return c|0}function _J(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function $J(a){a=a|0;return (a+-48|0)>>>0<10|0}function aK(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+128|0;h=j;c[h>>2]=0;i=h+4|0;c[i>>2]=a;c[h+44>>2]=a;g=h+8|0;c[g>>2]=(a|0)<0?-1:a+2147483647|0;c[h+76>>2]=-1;bK(h,0);d=cK(h,d,1,e,f)|0;if(b|0)c[b>>2]=a+((c[i>>2]|0)+(c[h+108>>2]|0)-(c[g>>2]|0));l=j;return d|0}function bK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function cK(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(kJ()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0}while((YJ(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=dK(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if((d[130894+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){bK(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[130894+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;bK(b,0);c[(kJ()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=HN(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=IN(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=dK(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[131150+((e*23|0)>>>5&7)>>0]|0;f=a[130894+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<<n;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=ON(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0<k>>>0|(m|0)==(k|0)&l>>>0<i>>>0)){f=k;n=72;break}else j=k;while(1){i=PN(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[130894+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=MN(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=HN(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=IN(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=dK(b)|0;f=a[130894+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[130894+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0}while(e>>>0>(d[130894+i>>0]|0)>>>0);c[(kJ()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0<h>>>0|(e|0)==(h|0)&i>>>0<g>>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(kJ()|0)>>2]=34;g=IN(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(kJ()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=JN(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function dK(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=eK(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function eK(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((fK(a)|0)==0?(bb[c[a+32>>2]&31](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function fK(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)bb[c[b+36>>2]&31](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function gK(a){a=a|0;return (a+-48|0)>>>0<10|0}function hK(a){a=a|0;if(!(iK(a)|0))a=($J(a)|0)!=0&1;else a=1;return a|0}function iK(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function jK(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;e=a[b>>0]|0;a:do if(!(e<<24>>24))b=0;else{g=b;b=e;f=e&255;while(1){e=a[c>>0]|0;if(!(e<<24>>24))break a;if(b<<24>>24!=e<<24>>24?(f=kK(f)|0,(f|0)!=(kK(d[c>>0]|0)|0)):0)break;b=g+1|0;c=c+1|0;e=a[b>>0]|0;if(!(e<<24>>24)){b=0;break a}else{g=b;b=e;f=e&255}}b=a[g>>0]|0}while(0);g=kK(b&255)|0;return g-(kK(d[c>>0]|0)|0)|0}function kK(a){a=a|0;var b=0;b=(lK(a)|0)==0;return (b?a:a|32)|0}function lK(a){a=a|0;return (a+-65|0)>>>0<26|0}function mK(a){a=a|0;return nK(a,0)|0}function nK(c,f){c=c|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=(f<<1)+-1|0;l=f+-1|0;a:do if(!((c+-43008|0)>>>0<22272|((c+-11776|0)>>>0<30784|((c+-1536|0)>>>0<2560|(oK(c)|0)==0)))){g=(f|0)!=0;if(g&(c+-4256|0)>>>0<46){if((c|0)>4293)switch(c|0){case 4295:case 4301:break;default:break a}c=c+7264|0;break}if((c+-11520|0)>>>0<38&(g^1)){c=c+-7264|0;break}else g=0;do{i=a[59170+(g<<2)+2>>0]|0;j=i<<24>>24;h=c-(e[59170+(g<<2)>>1]|0)|0;if((h-(l&j)|0)>>>0<(d[59170+(g<<2)+3>>0]|0)>>>0){m=11;break}g=g+1|0}while((g|0)!=61);if((m|0)==11)if(i<<24>>24==1){c=f+c-(h&1)|0;break}else{c=(O(k,j)|0)+c|0;break}i=1-f|0;g=b[58682+(i<<1)>>1]|0;b:do if(g<<16>>16){h=0;while(1){if((g&65535|0)==(c|0))break;h=h+1|0;g=b[58682+(h<<2)+(i<<1)>>1]|0;if(!(g<<16>>16))break b}c=e[58682+(h<<2)+(f<<1)>>1]|0;break a}while(0);return ((c+-66600+(f*40|0)|0)>>>0<40?c+-40+(f*80|0)|0:c)|0}while(0);return c|0}function oK(a){a=a|0;if(a>>>0<131072)a=(d[131159+((d[131159+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=a>>>0<196606&1;return a|0}function pK(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function qK(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;if(!e)b=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))b=0;else{h=b;b=f;f=f&255;while(1){e=e+-1|0;g=a[c>>0]|0;if(!((e|0)!=0&g<<24>>24!=0))break a;if(b<<24>>24!=g<<24>>24?(g=kK(f)|0,(g|0)!=(kK(d[c>>0]|0)|0)):0)break;b=h+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){b=0;break a}else{h=b;b=f;f=f&255}}b=a[h>>0]|0}while(0);b=kK(b&255)|0;b=b-(kK(d[c>>0]|0)|0)|0}return b|0}function rK(a){a=a|0;if(a>>>0>=255)if((a+-57344|0)>>>0<8185|(a>>>0<8232|(a+-8234|0)>>>0<47062))a=1;else return (a&65534|0)!=65534&(a+-65532|0)>>>0<1048580&1|0;else a=(a+1&127)>>>0>32&1;return a|0}function sK(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?170768:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(wK()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[55208+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(kJ()|0)>>2]=84;f=-1}l=k;return f|0}function tK(a,b){a=a|0;b=b|0;if(!a)a=0;else a=uK(a,b,0)|0;return a|0}function uK(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(vK()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(kJ()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(kJ()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function vK(){return BJ()|0}function wK(){return BJ()|0}function xK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+272|0;n=p+8|0;o=p;do if(!(a[d>>0]|0)){d=Na(134135)|0;if(d|0?a[d>>0]|0:0)break;d=Na(134142+(b*12|0)|0)|0;if(d|0?a[d>>0]|0:0)break;d=Na(134214)|0;if(d|0?a[d>>0]|0:0)break;d=134219}while(0);e=0;a:do{switch(a[d+e>>0]|0){case 47:case 0:break a;default:{}}e=e+1|0}while(e>>>0<15);f=a[d>>0]|0;if(f<<24>>24!=46?(a[d+e>>0]|0)==0:0)if(f<<24>>24==67)m=15;else{k=d;m=16}else{d=134219;m=15}if((m|0)==15)if(!(a[d+1>>0]|0))m=18;else{k=d;m=16}b:do if((m|0)==16)if((yJ(k,134219)|0)!=0?(yJ(k,134227)|0)!=0:0){d=c[42693]|0;if(d|0)do{if(!(yJ(k,d+8|0)|0))break b;d=c[d+24>>2]|0}while((d|0)!=0);pa(170776);d=c[42693]|0;c:do if(d|0){while(1){if(!(yJ(k,d+8|0)|0))break;d=c[d+24>>2]|0;if(!d)break c}Fa(170776);break b}while(0);d:do if(((c[42678]|0)==0?(g=Na(134233)|0,(g|0)!=0):0)?(a[g>>0]|0)!=0:0){i=254-e|0;j=e+1|0;f=g;while(1){h=rJ(f,58)|0;d=a[h>>0]|0;g=h-f+((d<<24>>24!=0)<<31>>31)|0;if(g>>>0<i>>>0){UN(n|0,f|0,g|0)|0;f=n+g|0;a[f>>0]=47;UN(f+1|0,k|0,e|0)|0;a[n+(j+g)>>0]=0;f=qa(n|0,o|0)|0;if(f|0)break;d=a[h>>0]|0}f=h+(d<<24>>24!=0&1)|0;if(!(a[f>>0]|0)){m=41;break d}}d=_I(28)|0;if(!d){oJ(f,c[o>>2]|0)|0;m=41;break}else{c[d>>2]=f;c[d+4>>2]=c[o>>2];o=d+8|0;UN(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[42693];c[42693]=d;break}}else m=41;while(0);if((m|0)==41){d=_I(28)|0;if(d){c[d>>2]=c[13790];c[d+4>>2]=c[13791];o=d+8|0;UN(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[42693];c[42693]=d}}Fa(170776);d=(b|0)==0&(d|0)==0?55160:d}else{d=k;m=18}while(0);do if((m|0)==18){if((b|0)==0?(a[d+1>>0]|0)==46:0){d=55160;break}d=0}while(0);l=p;return d|0}function yK(a,b){a=a|0;b=b|0;zK(a,b)|0;return a|0}function zK(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function AK(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function BK(a){a=a|0;if(!a)a=0;else a=(CK(56324,a)|0)!=0&1;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0;if(!b)a=a+((pK(a)|0)<<2)|0;else{while(1){d=c[a>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else a=a+4|0}a=d|0?a:0}return a|0}function DK(a,b){a=a|0;b=b|0;do switch(b|0){case 1:{a=EK(a)|0;break}case 2:{a=oK(a)|0;break}case 3:{a=FK(a)|0;break}case 4:{a=GK(a)|0;break}case 5:{a=gK(a)|0;break}case 6:{a=HK(a)|0;break}case 7:{a=IK(a)|0;break}case 8:{a=rK(a)|0;break}case 9:{a=VJ(a)|0;break}case 10:{a=BK(a)|0;break}case 11:{a=JK(a)|0;break}case 12:{a=KK(a)|0;break}default:a=0}while(0);return a|0}function EK(a){a=a|0;if(!(gK(a)|0))a=(oK(a)|0)!=0&1;else a=1;return a|0}function FK(a){a=a|0;return AK(a)|0}function GK(a){a=a|0;return ((a+-65529|0)>>>0<3|((a&-2|0)==8232|(a>>>0<32|(a+-127|0)>>>0<33)))&1|0}function HK(a){a=a|0;if(!(BK(a)|0))a=(rK(a)|0)!=0&1;else a=0;return a|0}function IK(a){a=a|0;return (mK(a)|0)!=(a|0)|0}function JK(a){a=a|0;return (LK(a)|0)!=(a|0)|0}function KK(a){a=a|0;return ((a+-48|0)>>>0<10|((a|32)+-97|0)>>>0<6)&1|0}function LK(a){a=a|0;return nK(a,1)|0}function MK(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=56412;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(kJ()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=NK(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function NK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((OK(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=PK(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=OK(b,d,n,q,p)|0;if(h){bb[c[b+36>>2]&31](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=OK(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)QK(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function OK(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+64|0;D=I+16|0;E=I;A=I+24|0;G=I+8|0;H=I+20|0;c[D>>2]=e;w=(d|0)!=0;x=A+40|0;y=x;A=A+39|0;B=G+4|0;j=0;e=0;m=0;a:while(1){do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[(kJ()|0)>>2]=75;e=-1;break}else{e=j+e|0;break}while(0);r=c[D>>2]|0;j=a[r>>0]|0;if(!(j<<24>>24)){v=88;break}else k=r;b:while(1){switch(j<<24>>24){case 37:{j=k;v=9;break b}case 0:{j=k;break b}default:{}}u=k+1|0;c[D>>2]=u;j=a[u>>0]|0;k=u}c:do if((v|0)==9)while(1){v=0;if((a[k+1>>0]|0)!=37)break c;j=j+1|0;k=k+2|0;c[D>>2]=k;if((a[k>>0]|0)!=37)break;else v=9}while(0);j=j-r|0;if(w)RK(d,r,j);if(j|0)continue;u=($J(a[(c[D>>2]|0)+1>>0]|0)|0)==0;k=c[D>>2]|0;if(!u?(a[k+2>>0]|0)==36:0){s=(a[k+1>>0]|0)+-48|0;n=1;j=3}else{s=-1;n=m;j=1}j=k+j|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0;if(u>>>0>31|(1<<u&75913|0)==0)m=0;else{m=0;do{m=1<<(k<<24>>24)+-32|m;j=j+1|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0}while(!(u>>>0>31|(1<<u&75913|0)==0))}if(k<<24>>24==42){if(($J(a[j+1>>0]|0)|0)!=0?(F=c[D>>2]|0,(a[F+2>>0]|0)==36):0){j=F+1|0;c[i+((a[j>>0]|0)+-48<<2)>>2]=10;j=c[g+((a[j>>0]|0)+-48<<3)>>2]|0;k=1;n=F+3|0}else{if(n|0){e=-1;break}if(w){u=(c[f>>2]|0)+(4-1)&~(4-1);j=c[u>>2]|0;c[f>>2]=u+4}else j=0;k=0;n=(c[D>>2]|0)+1|0}c[D>>2]=n;t=(j|0)<0;u=t?0-j|0:j;m=t?m|8192:m;t=k;j=n}else{j=SK(D)|0;if((j|0)<0){e=-1;break}u=j;t=n;j=c[D>>2]|0}do if((a[j>>0]|0)==46){if((a[j+1>>0]|0)!=42){c[D>>2]=j+1;p=SK(D)|0;j=c[D>>2]|0;break}if($J(a[j+2>>0]|0)|0?(C=c[D>>2]|0,(a[C+3>>0]|0)==36):0){p=C+2|0;c[i+((a[p>>0]|0)+-48<<2)>>2]=10;p=c[g+((a[p>>0]|0)+-48<<3)>>2]|0;j=C+4|0;c[D>>2]=j;break}if(t|0){e=-1;break a}if(w){q=(c[f>>2]|0)+(4-1)&~(4-1);j=c[q>>2]|0;c[f>>2]=q+4}else j=0;q=(c[D>>2]|0)+2|0;c[D>>2]=q;p=j;j=q}else p=-1;while(0);q=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}k=j;j=j+1|0;c[D>>2]=j;k=a[(a[k>>0]|0)+-65+(134246+(q*58|0))>>0]|0;n=k&255;if((n+-1|0)>>>0>=8)break;else q=n}if(!(k<<24>>24)){e=-1;break}o=(s|0)>-1;do if(k<<24>>24==19)if(o){e=-1;break a}else v=50;else{if(o){c[i+(s<<2)>>2]=n;o=g+(s<<3)|0;s=c[o+4>>2]|0;v=E;c[v>>2]=c[o>>2];c[v+4>>2]=s;v=50;break}if(!w){e=0;break a}TK(E,n,f);j=c[D>>2]|0}while(0);if((v|0)==50){v=0;if(!w){j=0;m=t;continue}}k=a[j+-1>>0]|0;k=(q|0)!=0&(k&15|0)==3?k&-33:k;j=m&-65537;s=(m&8192|0)==0?m:j;d:do switch(k|0){case 110:switch((q&255)<<24>>24){case 0:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 1:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 2:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}case 3:{b[c[E>>2]>>1]=e;j=0;m=t;continue a}case 4:{a[c[E>>2]>>0]=e;j=0;m=t;continue a}case 6:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 7:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}default:{j=0;m=t;continue a}}case 112:{k=120;j=p>>>0>8?p:8;m=s|8;v=62;break}case 88:case 120:{j=p;m=s;v=62;break}case 111:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;o=VK(j,k,x)|0;m=y-o|0;q=0;n=134710;p=(s&8|0)==0|(p|0)>(m|0)?p:m+1|0;m=s;v=68;break}case 105:case 100:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)<0){j=JN(0,0,j|0,k|0)|0;k=z;m=E;c[m>>2]=j;c[m+4>>2]=k;m=1;n=134710;v=67;break d}else{m=(s&2049|0)!=0&1;n=(s&2048|0)==0?((s&1|0)==0?134710:134712):134711;v=67;break d}}case 117:{k=E;m=0;n=134710;j=c[k>>2]|0;k=c[k+4>>2]|0;v=67;break}case 99:{a[A>>0]=c[E>>2];r=A;q=0;n=134710;o=x;k=1;break}case 109:{k=zJ(c[(kJ()|0)>>2]|0)|0;v=72;break}case 115:{k=c[E>>2]|0;k=k|0?k:134720;v=72;break}case 67:{c[G>>2]=c[E>>2];c[B>>2]=0;c[E>>2]=G;p=-1;m=G;v=76;break}case 83:{j=c[E>>2]|0;if(!p){XK(d,32,u,0,s);j=0;v=85}else{m=j;v=76}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=YK(d,+h[E>>3],u,p,s,k)|0;m=t;continue a}default:{q=0;n=134710;o=x;k=p;j=s}}while(0);e:do if((v|0)==62){s=E;r=c[s>>2]|0;s=c[s+4>>2]|0;o=UK(r,s,x,k&32)|0;n=(m&8|0)==0|(r|0)==0&(s|0)==0;q=n?0:2;n=n?134710:134710+(k>>4)|0;p=j;j=r;k=s;v=68}else if((v|0)==67){o=WK(j,k,x)|0;q=m;m=s;v=68}else if((v|0)==72){v=0;s=_J(k,0,p)|0;m=(s|0)==0;r=k;q=0;n=134710;o=m?k+p|0:s;k=m?p:s-k|0}else if((v|0)==76){v=0;o=m;j=0;k=0;while(1){n=c[o>>2]|0;if(!n)break;k=tK(H,n)|0;if((k|0)<0|k>>>0>(p-j|0)>>>0)break;j=k+j|0;if(p>>>0>j>>>0)o=o+4|0;else break}if((k|0)<0){e=-1;break a}XK(d,32,u,j,s);if(!j){j=0;v=85}else{n=0;while(1){k=c[m>>2]|0;if(!k){v=85;break e}k=tK(H,k)|0;n=k+n|0;if((n|0)>(j|0)){v=85;break e}RK(d,H,k);if(n>>>0>=j>>>0){v=85;break}else m=m+4|0}}}while(0);if((v|0)==68){v=0;k=(j|0)!=0|(k|0)!=0;j=(p|0)!=0|k;k=y-o+((k^1)&1)|0;r=j?o:x;o=x;k=j?((p|0)>(k|0)?p:k):p;j=(p|0)>-1?m&-65537:m}else if((v|0)==85){v=0;XK(d,32,u,j,s^8192);j=(u|0)>(j|0)?u:j;m=t;continue}p=o-r|0;o=(k|0)<(p|0)?p:k;s=o+q|0;m=(u|0)<(s|0)?s:u;XK(d,32,m,s,j);RK(d,n,q);XK(d,48,m,s,j^65536);XK(d,48,o,p,0);RK(d,r,p);XK(d,32,m,s,j^8192);j=m;m=t}f:do if((v|0)==88)if(!d)if(m){e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j)break;TK(g+(e<<3)|0,j,f);j=e+1|0;if((e|0)<9)e=j;else{e=j;break}}if((e|0)<10)while(1){if(c[i+(e<<2)>>2]|0){e=-1;break f}if((e|0)<9)e=e+1|0;else{e=1;break}}else e=1}else e=0;while(0);l=I;return e|0}function PK(a){a=a|0;return 0}function QK(a){a=a|0;return}function RK(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))_K(b,d,a)|0;return}function SK(b){b=b|0;var d=0,e=0;if(!($J(a[c[b>>2]>>0]|0)|0))d=0;else{d=0;do{e=c[b>>2]|0;d=(d*10|0)+-48+(a[e>>0]|0)|0;e=e+1|0;c[b>>2]=e}while(($J(a[e>>0]|0)|0)!=0)}return d|0}function TK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function UK(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[134758+(b&15)>>0]|0|f;b=ON(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function VK(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=ON(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function WK(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=NN(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=MN(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function XK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;WN(f|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{RK(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}RK(a,f,e)}l=g;return}function YK(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;ZK(e)|0;if((z|0)<0){e=-e;C=1;B=134727}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?134728:134733):134730}ZK(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;XK(b,32,f,j,h&-65537);RK(b,B,C);RK(b,e!=e|0.0!=0.0?(G?134895:134754):G?134746:134750,3);XK(b,32,f,j,h^8192)}else{r=+UJ(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=WK(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[134758+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;XK(b,32,f,F,h);RK(b,s,q);XK(b,48,f,F,h^65536);RK(b,G,k);XK(b,48,j-k|0,0,0);RK(b,o,E);XK(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=PN(c[j>>2]|0,0,o|0)|0;x=IN(x|0,z|0,m|0,0)|0;y=z;v=NN(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=MN(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0<m>>>0){o=(1<<s)+-1|0;p=1e9>>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0<m>>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0<g>>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0<x>>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0<j>>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=WK(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;XK(b,32,f,j,h);RK(b,B,C);XK(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=WK(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){WN(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}RK(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)RK(b,134774,1);if(n>>>0<w>>>0&(k|0)>0)while(1){m=WK(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){WN(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}RK(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0<w>>>0&(k|0)>9)){k=m;break}else k=m}XK(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=WK(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;RK(b,m,1);if(s&(k|0)<1){m=n;break}RK(b,134774,1);m=n}else{if(m>>>0<=G>>>0)break;WN(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;RK(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0<t>>>0&(k|0)>-1)}XK(b,48,k+18|0,18,0);RK(b,v,E-v|0)}XK(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function ZK(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function _K(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!($K(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0<d>>>0){f=bb[c[e+36>>2]&31](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=bb[c[e+36>>2]&31](e,b,i)|0;if(f>>>0<i>>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);UN(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function $K(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function aL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;UN(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function bL(b){b=b|0;var c=0,d=0,e=0,f=0;e=a[b>>0]|0;c=1;d=134776;f=97;while(1){if(e<<24>>24==f<<24>>24?(yJ(b,d)|0)==0:0)break;d=d+6|0;f=a[d>>0]|0;if(!(f<<24>>24)){c=0;break}else c=c+1|0}return c|0}function cL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;do if(b>>>0>6)d=0;else{pa(170784);if((b|0)!=6){d=dL(b,d)|0;Fa(170784);break}if(!d){d=176258;b=0}else{b=g;e=134849;f=b+16|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));f=0;do{b=rJ(d,59)|0;e=b-d|0;if((e|0)<16){UN(g|0,d|0,e|0)|0;a[g+e>>0]=0;d=(a[b>>0]|0)==0?d:b+1|0}dL(f,g)|0;f=f+1|0}while((f|0)!=6);d=176258;b=0}while(1){f=c[170744+(b<<2)>>2]|0;f=f|0?f+8|0:134865;e=sJ(f)|0;UN(d|0,f|0,e|0)|0;f=d+e|0;a[f>>0]=59;b=b+1|0;if((b|0)==6)break;else d=d+(e+1)|0}a[f>>0]=0;Fa(170784);d=176258}while(0);l=h;return d|0}function dL(a,b){a=a|0;b=b|0;if(!b)a=c[170744+(a<<2)>>2]|0;else{b=xK(a,b)|0;c[170744+(a<<2)>>2]=b;a=b}return (a|0?a+8|0:134865)|0}function eL(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function fL(a){a=a|0;return gL(a)|0}function gL(a){a=a|0;return QN(a|0)|0}function hL(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((c[f+76>>2]|0)>-1)m=PK(f)|0;else m=0;g=e+-1|0;if((e|0)<2){n=f+74|0;l=a[n>>0]|0;a[n>>0]=l+255|l;if(m|0)QK(f);if(!g)a[b>>0]=0;else b=0}else{a:do if(g){k=f+4|0;l=f+8|0;e=b;while(1){h=c[k>>2]|0;o=h;p=(c[l>>2]|0)-o|0;i=_J(h,10,p)|0;j=(i|0)==0;i=j?p:1-o+i|0;i=i>>>0<g>>>0?i:g;UN(e|0,h|0,i|0)|0;h=(c[k>>2]|0)+i|0;c[k>>2]=h;e=e+i|0;i=g-i|0;if(!(j&(i|0)!=0)){n=17;break a}if(h>>>0>=(c[l>>2]|0)>>>0){g=eK(f)|0;if((g|0)<0)break;else j=g}else{c[k>>2]=h+1;j=d[h>>0]|0}g=i+-1|0;h=e+1|0;a[e>>0]=j;if(!((g|0)!=0&(j&255|0)!=10)){e=h;n=17;break a}else e=h}if((e|0)!=(b|0)?(c[f>>2]&16|0)!=0:0)n=17;else b=0}else{e=b;n=17}while(0);if((n|0)==17)if(!b)b=0;else a[e>>0]=0;if(m)QK(f)}return b|0}function iL(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=XJ(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=jL(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=kL(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=lL(b,c)|0;break}else{b=mL(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function jL(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function kL(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function lL(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function mL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;c[t+20>>2]=0;c[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(eL(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0<s>>>0){i=_J(g,0,k)|0;if(i)if((i-h|0)>>>0<s>>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0<f>>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;oL(a,b,c)|0;return a|0}function oL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=11}}else e=0}else h=11;while(0);c:do if((h|0)==11)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);WN(b|0,0,e|0)|0;return b|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+32|0;f=g;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;e=a[d>>0]|0;do if(!(e<<24>>24))d=0;else{if(!(a[d+1>>0]|0)){d=b;while(1)if((a[d>>0]|0)==e<<24>>24)d=d+1|0;else break;d=d-b|0;break}do{h=f+(((e&255)>>>5&255)<<2)|0;c[h>>2]=c[h>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);e=a[b>>0]|0;a:do if(!(e<<24>>24))d=b;else{d=b;do{if(!(c[f+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)))break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}while(0);d=d-b|0}while(0);l=g;return d|0}function qL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=rL(a,b,f)|0;l=e;return d|0}function rL(a,b,c){a=a|0;b=b|0;c=c|0;return MK(a,2147483647,b,c)|0}function sL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0<h>>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)tL(a,d,e,f,j);else vL(a,d,e,k,f,0,j);if((f|0)==1){wL(k,1);f=0;break}else{wL(k,b);f=1;break}}else{tL(a,d,e,f,j);uL(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0<g>>>0)}else{f=1;b=1}vL(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1){if(!(c[g>>2]|0))break a}else if((f|0)>=2){wL(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;uL(k,1);vL(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);wL(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;vL(h,d,e,k,n,1,j);a=h;f=n;continue}b=xL(k)|0;uL(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return}function tL(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((ab[d&63](a,g)|0)>-1?(ab[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((ab[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);zL(b,m,e);l=n;return}function uL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function vL(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(ab[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((ab[d&63](g,j)|0)>-1){i=10;break a}if((ab[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=xL(n)|0;uL(n,q);f=q+f|0;if(!((c[n>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((ab[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){zL(b,o,e);tL(a,b,d,f,h)}l=p;return}function wL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<<b;c[a>>2]=d<<b;return}function xL(a){a=a|0;var b=0;b=yL((c[a>>2]|0)+-1|0)|0;if(!b){b=yL(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function yL(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function zL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;UN(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;UN(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);l=h;return}function AL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=NK(a,b,f)|0;l=e;return d|0}function BL(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;oa(0,e|0)|0;d=0;e=(c[e+4>>2]|0)*65537^(e>>>4)+b;while(1){a[b+d>>0]=(e&15)+65|e<<1&32;d=d+1|0;if((d|0)==6)break;else e=e>>>5}l=f;return b|0}function CL(a,b,c){a=a|0;b=b|0;c=c|0;c=aK(a,b,c,-2147483648,0)|0;return c|0}function DL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){WN(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{i=f+(((e&255)>>>5&255)<<2)|0;c[i>>2]=c[i>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{if(c[f+(((d&255)>>>5&255)<<2)>>2]&1<<(d&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=rJ(b,e<<24>>24)|0;l=h;return e-b|0}function EL(b,d){b=b|0;d=d|0;var e=0;if(!b){b=c[42698]|0;if(!b)b=0;else e=3}else e=3;do if((e|0)==3){b=b+(pL(b,d)|0)|0;if(!(a[b>>0]|0)){c[42698]=0;b=0;break}d=b+(DL(b,d)|0)|0;c[42698]=d;if(!(a[d>>0]|0)){c[42698]=0;break}else{c[42698]=d+1;a[d>>0]=0;break}}while(0);return b|0}function FL(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;e=c&255;do{if(!d){c=0;break}d=d+-1|0;c=b+d|0}while((a[c>>0]|0)!=e<<24>>24);return c|0}function GL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!b){b=c[e>>2]|0;if(!b)b=0;else f=3}else f=3;do if((f|0)==3){b=b+(pL(b,d)|0)|0;if(!(a[b>>0]|0)){c[e>>2]=0;b=0;break}d=b+(DL(b,d)|0)|0;c[e>>2]=d;if(!(a[d>>0]|0)){c[e>>2]=0;break}else{c[e>>2]=d+1;a[d>>0]=0;break}}while(0);return b|0}function HL(a){a=a|0;var b=0,c=0;b=(sJ(a)|0)+1|0;c=_I(b)|0;if(!c)a=0;else a=UN(c|0,a|0,b|0)|0;return a|0}function IL(a,b){a=a|0;b=b|0;return FL(a,b,(sJ(a)|0)+1|0)|0}function JL(a,b){a=a|0;b=b|0;yK(a+(sJ(a)|0)|0,b)|0;return a|0}function KL(b,c){b=b|0;c=c|0;c=b+(DL(b,c)|0)|0;return (a[c>>0]|0?c:0)|0}function LL(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(PK(a)|0)==0;a=(c[a>>2]|0)>>>4&1}else a=(c[a>>2]|0)>>>4&1;return a|0}function ML(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=PK(a)|0;else f=0;NL(a);g=(c[a>>2]&1|0)!=0;if(!g){e=OL()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;PL()}b=QL(a)|0;b=$a[c[a+12>>2]&31](a)|0|b;d=c[a+92>>2]|0;if(d|0)$I(d);if(g){if(f|0)QK(a)}else $I(a);return b|0}function NL(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(SL()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function OL(){pa(170796);return 170804}function PL(){Fa(170796);return}function QL(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=RL(a)|0;break}d=(PK(a)|0)==0;b=RL(a)|0;if(!d)QK(a)}else{if(!(c[13917]|0))b=0;else b=QL(c[13917]|0)|0;a=c[(OL()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=PK(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=RL(a)|0|b;if(d|0)QK(a);a=c[a+56>>2]|0}while((a|0)!=0);PL()}while(0);return b|0}function RL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(bb[c[a+36>>2]&31](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0<g>>>0)bb[c[a+40>>2]&31](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function SL(){return BJ()|0}function TL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+64|0;j=k+40|0;h=k+24|0;g=k+16|0;f=k;i=k+56|0;if(XJ(134882,a[d>>0]|0)|0){e=_I(1156)|0;if(!e)e=0;else{WN(e|0,0,124)|0;if(!(XJ(d,43)|0))c[e>>2]=(a[d>>0]|0)==114?8:4;if(XJ(d,101)|0){c[f>>2]=b;c[f+4>>2]=2;c[f+8>>2]=1;za(221,f|0)|0}if((a[d>>0]|0)==97){c[g>>2]=b;c[g+4>>2]=3;d=za(221,g|0)|0;if(!(d&1024)){c[h>>2]=b;c[h+4>>2]=4;c[h+8>>2]=d|1024;za(221,h|0)|0}f=c[e>>2]|128;c[e>>2]=f}else f=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;d=e+75|0;a[d>>0]=-1;if((f&8|0)==0?(c[j>>2]=b,c[j+4>>2]=21523,c[j+8>>2]=i,(Ca(54,j|0)|0)==0):0)a[d>>0]=10;c[e+32>>2]=6;c[e+36>>2]=9;c[e+40>>2]=7;c[e+12>>2]=15;if(!(c[42677]|0))c[e+76>>2]=-1;UL(e)|0}}else{c[(kJ()|0)>>2]=22;e=0}l=k;return e|0}function UL(a){a=a|0;var b=0,d=0;b=OL()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;PL();return a|0}function VL(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if(!e)b=0;else{do if(f|0){i=(b|0)==0?g:b;b=a[e>>0]|0;if(b<<24>>24>-1){c[i>>2]=b&255;b=b<<24>>24!=0&1;break a}h=(c[c[(WL()|0)+188>>2]>>2]|0)==0;b=a[e>>0]|0;if(h){c[i>>2]=b<<24>>24&57343;b=1;break a}b=(b&255)+-194|0;if(b>>>0<=50){g=e+1|0;h=c[55208+(b<<2)>>2]|0;if(f>>>0<4?h&-2147483648>>>((f*6|0)+-6|0)|0:0)break;b=d[g>>0]|0;f=b>>>3;if((f+-16|f+(h>>26))>>>0<=7){b=b+-128|h<<6;if((b|0)>=0){c[i>>2]=b;b=2;break a}g=(d[e+2>>0]|0)+-128|0;if(g>>>0<=63){g=g|b<<6;if((g|0)>=0){c[i>>2]=g;b=3;break a}b=(d[e+3>>0]|0)+-128|0;if(b>>>0<=63){c[i>>2]=b|g<<6;b=4;break a}}}}}while(0);c[(kJ()|0)>>2]=84;b=-1}while(0);l=j;return b|0}function WL(){return BJ()|0}function XL(a,b){a=a|0;b=b|0;var c=0;c=sJ(a)|0;return ((YL(a,1,c,b)|0)!=(c|0))<<31>>31|0}function YL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(PK(e)|0)==0;a=_K(a,f,e)|0;if(!g)QK(e)}else a=_K(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function ZL(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!($K(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0<h>>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((bb[c[b+36>>2]&31](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function _L(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=134867;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;while(1){d=d+-1|0;a[b+d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}}return}function $L(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g+40|0;e=g+8|0;d=g;c[d>>2]=a;c[d+4>>2]=b;d=ya(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(za(221,e|0)|0)>=0):0){_L(e,a);c[f>>2]=e;c[f+4>>2]=b;b=jJ(xa(195,f|0)|0)|0}else b=jJ(d)|0;l=g;return b|0}function aM(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=jJ(Aa(33,e|0)|0)|0;l=d;return b|0}function bM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(XJ(134882,a[d>>0]|0)|0){f=cM(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=jJ(Ba(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;za(221,g|0)|0}b=TL(e,d)|0;if(!b){c[h>>2]=e;Da(6,h|0)|0;b=0}}else b=0}else{c[(kJ()|0)>>2]=22;b=0}l=i;return b|0}function cM(b){b=b|0;var c=0,d=0,e=0;d=(XJ(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(XJ(b,120)|0)==0;d=e?d:d|128;b=(XJ(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function dM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=eM(a,b,f)|0;l=e;return d|0}function eM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=18;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=gM(e,b,d)|0;l=g;return h|0}function fM(a,b,c){a=a|0;b=b|0;c=c|0;return oM(a,b,c)|0}function gM(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=l;l=l+288|0;F=L+8|0;G=L+17|0;H=L;I=L+16|0;if((c[b+76>>2]|0)>-1)K=PK(b)|0;else K=0;i=a[e>>0]|0;a:do if(i<<24>>24){y=b+4|0;A=b+100|0;B=b+108|0;C=b+8|0;D=G+10|0;E=G+33|0;x=F+4|0;p=e;u=0;e=0;j=0;k=i;i=0;b:while(1){c:do if(!(YJ(k&255)|0)){k=(a[p>>0]|0)==37;d:do if(k){m=p+1|0;n=a[m>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{w=0;m=p+2|0;break}default:{if($J(n&255)|0?(a[p+2>>0]|0)==36:0){w=hM(f,(d[m>>0]|0)+-48|0)|0;m=p+3|0;break e}v=(c[f>>2]|0)+(4-1)&~(4-1);w=c[v>>2]|0;c[f>>2]=v+4}}while(0);if(!($J(d[m>>0]|0)|0))s=0;else{k=0;do{k=(k*10|0)+-48+(d[m>>0]|0)|0;m=m+1|0}while(($J(d[m>>0]|0)|0)!=0);s=k}p=a[m>>0]|0;n=m+1|0;if(p<<24>>24==109){k=(w|0)!=0&1;j=0;m=n;p=a[n>>0]|0;i=0}else k=0;n=m+1|0;switch(p<<24>>24){case 104:{v=(a[n>>0]|0)==104;p=v?-2:-1;m=v?m+2|0:n;break}case 108:{v=(a[n>>0]|0)==108;p=v?3:1;m=v?m+2|0:n;break}case 106:{p=3;m=n;break}case 116:case 122:{p=1;m=n;break}case 76:{p=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{p=0;break}default:{J=136;break b}}r=d[m>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:p;q=r&255;switch(q<<24>>24){case 99:{s=(s|0)>1?s:1;break}case 91:break;case 110:{iM(w,t,u,((u|0)<0)<<31>>31);n=u;break c}default:{bK(b,0);do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=dK(b)|0}while((YJ(n)|0)!=0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}u=(c[B>>2]|0)+u+n-(c[C>>2]|0)|0}}bK(b,s);p=c[y>>2]|0;n=c[A>>2]|0;if(p>>>0<n>>>0)c[y>>2]=p+1;else{if((dK(b)|0)<0){J=136;break b}n=c[A>>2]|0}if(n|0)c[y>>2]=(c[y>>2]|0)+-1;f:do switch(q<<24>>24){case 91:case 99:case 115:{v=(r|0)==99;g:do if((r|16|0)==115){WN(G|0,-1,257)|0;a[G>>0]=0;if((r|0)==115){a[E>>0]=0;a[D>>0]=0;a[D+1>>0]=0;a[D+2>>0]=0;a[D+3>>0]=0;a[D+4>>0]=0}}else{n=m+1|0;q=(a[n>>0]|0)==94;r=q&1;m=q?m+2|0:n;WN(G|0,r|0,257)|0;a[G>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;J=65;break}case 93:{n=94;J=65;break}default:{}}while(1){if((J|0)==65){J=0;a[G+n>>0]=r^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{J=136;break b}case 93:break g;case 45:{q=m+1|0;n=a[q>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){p=(r^1)&255;m=m&255;do{m=m+1|0;a[G+m>>0]=p;n=a[q>>0]|0}while((m|0)<(n&255|0));m=q}else m=q;break}default:{}}while(0);n=(n&255)+1|0;J=65}}while(0);n=v?s+1|0:31;r=(t|0)==1;t=(k|0)!=0;i:do if(r){if(t){i=_I(n<<2)|0;if(!i){j=0;i=0;J=136;break b}}else i=w;c[F>>2]=0;c[x>>2]=0;q=n;j=0;j:while(1){p=(i|0)==0;do{k:while(1){n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=dK(b)|0;if(!(a[G+(n+1)>>0]|0))break j;a[I>>0]=n;switch(sK(H,I,1,F)|0){case -1:{j=0;J=136;break b}case -2:break;default:break k}}if(!p){c[i+(j<<2)>>2]=c[H>>2];j=j+1|0}}while(!(t&(j|0)==(q|0)));j=q<<1|1;n=bJ(i,j<<2)|0;if(!n){j=0;J=136;break b}else{p=q;q=j;i=n;j=p}}if(!(jM(F)|0)){j=0;J=136;break b}else{q=j;j=0;p=i}}else{if(t){j=_I(n)|0;if(!j){j=0;i=0;J=136;break b}else{p=n;i=0}while(1){do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=dK(b)|0;if(!(a[G+(n+1)>>0]|0)){q=i;p=0;i=0;break i}a[j+i>>0]=n;i=i+1|0}while((i|0)!=(p|0));i=p<<1|1;n=bJ(j,i)|0;if(!n){i=0;J=136;break b}else{q=p;p=i;j=n;i=q}}}if(!w)while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if(!(a[G+(i+1)>>0]|0)){q=0;j=0;p=0;i=0;break i}}else j=0;while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=dK(b)|0;if(!(a[G+(i+1)>>0]|0)){q=j;j=w;p=0;i=0;break i}a[w+j>>0]=i;j=j+1|0}}while(0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}n=n-(c[C>>2]|0)+(c[B>>2]|0)|0;if(!n)break b;if(!((n|0)==(s|0)|v^1))break b;do if(t)if(r){c[w>>2]=p;break}else{c[w>>2]=j;break}while(0);if(!v){if(p|0)c[p+(q<<2)>>2]=0;if(!j){j=0;break f}a[j+q>>0]=0}break}case 120:case 88:case 112:{n=16;J=124;break}case 111:{n=8;J=124;break}case 117:case 100:{n=10;J=124;break}case 105:{n=0;J=124;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+kM(b,t,0);if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if(w)switch(t|0){case 0:{g[w>>2]=o;break f}case 1:{h[w>>3]=o;break f}case 2:{h[w>>3]=o;break f}default:break f}break}default:{}}while(0);do if((J|0)==124){J=0;n=cK(b,n,0,-1,-1)|0;if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if((w|0)!=0&(r|0)==112){c[w>>2]=n;break}else{iM(w,t,n,z);break}}while(0);e=e+((w|0)!=0&1)|0;n=(c[B>>2]|0)+u+(c[y>>2]|0)-(c[C>>2]|0)|0;break c}while(0);m=p+(k&1)|0;bK(b,0);k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=dK(b)|0;if((k|0)!=(d[m>>0]|0)){J=22;break b}n=u+1|0}else{m=p;while(1){k=m+1|0;if(!(YJ(d[k>>0]|0)|0))break;else m=k}bK(b,0);do{k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=dK(b)|0}while((YJ(k)|0)!=0);if(!(c[A>>2]|0))k=c[y>>2]|0;else{k=(c[y>>2]|0)+-1|0;c[y>>2]=k}n=(c[B>>2]|0)+u+k-(c[C>>2]|0)|0}while(0);p=m+1|0;k=a[p>>0]|0;if(!(k<<24>>24))break a;else u=n}if((J|0)==22){if(c[A>>2]|0)c[y>>2]=(c[y>>2]|0)+-1;if((e|0)!=0|(k|0)>-1)break;else{e=0;J=137}}else if((J|0)==136)if(!e){e=k;J=137}if((J|0)==137){k=e;e=-1}if(k){$I(j);$I(i)}}else e=0;while(0);if(K|0)QK(b);l=L;return e|0}function hM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function iM(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function jM(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function kM(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0}while((YJ(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=dK(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[134886+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=dK(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[134895+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=dK(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=dK(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(kJ()|0)>>2]=22;bK(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=dK(b)|0;if((e|32|0)==120){g=+lM(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+mM(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(kJ()|0)>>2]=22;bK(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function lM(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=dK(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=dK(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=dK(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=dK(a)|0;l=IN(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=IN(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=dK(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else bK(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=IN(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=nM(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){bK(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=PN(q|0,p|0,2)|0;l=IN(l|0,z|0,-32,-1)|0;l=IN(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(kJ()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0<y>>>0){c[(kJ()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=IN(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=JN(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=IN(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0<b>>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+MJ(+JJ(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(kJ()|0)>>2]=34;h=+NJ(h,l)}while(0);return +h}function mM(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=dK(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=dK(a)|0;if((b|0)==48){k=0;b=0;while(1){k=IN(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=dK(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=IN(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=dK(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=nM(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){bK(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=IN(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(kJ()|0)>>2]=22;bK(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(kJ()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0<a>>>0){c[(kJ()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[56536+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[56536+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[56536+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=PN(c[p>>2]|0,0,29)|0;k=IN(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=MN(k|0,m|0,1e9,0)|0;k=NN(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[56568+(p<<2)>>2]|0;if(n>>>0<o>>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<<v)+-1|0;u=1e9>>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+MJ(+JJ(1.0,105-n|0),j);r=+OJ(j,+JJ(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+OJ(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(kJ()|0)>>2]=34}while(0);i=+NJ(i,b)}while(0);l=J;return +i}function nM(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=HN(g|0,b|0,10,0)|0;g=z;e=IN(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=IN(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=dK(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=JN(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function oM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=_J(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0<d>>>0?f:d;UN(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function pM(a,b,c){a=a|0;b=b|0;c=c|0;return qM(a,b,c)|0}function qM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(PK(a)|0)==0;b=rM(a,b,d)|0;if(!e)QK(a)}else b=rM(a,b,d)|0;return b|0}function rM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(bb[c[a+36>>2]&31](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((bb[c[a+40>>2]&31](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function sM(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;while(1){e=b+1|0;if(!(YJ(a[b>>0]|0)|0))break;else b=e}d=a[b>>0]|0;switch(d<<24>>24|0){case 45:{b=1;f=5;break}case 43:{b=0;f=5;break}default:{g=0;c=b;b=d}}if((f|0)==5){g=b;c=e;b=a[e>>0]|0}if(!($J(b<<24>>24)|0))b=0;else{b=0;do{b=(b*10|0)+48-(a[c>>0]|0)|0;c=c+1|0}while(($J(a[c>>0]|0)|0)!=0)}return (g|0?b:0-b|0)|0}function tM(a){a=a|0;return +(+uM(a,0))}function uM(a,b){a=a|0;b=b|0;return +(+vM(a,b,1))}function vM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;i=l;l=l+128|0;h=i;f=h;g=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;bK(h,0);e=+kM(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;l=i;return +e}function wM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if(!c)b=0;else{h=b;while(1){g=c>>>1;b=h+(O(g,d)|0)|0;f=ab[e&63](a,b)|0;if(!f)break a;if((c|0)==1){b=0;break a}f=(f|0)<0;c=f?g:c-g|0;if(!c){b=0;break}else h=f?h:b}}while(0);return b|0}function xM(a,c){a=a|0;c=c|0;var d=0,f=0,g=0;g=a+2|0;f=a+4|0;d=HN((e[c+2>>1]|0)<<16|(e[c>>1]|0)|0,e[c+4>>1]|0|0,(e[g>>1]|0)<<16|(e[a>>1]|0)|0,e[f>>1]|0|0)|0;c=IN(d|0,z|0,e[c+6>>1]|0|0,0)|0;d=z;b[a>>1]=c;a=ON(c|0,d|0,16)|0;b[g>>1]=a;b[f>>1]=d;z=d&65535;return c|0}function yM(a){a=a|0;UN(173880,58668,6)|0;UN(58668,a|0,6)|0;return 173880}function zM(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=13070;b[d+2>>1]=a;b[d+4>>1]=a>>>16;yM(d)|0;l=c;return}function AM(a){a=a|0;var b=0;b=xM(a,58674)|0;b=PN(b|0,z|0,4)|0;a=z|1072693248;c[j>>2]=b;c[j+4>>2]=a;return +(+h[j>>3]+-1.0)}function BM(){return +(+AM(58668))}function CM(a,b){a=a|0;b=b|0;if(!a)b=aJ(1,24)|0;else WN(b|0,0,24)|0;return b|0}function DM(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if(b|0)do{$I(c[b>>2]|0);d=b;b=c[b+4>>2]|0;$I(d)}while((b|0)!=0);$I(a);return}function EM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;h=a+16|0;a:do if(!(c[h>>2]|0)){k=a+12|0;g=c[k>>2]|0;if(g>>>0<f>>>0){do if(b)if(!d){c[h>>2]=1;b=0;break a}else{h=a+8|0;c[h>>2]=d;g=1024;b=d;break}else{g=f<<3;g=g>>>0>1024?g:1024;j=_I(8)|0;if(!j){c[h>>2]=1;b=0;break a}b=_I(g)|0;c[j>>2]=b;d=b;if(!b){$I(j);c[h>>2]=1;b=0;break a}c[j+4>>2]=0;h=a+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;if(!(c[a>>2]|0))c[a>>2]=j;c[h>>2]=j;h=a+8|0;c[h>>2]=d}while(0);c[k>>2]=g}else{h=a+8|0;b=c[h>>2]|0;d=b}d=d+f&3;d=((d|0)==0?0:4-d|0)+f|0;c[h>>2]=b+d;c[k>>2]=g-d;if(e)WN(b|0,0,d|0)|0}else b=0;while(0);return b|0}function FM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=l;l=l+48|0;h=v;t=GM()|0;a:do if(!t)b=12;else{u=CM(0,0)|0;if(!u){HM(t);b=12;break}WN(h|0,0,36)|0;c[h>>2]=u;c[h+4>>2]=t;c[h+16>>2]=b;c[h+32>>2]=d;e=h+28|0;c[e>>2]=-1;b=IM(h)|0;b:do if(!b){g=h+20|0;r=c[g>>2]|0;c[a>>2]=r+-1;i=c[h+8>>2]|0;if((c[e>>2]|0)<(r|0)){r=aJ(1,68)|0;if(r){q=(c[e>>2]|0)>>>31^1;c[r+60>>2]=q;c[r+64>>2]=0;c[r+28>>2]=c[g>>2];if((d&8|0)==0|(q|0)!=0){b=JM(0,t,i,r)|0;if(b|0){g=r;h=0;i=0;f=0;e=0;break}e=r+40|0;b=c[e>>2]|0;if((b|0)>0){b=_I((b<<2)+4|0)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+32>>2]=b;WN(b|0,-1,(c[e>>2]<<2)+4|0)|0;f=b;b=c[e>>2]|0}else f=0;q=aJ(b<<1|1,4)|0;c[r+36>>2]=q;if(!q){g=r;h=0;i=0;b=12;f=0;e=0;break}b=aJ(c[g>>2]|0,12)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+16>>2]=b;b=JM(u,t,i,r)|0;if(!b)b=f;else{g=r;h=0;i=0;f=0;e=0;break}}else b=0;p=h+24|0;b=KM(u,t,i,p,b)|0;if(!b){b=c[p>>2]|0;c[p>>2]=b+1;b=LM(u,0,0,b)|0;if((b|0)!=0?(s=MM(u,i,b)|0,(s|0)!=0):0){b=NM(u,t,s)|0;if(!b){o=_I(c[p>>2]<<2)|0;if(o){q=_I(c[p>>2]<<2)|0;if(q){b=c[p>>2]|0;if((b|0)>0)WN(o|0,0,b<<2|0)|0;OM(s,0,o,0)|0;f=c[p>>2]|0;if((f|0)>0){b=0;e=0;do{c[q+(e<<2)>>2]=b;n=o+(e<<2)|0;b=b+1+(c[n>>2]|0)|0;c[n>>2]=0;e=e+1|0}while((e|0)<(f|0));k=b}else k=0;m=aJ(k+1|0,32)|0;if(m){c[r>>2]=m;n=r+4|0;c[n>>2]=k;b=OM(s,m,o,q)|0;if(!b){c[r+20>>2]=0;f=s+24|0;b=c[f>>2]|0;e=0;while(1){e=e+1|0;if((c[b>>2]|0)<=-1)break;else b=b+32|0}j=aJ(e,32)|0;if(!j){g=r;h=o;i=q;b=12;f=o;e=q}else{c[r+8>>2]=j;f=c[f>>2]|0;e=c[f>>2]|0;if((e|0)>-1){b=0;do{c[j+(b<<5)+8>>2]=m+(c[q+(e<<2)>>2]<<5);c[j+(b<<5)+12>>2]=e;h=j+(b<<5)+16|0;c[h>>2]=0;i=f+12|0;g=c[i>>2]|0;if(g|0){e=0;do{w=e;e=e+1|0}while((c[g+(w<<2)>>2]|0)>-1);e=e<<2;g=_I(e)|0;c[h>>2]=g;if(!g){g=r;h=o;i=q;b=12;f=o;e=q;break b}UN(g|0,c[i>>2]|0,e|0)|0}c[j+(b<<5)+20>>2]=c[f+16>>2];b=b+1|0;f=f+32|0;e=c[f>>2]|0}while((e|0)>-1)}else b=0;c[j+(b<<5)+8>>2]=0;c[n>>2]=k;c[r+12>>2]=m+(c[q+(c[c[s+28>>2]>>2]<<2)>>2]<<5);c[r+52>>2]=c[p>>2];c[r+56>>2]=d;DM(u);HM(t);$I(o);$I(q);c[a+4>>2]=r;b=0;break a}}else{g=r;h=o;i=q;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=0}}else{g=r;h=o;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=0;h=0;i=0;b=6;f=0;e=0}}else{g=0;h=0;i=0;f=0;e=0}while(0);DM(u);HM(t);if(h|0)$I(f);if(i|0)$I(e);c[a+4>>2]=g;PM(a)}while(0);l=v;return b|0}function GM(){var a=0,b=0;a=_I(20)|0;do if(a){b=_I(2048)|0;c[a+16>>2]=b;if(!b){$I(a);a=0;break}else{c[a>>2]=512;c[a+4>>2]=1024e3;c[a+8>>2]=128;c[a+12>>2]=0;break}}while(0);return a|0}function HM(a){a=a|0;$I(c[a+16>>2]|0);$I(a);return}function IM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;p=u+4|0;q=u;r=c[b+32>>2]&1;s=b+16|0;e=c[s>>2]|0;t=c[b+4>>2]|0;d=TM(t,0)|0;a:do if(!d){m=(r|0)!=0;n=b+8|0;o=b+12|0;d=0;k=1;b:while(1){g=0;h=d;f=0;c:while(1){d=a[e>>0]|0;if(m){if(d<<24>>24==40)break;if((h|0)!=0&d<<24>>24==41)j=13;else j=14}else if(d<<24>>24==92)switch(a[e+1>>0]|0){case 40:break c;case 41:{j=13;break}default:j=14}else j=14;if((j|0)==13){j=0;i=LM(c[b>>2]|0,-1,-1,-1)|0;c[n>>2]=i;if(!i){d=12;break a}else i=f}else if((j|0)==14){j=0;d=gN(b,e)|0;if(d|0)break a;i=f;e=c[o>>2]|0}d:while(1){e:while(1){d=a[e>>0]|0;switch(d<<24>>24){case 42:case 92:break;default:{if(!m)break e;switch(d<<24>>24){case 123:case 63:case 43:break;default:break e}}}d=d<<24>>24==92;if(m&d)break;f=e+1|0;if(d)switch(a[f>>0]|0){case 123:case 63:case 43:break;default:break e}e=d?f:e;if((!m?(e|0)==((c[s>>2]|0)+1|0):0)?(a[e+-1>>0]|0)==94:0)break;if((a[e>>0]|0)==123){e=hN(e+1|0,r,p,q)|0;if(!e){j=28;break b}d=c[q>>2]|0;f=c[b>>2]|0;if(!d)d=LM(f,-1,-1,-1)|0;else j=36}else{c[p>>2]=0;c[q>>2]=-1;d=a[e>>0]|0;if(d<<24>>24==43){c[p>>2]=1;d=a[e>>0]|0}if(d<<24>>24==63){c[q>>2]=1;d=1}else d=-1;e=e+1|0;f=c[b>>2]|0;j=36}if((j|0)==36){j=0;d=bN(f,c[n>>2]|0,c[p>>2]|0,d,0)|0}c[n>>2]=d;if(!d){d=12;break a}}d=MM(c[b>>2]|0,g,c[n>>2]|0)|0;f=a[e>>0]|0;f:do if(m){if(f<<24>>24==124){j=40;break d}if((h|0)!=0&f<<24>>24==41|f<<24>>24==0)j=47;else{g=d;f=i;continue c}}else{switch(f<<24>>24){case 0:{j=47;break f}case 92:break;default:{g=d;f=i;continue c}}switch(a[e+1>>0]|0){case 124:case 41:break;default:{g=d;f=i;continue c}}d=cN(c[b>>2]|0,i,d)|0;if((a[e+1>>0]|0)==124){f=2;break d}if(!h){d=8;break a}e=e+2|0;f=92}while(0);if((j|0)==47){j=0;d=cN(c[b>>2]|0,i,d)|0;e=f<<24>>24==41?e+1|0:e}d=iN(b,d,UM(t)|0)|0;if(d|0)break a;d=f<<24>>24==0;f=(h|0)<1;if(f&d){j=50;break b}if(f|d){d=8;break a}g=VM(t)|0;h=h+-1|0;i=VM(t)|0}if((j|0)==40){f=1;d=cN(c[b>>2]|0,i,d)|0}g=0;e=e+f|0;f=d}d=SM(t,f)|0;if(d|0)break a;d=SM(t,g)|0;if(d|0)break a;d=TM(t,k)|0;if(d|0)break a;d=h+1|0;k=k+1|0;e=m?e+1|0:e+2|0}if((j|0)==28){d=10;break}else if((j|0)==50){c[b+20>>2]=k;d=0;break}}while(0);l=u;return d|0}function JM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;x=RM(d)|0;y=(b|0)==0|(f|0)==0;if(!y){c[f+48>>2]=0;c[c[f+36>>2]>>2]=-1}g=f+28|0;z=_I((c[g>>2]<<3)+8|0)|0;do if(!z)g=12;else{c[z>>2]=-1;A=_I((c[g>>2]<<2)+4|0)|0;if(!A){$I(z);g=12;break}c[A>>2]=-1;B=_I((c[g>>2]<<3)+8|0)|0;if(!B){$I(z);$I(A);g=12;break}h=c[g>>2]|0;g=0;do{c[B+(g<<3)>>2]=-1;g=g+1|0}while(g>>>0<=h>>>0);SM(d,e)|0;g=TM(d,0)|0;a:do if((g|0)!=0|(RM(d)|0)<=(x|0)){e=z;n=0;h=0;m=0;l=-1}else{u=f+32|0;v=f+36|0;w=f+16|0;e=z;n=0;h=0;m=0;t=1;l=-1;s=0;while(1){b:do switch(UM(d)|0){case 6:{i=UM(d)|0;g=0;do{j=e+(g<<2)|0;g=g+1|0}while((c[j>>2]|0)>-1);c[j>>2]=i<<1|1;c[e+(g<<2)>>2]=-1;g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[A+(g+-1<<2)>>2]=-1;g=0;j=t;i=s;break}case 0:{q=VM(d)|0;r=q+12|0;j=c[r>>2]|0;if((j|0)>-1){g=0;do{i=e+(g<<2)|0;g=g+1|0}while((c[i>>2]|0)>-1);c[i>>2]=j<<1;c[e+(g<<2)>>2]=-1;if(!y){g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[(c[w>>2]|0)+(j*12|0)+8>>2]=0;if((g|0)>0){g=_I((g<<2)+4|0)|0;if(!g){g=12;j=t;i=s;break b}c[(c[w>>2]|0)+(j*12|0)+8>>2]=g;i=c[A>>2]|0;if((i|0)>-1){k=0;j=g;do{c[j>>2]=i;k=k+1|0;i=c[A+(k<<2)>>2]|0;j=g+(k<<2)|0}while((i|0)>-1);g=j}c[g>>2]=-1}}g=TM(d,c[r>>2]|0)|0;if(g|0){j=t;i=s;break b}g=TM(d,6)|0;if(g|0){j=t;i=s;break b}}c:do switch(c[q>>2]|0){case 0:{p=c[c[q+4>>2]>>2]|0;if((p|0)>-1|(p|0)==-4?(c[e>>2]|0)>-1:0){if(y){c[q+20>>2]=1;g=0}else{g=dN(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}eN(e,f,m)}c[e>>2]=-1;p=t+1|0;o=s;n=n+1|0;m=t}else{p=t;g=0;o=s}break}case 1:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;g=SM(d,q)|0;if(!g){g=TM(d,5)|0;if(!g){g=SM(d,j)|0;if(!g){g=TM(d,0)|0;if(!g){i=k+20|0;g=TM(d,(c[i>>2]|0)+t|0)|0;if(!g){if((c[i>>2]|0)>0){i=(c[j+20>>2]|0)>0;g=i?t:-1;i=t+(i&1)|0}else{g=-1;i=t}g=TM(d,g)|0;if(!g){g=TM(d,4)|0;if(!g){g=SM(d,k)|0;if(!g){p=i;g=TM(d,0)|0;o=s}else{p=i;o=s}}else{p=i;o=s}}else{p=i;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 2:{i=c[q+4>>2]|0;if(y){if((c[e>>2]|0)>-1)g=1;else g=(a[i+12>>0]&1)!=0;g=TM(d,g&1)|0;if(g|0){p=t;o=s;break c}}else{g=TM(d,m)|0;if(g|0){p=t;o=s;break c}g=TM(d,a[i+12>>0]&1)|0;if(g|0){p=t;o=s;break c}}g=SM(d,q)|0;if(!g){g=TM(d,1)|0;if(!g){g=SM(d,c[i>>2]|0)|0;if(!g){g=TM(d,0)|0;if(!g){if((c[e>>2]|0)<=-1?(a[i+12>>0]&1)==0:0){p=t;g=0;o=0;break c}if(y)g=0;else{g=dN(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=(a[i+12>>0]&1)==0?s:1;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}eN(e,f,m)}c[e>>2]=-1;p=t+1|0;o=0;n=n+1|0;m=t}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 3:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;i=(c[e>>2]|0)>-1;p=t+1|0;g=TM(d,i?p:t)|0;if(!g){g=TM(d,i?t:m)|0;if(!g){g=SM(d,e)|0;if(!g){g=TM(d,(c[e>>2]|0)>>>31^1)|0;if(!g){g=SM(d,q)|0;if(!g){g=SM(d,j)|0;if(!g){g=SM(d,k)|0;if(!g){g=TM(d,3)|0;if(!g){g=SM(d,j)|0;if(!g){g=TM(d,0)|0;if(g|0){p=t;o=s;break c}g=TM(d,2)|0;if(g|0){p=t;o=s;break c}g=SM(d,k)|0;if(g|0){p=t;o=s;break c}g=TM(d,0)|0;if(g|0){p=t;o=s;break c}if((c[e>>2]|0)>-1){if(y)g=0;else{g=dN(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}eN(e,f,m)}c[e>>2]=-1;n=n+1|0;m=t;i=p}else{g=0;i=t}t=(c[q+16>>2]|0)>0;p=t?i+2|0:i;o=s;m=t?i+1|0:m}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}default:{p=t;g=0;o=s}}while(0);j=c[r>>2]|0;if((j|0)>-1){i=0;do{k=A+(i<<2)|0;i=i+1|0}while((c[k>>2]|0)>-1);c[k>>2]=j;c[A+(i<<2)>>2]=-1;j=p;i=o}else{j=p;i=o}break}case 1:{g=VM(d)|0;if(y){i=c[(c[c[g+4>>2]>>2]|0)+20>>2]|0;c[g+20>>2]=(UM(d)|0)+i;i=0;l=-1}else{q=UM(d)|0;r=UM(d)|0;i=q;l=(q|0)==0?l:r}g=0;j=t;i=y?s:(i|0)==0&1;break}case 4:{i=UM(d)|0;j=UM(d)|0;g=0;m=(i|0)>-1?i:m;i=s;break}case 5:{g=VM(d)|0;if(y){j=c[g+4>>2]|0;c[g+20>>2]=(c[(c[j+4>>2]|0)+20>>2]|0)+(c[(c[j>>2]|0)+20>>2]|0);g=0;j=t;i=s}else{g=0;j=t;i=s}break}case 2:{while(1)if((c[e>>2]|0)>-1)e=e+4|0;else{g=0;j=t;i=s;break}break}case 3:{j=VM(d)|0;o=VM(d)|0;g=VM(d)|0;e=UM(d)|0;if(y){r=c[g+4>>2]|0;s=g+16|0;c[g+20>>2]=(c[(c[r>>2]|0)+20>>2]|0)+e+(c[(c[r+4>>2]|0)+20>>2]|0)+((c[s>>2]|0)>0?2:0);g=s}else g=g+16|0;e=VM(d)|0;i=UM(d)|0;k=UM(d)|0;if((c[g>>2]|0)>0){if(y)g=0;else{g=fN(b,j,i)|0;c[(c[u>>2]|0)+(i<<2)>>2]=1;if(!g)g=fN(b,o,k)|0;c[(c[u>>2]|0)+(k<<2)>>2]=1}n=n+2|0;j=t;i=1}else{g=0;j=t;i=1}break}default:{g=0;j=t;i=s}}while(0);if((g|0)!=0|(RM(d)|0)<=(x|0))break a;else{t=j;s=i}}}while(0);if(!y?(eN(e,f,m),(l|0)>-1):0){i=c[f+36>>2]|0;e=0;while(1){j=i+(e<<2)|0;k=e+1|0;if((c[j>>2]|0)>-1)e=k;else break}c[j>>2]=m;c[i+(k<<2)>>2]=l;c[i+(e+2<<2)>>2]=-1;h=h+1|0}c[f+48>>2]=n;c[f+40>>2]=n;c[f+44>>2]=h;$I(z);$I(A);$I(B)}while(0);return g|0}function KM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;t=y+12|0;x=y+8|0;u=y+4|0;v=y;w=RM(b)|0;c[t>>2]=0;c[x>>2]=0;d=SM(b,d)|0;a:do if(!d){d=TM(b,0)|0;if(!d){b:do if((RM(b)|0)>(w|0)){g=0;i=0;j=0;c:while(1){q=UM(b)|0;r=VM(b)|0;d:do switch(q|0){case 0:{switch(c[r>>2]|0){case 0:{d=c[r+4>>2]|0;r=c[d>>2]|0;if(!((r|0)>-1|(r|0)==-4)){d=j;break d}r=d+8|0;d=(c[r>>2]|0)+j|0;c[r>>2]=d;if((d|0)<=(c[x>>2]|0)){d=j;break d}c[x>>2]=d;d=j;break d}case 3:{h=c[r+4>>2]|0;d=SM(b,c[h+4>>2]|0)|0;if(d|0)break b;d=TM(b,0)|0;if(d|0)break b;d=SM(b,c[h>>2]|0)|0;if(d|0)break b;break}case 1:{h=c[r+4>>2]|0;d=SM(b,c[h+4>>2]|0)|0;if(d|0)break b;d=TM(b,0)|0;if(d|0)break b;d=SM(b,c[h>>2]|0)|0;if(d|0)break b;break}case 2:{h=c[r+4>>2]|0;d=TM(b,j)|0;if(d|0)break b;d=SM(b,r)|0;if(d|0)break b;d=TM(b,1)|0;if(d|0)break b;d=SM(b,c[h>>2]|0)|0;if(d|0)break b;d=TM(b,0)|0;if(d|0)break b;if((c[h+4>>2]|0)<=1?(c[h+8>>2]|0)<=1:0)d=j;else{c[t>>2]=0;d=0}i=i+1|0;break d}default:{d=j;break d}}d=TM(b,0)|0;if(!d)d=j;else break b;break}case 1:{p=r+4|0;o=c[p>>2]|0;q=UM(b)|0;c[t>>2]=q;n=o+4|0;j=c[n>>2]|0;if((j|0)<=1)if((c[o+8>>2]|0)>1){c[u>>2]=0;if((j|0)>0)s=30;else{d=q;h=0;s=37}}else d=q;else{c[u>>2]=0;s=30}e:do if((s|0)==30){d=aN(a,b,c[o>>2]|0,(j|0)>1?1:2,t,f,v,x)|0;if(!d){h=0;k=q;m=1}else{s=34;break c}while(1){d=c[v>>2]|0;if(!h)h=d;else h=MM(a,h,d)|0;if(!h){d=12;s=34;break c}j=c[n>>2]|0;if((m|0)>=(j|0)){d=k;s=37;break e}k=c[t>>2]|0;m=m+1|0;d=aN(a,b,c[o>>2]|0,(m|0)<(j|0)?1:2,t,f,v,x)|0;if(d|0){s=34;break c}}}while(0);if((s|0)==37){s=0;n=o+8|0;k=c[n>>2]|0;if((k|0)==-1){k=c[t>>2]|0;d=aN(a,b,c[o>>2]|0,0,t,0,u,x)|0;if(d|0)break c;j=bN(a,c[u>>2]|0,0,-1,0)|0;c[u>>2]=j;if(!j){d=12;break c}else d=k}else if((j|0)<(k|0)){k=j;j=0;while(1){m=c[t>>2]|0;d=aN(a,b,c[o>>2]|0,0,t,0,v,x)|0;if(d|0){s=49;break c}if(!j){d=c[v>>2]|0;c[u>>2]=d}else{d=MM(a,c[v>>2]|0,j)|0;c[u>>2]=d}if(!d){d=12;s=49;break c}j=LM(a,-1,-1,-1)|0;if(!j){d=12;s=49;break c}j=cN(a,j,d)|0;c[u>>2]=j;if(!j){d=12;s=49;break c}k=k+1|0;if((k|0)>=(c[n>>2]|0)){d=m;break}}}else j=0;c[t>>2]=d;if(h){if(j){h=MM(a,h,j)|0;s=54}}else{h=j;s=54}if((s|0)==54){s=0;if(!h){d=12;break c}}c[p>>2]=c[h+4>>2];c[r>>2]=c[h>>2]}i=i+-1|0;h=d-q+g|0;if(!i){c[t>>2]=h;g=h;i=0;d=h}else g=h;break}default:d=j}while(0);if((RM(b)|0)>(w|0))j=d;else{d=0;break b}}break a}else{d=0;g=0}while(0);w=(c[e>>2]|0)+g|0;x=c[x>>2]|0;c[e>>2]=(x|0)>(w|0)?x:w}}while(0);l=y;return d|0}function LM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=EM(a,0,0,1,20)|0;a=$M(a,0,f)|0;if(!a)a=0;else{c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=e}return a|0}function MM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=EM(a,0,0,1,8)|0;a=$M(a,1,e)|0;if(!a)d=0;else{c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}}return d|0}function NM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;j=o+4|0;k=o;m=RM(b)|0;d=SM(b,d)|0;a:do if(!d){d=TM(b,0)|0;if(!d)if((RM(b)|0)>(m|0)){b:while(1){h=UM(b)|0;i=VM(b)|0;c:do switch(h|0){case 0:switch(c[i>>2]|0){case 0:{g=c[i+4>>2]|0;f=c[g>>2]|0;if((f|0)==-4){c[i+8>>2]=0;d=g+8|0;h=WM(a,c[d>>2]|0,0,1114111,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=WM(a,c[d>>2]|0,0,1114111,0,0,c[g+4>>2]|0)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}d=i+8|0;if((f|0)<0){c[d>>2]=1;h=XM(a)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=XM(a)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}else{c[d>>2]=0;d=g+8|0;e=g+4|0;h=WM(a,c[d>>2]|0,f,c[e>>2]|0,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=WM(a,c[d>>2]|0,c[g>>2]|0,c[e>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,-1)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}}case 3:{d=SM(b,i)|0;if(d|0)break a;d=TM(b,1)|0;if(d|0)break a;e=i+4|0;d=SM(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(d|0)break a;d=SM(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(!d)break c;else break a}case 1:{d=SM(b,i)|0;if(d|0)break a;d=TM(b,2)|0;if(d|0)break a;e=i+4|0;d=SM(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(d|0)break a;d=SM(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(!d)break c;else break a}case 2:{d=SM(b,i)|0;if(d|0)break a;d=TM(b,3)|0;if(d|0)break a;d=SM(b,c[c[i+4>>2]>>2]|0)|0;if(d|0)break a;d=TM(b,0)|0;if(!d)break c;else break a}default:break c}case 1:{d=c[i+4>>2]|0;e=c[d>>2]|0;f=d+4|0;g=c[f>>2]|0;if(!(c[e+8>>2]|0))h=(c[g+8>>2]|0)!=0;else h=1;c[i+8>>2]=h&1;h=YM(a,c[e+24>>2]|0,c[g+24>>2]|0,0,0)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=YM(a,c[(c[d>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,0,0)|0;c[i+28>>2]=h;if(!h){d=12;break a}break}case 3:{h=c[i+4>>2]|0;d=c[h>>2]|0;if(!(c[h+4>>2]|0))e=1;else e=(c[d+8>>2]|0)!=0&1;c[i+8>>2]=e;c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];break}case 2:{g=c[i+4>>2]|0;d=c[g>>2]|0;e=d+8|0;if(!(c[e>>2]|0))f=0;else f=(c[(c[g+4>>2]|0)+8>>2]|0)!=0;c[i+8>>2]=f&1;if(c[e>>2]|0){d=ZM(b,d,0,0,j)|0;if(d|0)break b;e=_I((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=ZM(b,c[g>>2]|0,e,k,0)|0;if(d|0){n=45;break b}d=g+4|0;h=i+24|0;c[h>>2]=YM(a,c[(c[d>>2]|0)+24>>2]|0,c[(c[g>>2]|0)+24>>2]|0,e,c[k>>2]|0)|0;$I(e);if(!(c[h>>2]|0)){d=12;break b}else f=d}else{c[i+24>>2]=c[d+24>>2];f=g+4|0}d=c[f>>2]|0;if(c[d+8>>2]|0){d=ZM(b,d,0,0,j)|0;if(d|0)break b;e=_I((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=ZM(b,c[f>>2]|0,e,k,0)|0;if(d|0){n=52;break b}i=i+28|0;c[i>>2]=YM(a,c[(c[g>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,e,c[k>>2]|0)|0;$I(e);if(!(c[i>>2]|0)){d=12;break b}}else c[i+28>>2]=c[d+28>>2];break}default:{}}while(0);if((RM(b)|0)<=(m|0)){d=0;break a}}if((n|0)==45)$I(e);else if((n|0)==52)$I(e)}else d=0}while(0);l=o;return d|0}function OM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:while(1){switch(c[a>>2]|0){case 2:{a=c[a+4>>2]|0;if((c[a+8>>2]|0)==-1?(h=c[a>>2]|0,h=QM(c[h+28>>2]|0,c[h+24>>2]|0,b,d,e)|0,(h|0)!=0):0){a=h;break a}break}case 3:{f=c[a+4>>2]|0;a=OM(c[f>>2]|0,b,d,e)|0;if(a|0)break a;a=f+4|0;break}case 1:{f=c[a+4>>2]|0;g=f+4|0;a=QM(c[(c[f>>2]|0)+28>>2]|0,c[(c[g>>2]|0)+24>>2]|0,b,d,e)|0;if(a|0)break a;a=OM(c[f>>2]|0,b,d,e)|0;if(!a)a=g;else break a;break}default:{a=0;break a}}a=c[a>>2]|0}return a|0}function PM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=c[a+4>>2]|0;if(h|0){e=h+4|0;a=c[h>>2]|0;if(c[e>>2]|0){d=0;do{if(c[a+(d<<5)+8>>2]|0){b=c[a+(d<<5)+16>>2]|0;if(b){$I(b);a=c[h>>2]|0}b=c[a+(d<<5)+28>>2]|0;if(b){$I(b);a=c[h>>2]|0}}d=d+1|0}while(d>>>0<(c[e>>2]|0)>>>0)}if(a|0)$I(a);d=h+8|0;a=c[d>>2]|0;if(a|0){if(c[a+8>>2]|0){while(1){b=c[a+16>>2]|0;if(b|0)$I(b);if(!(c[a+40>>2]|0))break;else a=a+32|0}a=c[d>>2]|0}$I(a)}f=h+16|0;a=c[f>>2]|0;if(a|0){g=h+28|0;b=c[g>>2]|0;if(b){e=0;do{d=c[a+(e*12|0)+8>>2]|0;if(d){$I(d);b=c[g>>2]|0;a=c[f>>2]|0}e=e+1|0}while(e>>>0<b>>>0)}$I(a)}a=c[h+32>>2]|0;if(a|0)$I(a);a=c[h+20>>2]|0;if(a|0)$I(a);a=c[h+36>>2]|0;if(a|0)$I(a);$I(h)}return}function QM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[a>>2]|0;h=(g|0)>-1;a:do if(!d)if(h){h=b+32|0;do{if((c[b>>2]|0)>-1?(y=e+(g<<2)|0,c[y>>2]=(c[y>>2]|0)+1,(c[h>>2]|0)>-1):0){g=h;do{y=e+(c[a>>2]<<2)|0;c[y>>2]=(c[y>>2]|0)+1;g=g+32|0}while((c[g>>2]|0)>-1)}a=a+32|0;g=c[a>>2]|0}while((g|0)>-1);g=0}else g=0;else if(h)while(1){h=c[b>>2]|0;b:do if((h|0)>-1){p=a+4|0;q=a+8|0;r=a+16|0;s=a+20|0;t=a+24|0;u=a+28|0;v=a+12|0;e=-1;g=b;while(1){o=h;while(1){if((o|0)!=(e|0))break;g=g+32|0;h=c[g>>2]|0;if((h|0)>-1)o=h;else break b}l=d+(c[f+(c[a>>2]<<2)>>2]<<5)|0;while(1){h=l+8|0;if(!(c[h>>2]|0))break;else l=l+32|0}c[l+40>>2]=0;c[l>>2]=c[p>>2];c[l+4>>2]=c[q>>2];c[h>>2]=d+(c[f+(o<<2)>>2]<<5);c[l+12>>2]=o;h=c[s>>2]|0;e=c[g+16>>2]|c[r>>2]|(h|0?4:0)|(c[t>>2]|0?8:0);i=l+20|0;c[i>>2]=e;j=c[u>>2]|0;if((j|0)>-1){c[i>>2]=e|256;h=j}c[l+24>>2]=h;e=c[t>>2]|0;if(!e)c[l+28>>2]=0;else{h=0;do{n=h;h=h+1|0}while((c[e+(n<<2)>>2]|0)!=0);h=_I(h<<2)|0;c[l+28>>2]=h;if(!h){g=12;break a}k=c[t>>2]|0;e=c[k>>2]|0;if(e){j=0;i=h;do{c[i>>2]=e;j=j+1|0;e=c[k+(j<<2)>>2]|0;i=h+(j<<2)|0}while((e|0)!=0);h=i}c[h>>2]=0}e=c[v>>2]|0;if(!e)h=0;else{h=0;while(1)if((c[e+(h<<2)>>2]|0)>-1)h=h+1|0;else break}k=g+12|0;i=c[k>>2]|0;if(!i)e=0;else{e=0;while(1)if((c[i+(e<<2)>>2]|0)>-1)e=e+1|0;else break}j=l+16|0;i=c[j>>2]|0;if(i|0)$I(i);c[j>>2]=0;h=e+h|0;if((h|0)>0){n=_I((h<<2)+4|0)|0;c[j>>2]=n;if(!n){g=12;break a}e=c[v>>2]|0;if((e|0)!=0?(w=c[e>>2]|0,(w|0)>-1):0){h=0;i=w;do{c[n+(h<<2)>>2]=i;h=h+1|0;i=c[e+(h<<2)>>2]|0}while((i|0)>-1);m=h}else m=0;j=c[k>>2]|0;if((j|0)!=0?(x=c[j>>2]|0,(x|0)>-1):0){k=(m|0)>0;h=m;i=0;l=x;do{c:do if(k){e=0;while(1){if((c[n+(e<<2)>>2]|0)==(l|0))break c;e=e+1|0;if((e|0)>=(m|0)){y=39;break}}}else y=39;while(0);if((y|0)==39){y=0;c[n+(h<<2)>>2]=l;h=h+1|0}i=i+1|0;l=c[j+(i<<2)>>2]|0}while((l|0)>-1)}else h=m;c[n+(h<<2)>>2]=-1}g=g+32|0;h=c[g>>2]|0;if((h|0)<=-1)break;else e=o}}while(0);a=a+32|0;if((c[a>>2]|0)<=-1){g=0;break}}else g=0;while(0);return g|0}function RM(a){a=a|0;return c[a+12>>2]|0}function SM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=_M(a,e)|0;l=d;return b|0}function TM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=_M(a,e)|0;l=d;return b|0}function UM(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function VM(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function WM(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=EM(a,0,0,1,64)|0;if(!a)a=0;else{c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+20>>2]=f;c[a+24>>2]=g;c[a+28>>2]=h;c[a+32>>2]=-1;c[a+36>>2]=-1;c[a+40>>2]=-1}return a|0}function XM(a){a=a|0;a=EM(a,0,0,1,32)|0;if(!a)a=0;else{c[a>>2]=-1;c[a+4>>2]=-1;c[a+8>>2]=-1}return a|0}function YM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(e|0)==0;if(o)n=0;else{g=0;while(1)if((c[e+(g<<2)>>2]|0)>-1)g=g+1|0;else{n=g;break}}h=0;while(1)if((c[b+(h<<5)>>2]|0)>-1)h=h+1|0;else{g=0;break}while(1)if((c[d+(g<<5)>>2]|0)>-1)g=g+1|0;else break;g=EM(a,0,0,1,(g+h<<5)+32|0)|0;a:do if(!g)g=0;else{h=c[b>>2]|0;if((h|0)>-1){m=(n|0)>0;i=0;while(1){c[g+(i<<5)>>2]=h;c[g+(i<<5)+4>>2]=c[b+(i<<5)+4>>2];c[g+(i<<5)+8>>2]=c[b+(i<<5)+8>>2];c[g+(i<<5)+16>>2]=c[b+(i<<5)+16>>2]|f;c[g+(i<<5)+20>>2]=c[b+(i<<5)+20>>2];c[g+(i<<5)+24>>2]=c[b+(i<<5)+24>>2];c[g+(i<<5)+28>>2]=c[b+(i<<5)+28>>2];l=b+(i<<5)+12|0;j=c[l>>2]|0;h=(j|0)==0;if(o&h)h=0;else{if(h)k=0;else{h=0;while(1)if((c[j+(h<<2)>>2]|0)>-1)h=h+1|0;else{k=h;break}}h=EM(a,0,0,0,(k+n<<2)+4|0)|0;if(!h){g=0;break a}if((k|0)>0){l=c[l>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[l+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}else k=0;if(m){j=0;do{c[h+(j+k<<2)>>2]=c[e+(j<<2)>>2];j=j+1|0}while((j|0)!=(n|0));j=n}else j=0;c[h+(j+k<<2)>>2]=-1}c[g+(i<<5)+12>>2]=h;i=i+1|0;h=c[b+(i<<5)>>2]|0;if((h|0)<=-1){n=i;break}}}else n=0;i=c[d>>2]|0;h=g+(n<<5)|0;if((i|0)>-1){m=0;l=n;do{c[h>>2]=i;c[g+(l<<5)+4>>2]=c[d+(m<<5)+4>>2];c[g+(l<<5)+8>>2]=c[d+(m<<5)+8>>2];c[g+(l<<5)+16>>2]=c[d+(m<<5)+16>>2];c[g+(l<<5)+20>>2]=c[d+(m<<5)+20>>2];c[g+(l<<5)+24>>2]=c[d+(m<<5)+24>>2];c[g+(l<<5)+28>>2]=c[d+(m<<5)+28>>2];j=d+(m<<5)+12|0;h=c[j>>2]|0;if(!h)h=0;else{i=0;while(1)if((c[h+(i<<2)>>2]|0)>-1)i=i+1|0;else break;h=EM(a,0,0,0,(i<<2)+4|0)|0;if(!h){g=0;break a}if((i|0)>0){k=c[j>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(i|0))}else i=0;c[h+(i<<2)>>2]=-1}c[g+(l<<5)+12>>2]=h;m=m+1|0;i=c[d+(m<<5)>>2]|0;l=m+n|0;h=g+(l<<5)|0}while((i|0)>-1)}c[h>>2]=-1}while(0);return g|0}function ZM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=RM(a)|0;p=(f|0)!=0;if(p)c[f>>2]=0;b=SM(a,b)|0;a:do if(!b){m=(d|0)==0;l=(e|0)==0;if((RM(a)|0)>(o|0))while(1){b=VM(a)|0;b:do switch(c[b>>2]|0){case 0:{b=c[b+4>>2]|0;switch(c[b>>2]|0){case -3:break;case -2:{if(l)break b;c[e>>2]=c[e>>2]|c[b+4>>2];break b}default:break b}h=c[b+4>>2]|0;if((h|0)>-1){c:do if(!m){b=0;while(1){i=d+(b<<2)|0;j=c[i>>2]|0;if((j|0)<=-1)break;if((j|0)==(h|0))break c;else b=b+1|0}c[i>>2]=h;c[d+(b+1<<2)>>2]=-1}while(0);if(p)c[f>>2]=(c[f>>2]|0)+1}break}case 3:{b=c[b+4>>2]|0;h=c[b>>2]|0;if(c[h+8>>2]|0){k=h;n=6;break b}b=c[b+4>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}case 1:{b=c[b+4>>2]|0;h=SM(a,c[b>>2]|0)|0;if(h|0){g=h;break a}k=c[b+4>>2]|0;n=6;break}case 2:{b=c[c[b+4>>2]>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}default:{}}while(0);if((n|0)==6?(n=0,g=SM(a,k)|0,g|0):0)break a;if((RM(a)|0)<=(o|0)){g=0;break a}}else g=0}else g=b;while(0);return g|0}function _M(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;d=a+12|0;e=c[d>>2]|0;j=c[a>>2]|0;if((e|0)>=(j|0)){d=c[a+4>>2]|0;if((j|0)<(d|0)?(f=(c[a+8>>2]|0)+j|0,f=(f|0)>(d|0)?d:f,h=a+16|0,i=bJ(c[h>>2]|0,f<<2)|0,(i|0)!=0):0){c[a>>2]=f;c[h>>2]=i;c[g>>2]=c[b>>2];_M(a,g)|0;d=0}else d=12}else{c[(c[a+16>>2]|0)+(e<<2)>>2]=c[b>>2];c[d>>2]=(c[d>>2]|0)+1;d=0}l=k;return d|0}function $M(a,b,d){a=a|0;b=b|0;d=d|0;a=EM(a,0,0,1,32)|0;if((d|0)!=0&(a|0)!=0){c[a+4>>2]=d;c[a>>2]=b;c[a+8>>2]=-1;c[a+12>>2]=-1}else a=0;return a|0}function aN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=RM(d)|0;SM(d,e)|0;e=TM(d,0)|0;a:do if(!e){q=(f&1|0)==0;p=(f&2|0)!=0;o=0;l=1;e=i;while(1){if((RM(d)|0)>(r|0))n=e;else{f=o;e=0;break a}b:while(1){c:while(1){switch(UM(d)|0){case 1:{i=7;break c}case 0:{e=VM(d)|0;switch(c[e>>2]|0){case 0:{i=9;break b}case 3:{i=19;break b}case 1:{i=26;break b}case 2:{i=33;break c}default:{}}break}default:{}}if((RM(d)|0)<=(r|0)){f=o;e=0;break a}}if((i|0)==7)e=VM(d)|0;else if((i|0)==33){f=c[e+4>>2]|0;e=SM(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=TM(d,0)|0;if(e|0){f=o;break a}e=bN(b,c[f>>2]|0,c[f+4>>2]|0,c[f+8>>2]|0,a[f+12>>0]&1)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}e=c[e+4>>2]|0}if((RM(d)|0)>(r|0))n=e;else{f=o;e=0;break a}}if((i|0)==9){m=c[e+4>>2]|0;i=c[m+8>>2]|0;f=c[m>>2]|0;e=c[m+4>>2]|0;if(!((f|0)>-1|(f|0)==-4))if(q|(f|0)!=-3)if((f|0)==-3)if(p&(l|0)!=0){c[h+(e<<2)>>2]=1;f=-3;k=o;l=0}else{f=-3;k=o}else k=o;else{e=-1;f=-1;i=-1;k=o}else{i=(c[g>>2]|0)+i|0;k=o+1|0}e=LM(b,f,e,i)|0;c[n>>2]=e;if(!e)e=12;else{e=c[e+4>>2]|0;c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=0}if((i|0)>(c[j>>2]|0)){c[j>>2]=i;f=n}else f=n}else if((i|0)==19){i=c[e+4>>2]|0;f=i+4|0;e=cN(b,c[i>>2]|0,c[f>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}m=c[e+4>>2]|0;e=SM(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=TM(d,0)|0;if(e|0){f=o;break a}e=SM(d,m+4|0)|0;if(e|0){f=o;break a}e=TM(d,1)|0;if(e|0){f=o;break a}e=SM(d,c[i>>2]|0)|0;if(e|0){f=o;break a}k=o;f=m;e=TM(d,0)|0}else if((i|0)==26){m=c[e+4>>2]|0;i=m+4|0;e=MM(b,c[m>>2]|0,c[i>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}f=c[e+4>>2]|0;c[f>>2]=0;k=f+4|0;c[k>>2]=0;e=SM(d,c[i>>2]|0)|0;if(e|0){f=o;break a}e=TM(d,0)|0;if(e|0){f=o;break a}e=SM(d,k)|0;if(e|0){f=o;break a}e=TM(d,1)|0;if(e|0){f=o;break a}e=SM(d,c[m>>2]|0)|0;if(e|0){f=o;break a}k=o;e=TM(d,0)|0}if(!e){o=k;e=f}else{f=k;break}}}else f=0;while(0);c[g>>2]=(c[g>>2]|0)+f;return e|0}function bN(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=EM(b,0,0,1,16)|0;b=$M(b,2,h)|0;if(!b)b=0;else{c[h>>2]=d;c[h+4>>2]=e;c[h+8>>2]=f;h=h+12|0;a[h>>0]=a[h>>0]&-2|g&1;c[b+16>>2]=c[d+16>>2]}return b|0}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=EM(a,0,0,1,8)|0;a=$M(a,3,e)|0;if((d|0)!=0&(a|0)!=0){c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}else d=0}return d|0}function dN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=EM(a,0,0,0,8)|0;if(((e|0)!=0?(d=LM(a,-3,d,-1)|0,c[e>>2]=d,(d|0)!=0):0)?(f=EM(a,0,0,0,32)|0,c[e+4>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function eN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=c[a>>2]|0;if((f|0)>-1){g=c[b+16>>2]|0;e=0;b=f;do{f=b>>>1;c[((b&1|0)==0?g+(f*12|0)|0:g+(f*12|0)+4|0)>>2]=d;e=e+1|0;b=c[a+(e<<2)>>2]|0}while((b|0)>-1)}c[a>>2]=-1;return}function fN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=EM(a,0,0,0,8)|0;if(((e|0)!=0?(d=LM(a,-3,d,-1)|0,c[e+4>>2]=d,(d|0)!=0):0)?(f=EM(a,0,0,0,32)|0,c[e>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function gN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;i=b+32|0;h=c[i>>2]|0;g=h&1;a:do switch(a[d>>0]|0){case 91:{e=kN(b,d+1|0)|0;break}case 92:{e=d+1|0;f=lN(e)|0;if(f|0){e=gN(b,f)|0;c[b+12>>2]=d+2;break a}f=a[e>>0]|0;switch(f|0){case 0:{e=5;break a}case 98:{f=LM(c[b>>2]|0,-2,64,-1)|0;break}case 66:{f=LM(c[b>>2]|0,-2,128,-1)|0;break}case 60:{f=LM(c[b>>2]|0,-2,16,-1)|0;break}case 62:{f=LM(c[b>>2]|0,-2,32,-1)|0;break}case 120:{h=d+2|0;i=(a[h>>0]|0)==123;g=i?8:2;h=i?d+3|0:h;e=0;f=0;do{d=mN(a[h+e>>0]|0)|0;if((d|0)<0)break;f=d+(f<<4)|0;e=e+1|0}while((f|0)<1114112&(e|0)<(g|0));e=h+e|0;if(i){if((a[e>>0]|0)!=125){e=9;break a}e=e+1|0}j=c[b>>2]|0;i=b+24|0;k=c[i>>2]|0;c[i>>2]=k+1;f=LM(j,f,f,k)|0;e=e+-1|0;break}case 63:case 43:case 123:if(!g){e=13;break a}else{k=37;break a}case 124:{if(g|0){k=37;break a}e=LM(c[b>>2]|0,-1,-1,-1)|0;k=45;break a}default:{if(!((g|0)==0&(f+-49|0)>>>0<9)){k=37;break a}j=f+-48|0;k=c[b>>2]|0;i=b+24|0;f=c[i>>2]|0;c[i>>2]=f+1;f=LM(k,-4,j,f)|0;k=b+28|0;i=c[k>>2]|0;c[k>>2]=(j|0)<(i|0)?i:j}}d=e+1|0;e=f;k=45;break}case 46:{e=c[b>>2]|0;g=b+24|0;f=c[g>>2]|0;c[g>>2]=f+1;if(h&4){f=LM(e,0,9,f)|0;k=c[b>>2]|0;e=c[g>>2]|0;c[g>>2]=e+1;e=LM(k,11,1114111,e)|0;if((f|0)!=0&(e|0)!=0)e=cN(c[b>>2]|0,f,e)|0;else e=0}else e=LM(e,0,1114111,f)|0;d=d+1|0;k=45;break}case 94:{if((g|0)==0?(c[b+16>>2]|0)!=(d|0):0){e=d;k=37;break a}d=d+1|0;e=LM(c[b>>2]|0,-2,1,-1)|0;k=45;break}case 36:{e=d+1|0;if((g|0)==0?a[e>>0]|0:0){e=d;k=37;break a}d=e;e=LM(c[b>>2]|0,-2,2,-1)|0;k=45;break}case 63:case 43:case 123:case 42:{if(!g){e=d;k=37}else e=13;break}case 124:{if(!g){e=d;k=37}else k=36;break}case 0:{k=36;break}default:{e=d;k=37}}while(0);if((k|0)==36){e=LM(c[b>>2]|0,-1,-1,-1)|0;k=45}else if((k|0)==37){h=VL(j,e,-1)|0;if((h|0)<0)e=2;else{do if(c[i>>2]&2){if((JK(c[j>>2]|0)|0)==0?(IK(c[j>>2]|0)|0)==0:0){k=43;break}i=c[b>>2]|0;n=mK(c[j>>2]|0)|0;g=mK(c[j>>2]|0)|0;f=b+24|0;g=LM(i,n,g,c[f>>2]|0)|0;n=c[b>>2]|0;i=LK(c[j>>2]|0)|0;d=LK(c[j>>2]|0)|0;d=LM(n,i,d,c[f>>2]|0)|0;if((g|0)!=0&(d|0)!=0)g=cN(c[b>>2]|0,g,d)|0;else g=0}else k=43;while(0);if((k|0)==43){g=c[j>>2]|0;f=b+24|0;g=LM(c[b>>2]|0,g,g,c[f>>2]|0)|0}c[f>>2]=(c[f>>2]|0)+1;d=e+h|0;e=g;k=45}}if((k|0)==45)if(!e)e=12;else{c[b+8>>2]=e;c[b+12>>2]=d;e=0}l=m;return e|0}function hN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+4|0;g=j;b=jN(b,i)|0;if((a[b>>0]|0)==44){b=jN(b+1|0,g)|0;h=c[g>>2]|0;g=c[i>>2]|0}else{i=c[i>>2]|0;c[g>>2]=i;h=i;g=i}do if(!(g>>>0>255|((h|0)>255|(h|0)>-1&(h|0)<(g|0)))){if(!d)if((a[b>>0]|0)==92)b=b+1|0;else{b=0;break}if((a[b>>0]|0)==125){c[e>>2]=g;c[f>>2]=h;b=b+1|0}else b=0}else b=0;while(0);l=j;return b|0}function iN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((c[b+12>>2]|0)>-1){e=LM(c[a>>2]|0,-1,-1,-1)|0;if((e|0)!=0?(f=MM(c[a>>2]|0,e,b)|0,(f|0)!=0):0){e=c[b+16>>2]|0;c[f+16>>2]=e;g=6}else e=12}else{f=b;e=c[b+16>>2]|0;g=6}if((g|0)==6){c[f+12>>2]=d;c[f+16>>2]=e+1;c[a+8>>2]=f;e=0}return e|0}function jN(b,d){b=b|0;d=d|0;var e=0;c[d>>2]=-1;a:do if($J(a[b>>0]|0)|0){c[d>>2]=0;e=0;do{c[d>>2]=(e*10|0)+-48+(a[b>>0]|0);b=b+1|0;if(!($J(a[b>>0]|0)|0))break a;e=c[d>>2]|0}while((e|0)<=255)}while(0);return b|0}function kN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+288|0;e=s+264|0;g=s;c[e>>2]=c[b>>2];h=e+8|0;c[h>>2]=0;c[e+12>>2]=32;p=_I(128)|0;r=e+4|0;c[r>>2]=p;if(!p)d=12;else{f=g+4|0;c[f>>2]=0;p=(a[d>>0]|0)==94;c[g>>2]=p&1;d=nN(b,p?d+1|0:d,e,g)|0;a:do if(!d){p=(c[g>>2]|0)==0;if(!p){sL(c[r>>2]|0,c[h>>2]|0,4,41);d=pN(e)|0;if(!d){d=12;e=0;break}c[d>>2]=1114112;c[d+4>>2]=1114112;c[d+8>>2]=-1;d=c[f>>2]|0;if(d){e=d<<2;f=EM(c[b>>2]|0,0,0,0,e+4|0)|0;if(!f){d=12;e=0;break}UN(f|0,g+8|0,e|0)|0;c[f+(d<<2)>>2]=0}else f=0}else f=0;m=c[h>>2]|0;if((m|0)>0){n=c[r>>2]|0;o=b+24|0;e=0;d=0;k=0;while(1){j=c[n+(k<<2)>>2]|0;g=c[j>>2]|0;h=j+4|0;i=c[h>>2]|0;do if(!p)if((g|0)>(d|0)){c[j>>2]=d;c[h>>2]=g+-1;d=i+1|0;q=14;break}else{j=i+1|0;d=(j|0)>=(d|0)?j:d;break}else q=14;while(0);if((q|0)==14){q=0;c[j+8>>2]=c[o>>2];c[j+16>>2]=f;j=$M(c[b>>2]|0,0,j)|0;e=cN(c[b>>2]|0,e,j)|0;if(!e){d=12;e=0;break a}}k=k+1|0;if((k|0)>=(m|0)){d=0;break}}}else{d=0;e=0}}else e=0;while(0);$I(c[r>>2]|0);r=b+24|0;c[r>>2]=(c[r>>2]|0)+1;c[b+8>>2]=e}l=s;return d|0}function lN(b){b=b|0;var d=0;d=a[b>>0]|0;b=0;while(1){if((a[56576+(b<<3)>>0]|0)==d<<24>>24)break;b=b+1|0;if((b|0)==12){b=12;break}}return c[56576+(b<<3)+4>>2]|0}function mN(a){a=a|0;var b=0;b=a+-48|0;if(b>>>0<10)return b|0;else{b=a|32;return ((b+-97|0)>>>0<6?b+-87|0:-1)|0}return 0}function nN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+32|0;o=t;q=t+4|0;i=VL(o,d,-1)|0;g=a[d>>0]|0;a:do if((i|0)>=1){r=f+4|0;n=b+32|0;h=d;j=i;b:while(1){i=(h|0)==(d|0);if(!(i|g<<24>>24!=93)){s=5;break}c:do if(!(i|g<<24>>24!=45)){switch(a[h+1>>0]|0){case 93:break c;case 45:break;default:{g=11;break a}}if((a[h+2>>0]|0)==93){g=11;break a}}while(0);d:do if(g<<24>>24==91){switch(a[h+1>>0]|0){case 61:case 46:{g=3;break a}case 58:break;default:{s=17;break d}}i=h+2|0;g=0;e:while(1){switch(a[i+g>>0]|0){case 0:{s=16;break b}case 58:break e;default:{}}if((g|0)<13)g=g+1|0;else{s=16;break b}}UN(q|0,i|0,g|0)|0;a[q+g>>0]=0;j=bL(q)|0;if(!j){s=16;break b}h=i+(g+2)|0;if((a[i+(g+1)>>0]|0)!=93){s=16;break b}if(!(c[f>>2]|0)){g=1114111;m=0;k=1;s=25}else{g=c[r>>2]|0;if((g|0)>63){g=12;break a}c[r>>2]=g+1;c[f+8+(g<<2)>>2]=j}}else s=17;while(0);if((s|0)==17){s=0;i=c[o>>2]|0;h=h+j|0;if((a[h>>0]|0)==45?(p=h+1|0,(a[p>>0]|0)!=93):0){h=VL(o,p,-1)|0;g=c[o>>2]|0;if((h|0)<1|(i|0)>(g|0)){g=11;break a}j=0;m=i;h=p+h|0;k=0;s=25}else{j=0;g=i;m=i;k=0;s=25}}if((s|0)==25){s=0;i=pN(e)|0;if(!i){g=12;break a}c[i>>2]=m;c[i+4>>2]=g;c[i+12>>2]=j;c[i+8>>2]=-1;if(!(k|(c[n>>2]&2|0)==0)?(qN(e,m,g)|0)!=0:0){g=12;break a}}j=VL(o,h,-1)|0;g=a[h>>0]|0;if((j|0)<1){s=3;break a}}if((s|0)==5){c[b+12>>2]=h+1;g=0;break}else if((s|0)==16){g=4;break}}else s=3;while(0);if((s|0)==3)g=g<<24>>24?2:7;l=t;return g|0}function oN(a,b){a=a|0;b=b|0;return (c[c[a>>2]>>2]|0)-(c[c[b>>2]>>2]|0)|0}function pN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=c[h>>2]|0;e=a+12|0;f=c[e>>2]|0;if((d|0)>=(f|0))if((f|0)<=32767?(c[e>>2]=f<<1,g=a+4|0,b=bJ(c[g>>2]|0,f<<3)|0,(b|0)!=0):0){c[g>>2]=b;d=c[h>>2]|0;i=6}else b=0;else{b=c[a+4>>2]|0;i=6}if((i|0)==6){c[h>>2]=d+1;i=EM(c[a>>2]|0,0,0,1,20)|0;c[b+(d<<2)>>2]=i;b=i}return b|0}function qN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a:do if((b|0)>(d|0))b=0;else while(1){b:do if(!(IK(b)|0)){if(!(JK(b)|0)){b=b+1|0;break}f=LK(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((LK(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}else{f=mK(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((mK(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}while(0);if((g|0)==12){g=0;f=pN(a)|0;if(!f){b=-1;break a}c[f>>2]=h;c[f+4>>2]=e+-1;c[f+8>>2]=-1}if((b|0)>(d|0)){b=0;break}}while(0);return b|0}function rN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;i=c[a+4>>2]|0;j=i+56|0;h=(c[j>>2]&8|0)==0?d:0;a=c[i+40>>2]|0;if((a|0)>0&(h|0)!=0){a=_I(a<<2)|0;if(!a)a=12;else{g=a;d=a;m=3}}else{g=0;d=0;m=3}if((m|0)==3){if(!(c[i+60>>2]|0))a=tN(i,b,g,f,k)|0;else a=sN(i,b,g,f,k)|0;if(!a)uN(h,e,c[j>>2]|0,i,g,c[k>>2]|0);if(g)$I(d)}l=n;return a|0}function sN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=l;l=l+16|0;T=V;c[T>>2]=0;o=e&1;R=e&2;S=a+56|0;n=c[S>>2]&4;U=CM(0,0)|0;a:do if(U){p=EM(U,0,0,0,32)|0;if(!p){DM(U);e=12;break}c[p+24>>2]=0;c[p+28>>2]=0;Q=a+40|0;e=c[Q>>2]|0;if(e){e=_I(e<<2)|0;if(!e){m=0;k=0;j=e;e=12;i=0;h=0;g=0}else{j=e;i=e;C=6}}else{j=0;i=0;C=6}b:do if((C|0)==6){e=c[a+28>>2]|0;if(e){e=_I(e<<3)|0;if(!e){m=e;k=0;e=12;h=0;g=0;break}else{m=e;h=e}}else{m=0;h=0}P=a+52|0;e=c[P>>2]|0;if(e){e=_I(e<<2)|0;if(!e){k=e;e=12;g=0;break}else{k=e;g=e}}else{k=0;g=0}K=a+8|0;L=a+12|0;M=(d|0)==0;N=(d|0)!=0;O=a+32|0;J=(n|0)!=0;I=(o|0)==0;r=b;e=1;q=-1;v=-1;B=0;c:while(1){n=c[Q>>2]|0;if((n|0)>0){o=0;do{c[j+(o<<2)>>2]=-1;if(!M){c[d+(o<<2)>>2]=-1;n=c[Q>>2]|0}o=o+1|0}while((o|0)<(n|0))}n=c[P>>2]|0;if((n|0)>0)WN(g|0,0,n<<2|0)|0;G=e+q|0;e=VL(T,r,4)|0;if((e|0)<1)if((e|0)<0){e=1;break b}else e=1;F=r+e|0;H=c[T>>2]|0;n=c[K>>2]|0;o=n+8|0;if(c[o>>2]|0){w=(G|0)!=0;x=(B|0)==95;y=(G|0)==0;A=J&(B|0)==10;z=(G|0)<1&I;u=n;n=0;t=0;s=o;while(1){r=u+20|0;o=c[r>>2]|0;d:do if(o)if((o&1|0)==0|z|A){if(o&2|0?(E=c[T>>2]|0,!((E|R|0)==0|J&(E|0)==10)):0){q=t;break}do if(o&16|0){if(x){q=t;break d}if(EK(B)|0){q=t;break d}o=c[T>>2]|0;if((o|0)==95)break;if(!(EK(o)|0)){q=t;break d}}while(0);o=c[r>>2]|0;if(o&32){if(x){o=c[T>>2]|0;if((o|0)==95){q=t;break}}else{E=(EK(B)|0)==0;o=c[T>>2]|0;if(E|(o|0)==95){q=t;break}}if(EK(o)|0){q=t;break}o=c[r>>2]|0}q=c[T>>2]|0;do if((q|0)!=0&(w&(o&64|0)!=0)){if(x)o=1;else{o=(EK(B)|0)!=0;q=c[T>>2]|0}if((q|0)==95)if(o){q=t;break d}else break;else if(o^(EK(q)|0)!=0)break;else{q=t;break d}}while(0);if(!(c[r>>2]&128)){C=49;break}o=c[T>>2]|0;if(y|(o|0)==0){q=t;break}if(x)q=1;else{q=(EK(B)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(q){C=49;break}else{q=t;break}else if(q^(EK(o)|0)!=0){q=t;break}else{C=49;break}}else q=t;else C=49;while(0);do if((C|0)==49){C=0;if(!t){n=c[u+16>>2]|0;q=c[s>>2]|0;break}q=p+28|0;o=c[q>>2]|0;if(!o){o=EM(U,0,0,0,32)|0;if(!o){C=53;break c}c[o+24>>2]=p;c[o+28>>2]=0;E=EM(U,0,0,0,c[Q>>2]<<2)|0;c[o+20>>2]=E;if(!E){C=60;break c}c[q>>2]=o;p=o}else p=o;c[p>>2]=G;c[p+4>>2]=F;c[p+8>>2]=c[s>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){q=c[p+20>>2]|0;o=0;do{c[q+(o<<2)>>2]=c[j+(o<<2)>>2];o=o+1|0}while((o|0)<(c[Q>>2]|0))}o=c[u+16>>2]|0;if(!o)q=t;else{q=c[o>>2]|0;if((q|0)<=-1){q=t;break}r=c[p+20>>2]|0;do{o=o+4|0;c[r+(q<<2)>>2]=G;q=c[o>>2]|0}while((q|0)>-1);q=t}}while(0);s=u+40|0;if(!(c[s>>2]|0))break;else{u=u+32|0;t=q}}if(n){o=c[n>>2]|0;if((o|0)>-1)do{c[j+(o<<2)>>2]=G;n=n+4|0;o=c[n>>2]|0}while((o|0)>-1)}else n=0;if(!q)C=171;else{s=G;r=F;w=q;x=n;C=79}}else{n=0;C=171}e:while(1){if((C|0)==79){if((w|0)==(c[L>>2]|0)){if((v|0)>=(s|0)){if(!(N&(v|0)==(s|0))){n=x;C=171;continue}n=c[Q>>2]|0;if(!(wN(n,c[O>>2]|0,j,d)|0)){n=x;C=171;continue}}else{if(M){v=s;n=x;C=171;continue}n=c[Q>>2]|0}if((n|0)>0)n=0;else{v=s;n=x;C=171;continue}while(1){c[d+(n<<2)>>2]=c[j+(n<<2)>>2];n=n+1|0;if((n|0)>=(c[Q>>2]|0)){v=s;n=x;C=171;continue e}}}u=w+8|0;if((c[u>>2]|0)!=0?(c[w+20>>2]&256|0)!=0:0){o=c[w+24>>2]|0;uN(o+1|0,m,c[S>>2]&-9,a,j,s);E=c[m+(o<<3)>>2]|0;o=(c[m+(o<<3)+4>>2]|0)-E|0;if(WJ(b+E|0,r+-1|0,o)|0){n=x;C=171;continue}E=(o|0)==0;n=E&1;q=c[w+12>>2]|0;if(E?c[k+(q<<2)>>2]|0:0){n=x;C=171;continue}c[k+(q<<2)>>2]=n;o=o+-1|0;r=r+o|0;o=o+s|0;q=c[T>>2]|0;n=VL(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;D=r+n|0;E=n}else{q=c[T>>2]|0;if(!q){n=x;C=171;continue}n=VL(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;o=s;D=r+n|0;E=n}s=o+e|0;if(!(c[u>>2]|0)){e=E;n=x;C=171;continue}y=(s|0)!=0;z=(q|0)==95;A=(s|0)==0;C=J&(q|0)==10;B=(s|0)<1&I;t=0;n=x;while(1){f:do if((c[w>>2]|0)>>>0<=q>>>0){if((c[w+4>>2]|0)>>>0<q>>>0)break;r=w+20|0;e=c[r>>2]|0;do if(e|0){if(!((e&1|0)==0|B|C))break f;if(e&2|0?(x=c[T>>2]|0,!((x|R|0)==0|J&(x|0)==10)):0)break f;do if(e&16|0){if(z)break f;if(EK(q)|0)break f;e=c[T>>2]|0;if((e|0)==95)break;if(!(EK(e)|0))break f}while(0);e=c[r>>2]|0;if(e&32){if(z){e=c[T>>2]|0;if((e|0)==95)break f}else{x=(EK(q)|0)==0;e=c[T>>2]|0;if(x|(e|0)==95)break f}if(EK(e)|0)break f;e=c[r>>2]|0}o=c[T>>2]|0;do if((o|0)!=0&(y&(e&64|0)!=0)){if(z)e=1;else{e=(EK(q)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(e)break f;else break;else if(e^(EK(o)|0)!=0)break;else break f}while(0);do if(c[r>>2]&128|0){e=c[T>>2]|0;if(A|(e|0)==0)break f;if(z)o=1;else{o=(EK(q)|0)!=0;e=c[T>>2]|0}if((e|0)==95)if(o)break;else break f;else if(o^(EK(e)|0)!=0)break f;else break}while(0);e=c[r>>2]|0;do if(e&4){if(c[S>>2]&2|0)break;if(!(DK(q,c[w+24>>2]|0)|0))break f;e=c[r>>2]|0}while(0);do if(e&4|0){if(!(c[S>>2]&2))break;x=LK(q)|0;e=w+24|0;if(DK(x,c[e>>2]|0)|0)break;x=mK(q)|0;if(!(DK(x,c[e>>2]|0)|0))break f}while(0);if(!(c[r>>2]&8))break;if(vN(c[w+28>>2]|0,q,c[S>>2]&2)|0)break f}while(0);if(!t){t=c[u>>2]|0;n=c[w+16>>2]|0;break}o=p+28|0;e=c[o>>2]|0;if(!e){e=EM(U,0,0,0,32)|0;if(!e){C=145;break c}c[e+24>>2]=p;c[e+28>>2]=0;x=EM(U,0,0,0,c[Q>>2]<<2)|0;c[e+20>>2]=x;if(!x){C=152;break c}c[o>>2]=e;p=e}else p=e;c[p>>2]=s;c[p+4>>2]=D;c[p+8>>2]=c[u>>2];c[p+12>>2]=c[w+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){o=c[p+20>>2]|0;e=0;do{c[o+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)<(c[Q>>2]|0))}e=c[w+16>>2]|0;if(!e)break;o=c[e>>2]|0;if((o|0)<=-1)break;r=c[p+20>>2]|0;do{c[r+(o<<2)>>2]=s;e=e+4|0;o=c[e>>2]|0}while((o|0)>-1)}while(0);u=w+40|0;if(!(c[u>>2]|0))break;else w=w+32|0}if(!t){e=E;C=171;continue}if(n){e=c[n>>2]|0;if((e|0)>-1){do{n=n+4|0;c[j+(e<<2)>>2]=s;e=c[n>>2]|0}while((e|0)>-1);q=v;o=D;e=E}else{q=v;o=D;e=E}}else{q=v;o=D;e=E;n=0}}else if((C|0)==171){C=0;r=c[p+24>>2]|0;if(!r)break;t=c[p+8>>2]|0;if(c[t+20>>2]&256|0)c[k+(c[p+12>>2]<<2)>>2]=0;s=c[p>>2]|0;u=c[p+4>>2]|0;c[T>>2]=c[p+16>>2];q=c[Q>>2]|0;if((q|0)>0){p=c[p+20>>2]|0;o=0;do{c[j+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)<(q|0));p=r;q=v;o=u}else{p=r;q=v;o=u}}r=o;v=q;w=t;x=n;C=79}n=(v|0)>-1;if(n|(c[T>>2]|0)==0){C=180;break}c[T>>2]=H;r=F;q=G;B=H}if((C|0)==53){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==60){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==145){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==152){DM(U);if(j|0)$I(i);if(m|0)$I(h);if(!k){e=12;break a}$I(g);e=12;break a}else if((C|0)==180){c[f>>2]=v;e=(n^1)&1;break}}while(0);DM(U);if(j|0)$I(i);if(m|0)$I(h);if(k)$I(g)}else e=12;while(0);l=V;return e|0}\nfunction tN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+16|0;T=W;c[T>>2]=0;k=e&1;Q=e&2;R=a+56|0;j=c[R>>2]&4;if(!d)N=0;else N=c[a+40>>2]|0;P=N<<2;i=a+52|0;e=c[i>>2]|0;h=e<<3;g=h+8|0;e=P+12+h+(g+(O(P,e)|0)<<1)|0;U=_I(e)|0;if(!U)e=12;else{WN(U|0,0,e|0)|0;e=U+P|0;m=e&3;m=e+((m|0)==0?0:4-m|0)|0;e=m+g|0;n=e&3;n=e+((n|0)==0?0:4-n|0)|0;e=n+g|0;M=e&3;M=e+((M|0)==0?0:4-M|0)|0;e=M+h|0;g=e&3;i=c[i>>2]|0;h=(i|0)>0;if(h){e=e+((g|0)==0?0:4-g|0)|0;g=0;while(1){c[n+(g<<3)+4>>2]=e;e=e+P|0;c[m+(g<<3)+4>>2]=e;g=g+1|0;if((g|0)>=(i|0))break;else e=e+P|0}if(h){e=0;do{c[M+(e<<3)>>2]=-1;e=e+1|0}while((e|0)<(i|0))}}e=VL(T,b,4)|0;if((e|0)<1)if((e|0)<0)e=1;else{i=1;V=11}else{i=e;V=11}a:do if((V|0)==11){L=a+8|0;K=(j|0)!=0;E=(k|0)==0;F=(N|0)>0;G=a+12|0;H=(N|0)<1;I=a+44|0;J=a+32|0;C=a+36|0;D=(N|0)==0;h=0;v=b+i|0;u=0;j=0;e=-1;g=m;A=U;x=m;w=n;while(1){if((e|0)<0){a=c[L>>2]|0;k=a+8|0;b:do if(c[k>>2]|0){p=(u|0)!=0;q=(h|0)==95;r=(u|0)==0;t=K&(h|0)==10;s=(u|0)<1&E;while(1){c:while(1){o=a+12|0;if((c[M+(c[o>>2]<<3)>>2]|0)>=(u|0))break;n=a+20|0;b=c[n>>2]|0;if(!b){V=46;break}d:do if((b&1|0)==0|s|t){if(b&2|0?(B=c[T>>2]|0,!((B|Q|0)==0|K&(B|0)==10)):0)break;do if(b&16|0){if(q)break d;if(EK(h)|0)break d;b=c[T>>2]|0;if((b|0)==95)break;if(!(EK(b)|0))break d}while(0);b=c[n>>2]|0;if(b&32){if(q){b=c[T>>2]|0;if((b|0)==95)break}else{B=(EK(h)|0)==0;b=c[T>>2]|0;if(B|(b|0)==95)break}if(EK(b)|0)break;b=c[n>>2]|0}m=c[T>>2]|0;do if((m|0)!=0&(p&(b&64|0)!=0)){if(q)b=1;else{b=(EK(h)|0)!=0;m=c[T>>2]|0}if((m|0)==95)if(b)break d;else break;else if(b^(EK(m)|0)!=0)break;else break d}while(0);if(!(c[n>>2]&128)){V=46;break c}b=c[T>>2]|0;if(r|(b|0)==0)break;if(q)m=1;else{m=(EK(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(m){V=46;break c}else break;else if(m^(EK(b)|0)!=0)break;else{V=46;break c}}while(0);k=a+40|0;if(!(c[k>>2]|0))break b;else a=a+32|0}if((V|0)==46){V=0;c[g>>2]=c[k>>2];if(F)WN(c[g+4>>2]|0,-1,P|0)|0;k=c[a+16>>2]|0;if(k|0?(S=c[k>>2]|0,(S|0)>-1):0){m=g+4|0;b=S;do{if((b|0)<(N|0))c[(c[m>>2]|0)+(b<<2)>>2]=u;k=k+4|0;b=c[k>>2]|0}while((b|0)>-1)}k=(c[g>>2]|0)!=(c[G>>2]|0);if(k|H){j=k?j:1;e=k?e:u;k=g+4|0}else{k=g+4|0;j=c[k>>2]|0;e=0;do{c[d+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)!=(N|0));j=1;e=u}B=c[o>>2]|0;c[M+(B<<3)>>2]=u;c[M+(B<<3)+4>>2]=k;g=g+8|0}k=a+40|0;if(!(c[k>>2]|0))break;else a=a+32|0}}while(0);c[g>>2]=0;g=c[T>>2]|0;if(!g)break;else h=g}else{if(D)break;h=c[T>>2]|0;if(!((g|0)!=(x|0)&(h|0)!=0))break}B=u+i|0;g=VL(T,v,4)|0;if((g|0)<1)if((g|0)<0){e=1;break a}else i=1;else i=g;z=v+i|0;if((j|0)!=0&(c[I>>2]|0)!=0){if(!(c[x>>2]|0))g=w;else{o=c[C>>2]|0;p=c[o>>2]|0;q=(p|0)>-1;n=x;g=w;do{m=n+4|0;e:do if(q){k=0;b=p;do{a=c[o+((k|1)<<2)>>2]|0;if((b|0)>=(N|0))break e;j=c[m>>2]|0;if((c[j+(a<<2)>>2]|0)==(c[d+(a<<2)>>2]|0)?(c[j+(b<<2)>>2]|0)<(c[d+(b<<2)>>2]|0):0)break e;k=k+2|0;b=c[o+(k<<2)>>2]|0}while((b|0)>-1);k=m;V=75}else{k=m;j=c[m>>2]|0;V=75}while(0);if((V|0)==75){V=0;c[g>>2]=c[n>>2];v=g+4|0;y=c[v>>2]|0;c[v>>2]=j;c[k>>2]=y;g=g+8|0}n=n+8|0}while((c[n>>2]|0)!=0)}c[g>>2]=0;y=x;j=0}else{y=w;w=x}k=c[w>>2]|0;if(!k){k=A;g=y}else{r=(B|0)!=0;s=(h|0)==95;t=(B|0)==0;v=K&(h|0)==10;u=(B|0)<1&E;q=w;a=A;g=y;while(1){b=k+8|0;if(c[b>>2]|0){p=q+4|0;o=a;n=b;while(1){f:do if((c[k>>2]|0)>>>0<=h>>>0?(c[k+4>>2]|0)>>>0>=h>>>0:0){m=k+20|0;a=c[m>>2]|0;do if(a|0){if(!((a&1|0)==0|u|v)){a=o;break f}if(a&2|0?(A=c[T>>2]|0,!((A|Q|0)==0|K&(A|0)==10)):0){a=o;break f}do if(a&16|0){if(s){a=o;break f}if(EK(h)|0){a=o;break f}a=c[T>>2]|0;if((a|0)==95)break;if(!(EK(a)|0)){a=o;break f}}while(0);a=c[m>>2]|0;if(a&32){if(s){a=c[T>>2]|0;if((a|0)==95){a=o;break f}}else{A=(EK(h)|0)==0;a=c[T>>2]|0;if(A|(a|0)==95){a=o;break f}}if(EK(a)|0){a=o;break f}a=c[m>>2]|0}b=c[T>>2]|0;do if((b|0)!=0&(r&(a&64|0)!=0)){if(s)a=1;else{a=(EK(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(a){a=o;break f}else break;else if(a^(EK(b)|0)!=0)break;else{a=o;break f}}while(0);do if(c[m>>2]&128|0){a=c[T>>2]|0;if(t|(a|0)==0){a=o;break f}if(s)b=1;else{b=(EK(h)|0)!=0;a=c[T>>2]|0}if((a|0)==95)if(b)break;else{a=o;break f}else if(b^(EK(a)|0)!=0){a=o;break f}else break}while(0);a=c[m>>2]|0;do if(a&4){if(c[R>>2]&2|0)break;if(!(DK(h,c[k+24>>2]|0)|0)){a=o;break f}a=c[m>>2]|0}while(0);do if(a&4|0){if(!(c[R>>2]&2))break;A=LK(h)|0;a=k+24|0;if(DK(A,c[a>>2]|0)|0)break;A=mK(h)|0;if(!(DK(A,c[a>>2]|0)|0)){a=o;break f}}while(0);if(!(c[m>>2]&8))break;if(vN(c[k+28>>2]|0,h,c[R>>2]&2)|0){a=o;break f}}while(0);if(F){b=c[p>>2]|0;a=0;do{c[o+(a<<2)>>2]=c[b+(a<<2)>>2];a=a+1|0}while((a|0)!=(N|0))}a=c[k+16>>2]|0;do if(a|0){b=c[a>>2]|0;if((b|0)<=-1)break;do{if((b|0)<(N|0))c[o+(b<<2)>>2]=B;a=a+4|0;b=c[a>>2]|0}while((b|0)>-1)}while(0);a=c[k+12>>2]|0;b=M+(a<<3)|0;if((c[b>>2]|0)>=(B|0)){a=c[M+(a<<3)+4>>2]|0;b=c[a>>2]|0;if(!(wN(N,c[J>>2]|0,o,b)|0)){a=o;break}c[a>>2]=o;if((c[n>>2]|0)!=(c[G>>2]|0)){a=b;break}if(F)e=0;else{j=1;a=b;e=B;break}while(1){c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0;if((e|0)==(N|0)){j=1;a=b;e=B;break f}}}A=c[n>>2]|0;c[g>>2]=A;x=g+4|0;m=c[x>>2]|0;c[x>>2]=o;c[b>>2]=B;c[M+(a<<3)+4>>2]=x;do if((c[G>>2]|0)==(A|0)){if((e|0)==-1)if(F)e=0;else{e=B;j=1;break}else{if(!F)break;if((c[o>>2]|0)>(c[d>>2]|0))break;else e=0}do{c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0}while((e|0)<(N|0));e=B;j=1}while(0);a=m;g=g+8|0}else a=o;while(0);n=k+40|0;if(!(c[n>>2]|0))break;else{k=k+32|0;o=a}}}q=q+8|0;k=c[q>>2]|0;if(!k){k=a;break}}}c[g>>2]=0;v=z;u=B;A=k;x=y}c[f>>2]=e;e=e>>>31}while(0);$I(U)}l=W;return e|0}function uN(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((d&8|0)==0&(g|0)>-1?(m=c[e+16>>2]|0,n=c[e+28>>2]|0,l=(a|0)!=0&(n|0)!=0,l):0){k=c[e+48>>2]|0;j=0;do{d=c[m+(j*12|0)>>2]|0;if((d|0)==(k|0))i=g;else i=c[f+(d<<2)>>2]|0;h=b+(j<<3)|0;c[h>>2]=i;d=c[m+(j*12|0)+4>>2]|0;if((d|0)==(k|0))d=g;else d=c[f+(d<<2)>>2]|0;e=b+(j<<3)+4|0;c[e>>2]=d;if((d|0)==-1|(i|0)==-1){c[e>>2]=-1;c[h>>2]=-1}j=j+1|0}while(j>>>0<a>>>0&j>>>0<n>>>0);if(l){d=0;do{i=b+(d<<3)+4|0;j=c[m+(d*12|0)+8>>2]|0;if(j|0?(o=c[j>>2]|0,(o|0)>-1):0){k=b+(d<<3)|0;h=0;f=o;e=c[k>>2]|0;do{if(!((e|0)>=(c[b+(f<<3)>>2]|0)?(c[i>>2]|0)<=(c[b+(f<<3)+4>>2]|0):0)){c[i>>2]=-1;c[k>>2]=-1;e=-1}h=h+1|0;f=c[j+(h<<2)>>2]|0}while((f|0)>-1)}d=d+1|0}while(d>>>0<a>>>0&d>>>0<n>>>0)}else d=0}else d=0;if(d>>>0<a>>>0)WN(b+(d<<3)|0,-1,a-d<<3|0)|0;return}function vN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;a:do if(!e)d=0;else{f=(d|0)==0;d=e;while(1){if(f){if(DK(b,d)|0){d=1;break a}}else{e=mK(b)|0;if(DK(e,c[a>>2]|0)|0){d=1;break a}e=LK(b)|0;if(DK(e,c[a>>2]|0)|0){d=1;break a}}a=a+4|0;d=c[a>>2]|0;if(!d){d=0;break}}}while(0);return d|0}function wN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if((a|0)>0){f=0;while(1){h=c[d+(f<<2)>>2]|0;g=c[e+(f<<2)>>2]|0;if(!(c[b+(f<<2)>>2]|0)){if((h|0)<(g|0)){f=1;break a}if((h|0)>(g|0)){f=0;break a}}else{if((h|0)>(g|0)){f=1;break a}if((h|0)<(g|0)){f=0;break a}}f=f+1|0;if((f|0)>=(a|0)){f=0;break}}}else f=0;while(0);return f|0}function xN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=PK(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;i=(c[f+8>>2]|0)-h|0;if((i|0)>0){i=i>>>0<k>>>0?i:k;UN(b|0,h|0,i|0)|0;c[g>>2]=(c[g>>2]|0)+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(fK(f)|0)break;h=bb[c[i>>2]&31](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)QK(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)QK(f);return e|0}function yN(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(PK(a)|0)==0;a=zN(a)|0}else a=zN(a)|0;return a|0}function zN(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=bb[c[a+40>>2]&31](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function AN(a){a=a|0;(c[a+76>>2]|0)>-1?PK(a)|0:0;return c[a+60>>2]|0}function BN(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+48|0;i=k+24|0;h=k+16|0;g=k;d=k+28|0;b=d;e=134988;f=b+20|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));e=d+13|0;b=0;while(1){BL(e)|0;c[g>>2]=d;c[g+4>>2]=32962;c[g+8>>2]=384;f=jJ(Ba(5,g|0)|0)|0;if((f|0)>-1){j=4;break}if((b|0)<99)b=b+1|0;else{b=0;break}}if((j|0)==4){c[h>>2]=d;sa(10,h|0)|0;b=TL(f,135008)|0;if(!b){c[i>>2]=f;Da(6,i|0)|0;b=0}}l=k;return b|0}function CN(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(PK(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=eK(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=eK(a)|0;break}}while(0);return b|0}function DN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(PK(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=ZL(d,b)|0;QK(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=ZL(d,b)|0}while(0);return e|0}function EN(a){a=a|0;return yN(a)|0}function FN(){}function GN(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function HN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=GN(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function IN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0<a>>>0|0)>>>0,c|0)|0}function JN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (z=d,a-c>>>0|0)|0}function KN(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function LN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (z=o,p)|0}else{p=KN(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (z=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (z=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((KN(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (z=o,p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=IN(m|0,l|0,-1,-1)|0;d=z;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;JN(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=JN(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (z=o,p)|0}function MN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return LN(a,b,c,d,0)|0}function NN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;LN(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function ON(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}z=0;return b>>>c-32|0}function PN(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}z=a<<c-32;return 0}function QN(a){a=a|0;return (a&255)<<8|a>>8&255|0}function RN(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function SN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;q=q+1|0;c[a>>2]=q;while((f|0)<(e|0)){if(!(c[d+(f<<3)>>2]|0)){c[d+(f<<3)>>2]=q;c[d+((f<<3)+4)>>2]=b;c[d+((f<<3)+8)>>2]=0;z=e;return d|0}f=f+1|0}e=e*2|0;d=bJ(d|0,8*(e+1|0)|0)|0;d=SN(a|0,b|0,d|0,e|0)|0;z=e;return d|0}function TN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;while((f|0)<(d|0)){e=c[b+(f<<3)>>2]|0;if(!e)break;if((e|0)==(a|0))return c[b+((f<<3)+4)>>2]|0;f=f+1|0}return 0}function UN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return La(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function VN(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else UN(b,c,d)|0;return b|0}function WN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function XN(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){W()|0;ra(12);return -1}c[i>>2]=b;if((b|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=d;ra(12);return -1}return d|0}function YN(a){a=a|0;return +Ya[a&1]()}function ZN(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;return +Za[a&7](+b,+c,+d)}function _N(a){a=a|0;return _a[a&3]()|0}function $N(a,b){a=a|0;b=b|0;return $a[a&31](b|0)|0}function aO(a,b,c){a=a|0;b=b|0;c=c|0;return ab[a&63](b|0,c|0)|0}function bO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return bb[a&31](b|0,c|0,d|0)|0}function cO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cb[a&31](b|0,c|0,d|0,e|0)|0}function dO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return db[a&3](b|0,c|0,d|0,e|0,f|0)|0}function eO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return eb[a&1](b|0,c|0,d|0,e|0,f|0,g|0)|0}function fO(a){a=a|0;fb[a&15]()}function gO(a,b){a=a|0;b=b|0;gb[a&127](b|0)}function hO(a,b,c){a=a|0;b=b|0;c=c|0;hb[a&31](b|0,c|0)}function iO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ib[a&127](b|0,c|0,d|0)}function jO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;jb[a&15](b|0,c|0,d|0,+e,+f,g|0)}function kO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;kb[a&31](b|0,c|0,d|0,e|0)}function lO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;lb[a&7](b|0,c|0,d|0,e|0,f|0)}function mO(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;mb[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function nO(){S(0);return 0.0}function oO(a,b,c){a=+a;b=+b;c=+c;S(1);return 0.0}function pO(){S(2);return 0}function qO(a){a=a|0;S(3);return 0}function rO(a,b){a=a|0;b=b|0;S(4);return 0}function sO(a,b,c){a=a|0;b=b|0;c=c|0;S(5);return 0}function tO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(6);return 0}function uO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(7);return 0}function vO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(8);return 0}function wO(){S(9)}function xO(a){a=a|0;S(10)}function yO(a,b){a=a|0;b=b|0;S(11)}function zO(a,b,c){a=a|0;b=b|0;c=c|0;S(12)}function AO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;S(13)}function BO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(14)}function CO(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(15)}function DO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(16)}\n\n// EMSCRIPTEN_END_FUNCS\nvar Ya=[nO,zA];var Za=[oO,Vu,Uu,Wu,Xu,oO,oO,oO];var _a=[pO,Gw,xx,pO];var $a=[qO,Sg,lg,Sn,Vn,aC,bC,SD,TD,UD,VD,WD,XD,YD,ZD,gJ,ub,pr,ml,pl,Cw,Hw,on,xw,eo,OB,ww,TB,UB,OI,qO,qO];var ab=[rO,un,Rn,Wn,zz,Az,rz,nz,Xy,nr,bg,Rg,sh,Wh,mi,xk,vk,nl,ql,Aq,zq,yq,Es,Us,Ps,Qs,Pt,XL,DN,tA,vB,Jm,xG,Qm,Sm,fo,PB,yJ,YE,KI,LI,oN,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO,rO];var bb=[sO,Ql,Wl,Qn,Un,hG,hJ,iJ,mJ,nJ,aL,$l,Yl,AL,vA,Fx,aD,HI,fM,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO,sO];var cb=[tO,Om,Op,Pm,gn,wn,yn,Jn,In,Xn,$n,bo,zx,DC,BC,xE,jG,FG,EG,Nl,xA,tO,tO,tO,tO,tO,tO,tO,tO,tO,tO,tO];var db=[uO,vn,Yy,sz];var eb=[vO,lI];var fb=[wO,yA,Dw,Ew,Fw,Jw,Kw,Lw,nG,wO,wO,wO,wO,wO,wO,wO];var gb=[xO,Ab,Bb,Fb,Gb,Hb,$b,ac,yc,zc,Ac,Bc,Cc,Dc,Ec,Qc,Rc,Uc,Vc,Wc,Xc,Yc,Zc,_c,kd,ld,md,od,pd,qd,rd,sd,td,ud,vd,Gd,Hd,Id,Kd,Ld,Md,Nd,Od,Pd,Qd,Rd,Sd,Ud,fe,ge,he,ie,te,ue,ve,xe,Ke,Le,Me,Oe,Pe,Qe,Re,Se,Te,Ue,Ve,We,df,ef,ff,gf,Kf,Ff,zn,Dy,Vy,Fy,Ey,pz,by,ey,_D,dE,yf,rl,mm,mG,VC,WB,Ax,$I,GG,kI,FI,GI,MI,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO,xO];var hb=[yO,Gc,Lc,ad,fd,Cd,_d,oe,De,af,nf,Yn,Zy,Bz,tz,oz,Ty,Uy,xz,yz,bE,fE,cm,ss,Iw,NB,jI,II,JI,NI,PI,yO];var ib=[zO,Ib,Jb,Mb,xc,Fc,Hc,Kc,$c,bd,ed,xd,yd,Bd,Vd,Wd,Zd,je,ke,ne,ye,ze,Ce,Xe,Ye,$e,hf,jf,mf,ck,dk,ek,jm,An,ao,Ko,Pp,ks,Fv,yx,dy,nB,CC,AC,$D,aE,cE,eE,gE,iG,XH,WH,Cm,cn,po,So,Vo,Bw,wA,Dx,RB,VB,YH,_H,$H,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO,zO];var jb=[AO,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,AO,AO,AO,AO,AO,AO,AO];var kb=[BO,Kb,Ic,cd,nd,zd,Jd,Xd,le,Ae,Ne,Ze,kf,Bf,Af,zf,xf,wf,vf,_b,uf,tf,xn,Wy,qz,sL,QB,SB,BO,BO,BO,BO];var lb=[CO,Sc,wd,Dd,Td,we,ol,XB];var mb=[DO,Lb,Jc,dd,Ad,Yd,me,Be,_e,lf,YB,DO,DO,DO,DO,DO];return{___errno_location:kJ,___muldi3:HN,___udivdi3:MN,___uremdi3:NN,_bitshift64Lshr:ON,_bitshift64Shl:PN,_dtdisc:Ml,_dtextract:Ol,_dtopen:Rl,_free:$I,_htons:fL,_i64Add:IN,_i64Subtract:JN,_llvm_bswap_i16:QN,_llvm_bswap_i32:RN,_malloc:_I,_memalign:eJ,_memcpy:UN,_memmove:VN,_memset:WN,_realloc:bJ,_saveSetjmp:SN,_sbrk:XN,_testSetjmp:TN,_vizCreateFile:wb,_vizLastErrorMessage:vb,_vizRenderFromString:zb,_vizSetNop:yb,_vizSetY_invert:xb,dynCall_d:YN,dynCall_dddd:ZN,dynCall_i:_N,dynCall_ii:$N,dynCall_iii:aO,dynCall_iiii:bO,dynCall_iiiii:cO,dynCall_iiiiii:dO,dynCall_iiiiiii:eO,dynCall_v:fO,dynCall_vi:gO,dynCall_vii:hO,dynCall_viii:iO,dynCall_viiiddi:jO,dynCall_viiii:kO,dynCall_viiiii:lO,dynCall_viiiiii:mO,establishStackSpace:qb,getTempRet0:tb,runPostSets:FN,setTempRet0:sb,setThrew:rb,stackAlloc:nb,stackRestore:pb,stackSave:ob}})\n\n\n// EMSCRIPTEN_END_ASM\n(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___errno_location=Module[\"___errno_location\"]=asm[\"___errno_location\"];var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___udivdi3=Module[\"___udivdi3\"]=asm[\"___udivdi3\"];var ___uremdi3=Module[\"___uremdi3\"]=asm[\"___uremdi3\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _dtdisc=Module[\"_dtdisc\"]=asm[\"_dtdisc\"];var _dtextract=Module[\"_dtextract\"]=asm[\"_dtextract\"];var _dtopen=Module[\"_dtopen\"]=asm[\"_dtopen\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _htons=Module[\"_htons\"]=asm[\"_htons\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _llvm_bswap_i16=Module[\"_llvm_bswap_i16\"]=asm[\"_llvm_bswap_i16\"];var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=asm[\"_llvm_bswap_i32\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memalign=Module[\"_memalign\"]=asm[\"_memalign\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memmove=Module[\"_memmove\"]=asm[\"_memmove\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _realloc=Module[\"_realloc\"]=asm[\"_realloc\"];var _saveSetjmp=Module[\"_saveSetjmp\"]=asm[\"_saveSetjmp\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var _testSetjmp=Module[\"_testSetjmp\"]=asm[\"_testSetjmp\"];var _vizCreateFile=Module[\"_vizCreateFile\"]=asm[\"_vizCreateFile\"];var _vizLastErrorMessage=Module[\"_vizLastErrorMessage\"]=asm[\"_vizLastErrorMessage\"];var _vizRenderFromString=Module[\"_vizRenderFromString\"]=asm[\"_vizRenderFromString\"];var _vizSetNop=Module[\"_vizSetNop\"]=asm[\"_vizSetNop\"];var _vizSetY_invert=Module[\"_vizSetY_invert\"]=asm[\"_vizSetY_invert\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var getTempRet0=Module[\"getTempRet0\"]=asm[\"getTempRet0\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var setTempRet0=Module[\"setTempRet0\"]=asm[\"setTempRet0\"];var setThrew=Module[\"setThrew\"]=asm[\"setThrew\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];var dynCall_d=Module[\"dynCall_d\"]=asm[\"dynCall_d\"];var dynCall_dddd=Module[\"dynCall_dddd\"]=asm[\"dynCall_dddd\"];var dynCall_i=Module[\"dynCall_i\"]=asm[\"dynCall_i\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_v=Module[\"dynCall_v\"]=asm[\"dynCall_v\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_viiiddi=Module[\"dynCall_viiiddi\"]=asm[\"dynCall_viiiddi\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];var dynCall_viiiii=Module[\"dynCall_viiiii\"]=asm[\"dynCall_viiiii\"];var dynCall_viiiiii=Module[\"dynCall_viiiiii\"]=asm[\"dynCall_viiiiii\"];Module[\"asm\"]=asm;Module[\"ccall\"]=ccall;Module[\"Pointer_stringify\"]=Pointer_stringify;Module[\"UTF8ToString\"]=UTF8ToString;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module[\"locateFile\"]===\"function\"){memoryInitializer=Module[\"locateFile\"](memoryInitializer)}else if(Module[\"memoryInitializerPrefixURL\"]){memoryInitializer=Module[\"memoryInitializerPrefixURL\"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module[\"readBinary\"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency(\"memory initializer\");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\")});function doBrowserLoad(){Module[\"readAsync\"](memoryInitializer,applyMemoryInitializer,(function(){throw\"could not load memory initializer \"+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module[\"memoryInitializerRequest\"]){function useRequest(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0)}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout((function(){setTimeout((function(){Module[\"setStatus\"](\"\")}),1);doRun()}),1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&Module[\"noExitRuntime\"]&&status===0){return}if(Module[\"noExitRuntime\"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}if(ENVIRONMENT_IS_NODE){process[\"exit\"](status)}Module[\"quit\"](status,new ExitStatus(status))}Module[\"exit\"]=exit;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=\"\"}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\"}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}Module[\"noExitRuntime\"]=true;run()\n\n\n\n\n  return Module;\n};\n\nfunction render(instance, src, options) {\n  var i;\n  for (i = 0; i < options.files.length; i++) {\n    instance['ccall']('vizCreateFile', 'number', ['string', 'string'], [options.files[i].path, options.files[i].data]);\n  }\n\n  instance['ccall']('vizSetY_invert', 'number', ['number'], [options.yInvert ? 1 : 0]);\n  instance['ccall']('vizSetNop', 'number', ['number'], [options.nop ? options.nop : 0]);\n  \n  var resultPointer = instance['ccall']('vizRenderFromString', 'number', ['string', 'string', 'string'], [src, options.format, options.engine]);\n  var resultString = instance['Pointer_stringify'](resultPointer);\n  instance['ccall']('free', 'number', ['number'], [resultPointer]);\n\n  var errorMessagePointer = instance['ccall']('vizLastErrorMessage', 'number', [], []);\n  var errorMessageString = instance['Pointer_stringify'](errorMessagePointer);\n  instance['ccall']('free', 'number', ['number'], [errorMessagePointer]);\n\n  if (errorMessageString != '') {\n    throw new Error(errorMessageString);\n  }\n  \n  return resultString;\n}\n\nif (typeof importScripts === \"function\") {\n  var instance = Module();\n  \n  onmessage = function(event) {\n    var id = event.data.id;\n    var src = event.data.src;\n    var options = event.data.options;\n  \n    try {\n      var result = render(instance, src, options);\n      postMessage({ id: id, result: result });\n    } catch (e) {\n      var error;\n      if (e instanceof Error) {\n        error = { message: e.message, fileName: e.fileName, lineNumber: e.lineNumber };\n      } else {\n        error = { message: e.toString() };\n      }\n      postMessage({ id: id, error: error });\n    }\n  }\n}\n\nif (typeof exports === 'object' && typeof module !== 'undefined') {\n  module.exports = { render: render, Module: Module };\n} else if (typeof define === 'function' && define.amd) {\n  define(function() { return { render: render, Module: Module }; });\n}\n\nif (typeof global.Viz !== 'undefined') {\n  global.Viz.render = render;\n  global.Viz.Module = Module;\n}\n\n})(typeof self !== 'undefined' ? self : this);\n"
  },
  {
    "path": "src/data/extra/web/js/viz.js/viz.js",
    "content": "/*\nViz.js 2.1.2 (Graphviz 2.40.1, Expat 2.2.5, Emscripten 1.37.36)\nCopyright (c) 2014-2018 Michael Daines\nLicensed under MIT license\n\nThis distribution contains other software in object code form:\n\nGraphviz\nLicensed under Eclipse Public License - v 1.0\nhttp://www.graphviz.org\n\nExpat\nCopyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper\nCopyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.\nLicensed under MIT license\nhttp://www.libexpat.org\n\nzlib\nCopyright (C) 1995-2013 Jean-loup Gailly and Mark Adler\nhttp://www.zlib.net/zlib_license.html\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Viz = factory());\n}(this, (function () { 'use strict';\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  var WorkerWrapper = function () {\n    function WorkerWrapper(worker) {\n      var _this = this;\n\n      classCallCheck(this, WorkerWrapper);\n\n      this.worker = worker;\n      this.listeners = [];\n      this.nextId = 0;\n\n      this.worker.addEventListener('message', function (event) {\n        var id = event.data.id;\n        var error = event.data.error;\n        var result = event.data.result;\n\n        _this.listeners[id](error, result);\n        delete _this.listeners[id];\n      });\n    }\n\n    createClass(WorkerWrapper, [{\n      key: 'render',\n      value: function render(src, options) {\n        var _this2 = this;\n\n        return new Promise(function (resolve, reject) {\n          var id = _this2.nextId++;\n\n          _this2.listeners[id] = function (error, result) {\n            if (error) {\n              reject(new Error(error.message, error.fileName, error.lineNumber));\n              return;\n            }\n            resolve(result);\n          };\n\n          _this2.worker.postMessage({ id: id, src: src, options: options });\n        });\n      }\n    }]);\n    return WorkerWrapper;\n  }();\n\n  var ModuleWrapper = function ModuleWrapper(module, render) {\n    classCallCheck(this, ModuleWrapper);\n\n    var instance = module();\n    this.render = function (src, options) {\n      return new Promise(function (resolve, reject) {\n        try {\n          resolve(render(instance, src, options));\n        } catch (error) {\n          reject(error);\n        }\n      });\n    };\n  };\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding\n\n\n  function b64EncodeUnicode(str) {\n    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {\n      return String.fromCharCode('0x' + p1);\n    }));\n  }\n\n  function defaultScale() {\n    if ('devicePixelRatio' in window && window.devicePixelRatio > 1) {\n      return window.devicePixelRatio;\n    } else {\n      return 1;\n    }\n  }\n\n  function svgXmlToImageElement(svgXml) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        _ref$scale = _ref.scale,\n        scale = _ref$scale === undefined ? defaultScale() : _ref$scale,\n        _ref$mimeType = _ref.mimeType,\n        mimeType = _ref$mimeType === undefined ? \"image/png\" : _ref$mimeType,\n        _ref$quality = _ref.quality,\n        quality = _ref$quality === undefined ? 1 : _ref$quality;\n\n    return new Promise(function (resolve, reject) {\n      var svgImage = new Image();\n\n      svgImage.onload = function () {\n        var canvas = document.createElement('canvas');\n        canvas.width = svgImage.width * scale;\n        canvas.height = svgImage.height * scale;\n\n        var context = canvas.getContext(\"2d\");\n        context.drawImage(svgImage, 0, 0, canvas.width, canvas.height);\n\n        canvas.toBlob(function (blob) {\n          var image = new Image();\n          image.src = URL.createObjectURL(blob);\n          image.width = svgImage.width;\n          image.height = svgImage.height;\n\n          resolve(image);\n        }, mimeType, quality);\n      };\n\n      svgImage.onerror = function (e) {\n        var error;\n\n        if ('error' in e) {\n          error = e.error;\n        } else {\n          error = new Error('Error loading SVG');\n        }\n\n        reject(error);\n      };\n\n      svgImage.src = 'data:image/svg+xml;base64,' + b64EncodeUnicode(svgXml);\n    });\n  }\n\n  function svgXmlToImageElementFabric(svgXml) {\n    var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        _ref2$scale = _ref2.scale,\n        scale = _ref2$scale === undefined ? defaultScale() : _ref2$scale,\n        _ref2$mimeType = _ref2.mimeType,\n        mimeType = _ref2$mimeType === undefined ? 'image/png' : _ref2$mimeType,\n        _ref2$quality = _ref2.quality,\n        quality = _ref2$quality === undefined ? 1 : _ref2$quality;\n\n    var multiplier = scale;\n\n    var format = void 0;\n    if (mimeType == 'image/jpeg') {\n      format = 'jpeg';\n    } else if (mimeType == 'image/png') {\n      format = 'png';\n    }\n\n    return new Promise(function (resolve, reject) {\n      fabric.loadSVGFromString(svgXml, function (objects, options) {\n        // If there's something wrong with the SVG, Fabric may return an empty array of objects. Graphviz appears to give us at least one <g> element back even given an empty graph, so we will assume an error in this case.\n        if (objects.length == 0) {\n          reject(new Error('Error loading SVG with Fabric'));\n        }\n\n        var element = document.createElement(\"canvas\");\n        element.width = options.width;\n        element.height = options.height;\n\n        var canvas = new fabric.Canvas(element, { enableRetinaScaling: false });\n        var obj = fabric.util.groupSVGElements(objects, options);\n        canvas.add(obj).renderAll();\n\n        var image = new Image();\n        image.src = canvas.toDataURL({ format: format, multiplier: multiplier, quality: quality });\n        image.width = options.width;\n        image.height = options.height;\n\n        resolve(image);\n      });\n    });\n  }\n\n  var Viz = function () {\n    function Viz() {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          workerURL = _ref3.workerURL,\n          worker = _ref3.worker,\n          Module = _ref3.Module,\n          render = _ref3.render;\n\n      classCallCheck(this, Viz);\n\n      if (typeof workerURL !== 'undefined') {\n        this.wrapper = new WorkerWrapper(new Worker(workerURL));\n      } else if (typeof worker !== 'undefined') {\n        this.wrapper = new WorkerWrapper(worker);\n      } else if (typeof Module !== 'undefined' && typeof render !== 'undefined') {\n        this.wrapper = new ModuleWrapper(Module, render);\n      } else if (typeof Viz.Module !== 'undefined' && typeof Viz.render !== 'undefined') {\n        this.wrapper = new ModuleWrapper(Viz.Module, Viz.render);\n      } else {\n        throw new Error('Must specify workerURL or worker option, Module and render options, or include one of full.render.js or lite.render.js after viz.js.');\n      }\n    }\n\n    createClass(Viz, [{\n      key: 'renderString',\n      value: function renderString(src) {\n        var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n            _ref4$format = _ref4.format,\n            format = _ref4$format === undefined ? 'svg' : _ref4$format,\n            _ref4$engine = _ref4.engine,\n            engine = _ref4$engine === undefined ? 'dot' : _ref4$engine,\n            _ref4$files = _ref4.files,\n            files = _ref4$files === undefined ? [] : _ref4$files,\n            _ref4$images = _ref4.images,\n            images = _ref4$images === undefined ? [] : _ref4$images,\n            _ref4$yInvert = _ref4.yInvert,\n            yInvert = _ref4$yInvert === undefined ? false : _ref4$yInvert,\n            _ref4$nop = _ref4.nop,\n            nop = _ref4$nop === undefined ? 0 : _ref4$nop;\n\n        for (var i = 0; i < images.length; i++) {\n          files.push({\n            path: images[i].path,\n            data: '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\n<svg width=\"' + images[i].width + '\" height=\"' + images[i].height + '\"></svg>'\n          });\n        }\n\n        return this.wrapper.render(src, { format: format, engine: engine, files: files, images: images, yInvert: yInvert, nop: nop });\n      }\n    }, {\n      key: 'renderSVGElement',\n      value: function renderSVGElement(src) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        return this.renderString(src, _extends({}, options, { format: 'svg' })).then(function (str) {\n          var parser = new DOMParser();\n          return parser.parseFromString(str, 'image/svg+xml').documentElement;\n        });\n      }\n    }, {\n      key: 'renderImageElement',\n      value: function renderImageElement(src) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var scale = options.scale,\n            mimeType = options.mimeType,\n            quality = options.quality;\n\n\n        return this.renderString(src, _extends({}, options, { format: 'svg' })).then(function (str) {\n          if ((typeof fabric === 'undefined' ? 'undefined' : _typeof(fabric)) === \"object\" && fabric.loadSVGFromString) {\n            return svgXmlToImageElementFabric(str, { scale: scale, mimeType: mimeType, quality: quality });\n          } else {\n            return svgXmlToImageElement(str, { scale: scale, mimeType: mimeType, quality: quality });\n          }\n        });\n      }\n    }, {\n      key: 'renderJSONObject',\n      value: function renderJSONObject(src) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var format = options.format;\n\n\n        if (format !== 'json' || format !== 'json0') {\n          format = 'json';\n        }\n\n        return this.renderString(src, _extends({}, options, { format: format })).then(function (str) {\n          return JSON.parse(str);\n        });\n      }\n    }]);\n    return Viz;\n  }();\n\n  return Viz;\n\n})));\n"
  },
  {
    "path": "src/data/extra/web/js/vxcore.js",
    "content": "/*\n    The main object that will be provided to all scripts in VNoteX.\n    TODO: Maintain a list of workers.\n\n    Events:\n        - initialized()\n        - ready()\n*/\n\nclass VXCore extends EventEmitter {\n    constructor() {\n        super();\n\n        this.kickedOff = false;\n\n        this.initialized = false;\n\n        this.os = VXCore.detectOS();\n\n        window.addEventListener('load', () => {\n            console.log('window load finished');\n\n            this.initOnLoad();\n\n            this.initialized = true;\n\n            // Signal out.\n            this.emit('initialized');\n            this.emit('ready');\n        });\n    }\n\n    // Base implementation of initOnLoad - can be overridden by subclasses\n    initOnLoad() {\n        // Base class does nothing - subclasses should override this method\n    }\n\n    static detectOS() {\n        let osName=\"Unknown OS\";\n        if (navigator.appVersion.indexOf(\"Win\")!=-1) {\n            osName=\"Windows\";\n        } else if (navigator.appVersion.indexOf(\"Mac\")!=-1) {\n            osName=\"MacOS\";\n        } else if (navigator.appVersion.indexOf(\"X11\")!=-1) {\n            osName=\"UNIX\";\n        } else if (navigator.appVersion.indexOf(\"Linux\")!=-1) {\n            osName=\"Linux\";\n        }\n        return osName\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/vxworker.js",
    "content": "// Worker base class.\nclass VxWorker {\n    constructor() {\n        this.name = '';\n        this.vxcore = null;\n\n        if (!window.vxWorkerId) {\n            window.vxWorkerId = 1;\n        }\n        this.id = window.vxWorkerId++;\n    }\n\n    // Called when registering this worker.\n    register(p_vxcore) {\n        this.vxcore = p_vxcore;\n\n        this.registerInternal();\n    }\n\n    registerInternal() {\n        console.warning('RegisterInternal of VxWorker subclass is not implemented', this.name);\n    }\n\n    finishWork() {\n        console.log('worker finished', this.name);\n        this.vxcore.finishWorker(this.name);\n    }\n}\n"
  },
  {
    "path": "src/data/extra/web/js/wavedrom/README.md",
    "content": "# [WaveDrom](https://github.com/wavedrom/wavedrom)\nv2.1.2\n"
  },
  {
    "path": "src/data/extra/web/js/wavedrom/theme-default.js",
    "content": "var WaveSkin=WaveSkin||{};WaveSkin.default=[\"svg\",{\"id\":\"svg\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"height\":\"0\"},[\"style\",{\"type\":\"text/css\"},\"text{font-size:11pt;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;fill-opacity:1;font-family:Helvetica}.muted{fill:#aaa}.warning{fill:#f6b900}.error{fill:#f60000}.info{fill:#0041c4}.success{fill:#00ab00}.h1{font-size:33pt;font-weight:bold}.h2{font-size:27pt;font-weight:bold}.h3{font-size:20pt;font-weight:bold}.h4{font-size:14pt;font-weight:bold}.h5{font-size:11pt;font-weight:bold}.h6{font-size:8pt;font-weight:bold}.s1{fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s2{fill:none;stroke:#000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}.s3{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s4{color:#000;fill:none;stroke:#000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible}.s5{fill:#fff;stroke:none}.s6{color:#000;fill:#ffffb4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s7{color:#000;fill:#ffe0b9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s8{color:#000;fill:#b9e0ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s9{fill:#000;fill-opacity:1;stroke:none}.s10{color:#000;fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate}.s11{fill:#0041c4;fill-opacity:1;stroke:none}.s12{fill:none;stroke:#0041c4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none}\"],[\"defs\",[\"g\",{\"id\":\"socket\"},[\"rect\",{\"y\":\"15\",\"x\":\"6\",\"height\":\"20\",\"width\":\"20\"}]],[\"g\",{\"id\":\"pclk\"},[\"path\",{\"d\":\"M0,20 0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"nclk\"},[\"path\",{\"d\":\"m0,0 0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"000\"},[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0m0\"},[\"path\",{\"d\":\"m0,20 3,0 3,-10 3,10 11,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0m1\"},[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0mx\"},[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 5,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 4,16\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 9,1\",\"class\":\"s2\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0md\"},[\"path\",{\"d\":\"m8,20 10,0\",\"class\":\"s3\"}],[\"path\",{\"d\":\"m0,20 5,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0mu\"},[\"path\",{\"d\":\"m0,20 3,0 C 7,10 10.107603,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0mz\"},[\"path\",{\"d\":\"m0,20 3,0 C 10,10 15,10 20,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"111\"},[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1m0\"},[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1m1\"},[\"path\",{\"d\":\"M0,0 3,0 6,10 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1mx\"},[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 8,17\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M3.5,1.5 5,0\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"1md\"},[\"path\",{\"d\":\"m0,0 3,0 c 4,10 7,20 17,20\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1mu\"},[\"path\",{\"d\":\"M0,0 5,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M8,0 18,0\",\"class\":\"s3\"}]],[\"g\",{\"id\":\"1mz\"},[\"path\",{\"d\":\"m0,0 3,0 c 7,10 12,10 17,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"xxx\"},[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 5,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 10,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 15,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 20,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M5,20 20,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,20 20,10\",\"class\":\"s2\"}],[\"path\",{\"d\":\"m15,20 5,-5\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"xm0\"},[\"path\",{\"d\":\"M0,0 4,0 9,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 4,1\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M5,20 8,17\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"xm1\"},[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 4,20 9,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 5,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 9,1\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 7,8\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 5,15\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"xmx\"},[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 5,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 10,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 15,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 20,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M5,20 20,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,20 20,10\",\"class\":\"s2\"}],[\"path\",{\"d\":\"m15,20 5,-5\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"xmd\"},[\"path\",{\"d\":\"m0,0 4,0 c 3,10 6,20 16,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 4,1\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 5.5,4.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 6.5,8.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 8,12\",\"class\":\"s2\"}],[\"path\",{\"d\":\"m5,20 5,-5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"m10,20 2.5,-2.5\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"xmu\"},[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 4,0 C 7,10 10,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 5,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 10,0\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 10,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 6,14\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"xmz\"},[\"path\",{\"d\":\"m0,0 4,0 c 6,10 11,10 16,10\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 4,0 C 10,10 15,10 20,10\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 4.5,0.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 6.5,3.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 8.5,6.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 11.5,8.5\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"ddd\"},[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s3\"}]],[\"g\",{\"id\":\"dm0\"},[\"path\",{\"d\":\"m0,20 10,0\",\"class\":\"s3\"}],[\"path\",{\"d\":\"m12,20 8,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"dm1\"},[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"dmx\"},[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 5,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 4,16\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 9,1\",\"class\":\"s2\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"dmd\"},[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s3\"}]],[\"g\",{\"id\":\"dmu\"},[\"path\",{\"d\":\"m0,20 3,0 C 7,10 10.107603,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"dmz\"},[\"path\",{\"d\":\"m0,20 3,0 C 10,10 15,10 20,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"uuu\"},[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s3\"}]],[\"g\",{\"id\":\"um0\"},[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"um1\"},[\"path\",{\"d\":\"M0,0 10,0\",\"class\":\"s3\"}],[\"path\",{\"d\":\"m12,0 8,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"umx\"},[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 8,17\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M3.5,1.5 5,0\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"umd\"},[\"path\",{\"d\":\"m0,0 3,0 c 4,10 7,20 17,20\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"umu\"},[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s3\"}]],[\"g\",{\"id\":\"umz\"},[\"path\",{\"d\":\"m0,0 3,0 c 7,10 12,10 17,10\",\"class\":\"s4\"}]],[\"g\",{\"id\":\"zzz\"},[\"path\",{\"d\":\"m0,10 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zm0\"},[\"path\",{\"d\":\"m0,10 6,0 3,10 11,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zm1\"},[\"path\",{\"d\":\"M0,10 6,10 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zmx\"},[\"path\",{\"d\":\"m6,10 3,10 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,10 6,10 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 8,17\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 6.5,8.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 9,1\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"zmd\"},[\"path\",{\"d\":\"m0,10 7,0 c 3,5 8,10 13,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zmu\"},[\"path\",{\"d\":\"m0,10 7,0 C 10,5 15,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zmz\"},[\"path\",{\"d\":\"m0,10 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"gap\"},[\"path\",{\"d\":\"m7,-2 -4,0 c -5,0 -5,24 -10,24 l 4,0 C 2,22 2,-2 7,-2 z\",\"class\":\"s5\"}],[\"path\",{\"d\":\"M-7,22 C -2,22 -2,-2 3,-2\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M-3,22 C 2,22 2,-2 7,-2\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0mv-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1mv-3\"},[\"path\",{\"d\":\"M2.875,0 20,0 20,20 9,20 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"xmv-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 3.5,1.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 4.5,5.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 4,16\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"dmv-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"umv-3\"},[\"path\",{\"d\":\"M3,0 20,0 20,20 9,20 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zmv-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m6,10 3,10 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,10 6,10 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vvv-3\"},[\"path\",{\"d\":\"M20,20 0,20 0,0 20,0\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm0-3\"},[\"path\",{\"d\":\"M0,20 0,0 3,0 9,20\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M0,0 3,0 9,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm1-3\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 9,0\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmx-3\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 6,10 3,0\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 8,17\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 7,8\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 9,1\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"vmd-3\"},[\"path\",{\"d\":\"m0,0 0,20 20,0 C 10,20 7,10 3,0\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,0 3,0 c 4,10 7,20 17,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmu-3\"},[\"path\",{\"d\":\"m0,0 0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmz-3\"},[\"path\",{\"d\":\"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,0 3,0 c 7,10 12,10 17,10\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 3,0 C 10,10 15,10 20,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-3-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-3-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-3-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-4-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-4-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-4-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-5-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-5-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-5-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0mv-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1mv-4\"},[\"path\",{\"d\":\"M2.875,0 20,0 20,20 9,20 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"xmv-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 3.5,1.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 4.5,5.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 4,16\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"dmv-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"umv-4\"},[\"path\",{\"d\":\"M3,0 20,0 20,20 9,20 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zmv-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m6,10 3,10 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,10 6,10 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0mv-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1mv-5\"},[\"path\",{\"d\":\"M2.875,0 20,0 20,20 9,20 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"xmv-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 3.5,1.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 4.5,5.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 4,16\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"dmv-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"umv-5\"},[\"path\",{\"d\":\"M3,0 20,0 20,20 9,20 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zmv-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m6,10 3,10 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,10 6,10 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vvv-4\"},[\"path\",{\"d\":\"M20,20 0,20 0,0 20,0\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm0-4\"},[\"path\",{\"d\":\"M0,20 0,0 3,0 9,20\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M0,0 3,0 9,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm1-4\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 9,0\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmx-4\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 6,10 3,0\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 8,17\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 7,8\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 9,1\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"vmd-4\"},[\"path\",{\"d\":\"m0,0 0,20 20,0 C 10,20 7,10 3,0\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,0 3,0 c 4,10 7,20 17,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmu-4\"},[\"path\",{\"d\":\"m0,0 0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmz-4\"},[\"path\",{\"d\":\"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,0 3,0 c 7,10 12,10 17,10\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 3,0 C 10,10 15,10 20,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vvv-5\"},[\"path\",{\"d\":\"M20,20 0,20 0,0 20,0\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm0-5\"},[\"path\",{\"d\":\"M0,20 0,0 3,0 9,20\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M0,0 3,0 9,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm1-5\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 9,0\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmx-5\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 6,10 3,0\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 8,17\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 7,8\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 9,1\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"vmd-5\"},[\"path\",{\"d\":\"m0,0 0,20 20,0 C 10,20 7,10 3,0\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,0 3,0 c 4,10 7,20 17,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmu-5\"},[\"path\",{\"d\":\"m0,0 0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmz-5\"},[\"path\",{\"d\":\"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,0 3,0 c 7,10 12,10 17,10\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 3,0 C 10,10 15,10 20,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"Pclk\"},[\"path\",{\"d\":\"M-3,12 0,3 3,12 C 1,11 -1,11 -3,12 z\",\"class\":\"s9\"}],[\"path\",{\"d\":\"M0,20 0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"Nclk\"},[\"path\",{\"d\":\"M-3,8 0,17 3,8 C 1,9 -1,9 -3,8 z\",\"class\":\"s9\"}],[\"path\",{\"d\":\"m0,0 0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vvv-2\"},[\"path\",{\"d\":\"M20,20 0,20 0,0 20,0\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm0-2\"},[\"path\",{\"d\":\"M0,20 0,0 3,0 9,20\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M0,0 3,0 9,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vm1-2\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 9,0\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmx-2\"},[\"path\",{\"d\":\"M0,0 0,20 3,20 6,10 3,0\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m20,15 -5,5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,10 10,20\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,5 8,17\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M20,0 7,13\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M15,0 7,8\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M10,0 9,1\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"vmd-2\"},[\"path\",{\"d\":\"m0,0 0,20 20,0 C 10,20 7,10 3,0\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,0 3,0 c 4,10 7,20 17,20\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmu-2\"},[\"path\",{\"d\":\"m0,0 0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,20 3,0 C 7,10 10,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmz-2\"},[\"path\",{\"d\":\"M0,0 3,0 C 10,10 15,10 20,10 15,10 10,10 3,20 L 0,20\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,0 3,0 c 7,10 12,10 17,10\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 3,0 C 10,10 15,10 20,10\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"0mv-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"1mv-2\"},[\"path\",{\"d\":\"M2.875,0 20,0 20,20 9,20 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"xmv-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,5 3.5,1.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,10 4.5,5.5\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,15 6,9\",\"class\":\"s2\"}],[\"path\",{\"d\":\"M0,20 4,16\",\"class\":\"s2\"}]],[\"g\",{\"id\":\"dmv-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 3,20 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M3,20 9,0 20,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"m0,20 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"umv-2\"},[\"path\",{\"d\":\"M3,0 20,0 20,20 9,20 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"zmv-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m6,10 3,10 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,10 6,10 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-3-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-4-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-5-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-2-3\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s6\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-2-4\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s7\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-2-5\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s8\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"vmv-2-2\"},[\"path\",{\"d\":\"M9,0 20,0 20,20 9,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"M3,0 0,0 0,20 3,20 6,10 z\",\"class\":\"s10\"}],[\"path\",{\"d\":\"m0,0 3,0 6,20 11,0\",\"class\":\"s1\"}],[\"path\",{\"d\":\"M0,20 3,20 9,0 20,0\",\"class\":\"s1\"}]],[\"g\",{\"id\":\"arrow0\"},[\"path\",{\"d\":\"m-12,-3 9,3 -9,3 c 1,-2 1,-4 0,-6 z\",\"class\":\"s11\"}],[\"path\",{\"d\":\"M0,0 -15,0\",\"class\":\"s12\"}]],[\"marker\",{\"id\":\"arrowhead\",\"style\":\"fill:#0041c4\",\"markerHeight\":\"7\",\"markerWidth\":\"10\",\"markerUnits\":\"strokeWidth\",\"viewBox\":\"0 -4 11 8\",\"refX\":\"15\",\"refY\":\"0\",\"orient\":\"auto\"},[\"path\",{\"d\":\"M0 -4 11 0 0 4z\"}]],[\"marker\",{\"id\":\"arrowtail\",\"style\":\"fill:#0041c4\",\"markerHeight\":\"7\",\"markerWidth\":\"10\",\"markerUnits\":\"strokeWidth\",\"viewBox\":\"-11 -4 11 8\",\"refX\":\"-15\",\"refY\":\"0\",\"orient\":\"auto\"},[\"path\",{\"d\":\"M0 -4 -11 0 0 4z\"}]]],[\"g\",{\"id\":\"waves\"},[\"g\",{\"id\":\"lanes\"}],[\"g\",{\"id\":\"groups\"}]]];\ntry { module.exports = WaveSkin; } catch(err) {}\n\n"
  },
  {
    "path": "src/data/extra/web/js/wavedrom.js",
    "content": "class WaveDromRenderer extends GraphRenderer {\n    constructor() {\n        super();\n\n        this.name = 'wavedrom';\n\n        this.graphDivClass = 'vx-wavedrom-graph';\n\n        this.extraScripts = [this.scriptFolderPath + '/wavedrom/theme-default.js',\n                             this.scriptFolderPath + '/wavedrom/wavedrom.min.js'];\n\n        this.langs = ['wavedrom', 'wave'];\n    }\n\n    // Render @p_node as WaveDrom graph.\n    // Return true on success.\n    renderOne(p_node, p_idx) {\n        // Create a div container.\n        let graphDiv = document.createElement('div');\n        graphDiv.id = 'vx-wavedrom-graph-' + p_idx;\n        graphDiv.classList.add(this.graphDivClass);\n\n        Utils.checkSourceLine(p_node, graphDiv);\n\n        Utils.replaceNodeWithPreCheck(p_node, graphDiv);\n\n        try {\n            // ATTENTION: p_idx should start from 0 or style will be missing.\n            WaveDrom.RenderWaveForm(p_idx,\n                                    eval('(' + p_node.textContent + ')'),\n                                    'vx-wavedrom-graph-');\n            window.vxImageViewer.setupSVGToView(graphDiv.children[0], true);\n        } catch (p_err) {\n            console.error('failed to RenderWaveForm() for WaveDrom', p_err);\n            this.finishRenderingOne();\n            return false;\n        }\n\n        this.finishRenderingOne();\n        return true;\n    }\n\n    // p_callback(graphDiv).\n    renderText(p_container, p_text, p_idx, p_callback) {\n        if (!this.initialize(() => {\n                let graphDiv = this.renderTextInternal(p_container, p_text, p_idx);\n                p_callback(graphDiv);\n            })) {\n            return;\n        }\n\n        let graphDiv = this.renderTextInternal(p_container, p_text, p_idx);\n        p_callback(graphDiv);\n    }\n\n    // Render a graph from @p_text.\n    // Will append a div to @p_container and return the div.\n    renderTextInternal(p_container, p_text, p_idx) {\n        // Create a div container.\n        let graphDiv = document.createElement('div');\n        graphDiv.id = 'vx-wavedrom-graph-stand-alone-' + p_idx + '0';\n\n        p_container.appendChild(graphDiv);\n\n        try {\n            // Always use 0 as the index.\n            WaveDrom.RenderWaveForm(0,\n                                    eval('(' + p_text + ')'),\n                                    'vx-wavedrom-graph-stand-alone-' + p_idx);\n        } catch (p_err) {\n            console.error('failed to RenderWaveForm() for WaveDrom', p_err);\n            p_container.removeChild(graphDiv);\n            return null;\n        }\n\n        return graphDiv;\n    }\n}\n\nwindow.vxcore.registerWorker(new WaveDromRenderer());\n"
  },
  {
    "path": "src/data/extra/web/markdown-export-template.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"generator\" content=\"VNote\">\n\n    <!-- VX_TITLE_PLACEHOLDER -->\n\n    <style type=\"text/css\">\n    /* VX_GLOBAL_STYLES_PLACEHOLDER */\n    </style>\n\n    <style type=\"text/css\">\n    /* VX_STYLES_PLACEHOLDER */\n\n    /* VX_STYLES_CONTENT_PLACEHOLDER */\n    </style>\n\n    <script type=\"text/javascript\">\n        /* VX_SCRIPTS_PLACEHOLDER */\n    </script>\n\n    <!-- VX_SCRIPTS_PLACEHOLDER -->\n\n    <!-- VX_HEAD_PLACEHOLDER -->\n</head>\n<body class=\"<!-- VX_BODY_CLASS_LIST_PLACEHOLDER -->\">\n    <div class=\"container-fluid\">\n    <div class=\"row flex-xl-nowrap\">\n        <!-- VX_OUTLINE_PANEL_START -->\n        <div id=\"outline-panel\" style=\"display:none;\" class=\"d-none d-md-block d-xl-block col-md-3 col-xl-2 bd-toc\">\n            <div id=\"outline-content\" class=\"section-nav\"></div>\n        </div>\n        <!-- VX_OUTLINE_PANEL_END -->\n\n        <div id=\"post-content\" class=\"col-12 col-md-9 col-xl-10 py-md-3 pl-md-5 bd-content\">\n        <!-- VX_CONTENT_PLACEHOLDER -->\n        </div>\n    </div>\n    </div>\n\n    <!-- VX_OUTLINE_BUTTON_START -->\n    <div id=\"container-floating\" style=\"display:none;\" class=\"d-none d-md-block d-xl-block\">\n        <div id=\"floating-button\" onclick=\"toggleMore()\">\n            <p id=\"floating-more\" class=\"more\">&gt;</p>\n        </div>\n    </div>\n    <!-- VX_OUTLINE_BUTTON_END -->\n</body>\n</html>\n"
  },
  {
    "path": "src/data/extra/web/markdown-viewer-template.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>VNoteX Markdown Viewer</title>\n\n    <style type=\"text/css\">\n    /* VX_GLOBAL_STYLES_PLACEHOLDER */\n    </style>\n\n    <!-- VX_THEME_STYLES_PLACEHOLDER -->\n\n    <!-- VX_STYLES_PLACEHOLDER -->\n\n    <script type=\"text/javascript\">\n        /* VX_GLOBAL_OPTIONS_PLACEHOLDER */\n    </script>\n\n    <!-- VX_SCRIPTS_PLACEHOLDER -->\n</head>\n<body>\n    <div id=\"vx-content\"></div>\n\n    <div id=\"vx-image-view-box\" class=\"vx-modal-box\" style=\"display:none;\">\n        <span id=\"vx-image-view-close\" class=\"vx-modal-close\">&times;</span>\n        <img id=\"vx-image-view\" class=\"vx-modal-content\">\n    </div>\n\n    <div id=\"vx-preview\" style=\"display:none;\"></div>\n\n    <!-- Need to be visible to let preview work -->\n    <div id=\"vx-inplace-preview\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "src/data/extra/web/mindmap-editor-template.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>VNoteX MindMap Viewer</title>\n\n    <!-- 全局样式占位符 -->\n    <style type=\"text/css\">\n    /* VX_GLOBAL_STYLES_PLACEHOLDER */\n    html, body {\n        margin: 0;\n        padding: 0;\n        width: 100%;\n        height: 100%;\n        overflow: hidden;\n    }\n\n    #vx-mindmap {\n        width: 100%;\n        height: 100%;\n        position: relative;\n        overflow: hidden;\n        background-color: var(--vx-mindmap-background-color);\n    }\n\n    /* 主题变量 */\n    :root {\n        --vx-mindmap-primary-color: var(--vx-primary-color);\n        --vx-mindmap-box-color: var(--vx-background-color);\n        --vx-mindmap-line-color: var(--vx-border-color);\n        --vx-mindmap-root-color: var(--vx-text-color);\n        --vx-mindmap-root-background: var(--vx-primary-color);\n        --vx-mindmap-child-color: var(--vx-text-color);\n        --vx-mindmap-child-background: var(--vx-background-color);\n    }\n\n    /* 基础样式 */\n    .mind-elixir-node {\n        font-family: var(--vx-mindmap-font-family);\n        color: var(--vx-mindmap-text-color);\n        border: 1px solid var(--vx-mindmap-line-color);\n        border-radius: 4px;\n        padding: 6px 12px;\n        transition: all 0.2s ease;\n    }\n\n    .mind-elixir-node:hover {\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n    }\n\n    .mind-elixir-node.selected {\n        border-color: var(--vx-mindmap-primary-color);\n        box-shadow: 0 0 0 2px var(--vx-mindmap-primary-color);\n    }\n\n    /* 连接线样式 */\n    .mind-elixir-line {\n        stroke: var(--vx-mindmap-line-color);\n        stroke-width: 1px;\n        transition: stroke 0.2s ease;\n    }\n\n    .mind-elixir-line:hover {\n        stroke: var(--vx-mindmap-primary-color);\n        stroke-width: 2px;\n    }\n\n    /* 根节点样式 */\n    .mind-elixir-root {\n        background-color: var(--vx-mindmap-root-background);\n        color: var(--vx-mindmap-root-color);\n        font-size: 16px;\n        font-weight: bold;\n        border: none;\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n    }\n\n    /* 子节点样式 */\n    .mind-elixir-child {\n        background-color: var(--vx-mindmap-child-background);\n        color: var(--vx-mindmap-child-color);\n        font-size: 14px;\n    }\n    </style>\n\n    <!-- 主题样式占位符 -->\n    <!-- VX_THEME_STYLES_PLACEHOLDER -->\n\n    <!-- 其他样式占位符 -->\n    <!-- VX_STYLES_PLACEHOLDER -->\n\n    <!-- 全局配置 -->\n    <script type=\"text/javascript\">\n        /* VX_GLOBAL_OPTIONS_PLACEHOLDER */\n    </script>\n\n    <!-- 脚本占位符 -->\n    <!-- VX_SCRIPTS_PLACEHOLDER -->\n</head>\n<body>\n    <div id=\"vx-mindmap\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/README.md",
    "content": "https://github.com/mozilla/pdf.js\nLegacy version: https://unpkg.com/pdfjs-dist/\nv3.1.81\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/pdfviewer.css",
    "content": "button#openFile, button#print, button#download, button#download + div.verticalToolbarSeparator {\n    display: none;\n}\n\nbutton#secondaryOpenFile, button#secondaryPrint, button#secondaryDownload, button#secondaryDownload + div.horizontalToolbarSeparator {\n    display: none;\n}\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/pdfviewer.js",
    "content": "/* Main script file for PdfViewer. */\n\nnew QWebChannel(qt.webChannelTransport,\n    function(p_channel) {\n        let adapter = p_channel.objects.vxAdapter;\n        // Export the adapter globally.\n        window.vxAdapter = adapter;\n\n        // Connect signals from CPP side.\n        adapter.urlUpdated.connect(function(p_url) {\n            window.vxcore.loadPdf(p_url);\n        });\n\n        console.log('QWebChannel has been set up');\n\n        if (window.vxcore.initialized) {\n            window.vxAdapter.setReady(true);\n        }\n    });\n\npdfjsLib.GlobalWorkerOptions.workerSrc = window.vxcore.workerSrc;\n\nwindow.vxcore.on('ready', function() {\n    if (window.vxAdapter) {\n        window.vxAdapter.setReady(true);\n    }\n});\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/pdfviewercore.js",
    "content": "class PdfViewerCore extends VXCore {\n    constructor() {\n        super();\n\n        const scriptFolderPath = Utils.parentFolder(document.currentScript.src);\n        this.workerSrc = scriptFolderPath + '/build/pdf.worker.js';\n    }\n\n    initOnLoad() {\n    }\n\n    loadPdf(p_url) {\n    }\n}\n\nwindow.vxcore = new PdfViewerCore();\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/cmaps/CNS2-V.bcmap",
    "content": "\u0003RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\u0006CNS2-H"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/cmaps/ETenms-B5-H.bcmap",
    "content": "\u0002RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\tETen-B5-H`\u0001 ^\u0001"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/cmaps/GB-H.bcmap",
    "content": "\u0002RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\u0001\u0001!!]aX!!]`21>\u0002\tp\u0002\u000bz$]\u0006\"Rd-U7*\u0017\r\b4%+ Z\u000f {/\u001f\u001c\u0004%<9Kb1].\"\u001f\f`],\"]\n\"]h\"]F\"]$\"]\u0002\"]`\"]>\"]\u001c\"]z\"]X\"]6\"]\u0014\"]r\"]P\"].\"]\f\"]j\"]H\"]&\"]\u0004\"]b\"]@\"]\u001e\"]|\"]Z\"]8\"]\u0016\"]t\"]R\"]0\"]\u000e\"]l\"]J\"](\"]\u0006\"]d\"]B\"] \"X~']W\"]5\"]\u0013\"]q\"]O\"]-\"]\u000b\"]i\"]G\"]%\"]\u0003\"]a\"]?\"]\u001d\"]{\"]Y\"]7\"]\u0015\"]s\"]Q\"]/\"]\r\"]k\"]I\"]'\"]\u0005\"]c\"]A\"]\u001f\"]}\"][\"]9"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/cmaps/LICENSE",
    "content": "%%Copyright: -----------------------------------------------------------\n%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated.\n%%Copyright: All rights reserved.\n%%Copyright:\n%%Copyright: Redistribution and use in source and binary forms, with or\n%%Copyright: without modification, are permitted provided that the\n%%Copyright: following conditions are met:\n%%Copyright:\n%%Copyright: Redistributions of source code must retain the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer.\n%%Copyright:\n%%Copyright: Redistributions in binary form must reproduce the above\n%%Copyright: copyright notice, this list of conditions and the following\n%%Copyright: disclaimer in the documentation and/or other materials\n%%Copyright: provided with the distribution. \n%%Copyright:\n%%Copyright: Neither the name of Adobe Systems Incorporated nor the names\n%%Copyright: of its contributors may be used to endorse or promote\n%%Copyright: products derived from this software without specific prior\n%%Copyright: written permission. \n%%Copyright:\n%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\n%%Copyright: CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\n%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n%%Copyright: -----------------------------------------------------------\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/br/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Pajenn a-raok\nprevious_label=A-raok\nnext.title=Pajenn war-lerc'h\nnext_label=War-lerc'h\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Pajenn\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=eus {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} war {{pagesCount}})\n\nzoom_out.title=Zoum bihanaat\nzoom_out_label=Zoum bihanaat\nzoom_in.title=Zoum brasaat\nzoom_in_label=Zoum brasaat\nzoom.title=Zoum\npresentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn\npresentation_mode_label=Mod kinnigadenn\nopen_file.title=Digeriñ ur restr\nopen_file_label=Digeriñ ur restr\nprint.title=Moullañ\nprint_label=Moullañ\ndownload.title=Pellgargañ\ndownload_label=Pellgargañ\nbookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez)\nbookmark_label=Gwel bremanel\n\n# Secondary toolbar and context menu\ntools.title=Ostilhoù\ntools_label=Ostilhoù\nfirst_page.title=Mont d'ar bajenn gentañ\nfirst_page_label=Mont d'ar bajenn gentañ\nlast_page.title=Mont d'ar bajenn diwezhañ\nlast_page_label=Mont d'ar bajenn diwezhañ\npage_rotate_cw.title=C'hwelañ gant roud ar bizied\npage_rotate_cw_label=C'hwelañ gant roud ar bizied\npage_rotate_ccw.title=C'hwelañ gant roud gin ar bizied\npage_rotate_ccw_label=C'hwelañ gant roud gin ar bizied\n\ncursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn\ncursor_text_select_tool_label=Ostilh diuzañ testenn\ncursor_hand_tool.title=Gweredekaat an ostilh dorn\ncursor_hand_tool_label=Ostilh dorn\n\nscroll_vertical.title=Arverañ an dibunañ a-blom\nscroll_vertical_label=Dibunañ a-serzh\nscroll_horizontal.title=Arverañ an dibunañ a-blaen\nscroll_horizontal_label=Dibunañ a-blaen\nscroll_wrapped.title=Arverañ an dibunañ paket\nscroll_wrapped_label=Dibunañ paket\n\nspread_none.title=Chom hep stagañ ar skignadurioù\nspread_none_label=Skignadenn ebet\nspread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar\nspread_odd_label=Pajennoù ampar\nspread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par\nspread_even_label=Pajennoù par\n\n# Document properties dialog box\ndocument_properties.title=Perzhioù an teul…\ndocument_properties_label=Perzhioù an teul…\ndocument_properties_file_name=Anv restr:\ndocument_properties_file_size=Ment ar restr:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} Me ({{size_b}} eizhbit)\ndocument_properties_title=Titl:\ndocument_properties_author=Aozer:\ndocument_properties_subject=Danvez:\ndocument_properties_keywords=Gerioù-alc'hwez:\ndocument_properties_creation_date=Deiziad krouiñ:\ndocument_properties_modification_date=Deiziad kemmañ:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Krouer:\ndocument_properties_producer=Kenderc'her PDF:\ndocument_properties_version=Handelv PDF:\ndocument_properties_page_count=Niver a bajennoù:\ndocument_properties_page_size=Ment ar bajenn:\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=poltred\ndocument_properties_page_size_orientation_landscape=gweledva\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Lizher\ndocument_properties_page_size_name_legal=Lezennel\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Gwel Web Herrek:\ndocument_properties_linearized_yes=Ya\ndocument_properties_linearized_no=Ket\ndocument_properties_close=Serriñ\n\nprint_progress_message=O prientiñ an teul evit moullañ...\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=Nullañ\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez\ntoggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul)\ntoggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez\ndocument_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)\ndocument_outline_label=Sinedoù an teuliad\nattachments.title=Diskouez ar c'henstagadurioù\nattachments_label=Kenstagadurioù\nlayers.title=Diskouez ar gwiskadoù (daou-glikañ evit adderaouekaat an holl gwiskadoù d'o stad dre ziouer)\nlayers_label=Gwiskadoù\nthumbs.title=Diskouez ar melvennoù\nthumbs_label=Melvennoù\nfindbar.title=Klask e-barzh an teuliad\nfindbar_label=Klask\n\nadditional_layers=Gwiskadoù ouzhpenn\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Pajenn {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Pajenn {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Melvenn ar bajenn {{page}}\n\n# Find panel button title and messages\nfind_input.title=Klask\nfind_input.placeholder=Klask e-barzh an teuliad\nfind_previous.title=Kavout an tamm frazenn kent o klotañ ganti\nfind_previous_label=Kent\nfind_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti\nfind_next_label=War-lerc'h\nfind_highlight=Usskediñ pep tra\nfind_match_case_label=Teurel evezh ouzh ar pennlizherennoù\nfind_entire_word_label=Gerioù a-bezh\nfind_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz\nfind_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]=Klotadenn {{current}} war {{total}}\nfind_match_count[two]=Klotadenn {{current}} war {{total}}\nfind_match_count[few]=Klotadenn {{current}} war {{total}}\nfind_match_count[many]=Klotadenn {{current}} war {{total}}\nfind_match_count[other]=Klotadenn {{current}} war {{total}}\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù\nfind_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù\nfind_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù\nfind_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù\nfind_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù\nfind_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù\nfind_not_found=N'haller ket kavout ar frazenn\n\n# Error panel labels\nerror_more_info=Muioc'h a ditouroù\nerror_less_info=Nebeutoc'h a ditouroù\nerror_close=Serriñ\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js handelv {{version}} (kempunadur: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Kemennadenn: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Torn: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=Restr: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Linenn: {{line}}\nrendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.\n\n# Predefined zoom values\npage_scale_width=Led ar bajenn\npage_scale_fit=Pajenn a-bezh\npage_scale_auto=Zoum emgefreek\npage_scale_actual=Ment wir\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=O kargañ…\nloading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.\ninvalid_file_error=Restr PDF didalvoudek pe kontronet.\nmissing_file_error=Restr PDF o vankout.\nunexpected_response_error=Respont dic'hortoz a-berzh an dafariad\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} Notennañ]\npassword_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ.\npassword_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij.\npassword_ok=Mat eo\npassword_cancel=Nullañ\n\nprinting_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.\nprinting_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.\nweb_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet.\n\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/ca/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Pàgina anterior\nprevious_label=Anterior\nnext.title=Pàgina següent\nnext_label=Següent\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Pàgina\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=de {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} de {{pagesCount}})\n\nzoom_out.title=Redueix\nzoom_out_label=Redueix\nzoom_in.title=Amplia\nzoom_in_label=Amplia\nzoom.title=Escala\npresentation_mode.title=Canvia al mode de presentació\npresentation_mode_label=Mode de presentació\nopen_file.title=Obre el fitxer\nopen_file_label=Obre\nprint.title=Imprimeix\nprint_label=Imprimeix\ndownload.title=Baixa\ndownload_label=Baixa\nbookmark.title=Vista actual (copia o obre en una finestra nova)\nbookmark_label=Vista actual\n\n# Secondary toolbar and context menu\ntools.title=Eines\ntools_label=Eines\nfirst_page.title=Vés a la primera pàgina\nfirst_page_label=Vés a la primera pàgina\nlast_page.title=Vés a l'última pàgina\nlast_page_label=Vés a l'última pàgina\npage_rotate_cw.title=Gira cap a la dreta\npage_rotate_cw_label=Gira cap a la dreta\npage_rotate_ccw.title=Gira cap a l'esquerra\npage_rotate_ccw_label=Gira cap a l'esquerra\n\ncursor_text_select_tool.title=Habilita l'eina de selecció de text\ncursor_text_select_tool_label=Eina de selecció de text\ncursor_hand_tool.title=Habilita l'eina de mà\ncursor_hand_tool_label=Eina de mà\n\nscroll_page.title=Usa el desplaçament de pàgina\nscroll_page_label=Desplaçament de pàgina\nscroll_vertical.title=Utilitza el desplaçament vertical\nscroll_vertical_label=Desplaçament vertical\nscroll_horizontal.title=Utilitza el desplaçament horitzontal\nscroll_horizontal_label=Desplaçament horitzontal\nscroll_wrapped.title=Activa el desplaçament continu\nscroll_wrapped_label=Desplaçament continu\n\nspread_none.title=No agrupis les pàgines de dues en dues\nspread_none_label=Una sola pàgina\nspread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar\nspread_odd_label=Doble pàgina (senar)\nspread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell\nspread_even_label=Doble pàgina (parell)\n\n# Document properties dialog box\ndocument_properties.title=Propietats del document…\ndocument_properties_label=Propietats del document…\ndocument_properties_file_name=Nom del fitxer:\ndocument_properties_file_size=Mida del fitxer:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\ndocument_properties_title=Títol:\ndocument_properties_author=Autor:\ndocument_properties_subject=Assumpte:\ndocument_properties_keywords=Paraules clau:\ndocument_properties_creation_date=Data de creació:\ndocument_properties_modification_date=Data de modificació:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Creador:\ndocument_properties_producer=Generador de PDF:\ndocument_properties_version=Versió de PDF:\ndocument_properties_page_count=Nombre de pàgines:\ndocument_properties_page_size=Mida de la pàgina:\ndocument_properties_page_size_unit_inches=polzades\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=vertical\ndocument_properties_page_size_orientation_landscape=apaïsat\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Carta\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Vista web ràpida:\ndocument_properties_linearized_yes=Sí\ndocument_properties_linearized_no=No\ndocument_properties_close=Tanca\n\nprint_progress_message=S'està preparant la impressió del document…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=Cancel·la\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Mostra/amaga la barra lateral\ntoggle_sidebar_notification2.title=Mostra/amaga la barra lateral (el document conté un esquema, adjuncions o capes)\ntoggle_sidebar_label=Mostra/amaga la barra lateral\ndocument_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)\ndocument_outline_label=Esquema del document\nattachments.title=Mostra les adjuncions\nattachments_label=Adjuncions\nlayers.title=Mostra les capes (doble clic per restablir totes les capes al seu estat per defecte)\nlayers_label=Capes\nthumbs.title=Mostra les miniatures\nthumbs_label=Miniatures\ncurrent_outline_item.title=Cerca l'element d'esquema actual\ncurrent_outline_item_label=Element d'esquema actual\nfindbar.title=Cerca al document\nfindbar_label=Cerca\n\nadditional_layers=Capes addicionals\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Pàgina {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Pàgina {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Miniatura de la pàgina {{page}}\n\n# Find panel button title and messages\nfind_input.title=Cerca\nfind_input.placeholder=Cerca al document…\nfind_previous.title=Cerca l'anterior coincidència de l'expressió\nfind_previous_label=Anterior\nfind_next.title=Cerca la següent coincidència de l'expressió\nfind_next_label=Següent\nfind_highlight=Ressalta-ho tot\nfind_match_case_label=Distingeix entre majúscules i minúscules\nfind_entire_word_label=Paraules senceres\nfind_reached_top=S'ha arribat al principi del document, es continua pel final\nfind_reached_bottom=S'ha arribat al final del document, es continua pel principi\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{current}} de {{total}} coincidència\nfind_match_count[two]={{current}} de {{total}} coincidències\nfind_match_count[few]={{current}} de {{total}} coincidències\nfind_match_count[many]={{current}} de {{total}} coincidències\nfind_match_count[other]={{current}} de {{total}} coincidències\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=Més de {{limit}} coincidències\nfind_match_count_limit[one]=Més d'{{limit}} coincidència\nfind_match_count_limit[two]=Més de {{limit}} coincidències\nfind_match_count_limit[few]=Més de {{limit}} coincidències\nfind_match_count_limit[many]=Més de {{limit}} coincidències\nfind_match_count_limit[other]=Més de {{limit}} coincidències\nfind_not_found=No s'ha trobat l'expressió\n\n# Error panel labels\nerror_more_info=Més informació\nerror_less_info=Menys informació\nerror_close=Tanca\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (muntatge: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Missatge: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Pila: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=Fitxer: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Línia: {{line}}\nrendering_error=S'ha produït un error mentre es renderitzava la pàgina.\n\n# Predefined zoom values\npage_scale_width=Amplada de la pàgina\npage_scale_fit=Ajusta la pàgina\npage_scale_auto=Zoom automàtic\npage_scale_actual=Mida real\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=S'està carregant…\nloading_error=S'ha produït un error en carregar el PDF.\ninvalid_file_error=El fitxer PDF no és vàlid o està malmès.\nmissing_file_error=Falta el fitxer PDF.\nunexpected_response_error=Resposta inesperada del servidor.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[Anotació {{type}}]\npassword_label=Introduïu la contrasenya per obrir aquest fitxer PDF.\npassword_invalid=La contrasenya no és vàlida. Torneu-ho a provar.\npassword_ok=D'acord\npassword_cancel=Cancel·la\n\nprinting_not_supported=Avís: la impressió no és plenament funcional en aquest navegador.\nprinting_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo.\nweb_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF.\n\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/de/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Eine Seite zurück\nprevious_label=Zurück\nnext.title=Eine Seite vor\nnext_label=Vor\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Seite\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=von {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} von {{pagesCount}})\n\nzoom_out.title=Verkleinern\nzoom_out_label=Verkleinern\nzoom_in.title=Vergrößern\nzoom_in_label=Vergrößern\nzoom.title=Zoom\npresentation_mode.title=In Präsentationsmodus wechseln\npresentation_mode_label=Präsentationsmodus\nopen_file.title=Datei öffnen\nopen_file_label=Öffnen\nprint.title=Drucken\nprint_label=Drucken\ndownload.title=Dokument speichern\ndownload_label=Speichern\nsave.title=Speichern\nsave_label=Speichern\nbookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster)\nbookmark_label=Aktuelle Ansicht\n\n# Secondary toolbar and context menu\ntools.title=Werkzeuge\ntools_label=Werkzeuge\nfirst_page.title=Erste Seite anzeigen\nfirst_page_label=Erste Seite anzeigen\nlast_page.title=Letzte Seite anzeigen\nlast_page_label=Letzte Seite anzeigen\npage_rotate_cw.title=Im Uhrzeigersinn drehen\npage_rotate_cw_label=Im Uhrzeigersinn drehen\npage_rotate_ccw.title=Gegen Uhrzeigersinn drehen\npage_rotate_ccw_label=Gegen Uhrzeigersinn drehen\n\ncursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren\ncursor_text_select_tool_label=Textauswahl-Werkzeug\ncursor_hand_tool.title=Hand-Werkzeug aktivieren\ncursor_hand_tool_label=Hand-Werkzeug\n\nscroll_page.title=Seiten einzeln anordnen\nscroll_page_label=Einzelseitenanordnung\nscroll_vertical.title=Seiten übereinander anordnen\nscroll_vertical_label=Vertikale Seitenanordnung\nscroll_horizontal.title=Seiten nebeneinander anordnen\nscroll_horizontal_label=Horizontale Seitenanordnung\nscroll_wrapped.title=Seiten neben- und übereinander anordnen, abhängig vom Platz\nscroll_wrapped_label=Kombinierte Seitenanordnung\n\nspread_none.title=Seiten nicht nebeneinander anzeigen\nspread_none_label=Einzelne Seiten\nspread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen\nspread_odd_label=Ungerade + gerade Seite\nspread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen\nspread_even_label=Gerade + ungerade Seite\n\n# Document properties dialog box\ndocument_properties.title=Dokumenteigenschaften\ndocument_properties_label=Dokumenteigenschaften…\ndocument_properties_file_name=Dateiname:\ndocument_properties_file_size=Dateigröße:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} KB ({{size_b}} Bytes)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} Bytes)\ndocument_properties_title=Titel:\ndocument_properties_author=Autor:\ndocument_properties_subject=Thema:\ndocument_properties_keywords=Stichwörter:\ndocument_properties_creation_date=Erstelldatum:\ndocument_properties_modification_date=Bearbeitungsdatum:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}} {{time}}\ndocument_properties_creator=Anwendung:\ndocument_properties_producer=PDF erstellt mit:\ndocument_properties_version=PDF-Version:\ndocument_properties_page_count=Seitenzahl:\ndocument_properties_page_size=Seitengröße:\ndocument_properties_page_size_unit_inches=Zoll\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=Hochformat\ndocument_properties_page_size_orientation_landscape=Querformat\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Letter\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Schnelle Webanzeige:\ndocument_properties_linearized_yes=Ja\ndocument_properties_linearized_no=Nein\ndocument_properties_close=Schließen\n\nprint_progress_message=Dokument wird für Drucken vorbereitet…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}} %\nprint_progress_close=Abbrechen\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Sidebar umschalten\ntoggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen)\ntoggle_sidebar_label=Sidebar umschalten\ndocument_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)\ndocument_outline_label=Dokumentstruktur\nattachments.title=Anhänge anzeigen\nattachments_label=Anhänge\nlayers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen)\nlayers_label=Ebenen\nthumbs.title=Miniaturansichten anzeigen\nthumbs_label=Miniaturansichten\ncurrent_outline_item.title=Aktuelles Struktur-Element finden\ncurrent_outline_item_label=Aktuelles Struktur-Element\nfindbar.title=Dokument durchsuchen\nfindbar_label=Suchen\n\nadditional_layers=Zusätzliche Ebenen\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Seite {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Seite {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Miniaturansicht von Seite {{page}}\n\n# Find panel button title and messages\nfind_input.title=Suchen\nfind_input.placeholder=Im Dokument suchen…\nfind_previous.title=Vorheriges Vorkommen des Suchbegriffs finden\nfind_previous_label=Zurück\nfind_next.title=Nächstes Vorkommen des Suchbegriffs finden\nfind_next_label=Weiter\nfind_highlight=Alle hervorheben\nfind_match_case_label=Groß-/Kleinschreibung beachten\nfind_match_diacritics_label=Akzente\nfind_entire_word_label=Ganze Wörter\nfind_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort\nfind_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{current}} von {{total}} Übereinstimmung\nfind_match_count[two]={{current}} von {{total}} Übereinstimmungen\nfind_match_count[few]={{current}} von {{total}} Übereinstimmungen\nfind_match_count[many]={{current}} von {{total}} Übereinstimmungen\nfind_match_count[other]={{current}} von {{total}} Übereinstimmungen\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen\nfind_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung\nfind_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen\nfind_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen\nfind_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen\nfind_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen\nfind_not_found=Suchbegriff nicht gefunden\n\n# Error panel labels\nerror_more_info=Mehr Informationen\nerror_less_info=Weniger Informationen\nerror_close=Schließen\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js Version {{version}} (build: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Nachricht: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Aufrufliste: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=Datei: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Zeile: {{line}}\n\n# Predefined zoom values\npage_scale_width=Seitenbreite\npage_scale_fit=Seitengröße\npage_scale_auto=Automatischer Zoom\npage_scale_actual=Originalgröße\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}} %\n\n# Loading indicator messages\nloading=Wird geladen…\nloading_error=Beim Laden der PDF-Datei trat ein Fehler auf.\ninvalid_file_error=Ungültige oder beschädigte PDF-Datei\nmissing_file_error=Fehlende PDF-Datei\nunexpected_response_error=Unerwartete Antwort des Servers\n\nrendering_error=Beim Darstellen der Seite trat ein Fehler auf.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[Anlage: {{type}}]\npassword_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein.\npassword_invalid=Falsches Passwort. Bitte versuchen Sie es erneut.\npassword_ok=OK\npassword_cancel=Abbrechen\n\nprinting_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt.\nprinting_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen.\nweb_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden.\n\n# Editor\neditor_free_text2.title=Text\neditor_free_text2_label=Text\neditor_ink2.title=Zeichnen\neditor_ink2_label=Zeichnen\n\nfree_text2_default_content=Schreiben beginnen…\n\n# Editor Parameters\neditor_free_text_color=Farbe\neditor_free_text_size=Größe\neditor_ink_color=Farbe\neditor_ink_thickness=Dicke\neditor_ink_opacity=Deckkraft\n\n# Editor aria\neditor_free_text2_aria_label=Texteditor\neditor_ink2_aria_label=Zeichnungseditor\neditor_ink_canvas_aria_label=Vom Benutzer erstelltes Bild\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/en-CA/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Previous Page\nprevious_label=Previous\nnext.title=Next Page\nnext_label=Next\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Page\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=of {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} of {{pagesCount}})\n\nzoom_out.title=Zoom Out\nzoom_out_label=Zoom Out\nzoom_in.title=Zoom In\nzoom_in_label=Zoom In\nzoom.title=Zoom\npresentation_mode.title=Switch to Presentation Mode\npresentation_mode_label=Presentation Mode\nopen_file.title=Open File\nopen_file_label=Open\nprint.title=Print\nprint_label=Print\ndownload.title=Download\ndownload_label=Download\nsave.title=Save\nsave_label=Save\nbookmark.title=Current view (copy or open in new window)\nbookmark_label=Current View\n\n# Secondary toolbar and context menu\ntools.title=Tools\ntools_label=Tools\nfirst_page.title=Go to First Page\nfirst_page_label=Go to First Page\nlast_page.title=Go to Last Page\nlast_page_label=Go to Last Page\npage_rotate_cw.title=Rotate Clockwise\npage_rotate_cw_label=Rotate Clockwise\npage_rotate_ccw.title=Rotate Counterclockwise\npage_rotate_ccw_label=Rotate Counterclockwise\n\ncursor_text_select_tool.title=Enable Text Selection Tool\ncursor_text_select_tool_label=Text Selection Tool\ncursor_hand_tool.title=Enable Hand Tool\ncursor_hand_tool_label=Hand Tool\n\nscroll_page.title=Use Page Scrolling\nscroll_page_label=Page Scrolling\nscroll_vertical.title=Use Vertical Scrolling\nscroll_vertical_label=Vertical Scrolling\nscroll_horizontal.title=Use Horizontal Scrolling\nscroll_horizontal_label=Horizontal Scrolling\nscroll_wrapped.title=Use Wrapped Scrolling\nscroll_wrapped_label=Wrapped Scrolling\n\nspread_none.title=Do not join page spreads\nspread_none_label=No Spreads\nspread_odd.title=Join page spreads starting with odd-numbered pages\nspread_odd_label=Odd Spreads\nspread_even.title=Join page spreads starting with even-numbered pages\nspread_even_label=Even Spreads\n\n# Document properties dialog box\ndocument_properties.title=Document Properties…\ndocument_properties_label=Document Properties…\ndocument_properties_file_name=File name:\ndocument_properties_file_size=File size:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} kB ({{size_b}} bytes)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\ndocument_properties_title=Title:\ndocument_properties_author=Author:\ndocument_properties_subject=Subject:\ndocument_properties_keywords=Keywords:\ndocument_properties_creation_date=Creation Date:\ndocument_properties_modification_date=Modification Date:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Creator:\ndocument_properties_producer=PDF Producer:\ndocument_properties_version=PDF Version:\ndocument_properties_page_count=Page Count:\ndocument_properties_page_size=Page Size:\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=portrait\ndocument_properties_page_size_orientation_landscape=landscape\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Letter\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Fast Web View:\ndocument_properties_linearized_yes=Yes\ndocument_properties_linearized_no=No\ndocument_properties_close=Close\n\nprint_progress_message=Preparing document for printing…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=Cancel\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Toggle Sidebar\ntoggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)\ntoggle_sidebar_label=Toggle Sidebar\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\ndocument_outline_label=Document Outline\nattachments.title=Show Attachments\nattachments_label=Attachments\nlayers.title=Show Layers (double-click to reset all layers to the default state)\nlayers_label=Layers\nthumbs.title=Show Thumbnails\nthumbs_label=Thumbnails\ncurrent_outline_item.title=Find Current Outline Item\ncurrent_outline_item_label=Current Outline Item\nfindbar.title=Find in Document\nfindbar_label=Find\n\nadditional_layers=Additional Layers\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Page {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Page {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Thumbnail of Page {{page}}\n\n# Find panel button title and messages\nfind_input.title=Find\nfind_input.placeholder=Find in document…\nfind_previous.title=Find the previous occurrence of the phrase\nfind_previous_label=Previous\nfind_next.title=Find the next occurrence of the phrase\nfind_next_label=Next\nfind_highlight=Highlight All\nfind_match_case_label=Match Case\nfind_match_diacritics_label=Match Diacritics\nfind_entire_word_label=Whole Words\nfind_reached_top=Reached top of document, continued from bottom\nfind_reached_bottom=Reached end of document, continued from top\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{current}} of {{total}} match\nfind_match_count[two]={{current}} of {{total}} matches\nfind_match_count[few]={{current}} of {{total}} matches\nfind_match_count[many]={{current}} of {{total}} matches\nfind_match_count[other]={{current}} of {{total}} matches\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=More than {{limit}} matches\nfind_match_count_limit[one]=More than {{limit}} match\nfind_match_count_limit[two]=More than {{limit}} matches\nfind_match_count_limit[few]=More than {{limit}} matches\nfind_match_count_limit[many]=More than {{limit}} matches\nfind_match_count_limit[other]=More than {{limit}} matches\nfind_not_found=Phrase not found\n\n# Error panel labels\nerror_more_info=More Information\nerror_less_info=Less Information\nerror_close=Close\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (build: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Message: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Stack: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=File: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Line: {{line}}\n\n# Predefined zoom values\npage_scale_width=Page Width\npage_scale_fit=Page Fit\npage_scale_auto=Automatic Zoom\npage_scale_actual=Actual Size\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=Loading…\nloading_error=An error occurred while loading the PDF.\ninvalid_file_error=Invalid or corrupted PDF file.\nmissing_file_error=Missing PDF file.\nunexpected_response_error=Unexpected server response.\n\nrendering_error=An error occurred while rendering the page.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} Annotation]\npassword_label=Enter the password to open this PDF file.\npassword_invalid=Invalid password. Please try again.\npassword_ok=OK\npassword_cancel=Cancel\n\nprinting_not_supported=Warning: Printing is not fully supported by this browser.\nprinting_not_ready=Warning: The PDF is not fully loaded for printing.\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\n\n# Editor\neditor_free_text2.title=Text\neditor_free_text2_label=Text\neditor_ink2.title=Draw\neditor_ink2_label=Draw\n\nfree_text2_default_content=Start typing…\n\n# Editor Parameters\neditor_free_text_color=Colour\neditor_free_text_size=Size\neditor_ink_color=Colour\neditor_ink_thickness=Thickness\neditor_ink_opacity=Opacity\n\n# Editor aria\neditor_free_text2_aria_label=Text Editor\neditor_ink2_aria_label=Draw Editor\neditor_ink_canvas_aria_label=User-created image\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/en-GB/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Previous Page\nprevious_label=Previous\nnext.title=Next Page\nnext_label=Next\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Page\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=of {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} of {{pagesCount}})\n\nzoom_out.title=Zoom Out\nzoom_out_label=Zoom Out\nzoom_in.title=Zoom In\nzoom_in_label=Zoom In\nzoom.title=Zoom\npresentation_mode.title=Switch to Presentation Mode\npresentation_mode_label=Presentation Mode\nopen_file.title=Open File\nopen_file_label=Open\nprint.title=Print\nprint_label=Print\ndownload.title=Download\ndownload_label=Download\nsave.title=Save\nsave_label=Save\nbookmark.title=Current view (copy or open in new window)\nbookmark_label=Current View\n\n# Secondary toolbar and context menu\ntools.title=Tools\ntools_label=Tools\nfirst_page.title=Go to First Page\nfirst_page_label=Go to First Page\nlast_page.title=Go to Last Page\nlast_page_label=Go to Last Page\npage_rotate_cw.title=Rotate Clockwise\npage_rotate_cw_label=Rotate Clockwise\npage_rotate_ccw.title=Rotate Anti-Clockwise\npage_rotate_ccw_label=Rotate Anti-Clockwise\n\ncursor_text_select_tool.title=Enable Text Selection Tool\ncursor_text_select_tool_label=Text Selection Tool\ncursor_hand_tool.title=Enable Hand Tool\ncursor_hand_tool_label=Hand Tool\n\nscroll_page.title=Use Page Scrolling\nscroll_page_label=Page Scrolling\nscroll_vertical.title=Use Vertical Scrolling\nscroll_vertical_label=Vertical Scrolling\nscroll_horizontal.title=Use Horizontal Scrolling\nscroll_horizontal_label=Horizontal Scrolling\nscroll_wrapped.title=Use Wrapped Scrolling\nscroll_wrapped_label=Wrapped Scrolling\n\nspread_none.title=Do not join page spreads\nspread_none_label=No Spreads\nspread_odd.title=Join page spreads starting with odd-numbered pages\nspread_odd_label=Odd Spreads\nspread_even.title=Join page spreads starting with even-numbered pages\nspread_even_label=Even Spreads\n\n# Document properties dialog box\ndocument_properties.title=Document Properties…\ndocument_properties_label=Document Properties…\ndocument_properties_file_name=File name:\ndocument_properties_file_size=File size:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} kB ({{size_b}} bytes)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\ndocument_properties_title=Title:\ndocument_properties_author=Author:\ndocument_properties_subject=Subject:\ndocument_properties_keywords=Keywords:\ndocument_properties_creation_date=Creation Date:\ndocument_properties_modification_date=Modification Date:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Creator:\ndocument_properties_producer=PDF Producer:\ndocument_properties_version=PDF Version:\ndocument_properties_page_count=Page Count:\ndocument_properties_page_size=Page Size:\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=portrait\ndocument_properties_page_size_orientation_landscape=landscape\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Letter\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Fast Web View:\ndocument_properties_linearized_yes=Yes\ndocument_properties_linearized_no=No\ndocument_properties_close=Close\n\nprint_progress_message=Preparing document for printing…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=Cancel\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Toggle Sidebar\ntoggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)\ntoggle_sidebar_label=Toggle Sidebar\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\ndocument_outline_label=Document Outline\nattachments.title=Show Attachments\nattachments_label=Attachments\nlayers.title=Show Layers (double-click to reset all layers to the default state)\nlayers_label=Layers\nthumbs.title=Show Thumbnails\nthumbs_label=Thumbnails\ncurrent_outline_item.title=Find Current Outline Item\ncurrent_outline_item_label=Current Outline Item\nfindbar.title=Find in Document\nfindbar_label=Find\n\nadditional_layers=Additional Layers\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Page {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Page {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Thumbnail of Page {{page}}\n\n# Find panel button title and messages\nfind_input.title=Find\nfind_input.placeholder=Find in document…\nfind_previous.title=Find the previous occurrence of the phrase\nfind_previous_label=Previous\nfind_next.title=Find the next occurrence of the phrase\nfind_next_label=Next\nfind_highlight=Highlight All\nfind_match_case_label=Match Case\nfind_match_diacritics_label=Match Diacritics\nfind_entire_word_label=Whole Words\nfind_reached_top=Reached top of document, continued from bottom\nfind_reached_bottom=Reached end of document, continued from top\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{current}} of {{total}} match\nfind_match_count[two]={{current}} of {{total}} matches\nfind_match_count[few]={{current}} of {{total}} matches\nfind_match_count[many]={{current}} of {{total}} matches\nfind_match_count[other]={{current}} of {{total}} matches\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=More than {{limit}} matches\nfind_match_count_limit[one]=More than {{limit}} match\nfind_match_count_limit[two]=More than {{limit}} matches\nfind_match_count_limit[few]=More than {{limit}} matches\nfind_match_count_limit[many]=More than {{limit}} matches\nfind_match_count_limit[other]=More than {{limit}} matches\nfind_not_found=Phrase not found\n\n# Error panel labels\nerror_more_info=More Information\nerror_less_info=Less Information\nerror_close=Close\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (build: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Message: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Stack: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=File: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Line: {{line}}\n\n# Predefined zoom values\npage_scale_width=Page Width\npage_scale_fit=Page Fit\npage_scale_auto=Automatic Zoom\npage_scale_actual=Actual Size\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=Loading…\nloading_error=An error occurred while loading the PDF.\ninvalid_file_error=Invalid or corrupted PDF file.\nmissing_file_error=Missing PDF file.\nunexpected_response_error=Unexpected server response.\n\nrendering_error=An error occurred while rendering the page.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} Annotation]\npassword_label=Enter the password to open this PDF file.\npassword_invalid=Invalid password. Please try again.\npassword_ok=OK\npassword_cancel=Cancel\n\nprinting_not_supported=Warning: Printing is not fully supported by this browser.\nprinting_not_ready=Warning: The PDF is not fully loaded for printing.\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\n\n# Editor\neditor_free_text2.title=Text\neditor_free_text2_label=Text\neditor_ink2.title=Draw\neditor_ink2_label=Draw\n\nfree_text2_default_content=Start typing…\n\n# Editor Parameters\neditor_free_text_color=Colour\neditor_free_text_size=Size\neditor_ink_color=Colour\neditor_ink_thickness=Thickness\neditor_ink_opacity=Opacity\n\n# Editor aria\neditor_free_text2_aria_label=Text Editor\neditor_ink2_aria_label=Draw Editor\neditor_ink_canvas_aria_label=User-created image\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/en-US/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Previous Page\nprevious_label=Previous\nnext.title=Next Page\nnext_label=Next\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Page\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=of {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} of {{pagesCount}})\n\nzoom_out.title=Zoom Out\nzoom_out_label=Zoom Out\nzoom_in.title=Zoom In\nzoom_in_label=Zoom In\nzoom.title=Zoom\npresentation_mode.title=Switch to Presentation Mode\npresentation_mode_label=Presentation Mode\nopen_file.title=Open File\nopen_file_label=Open\nprint.title=Print\nprint_label=Print\nsave.title=Save\nsave_label=Save\nbookmark.title=Current view (copy or open in new window)\nbookmark_label=Current View\n\n# Secondary toolbar and context menu\ntools.title=Tools\ntools_label=Tools\nfirst_page.title=Go to First Page\nfirst_page_label=Go to First Page\nlast_page.title=Go to Last Page\nlast_page_label=Go to Last Page\npage_rotate_cw.title=Rotate Clockwise\npage_rotate_cw_label=Rotate Clockwise\npage_rotate_ccw.title=Rotate Counterclockwise\npage_rotate_ccw_label=Rotate Counterclockwise\n\ncursor_text_select_tool.title=Enable Text Selection Tool\ncursor_text_select_tool_label=Text Selection Tool\ncursor_hand_tool.title=Enable Hand Tool\ncursor_hand_tool_label=Hand Tool\n\nscroll_page.title=Use Page Scrolling\nscroll_page_label=Page Scrolling\nscroll_vertical.title=Use Vertical Scrolling\nscroll_vertical_label=Vertical Scrolling\nscroll_horizontal.title=Use Horizontal Scrolling\nscroll_horizontal_label=Horizontal Scrolling\nscroll_wrapped.title=Use Wrapped Scrolling\nscroll_wrapped_label=Wrapped Scrolling\n\nspread_none.title=Do not join page spreads\nspread_none_label=No Spreads\nspread_odd.title=Join page spreads starting with odd-numbered pages\nspread_odd_label=Odd Spreads\nspread_even.title=Join page spreads starting with even-numbered pages\nspread_even_label=Even Spreads\n\n# Document properties dialog box\ndocument_properties.title=Document Properties…\ndocument_properties_label=Document Properties…\ndocument_properties_file_name=File name:\ndocument_properties_file_size=File size:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\ndocument_properties_title=Title:\ndocument_properties_author=Author:\ndocument_properties_subject=Subject:\ndocument_properties_keywords=Keywords:\ndocument_properties_creation_date=Creation Date:\ndocument_properties_modification_date=Modification Date:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Creator:\ndocument_properties_producer=PDF Producer:\ndocument_properties_version=PDF Version:\ndocument_properties_page_count=Page Count:\ndocument_properties_page_size=Page Size:\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=portrait\ndocument_properties_page_size_orientation_landscape=landscape\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Letter\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Fast Web View:\ndocument_properties_linearized_yes=Yes\ndocument_properties_linearized_no=No\ndocument_properties_close=Close\n\nprint_progress_message=Preparing document for printing…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=Cancel\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Toggle Sidebar\ntoggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)\ntoggle_sidebar_label=Toggle Sidebar\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\ndocument_outline_label=Document Outline\nattachments.title=Show Attachments\nattachments_label=Attachments\nlayers.title=Show Layers (double-click to reset all layers to the default state)\nlayers_label=Layers\nthumbs.title=Show Thumbnails\nthumbs_label=Thumbnails\ncurrent_outline_item.title=Find Current Outline Item\ncurrent_outline_item_label=Current Outline Item\nfindbar.title=Find in Document\nfindbar_label=Find\n\nadditional_layers=Additional Layers\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Page {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Page {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Thumbnail of Page {{page}}\n\n# Find panel button title and messages\nfind_input.title=Find\nfind_input.placeholder=Find in document…\nfind_previous.title=Find the previous occurrence of the phrase\nfind_previous_label=Previous\nfind_next.title=Find the next occurrence of the phrase\nfind_next_label=Next\nfind_highlight=Highlight All\nfind_match_case_label=Match Case\nfind_match_diacritics_label=Match Diacritics\nfind_entire_word_label=Whole Words\nfind_reached_top=Reached top of document, continued from bottom\nfind_reached_bottom=Reached end of document, continued from top\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{current}} of {{total}} match\nfind_match_count[two]={{current}} of {{total}} matches\nfind_match_count[few]={{current}} of {{total}} matches\nfind_match_count[many]={{current}} of {{total}} matches\nfind_match_count[other]={{current}} of {{total}} matches\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=More than {{limit}} matches\nfind_match_count_limit[one]=More than {{limit}} match\nfind_match_count_limit[two]=More than {{limit}} matches\nfind_match_count_limit[few]=More than {{limit}} matches\nfind_match_count_limit[many]=More than {{limit}} matches\nfind_match_count_limit[other]=More than {{limit}} matches\nfind_not_found=Phrase not found\n\n# Predefined zoom values\npage_scale_width=Page Width\npage_scale_fit=Page Fit\npage_scale_auto=Automatic Zoom\npage_scale_actual=Actual Size\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=Loading…\nloading_error=An error occurred while loading the PDF.\ninvalid_file_error=Invalid or corrupted PDF file.\nmissing_file_error=Missing PDF file.\nunexpected_response_error=Unexpected server response.\nrendering_error=An error occurred while rendering the page.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} Annotation]\npassword_label=Enter the password to open this PDF file.\npassword_invalid=Invalid password. Please try again.\npassword_ok=OK\npassword_cancel=Cancel\n\nprinting_not_supported=Warning: Printing is not fully supported by this browser.\nprinting_not_ready=Warning: The PDF is not fully loaded for printing.\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\n\n# Editor\neditor_free_text2.title=Text\neditor_free_text2_label=Text\neditor_ink2.title=Draw\neditor_ink2_label=Draw\n\nfree_text2_default_content=Start typing…\n\n# Editor Parameters\neditor_free_text_color=Color\neditor_free_text_size=Size\neditor_ink_color=Color\neditor_ink_thickness=Thickness\neditor_ink_opacity=Opacity\n\n# Editor aria\neditor_free_text2_aria_label=Text Editor\neditor_ink2_aria_label=Draw Editor\neditor_ink_canvas_aria_label=User-created image\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/eu/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Aurreko orria\nprevious_label=Aurrekoa\nnext.title=Hurrengo orria\nnext_label=Hurrengoa\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Orria\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=/ {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages={{pagesCount}}/{{pageNumber}}\n\nzoom_out.title=Urrundu zooma\nzoom_out_label=Urrundu zooma\nzoom_in.title=Gerturatu zooma\nzoom_in_label=Gerturatu zooma\nzoom.title=Zooma\npresentation_mode.title=Aldatu aurkezpen modura\npresentation_mode_label=Arkezpen modua\nopen_file.title=Ireki fitxategia\nopen_file_label=Ireki\nprint.title=Inprimatu\nprint_label=Inprimatu\ndownload.title=Deskargatu\ndownload_label=Deskargatu\nbookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian)\nbookmark_label=Uneko ikuspegia\n\n# Secondary toolbar and context menu\ntools.title=Tresnak\ntools_label=Tresnak\nfirst_page.title=Joan lehen orrira\nfirst_page_label=Joan lehen orrira\nlast_page.title=Joan azken orrira\nlast_page_label=Joan azken orrira\npage_rotate_cw.title=Biratu erlojuaren norantzan\npage_rotate_cw_label=Biratu erlojuaren norantzan\npage_rotate_ccw.title=Biratu erlojuaren aurkako norantzan\npage_rotate_ccw_label=Biratu erlojuaren aurkako norantzan\n\ncursor_text_select_tool.title=Gaitu testuaren hautapen tresna\ncursor_text_select_tool_label=Testuaren hautapen tresna\ncursor_hand_tool.title=Gaitu eskuaren tresna\ncursor_hand_tool_label=Eskuaren tresna\n\nscroll_page.title=Erabili orriaren korritzea\nscroll_page_label=Orriaren korritzea\nscroll_vertical.title=Erabili korritze bertikala\nscroll_vertical_label=Korritze bertikala\nscroll_horizontal.title=Erabili korritze horizontala\nscroll_horizontal_label=Korritze horizontala\nscroll_wrapped.title=Erabili korritze egokitua\nscroll_wrapped_label=Korritze egokitua\n\nspread_none.title=Ez elkartu barreiatutako orriak\nspread_none_label=Barreiatzerik ez\nspread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita\nspread_odd_label=Barreiatze bakoitia\nspread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita\nspread_even_label=Barreiatze bikoitia\n\n# Document properties dialog box\ndocument_properties.title=Dokumentuaren propietateak…\ndocument_properties_label=Dokumentuaren propietateak…\ndocument_properties_file_name=Fitxategi-izena:\ndocument_properties_file_size=Fitxategiaren tamaina:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} KB ({{size_b}} byte)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} byte)\ndocument_properties_title=Izenburua:\ndocument_properties_author=Egilea:\ndocument_properties_subject=Gaia:\ndocument_properties_keywords=Gako-hitzak:\ndocument_properties_creation_date=Sortze-data:\ndocument_properties_modification_date=Aldatze-data:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Sortzailea:\ndocument_properties_producer=PDFaren ekoizlea:\ndocument_properties_version=PDF bertsioa:\ndocument_properties_page_count=Orrialde kopurua:\ndocument_properties_page_size=Orriaren tamaina:\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=bertikala\ndocument_properties_page_size_orientation_landscape=horizontala\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Gutuna\ndocument_properties_page_size_name_legal=Legala\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Webeko ikuspegi bizkorra:\ndocument_properties_linearized_yes=Bai\ndocument_properties_linearized_no=Ez\ndocument_properties_close=Itxi\n\nprint_progress_message=Dokumentua inprimatzeko prestatzen…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent=%{{progress}}\nprint_progress_close=Utzi\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Txandakatu alboko barra\ntoggle_sidebar_notification2.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak/geruzak ditu)\ntoggle_sidebar_label=Txandakatu alboko barra\ndocument_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)\ndocument_outline_label=Dokumentuaren eskema\nattachments.title=Erakutsi eranskinak\nattachments_label=Eranskinak\nlayers.title=Erakutsi geruzak (klik bikoitza geruza guztiak egoera lehenetsira berrezartzeko)\nlayers_label=Geruzak\nthumbs.title=Erakutsi koadro txikiak\nthumbs_label=Koadro txikiak\ncurrent_outline_item.title=Bilatu uneko eskemaren elementua\ncurrent_outline_item_label=Uneko eskemaren elementua\nfindbar.title=Bilatu dokumentuan\nfindbar_label=Bilatu\n\nadditional_layers=Geruza gehigarriak\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark={{page}}. orria\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title={{page}}. orria\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas={{page}}. orriaren koadro txikia\n\n# Find panel button title and messages\nfind_input.title=Bilatu\nfind_input.placeholder=Bilatu dokumentuan…\nfind_previous.title=Bilatu esaldiaren aurreko parekatzea\nfind_previous_label=Aurrekoa\nfind_next.title=Bilatu esaldiaren hurrengo parekatzea\nfind_next_label=Hurrengoa\nfind_highlight=Nabarmendu guztia\nfind_match_case_label=Bat etorri maiuskulekin/minuskulekin\nfind_match_diacritics_label=Bereizi diakritikoak\nfind_entire_word_label=Hitz osoak\nfind_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen\nfind_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{total}}/{{current}}. bat etortzea\nfind_match_count[two]={{total}}/{{current}}. bat etortzea\nfind_match_count[few]={{total}}/{{current}}. bat etortzea\nfind_match_count[many]={{total}}/{{current}}. bat etortzea\nfind_match_count[other]={{total}}/{{current}}. bat etortzea\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]={{limit}} bat-etortze baino gehiago\nfind_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago\nfind_match_count_limit[two]={{limit}} bat-etortze baino gehiago\nfind_match_count_limit[few]={{limit}} bat-etortze baino gehiago\nfind_match_count_limit[many]={{limit}} bat-etortze baino gehiago\nfind_match_count_limit[other]={{limit}} bat-etortze baino gehiago\nfind_not_found=Esaldia ez da aurkitu\n\n# Error panel labels\nerror_more_info=Informazio gehiago\nerror_less_info=Informazio gutxiago\nerror_close=Itxi\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (eraikuntza: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Mezua: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Pila: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=Fitxategia: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Lerroa: {{line}}\n\n# Predefined zoom values\npage_scale_width=Orriaren zabalera\npage_scale_fit=Doitu orrira\npage_scale_auto=Zoom automatikoa\npage_scale_actual=Benetako tamaina\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent=%{{scale}}\n\n# Loading indicator messages\nloading=Kargatzen…\nloading_error=Errorea gertatu da PDFa kargatzean.\ninvalid_file_error=PDF fitxategi baliogabe edo hondatua.\nmissing_file_error=PDF fitxategia falta da.\nunexpected_response_error=Espero gabeko zerbitzariaren erantzuna.\n\nrendering_error=Errorea gertatu da orria errendatzean.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} ohartarazpena]\npassword_label=Idatzi PDF fitxategi hau irekitzeko pasahitza.\npassword_invalid=Pasahitz baliogabea. Saiatu berriro mesedez.\npassword_ok=Ados\npassword_cancel=Utzi\n\nprinting_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan.\nprinting_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko.\nweb_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili.\n\n# Editor\neditor_free_text2.title=Testua\neditor_free_text2_label=Testua\neditor_ink2.title=Marrazkia\neditor_ink2_label=Marrazkia\n\nfree_text2_default_content=Hasi idazten…\n\n# Editor Parameters\neditor_free_text_color=Kolorea\neditor_free_text_size=Tamaina\neditor_ink_color=Kolorea\neditor_ink_thickness=Loditasuna\neditor_ink_opacity=Opakutasuna\n\n# Editor aria\neditor_free_text2_aria_label=Testu-editorea\neditor_ink2_aria_label=Marrazki-editorea\neditor_ink_canvas_aria_label=Erabiltzaileak sortutako irudia\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/fr/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Page précédente\nprevious_label=Précédent\nnext.title=Page suivante\nnext_label=Suivant\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Page\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=sur {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} sur {{pagesCount}})\n\nzoom_out.title=Zoom arrière\nzoom_out_label=Zoom arrière\nzoom_in.title=Zoom avant\nzoom_in_label=Zoom avant\nzoom.title=Zoom\npresentation_mode.title=Basculer en mode présentation\npresentation_mode_label=Mode présentation\nopen_file.title=Ouvrir le fichier\nopen_file_label=Ouvrir le fichier\nprint.title=Imprimer\nprint_label=Imprimer\ndownload.title=Télécharger\ndownload_label=Télécharger\nsave.title=Enregistrer\nsave_label=Enregistrer\nbookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre)\nbookmark_label=Affichage actuel\n\n# Secondary toolbar and context menu\ntools.title=Outils\ntools_label=Outils\nfirst_page.title=Aller à la première page\nfirst_page_label=Aller à la première page\nlast_page.title=Aller à la dernière page\nlast_page_label=Aller à la dernière page\npage_rotate_cw.title=Rotation horaire\npage_rotate_cw_label=Rotation horaire\npage_rotate_ccw.title=Rotation antihoraire\npage_rotate_ccw_label=Rotation antihoraire\n\ncursor_text_select_tool.title=Activer l’outil de sélection de texte\ncursor_text_select_tool_label=Outil de sélection de texte\ncursor_hand_tool.title=Activer l’outil main\ncursor_hand_tool_label=Outil main\n\nscroll_page.title=Utiliser le défilement par page\nscroll_page_label=Défilement par page\nscroll_vertical.title=Utiliser le défilement vertical\nscroll_vertical_label=Défilement vertical\nscroll_horizontal.title=Utiliser le défilement horizontal\nscroll_horizontal_label=Défilement horizontal\nscroll_wrapped.title=Utiliser le défilement par bloc\nscroll_wrapped_label=Défilement par bloc\n\nspread_none.title=Ne pas afficher les pages deux à deux\nspread_none_label=Pas de double affichage\nspread_odd.title=Afficher les pages par deux, impaires à gauche\nspread_odd_label=Doubles pages, impaires à gauche\nspread_even.title=Afficher les pages par deux, paires à gauche\nspread_even_label=Doubles pages, paires à gauche\n\n# Document properties dialog box\ndocument_properties.title=Propriétés du document…\ndocument_properties_label=Propriétés du document…\ndocument_properties_file_name=Nom du fichier :\ndocument_properties_file_size=Taille du fichier :\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} Ko ({{size_b}} octets)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} Mo ({{size_b}} octets)\ndocument_properties_title=Titre :\ndocument_properties_author=Auteur :\ndocument_properties_subject=Sujet :\ndocument_properties_keywords=Mots-clés :\ndocument_properties_creation_date=Date de création :\ndocument_properties_modification_date=Modifié le :\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}} à {{time}}\ndocument_properties_creator=Créé par :\ndocument_properties_producer=Outil de conversion PDF :\ndocument_properties_version=Version PDF :\ndocument_properties_page_count=Nombre de pages :\ndocument_properties_page_size=Taille de la page :\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=portrait\ndocument_properties_page_size_orientation_landscape=paysage\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=lettre\ndocument_properties_page_size_name_legal=document juridique\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Affichage rapide des pages web :\ndocument_properties_linearized_yes=Oui\ndocument_properties_linearized_no=Non\ndocument_properties_close=Fermer\n\nprint_progress_message=Préparation du document pour l’impression…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}} %\nprint_progress_close=Annuler\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Afficher/Masquer le panneau latéral\ntoggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques)\ntoggle_sidebar_label=Afficher/Masquer le panneau latéral\ndocument_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments)\ndocument_outline_label=Signets du document\nattachments.title=Afficher les pièces jointes\nattachments_label=Pièces jointes\nlayers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut)\nlayers_label=Calques\nthumbs.title=Afficher les vignettes\nthumbs_label=Vignettes\ncurrent_outline_item.title=Trouver l’élément de plan actuel\ncurrent_outline_item_label=Élément de plan actuel\nfindbar.title=Rechercher dans le document\nfindbar_label=Rechercher\n\nadditional_layers=Calques additionnels\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Page {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Page {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Vignette de la page {{page}}\n\n# Find panel button title and messages\nfind_input.title=Rechercher\nfind_input.placeholder=Rechercher dans le document…\nfind_previous.title=Trouver l’occurrence précédente de l’expression\nfind_previous_label=Précédent\nfind_next.title=Trouver la prochaine occurrence de l’expression\nfind_next_label=Suivant\nfind_highlight=Tout surligner\nfind_match_case_label=Respecter la casse\nfind_match_diacritics_label=Respecter les accents et diacritiques\nfind_entire_word_label=Mots entiers\nfind_reached_top=Haut de la page atteint, poursuite depuis la fin\nfind_reached_bottom=Bas de la page atteint, poursuite au début\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]=Occurrence {{current}} sur {{total}}\nfind_match_count[two]=Occurrence {{current}} sur {{total}}\nfind_match_count[few]=Occurrence {{current}} sur {{total}}\nfind_match_count[many]=Occurrence {{current}} sur {{total}}\nfind_match_count[other]=Occurrence {{current}} sur {{total}}\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=Plus de {{limit}} correspondances\nfind_match_count_limit[one]=Plus de {{limit}} correspondance\nfind_match_count_limit[two]=Plus de {{limit}} correspondances\nfind_match_count_limit[few]=Plus de {{limit}} correspondances\nfind_match_count_limit[many]=Plus de {{limit}} correspondances\nfind_match_count_limit[other]=Plus de {{limit}} correspondances\nfind_not_found=Expression non trouvée\n\n# Error panel labels\nerror_more_info=Plus d’informations\nerror_less_info=Moins d’informations\nerror_close=Fermer\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Message : {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Pile : {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=Fichier : {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Ligne : {{line}}\n\n# Predefined zoom values\npage_scale_width=Pleine largeur\npage_scale_fit=Page entière\npage_scale_auto=Zoom automatique\npage_scale_actual=Taille réelle\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}} %\n\n# Loading indicator messages\nloading=Chargement…\nloading_error=Une erreur s’est produite lors du chargement du fichier PDF.\ninvalid_file_error=Fichier PDF invalide ou corrompu.\nmissing_file_error=Fichier PDF manquant.\nunexpected_response_error=Réponse inattendue du serveur.\n\nrendering_error=Une erreur s’est produite lors de l’affichage de la page.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}} à {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[Annotation {{type}}]\npassword_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF.\npassword_invalid=Mot de passe incorrect. Veuillez réessayer.\npassword_ok=OK\npassword_cancel=Annuler\n\nprinting_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur.\nprinting_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer.\nweb_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF.\n\n# Editor\neditor_free_text2.title=Texte\neditor_free_text2_label=Texte\neditor_ink2.title=Dessiner\neditor_ink2_label=Dessiner\n\nfree_text2_default_content=Commencer à écrire…\n\n# Editor Parameters\neditor_free_text_color=Couleur\neditor_free_text_size=Taille\neditor_ink_color=Couleur\neditor_ink_thickness=Épaisseur\neditor_ink_opacity=Opacité\n\n# Editor aria\neditor_free_text2_aria_label=Éditeur de texte\neditor_ink2_aria_label=Éditeur de dessin\neditor_ink_canvas_aria_label=Image créée par l’utilisateur·trice\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/ja/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=前のページへ戻ります\nprevious_label=前へ\nnext.title=次のページへ進みます\nnext_label=次へ\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=ページ\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=/ {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} / {{pagesCount}})\n\nzoom_out.title=表示を縮小します\nzoom_out_label=縮小\nzoom_in.title=表示を拡大します\nzoom_in_label=拡大\nzoom.title=拡大/縮小\npresentation_mode.title=プレゼンテーションモードに切り替えます\npresentation_mode_label=プレゼンテーションモード\nopen_file.title=ファイルを開きます\nopen_file_label=開く\nprint.title=印刷します\nprint_label=印刷\ndownload.title=ダウンロードします\ndownload_label=ダウンロード\nsave.title=保存します\nsave_label=保存\nbookmark.title=現在のビューの URL です (コピーまたは新しいウィンドウに開く)\nbookmark_label=現在のビュー\n\n# Secondary toolbar and context menu\ntools.title=ツール\ntools_label=ツール\nfirst_page.title=最初のページへ移動します\nfirst_page_label=最初のページへ移動\nlast_page.title=最後のページへ移動します\nlast_page_label=最後のページへ移動\npage_rotate_cw.title=ページを右へ回転します\npage_rotate_cw_label=右回転\npage_rotate_ccw.title=ページを左へ回転します\npage_rotate_ccw_label=左回転\n\ncursor_text_select_tool.title=テキスト選択ツールを有効にします\ncursor_text_select_tool_label=テキスト選択ツール\ncursor_hand_tool.title=手のひらツールを有効にします\ncursor_hand_tool_label=手のひらツール\n\nscroll_page.title=ページ単位でスクロールします\nscroll_page_label=ページ単位でスクロール\nscroll_vertical.title=縦スクロールにします\nscroll_vertical_label=縦スクロール\nscroll_horizontal.title=横スクロールにします\nscroll_horizontal_label=横スクロール\nscroll_wrapped.title=折り返しスクロールにします\nscroll_wrapped_label=折り返しスクロール\n\nspread_none.title=見開きにしません\nspread_none_label=見開きにしない\nspread_odd.title=奇数ページ開始で見開きにします\nspread_odd_label=奇数ページ見開き\nspread_even.title=偶数ページ開始で見開きにします\nspread_even_label=偶数ページ見開き\n\n# Document properties dialog box\ndocument_properties.title=文書のプロパティ...\ndocument_properties_label=文書のプロパティ...\ndocument_properties_file_name=ファイル名:\ndocument_properties_file_size=ファイルサイズ:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} KB ({{size_b}} バイト)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} バイト)\ndocument_properties_title=タイトル:\ndocument_properties_author=作成者:\ndocument_properties_subject=件名:\ndocument_properties_keywords=キーワード:\ndocument_properties_creation_date=作成日:\ndocument_properties_modification_date=更新日:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=アプリケーション:\ndocument_properties_producer=PDF 作成:\ndocument_properties_version=PDF のバージョン:\ndocument_properties_page_count=ページ数:\ndocument_properties_page_size=ページサイズ:\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=縦\ndocument_properties_page_size_orientation_landscape=横\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=レター\ndocument_properties_page_size_name_legal=リーガル\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=ウェブ表示用に最適化:\ndocument_properties_linearized_yes=はい\ndocument_properties_linearized_no=いいえ\ndocument_properties_close=閉じる\n\nprint_progress_message=文書の印刷を準備しています...\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=キャンセル\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=サイドバー表示を切り替えます\ntoggle_sidebar_notification2.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー)\ntoggle_sidebar_label=サイドバーの切り替え\ndocument_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します)\ndocument_outline_label=文書の目次\nattachments.title=添付ファイルを表示します\nattachments_label=添付ファイル\nlayers.title=レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります)\nlayers_label=レイヤー\nthumbs.title=縮小版を表示します\nthumbs_label=縮小版\ncurrent_outline_item.title=現在のアウトライン項目を検索\ncurrent_outline_item_label=現在のアウトライン項目\nfindbar.title=文書内を検索します\nfindbar_label=検索\n\nadditional_layers=追加レイヤー\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark={{page}} ページ\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title={{page}} ページ\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas={{page}} ページの縮小版\n\n# Find panel button title and messages\nfind_input.title=検索\nfind_input.placeholder=文書内を検索...\nfind_previous.title=現在より前の位置で指定文字列が現れる部分を検索します\nfind_previous_label=前へ\nfind_next.title=現在より後の位置で指定文字列が現れる部分を検索します\nfind_next_label=次へ\nfind_highlight=すべて強調表示\nfind_match_case_label=大文字/小文字を区別\nfind_match_diacritics_label=発音区別符号を区別\nfind_entire_word_label=単語一致\nfind_reached_top=文書先頭に到達したので末尾から続けて検索します\nfind_reached_bottom=文書末尾に到達したので先頭から続けて検索します\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{total}} 件中 {{current}} 件目\nfind_match_count[two]={{total}} 件中 {{current}} 件目\nfind_match_count[few]={{total}} 件中 {{current}} 件目\nfind_match_count[many]={{total}} 件中 {{current}} 件目\nfind_match_count[other]={{total}} 件中 {{current}} 件目\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]={{limit}} 件以上一致\nfind_match_count_limit[one]={{limit}} 件以上一致\nfind_match_count_limit[two]={{limit}} 件以上一致\nfind_match_count_limit[few]={{limit}} 件以上一致\nfind_match_count_limit[many]={{limit}} 件以上一致\nfind_match_count_limit[other]={{limit}} 件以上一致\nfind_not_found=見つかりませんでした\n\n# Error panel labels\nerror_more_info=詳細情報\nerror_less_info=詳細情報を隠す\nerror_close=閉じる\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (ビルド: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=メッセージ: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=スタック: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=ファイル: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=行: {{line}}\n\n# Predefined zoom values\npage_scale_width=幅に合わせる\npage_scale_fit=ページのサイズに合わせる\npage_scale_auto=自動ズーム\npage_scale_actual=実際のサイズ\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=読み込み中...\nloading_error=PDF の読み込み中にエラーが発生しました。\ninvalid_file_error=無効または破損した PDF ファイル。\nmissing_file_error=PDF ファイルが見つかりません。\nunexpected_response_error=サーバーから予期せぬ応答がありました。\n\nrendering_error=ページのレンダリング中にエラーが発生しました。\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} 注釈]\npassword_label=この PDF ファイルを開くためのパスワードを入力してください。\npassword_invalid=無効なパスワードです。もう一度やり直してください。\npassword_ok=OK\npassword_cancel=キャンセル\n\nprinting_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。\nprinting_not_ready=警告: PDF を印刷するための読み込みが終了していません。\nweb_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。\n\n# Editor\neditor_free_text2.title=フリーテキスト注釈\neditor_free_text2_label=フリーテキスト注釈\neditor_ink2.title=インク注釈\neditor_ink2_label=インク注釈\n\nfree_text2_default_content=テキストを入力してください...\n\n# Editor Parameters\neditor_free_text_color=色\neditor_free_text_size=サイズ\neditor_ink_color=色\neditor_ink_thickness=太さ\neditor_ink_opacity=不透明度\n\n# Editor aria\neditor_free_text2_aria_label=フリーテキスト注釈エディター\neditor_ink2_aria_label=インク注釈エディター\neditor_ink_canvas_aria_label=ユーザー作成画像\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/locale.properties",
    "content": "[br]\n@import url(br/viewer.properties)\n\n[ca]\n@import url(ca/viewer.properties)\n\n[de]\n@import url(de/viewer.properties)\n\n[en-CA]\n@import url(en-CA/viewer.properties)\n\n[en-GB]\n@import url(en-GB/viewer.properties)\n\n[en-US]\n@import url(en-US/viewer.properties)\n\n[eu]\n@import url(eu/viewer.properties)\n\n[fr]\n@import url(fr/viewer.properties)\n\n[ja]\n@import url(ja/viewer.properties)\n\n[ru]\n@import url(ru/viewer.properties)\n\n[uk]\n@import url(uk/viewer.properties)\n\n[zh-CN]\n@import url(zh-CN/viewer.properties)\n\n[zh-TW]\n@import url(zh-TW/viewer.properties)\n\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/ru/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Предыдущая страница\nprevious_label=Предыдущая\nnext.title=Следующая страница\nnext_label=Следующая\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Страница\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=из {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} из {{pagesCount}})\n\nzoom_out.title=Уменьшить\nzoom_out_label=Уменьшить\nzoom_in.title=Увеличить\nzoom_in_label=Увеличить\nzoom.title=Масштаб\npresentation_mode.title=Перейти в режим презентации\npresentation_mode_label=Режим презентации\nopen_file.title=Открыть файл\nopen_file_label=Открыть\nprint.title=Печать\nprint_label=Печать\ndownload.title=Загрузить\ndownload_label=Загрузить\nsave.title=Сохранить\nsave_label=Сохранить\nbookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне)\nbookmark_label=Текущий вид\n\n# Secondary toolbar and context menu\ntools.title=Инструменты\ntools_label=Инструменты\nfirst_page.title=Перейти на первую страницу\nfirst_page_label=Перейти на первую страницу\nlast_page.title=Перейти на последнюю страницу\nlast_page_label=Перейти на последнюю страницу\npage_rotate_cw.title=Повернуть по часовой стрелке\npage_rotate_cw_label=Повернуть по часовой стрелке\npage_rotate_ccw.title=Повернуть против часовой стрелки\npage_rotate_ccw_label=Повернуть против часовой стрелки\n\ncursor_text_select_tool.title=Включить Инструмент «Выделение текста»\ncursor_text_select_tool_label=Инструмент «Выделение текста»\ncursor_hand_tool.title=Включить Инструмент «Рука»\ncursor_hand_tool_label=Инструмент «Рука»\n\nscroll_page.title=Использовать прокрутку страниц\nscroll_page_label=Прокрутка страниц\nscroll_vertical.title=Использовать вертикальную прокрутку\nscroll_vertical_label=Вертикальная прокрутка\nscroll_horizontal.title=Использовать горизонтальную прокрутку\nscroll_horizontal_label=Горизонтальная прокрутка\nscroll_wrapped.title=Использовать масштабируемую прокрутку\nscroll_wrapped_label=Масштабируемая прокрутка\n\nspread_none.title=Не использовать режим разворотов страниц\nspread_none_label=Без разворотов страниц\nspread_odd.title=Развороты начинаются с нечётных номеров страниц\nspread_odd_label=Нечётные страницы слева\nspread_even.title=Развороты начинаются с чётных номеров страниц\nspread_even_label=Чётные страницы слева\n\n# Document properties dialog box\ndocument_properties.title=Свойства документа…\ndocument_properties_label=Свойства документа…\ndocument_properties_file_name=Имя файла:\ndocument_properties_file_size=Размер файла:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} КБ ({{size_b}} байт)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} МБ ({{size_b}} байт)\ndocument_properties_title=Заголовок:\ndocument_properties_author=Автор:\ndocument_properties_subject=Тема:\ndocument_properties_keywords=Ключевые слова:\ndocument_properties_creation_date=Дата создания:\ndocument_properties_modification_date=Дата изменения:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Приложение:\ndocument_properties_producer=Производитель PDF:\ndocument_properties_version=Версия PDF:\ndocument_properties_page_count=Число страниц:\ndocument_properties_page_size=Размер страницы:\ndocument_properties_page_size_unit_inches=дюймов\ndocument_properties_page_size_unit_millimeters=мм\ndocument_properties_page_size_orientation_portrait=книжная\ndocument_properties_page_size_orientation_landscape=альбомная\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Letter\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Быстрый просмотр в Web:\ndocument_properties_linearized_yes=Да\ndocument_properties_linearized_no=Нет\ndocument_properties_close=Закрыть\n\nprint_progress_message=Подготовка документа к печати…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=Отмена\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Показать/скрыть боковую панель\ntoggle_sidebar_notification2.title=Показать/скрыть боковую панель (документ имеет содержание/вложения/слои)\ntoggle_sidebar_label=Показать/скрыть боковую панель\ndocument_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы)\ndocument_outline_label=Содержание документа\nattachments.title=Показать вложения\nattachments_label=Вложения\nlayers.title=Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию)\nlayers_label=Слои\nthumbs.title=Показать миниатюры\nthumbs_label=Миниатюры\ncurrent_outline_item.title=Найти текущий элемент структуры\ncurrent_outline_item_label=Текущий элемент структуры\nfindbar.title=Найти в документе\nfindbar_label=Найти\n\nadditional_layers=Дополнительные слои\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Страница {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Страница {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Миниатюра страницы {{page}}\n\n# Find panel button title and messages\nfind_input.title=Найти\nfind_input.placeholder=Найти в документе…\nfind_previous.title=Найти предыдущее вхождение фразы в текст\nfind_previous_label=Назад\nfind_next.title=Найти следующее вхождение фразы в текст\nfind_next_label=Далее\nfind_highlight=Подсветить все\nfind_match_case_label=С учётом регистра\nfind_match_diacritics_label=С учётом диакритических знаков\nfind_entire_word_label=Слова целиком\nfind_reached_top=Достигнут верх документа, продолжено снизу\nfind_reached_bottom=Достигнут конец документа, продолжено сверху\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{current}} из {{total}} совпадения\nfind_match_count[two]={{current}} из {{total}} совпадений\nfind_match_count[few]={{current}} из {{total}} совпадений\nfind_match_count[many]={{current}} из {{total}} совпадений\nfind_match_count[other]={{current}} из {{total}} совпадений\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=Более {{limit}} совпадений\nfind_match_count_limit[one]=Более {{limit}} совпадения\nfind_match_count_limit[two]=Более {{limit}} совпадений\nfind_match_count_limit[few]=Более {{limit}} совпадений\nfind_match_count_limit[many]=Более {{limit}} совпадений\nfind_match_count_limit[other]=Более {{limit}} совпадений\nfind_not_found=Фраза не найдена\n\n# Error panel labels\nerror_more_info=Детали\nerror_less_info=Скрыть детали\nerror_close=Закрыть\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (сборка: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Сообщение: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Стeк: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=Файл: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Строка: {{line}}\n\n# Predefined zoom values\npage_scale_width=По ширине страницы\npage_scale_fit=По размеру страницы\npage_scale_auto=Автоматически\npage_scale_actual=Реальный размер\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=Загрузка…\nloading_error=При загрузке PDF произошла ошибка.\ninvalid_file_error=Некорректный или повреждённый PDF-файл.\nmissing_file_error=PDF-файл отсутствует.\nunexpected_response_error=Неожиданный ответ сервера.\n\nrendering_error=При создании страницы произошла ошибка.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[Аннотация {{type}}]\npassword_label=Введите пароль, чтобы открыть этот PDF-файл.\npassword_invalid=Неверный пароль. Пожалуйста, попробуйте снова.\npassword_ok=OK\npassword_cancel=Отмена\n\nprinting_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать.\nprinting_not_ready=Предупреждение: PDF не полностью загружен для печати.\nweb_fonts_disabled=Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты.\n\n# Editor\neditor_free_text2.title=Текст\neditor_free_text2_label=Текст\neditor_ink2.title=Рисовать\neditor_ink2_label=Рисовать\n\nfree_text2_default_content=Начните вводить…\n\n# Editor Parameters\neditor_free_text_color=Цвет\neditor_free_text_size=Размер\neditor_ink_color=Цвет\neditor_ink_thickness=Толщина\neditor_ink_opacity=Прозрачность\n\n# Editor aria\neditor_free_text2_aria_label=Текстовый редактор\neditor_ink2_aria_label=Редактор рисования\neditor_ink_canvas_aria_label=Созданное пользователем изображение\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/uk/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=Попередня сторінка\nprevious_label=Попередня\nnext.title=Наступна сторінка\nnext_label=Наступна\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=Сторінка\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=із {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} із {{pagesCount}})\n\nzoom_out.title=Зменшити\nzoom_out_label=Зменшити\nzoom_in.title=Збільшити\nzoom_in_label=Збільшити\nzoom.title=Масштаб\npresentation_mode.title=Перейти в режим презентації\npresentation_mode_label=Режим презентації\nopen_file.title=Відкрити файл\nopen_file_label=Відкрити\nprint.title=Друк\nprint_label=Друк\ndownload.title=Завантажити\ndownload_label=Завантажити\nsave.title=Зберегти\nsave_label=Зберегти\nbookmark.title=Поточний вигляд (копіювати чи відкрити в новому вікні)\nbookmark_label=Поточний вигляд\n\n# Secondary toolbar and context menu\ntools.title=Інструменти\ntools_label=Інструменти\nfirst_page.title=На першу сторінку\nfirst_page_label=На першу сторінку\nlast_page.title=На останню сторінку\nlast_page_label=На останню сторінку\npage_rotate_cw.title=Повернути за годинниковою стрілкою\npage_rotate_cw_label=Повернути за годинниковою стрілкою\npage_rotate_ccw.title=Повернути проти годинникової стрілки\npage_rotate_ccw_label=Повернути проти годинникової стрілки\n\ncursor_text_select_tool.title=Увімкнути інструмент вибору тексту\ncursor_text_select_tool_label=Інструмент вибору тексту\ncursor_hand_tool.title=Увімкнути інструмент \"Рука\"\ncursor_hand_tool_label=Інструмент \"Рука\"\n\nscroll_page.title=Використовувати прокручування сторінки\nscroll_page_label=Прокручування сторінки\nscroll_vertical.title=Використовувати вертикальне прокручування\nscroll_vertical_label=Вертикальне прокручування\nscroll_horizontal.title=Використовувати горизонтальне прокручування\nscroll_horizontal_label=Горизонтальне прокручування\nscroll_wrapped.title=Використовувати масштабоване прокручування\nscroll_wrapped_label=Масштабоване прокручування\n\nspread_none.title=Не використовувати розгорнуті сторінки\nspread_none_label=Без розгорнутих сторінок\nspread_odd.title=Розгорнуті сторінки починаються з непарних номерів\nspread_odd_label=Непарні сторінки зліва\nspread_even.title=Розгорнуті сторінки починаються з парних номерів\nspread_even_label=Парні сторінки зліва\n\n# Document properties dialog box\ndocument_properties.title=Властивості документа…\ndocument_properties_label=Властивості документа…\ndocument_properties_file_name=Назва файла:\ndocument_properties_file_size=Розмір файла:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} КБ ({{size_b}} bytes)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} МБ ({{size_b}} bytes)\ndocument_properties_title=Заголовок:\ndocument_properties_author=Автор:\ndocument_properties_subject=Тема:\ndocument_properties_keywords=Ключові слова:\ndocument_properties_creation_date=Дата створення:\ndocument_properties_modification_date=Дата зміни:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=Створено:\ndocument_properties_producer=Виробник PDF:\ndocument_properties_version=Версія PDF:\ndocument_properties_page_count=Кількість сторінок:\ndocument_properties_page_size=Розмір сторінки:\ndocument_properties_page_size_unit_inches=дюймів\ndocument_properties_page_size_unit_millimeters=мм\ndocument_properties_page_size_orientation_portrait=книжкова\ndocument_properties_page_size_orientation_landscape=альбомна\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Letter\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=Швидкий перегляд в Інтернеті:\ndocument_properties_linearized_yes=Так\ndocument_properties_linearized_no=Ні\ndocument_properties_close=Закрити\n\nprint_progress_message=Підготовка документу до друку…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=Скасувати\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=Бічна панель\ntoggle_sidebar_notification2.title=Перемкнути бічну панель (документ містить ескіз/вкладення/шари)\ntoggle_sidebar_label=Перемкнути бічну панель\ndocument_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів)\ndocument_outline_label=Схема документа\nattachments.title=Показати прикріплення\nattachments_label=Прикріплення\nlayers.title=Показати шари (двічі клацніть, щоб скинути всі шари до типового стану)\nlayers_label=Шари\nthumbs.title=Показувати ескізи\nthumbs_label=Ескізи\ncurrent_outline_item.title=Знайти поточний елемент змісту\ncurrent_outline_item_label=Поточний елемент змісту\nfindbar.title=Знайти в документі\nfindbar_label=Знайти\n\nadditional_layers=Додаткові шари\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=Сторінка {{page}}\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=Сторінка {{page}}\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=Ескіз сторінки {{page}}\n\n# Find panel button title and messages\nfind_input.title=Знайти\nfind_input.placeholder=Знайти в документі…\nfind_previous.title=Знайти попереднє входження фрази\nfind_previous_label=Попереднє\nfind_next.title=Знайти наступне входження фрази\nfind_next_label=Наступне\nfind_highlight=Підсвітити все\nfind_match_case_label=З урахуванням регістру\nfind_match_diacritics_label=Відповідність діакритичних знаків\nfind_entire_word_label=Цілі слова\nfind_reached_top=Досягнуто початку документу, продовжено з кінця\nfind_reached_bottom=Досягнуто кінця документу, продовжено з початку\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]={{current}} збіг із {{total}}\nfind_match_count[two]={{current}} збіги з {{total}}\nfind_match_count[few]={{current}} збігів із {{total}}\nfind_match_count[many]={{current}} збігів із {{total}}\nfind_match_count[other]={{current}} збігів із {{total}}\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=Понад {{limit}} збігів\nfind_match_count_limit[one]=Більше, ніж {{limit}} збіг\nfind_match_count_limit[two]=Більше, ніж {{limit}} збіги\nfind_match_count_limit[few]=Більше, ніж {{limit}} збігів\nfind_match_count_limit[many]=Понад {{limit}} збігів\nfind_match_count_limit[other]=Понад {{limit}} збігів\nfind_not_found=Фразу не знайдено\n\n# Error panel labels\nerror_more_info=Більше інформації\nerror_less_info=Менше інформації\nerror_close=Закрити\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (build: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=Повідомлення: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=Стек: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=Файл: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=Рядок: {{line}}\n\n# Predefined zoom values\npage_scale_width=За шириною\npage_scale_fit=Вмістити\npage_scale_auto=Автомасштаб\npage_scale_actual=Дійсний розмір\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=Завантаження…\nloading_error=Під час завантаження PDF сталася помилка.\ninvalid_file_error=Недійсний або пошкоджений PDF-файл.\nmissing_file_error=Відсутній PDF-файл.\nunexpected_response_error=Неочікувана відповідь сервера.\n\nrendering_error=Під час виведення сторінки сталася помилка.\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}, {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}}-анотація]\npassword_label=Введіть пароль для відкриття цього PDF-файла.\npassword_invalid=Невірний пароль. Спробуйте ще.\npassword_ok=Гаразд\npassword_cancel=Скасувати\n\nprinting_not_supported=Попередження: Цей браузер не повністю підтримує друк.\nprinting_not_ready=Попередження: PDF не повністю завантажений для друку.\nweb_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти.\n\n# Editor\neditor_free_text2.title=Текст\neditor_free_text2_label=Текст\neditor_ink2.title=Малювати\neditor_ink2_label=Малювати\n\nfree_text2_default_content=Почніть вводити…\n\n# Editor Parameters\neditor_free_text_color=Колір\neditor_free_text_size=Розмір\neditor_ink_color=Колір\neditor_ink_thickness=Товщина\neditor_ink_opacity=Прозорість\n\n# Editor aria\neditor_free_text2_aria_label=Текстовий редактор\neditor_ink2_aria_label=Графічний редактор\neditor_ink_canvas_aria_label=Зображення, створене користувачем\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/zh-CN/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=上一页\nprevious_label=上一页\nnext.title=下一页\nnext_label=下一页\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=页面\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=/ {{pagesCount}}\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=({{pageNumber}} / {{pagesCount}})\n\nzoom_out.title=缩小\nzoom_out_label=缩小\nzoom_in.title=放大\nzoom_in_label=放大\nzoom.title=缩放\npresentation_mode.title=切换到演示模式\npresentation_mode_label=演示模式\nopen_file.title=打开文件\nopen_file_label=打开\nprint.title=打印\nprint_label=打印\ndownload.title=下载\ndownload_label=下载\nsave.title=保存\nsave_label=保存\nbookmark.title=当前在看的内容（复制或在新窗口中打开）\nbookmark_label=当前在看\n\n# Secondary toolbar and context menu\ntools.title=工具\ntools_label=工具\nfirst_page.title=转到第一页\nfirst_page_label=转到第一页\nlast_page.title=转到最后一页\nlast_page_label=转到最后一页\npage_rotate_cw.title=顺时针旋转\npage_rotate_cw_label=顺时针旋转\npage_rotate_ccw.title=逆时针旋转\npage_rotate_ccw_label=逆时针旋转\n\ncursor_text_select_tool.title=启用文本选择工具\ncursor_text_select_tool_label=文本选择工具\ncursor_hand_tool.title=启用手形工具\ncursor_hand_tool_label=手形工具\n\nscroll_page.title=使用页面滚动\nscroll_page_label=页面滚动\nscroll_vertical.title=使用垂直滚动\nscroll_vertical_label=垂直滚动\nscroll_horizontal.title=使用水平滚动\nscroll_horizontal_label=水平滚动\nscroll_wrapped.title=使用平铺滚动\nscroll_wrapped_label=平铺滚动\n\nspread_none.title=不加入衔接页\nspread_none_label=单页视图\nspread_odd.title=加入衔接页使奇数页作为起始页\nspread_odd_label=双页视图\nspread_even.title=加入衔接页使偶数页作为起始页\nspread_even_label=书籍视图\n\n# Document properties dialog box\ndocument_properties.title=文档属性…\ndocument_properties_label=文档属性…\ndocument_properties_file_name=文件名:\ndocument_properties_file_size=文件大小:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} KB ({{size_b}} 字节)\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB ({{size_b}} 字节)\ndocument_properties_title=标题:\ndocument_properties_author=作者:\ndocument_properties_subject=主题:\ndocument_properties_keywords=关键词:\ndocument_properties_creation_date=创建日期:\ndocument_properties_modification_date=修改日期:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}}, {{time}}\ndocument_properties_creator=创建者:\ndocument_properties_producer=PDF 生成器：\ndocument_properties_version=PDF 版本:\ndocument_properties_page_count=页数:\ndocument_properties_page_size=页面大小：\ndocument_properties_page_size_unit_inches=英寸\ndocument_properties_page_size_unit_millimeters=毫米\ndocument_properties_page_size_orientation_portrait=纵向\ndocument_properties_page_size_orientation_landscape=横向\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=文本\ndocument_properties_page_size_name_legal=法律\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}（{{orientation}}）\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}（{{name}}，{{orientation}}）\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=快速 Web 视图：\ndocument_properties_linearized_yes=是\ndocument_properties_linearized_no=否\ndocument_properties_close=关闭\n\nprint_progress_message=正在准备打印文档…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=取消\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=切换侧栏\ntoggle_sidebar_notification2.title=切换侧栏（文档所含的大纲/附件/图层）\ntoggle_sidebar_label=切换侧栏\ndocument_outline.title=显示文档大纲（双击展开/折叠所有项）\ndocument_outline_label=文档大纲\nattachments.title=显示附件\nattachments_label=附件\nlayers.title=显示图层（双击即可将所有图层重置为默认状态）\nlayers_label=图层\nthumbs.title=显示缩略图\nthumbs_label=缩略图\ncurrent_outline_item.title=查找当前大纲项目\ncurrent_outline_item_label=当前大纲项目\nfindbar.title=在文档中查找\nfindbar_label=查找\n\nadditional_layers=其他图层\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=第 {{page}} 页\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=第 {{page}} 页\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=页面 {{page}} 的缩略图\n\n# Find panel button title and messages\nfind_input.title=查找\nfind_input.placeholder=在文档中查找…\nfind_previous.title=查找词语上一次出现的位置\nfind_previous_label=上一页\nfind_next.title=查找词语后一次出现的位置\nfind_next_label=下一页\nfind_highlight=全部高亮显示\nfind_match_case_label=区分大小写\nfind_match_diacritics_label=匹配变音符号\nfind_entire_word_label=字词匹配\nfind_reached_top=到达文档开头，从末尾继续\nfind_reached_bottom=到达文档末尾，从开头继续\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]=第 {{current}} 项，共匹配 {{total}} 项\nfind_match_count[two]=第 {{current}} 项，共匹配 {{total}} 项\nfind_match_count[few]=第 {{current}} 项，共匹配 {{total}} 项\nfind_match_count[many]=第 {{current}} 项，共匹配 {{total}} 项\nfind_match_count[other]=第 {{current}} 项，共匹配 {{total}} 项\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=超过 {{limit}} 项匹配\nfind_match_count_limit[one]=超过 {{limit}} 项匹配\nfind_match_count_limit[two]=超过 {{limit}} 项匹配\nfind_match_count_limit[few]=超过 {{limit}} 项匹配\nfind_match_count_limit[many]=超过 {{limit}} 项匹配\nfind_match_count_limit[other]=超过 {{limit}} 项匹配\nfind_not_found=找不到指定词语\n\n# Error panel labels\nerror_more_info=更多信息\nerror_less_info=更少信息\nerror_close=关闭\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (build: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=信息：{{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=堆栈：{{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=文件：{{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=行号：{{line}}\n\n# Predefined zoom values\npage_scale_width=适合页宽\npage_scale_fit=适合页面\npage_scale_auto=自动缩放\npage_scale_actual=实际大小\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=正在载入…\nloading_error=载入 PDF 时发生错误。\ninvalid_file_error=无效或损坏的 PDF 文件。\nmissing_file_error=缺少 PDF 文件。\nunexpected_response_error=意外的服务器响应。\n\nrendering_error=渲染页面时发生错误。\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}}，{{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} 注释]\npassword_label=输入密码以打开此 PDF 文件。\npassword_invalid=密码无效。请重试。\npassword_ok=确定\npassword_cancel=取消\n\nprinting_not_supported=警告：此浏览器尚未完整支持打印功能。\nprinting_not_ready=警告：此 PDF 未完成载入，无法打印。\nweb_fonts_disabled=Web 字体已被禁用：无法使用嵌入的 PDF 字体。\n\n# Editor\neditor_free_text2.title=文本\neditor_free_text2_label=文本\neditor_ink2.title=绘图\neditor_ink2_label=绘图\n\nfree_text2_default_content=开始输入…\n\n# Editor Parameters\neditor_free_text_color=颜色\neditor_free_text_size=字号\neditor_ink_color=颜色\neditor_ink_thickness=粗细\neditor_ink_opacity=不透明度\n\n# Editor aria\neditor_free_text2_aria_label=文本编辑器\neditor_ink2_aria_label=绘图编辑器\neditor_ink_canvas_aria_label=用户创建图像\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/locale/zh-TW/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Main toolbar buttons (tooltips and alt text for images)\nprevious.title=上一頁\nprevious_label=上一頁\nnext.title=下一頁\nnext_label=下一頁\n\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\npage.title=第\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\n# representing the total number of pages in the document.\nof_pages=頁，共 {{pagesCount}} 頁\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\n# will be replaced by a number representing the currently visible page,\n# respectively a number representing the total number of pages in the document.\npage_of_pages=（第 {{pageNumber}} 頁，共 {{pagesCount}} 頁）\n\nzoom_out.title=縮小\nzoom_out_label=縮小\nzoom_in.title=放大\nzoom_in_label=放大\nzoom.title=縮放\npresentation_mode.title=切換至簡報模式\npresentation_mode_label=簡報模式\nopen_file.title=開啟檔案\nopen_file_label=開啟\nprint.title=列印\nprint_label=列印\ndownload.title=下載\ndownload_label=下載\nsave.title=儲存\nsave_label=儲存\nbookmark.title=目前畫面（複製或開啟於新視窗）\nbookmark_label=目前檢視\n\n# Secondary toolbar and context menu\ntools.title=工具\ntools_label=工具\nfirst_page.title=跳到第一頁\nfirst_page_label=跳到第一頁\nlast_page.title=跳到最後一頁\nlast_page_label=跳到最後一頁\npage_rotate_cw.title=順時針旋轉\npage_rotate_cw_label=順時針旋轉\npage_rotate_ccw.title=逆時針旋轉\npage_rotate_ccw_label=逆時針旋轉\n\ncursor_text_select_tool.title=開啟文字選擇工具\ncursor_text_select_tool_label=文字選擇工具\ncursor_hand_tool.title=開啟頁面移動工具\ncursor_hand_tool_label=頁面移動工具\n\nscroll_page.title=使用頁面捲動功能\nscroll_page_label=頁面捲動功能\nscroll_vertical.title=使用垂直捲動版面\nscroll_vertical_label=垂直捲動\nscroll_horizontal.title=使用水平捲動版面\nscroll_horizontal_label=水平捲動\nscroll_wrapped.title=使用多頁捲動版面\nscroll_wrapped_label=多頁捲動\n\nspread_none.title=不要進行跨頁顯示\nspread_none_label=不跨頁\nspread_odd.title=從奇數頁開始跨頁\nspread_odd_label=奇數跨頁\nspread_even.title=從偶數頁開始跨頁\nspread_even_label=偶數跨頁\n\n# Document properties dialog box\ndocument_properties.title=文件內容…\ndocument_properties_label=文件內容…\ndocument_properties_file_name=檔案名稱:\ndocument_properties_file_size=檔案大小:\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\ndocument_properties_kb={{size_kb}} KB（{{size_b}} 位元組）\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\ndocument_properties_mb={{size_mb}} MB（{{size_b}} 位元組）\ndocument_properties_title=標題:\ndocument_properties_author=作者:\ndocument_properties_subject=主旨:\ndocument_properties_keywords=關鍵字:\ndocument_properties_creation_date=建立日期:\ndocument_properties_modification_date=修改日期:\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\n# will be replaced by the creation/modification date, and time, of the PDF file.\ndocument_properties_date_string={{date}} {{time}}\ndocument_properties_creator=建立者:\ndocument_properties_producer=PDF 產生器:\ndocument_properties_version=PDF 版本:\ndocument_properties_page_count=頁數:\ndocument_properties_page_size=頁面大小:\ndocument_properties_page_size_unit_inches=in\ndocument_properties_page_size_unit_millimeters=mm\ndocument_properties_page_size_orientation_portrait=垂直\ndocument_properties_page_size_orientation_landscape=水平\ndocument_properties_page_size_name_a3=A3\ndocument_properties_page_size_name_a4=A4\ndocument_properties_page_size_name_letter=Letter\ndocument_properties_page_size_name_legal=Legal\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement and orientation, of the (current) page.\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}（{{orientation}}）\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}（{{name}}，{{orientation}}）\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\ndocument_properties_linearized=快速 Web 檢視:\ndocument_properties_linearized_yes=是\ndocument_properties_linearized_no=否\ndocument_properties_close=關閉\n\nprint_progress_message=正在準備列印文件…\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\n# a numerical per cent value.\nprint_progress_percent={{progress}}%\nprint_progress_close=取消\n\n# Tooltips and alt text for side panel toolbar buttons\n# (the _label strings are alt text for the buttons, the .title strings are\n# tooltips)\ntoggle_sidebar.title=切換側邊欄\ntoggle_sidebar_notification2.title=切換側邊欄（包含大綱、附件、圖層的文件）\ntoggle_sidebar_label=切換側邊欄\ndocument_outline.title=顯示文件大綱（雙擊展開/摺疊所有項目）\ndocument_outline_label=文件大綱\nattachments.title=顯示附件\nattachments_label=附件\nlayers.title=顯示圖層（滑鼠雙擊即可將所有圖層重設為預設狀態）\nlayers_label=圖層\nthumbs.title=顯示縮圖\nthumbs_label=縮圖\ncurrent_outline_item.title=尋找目前的大綱項目\ncurrent_outline_item_label=目前的大綱項目\nfindbar.title=在文件中尋找\nfindbar_label=尋找\n\nadditional_layers=其他圖層\n# LOCALIZATION NOTE (page_landmark): \"{{page}}\" will be replaced by the page number.\npage_landmark=第 {{page}} 頁\n# Thumbnails panel item (tooltip and alt text for images)\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_title=第 {{page}} 頁\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\n# number.\nthumb_page_canvas=頁 {{page}} 的縮圖\n\n# Find panel button title and messages\nfind_input.title=尋找\nfind_input.placeholder=在文件中搜尋…\nfind_previous.title=尋找文字前次出現的位置\nfind_previous_label=上一個\nfind_next.title=尋找文字下次出現的位置\nfind_next_label=下一個\nfind_highlight=全部強調標示\nfind_match_case_label=區分大小寫\nfind_match_diacritics_label=符合變音符號\nfind_entire_word_label=符合整個字\nfind_reached_top=已搜尋至文件頂端，自底端繼續搜尋\nfind_reached_bottom=已搜尋至文件底端，自頂端繼續搜尋\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\n# [one|two|few|many|other], with [other] as the default value.\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\n# index of the currently active find result, respectively a number representing\n# the total number of matches in the document.\nfind_match_count={[ plural(total) ]}\nfind_match_count[one]=第 {{current}} 筆，共找到 {{total}} 筆\nfind_match_count[two]=第 {{current}} 筆，共找到 {{total}} 筆\nfind_match_count[few]=第 {{current}} 筆，共找到 {{total}} 筆\nfind_match_count[many]=第 {{current}} 筆，共找到 {{total}} 筆\nfind_match_count[other]=第 {{current}} 筆，共找到 {{total}} 筆\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\n# [zero|one|two|few|many|other], with [other] as the default value.\n# \"{{limit}}\" will be replaced by a numerical value.\nfind_match_count_limit={[ plural(limit) ]}\nfind_match_count_limit[zero]=找到超過 {{limit}} 筆\nfind_match_count_limit[one]=找到超過 {{limit}} 筆\nfind_match_count_limit[two]=找到超過 {{limit}} 筆\nfind_match_count_limit[few]=找到超過 {{limit}} 筆\nfind_match_count_limit[many]=找到超過 {{limit}} 筆\nfind_match_count_limit[other]=找到超過 {{limit}} 筆\nfind_not_found=找不到指定文字\n\n# Error panel labels\nerror_more_info=更多資訊\nerror_less_info=更少資訊\nerror_close=關閉\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\n# replaced by the PDF.JS version and build ID.\nerror_version_info=PDF.js v{{version}} (build: {{build}})\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\n# english string describing the error.\nerror_message=訊息: {{message}}\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\n# trace.\nerror_stack=堆疊: {{stack}}\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\nerror_file=檔案: {{file}}\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\nerror_line=行: {{line}}\n\n# Predefined zoom values\npage_scale_width=頁面寬度\npage_scale_fit=縮放至頁面大小\npage_scale_auto=自動縮放\npage_scale_actual=實際大小\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\n# numerical scale value.\npage_scale_percent={{scale}}%\n\n# Loading indicator messages\nloading=載入中…\nloading_error=載入 PDF 時發生錯誤。\ninvalid_file_error=無效或毀損的 PDF 檔案。\nmissing_file_error=找不到 PDF 檔案。\nunexpected_response_error=伺服器回應未預期的內容。\n\nrendering_error=描繪頁面時發生錯誤。\n\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\n# replaced by the modification date, and time, of the annotation.\nannotation_date_string={{date}} {{time}}\n\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\ntext_annotation_type.alt=[{{type}} 註解]\npassword_label=請輸入用來開啟此 PDF 檔案的密碼。\npassword_invalid=密碼不正確，請再試一次。\npassword_ok=確定\npassword_cancel=取消\n\nprinting_not_supported=警告: 此瀏覽器未完整支援列印功能。\nprinting_not_ready=警告: 此 PDF 未完成下載以供列印。\nweb_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。\n\n# Editor\neditor_free_text2.title=文字\neditor_free_text2_label=文字\neditor_ink2.title=繪圖\neditor_ink2_label=繪圖\n\nfree_text2_default_content=開始打字…\n\n# Editor Parameters\neditor_free_text_color=色彩\neditor_free_text_size=大小\neditor_ink_color=色彩\neditor_ink_thickness=線條粗細\neditor_ink_opacity=透​明度\n\n# Editor aria\neditor_free_text2_aria_label=文本編輯器\neditor_ink2_aria_label=圖形編輯器\neditor_ink_canvas_aria_label=使用者建立的圖片\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/pdf-viewer-template.html",
    "content": "<!DOCTYPE html>\n<!--\nCopyright 2012 Mozilla Foundation\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nAdobe CMap resources are covered by their own copyright but the same license:\n\n    Copyright 1990-2015 Adobe Systems Incorporated.\n\nSee https://github.com/adobe-type-tools/cmap-resources\n-->\n<html dir=\"ltr\" mozdisallowselectionprint>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <meta name=\"google\" content=\"notranslate\">\n    <title>VNoteX PDF Viewer</title>\n\n    <!-- VX_STYLES_PLACEHOLDER -->\n\n    <!-- This snippet is used in production (included from viewer.html) -->\n    <link rel=\"resource\" type=\"application/l10n\" href=\"locale/locale.properties\">\n\n    <!-- VX_SCRIPTS_PLACEHOLDER -->\n  </head>\n\n  <body tabindex=\"1\">\n    <div id=\"outerContainer\">\n\n      <div id=\"sidebarContainer\">\n        <div id=\"toolbarSidebar\">\n          <div id=\"toolbarSidebarLeft\">\n            <div id=\"sidebarViewButtons\" class=\"splitToolbarButton toggled\" role=\"radiogroup\">\n              <button id=\"viewThumbnail\" class=\"toolbarButton toggled\" title=\"Show Thumbnails\" tabindex=\"2\" data-l10n-id=\"thumbs\" role=\"radio\" aria-checked=\"true\" aria-controls=\"thumbnailView\">\n                 <span data-l10n-id=\"thumbs_label\">Thumbnails</span>\n              </button>\n              <button id=\"viewOutline\" class=\"toolbarButton\" title=\"Show Document Outline (double-click to expand/collapse all items)\" tabindex=\"3\" data-l10n-id=\"document_outline\" role=\"radio\" aria-checked=\"false\" aria-controls=\"outlineView\">\n                 <span data-l10n-id=\"document_outline_label\">Document Outline</span>\n              </button>\n              <button id=\"viewAttachments\" class=\"toolbarButton\" title=\"Show Attachments\" tabindex=\"4\" data-l10n-id=\"attachments\" role=\"radio\" aria-checked=\"false\" aria-controls=\"attachmentsView\">\n                 <span data-l10n-id=\"attachments_label\">Attachments</span>\n              </button>\n              <button id=\"viewLayers\" class=\"toolbarButton\" title=\"Show Layers (double-click to reset all layers to the default state)\" tabindex=\"5\" data-l10n-id=\"layers\" role=\"radio\" aria-checked=\"false\" aria-controls=\"layersView\">\n                 <span data-l10n-id=\"layers_label\">Layers</span>\n              </button>\n            </div>\n          </div>\n\n          <div id=\"toolbarSidebarRight\">\n            <div id=\"outlineOptionsContainer\" class=\"hidden\">\n              <div class=\"verticalToolbarSeparator\"></div>\n\n              <button id=\"currentOutlineItem\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Find Current Outline Item\" tabindex=\"6\" data-l10n-id=\"current_outline_item\">\n                <span data-l10n-id=\"current_outline_item_label\">Current Outline Item</span>\n              </button>\n            </div>\n          </div>\n        </div>\n        <div id=\"sidebarContent\">\n          <div id=\"thumbnailView\">\n          </div>\n          <div id=\"outlineView\" class=\"hidden\">\n          </div>\n          <div id=\"attachmentsView\" class=\"hidden\">\n          </div>\n          <div id=\"layersView\" class=\"hidden\">\n          </div>\n        </div>\n        <div id=\"sidebarResizer\"></div>\n      </div>  <!-- sidebarContainer -->\n\n      <div id=\"mainContainer\">\n        <div class=\"findbar hidden doorHanger\" id=\"findbar\">\n          <div id=\"findbarInputContainer\">\n            <input id=\"findInput\" class=\"toolbarField\" title=\"Find\" placeholder=\"Find in document…\" tabindex=\"91\" data-l10n-id=\"find_input\" aria-invalid=\"false\">\n            <div class=\"splitToolbarButton\">\n              <button id=\"findPrevious\" class=\"toolbarButton\" title=\"Find the previous occurrence of the phrase\" tabindex=\"92\" data-l10n-id=\"find_previous\">\n                <span data-l10n-id=\"find_previous_label\">Previous</span>\n              </button>\n              <div class=\"splitToolbarButtonSeparator\"></div>\n              <button id=\"findNext\" class=\"toolbarButton\" title=\"Find the next occurrence of the phrase\" tabindex=\"93\" data-l10n-id=\"find_next\">\n                <span data-l10n-id=\"find_next_label\">Next</span>\n              </button>\n            </div>\n          </div>\n\n          <div id=\"findbarOptionsOneContainer\">\n            <input type=\"checkbox\" id=\"findHighlightAll\" class=\"toolbarField\" tabindex=\"94\">\n            <label for=\"findHighlightAll\" class=\"toolbarLabel\" data-l10n-id=\"find_highlight\">Highlight All</label>\n            <input type=\"checkbox\" id=\"findMatchCase\" class=\"toolbarField\" tabindex=\"95\">\n            <label for=\"findMatchCase\" class=\"toolbarLabel\" data-l10n-id=\"find_match_case_label\">Match Case</label>\n          </div>\n          <div id=\"findbarOptionsTwoContainer\">\n            <input type=\"checkbox\" id=\"findMatchDiacritics\" class=\"toolbarField\" tabindex=\"96\">\n            <label for=\"findMatchDiacritics\" class=\"toolbarLabel\" data-l10n-id=\"find_match_diacritics_label\">Match Diacritics</label>\n            <input type=\"checkbox\" id=\"findEntireWord\" class=\"toolbarField\" tabindex=\"97\">\n            <label for=\"findEntireWord\" class=\"toolbarLabel\" data-l10n-id=\"find_entire_word_label\">Whole Words</label>\n          </div>\n\n          <div id=\"findbarMessageContainer\" aria-live=\"polite\">\n            <span id=\"findResultsCount\" class=\"toolbarLabel\"></span>\n            <span id=\"findMsg\" class=\"toolbarLabel\"></span>\n          </div>\n        </div>  <!-- findbar -->\n\n        <div class=\"editorParamsToolbar hidden doorHangerRight\" id=\"editorFreeTextParamsToolbar\">\n          <div class=\"editorParamsToolbarContainer\">\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorFreeTextColor\" class=\"editorParamsLabel\" data-l10n-id=\"editor_free_text_color\">Color</label>\n              <input type=\"color\" id=\"editorFreeTextColor\" class=\"editorParamsColor\" tabindex=\"100\">\n            </div>\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorFreeTextFontSize\" class=\"editorParamsLabel\" data-l10n-id=\"editor_free_text_size\">Size</label>\n              <input type=\"range\" id=\"editorFreeTextFontSize\" class=\"editorParamsSlider\" value=\"10\" min=\"5\" max=\"100\" step=\"1\" tabindex=\"101\">\n            </div>\n          </div>\n        </div>\n\n        <div class=\"editorParamsToolbar hidden doorHangerRight\" id=\"editorInkParamsToolbar\">\n          <div class=\"editorParamsToolbarContainer\">\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorInkColor\" class=\"editorParamsLabel\" data-l10n-id=\"editor_ink_color\">Color</label>\n              <input type=\"color\" id=\"editorInkColor\" class=\"editorParamsColor\" tabindex=\"102\">\n            </div>\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorInkThickness\" class=\"editorParamsLabel\" data-l10n-id=\"editor_ink_thickness\">Thickness</label>\n              <input type=\"range\" id=\"editorInkThickness\" class=\"editorParamsSlider\" value=\"1\" min=\"1\" max=\"20\" step=\"1\" tabindex=\"103\">\n            </div>\n            <div class=\"editorParamsSetter\">\n              <label for=\"editorInkOpacity\" class=\"editorParamsLabel\" data-l10n-id=\"editor_ink_opacity\">Opacity</label>\n              <input type=\"range\" id=\"editorInkOpacity\" class=\"editorParamsSlider\" value=\"100\" min=\"1\" max=\"100\" step=\"1\" tabindex=\"104\">\n            </div>\n          </div>\n        </div>\n\n        <div id=\"secondaryToolbar\" class=\"secondaryToolbar hidden doorHangerRight\">\n          <div id=\"secondaryToolbarButtonContainer\">\n            <button id=\"secondaryOpenFile\" class=\"secondaryToolbarButton visibleLargeView\" title=\"Open File\" tabindex=\"51\" data-l10n-id=\"open_file\">\n              <span data-l10n-id=\"open_file_label\">Open</span>\n            </button>\n\n            <button id=\"secondaryPrint\" class=\"secondaryToolbarButton visibleMediumView\" title=\"Print\" tabindex=\"52\" data-l10n-id=\"print\">\n              <span data-l10n-id=\"print_label\">Print</span>\n            </button>\n\n            <button id=\"secondaryDownload\" class=\"secondaryToolbarButton visibleMediumView\" title=\"Save\" tabindex=\"53\" data-l10n-id=\"save\">\n              <span data-l10n-id=\"save_label\">Save</span>\n            </button>\n\n            <div class=\"horizontalToolbarSeparator visibleLargeView\"></div>\n\n            <button id=\"presentationMode\" class=\"secondaryToolbarButton\" title=\"Switch to Presentation Mode\" tabindex=\"54\" data-l10n-id=\"presentation_mode\">\n              <span data-l10n-id=\"presentation_mode_label\">Presentation Mode</span>\n            </button>\n\n            <a href=\"#\" id=\"viewBookmark\" class=\"secondaryToolbarButton\" title=\"Current view (copy or open in new window)\" tabindex=\"55\" data-l10n-id=\"bookmark\">\n              <span data-l10n-id=\"bookmark_label\">Current View</span>\n            </a>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <button id=\"firstPage\" class=\"secondaryToolbarButton\" title=\"Go to First Page\" tabindex=\"56\" data-l10n-id=\"first_page\">\n              <span data-l10n-id=\"first_page_label\">Go to First Page</span>\n            </button>\n            <button id=\"lastPage\" class=\"secondaryToolbarButton\" title=\"Go to Last Page\" tabindex=\"57\" data-l10n-id=\"last_page\">\n              <span data-l10n-id=\"last_page_label\">Go to Last Page</span>\n            </button>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <button id=\"pageRotateCw\" class=\"secondaryToolbarButton\" title=\"Rotate Clockwise\" tabindex=\"58\" data-l10n-id=\"page_rotate_cw\">\n              <span data-l10n-id=\"page_rotate_cw_label\">Rotate Clockwise</span>\n            </button>\n            <button id=\"pageRotateCcw\" class=\"secondaryToolbarButton\" title=\"Rotate Counterclockwise\" tabindex=\"59\" data-l10n-id=\"page_rotate_ccw\">\n              <span data-l10n-id=\"page_rotate_ccw_label\">Rotate Counterclockwise</span>\n            </button>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <div id=\"cursorToolButtons\" role=\"radiogroup\">\n              <button id=\"cursorSelectTool\" class=\"secondaryToolbarButton toggled\" title=\"Enable Text Selection Tool\" tabindex=\"60\" data-l10n-id=\"cursor_text_select_tool\" role=\"radio\" aria-checked=\"true\">\n                <span data-l10n-id=\"cursor_text_select_tool_label\">Text Selection Tool</span>\n              </button>\n              <button id=\"cursorHandTool\" class=\"secondaryToolbarButton\" title=\"Enable Hand Tool\" tabindex=\"61\" data-l10n-id=\"cursor_hand_tool\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"cursor_hand_tool_label\">Hand Tool</span>\n              </button>\n            </div>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <div id=\"scrollModeButtons\" role=\"radiogroup\">\n              <button id=\"scrollPage\" class=\"secondaryToolbarButton\" title=\"Use Page Scrolling\" tabindex=\"62\" data-l10n-id=\"scroll_page\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"scroll_page_label\">Page Scrolling</span>\n              </button>\n              <button id=\"scrollVertical\" class=\"secondaryToolbarButton toggled\" title=\"Use Vertical Scrolling\" tabindex=\"63\" data-l10n-id=\"scroll_vertical\" role=\"radio\" aria-checked=\"true\">\n                <span data-l10n-id=\"scroll_vertical_label\" >Vertical Scrolling</span>\n              </button>\n              <button id=\"scrollHorizontal\" class=\"secondaryToolbarButton\" title=\"Use Horizontal Scrolling\" tabindex=\"64\" data-l10n-id=\"scroll_horizontal\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"scroll_horizontal_label\">Horizontal Scrolling</span>\n              </button>\n              <button id=\"scrollWrapped\" class=\"secondaryToolbarButton\" title=\"Use Wrapped Scrolling\" tabindex=\"65\" data-l10n-id=\"scroll_wrapped\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"scroll_wrapped_label\">Wrapped Scrolling</span>\n              </button>\n            </div>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <div id=\"spreadModeButtons\" role=\"radiogroup\">\n              <button id=\"spreadNone\" class=\"secondaryToolbarButton toggled\" title=\"Do not join page spreads\" tabindex=\"66\" data-l10n-id=\"spread_none\" role=\"radio\" aria-checked=\"true\">\n                <span data-l10n-id=\"spread_none_label\">No Spreads</span>\n              </button>\n              <button id=\"spreadOdd\" class=\"secondaryToolbarButton\" title=\"Join page spreads starting with odd-numbered pages\" tabindex=\"67\" data-l10n-id=\"spread_odd\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"spread_odd_label\">Odd Spreads</span>\n              </button>\n              <button id=\"spreadEven\" class=\"secondaryToolbarButton\" title=\"Join page spreads starting with even-numbered pages\" tabindex=\"68\" data-l10n-id=\"spread_even\" role=\"radio\" aria-checked=\"false\">\n                <span data-l10n-id=\"spread_even_label\">Even Spreads</span>\n              </button>\n            </div>\n\n            <div class=\"horizontalToolbarSeparator\"></div>\n\n            <button id=\"documentProperties\" class=\"secondaryToolbarButton\" title=\"Document Properties…\" tabindex=\"69\" data-l10n-id=\"document_properties\" aria-controls=\"documentPropertiesDialog\">\n              <span data-l10n-id=\"document_properties_label\">Document Properties…</span>\n            </button>\n          </div>\n        </div>  <!-- secondaryToolbar -->\n\n        <div class=\"toolbar\">\n          <div id=\"toolbarContainer\">\n            <div id=\"toolbarViewer\">\n              <div id=\"toolbarViewerLeft\">\n                <button id=\"sidebarToggle\" class=\"toolbarButton\" title=\"Toggle Sidebar\" tabindex=\"11\" data-l10n-id=\"toggle_sidebar\" aria-expanded=\"false\" aria-controls=\"sidebarContainer\">\n                  <span data-l10n-id=\"toggle_sidebar_label\">Toggle Sidebar</span>\n                </button>\n                <div class=\"toolbarButtonSpacer\"></div>\n                <button id=\"viewFind\" class=\"toolbarButton\" title=\"Find in Document\" tabindex=\"12\" data-l10n-id=\"findbar\" aria-expanded=\"false\" aria-controls=\"findbar\">\n                  <span data-l10n-id=\"findbar_label\">Find</span>\n                </button>\n                <div class=\"splitToolbarButton hiddenSmallView\">\n                  <button class=\"toolbarButton\" title=\"Previous Page\" id=\"previous\" tabindex=\"13\" data-l10n-id=\"previous\">\n                    <span data-l10n-id=\"previous_label\">Previous</span>\n                  </button>\n                  <div class=\"splitToolbarButtonSeparator\"></div>\n                  <button class=\"toolbarButton\" title=\"Next Page\" id=\"next\" tabindex=\"14\" data-l10n-id=\"next\">\n                    <span data-l10n-id=\"next_label\">Next</span>\n                  </button>\n                </div>\n                <input type=\"number\" id=\"pageNumber\" class=\"toolbarField\" title=\"Page\" value=\"1\" min=\"1\" tabindex=\"15\" data-l10n-id=\"page\" autocomplete=\"off\">\n                <span id=\"numPages\" class=\"toolbarLabel\"></span>\n              </div>\n              <div id=\"toolbarViewerRight\">\n                <button id=\"openFile\" class=\"toolbarButton hiddenLargeView\" title=\"Open File\" tabindex=\"31\" data-l10n-id=\"open_file\">\n                  <span data-l10n-id=\"open_file_label\">Open</span>\n                </button>\n\n                <button id=\"print\" class=\"toolbarButton hiddenMediumView\" title=\"Print\" tabindex=\"32\" data-l10n-id=\"print\">\n                  <span data-l10n-id=\"print_label\">Print</span>\n                </button>\n\n                <button id=\"download\" class=\"toolbarButton hiddenMediumView\" title=\"Save\" tabindex=\"33\" data-l10n-id=\"save\">\n                  <span data-l10n-id=\"save_label\">Save</span>\n                </button>\n\n                <div class=\"verticalToolbarSeparator hiddenMediumView\"></div>\n\n                <div id=\"editorModeButtons\" class=\"splitToolbarButton toggled\" role=\"radiogroup\">\n                  <button id=\"editorFreeText\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Text\" role=\"radio\" aria-checked=\"false\" tabindex=\"34\" data-l10n-id=\"editor_free_text2\">\n                    <span data-l10n-id=\"editor_free_text2_label\">Text</span>\n                  </button>\n                  <button id=\"editorInk\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Draw\" role=\"radio\" aria-checked=\"false\" tabindex=\"35\" data-l10n-id=\"editor_ink2\">\n                    <span data-l10n-id=\"editor_ink2_label\">Draw</span>\n                  </button>\n                </div>\n\n                <div id=\"editorModeSeparator\" class=\"verticalToolbarSeparator\"></div>\n\n                <button id=\"secondaryToolbarToggle\" class=\"toolbarButton\" title=\"Tools\" tabindex=\"48\" data-l10n-id=\"tools\" aria-expanded=\"false\" aria-controls=\"secondaryToolbar\">\n                  <span data-l10n-id=\"tools_label\">Tools</span>\n                </button>\n              </div>\n              <div id=\"toolbarViewerMiddle\">\n                <div class=\"splitToolbarButton\">\n                  <button id=\"zoomOut\" class=\"toolbarButton\" title=\"Zoom Out\" tabindex=\"21\" data-l10n-id=\"zoom_out\">\n                    <span data-l10n-id=\"zoom_out_label\">Zoom Out</span>\n                  </button>\n                  <div class=\"splitToolbarButtonSeparator\"></div>\n                  <button id=\"zoomIn\" class=\"toolbarButton\" title=\"Zoom In\" tabindex=\"22\" data-l10n-id=\"zoom_in\">\n                    <span data-l10n-id=\"zoom_in_label\">Zoom In</span>\n                   </button>\n                </div>\n                <span id=\"scaleSelectContainer\" class=\"dropdownToolbarButton\">\n                  <select id=\"scaleSelect\" title=\"Zoom\" tabindex=\"23\" data-l10n-id=\"zoom\">\n                    <option id=\"pageAutoOption\" title=\"\" value=\"auto\" selected=\"selected\" data-l10n-id=\"page_scale_auto\">Automatic Zoom</option>\n                    <option id=\"pageActualOption\" title=\"\" value=\"page-actual\" data-l10n-id=\"page_scale_actual\">Actual Size</option>\n                    <option id=\"pageFitOption\" title=\"\" value=\"page-fit\" data-l10n-id=\"page_scale_fit\">Page Fit</option>\n                    <option id=\"pageWidthOption\" title=\"\" value=\"page-width\" data-l10n-id=\"page_scale_width\">Page Width</option>\n                    <option id=\"customScaleOption\" title=\"\" value=\"custom\" disabled=\"disabled\" hidden=\"true\"></option>\n                    <option title=\"\" value=\"0.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 50 }'>50%</option>\n                    <option title=\"\" value=\"0.75\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 75 }'>75%</option>\n                    <option title=\"\" value=\"1\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 100 }'>100%</option>\n                    <option title=\"\" value=\"1.25\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 125 }'>125%</option>\n                    <option title=\"\" value=\"1.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 150 }'>150%</option>\n                    <option title=\"\" value=\"2\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 200 }'>200%</option>\n                    <option title=\"\" value=\"3\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 300 }'>300%</option>\n                    <option title=\"\" value=\"4\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 400 }'>400%</option>\n                  </select>\n                </span>\n              </div>\n            </div>\n            <div id=\"loadingBar\">\n              <div class=\"progress\">\n                <div class=\"glimmer\">\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div id=\"viewerContainer\" tabindex=\"0\">\n          <div id=\"viewer\" class=\"pdfViewer\"></div>\n        </div>\n      </div> <!-- mainContainer -->\n\n      <div id=\"dialogContainer\">\n        <dialog id=\"passwordDialog\">\n          <div class=\"row\">\n            <label for=\"password\" id=\"passwordText\" data-l10n-id=\"password_label\">Enter the password to open this PDF file:</label>\n          </div>\n          <div class=\"row\">\n            <input type=\"password\" id=\"password\" class=\"toolbarField\">\n          </div>\n          <div class=\"buttonRow\">\n            <button id=\"passwordCancel\" class=\"dialogButton\"><span data-l10n-id=\"password_cancel\">Cancel</span></button>\n            <button id=\"passwordSubmit\" class=\"dialogButton\"><span data-l10n-id=\"password_ok\">OK</span></button>\n          </div>\n        </dialog>\n        <dialog id=\"documentPropertiesDialog\">\n          <div class=\"row\">\n            <span id=\"fileNameLabel\" data-l10n-id=\"document_properties_file_name\">File name:</span>\n            <p id=\"fileNameField\" aria-labelledby=\"fileNameLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"fileSizeLabel\" data-l10n-id=\"document_properties_file_size\">File size:</span>\n            <p id=\"fileSizeField\" aria-labelledby=\"fileSizeLabel\">-</p>\n          </div>\n          <div class=\"separator\"></div>\n          <div class=\"row\">\n            <span id=\"titleLabel\" data-l10n-id=\"document_properties_title\">Title:</span>\n            <p id=\"titleField\" aria-labelledby=\"titleLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"authorLabel\" data-l10n-id=\"document_properties_author\">Author:</span>\n            <p id=\"authorField\" aria-labelledby=\"authorLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"subjectLabel\" data-l10n-id=\"document_properties_subject\">Subject:</span>\n            <p id=\"subjectField\" aria-labelledby=\"subjectLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"keywordsLabel\" data-l10n-id=\"document_properties_keywords\">Keywords:</span>\n            <p id=\"keywordsField\" aria-labelledby=\"keywordsLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"creationDateLabel\" data-l10n-id=\"document_properties_creation_date\">Creation Date:</span>\n            <p id=\"creationDateField\" aria-labelledby=\"creationDateLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"modificationDateLabel\" data-l10n-id=\"document_properties_modification_date\">Modification Date:</span>\n            <p id=\"modificationDateField\" aria-labelledby=\"modificationDateLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"creatorLabel\" data-l10n-id=\"document_properties_creator\">Creator:</span>\n            <p id=\"creatorField\" aria-labelledby=\"creatorLabel\">-</p>\n          </div>\n          <div class=\"separator\"></div>\n          <div class=\"row\">\n            <span id=\"producerLabel\" data-l10n-id=\"document_properties_producer\">PDF Producer:</span>\n            <p id=\"producerField\" aria-labelledby=\"producerLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"versionLabel\" data-l10n-id=\"document_properties_version\">PDF Version:</span>\n            <p id=\"versionField\" aria-labelledby=\"versionLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"pageCountLabel\" data-l10n-id=\"document_properties_page_count\">Page Count:</span>\n            <p id=\"pageCountField\" aria-labelledby=\"pageCountLabel\">-</p>\n          </div>\n          <div class=\"row\">\n            <span id=\"pageSizeLabel\" data-l10n-id=\"document_properties_page_size\">Page Size:</span>\n            <p id=\"pageSizeField\" aria-labelledby=\"pageSizeLabel\">-</p>\n          </div>\n          <div class=\"separator\"></div>\n          <div class=\"row\">\n            <span id=\"linearizedLabel\" data-l10n-id=\"document_properties_linearized\">Fast Web View:</span>\n            <p id=\"linearizedField\" aria-labelledby=\"linearizedLabel\">-</p>\n          </div>\n          <div class=\"buttonRow\">\n            <button id=\"documentPropertiesClose\" class=\"dialogButton\"><span data-l10n-id=\"document_properties_close\">Close</span></button>\n          </div>\n        </dialog>\n        <dialog id=\"printServiceDialog\" style=\"min-width: 200px;\">\n          <div class=\"row\">\n            <span data-l10n-id=\"print_progress_message\">Preparing document for printing…</span>\n          </div>\n          <div class=\"row\">\n            <progress value=\"0\" max=\"100\"></progress>\n            <span data-l10n-id=\"print_progress_percent\" data-l10n-args='{ \"progress\": 0 }' class=\"relative-progress\">0%</span>\n          </div>\n          <div class=\"buttonRow\">\n            <button id=\"printCancel\" class=\"dialogButton\"><span data-l10n-id=\"print_progress_close\">Cancel</span></button>\n          </div>\n        </dialog>\n      </div>  <!-- dialogContainer -->\n\n    </div> <!-- outerContainer -->\n    <div id=\"printContainer\"></div>\n\n    <input type=\"file\" id=\"fileInput\" class=\"hidden\">\n  </body>\n</html>\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/viewer.css",
    "content": "/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n.textLayer {\n  position: absolute;\n  text-align: initial;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  overflow: hidden;\n  opacity: 0.25;\n  line-height: 1;\n  -webkit-text-size-adjust: none;\n     -moz-text-size-adjust: none;\n          text-size-adjust: none;\n  forced-color-adjust: none;\n}\n\n.textLayer span,\n.textLayer br {\n  color: transparent;\n  position: absolute;\n  white-space: pre;\n  cursor: text;\n  transform-origin: 0% 0%;\n}\n\n/* Only necessary in Google Chrome, see issue 14205, and most unfortunately\n * the problem doesn't show up in \"text\" reference tests. */\n.textLayer span.markedContent {\n  top: 0;\n  height: 0;\n}\n\n.textLayer .highlight {\n  margin: -1px;\n  padding: 1px;\n  background-color: rgba(180, 0, 170, 1);\n  border-radius: 4px;\n}\n\n.textLayer .highlight.appended {\n  position: initial;\n}\n\n.textLayer .highlight.begin {\n  border-radius: 4px 0 0 4px;\n}\n\n.textLayer .highlight.end {\n  border-radius: 0 4px 4px 0;\n}\n\n.textLayer .highlight.middle {\n  border-radius: 0;\n}\n\n.textLayer .highlight.selected {\n  background-color: rgba(0, 100, 0, 1);\n}\n\n.textLayer ::-moz-selection {\n  background: blue;\n  background: AccentColor;\n}\n\n.textLayer ::selection {\n  background: blue;\n  background: AccentColor;\n}\n\n/* Avoids https://github.com/mozilla/pdf.js/issues/13840 in Chrome */\n.textLayer br::-moz-selection {\n  background: transparent;\n}\n.textLayer br::selection {\n  background: transparent;\n}\n\n.textLayer .endOfContent {\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 100%;\n  right: 0;\n  bottom: 0;\n  z-index: -1;\n  cursor: default;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n.textLayer .endOfContent.active {\n  top: 0;\n}\n\n\n:root {\n  --annotation-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n  --input-focus-border-color: Highlight;\n  --input-focus-outline: 1px solid Canvas;\n  --input-unfocused-border-color: transparent;\n  --input-disabled-border-color: transparent;\n  --input-hover-border-color: black;\n}\n\n@media (forced-colors: active) {\n  :root {\n    --input-focus-border-color: CanvasText;\n    --input-unfocused-border-color: ActiveText;\n    --input-disabled-border-color: GrayText;\n    --input-hover-border-color: Highlight;\n  }\n  .annotationLayer .textWidgetAnnotation input:required,\n  .annotationLayer .textWidgetAnnotation textarea:required,\n  .annotationLayer .choiceWidgetAnnotation select:required,\n  .annotationLayer .buttonWidgetAnnotation.checkBox input:required,\n  .annotationLayer .buttonWidgetAnnotation.radioButton input:required {\n    outline: 1.5px solid selectedItem;\n  }\n}\n\n.annotationLayer {\n  position: absolute;\n  top: 0;\n  left: 0;\n  pointer-events: none;\n  transform-origin: 0 0;\n}\n\n.annotationLayer section {\n  position: absolute;\n  text-align: initial;\n  pointer-events: auto;\n  box-sizing: border-box;\n  transform-origin: 0 0;\n}\n\n.annotationLayer .linkAnnotation > a,\n.annotationLayer .buttonWidgetAnnotation.pushButton > a {\n  position: absolute;\n  font-size: 1em;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.annotationLayer .buttonWidgetAnnotation.pushButton > canvas {\n  width: 100%;\n  height: 100%;\n}\n\n.annotationLayer .linkAnnotation > a:hover,\n.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {\n  opacity: 0.2;\n  background: rgba(255, 255, 0, 1);\n  box-shadow: 0 2px 10px rgba(255, 255, 0, 1);\n}\n\n.annotationLayer .textAnnotation img {\n  position: absolute;\n  cursor: pointer;\n  width: 100%;\n  height: 100%;\n}\n\n.annotationLayer .textWidgetAnnotation input,\n.annotationLayer .textWidgetAnnotation textarea,\n.annotationLayer .choiceWidgetAnnotation select,\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n  background-image: var(--annotation-unfocused-field-background);\n  border: 2px solid var(--input-unfocused-border-color);\n  box-sizing: border-box;\n  font: calc(9px * var(--scale-factor)) sans-serif;\n  height: 100%;\n  margin: 0;\n  vertical-align: top;\n  width: 100%;\n}\n\n.annotationLayer .textWidgetAnnotation input:required,\n.annotationLayer .textWidgetAnnotation textarea:required,\n.annotationLayer .choiceWidgetAnnotation select:required,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:required,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:required {\n  outline: 1.5px solid red;\n}\n\n.annotationLayer .choiceWidgetAnnotation select option {\n  padding: 0;\n}\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n  border-radius: 50%;\n}\n\n.annotationLayer .textWidgetAnnotation textarea {\n  resize: none;\n}\n\n.annotationLayer .textWidgetAnnotation input[disabled],\n.annotationLayer .textWidgetAnnotation textarea[disabled],\n.annotationLayer .choiceWidgetAnnotation select[disabled],\n.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],\n.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] {\n  background: none;\n  border: 2px solid var(--input-disabled-border-color);\n  cursor: not-allowed;\n}\n\n.annotationLayer .textWidgetAnnotation input:hover,\n.annotationLayer .textWidgetAnnotation textarea:hover,\n.annotationLayer .choiceWidgetAnnotation select:hover,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:hover {\n  border: 2px solid var(--input-hover-border-color);\n}\n.annotationLayer .textWidgetAnnotation input:hover,\n.annotationLayer .textWidgetAnnotation textarea:hover,\n.annotationLayer .choiceWidgetAnnotation select:hover,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:hover {\n  border-radius: 2px;\n}\n\n.annotationLayer .textWidgetAnnotation input:focus,\n.annotationLayer .textWidgetAnnotation textarea:focus,\n.annotationLayer .choiceWidgetAnnotation select:focus {\n  background: none;\n  border: 2px solid var(--input-focus-border-color);\n  border-radius: 2px;\n  outline: var(--input-focus-outline);\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox :focus,\n.annotationLayer .buttonWidgetAnnotation.radioButton :focus {\n  background-image: none;\n  background-color: transparent;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox :focus {\n  border: 2px solid var(--input-focus-border-color);\n  border-radius: 2px;\n  outline: var(--input-focus-outline);\n}\n\n.annotationLayer .buttonWidgetAnnotation.radioButton :focus {\n  border: 2px solid var(--input-focus-border-color);\n  outline: var(--input-focus-outline);\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\n  background-color: CanvasText;\n  content: \"\";\n  display: block;\n  position: absolute;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\n  height: 80%;\n  left: 45%;\n  width: 1px;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {\n  transform: rotate(45deg);\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\n  transform: rotate(-45deg);\n}\n\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\n  border-radius: 50%;\n  height: 50%;\n  left: 30%;\n  top: 20%;\n  width: 50%;\n}\n\n.annotationLayer .textWidgetAnnotation input.comb {\n  font-family: monospace;\n  padding-left: 2px;\n  padding-right: 0;\n}\n\n.annotationLayer .textWidgetAnnotation input.comb:focus {\n  /*\n   * Letter spacing is placed on the right side of each character. Hence, the\n   * letter spacing of the last character may be placed outside the visible\n   * area, causing horizontal scrolling. We avoid this by extending the width\n   * when the element has focus and revert this when it loses focus.\n   */\n  width: 103%;\n}\n\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n}\n\n.annotationLayer .popupTriggerArea {\n  height: 100%;\n  width: 100%;\n}\n\n.annotationLayer .popupWrapper {\n  position: absolute;\n  font-size: calc(9px * var(--scale-factor));\n  width: 100%;\n  min-width: calc(180px * var(--scale-factor));\n  pointer-events: none;\n}\n\n.annotationLayer .popup {\n  position: absolute;\n  max-width: calc(180px * var(--scale-factor));\n  background-color: rgba(255, 255, 153, 1);\n  box-shadow: 0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor))\n    rgba(136, 136, 136, 1);\n  border-radius: calc(2px * var(--scale-factor));\n  padding: calc(6px * var(--scale-factor));\n  margin-left: calc(5px * var(--scale-factor));\n  cursor: pointer;\n  font: message-box;\n  white-space: normal;\n  word-wrap: break-word;\n  pointer-events: auto;\n}\n\n.annotationLayer .popup > * {\n  font-size: calc(9px * var(--scale-factor));\n}\n\n.annotationLayer .popup h1 {\n  display: inline-block;\n}\n\n.annotationLayer .popupDate {\n  display: inline-block;\n  margin-left: calc(5px * var(--scale-factor));\n}\n\n.annotationLayer .popupContent {\n  border-top: 1px solid rgba(51, 51, 51, 1);\n  margin-top: calc(2px * var(--scale-factor));\n  padding-top: calc(2px * var(--scale-factor));\n}\n\n.annotationLayer .richText > * {\n  white-space: pre-wrap;\n  font-size: calc(9px * var(--scale-factor));\n}\n\n.annotationLayer .highlightAnnotation,\n.annotationLayer .underlineAnnotation,\n.annotationLayer .squigglyAnnotation,\n.annotationLayer .strikeoutAnnotation,\n.annotationLayer .freeTextAnnotation,\n.annotationLayer .lineAnnotation svg line,\n.annotationLayer .squareAnnotation svg rect,\n.annotationLayer .circleAnnotation svg ellipse,\n.annotationLayer .polylineAnnotation svg polyline,\n.annotationLayer .polygonAnnotation svg polygon,\n.annotationLayer .caretAnnotation,\n.annotationLayer .inkAnnotation svg polyline,\n.annotationLayer .stampAnnotation,\n.annotationLayer .fileAttachmentAnnotation {\n  cursor: pointer;\n}\n\n.annotationLayer section svg {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n}\n\n.annotationLayer .annotationTextContent {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  color: transparent;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  pointer-events: none;\n}\n\n.annotationLayer .annotationTextContent span {\n  width: 100%;\n  display: inline-block;\n}\n\n\n:root {\n  --xfa-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");\n  --xfa-focus-outline: auto;\n}\n\n@media (forced-colors: active) {\n  :root {\n    --xfa-focus-outline: 2px solid CanvasText;\n  }\n  .xfaLayer *:required {\n    outline: 1.5px solid selectedItem;\n  }\n}\n\n.xfaLayer {\n  background-color: transparent;\n}\n\n.xfaLayer .highlight {\n  margin: -1px;\n  padding: 1px;\n  background-color: rgba(239, 203, 237, 1);\n  border-radius: 4px;\n}\n\n.xfaLayer .highlight.appended {\n  position: initial;\n}\n\n.xfaLayer .highlight.begin {\n  border-radius: 4px 0 0 4px;\n}\n\n.xfaLayer .highlight.end {\n  border-radius: 0 4px 4px 0;\n}\n\n.xfaLayer .highlight.middle {\n  border-radius: 0;\n}\n\n.xfaLayer .highlight.selected {\n  background-color: rgba(203, 223, 203, 1);\n}\n\n.xfaPage {\n  overflow: hidden;\n  position: relative;\n}\n\n.xfaContentarea {\n  position: absolute;\n}\n\n.xfaPrintOnly {\n  display: none;\n}\n\n.xfaLayer {\n  position: absolute;\n  text-align: initial;\n  top: 0;\n  left: 0;\n  transform-origin: 0 0;\n  line-height: 1.2;\n}\n\n.xfaLayer * {\n  color: inherit;\n  font: inherit;\n  font-style: inherit;\n  font-weight: inherit;\n  font-kerning: inherit;\n  letter-spacing: -0.01px;\n  text-align: inherit;\n  text-decoration: inherit;\n  box-sizing: border-box;\n  background-color: transparent;\n  padding: 0;\n  margin: 0;\n  pointer-events: auto;\n  line-height: inherit;\n}\n\n.xfaLayer *:required {\n  outline: 1.5px solid red;\n}\n\n.xfaLayer div {\n  pointer-events: none;\n}\n\n.xfaLayer svg {\n  pointer-events: none;\n}\n\n.xfaLayer svg * {\n  pointer-events: none;\n}\n\n.xfaLayer a {\n  color: blue;\n}\n\n.xfaRich li {\n  margin-left: 3em;\n}\n\n.xfaFont {\n  color: black;\n  font-weight: normal;\n  font-kerning: none;\n  font-size: 10px;\n  font-style: normal;\n  letter-spacing: 0;\n  text-decoration: none;\n  vertical-align: 0;\n}\n\n.xfaCaption {\n  overflow: hidden;\n  flex: 0 0 auto;\n}\n\n.xfaCaptionForCheckButton {\n  overflow: hidden;\n  flex: 1 1 auto;\n}\n\n.xfaLabel {\n  height: 100%;\n  width: 100%;\n}\n\n.xfaLeft {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n\n.xfaRight {\n  display: flex;\n  flex-direction: row-reverse;\n  align-items: center;\n}\n\n.xfaLeft > .xfaCaption,\n.xfaLeft > .xfaCaptionForCheckButton,\n.xfaRight > .xfaCaption,\n.xfaRight > .xfaCaptionForCheckButton {\n  max-height: 100%;\n}\n\n.xfaTop {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n}\n\n.xfaBottom {\n  display: flex;\n  flex-direction: column-reverse;\n  align-items: flex-start;\n}\n\n.xfaTop > .xfaCaption,\n.xfaTop > .xfaCaptionForCheckButton,\n.xfaBottom > .xfaCaption,\n.xfaBottom > .xfaCaptionForCheckButton {\n  width: 100%;\n}\n\n.xfaBorder {\n  background-color: transparent;\n  position: absolute;\n  pointer-events: none;\n}\n\n.xfaWrapped {\n  width: 100%;\n  height: 100%;\n}\n\n.xfaTextfield:focus,\n.xfaSelect:focus {\n  background-image: none;\n  background-color: transparent;\n  outline: var(--xfa-focus-outline);\n  outline-offset: -1px;\n}\n\n.xfaCheckbox:focus,\n.xfaRadio:focus {\n  outline: var(--xfa-focus-outline);\n}\n\n.xfaTextfield,\n.xfaSelect {\n  height: 100%;\n  width: 100%;\n  flex: 1 1 auto;\n  border: none;\n  resize: none;\n  background-image: var(--xfa-unfocused-field-background);\n}\n\n.xfaSelect {\n  padding-left: 2px;\n  padding-right: 2px;\n  padding-inline: 2px;\n}\n\n.xfaTop > .xfaTextfield,\n.xfaTop > .xfaSelect,\n.xfaBottom > .xfaTextfield,\n.xfaBottom > .xfaSelect {\n  flex: 0 1 auto;\n}\n\n.xfaButton {\n  cursor: pointer;\n  width: 100%;\n  height: 100%;\n  border: none;\n  text-align: center;\n}\n\n.xfaLink {\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.xfaCheckbox,\n.xfaRadio {\n  width: 100%;\n  height: 100%;\n  flex: 0 0 auto;\n  border: none;\n}\n\n.xfaRich {\n  white-space: pre-wrap;\n  width: 100%;\n  height: 100%;\n}\n\n.xfaImage {\n  -o-object-position: left top;\n     object-position: left top;\n  -o-object-fit: contain;\n     object-fit: contain;\n  width: 100%;\n  height: 100%;\n}\n\n.xfaLrTb,\n.xfaRlTb,\n.xfaTb {\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n\n.xfaLr {\n  display: flex;\n  flex-direction: row;\n  align-items: stretch;\n}\n\n.xfaRl {\n  display: flex;\n  flex-direction: row-reverse;\n  align-items: stretch;\n}\n\n.xfaTb > div {\n  justify-content: left;\n}\n\n.xfaPosition {\n  position: relative;\n}\n\n.xfaArea {\n  position: relative;\n}\n\n.xfaValignMiddle {\n  display: flex;\n  align-items: center;\n}\n\n.xfaTable {\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n\n.xfaTable .xfaRow {\n  display: flex;\n  flex-direction: row;\n  align-items: stretch;\n}\n\n.xfaTable .xfaRlRow {\n  display: flex;\n  flex-direction: row-reverse;\n  align-items: stretch;\n  flex: 1;\n}\n\n.xfaTable .xfaRlRow > div {\n  flex: 1;\n}\n\n.xfaNonInteractive input,\n.xfaNonInteractive textarea,\n.xfaDisabled input,\n.xfaDisabled textarea,\n.xfaReadOnly input,\n.xfaReadOnly textarea {\n  background: initial;\n}\n\n@media print {\n  .xfaTextfield,\n  .xfaSelect {\n    background: transparent;\n  }\n\n  .xfaSelect {\n    -webkit-appearance: none;\n       -moz-appearance: none;\n            appearance: none;\n    text-indent: 1px;\n    text-overflow: \"\";\n  }\n}\n\n\n:root {\n  --focus-outline: solid 2px blue;\n  --hover-outline: dashed 2px blue;\n  --freetext-line-height: 1.35;\n  --freetext-padding: 2px;\n  --editorFreeText-editing-cursor: text;\n  --editorInk-editing-cursor: url(images/cursor-editorInk.svg) 0 16, pointer;\n}\n\n@media (forced-colors: active) {\n  :root {\n    --focus-outline: solid 3px ButtonText;\n    --hover-outline: dashed 3px ButtonText;\n  }\n}\n\n[data-editor-rotation=\"90\"] {\n  transform: rotate(90deg);\n}\n[data-editor-rotation=\"180\"] {\n  transform: rotate(180deg);\n}\n[data-editor-rotation=\"270\"] {\n  transform: rotate(270deg);\n}\n\n.annotationEditorLayer {\n  background: transparent;\n  position: absolute;\n  top: 0;\n  left: 0;\n  font-size: calc(100px * var(--scale-factor));\n  transform-origin: 0 0;\n  cursor: auto;\n  z-index: 20000;\n}\n\n.annotationEditorLayer.freeTextEditing {\n  cursor: var(--editorFreeText-editing-cursor);\n}\n\n.annotationEditorLayer.inkEditing {\n  cursor: var(--editorInk-editing-cursor);\n}\n\n.annotationEditorLayer .selectedEditor {\n  outline: var(--focus-outline);\n  resize: none;\n}\n\n.annotationEditorLayer .freeTextEditor {\n  position: absolute;\n  background: transparent;\n  border-radius: 3px;\n  padding: calc(var(--freetext-padding) * var(--scale-factor));\n  resize: none;\n  width: auto;\n  height: auto;\n  z-index: 1;\n  transform-origin: 0 0;\n  touch-action: none;\n  cursor: auto;\n}\n\n.annotationEditorLayer .freeTextEditor .internal {\n  background: transparent;\n  border: none;\n  top: 0;\n  left: 0;\n  overflow: visible;\n  white-space: nowrap;\n  resize: none;\n  font: 10px sans-serif;\n  line-height: var(--freetext-line-height);\n}\n\n.annotationEditorLayer .freeTextEditor .overlay {\n  position: absolute;\n  display: none;\n  background: transparent;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.annotationEditorLayer .freeTextEditor .overlay.enabled {\n  display: block;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:empty::before {\n  content: attr(default-content);\n  color: gray;\n}\n\n.annotationEditorLayer .freeTextEditor .internal:focus {\n  outline: none;\n}\n\n.annotationEditorLayer .inkEditor.disabled {\n  resize: none;\n}\n\n.annotationEditorLayer .inkEditor.disabled.selectedEditor {\n  resize: horizontal;\n}\n\n.annotationEditorLayer .freeTextEditor:hover:not(.selectedEditor),\n.annotationEditorLayer .inkEditor:hover:not(.selectedEditor) {\n  outline: var(--hover-outline);\n}\n\n.annotationEditorLayer .inkEditor {\n  position: absolute;\n  background: transparent;\n  border-radius: 3px;\n  overflow: auto;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  transform-origin: 0 0;\n  cursor: auto;\n}\n\n.annotationEditorLayer .inkEditor.editing {\n  resize: none;\n  cursor: inherit;\n}\n\n.annotationEditorLayer .inkEditor .inkEditorCanvas {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  touch-action: none;\n}\n\n:root {\n  --viewer-container-height: 0;\n  --pdfViewer-padding-bottom: 0;\n  --page-margin: 1px auto -8px;\n  --page-border: 9px solid transparent;\n  --page-border-image: url(images/shadow.png) 9 9 repeat;\n  --spreadHorizontalWrapped-margin-LR: -3.5px;\n  --scale-factor: 1;\n}\n\n@media screen and (forced-colors: active) {\n  :root {\n    --pdfViewer-padding-bottom: 9px;\n    --page-margin: 8px auto -1px;\n    --page-border: 1px solid CanvasText;\n    --page-border-image: none;\n    --spreadHorizontalWrapped-margin-LR: 3.5px;\n  }\n}\n\n[data-main-rotation=\"90\"] {\n  transform: rotate(90deg) translateY(-100%);\n}\n[data-main-rotation=\"180\"] {\n  transform: rotate(180deg) translate(-100%, -100%);\n}\n[data-main-rotation=\"270\"] {\n  transform: rotate(270deg) translateX(-100%);\n}\n\n.pdfViewer {\n  padding-bottom: var(--pdfViewer-padding-bottom);\n}\n\n.pdfViewer .canvasWrapper {\n  overflow: hidden;\n}\n\n.pdfViewer .page {\n  direction: ltr;\n  width: 816px;\n  height: 1056px;\n  margin: var(--page-margin);\n  position: relative;\n  overflow: visible;\n  border: var(--page-border);\n  -o-border-image: var(--page-border-image);\n     border-image: var(--page-border-image);\n  background-clip: content-box;\n  background-color: rgba(255, 255, 255, 1);\n}\n\n.pdfViewer .dummyPage {\n  position: relative;\n  width: 0;\n  height: var(--viewer-container-height);\n}\n\n.pdfViewer.removePageBorders .page {\n  margin: 0 auto 10px;\n  border: none;\n}\n\n.pdfViewer.singlePageView {\n  display: inline-block;\n}\n\n.pdfViewer.singlePageView .page {\n  margin: 0;\n  border: none;\n}\n\n.pdfViewer.scrollHorizontal,\n.pdfViewer.scrollWrapped,\n.spread {\n  margin-left: 3.5px;\n  margin-right: 3.5px;\n  text-align: center;\n}\n\n.pdfViewer.scrollHorizontal,\n.spread {\n  white-space: nowrap;\n}\n\n.pdfViewer.removePageBorders,\n.pdfViewer.scrollHorizontal .spread,\n.pdfViewer.scrollWrapped .spread {\n  margin-left: 0;\n  margin-right: 0;\n}\n\n.spread .page,\n.spread .dummyPage,\n.pdfViewer.scrollHorizontal .page,\n.pdfViewer.scrollWrapped .page,\n.pdfViewer.scrollHorizontal .spread,\n.pdfViewer.scrollWrapped .spread {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.spread .page,\n.pdfViewer.scrollHorizontal .page,\n.pdfViewer.scrollWrapped .page {\n  margin-left: var(--spreadHorizontalWrapped-margin-LR);\n  margin-right: var(--spreadHorizontalWrapped-margin-LR);\n}\n\n.pdfViewer.removePageBorders .spread .page,\n.pdfViewer.removePageBorders.scrollHorizontal .page,\n.pdfViewer.removePageBorders.scrollWrapped .page {\n  margin-left: 5px;\n  margin-right: 5px;\n}\n\n.pdfViewer .page canvas {\n  margin: 0;\n  display: block;\n}\n\n.pdfViewer .page canvas[hidden] {\n  display: none;\n}\n\n.pdfViewer .page .loadingIcon {\n  position: absolute;\n  display: block;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  background: url(\"images/loading-icon.gif\") center no-repeat;\n}\n.pdfViewer .page .loadingIcon.notVisible {\n  background: none;\n}\n\n.pdfViewer.enablePermissions .textLayer span {\n  -webkit-user-select: none !important;\n     -moz-user-select: none !important;\n          user-select: none !important;\n  cursor: not-allowed;\n}\n\n.pdfPresentationMode .pdfViewer {\n  padding-bottom: 0;\n}\n\n.pdfPresentationMode .spread {\n  margin: 0;\n}\n\n.pdfPresentationMode .pdfViewer .page {\n  margin: 0 auto;\n  border: 2px solid transparent;\n}\n\n:root {\n  --dir-factor: 1;\n  --sidebar-width: 200px;\n  --sidebar-transition-duration: 200ms;\n  --sidebar-transition-timing-function: ease;\n  --scale-select-width: 140px;\n\n  --toolbar-icon-opacity: 0.7;\n  --doorhanger-icon-opacity: 0.9;\n\n  --main-color: rgba(12, 12, 13, 1);\n  --body-bg-color: rgba(237, 237, 240, 1);\n  --progressBar-percent: 0%;\n  --progressBar-end-offset: 0;\n  --progressBar-color: rgba(10, 132, 255, 1);\n  --progressBar-indeterminate-bg-color: rgba(221, 221, 222, 1);\n  --progressBar-indeterminate-blend-color: rgba(116, 177, 239, 1);\n  --scrollbar-color: auto;\n  --scrollbar-bg-color: auto;\n  --toolbar-icon-bg-color: rgba(0, 0, 0, 1);\n  --toolbar-icon-hover-bg-color: rgba(0, 0, 0, 1);\n\n  --sidebar-narrow-bg-color: rgba(237, 237, 240, 0.9);\n  --sidebar-toolbar-bg-color: rgba(245, 246, 247, 1);\n  --toolbar-bg-color: rgba(249, 249, 250, 1);\n  --toolbar-border-color: rgba(204, 204, 204, 1);\n  --toolbar-box-shadow: 0 1px 0 var(--toolbar-border-color);\n  --toolbar-border-bottom: none;\n  --toolbarSidebar-box-shadow: inset calc(-1px * var(--dir-factor)) 0 0\n      rgba(0, 0, 0, 0.25),\n    0 1px 0 rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.1);\n  --toolbarSidebar-border-bottom: none;\n  --button-hover-color: rgba(221, 222, 223, 1);\n  --toggled-btn-color: rgba(0, 0, 0, 1);\n  --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);\n  --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);\n  --dropdown-btn-bg-color: rgba(215, 215, 219, 1);\n  --dropdown-btn-border: none;\n  --separator-color: rgba(0, 0, 0, 0.3);\n  --field-color: rgba(6, 6, 6, 1);\n  --field-bg-color: rgba(255, 255, 255, 1);\n  --field-border-color: rgba(187, 187, 188, 1);\n  --treeitem-color: rgba(0, 0, 0, 0.8);\n  --treeitem-hover-color: rgba(0, 0, 0, 0.9);\n  --treeitem-selected-color: rgba(0, 0, 0, 0.9);\n  --treeitem-selected-bg-color: rgba(0, 0, 0, 0.25);\n  --sidebaritem-bg-color: rgba(0, 0, 0, 0.15);\n  --doorhanger-bg-color: rgba(255, 255, 255, 1);\n  --doorhanger-border-color: rgba(12, 12, 13, 0.2);\n  --doorhanger-hover-color: rgba(12, 12, 13, 1);\n  --doorhanger-hover-bg-color: rgba(237, 237, 237, 1);\n  --doorhanger-separator-color: rgba(222, 222, 222, 1);\n  --dialog-button-border: none;\n  --dialog-button-bg-color: rgba(12, 12, 13, 0.1);\n  --dialog-button-hover-bg-color: rgba(12, 12, 13, 0.3);\n\n  --loading-icon: url(images/loading.svg);\n  --treeitem-expanded-icon: url(images/treeitem-expanded.svg);\n  --treeitem-collapsed-icon: url(images/treeitem-collapsed.svg);\n  --toolbarButton-editorFreeText-icon: url(images/toolbarButton-editorFreeText.svg);\n  --toolbarButton-editorInk-icon: url(images/toolbarButton-editorInk.svg);\n  --toolbarButton-menuArrow-icon: url(images/toolbarButton-menuArrow.svg);\n  --toolbarButton-sidebarToggle-icon: url(images/toolbarButton-sidebarToggle.svg);\n  --toolbarButton-secondaryToolbarToggle-icon: url(images/toolbarButton-secondaryToolbarToggle.svg);\n  --toolbarButton-pageUp-icon: url(images/toolbarButton-pageUp.svg);\n  --toolbarButton-pageDown-icon: url(images/toolbarButton-pageDown.svg);\n  --toolbarButton-zoomOut-icon: url(images/toolbarButton-zoomOut.svg);\n  --toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn.svg);\n  --toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode.svg);\n  --toolbarButton-print-icon: url(images/toolbarButton-print.svg);\n  --toolbarButton-openFile-icon: url(images/toolbarButton-openFile.svg);\n  --toolbarButton-download-icon: url(images/toolbarButton-download.svg);\n  --toolbarButton-bookmark-icon: url(images/toolbarButton-bookmark.svg);\n  --toolbarButton-viewThumbnail-icon: url(images/toolbarButton-viewThumbnail.svg);\n  --toolbarButton-viewOutline-icon: url(images/toolbarButton-viewOutline.svg);\n  --toolbarButton-viewAttachments-icon: url(images/toolbarButton-viewAttachments.svg);\n  --toolbarButton-viewLayers-icon: url(images/toolbarButton-viewLayers.svg);\n  --toolbarButton-currentOutlineItem-icon: url(images/toolbarButton-currentOutlineItem.svg);\n  --toolbarButton-search-icon: url(images/toolbarButton-search.svg);\n  --findbarButton-previous-icon: url(images/findbarButton-previous.svg);\n  --findbarButton-next-icon: url(images/findbarButton-next.svg);\n  --secondaryToolbarButton-firstPage-icon: url(images/secondaryToolbarButton-firstPage.svg);\n  --secondaryToolbarButton-lastPage-icon: url(images/secondaryToolbarButton-lastPage.svg);\n  --secondaryToolbarButton-rotateCcw-icon: url(images/secondaryToolbarButton-rotateCcw.svg);\n  --secondaryToolbarButton-rotateCw-icon: url(images/secondaryToolbarButton-rotateCw.svg);\n  --secondaryToolbarButton-selectTool-icon: url(images/secondaryToolbarButton-selectTool.svg);\n  --secondaryToolbarButton-handTool-icon: url(images/secondaryToolbarButton-handTool.svg);\n  --secondaryToolbarButton-scrollPage-icon: url(images/secondaryToolbarButton-scrollPage.svg);\n  --secondaryToolbarButton-scrollVertical-icon: url(images/secondaryToolbarButton-scrollVertical.svg);\n  --secondaryToolbarButton-scrollHorizontal-icon: url(images/secondaryToolbarButton-scrollHorizontal.svg);\n  --secondaryToolbarButton-scrollWrapped-icon: url(images/secondaryToolbarButton-scrollWrapped.svg);\n  --secondaryToolbarButton-spreadNone-icon: url(images/secondaryToolbarButton-spreadNone.svg);\n  --secondaryToolbarButton-spreadOdd-icon: url(images/secondaryToolbarButton-spreadOdd.svg);\n  --secondaryToolbarButton-spreadEven-icon: url(images/secondaryToolbarButton-spreadEven.svg);\n  --secondaryToolbarButton-documentProperties-icon: url(images/secondaryToolbarButton-documentProperties.svg);\n}\n\n[dir=\"rtl\"]:root {\n  --dir-factor: -1;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --main-color: rgba(249, 249, 250, 1);\n    --body-bg-color: rgba(42, 42, 46, 1);\n    --progressBar-color: rgba(0, 96, 223, 1);\n    --progressBar-indeterminate-bg-color: rgba(40, 40, 43, 1);\n    --progressBar-indeterminate-blend-color: rgba(20, 68, 133, 1);\n    --scrollbar-color: rgba(121, 121, 123, 1);\n    --scrollbar-bg-color: rgba(35, 35, 39, 1);\n    --toolbar-icon-bg-color: rgba(255, 255, 255, 1);\n    --toolbar-icon-hover-bg-color: rgba(255, 255, 255, 1);\n\n    --sidebar-narrow-bg-color: rgba(42, 42, 46, 0.9);\n    --sidebar-toolbar-bg-color: rgba(50, 50, 52, 1);\n    --toolbar-bg-color: rgba(56, 56, 61, 1);\n    --toolbar-border-color: rgba(12, 12, 13, 1);\n    --button-hover-color: rgba(102, 102, 103, 1);\n    --toggled-btn-color: rgba(255, 255, 255, 1);\n    --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);\n    --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);\n    --dropdown-btn-bg-color: rgba(74, 74, 79, 1);\n    --separator-color: rgba(0, 0, 0, 0.3);\n    --field-color: rgba(250, 250, 250, 1);\n    --field-bg-color: rgba(64, 64, 68, 1);\n    --field-border-color: rgba(115, 115, 115, 1);\n    --treeitem-color: rgba(255, 255, 255, 0.8);\n    --treeitem-hover-color: rgba(255, 255, 255, 0.9);\n    --treeitem-selected-color: rgba(255, 255, 255, 0.9);\n    --treeitem-selected-bg-color: rgba(255, 255, 255, 0.25);\n    --sidebaritem-bg-color: rgba(255, 255, 255, 0.15);\n    --doorhanger-bg-color: rgba(74, 74, 79, 1);\n    --doorhanger-border-color: rgba(39, 39, 43, 1);\n    --doorhanger-hover-color: rgba(249, 249, 250, 1);\n    --doorhanger-hover-bg-color: rgba(93, 94, 98, 1);\n    --doorhanger-separator-color: rgba(92, 92, 97, 1);\n    --dialog-button-bg-color: rgba(92, 92, 97, 1);\n    --dialog-button-hover-bg-color: rgba(115, 115, 115, 1);\n\n    /* This image is used in <input> elements, which unfortunately means that\n     * the `mask-image` approach used with all of the other images doesn't work\n     * here; hence why we still have two versions of this particular image. */\n    --loading-icon: url(images/loading-dark.svg);\n  }\n}\n\n@media screen and (forced-colors: active) {\n  :root {\n    --button-hover-color: Highlight;\n    --doorhanger-hover-bg-color: Highlight;\n    --toolbar-icon-opacity: 1;\n    --toolbar-icon-bg-color: ButtonText;\n    --toolbar-icon-hover-bg-color: ButtonFace;\n    --toolbar-border-color: CanvasText;\n    --toolbar-border-bottom: 1px solid var(--toolbar-border-color);\n    --toolbar-box-shadow: none;\n    --toggled-btn-color: HighlightText;\n    --toggled-btn-bg-color: LinkText;\n    --doorhanger-hover-color: ButtonFace;\n    --doorhanger-border-color-whcm: 1px solid ButtonText;\n    --doorhanger-triangle-opacity-whcm: 0;\n    --dialog-button-border: 1px solid Highlight;\n    --dialog-button-hover-bg-color: Highlight;\n    --dialog-button-hover-color: ButtonFace;\n    --dropdown-btn-border: 1px solid ButtonText;\n    --field-border-color: ButtonText;\n    --main-color: CanvasText;\n    --separator-color: GrayText;\n    --doorhanger-separator-color: GrayText;\n    --toolbarSidebar-box-shadow: none;\n    --toolbarSidebar-border-bottom: 1px solid var(--toolbar-border-color);\n  }\n}\n\n* {\n  padding: 0;\n  margin: 0;\n}\n\nhtml,\nbody {\n  height: 100%;\n  width: 100%;\n}\n\nbody {\n  background-color: var(--body-bg-color);\n  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);\n}\n\n.hidden,\n[hidden] {\n  display: none !important;\n}\n\n#viewerContainer.pdfPresentationMode:-webkit-full-screen {\n  top: 0;\n  background-color: rgba(0, 0, 0, 1);\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  cursor: none;\n  -webkit-user-select: none;\n          user-select: none;\n}\n\n#viewerContainer.pdfPresentationMode:fullscreen {\n  top: 0;\n  background-color: rgba(0, 0, 0, 1);\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  cursor: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n.pdfPresentationMode:-webkit-full-screen section:not([data-internal-link]) {\n  pointer-events: none;\n}\n\n.pdfPresentationMode:fullscreen section:not([data-internal-link]) {\n  pointer-events: none;\n}\n\n.pdfPresentationMode:-webkit-full-screen .textLayer span {\n  cursor: none;\n}\n\n.pdfPresentationMode:fullscreen .textLayer span {\n  cursor: none;\n}\n\n.pdfPresentationMode.pdfPresentationModeControls > *,\n.pdfPresentationMode.pdfPresentationModeControls .textLayer span {\n  cursor: default;\n}\n\n#outerContainer {\n  width: 100%;\n  height: 100%;\n  position: relative;\n}\n\n[dir=\"ltr\"] #sidebarContainer {\n  left: calc(-1 * var(--sidebar-width));\n}\n\n[dir=\"rtl\"] #sidebarContainer {\n  right: calc(-1 * var(--sidebar-width));\n}\n\n[dir=\"ltr\"] #sidebarContainer {\n  border-right: var(--doorhanger-border-color-whcm);\n}\n\n[dir=\"rtl\"] #sidebarContainer {\n  border-left: var(--doorhanger-border-color-whcm);\n}\n\n[dir=\"ltr\"] #sidebarContainer {\n  transition-property: left;\n}\n\n[dir=\"rtl\"] #sidebarContainer {\n  transition-property: right;\n}\n\n#sidebarContainer {\n  position: absolute;\n  top: 32px;\n  bottom: 0;\n  inset-inline-start: calc(-1 * var(--sidebar-width));\n  width: var(--sidebar-width);\n  visibility: hidden;\n  z-index: 100;\n  font: message-box;\n  border-top: 1px solid rgba(51, 51, 51, 1);\n  -webkit-border-end: var(--doorhanger-border-color-whcm);\n          border-inline-end: var(--doorhanger-border-color-whcm);\n  transition-property: inset-inline-start;\n  transition-duration: var(--sidebar-transition-duration);\n  transition-timing-function: var(--sidebar-transition-timing-function);\n}\n\n#outerContainer.sidebarMoving #sidebarContainer,\n#outerContainer.sidebarOpen #sidebarContainer {\n  visibility: visible;\n}\n[dir=\"ltr\"] #outerContainer.sidebarOpen #sidebarContainer {\n  left: 0;\n}\n[dir=\"rtl\"] #outerContainer.sidebarOpen #sidebarContainer {\n  right: 0;\n}\n#outerContainer.sidebarOpen #sidebarContainer {\n  inset-inline-start: 0;\n}\n\n#mainContainer {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  min-width: 350px;\n}\n\n[dir=\"ltr\"] #sidebarContent {\n  left: 0;\n}\n\n[dir=\"rtl\"] #sidebarContent {\n  right: 0;\n}\n\n#sidebarContent {\n  top: 32px;\n  bottom: 0;\n  inset-inline-start: 0;\n  overflow: auto;\n  position: absolute;\n  width: 100%;\n  background-color: rgba(0, 0, 0, 0.1);\n  box-shadow: inset calc(-1px * var(--dir-factor)) 0 0 rgba(0, 0, 0, 0.25);\n}\n\n#viewerContainer {\n  overflow: auto;\n  position: absolute;\n  top: 32px;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  outline: none;\n}\n#viewerContainer:not(.pdfPresentationMode) {\n  transition-duration: var(--sidebar-transition-duration);\n  transition-timing-function: var(--sidebar-transition-timing-function);\n}\n\n[dir=\"ltr\"] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {\n  left: var(--sidebar-width);\n}\n\n[dir=\"rtl\"] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {\n  right: var(--sidebar-width);\n}\n\n[dir=\"ltr\"] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {\n  transition-property: left;\n}\n\n[dir=\"rtl\"] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {\n  transition-property: right;\n}\n\n#outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {\n  inset-inline-start: var(--sidebar-width);\n  transition-property: inset-inline-start;\n}\n\n.toolbar {\n  position: relative;\n  left: 0;\n  right: 0;\n  z-index: 9999;\n  cursor: default;\n  font: message-box;\n}\n\n.toolbar input,\n.toolbar button,\n.toolbar select,\n.secondaryToolbar input,\n.secondaryToolbar button,\n.secondaryToolbar a,\n.secondaryToolbar select,\n.editorParamsToolbar input,\n.editorParamsToolbar button,\n.editorParamsToolbar select,\n.findbar input,\n.findbar button,\n.findbar select,\n#sidebarContainer input,\n#sidebarContainer button,\n#sidebarContainer select {\n  outline: none;\n  font: message-box;\n}\n\n#toolbarContainer {\n  width: 100%;\n}\n\n#toolbarSidebar {\n  width: 100%;\n  height: 32px;\n  background-color: var(--sidebar-toolbar-bg-color);\n  box-shadow: var(--toolbarSidebar-box-shadow);\n  border-bottom: var(--toolbarSidebar-border-bottom);\n}\n\n[dir=\"ltr\"] #sidebarResizer {\n  right: -6px;\n}\n\n[dir=\"rtl\"] #sidebarResizer {\n  left: -6px;\n}\n\n#sidebarResizer {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  inset-inline-end: -6px;\n  width: 6px;\n  z-index: 200;\n  cursor: ew-resize;\n}\n\n#toolbarContainer,\n.findbar,\n.secondaryToolbar,\n.editorParamsToolbar {\n  position: relative;\n  height: 32px;\n  background-color: var(--toolbar-bg-color);\n  box-shadow: var(--toolbar-box-shadow);\n  border-bottom: var(--toolbar-border-bottom);\n}\n\n#toolbarViewer {\n  height: 32px;\n}\n\n[dir=\"ltr\"] #loadingBar {\n  left: 0;\n  right: var(--progressBar-end-offset);\n}\n\n[dir=\"rtl\"] #loadingBar {\n  right: 0;\n  left: var(--progressBar-end-offset);\n}\n\n[dir=\"ltr\"] #loadingBar {\n  transition-property: left;\n}\n\n[dir=\"rtl\"] #loadingBar {\n  transition-property: right;\n}\n\n#loadingBar {\n  position: absolute;\n  inset-inline: 0 var(--progressBar-end-offset);\n  height: 4px;\n  background-color: var(--body-bg-color);\n  border-bottom: 1px solid var(--toolbar-border-color);\n  transition-property: inset-inline-start;\n  transition-duration: var(--sidebar-transition-duration);\n  transition-timing-function: var(--sidebar-transition-timing-function);\n}\n\n[dir=\"ltr\"] #outerContainer.sidebarOpen #loadingBar {\n  left: var(--sidebar-width);\n}\n\n[dir=\"rtl\"] #outerContainer.sidebarOpen #loadingBar {\n  right: var(--sidebar-width);\n}\n\n#outerContainer.sidebarOpen #loadingBar {\n  inset-inline-start: var(--sidebar-width);\n}\n\n#loadingBar .progress {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  transform: scaleX(var(--progressBar-percent));\n  transform-origin: 0 0;\n  height: 100%;\n  background-color: var(--progressBar-color);\n  overflow: hidden;\n  transition: transform 200ms;\n}\n\n@keyframes progressIndeterminate {\n  0% {\n    transform: translateX(-142px);\n  }\n  100% {\n    transform: translateX(0);\n  }\n}\n\n#loadingBar.indeterminate .progress {\n  transform: none;\n  background-color: var(--progressBar-indeterminate-bg-color);\n  transition: none;\n}\n\n#loadingBar.indeterminate .progress .glimmer {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: calc(100% + 150px);\n  background: repeating-linear-gradient(\n    135deg,\n    var(--progressBar-indeterminate-blend-color) 0,\n    var(--progressBar-indeterminate-bg-color) 5px,\n    var(--progressBar-indeterminate-bg-color) 45px,\n    var(--progressBar-color) 55px,\n    var(--progressBar-color) 95px,\n    var(--progressBar-indeterminate-blend-color) 100px\n  );\n  animation: progressIndeterminate 1s linear infinite;\n}\n\n#outerContainer.sidebarResizing #sidebarContainer,\n#outerContainer.sidebarResizing #viewerContainer,\n#outerContainer.sidebarResizing #loadingBar {\n  /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */\n  transition-duration: 0s;\n}\n\n.findbar,\n.secondaryToolbar,\n.editorParamsToolbar {\n  top: 32px;\n  position: absolute;\n  z-index: 30000;\n  height: auto;\n  padding: 0 4px;\n  margin: 4px 2px;\n  font: message-box;\n  font-size: 12px;\n  line-height: 14px;\n  text-align: left;\n  cursor: default;\n}\n\n[dir=\"ltr\"] .findbar {\n  left: 64px;\n}\n\n[dir=\"rtl\"] .findbar {\n  right: 64px;\n}\n\n.findbar {\n  inset-inline-start: 64px;\n  min-width: 300px;\n  background-color: var(--toolbar-bg-color);\n}\n.findbar > div {\n  height: 32px;\n}\n[dir=\"ltr\"] .findbar > div#findbarInputContainer {\n  margin-right: 4px;\n}\n[dir=\"rtl\"] .findbar > div#findbarInputContainer {\n  margin-left: 4px;\n}\n.findbar > div#findbarInputContainer {\n  -webkit-margin-end: 4px;\n          margin-inline-end: 4px;\n}\n.findbar.wrapContainers > div,\n.findbar.wrapContainers > div#findbarMessageContainer > * {\n  clear: both;\n}\n.findbar.wrapContainers > div#findbarMessageContainer {\n  height: auto;\n}\n\n.findbar input[type=\"checkbox\"] {\n  pointer-events: none;\n}\n\n.findbar label {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n\n.findbar label:hover,\n.findbar input:focus-visible + label {\n  color: var(--toggled-btn-color);\n  background-color: var(--button-hover-color);\n}\n\n.findbar .toolbarField[type=\"checkbox\"]:checked + .toolbarLabel {\n  background-color: var(--toggled-btn-bg-color) !important;\n  color: var(--toggled-btn-color);\n}\n\n#findInput {\n  width: 200px;\n}\n#findInput::-moz-placeholder {\n  font-style: normal;\n}\n#findInput::placeholder {\n  font-style: normal;\n}\n#findInput[data-status=\"pending\"] {\n  background-image: var(--loading-icon);\n  background-repeat: no-repeat;\n  background-position: calc(50% + 48% * var(--dir-factor));\n}\n#findInput[data-status=\"notFound\"] {\n  background-color: rgba(255, 102, 102, 1);\n}\n\n[dir=\"ltr\"] .secondaryToolbar,[dir=\"ltr\"] \n.editorParamsToolbar {\n  right: 4px;\n}\n\n[dir=\"rtl\"] .secondaryToolbar,[dir=\"rtl\"] \n.editorParamsToolbar {\n  left: 4px;\n}\n\n.secondaryToolbar,\n.editorParamsToolbar {\n  padding: 6px 0 10px;\n  inset-inline-end: 4px;\n  height: auto;\n  background-color: var(--doorhanger-bg-color);\n}\n\n.editorParamsToolbarContainer {\n  width: 220px;\n  margin-bottom: -4px;\n}\n\n.editorParamsToolbarContainer > .editorParamsSetter {\n  min-height: 26px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding-left: 10px;\n  padding-right: 10px;\n  padding-inline: 10px;\n}\n\n[dir=\"ltr\"] .editorParamsToolbarContainer .editorParamsLabel {\n  padding-right: 10px;\n}\n\n[dir=\"rtl\"] .editorParamsToolbarContainer .editorParamsLabel {\n  padding-left: 10px;\n}\n\n.editorParamsToolbarContainer .editorParamsLabel {\n  -webkit-padding-end: 10px;\n          padding-inline-end: 10px;\n  flex: none;\n  color: var(--main-color);\n}\n\n.editorParamsToolbarContainer .editorParamsColor {\n  width: 32px;\n  height: 32px;\n  flex: none;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider {\n  background-color: transparent;\n  width: 90px;\n  flex: 0 1 0;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider::-moz-range-progress {\n  background-color: black;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-runnable-track,\n.editorParamsToolbarContainer .editorParamsSlider::-moz-range-track {\n  background-color: black;\n}\n\n.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-thumb,\n.editorParamsToolbarContainer .editorParamsSlider::-moz-range-thumb {\n  background-color: white;\n}\n\n#secondaryToolbarButtonContainer {\n  max-width: 220px;\n  min-height: 26px;\n  max-height: calc(var(--viewer-container-height) - 40px);\n  overflow-y: auto;\n  margin-bottom: -4px;\n}\n\n[dir=\"ltr\"] #editorInkParamsToolbar {\n  right: 40px;\n}\n\n[dir=\"rtl\"] #editorInkParamsToolbar {\n  left: 40px;\n}\n\n#editorInkParamsToolbar {\n  inset-inline-end: 40px;\n  background-color: var(--toolbar-bg-color);\n}\n\n[dir=\"ltr\"] #editorFreeTextParamsToolbar {\n  right: 68px;\n}\n\n[dir=\"rtl\"] #editorFreeTextParamsToolbar {\n  left: 68px;\n}\n\n#editorFreeTextParamsToolbar {\n  inset-inline-end: 68px;\n  background-color: var(--toolbar-bg-color);\n}\n\n.doorHanger,\n.doorHangerRight {\n  border-radius: 2px;\n  box-shadow: 0 1px 5px var(--doorhanger-border-color),\n    0 0 0 1px var(--doorhanger-border-color);\n  border: var(--doorhanger-border-color-whcm);\n}\n.doorHanger:after,\n.doorHanger:before,\n.doorHangerRight:after,\n.doorHangerRight:before {\n  bottom: 100%;\n  border: 8px solid rgba(0, 0, 0, 0);\n  content: \" \";\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none;\n  opacity: var(--doorhanger-triangle-opacity-whcm);\n}\n[dir=\"ltr\"] .doorHanger:after {\n  left: 10px;\n}\n[dir=\"rtl\"] .doorHanger:after {\n  right: 10px;\n}\n[dir=\"ltr\"] .doorHanger:after {\n  margin-left: -8px;\n}\n[dir=\"rtl\"] .doorHanger:after {\n  margin-right: -8px;\n}\n.doorHanger:after {\n  inset-inline-start: 10px;\n  -webkit-margin-start: -8px;\n          margin-inline-start: -8px;\n  border-bottom-color: var(--toolbar-bg-color);\n}\n[dir=\"ltr\"] .doorHangerRight:after {\n  right: 10px;\n}\n[dir=\"rtl\"] .doorHangerRight:after {\n  left: 10px;\n}\n[dir=\"ltr\"] .doorHangerRight:after {\n  margin-right: -8px;\n}\n[dir=\"rtl\"] .doorHangerRight:after {\n  margin-left: -8px;\n}\n.doorHangerRight:after {\n  inset-inline-end: 10px;\n  -webkit-margin-end: -8px;\n          margin-inline-end: -8px;\n  border-bottom-color: var(--doorhanger-bg-color);\n}\n.doorHanger:before,\n.doorHangerRight:before {\n  border-bottom-color: var(--doorhanger-border-color);\n  border-width: 9px;\n}\n[dir=\"ltr\"] .doorHanger:before {\n  left: 10px;\n}\n[dir=\"rtl\"] .doorHanger:before {\n  right: 10px;\n}\n[dir=\"ltr\"] .doorHanger:before {\n  margin-left: -9px;\n}\n[dir=\"rtl\"] .doorHanger:before {\n  margin-right: -9px;\n}\n.doorHanger:before {\n  inset-inline-start: 10px;\n  -webkit-margin-start: -9px;\n          margin-inline-start: -9px;\n}\n[dir=\"ltr\"] .doorHangerRight:before {\n  right: 10px;\n}\n[dir=\"rtl\"] .doorHangerRight:before {\n  left: 10px;\n}\n[dir=\"ltr\"] .doorHangerRight:before {\n  margin-right: -9px;\n}\n[dir=\"rtl\"] .doorHangerRight:before {\n  margin-left: -9px;\n}\n.doorHangerRight:before {\n  inset-inline-end: 10px;\n  -webkit-margin-end: -9px;\n          margin-inline-end: -9px;\n}\n\n#findResultsCount {\n  background-color: rgba(217, 217, 217, 1);\n  color: rgba(82, 82, 82, 1);\n  text-align: center;\n  padding: 4px 5px;\n  margin: 5px;\n}\n\n#findMsg {\n  color: rgba(251, 0, 0, 1);\n}\n\n#findResultsCount:empty,\n#findMsg:empty {\n  display: none;\n}\n\n#toolbarViewerMiddle {\n  position: absolute;\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n[dir=\"ltr\"] #toolbarViewerLeft,[dir=\"ltr\"] \n#toolbarSidebarLeft {\n  float: left;\n}\n\n[dir=\"rtl\"] #toolbarViewerLeft,[dir=\"rtl\"] \n#toolbarSidebarLeft {\n  float: right;\n}\n\n#toolbarViewerLeft,\n#toolbarSidebarLeft {\n  float: inline-start;\n}\n[dir=\"ltr\"] #toolbarViewerRight,[dir=\"ltr\"] \n#toolbarSidebarRight {\n  float: right;\n}\n[dir=\"rtl\"] #toolbarViewerRight,[dir=\"rtl\"] \n#toolbarSidebarRight {\n  float: left;\n}\n#toolbarViewerRight,\n#toolbarSidebarRight {\n  float: inline-end;\n}\n\n[dir=\"ltr\"] #toolbarViewerLeft > *,[dir=\"ltr\"] \n#toolbarViewerMiddle > *,[dir=\"ltr\"] \n#toolbarViewerRight > *,[dir=\"ltr\"] \n#toolbarSidebarLeft *,[dir=\"ltr\"] \n#toolbarSidebarRight *,[dir=\"ltr\"] \n.findbar * {\n  float: left;\n}\n\n[dir=\"rtl\"] #toolbarViewerLeft > *,[dir=\"rtl\"] \n#toolbarViewerMiddle > *,[dir=\"rtl\"] \n#toolbarViewerRight > *,[dir=\"rtl\"] \n#toolbarSidebarLeft *,[dir=\"rtl\"] \n#toolbarSidebarRight *,[dir=\"rtl\"] \n.findbar * {\n  float: right;\n}\n\n#toolbarViewerLeft > *,\n#toolbarViewerMiddle > *,\n#toolbarViewerRight > *,\n#toolbarSidebarLeft *,\n#toolbarSidebarRight *,\n.findbar * {\n  position: relative;\n  float: inline-start;\n}\n\n[dir=\"ltr\"] #toolbarViewerLeft {\n  padding-left: 1px;\n}\n\n[dir=\"rtl\"] #toolbarViewerLeft {\n  padding-right: 1px;\n}\n\n#toolbarViewerLeft {\n  -webkit-padding-start: 1px;\n          padding-inline-start: 1px;\n}\n[dir=\"ltr\"] #toolbarViewerRight {\n  padding-right: 1px;\n}\n[dir=\"rtl\"] #toolbarViewerRight {\n  padding-left: 1px;\n}\n#toolbarViewerRight {\n  -webkit-padding-end: 1px;\n          padding-inline-end: 1px;\n}\n[dir=\"ltr\"] #toolbarSidebarRight {\n  padding-right: 2px;\n}\n[dir=\"rtl\"] #toolbarSidebarRight {\n  padding-left: 2px;\n}\n#toolbarSidebarRight {\n  -webkit-padding-end: 2px;\n          padding-inline-end: 2px;\n}\n\n.splitToolbarButton {\n  margin: 2px;\n  display: inline-block;\n}\n[dir=\"ltr\"] .splitToolbarButton > .toolbarButton {\n  float: left;\n}\n[dir=\"rtl\"] .splitToolbarButton > .toolbarButton {\n  float: right;\n}\n.splitToolbarButton > .toolbarButton {\n  float: inline-start;\n}\n\n.toolbarButton,\n.secondaryToolbarButton,\n.dialogButton {\n  border: none;\n  background: none;\n  width: 28px;\n  height: 28px;\n  outline: none;\n}\n\n.dialogButton:hover,\n.dialogButton:focus-visible {\n  background-color: var(--dialog-button-hover-bg-color);\n}\n\n.dialogButton:hover > span,\n.dialogButton:focus-visible > span {\n  color: var(--dialog-button-hover-color);\n}\n\n.toolbarButton > span {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  overflow: hidden;\n}\n\n.toolbarButton[disabled],\n.secondaryToolbarButton[disabled],\n.dialogButton[disabled] {\n  opacity: 0.5;\n}\n\n.splitToolbarButton > .toolbarButton:hover,\n.splitToolbarButton > .toolbarButton:focus-visible,\n.dropdownToolbarButton:hover {\n  background-color: var(--button-hover-color);\n}\n.splitToolbarButton > .toolbarButton {\n  position: relative;\n  margin: 0;\n}\n[dir=\"ltr\"] #toolbarSidebar .splitToolbarButton > .toolbarButton {\n  margin-right: 2px;\n}\n[dir=\"rtl\"] #toolbarSidebar .splitToolbarButton > .toolbarButton {\n  margin-left: 2px;\n}\n#toolbarSidebar .splitToolbarButton > .toolbarButton {\n  -webkit-margin-end: 2px;\n          margin-inline-end: 2px;\n}\n\n[dir=\"ltr\"] .splitToolbarButtonSeparator {\n  float: left;\n}\n\n[dir=\"rtl\"] .splitToolbarButtonSeparator {\n  float: right;\n}\n\n.splitToolbarButtonSeparator {\n  float: inline-start;\n  margin: 4px 0;\n  width: 1px;\n  height: 20px;\n  background-color: var(--separator-color);\n}\n\n.toolbarButton,\n.dropdownToolbarButton,\n.secondaryToolbarButton,\n.dialogButton {\n  min-width: 16px;\n  margin: 2px 1px;\n  padding: 2px 6px 0;\n  border: none;\n  border-radius: 2px;\n  color: var(--main-color);\n  font-size: 12px;\n  line-height: 14px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  cursor: default;\n  box-sizing: border-box;\n}\n\n.toolbarButton:hover,\n.toolbarButton:focus-visible {\n  background-color: var(--button-hover-color);\n}\n.secondaryToolbarButton:hover,\n.secondaryToolbarButton:focus-visible {\n  background-color: var(--doorhanger-hover-bg-color);\n  color: var(--doorhanger-hover-color);\n}\n\n.toolbarButton.toggled,\n.splitToolbarButton.toggled > .toolbarButton.toggled,\n.secondaryToolbarButton.toggled {\n  background-color: var(--toggled-btn-bg-color);\n  color: var(--toggled-btn-color);\n}\n\n.toolbarButton.toggled::before,\n.secondaryToolbarButton.toggled::before {\n  background-color: var(--toggled-btn-color);\n}\n\n.toolbarButton.toggled:hover:active,\n.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active,\n.secondaryToolbarButton.toggled:hover:active {\n  background-color: var(--toggled-hover-active-btn-color);\n}\n\n.dropdownToolbarButton {\n  width: var(--scale-select-width);\n  padding: 0;\n  background-color: var(--dropdown-btn-bg-color);\n  border: var(--dropdown-btn-border);\n}\n[dir=\"ltr\"] .dropdownToolbarButton::after {\n  right: 6px;\n}\n[dir=\"rtl\"] .dropdownToolbarButton::after {\n  left: 6px;\n}\n.dropdownToolbarButton::after {\n  top: 6px;\n  inset-inline-end: 6px;\n  pointer-events: none;\n  -webkit-mask-image: var(--toolbarButton-menuArrow-icon);\n          mask-image: var(--toolbarButton-menuArrow-icon);\n}\n\n[dir=\"ltr\"] .dropdownToolbarButton > select {\n  padding-left: 6px;\n}\n\n[dir=\"rtl\"] .dropdownToolbarButton > select {\n  padding-right: 6px;\n}\n\n.dropdownToolbarButton > select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  width: inherit;\n  height: 28px;\n  font-size: 12px;\n  color: var(--main-color);\n  margin: 0;\n  padding: 1px 0 2px;\n  -webkit-padding-start: 6px;\n          padding-inline-start: 6px;\n  border: none;\n  background-color: var(--dropdown-btn-bg-color);\n}\n.dropdownToolbarButton > select:hover,\n.dropdownToolbarButton > select:focus-visible {\n  background-color: var(--button-hover-color);\n  color: var(--toggled-btn-color);\n}\n.dropdownToolbarButton > select > option {\n  background: var(--doorhanger-bg-color);\n  color: var(--main-color);\n}\n\n.toolbarButtonSpacer {\n  width: 30px;\n  display: inline-block;\n  height: 1px;\n}\n\n.toolbarButton::before,\n.secondaryToolbarButton::before,\n.dropdownToolbarButton::after,\n.treeItemToggler::before {\n  /* All matching images have a size of 16x16\n   * All relevant containers have a size of 28x28 */\n  position: absolute;\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n\n  content: \"\";\n  background-color: var(--toolbar-icon-bg-color);\n  -webkit-mask-size: cover;\n          mask-size: cover;\n}\n\n.dropdownToolbarButton:hover::after,\n.dropdownToolbarButton:focus-visible::after,\n.dropdownToolbarButton:active::after {\n  background-color: var(--toolbar-icon-hover-bg-color);\n}\n\n.toolbarButton::before {\n  opacity: var(--toolbar-icon-opacity);\n  top: 6px;\n  left: 6px;\n}\n\n.toolbarButton:hover::before,\n.toolbarButton:focus-visible::before,\n.secondaryToolbarButton:hover::before,\n.secondaryToolbarButton:focus-visible::before {\n  background-color: var(--toolbar-icon-hover-bg-color);\n}\n\n[dir=\"ltr\"] .secondaryToolbarButton::before {\n  left: 12px;\n}\n\n[dir=\"rtl\"] .secondaryToolbarButton::before {\n  right: 12px;\n}\n\n.secondaryToolbarButton::before {\n  opacity: var(--doorhanger-icon-opacity);\n  top: 5px;\n  inset-inline-start: 12px;\n}\n\n#sidebarToggle::before {\n  -webkit-mask-image: var(--toolbarButton-sidebarToggle-icon);\n          mask-image: var(--toolbarButton-sidebarToggle-icon);\n  transform: scaleX(var(--dir-factor));\n}\n\n#secondaryToolbarToggle::before {\n  -webkit-mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);\n          mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);\n  transform: scaleX(var(--dir-factor));\n}\n\n#findPrevious::before {\n  -webkit-mask-image: var(--findbarButton-previous-icon);\n          mask-image: var(--findbarButton-previous-icon);\n}\n\n#findNext::before {\n  -webkit-mask-image: var(--findbarButton-next-icon);\n          mask-image: var(--findbarButton-next-icon);\n}\n\n#previous::before {\n  -webkit-mask-image: var(--toolbarButton-pageUp-icon);\n          mask-image: var(--toolbarButton-pageUp-icon);\n}\n\n#next::before {\n  -webkit-mask-image: var(--toolbarButton-pageDown-icon);\n          mask-image: var(--toolbarButton-pageDown-icon);\n}\n\n#zoomOut::before {\n  -webkit-mask-image: var(--toolbarButton-zoomOut-icon);\n          mask-image: var(--toolbarButton-zoomOut-icon);\n}\n\n#zoomIn::before {\n  -webkit-mask-image: var(--toolbarButton-zoomIn-icon);\n          mask-image: var(--toolbarButton-zoomIn-icon);\n}\n\n#presentationMode::before {\n  -webkit-mask-image: var(--toolbarButton-presentationMode-icon);\n          mask-image: var(--toolbarButton-presentationMode-icon);\n}\n\n#editorFreeText::before {\n  -webkit-mask-image: var(--toolbarButton-editorFreeText-icon);\n          mask-image: var(--toolbarButton-editorFreeText-icon);\n}\n\n#editorInk::before {\n  -webkit-mask-image: var(--toolbarButton-editorInk-icon);\n          mask-image: var(--toolbarButton-editorInk-icon);\n}\n\n#print::before,\n#secondaryPrint::before {\n  -webkit-mask-image: var(--toolbarButton-print-icon);\n          mask-image: var(--toolbarButton-print-icon);\n}\n\n#openFile::before,\n#secondaryOpenFile::before {\n  -webkit-mask-image: var(--toolbarButton-openFile-icon);\n          mask-image: var(--toolbarButton-openFile-icon);\n}\n\n#download::before,\n#secondaryDownload::before {\n  -webkit-mask-image: var(--toolbarButton-download-icon);\n          mask-image: var(--toolbarButton-download-icon);\n}\n\na.secondaryToolbarButton {\n  padding-top: 5px;\n  text-decoration: none;\n}\na.toolbarButton[href=\"#\"],\na.secondaryToolbarButton[href=\"#\"] {\n  opacity: 0.5;\n  pointer-events: none;\n}\n\n#viewBookmark::before {\n  -webkit-mask-image: var(--toolbarButton-bookmark-icon);\n          mask-image: var(--toolbarButton-bookmark-icon);\n}\n\n#viewThumbnail::before {\n  -webkit-mask-image: var(--toolbarButton-viewThumbnail-icon);\n          mask-image: var(--toolbarButton-viewThumbnail-icon);\n}\n\n#viewOutline::before {\n  -webkit-mask-image: var(--toolbarButton-viewOutline-icon);\n          mask-image: var(--toolbarButton-viewOutline-icon);\n  transform: scaleX(var(--dir-factor));\n}\n\n#viewAttachments::before {\n  -webkit-mask-image: var(--toolbarButton-viewAttachments-icon);\n          mask-image: var(--toolbarButton-viewAttachments-icon);\n}\n\n#viewLayers::before {\n  -webkit-mask-image: var(--toolbarButton-viewLayers-icon);\n          mask-image: var(--toolbarButton-viewLayers-icon);\n}\n\n#currentOutlineItem::before {\n  -webkit-mask-image: var(--toolbarButton-currentOutlineItem-icon);\n          mask-image: var(--toolbarButton-currentOutlineItem-icon);\n  transform: scaleX(var(--dir-factor));\n}\n\n#viewFind::before {\n  -webkit-mask-image: var(--toolbarButton-search-icon);\n          mask-image: var(--toolbarButton-search-icon);\n}\n\n[dir=\"ltr\"] .pdfSidebarNotification::after {\n  right: 2px;\n}\n\n[dir=\"rtl\"] .pdfSidebarNotification::after {\n  left: 2px;\n}\n\n.pdfSidebarNotification::after {\n  position: absolute;\n  display: inline-block;\n  top: 2px;\n  inset-inline-end: 2px;\n  /* Create a filled circle, with a diameter of 9 pixels, using only CSS: */\n  content: \"\";\n  background-color: rgba(112, 219, 85, 1);\n  height: 9px;\n  width: 9px;\n  border-radius: 50%;\n}\n\n[dir=\"ltr\"] .secondaryToolbarButton {\n  padding-left: 36px;\n}\n\n[dir=\"rtl\"] .secondaryToolbarButton {\n  padding-right: 36px;\n}\n\n[dir=\"ltr\"] .secondaryToolbarButton {\n  text-align: left;\n}\n\n[dir=\"rtl\"] .secondaryToolbarButton {\n  text-align: right;\n}\n\n.secondaryToolbarButton {\n  position: relative;\n  margin: 0;\n  padding: 0 0 1px;\n  -webkit-padding-start: 36px;\n          padding-inline-start: 36px;\n  height: auto;\n  min-height: 26px;\n  width: auto;\n  min-width: 100%;\n  text-align: start;\n  white-space: normal;\n  border-radius: 0;\n  box-sizing: border-box;\n  display: inline-block;\n}\n[dir=\"ltr\"] .secondaryToolbarButton > span {\n  padding-right: 4px;\n}\n[dir=\"rtl\"] .secondaryToolbarButton > span {\n  padding-left: 4px;\n}\n.secondaryToolbarButton > span {\n  -webkit-padding-end: 4px;\n          padding-inline-end: 4px;\n}\n\n#firstPage::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-firstPage-icon);\n          mask-image: var(--secondaryToolbarButton-firstPage-icon);\n}\n\n#lastPage::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-lastPage-icon);\n          mask-image: var(--secondaryToolbarButton-lastPage-icon);\n}\n\n#pageRotateCcw::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-rotateCcw-icon);\n          mask-image: var(--secondaryToolbarButton-rotateCcw-icon);\n}\n\n#pageRotateCw::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-rotateCw-icon);\n          mask-image: var(--secondaryToolbarButton-rotateCw-icon);\n}\n\n#cursorSelectTool::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-selectTool-icon);\n          mask-image: var(--secondaryToolbarButton-selectTool-icon);\n}\n\n#cursorHandTool::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-handTool-icon);\n          mask-image: var(--secondaryToolbarButton-handTool-icon);\n}\n\n#scrollPage::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-scrollPage-icon);\n          mask-image: var(--secondaryToolbarButton-scrollPage-icon);\n}\n\n#scrollVertical::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-scrollVertical-icon);\n          mask-image: var(--secondaryToolbarButton-scrollVertical-icon);\n}\n\n#scrollHorizontal::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);\n          mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);\n}\n\n#scrollWrapped::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);\n          mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);\n}\n\n#spreadNone::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-spreadNone-icon);\n          mask-image: var(--secondaryToolbarButton-spreadNone-icon);\n}\n\n#spreadOdd::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-spreadOdd-icon);\n          mask-image: var(--secondaryToolbarButton-spreadOdd-icon);\n}\n\n#spreadEven::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-spreadEven-icon);\n          mask-image: var(--secondaryToolbarButton-spreadEven-icon);\n}\n\n#documentProperties::before {\n  -webkit-mask-image: var(--secondaryToolbarButton-documentProperties-icon);\n          mask-image: var(--secondaryToolbarButton-documentProperties-icon);\n}\n\n.verticalToolbarSeparator {\n  display: block;\n  margin: 5px 2px;\n  width: 1px;\n  height: 22px;\n  background-color: var(--separator-color);\n}\n.horizontalToolbarSeparator {\n  display: block;\n  margin: 6px 0;\n  height: 1px;\n  width: 100%;\n  background-color: var(--doorhanger-separator-color);\n}\n\n.toolbarField {\n  padding: 4px 7px;\n  margin: 3px 0;\n  border-radius: 2px;\n  background-color: var(--field-bg-color);\n  background-clip: padding-box;\n  border: 1px solid var(--field-border-color);\n  box-shadow: none;\n  color: var(--field-color);\n  font-size: 12px;\n  line-height: 16px;\n  outline: none;\n}\n\n[dir=\"ltr\"] .toolbarField[type=\"checkbox\"] {\n  margin-left: 7px;\n}\n\n[dir=\"rtl\"] .toolbarField[type=\"checkbox\"] {\n  margin-right: 7px;\n}\n\n.toolbarField[type=\"checkbox\"] {\n  opacity: 0;\n  position: absolute !important;\n  left: 0;\n  margin: 10px 0 3px;\n  -webkit-margin-start: 7px;\n          margin-inline-start: 7px;\n}\n\n#pageNumber {\n  -moz-appearance: textfield; /* hides the spinner in moz */\n  text-align: right;\n  width: 40px;\n}\n#pageNumber.visiblePageIsLoading {\n  background-image: var(--loading-icon);\n  background-repeat: no-repeat;\n  background-position: 3px;\n}\n#pageNumber::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n}\n\n.toolbarField:focus {\n  border-color: #0a84ff;\n}\n\n.toolbarLabel {\n  min-width: 16px;\n  padding: 7px;\n  margin: 2px;\n  border-radius: 2px;\n  color: var(--main-color);\n  font-size: 12px;\n  line-height: 14px;\n  text-align: left;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  cursor: default;\n}\n\n[dir=\"ltr\"] #numPages.toolbarLabel {\n  padding-left: 3px;\n}\n\n[dir=\"rtl\"] #numPages.toolbarLabel {\n  padding-right: 3px;\n}\n\n#numPages.toolbarLabel {\n  -webkit-padding-start: 3px;\n          padding-inline-start: 3px;\n}\n\n#thumbnailView,\n#outlineView,\n#attachmentsView,\n#layersView {\n  position: absolute;\n  width: calc(100% - 8px);\n  top: 0;\n  bottom: 0;\n  padding: 4px 4px 0;\n  overflow: auto;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n#thumbnailView {\n  width: calc(100% - 60px);\n  padding: 10px 30px 0;\n}\n\n#thumbnailView > a:active,\n#thumbnailView > a:focus {\n  outline: 0;\n}\n\n[dir=\"ltr\"] .thumbnail {\n  float: left;\n}\n\n[dir=\"rtl\"] .thumbnail {\n  float: right;\n}\n\n.thumbnail {\n  float: inline-start;\n  margin: 0 10px 5px;\n}\n\n#thumbnailView > a:last-of-type > .thumbnail {\n  margin-bottom: 10px;\n}\n#thumbnailView > a:last-of-type > .thumbnail:not([data-loaded]) {\n  margin-bottom: 9px;\n}\n\n.thumbnail:not([data-loaded]) {\n  border: 1px dashed rgba(132, 132, 132, 1);\n  margin: -1px 9px 4px;\n}\n\n.thumbnailImage {\n  border: 1px solid rgba(0, 0, 0, 0);\n  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3);\n  opacity: 0.8;\n  z-index: 99;\n  background-color: rgba(255, 255, 255, 1);\n  background-clip: content-box;\n}\n\n.thumbnailSelectionRing {\n  border-radius: 2px;\n  padding: 7px;\n}\n\na:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,\n.thumbnail:hover > .thumbnailSelectionRing > .thumbnailImage {\n  opacity: 0.9;\n}\n\na:focus > .thumbnail > .thumbnailSelectionRing,\n.thumbnail:hover > .thumbnailSelectionRing {\n  background-color: var(--sidebaritem-bg-color);\n  background-clip: padding-box;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage {\n  opacity: 1;\n}\n\n.thumbnail.selected > .thumbnailSelectionRing {\n  background-color: var(--sidebaritem-bg-color);\n  background-clip: padding-box;\n  color: rgba(255, 255, 255, 1);\n}\n\n[dir=\"ltr\"] .treeWithDeepNesting > .treeItem,[dir=\"ltr\"] \n.treeItem > .treeItems {\n  margin-left: 20px;\n}\n\n[dir=\"rtl\"] .treeWithDeepNesting > .treeItem,[dir=\"rtl\"] \n.treeItem > .treeItems {\n  margin-right: 20px;\n}\n\n.treeWithDeepNesting > .treeItem,\n.treeItem > .treeItems {\n  -webkit-margin-start: 20px;\n          margin-inline-start: 20px;\n}\n\n[dir=\"ltr\"] .treeItem > a {\n  padding-left: 4px;\n}\n\n[dir=\"rtl\"] .treeItem > a {\n  padding-right: 4px;\n}\n\n.treeItem > a {\n  text-decoration: none;\n  display: inline-block;\n  /* Subtract the right padding (left, in RTL mode) of the container: */\n  min-width: calc(100% - 4px);\n  height: auto;\n  margin-bottom: 1px;\n  padding: 2px 0 5px;\n  -webkit-padding-start: 4px;\n          padding-inline-start: 4px;\n  border-radius: 2px;\n  color: var(--treeitem-color);\n  font-size: 13px;\n  line-height: 15px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  white-space: normal;\n  cursor: pointer;\n}\n\n#layersView .treeItem > a * {\n  cursor: pointer;\n}\n[dir=\"ltr\"] #layersView .treeItem > a > label {\n  padding-left: 4px;\n}\n[dir=\"rtl\"] #layersView .treeItem > a > label {\n  padding-right: 4px;\n}\n#layersView .treeItem > a > label {\n  -webkit-padding-start: 4px;\n          padding-inline-start: 4px;\n}\n[dir=\"ltr\"] #layersView .treeItem > a > label > input {\n  float: left;\n}\n[dir=\"rtl\"] #layersView .treeItem > a > label > input {\n  float: right;\n}\n#layersView .treeItem > a > label > input {\n  float: inline-start;\n  margin-top: 1px;\n}\n\n[dir=\"ltr\"] .treeItemToggler {\n  float: left;\n}\n\n[dir=\"rtl\"] .treeItemToggler {\n  float: right;\n}\n\n.treeItemToggler {\n  position: relative;\n  float: inline-start;\n  height: 0;\n  width: 0;\n  color: rgba(255, 255, 255, 0.5);\n}\n[dir=\"ltr\"] .treeItemToggler::before {\n  right: 4px;\n}\n[dir=\"rtl\"] .treeItemToggler::before {\n  left: 4px;\n}\n.treeItemToggler::before {\n  inset-inline-end: 4px;\n  -webkit-mask-image: var(--treeitem-expanded-icon);\n          mask-image: var(--treeitem-expanded-icon);\n}\n.treeItemToggler.treeItemsHidden::before {\n  -webkit-mask-image: var(--treeitem-collapsed-icon);\n          mask-image: var(--treeitem-collapsed-icon);\n  transform: scaleX(var(--dir-factor));\n}\n.treeItemToggler.treeItemsHidden ~ .treeItems {\n  display: none;\n}\n\n.treeItem.selected > a {\n  background-color: var(--treeitem-selected-bg-color);\n  color: var(--treeitem-selected-color);\n}\n\n.treeItemToggler:hover,\n.treeItemToggler:hover + a,\n.treeItemToggler:hover ~ .treeItems,\n.treeItem > a:hover {\n  background-color: var(--sidebaritem-bg-color);\n  background-clip: padding-box;\n  border-radius: 2px;\n  color: var(--treeitem-hover-color);\n}\n\n.dialogButton {\n  width: auto;\n  margin: 3px 4px 2px !important;\n  padding: 2px 11px;\n  color: var(--main-color);\n  background-color: var(--dialog-button-bg-color);\n  border: var(--dialog-button-border) !important;\n}\n\ndialog {\n  margin: auto;\n  padding: 15px;\n  border-spacing: 4px;\n  color: var(--main-color);\n  font: message-box;\n  font-size: 12px;\n  line-height: 14px;\n  background-color: var(--doorhanger-bg-color);\n  border: 1px solid rgba(0, 0, 0, 0.5);\n  border-radius: 4px;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\ndialog::-webkit-backdrop {\n  background-color: rgba(0, 0, 0, 0.2);\n}\ndialog::backdrop {\n  background-color: rgba(0, 0, 0, 0.2);\n}\n\ndialog > .row {\n  display: table-row;\n}\n\ndialog > .row > * {\n  display: table-cell;\n}\n\ndialog .toolbarField {\n  margin: 5px 0;\n}\n\ndialog .separator {\n  display: block;\n  margin: 4px 0;\n  height: 1px;\n  width: 100%;\n  background-color: var(--separator-color);\n}\n\ndialog .buttonRow {\n  text-align: center;\n  vertical-align: middle;\n}\n\ndialog :link {\n  color: rgba(255, 255, 255, 1);\n}\n\n#passwordDialog {\n  text-align: center;\n}\n#passwordDialog .toolbarField {\n  width: 200px;\n}\n\n#documentPropertiesDialog {\n  text-align: left;\n}\n[dir=\"ltr\"] #documentPropertiesDialog .row > * {\n  text-align: left;\n}\n[dir=\"rtl\"] #documentPropertiesDialog .row > * {\n  text-align: right;\n}\n#documentPropertiesDialog .row > * {\n  min-width: 100px;\n  text-align: start;\n}\n#documentPropertiesDialog .row > span {\n  width: 125px;\n  word-wrap: break-word;\n}\n#documentPropertiesDialog .row > p {\n  max-width: 225px;\n  word-wrap: break-word;\n}\n#documentPropertiesDialog .buttonRow {\n  margin-top: 10px;\n}\n\n.grab-to-pan-grab {\n  cursor: grab !important;\n}\n.grab-to-pan-grab\n  *:not(input):not(textarea):not(button):not(select):not(:link) {\n  cursor: inherit !important;\n}\n.grab-to-pan-grab:active,\n.grab-to-pan-grabbing {\n  cursor: grabbing !important;\n  position: fixed;\n  background: rgba(0, 0, 0, 0);\n  display: block;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  overflow: hidden;\n  z-index: 50000; /* should be higher than anything else in PDF.js! */\n}\n\n@page {\n  margin: 0;\n}\n\n#printContainer {\n  display: none;\n}\n\n@media print {\n  body {\n    background: rgba(0, 0, 0, 0) none;\n  }\n  body[data-pdfjsprinting] #outerContainer {\n    display: none;\n  }\n  body[data-pdfjsprinting] #printContainer {\n    display: block;\n  }\n  #printContainer {\n    height: 100%;\n  }\n  /* wrapper around (scaled) print canvas elements */\n  #printContainer > .printedPage {\n    page-break-after: always;\n    page-break-inside: avoid;\n\n    /* The wrapper always cover the whole page. */\n    height: 100%;\n    width: 100%;\n\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n  }\n\n  #printContainer > .xfaPrintedPage .xfaPage {\n    position: absolute;\n  }\n\n  #printContainer > .xfaPrintedPage {\n    page-break-after: always;\n    page-break-inside: avoid;\n    width: 100%;\n    height: 100%;\n    position: relative;\n  }\n\n  #printContainer > .printedPage canvas,\n  #printContainer > .printedPage img {\n    /* The intrinsic canvas / image size will make sure that we fit the page. */\n    max-width: 100%;\n    max-height: 100%;\n\n    direction: ltr;\n    display: block;\n  }\n}\n\n.visibleLargeView,\n.visibleMediumView {\n  display: none;\n}\n\n@media all and (max-width: 900px) {\n  #toolbarViewerMiddle {\n    display: table;\n    margin: auto;\n    left: auto;\n    position: inherit;\n    transform: none;\n  }\n}\n\n@media all and (max-width: 840px) {\n  #sidebarContainer {\n    background-color: var(--sidebar-narrow-bg-color);\n  }\n  [dir=\"ltr\"] #outerContainer.sidebarOpen #viewerContainer {\n    left: 0 !important;\n  }\n  [dir=\"rtl\"] #outerContainer.sidebarOpen #viewerContainer {\n    right: 0 !important;\n  }\n  #outerContainer.sidebarOpen #viewerContainer {\n    inset-inline-start: 0 !important;\n  }\n}\n\n@media all and (max-width: 820px) {\n  #outerContainer .hiddenLargeView {\n    display: none;\n  }\n  #outerContainer .visibleLargeView {\n    display: inherit;\n  }\n}\n\n@media all and (max-width: 750px) {\n  #outerContainer .hiddenMediumView {\n    display: none;\n  }\n  #outerContainer .visibleMediumView {\n    display: inherit;\n  }\n}\n\n@media all and (max-width: 690px) {\n  .hiddenSmallView,\n  .hiddenSmallView * {\n    display: none;\n  }\n  .toolbarButtonSpacer {\n    width: 0;\n  }\n  [dir=\"ltr\"] .findbar {\n    left: 34px;\n  }\n  [dir=\"rtl\"] .findbar {\n    right: 34px;\n  }\n  .findbar {\n    inset-inline-start: 34px;\n  }\n}\n\n@media all and (max-width: 560px) {\n  #scaleSelectContainer {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "src/data/extra/web/pdf.js/web/viewer.js",
    "content": "/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\n/******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ([\n/* 0 */,\n/* 1 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.animationStarted = exports.VERTICAL_PADDING = exports.UNKNOWN_SCALE = exports.TextLayerMode = exports.SpreadMode = exports.SidebarView = exports.ScrollMode = exports.SCROLLBAR_PADDING = exports.RenderingStates = exports.RendererType = exports.ProgressBar = exports.PresentationModeState = exports.OutputScale = exports.MIN_SCALE = exports.MAX_SCALE = exports.MAX_AUTO_SCALE = exports.DEFAULT_SCALE_VALUE = exports.DEFAULT_SCALE_DELTA = exports.DEFAULT_SCALE = exports.AutoPrintRegExp = void 0;\nexports.apiPageLayoutToViewerModes = apiPageLayoutToViewerModes;\nexports.apiPageModeToSidebarView = apiPageModeToSidebarView;\nexports.approximateFraction = approximateFraction;\nexports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements;\nexports.binarySearchFirstItem = binarySearchFirstItem;\nexports.docStyle = void 0;\nexports.getActiveOrFocusedElement = getActiveOrFocusedElement;\nexports.getPageSizeInches = getPageSizeInches;\nexports.getVisibleElements = getVisibleElements;\nexports.isPortraitOrientation = isPortraitOrientation;\nexports.isValidRotation = isValidRotation;\nexports.isValidScrollMode = isValidScrollMode;\nexports.isValidSpreadMode = isValidSpreadMode;\nexports.noContextMenuHandler = noContextMenuHandler;\nexports.normalizeWheelEventDelta = normalizeWheelEventDelta;\nexports.normalizeWheelEventDirection = normalizeWheelEventDirection;\nexports.parseQueryString = parseQueryString;\nexports.removeNullCharacters = removeNullCharacters;\nexports.roundToDivide = roundToDivide;\nexports.scrollIntoView = scrollIntoView;\nexports.watchScroll = watchScroll;\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nconst DEFAULT_SCALE_VALUE = \"auto\";\nexports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE;\nconst DEFAULT_SCALE = 1.0;\nexports.DEFAULT_SCALE = DEFAULT_SCALE;\nconst DEFAULT_SCALE_DELTA = 1.1;\nexports.DEFAULT_SCALE_DELTA = DEFAULT_SCALE_DELTA;\nconst MIN_SCALE = 0.1;\nexports.MIN_SCALE = MIN_SCALE;\nconst MAX_SCALE = 10.0;\nexports.MAX_SCALE = MAX_SCALE;\nconst UNKNOWN_SCALE = 0;\nexports.UNKNOWN_SCALE = UNKNOWN_SCALE;\nconst MAX_AUTO_SCALE = 1.25;\nexports.MAX_AUTO_SCALE = MAX_AUTO_SCALE;\nconst SCROLLBAR_PADDING = 40;\nexports.SCROLLBAR_PADDING = SCROLLBAR_PADDING;\nconst VERTICAL_PADDING = 5;\nexports.VERTICAL_PADDING = VERTICAL_PADDING;\nconst RenderingStates = {\n  INITIAL: 0,\n  RUNNING: 1,\n  PAUSED: 2,\n  FINISHED: 3\n};\nexports.RenderingStates = RenderingStates;\nconst PresentationModeState = {\n  UNKNOWN: 0,\n  NORMAL: 1,\n  CHANGING: 2,\n  FULLSCREEN: 3\n};\nexports.PresentationModeState = PresentationModeState;\nconst SidebarView = {\n  UNKNOWN: -1,\n  NONE: 0,\n  THUMBS: 1,\n  OUTLINE: 2,\n  ATTACHMENTS: 3,\n  LAYERS: 4\n};\nexports.SidebarView = SidebarView;\nconst RendererType = {\n  CANVAS: \"canvas\",\n  SVG: \"svg\"\n};\nexports.RendererType = RendererType;\nconst TextLayerMode = {\n  DISABLE: 0,\n  ENABLE: 1\n};\nexports.TextLayerMode = TextLayerMode;\nconst ScrollMode = {\n  UNKNOWN: -1,\n  VERTICAL: 0,\n  HORIZONTAL: 1,\n  WRAPPED: 2,\n  PAGE: 3\n};\nexports.ScrollMode = ScrollMode;\nconst SpreadMode = {\n  UNKNOWN: -1,\n  NONE: 0,\n  ODD: 1,\n  EVEN: 2\n};\nexports.SpreadMode = SpreadMode;\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\nexports.AutoPrintRegExp = AutoPrintRegExp;\nclass OutputScale {\n  constructor() {\n    const pixelRatio = window.devicePixelRatio || 1;\n    this.sx = pixelRatio;\n    this.sy = pixelRatio;\n  }\n  get scaled() {\n    return this.sx !== 1 || this.sy !== 1;\n  }\n}\nexports.OutputScale = OutputScale;\nfunction scrollIntoView(element, spot) {\n  let scrollMatches = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  let parent = element.offsetParent;\n  if (!parent) {\n    console.error(\"offsetParent is not set -- cannot scroll\");\n    return;\n  }\n  let offsetY = element.offsetTop + element.clientTop;\n  let offsetX = element.offsetLeft + element.clientLeft;\n  while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || scrollMatches && (parent.classList.contains(\"markedContent\") || getComputedStyle(parent).overflow === \"hidden\")) {\n    offsetY += parent.offsetTop;\n    offsetX += parent.offsetLeft;\n    parent = parent.offsetParent;\n    if (!parent) {\n      return;\n    }\n  }\n  if (spot) {\n    if (spot.top !== undefined) {\n      offsetY += spot.top;\n    }\n    if (spot.left !== undefined) {\n      offsetX += spot.left;\n      parent.scrollLeft = offsetX;\n    }\n  }\n  parent.scrollTop = offsetY;\n}\nfunction watchScroll(viewAreaElement, callback) {\n  const debounceScroll = function (evt) {\n    if (rAF) {\n      return;\n    }\n    rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n      rAF = null;\n      const currentX = viewAreaElement.scrollLeft;\n      const lastX = state.lastX;\n      if (currentX !== lastX) {\n        state.right = currentX > lastX;\n      }\n      state.lastX = currentX;\n      const currentY = viewAreaElement.scrollTop;\n      const lastY = state.lastY;\n      if (currentY !== lastY) {\n        state.down = currentY > lastY;\n      }\n      state.lastY = currentY;\n      callback(state);\n    });\n  };\n  const state = {\n    right: true,\n    down: true,\n    lastX: viewAreaElement.scrollLeft,\n    lastY: viewAreaElement.scrollTop,\n    _eventHandler: debounceScroll\n  };\n  let rAF = null;\n  viewAreaElement.addEventListener(\"scroll\", debounceScroll, true);\n  return state;\n}\nfunction parseQueryString(query) {\n  const params = new Map();\n  for (const [key, value] of new URLSearchParams(query)) {\n    params.set(key.toLowerCase(), value);\n  }\n  return params;\n}\nconst NullCharactersRegExp = /\\x00/g;\nconst InvisibleCharactersRegExp = /[\\x01-\\x1F]/g;\nfunction removeNullCharacters(str) {\n  let replaceInvisible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  if (typeof str !== \"string\") {\n    console.error(`The argument must be a string.`);\n    return str;\n  }\n  if (replaceInvisible) {\n    str = str.replace(InvisibleCharactersRegExp, \" \");\n  }\n  return str.replace(NullCharactersRegExp, \"\");\n}\nfunction binarySearchFirstItem(items, condition) {\n  let start = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  let minIndex = start;\n  let maxIndex = items.length - 1;\n  if (maxIndex < 0 || !condition(items[maxIndex])) {\n    return items.length;\n  }\n  if (condition(items[minIndex])) {\n    return minIndex;\n  }\n  while (minIndex < maxIndex) {\n    const currentIndex = minIndex + maxIndex >> 1;\n    const currentItem = items[currentIndex];\n    if (condition(currentItem)) {\n      maxIndex = currentIndex;\n    } else {\n      minIndex = currentIndex + 1;\n    }\n  }\n  return minIndex;\n}\nfunction approximateFraction(x) {\n  if (Math.floor(x) === x) {\n    return [x, 1];\n  }\n  const xinv = 1 / x;\n  const limit = 8;\n  if (xinv > limit) {\n    return [1, limit];\n  } else if (Math.floor(xinv) === xinv) {\n    return [1, xinv];\n  }\n  const x_ = x > 1 ? xinv : x;\n  let a = 0,\n    b = 1,\n    c = 1,\n    d = 1;\n  while (true) {\n    const p = a + c,\n      q = b + d;\n    if (q > limit) {\n      break;\n    }\n    if (x_ <= p / q) {\n      c = p;\n      d = q;\n    } else {\n      a = p;\n      b = q;\n    }\n  }\n  let result;\n  if (x_ - a / b < c / d - x_) {\n    result = x_ === x ? [a, b] : [b, a];\n  } else {\n    result = x_ === x ? [c, d] : [d, c];\n  }\n  return result;\n}\nfunction roundToDivide(x, div) {\n  const r = x % div;\n  return r === 0 ? x : Math.round(x - r + div);\n}\nfunction getPageSizeInches(_ref) {\n  let {\n    view,\n    userUnit,\n    rotate\n  } = _ref;\n  const [x1, y1, x2, y2] = view;\n  const changeOrientation = rotate % 180 !== 0;\n  const width = (x2 - x1) / 72 * userUnit;\n  const height = (y2 - y1) / 72 * userUnit;\n  return {\n    width: changeOrientation ? height : width,\n    height: changeOrientation ? width : height\n  };\n}\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n  if (index < 2) {\n    return index;\n  }\n  let elt = views[index].div;\n  let pageTop = elt.offsetTop + elt.clientTop;\n  if (pageTop >= top) {\n    elt = views[index - 1].div;\n    pageTop = elt.offsetTop + elt.clientTop;\n  }\n  for (let i = index - 2; i >= 0; --i) {\n    elt = views[i].div;\n    if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n      break;\n    }\n    index = i;\n  }\n  return index;\n}\nfunction getVisibleElements(_ref2) {\n  let {\n    scrollEl,\n    views,\n    sortByVisibility = false,\n    horizontal = false,\n    rtl = false\n  } = _ref2;\n  const top = scrollEl.scrollTop,\n    bottom = top + scrollEl.clientHeight;\n  const left = scrollEl.scrollLeft,\n    right = left + scrollEl.clientWidth;\n  function isElementBottomAfterViewTop(view) {\n    const element = view.div;\n    const elementBottom = element.offsetTop + element.clientTop + element.clientHeight;\n    return elementBottom > top;\n  }\n  function isElementNextAfterViewHorizontally(view) {\n    const element = view.div;\n    const elementLeft = element.offsetLeft + element.clientLeft;\n    const elementRight = elementLeft + element.clientWidth;\n    return rtl ? elementLeft < right : elementRight > left;\n  }\n  const visible = [],\n    ids = new Set(),\n    numViews = views.length;\n  let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop);\n  if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {\n    firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);\n  }\n  let lastEdge = horizontal ? right : -1;\n  for (let i = firstVisibleElementInd; i < numViews; i++) {\n    const view = views[i],\n      element = view.div;\n    const currentWidth = element.offsetLeft + element.clientLeft;\n    const currentHeight = element.offsetTop + element.clientTop;\n    const viewWidth = element.clientWidth,\n      viewHeight = element.clientHeight;\n    const viewRight = currentWidth + viewWidth;\n    const viewBottom = currentHeight + viewHeight;\n    if (lastEdge === -1) {\n      if (viewBottom >= bottom) {\n        lastEdge = viewBottom;\n      }\n    } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n      break;\n    }\n    if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) {\n      continue;\n    }\n    const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);\n    const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);\n    const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n      fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n    const percent = fractionHeight * fractionWidth * 100 | 0;\n    visible.push({\n      id: view.id,\n      x: currentWidth,\n      y: currentHeight,\n      view,\n      percent,\n      widthPercent: fractionWidth * 100 | 0\n    });\n    ids.add(view.id);\n  }\n  const first = visible[0],\n    last = visible.at(-1);\n  if (sortByVisibility) {\n    visible.sort(function (a, b) {\n      const pc = a.percent - b.percent;\n      if (Math.abs(pc) > 0.001) {\n        return -pc;\n      }\n      return a.id - b.id;\n    });\n  }\n  return {\n    first,\n    last,\n    views: visible,\n    ids\n  };\n}\nfunction noContextMenuHandler(evt) {\n  evt.preventDefault();\n}\nfunction normalizeWheelEventDirection(evt) {\n  let delta = Math.hypot(evt.deltaX, evt.deltaY);\n  const angle = Math.atan2(evt.deltaY, evt.deltaX);\n  if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n    delta = -delta;\n  }\n  return delta;\n}\nfunction normalizeWheelEventDelta(evt) {\n  let delta = normalizeWheelEventDirection(evt);\n  const MOUSE_DOM_DELTA_PIXEL_MODE = 0;\n  const MOUSE_DOM_DELTA_LINE_MODE = 1;\n  const MOUSE_PIXELS_PER_LINE = 30;\n  const MOUSE_LINES_PER_PAGE = 30;\n  if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {\n    delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n  } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {\n    delta /= MOUSE_LINES_PER_PAGE;\n  }\n  return delta;\n}\nfunction isValidRotation(angle) {\n  return Number.isInteger(angle) && angle % 90 === 0;\n}\nfunction isValidScrollMode(mode) {\n  return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN;\n}\nfunction isValidSpreadMode(mode) {\n  return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN;\n}\nfunction isPortraitOrientation(size) {\n  return size.width <= size.height;\n}\nconst animationStarted = new Promise(function (resolve) {\n  window.requestAnimationFrame(resolve);\n});\nexports.animationStarted = animationStarted;\nconst docStyle = document.documentElement.style;\nexports.docStyle = docStyle;\nfunction clamp(v, min, max) {\n  return Math.min(Math.max(v, min), max);\n}\nvar _classList = /*#__PURE__*/new WeakMap();\nvar _percent = /*#__PURE__*/new WeakMap();\nvar _visible = /*#__PURE__*/new WeakMap();\nclass ProgressBar {\n  constructor(id) {\n    _classPrivateFieldInitSpec(this, _classList, {\n      writable: true,\n      value: null\n    });\n    _classPrivateFieldInitSpec(this, _percent, {\n      writable: true,\n      value: 0\n    });\n    _classPrivateFieldInitSpec(this, _visible, {\n      writable: true,\n      value: true\n    });\n    const bar = document.getElementById(id);\n    _classPrivateFieldSet(this, _classList, bar.classList);\n  }\n  get percent() {\n    return _classPrivateFieldGet(this, _percent);\n  }\n  set percent(val) {\n    _classPrivateFieldSet(this, _percent, clamp(val, 0, 100));\n    if (isNaN(val)) {\n      _classPrivateFieldGet(this, _classList).add(\"indeterminate\");\n      return;\n    }\n    _classPrivateFieldGet(this, _classList).remove(\"indeterminate\");\n    docStyle.setProperty(\"--progressBar-percent\", `${_classPrivateFieldGet(this, _percent)}%`);\n  }\n  setWidth(viewer) {\n    if (!viewer) {\n      return;\n    }\n    const container = viewer.parentNode;\n    const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n    if (scrollbarWidth > 0) {\n      docStyle.setProperty(\"--progressBar-end-offset\", `${scrollbarWidth}px`);\n    }\n  }\n  hide() {\n    if (!_classPrivateFieldGet(this, _visible)) {\n      return;\n    }\n    _classPrivateFieldSet(this, _visible, false);\n    _classPrivateFieldGet(this, _classList).add(\"hidden\");\n  }\n  show() {\n    if (_classPrivateFieldGet(this, _visible)) {\n      return;\n    }\n    _classPrivateFieldSet(this, _visible, true);\n    _classPrivateFieldGet(this, _classList).remove(\"hidden\");\n  }\n}\nexports.ProgressBar = ProgressBar;\nfunction getActiveOrFocusedElement() {\n  let curRoot = document;\n  let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(\":focus\");\n  while ((_curActiveOrFocused = curActiveOrFocused) !== null && _curActiveOrFocused !== void 0 && _curActiveOrFocused.shadowRoot) {\n    var _curActiveOrFocused;\n    curRoot = curActiveOrFocused.shadowRoot;\n    curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(\":focus\");\n  }\n  return curActiveOrFocused;\n}\nfunction apiPageLayoutToViewerModes(layout) {\n  let scrollMode = ScrollMode.VERTICAL,\n    spreadMode = SpreadMode.NONE;\n  switch (layout) {\n    case \"SinglePage\":\n      scrollMode = ScrollMode.PAGE;\n      break;\n    case \"OneColumn\":\n      break;\n    case \"TwoPageLeft\":\n      scrollMode = ScrollMode.PAGE;\n    case \"TwoColumnLeft\":\n      spreadMode = SpreadMode.ODD;\n      break;\n    case \"TwoPageRight\":\n      scrollMode = ScrollMode.PAGE;\n    case \"TwoColumnRight\":\n      spreadMode = SpreadMode.EVEN;\n      break;\n  }\n  return {\n    scrollMode,\n    spreadMode\n  };\n}\nfunction apiPageModeToSidebarView(mode) {\n  switch (mode) {\n    case \"UseNone\":\n      return SidebarView.NONE;\n    case \"UseThumbs\":\n      return SidebarView.THUMBS;\n    case \"UseOutlines\":\n      return SidebarView.OUTLINE;\n    case \"UseAttachments\":\n      return SidebarView.ATTACHMENTS;\n    case \"UseOC\":\n      return SidebarView.LAYERS;\n  }\n  return SidebarView.NONE;\n}\n\n/***/ }),\n/* 2 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.compatibilityParams = exports.OptionKind = exports.AppOptions = void 0;\nconst compatibilityParams = Object.create(null);\nexports.compatibilityParams = compatibilityParams;\n{\n  const userAgent = navigator.userAgent || \"\";\n  const platform = navigator.platform || \"\";\n  const maxTouchPoints = navigator.maxTouchPoints || 1;\n  const isAndroid = /Android/.test(userAgent);\n  const isIOS = /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === \"MacIntel\" && maxTouchPoints > 1;\n  (function checkCanvasSizeLimitation() {\n    if (isIOS || isAndroid) {\n      compatibilityParams.maxCanvasPixels = 5242880;\n    }\n  })();\n}\nconst OptionKind = {\n  VIEWER: 0x02,\n  API: 0x04,\n  WORKER: 0x08,\n  PREFERENCE: 0x80\n};\nexports.OptionKind = OptionKind;\nconst defaultOptions = {\n  annotationEditorMode: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  annotationMode: {\n    value: 2,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  cursorToolOnLoad: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  defaultZoomValue: {\n    value: \"\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  disableHistory: {\n    value: false,\n    kind: OptionKind.VIEWER\n  },\n  disablePageLabels: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enablePermissions: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enablePrintAutoRotate: {\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  enableScripting: {\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  externalLinkRel: {\n    value: \"noopener noreferrer nofollow\",\n    kind: OptionKind.VIEWER\n  },\n  externalLinkTarget: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  historyUpdateUrl: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  ignoreDestinationZoom: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  imageResourcesPath: {\n    value: \"./images/\",\n    kind: OptionKind.VIEWER\n  },\n  maxCanvasPixels: {\n    value: 16777216,\n    kind: OptionKind.VIEWER\n  },\n  forcePageColors: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  pageColorsBackground: {\n    value: \"Canvas\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  pageColorsForeground: {\n    value: \"CanvasText\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  pdfBugEnabled: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  printResolution: {\n    value: 150,\n    kind: OptionKind.VIEWER\n  },\n  sidebarViewOnLoad: {\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  scrollModeOnLoad: {\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  spreadModeOnLoad: {\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  textLayerMode: {\n    value: 1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  useOnlyCssZoom: {\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  viewerCssTheme: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  viewOnLoad: {\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  },\n  cMapPacked: {\n    value: true,\n    kind: OptionKind.API\n  },\n  cMapUrl: {\n    value: \"../web/cmaps/\",\n    kind: OptionKind.API\n  },\n  disableAutoFetch: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  disableFontFace: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  disableRange: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  disableStream: {\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  docBaseUrl: {\n    value: \"\",\n    kind: OptionKind.API\n  },\n  enableXfa: {\n    value: true,\n    kind: OptionKind.API + OptionKind.PREFERENCE\n  },\n  fontExtraProperties: {\n    value: false,\n    kind: OptionKind.API\n  },\n  isEvalSupported: {\n    value: true,\n    kind: OptionKind.API\n  },\n  isOffscreenCanvasSupported: {\n    value: true,\n    kind: OptionKind.API\n  },\n  maxImageSize: {\n    value: -1,\n    kind: OptionKind.API\n  },\n  pdfBug: {\n    value: false,\n    kind: OptionKind.API\n  },\n  standardFontDataUrl: {\n    value: \"../web/standard_fonts/\",\n    kind: OptionKind.API\n  },\n  verbosity: {\n    value: 1,\n    kind: OptionKind.API\n  },\n  workerPort: {\n    value: null,\n    kind: OptionKind.WORKER\n  },\n  workerSrc: {\n    value: \"../build/pdf.worker.js\",\n    kind: OptionKind.WORKER\n  },\n  useWorkerFetch: {\n    value: false,\n    kind: OptionKind.API\n  }\n};\n{\n  defaultOptions.defaultUrl = {\n    value: \"compressed.tracemonkey-pldi-09.pdf\",\n    kind: OptionKind.VIEWER\n  };\n  defaultOptions.disablePreferences = {\n    value: false,\n    kind: OptionKind.VIEWER\n  };\n  defaultOptions.locale = {\n    value: navigator.language || \"en-US\",\n    kind: OptionKind.VIEWER\n  };\n  defaultOptions.renderer = {\n    value: \"canvas\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\n  };\n  defaultOptions.sandboxBundleSrc = {\n    value: \"../build/pdf.sandbox.js\",\n    kind: OptionKind.VIEWER\n  };\n}\nconst userOptions = Object.create(null);\nclass AppOptions {\n  constructor() {\n    throw new Error(\"Cannot initialize AppOptions.\");\n  }\n  static get(name) {\n    const userOption = userOptions[name];\n    if (userOption !== undefined) {\n      return userOption;\n    }\n    const defaultOption = defaultOptions[name];\n    if (defaultOption !== undefined) {\n      return compatibilityParams[name] ?? defaultOption.value;\n    }\n    return undefined;\n  }\n  static getAll() {\n    let kind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    const options = Object.create(null);\n    for (const name in defaultOptions) {\n      const defaultOption = defaultOptions[name];\n      if (kind) {\n        if ((kind & defaultOption.kind) === 0) {\n          continue;\n        }\n        if (kind === OptionKind.PREFERENCE) {\n          const value = defaultOption.value,\n            valueType = typeof value;\n          if (valueType === \"boolean\" || valueType === \"string\" || valueType === \"number\" && Number.isInteger(value)) {\n            options[name] = value;\n            continue;\n          }\n          throw new Error(`Invalid type for preference: ${name}`);\n        }\n      }\n      const userOption = userOptions[name];\n      options[name] = userOption !== undefined ? userOption : compatibilityParams[name] ?? defaultOption.value;\n    }\n    return options;\n  }\n  static set(name, value) {\n    userOptions[name] = value;\n  }\n  static setAll(options) {\n    for (const name in options) {\n      userOptions[name] = options[name];\n    }\n  }\n  static remove(name) {\n    delete userOptions[name];\n  }\n  static _hasUserOptions() {\n    return Object.keys(userOptions).length > 0;\n  }\n}\nexports.AppOptions = AppOptions;\n\n/***/ }),\n/* 3 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.SimpleLinkService = exports.PDFLinkService = exports.LinkTarget = void 0;\nvar _ui_utils = __webpack_require__(1);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classStaticPrivateMethodGet(receiver, classConstructor, method) { _classCheckPrivateStaticAccess(receiver, classConstructor); return method; }\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\"Private static access of wrong provenance\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\nconst LinkTarget = {\n  NONE: 0,\n  SELF: 1,\n  BLANK: 2,\n  PARENT: 3,\n  TOP: 4\n};\nexports.LinkTarget = LinkTarget;\nfunction addLinkAttributes(link) {\n  let {\n    url,\n    target,\n    rel,\n    enabled = true\n  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (!url || typeof url !== \"string\") {\n    throw new Error('A valid \"url\" parameter must provided.');\n  }\n  const urlNullRemoved = (0, _ui_utils.removeNullCharacters)(url);\n  if (enabled) {\n    link.href = link.title = urlNullRemoved;\n  } else {\n    link.href = \"\";\n    link.title = `Disabled: ${urlNullRemoved}`;\n    link.onclick = () => {\n      return false;\n    };\n  }\n  let targetStr = \"\";\n  switch (target) {\n    case LinkTarget.NONE:\n      break;\n    case LinkTarget.SELF:\n      targetStr = \"_self\";\n      break;\n    case LinkTarget.BLANK:\n      targetStr = \"_blank\";\n      break;\n    case LinkTarget.PARENT:\n      targetStr = \"_parent\";\n      break;\n    case LinkTarget.TOP:\n      targetStr = \"_top\";\n      break;\n  }\n  link.target = targetStr;\n  link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n}\nvar _pagesRefCache = /*#__PURE__*/new WeakMap();\nvar _goToDestinationHelper = /*#__PURE__*/new WeakSet();\nclass PDFLinkService {\n  constructor() {\n    let {\n      eventBus,\n      externalLinkTarget = null,\n      externalLinkRel = null,\n      ignoreDestinationZoom = false\n    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classPrivateMethodInitSpec(this, _goToDestinationHelper);\n    _classPrivateFieldInitSpec(this, _pagesRefCache, {\n      writable: true,\n      value: new Map()\n    });\n    this.eventBus = eventBus;\n    this.externalLinkTarget = externalLinkTarget;\n    this.externalLinkRel = externalLinkRel;\n    this.externalLinkEnabled = true;\n    this._ignoreDestinationZoom = ignoreDestinationZoom;\n    this.baseUrl = null;\n    this.pdfDocument = null;\n    this.pdfViewer = null;\n    this.pdfHistory = null;\n  }\n  setDocument(pdfDocument) {\n    let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    this.baseUrl = baseUrl;\n    this.pdfDocument = pdfDocument;\n    _classPrivateFieldGet(this, _pagesRefCache).clear();\n  }\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n  setHistory(pdfHistory) {\n    this.pdfHistory = pdfHistory;\n  }\n  get pagesCount() {\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\n  }\n  get page() {\n    return this.pdfViewer.currentPageNumber;\n  }\n  set page(value) {\n    this.pdfViewer.currentPageNumber = value;\n  }\n  get rotation() {\n    return this.pdfViewer.pagesRotation;\n  }\n  set rotation(value) {\n    this.pdfViewer.pagesRotation = value;\n  }\n  get isInPresentationMode() {\n    return this.pdfViewer.isInPresentationMode;\n  }\n  async goToDestination(dest) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let namedDest, explicitDest;\n    if (typeof dest === \"string\") {\n      namedDest = dest;\n      explicitDest = await this.pdfDocument.getDestination(dest);\n    } else {\n      namedDest = null;\n      explicitDest = await dest;\n    }\n    if (!Array.isArray(explicitDest)) {\n      console.error(`PDFLinkService.goToDestination: \"${explicitDest}\" is not ` + `a valid destination array, for dest=\"${dest}\".`);\n      return;\n    }\n    _classPrivateMethodGet(this, _goToDestinationHelper, _goToDestinationHelper2).call(this, dest, namedDest, explicitDest);\n  }\n  goToPage(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageNumber = typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0;\n    if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {\n      console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n      return;\n    }\n    if (this.pdfHistory) {\n      this.pdfHistory.pushCurrentPosition();\n      this.pdfHistory.pushPage(pageNumber);\n    }\n    this.pdfViewer.scrollPageIntoView({\n      pageNumber\n    });\n  }\n  addLinkAttributes(link, url) {\n    let newWindow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    addLinkAttributes(link, {\n      url,\n      target: newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n      rel: this.externalLinkRel,\n      enabled: this.externalLinkEnabled\n    });\n  }\n  getDestinationHash(dest) {\n    if (typeof dest === \"string\") {\n      if (dest.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(dest));\n      }\n    } else if (Array.isArray(dest)) {\n      const str = JSON.stringify(dest);\n      if (str.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(str));\n      }\n    }\n    return this.getAnchorUrl(\"\");\n  }\n  getAnchorUrl(anchor) {\n    return (this.baseUrl || \"\") + anchor;\n  }\n  setHash(hash) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let pageNumber, dest;\n    if (hash.includes(\"=\")) {\n      const params = (0, _ui_utils.parseQueryString)(hash);\n      if (params.has(\"search\")) {\n        this.eventBus.dispatch(\"findfromurlhash\", {\n          source: this,\n          query: params.get(\"search\").replace(/\"/g, \"\"),\n          phraseSearch: params.get(\"phrase\") === \"true\"\n        });\n      }\n      if (params.has(\"page\")) {\n        pageNumber = params.get(\"page\") | 0 || 1;\n      }\n      if (params.has(\"zoom\")) {\n        const zoomArgs = params.get(\"zoom\").split(\",\");\n        const zoomArg = zoomArgs[0];\n        const zoomArgNumber = parseFloat(zoomArg);\n        if (!zoomArg.includes(\"Fit\")) {\n          dest = [null, {\n            name: \"XYZ\"\n          }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];\n        } else {\n          if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n            dest = [null, {\n              name: zoomArg\n            }];\n          } else if (zoomArg === \"FitH\" || zoomArg === \"FitBH\" || zoomArg === \"FitV\" || zoomArg === \"FitBV\") {\n            dest = [null, {\n              name: zoomArg\n            }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];\n          } else if (zoomArg === \"FitR\") {\n            if (zoomArgs.length !== 5) {\n              console.error('PDFLinkService.setHash: Not enough parameters for \"FitR\".');\n            } else {\n              dest = [null, {\n                name: zoomArg\n              }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];\n            }\n          } else {\n            console.error(`PDFLinkService.setHash: \"${zoomArg}\" is not a valid zoom value.`);\n          }\n        }\n      }\n      if (dest) {\n        this.pdfViewer.scrollPageIntoView({\n          pageNumber: pageNumber || this.page,\n          destArray: dest,\n          allowNegativeOffset: true\n        });\n      } else if (pageNumber) {\n        this.page = pageNumber;\n      }\n      if (params.has(\"pagemode\")) {\n        this.eventBus.dispatch(\"pagemode\", {\n          source: this,\n          mode: params.get(\"pagemode\")\n        });\n      }\n      if (params.has(\"nameddest\")) {\n        this.goToDestination(params.get(\"nameddest\"));\n      }\n    } else {\n      dest = unescape(hash);\n      try {\n        dest = JSON.parse(dest);\n        if (!Array.isArray(dest)) {\n          dest = dest.toString();\n        }\n      } catch (ex) {}\n      if (typeof dest === \"string\" || _classStaticPrivateMethodGet(PDFLinkService, PDFLinkService, _isValidExplicitDestination).call(PDFLinkService, dest)) {\n        this.goToDestination(dest);\n        return;\n      }\n      console.error(`PDFLinkService.setHash: \"${unescape(hash)}\" is not a valid destination.`);\n    }\n  }\n  executeNamedAction(action) {\n    var _this$pdfHistory, _this$pdfHistory2;\n    switch (action) {\n      case \"GoBack\":\n        (_this$pdfHistory = this.pdfHistory) === null || _this$pdfHistory === void 0 ? void 0 : _this$pdfHistory.back();\n        break;\n      case \"GoForward\":\n        (_this$pdfHistory2 = this.pdfHistory) === null || _this$pdfHistory2 === void 0 ? void 0 : _this$pdfHistory2.forward();\n        break;\n      case \"NextPage\":\n        this.pdfViewer.nextPage();\n        break;\n      case \"PrevPage\":\n        this.pdfViewer.previousPage();\n        break;\n      case \"LastPage\":\n        this.page = this.pagesCount;\n        break;\n      case \"FirstPage\":\n        this.page = 1;\n        break;\n      default:\n        break;\n    }\n    this.eventBus.dispatch(\"namedaction\", {\n      source: this,\n      action\n    });\n  }\n  async executeSetOCGState(action) {\n    const pdfDocument = this.pdfDocument;\n    const optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    let operator;\n    for (const elem of action.state) {\n      switch (elem) {\n        case \"ON\":\n        case \"OFF\":\n        case \"Toggle\":\n          operator = elem;\n          continue;\n      }\n      switch (operator) {\n        case \"ON\":\n          optionalContentConfig.setVisibility(elem, true);\n          break;\n        case \"OFF\":\n          optionalContentConfig.setVisibility(elem, false);\n          break;\n        case \"Toggle\":\n          const group = optionalContentConfig.getGroup(elem);\n          if (group) {\n            optionalContentConfig.setVisibility(elem, !group.visible);\n          }\n          break;\n      }\n    }\n    this.pdfViewer.optionalContentConfigPromise = Promise.resolve(optionalContentConfig);\n  }\n  cachePageRef(pageNum, pageRef) {\n    if (!pageRef) {\n      return;\n    }\n    const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n    _classPrivateFieldGet(this, _pagesRefCache).set(refStr, pageNum);\n  }\n  _cachedPageNumber(pageRef) {\n    if (!pageRef) {\n      return null;\n    }\n    const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n    return _classPrivateFieldGet(this, _pagesRefCache).get(refStr) || null;\n  }\n  isPageVisible(pageNumber) {\n    return this.pdfViewer.isPageVisible(pageNumber);\n  }\n  isPageCached(pageNumber) {\n    return this.pdfViewer.isPageCached(pageNumber);\n  }\n}\nexports.PDFLinkService = PDFLinkService;\nfunction _goToDestinationHelper2(rawDest) {\n  let namedDest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  let explicitDest = arguments.length > 2 ? arguments[2] : undefined;\n  const destRef = explicitDest[0];\n  let pageNumber;\n  if (typeof destRef === \"object\" && destRef !== null) {\n    pageNumber = this._cachedPageNumber(destRef);\n    if (!pageNumber) {\n      this.pdfDocument.getPageIndex(destRef).then(pageIndex => {\n        this.cachePageRef(pageIndex + 1, destRef);\n        _classPrivateMethodGet(this, _goToDestinationHelper, _goToDestinationHelper2).call(this, rawDest, namedDest, explicitDest);\n      }).catch(() => {\n        console.error(`PDFLinkService.#goToDestinationHelper: \"${destRef}\" is not ` + `a valid page reference, for dest=\"${rawDest}\".`);\n      });\n      return;\n    }\n  } else if (Number.isInteger(destRef)) {\n    pageNumber = destRef + 1;\n  } else {\n    console.error(`PDFLinkService.#goToDestinationHelper: \"${destRef}\" is not ` + `a valid destination reference, for dest=\"${rawDest}\".`);\n    return;\n  }\n  if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n    console.error(`PDFLinkService.#goToDestinationHelper: \"${pageNumber}\" is not ` + `a valid page number, for dest=\"${rawDest}\".`);\n    return;\n  }\n  if (this.pdfHistory) {\n    this.pdfHistory.pushCurrentPosition();\n    this.pdfHistory.push({\n      namedDest,\n      explicitDest,\n      pageNumber\n    });\n  }\n  this.pdfViewer.scrollPageIntoView({\n    pageNumber,\n    destArray: explicitDest,\n    ignoreDestinationZoom: this._ignoreDestinationZoom\n  });\n}\nfunction _isValidExplicitDestination(dest) {\n  if (!Array.isArray(dest)) {\n    return false;\n  }\n  const destLength = dest.length;\n  if (destLength < 2) {\n    return false;\n  }\n  const page = dest[0];\n  if (!(typeof page === \"object\" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) {\n    return false;\n  }\n  const zoom = dest[1];\n  if (!(typeof zoom === \"object\" && typeof zoom.name === \"string\")) {\n    return false;\n  }\n  let allowNull = true;\n  switch (zoom.name) {\n    case \"XYZ\":\n      if (destLength !== 5) {\n        return false;\n      }\n      break;\n    case \"Fit\":\n    case \"FitB\":\n      return destLength === 2;\n    case \"FitH\":\n    case \"FitBH\":\n    case \"FitV\":\n    case \"FitBV\":\n      if (destLength !== 3) {\n        return false;\n      }\n      break;\n    case \"FitR\":\n      if (destLength !== 6) {\n        return false;\n      }\n      allowNull = false;\n      break;\n    default:\n      return false;\n  }\n  for (let i = 2; i < destLength; i++) {\n    const param = dest[i];\n    if (!(typeof param === \"number\" || allowNull && param === null)) {\n      return false;\n    }\n  }\n  return true;\n}\nclass SimpleLinkService {\n  constructor() {\n    this.externalLinkEnabled = true;\n  }\n  get pagesCount() {\n    return 0;\n  }\n  get page() {\n    return 0;\n  }\n  set page(value) {}\n  get rotation() {\n    return 0;\n  }\n  set rotation(value) {}\n  get isInPresentationMode() {\n    return false;\n  }\n  async goToDestination(dest) {}\n  goToPage(val) {}\n  addLinkAttributes(link, url) {\n    let newWindow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    addLinkAttributes(link, {\n      url,\n      enabled: this.externalLinkEnabled\n    });\n  }\n  getDestinationHash(dest) {\n    return \"#\";\n  }\n  getAnchorUrl(hash) {\n    return \"#\";\n  }\n  setHash(hash) {}\n  executeNamedAction(action) {}\n  executeSetOCGState(action) {}\n  cachePageRef(pageNum, pageRef) {}\n  isPageVisible(pageNumber) {\n    return true;\n  }\n  isPageCached(pageNumber) {\n    return true;\n  }\n}\nexports.SimpleLinkService = SimpleLinkService;\n\n/***/ }),\n/* 4 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultExternalServices = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdfjsLib = __webpack_require__(5);\nvar _app_options = __webpack_require__(2);\nvar _event_utils = __webpack_require__(6);\nvar _pdf_cursor_tools = __webpack_require__(7);\nvar _pdf_link_service = __webpack_require__(3);\nvar _annotation_editor_params = __webpack_require__(9);\nvar _overlay_manager = __webpack_require__(10);\nvar _password_prompt = __webpack_require__(12);\nvar _pdf_attachment_viewer = __webpack_require__(13);\nvar _pdf_document_properties = __webpack_require__(15);\nvar _pdf_find_bar = __webpack_require__(16);\nvar _pdf_find_controller = __webpack_require__(17);\nvar _pdf_history = __webpack_require__(19);\nvar _pdf_layer_viewer = __webpack_require__(20);\nvar _pdf_outline_viewer = __webpack_require__(21);\nvar _pdf_presentation_mode = __webpack_require__(22);\nvar _pdf_rendering_queue = __webpack_require__(23);\nvar _pdf_scripting_manager = __webpack_require__(24);\nvar _pdf_sidebar = __webpack_require__(25);\nvar _pdf_sidebar_resizer = __webpack_require__(26);\nvar _pdf_thumbnail_viewer = __webpack_require__(27);\nvar _pdf_viewer = __webpack_require__(29);\nvar _secondary_toolbar = __webpack_require__(39);\nvar _toolbar = __webpack_require__(40);\nvar _view_history = __webpack_require__(41);\nconst DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;\nconst FORCE_PAGES_LOADED_TIMEOUT = 10000;\nconst WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;\nconst ViewOnLoad = {\n  UNKNOWN: -1,\n  PREVIOUS: 0,\n  INITIAL: 1\n};\nconst ViewerCssTheme = {\n  AUTOMATIC: 0,\n  LIGHT: 1,\n  DARK: 2\n};\nconst KNOWN_VERSIONS = [\"1.0\", \"1.1\", \"1.2\", \"1.3\", \"1.4\", \"1.5\", \"1.6\", \"1.7\", \"1.8\", \"1.9\", \"2.0\", \"2.1\", \"2.2\", \"2.3\"];\nconst KNOWN_GENERATORS = [\"acrobat distiller\", \"acrobat pdfwriter\", \"adobe livecycle\", \"adobe pdf library\", \"adobe photoshop\", \"ghostscript\", \"tcpdf\", \"cairo\", \"dvipdfm\", \"dvips\", \"pdftex\", \"pdfkit\", \"itext\", \"prince\", \"quarkxpress\", \"mac os x\", \"microsoft\", \"openoffice\", \"oracle\", \"luradocument\", \"pdf-xchange\", \"antenna house\", \"aspose.cells\", \"fpdf\"];\nclass DefaultExternalServices {\n  constructor() {\n    throw new Error(\"Cannot initialize DefaultExternalServices.\");\n  }\n  static updateFindControlState(data) {}\n  static updateFindMatchesCount(data) {}\n  static initPassiveLoading(callbacks) {}\n  static reportTelemetry(data) {}\n  static createDownloadManager(options) {\n    throw new Error(\"Not implemented: createDownloadManager\");\n  }\n  static createPreferences() {\n    throw new Error(\"Not implemented: createPreferences\");\n  }\n  static createL10n(options) {\n    throw new Error(\"Not implemented: createL10n\");\n  }\n  static createScripting(options) {\n    throw new Error(\"Not implemented: createScripting\");\n  }\n  static get supportsIntegratedFind() {\n    return (0, _pdfjsLib.shadow)(this, \"supportsIntegratedFind\", false);\n  }\n  static get supportsDocumentFonts() {\n    return (0, _pdfjsLib.shadow)(this, \"supportsDocumentFonts\", true);\n  }\n  static get supportedMouseWheelZoomModifierKeys() {\n    return (0, _pdfjsLib.shadow)(this, \"supportedMouseWheelZoomModifierKeys\", {\n      ctrlKey: true,\n      metaKey: true\n    });\n  }\n  static get isInAutomation() {\n    return (0, _pdfjsLib.shadow)(this, \"isInAutomation\", false);\n  }\n  static updateEditorStates(data) {\n    throw new Error(\"Not implemented: updateEditorStates\");\n  }\n}\nexports.DefaultExternalServices = DefaultExternalServices;\nconst PDFViewerApplication = {\n  initialBookmark: document.location.hash.substring(1),\n  _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(),\n  appConfig: null,\n  pdfDocument: null,\n  pdfLoadingTask: null,\n  printService: null,\n  pdfViewer: null,\n  pdfThumbnailViewer: null,\n  pdfRenderingQueue: null,\n  pdfPresentationMode: null,\n  pdfDocumentProperties: null,\n  pdfLinkService: null,\n  pdfHistory: null,\n  pdfSidebar: null,\n  pdfSidebarResizer: null,\n  pdfOutlineViewer: null,\n  pdfAttachmentViewer: null,\n  pdfLayerViewer: null,\n  pdfCursorTools: null,\n  pdfScriptingManager: null,\n  store: null,\n  downloadManager: null,\n  overlayManager: null,\n  preferences: null,\n  toolbar: null,\n  secondaryToolbar: null,\n  eventBus: null,\n  l10n: null,\n  annotationEditorParams: null,\n  isInitialViewSet: false,\n  downloadComplete: false,\n  isViewerEmbedded: window.parent !== window,\n  url: \"\",\n  baseUrl: \"\",\n  _downloadUrl: \"\",\n  externalServices: DefaultExternalServices,\n  _boundEvents: Object.create(null),\n  documentInfo: null,\n  metadata: null,\n  _contentDispositionFilename: null,\n  _contentLength: null,\n  _saveInProgress: false,\n  _docStats: null,\n  _wheelUnusedTicks: 0,\n  _PDFBug: null,\n  _hasAnnotationEditors: false,\n  _title: document.title,\n  _printAnnotationStoragePromise: null,\n  async initialize(appConfig) {\n    this.preferences = this.externalServices.createPreferences();\n    this.appConfig = appConfig;\n    await this._readPreferences();\n    await this._parseHashParameters();\n    this._forceCssTheme();\n    await this._initializeL10n();\n    if (this.isViewerEmbedded && _app_options.AppOptions.get(\"externalLinkTarget\") === _pdf_link_service.LinkTarget.NONE) {\n      _app_options.AppOptions.set(\"externalLinkTarget\", _pdf_link_service.LinkTarget.TOP);\n    }\n    await this._initializeViewerComponents();\n    this.bindEvents();\n    this.bindWindowEvents();\n    const appContainer = appConfig.appContainer || document.documentElement;\n    this.l10n.translate(appContainer).then(() => {\n      this.eventBus.dispatch(\"localized\", {\n        source: this\n      });\n    });\n    this._initializedCapability.resolve();\n  },\n  async _readPreferences() {\n    if (_app_options.AppOptions.get(\"disablePreferences\")) {\n      return;\n    }\n    if (_app_options.AppOptions._hasUserOptions()) {\n      console.warn(\"_readPreferences: The Preferences may override manually set AppOptions; \" + 'please use the \"disablePreferences\"-option in order to prevent that.');\n    }\n    try {\n      _app_options.AppOptions.setAll(await this.preferences.getAll());\n    } catch (reason) {\n      console.error(`_readPreferences: \"${reason === null || reason === void 0 ? void 0 : reason.message}\".`);\n    }\n  },\n  async _parseHashParameters() {\n    if (!_app_options.AppOptions.get(\"pdfBugEnabled\")) {\n      return;\n    }\n    const hash = document.location.hash.substring(1);\n    if (!hash) {\n      return;\n    }\n    const {\n        mainContainer,\n        viewerContainer\n      } = this.appConfig,\n      params = (0, _ui_utils.parseQueryString)(hash);\n    if (params.get(\"disableworker\") === \"true\") {\n      try {\n        await loadFakeWorker();\n      } catch (ex) {\n        console.error(`_parseHashParameters: \"${ex.message}\".`);\n      }\n    }\n    if (params.has(\"disablerange\")) {\n      _app_options.AppOptions.set(\"disableRange\", params.get(\"disablerange\") === \"true\");\n    }\n    if (params.has(\"disablestream\")) {\n      _app_options.AppOptions.set(\"disableStream\", params.get(\"disablestream\") === \"true\");\n    }\n    if (params.has(\"disableautofetch\")) {\n      _app_options.AppOptions.set(\"disableAutoFetch\", params.get(\"disableautofetch\") === \"true\");\n    }\n    if (params.has(\"disablefontface\")) {\n      _app_options.AppOptions.set(\"disableFontFace\", params.get(\"disablefontface\") === \"true\");\n    }\n    if (params.has(\"disablehistory\")) {\n      _app_options.AppOptions.set(\"disableHistory\", params.get(\"disablehistory\") === \"true\");\n    }\n    if (params.has(\"verbosity\")) {\n      _app_options.AppOptions.set(\"verbosity\", params.get(\"verbosity\") | 0);\n    }\n    if (params.has(\"textlayer\")) {\n      switch (params.get(\"textlayer\")) {\n        case \"off\":\n          _app_options.AppOptions.set(\"textLayerMode\", _ui_utils.TextLayerMode.DISABLE);\n          break;\n        case \"visible\":\n        case \"shadow\":\n        case \"hover\":\n          viewerContainer.classList.add(`textLayer-${params.get(\"textlayer\")}`);\n          try {\n            await loadPDFBug(this);\n            this._PDFBug.loadCSS();\n          } catch (ex) {\n            console.error(`_parseHashParameters: \"${ex.message}\".`);\n          }\n          break;\n      }\n    }\n    if (params.has(\"pdfbug\")) {\n      _app_options.AppOptions.set(\"pdfBug\", true);\n      _app_options.AppOptions.set(\"fontExtraProperties\", true);\n      const enabled = params.get(\"pdfbug\").split(\",\");\n      try {\n        await loadPDFBug(this);\n        this._PDFBug.init({\n          OPS: _pdfjsLib.OPS\n        }, mainContainer, enabled);\n      } catch (ex) {\n        console.error(`_parseHashParameters: \"${ex.message}\".`);\n      }\n    }\n    if (params.has(\"locale\")) {\n      _app_options.AppOptions.set(\"locale\", params.get(\"locale\"));\n    }\n  },\n  async _initializeL10n() {\n    this.l10n = this.externalServices.createL10n({\n      locale: _app_options.AppOptions.get(\"locale\")\n    });\n    const dir = await this.l10n.getDirection();\n    document.getElementsByTagName(\"html\")[0].dir = dir;\n  },\n  _forceCssTheme() {\n    const cssTheme = _app_options.AppOptions.get(\"viewerCssTheme\");\n    if (cssTheme === ViewerCssTheme.AUTOMATIC || !Object.values(ViewerCssTheme).includes(cssTheme)) {\n      return;\n    }\n    try {\n      const styleSheet = document.styleSheets[0];\n      const cssRules = (styleSheet === null || styleSheet === void 0 ? void 0 : styleSheet.cssRules) || [];\n      for (let i = 0, ii = cssRules.length; i < ii; i++) {\n        var _rule$media;\n        const rule = cssRules[i];\n        if (rule instanceof CSSMediaRule && ((_rule$media = rule.media) === null || _rule$media === void 0 ? void 0 : _rule$media[0]) === \"(prefers-color-scheme: dark)\") {\n          if (cssTheme === ViewerCssTheme.LIGHT) {\n            styleSheet.deleteRule(i);\n            return;\n          }\n          const darkRules = /^@media \\(prefers-color-scheme: dark\\) {\\n\\s*([\\w\\s-.,:;/\\\\{}()]+)\\n}$/.exec(rule.cssText);\n          if (darkRules !== null && darkRules !== void 0 && darkRules[1]) {\n            styleSheet.deleteRule(i);\n            styleSheet.insertRule(darkRules[1], i);\n          }\n          return;\n        }\n      }\n    } catch (reason) {\n      console.error(`_forceCssTheme: \"${reason === null || reason === void 0 ? void 0 : reason.message}\".`);\n    }\n  },\n  async _initializeViewerComponents() {\n    const {\n      appConfig,\n      externalServices\n    } = this;\n    const eventBus = externalServices.isInAutomation ? new _event_utils.AutomationEventBus() : new _event_utils.EventBus();\n    this.eventBus = eventBus;\n    this.overlayManager = new _overlay_manager.OverlayManager();\n    const pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();\n    pdfRenderingQueue.onIdle = this._cleanup.bind(this);\n    this.pdfRenderingQueue = pdfRenderingQueue;\n    const pdfLinkService = new _pdf_link_service.PDFLinkService({\n      eventBus,\n      externalLinkTarget: _app_options.AppOptions.get(\"externalLinkTarget\"),\n      externalLinkRel: _app_options.AppOptions.get(\"externalLinkRel\"),\n      ignoreDestinationZoom: _app_options.AppOptions.get(\"ignoreDestinationZoom\")\n    });\n    this.pdfLinkService = pdfLinkService;\n    const downloadManager = externalServices.createDownloadManager();\n    this.downloadManager = downloadManager;\n    const findController = new _pdf_find_controller.PDFFindController({\n      linkService: pdfLinkService,\n      eventBus\n    });\n    this.findController = findController;\n    const pdfScriptingManager = new _pdf_scripting_manager.PDFScriptingManager({\n      eventBus,\n      sandboxBundleSrc: _app_options.AppOptions.get(\"sandboxBundleSrc\"),\n      scriptingFactory: externalServices,\n      docPropertiesLookup: this._scriptingDocProperties.bind(this)\n    });\n    this.pdfScriptingManager = pdfScriptingManager;\n    const container = appConfig.mainContainer,\n      viewer = appConfig.viewerContainer;\n    const annotationEditorMode = _app_options.AppOptions.get(\"annotationEditorMode\");\n    const pageColors = _app_options.AppOptions.get(\"forcePageColors\") || window.matchMedia(\"(forced-colors: active)\").matches ? {\n      background: _app_options.AppOptions.get(\"pageColorsBackground\"),\n      foreground: _app_options.AppOptions.get(\"pageColorsForeground\")\n    } : null;\n    this.pdfViewer = new _pdf_viewer.PDFViewer({\n      container,\n      viewer,\n      eventBus,\n      renderingQueue: pdfRenderingQueue,\n      linkService: pdfLinkService,\n      downloadManager,\n      findController,\n      scriptingManager: _app_options.AppOptions.get(\"enableScripting\") && pdfScriptingManager,\n      renderer: _app_options.AppOptions.get(\"renderer\"),\n      l10n: this.l10n,\n      textLayerMode: _app_options.AppOptions.get(\"textLayerMode\"),\n      annotationMode: _app_options.AppOptions.get(\"annotationMode\"),\n      annotationEditorMode,\n      imageResourcesPath: _app_options.AppOptions.get(\"imageResourcesPath\"),\n      enablePrintAutoRotate: _app_options.AppOptions.get(\"enablePrintAutoRotate\"),\n      useOnlyCssZoom: _app_options.AppOptions.get(\"useOnlyCssZoom\"),\n      maxCanvasPixels: _app_options.AppOptions.get(\"maxCanvasPixels\"),\n      enablePermissions: _app_options.AppOptions.get(\"enablePermissions\"),\n      pageColors\n    });\n    pdfRenderingQueue.setViewer(this.pdfViewer);\n    pdfLinkService.setViewer(this.pdfViewer);\n    pdfScriptingManager.setViewer(this.pdfViewer);\n    this.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({\n      container: appConfig.sidebar.thumbnailView,\n      eventBus,\n      renderingQueue: pdfRenderingQueue,\n      linkService: pdfLinkService,\n      l10n: this.l10n,\n      pageColors\n    });\n    pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);\n    if (!this.isViewerEmbedded && !_app_options.AppOptions.get(\"disableHistory\")) {\n      this.pdfHistory = new _pdf_history.PDFHistory({\n        linkService: pdfLinkService,\n        eventBus\n      });\n      pdfLinkService.setHistory(this.pdfHistory);\n    }\n    if (!this.supportsIntegratedFind) {\n      this.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, this.l10n);\n    }\n    if (annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) {\n      this.annotationEditorParams = new _annotation_editor_params.AnnotationEditorParams(appConfig.annotationEditorParams, eventBus);\n    } else {\n      for (const element of [document.getElementById(\"editorModeButtons\"), document.getElementById(\"editorModeSeparator\")]) {\n        element.hidden = true;\n      }\n    }\n    this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n, () => {\n      return this._docFilename;\n    });\n    this.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({\n      container,\n      eventBus,\n      cursorToolOnLoad: _app_options.AppOptions.get(\"cursorToolOnLoad\")\n    });\n    this.toolbar = new _toolbar.Toolbar(appConfig.toolbar, eventBus, this.l10n);\n    this.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, eventBus, this.externalServices);\n    if (this.supportsFullscreen) {\n      this.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({\n        container,\n        pdfViewer: this.pdfViewer,\n        eventBus\n      });\n    }\n    this.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, this.overlayManager, this.l10n, this.isViewerEmbedded);\n    this.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({\n      container: appConfig.sidebar.outlineView,\n      eventBus,\n      linkService: pdfLinkService,\n      downloadManager\n    });\n    this.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({\n      container: appConfig.sidebar.attachmentsView,\n      eventBus,\n      downloadManager\n    });\n    this.pdfLayerViewer = new _pdf_layer_viewer.PDFLayerViewer({\n      container: appConfig.sidebar.layersView,\n      eventBus,\n      l10n: this.l10n\n    });\n    this.pdfSidebar = new _pdf_sidebar.PDFSidebar({\n      elements: appConfig.sidebar,\n      pdfViewer: this.pdfViewer,\n      pdfThumbnailViewer: this.pdfThumbnailViewer,\n      eventBus,\n      l10n: this.l10n\n    });\n    this.pdfSidebar.onToggled = this.forceRendering.bind(this);\n    this.pdfSidebarResizer = new _pdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, this.l10n);\n  },\n  run(config) {\n    this.initialize(config).then(webViewerInitialized);\n  },\n  get initialized() {\n    return this._initializedCapability.settled;\n  },\n  get initializedPromise() {\n    return this._initializedCapability.promise;\n  },\n  zoomIn(steps) {\n    if (this.pdfViewer.isInPresentationMode) {\n      return;\n    }\n    this.pdfViewer.increaseScale(steps);\n  },\n  zoomOut(steps) {\n    if (this.pdfViewer.isInPresentationMode) {\n      return;\n    }\n    this.pdfViewer.decreaseScale(steps);\n  },\n  zoomReset() {\n    if (this.pdfViewer.isInPresentationMode) {\n      return;\n    }\n    this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\n  },\n  get pagesCount() {\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\n  },\n  get page() {\n    return this.pdfViewer.currentPageNumber;\n  },\n  set page(val) {\n    this.pdfViewer.currentPageNumber = val;\n  },\n  get supportsPrinting() {\n    return PDFPrintServiceFactory.instance.supportsPrinting;\n  },\n  get supportsFullscreen() {\n    return (0, _pdfjsLib.shadow)(this, \"supportsFullscreen\", document.fullscreenEnabled);\n  },\n  get supportsIntegratedFind() {\n    return this.externalServices.supportsIntegratedFind;\n  },\n  get supportsDocumentFonts() {\n    return this.externalServices.supportsDocumentFonts;\n  },\n  get loadingBar() {\n    const bar = new _ui_utils.ProgressBar(\"loadingBar\");\n    return (0, _pdfjsLib.shadow)(this, \"loadingBar\", bar);\n  },\n  get supportedMouseWheelZoomModifierKeys() {\n    return this.externalServices.supportedMouseWheelZoomModifierKeys;\n  },\n  initPassiveLoading() {\n    throw new Error(\"Not implemented: initPassiveLoading\");\n  },\n  setTitleUsingUrl() {\n    let url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n    let downloadUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    this.url = url;\n    this.baseUrl = url.split(\"#\")[0];\n    if (downloadUrl) {\n      this._downloadUrl = downloadUrl === url ? this.baseUrl : downloadUrl.split(\"#\")[0];\n    }\n    let title = (0, _pdfjsLib.getPdfFilenameFromUrl)(url, \"\");\n    if (!title) {\n      try {\n        title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url;\n      } catch (ex) {\n        title = url;\n      }\n    }\n    this.setTitle(title);\n  },\n  setTitle() {\n    let title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._title;\n    this._title = title;\n    if (this.isViewerEmbedded) {\n      return;\n    }\n    const editorIndicator = this._hasAnnotationEditors && !this.pdfRenderingQueue.printing;\n    document.title = `${editorIndicator ? \"* \" : \"\"}${title}`;\n  },\n  get _docFilename() {\n    return this._contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(this.url);\n  },\n  _hideViewBookmark() {\n    this.appConfig.secondaryToolbar.viewBookmarkButton.hidden = true;\n  },\n  async close() {\n    var _this$pdfDocument, _this$pdfHistory, _this$findBar, _this$_PDFBug;\n    this._unblockDocumentLoadEvent();\n    this._hideViewBookmark();\n    if (!this.pdfLoadingTask) {\n      return;\n    }\n    if (((_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage.size) > 0 && this._annotationStorageModified) {\n      try {\n        await this.save();\n      } catch (reason) {}\n    }\n    const promises = [];\n    promises.push(this.pdfLoadingTask.destroy());\n    this.pdfLoadingTask = null;\n    if (this.pdfDocument) {\n      this.pdfDocument = null;\n      this.pdfThumbnailViewer.setDocument(null);\n      this.pdfViewer.setDocument(null);\n      this.pdfLinkService.setDocument(null);\n      this.pdfDocumentProperties.setDocument(null);\n    }\n    this.pdfLinkService.externalLinkEnabled = true;\n    this.store = null;\n    this.isInitialViewSet = false;\n    this.downloadComplete = false;\n    this.url = \"\";\n    this.baseUrl = \"\";\n    this._downloadUrl = \"\";\n    this.documentInfo = null;\n    this.metadata = null;\n    this._contentDispositionFilename = null;\n    this._contentLength = null;\n    this._saveInProgress = false;\n    this._docStats = null;\n    this._hasAnnotationEditors = false;\n    promises.push(this.pdfScriptingManager.destroyPromise);\n    this.setTitle();\n    this.pdfSidebar.reset();\n    this.pdfOutlineViewer.reset();\n    this.pdfAttachmentViewer.reset();\n    this.pdfLayerViewer.reset();\n    (_this$pdfHistory = this.pdfHistory) === null || _this$pdfHistory === void 0 ? void 0 : _this$pdfHistory.reset();\n    (_this$findBar = this.findBar) === null || _this$findBar === void 0 ? void 0 : _this$findBar.reset();\n    this.toolbar.reset();\n    this.secondaryToolbar.reset();\n    (_this$_PDFBug = this._PDFBug) === null || _this$_PDFBug === void 0 ? void 0 : _this$_PDFBug.cleanup();\n    await Promise.all(promises);\n  },\n  async open(file, args) {\n    if (this.pdfLoadingTask) {\n      await this.close();\n    }\n    const workerParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER);\n    for (const key in workerParameters) {\n      _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key];\n    }\n    const parameters = Object.create(null);\n    if (typeof file === \"string\") {\n      this.setTitleUsingUrl(file, file);\n      parameters.url = file;\n    } else if (file && \"byteLength\" in file) {\n      parameters.data = file;\n    } else if (file.url && file.originalUrl) {\n      this.setTitleUsingUrl(file.originalUrl, file.url);\n      parameters.url = file.url;\n    }\n    const apiParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.API);\n    for (const key in apiParameters) {\n      let value = apiParameters[key];\n      if (key === \"docBaseUrl\" && !value) {}\n      parameters[key] = value;\n    }\n    if (args) {\n      for (const key in args) {\n        parameters[key] = args[key];\n      }\n    }\n    const loadingTask = (0, _pdfjsLib.getDocument)(parameters);\n    this.pdfLoadingTask = loadingTask;\n    loadingTask.onPassword = (updateCallback, reason) => {\n      if (this.isViewerEmbedded) {\n        this._unblockDocumentLoadEvent();\n      }\n      this.pdfLinkService.externalLinkEnabled = false;\n      this.passwordPrompt.setUpdateCallback(updateCallback, reason);\n      this.passwordPrompt.open();\n    };\n    loadingTask.onProgress = _ref => {\n      let {\n        loaded,\n        total\n      } = _ref;\n      this.progress(loaded / total);\n    };\n    loadingTask.onUnsupportedFeature = this.fallback.bind(this);\n    return loadingTask.promise.then(pdfDocument => {\n      this.load(pdfDocument);\n    }, reason => {\n      if (loadingTask !== this.pdfLoadingTask) {\n        return undefined;\n      }\n      let key = \"loading_error\";\n      if (reason instanceof _pdfjsLib.InvalidPDFException) {\n        key = \"invalid_file_error\";\n      } else if (reason instanceof _pdfjsLib.MissingPDFException) {\n        key = \"missing_file_error\";\n      } else if (reason instanceof _pdfjsLib.UnexpectedResponseException) {\n        key = \"unexpected_response_error\";\n      }\n      return this.l10n.get(key).then(msg => {\n        this._documentError(msg, {\n          message: reason === null || reason === void 0 ? void 0 : reason.message\n        });\n        throw reason;\n      });\n    });\n  },\n  _ensureDownloadComplete() {\n    if (this.pdfDocument && this.downloadComplete) {\n      return;\n    }\n    throw new Error(\"PDF document not downloaded.\");\n  },\n  async download() {\n    const url = this._downloadUrl,\n      filename = this._docFilename;\n    try {\n      this._ensureDownloadComplete();\n      const data = await this.pdfDocument.getData();\n      const blob = new Blob([data], {\n        type: \"application/pdf\"\n      });\n      await this.downloadManager.download(blob, url, filename);\n    } catch (reason) {\n      await this.downloadManager.downloadUrl(url, filename);\n    }\n  },\n  async save() {\n    if (this._saveInProgress) {\n      return;\n    }\n    this._saveInProgress = true;\n    await this.pdfScriptingManager.dispatchWillSave();\n    const url = this._downloadUrl,\n      filename = this._docFilename;\n    try {\n      this._ensureDownloadComplete();\n      const data = await this.pdfDocument.saveDocument();\n      const blob = new Blob([data], {\n        type: \"application/pdf\"\n      });\n      await this.downloadManager.download(blob, url, filename);\n    } catch (reason) {\n      console.error(`Error when saving the document: ${reason.message}`);\n      await this.download();\n    } finally {\n      await this.pdfScriptingManager.dispatchDidSave();\n      this._saveInProgress = false;\n    }\n    if (this._hasAnnotationEditors) {\n      this.externalServices.reportTelemetry({\n        type: \"editing\",\n        data: {\n          type: \"save\"\n        }\n      });\n    }\n  },\n  downloadOrSave() {\n    var _this$pdfDocument2;\n    if (((_this$pdfDocument2 = this.pdfDocument) === null || _this$pdfDocument2 === void 0 ? void 0 : _this$pdfDocument2.annotationStorage.size) > 0) {\n      this.save();\n    } else {\n      this.download();\n    }\n  },\n  fallback(featureId) {\n    this.externalServices.reportTelemetry({\n      type: \"unsupportedFeature\",\n      featureId\n    });\n  },\n  _documentError(message) {\n    let moreInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    this._unblockDocumentLoadEvent();\n    this._otherError(message, moreInfo);\n    this.eventBus.dispatch(\"documenterror\", {\n      source: this,\n      message,\n      reason: (moreInfo === null || moreInfo === void 0 ? void 0 : moreInfo.message) ?? null\n    });\n  },\n  _otherError(message) {\n    let moreInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    const moreInfoText = [`PDF.js v${_pdfjsLib.version || \"?\"} (build: ${_pdfjsLib.build || \"?\"})`];\n    if (moreInfo) {\n      moreInfoText.push(`Message: ${moreInfo.message}`);\n      if (moreInfo.stack) {\n        moreInfoText.push(`Stack: ${moreInfo.stack}`);\n      } else {\n        if (moreInfo.filename) {\n          moreInfoText.push(`File: ${moreInfo.filename}`);\n        }\n        if (moreInfo.lineNumber) {\n          moreInfoText.push(`Line: ${moreInfo.lineNumber}`);\n        }\n      }\n    }\n    console.error(`${message}\\n\\n${moreInfoText.join(\"\\n\")}`);\n    this.fallback();\n  },\n  progress(level) {\n    var _this$pdfDocument3;\n    if (this.downloadComplete) {\n      return;\n    }\n    const percent = Math.round(level * 100);\n    if (percent <= this.loadingBar.percent) {\n      return;\n    }\n    this.loadingBar.percent = percent;\n    const disableAutoFetch = ((_this$pdfDocument3 = this.pdfDocument) === null || _this$pdfDocument3 === void 0 ? void 0 : _this$pdfDocument3.loadingParams.disableAutoFetch) ?? _app_options.AppOptions.get(\"disableAutoFetch\");\n    if (!disableAutoFetch || isNaN(percent)) {\n      return;\n    }\n    if (this.disableAutoFetchLoadingBarTimeout) {\n      clearTimeout(this.disableAutoFetchLoadingBarTimeout);\n      this.disableAutoFetchLoadingBarTimeout = null;\n    }\n    this.loadingBar.show();\n    this.disableAutoFetchLoadingBarTimeout = setTimeout(() => {\n      this.loadingBar.hide();\n      this.disableAutoFetchLoadingBarTimeout = null;\n    }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT);\n  },\n  load(pdfDocument) {\n    this.pdfDocument = pdfDocument;\n    pdfDocument.getDownloadInfo().then(_ref2 => {\n      let {\n        length\n      } = _ref2;\n      this._contentLength = length;\n      this.downloadComplete = true;\n      this.loadingBar.hide();\n      firstPagePromise.then(() => {\n        this.eventBus.dispatch(\"documentloaded\", {\n          source: this\n        });\n      });\n    });\n    const pageLayoutPromise = pdfDocument.getPageLayout().catch(function () {});\n    const pageModePromise = pdfDocument.getPageMode().catch(function () {});\n    const openActionPromise = pdfDocument.getOpenAction().catch(function () {});\n    this.toolbar.setPagesCount(pdfDocument.numPages, false);\n    this.secondaryToolbar.setPagesCount(pdfDocument.numPages);\n    let baseDocumentUrl;\n    baseDocumentUrl = null;\n    this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);\n    this.pdfDocumentProperties.setDocument(pdfDocument);\n    const pdfViewer = this.pdfViewer;\n    pdfViewer.setDocument(pdfDocument);\n    const {\n      firstPagePromise,\n      onePageRendered,\n      pagesPromise\n    } = pdfViewer;\n    const pdfThumbnailViewer = this.pdfThumbnailViewer;\n    pdfThumbnailViewer.setDocument(pdfDocument);\n    const storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprints[0])).getMultiple({\n      page: null,\n      zoom: _ui_utils.DEFAULT_SCALE_VALUE,\n      scrollLeft: \"0\",\n      scrollTop: \"0\",\n      rotation: null,\n      sidebarView: _ui_utils.SidebarView.UNKNOWN,\n      scrollMode: _ui_utils.ScrollMode.UNKNOWN,\n      spreadMode: _ui_utils.SpreadMode.UNKNOWN\n    }).catch(() => {\n      return Object.create(null);\n    });\n    firstPagePromise.then(pdfPage => {\n      this.loadingBar.setWidth(this.appConfig.viewerContainer);\n      this._initializeAnnotationStorageCallbacks(pdfDocument);\n      Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async _ref3 => {\n        let [timeStamp, stored, pageLayout, pageMode, openAction] = _ref3;\n        const viewOnLoad = _app_options.AppOptions.get(\"viewOnLoad\");\n        this._initializePdfHistory({\n          fingerprint: pdfDocument.fingerprints[0],\n          viewOnLoad,\n          initialDest: openAction === null || openAction === void 0 ? void 0 : openAction.dest\n        });\n        const initialBookmark = this.initialBookmark;\n        const zoom = _app_options.AppOptions.get(\"defaultZoomValue\");\n        let hash = zoom ? `zoom=${zoom}` : null;\n        let rotation = null;\n        let sidebarView = _app_options.AppOptions.get(\"sidebarViewOnLoad\");\n        let scrollMode = _app_options.AppOptions.get(\"scrollModeOnLoad\");\n        let spreadMode = _app_options.AppOptions.get(\"spreadModeOnLoad\");\n        if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) {\n          hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;\n          rotation = parseInt(stored.rotation, 10);\n          if (sidebarView === _ui_utils.SidebarView.UNKNOWN) {\n            sidebarView = stored.sidebarView | 0;\n          }\n          if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {\n            scrollMode = stored.scrollMode | 0;\n          }\n          if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {\n            spreadMode = stored.spreadMode | 0;\n          }\n        }\n        if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) {\n          sidebarView = (0, _ui_utils.apiPageModeToSidebarView)(pageMode);\n        }\n        if (pageLayout && scrollMode === _ui_utils.ScrollMode.UNKNOWN && spreadMode === _ui_utils.SpreadMode.UNKNOWN) {\n          const modes = (0, _ui_utils.apiPageLayoutToViewerModes)(pageLayout);\n          spreadMode = modes.spreadMode;\n        }\n        this.setInitialView(hash, {\n          rotation,\n          sidebarView,\n          scrollMode,\n          spreadMode\n        });\n        this.eventBus.dispatch(\"documentinit\", {\n          source: this\n        });\n        if (!this.isViewerEmbedded) {\n          pdfViewer.focus();\n        }\n        await Promise.race([pagesPromise, new Promise(resolve => {\n          setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);\n        })]);\n        if (!initialBookmark && !hash) {\n          return;\n        }\n        if (pdfViewer.hasEqualPageSizes) {\n          return;\n        }\n        this.initialBookmark = initialBookmark;\n        pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;\n        this.setInitialView(hash);\n      }).catch(() => {\n        this.setInitialView();\n      }).then(function () {\n        pdfViewer.update();\n      });\n    });\n    pagesPromise.then(() => {\n      this._unblockDocumentLoadEvent();\n      this._initializeAutoPrint(pdfDocument, openActionPromise);\n    }, reason => {\n      this.l10n.get(\"loading_error\").then(msg => {\n        this._documentError(msg, {\n          message: reason === null || reason === void 0 ? void 0 : reason.message\n        });\n      });\n    });\n    onePageRendered.then(data => {\n      this.externalServices.reportTelemetry({\n        type: \"pageInfo\",\n        timestamp: data.timestamp\n      });\n      pdfDocument.getOutline().then(outline => {\n        if (pdfDocument !== this.pdfDocument) {\n          return;\n        }\n        this.pdfOutlineViewer.render({\n          outline,\n          pdfDocument\n        });\n      });\n      pdfDocument.getAttachments().then(attachments => {\n        if (pdfDocument !== this.pdfDocument) {\n          return;\n        }\n        this.pdfAttachmentViewer.render({\n          attachments\n        });\n      });\n      pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => {\n        if (pdfDocument !== this.pdfDocument) {\n          return;\n        }\n        this.pdfLayerViewer.render({\n          optionalContentConfig,\n          pdfDocument\n        });\n      });\n    });\n    this._initializePageLabels(pdfDocument);\n    this._initializeMetadata(pdfDocument);\n  },\n  async _scriptingDocProperties(pdfDocument) {\n    var _this$metadata, _this$metadata2;\n    if (!this.documentInfo) {\n      await new Promise(resolve => {\n        this.eventBus._on(\"metadataloaded\", resolve, {\n          once: true\n        });\n      });\n      if (pdfDocument !== this.pdfDocument) {\n        return null;\n      }\n    }\n    if (!this._contentLength) {\n      await new Promise(resolve => {\n        this.eventBus._on(\"documentloaded\", resolve, {\n          once: true\n        });\n      });\n      if (pdfDocument !== this.pdfDocument) {\n        return null;\n      }\n    }\n    return {\n      ...this.documentInfo,\n      baseURL: this.baseUrl,\n      filesize: this._contentLength,\n      filename: this._docFilename,\n      metadata: (_this$metadata = this.metadata) === null || _this$metadata === void 0 ? void 0 : _this$metadata.getRaw(),\n      authors: (_this$metadata2 = this.metadata) === null || _this$metadata2 === void 0 ? void 0 : _this$metadata2.get(\"dc:creator\"),\n      numPages: this.pagesCount,\n      URL: this.url\n    };\n  },\n  async _initializeAutoPrint(pdfDocument, openActionPromise) {\n    const [openAction, javaScript] = await Promise.all([openActionPromise, !this.pdfViewer.enableScripting ? pdfDocument.getJavaScript() : null]);\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    let triggerAutoPrint = false;\n    if ((openAction === null || openAction === void 0 ? void 0 : openAction.action) === \"Print\") {\n      triggerAutoPrint = true;\n    }\n    if (javaScript) {\n      javaScript.some(js => {\n        if (!js) {\n          return false;\n        }\n        console.warn(\"Warning: JavaScript support is not enabled\");\n        this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript);\n        return true;\n      });\n      if (!triggerAutoPrint) {\n        for (const js of javaScript) {\n          if (js && _ui_utils.AutoPrintRegExp.test(js)) {\n            triggerAutoPrint = true;\n            break;\n          }\n        }\n      }\n    }\n    if (triggerAutoPrint) {\n      this.triggerPrinting();\n    }\n  },\n  async _initializeMetadata(pdfDocument) {\n    const {\n      info,\n      metadata,\n      contentDispositionFilename,\n      contentLength\n    } = await pdfDocument.getMetadata();\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    this.documentInfo = info;\n    this.metadata = metadata;\n    this._contentDispositionFilename ?? (this._contentDispositionFilename = contentDispositionFilename);\n    this._contentLength ?? (this._contentLength = contentLength);\n    console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || \"-\").trim()} / ${(info.Creator || \"-\").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || \"?\"} [${_pdfjsLib.build || \"?\"}])`);\n    let pdfTitle = info.Title;\n    const metadataTitle = metadata === null || metadata === void 0 ? void 0 : metadata.get(\"dc:title\");\n    if (metadataTitle) {\n      if (metadataTitle !== \"Untitled\" && !/[\\uFFF0-\\uFFFF]/g.test(metadataTitle)) {\n        pdfTitle = metadataTitle;\n      }\n    }\n    if (pdfTitle) {\n      this.setTitle(`${pdfTitle} - ${this._contentDispositionFilename || this._title}`);\n    } else if (this._contentDispositionFilename) {\n      this.setTitle(this._contentDispositionFilename);\n    }\n    if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) {\n      if (pdfDocument.loadingParams.enableXfa) {\n        console.warn(\"Warning: XFA Foreground documents are not supported\");\n      } else {\n        console.warn(\"Warning: XFA support is not enabled\");\n      }\n      this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);\n    } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderForms) {\n      console.warn(\"Warning: Interactive form support is not enabled\");\n      this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);\n    }\n    if (info.IsSignaturesPresent) {\n      console.warn(\"Warning: Digital signatures validation is not supported\");\n      this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.signatures);\n    }\n    let versionId = \"other\";\n    if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {\n      versionId = `v${info.PDFFormatVersion.replace(\".\", \"_\")}`;\n    }\n    let generatorId = \"other\";\n    if (info.Producer) {\n      const producer = info.Producer.toLowerCase();\n      KNOWN_GENERATORS.some(function (generator) {\n        if (!producer.includes(generator)) {\n          return false;\n        }\n        generatorId = generator.replace(/[ .-]/g, \"_\");\n        return true;\n      });\n    }\n    let formType = null;\n    if (info.IsXFAPresent) {\n      formType = \"xfa\";\n    } else if (info.IsAcroFormPresent) {\n      formType = \"acroform\";\n    }\n    this.externalServices.reportTelemetry({\n      type: \"documentInfo\",\n      version: versionId,\n      generator: generatorId,\n      formType\n    });\n    this.eventBus.dispatch(\"metadataloaded\", {\n      source: this\n    });\n  },\n  async _initializePageLabels(pdfDocument) {\n    const labels = await pdfDocument.getPageLabels();\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    if (!labels || _app_options.AppOptions.get(\"disablePageLabels\")) {\n      return;\n    }\n    const numLabels = labels.length;\n    let standardLabels = 0,\n      emptyLabels = 0;\n    for (let i = 0; i < numLabels; i++) {\n      const label = labels[i];\n      if (label === (i + 1).toString()) {\n        standardLabels++;\n      } else if (label === \"\") {\n        emptyLabels++;\n      } else {\n        break;\n      }\n    }\n    if (standardLabels >= numLabels || emptyLabels >= numLabels) {\n      return;\n    }\n    const {\n      pdfViewer,\n      pdfThumbnailViewer,\n      toolbar\n    } = this;\n    pdfViewer.setPageLabels(labels);\n    pdfThumbnailViewer.setPageLabels(labels);\n    toolbar.setPagesCount(numLabels, true);\n    toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);\n  },\n  _initializePdfHistory(_ref4) {\n    let {\n      fingerprint,\n      viewOnLoad,\n      initialDest = null\n    } = _ref4;\n    if (!this.pdfHistory) {\n      return;\n    }\n    this.pdfHistory.initialize({\n      fingerprint,\n      resetHistory: viewOnLoad === ViewOnLoad.INITIAL,\n      updateUrl: _app_options.AppOptions.get(\"historyUpdateUrl\")\n    });\n    if (this.pdfHistory.initialBookmark) {\n      this.initialBookmark = this.pdfHistory.initialBookmark;\n      this.initialRotation = this.pdfHistory.initialRotation;\n    }\n    if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) {\n      this.initialBookmark = JSON.stringify(initialDest);\n      this.pdfHistory.push({\n        explicitDest: initialDest,\n        pageNumber: null\n      });\n    }\n  },\n  _initializeAnnotationStorageCallbacks(pdfDocument) {\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    const {\n      annotationStorage\n    } = pdfDocument;\n    annotationStorage.onSetModified = () => {\n      window.addEventListener(\"beforeunload\", beforeUnload);\n      this._annotationStorageModified = true;\n    };\n    annotationStorage.onResetModified = () => {\n      window.removeEventListener(\"beforeunload\", beforeUnload);\n      delete this._annotationStorageModified;\n    };\n    annotationStorage.onAnnotationEditor = typeStr => {\n      this._hasAnnotationEditors = !!typeStr;\n      this.setTitle();\n      if (typeStr) {\n        this.externalServices.reportTelemetry({\n          type: \"editing\",\n          data: {\n            type: typeStr\n          }\n        });\n      }\n    };\n  },\n  setInitialView(storedHash) {\n    let {\n      rotation,\n      sidebarView,\n      scrollMode,\n      spreadMode\n    } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const setRotation = angle => {\n      if ((0, _ui_utils.isValidRotation)(angle)) {\n        this.pdfViewer.pagesRotation = angle;\n      }\n    };\n    const setViewerModes = (scroll, spread) => {\n      if ((0, _ui_utils.isValidScrollMode)(scroll)) {\n        this.pdfViewer.scrollMode = scroll;\n      }\n      if ((0, _ui_utils.isValidSpreadMode)(spread)) {\n        this.pdfViewer.spreadMode = spread;\n      }\n    };\n    this.isInitialViewSet = true;\n    this.pdfSidebar.setInitialView(sidebarView);\n    setViewerModes(scrollMode, spreadMode);\n    if (this.initialBookmark) {\n      setRotation(this.initialRotation);\n      delete this.initialRotation;\n      this.pdfLinkService.setHash(this.initialBookmark);\n      this.initialBookmark = null;\n    } else if (storedHash) {\n      setRotation(rotation);\n      this.pdfLinkService.setHash(storedHash);\n    }\n    this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);\n    this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber);\n    if (!this.pdfViewer.currentScaleValue) {\n      this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\n    }\n  },\n  _cleanup() {\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.pdfViewer.cleanup();\n    this.pdfThumbnailViewer.cleanup();\n    this.pdfDocument.cleanup(this.pdfViewer.renderer === _ui_utils.RendererType.SVG);\n  },\n  forceRendering() {\n    this.pdfRenderingQueue.printing = !!this.printService;\n    this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.visibleView === _ui_utils.SidebarView.THUMBS;\n    this.pdfRenderingQueue.renderHighestPriority();\n  },\n  beforePrint() {\n    this._printAnnotationStoragePromise = this.pdfScriptingManager.dispatchWillPrint().catch(() => {}).then(() => {\n      var _this$pdfDocument4;\n      return (_this$pdfDocument4 = this.pdfDocument) === null || _this$pdfDocument4 === void 0 ? void 0 : _this$pdfDocument4.annotationStorage.print;\n    });\n    if (this.printService) {\n      return;\n    }\n    if (!this.supportsPrinting) {\n      this.l10n.get(\"printing_not_supported\").then(msg => {\n        this._otherError(msg);\n      });\n      return;\n    }\n    if (!this.pdfViewer.pageViewsReady) {\n      this.l10n.get(\"printing_not_ready\").then(msg => {\n        window.alert(msg);\n      });\n      return;\n    }\n    const pagesOverview = this.pdfViewer.getPagesOverview();\n    const printContainer = this.appConfig.printContainer;\n    const printResolution = _app_options.AppOptions.get(\"printResolution\");\n    const optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise;\n    const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this._printAnnotationStoragePromise, this.l10n);\n    this.printService = printService;\n    this.forceRendering();\n    this.setTitle();\n    printService.layout();\n    this.externalServices.reportTelemetry({\n      type: \"print\"\n    });\n    if (this._hasAnnotationEditors) {\n      this.externalServices.reportTelemetry({\n        type: \"editing\",\n        data: {\n          type: \"print\"\n        }\n      });\n    }\n  },\n  afterPrint() {\n    if (this._printAnnotationStoragePromise) {\n      this._printAnnotationStoragePromise.then(() => {\n        this.pdfScriptingManager.dispatchDidPrint();\n      });\n      this._printAnnotationStoragePromise = null;\n    }\n    if (this.printService) {\n      var _this$pdfDocument5;\n      this.printService.destroy();\n      this.printService = null;\n      (_this$pdfDocument5 = this.pdfDocument) === null || _this$pdfDocument5 === void 0 ? void 0 : _this$pdfDocument5.annotationStorage.resetModified();\n    }\n    this.forceRendering();\n    this.setTitle();\n  },\n  rotatePages(delta) {\n    this.pdfViewer.pagesRotation += delta;\n  },\n  requestPresentationMode() {\n    var _this$pdfPresentation;\n    (_this$pdfPresentation = this.pdfPresentationMode) === null || _this$pdfPresentation === void 0 ? void 0 : _this$pdfPresentation.request();\n  },\n  triggerPrinting() {\n    if (!this.supportsPrinting) {\n      return;\n    }\n    window.print();\n  },\n  bindEvents() {\n    const {\n      eventBus,\n      _boundEvents\n    } = this;\n    _boundEvents.beforePrint = this.beforePrint.bind(this);\n    _boundEvents.afterPrint = this.afterPrint.bind(this);\n    eventBus._on(\"resize\", webViewerResize);\n    eventBus._on(\"hashchange\", webViewerHashchange);\n    eventBus._on(\"beforeprint\", _boundEvents.beforePrint);\n    eventBus._on(\"afterprint\", _boundEvents.afterPrint);\n    eventBus._on(\"pagerendered\", webViewerPageRendered);\n    eventBus._on(\"updateviewarea\", webViewerUpdateViewarea);\n    eventBus._on(\"pagechanging\", webViewerPageChanging);\n    eventBus._on(\"scalechanging\", webViewerScaleChanging);\n    eventBus._on(\"rotationchanging\", webViewerRotationChanging);\n    eventBus._on(\"sidebarviewchanged\", webViewerSidebarViewChanged);\n    eventBus._on(\"pagemode\", webViewerPageMode);\n    eventBus._on(\"namedaction\", webViewerNamedAction);\n    eventBus._on(\"presentationmodechanged\", webViewerPresentationModeChanged);\n    eventBus._on(\"presentationmode\", webViewerPresentationMode);\n    eventBus._on(\"switchannotationeditormode\", webViewerSwitchAnnotationEditorMode);\n    eventBus._on(\"switchannotationeditorparams\", webViewerSwitchAnnotationEditorParams);\n    eventBus._on(\"print\", webViewerPrint);\n    eventBus._on(\"download\", webViewerDownload);\n    eventBus._on(\"firstpage\", webViewerFirstPage);\n    eventBus._on(\"lastpage\", webViewerLastPage);\n    eventBus._on(\"nextpage\", webViewerNextPage);\n    eventBus._on(\"previouspage\", webViewerPreviousPage);\n    eventBus._on(\"zoomin\", webViewerZoomIn);\n    eventBus._on(\"zoomout\", webViewerZoomOut);\n    eventBus._on(\"zoomreset\", webViewerZoomReset);\n    eventBus._on(\"pagenumberchanged\", webViewerPageNumberChanged);\n    eventBus._on(\"scalechanged\", webViewerScaleChanged);\n    eventBus._on(\"rotatecw\", webViewerRotateCw);\n    eventBus._on(\"rotateccw\", webViewerRotateCcw);\n    eventBus._on(\"optionalcontentconfig\", webViewerOptionalContentConfig);\n    eventBus._on(\"switchscrollmode\", webViewerSwitchScrollMode);\n    eventBus._on(\"scrollmodechanged\", webViewerScrollModeChanged);\n    eventBus._on(\"switchspreadmode\", webViewerSwitchSpreadMode);\n    eventBus._on(\"spreadmodechanged\", webViewerSpreadModeChanged);\n    eventBus._on(\"documentproperties\", webViewerDocumentProperties);\n    eventBus._on(\"findfromurlhash\", webViewerFindFromUrlHash);\n    eventBus._on(\"updatefindmatchescount\", webViewerUpdateFindMatchesCount);\n    eventBus._on(\"updatefindcontrolstate\", webViewerUpdateFindControlState);\n    if (_app_options.AppOptions.get(\"pdfBug\")) {\n      _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug;\n      eventBus._on(\"pagerendered\", _boundEvents.reportPageStatsPDFBug);\n      eventBus._on(\"pagechanging\", _boundEvents.reportPageStatsPDFBug);\n    }\n    eventBus._on(\"fileinputchange\", webViewerFileInputChange);\n    eventBus._on(\"openfile\", webViewerOpenFile);\n  },\n  bindWindowEvents() {\n    const {\n      eventBus,\n      _boundEvents\n    } = this;\n    function addWindowResolutionChange() {\n      let evt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      if (evt) {\n        webViewerResolutionChange(evt);\n      }\n      const mediaQueryList = window.matchMedia(`(resolution: ${window.devicePixelRatio || 1}dppx)`);\n      mediaQueryList.addEventListener(\"change\", addWindowResolutionChange, {\n        once: true\n      });\n      _boundEvents.removeWindowResolutionChange || (_boundEvents.removeWindowResolutionChange = function () {\n        mediaQueryList.removeEventListener(\"change\", addWindowResolutionChange);\n        _boundEvents.removeWindowResolutionChange = null;\n      });\n    }\n    addWindowResolutionChange();\n    _boundEvents.windowResize = () => {\n      eventBus.dispatch(\"resize\", {\n        source: window\n      });\n    };\n    _boundEvents.windowHashChange = () => {\n      eventBus.dispatch(\"hashchange\", {\n        source: window,\n        hash: document.location.hash.substring(1)\n      });\n    };\n    _boundEvents.windowBeforePrint = () => {\n      eventBus.dispatch(\"beforeprint\", {\n        source: window\n      });\n    };\n    _boundEvents.windowAfterPrint = () => {\n      eventBus.dispatch(\"afterprint\", {\n        source: window\n      });\n    };\n    _boundEvents.windowUpdateFromSandbox = event => {\n      eventBus.dispatch(\"updatefromsandbox\", {\n        source: window,\n        detail: event.detail\n      });\n    };\n    window.addEventListener(\"visibilitychange\", webViewerVisibilityChange);\n    window.addEventListener(\"wheel\", webViewerWheel, {\n      passive: false\n    });\n    window.addEventListener(\"touchstart\", webViewerTouchStart, {\n      passive: false\n    });\n    window.addEventListener(\"click\", webViewerClick);\n    window.addEventListener(\"keydown\", webViewerKeyDown);\n    window.addEventListener(\"resize\", _boundEvents.windowResize);\n    window.addEventListener(\"hashchange\", _boundEvents.windowHashChange);\n    window.addEventListener(\"beforeprint\", _boundEvents.windowBeforePrint);\n    window.addEventListener(\"afterprint\", _boundEvents.windowAfterPrint);\n    window.addEventListener(\"updatefromsandbox\", _boundEvents.windowUpdateFromSandbox);\n  },\n  unbindEvents() {\n    const {\n      eventBus,\n      _boundEvents\n    } = this;\n    eventBus._off(\"resize\", webViewerResize);\n    eventBus._off(\"hashchange\", webViewerHashchange);\n    eventBus._off(\"beforeprint\", _boundEvents.beforePrint);\n    eventBus._off(\"afterprint\", _boundEvents.afterPrint);\n    eventBus._off(\"pagerendered\", webViewerPageRendered);\n    eventBus._off(\"updateviewarea\", webViewerUpdateViewarea);\n    eventBus._off(\"pagechanging\", webViewerPageChanging);\n    eventBus._off(\"scalechanging\", webViewerScaleChanging);\n    eventBus._off(\"rotationchanging\", webViewerRotationChanging);\n    eventBus._off(\"sidebarviewchanged\", webViewerSidebarViewChanged);\n    eventBus._off(\"pagemode\", webViewerPageMode);\n    eventBus._off(\"namedaction\", webViewerNamedAction);\n    eventBus._off(\"presentationmodechanged\", webViewerPresentationModeChanged);\n    eventBus._off(\"presentationmode\", webViewerPresentationMode);\n    eventBus._off(\"print\", webViewerPrint);\n    eventBus._off(\"download\", webViewerDownload);\n    eventBus._off(\"firstpage\", webViewerFirstPage);\n    eventBus._off(\"lastpage\", webViewerLastPage);\n    eventBus._off(\"nextpage\", webViewerNextPage);\n    eventBus._off(\"previouspage\", webViewerPreviousPage);\n    eventBus._off(\"zoomin\", webViewerZoomIn);\n    eventBus._off(\"zoomout\", webViewerZoomOut);\n    eventBus._off(\"zoomreset\", webViewerZoomReset);\n    eventBus._off(\"pagenumberchanged\", webViewerPageNumberChanged);\n    eventBus._off(\"scalechanged\", webViewerScaleChanged);\n    eventBus._off(\"rotatecw\", webViewerRotateCw);\n    eventBus._off(\"rotateccw\", webViewerRotateCcw);\n    eventBus._off(\"optionalcontentconfig\", webViewerOptionalContentConfig);\n    eventBus._off(\"switchscrollmode\", webViewerSwitchScrollMode);\n    eventBus._off(\"scrollmodechanged\", webViewerScrollModeChanged);\n    eventBus._off(\"switchspreadmode\", webViewerSwitchSpreadMode);\n    eventBus._off(\"spreadmodechanged\", webViewerSpreadModeChanged);\n    eventBus._off(\"documentproperties\", webViewerDocumentProperties);\n    eventBus._off(\"findfromurlhash\", webViewerFindFromUrlHash);\n    eventBus._off(\"updatefindmatchescount\", webViewerUpdateFindMatchesCount);\n    eventBus._off(\"updatefindcontrolstate\", webViewerUpdateFindControlState);\n    if (_boundEvents.reportPageStatsPDFBug) {\n      eventBus._off(\"pagerendered\", _boundEvents.reportPageStatsPDFBug);\n      eventBus._off(\"pagechanging\", _boundEvents.reportPageStatsPDFBug);\n      _boundEvents.reportPageStatsPDFBug = null;\n    }\n    eventBus._off(\"fileinputchange\", webViewerFileInputChange);\n    eventBus._off(\"openfile\", webViewerOpenFile);\n    _boundEvents.beforePrint = null;\n    _boundEvents.afterPrint = null;\n  },\n  unbindWindowEvents() {\n    var _boundEvents$removeWi;\n    const {\n      _boundEvents\n    } = this;\n    window.removeEventListener(\"visibilitychange\", webViewerVisibilityChange);\n    window.removeEventListener(\"wheel\", webViewerWheel, {\n      passive: false\n    });\n    window.removeEventListener(\"touchstart\", webViewerTouchStart, {\n      passive: false\n    });\n    window.removeEventListener(\"click\", webViewerClick);\n    window.removeEventListener(\"keydown\", webViewerKeyDown);\n    window.removeEventListener(\"resize\", _boundEvents.windowResize);\n    window.removeEventListener(\"hashchange\", _boundEvents.windowHashChange);\n    window.removeEventListener(\"beforeprint\", _boundEvents.windowBeforePrint);\n    window.removeEventListener(\"afterprint\", _boundEvents.windowAfterPrint);\n    window.removeEventListener(\"updatefromsandbox\", _boundEvents.windowUpdateFromSandbox);\n    (_boundEvents$removeWi = _boundEvents.removeWindowResolutionChange) === null || _boundEvents$removeWi === void 0 ? void 0 : _boundEvents$removeWi.call(_boundEvents);\n    _boundEvents.windowResize = null;\n    _boundEvents.windowHashChange = null;\n    _boundEvents.windowBeforePrint = null;\n    _boundEvents.windowAfterPrint = null;\n    _boundEvents.windowUpdateFromSandbox = null;\n  },\n  accumulateWheelTicks(ticks) {\n    if (this._wheelUnusedTicks > 0 && ticks < 0 || this._wheelUnusedTicks < 0 && ticks > 0) {\n      this._wheelUnusedTicks = 0;\n    }\n    this._wheelUnusedTicks += ticks;\n    const wholeTicks = Math.sign(this._wheelUnusedTicks) * Math.floor(Math.abs(this._wheelUnusedTicks));\n    this._wheelUnusedTicks -= wholeTicks;\n    return wholeTicks;\n  },\n  _unblockDocumentLoadEvent() {\n    var _document$blockUnbloc, _document;\n    (_document$blockUnbloc = (_document = document).blockUnblockOnload) === null || _document$blockUnbloc === void 0 ? void 0 : _document$blockUnbloc.call(_document, false);\n    this._unblockDocumentLoadEvent = () => {};\n  },\n  _reportDocumentStatsTelemetry() {\n    const {\n      stats\n    } = this.pdfDocument;\n    if (stats !== this._docStats) {\n      this._docStats = stats;\n      this.externalServices.reportTelemetry({\n        type: \"documentStats\",\n        stats\n      });\n    }\n  },\n  get scriptingReady() {\n    return this.pdfScriptingManager.ready;\n  }\n};\nexports.PDFViewerApplication = PDFViewerApplication;\n{\n  const HOSTED_VIEWER_ORIGINS = [\"null\", \"http://mozilla.github.io\", \"https://mozilla.github.io\"];\n  var validateFileURL = function (file) {\n    if (!file) {\n      return;\n    }\n    try {\n      const viewerOrigin = new URL(window.location.href).origin || \"null\";\n      if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {\n        return;\n      }\n      const fileOrigin = new URL(file, window.location.href).origin;\n      if (fileOrigin !== viewerOrigin) {\n        throw new Error(\"file origin does not match viewer's\");\n      }\n    } catch (ex) {\n      PDFViewerApplication.l10n.get(\"loading_error\").then(msg => {\n        PDFViewerApplication._documentError(msg, {\n          message: ex === null || ex === void 0 ? void 0 : ex.message\n        });\n      });\n      throw ex;\n    }\n  };\n}\nasync function loadFakeWorker() {\n  _pdfjsLib.GlobalWorkerOptions.workerSrc || (_pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get(\"workerSrc\"));\n  await (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.workerSrc);\n}\nasync function loadPDFBug(self) {\n  const {\n    debuggerScriptPath\n  } = self.appConfig;\n  const {\n    PDFBug\n  } = await import(debuggerScriptPath);\n  self._PDFBug = PDFBug;\n}\nfunction reportPageStatsPDFBug(_ref5) {\n  var _globalThis$Stats, _pageView$pdfPage;\n  let {\n    pageNumber\n  } = _ref5;\n  if (!((_globalThis$Stats = globalThis.Stats) !== null && _globalThis$Stats !== void 0 && _globalThis$Stats.enabled)) {\n    return;\n  }\n  const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);\n  globalThis.Stats.add(pageNumber, pageView === null || pageView === void 0 ? void 0 : (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.stats);\n}\nfunction webViewerInitialized() {\n  const {\n    appConfig,\n    eventBus\n  } = PDFViewerApplication;\n  let file;\n  const queryString = document.location.search.substring(1);\n  const params = (0, _ui_utils.parseQueryString)(queryString);\n  file = params.get(\"file\") ?? _app_options.AppOptions.get(\"defaultUrl\");\n  validateFileURL(file);\n  const fileInput = appConfig.openFileInput;\n  fileInput.value = null;\n  fileInput.addEventListener(\"change\", function (evt) {\n    const {\n      files\n    } = evt.target;\n    if (!files || files.length === 0) {\n      return;\n    }\n    eventBus.dispatch(\"fileinputchange\", {\n      source: this,\n      fileInput: evt.target\n    });\n  });\n  appConfig.mainContainer.addEventListener(\"dragover\", function (evt) {\n    evt.preventDefault();\n    evt.dataTransfer.dropEffect = evt.dataTransfer.effectAllowed === \"copy\" ? \"copy\" : \"move\";\n  });\n  appConfig.mainContainer.addEventListener(\"drop\", function (evt) {\n    evt.preventDefault();\n    const {\n      files\n    } = evt.dataTransfer;\n    if (!files || files.length === 0) {\n      return;\n    }\n    eventBus.dispatch(\"fileinputchange\", {\n      source: this,\n      fileInput: evt.dataTransfer\n    });\n  });\n  if (!PDFViewerApplication.supportsDocumentFonts) {\n    _app_options.AppOptions.set(\"disableFontFace\", true);\n    PDFViewerApplication.l10n.get(\"web_fonts_disabled\").then(msg => {\n      console.warn(msg);\n    });\n  }\n  if (!PDFViewerApplication.supportsPrinting) {\n    appConfig.toolbar.print.classList.add(\"hidden\");\n    appConfig.secondaryToolbar.printButton.classList.add(\"hidden\");\n  }\n  if (!PDFViewerApplication.supportsFullscreen) {\n    appConfig.secondaryToolbar.presentationModeButton.classList.add(\"hidden\");\n  }\n  if (PDFViewerApplication.supportsIntegratedFind) {\n    appConfig.toolbar.viewFind.classList.add(\"hidden\");\n  }\n  appConfig.mainContainer.addEventListener(\"transitionend\", function (evt) {\n    if (evt.target === this) {\n      eventBus.dispatch(\"resize\", {\n        source: this\n      });\n    }\n  }, true);\n  try {\n    if (file) {\n      PDFViewerApplication.open(file);\n    } else {\n      PDFViewerApplication._hideViewBookmark();\n    }\n  } catch (reason) {\n    PDFViewerApplication.l10n.get(\"loading_error\").then(msg => {\n      PDFViewerApplication._documentError(msg, reason);\n    });\n  }\n}\nfunction webViewerPageRendered(_ref6) {\n  let {\n    pageNumber,\n    error\n  } = _ref6;\n  if (pageNumber === PDFViewerApplication.page) {\n    PDFViewerApplication.toolbar.updateLoadingIndicatorState(false);\n  }\n  if (PDFViewerApplication.pdfSidebar.visibleView === _ui_utils.SidebarView.THUMBS) {\n    const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);\n    const thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageNumber - 1);\n    if (pageView && thumbnailView) {\n      thumbnailView.setImage(pageView);\n    }\n  }\n  if (error) {\n    PDFViewerApplication.l10n.get(\"rendering_error\").then(msg => {\n      PDFViewerApplication._otherError(msg, error);\n    });\n  }\n  PDFViewerApplication._reportDocumentStatsTelemetry();\n}\nfunction webViewerPageMode(_ref7) {\n  let {\n    mode\n  } = _ref7;\n  let view;\n  switch (mode) {\n    case \"thumbs\":\n      view = _ui_utils.SidebarView.THUMBS;\n      break;\n    case \"bookmarks\":\n    case \"outline\":\n      view = _ui_utils.SidebarView.OUTLINE;\n      break;\n    case \"attachments\":\n      view = _ui_utils.SidebarView.ATTACHMENTS;\n      break;\n    case \"layers\":\n      view = _ui_utils.SidebarView.LAYERS;\n      break;\n    case \"none\":\n      view = _ui_utils.SidebarView.NONE;\n      break;\n    default:\n      console.error('Invalid \"pagemode\" hash parameter: ' + mode);\n      return;\n  }\n  PDFViewerApplication.pdfSidebar.switchView(view, true);\n}\nfunction webViewerNamedAction(evt) {\n  switch (evt.action) {\n    case \"GoToPage\":\n      PDFViewerApplication.appConfig.toolbar.pageNumber.select();\n      break;\n    case \"Find\":\n      if (!PDFViewerApplication.supportsIntegratedFind) {\n        PDFViewerApplication.findBar.toggle();\n      }\n      break;\n    case \"Print\":\n      PDFViewerApplication.triggerPrinting();\n      break;\n    case \"SaveAs\":\n      PDFViewerApplication.downloadOrSave();\n      break;\n  }\n}\nfunction webViewerPresentationModeChanged(evt) {\n  PDFViewerApplication.pdfViewer.presentationModeState = evt.state;\n}\nfunction webViewerSidebarViewChanged(_ref8) {\n  let {\n    view\n  } = _ref8;\n  PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = view === _ui_utils.SidebarView.THUMBS;\n  if (PDFViewerApplication.isInitialViewSet) {\n    var _PDFViewerApplication;\n    (_PDFViewerApplication = PDFViewerApplication.store) === null || _PDFViewerApplication === void 0 ? void 0 : _PDFViewerApplication.set(\"sidebarView\", view).catch(() => {});\n  }\n}\nfunction webViewerUpdateViewarea(_ref9) {\n  let {\n    location\n  } = _ref9;\n  if (PDFViewerApplication.isInitialViewSet) {\n    var _PDFViewerApplication2;\n    (_PDFViewerApplication2 = PDFViewerApplication.store) === null || _PDFViewerApplication2 === void 0 ? void 0 : _PDFViewerApplication2.setMultiple({\n      page: location.pageNumber,\n      zoom: location.scale,\n      scrollLeft: location.left,\n      scrollTop: location.top,\n      rotation: location.rotation\n    }).catch(() => {});\n  }\n  const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);\n  PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;\n  const currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);\n  const loading = (currentPage === null || currentPage === void 0 ? void 0 : currentPage.renderingState) !== _ui_utils.RenderingStates.FINISHED;\n  PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);\n}\nfunction webViewerScrollModeChanged(evt) {\n  if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) {\n    var _PDFViewerApplication3;\n    (_PDFViewerApplication3 = PDFViewerApplication.store) === null || _PDFViewerApplication3 === void 0 ? void 0 : _PDFViewerApplication3.set(\"scrollMode\", evt.mode).catch(() => {});\n  }\n}\nfunction webViewerSpreadModeChanged(evt) {\n  if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) {\n    var _PDFViewerApplication4;\n    (_PDFViewerApplication4 = PDFViewerApplication.store) === null || _PDFViewerApplication4 === void 0 ? void 0 : _PDFViewerApplication4.set(\"spreadMode\", evt.mode).catch(() => {});\n  }\n}\nfunction webViewerResize() {\n  const {\n    pdfDocument,\n    pdfViewer,\n    pdfRenderingQueue\n  } = PDFViewerApplication;\n  if (pdfRenderingQueue.printing && window.matchMedia(\"print\").matches) {\n    return;\n  }\n  pdfViewer.updateContainerHeightCss();\n  if (!pdfDocument) {\n    return;\n  }\n  const currentScaleValue = pdfViewer.currentScaleValue;\n  if (currentScaleValue === \"auto\" || currentScaleValue === \"page-fit\" || currentScaleValue === \"page-width\") {\n    pdfViewer.currentScaleValue = currentScaleValue;\n  }\n  pdfViewer.update();\n}\nfunction webViewerHashchange(evt) {\n  var _PDFViewerApplication5;\n  const hash = evt.hash;\n  if (!hash) {\n    return;\n  }\n  if (!PDFViewerApplication.isInitialViewSet) {\n    PDFViewerApplication.initialBookmark = hash;\n  } else if (!((_PDFViewerApplication5 = PDFViewerApplication.pdfHistory) !== null && _PDFViewerApplication5 !== void 0 && _PDFViewerApplication5.popStateInProgress)) {\n    PDFViewerApplication.pdfLinkService.setHash(hash);\n  }\n}\n{\n  var webViewerFileInputChange = function (evt) {\n    var _PDFViewerApplication6;\n    if ((_PDFViewerApplication6 = PDFViewerApplication.pdfViewer) !== null && _PDFViewerApplication6 !== void 0 && _PDFViewerApplication6.isInPresentationMode) {\n      return;\n    }\n    const file = evt.fileInput.files[0];\n    let url = URL.createObjectURL(file);\n    if (file.name) {\n      url = {\n        url,\n        originalUrl: file.name\n      };\n    }\n    PDFViewerApplication.open(url);\n  };\n  var webViewerOpenFile = function (evt) {\n    const fileInput = PDFViewerApplication.appConfig.openFileInput;\n    fileInput.click();\n  };\n}\nfunction webViewerPresentationMode() {\n  PDFViewerApplication.requestPresentationMode();\n}\nfunction webViewerSwitchAnnotationEditorMode(evt) {\n  PDFViewerApplication.pdfViewer.annotationEditorMode = evt.mode;\n}\nfunction webViewerSwitchAnnotationEditorParams(evt) {\n  PDFViewerApplication.pdfViewer.annotationEditorParams = evt;\n}\nfunction webViewerPrint() {\n  PDFViewerApplication.triggerPrinting();\n}\nfunction webViewerDownload() {\n  PDFViewerApplication.downloadOrSave();\n}\nfunction webViewerFirstPage() {\n  if (PDFViewerApplication.pdfDocument) {\n    PDFViewerApplication.page = 1;\n  }\n}\nfunction webViewerLastPage() {\n  if (PDFViewerApplication.pdfDocument) {\n    PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n  }\n}\nfunction webViewerNextPage() {\n  PDFViewerApplication.pdfViewer.nextPage();\n}\nfunction webViewerPreviousPage() {\n  PDFViewerApplication.pdfViewer.previousPage();\n}\nfunction webViewerZoomIn() {\n  PDFViewerApplication.zoomIn();\n}\nfunction webViewerZoomOut() {\n  PDFViewerApplication.zoomOut();\n}\nfunction webViewerZoomReset() {\n  PDFViewerApplication.zoomReset();\n}\nfunction webViewerPageNumberChanged(evt) {\n  const pdfViewer = PDFViewerApplication.pdfViewer;\n  if (evt.value !== \"\") {\n    PDFViewerApplication.pdfLinkService.goToPage(evt.value);\n  }\n  if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {\n    PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);\n  }\n}\nfunction webViewerScaleChanged(evt) {\n  PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;\n}\nfunction webViewerRotateCw() {\n  PDFViewerApplication.rotatePages(90);\n}\nfunction webViewerRotateCcw() {\n  PDFViewerApplication.rotatePages(-90);\n}\nfunction webViewerOptionalContentConfig(evt) {\n  PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;\n}\nfunction webViewerSwitchScrollMode(evt) {\n  PDFViewerApplication.pdfViewer.scrollMode = evt.mode;\n}\nfunction webViewerSwitchSpreadMode(evt) {\n  PDFViewerApplication.pdfViewer.spreadMode = evt.mode;\n}\nfunction webViewerDocumentProperties() {\n  PDFViewerApplication.pdfDocumentProperties.open();\n}\nfunction webViewerFindFromUrlHash(evt) {\n  PDFViewerApplication.eventBus.dispatch(\"find\", {\n    source: evt.source,\n    type: \"\",\n    query: evt.query,\n    phraseSearch: evt.phraseSearch,\n    caseSensitive: false,\n    entireWord: false,\n    highlightAll: true,\n    findPrevious: false,\n    matchDiacritics: true\n  });\n}\nfunction webViewerUpdateFindMatchesCount(_ref10) {\n  let {\n    matchesCount\n  } = _ref10;\n  if (PDFViewerApplication.supportsIntegratedFind) {\n    PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);\n  } else {\n    PDFViewerApplication.findBar.updateResultsCount(matchesCount);\n  }\n}\nfunction webViewerUpdateFindControlState(_ref11) {\n  let {\n    state,\n    previous,\n    matchesCount,\n    rawQuery\n  } = _ref11;\n  if (PDFViewerApplication.supportsIntegratedFind) {\n    PDFViewerApplication.externalServices.updateFindControlState({\n      result: state,\n      findPrevious: previous,\n      matchesCount,\n      rawQuery\n    });\n  } else {\n    PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount);\n  }\n}\nfunction webViewerScaleChanging(evt) {\n  PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale);\n  PDFViewerApplication.pdfViewer.update();\n}\nfunction webViewerRotationChanging(evt) {\n  PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;\n  PDFViewerApplication.forceRendering();\n  PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;\n}\nfunction webViewerPageChanging(_ref12) {\n  let {\n    pageNumber,\n    pageLabel\n  } = _ref12;\n  PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel);\n  PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber);\n  if (PDFViewerApplication.pdfSidebar.visibleView === _ui_utils.SidebarView.THUMBS) {\n    PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber);\n  }\n}\nfunction webViewerResolutionChange(evt) {\n  PDFViewerApplication.pdfViewer.refresh();\n}\nfunction webViewerVisibilityChange(evt) {\n  if (document.visibilityState === \"visible\") {\n    setZoomDisabledTimeout();\n  }\n}\nlet zoomDisabledTimeout = null;\nfunction setZoomDisabledTimeout() {\n  if (zoomDisabledTimeout) {\n    clearTimeout(zoomDisabledTimeout);\n  }\n  zoomDisabledTimeout = setTimeout(function () {\n    zoomDisabledTimeout = null;\n  }, WHEEL_ZOOM_DISABLED_TIMEOUT);\n}\nfunction webViewerWheel(evt) {\n  const {\n    pdfViewer,\n    supportedMouseWheelZoomModifierKeys\n  } = PDFViewerApplication;\n  if (pdfViewer.isInPresentationMode) {\n    return;\n  }\n  if (evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) {\n    evt.preventDefault();\n    if (zoomDisabledTimeout || document.visibilityState === \"hidden\") {\n      return;\n    }\n    const deltaMode = evt.deltaMode;\n    const delta = (0, _ui_utils.normalizeWheelEventDirection)(evt);\n    const previousScale = pdfViewer.currentScale;\n    let ticks = 0;\n    if (deltaMode === WheelEvent.DOM_DELTA_LINE || deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n      if (Math.abs(delta) >= 1) {\n        ticks = Math.sign(delta);\n      } else {\n        ticks = PDFViewerApplication.accumulateWheelTicks(delta);\n      }\n    } else {\n      const PIXELS_PER_LINE_SCALE = 30;\n      ticks = PDFViewerApplication.accumulateWheelTicks(delta / PIXELS_PER_LINE_SCALE);\n    }\n    if (ticks < 0) {\n      PDFViewerApplication.zoomOut(-ticks);\n    } else if (ticks > 0) {\n      PDFViewerApplication.zoomIn(ticks);\n    }\n    const currentScale = pdfViewer.currentScale;\n    if (previousScale !== currentScale) {\n      const scaleCorrectionFactor = currentScale / previousScale - 1;\n      const rect = pdfViewer.container.getBoundingClientRect();\n      const dx = evt.clientX - rect.left;\n      const dy = evt.clientY - rect.top;\n      pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor;\n      pdfViewer.container.scrollTop += dy * scaleCorrectionFactor;\n    }\n  } else {\n    setZoomDisabledTimeout();\n  }\n}\nfunction webViewerTouchStart(evt) {\n  if (evt.touches.length > 1) {\n    evt.preventDefault();\n  }\n}\nfunction webViewerClick(evt) {\n  if (!PDFViewerApplication.secondaryToolbar.isOpen) {\n    return;\n  }\n  const appConfig = PDFViewerApplication.appConfig;\n  if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) {\n    PDFViewerApplication.secondaryToolbar.close();\n  }\n}\nfunction webViewerKeyDown(evt) {\n  if (PDFViewerApplication.overlayManager.active) {\n    return;\n  }\n  const {\n    eventBus,\n    pdfViewer\n  } = PDFViewerApplication;\n  const isViewerInPresentationMode = pdfViewer.isInPresentationMode;\n  let handled = false,\n    ensureViewerFocused = false;\n  const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);\n  if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {\n    switch (evt.keyCode) {\n      case 70:\n        if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {\n          PDFViewerApplication.findBar.open();\n          handled = true;\n        }\n        break;\n      case 71:\n        if (!PDFViewerApplication.supportsIntegratedFind) {\n          const {\n            state\n          } = PDFViewerApplication.findController;\n          if (state) {\n            const eventState = Object.assign(Object.create(null), state, {\n              source: window,\n              type: \"again\",\n              findPrevious: cmd === 5 || cmd === 12\n            });\n            eventBus.dispatch(\"find\", eventState);\n          }\n          handled = true;\n        }\n        break;\n      case 61:\n      case 107:\n      case 187:\n      case 171:\n        if (!isViewerInPresentationMode) {\n          PDFViewerApplication.zoomIn();\n        }\n        handled = true;\n        break;\n      case 173:\n      case 109:\n      case 189:\n        if (!isViewerInPresentationMode) {\n          PDFViewerApplication.zoomOut();\n        }\n        handled = true;\n        break;\n      case 48:\n      case 96:\n        if (!isViewerInPresentationMode) {\n          setTimeout(function () {\n            PDFViewerApplication.zoomReset();\n          });\n          handled = false;\n        }\n        break;\n      case 38:\n        if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n          PDFViewerApplication.page = 1;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 40:\n        if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n    }\n  }\n  if (cmd === 1 || cmd === 8) {\n    switch (evt.keyCode) {\n      case 83:\n        eventBus.dispatch(\"download\", {\n          source: window\n        });\n        handled = true;\n        break;\n      case 79:\n        {\n          eventBus.dispatch(\"openfile\", {\n            source: window\n          });\n          handled = true;\n        }\n        break;\n    }\n  }\n  if (cmd === 3 || cmd === 10) {\n    switch (evt.keyCode) {\n      case 80:\n        PDFViewerApplication.requestPresentationMode();\n        handled = true;\n        PDFViewerApplication.externalServices.reportTelemetry({\n          type: \"buttons\",\n          data: {\n            id: \"presentationModeKeyboard\"\n          }\n        });\n        break;\n      case 71:\n        PDFViewerApplication.appConfig.toolbar.pageNumber.select();\n        handled = true;\n        break;\n    }\n  }\n  if (handled) {\n    if (ensureViewerFocused && !isViewerInPresentationMode) {\n      pdfViewer.focus();\n    }\n    evt.preventDefault();\n    return;\n  }\n  const curElement = (0, _ui_utils.getActiveOrFocusedElement)();\n  const curElementTagName = curElement === null || curElement === void 0 ? void 0 : curElement.tagName.toUpperCase();\n  if (curElementTagName === \"INPUT\" || curElementTagName === \"TEXTAREA\" || curElementTagName === \"SELECT\" || curElement !== null && curElement !== void 0 && curElement.isContentEditable) {\n    if (evt.keyCode !== 27) {\n      return;\n    }\n  }\n  if (cmd === 0) {\n    let turnPage = 0,\n      turnOnlyIfPageFit = false;\n    switch (evt.keyCode) {\n      case 38:\n      case 33:\n        if (pdfViewer.isVerticalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = -1;\n        break;\n      case 8:\n        if (!isViewerInPresentationMode) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = -1;\n        break;\n      case 37:\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n      case 75:\n      case 80:\n        turnPage = -1;\n        break;\n      case 27:\n        if (PDFViewerApplication.secondaryToolbar.isOpen) {\n          PDFViewerApplication.secondaryToolbar.close();\n          handled = true;\n        }\n        if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) {\n          PDFViewerApplication.findBar.close();\n          handled = true;\n        }\n        break;\n      case 40:\n      case 34:\n        if (pdfViewer.isVerticalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = 1;\n        break;\n      case 13:\n      case 32:\n        if (!isViewerInPresentationMode) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = 1;\n        break;\n      case 39:\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n      case 74:\n      case 78:\n        turnPage = 1;\n        break;\n      case 36:\n        if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n          PDFViewerApplication.page = 1;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 35:\n        if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 83:\n        PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT);\n        break;\n      case 72:\n        PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND);\n        break;\n      case 82:\n        PDFViewerApplication.rotatePages(90);\n        break;\n      case 115:\n        PDFViewerApplication.pdfSidebar.toggle();\n        break;\n    }\n    if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === \"page-fit\")) {\n      if (turnPage > 0) {\n        pdfViewer.nextPage();\n      } else {\n        pdfViewer.previousPage();\n      }\n      handled = true;\n    }\n  }\n  if (cmd === 4) {\n    switch (evt.keyCode) {\n      case 13:\n      case 32:\n        if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== \"page-fit\") {\n          break;\n        }\n        pdfViewer.previousPage();\n        handled = true;\n        break;\n      case 82:\n        PDFViewerApplication.rotatePages(-90);\n        break;\n    }\n  }\n  if (!handled && !isViewerInPresentationMode) {\n    if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== \"BUTTON\") {\n      ensureViewerFocused = true;\n    }\n  }\n  if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {\n    pdfViewer.focus();\n  }\n  if (handled) {\n    evt.preventDefault();\n  }\n}\nfunction beforeUnload(evt) {\n  evt.preventDefault();\n  evt.returnValue = \"\";\n  return false;\n}\nfunction webViewerAnnotationEditorStatesChanged(data) {\n  PDFViewerApplication.externalServices.updateEditorStates(data);\n}\nconst PDFPrintServiceFactory = {\n  instance: {\n    supportsPrinting: false,\n    createPrintService() {\n      throw new Error(\"Not implemented: createPrintService\");\n    }\n  }\n};\nexports.PDFPrintServiceFactory = PDFPrintServiceFactory;\n\n/***/ }),\n/* 5 */\n/***/ ((module) => {\n\n\n\nlet pdfjsLib;\nif (typeof window !== \"undefined\" && window[\"pdfjs-dist/build/pdf\"]) {\n  pdfjsLib = window[\"pdfjs-dist/build/pdf\"];\n} else {\n  pdfjsLib = require(\"../build/pdf.js\");\n}\nmodule.exports = pdfjsLib;\n\n/***/ }),\n/* 6 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.WaitOnType = exports.EventBus = exports.AutomationEventBus = void 0;\nexports.waitOnEventOrTimeout = waitOnEventOrTimeout;\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nconst WaitOnType = {\n  EVENT: \"event\",\n  TIMEOUT: \"timeout\"\n};\nexports.WaitOnType = WaitOnType;\nfunction waitOnEventOrTimeout(_ref) {\n  let {\n    target,\n    name,\n    delay = 0\n  } = _ref;\n  return new Promise(function (resolve, reject) {\n    if (typeof target !== \"object\" || !(name && typeof name === \"string\") || !(Number.isInteger(delay) && delay >= 0)) {\n      throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n    }\n    function handler(type) {\n      if (target instanceof EventBus) {\n        target._off(name, eventHandler);\n      } else {\n        target.removeEventListener(name, eventHandler);\n      }\n      if (timeout) {\n        clearTimeout(timeout);\n      }\n      resolve(type);\n    }\n    const eventHandler = handler.bind(null, WaitOnType.EVENT);\n    if (target instanceof EventBus) {\n      target._on(name, eventHandler);\n    } else {\n      target.addEventListener(name, eventHandler);\n    }\n    const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);\n    const timeout = setTimeout(timeoutHandler, delay);\n  });\n}\nvar _listeners = /*#__PURE__*/new WeakMap();\nclass EventBus {\n  constructor() {\n    _classPrivateFieldInitSpec(this, _listeners, {\n      writable: true,\n      value: Object.create(null)\n    });\n  }\n  on(eventName, listener) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    this._on(eventName, listener, {\n      external: true,\n      once: options === null || options === void 0 ? void 0 : options.once\n    });\n  }\n  off(eventName, listener) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    this._off(eventName, listener, {\n      external: true,\n      once: options === null || options === void 0 ? void 0 : options.once\n    });\n  }\n  dispatch(eventName, data) {\n    const eventListeners = _classPrivateFieldGet(this, _listeners)[eventName];\n    if (!eventListeners || eventListeners.length === 0) {\n      return;\n    }\n    let externalListeners;\n    for (const {\n      listener,\n      external,\n      once\n    } of eventListeners.slice(0)) {\n      if (once) {\n        this._off(eventName, listener);\n      }\n      if (external) {\n        (externalListeners || (externalListeners = [])).push(listener);\n        continue;\n      }\n      listener(data);\n    }\n    if (externalListeners) {\n      for (const listener of externalListeners) {\n        listener(data);\n      }\n      externalListeners = null;\n    }\n  }\n  _on(eventName, listener) {\n    var _classPrivateFieldGet2;\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    const eventListeners = (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _listeners))[eventName] || (_classPrivateFieldGet2[eventName] = []);\n    eventListeners.push({\n      listener,\n      external: (options === null || options === void 0 ? void 0 : options.external) === true,\n      once: (options === null || options === void 0 ? void 0 : options.once) === true\n    });\n  }\n  _off(eventName, listener) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    const eventListeners = _classPrivateFieldGet(this, _listeners)[eventName];\n    if (!eventListeners) {\n      return;\n    }\n    for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n      if (eventListeners[i].listener === listener) {\n        eventListeners.splice(i, 1);\n        return;\n      }\n    }\n  }\n}\nexports.EventBus = EventBus;\nclass AutomationEventBus extends EventBus {\n  dispatch(eventName, data) {\n    throw new Error(\"Not implemented: AutomationEventBus.dispatch\");\n  }\n}\nexports.AutomationEventBus = AutomationEventBus;\n\n/***/ }),\n/* 7 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFCursorTools = exports.CursorTool = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _grab_to_pan = __webpack_require__(8);\nvar _ui_utils = __webpack_require__(1);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst CursorTool = {\n  SELECT: 0,\n  HAND: 1,\n  ZOOM: 2\n};\nexports.CursorTool = CursorTool;\nvar _dispatchEvent = /*#__PURE__*/new WeakSet();\nvar _addEventListeners = /*#__PURE__*/new WeakSet();\nclass PDFCursorTools {\n  constructor(_ref) {\n    let {\n      container,\n      eventBus,\n      cursorToolOnLoad = CursorTool.SELECT\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _addEventListeners);\n    _classPrivateMethodInitSpec(this, _dispatchEvent);\n    this.container = container;\n    this.eventBus = eventBus;\n    this.active = CursorTool.SELECT;\n    this.previouslyActive = null;\n    this.handTool = new _grab_to_pan.GrabToPan({\n      element: this.container\n    });\n    _classPrivateMethodGet(this, _addEventListeners, _addEventListeners2).call(this);\n    Promise.resolve().then(() => {\n      this.switchTool(cursorToolOnLoad);\n    });\n  }\n  get activeTool() {\n    return this.active;\n  }\n  switchTool(tool) {\n    if (this.previouslyActive !== null) {\n      return;\n    }\n    if (tool === this.active) {\n      return;\n    }\n    const disableActiveTool = () => {\n      switch (this.active) {\n        case CursorTool.SELECT:\n          break;\n        case CursorTool.HAND:\n          this.handTool.deactivate();\n          break;\n        case CursorTool.ZOOM:\n      }\n    };\n    switch (tool) {\n      case CursorTool.SELECT:\n        disableActiveTool();\n        break;\n      case CursorTool.HAND:\n        disableActiveTool();\n        this.handTool.activate();\n        break;\n      case CursorTool.ZOOM:\n      default:\n        console.error(`switchTool: \"${tool}\" is an unsupported value.`);\n        return;\n    }\n    this.active = tool;\n    _classPrivateMethodGet(this, _dispatchEvent, _dispatchEvent2).call(this);\n  }\n}\nexports.PDFCursorTools = PDFCursorTools;\nfunction _dispatchEvent2() {\n  this.eventBus.dispatch(\"cursortoolchanged\", {\n    source: this,\n    tool: this.active\n  });\n}\nfunction _addEventListeners2() {\n  this.eventBus._on(\"switchcursortool\", evt => {\n    this.switchTool(evt.tool);\n  });\n  let annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE,\n    presentationModeState = _ui_utils.PresentationModeState.NORMAL;\n  const disableActive = () => {\n    const previouslyActive = this.active;\n    this.switchTool(CursorTool.SELECT);\n    this.previouslyActive ?? (this.previouslyActive = previouslyActive);\n  };\n  const enableActive = () => {\n    const previouslyActive = this.previouslyActive;\n    if (previouslyActive !== null && annotationEditorMode === _pdfjsLib.AnnotationEditorType.NONE && presentationModeState === _ui_utils.PresentationModeState.NORMAL) {\n      this.previouslyActive = null;\n      this.switchTool(previouslyActive);\n    }\n  };\n  this.eventBus._on(\"secondarytoolbarreset\", evt => {\n    if (this.previouslyActive !== null) {\n      annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE;\n      presentationModeState = _ui_utils.PresentationModeState.NORMAL;\n      enableActive();\n    }\n  });\n  this.eventBus._on(\"annotationeditormodechanged\", _ref2 => {\n    let {\n      mode\n    } = _ref2;\n    annotationEditorMode = mode;\n    if (mode === _pdfjsLib.AnnotationEditorType.NONE) {\n      enableActive();\n    } else {\n      disableActive();\n    }\n  });\n  this.eventBus._on(\"presentationmodechanged\", _ref3 => {\n    let {\n      state\n    } = _ref3;\n    presentationModeState = state;\n    if (state === _ui_utils.PresentationModeState.NORMAL) {\n      enableActive();\n    } else if (state === _ui_utils.PresentationModeState.FULLSCREEN) {\n      disableActive();\n    }\n  });\n}\n\n/***/ }),\n/* 8 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.GrabToPan = void 0;\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst CSS_CLASS_GRAB = \"grab-to-pan-grab\";\nvar _onMouseDown = /*#__PURE__*/new WeakSet();\nvar _onMouseMove = /*#__PURE__*/new WeakSet();\nvar _endPan = /*#__PURE__*/new WeakSet();\nclass GrabToPan {\n  constructor(options) {\n    _classPrivateMethodInitSpec(this, _endPan);\n    _classPrivateMethodInitSpec(this, _onMouseMove);\n    _classPrivateMethodInitSpec(this, _onMouseDown);\n    this.element = options.element;\n    this.document = options.element.ownerDocument;\n    if (typeof options.ignoreTarget === \"function\") {\n      this.ignoreTarget = options.ignoreTarget;\n    }\n    this.onActiveChanged = options.onActiveChanged;\n    this.activate = this.activate.bind(this);\n    this.deactivate = this.deactivate.bind(this);\n    this.toggle = this.toggle.bind(this);\n    this._onMouseDown = _classPrivateMethodGet(this, _onMouseDown, _onMouseDown2).bind(this);\n    this._onMouseMove = _classPrivateMethodGet(this, _onMouseMove, _onMouseMove2).bind(this);\n    this._endPan = _classPrivateMethodGet(this, _endPan, _endPan2).bind(this);\n    const overlay = this.overlay = document.createElement(\"div\");\n    overlay.className = \"grab-to-pan-grabbing\";\n  }\n  activate() {\n    if (!this.active) {\n      var _this$onActiveChanged;\n      this.active = true;\n      this.element.addEventListener(\"mousedown\", this._onMouseDown, true);\n      this.element.classList.add(CSS_CLASS_GRAB);\n      (_this$onActiveChanged = this.onActiveChanged) === null || _this$onActiveChanged === void 0 ? void 0 : _this$onActiveChanged.call(this, true);\n    }\n  }\n  deactivate() {\n    if (this.active) {\n      var _this$onActiveChanged2;\n      this.active = false;\n      this.element.removeEventListener(\"mousedown\", this._onMouseDown, true);\n      this._endPan();\n      this.element.classList.remove(CSS_CLASS_GRAB);\n      (_this$onActiveChanged2 = this.onActiveChanged) === null || _this$onActiveChanged2 === void 0 ? void 0 : _this$onActiveChanged2.call(this, false);\n    }\n  }\n  toggle() {\n    if (this.active) {\n      this.deactivate();\n    } else {\n      this.activate();\n    }\n  }\n  ignoreTarget(node) {\n    return node.matches(\"a[href], a[href] *, input, textarea, button, button *, select, option\");\n  }\n}\nexports.GrabToPan = GrabToPan;\nfunction _onMouseDown2(event) {\n  if (event.button !== 0 || this.ignoreTarget(event.target)) {\n    return;\n  }\n  if (event.originalTarget) {\n    try {\n      event.originalTarget.tagName;\n    } catch (e) {\n      return;\n    }\n  }\n  this.scrollLeftStart = this.element.scrollLeft;\n  this.scrollTopStart = this.element.scrollTop;\n  this.clientXStart = event.clientX;\n  this.clientYStart = event.clientY;\n  this.document.addEventListener(\"mousemove\", this._onMouseMove, true);\n  this.document.addEventListener(\"mouseup\", this._endPan, true);\n  this.element.addEventListener(\"scroll\", this._endPan, true);\n  event.preventDefault();\n  event.stopPropagation();\n  const focusedElement = document.activeElement;\n  if (focusedElement && !focusedElement.contains(event.target)) {\n    focusedElement.blur();\n  }\n}\nfunction _onMouseMove2(event) {\n  this.element.removeEventListener(\"scroll\", this._endPan, true);\n  if (!(event.buttons & 1)) {\n    this._endPan();\n    return;\n  }\n  const xDiff = event.clientX - this.clientXStart;\n  const yDiff = event.clientY - this.clientYStart;\n  const scrollTop = this.scrollTopStart - yDiff;\n  const scrollLeft = this.scrollLeftStart - xDiff;\n  if (this.element.scrollTo) {\n    this.element.scrollTo({\n      top: scrollTop,\n      left: scrollLeft,\n      behavior: \"instant\"\n    });\n  } else {\n    this.element.scrollTop = scrollTop;\n    this.element.scrollLeft = scrollLeft;\n  }\n  if (!this.overlay.parentNode) {\n    document.body.append(this.overlay);\n  }\n}\nfunction _endPan2() {\n  this.element.removeEventListener(\"scroll\", this._endPan, true);\n  this.document.removeEventListener(\"mousemove\", this._onMouseMove, true);\n  this.document.removeEventListener(\"mouseup\", this._endPan, true);\n  this.overlay.remove();\n}\n\n/***/ }),\n/* 9 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.AnnotationEditorParams = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar _bindListeners = /*#__PURE__*/new WeakSet();\nclass AnnotationEditorParams {\n  constructor(options, eventBus) {\n    _classPrivateMethodInitSpec(this, _bindListeners);\n    this.eventBus = eventBus;\n    _classPrivateMethodGet(this, _bindListeners, _bindListeners2).call(this, options);\n  }\n}\nexports.AnnotationEditorParams = AnnotationEditorParams;\nfunction _bindListeners2(_ref) {\n  let {\n    editorFreeTextFontSize,\n    editorFreeTextColor,\n    editorInkColor,\n    editorInkThickness,\n    editorInkOpacity\n  } = _ref;\n  editorFreeTextFontSize.addEventListener(\"input\", evt => {\n    this.eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: _pdfjsLib.AnnotationEditorParamsType.FREETEXT_SIZE,\n      value: editorFreeTextFontSize.valueAsNumber\n    });\n  });\n  editorFreeTextColor.addEventListener(\"input\", evt => {\n    this.eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: _pdfjsLib.AnnotationEditorParamsType.FREETEXT_COLOR,\n      value: editorFreeTextColor.value\n    });\n  });\n  editorInkColor.addEventListener(\"input\", evt => {\n    this.eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: _pdfjsLib.AnnotationEditorParamsType.INK_COLOR,\n      value: editorInkColor.value\n    });\n  });\n  editorInkThickness.addEventListener(\"input\", evt => {\n    this.eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: _pdfjsLib.AnnotationEditorParamsType.INK_THICKNESS,\n      value: editorInkThickness.valueAsNumber\n    });\n  });\n  editorInkOpacity.addEventListener(\"input\", evt => {\n    this.eventBus.dispatch(\"switchannotationeditorparams\", {\n      source: this,\n      type: _pdfjsLib.AnnotationEditorParamsType.INK_OPACITY,\n      value: editorInkOpacity.valueAsNumber\n    });\n  });\n  this.eventBus._on(\"annotationeditorparamschanged\", evt => {\n    for (const [type, value] of evt.details) {\n      switch (type) {\n        case _pdfjsLib.AnnotationEditorParamsType.FREETEXT_SIZE:\n          editorFreeTextFontSize.value = value;\n          break;\n        case _pdfjsLib.AnnotationEditorParamsType.FREETEXT_COLOR:\n          editorFreeTextColor.value = value;\n          break;\n        case _pdfjsLib.AnnotationEditorParamsType.INK_COLOR:\n          editorInkColor.value = value;\n          break;\n        case _pdfjsLib.AnnotationEditorParamsType.INK_THICKNESS:\n          editorInkThickness.value = value;\n          break;\n        case _pdfjsLib.AnnotationEditorParamsType.INK_OPACITY:\n          editorInkOpacity.value = value;\n          break;\n      }\n    }\n  });\n}\n\n/***/ }),\n/* 10 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.OverlayManager = void 0;\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nvar _overlays = /*#__PURE__*/new WeakMap();\nvar _active = /*#__PURE__*/new WeakMap();\nclass OverlayManager {\n  constructor() {\n    _classPrivateFieldInitSpec(this, _overlays, {\n      writable: true,\n      value: new WeakMap()\n    });\n    _classPrivateFieldInitSpec(this, _active, {\n      writable: true,\n      value: null\n    });\n  }\n  get active() {\n    return _classPrivateFieldGet(this, _active);\n  }\n  async register(dialog) {\n    let canForceClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    if (typeof dialog !== \"object\") {\n      throw new Error(\"Not enough parameters.\");\n    } else if (_classPrivateFieldGet(this, _overlays).has(dialog)) {\n      throw new Error(\"The overlay is already registered.\");\n    }\n    _classPrivateFieldGet(this, _overlays).set(dialog, {\n      canForceClose\n    });\n    if (!dialog.showModal) {\n      const dialogPolyfill = __webpack_require__(11);\n      dialogPolyfill.registerDialog(dialog);\n      if (!this._dialogPolyfillCSS) {\n        this._dialogPolyfillCSS = true;\n        const style = document.createElement(\"style\");\n        style.textContent = 'dialog {\\n  position: absolute;\\n  left: 0; right: 0;\\n  width: -moz-fit-content;\\n  width: -webkit-fit-content;\\n  width: fit-content;\\n  height: -moz-fit-content;\\n  height: -webkit-fit-content;\\n  height: fit-content;\\n  margin: auto;\\n  border: solid;\\n  padding: 1em;\\n  background: white;\\n  color: black;\\n  display: block;\\n}\\n\\ndialog:not([open]) {\\n  display: none;\\n}\\n\\ndialog + .backdrop {\\n  position: fixed;\\n  top: 0; right: 0; bottom: 0; left: 0;\\n  background: rgba(0,0,0,0.1);\\n}\\n\\n._dialog_overlay {\\n  position: fixed;\\n  top: 0; right: 0; bottom: 0; left: 0;\\n}\\n\\ndialog.fixed {\\n  position: fixed;\\n  top: 50%;\\n  transform: translate(0, -50%);\\n}';\n        document.head.prepend(style);\n      }\n    }\n    dialog.addEventListener(\"cancel\", evt => {\n      _classPrivateFieldSet(this, _active, null);\n    });\n  }\n  async unregister(dialog) {\n    if (!_classPrivateFieldGet(this, _overlays).has(dialog)) {\n      throw new Error(\"The overlay does not exist.\");\n    } else if (_classPrivateFieldGet(this, _active) === dialog) {\n      throw new Error(\"The overlay cannot be removed while it is active.\");\n    }\n    _classPrivateFieldGet(this, _overlays).delete(dialog);\n  }\n  async open(dialog) {\n    if (!_classPrivateFieldGet(this, _overlays).has(dialog)) {\n      throw new Error(\"The overlay does not exist.\");\n    } else if (_classPrivateFieldGet(this, _active)) {\n      if (_classPrivateFieldGet(this, _active) === dialog) {\n        throw new Error(\"The overlay is already active.\");\n      } else if (_classPrivateFieldGet(this, _overlays).get(dialog).canForceClose) {\n        await this.close();\n      } else {\n        throw new Error(\"Another overlay is currently active.\");\n      }\n    }\n    _classPrivateFieldSet(this, _active, dialog);\n    dialog.showModal();\n  }\n  async close() {\n    let dialog = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _classPrivateFieldGet(this, _active);\n    if (!_classPrivateFieldGet(this, _overlays).has(dialog)) {\n      throw new Error(\"The overlay does not exist.\");\n    } else if (!_classPrivateFieldGet(this, _active)) {\n      throw new Error(\"The overlay is currently not active.\");\n    } else if (_classPrivateFieldGet(this, _active) !== dialog) {\n      throw new Error(\"Another overlay is currently active.\");\n    }\n    dialog.close();\n    _classPrivateFieldSet(this, _active, null);\n  }\n}\nexports.OverlayManager = OverlayManager;\n\n/***/ }),\n/* 11 */\n/***/ ((module) => {\n\n\n\n(function (global, factory) {\n   true ? module.exports = factory() : 0;\n})(void 0, function () {\n  'use strict';\n\n  var supportCustomEvent = window.CustomEvent;\n  if (!supportCustomEvent || typeof supportCustomEvent === 'object') {\n    supportCustomEvent = function CustomEvent(event, x) {\n      x = x || {};\n      var ev = document.createEvent('CustomEvent');\n      ev.initCustomEvent(event, !!x.bubbles, !!x.cancelable, x.detail || null);\n      return ev;\n    };\n    supportCustomEvent.prototype = window.Event.prototype;\n  }\n  function safeDispatchEvent(target, event) {\n    var check = 'on' + event.type.toLowerCase();\n    if (typeof target[check] === 'function') {\n      target[check](event);\n    }\n    return target.dispatchEvent(event);\n  }\n  function createsStackingContext(el) {\n    while (el && el !== document.body) {\n      var s = window.getComputedStyle(el);\n      var invalid = function (k, ok) {\n        return !(s[k] === undefined || s[k] === ok);\n      };\n      if (s.opacity < 1 || invalid('zIndex', 'auto') || invalid('transform', 'none') || invalid('mixBlendMode', 'normal') || invalid('filter', 'none') || invalid('perspective', 'none') || s['isolation'] === 'isolate' || s.position === 'fixed' || s.webkitOverflowScrolling === 'touch') {\n        return true;\n      }\n      el = el.parentElement;\n    }\n    return false;\n  }\n  function findNearestDialog(el) {\n    while (el) {\n      if (el.localName === 'dialog') {\n        return el;\n      }\n      if (el.parentElement) {\n        el = el.parentElement;\n      } else if (el.parentNode) {\n        el = el.parentNode.host;\n      } else {\n        el = null;\n      }\n    }\n    return null;\n  }\n  function safeBlur(el) {\n    while (el && el.shadowRoot && el.shadowRoot.activeElement) {\n      el = el.shadowRoot.activeElement;\n    }\n    if (el && el.blur && el !== document.body) {\n      el.blur();\n    }\n  }\n  function inNodeList(nodeList, node) {\n    for (var i = 0; i < nodeList.length; ++i) {\n      if (nodeList[i] === node) {\n        return true;\n      }\n    }\n    return false;\n  }\n  function isFormMethodDialog(el) {\n    if (!el || !el.hasAttribute('method')) {\n      return false;\n    }\n    return el.getAttribute('method').toLowerCase() === 'dialog';\n  }\n  function findFocusableElementWithin(hostElement) {\n    var opts = ['button', 'input', 'keygen', 'select', 'textarea'];\n    var query = opts.map(function (el) {\n      return el + ':not([disabled])';\n    });\n    query.push('[tabindex]:not([disabled]):not([tabindex=\"\"])');\n    var target = hostElement.querySelector(query.join(', '));\n    if (!target && 'attachShadow' in Element.prototype) {\n      var elems = hostElement.querySelectorAll('*');\n      for (var i = 0; i < elems.length; i++) {\n        if (elems[i].tagName && elems[i].shadowRoot) {\n          target = findFocusableElementWithin(elems[i].shadowRoot);\n          if (target) {\n            break;\n          }\n        }\n      }\n    }\n    return target;\n  }\n  function isConnected(element) {\n    return element.isConnected || document.body.contains(element);\n  }\n  function findFormSubmitter(event) {\n    if (event.submitter) {\n      return event.submitter;\n    }\n    var form = event.target;\n    if (!(form instanceof HTMLFormElement)) {\n      return null;\n    }\n    var submitter = dialogPolyfill.formSubmitter;\n    if (!submitter) {\n      var target = event.target;\n      var root = 'getRootNode' in target && target.getRootNode() || document;\n      submitter = root.activeElement;\n    }\n    if (!submitter || submitter.form !== form) {\n      return null;\n    }\n    return submitter;\n  }\n  function maybeHandleSubmit(event) {\n    if (event.defaultPrevented) {\n      return;\n    }\n    var form = event.target;\n    var value = dialogPolyfill.imagemapUseValue;\n    var submitter = findFormSubmitter(event);\n    if (value === null && submitter) {\n      value = submitter.value;\n    }\n    var dialog = findNearestDialog(form);\n    if (!dialog) {\n      return;\n    }\n    var formmethod = submitter && submitter.getAttribute('formmethod') || form.getAttribute('method');\n    if (formmethod !== 'dialog') {\n      return;\n    }\n    event.preventDefault();\n    if (value != null) {\n      dialog.close(value);\n    } else {\n      dialog.close();\n    }\n  }\n  function dialogPolyfillInfo(dialog) {\n    this.dialog_ = dialog;\n    this.replacedStyleTop_ = false;\n    this.openAsModal_ = false;\n    if (!dialog.hasAttribute('role')) {\n      dialog.setAttribute('role', 'dialog');\n    }\n    dialog.show = this.show.bind(this);\n    dialog.showModal = this.showModal.bind(this);\n    dialog.close = this.close.bind(this);\n    dialog.addEventListener('submit', maybeHandleSubmit, false);\n    if (!('returnValue' in dialog)) {\n      dialog.returnValue = '';\n    }\n    if ('MutationObserver' in window) {\n      var mo = new MutationObserver(this.maybeHideModal.bind(this));\n      mo.observe(dialog, {\n        attributes: true,\n        attributeFilter: ['open']\n      });\n    } else {\n      var removed = false;\n      var cb = function () {\n        removed ? this.downgradeModal() : this.maybeHideModal();\n        removed = false;\n      }.bind(this);\n      var timeout;\n      var delayModel = function (ev) {\n        if (ev.target !== dialog) {\n          return;\n        }\n        var cand = 'DOMNodeRemoved';\n        removed |= ev.type.substr(0, cand.length) === cand;\n        window.clearTimeout(timeout);\n        timeout = window.setTimeout(cb, 0);\n      };\n      ['DOMAttrModified', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument'].forEach(function (name) {\n        dialog.addEventListener(name, delayModel);\n      });\n    }\n    Object.defineProperty(dialog, 'open', {\n      set: this.setOpen.bind(this),\n      get: dialog.hasAttribute.bind(dialog, 'open')\n    });\n    this.backdrop_ = document.createElement('div');\n    this.backdrop_.className = 'backdrop';\n    this.backdrop_.addEventListener('mouseup', this.backdropMouseEvent_.bind(this));\n    this.backdrop_.addEventListener('mousedown', this.backdropMouseEvent_.bind(this));\n    this.backdrop_.addEventListener('click', this.backdropMouseEvent_.bind(this));\n  }\n  dialogPolyfillInfo.prototype = {\n    get dialog() {\n      return this.dialog_;\n    },\n    maybeHideModal: function () {\n      if (this.dialog_.hasAttribute('open') && isConnected(this.dialog_)) {\n        return;\n      }\n      this.downgradeModal();\n    },\n    downgradeModal: function () {\n      if (!this.openAsModal_) {\n        return;\n      }\n      this.openAsModal_ = false;\n      this.dialog_.style.zIndex = '';\n      if (this.replacedStyleTop_) {\n        this.dialog_.style.top = '';\n        this.replacedStyleTop_ = false;\n      }\n      this.backdrop_.parentNode && this.backdrop_.parentNode.removeChild(this.backdrop_);\n      dialogPolyfill.dm.removeDialog(this);\n    },\n    setOpen: function (value) {\n      if (value) {\n        this.dialog_.hasAttribute('open') || this.dialog_.setAttribute('open', '');\n      } else {\n        this.dialog_.removeAttribute('open');\n        this.maybeHideModal();\n      }\n    },\n    backdropMouseEvent_: function (e) {\n      if (!this.dialog_.hasAttribute('tabindex')) {\n        var fake = document.createElement('div');\n        this.dialog_.insertBefore(fake, this.dialog_.firstChild);\n        fake.tabIndex = -1;\n        fake.focus();\n        this.dialog_.removeChild(fake);\n      } else {\n        this.dialog_.focus();\n      }\n      var redirectedEvent = document.createEvent('MouseEvents');\n      redirectedEvent.initMouseEvent(e.type, e.bubbles, e.cancelable, window, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);\n      this.dialog_.dispatchEvent(redirectedEvent);\n      e.stopPropagation();\n    },\n    focus_: function () {\n      var target = this.dialog_.querySelector('[autofocus]:not([disabled])');\n      if (!target && this.dialog_.tabIndex >= 0) {\n        target = this.dialog_;\n      }\n      if (!target) {\n        target = findFocusableElementWithin(this.dialog_);\n      }\n      safeBlur(document.activeElement);\n      target && target.focus();\n    },\n    updateZIndex: function (dialogZ, backdropZ) {\n      if (dialogZ < backdropZ) {\n        throw new Error('dialogZ should never be < backdropZ');\n      }\n      this.dialog_.style.zIndex = dialogZ;\n      this.backdrop_.style.zIndex = backdropZ;\n    },\n    show: function () {\n      if (!this.dialog_.open) {\n        this.setOpen(true);\n        this.focus_();\n      }\n    },\n    showModal: function () {\n      if (this.dialog_.hasAttribute('open')) {\n        throw new Error('Failed to execute \\'showModal\\' on dialog: The element is already open, and therefore cannot be opened modally.');\n      }\n      if (!isConnected(this.dialog_)) {\n        throw new Error('Failed to execute \\'showModal\\' on dialog: The element is not in a Document.');\n      }\n      if (!dialogPolyfill.dm.pushDialog(this)) {\n        throw new Error('Failed to execute \\'showModal\\' on dialog: There are too many open modal dialogs.');\n      }\n      if (createsStackingContext(this.dialog_.parentElement)) {\n        console.warn('A dialog is being shown inside a stacking context. ' + 'This may cause it to be unusable. For more information, see this link: ' + 'https://github.com/GoogleChrome/dialog-polyfill/#stacking-context');\n      }\n      this.setOpen(true);\n      this.openAsModal_ = true;\n      if (dialogPolyfill.needsCentering(this.dialog_)) {\n        dialogPolyfill.reposition(this.dialog_);\n        this.replacedStyleTop_ = true;\n      } else {\n        this.replacedStyleTop_ = false;\n      }\n      this.dialog_.parentNode.insertBefore(this.backdrop_, this.dialog_.nextSibling);\n      this.focus_();\n    },\n    close: function (opt_returnValue) {\n      if (!this.dialog_.hasAttribute('open')) {\n        throw new Error('Failed to execute \\'close\\' on dialog: The element does not have an \\'open\\' attribute, and therefore cannot be closed.');\n      }\n      this.setOpen(false);\n      if (opt_returnValue !== undefined) {\n        this.dialog_.returnValue = opt_returnValue;\n      }\n      var closeEvent = new supportCustomEvent('close', {\n        bubbles: false,\n        cancelable: false\n      });\n      safeDispatchEvent(this.dialog_, closeEvent);\n    }\n  };\n  var dialogPolyfill = {};\n  dialogPolyfill.reposition = function (element) {\n    var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n    var topValue = scrollTop + (window.innerHeight - element.offsetHeight) / 2;\n    element.style.top = Math.max(scrollTop, topValue) + 'px';\n  };\n  dialogPolyfill.isInlinePositionSetByStylesheet = function (element) {\n    for (var i = 0; i < document.styleSheets.length; ++i) {\n      var styleSheet = document.styleSheets[i];\n      var cssRules = null;\n      try {\n        cssRules = styleSheet.cssRules;\n      } catch (e) {}\n      if (!cssRules) {\n        continue;\n      }\n      for (var j = 0; j < cssRules.length; ++j) {\n        var rule = cssRules[j];\n        var selectedNodes = null;\n        try {\n          selectedNodes = document.querySelectorAll(rule.selectorText);\n        } catch (e) {}\n        if (!selectedNodes || !inNodeList(selectedNodes, element)) {\n          continue;\n        }\n        var cssTop = rule.style.getPropertyValue('top');\n        var cssBottom = rule.style.getPropertyValue('bottom');\n        if (cssTop && cssTop !== 'auto' || cssBottom && cssBottom !== 'auto') {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n  dialogPolyfill.needsCentering = function (dialog) {\n    var computedStyle = window.getComputedStyle(dialog);\n    if (computedStyle.position !== 'absolute') {\n      return false;\n    }\n    if (dialog.style.top !== 'auto' && dialog.style.top !== '' || dialog.style.bottom !== 'auto' && dialog.style.bottom !== '') {\n      return false;\n    }\n    return !dialogPolyfill.isInlinePositionSetByStylesheet(dialog);\n  };\n  dialogPolyfill.forceRegisterDialog = function (element) {\n    if (window.HTMLDialogElement || element.showModal) {\n      console.warn('This browser already supports <dialog>, the polyfill ' + 'may not work correctly', element);\n    }\n    if (element.localName !== 'dialog') {\n      throw new Error('Failed to register dialog: The element is not a dialog.');\n    }\n    new dialogPolyfillInfo(element);\n  };\n  dialogPolyfill.registerDialog = function (element) {\n    if (!element.showModal) {\n      dialogPolyfill.forceRegisterDialog(element);\n    }\n  };\n  dialogPolyfill.DialogManager = function () {\n    this.pendingDialogStack = [];\n    var checkDOM = this.checkDOM_.bind(this);\n    this.overlay = document.createElement('div');\n    this.overlay.className = '_dialog_overlay';\n    this.overlay.addEventListener('click', function (e) {\n      this.forwardTab_ = undefined;\n      e.stopPropagation();\n      checkDOM([]);\n    }.bind(this));\n    this.handleKey_ = this.handleKey_.bind(this);\n    this.handleFocus_ = this.handleFocus_.bind(this);\n    this.zIndexLow_ = 100000;\n    this.zIndexHigh_ = 100000 + 150;\n    this.forwardTab_ = undefined;\n    if ('MutationObserver' in window) {\n      this.mo_ = new MutationObserver(function (records) {\n        var removed = [];\n        records.forEach(function (rec) {\n          for (var i = 0, c; c = rec.removedNodes[i]; ++i) {\n            if (!(c instanceof Element)) {\n              continue;\n            } else if (c.localName === 'dialog') {\n              removed.push(c);\n            }\n            removed = removed.concat(c.querySelectorAll('dialog'));\n          }\n        });\n        removed.length && checkDOM(removed);\n      });\n    }\n  };\n  dialogPolyfill.DialogManager.prototype.blockDocument = function () {\n    document.documentElement.addEventListener('focus', this.handleFocus_, true);\n    document.addEventListener('keydown', this.handleKey_);\n    this.mo_ && this.mo_.observe(document, {\n      childList: true,\n      subtree: true\n    });\n  };\n  dialogPolyfill.DialogManager.prototype.unblockDocument = function () {\n    document.documentElement.removeEventListener('focus', this.handleFocus_, true);\n    document.removeEventListener('keydown', this.handleKey_);\n    this.mo_ && this.mo_.disconnect();\n  };\n  dialogPolyfill.DialogManager.prototype.updateStacking = function () {\n    var zIndex = this.zIndexHigh_;\n    for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {\n      dpi.updateZIndex(--zIndex, --zIndex);\n      if (i === 0) {\n        this.overlay.style.zIndex = --zIndex;\n      }\n    }\n    var last = this.pendingDialogStack[0];\n    if (last) {\n      var p = last.dialog.parentNode || document.body;\n      p.appendChild(this.overlay);\n    } else if (this.overlay.parentNode) {\n      this.overlay.parentNode.removeChild(this.overlay);\n    }\n  };\n  dialogPolyfill.DialogManager.prototype.containedByTopDialog_ = function (candidate) {\n    while (candidate = findNearestDialog(candidate)) {\n      for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {\n        if (dpi.dialog === candidate) {\n          return i === 0;\n        }\n      }\n      candidate = candidate.parentElement;\n    }\n    return false;\n  };\n  dialogPolyfill.DialogManager.prototype.handleFocus_ = function (event) {\n    var target = event.composedPath ? event.composedPath()[0] : event.target;\n    if (this.containedByTopDialog_(target)) {\n      return;\n    }\n    if (document.activeElement === document.documentElement) {\n      return;\n    }\n    event.preventDefault();\n    event.stopPropagation();\n    safeBlur(target);\n    if (this.forwardTab_ === undefined) {\n      return;\n    }\n    var dpi = this.pendingDialogStack[0];\n    var dialog = dpi.dialog;\n    var position = dialog.compareDocumentPosition(target);\n    if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n      if (this.forwardTab_) {\n        dpi.focus_();\n      } else if (target !== document.documentElement) {\n        document.documentElement.focus();\n      }\n    }\n    return false;\n  };\n  dialogPolyfill.DialogManager.prototype.handleKey_ = function (event) {\n    this.forwardTab_ = undefined;\n    if (event.keyCode === 27) {\n      event.preventDefault();\n      event.stopPropagation();\n      var cancelEvent = new supportCustomEvent('cancel', {\n        bubbles: false,\n        cancelable: true\n      });\n      var dpi = this.pendingDialogStack[0];\n      if (dpi && safeDispatchEvent(dpi.dialog, cancelEvent)) {\n        dpi.dialog.close();\n      }\n    } else if (event.keyCode === 9) {\n      this.forwardTab_ = !event.shiftKey;\n    }\n  };\n  dialogPolyfill.DialogManager.prototype.checkDOM_ = function (removed) {\n    var clone = this.pendingDialogStack.slice();\n    clone.forEach(function (dpi) {\n      if (removed.indexOf(dpi.dialog) !== -1) {\n        dpi.downgradeModal();\n      } else {\n        dpi.maybeHideModal();\n      }\n    });\n  };\n  dialogPolyfill.DialogManager.prototype.pushDialog = function (dpi) {\n    var allowed = (this.zIndexHigh_ - this.zIndexLow_) / 2 - 1;\n    if (this.pendingDialogStack.length >= allowed) {\n      return false;\n    }\n    if (this.pendingDialogStack.unshift(dpi) === 1) {\n      this.blockDocument();\n    }\n    this.updateStacking();\n    return true;\n  };\n  dialogPolyfill.DialogManager.prototype.removeDialog = function (dpi) {\n    var index = this.pendingDialogStack.indexOf(dpi);\n    if (index === -1) {\n      return;\n    }\n    this.pendingDialogStack.splice(index, 1);\n    if (this.pendingDialogStack.length === 0) {\n      this.unblockDocument();\n    }\n    this.updateStacking();\n  };\n  dialogPolyfill.dm = new dialogPolyfill.DialogManager();\n  dialogPolyfill.formSubmitter = null;\n  dialogPolyfill.imagemapUseValue = null;\n  if (window.HTMLDialogElement === undefined) {\n    var testForm = document.createElement('form');\n    testForm.setAttribute('method', 'dialog');\n    if (testForm.method !== 'dialog') {\n      var methodDescriptor = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, 'method');\n      if (methodDescriptor) {\n        var realGet = methodDescriptor.get;\n        methodDescriptor.get = function () {\n          if (isFormMethodDialog(this)) {\n            return 'dialog';\n          }\n          return realGet.call(this);\n        };\n        var realSet = methodDescriptor.set;\n        methodDescriptor.set = function (v) {\n          if (typeof v === 'string' && v.toLowerCase() === 'dialog') {\n            return this.setAttribute('method', v);\n          }\n          return realSet.call(this, v);\n        };\n        Object.defineProperty(HTMLFormElement.prototype, 'method', methodDescriptor);\n      }\n    }\n    document.addEventListener('click', function (ev) {\n      dialogPolyfill.formSubmitter = null;\n      dialogPolyfill.imagemapUseValue = null;\n      if (ev.defaultPrevented) {\n        return;\n      }\n      var target = ev.target;\n      if ('composedPath' in ev) {\n        var path = ev.composedPath();\n        target = path.shift() || target;\n      }\n      if (!target || !isFormMethodDialog(target.form)) {\n        return;\n      }\n      var valid = target.type === 'submit' && ['button', 'input'].indexOf(target.localName) > -1;\n      if (!valid) {\n        if (!(target.localName === 'input' && target.type === 'image')) {\n          return;\n        }\n        dialogPolyfill.imagemapUseValue = ev.offsetX + ',' + ev.offsetY;\n      }\n      var dialog = findNearestDialog(target);\n      if (!dialog) {\n        return;\n      }\n      dialogPolyfill.formSubmitter = target;\n    }, false);\n    document.addEventListener('submit', function (ev) {\n      var form = ev.target;\n      var dialog = findNearestDialog(form);\n      if (dialog) {\n        return;\n      }\n      var submitter = findFormSubmitter(ev);\n      var formmethod = submitter && submitter.getAttribute('formmethod') || form.getAttribute('method');\n      if (formmethod === 'dialog') {\n        ev.preventDefault();\n      }\n    });\n    var nativeFormSubmit = HTMLFormElement.prototype.submit;\n    var replacementFormSubmit = function () {\n      if (!isFormMethodDialog(this)) {\n        return nativeFormSubmit.call(this);\n      }\n      var dialog = findNearestDialog(this);\n      dialog && dialog.close();\n    };\n    HTMLFormElement.prototype.submit = replacementFormSubmit;\n  }\n  return dialogPolyfill;\n});\n\n/***/ }),\n/* 12 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PasswordPrompt = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar _activeCapability = /*#__PURE__*/new WeakMap();\nvar _updateCallback = /*#__PURE__*/new WeakMap();\nvar _reason = /*#__PURE__*/new WeakMap();\nvar _verify = /*#__PURE__*/new WeakSet();\nvar _cancel = /*#__PURE__*/new WeakSet();\nvar _invokeCallback = /*#__PURE__*/new WeakSet();\nclass PasswordPrompt {\n  constructor(options, overlayManager, l10n) {\n    let isViewerEmbedded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    _classPrivateMethodInitSpec(this, _invokeCallback);\n    _classPrivateMethodInitSpec(this, _cancel);\n    _classPrivateMethodInitSpec(this, _verify);\n    _classPrivateFieldInitSpec(this, _activeCapability, {\n      writable: true,\n      value: null\n    });\n    _classPrivateFieldInitSpec(this, _updateCallback, {\n      writable: true,\n      value: null\n    });\n    _classPrivateFieldInitSpec(this, _reason, {\n      writable: true,\n      value: null\n    });\n    this.dialog = options.dialog;\n    this.label = options.label;\n    this.input = options.input;\n    this.submitButton = options.submitButton;\n    this.cancelButton = options.cancelButton;\n    this.overlayManager = overlayManager;\n    this.l10n = l10n;\n    this._isViewerEmbedded = isViewerEmbedded;\n    this.submitButton.addEventListener(\"click\", _classPrivateMethodGet(this, _verify, _verify2).bind(this));\n    this.cancelButton.addEventListener(\"click\", this.close.bind(this));\n    this.input.addEventListener(\"keydown\", e => {\n      if (e.keyCode === 13) {\n        _classPrivateMethodGet(this, _verify, _verify2).call(this);\n      }\n    });\n    this.overlayManager.register(this.dialog, true);\n    this.dialog.addEventListener(\"close\", _classPrivateMethodGet(this, _cancel, _cancel2).bind(this));\n  }\n  async open() {\n    if (_classPrivateFieldGet(this, _activeCapability)) {\n      await _classPrivateFieldGet(this, _activeCapability).promise;\n    }\n    _classPrivateFieldSet(this, _activeCapability, (0, _pdfjsLib.createPromiseCapability)());\n    try {\n      await this.overlayManager.open(this.dialog);\n    } catch (ex) {\n      _classPrivateFieldSet(this, _activeCapability, null);\n      throw ex;\n    }\n    const passwordIncorrect = _classPrivateFieldGet(this, _reason) === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD;\n    if (!this._isViewerEmbedded || passwordIncorrect) {\n      this.input.focus();\n    }\n    this.label.textContent = await this.l10n.get(`password_${passwordIncorrect ? \"invalid\" : \"label\"}`);\n  }\n  async close() {\n    if (this.overlayManager.active === this.dialog) {\n      this.overlayManager.close(this.dialog);\n    }\n  }\n  async setUpdateCallback(updateCallback, reason) {\n    if (_classPrivateFieldGet(this, _activeCapability)) {\n      await _classPrivateFieldGet(this, _activeCapability).promise;\n    }\n    _classPrivateFieldSet(this, _updateCallback, updateCallback);\n    _classPrivateFieldSet(this, _reason, reason);\n  }\n}\nexports.PasswordPrompt = PasswordPrompt;\nfunction _verify2() {\n  const password = this.input.value;\n  if ((password === null || password === void 0 ? void 0 : password.length) > 0) {\n    _classPrivateMethodGet(this, _invokeCallback, _invokeCallback2).call(this, password);\n  }\n}\nfunction _cancel2() {\n  _classPrivateMethodGet(this, _invokeCallback, _invokeCallback2).call(this, new Error(\"PasswordPrompt cancelled.\"));\n  _classPrivateFieldGet(this, _activeCapability).resolve();\n}\nfunction _invokeCallback2(password) {\n  if (!_classPrivateFieldGet(this, _updateCallback)) {\n    return;\n  }\n  this.close();\n  this.input.value = \"\";\n  _classPrivateFieldGet(this, _updateCallback).call(this, password);\n  _classPrivateFieldSet(this, _updateCallback, null);\n}\n\n/***/ }),\n/* 13 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFAttachmentViewer = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _base_tree_viewer = __webpack_require__(14);\nvar _event_utils = __webpack_require__(6);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar _appendAttachment = /*#__PURE__*/new WeakSet();\nclass PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer {\n  constructor(options) {\n    super(options);\n    _classPrivateMethodInitSpec(this, _appendAttachment);\n    this.downloadManager = options.downloadManager;\n    this.eventBus._on(\"fileattachmentannotation\", _classPrivateMethodGet(this, _appendAttachment, _appendAttachment2).bind(this));\n  }\n  reset() {\n    let keepRenderedCapability = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    super.reset();\n    this._attachments = null;\n    if (!keepRenderedCapability) {\n      this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)();\n    }\n    this._pendingDispatchEvent = false;\n  }\n  async _dispatchEvent(attachmentsCount) {\n    this._renderedCapability.resolve();\n    if (attachmentsCount === 0 && !this._pendingDispatchEvent) {\n      this._pendingDispatchEvent = true;\n      await (0, _event_utils.waitOnEventOrTimeout)({\n        target: this.eventBus,\n        name: \"annotationlayerrendered\",\n        delay: 1000\n      });\n      if (!this._pendingDispatchEvent) {\n        return;\n      }\n    }\n    this._pendingDispatchEvent = false;\n    this.eventBus.dispatch(\"attachmentsloaded\", {\n      source: this,\n      attachmentsCount\n    });\n  }\n  _bindLink(element, _ref) {\n    let {\n      content,\n      filename\n    } = _ref;\n    element.onclick = () => {\n      this.downloadManager.openOrDownloadData(element, content, filename);\n      return false;\n    };\n  }\n  render(_ref2) {\n    let {\n      attachments,\n      keepRenderedCapability = false\n    } = _ref2;\n    if (this._attachments) {\n      this.reset(keepRenderedCapability);\n    }\n    this._attachments = attachments || null;\n    if (!attachments) {\n      this._dispatchEvent(0);\n      return;\n    }\n    const names = Object.keys(attachments).sort(function (a, b) {\n      return a.toLowerCase().localeCompare(b.toLowerCase());\n    });\n    const fragment = document.createDocumentFragment();\n    let attachmentsCount = 0;\n    for (const name of names) {\n      const item = attachments[name];\n      const content = item.content,\n        filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename, true);\n      const div = document.createElement(\"div\");\n      div.className = \"treeItem\";\n      const element = document.createElement(\"a\");\n      this._bindLink(element, {\n        content,\n        filename\n      });\n      element.textContent = this._normalizeTextContent(filename);\n      div.append(element);\n      fragment.append(div);\n      attachmentsCount++;\n    }\n    this._finishRendering(fragment, attachmentsCount);\n  }\n}\nexports.PDFAttachmentViewer = PDFAttachmentViewer;\nfunction _appendAttachment2(_ref3) {\n  let {\n    filename,\n    content\n  } = _ref3;\n  const renderedPromise = this._renderedCapability.promise;\n  renderedPromise.then(() => {\n    if (renderedPromise !== this._renderedCapability.promise) {\n      return;\n    }\n    const attachments = this._attachments || Object.create(null);\n    for (const name in attachments) {\n      if (filename === name) {\n        return;\n      }\n    }\n    attachments[filename] = {\n      filename,\n      content\n    };\n    this.render({\n      attachments,\n      keepRenderedCapability: true\n    });\n  });\n}\n\n/***/ }),\n/* 14 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.BaseTreeViewer = void 0;\nvar _ui_utils = __webpack_require__(1);\nconst TREEITEM_OFFSET_TOP = -100;\nconst TREEITEM_SELECTED_CLASS = \"selected\";\nclass BaseTreeViewer {\n  constructor(options) {\n    if (this.constructor === BaseTreeViewer) {\n      throw new Error(\"Cannot initialize BaseTreeViewer.\");\n    }\n    this.container = options.container;\n    this.eventBus = options.eventBus;\n    this.reset();\n  }\n  reset() {\n    this._pdfDocument = null;\n    this._lastToggleIsShow = true;\n    this._currentTreeItem = null;\n    this.container.textContent = \"\";\n    this.container.classList.remove(\"treeWithDeepNesting\");\n  }\n  _dispatchEvent(count) {\n    throw new Error(\"Not implemented: _dispatchEvent\");\n  }\n  _bindLink(element, params) {\n    throw new Error(\"Not implemented: _bindLink\");\n  }\n  _normalizeTextContent(str) {\n    return (0, _ui_utils.removeNullCharacters)(str, true) || \"\\u2013\";\n  }\n  _addToggleButton(div) {\n    let hidden = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    const toggler = document.createElement(\"div\");\n    toggler.className = \"treeItemToggler\";\n    if (hidden) {\n      toggler.classList.add(\"treeItemsHidden\");\n    }\n    toggler.onclick = evt => {\n      evt.stopPropagation();\n      toggler.classList.toggle(\"treeItemsHidden\");\n      if (evt.shiftKey) {\n        const shouldShowAll = !toggler.classList.contains(\"treeItemsHidden\");\n        this._toggleTreeItem(div, shouldShowAll);\n      }\n    };\n    div.prepend(toggler);\n  }\n  _toggleTreeItem(root) {\n    let show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    this._lastToggleIsShow = show;\n    for (const toggler of root.querySelectorAll(\".treeItemToggler\")) {\n      toggler.classList.toggle(\"treeItemsHidden\", !show);\n    }\n  }\n  _toggleAllTreeItems() {\n    this._toggleTreeItem(this.container, !this._lastToggleIsShow);\n  }\n  _finishRendering(fragment, count) {\n    let hasAnyNesting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    if (hasAnyNesting) {\n      this.container.classList.add(\"treeWithDeepNesting\");\n      this._lastToggleIsShow = !fragment.querySelector(\".treeItemsHidden\");\n    }\n    this.container.append(fragment);\n    this._dispatchEvent(count);\n  }\n  render(params) {\n    throw new Error(\"Not implemented: render\");\n  }\n  _updateCurrentTreeItem() {\n    let treeItem = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    if (this._currentTreeItem) {\n      this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);\n      this._currentTreeItem = null;\n    }\n    if (treeItem) {\n      treeItem.classList.add(TREEITEM_SELECTED_CLASS);\n      this._currentTreeItem = treeItem;\n    }\n  }\n  _scrollToCurrentTreeItem(treeItem) {\n    if (!treeItem) {\n      return;\n    }\n    let currentNode = treeItem.parentNode;\n    while (currentNode && currentNode !== this.container) {\n      if (currentNode.classList.contains(\"treeItem\")) {\n        const toggler = currentNode.firstElementChild;\n        toggler === null || toggler === void 0 ? void 0 : toggler.classList.remove(\"treeItemsHidden\");\n      }\n      currentNode = currentNode.parentNode;\n    }\n    this._updateCurrentTreeItem(treeItem);\n    this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP);\n  }\n}\nexports.BaseTreeViewer = BaseTreeViewer;\n\n/***/ }),\n/* 15 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFDocumentProperties = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _ui_utils = __webpack_require__(1);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst DEFAULT_FIELD_CONTENT = \"-\";\nconst NON_METRIC_LOCALES = [\"en-us\", \"en-lr\", \"my\"];\nconst US_PAGE_NAMES = {\n  \"8.5x11\": \"Letter\",\n  \"8.5x14\": \"Legal\"\n};\nconst METRIC_PAGE_NAMES = {\n  \"297x420\": \"A3\",\n  \"210x297\": \"A4\"\n};\nfunction getPageName(size, isPortrait, pageNames) {\n  const width = isPortrait ? size.width : size.height;\n  const height = isPortrait ? size.height : size.width;\n  return pageNames[`${width}x${height}`];\n}\nvar _fieldData = /*#__PURE__*/new WeakMap();\nvar _reset = /*#__PURE__*/new WeakSet();\nvar _updateUI = /*#__PURE__*/new WeakSet();\nvar _parseFileSize = /*#__PURE__*/new WeakSet();\nvar _parsePageSize = /*#__PURE__*/new WeakSet();\nvar _parseDate = /*#__PURE__*/new WeakSet();\nvar _parseLinearization = /*#__PURE__*/new WeakSet();\nclass PDFDocumentProperties {\n  constructor(_ref, overlayManager, eventBus, l10n, fileNameLookup) {\n    let {\n      dialog,\n      fields,\n      closeButton\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _parseLinearization);\n    _classPrivateMethodInitSpec(this, _parseDate);\n    _classPrivateMethodInitSpec(this, _parsePageSize);\n    _classPrivateMethodInitSpec(this, _parseFileSize);\n    _classPrivateMethodInitSpec(this, _updateUI);\n    _classPrivateMethodInitSpec(this, _reset);\n    _classPrivateFieldInitSpec(this, _fieldData, {\n      writable: true,\n      value: null\n    });\n    this.dialog = dialog;\n    this.fields = fields;\n    this.overlayManager = overlayManager;\n    this.l10n = l10n;\n    this._fileNameLookup = fileNameLookup;\n    _classPrivateMethodGet(this, _reset, _reset2).call(this);\n    closeButton.addEventListener(\"click\", this.close.bind(this));\n    this.overlayManager.register(this.dialog);\n    eventBus._on(\"pagechanging\", evt => {\n      this._currentPageNumber = evt.pageNumber;\n    });\n    eventBus._on(\"rotationchanging\", evt => {\n      this._pagesRotation = evt.pagesRotation;\n    });\n    this._isNonMetricLocale = true;\n    l10n.getLanguage().then(locale => {\n      this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);\n    });\n  }\n  async open() {\n    await Promise.all([this.overlayManager.open(this.dialog), this._dataAvailableCapability.promise]);\n    const currentPageNumber = this._currentPageNumber;\n    const pagesRotation = this._pagesRotation;\n    if (_classPrivateFieldGet(this, _fieldData) && currentPageNumber === _classPrivateFieldGet(this, _fieldData)._currentPageNumber && pagesRotation === _classPrivateFieldGet(this, _fieldData)._pagesRotation) {\n      _classPrivateMethodGet(this, _updateUI, _updateUI2).call(this);\n      return;\n    }\n    const {\n      info,\n      contentLength\n    } = await this.pdfDocument.getMetadata();\n    const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), _classPrivateMethodGet(this, _parseFileSize, _parseFileSize2).call(this, contentLength), _classPrivateMethodGet(this, _parseDate, _parseDate2).call(this, info.CreationDate), _classPrivateMethodGet(this, _parseDate, _parseDate2).call(this, info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {\n      return _classPrivateMethodGet(this, _parsePageSize, _parsePageSize2).call(this, (0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);\n    }), _classPrivateMethodGet(this, _parseLinearization, _parseLinearization2).call(this, info.IsLinearized)]);\n    _classPrivateFieldSet(this, _fieldData, Object.freeze({\n      fileName,\n      fileSize,\n      title: info.Title,\n      author: info.Author,\n      subject: info.Subject,\n      keywords: info.Keywords,\n      creationDate,\n      modificationDate,\n      creator: info.Creator,\n      producer: info.Producer,\n      version: info.PDFFormatVersion,\n      pageCount: this.pdfDocument.numPages,\n      pageSize,\n      linearized: isLinearized,\n      _currentPageNumber: currentPageNumber,\n      _pagesRotation: pagesRotation\n    }));\n    _classPrivateMethodGet(this, _updateUI, _updateUI2).call(this);\n    const {\n      length\n    } = await this.pdfDocument.getDownloadInfo();\n    if (contentLength === length) {\n      return;\n    }\n    const data = Object.assign(Object.create(null), _classPrivateFieldGet(this, _fieldData));\n    data.fileSize = await _classPrivateMethodGet(this, _parseFileSize, _parseFileSize2).call(this, length);\n    _classPrivateFieldSet(this, _fieldData, Object.freeze(data));\n    _classPrivateMethodGet(this, _updateUI, _updateUI2).call(this);\n  }\n  async close() {\n    this.overlayManager.close(this.dialog);\n  }\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      _classPrivateMethodGet(this, _reset, _reset2).call(this);\n      _classPrivateMethodGet(this, _updateUI, _updateUI2).call(this, true);\n    }\n    if (!pdfDocument) {\n      return;\n    }\n    this.pdfDocument = pdfDocument;\n    this._dataAvailableCapability.resolve();\n  }\n}\nexports.PDFDocumentProperties = PDFDocumentProperties;\nfunction _reset2() {\n  this.pdfDocument = null;\n  _classPrivateFieldSet(this, _fieldData, null);\n  this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)();\n  this._currentPageNumber = 1;\n  this._pagesRotation = 0;\n}\nfunction _updateUI2() {\n  let reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  if (reset || !_classPrivateFieldGet(this, _fieldData)) {\n    for (const id in this.fields) {\n      this.fields[id].textContent = DEFAULT_FIELD_CONTENT;\n    }\n    return;\n  }\n  if (this.overlayManager.active !== this.dialog) {\n    return;\n  }\n  for (const id in this.fields) {\n    const content = _classPrivateFieldGet(this, _fieldData)[id];\n    this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;\n  }\n}\nasync function _parseFileSize2() {\n  let fileSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  const kb = fileSize / 1024,\n    mb = kb / 1024;\n  if (!kb) {\n    return undefined;\n  }\n  return this.l10n.get(`document_properties_${mb >= 1 ? \"mb\" : \"kb\"}`, {\n    size_mb: mb >= 1 && (+mb.toPrecision(3)).toLocaleString(),\n    size_kb: mb < 1 && (+kb.toPrecision(3)).toLocaleString(),\n    size_b: fileSize.toLocaleString()\n  });\n}\nasync function _parsePageSize2(pageSizeInches, pagesRotation) {\n  if (!pageSizeInches) {\n    return undefined;\n  }\n  if (pagesRotation % 180 !== 0) {\n    pageSizeInches = {\n      width: pageSizeInches.height,\n      height: pageSizeInches.width\n    };\n  }\n  const isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches);\n  let sizeInches = {\n    width: Math.round(pageSizeInches.width * 100) / 100,\n    height: Math.round(pageSizeInches.height * 100) / 100\n  };\n  let sizeMillimeters = {\n    width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,\n    height: Math.round(pageSizeInches.height * 25.4 * 10) / 10\n  };\n  let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);\n  if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {\n    const exactMillimeters = {\n      width: pageSizeInches.width * 25.4,\n      height: pageSizeInches.height * 25.4\n    };\n    const intMillimeters = {\n      width: Math.round(sizeMillimeters.width),\n      height: Math.round(sizeMillimeters.height)\n    };\n    if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) {\n      rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);\n      if (rawName) {\n        sizeInches = {\n          width: Math.round(intMillimeters.width / 25.4 * 100) / 100,\n          height: Math.round(intMillimeters.height / 25.4 * 100) / 100\n        };\n        sizeMillimeters = intMillimeters;\n      }\n    }\n  }\n  const [{\n    width,\n    height\n  }, unit, name, orientation] = await Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get(`document_properties_page_size_unit_${this._isNonMetricLocale ? \"inches\" : \"millimeters\"}`), rawName && this.l10n.get(`document_properties_page_size_name_${rawName.toLowerCase()}`), this.l10n.get(`document_properties_page_size_orientation_${isPortrait ? \"portrait\" : \"landscape\"}`)]);\n  return this.l10n.get(`document_properties_page_size_dimension_${name ? \"name_\" : \"\"}string`, {\n    width: width.toLocaleString(),\n    height: height.toLocaleString(),\n    unit,\n    name,\n    orientation\n  });\n}\nasync function _parseDate2(inputDate) {\n  const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);\n  if (!dateObject) {\n    return undefined;\n  }\n  return this.l10n.get(\"document_properties_date_string\", {\n    date: dateObject.toLocaleDateString(),\n    time: dateObject.toLocaleTimeString()\n  });\n}\nfunction _parseLinearization2(isLinearized) {\n  return this.l10n.get(`document_properties_linearized_${isLinearized ? \"yes\" : \"no\"}`);\n}\n\n/***/ }),\n/* 16 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFFindBar = void 0;\nvar _pdf_find_controller = __webpack_require__(17);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst MATCHES_COUNT_LIMIT = 1000;\nvar _adjustWidth = /*#__PURE__*/new WeakSet();\nclass PDFFindBar {\n  constructor(options, eventBus, l10n) {\n    _classPrivateMethodInitSpec(this, _adjustWidth);\n    this.opened = false;\n    this.bar = options.bar;\n    this.toggleButton = options.toggleButton;\n    this.findField = options.findField;\n    this.highlightAll = options.highlightAllCheckbox;\n    this.caseSensitive = options.caseSensitiveCheckbox;\n    this.matchDiacritics = options.matchDiacriticsCheckbox;\n    this.entireWord = options.entireWordCheckbox;\n    this.findMsg = options.findMsg;\n    this.findResultsCount = options.findResultsCount;\n    this.findPreviousButton = options.findPreviousButton;\n    this.findNextButton = options.findNextButton;\n    this.eventBus = eventBus;\n    this.l10n = l10n;\n    this.toggleButton.addEventListener(\"click\", () => {\n      this.toggle();\n    });\n    this.findField.addEventListener(\"input\", () => {\n      this.dispatchEvent(\"\");\n    });\n    this.bar.addEventListener(\"keydown\", e => {\n      switch (e.keyCode) {\n        case 13:\n          if (e.target === this.findField) {\n            this.dispatchEvent(\"again\", e.shiftKey);\n          }\n          break;\n        case 27:\n          this.close();\n          break;\n      }\n    });\n    this.findPreviousButton.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"again\", true);\n    });\n    this.findNextButton.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"again\", false);\n    });\n    this.highlightAll.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"highlightallchange\");\n    });\n    this.caseSensitive.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"casesensitivitychange\");\n    });\n    this.entireWord.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"entirewordchange\");\n    });\n    this.matchDiacritics.addEventListener(\"click\", () => {\n      this.dispatchEvent(\"diacriticmatchingchange\");\n    });\n    this.eventBus._on(\"resize\", _classPrivateMethodGet(this, _adjustWidth, _adjustWidth2).bind(this));\n  }\n  reset() {\n    this.updateUIState();\n  }\n  dispatchEvent(type) {\n    let findPrev = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    this.eventBus.dispatch(\"find\", {\n      source: this,\n      type,\n      query: this.findField.value,\n      phraseSearch: true,\n      caseSensitive: this.caseSensitive.checked,\n      entireWord: this.entireWord.checked,\n      highlightAll: this.highlightAll.checked,\n      findPrevious: findPrev,\n      matchDiacritics: this.matchDiacritics.checked\n    });\n  }\n  updateUIState(state, previous, matchesCount) {\n    let findMsg = Promise.resolve(\"\");\n    let status = \"\";\n    switch (state) {\n      case _pdf_find_controller.FindState.FOUND:\n        break;\n      case _pdf_find_controller.FindState.PENDING:\n        status = \"pending\";\n        break;\n      case _pdf_find_controller.FindState.NOT_FOUND:\n        findMsg = this.l10n.get(\"find_not_found\");\n        status = \"notFound\";\n        break;\n      case _pdf_find_controller.FindState.WRAPPED:\n        findMsg = this.l10n.get(`find_reached_${previous ? \"top\" : \"bottom\"}`);\n        break;\n    }\n    this.findField.setAttribute(\"data-status\", status);\n    this.findField.setAttribute(\"aria-invalid\", state === _pdf_find_controller.FindState.NOT_FOUND);\n    findMsg.then(msg => {\n      this.findMsg.textContent = msg;\n      _classPrivateMethodGet(this, _adjustWidth, _adjustWidth2).call(this);\n    });\n    this.updateResultsCount(matchesCount);\n  }\n  updateResultsCount() {\n    let {\n      current = 0,\n      total = 0\n    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const limit = MATCHES_COUNT_LIMIT;\n    let matchCountMsg = Promise.resolve(\"\");\n    if (total > 0) {\n      if (total > limit) {\n        let key = \"find_match_count_limit\";\n        matchCountMsg = this.l10n.get(key, {\n          limit\n        });\n      } else {\n        let key = \"find_match_count\";\n        matchCountMsg = this.l10n.get(key, {\n          current,\n          total\n        });\n      }\n    }\n    matchCountMsg.then(msg => {\n      this.findResultsCount.textContent = msg;\n      _classPrivateMethodGet(this, _adjustWidth, _adjustWidth2).call(this);\n    });\n  }\n  open() {\n    if (!this.opened) {\n      this.opened = true;\n      this.toggleButton.classList.add(\"toggled\");\n      this.toggleButton.setAttribute(\"aria-expanded\", \"true\");\n      this.bar.classList.remove(\"hidden\");\n    }\n    this.findField.select();\n    this.findField.focus();\n    _classPrivateMethodGet(this, _adjustWidth, _adjustWidth2).call(this);\n  }\n  close() {\n    if (!this.opened) {\n      return;\n    }\n    this.opened = false;\n    this.toggleButton.classList.remove(\"toggled\");\n    this.toggleButton.setAttribute(\"aria-expanded\", \"false\");\n    this.bar.classList.add(\"hidden\");\n    this.eventBus.dispatch(\"findbarclose\", {\n      source: this\n    });\n  }\n  toggle() {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n}\nexports.PDFFindBar = PDFFindBar;\nfunction _adjustWidth2() {\n  if (!this.opened) {\n    return;\n  }\n  this.bar.classList.remove(\"wrapContainers\");\n  const findbarHeight = this.bar.clientHeight;\n  const inputContainerHeight = this.bar.firstElementChild.clientHeight;\n  if (findbarHeight > inputContainerHeight) {\n    this.bar.classList.add(\"wrapContainers\");\n  }\n}\n\n/***/ }),\n/* 17 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFFindController = exports.FindState = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdfjsLib = __webpack_require__(5);\nvar _pdf_find_utils = __webpack_require__(18);\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst FindState = {\n  FOUND: 0,\n  NOT_FOUND: 1,\n  WRAPPED: 2,\n  PENDING: 3\n};\nexports.FindState = FindState;\nconst FIND_TIMEOUT = 250;\nconst MATCH_SCROLL_OFFSET_TOP = -50;\nconst MATCH_SCROLL_OFFSET_LEFT = -400;\nconst CHARACTERS_TO_NORMALIZE = {\n  \"\\u2010\": \"-\",\n  \"\\u2018\": \"'\",\n  \"\\u2019\": \"'\",\n  \"\\u201A\": \"'\",\n  \"\\u201B\": \"'\",\n  \"\\u201C\": '\"',\n  \"\\u201D\": '\"',\n  \"\\u201E\": '\"',\n  \"\\u201F\": '\"',\n  \"\\u00BC\": \"1/4\",\n  \"\\u00BD\": \"1/2\",\n  \"\\u00BE\": \"3/4\"\n};\nconst DIACRITICS_EXCEPTION = new Set([0x3099, 0x309a, 0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b, 0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714, 0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f, 0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed, 0x0c56, 0x0f71, 0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80, 0x0f74]);\nlet DIACRITICS_EXCEPTION_STR;\nconst DIACRITICS_REG_EXP = /\\p{M}+/gu;\nconst SPECIAL_CHARS_REG_EXP = /([.*+?^${}()|[\\]\\\\])|(\\p{P})|(\\s+)|(\\p{M})|(\\p{L})/gu;\nconst NOT_DIACRITIC_FROM_END_REG_EXP = /([^\\p{M}])\\p{M}*$/u;\nconst NOT_DIACRITIC_FROM_START_REG_EXP = /^\\p{M}*([^\\p{M}])/u;\nconst SYLLABLES_REG_EXP = /[\\uAC00-\\uD7AF\\uFA6C\\uFACF-\\uFAD1\\uFAD5-\\uFAD7]+/g;\nconst SYLLABLES_LENGTHS = new Map();\nconst FIRST_CHAR_SYLLABLES_REG_EXP = \"[\\\\u1100-\\\\u1112\\\\ud7a4-\\\\ud7af\\\\ud84a\\\\ud84c\\\\ud850\\\\ud854\\\\ud857\\\\ud85f]\";\nconst NFKC_CHARS_TO_NORMALIZE = new Map();\nlet noSyllablesRegExp = null;\nlet withSyllablesRegExp = null;\nfunction normalize(text) {\n  const syllablePositions = [];\n  let m;\n  while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) {\n    let {\n      index\n    } = m;\n    for (const char of m[0]) {\n      let len = SYLLABLES_LENGTHS.get(char);\n      if (!len) {\n        len = char.normalize(\"NFD\").length;\n        SYLLABLES_LENGTHS.set(char, len);\n      }\n      syllablePositions.push([len, index++]);\n    }\n  }\n  let normalizationRegex;\n  if (syllablePositions.length === 0 && noSyllablesRegExp) {\n    normalizationRegex = noSyllablesRegExp;\n  } else if (syllablePositions.length > 0 && withSyllablesRegExp) {\n    normalizationRegex = withSyllablesRegExp;\n  } else {\n    const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(\"\");\n    const toNormalizeWithNFKC = \"\\u2460-\\u2473\" + \"\\u24b6-\\u24ff\" + \"\\u3244-\\u32bf\" + \"\\u32d0-\\u32fe\" + \"\\uff00-\\uffef\";\n    const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(\\\\p{M}+(?:-\\\\n)?)|(\\\\S-\\\\n)|(\\\\p{Ideographic}\\\\n)|(\\\\n)`;\n    if (syllablePositions.length === 0) {\n      normalizationRegex = noSyllablesRegExp = new RegExp(regexp + \"|(\\\\u0000)\", \"gum\");\n    } else {\n      normalizationRegex = withSyllablesRegExp = new RegExp(regexp + `|(${FIRST_CHAR_SYLLABLES_REG_EXP})`, \"gum\");\n    }\n  }\n  const rawDiacriticsPositions = [];\n  while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) {\n    rawDiacriticsPositions.push([m[0].length, m.index]);\n  }\n  let normalized = text.normalize(\"NFD\");\n  const positions = [[0, 0]];\n  let rawDiacriticsIndex = 0;\n  let syllableIndex = 0;\n  let shift = 0;\n  let shiftOrigin = 0;\n  let eol = 0;\n  let hasDiacritics = false;\n  normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, i) => {\n    var _syllablePositions$sy;\n    i -= shiftOrigin;\n    if (p1) {\n      const replacement = CHARACTERS_TO_NORMALIZE[p1];\n      const jj = replacement.length;\n      for (let j = 1; j < jj; j++) {\n        positions.push([i - shift + j, shift - j]);\n      }\n      shift -= jj - 1;\n      return replacement;\n    }\n    if (p2) {\n      let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2);\n      if (!replacement) {\n        replacement = p2.normalize(\"NFKC\");\n        NFKC_CHARS_TO_NORMALIZE.set(p2, replacement);\n      }\n      const jj = replacement.length;\n      for (let j = 1; j < jj; j++) {\n        positions.push([i - shift + j, shift - j]);\n      }\n      shift -= jj - 1;\n      return replacement;\n    }\n    if (p3) {\n      var _rawDiacriticsPositio;\n      const hasTrailingDashEOL = p3.endsWith(\"\\n\");\n      const len = hasTrailingDashEOL ? p3.length - 2 : p3.length;\n      hasDiacritics = true;\n      let jj = len;\n      if (i + eol === ((_rawDiacriticsPositio = rawDiacriticsPositions[rawDiacriticsIndex]) === null || _rawDiacriticsPositio === void 0 ? void 0 : _rawDiacriticsPositio[1])) {\n        jj -= rawDiacriticsPositions[rawDiacriticsIndex][0];\n        ++rawDiacriticsIndex;\n      }\n      for (let j = 1; j <= jj; j++) {\n        positions.push([i - 1 - shift + j, shift - j]);\n      }\n      shift -= jj;\n      shiftOrigin += jj;\n      if (hasTrailingDashEOL) {\n        i += len - 1;\n        positions.push([i - shift + 1, 1 + shift]);\n        shift += 1;\n        shiftOrigin += 1;\n        eol += 1;\n        return p3.slice(0, len);\n      }\n      return p3;\n    }\n    if (p4) {\n      positions.push([i - shift + 1, 1 + shift]);\n      shift += 1;\n      shiftOrigin += 1;\n      eol += 1;\n      return p4.charAt(0);\n    }\n    if (p5) {\n      positions.push([i - shift + 1, shift]);\n      shiftOrigin += 1;\n      eol += 1;\n      return p5.charAt(0);\n    }\n    if (p6) {\n      positions.push([i - shift + 1, shift - 1]);\n      shift -= 1;\n      shiftOrigin += 1;\n      eol += 1;\n      return \" \";\n    }\n    if (i + eol === ((_syllablePositions$sy = syllablePositions[syllableIndex]) === null || _syllablePositions$sy === void 0 ? void 0 : _syllablePositions$sy[1])) {\n      const newCharLen = syllablePositions[syllableIndex][0] - 1;\n      ++syllableIndex;\n      for (let j = 1; j <= newCharLen; j++) {\n        positions.push([i - (shift - j), shift - j]);\n      }\n      shift -= newCharLen;\n      shiftOrigin += newCharLen;\n    }\n    return p7;\n  });\n  positions.push([normalized.length, shift]);\n  return [normalized, positions, hasDiacritics];\n}\nfunction getOriginalIndex(diffs, pos, len) {\n  if (!diffs) {\n    return [pos, len];\n  }\n  const start = pos;\n  const end = pos + len;\n  let i = (0, _ui_utils.binarySearchFirstItem)(diffs, x => x[0] >= start);\n  if (diffs[i][0] > start) {\n    --i;\n  }\n  let j = (0, _ui_utils.binarySearchFirstItem)(diffs, x => x[0] >= end, i);\n  if (diffs[j][0] > end) {\n    --j;\n  }\n  return [start + diffs[i][1], len + diffs[j][1] - diffs[i][1]];\n}\nvar _onFind = /*#__PURE__*/new WeakSet();\nvar _reset = /*#__PURE__*/new WeakSet();\nvar _query = /*#__PURE__*/new WeakMap();\nvar _shouldDirtyMatch = /*#__PURE__*/new WeakSet();\nvar _isEntireWord = /*#__PURE__*/new WeakSet();\nvar _calculateRegExpMatch = /*#__PURE__*/new WeakSet();\nvar _convertToRegExpString = /*#__PURE__*/new WeakSet();\nvar _calculateMatch = /*#__PURE__*/new WeakSet();\nvar _extractText = /*#__PURE__*/new WeakSet();\nvar _updatePage = /*#__PURE__*/new WeakSet();\nvar _updateAllPages = /*#__PURE__*/new WeakSet();\nvar _nextMatch = /*#__PURE__*/new WeakSet();\nvar _matchesReady = /*#__PURE__*/new WeakSet();\nvar _nextPageMatch = /*#__PURE__*/new WeakSet();\nvar _advanceOffsetPage = /*#__PURE__*/new WeakSet();\nvar _updateMatch = /*#__PURE__*/new WeakSet();\nvar _onFindBarClose = /*#__PURE__*/new WeakSet();\nvar _requestMatchesCount = /*#__PURE__*/new WeakSet();\nvar _updateUIResultsCount = /*#__PURE__*/new WeakSet();\nvar _updateUIState = /*#__PURE__*/new WeakSet();\nclass PDFFindController {\n  constructor(_ref) {\n    let {\n      linkService: _linkService,\n      eventBus\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _updateUIState);\n    _classPrivateMethodInitSpec(this, _updateUIResultsCount);\n    _classPrivateMethodInitSpec(this, _requestMatchesCount);\n    _classPrivateMethodInitSpec(this, _onFindBarClose);\n    _classPrivateMethodInitSpec(this, _updateMatch);\n    _classPrivateMethodInitSpec(this, _advanceOffsetPage);\n    _classPrivateMethodInitSpec(this, _nextPageMatch);\n    _classPrivateMethodInitSpec(this, _matchesReady);\n    _classPrivateMethodInitSpec(this, _nextMatch);\n    _classPrivateMethodInitSpec(this, _updateAllPages);\n    _classPrivateMethodInitSpec(this, _updatePage);\n    _classPrivateMethodInitSpec(this, _extractText);\n    _classPrivateMethodInitSpec(this, _calculateMatch);\n    _classPrivateMethodInitSpec(this, _convertToRegExpString);\n    _classPrivateMethodInitSpec(this, _calculateRegExpMatch);\n    _classPrivateMethodInitSpec(this, _isEntireWord);\n    _classPrivateMethodInitSpec(this, _shouldDirtyMatch);\n    _classPrivateFieldInitSpec(this, _query, {\n      get: _get_query,\n      set: void 0\n    });\n    _classPrivateMethodInitSpec(this, _reset);\n    _classPrivateMethodInitSpec(this, _onFind);\n    this._linkService = _linkService;\n    this._eventBus = eventBus;\n    _classPrivateMethodGet(this, _reset, _reset2).call(this);\n    eventBus._on(\"find\", _classPrivateMethodGet(this, _onFind, _onFind2).bind(this));\n    eventBus._on(\"findbarclose\", _classPrivateMethodGet(this, _onFindBarClose, _onFindBarClose2).bind(this));\n  }\n  get highlightMatches() {\n    return this._highlightMatches;\n  }\n  get pageMatches() {\n    return this._pageMatches;\n  }\n  get pageMatchesLength() {\n    return this._pageMatchesLength;\n  }\n  get selected() {\n    return this._selected;\n  }\n  get state() {\n    return this._state;\n  }\n  setDocument(pdfDocument) {\n    if (this._pdfDocument) {\n      _classPrivateMethodGet(this, _reset, _reset2).call(this);\n    }\n    if (!pdfDocument) {\n      return;\n    }\n    this._pdfDocument = pdfDocument;\n    this._firstPageCapability.resolve();\n  }\n  scrollMatchIntoView(_ref2) {\n    let {\n      element = null,\n      selectedLeft = 0,\n      pageIndex = -1,\n      matchIndex = -1\n    } = _ref2;\n    if (!this._scrollMatches || !element) {\n      return;\n    } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {\n      return;\n    } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {\n      return;\n    }\n    this._scrollMatches = false;\n    const spot = {\n      top: MATCH_SCROLL_OFFSET_TOP,\n      left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT\n    };\n    (0, _ui_utils.scrollIntoView)(element, spot, true);\n  }\n}\nexports.PDFFindController = PDFFindController;\nfunction _onFind2(state) {\n  if (!state) {\n    return;\n  }\n  const pdfDocument = this._pdfDocument;\n  const {\n    type\n  } = state;\n  if (this._state === null || _classPrivateMethodGet(this, _shouldDirtyMatch, _shouldDirtyMatch2).call(this, state)) {\n    this._dirtyMatch = true;\n  }\n  this._state = state;\n  if (type !== \"highlightallchange\") {\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, FindState.PENDING);\n  }\n  this._firstPageCapability.promise.then(() => {\n    if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {\n      return;\n    }\n    _classPrivateMethodGet(this, _extractText, _extractText2).call(this);\n    const findbarClosed = !this._highlightMatches;\n    const pendingTimeout = !!this._findTimeout;\n    if (this._findTimeout) {\n      clearTimeout(this._findTimeout);\n      this._findTimeout = null;\n    }\n    if (!type) {\n      this._findTimeout = setTimeout(() => {\n        _classPrivateMethodGet(this, _nextMatch, _nextMatch2).call(this);\n        this._findTimeout = null;\n      }, FIND_TIMEOUT);\n    } else if (this._dirtyMatch) {\n      _classPrivateMethodGet(this, _nextMatch, _nextMatch2).call(this);\n    } else if (type === \"again\") {\n      _classPrivateMethodGet(this, _nextMatch, _nextMatch2).call(this);\n      if (findbarClosed && this._state.highlightAll) {\n        _classPrivateMethodGet(this, _updateAllPages, _updateAllPages2).call(this);\n      }\n    } else if (type === \"highlightallchange\") {\n      if (pendingTimeout) {\n        _classPrivateMethodGet(this, _nextMatch, _nextMatch2).call(this);\n      } else {\n        this._highlightMatches = true;\n      }\n      _classPrivateMethodGet(this, _updateAllPages, _updateAllPages2).call(this);\n    } else {\n      _classPrivateMethodGet(this, _nextMatch, _nextMatch2).call(this);\n    }\n  });\n}\nfunction _reset2() {\n  this._highlightMatches = false;\n  this._scrollMatches = false;\n  this._pdfDocument = null;\n  this._pageMatches = [];\n  this._pageMatchesLength = [];\n  this._state = null;\n  this._selected = {\n    pageIdx: -1,\n    matchIdx: -1\n  };\n  this._offset = {\n    pageIdx: null,\n    matchIdx: null,\n    wrapped: false\n  };\n  this._extractTextPromises = [];\n  this._pageContents = [];\n  this._pageDiffs = [];\n  this._hasDiacritics = [];\n  this._matchesCountTotal = 0;\n  this._pagesToSearch = null;\n  this._pendingFindMatches = new Set();\n  this._resumePageIdx = null;\n  this._dirtyMatch = false;\n  clearTimeout(this._findTimeout);\n  this._findTimeout = null;\n  this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();\n}\nfunction _get_query() {\n  if (this._state.query !== this._rawQuery) {\n    this._rawQuery = this._state.query;\n    [this._normalizedQuery] = normalize(this._state.query);\n  }\n  return this._normalizedQuery;\n}\nfunction _shouldDirtyMatch2(state) {\n  if (state.query !== this._state.query) {\n    return true;\n  }\n  switch (state.type) {\n    case \"again\":\n      const pageNumber = this._selected.pageIdx + 1;\n      const linkService = this._linkService;\n      if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) {\n        return true;\n      }\n      return false;\n    case \"highlightallchange\":\n      return false;\n  }\n  return true;\n}\nfunction _isEntireWord2(content, startIdx, length) {\n  let match = content.slice(0, startIdx).match(NOT_DIACRITIC_FROM_END_REG_EXP);\n  if (match) {\n    const first = content.charCodeAt(startIdx);\n    const limit = match[1].charCodeAt(0);\n    if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) {\n      return false;\n    }\n  }\n  match = content.slice(startIdx + length).match(NOT_DIACRITIC_FROM_START_REG_EXP);\n  if (match) {\n    const last = content.charCodeAt(startIdx + length - 1);\n    const limit = match[1].charCodeAt(0);\n    if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(limit)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction _calculateRegExpMatch2(query, entireWord, pageIndex, pageContent) {\n  const matches = [],\n    matchesLength = [];\n  const diffs = this._pageDiffs[pageIndex];\n  let match;\n  while ((match = query.exec(pageContent)) !== null) {\n    if (entireWord && !_classPrivateMethodGet(this, _isEntireWord, _isEntireWord2).call(this, pageContent, match.index, match[0].length)) {\n      continue;\n    }\n    const [matchPos, matchLen] = getOriginalIndex(diffs, match.index, match[0].length);\n    if (matchLen) {\n      matches.push(matchPos);\n      matchesLength.push(matchLen);\n    }\n  }\n  this._pageMatches[pageIndex] = matches;\n  this._pageMatchesLength[pageIndex] = matchesLength;\n}\nfunction _convertToRegExpString2(query, hasDiacritics) {\n  const {\n    matchDiacritics\n  } = this._state;\n  let isUnicode = false;\n  query = query.replace(SPECIAL_CHARS_REG_EXP, (match, p1, p2, p3, p4, p5) => {\n    if (p1) {\n      return `[ ]*\\\\${p1}[ ]*`;\n    }\n    if (p2) {\n      return `[ ]*${p2}[ ]*`;\n    }\n    if (p3) {\n      return \"[ ]+\";\n    }\n    if (matchDiacritics) {\n      return p4 || p5;\n    }\n    if (p4) {\n      return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : \"\";\n    }\n    if (hasDiacritics) {\n      isUnicode = true;\n      return `${p5}\\\\p{M}*`;\n    }\n    return p5;\n  });\n  const trailingSpaces = \"[ ]*\";\n  if (query.endsWith(trailingSpaces)) {\n    query = query.slice(0, query.length - trailingSpaces.length);\n  }\n  if (matchDiacritics) {\n    if (hasDiacritics) {\n      DIACRITICS_EXCEPTION_STR || (DIACRITICS_EXCEPTION_STR = String.fromCharCode(...DIACRITICS_EXCEPTION));\n      isUnicode = true;\n      query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\\\p{M}]|$)`;\n    }\n  }\n  return [isUnicode, query];\n}\nfunction _calculateMatch2(pageIndex) {\n  let query = _classPrivateFieldGet(this, _query);\n  if (query.length === 0) {\n    return;\n  }\n  const {\n    caseSensitive,\n    entireWord,\n    phraseSearch\n  } = this._state;\n  const pageContent = this._pageContents[pageIndex];\n  const hasDiacritics = this._hasDiacritics[pageIndex];\n  let isUnicode = false;\n  if (phraseSearch) {\n    [isUnicode, query] = _classPrivateMethodGet(this, _convertToRegExpString, _convertToRegExpString2).call(this, query, hasDiacritics);\n  } else {\n    const match = query.match(/\\S+/g);\n    if (match) {\n      query = match.sort().reverse().map(q => {\n        const [isUnicodePart, queryPart] = _classPrivateMethodGet(this, _convertToRegExpString, _convertToRegExpString2).call(this, q, hasDiacritics);\n        isUnicode || (isUnicode = isUnicodePart);\n        return `(${queryPart})`;\n      }).join(\"|\");\n    }\n  }\n  const flags = `g${isUnicode ? \"u\" : \"\"}${caseSensitive ? \"\" : \"i\"}`;\n  query = new RegExp(query, flags);\n  _classPrivateMethodGet(this, _calculateRegExpMatch, _calculateRegExpMatch2).call(this, query, entireWord, pageIndex, pageContent);\n  if (this._state.highlightAll) {\n    _classPrivateMethodGet(this, _updatePage, _updatePage2).call(this, pageIndex);\n  }\n  if (this._resumePageIdx === pageIndex) {\n    this._resumePageIdx = null;\n    _classPrivateMethodGet(this, _nextPageMatch, _nextPageMatch2).call(this);\n  }\n  const pageMatchesCount = this._pageMatches[pageIndex].length;\n  if (pageMatchesCount > 0) {\n    this._matchesCountTotal += pageMatchesCount;\n    _classPrivateMethodGet(this, _updateUIResultsCount, _updateUIResultsCount2).call(this);\n  }\n}\nfunction _extractText2() {\n  if (this._extractTextPromises.length > 0) {\n    return;\n  }\n  let promise = Promise.resolve();\n  for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {\n    const extractTextCapability = (0, _pdfjsLib.createPromiseCapability)();\n    this._extractTextPromises[i] = extractTextCapability.promise;\n    promise = promise.then(() => {\n      return this._pdfDocument.getPage(i + 1).then(pdfPage => {\n        return pdfPage.getTextContent();\n      }).then(textContent => {\n        const strBuf = [];\n        for (const textItem of textContent.items) {\n          strBuf.push(textItem.str);\n          if (textItem.hasEOL) {\n            strBuf.push(\"\\n\");\n          }\n        }\n        [this._pageContents[i], this._pageDiffs[i], this._hasDiacritics[i]] = normalize(strBuf.join(\"\"));\n        extractTextCapability.resolve();\n      }, reason => {\n        console.error(`Unable to get text content for page ${i + 1}`, reason);\n        this._pageContents[i] = \"\";\n        this._pageDiffs[i] = null;\n        this._hasDiacritics[i] = false;\n        extractTextCapability.resolve();\n      });\n    });\n  }\n}\nfunction _updatePage2(index) {\n  if (this._scrollMatches && this._selected.pageIdx === index) {\n    this._linkService.page = index + 1;\n  }\n  this._eventBus.dispatch(\"updatetextlayermatches\", {\n    source: this,\n    pageIndex: index\n  });\n}\nfunction _updateAllPages2() {\n  this._eventBus.dispatch(\"updatetextlayermatches\", {\n    source: this,\n    pageIndex: -1\n  });\n}\nfunction _nextMatch2() {\n  const previous = this._state.findPrevious;\n  const currentPageIndex = this._linkService.page - 1;\n  const numPages = this._linkService.pagesCount;\n  this._highlightMatches = true;\n  if (this._dirtyMatch) {\n    this._dirtyMatch = false;\n    this._selected.pageIdx = this._selected.matchIdx = -1;\n    this._offset.pageIdx = currentPageIndex;\n    this._offset.matchIdx = null;\n    this._offset.wrapped = false;\n    this._resumePageIdx = null;\n    this._pageMatches.length = 0;\n    this._pageMatchesLength.length = 0;\n    this._matchesCountTotal = 0;\n    _classPrivateMethodGet(this, _updateAllPages, _updateAllPages2).call(this);\n    for (let i = 0; i < numPages; i++) {\n      if (this._pendingFindMatches.has(i)) {\n        continue;\n      }\n      this._pendingFindMatches.add(i);\n      this._extractTextPromises[i].then(() => {\n        this._pendingFindMatches.delete(i);\n        _classPrivateMethodGet(this, _calculateMatch, _calculateMatch2).call(this, i);\n      });\n    }\n  }\n  if (_classPrivateFieldGet(this, _query) === \"\") {\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, FindState.FOUND);\n    return;\n  }\n  if (this._resumePageIdx) {\n    return;\n  }\n  const offset = this._offset;\n  this._pagesToSearch = numPages;\n  if (offset.matchIdx !== null) {\n    const numPageMatches = this._pageMatches[offset.pageIdx].length;\n    if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {\n      offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;\n      _classPrivateMethodGet(this, _updateMatch, _updateMatch2).call(this, true);\n      return;\n    }\n    _classPrivateMethodGet(this, _advanceOffsetPage, _advanceOffsetPage2).call(this, previous);\n  }\n  _classPrivateMethodGet(this, _nextPageMatch, _nextPageMatch2).call(this);\n}\nfunction _matchesReady2(matches) {\n  const offset = this._offset;\n  const numMatches = matches.length;\n  const previous = this._state.findPrevious;\n  if (numMatches) {\n    offset.matchIdx = previous ? numMatches - 1 : 0;\n    _classPrivateMethodGet(this, _updateMatch, _updateMatch2).call(this, true);\n    return true;\n  }\n  _classPrivateMethodGet(this, _advanceOffsetPage, _advanceOffsetPage2).call(this, previous);\n  if (offset.wrapped) {\n    offset.matchIdx = null;\n    if (this._pagesToSearch < 0) {\n      _classPrivateMethodGet(this, _updateMatch, _updateMatch2).call(this, false);\n      return true;\n    }\n  }\n  return false;\n}\nfunction _nextPageMatch2() {\n  if (this._resumePageIdx !== null) {\n    console.error(\"There can only be one pending page.\");\n  }\n  let matches = null;\n  do {\n    const pageIdx = this._offset.pageIdx;\n    matches = this._pageMatches[pageIdx];\n    if (!matches) {\n      this._resumePageIdx = pageIdx;\n      break;\n    }\n  } while (!_classPrivateMethodGet(this, _matchesReady, _matchesReady2).call(this, matches));\n}\nfunction _advanceOffsetPage2(previous) {\n  const offset = this._offset;\n  const numPages = this._linkService.pagesCount;\n  offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;\n  offset.matchIdx = null;\n  this._pagesToSearch--;\n  if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n    offset.pageIdx = previous ? numPages - 1 : 0;\n    offset.wrapped = true;\n  }\n}\nfunction _updateMatch2() {\n  let found = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  let state = FindState.NOT_FOUND;\n  const wrapped = this._offset.wrapped;\n  this._offset.wrapped = false;\n  if (found) {\n    const previousPage = this._selected.pageIdx;\n    this._selected.pageIdx = this._offset.pageIdx;\n    this._selected.matchIdx = this._offset.matchIdx;\n    state = wrapped ? FindState.WRAPPED : FindState.FOUND;\n    if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {\n      _classPrivateMethodGet(this, _updatePage, _updatePage2).call(this, previousPage);\n    }\n  }\n  _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, state, this._state.findPrevious);\n  if (this._selected.pageIdx !== -1) {\n    this._scrollMatches = true;\n    _classPrivateMethodGet(this, _updatePage, _updatePage2).call(this, this._selected.pageIdx);\n  }\n}\nfunction _onFindBarClose2(evt) {\n  const pdfDocument = this._pdfDocument;\n  this._firstPageCapability.promise.then(() => {\n    if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {\n      return;\n    }\n    if (this._findTimeout) {\n      clearTimeout(this._findTimeout);\n      this._findTimeout = null;\n    }\n    if (this._resumePageIdx) {\n      this._resumePageIdx = null;\n      this._dirtyMatch = true;\n    }\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, FindState.FOUND);\n    this._highlightMatches = false;\n    _classPrivateMethodGet(this, _updateAllPages, _updateAllPages2).call(this);\n  });\n}\nfunction _requestMatchesCount2() {\n  const {\n    pageIdx,\n    matchIdx\n  } = this._selected;\n  let current = 0,\n    total = this._matchesCountTotal;\n  if (matchIdx !== -1) {\n    for (let i = 0; i < pageIdx; i++) {\n      var _this$_pageMatches$i;\n      current += ((_this$_pageMatches$i = this._pageMatches[i]) === null || _this$_pageMatches$i === void 0 ? void 0 : _this$_pageMatches$i.length) || 0;\n    }\n    current += matchIdx + 1;\n  }\n  if (current < 1 || current > total) {\n    current = total = 0;\n  }\n  return {\n    current,\n    total\n  };\n}\nfunction _updateUIResultsCount2() {\n  this._eventBus.dispatch(\"updatefindmatchescount\", {\n    source: this,\n    matchesCount: _classPrivateMethodGet(this, _requestMatchesCount, _requestMatchesCount2).call(this)\n  });\n}\nfunction _updateUIState2(state) {\n  var _this$_state;\n  let previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  this._eventBus.dispatch(\"updatefindcontrolstate\", {\n    source: this,\n    state,\n    previous,\n    matchesCount: _classPrivateMethodGet(this, _requestMatchesCount, _requestMatchesCount2).call(this),\n    rawQuery: ((_this$_state = this._state) === null || _this$_state === void 0 ? void 0 : _this$_state.query) ?? null\n  });\n}\n\n/***/ }),\n/* 18 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.CharacterType = void 0;\nexports.getCharacterType = getCharacterType;\nconst CharacterType = {\n  SPACE: 0,\n  ALPHA_LETTER: 1,\n  PUNCT: 2,\n  HAN_LETTER: 3,\n  KATAKANA_LETTER: 4,\n  HIRAGANA_LETTER: 5,\n  HALFWIDTH_KATAKANA_LETTER: 6,\n  THAI_LETTER: 7\n};\nexports.CharacterType = CharacterType;\nfunction isAlphabeticalScript(charCode) {\n  return charCode < 0x2e80;\n}\nfunction isAscii(charCode) {\n  return (charCode & 0xff80) === 0;\n}\nfunction isAsciiAlpha(charCode) {\n  return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;\n}\nfunction isAsciiDigit(charCode) {\n  return charCode >= 0x30 && charCode <= 0x39;\n}\nfunction isAsciiSpace(charCode) {\n  return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;\n}\nfunction isHan(charCode) {\n  return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;\n}\nfunction isKatakana(charCode) {\n  return charCode >= 0x30a0 && charCode <= 0x30ff;\n}\nfunction isHiragana(charCode) {\n  return charCode >= 0x3040 && charCode <= 0x309f;\n}\nfunction isHalfwidthKatakana(charCode) {\n  return charCode >= 0xff60 && charCode <= 0xff9f;\n}\nfunction isThai(charCode) {\n  return (charCode & 0xff80) === 0x0e00;\n}\nfunction getCharacterType(charCode) {\n  if (isAlphabeticalScript(charCode)) {\n    if (isAscii(charCode)) {\n      if (isAsciiSpace(charCode)) {\n        return CharacterType.SPACE;\n      } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {\n        return CharacterType.ALPHA_LETTER;\n      }\n      return CharacterType.PUNCT;\n    } else if (isThai(charCode)) {\n      return CharacterType.THAI_LETTER;\n    } else if (charCode === 0xa0) {\n      return CharacterType.SPACE;\n    }\n    return CharacterType.ALPHA_LETTER;\n  }\n  if (isHan(charCode)) {\n    return CharacterType.HAN_LETTER;\n  } else if (isKatakana(charCode)) {\n    return CharacterType.KATAKANA_LETTER;\n  } else if (isHiragana(charCode)) {\n    return CharacterType.HIRAGANA_LETTER;\n  } else if (isHalfwidthKatakana(charCode)) {\n    return CharacterType.HALFWIDTH_KATAKANA_LETTER;\n  }\n  return CharacterType.ALPHA_LETTER;\n}\n\n/***/ }),\n/* 19 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFHistory = void 0;\nexports.isDestArraysEqual = isDestArraysEqual;\nexports.isDestHashesEqual = isDestHashesEqual;\nvar _ui_utils = __webpack_require__(1);\nvar _event_utils = __webpack_require__(6);\nconst HASH_CHANGE_TIMEOUT = 1000;\nconst POSITION_UPDATED_THRESHOLD = 50;\nconst UPDATE_VIEWAREA_TIMEOUT = 1000;\nfunction getCurrentHash() {\n  return document.location.hash;\n}\nclass PDFHistory {\n  constructor(_ref) {\n    let {\n      linkService,\n      eventBus\n    } = _ref;\n    this.linkService = linkService;\n    this.eventBus = eventBus;\n    this._initialized = false;\n    this._fingerprint = \"\";\n    this.reset();\n    this._boundEvents = null;\n    this.eventBus._on(\"pagesinit\", () => {\n      this._isPagesLoaded = false;\n      this.eventBus._on(\"pagesloaded\", evt => {\n        this._isPagesLoaded = !!evt.pagesCount;\n      }, {\n        once: true\n      });\n    });\n  }\n  initialize(_ref2) {\n    let {\n      fingerprint,\n      resetHistory = false,\n      updateUrl = false\n    } = _ref2;\n    if (!fingerprint || typeof fingerprint !== \"string\") {\n      console.error('PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.');\n      return;\n    }\n    if (this._initialized) {\n      this.reset();\n    }\n    const reInitialized = this._fingerprint !== \"\" && this._fingerprint !== fingerprint;\n    this._fingerprint = fingerprint;\n    this._updateUrl = updateUrl === true;\n    this._initialized = true;\n    this._bindEvents();\n    const state = window.history.state;\n    this._popStateInProgress = false;\n    this._blockHashChange = 0;\n    this._currentHash = getCurrentHash();\n    this._numPositionUpdates = 0;\n    this._uid = this._maxUid = 0;\n    this._destination = null;\n    this._position = null;\n    if (!this._isValidState(state, true) || resetHistory) {\n      const {\n        hash,\n        page,\n        rotation\n      } = this._parseCurrentHash(true);\n      if (!hash || reInitialized || resetHistory) {\n        this._pushOrReplaceState(null, true);\n        return;\n      }\n      this._pushOrReplaceState({\n        hash,\n        page,\n        rotation\n      }, true);\n      return;\n    }\n    const destination = state.destination;\n    this._updateInternalState(destination, state.uid, true);\n    if (destination.rotation !== undefined) {\n      this._initialRotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this._initialBookmark = JSON.stringify(destination.dest);\n      this._destination.page = null;\n    } else if (destination.hash) {\n      this._initialBookmark = destination.hash;\n    } else if (destination.page) {\n      this._initialBookmark = `page=${destination.page}`;\n    }\n  }\n  reset() {\n    if (this._initialized) {\n      this._pageHide();\n      this._initialized = false;\n      this._unbindEvents();\n    }\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    this._initialBookmark = null;\n    this._initialRotation = null;\n  }\n  push(_ref3) {\n    let {\n      namedDest = null,\n      explicitDest,\n      pageNumber\n    } = _ref3;\n    if (!this._initialized) {\n      return;\n    }\n    if (namedDest && typeof namedDest !== \"string\") {\n      console.error(\"PDFHistory.push: \" + `\"${namedDest}\" is not a valid namedDest parameter.`);\n      return;\n    } else if (!Array.isArray(explicitDest)) {\n      console.error(\"PDFHistory.push: \" + `\"${explicitDest}\" is not a valid explicitDest parameter.`);\n      return;\n    } else if (!this._isValidPage(pageNumber)) {\n      if (pageNumber !== null || this._destination) {\n        console.error(\"PDFHistory.push: \" + `\"${pageNumber}\" is not a valid pageNumber parameter.`);\n        return;\n      }\n    }\n    const hash = namedDest || JSON.stringify(explicitDest);\n    if (!hash) {\n      return;\n    }\n    let forceReplace = false;\n    if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {\n      if (this._destination.page) {\n        return;\n      }\n      forceReplace = true;\n    }\n    if (this._popStateInProgress && !forceReplace) {\n      return;\n    }\n    this._pushOrReplaceState({\n      dest: explicitDest,\n      hash,\n      page: pageNumber,\n      rotation: this.linkService.rotation\n    }, forceReplace);\n    if (!this._popStateInProgress) {\n      this._popStateInProgress = true;\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n  pushPage(pageNumber) {\n    var _this$_destination;\n    if (!this._initialized) {\n      return;\n    }\n    if (!this._isValidPage(pageNumber)) {\n      console.error(`PDFHistory.pushPage: \"${pageNumber}\" is not a valid page number.`);\n      return;\n    }\n    if (((_this$_destination = this._destination) === null || _this$_destination === void 0 ? void 0 : _this$_destination.page) === pageNumber) {\n      return;\n    }\n    if (this._popStateInProgress) {\n      return;\n    }\n    this._pushOrReplaceState({\n      dest: null,\n      hash: `page=${pageNumber}`,\n      page: pageNumber,\n      rotation: this.linkService.rotation\n    });\n    if (!this._popStateInProgress) {\n      this._popStateInProgress = true;\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n  pushCurrentPosition() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    this._tryPushCurrentPosition();\n  }\n  back() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this._isValidState(state) && state.uid > 0) {\n      window.history.back();\n    }\n  }\n  forward() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this._isValidState(state) && state.uid < this._maxUid) {\n      window.history.forward();\n    }\n  }\n  get popStateInProgress() {\n    return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);\n  }\n  get initialBookmark() {\n    return this._initialized ? this._initialBookmark : null;\n  }\n  get initialRotation() {\n    return this._initialized ? this._initialRotation : null;\n  }\n  _pushOrReplaceState(destination) {\n    let forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    const shouldReplace = forceReplace || !this._destination;\n    const newState = {\n      fingerprint: this._fingerprint,\n      uid: shouldReplace ? this._uid : this._uid + 1,\n      destination\n    };\n    this._updateInternalState(destination, newState.uid);\n    let newUrl;\n    if (this._updateUrl && destination !== null && destination !== void 0 && destination.hash) {\n      const baseUrl = document.location.href.split(\"#\")[0];\n      if (!baseUrl.startsWith(\"file://\")) {\n        newUrl = `${baseUrl}#${destination.hash}`;\n      }\n    }\n    if (shouldReplace) {\n      window.history.replaceState(newState, \"\", newUrl);\n    } else {\n      window.history.pushState(newState, \"\", newUrl);\n    }\n  }\n  _tryPushCurrentPosition() {\n    let temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    if (!this._position) {\n      return;\n    }\n    let position = this._position;\n    if (temporary) {\n      position = Object.assign(Object.create(null), this._position);\n      position.temporary = true;\n    }\n    if (!this._destination) {\n      this._pushOrReplaceState(position);\n      return;\n    }\n    if (this._destination.temporary) {\n      this._pushOrReplaceState(position, true);\n      return;\n    }\n    if (this._destination.hash === position.hash) {\n      return;\n    }\n    if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {\n      return;\n    }\n    let forceReplace = false;\n    if (this._destination.page >= position.first && this._destination.page <= position.page) {\n      if (this._destination.dest !== undefined || !this._destination.first) {\n        return;\n      }\n      forceReplace = true;\n    }\n    this._pushOrReplaceState(position, forceReplace);\n  }\n  _isValidPage(val) {\n    return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount;\n  }\n  _isValidState(state) {\n    let checkReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    if (!state) {\n      return false;\n    }\n    if (state.fingerprint !== this._fingerprint) {\n      if (checkReload) {\n        if (typeof state.fingerprint !== \"string\" || state.fingerprint.length !== this._fingerprint.length) {\n          return false;\n        }\n        const [perfEntry] = performance.getEntriesByType(\"navigation\");\n        if ((perfEntry === null || perfEntry === void 0 ? void 0 : perfEntry.type) !== \"reload\") {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    }\n    if (!Number.isInteger(state.uid) || state.uid < 0) {\n      return false;\n    }\n    if (state.destination === null || typeof state.destination !== \"object\") {\n      return false;\n    }\n    return true;\n  }\n  _updateInternalState(destination, uid) {\n    let removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    if (removeTemporary && destination !== null && destination !== void 0 && destination.temporary) {\n      delete destination.temporary;\n    }\n    this._destination = destination;\n    this._uid = uid;\n    this._maxUid = Math.max(this._maxUid, uid);\n    this._numPositionUpdates = 0;\n  }\n  _parseCurrentHash() {\n    let checkNameddest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    const hash = unescape(getCurrentHash()).substring(1);\n    const params = (0, _ui_utils.parseQueryString)(hash);\n    const nameddest = params.get(\"nameddest\") || \"\";\n    let page = params.get(\"page\") | 0;\n    if (!this._isValidPage(page) || checkNameddest && nameddest.length > 0) {\n      page = null;\n    }\n    return {\n      hash,\n      page,\n      rotation: this.linkService.rotation\n    };\n  }\n  _updateViewarea(_ref4) {\n    let {\n      location\n    } = _ref4;\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    this._position = {\n      hash: location.pdfOpenParams.substring(1),\n      page: this.linkService.page,\n      first: location.pageNumber,\n      rotation: location.rotation\n    };\n    if (this._popStateInProgress) {\n      return;\n    }\n    if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {\n      this._numPositionUpdates++;\n    }\n    if (UPDATE_VIEWAREA_TIMEOUT > 0) {\n      this._updateViewareaTimeout = setTimeout(() => {\n        if (!this._popStateInProgress) {\n          this._tryPushCurrentPosition(true);\n        }\n        this._updateViewareaTimeout = null;\n      }, UPDATE_VIEWAREA_TIMEOUT);\n    }\n  }\n  _popState(_ref5) {\n    let {\n      state\n    } = _ref5;\n    const newHash = getCurrentHash(),\n      hashChanged = this._currentHash !== newHash;\n    this._currentHash = newHash;\n    if (!state) {\n      this._uid++;\n      const {\n        hash,\n        page,\n        rotation\n      } = this._parseCurrentHash();\n      this._pushOrReplaceState({\n        hash,\n        page,\n        rotation\n      }, true);\n      return;\n    }\n    if (!this._isValidState(state)) {\n      return;\n    }\n    this._popStateInProgress = true;\n    if (hashChanged) {\n      this._blockHashChange++;\n      (0, _event_utils.waitOnEventOrTimeout)({\n        target: window,\n        name: \"hashchange\",\n        delay: HASH_CHANGE_TIMEOUT\n      }).then(() => {\n        this._blockHashChange--;\n      });\n    }\n    const destination = state.destination;\n    this._updateInternalState(destination, state.uid, true);\n    if ((0, _ui_utils.isValidRotation)(destination.rotation)) {\n      this.linkService.rotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this.linkService.goToDestination(destination.dest);\n    } else if (destination.hash) {\n      this.linkService.setHash(destination.hash);\n    } else if (destination.page) {\n      this.linkService.page = destination.page;\n    }\n    Promise.resolve().then(() => {\n      this._popStateInProgress = false;\n    });\n  }\n  _pageHide() {\n    if (!this._destination || this._destination.temporary) {\n      this._tryPushCurrentPosition();\n    }\n  }\n  _bindEvents() {\n    if (this._boundEvents) {\n      return;\n    }\n    this._boundEvents = {\n      updateViewarea: this._updateViewarea.bind(this),\n      popState: this._popState.bind(this),\n      pageHide: this._pageHide.bind(this)\n    };\n    this.eventBus._on(\"updateviewarea\", this._boundEvents.updateViewarea);\n    window.addEventListener(\"popstate\", this._boundEvents.popState);\n    window.addEventListener(\"pagehide\", this._boundEvents.pageHide);\n  }\n  _unbindEvents() {\n    if (!this._boundEvents) {\n      return;\n    }\n    this.eventBus._off(\"updateviewarea\", this._boundEvents.updateViewarea);\n    window.removeEventListener(\"popstate\", this._boundEvents.popState);\n    window.removeEventListener(\"pagehide\", this._boundEvents.pageHide);\n    this._boundEvents = null;\n  }\n}\nexports.PDFHistory = PDFHistory;\nfunction isDestHashesEqual(destHash, pushHash) {\n  if (typeof destHash !== \"string\" || typeof pushHash !== \"string\") {\n    return false;\n  }\n  if (destHash === pushHash) {\n    return true;\n  }\n  const nameddest = (0, _ui_utils.parseQueryString)(destHash).get(\"nameddest\");\n  if (nameddest === pushHash) {\n    return true;\n  }\n  return false;\n}\nfunction isDestArraysEqual(firstDest, secondDest) {\n  function isEntryEqual(first, second) {\n    if (typeof first !== typeof second) {\n      return false;\n    }\n    if (Array.isArray(first) || Array.isArray(second)) {\n      return false;\n    }\n    if (first !== null && typeof first === \"object\" && second !== null) {\n      if (Object.keys(first).length !== Object.keys(second).length) {\n        return false;\n      }\n      for (const key in first) {\n        if (!isEntryEqual(first[key], second[key])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    return first === second || Number.isNaN(first) && Number.isNaN(second);\n  }\n  if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {\n    return false;\n  }\n  if (firstDest.length !== secondDest.length) {\n    return false;\n  }\n  for (let i = 0, ii = firstDest.length; i < ii; i++) {\n    if (!isEntryEqual(firstDest[i], secondDest[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/***/ }),\n/* 20 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFLayerViewer = void 0;\nvar _base_tree_viewer = __webpack_require__(14);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar _updateLayers = /*#__PURE__*/new WeakSet();\nclass PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer {\n  constructor(options) {\n    super(options);\n    _classPrivateMethodInitSpec(this, _updateLayers);\n    this.l10n = options.l10n;\n    this.eventBus._on(\"optionalcontentconfigchanged\", evt => {\n      _classPrivateMethodGet(this, _updateLayers, _updateLayers2).call(this, evt.promise);\n    });\n    this.eventBus._on(\"resetlayers\", () => {\n      _classPrivateMethodGet(this, _updateLayers, _updateLayers2).call(this);\n    });\n    this.eventBus._on(\"togglelayerstree\", this._toggleAllTreeItems.bind(this));\n  }\n  reset() {\n    super.reset();\n    this._optionalContentConfig = null;\n    this._optionalContentHash = null;\n  }\n  _dispatchEvent(layersCount) {\n    this.eventBus.dispatch(\"layersloaded\", {\n      source: this,\n      layersCount\n    });\n  }\n  _bindLink(element, _ref) {\n    let {\n      groupId,\n      input\n    } = _ref;\n    const setVisibility = () => {\n      this._optionalContentConfig.setVisibility(groupId, input.checked);\n      this._optionalContentHash = this._optionalContentConfig.getHash();\n      this.eventBus.dispatch(\"optionalcontentconfig\", {\n        source: this,\n        promise: Promise.resolve(this._optionalContentConfig)\n      });\n    };\n    element.onclick = evt => {\n      if (evt.target === input) {\n        setVisibility();\n        return true;\n      } else if (evt.target !== element) {\n        return true;\n      }\n      input.checked = !input.checked;\n      setVisibility();\n      return false;\n    };\n  }\n  async _setNestedName(element, _ref2) {\n    let {\n      name = null\n    } = _ref2;\n    if (typeof name === \"string\") {\n      element.textContent = this._normalizeTextContent(name);\n      return;\n    }\n    element.textContent = await this.l10n.get(\"additional_layers\");\n    element.style.fontStyle = \"italic\";\n  }\n  _addToggleButton(div, _ref3) {\n    let {\n      name = null\n    } = _ref3;\n    super._addToggleButton(div, name === null);\n  }\n  _toggleAllTreeItems() {\n    if (!this._optionalContentConfig) {\n      return;\n    }\n    super._toggleAllTreeItems();\n  }\n  render(_ref4) {\n    let {\n      optionalContentConfig,\n      pdfDocument\n    } = _ref4;\n    if (this._optionalContentConfig) {\n      this.reset();\n    }\n    this._optionalContentConfig = optionalContentConfig || null;\n    this._pdfDocument = pdfDocument || null;\n    const groups = optionalContentConfig === null || optionalContentConfig === void 0 ? void 0 : optionalContentConfig.getOrder();\n    if (!groups) {\n      this._dispatchEvent(0);\n      return;\n    }\n    this._optionalContentHash = optionalContentConfig.getHash();\n    const fragment = document.createDocumentFragment(),\n      queue = [{\n        parent: fragment,\n        groups\n      }];\n    let layersCount = 0,\n      hasAnyNesting = false;\n    while (queue.length > 0) {\n      const levelData = queue.shift();\n      for (const groupId of levelData.groups) {\n        const div = document.createElement(\"div\");\n        div.className = \"treeItem\";\n        const element = document.createElement(\"a\");\n        div.append(element);\n        if (typeof groupId === \"object\") {\n          hasAnyNesting = true;\n          this._addToggleButton(div, groupId);\n          this._setNestedName(element, groupId);\n          const itemsDiv = document.createElement(\"div\");\n          itemsDiv.className = \"treeItems\";\n          div.append(itemsDiv);\n          queue.push({\n            parent: itemsDiv,\n            groups: groupId.order\n          });\n        } else {\n          const group = optionalContentConfig.getGroup(groupId);\n          const input = document.createElement(\"input\");\n          this._bindLink(element, {\n            groupId,\n            input\n          });\n          input.type = \"checkbox\";\n          input.checked = group.visible;\n          const label = document.createElement(\"label\");\n          label.textContent = this._normalizeTextContent(group.name);\n          label.append(input);\n          element.append(label);\n          layersCount++;\n        }\n        levelData.parent.append(div);\n      }\n    }\n    this._finishRendering(fragment, layersCount, hasAnyNesting);\n  }\n}\nexports.PDFLayerViewer = PDFLayerViewer;\nasync function _updateLayers2() {\n  let promise = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n  if (!this._optionalContentConfig) {\n    return;\n  }\n  const pdfDocument = this._pdfDocument;\n  const optionalContentConfig = await (promise || pdfDocument.getOptionalContentConfig());\n  if (pdfDocument !== this._pdfDocument) {\n    return;\n  }\n  if (promise) {\n    if (optionalContentConfig.getHash() === this._optionalContentHash) {\n      return;\n    }\n  } else {\n    this.eventBus.dispatch(\"optionalcontentconfig\", {\n      source: this,\n      promise: Promise.resolve(optionalContentConfig)\n    });\n  }\n  this.render({\n    optionalContentConfig,\n    pdfDocument: this._pdfDocument\n  });\n}\n\n/***/ }),\n/* 21 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFOutlineViewer = void 0;\nvar _base_tree_viewer = __webpack_require__(14);\nvar _pdfjsLib = __webpack_require__(5);\nvar _ui_utils = __webpack_require__(1);\nclass PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer {\n  constructor(options) {\n    super(options);\n    this.linkService = options.linkService;\n    this.downloadManager = options.downloadManager;\n    this.eventBus._on(\"toggleoutlinetree\", this._toggleAllTreeItems.bind(this));\n    this.eventBus._on(\"currentoutlineitem\", this._currentOutlineItem.bind(this));\n    this.eventBus._on(\"pagechanging\", evt => {\n      this._currentPageNumber = evt.pageNumber;\n    });\n    this.eventBus._on(\"pagesloaded\", evt => {\n      this._isPagesLoaded = !!evt.pagesCount;\n      if (this._currentOutlineItemCapability && !this._currentOutlineItemCapability.settled) {\n        this._currentOutlineItemCapability.resolve(this._isPagesLoaded);\n      }\n    });\n    this.eventBus._on(\"sidebarviewchanged\", evt => {\n      this._sidebarView = evt.view;\n    });\n  }\n  reset() {\n    super.reset();\n    this._outline = null;\n    this._pageNumberToDestHashCapability = null;\n    this._currentPageNumber = 1;\n    this._isPagesLoaded = null;\n    if (this._currentOutlineItemCapability && !this._currentOutlineItemCapability.settled) {\n      this._currentOutlineItemCapability.resolve(false);\n    }\n    this._currentOutlineItemCapability = null;\n  }\n  _dispatchEvent(outlineCount) {\n    var _this$_pdfDocument;\n    this._currentOutlineItemCapability = (0, _pdfjsLib.createPromiseCapability)();\n    if (outlineCount === 0 || (_this$_pdfDocument = this._pdfDocument) !== null && _this$_pdfDocument !== void 0 && _this$_pdfDocument.loadingParams.disableAutoFetch) {\n      this._currentOutlineItemCapability.resolve(false);\n    } else if (this._isPagesLoaded !== null) {\n      this._currentOutlineItemCapability.resolve(this._isPagesLoaded);\n    }\n    this.eventBus.dispatch(\"outlineloaded\", {\n      source: this,\n      outlineCount,\n      currentOutlineItemPromise: this._currentOutlineItemCapability.promise\n    });\n  }\n  _bindLink(element, _ref) {\n    let {\n      url,\n      newWindow,\n      action,\n      attachment,\n      dest,\n      setOCGState\n    } = _ref;\n    const {\n      linkService\n    } = this;\n    if (url) {\n      linkService.addLinkAttributes(element, url, newWindow);\n      return;\n    }\n    if (action) {\n      element.href = linkService.getAnchorUrl(\"\");\n      element.onclick = () => {\n        linkService.executeNamedAction(action);\n        return false;\n      };\n      return;\n    }\n    if (attachment) {\n      element.href = linkService.getAnchorUrl(\"\");\n      element.onclick = () => {\n        this.downloadManager.openOrDownloadData(element, attachment.content, attachment.filename);\n        return false;\n      };\n      return;\n    }\n    if (setOCGState) {\n      element.href = linkService.getAnchorUrl(\"\");\n      element.onclick = () => {\n        linkService.executeSetOCGState(setOCGState);\n        return false;\n      };\n      return;\n    }\n    element.href = linkService.getDestinationHash(dest);\n    element.onclick = evt => {\n      this._updateCurrentTreeItem(evt.target.parentNode);\n      if (dest) {\n        linkService.goToDestination(dest);\n      }\n      return false;\n    };\n  }\n  _setStyles(element, _ref2) {\n    let {\n      bold,\n      italic\n    } = _ref2;\n    if (bold) {\n      element.style.fontWeight = \"bold\";\n    }\n    if (italic) {\n      element.style.fontStyle = \"italic\";\n    }\n  }\n  _addToggleButton(div, _ref3) {\n    let {\n      count,\n      items\n    } = _ref3;\n    let hidden = false;\n    if (count < 0) {\n      let totalCount = items.length;\n      if (totalCount > 0) {\n        const queue = [...items];\n        while (queue.length > 0) {\n          const {\n            count: nestedCount,\n            items: nestedItems\n          } = queue.shift();\n          if (nestedCount > 0 && nestedItems.length > 0) {\n            totalCount += nestedItems.length;\n            queue.push(...nestedItems);\n          }\n        }\n      }\n      if (Math.abs(count) === totalCount) {\n        hidden = true;\n      }\n    }\n    super._addToggleButton(div, hidden);\n  }\n  _toggleAllTreeItems() {\n    if (!this._outline) {\n      return;\n    }\n    super._toggleAllTreeItems();\n  }\n  render(_ref4) {\n    let {\n      outline,\n      pdfDocument\n    } = _ref4;\n    if (this._outline) {\n      this.reset();\n    }\n    this._outline = outline || null;\n    this._pdfDocument = pdfDocument || null;\n    if (!outline) {\n      this._dispatchEvent(0);\n      return;\n    }\n    const fragment = document.createDocumentFragment();\n    const queue = [{\n      parent: fragment,\n      items: outline\n    }];\n    let outlineCount = 0,\n      hasAnyNesting = false;\n    while (queue.length > 0) {\n      const levelData = queue.shift();\n      for (const item of levelData.items) {\n        const div = document.createElement(\"div\");\n        div.className = \"treeItem\";\n        const element = document.createElement(\"a\");\n        this._bindLink(element, item);\n        this._setStyles(element, item);\n        element.textContent = this._normalizeTextContent(item.title);\n        div.append(element);\n        if (item.items.length > 0) {\n          hasAnyNesting = true;\n          this._addToggleButton(div, item);\n          const itemsDiv = document.createElement(\"div\");\n          itemsDiv.className = \"treeItems\";\n          div.append(itemsDiv);\n          queue.push({\n            parent: itemsDiv,\n            items: item.items\n          });\n        }\n        levelData.parent.append(div);\n        outlineCount++;\n      }\n    }\n    this._finishRendering(fragment, outlineCount, hasAnyNesting);\n  }\n  async _currentOutlineItem() {\n    if (!this._isPagesLoaded) {\n      throw new Error(\"_currentOutlineItem: All pages have not been loaded.\");\n    }\n    if (!this._outline || !this._pdfDocument) {\n      return;\n    }\n    const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument);\n    if (!pageNumberToDestHash) {\n      return;\n    }\n    this._updateCurrentTreeItem(null);\n    if (this._sidebarView !== _ui_utils.SidebarView.OUTLINE) {\n      return;\n    }\n    for (let i = this._currentPageNumber; i > 0; i--) {\n      const destHash = pageNumberToDestHash.get(i);\n      if (!destHash) {\n        continue;\n      }\n      const linkElement = this.container.querySelector(`a[href=\"${destHash}\"]`);\n      if (!linkElement) {\n        continue;\n      }\n      this._scrollToCurrentTreeItem(linkElement.parentNode);\n      break;\n    }\n  }\n  async _getPageNumberToDestHash(pdfDocument) {\n    if (this._pageNumberToDestHashCapability) {\n      return this._pageNumberToDestHashCapability.promise;\n    }\n    this._pageNumberToDestHashCapability = (0, _pdfjsLib.createPromiseCapability)();\n    const pageNumberToDestHash = new Map(),\n      pageNumberNesting = new Map();\n    const queue = [{\n      nesting: 0,\n      items: this._outline\n    }];\n    while (queue.length > 0) {\n      const levelData = queue.shift(),\n        currentNesting = levelData.nesting;\n      for (const {\n        dest,\n        items\n      } of levelData.items) {\n        let explicitDest, pageNumber;\n        if (typeof dest === \"string\") {\n          explicitDest = await pdfDocument.getDestination(dest);\n          if (pdfDocument !== this._pdfDocument) {\n            return null;\n          }\n        } else {\n          explicitDest = dest;\n        }\n        if (Array.isArray(explicitDest)) {\n          const [destRef] = explicitDest;\n          if (typeof destRef === \"object\" && destRef !== null) {\n            pageNumber = this.linkService._cachedPageNumber(destRef);\n            if (!pageNumber) {\n              try {\n                pageNumber = (await pdfDocument.getPageIndex(destRef)) + 1;\n                if (pdfDocument !== this._pdfDocument) {\n                  return null;\n                }\n                this.linkService.cachePageRef(pageNumber, destRef);\n              } catch (ex) {}\n            }\n          } else if (Number.isInteger(destRef)) {\n            pageNumber = destRef + 1;\n          }\n          if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) {\n            const destHash = this.linkService.getDestinationHash(dest);\n            pageNumberToDestHash.set(pageNumber, destHash);\n            pageNumberNesting.set(pageNumber, currentNesting);\n          }\n        }\n        if (items.length > 0) {\n          queue.push({\n            nesting: currentNesting + 1,\n            items\n          });\n        }\n      }\n    }\n    this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null);\n    return this._pageNumberToDestHashCapability.promise;\n  }\n}\nexports.PDFOutlineViewer = PDFOutlineViewer;\n\n/***/ }),\n/* 22 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFPresentationMode = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdfjsLib = __webpack_require__(5);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst DELAY_BEFORE_HIDING_CONTROLS = 3000;\nconst ACTIVE_SELECTOR = \"pdfPresentationMode\";\nconst CONTROLS_SELECTOR = \"pdfPresentationModeControls\";\nconst MOUSE_SCROLL_COOLDOWN_TIME = 50;\nconst PAGE_SWITCH_THRESHOLD = 0.1;\nconst SWIPE_MIN_DISTANCE_THRESHOLD = 50;\nconst SWIPE_ANGLE_THRESHOLD = Math.PI / 6;\nvar _state = /*#__PURE__*/new WeakMap();\nvar _args = /*#__PURE__*/new WeakMap();\nvar _mouseWheel = /*#__PURE__*/new WeakSet();\nvar _notifyStateChange = /*#__PURE__*/new WeakSet();\nvar _enter = /*#__PURE__*/new WeakSet();\nvar _exit = /*#__PURE__*/new WeakSet();\nvar _mouseDown = /*#__PURE__*/new WeakSet();\nvar _contextMenu = /*#__PURE__*/new WeakSet();\nvar _showControls = /*#__PURE__*/new WeakSet();\nvar _hideControls = /*#__PURE__*/new WeakSet();\nvar _resetMouseScrollState = /*#__PURE__*/new WeakSet();\nvar _touchSwipe = /*#__PURE__*/new WeakSet();\nvar _addWindowListeners = /*#__PURE__*/new WeakSet();\nvar _removeWindowListeners = /*#__PURE__*/new WeakSet();\nvar _fullscreenChange = /*#__PURE__*/new WeakSet();\nvar _addFullscreenChangeListeners = /*#__PURE__*/new WeakSet();\nvar _removeFullscreenChangeListeners = /*#__PURE__*/new WeakSet();\nclass PDFPresentationMode {\n  constructor(_ref) {\n    let {\n      container,\n      pdfViewer,\n      eventBus\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _removeFullscreenChangeListeners);\n    _classPrivateMethodInitSpec(this, _addFullscreenChangeListeners);\n    _classPrivateMethodInitSpec(this, _fullscreenChange);\n    _classPrivateMethodInitSpec(this, _removeWindowListeners);\n    _classPrivateMethodInitSpec(this, _addWindowListeners);\n    _classPrivateMethodInitSpec(this, _touchSwipe);\n    _classPrivateMethodInitSpec(this, _resetMouseScrollState);\n    _classPrivateMethodInitSpec(this, _hideControls);\n    _classPrivateMethodInitSpec(this, _showControls);\n    _classPrivateMethodInitSpec(this, _contextMenu);\n    _classPrivateMethodInitSpec(this, _mouseDown);\n    _classPrivateMethodInitSpec(this, _exit);\n    _classPrivateMethodInitSpec(this, _enter);\n    _classPrivateMethodInitSpec(this, _notifyStateChange);\n    _classPrivateMethodInitSpec(this, _mouseWheel);\n    _classPrivateFieldInitSpec(this, _state, {\n      writable: true,\n      value: _ui_utils.PresentationModeState.UNKNOWN\n    });\n    _classPrivateFieldInitSpec(this, _args, {\n      writable: true,\n      value: null\n    });\n    this.container = container;\n    this.pdfViewer = pdfViewer;\n    this.eventBus = eventBus;\n    this.contextMenuOpen = false;\n    this.mouseScrollTimeStamp = 0;\n    this.mouseScrollDelta = 0;\n    this.touchSwipeState = null;\n  }\n  async request() {\n    const {\n      container,\n      pdfViewer\n    } = this;\n    if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) {\n      return false;\n    }\n    _classPrivateMethodGet(this, _addFullscreenChangeListeners, _addFullscreenChangeListeners2).call(this);\n    _classPrivateMethodGet(this, _notifyStateChange, _notifyStateChange2).call(this, _ui_utils.PresentationModeState.CHANGING);\n    const promise = container.requestFullscreen();\n    _classPrivateFieldSet(this, _args, {\n      pageNumber: pdfViewer.currentPageNumber,\n      scaleValue: pdfViewer.currentScaleValue,\n      scrollMode: pdfViewer.scrollMode,\n      spreadMode: null,\n      annotationEditorMode: null\n    });\n    if (pdfViewer.spreadMode !== _ui_utils.SpreadMode.NONE && !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)) {\n      console.warn(\"Ignoring Spread modes when entering PresentationMode, \" + \"since the document may contain varying page sizes.\");\n      _classPrivateFieldGet(this, _args).spreadMode = pdfViewer.spreadMode;\n    }\n    if (pdfViewer.annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) {\n      _classPrivateFieldGet(this, _args).annotationEditorMode = pdfViewer.annotationEditorMode;\n    }\n    try {\n      await promise;\n      pdfViewer.focus();\n      return true;\n    } catch (reason) {\n      _classPrivateMethodGet(this, _removeFullscreenChangeListeners, _removeFullscreenChangeListeners2).call(this);\n      _classPrivateMethodGet(this, _notifyStateChange, _notifyStateChange2).call(this, _ui_utils.PresentationModeState.NORMAL);\n    }\n    return false;\n  }\n  get active() {\n    return _classPrivateFieldGet(this, _state) === _ui_utils.PresentationModeState.CHANGING || _classPrivateFieldGet(this, _state) === _ui_utils.PresentationModeState.FULLSCREEN;\n  }\n}\nexports.PDFPresentationMode = PDFPresentationMode;\nfunction _mouseWheel2(evt) {\n  if (!this.active) {\n    return;\n  }\n  evt.preventDefault();\n  const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);\n  const currentTime = Date.now();\n  const storedTime = this.mouseScrollTimeStamp;\n  if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {\n    return;\n  }\n  if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {\n    _classPrivateMethodGet(this, _resetMouseScrollState, _resetMouseScrollState2).call(this);\n  }\n  this.mouseScrollDelta += delta;\n  if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {\n    const totalDelta = this.mouseScrollDelta;\n    _classPrivateMethodGet(this, _resetMouseScrollState, _resetMouseScrollState2).call(this);\n    const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage();\n    if (success) {\n      this.mouseScrollTimeStamp = currentTime;\n    }\n  }\n}\nfunction _notifyStateChange2(state) {\n  _classPrivateFieldSet(this, _state, state);\n  this.eventBus.dispatch(\"presentationmodechanged\", {\n    source: this,\n    state\n  });\n}\nfunction _enter2() {\n  _classPrivateMethodGet(this, _notifyStateChange, _notifyStateChange2).call(this, _ui_utils.PresentationModeState.FULLSCREEN);\n  this.container.classList.add(ACTIVE_SELECTOR);\n  setTimeout(() => {\n    this.pdfViewer.scrollMode = _ui_utils.ScrollMode.PAGE;\n    if (_classPrivateFieldGet(this, _args).spreadMode !== null) {\n      this.pdfViewer.spreadMode = _ui_utils.SpreadMode.NONE;\n    }\n    this.pdfViewer.currentPageNumber = _classPrivateFieldGet(this, _args).pageNumber;\n    this.pdfViewer.currentScaleValue = \"page-fit\";\n    if (_classPrivateFieldGet(this, _args).annotationEditorMode !== null) {\n      this.pdfViewer.annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE;\n    }\n  }, 0);\n  _classPrivateMethodGet(this, _addWindowListeners, _addWindowListeners2).call(this);\n  _classPrivateMethodGet(this, _showControls, _showControls2).call(this);\n  this.contextMenuOpen = false;\n  window.getSelection().removeAllRanges();\n}\nfunction _exit2() {\n  const pageNumber = this.pdfViewer.currentPageNumber;\n  this.container.classList.remove(ACTIVE_SELECTOR);\n  setTimeout(() => {\n    _classPrivateMethodGet(this, _removeFullscreenChangeListeners, _removeFullscreenChangeListeners2).call(this);\n    _classPrivateMethodGet(this, _notifyStateChange, _notifyStateChange2).call(this, _ui_utils.PresentationModeState.NORMAL);\n    this.pdfViewer.scrollMode = _classPrivateFieldGet(this, _args).scrollMode;\n    if (_classPrivateFieldGet(this, _args).spreadMode !== null) {\n      this.pdfViewer.spreadMode = _classPrivateFieldGet(this, _args).spreadMode;\n    }\n    this.pdfViewer.currentScaleValue = _classPrivateFieldGet(this, _args).scaleValue;\n    this.pdfViewer.currentPageNumber = pageNumber;\n    if (_classPrivateFieldGet(this, _args).annotationEditorMode !== null) {\n      this.pdfViewer.annotationEditorMode = _classPrivateFieldGet(this, _args).annotationEditorMode;\n    }\n    _classPrivateFieldSet(this, _args, null);\n  }, 0);\n  _classPrivateMethodGet(this, _removeWindowListeners, _removeWindowListeners2).call(this);\n  _classPrivateMethodGet(this, _hideControls, _hideControls2).call(this);\n  _classPrivateMethodGet(this, _resetMouseScrollState, _resetMouseScrollState2).call(this);\n  this.contextMenuOpen = false;\n}\nfunction _mouseDown2(evt) {\n  var _evt$target$parentNod;\n  if (this.contextMenuOpen) {\n    this.contextMenuOpen = false;\n    evt.preventDefault();\n    return;\n  }\n  if (evt.button !== 0) {\n    return;\n  }\n  if (evt.target.href && (_evt$target$parentNod = evt.target.parentNode) !== null && _evt$target$parentNod !== void 0 && _evt$target$parentNod.hasAttribute(\"data-internal-link\")) {\n    return;\n  }\n  evt.preventDefault();\n  if (evt.shiftKey) {\n    this.pdfViewer.previousPage();\n  } else {\n    this.pdfViewer.nextPage();\n  }\n}\nfunction _contextMenu2() {\n  this.contextMenuOpen = true;\n}\nfunction _showControls2() {\n  if (this.controlsTimeout) {\n    clearTimeout(this.controlsTimeout);\n  } else {\n    this.container.classList.add(CONTROLS_SELECTOR);\n  }\n  this.controlsTimeout = setTimeout(() => {\n    this.container.classList.remove(CONTROLS_SELECTOR);\n    delete this.controlsTimeout;\n  }, DELAY_BEFORE_HIDING_CONTROLS);\n}\nfunction _hideControls2() {\n  if (!this.controlsTimeout) {\n    return;\n  }\n  clearTimeout(this.controlsTimeout);\n  this.container.classList.remove(CONTROLS_SELECTOR);\n  delete this.controlsTimeout;\n}\nfunction _resetMouseScrollState2() {\n  this.mouseScrollTimeStamp = 0;\n  this.mouseScrollDelta = 0;\n}\nfunction _touchSwipe2(evt) {\n  if (!this.active) {\n    return;\n  }\n  if (evt.touches.length > 1) {\n    this.touchSwipeState = null;\n    return;\n  }\n  switch (evt.type) {\n    case \"touchstart\":\n      this.touchSwipeState = {\n        startX: evt.touches[0].pageX,\n        startY: evt.touches[0].pageY,\n        endX: evt.touches[0].pageX,\n        endY: evt.touches[0].pageY\n      };\n      break;\n    case \"touchmove\":\n      if (this.touchSwipeState === null) {\n        return;\n      }\n      this.touchSwipeState.endX = evt.touches[0].pageX;\n      this.touchSwipeState.endY = evt.touches[0].pageY;\n      evt.preventDefault();\n      break;\n    case \"touchend\":\n      if (this.touchSwipeState === null) {\n        return;\n      }\n      let delta = 0;\n      const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;\n      const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;\n      const absAngle = Math.abs(Math.atan2(dy, dx));\n      if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) {\n        delta = dx;\n      } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) {\n        delta = dy;\n      }\n      if (delta > 0) {\n        this.pdfViewer.previousPage();\n      } else if (delta < 0) {\n        this.pdfViewer.nextPage();\n      }\n      break;\n  }\n}\nfunction _addWindowListeners2() {\n  this.showControlsBind = _classPrivateMethodGet(this, _showControls, _showControls2).bind(this);\n  this.mouseDownBind = _classPrivateMethodGet(this, _mouseDown, _mouseDown2).bind(this);\n  this.mouseWheelBind = _classPrivateMethodGet(this, _mouseWheel, _mouseWheel2).bind(this);\n  this.resetMouseScrollStateBind = _classPrivateMethodGet(this, _resetMouseScrollState, _resetMouseScrollState2).bind(this);\n  this.contextMenuBind = _classPrivateMethodGet(this, _contextMenu, _contextMenu2).bind(this);\n  this.touchSwipeBind = _classPrivateMethodGet(this, _touchSwipe, _touchSwipe2).bind(this);\n  window.addEventListener(\"mousemove\", this.showControlsBind);\n  window.addEventListener(\"mousedown\", this.mouseDownBind);\n  window.addEventListener(\"wheel\", this.mouseWheelBind, {\n    passive: false\n  });\n  window.addEventListener(\"keydown\", this.resetMouseScrollStateBind);\n  window.addEventListener(\"contextmenu\", this.contextMenuBind);\n  window.addEventListener(\"touchstart\", this.touchSwipeBind);\n  window.addEventListener(\"touchmove\", this.touchSwipeBind);\n  window.addEventListener(\"touchend\", this.touchSwipeBind);\n}\nfunction _removeWindowListeners2() {\n  window.removeEventListener(\"mousemove\", this.showControlsBind);\n  window.removeEventListener(\"mousedown\", this.mouseDownBind);\n  window.removeEventListener(\"wheel\", this.mouseWheelBind, {\n    passive: false\n  });\n  window.removeEventListener(\"keydown\", this.resetMouseScrollStateBind);\n  window.removeEventListener(\"contextmenu\", this.contextMenuBind);\n  window.removeEventListener(\"touchstart\", this.touchSwipeBind);\n  window.removeEventListener(\"touchmove\", this.touchSwipeBind);\n  window.removeEventListener(\"touchend\", this.touchSwipeBind);\n  delete this.showControlsBind;\n  delete this.mouseDownBind;\n  delete this.mouseWheelBind;\n  delete this.resetMouseScrollStateBind;\n  delete this.contextMenuBind;\n  delete this.touchSwipeBind;\n}\nfunction _fullscreenChange2() {\n  if (document.fullscreenElement) {\n    _classPrivateMethodGet(this, _enter, _enter2).call(this);\n  } else {\n    _classPrivateMethodGet(this, _exit, _exit2).call(this);\n  }\n}\nfunction _addFullscreenChangeListeners2() {\n  this.fullscreenChangeBind = _classPrivateMethodGet(this, _fullscreenChange, _fullscreenChange2).bind(this);\n  window.addEventListener(\"fullscreenchange\", this.fullscreenChangeBind);\n}\nfunction _removeFullscreenChangeListeners2() {\n  window.removeEventListener(\"fullscreenchange\", this.fullscreenChangeBind);\n  delete this.fullscreenChangeBind;\n}\n\n/***/ }),\n/* 23 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFRenderingQueue = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _ui_utils = __webpack_require__(1);\nconst CLEANUP_TIMEOUT = 30000;\nclass PDFRenderingQueue {\n  constructor() {\n    this.pdfViewer = null;\n    this.pdfThumbnailViewer = null;\n    this.onIdle = null;\n    this.highestPriorityPage = null;\n    this.idleTimeout = null;\n    this.printing = false;\n    this.isThumbnailViewEnabled = false;\n  }\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n  setThumbnailViewer(pdfThumbnailViewer) {\n    this.pdfThumbnailViewer = pdfThumbnailViewer;\n  }\n  isHighestPriority(view) {\n    return this.highestPriorityPage === view.renderingId;\n  }\n  hasViewer() {\n    return !!this.pdfViewer;\n  }\n  renderHighestPriority(currentlyVisiblePages) {\n    var _this$pdfThumbnailVie;\n    if (this.idleTimeout) {\n      clearTimeout(this.idleTimeout);\n      this.idleTimeout = null;\n    }\n    if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\n      return;\n    }\n    if (this.isThumbnailViewEnabled && (_this$pdfThumbnailVie = this.pdfThumbnailViewer) !== null && _this$pdfThumbnailVie !== void 0 && _this$pdfThumbnailVie.forceRendering()) {\n      return;\n    }\n    if (this.printing) {\n      return;\n    }\n    if (this.onIdle) {\n      this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\n    }\n  }\n  getHighestPriority(visible, views, scrolledDown) {\n    let preRenderExtra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    const visibleViews = visible.views,\n      numVisible = visibleViews.length;\n    if (numVisible === 0) {\n      return null;\n    }\n    for (let i = 0; i < numVisible; i++) {\n      const view = visibleViews[i].view;\n      if (!this.isViewFinished(view)) {\n        return view;\n      }\n    }\n    const firstId = visible.first.id,\n      lastId = visible.last.id;\n    if (lastId - firstId + 1 > numVisible) {\n      const visibleIds = visible.ids;\n      for (let i = 1, ii = lastId - firstId; i < ii; i++) {\n        const holeId = scrolledDown ? firstId + i : lastId - i;\n        if (visibleIds.has(holeId)) {\n          continue;\n        }\n        const holeView = views[holeId - 1];\n        if (!this.isViewFinished(holeView)) {\n          return holeView;\n        }\n      }\n    }\n    let preRenderIndex = scrolledDown ? lastId : firstId - 2;\n    let preRenderView = views[preRenderIndex];\n    if (preRenderView && !this.isViewFinished(preRenderView)) {\n      return preRenderView;\n    }\n    if (preRenderExtra) {\n      preRenderIndex += scrolledDown ? 1 : -1;\n      preRenderView = views[preRenderIndex];\n      if (preRenderView && !this.isViewFinished(preRenderView)) {\n        return preRenderView;\n      }\n    }\n    return null;\n  }\n  isViewFinished(view) {\n    return view.renderingState === _ui_utils.RenderingStates.FINISHED;\n  }\n  renderView(view) {\n    switch (view.renderingState) {\n      case _ui_utils.RenderingStates.FINISHED:\n        return false;\n      case _ui_utils.RenderingStates.PAUSED:\n        this.highestPriorityPage = view.renderingId;\n        view.resume();\n        break;\n      case _ui_utils.RenderingStates.RUNNING:\n        this.highestPriorityPage = view.renderingId;\n        break;\n      case _ui_utils.RenderingStates.INITIAL:\n        this.highestPriorityPage = view.renderingId;\n        view.draw().finally(() => {\n          this.renderHighestPriority();\n        }).catch(reason => {\n          if (reason instanceof _pdfjsLib.RenderingCancelledException) {\n            return;\n          }\n          console.error(`renderView: \"${reason}\"`);\n        });\n        break;\n    }\n    return true;\n  }\n}\nexports.PDFRenderingQueue = PDFRenderingQueue;\n\n/***/ }),\n/* 24 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFScriptingManager = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdfjsLib = __webpack_require__(5);\nclass PDFScriptingManager {\n  constructor(_ref) {\n    let {\n      eventBus,\n      sandboxBundleSrc = null,\n      scriptingFactory = null,\n      docPropertiesLookup = null\n    } = _ref;\n    this._pdfDocument = null;\n    this._pdfViewer = null;\n    this._closeCapability = null;\n    this._destroyCapability = null;\n    this._scripting = null;\n    this._mouseState = Object.create(null);\n    this._ready = false;\n    this._eventBus = eventBus;\n    this._sandboxBundleSrc = sandboxBundleSrc;\n    this._scriptingFactory = scriptingFactory;\n    this._docPropertiesLookup = docPropertiesLookup;\n  }\n  setViewer(pdfViewer) {\n    this._pdfViewer = pdfViewer;\n  }\n  async setDocument(pdfDocument) {\n    var _this$_scripting3;\n    if (this._pdfDocument) {\n      await this._destroyScripting();\n    }\n    this._pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]);\n    if (!objects && !docActions) {\n      await this._destroyScripting();\n      return;\n    }\n    if (pdfDocument !== this._pdfDocument) {\n      return;\n    }\n    try {\n      this._scripting = this._createScripting();\n    } catch (error) {\n      console.error(`PDFScriptingManager.setDocument: \"${error === null || error === void 0 ? void 0 : error.message}\".`);\n      await this._destroyScripting();\n      return;\n    }\n    this._internalEvents.set(\"updatefromsandbox\", event => {\n      if ((event === null || event === void 0 ? void 0 : event.source) !== window) {\n        return;\n      }\n      this._updateFromSandbox(event.detail);\n    });\n    this._internalEvents.set(\"dispatcheventinsandbox\", event => {\n      var _this$_scripting;\n      (_this$_scripting = this._scripting) === null || _this$_scripting === void 0 ? void 0 : _this$_scripting.dispatchEventInSandbox(event.detail);\n    });\n    this._internalEvents.set(\"pagechanging\", _ref2 => {\n      let {\n        pageNumber,\n        previous\n      } = _ref2;\n      if (pageNumber === previous) {\n        return;\n      }\n      this._dispatchPageClose(previous);\n      this._dispatchPageOpen(pageNumber);\n    });\n    this._internalEvents.set(\"pagerendered\", _ref3 => {\n      let {\n        pageNumber\n      } = _ref3;\n      if (!this._pageOpenPending.has(pageNumber)) {\n        return;\n      }\n      if (pageNumber !== this._pdfViewer.currentPageNumber) {\n        return;\n      }\n      this._dispatchPageOpen(pageNumber);\n    });\n    this._internalEvents.set(\"pagesdestroy\", async event => {\n      var _this$_scripting2, _this$_closeCapabilit;\n      await this._dispatchPageClose(this._pdfViewer.currentPageNumber);\n      await ((_this$_scripting2 = this._scripting) === null || _this$_scripting2 === void 0 ? void 0 : _this$_scripting2.dispatchEventInSandbox({\n        id: \"doc\",\n        name: \"WillClose\"\n      }));\n      (_this$_closeCapabilit = this._closeCapability) === null || _this$_closeCapabilit === void 0 ? void 0 : _this$_closeCapabilit.resolve();\n    });\n    this._domEvents.set(\"mousedown\", event => {\n      this._mouseState.isDown = true;\n    });\n    this._domEvents.set(\"mouseup\", event => {\n      this._mouseState.isDown = false;\n    });\n    for (const [name, listener] of this._internalEvents) {\n      this._eventBus._on(name, listener);\n    }\n    for (const [name, listener] of this._domEvents) {\n      window.addEventListener(name, listener, true);\n    }\n    try {\n      const docProperties = await this._getDocProperties();\n      if (pdfDocument !== this._pdfDocument) {\n        return;\n      }\n      await this._scripting.createSandbox({\n        objects,\n        calculationOrder,\n        appInfo: {\n          platform: navigator.platform,\n          language: navigator.language\n        },\n        docInfo: {\n          ...docProperties,\n          actions: docActions\n        }\n      });\n      this._eventBus.dispatch(\"sandboxcreated\", {\n        source: this\n      });\n    } catch (error) {\n      console.error(`PDFScriptingManager.setDocument: \"${error === null || error === void 0 ? void 0 : error.message}\".`);\n      await this._destroyScripting();\n      return;\n    }\n    await ((_this$_scripting3 = this._scripting) === null || _this$_scripting3 === void 0 ? void 0 : _this$_scripting3.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"Open\"\n    }));\n    await this._dispatchPageOpen(this._pdfViewer.currentPageNumber, true);\n    Promise.resolve().then(() => {\n      if (pdfDocument === this._pdfDocument) {\n        this._ready = true;\n      }\n    });\n  }\n  async dispatchWillSave(detail) {\n    var _this$_scripting4;\n    return (_this$_scripting4 = this._scripting) === null || _this$_scripting4 === void 0 ? void 0 : _this$_scripting4.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"WillSave\"\n    });\n  }\n  async dispatchDidSave(detail) {\n    var _this$_scripting5;\n    return (_this$_scripting5 = this._scripting) === null || _this$_scripting5 === void 0 ? void 0 : _this$_scripting5.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"DidSave\"\n    });\n  }\n  async dispatchWillPrint(detail) {\n    var _this$_scripting6;\n    return (_this$_scripting6 = this._scripting) === null || _this$_scripting6 === void 0 ? void 0 : _this$_scripting6.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"WillPrint\"\n    });\n  }\n  async dispatchDidPrint(detail) {\n    var _this$_scripting7;\n    return (_this$_scripting7 = this._scripting) === null || _this$_scripting7 === void 0 ? void 0 : _this$_scripting7.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"DidPrint\"\n    });\n  }\n  get mouseState() {\n    return this._mouseState;\n  }\n  get destroyPromise() {\n    var _this$_destroyCapabil;\n    return ((_this$_destroyCapabil = this._destroyCapability) === null || _this$_destroyCapabil === void 0 ? void 0 : _this$_destroyCapabil.promise) || null;\n  }\n  get ready() {\n    return this._ready;\n  }\n  get _internalEvents() {\n    return (0, _pdfjsLib.shadow)(this, \"_internalEvents\", new Map());\n  }\n  get _domEvents() {\n    return (0, _pdfjsLib.shadow)(this, \"_domEvents\", new Map());\n  }\n  get _pageOpenPending() {\n    return (0, _pdfjsLib.shadow)(this, \"_pageOpenPending\", new Set());\n  }\n  get _visitedPages() {\n    return (0, _pdfjsLib.shadow)(this, \"_visitedPages\", new Map());\n  }\n  async _updateFromSandbox(detail) {\n    const isInPresentationMode = this._pdfViewer.isInPresentationMode || this._pdfViewer.isChangingPresentationMode;\n    const {\n      id,\n      siblings,\n      command,\n      value\n    } = detail;\n    if (!id) {\n      switch (command) {\n        case \"clear\":\n          console.clear();\n          break;\n        case \"error\":\n          console.error(value);\n          break;\n        case \"layout\":\n          if (isInPresentationMode) {\n            return;\n          }\n          const modes = (0, _ui_utils.apiPageLayoutToViewerModes)(value);\n          this._pdfViewer.spreadMode = modes.spreadMode;\n          break;\n        case \"page-num\":\n          this._pdfViewer.currentPageNumber = value + 1;\n          break;\n        case \"print\":\n          await this._pdfViewer.pagesPromise;\n          this._eventBus.dispatch(\"print\", {\n            source: this\n          });\n          break;\n        case \"println\":\n          console.log(value);\n          break;\n        case \"zoom\":\n          if (isInPresentationMode) {\n            return;\n          }\n          this._pdfViewer.currentScaleValue = value;\n          break;\n        case \"SaveAs\":\n          this._eventBus.dispatch(\"download\", {\n            source: this\n          });\n          break;\n        case \"FirstPage\":\n          this._pdfViewer.currentPageNumber = 1;\n          break;\n        case \"LastPage\":\n          this._pdfViewer.currentPageNumber = this._pdfViewer.pagesCount;\n          break;\n        case \"NextPage\":\n          this._pdfViewer.nextPage();\n          break;\n        case \"PrevPage\":\n          this._pdfViewer.previousPage();\n          break;\n        case \"ZoomViewIn\":\n          if (isInPresentationMode) {\n            return;\n          }\n          this._pdfViewer.increaseScale();\n          break;\n        case \"ZoomViewOut\":\n          if (isInPresentationMode) {\n            return;\n          }\n          this._pdfViewer.decreaseScale();\n          break;\n      }\n      return;\n    }\n    if (isInPresentationMode) {\n      if (detail.focus) {\n        return;\n      }\n    }\n    delete detail.id;\n    delete detail.siblings;\n    const ids = siblings ? [id, ...siblings] : [id];\n    for (const elementId of ids) {\n      const element = document.querySelector(`[data-element-id=\"${elementId}\"]`);\n      if (element) {\n        element.dispatchEvent(new CustomEvent(\"updatefromsandbox\", {\n          detail\n        }));\n      } else {\n        var _this$_pdfDocument;\n        (_this$_pdfDocument = this._pdfDocument) === null || _this$_pdfDocument === void 0 ? void 0 : _this$_pdfDocument.annotationStorage.setValue(elementId, detail);\n      }\n    }\n  }\n  async _dispatchPageOpen(pageNumber) {\n    let initialize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    const pdfDocument = this._pdfDocument,\n      visitedPages = this._visitedPages;\n    if (initialize) {\n      this._closeCapability = (0, _pdfjsLib.createPromiseCapability)();\n    }\n    if (!this._closeCapability) {\n      return;\n    }\n    const pageView = this._pdfViewer.getPageView(pageNumber - 1);\n    if ((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) !== _ui_utils.RenderingStates.FINISHED) {\n      this._pageOpenPending.add(pageNumber);\n      return;\n    }\n    this._pageOpenPending.delete(pageNumber);\n    const actionsPromise = (async () => {\n      var _pageView$pdfPage, _this$_scripting8;\n      const actions = await (!visitedPages.has(pageNumber) ? (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.getJSActions() : null);\n      if (pdfDocument !== this._pdfDocument) {\n        return;\n      }\n      await ((_this$_scripting8 = this._scripting) === null || _this$_scripting8 === void 0 ? void 0 : _this$_scripting8.dispatchEventInSandbox({\n        id: \"page\",\n        name: \"PageOpen\",\n        pageNumber,\n        actions\n      }));\n    })();\n    visitedPages.set(pageNumber, actionsPromise);\n  }\n  async _dispatchPageClose(pageNumber) {\n    var _this$_scripting9;\n    const pdfDocument = this._pdfDocument,\n      visitedPages = this._visitedPages;\n    if (!this._closeCapability) {\n      return;\n    }\n    if (this._pageOpenPending.has(pageNumber)) {\n      return;\n    }\n    const actionsPromise = visitedPages.get(pageNumber);\n    if (!actionsPromise) {\n      return;\n    }\n    visitedPages.set(pageNumber, null);\n    await actionsPromise;\n    if (pdfDocument !== this._pdfDocument) {\n      return;\n    }\n    await ((_this$_scripting9 = this._scripting) === null || _this$_scripting9 === void 0 ? void 0 : _this$_scripting9.dispatchEventInSandbox({\n      id: \"page\",\n      name: \"PageClose\",\n      pageNumber\n    }));\n  }\n  async _getDocProperties() {\n    if (this._docPropertiesLookup) {\n      return this._docPropertiesLookup(this._pdfDocument);\n    }\n    throw new Error(\"_getDocProperties: Unable to lookup properties.\");\n  }\n  _createScripting() {\n    this._destroyCapability = (0, _pdfjsLib.createPromiseCapability)();\n    if (this._scripting) {\n      throw new Error(\"_createScripting: Scripting already exists.\");\n    }\n    if (this._scriptingFactory) {\n      return this._scriptingFactory.createScripting({\n        sandboxBundleSrc: this._sandboxBundleSrc\n      });\n    }\n    throw new Error(\"_createScripting: Cannot create scripting.\");\n  }\n  async _destroyScripting() {\n    var _this$_destroyCapabil3;\n    if (!this._scripting) {\n      var _this$_destroyCapabil2;\n      this._pdfDocument = null;\n      (_this$_destroyCapabil2 = this._destroyCapability) === null || _this$_destroyCapabil2 === void 0 ? void 0 : _this$_destroyCapabil2.resolve();\n      return;\n    }\n    if (this._closeCapability) {\n      await Promise.race([this._closeCapability.promise, new Promise(resolve => {\n        setTimeout(resolve, 1000);\n      })]).catch(reason => {});\n      this._closeCapability = null;\n    }\n    this._pdfDocument = null;\n    try {\n      await this._scripting.destroySandbox();\n    } catch (ex) {}\n    for (const [name, listener] of this._internalEvents) {\n      this._eventBus._off(name, listener);\n    }\n    this._internalEvents.clear();\n    for (const [name, listener] of this._domEvents) {\n      window.removeEventListener(name, listener, true);\n    }\n    this._domEvents.clear();\n    this._pageOpenPending.clear();\n    this._visitedPages.clear();\n    this._scripting = null;\n    delete this._mouseState.isDown;\n    this._ready = false;\n    (_this$_destroyCapabil3 = this._destroyCapability) === null || _this$_destroyCapabil3 === void 0 ? void 0 : _this$_destroyCapabil3.resolve();\n  }\n}\nexports.PDFScriptingManager = PDFScriptingManager;\n\n/***/ }),\n/* 25 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFSidebar = void 0;\nvar _ui_utils = __webpack_require__(1);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst UI_NOTIFICATION_CLASS = \"pdfSidebarNotification\";\nvar _dispatchEvent = /*#__PURE__*/new WeakSet();\nvar _forceRendering = /*#__PURE__*/new WeakSet();\nvar _updateThumbnailViewer = /*#__PURE__*/new WeakSet();\nvar _showUINotification = /*#__PURE__*/new WeakSet();\nvar _hideUINotification = /*#__PURE__*/new WeakSet();\nvar _addEventListeners = /*#__PURE__*/new WeakSet();\nclass PDFSidebar {\n  constructor(_ref) {\n    let {\n      elements,\n      pdfViewer: _pdfViewer,\n      pdfThumbnailViewer: _pdfThumbnailViewer,\n      eventBus,\n      l10n\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _addEventListeners);\n    _classPrivateMethodInitSpec(this, _hideUINotification);\n    _classPrivateMethodInitSpec(this, _showUINotification);\n    _classPrivateMethodInitSpec(this, _updateThumbnailViewer);\n    _classPrivateMethodInitSpec(this, _forceRendering);\n    _classPrivateMethodInitSpec(this, _dispatchEvent);\n    this.isOpen = false;\n    this.active = _ui_utils.SidebarView.THUMBS;\n    this.isInitialViewSet = false;\n    this.isInitialEventDispatched = false;\n    this.onToggled = null;\n    this.pdfViewer = _pdfViewer;\n    this.pdfThumbnailViewer = _pdfThumbnailViewer;\n    this.outerContainer = elements.outerContainer;\n    this.sidebarContainer = elements.sidebarContainer;\n    this.toggleButton = elements.toggleButton;\n    this.thumbnailButton = elements.thumbnailButton;\n    this.outlineButton = elements.outlineButton;\n    this.attachmentsButton = elements.attachmentsButton;\n    this.layersButton = elements.layersButton;\n    this.thumbnailView = elements.thumbnailView;\n    this.outlineView = elements.outlineView;\n    this.attachmentsView = elements.attachmentsView;\n    this.layersView = elements.layersView;\n    this._outlineOptionsContainer = elements.outlineOptionsContainer;\n    this._currentOutlineItemButton = elements.currentOutlineItemButton;\n    this.eventBus = eventBus;\n    this.l10n = l10n;\n    _classPrivateMethodGet(this, _addEventListeners, _addEventListeners2).call(this);\n  }\n  reset() {\n    this.isInitialViewSet = false;\n    this.isInitialEventDispatched = false;\n    _classPrivateMethodGet(this, _hideUINotification, _hideUINotification2).call(this, true);\n    this.switchView(_ui_utils.SidebarView.THUMBS);\n    this.outlineButton.disabled = false;\n    this.attachmentsButton.disabled = false;\n    this.layersButton.disabled = false;\n    this._currentOutlineItemButton.disabled = true;\n  }\n  get visibleView() {\n    return this.isOpen ? this.active : _ui_utils.SidebarView.NONE;\n  }\n  setInitialView() {\n    let view = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _ui_utils.SidebarView.NONE;\n    if (this.isInitialViewSet) {\n      return;\n    }\n    this.isInitialViewSet = true;\n    if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) {\n      _classPrivateMethodGet(this, _dispatchEvent, _dispatchEvent2).call(this);\n      return;\n    }\n    this.switchView(view, true);\n    if (!this.isInitialEventDispatched) {\n      _classPrivateMethodGet(this, _dispatchEvent, _dispatchEvent2).call(this);\n    }\n  }\n  switchView(view) {\n    let forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    const isViewChanged = view !== this.active;\n    let shouldForceRendering = false;\n    switch (view) {\n      case _ui_utils.SidebarView.NONE:\n        if (this.isOpen) {\n          this.close();\n        }\n        return;\n      case _ui_utils.SidebarView.THUMBS:\n        if (this.isOpen && isViewChanged) {\n          shouldForceRendering = true;\n        }\n        break;\n      case _ui_utils.SidebarView.OUTLINE:\n        if (this.outlineButton.disabled) {\n          return;\n        }\n        break;\n      case _ui_utils.SidebarView.ATTACHMENTS:\n        if (this.attachmentsButton.disabled) {\n          return;\n        }\n        break;\n      case _ui_utils.SidebarView.LAYERS:\n        if (this.layersButton.disabled) {\n          return;\n        }\n        break;\n      default:\n        console.error(`PDFSidebar.switchView: \"${view}\" is not a valid view.`);\n        return;\n    }\n    this.active = view;\n    const isThumbs = view === _ui_utils.SidebarView.THUMBS,\n      isOutline = view === _ui_utils.SidebarView.OUTLINE,\n      isAttachments = view === _ui_utils.SidebarView.ATTACHMENTS,\n      isLayers = view === _ui_utils.SidebarView.LAYERS;\n    this.thumbnailButton.classList.toggle(\"toggled\", isThumbs);\n    this.outlineButton.classList.toggle(\"toggled\", isOutline);\n    this.attachmentsButton.classList.toggle(\"toggled\", isAttachments);\n    this.layersButton.classList.toggle(\"toggled\", isLayers);\n    this.thumbnailButton.setAttribute(\"aria-checked\", isThumbs);\n    this.outlineButton.setAttribute(\"aria-checked\", isOutline);\n    this.attachmentsButton.setAttribute(\"aria-checked\", isAttachments);\n    this.layersButton.setAttribute(\"aria-checked\", isLayers);\n    this.thumbnailView.classList.toggle(\"hidden\", !isThumbs);\n    this.outlineView.classList.toggle(\"hidden\", !isOutline);\n    this.attachmentsView.classList.toggle(\"hidden\", !isAttachments);\n    this.layersView.classList.toggle(\"hidden\", !isLayers);\n    this._outlineOptionsContainer.classList.toggle(\"hidden\", !isOutline);\n    if (forceOpen && !this.isOpen) {\n      this.open();\n      return;\n    }\n    if (shouldForceRendering) {\n      _classPrivateMethodGet(this, _updateThumbnailViewer, _updateThumbnailViewer2).call(this);\n      _classPrivateMethodGet(this, _forceRendering, _forceRendering2).call(this);\n    }\n    if (isViewChanged) {\n      _classPrivateMethodGet(this, _dispatchEvent, _dispatchEvent2).call(this);\n    }\n  }\n  open() {\n    if (this.isOpen) {\n      return;\n    }\n    this.isOpen = true;\n    this.toggleButton.classList.add(\"toggled\");\n    this.toggleButton.setAttribute(\"aria-expanded\", \"true\");\n    this.outerContainer.classList.add(\"sidebarMoving\", \"sidebarOpen\");\n    if (this.active === _ui_utils.SidebarView.THUMBS) {\n      _classPrivateMethodGet(this, _updateThumbnailViewer, _updateThumbnailViewer2).call(this);\n    }\n    _classPrivateMethodGet(this, _forceRendering, _forceRendering2).call(this);\n    _classPrivateMethodGet(this, _dispatchEvent, _dispatchEvent2).call(this);\n    _classPrivateMethodGet(this, _hideUINotification, _hideUINotification2).call(this);\n  }\n  close() {\n    if (!this.isOpen) {\n      return;\n    }\n    this.isOpen = false;\n    this.toggleButton.classList.remove(\"toggled\");\n    this.toggleButton.setAttribute(\"aria-expanded\", \"false\");\n    this.outerContainer.classList.add(\"sidebarMoving\");\n    this.outerContainer.classList.remove(\"sidebarOpen\");\n    _classPrivateMethodGet(this, _forceRendering, _forceRendering2).call(this);\n    _classPrivateMethodGet(this, _dispatchEvent, _dispatchEvent2).call(this);\n  }\n  toggle() {\n    if (this.isOpen) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n}\nexports.PDFSidebar = PDFSidebar;\nfunction _dispatchEvent2() {\n  if (this.isInitialViewSet && !this.isInitialEventDispatched) {\n    this.isInitialEventDispatched = true;\n  }\n  this.eventBus.dispatch(\"sidebarviewchanged\", {\n    source: this,\n    view: this.visibleView\n  });\n}\nfunction _forceRendering2() {\n  if (this.onToggled) {\n    this.onToggled();\n  } else {\n    this.pdfViewer.forceRendering();\n    this.pdfThumbnailViewer.forceRendering();\n  }\n}\nfunction _updateThumbnailViewer2() {\n  const {\n    pdfViewer,\n    pdfThumbnailViewer\n  } = this;\n  const pagesCount = pdfViewer.pagesCount;\n  for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) {\n    const pageView = pdfViewer.getPageView(pageIndex);\n    if ((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) === _ui_utils.RenderingStates.FINISHED) {\n      const thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);\n      thumbnailView.setImage(pageView);\n    }\n  }\n  pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);\n}\nfunction _showUINotification2() {\n  this.toggleButton.setAttribute(\"data-l10n-id\", \"toggle_sidebar_notification2\");\n  this.l10n.translate(this.toggleButton);\n  if (!this.isOpen) {\n    this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);\n  }\n}\nfunction _hideUINotification2() {\n  let reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  if (this.isOpen || reset) {\n    this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);\n  }\n  if (reset) {\n    this.toggleButton.setAttribute(\"data-l10n-id\", \"toggle_sidebar\");\n    this.l10n.translate(this.toggleButton);\n  }\n}\nfunction _addEventListeners2() {\n  this.sidebarContainer.addEventListener(\"transitionend\", evt => {\n    if (evt.target === this.sidebarContainer) {\n      this.outerContainer.classList.remove(\"sidebarMoving\");\n    }\n  });\n  this.toggleButton.addEventListener(\"click\", () => {\n    this.toggle();\n  });\n  this.thumbnailButton.addEventListener(\"click\", () => {\n    this.switchView(_ui_utils.SidebarView.THUMBS);\n  });\n  this.outlineButton.addEventListener(\"click\", () => {\n    this.switchView(_ui_utils.SidebarView.OUTLINE);\n  });\n  this.outlineButton.addEventListener(\"dblclick\", () => {\n    this.eventBus.dispatch(\"toggleoutlinetree\", {\n      source: this\n    });\n  });\n  this.attachmentsButton.addEventListener(\"click\", () => {\n    this.switchView(_ui_utils.SidebarView.ATTACHMENTS);\n  });\n  this.layersButton.addEventListener(\"click\", () => {\n    this.switchView(_ui_utils.SidebarView.LAYERS);\n  });\n  this.layersButton.addEventListener(\"dblclick\", () => {\n    this.eventBus.dispatch(\"resetlayers\", {\n      source: this\n    });\n  });\n  this._currentOutlineItemButton.addEventListener(\"click\", () => {\n    this.eventBus.dispatch(\"currentoutlineitem\", {\n      source: this\n    });\n  });\n  const onTreeLoaded = (count, button, view) => {\n    button.disabled = !count;\n    if (count) {\n      _classPrivateMethodGet(this, _showUINotification, _showUINotification2).call(this);\n    } else if (this.active === view) {\n      this.switchView(_ui_utils.SidebarView.THUMBS);\n    }\n  };\n  this.eventBus._on(\"outlineloaded\", evt => {\n    onTreeLoaded(evt.outlineCount, this.outlineButton, _ui_utils.SidebarView.OUTLINE);\n    evt.currentOutlineItemPromise.then(enabled => {\n      if (!this.isInitialViewSet) {\n        return;\n      }\n      this._currentOutlineItemButton.disabled = !enabled;\n    });\n  });\n  this.eventBus._on(\"attachmentsloaded\", evt => {\n    onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, _ui_utils.SidebarView.ATTACHMENTS);\n  });\n  this.eventBus._on(\"layersloaded\", evt => {\n    onTreeLoaded(evt.layersCount, this.layersButton, _ui_utils.SidebarView.LAYERS);\n  });\n  this.eventBus._on(\"presentationmodechanged\", evt => {\n    if (evt.state === _ui_utils.PresentationModeState.NORMAL && this.visibleView === _ui_utils.SidebarView.THUMBS) {\n      _classPrivateMethodGet(this, _updateThumbnailViewer, _updateThumbnailViewer2).call(this);\n    }\n  });\n}\n\n/***/ }),\n/* 26 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFSidebarResizer = void 0;\nvar _ui_utils = __webpack_require__(1);\nconst SIDEBAR_WIDTH_VAR = \"--sidebar-width\";\nconst SIDEBAR_MIN_WIDTH = 200;\nconst SIDEBAR_RESIZING_CLASS = \"sidebarResizing\";\nclass PDFSidebarResizer {\n  constructor(options, eventBus, l10n) {\n    this.isRTL = false;\n    this.sidebarOpen = false;\n    this._width = null;\n    this._outerContainerWidth = null;\n    this._boundEvents = Object.create(null);\n    this.outerContainer = options.outerContainer;\n    this.resizer = options.resizer;\n    this.eventBus = eventBus;\n    l10n.getDirection().then(dir => {\n      this.isRTL = dir === \"rtl\";\n    });\n    this._addEventListeners();\n  }\n  get outerContainerWidth() {\n    return this._outerContainerWidth || (this._outerContainerWidth = this.outerContainer.clientWidth);\n  }\n  _updateWidth() {\n    let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    const maxWidth = Math.floor(this.outerContainerWidth / 2);\n    if (width > maxWidth) {\n      width = maxWidth;\n    }\n    if (width < SIDEBAR_MIN_WIDTH) {\n      width = SIDEBAR_MIN_WIDTH;\n    }\n    if (width === this._width) {\n      return false;\n    }\n    this._width = width;\n    _ui_utils.docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`);\n    return true;\n  }\n  _mouseMove(evt) {\n    let width = evt.clientX;\n    if (this.isRTL) {\n      width = this.outerContainerWidth - width;\n    }\n    this._updateWidth(width);\n  }\n  _mouseUp(evt) {\n    this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\n    this.eventBus.dispatch(\"resize\", {\n      source: this\n    });\n    const _boundEvents = this._boundEvents;\n    window.removeEventListener(\"mousemove\", _boundEvents.mouseMove);\n    window.removeEventListener(\"mouseup\", _boundEvents.mouseUp);\n  }\n  _addEventListeners() {\n    const _boundEvents = this._boundEvents;\n    _boundEvents.mouseMove = this._mouseMove.bind(this);\n    _boundEvents.mouseUp = this._mouseUp.bind(this);\n    this.resizer.addEventListener(\"mousedown\", evt => {\n      if (evt.button !== 0) {\n        return;\n      }\n      this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\n      window.addEventListener(\"mousemove\", _boundEvents.mouseMove);\n      window.addEventListener(\"mouseup\", _boundEvents.mouseUp);\n    });\n    this.eventBus._on(\"sidebarviewchanged\", evt => {\n      this.sidebarOpen = !!(evt !== null && evt !== void 0 && evt.view);\n    });\n    this.eventBus._on(\"resize\", evt => {\n      if ((evt === null || evt === void 0 ? void 0 : evt.source) !== window) {\n        return;\n      }\n      this._outerContainerWidth = null;\n      if (!this._width) {\n        return;\n      }\n      if (!this.sidebarOpen) {\n        this._updateWidth(this._width);\n        return;\n      }\n      this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\n      const updated = this._updateWidth(this._width);\n      Promise.resolve().then(() => {\n        this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\n        if (updated) {\n          this.eventBus.dispatch(\"resize\", {\n            source: this\n          });\n        }\n      });\n    });\n  }\n}\nexports.PDFSidebarResizer = PDFSidebarResizer;\n\n/***/ }),\n/* 27 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFThumbnailViewer = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdf_thumbnail_view = __webpack_require__(28);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst THUMBNAIL_SCROLL_MARGIN = -19;\nconst THUMBNAIL_SELECTED_CLASS = \"selected\";\nvar _ensurePdfPageLoaded = /*#__PURE__*/new WeakSet();\nvar _getScrollAhead = /*#__PURE__*/new WeakSet();\nclass PDFThumbnailViewer {\n  constructor(_ref) {\n    let {\n      container,\n      eventBus,\n      linkService,\n      renderingQueue,\n      l10n,\n      pageColors\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _getScrollAhead);\n    _classPrivateMethodInitSpec(this, _ensurePdfPageLoaded);\n    this.container = container;\n    this.linkService = linkService;\n    this.renderingQueue = renderingQueue;\n    this.l10n = l10n;\n    this.pageColors = pageColors || null;\n    if (this.pageColors && !(CSS.supports(\"color\", this.pageColors.background) && CSS.supports(\"color\", this.pageColors.foreground))) {\n      if (this.pageColors.background || this.pageColors.foreground) {\n        console.warn(\"PDFThumbnailViewer: Ignoring `pageColors`-option, since the browser doesn't support the values used.\");\n      }\n      this.pageColors = null;\n    }\n    this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this));\n    this._resetView();\n  }\n  _scrollUpdated() {\n    this.renderingQueue.renderHighestPriority();\n  }\n  getThumbnail(index) {\n    return this._thumbnails[index];\n  }\n  _getVisibleThumbs() {\n    return (0, _ui_utils.getVisibleElements)({\n      scrollEl: this.container,\n      views: this._thumbnails\n    });\n  }\n  scrollThumbnailIntoView(pageNumber) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const thumbnailView = this._thumbnails[pageNumber - 1];\n    if (!thumbnailView) {\n      console.error('scrollThumbnailIntoView: Invalid \"pageNumber\" parameter.');\n      return;\n    }\n    if (pageNumber !== this._currentPageNumber) {\n      const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];\n      prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);\n      thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\n    }\n    const {\n      first,\n      last,\n      views\n    } = this._getVisibleThumbs();\n    if (views.length > 0) {\n      let shouldScroll = false;\n      if (pageNumber <= first.id || pageNumber >= last.id) {\n        shouldScroll = true;\n      } else {\n        for (const {\n          id,\n          percent\n        } of views) {\n          if (id !== pageNumber) {\n            continue;\n          }\n          shouldScroll = percent < 100;\n          break;\n        }\n      }\n      if (shouldScroll) {\n        (0, _ui_utils.scrollIntoView)(thumbnailView.div, {\n          top: THUMBNAIL_SCROLL_MARGIN\n        });\n      }\n    }\n    this._currentPageNumber = pageNumber;\n  }\n  get pagesRotation() {\n    return this._pagesRotation;\n  }\n  set pagesRotation(rotation) {\n    if (!(0, _ui_utils.isValidRotation)(rotation)) {\n      throw new Error(\"Invalid thumbnails rotation angle.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (this._pagesRotation === rotation) {\n      return;\n    }\n    this._pagesRotation = rotation;\n    const updateArgs = {\n      rotation\n    };\n    for (const thumbnail of this._thumbnails) {\n      thumbnail.update(updateArgs);\n    }\n  }\n  cleanup() {\n    for (const thumbnail of this._thumbnails) {\n      if (thumbnail.renderingState !== _ui_utils.RenderingStates.FINISHED) {\n        thumbnail.reset();\n      }\n    }\n    _pdf_thumbnail_view.TempImageFactory.destroyCanvas();\n  }\n  _resetView() {\n    this._thumbnails = [];\n    this._currentPageNumber = 1;\n    this._pageLabels = null;\n    this._pagesRotation = 0;\n    this.container.textContent = \"\";\n  }\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      this._cancelRendering();\n      this._resetView();\n    }\n    this.pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const firstPagePromise = pdfDocument.getPage(1);\n    const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();\n    firstPagePromise.then(firstPdfPage => {\n      var _this$_thumbnails$;\n      const pagesCount = pdfDocument.numPages;\n      const viewport = firstPdfPage.getViewport({\n        scale: 1\n      });\n      for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n        const thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({\n          container: this.container,\n          id: pageNum,\n          defaultViewport: viewport.clone(),\n          optionalContentConfigPromise,\n          linkService: this.linkService,\n          renderingQueue: this.renderingQueue,\n          l10n: this.l10n,\n          pageColors: this.pageColors\n        });\n        this._thumbnails.push(thumbnail);\n      }\n      (_this$_thumbnails$ = this._thumbnails[0]) === null || _this$_thumbnails$ === void 0 ? void 0 : _this$_thumbnails$.setPdfPage(firstPdfPage);\n      const thumbnailView = this._thumbnails[this._currentPageNumber - 1];\n      thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\n    }).catch(reason => {\n      console.error(\"Unable to initialize thumbnail viewer\", reason);\n    });\n  }\n  _cancelRendering() {\n    for (const thumbnail of this._thumbnails) {\n      thumbnail.cancelRendering();\n    }\n  }\n  setPageLabels(labels) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!labels) {\n      this._pageLabels = null;\n    } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {\n      this._pageLabels = null;\n      console.error(\"PDFThumbnailViewer_setPageLabels: Invalid page labels.\");\n    } else {\n      this._pageLabels = labels;\n    }\n    for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {\n      var _this$_pageLabels;\n      this._thumbnails[i].setPageLabel(((_this$_pageLabels = this._pageLabels) === null || _this$_pageLabels === void 0 ? void 0 : _this$_pageLabels[i]) ?? null);\n    }\n  }\n  forceRendering() {\n    const visibleThumbs = this._getVisibleThumbs();\n    const scrollAhead = _classPrivateMethodGet(this, _getScrollAhead, _getScrollAhead2).call(this, visibleThumbs);\n    const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, scrollAhead);\n    if (thumbView) {\n      _classPrivateMethodGet(this, _ensurePdfPageLoaded, _ensurePdfPageLoaded2).call(this, thumbView).then(() => {\n        this.renderingQueue.renderView(thumbView);\n      });\n      return true;\n    }\n    return false;\n  }\n}\nexports.PDFThumbnailViewer = PDFThumbnailViewer;\nasync function _ensurePdfPageLoaded2(thumbView) {\n  if (thumbView.pdfPage) {\n    return thumbView.pdfPage;\n  }\n  try {\n    const pdfPage = await this.pdfDocument.getPage(thumbView.id);\n    if (!thumbView.pdfPage) {\n      thumbView.setPdfPage(pdfPage);\n    }\n    return pdfPage;\n  } catch (reason) {\n    console.error(\"Unable to get page for thumb view\", reason);\n    return null;\n  }\n}\nfunction _getScrollAhead2(visible) {\n  var _visible$first, _visible$last;\n  if (((_visible$first = visible.first) === null || _visible$first === void 0 ? void 0 : _visible$first.id) === 1) {\n    return true;\n  } else if (((_visible$last = visible.last) === null || _visible$last === void 0 ? void 0 : _visible$last.id) === this._thumbnails.length) {\n    return false;\n  }\n  return this.scroll.down;\n}\n\n/***/ }),\n/* 28 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.TempImageFactory = exports.PDFThumbnailView = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdfjsLib = __webpack_require__(5);\nfunction _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nfunction _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classCheckPrivateStaticFieldDescriptor(descriptor, action) { if (descriptor === undefined) { throw new TypeError(\"attempted to \" + action + \" private static field before its declaration\"); } }\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\"Private static access of wrong provenance\"); } }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nconst DRAW_UPSCALE_FACTOR = 2;\nconst MAX_NUM_SCALING_STEPS = 3;\nconst THUMBNAIL_CANVAS_BORDER_WIDTH = 1;\nconst THUMBNAIL_WIDTH = 98;\nclass TempImageFactory {\n  static getCanvas(width, height) {\n    const tempCanvas = _classStaticPrivateFieldSpecGet(this, TempImageFactory, _tempCanvas) || _classStaticPrivateFieldSpecSet(this, TempImageFactory, _tempCanvas, document.createElement(\"canvas\"));\n    tempCanvas.width = width;\n    tempCanvas.height = height;\n    const ctx = tempCanvas.getContext(\"2d\", {\n      alpha: false\n    });\n    ctx.save();\n    ctx.fillStyle = \"rgb(255, 255, 255)\";\n    ctx.fillRect(0, 0, width, height);\n    ctx.restore();\n    return [tempCanvas, tempCanvas.getContext(\"2d\")];\n  }\n  static destroyCanvas() {\n    const tempCanvas = _classStaticPrivateFieldSpecGet(this, TempImageFactory, _tempCanvas);\n    if (tempCanvas) {\n      tempCanvas.width = 0;\n      tempCanvas.height = 0;\n    }\n    _classStaticPrivateFieldSpecSet(this, TempImageFactory, _tempCanvas, null);\n  }\n}\nexports.TempImageFactory = TempImageFactory;\nvar _tempCanvas = {\n  writable: true,\n  value: null\n};\nclass PDFThumbnailView {\n  constructor(_ref) {\n    let {\n      container,\n      id,\n      defaultViewport,\n      optionalContentConfigPromise,\n      linkService,\n      renderingQueue,\n      l10n,\n      pageColors\n    } = _ref;\n    this.id = id;\n    this.renderingId = \"thumbnail\" + id;\n    this.pageLabel = null;\n    this.pdfPage = null;\n    this.rotation = 0;\n    this.viewport = defaultViewport;\n    this.pdfPageRotate = defaultViewport.rotation;\n    this._optionalContentConfigPromise = optionalContentConfigPromise || null;\n    this.pageColors = pageColors || null;\n    this.linkService = linkService;\n    this.renderingQueue = renderingQueue;\n    this.renderTask = null;\n    this.renderingState = _ui_utils.RenderingStates.INITIAL;\n    this.resume = null;\n    const pageWidth = this.viewport.width,\n      pageHeight = this.viewport.height,\n      pageRatio = pageWidth / pageHeight;\n    this.canvasWidth = THUMBNAIL_WIDTH;\n    this.canvasHeight = this.canvasWidth / pageRatio | 0;\n    this.scale = this.canvasWidth / pageWidth;\n    this.l10n = l10n;\n    const anchor = document.createElement(\"a\");\n    anchor.href = linkService.getAnchorUrl(\"#page=\" + id);\n    this._thumbPageTitle.then(msg => {\n      anchor.title = msg;\n    });\n    anchor.onclick = function () {\n      linkService.goToPage(id);\n      return false;\n    };\n    this.anchor = anchor;\n    const div = document.createElement(\"div\");\n    div.className = \"thumbnail\";\n    div.setAttribute(\"data-page-number\", this.id);\n    this.div = div;\n    const ring = document.createElement(\"div\");\n    ring.className = \"thumbnailSelectionRing\";\n    const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;\n    ring.style.width = this.canvasWidth + borderAdjustment + \"px\";\n    ring.style.height = this.canvasHeight + borderAdjustment + \"px\";\n    this.ring = ring;\n    div.append(ring);\n    anchor.append(div);\n    container.append(anchor);\n  }\n  setPdfPage(pdfPage) {\n    this.pdfPage = pdfPage;\n    this.pdfPageRotate = pdfPage.rotate;\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = pdfPage.getViewport({\n      scale: 1,\n      rotation: totalRotation\n    });\n    this.reset();\n  }\n  reset() {\n    this.cancelRendering();\n    this.renderingState = _ui_utils.RenderingStates.INITIAL;\n    const pageWidth = this.viewport.width,\n      pageHeight = this.viewport.height,\n      pageRatio = pageWidth / pageHeight;\n    this.canvasHeight = this.canvasWidth / pageRatio | 0;\n    this.scale = this.canvasWidth / pageWidth;\n    this.div.removeAttribute(\"data-loaded\");\n    const ring = this.ring;\n    ring.textContent = \"\";\n    const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;\n    ring.style.width = this.canvasWidth + borderAdjustment + \"px\";\n    ring.style.height = this.canvasHeight + borderAdjustment + \"px\";\n    if (this.canvas) {\n      this.canvas.width = 0;\n      this.canvas.height = 0;\n      delete this.canvas;\n    }\n    if (this.image) {\n      this.image.removeAttribute(\"src\");\n      delete this.image;\n    }\n  }\n  update(_ref2) {\n    let {\n      rotation = null\n    } = _ref2;\n    if (typeof rotation === \"number\") {\n      this.rotation = rotation;\n    }\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = this.viewport.clone({\n      scale: 1,\n      rotation: totalRotation\n    });\n    this.reset();\n  }\n  cancelRendering() {\n    if (this.renderTask) {\n      this.renderTask.cancel();\n      this.renderTask = null;\n    }\n    this.resume = null;\n  }\n  _getPageDrawContext() {\n    let upscaleFactor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    const canvas = document.createElement(\"canvas\");\n    const ctx = canvas.getContext(\"2d\", {\n      alpha: false\n    });\n    const outputScale = new _ui_utils.OutputScale();\n    canvas.width = upscaleFactor * this.canvasWidth * outputScale.sx | 0;\n    canvas.height = upscaleFactor * this.canvasHeight * outputScale.sy | 0;\n    const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;\n    return {\n      ctx,\n      canvas,\n      transform\n    };\n  }\n  _convertCanvasToImage(canvas) {\n    if (this.renderingState !== _ui_utils.RenderingStates.FINISHED) {\n      throw new Error(\"_convertCanvasToImage: Rendering has not finished.\");\n    }\n    const reducedCanvas = this._reduceImage(canvas);\n    const image = document.createElement(\"img\");\n    image.className = \"thumbnailImage\";\n    this._thumbPageCanvas.then(msg => {\n      image.setAttribute(\"aria-label\", msg);\n    });\n    image.style.width = this.canvasWidth + \"px\";\n    image.style.height = this.canvasHeight + \"px\";\n    image.src = reducedCanvas.toDataURL();\n    this.image = image;\n    this.div.setAttribute(\"data-loaded\", true);\n    this.ring.append(image);\n    reducedCanvas.width = 0;\n    reducedCanvas.height = 0;\n  }\n  draw() {\n    var _this = this;\n    if (this.renderingState !== _ui_utils.RenderingStates.INITIAL) {\n      console.error(\"Must be in new state before drawing\");\n      return Promise.resolve();\n    }\n    const {\n      pdfPage\n    } = this;\n    if (!pdfPage) {\n      this.renderingState = _ui_utils.RenderingStates.FINISHED;\n      return Promise.reject(new Error(\"pdfPage is not loaded\"));\n    }\n    this.renderingState = _ui_utils.RenderingStates.RUNNING;\n    const finishRenderTask = async function () {\n      let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      if (renderTask === _this.renderTask) {\n        _this.renderTask = null;\n      }\n      if (error instanceof _pdfjsLib.RenderingCancelledException) {\n        return;\n      }\n      _this.renderingState = _ui_utils.RenderingStates.FINISHED;\n      _this._convertCanvasToImage(canvas);\n      if (error) {\n        throw error;\n      }\n    };\n    const {\n      ctx,\n      canvas,\n      transform\n    } = this._getPageDrawContext(DRAW_UPSCALE_FACTOR);\n    const drawViewport = this.viewport.clone({\n      scale: DRAW_UPSCALE_FACTOR * this.scale\n    });\n    const renderContinueCallback = cont => {\n      if (!this.renderingQueue.isHighestPriority(this)) {\n        this.renderingState = _ui_utils.RenderingStates.PAUSED;\n        this.resume = () => {\n          this.renderingState = _ui_utils.RenderingStates.RUNNING;\n          cont();\n        };\n        return;\n      }\n      cont();\n    };\n    const renderContext = {\n      canvasContext: ctx,\n      transform,\n      viewport: drawViewport,\n      optionalContentConfigPromise: this._optionalContentConfigPromise,\n      pageColors: this.pageColors\n    };\n    const renderTask = this.renderTask = pdfPage.render(renderContext);\n    renderTask.onContinue = renderContinueCallback;\n    const resultPromise = renderTask.promise.then(function () {\n      return finishRenderTask(null);\n    }, function (error) {\n      return finishRenderTask(error);\n    });\n    resultPromise.finally(() => {\n      canvas.width = 0;\n      canvas.height = 0;\n      const pageCached = this.linkService.isPageCached(this.id);\n      if (!pageCached) {\n        var _this$pdfPage;\n        (_this$pdfPage = this.pdfPage) === null || _this$pdfPage === void 0 ? void 0 : _this$pdfPage.cleanup();\n      }\n    });\n    return resultPromise;\n  }\n  setImage(pageView) {\n    if (this.renderingState !== _ui_utils.RenderingStates.INITIAL) {\n      return;\n    }\n    const {\n      thumbnailCanvas: canvas,\n      pdfPage,\n      scale\n    } = pageView;\n    if (!canvas) {\n      return;\n    }\n    if (!this.pdfPage) {\n      this.setPdfPage(pdfPage);\n    }\n    if (scale < this.scale) {\n      return;\n    }\n    this.renderingState = _ui_utils.RenderingStates.FINISHED;\n    this._convertCanvasToImage(canvas);\n  }\n  _reduceImage(img) {\n    const {\n      ctx,\n      canvas\n    } = this._getPageDrawContext();\n    if (img.width <= 2 * canvas.width) {\n      ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);\n      return canvas;\n    }\n    let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;\n    let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;\n    const [reducedImage, reducedImageCtx] = TempImageFactory.getCanvas(reducedWidth, reducedHeight);\n    while (reducedWidth > img.width || reducedHeight > img.height) {\n      reducedWidth >>= 1;\n      reducedHeight >>= 1;\n    }\n    reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight);\n    while (reducedWidth > 2 * canvas.width) {\n      reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1);\n      reducedWidth >>= 1;\n      reducedHeight >>= 1;\n    }\n    ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height);\n    return canvas;\n  }\n  get _thumbPageTitle() {\n    return this.l10n.get(\"thumb_page_title\", {\n      page: this.pageLabel ?? this.id\n    });\n  }\n  get _thumbPageCanvas() {\n    return this.l10n.get(\"thumb_page_canvas\", {\n      page: this.pageLabel ?? this.id\n    });\n  }\n  setPageLabel(label) {\n    this.pageLabel = typeof label === \"string\" ? label : null;\n    this._thumbPageTitle.then(msg => {\n      this.anchor.title = msg;\n    });\n    if (this.renderingState !== _ui_utils.RenderingStates.FINISHED) {\n      return;\n    }\n    this._thumbPageCanvas.then(msg => {\n      var _this$image;\n      (_this$image = this.image) === null || _this$image === void 0 ? void 0 : _this$image.setAttribute(\"aria-label\", msg);\n    });\n  }\n}\nexports.PDFThumbnailView = PDFThumbnailView;\n\n/***/ }),\n/* 29 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PagesCountLimit = exports.PDFViewer = exports.PDFPageViewBuffer = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _ui_utils = __webpack_require__(1);\nvar _annotation_editor_layer_builder = __webpack_require__(30);\nvar _annotation_layer_builder = __webpack_require__(32);\nvar _l10n_utils = __webpack_require__(31);\nvar _pdf_page_view = __webpack_require__(33);\nvar _pdf_rendering_queue = __webpack_require__(23);\nvar _pdf_link_service = __webpack_require__(3);\nvar _struct_tree_layer_builder = __webpack_require__(35);\nvar _text_highlighter = __webpack_require__(36);\nvar _text_layer_builder = __webpack_require__(37);\nvar _xfa_layer_builder = __webpack_require__(38);\nlet _Symbol$iterator;\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nconst DEFAULT_CACHE_SIZE = 10;\nconst ENABLE_PERMISSIONS_CLASS = \"enablePermissions\";\nconst PagesCountLimit = {\n  FORCE_SCROLL_MODE_PAGE: 15000,\n  FORCE_LAZY_PAGE_INIT: 7500,\n  PAUSE_EAGER_PAGE_INIT: 250\n};\nexports.PagesCountLimit = PagesCountLimit;\nfunction isValidAnnotationEditorMode(mode) {\n  return Object.values(_pdfjsLib.AnnotationEditorType).includes(mode) && mode !== _pdfjsLib.AnnotationEditorType.DISABLE;\n}\nvar _buf = /*#__PURE__*/new WeakMap();\nvar _size = /*#__PURE__*/new WeakMap();\nvar _destroyFirstView = /*#__PURE__*/new WeakSet();\n_Symbol$iterator = Symbol.iterator;\nclass PDFPageViewBuffer {\n  constructor(size) {\n    _classPrivateMethodInitSpec(this, _destroyFirstView);\n    _classPrivateFieldInitSpec(this, _buf, {\n      writable: true,\n      value: new Set()\n    });\n    _classPrivateFieldInitSpec(this, _size, {\n      writable: true,\n      value: 0\n    });\n    _classPrivateFieldSet(this, _size, size);\n  }\n  push(view) {\n    const buf = _classPrivateFieldGet(this, _buf);\n    if (buf.has(view)) {\n      buf.delete(view);\n    }\n    buf.add(view);\n    if (buf.size > _classPrivateFieldGet(this, _size)) {\n      _classPrivateMethodGet(this, _destroyFirstView, _destroyFirstView2).call(this);\n    }\n  }\n  resize(newSize) {\n    let idsToKeep = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    _classPrivateFieldSet(this, _size, newSize);\n    const buf = _classPrivateFieldGet(this, _buf);\n    if (idsToKeep) {\n      const ii = buf.size;\n      let i = 1;\n      for (const view of buf) {\n        if (idsToKeep.has(view.id)) {\n          buf.delete(view);\n          buf.add(view);\n        }\n        if (++i > ii) {\n          break;\n        }\n      }\n    }\n    while (buf.size > _classPrivateFieldGet(this, _size)) {\n      _classPrivateMethodGet(this, _destroyFirstView, _destroyFirstView2).call(this);\n    }\n  }\n  has(view) {\n    return _classPrivateFieldGet(this, _buf).has(view);\n  }\n  [_Symbol$iterator]() {\n    return _classPrivateFieldGet(this, _buf).keys();\n  }\n}\nexports.PDFPageViewBuffer = PDFPageViewBuffer;\nfunction _destroyFirstView2() {\n  const firstView = _classPrivateFieldGet(this, _buf).keys().next().value;\n  firstView === null || firstView === void 0 ? void 0 : firstView.destroy();\n  _classPrivateFieldGet(this, _buf).delete(firstView);\n}\nvar _buffer = /*#__PURE__*/new WeakMap();\nvar _annotationEditorMode = /*#__PURE__*/new WeakMap();\nvar _annotationEditorUIManager = /*#__PURE__*/new WeakMap();\nvar _annotationMode = /*#__PURE__*/new WeakMap();\nvar _enablePermissions = /*#__PURE__*/new WeakMap();\nvar _previousContainerHeight = /*#__PURE__*/new WeakMap();\nvar _scrollModePageState = /*#__PURE__*/new WeakMap();\nvar _onVisibilityChange = /*#__PURE__*/new WeakMap();\nvar _initializePermissions = /*#__PURE__*/new WeakSet();\nvar _onePageRenderedOrForceFetch = /*#__PURE__*/new WeakSet();\nvar _ensurePageViewVisible = /*#__PURE__*/new WeakSet();\nvar _scrollIntoView = /*#__PURE__*/new WeakSet();\nvar _isSameScale = /*#__PURE__*/new WeakSet();\nvar _resetCurrentPageView = /*#__PURE__*/new WeakSet();\nvar _ensurePdfPageLoaded = /*#__PURE__*/new WeakSet();\nvar _getScrollAhead = /*#__PURE__*/new WeakSet();\nvar _toggleLoadingIconSpinner = /*#__PURE__*/new WeakSet();\nclass PDFViewer {\n  constructor(options) {\n    var _this$container, _this$viewer;\n    _classPrivateMethodInitSpec(this, _toggleLoadingIconSpinner);\n    _classPrivateMethodInitSpec(this, _getScrollAhead);\n    _classPrivateMethodInitSpec(this, _ensurePdfPageLoaded);\n    _classPrivateMethodInitSpec(this, _resetCurrentPageView);\n    _classPrivateMethodInitSpec(this, _isSameScale);\n    _classPrivateMethodInitSpec(this, _scrollIntoView);\n    _classPrivateMethodInitSpec(this, _ensurePageViewVisible);\n    _classPrivateMethodInitSpec(this, _onePageRenderedOrForceFetch);\n    _classPrivateMethodInitSpec(this, _initializePermissions);\n    _classPrivateFieldInitSpec(this, _buffer, {\n      writable: true,\n      value: null\n    });\n    _classPrivateFieldInitSpec(this, _annotationEditorMode, {\n      writable: true,\n      value: _pdfjsLib.AnnotationEditorType.NONE\n    });\n    _classPrivateFieldInitSpec(this, _annotationEditorUIManager, {\n      writable: true,\n      value: null\n    });\n    _classPrivateFieldInitSpec(this, _annotationMode, {\n      writable: true,\n      value: _pdfjsLib.AnnotationMode.ENABLE_FORMS\n    });\n    _classPrivateFieldInitSpec(this, _enablePermissions, {\n      writable: true,\n      value: false\n    });\n    _classPrivateFieldInitSpec(this, _previousContainerHeight, {\n      writable: true,\n      value: 0\n    });\n    _classPrivateFieldInitSpec(this, _scrollModePageState, {\n      writable: true,\n      value: null\n    });\n    _classPrivateFieldInitSpec(this, _onVisibilityChange, {\n      writable: true,\n      value: null\n    });\n    const viewerVersion = '3.1.81';\n    if (_pdfjsLib.version !== viewerVersion) {\n      throw new Error(`The API version \"${_pdfjsLib.version}\" does not match the Viewer version \"${viewerVersion}\".`);\n    }\n    this.container = options.container;\n    this.viewer = options.viewer || options.container.firstElementChild;\n    if (!(((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.tagName.toUpperCase()) === \"DIV\" && ((_this$viewer = this.viewer) === null || _this$viewer === void 0 ? void 0 : _this$viewer.tagName.toUpperCase()) === \"DIV\")) {\n      throw new Error(\"Invalid `container` and/or `viewer` option.\");\n    }\n    if (this.container.offsetParent && getComputedStyle(this.container).position !== \"absolute\") {\n      throw new Error(\"The `container` must be absolutely positioned.\");\n    }\n    this.eventBus = options.eventBus;\n    this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();\n    this.downloadManager = options.downloadManager || null;\n    this.findController = options.findController || null;\n    this._scriptingManager = options.scriptingManager || null;\n    this.removePageBorders = options.removePageBorders || false;\n    this.textLayerMode = options.textLayerMode ?? _ui_utils.TextLayerMode.ENABLE;\n    _classPrivateFieldSet(this, _annotationMode, options.annotationMode ?? _pdfjsLib.AnnotationMode.ENABLE_FORMS);\n    _classPrivateFieldSet(this, _annotationEditorMode, options.annotationEditorMode ?? _pdfjsLib.AnnotationEditorType.NONE);\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n    this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;\n    this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n    this.maxCanvasPixels = options.maxCanvasPixels;\n    this.l10n = options.l10n || _l10n_utils.NullL10n;\n    _classPrivateFieldSet(this, _enablePermissions, options.enablePermissions || false);\n    this.pageColors = options.pageColors || null;\n    if (this.pageColors && !(CSS.supports(\"color\", this.pageColors.background) && CSS.supports(\"color\", this.pageColors.foreground))) {\n      if (this.pageColors.background || this.pageColors.foreground) {\n        console.warn(\"PDFViewer: Ignoring `pageColors`-option, since the browser doesn't support the values used.\");\n      }\n      this.pageColors = null;\n    }\n    this.defaultRenderingQueue = !options.renderingQueue;\n    if (this.defaultRenderingQueue) {\n      this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();\n      this.renderingQueue.setViewer(this);\n    } else {\n      this.renderingQueue = options.renderingQueue;\n    }\n    this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this));\n    this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN;\n    this._onBeforeDraw = this._onAfterDraw = null;\n    this._resetView();\n    if (this.removePageBorders) {\n      this.viewer.classList.add(\"removePageBorders\");\n    }\n    this.updateContainerHeightCss();\n  }\n  get pagesCount() {\n    return this._pages.length;\n  }\n  getPageView(index) {\n    return this._pages[index];\n  }\n  get pageViewsReady() {\n    if (!this._pagesCapability.settled) {\n      return false;\n    }\n    return this._pages.every(function (pageView) {\n      return pageView === null || pageView === void 0 ? void 0 : pageView.pdfPage;\n    });\n  }\n  get renderForms() {\n    return _classPrivateFieldGet(this, _annotationMode) === _pdfjsLib.AnnotationMode.ENABLE_FORMS;\n  }\n  get enableScripting() {\n    return !!this._scriptingManager;\n  }\n  get currentPageNumber() {\n    return this._currentPageNumber;\n  }\n  set currentPageNumber(val) {\n    if (!Number.isInteger(val)) {\n      throw new Error(\"Invalid page number.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!this._setCurrentPageNumber(val, true)) {\n      console.error(`currentPageNumber: \"${val}\" is not a valid page.`);\n    }\n  }\n  _setCurrentPageNumber(val) {\n    var _this$_pageLabels;\n    let resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    if (this._currentPageNumber === val) {\n      if (resetCurrentPageView) {\n        _classPrivateMethodGet(this, _resetCurrentPageView, _resetCurrentPageView2).call(this);\n      }\n      return true;\n    }\n    if (!(0 < val && val <= this.pagesCount)) {\n      return false;\n    }\n    const previous = this._currentPageNumber;\n    this._currentPageNumber = val;\n    this.eventBus.dispatch(\"pagechanging\", {\n      source: this,\n      pageNumber: val,\n      pageLabel: ((_this$_pageLabels = this._pageLabels) === null || _this$_pageLabels === void 0 ? void 0 : _this$_pageLabels[val - 1]) ?? null,\n      previous\n    });\n    if (resetCurrentPageView) {\n      _classPrivateMethodGet(this, _resetCurrentPageView, _resetCurrentPageView2).call(this);\n    }\n    return true;\n  }\n  get currentPageLabel() {\n    var _this$_pageLabels2;\n    return ((_this$_pageLabels2 = this._pageLabels) === null || _this$_pageLabels2 === void 0 ? void 0 : _this$_pageLabels2[this._currentPageNumber - 1]) ?? null;\n  }\n  set currentPageLabel(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let page = val | 0;\n    if (this._pageLabels) {\n      const i = this._pageLabels.indexOf(val);\n      if (i >= 0) {\n        page = i + 1;\n      }\n    }\n    if (!this._setCurrentPageNumber(page, true)) {\n      console.error(`currentPageLabel: \"${val}\" is not a valid page.`);\n    }\n  }\n  get currentScale() {\n    return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;\n  }\n  set currentScale(val) {\n    if (isNaN(val)) {\n      throw new Error(\"Invalid numeric scale.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    this._setScale(val, false);\n  }\n  get currentScaleValue() {\n    return this._currentScaleValue;\n  }\n  set currentScaleValue(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    this._setScale(val, false);\n  }\n  get pagesRotation() {\n    return this._pagesRotation;\n  }\n  set pagesRotation(rotation) {\n    if (!(0, _ui_utils.isValidRotation)(rotation)) {\n      throw new Error(\"Invalid pages rotation angle.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    if (this._pagesRotation === rotation) {\n      return;\n    }\n    this._pagesRotation = rotation;\n    const pageNumber = this._currentPageNumber;\n    const updateArgs = {\n      rotation\n    };\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    if (this._currentScaleValue) {\n      this._setScale(this._currentScaleValue, true);\n    }\n    this.eventBus.dispatch(\"rotationchanging\", {\n      source: this,\n      pagesRotation: rotation,\n      pageNumber\n    });\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n  }\n  get firstPagePromise() {\n    return this.pdfDocument ? this._firstPageCapability.promise : null;\n  }\n  get onePageRendered() {\n    return this.pdfDocument ? this._onePageRenderedCapability.promise : null;\n  }\n  get pagesPromise() {\n    return this.pdfDocument ? this._pagesCapability.promise : null;\n  }\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      var _this$findController, _this$_scriptingManag;\n      this.eventBus.dispatch(\"pagesdestroy\", {\n        source: this\n      });\n      this._cancelRendering();\n      this._resetView();\n      (_this$findController = this.findController) === null || _this$findController === void 0 ? void 0 : _this$findController.setDocument(null);\n      (_this$_scriptingManag = this._scriptingManager) === null || _this$_scriptingManag === void 0 ? void 0 : _this$_scriptingManag.setDocument(null);\n      if (_classPrivateFieldGet(this, _annotationEditorUIManager)) {\n        _classPrivateFieldGet(this, _annotationEditorUIManager).destroy();\n        _classPrivateFieldSet(this, _annotationEditorUIManager, null);\n      }\n    }\n    this.pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const isPureXfa = pdfDocument.isPureXfa;\n    const pagesCount = pdfDocument.numPages;\n    const firstPagePromise = pdfDocument.getPage(1);\n    const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();\n    const permissionsPromise = _classPrivateFieldGet(this, _enablePermissions) ? pdfDocument.getPermissions() : Promise.resolve();\n    if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      console.warn(\"Forcing PAGE-scrolling for performance reasons, given the length of the document.\");\n      const mode = this._scrollMode = _ui_utils.ScrollMode.PAGE;\n      this.eventBus.dispatch(\"scrollmodechanged\", {\n        source: this,\n        mode\n      });\n    }\n    this._pagesCapability.promise.then(() => {\n      this.eventBus.dispatch(\"pagesloaded\", {\n        source: this,\n        pagesCount\n      });\n    }, () => {});\n    this._onBeforeDraw = evt => {\n      const pageView = this._pages[evt.pageNumber - 1];\n      if (!pageView) {\n        return;\n      }\n      _classPrivateFieldGet(this, _buffer).push(pageView);\n    };\n    this.eventBus._on(\"pagerender\", this._onBeforeDraw);\n    this._onAfterDraw = evt => {\n      if (evt.cssTransform || this._onePageRenderedCapability.settled) {\n        return;\n      }\n      this._onePageRenderedCapability.resolve({\n        timestamp: evt.timestamp\n      });\n      this.eventBus._off(\"pagerendered\", this._onAfterDraw);\n      this._onAfterDraw = null;\n      if (_classPrivateFieldGet(this, _onVisibilityChange)) {\n        document.removeEventListener(\"visibilitychange\", _classPrivateFieldGet(this, _onVisibilityChange));\n        _classPrivateFieldSet(this, _onVisibilityChange, null);\n      }\n    };\n    this.eventBus._on(\"pagerendered\", this._onAfterDraw);\n    Promise.all([firstPagePromise, permissionsPromise]).then(_ref => {\n      let [firstPdfPage, permissions] = _ref;\n      if (pdfDocument !== this.pdfDocument) {\n        return;\n      }\n      this._firstPageCapability.resolve(firstPdfPage);\n      this._optionalContentConfigPromise = optionalContentConfigPromise;\n      const {\n        annotationEditorMode,\n        annotationMode,\n        textLayerMode\n      } = _classPrivateMethodGet(this, _initializePermissions, _initializePermissions2).call(this, permissions);\n      if (annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) {\n        const mode = annotationEditorMode;\n        if (isPureXfa) {\n          console.warn(\"Warning: XFA-editing is not implemented.\");\n        } else if (isValidAnnotationEditorMode(mode)) {\n          _classPrivateFieldSet(this, _annotationEditorUIManager, new _pdfjsLib.AnnotationEditorUIManager(this.container, this.eventBus));\n          if (mode !== _pdfjsLib.AnnotationEditorType.NONE) {\n            _classPrivateFieldGet(this, _annotationEditorUIManager).updateMode(mode);\n          }\n        } else {\n          console.error(`Invalid AnnotationEditor mode: ${mode}`);\n        }\n      }\n      const viewerElement = this._scrollMode === _ui_utils.ScrollMode.PAGE ? null : this.viewer;\n      const scale = this.currentScale;\n      const viewport = firstPdfPage.getViewport({\n        scale: scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS\n      });\n      const textLayerFactory = textLayerMode !== _ui_utils.TextLayerMode.DISABLE && !isPureXfa ? this : null;\n      const annotationLayerFactory = annotationMode !== _pdfjsLib.AnnotationMode.DISABLE ? this : null;\n      const xfaLayerFactory = isPureXfa ? this : null;\n      const annotationEditorLayerFactory = _classPrivateFieldGet(this, _annotationEditorUIManager) ? this : null;\n      for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n        const pageView = new _pdf_page_view.PDFPageView({\n          container: viewerElement,\n          eventBus: this.eventBus,\n          id: pageNum,\n          scale,\n          defaultViewport: viewport.clone(),\n          optionalContentConfigPromise,\n          renderingQueue: this.renderingQueue,\n          textLayerFactory,\n          textLayerMode,\n          annotationLayerFactory,\n          annotationMode,\n          xfaLayerFactory,\n          annotationEditorLayerFactory,\n          textHighlighterFactory: this,\n          structTreeLayerFactory: this,\n          imageResourcesPath: this.imageResourcesPath,\n          renderer: this.renderer,\n          useOnlyCssZoom: this.useOnlyCssZoom,\n          maxCanvasPixels: this.maxCanvasPixels,\n          pageColors: this.pageColors,\n          l10n: this.l10n\n        });\n        this._pages.push(pageView);\n      }\n      const firstPageView = this._pages[0];\n      if (firstPageView) {\n        firstPageView.setPdfPage(firstPdfPage);\n        this.linkService.cachePageRef(1, firstPdfPage.ref);\n      }\n      if (this._scrollMode === _ui_utils.ScrollMode.PAGE) {\n        _classPrivateMethodGet(this, _ensurePageViewVisible, _ensurePageViewVisible2).call(this);\n      } else if (this._spreadMode !== _ui_utils.SpreadMode.NONE) {\n        this._updateSpreadMode();\n      }\n      _classPrivateMethodGet(this, _onePageRenderedOrForceFetch, _onePageRenderedOrForceFetch2).call(this).then(async () => {\n        var _this$findController2, _this$_scriptingManag2;\n        (_this$findController2 = this.findController) === null || _this$findController2 === void 0 ? void 0 : _this$findController2.setDocument(pdfDocument);\n        (_this$_scriptingManag2 = this._scriptingManager) === null || _this$_scriptingManag2 === void 0 ? void 0 : _this$_scriptingManag2.setDocument(pdfDocument);\n        if (_classPrivateFieldGet(this, _annotationEditorUIManager)) {\n          this.eventBus.dispatch(\"annotationeditormodechanged\", {\n            source: this,\n            mode: _classPrivateFieldGet(this, _annotationEditorMode)\n          });\n        }\n        if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT) {\n          this._pagesCapability.resolve();\n          return;\n        }\n        let getPagesLeft = pagesCount - 1;\n        if (getPagesLeft <= 0) {\n          this._pagesCapability.resolve();\n          return;\n        }\n        for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {\n          const promise = pdfDocument.getPage(pageNum).then(pdfPage => {\n            const pageView = this._pages[pageNum - 1];\n            if (!pageView.pdfPage) {\n              pageView.setPdfPage(pdfPage);\n            }\n            this.linkService.cachePageRef(pageNum, pdfPage.ref);\n            if (--getPagesLeft === 0) {\n              this._pagesCapability.resolve();\n            }\n          }, reason => {\n            console.error(`Unable to get page ${pageNum} to initialize viewer`, reason);\n            if (--getPagesLeft === 0) {\n              this._pagesCapability.resolve();\n            }\n          });\n          if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) {\n            await promise;\n          }\n        }\n      });\n      this.eventBus.dispatch(\"pagesinit\", {\n        source: this\n      });\n      pdfDocument.getMetadata().then(_ref2 => {\n        let {\n          info\n        } = _ref2;\n        if (pdfDocument !== this.pdfDocument) {\n          return;\n        }\n        if (info.Language) {\n          this.viewer.lang = info.Language;\n        }\n      });\n      if (this.defaultRenderingQueue) {\n        this.update();\n      }\n    }).catch(reason => {\n      console.error(\"Unable to initialize viewer\", reason);\n      this._pagesCapability.reject(reason);\n    });\n  }\n  setPageLabels(labels) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!labels) {\n      this._pageLabels = null;\n    } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {\n      this._pageLabels = null;\n      console.error(`setPageLabels: Invalid page labels.`);\n    } else {\n      this._pageLabels = labels;\n    }\n    for (let i = 0, ii = this._pages.length; i < ii; i++) {\n      var _this$_pageLabels3;\n      this._pages[i].setPageLabel(((_this$_pageLabels3 = this._pageLabels) === null || _this$_pageLabels3 === void 0 ? void 0 : _this$_pageLabels3[i]) ?? null);\n    }\n  }\n  _resetView() {\n    this._pages = [];\n    this._currentPageNumber = 1;\n    this._currentScale = _ui_utils.UNKNOWN_SCALE;\n    this._currentScaleValue = null;\n    this._pageLabels = null;\n    _classPrivateFieldSet(this, _buffer, new PDFPageViewBuffer(DEFAULT_CACHE_SIZE));\n    this._location = null;\n    this._pagesRotation = 0;\n    this._optionalContentConfigPromise = null;\n    this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();\n    this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)();\n    this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)();\n    this._scrollMode = _ui_utils.ScrollMode.VERTICAL;\n    this._previousScrollMode = _ui_utils.ScrollMode.UNKNOWN;\n    this._spreadMode = _ui_utils.SpreadMode.NONE;\n    _classPrivateFieldSet(this, _scrollModePageState, {\n      previousPageNumber: 1,\n      scrollDown: true,\n      pages: []\n    });\n    if (this._onBeforeDraw) {\n      this.eventBus._off(\"pagerender\", this._onBeforeDraw);\n      this._onBeforeDraw = null;\n    }\n    if (this._onAfterDraw) {\n      this.eventBus._off(\"pagerendered\", this._onAfterDraw);\n      this._onAfterDraw = null;\n    }\n    if (_classPrivateFieldGet(this, _onVisibilityChange)) {\n      document.removeEventListener(\"visibilitychange\", _classPrivateFieldGet(this, _onVisibilityChange));\n      _classPrivateFieldSet(this, _onVisibilityChange, null);\n    }\n    this.viewer.textContent = \"\";\n    this._updateScrollMode();\n    this.viewer.removeAttribute(\"lang\");\n    this.viewer.classList.remove(ENABLE_PERMISSIONS_CLASS);\n  }\n  _scrollUpdate() {\n    if (this.pagesCount === 0) {\n      return;\n    }\n    this.update();\n  }\n  _setScaleUpdatePages(newScale, newValue) {\n    let noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    let preset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    this._currentScaleValue = newValue.toString();\n    if (_classPrivateMethodGet(this, _isSameScale, _isSameScale2).call(this, newScale)) {\n      if (preset) {\n        this.eventBus.dispatch(\"scalechanging\", {\n          source: this,\n          scale: newScale,\n          presetValue: newValue\n        });\n      }\n      return;\n    }\n    _ui_utils.docStyle.setProperty(\"--scale-factor\", newScale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS);\n    const updateArgs = {\n      scale: newScale\n    };\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    this._currentScale = newScale;\n    if (!noScroll) {\n      let page = this._currentPageNumber,\n        dest;\n      if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {\n        page = this._location.pageNumber;\n        dest = [null, {\n          name: \"XYZ\"\n        }, this._location.left, this._location.top, null];\n      }\n      this.scrollPageIntoView({\n        pageNumber: page,\n        destArray: dest,\n        allowNegativeOffset: true\n      });\n    }\n    this.eventBus.dispatch(\"scalechanging\", {\n      source: this,\n      scale: newScale,\n      presetValue: preset ? newValue : undefined\n    });\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n    this.updateContainerHeightCss();\n  }\n  get _pageWidthScaleFactor() {\n    if (this._spreadMode !== _ui_utils.SpreadMode.NONE && this._scrollMode !== _ui_utils.ScrollMode.HORIZONTAL) {\n      return 2;\n    }\n    return 1;\n  }\n  _setScale(value) {\n    let noScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    let scale = parseFloat(value);\n    if (scale > 0) {\n      this._setScaleUpdatePages(scale, value, noScroll, false);\n    } else {\n      const currentPage = this._pages[this._currentPageNumber - 1];\n      if (!currentPage) {\n        return;\n      }\n      let hPadding = _ui_utils.SCROLLBAR_PADDING,\n        vPadding = _ui_utils.VERTICAL_PADDING;\n      if (this.isInPresentationMode) {\n        hPadding = vPadding = 4;\n      } else if (this.removePageBorders) {\n        hPadding = vPadding = 0;\n      } else if (this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL) {\n        [hPadding, vPadding] = [vPadding, hPadding];\n      }\n      const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this._pageWidthScaleFactor;\n      const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;\n      switch (value) {\n        case \"page-actual\":\n          scale = 1;\n          break;\n        case \"page-width\":\n          scale = pageWidthScale;\n          break;\n        case \"page-height\":\n          scale = pageHeightScale;\n          break;\n        case \"page-fit\":\n          scale = Math.min(pageWidthScale, pageHeightScale);\n          break;\n        case \"auto\":\n          const horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);\n          scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);\n          break;\n        default:\n          console.error(`_setScale: \"${value}\" is an unknown zoom value.`);\n          return;\n      }\n      this._setScaleUpdatePages(scale, value, noScroll, true);\n    }\n  }\n  pageLabelToPageNumber(label) {\n    if (!this._pageLabels) {\n      return null;\n    }\n    const i = this._pageLabels.indexOf(label);\n    if (i < 0) {\n      return null;\n    }\n    return i + 1;\n  }\n  scrollPageIntoView(_ref3) {\n    let {\n      pageNumber,\n      destArray = null,\n      allowNegativeOffset = false,\n      ignoreDestinationZoom = false\n    } = _ref3;\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];\n    if (!pageView) {\n      console.error(`scrollPageIntoView: \"${pageNumber}\" is not a valid pageNumber parameter.`);\n      return;\n    }\n    if (this.isInPresentationMode || !destArray) {\n      this._setCurrentPageNumber(pageNumber, true);\n      return;\n    }\n    let x = 0,\n      y = 0;\n    let width = 0,\n      height = 0,\n      widthScale,\n      heightScale;\n    const changeOrientation = pageView.rotation % 180 !== 0;\n    const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS;\n    const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS;\n    let scale = 0;\n    switch (destArray[1].name) {\n      case \"XYZ\":\n        x = destArray[2];\n        y = destArray[3];\n        scale = destArray[4];\n        x = x !== null ? x : 0;\n        y = y !== null ? y : pageHeight;\n        break;\n      case \"Fit\":\n      case \"FitB\":\n        scale = \"page-fit\";\n        break;\n      case \"FitH\":\n      case \"FitBH\":\n        y = destArray[2];\n        scale = \"page-width\";\n        if (y === null && this._location) {\n          x = this._location.left;\n          y = this._location.top;\n        } else if (typeof y !== \"number\" || y < 0) {\n          y = pageHeight;\n        }\n        break;\n      case \"FitV\":\n      case \"FitBV\":\n        x = destArray[2];\n        width = pageWidth;\n        height = pageHeight;\n        scale = \"page-height\";\n        break;\n      case \"FitR\":\n        x = destArray[2];\n        y = destArray[3];\n        width = destArray[4] - x;\n        height = destArray[5] - y;\n        const hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;\n        const vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;\n        widthScale = (this.container.clientWidth - hPadding) / width / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS;\n        heightScale = (this.container.clientHeight - vPadding) / height / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS;\n        scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n        break;\n      default:\n        console.error(`scrollPageIntoView: \"${destArray[1].name}\" is not a valid destination type.`);\n        return;\n    }\n    if (!ignoreDestinationZoom) {\n      if (scale && scale !== this._currentScale) {\n        this.currentScaleValue = scale;\n      } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {\n        this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\n      }\n    }\n    if (scale === \"page-fit\" && !destArray[4]) {\n      _classPrivateMethodGet(this, _scrollIntoView, _scrollIntoView2).call(this, pageView);\n      return;\n    }\n    const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];\n    let left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n    let top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n    if (!allowNegativeOffset) {\n      left = Math.max(left, 0);\n      top = Math.max(top, 0);\n    }\n    _classPrivateMethodGet(this, _scrollIntoView, _scrollIntoView2).call(this, pageView, {\n      left,\n      top\n    });\n  }\n  _updateLocation(firstPage) {\n    const currentScale = this._currentScale;\n    const currentScaleValue = this._currentScaleValue;\n    const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;\n    const pageNumber = firstPage.id;\n    const currentPageView = this._pages[pageNumber - 1];\n    const container = this.container;\n    const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);\n    const intLeft = Math.round(topLeft[0]);\n    const intTop = Math.round(topLeft[1]);\n    let pdfOpenParams = `#page=${pageNumber}`;\n    if (!this.isInPresentationMode) {\n      pdfOpenParams += `&zoom=${normalizedScaleValue},${intLeft},${intTop}`;\n    }\n    this._location = {\n      pageNumber,\n      scale: normalizedScaleValue,\n      top: intTop,\n      left: intLeft,\n      rotation: this._pagesRotation,\n      pdfOpenParams\n    };\n  }\n  update() {\n    const visible = this._getVisiblePages();\n    const visiblePages = visible.views,\n      numVisiblePages = visiblePages.length;\n    if (numVisiblePages === 0) {\n      return;\n    }\n    const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);\n    _classPrivateFieldGet(this, _buffer).resize(newCacheSize, visible.ids);\n    this.renderingQueue.renderHighestPriority(visible);\n    const isSimpleLayout = this._spreadMode === _ui_utils.SpreadMode.NONE && (this._scrollMode === _ui_utils.ScrollMode.PAGE || this._scrollMode === _ui_utils.ScrollMode.VERTICAL);\n    const currentId = this._currentPageNumber;\n    let stillFullyVisible = false;\n    for (const page of visiblePages) {\n      if (page.percent < 100) {\n        break;\n      }\n      if (page.id === currentId && isSimpleLayout) {\n        stillFullyVisible = true;\n        break;\n      }\n    }\n    this._setCurrentPageNumber(stillFullyVisible ? currentId : visiblePages[0].id);\n    this._updateLocation(visible.first);\n    this.eventBus.dispatch(\"updateviewarea\", {\n      source: this,\n      location: this._location\n    });\n  }\n  containsElement(element) {\n    return this.container.contains(element);\n  }\n  focus() {\n    this.container.focus();\n  }\n  get _isContainerRtl() {\n    return getComputedStyle(this.container).direction === \"rtl\";\n  }\n  get isInPresentationMode() {\n    return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;\n  }\n  get isChangingPresentationMode() {\n    return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;\n  }\n  get isHorizontalScrollbarEnabled() {\n    return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;\n  }\n  get isVerticalScrollbarEnabled() {\n    return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;\n  }\n  _getVisiblePages() {\n    const views = this._scrollMode === _ui_utils.ScrollMode.PAGE ? _classPrivateFieldGet(this, _scrollModePageState).pages : this._pages,\n      horizontal = this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL,\n      rtl = horizontal && this._isContainerRtl;\n    return (0, _ui_utils.getVisibleElements)({\n      scrollEl: this.container,\n      views,\n      sortByVisibility: true,\n      horizontal,\n      rtl\n    });\n  }\n  isPageVisible(pageNumber) {\n    if (!this.pdfDocument) {\n      return false;\n    }\n    if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {\n      console.error(`isPageVisible: \"${pageNumber}\" is not a valid page.`);\n      return false;\n    }\n    return this._getVisiblePages().ids.has(pageNumber);\n  }\n  isPageCached(pageNumber) {\n    if (!this.pdfDocument) {\n      return false;\n    }\n    if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {\n      console.error(`isPageCached: \"${pageNumber}\" is not a valid page.`);\n      return false;\n    }\n    const pageView = this._pages[pageNumber - 1];\n    return _classPrivateFieldGet(this, _buffer).has(pageView);\n  }\n  cleanup() {\n    for (const pageView of this._pages) {\n      if (pageView.renderingState !== _ui_utils.RenderingStates.FINISHED) {\n        pageView.reset();\n      }\n    }\n  }\n  _cancelRendering() {\n    for (const pageView of this._pages) {\n      pageView.cancelRendering();\n    }\n  }\n  forceRendering(currentlyVisiblePages) {\n    const visiblePages = currentlyVisiblePages || this._getVisiblePages();\n    const scrollAhead = _classPrivateMethodGet(this, _getScrollAhead, _getScrollAhead2).call(this, visiblePages);\n    const preRenderExtra = this._spreadMode !== _ui_utils.SpreadMode.NONE && this._scrollMode !== _ui_utils.ScrollMode.HORIZONTAL;\n    const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead, preRenderExtra);\n    _classPrivateMethodGet(this, _toggleLoadingIconSpinner, _toggleLoadingIconSpinner2).call(this, visiblePages.ids);\n    if (pageView) {\n      _classPrivateMethodGet(this, _ensurePdfPageLoaded, _ensurePdfPageLoaded2).call(this, pageView).then(() => {\n        this.renderingQueue.renderView(pageView);\n      });\n      return true;\n    }\n    return false;\n  }\n  createTextLayerBuilder(_ref4) {\n    let {\n      textLayerDiv,\n      pageIndex,\n      viewport,\n      eventBus,\n      highlighter,\n      accessibilityManager = null\n    } = _ref4;\n    return new _text_layer_builder.TextLayerBuilder({\n      textLayerDiv,\n      eventBus,\n      pageIndex,\n      viewport,\n      highlighter,\n      accessibilityManager\n    });\n  }\n  createTextHighlighter(_ref5) {\n    let {\n      pageIndex,\n      eventBus\n    } = _ref5;\n    return new _text_highlighter.TextHighlighter({\n      eventBus,\n      pageIndex,\n      findController: this.isInPresentationMode ? null : this.findController\n    });\n  }\n  createAnnotationLayerBuilder(_ref6) {\n    var _this$pdfDocument, _this$pdfDocument2, _this$_scriptingManag3, _this$pdfDocument3;\n    let {\n      pageDiv,\n      pdfPage,\n      annotationStorage = (_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage,\n      imageResourcesPath = \"\",\n      renderForms = true,\n      l10n = _l10n_utils.NullL10n,\n      enableScripting = this.enableScripting,\n      hasJSActionsPromise = (_this$pdfDocument2 = this.pdfDocument) === null || _this$pdfDocument2 === void 0 ? void 0 : _this$pdfDocument2.hasJSActions(),\n      mouseState = (_this$_scriptingManag3 = this._scriptingManager) === null || _this$_scriptingManag3 === void 0 ? void 0 : _this$_scriptingManag3.mouseState,\n      fieldObjectsPromise = (_this$pdfDocument3 = this.pdfDocument) === null || _this$pdfDocument3 === void 0 ? void 0 : _this$pdfDocument3.getFieldObjects(),\n      annotationCanvasMap = null,\n      accessibilityManager = null\n    } = _ref6;\n    return new _annotation_layer_builder.AnnotationLayerBuilder({\n      pageDiv,\n      pdfPage,\n      annotationStorage,\n      imageResourcesPath,\n      renderForms,\n      linkService: this.linkService,\n      downloadManager: this.downloadManager,\n      l10n,\n      enableScripting,\n      hasJSActionsPromise,\n      mouseState,\n      fieldObjectsPromise,\n      annotationCanvasMap,\n      accessibilityManager\n    });\n  }\n  createAnnotationEditorLayerBuilder(_ref7) {\n    var _this$pdfDocument4;\n    let {\n      uiManager = _classPrivateFieldGet(this, _annotationEditorUIManager),\n      pageDiv,\n      pdfPage,\n      accessibilityManager = null,\n      l10n,\n      annotationStorage = (_this$pdfDocument4 = this.pdfDocument) === null || _this$pdfDocument4 === void 0 ? void 0 : _this$pdfDocument4.annotationStorage\n    } = _ref7;\n    return new _annotation_editor_layer_builder.AnnotationEditorLayerBuilder({\n      uiManager,\n      pageDiv,\n      pdfPage,\n      annotationStorage,\n      accessibilityManager,\n      l10n\n    });\n  }\n  createXfaLayerBuilder(_ref8) {\n    var _this$pdfDocument5;\n    let {\n      pageDiv,\n      pdfPage,\n      annotationStorage = (_this$pdfDocument5 = this.pdfDocument) === null || _this$pdfDocument5 === void 0 ? void 0 : _this$pdfDocument5.annotationStorage\n    } = _ref8;\n    return new _xfa_layer_builder.XfaLayerBuilder({\n      pageDiv,\n      pdfPage,\n      annotationStorage,\n      linkService: this.linkService\n    });\n  }\n  createStructTreeLayerBuilder(_ref9) {\n    let {\n      pdfPage\n    } = _ref9;\n    return new _struct_tree_layer_builder.StructTreeLayerBuilder({\n      pdfPage\n    });\n  }\n  get hasEqualPageSizes() {\n    const firstPageView = this._pages[0];\n    for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n      const pageView = this._pages[i];\n      if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {\n        return false;\n      }\n    }\n    return true;\n  }\n  getPagesOverview() {\n    return this._pages.map(pageView => {\n      const viewport = pageView.pdfPage.getViewport({\n        scale: 1\n      });\n      if (!this.enablePrintAutoRotate || (0, _ui_utils.isPortraitOrientation)(viewport)) {\n        return {\n          width: viewport.width,\n          height: viewport.height,\n          rotation: viewport.rotation\n        };\n      }\n      return {\n        width: viewport.height,\n        height: viewport.width,\n        rotation: (viewport.rotation - 90) % 360\n      };\n    });\n  }\n  get optionalContentConfigPromise() {\n    if (!this.pdfDocument) {\n      return Promise.resolve(null);\n    }\n    if (!this._optionalContentConfigPromise) {\n      console.error(\"optionalContentConfigPromise: Not initialized yet.\");\n      return this.pdfDocument.getOptionalContentConfig();\n    }\n    return this._optionalContentConfigPromise;\n  }\n  set optionalContentConfigPromise(promise) {\n    if (!(promise instanceof Promise)) {\n      throw new Error(`Invalid optionalContentConfigPromise: ${promise}`);\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!this._optionalContentConfigPromise) {\n      return;\n    }\n    this._optionalContentConfigPromise = promise;\n    const updateArgs = {\n      optionalContentConfigPromise: promise\n    };\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    this.update();\n    this.eventBus.dispatch(\"optionalcontentconfigchanged\", {\n      source: this,\n      promise\n    });\n  }\n  get scrollMode() {\n    return this._scrollMode;\n  }\n  set scrollMode(mode) {\n    if (this._scrollMode === mode) {\n      return;\n    }\n    if (!(0, _ui_utils.isValidScrollMode)(mode)) {\n      throw new Error(`Invalid scroll mode: ${mode}`);\n    }\n    if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      return;\n    }\n    this._previousScrollMode = this._scrollMode;\n    this._scrollMode = mode;\n    this.eventBus.dispatch(\"scrollmodechanged\", {\n      source: this,\n      mode\n    });\n    this._updateScrollMode(this._currentPageNumber);\n  }\n  _updateScrollMode() {\n    let pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    const scrollMode = this._scrollMode,\n      viewer = this.viewer;\n    viewer.classList.toggle(\"scrollHorizontal\", scrollMode === _ui_utils.ScrollMode.HORIZONTAL);\n    viewer.classList.toggle(\"scrollWrapped\", scrollMode === _ui_utils.ScrollMode.WRAPPED);\n    if (!this.pdfDocument || !pageNumber) {\n      return;\n    }\n    if (scrollMode === _ui_utils.ScrollMode.PAGE) {\n      _classPrivateMethodGet(this, _ensurePageViewVisible, _ensurePageViewVisible2).call(this);\n    } else if (this._previousScrollMode === _ui_utils.ScrollMode.PAGE) {\n      this._updateSpreadMode();\n    }\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this._setScale(this._currentScaleValue, true);\n    }\n    this._setCurrentPageNumber(pageNumber, true);\n    this.update();\n  }\n  get spreadMode() {\n    return this._spreadMode;\n  }\n  set spreadMode(mode) {\n    if (this._spreadMode === mode) {\n      return;\n    }\n    if (!(0, _ui_utils.isValidSpreadMode)(mode)) {\n      throw new Error(`Invalid spread mode: ${mode}`);\n    }\n    this._spreadMode = mode;\n    this.eventBus.dispatch(\"spreadmodechanged\", {\n      source: this,\n      mode\n    });\n    this._updateSpreadMode(this._currentPageNumber);\n  }\n  _updateSpreadMode() {\n    let pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    if (!this.pdfDocument) {\n      return;\n    }\n    const viewer = this.viewer,\n      pages = this._pages;\n    if (this._scrollMode === _ui_utils.ScrollMode.PAGE) {\n      _classPrivateMethodGet(this, _ensurePageViewVisible, _ensurePageViewVisible2).call(this);\n    } else {\n      viewer.textContent = \"\";\n      if (this._spreadMode === _ui_utils.SpreadMode.NONE) {\n        for (const pageView of this._pages) {\n          viewer.append(pageView.div);\n        }\n      } else {\n        const parity = this._spreadMode - 1;\n        let spread = null;\n        for (let i = 0, ii = pages.length; i < ii; ++i) {\n          if (spread === null) {\n            spread = document.createElement(\"div\");\n            spread.className = \"spread\";\n            viewer.append(spread);\n          } else if (i % 2 === parity) {\n            spread = spread.cloneNode(false);\n            viewer.append(spread);\n          }\n          spread.append(pages[i].div);\n        }\n      }\n    }\n    if (!pageNumber) {\n      return;\n    }\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this._setScale(this._currentScaleValue, true);\n    }\n    this._setCurrentPageNumber(pageNumber, true);\n    this.update();\n  }\n  _getPageAdvance(currentPageNumber) {\n    let previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    switch (this._scrollMode) {\n      case _ui_utils.ScrollMode.WRAPPED:\n        {\n          const {\n              views\n            } = this._getVisiblePages(),\n            pageLayout = new Map();\n          for (const {\n            id,\n            y,\n            percent,\n            widthPercent\n          } of views) {\n            if (percent === 0 || widthPercent < 100) {\n              continue;\n            }\n            let yArray = pageLayout.get(y);\n            if (!yArray) {\n              pageLayout.set(y, yArray || (yArray = []));\n            }\n            yArray.push(id);\n          }\n          for (const yArray of pageLayout.values()) {\n            const currentIndex = yArray.indexOf(currentPageNumber);\n            if (currentIndex === -1) {\n              continue;\n            }\n            const numPages = yArray.length;\n            if (numPages === 1) {\n              break;\n            }\n            if (previous) {\n              for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {\n                const currentId = yArray[i],\n                  expectedId = yArray[i + 1] - 1;\n                if (currentId < expectedId) {\n                  return currentPageNumber - expectedId;\n                }\n              }\n            } else {\n              for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {\n                const currentId = yArray[i],\n                  expectedId = yArray[i - 1] + 1;\n                if (currentId > expectedId) {\n                  return expectedId - currentPageNumber;\n                }\n              }\n            }\n            if (previous) {\n              const firstId = yArray[0];\n              if (firstId < currentPageNumber) {\n                return currentPageNumber - firstId + 1;\n              }\n            } else {\n              const lastId = yArray[numPages - 1];\n              if (lastId > currentPageNumber) {\n                return lastId - currentPageNumber + 1;\n              }\n            }\n            break;\n          }\n          break;\n        }\n      case _ui_utils.ScrollMode.HORIZONTAL:\n        {\n          break;\n        }\n      case _ui_utils.ScrollMode.PAGE:\n      case _ui_utils.ScrollMode.VERTICAL:\n        {\n          if (this._spreadMode === _ui_utils.SpreadMode.NONE) {\n            break;\n          }\n          const parity = this._spreadMode - 1;\n          if (previous && currentPageNumber % 2 !== parity) {\n            break;\n          } else if (!previous && currentPageNumber % 2 === parity) {\n            break;\n          }\n          const {\n              views\n            } = this._getVisiblePages(),\n            expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;\n          for (const {\n            id,\n            percent,\n            widthPercent\n          } of views) {\n            if (id !== expectedId) {\n              continue;\n            }\n            if (percent > 0 && widthPercent === 100) {\n              return 2;\n            }\n            break;\n          }\n          break;\n        }\n    }\n    return 1;\n  }\n  nextPage() {\n    const currentPageNumber = this._currentPageNumber,\n      pagesCount = this.pagesCount;\n    if (currentPageNumber >= pagesCount) {\n      return false;\n    }\n    const advance = this._getPageAdvance(currentPageNumber, false) || 1;\n    this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);\n    return true;\n  }\n  previousPage() {\n    const currentPageNumber = this._currentPageNumber;\n    if (currentPageNumber <= 1) {\n      return false;\n    }\n    const advance = this._getPageAdvance(currentPageNumber, true) || 1;\n    this.currentPageNumber = Math.max(currentPageNumber - advance, 1);\n    return true;\n  }\n  increaseScale() {\n    let steps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    let newScale = this._currentScale;\n    do {\n      newScale = (newScale * _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2);\n      newScale = Math.ceil(newScale * 10) / 10;\n      newScale = Math.min(_ui_utils.MAX_SCALE, newScale);\n    } while (--steps > 0 && newScale < _ui_utils.MAX_SCALE);\n    this.currentScaleValue = newScale;\n  }\n  decreaseScale() {\n    let steps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    let newScale = this._currentScale;\n    do {\n      newScale = (newScale / _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2);\n      newScale = Math.floor(newScale * 10) / 10;\n      newScale = Math.max(_ui_utils.MIN_SCALE, newScale);\n    } while (--steps > 0 && newScale > _ui_utils.MIN_SCALE);\n    this.currentScaleValue = newScale;\n  }\n  updateContainerHeightCss() {\n    const height = this.container.clientHeight;\n    if (height !== _classPrivateFieldGet(this, _previousContainerHeight)) {\n      _classPrivateFieldSet(this, _previousContainerHeight, height);\n      _ui_utils.docStyle.setProperty(\"--viewer-container-height\", `${height}px`);\n    }\n  }\n  get annotationEditorMode() {\n    return _classPrivateFieldGet(this, _annotationEditorUIManager) ? _classPrivateFieldGet(this, _annotationEditorMode) : _pdfjsLib.AnnotationEditorType.DISABLE;\n  }\n  set annotationEditorMode(mode) {\n    if (!_classPrivateFieldGet(this, _annotationEditorUIManager)) {\n      throw new Error(`The AnnotationEditor is not enabled.`);\n    }\n    if (_classPrivateFieldGet(this, _annotationEditorMode) === mode) {\n      return;\n    }\n    if (!isValidAnnotationEditorMode(mode)) {\n      throw new Error(`Invalid AnnotationEditor mode: ${mode}`);\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    _classPrivateFieldSet(this, _annotationEditorMode, mode);\n    this.eventBus.dispatch(\"annotationeditormodechanged\", {\n      source: this,\n      mode\n    });\n    _classPrivateFieldGet(this, _annotationEditorUIManager).updateMode(mode);\n  }\n  set annotationEditorParams(_ref10) {\n    let {\n      type,\n      value\n    } = _ref10;\n    if (!_classPrivateFieldGet(this, _annotationEditorUIManager)) {\n      throw new Error(`The AnnotationEditor is not enabled.`);\n    }\n    _classPrivateFieldGet(this, _annotationEditorUIManager).updateParams(type, value);\n  }\n  refresh() {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const updateArgs = {};\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    this.update();\n  }\n}\nexports.PDFViewer = PDFViewer;\nfunction _initializePermissions2(permissions) {\n  const params = {\n    annotationEditorMode: _classPrivateFieldGet(this, _annotationEditorMode),\n    annotationMode: _classPrivateFieldGet(this, _annotationMode),\n    textLayerMode: this.textLayerMode\n  };\n  if (!permissions) {\n    return params;\n  }\n  if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) {\n    this.viewer.classList.add(ENABLE_PERMISSIONS_CLASS);\n  }\n  if (!permissions.includes(_pdfjsLib.PermissionFlag.MODIFY_CONTENTS)) {\n    params.annotationEditorMode = _pdfjsLib.AnnotationEditorType.DISABLE;\n  }\n  if (!permissions.includes(_pdfjsLib.PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(_pdfjsLib.PermissionFlag.FILL_INTERACTIVE_FORMS) && _classPrivateFieldGet(this, _annotationMode) === _pdfjsLib.AnnotationMode.ENABLE_FORMS) {\n    params.annotationMode = _pdfjsLib.AnnotationMode.ENABLE;\n  }\n  return params;\n}\nfunction _onePageRenderedOrForceFetch2() {\n  if (document.visibilityState === \"hidden\" || !this.container.offsetParent || this._getVisiblePages().views.length === 0) {\n    return Promise.resolve();\n  }\n  const visibilityChangePromise = new Promise(resolve => {\n    _classPrivateFieldSet(this, _onVisibilityChange, () => {\n      if (document.visibilityState !== \"hidden\") {\n        return;\n      }\n      resolve();\n      document.removeEventListener(\"visibilitychange\", _classPrivateFieldGet(this, _onVisibilityChange));\n      _classPrivateFieldSet(this, _onVisibilityChange, null);\n    });\n    document.addEventListener(\"visibilitychange\", _classPrivateFieldGet(this, _onVisibilityChange));\n  });\n  return Promise.race([this._onePageRenderedCapability.promise, visibilityChangePromise]);\n}\nfunction _ensurePageViewVisible2() {\n  if (this._scrollMode !== _ui_utils.ScrollMode.PAGE) {\n    throw new Error(\"#ensurePageViewVisible: Invalid scrollMode value.\");\n  }\n  const pageNumber = this._currentPageNumber,\n    state = _classPrivateFieldGet(this, _scrollModePageState),\n    viewer = this.viewer;\n  viewer.textContent = \"\";\n  state.pages.length = 0;\n  if (this._spreadMode === _ui_utils.SpreadMode.NONE && !this.isInPresentationMode) {\n    const pageView = this._pages[pageNumber - 1];\n    viewer.append(pageView.div);\n    state.pages.push(pageView);\n  } else {\n    const pageIndexSet = new Set(),\n      parity = this._spreadMode - 1;\n    if (parity === -1) {\n      pageIndexSet.add(pageNumber - 1);\n    } else if (pageNumber % 2 !== parity) {\n      pageIndexSet.add(pageNumber - 1);\n      pageIndexSet.add(pageNumber);\n    } else {\n      pageIndexSet.add(pageNumber - 2);\n      pageIndexSet.add(pageNumber - 1);\n    }\n    const spread = document.createElement(\"div\");\n    spread.className = \"spread\";\n    if (this.isInPresentationMode) {\n      const dummyPage = document.createElement(\"div\");\n      dummyPage.className = \"dummyPage\";\n      spread.append(dummyPage);\n    }\n    for (const i of pageIndexSet) {\n      const pageView = this._pages[i];\n      if (!pageView) {\n        continue;\n      }\n      spread.append(pageView.div);\n      state.pages.push(pageView);\n    }\n    viewer.append(spread);\n  }\n  state.scrollDown = pageNumber >= state.previousPageNumber;\n  state.previousPageNumber = pageNumber;\n}\nfunction _scrollIntoView2(pageView) {\n  let pageSpot = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  const {\n    div,\n    id\n  } = pageView;\n  if (this._currentPageNumber !== id) {\n    this._setCurrentPageNumber(id);\n  }\n  if (this._scrollMode === _ui_utils.ScrollMode.PAGE) {\n    _classPrivateMethodGet(this, _ensurePageViewVisible, _ensurePageViewVisible2).call(this);\n    this.update();\n  }\n  if (!pageSpot && !this.isInPresentationMode) {\n    const left = div.offsetLeft + div.clientLeft,\n      right = left + div.clientWidth;\n    const {\n      scrollLeft,\n      clientWidth\n    } = this.container;\n    if (this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL || left < scrollLeft || right > scrollLeft + clientWidth) {\n      pageSpot = {\n        left: 0,\n        top: 0\n      };\n    }\n  }\n  (0, _ui_utils.scrollIntoView)(div, pageSpot);\n  if (!this._currentScaleValue && this._location) {\n    this._location = null;\n  }\n}\nfunction _isSameScale2(newScale) {\n  return newScale === this._currentScale || Math.abs(newScale - this._currentScale) < 1e-15;\n}\nfunction _resetCurrentPageView2() {\n  const pageView = this._pages[this._currentPageNumber - 1];\n  if (this.isInPresentationMode) {\n    this._setScale(this._currentScaleValue, true);\n  }\n  _classPrivateMethodGet(this, _scrollIntoView, _scrollIntoView2).call(this, pageView);\n}\nasync function _ensurePdfPageLoaded2(pageView) {\n  if (pageView.pdfPage) {\n    return pageView.pdfPage;\n  }\n  try {\n    var _this$linkService$_ca, _this$linkService;\n    const pdfPage = await this.pdfDocument.getPage(pageView.id);\n    if (!pageView.pdfPage) {\n      pageView.setPdfPage(pdfPage);\n    }\n    if (!((_this$linkService$_ca = (_this$linkService = this.linkService)._cachedPageNumber) !== null && _this$linkService$_ca !== void 0 && _this$linkService$_ca.call(_this$linkService, pdfPage.ref))) {\n      this.linkService.cachePageRef(pageView.id, pdfPage.ref);\n    }\n    return pdfPage;\n  } catch (reason) {\n    console.error(\"Unable to get page for page view\", reason);\n    return null;\n  }\n}\nfunction _getScrollAhead2(visible) {\n  var _visible$first, _visible$last;\n  if (((_visible$first = visible.first) === null || _visible$first === void 0 ? void 0 : _visible$first.id) === 1) {\n    return true;\n  } else if (((_visible$last = visible.last) === null || _visible$last === void 0 ? void 0 : _visible$last.id) === this.pagesCount) {\n    return false;\n  }\n  switch (this._scrollMode) {\n    case _ui_utils.ScrollMode.PAGE:\n      return _classPrivateFieldGet(this, _scrollModePageState).scrollDown;\n    case _ui_utils.ScrollMode.HORIZONTAL:\n      return this.scroll.right;\n  }\n  return this.scroll.down;\n}\nfunction _toggleLoadingIconSpinner2(visibleIds) {\n  for (const id of visibleIds) {\n    const pageView = this._pages[id - 1];\n    pageView === null || pageView === void 0 ? void 0 : pageView.toggleLoadingIconSpinner(true);\n  }\n  for (const pageView of _classPrivateFieldGet(this, _buffer)) {\n    if (visibleIds.has(pageView.id)) {\n      continue;\n    }\n    pageView.toggleLoadingIconSpinner(false);\n  }\n}\n\n/***/ }),\n/* 30 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.AnnotationEditorLayerBuilder = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _l10n_utils = __webpack_require__(31);\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nvar _uiManager = /*#__PURE__*/new WeakMap();\nclass AnnotationEditorLayerBuilder {\n  constructor(options) {\n    _classPrivateFieldInitSpec(this, _uiManager, {\n      writable: true,\n      value: void 0\n    });\n    this.pageDiv = options.pageDiv;\n    this.pdfPage = options.pdfPage;\n    this.annotationStorage = options.annotationStorage || null;\n    this.accessibilityManager = options.accessibilityManager;\n    this.l10n = options.l10n || _l10n_utils.NullL10n;\n    this.annotationEditorLayer = null;\n    this.div = null;\n    this._cancelled = false;\n    _classPrivateFieldSet(this, _uiManager, options.uiManager);\n  }\n  async render(viewport) {\n    let intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"display\";\n    if (intent !== \"display\") {\n      return;\n    }\n    if (this._cancelled) {\n      return;\n    }\n    const clonedViewport = viewport.clone({\n      dontFlip: true\n    });\n    if (this.div) {\n      this.annotationEditorLayer.update({\n        viewport: clonedViewport\n      });\n      this.show();\n      return;\n    }\n    this.div = document.createElement(\"div\");\n    this.div.className = \"annotationEditorLayer\";\n    this.div.tabIndex = 0;\n    this.pageDiv.append(this.div);\n    this.annotationEditorLayer = new _pdfjsLib.AnnotationEditorLayer({\n      uiManager: _classPrivateFieldGet(this, _uiManager),\n      div: this.div,\n      annotationStorage: this.annotationStorage,\n      accessibilityManager: this.accessibilityManager,\n      pageIndex: this.pdfPage._pageIndex,\n      l10n: this.l10n,\n      viewport: clonedViewport\n    });\n    const parameters = {\n      viewport: clonedViewport,\n      div: this.div,\n      annotations: null,\n      intent\n    };\n    this.annotationEditorLayer.render(parameters);\n  }\n  cancel() {\n    this._cancelled = true;\n    this.destroy();\n  }\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n  show() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = false;\n  }\n  destroy() {\n    if (!this.div) {\n      return;\n    }\n    this.pageDiv = null;\n    this.annotationEditorLayer.destroy();\n    this.div.remove();\n  }\n}\nexports.AnnotationEditorLayerBuilder = AnnotationEditorLayerBuilder;\n\n/***/ }),\n/* 31 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.NullL10n = void 0;\nexports.fixupLangCode = fixupLangCode;\nexports.getL10nFallback = getL10nFallback;\nconst DEFAULT_L10N_STRINGS = {\n  of_pages: \"of {{pagesCount}}\",\n  page_of_pages: \"({{pageNumber}} of {{pagesCount}})\",\n  document_properties_kb: \"{{size_kb}} KB ({{size_b}} bytes)\",\n  document_properties_mb: \"{{size_mb}} MB ({{size_b}} bytes)\",\n  document_properties_date_string: \"{{date}}, {{time}}\",\n  document_properties_page_size_unit_inches: \"in\",\n  document_properties_page_size_unit_millimeters: \"mm\",\n  document_properties_page_size_orientation_portrait: \"portrait\",\n  document_properties_page_size_orientation_landscape: \"landscape\",\n  document_properties_page_size_name_a3: \"A3\",\n  document_properties_page_size_name_a4: \"A4\",\n  document_properties_page_size_name_letter: \"Letter\",\n  document_properties_page_size_name_legal: \"Legal\",\n  document_properties_page_size_dimension_string: \"{{width}} × {{height}} {{unit}} ({{orientation}})\",\n  document_properties_page_size_dimension_name_string: \"{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\",\n  document_properties_linearized_yes: \"Yes\",\n  document_properties_linearized_no: \"No\",\n  additional_layers: \"Additional Layers\",\n  page_landmark: \"Page {{page}}\",\n  thumb_page_title: \"Page {{page}}\",\n  thumb_page_canvas: \"Thumbnail of Page {{page}}\",\n  find_reached_top: \"Reached top of document, continued from bottom\",\n  find_reached_bottom: \"Reached end of document, continued from top\",\n  \"find_match_count[one]\": \"{{current}} of {{total}} match\",\n  \"find_match_count[other]\": \"{{current}} of {{total}} matches\",\n  \"find_match_count_limit[one]\": \"More than {{limit}} match\",\n  \"find_match_count_limit[other]\": \"More than {{limit}} matches\",\n  find_not_found: \"Phrase not found\",\n  page_scale_width: \"Page Width\",\n  page_scale_fit: \"Page Fit\",\n  page_scale_auto: \"Automatic Zoom\",\n  page_scale_actual: \"Actual Size\",\n  page_scale_percent: \"{{scale}}%\",\n  loading: \"Loading…\",\n  loading_error: \"An error occurred while loading the PDF.\",\n  invalid_file_error: \"Invalid or corrupted PDF file.\",\n  missing_file_error: \"Missing PDF file.\",\n  unexpected_response_error: \"Unexpected server response.\",\n  rendering_error: \"An error occurred while rendering the page.\",\n  printing_not_supported: \"Warning: Printing is not fully supported by this browser.\",\n  printing_not_ready: \"Warning: The PDF is not fully loaded for printing.\",\n  web_fonts_disabled: \"Web fonts are disabled: unable to use embedded PDF fonts.\",\n  free_text2_default_content: \"Start typing…\",\n  editor_free_text2_aria_label: \"Text Editor\",\n  editor_ink2_aria_label: \"Draw Editor\",\n  editor_ink_canvas_aria_label: \"User-created image\"\n};\n{\n  DEFAULT_L10N_STRINGS.print_progress_percent = \"{{progress}}%\";\n}\nfunction getL10nFallback(key, args) {\n  switch (key) {\n    case \"find_match_count\":\n      key = `find_match_count[${args.total === 1 ? \"one\" : \"other\"}]`;\n      break;\n    case \"find_match_count_limit\":\n      key = `find_match_count_limit[${args.limit === 1 ? \"one\" : \"other\"}]`;\n      break;\n  }\n  return DEFAULT_L10N_STRINGS[key] || \"\";\n}\nconst PARTIAL_LANG_CODES = {\n  en: \"en-US\",\n  es: \"es-ES\",\n  fy: \"fy-NL\",\n  ga: \"ga-IE\",\n  gu: \"gu-IN\",\n  hi: \"hi-IN\",\n  hy: \"hy-AM\",\n  nb: \"nb-NO\",\n  ne: \"ne-NP\",\n  nn: \"nn-NO\",\n  pa: \"pa-IN\",\n  pt: \"pt-PT\",\n  sv: \"sv-SE\",\n  zh: \"zh-CN\"\n};\nfunction fixupLangCode(langCode) {\n  return PARTIAL_LANG_CODES[langCode === null || langCode === void 0 ? void 0 : langCode.toLowerCase()] || langCode;\n}\nfunction formatL10nValue(text, args) {\n  if (!args) {\n    return text;\n  }\n  return text.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (all, name) => {\n    return name in args ? args[name] : \"{{\" + name + \"}}\";\n  });\n}\nconst NullL10n = {\n  async getLanguage() {\n    return \"en-us\";\n  },\n  async getDirection() {\n    return \"ltr\";\n  },\n  async get(key) {\n    let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    let fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getL10nFallback(key, args);\n    return formatL10nValue(fallback, args);\n  },\n  async translate(element) {}\n};\nexports.NullL10n = NullL10n;\n\n/***/ }),\n/* 32 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.AnnotationLayerBuilder = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _l10n_utils = __webpack_require__(31);\nvar _ui_utils = __webpack_require__(1);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar _onPresentationModeChanged = /*#__PURE__*/new WeakMap();\nvar _updatePresentationModeState = /*#__PURE__*/new WeakSet();\nclass AnnotationLayerBuilder {\n  constructor(_ref) {\n    let {\n      pageDiv,\n      pdfPage,\n      linkService,\n      downloadManager,\n      annotationStorage = null,\n      imageResourcesPath = \"\",\n      renderForms = true,\n      l10n = _l10n_utils.NullL10n,\n      enableScripting = false,\n      hasJSActionsPromise = null,\n      fieldObjectsPromise = null,\n      mouseState = null,\n      annotationCanvasMap = null,\n      accessibilityManager = null\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _updatePresentationModeState);\n    _classPrivateFieldInitSpec(this, _onPresentationModeChanged, {\n      writable: true,\n      value: null\n    });\n    this.pageDiv = pageDiv;\n    this.pdfPage = pdfPage;\n    this.linkService = linkService;\n    this.downloadManager = downloadManager;\n    this.imageResourcesPath = imageResourcesPath;\n    this.renderForms = renderForms;\n    this.l10n = l10n;\n    this.annotationStorage = annotationStorage;\n    this.enableScripting = enableScripting;\n    this._hasJSActionsPromise = hasJSActionsPromise;\n    this._fieldObjectsPromise = fieldObjectsPromise;\n    this._mouseState = mouseState;\n    this._annotationCanvasMap = annotationCanvasMap;\n    this._accessibilityManager = accessibilityManager;\n    this.div = null;\n    this._cancelled = false;\n    this._eventBus = linkService.eventBus;\n  }\n  async render(viewport) {\n    let intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"display\";\n    const [annotations, hasJSActions = false, fieldObjects = null] = await Promise.all([this.pdfPage.getAnnotations({\n      intent\n    }), this._hasJSActionsPromise, this._fieldObjectsPromise]);\n    if (this._cancelled || annotations.length === 0) {\n      return;\n    }\n    const parameters = {\n      viewport: viewport.clone({\n        dontFlip: true\n      }),\n      div: this.div,\n      annotations,\n      page: this.pdfPage,\n      imageResourcesPath: this.imageResourcesPath,\n      renderForms: this.renderForms,\n      linkService: this.linkService,\n      downloadManager: this.downloadManager,\n      annotationStorage: this.annotationStorage,\n      enableScripting: this.enableScripting,\n      hasJSActions,\n      fieldObjects,\n      mouseState: this._mouseState,\n      annotationCanvasMap: this._annotationCanvasMap,\n      accessibilityManager: this._accessibilityManager\n    };\n    if (this.div) {\n      _pdfjsLib.AnnotationLayer.update(parameters);\n    } else {\n      this.div = document.createElement(\"div\");\n      this.div.className = \"annotationLayer\";\n      this.pageDiv.append(this.div);\n      parameters.div = this.div;\n      _pdfjsLib.AnnotationLayer.render(parameters);\n      this.l10n.translate(this.div);\n      if (this.linkService.isInPresentationMode) {\n        _classPrivateMethodGet(this, _updatePresentationModeState, _updatePresentationModeState2).call(this, _ui_utils.PresentationModeState.FULLSCREEN);\n      }\n      if (!_classPrivateFieldGet(this, _onPresentationModeChanged)) {\n        var _this$_eventBus;\n        _classPrivateFieldSet(this, _onPresentationModeChanged, evt => {\n          _classPrivateMethodGet(this, _updatePresentationModeState, _updatePresentationModeState2).call(this, evt.state);\n        });\n        (_this$_eventBus = this._eventBus) === null || _this$_eventBus === void 0 ? void 0 : _this$_eventBus._on(\"presentationmodechanged\", _classPrivateFieldGet(this, _onPresentationModeChanged));\n      }\n    }\n  }\n  cancel() {\n    this._cancelled = true;\n    if (_classPrivateFieldGet(this, _onPresentationModeChanged)) {\n      var _this$_eventBus2;\n      (_this$_eventBus2 = this._eventBus) === null || _this$_eventBus2 === void 0 ? void 0 : _this$_eventBus2._off(\"presentationmodechanged\", _classPrivateFieldGet(this, _onPresentationModeChanged));\n      _classPrivateFieldSet(this, _onPresentationModeChanged, null);\n    }\n  }\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n}\nexports.AnnotationLayerBuilder = AnnotationLayerBuilder;\nfunction _updatePresentationModeState2(state) {\n  if (!this.div) {\n    return;\n  }\n  let disableFormElements = false;\n  switch (state) {\n    case _ui_utils.PresentationModeState.FULLSCREEN:\n      disableFormElements = true;\n      break;\n    case _ui_utils.PresentationModeState.NORMAL:\n      break;\n    default:\n      return;\n  }\n  for (const section of this.div.childNodes) {\n    if (section.hasAttribute(\"data-internal-link\")) {\n      continue;\n    }\n    section.inert = disableFormElements;\n  }\n}\n\n/***/ }),\n/* 33 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFPageView = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nvar _ui_utils = __webpack_require__(1);\nvar _app_options = __webpack_require__(2);\nvar _l10n_utils = __webpack_require__(31);\nvar _text_accessibility = __webpack_require__(34);\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nconst MAX_CANVAS_PIXELS = _app_options.compatibilityParams.maxCanvasPixels || 16777216;\nvar _annotationMode = /*#__PURE__*/new WeakMap();\nvar _useThumbnailCanvas = /*#__PURE__*/new WeakMap();\nclass PDFPageView {\n  constructor(options) {\n    var _options$textHighligh, _this$renderingQueue;\n    _classPrivateFieldInitSpec(this, _annotationMode, {\n      writable: true,\n      value: _pdfjsLib.AnnotationMode.ENABLE_FORMS\n    });\n    _classPrivateFieldInitSpec(this, _useThumbnailCanvas, {\n      writable: true,\n      value: {\n        initialOptionalContent: true,\n        regularAnnotations: true\n      }\n    });\n    const container = options.container;\n    const defaultViewport = options.defaultViewport;\n    this.id = options.id;\n    this.renderingId = \"page\" + this.id;\n    this.pdfPage = null;\n    this.pageLabel = null;\n    this.rotation = 0;\n    this.scale = options.scale || _ui_utils.DEFAULT_SCALE;\n    this.viewport = defaultViewport;\n    this.pdfPageRotate = defaultViewport.rotation;\n    this._optionalContentConfigPromise = options.optionalContentConfigPromise || null;\n    this.hasRestrictedScaling = false;\n    this.textLayerMode = options.textLayerMode ?? _ui_utils.TextLayerMode.ENABLE;\n    _classPrivateFieldSet(this, _annotationMode, options.annotationMode ?? _pdfjsLib.AnnotationMode.ENABLE_FORMS);\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n    this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;\n    this.pageColors = options.pageColors || null;\n    this.eventBus = options.eventBus;\n    this.renderingQueue = options.renderingQueue;\n    this.textLayerFactory = options.textLayerFactory;\n    this.annotationLayerFactory = options.annotationLayerFactory;\n    this.annotationEditorLayerFactory = options.annotationEditorLayerFactory;\n    this.xfaLayerFactory = options.xfaLayerFactory;\n    this.textHighlighter = (_options$textHighligh = options.textHighlighterFactory) === null || _options$textHighligh === void 0 ? void 0 : _options$textHighligh.createTextHighlighter({\n      pageIndex: this.id - 1,\n      eventBus: this.eventBus\n    });\n    this.structTreeLayerFactory = options.structTreeLayerFactory;\n    this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;\n    this.l10n = options.l10n || _l10n_utils.NullL10n;\n    this.paintTask = null;\n    this.paintedViewportMap = new WeakMap();\n    this.renderingState = _ui_utils.RenderingStates.INITIAL;\n    this.resume = null;\n    this._renderError = null;\n    this._isStandalone = !((_this$renderingQueue = this.renderingQueue) !== null && _this$renderingQueue !== void 0 && _this$renderingQueue.hasViewer());\n    this._annotationCanvasMap = null;\n    this.annotationLayer = null;\n    this.annotationEditorLayer = null;\n    this.textLayer = null;\n    this.zoomLayer = null;\n    this.xfaLayer = null;\n    this.structTreeLayer = null;\n    const div = document.createElement(\"div\");\n    div.className = \"page\";\n    div.style.width = Math.floor(this.viewport.width) + \"px\";\n    div.style.height = Math.floor(this.viewport.height) + \"px\";\n    div.setAttribute(\"data-page-number\", this.id);\n    div.setAttribute(\"role\", \"region\");\n    this.l10n.get(\"page_landmark\", {\n      page: this.id\n    }).then(msg => {\n      div.setAttribute(\"aria-label\", msg);\n    });\n    this.div = div;\n    container === null || container === void 0 ? void 0 : container.append(div);\n    if (this._isStandalone) {\n      const {\n        optionalContentConfigPromise\n      } = options;\n      if (optionalContentConfigPromise) {\n        optionalContentConfigPromise.then(optionalContentConfig => {\n          if (optionalContentConfigPromise !== this._optionalContentConfigPromise) {\n            return;\n          }\n          _classPrivateFieldGet(this, _useThumbnailCanvas).initialOptionalContent = optionalContentConfig.hasInitialVisibility;\n        });\n      }\n    }\n  }\n  setPdfPage(pdfPage) {\n    this.pdfPage = pdfPage;\n    this.pdfPageRotate = pdfPage.rotate;\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = pdfPage.getViewport({\n      scale: this.scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: totalRotation\n    });\n    this.reset();\n  }\n  destroy() {\n    var _this$pdfPage;\n    this.reset();\n    (_this$pdfPage = this.pdfPage) === null || _this$pdfPage === void 0 ? void 0 : _this$pdfPage.cleanup();\n  }\n  async _renderAnnotationLayer() {\n    let error = null;\n    try {\n      await this.annotationLayer.render(this.viewport, \"display\");\n    } catch (ex) {\n      console.error(`_renderAnnotationLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      this.eventBus.dispatch(\"annotationlayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error\n      });\n    }\n  }\n  async _renderAnnotationEditorLayer() {\n    let error = null;\n    try {\n      await this.annotationEditorLayer.render(this.viewport, \"display\");\n    } catch (ex) {\n      console.error(`_renderAnnotationEditorLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      this.eventBus.dispatch(\"annotationeditorlayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error\n      });\n    }\n  }\n  async _renderXfaLayer() {\n    let error = null;\n    try {\n      const result = await this.xfaLayer.render(this.viewport, \"display\");\n      if (result !== null && result !== void 0 && result.textDivs && this.textHighlighter) {\n        this._buildXfaTextContentItems(result.textDivs);\n      }\n    } catch (ex) {\n      console.error(`_renderXfaLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      this.eventBus.dispatch(\"xfalayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error\n      });\n    }\n  }\n  async _buildXfaTextContentItems(textDivs) {\n    const text = await this.pdfPage.getTextContent();\n    const items = [];\n    for (const item of text.items) {\n      items.push(item.str);\n    }\n    this.textHighlighter.setTextMapping(textDivs, items);\n    this.textHighlighter.enable();\n  }\n  _resetZoomLayer() {\n    let removeFromDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    if (!this.zoomLayer) {\n      return;\n    }\n    const zoomLayerCanvas = this.zoomLayer.firstChild;\n    this.paintedViewportMap.delete(zoomLayerCanvas);\n    zoomLayerCanvas.width = 0;\n    zoomLayerCanvas.height = 0;\n    if (removeFromDOM) {\n      this.zoomLayer.remove();\n    }\n    this.zoomLayer = null;\n  }\n  reset() {\n    var _this$annotationLayer, _this$annotationEdito, _this$xfaLayer;\n    let {\n      keepZoomLayer = false,\n      keepAnnotationLayer = false,\n      keepAnnotationEditorLayer = false,\n      keepXfaLayer = false\n    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.cancelRendering({\n      keepAnnotationLayer,\n      keepAnnotationEditorLayer,\n      keepXfaLayer\n    });\n    this.renderingState = _ui_utils.RenderingStates.INITIAL;\n    const div = this.div;\n    div.style.width = Math.floor(this.viewport.width) + \"px\";\n    div.style.height = Math.floor(this.viewport.height) + \"px\";\n    const childNodes = div.childNodes,\n      zoomLayerNode = keepZoomLayer && this.zoomLayer || null,\n      annotationLayerNode = keepAnnotationLayer && ((_this$annotationLayer = this.annotationLayer) === null || _this$annotationLayer === void 0 ? void 0 : _this$annotationLayer.div) || null,\n      annotationEditorLayerNode = keepAnnotationEditorLayer && ((_this$annotationEdito = this.annotationEditorLayer) === null || _this$annotationEdito === void 0 ? void 0 : _this$annotationEdito.div) || null,\n      xfaLayerNode = keepXfaLayer && ((_this$xfaLayer = this.xfaLayer) === null || _this$xfaLayer === void 0 ? void 0 : _this$xfaLayer.div) || null;\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      const node = childNodes[i];\n      switch (node) {\n        case zoomLayerNode:\n        case annotationLayerNode:\n        case annotationEditorLayerNode:\n        case xfaLayerNode:\n          continue;\n      }\n      node.remove();\n    }\n    div.removeAttribute(\"data-loaded\");\n    if (annotationLayerNode) {\n      this.annotationLayer.hide();\n    }\n    if (annotationEditorLayerNode) {\n      this.annotationEditorLayer.hide();\n    } else {\n      var _this$annotationEdito2;\n      (_this$annotationEdito2 = this.annotationEditorLayer) === null || _this$annotationEdito2 === void 0 ? void 0 : _this$annotationEdito2.destroy();\n    }\n    if (xfaLayerNode) {\n      this.xfaLayer.hide();\n    }\n    if (!zoomLayerNode) {\n      if (this.canvas) {\n        this.paintedViewportMap.delete(this.canvas);\n        this.canvas.width = 0;\n        this.canvas.height = 0;\n        delete this.canvas;\n      }\n      this._resetZoomLayer();\n    }\n    if (this.svg) {\n      this.paintedViewportMap.delete(this.svg);\n      delete this.svg;\n    }\n    this.loadingIconDiv = document.createElement(\"div\");\n    this.loadingIconDiv.className = \"loadingIcon notVisible\";\n    if (this._isStandalone) {\n      this.toggleLoadingIconSpinner(true);\n    }\n    this.loadingIconDiv.setAttribute(\"role\", \"img\");\n    this.l10n.get(\"loading\").then(msg => {\n      var _this$loadingIconDiv;\n      (_this$loadingIconDiv = this.loadingIconDiv) === null || _this$loadingIconDiv === void 0 ? void 0 : _this$loadingIconDiv.setAttribute(\"aria-label\", msg);\n    });\n    div.append(this.loadingIconDiv);\n  }\n  update(_ref) {\n    let {\n      scale = 0,\n      rotation = null,\n      optionalContentConfigPromise = null\n    } = _ref;\n    this.scale = scale || this.scale;\n    if (typeof rotation === \"number\") {\n      this.rotation = rotation;\n    }\n    if (optionalContentConfigPromise instanceof Promise) {\n      this._optionalContentConfigPromise = optionalContentConfigPromise;\n      optionalContentConfigPromise.then(optionalContentConfig => {\n        if (optionalContentConfigPromise !== this._optionalContentConfigPromise) {\n          return;\n        }\n        _classPrivateFieldGet(this, _useThumbnailCanvas).initialOptionalContent = optionalContentConfig.hasInitialVisibility;\n      });\n    }\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = this.viewport.clone({\n      scale: this.scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: totalRotation\n    });\n    if (this._isStandalone) {\n      _ui_utils.docStyle.setProperty(\"--scale-factor\", this.viewport.scale);\n    }\n    if (this.svg) {\n      this.cssTransform({\n        target: this.svg,\n        redrawAnnotationLayer: true,\n        redrawAnnotationEditorLayer: true,\n        redrawXfaLayer: true\n      });\n      this.eventBus.dispatch(\"pagerendered\", {\n        source: this,\n        pageNumber: this.id,\n        cssTransform: true,\n        timestamp: performance.now(),\n        error: this._renderError\n      });\n      return;\n    }\n    let isScalingRestricted = false;\n    if (this.canvas && this.maxCanvasPixels > 0) {\n      const outputScale = this.outputScale;\n      if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) {\n        isScalingRestricted = true;\n      }\n    }\n    if (this.canvas) {\n      if (this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) {\n        this.cssTransform({\n          target: this.canvas,\n          redrawAnnotationLayer: true,\n          redrawAnnotationEditorLayer: true,\n          redrawXfaLayer: true\n        });\n        this.eventBus.dispatch(\"pagerendered\", {\n          source: this,\n          pageNumber: this.id,\n          cssTransform: true,\n          timestamp: performance.now(),\n          error: this._renderError\n        });\n        return;\n      }\n      if (!this.zoomLayer && !this.canvas.hidden) {\n        this.zoomLayer = this.canvas.parentNode;\n        this.zoomLayer.style.position = \"absolute\";\n      }\n    }\n    if (this.zoomLayer) {\n      this.cssTransform({\n        target: this.zoomLayer.firstChild\n      });\n    }\n    this.reset({\n      keepZoomLayer: true,\n      keepAnnotationLayer: true,\n      keepAnnotationEditorLayer: true,\n      keepXfaLayer: true\n    });\n  }\n  cancelRendering() {\n    let {\n      keepAnnotationLayer = false,\n      keepAnnotationEditorLayer = false,\n      keepXfaLayer = false\n    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (this.paintTask) {\n      this.paintTask.cancel();\n      this.paintTask = null;\n    }\n    this.resume = null;\n    if (this.textLayer) {\n      this.textLayer.cancel();\n      this.textLayer = null;\n    }\n    if (this.annotationLayer && (!keepAnnotationLayer || !this.annotationLayer.div)) {\n      this.annotationLayer.cancel();\n      this.annotationLayer = null;\n      this._annotationCanvasMap = null;\n    }\n    if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) {\n      this.annotationEditorLayer.cancel();\n      this.annotationEditorLayer = null;\n    }\n    if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) {\n      var _this$textHighlighter;\n      this.xfaLayer.cancel();\n      this.xfaLayer = null;\n      (_this$textHighlighter = this.textHighlighter) === null || _this$textHighlighter === void 0 ? void 0 : _this$textHighlighter.disable();\n    }\n    if (this._onTextLayerRendered) {\n      this.eventBus._off(\"textlayerrendered\", this._onTextLayerRendered);\n      this._onTextLayerRendered = null;\n    }\n  }\n  cssTransform(_ref2) {\n    let {\n      target,\n      redrawAnnotationLayer = false,\n      redrawAnnotationEditorLayer = false,\n      redrawXfaLayer = false\n    } = _ref2;\n    const width = this.viewport.width;\n    const height = this.viewport.height;\n    const div = this.div;\n    target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + \"px\";\n    target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + \"px\";\n    const relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation;\n    const absRotation = Math.abs(relativeRotation);\n    let scaleX = 1,\n      scaleY = 1;\n    if (absRotation === 90 || absRotation === 270) {\n      scaleX = height / width;\n      scaleY = width / height;\n    }\n    target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;\n    if (this.textLayer) {\n      const textLayerViewport = this.textLayer.viewport;\n      const textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation;\n      const textAbsRotation = Math.abs(textRelativeRotation);\n      let scale = width / textLayerViewport.width;\n      if (textAbsRotation === 90 || textAbsRotation === 270) {\n        scale = width / textLayerViewport.height;\n      }\n      const textLayerDiv = this.textLayer.textLayerDiv;\n      let transX, transY;\n      switch (textAbsRotation) {\n        case 0:\n          transX = transY = 0;\n          break;\n        case 90:\n          transX = 0;\n          transY = \"-\" + textLayerDiv.style.height;\n          break;\n        case 180:\n          transX = \"-\" + textLayerDiv.style.width;\n          transY = \"-\" + textLayerDiv.style.height;\n          break;\n        case 270:\n          transX = \"-\" + textLayerDiv.style.width;\n          transY = 0;\n          break;\n        default:\n          console.error(\"Bad rotation value.\");\n          break;\n      }\n      textLayerDiv.style.transform = `rotate(${textAbsRotation}deg) ` + `scale(${scale}) ` + `translate(${transX}, ${transY})`;\n      textLayerDiv.style.transformOrigin = \"0% 0%\";\n    }\n    if (redrawAnnotationLayer && this.annotationLayer) {\n      this._renderAnnotationLayer();\n    }\n    if (redrawAnnotationEditorLayer && this.annotationEditorLayer) {\n      this._renderAnnotationEditorLayer();\n    }\n    if (redrawXfaLayer && this.xfaLayer) {\n      this._renderXfaLayer();\n    }\n  }\n  get width() {\n    return this.viewport.width;\n  }\n  get height() {\n    return this.viewport.height;\n  }\n  getPagePoint(x, y) {\n    return this.viewport.convertToPdfPoint(x, y);\n  }\n  toggleLoadingIconSpinner() {\n    var _this$loadingIconDiv2;\n    let viewVisible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    (_this$loadingIconDiv2 = this.loadingIconDiv) === null || _this$loadingIconDiv2 === void 0 ? void 0 : _this$loadingIconDiv2.classList.toggle(\"notVisible\", !viewVisible);\n  }\n  draw() {\n    var _this$annotationLayer2,\n      _this$annotationEdito3,\n      _this$xfaLayer2,\n      _this = this;\n    if (this.renderingState !== _ui_utils.RenderingStates.INITIAL) {\n      console.error(\"Must be in new state before drawing\");\n      this.reset();\n    }\n    const {\n      div,\n      pdfPage\n    } = this;\n    if (!pdfPage) {\n      this.renderingState = _ui_utils.RenderingStates.FINISHED;\n      if (this.loadingIconDiv) {\n        this.loadingIconDiv.remove();\n        delete this.loadingIconDiv;\n      }\n      return Promise.reject(new Error(\"pdfPage is not loaded\"));\n    }\n    this.renderingState = _ui_utils.RenderingStates.RUNNING;\n    const canvasWrapper = document.createElement(\"div\");\n    canvasWrapper.style.width = div.style.width;\n    canvasWrapper.style.height = div.style.height;\n    canvasWrapper.classList.add(\"canvasWrapper\");\n    const lastDivBeforeTextDiv = ((_this$annotationLayer2 = this.annotationLayer) === null || _this$annotationLayer2 === void 0 ? void 0 : _this$annotationLayer2.div) || ((_this$annotationEdito3 = this.annotationEditorLayer) === null || _this$annotationEdito3 === void 0 ? void 0 : _this$annotationEdito3.div);\n    if (lastDivBeforeTextDiv) {\n      lastDivBeforeTextDiv.before(canvasWrapper);\n    } else {\n      div.append(canvasWrapper);\n    }\n    let textLayer = null;\n    if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) {\n      this._accessibilityManager || (this._accessibilityManager = new _text_accessibility.TextAccessibilityManager());\n      const textLayerDiv = document.createElement(\"div\");\n      textLayerDiv.className = \"textLayer\";\n      textLayerDiv.style.width = canvasWrapper.style.width;\n      textLayerDiv.style.height = canvasWrapper.style.height;\n      if (lastDivBeforeTextDiv) {\n        lastDivBeforeTextDiv.before(textLayerDiv);\n      } else {\n        div.append(textLayerDiv);\n      }\n      textLayer = this.textLayerFactory.createTextLayerBuilder({\n        textLayerDiv,\n        pageIndex: this.id - 1,\n        viewport: this.viewport,\n        eventBus: this.eventBus,\n        highlighter: this.textHighlighter,\n        accessibilityManager: this._accessibilityManager\n      });\n    }\n    this.textLayer = textLayer;\n    if (_classPrivateFieldGet(this, _annotationMode) !== _pdfjsLib.AnnotationMode.DISABLE && this.annotationLayerFactory) {\n      this._annotationCanvasMap || (this._annotationCanvasMap = new Map());\n      this.annotationLayer || (this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder({\n        pageDiv: div,\n        pdfPage,\n        imageResourcesPath: this.imageResourcesPath,\n        renderForms: _classPrivateFieldGet(this, _annotationMode) === _pdfjsLib.AnnotationMode.ENABLE_FORMS,\n        l10n: this.l10n,\n        annotationCanvasMap: this._annotationCanvasMap,\n        accessibilityManager: this._accessibilityManager\n      }));\n    }\n    if ((_this$xfaLayer2 = this.xfaLayer) !== null && _this$xfaLayer2 !== void 0 && _this$xfaLayer2.div) {\n      div.append(this.xfaLayer.div);\n    }\n    let renderContinueCallback = null;\n    if (this.renderingQueue) {\n      renderContinueCallback = cont => {\n        if (!this.renderingQueue.isHighestPriority(this)) {\n          this.renderingState = _ui_utils.RenderingStates.PAUSED;\n          this.resume = () => {\n            this.renderingState = _ui_utils.RenderingStates.RUNNING;\n            cont();\n          };\n          return;\n        }\n        cont();\n      };\n    }\n    const finishPaintTask = async function () {\n      let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      if (paintTask === _this.paintTask) {\n        _this.paintTask = null;\n      }\n      if (error instanceof _pdfjsLib.RenderingCancelledException) {\n        _this._renderError = null;\n        return;\n      }\n      _this._renderError = error;\n      _this.renderingState = _ui_utils.RenderingStates.FINISHED;\n      if (_this.loadingIconDiv) {\n        _this.loadingIconDiv.remove();\n        delete _this.loadingIconDiv;\n      }\n      _this._resetZoomLayer(true);\n      _classPrivateFieldGet(_this, _useThumbnailCanvas).regularAnnotations = !paintTask.separateAnnots;\n      _this.eventBus.dispatch(\"pagerendered\", {\n        source: _this,\n        pageNumber: _this.id,\n        cssTransform: false,\n        timestamp: performance.now(),\n        error: _this._renderError\n      });\n      if (error) {\n        throw error;\n      }\n    };\n    const paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper);\n    paintTask.onRenderContinue = renderContinueCallback;\n    this.paintTask = paintTask;\n    const resultPromise = paintTask.promise.then(() => {\n      return finishPaintTask(null).then(() => {\n        if (textLayer) {\n          const readableStream = pdfPage.streamTextContent({\n            includeMarkedContent: true\n          });\n          textLayer.setTextContentStream(readableStream);\n          textLayer.render();\n        }\n        if (this.annotationLayer) {\n          this._renderAnnotationLayer().then(() => {\n            if (this.annotationEditorLayerFactory) {\n              this.annotationEditorLayer || (this.annotationEditorLayer = this.annotationEditorLayerFactory.createAnnotationEditorLayerBuilder({\n                pageDiv: div,\n                pdfPage,\n                l10n: this.l10n,\n                accessibilityManager: this._accessibilityManager\n              }));\n              this._renderAnnotationEditorLayer();\n            }\n          });\n        }\n      });\n    }, function (reason) {\n      return finishPaintTask(reason);\n    });\n    if (this.xfaLayerFactory) {\n      this.xfaLayer || (this.xfaLayer = this.xfaLayerFactory.createXfaLayerBuilder({\n        pageDiv: div,\n        pdfPage\n      }));\n      this._renderXfaLayer();\n    }\n    if (this.structTreeLayerFactory && this.textLayer && this.canvas) {\n      this._onTextLayerRendered = event => {\n        if (event.pageNumber !== this.id) {\n          return;\n        }\n        this.eventBus._off(\"textlayerrendered\", this._onTextLayerRendered);\n        this._onTextLayerRendered = null;\n        if (!this.canvas) {\n          return;\n        }\n        this.pdfPage.getStructTree().then(tree => {\n          if (!tree) {\n            return;\n          }\n          if (!this.canvas) {\n            return;\n          }\n          const treeDom = this.structTreeLayer.render(tree);\n          treeDom.classList.add(\"structTree\");\n          this.canvas.append(treeDom);\n        });\n      };\n      this.eventBus._on(\"textlayerrendered\", this._onTextLayerRendered);\n      this.structTreeLayer = this.structTreeLayerFactory.createStructTreeLayerBuilder({\n        pdfPage\n      });\n    }\n    div.setAttribute(\"data-loaded\", true);\n    this.eventBus.dispatch(\"pagerender\", {\n      source: this,\n      pageNumber: this.id\n    });\n    return resultPromise;\n  }\n  paintOnCanvas(canvasWrapper) {\n    const renderCapability = (0, _pdfjsLib.createPromiseCapability)();\n    const result = {\n      promise: renderCapability.promise,\n      onRenderContinue(cont) {\n        cont();\n      },\n      cancel() {\n        renderTask.cancel();\n      },\n      get separateAnnots() {\n        return renderTask.separateAnnots;\n      }\n    };\n    const viewport = this.viewport;\n    const canvas = document.createElement(\"canvas\");\n    canvas.setAttribute(\"role\", \"presentation\");\n    canvas.hidden = true;\n    let isCanvasHidden = true;\n    const showCanvas = function () {\n      if (isCanvasHidden) {\n        canvas.hidden = false;\n        isCanvasHidden = false;\n      }\n    };\n    canvasWrapper.append(canvas);\n    this.canvas = canvas;\n    const ctx = canvas.getContext(\"2d\", {\n      alpha: false\n    });\n    const outputScale = this.outputScale = new _ui_utils.OutputScale();\n    if (this.useOnlyCssZoom) {\n      const actualSizeViewport = viewport.clone({\n        scale: _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS\n      });\n      outputScale.sx *= actualSizeViewport.width / viewport.width;\n      outputScale.sy *= actualSizeViewport.height / viewport.height;\n    }\n    if (this.maxCanvasPixels > 0) {\n      const pixelsInViewport = viewport.width * viewport.height;\n      const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\n      if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n        outputScale.sx = maxScale;\n        outputScale.sy = maxScale;\n        this.hasRestrictedScaling = true;\n      } else {\n        this.hasRestrictedScaling = false;\n      }\n    }\n    const sfx = (0, _ui_utils.approximateFraction)(outputScale.sx);\n    const sfy = (0, _ui_utils.approximateFraction)(outputScale.sy);\n    canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]);\n    canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]);\n    canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + \"px\";\n    canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + \"px\";\n    this.paintedViewportMap.set(canvas, viewport);\n    const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;\n    const renderContext = {\n      canvasContext: ctx,\n      transform,\n      viewport: this.viewport,\n      annotationMode: _classPrivateFieldGet(this, _annotationMode),\n      optionalContentConfigPromise: this._optionalContentConfigPromise,\n      annotationCanvasMap: this._annotationCanvasMap,\n      pageColors: this.pageColors\n    };\n    const renderTask = this.pdfPage.render(renderContext);\n    renderTask.onContinue = function (cont) {\n      showCanvas();\n      if (result.onRenderContinue) {\n        result.onRenderContinue(cont);\n      } else {\n        cont();\n      }\n    };\n    renderTask.promise.then(function () {\n      showCanvas();\n      renderCapability.resolve();\n    }, function (error) {\n      showCanvas();\n      renderCapability.reject(error);\n    });\n    return result;\n  }\n  paintOnSvg(wrapper) {\n    let cancelled = false;\n    const ensureNotCancelled = () => {\n      if (cancelled) {\n        throw new _pdfjsLib.RenderingCancelledException(`Rendering cancelled, page ${this.id}`, \"svg\");\n      }\n    };\n    const pdfPage = this.pdfPage;\n    const actualSizeViewport = this.viewport.clone({\n      scale: _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS\n    });\n    const promise = pdfPage.getOperatorList({\n      annotationMode: _classPrivateFieldGet(this, _annotationMode)\n    }).then(opList => {\n      ensureNotCancelled();\n      const svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs);\n      return svgGfx.getSVG(opList, actualSizeViewport).then(svg => {\n        ensureNotCancelled();\n        this.svg = svg;\n        this.paintedViewportMap.set(svg, actualSizeViewport);\n        svg.style.width = wrapper.style.width;\n        svg.style.height = wrapper.style.height;\n        this.renderingState = _ui_utils.RenderingStates.FINISHED;\n        wrapper.append(svg);\n      });\n    });\n    return {\n      promise,\n      onRenderContinue(cont) {\n        cont();\n      },\n      cancel() {\n        cancelled = true;\n      },\n      get separateAnnots() {\n        return false;\n      }\n    };\n  }\n  setPageLabel(label) {\n    this.pageLabel = typeof label === \"string\" ? label : null;\n    if (this.pageLabel !== null) {\n      this.div.setAttribute(\"data-page-label\", this.pageLabel);\n    } else {\n      this.div.removeAttribute(\"data-page-label\");\n    }\n  }\n  get thumbnailCanvas() {\n    const {\n      initialOptionalContent,\n      regularAnnotations\n    } = _classPrivateFieldGet(this, _useThumbnailCanvas);\n    return initialOptionalContent && regularAnnotations ? this.canvas : null;\n  }\n}\nexports.PDFPageView = PDFPageView;\n\n/***/ }),\n/* 34 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.TextAccessibilityManager = void 0;\nvar _ui_utils = __webpack_require__(1);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nfunction _classStaticPrivateMethodGet(receiver, classConstructor, method) { _classCheckPrivateStaticAccess(receiver, classConstructor); return method; }\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\"Private static access of wrong provenance\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nvar _enabled = /*#__PURE__*/new WeakMap();\nvar _textChildren = /*#__PURE__*/new WeakMap();\nvar _textNodes = /*#__PURE__*/new WeakMap();\nvar _waitingElements = /*#__PURE__*/new WeakMap();\nvar _addIdToAriaOwns = /*#__PURE__*/new WeakSet();\nclass TextAccessibilityManager {\n  constructor() {\n    _classPrivateMethodInitSpec(this, _addIdToAriaOwns);\n    _classPrivateFieldInitSpec(this, _enabled, {\n      writable: true,\n      value: false\n    });\n    _classPrivateFieldInitSpec(this, _textChildren, {\n      writable: true,\n      value: null\n    });\n    _classPrivateFieldInitSpec(this, _textNodes, {\n      writable: true,\n      value: new Map()\n    });\n    _classPrivateFieldInitSpec(this, _waitingElements, {\n      writable: true,\n      value: new Map()\n    });\n  }\n  setTextMapping(textDivs) {\n    _classPrivateFieldSet(this, _textChildren, textDivs);\n  }\n  enable() {\n    if (_classPrivateFieldGet(this, _enabled)) {\n      throw new Error(\"TextAccessibilityManager is already enabled.\");\n    }\n    if (!_classPrivateFieldGet(this, _textChildren)) {\n      throw new Error(\"Text divs and strings have not been set.\");\n    }\n    _classPrivateFieldSet(this, _enabled, true);\n    _classPrivateFieldSet(this, _textChildren, _classPrivateFieldGet(this, _textChildren).slice());\n    _classPrivateFieldGet(this, _textChildren).sort(_classStaticPrivateMethodGet(TextAccessibilityManager, TextAccessibilityManager, _compareElementPositions));\n    if (_classPrivateFieldGet(this, _textNodes).size > 0) {\n      const textChildren = _classPrivateFieldGet(this, _textChildren);\n      for (const [id, nodeIndex] of _classPrivateFieldGet(this, _textNodes)) {\n        const element = document.getElementById(id);\n        if (!element) {\n          _classPrivateFieldGet(this, _textNodes).delete(id);\n          continue;\n        }\n        _classPrivateMethodGet(this, _addIdToAriaOwns, _addIdToAriaOwns2).call(this, id, textChildren[nodeIndex]);\n      }\n    }\n    for (const [element, isRemovable] of _classPrivateFieldGet(this, _waitingElements)) {\n      this.addPointerInTextLayer(element, isRemovable);\n    }\n    _classPrivateFieldGet(this, _waitingElements).clear();\n  }\n  disable() {\n    if (!_classPrivateFieldGet(this, _enabled)) {\n      return;\n    }\n    _classPrivateFieldGet(this, _waitingElements).clear();\n    _classPrivateFieldSet(this, _textChildren, null);\n    _classPrivateFieldSet(this, _enabled, false);\n  }\n  removePointerInTextLayer(element) {\n    var _owns;\n    if (!_classPrivateFieldGet(this, _enabled)) {\n      _classPrivateFieldGet(this, _waitingElements).delete(element);\n      return;\n    }\n    const children = _classPrivateFieldGet(this, _textChildren);\n    if (!children || children.length === 0) {\n      return;\n    }\n    const {\n      id\n    } = element;\n    const nodeIndex = _classPrivateFieldGet(this, _textNodes).get(id);\n    if (nodeIndex === undefined) {\n      return;\n    }\n    const node = children[nodeIndex];\n    _classPrivateFieldGet(this, _textNodes).delete(id);\n    let owns = node.getAttribute(\"aria-owns\");\n    if ((_owns = owns) !== null && _owns !== void 0 && _owns.includes(id)) {\n      owns = owns.split(\" \").filter(x => x !== id).join(\" \");\n      if (owns) {\n        node.setAttribute(\"aria-owns\", owns);\n      } else {\n        node.removeAttribute(\"aria-owns\");\n        node.setAttribute(\"role\", \"presentation\");\n      }\n    }\n  }\n  addPointerInTextLayer(element, isRemovable) {\n    const {\n      id\n    } = element;\n    if (!id) {\n      return;\n    }\n    if (!_classPrivateFieldGet(this, _enabled)) {\n      _classPrivateFieldGet(this, _waitingElements).set(element, isRemovable);\n      return;\n    }\n    if (isRemovable) {\n      this.removePointerInTextLayer(element);\n    }\n    const children = _classPrivateFieldGet(this, _textChildren);\n    if (!children || children.length === 0) {\n      return;\n    }\n    const index = (0, _ui_utils.binarySearchFirstItem)(children, node => _classStaticPrivateMethodGet(TextAccessibilityManager, TextAccessibilityManager, _compareElementPositions).call(TextAccessibilityManager, element, node) < 0);\n    const nodeIndex = Math.max(0, index - 1);\n    _classPrivateMethodGet(this, _addIdToAriaOwns, _addIdToAriaOwns2).call(this, id, children[nodeIndex]);\n    _classPrivateFieldGet(this, _textNodes).set(id, nodeIndex);\n  }\n  moveElementInDOM(container, element, contentElement, isRemovable) {\n    this.addPointerInTextLayer(contentElement, isRemovable);\n    if (!container.hasChildNodes()) {\n      container.append(element);\n      return;\n    }\n    const children = Array.from(container.childNodes).filter(node => node !== element);\n    if (children.length === 0) {\n      return;\n    }\n    const elementToCompare = contentElement || element;\n    const index = (0, _ui_utils.binarySearchFirstItem)(children, node => _classStaticPrivateMethodGet(TextAccessibilityManager, TextAccessibilityManager, _compareElementPositions).call(TextAccessibilityManager, elementToCompare, node) < 0);\n    if (index === 0) {\n      children[0].before(element);\n    } else {\n      children[index - 1].after(element);\n    }\n  }\n}\nexports.TextAccessibilityManager = TextAccessibilityManager;\nfunction _compareElementPositions(e1, e2) {\n  const rect1 = e1.getBoundingClientRect();\n  const rect2 = e2.getBoundingClientRect();\n  if (rect1.width === 0 && rect1.height === 0) {\n    return +1;\n  }\n  if (rect2.width === 0 && rect2.height === 0) {\n    return -1;\n  }\n  const top1 = rect1.y;\n  const bot1 = rect1.y + rect1.height;\n  const mid1 = rect1.y + rect1.height / 2;\n  const top2 = rect2.y;\n  const bot2 = rect2.y + rect2.height;\n  const mid2 = rect2.y + rect2.height / 2;\n  if (mid1 <= top2 && mid2 >= bot1) {\n    return -1;\n  }\n  if (mid2 <= top1 && mid1 >= bot2) {\n    return +1;\n  }\n  const centerX1 = rect1.x + rect1.width / 2;\n  const centerX2 = rect2.x + rect2.width / 2;\n  return centerX1 - centerX2;\n}\nfunction _addIdToAriaOwns2(id, node) {\n  const owns = node.getAttribute(\"aria-owns\");\n  if (!(owns !== null && owns !== void 0 && owns.includes(id))) {\n    node.setAttribute(\"aria-owns\", owns ? `${owns} ${id}` : id);\n  }\n  node.removeAttribute(\"role\");\n}\n\n/***/ }),\n/* 35 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.StructTreeLayerBuilder = void 0;\nconst PDF_ROLE_TO_HTML_ROLE = {\n  Document: null,\n  DocumentFragment: null,\n  Part: \"group\",\n  Sect: \"group\",\n  Div: \"group\",\n  Aside: \"note\",\n  NonStruct: \"none\",\n  P: null,\n  H: \"heading\",\n  Title: null,\n  FENote: \"note\",\n  Sub: \"group\",\n  Lbl: null,\n  Span: null,\n  Em: null,\n  Strong: null,\n  Link: \"link\",\n  Annot: \"note\",\n  Form: \"form\",\n  Ruby: null,\n  RB: null,\n  RT: null,\n  RP: null,\n  Warichu: null,\n  WT: null,\n  WP: null,\n  L: \"list\",\n  LI: \"listitem\",\n  LBody: null,\n  Table: \"table\",\n  TR: \"row\",\n  TH: \"columnheader\",\n  TD: \"cell\",\n  THead: \"columnheader\",\n  TBody: null,\n  TFoot: null,\n  Caption: null,\n  Figure: \"figure\",\n  Formula: null,\n  Artifact: null\n};\nconst HEADING_PATTERN = /^H(\\d+)$/;\nclass StructTreeLayerBuilder {\n  constructor(_ref) {\n    let {\n      pdfPage\n    } = _ref;\n    this.pdfPage = pdfPage;\n  }\n  render(structTree) {\n    return this._walk(structTree);\n  }\n  _setAttributes(structElement, htmlElement) {\n    if (structElement.alt !== undefined) {\n      htmlElement.setAttribute(\"aria-label\", structElement.alt);\n    }\n    if (structElement.id !== undefined) {\n      htmlElement.setAttribute(\"aria-owns\", structElement.id);\n    }\n    if (structElement.lang !== undefined) {\n      htmlElement.setAttribute(\"lang\", structElement.lang);\n    }\n  }\n  _walk(node) {\n    if (!node) {\n      return null;\n    }\n    const element = document.createElement(\"span\");\n    if (\"role\" in node) {\n      const {\n        role\n      } = node;\n      const match = role.match(HEADING_PATTERN);\n      if (match) {\n        element.setAttribute(\"role\", \"heading\");\n        element.setAttribute(\"aria-level\", match[1]);\n      } else if (PDF_ROLE_TO_HTML_ROLE[role]) {\n        element.setAttribute(\"role\", PDF_ROLE_TO_HTML_ROLE[role]);\n      }\n    }\n    this._setAttributes(node, element);\n    if (node.children) {\n      if (node.children.length === 1 && \"id\" in node.children[0]) {\n        this._setAttributes(node.children[0], element);\n      } else {\n        for (const kid of node.children) {\n          element.append(this._walk(kid));\n        }\n      }\n    }\n    return element;\n  }\n}\nexports.StructTreeLayerBuilder = StructTreeLayerBuilder;\n\n/***/ }),\n/* 36 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.TextHighlighter = void 0;\nclass TextHighlighter {\n  constructor(_ref) {\n    let {\n      findController,\n      eventBus,\n      pageIndex\n    } = _ref;\n    this.findController = findController;\n    this.matches = [];\n    this.eventBus = eventBus;\n    this.pageIdx = pageIndex;\n    this._onUpdateTextLayerMatches = null;\n    this.textDivs = null;\n    this.textContentItemsStr = null;\n    this.enabled = false;\n  }\n  setTextMapping(divs, texts) {\n    this.textDivs = divs;\n    this.textContentItemsStr = texts;\n  }\n  enable() {\n    if (!this.textDivs || !this.textContentItemsStr) {\n      throw new Error(\"Text divs and strings have not been set.\");\n    }\n    if (this.enabled) {\n      throw new Error(\"TextHighlighter is already enabled.\");\n    }\n    this.enabled = true;\n    if (!this._onUpdateTextLayerMatches) {\n      this._onUpdateTextLayerMatches = evt => {\n        if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {\n          this._updateMatches();\n        }\n      };\n      this.eventBus._on(\"updatetextlayermatches\", this._onUpdateTextLayerMatches);\n    }\n    this._updateMatches();\n  }\n  disable() {\n    if (!this.enabled) {\n      return;\n    }\n    this.enabled = false;\n    if (this._onUpdateTextLayerMatches) {\n      this.eventBus._off(\"updatetextlayermatches\", this._onUpdateTextLayerMatches);\n      this._onUpdateTextLayerMatches = null;\n    }\n  }\n  _convertMatches(matches, matchesLength) {\n    if (!matches) {\n      return [];\n    }\n    const {\n      textContentItemsStr\n    } = this;\n    let i = 0,\n      iIndex = 0;\n    const end = textContentItemsStr.length - 1;\n    const result = [];\n    for (let m = 0, mm = matches.length; m < mm; m++) {\n      let matchIdx = matches[m];\n      while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n      if (i === textContentItemsStr.length) {\n        console.error(\"Could not find a matching mapping\");\n      }\n      const match = {\n        begin: {\n          divIdx: i,\n          offset: matchIdx - iIndex\n        }\n      };\n      matchIdx += matchesLength[m];\n      while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n      match.end = {\n        divIdx: i,\n        offset: matchIdx - iIndex\n      };\n      result.push(match);\n    }\n    return result;\n  }\n  _renderMatches(matches) {\n    if (matches.length === 0) {\n      return;\n    }\n    const {\n      findController,\n      pageIdx\n    } = this;\n    const {\n      textContentItemsStr,\n      textDivs\n    } = this;\n    const isSelectedPage = pageIdx === findController.selected.pageIdx;\n    const selectedMatchIdx = findController.selected.matchIdx;\n    const highlightAll = findController.state.highlightAll;\n    let prevEnd = null;\n    const infinity = {\n      divIdx: -1,\n      offset: undefined\n    };\n    function beginText(begin, className) {\n      const divIdx = begin.divIdx;\n      textDivs[divIdx].textContent = \"\";\n      return appendTextToDiv(divIdx, 0, begin.offset, className);\n    }\n    function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n      let div = textDivs[divIdx];\n      if (div.nodeType === Node.TEXT_NODE) {\n        const span = document.createElement(\"span\");\n        div.before(span);\n        span.append(div);\n        textDivs[divIdx] = span;\n        div = span;\n      }\n      const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);\n      const node = document.createTextNode(content);\n      if (className) {\n        const span = document.createElement(\"span\");\n        span.className = `${className} appended`;\n        span.append(node);\n        div.append(span);\n        return className.includes(\"selected\") ? span.offsetLeft : 0;\n      }\n      div.append(node);\n      return 0;\n    }\n    let i0 = selectedMatchIdx,\n      i1 = i0 + 1;\n    if (highlightAll) {\n      i0 = 0;\n      i1 = matches.length;\n    } else if (!isSelectedPage) {\n      return;\n    }\n    for (let i = i0; i < i1; i++) {\n      const match = matches[i];\n      const begin = match.begin;\n      const end = match.end;\n      const isSelected = isSelectedPage && i === selectedMatchIdx;\n      const highlightSuffix = isSelected ? \" selected\" : \"\";\n      let selectedLeft = 0;\n      if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\n        if (prevEnd !== null) {\n          appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n        }\n        beginText(begin);\n      } else {\n        appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\n      }\n      if (begin.divIdx === end.divIdx) {\n        selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, end.offset, \"highlight\" + highlightSuffix);\n      } else {\n        selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, \"highlight begin\" + highlightSuffix);\n        for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\n          textDivs[n0].className = \"highlight middle\" + highlightSuffix;\n        }\n        beginText(end, \"highlight end\" + highlightSuffix);\n      }\n      prevEnd = end;\n      if (isSelected) {\n        findController.scrollMatchIntoView({\n          element: textDivs[begin.divIdx],\n          selectedLeft,\n          pageIndex: pageIdx,\n          matchIndex: selectedMatchIdx\n        });\n      }\n    }\n    if (prevEnd) {\n      appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n    }\n  }\n  _updateMatches() {\n    if (!this.enabled) {\n      return;\n    }\n    const {\n      findController,\n      matches,\n      pageIdx\n    } = this;\n    const {\n      textContentItemsStr,\n      textDivs\n    } = this;\n    let clearedUntilDivIdx = -1;\n    for (const match of matches) {\n      const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n      for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n        const div = textDivs[n];\n        div.textContent = textContentItemsStr[n];\n        div.className = \"\";\n      }\n      clearedUntilDivIdx = match.end.divIdx + 1;\n    }\n    if (!(findController !== null && findController !== void 0 && findController.highlightMatches)) {\n      return;\n    }\n    const pageMatches = findController.pageMatches[pageIdx] || null;\n    const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;\n    this.matches = this._convertMatches(pageMatches, pageMatchesLength);\n    this._renderMatches(this.matches);\n  }\n}\nexports.TextHighlighter = TextHighlighter;\n\n/***/ }),\n/* 37 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.TextLayerBuilder = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar _finishRendering = /*#__PURE__*/new WeakSet();\nvar _bindMouse = /*#__PURE__*/new WeakSet();\nclass TextLayerBuilder {\n  constructor(_ref) {\n    let {\n      textLayerDiv,\n      eventBus,\n      pageIndex,\n      viewport,\n      highlighter = null,\n      accessibilityManager = null\n    } = _ref;\n    _classPrivateMethodInitSpec(this, _bindMouse);\n    _classPrivateMethodInitSpec(this, _finishRendering);\n    this.textLayerDiv = textLayerDiv;\n    this.eventBus = eventBus;\n    this.textContent = null;\n    this.textContentItemsStr = [];\n    this.textContentStream = null;\n    this.renderingDone = false;\n    this.pageNumber = pageIndex + 1;\n    this.viewport = viewport;\n    this.textDivs = [];\n    this.textLayerRenderTask = null;\n    this.highlighter = highlighter;\n    this.accessibilityManager = accessibilityManager;\n    _classPrivateMethodGet(this, _bindMouse, _bindMouse2).call(this);\n  }\n  render() {\n    var _this$highlighter, _this$accessibilityMa;\n    let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    if (!(this.textContent || this.textContentStream) || this.renderingDone) {\n      return;\n    }\n    this.cancel();\n    this.textDivs.length = 0;\n    (_this$highlighter = this.highlighter) === null || _this$highlighter === void 0 ? void 0 : _this$highlighter.setTextMapping(this.textDivs, this.textContentItemsStr);\n    (_this$accessibilityMa = this.accessibilityManager) === null || _this$accessibilityMa === void 0 ? void 0 : _this$accessibilityMa.setTextMapping(this.textDivs);\n    const textLayerFrag = document.createDocumentFragment();\n    this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({\n      textContent: this.textContent,\n      textContentStream: this.textContentStream,\n      container: textLayerFrag,\n      viewport: this.viewport,\n      textDivs: this.textDivs,\n      textContentItemsStr: this.textContentItemsStr,\n      timeout\n    });\n    this.textLayerRenderTask.promise.then(() => {\n      var _this$highlighter2, _this$accessibilityMa2;\n      this.textLayerDiv.append(textLayerFrag);\n      _classPrivateMethodGet(this, _finishRendering, _finishRendering2).call(this);\n      (_this$highlighter2 = this.highlighter) === null || _this$highlighter2 === void 0 ? void 0 : _this$highlighter2.enable();\n      (_this$accessibilityMa2 = this.accessibilityManager) === null || _this$accessibilityMa2 === void 0 ? void 0 : _this$accessibilityMa2.enable();\n    }, function (reason) {});\n  }\n  cancel() {\n    var _this$highlighter3, _this$accessibilityMa3;\n    if (this.textLayerRenderTask) {\n      this.textLayerRenderTask.cancel();\n      this.textLayerRenderTask = null;\n    }\n    (_this$highlighter3 = this.highlighter) === null || _this$highlighter3 === void 0 ? void 0 : _this$highlighter3.disable();\n    (_this$accessibilityMa3 = this.accessibilityManager) === null || _this$accessibilityMa3 === void 0 ? void 0 : _this$accessibilityMa3.disable();\n  }\n  setTextContentStream(readableStream) {\n    this.cancel();\n    this.textContentStream = readableStream;\n  }\n  setTextContent(textContent) {\n    this.cancel();\n    this.textContent = textContent;\n  }\n}\nexports.TextLayerBuilder = TextLayerBuilder;\nfunction _finishRendering2() {\n  this.renderingDone = true;\n  const endOfContent = document.createElement(\"div\");\n  endOfContent.className = \"endOfContent\";\n  this.textLayerDiv.append(endOfContent);\n  this.eventBus.dispatch(\"textlayerrendered\", {\n    source: this,\n    pageNumber: this.pageNumber,\n    numTextDivs: this.textDivs.length\n  });\n}\nfunction _bindMouse2() {\n  const div = this.textLayerDiv;\n  div.addEventListener(\"mousedown\", evt => {\n    const end = div.querySelector(\".endOfContent\");\n    if (!end) {\n      return;\n    }\n    let adjustTop = evt.target !== div;\n    adjustTop && (adjustTop = getComputedStyle(end).getPropertyValue(\"-moz-user-select\") !== \"none\");\n    if (adjustTop) {\n      const divBounds = div.getBoundingClientRect();\n      const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\n      end.style.top = (r * 100).toFixed(2) + \"%\";\n    }\n    end.classList.add(\"active\");\n  });\n  div.addEventListener(\"mouseup\", () => {\n    const end = div.querySelector(\".endOfContent\");\n    if (!end) {\n      return;\n    }\n    end.style.top = \"\";\n    end.classList.remove(\"active\");\n  });\n}\n\n/***/ }),\n/* 38 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.XfaLayerBuilder = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nclass XfaLayerBuilder {\n  constructor(_ref) {\n    let {\n      pageDiv,\n      pdfPage,\n      annotationStorage = null,\n      linkService,\n      xfaHtml = null\n    } = _ref;\n    this.pageDiv = pageDiv;\n    this.pdfPage = pdfPage;\n    this.annotationStorage = annotationStorage;\n    this.linkService = linkService;\n    this.xfaHtml = xfaHtml;\n    this.div = null;\n    this._cancelled = false;\n  }\n  render(viewport) {\n    let intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"display\";\n    if (intent === \"print\") {\n      const parameters = {\n        viewport: viewport.clone({\n          dontFlip: true\n        }),\n        div: this.div,\n        xfaHtml: this.xfaHtml,\n        annotationStorage: this.annotationStorage,\n        linkService: this.linkService,\n        intent\n      };\n      const div = document.createElement(\"div\");\n      this.pageDiv.append(div);\n      parameters.div = div;\n      const result = _pdfjsLib.XfaLayer.render(parameters);\n      return Promise.resolve(result);\n    }\n    return this.pdfPage.getXfa().then(xfaHtml => {\n      if (this._cancelled || !xfaHtml) {\n        return {\n          textDivs: []\n        };\n      }\n      const parameters = {\n        viewport: viewport.clone({\n          dontFlip: true\n        }),\n        div: this.div,\n        xfaHtml,\n        annotationStorage: this.annotationStorage,\n        linkService: this.linkService,\n        intent\n      };\n      if (this.div) {\n        return _pdfjsLib.XfaLayer.update(parameters);\n      }\n      this.div = document.createElement(\"div\");\n      this.pageDiv.append(this.div);\n      parameters.div = this.div;\n      return _pdfjsLib.XfaLayer.render(parameters);\n    }).catch(error => {\n      console.error(error);\n    });\n  }\n  cancel() {\n    this._cancelled = true;\n  }\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n}\nexports.XfaLayerBuilder = XfaLayerBuilder;\n\n/***/ }),\n/* 39 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.SecondaryToolbar = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdf_cursor_tools = __webpack_require__(7);\nvar _pdf_viewer = __webpack_require__(29);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar _updateUIState = /*#__PURE__*/new WeakSet();\nvar _bindClickListeners = /*#__PURE__*/new WeakSet();\nvar _bindCursorToolsListener = /*#__PURE__*/new WeakSet();\nvar _bindScrollModeListener = /*#__PURE__*/new WeakSet();\nvar _bindSpreadModeListener = /*#__PURE__*/new WeakSet();\nclass SecondaryToolbar {\n  constructor(options, eventBus, externalServices) {\n    _classPrivateMethodInitSpec(this, _bindSpreadModeListener);\n    _classPrivateMethodInitSpec(this, _bindScrollModeListener);\n    _classPrivateMethodInitSpec(this, _bindCursorToolsListener);\n    _classPrivateMethodInitSpec(this, _bindClickListeners);\n    _classPrivateMethodInitSpec(this, _updateUIState);\n    this.toolbar = options.toolbar;\n    this.toggleButton = options.toggleButton;\n    this.buttons = [{\n      element: options.presentationModeButton,\n      eventName: \"presentationmode\",\n      close: true\n    }, {\n      element: options.printButton,\n      eventName: \"print\",\n      close: true\n    }, {\n      element: options.downloadButton,\n      eventName: \"download\",\n      close: true\n    }, {\n      element: options.viewBookmarkButton,\n      eventName: null,\n      close: true\n    }, {\n      element: options.firstPageButton,\n      eventName: \"firstpage\",\n      close: true\n    }, {\n      element: options.lastPageButton,\n      eventName: \"lastpage\",\n      close: true\n    }, {\n      element: options.pageRotateCwButton,\n      eventName: \"rotatecw\",\n      close: false\n    }, {\n      element: options.pageRotateCcwButton,\n      eventName: \"rotateccw\",\n      close: false\n    }, {\n      element: options.cursorSelectToolButton,\n      eventName: \"switchcursortool\",\n      eventDetails: {\n        tool: _pdf_cursor_tools.CursorTool.SELECT\n      },\n      close: true\n    }, {\n      element: options.cursorHandToolButton,\n      eventName: \"switchcursortool\",\n      eventDetails: {\n        tool: _pdf_cursor_tools.CursorTool.HAND\n      },\n      close: true\n    }, {\n      element: options.scrollPageButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: _ui_utils.ScrollMode.PAGE\n      },\n      close: true\n    }, {\n      element: options.scrollVerticalButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: _ui_utils.ScrollMode.VERTICAL\n      },\n      close: true\n    }, {\n      element: options.scrollHorizontalButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: _ui_utils.ScrollMode.HORIZONTAL\n      },\n      close: true\n    }, {\n      element: options.scrollWrappedButton,\n      eventName: \"switchscrollmode\",\n      eventDetails: {\n        mode: _ui_utils.ScrollMode.WRAPPED\n      },\n      close: true\n    }, {\n      element: options.spreadNoneButton,\n      eventName: \"switchspreadmode\",\n      eventDetails: {\n        mode: _ui_utils.SpreadMode.NONE\n      },\n      close: true\n    }, {\n      element: options.spreadOddButton,\n      eventName: \"switchspreadmode\",\n      eventDetails: {\n        mode: _ui_utils.SpreadMode.ODD\n      },\n      close: true\n    }, {\n      element: options.spreadEvenButton,\n      eventName: \"switchspreadmode\",\n      eventDetails: {\n        mode: _ui_utils.SpreadMode.EVEN\n      },\n      close: true\n    }, {\n      element: options.documentPropertiesButton,\n      eventName: \"documentproperties\",\n      close: true\n    }];\n    this.buttons.push({\n      element: options.openFileButton,\n      eventName: \"openfile\",\n      close: true\n    });\n    this.items = {\n      firstPage: options.firstPageButton,\n      lastPage: options.lastPageButton,\n      pageRotateCw: options.pageRotateCwButton,\n      pageRotateCcw: options.pageRotateCcwButton\n    };\n    this.eventBus = eventBus;\n    this.externalServices = externalServices;\n    this.opened = false;\n    _classPrivateMethodGet(this, _bindClickListeners, _bindClickListeners2).call(this);\n    _classPrivateMethodGet(this, _bindCursorToolsListener, _bindCursorToolsListener2).call(this, options);\n    _classPrivateMethodGet(this, _bindScrollModeListener, _bindScrollModeListener2).call(this, options);\n    _classPrivateMethodGet(this, _bindSpreadModeListener, _bindSpreadModeListener2).call(this, options);\n    this.reset();\n  }\n  get isOpen() {\n    return this.opened;\n  }\n  setPageNumber(pageNumber) {\n    this.pageNumber = pageNumber;\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this);\n  }\n  setPagesCount(pagesCount) {\n    this.pagesCount = pagesCount;\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this);\n  }\n  reset() {\n    this.pageNumber = 0;\n    this.pagesCount = 0;\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this);\n    this.eventBus.dispatch(\"secondarytoolbarreset\", {\n      source: this\n    });\n  }\n  open() {\n    if (this.opened) {\n      return;\n    }\n    this.opened = true;\n    this.toggleButton.classList.add(\"toggled\");\n    this.toggleButton.setAttribute(\"aria-expanded\", \"true\");\n    this.toolbar.classList.remove(\"hidden\");\n  }\n  close() {\n    if (!this.opened) {\n      return;\n    }\n    this.opened = false;\n    this.toolbar.classList.add(\"hidden\");\n    this.toggleButton.classList.remove(\"toggled\");\n    this.toggleButton.setAttribute(\"aria-expanded\", \"false\");\n  }\n  toggle() {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n}\nexports.SecondaryToolbar = SecondaryToolbar;\nfunction _updateUIState2() {\n  this.items.firstPage.disabled = this.pageNumber <= 1;\n  this.items.lastPage.disabled = this.pageNumber >= this.pagesCount;\n  this.items.pageRotateCw.disabled = this.pagesCount === 0;\n  this.items.pageRotateCcw.disabled = this.pagesCount === 0;\n}\nfunction _bindClickListeners2() {\n  this.toggleButton.addEventListener(\"click\", this.toggle.bind(this));\n  for (const {\n    element,\n    eventName,\n    close,\n    eventDetails\n  } of this.buttons) {\n    element.addEventListener(\"click\", evt => {\n      if (eventName !== null) {\n        const details = {\n          source: this\n        };\n        for (const property in eventDetails) {\n          details[property] = eventDetails[property];\n        }\n        this.eventBus.dispatch(eventName, details);\n      }\n      if (close) {\n        this.close();\n      }\n      this.externalServices.reportTelemetry({\n        type: \"buttons\",\n        data: {\n          id: element.id\n        }\n      });\n    });\n  }\n}\nfunction _bindCursorToolsListener2(_ref) {\n  let {\n    cursorSelectToolButton,\n    cursorHandToolButton\n  } = _ref;\n  this.eventBus._on(\"cursortoolchanged\", function (_ref2) {\n    let {\n      tool\n    } = _ref2;\n    const isSelect = tool === _pdf_cursor_tools.CursorTool.SELECT,\n      isHand = tool === _pdf_cursor_tools.CursorTool.HAND;\n    cursorSelectToolButton.classList.toggle(\"toggled\", isSelect);\n    cursorHandToolButton.classList.toggle(\"toggled\", isHand);\n    cursorSelectToolButton.setAttribute(\"aria-checked\", isSelect);\n    cursorHandToolButton.setAttribute(\"aria-checked\", isHand);\n  });\n}\nfunction _bindScrollModeListener2(_ref3) {\n  let {\n    scrollPageButton,\n    scrollVerticalButton,\n    scrollHorizontalButton,\n    scrollWrappedButton,\n    spreadNoneButton,\n    spreadOddButton,\n    spreadEvenButton\n  } = _ref3;\n  const scrollModeChanged = _ref4 => {\n    let {\n      mode\n    } = _ref4;\n    const isPage = mode === _ui_utils.ScrollMode.PAGE,\n      isVertical = mode === _ui_utils.ScrollMode.VERTICAL,\n      isHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL,\n      isWrapped = mode === _ui_utils.ScrollMode.WRAPPED;\n    scrollPageButton.classList.toggle(\"toggled\", isPage);\n    scrollVerticalButton.classList.toggle(\"toggled\", isVertical);\n    scrollHorizontalButton.classList.toggle(\"toggled\", isHorizontal);\n    scrollWrappedButton.classList.toggle(\"toggled\", isWrapped);\n    scrollPageButton.setAttribute(\"aria-checked\", isPage);\n    scrollVerticalButton.setAttribute(\"aria-checked\", isVertical);\n    scrollHorizontalButton.setAttribute(\"aria-checked\", isHorizontal);\n    scrollWrappedButton.setAttribute(\"aria-checked\", isWrapped);\n    const forceScrollModePage = this.pagesCount > _pdf_viewer.PagesCountLimit.FORCE_SCROLL_MODE_PAGE;\n    scrollPageButton.disabled = forceScrollModePage;\n    scrollVerticalButton.disabled = forceScrollModePage;\n    scrollHorizontalButton.disabled = forceScrollModePage;\n    scrollWrappedButton.disabled = forceScrollModePage;\n    spreadNoneButton.disabled = isHorizontal;\n    spreadOddButton.disabled = isHorizontal;\n    spreadEvenButton.disabled = isHorizontal;\n  };\n  this.eventBus._on(\"scrollmodechanged\", scrollModeChanged);\n  this.eventBus._on(\"secondarytoolbarreset\", evt => {\n    if (evt.source === this) {\n      scrollModeChanged({\n        mode: _ui_utils.ScrollMode.VERTICAL\n      });\n    }\n  });\n}\nfunction _bindSpreadModeListener2(_ref5) {\n  let {\n    spreadNoneButton,\n    spreadOddButton,\n    spreadEvenButton\n  } = _ref5;\n  function spreadModeChanged(_ref6) {\n    let {\n      mode\n    } = _ref6;\n    const isNone = mode === _ui_utils.SpreadMode.NONE,\n      isOdd = mode === _ui_utils.SpreadMode.ODD,\n      isEven = mode === _ui_utils.SpreadMode.EVEN;\n    spreadNoneButton.classList.toggle(\"toggled\", isNone);\n    spreadOddButton.classList.toggle(\"toggled\", isOdd);\n    spreadEvenButton.classList.toggle(\"toggled\", isEven);\n    spreadNoneButton.setAttribute(\"aria-checked\", isNone);\n    spreadOddButton.setAttribute(\"aria-checked\", isOdd);\n    spreadEvenButton.setAttribute(\"aria-checked\", isEven);\n  }\n  this.eventBus._on(\"spreadmodechanged\", spreadModeChanged);\n  this.eventBus._on(\"secondarytoolbarreset\", evt => {\n    if (evt.source === this) {\n      spreadModeChanged({\n        mode: _ui_utils.SpreadMode.NONE\n      });\n    }\n  });\n}\n\n/***/ }),\n/* 40 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.Toolbar = void 0;\nvar _ui_utils = __webpack_require__(1);\nvar _pdfjsLib = __webpack_require__(5);\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nconst PAGE_NUMBER_LOADING_INDICATOR = \"visiblePageIsLoading\";\nvar _wasLocalized = /*#__PURE__*/new WeakMap();\nvar _bindListeners = /*#__PURE__*/new WeakSet();\nvar _bindEditorToolsListener = /*#__PURE__*/new WeakSet();\nvar _updateUIState = /*#__PURE__*/new WeakSet();\nvar _adjustScaleWidth = /*#__PURE__*/new WeakSet();\nclass Toolbar {\n  constructor(_options, eventBus, _l10n) {\n    _classPrivateMethodInitSpec(this, _adjustScaleWidth);\n    _classPrivateMethodInitSpec(this, _updateUIState);\n    _classPrivateMethodInitSpec(this, _bindEditorToolsListener);\n    _classPrivateMethodInitSpec(this, _bindListeners);\n    _classPrivateFieldInitSpec(this, _wasLocalized, {\n      writable: true,\n      value: false\n    });\n    this.toolbar = _options.container;\n    this.eventBus = eventBus;\n    this.l10n = _l10n;\n    this.buttons = [{\n      element: _options.previous,\n      eventName: \"previouspage\"\n    }, {\n      element: _options.next,\n      eventName: \"nextpage\"\n    }, {\n      element: _options.zoomIn,\n      eventName: \"zoomin\"\n    }, {\n      element: _options.zoomOut,\n      eventName: \"zoomout\"\n    }, {\n      element: _options.print,\n      eventName: \"print\"\n    }, {\n      element: _options.download,\n      eventName: \"download\"\n    }, {\n      element: _options.editorFreeTextButton,\n      eventName: \"switchannotationeditormode\",\n      eventDetails: {\n        get mode() {\n          const {\n            classList\n          } = _options.editorFreeTextButton;\n          return classList.contains(\"toggled\") ? _pdfjsLib.AnnotationEditorType.NONE : _pdfjsLib.AnnotationEditorType.FREETEXT;\n        }\n      }\n    }, {\n      element: _options.editorInkButton,\n      eventName: \"switchannotationeditormode\",\n      eventDetails: {\n        get mode() {\n          const {\n            classList\n          } = _options.editorInkButton;\n          return classList.contains(\"toggled\") ? _pdfjsLib.AnnotationEditorType.NONE : _pdfjsLib.AnnotationEditorType.INK;\n        }\n      }\n    }];\n    this.buttons.push({\n      element: _options.openFile,\n      eventName: \"openfile\"\n    });\n    this.items = {\n      numPages: _options.numPages,\n      pageNumber: _options.pageNumber,\n      scaleSelect: _options.scaleSelect,\n      customScaleOption: _options.customScaleOption,\n      previous: _options.previous,\n      next: _options.next,\n      zoomIn: _options.zoomIn,\n      zoomOut: _options.zoomOut\n    };\n    _classPrivateMethodGet(this, _bindListeners, _bindListeners2).call(this, _options);\n    this.reset();\n  }\n  setPageNumber(pageNumber, pageLabel) {\n    this.pageNumber = pageNumber;\n    this.pageLabel = pageLabel;\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, false);\n  }\n  setPagesCount(pagesCount, hasPageLabels) {\n    this.pagesCount = pagesCount;\n    this.hasPageLabels = hasPageLabels;\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, true);\n  }\n  setPageScale(pageScaleValue, pageScale) {\n    this.pageScaleValue = (pageScaleValue || pageScale).toString();\n    this.pageScale = pageScale;\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, false);\n  }\n  reset() {\n    this.pageNumber = 0;\n    this.pageLabel = null;\n    this.hasPageLabels = false;\n    this.pagesCount = 0;\n    this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\n    this.pageScale = _ui_utils.DEFAULT_SCALE;\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, true);\n    this.updateLoadingIndicatorState();\n    this.eventBus.dispatch(\"toolbarreset\", {\n      source: this\n    });\n  }\n  updateLoadingIndicatorState() {\n    let loading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    const {\n      pageNumber\n    } = this.items;\n    pageNumber.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading);\n  }\n}\nexports.Toolbar = Toolbar;\nfunction _bindListeners2(options) {\n  const {\n    pageNumber,\n    scaleSelect\n  } = this.items;\n  const self = this;\n  for (const {\n    element,\n    eventName,\n    eventDetails\n  } of this.buttons) {\n    element.addEventListener(\"click\", evt => {\n      if (eventName !== null) {\n        const details = {\n          source: this\n        };\n        if (eventDetails) {\n          for (const property in eventDetails) {\n            details[property] = eventDetails[property];\n          }\n        }\n        this.eventBus.dispatch(eventName, details);\n      }\n    });\n  }\n  pageNumber.addEventListener(\"click\", function () {\n    this.select();\n  });\n  pageNumber.addEventListener(\"change\", function () {\n    self.eventBus.dispatch(\"pagenumberchanged\", {\n      source: self,\n      value: this.value\n    });\n  });\n  scaleSelect.addEventListener(\"change\", function () {\n    if (this.value === \"custom\") {\n      return;\n    }\n    self.eventBus.dispatch(\"scalechanged\", {\n      source: self,\n      value: this.value\n    });\n  });\n  scaleSelect.addEventListener(\"click\", function (evt) {\n    const target = evt.target;\n    if (this.value === self.pageScaleValue && target.tagName.toUpperCase() === \"OPTION\") {\n      this.blur();\n    }\n  });\n  scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;\n  this.eventBus._on(\"localized\", () => {\n    _classPrivateFieldSet(this, _wasLocalized, true);\n    _classPrivateMethodGet(this, _adjustScaleWidth, _adjustScaleWidth2).call(this);\n    _classPrivateMethodGet(this, _updateUIState, _updateUIState2).call(this, true);\n  });\n  _classPrivateMethodGet(this, _bindEditorToolsListener, _bindEditorToolsListener2).call(this, options);\n}\nfunction _bindEditorToolsListener2(_ref) {\n  let {\n    editorFreeTextButton,\n    editorFreeTextParamsToolbar,\n    editorInkButton,\n    editorInkParamsToolbar\n  } = _ref;\n  const editorModeChanged = function (evt) {\n    let disableButtons = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    const editorButtons = [{\n      mode: _pdfjsLib.AnnotationEditorType.FREETEXT,\n      button: editorFreeTextButton,\n      toolbar: editorFreeTextParamsToolbar\n    }, {\n      mode: _pdfjsLib.AnnotationEditorType.INK,\n      button: editorInkButton,\n      toolbar: editorInkParamsToolbar\n    }];\n    for (const {\n      mode,\n      button,\n      toolbar\n    } of editorButtons) {\n      const checked = mode === evt.mode;\n      button.classList.toggle(\"toggled\", checked);\n      button.setAttribute(\"aria-checked\", checked);\n      button.disabled = disableButtons;\n      toolbar === null || toolbar === void 0 ? void 0 : toolbar.classList.toggle(\"hidden\", !checked);\n    }\n  };\n  this.eventBus._on(\"annotationeditormodechanged\", editorModeChanged);\n  this.eventBus._on(\"toolbarreset\", evt => {\n    if (evt.source === this) {\n      editorModeChanged({\n        mode: _pdfjsLib.AnnotationEditorType.NONE\n      }, true);\n    }\n  });\n}\nfunction _updateUIState2() {\n  let resetNumPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  if (!_classPrivateFieldGet(this, _wasLocalized)) {\n    return;\n  }\n  const {\n    pageNumber,\n    pagesCount,\n    pageScaleValue,\n    pageScale,\n    items\n  } = this;\n  if (resetNumPages) {\n    if (this.hasPageLabels) {\n      items.pageNumber.type = \"text\";\n    } else {\n      items.pageNumber.type = \"number\";\n      this.l10n.get(\"of_pages\", {\n        pagesCount\n      }).then(msg => {\n        items.numPages.textContent = msg;\n      });\n    }\n    items.pageNumber.max = pagesCount;\n  }\n  if (this.hasPageLabels) {\n    items.pageNumber.value = this.pageLabel;\n    this.l10n.get(\"page_of_pages\", {\n      pageNumber,\n      pagesCount\n    }).then(msg => {\n      items.numPages.textContent = msg;\n    });\n  } else {\n    items.pageNumber.value = pageNumber;\n  }\n  items.previous.disabled = pageNumber <= 1;\n  items.next.disabled = pageNumber >= pagesCount;\n  items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;\n  items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;\n  this.l10n.get(\"page_scale_percent\", {\n    scale: Math.round(pageScale * 10000) / 100\n  }).then(msg => {\n    let predefinedValueFound = false;\n    for (const option of items.scaleSelect.options) {\n      if (option.value !== pageScaleValue) {\n        option.selected = false;\n        continue;\n      }\n      option.selected = true;\n      predefinedValueFound = true;\n    }\n    if (!predefinedValueFound) {\n      items.customScaleOption.textContent = msg;\n      items.customScaleOption.selected = true;\n    }\n  });\n}\nasync function _adjustScaleWidth2() {\n  const {\n    items,\n    l10n\n  } = this;\n  const predefinedValuesPromise = Promise.all([l10n.get(\"page_scale_auto\"), l10n.get(\"page_scale_actual\"), l10n.get(\"page_scale_fit\"), l10n.get(\"page_scale_width\")]);\n  await _ui_utils.animationStarted;\n  const style = getComputedStyle(items.scaleSelect);\n  const scaleSelectWidth = parseFloat(style.getPropertyValue(\"--scale-select-width\"));\n  const canvas = document.createElement(\"canvas\");\n  const ctx = canvas.getContext(\"2d\", {\n    alpha: false\n  });\n  ctx.font = `${style.fontSize} ${style.fontFamily}`;\n  let maxWidth = 0;\n  for (const predefinedValue of await predefinedValuesPromise) {\n    const {\n      width\n    } = ctx.measureText(predefinedValue);\n    if (width > maxWidth) {\n      maxWidth = width;\n    }\n  }\n  maxWidth += 0.3 * scaleSelectWidth;\n  if (maxWidth > scaleSelectWidth) {\n    _ui_utils.docStyle.setProperty(\"--scale-select-width\", `${maxWidth}px`);\n  }\n  canvas.width = 0;\n  canvas.height = 0;\n}\n\n/***/ }),\n/* 41 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.ViewHistory = void 0;\nconst DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;\nclass ViewHistory {\n  constructor(fingerprint) {\n    let cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_VIEW_HISTORY_CACHE_SIZE;\n    this.fingerprint = fingerprint;\n    this.cacheSize = cacheSize;\n    this._initializedPromise = this._readFromStorage().then(databaseStr => {\n      const database = JSON.parse(databaseStr || \"{}\");\n      let index = -1;\n      if (!Array.isArray(database.files)) {\n        database.files = [];\n      } else {\n        while (database.files.length >= this.cacheSize) {\n          database.files.shift();\n        }\n        for (let i = 0, ii = database.files.length; i < ii; i++) {\n          const branch = database.files[i];\n          if (branch.fingerprint === this.fingerprint) {\n            index = i;\n            break;\n          }\n        }\n      }\n      if (index === -1) {\n        index = database.files.push({\n          fingerprint: this.fingerprint\n        }) - 1;\n      }\n      this.file = database.files[index];\n      this.database = database;\n    });\n  }\n  async _writeToStorage() {\n    const databaseStr = JSON.stringify(this.database);\n    localStorage.setItem(\"pdfjs.history\", databaseStr);\n  }\n  async _readFromStorage() {\n    return localStorage.getItem(\"pdfjs.history\");\n  }\n  async set(name, val) {\n    await this._initializedPromise;\n    this.file[name] = val;\n    return this._writeToStorage();\n  }\n  async setMultiple(properties) {\n    await this._initializedPromise;\n    for (const name in properties) {\n      this.file[name] = properties[name];\n    }\n    return this._writeToStorage();\n  }\n  async get(name, defaultValue) {\n    await this._initializedPromise;\n    const val = this.file[name];\n    return val !== undefined ? val : defaultValue;\n  }\n  async getMultiple(properties) {\n    await this._initializedPromise;\n    const values = Object.create(null);\n    for (const name in properties) {\n      const val = this.file[name];\n      values[name] = val !== undefined ? val : properties[name];\n    }\n    return values;\n  }\n}\nexports.ViewHistory = ViewHistory;\n\n/***/ }),\n/* 42 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.GenericCom = void 0;\nvar _app = __webpack_require__(4);\nvar _preferences = __webpack_require__(43);\nvar _download_manager = __webpack_require__(44);\nvar _genericl10n = __webpack_require__(45);\nvar _generic_scripting = __webpack_require__(47);\n;\nconst GenericCom = {};\nexports.GenericCom = GenericCom;\nclass GenericPreferences extends _preferences.BasePreferences {\n  async _writeToStorage(prefObj) {\n    localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n  }\n  async _readFromStorage(prefObj) {\n    return JSON.parse(localStorage.getItem(\"pdfjs.preferences\"));\n  }\n}\nclass GenericExternalServices extends _app.DefaultExternalServices {\n  static createDownloadManager(options) {\n    return new _download_manager.DownloadManager();\n  }\n  static createPreferences() {\n    return new GenericPreferences();\n  }\n  static createL10n(_ref) {\n    let {\n      locale = \"en-US\"\n    } = _ref;\n    return new _genericl10n.GenericL10n(locale);\n  }\n  static createScripting(_ref2) {\n    let {\n      sandboxBundleSrc\n    } = _ref2;\n    return new _generic_scripting.GenericScripting(sandboxBundleSrc);\n  }\n}\n_app.PDFViewerApplication.externalServices = GenericExternalServices;\n\n/***/ }),\n/* 43 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.BasePreferences = void 0;\nvar _app_options = __webpack_require__(2);\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\nvar _defaults = /*#__PURE__*/new WeakMap();\nvar _prefs = /*#__PURE__*/new WeakMap();\nvar _initializedPromise = /*#__PURE__*/new WeakMap();\nclass BasePreferences {\n  constructor() {\n    _classPrivateFieldInitSpec(this, _defaults, {\n      writable: true,\n      value: Object.freeze({\n        \"annotationEditorMode\": 0,\n        \"annotationMode\": 2,\n        \"cursorToolOnLoad\": 0,\n        \"defaultZoomValue\": \"\",\n        \"disablePageLabels\": false,\n        \"enablePermissions\": false,\n        \"enablePrintAutoRotate\": true,\n        \"enableScripting\": true,\n        \"externalLinkTarget\": 0,\n        \"historyUpdateUrl\": false,\n        \"ignoreDestinationZoom\": false,\n        \"forcePageColors\": false,\n        \"pageColorsBackground\": \"Canvas\",\n        \"pageColorsForeground\": \"CanvasText\",\n        \"pdfBugEnabled\": false,\n        \"sidebarViewOnLoad\": -1,\n        \"scrollModeOnLoad\": -1,\n        \"spreadModeOnLoad\": -1,\n        \"textLayerMode\": 1,\n        \"useOnlyCssZoom\": false,\n        \"viewerCssTheme\": 0,\n        \"viewOnLoad\": 0,\n        \"disableAutoFetch\": false,\n        \"disableFontFace\": false,\n        \"disableRange\": false,\n        \"disableStream\": false,\n        \"enableXfa\": true,\n        \"renderer\": \"canvas\"\n      })\n    });\n    _classPrivateFieldInitSpec(this, _prefs, {\n      writable: true,\n      value: Object.create(null)\n    });\n    _classPrivateFieldInitSpec(this, _initializedPromise, {\n      writable: true,\n      value: null\n    });\n    if (this.constructor === BasePreferences) {\n      throw new Error(\"Cannot initialize BasePreferences.\");\n    }\n    _classPrivateFieldSet(this, _initializedPromise, this._readFromStorage(_classPrivateFieldGet(this, _defaults)).then(prefs => {\n      for (const name in _classPrivateFieldGet(this, _defaults)) {\n        const prefValue = prefs === null || prefs === void 0 ? void 0 : prefs[name];\n        if (typeof prefValue === typeof _classPrivateFieldGet(this, _defaults)[name]) {\n          _classPrivateFieldGet(this, _prefs)[name] = prefValue;\n        }\n      }\n    }));\n  }\n  async _writeToStorage(prefObj) {\n    throw new Error(\"Not implemented: _writeToStorage\");\n  }\n  async _readFromStorage(prefObj) {\n    throw new Error(\"Not implemented: _readFromStorage\");\n  }\n  async reset() {\n    await _classPrivateFieldGet(this, _initializedPromise);\n    const prefs = _classPrivateFieldGet(this, _prefs);\n    _classPrivateFieldSet(this, _prefs, Object.create(null));\n    return this._writeToStorage(_classPrivateFieldGet(this, _defaults)).catch(reason => {\n      _classPrivateFieldSet(this, _prefs, prefs);\n      throw reason;\n    });\n  }\n  async set(name, value) {\n    await _classPrivateFieldGet(this, _initializedPromise);\n    const defaultValue = _classPrivateFieldGet(this, _defaults)[name],\n      prefs = _classPrivateFieldGet(this, _prefs);\n    if (defaultValue === undefined) {\n      throw new Error(`Set preference: \"${name}\" is undefined.`);\n    } else if (value === undefined) {\n      throw new Error(\"Set preference: no value is specified.\");\n    }\n    const valueType = typeof value,\n      defaultType = typeof defaultValue;\n    if (valueType !== defaultType) {\n      if (valueType === \"number\" && defaultType === \"string\") {\n        value = value.toString();\n      } else {\n        throw new Error(`Set preference: \"${value}\" is a ${valueType}, expected a ${defaultType}.`);\n      }\n    } else {\n      if (valueType === \"number\" && !Number.isInteger(value)) {\n        throw new Error(`Set preference: \"${value}\" must be an integer.`);\n      }\n    }\n    _classPrivateFieldGet(this, _prefs)[name] = value;\n    return this._writeToStorage(_classPrivateFieldGet(this, _prefs)).catch(reason => {\n      _classPrivateFieldSet(this, _prefs, prefs);\n      throw reason;\n    });\n  }\n  async get(name) {\n    await _classPrivateFieldGet(this, _initializedPromise);\n    const defaultValue = _classPrivateFieldGet(this, _defaults)[name];\n    if (defaultValue === undefined) {\n      throw new Error(`Get preference: \"${name}\" is undefined.`);\n    }\n    return _classPrivateFieldGet(this, _prefs)[name] ?? defaultValue;\n  }\n  async getAll() {\n    await _classPrivateFieldGet(this, _initializedPromise);\n    const obj = Object.create(null);\n    for (const name in _classPrivateFieldGet(this, _defaults)) {\n      obj[name] = _classPrivateFieldGet(this, _prefs)[name] ?? _classPrivateFieldGet(this, _defaults)[name];\n    }\n    return obj;\n  }\n}\nexports.BasePreferences = BasePreferences;\n\n/***/ }),\n/* 44 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.DownloadManager = void 0;\nvar _pdfjsLib = __webpack_require__(5);\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n;\nfunction download(blobUrl, filename) {\n  const a = document.createElement(\"a\");\n  if (!a.click) {\n    throw new Error('DownloadManager: \"a.click()\" is not supported.');\n  }\n  a.href = blobUrl;\n  a.target = \"_parent\";\n  if (\"download\" in a) {\n    a.download = filename;\n  }\n  (document.body || document.documentElement).append(a);\n  a.click();\n  a.remove();\n}\nvar _openBlobUrls = /*#__PURE__*/new WeakMap();\nclass DownloadManager {\n  constructor() {\n    _classPrivateFieldInitSpec(this, _openBlobUrls, {\n      writable: true,\n      value: new WeakMap()\n    });\n  }\n  downloadUrl(url, filename) {\n    if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, \"http://example.com\")) {\n      console.error(`downloadUrl - not a valid URL: ${url}`);\n      return;\n    }\n    download(url + \"#pdfjs.action=download\", filename);\n  }\n  downloadData(data, filename, contentType) {\n    const blobUrl = URL.createObjectURL(new Blob([data], {\n      type: contentType\n    }));\n    download(blobUrl, filename);\n  }\n  openOrDownloadData(element, data, filename) {\n    const isPdfData = (0, _pdfjsLib.isPdfFile)(filename);\n    const contentType = isPdfData ? \"application/pdf\" : \"\";\n    if (isPdfData) {\n      let blobUrl = _classPrivateFieldGet(this, _openBlobUrls).get(element);\n      if (!blobUrl) {\n        blobUrl = URL.createObjectURL(new Blob([data], {\n          type: contentType\n        }));\n        _classPrivateFieldGet(this, _openBlobUrls).set(element, blobUrl);\n      }\n      let viewerUrl;\n      viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n      try {\n        window.open(viewerUrl);\n        return true;\n      } catch (ex) {\n        console.error(`openOrDownloadData: ${ex}`);\n        URL.revokeObjectURL(blobUrl);\n        _classPrivateFieldGet(this, _openBlobUrls).delete(element);\n      }\n    }\n    this.downloadData(data, filename, contentType);\n    return false;\n  }\n  download(blob, url, filename) {\n    const blobUrl = URL.createObjectURL(blob);\n    download(blobUrl, filename);\n  }\n}\nexports.DownloadManager = DownloadManager;\n\n/***/ }),\n/* 45 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.GenericL10n = void 0;\n__webpack_require__(46);\nvar _l10n_utils = __webpack_require__(31);\nconst webL10n = document.webL10n;\nclass GenericL10n {\n  constructor(lang) {\n    this._lang = lang;\n    this._ready = new Promise((resolve, reject) => {\n      webL10n.setLanguage((0, _l10n_utils.fixupLangCode)(lang), () => {\n        resolve(webL10n);\n      });\n    });\n  }\n  async getLanguage() {\n    const l10n = await this._ready;\n    return l10n.getLanguage();\n  }\n  async getDirection() {\n    const l10n = await this._ready;\n    return l10n.getDirection();\n  }\n  async get(key) {\n    let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    let fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : (0, _l10n_utils.getL10nFallback)(key, args);\n    const l10n = await this._ready;\n    return l10n.get(key, args, fallback);\n  }\n  async translate(element) {\n    const l10n = await this._ready;\n    return l10n.translate(element);\n  }\n}\nexports.GenericL10n = GenericL10n;\n\n/***/ }),\n/* 46 */\n/***/ (() => {\n\n\n\ndocument.webL10n = function (window, document, undefined) {\n  var gL10nData = {};\n  var gTextData = '';\n  var gTextProp = 'textContent';\n  var gLanguage = '';\n  var gMacros = {};\n  var gReadyState = 'loading';\n  var gAsyncResourceLoading = true;\n  function getL10nResourceLinks() {\n    return document.querySelectorAll('link[type=\"application/l10n\"]');\n  }\n  function getL10nDictionary() {\n    var script = document.querySelector('script[type=\"application/l10n\"]');\n    return script ? JSON.parse(script.innerHTML) : null;\n  }\n  function getTranslatableChildren(element) {\n    return element ? element.querySelectorAll('*[data-l10n-id]') : [];\n  }\n  function getL10nAttributes(element) {\n    if (!element) return {};\n    var l10nId = element.getAttribute('data-l10n-id');\n    var l10nArgs = element.getAttribute('data-l10n-args');\n    var args = {};\n    if (l10nArgs) {\n      try {\n        args = JSON.parse(l10nArgs);\n      } catch (e) {\n        console.warn('could not parse arguments for #' + l10nId);\n      }\n    }\n    return {\n      id: l10nId,\n      args: args\n    };\n  }\n  function xhrLoadText(url, onSuccess, onFailure) {\n    onSuccess = onSuccess || function _onSuccess(data) {};\n    onFailure = onFailure || function _onFailure() {};\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, gAsyncResourceLoading);\n    if (xhr.overrideMimeType) {\n      xhr.overrideMimeType('text/plain; charset=utf-8');\n    }\n    xhr.onreadystatechange = function () {\n      if (xhr.readyState == 4) {\n        if (xhr.status == 200 || xhr.status === 0) {\n          onSuccess(xhr.responseText);\n        } else {\n          onFailure();\n        }\n      }\n    };\n    xhr.onerror = onFailure;\n    xhr.ontimeout = onFailure;\n    try {\n      xhr.send(null);\n    } catch (e) {\n      onFailure();\n    }\n  }\n  function parseResource(href, lang, successCallback, failureCallback) {\n    var baseURL = href.replace(/[^\\/]*$/, '') || './';\n    function evalString(text) {\n      if (text.lastIndexOf('\\\\') < 0) return text;\n      return text.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\n/g, '\\n').replace(/\\\\r/g, '\\r').replace(/\\\\t/g, '\\t').replace(/\\\\b/g, '\\b').replace(/\\\\f/g, '\\f').replace(/\\\\{/g, '{').replace(/\\\\}/g, '}').replace(/\\\\\"/g, '\"').replace(/\\\\'/g, \"'\");\n    }\n    function parseProperties(text, parsedPropertiesCallback) {\n      var dictionary = {};\n      var reBlank = /^\\s*|\\s*$/;\n      var reComment = /^\\s*#|^\\s*$/;\n      var reSection = /^\\s*\\[(.*)\\]\\s*$/;\n      var reImport = /^\\s*@import\\s+url\\((.*)\\)\\s*$/i;\n      var reSplit = /^([^=\\s]*)\\s*=\\s*(.+)$/;\n      function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {\n        var entries = rawText.replace(reBlank, '').split(/[\\r\\n]+/);\n        var currentLang = '*';\n        var genericLang = lang.split('-', 1)[0];\n        var skipLang = false;\n        var match = '';\n        function nextEntry() {\n          while (true) {\n            if (!entries.length) {\n              parsedRawLinesCallback();\n              return;\n            }\n            var line = entries.shift();\n            if (reComment.test(line)) continue;\n            if (extendedSyntax) {\n              match = reSection.exec(line);\n              if (match) {\n                currentLang = match[1].toLowerCase();\n                skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang;\n                continue;\n              } else if (skipLang) {\n                continue;\n              }\n              match = reImport.exec(line);\n              if (match) {\n                loadImport(baseURL + match[1], nextEntry);\n                return;\n              }\n            }\n            var tmp = line.match(reSplit);\n            if (tmp && tmp.length == 3) {\n              dictionary[tmp[1]] = evalString(tmp[2]);\n            }\n          }\n        }\n        nextEntry();\n      }\n      function loadImport(url, callback) {\n        xhrLoadText(url, function (content) {\n          parseRawLines(content, false, callback);\n        }, function () {\n          console.warn(url + ' not found.');\n          callback();\n        });\n      }\n      parseRawLines(text, true, function () {\n        parsedPropertiesCallback(dictionary);\n      });\n    }\n    xhrLoadText(href, function (response) {\n      gTextData += response;\n      parseProperties(response, function (data) {\n        for (var key in data) {\n          var id,\n            prop,\n            index = key.lastIndexOf('.');\n          if (index > 0) {\n            id = key.substring(0, index);\n            prop = key.substring(index + 1);\n          } else {\n            id = key;\n            prop = gTextProp;\n          }\n          if (!gL10nData[id]) {\n            gL10nData[id] = {};\n          }\n          gL10nData[id][prop] = data[key];\n        }\n        if (successCallback) {\n          successCallback();\n        }\n      });\n    }, failureCallback);\n  }\n  function loadLocale(lang, callback) {\n    if (lang) {\n      lang = lang.toLowerCase();\n    }\n    callback = callback || function _callback() {};\n    clear();\n    gLanguage = lang;\n    var langLinks = getL10nResourceLinks();\n    var langCount = langLinks.length;\n    if (langCount === 0) {\n      var dict = getL10nDictionary();\n      if (dict && dict.locales && dict.default_locale) {\n        console.log('using the embedded JSON directory, early way out');\n        gL10nData = dict.locales[lang];\n        if (!gL10nData) {\n          var defaultLocale = dict.default_locale.toLowerCase();\n          for (var anyCaseLang in dict.locales) {\n            anyCaseLang = anyCaseLang.toLowerCase();\n            if (anyCaseLang === lang) {\n              gL10nData = dict.locales[lang];\n              break;\n            } else if (anyCaseLang === defaultLocale) {\n              gL10nData = dict.locales[defaultLocale];\n            }\n          }\n        }\n        callback();\n      } else {\n        console.log('no resource to load, early way out');\n      }\n      gReadyState = 'complete';\n      return;\n    }\n    var onResourceLoaded = null;\n    var gResourceCount = 0;\n    onResourceLoaded = function () {\n      gResourceCount++;\n      if (gResourceCount >= langCount) {\n        callback();\n        gReadyState = 'complete';\n      }\n    };\n    function L10nResourceLink(link) {\n      var href = link.href;\n      this.load = function (lang, callback) {\n        parseResource(href, lang, callback, function () {\n          console.warn(href + ' not found.');\n          console.warn('\"' + lang + '\" resource not found');\n          gLanguage = '';\n          callback();\n        });\n      };\n    }\n    for (var i = 0; i < langCount; i++) {\n      var resource = new L10nResourceLink(langLinks[i]);\n      resource.load(lang, onResourceLoaded);\n    }\n  }\n  function clear() {\n    gL10nData = {};\n    gTextData = '';\n    gLanguage = '';\n  }\n  function getPluralRules(lang) {\n    var locales2rules = {\n      'af': 3,\n      'ak': 4,\n      'am': 4,\n      'ar': 1,\n      'asa': 3,\n      'az': 0,\n      'be': 11,\n      'bem': 3,\n      'bez': 3,\n      'bg': 3,\n      'bh': 4,\n      'bm': 0,\n      'bn': 3,\n      'bo': 0,\n      'br': 20,\n      'brx': 3,\n      'bs': 11,\n      'ca': 3,\n      'cgg': 3,\n      'chr': 3,\n      'cs': 12,\n      'cy': 17,\n      'da': 3,\n      'de': 3,\n      'dv': 3,\n      'dz': 0,\n      'ee': 3,\n      'el': 3,\n      'en': 3,\n      'eo': 3,\n      'es': 3,\n      'et': 3,\n      'eu': 3,\n      'fa': 0,\n      'ff': 5,\n      'fi': 3,\n      'fil': 4,\n      'fo': 3,\n      'fr': 5,\n      'fur': 3,\n      'fy': 3,\n      'ga': 8,\n      'gd': 24,\n      'gl': 3,\n      'gsw': 3,\n      'gu': 3,\n      'guw': 4,\n      'gv': 23,\n      'ha': 3,\n      'haw': 3,\n      'he': 2,\n      'hi': 4,\n      'hr': 11,\n      'hu': 0,\n      'id': 0,\n      'ig': 0,\n      'ii': 0,\n      'is': 3,\n      'it': 3,\n      'iu': 7,\n      'ja': 0,\n      'jmc': 3,\n      'jv': 0,\n      'ka': 0,\n      'kab': 5,\n      'kaj': 3,\n      'kcg': 3,\n      'kde': 0,\n      'kea': 0,\n      'kk': 3,\n      'kl': 3,\n      'km': 0,\n      'kn': 0,\n      'ko': 0,\n      'ksb': 3,\n      'ksh': 21,\n      'ku': 3,\n      'kw': 7,\n      'lag': 18,\n      'lb': 3,\n      'lg': 3,\n      'ln': 4,\n      'lo': 0,\n      'lt': 10,\n      'lv': 6,\n      'mas': 3,\n      'mg': 4,\n      'mk': 16,\n      'ml': 3,\n      'mn': 3,\n      'mo': 9,\n      'mr': 3,\n      'ms': 0,\n      'mt': 15,\n      'my': 0,\n      'nah': 3,\n      'naq': 7,\n      'nb': 3,\n      'nd': 3,\n      'ne': 3,\n      'nl': 3,\n      'nn': 3,\n      'no': 3,\n      'nr': 3,\n      'nso': 4,\n      'ny': 3,\n      'nyn': 3,\n      'om': 3,\n      'or': 3,\n      'pa': 3,\n      'pap': 3,\n      'pl': 13,\n      'ps': 3,\n      'pt': 3,\n      'rm': 3,\n      'ro': 9,\n      'rof': 3,\n      'ru': 11,\n      'rwk': 3,\n      'sah': 0,\n      'saq': 3,\n      'se': 7,\n      'seh': 3,\n      'ses': 0,\n      'sg': 0,\n      'sh': 11,\n      'shi': 19,\n      'sk': 12,\n      'sl': 14,\n      'sma': 7,\n      'smi': 7,\n      'smj': 7,\n      'smn': 7,\n      'sms': 7,\n      'sn': 3,\n      'so': 3,\n      'sq': 3,\n      'sr': 11,\n      'ss': 3,\n      'ssy': 3,\n      'st': 3,\n      'sv': 3,\n      'sw': 3,\n      'syr': 3,\n      'ta': 3,\n      'te': 3,\n      'teo': 3,\n      'th': 0,\n      'ti': 4,\n      'tig': 3,\n      'tk': 3,\n      'tl': 4,\n      'tn': 3,\n      'to': 0,\n      'tr': 0,\n      'ts': 3,\n      'tzm': 22,\n      'uk': 11,\n      'ur': 3,\n      've': 3,\n      'vi': 0,\n      'vun': 3,\n      'wa': 4,\n      'wae': 3,\n      'wo': 0,\n      'xh': 3,\n      'xog': 3,\n      'yo': 0,\n      'zh': 0,\n      'zu': 3\n    };\n    function isIn(n, list) {\n      return list.indexOf(n) !== -1;\n    }\n    function isBetween(n, start, end) {\n      return start <= n && n <= end;\n    }\n    var pluralRules = {\n      '0': function (n) {\n        return 'other';\n      },\n      '1': function (n) {\n        if (isBetween(n % 100, 3, 10)) return 'few';\n        if (n === 0) return 'zero';\n        if (isBetween(n % 100, 11, 99)) return 'many';\n        if (n == 2) return 'two';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '2': function (n) {\n        if (n !== 0 && n % 10 === 0) return 'many';\n        if (n == 2) return 'two';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '3': function (n) {\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '4': function (n) {\n        if (isBetween(n, 0, 1)) return 'one';\n        return 'other';\n      },\n      '5': function (n) {\n        if (isBetween(n, 0, 2) && n != 2) return 'one';\n        return 'other';\n      },\n      '6': function (n) {\n        if (n === 0) return 'zero';\n        if (n % 10 == 1 && n % 100 != 11) return 'one';\n        return 'other';\n      },\n      '7': function (n) {\n        if (n == 2) return 'two';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '8': function (n) {\n        if (isBetween(n, 3, 6)) return 'few';\n        if (isBetween(n, 7, 10)) return 'many';\n        if (n == 2) return 'two';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '9': function (n) {\n        if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '10': function (n) {\n        if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few';\n        if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one';\n        return 'other';\n      },\n      '11': function (n) {\n        if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';\n        if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many';\n        if (n % 10 == 1 && n % 100 != 11) return 'one';\n        return 'other';\n      },\n      '12': function (n) {\n        if (isBetween(n, 2, 4)) return 'few';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '13': function (n) {\n        if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';\n        if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '14': function (n) {\n        if (isBetween(n % 100, 3, 4)) return 'few';\n        if (n % 100 == 2) return 'two';\n        if (n % 100 == 1) return 'one';\n        return 'other';\n      },\n      '15': function (n) {\n        if (n === 0 || isBetween(n % 100, 2, 10)) return 'few';\n        if (isBetween(n % 100, 11, 19)) return 'many';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '16': function (n) {\n        if (n % 10 == 1 && n != 11) return 'one';\n        return 'other';\n      },\n      '17': function (n) {\n        if (n == 3) return 'few';\n        if (n === 0) return 'zero';\n        if (n == 6) return 'many';\n        if (n == 2) return 'two';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '18': function (n) {\n        if (n === 0) return 'zero';\n        if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one';\n        return 'other';\n      },\n      '19': function (n) {\n        if (isBetween(n, 2, 10)) return 'few';\n        if (isBetween(n, 0, 1)) return 'one';\n        return 'other';\n      },\n      '20': function (n) {\n        if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few';\n        if (n % 1000000 === 0 && n !== 0) return 'many';\n        if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two';\n        if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one';\n        return 'other';\n      },\n      '21': function (n) {\n        if (n === 0) return 'zero';\n        if (n == 1) return 'one';\n        return 'other';\n      },\n      '22': function (n) {\n        if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one';\n        return 'other';\n      },\n      '23': function (n) {\n        if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one';\n        return 'other';\n      },\n      '24': function (n) {\n        if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few';\n        if (isIn(n, [2, 12])) return 'two';\n        if (isIn(n, [1, 11])) return 'one';\n        return 'other';\n      }\n    };\n    var index = locales2rules[lang.replace(/-.*$/, '')];\n    if (!(index in pluralRules)) {\n      console.warn('plural form unknown for [' + lang + ']');\n      return function () {\n        return 'other';\n      };\n    }\n    return pluralRules[index];\n  }\n  gMacros.plural = function (str, param, key, prop) {\n    var n = parseFloat(param);\n    if (isNaN(n)) return str;\n    if (prop != gTextProp) return str;\n    if (!gMacros._pluralRules) {\n      gMacros._pluralRules = getPluralRules(gLanguage);\n    }\n    var index = '[' + gMacros._pluralRules(n) + ']';\n    if (n === 0 && key + '[zero]' in gL10nData) {\n      str = gL10nData[key + '[zero]'][prop];\n    } else if (n == 1 && key + '[one]' in gL10nData) {\n      str = gL10nData[key + '[one]'][prop];\n    } else if (n == 2 && key + '[two]' in gL10nData) {\n      str = gL10nData[key + '[two]'][prop];\n    } else if (key + index in gL10nData) {\n      str = gL10nData[key + index][prop];\n    } else if (key + '[other]' in gL10nData) {\n      str = gL10nData[key + '[other]'][prop];\n    }\n    return str;\n  };\n  function getL10nData(key, args, fallback) {\n    var data = gL10nData[key];\n    if (!data) {\n      console.warn('#' + key + ' is undefined.');\n      if (!fallback) {\n        return null;\n      }\n      data = fallback;\n    }\n    var rv = {};\n    for (var prop in data) {\n      var str = data[prop];\n      str = substIndexes(str, args, key, prop);\n      str = substArguments(str, args, key);\n      rv[prop] = str;\n    }\n    return rv;\n  }\n  function substIndexes(str, args, key, prop) {\n    var reIndex = /\\{\\[\\s*([a-zA-Z]+)\\(([a-zA-Z]+)\\)\\s*\\]\\}/;\n    var reMatch = reIndex.exec(str);\n    if (!reMatch || !reMatch.length) return str;\n    var macroName = reMatch[1];\n    var paramName = reMatch[2];\n    var param;\n    if (args && paramName in args) {\n      param = args[paramName];\n    } else if (paramName in gL10nData) {\n      param = gL10nData[paramName];\n    }\n    if (macroName in gMacros) {\n      var macro = gMacros[macroName];\n      str = macro(str, param, key, prop);\n    }\n    return str;\n  }\n  function substArguments(str, args, key) {\n    var reArgs = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\n    return str.replace(reArgs, function (matched_text, arg) {\n      if (args && arg in args) {\n        return args[arg];\n      }\n      if (arg in gL10nData) {\n        return gL10nData[arg];\n      }\n      console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');\n      return matched_text;\n    });\n  }\n  function translateElement(element) {\n    var l10n = getL10nAttributes(element);\n    if (!l10n.id) return;\n    var data = getL10nData(l10n.id, l10n.args);\n    if (!data) {\n      console.warn('#' + l10n.id + ' is undefined.');\n      return;\n    }\n    if (data[gTextProp]) {\n      if (getChildElementCount(element) === 0) {\n        element[gTextProp] = data[gTextProp];\n      } else {\n        var children = element.childNodes;\n        var found = false;\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i].nodeType === 3 && /\\S/.test(children[i].nodeValue)) {\n            if (found) {\n              children[i].nodeValue = '';\n            } else {\n              children[i].nodeValue = data[gTextProp];\n              found = true;\n            }\n          }\n        }\n        if (!found) {\n          var textNode = document.createTextNode(data[gTextProp]);\n          element.prepend(textNode);\n        }\n      }\n      delete data[gTextProp];\n    }\n    for (var k in data) {\n      element[k] = data[k];\n    }\n  }\n  function getChildElementCount(element) {\n    if (element.children) {\n      return element.children.length;\n    }\n    if (typeof element.childElementCount !== 'undefined') {\n      return element.childElementCount;\n    }\n    var count = 0;\n    for (var i = 0; i < element.childNodes.length; i++) {\n      count += element.nodeType === 1 ? 1 : 0;\n    }\n    return count;\n  }\n  function translateFragment(element) {\n    element = element || document.documentElement;\n    var children = getTranslatableChildren(element);\n    var elementCount = children.length;\n    for (var i = 0; i < elementCount; i++) {\n      translateElement(children[i]);\n    }\n    translateElement(element);\n  }\n  return {\n    get: function (key, args, fallbackString) {\n      var index = key.lastIndexOf('.');\n      var prop = gTextProp;\n      if (index > 0) {\n        prop = key.substring(index + 1);\n        key = key.substring(0, index);\n      }\n      var fallback;\n      if (fallbackString) {\n        fallback = {};\n        fallback[prop] = fallbackString;\n      }\n      var data = getL10nData(key, args, fallback);\n      if (data && prop in data) {\n        return data[prop];\n      }\n      return '{{' + key + '}}';\n    },\n    getData: function () {\n      return gL10nData;\n    },\n    getText: function () {\n      return gTextData;\n    },\n    getLanguage: function () {\n      return gLanguage;\n    },\n    setLanguage: function (lang, callback) {\n      loadLocale(lang, function () {\n        if (callback) callback();\n      });\n    },\n    getDirection: function () {\n      var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];\n      var shortCode = gLanguage.split('-', 1)[0];\n      return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr';\n    },\n    translate: translateFragment,\n    getReadyState: function () {\n      return gReadyState;\n    },\n    ready: function (callback) {\n      if (!callback) {\n        return;\n      } else if (gReadyState == 'complete' || gReadyState == 'interactive') {\n        window.setTimeout(function () {\n          callback();\n        });\n      } else if (document.addEventListener) {\n        document.addEventListener('localized', function once() {\n          document.removeEventListener('localized', once);\n          callback();\n        });\n      }\n    }\n  };\n}(window, document);\n\n/***/ }),\n/* 47 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.GenericScripting = void 0;\nexports.docPropertiesLookup = docPropertiesLookup;\nvar _pdfjsLib = __webpack_require__(5);\nasync function docPropertiesLookup(pdfDocument) {\n  const url = \"\",\n    baseUrl = url.split(\"#\")[0];\n  let {\n    info,\n    metadata,\n    contentDispositionFilename,\n    contentLength\n  } = await pdfDocument.getMetadata();\n  if (!contentLength) {\n    const {\n      length\n    } = await pdfDocument.getDownloadInfo();\n    contentLength = length;\n  }\n  return {\n    ...info,\n    baseURL: baseUrl,\n    filesize: contentLength,\n    filename: contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(url),\n    metadata: metadata === null || metadata === void 0 ? void 0 : metadata.getRaw(),\n    authors: metadata === null || metadata === void 0 ? void 0 : metadata.get(\"dc:creator\"),\n    numPages: pdfDocument.numPages,\n    URL: url\n  };\n}\nclass GenericScripting {\n  constructor(sandboxBundleSrc) {\n    this._ready = (0, _pdfjsLib.loadScript)(sandboxBundleSrc, true).then(() => {\n      return window.pdfjsSandbox.QuickJSSandbox();\n    });\n  }\n  async createSandbox(data) {\n    const sandbox = await this._ready;\n    sandbox.create(data);\n  }\n  async dispatchEventInSandbox(event) {\n    const sandbox = await this._ready;\n    setTimeout(() => sandbox.dispatchEvent(event), 0);\n  }\n  async destroySandbox() {\n    const sandbox = await this._ready;\n    sandbox.nukeSandbox();\n  }\n}\nexports.GenericScripting = GenericScripting;\n\n/***/ }),\n/* 48 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFPrintService = PDFPrintService;\nvar _pdfjsLib = __webpack_require__(5);\nvar _app = __webpack_require__(4);\nvar _print_utils = __webpack_require__(49);\nlet activeService = null;\nlet dialog = null;\nlet overlayManager = null;\nfunction renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) {\n  const scratchCanvas = activeService.scratchCanvas;\n  const PRINT_UNITS = printResolution / _pdfjsLib.PixelsPerInch.PDF;\n  scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);\n  scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);\n  const ctx = scratchCanvas.getContext(\"2d\");\n  ctx.save();\n  ctx.fillStyle = \"rgb(255, 255, 255)\";\n  ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);\n  ctx.restore();\n  return Promise.all([pdfDocument.getPage(pageNumber), printAnnotationStoragePromise]).then(function (_ref) {\n    let [pdfPage, printAnnotationStorage] = _ref;\n    const renderContext = {\n      canvasContext: ctx,\n      transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],\n      viewport: pdfPage.getViewport({\n        scale: 1,\n        rotation: size.rotation\n      }),\n      intent: \"print\",\n      annotationMode: _pdfjsLib.AnnotationMode.ENABLE_STORAGE,\n      optionalContentConfigPromise,\n      printAnnotationStorage\n    };\n    return pdfPage.render(renderContext).promise;\n  });\n}\nfunction PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution) {\n  let optionalContentConfigPromise = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n  let printAnnotationStoragePromise = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n  let l10n = arguments.length > 6 ? arguments[6] : undefined;\n  this.pdfDocument = pdfDocument;\n  this.pagesOverview = pagesOverview;\n  this.printContainer = printContainer;\n  this._printResolution = printResolution || 150;\n  this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig();\n  this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve();\n  this.l10n = l10n;\n  this.currentPage = -1;\n  this.scratchCanvas = document.createElement(\"canvas\");\n}\nPDFPrintService.prototype = {\n  layout() {\n    this.throwIfInactive();\n    const body = document.querySelector(\"body\");\n    body.setAttribute(\"data-pdfjsprinting\", true);\n    const hasEqualPageSizes = this.pagesOverview.every(function (size) {\n      return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height;\n    }, this);\n    if (!hasEqualPageSizes) {\n      console.warn(\"Not all pages have the same size. The printed \" + \"result may be incorrect!\");\n    }\n    this.pageStyleSheet = document.createElement(\"style\");\n    const pageSize = this.pagesOverview[0];\n    this.pageStyleSheet.textContent = \"@page { size: \" + pageSize.width + \"pt \" + pageSize.height + \"pt;}\";\n    body.append(this.pageStyleSheet);\n  },\n  destroy() {\n    if (activeService !== this) {\n      return;\n    }\n    this.printContainer.textContent = \"\";\n    const body = document.querySelector(\"body\");\n    body.removeAttribute(\"data-pdfjsprinting\");\n    if (this.pageStyleSheet) {\n      this.pageStyleSheet.remove();\n      this.pageStyleSheet = null;\n    }\n    this.scratchCanvas.width = this.scratchCanvas.height = 0;\n    this.scratchCanvas = null;\n    activeService = null;\n    ensureOverlay().then(function () {\n      if (overlayManager.active === dialog) {\n        overlayManager.close(dialog);\n      }\n    });\n  },\n  renderPages() {\n    if (this.pdfDocument.isPureXfa) {\n      (0, _print_utils.getXfaHtmlForPrinting)(this.printContainer, this.pdfDocument);\n      return Promise.resolve();\n    }\n    const pageCount = this.pagesOverview.length;\n    const renderNextPage = (resolve, reject) => {\n      this.throwIfInactive();\n      if (++this.currentPage >= pageCount) {\n        renderProgress(pageCount, pageCount, this.l10n);\n        resolve();\n        return;\n      }\n      const index = this.currentPage;\n      renderProgress(index, pageCount, this.l10n);\n      renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index], this._printResolution, this._optionalContentConfigPromise, this._printAnnotationStoragePromise).then(this.useRenderedPage.bind(this)).then(function () {\n        renderNextPage(resolve, reject);\n      }, reject);\n    };\n    return new Promise(renderNextPage);\n  },\n  useRenderedPage() {\n    this.throwIfInactive();\n    const img = document.createElement(\"img\");\n    const scratchCanvas = this.scratchCanvas;\n    if (\"toBlob\" in scratchCanvas) {\n      scratchCanvas.toBlob(function (blob) {\n        img.src = URL.createObjectURL(blob);\n      });\n    } else {\n      img.src = scratchCanvas.toDataURL();\n    }\n    const wrapper = document.createElement(\"div\");\n    wrapper.className = \"printedPage\";\n    wrapper.append(img);\n    this.printContainer.append(wrapper);\n    return new Promise(function (resolve, reject) {\n      img.onload = resolve;\n      img.onerror = reject;\n    });\n  },\n  performPrint() {\n    this.throwIfInactive();\n    return new Promise(resolve => {\n      setTimeout(() => {\n        if (!this.active) {\n          resolve();\n          return;\n        }\n        print.call(window);\n        setTimeout(resolve, 20);\n      }, 0);\n    });\n  },\n  get active() {\n    return this === activeService;\n  },\n  throwIfInactive() {\n    if (!this.active) {\n      throw new Error(\"This print request was cancelled or completed.\");\n    }\n  }\n};\nconst print = window.print;\nwindow.print = function () {\n  if (activeService) {\n    console.warn(\"Ignored window.print() because of a pending print job.\");\n    return;\n  }\n  ensureOverlay().then(function () {\n    if (activeService) {\n      overlayManager.open(dialog);\n    }\n  });\n  try {\n    dispatchEvent(\"beforeprint\");\n  } finally {\n    if (!activeService) {\n      console.error(\"Expected print service to be initialized.\");\n      ensureOverlay().then(function () {\n        if (overlayManager.active === dialog) {\n          overlayManager.close(dialog);\n        }\n      });\n      return;\n    }\n    const activeServiceOnEntry = activeService;\n    activeService.renderPages().then(function () {\n      return activeServiceOnEntry.performPrint();\n    }).catch(function () {}).then(function () {\n      if (activeServiceOnEntry.active) {\n        abort();\n      }\n    });\n  }\n};\nfunction dispatchEvent(eventType) {\n  const event = document.createEvent(\"CustomEvent\");\n  event.initCustomEvent(eventType, false, false, \"custom\");\n  window.dispatchEvent(event);\n}\nfunction abort() {\n  if (activeService) {\n    activeService.destroy();\n    dispatchEvent(\"afterprint\");\n  }\n}\nfunction renderProgress(index, total, l10n) {\n  dialog || (dialog = document.getElementById(\"printServiceDialog\"));\n  const progress = Math.round(100 * index / total);\n  const progressBar = dialog.querySelector(\"progress\");\n  const progressPerc = dialog.querySelector(\".relative-progress\");\n  progressBar.value = progress;\n  l10n.get(\"print_progress_percent\", {\n    progress\n  }).then(msg => {\n    progressPerc.textContent = msg;\n  });\n}\nwindow.addEventListener(\"keydown\", function (event) {\n  if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {\n    window.print();\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n}, true);\nif (\"onbeforeprint\" in window) {\n  const stopPropagationIfNeeded = function (event) {\n    if (event.detail !== \"custom\") {\n      event.stopImmediatePropagation();\n    }\n  };\n  window.addEventListener(\"beforeprint\", stopPropagationIfNeeded);\n  window.addEventListener(\"afterprint\", stopPropagationIfNeeded);\n}\nlet overlayPromise;\nfunction ensureOverlay() {\n  if (!overlayPromise) {\n    overlayManager = _app.PDFViewerApplication.overlayManager;\n    if (!overlayManager) {\n      throw new Error(\"The overlay manager has not yet been initialized.\");\n    }\n    dialog || (dialog = document.getElementById(\"printServiceDialog\"));\n    overlayPromise = overlayManager.register(dialog, true);\n    document.getElementById(\"printCancel\").onclick = abort;\n    dialog.addEventListener(\"close\", abort);\n  }\n  return overlayPromise;\n}\n_app.PDFPrintServiceFactory.instance = {\n  supportsPrinting: true,\n  createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise, l10n) {\n    if (activeService) {\n      throw new Error(\"The print service is created and active.\");\n    }\n    activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise, l10n);\n    return activeService;\n  }\n};\n\n/***/ }),\n/* 49 */\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.getXfaHtmlForPrinting = getXfaHtmlForPrinting;\nvar _pdfjsLib = __webpack_require__(5);\nvar _pdf_link_service = __webpack_require__(3);\nvar _xfa_layer_builder = __webpack_require__(38);\nfunction getXfaHtmlForPrinting(printContainer, pdfDocument) {\n  const xfaHtml = pdfDocument.allXfaHtml;\n  const linkService = new _pdf_link_service.SimpleLinkService();\n  const scale = Math.round(_pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100;\n  for (const xfaPage of xfaHtml.children) {\n    const page = document.createElement(\"div\");\n    page.className = \"xfaPrintedPage\";\n    printContainer.append(page);\n    const builder = new _xfa_layer_builder.XfaLayerBuilder({\n      pageDiv: page,\n      pdfPage: null,\n      annotationStorage: pdfDocument.annotationStorage,\n      linkService,\n      xfaHtml: xfaPage\n    });\n    const viewport = (0, _pdfjsLib.getXfaPageViewport)(xfaPage, {\n      scale\n    });\n    builder.render(viewport, \"print\");\n  }\n}\n\n/***/ })\n/******/ \t]);\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\nvar exports = __webpack_exports__;\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nObject.defineProperty(exports, \"PDFViewerApplication\", ({\n  enumerable: true,\n  get: function () {\n    return _app.PDFViewerApplication;\n  }\n}));\nexports.PDFViewerApplicationConstants = void 0;\nObject.defineProperty(exports, \"PDFViewerApplicationOptions\", ({\n  enumerable: true,\n  get: function () {\n    return _app_options.AppOptions;\n  }\n}));\nvar _ui_utils = __webpack_require__(1);\nvar _app_options = __webpack_require__(2);\nvar _pdf_link_service = __webpack_require__(3);\nvar _app = __webpack_require__(4);\nvar _document$blockUnbloc, _document;\nconst pdfjsVersion = '3.1.81';\nconst pdfjsBuild = '0766898d5';\nconst AppConstants = {\n  LinkTarget: _pdf_link_service.LinkTarget,\n  RenderingStates: _ui_utils.RenderingStates,\n  ScrollMode: _ui_utils.ScrollMode,\n  SpreadMode: _ui_utils.SpreadMode\n};\nexports.PDFViewerApplicationConstants = AppConstants;\nwindow.PDFViewerApplication = _app.PDFViewerApplication;\nwindow.PDFViewerApplicationConstants = AppConstants;\nwindow.PDFViewerApplicationOptions = _app_options.AppOptions;\n;\n;\n{\n  __webpack_require__(42);\n}\n;\n{\n  __webpack_require__(48);\n}\nfunction getViewerConfiguration() {\n  return {\n    appContainer: document.body,\n    mainContainer: document.getElementById(\"viewerContainer\"),\n    viewerContainer: document.getElementById(\"viewer\"),\n    toolbar: {\n      container: document.getElementById(\"toolbarViewer\"),\n      numPages: document.getElementById(\"numPages\"),\n      pageNumber: document.getElementById(\"pageNumber\"),\n      scaleSelect: document.getElementById(\"scaleSelect\"),\n      customScaleOption: document.getElementById(\"customScaleOption\"),\n      previous: document.getElementById(\"previous\"),\n      next: document.getElementById(\"next\"),\n      zoomIn: document.getElementById(\"zoomIn\"),\n      zoomOut: document.getElementById(\"zoomOut\"),\n      viewFind: document.getElementById(\"viewFind\"),\n      openFile: document.getElementById(\"openFile\"),\n      print: document.getElementById(\"print\"),\n      editorFreeTextButton: document.getElementById(\"editorFreeText\"),\n      editorFreeTextParamsToolbar: document.getElementById(\"editorFreeTextParamsToolbar\"),\n      editorInkButton: document.getElementById(\"editorInk\"),\n      editorInkParamsToolbar: document.getElementById(\"editorInkParamsToolbar\"),\n      download: document.getElementById(\"download\")\n    },\n    secondaryToolbar: {\n      toolbar: document.getElementById(\"secondaryToolbar\"),\n      toggleButton: document.getElementById(\"secondaryToolbarToggle\"),\n      presentationModeButton: document.getElementById(\"presentationMode\"),\n      openFileButton: document.getElementById(\"secondaryOpenFile\"),\n      printButton: document.getElementById(\"secondaryPrint\"),\n      downloadButton: document.getElementById(\"secondaryDownload\"),\n      viewBookmarkButton: document.getElementById(\"viewBookmark\"),\n      firstPageButton: document.getElementById(\"firstPage\"),\n      lastPageButton: document.getElementById(\"lastPage\"),\n      pageRotateCwButton: document.getElementById(\"pageRotateCw\"),\n      pageRotateCcwButton: document.getElementById(\"pageRotateCcw\"),\n      cursorSelectToolButton: document.getElementById(\"cursorSelectTool\"),\n      cursorHandToolButton: document.getElementById(\"cursorHandTool\"),\n      scrollPageButton: document.getElementById(\"scrollPage\"),\n      scrollVerticalButton: document.getElementById(\"scrollVertical\"),\n      scrollHorizontalButton: document.getElementById(\"scrollHorizontal\"),\n      scrollWrappedButton: document.getElementById(\"scrollWrapped\"),\n      spreadNoneButton: document.getElementById(\"spreadNone\"),\n      spreadOddButton: document.getElementById(\"spreadOdd\"),\n      spreadEvenButton: document.getElementById(\"spreadEven\"),\n      documentPropertiesButton: document.getElementById(\"documentProperties\")\n    },\n    sidebar: {\n      outerContainer: document.getElementById(\"outerContainer\"),\n      sidebarContainer: document.getElementById(\"sidebarContainer\"),\n      toggleButton: document.getElementById(\"sidebarToggle\"),\n      thumbnailButton: document.getElementById(\"viewThumbnail\"),\n      outlineButton: document.getElementById(\"viewOutline\"),\n      attachmentsButton: document.getElementById(\"viewAttachments\"),\n      layersButton: document.getElementById(\"viewLayers\"),\n      thumbnailView: document.getElementById(\"thumbnailView\"),\n      outlineView: document.getElementById(\"outlineView\"),\n      attachmentsView: document.getElementById(\"attachmentsView\"),\n      layersView: document.getElementById(\"layersView\"),\n      outlineOptionsContainer: document.getElementById(\"outlineOptionsContainer\"),\n      currentOutlineItemButton: document.getElementById(\"currentOutlineItem\")\n    },\n    sidebarResizer: {\n      outerContainer: document.getElementById(\"outerContainer\"),\n      resizer: document.getElementById(\"sidebarResizer\")\n    },\n    findBar: {\n      bar: document.getElementById(\"findbar\"),\n      toggleButton: document.getElementById(\"viewFind\"),\n      findField: document.getElementById(\"findInput\"),\n      highlightAllCheckbox: document.getElementById(\"findHighlightAll\"),\n      caseSensitiveCheckbox: document.getElementById(\"findMatchCase\"),\n      matchDiacriticsCheckbox: document.getElementById(\"findMatchDiacritics\"),\n      entireWordCheckbox: document.getElementById(\"findEntireWord\"),\n      findMsg: document.getElementById(\"findMsg\"),\n      findResultsCount: document.getElementById(\"findResultsCount\"),\n      findPreviousButton: document.getElementById(\"findPrevious\"),\n      findNextButton: document.getElementById(\"findNext\")\n    },\n    passwordOverlay: {\n      dialog: document.getElementById(\"passwordDialog\"),\n      label: document.getElementById(\"passwordText\"),\n      input: document.getElementById(\"password\"),\n      submitButton: document.getElementById(\"passwordSubmit\"),\n      cancelButton: document.getElementById(\"passwordCancel\")\n    },\n    documentProperties: {\n      dialog: document.getElementById(\"documentPropertiesDialog\"),\n      closeButton: document.getElementById(\"documentPropertiesClose\"),\n      fields: {\n        fileName: document.getElementById(\"fileNameField\"),\n        fileSize: document.getElementById(\"fileSizeField\"),\n        title: document.getElementById(\"titleField\"),\n        author: document.getElementById(\"authorField\"),\n        subject: document.getElementById(\"subjectField\"),\n        keywords: document.getElementById(\"keywordsField\"),\n        creationDate: document.getElementById(\"creationDateField\"),\n        modificationDate: document.getElementById(\"modificationDateField\"),\n        creator: document.getElementById(\"creatorField\"),\n        producer: document.getElementById(\"producerField\"),\n        version: document.getElementById(\"versionField\"),\n        pageCount: document.getElementById(\"pageCountField\"),\n        pageSize: document.getElementById(\"pageSizeField\"),\n        linearized: document.getElementById(\"linearizedField\")\n      }\n    },\n    annotationEditorParams: {\n      editorFreeTextFontSize: document.getElementById(\"editorFreeTextFontSize\"),\n      editorFreeTextColor: document.getElementById(\"editorFreeTextColor\"),\n      editorInkColor: document.getElementById(\"editorInkColor\"),\n      editorInkThickness: document.getElementById(\"editorInkThickness\"),\n      editorInkOpacity: document.getElementById(\"editorInkOpacity\")\n    },\n    printContainer: document.getElementById(\"printContainer\"),\n    openFileInput: document.getElementById(\"fileInput\"),\n    debuggerScriptPath: \"./debugger.js\"\n  };\n}\nfunction webViewerLoad() {\n  const config = getViewerConfiguration();\n  const event = document.createEvent(\"CustomEvent\");\n  event.initCustomEvent(\"webviewerloaded\", true, true, {\n    source: window\n  });\n  try {\n    parent.document.dispatchEvent(event);\n  } catch (ex) {\n    console.error(`webviewerloaded: ${ex}`);\n    document.dispatchEvent(event);\n  }\n  _app.PDFViewerApplication.run(config);\n}\n(_document$blockUnbloc = (_document = document).blockUnblockOnload) === null || _document$blockUnbloc === void 0 ? void 0 : _document$blockUnbloc.call(_document, true);\nif (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n  webViewerLoad();\n} else {\n  document.addEventListener(\"DOMContentLoaded\", webViewerLoad, true);\n}\n})();\n\n/******/ })()\n;\n//# sourceMappingURL=viewer.js.map\n"
  },
  {
    "path": "src/export/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    exportdata.cpp exportdata.h\n    exporter.cpp exporter.h\n    webviewexporter.cpp webviewexporter.h\n)\n"
  },
  {
    "path": "src/export/exportdata.cpp",
    "content": "#include \"exportdata.h\"\n\n#include <QJsonArray>\n#include <QJsonObject>\n#include <QPageLayout>\n\nusing namespace vnotex;\n\nQJsonObject ExportHtmlOption::toJson() const {\n  QJsonObject obj;\n  obj[\"embed_styles\"] = m_embedStyles;\n  obj[\"complete_page\"] = m_completePage;\n  obj[\"embed_images\"] = m_embedImages;\n  obj[\"use_mime_html_format\"] = m_useMimeHtmlFormat;\n  obj[\"add_outline_panel\"] = m_addOutlinePanel;\n  obj[\"scrollable\"] = m_scrollable;\n  return obj;\n}\n\nvoid ExportHtmlOption::fromJson(const QJsonObject &p_obj) {\n  if (p_obj.isEmpty()) {\n    return;\n  }\n\n  m_embedStyles = p_obj[\"embed_styles\"].toBool();\n  m_completePage = p_obj[\"complete_page\"].toBool();\n  m_embedImages = p_obj[\"embed_images\"].toBool();\n  m_useMimeHtmlFormat = p_obj[\"use_mime_html_format\"].toBool();\n  m_addOutlinePanel = p_obj[\"add_outline_panel\"].toBool();\n  m_scrollable = p_obj[\"scrollable\"].toBool(true);\n}\n\nbool ExportHtmlOption::operator==(const ExportHtmlOption &p_other) const {\n  return m_embedStyles == p_other.m_embedStyles && m_completePage == p_other.m_completePage &&\n         m_embedImages == p_other.m_embedImages &&\n         m_useMimeHtmlFormat == p_other.m_useMimeHtmlFormat &&\n         m_addOutlinePanel == p_other.m_addOutlinePanel && m_scrollable == p_other.m_scrollable;\n}\n\nstatic QJsonObject pageLayoutToJsonObject(const QPageLayout &p_layout) {\n  QJsonObject obj;\n  obj[\"page_size\"] = static_cast<int>(p_layout.pageSize().id());\n  obj[\"orientation\"] = static_cast<int>(p_layout.orientation());\n  obj[\"units\"] = static_cast<int>(p_layout.units());\n  {\n    QStringList marginsStr;\n    const auto margins = p_layout.margins();\n    marginsStr << QString::number(margins.left());\n    marginsStr << QString::number(margins.top());\n    marginsStr << QString::number(margins.right());\n    marginsStr << QString::number(margins.bottom());\n    obj[\"margins\"] = marginsStr.join(QLatin1Char(','));\n  }\n  return obj;\n}\n\nstatic void jsonObjectToPageLayout(const QJsonObject &p_obj, QPageLayout &p_layout) {\n  const int pageSize = p_obj[\"page_size\"].toInt(static_cast<int>(QPageSize::A4));\n  p_layout.setPageSize(QPageSize(static_cast<QPageSize::PageSizeId>(pageSize)));\n\n  const int orientation = p_obj[\"orientation\"].toInt(static_cast<int>(QPageLayout::Portrait));\n  p_layout.setOrientation(static_cast<QPageLayout::Orientation>(orientation));\n\n  const int units = p_obj[\"units\"].toInt(static_cast<int>(QPageLayout::Millimeter));\n  p_layout.setUnits(static_cast<QPageLayout::Unit>(units));\n\n  auto marginsStr = p_obj[\"margins\"].toString().split(QLatin1Char(','));\n  if (marginsStr.size() == 4) {\n    p_layout.setMargins(QMarginsF(marginsStr[0].toDouble(), marginsStr[1].toDouble(),\n                                  marginsStr[2].toDouble(), marginsStr[3].toDouble()));\n  }\n}\n\nExportPdfOption::ExportPdfOption()\n    : m_layout(new QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait,\n                               QMarginsF(10, 16, 10, 10), QPageLayout::Millimeter)) {}\n\nQJsonObject ExportPdfOption::toJson() const {\n  QJsonObject obj;\n  obj[\"add_table_of_contents\"] = m_addTableOfContents;\n  obj[\"use_wkhtmltopdf\"] = m_useWkhtmltopdf;\n  obj[\"all_in_one\"] = m_allInOne;\n  obj[\"wkhtmltopdf_exe_path\"] = m_wkhtmltopdfExePath;\n  obj[\"wkhtmltopdf_args\"] = m_wkhtmltopdfArgs;\n  obj[\"layout\"] = pageLayoutToJsonObject(*m_layout);\n  return obj;\n}\n\nvoid ExportPdfOption::fromJson(const QJsonObject &p_obj) {\n  if (p_obj.isEmpty()) {\n    return;\n  }\n\n  m_addTableOfContents = p_obj[\"add_table_of_contents\"].toBool();\n  m_useWkhtmltopdf = p_obj[\"use_wkhtmltopdf\"].toBool();\n  m_allInOne = p_obj[\"all_in_one\"].toBool();\n  m_wkhtmltopdfExePath = p_obj[\"wkhtmltopdf_exe_path\"].toString();\n  m_wkhtmltopdfArgs = p_obj[\"wkhtmltopdf_args\"].toString();\n  jsonObjectToPageLayout(p_obj[\"layout\"].toObject(), *m_layout);\n}\n\nbool ExportPdfOption::operator==(const ExportPdfOption &p_other) const {\n  return m_addTableOfContents == p_other.m_addTableOfContents &&\n         m_useWkhtmltopdf == p_other.m_useWkhtmltopdf && m_allInOne == p_other.m_allInOne &&\n         m_wkhtmltopdfExePath == p_other.m_wkhtmltopdfExePath &&\n         m_wkhtmltopdfArgs == p_other.m_wkhtmltopdfArgs;\n}\n\nQJsonObject ExportCustomOption::toJson() const {\n  QJsonObject obj;\n  obj[\"name\"] = m_name;\n  obj[\"target_suffix\"] = m_targetSuffix;\n  obj[\"command\"] = m_command;\n  obj[\"use_html_input\"] = m_useHtmlInput;\n  obj[\"all_in_one\"] = m_allInOne;\n  obj[\"target_page_scrollable\"] = m_targetPageScrollable;\n  obj[\"resource_path_separator\"] = m_resourcePathSeparator;\n  return obj;\n}\n\nvoid ExportCustomOption::fromJson(const QJsonObject &p_obj) {\n  if (p_obj.isEmpty()) {\n    return;\n  }\n\n  m_name = p_obj[\"name\"].toString();\n  m_targetSuffix = p_obj[\"target_suffix\"].toString();\n  m_command = p_obj[\"command\"].toString();\n  m_useHtmlInput = p_obj[\"use_html_input\"].toBool();\n  m_allInOne = p_obj[\"all_in_one\"].toBool();\n  m_targetPageScrollable = p_obj[\"target_page_scrollable\"].toBool();\n  m_resourcePathSeparator = p_obj[\"resource_path_separator\"].toString();\n}\n\nbool ExportCustomOption::operator==(const ExportCustomOption &p_other) const {\n  return m_name == p_other.m_name && m_useHtmlInput == p_other.m_useHtmlInput &&\n         m_targetSuffix == p_other.m_targetSuffix && m_command == p_other.m_command &&\n         m_allInOne == p_other.m_allInOne &&\n         m_targetPageScrollable == p_other.m_targetPageScrollable &&\n         m_resourcePathSeparator == p_other.m_resourcePathSeparator;\n}\n\nQJsonObject ExportOption::toJson() const {\n  QJsonObject obj;\n  obj[\"target_format\"] = static_cast<int>(m_targetFormat);\n  obj[\"use_transparent_bg\"] = m_useTransparentBg;\n  obj[\"output_dir\"] = m_outputDir;\n  obj[\"recursive\"] = m_recursive;\n  obj[\"export_attachments\"] = m_exportAttachments;\n  obj[\"html_option\"] = m_htmlOption.toJson();\n  obj[\"pdf_option\"] = m_pdfOption.toJson();\n  obj[\"custom_export\"] = m_customExport;\n  return obj;\n}\n\nvoid ExportOption::fromJson(const QJsonObject &p_obj) {\n  if (p_obj.isEmpty()) {\n    return;\n  }\n\n  {\n    int fmt = p_obj[\"target_format\"].toInt();\n    switch (fmt) {\n    case static_cast<int>(ExportFormat::Markdown):\n      m_targetFormat = ExportFormat::Markdown;\n      break;\n\n    case static_cast<int>(ExportFormat::PDF):\n      m_targetFormat = ExportFormat::PDF;\n      break;\n\n    case static_cast<int>(ExportFormat::Custom):\n      m_targetFormat = ExportFormat::Custom;\n      break;\n\n    case static_cast<int>(ExportFormat::HTML):\n      Q_FALLTHROUGH();\n    default:\n      m_targetFormat = ExportFormat::HTML;\n      break;\n    }\n  }\n\n  m_useTransparentBg = p_obj[\"use_transparent_bg\"].toBool();\n  m_outputDir = p_obj[\"output_dir\"].toString();\n  m_recursive = p_obj[\"recursive\"].toBool();\n  m_exportAttachments = p_obj[\"export_attachments\"].toBool();\n  m_htmlOption.fromJson(p_obj[\"html_option\"].toObject());\n  m_pdfOption.fromJson(p_obj[\"pdf_option\"].toObject());\n  m_customExport = p_obj[\"custom_export\"].toString();\n}\n\nbool ExportOption::operator==(const ExportOption &p_other) const {\n  bool ret = m_targetFormat == p_other.m_targetFormat &&\n             m_useTransparentBg == p_other.m_useTransparentBg &&\n             m_outputDir == p_other.m_outputDir && m_recursive == p_other.m_recursive &&\n             m_exportAttachments == p_other.m_exportAttachments;\n\n  if (!ret) {\n    return false;\n  }\n\n  if (!(m_htmlOption == p_other.m_htmlOption)) {\n    return false;\n  }\n\n  if (!(m_pdfOption == p_other.m_pdfOption)) {\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/export/exportdata.h",
    "content": "#ifndef EXPORTDATA_H\n#define EXPORTDATA_H\n\n#include <QSharedPointer>\n\nclass QPageLayout;\n\nnamespace vnotex {\nenum class ExportSource { CurrentBuffer = 0, CurrentNote, CurrentFolder, CurrentNotebook };\n\nenum class ExportFormat { Markdown = 0, HTML, PDF, Custom };\n\nstruct ExportHtmlOption {\n  QJsonObject toJson() const;\n  void fromJson(const QJsonObject &p_obj);\n\n  bool operator==(const ExportHtmlOption &p_other) const;\n\n  bool m_embedStyles = true;\n\n  bool m_completePage = true;\n\n  bool m_embedImages = true;\n\n  bool m_useMimeHtmlFormat = false;\n\n  // Whether add outline panel.\n  bool m_addOutlinePanel = true;\n\n  // When exporting to PDF or custom format, we may need to export to HTML first without scrollable.\n  bool m_scrollable = true;\n};\n\nstruct ExportPdfOption {\n  ExportPdfOption();\n\n  QJsonObject toJson() const;\n  void fromJson(const QJsonObject &p_obj);\n\n  bool operator==(const ExportPdfOption &p_other) const;\n\n  QSharedPointer<QPageLayout> m_layout;\n\n  // Add TOC at the front.\n  bool m_addTableOfContents = false;\n\n  bool m_useWkhtmltopdf = false;\n\n  // Valid only when wkhtmltopdf is used.\n  bool m_allInOne = false;\n\n  QString m_wkhtmltopdfExePath;\n\n  QString m_wkhtmltopdfArgs;\n};\n\nstruct ExportCustomOption {\n  QJsonObject toJson() const;\n  void fromJson(const QJsonObject &p_obj);\n\n  bool operator==(const ExportCustomOption &p_other) const;\n\n  QString m_name;\n\n  QString m_targetSuffix;\n\n  QString m_command;\n\n  bool m_useHtmlInput = true;\n\n  bool m_allInOne = false;\n\n  // Whether the page of target format is scrollable.\n  bool m_targetPageScrollable = false;\n\n  // The default value here follows the rules of Pandoc.\n#if defined(Q_OS_WIN)\n  QString m_resourcePathSeparator = \";\";\n#else\n  QString m_resourcePathSeparator = \":\";\n#endif\n};\n\nstruct ExportOption {\n  QJsonObject toJson() const;\n  void fromJson(const QJsonObject &p_obj);\n\n  bool operator==(const ExportOption &p_other) const;\n\n  ExportSource m_source = ExportSource::CurrentBuffer;\n\n  ExportFormat m_targetFormat = ExportFormat::HTML;\n\n  bool m_useTransparentBg = true;\n\n  QString m_renderingStyleFile;\n\n  QString m_syntaxHighlightStyleFile;\n\n  QString m_outputDir;\n\n  bool m_recursive = true;\n\n  bool m_exportAttachments = true;\n\n  ExportHtmlOption m_htmlOption;\n\n  ExportPdfOption m_pdfOption;\n\n  QString m_customExport;\n\n  // Following fields are used in runtime only.\n  ExportCustomOption *m_customOption = nullptr;\n\n  bool m_transformSvgToPngEnabled = false;\n\n  bool m_removeCodeToolBarEnabled = true;\n};\n\ninline QString exportFormatString(ExportFormat p_format) {\n  switch (p_format) {\n  case ExportFormat::Markdown:\n    return QStringLiteral(\"Markdown\");\n\n  case ExportFormat::HTML:\n    return QStringLiteral(\"HTML\");\n\n  case ExportFormat::PDF:\n    return QStringLiteral(\"PDF\");\n\n  case ExportFormat::Custom:\n    return QStringLiteral(\"Custom\");\n  }\n\n  return QStringLiteral(\"Unknown\");\n}\n} // namespace vnotex\n\n#endif // EXPORTDATA_H\n"
  },
  {
    "path": "src/export/exporter.cpp",
    "content": "#include \"exporter.h\"\n\n#include <QTemporaryDir>\n#include <QWidget>\n\n#include \"webviewexporter.h\"\n#include <buffer/buffer.h>\n#include <core/exception.h>\n#include <core/file.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/contentmediautils.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/processutils.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nExporter::Exporter(QWidget *p_parent) : QObject(p_parent) {}\n\nQString Exporter::doExport(const ExportOption &p_option, Buffer *p_buffer) {\n  m_askedToStop = false;\n\n  QString outputFile;\n  auto file = p_buffer->getFile();\n  if (!file) {\n    emit logRequested(tr(\"Skipped buffer (%1) without file base.\").arg(p_buffer->getName()));\n    return outputFile;\n  }\n\n  // Make sure output folder exists.\n  if (!QDir().mkpath(p_option.m_outputDir)) {\n    emit logRequested(tr(\"Failed to create output folder (%1).\").arg(p_option.m_outputDir));\n    return outputFile;\n  }\n\n  outputFile = doExport(p_option, p_option.m_outputDir, file.data());\n\n  cleanUp();\n\n  return outputFile;\n}\n\nstatic QString makeOutputFolder(const QString &p_outputDir, const QString &p_folderName) {\n  const auto name = FileUtils::generateFileNameWithSequence(p_outputDir, p_folderName);\n  const auto outputFolder = PathUtils::concatenateFilePath(p_outputDir, name);\n  if (!QDir().mkpath(outputFolder)) {\n    return QString();\n  }\n\n  return outputFolder;\n}\n\nQString Exporter::doExportMarkdown(const ExportOption &p_option, const QString &p_outputDir,\n                                   const File *p_file) {\n  QString outputFile;\n  if (!p_file->getContentType().isMarkdown()) {\n    emit logRequested(tr(\"Format %1 is not supported to export as Markdown.\")\n                          .arg(p_file->getContentType().m_displayName));\n    return outputFile;\n  }\n\n  // Export it to a folder with the same name.\n  const auto name = FileUtils::generateFileNameWithSequence(p_outputDir, p_file->getName(), \"\");\n  const auto outputFolder = PathUtils::concatenateFilePath(p_outputDir, name);\n  QDir outDir(outputFolder);\n  if (!outDir.mkpath(outputFolder)) {\n    emit logRequested(tr(\"Failed to create output folder under (%1).\").arg(p_outputDir));\n    return outputFile;\n  }\n\n  // Copy source file itself.\n  const auto srcFilePath = p_file->getFilePath();\n  auto destFilePath = outDir.filePath(p_file->getName());\n  FileUtils::copyFile(srcFilePath, destFilePath, false);\n  outputFile = destFilePath;\n\n  ContentMediaUtils::copyMediaFiles(p_file, destFilePath);\n\n  // Copy attachments if available.\n  if (p_option.m_exportAttachments) {\n    exportAttachments(p_file->getNode(), srcFilePath, outputFolder, destFilePath);\n  }\n\n  return outputFile;\n}\n\nvoid Exporter::exportAttachments(Node *p_node, const QString &p_srcFilePath,\n                                 const QString &p_outputFolder, const QString &p_destFilePath) {\n  if (!p_node) {\n    return;\n  }\n  const auto &attachmentFolder = p_node->getAttachmentFolder();\n  if (!attachmentFolder.isEmpty()) {\n    auto relativePath = PathUtils::relativePath(PathUtils::parentDirPath(p_srcFilePath),\n                                                p_node->fetchAttachmentFolderPath());\n    auto destAttachmentFolderPath = QDir(p_outputFolder).filePath(relativePath);\n    destAttachmentFolderPath = FileUtils::renameIfExistsCaseInsensitive(destAttachmentFolderPath);\n    ContentMediaUtils::copyAttachment(p_node, nullptr, p_destFilePath, destAttachmentFolderPath);\n  }\n}\n\nQString Exporter::doExport(const ExportOption &p_option, Node *p_note) {\n  m_askedToStop = false;\n\n  QString outputFile;\n  auto file = p_note->getContentFile();\n\n  // Make sure output folder exists.\n  if (!QDir().mkpath(p_option.m_outputDir)) {\n    emit logRequested(tr(\"Failed to create output folder (%1).\").arg(p_option.m_outputDir));\n    return outputFile;\n  }\n\n  outputFile = doExport(p_option, p_option.m_outputDir, file.data());\n\n  cleanUp();\n\n  return outputFile;\n}\n\nQString Exporter::doExportPdfAllInOne(const ExportOption &p_option, Notebook *p_notebook,\n                                      Node *p_folder) {\n  Q_ASSERT((p_notebook || p_folder) && !(p_notebook && p_folder));\n\n  // Make path.\n  const auto name = p_notebook ? tr(\"notebook_%1\").arg(p_notebook->getName()) : p_folder->getName();\n  const auto outputFolder = makeOutputFolder(p_option.m_outputDir, name);\n  if (outputFolder.isEmpty()) {\n    emit logRequested(tr(\"Failed to create output folder under (%1).\").arg(p_option.m_outputDir));\n    return QString();\n  }\n\n  // Export to HTML to a tmp dir first.\n  QTemporaryDir tmpDir;\n  if (!tmpDir.isValid()) {\n    emit logRequested(tr(\"Failed to create temporary directory to hold HTML files.\"));\n    return QString();\n  }\n\n  auto tmpOption(getExportOptionForIntermediateHtml(p_option, tmpDir.path()));\n\n  QStringList htmlFiles;\n  if (p_notebook) {\n    htmlFiles = doExportNotebook(tmpOption, tmpDir.path(), p_notebook);\n  } else {\n    htmlFiles = doExport(tmpOption, tmpDir.path(), p_folder);\n  }\n\n  cleanUpWebViewExporter();\n\n  if (htmlFiles.isEmpty()) {\n    return QString();\n  }\n\n  if (checkAskedToStop()) {\n    return QString();\n  }\n\n  auto fileName =\n      FileUtils::generateFileNameWithSequence(outputFolder, tr(\"all_in_one_export\"), \"pdf\");\n  auto destFilePath = PathUtils::concatenateFilePath(outputFolder, fileName);\n  if (getWebViewExporter(p_option)->htmlToPdfViaWkhtmltopdf(p_option.m_pdfOption, htmlFiles,\n                                                            destFilePath)) {\n    emit logRequested(tr(\"Exported to (%1).\").arg(destFilePath));\n    return destFilePath;\n  }\n\n  return QString();\n}\n\nQString Exporter::doExportCustomAllInOne(const ExportOption &p_option, Notebook *p_notebook,\n                                         Node *p_folder) {\n  Q_ASSERT((p_notebook || p_folder) && !(p_notebook && p_folder));\n\n  // Make path.\n  const auto name = p_notebook ? tr(\"notebook_%1\").arg(p_notebook->getName()) : p_folder->getName();\n  const auto outputFolder = makeOutputFolder(p_option.m_outputDir, name);\n  if (outputFolder.isEmpty()) {\n    emit logRequested(tr(\"Failed to create output folder under (%1).\").arg(p_option.m_outputDir));\n    return QString();\n  }\n\n  QStringList inputFiles;\n  QStringList resourcePaths;\n\n  QTemporaryDir tmpDir;\n  if (p_option.m_customOption->m_useHtmlInput) {\n    // Export to HTML to a tmp dir first.\n    if (!tmpDir.isValid()) {\n      emit logRequested(tr(\"Failed to create temporary directory to hold HTML files.\"));\n      return QString();\n    }\n\n    auto tmpOption(getExportOptionForIntermediateHtml(p_option, tmpDir.path()));\n\n    QStringList htmlFiles;\n    if (p_notebook) {\n      htmlFiles = doExportNotebook(tmpOption, tmpDir.path(), p_notebook);\n    } else {\n      htmlFiles = doExport(tmpOption, tmpDir.path(), p_folder);\n    }\n\n    cleanUpWebViewExporter();\n\n    if (htmlFiles.isEmpty()) {\n      return QString();\n    }\n\n    if (checkAskedToStop()) {\n      return QString();\n    }\n\n    inputFiles = htmlFiles;\n    for (const auto &file : htmlFiles) {\n      resourcePaths << PathUtils::parentDirPath(file);\n    }\n  } else {\n    // Collect source files.\n    if (p_notebook) {\n      collectFiles(p_notebook->collectFiles(), inputFiles, resourcePaths);\n    } else {\n      collectFiles(p_folder->collectFiles(), inputFiles, resourcePaths);\n    }\n\n    if (checkAskedToStop()) {\n      return QString();\n    }\n  }\n\n  if (inputFiles.isEmpty()) {\n    return QString();\n  }\n\n  auto fileName = FileUtils::generateFileNameWithSequence(outputFolder, tr(\"all_in_one_export\"),\n                                                          p_option.m_customOption->m_targetSuffix);\n  auto destFilePath = PathUtils::concatenateFilePath(outputFolder, fileName);\n  bool success = doExportCustom(p_option, inputFiles, resourcePaths, destFilePath);\n  if (success) {\n    emit logRequested(tr(\"Exported to (%1).\").arg(destFilePath));\n    return destFilePath;\n  }\n\n  return QString();\n}\n\nQStringList Exporter::doExportFolder(const ExportOption &p_option, Node *p_folder) {\n  m_askedToStop = false;\n\n  QStringList outputFiles;\n\n  if (p_option.m_targetFormat == ExportFormat::PDF && p_option.m_pdfOption.m_useWkhtmltopdf &&\n      p_option.m_pdfOption.m_allInOne) {\n    auto file = doExportPdfAllInOne(p_option, nullptr, p_folder);\n    if (!file.isEmpty()) {\n      outputFiles << file;\n    }\n  } else if (p_option.m_targetFormat == ExportFormat::Custom &&\n             p_option.m_customOption->m_allInOne) {\n    auto file = doExportCustomAllInOne(p_option, nullptr, p_folder);\n    if (!file.isEmpty()) {\n      outputFiles << file;\n    }\n  } else {\n    outputFiles = doExport(p_option, p_option.m_outputDir, p_folder);\n  }\n\n  cleanUp();\n\n  return outputFiles;\n}\n\nQStringList Exporter::doExport(const ExportOption &p_option, const QString &p_outputDir,\n                               Node *p_folder) {\n  Q_ASSERT(p_folder->isContainer());\n\n  QStringList outputFiles;\n\n  // Make path.\n  const auto outputFolder = makeOutputFolder(p_outputDir, p_folder->getName());\n  if (outputFolder.isEmpty()) {\n    emit logRequested(tr(\"Failed to create output folder under (%1).\").arg(p_outputDir));\n    return outputFiles;\n  }\n\n  try {\n    p_folder->load();\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to load node (%1) (%2).\").arg(p_folder->fetchPath(), p_e.what());\n    qWarning() << msg;\n    emit logRequested(msg);\n    return outputFiles;\n  }\n\n  const auto &children = p_folder->getChildrenRef();\n  emit progressUpdated(0, children.size());\n  for (int i = 0; i < children.size(); ++i) {\n    if (checkAskedToStop()) {\n      break;\n    }\n\n    const auto &child = children[i];\n    if (child->hasContent()) {\n      auto outputFile = doExport(p_option, outputFolder, child->getContentFile().data());\n      if (!outputFile.isEmpty()) {\n        outputFiles << outputFile;\n      }\n    }\n    if (p_option.m_recursive && child->isContainer() && child->getUse() == Node::Use::Normal) {\n      outputFiles.append(doExport(p_option, outputFolder, child.data()));\n    }\n\n    emit progressUpdated(i + 1, children.size());\n  }\n\n  return outputFiles;\n}\n\nQString Exporter::doExport(const ExportOption &p_option, const QString &p_outputDir,\n                           const File *p_file) {\n  QString outputFile;\n\n  switch (p_option.m_targetFormat) {\n  case ExportFormat::Markdown:\n    outputFile = doExportMarkdown(p_option, p_outputDir, p_file);\n    break;\n\n  case ExportFormat::HTML:\n    outputFile = doExportHtml(p_option, p_outputDir, p_file);\n    break;\n\n  case ExportFormat::PDF:\n    outputFile = doExportPdf(p_option, p_outputDir, p_file);\n    break;\n\n  case ExportFormat::Custom:\n    outputFile = doExportCustom(p_option, p_outputDir, p_file);\n    break;\n\n  default:\n    emit logRequested(\n        tr(\"Unknown target format %1.\").arg(exportFormatString(p_option.m_targetFormat)));\n    break;\n  }\n\n  if (!outputFile.isEmpty()) {\n    emit logRequested(tr(\"File (%1) exported to (%2)\").arg(p_file->getFilePath(), outputFile));\n  } else {\n    emit logRequested(tr(\"Failed to export file (%1)\").arg(p_file->getFilePath()));\n  }\n\n  return outputFile;\n}\n\nQStringList Exporter::doExport(const ExportOption &p_option, Notebook *p_notebook) {\n  m_askedToStop = false;\n\n  QStringList outputFiles;\n\n  if (p_option.m_targetFormat == ExportFormat::PDF && p_option.m_pdfOption.m_useWkhtmltopdf &&\n      p_option.m_pdfOption.m_allInOne) {\n    auto file = doExportPdfAllInOne(p_option, p_notebook, nullptr);\n    if (!file.isEmpty()) {\n      outputFiles << file;\n    }\n  } else if (p_option.m_targetFormat == ExportFormat::Custom &&\n             p_option.m_customOption->m_allInOne) {\n    auto file = doExportCustomAllInOne(p_option, p_notebook, nullptr);\n    if (!file.isEmpty()) {\n      outputFiles << file;\n    }\n  } else {\n    outputFiles = doExportNotebook(p_option, p_option.m_outputDir, p_notebook);\n  }\n\n  cleanUp();\n\n  return outputFiles;\n}\n\nQStringList Exporter::doExportNotebook(const ExportOption &p_option, const QString &p_outputDir,\n                                       Notebook *p_notebook) {\n  m_askedToStop = false;\n\n  QStringList outputFiles;\n\n  // Make path.\n  const auto outputFolder =\n      makeOutputFolder(p_outputDir, tr(\"notebook_%1\").arg(p_notebook->getName()));\n  if (outputFolder.isEmpty()) {\n    emit logRequested(tr(\"Failed to create output folder under (%1).\").arg(p_outputDir));\n    return outputFiles;\n  }\n\n  auto rootNode = p_notebook->getRootNode();\n  Q_ASSERT(rootNode->isLoaded());\n\n  const auto &children = rootNode->getChildrenRef();\n  emit progressUpdated(0, children.size());\n  for (int i = 0; i < children.size(); ++i) {\n    if (checkAskedToStop()) {\n      break;\n    }\n\n    const auto &child = children[i];\n    if (child->hasContent()) {\n      auto outputFile = doExport(p_option, outputFolder, child->getContentFile().data());\n      if (!outputFile.isEmpty()) {\n        outputFiles << outputFile;\n      }\n    }\n    if (child->isContainer() && child->getUse() == Node::Use::Normal) {\n      outputFiles.append(doExport(p_option, outputFolder, child.data()));\n    }\n\n    emit progressUpdated(i + 1, children.size());\n  }\n\n  cleanUp();\n\n  return outputFiles;\n}\n\nQString Exporter::doExportHtml(const ExportOption &p_option, const QString &p_outputDir,\n                               const File *p_file) {\n  QString outputFile;\n  if (!p_file->getContentType().isMarkdown()) {\n    emit logRequested(tr(\"Format %1 is not supported to export as HTML.\")\n                          .arg(p_file->getContentType().m_displayName));\n    return outputFile;\n  }\n\n  QString suffix =\n      p_option.m_htmlOption.m_useMimeHtmlFormat ? QStringLiteral(\"mht\") : QStringLiteral(\"html\");\n  auto fileName = FileUtils::generateFileNameWithSequence(\n      p_outputDir, QFileInfo(p_file->getName()).completeBaseName(), suffix);\n  auto destFilePath = PathUtils::concatenateFilePath(p_outputDir, fileName);\n\n  bool success = getWebViewExporter(p_option)->doExport(p_option, p_file, destFilePath);\n  if (success) {\n    outputFile = destFilePath;\n\n    // Copy attachments if available.\n    if (p_option.m_exportAttachments) {\n      exportAttachments(p_file->getNode(), p_file->getFilePath(), p_outputDir, destFilePath);\n    }\n  }\n  return outputFile;\n}\n\nWebViewExporter *Exporter::getWebViewExporter(const ExportOption &p_option) {\n  if (!m_webViewExporter) {\n    m_webViewExporter = new WebViewExporter(static_cast<QWidget *>(parent()));\n    connect(m_webViewExporter, &WebViewExporter::logRequested, this, &Exporter::logRequested);\n    m_webViewExporter->prepare(p_option);\n  }\n\n  return m_webViewExporter;\n}\n\nvoid Exporter::cleanUpWebViewExporter() {\n  if (m_webViewExporter) {\n    m_webViewExporter->clear();\n    delete m_webViewExporter;\n    m_webViewExporter = nullptr;\n  }\n}\n\nvoid Exporter::cleanUp() { cleanUpWebViewExporter(); }\n\nvoid Exporter::stop() {\n  m_askedToStop = true;\n\n  if (m_webViewExporter) {\n    m_webViewExporter->stop();\n  }\n}\n\nbool Exporter::checkAskedToStop() const {\n  if (m_askedToStop) {\n    emit const_cast<Exporter *>(this)->logRequested(tr(\"Asked to stop. Aborting.\"));\n    return true;\n  }\n\n  return false;\n}\n\nQString Exporter::doExportPdf(const ExportOption &p_option, const QString &p_outputDir,\n                              const File *p_file) {\n  QString outputFile;\n  if (!p_file->getContentType().isMarkdown()) {\n    emit logRequested(tr(\"Format %1 is not supported to export as PDF.\")\n                          .arg(p_file->getContentType().m_displayName));\n    return outputFile;\n  }\n\n  auto fileName = FileUtils::generateFileNameWithSequence(\n      p_outputDir, QFileInfo(p_file->getName()).completeBaseName(), \"pdf\");\n  auto destFilePath = PathUtils::concatenateFilePath(p_outputDir, fileName);\n\n  bool success = getWebViewExporter(p_option)->doExport(p_option, p_file, destFilePath);\n  if (success) {\n    outputFile = destFilePath;\n\n    // Copy attachments if available.\n    if (p_option.m_exportAttachments) {\n      exportAttachments(p_file->getNode(), p_file->getFilePath(), p_outputDir, destFilePath);\n    }\n  }\n  return outputFile;\n}\n\nQString Exporter::doExportCustom(const ExportOption &p_option, const QString &p_outputDir,\n                                 const File *p_file) {\n  Q_ASSERT(p_option.m_customOption);\n  QStringList inputFiles;\n  QStringList resourcePaths;\n\n  QTemporaryDir tmpDir;\n  if (p_option.m_customOption->m_useHtmlInput) {\n    // Export to HTML to a tmp dir first.\n    if (!tmpDir.isValid()) {\n      emit logRequested(tr(\"Failed to create temporary directory to hold HTML files.\"));\n      return QString();\n    }\n\n    auto tmpOption(getExportOptionForIntermediateHtml(p_option, tmpDir.path()));\n    auto htmlFile = doExport(tmpOption, tmpDir.path(), p_file);\n    if (htmlFile.isEmpty()) {\n      return QString();\n    }\n\n    if (checkAskedToStop()) {\n      return QString();\n    }\n\n    cleanUpWebViewExporter();\n\n    inputFiles << htmlFile;\n    resourcePaths << PathUtils::parentDirPath(htmlFile);\n  } else {\n    inputFiles << p_file->getContentPath();\n    resourcePaths << p_file->getResourcePath();\n  }\n\n  auto fileName = FileUtils::generateFileNameWithSequence(\n      p_outputDir, QFileInfo(p_file->getName()).completeBaseName(),\n      p_option.m_customOption->m_targetSuffix);\n  auto destFilePath = PathUtils::concatenateFilePath(p_outputDir, fileName);\n\n  bool success = doExportCustom(p_option, inputFiles, resourcePaths, destFilePath);\n  if (success) {\n    // Copy attachments if available.\n    if (p_option.m_exportAttachments) {\n      exportAttachments(p_file->getNode(), p_file->getFilePath(), p_outputDir, destFilePath);\n    }\n\n    return destFilePath;\n  }\n\n  return QString();\n}\n\nExportOption Exporter::getExportOptionForIntermediateHtml(const ExportOption &p_option,\n                                                          const QString &p_outputDir) {\n  ExportOption tmpOption(p_option);\n  tmpOption.m_exportAttachments = false;\n  tmpOption.m_targetFormat = ExportFormat::HTML;\n  tmpOption.m_transformSvgToPngEnabled = true;\n  tmpOption.m_removeCodeToolBarEnabled = true;\n\n  tmpOption.m_htmlOption.m_embedStyles = true;\n  tmpOption.m_htmlOption.m_completePage = true;\n  tmpOption.m_htmlOption.m_embedImages = false;\n  tmpOption.m_htmlOption.m_useMimeHtmlFormat = false;\n  tmpOption.m_htmlOption.m_addOutlinePanel = false;\n  tmpOption.m_htmlOption.m_scrollable = false;\n  if (p_option.m_targetFormat == ExportFormat::Custom &&\n      p_option.m_customOption->m_targetPageScrollable) {\n    tmpOption.m_htmlOption.m_scrollable = true;\n  }\n  tmpOption.m_outputDir = p_outputDir;\n  return tmpOption;\n}\n\nbool Exporter::doExportCustom(const ExportOption &p_option, const QStringList &p_files,\n                              const QStringList &p_resourcePaths, const QString &p_filePath) {\n  const auto cmd = evaluateCommand(p_option, p_files, p_resourcePaths, p_filePath);\n\n  emit logRequested(tr(\"Custom command: %1\").arg(cmd));\n  qDebug() << \"custom export\" << cmd;\n\n  auto state = ProcessUtils::start(\n      cmd, [this](const QString &msg) { emit logRequested(msg); }, m_askedToStop);\n\n  return state == ProcessUtils::Succeeded;\n}\n\nQString Exporter::evaluateCommand(const ExportOption &p_option, const QStringList &p_files,\n                                  const QStringList &p_resourcePaths, const QString &p_filePath) {\n  auto cmd(p_option.m_customOption->m_command);\n\n  QString inputs;\n  for (int i = 0; i < p_files.size(); ++i) {\n    if (i > 0) {\n      inputs += \" \";\n    }\n\n    inputs += getQuotedPath(p_files[i]);\n  }\n\n  QString resourcePath;\n  for (int i = 0; i < p_resourcePaths.size(); ++i) {\n    bool duplicated = false;\n    for (int j = 0; j < i; ++j) {\n      if (p_resourcePaths[j] == p_resourcePaths[i]) {\n        // Deduplicate.\n        duplicated = true;\n        break;\n      }\n    }\n\n    if (duplicated) {\n      continue;\n    }\n\n    if (i > 0) {\n      resourcePath += p_option.m_customOption->m_resourcePathSeparator;\n    }\n\n    resourcePath += getQuotedPath(p_resourcePaths[i]);\n  }\n\n  cmd.replace(\"%1\", inputs);\n  cmd.replace(\"%2\", resourcePath);\n  cmd.replace(\"%3\", getQuotedPath(p_option.m_renderingStyleFile));\n  cmd.replace(\"%4\", getQuotedPath(p_option.m_syntaxHighlightStyleFile));\n  cmd.replace(\"%5\", getQuotedPath(p_filePath));\n  return cmd;\n}\n\nQString Exporter::getQuotedPath(const QString &p_path) {\n  return QStringLiteral(\"\\\"%1\\\"\").arg(QDir::toNativeSeparators(p_path));\n}\n\nvoid Exporter::collectFiles(const QList<QSharedPointer<File>> &p_files, QStringList &p_inputFiles,\n                            QStringList &p_resourcePaths) {\n  for (const auto &file : p_files) {\n    p_inputFiles << file->getContentPath();\n    p_resourcePaths << file->getResourcePath();\n  }\n}\n"
  },
  {
    "path": "src/export/exporter.h",
    "content": "#ifndef EXPORTER_H\n#define EXPORTER_H\n\n#include <QObject>\n#include <QStringList>\n\n#include \"exportdata.h\"\n\nnamespace vnotex {\nclass Notebook;\nclass Node;\nclass Buffer;\nclass File;\nclass WebViewExporter;\n\nclass Exporter : public QObject {\n  Q_OBJECT\npublic:\n  // We need the QWidget as parent.\n  explicit Exporter(QWidget *p_parent);\n\n  // Return exported output file.\n  QString doExport(const ExportOption &p_option, Buffer *p_buffer);\n\n  // Return exported output file.\n  QString doExport(const ExportOption &p_option, Node *p_note);\n\n  // Return exported output files.\n  QStringList doExportFolder(const ExportOption &p_option, Node *p_folder);\n\n  QStringList doExport(const ExportOption &p_option, Notebook *p_notebook);\n\n  void stop();\n\nsignals:\n  void progressUpdated(int p_val, int p_maximum);\n\n  void logRequested(const QString &p_log);\n\nprivate:\n  QStringList doExport(const ExportOption &p_option, const QString &p_outputDir, Node *p_folder);\n\n  QString doExport(const ExportOption &p_option, const QString &p_outputDir, const File *p_file);\n\n  QString doExportMarkdown(const ExportOption &p_option, const QString &p_outputDir,\n                           const File *p_file);\n\n  QString doExportHtml(const ExportOption &p_option, const QString &p_outputDir,\n                       const File *p_file);\n\n  QString doExportPdf(const ExportOption &p_option, const QString &p_outputDir, const File *p_file);\n\n  QString doExportCustom(const ExportOption &p_option, const QString &p_outputDir,\n                         const File *p_file);\n\n  bool doExportCustom(const ExportOption &p_option, const QStringList &p_files,\n                      const QStringList &p_resourcePaths, const QString &p_filePath);\n\n  // Export @p_notebook or @p_folder. @p_folder will be considered only when @p_notebook is null.\n  QString doExportPdfAllInOne(const ExportOption &p_option, Notebook *p_notebook, Node *p_folder);\n\n  QString doExportCustomAllInOne(const ExportOption &p_option, Notebook *p_notebook,\n                                 Node *p_folder);\n\n  void exportAttachments(Node *p_node, const QString &p_srcFilePath, const QString &p_outputFolder,\n                         const QString &p_destFilePath);\n\n  WebViewExporter *getWebViewExporter(const ExportOption &p_option);\n\n  void cleanUpWebViewExporter();\n\n  void cleanUp();\n\n  bool checkAskedToStop() const;\n\n  QStringList doExportNotebook(const ExportOption &p_option, const QString &p_outputDir,\n                               Notebook *p_notebook);\n\n  static ExportOption getExportOptionForIntermediateHtml(const ExportOption &p_option,\n                                                         const QString &p_outputDir);\n\n  static QString evaluateCommand(const ExportOption &p_option, const QStringList &p_files,\n                                 const QStringList &p_resourcePaths, const QString &p_filePath);\n\n  static QString getQuotedPath(const QString &p_path);\n\n  static void collectFiles(const QList<QSharedPointer<File>> &p_files, QStringList &p_inputFiles,\n                           QStringList &p_resourcePaths);\n\n  // Managed by QObject.\n  WebViewExporter *m_webViewExporter = nullptr;\n\n  bool m_askedToStop = false;\n};\n} // namespace vnotex\n\n#endif // EXPORTER_H\n"
  },
  {
    "path": "src/export/webviewexporter.cpp",
    "content": "#include \"webviewexporter.h\"\n\n#include <QFileInfo>\n#include <QProcess>\n#include <QRegularExpression>\n#include <QTemporaryDir>\n#include <QWebEnginePage>\n#include <QWidget>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/file.h>\n#include <core/htmltemplatehelper.h>\n#include <core/markdowneditorconfig.h>\n#include <utils/fileutils.h>\n#include <utils/htmlutils.h>\n#include <utils/pathutils.h>\n#include <utils/processutils.h>\n#include <utils/utils.h>\n#include <utils/webutils.h>\n#include <widgets/editors/markdownviewer.h>\n#include <widgets/editors/markdownvieweradapter.h>\n\nusing namespace vnotex;\n\nstatic const QString c_imgRegExp = \"<img ([^>]*)src=\\\"(?!data:)([^\\\"]+)\\\"([^>]*)>\";\n\nWebViewExporter::WebViewExporter(QWidget *p_parent) : QObject(p_parent) {}\n\nWebViewExporter::~WebViewExporter() { clear(); }\n\nvoid WebViewExporter::clear() {\n  m_askedToStop = false;\n\n  delete m_viewer;\n  m_viewer = nullptr;\n\n  m_htmlTemplate.clear();\n  m_exportHtmlTemplate.clear();\n\n  m_exportOngoing = false;\n}\n\nbool WebViewExporter::doExport(const ExportOption &p_option, const File *p_file,\n                               const QString &p_outputFile) {\n  bool ret = false;\n  m_askedToStop = false;\n\n  Q_ASSERT(p_file->getContentType().isMarkdown());\n\n  Q_ASSERT(!m_exportOngoing);\n  m_exportOngoing = true;\n\n  m_webViewStates = WebViewState::Started;\n\n  auto baseUrl = PathUtils::pathToUrl(p_file->getContentPath());\n  m_viewer->adapter()->reset();\n  m_viewer->setHtml(m_htmlTemplate, baseUrl);\n\n  auto textContent = p_file->read();\n  if (p_option.m_targetFormat == ExportFormat::PDF && p_option.m_pdfOption.m_addTableOfContents &&\n      !p_option.m_pdfOption.m_useWkhtmltopdf) {\n    // Add `[TOC]` at the beginning.\n    m_viewer->adapter()->setText(\"[TOC]\\n\\n\" + textContent);\n  } else {\n    m_viewer->adapter()->setText(textContent);\n  }\n\n  while (!isWebViewReady()) {\n    Utils::sleepWait(100);\n\n    if (m_askedToStop) {\n      goto exit_export;\n    }\n\n    if (isWebViewFailed()) {\n      qWarning() << \"WebView failed when exporting\" << p_file->getFilePath();\n      goto exit_export;\n    }\n  }\n\n  qDebug() << \"WebView is ready\";\n\n  // Add extra wait to make sure Web side is really ready.\n  Utils::sleepWait(200);\n\n  switch (p_option.m_targetFormat) {\n  case ExportFormat::HTML:\n    // TODO: MIME HTML format is not supported yet.\n    Q_ASSERT(!p_option.m_htmlOption.m_useMimeHtmlFormat);\n    ret = doExportHtml(p_option.m_htmlOption, p_outputFile, baseUrl);\n    break;\n\n  case ExportFormat::PDF:\n    if (p_option.m_pdfOption.m_useWkhtmltopdf) {\n      ret = doExportWkhtmltopdf(p_option.m_pdfOption, p_outputFile, baseUrl);\n    } else {\n      ret = doExportPdf(p_option.m_pdfOption, p_outputFile);\n    }\n    break;\n\n  default:\n    break;\n  }\n\nexit_export:\n  m_exportOngoing = false;\n  return ret;\n}\n\nvoid WebViewExporter::stop() { m_askedToStop = true; }\n\nbool WebViewExporter::isWebViewReady() const {\n  return m_webViewStates == (WebViewState::LoadFinished | WebViewState::WorkFinished);\n}\n\nbool WebViewExporter::isWebViewFailed() const { return m_webViewStates & WebViewState::Failed; }\n\nbool WebViewExporter::doExportHtml(const ExportHtmlOption &p_htmlOption,\n                                   const QString &p_outputFile, const QUrl &p_baseUrl) {\n  ExportState state = ExportState::Busy;\n\n  connect(m_viewer->adapter(), &MarkdownViewerAdapter::contentReady, this,\n          [&, this](const QString &p_headContent, const QString &p_styleContent,\n                    const QString &p_content, const QString &p_bodyClassList) {\n            qDebug() << \"doExportHtml contentReady\";\n            // Maybe unnecessary. Just to avoid duplicated signal connections.\n            disconnect(m_viewer->adapter(), &MarkdownViewerAdapter::contentReady, this, 0);\n\n            if (p_content.isEmpty() || m_askedToStop) {\n              state = ExportState::Failed;\n              return;\n            }\n\n            if (!writeHtmlFile(p_outputFile, p_baseUrl, p_headContent, p_styleContent, p_content,\n                               p_bodyClassList, p_htmlOption.m_embedStyles,\n                               p_htmlOption.m_completePage, p_htmlOption.m_embedImages)) {\n              state = ExportState::Failed;\n              return;\n            }\n\n            state = ExportState::Finished;\n          });\n\n  m_viewer->adapter()->saveContent();\n\n  while (state == ExportState::Busy) {\n    Utils::sleepWait(100);\n\n    if (m_askedToStop) {\n      break;\n    }\n  }\n\n  return state == ExportState::Finished;\n}\n\nbool WebViewExporter::writeHtmlFile(const QString &p_file, const QUrl &p_baseUrl,\n                                    const QString &p_headContent, QString p_styleContent,\n                                    const QString &p_content, const QString &p_bodyClassList,\n                                    bool p_embedStyles, bool p_completePage, bool p_embedImages) {\n  const auto baseName = QFileInfo(p_file).completeBaseName();\n\n  const QString resourceFolderName = baseName + \"_files\";\n  auto resourceFolder =\n      PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_file), resourceFolderName);\n\n  qDebug() << \"HTML files folder\" << resourceFolder;\n\n  auto htmlContent = m_exportHtmlTemplate;\n\n  const auto title = QStringLiteral(\"%1\").arg(baseName);\n  HtmlTemplateHelper::fillTitle(htmlContent, title);\n\n  if (!p_styleContent.isEmpty() && p_embedStyles) {\n    embedStyleResources(p_styleContent);\n    HtmlTemplateHelper::fillStyleContent(htmlContent, p_styleContent);\n  }\n\n  if (!p_headContent.isEmpty()) {\n    HtmlTemplateHelper::fillHeadContent(htmlContent, p_headContent);\n  }\n\n  if (p_completePage) {\n    QString content(p_content);\n    if (p_embedImages) {\n      embedBodyResources(p_baseUrl, content);\n    } else {\n      fixBodyResources(p_baseUrl, resourceFolder, content);\n    }\n\n    HtmlTemplateHelper::fillContent(htmlContent, content);\n  } else {\n    HtmlTemplateHelper::fillContent(htmlContent, p_content);\n  }\n\n  if (!p_bodyClassList.isEmpty()) {\n    HtmlTemplateHelper::fillBodyClassList(htmlContent, p_bodyClassList);\n  }\n\n  FileUtils::writeFile(p_file, htmlContent);\n\n  // Delete empty resource folder.\n  QDir dir(resourceFolder);\n  if (dir.exists() && dir.isEmpty()) {\n    dir.cdUp();\n    dir.rmdir(resourceFolderName);\n  }\n\n  return true;\n}\n\nQSize WebViewExporter::pageLayoutSize(const QPageLayout &p_layout) const {\n  Q_ASSERT(m_viewer);\n  auto rect = p_layout.paintRect(QPageLayout::Inch);\n  return QSize(rect.width() * m_viewer->logicalDpiX(), rect.height() * m_viewer->logicalDpiY());\n}\n\nvoid WebViewExporter::prepare(const ExportOption &p_option) {\n  Q_ASSERT(!m_viewer && !m_exportOngoing);\n  Q_ASSERT(p_option.m_targetFormat == ExportFormat::PDF ||\n           p_option.m_targetFormat == ExportFormat::HTML);\n\n  {\n    // Adapter will be managed by MarkdownViewer.\n    auto adapter = new MarkdownViewerAdapter(this);\n    m_viewer = new MarkdownViewer(adapter, QColor(), 1, static_cast<QWidget *>(parent()));\n    m_viewer->hide();\n    connect(m_viewer->page(), &QWebEnginePage::loadFinished, this,\n            [this]() { m_webViewStates |= WebViewState::LoadFinished; });\n    connect(adapter, &MarkdownViewerAdapter::workFinished, this,\n            [this]() { m_webViewStates |= WebViewState::WorkFinished; });\n  }\n\n  bool scrollable = true;\n  if (p_option.m_targetFormat == ExportFormat::PDF ||\n      (p_option.m_targetFormat == ExportFormat::HTML && !p_option.m_htmlOption.m_scrollable) ||\n      (p_option.m_targetFormat == ExportFormat::Custom &&\n       !p_option.m_customOption->m_targetPageScrollable)) {\n    scrollable = false;\n  }\n\n  const auto &config = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n  bool useWkhtmltopdf = false;\n  QSize pageBodySize(1024, 768);\n  if (p_option.m_targetFormat == ExportFormat::PDF) {\n    useWkhtmltopdf = p_option.m_pdfOption.m_useWkhtmltopdf;\n    pageBodySize = pageLayoutSize(*(p_option.m_pdfOption.m_layout));\n  }\n\n  qDebug() << \"export page body size\" << pageBodySize;\n\n  HtmlTemplateHelper::MarkdownParas paras;\n  paras.m_webStyleSheetFile = p_option.m_renderingStyleFile;\n  paras.m_highlightStyleSheetFile = p_option.m_syntaxHighlightStyleFile;\n  paras.m_transparentBackgroundEnabled = p_option.m_useTransparentBg;\n  paras.m_scrollable = scrollable;\n  paras.m_bodyWidth = pageBodySize.width();\n  paras.m_bodyHeight = pageBodySize.height();\n  paras.m_transformSvgToPngEnabled = p_option.m_transformSvgToPngEnabled;\n  paras.m_mathJaxScale = useWkhtmltopdf ? 2.5 : -1;\n  paras.m_removeCodeToolBarEnabled = p_option.m_removeCodeToolBarEnabled;\n\n  m_htmlTemplate = HtmlTemplateHelper::generateMarkdownViewerTemplate(config, paras);\n\n  {\n    const bool addOutlinePanel =\n        p_option.m_targetFormat == ExportFormat::HTML && p_option.m_htmlOption.m_addOutlinePanel;\n    m_exportHtmlTemplate =\n        HtmlTemplateHelper::generateMarkdownExportTemplate(config, addOutlinePanel);\n  }\n\n  if (useWkhtmltopdf) {\n    prepareWkhtmltopdfArguments(p_option.m_pdfOption);\n  }\n}\n\nstatic QString marginToStrMM(qreal p_margin) { return QStringLiteral(\"%1mm\").arg(p_margin); }\n\nvoid WebViewExporter::prepareWkhtmltopdfArguments(const ExportPdfOption &p_pdfOption) {\n  m_wkhtmltopdfArgs.clear();\n\n  // Page layout.\n  {\n    const auto &layout = p_pdfOption.m_layout;\n    m_wkhtmltopdfArgs << \"--page-size\" << layout->pageSize().key();\n    m_wkhtmltopdfArgs << \"--orientation\"\n                      << (layout->orientation() == QPageLayout::Portrait ? \"Portrait\"\n                                                                         : \"Landscape\");\n\n    const auto marginsMM = layout->margins(QPageLayout::Millimeter);\n    m_wkhtmltopdfArgs << \"--margin-bottom\" << marginToStrMM(marginsMM.bottom());\n    m_wkhtmltopdfArgs << \"--margin-left\" << marginToStrMM(marginsMM.left());\n    m_wkhtmltopdfArgs << \"--margin-right\" << marginToStrMM(marginsMM.right());\n    m_wkhtmltopdfArgs << \"--margin-top\" << marginToStrMM(marginsMM.top());\n\n    // Footer.\n    m_wkhtmltopdfArgs << \"--footer-right\" << \"[page]\"\n                      << \"--footer-spacing\" << QString::number(marginsMM.bottom() / 3, 'f', 2);\n  }\n\n  m_wkhtmltopdfArgs << \"--encoding\" << \"utf-8\";\n\n  // Delay 10 seconds for MathJax.\n  m_wkhtmltopdfArgs << \"--javascript-delay\" << \"5000\";\n\n  m_wkhtmltopdfArgs << \"--enable-local-file-access\";\n\n  // Append additional global option.\n  if (!p_pdfOption.m_wkhtmltopdfArgs.isEmpty()) {\n    m_wkhtmltopdfArgs.append(ProcessUtils::parseCombinedArgString(p_pdfOption.m_wkhtmltopdfArgs));\n  }\n\n  // Must be put after the global object options.\n  if (p_pdfOption.m_addTableOfContents) {\n    m_wkhtmltopdfArgs << \"toc\";\n    m_wkhtmltopdfArgs << \"--toc-text-size-shrink\" << \"1.0\";\n    m_wkhtmltopdfArgs << \"--toc-header-text\" << HtmlUtils::unicodeEncode(tr(\"Table of Contents\"));\n  }\n}\n\nbool WebViewExporter::embedStyleResources(QString &p_html) const {\n  bool altered = false;\n  QRegularExpression reg(\"\\\\burl\\\\(\\\"((file|qrc):[^\\\"\\\\)]+)\\\"\\\\);\");\n\n  int pos = 0;\n  while (pos < p_html.size()) {\n    QRegularExpressionMatch match;\n    int idx = p_html.indexOf(reg, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    QString dataURI = WebUtils::toDataUri(QUrl(match.captured(1)), false);\n    if (dataURI.isEmpty()) {\n      pos = idx + match.capturedLength();\n    } else {\n      // Replace the url string in html.\n      QString newUrl = QStringLiteral(\"url('%1');\").arg(dataURI);\n      p_html.replace(idx, match.capturedLength(), newUrl);\n      pos = idx + newUrl.size();\n      altered = true;\n    }\n  }\n\n  return altered;\n}\n\nbool WebViewExporter::embedBodyResources(const QUrl &p_baseUrl, QString &p_html) {\n  bool altered = false;\n  if (p_baseUrl.isEmpty()) {\n    return altered;\n  }\n\n  QRegularExpression reg(c_imgRegExp);\n\n  int pos = 0;\n  while (pos < p_html.size()) {\n    QRegularExpressionMatch match;\n    int idx = p_html.indexOf(reg, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    if (match.captured(2).isEmpty()) {\n      pos = idx + match.capturedLength();\n      continue;\n    }\n\n    QUrl srcUrl(p_baseUrl.resolved(match.captured(2)));\n    const auto dataURI = WebUtils::toDataUri(srcUrl, true);\n    if (dataURI.isEmpty()) {\n      pos = idx + match.capturedLength();\n    } else {\n      // Replace the url string in html.\n      QString newUrl =\n          QStringLiteral(\"<img %1src='%2'%3>\").arg(match.captured(1), dataURI, match.captured(3));\n      p_html.replace(idx, match.capturedLength(), newUrl);\n      pos = idx + newUrl.size();\n      altered = true;\n    }\n  }\n\n  return altered;\n}\n\nstatic QString getResourceRelativePath(const QString &p_file) {\n  int idx = p_file.lastIndexOf('/');\n  int idx2 = p_file.lastIndexOf('/', idx - 1);\n  Q_ASSERT(idx > 0 && idx2 < idx);\n  return \".\" + p_file.mid(idx2);\n}\n\nbool WebViewExporter::fixBodyResources(const QUrl &p_baseUrl, const QString &p_folder,\n                                       QString &p_html) {\n  bool altered = false;\n  if (p_baseUrl.isEmpty()) {\n    return altered;\n  }\n\n  QRegularExpression reg(c_imgRegExp);\n\n  int pos = 0;\n  while (pos < p_html.size()) {\n    QRegularExpressionMatch match;\n    int idx = p_html.indexOf(reg, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    if (match.captured(2).isEmpty()) {\n      pos = idx + match.capturedLength();\n      continue;\n    }\n\n    QUrl srcUrl(p_baseUrl.resolved(match.captured(2)));\n    QString targetFile = WebUtils::copyResource(srcUrl, p_folder);\n    if (targetFile.isEmpty()) {\n      pos = idx + match.capturedLength();\n    } else {\n      // Replace the url string in html.\n      QString newUrl =\n          QStringLiteral(\"<img %1src=\\\"%2\\\"%3>\")\n              .arg(match.captured(1), getResourceRelativePath(targetFile), match.captured(3));\n      p_html.replace(idx, match.capturedLength(), newUrl);\n      pos = idx + newUrl.size();\n      altered = true;\n    }\n  }\n\n  return altered;\n}\n\nbool WebViewExporter::doExportPdf(const ExportPdfOption &p_pdfOption, const QString &p_outputFile) {\n  ExportState state = ExportState::Busy;\n\n  m_viewer->page()->printToPdf(\n      [&, this](const QByteArray &p_result) {\n        qDebug() << \"doExportPdf printToPdf ready\";\n        if (p_result.isEmpty() || m_askedToStop) {\n          state = ExportState::Failed;\n          return;\n        }\n\n        Q_ASSERT(!p_outputFile.isEmpty());\n\n        FileUtils::writeFile(p_outputFile, p_result);\n\n        state = ExportState::Finished;\n      },\n      *p_pdfOption.m_layout);\n\n  while (state == ExportState::Busy) {\n    Utils::sleepWait(100);\n\n    if (m_askedToStop) {\n      break;\n    }\n  }\n\n  return state == ExportState::Finished;\n}\n\nbool WebViewExporter::doExportWkhtmltopdf(const ExportPdfOption &p_pdfOption,\n                                          const QString &p_outputFile, const QUrl &p_baseUrl) {\n  if (p_pdfOption.m_wkhtmltopdfExePath.isEmpty()) {\n    qWarning() << \"invalid wkhtmltopdf executable path\";\n    return false;\n  }\n\n  ExportState state = ExportState::Busy;\n\n  connect(m_viewer->adapter(), &MarkdownViewerAdapter::contentReady, this,\n          [&, this](const QString &p_headContent, const QString &p_styleContent,\n                    const QString &p_content, const QString &p_bodyClassList) {\n            qDebug() << \"doExportWkhtmltopdf contentReady\";\n            // Maybe unnecessary. Just to avoid duplicated signal connections.\n            disconnect(m_viewer->adapter(), &MarkdownViewerAdapter::contentReady, this, 0);\n\n            if (p_content.isEmpty() || m_askedToStop) {\n              state = ExportState::Failed;\n              return;\n            }\n\n            // Save HTML to a temp dir.\n            QTemporaryDir tmpDir;\n            if (!tmpDir.isValid()) {\n              state = ExportState::Failed;\n              return;\n            }\n\n            auto tmpHtmlFile = tmpDir.filePath(\"vnote_export_tmp.html\");\n            if (!writeHtmlFile(tmpHtmlFile, p_baseUrl, p_headContent, p_styleContent, p_content,\n                               p_bodyClassList, true, true, false)) {\n              state = ExportState::Failed;\n              return;\n            }\n\n            // Convert HTML to PDF via wkhtmltopdf.\n            if (htmlToPdfViaWkhtmltopdf(p_pdfOption, QStringList() << tmpHtmlFile, p_outputFile)) {\n              state = ExportState::Finished;\n            } else {\n              state = ExportState::Failed;\n            }\n          });\n\n  m_viewer->adapter()->saveContent();\n\n  while (state == ExportState::Busy) {\n    Utils::sleepWait(100);\n\n    if (m_askedToStop) {\n      break;\n    }\n  }\n\n  return state == ExportState::Finished;\n}\n\nbool WebViewExporter::htmlToPdfViaWkhtmltopdf(const ExportPdfOption &p_pdfOption,\n                                              const QStringList &p_htmlFiles,\n                                              const QString &p_outputFile) {\n  QStringList args(m_wkhtmltopdfArgs);\n\n  // Prepare the args.\n  for (auto const &file : p_htmlFiles) {\n    // Note: system's locale settings (Language for non-Unicode programs) is important to\n    // wkhtmltopdf. Input file could be encoded via\n    // QUrl::fromLocalFile(p_htmlFile).toString(QUrl::EncodeUnicode) to handle non-ASCII path. But\n    // for the output file, it is useless.\n    args << QUrl::fromLocalFile(QDir::toNativeSeparators(file)).toString(QUrl::EncodeUnicode);\n  }\n\n  // To handle non-ASCII path, export it to a temp file and then copy it.\n  QTemporaryDir tmpDir;\n  if (!tmpDir.isValid()) {\n    return false;\n  }\n\n  const auto tmpFile = tmpDir.filePath(\"vx_tmp_output.pdf\");\n  args << QDir::toNativeSeparators(tmpFile);\n\n  bool ret = startProcess(QDir::toNativeSeparators(p_pdfOption.m_wkhtmltopdfExePath), args);\n  if (ret && QFileInfo::exists(tmpFile)) {\n    emit logRequested(tr(\"Copy output file (%1) to (%2).\").arg(tmpFile, p_outputFile));\n    FileUtils::copyFile(tmpFile, p_outputFile);\n  }\n\n  return ret;\n}\n\nbool WebViewExporter::startProcess(const QString &p_program, const QStringList &p_args) {\n  emit logRequested(p_program + \" \" + ProcessUtils::combineArgString(p_args));\n\n  auto ret = ProcessUtils::start(\n      p_program, p_args, [this](const QString &p_log) { emit logRequested(p_log); }, m_askedToStop);\n  return ret == ProcessUtils::State::Succeeded;\n}\n"
  },
  {
    "path": "src/export/webviewexporter.h",
    "content": "#ifndef WEBVIEWEXPORTER_H\n#define WEBVIEWEXPORTER_H\n\n#include <QObject>\n\n#include \"exportdata.h\"\n\nclass QWidget;\n\nnamespace vnotex {\nclass File;\nclass MarkdownViewer;\n\nclass WebViewExporter : public QObject {\n  Q_OBJECT\npublic:\n  enum WebViewState { Started = 0, LoadFinished = 0x1, WorkFinished = 0x2, Failed = 0x4 };\n  Q_DECLARE_FLAGS(WebViewStates, WebViewState);\n\n  // We need QWidget as parent.\n  explicit WebViewExporter(QWidget *p_parent);\n\n  ~WebViewExporter();\n\n  bool doExport(const ExportOption &p_option, const File *p_file, const QString &p_outputFile);\n\n  void prepare(const ExportOption &p_option);\n\n  // Release resources after one batch of export.\n  void clear();\n\n  void stop();\n\n  bool htmlToPdfViaWkhtmltopdf(const ExportPdfOption &p_pdfOption, const QStringList &p_htmlFiles,\n                               const QString &p_outputFile);\n\nsignals:\n  void logRequested(const QString &p_log);\n\nprivate:\n  enum class ExportState { Busy = 0, Finished, Failed };\n\n  bool isWebViewReady() const;\n\n  bool isWebViewFailed() const;\n\n  bool doExportHtml(const ExportHtmlOption &p_htmlOption, const QString &p_outputFile,\n                    const QUrl &p_baseUrl);\n\n  bool writeHtmlFile(const QString &p_file, const QUrl &p_baseUrl, const QString &p_headContent,\n                     QString p_styleContent, const QString &p_content,\n                     const QString &p_bodyClassList, bool p_embedStyles, bool p_completePage,\n                     bool p_embedImages);\n\n  bool embedStyleResources(QString &p_html) const;\n\n  bool embedBodyResources(const QUrl &p_baseUrl, QString &p_html);\n\n  bool fixBodyResources(const QUrl &p_baseUrl, const QString &p_folder, QString &p_html);\n\n  bool doExportPdf(const ExportPdfOption &p_pdfOption, const QString &p_outputFile);\n\n  bool doExportWkhtmltopdf(const ExportPdfOption &p_pdfOption, const QString &p_outputFile,\n                           const QUrl &p_baseUrl);\n\n  QSize pageLayoutSize(const QPageLayout &p_layout) const;\n\n  void prepareWkhtmltopdfArguments(const ExportPdfOption &p_pdfOption);\n\n  bool startProcess(const QString &p_program, const QStringList &p_args);\n\n  bool m_askedToStop = false;\n\n  bool m_exportOngoing = false;\n\n  WebViewStates m_webViewStates = WebViewState::Started;\n\n  // Managed by QObject.\n  MarkdownViewer *m_viewer = nullptr;\n\n  QString m_htmlTemplate;\n\n  QString m_exportHtmlTemplate;\n\n  QStringList m_wkhtmltopdfArgs;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::WebViewExporter::WebViewStates)\n\n#endif // WEBVIEWEXPORTER_H\n"
  },
  {
    "path": "src/fakeaccessible.cpp",
    "content": "#include \"fakeaccessible.h\"\n\n#include <QAccessible>\n#include <QDebug>\n\nusing namespace vnotex;\n\nQAccessibleInterface *FakeAccessible::accessibleFactory(const QString &p_className,\n                                                        QObject *p_obj) {\n  // Try to fix non-responsible issue caused by Youdao Dict.\n  if (p_className.startsWith(QStringLiteral(\"vnotex::\")) ||\n      p_className.startsWith(QStringLiteral(\"vte::\"))) {\n    // Qt's docs: All interfaces are managed by an internal cache and should not be deleted.\n    return new FakeAccessibleInterface(p_obj);\n  }\n\n  return nullptr;\n}\n\nFakeAccessibleInterface::FakeAccessibleInterface(QObject *p_obj) : m_object(p_obj) {}\n\nQAccessibleInterface *FakeAccessibleInterface::child(int p_index) const {\n  Q_UNUSED(p_index);\n  return nullptr;\n}\n\nQAccessibleInterface *FakeAccessibleInterface::childAt(int p_x, int p_y) const {\n  Q_UNUSED(p_x);\n  Q_UNUSED(p_y);\n  return nullptr;\n}\n\nint FakeAccessibleInterface::childCount() const { return 0; }\n\nint FakeAccessibleInterface::indexOfChild(const QAccessibleInterface *p_child) const {\n  Q_UNUSED(p_child);\n  return -1;\n}\n\nbool FakeAccessibleInterface::isValid() const { return false; }\n\nQObject *FakeAccessibleInterface::object() const { return m_object; }\n\nQAccessibleInterface *FakeAccessibleInterface::parent() const { return nullptr; }\n\nQRect FakeAccessibleInterface::rect() const { return QRect(); }\n\nQAccessible::Role FakeAccessibleInterface::role() const { return QAccessible::NoRole; }\n\nvoid FakeAccessibleInterface::setText(QAccessible::Text p_t, const QString &p_text) {\n  Q_UNUSED(p_t);\n  Q_UNUSED(p_text);\n}\n\nQAccessible::State FakeAccessibleInterface::state() const {\n  QAccessible::State state;\n  state.disabled = true;\n  return state;\n}\n\nQString FakeAccessibleInterface::text(QAccessible::Text p_t) const {\n  Q_UNUSED(p_t);\n  return QString();\n}\n"
  },
  {
    "path": "src/fakeaccessible.h",
    "content": "#ifndef FAKEACCESSIBLE_H\n#define FAKEACCESSIBLE_H\n\n#include <QAccessibleInterface>\n\nclass QObject;\nclass QString;\n\nnamespace vnotex {\nclass FakeAccessible {\npublic:\n  FakeAccessible() = delete;\n\n  static QAccessibleInterface *accessibleFactory(const QString &p_className, QObject *p_obj);\n};\n\nclass FakeAccessibleInterface : public QAccessibleInterface {\npublic:\n  FakeAccessibleInterface(QObject *p_obj);\n\n  QAccessibleInterface *child(int p_index) const Q_DECL_OVERRIDE;\n\n  QAccessibleInterface *childAt(int p_x, int p_y) const Q_DECL_OVERRIDE;\n\n  int childCount() const Q_DECL_OVERRIDE;\n\n  int indexOfChild(const QAccessibleInterface *p_child) const Q_DECL_OVERRIDE;\n\n  bool isValid() const Q_DECL_OVERRIDE;\n\n  QObject *object() const Q_DECL_OVERRIDE;\n\n  QAccessibleInterface *parent() const Q_DECL_OVERRIDE;\n\n  QRect rect() const Q_DECL_OVERRIDE;\n\n  QAccessible::Role role() const Q_DECL_OVERRIDE;\n\n  void setText(QAccessible::Text p_t, const QString &p_text) Q_DECL_OVERRIDE;\n\n  QAccessible::State state() const Q_DECL_OVERRIDE;\n\n  QString text(QAccessible::Text p_t) const Q_DECL_OVERRIDE;\n\nprivate:\n  QObject *m_object = nullptr;\n};\n} // namespace vnotex\n\n#endif // FAKEACCESSIBLE_H\n"
  },
  {
    "path": "src/imagehost/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    giteeimagehost.cpp giteeimagehost.h\n    githubimagehost.cpp githubimagehost.h\n    imagehost.cpp imagehost.h\n    imagehostmgr.cpp imagehostmgr.h\n    imagehostutils.cpp imagehostutils.h\n    repoimagehost.cpp repoimagehost.h\n)\n"
  },
  {
    "path": "src/imagehost/giteeimagehost.cpp",
    "content": "#include \"giteeimagehost.h\"\n\n#include <QByteArray>\n#include <QDebug>\n#include <QFileInfo>\n\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nconst QString GiteeImageHost::c_apiUrl = \"https://gitee.com/api/v5\";\n\nGiteeImageHost::GiteeImageHost(QObject *p_parent) : RepoImageHost(p_parent) {}\n\nbool GiteeImageHost::ready() const {\n  return !m_personalAccessToken.isEmpty() && !m_userName.isEmpty() && !m_repoName.isEmpty();\n}\n\nImageHost::Type GiteeImageHost::getType() const { return Type::Gitee; }\n\nQJsonObject GiteeImageHost::getConfig() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"personal_access_token\")] = m_personalAccessToken;\n  obj[QStringLiteral(\"user_name\")] = m_userName;\n  obj[QStringLiteral(\"repository_name\")] = m_repoName;\n  return obj;\n}\n\nvoid GiteeImageHost::setConfig(const QJsonObject &p_jobj) {\n  parseConfig(p_jobj, m_personalAccessToken, m_userName, m_repoName);\n\n  // Do not assume the default branch.\n  m_imageUrlPrefix = QStringLiteral(\"https://gitee.com/%1/%2/raw/\").arg(m_userName, m_repoName);\n}\n\nvte::NetworkAccess::RawHeaderPairs GiteeImageHost::prepareCommonHeaders() {\n  vte::NetworkAccess::RawHeaderPairs rawHeader;\n  rawHeader.push_back(\n      qMakePair(QByteArray(\"Content-Type\"), QByteArray(\"application/json;charset=UTF-8\")));\n  return rawHeader;\n}\n\nQString GiteeImageHost::addAccessToken(const QString &p_token, QString p_url) {\n  if (p_url.contains(QLatin1Char('?'))) {\n    p_url += QStringLiteral(\"&access_token=%1\").arg(p_token);\n  } else {\n    p_url += QStringLiteral(\"?access_token=%1\").arg(p_token);\n  }\n  return p_url;\n}\n\nvte::NetworkReply GiteeImageHost::getRepoInfo(const QString &p_token, const QString &p_userName,\n                                              const QString &p_repoName) const {\n  auto rawHeader = prepareCommonHeaders();\n  auto urlStr = QStringLiteral(\"%1/repos/%2/%3\").arg(c_apiUrl, p_userName, p_repoName);\n  auto reply = vte::NetworkAccess::request(QUrl(addAccessToken(p_token, urlStr)), rawHeader);\n  return reply;\n}\n\nstatic bool isEmptyResponse(const QByteArray &p_data) { return p_data == QByteArray(\"[]\"); }\n\nQString GiteeImageHost::create(const QByteArray &p_data, const QString &p_path, QString &p_msg) {\n  QString destUrl;\n\n  if (p_path.isEmpty()) {\n    p_msg = tr(\"Failed to create image with empty path.\");\n    return destUrl;\n  }\n\n  if (!ready()) {\n    p_msg = tr(\"Invalid Gitee image host configuration.\");\n    return QString();\n  }\n\n  auto rawHeader = prepareCommonHeaders();\n  const auto urlStr =\n      QStringLiteral(\"%1/repos/%2/%3/contents/%4\").arg(c_apiUrl, m_userName, m_repoName, p_path);\n\n  // Check if @p_path already exists.\n  auto reply =\n      vte::NetworkAccess::request(QUrl(addAccessToken(m_personalAccessToken, urlStr)), rawHeader);\n  if (reply.m_error == QNetworkReply::NoError) {\n    if (!isEmptyResponse(reply.m_data)) {\n      p_msg = tr(\"The resource already exists at the image host (%1).\").arg(p_path);\n      return QString();\n    }\n  } else if (reply.m_error != QNetworkReply::ContentNotFoundError) {\n    p_msg = tr(\"Failed to query the resource at the image host (%1) (%2) (%3).\")\n                .arg(urlStr, reply.errorStr(), reply.m_data);\n    return QString();\n  }\n\n  // Create the content.\n  QJsonObject requestDataObj;\n  requestDataObj[QStringLiteral(\"access_token\")] = m_personalAccessToken;\n  requestDataObj[QStringLiteral(\"message\")] = QStringLiteral(\"VX_ADD: %1\").arg(p_path);\n  requestDataObj[QStringLiteral(\"content\")] = QString::fromUtf8(p_data.toBase64());\n  auto requestData = Utils::toJsonString(requestDataObj);\n  reply = vte::NetworkAccess::post(QUrl(urlStr), rawHeader, requestData);\n  if (reply.m_error != QNetworkReply::NoError) {\n    p_msg = tr(\"Failed to create resource at the image host (%1) (%2) (%3).\")\n                .arg(urlStr, reply.errorStr(), reply.m_data);\n    return QString();\n  } else {\n    auto replyObj = Utils::fromJsonString(reply.m_data);\n    Q_ASSERT(!replyObj.isEmpty());\n    auto targetUrl = replyObj[QStringLiteral(\"content\")]\n                         .toObject()\n                         .value(QStringLiteral(\"download_url\"))\n                         .toString();\n    if (targetUrl.isEmpty()) {\n      p_msg = tr(\"Failed to create resource at the image host (%1) (%2) (%3).\")\n                  .arg(urlStr, reply.errorStr(), reply.m_data);\n    } else {\n      targetUrl = PathUtils::encodeSpacesInPath(targetUrl);\n      qDebug() << \"created resource\" << targetUrl;\n    }\n    return targetUrl;\n  }\n}\n\nbool GiteeImageHost::ownsUrl(const QString &p_url) const {\n  return p_url.startsWith(m_imageUrlPrefix);\n}\n\nbool GiteeImageHost::remove(const QString &p_url, QString &p_msg) {\n  Q_ASSERT(ownsUrl(p_url));\n\n  if (!ready()) {\n    p_msg = tr(\"Invalid Gitee image host configuration.\");\n    return false;\n  }\n\n  const auto resourcePath = fetchResourcePath(m_imageUrlPrefix, p_url);\n\n  auto rawHeader = prepareCommonHeaders();\n  const auto urlStr = QStringLiteral(\"%1/repos/%2/%3/contents/%4\")\n                          .arg(c_apiUrl, m_userName, m_repoName, resourcePath);\n\n  // Get the SHA of the resource.\n  auto reply =\n      vte::NetworkAccess::request(QUrl(addAccessToken(m_personalAccessToken, urlStr)), rawHeader);\n  if (reply.m_error != QNetworkReply::NoError || isEmptyResponse(reply.m_data)) {\n    p_msg = tr(\"Failed to fetch information about the resource (%1).\").arg(resourcePath);\n    return false;\n  }\n\n  auto replyObj = Utils::fromJsonString(reply.m_data);\n  Q_ASSERT(!replyObj.isEmpty());\n  const auto sha = replyObj[QStringLiteral(\"sha\")].toString();\n  if (sha.isEmpty()) {\n    p_msg = tr(\"Failed to fetch SHA about the resource (%1) (%2).\")\n                .arg(resourcePath, QString::fromUtf8(reply.m_data));\n    return false;\n  }\n\n  // Delete.\n  QJsonObject requestDataObj;\n  requestDataObj[QStringLiteral(\"access_token\")] = m_personalAccessToken;\n  requestDataObj[QStringLiteral(\"message\")] = QStringLiteral(\"VX_DEL: %1\").arg(resourcePath);\n  requestDataObj[QStringLiteral(\"sha\")] = sha;\n  auto requestData = Utils::toJsonString(requestDataObj);\n  reply = vte::NetworkAccess::deleteResource(QUrl(urlStr), rawHeader, requestData);\n  if (reply.m_error != QNetworkReply::NoError) {\n    p_msg = tr(\"Failed to delete resource (%1) (%2).\")\n                .arg(resourcePath, QString::fromUtf8(reply.m_data));\n    return false;\n  }\n\n  qDebug() << \"deleted resource\" << resourcePath;\n\n  return true;\n}\n"
  },
  {
    "path": "src/imagehost/giteeimagehost.h",
    "content": "#ifndef GITEEIMAGEHOST_H\n#define GITEEIMAGEHOST_H\n\n#include \"repoimagehost.h\"\n\nnamespace vnotex {\nclass GiteeImageHost : public RepoImageHost {\n  Q_OBJECT\npublic:\n  explicit GiteeImageHost(QObject *p_parent);\n\n  bool ready() const Q_DECL_OVERRIDE;\n\n  Type getType() const Q_DECL_OVERRIDE;\n\n  QJsonObject getConfig() const Q_DECL_OVERRIDE;\n\n  void setConfig(const QJsonObject &p_jobj) Q_DECL_OVERRIDE;\n\n  QString create(const QByteArray &p_data, const QString &p_path, QString &p_msg) Q_DECL_OVERRIDE;\n\n  bool remove(const QString &p_url, QString &p_msg) Q_DECL_OVERRIDE;\n\n  bool ownsUrl(const QString &p_url) const Q_DECL_OVERRIDE;\n\nprivate:\n  vte::NetworkReply getRepoInfo(const QString &p_token, const QString &p_userName,\n                                const QString &p_repoName) const Q_DECL_OVERRIDE;\n\n  static vte::NetworkAccess::RawHeaderPairs prepareCommonHeaders();\n\n  static QString addAccessToken(const QString &p_token, QString p_url);\n\n  QString m_personalAccessToken;\n\n  QString m_userName;\n\n  QString m_repoName;\n\n  QString m_imageUrlPrefix;\n\n  static const QString c_apiUrl;\n};\n} // namespace vnotex\n\n#endif // GITEEIMAGEHOST_H\n"
  },
  {
    "path": "src/imagehost/githubimagehost.cpp",
    "content": "#include \"githubimagehost.h\"\n\n#include <QByteArray>\n#include <QDebug>\n#include <QFileInfo>\n#include <QJsonArray>\n#include <QJsonDocument>\n\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nconst QString GitHubImageHost::c_apiUrl = \"https://api.github.com\";\n\nGitHubImageHost::GitHubImageHost(QObject *p_parent) : RepoImageHost(p_parent) {}\n\nbool GitHubImageHost::ready() const {\n  return !m_personalAccessToken.isEmpty() && !m_userName.isEmpty() && !m_repoName.isEmpty();\n}\n\nImageHost::Type GitHubImageHost::getType() const { return Type::GitHub; }\n\nQJsonObject GitHubImageHost::getConfig() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"personal_access_token\")] = m_personalAccessToken;\n  obj[QStringLiteral(\"user_name\")] = m_userName;\n  obj[QStringLiteral(\"repository_name\")] = m_repoName;\n  return obj;\n}\n\nvoid GitHubImageHost::setConfig(const QJsonObject &p_jobj) {\n  parseConfig(p_jobj, m_personalAccessToken, m_userName, m_repoName);\n\n  // Do not assume the default branch.\n  m_imageUrlPrefix =\n      QStringLiteral(\"https://raw.githubusercontent.com/%1/%2/\").arg(m_userName, m_repoName);\n}\n\nQPair<QByteArray, QByteArray> GitHubImageHost::authorizationHeader(const QString &p_token) {\n  auto token = \"token \" + p_token;\n  return qMakePair(QByteArray(\"Authorization\"), token.toUtf8());\n}\n\nQPair<QByteArray, QByteArray> GitHubImageHost::acceptHeader() {\n  return qMakePair(QByteArray(\"Accept\"), QByteArray(\"application/vnd.github.v3+json\"));\n}\n\nvte::NetworkAccess::RawHeaderPairs GitHubImageHost::prepareCommonHeaders(const QString &p_token) {\n  vte::NetworkAccess::RawHeaderPairs rawHeader;\n  rawHeader.push_back(authorizationHeader(p_token));\n  rawHeader.push_back(acceptHeader());\n  return rawHeader;\n}\n\nvte::NetworkReply GitHubImageHost::getRepoInfo(const QString &p_token, const QString &p_userName,\n                                               const QString &p_repoName) const {\n  auto rawHeader = prepareCommonHeaders(p_token);\n  const auto urlStr = QStringLiteral(\"%1/repos/%2/%3\").arg(c_apiUrl, p_userName, p_repoName);\n  auto reply = vte::NetworkAccess::request(QUrl(urlStr), rawHeader);\n  return reply;\n}\n\nQString GitHubImageHost::create(const QByteArray &p_data, const QString &p_path, QString &p_msg) {\n  QString destUrl;\n\n  if (p_path.isEmpty()) {\n    p_msg = tr(\"Failed to create image with empty path.\");\n    return destUrl;\n  }\n\n  if (!ready()) {\n    p_msg = tr(\"Invalid GitHub image host configuration.\");\n    return QString();\n  }\n\n  auto rawHeader = prepareCommonHeaders(m_personalAccessToken);\n  const auto urlStr =\n      QStringLiteral(\"%1/repos/%2/%3/contents/%4\").arg(c_apiUrl, m_userName, m_repoName, p_path);\n\n  // Check if @p_path already exists.\n  auto reply = vte::NetworkAccess::request(QUrl(urlStr), rawHeader);\n  if (reply.m_error == QNetworkReply::NoError) {\n    p_msg = tr(\"The resource already exists at the image host (%1).\").arg(p_path);\n    return QString();\n  } else if (reply.m_error != QNetworkReply::ContentNotFoundError) {\n    p_msg = tr(\"Failed to query the resource at the image host (%1) (%2) (%3).\")\n                .arg(urlStr, reply.errorStr(), reply.m_data);\n    return QString();\n  }\n\n  // Create the content.\n  QJsonObject requestDataObj;\n  requestDataObj[QStringLiteral(\"message\")] = QStringLiteral(\"VX_ADD: %1\").arg(p_path);\n  requestDataObj[QStringLiteral(\"content\")] = QString::fromUtf8(p_data.toBase64());\n  auto requestData = Utils::toJsonString(requestDataObj);\n  reply = vte::NetworkAccess::put(QUrl(urlStr), rawHeader, requestData);\n  if (reply.m_error != QNetworkReply::NoError) {\n    p_msg = tr(\"Failed to create resource at the image host (%1) (%2) (%3).\")\n                .arg(urlStr, reply.errorStr(), reply.m_data);\n    return QString();\n  } else {\n    auto replyObj = Utils::fromJsonString(reply.m_data);\n    Q_ASSERT(!replyObj.isEmpty());\n    auto targetUrl = replyObj[QStringLiteral(\"content\")]\n                         .toObject()\n                         .value(QStringLiteral(\"download_url\"))\n                         .toString();\n    if (targetUrl.isEmpty()) {\n      p_msg = tr(\"Failed to create resource at the image host (%1) (%2) (%3).\")\n                  .arg(urlStr, reply.errorStr(), reply.m_data);\n    } else {\n      qDebug() << \"created resource\" << targetUrl;\n    }\n    return targetUrl;\n  }\n}\n\nbool GitHubImageHost::ownsUrl(const QString &p_url) const {\n  return p_url.startsWith(m_imageUrlPrefix);\n}\n\nbool GitHubImageHost::remove(const QString &p_url, QString &p_msg) {\n  Q_ASSERT(ownsUrl(p_url));\n\n  if (!ready()) {\n    p_msg = tr(\"Invalid GitHub image host configuration.\");\n    return false;\n  }\n\n  const auto resourcePath = fetchResourcePath(m_imageUrlPrefix, p_url);\n\n  auto rawHeader = prepareCommonHeaders(m_personalAccessToken);\n  const auto urlStr = QStringLiteral(\"%1/repos/%2/%3/contents/%4\")\n                          .arg(c_apiUrl, m_userName, m_repoName, resourcePath);\n\n  // Get the SHA of the resource.\n  QString sha = \"\";\n  auto reply = vte::NetworkAccess::request(QUrl(urlStr), rawHeader);\n  if (reply.m_error == QNetworkReply::NoError) {\n    auto replyObj = Utils::fromJsonString(reply.m_data);\n    Q_ASSERT(!replyObj.isEmpty());\n    sha = replyObj[QStringLiteral(\"sha\")].toString();\n  } else if (reply.m_error == QNetworkReply::ContentAccessDenied) { // File larger than 1M\n\n    // Get all file information under the warehouse directory\n    const auto fileInfo = QFileInfo(urlStr);\n    const auto urlFilePath = QUrl(fileInfo.path());\n    const auto fleName = fileInfo.fileName();\n    reply = vte::NetworkAccess::request(urlFilePath, rawHeader);\n\n    if (QNetworkReply::NoError == reply.m_error) {\n      const auto jsonArray = QJsonDocument::fromJson(reply.m_data).array();\n      for (auto i = jsonArray.begin(); i < jsonArray.end(); i++) {\n        if (!i->isObject()) {\n          continue;\n        }\n        const auto jsonObj = i->toObject();\n        const auto name = jsonObj[QStringLiteral(\"name\")].toString();\n        if (name == fleName) {\n          sha = jsonObj[QStringLiteral(\"sha\")].toString();\n          break;\n        }\n      }\n    }\n  }\n\n  if (sha.isEmpty()) {\n    p_msg = tr(\"Failed to fetch SHA about the resource (%1) (%2).\")\n                .arg(resourcePath, QString::fromUtf8(reply.m_data));\n    return false;\n  }\n\n  // Delete.\n  QJsonObject requestDataObj;\n  requestDataObj[QStringLiteral(\"message\")] = QStringLiteral(\"VX_DEL: %1\").arg(resourcePath);\n  requestDataObj[QStringLiteral(\"sha\")] = sha;\n  auto requestData = Utils::toJsonString(requestDataObj);\n  reply = vte::NetworkAccess::deleteResource(QUrl(urlStr), rawHeader, requestData);\n  if (reply.m_error != QNetworkReply::NoError) {\n    p_msg = tr(\"Failed to delete resource (%1) (%2).\")\n                .arg(resourcePath, QString::fromUtf8(reply.m_data));\n    return false;\n  }\n\n  qDebug() << \"deleted resource\" << resourcePath;\n\n  return true;\n}\n"
  },
  {
    "path": "src/imagehost/githubimagehost.h",
    "content": "#ifndef GITHUBIMAGEHOST_H\n#define GITHUBIMAGEHOST_H\n\n#include \"repoimagehost.h\"\n\nnamespace vnotex {\nclass GitHubImageHost : public RepoImageHost {\n  Q_OBJECT\npublic:\n  explicit GitHubImageHost(QObject *p_parent);\n\n  bool ready() const Q_DECL_OVERRIDE;\n\n  Type getType() const Q_DECL_OVERRIDE;\n\n  QJsonObject getConfig() const Q_DECL_OVERRIDE;\n\n  void setConfig(const QJsonObject &p_jobj) Q_DECL_OVERRIDE;\n\n  QString create(const QByteArray &p_data, const QString &p_path, QString &p_msg) Q_DECL_OVERRIDE;\n\n  bool remove(const QString &p_url, QString &p_msg) Q_DECL_OVERRIDE;\n\n  bool ownsUrl(const QString &p_url) const Q_DECL_OVERRIDE;\n\nprotected:\n  QString m_personalAccessToken;\n\n  QString m_userName;\n\n  QString m_repoName;\n\n  QString m_imageUrlPrefix;\n\nprivate:\n  vte::NetworkReply getRepoInfo(const QString &p_token, const QString &p_userName,\n                                const QString &p_repoName) const Q_DECL_OVERRIDE;\n\n  static QPair<QByteArray, QByteArray> authorizationHeader(const QString &p_token);\n\n  static QPair<QByteArray, QByteArray> acceptHeader();\n\n  static vte::NetworkAccess::RawHeaderPairs prepareCommonHeaders(const QString &p_token);\n\n  static const QString c_apiUrl;\n};\n} // namespace vnotex\n\n#endif // GITHUBIMAGEHOST_H\n"
  },
  {
    "path": "src/imagehost/imagehost.cpp",
    "content": "#include \"imagehost.h\"\n\nusing namespace vnotex;\n\nImageHost::ImageHost(QObject *p_parent) : QObject(p_parent) {}\n\nconst QString &ImageHost::getName() const { return m_name; }\n\nvoid ImageHost::setName(const QString &p_name) { m_name = p_name; }\n\nQString ImageHost::typeString(ImageHost::Type p_type) {\n  switch (p_type) {\n  case Type::GitHub:\n    return tr(\"GitHub\");\n\n  case Type::Gitee:\n    return tr(\"Gitee\");\n\n  default:\n    Q_ASSERT(false);\n    return QStringLiteral(\"Unknown\");\n  }\n}\n"
  },
  {
    "path": "src/imagehost/imagehost.h",
    "content": "#ifndef IMAGEHOST_H\n#define IMAGEHOST_H\n\n#include <QJsonObject>\n#include <QObject>\n\n#include <core/global.h>\n\nclass QByteArray;\n\nnamespace vnotex {\n// Abstract class for image host.\nclass ImageHost : public QObject {\n  Q_OBJECT\npublic:\n  enum Type { GitHub = 0, Gitee, MaxHost };\n\n  virtual ~ImageHost() = default;\n\n  const QString &getName() const;\n  void setName(const QString &p_name);\n\n  virtual Type getType() const = 0;\n\n  // Whether it is ready to serve.\n  virtual bool ready() const = 0;\n\n  virtual QJsonObject getConfig() const = 0;\n  virtual void setConfig(const QJsonObject &p_jobj) = 0;\n\n  virtual bool testConfig(const QJsonObject &p_jobj, QString &p_msg) = 0;\n\n  // Upload @p_data to the host at path @p_path. Return the target Url string on success.\n  virtual QString create(const QByteArray &p_data, const QString &p_path, QString &p_msg) = 0;\n\n  virtual bool remove(const QString &p_url, QString &p_msg) = 0;\n\n  // Test if @p_url is owned by this image host.\n  virtual bool ownsUrl(const QString &p_url) const = 0;\n\n  static QString typeString(Type p_type);\n\nprotected:\n  explicit ImageHost(QObject *p_parent = nullptr);\n\n  // Name to identify one image host. One type of image host may have multiple instances.\n  QString m_name;\n};\n} // namespace vnotex\n\n#endif // IMAGEHOST_H\n"
  },
  {
    "path": "src/imagehost/imagehostmgr.cpp",
    "content": "#include \"imagehostmgr.h\"\n\n#include <QDebug>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n\n#include \"giteeimagehost.h\"\n#include \"githubimagehost.h\"\n\nusing namespace vnotex;\n\nImageHostMgr::ImageHostMgr() { loadImageHosts(); }\n\nvoid ImageHostMgr::loadImageHosts() {\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  for (const auto &host : editorConfig.getImageHosts()) {\n    if (host.m_type >= ImageHost::Type::MaxHost) {\n      qWarning() << \"skipped unknown type image host\" << host.m_type << host.m_name;\n      continue;\n    }\n\n    if (find(host.m_name)) {\n      qWarning() << \"sikpped image host with name conflict\" << host.m_type << host.m_name;\n      continue;\n    }\n\n    auto imageHost = createImageHost(static_cast<ImageHost::Type>(host.m_type), this);\n    if (!imageHost) {\n      qWarning() << \"failed to create image host\" << host.m_type << host.m_name;\n      continue;\n    }\n\n    imageHost->setName(host.m_name);\n    imageHost->setConfig(host.m_config);\n    add(imageHost);\n  }\n\n  m_defaultHost = find(editorConfig.getDefaultImageHost());\n\n  qDebug() << \"loaded\" << m_hosts.size() << \"image hosts\";\n}\n\nvoid ImageHostMgr::saveImageHosts() {\n  QVector<EditorConfig::ImageHostItem> items;\n  items.resize(m_hosts.size());\n  for (int i = 0; i < m_hosts.size(); ++i) {\n    items[i].m_type = static_cast<int>(m_hosts[i]->getType());\n    items[i].m_name = m_hosts[i]->getName();\n    items[i].m_config = m_hosts[i]->getConfig();\n  }\n\n  auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  editorConfig.setImageHosts(items);\n}\n\nImageHost *ImageHostMgr::createImageHost(ImageHost::Type p_type, QObject *p_parent) {\n  switch (p_type) {\n  case ImageHost::Type::GitHub:\n    return new GitHubImageHost(p_parent);\n\n  case ImageHost::Type::Gitee:\n    return new GiteeImageHost(p_parent);\n\n  default:\n    return nullptr;\n  }\n}\n\nvoid ImageHostMgr::add(ImageHost *p_host) {\n  p_host->setParent(this);\n  m_hosts.append(p_host);\n}\n\nImageHost *ImageHostMgr::find(const QString &p_name) const {\n  if (p_name.isEmpty()) {\n    return nullptr;\n  }\n\n  for (auto host : m_hosts) {\n    if (host->getName() == p_name) {\n      return host;\n    }\n  }\n\n  return nullptr;\n}\n\nImageHost *ImageHostMgr::newImageHost(ImageHost::Type p_type, const QString &p_name) {\n  if (find(p_name)) {\n    qWarning() << \"failed to new image host with existing name\" << p_name;\n    return nullptr;\n  }\n\n  auto host = createImageHost(p_type, this);\n  if (!host) {\n    return nullptr;\n  }\n\n  host->setName(p_name);\n  add(host);\n\n  saveImageHosts();\n\n  emit imageHostChanged();\n\n  return host;\n}\n\nconst QVector<ImageHost *> &ImageHostMgr::getImageHosts() const { return m_hosts; }\n\nvoid ImageHostMgr::removeImageHost(ImageHost *p_host) {\n  m_hosts.removeOne(p_host);\n\n  saveImageHosts();\n\n  if (p_host == m_defaultHost) {\n    m_defaultHost = nullptr;\n    saveDefaultImageHost();\n  }\n\n  emit imageHostChanged();\n}\n\nbool ImageHostMgr::renameImageHost(ImageHost *p_host, const QString &p_newName) {\n  if (p_newName.isEmpty()) {\n    return false;\n  }\n\n  if (p_newName == p_host->getName()) {\n    return true;\n  }\n\n  if (find(p_newName)) {\n    return false;\n  }\n\n  p_host->setName(p_newName);\n\n  saveImageHosts();\n\n  if (m_defaultHost == p_host) {\n    saveDefaultImageHost();\n  }\n\n  emit imageHostChanged();\n  return true;\n}\n\nImageHost *ImageHostMgr::getDefaultImageHost() const { return m_defaultHost; }\n\nvoid ImageHostMgr::setDefaultImageHost(const QString &p_name) {\n  auto host = find(p_name);\n  if (m_defaultHost == host) {\n    return;\n  }\n\n  m_defaultHost = host;\n\n  saveDefaultImageHost();\n\n  emit imageHostChanged();\n}\n\nvoid ImageHostMgr::saveDefaultImageHost() {\n  auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  editorConfig.setDefaultImageHost(m_defaultHost ? m_defaultHost->getName() : QString());\n}\n\nImageHost *ImageHostMgr::findByImageUrl(const QString &p_url) const {\n  if (p_url.isEmpty()) {\n    return nullptr;\n  }\n\n  for (auto host : m_hosts) {\n    if (host->ownsUrl(p_url)) {\n      return host;\n    }\n  }\n\n  return nullptr;\n}\n"
  },
  {
    "path": "src/imagehost/imagehostmgr.h",
    "content": "#ifndef IMAGEHOSTMGR_H\n#define IMAGEHOSTMGR_H\n\n#include <QObject>\n#include <QScopedPointer>\n\n#include <core/noncopyable.h>\n\n#include \"imagehost.h\"\n\nnamespace vnotex {\nclass ImageHostMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  static ImageHostMgr &getInst() {\n    static ImageHostMgr inst;\n    return inst;\n  }\n\n  ImageHost *find(const QString &p_name) const;\n\n  ImageHost *findByImageUrl(const QString &p_url) const;\n\n  ImageHost *newImageHost(ImageHost::Type p_type, const QString &p_name);\n\n  const QVector<ImageHost *> &getImageHosts() const;\n\n  void removeImageHost(ImageHost *p_host);\n\n  bool renameImageHost(ImageHost *p_host, const QString &p_newName);\n\n  void saveImageHosts();\n\n  ImageHost *getDefaultImageHost() const;\n\n  void setDefaultImageHost(const QString &p_name);\n\nsignals:\n  void imageHostChanged();\n\nprivate:\n  ImageHostMgr();\n\n  void loadImageHosts();\n\n  void add(ImageHost *p_host);\n\n  void saveDefaultImageHost();\n\n  static ImageHost *createImageHost(ImageHost::Type p_type, QObject *p_parent);\n\n  QVector<ImageHost *> m_hosts;\n\n  ImageHost *m_defaultHost = nullptr;\n};\n} // namespace vnotex\n\n#endif // IMAGEHOSTMGR_H\n"
  },
  {
    "path": "src/imagehost/imagehostutils.cpp",
    "content": "#include \"imagehostutils.h\"\n\n#include <buffer/buffer.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nQString ImageHostUtils::generateRelativePath(const Buffer *p_buffer) {\n  QString relativePath;\n\n  // To avoid leaking any private information, for external files, we won't add path to it.\n  if (auto node = p_buffer->getNode()) {\n    auto notebook = node->getNotebook();\n    auto name = notebook->getName();\n    if (name.isEmpty() || !PathUtils::isLegalFileName(name)) {\n      name = QStringLiteral(\"vx_notebooks\");\n    }\n\n    relativePath = name;\n    relativePath += \"/\" + notebook->getBackend()->getRelativePath(p_buffer->getPath());\n    relativePath = relativePath.toLower();\n  }\n\n  return relativePath;\n}\n"
  },
  {
    "path": "src/imagehost/imagehostutils.h",
    "content": "#ifndef IMAGEHOSTUTILS_H\n#define IMAGEHOSTUTILS_H\n\n#include <QString>\n\nclass QImage;\nclass QWidget;\n\nnamespace vnotex {\nclass Buffer;\n\nclass ImageHostUtils {\npublic:\n  ImageHostUtils() = delete;\n\n  // According to @p_buffer, generate the relative path on image host for images.\n  static QString generateRelativePath(const Buffer *p_buffer);\n};\n} // namespace vnotex\n\n#endif // IMAGEHOSTUTILS_H\n"
  },
  {
    "path": "src/imagehost/repoimagehost.cpp",
    "content": "#include \"repoimagehost.h\"\n\n#include <utils/utils.h>\n#include <utils/webutils.h>\n\nusing namespace vnotex;\n\nRepoImageHost::RepoImageHost(QObject *p_parent) : ImageHost(p_parent) {}\n\nbool RepoImageHost::testConfig(const QJsonObject &p_jobj, QString &p_msg) {\n  p_msg.clear();\n\n  QString token, userName, repoName;\n  parseConfig(p_jobj, token, userName, repoName);\n\n  if (token.isEmpty() || userName.isEmpty() || repoName.isEmpty()) {\n    p_msg = tr(\"PersonalAccessToken/UserName/RepositoryName should not be empty.\");\n    return false;\n  }\n\n  auto reply = getRepoInfo(token, userName, repoName);\n  p_msg = QString::fromUtf8(reply.m_data);\n\n  if (reply.m_error != QNetworkReply::NoError) {\n    return false;\n  }\n\n  auto replyObj = Utils::fromJsonString(reply.m_data);\n  if (replyObj.isEmpty()) {\n    return false;\n  }\n\n  if (replyObj[QStringLiteral(\"private\")].toBool()) {\n    p_msg = tr(\"Private repository is not supported.\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid RepoImageHost::parseConfig(const QJsonObject &p_jobj, QString &p_token, QString &p_userName,\n                                QString &p_repoName) {\n  p_token = p_jobj[QStringLiteral(\"personal_access_token\")].toString();\n  p_userName = p_jobj[QStringLiteral(\"user_name\")].toString();\n  p_repoName = p_jobj[QStringLiteral(\"repository_name\")].toString();\n}\n\nQString RepoImageHost::fetchResourcePath(const QString &p_prefix, const QString &p_url) {\n  auto resourcePath = p_url.mid(p_prefix.size());\n  // Skip the branch name.\n  resourcePath = resourcePath.mid(resourcePath.indexOf(QLatin1Char('/')) + 1);\n  resourcePath = WebUtils::purifyUrl(resourcePath);\n  return resourcePath;\n}\n"
  },
  {
    "path": "src/imagehost/repoimagehost.h",
    "content": "#ifndef REPOIMAGEHOST_H\n#define REPOIMAGEHOST_H\n\n#include \"imagehost.h\"\n\n#include <vtextedit/networkutils.h>\n\nnamespace vnotex {\nclass RepoImageHost : public ImageHost {\n  Q_OBJECT\npublic:\n  explicit RepoImageHost(QObject *p_parent);\n\n  bool testConfig(const QJsonObject &p_jobj, QString &p_msg) Q_DECL_OVERRIDE;\n\nprotected:\n  virtual void parseConfig(const QJsonObject &p_jobj, QString &p_token, QString &p_userName,\n                           QString &p_repoName);\n\n  // Used to test.\n  virtual vte::NetworkReply getRepoInfo(const QString &p_token, const QString &p_userName,\n                                        const QString &p_repoName) const = 0;\n\n  static QString fetchResourcePath(const QString &p_prefix, const QString &p_url);\n};\n} // namespace vnotex\n\n#endif // REPOIMAGEHOST_H\n"
  },
  {
    "path": "src/main.cpp",
    "content": "#include <QAccessible>\n#include <QDateTime>\n#include <QDebug>\n#include <QDir>\n#include <QLocale>\n#include <QOpenGLContext>\n#include <QProcess>\n#include <QScopedPointer>\n#include <QSslSocket>\n#include <QSysInfo>\n#include <QTextCodec>\n#include <QTranslator>\n#include <QWebEngineSettings>\n#include <QWindow>\n\n#include \"application.h\"\n#include \"commandlineoptions.h\"\n#include \"fakeaccessible.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/exception.h>\n#include <core/logger.h>\n#include <core/mainconfig.h>\n#include <core/sessionconfig.h>\n#include <core/singleinstanceguard.h>\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n#include <widgets/mainwindow.h>\n#include <widgets/messageboxhelper.h>\n\nusing namespace vnotex;\n\nvoid loadTranslators(QApplication &p_app);\n\nvoid showMessageOnCommandLineIfAvailable(const QString &p_msg);\n\nint main(int argc, char *argv[]) {\n  QTextCodec *codec = QTextCodec::codecForName(\"UTF8\");\n  if (codec) {\n    QTextCodec::setCodecForLocale(codec);\n  }\n\n#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)\n  QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);\n\n  // This only takes effect on Win, X11 and Android.\n  QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);\n#endif\n\n  // Set OpenGL option on Windows.\n  // Set environment QT_OPENGL to \"angle/desktop/software\".\n#if defined(Q_OS_WIN)\n  {\n    auto option = SessionConfig::getOpenGLAtBootstrap();\n    qDebug() << \"OpenGL option\" << SessionConfig::openGLToString(option);\n    switch (option) {\n    case SessionConfig::OpenGL::Desktop:\n      QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);\n      break;\n\n    case SessionConfig::OpenGL::Angle:\n      QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);\n      break;\n\n    case SessionConfig::OpenGL::Software:\n      QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);\n      break;\n\n    default:\n      break;\n    }\n  }\n#endif\n\n#if defined(Q_OS_LINUX)\n  // Disable sandbox on Linux.\n  qputenv(\"QTWEBENGINE_CHROMIUM_FLAGS\", \"--no-sandbox\");\n#endif\n\n  Application app(argc, argv);\n\n  ConfigMgr::initAppPrefixPath();\n\n  QAccessible::installFactory(&FakeAccessible::accessibleFactory);\n\n  {\n    const QString iconPath = \":/vnotex/data/core/icons/vnote.ico\";\n    // Make sense only on Windows.\n    app.setWindowIcon(QIcon(iconPath));\n\n    app.setApplicationName(ConfigMgr::c_appName);\n    app.setOrganizationName(ConfigMgr::c_orgName);\n\n    app.setApplicationVersion(ConfigMgr::getApplicationVersion());\n  }\n\n  CommandLineOptions cmdOptions;\n  switch (cmdOptions.parse(app.arguments())) {\n  case CommandLineOptions::Ok:\n    break;\n\n  case CommandLineOptions::Error:\n    fprintf(stderr, \"%s\\n\", qPrintable(cmdOptions.m_errorMsg));\n    // Arguments to WebEngineView will be unknown ones. So just let it go.\n    break;\n\n  case CommandLineOptions::VersionRequested: {\n    auto versionStr =\n        QStringLiteral(\"%1 %2\").arg(app.applicationName()).arg(app.applicationVersion());\n    showMessageOnCommandLineIfAvailable(versionStr);\n    return 0;\n  }\n\n  case CommandLineOptions::HelpRequested:\n    Q_FALLTHROUGH();\n  default:\n    showMessageOnCommandLineIfAvailable(cmdOptions.m_helpText);\n    return 0;\n  }\n\n  // Guarding.\n  SingleInstanceGuard guard;\n  bool canRun = guard.tryRun();\n  if (!canRun) {\n    guard.requestOpenFiles(cmdOptions.m_pathsToOpen);\n    guard.requestShow();\n    return 0;\n  }\n\n  try {\n    ConfigMgr::getInst();\n  } catch (Exception &e) {\n    MessageBoxHelper::notify(\n        MessageBoxHelper::Critical, MainWindow::tr(\"%1 failed to start.\").arg(ConfigMgr::c_appName),\n        MainWindow::tr(\"Failed to initialize configuration manager. \"\n                       \"Please check if all the files are intact or reinstall the application.\"),\n        e.what());\n    return -1;\n  }\n\n  // Init logger after app info is set.\n  Logger::init(cmdOptions.m_verbose, cmdOptions.m_logToStderr);\n\n  qInfo() << QStringLiteral(\"%1 (v%2) started at %3 (%4)\")\n                 .arg(ConfigMgr::c_appName, app.applicationVersion(),\n                      QDateTime::currentDateTime().toString(), QSysInfo::productType());\n\n  qInfo() << \"OpenSSL build version:\" << QSslSocket::sslLibraryBuildVersionString()\n          << \"link version:\" << QSslSocket::sslLibraryVersionString();\n\n  if (QSslSocket::sslLibraryBuildVersionNumber() != QSslSocket::sslLibraryVersionNumber()) {\n    qWarning() << \"versions of the built and linked OpenSSL mismatch, network may not work\";\n  }\n\n  // Should set the correct locale before VNoteX::getInst().\n  loadTranslators(app);\n\n  if (app.styleSheet().isEmpty()) {\n    auto style = VNoteX::getInst().getThemeMgr().fetchQtStyleSheet();\n    if (!style.isEmpty()) {\n      app.setStyleSheet(style);\n      // Set up hot-reload for the theme folder if enabled via command line\n      if (cmdOptions.m_watchThemes) {\n        const auto themeFolderPath =\n            VNoteX::getInst().getThemeMgr().getCurrentTheme().getThemeFolder();\n        app.watchThemeFolder(themeFolderPath);\n      }\n    }\n  }\n\n  MainWindow window;\n  window.show();\n\n  QObject::connect(&guard, &SingleInstanceGuard::showRequested, &window,\n                   &MainWindow::showMainWindow);\n  QObject::connect(&guard, &SingleInstanceGuard::openFilesRequested, &window,\n                   &MainWindow::openFiles);\n\n  QObject::connect(\n      &app, &Application::openFileRequested, &window,\n      [&window](const QString &p_filePath) { window.openFiles(QStringList() << p_filePath); });\n\n  // Let MainWindow show first to decide the screen on which app is running.\n  WidgetUtils::calculateScaleFactor(window.windowHandle()->screen());\n\n  VNoteX::getInst().getThemeMgr().setBaseBackground(window.palette().color(QPalette::Base));\n\n  window.kickOffOnStart(cmdOptions.m_pathsToOpen);\n\n  int ret = app.exec();\n  if (ret == RESTART_EXIT_CODE) {\n    // Asked to restart VNote.\n    guard.exit();\n    QProcess::startDetached(QCoreApplication::applicationFilePath(), QStringList());\n    // Must use exit() in Linux to quit the parent process in Qt 5.12.\n    // Thanks to @ygcaicn.\n    exit(0);\n    return 0;\n  }\n\n  return ret;\n}\n\nvoid loadTranslators(QApplication &p_app) {\n  auto localeName = ConfigMgr::getInst().getCoreConfig().getLocale();\n  if (!localeName.isEmpty()) {\n    QLocale::setDefault(QLocale(localeName));\n  }\n\n  QLocale locale;\n  qInfo() << \"locale:\" << locale.name();\n\n  const auto translationsPath = QDir(\"app:translations\").absolutePath();\n  qInfo() << \"translations dir: \" << translationsPath;\n  if (translationsPath.isEmpty()) {\n    qWarning() << \"failed to locate translations directory\";\n    return;\n  }\n\n  // For QTextEdit/QTextBrowser and other basic widgets.\n  QScopedPointer<QTranslator> qtbaseTranslator(new QTranslator(&p_app));\n  if (qtbaseTranslator->load(locale, \"qtbase\", \"_\", translationsPath)) {\n    p_app.installTranslator(qtbaseTranslator.take());\n  }\n\n  // qt_zh_CN.ts does not cover the real QDialogButtonBox which uses QPlatformTheme.\n  QScopedPointer<QTranslator> dialogButtonBoxTranslator(new QTranslator(&p_app));\n  if (dialogButtonBoxTranslator->load(locale, \"qdialogbuttonbox\", \"_\", translationsPath)) {\n    p_app.installTranslator(dialogButtonBoxTranslator.take());\n  }\n\n  QScopedPointer<QTranslator> webengineTranslator(new QTranslator(&p_app));\n  if (webengineTranslator->load(locale, \"qwebengine\", \"_\", translationsPath)) {\n    p_app.installTranslator(webengineTranslator.take());\n  }\n\n  QScopedPointer<QTranslator> qtTranslator(new QTranslator(&p_app));\n  if (qtTranslator->load(locale, \"qtv\", \"_\", translationsPath)) {\n    p_app.installTranslator(qtTranslator.take());\n  }\n\n  QScopedPointer<QTranslator> qtEnvTranslator(new QTranslator(&p_app));\n  if (qtEnvTranslator->load(locale, \"qt\", \"_\", translationsPath)) {\n    p_app.installTranslator(qtEnvTranslator.take());\n  }\n\n  QScopedPointer<QTranslator> vnoteTranslator(new QTranslator(&p_app));\n  if (vnoteTranslator->load(locale, \"vnote\", \"_\", translationsPath)) {\n    p_app.installTranslator(vnoteTranslator.take());\n  }\n\n  QScopedPointer<QTranslator> vtexteditTranslator(new QTranslator(&p_app));\n  if (vtexteditTranslator->load(locale, \"vtextedit\", \"_\", translationsPath)) {\n    p_app.installTranslator(vtexteditTranslator.take());\n  }\n}\n\nvoid showMessageOnCommandLineIfAvailable(const QString &p_msg) {\n#if defined(Q_OS_WIN)\n  MessageBoxHelper::notify(MessageBoxHelper::Information,\n                           QStringLiteral(\"<pre>%1</pre>\").arg(p_msg));\n#else\n  fprintf(stderr, \"%s\\n\", qPrintable(p_msg));\n#endif\n}\n"
  },
  {
    "path": "src/search/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    filesearchengine.cpp filesearchengine.h\n    isearchengine.h\n    isearchinfoprovider.h\n    searchdata.cpp searchdata.h\n    searcher.cpp searcher.h\n    searchhelper.cpp searchhelper.h\n    searchresultitem.cpp searchresultitem.h\n    searchtoken.cpp searchtoken.h\n)\n"
  },
  {
    "path": "src/search/filesearchengine.cpp",
    "content": "#include \"filesearchengine.h\"\n\n#include <QDebug>\n#include <QFile>\n\n#include <utils/fileutils.h>\n\nusing namespace vnotex;\n\nFileSearchEngineWorker::FileSearchEngineWorker(QObject *p_parent) : AsyncWorker(p_parent) {}\n\nvoid FileSearchEngineWorker::setData(const QVector<SearchSecondPhaseItem> &p_items,\n                                     const QSharedPointer<SearchOption> &p_option,\n                                     const SearchToken &p_token) {\n  m_items = p_items;\n  m_option = p_option;\n  m_token = p_token;\n}\n\nvoid FileSearchEngineWorker::run() {\n  const int c_batchSize = 100;\n\n  m_state = SearchState::Busy;\n\n  m_results.clear();\n  int nr = 0;\n  for (const auto &item : m_items) {\n    if (isAskedToStop()) {\n      m_state = SearchState::Stopped;\n      break;\n    }\n\n    if (!FileUtils::isText(item.m_filePath)) {\n      appendError(tr(\"Skip binary file (%1)\").arg(item.m_filePath));\n      continue;\n    }\n\n    searchFile(item.m_filePath, item.m_displayPath);\n\n    if (++nr >= c_batchSize) {\n      nr = 0;\n      processBatchResults();\n    }\n  }\n\n  processBatchResults();\n\n  if (m_state == SearchState::Busy) {\n    m_state = SearchState::Finished;\n  }\n}\n\nvoid FileSearchEngineWorker::appendError(const QString &p_err) { m_errors.append(p_err); }\n\nvoid FileSearchEngineWorker::searchFile(const QString &p_filePath, const QString &p_displayPath) {\n  QFile file(p_filePath);\n  if (!file.open(QIODevice::ReadOnly)) {\n    return;\n  }\n\n  const bool shouldStartBatchMode = m_token.shouldStartBatchMode();\n  if (shouldStartBatchMode) {\n    m_token.startBatchMode();\n  }\n\n  QSharedPointer<SearchResultItem> resultItem;\n\n  int lineNum = 0;\n  QTextStream ins(&file);\n  while (!ins.atEnd()) {\n    if (isAskedToStop()) {\n      m_state = SearchState::Stopped;\n      break;\n    }\n\n    const auto lineText = ins.readLine();\n    bool matched = false;\n    QList<Segment> segments;\n    if (!shouldStartBatchMode) {\n      matched = m_token.matched(lineText, &segments);\n    } else {\n      matched = m_token.matchedInBatchMode(lineText, &segments);\n    }\n\n    if (matched) {\n      if (resultItem) {\n        resultItem->addLine(lineNum, lineText, segments);\n      } else {\n        resultItem = SearchResultItem::createFileItem(p_filePath, p_displayPath, lineNum, lineText,\n                                                      segments);\n      }\n    }\n\n    if (shouldStartBatchMode && m_token.readyToEndBatchMode()) {\n      break;\n    }\n\n    ++lineNum;\n  }\n\n  if (shouldStartBatchMode) {\n    bool allMatched = m_token.readyToEndBatchMode();\n    m_token.endBatchMode();\n\n    if (!allMatched) {\n      // This file does not meet all the tokens.\n      resultItem.reset();\n    }\n  }\n\n  if (resultItem) {\n    m_results.append(resultItem);\n  }\n}\n\nvoid FileSearchEngineWorker::processBatchResults() {\n  if (!m_results.isEmpty()) {\n    emit resultItemsReady(m_results);\n    m_results.clear();\n  }\n}\n\nFileSearchEngine::FileSearchEngine() {}\n\nFileSearchEngine::~FileSearchEngine() {\n  stopInternal();\n  clearInternal();\n}\n\nvoid FileSearchEngine::search(const QSharedPointer<SearchOption> &p_option,\n                              const SearchToken &p_token,\n                              const QVector<SearchSecondPhaseItem> &p_items) {\n  int numThread = QThread::idealThreadCount();\n  if (numThread < 1) {\n    numThread = 1;\n  }\n\n  Q_ASSERT(!p_items.isEmpty());\n  if (p_items.size() < numThread) {\n    numThread = 1;\n  }\n\n  clearWorkers();\n  m_workers.reserve(numThread);\n  const int totalSize = p_items.size();\n  const int step = totalSize / numThread;\n  int remain = totalSize % numThread;\n  int start = 0;\n\n  qDebug() << \"start async file search\" << totalSize << numThread;\n\n  for (int i = 0; i < numThread && start < totalSize; ++i) {\n    int len = step;\n    if (remain) {\n      ++len;\n      --remain;\n    }\n\n    if (start + len > totalSize) {\n      len = totalSize - start;\n    }\n\n    auto th = QSharedPointer<FileSearchEngineWorker>::create();\n    th->setData(p_items.mid(start, len), p_option, p_token);\n    connect(th.data(), &FileSearchEngineWorker::finished, this,\n            &FileSearchEngine::handleWorkerFinished);\n    connect(th.data(), &FileSearchEngineWorker::resultItemsReady, this,\n            &FileSearchEngine::resultItemsAdded);\n\n    m_workers.append(th);\n    th->start();\n\n    start += len;\n  }\n}\n\nvoid FileSearchEngine::stop() { stopInternal(); }\n\nvoid FileSearchEngine::stopInternal() {\n  for (const auto &th : m_workers) {\n    th->stop();\n  }\n}\n\nvoid FileSearchEngine::clear() { clearInternal(); }\n\nvoid FileSearchEngine::clearInternal() { clearWorkers(); }\n\nvoid FileSearchEngine::clearWorkers() {\n  for (const auto &th : m_workers) {\n    th->quit();\n    th->wait();\n  }\n\n  m_workers.clear();\n  m_numOfFinishedWorkers = 0;\n}\n\nvoid FileSearchEngine::handleWorkerFinished() {\n  ++m_numOfFinishedWorkers;\n  if (m_numOfFinishedWorkers == m_workers.size()) {\n    SearchState state = SearchState::Finished;\n\n    for (const auto &th : m_workers) {\n      if (th->m_state == SearchState::Failed) {\n        if (state != SearchState::Stopped) {\n          state = SearchState::Failed;\n        }\n      } else if (th->m_state == SearchState::Stopped) {\n        state = SearchState::Stopped;\n      }\n\n      for (const auto &err : th->m_errors) {\n        emit logRequested(err);\n      }\n\n      Q_ASSERT(th->isFinished());\n    }\n\n    m_workers.clear();\n    m_numOfFinishedWorkers = 0;\n\n    emit finished(state);\n  }\n}\n"
  },
  {
    "path": "src/search/filesearchengine.h",
    "content": "#ifndef SEARCHENGINE_H\n#define SEARCHENGINE_H\n\n#include \"isearchengine.h\"\n\n#include <QAtomicInt>\n#include <QRegularExpression>\n#include <QThread>\n#include <QVector>\n\n#include <utils/asyncworker.h>\n\n#include \"searchdata.h\"\n#include \"searchresultitem.h\"\n#include \"searchtoken.h\"\n\nnamespace vnotex {\nclass FileSearchEngineWorker : public AsyncWorker {\n  Q_OBJECT\n  friend class FileSearchEngine;\n\npublic:\n  explicit FileSearchEngineWorker(QObject *p_parent = nullptr);\n\n  ~FileSearchEngineWorker() = default;\n\n  void setData(const QVector<SearchSecondPhaseItem> &p_items,\n               const QSharedPointer<SearchOption> &p_option, const SearchToken &p_token);\n\nsignals:\n  void resultItemsReady(const QVector<QSharedPointer<SearchResultItem>> &p_items);\n\nprotected:\n  void run() Q_DECL_OVERRIDE;\n\nprivate:\n  void appendError(const QString &p_err);\n\n  void searchFile(const QString &p_filePath, const QString &p_displayPath);\n\n  void processBatchResults();\n\n  QVector<SearchSecondPhaseItem> m_items;\n\n  SearchToken m_token;\n\n  QSharedPointer<SearchOption> m_option;\n\n  SearchState m_state = SearchState::Idle;\n\n  QStringList m_errors;\n\n  QVector<QSharedPointer<SearchResultItem>> m_results;\n};\n\nclass FileSearchEngine : public ISearchEngine {\n  Q_OBJECT\npublic:\n  FileSearchEngine();\n\n  ~FileSearchEngine();\n\n  void search(const QSharedPointer<SearchOption> &p_option, const SearchToken &p_token,\n              const QVector<SearchSecondPhaseItem> &p_items) Q_DECL_OVERRIDE;\n\n  void stop() Q_DECL_OVERRIDE;\n\n  void clear() Q_DECL_OVERRIDE;\n\nprivate slots:\n  void handleWorkerFinished();\n\nprivate:\n  void clearWorkers();\n\n  // Need non-virtual version of this.\n  void stopInternal();\n\n  // Need non-virtual version of this.\n  void clearInternal();\n\n  int m_numOfFinishedWorkers = 0;\n\n  QVector<QSharedPointer<FileSearchEngineWorker>> m_workers;\n};\n} // namespace vnotex\n\n#endif // SEARCHENGINE_H\n"
  },
  {
    "path": "src/search/isearchengine.h",
    "content": "#ifndef ISEARCHENGINE_H\n#define ISEARCHENGINE_H\n\n#include <QList>\n#include <QObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"searchdata.h\"\n\nnamespace vnotex {\nstruct SearchResultItem;\n\nclass SearchToken;\n\nstruct SearchSecondPhaseItem {\n  SearchSecondPhaseItem() = default;\n\n  SearchSecondPhaseItem(const QString &p_filePath, const QString &p_displayPath)\n      : m_filePath(p_filePath), m_displayPath(p_displayPath) {}\n\n  QString m_filePath;\n\n  QString m_displayPath;\n};\n\nclass ISearchEngine : public QObject {\n  Q_OBJECT\npublic:\n  ISearchEngine() = default;\n\n  virtual ~ISearchEngine() = default;\n\n  virtual void search(const QSharedPointer<SearchOption> &p_option, const SearchToken &p_token,\n                      const QVector<SearchSecondPhaseItem> &p_items) = 0;\n\n  virtual void stop() = 0;\n\n  virtual void clear() = 0;\n\nsignals:\n  void finished(SearchState p_state);\n\n  void resultItemsAdded(const QVector<QSharedPointer<SearchResultItem>> &p_items);\n\n  void logRequested(const QString &p_log);\n};\n} // namespace vnotex\n#endif // ISEARCHENGINE_H\n"
  },
  {
    "path": "src/search/isearchinfoprovider.h",
    "content": "#ifndef ISEARCHINFOPROVIDER_H\n#define ISEARCHINFOPROVIDER_H\n\n#include <QList>\n#include <QVector>\n\nnamespace vnotex {\nclass Node;\nclass Notebook;\nclass Buffer;\n\nclass ISearchInfoProvider {\npublic:\n  ISearchInfoProvider() = default;\n\n  virtual ~ISearchInfoProvider() = default;\n\n  virtual QList<Buffer *> getBuffers() const = 0;\n\n  virtual Node *getCurrentFolder() const = 0;\n\n  virtual Notebook *getCurrentNotebook() const = 0;\n\n  virtual QVector<Notebook *> getNotebooks() const = 0;\n};\n} // namespace vnotex\n\n#endif // ISEARCHINFOPROVIDER_H\n"
  },
  {
    "path": "src/search/searchdata.cpp",
    "content": "#include \"searchdata.h\"\n\n#include <QJsonObject>\n\nusing namespace vnotex;\n\nSearchOption::SearchOption()\n    : m_objects(SearchObject::SearchName | SearchObject::SearchContent),\n      m_targets(SearchTarget::SearchFile | SearchTarget::SearchFolder) {}\n\nQJsonObject SearchOption::toJson() const {\n  QJsonObject obj;\n  obj[\"file_pattern\"] = m_filePattern;\n  obj[\"scope\"] = static_cast<int>(m_scope);\n  obj[\"objects\"] = static_cast<int>(m_objects);\n  obj[\"targets\"] = static_cast<int>(m_targets);\n  obj[\"engine\"] = static_cast<int>(m_engine);\n  obj[\"find_options\"] = static_cast<int>(m_findOptions);\n  return obj;\n}\n\nvoid SearchOption::fromJson(const QJsonObject &p_obj) {\n  if (p_obj.isEmpty()) {\n    return;\n  }\n\n  m_filePattern = p_obj[\"file_pattern\"].toString();\n  m_scope = static_cast<SearchScope>(p_obj[\"scope\"].toInt());\n  m_objects = static_cast<SearchObjects>(p_obj[\"objects\"].toInt());\n  m_targets = static_cast<SearchTargets>(p_obj[\"targets\"].toInt());\n  m_engine = static_cast<SearchEngine>(p_obj[\"engine\"].toInt());\n  m_findOptions = static_cast<FindOptions>(p_obj[\"find_options\"].toInt());\n}\n\nbool SearchOption::operator==(const SearchOption &p_other) const {\n  return m_filePattern == p_other.m_filePattern && m_scope == p_other.m_scope &&\n         m_objects == p_other.m_objects && m_targets == p_other.m_targets &&\n         m_engine == p_other.m_engine && m_findOptions == p_other.m_findOptions;\n}\n\nbool SearchOption::strictEquals(const SearchOption &p_other) const {\n  return (*this == p_other) && m_keyword == p_other.m_keyword;\n}\n"
  },
  {
    "path": "src/search/searchdata.h",
    "content": "#ifndef SEARCHOPTION_H\n#define SEARCHOPTION_H\n\n#include <QObject>\n#include <QString>\n\n#include <core/global.h>\n\nnamespace vnotex {\nenum class SearchState { Idle = 0, Busy, Finished, Failed, Stopped };\n\nclass SearchTranslate : public QObject {\n  Q_OBJECT\n};\n\ninline QString SearchStateToString(SearchState p_state) {\n  switch (p_state) {\n  case SearchState::Idle:\n    return SearchTranslate::tr(\"Idle\");\n\n  case SearchState::Busy:\n    return SearchTranslate::tr(\"Busy\");\n\n  case SearchState::Finished:\n    return SearchTranslate::tr(\"Finished\");\n\n  case SearchState::Failed:\n    return SearchTranslate::tr(\"Failed\");\n\n  case SearchState::Stopped:\n    return SearchTranslate::tr(\"Stopped\");\n  }\n\n  return QString();\n}\n\nenum class SearchScope { Buffers = 0, CurrentFolder, CurrentNotebook, AllNotebooks };\n\nenum SearchObject {\n  ObjectNone = 0,\n  SearchName = 0x1UL,\n  SearchContent = 0x2UL,\n  // SearchOutline is not supported yet.\n  SearchOutline = 0x4UL,\n  SearchTag = 0x8UL,\n  SearchPath = 0x10UL\n};\nQ_DECLARE_FLAGS(SearchObjects, SearchObject);\n\nenum SearchTarget {\n  TargetNone = 0,\n  SearchFile = 0x1UL,\n  SearchFolder = 0x2UL,\n  SearchNotebook = 0x4UL\n};\nQ_DECLARE_FLAGS(SearchTargets, SearchTarget);\n\nenum class SearchEngine { Internal = 0 };\n\nstruct SearchOption {\n  SearchOption();\n\n  QJsonObject toJson() const;\n  void fromJson(const QJsonObject &p_obj);\n\n  bool operator==(const SearchOption &p_other) const;\n\n  bool strictEquals(const SearchOption &p_other) const;\n\n  QString m_keyword;\n\n  QString m_filePattern;\n\n  SearchScope m_scope = SearchScope::CurrentNotebook;\n\n  // *nix requests to init in the constructor.\n  SearchObjects m_objects;\n\n  // *nix requests to init in the constructor.\n  SearchTargets m_targets;\n\n  SearchEngine m_engine = SearchEngine::Internal;\n\n  FindOptions m_findOptions = FindOption::FindNone;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::SearchObjects);\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::SearchTargets);\n\n#endif // SEARCHOPTION_H\n"
  },
  {
    "path": "src/search/searcher.cpp",
    "content": "#include \"searcher.h\"\n\n#include <QCoreApplication>\n#include <QDebug>\n\n#include <buffer/buffer.h>\n#include <core/exception.h>\n#include <core/file.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/asyncworker.h>\n\n#include \"filesearchengine.h\"\n#include \"searchresultitem.h\"\n\nusing namespace vnotex;\n\nSearcher::Searcher(QObject *p_parent) : QObject(p_parent) {}\n\nvoid Searcher::clear() {\n  m_option.clear();\n\n  if (m_engine) {\n    m_engine->clear();\n    m_engine.reset();\n  }\n\n  m_askedToStop = false;\n}\n\nvoid Searcher::stop() {\n  m_askedToStop = true;\n\n  if (m_engine) {\n    m_engine->stop();\n  }\n}\n\nSearchState Searcher::search(const QSharedPointer<SearchOption> &p_option,\n                             const QList<Buffer *> &p_buffers) {\n  if (!(p_option->m_targets & SearchTarget::SearchFile)) {\n    // Only File target is applicable.\n    return SearchState::Finished;\n  }\n\n  if (!prepare(p_option)) {\n    return SearchState::Failed;\n  }\n\n  emit logRequested(tr(\"Searching %n buffer(s)\", \"\", p_buffers.size()));\n\n  m_firstPhaseWorker->doWork([this, p_buffers]() {\n    emit progressUpdated(0, p_buffers.size());\n    for (int i = 0; i < p_buffers.size(); ++i) {\n      if (!p_buffers[i]) {\n        continue;\n      }\n\n      if (isAskedToStop()) {\n        emit finished(SearchState::Stopped);\n        return;\n      }\n\n      auto file = p_buffers[i]->getFile();\n      if (!firstPhaseSearch(file.data())) {\n        emit finished(SearchState::Failed);\n        return;\n      }\n\n      emit progressUpdated(i + 1, p_buffers.size());\n    }\n\n    emit finished(SearchState::Finished);\n  });\n\n  return SearchState::Busy;\n}\n\nSearchState Searcher::search(const QSharedPointer<SearchOption> &p_option, Node *p_folder) {\n  Q_ASSERT(p_folder->isContainer());\n  if (!(p_option->m_targets & (SearchTarget::SearchFile | SearchTarget::SearchFolder))) {\n    // Only File/Folder target is applicable.\n    return SearchState::Finished;\n  }\n\n  if (!prepare(p_option)) {\n    return SearchState::Failed;\n  }\n\n  emit logRequested(tr(\"Searching folder (%1)\").arg(p_folder->getName()));\n\n  m_firstPhaseWorker->doWork([this, p_folder]() {\n    if (!firstPhaseSearchFolder(p_folder, m_secondPhaseItems)) {\n      m_secondPhaseItems.clear();\n      emit finished(SearchState::Failed);\n      return;\n    }\n\n    if (m_secondPhaseItems.isEmpty()) {\n      emit finished(SearchState::Finished);\n    }\n  });\n\n  return SearchState::Busy;\n}\n\nSearchState Searcher::search(const QSharedPointer<SearchOption> &p_option,\n                             const QVector<Notebook *> &p_notebooks) {\n  if (!prepare(p_option)) {\n    return SearchState::Failed;\n  }\n\n  m_firstPhaseWorker->doWork([this, p_notebooks]() {\n    emit progressUpdated(0, p_notebooks.size());\n    for (int i = 0; i < p_notebooks.size(); ++i) {\n      if (isAskedToStop()) {\n        m_secondPhaseItems.clear();\n        emit finished(SearchState::Stopped);\n        return;\n      }\n\n      emit logRequested(tr(\"Searching notebook (%1)\").arg(p_notebooks[i]->getName()));\n\n      if (!firstPhaseSearch(p_notebooks[i], m_secondPhaseItems)) {\n        m_secondPhaseItems.clear();\n        emit finished(SearchState::Failed);\n        return;\n      }\n\n      emit progressUpdated(i + 1, p_notebooks.size());\n    }\n\n    if (m_secondPhaseItems.isEmpty()) {\n      emit finished(SearchState::Finished);\n    }\n  });\n\n  return SearchState::Busy;\n}\n\nbool Searcher::prepare(const QSharedPointer<SearchOption> &p_option) {\n  Q_ASSERT(!m_option);\n  m_option = p_option;\n\n  if (!SearchToken::compile(m_option->m_keyword, m_option->m_findOptions, m_token)) {\n    emit logRequested(tr(\"Failed to compile tokens (%1)\").arg(m_option->m_keyword));\n    return false;\n  }\n\n  if (m_option->m_filePattern.isEmpty()) {\n    m_filePattern = QRegularExpression();\n  } else {\n    m_filePattern =\n        QRegularExpression(QRegularExpression::wildcardToRegularExpression(m_option->m_filePattern),\n                           QRegularExpression::CaseInsensitiveOption);\n  }\n\n  if (!m_firstPhaseWorker) {\n    m_firstPhaseWorker = new AsyncWorkerWithFunctor(this);\n    connect(m_firstPhaseWorker, &AsyncWorkerWithFunctor::finished, this,\n            &Searcher::doSecondPhaseSearch);\n  }\n\n  if (m_firstPhaseWorker->isRunning()) {\n    emit logRequested(tr(\"Failed to search due to worker is busy\"));\n    return false;\n  }\n\n  m_secondPhaseItems.clear();\n\n  return true;\n}\n\nbool Searcher::isAskedToStop() const { return m_askedToStop; }\n\nstatic QString tryGetRelativePath(const File *p_file) {\n  const auto node = p_file->getNode();\n  if (node) {\n    return node->fetchPath();\n  }\n  return p_file->getFilePath();\n}\n\nbool Searcher::firstPhaseSearch(const File *p_file) {\n  if (!p_file) {\n    return true;\n  }\n\n  Q_ASSERT(testTarget(SearchTarget::SearchFile));\n\n  const auto name = p_file->getName();\n  if (!isFilePatternMatched(name)) {\n    return true;\n  }\n\n  const auto filePath = p_file->getFilePath();\n  const auto relativePath = tryGetRelativePath(p_file);\n\n  if (testObject(SearchObject::SearchName)) {\n    if (isTokenMatched(name)) {\n      emit resultItemAdded(SearchResultItem::createBufferItem(filePath, relativePath));\n    }\n  }\n\n  if (testObject(SearchObject::SearchPath)) {\n    if (isTokenMatched(relativePath)) {\n      emit resultItemAdded(SearchResultItem::createBufferItem(filePath, relativePath));\n    }\n  }\n\n  if (testObject(SearchObject::SearchTag)) {\n    if (searchTag(p_file->getNode())) {\n      emit resultItemAdded(SearchResultItem::createBufferItem(filePath, relativePath));\n    }\n  }\n\n  // Make SearchContent always the last one to check.\n  if (testObject(SearchObject::SearchContent)) {\n    if (!searchContent(p_file)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nbool Searcher::isFilePatternMatched(const QString &p_name) const {\n  if (m_option->m_filePattern.isEmpty()) {\n    return true;\n  }\n\n  return m_filePattern.match(p_name).hasMatch();\n}\n\nbool Searcher::testTarget(SearchTarget p_target) const { return m_option->m_targets & p_target; }\n\nbool Searcher::testObject(SearchObject p_object) const { return m_option->m_objects & p_object; }\n\nbool Searcher::isTokenMatched(const QString &p_text) const { return m_token.matched(p_text); }\n\nbool Searcher::searchContent(const File *p_file) {\n  const auto content = p_file->read();\n  if (content.isEmpty()) {\n    return true;\n  }\n\n  const bool shouldStartBatchMode = m_token.shouldStartBatchMode();\n  if (shouldStartBatchMode) {\n    m_token.startBatchMode();\n  }\n\n  const auto filePath = p_file->getFilePath();\n  const auto relativePath = tryGetRelativePath(p_file);\n\n  QSharedPointer<SearchResultItem> resultItem;\n\n  int lineNum = 0;\n  int pos = 0;\n  int contentSize = content.size();\n  QRegularExpression newlineRegExp(\"\\\\n|\\\\r\\\\n|\\\\r\");\n  while (pos < contentSize) {\n    if (isAskedToStop()) {\n      break;\n    }\n\n    QRegularExpressionMatch match;\n    int idx = content.indexOf(newlineRegExp, pos, &match);\n    if (idx == -1) {\n      idx = contentSize;\n    }\n\n    if (idx > pos) {\n      QString lineText = content.mid(pos, idx - pos);\n      bool matched = false;\n      QList<Segment> segments;\n      if (!shouldStartBatchMode) {\n        matched = m_token.matched(lineText, &segments);\n      } else {\n        matched = m_token.matchedInBatchMode(lineText, &segments);\n      }\n\n      if (matched) {\n        if (resultItem) {\n          resultItem->addLine(lineNum, lineText, segments);\n        } else {\n          resultItem = SearchResultItem::createBufferItem(filePath, relativePath, lineNum, lineText,\n                                                          segments);\n        }\n      }\n    }\n\n    if (idx == contentSize) {\n      break;\n    }\n\n    if (shouldStartBatchMode && m_token.readyToEndBatchMode()) {\n      break;\n    }\n\n    pos = idx + match.capturedLength();\n    ++lineNum;\n  }\n\n  if (shouldStartBatchMode) {\n    bool allMatched = m_token.readyToEndBatchMode();\n    m_token.endBatchMode();\n\n    if (!allMatched) {\n      // This file does not meet all the tokens.\n      resultItem.reset();\n    }\n  }\n\n  if (resultItem) {\n    emit resultItemAdded(resultItem);\n  }\n\n  return true;\n}\n\nbool Searcher::firstPhaseSearchFolder(Node *p_node,\n                                      QVector<SearchSecondPhaseItem> &p_secondPhaseItems) {\n  if (!p_node) {\n    return true;\n  }\n\n  Q_ASSERT(p_node->isContainer());\n  Q_ASSERT(testTarget(SearchTarget::SearchFile) || testTarget(SearchTarget::SearchFolder));\n\n  try {\n    p_node->load();\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to load node to search (%1) (%2).\").arg(p_node->getName(), p_e.what());\n    qCritical() << msg;\n    emit logRequested(msg);\n    return false;\n  }\n\n  if (testTarget(SearchTarget::SearchFolder) && !p_node->isRoot()) {\n    const auto name = p_node->getName();\n    const auto folderPath = p_node->fetchAbsolutePath();\n    const auto relativePath = p_node->fetchPath();\n    if (testObject(SearchObject::SearchName)) {\n      if (isTokenMatched(name)) {\n        emit resultItemAdded(SearchResultItem::createFolderItem(folderPath, relativePath));\n      }\n    }\n\n    if (testObject(SearchObject::SearchPath)) {\n      if (isTokenMatched(relativePath)) {\n        emit resultItemAdded(SearchResultItem::createFolderItem(folderPath, relativePath));\n      }\n    }\n  }\n\n  // Search children.\n  const auto &children = p_node->getChildrenRef();\n  for (const auto &child : children) {\n    if (isAskedToStop()) {\n      return true;\n    }\n\n    if (child->hasContent() && testTarget(SearchTarget::SearchFile)) {\n      if (!firstPhaseSearch(child.data(), p_secondPhaseItems)) {\n        return false;\n      }\n    }\n\n    if (child->isContainer()) {\n      if (!firstPhaseSearchFolder(child.data(), p_secondPhaseItems)) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\nbool Searcher::firstPhaseSearch(Node *p_node, QVector<SearchSecondPhaseItem> &p_secondPhaseItems) {\n  if (!p_node) {\n    return true;\n  }\n\n  Q_ASSERT(testTarget(SearchTarget::SearchFile));\n\n  const auto name = p_node->getName();\n  if (!isFilePatternMatched(name)) {\n    return true;\n  }\n\n  const auto filePath = p_node->fetchAbsolutePath();\n  const auto relativePath = p_node->fetchPath();\n\n  if (testObject(SearchObject::SearchName)) {\n    if (isTokenMatched(name)) {\n      emit resultItemAdded(SearchResultItem::createFileItem(filePath, relativePath));\n    }\n  }\n\n  if (testObject(SearchObject::SearchPath)) {\n    if (isTokenMatched(relativePath)) {\n      emit resultItemAdded(SearchResultItem::createFileItem(filePath, relativePath));\n    }\n  }\n\n  if (testObject(SearchObject::SearchTag)) {\n    if (searchTag(p_node)) {\n      emit resultItemAdded(SearchResultItem::createBufferItem(filePath, relativePath));\n    }\n  }\n\n  if (testObject(SearchObject::SearchContent)) {\n    p_secondPhaseItems.push_back(SearchSecondPhaseItem(filePath, relativePath));\n  }\n\n  return true;\n}\n\nbool Searcher::firstPhaseSearch(Notebook *p_notebook,\n                                QVector<SearchSecondPhaseItem> &p_secondPhaseItems) {\n  if (!p_notebook) {\n    return true;\n  }\n\n  if (testTarget(SearchTarget::SearchNotebook)) {\n    if (testObject(SearchObject::SearchName)) {\n      const auto name = p_notebook->getName();\n      if (isTokenMatched(name)) {\n        emit resultItemAdded(\n            SearchResultItem::createNotebookItem(p_notebook->getRootFolderAbsolutePath(), name));\n      }\n    }\n  }\n\n  if (!testTarget(SearchTarget::SearchFile) && !testTarget(SearchTarget::SearchFolder)) {\n    return true;\n  }\n\n  auto rootNode = p_notebook->getRootNode();\n  Q_ASSERT(rootNode->isLoaded());\n  const auto &children = rootNode->getChildrenRef();\n  for (const auto &child : children) {\n    if (isAskedToStop()) {\n      return true;\n    }\n\n    if (child->hasContent() && testTarget(SearchTarget::SearchFile)) {\n      if (!firstPhaseSearch(child.data(), p_secondPhaseItems)) {\n        return false;\n      }\n    }\n\n    if (child->isContainer()) {\n      if (!firstPhaseSearchFolder(child.data(), p_secondPhaseItems)) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\nbool Searcher::secondPhaseSearch(const QVector<SearchSecondPhaseItem> &p_secondPhaseItems) {\n  Q_ASSERT(!p_secondPhaseItems.isEmpty());\n\n  emit logRequested(tr(\"Start second-phase search: %n files(s)\", \"\", p_secondPhaseItems.size()));\n  qDebug() << \"secondPhaseSearch\" << p_secondPhaseItems.size();\n\n  createSearchEngine();\n\n  connect(m_engine.data(), &ISearchEngine::finished, this, &Searcher::finished);\n  connect(m_engine.data(), &ISearchEngine::logRequested, this, &Searcher::logRequested);\n  connect(m_engine.data(), &ISearchEngine::resultItemsAdded, this, &Searcher::resultItemsAdded);\n\n  m_engine->search(m_option, m_token, p_secondPhaseItems);\n\n  return true;\n}\n\nvoid Searcher::createSearchEngine() {\n  Q_ASSERT(m_option->m_engine == SearchEngine::Internal);\n\n  m_engine.reset(new FileSearchEngine());\n}\n\nconst SearchToken &Searcher::getToken() const { return m_token; }\n\nbool Searcher::searchTag(const Node *p_node) const {\n  if (!p_node) {\n    return false;\n  }\n\n  Q_ASSERT(p_node->isLoaded());\n\n  for (const auto &tag : p_node->getTags()) {\n    if (isTokenMatched(tag)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvoid Searcher::doSecondPhaseSearch() {\n  if (m_secondPhaseItems.isEmpty()) {\n    return;\n  }\n\n  if (isAskedToStop()) {\n    emit finished(SearchState::Stopped);\n    return;\n  }\n\n  // Do second phase search.\n  if (!secondPhaseSearch(m_secondPhaseItems)) {\n    emit finished(SearchState::Failed);\n    return;\n  }\n\n  if (isAskedToStop()) {\n    emit finished(SearchState::Stopped);\n    return;\n  }\n}\n"
  },
  {
    "path": "src/search/searcher.h",
    "content": "#ifndef SEARCHER_H\n#define SEARCHER_H\n\n#include <QObject>\n#include <QRegularExpression>\n#include <QScopedPointer>\n#include <QSharedPointer>\n#include <QThread>\n\n#include \"isearchengine.h\"\n#include \"searchdata.h\"\n#include \"searchtoken.h\"\n\nnamespace vnotex {\nclass Buffer;\nclass File;\nstruct SearchResultItem;\nclass Node;\nclass Notebook;\nclass AsyncWorkerWithFunctor;\n\nclass Searcher : public QObject {\n  Q_OBJECT\npublic:\n  explicit Searcher(QObject *p_parent = nullptr);\n\n  void clear();\n\n  void stop();\n\n  SearchState search(const QSharedPointer<SearchOption> &p_option,\n                     const QList<Buffer *> &p_buffers);\n\n  SearchState search(const QSharedPointer<SearchOption> &p_option, Node *p_folder);\n\n  SearchState search(const QSharedPointer<SearchOption> &p_option,\n                     const QVector<Notebook *> &p_notebooks);\n\n  const SearchToken &getToken() const;\n\nsignals:\n  void progressUpdated(int p_val, int p_maximum);\n\n  void logRequested(const QString &p_log);\n\n  void resultItemAdded(const QSharedPointer<SearchResultItem> &p_item);\n\n  void resultItemsAdded(const QVector<QSharedPointer<SearchResultItem>> &p_items);\n\n  void finished(SearchState p_state);\n\nprivate:\n  bool isAskedToStop() const;\n\n  bool prepare(const QSharedPointer<SearchOption> &p_option);\n\n  // Return false if there is failure.\n  // Always search content at first phase.\n  bool firstPhaseSearch(const File *p_file);\n\n  // Return false if there is failure.\n  bool firstPhaseSearchFolder(Node *p_node, QVector<SearchSecondPhaseItem> &p_secondPhaseItems);\n\n  // Return false if there is failure.\n  bool firstPhaseSearch(Node *p_node, QVector<SearchSecondPhaseItem> &p_secondPhaseItems);\n\n  // Return false if there is failure.\n  bool firstPhaseSearch(Notebook *p_notebook, QVector<SearchSecondPhaseItem> &p_secondPhaseItems);\n\n  // Return false if there is failure.\n  bool secondPhaseSearch(const QVector<SearchSecondPhaseItem> &p_secondPhaseItems);\n\n  bool isFilePatternMatched(const QString &p_name) const;\n\n  bool testTarget(SearchTarget p_target) const;\n\n  bool testObject(SearchObject p_object) const;\n\n  bool isTokenMatched(const QString &p_text) const;\n\n  bool searchContent(const File *p_file);\n\n  // Return true if matched.\n  bool searchTag(const Node *p_node) const;\n\n  void createSearchEngine();\n\n  // Will be called after m_firstPhaseWorker finished.\n  void doSecondPhaseSearch();\n\n  QSharedPointer<SearchOption> m_option;\n\n  SearchToken m_token;\n\n  QRegularExpression m_filePattern;\n\n  bool m_askedToStop = false;\n\n  QScopedPointer<ISearchEngine> m_engine;\n\n  AsyncWorkerWithFunctor *m_firstPhaseWorker = nullptr;\n\n  // Pending second phase items.\n  QVector<SearchSecondPhaseItem> m_secondPhaseItems;\n};\n} // namespace vnotex\n\n#endif // SEARCHER_H\n"
  },
  {
    "path": "src/search/searchhelper.cpp",
    "content": "#include \"searchhelper.h\"\n\n#include <search/isearchinfoprovider.h>\n\nusing namespace vnotex;\n\nbool SearchHelper::isSearchOptionValid(const SearchOption &p_option, QString &p_msg) {\n  if (p_option.m_keyword.isEmpty()) {\n    p_msg = Searcher::tr(\"Invalid keyword\");\n    return false;\n  }\n\n  if (p_option.m_objects == SearchObject::ObjectNone) {\n    p_msg = Searcher::tr(\"No object specified\");\n    return false;\n  }\n\n  if (p_option.m_targets == SearchTarget::TargetNone) {\n    p_msg = Searcher::tr(\"No target specified\");\n    return false;\n  }\n\n  if (p_option.m_findOptions & FindOption::FuzzySearch &&\n      p_option.m_objects & SearchObject::SearchContent) {\n    p_msg = Searcher::tr(\"Fuzzy search is not allowed when searching content\");\n    return false;\n  }\n\n  p_msg.clear();\n  return true;\n}\n\nSearchState SearchHelper::searchOnProvider(Searcher *p_searcher,\n                                           const QSharedPointer<SearchOption> &p_option,\n                                           const QSharedPointer<ISearchInfoProvider> &p_provider,\n                                           QString &p_msg) {\n  p_msg.clear();\n\n  if (!isSearchOptionValid(*p_option, p_msg)) {\n    return SearchState::Failed;\n  }\n\n  SearchState state = SearchState::Finished;\n\n  switch (p_option->m_scope) {\n  case SearchScope::Buffers: {\n    auto buffers = p_provider->getBuffers();\n    if (buffers.isEmpty()) {\n      break;\n    }\n    state = p_searcher->search(p_option, buffers);\n    break;\n  }\n\n  case SearchScope::CurrentFolder: {\n    auto notebook = p_provider->getCurrentNotebook();\n    if (!notebook) {\n      break;\n    }\n    auto folder = p_provider->getCurrentFolder();\n    if (!folder) {\n      break;\n    }\n\n    state = p_searcher->search(p_option, folder);\n    break;\n  }\n\n  case SearchScope::CurrentNotebook: {\n    auto notebook = p_provider->getCurrentNotebook();\n    if (!notebook) {\n      break;\n    }\n\n    QVector<Notebook *> notebooks;\n    notebooks.push_back(notebook);\n    state = p_searcher->search(p_option, notebooks);\n    break;\n  }\n\n  case SearchScope::AllNotebooks: {\n    auto notebooks = p_provider->getNotebooks();\n    if (notebooks.isEmpty()) {\n      break;\n    }\n\n    state = p_searcher->search(p_option, notebooks);\n    break;\n  }\n  }\n\n  return state;\n}\n"
  },
  {
    "path": "src/search/searchhelper.h",
    "content": "#ifndef SEARCHHELPER_H\n#define SEARCHHELPER_H\n\n#include <QSharedPointer>\n\n#include \"searchdata.h\"\n#include \"searcher.h\"\n\nnamespace vnotex {\nclass ISearchInfoProvider;\n\nclass SearchHelper {\npublic:\n  SearchHelper() = delete;\n\n  static SearchState searchOnProvider(Searcher *p_searcher,\n                                      const QSharedPointer<SearchOption> &p_option,\n                                      const QSharedPointer<ISearchInfoProvider> &p_provider,\n                                      QString &p_msg);\n\nprivate:\n  static bool isSearchOptionValid(const SearchOption &p_option, QString &p_msg);\n};\n} // namespace vnotex\n\n#endif // SEARCHHELPER_H\n"
  },
  {
    "path": "src/search/searchresultitem.cpp",
    "content": "#include \"searchresultitem.h\"\n\nusing namespace vnotex;\n\nQSharedPointer<SearchResultItem>\nSearchResultItem::createBufferItem(const QString &p_targetPath, const QString &p_displayPath,\n                                   int p_lineNumber, const QString &p_text,\n                                   const QList<Segment> &p_segments) {\n  auto item = createBufferItem(p_targetPath, p_displayPath);\n  item->m_location.addLine(p_lineNumber, p_text, p_segments);\n  return item;\n}\n\nQSharedPointer<SearchResultItem> SearchResultItem::createBufferItem(const QString &p_targetPath,\n                                                                    const QString &p_displayPath) {\n  auto item = QSharedPointer<SearchResultItem>::create();\n  item->m_location.m_type = LocationType::Buffer;\n  item->m_location.m_path = p_targetPath;\n  item->m_location.m_displayPath = p_displayPath;\n  return item;\n}\n\nQSharedPointer<SearchResultItem>\nSearchResultItem::createFileItem(const QString &p_targetPath, const QString &p_displayPath,\n                                 int p_lineNumber, const QString &p_text,\n                                 const QList<Segment> &p_segments) {\n  auto item = createFileItem(p_targetPath, p_displayPath);\n  item->m_location.addLine(p_lineNumber, p_text, p_segments);\n  return item;\n}\n\nQSharedPointer<SearchResultItem> SearchResultItem::createFileItem(const QString &p_targetPath,\n                                                                  const QString &p_displayPath) {\n  auto item = QSharedPointer<SearchResultItem>::create();\n  item->m_location.m_type = LocationType::File;\n  item->m_location.m_path = p_targetPath;\n  item->m_location.m_displayPath = p_displayPath;\n  return item;\n}\n\nQSharedPointer<SearchResultItem> SearchResultItem::createFolderItem(const QString &p_targetPath,\n                                                                    const QString &p_displayPath) {\n  auto item = QSharedPointer<SearchResultItem>::create();\n  item->m_location.m_type = LocationType::Folder;\n  item->m_location.m_path = p_targetPath;\n  item->m_location.m_displayPath = p_displayPath;\n  return item;\n}\n\nQSharedPointer<SearchResultItem>\nSearchResultItem::createNotebookItem(const QString &p_targetPath, const QString &p_displayPath) {\n  auto item = QSharedPointer<SearchResultItem>::create();\n  item->m_location.m_type = LocationType::Notebook;\n  item->m_location.m_path = p_targetPath;\n  item->m_location.m_displayPath = p_displayPath;\n  return item;\n}\n\nvoid SearchResultItem::addLine(int p_lineNumber, const QString &p_text,\n                               const QList<Segment> &p_segments) {\n  m_location.addLine(p_lineNumber, p_text, p_segments);\n}\n"
  },
  {
    "path": "src/search/searchresultitem.h",
    "content": "#ifndef SEARCHRESULTITEM_H\n#define SEARCHRESULTITEM_H\n\n#include <QDebug>\n#include <QSharedPointer>\n#include <QString>\n\n#include <core/location.h>\n\nnamespace vnotex {\nstruct SearchResultItem {\n  friend QDebug operator<<(QDebug p_dbg, const SearchResultItem &p_item) {\n    p_dbg << p_item.m_location;\n    return p_dbg;\n  }\n\n  void addLine(int p_lineNumber, const QString &p_text, const QList<Segment> &p_segments);\n\n  static QSharedPointer<SearchResultItem> createBufferItem(const QString &p_targetPath,\n                                                           const QString &p_displayPath,\n                                                           int p_lineNumber, const QString &p_text,\n                                                           const QList<Segment> &p_segments);\n\n  static QSharedPointer<SearchResultItem> createBufferItem(const QString &p_targetPath,\n                                                           const QString &p_displayPath);\n\n  static QSharedPointer<SearchResultItem> createFileItem(const QString &p_targetPath,\n                                                         const QString &p_displayPath,\n                                                         int p_lineNumber, const QString &p_text,\n                                                         const QList<Segment> &p_segments);\n\n  static QSharedPointer<SearchResultItem> createFileItem(const QString &p_targetPath,\n                                                         const QString &p_displayPath);\n\n  static QSharedPointer<SearchResultItem> createFolderItem(const QString &p_targetPath,\n                                                           const QString &p_displayPath);\n\n  static QSharedPointer<SearchResultItem> createNotebookItem(const QString &p_targetPath,\n                                                             const QString &p_displayPath);\n\n  ComplexLocation m_location;\n};\n} // namespace vnotex\n\n#endif // SEARCHRESULTITEM_H\n"
  },
  {
    "path": "src/search/searchtoken.cpp",
    "content": "#include \"searchtoken.h\"\n\n#include <QCommandLineParser>\n#include <QDebug>\n\n#include <utils/processutils.h>\n#include <widgets/searchpanel.h>\n\nusing namespace vnotex;\n\nvoid SearchToken::clear() {\n  m_type = Type::PlainText;\n  m_operator = Operator::And;\n  m_caseSensitivity = Qt::CaseInsensitive;\n  m_keywords.clear();\n  m_regularExpressions.clear();\n  m_matchedConstraintsInBatchMode.clear();\n  m_matchedConstraintsCountInBatchMode = 0;\n}\n\nvoid SearchToken::append(const QString &p_text) { m_keywords.append(p_text); }\n\nvoid SearchToken::append(const QRegularExpression &p_regExp) {\n  m_regularExpressions.append(p_regExp);\n}\n\nbool SearchToken::matched(const QString &p_text, QList<Segment> *p_segments) const {\n  const int consSize = constraintSize();\n  if (consSize == 0) {\n    return false;\n  }\n\n  bool isMatched = m_operator == Operator::And ? true : false;\n  for (int i = 0; i < consSize; ++i) {\n    bool consMatched = false;\n    if (m_type == Type::PlainText) {\n      int idx = p_text.indexOf(m_keywords[i], 0, m_caseSensitivity);\n      if (idx > -1) {\n        consMatched = true;\n        if (p_segments) {\n          p_segments->push_back(Segment(idx, m_keywords[i].size()));\n        }\n      }\n    } else {\n      QRegularExpressionMatch match;\n      int idx = p_text.indexOf(m_regularExpressions[i], 0, &match);\n      if (idx > -1) {\n        consMatched = true;\n        if (p_segments) {\n          p_segments->push_back(Segment(idx, match.capturedLength()));\n        }\n      }\n    }\n\n    if (consMatched) {\n      if (m_operator == Operator::Or) {\n        isMatched = true;\n        break;\n      }\n    } else if (m_operator == Operator::And) {\n      isMatched = false;\n      break;\n    }\n  }\n\n  return isMatched;\n}\n\nint SearchToken::constraintSize() const {\n  return (m_type == Type::PlainText ? m_keywords.size() : m_regularExpressions.size());\n}\n\nbool SearchToken::shouldStartBatchMode() const { return constraintSize() > 1; }\n\nvoid SearchToken::startBatchMode() {\n  m_matchedConstraintsInBatchMode.fill(false, constraintSize());\n  m_matchedConstraintsCountInBatchMode = 0;\n}\n\nbool SearchToken::matchedInBatchMode(const QString &p_text, QList<Segment> *p_segments) {\n  bool isMatched = false;\n  const int consSize = m_matchedConstraintsInBatchMode.size();\n  for (int i = 0; i < consSize; ++i) {\n    if (m_matchedConstraintsInBatchMode[i]) {\n      continue;\n    }\n\n    bool consMatched = false;\n    if (m_type == Type::PlainText) {\n      int idx = p_text.indexOf(m_keywords[i], 0, m_caseSensitivity);\n      if (idx > -1) {\n        consMatched = true;\n        if (p_segments) {\n          p_segments->push_back(Segment(idx, m_keywords[i].size()));\n        }\n      }\n    } else {\n      QRegularExpressionMatch match;\n      int idx = p_text.indexOf(m_regularExpressions[i], 0, &match);\n      if (idx > -1) {\n        consMatched = true;\n        if (p_segments) {\n          p_segments->push_back(Segment(idx, match.capturedLength()));\n        }\n      }\n    }\n\n    if (consMatched) {\n      m_matchedConstraintsInBatchMode[i] = true;\n      ++m_matchedConstraintsCountInBatchMode;\n      isMatched = true;\n    }\n  }\n\n  return isMatched;\n}\n\nbool SearchToken::readyToEndBatchMode() const {\n  if (m_operator == Operator::And) {\n    // We need all the tokens matched.\n    if (m_matchedConstraintsCountInBatchMode == m_matchedConstraintsInBatchMode.size()) {\n      return true;\n    }\n  } else {\n    // We only need one match.\n    if (m_matchedConstraintsCountInBatchMode > 0) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvoid SearchToken::endBatchMode() {\n  m_matchedConstraintsInBatchMode.clear();\n  m_matchedConstraintsCountInBatchMode = 0;\n}\n\nbool SearchToken::isEmpty() const { return constraintSize() == 0; }\n\nQCommandLineParser *SearchToken::getCommandLineParser() {\n  static QScopedPointer<QCommandLineParser> parser;\n\n  if (parser) {\n    return parser.data();\n  }\n\n  parser.reset(new QCommandLineParser());\n  parser->setApplicationDescription(SearchPanel::tr(\"Full-text search.\"));\n\n  parser->addPositionalArgument(\"keywords\", SearchPanel::tr(\"Keywords to search for.\"));\n\n  addSearchOptionsToCommand(parser.data());\n\n  return parser.data();\n}\n\nvoid SearchToken::addSearchOptionsToCommand(QCommandLineParser *p_parser) {\n  QCommandLineOption caseSensitiveOpt(QStringList() << \"c\" << \"case-sensitive\",\n                                      SearchPanel::tr(\"Search in case sensitive.\"));\n  p_parser->addOption(caseSensitiveOpt);\n\n  QCommandLineOption regularExpressionOpt(QStringList() << \"r\" << \"regular-expression\",\n                                          SearchPanel::tr(\"Search by regular expression.\"));\n  p_parser->addOption(regularExpressionOpt);\n\n  QCommandLineOption wholeWordOnlyOpt(QStringList() << \"w\" << \"whole-word-only\",\n                                      SearchPanel::tr(\"Search whole word only.\"));\n  p_parser->addOption(wholeWordOnlyOpt);\n\n  QCommandLineOption fuzzySearchOpt(\n      QStringList() << \"f\" << \"fuzzy-search\",\n      SearchPanel::tr(\"Do a fuzzy search (not applicable to content search).\"));\n  p_parser->addOption(fuzzySearchOpt);\n\n  QCommandLineOption orOpt(QStringList() << \"o\" << \"or\",\n                           SearchPanel::tr(\"Do an OR combination of keywords.\"));\n  p_parser->addOption(orOpt);\n}\n\nbool SearchToken::compile(const QString &p_keyword, FindOptions p_options, SearchToken &p_token) {\n\n  p_token.clear();\n\n  if (p_keyword.isEmpty()) {\n    return false;\n  }\n\n  auto parser = getCommandLineParser();\n\n  auto caseSensitivity =\n      p_options & FindOption::CaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;\n  bool isRegularExpression = p_options & FindOption::RegularExpression;\n  bool isWholeWordOnly = p_options & FindOption::WholeWordOnly;\n  bool isFuzzySearch = p_options & FindOption::FuzzySearch;\n\n  auto args = ProcessUtils::parseCombinedArgString(p_keyword);\n  // The parser needs the first arg to be the application name.\n  args.prepend(\"vnotex\");\n  if (!parser->parse(args)) {\n    return false;\n  }\n\n  if (parser->isSet(\"c\")) {\n    caseSensitivity = Qt::CaseSensitive;\n  }\n  if (parser->isSet(\"r\")) {\n    isRegularExpression = true;\n  }\n  if (parser->isSet(\"w\")) {\n    isWholeWordOnly = true;\n  }\n  if (parser->isSet(\"f\")) {\n    isFuzzySearch = true;\n  }\n\n  args = parser->positionalArguments();\n  if (args.isEmpty()) {\n    return false;\n  }\n\n  p_token.m_caseSensitivity = caseSensitivity;\n  if (isRegularExpression || isWholeWordOnly || isFuzzySearch) {\n    p_token.m_type = Type::RegularExpression;\n  } else {\n    p_token.m_type = Type::PlainText;\n  }\n  p_token.m_operator = parser->isSet(\"o\") ? Operator::Or : Operator::And;\n\n  auto patternOptions = caseSensitivity == Qt::CaseInsensitive\n                            ? QRegularExpression::CaseInsensitiveOption\n                            : QRegularExpression::NoPatternOption;\n  for (const auto &ar : args) {\n    if (ar.isEmpty()) {\n      continue;\n    }\n\n    if (isRegularExpression) {\n      p_token.append(QRegularExpression(ar, patternOptions));\n    } else if (isFuzzySearch) {\n      // ABC -> *A*B*C*.\n      QString wildcardText(ar.size() * 2 + 1, '*');\n      for (int i = 0, j = 1; i < ar.size(); ++i, j += 2) {\n        wildcardText[j] = ar[i];\n      }\n\n      p_token.append(QRegularExpression(\n          QRegularExpression::wildcardToRegularExpression(wildcardText), patternOptions));\n    } else if (isWholeWordOnly) {\n      auto pattern = QRegularExpression::escape(ar);\n      pattern = \"\\\\b\" + pattern + \"\\\\b\";\n      p_token.append(QRegularExpression(pattern, patternOptions));\n    } else {\n      p_token.append(ar);\n    }\n  }\n\n  return !p_token.isEmpty();\n}\n\nQString SearchToken::getHelpText() {\n  auto parser = getCommandLineParser();\n  auto text = parser->helpText();\n  // Skip the first line containing the application name.\n  return text.mid(text.indexOf('\\n') + 1);\n}\n\nQPair<QStringList, FindOptions> SearchToken::toPatterns() const {\n  QPair<QStringList, FindOptions> ret;\n\n  ret.second =\n      m_caseSensitivity == Qt::CaseSensitive ? FindOption::CaseSensitive : FindOption::FindNone;\n  if (m_type == Type::RegularExpression) {\n    ret.second |= FindOption::RegularExpression;\n\n    for (const auto &reg : m_regularExpressions) {\n      ret.first << reg.pattern();\n    }\n  } else {\n    ret.first = m_keywords;\n  }\n\n  return ret;\n}\n"
  },
  {
    "path": "src/search/searchtoken.h",
    "content": "#ifndef SEARCHTOKEN_H\n#define SEARCHTOKEN_H\n\n#include <QBitArray>\n#include <QRegularExpression>\n#include <QScopedPointer>\n#include <QString>\n#include <QVector>\n\n#include <core/global.h>\n\nclass QCommandLineParser;\n\nnamespace vnotex {\nclass SearchToken {\npublic:\n  enum class Type { PlainText, RegularExpression };\n\n  enum class Operator { And, Or };\n\n  void clear();\n\n  void append(const QString &p_text);\n\n  void append(const QRegularExpression &p_regExp);\n\n  // Whether @p_text is matched.\n  bool matched(const QString &p_text, QList<Segment> *p_segments = nullptr) const;\n\n  int constraintSize() const;\n\n  bool isEmpty() const;\n\n  bool shouldStartBatchMode() const;\n\n  // Batch Mode: use a list of text string to match the same token.\n  void startBatchMode();\n\n  // Match one string in batch mode.\n  // Return true if @p_text is matched.\n  bool matchedInBatchMode(const QString &p_text, QList<Segment> *p_segments = nullptr);\n\n  bool readyToEndBatchMode() const;\n\n  void endBatchMode();\n\n  QPair<QStringList, FindOptions> toPatterns() const;\n\n  // Compile tokens from keyword.\n  // Support some magic switchs in the keyword which will suppress the given options.\n  static bool compile(const QString &p_keyword, FindOptions p_options, SearchToken &p_token);\n\n  static QString getHelpText();\n\n  static void addSearchOptionsToCommand(QCommandLineParser *p_parser);\n\nprivate:\n  static QCommandLineParser *getCommandLineParser();\n\n  Type m_type = Type::PlainText;\n\n  Operator m_operator = Operator::And;\n\n  Qt::CaseSensitivity m_caseSensitivity = Qt::CaseInsensitive;\n\n  QStringList m_keywords;\n\n  QVector<QRegularExpression> m_regularExpressions;\n\n  // [i] is true only if m_keywords[i] or m_regularExpressions[i] is matched.\n  QBitArray m_matchedConstraintsInBatchMode;\n\n  int m_matchedConstraintsCountInBatchMode = 0;\n};\n} // namespace vnotex\n\n#endif // SEARCHTOKEN_H\n"
  },
  {
    "path": "src/snippet/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    dynamicsnippet.cpp dynamicsnippet.h\n    snippet.cpp snippet.h\n    snippetmgr.cpp snippetmgr.h\n)\n"
  },
  {
    "path": "src/snippet/dynamicsnippet.cpp",
    "content": "#include \"dynamicsnippet.h\"\n\n#include <QDebug>\n\nusing namespace vnotex;\n\nDynamicSnippet::DynamicSnippet(const QString &p_name, const QString &p_description,\n                               const Callback &p_callback)\n    : Snippet(p_name, p_description, QString(), Snippet::InvalidShortcut, false, QString(),\n              QString()),\n      m_callback(p_callback) {\n  setType(Type::Dynamic);\n  setReadOnly(true);\n}\n\nQString DynamicSnippet::apply(const QString &p_selectedText, const QString &p_indentationSpaces,\n                              int &p_cursorOffset) {\n  Q_UNUSED(p_indentationSpaces);\n  auto text = m_callback(p_selectedText);\n  p_cursorOffset = text.size();\n  return text;\n}\n"
  },
  {
    "path": "src/snippet/dynamicsnippet.h",
    "content": "#ifndef DYNAMICSNIPPET_H\n#define DYNAMICSNIPPET_H\n\n#include \"snippet.h\"\n\n#include <functional>\n\nnamespace vnotex {\n// Snippet based on function.\n// To replace the legacy Magic Word.\nclass DynamicSnippet : public Snippet {\npublic:\n  typedef std::function<QString(const QString &)> Callback;\n\n  DynamicSnippet(const QString &p_name, const QString &p_description, const Callback &p_callback);\n\n  QString apply(const QString &p_selectedText, const QString &p_indentationSpaces,\n                int &p_cursorOffset) Q_DECL_OVERRIDE;\n\nprivate:\n  Callback m_callback;\n};\n} // namespace vnotex\n\n#endif // DYNAMICSNIPPET_H\n"
  },
  {
    "path": "src/snippet/snippet.cpp",
    "content": "#include \"snippet.h\"\n\n#include <QDebug>\n\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nconst QString Snippet::c_defaultCursorMark = QStringLiteral(\"@@\");\n\nconst QString Snippet::c_defaultSelectionMark = QStringLiteral(\"$$\");\n\nSnippet::Snippet(const QString &p_name) : m_name(p_name) {}\n\nSnippet::Snippet(const QString &p_name, const QString &p_description, const QString &p_content,\n                 int p_shortcut, bool p_indentAsFirstLine, const QString &p_cursorMark,\n                 const QString &p_selectionMark)\n    : m_type(Type::Text), m_name(p_name), m_description(p_description), m_content(p_content),\n      m_shortcut(p_shortcut), m_indentAsFirstLine(p_indentAsFirstLine), m_cursorMark(p_cursorMark),\n      m_selectionMark(p_selectionMark) {}\n\nQJsonObject Snippet::toJson() const {\n  QJsonObject obj;\n\n  obj[QStringLiteral(\"type\")] = static_cast<int>(m_type);\n  obj[QStringLiteral(\"description\")] = m_description;\n  obj[QStringLiteral(\"content\")] = m_content;\n  obj[QStringLiteral(\"shortcut\")] = m_shortcut;\n  obj[QStringLiteral(\"indent_as_first_line\")] = m_indentAsFirstLine;\n  obj[QStringLiteral(\"cursor_mark\")] = m_cursorMark;\n  obj[QStringLiteral(\"selection_mark\")] = m_selectionMark;\n\n  return obj;\n}\n\nvoid Snippet::fromJson(const QJsonObject &p_jobj) {\n  m_type = static_cast<Type>(p_jobj[QStringLiteral(\"type\")].toInt());\n  m_description = p_jobj[QStringLiteral(\"description\")].toString();\n  m_content = p_jobj[QStringLiteral(\"content\")].toString();\n  m_shortcut = p_jobj[QStringLiteral(\"shortcut\")].toInt();\n  m_indentAsFirstLine = p_jobj[QStringLiteral(\"indent_as_first_line\")].toBool();\n  m_cursorMark = p_jobj[QStringLiteral(\"cursor_mark\")].toString();\n  m_selectionMark = p_jobj[QStringLiteral(\"selection_mark\")].toString();\n}\n\nbool Snippet::isValid() const { return !m_name.isEmpty() && m_type != Type::Invalid; }\n\nconst QString &Snippet::getName() const { return m_name; }\n\nint Snippet::getShortcut() const { return m_shortcut; }\n\nQString Snippet::getShortcutString() const {\n  if (m_shortcut == InvalidShortcut) {\n    return QString();\n  } else {\n    return Utils::intToString(m_shortcut, 2);\n  }\n}\n\nSnippet::Type Snippet::getType() const { return m_type; }\n\nconst QString &Snippet::getCursorMark() const { return m_cursorMark; }\n\nconst QString &Snippet::getSelectionMark() const { return m_selectionMark; }\n\nbool Snippet::isIndentAsFirstLineEnabled() const { return m_indentAsFirstLine; }\n\nconst QString &Snippet::getContent() const { return m_content; }\n\nconst QString &Snippet::getDescription() const { return m_description; }\n\nQString Snippet::apply(const QString &p_selectedText, const QString &p_indentationSpaces,\n                       int &p_cursorOffset) {\n  QString appliedText;\n  p_cursorOffset = 0;\n  if (!isValid() || m_content.isEmpty()) {\n    qWarning() << \"failed to apply an invalid snippet\" << m_name;\n    return appliedText;\n  }\n\n  // Indent each line after the first line.\n  if (m_indentAsFirstLine && !p_indentationSpaces.isEmpty()) {\n    auto lines = m_content.split(QLatin1Char('\\n'));\n    Q_ASSERT(!lines.isEmpty());\n    appliedText = lines[0];\n    for (int i = 1; i < lines.size(); ++i) {\n      appliedText += QLatin1Char('\\n') + p_indentationSpaces + lines[i];\n    }\n  } else {\n    appliedText = m_content;\n  }\n\n  // Find the cursor mark and break the content.\n  QString secondPart;\n  if (!m_cursorMark.isEmpty()) {\n    QStringList parts = appliedText.split(m_cursorMark);\n    Q_ASSERT(!parts.isEmpty());\n    if (parts.size() > 2) {\n      qWarning() << \"failed to apply snippet with multiple cursor marks\" << m_name;\n      return QString();\n    }\n\n    appliedText = parts[0];\n    if (parts.size() == 2) {\n      secondPart = parts[1];\n    }\n  }\n\n  // Replace the selection mark.\n  if (!m_selectionMark.isEmpty()) {\n    if (!appliedText.isEmpty()) {\n      appliedText.replace(m_selectionMark, p_selectedText);\n    }\n\n    if (!secondPart.isEmpty()) {\n      secondPart.replace(m_selectionMark, p_selectedText);\n    }\n  }\n\n  p_cursorOffset = appliedText.size();\n  return appliedText + secondPart;\n}\n\nbool Snippet::isReadOnly() const { return m_readOnly; }\n\nvoid Snippet::setReadOnly(bool p_readOnly) { m_readOnly = p_readOnly; }\n\nvoid Snippet::setType(Type p_type) { m_type = p_type; }\n"
  },
  {
    "path": "src/snippet/snippet.h",
    "content": "#ifndef SNIPPET_H\n#define SNIPPET_H\n\n#include <QJsonObject>\n#include <QString>\n\nnamespace vnotex {\nclass Snippet {\npublic:\n  enum class Type { Invalid, Text, Script, Dynamic };\n\n  enum { InvalidShortcut = -1 };\n\n  Snippet() = default;\n\n  explicit Snippet(const QString &p_name);\n\n  Snippet(const QString &p_name, const QString &p_description, const QString &p_content,\n          int p_shortcut, bool p_indentAsFirstLine, const QString &p_cursorMark,\n          const QString &p_selectionMark);\n\n  virtual ~Snippet() = default;\n\n  QJsonObject toJson() const;\n  void fromJson(const QJsonObject &p_jobj);\n\n  bool isValid() const;\n\n  bool isReadOnly() const;\n\n  void setReadOnly(bool p_readOnly);\n\n  const QString &getName() const;\n\n  const QString &getDescription() const;\n\n  Type getType() const;\n\n  int getShortcut() const;\n\n  QString getShortcutString() const;\n\n  const QString &getCursorMark() const;\n\n  const QString &getSelectionMark() const;\n\n  bool isIndentAsFirstLineEnabled() const;\n\n  const QString &getContent() const;\n\n  // Apply the snippet to generate result text.\n  virtual QString apply(const QString &p_selectedText, const QString &p_indentationSpaces,\n                        int &p_cursorOffset);\n\n  static const QString c_defaultCursorMark;\n\n  static const QString c_defaultSelectionMark;\n\nprotected:\n  void setType(Type p_type);\n\nprivate:\n  bool m_readOnly = false;\n\n  Type m_type = Type::Invalid;\n\n  // Name (and file name) of the snippet.\n  // To avoid mixed with shortcut, the name should not contain digits.\n  QString m_name;\n\n  QString m_description;\n\n  // Content of the snippet if it is Text.\n  // Embedded snippet is supported.\n  QString m_content;\n\n  // Shortcut digits of this snippet.\n  int m_shortcut = InvalidShortcut;\n\n  bool m_indentAsFirstLine = false;\n\n  // CursorMark is a mark string to indicate the cursor position after applying the snippet.\n  QString m_cursorMark;\n\n  // SelectionMark is a mark string which will be replaced by the selected text before applying the\n  // snippet after a snippet is applied.\n  QString m_selectionMark;\n};\n} // namespace vnotex\n\n#endif // SNIPPET_H\n"
  },
  {
    "path": "src/snippet/snippetmgr.cpp",
    "content": "#include \"snippetmgr.h\"\n\n#include <QDateTime>\n#include <QDebug>\n#include <QDir>\n#include <QFileInfo>\n#include <QJsonDocument>\n#include <QRegularExpression>\n#include <QSet>\n#include <QTextCursor>\n\n#include <buffer/buffer.h>\n#include <core/configmgr.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n#include <vtextedit/texteditutils.h>\n#include <vtextedit/textutils.h>\n#include <vtextedit/vtextedit.h>\n\nusing namespace vnotex;\n\nconst QChar SnippetMgr::c_snippetSymbolGuard = QLatin1Char('%');\n\nconst QString SnippetMgr::c_snippetSymbolRegExp =\n    QStringLiteral(\"%1([^%]+)%1\").arg(c_snippetSymbolGuard);\n\nSnippetMgr::SnippetMgr() { loadSnippets(); }\n\nQString SnippetMgr::getSnippetFolder() const { return ConfigMgr::getInst().getUserSnippetFolder(); }\n\nconst QVector<QSharedPointer<Snippet>> &SnippetMgr::getSnippets() const { return m_snippets; }\n\nvoid SnippetMgr::loadSnippets() {\n  Q_ASSERT(m_snippets.isEmpty());\n\n  auto builtInSnippets = loadBuiltInSnippets();\n\n  QSet<QString> names;\n  for (const auto &snippet : builtInSnippets) {\n    Q_ASSERT(!names.contains(snippet->getName()));\n    names.insert(snippet->getName());\n  }\n\n  // Look for all the *.json files.\n  QDir dir(getSnippetFolder());\n  dir.setFilter(QDir::Files | QDir::NoSymLinks);\n  const auto jsonFiles = dir.entryList(QStringList() << \"*.json\");\n  for (const auto &jsonFile : jsonFiles) {\n    auto snip = loadSnippet(dir.filePath(jsonFile));\n    if (snip->isValid()) {\n      if (names.contains(snip->getName())) {\n        qWarning() << \"skip loading snippet with name conflict\" << snip->getName() << jsonFile;\n        continue;\n      }\n\n      names.insert(snip->getName());\n\n      addOneSnippet(snip);\n    }\n  }\n\n  m_snippets.append(builtInSnippets);\n\n  qDebug() << \"loaded\" << m_snippets.size() << \"snippets\";\n}\n\nQVector<int> SnippetMgr::getAvailableShortcuts(int p_exemption) const {\n  QVector<int> shortcuts;\n\n  for (int i = 0; i < 100; ++i) {\n    if (!m_shortcutToSnippet.contains(i) || i == p_exemption) {\n      shortcuts.push_back(i);\n    }\n  }\n\n  return shortcuts;\n}\n\nQSharedPointer<Snippet> SnippetMgr::find(const QString &p_name, Qt::CaseSensitivity p_cs) const {\n  if (p_cs == Qt::CaseInsensitive) {\n    const auto lowerName = p_name.toLower();\n    for (const auto &snip : m_snippets) {\n      if (snip->getName().toLower() == lowerName) {\n        return snip;\n      }\n    }\n  } else {\n    for (const auto &snip : m_snippets) {\n      if (snip->getName() == p_name) {\n        return snip;\n      }\n    }\n  }\n\n  return nullptr;\n}\n\nvoid SnippetMgr::addSnippet(const QSharedPointer<Snippet> &p_snippet) {\n  Q_ASSERT(!find(p_snippet->getName(), Qt::CaseInsensitive));\n  saveSnippet(p_snippet);\n  addOneSnippet(p_snippet);\n}\n\nvoid SnippetMgr::addOneSnippet(const QSharedPointer<Snippet> &p_snippet) {\n  m_snippets.push_back(p_snippet);\n  addSnippetToShortcutMap(p_snippet);\n}\n\nQSharedPointer<Snippet> SnippetMgr::loadSnippet(const QString &p_snippetFile) const {\n  const auto obj = FileUtils::readJsonFile(p_snippetFile);\n  auto snip = QSharedPointer<Snippet>::create(QFileInfo(p_snippetFile).completeBaseName());\n  snip->fromJson(obj);\n  return snip;\n}\n\nvoid SnippetMgr::saveSnippet(const QSharedPointer<Snippet> &p_snippet) {\n  Q_ASSERT(p_snippet->isValid() && !p_snippet->isReadOnly() &&\n           p_snippet->getType() != Snippet::Type::Dynamic);\n  FileUtils::writeFile(getSnippetFile(p_snippet), p_snippet->toJson());\n}\n\nvoid SnippetMgr::removeSnippet(const QString &p_name) {\n  auto snippet = find(p_name);\n  if (!snippet || snippet->isReadOnly()) {\n    return;\n  }\n\n  removeSnippetFromShortcutMap(snippet);\n  m_snippets.removeAll(snippet);\n  FileUtils::removeFile(getSnippetFile(snippet));\n}\n\nQString SnippetMgr::getSnippetFile(const QSharedPointer<Snippet> &p_snippet) const {\n  return PathUtils::concatenateFilePath(getSnippetFolder(),\n                                        p_snippet->getName() + QStringLiteral(\".json\"));\n}\n\nvoid SnippetMgr::updateSnippet(const QString &p_name, const QSharedPointer<Snippet> &p_snippet) {\n  auto snippet = find(p_name);\n  Q_ASSERT(snippet);\n\n  // If renamed, remove the old file first.\n  if (p_name != p_snippet->getName()) {\n    FileUtils::removeFile(getSnippetFile(snippet));\n  }\n\n  removeSnippetFromShortcutMap(snippet);\n\n  *snippet = *p_snippet;\n  saveSnippet(snippet);\n\n  addSnippetToShortcutMap(snippet);\n}\n\nvoid SnippetMgr::removeSnippetFromShortcutMap(const QSharedPointer<Snippet> &p_snippet) {\n  if (p_snippet->getShortcut() != Snippet::InvalidShortcut) {\n    auto iter = m_shortcutToSnippet.find(p_snippet->getShortcut());\n    Q_ASSERT(iter != m_shortcutToSnippet.end());\n    if (iter.value() == p_snippet) {\n      // There may exist conflict in shortcut.\n      m_shortcutToSnippet.erase(iter);\n    }\n  }\n}\n\nvoid SnippetMgr::addSnippetToShortcutMap(const QSharedPointer<Snippet> &p_snippet) {\n  if (p_snippet->getShortcut() != Snippet::InvalidShortcut) {\n    m_shortcutToSnippet.insert(p_snippet->getShortcut(), p_snippet);\n  }\n}\n\nvoid SnippetMgr::applySnippet(const QString &p_name, vte::VTextEdit *p_textEdit,\n                              const OverrideMap &p_overrides) const {\n  auto snippet = find(p_name);\n  if (!snippet) {\n    return;\n  }\n  Q_ASSERT(snippet->isValid());\n\n  auto cursor = p_textEdit->textCursor();\n  cursor.beginEditBlock();\n\n  // Get selected text.\n  const auto selectedText = p_textEdit->selectedText();\n  p_textEdit->removeSelectedText();\n\n  QString appliedText;\n  int cursorOffset = 0;\n\n  auto it = p_overrides.find(p_name);\n  if (it != p_overrides.end()) {\n    appliedText = it.value();\n    cursorOffset = appliedText.size();\n  } else {\n    // Fetch indentation of first line.\n    QString indentationSpaces;\n    if (snippet->isIndentAsFirstLineEnabled()) {\n      indentationSpaces = vte::TextEditUtils::fetchIndentationSpaces(cursor.block());\n    }\n\n    appliedText = snippet->apply(selectedText, indentationSpaces, cursorOffset);\n    appliedText = applySnippetBySymbol(appliedText, selectedText, cursorOffset, p_overrides);\n  }\n\n  const int beforePos = cursor.position();\n  cursor.insertText(appliedText);\n  cursor.setPosition(beforePos + cursorOffset);\n\n  cursor.endEditBlock();\n  p_textEdit->setTextCursor(cursor);\n}\n\nQString SnippetMgr::applySnippetBySymbol(const QString &p_content,\n                                         const OverrideMap &p_overrides) const {\n  int offset = 0;\n  return applySnippetBySymbol(p_content, QString(), offset, p_overrides);\n}\n\nQString SnippetMgr::applySnippetBySymbol(const QString &p_content, const QString &p_selectedText,\n                                         int &p_cursorOffset,\n                                         const OverrideMap &p_overrides) const {\n  QString content(p_content);\n\n  int maxTimesAtSamePos = 100;\n\n  QRegularExpression regExp(c_snippetSymbolRegExp);\n  int pos = 0;\n  while (pos < content.size()) {\n    QRegularExpressionMatch match;\n    int idx = content.indexOf(regExp, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    const auto snippetName = match.captured(1);\n    auto snippet = find(snippetName);\n    if (!snippet) {\n      // Skip it.\n      pos = idx + match.capturedLength(0);\n      continue;\n    }\n\n    QString afterText;\n\n    auto it = p_overrides.find(snippetName);\n    if (it != p_overrides.end()) {\n      afterText = it.value();\n    } else {\n      const auto indentationSpaces =\n          vte::TextUtils::fetchIndentationSpacesInMultiLines(content, idx);\n\n      // Ignore the cursor mark.\n      int ignoredCursorOffset = 0;\n      afterText = snippet->apply(p_selectedText, indentationSpaces, ignoredCursorOffset);\n    }\n\n    content.replace(idx, match.capturedLength(0), afterText);\n\n    // Maintain the cursor offset.\n    if (p_cursorOffset > idx) {\n      if (p_cursorOffset < idx + match.capturedLength(0)) {\n        p_cursorOffset = idx;\n      } else {\n        p_cursorOffset += (afterText.size() - match.capturedLength(0));\n      }\n    }\n\n    // @afterText may still contains snippet symbol.\n    if (pos == idx) {\n      if (--maxTimesAtSamePos == 0) {\n        break;\n      }\n    } else {\n      maxTimesAtSamePos = 100;\n    }\n    pos = idx;\n  }\n\n  return content;\n}\n\n// Used as the function template for some date/time related dynamic snippets.\nstatic QString formattedDateTime(const QString &p_format) {\n  return QDateTime::currentDateTime().toString(p_format);\n}\n\nQVector<QSharedPointer<Snippet>> SnippetMgr::loadBuiltInSnippets() const {\n  QVector<QSharedPointer<Snippet>> snippets;\n\n  addDynamicSnippet(snippets, \"d\", tr(\"the day as number without a leading zero (`1` to `31`)\"),\n                    std::bind(formattedDateTime, \"d\"));\n  addDynamicSnippet(snippets, \"dd\", tr(\"the day as number with a leading zero (`01` to `31`)\"),\n                    std::bind(formattedDateTime, \"dd\"));\n  addDynamicSnippet(snippets, \"ddd\", tr(\"the abbreviated localized day name (e.g. `Mon` to `Sun`)\"),\n                    std::bind(formattedDateTime, \"ddd\"));\n  addDynamicSnippet(snippets, \"dddd\", tr(\"the long localized day name (e.g. `Monday` to `Sunday`)\"),\n                    std::bind(formattedDateTime, \"dddd\"));\n  addDynamicSnippet(snippets, \"M\", tr(\"the month as number without a leading zero (`1` to `12`)\"),\n                    std::bind(formattedDateTime, \"M\"));\n  addDynamicSnippet(snippets, \"MM\", tr(\"the month as number with a leading zero (`01` to `12`)\"),\n                    std::bind(formattedDateTime, \"MM\"));\n  addDynamicSnippet(snippets, \"MMM\",\n                    tr(\"the abbreviated localized month name (e.g. `Jan` to `Dec`)\"),\n                    std::bind(formattedDateTime, \"MMM\"));\n  addDynamicSnippet(snippets, \"MMMM\",\n                    tr(\"the long localized month name (e.g. `January` to `December`)\"),\n                    std::bind(formattedDateTime, \"MMMM\"));\n  addDynamicSnippet(snippets, \"yy\", tr(\"the year as two digit numbers (`00` to `99`)\"),\n                    std::bind(formattedDateTime, \"yy\"));\n  addDynamicSnippet(snippets, \"yyyy\", tr(\"the year as four digit numbers\"),\n                    std::bind(formattedDateTime, \"yyyy\"));\n  addDynamicSnippet(\n      snippets, \"w\", tr(\"the week number without a leading zero (`1` to `53`)\"),\n      [](const QString &) { return QString::number(QDate::currentDate().weekNumber()); });\n  addDynamicSnippet(\n      snippets, \"ww\", tr(\"the week number with a leading zero (`01` to `53`)\"),\n      [](const QString &) { return Utils::intToString(QDate::currentDate().weekNumber(), 2); });\n  addDynamicSnippet(snippets, \"H\",\n                    tr(\"the hour without a leading zero (`0` to `23` even with AM/PM display)\"),\n                    std::bind(formattedDateTime, \"H\"));\n  addDynamicSnippet(snippets, \"HH\",\n                    tr(\"the hour with a leading zero (`00` to `23` even with AM/PM display)\"),\n                    std::bind(formattedDateTime, \"HH\"));\n  addDynamicSnippet(snippets, \"m\", tr(\"the minute without a leading zero (`0` to `59`)\"),\n                    std::bind(formattedDateTime, \"m\"));\n  addDynamicSnippet(snippets, \"mm\", tr(\"the minute with a leading zero (`00` to `59`)\"),\n                    std::bind(formattedDateTime, \"mm\"));\n  addDynamicSnippet(snippets, \"s\", tr(\"the second without a leading zero (`0` to `59`)\"),\n                    std::bind(formattedDateTime, \"s\"));\n  addDynamicSnippet(snippets, \"ss\", tr(\"the second with a leading zero (`00` to `59`)\"),\n                    std::bind(formattedDateTime, \"ss\"));\n  addDynamicSnippet(snippets, \"date\", tr(\"date (`2021-02-24`)\"),\n                    std::bind(formattedDateTime, \"yyyy-MM-dd\"));\n  addDynamicSnippet(snippets, \"da\", tr(\"the abbreviated date (`20210224`)\"),\n                    std::bind(formattedDateTime, \"yyyyMMdd\"));\n  addDynamicSnippet(snippets, \"time\", tr(\"time (`16:51:02`)\"),\n                    std::bind(formattedDateTime, \"hh:mm:ss\"));\n  addDynamicSnippet(snippets, \"datetime\", tr(\"date and time (`2021-02-24_16:51:02`)\"),\n                    std::bind(formattedDateTime, \"yyyy-MM-dd_hh:mm:ss\"));\n\n  // These snippets need override to fill the real value.\n  // Check generateOverrides().\n  addDynamicSnippet(snippets, QStringLiteral(\"note\"), tr(\"name of current note\"),\n                    [](const QString &) { return tr(\"[Value Not Available]\"); });\n  addDynamicSnippet(snippets, QStringLiteral(\"no\"), tr(\"complete base name of current note\"),\n                    [](const QString &) { return tr(\"[Value Not Available]\"); });\n  return snippets;\n}\n\nvoid SnippetMgr::addDynamicSnippet(QVector<QSharedPointer<Snippet>> &p_snippets,\n                                   const QString &p_name, const QString &p_description,\n                                   const DynamicSnippet::Callback &p_callback) {\n  auto snippet = QSharedPointer<DynamicSnippet>::create(p_name, p_description, p_callback);\n  p_snippets.push_back(snippet);\n}\n\nSnippetMgr::OverrideMap SnippetMgr::generateOverrides(const Buffer *p_buffer) {\n  OverrideMap overrides;\n  if (p_buffer) {\n    overrides.insert(QStringLiteral(\"note\"), p_buffer->getName());\n    overrides.insert(QStringLiteral(\"no\"), QFileInfo(p_buffer->getName()).completeBaseName());\n  }\n  return overrides;\n}\n\nSnippetMgr::OverrideMap SnippetMgr::generateOverrides(const QString &p_fileName) {\n  OverrideMap overrides;\n  overrides.insert(QStringLiteral(\"note\"), p_fileName);\n  overrides.insert(QStringLiteral(\"no\"), QFileInfo(p_fileName).completeBaseName());\n  return overrides;\n}\n\nQString SnippetMgr::generateSnippetSymbol(const QString &p_snippetName) {\n  return c_snippetSymbolGuard + p_snippetName + c_snippetSymbolGuard;\n}\n"
  },
  {
    "path": "src/snippet/snippetmgr.h",
    "content": "#ifndef SNIPPETMGR_H\n#define SNIPPETMGR_H\n\n#include <QMap>\n#include <QObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#include <core/noncopyable.h>\n\n#include \"dynamicsnippet.h\"\n\nnamespace vte {\nclass VTextEdit;\n}\n\nnamespace vnotex {\nclass Buffer;\n\nclass SnippetMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  typedef QMap<QString, QString> OverrideMap;\n\n  static SnippetMgr &getInst() {\n    static SnippetMgr inst;\n    return inst;\n  }\n\n  QString getSnippetFolder() const;\n\n  const QVector<QSharedPointer<Snippet>> &getSnippets() const;\n\n  // @p_exemption: include it even it is occupied by one snippet.\n  QVector<int> getAvailableShortcuts(int p_exemption = Snippet::InvalidShortcut) const;\n\n  QSharedPointer<Snippet> find(const QString &p_name,\n                               Qt::CaseSensitivity p_cs = Qt::CaseSensitive) const;\n\n  void addSnippet(const QSharedPointer<Snippet> &p_snippet);\n\n  void removeSnippet(const QString &p_name);\n\n  void updateSnippet(const QString &p_name, const QSharedPointer<Snippet> &p_snippet);\n\n  // Apply snippet @p_name directly in current cursor position.\n  // For snippets in @p_overrides, we just provide simple contents without nested snippets.\n  void applySnippet(const QString &p_name, vte::VTextEdit *p_textEdit,\n                    const OverrideMap &p_overrides = OverrideMap()) const;\n\n  // Resolve %snippet_name% as snippet and apply recursively.\n  // Will update @p_cursorOffset if needed.\n  // For snippets in @p_overrides, we just provide simple contents without nested snippets.\n  QString applySnippetBySymbol(const QString &p_content, const QString &p_selectedText,\n                               int &p_cursorOffset,\n                               const OverrideMap &p_overrides = OverrideMap()) const;\n\n  QString applySnippetBySymbol(const QString &p_content,\n                               const OverrideMap &p_overrides = OverrideMap()) const;\n\n  // Generate standard overrides for given buffer.\n  static OverrideMap generateOverrides(const Buffer *p_buffer);\n\n  // Generate standard overrides for given file name.\n  static OverrideMap generateOverrides(const QString &p_fileName);\n\n  static QString generateSnippetSymbol(const QString &p_snippetName);\n\n  static const QChar c_snippetSymbolGuard;\n\n  // %name%.\n  // Captured texts:\n  // 1 - The name of the snippet.\n  static const QString c_snippetSymbolRegExp;\n\nprivate:\n  SnippetMgr();\n\n  void loadSnippets();\n\n  QSharedPointer<Snippet> loadSnippet(const QString &p_snippetFile) const;\n\n  void saveSnippet(const QSharedPointer<Snippet> &p_snippet);\n\n  QString getSnippetFile(const QSharedPointer<Snippet> &p_snippet) const;\n\n  void addOneSnippet(const QSharedPointer<Snippet> &p_snippet);\n\n  void removeSnippetFromShortcutMap(const QSharedPointer<Snippet> &p_snippet);\n\n  void addSnippetToShortcutMap(const QSharedPointer<Snippet> &p_snippet);\n\n  QVector<QSharedPointer<Snippet>> loadBuiltInSnippets() const;\n\n  static void addDynamicSnippet(QVector<QSharedPointer<Snippet>> &p_snippets, const QString &p_name,\n                                const QString &p_description,\n                                const DynamicSnippet::Callback &p_callback);\n\n  QVector<QSharedPointer<Snippet>> m_snippets;\n\n  QMap<int, QSharedPointer<Snippet>> m_shortcutToSnippet;\n};\n} // namespace vnotex\n\n#endif // SNIPPETMGR_H\n"
  },
  {
    "path": "src/task/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    shellexecution.cpp shellexecution.h\n    task.cpp task.h\n    taskmgr.cpp taskmgr.h\n    taskvariablemgr.cpp taskvariablemgr.h\n)\n"
  },
  {
    "path": "src/task/shellexecution.cpp",
    "content": "#include \"shellexecution.h\"\n\n#include <QFileInfo>\n#include <QProcess>\n\nusing namespace vnotex;\n\nvoid ShellExecution::setupProcess(QProcess *p_process, const QString &p_program,\n                                  const QStringList &p_args, const QString &p_shellExec,\n                                  const QStringList &p_shellArgs) {\n  auto shellExec = p_shellExec.isNull() ? defaultShell() : p_shellExec;\n  auto shellArgs = p_shellArgs.isEmpty() ? defaultShellArguments(shellExec) : p_shellArgs;\n\n  p_process->setProgram(shellExec);\n\n  const auto shell = shellBasename(p_shellExec);\n  QStringList allArgs(shellArgs);\n  if (shell == \"bash\") {\n    allArgs << (QStringList() << p_program << quoteSpaces(p_args)).join(' ');\n  } else {\n    allArgs << p_program << p_args;\n  }\n  p_process->setArguments(allArgs);\n}\n\nQString ShellExecution::shellBasename(const QString &p_shell) {\n  return QFileInfo(p_shell).baseName().toLower();\n}\n\nQString ShellExecution::defaultShell() {\n#ifdef Q_OS_WIN\n  return QStringLiteral(\"PowerShell.exe\");\n#else\n  return QStringLiteral(\"/bin/bash\");\n#endif\n}\n\nQStringList ShellExecution::defaultShellArguments(const QString &p_shell) {\n  auto shell = shellBasename(p_shell);\n  if (shell == \"cmd\") {\n    return {\"/C\"};\n  } else if (shell == \"powershell\" || p_shell == \"pwsh\") {\n    return {\"-Command\"};\n  } else if (shell == \"bash\") {\n    return {\"-c\"};\n  }\n  return {};\n}\n\nQString ShellExecution::quoteSpace(const QString &p_arg) {\n  if (p_arg.contains(QLatin1Char(' '))) {\n    return QLatin1Char('\"') + p_arg + QLatin1Char('\"');\n  } else {\n    return p_arg;\n  }\n}\n\nQStringList ShellExecution::quoteSpaces(const QStringList &p_args) {\n  QStringList args;\n  for (const auto &arg : p_args) {\n    args << quoteSpace(arg);\n  }\n  return args;\n}\n"
  },
  {
    "path": "src/task/shellexecution.h",
    "content": "#ifndef SHELLEXECUTION_H\n#define SHELLEXECUTION_H\n\n#include <QStringList>\n\nclass QProcess;\n\nnamespace vnotex {\nclass ShellExecution {\npublic:\n  ShellExecution() = delete;\n\n  static void setupProcess(QProcess *p_process, const QString &p_program,\n                           const QStringList &p_args = QStringList(),\n                           const QString &p_shellExec = QString(),\n                           const QStringList &p_shellArgs = QStringList());\n\n  static QString defaultShell();\n\n  static QStringList defaultShellArguments(const QString &p_shell);\n\nprivate:\n  static QString shellBasename(const QString &p_shell);\n\n  static QString quoteSpace(const QString &p_arg);\n\n  static QStringList quoteSpaces(const QStringList &p_args);\n};\n} // namespace vnotex\n\n#endif // SHELLEXECUTION_H\n"
  },
  {
    "path": "src/task/task.cpp",
    "content": "#include \"task.h\"\n\n#include <QAction>\n#include <QDebug>\n#include <QInputDialog>\n#include <QJsonArray>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QJsonValue>\n#include <QProcess>\n#include <QRandomGenerator>\n#include <QRegularExpression>\n#include <QScopedPointer>\n#include <QTextCodec>\n#include <QVersionNumber>\n\n#include <buffer/buffer.h>\n#include <core/exception.h>\n#include <core/vnotex.h>\n#include <notebook/notebook.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n\n#include \"shellexecution.h\"\n#include \"taskmgr.h\"\n\nusing namespace vnotex;\n\nQString Task::s_latestVersion = \"0.1.3\";\n\nQSharedPointer<Task> Task::fromFile(const QString &p_file, const QString &p_locale,\n                                    TaskMgr *p_taskMgr) {\n  QSharedPointer<Task> task(new Task(p_locale, p_file, p_taskMgr, nullptr));\n  const auto obj = FileUtils::readJsonFile(p_file);\n  if (fromJson(task.data(), obj)) {\n    return task;\n  }\n  return nullptr;\n}\n\nbool Task::fromJson(Task *p_task, const QJsonObject &p_obj) {\n  // For child task, it will inherit the version from parent.\n  if (p_obj.contains(\"version\")) {\n    p_task->m_dto.version = p_obj[\"version\"].toString();\n  }\n\n  const auto version = QVersionNumber::fromString(p_task->getVersion());\n  if (version.isNull()) {\n    qWarning() << \"invalid task\" << p_task->m_dto._source;\n    return false;\n  }\n\n  if (version < QVersionNumber(1, 0, 0)) {\n    return fromJsonV0(p_task, p_obj);\n  } else {\n    qWarning() << \"unknown task version\" << version << p_task->m_dto._source;\n    return false;\n  }\n}\n\nbool Task::fromJsonV0(Task *p_task, const QJsonObject &p_obj, bool p_mergeTasks) {\n  if (p_obj.contains(\"type\")) {\n    p_task->m_dto.type = p_obj[\"type\"].toString();\n  }\n\n  if (p_obj.contains(\"icon\")) {\n    QString iconPath = p_obj[\"icon\"].toString();\n    if (!iconPath.isEmpty()) {\n      if (QDir::isRelativePath(iconPath)) {\n        iconPath = QFileInfo(p_task->m_dto._source).dir().absoluteFilePath(iconPath);\n      }\n\n      if (QFileInfo::exists(iconPath)) {\n        p_task->m_dto.icon = iconPath;\n      } else {\n        qWarning() << \"task icon does not exist\" << p_task->getLabel() << iconPath;\n      }\n    }\n  }\n\n  if (p_obj.contains(\"shortcut\")) {\n    p_task->m_dto.shortcut = p_obj[\"shortcut\"].toString();\n  }\n\n  if (p_obj.contains(\"type\")) {\n    p_task->m_dto.type = p_obj[\"type\"].toString();\n  }\n\n  if (p_obj.contains(\"command\")) {\n    p_task->m_dto.command = getLocaleString(p_obj[\"command\"], p_task->m_locale);\n  }\n\n  if (p_obj.contains(\"args\")) {\n    p_task->m_dto.args = getLocaleStringList(p_obj[\"args\"], p_task->m_locale);\n  }\n\n  if (p_obj.contains(\"label\")) {\n    p_task->m_dto.label = getLocaleString(p_obj[\"label\"], p_task->m_locale);\n  } else if (p_task->m_dto.label.isNull() && !p_task->m_dto.command.isNull()) {\n    p_task->m_dto.label = p_task->m_dto.command;\n  }\n\n  if (p_obj.contains(\"options\")) {\n    auto options = p_obj[\"options\"].toObject();\n\n    if (options.contains(\"cwd\")) {\n      p_task->m_dto.options.cwd = options[\"cwd\"].toString();\n    }\n\n    if (options.contains(\"env\")) {\n      p_task->m_dto.options.env.clear();\n      auto env = options[\"env\"].toObject();\n      for (auto it = env.begin(); it != env.end(); it++) {\n        auto value = getLocaleString(it.value(), p_task->m_locale);\n        p_task->m_dto.options.env.insert(it.key(), value);\n      }\n    }\n\n    if (options.contains(\"shell\") && p_task->getType() == \"shell\") {\n      auto shell = options[\"shell\"].toObject();\n\n      if (shell.contains(\"executable\")) {\n        p_task->m_dto.options.shell.executable = shell[\"executable\"].toString();\n      }\n\n      if (shell.contains(\"args\")) {\n        p_task->m_dto.options.shell.args.clear();\n\n        const auto arr = shell[\"args\"].toArray();\n        for (int i = 0; i < arr.size(); ++i) {\n          p_task->m_dto.options.shell.args << arr[i].toString();\n        }\n      }\n    }\n  }\n\n  if (p_obj.contains(\"tasks\")) {\n    if (!p_mergeTasks) {\n      p_task->m_children.clear();\n    }\n\n    auto arr = p_obj[\"tasks\"].toArray();\n    for (int i = 0; i < arr.size(); ++i) {\n      QScopedPointer<Task> childTask(\n          new Task(p_task->m_locale, p_task->getFile(), p_task->m_taskMgr, p_task));\n      if (fromJson(childTask.data(), arr[i].toObject())) {\n        connect(childTask.data(), &Task::outputRequested, p_task, &Task::outputRequested);\n        p_task->m_children.append(childTask.take());\n      }\n    }\n  }\n\n  if (p_obj.contains(\"inputs\")) {\n    p_task->m_dto.inputs.clear();\n    auto arr = p_obj[\"inputs\"].toArray();\n    for (int i = 0; i < arr.size(); ++i) {\n      const auto inputObj = arr[i].toObject();\n      InputDTO input;\n      if (inputObj.contains(\"id\")) {\n        input.id = inputObj[\"id\"].toString();\n      } else {\n        qWarning() << \"Input configuration not contains id\";\n      }\n\n      if (inputObj.contains(\"type\")) {\n        input.type = inputObj[\"type\"].toString();\n      } else {\n        input.type = \"promptString\";\n      }\n\n      if (inputObj.contains(\"description\")) {\n        input.description = getLocaleString(inputObj[\"description\"], p_task->m_locale);\n      }\n\n      if (inputObj.contains(\"default\")) {\n        input.default_ = getLocaleString(inputObj[\"default\"], p_task->m_locale);\n      }\n\n      if (input.type == \"promptString\" && inputObj.contains(\"password\")) {\n        input.password = inputObj[\"password\"].toBool();\n      } else {\n        input.password = false;\n      }\n\n      if (input.type == \"pickString\") {\n        if (inputObj.contains(\"options\")) {\n          input.options = getLocaleStringList(inputObj[\"options\"], p_task->m_locale);\n        }\n\n        if (!input.default_.isNull() && !input.options.contains(input.default_)) {\n          qWarning() << \"default of input must be one of the option values\";\n        }\n      }\n\n      p_task->m_dto.inputs << input;\n    }\n  }\n\n  if (p_obj.contains(\"messages\")) {\n    p_task->m_dto.messages.clear();\n    auto arr = p_obj[\"messages\"].toArray();\n    for (int i = 0; i < arr.size(); ++i) {\n      const auto msgObj = arr[i].toObject();\n      MessageDTO msg;\n      if (msgObj.contains(\"id\")) {\n        msg.id = msgObj[\"id\"].toString();\n      } else {\n        qWarning() << \"Message configuration not contain id\";\n      }\n\n      if (msgObj.contains(\"type\")) {\n        msg.type = msgObj[\"type\"].toString();\n      } else {\n        msg.type = \"information\";\n      }\n\n      if (msgObj.contains(\"title\")) {\n        msg.title = getLocaleString(msgObj[\"title\"], p_task->m_locale);\n      }\n\n      if (msgObj.contains(\"text\")) {\n        msg.text = getLocaleString(msgObj[\"text\"], p_task->m_locale);\n      }\n\n      if (msgObj.contains(\"detailedText\")) {\n        msg.detailedText = getLocaleString(msgObj[\"detailedText\"], p_task->m_locale);\n      }\n\n      if (msgObj.contains(\"buttons\")) {\n        auto buttonsArr = msgObj[\"buttons\"].toArray();\n        for (int j = 0; j < buttonsArr.size(); ++j) {\n          const auto btnObj = buttonsArr[j].toObject();\n          ButtonDTO btn;\n          btn.text = getLocaleString(btnObj[\"text\"], p_task->m_locale);\n          msg.buttons << btn;\n        }\n      }\n\n      p_task->m_dto.messages << msg;\n    }\n  }\n\n  // OS-specific task configuration\n#if defined(Q_OS_WIN)\n#define OS_SPEC \"windows\"\n#elif defined(Q_OS_MACOS)\n#define OS_SPEC \"osx\"\n#else\n#define OS_SPEC \"linux\"\n#endif\n\n  if (p_obj.contains(OS_SPEC)) {\n    const auto osObj = p_obj[OS_SPEC].toObject();\n    fromJsonV0(p_task, osObj, true);\n  }\n\n#undef OS_SPEC\n\n  return true;\n}\n\nconst QString &Task::getVersion() const { return m_dto.version; }\n\nconst QString &Task::getType() const { return m_dto.type; }\n\nQString Task::getCommand() { return variableMgr().evaluate(this, m_dto.command); }\n\nQStringList Task::getArgs() { return variableMgr().evaluate(this, m_dto.args); }\n\nconst QString &Task::getLabel() const { return m_dto.label; }\n\nconst QString &Task::getIcon() const { return m_dto.icon; }\n\nconst QString &Task::getShortcut() const { return m_dto.shortcut; }\n\nQString Task::getOptionsCwd() {\n  auto cwd = m_dto.options.cwd;\n  if (!cwd.isNull()) {\n    return variableMgr().evaluate(this, cwd);\n  }\n\n  auto notebook = TaskVariableMgr::getCurrentNotebook();\n  if (notebook) {\n    cwd = notebook->getRootFolderAbsolutePath();\n  }\n\n  if (!cwd.isNull()) {\n    return cwd;\n  }\n\n  auto buffer = TaskVariableMgr::getCurrentBuffer();\n  if (buffer) {\n    return QFileInfo(buffer->getPath()).dir().absolutePath();\n  }\n\n  return QFileInfo(m_dto._source).dir().absolutePath();\n}\n\nconst QMap<QString, QString> &Task::getOptionsEnv() const { return m_dto.options.env; }\n\nconst QString &Task::getOptionsShellExecutable() const { return m_dto.options.shell.executable; }\n\nQStringList Task::getOptionsShellArgs() {\n  if (m_dto.options.shell.args.isEmpty()) {\n    return ShellExecution::defaultShellArguments(m_dto.options.shell.executable);\n  } else {\n    return variableMgr().evaluate(this, m_dto.options.shell.args);\n  }\n}\n\nconst QVector<Task *> &Task::getChildren() const { return m_children; }\n\nconst QVector<InputDTO> &Task::getInputs() const { return m_dto.inputs; }\n\nconst InputDTO *Task::findInput(const QString &p_id) const {\n  for (const auto &input : m_dto.inputs) {\n    if (input.id == p_id) {\n      return &input;\n    }\n  }\n\n  qWarning() << \"input\" << p_id << \"not found for task\" << getLabel();\n  return nullptr;\n}\n\nconst MessageDTO *Task::findMessage(const QString &p_id) const {\n  for (const auto &msg : m_dto.messages) {\n    if (msg.id == p_id) {\n      return &msg;\n    }\n  }\n\n  qWarning() << \"message\" << p_id << \"not found for task\" << getLabel();\n  return nullptr;\n}\n\nconst QString &Task::getFile() const { return m_dto._source; }\n\nTask::Task(const QString &p_locale, const QString &p_file, TaskMgr *p_taskMgr, QObject *p_parent)\n    : QObject(p_parent), m_taskMgr(p_taskMgr), m_locale(p_locale) {\n  m_dto._source = p_file;\n  m_dto.version = s_latestVersion;\n  m_dto.type = \"shell\";\n  m_dto.options.shell.executable = ShellExecution::defaultShell();\n\n  // Inherit configuration.\n  m_parent = qobject_cast<Task *>(p_parent);\n  if (m_parent) {\n    m_dto.version = m_parent->m_dto.version;\n    m_dto.type = m_parent->m_dto.type;\n    m_dto.command = m_parent->m_dto.command;\n    m_dto.args = m_parent->m_dto.args;\n    m_dto.options.cwd = m_parent->m_dto.options.cwd;\n    m_dto.options.env = m_parent->m_dto.options.env;\n    m_dto.options.shell.executable = m_parent->m_dto.options.shell.executable;\n    m_dto.options.shell.args = m_parent->m_dto.options.shell.args;\n    // Do not inherit label/inputs/tasks.\n  } else {\n    m_dto.label = QFileInfo(p_file).baseName();\n  }\n}\n\nQProcess *Task::setupProcess() {\n  setCancelled(false);\n\n  auto command = getCommand();\n  if (command.isEmpty()) {\n    return nullptr;\n  }\n\n  QScopedPointer<QProcess> scopedProcess(new QProcess(this));\n\n  auto process = scopedProcess.data();\n  process->setWorkingDirectory(getOptionsCwd());\n\n  const auto &optionsEnv = getOptionsEnv();\n  if (!optionsEnv.isEmpty()) {\n    auto env = QProcessEnvironment::systemEnvironment();\n    for (auto it = optionsEnv.begin(); it != optionsEnv.end(); it++) {\n      env.insert(it.key(), it.value());\n    }\n    process->setProcessEnvironment(env);\n  }\n\n  const auto args = getArgs();\n  const auto &type = getType();\n\n  if (type == \"shell\") {\n    ShellExecution::setupProcess(process, command, args, getOptionsShellExecutable(),\n                                 getOptionsShellArgs());\n  } else if (getType() == \"process\") {\n    process->setProgram(command);\n    process->setArguments(args);\n  }\n\n  if (isCancelled()) {\n    return nullptr;\n  }\n\n  scopedProcess.take();\n\n  connect(process, &QProcess::started, this,\n          [this]() { emit outputRequested(tr(\"[Task (%1) started]\\n\").arg(getLabel())); });\n  connect(process, &QProcess::readyReadStandardOutput, this, [this, process]() {\n    auto text = decodeText(process->readAllStandardOutput());\n    // TODO: interaction with process.\n    emit outputRequested(text);\n  });\n  connect(process, &QProcess::readyReadStandardError, this, [this, process]() {\n    auto text = process->readAllStandardError();\n    emit outputRequested(decodeText(text));\n  });\n  connect(process, &QProcess::errorOccurred, this, [this](QProcess::ProcessError error) {\n    emit outputRequested(tr(\"[Task (%1) error occurred (%2)]\\n\").arg(getLabel()).arg(error));\n  });\n  connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this,\n          [this, process](int exitCode) {\n            emit outputRequested(tr(\"\\n[Task (%1) finished (%2)]\\n\").arg(getLabel()).arg(exitCode));\n            process->deleteLater();\n          });\n\n  return process;\n}\n\nvoid Task::run() {\n  QProcess *process;\n  try {\n    process = setupProcess();\n  } catch (const char *msg) {\n    qWarning() << \"exception while setup process\" << msg;\n    return;\n  }\n\n  if (process) {\n    qDebug() << \"run task\" << process->program() << process->arguments();\n    process->start();\n  }\n}\n\nconst TaskDTO &Task::getDTO() const { return m_dto; }\n\nQString Task::decodeText(const QByteArray &p_text) {\n  static QByteArrayList codecNames = {\"UTF-8\", \"System\", \"UTF-16\", \"GB18030\"};\n\n  for (const auto &name : codecNames) {\n    auto text = decodeText(p_text, name);\n    if (!text.isNull()) {\n      return text;\n    }\n  }\n\n  return QString::fromLocal8Bit(p_text);\n}\n\nQString Task::decodeText(const QByteArray &p_text, const QByteArray &p_name) {\n  auto codec = QTextCodec::codecForName(p_name);\n  if (codec) {\n    QTextCodec::ConverterState state;\n    auto text = codec->toUnicode(p_text.data(), p_text.size(), &state);\n    if (state.invalidChars > 0) {\n      return QString();\n    }\n    return text;\n  }\n  return QString();\n}\n\nQString Task::getLocaleString(const QJsonValue &p_value, const QString &p_locale) {\n  if (p_value.isObject()) {\n    auto obj = p_value.toObject();\n    if (obj.contains(p_locale)) {\n      return obj.value(p_locale).toString();\n    } else {\n      qWarning() << \"value of locale not found\" << p_locale;\n      if (!obj.isEmpty()) {\n        return obj.begin().value().toString();\n      } else {\n        return QString();\n      }\n    }\n  } else {\n    return p_value.toString();\n  }\n}\n\nQStringList Task::getLocaleStringList(const QJsonValue &p_value, const QString &p_locale) {\n  QStringList strs;\n  const auto arr = p_value.toArray();\n  for (int i = 0; i < arr.size(); ++i) {\n    strs << getLocaleString(arr[i], p_locale);\n  }\n  return strs;\n}\n\nQStringList Task::getStringList(const QJsonValue &p_value) {\n  QStringList strs;\n  const auto arr = p_value.toArray();\n  for (int i = 0; i < arr.size(); ++i) {\n    strs << arr[i].toString();\n  }\n  return strs;\n}\n\nconst TaskVariableMgr &Task::variableMgr() const { return m_taskMgr->getVariableMgr(); }\n\nbool Task::isCancelled() const { return m_cancelled; }\n\nvoid Task::setCancelled(bool p_cancelled) { m_cancelled = p_cancelled; }\n"
  },
  {
    "path": "src/task/task.h",
    "content": "#ifndef TASK_H\n#define TASK_H\n\n#include <QObject>\n\n#include <QMap>\n#include <QSharedPointer>\n#include <QVector>\n\nclass QAction;\nclass QProcess;\nclass QJsonObject;\n\nnamespace tests {\nclass TestTask;\n}\n\nnamespace vnotex {\nstruct ButtonDTO {\n  QString text;\n};\n\nstruct InputDTO {\n  QString id;\n\n  QString type;\n\n  QString description;\n\n  QString default_;\n\n  bool password;\n\n  QStringList options;\n};\n\nstruct MessageDTO {\n  QString id;\n\n  QString type;\n\n  QString title;\n\n  QString text;\n\n  QString detailedText;\n\n  QVector<ButtonDTO> buttons;\n};\n\nstruct ShellOptionsDTO {\n  QString executable;\n\n  QStringList args;\n};\n\nstruct TaskOptionsDTO {\n  QString cwd;\n\n  QMap<QString, QString> env;\n\n  ShellOptionsDTO shell;\n};\n\nstruct TaskDTO {\n  QString version;\n\n  QString type;\n\n  QString command;\n\n  QStringList args;\n\n  QString label;\n\n  QString icon;\n\n  QString shortcut;\n\n  QVector<InputDTO> inputs;\n\n  QVector<MessageDTO> messages;\n\n  TaskOptionsDTO options;\n\n  QString _scope;\n\n  QString _source;\n};\n\nclass TaskMgr;\nclass TaskVariableMgr;\n\nclass Task : public QObject {\n  Q_OBJECT\npublic:\n  friend class tests::TestTask;\n\n  // For top level Task, use QSharedPointer instead of QObject to manage ownership.\n  static QSharedPointer<Task> fromFile(const QString &p_file, const QString &p_locale,\n                                       TaskMgr *p_taskMgr);\n\n  void run();\n\n  const TaskDTO &getDTO() const;\n\n  const QString &getVersion() const;\n\n  const QString &getType() const;\n\n  QString getCommand();\n\n  QStringList getArgs();\n\n  const QString &getLabel() const;\n\n  const QString &getIcon() const;\n\n  const QString &getShortcut() const;\n\n  QString getOptionsCwd();\n\n  const QMap<QString, QString> &getOptionsEnv() const;\n\n  const QString &getOptionsShellExecutable() const;\n\n  QStringList getOptionsShellArgs();\n\n  const QVector<Task *> &getChildren() const;\n\n  const QVector<InputDTO> &getInputs() const;\n\n  const InputDTO *findInput(const QString &p_id) const;\n\n  const MessageDTO *findMessage(const QString &p_id) const;\n\n  const QString &getFile() const;\n\n  bool isCancelled() const;\n\n  void setCancelled(bool p_cancelled);\n\n  static QString s_latestVersion;\n\n  static QString getLocaleString(const QJsonValue &p_value, const QString &p_locale);\n\n  static QStringList getLocaleStringList(const QJsonValue &p_value, const QString &p_locale);\n\n  static QStringList getStringList(const QJsonValue &p_value);\n\n  static QString decodeText(const QByteArray &p_text);\n\nsignals:\n  void outputRequested(const QString &p_text) const;\n\nprivate:\n  Task(const QString &p_locale, const QString &p_file, TaskMgr *p_taskMgr,\n       QObject *p_parent = nullptr);\n\n  // Must call start() or delete the returned QProcess.\n  QProcess *setupProcess();\n\n  const TaskVariableMgr &variableMgr() const;\n\n  static bool fromJson(Task *p_task, const QJsonObject &p_obj);\n\n  static bool fromJsonV0(Task *p_task, const QJsonObject &p_obj, bool p_mergeTasks = false);\n\n  static QString decodeText(const QByteArray &p_text, const QByteArray &p_name);\n\n  Task *m_parent = nullptr;\n\n  QVector<Task *> m_children;\n\n  TaskMgr *m_taskMgr = nullptr;\n\n  TaskDTO m_dto;\n\n  QString m_locale;\n\n  bool m_cancelled = false;\n};\n} // namespace vnotex\n\n#endif // TASK_H\n"
  },
  {
    "path": "src/task/taskmgr.cpp",
    "content": "#include \"taskmgr.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QJsonDocument>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/notebookmgr.h>\n#include <core/vnotex.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nTaskMgr::TaskMgr(QObject *p_parent) : QObject(p_parent), m_variableMgr(this) {}\n\nvoid TaskMgr::init() {\n  m_variableMgr.init();\n\n  // Load all tasks and watch the location.\n  loadAllTasks();\n\n  connect(&VNoteX::getInst().getNotebookMgr(), &NotebookMgr::currentNotebookChanged, this,\n          [this]() {\n            loadNotebookTasks();\n            emit tasksUpdated();\n          });\n}\n\nvoid TaskMgr::reload() { loadAllTasks(); }\n\nconst QVector<QSharedPointer<Task>> &TaskMgr::getAppTasks() const { return m_appTasks; }\n\nconst QVector<QSharedPointer<Task>> &TaskMgr::getUserTasks() const { return m_userTasks; }\n\nconst QVector<QSharedPointer<Task>> &TaskMgr::getNotebookTasks() const { return m_notebookTasks; }\n\nQString TaskMgr::getNotebookTaskFolder() {\n  auto nb = VNoteX::getInst().getNotebookMgr().getCurrentNotebook();\n  if (nb) {\n    const auto folderPath = nb->getConfigFolderAbsolutePath();\n    if (!folderPath.isEmpty()) {\n      return PathUtils::concatenateFilePath(folderPath, QStringLiteral(\"tasks\"));\n    }\n  }\n  return QString();\n}\n\nvoid TaskMgr::loadAllTasks() {\n  loadGlobalTasks();\n\n  loadNotebookTasks();\n\n  emit tasksUpdated();\n}\n\nvoid TaskMgr::loadNotebookTasks() { loadTasksFromFolder(m_notebookTasks, getNotebookTaskFolder()); }\n\nvoid TaskMgr::loadGlobalTasks() {\n  loadTasksFromFolder(m_appTasks, ConfigMgr::getInst().getAppTaskFolder());\n  loadTasksFromFolder(m_userTasks, ConfigMgr::getInst().getUserTaskFolder());\n}\n\nvoid TaskMgr::loadTasksFromFolder(QVector<QSharedPointer<Task>> &p_tasks, const QString &p_folder) {\n  qDebug() << \"load tasks from folder\" << p_folder;\n  p_tasks.clear();\n\n  if (p_folder.isEmpty()) {\n    return;\n  }\n\n  const auto taskFiles = FileUtils::entryListRecursively(p_folder, {\"*.json\"}, QDir::Files);\n  for (const auto &file : taskFiles) {\n    auto task = loadTask(file);\n    if (task) {\n      qDebug() << \"loaded task\" << task->getLabel();\n      connect(task.data(), &Task::outputRequested, this, &TaskMgr::taskOutputRequested);\n      p_tasks.append(task);\n    }\n  }\n}\n\nQSharedPointer<Task> TaskMgr::loadTask(const QString &p_taskFile) {\n  const auto localeStr = ConfigMgr::getInst().getCoreConfig().getLocaleToUse();\n  auto task = Task::fromFile(p_taskFile, localeStr, this);\n  return task;\n}\n\nconst TaskVariableMgr &TaskMgr::getVariableMgr() const { return m_variableMgr; }\n"
  },
  {
    "path": "src/task/taskmgr.h",
    "content": "#ifndef TASKMGR_H\n#define TASKMGR_H\n\n#include <QObject>\n#include <core/noncopyable.h>\n\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"task.h\"\n#include \"taskvariablemgr.h\"\n\nnamespace vnotex {\nclass TaskMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  explicit TaskMgr(QObject *p_parent = nullptr);\n\n  // It will be invoked after MainWindow show.\n  void init();\n\n  void reload();\n\n  const QVector<QSharedPointer<Task>> &getAppTasks() const;\n\n  const QVector<QSharedPointer<Task>> &getUserTasks() const;\n\n  const QVector<QSharedPointer<Task>> &getNotebookTasks() const;\n\n  static QString getNotebookTaskFolder();\n\n  const TaskVariableMgr &getVariableMgr() const;\n\nsignals:\n  void tasksUpdated();\n\n  void taskOutputRequested(const QString &p_text) const;\n\nprivate:\n  void loadAllTasks();\n\n  void loadNotebookTasks();\n\n  void loadGlobalTasks();\n\n  void loadTasksFromFolder(QVector<QSharedPointer<Task>> &p_tasks, const QString &p_folder);\n\n  // Return nullptr if not a valid task.\n  QSharedPointer<Task> loadTask(const QString &p_taskFile);\n\n  QVector<QSharedPointer<Task>> m_appTasks;\n\n  QVector<QSharedPointer<Task>> m_userTasks;\n\n  QVector<QSharedPointer<Task>> m_notebookTasks;\n\n  TaskVariableMgr m_variableMgr;\n};\n} // namespace vnotex\n\n#endif // TASKMGR_H\n"
  },
  {
    "path": "src/task/taskvariablemgr.cpp",
    "content": "#include \"taskvariablemgr.h\"\n\n#include <QApplication>\n#include <QInputDialog>\n#include <QProcess>\n#include <QRandomGenerator>\n#include <QRegularExpression>\n#include <QTimeZone>\n\n#include <buffer/buffer.h>\n#include <core/configmgr.h>\n#include <core/exception.h>\n#include <core/mainconfig.h>\n#include <core/notebookmgr.h>\n#include <core/vnotex.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <snippet/snippetmgr.h>\n#include <utils/pathutils.h>\n#include <widgets/dialogs/selectdialog.h>\n#include <widgets/mainwindow.h>\n#include <widgets/viewarea.h>\n#include <widgets/viewwindow.h>\n\n#include \"shellexecution.h\"\n#include \"task.h\"\n#include \"taskmgr.h\"\n\nusing namespace vnotex;\n\nTaskVariable::TaskVariable(const QString &p_name, const Func &p_func)\n    : m_name(p_name), m_func(p_func) {}\n\nQString TaskVariable::evaluate(Task *p_task, const QString &p_value) const {\n  return m_func(p_task, p_value);\n}\n\nconst QString TaskVariableMgr::c_variableSymbolRegExp =\n    QString(R\"(\\$\\{([^${}:]+)(?::([^${}:]+))?\\})\");\n\nTaskVariableMgr::TaskVariableMgr(TaskMgr *p_taskMgr) : m_taskMgr(p_taskMgr) {}\n\nvoid TaskVariableMgr::init() { initVariables(); }\n\nvoid TaskVariableMgr::initVariables() {\n  m_variables.clear();\n\n  m_needUpdateSystemEnvironment = true;\n\n  initNotebookVariables();\n\n  initBufferVariables();\n\n  initTaskVariables();\n\n  initMagicVariables();\n\n  initEnvironmentVariables();\n\n  initConfigVariables();\n\n  initInputVariables();\n\n  initShellVariables();\n}\n\nvoid TaskVariableMgr::initNotebookVariables() {\n  addVariable(\"notebookFolder\", [](Task *, const QString &) {\n    auto notebook = TaskVariableMgr::getCurrentNotebook();\n    if (notebook) {\n      return PathUtils::cleanPath(notebook->getRootFolderAbsolutePath());\n    } else {\n      return QString();\n    }\n  });\n  addVariable(\"notebookFolderName\", [](Task *, const QString &) {\n    auto notebook = TaskVariableMgr::getCurrentNotebook();\n    if (notebook) {\n      return PathUtils::dirName(notebook->getRootFolderPath());\n    } else {\n      return QString();\n    }\n  });\n  addVariable(\"notebookName\", [](Task *, const QString &) {\n    auto notebook = TaskVariableMgr::getCurrentNotebook();\n    if (notebook) {\n      return notebook->getName();\n    } else {\n      return QString();\n    }\n  });\n  addVariable(\"notebookDescription\", [](Task *, const QString &) {\n    auto notebook = TaskVariableMgr::getCurrentNotebook();\n    if (notebook) {\n      return notebook->getDescription();\n    } else {\n      return QString();\n    }\n  });\n}\n\nvoid TaskVariableMgr::initBufferVariables() {\n  addVariable(\"buffer\", [](Task *, const QString &) {\n    auto buffer = getCurrentBuffer();\n    if (buffer) {\n      return PathUtils::cleanPath(buffer->getPath());\n    }\n    return QString();\n  });\n  addVariable(\"bufferNotebookFolder\", [](Task *, const QString &) {\n    auto buffer = getCurrentBuffer();\n    if (buffer) {\n      auto node = buffer->getNode();\n      if (node) {\n        return PathUtils::cleanPath(node->getNotebook()->getRootFolderAbsolutePath());\n      }\n    }\n    return QString();\n  });\n  addVariable(\"bufferRelativePath\", [](Task *, const QString &) {\n    auto buffer = getCurrentBuffer();\n    if (buffer) {\n      auto node = buffer->getNode();\n      if (node) {\n        return PathUtils::cleanPath(node->fetchPath());\n      } else {\n        return PathUtils::cleanPath(buffer->getPath());\n      }\n    }\n    return QString();\n  });\n  addVariable(\"bufferName\", [](Task *, const QString &) {\n    auto buffer = getCurrentBuffer();\n    if (buffer) {\n      return PathUtils::fileName(buffer->getPath());\n    }\n    return QString();\n  });\n  addVariable(\"bufferBaseName\", [](Task *, const QString &) {\n    auto buffer = getCurrentBuffer();\n    if (buffer) {\n      return QFileInfo(buffer->getPath()).completeBaseName();\n    }\n    return QString();\n  });\n  addVariable(\"bufferDir\", [](Task *, const QString &) {\n    auto buffer = getCurrentBuffer();\n    if (buffer) {\n      return PathUtils::parentDirPath(buffer->getPath());\n    }\n    return QString();\n  });\n  addVariable(\"bufferExt\", [](Task *, const QString &) {\n    auto buffer = getCurrentBuffer();\n    if (buffer) {\n      return QFileInfo(buffer->getPath()).suffix();\n    }\n    return QString();\n  });\n  addVariable(\"selectedText\", [](Task *, const QString &) {\n    auto win = getCurrentViewWindow();\n    if (win) {\n      return win->selectedText();\n    }\n    return QString();\n  });\n}\n\nvoid TaskVariableMgr::initTaskVariables() {\n  addVariable(\"cwd\", [](Task *task, const QString &) {\n    return PathUtils::cleanPath(task->getOptionsCwd());\n  });\n  addVariable(\"taskFile\",\n              [](Task *task, const QString &) { return PathUtils::cleanPath(task->getFile()); });\n  addVariable(\"taskDir\", [](Task *task, const QString &) {\n    return PathUtils::parentDirPath(task->getFile());\n  });\n  addVariable(\"exeFile\", [](Task *, const QString &) {\n    return PathUtils::cleanPath(qApp->applicationFilePath());\n  });\n  addVariable(\"pathSeparator\", [](Task *, const QString &) { return QDir::separator(); });\n  addVariable(\"notebookTaskFolder\", [this](Task *, const QString &) {\n    return PathUtils::cleanPath(m_taskMgr->getNotebookTaskFolder());\n  });\n  addVariable(\"userTaskFolder\", [](Task *, const QString &) {\n    return PathUtils::cleanPath(ConfigMgr::getInst().getUserTaskFolder());\n  });\n  addVariable(\"appTaskFolder\", [](Task *, const QString &) {\n    return PathUtils::cleanPath(ConfigMgr::getInst().getAppTaskFolder());\n  });\n  addVariable(\"userThemeFolder\", [](Task *, const QString &) {\n    return PathUtils::cleanPath(ConfigMgr::getInst().getUserThemeFolder());\n  });\n  addVariable(\"appThemeFolder\", [](Task *, const QString &) {\n    return PathUtils::cleanPath(ConfigMgr::getInst().getAppThemeFolder());\n  });\n  addVariable(\"userDocsFolder\", [](Task *, const QString &) {\n    return PathUtils::cleanPath(ConfigMgr::getInst().getUserDocsFolder());\n  });\n  addVariable(\"appDocsFolder\", [](Task *, const QString &) {\n    return PathUtils::cleanPath(ConfigMgr::getInst().getAppDocsFolder());\n  });\n}\n\nvoid TaskVariableMgr::initMagicVariables() {\n  addVariable(\"magic\", [](Task *, const QString &val) {\n    if (val.isEmpty()) {\n      return QString();\n    }\n\n    auto overrides = SnippetMgr::generateOverrides(getCurrentBuffer());\n    return SnippetMgr::getInst().applySnippetBySymbol(SnippetMgr::generateSnippetSymbol(val),\n                                                      overrides);\n  });\n}\n\nvoid TaskVariableMgr::initEnvironmentVariables() {\n  addVariable(\"env\", [this](Task *, const QString &val) {\n    if (val.isEmpty()) {\n      return QString();\n    }\n    if (m_needUpdateSystemEnvironment) {\n      m_needUpdateSystemEnvironment = false;\n      m_systemEnv = QProcessEnvironment::systemEnvironment();\n    }\n    return m_systemEnv.value(val);\n  });\n}\n\nvoid TaskVariableMgr::initConfigVariables() {\n  // ${config:main.core.shortcuts.FullScreen}.\n  addVariable(\"config\", [](Task *, const QString &val) {\n    if (val.isEmpty()) {\n      return QString();\n    }\n    auto jsonVal = ConfigMgr::getInst().parseAndReadConfig(val);\n    switch (jsonVal.type()) {\n    case QJsonValue::Bool:\n      return jsonVal.toBool() ? QStringLiteral(\"1\") : QStringLiteral(\"0\");\n      break;\n\n    case QJsonValue::Double:\n      return QString::number(jsonVal.toDouble());\n      break;\n\n    case QJsonValue::String:\n      return jsonVal.toString();\n      break;\n\n    default:\n      return QString();\n    }\n  });\n}\n\nvoid TaskVariableMgr::initInputVariables() {\n  // ${input:inputId}.\n  addVariable(\"input\", [this](Task *task, const QString &val) {\n    if (val.isEmpty()) {\n      Exception::throwOne(Exception::Type::InvalidArgument,\n                          QStringLiteral(\"task (%1) with empty input id\").arg(task->getLabel()));\n    }\n\n    auto input = task->findInput(val);\n    if (!input) {\n      Exception::throwOne(\n          Exception::Type::InvalidArgument,\n          QStringLiteral(\"task (%1) with invalid input id (%2)\").arg(task->getLabel(), val));\n    }\n\n    if (input->type == \"promptString\") {\n      const auto desc = evaluate(task, input->description);\n      const auto defaultText = evaluate(task, input->default_);\n      QInputDialog dialog(VNoteX::getInst().getMainWindow());\n      dialog.setInputMode(QInputDialog::TextInput);\n      dialog.setTextEchoMode(input->password ? QLineEdit::Password : QLineEdit::Normal);\n      dialog.setWindowTitle(task->getLabel());\n      dialog.setLabelText(desc);\n      dialog.setTextValue(defaultText);\n      if (dialog.exec() == QDialog::Accepted) {\n        return dialog.textValue();\n      } else {\n        task->setCancelled(true);\n        return QString();\n      }\n    } else if (input->type == \"pickString\") {\n      const auto desc = evaluate(task, input->description);\n      SelectDialog dialog(task->getLabel(), desc, VNoteX::getInst().getMainWindow());\n      for (int i = 0; i < input->options.size(); i++) {\n        dialog.addSelection(input->options.at(i), i);\n      }\n\n      if (dialog.exec() == QDialog::Accepted) {\n        int selection = dialog.getSelection();\n        return input->options.at(selection);\n      } else {\n        task->setCancelled(true);\n        return QString();\n      }\n    } else {\n      Exception::throwOne(Exception::Type::InvalidArgument,\n                          QStringLiteral(\"task (%1) with invalid input type (%2)(%3)\")\n                              .arg(task->getLabel(), input->id, input->type));\n    }\n\n    return QString();\n  });\n}\n\nvoid TaskVariableMgr::initShellVariables() {\n  // ${shell:command}.\n  addVariable(\"shell\", [this](Task *task, const QString &val) {\n    QProcess process;\n    process.setWorkingDirectory(task->getOptionsCwd());\n    ShellExecution::setupProcess(&process, val);\n    process.start();\n    const int timeout = 1000;\n    if (!process.waitForStarted(timeout) || !process.waitForFinished(timeout)) {\n      Exception::throwOne(Exception::Type::InvalidArgument,\n                          QStringLiteral(\"task (%1) failed to fetch shell variable (%2)\")\n                              .arg(task->getLabel(), val));\n    }\n    return Task::decodeText(process.readAllStandardOutput());\n  });\n}\n\nvoid TaskVariableMgr::addVariable(const QString &p_name, const TaskVariable::Func &p_func) {\n  Q_ASSERT(!m_variables.contains(p_name));\n\n  m_variables.insert(p_name, TaskVariable(p_name, p_func));\n}\n\nconst ViewWindow *TaskVariableMgr::getCurrentViewWindow() {\n  return VNoteX::getInst().getMainWindow()->getViewArea()->getCurrentViewWindow();\n}\n\nBuffer *TaskVariableMgr::getCurrentBuffer() {\n  auto win = getCurrentViewWindow();\n  if (win) {\n    return win->getBuffer();\n  }\n  return nullptr;\n}\n\nQSharedPointer<Notebook> TaskVariableMgr::getCurrentNotebook() {\n  return VNoteX::getInst().getNotebookMgr().getCurrentNotebook();\n}\n\nQString TaskVariableMgr::evaluate(Task *p_task, const QString &p_text) const {\n  QString content(p_text);\n\n  int maxTimesAtSamePos = 100;\n\n  QRegularExpression regExp(c_variableSymbolRegExp);\n  int pos = 0;\n  while (pos < content.size()) {\n    QRegularExpressionMatch match;\n    int idx = content.indexOf(regExp, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    const auto varName = match.captured(1).trimmed();\n    const auto varValue = match.captured(2).trimmed();\n    auto var = findVariable(varName);\n    if (!var) {\n      // Skip it.\n      pos = idx + match.capturedLength(0);\n      continue;\n    }\n\n    const auto afterText = var->evaluate(p_task, varValue);\n    content.replace(idx, match.capturedLength(0), afterText);\n\n    // @afterText may still contains variable symbol.\n    if (pos == idx) {\n      if (--maxTimesAtSamePos == 0) {\n        break;\n      }\n    } else {\n      maxTimesAtSamePos = 100;\n    }\n    pos = idx;\n  }\n\n  return content;\n}\n\nQStringList TaskVariableMgr::evaluate(Task *p_task, const QStringList &p_texts) const {\n  QStringList strs;\n  for (const auto &str : p_texts) {\n    strs << evaluate(p_task, str);\n  }\n  return strs;\n}\n\nconst TaskVariable *TaskVariableMgr::findVariable(const QString &p_name) const {\n  auto it = m_variables.find(p_name);\n  if (it != m_variables.end()) {\n    return &(it.value());\n  }\n\n  return nullptr;\n}\n\nvoid TaskVariableMgr::overrideVariable(const QString &p_name, const TaskVariable::Func &p_func) {\n  m_variables.insert(p_name, TaskVariable(p_name, p_func));\n}\n"
  },
  {
    "path": "src/task/taskvariablemgr.h",
    "content": "#ifndef TASKVARIABLEMGR_H\n#define TASKVARIABLEMGR_H\n\n#include <core/noncopyable.h>\n\n#include <functional>\n\n#include <QHash>\n#include <QProcessEnvironment>\n#include <QScopedPointer>\n#include <QSharedPointer>\n#include <QString>\n\nnamespace vnotex {\nclass Task;\nclass Notebook;\nclass Buffer;\nclass ViewWindow;\nclass TaskMgr;\n\nclass TaskVariable {\npublic:\n  typedef std::function<QString(Task *, const QString &)> Func;\n\n  TaskVariable(const QString &p_name, const Func &p_func);\n\n  QString evaluate(Task *p_task, const QString &p_value) const;\n\nprivate:\n  QString m_name;\n\n  Func m_func;\n};\n\nclass TaskVariableMgr : private Noncopyable {\npublic:\n  explicit TaskVariableMgr(TaskMgr *p_taskMgr);\n\n  void init();\n\n  QString evaluate(Task *p_task, const QString &p_text) const;\n\n  QStringList evaluate(Task *p_task, const QStringList &p_texts) const;\n\n  // Used for UT.\n  void overrideVariable(const QString &p_name, const TaskVariable::Func &p_func);\n\n  static Buffer *getCurrentBuffer();\n\n  static QSharedPointer<Notebook> getCurrentNotebook();\n\nprivate:\n  void initVariables();\n\n  void initNotebookVariables();\n\n  void initBufferVariables();\n\n  void initTaskVariables();\n\n  void initMagicVariables();\n\n  void initEnvironmentVariables();\n\n  void initConfigVariables();\n\n  void initInputVariables();\n\n  void initShellVariables();\n\n  void addVariable(const QString &p_name, const TaskVariable::Func &p_func);\n\n  const TaskVariable *findVariable(const QString &p_name) const;\n\n  /*\n  QString evaluateInputVariables(const QString &p_text,\n                                 const Task *p_task) const;\n\n  QString evaluateShellVariables(const QString &p_text,\n                                 const Task *p_task) const;\n */\n\n  static const ViewWindow *getCurrentViewWindow();\n\n  TaskMgr *m_taskMgr = nullptr;\n\n  QHash<QString, TaskVariable> m_variables;\n\n  bool m_needUpdateSystemEnvironment = true;\n\n  QProcessEnvironment m_systemEnv;\n\n  // %{name[:value]}%.\n  // Captured texts:\n  // 1 - The name of the variable (trim needed).\n  // 2 - The value option of the variable if available (trim needed).\n  static const QString c_variableSymbolRegExp;\n};\n} // namespace vnotex\n\n#endif // TASKVARIABLEMGR_H\n"
  },
  {
    "path": "src/unitedentry/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    entrypopup.cpp entrypopup.h\n    entrywidgetfactory.cpp entrywidgetfactory.h\n    findunitedentry.cpp findunitedentry.h\n    helpunitedentry.cpp helpunitedentry.h\n    iunitedentry.cpp iunitedentry.h\n    unitedentry.cpp unitedentry.h\n    unitedentryalias.cpp unitedentryalias.h\n    unitedentryhelper.cpp unitedentryhelper.h\n    unitedentrymgr.cpp unitedentrymgr.h\n)\n"
  },
  {
    "path": "src/unitedentry/entrypopup.cpp",
    "content": "#include \"entrypopup.h\"\n\n#include <QDebug>\n#include <QVBoxLayout>\n#include <QWindow>\n\nusing namespace vnotex;\n\nEntryPopup::EntryPopup(QWidget *p_parent) : QFrame(p_parent) {\n  Q_ASSERT(p_parent);\n  auto layout = new QVBoxLayout(this);\n  Q_UNUSED(layout);\n}\n\nEntryPopup::~EntryPopup() {\n  if (m_widget) {\n    takeWidget(m_widget.data());\n  }\n}\n\nvoid EntryPopup::setWidget(const QSharedPointer<QWidget> &p_widget) {\n  if (p_widget == m_widget) {\n    return;\n  }\n\n  if (m_widget) {\n    takeWidget(m_widget.data());\n  }\n\n  m_widget = p_widget;\n  if (m_widget) {\n    layout()->addWidget(m_widget.data());\n    m_widget->show();\n  }\n}\n\nvoid EntryPopup::takeWidget(QWidget *p_widget) {\n  layout()->removeWidget(p_widget);\n  p_widget->hide();\n  p_widget->setParent(nullptr);\n}\n"
  },
  {
    "path": "src/unitedentry/entrypopup.h",
    "content": "#ifndef ENTRYPOPUP_H\n#define ENTRYPOPUP_H\n\n#include <QFrame>\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass EntryPopup : public QFrame {\n  Q_OBJECT\npublic:\n  explicit EntryPopup(QWidget *p_parent = nullptr);\n\n  ~EntryPopup();\n\n  void setWidget(const QSharedPointer<QWidget> &p_widget);\n\nprivate:\n  void takeWidget(QWidget *p_widget);\n\nprivate:\n  QSharedPointer<QWidget> m_widget = nullptr;\n};\n} // namespace vnotex\n\n#endif // ENTRYPOPUP_H\n"
  },
  {
    "path": "src/unitedentry/entrywidgetfactory.cpp",
    "content": "#include \"entrywidgetfactory.h\"\n\n#include <QLabel>\n\n#include <widgets/treewidget.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nQSharedPointer<QTreeWidget> EntryWidgetFactory::createTreeWidget(int p_columnCount) {\n  auto tree = QSharedPointer<TreeWidget>::create(TreeWidget::Flag::EnhancedStyle, nullptr);\n  tree->setColumnCount(p_columnCount);\n  tree->setHeaderHidden(true);\n  TreeWidget::showHorizontalScrollbar(tree.data());\n  return tree;\n}\n\nQSharedPointer<QLabel> EntryWidgetFactory::createLabel(const QString &p_info) {\n  auto label = QSharedPointer<QLabel>::create(p_info, nullptr);\n  label->setAlignment(Qt::AlignTop | Qt::AlignLeft);\n\n  auto fnt = label->font();\n  fnt.setPointSize(fnt.pointSize() + 2);\n  label->setFont(fnt);\n\n  return label;\n}\n"
  },
  {
    "path": "src/unitedentry/entrywidgetfactory.h",
    "content": "#ifndef ENTRYWIDGETFACTORY_H\n#define ENTRYWIDGETFACTORY_H\n\n#include <QSharedPointer>\n\nclass QTreeWidget;\nclass QLabel;\nclass QString;\n\nnamespace vnotex {\nclass EntryWidgetFactory {\npublic:\n  EntryWidgetFactory() = delete;\n\n  static QSharedPointer<QTreeWidget> createTreeWidget(int p_columnCount);\n\n  static QSharedPointer<QLabel> createLabel(const QString &p_info);\n};\n} // namespace vnotex\n\n#endif // ENTRYWIDGETFACTORY_H\n"
  },
  {
    "path": "src/unitedentry/findunitedentry.cpp",
    "content": "#include \"findunitedentry.h\"\n\n#include <QCommandLineOption>\n#include <QDebug>\n#include <QLabel>\n#include <QTimer>\n\n#include \"entrywidgetfactory.h\"\n#include \"unitedentryhelper.h\"\n#include \"unitedentrymgr.h\"\n#include <core/fileopenparameters.h>\n#include <core/vnotex.h>\n#include <search/isearchinfoprovider.h>\n#include <search/searchdata.h>\n#include <search/searcher.h>\n#include <search/searchhelper.h>\n#include <search/searchresultitem.h>\n#include <search/searchtoken.h>\n#include <utils/processutils.h>\n#include <widgets/treewidget.h>\n\nusing namespace vnotex;\n\nFindUnitedEntry::FindUnitedEntry(const QSharedPointer<ISearchInfoProvider> &p_provider,\n                                 UnitedEntryMgr *p_mgr, QObject *p_parent)\n    : IUnitedEntry(\"find\", tr(\"Search for files in notebooks\"), p_mgr, p_parent),\n      m_provider(p_provider) {\n  m_processTimer = new QTimer(this);\n  m_processTimer->setSingleShot(true);\n  m_processTimer->setInterval(500);\n  connect(m_processTimer, &QTimer::timeout, this, &FindUnitedEntry::doProcessInternal);\n}\n\nvoid FindUnitedEntry::initOnFirstProcess() {\n  m_parser.setApplicationDescription(tr(\n      \"Search for files in notebooks with advanced options for scope, object, target and so on.\"));\n\n  m_parser.addPositionalArgument(\"keywords\", tr(\"Keywords to search for.\"));\n\n  QCommandLineOption scopeOpt(\n      {\"s\", \"scope\"}, tr(\"Search scope. Possible values: buffer/folder/notebook/all_notebook.\"),\n      tr(\"search_scope\"), \"notebook\");\n  m_parser.addOption(scopeOpt);\n\n  QCommandLineOption objectOpt({\"b\", \"object\"},\n                               tr(\"Search objects. Possible values: name/content/tag/path.\"),\n                               tr(\"search_objects\"));\n  objectOpt.setDefaultValues({\"name\", \"content\"});\n  m_parser.addOption(objectOpt);\n\n  QCommandLineOption targetOpt({\"t\", \"target\"},\n                               tr(\"Search targets. Possible values: file/folder/notebook.\"),\n                               tr(\"search_targets\"));\n  targetOpt.setDefaultValues({\"file\", \"folder\"});\n  m_parser.addOption(targetOpt);\n\n  QCommandLineOption patternOpt({\"p\", \"pattern\"}, tr(\"Wildcard pattern of files to search.\"),\n                                tr(\"file_pattern\"));\n  m_parser.addOption(patternOpt);\n\n  SearchToken::addSearchOptionsToCommand(&m_parser);\n}\n\nvoid FindUnitedEntry::processInternal(\n    const QString &p_args,\n    const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc) {\n  // Do another timer delay here since it is a very expensive operation.\n  m_processTimer->stop();\n\n  Q_ASSERT(!isOngoing());\n\n  setOngoing(true);\n\n  auto args = ProcessUtils::parseCombinedArgString(p_args);\n  // The parser needs the first arg to be the application name.\n  args.prepend(name());\n  bool ret = m_parser.parse(args);\n  const auto positionalArgs = m_parser.positionalArguments();\n  if (!ret) {\n    auto label = EntryWidgetFactory::createLabel(m_parser.errorText());\n    p_popupWidgetFunc(label);\n    finish();\n    return;\n  }\n  if (positionalArgs.isEmpty()) {\n    auto label = EntryWidgetFactory::createLabel(getHelpText());\n    p_popupWidgetFunc(label);\n    finish();\n    return;\n  }\n\n  auto opt = collectOptions();\n  if (m_searchOption && m_searchOption->strictEquals(*opt)) {\n    // Reuse last result.\n    p_popupWidgetFunc(m_resultTree);\n    finish();\n    return;\n  }\n\n  m_searchOption = opt;\n\n  m_searchTokenOfSession.clear();\n\n  prepareResultTree();\n\n  p_popupWidgetFunc(m_resultTree);\n\n  m_processTimer->start();\n}\n\nQSharedPointer<SearchOption> FindUnitedEntry::collectOptions() const {\n  auto opt = QSharedPointer<SearchOption>::create();\n\n  opt->m_engine = SearchEngine::Internal;\n\n  opt->m_keyword = m_parser.positionalArguments().join(QLatin1Char(' '));\n  Q_ASSERT(!opt->m_keyword.isEmpty());\n\n  opt->m_filePattern = m_parser.value(\"p\");\n\n  {\n    SearchScope scope = SearchScope::CurrentNotebook;\n    const auto scopeStr = m_parser.value(\"s\");\n    if (scopeStr == QStringLiteral(\"buffer\")) {\n      scope = SearchScope::Buffers;\n    } else if (scopeStr == QStringLiteral(\"folder\")) {\n      scope = SearchScope::CurrentFolder;\n    } else if (scopeStr == QStringLiteral(\"notebook\")) {\n      scope = SearchScope::CurrentNotebook;\n    } else if (scopeStr == QStringLiteral(\"all_notebook\")) {\n      scope = SearchScope::AllNotebooks;\n    }\n    opt->m_scope = scope;\n  }\n\n  {\n    SearchObjects objects = SearchObject::ObjectNone;\n    const auto objectStrs = m_parser.values(\"b\");\n    for (const auto &str : objectStrs) {\n      if (str == QStringLiteral(\"name\")) {\n        objects |= SearchObject::SearchName;\n      } else if (str == QStringLiteral(\"content\")) {\n        objects |= SearchObject::SearchContent;\n      } else if (str == QStringLiteral(\"tag\")) {\n        objects |= SearchObject::SearchTag;\n      } else if (str == QStringLiteral(\"path\")) {\n        objects |= SearchObject::SearchPath;\n      }\n    }\n    opt->m_objects = objects;\n  }\n\n  {\n    SearchTargets targets = SearchTarget::TargetNone;\n    auto targetStrs = m_parser.values(\"t\");\n    for (const auto &str : targetStrs) {\n      if (str == QStringLiteral(\"file\")) {\n        targets |= SearchTarget::SearchFile;\n      } else if (str == QStringLiteral(\"folder\")) {\n        targets |= SearchTarget::SearchFolder;\n      } else if (str == QStringLiteral(\"notebook\")) {\n        targets |= SearchTarget::SearchNotebook;\n      }\n    }\n    opt->m_targets = targets;\n  }\n\n  {\n    FindOptions options = FindOption::FindNone;\n    if (m_parser.isSet(\"c\")) {\n      options |= FindOption::CaseSensitive;\n    }\n    if (m_parser.isSet(\"r\")) {\n      options |= FindOption::RegularExpression;\n    }\n    if (m_parser.isSet(\"w\")) {\n      options |= FindOption::WholeWordOnly;\n    }\n    if (m_parser.isSet(\"f\")) {\n      options |= FindOption::FuzzySearch;\n    }\n    opt->m_findOptions = options;\n  }\n\n  return opt;\n}\n\nQString FindUnitedEntry::getHelpText() const {\n  auto text = m_parser.helpText();\n  // Skip the first line containing the application name.\n  return text.mid(text.indexOf('\\n') + 1);\n}\n\nSearcher *FindUnitedEntry::getSearcher() {\n  if (!m_searcher) {\n    m_searcher = new Searcher(this);\n    connect(m_searcher, &Searcher::resultItemAdded, this,\n            [this](const QSharedPointer<SearchResultItem> &p_item) {\n              addLocation(p_item->m_location);\n            });\n    connect(m_searcher, &Searcher::resultItemsAdded, this,\n            [this](const QVector<QSharedPointer<SearchResultItem>> &p_items) {\n              for (const auto &item : p_items) {\n                addLocation(item->m_location);\n              }\n            });\n    connect(m_searcher, &Searcher::finished, this, &FindUnitedEntry::handleSearchFinished);\n  }\n  return m_searcher;\n}\n\nvoid FindUnitedEntry::handleSearchFinished(SearchState p_state) {\n  if (p_state != SearchState::Busy) {\n    getSearcher()->clear();\n    finish();\n  }\n}\n\nvoid FindUnitedEntry::prepareResultTree() {\n  if (!m_resultTree) {\n    m_resultTree = EntryWidgetFactory::createTreeWidget(1);\n    connect(m_resultTree.data(), &QTreeWidget::itemActivated, this,\n            &FindUnitedEntry::handleItemActivated);\n  }\n\n  m_resultTree->clear();\n}\n\nvoid FindUnitedEntry::addLocation(const ComplexLocation &p_location) {\n  auto item = new QTreeWidgetItem(m_resultTree.data());\n  item->setText(0, p_location.m_displayPath);\n  item->setIcon(\n      0, UnitedEntryHelper::itemIcon(UnitedEntryHelper::locationTypeToItemType(p_location.m_type)));\n  item->setData(0, Qt::UserRole, p_location.m_path);\n  item->setToolTip(0, p_location.m_path);\n\n  // Add sub items.\n  for (const auto &line : p_location.m_lines) {\n    auto subItem = new QTreeWidgetItem(item);\n\n    // Truncate the text.\n    if (line.m_text.size() > 500) {\n      subItem->setText(0, line.m_text.left(500));\n    } else {\n      subItem->setText(0, line.m_text);\n    }\n\n    if (!line.m_segments.isEmpty()) {\n      subItem->setData(0, HighlightsRole, QVariant::fromValue(line.m_segments));\n    }\n\n    subItem->setData(0, Qt::UserRole, line.m_lineNumber);\n  }\n\n  if (m_mgr->getExpandAllEnabled()) {\n    item->setExpanded(true);\n  }\n\n  if (m_resultTree->topLevelItemCount() == 1) {\n    m_resultTree->setCurrentItem(item);\n  }\n}\n\nvoid FindUnitedEntry::doProcessInternal() {\n  if (isAskedToStop()) {\n    finish();\n    return;\n  }\n\n  QString msg;\n  auto state = SearchHelper::searchOnProvider(getSearcher(), m_searchOption, m_provider, msg);\n  if (!msg.isEmpty()) {\n    qWarning() << msg;\n  }\n\n  handleSearchFinished(state);\n}\n\nvoid FindUnitedEntry::stop() {\n  IUnitedEntry::stop();\n\n  if (m_processTimer->isActive()) {\n    m_processTimer->stop();\n    // Let it go finished.\n    doProcessInternal();\n  }\n}\n\nvoid FindUnitedEntry::finish() {\n  setOngoing(false);\n  emit finished();\n}\n\nQSharedPointer<QWidget> FindUnitedEntry::currentPopupWidget() const { return m_resultTree; }\n\nvoid FindUnitedEntry::handleItemActivated(QTreeWidgetItem *p_item, int p_column) {\n  Q_UNUSED(p_column);\n\n  if (!m_searchTokenOfSession) {\n    if (m_searchOption->m_objects & SearchObject::SearchContent) {\n      m_searchTokenOfSession = QSharedPointer<SearchToken>::create(getSearcher()->getToken());\n    }\n  }\n\n  // TODO: decode the path of location and handle different types of destination.\n  auto paras = QSharedPointer<FileOpenParameters>::create();\n\n  QString itemPath;\n  auto pa = p_item->parent();\n  if (pa) {\n    itemPath = pa->data(0, Qt::UserRole).toString();\n    paras->m_lineNumber = p_item->data(0, Qt::UserRole).toInt();\n  } else {\n    itemPath = p_item->data(0, Qt::UserRole).toString();\n    // Use the first line number if there is any.\n    if (p_item->childCount() > 0) {\n      auto childItem = p_item->child(0);\n      paras->m_lineNumber = childItem->data(0, Qt::UserRole).toInt();\n    }\n  }\n\n  paras->m_searchToken = m_searchTokenOfSession;\n  emit VNoteX::getInst().openFileRequested(itemPath, paras);\n\n  emit itemActivated(true, false);\n}\n"
  },
  {
    "path": "src/unitedentry/findunitedentry.h",
    "content": "#ifndef FINDUNITEDENTRY_H\n#define FINDUNITEDENTRY_H\n\n#include \"iunitedentry.h\"\n\n#include <QCommandLineParser>\n#include <QSharedPointer>\n\n#include <search/searchdata.h>\n\nclass QTreeWidget;\nclass QTreeWidgetItem;\nclass QTimer;\n\nnamespace vnotex {\nclass Searcher;\nclass ISearchInfoProvider;\nstruct ComplexLocation;\nclass SearchToken;\n\nclass FindUnitedEntry : public IUnitedEntry {\n  Q_OBJECT\npublic:\n  FindUnitedEntry(const QSharedPointer<ISearchInfoProvider> &p_provider, UnitedEntryMgr *p_mgr,\n                  QObject *p_parent = nullptr);\n\n  void stop() Q_DECL_OVERRIDE;\n\n  QSharedPointer<QWidget> currentPopupWidget() const Q_DECL_OVERRIDE;\n\nprotected:\n  void initOnFirstProcess() Q_DECL_OVERRIDE;\n\n  void\n  processInternal(const QString &p_args,\n                  const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc)\n      Q_DECL_OVERRIDE;\n\nprivate:\n  QString getHelpText() const;\n\n  QSharedPointer<SearchOption> collectOptions() const;\n\n  Searcher *getSearcher();\n\n  void handleSearchFinished(SearchState p_state);\n\n  void prepareResultTree();\n\n  void addLocation(const ComplexLocation &p_location);\n\n  void doProcessInternal();\n\n  void finish();\n\n  void handleItemActivated(QTreeWidgetItem *p_item, int p_column);\n\n  QSharedPointer<ISearchInfoProvider> m_provider;\n\n  QCommandLineParser m_parser;\n\n  Searcher *m_searcher = nullptr;\n\n  QSharedPointer<QTreeWidget> m_resultTree;\n\n  QTimer *m_processTimer = nullptr;\n\n  QSharedPointer<SearchOption> m_searchOption;\n\n  QSharedPointer<SearchToken> m_searchTokenOfSession;\n};\n} // namespace vnotex\n\n#endif // FINDUNITEDENTRY_H\n"
  },
  {
    "path": "src/unitedentry/helpunitedentry.cpp",
    "content": "#include \"helpunitedentry.h\"\n\n#include <widgets/treewidget.h>\n\n#include \"entrywidgetfactory.h\"\n\nusing namespace vnotex;\n\nHelpUnitedEntry::HelpUnitedEntry(UnitedEntryMgr *p_mgr, QObject *p_parent)\n    : IUnitedEntry(\"help\", tr(\"Help information about United Entry\"), p_mgr, p_parent) {}\n\nQSharedPointer<QWidget> HelpUnitedEntry::currentPopupWidget() const { return m_infoTree; }\n\nvoid HelpUnitedEntry::initOnFirstProcess() {\n  m_infoTree = EntryWidgetFactory::createTreeWidget(2);\n  m_infoTree->setHeaderHidden(false);\n  m_infoTree->setHeaderLabels(QStringList() << tr(\"Shortcut\") << tr(\"Description\"));\n\n  QVector<QStringList> shortcuts = {{\"Esc/Ctrl+[\", tr(\"Close United Entry\")},\n                                    {\"Up/Ctrl+K\", tr(\"Go to previous item\")},\n                                    {\"Down/Ctrl+J\", tr(\"Go to next item\")},\n                                    {\"Ctrl+L\", tr(\"Go to the item one level up\")},\n                                    {\"Ctrl+I\", tr(\"Expand/Collapse current item\")},\n                                    {\"Ctrl+B\", tr(\"Expand/Collapse all the items\")},\n                                    {\"Enter\", tr(\"Activate current item\")},\n                                    {\"Ctrl+E\", tr(\"Clear the input except the entry name\")},\n                                    {\"Ctrl+F\", tr(\"Select the entry name\")},\n                                    {\"Ctrl+D\", tr(\"Stop current entry\")}};\n  for (const auto &shortcut : shortcuts) {\n    m_infoTree->addTopLevelItem(new QTreeWidgetItem(shortcut));\n  }\n}\n\nvoid HelpUnitedEntry::processInternal(\n    const QString &p_args,\n    const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc) {\n  Q_UNUSED(p_args);\n  p_popupWidgetFunc(m_infoTree);\n}\n"
  },
  {
    "path": "src/unitedentry/helpunitedentry.h",
    "content": "#ifndef HELPUNITEDENTRY_H\n#define HELPUNITEDENTRY_H\n\n#include \"iunitedentry.h\"\n\n#include <QSharedPointer>\n\nclass QTreeWidget;\n\nnamespace vnotex {\nclass HelpUnitedEntry : public IUnitedEntry {\n  Q_OBJECT\npublic:\n  HelpUnitedEntry(UnitedEntryMgr *p_mgr, QObject *p_parent = nullptr);\n\n  QSharedPointer<QWidget> currentPopupWidget() const Q_DECL_OVERRIDE;\n\nprotected:\n  void initOnFirstProcess() Q_DECL_OVERRIDE;\n\n  void\n  processInternal(const QString &p_args,\n                  const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc)\n      Q_DECL_OVERRIDE;\n\nprivate:\n  QSharedPointer<QTreeWidget> m_infoTree;\n};\n} // namespace vnotex\n\n#endif // HELPUNITEDENTRY_H\n"
  },
  {
    "path": "src/unitedentry/iunitedentry.cpp",
    "content": "#include \"iunitedentry.h\"\n\n#include <QCoreApplication>\n#include <QDebug>\n#include <QKeyEvent>\n#include <QWidget>\n\n#include <widgets/treewidget.h>\n\n#include \"unitedentrymgr.h\"\n\nusing namespace vnotex;\n\nIUnitedEntry::IUnitedEntry(const QString &p_name, const QString &p_description,\n                           UnitedEntryMgr *p_mgr, QObject *p_parent)\n    : QObject(p_parent), m_mgr(p_mgr), m_name(p_name), m_description(p_description) {}\n\nconst QString &IUnitedEntry::name() const { return m_name; }\n\nQString IUnitedEntry::description() const { return m_description; }\n\nvoid IUnitedEntry::process(\n    const QString &p_args,\n    const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc) {\n  if (!m_initialized) {\n    m_initialized = true;\n\n    initOnFirstProcess();\n  }\n\n  m_askedToStop.storeRelaxed(0);\n\n  return processInternal(p_args, p_popupWidgetFunc);\n}\n\nvoid IUnitedEntry::stop() { m_askedToStop.storeRelaxed(1); }\n\nbool IUnitedEntry::isAskedToStop() const { return m_askedToStop.loadAcquire() == 1; }\n\nvoid IUnitedEntry::setOngoing(bool p_ongoing) { m_ongoing = p_ongoing; }\n\nbool IUnitedEntry::isOngoing() const { return m_ongoing; }\n\nvoid IUnitedEntry::handleAction(Action p_act) {\n  auto widget = currentPopupWidget();\n  if (!widget) {\n    return;\n  }\n  handleActionCommon(p_act, widget.data());\n}\n\nvoid IUnitedEntry::handleActionCommon(Action p_act, QWidget *p_widget) {\n  switch (p_act) {\n  case Action::NextItem: {\n    auto eve = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);\n    QCoreApplication::postEvent(p_widget, eve);\n    break;\n  }\n\n  case Action::PreviousItem: {\n    auto eve = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);\n    QCoreApplication::postEvent(p_widget, eve);\n    break;\n  }\n\n  case Action::Activate: {\n    auto eve = new QKeyEvent(QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);\n    QCoreApplication::postEvent(p_widget, eve);\n    break;\n  }\n\n  case Action::LevelUp: {\n    auto treeWidget = dynamic_cast<QTreeWidget *>(p_widget);\n    if (treeWidget) {\n      TreeWidget::selectParentItem(treeWidget);\n    }\n    break;\n  }\n\n  case Action::ExpandCollapse: {\n    auto treeWidget = dynamic_cast<QTreeWidget *>(p_widget);\n    if (treeWidget) {\n      auto item = treeWidget->currentItem();\n      if (item) {\n        item->setExpanded(!item->isExpanded());\n      }\n    }\n    break;\n  }\n\n  case Action::ExpandCollapseAll: {\n    auto treeWidget = dynamic_cast<QTreeWidget *>(p_widget);\n    if (treeWidget) {\n      if (TreeWidget::isExpanded(treeWidget)) {\n        treeWidget->collapseAll();\n      } else {\n        treeWidget->expandAll();\n      }\n    }\n    break;\n  }\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n}\n\nbool IUnitedEntry::isAliasOf(const IUnitedEntry *p_entry) const {\n  Q_UNUSED(p_entry);\n  return false;\n}\n"
  },
  {
    "path": "src/unitedentry/iunitedentry.h",
    "content": "#ifndef IUNITEDENTRY_H\n#define IUNITEDENTRY_H\n\n#include <QObject>\n\n#include <functional>\n\n#include <QAtomicInt>\n\nnamespace vnotex {\nclass UnitedEntryMgr;\n\n// Interface of a UnitedEntry.\nclass IUnitedEntry : public QObject {\n  Q_OBJECT\npublic:\n  enum class Action {\n    NextItem,\n    PreviousItem,\n    Activate,\n    LevelUp,\n    ExpandCollapse,\n    ExpandCollapseAll\n  };\n\n  IUnitedEntry(const QString &p_name, const QString &p_description, UnitedEntryMgr *p_mgr,\n               QObject *p_parent = nullptr);\n\n  const QString &name() const;\n\n  virtual QString description() const;\n\n  void process(const QString &p_args,\n               const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc);\n\n  virtual bool isOngoing() const;\n\n  virtual void stop();\n\n  virtual void handleAction(Action p_act);\n\n  virtual QSharedPointer<QWidget> currentPopupWidget() const = 0;\n\n  virtual bool isAliasOf(const IUnitedEntry *p_entry) const;\n\n  static void handleActionCommon(Action p_act, QWidget *p_widget);\n\nsignals:\n  void finished();\n\n  void itemActivated(bool p_quit, bool p_restoreFocus);\n\nprotected:\n  virtual void initOnFirstProcess() = 0;\n\n  virtual void processInternal(\n      const QString &p_args,\n      const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc) = 0;\n\n  bool isAskedToStop() const;\n\n  virtual void setOngoing(bool p_ongoing);\n\n  UnitedEntryMgr *m_mgr = nullptr;\n\nprivate:\n  bool m_initialized = false;\n\n  QString m_name;\n\n  QString m_description;\n\n  QAtomicInt m_askedToStop = 0;\n\n  bool m_ongoing = false;\n};\n} // namespace vnotex\n\n#endif // IUNITEDENTRY_H\n"
  },
  {
    "path": "src/unitedentry/unitedentry.cpp",
    "content": "#include \"unitedentry.h\"\n\n#include <QAction>\n#include <QApplication>\n#include <QDebug>\n#include <QFocusEvent>\n#include <QFont>\n#include <QKeySequence>\n#include <QLabel>\n#include <QMainWindow>\n#include <QMenu>\n#include <QShortcut>\n#include <QSizePolicy>\n#include <QTimer>\n#include <QTreeWidget>\n#include <QVBoxLayout>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <core/widgetconfig.h>\n#include <utils/iconutils.h>\n#include <utils/widgetutils.h>\n#include <widgets/lineeditwithsnippet.h>\n#include <widgets/propertydefs.h>\n#include <widgets/widgetsfactory.h>\n\n#include \"entrypopup.h\"\n#include \"entrywidgetfactory.h\"\n#include \"iunitedentry.h\"\n#include \"unitedentryhelper.h\"\n#include \"unitedentrymgr.h\"\n\nusing namespace vnotex;\n\nUnitedEntry::UnitedEntry(QMainWindow *p_mainWindow)\n    : QFrame(p_mainWindow), m_mainWindow(p_mainWindow) {\n  m_processTimer = new QTimer(this);\n  m_processTimer->setSingleShot(true);\n  m_processTimer->setInterval(300);\n  connect(m_processTimer, &QTimer::timeout, this, &UnitedEntry::processInput);\n\n  setupUI();\n\n#if defined(Q_OS_MACOS) || defined(Q_OS_MAC)\n  setWindowFlags(Qt::Tool | Qt::NoDropShadowWindowHint);\n  setWindowModality(Qt::ApplicationModal);\n#else\n  setWindowFlags(Qt::ToolTip);\n#endif\n\n  connect(qApp, &QApplication::focusChanged, this, &UnitedEntry::handleFocusChanged);\n\n  connect(&UnitedEntryMgr::getInst(), &UnitedEntryMgr::entryFinished, this,\n          &UnitedEntry::handleEntryFinished);\n  connect(&UnitedEntryMgr::getInst(), &UnitedEntryMgr::entryItemActivated, this,\n          &UnitedEntry::handleEntryItemActivated);\n}\n\nUnitedEntry::~UnitedEntry() {}\n\nvoid UnitedEntry::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n\n  // Line edit.\n  m_lineEdit = WidgetsFactory::createLineEditWithSnippet(this);\n  mainLayout->addWidget(m_lineEdit);\n  m_lineEdit->setPlaceholderText(tr(\"Type to command\"));\n  m_lineEdit->setClearButtonEnabled(true);\n  m_lineEdit->installEventFilter(this);\n  connect(m_lineEdit, &QLineEdit::textChanged, m_processTimer, QOverload<>::of(&QTimer::start));\n  setFocusProxy(m_lineEdit);\n\n  setupActions();\n\n  // Popup.\n  m_popup = new EntryPopup(this);\n  mainLayout->addWidget(m_popup);\n  m_popup->installEventFilter(this);\n\n  hide();\n}\n\nQString UnitedEntry::getTriggerActionText() const { return tr(\"United Entry\"); }\n\nQAction *UnitedEntry::getTriggerAction() {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const auto fg = themeMgr.paletteColor(\"widgets#unitedentry#icon#fg\");\n\n  const auto icon = IconUtils::fetchIcon(themeMgr.getIconFile(\"united_entry.svg\"), fg);\n  auto act = new QAction(icon, getTriggerActionText(), this);\n  connect(act, &QAction::triggered, this, &UnitedEntry::activateUnitedEntry);\n\n  const auto shortcut =\n      ConfigMgr::getInst().getCoreConfig().getShortcut(CoreConfig::Shortcut::UnitedEntry);\n  WidgetUtils::addActionShortcut(act, shortcut, Qt::ApplicationShortcut);\n\n  return act;\n}\n\nvoid UnitedEntry::setupActions() {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const auto fg = themeMgr.paletteColor(\"widgets#unitedentry#icon#fg\");\n  const auto busyFg = themeMgr.paletteColor(\"widgets#unitedentry#icon#busy#fg\");\n\n  // Menu.\n  const auto menuIcon = IconUtils::fetchIcon(themeMgr.getIconFile(\"menu.svg\"), fg);\n  m_menuIconAction = m_lineEdit->addAction(menuIcon, QLineEdit::ActionPosition::TrailingPosition);\n  m_menuIconAction->setText(tr(\"Options\"));\n\n  auto menu = WidgetsFactory::createMenu(this);\n  m_menuIconAction->setMenu(menu);\n\n  {\n    auto expandAct = menu->addAction(tr(\"Expand All\"), this, [](bool checked) {\n      ConfigMgr::getInst().getWidgetConfig().setUnitedEntryExpandAllEnabled(checked);\n      UnitedEntryMgr::getInst().setExpandAllEnabled(checked);\n    });\n    expandAct->setCheckable(true);\n    expandAct->setChecked(ConfigMgr::getInst().getWidgetConfig().getUnitedEntryExpandAllEnabled());\n    UnitedEntryMgr::getInst().setExpandAllEnabled(expandAct->isChecked());\n  }\n\n  connect(m_menuIconAction, &QAction::triggered, this, [this]() {\n    const auto pos = QCursor::pos();\n    auto menu = m_menuIconAction->menu();\n    menu->exec(pos);\n  });\n\n  // Busy.\n  const auto busyIcon = IconUtils::fetchIcon(themeMgr.getIconFile(\"busy.svg\"), busyFg);\n  m_busyIconAction = m_lineEdit->addAction(busyIcon, QLineEdit::ActionPosition::TrailingPosition);\n  m_busyIconAction->setText(tr(\"Busy\"));\n  m_busyIconAction->setVisible(false);\n}\n\nvoid UnitedEntry::activateUnitedEntry() {\n  if (m_activated) {\n    return;\n  }\n\n  if (!UnitedEntryMgr::getInst().isInitialized()) {\n    return;\n  }\n\n  m_activated = true;\n\n  m_previousFocusWidget = QApplication::focusWidget();\n\n  show();\n\n  m_processTimer->stop();\n  processInput();\n\n  m_lineEdit->selectAll();\n  m_lineEdit->setFocus();\n}\n\nvoid UnitedEntry::deactivateUnitedEntry() {\n  if (!m_activated) {\n    return;\n  }\n\n  m_activated = false;\n  m_previousFocusWidget = nullptr;\n\n  hide();\n}\n\nbool UnitedEntry::handleLineEditKeyPress(QKeyEvent *p_event) {\n  const int key = p_event->key();\n  const int modifiers = p_event->modifiers();\n  IUnitedEntry::Action act = IUnitedEntry::Action::NextItem;\n  switch (key) {\n  case Qt::Key_BracketLeft:\n    if (!WidgetUtils::isViControlModifier(modifiers)) {\n      break;\n    }\n    Q_FALLTHROUGH();\n  case Qt::Key_Escape:\n    exitUnitedEntry();\n    return true;\n\n  // Up/Down Ctrl+K/J to navigate to previous/next item.\n  case Qt::Key_Up:\n    act = IUnitedEntry::Action::PreviousItem;\n    Q_FALLTHROUGH();\n  case Qt::Key_Down:\n    if (m_lastEntry) {\n      m_lastEntry->handleAction(act);\n    } else if (m_entryListWidget && m_entryListWidget->isVisible()) {\n      IUnitedEntry::handleActionCommon(act, m_entryListWidget.data());\n    }\n    return true;\n\n  case Qt::Key_K:\n    act = IUnitedEntry::Action::PreviousItem;\n    Q_FALLTHROUGH();\n  case Qt::Key_J:\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      if (m_lastEntry) {\n        m_lastEntry->handleAction(act);\n      } else if (m_entryListWidget && m_entryListWidget->isVisible()) {\n        IUnitedEntry::handleActionCommon(act, m_entryListWidget.data());\n      }\n      return true;\n    }\n    break;\n\n  case Qt::Key_Enter:\n    Q_FALLTHROUGH();\n  case Qt::Key_Return:\n    if (m_lastEntry) {\n      m_lastEntry->handleAction(IUnitedEntry::Action::Activate);\n    }\n    return true;\n\n  case Qt::Key_E:\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      // Eliminate input till the entry name.\n      const auto text = m_lineEdit->evaluatedText();\n      const auto entry = UnitedEntryHelper::parseUserEntry(text);\n      if (!entry.m_name.isEmpty()) {\n        m_lineEdit->setText(entry.m_name + QLatin1Char(' '));\n      }\n      return true;\n    }\n    break;\n\n  case Qt::Key_F:\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      // Select the entry name.\n      const auto text = m_lineEdit->evaluatedText();\n      const auto entry = UnitedEntryHelper::parseUserEntry(text);\n      if (!entry.m_name.isEmpty()) {\n        m_lineEdit->setSelection(0, entry.m_name.size());\n      }\n      return true;\n    }\n    break;\n\n  case Qt::Key_D:\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      // Stop the entry.\n      if (m_lastEntry) {\n        m_lastEntry->stop();\n      }\n      return true;\n    }\n    break;\n\n  case Qt::Key_L:\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      // Go up one level.\n      if (m_lastEntry) {\n        m_lastEntry->handleAction(IUnitedEntry::Action::LevelUp);\n      }\n      return true;\n    }\n    break;\n\n  case Qt::Key_I:\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      // Expand/Collapse the item.\n      if (m_lastEntry) {\n        m_lastEntry->handleAction(IUnitedEntry::Action::ExpandCollapse);\n      }\n      return true;\n    }\n    break;\n\n  case Qt::Key_B:\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      // Expand/Collapse all the items.\n      if (m_lastEntry) {\n        m_lastEntry->handleAction(IUnitedEntry::Action::ExpandCollapseAll);\n      }\n      return true;\n    }\n    break;\n\n  default:\n    break;\n  }\n\n  return false;\n}\n\nvoid UnitedEntry::clear() {\n  m_lineEdit->clear();\n  m_lineEdit->setFocus();\n}\n\nvoid UnitedEntry::processInput() {\n  m_hasPending = false;\n\n  if (!m_activated) {\n    return;\n  }\n\n  if (m_lastEntry && m_lastEntry->isOngoing()) {\n    m_hasPending = true;\n    m_lastEntry->stop();\n    return;\n  }\n\n  const auto text = m_lineEdit->evaluatedText();\n  const auto entry = UnitedEntryHelper::parseUserEntry(text);\n  if (entry.m_name.isEmpty()) {\n    filterEntryListWidgetEntries(entry.m_name);\n    popupWidget(getEntryListWidget());\n    m_lastEntry.clear();\n    return;\n  }\n\n  // Filter the help widget if space after entry name is not entered yet.\n  if (entry.m_name == text.trimmed() && !text.back().isSpace()) {\n    if (filterEntryListWidgetEntries(entry.m_name)) {\n      popupWidget(getEntryListWidget());\n      m_lastEntry.clear();\n      return;\n    }\n  } else {\n    if (!m_lastEntry || m_lastEntry->name() == entry.m_name) {\n      m_lastEntry = UnitedEntryMgr::getInst().findEntry(entry.m_name);\n    }\n\n    if (m_lastEntry) {\n      // Found.\n      setBusy(true);\n      m_lastEntry->process(entry.m_args,\n                           std::bind(&UnitedEntry::popupWidget, this, std::placeholders::_1));\n      return;\n    }\n  }\n\n  // No entry found.\n  popupWidget(getInfoWidget(tr(\"Unknown entry: %1\").arg(entry.m_name)));\n  m_lastEntry.clear();\n}\n\nvoid UnitedEntry::popupWidget(const QSharedPointer<QWidget> &p_widget) {\n  m_popup->setWidget(p_widget);\n\n  m_lineEdit->setFocus();\n}\n\nconst QSharedPointer<QTreeWidget> &UnitedEntry::getEntryListWidget() {\n  if (!m_entryListWidget) {\n    m_entryListWidget = EntryWidgetFactory::createTreeWidget(2);\n    m_entryListWidget->setHeaderHidden(false);\n    m_entryListWidget->setHeaderLabels(QStringList() << tr(\"Entry\") << tr(\"Description\"));\n\n    const auto entries = UnitedEntryMgr::getInst().getEntries();\n    for (const auto &entry : entries) {\n      m_entryListWidget->addTopLevelItem(\n          new QTreeWidgetItem({entry->name(), entry->description()}));\n    }\n  }\n\n  return m_entryListWidget;\n}\n\nQSharedPointer<QLabel> UnitedEntry::getInfoWidget(const QString &p_info) {\n  return EntryWidgetFactory::createLabel(p_info);\n}\n\nbool UnitedEntry::filterEntryListWidgetEntries(const QString &p_name) {\n  const auto &entryListWidget = getEntryListWidget();\n\n  if (p_name.isEmpty()) {\n    for (int i = 0; i < entryListWidget->topLevelItemCount(); ++i) {\n      entryListWidget->topLevelItem(i)->setHidden(false);\n    }\n    return true;\n  }\n\n  auto items = entryListWidget->findItems(p_name, Qt::MatchStartsWith);\n  for (int i = 0; i < entryListWidget->topLevelItemCount(); ++i) {\n    entryListWidget->topLevelItem(i)->setHidden(true);\n  }\n  for (const auto &item : items) {\n    item->setHidden(false);\n  }\n  return !items.isEmpty();\n}\n\nvoid UnitedEntry::handleEntryFinished(IUnitedEntry *p_entry) {\n  if (p_entry != m_lastEntry.data()) {\n    return;\n  }\n\n  setBusy(false);\n\n  if (m_hasPending) {\n    m_processTimer->start();\n  }\n}\n\nvoid UnitedEntry::handleEntryItemActivated(IUnitedEntry *p_entry, bool p_quit,\n                                           bool p_restoreFocus) {\n  if (p_entry != m_lastEntry.data()) {\n    return;\n  }\n\n  if (p_quit) {\n    if (p_restoreFocus) {\n      exitUnitedEntry();\n    } else {\n      deactivateUnitedEntry();\n    }\n  }\n}\n\nvoid UnitedEntry::setBusy(bool p_busy) { m_busyIconAction->setVisible(p_busy); }\n\nbool UnitedEntry::eventFilter(QObject *p_watched, QEvent *p_event) {\n  if (p_watched == m_popup) {\n    if (p_event->type() == QEvent::KeyPress) {\n      auto eve = static_cast<QKeyEvent *>(p_event);\n      switch (eve->key()) {\n      case Qt::Key_BracketLeft:\n        if (!WidgetUtils::isViControlModifier(eve->modifiers())) {\n          break;\n        }\n        Q_FALLTHROUGH();\n      case Qt::Key_Escape:\n        exitUnitedEntry();\n        return true;\n\n      default:\n        break;\n      }\n    }\n  } else if (p_watched == m_lineEdit) {\n    if (p_event->type() == QEvent::KeyPress) {\n      auto eve = static_cast<QKeyEvent *>(p_event);\n      if (handleLineEditKeyPress(eve)) {\n        return true;\n      }\n    }\n  }\n\n  return QFrame::eventFilter(p_watched, p_event);\n}\n\nvoid UnitedEntry::exitUnitedEntry() {\n  if (m_previousFocusWidget) {\n    // Deactivate and focus previous widget.\n    m_previousFocusWidget->setFocus();\n  } else {\n    m_mainWindow->setFocus();\n  }\n  deactivateUnitedEntry();\n}\n\nvoid UnitedEntry::showEvent(QShowEvent *p_event) {\n  QFrame::showEvent(p_event);\n\n  // Fix input method issue.\n  activateWindow();\n\n  m_lineEdit->setFocus();\n\n  updateGeometryToContents();\n}\n\nvoid UnitedEntry::updateGeometryToContents() {\n  adjustSize();\n\n  const auto winSize = m_mainWindow->size();\n  const auto sz = preferredSize();\n  auto pos = parentWidget()->mapToGlobal(\n      QPoint((winSize.width() - sz.width()) / 2, (winSize.height() - sz.height()) / 2));\n  setGeometry(QRect(pos, preferredSize()));\n}\n\nQSize UnitedEntry::preferredSize() const {\n  const int minWidth = 400;\n  const int minHeight = 300;\n\n  const auto winSize = m_mainWindow->size();\n  int w = minWidth;\n  int h = sizeHint().height();\n  w = qMax(w, qMin(winSize.width() / 2, 900));\n  h = qMax(h, qMin(winSize.height() - 300, 800));\n  return QSize(qMax(minWidth, w), qMax(h, minHeight));\n}\n\nvoid UnitedEntry::handleFocusChanged(QWidget *p_old, QWidget *p_now) {\n  Q_UNUSED(p_old);\n  if (m_activated && (!p_now || (p_now != this && !WidgetUtils::isOrAncestorOf(this, p_now)))) {\n    deactivateUnitedEntry();\n  }\n}\n"
  },
  {
    "path": "src/unitedentry/unitedentry.h",
    "content": "#ifndef UNITEDENTRY_H\n#define UNITEDENTRY_H\n\n#include <QFrame>\n#include <QSharedPointer>\n\nclass QAction;\nclass QTimer;\nclass QTreeWidget;\nclass QLabel;\nclass QMainWindow;\n\nnamespace vnotex {\nclass LineEditWithSnippet;\nclass EntryPopup;\nclass IUnitedEntry;\n\nclass UnitedEntry : public QFrame {\n  Q_OBJECT\npublic:\n  explicit UnitedEntry(QMainWindow *p_mainWindow);\n\n  ~UnitedEntry();\n\n  bool eventFilter(QObject *p_watched, QEvent *p_event) Q_DECL_OVERRIDE;\n\n  QAction *getTriggerAction();\n\n  QString getTriggerActionText() const;\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupActions();\n\n  void activateUnitedEntry();\n\n  void deactivateUnitedEntry();\n\n  void clear();\n\n  void processInput();\n\n  void handleFocusChanged(QWidget *p_old, QWidget *p_now);\n\n  const QSharedPointer<QTreeWidget> &getEntryListWidget();\n\n  QSharedPointer<QLabel> getInfoWidget(const QString &p_info);\n\n  void popupWidget(const QSharedPointer<QWidget> &p_widget);\n\n  // Return true if there is any entry visible.\n  bool filterEntryListWidgetEntries(const QString &p_name);\n\n  void handleEntryFinished(IUnitedEntry *p_entry);\n\n  void handleEntryItemActivated(IUnitedEntry *p_entry, bool p_quit, bool p_restoreFocus);\n\n  void setBusy(bool p_busy);\n\n  void exitUnitedEntry();\n\n  void updateGeometryToContents();\n\n  QSize preferredSize() const;\n\n  // Return true if want to stop the propogation.\n  bool handleLineEditKeyPress(QKeyEvent *p_event);\n\n  QMainWindow *m_mainWindow = nullptr;\n\n  LineEditWithSnippet *m_lineEdit = nullptr;\n\n  EntryPopup *m_popup = nullptr;\n\n  QAction *m_menuIconAction = nullptr;\n\n  QAction *m_busyIconAction = nullptr;\n\n  bool m_activated = false;\n\n  QWidget *m_previousFocusWidget = nullptr;\n\n  QTimer *m_processTimer = nullptr;\n\n  QSharedPointer<QTreeWidget> m_entryListWidget = nullptr;\n\n  QSharedPointer<IUnitedEntry> m_lastEntry;\n\n  bool m_hasPending = false;\n};\n} // namespace vnotex\n\n#endif // UNITEDENTRY_H\n"
  },
  {
    "path": "src/unitedentry/unitedentryalias.cpp",
    "content": "#include \"unitedentryalias.h\"\n\n#include <QDebug>\n#include <QLabel>\n\n#include \"entrywidgetfactory.h\"\n#include \"unitedentrymgr.h\"\n\nusing namespace vnotex;\n\nUnitedEntryAlias::UnitedEntryAlias(const QString &p_name, const QString &p_description,\n                                   const QString &p_value, UnitedEntryMgr *p_mgr, QObject *p_parent)\n    : IUnitedEntry(p_name, p_description, p_mgr, p_parent), m_value(p_value) {\n  m_alias = UnitedEntryHelper::parseUserEntry(m_value);\n}\n\nUnitedEntryAlias::UnitedEntryAlias(const QJsonObject &p_obj, UnitedEntryMgr *p_mgr,\n                                   QObject *p_parent)\n    : UnitedEntryAlias(p_obj[QStringLiteral(\"name\")].toString(),\n                       p_obj[QStringLiteral(\"description\")].toString(),\n                       p_obj[QStringLiteral(\"value\")].toString(), p_mgr, p_parent) {}\n\nQString UnitedEntryAlias::description() const {\n  return tr(\"[Alias] \") + IUnitedEntry::description();\n}\n\nQJsonObject UnitedEntryAlias::toJson() const {\n  QJsonObject obj;\n  obj[QStringLiteral(\"name\")] = name();\n  obj[QStringLiteral(\"description\")] = description();\n  obj[QStringLiteral(\"value\")] = m_value;\n  return obj;\n}\n\nvoid UnitedEntryAlias::initOnFirstProcess() {\n  m_realEntry = m_mgr->findEntry(m_alias.m_name).data();\n  if (!m_realEntry) {\n    qWarning() << \"invalid UnitedEntry alias\" << name() << m_value;\n  } else {\n    connect(m_realEntry, &IUnitedEntry::finished, this, &IUnitedEntry::finished);\n    connect(m_realEntry, &IUnitedEntry::itemActivated, this, &IUnitedEntry::itemActivated);\n  }\n}\n\nvoid UnitedEntryAlias::processInternal(\n    const QString &p_args,\n    const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc) {\n  if (!m_realEntry) {\n    auto label = EntryWidgetFactory::createLabel(tr(\"Invalid United Entry alias: %1\").arg(m_value));\n    p_popupWidgetFunc(label);\n    emit finished();\n    return;\n  }\n\n  m_realEntry->process(m_alias.m_args + \" \" + p_args, p_popupWidgetFunc);\n}\n\nbool UnitedEntryAlias::isOngoing() const {\n  if (m_realEntry) {\n    return m_realEntry->isOngoing();\n  }\n  return false;\n}\n\nvoid UnitedEntryAlias::setOngoing(bool p_ongoing) {\n  Q_UNUSED(p_ongoing);\n  Q_ASSERT(false);\n}\n\nvoid UnitedEntryAlias::handleAction(Action p_act) {\n  if (m_realEntry) {\n    m_realEntry->handleAction(p_act);\n  }\n}\n\nQSharedPointer<QWidget> UnitedEntryAlias::currentPopupWidget() const {\n  if (m_realEntry) {\n    return m_realEntry->currentPopupWidget();\n  }\n\n  return nullptr;\n}\n\nbool UnitedEntryAlias::isAliasOf(const IUnitedEntry *p_entry) const {\n  return p_entry == m_realEntry;\n}\n"
  },
  {
    "path": "src/unitedentry/unitedentryalias.h",
    "content": "#ifndef UNITEDENTRYALIAS_H\n#define UNITEDENTRYALIAS_H\n\n#include \"iunitedentry.h\"\n\n#include <QJsonObject>\n\n#include \"unitedentryhelper.h\"\n\nnamespace vnotex {\nclass UnitedEntryMgr;\n\n// UnitedEntry which points to another UnitedEntry.\nclass UnitedEntryAlias : public IUnitedEntry {\n  Q_OBJECT\npublic:\n  UnitedEntryAlias(const QString &p_name, const QString &p_description, const QString &p_value,\n                   UnitedEntryMgr *p_mgr, QObject *p_parent = nullptr);\n\n  UnitedEntryAlias(const QJsonObject &p_obj, UnitedEntryMgr *p_mgr, QObject *p_parent = nullptr);\n\n  QJsonObject toJson() const;\n\n  QString description() const Q_DECL_OVERRIDE;\n\n  bool isOngoing() const Q_DECL_OVERRIDE;\n\n  void handleAction(Action p_act) Q_DECL_OVERRIDE;\n\n  QSharedPointer<QWidget> currentPopupWidget() const Q_DECL_OVERRIDE;\n\n  bool isAliasOf(const IUnitedEntry *p_entry) const Q_DECL_OVERRIDE;\n\nprotected:\n  void initOnFirstProcess() Q_DECL_OVERRIDE;\n\n  void\n  processInternal(const QString &p_args,\n                  const std::function<void(const QSharedPointer<QWidget> &)> &p_popupWidgetFunc)\n      Q_DECL_OVERRIDE;\n\n  void setOngoing(bool p_ongoing) Q_DECL_OVERRIDE;\n\nprivate:\n  QString m_value;\n\n  UnitedEntryHelper::UserEntry m_alias;\n\n  IUnitedEntry *m_realEntry = nullptr;\n};\n} // namespace vnotex\n\n#endif // UNITEDENTRYALIAS_H\n"
  },
  {
    "path": "src/unitedentry/unitedentryhelper.cpp",
    "content": "#include \"unitedentryhelper.h\"\n\n#include <QIcon>\n\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n\nusing namespace vnotex;\n\nUnitedEntryHelper::UserEntry UnitedEntryHelper::parseUserEntry(const QString &p_text) {\n  UserEntry entry;\n\n  const auto text = p_text.trimmed();\n\n  if (text.isEmpty()) {\n    return entry;\n  }\n\n  int idx = text.indexOf(QLatin1Char(' '));\n  if (idx == -1) {\n    entry.m_name = text.toLower();\n  } else {\n    entry.m_name = text.left(idx).toLower();\n    entry.m_args = text.mid(idx).trimmed();\n  }\n\n  return entry;\n}\n\nconst QIcon &UnitedEntryHelper::itemIcon(ItemType p_type) {\n  static QIcon icons[ItemType::MaxItemType];\n\n  if (icons[0].isNull()) {\n    // Init.\n    const QString nodeIconFgName = \"base#icon#fg\";\n    const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n    const auto fg = themeMgr.paletteColor(nodeIconFgName);\n\n    icons[ItemType::Buffer] = IconUtils::fetchIcon(themeMgr.getIconFile(\"buffer.svg\"), fg);\n    icons[ItemType::File] = IconUtils::fetchIcon(themeMgr.getIconFile(\"file_node.svg\"), fg);\n    icons[ItemType::Folder] = IconUtils::fetchIcon(themeMgr.getIconFile(\"folder_node.svg\"), fg);\n    icons[ItemType::Notebook] =\n        IconUtils::fetchIcon(themeMgr.getIconFile(\"notebook_default.svg\"), fg);\n    icons[ItemType::Other] = IconUtils::fetchIcon(themeMgr.getIconFile(\"other_item.svg\"), fg);\n  }\n\n  return icons[p_type];\n}\n\nUnitedEntryHelper::ItemType UnitedEntryHelper::locationTypeToItemType(LocationType p_type) {\n  switch (p_type) {\n  case LocationType::Buffer:\n    return ItemType::Buffer;\n\n  case LocationType::File:\n    return ItemType::File;\n\n  case LocationType::Folder:\n    return ItemType::Folder;\n\n  case LocationType::Notebook:\n    return ItemType::Notebook;\n\n  default:\n    return ItemType::Other;\n  }\n}\n"
  },
  {
    "path": "src/unitedentry/unitedentryhelper.h",
    "content": "#ifndef UNITEDENTRYHELPER_H\n#define UNITEDENTRYHELPER_H\n\n#include <QString>\n\n#include <core/location.h>\n\nclass QIcon;\n\nnamespace vnotex {\nclass UnitedEntryHelper {\npublic:\n  struct UserEntry {\n    QString m_name;\n\n    QString m_args;\n  };\n\n  enum ItemType { Buffer, File, Folder, Notebook, Other, MaxItemType };\n\n  UnitedEntryHelper() = delete;\n\n  static UserEntry parseUserEntry(const QString &p_text);\n\n  static const QIcon &itemIcon(ItemType p_type);\n\n  static ItemType locationTypeToItemType(LocationType p_type);\n};\n\n} // namespace vnotex\n\n#endif // UNITEDENTRYHELPER_H\n"
  },
  {
    "path": "src/unitedentry/unitedentrymgr.cpp",
    "content": "#include \"unitedentrymgr.h\"\n\n#include \"findunitedentry.h\"\n#include \"helpunitedentry.h\"\n#include \"unitedentryalias.h\"\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/vnotex.h>\n#include <widgets/searchinfoprovider.h>\n\nusing namespace vnotex;\n\nUnitedEntryMgr::UnitedEntryMgr(QObject *p_parent) : QObject(p_parent) {}\n\nvoid UnitedEntryMgr::init() {\n  if (m_initialized) {\n    return;\n  }\n\n  m_initialized = true;\n\n  // Built-in entries.\n  const auto mainWindow = VNoteX::getInst().getMainWindow();\n  addEntry(QSharedPointer<FindUnitedEntry>::create(SearchInfoProvider::create(mainWindow), this));\n\n  addEntry(QSharedPointer<HelpUnitedEntry>::create(this));\n\n  // Alias from config.\n  const auto &config = ConfigMgr::getInst().getCoreConfig();\n  const auto &aliasArr = config.getUnitedEntryAlias();\n  for (int i = 0; i < aliasArr.size(); ++i) {\n    auto entry = QSharedPointer<UnitedEntryAlias>::create(aliasArr[i].toObject(), this);\n    addEntry(entry);\n  }\n}\n\nvoid UnitedEntryMgr::addEntry(const QSharedPointer<IUnitedEntry> &p_entry) {\n  Q_ASSERT(!m_entries.contains(p_entry->name()));\n  m_entries.insert(p_entry->name(), p_entry);\n  connect(p_entry.data(), &IUnitedEntry::finished, this,\n          [this]() { emit entryFinished(reinterpret_cast<IUnitedEntry *>(sender())); });\n  connect(p_entry.data(), &IUnitedEntry::itemActivated, this, [this](bool quit, bool restoreFocus) {\n    emit entryItemActivated(reinterpret_cast<IUnitedEntry *>(sender()), quit, restoreFocus);\n  });\n}\n\nQList<QSharedPointer<IUnitedEntry>> UnitedEntryMgr::getEntries() const {\n  return m_entries.values();\n}\n\nQSharedPointer<IUnitedEntry> UnitedEntryMgr::findEntry(const QString &p_name) const {\n  auto it = m_entries.find(p_name);\n  if (it == m_entries.end()) {\n    return nullptr;\n  }\n\n  return it.value();\n}\n\nbool UnitedEntryMgr::isInitialized() const { return m_initialized; }\n\nbool UnitedEntryMgr::getExpandAllEnabled() const { return m_expandAllEnabled; }\n\nvoid UnitedEntryMgr::setExpandAllEnabled(bool p_enabled) { m_expandAllEnabled = p_enabled; }\n"
  },
  {
    "path": "src/unitedentry/unitedentrymgr.h",
    "content": "#ifndef UNITEDENTRYMGR_H\n#define UNITEDENTRYMGR_H\n\n#include <QMap>\n#include <QObject>\n#include <QSharedPointer>\n\n#include <core/noncopyable.h>\n\nnamespace vnotex {\nclass IUnitedEntry;\n\nclass UnitedEntryMgr : public QObject, private Noncopyable {\n  Q_OBJECT\npublic:\n  static UnitedEntryMgr &getInst() {\n    static UnitedEntryMgr inst;\n    inst.init();\n    return inst;\n  }\n\n  void init();\n\n  QList<QSharedPointer<IUnitedEntry>> getEntries() const;\n\n  QSharedPointer<IUnitedEntry> findEntry(const QString &p_name) const;\n\n  bool isInitialized() const;\n\n  bool getExpandAllEnabled() const;\n  void setExpandAllEnabled(bool p_enabled);\n\nsignals:\n  void entryFinished(IUnitedEntry *p_entry);\n\n  void entryItemActivated(IUnitedEntry *p_entry, bool p_quit, bool p_restoreFocus);\n\nprivate:\n  explicit UnitedEntryMgr(QObject *p_parent = nullptr);\n\n  void addEntry(const QSharedPointer<IUnitedEntry> &p_entry);\n\n  bool m_initialized = false;\n\n  QMap<QString, QSharedPointer<IUnitedEntry>> m_entries;\n\n  bool m_expandAllEnabled = false;\n};\n} // namespace vnotex\n\n#endif // UNITEDENTRYMGR_H\n"
  },
  {
    "path": "src/utils/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    asyncworker.cpp asyncworker.h\n    callbackpool.cpp callbackpool.h\n    clipboardutils.cpp clipboardutils.h\n    contentmediautils.cpp contentmediautils.h\n    docsutils.cpp docsutils.h\n    fileutils.cpp fileutils.h\n    htmlutils.cpp htmlutils.h\n    iconutils.cpp iconutils.h\n    imageutils.cpp imageutils.h\n    pathutils.cpp pathutils.h\n    printutils.cpp printutils.h\n    processutils.cpp processutils.h\n    urldragdroputils.cpp urldragdroputils.h\n    utils.cpp utils.h\n    vxurlutils.cpp vxurlutils.h\n    webutils.cpp webutils.h\n    widgetutils.cpp widgetutils.h\n)\n"
  },
  {
    "path": "src/utils/asyncworker.cpp",
    "content": "#include \"asyncworker.h\"\n\nusing namespace vnotex;\n\nAsyncWorker::AsyncWorker(QObject *p_parent) : QThread(p_parent) {}\n\nvoid AsyncWorker::stop() { m_askedToStop.fetchAndStoreAcquire(1); }\n\nbool AsyncWorker::isAskedToStop() const { return m_askedToStop.loadAcquire() == 1; }\n\nAsyncWorkerWithFunctor::AsyncWorkerWithFunctor(QObject *p_parent) : QThread(p_parent) {}\n\nvoid AsyncWorkerWithFunctor::doWork(const Functor &p_functor) {\n  Q_ASSERT(!isRunning());\n  m_functor = p_functor;\n  start();\n}\n\nvoid AsyncWorkerWithFunctor::run() {\n  Q_ASSERT(m_functor);\n  m_functor();\n}\n"
  },
  {
    "path": "src/utils/asyncworker.h",
    "content": "#ifndef ASYNCWORKER_H\n#define ASYNCWORKER_H\n\n#include <QThread>\n\n#include <QAtomicInt>\n\nnamespace vnotex {\nclass AsyncWorker : public QThread {\n  Q_OBJECT\npublic:\n  explicit AsyncWorker(QObject *p_parent = nullptr);\n\npublic slots:\n  void stop();\n\nprotected:\n  bool isAskedToStop() const;\n\nprivate:\n  QAtomicInt m_askedToStop = 0;\n};\n\nclass AsyncWorkerWithFunctor : public QThread {\n  Q_OBJECT\npublic:\n  typedef std::function<void()> Functor;\n\n  explicit AsyncWorkerWithFunctor(QObject *p_parent = nullptr);\n\n  void doWork(const Functor &p_functor);\n\nprotected:\n  void run() Q_DECL_OVERRIDE;\n\nprivate:\n  Functor m_functor;\n};\n} // namespace vnotex\n\n#endif // ASYNCWORKER_H\n"
  },
  {
    "path": "src/utils/callbackpool.cpp",
    "content": "#include \"callbackpool.h\"\n\n#include <QDebug>\n\nusing namespace vnotex;\n\nquint64 CallbackPool::add(const Callback &p_callback) {\n  static quint64 nextId = 0;\n  quint64 id = nextId++;\n  m_pool.insert(id, p_callback);\n  return id;\n}\n\nvoid CallbackPool::call(quint64 p_id, void *p_data) {\n  auto it = m_pool.find(p_id);\n  if (it != m_pool.end()) {\n    it.value()(p_data);\n    m_pool.erase(it);\n  } else {\n    qWarning() << \"failed to locate callback in pool with id\" << p_id;\n  }\n}\n\nvoid CallbackPool::clear() { m_pool.clear(); }\n"
  },
  {
    "path": "src/utils/callbackpool.h",
    "content": "#ifndef CALLBACKPOOL_H\n#define CALLBACKPOOL_H\n\n#include <functional>\n\n#include <QMap>\n\nnamespace vnotex {\n// Manage callbacks with id.\nclass CallbackPool {\npublic:\n  typedef std::function<void(void *)> Callback;\n\n  CallbackPool() = default;\n\n  quint64 add(const Callback &p_callback);\n\n  void call(quint64 p_id, void *p_data);\n\n  void clear();\n\nprivate:\n  QMap<quint64, Callback> m_pool;\n};\n} // namespace vnotex\n\n#endif // CALLBACKPOOL_H\n"
  },
  {
    "path": "src/utils/clipboardutils.cpp",
    "content": "#include \"clipboardutils.h\"\n\n#include <QAction>\n#include <QApplication>\n#include <QDebug>\n#include <QList>\n#include <QMimeData>\n#include <QString>\n#include <QStringLiteral>\n#include <QUrl>\n\n#include \"fileutils.h\"\n#include \"pathutils.h\"\n#include \"utils.h\"\n\nusing namespace vnotex;\n\nQString ClipboardUtils::getTextFromClipboard() {\n  QClipboard *clipboard = QApplication::clipboard();\n  QString subType(QStringLiteral(\"plain\"));\n  return clipboard->text(subType, QClipboard::Clipboard);\n}\n\nvoid ClipboardUtils::setTextToClipboard(const QString &p_text) {\n  QClipboard *clipboard = QApplication::clipboard();\n  clipboard->setText(p_text);\n}\n\nvoid ClipboardUtils::setLinkToClipboard(const QString &p_link) {\n  QClipboard *clipboard = QApplication::clipboard();\n  setMimeDataToClipboard(clipboard, linkMimeData(p_link).release());\n}\n\nvoid ClipboardUtils::clearClipboard() {\n  QClipboard *clipboard = QApplication::clipboard();\n  clipboard->setText(QString());\n}\n\nvoid ClipboardUtils::setMimeDataToClipboard(QClipboard *p_clipboard, QMimeData *p_mimeData,\n                                            QClipboard::Mode p_mode) {\n#if defined(Q_OS_WIN) || defined(Q_OS_LINUX)\n  // On Windows, setMimeData() may fail. We will repeatedly retry until succeed.\n  // On Linux, QXcbClipboard::setMimeData: Cannot set X11 selection owner.\n  setMimeDataLoop(p_clipboard, p_mimeData, p_mode);\n#else\n  p_clipboard->setMimeData(p_mimeData, p_mode);\n#endif\n}\n\nbool ClipboardUtils::mimeDataEquals(const QMimeData *p_a, const QMimeData *p_b) {\n  if (!p_a && !p_b) {\n    return true;\n  }\n\n  if ((p_a && !p_b) || (!p_a && p_b)) {\n    return false;\n  }\n\n  if (p_a->hasUrls()) {\n    if (!p_b->hasUrls()) {\n      return false;\n    }\n\n    if (p_a->urls() != p_b->urls()) {\n      return false;\n    }\n  } else if (p_b->hasUrls()) {\n    return false;\n  }\n\n  if (p_a->hasText()) {\n    if (!p_b->hasText()) {\n      return false;\n    }\n\n    if (p_a->text() != p_b->text()) {\n      return false;\n    }\n  } else if (p_b->hasText()) {\n    return false;\n  }\n\n  if (p_a->hasColor()) {\n    if (!p_b->hasColor()) {\n      return false;\n    }\n\n    if (p_a->colorData() != p_b->colorData()) {\n      return false;\n    }\n  } else if (p_b->hasColor()) {\n    return false;\n  }\n\n  if (p_a->hasHtml()) {\n    if (!p_b->hasHtml()) {\n      return false;\n    }\n\n    if (p_a->html() != p_b->html()) {\n      return false;\n    }\n  } else if (p_b->hasHtml()) {\n    return false;\n  }\n\n  if (p_a->hasImage()) {\n    if (!p_b->hasImage()) {\n      return false;\n    }\n\n    if (p_a->imageData() != p_b->imageData()) {\n      return false;\n    }\n  } else if (p_b->hasImage()) {\n    return false;\n  }\n\n  return true;\n}\n\nvoid ClipboardUtils::setMimeDataLoop(QClipboard *p_clipboard, QMimeData *p_mimeData,\n                                     QClipboard::Mode p_mode) {\n  for (int i = 0; i < 100; ++i) {\n    // Make a backup.\n    auto tmp = cloneMimeData(p_mimeData);\n\n    p_clipboard->setMimeData(p_mimeData, p_mode);\n    const QMimeData *out = p_clipboard->mimeData(p_mode);\n    if (mimeDataEquals(tmp.get(), out)) {\n      return;\n    }\n\n    qDebug() << \"failed to set mimeData, retry\" << i;\n    p_mimeData = tmp.release();\n    Utils::sleepWait(100 /* ms */);\n  }\n\n  delete p_mimeData;\n}\n\nstd::unique_ptr<QMimeData> ClipboardUtils::cloneMimeData(const QMimeData *p_mimeData) {\n  std::unique_ptr<QMimeData> da(new QMimeData());\n  if (p_mimeData->hasUrls()) {\n    da->setUrls(p_mimeData->urls());\n  }\n\n  if (p_mimeData->hasText()) {\n    da->setText(p_mimeData->text());\n  }\n\n  if (p_mimeData->hasColor()) {\n    da->setColorData(p_mimeData->colorData());\n  }\n\n  if (p_mimeData->hasHtml()) {\n    da->setHtml(p_mimeData->html());\n  }\n\n  if (p_mimeData->hasImage()) {\n    da->setImageData(p_mimeData->imageData());\n  }\n\n  return da;\n}\n\nvoid ClipboardUtils::setImageToClipboard(QClipboard *p_clipboard, const QImage &p_image,\n                                         QClipboard::Mode p_mode) {\n#if defined(Q_OS_WIN) || defined(Q_OS_LINUX)\n  // On Windows, setImage() may fail. We will repeatedly retry until succeed.\n  // On Linux, QXcbClipboard::setMimeData: Cannot set X11 selection owner.\n  setImageLoop(p_clipboard, p_image, p_mode);\n#else\n  p_clipboard->setImage(p_image, p_mode);\n#endif\n}\n\nvoid ClipboardUtils::setImageLoop(QClipboard *p_clipboard, const QImage &p_image,\n                                  QClipboard::Mode p_mode) {\n  for (int i = 0; i < 100; ++i) {\n    p_clipboard->setImage(p_image, p_mode);\n\n    QImage image = p_clipboard->image(p_mode);\n    if (!image.isNull()) {\n      break;\n    }\n\n    qWarning() << \"failed to set image, retry\" << i;\n    Utils::sleepWait(100 /* ms */);\n  }\n}\n\nstd::unique_ptr<QMimeData> ClipboardUtils::linkMimeData(const QString &p_link) {\n  QList<QUrl> urls;\n  urls.append(PathUtils::pathToUrl(p_link));\n  std::unique_ptr<QMimeData> data(new QMimeData());\n  data->setUrls(urls);\n\n  QString text = urls[0].toEncoded();\n#if defined(Q_OS_WIN)\n  if (urls[0].isLocalFile()) {\n    text = urls[0].toString(QUrl::EncodeSpaces);\n  }\n#endif\n\n  data->setText(text);\n  return data;\n}\n\nvoid ClipboardUtils::setLocalFileToClipboard(QClipboard *p_clipboard, const QString &p_filePath,\n                                             QClipboard::Mode p_mode) {\n  // Check if the file exists\n  if (!FileUtils::existsCaseInsensitive(p_filePath)) {\n    qWarning() << \"ClipboardUtils::setLocalFileToClipboard: file does not exist:\" << p_filePath;\n    return;\n  }\n\n  setMimeDataToClipboard(p_clipboard, linkMimeData(p_filePath).release(), p_mode);\n}\n"
  },
  {
    "path": "src/utils/clipboardutils.h",
    "content": "#ifndef CLIPBOARDUTILS_H\n#define CLIPBOARDUTILS_H\n\n#include <memory>\n\n#include <QClipboard>\n\nnamespace vnotex {\nclass ClipboardUtils {\npublic:\n  ClipboardUtils() = delete;\n\n  static QString getTextFromClipboard();\n\n  static void setTextToClipboard(const QString &p_text);\n\n  static void setLinkToClipboard(const QString &p_link);\n\n  // @p_mimeData will be owned by utils.\n  static void setMimeDataToClipboard(QClipboard *p_clipboard, QMimeData *p_mimeData,\n                                     QClipboard::Mode p_mode = QClipboard::Clipboard);\n\n  static void clearClipboard();\n\n  static std::unique_ptr<QMimeData> cloneMimeData(const QMimeData *p_mimeData);\n\n  static void setImageToClipboard(QClipboard *p_clipboard, const QImage &p_image,\n                                  QClipboard::Mode p_mode = QClipboard::Clipboard);\n\n  // Set a local file to clipboard.\n  static void setLocalFileToClipboard(QClipboard *p_clipboard, const QString &p_filePath,\n                                      QClipboard::Mode p_mode = QClipboard::Clipboard);\n\nprivate:\n  static bool mimeDataEquals(const QMimeData *p_a, const QMimeData *p_b);\n\n  static void setMimeDataLoop(QClipboard *p_clipboard, QMimeData *p_mimeData,\n                              QClipboard::Mode p_mode);\n\n  static void setImageLoop(QClipboard *p_clipboard, const QImage &p_image, QClipboard::Mode p_mode);\n\n  static std::unique_ptr<QMimeData> linkMimeData(const QString &p_link);\n};\n} // namespace vnotex\n\n#endif // CLIPBOARDUTILS_H\n"
  },
  {
    "path": "src/utils/contentmediautils.cpp",
    "content": "#include \"contentmediautils.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QFileInfo>\n#include <QHash>\n#include <QSet>\n\n#include <notebook/node.h>\n#include <notebookbackend/inotebookbackend.h>\n\n#include <buffer/filetypehelper.h>\n\n#include <vtextedit/markdownutils.h>\n#include <vtextedit/textutils.h>\n\n#include <core/exception.h>\n#include <core/file.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nvoid ContentMediaUtils::copyMediaFiles(Node *p_node, INotebookBackend *p_backend,\n                                       const QString &p_destFilePath) {\n  Q_ASSERT(p_node->hasContent());\n  auto file = p_node->getContentFile();\n  if (file->getContentType().isMarkdown()) {\n    copyMarkdownMediaFiles(file->read(), PathUtils::parentDirPath(file->getContentPath()),\n                           p_backend, p_destFilePath);\n  }\n}\n\nvoid ContentMediaUtils::copyMediaFiles(const QString &p_filePath, INotebookBackend *p_backend,\n                                       const QString &p_destFilePath) {\n  const auto &fileType = FileTypeHelper::getInst().getFileType(p_filePath);\n  if (fileType.isMarkdown()) {\n    copyMarkdownMediaFiles(FileUtils::readTextFile(p_filePath),\n                           PathUtils::parentDirPath(p_filePath), p_backend, p_destFilePath);\n  }\n}\n\nvoid ContentMediaUtils::copyMediaFiles(const File *p_file, const QString &p_destFilePath) {\n  if (p_file->getContentType().isMarkdown()) {\n    copyMarkdownMediaFiles(p_file->read(), p_file->getResourcePath(), nullptr, p_destFilePath);\n  }\n}\n\nvoid ContentMediaUtils::copyMarkdownMediaFiles(const QString &p_content, const QString &p_basePath,\n                                               INotebookBackend *p_backend,\n                                               const QString &p_destFilePath) {\n  auto content = p_content;\n\n  // Images.\n  const auto images = vte::MarkdownUtils::fetchImagesFromMarkdownText(\n      content, p_basePath, vte::MarkdownLink::TypeFlag::LocalRelativeInternal);\n\n  QDir destDir(PathUtils::parentDirPath(p_destFilePath));\n  QSet<QString> handledImages;\n  QHash<QString, QString> renamedImages;\n  int lastPos = content.size();\n  for (const auto &link : images) {\n    Q_ASSERT(link.m_urlInLinkPos < lastPos);\n    lastPos = link.m_urlInLinkPos;\n\n    qDebug() << \"link\" << link.m_path << link.m_urlInLink;\n\n    if (handledImages.contains(link.m_path)) {\n      auto it = renamedImages.find(link.m_path);\n      if (it != renamedImages.end()) {\n        content.replace(link.m_urlInLinkPos, link.m_urlInLink.size(), it.value());\n      }\n      continue;\n    }\n\n    handledImages.insert(link.m_path);\n\n    if (!QFileInfo::exists(link.m_path)) {\n      qWarning() << \"image of Markdown file does not exist\" << link.m_path << link.m_urlInLink;\n      continue;\n    }\n\n    // Get the relative path of the image and apply it to the dest file path.\n    const auto decodedUrlInLink = vte::TextUtils::decodeUrl(link.m_urlInLink);\n    const auto oldDestFilePath = destDir.filePath(decodedUrlInLink);\n    destDir.mkpath(PathUtils::parentDirPath(oldDestFilePath));\n    auto destFilePath = p_backend ? p_backend->renameIfExistsCaseInsensitive(oldDestFilePath)\n                                  : FileUtils::renameIfExistsCaseInsensitive(oldDestFilePath);\n    if (oldDestFilePath != destFilePath) {\n      // Rename happens.\n      const auto oldFileName = PathUtils::fileName(oldDestFilePath);\n      const auto newFileName = PathUtils::fileName(destFilePath);\n      qWarning() << QStringLiteral(\"image name conflicts when copy, renamed from (%1) to (%2)\")\n                        .arg(oldFileName, newFileName);\n\n      // Update the text content.\n      const auto encodedOldFileName = PathUtils::fileName(link.m_urlInLink);\n      const auto encodedNewFileName = vte::TextUtils::encodeUrl(newFileName);\n      auto newUrlInLink(link.m_urlInLink);\n      newUrlInLink.replace(newUrlInLink.size() - encodedOldFileName.size(),\n                           encodedOldFileName.size(), encodedNewFileName);\n\n      content.replace(link.m_urlInLinkPos, link.m_urlInLink.size(), newUrlInLink);\n      renamedImages.insert(link.m_path, newUrlInLink);\n    }\n\n    if (p_backend) {\n      p_backend->copyFile(link.m_path, destFilePath);\n    } else {\n      FileUtils::copyFile(link.m_path, destFilePath);\n    }\n  }\n\n  if (!renamedImages.isEmpty()) {\n    if (p_backend) {\n      p_backend->writeFile(p_destFilePath, content);\n    } else {\n      FileUtils::writeFile(p_destFilePath, content);\n    }\n  }\n}\n\nvoid ContentMediaUtils::removeMediaFiles(Node *p_node) {\n  Q_ASSERT(p_node->hasContent());\n  auto file = p_node->getContentFile();\n  if (file->getContentType().isMarkdown()) {\n    removeMarkdownMediaFiles(file.data(), p_node->getBackend());\n  }\n}\n\nvoid ContentMediaUtils::removeMarkdownMediaFiles(const File *p_file, INotebookBackend *p_backend) {\n  auto content = p_file->read();\n\n  // Images.\n  const auto images = vte::MarkdownUtils::fetchImagesFromMarkdownText(\n      content, p_file->getResourcePath(), vte::MarkdownLink::TypeFlag::LocalRelativeInternal);\n\n  QSet<QString> handledImages;\n  for (const auto &link : images) {\n    if (handledImages.contains(link.m_path)) {\n      continue;\n    }\n\n    handledImages.insert(link.m_path);\n\n    if (!QFileInfo::exists(link.m_path)) {\n      qWarning() << \"image of Markdown file does not exist\" << link.m_path << link.m_urlInLink;\n      continue;\n    }\n    p_backend->removeFile(link.m_path);\n  }\n}\n\nvoid ContentMediaUtils::copyAttachment(Node *p_node, INotebookBackend *p_backend,\n                                       const QString &p_destFilePath,\n                                       const QString &p_destAttachmentFolderPath) {\n  Q_ASSERT(p_node->hasContent());\n  Q_ASSERT(!p_node->getAttachmentFolder().isEmpty());\n\n  // Copy the whole folder.\n  const auto srcAttachmentFolderPath = p_node->fetchAttachmentFolderPath();\n  try {\n    if (p_backend) {\n      p_backend->copyDir(srcAttachmentFolderPath, p_destAttachmentFolderPath);\n    } else {\n      FileUtils::copyDir(srcAttachmentFolderPath, p_destAttachmentFolderPath);\n    }\n  } catch (Exception &e) {\n    qWarning() << \"failed to copy attachment folder\" << srcAttachmentFolderPath << e.what();\n    return;\n  }\n\n  // Check if we need to modify links in content.\n  // FIXME: check the whole relative path.\n  if (p_node->getAttachmentFolder() == PathUtils::dirName(p_destAttachmentFolderPath)) {\n    return;\n  }\n\n  auto file = p_node->getContentFile();\n  if (file->getContentType().isMarkdown()) {\n    fixMarkdownLinks(srcAttachmentFolderPath, p_backend, p_destFilePath,\n                     p_destAttachmentFolderPath);\n  }\n}\n\nvoid ContentMediaUtils::fixMarkdownLinks(const QString &p_srcFolderPath,\n                                         INotebookBackend *p_backend, const QString &p_destFilePath,\n                                         const QString &p_destFolderPath) {\n  // TODO.\n  Q_UNUSED(p_srcFolderPath);\n  Q_UNUSED(p_backend);\n  Q_UNUSED(p_destFilePath);\n  Q_UNUSED(p_destFolderPath);\n}\n"
  },
  {
    "path": "src/utils/contentmediautils.h",
    "content": "#ifndef CONTENTMEDIAUTILS_H\n#define CONTENTMEDIAUTILS_H\n\n#include <QString>\n\nnamespace vnotex {\nclass INotebookBackend;\nclass Node;\nclass File;\n\n// Utils to operate on the media files from node's content.\nclass ContentMediaUtils {\npublic:\n  ContentMediaUtils() = delete;\n\n  // Fetch media files from @p_node and copy them to dest folder.\n  // @p_destFilePath: @p_node has been copied to @p_destFilePath.\n  static void copyMediaFiles(Node *p_node, INotebookBackend *p_backend,\n                             const QString &p_destFilePath);\n\n  // @p_filePath: the file path to read the content for parse.\n  static void copyMediaFiles(const QString &p_filePath, INotebookBackend *p_backend,\n                             const QString &p_destFilePath);\n\n  static void copyMediaFiles(const File *p_file, const QString &p_destFilePath);\n\n  static void removeMediaFiles(Node *p_node);\n\n  // Copy attachment folder.\n  static void copyAttachment(Node *p_node, INotebookBackend *p_backend,\n                             const QString &p_destFilePath,\n                             const QString &p_destAttachmentFolderPath);\n\nprivate:\n  static void copyMarkdownMediaFiles(const QString &p_content, const QString &p_basePath,\n                                     INotebookBackend *p_backend, const QString &p_destFilePath);\n\n  static void removeMarkdownMediaFiles(const File *p_file, INotebookBackend *p_backend);\n\n  // Fix local relative internal links locating in @p_srcFolderPath.\n  static void fixMarkdownLinks(const QString &p_srcFolderPath, INotebookBackend *p_backend,\n                               const QString &p_destFilePath, const QString &p_destFolderPath);\n};\n} // namespace vnotex\n\n#endif // CONTENTMEDIAUTILS_H\n"
  },
  {
    "path": "src/utils/docsutils.cpp",
    "content": "#include \"docsutils.h\"\n\n#include <QDir>\n\n#include \"fileutils.h\"\n\nusing namespace vnotex;\n\nQStringList DocsUtils::s_searchPaths;\n\nQString DocsUtils::s_locale = \"en_US\";\n\nvoid DocsUtils::addSearchPath(const QString &p_path) { s_searchPaths.append(p_path); }\n\nQString DocsUtils::getDocText(const QString &p_baseName) {\n  auto filePath = getDocFile(p_baseName);\n  if (!filePath.isEmpty()) {\n    return FileUtils::readTextFile(filePath);\n  }\n\n  return \"\";\n}\n\nQString DocsUtils::getDocFile(const QString &p_baseName) {\n  const auto shortLocale = s_locale.split('_')[0];\n\n  const auto fullLocaleName = QStringLiteral(\"%1/%2\").arg(s_locale, p_baseName);\n  const auto shortLocaleName = QStringLiteral(\"%1/%2\").arg(shortLocale, p_baseName);\n  const auto defaultLocaleName = QStringLiteral(\"%1/%2\").arg(QStringLiteral(\"en\"), p_baseName);\n\n  for (const auto &pa : s_searchPaths) {\n    QDir dir(pa);\n    if (!dir.exists()) {\n      continue;\n    }\n\n    if (dir.exists(fullLocaleName)) {\n      return dir.filePath(fullLocaleName);\n    } else if (dir.exists(shortLocaleName)) {\n      return dir.filePath(shortLocaleName);\n    } else if (dir.exists(defaultLocaleName)) {\n      return dir.filePath(defaultLocaleName);\n    }\n  }\n\n  return \"\";\n}\n\nvoid DocsUtils::setLocale(const QString &p_locale) { s_locale = p_locale; }\n"
  },
  {
    "path": "src/utils/docsutils.h",
    "content": "#ifndef DOCSUTILS_H\n#define DOCSUTILS_H\n\n#include <QStringList>\n\nnamespace vnotex {\nclass DocsUtils {\npublic:\n  DocsUtils() = delete;\n\n  static QString getDocText(const QString &p_baseName);\n\n  static QString getDocFile(const QString &p_baseName);\n\n  static void addSearchPath(const QString &p_path);\n\n  static void setLocale(const QString &p_locale);\n\nprivate:\n  static QStringList s_searchPaths;\n\n  static QString s_locale;\n};\n} // namespace vnotex\n\n#endif // DOCSUTILS_H\n"
  },
  {
    "path": "src/utils/fileutils.cpp",
    "content": "#include \"fileutils.h\"\n\n#include <QDateTime>\n#include <QFile>\n#include <QJsonDocument>\n#include <QMimeDatabase>\n#include <QTemporaryFile>\n\n#include <core/exception.h>\n#include <core/global.h>\n\n#include \"pathutils.h\"\n#include <QRandomGenerator>\n\nusing namespace vnotex;\n\nQByteArray FileUtils::readFile(const QString &p_filePath) {\n  QFile file(p_filePath);\n  if (!file.open(QIODevice::ReadOnly)) {\n    Exception::throwOne(Exception::Type::FailToReadFile,\n                        QStringLiteral(\"failed to read file: %1\").arg(p_filePath));\n  }\n\n  return file.readAll();\n}\n\nQString FileUtils::readTextFile(const QString &p_filePath) {\n  QFile file(p_filePath);\n  if (!file.open(QIODevice::ReadOnly)) {\n    Exception::throwOne(Exception::Type::FailToReadFile,\n                        QStringLiteral(\"failed to read file: %1\").arg(p_filePath));\n  }\n\n  // TODO: determine the encoding of the text.\n  QString text(file.readAll());\n  file.close();\n  return text;\n}\n\nQJsonObject FileUtils::readJsonFile(const QString &p_filePath) {\n  return QJsonDocument::fromJson(readFile(p_filePath)).object();\n}\n\nvoid FileUtils::writeFile(const QString &p_filePath, const QByteArray &p_data) {\n  QFile file(p_filePath);\n  if (!file.open(QIODevice::WriteOnly)) {\n    Exception::throwOne(Exception::Type::FailToWriteFile,\n                        QStringLiteral(\"failed to write to file: %1\").arg(p_filePath));\n  }\n\n  file.write(p_data);\n  file.close();\n}\n\nvoid FileUtils::writeFile(const QString &p_filePath, const QString &p_text) {\n  QFile file(p_filePath);\n  if (!file.open(QIODevice::WriteOnly)) {\n    Exception::throwOne(Exception::Type::FailToWriteFile,\n                        QStringLiteral(\"failed to write to file: %1\").arg(p_filePath));\n  }\n\n  QTextStream stream(&file);\n  stream << p_text;\n  file.close();\n}\n\nvoid FileUtils::writeFile(const QString &p_filePath, const QJsonObject &p_jobj) {\n  writeFile(p_filePath, QJsonDocument(p_jobj).toJson());\n}\n\nvoid FileUtils::renameFile(const QString &p_path, const QString &p_name) {\n  Q_ASSERT(PathUtils::isLegalFileName(p_name));\n  QString newFilePath(PathUtils::concatenateFilePath(PathUtils::parentDirPath(p_path), p_name));\n  QFile file(p_path);\n  if (!file.exists() || !file.rename(newFilePath)) {\n    Exception::throwOne(Exception::Type::FailToRenameFile,\n                        QStringLiteral(\"failed to rename file: %1\").arg(p_path));\n  }\n}\n\nbool FileUtils::childExistsCaseInsensitive(const QString &p_dirPath, const QString &p_name) {\n  QDir dir(p_dirPath);\n  if (!dir.exists()) {\n    return false;\n  }\n\n  auto name = p_name.toLower();\n  auto children = dir.entryList(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot);\n  for (const auto &child : children) {\n    if (child.toLower() == name) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nbool FileUtils::existsCaseInsensitive(const QString &p_path) {\n  return childExistsCaseInsensitive(PathUtils::parentDirPath(p_path), PathUtils::fileName(p_path));\n}\n\nvoid FileUtils::copyFile(const QString &p_filePath, const QString &p_destPath, bool p_move) {\n  if (PathUtils::areSamePaths(p_filePath, p_destPath)) {\n    return;\n  }\n\n  QDir dir;\n  if (!dir.mkpath(PathUtils::parentDirPath(p_destPath))) {\n    Exception::throwOne(\n        Exception::Type::FailToCreateDir,\n        QStringLiteral(\"failed to create directory: %1\").arg(PathUtils::parentDirPath(p_destPath)));\n  }\n\n  bool failed = false;\n  if (p_move) {\n    QFile file(p_filePath);\n    if (!file.rename(p_destPath)) {\n      failed = true;\n    }\n  } else {\n    if (!QFile::copy(p_filePath, p_destPath)) {\n      failed = true;\n    }\n  }\n\n  if (failed) {\n    Exception::throwOne(Exception::Type::FailToCopyFile,\n                        QStringLiteral(\"failed to copy file: %1 %2\").arg(p_filePath, p_destPath));\n  }\n}\n\nvoid FileUtils::copyDir(const QString &p_dirPath, const QString &p_destPath, bool p_move) {\n  if (PathUtils::areSamePaths(p_dirPath, p_destPath)) {\n    return;\n  }\n\n  if (QFileInfo::exists(p_destPath)) {\n    Exception::throwOne(Exception::Type::FailToCopyDir,\n                        QStringLiteral(\"target directory %1 already exists\").arg(p_destPath));\n  }\n\n  // QDir.rename() could not move directory across dirves.\n\n  // Create target directory.\n  QDir destDir(p_destPath);\n  if (!destDir.mkpath(p_destPath)) {\n    Exception::throwOne(Exception::Type::FailToCreateDir,\n                        QStringLiteral(\"failed to create directory: %1\").arg(p_destPath));\n  }\n\n  // Copy directory contents recursively.\n  QDir srcDir(p_dirPath);\n  auto nodes = srcDir.entryInfoList(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoSymLinks |\n                                    QDir::NoDotAndDotDot);\n  for (const auto &node : nodes) {\n    auto name = node.fileName();\n    if (node.isDir()) {\n      copyDir(srcDir.filePath(name), destDir.filePath(name), p_move);\n    } else {\n      Q_ASSERT(node.isFile());\n      copyFile(srcDir.filePath(name), destDir.filePath(name), p_move);\n    }\n  }\n\n  if (p_move) {\n    if (!destDir.rmdir(p_dirPath)) {\n      Exception::throwOne(\n          Exception::Type::FailToRemoveDir,\n          QStringLiteral(\"failed to remove source directory after move: %1\").arg(p_dirPath));\n    }\n  }\n}\n\nQString FileUtils::renameIfExistsCaseInsensitive(const QString &p_path) {\n  QFileInfo fi(p_path);\n  auto dirPath = fi.absolutePath();\n  auto baseName = fi.completeBaseName();\n  auto suffix = fi.suffix();\n  auto name = fi.fileName();\n  int idx = 1;\n  while (childExistsCaseInsensitive(dirPath, name)) {\n    name = QStringLiteral(\"%1_%2\").arg(baseName, QString::number(idx));\n    if (!suffix.isEmpty()) {\n      name += QStringLiteral(\".\") + suffix;\n    }\n\n    ++idx;\n  }\n\n  return PathUtils::concatenateFilePath(dirPath, name);\n}\n\nvoid FileUtils::removeFile(const QString &p_filePath) {\n  Q_ASSERT(!QFileInfo::exists(p_filePath) || QFileInfo(p_filePath).isFile());\n  QFile file(p_filePath);\n  if (!file.remove()) {\n    Exception::throwOne(Exception::Type::FailToRemoveFile,\n                        QStringLiteral(\"failed to remove file: %1\").arg(p_filePath));\n  }\n}\n\nbool FileUtils::removeDirIfEmpty(const QString &p_dirPath) {\n  QDir dir(p_dirPath);\n  if (!dir.isEmpty()) {\n    return false;\n  }\n\n  if (!dir.rmdir(p_dirPath)) {\n    Exception::throwOne(Exception::Type::FailToRemoveFile,\n                        QStringLiteral(\"failed to remove directory: %1\").arg(p_dirPath));\n    return false;\n  }\n\n  return true;\n}\n\nvoid FileUtils::removeDir(const QString &p_dirPath) {\n  QDir dir(p_dirPath);\n  if (!dir.removeRecursively()) {\n    Exception::throwOne(\n        Exception::Type::FailToRemoveFile,\n        QStringLiteral(\"failed to remove directory recursively: %1\").arg(p_dirPath));\n  }\n}\n\nbool FileUtils::isPlatformNameCaseSensitive() {\n#if defined(Q_OS_WIN)\n  return false;\n#else\n  return true;\n#endif\n}\n\nbool FileUtils::isText(const QString &p_filePath) {\n  QMimeDatabase mimeDatabase;\n  auto mimeType = mimeDatabase.mimeTypeForFile(p_filePath);\n  const auto name = mimeType.name();\n  if (name.startsWith(QStringLiteral(\"text/\")) ||\n      name == QStringLiteral(\"application/x-zerosize\")) {\n    return true;\n  }\n\n  return mimeType.inherits(QStringLiteral(\"text/plain\"));\n}\n\nbool FileUtils::isImage(const QString &p_filePath) {\n  QMimeDatabase mimeDatabase;\n  auto mimeType = mimeDatabase.mimeTypeForFile(p_filePath);\n  if (mimeType.name().startsWith(QStringLiteral(\"image/\"))) {\n    return true;\n  }\n  return false;\n}\n\nQImage FileUtils::imageFromFile(const QString &p_filePath) {\n  QImage img(p_filePath);\n  if (!img.isNull()) {\n    return img;\n  }\n\n  // @p_filePath may has a wrong suffix which indicates a wrong image format.\n  img.loadFromData(readFile(p_filePath));\n  return img;\n}\n\nQPixmap FileUtils::pixmapFromFile(const QString &p_filePath) {\n  QPixmap pixmap;\n  pixmap.loadFromData(readFile(p_filePath));\n  return pixmap;\n}\n\nQString FileUtils::generateUniqueFileName(const QString &p_folderPath, const QString &p_hints,\n                                          const QString &p_suffix) {\n  auto fileName = generateRandomFileName(p_hints, p_suffix);\n  int suffixIdx = fileName.lastIndexOf(QLatin1Char('.'));\n  auto baseName = suffixIdx == -1 ? fileName : fileName.left(suffixIdx);\n  auto suffix = suffixIdx == -1 ? QStringLiteral(\"\") : fileName.mid(suffixIdx);\n  int index = 1;\n  while (childExistsCaseInsensitive(p_folderPath, fileName)) {\n    fileName = QStringLiteral(\"%1_%2%3\").arg(baseName, QString::number(index++), suffix);\n  }\n\n  return fileName;\n}\n\nQString FileUtils::generateRandomFileName(const QString &p_hints, const QString &p_suffix) {\n  Q_UNUSED(p_hints);\n\n  // Do not use toSecsSinceEpoch() here since we want a short name.\n  const QString timeStamp(QDateTime::currentDateTime().toString(QStringLiteral(\"sszzzmmHHyyMMdd\")));\n  const QString baseName(\n      QString::number(timeStamp.toLongLong() + QRandomGenerator::global()->generate()));\n\n  QString suffix;\n  if (!p_suffix.isEmpty()) {\n    suffix = QLatin1Char('.') + p_suffix.toLower();\n  }\n\n  return baseName + suffix;\n}\n\nQTemporaryFile *FileUtils::createTemporaryFile(const QString &p_suffix) {\n  QString xx = p_suffix.isEmpty() ? QStringLiteral(\"XXXXXX\") : QStringLiteral(\"XXXXXX.\");\n  return new QTemporaryFile(QDir::tempPath() + QDir::separator() + xx + p_suffix);\n}\n\nQString FileUtils::generateFileNameWithSequence(const QString &p_folderPath,\n                                                const QString &p_baseName,\n                                                const QString &p_suffix) {\n  auto fileName = p_suffix.isEmpty() ? p_baseName : p_baseName + QLatin1Char('.') + p_suffix;\n  auto suffix = p_suffix.isEmpty() ? QString() : QStringLiteral(\".\") + p_suffix;\n  int index = 1;\n  while (childExistsCaseInsensitive(p_folderPath, fileName)) {\n    fileName = QStringLiteral(\"%1_%2%3\").arg(p_baseName, QString::number(index++), suffix);\n  }\n\n  return fileName;\n}\n\nvoid FileUtils::removeEmptyDir(const QString &p_dirPath) {\n  QDir dir(p_dirPath);\n  if (dir.isEmpty()) {\n    return;\n  }\n\n  auto childDirs = dir.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);\n  for (const auto &child : childDirs) {\n    const auto childPath = child.absoluteFilePath();\n    removeEmptyDir(childPath);\n    removeDirIfEmpty(childPath);\n  }\n}\n\nQStringList FileUtils::entryListRecursively(const QString &p_dirPath,\n                                            const QStringList &p_nameFilters,\n                                            QDir::Filters p_filters) {\n  QStringList entries;\n\n  QDir dir(p_dirPath);\n  if (!dir.exists()) {\n    return entries;\n  }\n\n  const auto curEntries = dir.entryList(p_nameFilters, p_filters | QDir::NoDotAndDotDot);\n  for (const auto &e : curEntries) {\n    entries.append(PathUtils::concatenateFilePath(p_dirPath, e));\n  }\n\n  const auto subdirs = dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot);\n  for (const auto &subdir : subdirs) {\n    const auto dirPath = PathUtils::concatenateFilePath(p_dirPath, subdir);\n    entries.append(entryListRecursively(dirPath, p_nameFilters, p_filters));\n  }\n\n  return entries;\n}\n"
  },
  {
    "path": "src/utils/fileutils.h",
    "content": "#ifndef FILEUTILS_H\n#define FILEUTILS_H\n\n#include <QByteArray>\n#include <QDir>\n#include <QImage>\n#include <QJsonObject>\n#include <QPixmap>\n#include <QString>\n\nclass QTemporaryFile;\n\nnamespace vnotex {\nclass FileUtils {\npublic:\n  FileUtils() = delete;\n\n  static QByteArray readFile(const QString &p_filePath);\n\n  static QString readTextFile(const QString &p_filePath);\n\n  static QJsonObject readJsonFile(const QString &p_filePath);\n\n  static void writeFile(const QString &p_filePath, const QByteArray &p_data);\n\n  static void writeFile(const QString &p_filePath, const QString &p_text);\n\n  static void writeFile(const QString &p_filePath, const QJsonObject &p_jobj);\n\n  // Rename file or dir.\n  static void renameFile(const QString &p_path, const QString &p_name);\n\n  static bool childExistsCaseInsensitive(const QString &p_dirPath, const QString &p_name);\n\n  static bool existsCaseInsensitive(const QString &p_path);\n\n  static void copyFile(const QString &p_filePath, const QString &p_destPath, bool p_move = false);\n\n  static void copyDir(const QString &p_dirPath, const QString &p_destPath, bool p_move = false);\n\n  static void removeFile(const QString &p_filePath);\n\n  // Return false if it is not deleted due to non-empty.\n  static bool removeDirIfEmpty(const QString &p_dirPath);\n\n  static void removeDir(const QString &p_dirPath);\n\n  static QString renameIfExistsCaseInsensitive(const QString &p_path);\n\n  static bool isPlatformNameCaseSensitive();\n\n  static bool isText(const QString &p_filePath);\n\n  static bool isImage(const QString &p_filePath);\n\n  static QImage imageFromFile(const QString &p_filePath);\n\n  static QPixmap pixmapFromFile(const QString &p_filePath);\n\n  static QString generateUniqueFileName(const QString &p_folderPath, const QString &p_hints,\n                                        const QString &p_suffix);\n\n  static QString generateRandomFileName(const QString &p_hints, const QString &p_suffix);\n\n  static QString generateFileNameWithSequence(const QString &p_folderPath,\n                                              const QString &p_baseName,\n                                              const QString &p_suffix = QString());\n\n  static QTemporaryFile *createTemporaryFile(const QString &p_suffix);\n\n  // Go through @p_dirPath recursively and delete all empty dirs.\n  // @p_dirPath itself is not deleted.\n  static void removeEmptyDir(const QString &p_dirPath);\n\n  // Go through @p_dirPath recursively and get all entrys.\n  // @p_nameFilters is for each dir, not for all.\n  static QStringList entryListRecursively(const QString &p_dirPath,\n                                          const QStringList &p_nameFilters,\n                                          QDir::Filters p_filters = QDir::NoFilter);\n};\n} // namespace vnotex\n\n#endif // FILEUTILS_H\n"
  },
  {
    "path": "src/utils/htmlutils.cpp",
    "content": "#include \"htmlutils.h\"\n\n#include <QRegularExpression>\n\nusing namespace vnotex;\n\nbool HtmlUtils::hasOnlyImgTag(const QString &p_html) {\n  // Tricky.\n  QRegularExpression reg(QStringLiteral(\"<(?:p|span|div) \"));\n  return !p_html.contains(reg);\n}\n\nQString HtmlUtils::escapeHtml(QString p_text) {\n  p_text.replace(\">\", \"&gt;\").replace(\"<\", \"&lt;\").replace(\"&\", \"&amp;\");\n  return p_text;\n}\n\nQString HtmlUtils::unicodeEncode(const QString &p_text) {\n  QString encodedStr;\n  for (const auto ch : p_text) {\n    if (ch.unicode() > 255) {\n      encodedStr += QStringLiteral(\"&#%1;\").arg(static_cast<int>(ch.unicode()));\n    } else {\n      encodedStr += ch;\n    }\n  }\n\n  return encodedStr;\n}\n"
  },
  {
    "path": "src/utils/htmlutils.h",
    "content": "#ifndef HTMLUTILS_H\n#define HTMLUTILS_H\n\n#include <QString>\n\nnamespace vnotex {\nclass HtmlUtils {\npublic:\n  HtmlUtils() = delete;\n\n  static bool hasOnlyImgTag(const QString &p_html);\n\n  static QString escapeHtml(QString p_text);\n\n  static QString unicodeEncode(const QString &p_text);\n};\n} // namespace vnotex\n\n#endif // HTMLUTILS_H\n"
  },
  {
    "path": "src/utils/iconutils.cpp",
    "content": "#include \"iconutils.h\"\n\n#include <QDebug>\n#include <QFileInfo>\n#include <QPainter>\n#include <QPainterPath>\n#include <QPixmap>\n#include <QRegularExpression>\n\n#include <core/vnotex.h>\n\n#include \"fileutils.h\"\n\nusing namespace vnotex;\n\nQString IconUtils::s_defaultIconForeground;\n\nQString IconUtils::s_defaultIconDisabledForeground;\n\nQIcon IconUtils::fetchIcon(const QString &p_iconFile,\n                           const QVector<OverriddenColor> &p_overriddenColors, qreal p_angle) {\n  const auto suffix = QFileInfo(p_iconFile).suffix().toLower().toStdString();\n  if (p_overriddenColors.isEmpty() || suffix != \"svg\") {\n    return QIcon(p_iconFile);\n  }\n\n  auto content = FileUtils::readTextFile(p_iconFile);\n  if (content.isEmpty()) {\n    return QIcon();\n  }\n\n  if (!isMonochrome(content)) {\n    return QIcon(p_iconFile);\n  }\n\n  QIcon icon;\n  for (const auto &color : p_overriddenColors) {\n    auto overriddenContent = replaceForegroundOfIcon(content, color.m_foreground);\n    auto data = overriddenContent.toLocal8Bit();\n    QPixmap pixmap;\n    pixmap.loadFromData(data, suffix.c_str());\n    if (p_angle > 0) {\n      pixmap = pixmap.transformed(QTransform().rotate(p_angle));\n    }\n    icon.addPixmap(pixmap, color.m_mode, color.m_state);\n  }\n\n  return icon;\n}\n\nQIcon IconUtils::fetchIcon(const QString &p_iconFile, const QString &p_overriddenForeground) {\n  QVector<OverriddenColor> colors;\n  if (!p_overriddenForeground.isEmpty()) {\n    colors.push_back(OverriddenColor(p_overriddenForeground, QIcon::Normal, QIcon::Off));\n  }\n\n  return fetchIcon(p_iconFile, colors);\n}\n\nQString IconUtils::replaceForegroundOfIcon(const QString &p_iconContent,\n                                           const QString &p_foreground) {\n  if (p_foreground.isEmpty()) {\n    return p_iconContent;\n  }\n\n  // Negative lookahead to avoid fill=\"none\".\n  QRegularExpression styleRe(R\"((\\s|\"|;)(fill|stroke)(:|(=\"))(?!none)[^;\"]*)\");\n  if (p_iconContent.indexOf(styleRe) > -1) {\n    auto newContent(p_iconContent);\n    newContent.replace(styleRe, QStringLiteral(\"\\\\1\\\\2\\\\3%1\").arg(p_foreground));\n    return newContent;\n  }\n\n  return p_iconContent;\n}\n\nbool IconUtils::isMonochrome(const QString &p_iconContent) {\n  // Match color-hex codes.\n  QRegularExpression monoRe(\"#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})\");\n\n  QString lastColor = \"\";\n  int pos = 0;\n  while (pos < p_iconContent.size()) {\n    QRegularExpressionMatch match;\n    int idx = p_iconContent.indexOf(monoRe, pos, &match);\n    if (idx == -1) {\n      break;\n    }\n\n    auto curColor = match.captured(1).toLower();\n    if (curColor.size() == 3) {\n      for (int i = curColor.size() - 1; i >= 0; --i) {\n        curColor.insert(i, curColor[i]);\n      }\n    }\n\n    if (lastColor != curColor) {\n      if (lastColor.isEmpty()) {\n        lastColor = curColor;\n      } else {\n        return false;\n      }\n    }\n\n    pos += match.capturedLength();\n  }\n\n  return true;\n}\n\nQIcon IconUtils::fetchIcon(const QString &p_iconFile) {\n  return fetchIcon(p_iconFile, s_defaultIconForeground);\n}\n\nvoid IconUtils::setDefaultIconForeground(const QString &p_fg, const QString &p_disabledFg) {\n  s_defaultIconForeground = p_fg;\n  s_defaultIconDisabledForeground = p_disabledFg;\n}\n\nQIcon IconUtils::fetchIconWithDisabledState(const QString &p_iconFile) {\n  QVector<OverriddenColor> colors;\n  colors.push_back(OverriddenColor(s_defaultIconForeground, QIcon::Normal, QIcon::Off));\n  colors.push_back(OverriddenColor(s_defaultIconDisabledForeground, QIcon::Disabled, QIcon::Off));\n  return fetchIcon(p_iconFile, colors);\n}\n\nQIcon IconUtils::drawTextIcon(const QString &p_text, const QString &p_fg, const QString &p_border) {\n  return drawTextRectIcon(p_text, p_fg, \"\", p_border, 56, 56, 8);\n}\n\nQIcon IconUtils::drawTextRectIcon(const QString &p_text, const QString &p_fg, const QString &p_bg,\n                                  const QString &p_border, int p_rectWidth, int p_rectHeight,\n                                  int p_rectRadius) {\n  const int wid = 64;\n  QPixmap pixmap(wid, wid);\n  pixmap.fill(Qt::transparent);\n\n  QPainter painter(&pixmap);\n  painter.setRenderHint(QPainter::Antialiasing);\n\n  QPainterPath bgPath;\n  bgPath.addRoundedRect(\n      QRect((wid - p_rectWidth) / 2, (wid - p_rectHeight) / 2, p_rectWidth, p_rectHeight),\n      p_rectRadius, p_rectRadius);\n\n  if (!p_bg.isEmpty()) {\n    painter.fillPath(bgPath, QColor(p_bg));\n  }\n\n  const int strokeWidth = 3;\n\n  if (!p_border.isEmpty()) {\n    QPen pen(QColor(p_border), strokeWidth);\n    painter.setPen(pen);\n    painter.drawPath(bgPath);\n  }\n\n  if (!p_text.isEmpty()) {\n    QPen pen(QColor(p_fg), strokeWidth);\n    painter.setPen(pen);\n\n    auto font = painter.font();\n    font.setPointSize(36);\n    font.setBold(true);\n    painter.setFont(font);\n\n    auto requriedRect = painter.boundingRect(bgPath.boundingRect(), Qt::AlignCenter, p_text);\n    painter.drawText(requriedRect, p_text);\n  }\n\n  QIcon icon;\n  icon.addPixmap(pixmap);\n  return icon;\n}\n"
  },
  {
    "path": "src/utils/iconutils.h",
    "content": "#ifndef ICONUTILS_H\n#define ICONUTILS_H\n\n#include <QIcon>\n#include <QPixmap>\n#include <QVector>\n\nnamespace vnotex {\nclass IconUtils {\npublic:\n  IconUtils() = delete;\n\n  struct OverriddenColor {\n    OverriddenColor() : m_mode(QIcon::Normal), m_state(QIcon::Off) {}\n\n    OverriddenColor(const QString &p_foreground, QIcon::Mode p_mode = QIcon::Normal,\n                    QIcon::State p_state = QIcon::Off)\n        : m_foreground(p_foreground), m_mode(p_mode), m_state(p_state) {}\n\n    QString m_foreground;\n    QIcon::Mode m_mode;\n    QIcon::State m_state;\n  };\n\n  static void setDefaultIconForeground(const QString &p_fg, const QString &p_disabledFg);\n\n  static QIcon fetchIcon(const QString &p_iconFile,\n                         const QVector<OverriddenColor> &p_overriddenColors, qreal p_angle = -1);\n\n  static QIcon fetchIcon(const QString &p_iconFile, const QString &p_overriddenForeground);\n\n  // Fetch icon from @p_iconFile with icon_fg as overridden foreground color.\n  static QIcon fetchIcon(const QString &p_iconFile);\n\n  static QIcon fetchIconWithDisabledState(const QString &p_iconFile);\n\n  static QIcon drawTextIcon(const QString &p_text, const QString &p_fg, const QString &p_border);\n\n  static QIcon drawTextRectIcon(const QString &p_text, const QString &p_fg, const QString &p_bg,\n                                const QString &p_border, int p_rectWidth = 56,\n                                int p_rectHeight = 56, int p_rectRadius = 0);\n\nprivate:\n  static QString replaceForegroundOfIcon(const QString &p_iconContent, const QString &p_foreground);\n\n  static QString s_defaultIconForeground;\n\n  static QString s_defaultIconDisabledForeground;\n\n  static bool isMonochrome(const QString &p_iconContent);\n};\n} // namespace vnotex\n\n#endif // ICONUTILS_H\n"
  },
  {
    "path": "src/utils/imageutils.cpp",
    "content": "#include \"imageutils.h\"\n\n#include <QMimeDatabase>\n\nusing namespace vnotex;\n\nQImage::Format ImageUtils::guessImageFormat(const QByteArray &p_data) {\n  auto image = QImage::fromData(p_data);\n  return image.format();\n}\n\nQString ImageUtils::guessImageSuffix(const QByteArray &p_data) {\n  QMimeDatabase mimeDb;\n  auto mimeType = mimeDb.mimeTypeForData(p_data);\n  return mimeType.preferredSuffix();\n}\n"
  },
  {
    "path": "src/utils/imageutils.h",
    "content": "#ifndef IMAGEUTILS_H\n#define IMAGEUTILS_H\n\n#include <QImage>\n\nnamespace vnotex {\nclass ImageUtils {\npublic:\n  ImageUtils() = delete;\n\n  static QImage::Format guessImageFormat(const QByteArray &p_data);\n\n  static QString guessImageSuffix(const QByteArray &p_data);\n};\n} // namespace vnotex\n\n#endif // IMAGEUTILS_H\n"
  },
  {
    "path": "src/utils/pathutils.cpp",
    "content": "#include \"pathutils.h\"\n\n#include <QDebug>\n#include <QFileInfo>\n#include <QImageReader>\n#include <QRegularExpression>\n\nusing namespace vnotex;\n\nconst QString PathUtils::c_fileNameRegularExpression =\n    QStringLiteral(\"\\\\A(?:[^\\\\\\\\/:\\\\*\\\\?\\\"<>\\\\|\\\\s]| )+\\\\z\");\n\nQString PathUtils::parentDirPath(const QString &p_path) {\n  if (p_path.isEmpty()) {\n    return p_path;\n  }\n\n  QFileInfo info(p_path);\n  return cleanPath(info.absolutePath());\n}\n\nQString PathUtils::dirOrParentDirPath(const QString &p_path) {\n  if (p_path.isEmpty()) {\n    return p_path;\n  }\n\n  QFileInfo info(p_path);\n  if (info.isDir()) {\n    return p_path;\n  } else {\n    return info.absolutePath();\n  }\n}\n\nbool PathUtils::isEmptyDir(const QString &p_path) {\n  QFileInfo fi(p_path);\n  if (!fi.exists()) {\n    return true;\n  }\n\n  return fi.isDir() && QDir(p_path).isEmpty();\n}\n\nQString PathUtils::concatenateFilePath(const QString &p_dirPath, const QString &p_name) {\n  QString dirPath = cleanPath(p_dirPath);\n  if (p_name.isEmpty()) {\n    return dirPath;\n  }\n\n  if (dirPath.isEmpty()) {\n    return p_name;\n  }\n\n  return dirPath + \"/\" + p_name;\n}\n\nQString PathUtils::dirName(const QString &p_path) {\n  Q_ASSERT(!QFileInfo::exists(p_path) || QFileInfo(p_path).isDir());\n  return QDir(p_path).dirName();\n}\n\nQString PathUtils::fileName(const QString &p_path) {\n  QFileInfo fi(p_path);\n  return fi.fileName();\n}\n\nQString PathUtils::fileNameCheap(const QString &p_path) {\n  int idx = p_path.lastIndexOf(QRegularExpression(\"[\\\\\\\\/]\"));\n  if (idx == -1) {\n    return p_path;\n  }\n  return p_path.mid(idx + 1);\n}\n\nQString PathUtils::normalizePath(const QString &p_path) {\n  Q_ASSERT(isLocalFile(p_path));\n\n  auto absPath = QDir::cleanPath(QDir(p_path).absolutePath());\n#if defined(Q_OS_WIN)\n  return absPath.toLower();\n#else\n  return absPath;\n#endif\n}\n\nbool PathUtils::areSamePaths(const QString &p_a, const QString &p_b) {\n  return normalizePath(p_a) == normalizePath(p_b);\n}\n\nbool PathUtils::pathContains(const QString &p_dir, const QString &p_path) {\n  auto rel = relativePath(p_dir, p_path);\n  if (rel.startsWith(QStringLiteral(\"../\")) || rel == QStringLiteral(\"..\")) {\n    return false;\n  }\n\n  if (QFileInfo(rel).isAbsolute()) {\n    return false;\n  }\n\n  return true;\n}\n\nbool PathUtils::isLegalFileName(const QString &p_name) {\n  QRegularExpression nameRe(c_fileNameRegularExpression);\n  auto match = nameRe.match(p_name);\n  return match.hasMatch();\n}\n\nbool PathUtils::isLegalPath(const QString &p_path) {\n  // Ensure each part of the @p_path is a valid file name until we come to\n  // an existing parent directory.\n  if (p_path.isEmpty()) {\n    return false;\n  }\n\n  if (QFileInfo::exists(p_path)) {\n#if defined(Q_OS_WIN)\n    // On Windows, \"/\" and \":\" will also make exists() return true.\n    if (p_path.startsWith('/') || p_path == \":\") {\n      return false;\n    }\n#endif\n    return true;\n  }\n\n  bool ret = false;\n  QString basePath = parentDirPath(p_path);\n  QString name = dirName(p_path);\n  QRegularExpression nameRegExp(c_fileNameRegularExpression);\n  while (!name.isEmpty()) {\n    auto match = nameRegExp.match(name);\n    if (!match.hasMatch()) {\n      break;\n    }\n\n    if (QFileInfo::exists(basePath)) {\n      ret = true;\n#if defined(Q_OS_WIN)\n      // On Windows, \"/\" and \":\" will also make exists() return true.\n      if (basePath.startsWith('/') || basePath == \":\") {\n        ret = false;\n      }\n#endif\n      break;\n    }\n\n    basePath = parentDirPath(basePath);\n    name = dirName(basePath);\n  }\n\n  return ret;\n}\n\nQString PathUtils::relativePath(const QString &p_dir, const QString &p_path) {\n  QDir dir(p_dir);\n  return cleanPath(dir.relativeFilePath(p_path));\n}\n\nQUrl PathUtils::pathToUrl(const QString &p_path) {\n  // Need to judge the path: Url, local file, resource file.\n  QUrl url;\n  QFileInfo pathInfo(p_path);\n  if (pathInfo.exists()) {\n    if (pathInfo.isNativePath()) {\n      // Local file.\n      url = QUrl::fromLocalFile(p_path);\n    } else {\n      // Resource file.\n      url = QUrl(QStringLiteral(\"qrc\") + p_path);\n    }\n  } else {\n    // Url.\n    url = QUrl(p_path);\n  }\n\n  return url;\n}\n\nQString PathUtils::urlToPath(const QUrl &p_url) {\n  if (p_url.isLocalFile()) {\n    return p_url.toLocalFile();\n  } else {\n    return p_url.toString();\n  }\n}\n\nQString PathUtils::encodeSpacesInPath(const QString &p_path) {\n  QString tmp(p_path);\n  tmp.replace(QLatin1Char(' '), QStringLiteral(\"%20\"));\n  return tmp;\n}\n\nvoid PathUtils::prependDotIfRelative(QString &p_path) {\n  if (QDir::isRelativePath(p_path) && !p_path.startsWith(QStringLiteral(\".\"))) {\n    p_path.prepend(QStringLiteral(\"./\"));\n  }\n}\n\nQString PathUtils::removeUrlParameters(const QString &p_url) {\n  int idx = p_url.indexOf(QLatin1Char('?'));\n  if (idx > -1) {\n    return p_url.left(idx);\n  }\n  return p_url;\n}\n\nbool PathUtils::isImageUrl(const QString &p_url) {\n  QFileInfo info(removeUrlParameters(p_url));\n  return QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1());\n}\n\nbool PathUtils::isDir(const QString &p_path) { return QFileInfo(p_path).isDir(); }\n\nbool PathUtils::isLocalFile(const QString &p_path) {\n  if (p_path.isEmpty()) {\n    return true;\n  }\n\n  QRegularExpression regExp(\"^(?:ftp|http|https)://\");\n  if (regExp.match(p_path).hasMatch()) {\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/utils/pathutils.h",
    "content": "#ifndef PATHUTILS_H\n#define PATHUTILS_H\n\n#include <QDir>\n#include <QString>\n#include <QUrl>\n\nnamespace vnotex {\nclass PathUtils {\npublic:\n  PathUtils() = delete;\n\n  static QString cleanPath(const QString &p_path) { return QDir::cleanPath(p_path); }\n\n  // See testParentDirPath().\n  static QString parentDirPath(const QString &p_path);\n\n  // Return @p_path if it is a dir. Otherwise, return its parent dir.\n  static QString dirOrParentDirPath(const QString &p_path);\n\n  // Whether @p_path is a dir.\n  static bool isDir(const QString &p_path);\n\n  // Whether @p_folderPath is an empty directory.\n  static bool isEmptyDir(const QString &p_path);\n\n  // Concatenate @p_dirPath and @p_name.\n  static QString concatenateFilePath(const QString &p_dirPath, const QString &p_name);\n\n  // Get dir name of @p_path directory.\n  static QString dirName(const QString &p_path);\n\n  // Get file name of @p_path file/directory.\n  static QString fileName(const QString &p_path);\n\n  static QString fileNameCheap(const QString &p_path);\n\n  static QString absolutePath(const QString &p_path) { return QDir(p_path).absolutePath(); }\n\n  // Normalize @p_path for comparision.\n  static QString normalizePath(const QString &p_path);\n\n  // Whether two paths point to the same file/directory.\n  static bool areSamePaths(const QString &p_a, const QString &p_b);\n\n  // Whether @p_dir contains @p_path.\n  static bool pathContains(const QString &p_dir, const QString &p_path);\n\n  static bool isLegalFileName(const QString &p_name);\n\n  static bool isLegalPath(const QString &p_path);\n\n  // Return relative path of @p_path to @p_dir.\n  static QString relativePath(const QString &p_dir, const QString &p_path);\n\n  static QUrl pathToUrl(const QString &p_path);\n\n  static QString urlToPath(const QUrl &p_url);\n\n  static QString encodeSpacesInPath(const QString &p_path);\n\n  static void prependDotIfRelative(QString &p_path);\n\n  static QString removeUrlParameters(const QString &p_url);\n\n  static bool isImageUrl(const QString &p_url);\n\n  static bool isLocalFile(const QString &p_path);\n\n  // Regular expression string for file/folder name.\n  // Forbidden chars: \\/:*?\"<>| and whitespaces except spaces.\n  static const QString c_fileNameRegularExpression;\n};\n} // namespace vnotex\n\n#endif // PATHUTILS_H\n"
  },
  {
    "path": "src/utils/printutils.cpp",
    "content": "#include \"printutils.h\"\n\n#include <QPrintDialog>\n#include <QPrinter>\n\nusing namespace vnotex;\n\nQSharedPointer<QPrinter> PrintUtils::promptForPrint(bool p_printSelectionEnabled,\n                                                    QWidget *p_parent) {\n  auto printer = QSharedPointer<QPrinter>::create();\n\n  QPrintDialog dialog(printer.data(), p_parent);\n  if (p_printSelectionEnabled) {\n    dialog.setOption(QAbstractPrintDialog::PrintSelection);\n  }\n\n  if (dialog.exec() == QDialog::Accepted) {\n    return printer;\n  }\n\n  return nullptr;\n}\n"
  },
  {
    "path": "src/utils/printutils.h",
    "content": "#ifndef PRINTUTILS_H\n#define PRINTUTILS_H\n\n#include <QSharedPointer>\n\nclass QPrinter;\nclass QWidget;\n\nnamespace vnotex {\nclass PrintUtils {\npublic:\n  PrintUtils() = delete;\n\n  // Return null if user cancel the print.\n  static QSharedPointer<QPrinter> promptForPrint(bool p_printSelectionEnabled, QWidget *p_parent);\n};\n} // namespace vnotex\n\n#endif // PRINTUTILS_H\n"
  },
  {
    "path": "src/utils/processutils.cpp",
    "content": "#include \"processutils.h\"\n\n#include <QDebug>\n#include <QProcess>\n#include <QScopedPointer>\n\n#include \"utils.h\"\n\nusing namespace vnotex;\n\nProcessUtils::State ProcessUtils::start(const QString &p_program, const QStringList &p_args,\n                                        const QByteArray &p_stdIn, int &p_exitCodeOnSuccess,\n                                        QByteArray &p_stdOut, QByteArray &p_stdErr) {\n  QScopedPointer<QProcess> proc(new QProcess());\n  proc->start(p_program, p_args);\n  return handleProcess(proc.data(), p_stdIn, p_exitCodeOnSuccess, p_stdOut, p_stdErr);\n}\n\nProcessUtils::State ProcessUtils::handleProcess(QProcess *p_process, const QByteArray &p_stdIn,\n                                                int &p_exitCodeOnSuccess, QByteArray &p_stdOut,\n                                                QByteArray &p_stdErr) {\n  if (!p_process->waitForStarted()) {\n    return State::FailedToStart;\n  }\n\n  if (!p_stdIn.isEmpty()) {\n    if (p_process->write(p_stdIn) == -1) {\n      p_process->closeWriteChannel();\n      qWarning() << \"failed to write to stdin of QProcess\" << p_process->errorString();\n      return State::FailedToWrite;\n    } else {\n      p_process->closeWriteChannel();\n    }\n  }\n\n  p_process->waitForFinished();\n\n  State state = State::Succeeded;\n  if (p_process->exitStatus() == QProcess::CrashExit) {\n    state = State::Crashed;\n  } else {\n    p_exitCodeOnSuccess = p_process->exitCode();\n  }\n\n  p_stdOut = p_process->readAllStandardOutput();\n  p_stdErr = p_process->readAllStandardError();\n  return state;\n}\n\nQStringList ProcessUtils::parseCombinedArgString(const QString &p_args) {\n  QStringList args;\n  QString tmp;\n  int quoteCount = 0;\n  bool inQuote = false;\n\n  // Handle quoting.\n  // Tokens can be surrounded by double quotes \"hello world\".\n  // Three consecutive double quotes represent the quote character itself.\n  for (int i = 0; i < p_args.size(); ++i) {\n    if (p_args.at(i) == QLatin1Char('\"')) {\n      ++quoteCount;\n      if (quoteCount == 3) {\n        // Third consecutive quote.\n        quoteCount = 0;\n        tmp += p_args.at(i);\n      }\n\n      continue;\n    }\n\n    if (quoteCount) {\n      if (quoteCount == 1) {\n        inQuote = !inQuote;\n      }\n\n      quoteCount = 0;\n    }\n\n    if (!inQuote && p_args.at(i).isSpace()) {\n      if (!tmp.isEmpty()) {\n        args += tmp;\n        tmp.clear();\n      }\n    } else {\n      tmp += p_args.at(i);\n    }\n  }\n\n  if (!tmp.isEmpty()) {\n    args += tmp;\n  }\n\n  return args;\n}\n\nQString ProcessUtils::combineArgString(const QStringList &p_args) {\n  QString argStr;\n  for (const auto &arg : p_args) {\n    QString tmp(arg);\n    tmp.replace(\"\\\"\", \"\\\"\\\"\\\"\");\n    if (tmp.contains(' ')) {\n      tmp = '\"' + tmp + '\"';\n    }\n\n    if (argStr.isEmpty()) {\n      argStr = tmp;\n    } else {\n      argStr = argStr + ' ' + tmp;\n    }\n  }\n\n  return argStr;\n}\n\nProcessUtils::State ProcessUtils::start(const QString &p_program, const QStringList &p_args,\n                                        const std::function<void(const QString &)> &p_logger,\n                                        const bool &p_askedToStop) {\n  QProcess proc;\n  proc.start(p_program, p_args);\n  return handleProcess(&proc, p_logger, p_askedToStop);\n}\n\nProcessUtils::State ProcessUtils::start(const QString &p_command,\n                                        const std::function<void(const QString &)> &p_logger,\n                                        const bool &p_askedToStop) {\n  QProcess proc;\n  proc.start(p_command);\n  return handleProcess(&proc, p_logger, p_askedToStop);\n}\n\nProcessUtils::State\nProcessUtils::handleProcess(QProcess *p_process,\n                            const std::function<void(const QString &)> &p_logger,\n                            const bool &p_askedToStop) {\n  if (!p_process->waitForStarted()) {\n    return State::FailedToStart;\n  }\n\n  while (p_process->state() != QProcess::NotRunning) {\n    Utils::sleepWait(100);\n\n    auto outBa = p_process->readAllStandardOutput();\n    auto errBa = p_process->readAllStandardError();\n    QString msg;\n    if (!outBa.isEmpty()) {\n      msg += QString::fromLocal8Bit(outBa);\n    }\n    if (!errBa.isEmpty()) {\n      msg += QString::fromLocal8Bit(errBa);\n    }\n    if (!msg.isEmpty()) {\n      p_logger(msg);\n    }\n\n    if (p_askedToStop) {\n      break;\n    }\n  }\n\n  return p_process->exitStatus() == QProcess::NormalExit ? State::Succeeded : State::Crashed;\n}\n\nvoid ProcessUtils::startDetached(const QString &p_command) {\n  Q_ASSERT(!p_command.isEmpty());\n  auto process = new QProcess();\n  QObject::connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), process,\n                   &QProcess::deleteLater);\n  process->start(p_command);\n}\n"
  },
  {
    "path": "src/utils/processutils.h",
    "content": "#ifndef PROCESSUTILS_H\n#define PROCESSUTILS_H\n\n#include <functional>\n\n#include <QByteArray>\n#include <QStringList>\n\nclass QProcess;\n\nnamespace vnotex {\nclass ProcessUtils {\npublic:\n  enum State { Succeeded, Crashed, FailedToStart, FailedToWrite };\n\n  ProcessUtils() = delete;\n\n  static State start(const QString &p_program, const QStringList &p_args, const QByteArray &p_stdIn,\n                     int &p_exitCodeOnSuccess, QByteArray &p_stdOut, QByteArray &p_stdErr);\n\n  static State start(const QString &p_program, const QStringList &p_args,\n                     const std::function<void(const QString &)> &p_logger,\n                     const bool &p_askedToStop);\n\n  static State start(const QString &p_command, const std::function<void(const QString &)> &p_logger,\n                     const bool &p_askedToStop);\n\n  static void startDetached(const QString &p_command);\n\n  // Copied from QProcess code.\n  static QStringList parseCombinedArgString(const QString &p_args);\n\n  static QString combineArgString(const QStringList &p_args);\n\nprivate:\n  static State handleProcess(QProcess *p_process, const QByteArray &p_stdIn,\n                             int &p_exitCodeOnSuccess, QByteArray &p_stdOut, QByteArray &p_stdErr);\n\n  static State handleProcess(QProcess *p_process,\n                             const std::function<void(const QString &)> &p_logger,\n                             const bool &p_askedToStop);\n};\n} // namespace vnotex\n\n#endif // PROCESSUTILS_H\n"
  },
  {
    "path": "src/utils/urldragdroputils.cpp",
    "content": "#include \"urldragdroputils.h\"\n\n#include <QDragEnterEvent>\n#include <QDropEvent>\n#include <QFileInfo>\n#include <QMimeData>\n\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nbool UrlDragDropUtils::handleDragEnterEvent(QDragEnterEvent *p_event) {\n  if (p_event->mimeData()->hasFormat(QStringLiteral(\"text/uri-list\"))) {\n    p_event->acceptProposedAction();\n    return true;\n  }\n\n  return false;\n}\n\nbool UrlDragDropUtils::handleDropEvent(QDropEvent *p_event,\n                                       std::function<void(const QStringList &)> p_func) {\n  const QMimeData *mime = p_event->mimeData();\n  if (mime->hasFormat(QStringLiteral(\"text/uri-list\")) && mime->hasUrls()) {\n    QStringList files;\n    const auto urls = mime->urls();\n    for (const auto &url : urls) {\n      if (url.isLocalFile()) {\n        QFileInfo info(url.toLocalFile());\n        if (info.exists() && info.isFile()) {\n          files << PathUtils::cleanPath(info.absoluteFilePath());\n        }\n      }\n    }\n\n    p_func(files);\n\n    p_event->acceptProposedAction();\n    return true;\n  }\n\n  return false;\n}\n"
  },
  {
    "path": "src/utils/urldragdroputils.h",
    "content": "#ifndef URLDRAGDROPUTILS_H\n#define URLDRAGDROPUTILS_H\n\n#include <functional>\n\n#include <QStringList>\n\nclass QDragEnterEvent;\nclass QDropEvent;\n\nnamespace vnotex {\n// Help to handle Url-related Drag&Drop events.\nclass UrlDragDropUtils {\npublic:\n  UrlDragDropUtils() = delete;\n\n  static bool handleDragEnterEvent(QDragEnterEvent *p_event);\n\n  static bool handleDropEvent(QDropEvent *p_event, std::function<void(const QStringList &)> p_func);\n};\n} // namespace vnotex\n\n#endif // URLDRAGDROPUTILS_H\n"
  },
  {
    "path": "src/utils/utils.cpp",
    "content": "#include \"utils.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QElapsedTimer>\n#include <QFontDatabase>\n#include <QJsonArray>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QKeySequence>\n#include <QLocale>\n#include <QPainter>\n#include <QRegularExpression>\n#include <QSvgRenderer>\n#include <QWidget>\n\n#include <cmath>\n\nusing namespace vnotex;\n\nvoid Utils::sleepWait(int p_milliseconds) {\n  if (p_milliseconds <= 0) {\n    return;\n  }\n\n  QElapsedTimer t;\n  t.start();\n  while (t.elapsed() < p_milliseconds) {\n    QCoreApplication::processEvents();\n  }\n}\n\nvoid Utils::appendMsg(QString &p_msg, const QString &p_new) {\n  if (p_msg.isEmpty()) {\n    p_msg = p_new;\n  } else {\n    p_msg += '\\n' + p_new;\n  }\n}\n\nQString Utils::dateTimeString(const QDateTime &p_dateTime) {\n  QLocale locale;\n  return locale.toString(p_dateTime.date()) + \" \" + p_dateTime.time().toString(Qt::TextDate);\n}\n\nQString Utils::dateTimeStringUniform(const QDateTime &p_dateTime) {\n  return p_dateTime.toString(Qt::ISODate);\n}\n\nQDateTime Utils::dateTimeFromStringUniform(const QString &p_str) {\n  return QDateTime::fromString(p_str, Qt::ISODate);\n}\n\nQChar Utils::keyToChar(int p_key, bool p_lowerCase) {\n  auto keyStr = QKeySequence(p_key).toString();\n  if (keyStr.size() == 1) {\n    return p_lowerCase ? keyStr[0].toLower() : keyStr[0];\n  }\n\n  return QChar();\n}\n\nQString Utils::pickAvailableFontFamily(const QStringList &p_families) {\n#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))\n  auto availableFonts = QFontDatabase().families();\n#else\n  auto availableFonts = QFontDatabase::families();\n#endif\n\n  for (const auto &f : p_families) {\n    auto family = f.trimmed();\n    if (family.isEmpty()) {\n      continue;\n    }\n\n    QRegularExpression regExp(\"\\\\[.*\\\\]\");\n    for (auto availableFont : availableFonts) {\n      availableFont.remove(regExp);\n      availableFont = availableFont.trimmed();\n      if (family == availableFont || family.toLower() == availableFont.toLower()) {\n        return availableFont;\n      }\n    }\n  }\n\n  return QString();\n}\n\nQPixmap Utils::svgToPixmap(const QByteArray &p_content, QRgb p_background, qreal p_scaleFactor) {\n  QSvgRenderer renderer(p_content);\n  QSize deSz = renderer.defaultSize();\n  if (p_scaleFactor > 0) {\n    deSz *= p_scaleFactor;\n  }\n\n  QPixmap pm(deSz);\n  if (p_background == 0x0) {\n    // Fill a transparent background to avoid glitchy preview.\n    pm.fill(QColor(255, 255, 255, 0));\n  } else {\n    pm.fill(p_background);\n  }\n\n  QPainter painter(&pm);\n  renderer.render(&painter);\n  return pm;\n}\n\nbool Utils::fuzzyEqual(qreal p_a, qreal p_b) { return std::abs(p_a - p_b) < std::pow(10, -6); }\n\nQString Utils::boolToString(bool p_val) {\n  return p_val ? QStringLiteral(\"true\") : QStringLiteral(\"false\");\n}\n\nQString Utils::intToString(int p_val, int p_width) {\n  auto str = QString::number(p_val);\n  if (str.size() < p_width) {\n    str.prepend(QString(p_width - str.size(), QLatin1Char('0')));\n  }\n  return str;\n}\n\nQByteArray Utils::toJsonString(const QJsonObject &p_obj) {\n  QJsonDocument doc(p_obj);\n  return doc.toJson(QJsonDocument::Compact);\n}\n\nQJsonObject Utils::fromJsonString(const QByteArray &p_data) {\n  return QJsonDocument::fromJson(p_data).object();\n}\n\nQJsonValue Utils::parseAndReadJson(const QJsonObject &p_obj, const QString &p_exp) {\n  // abc[0] or abc.\n  QRegularExpression regExp(R\"(^([^\\[\\]\\s]+)(?:\\[(\\d+)\\])?$)\");\n\n  QJsonValue val(p_obj);\n\n  bool valid = true;\n  const auto tokens = p_exp.split(QLatin1Char('.'));\n  for (int i = 0; i < tokens.size(); ++i) {\n    const auto &token = tokens[i];\n    if (token.isEmpty()) {\n      continue;\n    }\n\n    auto match = regExp.match(token);\n    if (!match.hasMatch()) {\n      valid = false;\n      break;\n    }\n\n    const auto key = match.captured(1);\n    const auto obj = val.toObject();\n    if (obj.contains(key)) {\n      val = obj.value(key);\n    } else {\n      valid = false;\n      break;\n    }\n\n    if (!match.captured(2).isEmpty()) {\n      // Array.\n      const auto arr = val.toArray();\n      int idx = match.captured(2).toInt();\n      if (idx < 0 || idx >= arr.size()) {\n        valid = false;\n        break;\n      }\n\n      val = arr[idx];\n    }\n  }\n\n  if (!valid) {\n    qWarning() << \"invalid expression to parse for JSON\" << p_exp;\n    return QJsonValue();\n  }\n\n  return val;\n}\n\nQColor Utils::toColor(const QString &p_color) {\n  // rgb(123, 123, 123).\n  QRegularExpression rgbTripleRegExp(R\"(^rgb\\((\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\)$)\",\n                                     QRegularExpression::CaseInsensitiveOption);\n  auto match = rgbTripleRegExp.match(p_color);\n  if (match.hasMatch()) {\n    return QColor(match.captured(1).toInt(), match.captured(2).toInt(), match.captured(3).toInt());\n  }\n\n  return QColor(p_color);\n}\n\nQStringList Utils::toLower(const QStringList &p_list) {\n  QStringList lowerList;\n  for (const auto &ele : p_list) {\n    lowerList << ele.toLower();\n  }\n  return lowerList;\n}\n"
  },
  {
    "path": "src/utils/utils.h",
    "content": "#ifndef UTILS_H\n#define UTILS_H\n\n#include <QCoreApplication>\n#include <QDateTime>\n#include <QPixmap>\n#include <QString>\n\n#if !defined(V_ASSERT)\n#define V_ASSERT(cond) ((!(cond)) ? qt_assert(#cond, __FILE__, __LINE__) : qt_noop())\n#endif\n\n// Thanks to CGAL/cgal.\n#ifndef __has_attribute\n#define __has_attribute(x) 0 // Compatibility with non-clang compilers.\n#endif\n\n#ifndef __has_cpp_attribute\n#define __has_cpp_attribute(x) 0 // Compatibility with non-supporting compilers.\n#endif\n\nclass QWidget;\nclass QJsonObject;\n\nnamespace vnotex {\nclass Utils {\npublic:\n  Utils() = delete;\n\n  static void sleepWait(int p_milliseconds);\n\n  // Append @p_new to @p_msg as a new line.\n  static void appendMsg(QString &p_msg, const QString &p_new);\n\n  static QString dateTimeString(const QDateTime &p_dateTime);\n\n  static QString dateTimeStringUniform(const QDateTime &p_dateTime);\n\n  static QDateTime dateTimeFromStringUniform(const QString &p_str);\n\n  static QChar keyToChar(int p_key, bool p_lowerCase);\n\n  static QString pickAvailableFontFamily(const QStringList &p_families);\n\n  static QPixmap svgToPixmap(const QByteArray &p_content, QRgb p_background, qreal p_scaleFactor);\n\n  static bool fuzzyEqual(qreal p_a, qreal p_b);\n\n  static QString boolToString(bool p_val);\n\n  static QString intToString(int p_val, int p_width = 0);\n\n  static QByteArray toJsonString(const QJsonObject &p_obj);\n\n  static QJsonObject fromJsonString(const QByteArray &p_data);\n\n  // Parse @p_exp into tokens and read the target value from @p_obj.\n  // Format: obj1.obj2.arr[2].obj3.\n  static QJsonValue parseAndReadJson(const QJsonObject &p_obj, const QString &p_exp);\n\n  static QColor toColor(const QString &p_color);\n\n  static QStringList toLower(const QStringList &p_list);\n};\n} // namespace vnotex\n\n#endif // UTILS_H\n"
  },
  {
    "path": "src/utils/vxurlutils.cpp",
    "content": "#include \"vxurlutils.h\"\n\n#include <QDir>\n#include <QDirIterator>\n#include <QFile>\n#include <QTemporaryFile>\n\n#include <core/exception.h>\n#include <core/global.h>\n#include <core/notebookmgr.h>\n#include <core/vnotex.h>\n\n#include \"pathutils.h\"\n#include <QJsonArray>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QJsonParseError>\n#include <QJsonValue>\n\nusing namespace vnotex;\n\nQString VxUrlUtils::generateVxURL(const QString &p_signature, const QString &p_filePath) {\n  return QString(\"#%1:%2\").arg(p_signature, p_filePath);\n}\n\nQString VxUrlUtils::getSignatureFromVxURL(const QString &p_vxUrl) {\n  QString signature = p_vxUrl;\n  // check if file is \"#signature:fileFullName\"\n  if (signature.startsWith('#')) {\n    signature = signature.mid(1); // remove '#'\n    if (signature.contains(':')) {\n      signature = signature.split(':').first(); // get 'signature'\n      return signature;\n    }\n  } // if not 'signature', return original 'vxUrl'\n  return p_vxUrl;\n}\n\nQString VxUrlUtils::getFilePathFromVxURL(const QString &p_vxUrl) {\n  QString filePath = p_vxUrl;\n  // check if file is \"#signature:fileFullName\"\n  if (p_vxUrl.startsWith('#')) {\n    int colonPos = p_vxUrl.indexOf(':');\n    if (colonPos != -1) {\n      filePath = p_vxUrl.mid(colonPos + 1);\n      return filePath;\n    }\n  } // if not 'filePath', return original 'vxUrl'\n  return p_vxUrl;\n}\n\nQString VxUrlUtils::getFileNameFromVxURL(const QString &p_vxUrl) {\n  QString filePath = VxUrlUtils::getFilePathFromVxURL(p_vxUrl);\n\n  return PathUtils::fileName(filePath);\n}\n\nQString VxUrlUtils::getSignatureFromFilePath(const QString &p_filePath) {\n  QFileInfo fileInfo(p_filePath);\n  QString vxJsonPath;\n  QString currentFileName;\n  // get file's signature from vx.json\n  if (fileInfo.isFile()) {\n    QString dirPath = PathUtils::parentDirPath(p_filePath);\n    vxJsonPath = PathUtils::concatenateFilePath(dirPath, \"vx.json\");\n    currentFileName = PathUtils::fileName(p_filePath);\n  } else if (fileInfo.isDir()) {\n    vxJsonPath = PathUtils::concatenateFilePath(p_filePath, \"vx.json\");\n    currentFileName = PathUtils::fileName(p_filePath);\n  } else {\n    return QString();\n  }\n\n  QFile vxFile(vxJsonPath);\n  if (!vxFile.open(QIODevice::ReadOnly)) {\n    return QString();\n  }\n\n  QByteArray data = vxFile.readAll();\n  vxFile.close();\n\n  QJsonParseError parseError;\n  QJsonDocument doc = QJsonDocument::fromJson(data, &parseError);\n  if (parseError.error != QJsonParseError::NoError) {\n    return QString();\n  }\n\n  QJsonObject obj = doc.object();\n  QString signature;\n\n  if (obj.contains(\"files\") && obj[\"files\"].isArray()) {\n    QJsonArray filesArray = obj[\"files\"].toArray();\n    for (const QJsonValue &fileVal : filesArray) {\n      QJsonObject fileObj = fileVal.toObject();\n      if (fileObj[\"name\"].toString() == currentFileName) {\n        signature = fileObj[\"signature\"].toString();\n        return signature;\n      }\n    }\n  }\n\n  if (signature.isEmpty() && obj.contains(\"signature\")) {\n    signature = obj[\"signature\"].toString();\n  }\n\n  return signature;\n}\n\nQString VxUrlUtils::getFilePathFromSignature(const QString &p_startPath,\n                                             const QString &p_signature) {\n  // Find the file with the specified signature in all vx.json files under the specified directory\n  QDirIterator it(p_startPath, {\"vx.json\"}, QDir::Files | QDir::NoDotAndDotDot,\n                  QDirIterator::Subdirectories);\n\n  const QString rootPath =\n      VNoteX::getInst().getNotebookMgr().getCurrentNotebook()->getRootFolderAbsolutePath();\n  const QString recycleBinPath = PathUtils::concatenateFilePath(rootPath, \"vx_recycle_bin\");\n\n  while (it.hasNext()) {\n    const QString vxPath = it.next();\n\n    // skip vx.json in recycle bin\n    if (vxPath.endsWith(\"vx_recycle_bin/vx.json\") || vxPath.startsWith(recycleBinPath)) {\n      continue;\n    }\n\n    QFile vxFile(vxPath);\n    if (!vxFile.open(QIODevice::ReadOnly)) {\n      continue;\n    }\n\n    const QByteArray data = vxFile.readAll();\n    vxFile.close();\n\n    QJsonParseError parseError;\n    const QJsonDocument doc = QJsonDocument::fromJson(data, &parseError);\n    if (parseError.error != QJsonParseError::NoError) {\n      continue;\n    }\n\n    const QJsonObject json = doc.object();\n    QString signature;\n    QString fileName;\n\n    // Find signature in files array\n    const auto filesArray = json.value(\"files\").toArray();\n    for (const auto &fileItem : filesArray) {\n      const auto fileObj = fileItem.toObject();\n      if (fileObj[\"signature\"].toString() == p_signature) {\n        fileName = fileObj[\"name\"].toString();\n        signature = p_signature;\n        break;\n      }\n    }\n    // If not found in files array, use directory signature\n    if (signature.isEmpty()) {\n      signature = json.value(\"signature\").toString();\n    }\n\n    if (!signature.isEmpty() && signature == p_signature) {\n      const QString dirPath = QFileInfo(vxPath).absolutePath();\n      const QString fullPath = PathUtils::concatenateFilePath(dirPath, fileName);\n      return fullPath;\n    }\n  }\n\n  return QString();\n}\n"
  },
  {
    "path": "src/utils/vxurlutils.h",
    "content": "#ifndef VXURLUTILS_H\n#define VXURLUTILS_H\n\n#include <QByteArray>\n#include <QDir>\n#include <QJsonObject>\n#include <QString>\n\nclass QTemporaryFile;\n\nnamespace vnotex {\nclass VxUrlUtils {\npublic:\n  VxUrlUtils() = delete;\n\n  // Generate vxUrl.\n  static QString generateVxURL(const QString &p_signature, const QString &p_filePath);\n\n  // Get signature from vxUrl.\n  static QString getSignatureFromVxURL(const QString &p_vxUrl);\n\n  // Get file name from vxUrl.\n  static QString getFileNameFromVxURL(const QString &p_vxUrl);\n\n  // Get file path from vxUrl.\n  static QString getFilePathFromVxURL(const QString &p_vxUrl);\n\n  // Get signature from file path.\n  static QString getSignatureFromFilePath(const QString &p_filePath);\n\n  // Get file path from signature.\n  static QString getFilePathFromSignature(const QString &p_startPath, const QString &p_signature);\n};\n} // namespace vnotex\n\n#endif // VXURLUTILS_H\n"
  },
  {
    "path": "src/utils/webutils.cpp",
    "content": "#include \"webutils.h\"\n\n#include <QFileInfo>\n#include <QImageReader>\n#include <QUrl>\n\n#include \"fileutils.h\"\n#include \"pathutils.h\"\n#include <core/exception.h>\n#include <vtextedit/networkutils.h>\n\nusing namespace vnotex;\n\nQString WebUtils::purifyUrl(const QString &p_url) {\n  int idx = p_url.indexOf('?');\n  if (idx > -1) {\n    return p_url.left(idx);\n  }\n\n  return p_url;\n}\n\nQString WebUtils::toDataUri(const QUrl &p_url, bool p_keepTitle) {\n  QString uri;\n  Q_ASSERT(!p_url.isRelative());\n  QString file = p_url.isLocalFile() ? p_url.toLocalFile() : p_url.toString();\n  const auto filePath = purifyUrl(file);\n  const QFileInfo finfo(filePath);\n  const QString suffix(finfo.suffix().toLower());\n  if (!QImageReader::supportedImageFormats().contains(suffix.toLatin1())) {\n    return uri;\n  }\n\n  QByteArray data;\n  if (p_url.scheme() == \"https\" || p_url.scheme() == \"http\") {\n    // Download it.\n    data = vte::NetworkAccess::request(p_url).m_data;\n  } else if (finfo.exists()) {\n    data = FileUtils::readFile(filePath);\n  }\n\n  if (data.isEmpty()) {\n    return uri;\n  }\n\n  if (suffix == \"svg\") {\n    uri = QStringLiteral(\"data:image/svg+xml;utf8,%1\").arg(QString::fromUtf8(data));\n    uri.replace('\\r', \"\").replace('\\n', \"\");\n\n    // Using unescaped '#' characters in a data URI body is deprecated and\n    // will be removed in M68, around July 2018. Please use '%23' instead.\n    uri.replace(\"#\", \"%23\");\n\n    // Escape \"'\" to avoid conflict with src='...' attribute.\n    uri.replace(\"'\", \"%27\");\n\n    if (!p_keepTitle) {\n      // Remove <title>...</title>.\n      QRegularExpression reg(\"<title>.*</title>\");\n      reg.setPatternOptions(QRegularExpression::CaseInsensitiveOption);\n      uri.remove(reg);\n    }\n  } else {\n    uri = QStringLiteral(\"data:image/%1;base64,%2\").arg(suffix, QString::fromUtf8(data.toBase64()));\n  }\n\n  return uri;\n}\n\nQString WebUtils::copyResource(const QUrl &p_url, const QString &p_folder) {\n  Q_ASSERT(!p_url.isRelative());\n\n  QDir dir(p_folder);\n  if (!dir.exists()) {\n    dir.mkpath(p_folder);\n  }\n\n  QString file = p_url.isLocalFile() ? p_url.toLocalFile() : p_url.toString();\n  QFileInfo finfo(file);\n  auto fileName =\n      FileUtils::generateFileNameWithSequence(p_folder, finfo.completeBaseName(), finfo.suffix());\n  QString targetFile = dir.absoluteFilePath(fileName);\n\n  bool succ = true;\n  try {\n    if (p_url.scheme() == \"https\" || p_url.scheme() == \"http\") {\n      // Download it.\n      auto data = vte::NetworkAccess::request(p_url).m_data;\n      if (!data.isEmpty()) {\n        FileUtils::writeFile(targetFile, data);\n      }\n    } else if (finfo.exists()) {\n      // Do a copy.\n      FileUtils::copyFile(file, targetFile, false);\n    }\n  } catch (Exception &p_e) {\n    Q_UNUSED(p_e);\n    succ = false;\n  }\n\n  return succ ? targetFile : QString();\n}\n"
  },
  {
    "path": "src/utils/webutils.h",
    "content": "#ifndef WEBUTILS_H\n#define WEBUTILS_H\n\n#include <QString>\n\nclass QUrl;\n\nnamespace vnotex {\nclass WebUtils {\npublic:\n  WebUtils() = delete;\n\n  // Remove query in the url (?xxx).\n  static QString purifyUrl(const QString &p_url);\n\n  static QString toDataUri(const QUrl &p_url, bool p_keepTitle);\n\n  static QString copyResource(const QUrl &p_url, const QString &p_folder);\n};\n} // namespace vnotex\n\n#endif // WEBUTILS_H\n"
  },
  {
    "path": "src/utils/widgetutils.cpp",
    "content": "#include \"widgetutils.h\"\n\n#include <QAbstractScrollArea>\n#include <QAction>\n#include <QActionGroup>\n#include <QApplication>\n#include <QDebug>\n#include <QDesktopServices>\n#include <QFileInfo>\n#include <QFontDatabase>\n#include <QFormLayout>\n#include <QGuiApplication>\n#include <QKeyEvent>\n#include <QKeySequence>\n#include <QLayout>\n#include <QLineEdit>\n#include <QListView>\n#include <QMenu>\n#include <QModelIndex>\n#include <QPushButton>\n#include <QScreen>\n#include <QScrollArea>\n#include <QScrollBar>\n#include <QShortcut>\n#include <QSplitter>\n#include <QStyle>\n#include <QTimer>\n#include <QWidget>\n\n#include <core/global.h>\n#include <widgets/mainwindow.h>\n#include <widgets/messageboxhelper.h>\n\nusing namespace vnotex;\n\nvoid WidgetUtils::setPropertyDynamically(QWidget *p_widget, const char *p_prop,\n                                         const QVariant &p_val) {\n  p_widget->setProperty(p_prop, p_val);\n  updateStyle(p_widget);\n}\n\nvoid WidgetUtils::updateStyle(QWidget *p_widget) {\n  p_widget->style()->unpolish(p_widget);\n  p_widget->style()->polish(p_widget);\n  p_widget->update();\n}\n\nqreal WidgetUtils::calculateScaleFactor(const QScreen *p_screen) {\n  static qreal factor = -1;\n\n  if (factor < 0 || p_screen) {\n    auto screen = p_screen ? p_screen : QGuiApplication::primaryScreen();\n    factor = screen->devicePixelRatio();\n    qDebug() << screen->name() << \"dpi\" << factor;\n  }\n\n  return factor;\n}\n\nbool WidgetUtils::isScrollBarVisible(QAbstractScrollArea *p_widget, bool p_horizontal) {\n  auto scrollBar = p_horizontal ? p_widget->horizontalScrollBar() : p_widget->verticalScrollBar();\n  if (scrollBar && scrollBar->isVisible() && scrollBar->minimum() != scrollBar->maximum()) {\n    return true;\n  }\n\n  return false;\n}\n\nQSize WidgetUtils::availableScreenSize(QWidget *p_widget) {\n  return p_widget->screen()->availableGeometry().size();\n}\n\nvoid WidgetUtils::openUrlByDesktop(const QUrl &p_url) {\n  const auto scheme = p_url.scheme();\n  if (scheme != \"http\" && scheme != \"https\" &&\n      !(p_url.isLocalFile() && QFileInfo(p_url.toLocalFile()).isDir())) {\n    // Prompt for user.\n    int ret = MessageBoxHelper::questionYesNo(\n        MessageBoxHelper::Warning,\n        MainWindow::tr(\"Are you sure to open link (%1)?\").arg(p_url.toString()),\n        MainWindow::tr(\"Malicious link might do harm to your device.\"), QString(), nullptr);\n    if (ret == QMessageBox::No) {\n      return;\n    }\n  }\n\n  QDesktopServices::openUrl(p_url);\n}\n\nbool WidgetUtils::processKeyEventLikeVi(QWidget *p_widget, QKeyEvent *p_event,\n                                        QWidget *p_escTargetWidget) {\n  Q_ASSERT(p_widget);\n\n  bool eventHandled = false;\n  int key = p_event->key();\n  int modifiers = p_event->modifiers();\n  if (!p_escTargetWidget) {\n    p_escTargetWidget = p_widget;\n  }\n\n  switch (key) {\n  case Qt::Key_BracketLeft: {\n    if (isViControlModifier(modifiers)) {\n      auto escEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier);\n      QCoreApplication::postEvent(p_escTargetWidget, escEvent);\n      eventHandled = true;\n    }\n\n    break;\n  }\n\n  case Qt::Key_J: {\n    if (isViControlModifier(modifiers)) {\n      // The event must be allocated on the heap since the post event queue will take ownership\n      // of the event and delete it once it has been posted.\n      auto downEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);\n      QCoreApplication::postEvent(p_widget, downEvent);\n      eventHandled = true;\n    }\n\n    break;\n  }\n\n  case Qt::Key_K: {\n    if (isViControlModifier(modifiers)) {\n      auto upEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);\n      QCoreApplication::postEvent(p_widget, upEvent);\n      eventHandled = true;\n    }\n\n    break;\n  }\n\n  case Qt::Key_H: {\n    if (isViControlModifier(modifiers)) {\n      auto upEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);\n      QCoreApplication::postEvent(p_widget, upEvent);\n      eventHandled = true;\n    }\n\n    break;\n  }\n\n  case Qt::Key_L: {\n    if (isViControlModifier(modifiers)) {\n      auto upEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier);\n      QCoreApplication::postEvent(p_widget, upEvent);\n      eventHandled = true;\n    }\n\n    break;\n  }\n\n  default:\n    break;\n  }\n\n  if (eventHandled) {\n    p_event->accept();\n  }\n\n  return eventHandled;\n}\n\nbool WidgetUtils::isViControlModifier(int p_modifiers) {\n#if defined(Q_OS_MACOS) || defined(Q_OS_MAC)\n  return p_modifiers == Qt::MetaModifier;\n#else\n  return p_modifiers == Qt::ControlModifier;\n#endif\n}\n\nvoid WidgetUtils::clearActionGroup(QActionGroup *p_actGroup) {\n  auto actions = p_actGroup->actions();\n  for (auto action : actions) {\n    p_actGroup->removeAction(action);\n  }\n}\n\nvoid WidgetUtils::addActionShortcut(QAction *p_action, const QString &p_shortcut,\n                                    Qt::ShortcutContext p_context) {\n  QKeySequence kseq(p_shortcut);\n  if (kseq.isEmpty()) {\n    return;\n  }\n\n  p_action->setShortcut(kseq);\n  p_action->setShortcutContext(p_context);\n  p_action->setText(\n      QStringLiteral(\"%1\\t%2\").arg(p_action->text(), kseq.toString(QKeySequence::NativeText)));\n}\n\nvoid WidgetUtils::addActionShortcutText(QAction *p_action, const QString &p_shortcut) {\n  if (p_shortcut.isEmpty()) {\n    return;\n  }\n\n  QKeySequence kseq(p_shortcut);\n  if (kseq.isEmpty()) {\n    return;\n  }\n\n  p_action->setText(\n      QStringLiteral(\"%1\\t%2\").arg(p_action->text(), kseq.toString(QKeySequence::NativeText)));\n}\n\nvoid WidgetUtils::addButtonShortcutText(QPushButton *p_button, const QString &p_shortcut) {\n  if (p_shortcut.isEmpty()) {\n    return;\n  }\n\n  QKeySequence kseq(p_shortcut);\n  if (kseq.isEmpty()) {\n    return;\n  }\n\n  p_button->setText(\n      QStringLiteral(\"%1 (%2)\").arg(p_button->text(), kseq.toString(QKeySequence::NativeText)));\n}\n\nvoid WidgetUtils::updateSize(QWidget *p_widget) {\n  p_widget->adjustSize();\n  p_widget->updateGeometry();\n}\n\nvoid WidgetUtils::resizeToHideScrollBarLater(QScrollArea *p_scroll, bool p_vertical,\n                                             bool p_horizontal) {\n  QTimer::singleShot(200, p_scroll, [p_scroll, p_vertical, p_horizontal]() {\n    WidgetUtils::resizeToHideScrollBar(p_scroll, p_vertical, p_horizontal);\n  });\n}\n\nvoid WidgetUtils::resizeToHideScrollBar(QScrollArea *p_scroll, bool p_vertical, bool p_horizontal) {\n  bool changed = false;\n  auto parentWidget = p_scroll->parentWidget();\n\n  if (p_horizontal && WidgetUtils::isScrollBarVisible(p_scroll, true)) {\n    auto scrollBar = p_scroll->horizontalScrollBar();\n    auto delta = scrollBar->maximum() - scrollBar->minimum();\n    auto availableSize = WidgetUtils::availableScreenSize(p_scroll);\n\n    if (parentWidget) {\n      int newWidth = parentWidget->width() + delta;\n      if (newWidth <= availableSize.width()) {\n        changed = true;\n        p_scroll->resize(p_scroll->width() + delta, p_scroll->height());\n        auto geo = parentWidget->geometry();\n        parentWidget->setGeometry(geo.x() - delta / 2, geo.y(), newWidth, geo.height());\n      }\n    } else {\n      int newWidth = p_scroll->width() + delta;\n      if (newWidth <= availableSize.width()) {\n        changed = true;\n        p_scroll->resize(newWidth, p_scroll->height());\n      }\n    }\n  }\n\n  if (p_vertical && WidgetUtils::isScrollBarVisible(p_scroll, false)) {\n    auto scrollBar = p_scroll->verticalScrollBar();\n    auto delta = scrollBar->maximum() - scrollBar->minimum();\n    auto availableSize = WidgetUtils::availableScreenSize(p_scroll);\n\n    if (parentWidget) {\n      int newHeight = parentWidget->height() + delta;\n      if (newHeight <= availableSize.height()) {\n        changed = true;\n        p_scroll->resize(p_scroll->width(), p_scroll->height() + delta);\n        auto geo = parentWidget->geometry();\n        parentWidget->setGeometry(geo.x(), geo.y() - delta / 2, geo.width(), newHeight);\n      }\n    } else {\n      int newHeight = p_scroll->height() + delta;\n      if (newHeight <= availableSize.height()) {\n        changed = true;\n        p_scroll->resize(p_scroll->width(), newHeight);\n      }\n    }\n  }\n\n  if (changed) {\n    p_scroll->updateGeometry();\n  }\n}\n\nQShortcut *WidgetUtils::createShortcut(const QString &p_shortcut, QWidget *p_widget,\n                                       Qt::ShortcutContext p_context) {\n  QKeySequence kseq(p_shortcut);\n  if (kseq.isEmpty()) {\n    return nullptr;\n  }\n\n  auto shortcut = new QShortcut(kseq, p_widget, nullptr, nullptr, p_context);\n  if (shortcut->key().isEmpty()) {\n    delete shortcut;\n    return nullptr;\n  }\n  return shortcut;\n}\n\nbool WidgetUtils::isMetaKey(int p_key) {\n  return p_key == Qt::Key_Control || p_key == Qt::Key_Shift ||\n         p_key == Qt::Key_Meta\n#if defined(Q_OS_LINUX)\n         // For mapping Caps as Ctrl in KDE.\n         || p_key == Qt::Key_CapsLock\n#endif\n         || p_key == Qt::Key_Alt;\n}\n\nQVector<QModelIndex> WidgetUtils::getVisibleIndexes(const QListView *p_view) {\n  QVector<QModelIndex> indexes;\n\n  auto firstItem = p_view->indexAt(QPoint(0, 0));\n  if (!firstItem.isValid()) {\n    return indexes;\n  }\n\n  auto lastItem = p_view->indexAt(p_view->viewport()->rect().bottomLeft());\n\n  int firstRow = firstItem.row();\n  int lastRow = lastItem.isValid() ? lastItem.row() : (p_view->model()->rowCount() - 1);\n  for (int i = firstRow; i <= lastRow; ++i) {\n    if (p_view->isRowHidden(i)) {\n      continue;\n    }\n    auto item = firstItem.siblingAtRow(i);\n    if (item.isValid()) {\n      indexes.append(item);\n    }\n  }\n\n  return indexes;\n}\n\nQString WidgetUtils::getMonospaceFont() {\n  static QString font;\n  if (font.isNull()) {\n    QStringList candidates;\n    candidates << QStringLiteral(\"YaHei Consolas Hybrid\") << QStringLiteral(\"Consolas\")\n               << QStringLiteral(\"Monaco\") << QStringLiteral(\"Andale Mono\")\n               << QStringLiteral(\"Monospace\") << QStringLiteral(\"Courier New\");\n    auto availFamilies = QFontDatabase().families();\n    for (const auto &candidate : candidates) {\n      QString family = candidate.trimmed().toLower();\n      for (auto availFamily : availFamilies) {\n        availFamily.remove(QRegularExpression(\"\\\\[.*\\\\]\"));\n        if (family == availFamily.trimmed().toLower()) {\n          font = availFamily;\n          return font;\n        }\n      }\n    }\n\n    // Fallback to current font.\n    font = QFont().family();\n  }\n\n  return font;\n}\n\nQAction *WidgetUtils::findActionByObjectName(const QList<QAction *> &p_actions,\n                                             const QString &p_objName) {\n  for (auto act : p_actions) {\n    if (act->objectName() == p_objName) {\n      return act;\n    }\n  }\n\n  return nullptr;\n}\n\n// Insert @p_action into @p_menu after action @p_after.\nvoid WidgetUtils::insertActionAfter(QMenu *p_menu, QAction *p_after, QAction *p_action) {\n  p_menu->insertAction(p_after, p_action);\n  if (p_after) {\n    p_menu->removeAction(p_after);\n    p_menu->insertAction(p_action, p_after);\n  }\n}\n\nvoid WidgetUtils::selectBaseName(QLineEdit *p_lineEdit) {\n  auto text = p_lineEdit->text();\n  int dotIndex = text.lastIndexOf(QLatin1Char('.'));\n  p_lineEdit->setSelection(0, (dotIndex == -1) ? text.size() : dotIndex);\n}\n\nvoid WidgetUtils::setContentsMargins(QLayout *p_layout) {\n  // Use 0 bottom margin to align dock widgets with the content area.\n  p_layout->setContentsMargins(CONTENTS_MARGIN, CONTENTS_MARGIN, CONTENTS_MARGIN, 0);\n}\n\nbool WidgetUtils::distributeWidgetsOfSplitter(QSplitter *p_splitter) {\n  if (!p_splitter) {\n    return false;\n  }\n\n  if (p_splitter->count() == 0) {\n    return false;\n  } else if (p_splitter->count() == 1) {\n    return true;\n  }\n\n  auto sizes = p_splitter->sizes();\n  int totalWidth = 0;\n  for (auto sz : sizes) {\n    totalWidth += sz;\n  }\n\n  int newWidth = totalWidth / sizes.size();\n  if (newWidth == 0) {\n    return false;\n  }\n\n  bool changed = false;\n  for (int i = 0; i < sizes.size(); ++i) {\n    if (sizes[i] != newWidth) {\n      sizes[i] = newWidth;\n      changed = true;\n    }\n  }\n\n  if (changed) {\n    p_splitter->setSizes(sizes);\n    return true;\n  }\n\n  return false;\n}\n\nvoid WidgetUtils::clearLayout(QFormLayout *p_layout) {\n  for (int i = p_layout->rowCount() - 1; i >= 0; --i) {\n    p_layout->removeRow(i);\n  }\n}\n\n// Different from QWidget::isAncestorOf(): unnecessary to be within the same window.\nbool WidgetUtils::isOrAncestorOf(const QWidget *p_widget, const QWidget *p_child) {\n  Q_ASSERT(p_widget);\n\n  if (!p_child) {\n    return false;\n  }\n\n  const QWidget *pa = p_child;\n  while (pa) {\n    if (pa == p_widget) {\n      return true;\n    }\n    pa = pa->parentWidget();\n  }\n\n  return false;\n}\n"
  },
  {
    "path": "src/utils/widgetutils.h",
    "content": "#ifndef WIDGETUTILS_H\n#define WIDGETUTILS_H\n\n#include <QList>\n#include <QMessageBox>\n#include <QModelIndex>\n#include <QSize>\n#include <QVariant>\n#include <QtGlobal>\n\nclass QWidget;\nclass QAbstractScrollArea;\nclass QKeyEvent;\nclass QActionGroup;\nclass QAction;\nclass QScrollArea;\nclass QListView;\nclass QMenu;\nclass QShortcut;\nclass QLineEdit;\nclass QLayout;\nclass QPushButton;\nclass QSplitter;\nclass QScreen;\nclass QFormLayout;\n\nnamespace vnotex {\nclass WidgetUtils {\npublic:\n  WidgetUtils() = delete;\n\n  static void setPropertyDynamically(QWidget *p_widget, const char *p_prop,\n                                     const QVariant &p_val = QVariant());\n\n  static void updateStyle(QWidget *p_widget);\n\n  static qreal calculateScaleFactor(const QScreen *p_screen = nullptr);\n\n  static bool isScrollBarVisible(QAbstractScrollArea *p_widget, bool p_horizontal);\n\n  static QSize availableScreenSize(QWidget *p_widget);\n\n  static void openUrlByDesktop(const QUrl &p_url);\n\n  // Given @p_event, try to process it by injecting proper event instead if it\n  // triggers Vi operation.\n  // Return true if @p_event is handled properly.\n  // @p_escTargetWidget: the widget to accept the ESC event.\n  static bool processKeyEventLikeVi(QWidget *p_widget, QKeyEvent *p_event,\n                                    QWidget *p_escTargetWidget = nullptr);\n\n  static bool isViControlModifier(int p_modifiers);\n\n  static bool isMetaKey(int p_key);\n\n  static void clearActionGroup(QActionGroup *p_actGroup);\n\n  static void addActionShortcut(QAction *p_action, const QString &p_shortcut,\n                                Qt::ShortcutContext p_context = Qt::WindowShortcut);\n\n  // Just add a shortcut text hint to the action.\n  static void addActionShortcutText(QAction *p_action, const QString &p_shortcut);\n\n  static void addButtonShortcutText(QPushButton *p_button, const QString &p_shortcut);\n\n  static QShortcut *createShortcut(const QString &p_shortcut, QWidget *p_widget,\n                                   Qt::ShortcutContext p_context = Qt::WindowShortcut);\n\n  static void updateSize(QWidget *p_widget);\n\n  static void resizeToHideScrollBarLater(QScrollArea *p_scroll, bool p_vertical, bool p_horizontal);\n\n  static QVector<QModelIndex> getVisibleIndexes(const QListView *p_view);\n\n  static QString getMonospaceFont();\n\n  static QAction *findActionByObjectName(const QList<QAction *> &p_actions,\n                                         const QString &p_objName);\n\n  static void insertActionAfter(QMenu *p_menu, QAction *p_after, QAction *p_action);\n\n  // Select the base name part of the line edit content.\n  static void selectBaseName(QLineEdit *p_lineEdit);\n\n  static void setContentsMargins(QLayout *p_layout);\n\n  static bool distributeWidgetsOfSplitter(QSplitter *p_splitter);\n\n  static void clearLayout(QFormLayout *p_layout);\n\n  static bool isOrAncestorOf(const QWidget *p_widget, const QWidget *p_child);\n\nprivate:\n  static void resizeToHideScrollBar(QScrollArea *p_scroll, bool p_vertical, bool p_horizontal);\n};\n} // namespace vnotex\n\n#endif // WIDGETUTILS_H\n"
  },
  {
    "path": "src/widgets/CMakeLists.txt",
    "content": "target_sources(vnote PRIVATE\n    attachmentdragdropareaindicator.cpp attachmentdragdropareaindicator.h\n    attachmentpopup.cpp attachmentpopup.h\n    biaction.cpp biaction.h\n    buttonpopup.cpp buttonpopup.h\n    combobox.cpp combobox.h\n    consoleviewer.cpp consoleviewer.h\n    dialogs/deleteconfirmdialog.cpp dialogs/deleteconfirmdialog.h\n    dialogs/dialog.cpp dialogs/dialog.h\n    dialogs/exportdialog.cpp dialogs/exportdialog.h\n    dialogs/filepropertiesdialog.cpp dialogs/filepropertiesdialog.h\n    dialogs/folderfilesfilterwidget.cpp dialogs/folderfilesfilterwidget.h\n    dialogs/folderpropertiesdialog.cpp dialogs/folderpropertiesdialog.h\n    dialogs/imageinsertdialog.cpp dialogs/imageinsertdialog.h\n    dialogs/importfolderdialog.cpp dialogs/importfolderdialog.h\n    dialogs/importfolderutils.cpp dialogs/importfolderutils.h\n    dialogs/importnotebookdialog.cpp dialogs/importnotebookdialog.h\n    dialogs/levellabelwithupbutton.cpp dialogs/levellabelwithupbutton.h\n    dialogs/linkinsertdialog.cpp dialogs/linkinsertdialog.h\n    dialogs/managenotebooksdialog.cpp dialogs/managenotebooksdialog.h\n    dialogs/newfolderdialog.cpp dialogs/newfolderdialog.h\n    dialogs/newnotebookdialog.cpp dialogs/newnotebookdialog.h\n    dialogs/newnotebookfromfolderdialog.cpp dialogs/newnotebookfromfolderdialog.h\n    dialogs/newnotedialog.cpp dialogs/newnotedialog.h\n    dialogs/newsnippetdialog.cpp dialogs/newsnippetdialog.h\n    dialogs/newtagdialog.cpp dialogs/newtagdialog.h\n    dialogs/nodeinfowidget.cpp dialogs/nodeinfowidget.h\n    dialogs/notebookinfowidget.cpp dialogs/notebookinfowidget.h\n    dialogs/notepropertiesdialog.cpp dialogs/notepropertiesdialog.h\n    dialogs/notetemplateselector.cpp dialogs/notetemplateselector.h\n    dialogs/renametagdialog.cpp dialogs/renametagdialog.h\n    dialogs/scrolldialog.cpp dialogs/scrolldialog.h\n    dialogs/selectdialog.cpp dialogs/selectdialog.h\n    dialogs/selectionitemwidget.cpp dialogs/selectionitemwidget.h\n    dialogs/settings/appearancepage.cpp dialogs/settings/appearancepage.h\n    dialogs/settings/editorpage.cpp dialogs/settings/editorpage.h\n    dialogs/settings/fileassociationpage.cpp dialogs/settings/fileassociationpage.h\n    dialogs/settings/generalpage.cpp dialogs/settings/generalpage.h\n    dialogs/settings/imagehostpage.cpp dialogs/settings/imagehostpage.h\n    dialogs/settings/markdowneditorpage.cpp dialogs/settings/markdowneditorpage.h\n    dialogs/settings/miscpage.cpp dialogs/settings/miscpage.h\n    dialogs/settings/newimagehostdialog.cpp dialogs/settings/newimagehostdialog.h\n    dialogs/settings/notemanagementpage.cpp dialogs/settings/notemanagementpage.h\n    dialogs/settings/quickaccesspage.cpp dialogs/settings/quickaccesspage.h\n    dialogs/settings/settingsdialog.cpp dialogs/settings/settingsdialog.h\n    dialogs/settings/settingspage.cpp dialogs/settings/settingspage.h\n    dialogs/settings/texteditorpage.cpp dialogs/settings/texteditorpage.h\n    dialogs/settings/themepage.cpp dialogs/settings/themepage.h\n    dialogs/settings/vipage.cpp dialogs/settings/vipage.h\n    dialogs/snippetinfowidget.cpp dialogs/snippetinfowidget.h\n    dialogs/snippetpropertiesdialog.cpp dialogs/snippetpropertiesdialog.h\n    dialogs/sortdialog.cpp dialogs/sortdialog.h\n    dialogs/tableinsertdialog.cpp dialogs/tableinsertdialog.h\n    dialogs/updater.cpp dialogs/updater.h\n    dialogs/viewtagsdialog.cpp dialogs/viewtagsdialog.h\n    dockwidgethelper.cpp dockwidgethelper.h\n    dragdropareaindicator.cpp dragdropareaindicator.h\n    editors/graphhelper.cpp editors/graphhelper.h\n    editors/graphvizhelper.cpp editors/graphvizhelper.h\n    editors/markdowneditor.cpp editors/markdowneditor.h\n    editors/markdowntable.cpp editors/markdowntable.h\n    editors/markdowntablehelper.cpp editors/markdowntablehelper.h\n    editors/markdownviewer.cpp editors/markdownviewer.h\n    editors/markdownvieweradapter.cpp editors/markdownvieweradapter.h\n    editors/mindmapeditor.cpp editors/mindmapeditor.h\n    editors/mindmapeditoradapter.cpp editors/mindmapeditoradapter.h\n    editors/pdfviewer.cpp editors/pdfviewer.h\n    editors/pdfvieweradapter.cpp editors/pdfvieweradapter.h\n    editors/plantumlhelper.cpp editors/plantumlhelper.h\n    editors/previewhelper.cpp editors/previewhelper.h\n    editors/statuswidget.cpp editors/statuswidget.h\n    editors/texteditor.cpp editors/texteditor.h\n    editors/webviewadapter.cpp editors/webviewadapter.h\n    editreaddiscardaction.cpp editreaddiscardaction.h\n    filesystemviewer.cpp filesystemviewer.h\n    findandreplacewidget.cpp findandreplacewidget.h\n    floatingwidget.cpp floatingwidget.h\n    framelessmainwindow/framelessmainwindow.cpp framelessmainwindow/framelessmainwindow.h\n    framelessmainwindow/framelessmainwindowimpl.h\n    framelessmainwindow/framelessmainwindowlinux.cpp framelessmainwindow/framelessmainwindowlinux.h\n    framelessmainwindow/framelessmainwindowwin.cpp framelessmainwindow/framelessmainwindowwin.h\n    fullscreentoggleaction.cpp fullscreentoggleaction.h\n    historypanel.cpp historypanel.h\n    itemproxystyle.cpp itemproxystyle.h\n    labelwithbuttonswidget.cpp labelwithbuttonswidget.h\n    lineedit.cpp lineedit.h\n    lineeditdelegate.cpp lineeditdelegate.h\n    lineeditwithsnippet.cpp lineeditwithsnippet.h\n    listwidget.cpp listwidget.h\n    locationinputwithbrowsebutton.cpp locationinputwithbrowsebutton.h\n    locationlist.cpp locationlist.h\n    mainwindow.cpp mainwindow.h\n    markdownviewwindow.cpp markdownviewwindow.h\n    messageboxhelper.cpp messageboxhelper.h\n    mindmapviewwindow.cpp mindmapviewwindow.h\n    navigationmode.cpp navigationmode.h\n    navigationmodemgr.cpp navigationmodemgr.h\n    navigationmodewrapper.h\n    notebookexplorer.cpp notebookexplorer.h\n    notebookexplorersession.cpp notebookexplorersession.h\n    notebooknodeexplorer.cpp notebooknodeexplorer.h\n    notebookselector.cpp notebookselector.h\n    outlinepopup.cpp outlinepopup.h\n    outlineprovider.cpp outlineprovider.h\n    outlineviewer.cpp outlineviewer.h\n    pdfviewwindow.cpp pdfviewwindow.h\n    propertydefs.cpp propertydefs.h\n    qtreewidgetstatecache.h\n    quickselector.cpp quickselector.h\n    searchinfoprovider.cpp searchinfoprovider.h\n    searchpanel.cpp searchpanel.h\n    simplesegmenthighlighter.cpp simplesegmenthighlighter.h\n    snippetpanel.cpp snippetpanel.h\n    statusbarhelper.cpp statusbarhelper.h\n    styleditemdelegate.cpp styleditemdelegate.h\n    systemtrayhelper.cpp systemtrayhelper.h\n    tagexplorer.cpp tagexplorer.h\n    tagpopup.cpp tagpopup.h\n    tagviewer.cpp tagviewer.h\n    textviewwindow.cpp textviewwindow.h\n    textviewwindowhelper.h\n    titlebar.cpp titlebar.h\n    titletoolbar.cpp titletoolbar.h\n    toolbarhelper.cpp toolbarhelper.h\n    toolbox.cpp toolbox.h\n    treeview.cpp treeview.h\n    treewidget.cpp treewidget.h\n    treewidgetitem.cpp treewidgetitem.h\n    viewarea.cpp viewarea.h\n    viewareasession.cpp viewareasession.h\n    viewsplit.cpp viewsplit.h\n    viewwindow.cpp viewwindow.h\n    viewwindowsession.cpp viewwindowsession.h\n    viewwindowtoolbarhelper.cpp viewwindowtoolbarhelper.h\n    webpage.cpp webpage.h\n    webviewer.cpp webviewer.h\n    widgetsfactory.cpp widgetsfactory.h\n    windowspanel.cpp windowspanel.h\n    windowsprovider.cpp windowsprovider.h\n    wordcountpopup.cpp wordcountpopup.h\n)\n"
  },
  {
    "path": "src/widgets/attachmentdragdropareaindicator.cpp",
    "content": "#include \"attachmentdragdropareaindicator.h\"\n\n#include <QDragEnterEvent>\n#include <QDropEvent>\n#include <QFileInfo>\n#include <QMimeData>\n\n#include \"viewwindow.h\"\n#include <buffer/buffer.h>\n#include <utils/pathutils.h>\n#include <utils/urldragdroputils.h>\n#include <vnotex.h>\n\nusing namespace vnotex;\n\nAttachmentDragDropAreaIndicator::AttachmentDragDropAreaIndicator(ViewWindow *p_viewWindow)\n    : m_viewWindow(p_viewWindow) {}\n\nbool AttachmentDragDropAreaIndicator::handleDragEnterEvent(QDragEnterEvent *p_event) {\n  if (isAccepted(p_event)) {\n    p_event->acceptProposedAction();\n    return true;\n  }\n  return false;\n}\n\nbool AttachmentDragDropAreaIndicator::handleDropEvent(QDropEvent *p_event) {\n  return UrlDragDropUtils::handleDropEvent(p_event, [this](const QStringList &p_files) {\n    auto buffer = m_viewWindow->getBuffer();\n    Q_ASSERT(buffer && buffer->isAttachmentSupported());\n    auto files = buffer->addAttachment(QString(), p_files);\n    if (!files.isEmpty()) {\n      VNoteX::getInst().showStatusMessageShort(\n          ViewWindow::tr(\"Attached %n file(s)\", \"\", files.size()));\n    }\n  });\n}\n\nbool AttachmentDragDropAreaIndicator::isAccepted(const QDragEnterEvent *p_event) {\n  return p_event->mimeData()->hasFormat(QStringLiteral(\"text/uri-list\"));\n}\n"
  },
  {
    "path": "src/widgets/attachmentdragdropareaindicator.h",
    "content": "#ifndef ATTACHMENTDRAGDROPAREAINDICATOR_H\n#define ATTACHMENTDRAGDROPAREAINDICATOR_H\n\n#include \"dragdropareaindicator.h\"\n\nnamespace vnotex {\nclass ViewWindow;\n\nclass AttachmentDragDropAreaIndicator : public DragDropAreaIndicatorInterface {\npublic:\n  AttachmentDragDropAreaIndicator(ViewWindow *p_viewWindow);\n\n  bool handleDragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE;\n\n  bool handleDropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE;\n\n  static bool isAccepted(const QDragEnterEvent *p_event);\n\nprivate:\n  ViewWindow *m_viewWindow = nullptr;\n};\n} // namespace vnotex\n\n#endif // ATTACHMENTDRAGDROPAREAINDICATOR_H\n"
  },
  {
    "path": "src/widgets/attachmentpopup.cpp",
    "content": "#include \"attachmentpopup.h\"\n\n#include <QFileDialog>\n#include <QHBoxLayout>\n#include <QInputDialog>\n#include <QTimer>\n#include <QToolButton>\n#include <QTreeView>\n#include <QUrl>\n#include <QVBoxLayout>\n#include <QWidgetAction>\n\n#include \"propertydefs.h\"\n\n#include <buffer/buffer.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/clipboardutils.h>\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n#include <utils/widgetutils.h>\n\n#include \"dialogs/filepropertiesdialog.h\"\n#include \"fileopenparameters.h\"\n#include \"filesystemviewer.h\"\n#include \"messageboxhelper.h\"\n#include <core/configmgr.h>\n#include <core/exception.h>\n#include <core/sessionconfig.h>\n\nusing namespace vnotex;\n\nAttachmentPopup::AttachmentPopup(QToolButton *p_btn, QWidget *p_parent)\n    : ButtonPopup(p_btn, p_parent) {\n  setupUI();\n\n  connect(this, &QMenu::aboutToShow, this, [this]() {\n    Q_ASSERT(m_buffer);\n    if (m_needUpdateAttachmentFolder) {\n      setRootFolder(m_buffer->getAttachmentFolderPath());\n    }\n\n    m_viewer->setFocus();\n  });\n}\n\nvoid AttachmentPopup::setupUI() {\n  QWidget *widget = new QWidget{};\n  auto mainLayout = new QVBoxLayout(widget);\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n\n  auto buttonsLayout = new QHBoxLayout();\n\n  {\n    // Add.\n    auto addBtn = createButton();\n\n    auto act = new QAction(\n        IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(QStringLiteral(\"add.svg\"))),\n        tr(\"Add\"), addBtn);\n    connect(act, &QAction::triggered, this, [this]() {\n      if (checkRootFolderAndSingleSelection()) {\n        // Get dest folder path before other dialogs.\n        const auto destFolderPath = getDestFolderPath();\n\n        auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n        auto files = QFileDialog::getOpenFileNames(nullptr, tr(\"Select Files As Attachments\"),\n                                                   sessionConfig.getExternalMediaDefaultPath());\n        if (files.isEmpty()) {\n          return;\n        }\n\n        sessionConfig.setExternalMediaDefaultPath(QFileInfo(files[0]).path());\n\n        addAttachments(destFolderPath, files);\n      }\n    });\n    addBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(addBtn);\n  }\n\n  {\n    // New File.\n    auto newFileBtn = createButton();\n\n    auto act = new QAction(\n        IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(QStringLiteral(\"new_file.svg\"))),\n        tr(\"New File\"), newFileBtn);\n    connect(act, &QAction::triggered, this, [this]() {\n      if (checkRootFolderAndSingleSelection()) {\n        // Get dest folder path before other dialogs.\n        const auto destFolderPath = getDestFolderPath();\n        auto name = QInputDialog::getText(this, tr(\"New Attachment\"), tr(\"File name:\"));\n        if (!name.isEmpty()) {\n          newAttachmentFile(destFolderPath, name);\n        }\n      }\n    });\n    newFileBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(newFileBtn);\n  }\n\n  {\n    // New Folder.\n    auto newFolderBtn = createButton();\n\n    auto act = new QAction(IconUtils::fetchIconWithDisabledState(\n                               themeMgr.getIconFile(QStringLiteral(\"new_folder.svg\"))),\n                           tr(\"New Folder\"), newFolderBtn);\n    connect(act, &QAction::triggered, this, [this]() {\n      if (checkRootFolderAndSingleSelection()) {\n        // Get dest folder path before other dialogs.\n        const auto destFolderPath = getDestFolderPath();\n        auto name = QInputDialog::getText(this, tr(\"New Attachment\"), tr(\"Folder name:\"));\n        if (!name.isEmpty()) {\n          newAttachmentFolder(destFolderPath, name);\n        }\n      }\n    });\n    newFolderBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(newFolderBtn);\n  }\n\n  {\n    // Open folder.\n    auto openFolderBtn = createButton();\n\n    auto act = new QAction(IconUtils::fetchIconWithDisabledState(\n                               themeMgr.getIconFile(QStringLiteral(\"open_folder.svg\"))),\n                           tr(\"Open Folder\"), openFolderBtn);\n    connect(act, &QAction::triggered, this,\n            [this]() { WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(m_viewer->rootPath())); });\n    openFolderBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(openFolderBtn);\n  }\n\n  buttonsLayout->addStretch();\n\n  {\n    // Open files.\n    m_openBtn = createButton();\n    auto act = new QAction(IconUtils::fetchIconWithDisabledState(\n                               themeMgr.getIconFile(QStringLiteral(\"open_file.svg\"))),\n                           tr(\"Open\"), m_openBtn);\n    connect(act, &QAction::triggered, this, [this]() {\n      hide();\n      const auto paths = m_viewer->getSelectedPaths();\n      for (const auto &file : paths) {\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_nodeAttachedTo = m_buffer->getNode();\n        Q_ASSERT(paras->m_nodeAttachedTo);\n        emit VNoteX::getInst().openFileRequested(file, paras);\n      }\n    });\n    m_openBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(m_openBtn);\n  }\n\n  {\n    // Delete files.\n    m_deleteBtn = createButton();\n    auto act = new QAction(\n        IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(QStringLiteral(\"delete.svg\"))),\n        tr(\"Delete\"), m_deleteBtn);\n    connect(act, &QAction::triggered, this, [this]() {\n      auto selectedPaths = m_viewer->getSelectedPaths();\n      if (selectedPaths.isEmpty()) {\n        return;\n      }\n      // Filter out children paths.\n      QStringList paths;\n      std::sort(selectedPaths.begin(), selectedPaths.end());\n      for (int i = selectedPaths.size() - 1; i >= 0; --i) {\n        bool skip = false;\n        for (int j = i - 1; j >= 0; --j) {\n          // Check if [j] is parent of [i].\n          if (selectedPaths[j].size() < selectedPaths[i].size() &&\n              selectedPaths[i].startsWith(selectedPaths[j]) &&\n              selectedPaths[i].at(selectedPaths[j].size()) == '/') {\n            skip = true;\n            break;\n          }\n        }\n\n        if (!skip) {\n          paths << selectedPaths[i];\n        }\n      }\n\n      m_buffer->removeAttachment(paths);\n    });\n    m_deleteBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(m_deleteBtn);\n  }\n\n  {\n    // Copy path.\n    m_copyPathBtn = createButton();\n    auto act = new QAction(IconUtils::fetchIconWithDisabledState(\n                               themeMgr.getIconFile(QStringLiteral(\"copy_path.svg\"))),\n                           tr(\"Copy Path\"), m_copyPathBtn);\n    connect(act, &QAction::triggered, this, [this]() {\n      hide();\n      const auto paths = m_viewer->getSelectedPaths();\n      ClipboardUtils::setTextToClipboard(paths.join('\\n'));\n    });\n    m_copyPathBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(m_copyPathBtn);\n  }\n\n  {\n    // Properties.\n    m_propertiesBtn = createButton();\n    auto act = new QAction(IconUtils::fetchIconWithDisabledState(\n                               themeMgr.getIconFile(QStringLiteral(\"properties.svg\"))),\n                           tr(\"Properties\"), m_propertiesBtn);\n    connect(act, &QAction::triggered, this, [this]() {\n      hide();\n      const auto paths = m_viewer->getSelectedPaths();\n      Q_ASSERT(paths.size() == 1);\n      const auto path = paths[0];\n      FilePropertiesDialog dialog(path, this);\n      int ret = dialog.exec();\n      if (ret) {\n        auto newName = dialog.getFileName();\n        if (newName != PathUtils::fileName(path)) {\n          // Rename.\n          try {\n            m_buffer->renameAttachment(path, newName);\n            showPopupLater(QStringList() << PathUtils::concatenateFilePath(\n                               PathUtils::parentDirPath(path), newName));\n          } catch (Exception &p_e) {\n            MessageBoxHelper::notify(\n                MessageBoxHelper::Warning,\n                tr(\"Failed to rename attachment (%1) to (%2).\").arg(path, newName),\n                tr(\"Please try another name again.\"), p_e.what(), this);\n          }\n        }\n      }\n    });\n    m_propertiesBtn->setDefaultAction(act);\n    buttonsLayout->addWidget(m_propertiesBtn);\n  }\n\n  mainLayout->addLayout(buttonsLayout);\n\n  m_viewer = new FileSystemViewer(this);\n  connect(m_viewer, &FileSystemViewer::selectionChanged, this,\n          &AttachmentPopup::updateButtonsState);\n\n  updateButtonsState();\n\n  mainLayout->addWidget(m_viewer);\n\n  widget->setMinimumSize(320, 384);\n\n  addWidget(widget);\n}\n\nQToolButton *AttachmentPopup::createButton() {\n  auto btn = new QToolButton(this);\n  btn->setProperty(PropertyDefs::c_actionToolButton, true);\n  return btn;\n}\n\nbool AttachmentPopup::checkRootFolderAndSingleSelection() {\n  const auto rootPath = m_viewer->rootPath();\n  bool ret = !rootPath.isEmpty() && m_viewer->selectedCount() <= 1;\n  if (!ret) {\n    MessageBoxHelper::notify(MessageBoxHelper::Information,\n                             tr(\"Please select one directory to continue.\"), this);\n  }\n  return ret;\n}\n\nvoid AttachmentPopup::setRootFolder(const QString &p_folderPath) {\n  m_viewer->setRootPath(p_folderPath);\n  m_needUpdateAttachmentFolder = false;\n}\n\nvoid AttachmentPopup::setBuffer(Buffer *p_buffer) {\n  if (m_buffer == p_buffer) {\n    return;\n  }\n\n  m_buffer = p_buffer;\n  m_needUpdateAttachmentFolder = true;\n}\n\nQString AttachmentPopup::getDestFolderPath() const {\n  const auto selectedPaths = m_viewer->getSelectedPaths();\n  Q_ASSERT(selectedPaths.size() <= 1);\n  QString destFolderPath;\n  if (selectedPaths.isEmpty()) {\n    destFolderPath = m_viewer->rootPath();\n  } else {\n    destFolderPath = PathUtils::dirOrParentDirPath(selectedPaths[0]);\n  }\n  return destFolderPath;\n}\n\nvoid AttachmentPopup::addAttachments(const QString &p_destFolderPath, const QStringList &p_files) {\n  auto files = m_buffer->addAttachment(p_destFolderPath, p_files);\n  showPopupLater(files);\n}\n\nvoid AttachmentPopup::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) {\n  auto file = m_buffer->newAttachmentFile(p_destFolderPath, p_name);\n  showPopupLater(QStringList() << file);\n}\n\nvoid AttachmentPopup::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) {\n  auto folder = m_buffer->newAttachmentFolder(p_destFolderPath, p_name);\n  showPopupLater(QStringList() << folder);\n}\n\nvoid AttachmentPopup::showPopupLater(const QStringList &p_pathsToSelect) {\n  QTimer::singleShot(250, this, [this, p_pathsToSelect]() {\n    m_viewer->scrollToAndSelect(p_pathsToSelect);\n    m_button->showMenu();\n  });\n}\n\nvoid AttachmentPopup::updateButtonsState() {\n  const int selectedCount = m_viewer->selectedCount();\n  m_openBtn->setEnabled(selectedCount > 0);\n  m_deleteBtn->setEnabled(selectedCount > 0);\n  m_copyPathBtn->setEnabled(selectedCount > 0);\n  m_propertiesBtn->setEnabled(selectedCount == 1);\n}\n"
  },
  {
    "path": "src/widgets/attachmentpopup.h",
    "content": "#ifndef ATTACHMENTPOPUP_H\n#define ATTACHMENTPOPUP_H\n\n#include \"buttonpopup.h\"\n\nnamespace vnotex {\nclass FileSystemViewer;\nclass Buffer;\n\nclass AttachmentPopup : public ButtonPopup {\n  Q_OBJECT\npublic:\n  AttachmentPopup(QToolButton *p_btn, QWidget *p_parent = nullptr);\n\n  void setBuffer(Buffer *p_buffer);\n\nprivate slots:\n  void updateButtonsState();\n\nprivate:\n  void setupUI();\n\n  QToolButton *createButton();\n\n  bool checkRootFolderAndSingleSelection();\n\n  void addAttachments(const QString &p_destFolderPath, const QStringList &p_files);\n\n  void setRootFolder(const QString &p_folderPath);\n\n  QString getDestFolderPath() const;\n\n  void newAttachmentFile(const QString &p_destFolderPath, const QString &p_name);\n\n  void newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name);\n\n  void showPopupLater(const QStringList &p_pathsToSelect = QStringList());\n\n  Buffer *m_buffer = nullptr;\n\n  // Managed by QObject.\n  FileSystemViewer *m_viewer = nullptr;\n\n  QToolButton *m_openBtn = nullptr;\n  QToolButton *m_deleteBtn = nullptr;\n  QToolButton *m_copyPathBtn = nullptr;\n  QToolButton *m_propertiesBtn = nullptr;\n\n  bool m_needUpdateAttachmentFolder = true;\n};\n} // namespace vnotex\n\n#endif // ATTACHMENTPOPUP_H\n"
  },
  {
    "path": "src/widgets/biaction.cpp",
    "content": "#include \"biaction.h\"\n\n#include <QDebug>\n#include <QMenu>\n#include <QToolButton>\n\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nBiAction::BiAction(const QIcon &p_icon, const QString &p_text, const QIcon &p_altIcon,\n                   const QString &p_altText, QObject *p_parent)\n    : QAction(p_icon, p_text, p_parent) {\n  m_resources[State::Default].m_icon = p_icon;\n  m_resources[State::Default].m_text = p_text;\n\n  m_resources[State::Alternative].m_icon = p_altIcon;\n  m_resources[State::Alternative].m_text = p_altText;\n\n  connect(this, &QAction::triggered, this, [this]() { toggleState(); });\n}\n\nBiAction::State BiAction::previousState() const {\n  if (m_state == State::Default) {\n    return State::Alternative;\n  } else {\n    return State::Default;\n  }\n}\n\nBiAction::State BiAction::state() const { return m_state; }\n\nvoid BiAction::setState(BiAction::State p_state) {\n  if (p_state == m_state) {\n    return;\n  }\n\n  const QString preText = m_resources[m_state].m_text;\n  auto preMenu = m_resources[m_state].m_menu;\n\n  m_state = p_state;\n\n  auto &resource = m_resources[m_state];\n  if (!resource.m_icon.isNull()) {\n    setIcon(resource.m_icon);\n  }\n\n  // Use replacement instead since there may exist shortcut text.\n  setText(text().replace(preText, resource.m_text));\n\n  setMenu(resource.m_menu);\n  if (resource.m_menu) {\n    resource.m_menu->setEnabled(true);\n  }\n\n  if (preMenu) {\n    preMenu->setEnabled(false);\n  }\n\n  updateToolButtonPopupMode();\n}\n\nvoid BiAction::setStateMenu(BiAction::State p_state, QMenu *p_menu) {\n  m_resources[p_state].m_menu = p_menu;\n  if (m_state == p_state) {\n    setMenu(m_resources[m_state].m_menu);\n    updateToolButtonPopupMode();\n  }\n}\n\nvoid BiAction::toggleState() { setState(previousState()); }\n\nvoid BiAction::setToolButtonForAction(QToolButton *p_btn) {\n  m_toolBtn = p_btn;\n  updateToolButtonPopupMode();\n}\n\nvoid BiAction::updateToolButtonPopupMode() {\n  if (m_toolBtn) {\n    m_toolBtn->setPopupMode(menu() ? QToolButton::MenuButtonPopup : QToolButton::DelayedPopup);\n    WidgetUtils::updateStyle(m_toolBtn);\n  }\n}\n"
  },
  {
    "path": "src/widgets/biaction.h",
    "content": "#ifndef BIACTION_H\n#define BIACTION_H\n\n#include <QAction>\n\nclass QToolButton;\n\nnamespace vnotex {\n// Action with two states.\nclass BiAction : public QAction {\n  Q_OBJECT\npublic:\n  enum State { Default, Alternative, Max };\n\n  BiAction(const QIcon &p_icon, const QString &p_text, const QIcon &p_altIcon,\n           const QString &p_altText, QObject *p_parent = nullptr);\n\n  BiAction::State previousState() const;\n  BiAction::State state() const;\n  void setState(BiAction::State p_state);\n\n  void toggleState();\n\n  void setStateMenu(BiAction::State p_state, QMenu *p_menu);\n\n  void setToolButtonForAction(QToolButton *p_btn);\n\nprivate:\n  struct StateResource {\n    QIcon m_icon;\n\n    QString m_text;\n\n    QMenu *m_menu = nullptr;\n  };\n\n  void updateToolButtonPopupMode();\n\n  State m_state = State::Default;\n\n  StateResource m_resources[State::Max];\n\n  // Managed by QObject.\n  // We will use this to control the menu indicator of the button.\n  QToolButton *m_toolBtn = nullptr;\n};\n} // namespace vnotex\n\n#endif // BIACTION_H\n"
  },
  {
    "path": "src/widgets/buttonpopup.cpp",
    "content": "#include \"buttonpopup.h\"\n\n#include <QKeyEvent>\n#include <QWidgetAction>\n\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nButtonPopup::ButtonPopup(QToolButton *p_btn, QWidget *p_parent) : QMenu(p_parent), m_button(p_btn) {\n#if defined(Q_OS_MACOS) || defined(Q_OS_MAC)\n  // Qt::Popup on macOS does not work well with input method.\n  setWindowFlags(Qt::Tool | Qt::NoDropShadowWindowHint);\n  setWindowModality(Qt::ApplicationModal);\n#endif\n}\n\nvoid ButtonPopup::keyPressEvent(QKeyEvent *p_event) {\n  const int key = p_event->key();\n  if (key == Qt::Key_Return || key == Qt::Key_Enter) {\n    // Swallow Enter/Return key here to avoid hiding the popup.\n    p_event->accept();\n    return;\n  }\n  QMenu::keyPressEvent(p_event);\n}\n\nvoid ButtonPopup::addWidget(QWidget *p_widget) {\n  auto act = new QWidgetAction(this);\n  // @act will own @p_widget.\n  act->setDefaultWidget(p_widget);\n  addAction(act);\n}\n"
  },
  {
    "path": "src/widgets/buttonpopup.h",
    "content": "#ifndef BUTTONPOPUP_H\n#define BUTTONPOPUP_H\n\n#include <QMenu>\n\nclass QToolButton;\n\nnamespace vnotex {\n// Base class for the popup of a QToolButton.\nclass ButtonPopup : public QMenu {\n  Q_OBJECT\npublic:\n  ButtonPopup(QToolButton *p_btn, QWidget *p_parent = nullptr);\n\nprotected:\n  void keyPressEvent(QKeyEvent *p_event) override;\n\n  void addWidget(QWidget *p_widget);\n\n  // Button for this menu.\n  QToolButton *m_button = nullptr;\n};\n} // namespace vnotex\n\n#endif // BUTTONPOPUP_H\n"
  },
  {
    "path": "src/widgets/combobox.cpp",
    "content": "#include \"combobox.h\"\n\n#include <QAbstractItemModel>\n#include <QAbstractItemView>\n\nusing namespace vnotex;\n\nComboBox::ComboBox(QWidget *p_parent) : QComboBox(p_parent) {}\n\nvoid ComboBox::showPopup() {\n  QComboBox::showPopup();\n\n#if defined(Q_OS_MACOS) || defined(Q_OS_LINUX)\n  auto vw = view();\n  if (count() > 0) {\n    int cnt = qMin(count(), maxVisibleItems());\n    int height = 20 + cnt * vw->visualRect(vw->model()->index(0, 0)).height();\n    if (height > vw->height()) {\n      vw->setMinimumHeight(height);\n    }\n  }\n#endif\n}\n"
  },
  {
    "path": "src/widgets/combobox.h",
    "content": "#ifndef COMBOBOX_H\n#define COMBOBOX_H\n\n#include <QComboBox>\n\nnamespace vnotex {\nclass ComboBox : public QComboBox {\n  Q_OBJECT\npublic:\n  explicit ComboBox(QWidget *p_parent = nullptr);\n\n  void showPopup() Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // COMBOBOX_H\n"
  },
  {
    "path": "src/widgets/consoleviewer.cpp",
    "content": "#include \"consoleviewer.h\"\n\n#include <QPlainTextEdit>\n#include <QScrollBar>\n#include <QToolButton>\n#include <QVBoxLayout>\n\n#include <utils/widgetutils.h>\n\n#include \"titlebar.h\"\n#include \"widgetsfactory.h\"\n\nusing namespace vnotex;\n\nConsoleViewer::ConsoleViewer(QWidget *p_parent) : QFrame(p_parent) { setupUI(); }\n\nvoid ConsoleViewer::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(mainLayout);\n\n  {\n    setupTitleBar(QString(), this);\n    mainLayout->addWidget(m_titleBar);\n  }\n\n  m_consoleEdit = new QPlainTextEdit(this);\n  m_consoleEdit->setReadOnly(true);\n  mainLayout->addWidget(m_consoleEdit);\n\n  setFocusProxy(m_consoleEdit);\n}\n\nvoid ConsoleViewer::setupTitleBar(const QString &p_title, QWidget *p_parent) {\n  m_titleBar = new TitleBar(p_title, true, TitleBar::Action::None, p_parent);\n  m_titleBar->setActionButtonsAlwaysShown(true);\n\n  {\n    auto clearBtn = m_titleBar->addActionButton(QStringLiteral(\"clear.svg\"), tr(\"Clear\"));\n    connect(clearBtn, &QToolButton::triggered, this, &ConsoleViewer::clear);\n  }\n}\n\nvoid ConsoleViewer::append(const QString &p_text) {\n  m_consoleEdit->appendPlainText(p_text);\n  auto scrollBar = m_consoleEdit->verticalScrollBar();\n  if (scrollBar) {\n    scrollBar->setValue(scrollBar->maximum());\n  }\n}\n\nvoid ConsoleViewer::clear() { m_consoleEdit->clear(); }\n"
  },
  {
    "path": "src/widgets/consoleviewer.h",
    "content": "#ifndef CONSOLEVIEWER_H\n#define CONSOLEVIEWER_H\n\n#include <QFrame>\n\nclass QPlainTextEdit;\n\nnamespace vnotex {\nclass TitleBar;\n\nclass ConsoleViewer : public QFrame {\n  Q_OBJECT\npublic:\n  explicit ConsoleViewer(QWidget *p_parent = nullptr);\n\n  void append(const QString &p_text);\n\n  void clear();\n\nprivate:\n  void setupUI();\n\n  void setupTitleBar(const QString &p_title, QWidget *p_parent = nullptr);\n\n  TitleBar *m_titleBar = nullptr;\n\n  QPlainTextEdit *m_consoleEdit = nullptr;\n};\n} // namespace vnotex\n\n#endif // CONSOLEVIEWER_H\n"
  },
  {
    "path": "src/widgets/dialogs/deleteconfirmdialog.cpp",
    "content": "#include \"deleteconfirmdialog.h\"\n\n#include <QCheckBox>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QListWidget>\n#include <QListWidgetItem>\n#include <QScrollArea>\n#include <QUrl>\n#include <QVBoxLayout>\n\n#include \"global.h\"\n#include \"selectionitemwidget.h\"\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nDeleteConfirmDialog::DeleteConfirmDialog(const QString &p_title, const QString &p_text,\n                                         const QString &p_info,\n                                         const QVector<ConfirmItemInfo> &p_items,\n                                         DeleteConfirmDialog::Flags p_flags,\n                                         bool p_noAskAgainChecked, QWidget *p_parent)\n    : ScrollDialog(p_parent), m_items(p_items) {\n  setupUI(p_title, p_text, p_info, p_flags, p_noAskAgainChecked);\n\n  updateItemsList();\n\n  updateCountLabel();\n}\n\nvoid DeleteConfirmDialog::setupUI(const QString &p_title, const QString &p_text,\n                                  const QString &p_info, DeleteConfirmDialog::Flags p_flags,\n                                  bool p_noAskAgainChecked) {\n  auto mainWidget = new QWidget(this);\n  setCentralWidget(mainWidget);\n\n  auto mainLayout = new QVBoxLayout(mainWidget);\n\n  // Text.\n  if (!p_text.isEmpty()) {\n    auto textLabel = new QLabel(p_text, mainWidget);\n    textLabel->setWordWrap(true);\n    mainLayout->addWidget(textLabel);\n  }\n\n  // Info.\n  if (!p_info.isEmpty()) {\n    auto infoLabel = new QLabel(p_info, mainWidget);\n    infoLabel->setWordWrap(true);\n    mainLayout->addWidget(infoLabel);\n  }\n\n  // Ask again.\n  if (p_flags & Flag::AskAgain) {\n    m_noAskCB = new QCheckBox(tr(\"Do not ask again\"), mainWidget);\n    m_noAskCB->setChecked(p_noAskAgainChecked);\n    mainLayout->addWidget(m_noAskCB);\n  }\n\n  // Count.\n  {\n    QHBoxLayout *labelLayout = new QHBoxLayout();\n\n    m_countLabel = new QLabel(\"Items\", mainWidget);\n\n    labelLayout->addWidget(m_countLabel);\n    labelLayout->addStretch();\n    labelLayout->setContentsMargins(0, 0, 0, 0);\n\n    mainLayout->addLayout(labelLayout);\n  }\n\n  // List and preview.\n  {\n    auto listLayout = new QHBoxLayout();\n\n    m_listWidget = new QListWidget(mainWidget);\n    connect(m_listWidget, &QListWidget::currentRowChanged, this,\n            &DeleteConfirmDialog::currentFileChanged);\n    connect(m_listWidget, &QListWidget::itemActivated, this, [this](QListWidgetItem *p_item) {\n      if (!p_item) {\n        return;\n      }\n\n      auto widget = getItemWidget(p_item);\n      Q_ASSERT(widget);\n      QString filePath = m_items[widget->getData().toInt()].m_path;\n      if (!filePath.isEmpty()) {\n        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(filePath));\n      }\n    });\n\n    listLayout->addWidget(m_listWidget);\n\n    if (p_flags & Flag::Preview) {\n      m_previewer = new QLabel(mainWidget);\n      m_previewer->setScaledContents(true);\n\n      m_previewArea = new QScrollArea(mainWidget);\n      m_previewArea->setBackgroundRole(QPalette::Dark);\n      m_previewArea->setWidget(m_previewer);\n      m_previewArea->setMinimumSize(256, 256);\n\n      listLayout->addWidget(m_previewArea);\n    }\n\n    mainLayout->addLayout(listLayout);\n  }\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(p_title);\n}\n\nQVector<ConfirmItemInfo> DeleteConfirmDialog::getConfirmedItems() const {\n  QVector<ConfirmItemInfo> confirmedItems;\n\n  for (int i = 0; i < m_listWidget->count(); ++i) {\n    SelectionItemWidget *widget = getItemWidget(m_listWidget->item(i));\n    if (widget->isChecked()) {\n      confirmedItems.push_back(m_items[widget->getData().toInt()]);\n    }\n  }\n\n  return confirmedItems;\n}\n\nvoid DeleteConfirmDialog::updateItemsList() {\n  m_listWidget->clear();\n\n  for (int i = 0; i < m_items.size(); ++i) {\n    auto itemWidget = new SelectionItemWidget(m_items[i].m_icon, m_items[i].m_name, this);\n    itemWidget->setChecked(true);\n    itemWidget->setData(i);\n    itemWidget->setToolTip(m_items[i].m_tip);\n    connect(itemWidget, &SelectionItemWidget::checkStateChanged, this,\n            &DeleteConfirmDialog::updateCountLabel);\n\n    QListWidgetItem *item = new QListWidgetItem(m_listWidget);\n    QSize size = itemWidget->sizeHint();\n    size.setHeight(size.height() * 2);\n    item->setSizeHint(size);\n\n    m_listWidget->setItemWidget(item, itemWidget);\n  }\n\n  m_listWidget->setMinimumSize(m_listWidget->sizeHint());\n  m_listWidget->setCurrentRow(-1);\n  m_listWidget->setCurrentRow(0);\n}\n\nbool DeleteConfirmDialog::isNoAskChecked() const { return m_noAskCB->isChecked(); }\n\nvoid DeleteConfirmDialog::currentFileChanged(int p_row) {\n  if (m_previewer) {\n    bool succeed = false;\n    if (p_row > -1) {\n      SelectionItemWidget *widget = getItemWidget(m_listWidget->item(p_row));\n      if (widget) {\n        int idx = widget->getData().toInt();\n        Q_ASSERT(idx < m_items.size());\n        QPixmap image(m_items[idx].m_path);\n        if (!image.isNull()) {\n          m_previewer->setPixmap(image);\n          m_previewer->adjustSize();\n          succeed = true;\n        }\n      }\n    }\n\n    m_previewArea->setVisible(succeed);\n    if (succeed) {\n      resizeToHideScrollBarLater(true, true);\n    }\n  }\n}\n\nSelectionItemWidget *DeleteConfirmDialog::getItemWidget(QListWidgetItem *p_item) const {\n  QWidget *wid = m_listWidget->itemWidget(p_item);\n  return static_cast<SelectionItemWidget *>(wid);\n}\n\nvoid DeleteConfirmDialog::updateCountLabel() {\n  int total = m_listWidget->count();\n  int checked = 0;\n\n  for (int i = 0; i < total; ++i) {\n    SelectionItemWidget *widget = getItemWidget(m_listWidget->item(i));\n    if (widget->isChecked()) {\n      ++checked;\n    }\n  }\n\n  m_countLabel->setText(tr(\"%1/%2 Items\").arg(checked).arg(total));\n}\n"
  },
  {
    "path": "src/widgets/dialogs/deleteconfirmdialog.h",
    "content": "#ifndef DELETECONFIRMDIALOG_H\n#define DELETECONFIRMDIALOG_H\n\n#include \"scrolldialog.h\"\n\n#include <QIcon>\n\nclass QLabel;\nclass QListWidget;\nclass QListWidgetItem;\nclass QCheckBox;\nclass QScrollArea;\n\nnamespace vnotex {\nclass SelectionItemWidget;\n\n// Information about a deletion item needed to confirm.\nstruct ConfirmItemInfo {\n  ConfirmItemInfo() {}\n\n  ConfirmItemInfo(const QString &p_name, const QString &p_tip, const QString &p_path, void *p_data)\n      : m_name(p_name), m_tip(p_tip), m_path(p_path), m_data(p_data) {}\n\n  ConfirmItemInfo(const QIcon &p_icon, const QString &p_name, const QString &p_tip,\n                  const QString &p_path, void *p_data)\n      : m_icon(p_icon), m_name(p_name), m_tip(p_tip), m_path(p_path), m_data(p_data) {}\n\n  QIcon m_icon;\n  QString m_name;\n  QString m_tip;\n  QString m_path;\n  void *m_data = nullptr;\n};\n\nclass DeleteConfirmDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  enum Flag { None = 0, AskAgain = 0x1, Preview = 0x2 };\n  Q_DECLARE_FLAGS(Flags, Flag)\n\n  DeleteConfirmDialog(const QString &p_title, const QString &p_text, const QString &p_info,\n                      const QVector<ConfirmItemInfo> &p_items, DeleteConfirmDialog::Flags p_flags,\n                      bool p_noAskAgainChecked, QWidget *p_parent = nullptr);\n\n  QVector<ConfirmItemInfo> getConfirmedItems() const;\n\n  bool isNoAskChecked() const;\n\nprivate slots:\n  void currentFileChanged(int p_row);\n\n  void updateCountLabel();\n\nprivate:\n  void setupUI(const QString &p_title, const QString &p_text, const QString &p_info,\n               DeleteConfirmDialog::Flags p_flags, bool p_noAskAgainChecked);\n\n  void updateItemsList();\n\n  SelectionItemWidget *getItemWidget(QListWidgetItem *p_item) const;\n\n  QVector<ConfirmItemInfo> m_items;\n\n  QLabel *m_countLabel = nullptr;\n  QListWidget *m_listWidget = nullptr;\n\n  QLabel *m_previewer = nullptr;\n\n  QScrollArea *m_previewArea = nullptr;\n\n  QCheckBox *m_noAskCB = nullptr;\n};\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(DeleteConfirmDialog::Flags)\n} // namespace vnotex\n\n#endif // DELETECONFIRMDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/dialog.cpp",
    "content": "#include \"dialog.h\"\n\n#include <QApplication>\n#include <QCoreApplication>\n#include <QDebug>\n#include <QPlainTextEdit>\n#include <QPushButton>\n#include <QScrollBar>\n#include <QTimer>\n#include <QVBoxLayout>\n\n#include \"../propertydefs.h\"\n#include \"../widgetsfactory.h\"\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nDialog::Dialog(QWidget *p_parent, Qt::WindowFlags p_flags) : QDialog(p_parent, p_flags) {\n  m_layout = new QVBoxLayout(this);\n}\n\nvoid Dialog::setCentralWidget(QWidget *p_widget) {\n  Q_ASSERT(!m_centralWidget && p_widget);\n  m_centralWidget = p_widget;\n  m_centralWidget->setProperty(PropertyDefs::c_dialogCentralWidget, true);\n  m_layout->addWidget(m_centralWidget);\n}\n\nvoid Dialog::addBottomWidget(QWidget *p_widget) {\n  m_layout->insertWidget(m_layout->indexOf(m_centralWidget) + 1, p_widget);\n}\n\nvoid Dialog::setDialogButtonBox(QDialogButtonBox::StandardButtons p_buttons,\n                                QDialogButtonBox::StandardButton p_defaultButton) {\n  if (m_dialogButtonBox) {\n    m_dialogButtonBox->setStandardButtons(p_buttons);\n  } else {\n    m_dialogButtonBox = new QDialogButtonBox(p_buttons, this);\n    connect(m_dialogButtonBox, &QDialogButtonBox::accepted, this, &Dialog::acceptedButtonClicked);\n    connect(m_dialogButtonBox, &QDialogButtonBox::rejected, this, &Dialog::rejectedButtonClicked);\n    connect(m_dialogButtonBox, &QDialogButtonBox::clicked, this, [this](QAbstractButton *p_button) {\n      switch (m_dialogButtonBox->buttonRole(p_button)) {\n      case QDialogButtonBox::ResetRole:\n        resetButtonClicked();\n        break;\n\n      case QDialogButtonBox::ApplyRole:\n        appliedButtonClicked();\n        break;\n\n      default:\n        break;\n      }\n    });\n\n    m_layout->addWidget(m_dialogButtonBox);\n  }\n\n  // If default button is not set, the first button with the accept role is made\n  // the default button when the dialog is shown.\n  if (p_defaultButton != QDialogButtonBox::NoButton) {\n    auto btn = m_dialogButtonBox->button(p_defaultButton);\n    if (btn) {\n      btn->setDefault(true);\n    }\n  }\n}\n\nQDialogButtonBox *Dialog::getDialogButtonBox() const { return m_dialogButtonBox; }\n\nvoid Dialog::setInformationText(const QString &p_text, InformationLevel p_level) {\n  if (!m_infoTextEdit) {\n    if (p_text.isEmpty()) {\n      return;\n    }\n\n    m_infoTextEdit = WidgetsFactory::createPlainTextConsole(this);\n    m_infoTextEdit->setMaximumHeight(m_infoTextEdit->minimumSizeHint().height());\n    m_layout->insertWidget(m_layout->count() - 1, m_infoTextEdit);\n  }\n\n  m_infoTextEdit->setPlainText(p_text);\n  m_infoTextEdit->ensureCursorVisible();\n\n  const bool visible = !p_text.isEmpty();\n  const bool needResize = visible != m_infoTextEdit->isVisible();\n  m_infoTextEdit->setVisible(visible);\n\n  // Change the style.\n  const char *level = \"\";\n  switch (p_level) {\n  case InformationLevel::Info:\n    level = \"info\";\n    break;\n\n  case InformationLevel::Warning:\n    level = \"warning\";\n    break;\n\n  case InformationLevel::Error:\n    level = \"error\";\n    break;\n  }\n\n  WidgetUtils::setPropertyDynamically(m_infoTextEdit, PropertyDefs::c_state, level);\n  if (needResize) {\n    WidgetUtils::updateSize(this);\n  }\n}\n\nvoid Dialog::appendInformationText(const QString &p_text) {\n  if (!m_infoTextEdit) {\n    setInformationText(p_text);\n  } else {\n    m_infoTextEdit->appendPlainText(p_text);\n    m_infoTextEdit->moveCursor(QTextCursor::End);\n    m_infoTextEdit->ensureCursorVisible();\n  }\n}\n\nvoid Dialog::clearInformationText() {\n  if (m_infoTextEdit) {\n    m_infoTextEdit->clear();\n  }\n}\n\nvoid Dialog::acceptedButtonClicked() { QDialog::accept(); }\n\nvoid Dialog::rejectedButtonClicked() { QDialog::reject(); }\n\nvoid Dialog::resetButtonClicked() {}\n\nvoid Dialog::appliedButtonClicked() {}\n\nvoid Dialog::setButtonEnabled(QDialogButtonBox::StandardButton p_button, bool p_enabled) {\n  QPushButton *button = getDialogButtonBox()->button(p_button);\n  if (button) {\n    button->setEnabled(p_enabled);\n  }\n}\n\nvoid Dialog::completeButStay() {\n  Q_ASSERT(m_centralWidget);\n  m_centralWidget->setEnabled(false);\n  m_completed = true;\n}\n\nbool Dialog::isCompleted() const { return m_completed; }\n\nQSize Dialog::sizeHint() const {\n  auto sz = QDialog::sizeHint();\n  return sz * 1.2;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/dialog.h",
    "content": "#ifndef DIALOG_H\n#define DIALOG_H\n\n#include <QDialog>\n#include <QDialogButtonBox>\n\nclass QBoxLayout;\nclass QPlainTextEdit;\n\nnamespace vnotex {\nclass Dialog : public QDialog {\n  Q_OBJECT\npublic:\n  explicit Dialog(QWidget *p_parent = nullptr, Qt::WindowFlags p_flags = Qt::WindowFlags());\n\n  void\n  setDialogButtonBox(QDialogButtonBox::StandardButtons p_buttons,\n                     QDialogButtonBox::StandardButton p_defaultButton = QDialogButtonBox::NoButton);\n\n  QDialogButtonBox *getDialogButtonBox() const;\n\n  enum class InformationLevel { Info, Warning, Error };\n\n  void setInformationText(const QString &p_text, InformationLevel p_level = InformationLevel::Info);\n\n  void appendInformationText(const QString &p_text);\n\n  void clearInformationText();\n\n  void setButtonEnabled(QDialogButtonBox::StandardButton p_button, bool p_enabled);\n\n  // Dialog has completed but just stay the GUI to let user know information.\n  void completeButStay();\n\n  bool isCompleted() const;\n\n  QSize sizeHint() const Q_DECL_OVERRIDE;\n\nprotected:\n  virtual void acceptedButtonClicked();\n\n  virtual void rejectedButtonClicked();\n\n  virtual void resetButtonClicked();\n\n  virtual void appliedButtonClicked();\n\n  virtual void setCentralWidget(QWidget *p_widget);\n\n  // Add @p_widget below the central widget.\n  virtual void addBottomWidget(QWidget *p_widget);\n\n  QBoxLayout *m_layout = nullptr;\n\n  QWidget *m_centralWidget = nullptr;\n\nprivate:\n  QPlainTextEdit *m_infoTextEdit = nullptr;\n\n  QDialogButtonBox *m_dialogButtonBox = nullptr;\n\n  bool m_completed = false;\n};\n} // namespace vnotex\n\n#endif // DIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/exportdialog.cpp",
    "content": "#include \"exportdialog.h\"\n\n#include <QCheckBox>\n#include <QCoreApplication>\n#include <QFileDialog>\n#include <QFileInfo>\n#include <QFormLayout>\n#include <QGroupBox>\n#include <QHBoxLayout>\n#include <QInputDialog>\n#include <QLabel>\n#include <QLineEdit>\n#include <QPageLayout>\n#include <QPageSetupDialog>\n#include <QPlainTextEdit>\n#include <QPrinter>\n#include <QProgressBar>\n#include <QPushButton>\n#include <QUrl>\n#include <QVBoxLayout>\n\n#include <buffer/buffer.h>\n#include <core/configmgr.h>\n#include <core/sessionconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <export/exporter.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/clipboardutils.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/widgetutils.h>\n#include <widgets/combobox.h>\n#include <widgets/locationinputwithbrowsebutton.h>\n#include <widgets/messageboxhelper.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nExportDialog::ExportDialog(Notebook *p_notebook, Node *p_folder, Node *p_note, Buffer *p_buffer,\n                           QWidget *p_parent)\n    : ScrollDialog(p_parent), m_notebook(p_notebook), m_folder(p_folder), m_note(p_note),\n      m_buffer(p_buffer) {\n  setupUI();\n\n  initOptions();\n\n  restoreFields(m_option);\n\n  setWindowFlags(windowFlags() | Qt::WindowMinimizeButtonHint);\n\n  connect(this, &QDialog::finished, this, [this]() {\n    saveFields(m_option);\n    ConfigMgr::getInst().getSessionConfig().setExportOption(m_option);\n  });\n}\n\nvoid ExportDialog::setupUI() {\n  auto widget = new QWidget(this);\n  setCentralWidget(widget);\n\n  auto mainLayout = new QVBoxLayout(widget);\n\n  auto sourceBox = setupSourceGroup(widget);\n  mainLayout->addWidget(sourceBox);\n\n  auto targetBox = setupTargetGroup(widget);\n  mainLayout->addWidget(targetBox);\n\n  m_advancedGroupBox = setupAdvancedGroup(widget);\n  mainLayout->addWidget(m_advancedGroupBox);\n\n  m_progressBar = new QProgressBar(widget);\n  m_progressBar->setRange(0, 0);\n  m_progressBar->hide();\n  addBottomWidget(m_progressBar);\n\n  setupButtonBox();\n\n  setWindowTitle(tr(\"Export\"));\n}\n\nQGroupBox *ExportDialog::setupSourceGroup(QWidget *p_parent) {\n  auto box = new QGroupBox(tr(\"Source\"), p_parent);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    m_sourceComboBox = WidgetsFactory::createComboBox(box);\n    if (m_buffer) {\n      m_sourceComboBox->addItem(tr(\"Current Buffer (%1)\").arg(m_buffer->getName()),\n                                static_cast<int>(ExportSource::CurrentBuffer));\n    }\n    if (m_note && m_note->hasContent()) {\n      m_sourceComboBox->addItem(tr(\"Current Note (%1)\").arg(m_note->getName()),\n                                static_cast<int>(ExportSource::CurrentNote));\n    }\n    if (m_folder && m_folder->isContainer()) {\n      m_sourceComboBox->addItem(tr(\"Current Folder (%1)\").arg(m_folder->getName()),\n                                static_cast<int>(ExportSource::CurrentFolder));\n    }\n    if (m_notebook) {\n      m_sourceComboBox->addItem(tr(\"Current Notebook (%1)\").arg(m_notebook->getName()),\n                                static_cast<int>(ExportSource::CurrentNotebook));\n    }\n    layout->addRow(tr(\"Source:\"), m_sourceComboBox);\n  }\n\n  {\n    // TODO: Source format filtering.\n  }\n\n  return box;\n}\n\nQString ExportDialog::getDefaultOutputDir() const {\n  return PathUtils::concatenateFilePath(ConfigMgr::getDocumentOrHomePath(), tr(\"vnote_exports\"));\n}\n\nQGroupBox *ExportDialog::setupTargetGroup(QWidget *p_parent) {\n  auto box = new QGroupBox(tr(\"Target\"), p_parent);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    m_targetFormatComboBox = WidgetsFactory::createComboBox(box);\n    m_targetFormatComboBox->addItem(tr(\"Markdown\"), static_cast<int>(ExportFormat::Markdown));\n    m_targetFormatComboBox->addItem(tr(\"HTML\"), static_cast<int>(ExportFormat::HTML));\n    m_targetFormatComboBox->addItem(tr(\"PDF\"), static_cast<int>(ExportFormat::PDF));\n    m_targetFormatComboBox->addItem(tr(\"Custom\"), static_cast<int>(ExportFormat::Custom));\n    connect(m_targetFormatComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            [this]() {\n              AdvancedSettings settings = AdvancedSettings::Max;\n              int format = m_targetFormatComboBox->currentData().toInt();\n              switch (format) {\n              case static_cast<int>(ExportFormat::HTML):\n                settings = AdvancedSettings::HTML;\n                break;\n\n              case static_cast<int>(ExportFormat::PDF):\n                settings = AdvancedSettings::PDF;\n                break;\n\n              case static_cast<int>(ExportFormat::Custom):\n                settings = AdvancedSettings::Custom;\n                break;\n\n              default:\n                break;\n              }\n              showAdvancedSettings(settings);\n            });\n    layout->addRow(tr(\"Format:\"), m_targetFormatComboBox);\n  }\n\n  {\n    m_transparentBgCheckBox = WidgetsFactory::createCheckBox(tr(\"Use transparent background\"), box);\n    layout->addRow(m_transparentBgCheckBox);\n  }\n\n  {\n    const auto webStyles = VNoteX::getInst().getThemeMgr().getWebStyles();\n\n    m_renderingStyleComboBox = WidgetsFactory::createComboBox(box);\n    layout->addRow(tr(\"Rendering style:\"), m_renderingStyleComboBox);\n    for (const auto &pa : webStyles) {\n      m_renderingStyleComboBox->addItem(pa.first, pa.second);\n    }\n\n    m_syntaxHighlightStyleComboBox = WidgetsFactory::createComboBox(box);\n    layout->addRow(tr(\"Syntax highlighting style:\"), m_syntaxHighlightStyleComboBox);\n    for (const auto &pa : webStyles) {\n      m_syntaxHighlightStyleComboBox->addItem(pa.first, pa.second);\n    }\n  }\n\n  {\n    m_outputDirInput = new LocationInputWithBrowseButton(box);\n    layout->addRow(tr(\"Output directory:\"), m_outputDirInput);\n    connect(m_outputDirInput, &LocationInputWithBrowseButton::clicked, this, [this]() {\n      QString initPath = getOutputDir();\n      if (!QFileInfo::exists(initPath)) {\n        initPath = getDefaultOutputDir();\n      }\n\n      QString dirPath = QFileDialog::getExistingDirectory(\n          this, tr(\"Select Export Output Directory\"), initPath,\n          QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);\n\n      if (!dirPath.isEmpty()) {\n        m_outputDirInput->setText(dirPath);\n      }\n    });\n  }\n\n  return box;\n}\n\nQGroupBox *ExportDialog::setupAdvancedGroup(QWidget *p_parent) {\n  auto box = new QGroupBox(tr(\"Advanced\"), p_parent);\n  auto layout = new QVBoxLayout(box);\n\n  m_advancedSettings.resize(AdvancedSettings::Max);\n\n  m_advancedSettings[AdvancedSettings::General] = setupGeneralAdvancedSettings(box);\n  layout->addWidget(m_advancedSettings[AdvancedSettings::General]);\n\n  return box;\n}\n\nQWidget *ExportDialog::setupGeneralAdvancedSettings(QWidget *p_parent) {\n  QWidget *widget = new QWidget(p_parent);\n  auto layout = WidgetsFactory::createFormLayout(widget);\n  layout->setContentsMargins(0, 0, 0, 0);\n\n  {\n    m_recursiveCheckBox = WidgetsFactory::createCheckBox(tr(\"Process sub-folders\"), widget);\n    layout->addRow(m_recursiveCheckBox);\n  }\n\n  {\n    m_exportAttachmentsCheckBox = WidgetsFactory::createCheckBox(tr(\"Export attachments\"), widget);\n    layout->addRow(m_exportAttachmentsCheckBox);\n  }\n\n  return widget;\n}\n\nvoid ExportDialog::setupButtonBox() {\n  setDialogButtonBox(QDialogButtonBox::Close);\n\n  auto box = getDialogButtonBox();\n\n  m_exportBtn = box->addButton(tr(\"Export\"), QDialogButtonBox::ActionRole);\n  connect(m_exportBtn, &QPushButton::clicked, this, &ExportDialog::startExport);\n\n  m_openDirBtn = box->addButton(tr(\"Open Directory\"), QDialogButtonBox::ActionRole);\n  connect(m_openDirBtn, &QPushButton::clicked, this, [this]() {\n    auto dir = getOutputDir();\n    if (!dir.isEmpty()) {\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(dir));\n    }\n  });\n\n  m_copyContentBtn = box->addButton(tr(\"Copy Content\"), QDialogButtonBox::ActionRole);\n  m_copyContentBtn->setToolTip(tr(\"Copy exported file content\"));\n  m_copyContentBtn->setEnabled(false);\n  connect(m_copyContentBtn, &QPushButton::clicked, this, [this]() {\n    if (m_exportedFile.isEmpty()) {\n      return;\n    }\n\n    const auto content = FileUtils::readTextFile(m_exportedFile);\n    if (!content.isEmpty()) {\n      ClipboardUtils::setTextToClipboard(content);\n    }\n  });\n}\n\nQString ExportDialog::getOutputDir() const { return m_outputDirInput->text(); }\n\nvoid ExportDialog::initOptions() {\n  // Read it from config.\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  m_option = sessionConfig.getExportOption();\n  m_customOptions = sessionConfig.getCustomExportOptions();\n\n  const auto &theme = VNoteX::getInst().getThemeMgr().getCurrentTheme();\n  m_option.m_renderingStyleFile = theme.getFile(Theme::File::WebStyleSheet);\n  m_option.m_syntaxHighlightStyleFile = theme.getFile(Theme::File::HighlightStyleSheet);\n\n  if (m_option.m_outputDir.isEmpty()) {\n    m_option.m_outputDir = getDefaultOutputDir();\n  }\n\n  if (findCustomOption(m_option.m_customExport) == -1) {\n    m_option.m_customExport = m_customOptions.isEmpty() ? QString() : m_customOptions[0].m_name;\n  }\n}\n\nvoid ExportDialog::restoreFields(const ExportOption &p_option) {\n  {\n    int idx = m_sourceComboBox->findData(static_cast<int>(p_option.m_source));\n    if (idx != -1) {\n      m_sourceComboBox->setCurrentIndex(idx);\n    }\n  }\n\n  {\n    int idx = m_targetFormatComboBox->findData(static_cast<int>(p_option.m_targetFormat));\n    if (idx != -1) {\n      m_targetFormatComboBox->setCurrentIndex(idx);\n    }\n  }\n\n  m_transparentBgCheckBox->setChecked(p_option.m_useTransparentBg);\n\n  {\n    int idx = m_renderingStyleComboBox->findData(p_option.m_renderingStyleFile);\n    if (idx != -1) {\n      m_renderingStyleComboBox->setCurrentIndex(idx);\n    }\n  }\n\n  {\n    int idx = m_syntaxHighlightStyleComboBox->findData(p_option.m_syntaxHighlightStyleFile);\n    if (idx != -1) {\n      m_syntaxHighlightStyleComboBox->setCurrentIndex(idx);\n    }\n  }\n\n  m_outputDirInput->setText(p_option.m_outputDir);\n\n  m_recursiveCheckBox->setChecked(p_option.m_recursive);\n\n  m_exportAttachmentsCheckBox->setChecked(p_option.m_exportAttachments);\n}\n\nvoid ExportDialog::saveFields(ExportOption &p_option) {\n  p_option.m_source = static_cast<ExportSource>(m_sourceComboBox->currentData().toInt());\n  p_option.m_targetFormat =\n      static_cast<ExportFormat>(m_targetFormatComboBox->currentData().toInt());\n  p_option.m_useTransparentBg = m_transparentBgCheckBox->isChecked();\n  p_option.m_renderingStyleFile = m_renderingStyleComboBox->currentData().toString();\n  p_option.m_syntaxHighlightStyleFile = m_syntaxHighlightStyleComboBox->currentData().toString();\n  p_option.m_outputDir = getOutputDir();\n  p_option.m_recursive = m_recursiveCheckBox->isChecked();\n  p_option.m_exportAttachments = m_exportAttachmentsCheckBox->isChecked();\n\n  if (m_advancedSettings[AdvancedSettings::HTML]) {\n    saveFields(p_option.m_htmlOption);\n  }\n\n  if (m_advancedSettings[AdvancedSettings::PDF]) {\n    saveFields(p_option.m_pdfOption);\n  }\n\n  if (m_advancedSettings[AdvancedSettings::Custom]) {\n    saveCustomFields(p_option);\n  }\n}\n\nvoid ExportDialog::startExport() {\n  if (m_exportOngoing) {\n    return;\n  }\n\n  // On start.\n  {\n    clearInformationText();\n    m_exportedFile.clear();\n    m_exportOngoing = true;\n    updateUIOnExport();\n  }\n\n  saveFields(m_option);\n\n  int ret = doExport(m_option);\n  appendLog(tr(\"%n file(s) exported\", \"\", ret));\n\n  // On end.\n  {\n    m_exportOngoing = false;\n    updateUIOnExport();\n  }\n}\n\nvoid ExportDialog::rejectedButtonClicked() {\n  if (m_exportOngoing) {\n    // Just cancel the export.\n    appendLog(tr(\"Cancelling the export\"));\n    getExporter()->stop();\n  } else {\n    Dialog::rejectedButtonClicked();\n  }\n}\n\nvoid ExportDialog::appendLog(const QString &p_log) {\n  appendInformationText(\">>> \" + p_log);\n  QCoreApplication::sendPostedEvents();\n}\n\nvoid ExportDialog::updateUIOnExport() {\n  m_exportBtn->setEnabled(!m_exportOngoing);\n  if (m_exportOngoing) {\n    m_progressBar->setMaximum(0);\n    m_progressBar->show();\n  } else {\n    m_progressBar->hide();\n  }\n  m_copyContentBtn->setEnabled(!m_exportedFile.isEmpty());\n}\n\nint ExportDialog::doExport(ExportOption p_option) {\n  if (p_option.m_targetFormat == ExportFormat::PDF && p_option.m_pdfOption.m_useWkhtmltopdf) {\n    // Check wkhtmltopdf executable.\n    const auto &wkExePath = p_option.m_pdfOption.m_wkhtmltopdfExePath;\n    if (wkExePath.isEmpty() || !QFileInfo::exists(wkExePath)) {\n      appendLog(tr(\"Please specify a valid wkhtmltopdf executable file (%1)\").arg(wkExePath));\n      return 0;\n    }\n\n    p_option.m_transformSvgToPngEnabled = true;\n    p_option.m_removeCodeToolBarEnabled = true;\n  } else if (p_option.m_targetFormat == ExportFormat::Custom) {\n    int optIdx = findCustomOption(p_option.m_customExport);\n    if (optIdx == -1) {\n      appendLog(tr(\"Please specify a valid scheme\"));\n      return 0;\n    }\n\n    p_option.m_customOption = &m_customOptions[optIdx];\n  }\n\n  int exportedFilesCount = 0;\n\n  switch (p_option.m_source) {\n  case ExportSource::CurrentBuffer: {\n    Q_ASSERT(m_buffer);\n    const auto outputFile = getExporter()->doExport(p_option, m_buffer);\n    exportedFilesCount = outputFile.isEmpty() ? 0 : 1;\n    if (exportedFilesCount == 1 && p_option.m_targetFormat == ExportFormat::HTML) {\n      m_exportedFile = outputFile;\n    }\n    break;\n  }\n\n  case ExportSource::CurrentNote: {\n    Q_ASSERT(m_note);\n    const auto outputFile = getExporter()->doExport(p_option, m_note);\n    exportedFilesCount = outputFile.isEmpty() ? 0 : 1;\n    if (exportedFilesCount == 1 && p_option.m_targetFormat == ExportFormat::HTML) {\n      m_exportedFile = outputFile;\n    }\n    break;\n  }\n\n  case ExportSource::CurrentFolder: {\n    Q_ASSERT(m_folder);\n    const auto outputFiles = getExporter()->doExportFolder(p_option, m_folder);\n    exportedFilesCount = outputFiles.size();\n    break;\n  }\n\n  case ExportSource::CurrentNotebook: {\n    Q_ASSERT(m_notebook);\n    const auto outputFiles = getExporter()->doExport(p_option, m_notebook);\n    exportedFilesCount = outputFiles.size();\n    break;\n  }\n  }\n\n  return exportedFilesCount;\n}\n\nExporter *ExportDialog::getExporter() {\n  if (!m_exporter) {\n    m_exporter = new Exporter(this);\n    connect(m_exporter, &Exporter::progressUpdated, this, &ExportDialog::updateProgress);\n    connect(m_exporter, &Exporter::logRequested, this, &ExportDialog::appendLog);\n  }\n  return m_exporter;\n}\n\nvoid ExportDialog::updateProgress(int p_val, int p_maximum) {\n  if (p_maximum < m_progressBar->value()) {\n    m_progressBar->setValue(p_val);\n    m_progressBar->setMaximum(p_maximum);\n  } else {\n    m_progressBar->setMaximum(p_maximum);\n    m_progressBar->setValue(p_val);\n  }\n}\n\nQWidget *ExportDialog::getHtmlAdvancedSettings() {\n  if (!m_advancedSettings[AdvancedSettings::HTML]) {\n    // Setup HTML advanced settings.\n    QWidget *widget = new QWidget(m_advancedGroupBox);\n    auto layout = WidgetsFactory::createFormLayout(widget);\n    layout->setContentsMargins(0, 0, 0, 0);\n\n    {\n      m_embedStylesCheckBox = WidgetsFactory::createCheckBox(tr(\"Embed styles\"), widget);\n      layout->addRow(m_embedStylesCheckBox);\n    }\n\n    {\n      m_embedImagesCheckBox = WidgetsFactory::createCheckBox(tr(\"Embed images\"), widget);\n      layout->addRow(m_embedImagesCheckBox);\n    }\n\n    {\n      m_completePageCheckBox = WidgetsFactory::createCheckBox(tr(\"Complete page\"), widget);\n      m_completePageCheckBox->setToolTip(\n          tr(\"Export the whole page along with images which may change the links structure\"));\n      connect(m_completePageCheckBox, &QCheckBox::stateChanged, this, [this](int p_state) {\n        bool checked = p_state == Qt::Checked;\n        m_embedImagesCheckBox->setEnabled(checked);\n      });\n      layout->addRow(m_completePageCheckBox);\n    }\n\n    {\n      m_useMimeHtmlFormatCheckBox = WidgetsFactory::createCheckBox(tr(\"Mime HTML format\"), widget);\n      connect(m_useMimeHtmlFormatCheckBox, &QCheckBox::stateChanged, this, [this](int p_state) {\n        bool checked = p_state == Qt::Checked;\n        m_embedStylesCheckBox->setEnabled(!checked);\n        m_completePageCheckBox->setEnabled(!checked);\n      });\n      // TODO: do not support MHTML for now.\n      m_useMimeHtmlFormatCheckBox->setEnabled(false);\n      m_useMimeHtmlFormatCheckBox->hide();\n      layout->addRow(m_useMimeHtmlFormatCheckBox);\n    }\n\n    {\n      m_addOutlinePanelCheckBox = WidgetsFactory::createCheckBox(tr(\"Add outline panel\"), widget);\n      layout->addRow(m_addOutlinePanelCheckBox);\n    }\n\n    m_advancedGroupBox->layout()->addWidget(widget);\n\n    m_advancedSettings[AdvancedSettings::HTML] = widget;\n\n    restoreFields(m_option.m_htmlOption);\n  }\n\n  return m_advancedSettings[AdvancedSettings::HTML];\n}\n\nvoid ExportDialog::showAdvancedSettings(AdvancedSettings p_settings) {\n  for (int i = AdvancedSettings::General + 1; i < m_advancedSettings.size(); ++i) {\n    if (m_advancedSettings[i]) {\n      m_advancedSettings[i]->hide();\n    }\n  }\n\n  QWidget *widget = nullptr;\n  switch (p_settings) {\n  case AdvancedSettings::HTML:\n    widget = getHtmlAdvancedSettings();\n    break;\n\n  case AdvancedSettings::PDF:\n    widget = getPdfAdvancedSettings();\n    break;\n\n  case AdvancedSettings::Custom:\n    widget = getCustomAdvancedSettings();\n    break;\n\n  default:\n    break;\n  }\n\n  if (widget) {\n    widget->show();\n  }\n}\n\nvoid ExportDialog::restoreFields(const ExportHtmlOption &p_option) {\n  m_embedStylesCheckBox->setChecked(p_option.m_embedStyles);\n  m_embedImagesCheckBox->setChecked(p_option.m_embedImages);\n  m_completePageCheckBox->setChecked(p_option.m_completePage);\n  m_useMimeHtmlFormatCheckBox->setChecked(p_option.m_useMimeHtmlFormat);\n  m_addOutlinePanelCheckBox->setChecked(p_option.m_addOutlinePanel);\n}\n\nvoid ExportDialog::saveFields(ExportHtmlOption &p_option) {\n  p_option.m_embedStyles = m_embedStylesCheckBox->isChecked();\n  p_option.m_embedImages = m_embedImagesCheckBox->isChecked();\n  p_option.m_completePage = m_completePageCheckBox->isChecked();\n  p_option.m_useMimeHtmlFormat = m_useMimeHtmlFormatCheckBox->isChecked();\n  p_option.m_addOutlinePanel = m_addOutlinePanelCheckBox->isChecked();\n}\n\nQWidget *ExportDialog::getPdfAdvancedSettings() {\n  if (!m_advancedSettings[AdvancedSettings::PDF]) {\n    QWidget *widget = new QWidget(m_advancedGroupBox);\n    auto layout = WidgetsFactory::createFormLayout(widget);\n    layout->setContentsMargins(0, 0, 0, 0);\n\n    {\n      m_pageLayoutBtn = new QPushButton(tr(\"Settings\"), widget);\n      connect(m_pageLayoutBtn, &QPushButton::clicked, this, [this]() {\n        QPrinter printer;\n        printer.setPageLayout(*m_pageLayout);\n\n        QPageSetupDialog dlg(&printer, this);\n        if (dlg.exec() != QDialog::Accepted) {\n          return;\n        }\n\n        m_pageLayout->setUnits(QPageLayout::Millimeter);\n        m_pageLayout->setPageSize(printer.pageLayout().pageSize());\n        m_pageLayout->setMargins(printer.pageLayout().margins(QPageLayout::Millimeter));\n        m_pageLayout->setOrientation(printer.pageLayout().orientation());\n\n        updatePageLayoutButtonLabel();\n      });\n      layout->addRow(tr(\"Page layout:\"), m_pageLayoutBtn);\n    }\n\n    {\n      m_addTableOfContentsCheckBox =\n          WidgetsFactory::createCheckBox(tr(\"Add Table-of-Contents\"), widget);\n      layout->addRow(m_addTableOfContentsCheckBox);\n    }\n\n    {\n      auto useLayout = new QHBoxLayout();\n\n      m_useWkhtmltopdfCheckBox =\n          WidgetsFactory::createCheckBox(tr(\"Use wkhtmltopdf (outline supported)\"), widget);\n      useLayout->addWidget(m_useWkhtmltopdfCheckBox);\n\n      auto downloadBtn = new QPushButton(tr(\"Download\"), widget);\n      connect(downloadBtn, &QPushButton::clicked, this, []() {\n        WidgetUtils::openUrlByDesktop(QUrl(\"https://wkhtmltopdf.org/downloads.html\"));\n      });\n      useLayout->addWidget(downloadBtn);\n\n      layout->addRow(useLayout);\n    }\n\n    {\n      m_allInOneCheckBox = WidgetsFactory::createCheckBox(tr(\"All-in-One\"), widget);\n      m_allInOneCheckBox->setToolTip(tr(\"Export all source files into one file\"));\n      m_allInOneCheckBox->setEnabled(false);\n      connect(m_useWkhtmltopdfCheckBox, &QCheckBox::stateChanged, this,\n              [this](int p_state) { m_allInOneCheckBox->setEnabled(p_state == Qt::Checked); });\n      layout->addRow(m_allInOneCheckBox);\n    }\n\n    {\n      auto pathLayout = new QHBoxLayout();\n\n      m_wkhtmltopdfExePathLineEdit = WidgetsFactory::createLineEdit(widget);\n      pathLayout->addWidget(m_wkhtmltopdfExePathLineEdit);\n\n      auto browseBtn = new QPushButton(tr(\"Browse\"), widget);\n      pathLayout->addWidget(browseBtn);\n      connect(browseBtn, &QPushButton::clicked, this, [this]() {\n        QString filePath = QFileDialog::getOpenFileName(this, tr(\"Select wkhtmltopdf Executable\"),\n                                                        QCoreApplication::applicationDirPath());\n\n        if (!filePath.isEmpty()) {\n          m_wkhtmltopdfExePathLineEdit->setText(filePath);\n        }\n      });\n\n      layout->addRow(tr(\"Wkhtmltopdf path:\"), pathLayout);\n    }\n\n    {\n      m_wkhtmltopdfArgsLineEdit = WidgetsFactory::createLineEdit(widget);\n      layout->addRow(tr(\"Wkhtmltopdf arguments:\"), m_wkhtmltopdfArgsLineEdit);\n    }\n\n    m_advancedGroupBox->layout()->addWidget(widget);\n\n    m_advancedSettings[AdvancedSettings::PDF] = widget;\n\n    restoreFields(m_option.m_pdfOption);\n  }\n\n  return m_advancedSettings[AdvancedSettings::PDF];\n}\n\nQWidget *ExportDialog::getCustomAdvancedSettings() {\n  if (!m_advancedSettings[AdvancedSettings::Custom]) {\n    QWidget *widget = new QWidget(m_advancedGroupBox);\n    auto layout = WidgetsFactory::createFormLayout(widget);\n    layout->setContentsMargins(0, 0, 0, 0);\n\n    {\n      auto schemeLayout = new QHBoxLayout();\n      layout->addRow(tr(\"Scheme:\"), schemeLayout);\n\n      m_customExportComboBox = WidgetsFactory::createComboBox(widget);\n      m_customExportComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);\n      schemeLayout->addWidget(m_customExportComboBox, 1);\n\n      auto addBtn = new QPushButton(tr(\"New\"), widget);\n      addBtn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);\n      connect(addBtn, &QPushButton::clicked, this, &ExportDialog::addCustomExportScheme);\n      schemeLayout->addWidget(addBtn);\n\n      auto delBtn = new QPushButton(tr(\"Delete\"), widget);\n      delBtn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);\n      connect(delBtn, &QPushButton::clicked, this, &ExportDialog::removeCustomExportScheme);\n      schemeLayout->addWidget(delBtn);\n    }\n\n    {\n      m_targetSuffixLineEdit = WidgetsFactory::createLineEdit(widget);\n      m_targetSuffixLineEdit->setToolTip(tr(\"Suffix of the target file like docs/pdf/epub\"));\n      m_targetSuffixLineEdit->setEnabled(false);\n      layout->addRow(tr(\"Target file suffix:\"), m_targetSuffixLineEdit);\n    }\n\n    {\n      m_resourcePathSeparatorLineEdit = WidgetsFactory::createLineEdit(widget);\n      m_resourcePathSeparatorLineEdit->setToolTip(\n          tr(\"Separator used to concatenate resource folder paths\"));\n      m_resourcePathSeparatorLineEdit->setEnabled(false);\n      layout->addRow(tr(\"Resource path separator:\"), m_resourcePathSeparatorLineEdit);\n    }\n\n    {\n      m_useHtmlInputCheckBox =\n          WidgetsFactory::createCheckBox(tr(\"Use HTML format as input\"), widget);\n      m_useHtmlInputCheckBox->setToolTip(\n          tr(\"Convert to HTMl format first as the input of the custom export command\"));\n      m_useHtmlInputCheckBox->setEnabled(false);\n      layout->addRow(m_useHtmlInputCheckBox);\n    }\n\n    {\n      m_allInOneCheckBox = WidgetsFactory::createCheckBox(tr(\"All-in-One\"), widget);\n      m_allInOneCheckBox->setToolTip(tr(\"Export all source files into one file\"));\n      m_allInOneCheckBox->setEnabled(false);\n      layout->addRow(m_allInOneCheckBox);\n    }\n\n    {\n      m_targetPageScrollableCheckBox =\n          WidgetsFactory::createCheckBox(tr(\"Target page scrollable\"), widget);\n      m_targetPageScrollableCheckBox->setToolTip(\n          tr(\"Whether the page of the target file is scrollable\"));\n      m_targetPageScrollableCheckBox->setEnabled(false);\n      layout->addRow(m_targetPageScrollableCheckBox);\n    }\n\n    {\n      auto usage = tr(\"Command:\\n\"\n                      \"\\t%1: List of input files.\\n\"\n                      \"\\t%2: List of paths to search for images and other resources.\\n\"\n                      \"\\t%3: Path of rendering CSS style sheet.\\n\"\n                      \"\\t%4: Path of syntax highlighting CSS style sheet.\\n\"\n                      \"\\t%5: Path of output file.\");\n      layout->addRow(new QLabel(usage, widget));\n    }\n\n    {\n      m_commandTextEdit = WidgetsFactory::createPlainTextEdit(widget);\n#if defined(Q_OS_WIN)\n      m_commandTextEdit->setPlaceholderText(\n          \"pandoc.exe --resource-path=.;%2 --css=%3 --css=%4 -s -o %5 %1\");\n#else\n      m_commandTextEdit->setPlaceholderText(\n          \"pandoc --resource-path=.:%2 --css=%3 --css=%4 -s -o %5 %1\");\n#endif\n      m_commandTextEdit->setMaximumHeight(m_commandTextEdit->minimumSizeHint().height());\n      m_commandTextEdit->setEnabled(false);\n      layout->addRow(m_commandTextEdit);\n    }\n\n    connect(m_customExportComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &ExportDialog::customExportCurrentSchemeChanged);\n\n    m_advancedGroupBox->layout()->addWidget(widget);\n\n    m_advancedSettings[AdvancedSettings::Custom] = widget;\n\n    restoreCustomFields(m_option);\n  }\n\n  return m_advancedSettings[AdvancedSettings::Custom];\n}\n\nvoid ExportDialog::restoreFields(const ExportPdfOption &p_option) {\n  m_pageLayout = p_option.m_layout;\n  updatePageLayoutButtonLabel();\n\n  m_addTableOfContentsCheckBox->setChecked(p_option.m_addTableOfContents);\n  m_useWkhtmltopdfCheckBox->setChecked(p_option.m_useWkhtmltopdf);\n  m_allInOneCheckBox->setChecked(p_option.m_allInOne);\n  m_wkhtmltopdfExePathLineEdit->setText(p_option.m_wkhtmltopdfExePath);\n  m_wkhtmltopdfArgsLineEdit->setText(p_option.m_wkhtmltopdfArgs);\n}\n\nvoid ExportDialog::saveFields(ExportPdfOption &p_option) {\n  p_option.m_layout = m_pageLayout;\n  p_option.m_addTableOfContents = m_addTableOfContentsCheckBox->isChecked();\n  p_option.m_useWkhtmltopdf = m_useWkhtmltopdfCheckBox->isChecked();\n  p_option.m_allInOne = m_allInOneCheckBox->isChecked();\n  p_option.m_wkhtmltopdfExePath = m_wkhtmltopdfExePathLineEdit->text();\n  p_option.m_wkhtmltopdfArgs = m_wkhtmltopdfArgsLineEdit->text();\n}\n\nvoid ExportDialog::restoreCustomFields(const ExportOption &p_option) {\n  m_customExportComboBox->clear();\n  int curIndex = -1;\n  for (int i = 0; i < m_customOptions.size(); ++i) {\n    m_customExportComboBox->addItem(m_customOptions[i].m_name, m_customOptions[i].m_name);\n    if (m_customOptions[i].m_name == p_option.m_customExport) {\n      curIndex = i;\n    }\n  }\n  m_customExportComboBox->setCurrentIndex(curIndex);\n}\n\nvoid ExportDialog::saveCustomFields(ExportOption &p_option) {\n  p_option.m_customExport = m_customExportComboBox->currentData().toString();\n\n  int idx = findCustomOption(p_option.m_customExport);\n  if (idx > -1) {\n    auto &opt = m_customOptions[idx];\n    opt.m_targetSuffix = m_targetSuffixLineEdit->text();\n    opt.m_resourcePathSeparator = m_resourcePathSeparatorLineEdit->text();\n    opt.m_useHtmlInput = m_useHtmlInputCheckBox->isChecked();\n    opt.m_allInOne = m_allInOneCheckBox->isChecked();\n    opt.m_targetPageScrollable = m_targetPageScrollableCheckBox->isChecked();\n\n    opt.m_command = m_commandTextEdit->toPlainText().trimmed();\n    int lineIdx = opt.m_command.indexOf(QLatin1Char('\\n'));\n    if (lineIdx > -1) {\n      opt.m_command = opt.m_command.left(lineIdx);\n    }\n\n    ConfigMgr::getInst().getSessionConfig().setCustomExportOptions(m_customOptions);\n  }\n}\n\nvoid ExportDialog::updatePageLayoutButtonLabel() {\n  Q_ASSERT(m_pageLayout);\n  m_pageLayoutBtn->setText(QStringLiteral(\"%1, %2\").arg(\n      m_pageLayout->pageSize().name(),\n      m_pageLayout->orientation() == QPageLayout::Portrait ? tr(\"Portrait\") : tr(\"Landscape\")));\n}\n\nint ExportDialog::findCustomOption(const QString &p_name) const {\n  if (p_name.isEmpty()) {\n    return -1;\n  }\n\n  for (int i = 0; i < m_customOptions.size(); ++i) {\n    if (m_customOptions[i].m_name == p_name) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\nvoid ExportDialog::addCustomExportScheme() {\n  QString name;\n  while (true) {\n    name = QInputDialog::getText(this, tr(\"New Custom Export Scheme\"), tr(\"Scheme name:\"));\n    if (name.isEmpty()) {\n      return;\n    }\n\n    if (findCustomOption(name) != -1) {\n      MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                               tr(\"Name conflicts with existing scheme.\"), this);\n    } else {\n      break;\n    }\n  }\n\n  // Based on current scheme.\n  ExportCustomOption newOption;\n\n  {\n    int curIndex = findCustomOption(m_customExportComboBox->currentData().toString());\n    if (curIndex > -1) {\n      newOption = m_customOptions[curIndex];\n    }\n  }\n\n  newOption.m_name = name;\n  m_customOptions.append(newOption);\n  ConfigMgr::getInst().getSessionConfig().setCustomExportOptions(m_customOptions);\n\n  // Add it to combo box.\n  m_customExportComboBox->addItem(name, name);\n  m_customExportComboBox->setCurrentIndex(m_customExportComboBox->findData(name));\n}\n\nvoid ExportDialog::removeCustomExportScheme() {\n  auto name = m_customExportComboBox->currentData().toString();\n  if (name.isEmpty()) {\n    return;\n  }\n\n  int ret = MessageBoxHelper::questionOkCancel(\n      MessageBoxHelper::Warning, tr(\"Delete scheme (%1)?\").arg(name), QString(), QString(), this);\n  if (ret != QMessageBox::Ok) {\n    return;\n  }\n\n  int idx = findCustomOption(name);\n  Q_ASSERT(idx > -1);\n  m_customOptions.remove(idx);\n  ConfigMgr::getInst().getSessionConfig().setCustomExportOptions(m_customOptions);\n\n  m_customExportComboBox->removeItem(m_customExportComboBox->currentIndex());\n}\n\nvoid ExportDialog::customExportCurrentSchemeChanged(int p_comboIdx) {\n  const bool enabled = p_comboIdx >= 0;\n  m_targetSuffixLineEdit->setEnabled(enabled);\n  m_resourcePathSeparatorLineEdit->setEnabled(enabled);\n  m_useHtmlInputCheckBox->setEnabled(enabled);\n  m_allInOneCheckBox->setEnabled(enabled);\n  m_targetPageScrollableCheckBox->setEnabled(enabled);\n  m_commandTextEdit->setEnabled(enabled);\n\n  if (p_comboIdx < 0) {\n    m_option.m_customExport.clear();\n    return;\n  }\n\n  auto name = m_customExportComboBox->currentData().toString();\n  m_option.m_customExport = name;\n  int curIndex = findCustomOption(name);\n  Q_ASSERT(curIndex > -1);\n  const auto &opt = m_customOptions[curIndex];\n  m_targetSuffixLineEdit->setText(opt.m_targetSuffix);\n  m_resourcePathSeparatorLineEdit->setText(opt.m_resourcePathSeparator);\n  m_useHtmlInputCheckBox->setChecked(opt.m_useHtmlInput);\n  m_allInOneCheckBox->setChecked(opt.m_allInOne);\n  m_targetPageScrollableCheckBox->setChecked(opt.m_targetPageScrollable);\n  m_commandTextEdit->setPlainText(opt.m_command);\n}\n"
  },
  {
    "path": "src/widgets/dialogs/exportdialog.h",
    "content": "#ifndef EXPORTDIALOG_H\n#define EXPORTDIALOG_H\n\n#include \"scrolldialog.h\"\n\n#include <QSharedPointer>\n\n#include <export/exportdata.h>\n\nclass QGroupBox;\nclass QPushButton;\nclass QComboBox;\nclass QCheckBox;\nclass QLineEdit;\nclass QProgressBar;\nclass QPlainTextEdit;\nclass QPageLayout;\n\nnamespace vnotex {\nclass Notebook;\nclass Node;\nclass Buffer;\nclass Exporter;\nclass LocationInputWithBrowseButton;\n\nclass ExportDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  // Current notebook/folder/buffer.\n  ExportDialog(Notebook *p_notebook, Node *p_folder, Node *p_note, Buffer *p_buffer,\n               QWidget *p_parent = nullptr);\n\nprotected:\n  void rejectedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate slots:\n  void updateProgress(int p_val, int p_maximum);\n\n  void appendLog(const QString &p_log);\n\n  void customExportCurrentSchemeChanged(int p_comboIdx);\n\nprivate:\n  enum AdvancedSettings { General, HTML, PDF, Custom, Max };\n\n  void setupUI();\n\n  QGroupBox *setupSourceGroup(QWidget *p_parent);\n\n  QGroupBox *setupTargetGroup(QWidget *p_parent);\n\n  QGroupBox *setupAdvancedGroup(QWidget *p_parent);\n\n  QWidget *setupGeneralAdvancedSettings(QWidget *p_parent);\n\n  QWidget *getHtmlAdvancedSettings();\n\n  QWidget *getPdfAdvancedSettings();\n\n  QWidget *getCustomAdvancedSettings();\n\n  void showAdvancedSettings(AdvancedSettings p_settings);\n\n  void setupButtonBox();\n\n  QString getOutputDir() const;\n\n  void initOptions();\n\n  void restoreFields(const ExportOption &p_option);\n\n  void saveFields(ExportOption &p_option);\n\n  void restoreFields(const ExportHtmlOption &p_option);\n\n  void saveFields(ExportHtmlOption &p_option);\n\n  void restoreFields(const ExportPdfOption &p_option);\n\n  void saveFields(ExportPdfOption &p_option);\n\n  void restoreCustomFields(const ExportOption &p_option);\n\n  void saveCustomFields(ExportOption &p_option);\n\n  void startExport();\n\n  void updateUIOnExport();\n\n  // Return exported files count.\n  int doExport(ExportOption p_option);\n\n  Exporter *getExporter();\n\n  QString getDefaultOutputDir() const;\n\n  void updatePageLayoutButtonLabel();\n\n  int findCustomOption(const QString &p_name) const;\n\n  void addCustomExportScheme();\n\n  void removeCustomExportScheme();\n\n  // Managed by QObject.\n  Exporter *m_exporter = nullptr;\n\n  Notebook *m_notebook = nullptr;\n\n  Node *m_folder = nullptr;\n\n  Node *m_note = nullptr;\n\n  Buffer *m_buffer = nullptr;\n\n  // Last exported single file.\n  QString m_exportedFile;\n\n  bool m_exportOngoing = false;\n\n  QPushButton *m_exportBtn = nullptr;\n\n  QPushButton *m_openDirBtn = nullptr;\n\n  QPushButton *m_copyContentBtn = nullptr;\n\n  QComboBox *m_sourceComboBox = nullptr;\n\n  QComboBox *m_targetFormatComboBox = nullptr;\n\n  QCheckBox *m_transparentBgCheckBox = nullptr;\n\n  QComboBox *m_renderingStyleComboBox = nullptr;\n\n  QComboBox *m_syntaxHighlightStyleComboBox = nullptr;\n\n  LocationInputWithBrowseButton *m_outputDirInput = nullptr;\n\n  QProgressBar *m_progressBar = nullptr;\n\n  QGroupBox *m_advancedGroupBox = nullptr;\n\n  QVector<QWidget *> m_advancedSettings;\n\n  // General settings.\n  QCheckBox *m_recursiveCheckBox = nullptr;\n\n  QCheckBox *m_exportAttachmentsCheckBox = nullptr;\n\n  // HTML settings.\n  QCheckBox *m_embedStylesCheckBox = nullptr;\n\n  QCheckBox *m_embedImagesCheckBox = nullptr;\n\n  QCheckBox *m_completePageCheckBox = nullptr;\n\n  QCheckBox *m_useMimeHtmlFormatCheckBox = nullptr;\n\n  QCheckBox *m_addOutlinePanelCheckBox = nullptr;\n\n  // PDF settings.\n  QPushButton *m_pageLayoutBtn = nullptr;\n\n  QCheckBox *m_addTableOfContentsCheckBox = nullptr;\n\n  QCheckBox *m_useWkhtmltopdfCheckBox = nullptr;\n\n  QCheckBox *m_allInOneCheckBox = nullptr;\n\n  QLineEdit *m_wkhtmltopdfExePathLineEdit = nullptr;\n\n  QLineEdit *m_wkhtmltopdfArgsLineEdit = nullptr;\n\n  QSharedPointer<QPageLayout> m_pageLayout;\n\n  // Custom settings.\n  QComboBox *m_customExportComboBox = nullptr;\n\n  QLineEdit *m_targetSuffixLineEdit = nullptr;\n\n  QLineEdit *m_resourcePathSeparatorLineEdit = nullptr;\n\n  QCheckBox *m_useHtmlInputCheckBox = nullptr;\n\n  QCheckBox *m_customAllInOneCheckBox = nullptr;\n\n  QCheckBox *m_targetPageScrollableCheckBox = nullptr;\n\n  QPlainTextEdit *m_commandTextEdit = nullptr;\n\n  ExportOption m_option;\n\n  QVector<ExportCustomOption> m_customOptions;\n};\n} // namespace vnotex\n\n#endif // EXPORTDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/filepropertiesdialog.cpp",
    "content": "#include \"filepropertiesdialog.h\"\n\n#include <QFileInfo>\n#include <QFormLayout>\n#include <QLabel>\n#include <QRegularExpressionValidator>\n\n#include \"../lineedit.h\"\n#include \"../widgetsfactory.h\"\n#include <utils/pathutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nFilePropertiesDialog::FilePropertiesDialog(const QString &p_path, QWidget *p_parent)\n    : ScrollDialog(p_parent), m_path(p_path) {\n  Q_ASSERT(!p_path.isEmpty());\n  setupUI();\n\n  LineEdit::selectBaseName(m_nameLineEdit);\n\n  m_nameLineEdit->setFocus();\n}\n\nvoid FilePropertiesDialog::setupUI() {\n  auto widget = new QWidget(this);\n  setCentralWidget(widget);\n\n  auto mainLayout = WidgetsFactory::createFormLayout(widget);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  const QFileInfo info(m_path);\n\n  mainLayout->addRow(tr(\"Location:\"), new QLabel(info.absolutePath(), widget));\n\n  setupNameLineEdit(widget);\n  m_nameLineEdit->setText(info.fileName());\n  mainLayout->addRow(tr(\"Name:\"), m_nameLineEdit);\n\n  mainLayout->addRow(tr(\"Size:\"), new QLabel(tr(\"%1 Bytes\").arg(info.size()), widget));\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"Properties\"));\n}\n\nvoid FilePropertiesDialog::setupNameLineEdit(QWidget *p_parent) {\n  m_nameLineEdit = WidgetsFactory::createLineEdit(p_parent);\n  auto validator = new QRegularExpressionValidator(\n      QRegularExpression(PathUtils::c_fileNameRegularExpression), m_nameLineEdit);\n  m_nameLineEdit->setValidator(validator);\n}\n\nQString FilePropertiesDialog::getFileName() const { return m_nameLineEdit->text(); }\n"
  },
  {
    "path": "src/widgets/dialogs/filepropertiesdialog.h",
    "content": "#ifndef FILEPROPERTIESDIALOG_H\n#define FILEPROPERTIESDIALOG_H\n\n#include \"scrolldialog.h\"\n\nclass QLineEdit;\n\nnamespace vnotex {\nclass FilePropertiesDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  FilePropertiesDialog(const QString &p_path, QWidget *p_parent = nullptr);\n\n  QString getFileName() const;\n\nprivate:\n  void setupUI();\n\n  void setupNameLineEdit(QWidget *p_parent);\n\n  QString m_path;\n\n  QLineEdit *m_nameLineEdit = nullptr;\n};\n} // namespace vnotex\n\n#endif // FILEPROPERTIESDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/folderfilesfilterwidget.cpp",
    "content": "#include \"folderfilesfilterwidget.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QFileDialog>\n#include <QFormLayout>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QLineEdit>\n#include <QListWidget>\n#include <QPushButton>\n#include <QSet>\n#include <QTimer>\n#include <QVBoxLayout>\n\n#include \"../lineedit.h\"\n#include \"../widgetsfactory.h\"\n#include \"selectionitemwidget.h\"\n#include <utils/pathutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nFolderFilesFilterWidget::FolderFilesFilterWidget(QWidget *p_parent) : QWidget(p_parent) {\n  m_scanTimer = new QTimer(this);\n  m_scanTimer->setSingleShot(true);\n  m_scanTimer->setInterval(2000);\n  connect(m_scanTimer, &QTimer::timeout, this, &FolderFilesFilterWidget::scanSuffixes);\n\n  setupUI();\n}\n\nvoid FolderFilesFilterWidget::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  {\n    auto pathLayout = new QHBoxLayout();\n    pathLayout->setContentsMargins(0, 0, 0, 0);\n    mainLayout->addRow(tr(\"Folder:\"), pathLayout);\n\n    m_folderPathEdit = WidgetsFactory::createLineEdit(this);\n    pathLayout->addWidget(m_folderPathEdit);\n    connect(m_folderPathEdit, &QLineEdit::textChanged, this, [this]() {\n      m_ready = false;\n      m_scanTimer->start();\n    });\n\n    auto browseBtn = new QPushButton(tr(\"Browse\"), this);\n    pathLayout->addWidget(browseBtn);\n    connect(browseBtn, &QPushButton::clicked, this, [this]() {\n      static QString lastBrowsePath = QDir::homePath();\n      auto folderPath = QFileDialog::getExistingDirectory(\n          this, tr(\"Select Notebook Root Folder\"), lastBrowsePath,\n          QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);\n      if (!folderPath.isEmpty()) {\n        lastBrowsePath = PathUtils::parentDirPath(folderPath);\n        m_folderPathEdit->setText(folderPath);\n      }\n    });\n  }\n\n  {\n    auto layout = new QHBoxLayout();\n    mainLayout->addRow(tr(\"Select files:\"), layout);\n    layout->setContentsMargins(0, 0, 0, 0);\n\n    m_suffixList = new QListWidget(this);\n    layout->addWidget(m_suffixList);\n\n    auto btnLayout = new QVBoxLayout();\n    layout->addLayout(btnLayout);\n    btnLayout->setContentsMargins(0, 0, 0, 0);\n\n    auto selectAllBtn = new QPushButton(tr(\"Select All\"), this);\n    btnLayout->addWidget(selectAllBtn);\n    connect(selectAllBtn, &QPushButton::clicked, this, [this]() {\n      for (int i = 0; i < m_suffixList->count(); ++i) {\n        SelectionItemWidget *widget = getItemWidget(m_suffixList->item(i));\n        widget->setChecked(true);\n      }\n    });\n\n    auto clearBtn = new QPushButton(tr(\"Clear\"), this);\n    btnLayout->addWidget(clearBtn);\n    connect(clearBtn, &QPushButton::clicked, this, [this]() {\n      for (int i = 0; i < m_suffixList->count(); ++i) {\n        SelectionItemWidget *widget = getItemWidget(m_suffixList->item(i));\n        widget->setChecked(false);\n      }\n    });\n\n    btnLayout->addStretch();\n  }\n}\n\nQString FolderFilesFilterWidget::getFolderPath() const {\n  Q_ASSERT(m_ready);\n  return m_folderPathEdit->text();\n}\n\nQStringList FolderFilesFilterWidget::getSuffixes() const {\n  Q_ASSERT(m_ready);\n  QStringList suffixes;\n  for (int i = 0; i < m_suffixList->count(); ++i) {\n    auto widget = getItemWidget(m_suffixList->item(i));\n    if (widget->isChecked()) {\n      suffixes << widget->getData().toString();\n    }\n  }\n\n  return suffixes;\n}\n\nstatic void scanDir(const QString &p_path, QSet<QString> &p_suffixes) {\n  QDir dir(p_path);\n  auto children =\n      dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);\n  for (const auto &child : children) {\n    if (child.isDir()) {\n      scanDir(child.filePath(), p_suffixes);\n    } else {\n      if (!child.suffix().isEmpty()) {\n        p_suffixes.insert(child.suffix());\n      }\n    }\n  }\n}\n\nstatic bool shouldSuffixBeChecked(const QString &p_suffix) {\n  QStringList suffixes = {QStringLiteral(\"md\"),   QStringLiteral(\"markdown\"), QStringLiteral(\"cpp\"),\n                          QStringLiteral(\"py\"),   QStringLiteral(\"js\"),       QStringLiteral(\"css\"),\n                          QStringLiteral(\"html\"), QStringLiteral(\"txt\")};\n  auto suf = p_suffix.toLower();\n  return suffixes.contains(suf);\n}\n\nvoid FolderFilesFilterWidget::scanSuffixes() {\n  m_suffixList->clear();\n\n  auto folderPath = m_folderPathEdit->text();\n  bool validFolderPath = QFileInfo::exists(folderPath) && PathUtils::isLegalPath(folderPath);\n  if (validFolderPath) {\n    WidgetUtils::setPropertyDynamically(m_folderPathEdit, \"State\");\n\n    QSet<QString> suffixes;\n    scanDir(folderPath, suffixes);\n\n    for (const auto &suffix : suffixes) {\n      auto itemWidget = new SelectionItemWidget(suffix, this);\n      itemWidget->setChecked(shouldSuffixBeChecked(suffix));\n      itemWidget->setData(suffix);\n\n      QListWidgetItem *item = new QListWidgetItem(m_suffixList);\n      QSize size = itemWidget->sizeHint();\n      size.setHeight(size.height() * 2);\n      item->setSizeHint(size);\n\n      m_suffixList->setItemWidget(item, itemWidget);\n    }\n  } else {\n    WidgetUtils::setPropertyDynamically(m_folderPathEdit, \"State\", \"error\");\n    qWarning() << \"invalid folder path\" << folderPath;\n  }\n\n  WidgetUtils::updateSize(m_suffixList);\n\n  m_ready = true;\n  emit filesChanged();\n}\n\nSelectionItemWidget *FolderFilesFilterWidget::getItemWidget(QListWidgetItem *p_item) const {\n  QWidget *wid = m_suffixList->itemWidget(p_item);\n  return static_cast<SelectionItemWidget *>(wid);\n}\n\nbool FolderFilesFilterWidget::isReady() const { return m_ready; }\n\nQLineEdit *FolderFilesFilterWidget::getFolderPathEdit() const { return m_folderPathEdit; }\n"
  },
  {
    "path": "src/widgets/dialogs/folderfilesfilterwidget.h",
    "content": "#ifndef FOLDERFILESFILTERWIDGET_H\n#define FOLDERFILESFILTERWIDGET_H\n\n#include <QStringList>\n#include <QWidget>\n\nclass QTimer;\nclass QLineEdit;\nclass QListWidget;\nclass QListWidgetItem;\n\nnamespace vnotex {\nclass SelectionItemWidget;\n\n// Filter files within a folder by suffix.\nclass FolderFilesFilterWidget : public QWidget {\n  Q_OBJECT\npublic:\n  explicit FolderFilesFilterWidget(QWidget *p_parent = nullptr);\n\n  QLineEdit *getFolderPathEdit() const;\n\n  QString getFolderPath() const;\n\n  QStringList getSuffixes() const;\n\n  // Whether complete scanning files.\n  bool isReady() const;\n\nsignals:\n  // Folder path or selected suffixes changed.\n  void filesChanged();\n\nprivate slots:\n  void scanSuffixes();\n\nprivate:\n  void setupUI();\n\n  SelectionItemWidget *getItemWidget(QListWidgetItem *p_item) const;\n\n  // Managed by QObject.\n  QTimer *m_scanTimer = nullptr;\n\n  QLineEdit *m_folderPathEdit = nullptr;\n\n  QListWidget *m_suffixList = nullptr;\n\n  bool m_ready = false;\n};\n} // namespace vnotex\n\n#endif // FOLDERFILESFILTERWIDGET_H\n"
  },
  {
    "path": "src/widgets/dialogs/folderpropertiesdialog.cpp",
    "content": "#include \"folderpropertiesdialog.h\"\n\n#include <QtWidgets>\n\n#include \"../widgetsfactory.h\"\n#include \"exception.h\"\n#include \"nodeinfowidget.h\"\n#include \"notebook/node.h\"\n#include \"notebook/notebook.h\"\n#include <core/events.h>\n#include <core/vnotex.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nFolderPropertiesDialog::FolderPropertiesDialog(Node *p_node, QWidget *p_parent)\n    : ScrollDialog(p_parent), m_node(p_node) {\n  Q_ASSERT(m_node);\n  setupUI();\n\n  m_infoWidget->getNameLineEdit()->selectAll();\n  m_infoWidget->getNameLineEdit()->setFocus();\n}\n\nvoid FolderPropertiesDialog::setupUI() {\n  setupNodeInfoWidget(this);\n  setCentralWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(m_node->getName() + QStringLiteral(\" \") + tr(\"Properties\"));\n}\n\nvoid FolderPropertiesDialog::setupNodeInfoWidget(QWidget *p_parent) {\n  m_infoWidget = new NodeInfoWidget(m_node, p_parent);\n}\n\nbool FolderPropertiesDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  return valid;\n}\n\nbool FolderPropertiesDialog::validateNameInput(QString &p_msg) {\n  p_msg.clear();\n\n  auto name = m_infoWidget->getName();\n  if (name.isEmpty()) {\n    p_msg = tr(\"Please specify a name for the folder.\");\n    return false;\n  }\n\n  Q_ASSERT(m_infoWidget->getParentNode() == m_node->getParent());\n  if (!m_node->canRename(name)) {\n    p_msg = tr(\"Name conflicts with existing folder.\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid FolderPropertiesDialog::acceptedButtonClicked() {\n  if (validateInputs() && saveFolderProperties()) {\n    accept();\n  }\n}\n\nbool FolderPropertiesDialog::saveFolderProperties() {\n  try {\n    if (m_infoWidget->getName() != m_node->getName()) {\n      // Close the node first.\n      auto event = QSharedPointer<Event>::create();\n      emit VNoteX::getInst().nodeAboutToRename(m_node, event);\n      if (!event->m_response.toBool()) {\n        return false;\n      }\n\n      m_node->updateName(m_infoWidget->getName());\n    }\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to save folder (%1) in (%2) (%3).\")\n                      .arg(m_node->getName(), m_node->getNotebook()->getName(), p_e.what());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/folderpropertiesdialog.h",
    "content": "#ifndef FOLDERPROPERTIESDIALOG_H\n#define FOLDERPROPERTIESDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass Node;\nclass NodeInfoWidget;\n\nclass FolderPropertiesDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  FolderPropertiesDialog(Node *p_node, QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupNodeInfoWidget(QWidget *p_parent);\n\n  bool validateNameInput(QString &p_msg);\n\n  bool saveFolderProperties();\n\n  bool validateInputs();\n\n  NodeInfoWidget *m_infoWidget = nullptr;\n\n  Node *m_node = nullptr;\n};\n} // namespace vnotex\n\n#endif // FOLDERPROPERTIESDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/imageinsertdialog.cpp",
    "content": "#include \"imageinsertdialog.h\"\n\n#include <QCheckBox>\n#include <QDir>\n#include <QFileDialog>\n#include <QFileInfo>\n#include <QGridLayout>\n#include <QLabel>\n#include <QPushButton>\n#include <QRegularExpression>\n#include <QRegularExpressionValidator>\n#include <QScrollArea>\n#include <QSlider>\n#include <QSpinBox>\n#include <QTemporaryFile>\n#include <QTimer>\n#include <QUrl>\n#include <QVBoxLayout>\n\n#include <vtextedit/markdownutils.h>\n#include <vtextedit/networkutils.h>\n\n#include <core/configmgr.h>\n#include <core/sessionconfig.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <widgets/lineedit.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nint ImageInsertDialog::s_lastScaleSliderValue = 10;\n\nint ImageInsertDialog::s_lastScaleWidth = -1;\n\nbool ImageInsertDialog::s_fixedScaleWidth = false;\n\nImageInsertDialog::ImageInsertDialog(const QString &p_title, const QString &p_imageTitle,\n                                     const QString &p_imageAlt, const QString &p_imagePath,\n                                     bool p_browserEnabled, QWidget *p_parent)\n    : Dialog(p_parent), m_browserEnabled(p_browserEnabled) {\n  m_imagePathCheckTimer = new QTimer(this);\n  m_imagePathCheckTimer->setSingleShot(true);\n  m_imagePathCheckTimer->setInterval(500);\n  connect(m_imagePathCheckTimer, &QTimer::timeout, this, &ImageInsertDialog::checkImagePathInput);\n\n  setupUI(p_title, p_imageTitle, p_imageAlt, p_imagePath);\n\n  checkInput();\n}\n\nvoid ImageInsertDialog::setupUI(const QString &p_title, const QString &p_imageTitle,\n                                const QString &p_imageAlt, const QString &p_imagePath) {\n  auto mainWidget = new QWidget(this);\n  setCentralWidget(mainWidget);\n\n  auto mainLayout = new QVBoxLayout(mainWidget);\n\n  auto gridLayout = new QGridLayout();\n  mainLayout->addLayout(gridLayout);\n\n  mainLayout->addStretch();\n\n  // Image Path.\n  m_imagePathEdit = WidgetsFactory::createLineEdit(p_imagePath, mainWidget);\n  m_imagePathEdit->setReadOnly(!m_browserEnabled);\n  gridLayout->addWidget(new QLabel(tr(\"From:\"), mainWidget), 0, 0, 1, 1);\n  gridLayout->addWidget(m_imagePathEdit, 0, 1, 1, 3);\n  connect(m_imagePathEdit, &QLineEdit::textChanged, this,\n          [this]() { m_imagePathCheckTimer->start(); });\n\n  m_browseBtn = new QPushButton(tr(\"&Browse\"), mainWidget);\n  m_browseBtn->setEnabled(m_browserEnabled);\n  gridLayout->addWidget(m_browseBtn, 0, 4, 1, 1);\n  connect(m_browseBtn, &QPushButton::clicked, this, &ImageInsertDialog::browseFile);\n\n  // Image Title.\n  m_imageTitleEdit = WidgetsFactory::createLineEdit(p_imageTitle, mainWidget);\n  auto titleValidator = new QRegularExpressionValidator(\n      QRegularExpression(vte::MarkdownUtils::c_imageTitleRegExp), m_imageTitleEdit);\n  m_imageTitleEdit->setValidator(titleValidator);\n  gridLayout->addWidget(new QLabel(tr(\"Title:\"), mainWidget), 1, 0, 1, 1);\n  gridLayout->addWidget(m_imageTitleEdit, 1, 1, 1, 3);\n  connect(m_imageTitleEdit, &QLineEdit::textChanged, this, &ImageInsertDialog::checkInput);\n\n  // Image Alt.\n  m_imageAltEdit = WidgetsFactory::createLineEdit(p_imageAlt, mainWidget);\n  auto altValidator = new QRegularExpressionValidator(\n      QRegularExpression(vte::MarkdownUtils::c_imageAltRegExp), m_imageAltEdit);\n  m_imageAltEdit->setValidator(altValidator);\n  gridLayout->addWidget(new QLabel(tr(\"Alt text:\"), mainWidget), 2, 0, 1, 1);\n  gridLayout->addWidget(m_imageAltEdit, 2, 1, 1, 3);\n\n  // Scale.\n  m_widthSpin = WidgetsFactory::createSpinBox(mainWidget);\n  m_widthSpin->setMinimum(1);\n  m_widthSpin->setSingleStep(10);\n  m_widthSpin->setSuffix(\" px\");\n  connect(m_widthSpin, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,\n          [this](int p_val) {\n            if (m_image.isNull()) {\n              return;\n            }\n\n            int height = m_image.height() * (1.0 * p_val / m_image.width());\n            m_imageLabel->resize(p_val, height);\n\n            s_lastScaleWidth = p_val;\n          });\n  // 0.1 to 2.0 -> 1 to 20.\n  m_scaleSlider = new QSlider(mainWidget);\n  m_scaleSlider->setOrientation(Qt::Horizontal);\n  m_scaleSlider->setMinimum(1);\n  m_scaleSlider->setMaximum(50);\n  m_scaleSlider->setValue(s_lastScaleSliderValue);\n  m_scaleSlider->setSingleStep(1);\n  m_scaleSlider->setPageStep(5);\n  connect(m_scaleSlider, &QSlider::valueChanged, this,\n          &ImageInsertDialog::handleScaleSliderValueChanged);\n  m_sliderLabel = new QLabel(\"1x\", mainWidget);\n  gridLayout->addWidget(new QLabel(tr(\"Scaling width:\"), mainWidget), 3, 0, 1, 1);\n  gridLayout->addWidget(m_widthSpin, 3, 1, 1, 1);\n  gridLayout->addWidget(m_scaleSlider, 3, 2, 1, 2);\n  gridLayout->addWidget(m_sliderLabel, 3, 4, 1, 1);\n\n  {\n    auto fixedWidthCheckBox = WidgetsFactory::createCheckBox(tr(\"Fixed scaling width\"), mainWidget);\n    fixedWidthCheckBox->setChecked(s_fixedScaleWidth);\n    connect(fixedWidthCheckBox, &QCheckBox::stateChanged, this,\n            [](int p_state) { s_fixedScaleWidth = p_state == Qt::Checked; });\n    gridLayout->addWidget(fixedWidthCheckBox, 4, 1, 1, 1);\n  }\n\n  // Preview area.\n  m_imageLabel = new QLabel(mainWidget);\n  m_imageLabel->setScaledContents(true);\n  m_previewArea = new QScrollArea(mainWidget);\n  m_previewArea->setBackgroundRole(QPalette::Dark);\n  m_previewArea->setWidget(m_imageLabel);\n  m_previewArea->setMinimumSize(256, 256);\n  gridLayout->addWidget(m_previewArea, 5, 0, 1, 5);\n\n  setImageControlsVisible(false);\n\n  gridLayout->setColumnStretch(0, 0);\n  gridLayout->setColumnStretch(1, 0);\n  gridLayout->setColumnStretch(2, 1);\n  gridLayout->setColumnStretch(3, 1);\n  gridLayout->setColumnStretch(4, 0);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(p_title);\n}\n\nvoid ImageInsertDialog::setImageControlsVisible(bool p_visible) {\n  m_widthSpin->setEnabled(p_visible);\n  m_scaleSlider->setEnabled(p_visible);\n  m_sliderLabel->setEnabled(p_visible);\n\n  m_previewArea->setVisible(p_visible);\n}\n\nvoid ImageInsertDialog::showEvent(QShowEvent *p_event) {\n  Dialog::showEvent(p_event);\n\n  m_imageTitleEdit->selectAll();\n  m_imageTitleEdit->setFocus();\n}\n\nvoid ImageInsertDialog::checkImagePathInput() {\n  const QString text = m_imagePathEdit->text();\n  QUrl url = QUrl::fromUserInput(text);\n  if (text.isEmpty() || !url.isValid()) {\n    setImage(QImage());\n    return;\n  }\n\n  if (url.isLocalFile()) {\n    const auto localFile = url.toLocalFile();\n    if (QFileInfo::exists(localFile)) {\n      setImage(FileUtils::imageFromFile(localFile));\n    } else {\n      setImage(QImage());\n    }\n\n    m_source = Source::LocalFile;\n  } else {\n    setImage(QImage());\n    m_source = Source::ImageData;\n\n    if (!m_downloader) {\n      m_downloader = new vte::NetworkAccess(this);\n      connect(m_downloader, &vte::NetworkAccess::requestFinished, this,\n              &ImageInsertDialog::handleImageDownloaded);\n    }\n\n    m_downloader->requestAsync(url);\n  }\n\n  m_imageTitleEdit->setText(QFileInfo(text).baseName());\n\n  checkInput();\n}\n\nvoid ImageInsertDialog::checkInput() { setButtonEnabled(QDialogButtonBox::Ok, !m_image.isNull()); }\n\nvoid ImageInsertDialog::browseFile() {\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  QString filePath = QFileDialog::getOpenFileName(\n      this, tr(\"Select Image To Insert\"), sessionConfig.getExternalMediaDefaultPath(),\n      tr(\"Images (*.png *.xpm *.jpg *.bmp *.gif *.svg *.webp);;All (*.*)\"));\n  if (filePath.isEmpty()) {\n    return;\n  }\n\n  sessionConfig.setExternalMediaDefaultPath(PathUtils::parentDirPath(filePath));\n\n  m_source = Source::LocalFile;\n\n  setImagePath(filePath);\n\n  m_imageTitleEdit->selectAll();\n  m_imageTitleEdit->setFocus();\n}\n\nQString ImageInsertDialog::getImageTitle() const { return m_imageTitleEdit->text(); }\n\nQString ImageInsertDialog::getImageAltText() const { return m_imageAltEdit->text(); }\n\nQString ImageInsertDialog::getImagePath() const {\n  if (m_tempFile.isNull()) {\n    return m_imagePathEdit->text();\n  } else {\n    return m_tempFile->fileName();\n  }\n}\n\nImageInsertDialog::Source ImageInsertDialog::getImageSource() const { return m_source; }\n\nvoid ImageInsertDialog::setImageSource(ImageInsertDialog::Source p_source) { m_source = p_source; }\n\nconst QImage &ImageInsertDialog::getImage() const { return m_image; }\n\nvoid ImageInsertDialog::setImage(const QImage &p_image) {\n  m_image = p_image;\n  if (m_image.isNull()) {\n    m_imageLabel->clear();\n    setImageControlsVisible(false);\n  } else {\n    m_imageLabel->setPixmap(QPixmap::fromImage(m_image));\n\n    m_imageLabel->adjustSize();\n\n    m_widthSpin->setMaximum(m_image.width() * 5);\n\n    if (s_fixedScaleWidth) {\n      m_widthSpin->setValue(s_lastScaleWidth);\n    } else {\n      // Set the scaling widgets.\n      if (m_scaleSlider->value() == s_lastScaleSliderValue) {\n        // Trigger it manually.\n        handleScaleSliderValueChanged(s_lastScaleSliderValue);\n      } else {\n        m_scaleSlider->setValue(s_lastScaleSliderValue);\n      }\n    }\n\n    setImageControlsVisible(true);\n  }\n\n  checkInput();\n}\n\nvoid ImageInsertDialog::setImagePath(const QString &p_path) {\n  m_tempFile.reset();\n  m_imagePathEdit->setText(p_path);\n}\n\nint ImageInsertDialog::getScaledWidth() const {\n  if (m_image.isNull()) {\n    return 0;\n  }\n\n  int val = m_widthSpin->value();\n  return val == m_image.width() ? 0 : val;\n}\n\nvoid ImageInsertDialog::handleImageDownloaded(const vte::NetworkReply &p_data,\n                                              const QString &p_url) {\n  setImage(QImage::fromData(p_data.m_data));\n\n  // Save it to a temp file to avoid potential data loss via QImage.\n  bool savedToFile = false;\n  if (!p_data.m_data.isEmpty()) {\n    auto format = QFileInfo(PathUtils::removeUrlParameters(p_url)).suffix();\n    m_tempFile.reset(FileUtils::createTemporaryFile(format));\n    if (m_tempFile->open()) {\n      savedToFile = -1 != m_tempFile->write(p_data.m_data);\n      m_tempFile->close();\n    }\n  }\n\n  m_source = savedToFile ? Source::LocalFile : Source::ImageData;\n  if (!savedToFile) {\n    m_tempFile.reset();\n  }\n}\n\nvoid ImageInsertDialog::handleScaleSliderValueChanged(int p_val) {\n  if (m_image.isNull()) {\n    return;\n  }\n\n  int width = m_image.width();\n  qreal factor = 1.0;\n  if (p_val != 10) {\n    factor = p_val / 10.0;\n    width = m_image.width() * factor;\n  }\n\n  m_widthSpin->setValue(width);\n  m_sliderLabel->setText(QString::number(factor) + \"x\");\n\n  s_lastScaleSliderValue = p_val;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/imageinsertdialog.h",
    "content": "#ifndef IMAGEINSERTDIALOG_H\n#define IMAGEINSERTDIALOG_H\n\n#include \"dialog.h\"\n\n#include <QImage>\n#include <QSharedPointer>\n\nclass QLineEdit;\nclass QPushButton;\nclass QSpinBox;\nclass QSlider;\nclass QLabel;\nclass QTimer;\nclass QTemporaryFile;\nclass QScrollArea;\n\nnamespace vte {\nclass NetworkAccess;\nstruct NetworkReply;\n} // namespace vte\n\nnamespace vnotex {\nclass ImageInsertDialog : public Dialog {\n  Q_OBJECT\npublic:\n  enum Source { LocalFile, ImageData };\n\n  ImageInsertDialog(const QString &p_title, const QString &p_imageTitle, const QString &p_imageAlt,\n                    const QString &p_imagePath, bool p_browserEnabled = true,\n                    QWidget *p_parent = nullptr);\n\n  QString getImageTitle() const;\n\n  QString getImageAltText() const;\n\n  QString getImagePath() const;\n  void setImagePath(const QString &p_path);\n\n  ImageInsertDialog::Source getImageSource() const;\n  void setImageSource(ImageInsertDialog::Source p_source);\n\n  const QImage &getImage() const;\n  void setImage(const QImage &p_image);\n\n  // Return 0 if no scaling.\n  int getScaledWidth() const;\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void checkImagePathInput();\n\n  void checkInput();\n\n  void browseFile();\n\n  void handleImageDownloaded(const vte::NetworkReply &p_data, const QString &p_url);\n\n  void handleScaleSliderValueChanged(int p_val);\n\nprivate:\n  void setupUI(const QString &p_title, const QString &p_imageTitle, const QString &p_imageAlt,\n               const QString &p_imagePath);\n\n  void setImageControlsVisible(bool p_visible);\n\n  bool m_browserEnabled = true;\n\n  Source m_source = Source::LocalFile;\n\n  QLineEdit *m_imagePathEdit = nullptr;\n\n  QPushButton *m_browseBtn = nullptr;\n\n  QLineEdit *m_imageTitleEdit = nullptr;\n\n  QLineEdit *m_imageAltEdit = nullptr;\n\n  QSpinBox *m_widthSpin = nullptr;\n\n  QSlider *m_scaleSlider = nullptr;\n\n  QLabel *m_sliderLabel = nullptr;\n\n  QLabel *m_imageLabel = nullptr;\n\n  QScrollArea *m_previewArea = nullptr;\n\n  QImage m_image;\n\n  // Managed by QObject.\n  vte::NetworkAccess *m_downloader = nullptr;\n\n  // Managed by QObject.\n  QTimer *m_imagePathCheckTimer = nullptr;\n\n  // Used to hold downloaded image, to avoid data loss via QImage.\n  QSharedPointer<QTemporaryFile> m_tempFile;\n\n  static int s_lastScaleSliderValue;\n\n  static int s_lastScaleWidth;\n\n  static bool s_fixedScaleWidth;\n};\n} // namespace vnotex\n\n#endif // IMAGEINSERTDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/importfolderdialog.cpp",
    "content": "#include \"importfolderdialog.h\"\n\n#include <QFileInfo>\n#include <QLabel>\n#include <QLineEdit>\n#include <QVBoxLayout>\n\n#include \"exception.h\"\n#include \"folderfilesfilterwidget.h\"\n#include \"importfolderutils.h\"\n#include \"vnotex.h\"\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nImportFolderDialog::ImportFolderDialog(Node *p_node, QWidget *p_parent)\n    : ScrollDialog(p_parent), m_parentNode(p_node) {\n  setupUI();\n\n  m_filterWidget->getFolderPathEdit()->setFocus();\n}\n\nvoid ImportFolderDialog::setupUI() {\n  auto widget = new QWidget(this);\n  auto mainLayout = new QVBoxLayout(widget);\n  setCentralWidget(widget);\n\n  auto label =\n      new QLabel(tr(\"Import folder into (%1).\").arg(m_parentNode->fetchAbsolutePath()), widget);\n  label->setWordWrap(true);\n  mainLayout->addWidget(label);\n\n  setupFolderFilesFilterWidget(widget);\n  mainLayout->addWidget(m_filterWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n  setButtonEnabled(QDialogButtonBox::Ok, false);\n\n  setWindowTitle(tr(\"Import Folder\"));\n}\n\nvoid ImportFolderDialog::setupFolderFilesFilterWidget(QWidget *p_parent) {\n  m_filterWidget = new FolderFilesFilterWidget(p_parent);\n  connect(m_filterWidget, &FolderFilesFilterWidget::filesChanged, this,\n          [this]() { validateInputs(); });\n}\n\nconst QSharedPointer<Node> &ImportFolderDialog::getNewNode() const { return m_newNode; }\n\nvoid ImportFolderDialog::acceptedButtonClicked() {\n  if (isCompleted() || importFolder()) {\n    accept();\n  }\n}\n\nvoid ImportFolderDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  auto folder = m_filterWidget->getFolderPath();\n  if (!QFileInfo::exists(folder) || !PathUtils::isLegalPath(folder)) {\n    msg = tr(\"Please specify a valid folder to import.\");\n    valid = false;\n  }\n\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  setButtonEnabled(QDialogButtonBox::Ok, valid);\n}\n\nbool ImportFolderDialog::importFolder() {\n  const auto folder = m_filterWidget->getFolderPath();\n  auto nb = m_parentNode->getNotebook();\n  if (PathUtils::pathContains(folder, m_parentNode->fetchAbsolutePath())) {\n    // Avoid recursive import.\n    auto msg = tr(\"Failed to add folder (%1) as node under (%2).\")\n                   .arg(folder, m_parentNode->fetchAbsolutePath());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  m_newNode = nullptr;\n  try {\n    m_newNode = nb->copyAsNode(m_parentNode, Node::Flag::Container, folder);\n  } catch (Exception &p_e) {\n    auto msg = tr(\"Failed to add folder (%1) as node (%2).\").arg(folder, p_e.what());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  QString errMsg;\n  ImportFolderUtils::importFolderContents(nb, m_newNode.data(), m_filterWidget->getSuffixes(),\n                                          errMsg);\n\n  emit nb->nodeUpdated(m_parentNode);\n\n  if (!errMsg.isEmpty()) {\n    qWarning() << errMsg;\n    setInformationText(errMsg, ScrollDialog::InformationLevel::Error);\n    completeButStay();\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/importfolderdialog.h",
    "content": "#ifndef IMPORTFOLDERDIALOG_H\n#define IMPORTFOLDERDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass Node;\nclass FolderFilesFilterWidget;\n\nclass ImportFolderDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  // Import a folder under @p_node.\n  ImportFolderDialog(Node *p_node, QWidget *p_parent = nullptr);\n\n  const QSharedPointer<Node> &getNewNode() const;\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate slots:\n  void validateInputs();\n\nprivate:\n  void setupUI();\n\n  void setupFolderFilesFilterWidget(QWidget *p_parent = nullptr);\n\n  bool importFolder();\n\n  Node *m_parentNode = nullptr;\n\n  QSharedPointer<Node> m_newNode;\n\n  FolderFilesFilterWidget *m_filterWidget = nullptr;\n};\n} // namespace vnotex\n\n#endif // IMPORTFOLDERDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/importfolderutils.cpp",
    "content": "#include \"importfolderutils.h\"\n\n#include <QCoreApplication>\n#include <core/exception.h>\n#include <notebook/nodeparameters.h>\n#include <notebook/notebook.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nvoid ImportFolderUtils::importFolderContents(Notebook *p_notebook, Node *p_node,\n                                             const QStringList &p_suffixes, QString &p_errMsg) {\n  auto rootDir = p_node->toDir();\n  auto children =\n      rootDir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);\n  for (const auto &child : children) {\n    if (child.isDir()) {\n      if (p_notebook->isBuiltInFolder(p_node, child.fileName())) {\n        continue;\n      }\n\n      QSharedPointer<Node> node;\n      try {\n        node = p_notebook->addAsNode(p_node, Node::Flag::Container, child.fileName(),\n                                     NodeParameters());\n      } catch (Exception &p_e) {\n        Utils::appendMsg(p_errMsg,\n                         ImportFolderUtilsTranslate::tr(\"Failed to add folder (%1) as node (%2).\")\n                             .arg(child.fileName(), p_e.what()));\n        continue;\n      }\n\n      importFolderContents(p_notebook, node.data(), p_suffixes, p_errMsg);\n    } else if (!p_notebook->isBuiltInFile(p_node, child.fileName())) {\n      if (p_suffixes.contains(child.suffix())) {\n        try {\n          p_notebook->addAsNode(p_node, Node::Flag::Content, child.fileName(), NodeParameters());\n        } catch (Exception &p_e) {\n          Utils::appendMsg(p_errMsg,\n                           ImportFolderUtilsTranslate::tr(\"Failed to add file (%1) as node (%2).\")\n                               .arg(child.filePath(), p_e.what()));\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/widgets/dialogs/importfolderutils.h",
    "content": "#ifndef IMPORTFOLDERUTILS_H\n#define IMPORTFOLDERUTILS_H\n\n#include <QObject>\n\n#include <QStringList>\n\nnamespace vnotex {\nclass Notebook;\nclass Node;\n\n// A dummy class used to do translations.\nclass ImportFolderUtilsTranslate : public QObject {\n  Q_OBJECT\n};\n\nclass ImportFolderUtils {\npublic:\n  ImportFolderUtils() = delete;\n\n  // Process folder @p_node.\n  // @p_node has already been added.\n  static void importFolderContents(Notebook *p_notebook, Node *p_node,\n                                   const QStringList &p_suffixes, QString &p_errMsg);\n};\n} // namespace vnotex\n\n#endif // IMPORTFOLDERUTILS_H\n"
  },
  {
    "path": "src/widgets/dialogs/importnotebookdialog.cpp",
    "content": "#include \"importnotebookdialog.h\"\n\n#include <QtWidgets>\n\n#include \"../widgetsfactory.h\"\n#include \"configmgr.h\"\n#include \"exception.h\"\n#include \"notebook/inotebookfactory.h\"\n#include \"notebook/notebookparameters.h\"\n#include \"notebookbackend/inotebookbackendfactory.h\"\n#include \"notebookconfigmgr/inotebookconfigmgrfactory.h\"\n#include \"notebookinfowidget.h\"\n#include \"notebookmgr.h\"\n#include \"versioncontroller/iversioncontrollerfactory.h\"\n#include \"vnotex.h\"\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nImportNotebookDialog::ImportNotebookDialog(QWidget *p_parent) : ScrollDialog(p_parent) {\n  setupUI();\n\n  m_infoWidget->getRootFolderPathLineEdit()->setFocus();\n}\n\nvoid ImportNotebookDialog::setupUI() {\n  setupNotebookInfoWidget(this);\n  setCentralWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n  setButtonEnabled(QDialogButtonBox::Ok, false);\n\n  setWindowTitle(tr(\"Open Notebook\"));\n}\n\nvoid ImportNotebookDialog::setupNotebookInfoWidget(QWidget *p_parent) {\n  m_infoWidget = new NotebookInfoWidget(NotebookInfoWidget::Import, p_parent);\n  connect(m_infoWidget, &NotebookInfoWidget::basicInfoEdited, this,\n          &ImportNotebookDialog::validateInputs);\n  connect(m_infoWidget, &NotebookInfoWidget::notebookBackendEdited, this,\n          &ImportNotebookDialog::validateInputs);\n}\n\nvoid ImportNotebookDialog::acceptedButtonClicked() {\n  if (importNotebook()) {\n    accept();\n  }\n}\n\nvoid ImportNotebookDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateRootFolderInput(msg);\n\n  if (valid) {\n    valid = createNotebookToImport(msg);\n  } else {\n    m_notebookToImport.clear();\n  }\n\n  m_infoWidget->setNotebook(m_notebookToImport.data());\n\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  setButtonEnabled(QDialogButtonBox::Ok, valid);\n}\n\nbool ImportNotebookDialog::validateRootFolderInput(QString &p_msg) {\n  auto rootFolderPath = m_infoWidget->getRootFolderPath();\n  if (rootFolderPath.isEmpty() || !QFileInfo::exists(rootFolderPath)) {\n    Utils::appendMsg(p_msg, tr(\"The root folder specified does not exist.\"));\n    return false;\n  }\n\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n\n  // Check if there already exists one notebook with the same root folder.\n  {\n    auto notebook = notebookMgr.findNotebookByRootFolderPath(rootFolderPath);\n    if (notebook) {\n      Utils::appendMsg(p_msg, tr(\"There already exists a notebook (%1) with the same root folder.\")\n                                  .arg(notebook->getName()));\n      return false;\n    }\n  }\n\n  // Check if it is a valid bundle notebook root folder.\n  {\n    auto factory = notebookMgr.getBundleNotebookFactory();\n    auto backendName = m_infoWidget->getBackend();\n    auto backend = notebookMgr.createNotebookBackend(backendName, rootFolderPath);\n    if (!factory->checkRootFolder(backend)) {\n      Utils::appendMsg(\n          p_msg,\n          tr(\"Not a valid (%1) root folder (%2).\").arg(factory->getDisplayName(), rootFolderPath));\n      return false;\n    }\n  }\n\n  return true;\n}\n\nbool ImportNotebookDialog::createNotebookToImport(QString &p_msg) {\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  auto factory = notebookMgr.getBundleNotebookFactory();\n\n  auto rootFolderPath = m_infoWidget->getRootFolderPath();\n\n  auto backendName = m_infoWidget->getBackend();\n  auto backend = notebookMgr.createNotebookBackend(backendName, rootFolderPath);\n\n  try {\n    m_notebookToImport = factory->createNotebook(notebookMgr, rootFolderPath, backend);\n  } catch (Exception &p_e) {\n    Utils::appendMsg(p_msg, tr(\"Failed to create notebook from root folder (%1) (%2).\")\n                                .arg(rootFolderPath, p_e.what()));\n    return false;\n  }\n\n  Q_ASSERT(m_notebookToImport);\n  return true;\n}\n\nbool ImportNotebookDialog::importNotebook() {\n  if (!m_notebookToImport) {\n    QString msg = tr(\"Failed to open notebook.\");\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  try {\n    auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n    notebookMgr.importNotebook(m_notebookToImport);\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to open notebook (%1).\").arg(p_e.what());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/importnotebookdialog.h",
    "content": "#ifndef IMPORTNOTEBOOKDIALOG_H\n#define IMPORTNOTEBOOKDIALOG_H\n\n#include \"scrolldialog.h\"\n\nclass QGroupBox;\nclass QComboBox;\n\nnamespace vnotex {\nclass NotebookInfoWidget;\nclass Notebook;\n\nclass ImportNotebookDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  explicit ImportNotebookDialog(QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate slots:\n  void validateInputs();\n\nprivate:\n  void setupUI();\n\n  void setupNotebookInfoWidget(QWidget *p_parent = nullptr);\n\n  bool validateRootFolderInput(QString &p_msg);\n\n  bool createNotebookToImport(QString &p_msg);\n\n  bool importNotebook();\n\n  NotebookInfoWidget *m_infoWidget = nullptr;\n\n  QSharedPointer<Notebook> m_notebookToImport;\n};\n} // namespace vnotex\n\n#endif // IMPORTNOTEBOOKDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/levellabelwithupbutton.cpp",
    "content": "#include \"levellabelwithupbutton.h\"\n\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QPushButton>\n\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n\nusing namespace vnotex;\n\nLevelLabelWithUpButton::LevelLabelWithUpButton(QWidget *p_parent) : QWidget(p_parent) { setupUI(); }\n\nvoid LevelLabelWithUpButton::setupUI() {\n  auto mainLayout = new QHBoxLayout(this);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  m_label = new QLabel(this);\n  mainLayout->addWidget(m_label, 1);\n\n  const auto iconFile = VNoteX::getInst().getThemeMgr().getIconFile(\"up_level.svg\");\n  m_upButton = new QPushButton(IconUtils::fetchIconWithDisabledState(iconFile), tr(\"Up\"), this);\n  m_upButton->setToolTip(tr(\"Go one level up\"));\n  connect(m_upButton, &QPushButton::clicked, this, [this]() {\n    if (m_levelIdx < m_levels.size() - 1) {\n      ++m_levelIdx;\n      updateLabelAndButton();\n      emit levelChanged();\n    }\n  });\n  mainLayout->addWidget(m_upButton, 0);\n\n  updateLabelAndButton();\n}\n\nvoid LevelLabelWithUpButton::updateLabelAndButton() {\n  if (m_levels.isEmpty()) {\n    m_label->clear();\n  } else {\n    Q_ASSERT(m_levelIdx < m_levels.size());\n    m_label->setText(m_levels[m_levelIdx].m_name);\n  }\n\n  m_upButton->setVisible(!m_readOnly && (m_levelIdx < m_levels.size() - 1));\n}\n\nconst LevelLabelWithUpButton::Level &LevelLabelWithUpButton::getLevel() const {\n  Q_ASSERT(m_levelIdx < m_levels.size());\n  return m_levels[m_levelIdx];\n}\n\nvoid LevelLabelWithUpButton::setLevels(const QVector<Level> &p_levels) {\n  m_levels = p_levels;\n  Q_ASSERT(!m_levels.isEmpty());\n  m_levelIdx = 0;\n\n  updateLabelAndButton();\n  emit levelChanged();\n}\n\nvoid LevelLabelWithUpButton::setReadOnly(bool p_readonly) {\n  if (m_readOnly == p_readonly) {\n    return;\n  }\n\n  m_readOnly = p_readonly;\n  updateLabelAndButton();\n}\n"
  },
  {
    "path": "src/widgets/dialogs/levellabelwithupbutton.h",
    "content": "#ifndef LEVELLABELWITHUPBUTTON_H\n#define LEVELLABELWITHUPBUTTON_H\n\n#include <QWidget>\n\nclass QLabel;\nclass QPushButton;\n\nnamespace vnotex {\n// Used to navigate through a series of levels.\nclass LevelLabelWithUpButton : public QWidget {\n  Q_OBJECT\npublic:\n  struct Level {\n    QString m_name;\n\n    const void *m_data = nullptr;\n  };\n\n  LevelLabelWithUpButton(QWidget *p_parent = nullptr);\n\n  const Level &getLevel() const;\n\n  // From bottom to up.\n  void setLevels(const QVector<Level> &p_levels);\n\n  void setReadOnly(bool p_readonly);\n\nsignals:\n  void levelChanged();\n\nprivate:\n  void setupUI();\n\n  void updateLabelAndButton();\n\n  QLabel *m_label = nullptr;\n\n  QPushButton *m_upButton = nullptr;\n\n  QVector<Level> m_levels;\n\n  int m_levelIdx = -1;\n\n  bool m_readOnly = false;\n};\n} // namespace vnotex\n\n#endif // LEVELLABELWITHUPBUTTON_H\n"
  },
  {
    "path": "src/widgets/dialogs/linkinsertdialog.cpp",
    "content": "#include \"linkinsertdialog.h\"\n\n#include <QFormLayout>\n#include <QRegularExpression>\n#include <QUrl>\n\n#include <utils/widgetutils.h>\n#include <widgets/lineedit.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nLinkInsertDialog::LinkInsertDialog(const QString &p_title, const QString &p_linkText,\n                                   const QString &p_linkUrl, bool p_linkTextOptional,\n                                   QWidget *p_parent)\n    : ScrollDialog(p_parent), m_linkTextOptional(p_linkTextOptional) {\n  setupUI(p_title, p_linkText, p_linkUrl);\n\n  checkInput();\n}\n\nvoid LinkInsertDialog::setupUI(const QString &p_title, const QString &p_linkText,\n                               const QString &p_linkUrl) {\n  auto mainWidget = new QWidget(this);\n  setCentralWidget(mainWidget);\n\n  auto mainLayout = WidgetsFactory::createFormLayout(mainWidget);\n\n  m_linkTextEdit = WidgetsFactory::createLineEdit(p_linkText, mainWidget);\n  mainLayout->addRow(tr(\"&Text:\"), m_linkTextEdit);\n  connect(m_linkTextEdit, &QLineEdit::textChanged, this, [this]() { checkInput(false); });\n\n  m_linkUrlEdit = WidgetsFactory::createLineEdit(p_linkUrl, mainWidget);\n  mainLayout->addRow(tr(\"&Url:\"), m_linkUrlEdit);\n  connect(m_linkUrlEdit, &QLineEdit::textChanged, this, [this]() { checkInput(true); });\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(p_title);\n}\n\nvoid LinkInsertDialog::checkInput(bool p_autoCompleteText) {\n  bool ok = true;\n\n  const auto linkUrl = m_linkUrlEdit->text();\n  if (linkUrl.isEmpty()) {\n    ok = false;\n  } else {\n    const auto linkText = m_linkTextEdit->text();\n    if (linkText.isEmpty()) {\n      // Try to guess the text from url.\n      if (p_autoCompleteText) {\n        int idx = linkUrl.lastIndexOf(QRegularExpression(QStringLiteral(\"[/\\\\\\\\]\")));\n        if (idx != -1 && idx != linkUrl.size() - 1) {\n          m_linkTextEdit->setText(linkUrl.mid(idx + 1));\n        } else {\n          ok = m_linkTextOptional;\n        }\n      } else {\n        ok = m_linkTextOptional;\n      }\n    }\n  }\n\n  setButtonEnabled(QDialogButtonBox::Ok, ok);\n}\n\nQString LinkInsertDialog::getLinkText() const { return m_linkTextEdit->text(); }\n\nQString LinkInsertDialog::getLinkUrl() const {\n  // For local file, translate to URL without spaces.\n  auto text = m_linkUrlEdit->text();\n  if (text.isEmpty()) {\n    return text;\n  }\n\n  auto url = QUrl::fromUserInput(text);\n  if (url.isLocalFile()) {\n    return url.toString(QUrl::EncodeSpaces);\n  }\n  return text;\n}\n\nvoid LinkInsertDialog::showEvent(QShowEvent *p_event) {\n  ScrollDialog::showEvent(p_event);\n\n  if (!m_linkUrlEdit->text().isEmpty() || m_linkTextEdit->text().isEmpty()) {\n    m_linkTextEdit->setFocus();\n    m_linkTextEdit->selectAll();\n  } else {\n    m_linkUrlEdit->setFocus();\n    m_linkUrlEdit->selectAll();\n  }\n}\n"
  },
  {
    "path": "src/widgets/dialogs/linkinsertdialog.h",
    "content": "#ifndef LINKINSERTDIALOG_H\n#define LINKINSERTDIALOG_H\n\n#include \"scrolldialog.h\"\n\nclass QLineEdit;\n\nnamespace vnotex {\nclass LinkInsertDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  LinkInsertDialog(const QString &p_title, const QString &p_linkText, const QString &p_linkUrl,\n                   bool p_linkTextOptional, QWidget *p_parent = nullptr);\n\n  QString getLinkText() const;\n\n  QString getLinkUrl() const;\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void checkInput(bool p_autoCompleteText = true);\n\nprivate:\n  void setupUI(const QString &p_title, const QString &p_linkText, const QString &p_linkUrl);\n\n  bool m_linkTextOptional = false;\n\n  QLineEdit *m_linkTextEdit = nullptr;\n\n  QLineEdit *m_linkUrlEdit = nullptr;\n};\n} // namespace vnotex\n\n#endif // LINKINSERTDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/managenotebooksdialog.cpp",
    "content": "#include \"managenotebooksdialog.h\"\n\n#include <QHBoxLayout>\n#include <QListWidgetItem>\n#include <QMenu>\n#include <QPushButton>\n#include <QScrollArea>\n#include <QTimer>\n#include <QUrl>\n#include <QVBoxLayout>\n\n#include \"../listwidget.h\"\n#include \"../messageboxhelper.h\"\n#include \"../propertydefs.h\"\n#include \"../widgetsfactory.h\"\n#include \"exception.h\"\n#include \"notebook/notebook.h\"\n#include \"notebookinfowidget.h\"\n#include \"notebookmgr.h\"\n#include \"vnotex.h\"\n#include <core/configmgr.h>\n#include <utils/iconutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nManageNotebooksDialog::ManageNotebooksDialog(const Notebook *p_notebook, QWidget *p_parent)\n    : Dialog(p_parent) {\n  setupUI();\n\n  loadNotebooks(p_notebook);\n}\n\nvoid ManageNotebooksDialog::setupUI() {\n  auto widget = new QWidget(this);\n  setCentralWidget(widget);\n\n  auto mainLayout = new QHBoxLayout(widget);\n\n  setupNotebookList(widget);\n  mainLayout->addWidget(m_notebookList);\n  mainLayout->setStretchFactor(m_notebookList, 1);\n\n  {\n    m_infoScrollArea = new QScrollArea(widget);\n    m_infoScrollArea->setWidgetResizable(true);\n    mainLayout->addWidget(m_infoScrollArea);\n    mainLayout->setStretchFactor(m_infoScrollArea, 3);\n\n    auto infoWidget = new QWidget(widget);\n    m_infoScrollArea->setWidget(infoWidget);\n\n    auto infoLayout = new QVBoxLayout(infoWidget);\n\n    setupNotebookInfoWidget(infoWidget);\n    infoLayout->addWidget(m_notebookInfoWidget);\n\n    auto btnLayout = new QHBoxLayout();\n    infoLayout->addLayout(btnLayout);\n\n    m_closeNotebookBtn = new QPushButton(tr(\"Close Noteboook\"), infoWidget);\n    btnLayout->addStretch();\n    btnLayout->addWidget(m_closeNotebookBtn);\n    connect(m_closeNotebookBtn, &QPushButton::clicked, this, [this]() {\n      if (checkUnsavedChanges()) {\n        return;\n      }\n      closeNotebook(m_notebookInfoWidget->getNotebook());\n    });\n\n    m_deleteNotebookBtn = new QPushButton(tr(\"Delete\"), infoWidget);\n    WidgetUtils::setPropertyDynamically(m_deleteNotebookBtn, PropertyDefs::c_dangerButton, true);\n    btnLayout->addWidget(m_deleteNotebookBtn);\n    connect(m_deleteNotebookBtn, &QPushButton::clicked, this, [this]() {\n      if (checkUnsavedChanges()) {\n        return;\n      }\n      removeNotebook(m_notebookInfoWidget->getNotebook());\n    });\n  }\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Reset |\n                     QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"Manage Notebooks\"));\n}\n\nNotebook *ManageNotebooksDialog::getNotebookFromItem(const QListWidgetItem *p_item) const {\n  Notebook *notebook = nullptr;\n  if (p_item) {\n    auto id = static_cast<ID>(p_item->data(Qt::UserRole).toULongLong());\n    notebook = VNoteX::getInst().getNotebookMgr().findNotebookById(id).data();\n  }\n\n  return notebook;\n}\n\nvoid ManageNotebooksDialog::setupNotebookList(QWidget *p_parent) {\n  m_notebookList = new ListWidget(p_parent);\n  connect(m_notebookList, &QListWidget::currentItemChanged, this,\n          [this](QListWidgetItem *p_item, QListWidgetItem *p_previous) {\n            auto notebook = getNotebookFromItem(p_item);\n            if (m_changesUnsaved) {\n              // Have unsaved changes.\n              if (m_notebook != notebook) {\n                checkUnsavedChanges();\n\n                QTimer::singleShot(\n                    50, this, [this, p_previous]() { m_notebookList->setCurrentItem(p_previous); });\n              }\n\n              return;\n            }\n\n            m_notebook = notebook;\n            selectNotebook(m_notebook);\n          });\n}\n\nvoid ManageNotebooksDialog::setupNotebookInfoWidget(QWidget *p_parent) {\n  m_notebookInfoWidget = new NotebookInfoWidget(NotebookInfoWidget::Edit, p_parent);\n  connect(m_notebookInfoWidget, &NotebookInfoWidget::basicInfoEdited, this, [this]() {\n    bool unsaved = false;\n    if (m_notebook) {\n      if (m_notebook->getName() != m_notebookInfoWidget->getName() ||\n          m_notebook->getDescription() != m_notebookInfoWidget->getDescription()) {\n        unsaved = true;\n      }\n    }\n\n    setChangesUnsaved(unsaved);\n  });\n}\n\nvoid ManageNotebooksDialog::loadNotebooks(const Notebook *p_notebook) {\n  setChangesUnsaved(false);\n\n  m_notebookList->clear();\n\n  bool hasCurrentItem = false;\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  const auto &notebooks = notebookMgr.getNotebooks();\n  for (auto &nb : notebooks) {\n    auto item = new QListWidgetItem(nb->getName());\n    item->setData(Qt::UserRole, nb->getId());\n    item->setToolTip(nb->getName());\n    m_notebookList->addItem(item);\n\n    if (nb.data() == p_notebook) {\n      hasCurrentItem = true;\n      m_notebookList->setCurrentItem(item, QItemSelectionModel::ClearAndSelect);\n    }\n  }\n\n  if (!hasCurrentItem) {\n    if (notebooks.isEmpty()) {\n      selectNotebook(nullptr);\n    } else {\n      m_notebookList->setCurrentRow(0);\n    }\n  }\n}\n\nvoid ManageNotebooksDialog::selectNotebook(Notebook *p_notebook) {\n  m_notebookInfoWidget->setNotebook(p_notebook);\n  setChangesUnsaved(false);\n\n  // Update buttons.\n  m_closeNotebookBtn->setEnabled(p_notebook);\n  m_deleteNotebookBtn->setEnabled(p_notebook);\n\n  WidgetUtils::resizeToHideScrollBarLater(m_infoScrollArea, false, true);\n}\n\nvoid ManageNotebooksDialog::acceptedButtonClicked() {\n  if (saveChangesToNotebook()) {\n    accept();\n  }\n}\n\nvoid ManageNotebooksDialog::resetButtonClicked() {\n  m_notebookInfoWidget->clear();\n  selectNotebook(m_notebook);\n}\n\nvoid ManageNotebooksDialog::appliedButtonClicked() {\n  Q_ASSERT(m_changesUnsaved);\n  if (saveChangesToNotebook()) {\n    loadNotebooks(m_notebook);\n  }\n}\n\nvoid ManageNotebooksDialog::setChangesUnsaved(bool p_unsaved) {\n  m_changesUnsaved = p_unsaved;\n  setButtonEnabled(QDialogButtonBox::Apply, m_changesUnsaved);\n  setButtonEnabled(QDialogButtonBox::Reset, m_changesUnsaved);\n}\n\nbool ManageNotebooksDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n\n  setInformationText(msg, valid ? Dialog::InformationLevel::Info : Dialog::InformationLevel::Error);\n  return valid;\n}\n\nbool ManageNotebooksDialog::validateNameInput(QString &p_msg) {\n  if (m_notebookInfoWidget->getName().isEmpty()) {\n    Utils::appendMsg(p_msg, tr(\"Please specify a name for the notebook.\"));\n    return false;\n  }\n\n  return true;\n}\n\nbool ManageNotebooksDialog::saveChangesToNotebook() {\n  if (!m_changesUnsaved || !m_notebook) {\n    return true;\n  }\n\n  if (!validateInputs()) {\n    return false;\n  }\n\n  m_notebook->updateName(m_notebookInfoWidget->getName());\n  m_notebook->updateDescription(m_notebookInfoWidget->getDescription());\n  return true;\n}\n\nbool ManageNotebooksDialog::closeNotebook(const Notebook *p_notebook) {\n  if (!p_notebook) {\n    return false;\n  }\n\n  int ret = MessageBoxHelper::questionOkCancel(\n      MessageBoxHelper::Question, tr(\"Close notebook (%1)?\").arg(p_notebook->getName()),\n      tr(\"The notebook could be opened by VNote again via \\\"Open Other Notebooks\\\" operation.\"),\n      tr(\"Notebook location: %1\").arg(p_notebook->getRootFolderAbsolutePath()), this);\n  if (ret != QMessageBox::Ok) {\n    return false;\n  }\n\n  try {\n    VNoteX::getInst().getNotebookMgr().closeNotebook(p_notebook->getId());\n  } catch (Exception &p_e) {\n    MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                             tr(\"Failed to close notebook (%1)\").arg(p_e.what()), this);\n  }\n\n  loadNotebooks(nullptr);\n  return true;\n}\n\nvoid ManageNotebooksDialog::removeNotebook(const Notebook *p_notebook) {\n  if (!p_notebook) {\n    return;\n  }\n\n  int ret = MessageBoxHelper::questionOkCancel(\n      MessageBoxHelper::Warning,\n      tr(\"Please close the notebook in VNote first and delete the notebook root folder files \"\n         \"manually.\"),\n      tr(\"Press \\\"Ok\\\" to close the notebook and open the location of the notebook root folder.\"),\n      tr(\"Notebook location: %1\").arg(p_notebook->getRootFolderAbsolutePath()), this);\n  if (ret != QMessageBox::Ok) {\n    return;\n  }\n\n  const auto rootFolder = p_notebook->getRootFolderAbsolutePath();\n\n  if (closeNotebook(p_notebook)) {\n    WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(rootFolder));\n  }\n}\n\nbool ManageNotebooksDialog::checkUnsavedChanges() {\n  if (m_changesUnsaved) {\n    MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                             tr(\"There are unsaved changes to current notebook.\"), this);\n    return true;\n  }\n\n  return false;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/managenotebooksdialog.h",
    "content": "#ifndef MANAGENOTEBOOKSDIALOG_H\n#define MANAGENOTEBOOKSDIALOG_H\n\n#include \"dialog.h\"\n\nclass QListWidget;\nclass QListWidgetItem;\nclass QMenu;\nclass QPushButton;\nclass QScrollArea;\n\nnamespace vnotex {\nclass Notebook;\nclass NotebookInfoWidget;\n\nclass ManageNotebooksDialog : public Dialog {\n  Q_OBJECT\npublic:\n  ManageNotebooksDialog(const Notebook *p_notebook, QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\n  void resetButtonClicked() Q_DECL_OVERRIDE;\n\n  void appliedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate slots:\n  void selectNotebook(Notebook *p_notebook);\n\nprivate:\n  void setupUI();\n\n  void setupNotebookList(QWidget *p_parent = nullptr);\n\n  void setupNotebookInfoWidget(QWidget *p_parent = nullptr);\n\n  void loadNotebooks(const Notebook *p_notebook);\n\n  void setChangesUnsaved(bool p_unsaved);\n\n  bool saveChangesToNotebook();\n\n  Notebook *getNotebookFromItem(const QListWidgetItem *p_item) const;\n\n  bool closeNotebook(const Notebook *p_notebook);\n\n  void removeNotebook(const Notebook *p_notebook);\n\n  bool checkUnsavedChanges();\n\n  bool validateInputs();\n\n  bool validateNameInput(QString &p_msg);\n\n  QListWidget *m_notebookList = nullptr;\n\n  NotebookInfoWidget *m_notebookInfoWidget = nullptr;\n\n  bool m_changesUnsaved = false;\n\n  Notebook *m_notebook = nullptr;\n\n  QScrollArea *m_infoScrollArea = nullptr;\n\n  QPushButton *m_closeNotebookBtn = nullptr;\n\n  QPushButton *m_deleteNotebookBtn = nullptr;\n};\n} // namespace vnotex\n\n#endif // MANAGENOTEBOOKSDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/newfolderdialog.cpp",
    "content": "#include \"newfolderdialog.h\"\n\n#include <QLineEdit>\n\n#include <core/exception.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/pathutils.h>\n\n#include \"../widgetsfactory.h\"\n#include \"nodeinfowidget.h\"\n\nusing namespace vnotex;\n\nNewFolderDialog::NewFolderDialog(Node *p_node, QWidget *p_parent) : ScrollDialog(p_parent) {\n  Q_ASSERT(p_node && p_node->isLoaded());\n  setupUI(p_node);\n\n  m_infoWidget->getNameLineEdit()->setFocus();\n}\n\nvoid NewFolderDialog::setupUI(const Node *p_node) {\n  setupNodeInfoWidget(p_node, this);\n  setCentralWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"New Folder\"));\n}\n\nvoid NewFolderDialog::setupNodeInfoWidget(const Node *p_node, QWidget *p_parent) {\n  m_infoWidget = new NodeInfoWidget(p_node, Node::Flag::Container, p_parent);\n}\n\nbool NewFolderDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  return valid;\n}\n\nbool NewFolderDialog::validateNameInput(QString &p_msg) {\n  p_msg.clear();\n\n  auto name = m_infoWidget->getName();\n  if (name.isEmpty() || !PathUtils::isLegalFileName(name)) {\n    p_msg = tr(\"Please specify a name for the folder.\");\n    return false;\n  }\n\n  if (!m_infoWidget->getParentNode()->isLegalNameForNewChild(name)) {\n    p_msg = tr(\"Name conflicts with existing or built-in folder.\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid NewFolderDialog::acceptedButtonClicked() {\n  if (validateInputs() && newFolder()) {\n    accept();\n  }\n}\n\nbool NewFolderDialog::newFolder() {\n  m_newNode.clear();\n\n  Notebook *notebook = const_cast<Notebook *>(m_infoWidget->getNotebook());\n  Node *parentNode = const_cast<Node *>(m_infoWidget->getParentNode());\n  try {\n    m_newNode = notebook->newNode(parentNode, Node::Flag::Container, m_infoWidget->getName());\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to create folder under (%1) in (%2) (%3).\")\n                      .arg(parentNode->getName(), notebook->getName(), p_e.what());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  emit notebook->nodeUpdated(parentNode);\n  return true;\n}\n\nconst QSharedPointer<Node> &NewFolderDialog::getNewNode() const { return m_newNode; }\n"
  },
  {
    "path": "src/widgets/dialogs/newfolderdialog.h",
    "content": "#ifndef NEWFOLDERDIALOG_H\n#define NEWFOLDERDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass Node;\nclass NodeInfoWidget;\n\nclass NewFolderDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  // New a folder under @p_node.\n  NewFolderDialog(Node *p_node, QWidget *p_parent = nullptr);\n\n  const QSharedPointer<Node> &getNewNode() const;\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI(const Node *p_node);\n\n  void setupNodeInfoWidget(const Node *p_node, QWidget *p_parent);\n\n  bool validateNameInput(QString &p_msg);\n\n  bool newFolder();\n\n  bool validateInputs();\n\n  NodeInfoWidget *m_infoWidget = nullptr;\n\n  QSharedPointer<Node> m_newNode;\n};\n} // namespace vnotex\n\n#endif // NEWFOLDERDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/newnotebookdialog.cpp",
    "content": "#include \"newnotebookdialog.h\"\n\n#include <QLineEdit>\n\n#include \"../widgetsfactory.h\"\n#include \"configmgr.h\"\n#include \"exception.h\"\n#include \"notebook/inotebookfactory.h\"\n#include \"notebook/notebookparameters.h\"\n#include \"notebookinfowidget.h\"\n#include \"notebookmgr.h\"\n#include \"vnotex.h\"\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nNewNotebookDialog::NewNotebookDialog(QWidget *p_parent) : ScrollDialog(p_parent) {\n  setupUI();\n\n  m_infoWidget->getNameLineEdit()->setFocus();\n}\n\nvoid NewNotebookDialog::setupUI() {\n  setupNotebookInfoWidget(this);\n  setCentralWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"New Notebook\"));\n}\n\nvoid NewNotebookDialog::setupNotebookInfoWidget(QWidget *p_parent) {\n  m_infoWidget = new NotebookInfoWidget(NotebookInfoWidget::Create, p_parent);\n  connect(m_infoWidget, &NotebookInfoWidget::rootFolderEdited, this,\n          &NewNotebookDialog::handleRootFolderPathChanged);\n\n  {\n    auto whatsThis = tr(\"<br/>Both absolute and relative paths are supported. ~ and environment \"\n                        \"variable are not supported now.\");\n    auto rootFolderEdit = m_infoWidget->getRootFolderPathLineEdit();\n    rootFolderEdit->setWhatsThis(rootFolderEdit->whatsThis() + whatsThis);\n  }\n}\n\nbool NewNotebookDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  valid = valid && validateRootFolderInput(msg);\n\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  return valid;\n}\n\nbool NewNotebookDialog::validateNameInput(QString &p_msg) {\n  if (m_infoWidget->getName().isEmpty()) {\n    Utils::appendMsg(p_msg, tr(\"Please specify a name for the notebook.\"));\n    return false;\n  }\n\n  return true;\n}\n\nbool NewNotebookDialog::validateRootFolderInput(QString &p_msg) {\n  auto rootFolderPath = m_infoWidget->getRootFolderPath();\n  if (!PathUtils::isLegalPath(rootFolderPath)) {\n    Utils::appendMsg(p_msg, tr(\"Please specify a valid root folder for the notebook.\"));\n    return false;\n  }\n\n  {\n    QFileInfo finfo(rootFolderPath);\n    if (finfo.exists()) {\n      if (finfo.isDir()) {\n        if (!QDir(rootFolderPath).isEmpty()) {\n          Utils::appendMsg(p_msg,\n                           tr(\"Root folder of the notebook must be empty. \"\n                              \"If you want to import existing data, please try other operations.\"));\n          return false;\n        }\n      } else {\n        Utils::appendMsg(p_msg, tr(\"Root folder should be a directory.\"));\n        return false;\n      }\n    }\n  }\n\n  // Check if there already exists one notebook with the same root folder.\n  {\n    auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n    auto notebook = notebookMgr.findNotebookByRootFolderPath(rootFolderPath);\n    if (notebook) {\n      Utils::appendMsg(p_msg, tr(\"There already exists a notebook (%1) with the same root folder.\")\n                                  .arg(notebook->getName()));\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvoid NewNotebookDialog::acceptedButtonClicked() {\n  if (validateInputs() && newNotebook()) {\n    accept();\n  }\n}\n\nbool NewNotebookDialog::newNotebook() {\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  auto paras = NotebookParameters::createNotebookParameters(\n      notebookMgr, m_infoWidget->getType(), m_infoWidget->getName(), m_infoWidget->getDescription(),\n      m_infoWidget->getRootFolderPath(), m_infoWidget->getIcon(), Notebook::c_defaultImageFolder,\n      Notebook::c_defaultAttachmentFolder, QDateTime::currentDateTimeUtc(),\n      m_infoWidget->getBackend(), m_infoWidget->getVersionController(),\n      m_infoWidget->getConfigMgr());\n  try {\n    notebookMgr.newNotebook(paras);\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to create notebook in (%1) (%2).\")\n                      .arg(m_infoWidget->getRootFolderPath(), p_e.what());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  return true;\n}\n\nvoid NewNotebookDialog::handleRootFolderPathChanged() {\n  auto nameEdit = m_infoWidget->getNameLineEdit();\n  if (nameEdit->text().isEmpty()) {\n    nameEdit->setText(PathUtils::dirName(m_infoWidget->getRootFolderPath()));\n  }\n}\n"
  },
  {
    "path": "src/widgets/dialogs/newnotebookdialog.h",
    "content": "#ifndef NEWNOTEBOOKDIALOG_H\n#define NEWNOTEBOOKDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass NotebookInfoWidget;\n\nclass NewNotebookDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  explicit NewNotebookDialog(QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\n  virtual bool validateRootFolderInput(QString &p_msg);\n\n  virtual void handleRootFolderPathChanged();\n\n  NotebookInfoWidget *m_infoWidget = nullptr;\n\nprivate:\n  void setupUI();\n\n  void setupNotebookInfoWidget(QWidget *p_parent = nullptr);\n\n  bool validateInputs();\n\n  bool validateNameInput(QString &p_msg);\n\n  // Create a new notebook.\n  // Return true if succeeded.\n  bool newNotebook();\n};\n} // namespace vnotex\n\n#endif // NEWNOTEBOOKDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/newnotebookfromfolderdialog.cpp",
    "content": "#include \"newnotebookfromfolderdialog.h\"\n\n#include <QGroupBox>\n#include <QLineEdit>\n#include <QVBoxLayout>\n\n#include \"../widgetsfactory.h\"\n#include \"exception.h\"\n#include \"folderfilesfilterwidget.h\"\n#include \"importfolderutils.h\"\n#include \"notebookinfowidget.h\"\n#include \"notebookmgr.h\"\n#include \"vnotex.h\"\n#include <notebook/inotebookfactory.h>\n#include <notebook/notebook.h>\n#include <notebook/notebookparameters.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nNewNotebookFromFolderDialog::NewNotebookFromFolderDialog(QWidget *p_parent)\n    : ScrollDialog(p_parent) {\n  setupUI();\n\n  m_filterWidget->getFolderPathEdit()->setFocus();\n}\n\nvoid NewNotebookFromFolderDialog::setupUI() {\n  auto widget = new QWidget(this);\n  auto mainLayout = new QVBoxLayout(widget);\n  setCentralWidget(widget);\n\n  {\n    auto box = new QGroupBox(tr(\"Source Folder\"), widget);\n    auto layout = new QVBoxLayout(box);\n    setupFolderFilesFilterWidget(widget);\n    layout->addWidget(m_filterWidget);\n\n    mainLayout->addWidget(box);\n  }\n\n  setupNotebookInfoWidget(widget);\n  mainLayout->addWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n  setButtonEnabled(QDialogButtonBox::Ok, false);\n\n  setWindowTitle(tr(\"New Notebook From Folder\"));\n}\n\nvoid NewNotebookFromFolderDialog::setupFolderFilesFilterWidget(QWidget *p_parent) {\n  m_filterWidget = new FolderFilesFilterWidget(p_parent);\n  connect(m_filterWidget, &FolderFilesFilterWidget::filesChanged, this, [this]() {\n    m_infoWidget->setRootFolderPath(m_filterWidget->getFolderPath());\n    validateInputs();\n  });\n}\n\nvoid NewNotebookFromFolderDialog::setupNotebookInfoWidget(QWidget *p_parent) {\n  m_infoWidget = new NotebookInfoWidget(NotebookInfoWidget::CreateFromFolder, p_parent);\n  connect(m_infoWidget, &NotebookInfoWidget::basicInfoEdited, this,\n          &NewNotebookFromFolderDialog::validateInputs);\n}\n\nvoid NewNotebookFromFolderDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  valid = valid && validateRootFolderInput(msg);\n\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  setButtonEnabled(QDialogButtonBox::Ok, valid);\n}\n\nbool NewNotebookFromFolderDialog::validateNameInput(QString &p_msg) {\n  p_msg.clear();\n\n  if (m_infoWidget->getName().isEmpty()) {\n    Utils::appendMsg(p_msg, tr(\"Please specify a name for the notebook.\"));\n    return false;\n  }\n\n  return true;\n}\n\nbool NewNotebookFromFolderDialog::validateRootFolderInput(QString &p_msg) {\n  auto rootFolderPath = m_infoWidget->getRootFolderPath();\n  if (!QFileInfo::exists(rootFolderPath) || !PathUtils::isLegalPath(rootFolderPath)) {\n    Utils::appendMsg(p_msg, tr(\"Please specify a valid folder for the new notebook.\"));\n    return false;\n  }\n\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n\n  // Check if there already exists one notebook with the same root folder.\n  {\n    auto notebook = notebookMgr.findNotebookByRootFolderPath(rootFolderPath);\n    if (notebook) {\n      Utils::appendMsg(p_msg, tr(\"There already exists a notebook (%1) with the same root folder.\")\n                                  .arg(notebook->getName()));\n      return false;\n    }\n  }\n\n  // Warn if it is a valid bundle notebook root folder.\n  {\n    auto factory = notebookMgr.getBundleNotebookFactory();\n    auto backend =\n        notebookMgr.createNotebookBackend(QStringLiteral(\"local.vnotex\"), rootFolderPath);\n    if (factory->checkRootFolder(backend)) {\n      Utils::appendMsg(p_msg,\n                       tr(\"The folder is likely to be the root folder of a valid bundle notebook. \"\n                          \"You may want to use \\\"Open Other Notebooks\\\" to open it. \"\n                          \"If continue, all existing information of the notebook may be lost.\"));\n    }\n  }\n\n  return true;\n}\n\nvoid NewNotebookFromFolderDialog::acceptedButtonClicked() {\n  if (isCompleted() || newNotebookFromFolder()) {\n    accept();\n  }\n}\n\nbool NewNotebookFromFolderDialog::newNotebookFromFolder() {\n  const auto rootFolderPath = m_infoWidget->getRootFolderPath();\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  auto paras = NotebookParameters::createNotebookParameters(\n      notebookMgr, m_infoWidget->getType(), m_infoWidget->getName(), m_infoWidget->getDescription(),\n      rootFolderPath, m_infoWidget->getIcon(), Notebook::c_defaultImageFolder,\n      Notebook::c_defaultAttachmentFolder, QDateTime::currentDateTimeUtc(),\n      m_infoWidget->getBackend(), m_infoWidget->getVersionController(),\n      m_infoWidget->getConfigMgr());\n  paras->m_ensureEmptyRootFolder = false;\n  QSharedPointer<Notebook> nb;\n  try {\n    nb = notebookMgr.newNotebook(paras);\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to create notebook in %1 (%2).\").arg(rootFolderPath, p_e.what());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  QString errMsg;\n  auto rootNode = nb->getRootNode();\n  ImportFolderUtils::importFolderContents(nb.data(), rootNode.data(), m_filterWidget->getSuffixes(),\n                                          errMsg);\n\n  emit nb->nodeUpdated(rootNode.data());\n\n  if (!errMsg.isEmpty()) {\n    qWarning() << errMsg;\n    setInformationText(errMsg, ScrollDialog::InformationLevel::Error);\n    completeButStay();\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/newnotebookfromfolderdialog.h",
    "content": "#ifndef NEWNOTEBOOKFROMFOLDERDIALOG_H\n#define NEWNOTEBOOKFROMFOLDERDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass NotebookInfoWidget;\nclass FolderFilesFilterWidget;\nclass Node;\nclass Notebook;\n\nclass NewNotebookFromFolderDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  explicit NewNotebookFromFolderDialog(QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate slots:\n  void validateInputs();\n\nprivate:\n  void setupUI();\n\n  void setupFolderFilesFilterWidget(QWidget *p_parent = nullptr);\n\n  void setupNotebookInfoWidget(QWidget *p_parent = nullptr);\n\n  bool validateNameInput(QString &p_msg);\n\n  bool validateRootFolderInput(QString &p_msg);\n\n  // Create a new notebook.\n  // Return true if succeeded.\n  bool newNotebookFromFolder();\n\n  NotebookInfoWidget *m_infoWidget = nullptr;\n\n  FolderFilesFilterWidget *m_filterWidget = nullptr;\n};\n} // namespace vnotex\n\n#endif // NEWNOTEBOOKFROMFOLDERDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/newnotedialog.cpp",
    "content": "#include \"newnotedialog.h\"\n\n#include <QComboBox>\n#include <QFormLayout>\n#include <QHBoxLayout>\n#include <QLineEdit>\n#include <QPlainTextEdit>\n#include <QPushButton>\n\n#include \"../widgetsfactory.h\"\n#include \"exception.h\"\n#include \"nodeinfowidget.h\"\n#include \"notebook/node.h\"\n#include \"notebook/notebook.h\"\n#include \"notetemplateselector.h\"\n#include <buffer/filetypehelper.h>\n#include <core/configmgr.h>\n#include <core/templatemgr.h>\n#include <core/widgetconfig.h>\n#include <snippet/snippetmgr.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nQString NewNoteDialog::s_lastTemplate;\n\nNewNoteDialog::NewNoteDialog(Node *p_node, QWidget *p_parent) : ScrollDialog(p_parent) {\n  Q_ASSERT(p_node && p_node->isLoaded());\n  setupUI(p_node);\n\n  initDefaultValues(p_node);\n\n  m_infoWidget->getNameLineEdit()->setFocus();\n}\n\nvoid NewNoteDialog::setupUI(const Node *p_node) {\n  setupNodeInfoWidget(p_node, this);\n  setCentralWidget(m_infoWidget);\n\n  auto infoLayout = m_infoWidget->getMainLayout();\n\n  m_templateSelector = new NoteTemplateSelector(m_infoWidget);\n  infoLayout->addRow(tr(\"Template:\"), m_templateSelector);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"New Note\"));\n}\n\nvoid NewNoteDialog::setupNodeInfoWidget(const Node *p_node, QWidget *p_parent) {\n  m_infoWidget = new NodeInfoWidget(p_node, Node::Flag::Content, p_parent);\n}\n\nbool NewNoteDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  return valid;\n}\n\nbool NewNoteDialog::validateNameInput(QString &p_msg) {\n  p_msg.clear();\n\n  auto name = m_infoWidget->getName();\n  if (name.isEmpty() || !PathUtils::isLegalFileName(name)) {\n    p_msg = tr(\"Please specify a valid name for the note.\");\n    return false;\n  }\n\n  if (!m_infoWidget->getParentNode()->isLegalNameForNewChild(name)) {\n    p_msg = tr(\"Name conflicts with existing or built-in note.\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid NewNoteDialog::acceptedButtonClicked() {\n  s_lastTemplate = m_templateSelector->getCurrentTemplate();\n\n  {\n    auto fileType = FileTypeHelper::getInst().getFileTypeByName(m_infoWidget->getFileType()).m_type;\n    ConfigMgr::getInst().getWidgetConfig().setNewNoteDefaultFileType(static_cast<int>(fileType));\n  }\n\n  if (validateInputs()) {\n    Notebook *notebook = const_cast<Notebook *>(m_infoWidget->getNotebook());\n    Node *parentNode = const_cast<Node *>(m_infoWidget->getParentNode());\n    QString errMsg;\n    m_newNode = newNote(notebook, parentNode, m_infoWidget->getName(),\n                        m_templateSelector->getTemplateContent(), errMsg);\n    if (!m_newNode) {\n      setInformationText(errMsg, ScrollDialog::InformationLevel::Error);\n      return;\n    }\n    accept();\n  }\n}\n\nQSharedPointer<Node> NewNoteDialog::newNote(Notebook *p_notebook, Node *p_parentNode,\n                                            const QString &p_name, const QString &p_templateContent,\n                                            QString &p_errMsg) {\n  Q_ASSERT(p_notebook && p_parentNode);\n\n  QSharedPointer<Node> newNode;\n  p_errMsg.clear();\n\n  try {\n    newNode = p_notebook->newNode(p_parentNode, Node::Flag::Content, p_name,\n                                  evaluateTemplateContent(p_templateContent, p_name));\n  } catch (Exception &p_e) {\n    p_errMsg = tr(\"Failed to create note under (%1) in (%2) (%3).\")\n                   .arg(p_parentNode->getName(), p_notebook->getName(), p_e.what());\n    qCritical() << p_errMsg;\n    return nullptr;\n  }\n\n  emit p_notebook->nodeUpdated(newNode.data());\n  return newNode;\n}\n\nconst QSharedPointer<Node> &NewNoteDialog::getNewNode() const { return m_newNode; }\n\nvoid NewNoteDialog::initDefaultValues(const Node *p_node) {\n  {\n    int defaultType = ConfigMgr::getInst().getWidgetConfig().getNewNoteDefaultFileType();\n    const auto &fileType = FileTypeHelper::getInst().getFileType(defaultType);\n\n    m_infoWidget->setFileType(fileType.m_typeName);\n\n    auto lineEdit = m_infoWidget->getNameLineEdit();\n    auto defaultName = FileUtils::generateFileNameWithSequence(\n        p_node->fetchAbsolutePath(), tr(\"note\"), fileType.preferredSuffix());\n    lineEdit->setText(defaultName);\n    WidgetUtils::selectBaseName(lineEdit);\n  }\n\n  if (!s_lastTemplate.isEmpty()) {\n    // Restore.\n    if (!m_templateSelector->setCurrentTemplate(s_lastTemplate)) {\n      s_lastTemplate.clear();\n    }\n  }\n}\n\nQString NewNoteDialog::evaluateTemplateContent(const QString &p_content, const QString &p_name) {\n  int cursorOffset = 0;\n  return SnippetMgr::getInst().applySnippetBySymbol(p_content, QString(), cursorOffset,\n                                                    SnippetMgr::generateOverrides(p_name));\n}\n"
  },
  {
    "path": "src/widgets/dialogs/newnotedialog.h",
    "content": "#ifndef NEWNOTEDIALOG_H\n#define NEWNOTEDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass Notebook;\nclass Node;\nclass NodeInfoWidget;\nclass NoteTemplateSelector;\n\nclass NewNoteDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  // New a note under @p_node.\n  NewNoteDialog(Node *p_node, QWidget *p_parent = nullptr);\n\n  const QSharedPointer<Node> &getNewNode() const;\n\n  static QSharedPointer<Node> newNote(Notebook *p_notebook, Node *p_parentNode,\n                                      const QString &p_name, const QString &p_templateContent,\n                                      QString &p_errMsg);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI(const Node *p_node);\n\n  void setupNodeInfoWidget(const Node *p_node, QWidget *p_parent);\n\n  bool validateInputs();\n\n  bool validateNameInput(QString &p_msg);\n\n  void initDefaultValues(const Node *p_node);\n\n  static QString evaluateTemplateContent(const QString &p_content, const QString &p_name);\n\n  NodeInfoWidget *m_infoWidget = nullptr;\n\n  NoteTemplateSelector *m_templateSelector = nullptr;\n\n  QSharedPointer<Node> m_newNode;\n\n  static QString s_lastTemplate;\n};\n} // namespace vnotex\n\n#endif // NEWNOTEDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/newsnippetdialog.cpp",
    "content": "#include \"newsnippetdialog.h\"\n\n#include \"snippetinfowidget.h\"\n\n#include <core/exception.h>\n#include <snippet/snippetmgr.h>\n\nusing namespace vnotex;\n\nNewSnippetDialog::NewSnippetDialog(QWidget *p_parent) : ScrollDialog(p_parent) {\n  setupUI();\n\n  m_infoWidget->setFocus();\n}\n\nvoid NewSnippetDialog::setupUI() {\n  setupSnippetInfoWidget(this);\n  setCentralWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"New Snippet\"));\n}\n\nvoid NewSnippetDialog::setupSnippetInfoWidget(QWidget *p_parent) {\n  m_infoWidget = new SnippetInfoWidget(p_parent);\n}\n\nbool NewSnippetDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  return valid;\n}\n\nvoid NewSnippetDialog::acceptedButtonClicked() {\n  if (validateInputs() && newSnippet()) {\n    accept();\n  }\n}\n\nbool NewSnippetDialog::newSnippet() {\n  auto snip = QSharedPointer<Snippet>::create(\n      m_infoWidget->getName(), m_infoWidget->getDescription(), m_infoWidget->getContent(),\n      m_infoWidget->getShortcut(), m_infoWidget->shouldIndentAsFirstLine(),\n      m_infoWidget->getCursorMark(), m_infoWidget->getSelectionMark());\n  Q_ASSERT(snip->isValid());\n  try {\n    SnippetMgr::getInst().addSnippet(snip);\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to add snippet (%1) (%2).\").arg(snip->getName(), p_e.what());\n    qWarning() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n  return true;\n}\n\nbool NewSnippetDialog::validateNameInput(QString &p_msg) {\n  p_msg.clear();\n\n  const auto name = m_infoWidget->getName();\n  if (name.isEmpty()) {\n    p_msg = tr(\"Please specify a name for the snippet.\");\n    return false;\n  }\n\n  if (SnippetMgr::getInst().find(name, Qt::CaseInsensitive)) {\n    p_msg = tr(\"Name conflicts with existing snippet.\");\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/newsnippetdialog.h",
    "content": "#ifndef NEWSNIPPETDIALOG_H\n#define NEWSNIPPETDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass SnippetInfoWidget;\n\nclass NewSnippetDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  explicit NewSnippetDialog(QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupSnippetInfoWidget(QWidget *p_parent);\n\n  bool newSnippet();\n\n  bool validateNameInput(QString &p_msg);\n\n  bool validateInputs();\n\n  SnippetInfoWidget *m_infoWidget = nullptr;\n};\n} // namespace vnotex\n\n#endif // NEWSNIPPETDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/newtagdialog.cpp",
    "content": "#include \"newtagdialog.h\"\r\n\r\n#include <QFormLayout>\r\n\r\n#include <notebook/tagi.h>\r\n\r\n#include \"../lineeditwithsnippet.h\"\r\n#include \"../widgetsfactory.h\"\r\n#include \"levellabelwithupbutton.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nNewTagDialog::NewTagDialog(TagI *p_tagI, Tag *p_tag, QWidget *p_parent)\r\n    : ScrollDialog(p_parent), m_tagI(p_tagI), m_parentTag(p_tag) {\r\n  setupUI();\r\n\r\n  m_nameLineEdit->setFocus();\r\n}\r\n\r\nstatic QVector<LevelLabelWithUpButton::Level> tagToLevels(const Tag *p_tag) {\r\n  QVector<LevelLabelWithUpButton::Level> levels;\r\n  while (p_tag) {\r\n    LevelLabelWithUpButton::Level level;\r\n    level.m_name = p_tag->fetchPath();\r\n    level.m_data = static_cast<const void *>(p_tag);\r\n    levels.push_back(level);\r\n    p_tag = p_tag->getParent();\r\n  }\r\n\r\n  // Append an empty level.\r\n  levels.push_back(LevelLabelWithUpButton::Level());\r\n\r\n  return levels;\r\n}\r\n\r\nvoid NewTagDialog::setupUI() {\r\n  auto mainWidget = new QWidget(this);\r\n  setCentralWidget(mainWidget);\r\n\r\n  auto mainLayout = WidgetsFactory::createFormLayout(mainWidget);\r\n\r\n  {\r\n    m_parentTagLabel = new LevelLabelWithUpButton(this);\r\n    m_parentTagLabel->setLevels(tagToLevels(m_parentTag));\r\n    mainLayout->addRow(tr(\"Location:\"), m_parentTagLabel);\r\n  }\r\n\r\n  m_nameLineEdit = WidgetsFactory::createLineEditWithSnippet(mainWidget);\r\n  mainLayout->addRow(tr(\"Name:\"), m_nameLineEdit);\r\n\r\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\r\n\r\n  setWindowTitle(tr(\"New Tag\"));\r\n}\r\n\r\nbool NewTagDialog::validateInputs() {\r\n  bool valid = true;\r\n  QString msg;\r\n\r\n  auto name = getTagName();\r\n  if (!Tag::isValidName(name)) {\r\n    valid = false;\r\n    msg = tr(\"Please specify a valid name for the tag.\");\r\n  } else if (m_tagI->findTag(name)) {\r\n    valid = false;\r\n    msg = tr(\"Name conflicts with existing tag.\");\r\n  }\r\n\r\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\r\n                                : ScrollDialog::InformationLevel::Error);\r\n  return valid;\r\n}\r\n\r\nbool NewTagDialog::newTag() {\r\n  const Tag *parentTag = static_cast<const Tag *>(m_parentTagLabel->getLevel().m_data);\r\n  const auto parentName = parentTag ? parentTag->name() : QString();\r\n  const auto name = getTagName();\r\n  if (!m_tagI->newTag(name, parentName)) {\r\n    setInformationText(tr(\"Failed to create tag (%1).\").arg(name),\r\n                       ScrollDialog::InformationLevel::Error);\r\n    // Tags maybe updated. Don't allow operation for now.\r\n    setButtonEnabled(QDialogButtonBox::Ok, false);\r\n    return false;\r\n  }\r\n  return true;\r\n}\r\n\r\nvoid NewTagDialog::acceptedButtonClicked() {\r\n  if (validateInputs() && newTag()) {\r\n    accept();\r\n  }\r\n}\r\n\r\nQString NewTagDialog::getTagName() const { return m_nameLineEdit->evaluatedText(); }\r\n"
  },
  {
    "path": "src/widgets/dialogs/newtagdialog.h",
    "content": "#ifndef NEWTAGDIALOG_H\r\n#define NEWTAGDIALOG_H\r\n\r\n#include \"scrolldialog.h\"\r\n\r\nnamespace vnotex {\r\nclass TagI;\r\nclass Tag;\r\nclass LevelLabelWithUpButton;\r\nclass LineEditWithSnippet;\r\n\r\nclass NewTagDialog : public ScrollDialog {\r\n  Q_OBJECT\r\npublic:\r\n  // New a tag under @p_tag.\r\n  NewTagDialog(TagI *p_tagI, Tag *p_tag, QWidget *p_parent = nullptr);\r\n\r\nprotected:\r\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\r\n\r\nprivate:\r\n  void setupUI();\r\n\r\n  bool validateInputs();\r\n\r\n  bool newTag();\r\n\r\n  QString getTagName() const;\r\n\r\n  TagI *m_tagI = nullptr;\r\n\r\n  Tag *m_parentTag = nullptr;\r\n\r\n  LevelLabelWithUpButton *m_parentTagLabel = nullptr;\r\n\r\n  LineEditWithSnippet *m_nameLineEdit = nullptr;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // NEWTAGDIALOG_H\r\n"
  },
  {
    "path": "src/widgets/dialogs/nodeinfowidget.cpp",
    "content": "#include \"nodeinfowidget.h\"\n\n#include <QComboBox>\n#include <QFormLayout>\n#include <QLabel>\n#include <QLineEdit>\n\n#include \"../lineeditwithsnippet.h\"\n#include \"../widgetsfactory.h\"\n#include \"exception.h\"\n#include \"levellabelwithupbutton.h\"\n#include \"notebook/notebook.h\"\n#include <buffer/filetypehelper.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nNodeInfoWidget::NodeInfoWidget(const Node *p_node, QWidget *p_parent)\n    : QWidget(p_parent), m_mode(Mode::Edit) {\n  setupUI(p_node->getParent(), p_node->getFlags());\n\n  setNode(p_node);\n}\n\nNodeInfoWidget::NodeInfoWidget(const Node *p_parentNode, Node::Flags p_flags, QWidget *p_parent)\n    : QWidget(p_parent), m_mode(Mode::Create) {\n  setupUI(p_parentNode, p_flags);\n}\n\nstatic QVector<LevelLabelWithUpButton::Level> nodeToLevels(const Node *p_node) {\n  QVector<LevelLabelWithUpButton::Level> levels;\n  while (p_node) {\n    LevelLabelWithUpButton::Level level;\n    level.m_name = p_node->fetchPath();\n    level.m_data = static_cast<const void *>(p_node);\n    levels.push_back(level);\n    p_node = p_node->getParent();\n  }\n\n  return levels;\n}\n\nvoid NodeInfoWidget::setupUI(const Node *p_parentNode, Node::Flags p_newNodeFlags) {\n  const bool createMode = m_mode == Mode::Create;\n  const bool isNote = p_newNodeFlags & Node::Flag::Content;\n\n  m_mainLayout = WidgetsFactory::createFormLayout(this);\n\n  m_mainLayout->addRow(tr(\"Notebook:\"), new QLabel(p_parentNode->getNotebook()->getName(), this));\n\n  {\n    m_parentNodeLabel = new LevelLabelWithUpButton(this);\n    m_parentNodeLabel->setReadOnly(!createMode);\n    m_parentNodeLabel->setLevels(nodeToLevels(p_parentNode));\n    connect(m_parentNodeLabel, &LevelLabelWithUpButton::levelChanged, this,\n            &NodeInfoWidget::inputEdited);\n    m_mainLayout->addRow(tr(\"Location:\"), m_parentNodeLabel);\n  }\n\n  if (createMode && isNote) {\n    setupFileTypeComboBox(this);\n    m_mainLayout->addRow(tr(\"File type:\"), m_fileTypeComboBox);\n  }\n\n  setupNameLineEdit(this);\n  m_mainLayout->addRow(tr(\"Name:\"), m_nameLineEdit);\n\n  if (!createMode) {\n    m_createdDateTimeLabel = new QLabel(this);\n    m_mainLayout->addRow(tr(\"Created time:\"), m_createdDateTimeLabel);\n\n    m_modifiedDateTimeLabel = new QLabel(this);\n    m_mainLayout->addRow(tr(\"Modified time:\"), m_modifiedDateTimeLabel);\n  }\n}\n\nvoid NodeInfoWidget::setupNameLineEdit(QWidget *p_parent) {\n  m_nameLineEdit = WidgetsFactory::createLineEditWithSnippet(p_parent);\n  connect(m_nameLineEdit, &QLineEdit::textEdited, this, [this]() {\n    // Choose the correct file type.\n    if (m_fileTypeComboBox) {\n      auto inputName = m_nameLineEdit->text();\n      QString typeName;\n      int dotIdx = inputName.lastIndexOf(QLatin1Char('.'));\n      if (dotIdx != -1) {\n        auto suffix = inputName.mid(dotIdx + 1);\n        const auto &fileType = FileTypeHelper::getInst().getFileTypeBySuffix(suffix);\n        typeName = fileType.m_typeName;\n      } else {\n        typeName = FileTypeHelper::getInst().getFileType(FileType::Others).m_typeName;\n      }\n\n      int idx = m_fileTypeComboBox->findData(typeName);\n      if (idx != -1) {\n        m_fileTypeComboBoxMuted = true;\n        m_fileTypeComboBox->setCurrentIndex(idx);\n        m_fileTypeComboBoxMuted = false;\n      }\n    }\n\n    emit inputEdited();\n  });\n}\n\nQLineEdit *NodeInfoWidget::getNameLineEdit() const { return m_nameLineEdit; }\n\nQString NodeInfoWidget::getName() const { return m_nameLineEdit->evaluatedText().trimmed(); }\n\nconst Notebook *NodeInfoWidget::getNotebook() const { return getParentNode()->getNotebook(); }\n\nconst Node *NodeInfoWidget::getParentNode() const {\n  return static_cast<const Node *>(m_parentNodeLabel->getLevel().m_data);\n}\n\nvoid NodeInfoWidget::setNode(const Node *p_node) {\n  if (m_node == p_node) {\n    return;\n  }\n\n  Q_ASSERT(m_mode != Mode::Create);\n  m_node = p_node;\n  if (m_node) {\n    Q_ASSERT(getNotebook() == m_node->getNotebook());\n    m_nameLineEdit->setText(m_node->getName());\n    m_parentNodeLabel->setLevels(nodeToLevels(m_node->getParent()));\n\n    auto createdTime = Utils::dateTimeString(m_node->getCreatedTimeUtc().toLocalTime());\n    m_createdDateTimeLabel->setText(createdTime);\n\n    auto modifiedTime = Utils::dateTimeString(m_node->getModifiedTimeUtc().toLocalTime());\n    m_modifiedDateTimeLabel->setText(modifiedTime);\n  }\n}\n\nvoid NodeInfoWidget::setupFileTypeComboBox(QWidget *p_parent) {\n  m_fileTypeComboBox = WidgetsFactory::createComboBox(p_parent);\n  const auto &fileTypes = FileTypeHelper::getInst().getAllFileTypes();\n  for (const auto &ft : fileTypes) {\n    if (m_mode == Mode::Create && !ft.m_isNewable) {\n      continue;\n    }\n    m_fileTypeComboBox->addItem(ft.m_displayName, ft.m_typeName);\n  }\n  connect(m_fileTypeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this]() {\n    if (m_fileTypeComboBoxMuted) {\n      return;\n    }\n    auto name = m_fileTypeComboBox->currentData().toString();\n    const auto &fileType = FileTypeHelper::getInst().getFileTypeByName(name);\n    const auto suffix = fileType.preferredSuffix();\n    if (!suffix.isEmpty()) {\n      // Change the suffix.\n      auto inputName = m_nameLineEdit->text();\n      QString newName;\n      int dotIdx = inputName.lastIndexOf(QLatin1Char('.'));\n      if (dotIdx == -1) {\n        newName = inputName + QLatin1Char('.') + suffix;\n      } else if (inputName.mid(dotIdx + 1) != suffix) {\n        newName = inputName.left(dotIdx + 1) + suffix;\n      }\n\n      if (!newName.isEmpty()) {\n        m_nameLineEdit->setText(newName);\n        emit inputEdited();\n      }\n    }\n\n    WidgetUtils::selectBaseName(m_nameLineEdit);\n    m_nameLineEdit->setFocus();\n  });\n}\n\nQFormLayout *NodeInfoWidget::getMainLayout() const { return m_mainLayout; }\n\nQString NodeInfoWidget::getFileType() const { return m_fileTypeComboBox->currentData().toString(); }\n\nvoid NodeInfoWidget::setFileType(const QString &p_typeName) {\n  int idx = m_fileTypeComboBox->findData(p_typeName);\n  if (idx != -1) {\n    m_fileTypeComboBox->setCurrentIndex(idx);\n  }\n}\n"
  },
  {
    "path": "src/widgets/dialogs/nodeinfowidget.h",
    "content": "#ifndef NODEINFOWIDGET_H\n#define NODEINFOWIDGET_H\n\n#include <QWidget>\n\n#include <notebook/node.h>\n\nclass QLineEdit;\nclass QLabel;\nclass QFormLayout;\nclass QComboBox;\n\nnamespace vnotex {\nclass Notebook;\nclass LevelLabelWithUpButton;\nclass LineEditWithSnippet;\n\nclass NodeInfoWidget : public QWidget {\n  Q_OBJECT\npublic:\n  enum Mode { Create, Edit };\n\n  NodeInfoWidget(const Node *p_node, QWidget *p_parent = nullptr);\n\n  NodeInfoWidget(const Node *p_parentNode, Node::Flags p_flags, QWidget *p_parent = nullptr);\n\n  QLineEdit *getNameLineEdit() const;\n\n  QString getName() const;\n\n  const Notebook *getNotebook() const;\n\n  const Node *getParentNode() const;\n\n  // Allow upper level to add more widgets to the layout.\n  QFormLayout *getMainLayout() const;\n\n  QString getFileType() const;\n  void setFileType(const QString &p_typeName);\n\nsignals:\n  void inputEdited();\n\nprivate:\n  void setupUI(const Node *p_parentNode, Node::Flags p_newNodeFlags);\n\n  void setupFileTypeComboBox(QWidget *p_parent);\n\n  void setupNameLineEdit(QWidget *p_parent);\n\n  void setNode(const Node *p_node);\n\n  Mode m_mode = Mode::Create;\n\n  QFormLayout *m_mainLayout = nullptr;\n\n  QComboBox *m_fileTypeComboBox = nullptr;\n\n  LineEditWithSnippet *m_nameLineEdit = nullptr;\n\n  LevelLabelWithUpButton *m_parentNodeLabel = nullptr;\n\n  QLabel *m_createdDateTimeLabel = nullptr;\n\n  QLabel *m_modifiedDateTimeLabel = nullptr;\n\n  const Node *m_node = nullptr;\n\n  bool m_fileTypeComboBoxMuted = false;\n};\n} // namespace vnotex\n\n#endif // NODEINFOWIDGET_H\n"
  },
  {
    "path": "src/widgets/dialogs/notebookinfowidget.cpp",
    "content": "#include \"notebookinfowidget.h\"\n\n#include <QtWidgets>\n\n#include \"../lineeditwithsnippet.h\"\n#include \"../widgetsfactory.h\"\n#include \"configmgr.h\"\n#include \"exception.h\"\n#include \"notebook/inotebookfactory.h\"\n#include \"notebook/notebook.h\"\n#include \"notebook/notebookparameters.h\"\n#include \"notebookbackend/inotebookbackend.h\"\n#include \"notebookbackend/inotebookbackendfactory.h\"\n#include \"notebookconfigmgr/inotebookconfigmgr.h\"\n#include \"notebookconfigmgr/inotebookconfigmgrfactory.h\"\n#include \"notebookmgr.h\"\n#include \"versioncontroller/iversioncontroller.h\"\n#include \"versioncontroller/iversioncontrollerfactory.h\"\n#include \"vnotex.h\"\n#include <utils/pathutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nNotebookInfoWidget::NotebookInfoWidget(NotebookInfoWidget::Mode p_mode, QWidget *p_parent)\n    : QWidget(p_parent), m_mode(p_mode) {\n  setupUI();\n\n  setMode(p_mode);\n}\n\nvoid NotebookInfoWidget::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n\n  auto basicInfoGroup = setupBasicInfoGroupBox(this);\n  mainLayout->addWidget(basicInfoGroup);\n\n  auto advancedInfoGroup = setupAdvancedInfoGroupBox(this);\n  mainLayout->addWidget(advancedInfoGroup);\n}\n\nQGroupBox *NotebookInfoWidget::setupBasicInfoGroupBox(QWidget *p_parent) {\n  auto box = new QGroupBox(tr(\"Basic Information\"), p_parent);\n  auto mainLayout = WidgetsFactory::createFormLayout(box);\n\n  {\n    setupNotebookTypeComboBox(box);\n    mainLayout->addRow(tr(\"Type:\"), m_typeComboBox);\n  }\n\n  {\n    m_nameLineEdit = WidgetsFactory::createLineEditWithSnippet(box);\n    m_nameLineEdit->setPlaceholderText(tr(\"Name of notebook\"));\n    connect(m_nameLineEdit, &QLineEdit::textEdited, this, &NotebookInfoWidget::basicInfoEdited);\n    mainLayout->addRow(tr(\"Name:\"), m_nameLineEdit);\n  }\n\n  {\n    mainLayout->addRow(tr(\"Icon:\"), new QLabel(\"default\", box));\n  }\n\n  {\n    m_descriptionLineEdit = WidgetsFactory::createLineEdit(box);\n    m_descriptionLineEdit->setPlaceholderText(tr(\"Description of notebook\"));\n    connect(m_descriptionLineEdit, &QLineEdit::textEdited, this,\n            &NotebookInfoWidget::basicInfoEdited);\n    mainLayout->addRow(tr(\"Description:\"), m_descriptionLineEdit);\n  }\n\n  {\n    auto layout = setupNotebookRootFolderPath(box);\n    mainLayout->addRow(tr(\"Root folder:\"), layout);\n  }\n\n  return box;\n}\n\nvoid NotebookInfoWidget::setupNotebookTypeComboBox(QWidget *p_parent) {\n  m_typeComboBox = WidgetsFactory::createComboBox(p_parent);\n  m_typeComboBox->setToolTip(tr(\"Type of notebook\"));\n\n  QString whatsThis = tr(\"Specify the type of notebook.<br/>\");\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  for (auto &factory : notebookMgr.getAllNotebookFactories()) {\n    m_typeComboBox->addItem(factory->getDisplayName(), factory->getName());\n    whatsThis += tr(\"<b>%1</b>: %2<br/>\").arg(factory->getDisplayName(), factory->getDescription());\n  }\n\n  m_typeComboBox->setWhatsThis(whatsThis);\n}\n\nQLayout *NotebookInfoWidget::setupNotebookRootFolderPath(QWidget *p_parent) {\n  m_rootFolderPathLineEdit = WidgetsFactory::createLineEdit(p_parent);\n  m_rootFolderPathLineEdit->setPlaceholderText(tr(\"Path of notebook root folder\"));\n  auto whatsThis =\n      tr(\"<b>Notebook Root Folder</b> is the folder containing all data of one notebook in %1.\")\n          .arg(ConfigMgr::c_appName);\n  m_rootFolderPathLineEdit->setWhatsThis(whatsThis);\n  connect(m_rootFolderPathLineEdit, &QLineEdit::textChanged, this, [this]() {\n    emit rootFolderEdited();\n    emit basicInfoEdited();\n  });\n\n  m_rootFolderPathBrowseButton = new QPushButton(tr(\"Browse\"), p_parent);\n  connect(m_rootFolderPathBrowseButton, &QPushButton::clicked, this, [this]() {\n    auto &config = ConfigMgr::getInst().getSessionConfig();\n    auto browsePath = config.getNewNotebookDefaultRootFolderPath();\n    auto rootFolderPath = QFileDialog::getExistingDirectory(\n        this, tr(\"Select Notebook Root Folder\"), browsePath,\n        QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);\n    if (!rootFolderPath.isEmpty()) {\n      config.setNewNotebookDefaultRootFolderPath(PathUtils::parentDirPath(rootFolderPath));\n      m_rootFolderPathLineEdit->setText(rootFolderPath);\n    }\n  });\n\n  auto layout = new QHBoxLayout();\n  layout->addWidget(m_rootFolderPathLineEdit);\n  layout->addWidget(m_rootFolderPathBrowseButton);\n  return layout;\n}\n\nQGroupBox *NotebookInfoWidget::setupAdvancedInfoGroupBox(QWidget *p_parent) {\n  auto box = new QGroupBox(tr(\"Advanced Information\"), p_parent);\n  auto mainLayout = WidgetsFactory::createFormLayout(box);\n\n  {\n    setupConfigMgrComboBox(box);\n    mainLayout->addRow(tr(\"Configuration manager:\"), m_configMgrComboBox);\n  }\n\n  {\n    setupVersionControllerComboBox(box);\n    mainLayout->addRow(tr(\"Version control:\"), m_versionControllerComboBox);\n  }\n\n  {\n    setupBackendComboBox(box);\n    mainLayout->addRow(tr(\"Backend:\"), m_backendComboBox);\n  }\n\n  return box;\n}\n\nvoid NotebookInfoWidget::setupConfigMgrComboBox(QWidget *p_parent) {\n  m_configMgrComboBox = WidgetsFactory::createComboBox(p_parent);\n  m_configMgrComboBox->setToolTip(tr(\"Configuration manager of notebook\"));\n\n  QString whatsThis = tr(\"Specify configruation manager of notebook.<br/>\");\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  for (auto &factory : notebookMgr.getAllNotebookConfigMgrFactories()) {\n    m_configMgrComboBox->addItem(factory->getDisplayName(), factory->getName());\n    whatsThis += tr(\"<b>%1</b>: %2<br/>\").arg(factory->getDisplayName(), factory->getDescription());\n  }\n\n  m_configMgrComboBox->setWhatsThis(whatsThis);\n}\n\nvoid NotebookInfoWidget::setupVersionControllerComboBox(QWidget *p_parent) {\n  m_versionControllerComboBox = WidgetsFactory::createComboBox(p_parent);\n  m_versionControllerComboBox->setToolTip(tr(\"Version control of notebook\"));\n\n  QString whatsThis = tr(\"Specify version control of notebook.<br/>\");\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  for (auto &factory : notebookMgr.getAllVersionControllerFactories()) {\n    m_versionControllerComboBox->addItem(factory->getDisplayName(), factory->getName());\n    whatsThis += tr(\"<b>%1</b>: %2<br/>\").arg(factory->getDisplayName(), factory->getDescription());\n  }\n\n  m_versionControllerComboBox->setWhatsThis(whatsThis);\n}\n\nvoid NotebookInfoWidget::setupBackendComboBox(QWidget *p_parent) {\n  m_backendComboBox = WidgetsFactory::createComboBox(p_parent);\n  m_backendComboBox->setToolTip(tr(\"Backend of notebook\"));\n\n  QString whatsThis = tr(\"Specify backend of notebook.<br/>\");\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  for (auto &factory : notebookMgr.getAllNotebookBackendFactories()) {\n    m_backendComboBox->addItem(factory->getDisplayName(), factory->getName());\n    whatsThis += tr(\"<b>%1</b>: %2<br/>\").arg(factory->getDisplayName(), factory->getDescription());\n  }\n\n  m_backendComboBox->setWhatsThis(whatsThis);\n\n  connect(m_backendComboBox, QOverload<int>::of(&QComboBox::activated), this,\n          &NotebookInfoWidget::notebookBackendEdited);\n}\n\nstatic void setCurrentComboBoxByData(QComboBox *p_box, const QVariant &p_data) {\n  int idx = p_box->findData(p_data);\n  p_box->setCurrentIndex(idx);\n}\n\nvoid NotebookInfoWidget::setNotebook(const Notebook *p_notebook) {\n  Q_ASSERT(m_mode != Mode::Create && m_mode != Mode::CreateFromFolder &&\n           m_mode != Mode::CreateFromLegacy);\n  if (m_notebook == p_notebook) {\n    return;\n  }\n\n  bool isImport = m_mode == Mode::Import;\n  clear(isImport, isImport);\n\n  m_notebook = p_notebook;\n  if (m_notebook) {\n    setCurrentComboBoxByData(m_typeComboBox, m_notebook->getType());\n    m_nameLineEdit->setText(m_notebook->getName());\n    m_descriptionLineEdit->setText(m_notebook->getDescription());\n    m_rootFolderPathLineEdit->setText(m_notebook->getRootFolderPath());\n    setCurrentComboBoxByData(m_configMgrComboBox, m_notebook->getConfigMgr()->getName());\n    setCurrentComboBoxByData(m_versionControllerComboBox,\n                             m_notebook->getVersionController()->getName());\n    setCurrentComboBoxByData(m_backendComboBox, m_notebook->getBackend()->getName());\n  }\n}\n\nconst Notebook *NotebookInfoWidget::getNotebook() const {\n  Q_ASSERT(m_mode != Mode::Create && m_mode != Mode::CreateFromFolder &&\n           m_mode != Mode::CreateFromLegacy);\n  return m_notebook;\n}\n\nQLineEdit *NotebookInfoWidget::getNameLineEdit() const { return m_nameLineEdit; }\n\nQLineEdit *NotebookInfoWidget::getRootFolderPathLineEdit() const {\n  return m_rootFolderPathLineEdit;\n}\n\nQLineEdit *NotebookInfoWidget::getDescriptionLineEdit() const { return m_descriptionLineEdit; }\n\nQComboBox *NotebookInfoWidget::getTypeComboBox() const { return m_typeComboBox; }\n\nQComboBox *NotebookInfoWidget::getConfigMgrComboBox() const { return m_configMgrComboBox; }\n\nQComboBox *NotebookInfoWidget::getVersionControllerComboBox() const {\n  return m_versionControllerComboBox;\n}\n\nvoid NotebookInfoWidget::setStateAccordingToMode() {\n  switch (m_mode) {\n  case CreateFromFolder:\n    m_rootFolderPathLineEdit->setReadOnly(true);\n    m_rootFolderPathBrowseButton->setVisible(false);\n    break;\n\n  case Edit:\n    m_typeComboBox->setEnabled(false);\n    m_rootFolderPathLineEdit->setReadOnly(true);\n    m_rootFolderPathBrowseButton->setVisible(false);\n    m_configMgrComboBox->setEnabled(false);\n    m_versionControllerComboBox->setEnabled(false);\n    m_backendComboBox->setEnabled(false);\n    break;\n\n  case Import:\n    m_typeComboBox->setEnabled(false);\n    m_nameLineEdit->setEnabled(false);\n    m_descriptionLineEdit->setEnabled(false);\n    m_configMgrComboBox->setEnabled(false);\n    m_versionControllerComboBox->setEnabled(false);\n    break;\n\n  case CreateFromLegacy:\n    // Support bundle notebook only.\n    m_typeComboBox->setEnabled(false);\n    break;\n\n  default:\n    break;\n  }\n}\n\nQComboBox *NotebookInfoWidget::getBackendComboBox() const { return m_backendComboBox; }\n\nQString NotebookInfoWidget::getName() const { return m_nameLineEdit->evaluatedText().trimmed(); }\n\nQString NotebookInfoWidget::getDescription() const {\n  return getDescriptionLineEdit()->text().trimmed();\n}\n\nQString NotebookInfoWidget::getRootFolderPath() const {\n  return getRootFolderPathLineEdit()->text().trimmed();\n}\n\nQIcon NotebookInfoWidget::getIcon() const { return QIcon(); }\n\nQString NotebookInfoWidget::getType() const { return getTypeComboBox()->currentData().toString(); }\n\nQString NotebookInfoWidget::getConfigMgr() const {\n  return getConfigMgrComboBox()->currentData().toString();\n}\n\nQString NotebookInfoWidget::getVersionController() const {\n  return getVersionControllerComboBox()->currentData().toString();\n}\n\nQString NotebookInfoWidget::getBackend() const {\n  return getBackendComboBox()->currentData().toString();\n}\n\nvoid NotebookInfoWidget::clear(bool p_skipRootFolder, bool p_skipBackend) {\n  Q_UNUSED(p_skipBackend);\n\n  m_notebook = nullptr;\n  m_nameLineEdit->clear();\n  m_descriptionLineEdit->clear();\n  if (!p_skipRootFolder) {\n    m_rootFolderPathLineEdit->clear();\n  }\n}\n\nvoid NotebookInfoWidget::setRootFolderPath(const QString &p_path) {\n  Q_ASSERT(m_mode == Mode::CreateFromFolder);\n  m_rootFolderPathLineEdit->setText(p_path);\n  if (m_nameLineEdit->text().isEmpty()) {\n    m_nameLineEdit->setText(PathUtils::dirName(p_path));\n  }\n}\n\nvoid NotebookInfoWidget::setMode(Mode p_mode) {\n  m_mode = p_mode;\n  setStateAccordingToMode();\n}\n"
  },
  {
    "path": "src/widgets/dialogs/notebookinfowidget.h",
    "content": "#ifndef NOTEBOOKINFOWIDGET_H\n#define NOTEBOOKINFOWIDGET_H\n\n#include <QWidget>\n\nclass QComboBox;\nclass QPushButton;\nclass QLineEdit;\nclass QGroupBox;\n\nnamespace vnotex {\nclass Notebook;\nclass LineEditWithSnippet;\n\nclass NotebookInfoWidget : public QWidget {\n  Q_OBJECT\npublic:\n  enum Mode { Create, CreateFromFolder, Edit, Import, CreateFromLegacy };\n\n  explicit NotebookInfoWidget(NotebookInfoWidget::Mode p_mode, QWidget *p_parent = nullptr);\n\n  QLineEdit *getNameLineEdit() const;\n\n  QLineEdit *getRootFolderPathLineEdit() const;\n  void setRootFolderPath(const QString &p_path);\n\n  QString getName() const;\n\n  QString getDescription() const;\n\n  QString getRootFolderPath() const;\n\n  QIcon getIcon() const;\n\n  QString getType() const;\n\n  QString getConfigMgr() const;\n\n  QString getVersionController() const;\n\n  QString getBackend() const;\n\n  void clear(bool p_skipRootFolder = false, bool p_skipBackend = false);\n\n  void setMode(Mode p_mode);\n\n  const Notebook *getNotebook() const;\n\npublic slots:\n  void setNotebook(const Notebook *p_notebook);\n\nsignals:\n  // Give caller a chance to change the name according to the root folder.\n  void rootFolderEdited();\n\n  // Emit when name, description, or root folder path is edited.\n  void basicInfoEdited();\n\n  void notebookBackendEdited();\n\nprivate:\n  void setupUI();\n\n  void setStateAccordingToMode();\n\n  QGroupBox *setupBasicInfoGroupBox(QWidget *p_parent = nullptr);\n\n  void setupNotebookTypeComboBox(QWidget *p_parent = nullptr);\n\n  QLayout *setupNotebookRootFolderPath(QWidget *p_parent = nullptr);\n\n  QGroupBox *setupAdvancedInfoGroupBox(QWidget *p_parent = nullptr);\n\n  void setupConfigMgrComboBox(QWidget *p_parent = nullptr);\n\n  void setupVersionControllerComboBox(QWidget *p_parent = nullptr);\n\n  void setupBackendComboBox(QWidget *p_parent = nullptr);\n\n  QLineEdit *getDescriptionLineEdit() const;\n\n  QComboBox *getTypeComboBox() const;\n\n  QComboBox *getConfigMgrComboBox() const;\n\n  QComboBox *getVersionControllerComboBox() const;\n\n  QComboBox *getBackendComboBox() const;\n\n  Mode m_mode = Mode::Create;\n\n  const Notebook *m_notebook = nullptr;\n\n  LineEditWithSnippet *m_nameLineEdit = nullptr;\n\n  QLineEdit *m_descriptionLineEdit = nullptr;\n\n  QComboBox *m_typeComboBox = nullptr;\n\n  QComboBox *m_configMgrComboBox = nullptr;\n\n  QComboBox *m_versionControllerComboBox = nullptr;\n\n  QComboBox *m_backendComboBox = nullptr;\n\n  QLineEdit *m_rootFolderPathLineEdit = nullptr;\n  QPushButton *m_rootFolderPathBrowseButton = nullptr;\n};\n} // namespace vnotex\n\n#endif // NOTEBOOKINFOWIDGET_H\n"
  },
  {
    "path": "src/widgets/dialogs/notepropertiesdialog.cpp",
    "content": "#include \"notepropertiesdialog.h\"\n\n#include <core/events.h>\n#include <core/exception.h>\n#include <core/vnotex.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/pathutils.h>\n\n#include \"../lineedit.h\"\n#include \"../widgetsfactory.h\"\n#include \"nodeinfowidget.h\"\n\nusing namespace vnotex;\n\nNotePropertiesDialog::NotePropertiesDialog(Node *p_node, QWidget *p_parent)\n    : ScrollDialog(p_parent), m_node(p_node) {\n  Q_ASSERT(m_node);\n  setupUI();\n\n  LineEdit::selectBaseName(m_infoWidget->getNameLineEdit());\n\n  m_infoWidget->getNameLineEdit()->setFocus();\n}\n\nvoid NotePropertiesDialog::setupUI() {\n  setupNodeInfoWidget(this);\n  setCentralWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"%1 Properties\").arg(m_node->getName()));\n}\n\nvoid NotePropertiesDialog::setupNodeInfoWidget(QWidget *p_parent) {\n  m_infoWidget = new NodeInfoWidget(m_node, p_parent);\n}\n\nbool NotePropertiesDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  return valid;\n}\n\nbool NotePropertiesDialog::validateNameInput(QString &p_msg) {\n  p_msg.clear();\n\n  auto name = m_infoWidget->getName();\n  if (name.isEmpty() || !PathUtils::isLegalFileName(name)) {\n    p_msg = tr(\"Please specify a valid name for the note.\");\n    return false;\n  }\n\n  Q_ASSERT(m_infoWidget->getParentNode() == m_node->getParent());\n  if (!m_node->canRename(name)) {\n    p_msg = tr(\"Name conflicts with existing note.\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid NotePropertiesDialog::acceptedButtonClicked() {\n  if (validateInputs() && saveNoteProperties()) {\n    accept();\n  }\n}\n\nbool NotePropertiesDialog::saveNoteProperties() {\n  try {\n    if (m_infoWidget->getName() != m_node->getName()) {\n      // Close the node first.\n      auto event = QSharedPointer<Event>::create();\n      emit VNoteX::getInst().nodeAboutToRename(m_node, event);\n      if (!event->m_response.toBool()) {\n        return false;\n      }\n\n      m_node->updateName(m_infoWidget->getName());\n    }\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to save note (%1) in (%2) (%3).\")\n                      .arg(m_node->getName(), m_node->getNotebook()->getName(), p_e.what());\n    qCritical() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/notepropertiesdialog.h",
    "content": "#ifndef NOTEPROPERTIESDIALOG_H\n#define NOTEPROPERTIESDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass Node;\nclass NodeInfoWidget;\n\nclass NotePropertiesDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  NotePropertiesDialog(Node *p_node, QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupNodeInfoWidget(QWidget *p_parent);\n\n  bool validateNameInput(QString &p_msg);\n\n  bool saveNoteProperties();\n\n  bool validateInputs();\n\n  NodeInfoWidget *m_infoWidget = nullptr;\n\n  Node *m_node = nullptr;\n};\n} // namespace vnotex\n\n#endif // NOTEPROPERTIESDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/notetemplateselector.cpp",
    "content": "#include \"notetemplateselector.h\"\n\n#include <QComboBox>\n#include <QHBoxLayout>\n#include <QPlainTextEdit>\n#include <QPushButton>\n#include <QVBoxLayout>\n\n#include <core/exception.h>\n#include <core/templatemgr.h>\n#include <utils/fileutils.h>\n#include <utils/widgetutils.h>\n\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nNoteTemplateSelector::NoteTemplateSelector(QWidget *p_parent) : QWidget(p_parent) { setupUI(); }\n\nvoid NoteTemplateSelector::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  auto selectorLayout = new QHBoxLayout();\n  mainLayout->addLayout(selectorLayout);\n\n  setupTemplateComboBox(this);\n  selectorLayout->addWidget(m_templateComboBox, 1);\n\n  auto manageBtn = new QPushButton(tr(\"Manage\"), this);\n  selectorLayout->addWidget(manageBtn);\n  connect(manageBtn, &QPushButton::clicked, this, []() {\n    WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(TemplateMgr::getInst().getTemplateFolder()));\n  });\n\n  m_templateTextEdit = WidgetsFactory::createPlainTextConsole(this);\n  mainLayout->addWidget(m_templateTextEdit);\n  m_templateTextEdit->hide();\n}\n\nvoid NoteTemplateSelector::setupTemplateComboBox(QWidget *p_parent) {\n  m_templateComboBox = WidgetsFactory::createComboBox(p_parent);\n\n  // None.\n  m_templateComboBox->addItem(tr(\"None\"), \"\");\n\n  int idx = 1;\n  auto templates = TemplateMgr::getInst().getTemplates();\n  for (const auto &temp : templates) {\n    m_templateComboBox->addItem(temp, temp);\n    m_templateComboBox->setItemData(idx++, temp, Qt::ToolTipRole);\n  }\n\n  m_templateComboBox->setCurrentIndex(0);\n\n  connect(m_templateComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n          &NoteTemplateSelector::updateCurrentTemplate);\n}\n\nvoid NoteTemplateSelector::updateCurrentTemplate() {\n  m_templateContent.clear();\n  m_templateTextEdit->clear();\n\n  auto templateName = m_templateComboBox->currentData().toString();\n  if (templateName.isEmpty()) {\n    m_templateTextEdit->hide();\n    emit templateChanged();\n    return;\n  }\n\n  const auto filePath = TemplateMgr::getInst().getTemplateFilePath(templateName);\n  try {\n    m_templateContent = FileUtils::readTextFile(filePath);\n    m_templateTextEdit->setPlainText(m_templateContent);\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to load template (%1) (%2).\").arg(filePath, p_e.what());\n    qCritical() << msg;\n    m_templateTextEdit->setPlainText(msg);\n  }\n  m_templateTextEdit->show();\n  emit templateChanged();\n}\n\nQString NoteTemplateSelector::getCurrentTemplate() const {\n  return m_templateComboBox->currentData().toString();\n}\n\nbool NoteTemplateSelector::setCurrentTemplate(const QString &p_template) {\n  int idx = m_templateComboBox->findData(p_template);\n  if (idx != -1) {\n    m_templateComboBox->setCurrentIndex(idx);\n    return true;\n  } else {\n    return false;\n  }\n}\n\nconst QString &NoteTemplateSelector::getTemplateContent() const { return m_templateContent; }\n"
  },
  {
    "path": "src/widgets/dialogs/notetemplateselector.h",
    "content": "#ifndef NOTETEMPLATESELECTOR_H\n#define NOTETEMPLATESELECTOR_H\n\n#include <QWidget>\n\nclass QComboBox;\nclass QPlainTextEdit;\n\nnamespace vnotex {\nclass NoteTemplateSelector : public QWidget {\n  Q_OBJECT\npublic:\n  explicit NoteTemplateSelector(QWidget *p_parent = nullptr);\n\n  QString getCurrentTemplate() const;\n  bool setCurrentTemplate(const QString &p_template);\n\n  const QString &getTemplateContent() const;\n\nsignals:\n  void templateChanged();\n\nprivate:\n  void setupUI();\n\n  void setupTemplateComboBox(QWidget *p_parent);\n\n  void updateCurrentTemplate();\n\n  QComboBox *m_templateComboBox = nullptr;\n\n  QPlainTextEdit *m_templateTextEdit = nullptr;\n\n  QString m_templateContent;\n};\n} // namespace vnotex\n\n#endif // NOTETEMPLATESELECTOR_H\n"
  },
  {
    "path": "src/widgets/dialogs/renametagdialog.cpp",
    "content": "#include \"renametagdialog.h\"\r\n\r\n#include <QFormLayout>\r\n\r\n#include <notebook/tagi.h>\r\n#include <utils/widgetutils.h>\r\n\r\n#include \"../lineeditwithsnippet.h\"\r\n#include \"../widgetsfactory.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nRenameTagDialog::RenameTagDialog(TagI *p_tagI, const QString &p_name, QWidget *p_parent)\r\n    : ScrollDialog(p_parent), m_tagI(p_tagI), m_tagName(p_name) {\r\n  setupUI();\r\n\r\n  m_nameLineEdit->setFocus();\r\n  WidgetUtils::selectBaseName(m_nameLineEdit);\r\n}\r\n\r\nvoid RenameTagDialog::setupUI() {\r\n  auto mainWidget = new QWidget(this);\r\n  setCentralWidget(mainWidget);\r\n\r\n  auto mainLayout = WidgetsFactory::createFormLayout(mainWidget);\r\n\r\n  m_nameLineEdit = WidgetsFactory::createLineEditWithSnippet(m_tagName, mainWidget);\r\n  mainLayout->addRow(tr(\"Name:\"), m_nameLineEdit);\r\n\r\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\r\n\r\n  setWindowTitle(tr(\"Rename Tag\"));\r\n}\r\n\r\nbool RenameTagDialog::validateInputs() {\r\n  bool valid = true;\r\n  QString msg;\r\n\r\n  auto name = getTagName();\r\n  if (name == m_tagName) {\r\n    return true;\r\n  }\r\n\r\n  if (!Tag::isValidName(name)) {\r\n    valid = false;\r\n    msg = tr(\"Please specify a valid name for the tag.\");\r\n  } else if (m_tagI->findTag(name)) {\r\n    valid = false;\r\n    msg = tr(\"Name conflicts with existing tag.\");\r\n  }\r\n\r\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\r\n                                : ScrollDialog::InformationLevel::Error);\r\n  return valid;\r\n}\r\n\r\nbool RenameTagDialog::renameTag() {\r\n  if (!m_tagI->renameTag(m_tagName, getTagName())) {\r\n    setInformationText(tr(\"Failed to rename tag (%1) to (%2).\").arg(m_tagName, getTagName()),\r\n                       ScrollDialog::InformationLevel::Error);\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nvoid RenameTagDialog::acceptedButtonClicked() {\r\n  if (validateInputs() && renameTag()) {\r\n    accept();\r\n  }\r\n}\r\n\r\nQString RenameTagDialog::getTagName() const { return m_nameLineEdit->evaluatedText(); }\r\n"
  },
  {
    "path": "src/widgets/dialogs/renametagdialog.h",
    "content": "#ifndef RENAMETAGDIALOG_H\r\n#define RENAMETAGDIALOG_H\r\n\r\n#include \"scrolldialog.h\"\r\n\r\nnamespace vnotex {\r\nclass TagI;\r\nclass LineEditWithSnippet;\r\n\r\nclass RenameTagDialog : public ScrollDialog {\r\n  Q_OBJECT\r\npublic:\r\n  RenameTagDialog(TagI *p_tagI, const QString &p_name, QWidget *p_parent = nullptr);\r\n\r\n  QString getTagName() const;\r\n\r\nprotected:\r\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\r\n\r\nprivate:\r\n  void setupUI();\r\n\r\n  bool validateInputs();\r\n\r\n  bool renameTag();\r\n\r\n  TagI *m_tagI = nullptr;\r\n\r\n  const QString m_tagName;\r\n\r\n  LineEditWithSnippet *m_nameLineEdit = nullptr;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // RENAMETAGDIALOG_H\r\n"
  },
  {
    "path": "src/widgets/dialogs/scrolldialog.cpp",
    "content": "#include \"scrolldialog.h\"\n\n#include <QApplication>\n#include <QCoreApplication>\n#include <QDebug>\n#include <QPlainTextEdit>\n#include <QPushButton>\n#include <QScrollArea>\n#include <QScrollBar>\n#include <QTimer>\n#include <QVBoxLayout>\n\n#include <utils/widgetutils.h>\n\n#include <widgets/propertydefs.h>\n\nusing namespace vnotex;\n\nScrollDialog::ScrollDialog(QWidget *p_parent, Qt::WindowFlags p_flags) : Dialog(p_parent, p_flags) {\n  m_scrollArea = new QScrollArea(this);\n  m_scrollArea->setWidgetResizable(true);\n  m_layout->addWidget(m_scrollArea);\n}\n\nvoid ScrollDialog::setCentralWidget(QWidget *p_widget) {\n  Q_ASSERT(!m_centralWidget && p_widget);\n  m_centralWidget = p_widget;\n  m_centralWidget->setProperty(PropertyDefs::c_dialogCentralWidget, true);\n  m_scrollArea->setWidget(p_widget);\n}\n\nvoid ScrollDialog::addBottomWidget(QWidget *p_widget) {\n  m_layout->insertWidget(m_layout->indexOf(m_scrollArea) + 1, p_widget);\n}\n\nvoid ScrollDialog::showEvent(QShowEvent *p_event) {\n  Dialog::showEvent(p_event);\n\n  resizeToHideScrollBarLater(false, true);\n}\n\nvoid ScrollDialog::resizeToHideScrollBarLater(bool p_vertical, bool p_horizontal) {\n  WidgetUtils::resizeToHideScrollBarLater(m_scrollArea, p_vertical, p_horizontal);\n}\n"
  },
  {
    "path": "src/widgets/dialogs/scrolldialog.h",
    "content": "#ifndef SCROLLDIALOG_H\n#define SCROLLDIALOG_H\n\n#include \"dialog.h\"\n\nclass QScrollArea;\n\nnamespace vnotex {\nclass ScrollDialog : public Dialog {\n  Q_OBJECT\npublic:\n  ScrollDialog(QWidget *p_parent = nullptr, Qt::WindowFlags p_flags = Qt::WindowFlags());\n\n  void resizeToHideScrollBarLater(bool p_vertical, bool p_horizontal);\n\nprotected:\n  void setCentralWidget(QWidget *p_widget) Q_DECL_OVERRIDE;\n\n  void addBottomWidget(QWidget *p_widget) Q_DECL_OVERRIDE;\n\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  QScrollArea *m_scrollArea = nullptr;\n};\n} // namespace vnotex\n\n#endif // SCROLLDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/selectdialog.cpp",
    "content": "#include \"selectdialog.h\"\n\n#include <QtWidgets>\n\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n#include <widgets/listwidget.h>\n\nusing namespace vnotex;\n\nconst QChar SelectDialog::c_cancelShortcut = QLatin1Char('z');\n\nSelectDialog::SelectDialog(const QString &p_title, QWidget *p_parent)\n    : SelectDialog(p_title, QString(), p_parent) {}\n\nSelectDialog::SelectDialog(const QString &p_title, const QString &p_text, QWidget *p_parent)\n    : QDialog(p_parent) {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  m_shortcutIconForeground =\n      themeMgr.paletteColor(QStringLiteral(\"widgets#quickselector#item_icon#fg\"));\n  m_shortcutIconBorder =\n      themeMgr.paletteColor(QStringLiteral(\"widgets#quickselector#item_icon#border\"));\n\n  setupUI(p_title, p_text);\n}\n\nvoid SelectDialog::setupUI(const QString &p_title, const QString &p_text) {\n  auto mainLayout = new QVBoxLayout(this);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  if (!p_text.isNull()) {\n    m_label = new QLabel(p_text, this);\n    mainLayout->addWidget(m_label);\n  }\n\n  m_list = new ListWidget(this);\n  m_list->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);\n  m_list->setSelectionMode(QAbstractItemView::SingleSelection);\n  m_list->setAttribute(Qt::WA_MacShowFocusRect, false);\n  connect(m_list, &ListWidget::itemActivated, this, &SelectDialog::selectionChosen);\n\n  m_list->installEventFilter(this);\n\n  // Add cancel item.\n  {\n    const auto icon =\n        IconUtils::drawTextIcon(c_cancelShortcut, m_shortcutIconForeground, m_shortcutIconBorder);\n    QListWidgetItem *cancelItem = new QListWidgetItem(icon, tr(\"Cancel\"));\n    cancelItem->setData(Qt::UserRole, CANCEL_ID);\n\n    m_shortcuts.insert(c_cancelShortcut, cancelItem);\n\n    m_list->addItem(cancelItem);\n    m_list->setCurrentRow(0);\n  }\n\n  mainLayout->addWidget(m_list);\n\n  setWindowTitle(p_title);\n}\n\nvoid SelectDialog::addSelection(const QString &p_selectStr, int p_selectID) {\n  Q_ASSERT(p_selectID >= 0);\n\n  QChar shortcut;\n  if (m_nextShortcut < c_cancelShortcut) {\n    shortcut = m_nextShortcut;\n    m_nextShortcut = QChar(m_nextShortcut.toLatin1() + 1);\n  }\n  const auto icon =\n      IconUtils::drawTextIcon(shortcut, m_shortcutIconForeground, m_shortcutIconBorder);\n  QListWidgetItem *item = new QListWidgetItem(icon, p_selectStr);\n  item->setData(Qt::UserRole, p_selectID);\n\n  if (!shortcut.isNull()) {\n    m_shortcuts.insert(shortcut, item);\n  }\n\n  m_list->insertItem(m_list->count() - 1, item);\n\n  m_list->setCurrentRow(0);\n}\n\nvoid SelectDialog::selectionChosen(QListWidgetItem *p_item) {\n  m_choice = p_item->data(Qt::UserRole).toInt();\n  if (m_choice == CANCEL_ID) {\n    reject();\n  } else {\n    accept();\n  }\n}\n\nint SelectDialog::getSelection() const { return m_choice; }\n\nvoid SelectDialog::updateSize() {\n  Q_ASSERT(m_list->count() > 0);\n\n  int height = 0;\n  for (int i = 0; i < m_list->count(); ++i) {\n    height += m_list->sizeHintForRow(i);\n  }\n\n  height += 2 * m_list->count();\n  int wid = width();\n  m_list->resize(wid, height);\n  resize(wid, height);\n}\n\nvoid SelectDialog::showEvent(QShowEvent *p_event) {\n  QDialog::showEvent(p_event);\n\n  updateSize();\n}\n\nvoid SelectDialog::keyPressEvent(QKeyEvent *p_event) {\n  if (WidgetUtils::processKeyEventLikeVi(m_list, p_event, this)) {\n    return;\n  }\n\n  QDialog::keyPressEvent(p_event);\n}\n\nbool SelectDialog::eventFilter(QObject *p_watched, QEvent *p_event) {\n  if (p_watched == m_list && p_event->type() == QEvent::KeyPress) {\n    auto keyEve = static_cast<QKeyEvent *>(p_event);\n    // Handle shortcuts.\n    if (keyEve->modifiers() == Qt::NoModifier) {\n      auto keych = Utils::keyToChar(keyEve->key(), true);\n      if (keych.isLetter()) {\n        auto it = m_shortcuts.find(keych);\n        if (it != m_shortcuts.end()) {\n          selectionChosen(it.value());\n        }\n\n        return true;\n      }\n    }\n  }\n\n  return QDialog::eventFilter(p_watched, p_event);\n}\n"
  },
  {
    "path": "src/widgets/dialogs/selectdialog.h",
    "content": "#ifndef SELECTDIALOG_H\n#define SELECTDIALOG_H\n\n#include <QDialog>\n#include <QMap>\n\nclass QPushButton;\nclass QMouseEvent;\nclass QListWidget;\nclass QListWidgetItem;\nclass QShowEvent;\nclass QKeyEvent;\nclass QLabel;\n\nnamespace vnotex {\nclass SelectDialog : public QDialog {\n  Q_OBJECT\npublic:\n  SelectDialog(const QString &p_title, QWidget *p_parent = nullptr);\n\n  SelectDialog(const QString &p_title, const QString &p_text, QWidget *p_parent = nullptr);\n\n  // @p_selectID should >= 0.\n  void addSelection(const QString &p_selectStr, int p_selectID);\n\n  int getSelection() const;\n\n  bool eventFilter(QObject *p_watched, QEvent *p_event) Q_DECL_OVERRIDE;\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void selectionChosen(QListWidgetItem *p_item);\n\nprivate:\n  enum { CANCEL_ID = -1 };\n\n  void setupUI(const QString &p_title, const QString &p_text = QString());\n\n  void updateSize();\n\n  int m_choice = CANCEL_ID;\n\n  QLabel *m_label = nullptr;\n\n  QListWidget *m_list = nullptr;\n\n  QMap<QChar, QListWidgetItem *> m_shortcuts;\n\n  QString m_shortcutIconForeground;\n\n  QString m_shortcutIconBorder;\n\n  QChar m_nextShortcut = QLatin1Char('a');\n\n  static const QChar c_cancelShortcut;\n};\n} // namespace vnotex\n\n#endif // SELECTDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/selectionitemwidget.cpp",
    "content": "#include \"selectionitemwidget.h\"\n\n#include <QCheckBox>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QMouseEvent>\n\n#include \"global.h\"\n\nusing namespace vnotex;\n\nSelectionItemWidget::SelectionItemWidget(const QIcon &p_icon, const QString &p_text,\n                                         QWidget *p_parent)\n    : QWidget(p_parent) {\n  setupUI(p_text);\n\n  setIcon(p_icon);\n}\n\nSelectionItemWidget::SelectionItemWidget(const QString &p_text, QWidget *p_parent)\n    : QWidget(p_parent) {\n  setupUI(p_text);\n}\n\nvoid SelectionItemWidget::setupUI(const QString &p_text) {\n  QHBoxLayout *mainLayout = new QHBoxLayout(this);\n  mainLayout->setContentsMargins(CONTENTS_MARGIN, 0, 0, 0);\n\n  m_checkBox = new QCheckBox(this);\n  mainLayout->addWidget(m_checkBox);\n  connect(m_checkBox, &QCheckBox::stateChanged, this, &SelectionItemWidget::checkStateChanged);\n\n  m_iconLabel = new QLabel(this);\n  m_iconLabel->setVisible(false);\n  mainLayout->addWidget(m_iconLabel);\n\n  m_textLabel = new QLabel(p_text, this);\n  mainLayout->addWidget(m_textLabel);\n\n  mainLayout->addStretch();\n}\n\nbool SelectionItemWidget::isChecked() const { return m_checkBox->isChecked(); }\n\nconst QVariant &SelectionItemWidget::getData() const { return m_data; }\n\nvoid SelectionItemWidget::setChecked(bool p_checked) { m_checkBox->setChecked(p_checked); }\n\nvoid SelectionItemWidget::setToolTip(const QString &p_tip) { m_textLabel->setToolTip(p_tip); }\n\nvoid SelectionItemWidget::setData(const QVariant &p_data) { m_data = p_data; }\n\nvoid SelectionItemWidget::setIcon(const QIcon &p_icon) {\n  if (!p_icon.isNull()) {\n    int iconHeight = qMax(m_textLabel->minimumSizeHint().height(), 16);\n    auto pixmap = p_icon.pixmap(QSize(iconHeight, iconHeight));\n    m_iconLabel->setPixmap(pixmap);\n  }\n\n  m_iconLabel->setVisible(!p_icon.isNull());\n}\n\nvoid SelectionItemWidget::mouseDoubleClickEvent(QMouseEvent *p_event) {\n  p_event->accept();\n  setChecked(!isChecked());\n}\n"
  },
  {
    "path": "src/widgets/dialogs/selectionitemwidget.h",
    "content": "#ifndef SELECTIONITEMWIDGET_H\n#define SELECTIONITEMWIDGET_H\n\n#include <QVariant>\n#include <QWidget>\n\nclass QCheckBox;\nclass QLabel;\n\nnamespace vnotex {\n// Tree/List item widget with checkbox.\nclass SelectionItemWidget : public QWidget {\n  Q_OBJECT\npublic:\n  SelectionItemWidget(const QIcon &p_icon, const QString &p_text, QWidget *p_parent = nullptr);\n\n  SelectionItemWidget(const QString &p_text, QWidget *p_parent = nullptr);\n\n  bool isChecked() const;\n  void setChecked(bool p_checked);\n\n  const QVariant &getData() const;\n  void setData(const QVariant &p_data);\n\n  void setToolTip(const QString &p_tip);\n\n  void setIcon(const QIcon &p_icon);\n\nsignals:\n  // Emit when item's check state changed.\n  void checkStateChanged(int p_state);\n\nprotected:\n  void mouseDoubleClickEvent(QMouseEvent *p_event);\n\nprivate:\n  void setupUI(const QString &p_text);\n\n  QCheckBox *m_checkBox = nullptr;\n\n  QLabel *m_iconLabel = nullptr;\n\n  QLabel *m_textLabel = nullptr;\n\n  QVariant m_data;\n};\n} // namespace vnotex\n\n#endif // SELECTIONITEMWIDGET_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/appearancepage.cpp",
    "content": "#include \"appearancepage.h\"\n\n#include <QCheckBox>\n#include <QDockWidget>\n#include <QFormLayout>\n#include <QSpinBox>\n#include <QVBoxLayout>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/sessionconfig.h>\n#include <core/vnotex.h>\n#include <core/widgetconfig.h>\n#include <utils/widgetutils.h>\n#include <widgets/mainwindow.h>\n#include <widgets/propertydefs.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nAppearancePage::AppearancePage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid AppearancePage::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n\n  {\n    const QString label(tr(\"System title bar\"));\n    m_systemTitleBarCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_systemTitleBarCheckBox->setToolTip(tr(\"Use system title bar\"));\n    mainLayout->addRow(m_systemTitleBarCheckBox);\n    addSearchItem(label, m_systemTitleBarCheckBox->toolTip(), m_systemTitleBarCheckBox);\n    connect(m_systemTitleBarCheckBox, &QCheckBox::stateChanged, this,\n            &AppearancePage::pageIsChangedWithRestartNeeded);\n  }\n\n  {\n    m_toolBarIconSizeSpinBox = WidgetsFactory::createSpinBox(this);\n    m_toolBarIconSizeSpinBox->setToolTip(tr(\"Icon size of the main window tool bar\"));\n\n    m_toolBarIconSizeSpinBox->setRange(1, 48);\n    m_toolBarIconSizeSpinBox->setSingleStep(1);\n\n    const QString label(tr(\"Main tool bar icon size:\"));\n    mainLayout->addRow(label, m_toolBarIconSizeSpinBox);\n    addSearchItem(label, m_toolBarIconSizeSpinBox->toolTip(), m_toolBarIconSizeSpinBox);\n    connect(m_toolBarIconSizeSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this,\n            &AppearancePage::pageIsChangedWithRestartNeeded);\n  }\n\n  {\n    const auto &docks = VNoteX::getInst().getMainWindow()->getDocks();\n    Q_ASSERT(!docks.isEmpty());\n    m_keepDocksExpandingContentArea.resize(docks.size());\n\n    auto layout = new QVBoxLayout();\n\n    for (int i = 0; i < docks.size(); ++i) {\n      m_keepDocksExpandingContentArea[i].first = WidgetsFactory::createCheckBox(\n          docks[i]->property(PropertyDefs::c_dockWidgetTitle).toString(), this);\n      m_keepDocksExpandingContentArea[i].second = docks[i]->objectName();\n      layout->addWidget(m_keepDocksExpandingContentArea[i].first);\n      connect(m_keepDocksExpandingContentArea[i].first, &QCheckBox::stateChanged, this,\n              &AppearancePage::pageIsChanged);\n    }\n\n    const QString label(tr(\"Dock widgets kept when expanding content area:\"));\n    mainLayout->addRow(label, layout);\n    addSearchItem(label, label, m_keepDocksExpandingContentArea.first().first);\n  }\n}\n\nvoid AppearancePage::loadInternal() {\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();\n\n  if (m_systemTitleBarCheckBox) {\n    m_systemTitleBarCheckBox->setChecked(sessionConfig.getSystemTitleBarEnabled());\n  }\n\n  m_toolBarIconSizeSpinBox->setValue(coreConfig.getToolBarIconSize());\n\n  {\n    const auto &docks = widgetConfig.getMainWindowKeepDocksExpandingContentArea();\n    for (const auto &cb : m_keepDocksExpandingContentArea) {\n      if (docks.contains(cb.second)) {\n        cb.first->setChecked(true);\n      }\n    }\n  }\n}\n\nbool AppearancePage::saveInternal() {\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();\n\n  if (m_systemTitleBarCheckBox) {\n    sessionConfig.setSystemTitleBarEnabled(m_systemTitleBarCheckBox->isChecked());\n  }\n\n  coreConfig.setToolBarIconSize(m_toolBarIconSizeSpinBox->value());\n\n  {\n    QStringList docks;\n    for (const auto &cb : m_keepDocksExpandingContentArea) {\n      if (cb.first->isChecked()) {\n        docks << cb.second;\n      }\n    }\n    widgetConfig.setMainWindowKeepDocksExpandingContentArea(docks);\n  }\n\n  return true;\n}\n\nQString AppearancePage::title() const { return tr(\"Appearance\"); }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/appearancepage.h",
    "content": "#ifndef APPEARANCEPAGE_H\n#define APPEARANCEPAGE_H\n\n#include \"settingspage.h\"\n\n#include <QPair>\n#include <QVector>\n\nclass QCheckBox;\nclass QSpinBox;\n\nnamespace vnotex {\nclass AppearancePage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit AppearancePage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QCheckBox *m_systemTitleBarCheckBox = nullptr;\n\n  QSpinBox *m_toolBarIconSizeSpinBox = nullptr;\n\n  // <CheckBox, ObjectName>.\n  QVector<QPair<QCheckBox *, QString>> m_keepDocksExpandingContentArea;\n};\n} // namespace vnotex\n\n#endif // APPEARANCEPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/editorpage.cpp",
    "content": "#include \"editorpage.h\"\n\n#include <QComboBox>\n#include <QFormLayout>\n#include <QHBoxLayout>\n#include <QPushButton>\n#include <QSpinBox>\n#include <QTimer>\n#include <QUrl>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <utils/widgetutils.h>\n#include <vtextedit/spellchecker.h>\n#include <widgets/messageboxhelper.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nEditorPage::EditorPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid EditorPage::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n\n  {\n    m_autoSavePolicyComboBox = WidgetsFactory::createComboBox(this);\n    m_autoSavePolicyComboBox->setToolTip(tr(\"Auto save policy\"));\n\n    m_autoSavePolicyComboBox->addItem(tr(\"None\"), (int)EditorConfig::AutoSavePolicy::None);\n    m_autoSavePolicyComboBox->addItem(tr(\"Auto Save\"), (int)EditorConfig::AutoSavePolicy::AutoSave);\n    m_autoSavePolicyComboBox->addItem(tr(\"Backup File\"),\n                                      (int)EditorConfig::AutoSavePolicy::BackupFile);\n\n    const QString label(tr(\"Auto save policy:\"));\n    mainLayout->addRow(label, m_autoSavePolicyComboBox);\n    addSearchItem(label, m_autoSavePolicyComboBox->toolTip(), m_autoSavePolicyComboBox);\n    connect(m_autoSavePolicyComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &EditorPage::pageIsChanged);\n  }\n\n  {\n    m_lineEndingComboBox = WidgetsFactory::createComboBox(this);\n    m_lineEndingComboBox->setToolTip(tr(\"Line ending\"));\n\n    m_lineEndingComboBox->addItem(tr(\"Follow Platform\"), (int)LineEndingPolicy::Platform);\n    m_lineEndingComboBox->addItem(tr(\"Follow File\"), (int)LineEndingPolicy::File);\n    m_lineEndingComboBox->addItem(tr(\"LF (Linux/macOS)\"), (int)LineEndingPolicy::LF);\n    m_lineEndingComboBox->addItem(tr(\"CR LF (Windows)\"), (int)LineEndingPolicy::CRLF);\n    m_lineEndingComboBox->addItem(tr(\"CR\"), (int)LineEndingPolicy::CR);\n\n    const QString label(tr(\"Line ending:\"));\n    mainLayout->addRow(label, m_lineEndingComboBox);\n    addSearchItem(label, m_lineEndingComboBox->toolTip(), m_lineEndingComboBox);\n    connect(m_lineEndingComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &EditorPage::pageIsChanged);\n  }\n\n  {\n    m_toolBarIconSizeSpinBox = WidgetsFactory::createSpinBox(this);\n    m_toolBarIconSizeSpinBox->setToolTip(tr(\"Icon size of the editor tool bar\"));\n\n    m_toolBarIconSizeSpinBox->setRange(1, 48);\n    m_toolBarIconSizeSpinBox->setSingleStep(1);\n\n    const QString label(tr(\"Tool bar icon size:\"));\n    mainLayout->addRow(label, m_toolBarIconSizeSpinBox);\n    addSearchItem(label, m_toolBarIconSizeSpinBox->toolTip(), m_toolBarIconSizeSpinBox);\n    connect(m_toolBarIconSizeSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this,\n            &EditorPage::pageIsChanged);\n  }\n\n  {\n    auto lineLayout = new QHBoxLayout();\n\n    m_spellCheckDictComboBox = WidgetsFactory::createComboBox(this);\n    m_spellCheckDictComboBox->setToolTip(tr(\"Default dictionary used for spell check\"));\n    lineLayout->addWidget(m_spellCheckDictComboBox);\n\n    {\n      auto dicts = vte::SpellChecker::getInst().availableDictionaries();\n      for (auto it = dicts.constBegin(); it != dicts.constEnd(); ++it) {\n        m_spellCheckDictComboBox->addItem(it.key(), it.value());\n      }\n    }\n\n    auto addBtn = new QPushButton(tr(\"Add Dictionary\"), this);\n    connect(addBtn, &QPushButton::clicked, this, [this]() {\n      const auto dictsFolder = ConfigMgr::getInst().getUserDictsFolder();\n      MessageBoxHelper::notify(\n          MessageBoxHelper::Information,\n          tr(\"VNote uses [Hunspell](http://hunspell.github.io/) for spell check.\"),\n          tr(\"Please download Hunspell's dictionaries, put them under (%1) and restart VNote.\")\n              .arg(dictsFolder),\n          QString(), this);\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(dictsFolder));\n    });\n    lineLayout->addWidget(addBtn);\n\n    lineLayout->addStretch();\n\n    const QString label(tr(\"Spell check dictionary:\"));\n    mainLayout->addRow(label, lineLayout);\n    addSearchItem(label, m_spellCheckDictComboBox->toolTip(), m_spellCheckDictComboBox);\n    connect(m_spellCheckDictComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &EditorPage::pageIsChanged);\n  }\n}\n\nvoid EditorPage::loadInternal() {\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  {\n    int idx =\n        m_autoSavePolicyComboBox->findData(static_cast<int>(editorConfig.getAutoSavePolicy()));\n    Q_ASSERT(idx != -1);\n    m_autoSavePolicyComboBox->setCurrentIndex(idx);\n  }\n\n  {\n    int idx = m_lineEndingComboBox->findData(static_cast<int>(editorConfig.getLineEndingPolicy()));\n    Q_ASSERT(idx != -1);\n    m_lineEndingComboBox->setCurrentIndex(idx);\n  }\n\n  m_toolBarIconSizeSpinBox->setValue(editorConfig.getToolBarIconSize());\n\n  {\n    int idx = m_spellCheckDictComboBox->findData(editorConfig.getSpellCheckDefaultDictionary());\n    m_spellCheckDictComboBox->setCurrentIndex(idx == -1 ? 0 : idx);\n  }\n}\n\nbool EditorPage::saveInternal() {\n  auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  {\n    auto policy = m_autoSavePolicyComboBox->currentData().toInt();\n    editorConfig.setAutoSavePolicy(static_cast<EditorConfig::AutoSavePolicy>(policy));\n  }\n\n  {\n    auto ending = m_lineEndingComboBox->currentData().toInt();\n    editorConfig.setLineEndingPolicy(static_cast<LineEndingPolicy>(ending));\n  }\n\n  editorConfig.setToolBarIconSize(m_toolBarIconSizeSpinBox->value());\n\n  {\n    editorConfig.setSpellCheckDefaultDictionary(m_spellCheckDictComboBox->currentData().toString());\n  }\n\n  notifyEditorConfigChange();\n\n  return true;\n}\n\nQString EditorPage::title() const { return tr(\"Editor\"); }\n\nvoid EditorPage::notifyEditorConfigChange() {\n  static QTimer *timer = nullptr;\n  if (!timer) {\n    timer = new QTimer();\n    timer->setSingleShot(true);\n    timer->setInterval(1000);\n    auto &configMgr = ConfigMgr::getInst();\n    connect(timer, &QTimer::timeout, &configMgr, &ConfigMgr::editorConfigChanged);\n  }\n\n  timer->start();\n}\n"
  },
  {
    "path": "src/widgets/dialogs/settings/editorpage.h",
    "content": "#ifndef EDITORPAGE_H\n#define EDITORPAGE_H\n\n#include \"settingspage.h\"\n\nclass QComboBox;\nclass QSpinBox;\n\nnamespace vnotex {\nclass EditorPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit EditorPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\n  // Should be called by all editors setting page when saved.\n  static void notifyEditorConfigChange();\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QComboBox *m_autoSavePolicyComboBox = nullptr;\n\n  QSpinBox *m_toolBarIconSizeSpinBox = nullptr;\n\n  QComboBox *m_spellCheckDictComboBox = nullptr;\n\n  QComboBox *m_lineEndingComboBox = nullptr;\n};\n} // namespace vnotex\n\n#endif // EDITORPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/fileassociationpage.cpp",
    "content": "#include \"fileassociationpage.h\"\n\n#include <QFormLayout>\n#include <QGroupBox>\n#include <QMap>\n#include <QVBoxLayout>\n\n#include <buffer/filetypehelper.h>\n#include <core/buffermgr.h>\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/sessionconfig.h>\n#include <core/vnotex.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n#include <widgets/lineedit.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nconst char *FileAssociationPage::c_nameProperty = \"name\";\n\nconst QChar FileAssociationPage::c_suffixSeparator = QLatin1Char(';');\n\nFileAssociationPage::FileAssociationPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid FileAssociationPage::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n\n  m_builtInFileTypesBox = new QGroupBox(tr(\"Built-In File Types\"), this);\n  WidgetsFactory::createFormLayout(m_builtInFileTypesBox);\n  mainLayout->addWidget(m_builtInFileTypesBox);\n\n  m_externalProgramsBox = new QGroupBox(tr(\"External Programs\"), this);\n  WidgetsFactory::createFormLayout(m_externalProgramsBox);\n  mainLayout->addWidget(m_externalProgramsBox);\n\n  mainLayout->addStretch();\n}\n\nvoid FileAssociationPage::loadInternal() {\n  loadBuiltInTypesGroup(m_builtInFileTypesBox);\n\n  loadExternalProgramsGroup(m_externalProgramsBox);\n}\n\nbool FileAssociationPage::saveInternal() {\n  auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  QVector<CoreConfig::FileTypeSuffix> fileTypeSuffixes;\n\n  auto lineEdits = m_builtInFileTypesBox->findChildren<QLineEdit *>(QString());\n  lineEdits << m_externalProgramsBox->findChildren<QLineEdit *>(QString());\n  fileTypeSuffixes.reserve(lineEdits.size());\n  for (const auto lineEdit : lineEdits) {\n    auto name = lineEdit->property(c_nameProperty).toString();\n    if (name.isEmpty()) {\n      continue;\n    }\n    auto suffixes = lineEdit->text().split(c_suffixSeparator, Qt::SkipEmptyParts);\n    fileTypeSuffixes.push_back(CoreConfig::FileTypeSuffix(name, Utils::toLower(suffixes)));\n  }\n\n  coreConfig.setFileTypeSuffixes(fileTypeSuffixes);\n\n  FileTypeHelper::getInst().reload();\n\n  BufferMgr::updateSuffixToFileType(coreConfig.getFileTypeSuffixes());\n\n  return true;\n}\n\nQString FileAssociationPage::title() const { return tr(\"File Associations\"); }\n\nvoid FileAssociationPage::loadBuiltInTypesGroup(QGroupBox *p_box) {\n  auto layout = static_cast<QFormLayout *>(p_box->layout());\n  WidgetUtils::clearLayout(layout);\n\n  const auto &types = FileTypeHelper::getInst().getAllFileTypes();\n\n  for (const auto &ft : types) {\n    if (ft.m_type == FileType::Others) {\n      continue;\n    }\n\n    auto lineEdit = WidgetsFactory::createLineEdit(p_box);\n    layout->addRow(ft.m_displayName, lineEdit);\n    connect(lineEdit, &QLineEdit::textChanged, this, &FileAssociationPage::pageIsChanged);\n\n    lineEdit->setPlaceholderText(tr(\"Suffixes separated by ;\"));\n    lineEdit->setToolTip(tr(\"List of suffixes for this file type\"));\n    lineEdit->setProperty(c_nameProperty, ft.m_typeName);\n    lineEdit->setText(ft.m_suffixes.join(c_suffixSeparator));\n  }\n}\n\nvoid FileAssociationPage::loadExternalProgramsGroup(QGroupBox *p_box) {\n  auto layout = static_cast<QFormLayout *>(p_box->layout());\n  WidgetUtils::clearLayout(layout);\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n\n  QStringList names;\n  for (const auto &pro : sessionConfig.getExternalPrograms()) {\n    names.push_back(pro.m_name);\n  }\n\n  names << FileTypeHelper::s_systemDefaultProgram;\n\n  for (const auto &name : names) {\n    auto lineEdit = WidgetsFactory::createLineEdit(p_box);\n    layout->addRow(name, lineEdit);\n    connect(lineEdit, &QLineEdit::textChanged, this, &FileAssociationPage::pageIsChanged);\n\n    lineEdit->setPlaceholderText(tr(\"Suffixes separated by ;\"));\n    lineEdit->setToolTip(\n        tr(\"List of suffixes to open with external program (or system default program)\"));\n    lineEdit->setProperty(c_nameProperty, name);\n\n    auto suffixes = coreConfig.findFileTypeSuffix(name);\n    if (suffixes) {\n      lineEdit->setText(suffixes->join(c_suffixSeparator));\n    }\n  }\n}\n"
  },
  {
    "path": "src/widgets/dialogs/settings/fileassociationpage.h",
    "content": "#ifndef FILEASSOCIATIONPAGE_H\n#define FILEASSOCIATIONPAGE_H\n\n#include \"settingspage.h\"\n\nclass QGroupBox;\n\nnamespace vnotex {\nclass FileAssociationPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit FileAssociationPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void loadBuiltInTypesGroup(QGroupBox *p_box);\n\n  void loadExternalProgramsGroup(QGroupBox *p_box);\n\n  QGroupBox *m_builtInFileTypesBox = nullptr;\n\n  QGroupBox *m_externalProgramsBox = nullptr;\n\n  static const char *c_nameProperty;\n\n  static const QChar c_suffixSeparator;\n};\n} // namespace vnotex\n\n#endif // FILEASSOCIATIONPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/generalpage.cpp",
    "content": "#include \"generalpage.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QFormLayout>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/sessionconfig.h>\n#include <utils/widgetutils.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nGeneralPage::GeneralPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid GeneralPage::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n\n  {\n    m_localeComboBox = WidgetsFactory::createComboBox(this);\n    m_localeComboBox->setToolTip(tr(\"Interface language\"));\n\n    m_localeComboBox->addItem(tr(\"Default\"), QString());\n    for (const auto &loc : ConfigMgr::getInst().getCoreConfig().getAvailableLocales()) {\n      QLocale locale(loc);\n      m_localeComboBox->addItem(\n          QStringLiteral(\"%1 (%2)\").arg(locale.nativeLanguageName(), locale.nativeCountryName()),\n          loc);\n    }\n\n    const QString label(tr(\"Language:\"));\n    mainLayout->addRow(label, m_localeComboBox);\n    addSearchItem(label, m_localeComboBox->toolTip(), m_localeComboBox);\n    connect(m_localeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &GeneralPage::pageIsChangedWithRestartNeeded);\n  }\n\n#if defined(Q_OS_WIN)\n  {\n    m_openGLComboBox = WidgetsFactory::createComboBox(this);\n    m_openGLComboBox->setToolTip(tr(\"OpenGL implementation used to render application\"));\n\n    m_openGLComboBox->addItem(tr(\"None\"), SessionConfig::OpenGL::None);\n    m_openGLComboBox->addItem(tr(\"Desktop\"), SessionConfig::OpenGL::Desktop);\n    m_openGLComboBox->addItem(tr(\"OpenGL ES\"), SessionConfig::OpenGL::Angle);\n    m_openGLComboBox->addItem(tr(\"Software\"), SessionConfig::OpenGL::Software);\n\n    const QString label(tr(\"OpenGL:\"));\n    mainLayout->addRow(label, m_openGLComboBox);\n    addSearchItem(label, m_openGLComboBox->toolTip(), m_openGLComboBox);\n    connect(m_openGLComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &GeneralPage::pageIsChangedWithRestartNeeded);\n  }\n#endif\n\n#if !defined(Q_OS_MACOS)\n  {\n    const QString label(tr(\"Minimize to system tray\"));\n    m_systemTrayCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_systemTrayCheckBox->setToolTip(tr(\"Minimize to system tray when closed\"));\n    mainLayout->addRow(m_systemTrayCheckBox);\n    addSearchItem(label, m_systemTrayCheckBox->toolTip(), m_systemTrayCheckBox);\n    connect(m_systemTrayCheckBox, &QCheckBox::stateChanged, this, &GeneralPage::pageIsChanged);\n  }\n#endif\n\n  {\n    const QString label(tr(\"Recover last session on start\"));\n    m_recoverLastSessionCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_recoverLastSessionCheckBox->setToolTip(\n        tr(\"Recover last session (like buffers) on start of VNote\"));\n    mainLayout->addRow(m_recoverLastSessionCheckBox);\n    addSearchItem(label, m_recoverLastSessionCheckBox->toolTip(), m_recoverLastSessionCheckBox);\n    connect(m_recoverLastSessionCheckBox, &QCheckBox::stateChanged, this,\n            &GeneralPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Check for updates on start\"));\n    m_checkForUpdatesCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_checkForUpdatesCheckBox->setToolTip(tr(\"Check for updates on start of VNote\"));\n    mainLayout->addRow(m_checkForUpdatesCheckBox);\n    addSearchItem(label, m_checkForUpdatesCheckBox->toolTip(), m_checkForUpdatesCheckBox);\n    connect(m_checkForUpdatesCheckBox, &QCheckBox::stateChanged, this, &GeneralPage::pageIsChanged);\n  }\n}\n\nvoid GeneralPage::loadInternal() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n\n  {\n    int idx = m_localeComboBox->findData(coreConfig.getLocale());\n    Q_ASSERT(idx != -1);\n    m_localeComboBox->setCurrentIndex(idx);\n  }\n\n  if (m_openGLComboBox) {\n    int idx = m_openGLComboBox->findData(sessionConfig.getOpenGL());\n    Q_ASSERT(idx != -1);\n    m_openGLComboBox->setCurrentIndex(idx);\n  }\n\n  if (m_systemTrayCheckBox) {\n    int toTray = sessionConfig.getMinimizeToSystemTray();\n    m_systemTrayCheckBox->setChecked(toTray > 0);\n  }\n\n  m_recoverLastSessionCheckBox->setChecked(coreConfig.isRecoverLastSessionOnStartEnabled());\n\n  m_checkForUpdatesCheckBox->setChecked(coreConfig.isCheckForUpdatesOnStartEnabled());\n}\n\nbool GeneralPage::saveInternal() {\n  auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n\n  {\n    auto locale = m_localeComboBox->currentData().toString();\n    coreConfig.setLocale(locale);\n  }\n\n  if (m_openGLComboBox) {\n    int opt = m_openGLComboBox->currentData().toInt();\n    sessionConfig.setOpenGL(static_cast<SessionConfig::OpenGL>(opt));\n  }\n\n  if (m_systemTrayCheckBox) {\n    // This will override the -1 state. That is fine.\n    sessionConfig.setMinimizeToSystemTray(m_systemTrayCheckBox->isChecked());\n  }\n\n  coreConfig.setRecoverLastSessionOnStartEnabled(m_recoverLastSessionCheckBox->isChecked());\n\n  coreConfig.setCheckForUpdatesOnStartEnabled(m_checkForUpdatesCheckBox->isChecked());\n\n  return true;\n}\n\nQString GeneralPage::title() const { return tr(\"General\"); }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/generalpage.h",
    "content": "#ifndef GENERALPAGE_H\n#define GENERALPAGE_H\n\n#include \"settingspage.h\"\n\nclass QComboBox;\nclass QCheckBox;\n\nnamespace vnotex {\nclass GeneralPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit GeneralPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QComboBox *m_localeComboBox = nullptr;\n\n  QComboBox *m_openGLComboBox = nullptr;\n\n  QCheckBox *m_systemTrayCheckBox = nullptr;\n\n  QCheckBox *m_recoverLastSessionCheckBox = nullptr;\n\n  QCheckBox *m_checkForUpdatesCheckBox = nullptr;\n};\n} // namespace vnotex\n\n#endif // GENERALPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/imagehostpage.cpp",
    "content": "#include \"imagehostpage.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QFormLayout>\n#include <QGroupBox>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QLineEdit>\n#include <QPushButton>\n#include <QVBoxLayout>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <imagehost/imagehostmgr.h>\n#include <utils/widgetutils.h>\n#include <widgets/messageboxhelper.h>\n#include <widgets/widgetsfactory.h>\n\n#include \"editorpage.h\"\n#include \"newimagehostdialog.h\"\n\nusing namespace vnotex;\n\nImageHostPage::ImageHostPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid ImageHostPage::setupUI() {\n  m_mainLayout = new QVBoxLayout(this);\n\n  // New Image Host.\n  {\n    auto layout = new QHBoxLayout();\n    m_mainLayout->addLayout(layout);\n\n    auto newBtn = new QPushButton(tr(\"New Image Host\"), this);\n    connect(newBtn, &QPushButton::clicked, this, &ImageHostPage::newImageHost);\n    layout->addWidget(newBtn);\n    layout->addStretch();\n  }\n\n  auto box = setupGeneralBox(this);\n  m_mainLayout->addWidget(box);\n\n  m_mainLayout->addStretch();\n}\n\nQGroupBox *ImageHostPage::setupGeneralBox(QWidget *p_parent) {\n  auto box = new QGroupBox(tr(\"General\"), p_parent);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    // Add items in loadInternal().\n    m_defaultImageHostComboBox = WidgetsFactory::createComboBox(box);\n\n    const QString label(tr(\"Default image host:\"));\n    layout->addRow(label, m_defaultImageHostComboBox);\n    addSearchItem(label, m_defaultImageHostComboBox);\n    connect(m_defaultImageHostComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &ImageHostPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Clear obsolete images\"));\n    m_clearObsoleteImageCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_clearObsoleteImageCheckBox->setToolTip(\n        tr(\"Clear unused images at image host (based on current file only)\"));\n    layout->addRow(m_clearObsoleteImageCheckBox);\n    addSearchItem(label, m_clearObsoleteImageCheckBox->toolTip(), m_clearObsoleteImageCheckBox);\n    connect(m_clearObsoleteImageCheckBox, &QCheckBox::stateChanged, this,\n            &ImageHostPage::pageIsChanged);\n  }\n\n  return box;\n}\n\nvoid ImageHostPage::addWidgetToLayout(QWidget *p_widget) { m_mainLayout->addWidget(p_widget); }\n\nvoid ImageHostPage::loadInternal() {\n  const auto &hosts = ImageHostMgr::getInst().getImageHosts();\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  {\n    m_defaultImageHostComboBox->clear();\n\n    m_defaultImageHostComboBox->addItem(tr(\"Local\"));\n    for (const auto &host : hosts) {\n      m_defaultImageHostComboBox->addItem(host->getName(), host->getName());\n    }\n\n    auto defaultHost = ImageHostMgr::getInst().getDefaultImageHost();\n    if (defaultHost) {\n      int idx = m_defaultImageHostComboBox->findData(defaultHost->getName());\n      Q_ASSERT(idx > 0);\n      m_defaultImageHostComboBox->setCurrentIndex(idx);\n    } else {\n      m_defaultImageHostComboBox->setCurrentIndex(0);\n    }\n  }\n\n  m_clearObsoleteImageCheckBox->setChecked(editorConfig.isClearObsoleteImageAtImageHostEnabled());\n\n  // Clear all the boxes before.\n  {\n    auto boxes = findChildren<QGroupBox *>(QString(), Qt::FindDirectChildrenOnly);\n    for (auto box : boxes) {\n      if (box->objectName().isEmpty()) {\n        continue;\n      }\n\n      m_mainLayout->removeWidget(box);\n      box->deleteLater();\n    }\n  }\n\n  removeLastStretch();\n\n  // Setup boxes.\n  for (const auto &host : hosts) {\n    auto box = setupGroupBoxForImageHost(host, this);\n    addWidgetToLayout(box);\n  }\n\n  m_mainLayout->addStretch();\n}\n\nbool ImageHostPage::saveInternal() {\n  auto &hostMgr = ImageHostMgr::getInst();\n  auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  Q_ASSERT(m_hostToFields.size() == hostMgr.getImageHosts().size());\n\n  bool hasError = false;\n\n  hostMgr.setDefaultImageHost(m_defaultImageHostComboBox->currentData().toString());\n\n  editorConfig.setClearObsoleteImageAtImageHostEnabled(m_clearObsoleteImageCheckBox->isChecked());\n\n  for (auto it = m_hostToFields.constBegin(); it != m_hostToFields.constEnd(); ++it) {\n    auto host = it.key();\n    const auto &fields = it.value();\n    Q_ASSERT(!fields.isEmpty());\n\n    // Name.\n    {\n      auto box = dynamic_cast<QGroupBox *>(fields[0]->parent());\n      Q_ASSERT(box);\n      auto nameLineEdit =\n          box->findChild<QLineEdit *>(QStringLiteral(\"_name\"), Qt::FindDirectChildrenOnly);\n      Q_ASSERT(nameLineEdit);\n      const auto &newName = nameLineEdit->text();\n      if (newName != host->getName()) {\n        if (!hostMgr.renameImageHost(host, newName)) {\n          setError(tr(\"Failed to rename image host (%1) to (%2).\").arg(host->getName(), newName));\n          hasError = true;\n          break;\n        }\n\n        box->setObjectName(newName);\n      }\n    }\n\n    // Configs.\n    const auto configObj = fieldsToConfig(fields);\n    host->setConfig(configObj);\n  }\n\n  hostMgr.saveImageHosts();\n\n  // No need to notify editor since ImageHostMgr will signal out.\n  // EditorPage::notifyEditorConfigChange();\n  return !hasError;\n}\n\nQString ImageHostPage::title() const { return tr(\"Image Host\"); }\n\nvoid ImageHostPage::newImageHost() {\n  NewImageHostDialog dialog(this);\n  if (dialog.exec()) {\n    removeLastStretch();\n\n    auto box = setupGroupBoxForImageHost(dialog.getNewImageHost(), this);\n    addWidgetToLayout(box);\n\n    m_mainLayout->addStretch();\n  }\n}\n\nQGroupBox *ImageHostPage::setupGroupBoxForImageHost(ImageHost *p_host, QWidget *p_parent) {\n  auto box = new QGroupBox(p_parent);\n  box->setObjectName(p_host->getName());\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  // Add Test and Delete button.\n  {\n    auto btnLayout = new QHBoxLayout();\n    btnLayout->addStretch();\n\n    layout->addRow(btnLayout);\n\n    auto testBtn = new QPushButton(tr(\"Test\"), box);\n    btnLayout->addWidget(testBtn);\n    connect(testBtn, &QPushButton::clicked, this, [this, box]() {\n      const auto name = box->objectName();\n      testImageHost(name);\n    });\n\n    auto deleteBtn = new QPushButton(tr(\"Delete\"), box);\n    btnLayout->addWidget(deleteBtn);\n    connect(deleteBtn, &QPushButton::clicked, this, [this, box]() {\n      const auto name = box->objectName();\n      removeImageHost(name);\n    });\n  }\n\n  layout->addRow(tr(\"Type:\"), new QLabel(ImageHost::typeString(p_host->getType()), box));\n\n  auto nameLineEdit = WidgetsFactory::createLineEdit(p_host->getName(), box);\n  nameLineEdit->setObjectName(QStringLiteral(\"_name\"));\n  layout->addRow(tr(\"Name:\"), nameLineEdit);\n  m_hostToFields[p_host].append(nameLineEdit);\n  connect(nameLineEdit, &QLineEdit::textChanged, this, &ImageHostPage::pageIsChanged);\n\n  const auto configObj = p_host->getConfig();\n  const auto keys = configObj.keys();\n  for (const auto &key : keys) {\n    Q_ASSERT(key != \"_name\");\n    auto configLineEdit = WidgetsFactory::createLineEdit(configObj[key].toString(), box);\n    configLineEdit->setObjectName(key);\n    layout->addRow(tr(\"%1:\").arg(key), configLineEdit);\n    m_hostToFields[p_host].append(configLineEdit);\n    connect(configLineEdit, &QLineEdit::textChanged, this, &ImageHostPage::pageIsChanged);\n  }\n\n  return box;\n}\n\nvoid ImageHostPage::removeImageHost(const QString &p_hostName) {\n  int ret = MessageBoxHelper::questionOkCancel(MessageBoxHelper::Type::Question,\n                                               tr(\"Delete image host (%1)?\").arg(p_hostName));\n  if (ret != QMessageBox::Ok) {\n    return;\n  }\n\n  auto &hostMgr = ImageHostMgr::getInst();\n  auto host = hostMgr.find(p_hostName);\n  Q_ASSERT(host);\n  hostMgr.removeImageHost(host);\n\n  // Remove the group box and related fields.\n  m_hostToFields.remove(host);\n\n  auto box = findChild<QGroupBox *>(p_hostName, Qt::FindDirectChildrenOnly);\n  Q_ASSERT(box);\n  m_mainLayout->removeWidget(box);\n  box->deleteLater();\n}\n\nQJsonObject ImageHostPage::fieldsToConfig(const QVector<QLineEdit *> &p_fields) const {\n  QJsonObject configObj;\n  for (auto field : p_fields) {\n    configObj[field->objectName()] = field->text();\n  }\n\n  return configObj;\n}\n\nvoid ImageHostPage::testImageHost(const QString &p_hostName) {\n  auto &hostMgr = ImageHostMgr::getInst();\n  auto host = hostMgr.find(p_hostName);\n  Q_ASSERT(host);\n\n  auto it = m_hostToFields.find(host);\n  Q_ASSERT(it != m_hostToFields.end());\n\n  const auto configObj = fieldsToConfig(it.value());\n  QString msg;\n  bool ret = host->testConfig(configObj, msg);\n  MessageBoxHelper::notify(ret ? MessageBoxHelper::Information : MessageBoxHelper::Warning,\n                           tr(\"Test %1.\").arg(ret ? tr(\"succeeded\") : tr(\"failed\")), QString(),\n                           msg);\n}\n\nvoid ImageHostPage::removeLastStretch() {\n  auto item = m_mainLayout->itemAt(m_mainLayout->count() - 1);\n  if (item) {\n    m_mainLayout->removeItem(item);\n    delete item;\n  }\n}\n"
  },
  {
    "path": "src/widgets/dialogs/settings/imagehostpage.h",
    "content": "#ifndef IMAGEHOSTPAGE_H\n#define IMAGEHOSTPAGE_H\n\n#include \"settingspage.h\"\n\n#include <QMap>\n#include <QVector>\n\nclass QGroupBox;\nclass QLineEdit;\nclass QVBoxLayout;\nclass QComboBox;\nclass QCheckBox;\n\nnamespace vnotex {\nclass ImageHost;\n\nclass ImageHostPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit ImageHostPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void newImageHost();\n\n  QGroupBox *setupGroupBoxForImageHost(ImageHost *p_host, QWidget *p_parent);\n\n  void removeImageHost(const QString &p_hostName);\n\n  void addWidgetToLayout(QWidget *p_widget);\n\n  QJsonObject fieldsToConfig(const QVector<QLineEdit *> &p_fields) const;\n\n  void testImageHost(const QString &p_hostName);\n\n  QGroupBox *setupGeneralBox(QWidget *p_parent);\n\n  void removeLastStretch();\n\n  QVBoxLayout *m_mainLayout = nullptr;\n\n  // [host] -> list of related fields.\n  QMap<ImageHost *, QVector<QLineEdit *>> m_hostToFields;\n\n  QComboBox *m_defaultImageHostComboBox = nullptr;\n\n  QCheckBox *m_clearObsoleteImageCheckBox = nullptr;\n};\n} // namespace vnotex\n\n#endif // IMAGEHOSTPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/markdowneditorpage.cpp",
    "content": "#include \"markdowneditorpage.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QDoubleSpinBox>\n#include <QFileDialog>\n#include <QFont>\n#include <QFontComboBox>\n#include <QFormLayout>\n#include <QGroupBox>\n#include <QHBoxLayout>\n#include <QPushButton>\n#include <QSpinBox>\n#include <QVBoxLayout>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/markdowneditorconfig.h>\n#include <utils/widgetutils.h>\n#include <widgets/widgetsfactory.h>\n\n#include \"editorpage.h\"\n#include <widgets/editors/graphvizhelper.h>\n#include <widgets/editors/plantumlhelper.h>\n#include <widgets/lineedit.h>\n#include <widgets/locationinputwithbrowsebutton.h>\n#include <widgets/messageboxhelper.h>\n\nusing namespace vnotex;\n\nMarkdownEditorPage::MarkdownEditorPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid MarkdownEditorPage::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n\n  auto generalBox = setupGeneralGroup();\n  mainLayout->addWidget(generalBox);\n\n  auto readBox = setupReadGroup();\n  mainLayout->addWidget(readBox);\n\n  auto editBox = setupEditGroup();\n  mainLayout->addWidget(editBox);\n\n  mainLayout->addStretch();\n}\n\nvoid MarkdownEditorPage::loadInternal() {\n  const auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n\n  m_insertFileNameAsTitleCheckBox->setChecked(markdownConfig.getInsertFileNameAsTitle());\n\n  {\n    int idx =\n        m_sectionNumberComboBox->findData(static_cast<int>(markdownConfig.getSectionNumberMode()));\n    Q_ASSERT(idx != -1);\n    m_sectionNumberComboBox->setCurrentIndex(idx);\n\n    m_sectionNumberBaseLevelSpinBox->setValue(markdownConfig.getSectionNumberBaseLevel());\n\n    idx = m_sectionNumberStyleComboBox->findData(\n        static_cast<int>(markdownConfig.getSectionNumberStyle()));\n    Q_ASSERT(idx != -1);\n    m_sectionNumberStyleComboBox->setCurrentIndex(idx);\n  }\n\n  m_constrainImageWidthCheckBox->setChecked(markdownConfig.getConstrainImageWidthEnabled());\n\n  m_imageAlignCenterCheckBox->setChecked(markdownConfig.getImageAlignCenterEnabled());\n\n  m_zoomFactorSpinBox->setValue(markdownConfig.getZoomFactorInReadMode());\n\n  m_constrainInplacePreviewWidthCheckBox->setChecked(\n      markdownConfig.getConstrainInplacePreviewWidthEnabled());\n\n  {\n    auto srcs = markdownConfig.getInplacePreviewSources();\n    m_inplacePreviewSourceImageLinkCheckBox->setChecked(\n        srcs & MarkdownEditorConfig::InplacePreviewSource::ImageLink);\n    m_inplacePreviewSourceCodeBlockCheckBox->setChecked(\n        srcs & MarkdownEditorConfig::InplacePreviewSource::CodeBlock);\n    m_inplacePreviewSourceMathCheckBox->setChecked(\n        srcs & MarkdownEditorConfig::InplacePreviewSource::Math);\n  }\n\n  m_fetchImagesToLocalCheckBox->setChecked(markdownConfig.getFetchImagesInParseAndPaste());\n\n  m_htmlTagCheckBox->setChecked(markdownConfig.getHtmlTagEnabled());\n\n  m_autoBreakCheckBox->setChecked(markdownConfig.getAutoBreakEnabled());\n\n  m_linkifyCheckBox->setChecked(markdownConfig.getLinkifyEnabled());\n\n  m_indentFirstLineCheckBox->setChecked(markdownConfig.getIndentFirstLineEnabled());\n\n  m_codeBlockLineNumberCheckBox->setChecked(markdownConfig.getCodeBlockLineNumberEnabled());\n\n  m_smartTableCheckBox->setChecked(markdownConfig.getSmartTableEnabled());\n\n  m_spellCheckCheckBox->setChecked(markdownConfig.isSpellCheckEnabled());\n\n  {\n    int idx = m_plantUmlModeComboBox->findData(markdownConfig.getWebPlantUml() ? 0 : 1);\n    m_plantUmlModeComboBox->setCurrentIndex(idx);\n  }\n\n  m_plantUmlJarFileInput->setText(markdownConfig.getPlantUmlJar());\n\n  m_plantUmlWebServiceLineEdit->setText(markdownConfig.getPlantUmlWebService());\n\n  {\n    int idx = m_graphvizModeComboBox->findData(markdownConfig.getWebGraphviz() ? 0 : 1);\n    m_graphvizModeComboBox->setCurrentIndex(idx);\n  }\n\n  m_graphvizFileInput->setText(markdownConfig.getGraphvizExe());\n\n  m_mathJaxScriptLineEdit->setText(markdownConfig.getMathJaxScript());\n\n  {\n    const auto &fontFamily = markdownConfig.getEditorOverriddenFontFamily();\n    m_editorOverriddenFontFamilyCheckBox->setChecked(!fontFamily.isEmpty());\n    if (!fontFamily.isEmpty()) {\n      QFont font;\n      font.setFamily(fontFamily);\n      m_editorOverriddenFontFamilyComboBox->setCurrentFont(font);\n    }\n  }\n\n  m_richPasteByDefaultCheckBox->setChecked(markdownConfig.getRichPasteByDefaultEnabled());\n}\n\nbool MarkdownEditorPage::saveInternal() {\n  auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n\n  markdownConfig.setInsertFileNameAsTitle(m_insertFileNameAsTitleCheckBox->isChecked());\n\n  {\n    auto mode = m_sectionNumberComboBox->currentData().toInt();\n    markdownConfig.setSectionNumberMode(static_cast<MarkdownEditorConfig::SectionNumberMode>(mode));\n\n    if (m_sectionNumberBaseLevelSpinBox->isEnabled()) {\n      markdownConfig.setSectionNumberBaseLevel(m_sectionNumberBaseLevelSpinBox->value());\n    }\n\n    if (m_sectionNumberStyleComboBox->isEnabled()) {\n      auto style = m_sectionNumberStyleComboBox->currentData().toInt();\n      markdownConfig.setSectionNumberStyle(\n          static_cast<MarkdownEditorConfig::SectionNumberStyle>(style));\n    }\n  }\n\n  markdownConfig.setConstrainImageWidthEnabled(m_constrainImageWidthCheckBox->isChecked());\n\n  markdownConfig.setImageAlignCenterEnabled(m_imageAlignCenterCheckBox->isChecked());\n\n  markdownConfig.setZoomFactorInReadMode(m_zoomFactorSpinBox->value());\n\n  markdownConfig.setConstrainInplacePreviewWidthEnabled(\n      m_constrainInplacePreviewWidthCheckBox->isChecked());\n\n  {\n    MarkdownEditorConfig::InplacePreviewSources srcs =\n        MarkdownEditorConfig::InplacePreviewSource::NoInplacePreview;\n    if (m_inplacePreviewSourceImageLinkCheckBox->isChecked()) {\n      srcs |= MarkdownEditorConfig::InplacePreviewSource::ImageLink;\n    }\n    if (m_inplacePreviewSourceCodeBlockCheckBox->isChecked()) {\n      srcs |= MarkdownEditorConfig::InplacePreviewSource::CodeBlock;\n    }\n    if (m_inplacePreviewSourceMathCheckBox->isChecked()) {\n      srcs |= MarkdownEditorConfig::InplacePreviewSource::Math;\n    }\n\n    markdownConfig.setInplacePreviewSources(srcs);\n  }\n\n  markdownConfig.setFetchImagesInParseAndPaste(m_fetchImagesToLocalCheckBox->isChecked());\n\n  markdownConfig.setHtmlTagEnabled(m_htmlTagCheckBox->isChecked());\n\n  markdownConfig.setAutoBreakEnabled(m_autoBreakCheckBox->isChecked());\n\n  markdownConfig.setLinkifyEnabled(m_linkifyCheckBox->isChecked());\n\n  markdownConfig.setIndentFirstLineEnabled(m_indentFirstLineCheckBox->isChecked());\n\n  markdownConfig.setCodeBlockLineNumberEnabled(m_codeBlockLineNumberCheckBox->isChecked());\n\n  markdownConfig.setSmartTableEnabled(m_smartTableCheckBox->isChecked());\n\n  markdownConfig.setSpellCheckEnabled(m_spellCheckCheckBox->isChecked());\n\n  markdownConfig.setWebPlantUml(m_plantUmlModeComboBox->currentData().toInt() == 0);\n\n  markdownConfig.setPlantUmlJar(m_plantUmlJarFileInput->text());\n\n  markdownConfig.setPlantUmlWebService(m_plantUmlWebServiceLineEdit->text());\n\n  markdownConfig.setWebGraphviz(m_graphvizModeComboBox->currentData().toInt() == 0);\n\n  markdownConfig.setGraphvizExe(m_graphvizFileInput->text());\n\n  markdownConfig.setMathJaxScript(m_mathJaxScriptLineEdit->text());\n\n  {\n    bool checked = m_editorOverriddenFontFamilyCheckBox->isChecked();\n    markdownConfig.setEditorOverriddenFontFamily(\n        checked ? m_editorOverriddenFontFamilyComboBox->currentFont().family() : QString());\n  }\n\n  markdownConfig.setRichPasteByDefaultEnabled(m_richPasteByDefaultCheckBox->isChecked());\n\n  EditorPage::notifyEditorConfigChange();\n\n  return true;\n}\n\nQString MarkdownEditorPage::title() const { return tr(\"Markdown Editor\"); }\n\nQGroupBox *MarkdownEditorPage::setupReadGroup() {\n  auto box = new QGroupBox(tr(\"Read\"), this);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    const QString label(tr(\"Constrain image width\"));\n    m_constrainImageWidthCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_constrainImageWidthCheckBox->setToolTip(tr(\"Constrain image width to the window\"));\n    layout->addRow(m_constrainImageWidthCheckBox);\n    addSearchItem(label, m_constrainImageWidthCheckBox->toolTip(), m_constrainImageWidthCheckBox);\n    connect(m_constrainImageWidthCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Center image\"));\n    m_imageAlignCenterCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_imageAlignCenterCheckBox->setToolTip(tr(\"Center images\"));\n    layout->addRow(m_imageAlignCenterCheckBox);\n    addSearchItem(label, m_imageAlignCenterCheckBox->toolTip(), m_imageAlignCenterCheckBox);\n    connect(m_imageAlignCenterCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    m_zoomFactorSpinBox = WidgetsFactory::createDoubleSpinBox(box);\n    m_zoomFactorSpinBox->setToolTip(tr(\"Zoom factor in read mode\"));\n\n    m_zoomFactorSpinBox->setRange(0.1, 10);\n    m_zoomFactorSpinBox->setSingleStep(0.1);\n\n    const QString label(tr(\"Zoom factor:\"));\n    layout->addRow(label, m_zoomFactorSpinBox);\n    addSearchItem(label, m_zoomFactorSpinBox->toolTip(), m_zoomFactorSpinBox);\n    connect(m_zoomFactorSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"HTML tag\"));\n    m_htmlTagCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_htmlTagCheckBox->setToolTip(tr(\"Allow HTML tags in source\"));\n    layout->addRow(m_htmlTagCheckBox);\n    addSearchItem(label, m_htmlTagCheckBox->toolTip(), m_htmlTagCheckBox);\n    connect(m_htmlTagCheckBox, &QCheckBox::stateChanged, this, &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Auto break\"));\n    m_autoBreakCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_autoBreakCheckBox->setToolTip(tr(\"Automatically break a line with '\\\\n'\"));\n    layout->addRow(m_autoBreakCheckBox);\n    addSearchItem(label, m_autoBreakCheckBox->toolTip(), m_autoBreakCheckBox);\n    connect(m_autoBreakCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Linkify\"));\n    m_linkifyCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_linkifyCheckBox->setToolTip(tr(\"Convert URL-like text to links\"));\n    layout->addRow(m_linkifyCheckBox);\n    addSearchItem(label, m_linkifyCheckBox->toolTip(), m_linkifyCheckBox);\n    connect(m_linkifyCheckBox, &QCheckBox::stateChanged, this, &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Indent first line\"));\n    m_indentFirstLineCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_indentFirstLineCheckBox->setToolTip(tr(\"Indent the first line of each paragraph\"));\n    layout->addRow(m_indentFirstLineCheckBox);\n    addSearchItem(label, m_indentFirstLineCheckBox->toolTip(), m_indentFirstLineCheckBox);\n    connect(m_indentFirstLineCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Code block line number\"));\n    m_codeBlockLineNumberCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_codeBlockLineNumberCheckBox->setToolTip(tr(\"Add line number to code block\"));\n    layout->addRow(m_codeBlockLineNumberCheckBox);\n    addSearchItem(label, m_codeBlockLineNumberCheckBox->toolTip(), m_codeBlockLineNumberCheckBox);\n    connect(m_codeBlockLineNumberCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  return box;\n}\n\nQGroupBox *MarkdownEditorPage::setupEditGroup() {\n  auto box = new QGroupBox(tr(\"Edit\"), this);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    const QString label(tr(\"Insert file name as title\"));\n    m_insertFileNameAsTitleCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_insertFileNameAsTitleCheckBox->setToolTip(tr(\"Insert file name as title when creating note\"));\n    layout->addRow(m_insertFileNameAsTitleCheckBox);\n    addSearchItem(label, m_insertFileNameAsTitleCheckBox->toolTip(),\n                  m_insertFileNameAsTitleCheckBox);\n    connect(m_insertFileNameAsTitleCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Constrain in-place preview width\"));\n    m_constrainInplacePreviewWidthCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_constrainInplacePreviewWidthCheckBox->setToolTip(\n        tr(\"Constrain in-place preview width to the window\"));\n    layout->addRow(m_constrainInplacePreviewWidthCheckBox);\n    addSearchItem(label, m_constrainInplacePreviewWidthCheckBox->toolTip(),\n                  m_constrainInplacePreviewWidthCheckBox);\n    connect(m_constrainInplacePreviewWidthCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    auto srcLayout = new QVBoxLayout();\n    layout->addRow(tr(\"In-place preview sources:\"), srcLayout);\n\n    m_inplacePreviewSourceImageLinkCheckBox = WidgetsFactory::createCheckBox(tr(\"Image link\"), box);\n    srcLayout->addWidget(m_inplacePreviewSourceImageLinkCheckBox);\n    connect(m_inplacePreviewSourceImageLinkCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n\n    m_inplacePreviewSourceCodeBlockCheckBox = WidgetsFactory::createCheckBox(tr(\"Code block\"), box);\n    srcLayout->addWidget(m_inplacePreviewSourceCodeBlockCheckBox);\n    connect(m_inplacePreviewSourceCodeBlockCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n\n    m_inplacePreviewSourceMathCheckBox = WidgetsFactory::createCheckBox(tr(\"Math\"), box);\n    srcLayout->addWidget(m_inplacePreviewSourceMathCheckBox);\n    connect(m_inplacePreviewSourceMathCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Fetch images to local in Parse And Paste\"));\n    m_fetchImagesToLocalCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_fetchImagesToLocalCheckBox->setToolTip(\n        tr(\"Fetch images to local in Parse To Markdown And Paste\"));\n    layout->addRow(m_fetchImagesToLocalCheckBox);\n    addSearchItem(label, m_fetchImagesToLocalCheckBox->toolTip(), m_fetchImagesToLocalCheckBox);\n    connect(m_fetchImagesToLocalCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Smart table\"));\n    m_smartTableCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_smartTableCheckBox->setToolTip(tr(\"Smart table formation\"));\n    layout->addRow(m_smartTableCheckBox);\n    addSearchItem(label, m_smartTableCheckBox->toolTip(), m_smartTableCheckBox);\n    connect(m_smartTableCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Spell check\"));\n    m_spellCheckCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_spellCheckCheckBox->setToolTip(tr(\"Spell check\"));\n    layout->addRow(m_spellCheckCheckBox);\n    addSearchItem(label, m_spellCheckCheckBox->toolTip(), m_spellCheckCheckBox);\n    connect(m_spellCheckCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    auto fontLayout = new QHBoxLayout();\n    fontLayout->setContentsMargins(0, 0, 0, 0);\n\n    const QString label(tr(\"Override font\"));\n    m_editorOverriddenFontFamilyCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_editorOverriddenFontFamilyCheckBox->setToolTip(tr(\"Override editor font family of theme\"));\n    fontLayout->addWidget(m_editorOverriddenFontFamilyCheckBox);\n    addSearchItem(label, m_editorOverriddenFontFamilyCheckBox->toolTip(),\n                  m_editorOverriddenFontFamilyCheckBox);\n\n    m_editorOverriddenFontFamilyComboBox = new QFontComboBox(box);\n    m_editorOverriddenFontFamilyComboBox->setEnabled(false);\n    fontLayout->addWidget(m_editorOverriddenFontFamilyComboBox);\n    connect(m_editorOverriddenFontFamilyComboBox,\n            QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &MarkdownEditorPage::pageIsChanged);\n\n    fontLayout->addStretch();\n\n    connect(m_editorOverriddenFontFamilyCheckBox, &QCheckBox::stateChanged, this,\n            [this](int state) {\n              m_editorOverriddenFontFamilyComboBox->setEnabled(state == Qt::Checked);\n              emit pageIsChanged();\n            });\n\n    layout->addRow(fontLayout);\n  }\n\n  {\n    const QString label(tr(\"Use Rich Paste by default\"));\n    m_richPasteByDefaultCheckBox = WidgetsFactory::createCheckBox(label, box);\n    m_richPasteByDefaultCheckBox->setToolTip(tr(\"Use Rich Paste by default when pasting text\"));\n    layout->addRow(m_richPasteByDefaultCheckBox);\n    addSearchItem(label, m_richPasteByDefaultCheckBox->toolTip(), m_richPasteByDefaultCheckBox);\n    connect(m_richPasteByDefaultCheckBox, &QCheckBox::stateChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  return box;\n}\n\nQGroupBox *MarkdownEditorPage::setupGeneralGroup() {\n  auto box = new QGroupBox(tr(\"General\"), this);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    auto sectionLayout = new QHBoxLayout();\n    sectionLayout->setContentsMargins(0, 0, 0, 0);\n\n    m_sectionNumberComboBox = WidgetsFactory::createComboBox(box);\n    m_sectionNumberComboBox->setToolTip(tr(\"Section number mode\"));\n    m_sectionNumberComboBox->addItem(tr(\"None\"),\n                                     (int)MarkdownEditorConfig::SectionNumberMode::None);\n    m_sectionNumberComboBox->addItem(tr(\"Read\"),\n                                     (int)MarkdownEditorConfig::SectionNumberMode::Read);\n    m_sectionNumberComboBox->addItem(tr(\"Edit\"),\n                                     (int)MarkdownEditorConfig::SectionNumberMode::Edit);\n    sectionLayout->addWidget(m_sectionNumberComboBox);\n    connect(m_sectionNumberComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &MarkdownEditorPage::pageIsChanged);\n\n    m_sectionNumberBaseLevelSpinBox = WidgetsFactory::createSpinBox(box);\n    m_sectionNumberBaseLevelSpinBox->setToolTip(\n        tr(\"Base level to start section numbering in edit mode\"));\n    m_sectionNumberBaseLevelSpinBox->setRange(1, 6);\n    m_sectionNumberBaseLevelSpinBox->setSingleStep(1);\n    m_sectionNumberBaseLevelSpinBox->setEnabled(false);\n    sectionLayout->addWidget(m_sectionNumberBaseLevelSpinBox);\n    connect(m_sectionNumberBaseLevelSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this,\n            &MarkdownEditorPage::pageIsChanged);\n\n    m_sectionNumberStyleComboBox = WidgetsFactory::createComboBox(box);\n    m_sectionNumberStyleComboBox->setToolTip(tr(\"Section number style\"));\n    m_sectionNumberStyleComboBox->addItem(\n        tr(\"1.1.\"), (int)MarkdownEditorConfig::SectionNumberStyle::DigDotDigDot);\n    m_sectionNumberStyleComboBox->addItem(tr(\"1.1\"),\n                                          (int)MarkdownEditorConfig::SectionNumberStyle::DigDotDig);\n    m_sectionNumberStyleComboBox->setEnabled(false);\n    sectionLayout->addWidget(m_sectionNumberStyleComboBox);\n    connect(m_sectionNumberStyleComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &MarkdownEditorPage::pageIsChanged);\n\n    connect(m_sectionNumberComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            [this](int p_index) {\n              m_sectionNumberBaseLevelSpinBox->setEnabled(\n                  p_index != MarkdownEditorConfig::SectionNumberMode::None);\n              m_sectionNumberStyleComboBox->setEnabled(\n                  p_index == MarkdownEditorConfig::SectionNumberMode::Edit);\n            });\n\n    const QString label(tr(\"Section number:\"));\n    layout->addRow(label, sectionLayout);\n    addSearchItem(label, m_sectionNumberComboBox->toolTip(), m_sectionNumberComboBox);\n  }\n\n  {\n    m_plantUmlModeComboBox = WidgetsFactory::createComboBox(box);\n    m_plantUmlModeComboBox->setToolTip(\n        tr(\"Use Web service or local JAR file to render PlantUml graphs\"));\n\n    m_plantUmlModeComboBox->addItem(tr(\"Web Service\"), 0);\n    m_plantUmlModeComboBox->addItem(tr(\"Local JAR\"), 1);\n\n    const QString label(tr(\"PlantUml:\"));\n    layout->addRow(label, m_plantUmlModeComboBox);\n    addSearchItem(label, m_plantUmlModeComboBox->toolTip(), m_plantUmlModeComboBox);\n    connect(m_plantUmlModeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    auto jarLayout = new QHBoxLayout();\n    jarLayout->setContentsMargins(0, 0, 0, 0);\n\n    m_plantUmlJarFileInput = new LocationInputWithBrowseButton(box);\n    m_plantUmlJarFileInput->setToolTip(tr(\"Local JAR file to render PlantUml graphs\"));\n    connect(m_plantUmlJarFileInput, &LocationInputWithBrowseButton::clicked, this, [this]() {\n      auto filePath = QFileDialog::getOpenFileName(this, tr(\"Select PlantUml JAR File\"),\n                                                   QDir::homePath(), \"PlantUml JAR (*.jar)\");\n      if (!filePath.isEmpty()) {\n        m_plantUmlJarFileInput->setText(filePath);\n      }\n    });\n    jarLayout->addWidget(m_plantUmlJarFileInput, 1);\n\n    auto testBtn = new QPushButton(tr(\"Test\"), box);\n    testBtn->setToolTip(tr(\"Test PlantUml JAR and Java Runtime Environment\"));\n    connect(testBtn, &QPushButton::clicked, this, [this]() {\n      const auto jar = m_plantUmlJarFileInput->text();\n      if (jar.isEmpty() || !QFileInfo::exists(jar)) {\n        MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                                 tr(\"The JAR file (%1) specified does not exist.\").arg(jar), this);\n        return;\n      }\n\n      auto testRet = PlantUmlHelper::testPlantUml(jar);\n      MessageBoxHelper::notify(MessageBoxHelper::Information,\n                               tr(\"Test %1.\").arg(testRet.first ? tr(\"succeeded\") : tr(\"failed\")),\n                               QString(), testRet.second, this);\n    });\n    jarLayout->addWidget(testBtn);\n\n    const QString label(tr(\"PlantUml JAR file:\"));\n    layout->addRow(label, jarLayout);\n    addSearchItem(label, m_plantUmlJarFileInput->toolTip(), m_plantUmlJarFileInput);\n    connect(m_plantUmlJarFileInput, &LocationInputWithBrowseButton::textChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    m_plantUmlWebServiceLineEdit = WidgetsFactory::createLineEdit(box);\n    m_plantUmlWebServiceLineEdit->setToolTip(\n        tr(\"Override the Web service used to render PlantUml graphs\"));\n    m_plantUmlWebServiceLineEdit->setPlaceholderText(tr(\"Empty to use default one\"));\n\n    const QString label(tr(\"Override PlantUml Web service:\"));\n    layout->addRow(label, m_plantUmlWebServiceLineEdit);\n    addSearchItem(label, m_plantUmlWebServiceLineEdit->toolTip(), m_plantUmlWebServiceLineEdit);\n    connect(m_plantUmlWebServiceLineEdit, &QLineEdit::textChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    m_graphvizModeComboBox = WidgetsFactory::createComboBox(box);\n    m_graphvizModeComboBox->setToolTip(\n        tr(\"Use Web service or local executable file to render Graphviz graphs\"));\n\n    m_graphvizModeComboBox->addItem(tr(\"Web Service\"), 0);\n    m_graphvizModeComboBox->addItem(tr(\"Local Executable\"), 1);\n\n    const QString label(tr(\"Graphviz:\"));\n    layout->addRow(label, m_graphvizModeComboBox);\n    addSearchItem(label, m_graphvizModeComboBox->toolTip(), m_graphvizModeComboBox);\n    connect(m_graphvizModeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    auto fileLayout = new QHBoxLayout();\n    fileLayout->setContentsMargins(0, 0, 0, 0);\n\n    m_graphvizFileInput = new LocationInputWithBrowseButton(box);\n    m_graphvizFileInput->setToolTip(tr(\"Local executable file to render Graphviz graphs\"));\n    connect(m_graphvizFileInput, &LocationInputWithBrowseButton::clicked, this, [this]() {\n      auto filePath = QFileDialog::getOpenFileName(this, tr(\"Select Graphviz Executable File\"),\n                                                   QDir::homePath());\n      if (!filePath.isEmpty()) {\n        m_graphvizFileInput->setText(filePath);\n      }\n    });\n    fileLayout->addWidget(m_graphvizFileInput, 1);\n\n    auto testBtn = new QPushButton(tr(\"Test\"), box);\n    testBtn->setToolTip(tr(\"Test Graphviz executable file\"));\n    connect(testBtn, &QPushButton::clicked, this, [this]() {\n      const auto exe = m_graphvizFileInput->text();\n      if (exe.isEmpty() || !QFileInfo::exists(exe)) {\n        MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                                 tr(\"The executable file (%1) specified does not exist.\").arg(exe),\n                                 this);\n        return;\n      }\n\n      auto testRet = GraphvizHelper::testGraphviz(exe);\n      MessageBoxHelper::notify(MessageBoxHelper::Information,\n                               tr(\"Test %1.\").arg(testRet.first ? tr(\"succeeded\") : tr(\"failed\")),\n                               QString(), testRet.second, this);\n    });\n    fileLayout->addWidget(testBtn);\n\n    const QString label(tr(\"Graphviz executable file:\"));\n    layout->addRow(label, fileLayout);\n    addSearchItem(label, m_graphvizFileInput->toolTip(), m_graphvizFileInput);\n    connect(m_graphvizFileInput, &LocationInputWithBrowseButton::textChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  {\n    m_mathJaxScriptLineEdit = WidgetsFactory::createLineEdit(box);\n    m_mathJaxScriptLineEdit->setToolTip(\n        tr(\"Override the MathJax script used to render math formulas\"));\n    m_mathJaxScriptLineEdit->setPlaceholderText(tr(\"Empty to use default one\"));\n\n    const QString label(tr(\"Override MathJax script:\"));\n    layout->addRow(label, m_mathJaxScriptLineEdit);\n    addSearchItem(label, m_mathJaxScriptLineEdit->toolTip(), m_mathJaxScriptLineEdit);\n    connect(m_mathJaxScriptLineEdit, &QLineEdit::textChanged, this,\n            &MarkdownEditorPage::pageIsChanged);\n  }\n\n  return box;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/settings/markdowneditorpage.h",
    "content": "#ifndef MARKDOWNEDITORPAGE_H\n#define MARKDOWNEDITORPAGE_H\n\n#include \"settingspage.h\"\n\nclass QCheckBox;\nclass QGroupBox;\nclass QDoubleSpinBox;\nclass QSpinBox;\nclass QComboBox;\nclass QFontComboBox;\nclass QLineEdit;\n\nnamespace vnotex {\nclass LocationInputWithBrowseButton;\n\nclass MarkdownEditorPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit MarkdownEditorPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QGroupBox *setupGeneralGroup();\n\n  QGroupBox *setupReadGroup();\n\n  QGroupBox *setupEditGroup();\n\n  QCheckBox *m_insertFileNameAsTitleCheckBox = nullptr;\n\n  QCheckBox *m_constrainImageWidthCheckBox = nullptr;\n\n  QCheckBox *m_imageAlignCenterCheckBox = nullptr;\n\n  QCheckBox *m_constrainInplacePreviewWidthCheckBox = nullptr;\n\n  QCheckBox *m_inplacePreviewSourceImageLinkCheckBox = nullptr;\n\n  QCheckBox *m_inplacePreviewSourceCodeBlockCheckBox = nullptr;\n\n  QCheckBox *m_inplacePreviewSourceMathCheckBox = nullptr;\n\n  QCheckBox *m_fetchImagesToLocalCheckBox = nullptr;\n\n  QCheckBox *m_htmlTagCheckBox = nullptr;\n\n  QCheckBox *m_autoBreakCheckBox = nullptr;\n\n  QCheckBox *m_linkifyCheckBox = nullptr;\n\n  QCheckBox *m_indentFirstLineCheckBox = nullptr;\n\n  QCheckBox *m_codeBlockLineNumberCheckBox = nullptr;\n\n  QDoubleSpinBox *m_zoomFactorSpinBox = nullptr;\n\n  QComboBox *m_sectionNumberComboBox = nullptr;\n\n  QSpinBox *m_sectionNumberBaseLevelSpinBox = nullptr;\n\n  QComboBox *m_sectionNumberStyleComboBox = nullptr;\n\n  QCheckBox *m_smartTableCheckBox = nullptr;\n\n  QCheckBox *m_spellCheckCheckBox = nullptr;\n\n  QComboBox *m_plantUmlModeComboBox = nullptr;\n\n  LocationInputWithBrowseButton *m_plantUmlJarFileInput = nullptr;\n\n  QLineEdit *m_plantUmlWebServiceLineEdit = nullptr;\n\n  QComboBox *m_graphvizModeComboBox = nullptr;\n\n  LocationInputWithBrowseButton *m_graphvizFileInput = nullptr;\n\n  QLineEdit *m_mathJaxScriptLineEdit = nullptr;\n\n  QCheckBox *m_editorOverriddenFontFamilyCheckBox = nullptr;\n\n  QFontComboBox *m_editorOverriddenFontFamilyComboBox = nullptr;\n\n  QCheckBox *m_richPasteByDefaultCheckBox = nullptr;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNEDITORPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/miscpage.cpp",
    "content": "#include \"miscpage.h\"\n\n#include <QFormLayout>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/sessionconfig.h>\n#include <utils/widgetutils.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nMiscPage::MiscPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid MiscPage::setupUI() {}\n\nvoid MiscPage::loadInternal() {}\n\nbool MiscPage::saveInternal() { return true; }\n\nQString MiscPage::title() const { return tr(\"Misc\"); }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/miscpage.h",
    "content": "#ifndef MISCPAGE_H\n#define MISCPAGE_H\n\n#include \"settingspage.h\"\n\nnamespace vnotex {\nclass MiscPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit MiscPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n};\n} // namespace vnotex\n\n#endif // MISCPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/newimagehostdialog.cpp",
    "content": "#include \"newimagehostdialog.h\"\n\n#include <QComboBox>\n#include <QFormLayout>\n#include <QLabel>\n#include <QLineEdit>\n\n#include <imagehost/imagehostmgr.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nNewImageHostDialog::NewImageHostDialog(QWidget *p_parent) : ScrollDialog(p_parent) { setupUI(); }\n\nvoid NewImageHostDialog::setupUI() {\n  auto widget = new QWidget(this);\n  setCentralWidget(widget);\n\n  auto mainLayout = WidgetsFactory::createFormLayout(widget);\n\n  {\n    m_typeComboBox = WidgetsFactory::createComboBox(widget);\n    mainLayout->addRow(tr(\"Type:\"), m_typeComboBox);\n\n    for (int type = static_cast<int>(ImageHost::GitHub);\n         type < static_cast<int>(ImageHost::MaxHost); ++type) {\n      m_typeComboBox->addItem(ImageHost::typeString(static_cast<ImageHost::Type>(type)), type);\n    }\n  }\n\n  m_nameLineEdit = WidgetsFactory::createLineEdit(widget);\n  mainLayout->addRow(tr(\"Name:\"), m_nameLineEdit);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"New Image Host\"));\n}\n\nvoid NewImageHostDialog::acceptedButtonClicked() {\n  if (validateInputs() && newImageHost()) {\n    accept();\n  }\n}\n\nbool NewImageHostDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  auto name = m_nameLineEdit->text();\n  if (name.isEmpty()) {\n    msg = tr(\"Please specify a valid name for the image host.\");\n    valid = false;\n  } else if (ImageHostMgr::getInst().find(name)) {\n    msg = tr(\"Name conflicts with existing image host.\");\n    valid = false;\n  }\n\n  if (!valid) {\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  return true;\n}\n\nbool NewImageHostDialog::newImageHost() {\n  m_imageHost = ImageHostMgr::getInst().newImageHost(\n      static_cast<ImageHost::Type>(m_typeComboBox->currentData().toInt()), m_nameLineEdit->text());\n  if (!m_imageHost) {\n    setInformationText(tr(\"Failed to create image host (%1).\").arg(m_nameLineEdit->text()),\n                       ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n\n  return true;\n}\n\nImageHost *NewImageHostDialog::getNewImageHost() const { return m_imageHost; }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/newimagehostdialog.h",
    "content": "#ifndef NEWIMAGEHOSTDIALOG_H\n#define NEWIMAGEHOSTDIALOG_H\n\n#include \"../scrolldialog.h\"\n\nclass QComboBox;\nclass QLineEdit;\n\nnamespace vnotex {\nclass ImageHost;\n\nclass NewImageHostDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  explicit NewImageHostDialog(QWidget *p_parent = nullptr);\n\n  ImageHost *getNewImageHost() const;\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  bool validateInputs();\n\n  bool newImageHost();\n\n  QComboBox *m_typeComboBox = nullptr;\n\n  QLineEdit *m_nameLineEdit = nullptr;\n\n  ImageHost *m_imageHost = nullptr;\n};\n} // namespace vnotex\n\n#endif // NEWIMAGEHOSTDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/notemanagementpage.cpp",
    "content": "#include \"notemanagementpage.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QFormLayout>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nNoteManagementPage::NoteManagementPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid NoteManagementPage::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n\n  {\n    const QString label(tr(\"Per-Notebook access history\"));\n    m_perNotebookHistoryCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_perNotebookHistoryCheckBox->setToolTip(tr(\"Store note access history in its notebook\"));\n    mainLayout->addRow(m_perNotebookHistoryCheckBox);\n    addSearchItem(label, m_perNotebookHistoryCheckBox->toolTip(), m_perNotebookHistoryCheckBox);\n    connect(m_perNotebookHistoryCheckBox, &QCheckBox::stateChanged, this,\n            &NoteManagementPage::pageIsChanged);\n  }\n\n  {\n    m_lineEndingComboBox = WidgetsFactory::createComboBox(this);\n    m_lineEndingComboBox->setToolTip(tr(\"Line ending used to write configuration files\"));\n\n    m_lineEndingComboBox->addItem(tr(\"Follow Platform\"), (int)LineEndingPolicy::Platform);\n    m_lineEndingComboBox->addItem(tr(\"LF (Linux/macOS)\"), (int)LineEndingPolicy::LF);\n    m_lineEndingComboBox->addItem(tr(\"CR LF (Windows)\"), (int)LineEndingPolicy::CRLF);\n    m_lineEndingComboBox->addItem(tr(\"CR\"), (int)LineEndingPolicy::CR);\n\n    const QString label(tr(\"Line ending:\"));\n    mainLayout->addRow(label, m_lineEndingComboBox);\n    addSearchItem(label, m_lineEndingComboBox->toolTip(), m_lineEndingComboBox);\n    connect(m_lineEndingComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &NoteManagementPage::pageIsChanged);\n  }\n\n  {\n    m_defaultOpenModeComboBox = WidgetsFactory::createComboBox(this);\n    m_defaultOpenModeComboBox->setToolTip(tr(\"Default mode when opening notes\"));\n\n    m_defaultOpenModeComboBox->addItem(tr(\"Read\"), (int)ViewWindowMode::Read);\n    m_defaultOpenModeComboBox->addItem(tr(\"Edit\"), (int)ViewWindowMode::Edit);\n\n    const QString label(tr(\"Default open mode:\"));\n    mainLayout->addRow(label, m_defaultOpenModeComboBox);\n    addSearchItem(label, m_defaultOpenModeComboBox->toolTip(), m_defaultOpenModeComboBox);\n    connect(m_defaultOpenModeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &NoteManagementPage::pageIsChanged);\n  }\n}\n\nvoid NoteManagementPage::loadInternal() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  m_perNotebookHistoryCheckBox->setChecked(coreConfig.isPerNotebookHistoryEnabled());\n\n  {\n    int idx = m_lineEndingComboBox->findData(static_cast<int>(coreConfig.getLineEndingPolicy()));\n    if (idx == -1) {\n      idx = 0;\n    }\n    m_lineEndingComboBox->setCurrentIndex(idx);\n  }\n\n  {\n    int idx =\n        m_defaultOpenModeComboBox->findData(static_cast<int>(coreConfig.getDefaultOpenMode()));\n    if (idx == -1) {\n      idx = 0;\n    }\n    m_defaultOpenModeComboBox->setCurrentIndex(idx);\n  }\n}\n\nbool NoteManagementPage::saveInternal() {\n  auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  coreConfig.setPerNotebookHistoryEnabled(m_perNotebookHistoryCheckBox->isChecked());\n\n  {\n    auto ending = m_lineEndingComboBox->currentData().toInt();\n    coreConfig.setLineEndingPolicy(static_cast<LineEndingPolicy>(ending));\n  }\n\n  {\n    auto mode = m_defaultOpenModeComboBox->currentData().toInt();\n    coreConfig.setDefaultOpenMode(static_cast<ViewWindowMode>(mode));\n  }\n\n  return true;\n}\n\nQString NoteManagementPage::title() const { return tr(\"Note Management\"); }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/notemanagementpage.h",
    "content": "#ifndef NOTEMANAGEMENTPAGE_H\n#define NOTEMANAGEMENTPAGE_H\n\n#include \"settingspage.h\"\n\nclass QCheckBox;\nclass QComboBox;\n\nnamespace vnotex {\nclass NoteManagementPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit NoteManagementPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QCheckBox *m_perNotebookHistoryCheckBox = nullptr;\n\n  QComboBox *m_lineEndingComboBox = nullptr;\n\n  QComboBox *m_defaultOpenModeComboBox = nullptr;\n};\n} // namespace vnotex\n\n#endif // NOTEMANAGEMENTPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/quickaccesspage.cpp",
    "content": "#include \"quickaccesspage.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QDebug>\n#include <QFileDialog>\n#include <QFormLayout>\n#include <QGroupBox>\n#include <QInputDialog>\n#include <QLineEdit>\n#include <QPlainTextEdit>\n#include <QPushButton>\n#include <QVBoxLayout>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/notebookmgr.h>\n#include <core/sessionconfig.h>\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n#include <widgets/lineeditwithsnippet.h>\n#include <widgets/locationinputwithbrowsebutton.h>\n#include <widgets/messageboxhelper.h>\n#include <widgets/widgetsfactory.h>\n\n#include \"../notetemplateselector.h\"\n\nusing namespace vnotex;\n\nQuickAccessPage::QuickAccessPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid QuickAccessPage::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n\n  auto flashPageBox = setupFlashPageGroup();\n  mainLayout->addWidget(flashPageBox);\n\n  auto quickAccessBox = setupQuickAccessGroup();\n  mainLayout->addWidget(quickAccessBox);\n\n  auto quickNoteBox = setupQuickNoteGroup();\n  mainLayout->addWidget(quickNoteBox);\n\n  mainLayout->addStretch();\n}\n\nvoid QuickAccessPage::loadInternal() {\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n\n  m_flashPageInput->setText(sessionConfig.getFlashPage());\n\n  {\n    const auto &quickAccess = sessionConfig.getQuickAccessFiles();\n    if (!quickAccess.isEmpty()) {\n      m_quickAccessTextEdit->setPlainText(quickAccess.join(QChar('\\n')));\n    }\n  }\n\n  loadQuickNoteSchemes();\n}\n\nvoid QuickAccessPage::loadQuickNoteSchemes() {\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n\n  m_quickNoteSchemes = sessionConfig.getQuickNoteSchemes();\n  m_quickNoteCurrentIndex = -1;\n\n  m_quickNoteSchemeComboBox->clear();\n  for (const auto &scheme : m_quickNoteSchemes) {\n    m_quickNoteSchemeComboBox->addItem(scheme.m_name);\n  }\n  if (m_quickNoteSchemeComboBox->count() > 0) {\n    m_quickNoteSchemeComboBox->setCurrentIndex(0);\n    // Manually call the handler.\n    setCurrentQuickNote(0);\n  }\n}\n\nbool QuickAccessPage::saveInternal() {\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n\n  sessionConfig.setFlashPage(m_flashPageInput->text());\n\n  {\n    auto text = m_quickAccessTextEdit->toPlainText();\n    if (!text.isEmpty()) {\n      sessionConfig.setQuickAccessFiles(text.split(QChar('\\n')));\n    }\n  }\n\n  saveQuickNoteSchemes();\n\n  return true;\n}\n\nvoid QuickAccessPage::saveQuickNoteSchemes() {\n  // Save current quick note scheme from inputs.\n  saveCurrentQuickNote();\n\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  sessionConfig.setQuickNoteSchemes(m_quickNoteSchemes);\n}\n\nQString QuickAccessPage::title() const { return tr(\"Quick Access\"); }\n\nQGroupBox *QuickAccessPage::setupFlashPageGroup() {\n  auto box = new QGroupBox(tr(\"Flash Page\"), this);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    m_flashPageInput = new LocationInputWithBrowseButton(box);\n    m_flashPageInput->setToolTip(\n        tr(\"Flash Page location (user could copy the path of one note and paste it here)\"));\n\n    const QString label(tr(\"Flash Page:\"));\n    layout->addRow(label, m_flashPageInput);\n    addSearchItem(label, m_flashPageInput->toolTip(), m_flashPageInput);\n    connect(m_flashPageInput, &LocationInputWithBrowseButton::textChanged, this,\n            &QuickAccessPage::pageIsChanged);\n    connect(m_flashPageInput, &LocationInputWithBrowseButton::clicked, this, [this]() {\n      auto filePath =\n          QFileDialog::getOpenFileName(this, tr(\"Select Flash Page File\"), QDir::homePath());\n      if (!filePath.isEmpty()) {\n        m_flashPageInput->setText(filePath);\n      }\n    });\n  }\n\n  return box;\n}\n\nQGroupBox *QuickAccessPage::setupQuickAccessGroup() {\n  auto box = new QGroupBox(tr(\"Quick Access\"), this);\n  auto layout = WidgetsFactory::createFormLayout(box);\n\n  {\n    m_quickAccessTextEdit = WidgetsFactory::createPlainTextEdit(box);\n    m_quickAccessTextEdit->setToolTip(\n        tr(\"Edit the files pinned to Quick Access (one file per line)\"));\n    m_quickAccessTextEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);\n\n    const QString label(tr(\"Quick Access:\"));\n    layout->addRow(label, m_quickAccessTextEdit);\n    addSearchItem(label, m_quickAccessTextEdit->toolTip(), m_quickAccessTextEdit);\n    connect(m_quickAccessTextEdit, &QPlainTextEdit::textChanged, this,\n            &QuickAccessPage::pageIsChanged);\n  }\n\n  return box;\n}\n\nQString QuickAccessPage::getDefaultQuickNoteFolderPath() {\n  auto defaultPath = QDir::homePath();\n  auto currentNotebook = VNoteX::getInst().getNotebookMgr().getCurrentNotebook();\n  if (currentNotebook) {\n    defaultPath = currentNotebook->getRootFolderAbsolutePath();\n  }\n  return defaultPath;\n}\n\nQGroupBox *QuickAccessPage::setupQuickNoteGroup() {\n  auto box = new QGroupBox(tr(\"Quick Note\"), this);\n  auto mainLayout = WidgetsFactory::createFormLayout(box);\n\n  {\n    auto selectorLayout = new QHBoxLayout();\n\n    // Add items in loadInternal().\n    m_quickNoteSchemeComboBox = WidgetsFactory::createComboBox(box);\n    selectorLayout->addWidget(m_quickNoteSchemeComboBox, 1);\n    m_quickNoteSchemeComboBox->setPlaceholderText(tr(\"No scheme to show\"));\n\n    auto newBtn = new QPushButton(tr(\"New\"), box);\n    connect(newBtn, &QPushButton::clicked, this, &QuickAccessPage::newQuickNoteScheme);\n    selectorLayout->addWidget(newBtn);\n\n    auto deleteBtn = new QPushButton(tr(\"Delete\"), box);\n    deleteBtn->setEnabled(false);\n    connect(deleteBtn, &QPushButton::clicked, this, &QuickAccessPage::removeQuickNoteScheme);\n    selectorLayout->addWidget(deleteBtn);\n\n    const QString label(tr(\"Scheme:\"));\n    mainLayout->addRow(label, selectorLayout);\n    addSearchItem(label, m_quickNoteSchemeComboBox);\n\n    connect(m_quickNoteSchemeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &QuickAccessPage::pageIsChanged);\n    connect(m_quickNoteSchemeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            [deleteBtn](int idx) { deleteBtn->setEnabled(idx > -1); });\n  }\n\n  m_quickNoteInfoGroupBox = new QGroupBox(box);\n  mainLayout->addRow(m_quickNoteInfoGroupBox);\n  auto infoLayout = WidgetsFactory::createFormLayout(m_quickNoteInfoGroupBox);\n\n  {\n    const QString label(tr(\"Folder:\"));\n    m_quickNoteFolderPathInput = new LocationInputWithBrowseButton(m_quickNoteInfoGroupBox);\n    m_quickNoteFolderPathInput->setPlaceholderText(\n        tr(\"Empty to use current explored folder dynamically\"));\n    infoLayout->addRow(label, m_quickNoteFolderPathInput);\n    addSearchItem(label, m_quickNoteFolderPathInput);\n    connect(m_quickNoteFolderPathInput, &LocationInputWithBrowseButton::textChanged, this,\n            &QuickAccessPage::pageIsChanged);\n    connect(m_quickNoteFolderPathInput, &LocationInputWithBrowseButton::clicked, this, [this]() {\n      auto folderPath = QFileDialog::getExistingDirectory(this, tr(\"Select Quick Note Folder\"),\n                                                          getDefaultQuickNoteFolderPath());\n      if (!folderPath.isEmpty()) {\n        m_quickNoteFolderPathInput->setText(folderPath);\n      }\n    });\n  }\n\n  {\n    const QString label(tr(\"Note name:\"));\n    m_quickNoteNoteNameLineEdit =\n        WidgetsFactory::createLineEditWithSnippet(m_quickNoteInfoGroupBox);\n    infoLayout->addRow(label, m_quickNoteNoteNameLineEdit);\n    connect(m_quickNoteNoteNameLineEdit, &QLineEdit::textChanged, this,\n            &QuickAccessPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Note template:\"));\n    m_quickNoteTemplateSelector = new NoteTemplateSelector(m_quickNoteInfoGroupBox);\n    infoLayout->addRow(label, m_quickNoteTemplateSelector);\n    connect(m_quickNoteTemplateSelector, &NoteTemplateSelector::templateChanged, this,\n            &QuickAccessPage::pageIsChanged);\n  }\n\n  m_quickNoteInfoGroupBox->setVisible(false);\n  connect(m_quickNoteSchemeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n          [this](int idx) {\n            if (isLoading()) {\n              return;\n            }\n            setCurrentQuickNote(idx);\n          });\n  return box;\n}\n\nvoid QuickAccessPage::newQuickNoteScheme() {\n  bool isDuplicated = false;\n  QString schemeName;\n  do {\n    schemeName = QInputDialog::getText(this, tr(\"Quick Note Scheme\"),\n                                       isDuplicated ? tr(\"Scheme name already exists! Try again:\")\n                                                    : tr(\"Scheme name:\"));\n    if (schemeName.isEmpty()) {\n      return;\n    }\n    isDuplicated = m_quickNoteSchemeComboBox->findText(schemeName) != -1;\n  } while (isDuplicated);\n\n  SessionConfig::QuickNoteScheme scheme;\n  scheme.m_name = schemeName;\n  scheme.m_folderPath = getDefaultQuickNoteFolderPath();\n  scheme.m_noteName = tr(\"quick_note_%da%.md\");\n  m_quickNoteSchemes.push_back(scheme);\n\n  m_quickNoteSchemeComboBox->addItem(schemeName);\n  m_quickNoteSchemeComboBox->setCurrentText(schemeName);\n\n  emit pageIsChanged();\n}\n\nvoid QuickAccessPage::removeQuickNoteScheme() {\n  int idx = m_quickNoteSchemeComboBox->currentIndex();\n  Q_ASSERT(idx > -1);\n\n  auto &scheme = m_quickNoteSchemes[idx];\n  int ret = MessageBoxHelper::questionOkCancel(\n      MessageBoxHelper::Type::Question, tr(\"Delete quick note scheme (%1)?\").arg(scheme.m_name));\n  if (ret != QMessageBox::Ok) {\n    return;\n  }\n\n  m_quickNoteCurrentIndex = -1;\n  m_quickNoteSchemes.removeAt(idx);\n  m_quickNoteSchemeComboBox->removeItem(idx);\n  emit pageIsChanged();\n}\n\nvoid QuickAccessPage::saveCurrentQuickNote() {\n  if (m_quickNoteCurrentIndex < 0) {\n    return;\n  }\n  Q_ASSERT(m_quickNoteCurrentIndex < m_quickNoteSchemes.size());\n  auto &scheme = m_quickNoteSchemes[m_quickNoteCurrentIndex];\n  scheme.m_folderPath = m_quickNoteFolderPathInput->text();\n  // No need to apply the snippet for now.\n  scheme.m_noteName = m_quickNoteNoteNameLineEdit->text();\n  scheme.m_template = m_quickNoteTemplateSelector->getCurrentTemplate();\n}\n\nvoid QuickAccessPage::loadCurrentQuickNote() {\n  if (m_quickNoteCurrentIndex < 0) {\n    m_quickNoteFolderPathInput->setText(QString());\n    m_quickNoteNoteNameLineEdit->setText(QString());\n    m_quickNoteTemplateSelector->setCurrentTemplate(QString());\n    return;\n  }\n\n  Q_ASSERT(m_quickNoteCurrentIndex < m_quickNoteSchemes.size());\n  const auto &scheme = m_quickNoteSchemes[m_quickNoteCurrentIndex];\n  m_quickNoteFolderPathInput->setText(scheme.m_folderPath);\n  m_quickNoteNoteNameLineEdit->setText(scheme.m_noteName);\n  m_quickNoteTemplateSelector->setCurrentTemplate(scheme.m_template);\n}\n\nvoid QuickAccessPage::setCurrentQuickNote(int idx) {\n  saveCurrentQuickNote();\n  m_quickNoteCurrentIndex = idx;\n  loadCurrentQuickNote();\n\n  m_quickNoteInfoGroupBox->setVisible(idx > -1);\n}\n"
  },
  {
    "path": "src/widgets/dialogs/settings/quickaccesspage.h",
    "content": "#ifndef QUICKACCESSPAGE_H\n#define QUICKACCESSPAGE_H\n\n#include \"settingspage.h\"\n\n#include <core/sessionconfig.h>\n\nclass QGroupBox;\nclass QPlainTextEdit;\nclass QComboBox;\n\nnamespace vnotex {\nclass LocationInputWithBrowseButton;\nclass LineEditWithSnippet;\nclass NoteTemplateSelector;\n\nclass QuickAccessPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit QuickAccessPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QGroupBox *setupFlashPageGroup();\n\n  QGroupBox *setupQuickAccessGroup();\n\n  QGroupBox *setupQuickNoteGroup();\n\n  void newQuickNoteScheme();\n\n  void removeQuickNoteScheme();\n\n  void saveCurrentQuickNote();\n\n  void loadCurrentQuickNote();\n\n  void loadQuickNoteSchemes();\n\n  void saveQuickNoteSchemes();\n\n  void setCurrentQuickNote(int idx);\n\n  static QString getDefaultQuickNoteFolderPath();\n\n  LocationInputWithBrowseButton *m_flashPageInput = nullptr;\n\n  QPlainTextEdit *m_quickAccessTextEdit = nullptr;\n\n  QComboBox *m_quickNoteSchemeComboBox = nullptr;\n\n  LocationInputWithBrowseButton *m_quickNoteFolderPathInput = nullptr;\n\n  LineEditWithSnippet *m_quickNoteNoteNameLineEdit = nullptr;\n\n  NoteTemplateSelector *m_quickNoteTemplateSelector = nullptr;\n\n  QGroupBox *m_quickNoteInfoGroupBox = nullptr;\n\n  QVector<SessionConfig::QuickNoteScheme> m_quickNoteSchemes;\n\n  int m_quickNoteCurrentIndex = -1;\n};\n} // namespace vnotex\n\n#endif // QUICKACCESSPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/settingsdialog.cpp",
    "content": "#include \"settingsdialog.h\"\n\n#include <QColor>\n#include <QDebug>\n#include <QHBoxLayout>\n#include <QScrollArea>\n#include <QScrollBar>\n#include <QStackedLayout>\n#include <QTimer>\n#include <QVBoxLayout>\n\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n#include <widgets/lineedit.h>\n#include <widgets/mainwindow.h>\n#include <widgets/messageboxhelper.h>\n#include <widgets/propertydefs.h>\n#include <widgets/treewidget.h>\n#include <widgets/widgetsfactory.h>\n\n#include \"appearancepage.h\"\n#include \"editorpage.h\"\n#include \"fileassociationpage.h\"\n#include \"generalpage.h\"\n#include \"imagehostpage.h\"\n#include \"markdowneditorpage.h\"\n#include \"miscpage.h\"\n#include \"notemanagementpage.h\"\n#include \"quickaccesspage.h\"\n#include \"texteditorpage.h\"\n#include \"themepage.h\"\n#include \"vipage.h\"\n\nusing namespace vnotex;\n\nSettingsDialog::SettingsDialog(QWidget *p_parent) : Dialog(p_parent) {\n  setupUI();\n\n  setupPages();\n\n  connect(this, &QDialog::finished, this, &SettingsDialog::checkOnFinish);\n}\n\nvoid SettingsDialog::setupUI() {\n  auto *widget = new QWidget(this);\n  setCentralWidget(widget);\n\n  auto mainLayout = new QHBoxLayout(widget);\n\n  setupPageExplorer(mainLayout, widget);\n\n  {\n    m_scrollArea = new QScrollArea(widget);\n    m_scrollArea->setWidgetResizable(true);\n    mainLayout->addWidget(m_scrollArea, 6);\n\n    auto scrollWidget = new QWidget(m_scrollArea);\n    m_scrollArea->setWidget(scrollWidget);\n\n    m_pageLayout = new QStackedLayout(scrollWidget);\n  }\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Reset |\n                     QDialogButtonBox::Cancel);\n\n  setWindowTitle(tr(\"Settings\"));\n}\n\nvoid SettingsDialog::setupPageExplorer(QBoxLayout *p_layout, QWidget *p_parent) {\n  auto layout = new QVBoxLayout();\n\n  m_searchTimer = new QTimer(this);\n  m_searchTimer->setSingleShot(true);\n  m_searchTimer->setInterval(500);\n  connect(m_searchTimer, &QTimer::timeout, this, &SettingsDialog::search);\n\n  m_searchEdit = WidgetsFactory::createLineEdit(p_parent);\n  m_searchEdit->setPlaceholderText(tr(\"Search\"));\n  m_searchEdit->setClearButtonEnabled(true);\n  layout->addWidget(m_searchEdit);\n  connect(m_searchEdit, &QLineEdit::textChanged, m_searchTimer, QOverload<>::of(&QTimer::start));\n\n  m_pageExplorer = new TreeWidget(TreeWidget::EnhancedStyle, p_parent);\n  TreeWidget::setupSingleColumnHeaderlessTree(m_pageExplorer, false, false);\n  TreeWidget::showHorizontalScrollbar(m_pageExplorer);\n  m_pageExplorer->setMinimumWidth(128);\n  layout->addWidget(m_pageExplorer);\n\n  connect(m_pageExplorer, &QTreeWidget::currentItemChanged, this,\n          [this](QTreeWidgetItem *p_item, QTreeWidgetItem *p_previous) {\n            Q_UNUSED(p_previous);\n            auto page = itemPage(p_item);\n            m_pageLayout->setCurrentWidget(page);\n            auto vsb = m_scrollArea->verticalScrollBar();\n            if (vsb) {\n              vsb->setValue(0);\n            }\n          });\n\n  p_layout->addLayout(layout, 2);\n}\n\nvoid SettingsDialog::setupPages() {\n  // General.\n  {\n    auto page = new GeneralPage(this);\n    addPage(page);\n  }\n\n  // Note Management.\n  {\n    auto page = new NoteManagementPage(this);\n    addPage(page);\n  }\n\n  // Appearance.\n  {\n    auto page = new AppearancePage(this);\n    auto item = addPage(page);\n\n    // Theme.\n    {\n      auto subPage = new ThemePage(this);\n      addSubPage(subPage, item);\n    }\n  }\n\n  // Quick Access.\n  {\n    auto page = new QuickAccessPage(this);\n    addPage(page);\n  }\n\n  // Editor.\n  {\n    auto page = new EditorPage(this);\n    auto item = addPage(page);\n\n    // Image Host.\n    {\n      auto subPage = new ImageHostPage(this);\n      addSubPage(subPage, item);\n    }\n\n    // Vi.\n    {\n      auto subPage = new ViPage(this);\n      addSubPage(subPage, item);\n    }\n\n    // Text Editor.\n    {\n      auto subPage = new TextEditorPage(this);\n      addSubPage(subPage, item);\n    }\n\n    // Markdown Editor.\n    {\n      auto subPage = new MarkdownEditorPage(this);\n      addSubPage(subPage, item);\n    }\n  }\n\n  // Misc.\n  {\n    /*\n    auto page = new MiscPage(this);\n    addPage(page);\n    */\n  }\n\n  // File Association.\n  {\n    auto page = new FileAssociationPage(this);\n    addPage(page);\n  }\n\n  setChangesUnsaved(false);\n  m_pageExplorer->setCurrentItem(m_pageExplorer->topLevelItem(0), 0,\n                                 QItemSelectionModel::ClearAndSelect);\n  m_pageExplorer->expandAll();\n  m_pageLayout->setCurrentIndex(0);\n\n  m_ready = true;\n}\n\nvoid SettingsDialog::setupPage(QTreeWidgetItem *p_item, SettingsPage *p_page) {\n  p_item->setText(0, p_page->title());\n  p_item->setData(0, Qt::UserRole, QVariant::fromValue(p_page));\n\n  p_page->load();\n\n  connect(p_page, &SettingsPage::changed, this, [this]() {\n    if (m_ready) {\n      setChangesUnsaved(true);\n    }\n  });\n}\n\nSettingsPage *SettingsDialog::itemPage(QTreeWidgetItem *p_item) const {\n  Q_ASSERT(p_item);\n  return p_item->data(0, Qt::UserRole).value<SettingsPage *>();\n}\n\nvoid SettingsDialog::setChangesUnsaved(bool p_unsaved) {\n  m_changesUnsaved = p_unsaved;\n  setButtonEnabled(QDialogButtonBox::Apply, m_changesUnsaved);\n  setButtonEnabled(QDialogButtonBox::Reset, m_changesUnsaved);\n}\n\nvoid SettingsDialog::acceptedButtonClicked() {\n  if (m_changesUnsaved) {\n    if (savePages()) {\n      accept();\n    }\n    return;\n  }\n\n  accept();\n}\n\nvoid SettingsDialog::resetButtonClicked() {\n  clearInformationText();\n\n  m_ready = false;\n  forEachPage([](SettingsPage *p_page) {\n    p_page->reset();\n    return true;\n  });\n  m_ready = true;\n\n  setChangesUnsaved(false);\n}\n\nvoid SettingsDialog::appliedButtonClicked() {\n  Q_ASSERT(m_changesUnsaved);\n  savePages();\n}\n\nbool SettingsDialog::savePages() {\n  clearInformationText();\n\n  bool allSaved = true;\n  forEachPage([this, &allSaved](SettingsPage *p_page) {\n    if (!p_page->save()) {\n      allSaved = false;\n      m_pageLayout->setCurrentWidget(p_page);\n      if (!p_page->error().isEmpty()) {\n        setInformationText(p_page->error(), InformationLevel::Error);\n      }\n      return false;\n    }\n\n    return true;\n  });\n\n  if (allSaved) {\n    setChangesUnsaved(false);\n    return true;\n  }\n\n  return false;\n}\n\nvoid SettingsDialog::forEachPage(const std::function<bool(SettingsPage *)> &p_func) {\n  for (int i = 0; i < m_pageLayout->count(); ++i) {\n    auto page = static_cast<SettingsPage *>(m_pageLayout->widget(i));\n    if (!p_func(page)) {\n      break;\n    }\n  }\n}\n\nQTreeWidgetItem *SettingsDialog::addPage(SettingsPage *p_page) {\n  m_pageLayout->addWidget(p_page);\n\n  auto item = new QTreeWidgetItem(m_pageExplorer);\n  setupPage(item, p_page);\n  return item;\n}\n\nQTreeWidgetItem *SettingsDialog::addSubPage(SettingsPage *p_page, QTreeWidgetItem *p_parentItem) {\n  m_pageLayout->addWidget(p_page);\n\n  auto subItem = new QTreeWidgetItem(p_parentItem);\n  setupPage(subItem, p_page);\n  return subItem;\n}\n\nvoid SettingsDialog::search() {\n  auto keywords = m_searchEdit->text().trimmed();\n  TreeWidget::forEachItem(m_pageExplorer, [this, keywords](QTreeWidgetItem *item) {\n    auto page = itemPage(item);\n    if (page->search(keywords)) {\n      m_pageExplorer->mark(item, 0);\n    } else {\n      m_pageExplorer->unmark(item, 0);\n    }\n    return true;\n  });\n}\n\nvoid SettingsDialog::checkOnFinish() {\n  // Check whether need to prompt for restart.\n  forEachPage([this](const SettingsPage *p_page) {\n    if (p_page->isRestartNeeded()) {\n      // Restart VNote.\n      int ret = MessageBoxHelper::questionYesNo(\n          MessageBoxHelper::Type::Information,\n          tr(\"A restart of VNote may be needed to make changes take effect. Restart VNote now?\"),\n          QString(), QString(), this);\n      if (ret == QMessageBox::Yes) {\n        QMetaObject::invokeMethod(VNoteX::getInst().getMainWindow(), &MainWindow::restart,\n                                  Qt::QueuedConnection);\n      }\n      return false;\n    }\n    return true;\n  });\n}\n"
  },
  {
    "path": "src/widgets/dialogs/settings/settingsdialog.h",
    "content": "#ifndef SETTINGSDIALOG_H\n#define SETTINGSDIALOG_H\n\n#include \"../dialog.h\"\n\n#include <functional>\n\nclass QStackedLayout;\nclass QLineEdit;\nclass QTreeWidgetItem;\nclass QScrollArea;\nclass QTimer;\n\nnamespace vnotex {\nclass TreeWidget;\nclass SettingsPage;\n\nclass SettingsDialog : public Dialog {\n  Q_OBJECT\npublic:\n  explicit SettingsDialog(QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\n  void resetButtonClicked() Q_DECL_OVERRIDE;\n\n  void appliedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupPageExplorer(QBoxLayout *p_layout, QWidget *p_parent);\n\n  void setupPages();\n\n  void setupPage(QTreeWidgetItem *p_item, SettingsPage *p_page);\n\n  SettingsPage *itemPage(QTreeWidgetItem *p_item) const;\n\n  void setChangesUnsaved(bool p_unsaved);\n\n  bool savePages();\n\n  // @p_func: return true to continue the iteration.\n  void forEachPage(const std::function<bool(SettingsPage *)> &p_func);\n\n  QTreeWidgetItem *addPage(SettingsPage *p_page);\n\n  QTreeWidgetItem *addSubPage(SettingsPage *p_page, QTreeWidgetItem *p_parentItem);\n\n  void search();\n\n  void checkOnFinish();\n\n  QLineEdit *m_searchEdit = nullptr;\n\n  TreeWidget *m_pageExplorer = nullptr;\n\n  QScrollArea *m_scrollArea = nullptr;\n\n  QStackedLayout *m_pageLayout = nullptr;\n\n  bool m_changesUnsaved = false;\n\n  bool m_ready = false;\n\n  QTimer *m_searchTimer = nullptr;\n};\n} // namespace vnotex\n\n#endif // SETTINGSDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/settingspage.cpp",
    "content": "#include \"settingspage.h\"\n\n#include <utils/widgetutils.h>\n#include <widgets/propertydefs.h>\n\nusing namespace vnotex;\n\nSettingsPage::SettingsPage(QWidget *p_parent) : QWidget(p_parent) {}\n\nSettingsPage::~SettingsPage() {}\n\nbool SettingsPage::search(const QString &p_key) {\n  bool hit = false;\n\n  if (!p_key.isEmpty() && title().contains(p_key, Qt::CaseInsensitive)) {\n    hit = true;\n  }\n\n  for (const auto &item : m_searchItems) {\n    if (!p_key.isEmpty() && item.m_words.contains(p_key, Qt::CaseInsensitive)) {\n      // Continue to search all the matched targets.\n      hit = true;\n      searchHit(item.m_target, true);\n    } else {\n      searchHit(item.m_target, false);\n    }\n  }\n\n  return hit;\n}\n\nvoid SettingsPage::searchHit(QWidget *p_target, bool p_hit) {\n  if (!p_target) {\n    return;\n  }\n\n  if (p_target->property(PropertyDefs::c_hitSettingWidget).toBool() == p_hit) {\n    return;\n  }\n\n  WidgetUtils::setPropertyDynamically(p_target, PropertyDefs::c_hitSettingWidget, p_hit);\n}\n\nvoid SettingsPage::addSearchItem(const QString &p_words, QWidget *p_target) {\n  m_searchItems.push_back(SearchItem(p_words, p_target));\n}\n\nvoid SettingsPage::addSearchItem(const QString &p_name, const QString &p_tooltip,\n                                 QWidget *p_target) {\n  addSearchItem(p_name + QStringLiteral(\" \") + p_tooltip, p_target);\n}\n\nvoid SettingsPage::pageIsChanged() {\n  m_changed = true;\n  emit changed();\n}\n\nvoid SettingsPage::pageIsChangedWithRestartNeeded() {\n  m_changed = true;\n  m_restartNeeded = true;\n  emit changed();\n}\n\nvoid SettingsPage::load() {\n  m_loading = true;\n  loadInternal();\n  m_loading = false;\n  m_changed = false;\n  m_restartNeeded = false;\n}\n\nbool SettingsPage::save() {\n  if (!m_changed) {\n    return true;\n  }\n\n  if (saveInternal()) {\n    m_changed = false;\n    return true;\n  }\n\n  return false;\n}\n\nvoid SettingsPage::reset() {\n  if (!m_changed) {\n    return;\n  }\n\n  load();\n}\n\nconst QString &SettingsPage::error() const { return m_error; }\n\nvoid SettingsPage::setError(const QString &p_err) { m_error = p_err; }\n\nbool SettingsPage::isRestartNeeded() const { return m_restartNeeded; }\n\nbool SettingsPage::isLoading() const { return m_loading; }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/settingspage.h",
    "content": "#ifndef SETTINGSPAGE_H\n#define SETTINGSPAGE_H\n\n#include <QWidget>\n\nnamespace vnotex {\nclass SettingsPage : public QWidget {\n  Q_OBJECT\npublic:\n  explicit SettingsPage(QWidget *p_parent = nullptr);\n\n  virtual ~SettingsPage();\n\n  void load();\n\n  bool save();\n\n  void reset();\n\n  virtual QString title() const = 0;\n\n  bool search(const QString &p_key);\n\n  const QString &error() const;\n\n  bool isRestartNeeded() const;\n\nsignals:\n  void changed();\n\nprotected:\n  virtual void loadInternal() = 0;\n\n  virtual bool saveInternal() = 0;\n\n  // Subclass could override this method to highlight matched target.\n  virtual void searchHit(QWidget *p_target, bool p_hit);\n\n  void addSearchItem(const QString &p_words, QWidget *p_target);\n\n  void addSearchItem(const QString &p_name, const QString &p_tooltip, QWidget *p_target);\n\n  void setError(const QString &p_err);\n\n  bool isLoading() const;\n\nprotected slots:\n  void pageIsChanged();\n\n  void pageIsChangedWithRestartNeeded();\n\nprivate:\n  struct SearchItem {\n    SearchItem() = default;\n\n    SearchItem(const QString &p_words, QWidget *p_target) : m_words(p_words), m_target(p_target) {}\n\n    QString m_words;\n    QWidget *m_target = nullptr;\n  };\n\n  QVector<SearchItem> m_searchItems;\n\n  bool m_changed = false;\n\n  bool m_restartNeeded = false;\n\n  bool m_loading = false;\n\n  QString m_error;\n};\n} // namespace vnotex\n\n#endif // SETTINGSPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/texteditorpage.cpp",
    "content": "#include \"texteditorpage.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QFormLayout>\n#include <QSpinBox>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/texteditorconfig.h>\n#include <utils/widgetutils.h>\n#include <widgets/widgetsfactory.h>\n\n#include \"editorpage.h\"\n\nusing namespace vnotex;\n\nTextEditorPage::TextEditorPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid TextEditorPage::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n\n  {\n    m_lineNumberComboBox = WidgetsFactory::createComboBox(this);\n    m_lineNumberComboBox->setToolTip(tr(\"Line number type\"));\n\n    m_lineNumberComboBox->addItem(tr(\"None\"), (int)TextEditorConfig::LineNumberType::None);\n    m_lineNumberComboBox->addItem(tr(\"Absolute\"), (int)TextEditorConfig::LineNumberType::Absolute);\n    m_lineNumberComboBox->addItem(tr(\"Relative\"), (int)TextEditorConfig::LineNumberType::Relative);\n\n    const QString label(tr(\"Line number:\"));\n    mainLayout->addRow(label, m_lineNumberComboBox);\n    addSearchItem(label, m_lineNumberComboBox->toolTip(), m_lineNumberComboBox);\n    connect(m_lineNumberComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Fold text\"));\n    m_textFoldingCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_textFoldingCheckBox->setToolTip(tr(\"Text folding\"));\n    mainLayout->addRow(m_textFoldingCheckBox);\n    addSearchItem(label, m_textFoldingCheckBox->toolTip(), m_textFoldingCheckBox);\n    connect(m_textFoldingCheckBox, &QCheckBox::stateChanged, this, &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    m_inputModeComboBox = WidgetsFactory::createComboBox(this);\n    m_inputModeComboBox->setToolTip(tr(\"Input mode like Vi\"));\n\n    m_inputModeComboBox->addItem(tr(\"Normal\"), (int)TextEditorConfig::InputMode::NormalMode);\n    m_inputModeComboBox->addItem(tr(\"Vi\"), (int)TextEditorConfig::InputMode::ViMode);\n    m_inputModeComboBox->addItem(tr(\"VSCode\"), (int)TextEditorConfig::InputMode::VscodeMode);\n\n    const QString label(tr(\"Input mode:\"));\n    mainLayout->addRow(label, m_inputModeComboBox);\n    addSearchItem(label, m_inputModeComboBox->toolTip(), m_inputModeComboBox);\n    connect(m_inputModeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    m_centerCursorComboBox = WidgetsFactory::createComboBox(this);\n    m_centerCursorComboBox->setToolTip(tr(\"Force to center text cursor\"));\n\n    m_centerCursorComboBox->addItem(tr(\"Never\"), (int)TextEditorConfig::CenterCursor::NeverCenter);\n    m_centerCursorComboBox->addItem(tr(\"Always Center\"),\n                                    (int)TextEditorConfig::CenterCursor::AlwaysCenter);\n    m_centerCursorComboBox->addItem(tr(\"Center On Bottom\"),\n                                    (int)TextEditorConfig::CenterCursor::CenterOnBottom);\n\n    const QString label(tr(\"Center cursor:\"));\n    mainLayout->addRow(label, m_centerCursorComboBox);\n    addSearchItem(label, m_centerCursorComboBox->toolTip(), m_centerCursorComboBox);\n    connect(m_centerCursorComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    m_wrapModeComboBox = WidgetsFactory::createComboBox(this);\n    m_wrapModeComboBox->setToolTip(tr(\"Word wrap mode of editor\"));\n\n    m_wrapModeComboBox->addItem(tr(\"No Wrap\"), (int)TextEditorConfig::WrapMode::NoWrap);\n    m_wrapModeComboBox->addItem(tr(\"Word Wrap\"), (int)TextEditorConfig::WrapMode::WordWrap);\n    m_wrapModeComboBox->addItem(tr(\"Wrap Anywhere\"), (int)TextEditorConfig::WrapMode::WrapAnywhere);\n    m_wrapModeComboBox->addItem(tr(\"Word Wrap Or Wrap Anywhere\"),\n                                (int)TextEditorConfig::WrapMode::WordWrapOrAnywhere);\n\n    const QString label(tr(\"Wrap mode:\"));\n    mainLayout->addRow(label, m_wrapModeComboBox);\n    addSearchItem(label, m_wrapModeComboBox->toolTip(), m_wrapModeComboBox);\n    connect(m_wrapModeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n            &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Expand Tab\"));\n    m_expandTabCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_expandTabCheckBox->setToolTip(tr(\"Expand Tab into spaces\"));\n    mainLayout->addRow(m_expandTabCheckBox);\n    addSearchItem(label, m_expandTabCheckBox->toolTip(), m_expandTabCheckBox);\n    connect(m_expandTabCheckBox, &QCheckBox::stateChanged, this, &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    m_tabStopWidthSpinBox = WidgetsFactory::createSpinBox(this);\n    m_tabStopWidthSpinBox->setToolTip(tr(\"Number of spaces to use where Tab is needed\"));\n\n    m_tabStopWidthSpinBox->setRange(1, 32);\n    m_tabStopWidthSpinBox->setSingleStep(1);\n\n    const QString label(tr(\"Tab stop width:\"));\n    mainLayout->addRow(label, m_tabStopWidthSpinBox);\n    addSearchItem(label, m_tabStopWidthSpinBox->toolTip(), m_tabStopWidthSpinBox);\n    connect(m_tabStopWidthSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this,\n            &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Highlight whitespace\"));\n    m_highlightWhitespaceCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_highlightWhitespaceCheckBox->setToolTip(tr(\"Highlight Tab and trailing space\"));\n    mainLayout->addRow(m_highlightWhitespaceCheckBox);\n    addSearchItem(label, m_highlightWhitespaceCheckBox->toolTip(), m_highlightWhitespaceCheckBox);\n    connect(m_highlightWhitespaceCheckBox, &QCheckBox::stateChanged, this,\n            &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    m_zoomDeltaSpinBox = WidgetsFactory::createSpinBox(this);\n    m_zoomDeltaSpinBox->setToolTip(tr(\"Zoom delta of the basic font size\"));\n\n    m_zoomDeltaSpinBox->setRange(-20, 20);\n    m_zoomDeltaSpinBox->setSingleStep(1);\n\n    const QString label(tr(\"Zoom delta:\"));\n    mainLayout->addRow(label, m_zoomDeltaSpinBox);\n    addSearchItem(label, m_zoomDeltaSpinBox->toolTip(), m_zoomDeltaSpinBox);\n    connect(m_zoomDeltaSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), this,\n            &TextEditorPage::pageIsChanged);\n  }\n\n  {\n    const QString label(tr(\"Spell check\"));\n    m_spellCheckCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_spellCheckCheckBox->setToolTip(tr(\"Spell check\"));\n    mainLayout->addRow(m_spellCheckCheckBox);\n    addSearchItem(label, m_spellCheckCheckBox->toolTip(), m_spellCheckCheckBox);\n    connect(m_spellCheckCheckBox, &QCheckBox::stateChanged, this, &TextEditorPage::pageIsChanged);\n  }\n}\n\nvoid TextEditorPage::loadInternal() {\n  const auto &textConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig();\n\n  {\n    int idx = m_lineNumberComboBox->findData(static_cast<int>(textConfig.getLineNumberType()));\n    Q_ASSERT(idx != -1);\n    m_lineNumberComboBox->setCurrentIndex(idx);\n  }\n\n  m_textFoldingCheckBox->setChecked(textConfig.getTextFoldingEnabled());\n\n  {\n    int idx = m_inputModeComboBox->findData(static_cast<int>(textConfig.getInputMode()));\n    Q_ASSERT(idx != -1);\n    m_inputModeComboBox->setCurrentIndex(idx);\n  }\n\n  {\n    int idx = m_centerCursorComboBox->findData(static_cast<int>(textConfig.getCenterCursor()));\n    Q_ASSERT(idx != -1);\n    m_centerCursorComboBox->setCurrentIndex(idx);\n  }\n\n  {\n    int idx = m_wrapModeComboBox->findData(static_cast<int>(textConfig.getWrapMode()));\n    Q_ASSERT(idx != -1);\n    m_wrapModeComboBox->setCurrentIndex(idx);\n  }\n\n  m_expandTabCheckBox->setChecked(textConfig.getExpandTabEnabled());\n\n  m_tabStopWidthSpinBox->setValue(textConfig.getTabStopWidth());\n\n  m_highlightWhitespaceCheckBox->setChecked(textConfig.getHighlightWhitespaceEnabled());\n\n  m_zoomDeltaSpinBox->setValue(textConfig.getZoomDelta());\n\n  m_spellCheckCheckBox->setChecked(textConfig.isSpellCheckEnabled());\n}\n\nbool TextEditorPage::saveInternal() {\n  auto &textConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig();\n\n  {\n    auto lineNumber = m_lineNumberComboBox->currentData().toInt();\n    textConfig.setLineNumberType(static_cast<TextEditorConfig::LineNumberType>(lineNumber));\n  }\n\n  textConfig.setTextFoldingEnabled(m_textFoldingCheckBox->isChecked());\n\n  {\n    auto inputMode = m_inputModeComboBox->currentData().toInt();\n    textConfig.setInputMode(static_cast<TextEditorConfig::InputMode>(inputMode));\n  }\n\n  {\n    auto centerCursor = m_centerCursorComboBox->currentData().toInt();\n    textConfig.setCenterCursor(static_cast<TextEditorConfig::CenterCursor>(centerCursor));\n  }\n\n  {\n    auto wrapMode = m_wrapModeComboBox->currentData().toInt();\n    textConfig.setWrapMode(static_cast<TextEditorConfig::WrapMode>(wrapMode));\n  }\n\n  textConfig.setExpandTabEnabled(m_expandTabCheckBox->isChecked());\n\n  textConfig.setTabStopWidth(m_tabStopWidthSpinBox->value());\n\n  textConfig.setHighlightWhitespaceEnabled(m_highlightWhitespaceCheckBox->isChecked());\n\n  textConfig.setZoomDelta(m_zoomDeltaSpinBox->value());\n\n  textConfig.setSpellCheckEnabled(m_spellCheckCheckBox->isChecked());\n\n  EditorPage::notifyEditorConfigChange();\n\n  return true;\n}\n\nQString TextEditorPage::title() const { return tr(\"Text Editor\"); }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/texteditorpage.h",
    "content": "#ifndef TEXTEDITORPAGE_H\n#define TEXTEDITORPAGE_H\n\n#include \"settingspage.h\"\n\nclass QComboBox;\nclass QCheckBox;\nclass QSpinBox;\n\nnamespace vnotex {\nclass TextEditorPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit TextEditorPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QComboBox *m_lineNumberComboBox = nullptr;\n\n  QCheckBox *m_textFoldingCheckBox = nullptr;\n\n  QComboBox *m_inputModeComboBox = nullptr;\n\n  QComboBox *m_centerCursorComboBox = nullptr;\n\n  QComboBox *m_wrapModeComboBox = nullptr;\n\n  QCheckBox *m_expandTabCheckBox = nullptr;\n\n  QSpinBox *m_tabStopWidthSpinBox = nullptr;\n\n  QCheckBox *m_highlightWhitespaceCheckBox = nullptr;\n\n  QSpinBox *m_zoomDeltaSpinBox = nullptr;\n\n  QCheckBox *m_spellCheckCheckBox = nullptr;\n};\n} // namespace vnotex\n\n#endif // TEXTEDITORPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/themepage.cpp",
    "content": "#include \"themepage.h\"\n\n#include <QComboBox>\n#include <QDebug>\n#include <QGridLayout>\n#include <QGroupBox>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QScrollArea>\n#include <QUrl>\n#include <QVBoxLayout>\n\n#include <QListWidgetItem>\n#include <QPushButton>\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n#include <widgets/listwidget.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nThemePage::ThemePage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid ThemePage::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n\n  // Theme.\n  {\n    auto layout = new QGridLayout();\n    mainLayout->addLayout(layout);\n\n    m_themeListWidget = new ListWidget(this);\n    layout->addWidget(m_themeListWidget, 0, 0, 3, 2);\n    connect(m_themeListWidget, &QListWidget::currentItemChanged, this,\n            [this](QListWidgetItem *p_current, QListWidgetItem *p_previous) {\n              Q_UNUSED(p_previous);\n              loadThemePreview(p_current ? p_current->data(Qt::UserRole).toString() : QString());\n              pageIsChangedWithRestartNeeded();\n            });\n\n    auto refreshBtn = new QPushButton(tr(\"Refresh\"), this);\n    layout->addWidget(refreshBtn, 3, 0, 1, 1);\n    connect(refreshBtn, &QPushButton::clicked, this, [this]() {\n      VNoteX::getInst().getThemeMgr().refresh();\n      loadThemes();\n    });\n\n    auto addBtn = new QPushButton(tr(\"Add/Delete\"), this);\n    layout->addWidget(addBtn, 3, 1, 1, 1);\n    // TODO: open an editor to edit the theme list.\n    connect(addBtn, &QPushButton::clicked, this, []() {\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(ConfigMgr::getInst().getUserThemeFolder()));\n    });\n\n    auto updateBtn = new QPushButton(tr(\"Update\"), this);\n    layout->addWidget(updateBtn, 4, 0, 1, 1);\n\n    auto openLocationBtn = new QPushButton(tr(\"Open Location\"), this);\n    layout->addWidget(openLocationBtn, 4, 1, 1, 1);\n    connect(openLocationBtn, &QPushButton::clicked, this, [this]() {\n      auto theme = VNoteX::getInst().getThemeMgr().findTheme(currentTheme());\n      if (theme) {\n        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(theme->m_folderPath));\n      }\n    });\n\n    m_noPreviewText = tr(\"No Preview Available\");\n    m_previewLabel = new QLabel(m_noPreviewText, this);\n    m_previewLabel->setScaledContents(true);\n    m_previewLabel->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);\n    auto scrollArea = new QScrollArea(this);\n    scrollArea->setBackgroundRole(QPalette::Dark);\n    scrollArea->setWidget(m_previewLabel);\n    scrollArea->setMinimumSize(256, 256);\n    layout->addWidget(scrollArea, 0, 2, 5, 1);\n  }\n\n  mainLayout->addStretch();\n}\n\nvoid ThemePage::loadInternal() { loadThemes(); }\n\nbool ThemePage::saveInternal() {\n  auto theme = currentTheme();\n  if (!theme.isEmpty()) {\n    ConfigMgr::getInst().getCoreConfig().setTheme(theme);\n  }\n\n  return true;\n}\n\nQString ThemePage::title() const { return tr(\"Theme\"); }\n\nvoid ThemePage::loadThemes() {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const auto &themes = themeMgr.getAllThemes();\n\n  m_themeListWidget->clear();\n  for (const auto &info : themes) {\n    auto item = new QListWidgetItem(info.m_displayName, m_themeListWidget);\n    item->setData(Qt::UserRole, info.m_name);\n    item->setToolTip(info.m_folderPath);\n  }\n\n  // Set current theme.\n  bool found = false;\n  const auto curThemeName = themeMgr.getCurrentTheme().name();\n  for (int i = 0; i < m_themeListWidget->count(); ++i) {\n    if (m_themeListWidget->item(i)->data(Qt::UserRole).toString() == curThemeName) {\n      m_themeListWidget->setCurrentRow(i);\n      found = true;\n      break;\n    }\n  }\n\n  if (!found && m_themeListWidget->count() > 0) {\n    m_themeListWidget->setCurrentRow(0);\n  }\n}\n\nvoid ThemePage::loadThemePreview(const QString &p_name) {\n  if (p_name.isEmpty()) {\n    m_previewLabel->setText(m_noPreviewText);\n  }\n\n  auto pixmap = VNoteX::getInst().getThemeMgr().getThemePreview(p_name);\n  if (pixmap.isNull()) {\n    m_previewLabel->setText(m_noPreviewText);\n  } else {\n    const int pwidth = 512;\n    m_previewLabel->setPixmap(pixmap.scaledToWidth(pwidth, Qt::SmoothTransformation));\n  }\n  m_previewLabel->adjustSize();\n}\n\nQString ThemePage::currentTheme() const {\n  auto item = m_themeListWidget->currentItem();\n  if (item) {\n    return item->data(Qt::UserRole).toString();\n  }\n  return QString();\n}\n"
  },
  {
    "path": "src/widgets/dialogs/settings/themepage.h",
    "content": "#ifndef THEMEPAGE_H\n#define THEMEPAGE_H\n\n#include \"settingspage.h\"\n\nclass QListWidget;\nclass QLabel;\n\nnamespace vnotex {\nclass ThemePage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit ThemePage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void loadThemes();\n\n  void loadThemePreview(const QString &p_name);\n\n  QString currentTheme() const;\n\n  QListWidget *m_themeListWidget = nullptr;\n\n  QLabel *m_previewLabel = nullptr;\n\n  QString m_noPreviewText;\n};\n} // namespace vnotex\n\n#endif // THEMEPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/settings/vipage.cpp",
    "content": "#include \"vipage.h\"\n\n#include <QCheckBox>\n#include <QFormLayout>\n\n#include <vtextedit/viconfig.h>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <utils/widgetutils.h>\n#include <widgets/widgetsfactory.h>\n\n#include \"editorpage.h\"\n\nusing namespace vnotex;\n\nViPage::ViPage(QWidget *p_parent) : SettingsPage(p_parent) { setupUI(); }\n\nvoid ViPage::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n\n  {\n    const QString label(tr(\"Ctrl+C/X to copy/cut\"));\n    m_controlCToCopyCheckBox = WidgetsFactory::createCheckBox(label, this);\n    m_controlCToCopyCheckBox->setToolTip(tr(\"Use Ctrl+C/X to copy/cut text\"));\n    mainLayout->addRow(m_controlCToCopyCheckBox);\n    addSearchItem(label, m_controlCToCopyCheckBox->toolTip(), m_controlCToCopyCheckBox);\n    connect(m_controlCToCopyCheckBox, &QCheckBox::stateChanged, this, &ViPage::pageIsChanged);\n  }\n}\n\nvoid ViPage::loadInternal() {\n  const auto &viConfig = ConfigMgr::getInst().getEditorConfig().getViConfig();\n\n  m_controlCToCopyCheckBox->setChecked(viConfig->m_controlCToCopy);\n}\n\nbool ViPage::saveInternal() {\n  auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  auto &viConfig = editorConfig.getViConfig();\n\n  viConfig->m_controlCToCopy = m_controlCToCopyCheckBox->isChecked();\n\n  editorConfig.update();\n\n  EditorPage::notifyEditorConfigChange();\n\n  return true;\n}\n\nQString ViPage::title() const { return tr(\"Vi Input Mode\"); }\n"
  },
  {
    "path": "src/widgets/dialogs/settings/vipage.h",
    "content": "#ifndef VIPAGE_H\n#define VIPAGE_H\n\n#include \"settingspage.h\"\n\nclass QCheckBox;\n\nnamespace vnotex {\nclass ViPage : public SettingsPage {\n  Q_OBJECT\npublic:\n  explicit ViPage(QWidget *p_parent = nullptr);\n\n  QString title() const Q_DECL_OVERRIDE;\n\nprotected:\n  void loadInternal() Q_DECL_OVERRIDE;\n\n  bool saveInternal() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  QCheckBox *m_controlCToCopyCheckBox = nullptr;\n};\n} // namespace vnotex\n\n#endif // VIPAGE_H\n"
  },
  {
    "path": "src/widgets/dialogs/snippetinfowidget.cpp",
    "content": "#include \"snippetinfowidget.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QFormLayout>\n#include <QLineEdit>\n#include <QPlainTextEdit>\n\n#include <snippet/snippet.h>\n#include <snippet/snippetmgr.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nSnippetInfoWidget::SnippetInfoWidget(QWidget *p_parent) : QWidget(p_parent), m_mode(Mode::Create) {\n  setupUI();\n}\n\nSnippetInfoWidget::SnippetInfoWidget(const Snippet *p_snippet, QWidget *p_parent)\n    : QWidget(p_parent), m_mode(Mode::Edit) {\n  setupUI();\n\n  setSnippet(p_snippet);\n}\n\nvoid SnippetInfoWidget::setupUI() {\n  auto mainLayout = WidgetsFactory::createFormLayout(this);\n\n  m_nameLineEdit = WidgetsFactory::createLineEdit(this);\n  auto validator = new QRegularExpressionValidator(\n      QRegularExpression(PathUtils::c_fileNameRegularExpression), m_nameLineEdit);\n  m_nameLineEdit->setValidator(validator);\n  connect(m_nameLineEdit, &QLineEdit::textEdited, this, &SnippetInfoWidget::inputEdited);\n  mainLayout->addRow(tr(\"Name:\"), m_nameLineEdit);\n\n  setFocusProxy(m_nameLineEdit);\n\n  m_descriptionLineEdit = WidgetsFactory::createLineEdit(this);\n  connect(m_descriptionLineEdit, &QLineEdit::textEdited, this, &SnippetInfoWidget::inputEdited);\n  mainLayout->addRow(tr(\"Description:\"), m_descriptionLineEdit);\n\n  setupTypeComboBox(this);\n  mainLayout->addRow(tr(\"Type:\"), m_typeComboBox);\n\n  setupShortcutComboBox(this);\n  mainLayout->addRow(tr(\"Shortcut:\"), m_shortcutComboBox);\n\n  m_cursorMarkLineEdit = WidgetsFactory::createLineEdit(this);\n  m_cursorMarkLineEdit->setText(Snippet::c_defaultCursorMark);\n  m_cursorMarkLineEdit->setToolTip(\n      tr(\"A mark in the snippet content indicating the cursor position after the application\"));\n  connect(m_cursorMarkLineEdit, &QLineEdit::textEdited, this, &SnippetInfoWidget::inputEdited);\n  mainLayout->addRow(tr(\"Cursor mark:\"), m_cursorMarkLineEdit);\n\n  m_selectionMarkLineEdit = WidgetsFactory::createLineEdit(this);\n  m_selectionMarkLineEdit->setText(Snippet::c_defaultSelectionMark);\n  m_selectionMarkLineEdit->setToolTip(tr(\"A mark in the snippet content that will be replaced with \"\n                                         \"the selected text before the application\"));\n  connect(m_selectionMarkLineEdit, &QLineEdit::textEdited, this, &SnippetInfoWidget::inputEdited);\n  mainLayout->addRow(tr(\"Selection mark:\"), m_selectionMarkLineEdit);\n\n  m_indentAsFirstLineCheckBox = WidgetsFactory::createCheckBox(tr(\"Indent as first line\"), this);\n  m_indentAsFirstLineCheckBox->setChecked(true);\n  connect(m_indentAsFirstLineCheckBox, &QCheckBox::stateChanged, this,\n          &SnippetInfoWidget::inputEdited);\n  mainLayout->addRow(m_indentAsFirstLineCheckBox);\n\n  m_contentTextEdit = WidgetsFactory::createPlainTextEdit(this);\n  m_contentTextEdit->setPlaceholderText(\n      tr(\"Nested snippet is supported, like `%time%` to embed the snippet `time`\"));\n  connect(m_contentTextEdit, &QPlainTextEdit::textChanged, this, &SnippetInfoWidget::inputEdited);\n  mainLayout->addRow(tr(\"Content:\"), m_contentTextEdit);\n}\n\nvoid SnippetInfoWidget::setupTypeComboBox(QWidget *p_parent) {\n  m_typeComboBox = WidgetsFactory::createComboBox(p_parent);\n  m_typeComboBox->addItem(tr(\"Text\"), static_cast<int>(Snippet::Type::Text));\n  if (m_mode == Mode::Edit) {\n    m_typeComboBox->addItem(tr(\"Dynamic\"), static_cast<int>(Snippet::Type::Dynamic));\n  }\n  connect(m_typeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n          [this]() { emit inputEdited(); });\n}\n\nvoid SnippetInfoWidget::setupShortcutComboBox(QWidget *p_parent) {\n  m_shortcutComboBox = WidgetsFactory::createComboBox(p_parent);\n  if (m_mode == Mode::Create) {\n    initShortcutComboBox();\n  }\n  connect(m_shortcutComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,\n          &SnippetInfoWidget::inputEdited);\n}\n\nQString SnippetInfoWidget::getName() const { return m_nameLineEdit->text(); }\n\nSnippet::Type SnippetInfoWidget::getType() const {\n  return static_cast<Snippet::Type>(m_typeComboBox->currentData().toInt());\n}\n\nint SnippetInfoWidget::getShortcut() const { return m_shortcutComboBox->currentData().toInt(); }\n\nQString SnippetInfoWidget::getCursorMark() const { return m_cursorMarkLineEdit->text(); }\n\nQString SnippetInfoWidget::getSelectionMark() const { return m_selectionMarkLineEdit->text(); }\n\nbool SnippetInfoWidget::shouldIndentAsFirstLine() const {\n  return m_indentAsFirstLineCheckBox->isChecked();\n}\n\nQString SnippetInfoWidget::getContent() const { return m_contentTextEdit->toPlainText(); }\n\nQString SnippetInfoWidget::getDescription() const { return m_descriptionLineEdit->text(); }\n\nvoid SnippetInfoWidget::setSnippet(const Snippet *p_snippet) {\n  if (m_snippet == p_snippet) {\n    return;\n  }\n\n  Q_ASSERT(m_mode == Mode::Edit);\n  m_snippet = p_snippet;\n  initShortcutComboBox();\n  if (m_snippet) {\n    const bool readOnly = m_snippet->isReadOnly();\n    m_nameLineEdit->setText(m_snippet->getName());\n    m_nameLineEdit->setEnabled(!readOnly);\n    m_descriptionLineEdit->setText(m_snippet->getDescription());\n    m_descriptionLineEdit->setEnabled(!readOnly);\n    m_typeComboBox->setCurrentIndex(\n        m_typeComboBox->findData(static_cast<int>(m_snippet->getType())));\n    m_typeComboBox->setEnabled(!readOnly);\n    m_shortcutComboBox->setCurrentIndex(m_shortcutComboBox->findData(m_snippet->getShortcut()));\n    m_shortcutComboBox->setEnabled(!readOnly);\n    m_cursorMarkLineEdit->setText(m_snippet->getCursorMark());\n    m_cursorMarkLineEdit->setEnabled(!readOnly);\n    m_selectionMarkLineEdit->setText(m_snippet->getSelectionMark());\n    m_selectionMarkLineEdit->setEnabled(!readOnly);\n    m_indentAsFirstLineCheckBox->setChecked(m_snippet->isIndentAsFirstLineEnabled());\n    m_indentAsFirstLineCheckBox->setEnabled(!readOnly);\n    m_contentTextEdit->setPlainText(m_snippet->getContent());\n    m_contentTextEdit->setEnabled(!readOnly);\n  } else {\n    m_nameLineEdit->clear();\n    m_descriptionLineEdit->clear();\n    m_typeComboBox->setCurrentIndex(\n        m_typeComboBox->findData(static_cast<int>(Snippet::Type::Text)));\n    m_shortcutComboBox->setCurrentIndex(m_shortcutComboBox->findData(Snippet::InvalidShortcut));\n    m_cursorMarkLineEdit->setText(Snippet::c_defaultCursorMark);\n    m_selectionMarkLineEdit->setText(Snippet::c_defaultSelectionMark);\n    m_indentAsFirstLineCheckBox->setChecked(true);\n    m_contentTextEdit->clear();\n  }\n}\n\nvoid SnippetInfoWidget::initShortcutComboBox() {\n  m_shortcutComboBox->clear();\n  m_shortcutComboBox->addItem(tr(\"None\"), Snippet::InvalidShortcut);\n  const auto shortcuts = SnippetMgr::getInst().getAvailableShortcuts(\n      m_snippet ? m_snippet->getShortcut() : Snippet::InvalidShortcut);\n  for (auto sh : shortcuts) {\n    m_shortcutComboBox->addItem(Utils::intToString(sh, 2), sh);\n  }\n}\n"
  },
  {
    "path": "src/widgets/dialogs/snippetinfowidget.h",
    "content": "#ifndef SNIPPETINFOWIDGET_H\n#define SNIPPETINFOWIDGET_H\n\n#include <QWidget>\n\n#include <snippet/snippet.h>\n\nclass QLineEdit;\nclass QComboBox;\nclass QCheckBox;\nclass QPlainTextEdit;\n\nnamespace vnotex {\nclass SnippetInfoWidget : public QWidget {\n  Q_OBJECT\npublic:\n  enum Mode { Create, Edit };\n\n  explicit SnippetInfoWidget(QWidget *p_parent = nullptr);\n\n  SnippetInfoWidget(const Snippet *p_snippet, QWidget *p_parent = nullptr);\n\n  QString getName() const;\n\n  Snippet::Type getType() const;\n\n  int getShortcut() const;\n\n  QString getCursorMark() const;\n\n  QString getSelectionMark() const;\n\n  bool shouldIndentAsFirstLine() const;\n\n  QString getContent() const;\n\n  QString getDescription() const;\n\nsignals:\n  void inputEdited();\n\nprivate:\n  void setupUI();\n\n  void setupTypeComboBox(QWidget *p_parent);\n\n  void setupShortcutComboBox(QWidget *p_parent);\n\n  void setSnippet(const Snippet *p_snippet);\n\n  void initShortcutComboBox();\n\n  Mode m_mode = Mode::Create;\n\n  const Snippet *m_snippet = nullptr;\n\n  QLineEdit *m_nameLineEdit = nullptr;\n\n  QLineEdit *m_descriptionLineEdit = nullptr;\n\n  QComboBox *m_typeComboBox = nullptr;\n\n  QComboBox *m_shortcutComboBox = nullptr;\n\n  QLineEdit *m_cursorMarkLineEdit = nullptr;\n\n  QLineEdit *m_selectionMarkLineEdit = nullptr;\n\n  QCheckBox *m_indentAsFirstLineCheckBox = nullptr;\n\n  QPlainTextEdit *m_contentTextEdit = nullptr;\n};\n} // namespace vnotex\n\n#endif // SNIPPETINFOWIDGET_H\n"
  },
  {
    "path": "src/widgets/dialogs/snippetpropertiesdialog.cpp",
    "content": "#include \"snippetpropertiesdialog.h\"\n\n#include <core/exception.h>\n#include <snippet/snippet.h>\n#include <snippet/snippetmgr.h>\n\n#include \"snippetinfowidget.h\"\n\nusing namespace vnotex;\n\nSnippetPropertiesDialog::SnippetPropertiesDialog(Snippet *p_snippet, QWidget *p_parent)\n    : ScrollDialog(p_parent), m_snippet(p_snippet) {\n  Q_ASSERT(m_snippet);\n  setupUI();\n\n  m_infoWidget->setFocus();\n}\n\nvoid SnippetPropertiesDialog::setupUI() {\n  setupSnippetInfoWidget(this);\n  setCentralWidget(m_infoWidget);\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n  if (m_snippet->isReadOnly()) {\n    setButtonEnabled(QDialogButtonBox::Ok, false);\n  }\n\n  setWindowTitle(tr(\"%1 Properties\").arg(m_snippet->getName()));\n}\n\nvoid SnippetPropertiesDialog::setupSnippetInfoWidget(QWidget *p_parent) {\n  m_infoWidget = new SnippetInfoWidget(m_snippet, p_parent);\n}\n\nbool SnippetPropertiesDialog::validateInputs() {\n  bool valid = true;\n  QString msg;\n\n  valid = valid && validateNameInput(msg);\n  setInformationText(msg, valid ? ScrollDialog::InformationLevel::Info\n                                : ScrollDialog::InformationLevel::Error);\n  return valid;\n}\n\nbool SnippetPropertiesDialog::validateNameInput(QString &p_msg) {\n  p_msg.clear();\n\n  auto name = m_infoWidget->getName();\n  if (name.isEmpty()) {\n    p_msg = tr(\"Please specify a name for the snippet.\");\n    return false;\n  }\n\n  if (name.toLower() == m_snippet->getName().toLower()) {\n    return true;\n  }\n\n  if (SnippetMgr::getInst().find(name)) {\n    p_msg = tr(\"Name conflicts with existing snippet.\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid SnippetPropertiesDialog::acceptedButtonClicked() {\n  if (validateInputs() && saveSnippetProperties()) {\n    accept();\n  }\n}\n\nbool SnippetPropertiesDialog::saveSnippetProperties() {\n  auto snip = QSharedPointer<Snippet>::create(\n      m_infoWidget->getName(), m_infoWidget->getDescription(), m_infoWidget->getContent(),\n      m_infoWidget->getShortcut(), m_infoWidget->shouldIndentAsFirstLine(),\n      m_infoWidget->getCursorMark(), m_infoWidget->getSelectionMark());\n  Q_ASSERT(snip->isValid());\n  try {\n    SnippetMgr::getInst().updateSnippet(m_snippet->getName(), snip);\n  } catch (Exception &p_e) {\n    QString msg = tr(\"Failed to update snippet (%1) (%2).\").arg(snip->getName(), p_e.what());\n    qWarning() << msg;\n    setInformationText(msg, ScrollDialog::InformationLevel::Error);\n    return false;\n  }\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/snippetpropertiesdialog.h",
    "content": "#ifndef SNIPPETPROPERTIESDIALOG_H\n#define SNIPPETPROPERTIESDIALOG_H\n\n#include \"scrolldialog.h\"\n\nnamespace vnotex {\nclass Snippet;\nclass SnippetInfoWidget;\n\nclass SnippetPropertiesDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  SnippetPropertiesDialog(Snippet *p_snippet, QWidget *p_parent = nullptr);\n\nprotected:\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupSnippetInfoWidget(QWidget *p_parent);\n\n  bool validateNameInput(QString &p_msg);\n\n  bool saveSnippetProperties();\n\n  bool validateInputs();\n\n  SnippetInfoWidget *m_infoWidget = nullptr;\n\n  Snippet *m_snippet = nullptr;\n};\n} // namespace vnotex\n\n#endif // SNIPPETPROPERTIESDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/sortdialog.cpp",
    "content": "#include \"sortdialog.h\"\n\n#include <QHBoxLayout>\n#include <QHeaderView>\n#include <QLabel>\n#include <QPushButton>\n#include <QVBoxLayout>\n\n#include <core/global.h>\n#include <widgets/treewidget.h>\n#include <widgets/treewidgetitem.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nSortDialog::SortDialog(const QString &p_title, const QString &p_info, QWidget *p_parent)\n    : ScrollDialog(p_parent) {\n  setupUI(p_title, p_info);\n}\n\nvoid SortDialog::setupUI(const QString &p_title, const QString &p_info) {\n  auto mainWidget = new QWidget(this);\n  setCentralWidget(mainWidget);\n\n  auto mainLayout = new QVBoxLayout(mainWidget);\n\n  if (!p_info.isEmpty()) {\n    auto infoLabel = new QLabel(p_info, mainWidget);\n    infoLabel->setWordWrap(true);\n    mainLayout->addWidget(infoLabel);\n  }\n\n  {\n    auto bodyLayout = new QHBoxLayout();\n    mainLayout->addLayout(bodyLayout);\n\n    // Tree widget.\n    // We want to sort it case-insensitive. QTreeView and QSortFilterProxyModel should be the\n    // choice. For simplicity, we subclass QTreeWidgetItem here.\n    m_treeWidget = new TreeWidget(mainWidget);\n    m_treeWidget->setRootIsDecorated(false);\n    m_treeWidget->setSelectionMode(QAbstractItemView::ContiguousSelection);\n    m_treeWidget->setDragDropMode(QAbstractItemView::InternalMove);\n    bodyLayout->addWidget(m_treeWidget);\n\n    // Buttons for top/up/down/bottom.\n    auto btnLayout = new QVBoxLayout();\n    bodyLayout->addLayout(btnLayout);\n\n    auto topBtn = new QPushButton(tr(\"&Top\"), mainWidget);\n    connect(topBtn, &QPushButton::clicked, this,\n            [this]() { handleMoveOperation(MoveOperation::Top); });\n    btnLayout->addWidget(topBtn);\n\n    auto upBtn = new QPushButton(tr(\"&Up\"), mainWidget);\n    connect(upBtn, &QPushButton::clicked, this,\n            [this]() { handleMoveOperation(MoveOperation::Up); });\n    btnLayout->addWidget(upBtn);\n\n    auto downBtn = new QPushButton(tr(\"&Down\"), mainWidget);\n    connect(downBtn, &QPushButton::clicked, this,\n            [this]() { handleMoveOperation(MoveOperation::Down); });\n    btnLayout->addWidget(downBtn);\n\n    auto bottomBtn = new QPushButton(tr(\"&Bottom\"), mainWidget);\n    connect(bottomBtn, &QPushButton::clicked, this,\n            [this]() { handleMoveOperation(MoveOperation::Bottom); });\n    btnLayout->addWidget(bottomBtn);\n\n    btnLayout->addStretch();\n  }\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n  setWindowTitle(p_title);\n}\n\nQTreeWidget *SortDialog::getTreeWidget() const { return m_treeWidget; }\n\nvoid SortDialog::updateTreeWidget() {\n  int cols = m_treeWidget->columnCount();\n  for (int i = 0; i < cols; ++i) {\n    m_treeWidget->resizeColumnToContents(i);\n  }\n\n  QHeaderView *header = m_treeWidget->header();\n  if (header) {\n    header->setStretchLastSection(true);\n  }\n\n  // We just need single level.\n  int cnt = m_treeWidget->topLevelItemCount();\n  for (int i = 0; i < cnt; ++i) {\n    QTreeWidgetItem *item = m_treeWidget->topLevelItem(i);\n    item->setFlags(item->flags() & ~Qt::ItemIsDropEnabled);\n  }\n\n  m_treeWidget->sortByColumn(-1, Qt::AscendingOrder);\n  m_treeWidget->setSortingEnabled(true);\n}\n\nQVector<QVariant> SortDialog::getSortedData() const {\n  const int cnt = m_treeWidget->topLevelItemCount();\n  QVector<QVariant> data(cnt);\n  for (int i = 0; i < cnt; ++i) {\n    QTreeWidgetItem *item = m_treeWidget->topLevelItem(i);\n    Q_ASSERT(item);\n    data[i] = item->data(0, Qt::UserRole);\n  }\n\n  return data;\n}\n\nvoid SortDialog::handleMoveOperation(MoveOperation p_op) {\n  const QList<QTreeWidgetItem *> selectedItems = m_treeWidget->selectedItems();\n  if (selectedItems.isEmpty()) {\n    return;\n  }\n\n  int first = m_treeWidget->topLevelItemCount();\n  int last = -1;\n  for (const auto &it : selectedItems) {\n    int idx = m_treeWidget->indexOfTopLevelItem(it);\n    Q_ASSERT(idx > -1);\n    if (idx < first) {\n      first = idx;\n    }\n\n    if (idx > last) {\n      last = idx;\n    }\n  }\n\n  Q_ASSERT(first <= last && (last - first + 1) == selectedItems.size());\n  QTreeWidgetItem *firstItem = nullptr;\n\n  m_treeWidget->sortByColumn(-1, Qt::AscendingOrder);\n\n  switch (p_op) {\n  case MoveOperation::Top:\n    if (first == 0) {\n      break;\n    }\n\n    m_treeWidget->clearSelection();\n\n    // Insert item[last] to index 0 repeatedly.\n    for (int i = last - first; i >= 0; --i) {\n      QTreeWidgetItem *item = m_treeWidget->takeTopLevelItem(last);\n      Q_ASSERT(item);\n      m_treeWidget->insertTopLevelItem(0, item);\n      item->setSelected(true);\n    }\n\n    firstItem = m_treeWidget->topLevelItem(0);\n\n    break;\n\n  case MoveOperation::Up:\n    if (first == 0) {\n      break;\n    }\n\n    m_treeWidget->clearSelection();\n\n    // Insert item[last] to index (first -1) repeatedly.\n    for (int i = last - first; i >= 0; --i) {\n      QTreeWidgetItem *item = m_treeWidget->takeTopLevelItem(last);\n      Q_ASSERT(item);\n      m_treeWidget->insertTopLevelItem(first - 1, item);\n      item->setSelected(true);\n    }\n\n    firstItem = m_treeWidget->topLevelItem(first - 1);\n\n    break;\n\n  case MoveOperation::Down:\n    if (last == m_treeWidget->topLevelItemCount() - 1) {\n      break;\n    }\n\n    m_treeWidget->clearSelection();\n\n    // Insert item[first] to index (last) repeatedly.\n    for (int i = last - first; i >= 0; --i) {\n      QTreeWidgetItem *item = m_treeWidget->takeTopLevelItem(first);\n      Q_ASSERT(item);\n      m_treeWidget->insertTopLevelItem(last + 1, item);\n      item->setSelected(true);\n\n      if (!firstItem) {\n        firstItem = item;\n      }\n    }\n\n    break;\n\n  case MoveOperation::Bottom:\n    if (last == m_treeWidget->topLevelItemCount() - 1) {\n      break;\n    }\n\n    m_treeWidget->clearSelection();\n\n    // Insert item[first] to the last of the tree repeatedly.\n    for (int i = last - first; i >= 0; --i) {\n      QTreeWidgetItem *item = m_treeWidget->takeTopLevelItem(first);\n      Q_ASSERT(item);\n      m_treeWidget->addTopLevelItem(item);\n      item->setSelected(true);\n\n      if (!firstItem) {\n        firstItem = item;\n      }\n    }\n\n    break;\n\n  default:\n    return;\n  }\n\n  if (firstItem) {\n    m_treeWidget->setCurrentItem(firstItem);\n    m_treeWidget->scrollToItem(firstItem);\n  }\n}\n\nQTreeWidgetItem *SortDialog::addItem(const QStringList &p_cols) {\n  auto item = new TreeWidgetItem(m_treeWidget, p_cols);\n  return item;\n}\n\nQTreeWidgetItem *SortDialog::addItem(const QStringList &p_cols,\n                                     const QStringList &p_comparisonCols) {\n  Q_ASSERT(p_cols.size() == p_comparisonCols.size());\n  auto item = new TreeWidgetItem(m_treeWidget, p_cols);\n  for (int i = 0; i < p_cols.size(); ++i) {\n    if (!p_comparisonCols[i].isNull()) {\n      item->setData(i, Role::ComparisonRole, p_comparisonCols[i]);\n    }\n  }\n  return item;\n}\n"
  },
  {
    "path": "src/widgets/dialogs/sortdialog.h",
    "content": "#ifndef SORTDIALOG_H\n#define SORTDIALOG_H\n\n#include \"scrolldialog.h\"\n\nclass QTreeWidget;\nclass QTreeWidgetItem;\nclass QPushButton;\n\nnamespace vnotex {\nclass SortDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  SortDialog(const QString &p_title, const QString &p_info, QWidget *p_parent = nullptr);\n\n  QTreeWidget *getTreeWidget() const;\n\n  // Called after updating the QTreeWidget from getTreeWidget().\n  void updateTreeWidget();\n\n  // Get user data of column 0 from sorted items.\n  QVector<QVariant> getSortedData() const;\n\n  // Add one item to the tree.\n  QTreeWidgetItem *addItem(const QStringList &p_cols);\n\n  // Add one item to the tree.\n  // @p_comparisonCols: for column i, if it is not null, use it for comparison.\n  QTreeWidgetItem *addItem(const QStringList &p_cols, const QStringList &p_comparisonCols);\n\nprivate:\n  enum MoveOperation { Top, Up, Down, Bottom };\n\nprivate slots:\n  void handleMoveOperation(MoveOperation p_op);\n\nprivate:\n  void setupUI(const QString &p_title, const QString &p_info);\n\n  QTreeWidget *m_treeWidget = nullptr;\n};\n} // namespace vnotex\n\n#endif // SORTDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/tableinsertdialog.cpp",
    "content": "#include \"tableinsertdialog.h\"\n\n#include <QButtonGroup>\n#include <QGridLayout>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QRadioButton>\n#include <QSpinBox>\n\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nTableInsertDialog::TableInsertDialog(const QString &p_title, QWidget *p_parent)\n    : ScrollDialog(p_parent) {\n  setupUI(p_title);\n}\n\nvoid TableInsertDialog::setupUI(const QString &p_title) {\n  auto mainWidget = new QWidget(this);\n  setCentralWidget(mainWidget);\n\n  auto mainLayout = new QGridLayout(mainWidget);\n\n  m_rowCountSpinBox = WidgetsFactory::createSpinBox(mainWidget);\n  m_rowCountSpinBox->setToolTip(tr(\"Row count of the table body\"));\n  m_rowCountSpinBox->setMaximum(1000);\n  m_rowCountSpinBox->setMinimum(0);\n\n  mainLayout->addWidget(new QLabel(tr(\"Row:\")), 0, 0, 1, 1);\n  mainLayout->addWidget(m_rowCountSpinBox, 0, 1, 1, 1);\n\n  m_colCountSpinBox = WidgetsFactory::createSpinBox(mainWidget);\n  m_colCountSpinBox->setToolTip(tr(\"Column count of the table\"));\n  m_colCountSpinBox->setMaximum(1000);\n  m_colCountSpinBox->setMinimum(1);\n\n  mainLayout->addWidget(new QLabel(tr(\"Column:\")), 0, 2, 1, 1);\n  mainLayout->addWidget(m_colCountSpinBox, 0, 3, 1, 1);\n\n  {\n    auto noneBtn = new QRadioButton(tr(\"None\"), mainWidget);\n    auto leftBtn = new QRadioButton(tr(\"Left\"), mainWidget);\n    auto centerBtn = new QRadioButton(tr(\"Center\"), mainWidget);\n    auto rightBtn = new QRadioButton(tr(\"Right\"), mainWidget);\n\n    auto alignLayout = new QHBoxLayout();\n    alignLayout->addWidget(noneBtn);\n    alignLayout->addWidget(leftBtn);\n    alignLayout->addWidget(centerBtn);\n    alignLayout->addWidget(rightBtn);\n    alignLayout->addStretch();\n\n    mainLayout->addWidget(new QLabel(tr(\"Alignment:\")), 1, 0, 1, 1);\n    mainLayout->addLayout(alignLayout, 1, 1, 1, 3);\n\n    auto buttonGroup = new QButtonGroup(mainWidget);\n    buttonGroup->addButton(noneBtn, static_cast<int>(Alignment::None));\n    buttonGroup->addButton(leftBtn, static_cast<int>(Alignment::Left));\n    buttonGroup->addButton(centerBtn, static_cast<int>(Alignment::Center));\n    buttonGroup->addButton(rightBtn, static_cast<int>(Alignment::Right));\n\n    noneBtn->setChecked(true);\n    connect(buttonGroup, (void (QButtonGroup::*)(int, bool))(&QButtonGroup::buttonToggled),\n\n            this, [this](int p_id, bool p_checked) {\n              if (p_checked) {\n                m_alignment = static_cast<Alignment>(p_id);\n              }\n            });\n  }\n\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\n  setWindowTitle(p_title);\n}\n\nint TableInsertDialog::getRowCount() const { return m_rowCountSpinBox->value(); }\n\nint TableInsertDialog::getColumnCount() const { return m_colCountSpinBox->value(); }\n\nAlignment TableInsertDialog::getAlignment() const { return m_alignment; }\n"
  },
  {
    "path": "src/widgets/dialogs/tableinsertdialog.h",
    "content": "#ifndef TABLEINSERTDIALOG_H\n#define TABLEINSERTDIALOG_H\n\n#include \"scrolldialog.h\"\n\n#include <core/global.h>\n\nclass QSpinBox;\n\nnamespace vnotex {\nclass TableInsertDialog : public ScrollDialog {\n  Q_OBJECT\npublic:\n  TableInsertDialog(const QString &p_title, QWidget *p_parent = nullptr);\n\n  int getRowCount() const;\n\n  int getColumnCount() const;\n\n  Alignment getAlignment() const;\n\nprivate:\n  void setupUI(const QString &p_title);\n\n  QSpinBox *m_rowCountSpinBox = nullptr;\n\n  QSpinBox *m_colCountSpinBox = nullptr;\n\n  Alignment m_alignment = Alignment::None;\n};\n} // namespace vnotex\n\n#endif // TABLEINSERTDIALOG_H\n"
  },
  {
    "path": "src/widgets/dialogs/updater.cpp",
    "content": "#include \"updater.h\"\n\n#include <QApplication>\n#include <QFormLayout>\n#include <QHBoxLayout>\n#include <QJsonObject>\n#include <QLabel>\n#include <QNetworkAccessManager>\n#include <QNetworkReply>\n#include <QPointer>\n#include <QPushButton>\n#include <QTimer>\n\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n#include <vtextedit/networkutils.h>\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nUpdater::Updater(QWidget *p_parent) : Dialog(p_parent) { setupUI(); }\n\nvoid Updater::setupUI() {\n  auto mainWidget = new QWidget(this);\n  setCentralWidget(mainWidget);\n\n  auto mainLayout = WidgetsFactory::createFormLayout(mainWidget);\n\n  mainLayout->addRow(tr(\"Version:\"), new QLabel(qApp->applicationVersion(), mainWidget));\n\n  m_latestVersionLabel = new QLabel(tr(\"Fetching information...\"), mainWidget);\n  mainLayout->addRow(tr(\"Latest version:\"), m_latestVersionLabel);\n\n  setDialogButtonBox(QDialogButtonBox::Ok);\n\n  {\n    auto btnBox = getDialogButtonBox();\n    auto viewBtn = btnBox->addButton(tr(\"View Releases\"), QDialogButtonBox::AcceptRole);\n    connect(viewBtn, &QPushButton::clicked, this, []() {\n      WidgetUtils::openUrlByDesktop(QUrl(\"https://github.com/vnotex/vnote/releases\"));\n    });\n  }\n\n  setWindowTitle(tr(\"Check for Updates\"));\n}\n\nvoid Updater::showEvent(QShowEvent *p_event) {\n  Dialog::showEvent(p_event);\n\n  QTimer::singleShot(1000, this, &Updater::start);\n}\n\nvoid Updater::start() {\n  checkForUpdates(this,\n                  [this](bool p_hasUpdate, const QString &p_version, const QString &p_errMsg) {\n                    Q_UNUSED(p_hasUpdate);\n                    if (p_version.isEmpty()) {\n                      setInformationText(tr(\"Failed to fetch information (%1).\").arg(p_errMsg),\n                                         InformationLevel::Warning);\n                      m_latestVersionLabel->setText(\"\");\n                    } else {\n                      clearInformationText();\n                      m_latestVersionLabel->setText(p_version);\n                    }\n                  });\n}\n\nvoid Updater::checkForUpdates(\n    QObject *p_receiver,\n    const std::function<void(bool, const QString &, const QString &)> &p_callback) {\n  QPointer<QObject> receiver(p_receiver);\n\n  // Will delete it in the callback.\n  auto mgr = new QNetworkAccessManager();\n  connect(mgr, &QNetworkAccessManager::finished, mgr,\n          [mgr, receiver, p_callback](QNetworkReply *p_reply) {\n            bool hasUpdate = false;\n            QString version;\n            QString errMsg;\n            if (p_reply->error() != QNetworkReply::NoError) {\n              errMsg = vte::NetworkUtils::networkErrorStr(p_reply->error());\n            } else {\n              auto obj = Utils::fromJsonString(p_reply->readAll());\n              version = obj[\"tag_name\"].toString();\n              if (version.startsWith('v')) {\n                version = version.mid(1);\n              }\n              hasUpdate = version != qApp->applicationVersion();\n            }\n\n            if (receiver) {\n              p_callback(hasUpdate, version, errMsg);\n            }\n            p_reply->deleteLater();\n            mgr->deleteLater();\n          });\n\n  mgr->get(vte::NetworkUtils::networkRequest(\n      QUrl(\"https://api.github.com/repos/vnotex/vnote/releases/latest\")));\n}\n"
  },
  {
    "path": "src/widgets/dialogs/updater.h",
    "content": "#ifndef UPDATER_H\n#define UPDATER_H\n\n#include \"dialog.h\"\n\n#include <functional>\n\nclass QLabel;\n\nnamespace vnotex {\nclass Updater : public Dialog {\n  Q_OBJECT\npublic:\n  explicit Updater(QWidget *p_parent = nullptr);\n\n  // Callback(hasUpdate, VersionOnSuccess, errMsg).\n  static void\n  checkForUpdates(QObject *p_receiver,\n                  const std::function<void(bool, const QString &, const QString &)> &p_callback);\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void start();\n\nprivate:\n  void setupUI();\n\n  QLabel *m_latestVersionLabel = nullptr;\n};\n} // namespace vnotex\n\n#endif // UPDATER_H\n"
  },
  {
    "path": "src/widgets/dialogs/viewtagsdialog.cpp",
    "content": "#include \"viewtagsdialog.h\"\r\n\r\n#include <QFormLayout>\r\n#include <QKeyEvent>\r\n#include <QLabel>\r\n\r\n#include <notebook/node.h>\r\n\r\n#include \"../tagviewer.h\"\r\n#include \"../widgetsfactory.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nViewTagsDialog::ViewTagsDialog(Node *p_node, QWidget *p_parent) : Dialog(p_parent) {\r\n  setupUI();\r\n\r\n  setNode(p_node);\r\n\r\n  m_tagViewer->setFocus();\r\n}\r\n\r\nvoid ViewTagsDialog::setupUI() {\r\n  auto mainWidget = new QWidget(this);\r\n  setCentralWidget(mainWidget);\r\n\r\n  auto mainLayout = WidgetsFactory::createFormLayout(mainWidget);\r\n\r\n  m_nodeNameLabel = new QLabel(mainWidget);\r\n  mainLayout->addRow(tr(\"Name:\"), m_nodeNameLabel);\r\n\r\n  m_tagViewer = new TagViewer(false, mainWidget);\r\n  mainLayout->addRow(tr(\"Tags:\"), m_tagViewer);\r\n\r\n  setDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);\r\n\r\n  setWindowTitle(tr(\"Tags\"));\r\n}\r\n\r\nvoid ViewTagsDialog::acceptedButtonClicked() {\r\n  m_tagViewer->save();\r\n  accept();\r\n}\r\n\r\nvoid ViewTagsDialog::setNode(Node *p_node) {\r\n  if (m_node == p_node) {\r\n    return;\r\n  }\r\n\r\n  m_node = p_node;\r\n  Q_ASSERT(m_node);\r\n\r\n  m_nodeNameLabel->setText(m_node->getName());\r\n  m_tagViewer->setNode(m_node);\r\n}\r\n\r\nvoid ViewTagsDialog::keyPressEvent(QKeyEvent *p_event) {\r\n  if (p_event->key() == Qt::Key_Enter || p_event->key() == Qt::Key_Return) {\r\n    // Prevent it from closing the dialog.\r\n    return;\r\n  }\r\n\r\n  Dialog::keyPressEvent(p_event);\r\n}\r\n"
  },
  {
    "path": "src/widgets/dialogs/viewtagsdialog.h",
    "content": "#ifndef VIEWTAGSDIALOG_H\r\n#define VIEWTAGSDIALOG_H\r\n\r\n#include \"dialog.h\"\r\n\r\nclass QLabel;\r\n\r\nnamespace vnotex {\r\nclass Node;\r\nclass TagViewer;\r\n\r\nclass ViewTagsDialog : public Dialog {\r\n  Q_OBJECT\r\npublic:\r\n  ViewTagsDialog(Node *p_node, QWidget *p_parent = nullptr);\r\n\r\nprotected:\r\n  void acceptedButtonClicked() Q_DECL_OVERRIDE;\r\n\r\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\r\n\r\nprivate:\r\n  void setupUI();\r\n\r\n  void setNode(Node *p_node);\r\n\r\n  Node *m_node = nullptr;\r\n\r\n  QLabel *m_nodeNameLabel = nullptr;\r\n\r\n  TagViewer *m_tagViewer = nullptr;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // VIEWTAGSDIALOG_H\r\n"
  },
  {
    "path": "src/widgets/dockwidgethelper.cpp",
    "content": "#include \"dockwidgethelper.h\"\r\n\r\n#include <QBitArray>\r\n#include <QDockWidget>\r\n#include <QHelpEvent>\r\n#include <QShortcut>\r\n#include <QTabBar>\r\n#include <QTextEdit>\r\n#include <QToolTip>\r\n\r\n#include <core/configmgr.h>\r\n#include <core/coreconfig.h>\r\n#include <core/thememgr.h>\r\n#include <core/vnotex.h>\r\n#include <core/widgetconfig.h>\r\n#include <utils/iconutils.h>\r\n#include <utils/widgetutils.h>\r\n\r\n#include \"consoleviewer.h\"\r\n#include \"historypanel.h\"\r\n#include \"locationlist.h\"\r\n#include \"mainwindow.h\"\r\n#include \"notebookexplorer.h\"\r\n#include \"outlineviewer.h\"\r\n#include \"propertydefs.h\"\r\n#include \"searchpanel.h\"\r\n#include \"snippetpanel.h\"\r\n#include \"tagexplorer.h\"\r\n#include \"windowspanel.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nDockWidgetHelper::NavigationItemInfo::NavigationItemInfo(QTabBar *p_tabBar, int p_tabIndex,\r\n                                                         int p_dockIndex)\r\n    : m_tabBar(p_tabBar), m_tabIndex(p_tabIndex), m_dockIndex(p_dockIndex) {}\r\n\r\nDockWidgetHelper::NavigationItemInfo::NavigationItemInfo(int p_dockIndex)\r\n    : m_dockIndex(p_dockIndex) {}\r\n\r\nDockWidgetHelper::DockWidgetHelper(MainWindow *p_mainWindow)\r\n    : QObject(p_mainWindow), NavigationMode(NavigationMode::Type::DoubleKeys, p_mainWindow),\r\n      m_mainWindow(p_mainWindow) {}\r\n\r\nstatic int rotationAngle(Qt::DockWidgetArea p_area) {\r\n  switch (p_area) {\r\n  case Qt::LeftDockWidgetArea:\r\n    return 90;\r\n\r\n  case Qt::RightDockWidgetArea:\r\n    return 270;\r\n\r\n  default:\r\n    return -1;\r\n  }\r\n}\r\n\r\nQString DockWidgetHelper::iconFileName(DockIndex p_dockIndex) {\r\n  switch (p_dockIndex) {\r\n  case DockIndex::NavigationDock:\r\n    return \"navigation_dock.svg\";\r\n  case DockIndex::OutlineDock:\r\n    return \"outline_dock.svg\";\r\n  case DockIndex::HistoryDock:\r\n    return \"history_dock.svg\";\r\n  case DockIndex::WindowsDock:\r\n    return \"windows_dock.svg\";\r\n  case DockIndex::TagDock:\r\n    return \"tag_dock.svg\";\r\n  case DockIndex::SearchDock:\r\n    return \"search_dock.svg\";\r\n  case DockIndex::SnippetDock:\r\n    return \"snippet_dock.svg\";\r\n  case DockIndex::LocationListDock:\r\n    return \"location_list_dock.svg\";\r\n  case DockIndex::ConsoleDock:\r\n    return \"console_dock.svg\";\r\n  default:\r\n    return QString();\r\n  }\r\n}\r\n\r\nvoid DockWidgetHelper::setupDocks() {\r\n  m_mainWindow->setTabPosition(Qt::LeftDockWidgetArea, QTabWidget::West);\r\n  m_mainWindow->setTabPosition(Qt::RightDockWidgetArea, QTabWidget::East);\r\n  m_mainWindow->setTabPosition(Qt::TopDockWidgetArea, QTabWidget::North);\r\n  m_mainWindow->setTabPosition(Qt::BottomDockWidgetArea, QTabWidget::North);\r\n  m_mainWindow->setDockNestingEnabled(true);\r\n\r\n  m_dockIcons.resize(DockIndex::MaxDock);\r\n\r\n  // The order of m_docks should be identical with enum DockIndex.\r\n  QVector<int> tabifiedDockIndex;\r\n\r\n  tabifiedDockIndex.append(m_docks.size());\r\n  setupNavigationDock();\r\n\r\n  tabifiedDockIndex.append(m_docks.size());\r\n  setupHistoryDock();\r\n\r\n  tabifiedDockIndex.append(m_docks.size());\r\n  setupTagDock();\r\n\r\n  tabifiedDockIndex.append(m_docks.size());\r\n  setupSearchDock();\r\n\r\n  tabifiedDockIndex.append(m_docks.size());\r\n  setupSnippetDock();\r\n\r\n  setupOutlineDock();\r\n\r\n  setupWindowsDock();\r\n\r\n  setupConsoleDock();\r\n\r\n  setupLocationListDock();\r\n\r\n  setupShortcuts();\r\n\r\n  for (int i = 1; i < tabifiedDockIndex.size(); ++i) {\r\n    m_mainWindow->tabifyDockWidget(m_docks[tabifiedDockIndex[i - 1]],\r\n                                   m_docks[tabifiedDockIndex[i]]);\r\n  }\r\n}\r\n\r\nstatic void addWidgetToDock(QDockWidget *p_dock, QWidget *p_widget) {\r\n  p_dock->setWidget(p_widget);\r\n  p_dock->setFocusProxy(p_widget);\r\n}\r\n\r\nvoid DockWidgetHelper::setupNavigationDock() {\r\n  auto dock = createDockWidget(DockIndex::NavigationDock, tr(\"Navigation\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"NavigationDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_notebookExplorer);\r\n  m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);\r\n}\r\n\r\nvoid DockWidgetHelper::setupOutlineDock() {\r\n  auto dock = createDockWidget(DockIndex::OutlineDock, tr(\"Outline\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"OutlineDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_outlineViewer);\r\n  m_mainWindow->addDockWidget(Qt::RightDockWidgetArea, dock);\r\n}\r\n\r\nvoid DockWidgetHelper::setupWindowsDock() {\r\n  auto dock = createDockWidget(DockIndex::WindowsDock, tr(\"Open Windows\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"WindowsDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_windowsPanel);\r\n  m_mainWindow->addDockWidget(Qt::RightDockWidgetArea, dock);\r\n}\r\n\r\nvoid DockWidgetHelper::setupConsoleDock() {\r\n  auto dock = createDockWidget(DockIndex::ConsoleDock, tr(\"Console\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"ConsoleDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_consoleViewer);\r\n  m_mainWindow->addDockWidget(Qt::BottomDockWidgetArea, dock);\r\n  dock->hide();\r\n}\r\n\r\nvoid DockWidgetHelper::setupSearchDock() {\r\n  auto dock = createDockWidget(DockIndex::SearchDock, tr(\"Search\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"SearchDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_searchPanel);\r\n  m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);\r\n}\r\n\r\nvoid DockWidgetHelper::setupSnippetDock() {\r\n  auto dock = createDockWidget(DockIndex::SnippetDock, tr(\"Snippets\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"SnippetDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_snippetPanel);\r\n  m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);\r\n}\r\n\r\nvoid DockWidgetHelper::setupHistoryDock() {\r\n  auto dock = createDockWidget(DockIndex::HistoryDock, tr(\"History\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"HistoryDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_historyPanel);\r\n  m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);\r\n}\r\n\r\nvoid DockWidgetHelper::setupTagDock() {\r\n  auto dock = createDockWidget(DockIndex::TagDock, tr(\"Tags\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"TagDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_tagExplorer);\r\n  m_mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);\r\n}\r\n\r\nvoid DockWidgetHelper::setupLocationListDock() {\r\n  auto dock = createDockWidget(DockIndex::LocationListDock, tr(\"Location List\"), m_mainWindow);\r\n\r\n  dock->setObjectName(QStringLiteral(\"LocationListDock.vnotex\"));\r\n  dock->setAllowedAreas(Qt::AllDockWidgetAreas);\r\n\r\n  addWidgetToDock(dock, m_mainWindow->m_locationList);\r\n  m_mainWindow->addDockWidget(Qt::BottomDockWidgetArea, dock);\r\n  dock->hide();\r\n}\r\n\r\nQDockWidget *DockWidgetHelper::createDockWidget(DockIndex p_dockIndex, const QString &p_title,\r\n                                                QWidget *p_parent) {\r\n  auto dock = new QDockWidget(p_title, p_parent);\r\n  dock->setToolTip(p_title);\r\n  dock->setProperty(PropertyDefs::c_dockWidgetIndex, p_dockIndex);\r\n  dock->setProperty(PropertyDefs::c_dockWidgetTitle, p_title);\r\n  m_docks.push_back(dock);\r\n  return dock;\r\n}\r\n\r\nvoid DockWidgetHelper::activateDock(DockIndex p_dockIndex) {\r\n  Q_ASSERT(p_dockIndex < DockIndex::MaxDock);\r\n  activateDock(getDock(p_dockIndex));\r\n}\r\n\r\nvoid DockWidgetHelper::activateDock(QDockWidget *p_dock) {\r\n  bool needUpdateTabBar = !p_dock->isVisible();\r\n\r\n  p_dock->show();\r\n  Q_FOREACH (QTabBar *tabBar,\r\n             m_mainWindow->findChildren<QTabBar *>(QString(), Qt::FindDirectChildrenOnly)) {\r\n    bool found = false;\r\n    for (int i = 0; i < tabBar->count(); ++i) {\r\n      if (p_dock == reinterpret_cast<QWidget *>(tabBar->tabData(i).toULongLong())) {\r\n        tabBar->setCurrentIndex(i);\r\n        found = true;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (found) {\r\n      break;\r\n    }\r\n  }\r\n\r\n  p_dock->setFocus();\r\n\r\n  if (needUpdateTabBar) {\r\n    updateDockWidgetTabBar();\r\n  }\r\n}\r\n\r\nconst QVector<QDockWidget *> &DockWidgetHelper::getDocks() const { return m_docks; }\r\n\r\nQDockWidget *DockWidgetHelper::getDock(DockIndex p_dockIndex) const {\r\n  Q_ASSERT(p_dockIndex < DockIndex::MaxDock);\r\n  return m_docks[p_dockIndex];\r\n}\r\n\r\nvoid DockWidgetHelper::setupShortcuts() {\r\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::NavigationDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::NavigationDock));\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::OutlineDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::OutlineDock));\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::HistoryDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::HistoryDock));\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::TagDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::TagDock));\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::SearchDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::SearchDock));\r\n  // Extra shortcut for SearchDock.\r\n  setupDockActivateShortcut(m_docks[DockIndex::SearchDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::Search));\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::LocationListDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::LocationListDock));\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::SnippetDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::SnippetDock));\r\n\r\n  setupDockActivateShortcut(m_docks[DockIndex::WindowsDock],\r\n                            coreConfig.getShortcut(CoreConfig::Shortcut::WindowsDock));\r\n}\r\n\r\nvoid DockWidgetHelper::setupDockActivateShortcut(QDockWidget *p_dock, const QString &p_keys) {\r\n  auto shortcut = WidgetUtils::createShortcut(p_keys, m_mainWindow);\r\n  if (shortcut) {\r\n    p_dock->setToolTip(QStringLiteral(\"%1\\t%2\").arg(\r\n        p_dock->windowTitle(), QKeySequence(p_keys).toString(QKeySequence::NativeText)));\r\n    connect(shortcut, &QShortcut::activated, this, [this, p_dock]() { activateDock(p_dock); });\r\n  }\r\n}\r\n\r\nvoid DockWidgetHelper::postSetup() {\r\n  updateDockWidgetTabBar();\r\n\r\n  for (const auto dock : m_docks) {\r\n    connect(dock, &QDockWidget::dockLocationChanged, this,\r\n            &DockWidgetHelper::updateDockWidgetTabBar);\r\n    connect(dock, &QDockWidget::topLevelChanged, this, &DockWidgetHelper::updateDockWidgetTabBar);\r\n  }\r\n}\r\n\r\nvoid DockWidgetHelper::updateDockWidgetTabBar() {\r\n  QBitArray tabifiedDocks(m_docks.size(), false);\r\n  Q_FOREACH (QTabBar *tabBar,\r\n             m_mainWindow->findChildren<QTabBar *>(QString(), Qt::FindDirectChildrenOnly)) {\r\n    if (!m_tabBarsMonitored.contains(tabBar)) {\r\n      m_tabBarsMonitored.insert(tabBar);\r\n      tabBar->installEventFilter(this);\r\n    }\r\n\r\n    tabBar->setDrawBase(false);\r\n\r\n    const int sz = ConfigMgr::getInst().getCoreConfig().getDocksTabBarIconSize();\r\n    tabBar->setIconSize(QSize(sz, sz));\r\n\r\n    auto tabShape = tabBar->shape();\r\n    bool iconOnly = tabShape == QTabBar::RoundedWest || tabShape == QTabBar::RoundedEast ||\r\n                    tabShape == QTabBar::TriangularWest || tabShape == QTabBar::TriangularEast;\r\n    const int cnt = tabBar->count();\r\n    if (cnt == 1) {\r\n      iconOnly = false;\r\n    }\r\n\r\n    bool isSideBar =\r\n        iconOnly && (tabShape == QTabBar::RoundedWest || tabShape == QTabBar::TriangularWest);\r\n    if (tabBar->property(PropertyDefs::c_mainWindowSideBar).toBool() != isSideBar) {\r\n      WidgetUtils::setPropertyDynamically(tabBar, PropertyDefs::c_mainWindowSideBar, isSideBar);\r\n    }\r\n\r\n    for (int i = 0; i < cnt; ++i) {\r\n      auto dock = reinterpret_cast<QDockWidget *>(tabBar->tabData(i).toULongLong());\r\n      if (!dock) {\r\n        continue;\r\n      }\r\n      int dockIdx = dock->property(PropertyDefs::c_dockWidgetIndex).toInt();\r\n      tabifiedDocks.setBit(dockIdx);\r\n      if (iconOnly) {\r\n        dock->setWindowTitle(QString());\r\n      } else if (dock->windowTitle().isEmpty()) {\r\n        dock->setWindowTitle(dock->property(PropertyDefs::c_dockWidgetTitle).toString());\r\n      }\r\n      tabBar->setTabIcon(i, getDockIcon(static_cast<DockIndex>(dockIdx), isSideBar));\r\n\r\n      if (dock->property(PropertyDefs::c_mainWindowSideBar).toBool() != isSideBar) {\r\n        WidgetUtils::setPropertyDynamically(dock, PropertyDefs::c_mainWindowSideBar, isSideBar);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Non-tabified docks.\r\n  for (int i = 0; i < m_docks.size(); ++i) {\r\n    if (!tabifiedDocks[i] && m_docks[i]->windowTitle().isEmpty()) {\r\n      m_docks[i]->setWindowTitle(m_docks[i]->property(PropertyDefs::c_dockWidgetTitle).toString());\r\n    }\r\n  }\r\n\r\n  emit m_mainWindow->layoutChanged();\r\n}\r\n\r\nbool DockWidgetHelper::eventFilter(QObject *p_obj, QEvent *p_event) {\r\n  if (p_event->type() == QEvent::ToolTip) {\r\n    // The QTabBar of the tabified dock widgets does not show tooltip due to Qt's internal\r\n    // implementation.\r\n    auto helpEve = static_cast<QHelpEvent *>(p_event);\r\n    auto tabBar = static_cast<QTabBar *>(p_obj);\r\n    int idx = tabBar->tabAt(helpEve->pos());\r\n    bool done = false;\r\n    if (idx > -1) {\r\n      auto dock = reinterpret_cast<QDockWidget *>(tabBar->tabData(idx).toULongLong());\r\n      if (dock) {\r\n        done = true;\r\n        QToolTip::showText(helpEve->globalPos(),\r\n                           dock->property(PropertyDefs::c_dockWidgetTitle).toString());\r\n      }\r\n    }\r\n\r\n    if (!done) {\r\n      QToolTip::hideText();\r\n      p_event->ignore();\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  return QObject::eventFilter(p_obj, p_event);\r\n}\r\n\r\nQStringList DockWidgetHelper::getVisibleDocks() const {\r\n  QStringList visibleDocks;\r\n  for (const auto dock : m_docks) {\r\n    if (dock->isVisible()) {\r\n      visibleDocks.push_back(dock->objectName());\r\n    }\r\n  }\r\n  return visibleDocks;\r\n}\r\n\r\nQStringList DockWidgetHelper::hideDocks() {\r\n  const auto &keepDocks =\r\n      ConfigMgr::getInst().getWidgetConfig().getMainWindowKeepDocksExpandingContentArea();\r\n  QStringList visibleDocks;\r\n  for (const auto dock : m_docks) {\r\n    const auto objName = dock->objectName();\r\n    if (dock->isVisible()) {\r\n      visibleDocks.push_back(objName);\r\n    }\r\n\r\n    if (dock->isFloating() || keepDocks.contains(objName)) {\r\n      continue;\r\n    }\r\n\r\n    dock->setVisible(false);\r\n  }\r\n\r\n  return visibleDocks;\r\n}\r\n\r\nvoid DockWidgetHelper::restoreDocks(const QStringList &p_visibleDocks) {\r\n  const auto &keepDocks =\r\n      ConfigMgr::getInst().getWidgetConfig().getMainWindowKeepDocksExpandingContentArea();\r\n  bool hasVisible = false;\r\n  for (const auto dock : m_docks) {\r\n    const auto objName = dock->objectName();\r\n    if (dock->isFloating() || keepDocks.contains(objName)) {\r\n      continue;\r\n    }\r\n\r\n    const bool visible = p_visibleDocks.contains(objName);\r\n    hasVisible = hasVisible || visible;\r\n\r\n    dock->setVisible(visible);\r\n  }\r\n\r\n  if (!hasVisible) {\r\n    // At least make one visible.\r\n    getDock(DockIndex::NavigationDock)->setVisible(true);\r\n  }\r\n\r\n  updateDockWidgetTabBar();\r\n}\r\n\r\nQVector<void *> DockWidgetHelper::getVisibleNavigationItems() {\r\n  m_navigationItems.clear();\r\n\r\n  QBitArray tabifiedDocks(m_docks.size(), false);\r\n  Q_FOREACH (QTabBar *tabBar,\r\n             m_mainWindow->findChildren<QTabBar *>(QString(), Qt::FindDirectChildrenOnly)) {\r\n    if (!tabBar->isVisible()) {\r\n      continue;\r\n    }\r\n\r\n    const int cnt = tabBar->count();\r\n    for (int i = 0; i < cnt; ++i) {\r\n      auto dock = reinterpret_cast<QDockWidget *>(tabBar->tabData(i).toULongLong());\r\n      if (!dock) {\r\n        continue;\r\n      }\r\n      int dockIdx = dock->property(PropertyDefs::c_dockWidgetIndex).toInt();\r\n      tabifiedDocks.setBit(dockIdx);\r\n\r\n      m_navigationItems.push_back(NavigationItemInfo(tabBar, i, dockIdx));\r\n    }\r\n  }\r\n\r\n  // Non-tabified docks.\r\n  for (int i = 0; i < m_docks.size(); ++i) {\r\n    if (!tabifiedDocks[i] && m_docks[i]->isVisible()) {\r\n      m_navigationItems.push_back(NavigationItemInfo(i));\r\n    }\r\n  }\r\n\r\n  QVector<void *> items;\r\n  for (auto &item : m_navigationItems) {\r\n    items.push_back(&item);\r\n  }\r\n  return items;\r\n}\r\n\r\nconst QIcon &DockWidgetHelper::getDockIcon(DockIndex p_dockIndex, bool p_isSideBar) {\r\n  static const auto fg =\r\n      VNoteX::getInst().getThemeMgr().paletteColor(\"widgets#mainwindow#dockwidget_tabbar#icon#fg\");\r\n  static const auto selectedFg = VNoteX::getInst().getThemeMgr().paletteColor(\r\n      \"widgets#mainwindow#dockwidget_tabbar#icon#selected#fg\");\r\n  static auto sideBarFg =\r\n      VNoteX::getInst().getThemeMgr().paletteColor(\"widgets#mainwindow#side_bar#icon#fg\");\r\n  static auto sideBarSelectedFg =\r\n      VNoteX::getInst().getThemeMgr().paletteColor(\"widgets#mainwindow#side_bar#icon#selected#fg\");\r\n\r\n  if (sideBarFg.isEmpty()) {\r\n    sideBarFg = fg;\r\n  }\r\n  if (sideBarSelectedFg.isEmpty()) {\r\n    sideBarSelectedFg = selectedFg;\r\n  }\r\n\r\n  const auto area = m_mainWindow->dockWidgetArea(m_docks[p_dockIndex]);\r\n  const int newAngle = rotationAngle(area);\r\n  if ((m_dockIcons[p_dockIndex].m_rotationAngle != newAngle ||\r\n       m_dockIcons[p_dockIndex].m_isSideBar != p_isSideBar) &&\r\n      area != Qt::NoDockWidgetArea) {\r\n    QVector<IconUtils::OverriddenColor> colors;\r\n    colors.push_back(IconUtils::OverriddenColor(p_isSideBar ? sideBarFg : fg, QIcon::Normal));\r\n    // FIXME: the Selected Mode is not used by the selected tab of a QTabBar.\r\n    colors.push_back(\r\n        IconUtils::OverriddenColor(p_isSideBar ? sideBarSelectedFg : selectedFg, QIcon::Selected));\r\n\r\n    auto iconFile = VNoteX::getInst().getThemeMgr().getIconFile(iconFileName(p_dockIndex));\r\n    m_dockIcons[p_dockIndex].m_icon = IconUtils::fetchIcon(iconFile, colors, newAngle);\r\n    m_dockIcons[p_dockIndex].m_rotationAngle = newAngle;\r\n    m_dockIcons[p_dockIndex].m_isSideBar = p_isSideBar;\r\n  }\r\n\r\n  return m_dockIcons[p_dockIndex].m_icon;\r\n}\r\n\r\nvoid DockWidgetHelper::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) {\r\n  Q_UNUSED(p_idx);\r\n  auto info = static_cast<NavigationItemInfo *>(p_item);\r\n  if (info->m_tabBar) {\r\n    auto pos = info->m_tabBar->tabRect(info->m_tabIndex).topLeft();\r\n    pos = info->m_tabBar->mapToGlobal(pos);\r\n    p_label->move(m_mainWindow->mapFromGlobal(pos));\r\n  } else {\r\n    p_label->setParent(m_docks[info->m_dockIndex]);\r\n    p_label->move(0, 0);\r\n  }\r\n}\r\n\r\nvoid DockWidgetHelper::handleTargetHit(void *p_item) {\r\n  auto info = static_cast<NavigationItemInfo *>(p_item);\r\n  activateDock(static_cast<DockIndex>(info->m_dockIndex));\r\n}\r\n\r\nvoid DockWidgetHelper::clearNavigation() {\r\n  NavigationMode::clearNavigation();\r\n\r\n  m_navigationItems.clear();\r\n}\r\n"
  },
  {
    "path": "src/widgets/dockwidgethelper.h",
    "content": "#ifndef DOCKWIDGETHELPER_H\r\n#define DOCKWIDGETHELPER_H\r\n\r\n#include <QIcon>\r\n#include <QPair>\r\n#include <QSet>\r\n#include <QVector>\r\n\r\n#include \"navigationmode.h\"\r\n\r\nclass QDockWidget;\r\nclass QTabBar;\r\n\r\nnamespace vnotex {\r\nclass MainWindow;\r\n\r\n// Dock widget helper for MainWindow.\r\nclass DockWidgetHelper : public QObject, public NavigationMode {\r\n  Q_OBJECT\r\npublic:\r\n  // Index in m_docks.\r\n  enum DockIndex {\r\n    NavigationDock = 0,\r\n    HistoryDock,\r\n    TagDock,\r\n    SearchDock,\r\n    SnippetDock,\r\n    OutlineDock,\r\n    WindowsDock,\r\n    ConsoleDock,\r\n    LocationListDock,\r\n    MaxDock\r\n  };\r\n  Q_ENUM(DockIndex)\r\n\r\n  explicit DockWidgetHelper(MainWindow *p_mainWindow);\r\n\r\n  void setupDocks();\r\n\r\n  void postSetup();\r\n\r\n  void activateDock(DockIndex p_dockIndex);\r\n\r\n  QDockWidget *getDock(DockIndex p_dockIndex) const;\r\n\r\n  const QVector<QDockWidget *> &getDocks() const;\r\n\r\n  void updateDockWidgetTabBar();\r\n\r\n  QStringList getVisibleDocks() const;\r\n\r\n  QStringList hideDocks();\r\n\r\n  void restoreDocks(const QStringList &p_visibleDocks);\r\n\r\n  // NavigationMode.\r\nprotected:\r\n  QVector<void *> getVisibleNavigationItems() Q_DECL_OVERRIDE;\r\n\r\n  void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE;\r\n\r\n  void handleTargetHit(void *p_item) Q_DECL_OVERRIDE;\r\n\r\n  void clearNavigation() Q_DECL_OVERRIDE;\r\n\r\nprotected:\r\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\r\n\r\nprivate:\r\n  struct NavigationItemInfo {\r\n    NavigationItemInfo() = default;\r\n\r\n    NavigationItemInfo(QTabBar *p_tabBar, int p_tabIndex, int p_dockIndex);\r\n\r\n    NavigationItemInfo(int p_dockIndex);\r\n\r\n    QTabBar *m_tabBar = nullptr;\r\n\r\n    int m_tabIndex = -1;\r\n\r\n    int m_dockIndex = -1;\r\n  };\r\n\r\n  struct IconInfo {\r\n    QIcon m_icon;\r\n\r\n    int m_rotationAngle = INT_MIN;\r\n\r\n    bool m_isSideBar = false;\r\n  };\r\n\r\n  void setupNavigationDock();\r\n\r\n  void setupOutlineDock();\r\n\r\n  void setupWindowsDock();\r\n\r\n  void setupConsoleDock();\r\n\r\n  void setupSearchDock();\r\n\r\n  void setupSnippetDock();\r\n\r\n  void setupHistoryDock();\r\n\r\n  void setupTagDock();\r\n\r\n  void setupLocationListDock();\r\n\r\n  QDockWidget *createDockWidget(DockIndex p_dockIndex, const QString &p_title, QWidget *p_parent);\r\n\r\n  void setupShortcuts();\r\n\r\n  void activateDock(QDockWidget *p_dock);\r\n\r\n  void setupDockActivateShortcut(QDockWidget *p_dock, const QString &p_keys);\r\n\r\n  const QIcon &getDockIcon(DockIndex p_dockIndex, bool p_isSideBar);\r\n\r\n  static QString iconFileName(DockIndex p_dockIndex);\r\n\r\n  MainWindow *m_mainWindow = nullptr;\r\n\r\n  QVector<IconInfo> m_dockIcons;\r\n\r\n  QVector<QDockWidget *> m_docks;\r\n\r\n  // We need to install event filter to the tabbar of tabified dock widgets.\r\n  QSet<QTabBar *> m_tabBarsMonitored;\r\n\r\n  QVector<NavigationItemInfo> m_navigationItems;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // DOCKWIDGETHELPER_H\r\n"
  },
  {
    "path": "src/widgets/dragdropareaindicator.cpp",
    "content": "#include \"dragdropareaindicator.h\"\n\n#include <QDragEnterEvent>\n#include <QDropEvent>\n#include <QHBoxLayout>\n#include <QLabel>\n\nusing namespace vnotex;\n\nDragDropAreaIndicator::DragDropAreaIndicator(DragDropAreaIndicatorInterface *p_interface,\n                                             const QString &p_text, QWidget *p_parent)\n    : QFrame(p_parent), m_interface(p_interface) {\n  setupUI(p_text);\n\n  setAcceptDrops(true);\n}\n\nvoid DragDropAreaIndicator::setupUI(const QString &p_text) {\n  auto mainLayout = new QHBoxLayout(this);\n\n  auto label = new QLabel(p_text, this);\n  label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);\n  mainLayout->addWidget(label);\n}\n\nvoid DragDropAreaIndicator::dragEnterEvent(QDragEnterEvent *p_event) {\n  if (m_interface->handleDragEnterEvent(p_event)) {\n    return;\n  }\n  QFrame::dragEnterEvent(p_event);\n}\n\nvoid DragDropAreaIndicator::dropEvent(QDropEvent *p_event) {\n  if (m_interface->handleDropEvent(p_event)) {\n    hide();\n    return;\n  }\n  QFrame::dropEvent(p_event);\n}\n\nvoid DragDropAreaIndicator::mouseReleaseEvent(QMouseEvent *p_event) {\n  QFrame::mouseReleaseEvent(p_event);\n  hide();\n}\n"
  },
  {
    "path": "src/widgets/dragdropareaindicator.h",
    "content": "#ifndef DRAGDROPAREAINDICATOR_H\n#define DRAGDROPAREAINDICATOR_H\n\n#include <QFrame>\n\nnamespace vnotex {\nclass DragDropAreaIndicatorInterface {\npublic:\n  virtual ~DragDropAreaIndicatorInterface() {}\n\n  virtual bool handleDragEnterEvent(QDragEnterEvent *p_event) = 0;\n\n  virtual bool handleDropEvent(QDropEvent *p_event) = 0;\n};\n\nclass DragDropAreaIndicator : public QFrame {\n  Q_OBJECT\npublic:\n  DragDropAreaIndicator(DragDropAreaIndicatorInterface *p_interface, const QString &p_text,\n                        QWidget *p_parent = nullptr);\n\nprotected:\n  // To accept specific drop.\n  void dragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE;\n\n  // Drop the data.\n  void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE;\n\n  void mouseReleaseEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI(const QString &p_text);\n\n  DragDropAreaIndicatorInterface *m_interface = nullptr;\n};\n} // namespace vnotex\n\n#endif // DRAGDROPAREAINDICATOR_H\n"
  },
  {
    "path": "src/widgets/editors/graphhelper.cpp",
    "content": "#include \"graphhelper.h\"\n\n#include <QDebug>\n#include <QFileInfo>\n\n#include <utils/processutils.h>\n\nusing namespace vnotex;\n\n#define TaskIdProperty \"GraphTaskId\"\n#define TaskTimeStampProperty \"GraphTaskTimeStamp\"\n\nGraphHelper::GraphHelper() : m_cache(100, CacheItem()) {}\n\nQStringList GraphHelper::getArgsToUse(const QStringList &p_args) {\n  if (p_args.isEmpty()) {\n    return QStringList();\n  }\n\n  if (p_args[0] == \"-c\") {\n    // Combine all the arguments except the first one.\n    QStringList args;\n    args << p_args[0];\n\n    QString subCmd;\n    for (int i = 1; i < p_args.size(); ++i) {\n      subCmd += \" \" + p_args[i];\n    }\n    args << subCmd;\n\n    return args;\n  } else {\n    return p_args;\n  }\n}\n\nvoid GraphHelper::process(quint64 p_id, TimeStamp p_timeStamp, const QString &p_format,\n                          const QString &p_text, QObject *p_owner,\n                          const ResultCallback &p_callback) {\n  Task task;\n  task.m_id = p_id;\n  task.m_timeStamp = p_timeStamp;\n  task.m_format = p_format;\n  task.m_text = p_text;\n  task.m_owner = p_owner;\n  task.m_callback = p_callback;\n\n  m_tasks.enqueue(task);\n\n  processOneTask();\n}\n\nvoid GraphHelper::processOneTask() {\n  if (m_taskOngoing || m_tasks.isEmpty()) {\n    return;\n  }\n\n  m_taskOngoing = true;\n\n  const auto &task = m_tasks.head();\n\n  const auto &cachedData = m_cache.get(task.m_text);\n  if (!cachedData.isNull() && cachedData.m_format == task.m_format) {\n    finishOneTask(cachedData.m_data);\n    return;\n  }\n\n  if (!m_programValid) {\n    qWarning() << \"program to execute for rendering is not valid\" << m_program;\n    finishOneTask(QString());\n    return;\n  }\n\n  // Will be released in finishOneTask.\n  QProcess *process = new QProcess();\n  process->setProperty(TaskIdProperty, task.m_id);\n  process->setProperty(TaskTimeStampProperty, task.m_timeStamp);\n  QObject::connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),\n                   [this, process](int exitCode, QProcess::ExitStatus exitStatus) {\n                     finishOneTask(process, exitCode, exitStatus);\n                   });\n\n  if (m_overriddenCommand.isEmpty()) {\n    Q_ASSERT(!m_program.isEmpty());\n    QStringList args(m_args);\n    args << getFormatArgs(task.m_format);\n    process->start(m_program, getArgsToUse(args));\n  } else {\n    auto cmd = getCommandToUse(m_overriddenCommand, task.m_format);\n    process->start(cmd);\n  }\n\n  if (process->write(task.m_text.toUtf8()) == -1) {\n    qWarning() << \"Graph task\" << task.m_id\n               << \"failed to write to process stdin:\" << process->errorString();\n  }\n\n  process->closeWriteChannel();\n}\n\nvoid GraphHelper::finishOneTask(QProcess *p_process, int p_exitCode,\n                                QProcess::ExitStatus p_exitStatus) {\n  Q_ASSERT(m_taskOngoing && !m_tasks.isEmpty());\n\n  const auto task = m_tasks.dequeue();\n\n  const quint64 id = p_process->property(TaskIdProperty).toULongLong();\n  const quint64 timeStamp = p_process->property(TaskTimeStampProperty).toULongLong();\n  Q_ASSERT(task.m_id == id && task.m_timeStamp == timeStamp);\n\n  qDebug() << \"Graph task\" << id << timeStamp << \"finished\";\n\n  bool failed = true;\n  if (p_exitStatus == QProcess::NormalExit) {\n    if (p_exitCode < 0) {\n      qWarning() << \"Graph task\" << id << \"failed:\" << p_exitCode;\n    } else {\n      failed = false;\n      const auto outBa = p_process->readAllStandardOutput();\n      QString data;\n      if (task.m_format == QStringLiteral(\"svg\")) {\n        data = QString::fromUtf8(outBa);\n        callbackOneTask(task, id, timeStamp, task.m_format, data);\n      } else {\n        data = QString::fromLocal8Bit(outBa.toBase64());\n        callbackOneTask(task, id, timeStamp, task.m_format, data);\n      }\n\n      CacheItem item;\n      item.m_format = task.m_format;\n      item.m_data = data;\n      m_cache.set(task.m_text, item);\n    }\n  } else {\n    qWarning() << \"Graph task\" << id << \"failed to start\" << p_exitCode << p_exitStatus;\n  }\n\n  const QByteArray errBa = p_process->readAllStandardError();\n  if (!errBa.isEmpty()) {\n    QString errStr(QString::fromUtf8(errBa));\n    if (failed) {\n      qWarning() << \"Graph task\" << id << \"stderr:\" << errStr;\n    } else {\n      qDebug() << \"Graph task\" << id << \"stderr:\" << errStr;\n    }\n  }\n\n  if (failed) {\n    callbackOneTask(task, id, task.m_timeStamp, task.m_format, QString());\n  }\n\n  p_process->deleteLater();\n\n  m_taskOngoing = false;\n  processOneTask();\n}\n\nvoid GraphHelper::finishOneTask(const QString &p_data) {\n  Q_ASSERT(m_taskOngoing && !m_tasks.isEmpty());\n\n  const auto task = m_tasks.dequeue();\n\n  qDebug() << \"Graph task\" << task.m_id << task.m_timeStamp << \"finished by cache\" << p_data.size();\n\n  callbackOneTask(task, task.m_id, task.m_timeStamp, task.m_format, p_data);\n\n  m_taskOngoing = false;\n  processOneTask();\n}\n\nQString GraphHelper::getCommandToUse(const QString &p_command, const QString &p_format) {\n  auto cmd(p_command);\n  cmd.replace(\"%1\", p_format);\n  return cmd;\n}\n\nvoid GraphHelper::clearCache() { m_cache.clear(); }\n\nvoid GraphHelper::checkValidProgram() {\n  m_programValid = true;\n  if (m_overriddenCommand.isEmpty()) {\n    if (m_program.isEmpty()) {\n      m_programValid = false;\n    } else {\n      QFileInfo finfo(m_program);\n      m_programValid = !finfo.isAbsolute() || finfo.isExecutable();\n    }\n  }\n}\n\nvoid GraphHelper::callbackOneTask(const Task &p_task, quint64 p_id, TimeStamp p_timeStamp,\n                                  const QString &p_format, const QString &p_data) const {\n  if (p_task.m_owner) {\n    p_task.m_callback(p_id, p_timeStamp, p_format, p_data);\n  }\n}\n"
  },
  {
    "path": "src/widgets/editors/graphhelper.h",
    "content": "#ifndef GRAPHHELPER_H\n#define GRAPHHELPER_H\n\n#include <QPair>\n#include <QPointer>\n#include <QProcess>\n#include <QQueue>\n#include <QStringList>\n\n#include <core/global.h>\n#include <core/noncopyable.h>\n#include <vtextedit/lrucache.h>\n\nnamespace vnotex {\nclass GraphHelper : private Noncopyable {\npublic:\n  typedef std::function<void(quint64, TimeStamp, const QString &, const QString &)> ResultCallback;\n\n  GraphHelper();\n\n  void process(quint64 p_id, TimeStamp p_timeStamp, const QString &p_format, const QString &p_text,\n               QObject *p_owner, const ResultCallback &p_callback);\n\nprotected:\n  virtual QStringList getFormatArgs(const QString &p_format) = 0;\n\n  void clearCache();\n\n  void checkValidProgram();\n\n  static QStringList getArgsToUse(const QStringList &p_args);\n\n  static QString getCommandToUse(const QString &p_command, const QString &p_format);\n\n  QString m_program;\n\n  QStringList m_args;\n\n  // If this is not empty, @m_program and @m_args will be ignored.\n  QString m_overriddenCommand;\n\nprivate:\n  struct Task {\n    quint64 m_id = 0;\n\n    TimeStamp m_timeStamp = 0;\n\n    QString m_format;\n\n    QString m_text;\n\n    QPointer<QObject> m_owner;\n\n    ResultCallback m_callback;\n  };\n\n  struct CacheItem {\n    bool isNull() const { return m_data.isNull(); }\n\n    QString m_format;\n\n    QString m_data;\n  };\n\n  void processOneTask();\n\n  void finishOneTask(QProcess *p_process, int p_exitCode, QProcess::ExitStatus p_exitStatus);\n\n  void finishOneTask(const QString &p_data);\n\n  void callbackOneTask(const Task &p_task, quint64 p_id, TimeStamp p_timeStamp,\n                       const QString &p_format, const QString &p_data) const;\n\n  QQueue<Task> m_tasks;\n\n  bool m_taskOngoing = false;\n\n  // {text} -> CacheItem.\n  vte::LruCache<QString, CacheItem> m_cache;\n\n  // Whether @m_program is valid.\n  bool m_programValid = false;\n};\n} // namespace vnotex\n\n#endif // GRAPHHELPER_H\n"
  },
  {
    "path": "src/widgets/editors/graphvizhelper.cpp",
    "content": "#include \"graphvizhelper.h\"\n\n#include <QDebug>\n#include <QDir>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/markdowneditorconfig.h>\n#include <utils/pathutils.h>\n#include <utils/processutils.h>\n\nusing namespace vnotex;\n\nGraphvizHelper &GraphvizHelper::getInst() {\n  static bool initialized = false;\n  static GraphvizHelper inst;\n  if (!initialized) {\n    initialized = true;\n    const auto &markdownEditorConfig =\n        ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n    inst.update(markdownEditorConfig.getGraphvizExe());\n  }\n  return inst;\n}\n\nvoid GraphvizHelper::update(const QString &p_graphvizFile) {\n  prepareProgramAndArgs(p_graphvizFile, m_program, m_args);\n\n  checkValidProgram();\n\n  clearCache();\n}\n\nvoid GraphvizHelper::prepareProgramAndArgs(const QString &p_graphvizFile, QString &p_program,\n                                           QStringList &p_args) {\n  p_program.clear();\n  p_args.clear();\n\n  p_program = p_graphvizFile.isEmpty()\n                  ? QStringLiteral(\"dot\")\n                  : QDir::toNativeSeparators(PathUtils::absolutePath(p_graphvizFile));\n}\n\nQPair<bool, QString> GraphvizHelper::testGraphviz(const QString &p_graphvizFile) {\n  auto ret = qMakePair(false, QString());\n\n  QString program;\n  QStringList args;\n  prepareProgramAndArgs(p_graphvizFile, program, args);\n  args << \"-Tsvg\";\n\n  const QString testGraph(\"digraph G {VNote->Markdown}\");\n\n  int exitCode = -1;\n  QByteArray outData;\n  QByteArray errData;\n  auto state = ProcessUtils::start(program, args, testGraph.toUtf8(), exitCode, outData, errData);\n  ret.first = (state == ProcessUtils::Succeeded) && (exitCode == 0);\n\n  ret.second = QStringLiteral(\"%1 %2\\n\\nExitcode: %3\\n\\nOutput: %4\\n\\nError: %5\")\n                   .arg(program, args.join(' '), QString::number(exitCode),\n                        QString::fromLocal8Bit(outData), QString::fromLocal8Bit(errData));\n\n  return ret;\n}\n\nQStringList GraphvizHelper::getFormatArgs(const QString &p_format) {\n  QStringList args;\n  args << (\"-T\" + p_format);\n  return args;\n}\n"
  },
  {
    "path": "src/widgets/editors/graphvizhelper.h",
    "content": "#ifndef GRAPHVIZHELPER_H\n#define GRAPHVIZHELPER_H\n\n#include \"graphhelper.h\"\n\nnamespace vnotex {\nclass GraphvizHelper : public GraphHelper {\npublic:\n  void update(const QString &p_graphvizFile);\n\n  static GraphvizHelper &getInst();\n\n  static QPair<bool, QString> testGraphviz(const QString &p_graphvizFile);\n\nprivate:\n  GraphvizHelper() = default;\n\n  QStringList getFormatArgs(const QString &p_format) Q_DECL_OVERRIDE;\n\n  static void prepareProgramAndArgs(const QString &p_graphvizFile, QString &p_program,\n                                    QStringList &p_args);\n};\n} // namespace vnotex\n\n#endif // GRAPHVIZHELPER_H\n"
  },
  {
    "path": "src/widgets/editors/markdowneditor.cpp",
    "content": "#include \"markdowneditor.h\"\n\n#include <QAction>\n#include <QApplication>\n#include <QBuffer>\n#include <QClipboard>\n#include <QDir>\n#include <QFileInfo>\n#include <QHash>\n#include <QMenu>\n#include <QMimeData>\n#include <QMimeDatabase>\n#include <QPainter>\n#include <QProgressDialog>\n#include <QRegularExpression>\n#include <QShortcut>\n#include <QTemporaryFile>\n#include <QTimer>\n\n#include <vtextedit/markdowneditorconfig.h>\n#include <vtextedit/markdownutils.h>\n#include <vtextedit/networkutils.h>\n#include <vtextedit/previewdata.h>\n#include <vtextedit/previewmgr.h>\n#include <vtextedit/textblockdata.h>\n#include <vtextedit/texteditutils.h>\n#include <vtextedit/theme.h>\n#include <vtextedit/vtextedit.h>\n\n#include <widgets/dialogs/imageinsertdialog.h>\n#include <widgets/dialogs/linkinsertdialog.h>\n#include <widgets/dialogs/tableinsertdialog.h>\n#include <widgets/messageboxhelper.h>\n\n#include <widgets/dialogs/selectdialog.h>\n\n#include <buffer/buffer.h>\n#include <buffer/markdownbuffer.h>\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/exception.h>\n#include <core/fileopenparameters.h>\n#include <core/markdowneditorconfig.h>\n#include <core/texteditorconfig.h>\n#include <core/vnotex.h>\n#include <imagehost/imagehost.h>\n#include <imagehost/imagehostmgr.h>\n#include <imagehost/imagehostutils.h>\n#include <utils/clipboardutils.h>\n#include <utils/fileutils.h>\n#include <utils/htmlutils.h>\n#include <utils/imageutils.h>\n#include <utils/pathutils.h>\n#include <utils/webutils.h>\n#include <utils/widgetutils.h>\n\n#include \"../outlineprovider.h\"\n#include \"markdowntablehelper.h\"\n#include \"previewhelper.h\"\n\nusing namespace vnotex;\n\nMarkdownEditor::Heading::Heading(const QString &p_name, int p_level, const QString &p_sectionNumber,\n                                 int p_blockNumber)\n    : m_name(p_name), m_level(p_level), m_sectionNumber(p_sectionNumber),\n      m_blockNumber(p_blockNumber) {}\n\nMarkdownEditor::MarkdownEditor(const MarkdownEditorConfig &p_config,\n                               const QSharedPointer<vte::MarkdownEditorConfig> &p_editorConfig,\n                               const QSharedPointer<vte::TextEditorParameters> &p_editorParas,\n                               QWidget *p_parent)\n    : vte::VMarkdownEditor(p_editorConfig, p_editorParas, p_parent), m_config(p_config) {\n  setupShortcuts();\n\n  connect(m_textEdit, &vte::VTextEdit::canInsertFromMimeDataRequested, this,\n          &MarkdownEditor::handleCanInsertFromMimeData);\n  connect(m_textEdit, &vte::VTextEdit::insertFromMimeDataRequested, this,\n          &MarkdownEditor::handleInsertFromMimeData);\n  connect(m_textEdit, &vte::VTextEdit::contextMenuEventRequested, this,\n          &MarkdownEditor::handleContextMenuEvent);\n\n  connect(getHighlighter(), &vte::PegMarkdownHighlighter::headersUpdated, this,\n          &MarkdownEditor::updateHeadings);\n\n  setupTableHelper();\n\n  m_headingTimer = new QTimer(this);\n  m_headingTimer->setInterval(500);\n  m_headingTimer->setSingleShot(true);\n  connect(m_headingTimer, &QTimer::timeout, this, &MarkdownEditor::currentHeadingChanged);\n  connect(m_textEdit, &vte::VTextEdit::cursorLineChanged, m_headingTimer,\n          QOverload<>::of(&QTimer::start));\n\n  m_sectionNumberTimer = new QTimer(this);\n  m_sectionNumberTimer->setInterval(1000);\n  m_sectionNumberTimer->setSingleShot(true);\n  connect(m_sectionNumberTimer, &QTimer::timeout, this,\n          [this]() { updateSectionNumber(m_headings); });\n\n  updateFromConfig(false);\n}\n\nMarkdownEditor::~MarkdownEditor() {}\n\nvoid MarkdownEditor::setPreviewHelper(PreviewHelper *p_helper) {\n  auto highlighter = getHighlighter();\n  connect(highlighter, &vte::PegMarkdownHighlighter::codeBlocksUpdated, p_helper,\n          &PreviewHelper::codeBlocksUpdated);\n  connect(highlighter, &vte::PegMarkdownHighlighter::mathBlocksUpdated, p_helper,\n          &PreviewHelper::mathBlocksUpdated);\n\n  auto previewMgr = getPreviewMgr();\n  connect(p_helper, &PreviewHelper::inplacePreviewCodeBlockUpdated, previewMgr,\n          &vte::PreviewMgr::updateCodeBlocks);\n  connect(p_helper, &PreviewHelper::inplacePreviewMathBlockUpdated, previewMgr,\n          &vte::PreviewMgr::updateMathBlocks);\n  connect(p_helper, &PreviewHelper::potentialObsoletePreviewBlocksUpdated, previewMgr,\n          &vte::PreviewMgr::checkBlocksForObsoletePreview);\n}\n\nvoid MarkdownEditor::typeHeading(int p_level) {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeHeading(m_textEdit, p_level);\n}\n\nvoid MarkdownEditor::typeBold() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeBold(m_textEdit);\n}\n\nvoid MarkdownEditor::typeItalic() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeItalic(m_textEdit);\n}\n\nvoid MarkdownEditor::typeStrikethrough() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeStrikethrough(m_textEdit);\n}\n\nvoid MarkdownEditor::typeMark() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeMark(m_textEdit);\n}\n\nvoid MarkdownEditor::typeUnorderedList() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeUnorderedList(m_textEdit);\n}\n\nvoid MarkdownEditor::typeOrderedList() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeOrderedList(m_textEdit);\n}\n\nvoid MarkdownEditor::typeTodoList(bool p_checked) {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeTodoList(m_textEdit, p_checked);\n}\n\nvoid MarkdownEditor::typeCode() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeCode(m_textEdit);\n}\n\nvoid MarkdownEditor::typeCodeBlock() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeCodeBlock(m_textEdit);\n}\n\nvoid MarkdownEditor::typeMath() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeMath(m_textEdit);\n}\n\nvoid MarkdownEditor::typeMathBlock() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeMathBlock(m_textEdit);\n}\n\nvoid MarkdownEditor::typeQuote() {\n  enterInsertModeIfApplicable();\n  vte::MarkdownUtils::typeQuote(m_textEdit);\n}\n\nvoid MarkdownEditor::typeLink() {\n  QString linkText;\n  QString linkUrl;\n\n  // Try get Url or text from selection.\n  auto cursor = m_textEdit->textCursor();\n  QRegularExpression urlReg(\"[\\\\.\\\\\\\\/]\");\n  if (cursor.hasSelection()) {\n    auto text = vte::TextEditUtils::getSelectedText(cursor).trimmed();\n    if (!text.isEmpty() && !text.contains(QLatin1Char('\\n'))) {\n      if (text.contains(urlReg) && QUrl::fromUserInput(text).isValid()) {\n        linkUrl = text;\n      } else {\n        linkText = text;\n      }\n    }\n  }\n\n  // Fetch link from clipboard.\n  if (linkUrl.isEmpty() && linkText.isEmpty()) {\n    const auto clipboard = QApplication::clipboard();\n    const auto mimeData = clipboard->mimeData();\n    const QString text = mimeData->text().trimmed();\n    // No multi-line.\n    if (!text.isEmpty() && !text.contains(QLatin1Char('\\n'))) {\n      if (text.contains(urlReg) && QUrl::fromUserInput(text).isValid()) {\n        linkUrl = text;\n      } else {\n        linkText = text;\n      }\n    }\n  }\n\n  LinkInsertDialog dialog(tr(\"Insert Link\"), linkText, linkUrl, false, this);\n  if (dialog.exec() == QDialog::Accepted) {\n    linkText = dialog.getLinkText();\n    linkUrl = dialog.getLinkUrl();\n\n    enterInsertModeIfApplicable();\n    vte::MarkdownUtils::typeLink(m_textEdit, linkText, linkUrl);\n  }\n}\n\nvoid MarkdownEditor::typeImage() {\n  Q_ASSERT(m_buffer);\n  ImageInsertDialog dialog(tr(\"Insert Image\"), \"\", \"\", \"\", true, this);\n\n  // Try fetch image from clipboard.\n  {\n    QClipboard *clipboard = QApplication::clipboard();\n    const QMimeData *mimeData = clipboard->mimeData();\n\n    QUrl url;\n    if (mimeData->hasImage()) {\n      QImage im = qvariant_cast<QImage>(mimeData->imageData());\n      if (im.isNull()) {\n        return;\n      }\n\n      dialog.setImage(im);\n      dialog.setImageSource(ImageInsertDialog::Source::ImageData);\n    } else if (mimeData->hasUrls()) {\n      QList<QUrl> urls = mimeData->urls();\n      if (urls.size() == 1) {\n        url = urls[0];\n      }\n    } else if (mimeData->hasText()) {\n      url = QUrl::fromUserInput(mimeData->text());\n    }\n\n    if (url.isValid()) {\n      if (url.isLocalFile()) {\n        dialog.setImagePath(url.toLocalFile());\n      } else {\n        dialog.setImagePath(url.toString());\n      }\n    }\n  }\n\n  if (dialog.exec() != QDialog::Accepted) {\n    return;\n  }\n\n  enterInsertModeIfApplicable();\n  if (dialog.getImageSource() == ImageInsertDialog::Source::LocalFile) {\n    insertImageToBufferFromLocalFile(dialog.getImageTitle(), dialog.getImageAltText(),\n                                     dialog.getImagePath(), dialog.getScaledWidth());\n  } else {\n    auto image = dialog.getImage();\n    if (!image.isNull()) {\n      insertImageToBufferFromData(dialog.getImageTitle(), dialog.getImageAltText(), image,\n                                  dialog.getScaledWidth());\n    }\n  }\n}\n\nvoid MarkdownEditor::typeTable() {\n  TableInsertDialog dialog(tr(\"Insert Table\"), this);\n  if (dialog.exec() != QDialog::Accepted) {\n    return;\n  }\n\n  auto cursor = m_textEdit->textCursor();\n  cursor.beginEditBlock();\n  if (cursor.hasSelection()) {\n    cursor.setPosition(qMax(cursor.selectionStart(), cursor.selectionEnd()));\n  }\n\n  bool newBlock = !cursor.atBlockEnd();\n  if (!newBlock && !cursor.atBlockStart()) {\n    QString text = cursor.block().text().trimmed();\n    if (!text.isEmpty() && text != QStringLiteral(\">\")) {\n      // Insert a new block before inserting table.\n      newBlock = true;\n    }\n  }\n\n  if (newBlock) {\n    auto indentationStr = vte::TextEditUtils::fetchIndentationSpaces(cursor.block());\n    vte::TextEditUtils::insertBlock(cursor, false);\n    cursor.insertText(indentationStr);\n  }\n\n  cursor.endEditBlock();\n  m_textEdit->setTextCursor(cursor);\n\n  // Insert table.\n  m_tableHelper->insertTable(dialog.getRowCount(), dialog.getColumnCount(), dialog.getAlignment());\n}\n\nvoid MarkdownEditor::setBuffer(Buffer *p_buffer) { m_buffer = p_buffer; }\n\nbool MarkdownEditor::insertImageToBufferFromLocalFile(const QString &p_title,\n                                                      const QString &p_altText,\n                                                      const QString &p_srcImagePath,\n                                                      int p_scaledWidth, int p_scaledHeight,\n                                                      bool p_insertText, QString *p_urlInLink) {\n  auto destFileName = generateImageFileNameToInsertAs(p_title, QFileInfo(p_srcImagePath).suffix());\n\n  QString destFilePath;\n\n  if (m_imageHost) {\n    // Save to image host.\n    QByteArray ba;\n    try {\n      ba = FileUtils::readFile(p_srcImagePath);\n    } catch (Exception &e) {\n      MessageBoxHelper::notify(\n          MessageBoxHelper::Warning,\n          tr(\"Failed to read local image file (%1) (%2).\").arg(p_srcImagePath, e.what()), this);\n      return false;\n    }\n    destFilePath = saveToImageHost(ba, destFileName);\n    if (destFilePath.isEmpty()) {\n      return false;\n    }\n  } else {\n    try {\n      destFilePath = m_buffer->insertImage(p_srcImagePath, destFileName);\n    } catch (Exception &e) {\n      MessageBoxHelper::notify(\n          MessageBoxHelper::Warning,\n          tr(\"Failed to insert image from local file (%1) (%2).\").arg(p_srcImagePath, e.what()),\n          this);\n      return false;\n    }\n  }\n\n  insertImageLink(p_title, p_altText, destFilePath, p_scaledWidth, p_scaledHeight, p_insertText,\n                  p_urlInLink);\n  return true;\n}\n\nQString MarkdownEditor::generateImageFileNameToInsertAs(const QString &p_title,\n                                                        const QString &p_suffix) {\n  return FileUtils::generateRandomFileName(p_title, p_suffix);\n}\n\nbool MarkdownEditor::insertImageToBufferFromData(const QString &p_title, const QString &p_altText,\n                                                 const QImage &p_image, int p_scaledWidth,\n                                                 int p_scaledHeight) {\n  // Save as PNG by default.\n  const QString format(\"png\");\n  const auto destFileName = generateImageFileNameToInsertAs(p_title, format);\n\n  QString destFilePath;\n\n  if (m_imageHost) {\n    // Save to image host.\n    QByteArray ba;\n    QBuffer buffer(&ba);\n    buffer.open(QIODevice::WriteOnly);\n    p_image.save(&buffer, format.toStdString().c_str());\n\n    destFilePath = saveToImageHost(ba, destFileName);\n    if (destFilePath.isEmpty()) {\n      return false;\n    }\n  } else {\n    try {\n      destFilePath = m_buffer->insertImage(p_image, destFileName);\n    } catch (Exception &e) {\n      MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                               tr(\"Failed to insert image from data (%1).\").arg(e.what()), this);\n      return false;\n    }\n  }\n\n  insertImageLink(p_title, p_altText, destFilePath, p_scaledWidth, p_scaledHeight);\n  return true;\n}\n\nvoid MarkdownEditor::insertImageLink(const QString &p_title, const QString &p_altText,\n                                     const QString &p_destImagePath, int p_scaledWidth,\n                                     int p_scaledHeight, bool p_insertText, QString *p_urlInLink) {\n  const auto urlInLink = getRelativeLink(p_destImagePath);\n  if (p_urlInLink) {\n    *p_urlInLink = urlInLink;\n  }\n  static_cast<MarkdownBuffer *>(m_buffer)->addInsertedImage(p_destImagePath, urlInLink);\n  if (p_insertText) {\n    const auto imageLink = vte::MarkdownUtils::generateImageLink(p_title, urlInLink, p_altText,\n                                                                 p_scaledWidth, p_scaledHeight);\n    m_textEdit->insertPlainText(imageLink);\n  }\n}\n\nvoid MarkdownEditor::handleCanInsertFromMimeData(const QMimeData *p_source, bool *p_handled,\n                                                 bool *p_allowed) {\n  m_shouldTriggerRichPaste = ConfigMgr::getInst()\n                                 .getEditorConfig()\n                                 .getMarkdownEditorConfig()\n                                 .getRichPasteByDefaultEnabled();\n\n  if (m_plainTextPasteAsked) {\n    m_shouldTriggerRichPaste = false;\n    return;\n  }\n\n  if (m_richPasteAsked) {\n    m_shouldTriggerRichPaste = true;\n    *p_handled = true;\n    *p_allowed = true;\n    return;\n  }\n\n  if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) {\n    m_shouldTriggerRichPaste = !m_shouldTriggerRichPaste;\n  }\n\n  if (m_shouldTriggerRichPaste) {\n    *p_handled = true;\n    *p_allowed = true;\n    return;\n  }\n\n  if (p_source->hasImage()) {\n    m_shouldTriggerRichPaste = true;\n    *p_handled = true;\n    *p_allowed = true;\n    return;\n  }\n\n  if (p_source->hasUrls()) {\n    *p_handled = true;\n    *p_allowed = true;\n    return;\n  }\n}\n\nvoid MarkdownEditor::handleInsertFromMimeData(const QMimeData *p_source, bool *p_handled) {\n  if (!m_shouldTriggerRichPaste) {\n    // Default paste.\n    // Give tips about the Rich Paste and Parse to Markdown And Paste features.\n    VNoteX::getInst().showStatusMessageShort(\n        tr(\"For advanced paste, try the \\\"Rich Paste\\\" and \\\"Parse to Markdown and Paste\\\" on the \"\n           \"editor's context menu\"));\n    return;\n  }\n\n  m_shouldTriggerRichPaste = false;\n\n  if (processHtmlFromMimeData(p_source)) {\n    *p_handled = true;\n    return;\n  }\n\n  if (processImageFromMimeData(p_source)) {\n    *p_handled = true;\n    return;\n  }\n\n  if (processUrlFromMimeData(p_source)) {\n    *p_handled = true;\n    return;\n  }\n\n  if (processMultipleUrlsFromMimeData(p_source)) {\n    *p_handled = true;\n    return;\n  }\n}\n\nbool MarkdownEditor::processHtmlFromMimeData(const QMimeData *p_source) {\n  if (!p_source->hasHtml()) {\n    return false;\n  }\n\n  const QString html(p_source->html());\n\n  // Process <img>.\n  QRegularExpression reg(\"<img ([^>]*)src=\\\"([^\\\"]+)\\\"([^>]*)>\");\n  QRegularExpressionMatch match;\n  if (html.indexOf(reg, 0, &match) != -1 && HtmlUtils::hasOnlyImgTag(html)) {\n    if (p_source->hasImage()) {\n      // Both image data and URL are embedded.\n      SelectDialog dialog(tr(\"Insert From Clipboard\"), this);\n      dialog.addSelection(tr(\"Insert From URL\"), 0);\n      dialog.addSelection(tr(\"Insert From Image Data\"), 1);\n      dialog.addSelection(tr(\"Insert As Image Link\"), 2);\n\n      if (dialog.exec() == QDialog::Accepted) {\n        int selection = dialog.getSelection();\n        if (selection == 1) {\n          // Insert from image data.\n          insertImageFromMimeData(p_source);\n          return true;\n        } else if (selection == 2) {\n          // Insert as link.\n          auto imageLink = vte::MarkdownUtils::generateImageLink(\"\", match.captured(2), \"\");\n          m_textEdit->insertPlainText(imageLink);\n          return true;\n        }\n      } else {\n        return true;\n      }\n    }\n\n    insertImageFromUrl(match.captured(2));\n    return true;\n  }\n\n  return false;\n}\n\nbool MarkdownEditor::processImageFromMimeData(const QMimeData *p_source) {\n  if (!p_source->hasImage()) {\n    return false;\n  }\n\n  // Image url in the clipboard.\n  if (p_source->hasText()) {\n    SelectDialog dialog(tr(\"Insert From Clipboard\"), this);\n    dialog.addSelection(tr(\"Insert As Image\"), 0);\n    dialog.addSelection(tr(\"Insert As Text\"), 1);\n    dialog.addSelection(tr(\"Insert As Image Link\"), 2);\n\n    if (dialog.exec() == QDialog::Accepted) {\n      int selection = dialog.getSelection();\n      if (selection == 1) {\n        // Insert as text.\n        Q_ASSERT(p_source->hasText() && p_source->hasImage());\n        m_textEdit->insertFromMimeDataOfBase(p_source);\n        return true;\n      } else if (selection == 2) {\n        // Insert as link.\n        auto imageLink = vte::MarkdownUtils::generateImageLink(\"\", p_source->text(), \"\");\n        m_textEdit->insertPlainText(imageLink);\n        return true;\n      }\n    } else {\n      return true;\n    }\n  }\n\n  insertImageFromMimeData(p_source);\n  return true;\n}\n\nbool MarkdownEditor::processUrlFromMimeData(const QMimeData *p_source) {\n  const auto urls = p_source->urls();\n  if (urls.size() > 1) {\n    return false;\n  }\n\n  QUrl url;\n  if (p_source->hasUrls()) {\n    if (urls.size() == 1) {\n      url = urls[0];\n    }\n  } else if (p_source->hasText()) {\n    // Try to get URL from text.\n    const QString text = p_source->text();\n    if (QFileInfo::exists(text)) {\n      url = QUrl::fromLocalFile(text);\n    } else {\n      url.setUrl(text);\n      if (url.scheme() != QStringLiteral(\"https\") && url.scheme() != QStringLiteral(\"http\")) {\n        url.clear();\n      }\n    }\n  }\n\n  if (!url.isValid()) {\n    return false;\n  }\n\n  const bool isImage = PathUtils::isImageUrl(PathUtils::urlToPath(url));\n  QString localFile = url.toLocalFile();\n  if (!url.isLocalFile() || !QFileInfo::exists(localFile)) {\n    localFile.clear();\n  }\n\n  bool isTextFile = false;\n  if (!isImage && !localFile.isEmpty()) {\n    const auto mimeType = QMimeDatabase().mimeTypeForFile(localFile);\n    if (mimeType.isValid() && mimeType.inherits(QStringLiteral(\"text/plain\"))) {\n      isTextFile = true;\n    }\n  }\n\n  SelectDialog dialog(tr(\"Insert From Clipboard\"), this);\n  if (isImage) {\n    dialog.addSelection(tr(\"Insert As Image\"), 0);\n    dialog.addSelection(tr(\"Insert As Image Link\"), 1);\n    if (!localFile.isEmpty()) {\n      dialog.addSelection(tr(\"Insert As Relative Image Link\"), 7);\n    }\n  }\n\n  dialog.addSelection(tr(\"Insert As Link\"), 2);\n  if (!localFile.isEmpty()) {\n    dialog.addSelection(tr(\"Insert As Relative Link\"), 3);\n\n    if (m_buffer->isAttachmentSupported() && !m_buffer->isAttachment(localFile) &&\n        !PathUtils::isDir(localFile)) {\n      dialog.addSelection(tr(\"Attach And Insert Link\"), 6);\n    }\n  }\n\n  dialog.addSelection(tr(\"Insert As Text\"), 4);\n  if (!localFile.isEmpty() && isTextFile) {\n    dialog.addSelection(tr(\"Insert File Content\"), 5);\n  }\n\n  // FIXME: After calling dialog.exec(), p_source->hasUrl() returns false.\n  if (dialog.exec() == QDialog::Accepted) {\n    bool relativeLink = false;\n    switch (dialog.getSelection()) {\n    case 0: {\n      // Insert As Image.\n      insertImageFromUrl(PathUtils::urlToPath(url));\n      return true;\n    }\n\n    case 7:\n      // Insert As Relative Image Link.\n      relativeLink = true;\n      Q_FALLTHROUGH();\n\n    case 1: {\n      // Insert As Image Link.\n      QString urlInLink;\n      if (relativeLink) {\n        urlInLink = getRelativeLink(localFile);\n      } else {\n        urlInLink = url.toString(QUrl::EncodeSpaces);\n      }\n\n      enterInsertModeIfApplicable();\n      const auto imageLink = vte::MarkdownUtils::generateImageLink(\"\", urlInLink, \"\");\n      m_textEdit->insertPlainText(imageLink);\n      return true;\n    }\n\n    case 6: {\n      // Attach And Insert Link.\n      QStringList fileList;\n      fileList << localFile;\n      fileList = m_buffer->addAttachment(QString(), fileList);\n\n      // Update localFile to point to the attachment file.\n      localFile = fileList[0];\n      Q_FALLTHROUGH();\n    }\n\n    case 3:\n      // Insert As Relative link.\n      relativeLink = true;\n      Q_FALLTHROUGH();\n\n    case 2: {\n      // Insert As Link.\n      QString linkText;\n      if (!localFile.isEmpty()) {\n        linkText = QFileInfo(localFile).fileName();\n      }\n\n      QString linkUrl;\n      if (relativeLink) {\n        Q_ASSERT(!localFile.isEmpty());\n        linkUrl = getRelativeLink(localFile);\n      } else {\n        linkUrl = url.toString(QUrl::EncodeSpaces);\n      }\n\n      LinkInsertDialog linkDialog(tr(\"Insert Link\"), linkText, linkUrl, false, this);\n      if (linkDialog.exec() == QDialog::Accepted) {\n        linkText = linkDialog.getLinkText();\n        linkUrl = linkDialog.getLinkUrl();\n\n        enterInsertModeIfApplicable();\n        vte::MarkdownUtils::typeLink(m_textEdit, linkText, linkUrl);\n      }\n\n      return true;\n    }\n\n    case 4: {\n      // Insert As Text.\n      enterInsertModeIfApplicable();\n      if (p_source->hasText()) {\n        m_textEdit->insertPlainText(p_source->text());\n      } else {\n        m_textEdit->insertPlainText(url.toString());\n      }\n\n      return true;\n    }\n\n    case 5: {\n      // Insert File Content.\n      Q_ASSERT(!localFile.isEmpty() && isTextFile);\n      enterInsertModeIfApplicable();\n      m_textEdit->insertPlainText(FileUtils::readTextFile(localFile));\n      return true;\n    }\n\n    default:\n      Q_ASSERT(false);\n      break;\n    }\n  } else {\n    // Nothing happens.\n    return true;\n  }\n\n  return false;\n}\n\nbool MarkdownEditor::processMultipleUrlsFromMimeData(const QMimeData *p_source) {\n  const auto urls = p_source->urls();\n  if (urls.size() <= 1) {\n    return false;\n  }\n\n  bool isProcessed = false;\n  // Judgment if all QMimeData are images.\n  bool isAllImage = true;\n  for (const QUrl &url : urls) {\n    if (!PathUtils::isImageUrl(PathUtils::urlToPath(url))) {\n      isAllImage = false;\n      break;\n    }\n  }\n\n  SelectDialog dialog(tr(\"Insert From Clipboard (%n items)\", \"\", urls.size()), this);\n  if (isAllImage) {\n    dialog.addSelection(tr(\"Insert As Image\"), 0);\n  }\n  if (m_buffer->isAttachmentSupported()) {\n    dialog.addSelection(tr(\"Attach And Insert Link\"), 1);\n  }\n  dialog.setMinimumWidth(400);\n\n  if (dialog.exec() == QDialog::Accepted) {\n    switch (dialog.getSelection()) {\n    case 0: {\n      // Insert As Image.\n      for (const QUrl &url : urls) {\n        insertImageFromUrl(PathUtils::urlToPath(url), true);\n        m_textEdit->insertPlainText(\"\\n\\n\");\n      }\n      isProcessed = true;\n      break;\n    }\n    case 1: {\n      // Attach And Insert Link.\n      QStringList fileList;\n      for (const QUrl &url : urls) {\n        fileList << url.toLocalFile();\n      }\n      fileList = m_buffer->addAttachment(QString(), fileList);\n      enterInsertModeIfApplicable();\n      for (int i = 0; i < fileList.length(); ++i) {\n        vte::MarkdownUtils::typeLink(m_textEdit, QFileInfo(fileList[i]).fileName(),\n                                     getRelativeLink(fileList[i]));\n\n        m_textEdit->insertPlainText(\"\\n\\n\");\n      }\n      isProcessed = true;\n      break;\n    }\n    }\n  }\n\n  return isProcessed;\n}\n\nvoid MarkdownEditor::insertImageFromMimeData(const QMimeData *p_source) {\n  QImage image = qvariant_cast<QImage>(p_source->imageData());\n  if (image.isNull()) {\n    return;\n  }\n\n  ImageInsertDialog dialog(tr(\"Insert Image From Clipboard\"), \"\", \"\", \"\", false, this);\n  dialog.setImage(image);\n  if (dialog.exec() == QDialog::Accepted) {\n    enterInsertModeIfApplicable();\n    insertImageToBufferFromData(dialog.getImageTitle(), dialog.getImageAltText(), image,\n                                dialog.getScaledWidth());\n  }\n}\n\nvoid MarkdownEditor::insertImageFromUrl(const QString &p_url, bool p_quiet) {\n  if (p_quiet) {\n    insertImageToBufferFromLocalFile(\"\", \"\", p_url, 0);\n  } else {\n    ImageInsertDialog dialog(tr(\"Insert Image From URL\"), \"\", \"\", \"\", false, this);\n    dialog.setImagePath(p_url);\n    if (dialog.exec() == QDialog::Accepted) {\n      enterInsertModeIfApplicable();\n      if (dialog.getImageSource() == ImageInsertDialog::Source::LocalFile) {\n        insertImageToBufferFromLocalFile(dialog.getImageTitle(), dialog.getImageAltText(),\n                                         dialog.getImagePath(), dialog.getScaledWidth());\n      } else {\n        auto image = dialog.getImage();\n        if (!image.isNull()) {\n          insertImageToBufferFromData(dialog.getImageTitle(), dialog.getImageAltText(), image,\n                                      dialog.getScaledWidth());\n        }\n      }\n    }\n  }\n}\n\nQString MarkdownEditor::getRelativeLink(const QString &p_path) {\n  if (PathUtils::isLocalFile(p_path)) {\n    auto relativePath =\n        PathUtils::relativePath(PathUtils::parentDirPath(m_buffer->getContentPath()), p_path);\n    auto link = PathUtils::encodeSpacesInPath(QDir::fromNativeSeparators(relativePath));\n    if (m_config.getPrependDotInRelativeLink()) {\n      PathUtils::prependDotIfRelative(link);\n    }\n\n    return link;\n  } else {\n    return p_path;\n  }\n}\n\nconst QVector<MarkdownEditor::Heading> &MarkdownEditor::getHeadings() const { return m_headings; }\n\nint MarkdownEditor::getCurrentHeadingIndex() const {\n  int blockNumber = m_textEdit->textCursor().blockNumber();\n  return getHeadingIndexByBlockNumber(blockNumber);\n}\n\nvoid MarkdownEditor::updateHeadings(const QVector<vte::peg::ElementRegion> &p_headerRegions) {\n  bool needUpdateSectionNumber = false;\n  if (isReadOnly()) {\n    m_sectionNumberEnabled = false;\n  } else {\n    needUpdateSectionNumber =\n        m_config.getSectionNumberMode() == MarkdownEditorConfig::SectionNumberMode::Edit;\n    if (m_overriddenSectionNumber != OverrideState::NoOverride) {\n      needUpdateSectionNumber = m_overriddenSectionNumber == OverrideState::ForceEnable;\n    }\n    if (needUpdateSectionNumber) {\n      m_sectionNumberEnabled = true;\n    } else if (m_sectionNumberEnabled) {\n      // On -> Off. We still need to do the clean up.\n      needUpdateSectionNumber = true;\n      m_sectionNumberEnabled = false;\n    }\n  }\n\n  QVector<Heading> headings;\n  headings.reserve(p_headerRegions.size());\n\n  // Assume that each block contains only one line.\n  // Only support # syntax for now.\n  auto doc = document();\n  for (auto const &reg : p_headerRegions) {\n    auto block = doc->findBlock(reg.m_startPos);\n    if (!block.isValid()) {\n      continue;\n    }\n\n    if (!block.contains(reg.m_endPos - 1)) {\n      qWarning() << \"header accross multiple blocks, starting from block\" << block.blockNumber()\n                 << block.text();\n    }\n\n    auto match = vte::MarkdownUtils::matchHeader(block.text());\n    if (match.m_matched) {\n      Heading heading(match.m_header, match.m_level, match.m_sequence, block.blockNumber());\n      headings.append(heading);\n    }\n  }\n\n  OutlineProvider::makePerfectHeadings(headings, m_headings);\n\n  if (needUpdateSectionNumber) {\n    // Use a timer to kick off the update to let user have time to undo.\n    m_sectionNumberTimer->start();\n  }\n\n  emit headingsChanged();\n\n  emit currentHeadingChanged();\n}\n\nint MarkdownEditor::getHeadingIndexByBlockNumber(int p_blockNumber) const {\n  if (m_headings.isEmpty()) {\n    return -1;\n  }\n\n  int left = 0, right = m_headings.size() - 1;\n  while (left < right) {\n    int mid = left + (right - left + 1) / 2;\n    int val = m_headings[mid].m_blockNumber;\n    if (val == -1) {\n      // Search to right.\n      for (int i = mid + 1; i <= right; ++i) {\n        if (m_headings[i].m_blockNumber != -1) {\n          mid = i;\n          val = m_headings[i].m_blockNumber;\n          break;\n        }\n      }\n\n      if (val == -1) {\n        // Search to left.\n        for (int i = mid - 1; i >= left; --i) {\n          if (m_headings[i].m_blockNumber != -1) {\n            mid = i;\n            val = m_headings[i].m_blockNumber;\n            break;\n          }\n        }\n      }\n    }\n\n    if (val == -1) {\n      // No more valid values.\n      break;\n    }\n\n    if (val == p_blockNumber) {\n      return mid;\n    } else if (val > p_blockNumber) {\n      // Skip the -1 headings.\n      // Bad case: [0, 2, 3, 43, 44, -1, 46, 60].\n      // If not skipped, [left, right] will be stuck at [4, 5].\n      right = mid - 1;\n      while (right >= left && m_headings[right].m_blockNumber == -1) {\n        --right;\n      }\n    } else {\n      left = mid;\n    }\n  }\n\n  if (m_headings[left].m_blockNumber <= p_blockNumber && m_headings[left].m_blockNumber != -1) {\n    return left;\n  }\n\n  return -1;\n}\n\nvoid MarkdownEditor::scrollToHeading(int p_idx) {\n  if (p_idx < 0 || p_idx >= m_headings.size()) {\n    return;\n  }\n\n  if (m_headings[p_idx].m_blockNumber == -1) {\n    return;\n  }\n\n  scrollToLine(m_headings[p_idx].m_blockNumber, true);\n}\n\nvoid MarkdownEditor::handleContextMenuEvent(QContextMenuEvent *p_event, bool *p_handled,\n                                            QScopedPointer<QMenu> *p_menu) {\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  *p_handled = true;\n  p_menu->reset(m_textEdit->createStandardContextMenu(p_event->pos()));\n  auto menu = p_menu->data();\n\n  const auto actions = menu->actions();\n  QAction *firstAct = actions.isEmpty() ? nullptr : actions.first();\n  // QAction *copyAct = WidgetUtils::findActionByObjectName(actions, \"edit-copy\");\n  QAction *pasteAct = WidgetUtils::findActionByObjectName(actions, \"edit-paste\");\n\n  const bool hasSelection = m_textEdit->hasSelection();\n\n  if (!hasSelection) {\n    auto readAct = new QAction(tr(\"&Read\"), menu);\n    WidgetUtils::addActionShortcutText(readAct,\n                                       editorConfig.getShortcut(EditorConfig::Shortcut::EditRead));\n    connect(readAct, &QAction::triggered, this, &MarkdownEditor::readRequested);\n    menu->insertAction(firstAct, readAct);\n    if (firstAct) {\n      menu->insertSeparator(firstAct);\n    }\n\n    prependContextSensitiveMenu(menu, p_event->pos());\n  }\n\n  if (pasteAct && pasteAct->isEnabled()) {\n    QClipboard *clipboard = QApplication::clipboard();\n    const QMimeData *mimeData = clipboard->mimeData();\n\n    // Rich Paste or Plain Text Paste.\n    const bool richPasteByDefault =\n        editorConfig.getMarkdownEditorConfig().getRichPasteByDefaultEnabled();\n    auto altPasteAct =\n        new QAction(richPasteByDefault ? tr(\"Paste as Plain Text\") : tr(\"Rich Paste\"), menu);\n    WidgetUtils::addActionShortcutText(altPasteAct,\n                                       editorConfig.getShortcut(EditorConfig::Shortcut::AltPaste));\n    connect(altPasteAct, &QAction::triggered, this, &MarkdownEditor::altPaste);\n    WidgetUtils::insertActionAfter(menu, pasteAct, altPasteAct);\n\n    if (mimeData->hasHtml()) {\n      // Parse to Markdown and Paste.\n      auto parsePasteAct = new QAction(tr(\"Parse to Markdown and Paste\"), menu);\n      WidgetUtils::addActionShortcutText(\n          parsePasteAct, editorConfig.getShortcut(EditorConfig::Shortcut::ParseToMarkdownAndPaste));\n      connect(parsePasteAct, &QAction::triggered, this, &MarkdownEditor::parseToMarkdownAndPaste);\n      WidgetUtils::insertActionAfter(menu, altPasteAct, parsePasteAct);\n    }\n  }\n\n  {\n    menu->addSeparator();\n\n    auto snippetAct =\n        menu->addAction(tr(\"Insert Snippet\"), this, &MarkdownEditor::applySnippetRequested);\n    WidgetUtils::addActionShortcutText(\n        snippetAct, editorConfig.getShortcut(EditorConfig::Shortcut::ApplySnippet));\n  }\n\n  if (!hasSelection) {\n    appendImageHostMenu(menu);\n  }\n\n  appendSpellCheckMenu(p_event, menu);\n}\n\nvoid MarkdownEditor::altPaste() {\n  const bool richPasteByDefault = ConfigMgr::getInst()\n                                      .getEditorConfig()\n                                      .getMarkdownEditorConfig()\n                                      .getRichPasteByDefaultEnabled();\n\n  if (richPasteByDefault) {\n    // Paste as plain text.\n    m_plainTextPasteAsked = true;\n    m_richPasteAsked = false;\n  } else {\n    // Rich paste.\n    m_plainTextPasteAsked = false;\n    m_richPasteAsked = true;\n  }\n\n  // handleCanInsertFromMimeData() is called before this function. Call it manually.\n  if (m_textEdit->canPaste()) {\n    m_textEdit->paste();\n  }\n\n  m_plainTextPasteAsked = false;\n  m_richPasteAsked = false;\n}\n\nvoid MarkdownEditor::setupShortcuts() {\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  // Alt paste.\n  {\n    auto shortcut = WidgetUtils::createShortcut(\n        editorConfig.getShortcut(EditorConfig::Shortcut::AltPaste), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, &MarkdownEditor::altPaste);\n    }\n  }\n\n  // Parse to Markdown and Paste.\n  {\n    auto shortcut = WidgetUtils::createShortcut(\n        editorConfig.getShortcut(EditorConfig::Shortcut::ParseToMarkdownAndPaste), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, &MarkdownEditor::parseToMarkdownAndPaste);\n    }\n  }\n}\n\nvoid MarkdownEditor::parseToMarkdownAndPaste() {\n  if (isReadOnly()) {\n    return;\n  }\n\n  QClipboard *clipboard = QApplication::clipboard();\n  const QMimeData *mimeData = clipboard->mimeData();\n  QString html(mimeData->html());\n  if (!html.isEmpty()) {\n    emit htmlToMarkdownRequested(0, ++m_timeStamp, html);\n  }\n}\n\nvoid MarkdownEditor::handleHtmlToMarkdownData(quint64 p_id, TimeStamp p_timeStamp,\n                                              const QString &p_text) {\n  Q_UNUSED(p_id);\n  if (m_timeStamp == p_timeStamp && !p_text.isEmpty()) {\n    QString text(p_text);\n\n    const auto &editorConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n    if (editorConfig.getFetchImagesInParseAndPaste()) {\n      fetchImagesToLocalAndReplace(text);\n    }\n\n    insertText(text);\n  }\n}\n\nstatic QString purifyImageTitle(QString p_title) {\n  return p_title.remove(QRegularExpression(\"[\\\\r\\\\n\\\\[\\\\]]\"));\n}\n\nvoid MarkdownEditor::fetchImagesToLocalAndReplace(QString &p_text) {\n  auto regs = vte::MarkdownUtils::fetchImageRegionsViaParser(p_text);\n  if (regs.isEmpty()) {\n    return;\n  }\n\n  // Sort it in ascending order.\n  std::sort(regs.begin(), regs.end());\n\n  QProgressDialog proDlg(tr(\"Fetching images to local...\"), tr(\"Abort\"), 0, regs.size(), this);\n  proDlg.setWindowModality(Qt::WindowModal);\n  proDlg.setWindowTitle(tr(\"Fetch Images To Local\"));\n\n  QRegularExpression zhihuRegExp(\"^https?://www\\\\.zhihu\\\\.com/equation\\\\?tex=(.+)$\");\n\n  QRegularExpression regExp(vte::MarkdownUtils::c_imageLinkRegExp);\n  for (int i = regs.size() - 1; i >= 0; --i) {\n    proDlg.setValue(regs.size() - 1 - i);\n    if (proDlg.wasCanceled()) {\n      break;\n    }\n\n    const auto &reg = regs[i];\n    QString linkText = p_text.mid(reg.m_startPos, reg.m_endPos - reg.m_startPos);\n    QRegularExpressionMatch match;\n    if (linkText.indexOf(regExp, 0, &match) == -1) {\n      continue;\n    }\n\n    qDebug() << \"fetching image link\" << linkText;\n\n    const QString imageTitle = purifyImageTitle(match.captured(1).trimmed());\n    QString imageUrl = match.captured(2).trimmed();\n\n    const int maxUrlLength = 100;\n    QString urlToDisplay(imageUrl);\n    if (urlToDisplay.size() > maxUrlLength) {\n      urlToDisplay = urlToDisplay.left(maxUrlLength) + \"...\";\n    }\n    proDlg.setLabelText(tr(\"Fetching image (%1)\").arg(urlToDisplay));\n\n    // Handle equation from zhihu.com like http://www.zhihu.com/equation?tex=P.\n    QRegularExpressionMatch zhihuMatch;\n    if (imageUrl.indexOf(zhihuRegExp, 0, &zhihuMatch) != -1) {\n      QString tex = zhihuMatch.captured(1).trimmed();\n\n      // Remove the +.\n      tex.replace(QChar('+'), \" \");\n\n      tex = QUrl::fromPercentEncoding(tex.toUtf8());\n      if (tex.isEmpty()) {\n        continue;\n      }\n\n      tex = \"$\" + tex + \"$\";\n      p_text.replace(reg.m_startPos, reg.m_endPos - reg.m_startPos, tex);\n      continue;\n    }\n\n    // Only handle absolute file path or network path.\n    QString srcImagePath;\n    QFileInfo info(WebUtils::purifyUrl(imageUrl));\n\n    // For network image.\n    QScopedPointer<QTemporaryFile> tmpFile;\n\n    if (info.exists()) {\n      if (info.isAbsolute()) {\n        // Absolute local path.\n        srcImagePath = info.absoluteFilePath();\n      }\n    } else {\n      // Network path.\n      // Prepend the protocol if missing.\n      if (imageUrl.startsWith(QStringLiteral(\"//\"))) {\n        imageUrl.prepend(QStringLiteral(\"https:\"));\n      }\n      QByteArray data = vte::NetworkAccess::request(QUrl(imageUrl)).m_data;\n      if (!data.isEmpty()) {\n        // Prefer the suffix from the real data.\n        auto suffix = ImageUtils::guessImageSuffix(data);\n        if (suffix.isEmpty()) {\n          suffix = info.suffix();\n        } else if (info.suffix() != suffix) {\n          qWarning() << \"guess a different suffix from image data\" << info.suffix() << suffix;\n        }\n        tmpFile.reset(FileUtils::createTemporaryFile(suffix));\n        if (tmpFile->open() && tmpFile->write(data) > -1) {\n          srcImagePath = tmpFile->fileName();\n        }\n\n        // Need to close it explicitly to flush cache of small file.\n        tmpFile->close();\n      }\n    }\n\n    if (srcImagePath.isEmpty()) {\n      continue;\n    }\n\n    // Insert image without inserting text.\n    QString urlInLink;\n    bool ret = insertImageToBufferFromLocalFile(imageTitle, QString(), srcImagePath, 0, 0, false,\n                                                &urlInLink);\n    if (!ret || urlInLink.isEmpty()) {\n      continue;\n    }\n\n    // Replace URL in link.\n    QString newLink = QStringLiteral(\"![%1](%2%3%4)\")\n                          .arg(imageTitle, urlInLink, match.captured(3), match.captured(6));\n    p_text.replace(reg.m_startPos, reg.m_endPos - reg.m_startPos, newLink);\n  }\n\n  proDlg.setValue(regs.size());\n}\n\nstatic bool updateHeadingSectionNumber(QTextCursor &p_cursor, const QTextBlock &p_block,\n                                       const QString &p_sectionNumber, bool p_endingDot) {\n  if (!p_block.isValid()) {\n    return false;\n  }\n\n  QString text = p_block.text();\n  auto match = vte::MarkdownUtils::matchHeader(text);\n  Q_ASSERT(match.m_matched);\n\n  bool isSequence = false;\n  if (!match.m_sequence.isEmpty()) {\n    // Check if this sequence is the real sequence matching current style.\n    if (match.m_sequence.endsWith('.')) {\n      isSequence = p_endingDot;\n    } else {\n      isSequence = !p_endingDot;\n    }\n  }\n\n  int start = match.m_level + 1;\n  int end = match.m_level + match.m_spacesAfterMarker;\n  if (isSequence) {\n    end += match.m_sequence.size() + match.m_spacesAfterSequence;\n  }\n\n  Q_ASSERT(start <= end);\n\n  p_cursor.setPosition(p_block.position() + start);\n  if (start != end) {\n    p_cursor.setPosition(p_block.position() + end, QTextCursor::KeepAnchor);\n  }\n\n  if (p_sectionNumber.isEmpty()) {\n    p_cursor.removeSelectedText();\n  } else {\n    p_cursor.insertText(p_sectionNumber + ' ');\n  }\n  return true;\n}\n\nbool MarkdownEditor::updateSectionNumber(const QVector<Heading> &p_headings) {\n  SectionNumber sectionNumber(7, 0);\n  int baseLevel = m_config.getSectionNumberBaseLevel();\n  if (baseLevel < 1 || baseLevel > 6) {\n    baseLevel = 1;\n  }\n\n  bool changed = false;\n  bool endingDot =\n      m_config.getSectionNumberStyle() == MarkdownEditorConfig::SectionNumberStyle::DigDotDigDot;\n  auto doc = document();\n  QTextCursor cursor(doc);\n  cursor.beginEditBlock();\n  for (const auto &heading : p_headings) {\n    OutlineProvider::increaseSectionNumber(sectionNumber, heading.m_level, baseLevel);\n    auto sectionStr = m_sectionNumberEnabled\n                          ? OutlineProvider::joinSectionNumber(sectionNumber, endingDot)\n                          : QString();\n    if (heading.m_blockNumber > -1 && sectionStr != heading.m_sectionNumber) {\n      if (updateHeadingSectionNumber(cursor, doc->findBlockByNumber(heading.m_blockNumber),\n                                     sectionStr, endingDot)) {\n        changed = true;\n      }\n    }\n  }\n  cursor.endEditBlock();\n\n  return changed;\n}\n\nvoid MarkdownEditor::overrideSectionNumber(OverrideState p_state) {\n  if (m_overriddenSectionNumber == p_state) {\n    return;\n  }\n\n  m_overriddenSectionNumber = p_state;\n  getHighlighter()->updateHighlight();\n}\n\nvoid MarkdownEditor::updateFromConfig(bool p_initialized) {\n  if (m_config.getTextEditorConfig().getZoomDelta() != 0) {\n    zoom(m_config.getTextEditorConfig().getZoomDelta());\n  }\n\n  if (p_initialized) {\n    getHighlighter()->updateHighlight();\n  }\n}\n\nvoid MarkdownEditor::setupTableHelper() {\n  m_tableHelper = new MarkdownTableHelper(this, this);\n  connect(getHighlighter(), &vte::PegMarkdownHighlighter::tableBlocksUpdated, m_tableHelper,\n          &MarkdownTableHelper::updateTableBlocks);\n}\n\nQRgb MarkdownEditor::getPreviewBackground() const {\n  auto th = theme();\n  const auto &fmt = th->editorStyle(vte::Theme::EditorStyle::Preview);\n  return fmt.m_backgroundColor;\n}\n\nvoid MarkdownEditor::setImageHost(ImageHost *p_host) {\n  // It may be different than the global default image host.\n  m_imageHost = p_host;\n}\n\nstatic QString generateImageHostFileName(const Buffer *p_buffer, const QString &p_destFileName) {\n  auto destPath = ImageHostUtils::generateRelativePath(p_buffer);\n  if (destPath.isEmpty()) {\n    destPath = p_destFileName;\n  } else {\n    destPath += \"/\" + p_destFileName;\n  }\n  return destPath;\n}\n\nQString MarkdownEditor::saveToImageHost(const QByteArray &p_imageData,\n                                        const QString &p_destFileName) {\n  Q_ASSERT(m_imageHost);\n\n  const auto destPath = generateImageHostFileName(m_buffer, p_destFileName);\n\n  QString errMsg;\n\n  QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));\n  auto targetUrl = m_imageHost->create(p_imageData, destPath, errMsg);\n  QApplication::restoreOverrideCursor();\n\n  if (targetUrl.isEmpty()) {\n    MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                             tr(\"Failed to upload image to image host (%1) as (%2).\")\n                                 .arg(m_imageHost->getName(), destPath),\n                             QString(), errMsg, this);\n  }\n\n  return targetUrl;\n}\n\nvoid MarkdownEditor::appendImageHostMenu(QMenu *p_menu) {\n  p_menu->addSeparator();\n  auto subMenu = p_menu->addMenu(tr(\"Upload Images To Image Host\"));\n\n  const auto &hosts = ImageHostMgr::getInst().getImageHosts();\n  if (hosts.isEmpty()) {\n    auto act = subMenu->addAction(tr(\"None\"));\n    act->setEnabled(false);\n    return;\n  }\n\n  for (const auto &host : hosts) {\n    auto act = subMenu->addAction(host->getName(), this, &MarkdownEditor::uploadImagesToImageHost);\n    act->setData(host->getName());\n  }\n}\n\nvoid MarkdownEditor::uploadImagesToImageHost() {\n  auto act = static_cast<QAction *>(sender());\n  auto host = ImageHostMgr::getInst().find(act->data().toString());\n  Q_ASSERT(host);\n\n  // Only LocalRelativeInternal images.\n  // Descending order of the link position.\n  auto images = vte::MarkdownUtils::fetchImagesFromMarkdownText(\n      m_buffer->getContent(), m_buffer->getResourcePath(),\n      vte::MarkdownLink::TypeFlag::LocalRelativeInternal);\n  if (images.isEmpty()) {\n    return;\n  }\n\n  QProgressDialog proDlg(tr(\"Uploading local images...\"), tr(\"Abort\"), 0, images.size(), this);\n  proDlg.setWindowModality(Qt::WindowModal);\n  proDlg.setWindowTitle(tr(\"Upload Images To Image Host\"));\n\n  QHash<QString, QString> uploadedImages;\n\n  int cnt = 0;\n  auto cursor = m_textEdit->textCursor();\n  cursor.beginEditBlock();\n  for (int i = 0; i < images.size(); ++i) {\n    const auto &link = images[i];\n\n    auto it = uploadedImages.find(link.m_path);\n    if (it != uploadedImages.end()) {\n      cursor.setPosition(link.m_urlInLinkPos);\n      cursor.setPosition(link.m_urlInLinkPos + link.m_urlInLink.size(), QTextCursor::KeepAnchor);\n      cursor.insertText(it.value());\n      continue;\n    }\n\n    proDlg.setValue(i + 1);\n    if (proDlg.wasCanceled()) {\n      break;\n    }\n    proDlg.setLabelText(tr(\"Upload image (%1)\").arg(link.m_path));\n\n    Q_ASSERT(i == 0 || link.m_urlInLinkPos < images[i - 1].m_urlInLinkPos);\n\n    QByteArray ba;\n    try {\n      ba = FileUtils::readFile(link.m_path);\n    } catch (Exception &e) {\n      MessageBoxHelper::notify(\n          MessageBoxHelper::Warning,\n          tr(\"Failed to read local image file (%1) (%2).\").arg(link.m_path, e.what()), this);\n      continue;\n    }\n\n    if (ba.isEmpty()) {\n      qWarning() << \"Skipped uploading empty image\" << link.m_path;\n      continue;\n    }\n\n    const auto destPath = generateImageHostFileName(m_buffer, PathUtils::fileName(link.m_path));\n    QString errMsg;\n    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));\n    const auto targetUrl = host->create(ba, destPath, errMsg);\n    QApplication::restoreOverrideCursor();\n\n    if (targetUrl.isEmpty()) {\n      MessageBoxHelper::notify(\n          MessageBoxHelper::Warning,\n          tr(\"Failed to upload image to image host (%1) as (%2).\").arg(host->getName(), destPath),\n          QString(), errMsg, this);\n      continue;\n    }\n\n    // Update the link URL.\n    cursor.setPosition(link.m_urlInLinkPos);\n    cursor.setPosition(link.m_urlInLinkPos + link.m_urlInLink.size(), QTextCursor::KeepAnchor);\n    cursor.insertText(targetUrl);\n    uploadedImages.insert(link.m_path, targetUrl);\n    ++cnt;\n  }\n  cursor.endEditBlock();\n\n  proDlg.setValue(images.size());\n\n  if (cnt > 0) {\n    m_textEdit->setTextCursor(cursor);\n  }\n}\n\nvoid MarkdownEditor::prependContextSensitiveMenu(QMenu *p_menu, const QPoint &p_pos) {\n  auto cursor = m_textEdit->cursorForPosition(p_pos);\n  const int pos = cursor.position();\n  const auto block = cursor.block();\n\n  Q_ASSERT(!p_menu->isEmpty());\n  auto firstAct = p_menu->actions().at(0);\n\n  bool ret = prependImageMenu(p_menu, firstAct, pos, block);\n  if (ret) {\n    return;\n  }\n\n  ret = prependLinkMenu(p_menu, firstAct, pos, block);\n  if (ret) {\n    return;\n  }\n\n  if (prependInPlacePreviewMenu(p_menu, firstAct, pos, block)) {\n    p_menu->insertSeparator(firstAct);\n  }\n}\n\nbool MarkdownEditor::prependImageMenu(QMenu *p_menu, QAction *p_before, int p_cursorPos,\n                                      const QTextBlock &p_block) {\n  const auto text = p_block.text();\n\n  if (!vte::MarkdownUtils::hasImageLink(text)) {\n    return false;\n  }\n\n  QString imgPath;\n\n  const auto &regions = getHighlighter()->getImageRegions();\n  for (const auto &reg : regions) {\n    if (!reg.contains(p_cursorPos) &&\n        (!reg.contains(p_cursorPos - 1) || p_cursorPos != p_block.position() + text.size())) {\n      continue;\n    }\n\n    if (reg.m_endPos > p_block.position() + text.size()) {\n      return true;\n    }\n\n    const auto linkText =\n        text.mid(reg.m_startPos - p_block.position(), reg.m_endPos - reg.m_startPos);\n    int linkWidth = 0;\n    int linkHeight = 0;\n    const auto shortUrl = vte::MarkdownUtils::fetchImageLinkUrl(linkText, linkWidth, linkHeight);\n    if (shortUrl.isEmpty()) {\n      return true;\n    }\n\n    imgPath = vte::MarkdownUtils::linkUrlToPath(getBasePath(), shortUrl);\n    break;\n  }\n\n  {\n    auto act = new QAction(tr(\"View Image\"), p_menu);\n    connect(act, &QAction::triggered, p_menu,\n            [imgPath]() { WidgetUtils::openUrlByDesktop(PathUtils::pathToUrl(imgPath)); });\n    p_menu->insertAction(p_before, act);\n  }\n\n  {\n    auto act = new QAction(tr(\"Copy Image URL\"), p_menu);\n    connect(act, &QAction::triggered, p_menu,\n            [imgPath]() { ClipboardUtils::setLinkToClipboard(imgPath); });\n    p_menu->insertAction(p_before, act);\n  }\n\n  if (QFileInfo::exists(imgPath)) {\n    // Local image.\n    auto act = new QAction(tr(\"Copy Image\"), p_menu);\n    connect(act, &QAction::triggered, p_menu, [imgPath]() {\n      auto clipboard = QApplication::clipboard();\n      clipboard->clear();\n\n      // Copy local GIF to clipboard to ensure no frame loss\n      if (imgPath.endsWith(QStringLiteral(\".gif\"), Qt::CaseInsensitive) &&\n          FileUtils::existsCaseInsensitive(imgPath)) {\n        ClipboardUtils::setLocalFileToClipboard(clipboard, imgPath, QClipboard::Clipboard);\n        return;\n      }\n\n      auto img = FileUtils::imageFromFile(imgPath);\n      if (!img.isNull()) {\n        ClipboardUtils::setImageToClipboard(clipboard, img);\n      }\n    });\n    p_menu->insertAction(p_before, act);\n  } else {\n    // Online image.\n    prependInPlacePreviewMenu(p_menu, p_before, p_cursorPos, p_block);\n  }\n\n  p_menu->insertSeparator(p_before);\n\n  return true;\n}\n\nbool MarkdownEditor::prependInPlacePreviewMenu(QMenu *p_menu, QAction *p_before, int p_cursorPos,\n                                               const QTextBlock &p_block) {\n  auto data = vte::TextBlockData::get(p_block);\n  if (!data) {\n    return false;\n  }\n\n  auto previewData = data->getBlockPreviewData();\n  if (!previewData) {\n    return false;\n  }\n\n  QPixmap image;\n  QRgb background = 0;\n  const int pib = p_cursorPos - p_block.position();\n  for (const auto &info : previewData->getPreviewData()) {\n    const auto *imageData = info->getImageData();\n    if (!imageData) {\n      continue;\n    }\n\n    if (imageData->contains(pib) || (imageData->contains(pib - 1) && pib == p_block.length() - 1)) {\n      const auto *img = findImageFromDocumentResourceMgr(imageData->m_imageName);\n      if (img) {\n        image = *img;\n        background = imageData->m_backgroundColor;\n      }\n      break;\n    }\n  }\n\n  if (image.isNull()) {\n    return false;\n  }\n\n  auto act = new QAction(tr(\"Copy In-Place Preview\"), p_menu);\n  connect(act, &QAction::triggered, p_menu, [this, image, background]() {\n    QColor color(background);\n    if (background == 0) {\n      color = m_textEdit->palette().color(QPalette::Base);\n    }\n    QImage img(image.size(), QImage::Format_ARGB32);\n    img.fill(color);\n    QPainter painter(&img);\n    painter.drawPixmap(img.rect(), image);\n\n    auto clipboard = QApplication::clipboard();\n    clipboard->clear();\n    ClipboardUtils::setImageToClipboard(clipboard, img);\n  });\n\n  p_menu->insertAction(p_before, act);\n\n  return true;\n}\n\nbool MarkdownEditor::prependLinkMenu(QMenu *p_menu, QAction *p_before, int p_cursorPos,\n                                     const QTextBlock &p_block) {\n  const auto text = p_block.text();\n\n  QRegularExpression regExp(vte::MarkdownUtils::c_linkRegExp);\n  QString linkText;\n  const int pib = p_cursorPos - p_block.position();\n  auto matchIter = regExp.globalMatch(text);\n  while (matchIter.hasNext()) {\n    auto match = matchIter.next();\n    if (pib >= match.capturedStart() && pib < match.capturedEnd()) {\n      linkText = match.captured(2);\n      break;\n    }\n  }\n\n  if (linkText.isEmpty()) {\n    return false;\n  }\n\n  const auto linkUrl = vte::MarkdownUtils::linkUrlToPath(getBasePath(), linkText);\n\n  {\n    auto act = new QAction(tr(\"Open Link\"), p_menu);\n    connect(act, &QAction::triggered, p_menu, [linkUrl]() {\n      emit VNoteX::getInst().openFileRequested(linkUrl,\n                                               QSharedPointer<FileOpenParameters>::create());\n    });\n    p_menu->insertAction(p_before, act);\n  }\n\n  {\n    auto act = new QAction(tr(\"Copy Link\"), p_menu);\n    connect(act, &QAction::triggered, p_menu,\n            [linkUrl]() { ClipboardUtils::setLinkToClipboard(linkUrl); });\n    p_menu->insertAction(p_before, act);\n  }\n\n  p_menu->insertSeparator(p_before);\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/editors/markdowneditor.h",
    "content": "#ifndef MARKDOWNEDITOR_H\n#define MARKDOWNEDITOR_H\n\n#include <QScopedPointer>\n\n#include <vtextedit/pegmarkdownhighlighter.h>\n#include <vtextedit/vmarkdowneditor.h>\n\n#include <core/global.h>\n\nclass QMimeData;\nclass QMenu;\nclass QTimer;\n\nnamespace vte {\nclass MarkdownEditorConfig;\n}\n\nnamespace vnotex {\nclass PreviewHelper;\nclass Buffer;\nclass MarkdownEditorConfig;\nclass MarkdownTableHelper;\nclass ImageHost;\n\nclass MarkdownEditor : public vte::VMarkdownEditor {\n  Q_OBJECT\npublic:\n  struct Heading {\n    Heading() = default;\n\n    Heading(const QString &p_name, int p_level, const QString &p_sectionNumber = QString(),\n            int p_blockNumber = -1);\n\n    QString m_name;\n\n    int m_level = -1;\n\n    // 1.2. .\n    QString m_sectionNumber;\n\n    int m_blockNumber = -1;\n  };\n\n  MarkdownEditor(const MarkdownEditorConfig &p_config,\n                 const QSharedPointer<vte::MarkdownEditorConfig> &p_editorConfig,\n                 const QSharedPointer<vte::TextEditorParameters> &p_editorParas,\n                 QWidget *p_parent = nullptr);\n\n  virtual ~MarkdownEditor();\n\n  void setPreviewHelper(PreviewHelper *p_helper);\n\n  void setBuffer(Buffer *p_buffer);\n\n  // @p_level: [0, 6], 0 for none.\n  void typeHeading(int p_level);\n\n  void typeBold();\n\n  void typeItalic();\n\n  void typeStrikethrough();\n\n  void typeMark();\n\n  void typeUnorderedList();\n\n  void typeOrderedList();\n\n  void typeTodoList(bool p_checked);\n\n  void typeCode();\n\n  void typeCodeBlock();\n\n  void typeMath();\n\n  void typeMathBlock();\n\n  void typeQuote();\n\n  void typeLink();\n\n  void typeImage();\n\n  void typeTable();\n\n  const QVector<MarkdownEditor::Heading> &getHeadings() const;\n  int getCurrentHeadingIndex() const;\n\n  void scrollToHeading(int p_idx);\n\n  void overrideSectionNumber(OverrideState p_state);\n\n  void updateFromConfig(bool p_initialized = true);\n\n  QRgb getPreviewBackground() const;\n\n  void setImageHost(ImageHost *p_host);\n\npublic slots:\n  void handleHtmlToMarkdownData(quint64 p_id, TimeStamp p_timeStamp, const QString &p_text);\n\nsignals:\n  void headingsChanged();\n\n  void currentHeadingChanged();\n\n  void htmlToMarkdownRequested(quint64 p_id, TimeStamp p_timeStamp, const QString &p_html);\n\n  void readRequested();\n\n  void applySnippetRequested();\n\nprivate slots:\n  void handleCanInsertFromMimeData(const QMimeData *p_source, bool *p_handled, bool *p_allowed);\n\n  void handleInsertFromMimeData(const QMimeData *p_source, bool *p_handled);\n\n  void handleContextMenuEvent(QContextMenuEvent *p_event, bool *p_handled,\n                              QScopedPointer<QMenu> *p_menu);\n\n  void altPaste();\n\n  void parseToMarkdownAndPaste();\n\nprivate:\n  // @p_scaledWidth: 0 for not overridden.\n  // @p_insertText: whether insert text into the buffer after inserting image file.\n  // @p_urlInLink: store the url in link if not null.\n  bool insertImageToBufferFromLocalFile(const QString &p_title, const QString &p_altText,\n                                        const QString &p_srcImagePath, int p_scaledWidth = 0,\n                                        int p_scaledHeight = 0, bool p_insertText = true,\n                                        QString *p_urlInLink = nullptr);\n\n  bool insertImageToBufferFromData(const QString &p_title, const QString &p_altText,\n                                   const QImage &p_image, int p_scaledWidth = 0,\n                                   int p_scaledHeight = 0);\n\n  void insertImageLink(const QString &p_title, const QString &p_altText,\n                       const QString &p_destImagePath, int p_scaledWidth, int p_scaledHeight,\n                       bool p_insertText = true, QString *p_urlInLink = nullptr);\n\n  // Return true if it is processed.\n  bool processHtmlFromMimeData(const QMimeData *p_source);\n\n  // Return true if it is processed.\n  bool processImageFromMimeData(const QMimeData *p_source);\n\n  // Return true if it is processed.\n  bool processUrlFromMimeData(const QMimeData *p_source);\n\n  // Return true if it is processed.\n  bool processMultipleUrlsFromMimeData(const QMimeData *p_source);\n\n  void insertImageFromMimeData(const QMimeData *p_source);\n\n  void insertImageFromUrl(const QString &p_url, bool p_quiet = false);\n\n  QString getRelativeLink(const QString &p_path);\n\n  // Update section number.\n  // Update headings outline.\n  void updateHeadings(const QVector<vte::peg::ElementRegion> &p_headerRegions);\n\n  int getHeadingIndexByBlockNumber(int p_blockNumber) const;\n\n  void setupShortcuts();\n\n  void fetchImagesToLocalAndReplace(QString &p_text);\n\n  // Return true if there is change.\n  bool updateSectionNumber(const QVector<Heading> &p_headings);\n\n  void setupTableHelper();\n\n  // Return the dest file path of the image on success.\n  QString saveToImageHost(const QByteArray &p_imageData, const QString &p_destFileName);\n\n  void appendImageHostMenu(QMenu *p_menu);\n\n  void uploadImagesToImageHost();\n\n  void prependContextSensitiveMenu(QMenu *p_menu, const QPoint &p_pos);\n\n  bool prependImageMenu(QMenu *p_menu, QAction *p_before, int p_cursorPos,\n                        const QTextBlock &p_block);\n\n  bool prependInPlacePreviewMenu(QMenu *p_menu, QAction *p_before, int p_cursorPos,\n                                 const QTextBlock &p_block);\n\n  bool prependLinkMenu(QMenu *p_menu, QAction *p_before, int p_cursorPos,\n                       const QTextBlock &p_block);\n\n  static QString generateImageFileNameToInsertAs(const QString &p_title, const QString &p_suffix);\n\n  const MarkdownEditorConfig &m_config;\n\n  Buffer *m_buffer = nullptr;\n\n  QVector<Heading> m_headings;\n\n  // TimeStamp used as sequence number to interact with Web side.\n  TimeStamp m_timeStamp = 0;\n\n  QTimer *m_headingTimer = nullptr;\n\n  QTimer *m_sectionNumberTimer = nullptr;\n\n  // Used to detect the config change and do a clean up.\n  bool m_sectionNumberEnabled = false;\n\n  OverrideState m_overriddenSectionNumber = OverrideState::NoOverride;\n\n  // Managed by QObject.\n  MarkdownTableHelper *m_tableHelper = nullptr;\n\n  ImageHost *m_imageHost = nullptr;\n\n  bool m_shouldTriggerRichPaste = false;\n\n  bool m_richPasteAsked = false;\n\n  bool m_plainTextPasteAsked = false;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNEDITOR_H\n"
  },
  {
    "path": "src/widgets/editors/markdowntable.cpp",
    "content": "#include \"markdowntable.h\"\n\n#include <QDebug>\n#include <QTextEdit>\n\nusing namespace vnotex;\n\nvoid MarkdownTable::Cell::clear() {\n  m_offset = -1;\n  m_length = 0;\n  m_text.clear();\n  m_formattedText.clear();\n  m_cursorCoreOffset = -1;\n  m_deleted = false;\n}\n\nbool MarkdownTable::Row::isValid() const { return !m_cells.isEmpty(); }\n\nvoid MarkdownTable::Row::clear() {\n  m_block = QTextBlock();\n  m_preText.clear();\n  m_cells.clear();\n}\n\nQString MarkdownTable::Row::toString() const {\n  QString cells;\n  for (auto &cell : m_cells) {\n    cells +=\n        QStringLiteral(\" (%1, %2 [%3])\").arg(cell.m_offset).arg(cell.m_length).arg(cell.m_text);\n  }\n\n  return QStringLiteral(\"row %1 %2\").arg(m_block.blockNumber()).arg(cells);\n}\n\nqreal MarkdownTable::s_spaceWidth = -1;\n\nqreal MarkdownTable::s_minusWidth = -1;\n\nqreal MarkdownTable::s_colonWidth = -1;\n\nqreal MarkdownTable::s_defaultDelimiterWidth = -1;\n\nconst QString MarkdownTable::c_defaultDelimiter = \"---\";\n\nconst QChar MarkdownTable::c_borderChar = '|';\n\nenum { HeaderRowIndex = 0, DelimiterRowIndex = 1 };\n\nMarkdownTable::MarkdownTable(QTextEdit *p_textEdit, const vte::peg::TableBlock &p_block)\n    : m_textEdit(p_textEdit) {\n  parseTableBlock(p_block);\n}\n\nMarkdownTable::MarkdownTable(QTextEdit *p_textEdit, int p_bodyRow, int p_col, Alignment p_alignment)\n    : m_textEdit(p_textEdit), m_isNew(true) {\n  Q_ASSERT(p_bodyRow >= 0 && p_col > 0);\n  m_rows.resize(p_bodyRow + 2);\n\n  // PreText for each row.\n  QString preText;\n  const QTextCursor cursor = m_textEdit->textCursor();\n  Q_ASSERT(cursor.atBlockEnd());\n  if (!cursor.atBlockStart()) {\n    preText = cursor.block().text();\n  }\n\n  QString delimiterCore(c_defaultDelimiter);\n  switch (p_alignment) {\n  case Alignment::Left:\n    delimiterCore[0] = ':';\n    break;\n\n  case Alignment::Center:\n    delimiterCore[0] = ':';\n    delimiterCore[delimiterCore.size() - 1] = ':';\n    break;\n\n  case Alignment::Right:\n    delimiterCore[delimiterCore.size() - 1] = ':';\n    break;\n\n  default:\n    break;\n  }\n  const QString delimiterCell = generateFormattedText(delimiterCore, 0);\n  const QString contentCell =\n      generateFormattedText(QString(c_defaultDelimiter.size(), QLatin1Char(' ')), 0);\n\n  for (int rowIdx = 0; rowIdx < m_rows.size(); ++rowIdx) {\n    auto &row = m_rows[rowIdx];\n    row.m_preText = preText;\n    row.m_cells.resize(p_col);\n\n    const QString &content = isDelimiterRow(rowIdx) ? delimiterCell : contentCell;\n    for (auto &cell : row.m_cells) {\n      cell.m_text = content;\n    }\n  }\n}\n\nbool MarkdownTable::isValid() const {\n  return header() && header()->isValid() && delimiter() && delimiter()->isValid();\n}\n\nvoid MarkdownTable::format() {\n  if (!isValid()) {\n    return;\n  }\n\n  const QTextCursor cursor = m_textEdit->textCursor();\n  int curRowIdx = cursor.blockNumber() - m_rows[0].m_block.blockNumber();\n  int curPib = -1;\n  if (curRowIdx < 0 || curRowIdx >= m_rows.size()) {\n    curRowIdx = -1;\n  } else {\n    curPib = cursor.positionInBlock();\n  }\n\n  int nrCols = calculateColumnCount();\n  pruneColumns(nrCols);\n\n  for (int i = 0; i < nrCols; ++i) {\n    formatColumn(i, curRowIdx, curPib);\n  }\n}\n\nvoid MarkdownTable::write() {\n  if (m_isNew) {\n    writeNewTable();\n  } else {\n    writeTable();\n  }\n}\n\nvoid MarkdownTable::parseTableBlock(const vte::peg::TableBlock &p_block) {\n  auto doc = m_textEdit->document();\n\n  QTextBlock block = doc->findBlock(p_block.m_startPos);\n  if (!block.isValid()) {\n    return;\n  }\n\n  int lastBlockNumber = doc->findBlock(p_block.m_endPos - 1).blockNumber();\n  if (lastBlockNumber == -1) {\n    return;\n  }\n\n  const QVector<int> &borders = p_block.m_borders;\n  if (borders.isEmpty()) {\n    return;\n  }\n\n  int numRows = lastBlockNumber - block.blockNumber() + 1;\n  if (numRows <= DelimiterRowIndex) {\n    return;\n  }\n\n  initWidths(block, borders[0]);\n\n  int borderIdx = 0;\n  m_rows.reserve(numRows);\n  for (int i = 0; i < numRows; ++i) {\n    m_rows.append(Row());\n    if (!parseRow(block, borders, borderIdx, m_rows.last())) {\n      clear();\n      return;\n    }\n\n    qDebug() << \"row\" << i << m_rows.last().toString();\n\n    block = block.next();\n  }\n}\n\nvoid MarkdownTable::clear() { m_rows.clear(); }\n\nvoid MarkdownTable::initWidths(const QTextBlock &p_block, int p_borderPos) {\n  if (s_spaceWidth != -1) {\n    return;\n  }\n\n  QFont font = m_textEdit->font();\n  int pib = p_borderPos - p_block.position();\n  auto fmts = p_block.layout()->formats();\n  for (const auto &fmt : fmts) {\n    if (fmt.start <= pib && fmt.start + fmt.length > pib) {\n      // Hit.\n      if (!fmt.format.fontFamily().isEmpty()) {\n        font = fmt.format.font();\n        break;\n      }\n    }\n  }\n\n  QFontMetricsF fmf(font);\n  s_spaceWidth = fmf.horizontalAdvance(' ');\n  s_minusWidth = fmf.horizontalAdvance('-');\n  s_colonWidth = fmf.horizontalAdvance(':');\n  s_defaultDelimiterWidth = fmf.horizontalAdvance(c_defaultDelimiter);\n\n  qDebug() << \"smart table widths\" << font.family() << s_spaceWidth << s_minusWidth << s_colonWidth\n           << s_defaultDelimiterWidth;\n}\n\nbool MarkdownTable::parseRow(const QTextBlock &p_block, const QVector<int> &p_borders,\n                             int &p_borderIdx, Row &p_row) const {\n  if (!p_block.isValid() || p_borderIdx >= p_borders.size()) {\n    return false;\n  }\n\n  p_row.m_block = p_block;\n\n  QString text = p_block.text();\n  int startPos = p_block.position();\n  int endPos = startPos + text.length();\n\n  if (p_borders[p_borderIdx] < startPos || p_borders[p_borderIdx] >= endPos) {\n    return false;\n  }\n\n  // Get pre text.\n  int firstCellOffset = p_borders[p_borderIdx] - startPos;\n  if (text[firstCellOffset] != c_borderChar) {\n    return false;\n  }\n  p_row.m_preText = text.left(firstCellOffset);\n\n  for (; p_borderIdx < p_borders.size(); ++p_borderIdx) {\n    int border = p_borders[p_borderIdx];\n    if (border >= endPos) {\n      break;\n    }\n\n    int offset = border - startPos;\n    if (text[offset] != c_borderChar) {\n      return false;\n    }\n\n    int nextIdx = p_borderIdx + 1;\n    if (nextIdx >= p_borders.size() || p_borders[nextIdx] >= endPos) {\n      // The last border of this row.\n      ++p_borderIdx;\n      break;\n    }\n\n    int nextOffset = p_borders[nextIdx] - startPos;\n    if (text[nextOffset] != c_borderChar) {\n      return false;\n    }\n\n    // Got one cell.\n    Cell cell;\n    cell.m_offset = offset;\n    cell.m_length = nextOffset - offset;\n    cell.m_text = text.mid(cell.m_offset, cell.m_length);\n\n    p_row.m_cells.append(cell);\n  }\n\n  return true;\n}\n\nconst MarkdownTable::Row *MarkdownTable::header() const {\n  if (m_rows.size() <= HeaderRowIndex) {\n    return nullptr;\n  }\n\n  return &m_rows[HeaderRowIndex];\n}\n\nconst MarkdownTable::Row *MarkdownTable::delimiter() const {\n  if (m_rows.size() <= DelimiterRowIndex) {\n    return nullptr;\n  }\n\n  return &m_rows[DelimiterRowIndex];\n}\n\nint MarkdownTable::calculateColumnCount() const {\n  // We use the width of the header as the width of the table.\n  // With this, we could add or remove one column by just changing the header row.\n  return header()->m_cells.size();\n}\n\nvoid MarkdownTable::pruneColumns(int p_nrCols) {\n  for (auto &row : m_rows) {\n    for (int i = p_nrCols; i < row.m_cells.size(); ++i) {\n      row.m_cells[i].m_deleted = true;\n    }\n  }\n}\n\nvoid MarkdownTable::formatColumn(int p_idx, int p_cursorRowIdx, int p_cursorPib) {\n  QVector<CellInfo> cells;\n  // Target width of this column.\n  qreal targetWidth = 0;\n  fetchCellInfoOfColumn(p_idx, p_cursorRowIdx, p_cursorPib, cells, targetWidth);\n\n  // Get the alignment of this column.\n  const auto align = getColumnAlignment(p_idx);\n\n  // Calculate the formatted text of each cell.\n  for (int rowIdx = 0; rowIdx < cells.size(); ++rowIdx) {\n    const auto &info = cells[rowIdx];\n    auto &row = m_rows[rowIdx];\n    if (row.m_cells.size() <= p_idx) {\n      row.m_cells.resize(p_idx + 1);\n    }\n    auto &cell = row.m_cells[p_idx];\n    Q_ASSERT(cell.m_formattedText.isEmpty());\n    Q_ASSERT(cell.m_cursorCoreOffset == -1);\n\n    // Record the cursor position.\n    if (rowIdx == p_cursorRowIdx) {\n      if (cell.m_offset <= p_cursorPib && cell.m_offset + cell.m_length > p_cursorPib) {\n        // Cursor in this cell.\n        int offset = p_cursorPib - cell.m_offset;\n        offset = offset - info.m_coreOffset;\n        if (offset > info.m_coreLength) {\n          offset = info.m_coreLength;\n        } else if (offset < 0) {\n          offset = 0;\n        }\n\n        cell.m_cursorCoreOffset = offset;\n      }\n    }\n\n    if (isDelimiterRow(rowIdx)) {\n      if (!isDelimiterCellWellFormatted(cell, info, targetWidth)) {\n        QString core;\n        int delta = s_minusWidth - 1;\n        switch (align) {\n        case Alignment::None: {\n          int coreLength = static_cast<int>((targetWidth + delta) / s_minusWidth);\n          core = QString(coreLength, '-');\n          break;\n        }\n\n        case Alignment::Left: {\n          int coreLength = static_cast<int>((targetWidth - s_colonWidth + delta) / s_minusWidth);\n          core = QStringLiteral(\":\");\n          core += QString(coreLength, '-');\n          break;\n        }\n\n        case Alignment::Center: {\n          int coreLength =\n              static_cast<int>((targetWidth - 2 * s_colonWidth + delta) / s_minusWidth);\n          core = QStringLiteral(\":\");\n          core += QString(coreLength, '-');\n          core += QStringLiteral(\":\");\n          break;\n        }\n\n        case Alignment::Right: {\n          int coreLength = static_cast<int>((targetWidth - s_colonWidth + delta) / s_minusWidth);\n          core = QString(coreLength, '-');\n          core += QStringLiteral(\":\");\n          break;\n        }\n\n        default:\n          Q_ASSERT(false);\n          break;\n        }\n\n        cell.m_formattedText = generateFormattedText(core, 0);\n        if (cell.m_text == cell.m_formattedText) {\n          // Avoid infinite change.\n          cell.m_formattedText.clear();\n        }\n      }\n    } else {\n      Alignment fakeAlign = align;\n      if (fakeAlign == Alignment::None) {\n        // For Alignment::None, we make the header align center while\n        // content cells align left.\n        if (isHeaderRow(rowIdx)) {\n          fakeAlign = Alignment::Center;\n        } else {\n          fakeAlign = Alignment::Left;\n        }\n      }\n\n      if (!isCellWellFormatted(row, cell, info, targetWidth, fakeAlign)) {\n        QString core = cell.m_text.mid(info.m_coreOffset, info.m_coreLength);\n        int nr =\n            static_cast<int>((targetWidth - info.m_coreWidth + s_spaceWidth - 1) / s_spaceWidth);\n        cell.m_formattedText = generateFormattedText(core, nr, fakeAlign);\n\n        // For cells crossing lines and having spaces at the end of one line,\n        // Qt will collapse those spaces, which make it not well formatted.\n        if (cell.m_text == cell.m_formattedText) {\n          cell.m_formattedText.clear();\n        }\n      }\n    }\n  }\n}\n\nvoid MarkdownTable::fetchCellInfoOfColumn(int p_idx, int p_cursorRowIdx, int p_cursorPib,\n                                          QVector<CellInfo> &p_cellsInfo,\n                                          qreal &p_targetWidth) const {\n  p_targetWidth = s_defaultDelimiterWidth;\n  p_cellsInfo.resize(m_rows.size());\n\n  // Fetch the trimmed core content and its width.\n  for (int i = 0; i < m_rows.size(); ++i) {\n    const auto &row = m_rows[i];\n    auto &info = p_cellsInfo[i];\n\n    if (row.m_cells.size() <= p_idx) {\n      // Need to add a new cell later.\n      continue;\n    }\n\n    // Get the info of this cell.\n    const auto &cell = row.m_cells[p_idx];\n    int first = fetchCoreOffset(cell.m_text);\n    if (first == -1) {\n      // Empty cell.\n      continue;\n    }\n    info.m_coreOffset = first;\n\n    // If the cursor is in this cell, then we should treat the core length at least not\n    // less than the cursor position even if there is trailing spaces before the cursor.\n    int last = cell.m_length - 1;\n    for (; last >= first; --last) {\n      if ((p_cursorRowIdx == i && p_cursorPib - cell.m_offset - 1 == last) ||\n          cell.m_text[last] != ' ') {\n        // Found the last of core content.\n        info.m_coreLength = last - first + 1;\n        break;\n      }\n    }\n\n    // Calculate the core width.\n    info.m_coreWidth =\n        calculateTextWidth(row.m_block, cell.m_offset + info.m_coreOffset, info.m_coreLength);\n    // Delimiter row's width should not be considered.\n    if (info.m_coreWidth > p_targetWidth && !isDelimiterRow(i)) {\n      p_targetWidth = info.m_coreWidth;\n    }\n  }\n}\n\nbool MarkdownTable::isDelimiterRow(int p_idx) const { return p_idx == DelimiterRowIndex; }\n\nqreal MarkdownTable::calculateTextWidth(const QTextBlock &p_block, int p_pib, int p_length) const {\n  // The block may cross multiple lines.\n  qreal textWidth = 0;\n  QTextLayout *layout = p_block.layout();\n  QTextLine line = layout->lineForTextPosition(p_pib);\n  while (line.isValid()) {\n    int lineEnd = line.textStart() + line.textLength();\n    if (lineEnd >= p_pib + p_length) {\n      // The last line.\n      textWidth += line.cursorToX(p_pib + p_length) - line.cursorToX(p_pib);\n      break;\n    } else {\n      // Cross lines.\n      textWidth += line.cursorToX(lineEnd) - line.cursorToX(p_pib);\n\n      // Move to next line.\n      p_length = p_length - (lineEnd - p_pib);\n      p_pib = lineEnd;\n      line = layout->lineForTextPosition(p_pib + 1);\n    }\n  }\n\n  return textWidth > 0 ? textWidth : -1;\n}\n\nAlignment MarkdownTable::getColumnAlignment(int p_idx) const {\n  auto row = delimiter();\n  if (row->m_cells.size() <= p_idx) {\n    return Alignment::None;\n  }\n\n  QString core = row->m_cells[p_idx].m_text.mid(1).trimmed();\n  Q_ASSERT(!core.isEmpty());\n  bool leftColon = core[0] == ':';\n  bool rightColon = core[core.size() - 1] == ':';\n  if (leftColon) {\n    if (rightColon) {\n      return Alignment::Center;\n    } else {\n      return Alignment::Left;\n    }\n  } else {\n    if (rightColon) {\n      return Alignment::Right;\n    } else {\n      return Alignment::None;\n    }\n  }\n}\n\nstatic bool equalWidth(int p_a, int p_b, int p_margin = 5) { return qAbs(p_a - p_b) <= p_margin; }\n\nbool MarkdownTable::isDelimiterCellWellFormatted(const Cell &p_cell, const CellInfo &p_info,\n                                                 qreal p_targetWidth) const {\n  // We could use core width here for delimiter cell.\n  if (!equalWidth(p_info.m_coreWidth, p_targetWidth, s_minusWidth / 2)) {\n    return false;\n  }\n\n  const QString &text = p_cell.m_text;\n  if (text.size() < 4) {\n    return false;\n  }\n\n  if (text[1] != ' ' || text[text.size() - 1] != ' ') {\n    return false;\n  }\n\n  if (text[2] == ' ' || text[text.size() - 2] == ' ') {\n    return false;\n  }\n\n  return true;\n}\n\nQString MarkdownTable::generateFormattedText(const QString &p_core, int p_nrSpaces,\n                                             Alignment p_align) const {\n  Q_ASSERT(p_align != Alignment::None);\n\n  // Align left.\n  int leftSpaces = 0;\n  int rightSpaces = p_nrSpaces;\n\n  if (p_align == Alignment::Center) {\n    leftSpaces = p_nrSpaces / 2;\n    rightSpaces = p_nrSpaces - leftSpaces;\n  } else if (p_align == Alignment::Right) {\n    leftSpaces = p_nrSpaces;\n    rightSpaces = 0;\n  }\n\n  return QStringLiteral(\"%1 %2%3%4 \")\n      .arg(c_borderChar, QString(leftSpaces, ' '), p_core, QString(rightSpaces, ' '));\n}\n\nbool MarkdownTable::isHeaderRow(int p_idx) const { return p_idx == HeaderRowIndex; }\n\nbool MarkdownTable::isCellWellFormatted(const Row &p_row, const Cell &p_cell,\n                                        const CellInfo &p_info, int p_targetWidth,\n                                        Alignment p_align) const {\n  Q_ASSERT(p_align != Alignment::None);\n  const QString &text = p_cell.m_text;\n  if (text.size() < 4) {\n    return false;\n  }\n\n  if (text[1] != ' ' || text[text.size() - 1] != ' ') {\n    return false;\n  }\n\n  // Skip alignment check of empty cell.\n  if (p_info.m_coreOffset > 0) {\n    int leftSpaces = p_info.m_coreOffset - 2;\n    int rightSpaces = text.size() - p_info.m_coreOffset - p_info.m_coreLength - 1;\n    switch (p_align) {\n    case Alignment::Left:\n      if (leftSpaces > 0) {\n        return false;\n      }\n\n      break;\n\n    case Alignment::Center:\n      if (qAbs(leftSpaces - rightSpaces) > 1) {\n        return false;\n      }\n\n      break;\n\n    case Alignment::Right:\n      if (rightSpaces > 0) {\n        return false;\n      }\n\n      break;\n\n    default:\n      Q_ASSERT(false);\n      break;\n    }\n  }\n\n  // Calculate the width of the text without two spaces around.\n  int cellWidth = calculateTextWidth(p_row.m_block, p_cell.m_offset + 2, p_cell.m_length - 3);\n  if (!equalWidth(cellWidth, p_targetWidth, s_spaceWidth / 2)) {\n    return false;\n  }\n\n  return true;\n}\n\nvoid MarkdownTable::writeTable() {\n  bool changed = false;\n  // Use cursor(QTextDocument) to handle the corner case when cursor locates at the end of one row.\n  QTextCursor cursor(m_textEdit->document());\n  int cursorBlock = -1, cursorPib = -1;\n  bool cursorHit = false;\n\n  // Write the table row by row.\n  for (const auto &row : m_rows) {\n    bool needChange = false;\n    for (const auto &cell : row.m_cells) {\n      if (!cell.m_formattedText.isEmpty() || cell.m_deleted) {\n        needChange = true;\n        break;\n      }\n    }\n\n    if (!needChange) {\n      continue;\n    }\n\n    if (!changed) {\n      changed = true;\n      const QTextCursor curCursor = m_textEdit->textCursor();\n      cursorBlock = curCursor.blockNumber();\n      cursorPib = curCursor.positionInBlock();\n      cursor.beginEditBlock();\n    }\n\n    // Construct the block text.\n    QString newBlockText(row.m_preText);\n    for (const auto &cell : row.m_cells) {\n      if (cell.m_deleted) {\n        continue;\n      }\n\n      int pos = newBlockText.size();\n      if (cell.m_formattedText.isEmpty()) {\n        newBlockText += cell.m_text;\n      } else {\n        newBlockText += cell.m_formattedText;\n      }\n\n      if (cell.m_cursorCoreOffset > -1) {\n        // Cursor in this cell.\n        cursorHit = true;\n        // We need to calculate the new core offset of this cell.\n        // For delimiter row, this way won't work, but that is fine.\n        int coreOffset =\n            fetchCoreOffset(cell.m_formattedText.isEmpty() ? cell.m_text : cell.m_formattedText);\n        cursorPib = pos + cell.m_cursorCoreOffset + coreOffset;\n        if (cursorPib >= newBlockText.size()) {\n          cursorPib = newBlockText.size() - 1;\n        }\n      }\n    }\n\n    newBlockText += c_borderChar;\n\n    // Replace the whole block.\n    cursor.setPosition(row.m_block.position());\n    cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);\n    cursor.insertText(newBlockText);\n  }\n\n  if (changed) {\n    qDebug() << \"write formatted table with cursor block\" << cursorBlock;\n    cursor.endEditBlock();\n\n    // Restore the cursor.\n    if (cursorHit) {\n      QTextBlock block = m_textEdit->document()->findBlockByNumber(cursorBlock);\n      if (block.isValid()) {\n        int pos = block.position() + cursorPib;\n        auto curCursor = m_textEdit->textCursor();\n        curCursor.setPosition(pos);\n        m_textEdit->setTextCursor(curCursor);\n      }\n    }\n  }\n}\n\nvoid MarkdownTable::writeNewTable() {\n  // Generate the text of the whole table.\n  QString tableText;\n  for (int rowIdx = 0; rowIdx < m_rows.size(); ++rowIdx) {\n    const auto &row = m_rows[rowIdx];\n    tableText += row.m_preText;\n    for (const auto &cell : row.m_cells) {\n      if (cell.m_deleted) {\n        continue;\n      }\n\n      tableText += cell.m_text;\n    }\n\n    tableText += c_borderChar;\n\n    if (rowIdx < m_rows.size() - 1) {\n      tableText += '\\n';\n    }\n  }\n\n  QTextCursor cursor = m_textEdit->textCursor();\n  int pos = cursor.position() + 2;\n  cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor);\n  cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);\n  cursor.insertText(tableText);\n  cursor.setPosition(pos);\n  m_textEdit->setTextCursor(cursor);\n}\n\nint MarkdownTable::fetchCoreOffset(const QString &p_cellText) {\n  // [0] is the border char. To find the offset of the core content.\n  for (int i = 1; i < p_cellText.size(); ++i) {\n    if (p_cellText[i] != ' ') {\n      return i;\n    }\n  }\n\n  return -1;\n}\n"
  },
  {
    "path": "src/widgets/editors/markdowntable.h",
    "content": "#ifndef MARKDOWNTABLE_H\n#define MARKDOWNTABLE_H\n\n#include <QTextBlock>\n#include <QVector>\n\n#include <vtextedit/pegmarkdownhighlighterdata.h>\n\n#include <core/global.h>\n\nclass QTextEdit;\n\nnamespace vnotex {\nclass MarkdownTable {\npublic:\n  MarkdownTable(QTextEdit *p_textEdit, const vte::peg::TableBlock &p_block);\n\n  MarkdownTable(QTextEdit *p_textEdit, int p_bodyRow, int p_col, Alignment p_alignment);\n\n  bool isValid() const;\n\n  void format();\n\n  void write();\n\nprivate:\n  struct Cell {\n    void clear();\n\n    // Start offset within block, including the starting border |.\n    int m_offset = -1;\n\n    // Length of this cell, till next border |.\n    int m_length = 0;\n\n    // Text like \"|  vnote  \".\n    QString m_text;\n\n    // Formatted text, such as \"|   vnote   \".\n    // It is empty if it does not need formatted.\n    QString m_formattedText;\n\n    // If cursor is within this cell, this will not be -1.\n    int m_cursorCoreOffset = -1;\n\n    // Whether this cell need to be deleted.\n    bool m_deleted = false;\n  };\n\n  struct Row {\n    bool isValid() const;\n\n    void clear();\n\n    QString toString() const;\n\n    QTextBlock m_block;\n\n    // Text before (the first cell of) table row.\n    QString m_preText;\n\n    QVector<Cell> m_cells;\n  };\n\n  // Used to hold info about a cell when formatting a column.\n  struct CellInfo {\n    // The offset of the core content within the cell.\n    // Will be 0 if it is an empty cell.\n    int m_coreOffset = 0;\n\n    // The length of the core content.\n    // Will be 0 if it is an empty cell.\n    int m_coreLength = 0;\n\n    // Pixel width of the core content.\n    qreal m_coreWidth = 0;\n  };\n\n  void parseTableBlock(const vte::peg::TableBlock &p_block);\n\n  void clear();\n\n  void initWidths(const QTextBlock &p_block, int p_borderPos);\n\n  // Parse one row into @p_row and move @p_borderIdx forward.\n  bool parseRow(const QTextBlock &p_block, const QVector<int> &p_borders, int &p_borderIdx,\n                Row &p_row) const;\n\n  const Row *header() const;\n\n  const Row *delimiter() const;\n\n  int calculateColumnCount() const;\n\n  // Prune columns beyond the header row that should be deleted.\n  void pruneColumns(int p_nrCols);\n\n  void formatColumn(int p_idx, int p_cursorRowIdx, int p_cursorPib);\n\n  void fetchCellInfoOfColumn(int p_idx, int p_cursorRowIdx, int p_cursorPib,\n                             QVector<CellInfo> &p_cellsInfo, qreal &p_targetWidth) const;\n\n  bool isHeaderRow(int p_idx) const;\n\n  bool isDelimiterRow(int p_idx) const;\n\n  qreal calculateTextWidth(const QTextBlock &p_block, int p_pib, int p_length) const;\n\n  Alignment getColumnAlignment(int p_idx) const;\n\n  bool isDelimiterCellWellFormatted(const Cell &p_cell, const CellInfo &p_info,\n                                    qreal p_targetWidth) const;\n\n  // @p_nrSpaces: number of spaces to fill core content.\n  QString generateFormattedText(const QString &p_core, int p_nrSpaces,\n                                Alignment p_align = Alignment::Left) const;\n\n  bool isCellWellFormatted(const Row &p_row, const Cell &p_cell, const CellInfo &p_info,\n                           int p_targetWidth, Alignment p_align) const;\n\n  void writeTable();\n\n  void writeNewTable();\n\n  // Return -1 if it is an empty cell.\n  static int fetchCoreOffset(const QString &p_cellText);\n\n  QTextEdit *m_textEdit = nullptr;\n\n  // Whether this table is a new table or not.\n  bool m_isNew = false;\n\n  // Header, delimiter, and body.\n  QVector<Row> m_rows;\n\n  static qreal s_spaceWidth;\n\n  static qreal s_minusWidth;\n\n  static qreal s_colonWidth;\n\n  static qreal s_defaultDelimiterWidth;\n\n  static const QString c_defaultDelimiter;\n\n  static const QChar c_borderChar;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNTABLE_H\n"
  },
  {
    "path": "src/widgets/editors/markdowntablehelper.cpp",
    "content": "#include \"markdowntablehelper.h\"\n\n#include <QTextCursor>\n#include <QTextEdit>\n#include <QTimer>\n\n#include <vtextedit/vtextedit.h>\n#include <vtextedit/vtexteditor.h>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/markdowneditorconfig.h>\n\nusing namespace vnotex;\n\nMarkdownTableHelper::MarkdownTableHelper(vte::VTextEditor *p_editor, QObject *p_parent)\n    : QObject(p_parent), m_editor(p_editor) {}\n\nbool MarkdownTableHelper::isSmartTableEnabled() const {\n  return ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig().getSmartTableEnabled();\n}\n\nQTimer *MarkdownTableHelper::getTimer() {\n  if (!m_timer) {\n    m_timer = new QTimer(this);\n    m_timer->setSingleShot(true);\n    m_timer->setInterval(\n        ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig().getSmartTableInterval());\n    connect(m_timer, &QTimer::timeout, this, &MarkdownTableHelper::formatTable);\n\n    connect(m_editor->getTextEdit(), &QTextEdit::cursorPositionChanged, this, [this]() {\n      if (m_timer->isActive()) {\n        // Defer the formatting.\n        m_timer->start();\n      }\n    });\n  }\n\n  return m_timer;\n}\n\nvoid MarkdownTableHelper::formatTable() {\n  if (!isSmartTableEnabled()) {\n    return;\n  }\n\n  if (!m_block.isValid()) {\n    return;\n  }\n\n  MarkdownTable table(m_editor->getTextEdit(), m_block);\n  if (!table.isValid()) {\n    return;\n  }\n\n  table.format();\n\n  table.write();\n}\n\nvoid MarkdownTableHelper::updateTableBlocks(const QVector<vte::peg::TableBlock> &p_blocks) {\n  if (!isSmartTableEnabled()) {\n    return;\n  }\n\n  getTimer()->stop();\n\n  if (m_editor->isReadOnly() || !m_editor->isModified()) {\n    return;\n  }\n\n  int idx = currentCursorTableBlock(p_blocks);\n  if (idx == -1) {\n    return;\n  }\n\n  m_block = p_blocks[idx];\n  getTimer()->start();\n}\n\nint MarkdownTableHelper::currentCursorTableBlock(\n    const QVector<vte::peg::TableBlock> &p_blocks) const {\n  // Binary search.\n  int curPos = m_editor->getTextEdit()->textCursor().position();\n\n  int first = 0, last = p_blocks.size() - 1;\n  while (first <= last) {\n    int mid = (first + last) / 2;\n    const auto &block = p_blocks[mid];\n    if (block.m_startPos <= curPos && block.m_endPos >= curPos) {\n      return mid;\n    }\n\n    if (block.m_startPos > curPos) {\n      last = mid - 1;\n    } else {\n      first = mid + 1;\n    }\n  }\n\n  return -1;\n}\n\nvoid MarkdownTableHelper::insertTable(int p_bodyRow, int p_col, Alignment p_alignment) {\n  MarkdownTable table(m_editor->getTextEdit(), p_bodyRow, p_col, p_alignment);\n  if (!table.isValid()) {\n    return;\n  }\n\n  table.write();\n}\n"
  },
  {
    "path": "src/widgets/editors/markdowntablehelper.h",
    "content": "#ifndef MARKDOWNTABLEHELPER_H\n#define MARKDOWNTABLEHELPER_H\n\n#include <QObject>\n\n#include \"markdowntable.h\"\n\nclass QTimer;\n\nnamespace vte {\nclass VTextEditor;\n}\n\nnamespace vnotex {\nclass MarkdownTableHelper : public QObject {\n  Q_OBJECT\npublic:\n  MarkdownTableHelper(vte::VTextEditor *p_editor, QObject *p_parent = nullptr);\n\n  void insertTable(int p_bodyRow, int p_col, Alignment p_alignment);\n\npublic slots:\n  void updateTableBlocks(const QVector<vte::peg::TableBlock> &p_blocks);\n\nprivate:\n  // Return the block index which contains the cursor.\n  int currentCursorTableBlock(const QVector<vte::peg::TableBlock> &p_blocks) const;\n\n  void formatTable();\n\n  bool isSmartTableEnabled() const;\n\n  QTimer *getTimer();\n\n  vte::VTextEditor *m_editor = nullptr;\n\n  // Use getTimer() to access.\n  QTimer *m_timer = nullptr;\n\n  vte::peg::TableBlock m_block;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNTABLEHELPER_H\n"
  },
  {
    "path": "src/widgets/editors/markdownviewer.cpp",
    "content": "#include \"markdownviewer.h\"\n\n#include <QApplication>\n#include <QContextMenuEvent>\n#include <QMenu>\n#include <QMimeData>\n#include <QScopedPointer>\n#include <QWebChannel>\n#include <QWebEngineSettings>\n\n#include \"../viewwindow.h\"\n#include \"../widgetsfactory.h\"\n#include \"markdownvieweradapter.h\"\n#include \"previewhelper.h\"\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <utils/clipboardutils.h>\n#include <utils/fileutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\n// We set the property of the clipboard to mark that the URL copied in the\n// clipboard has been altered.\nstatic const char *c_propertyImageUrlAltered = \"CopiedImageUrlAltered\";\n\n// Indicate whether this clipboard change is triggered by cross copy.\nstatic const char *c_propertyCrossCopy = \"CrossCopy\";\n\nMarkdownViewer::MarkdownViewer(MarkdownViewerAdapter *p_adapter, const QColor &p_background,\n                               qreal p_zoomFactor, QWidget *p_parent)\n    : MarkdownViewer(p_adapter, nullptr, p_background, p_zoomFactor, p_parent) {}\n\nMarkdownViewer::MarkdownViewer(MarkdownViewerAdapter *p_adapter, const ViewWindow *p_viewWindow,\n                               const QColor &p_background, qreal p_zoomFactor, QWidget *p_parent)\n    : WebViewer(p_background, p_zoomFactor, p_parent), m_adapter(p_adapter),\n      m_viewWindow(p_viewWindow) {\n  m_adapter->setParent(this);\n\n  auto channel = new QWebChannel(this);\n  channel->registerObject(QStringLiteral(\"vxAdapter\"), m_adapter);\n\n  page()->setWebChannel(channel);\n\n  connect(QApplication::clipboard(), &QClipboard::changed, this,\n          &MarkdownViewer::handleClipboardChanged);\n\n  connect(m_adapter, &MarkdownViewerAdapter::keyPressed, this, &MarkdownViewer::handleWebKeyPress);\n\n  connect(m_adapter, &MarkdownViewerAdapter::zoomed, this,\n          [this](bool p_zoomIn) { p_zoomIn ? zoomIn() : zoomOut(); });\n\n  connect(m_adapter, &MarkdownViewerAdapter::crossCopyReady, this,\n          [](quint64 p_id, quint64 p_timeStamp, const QString &p_html) {\n            Q_UNUSED(p_id);\n            Q_UNUSED(p_timeStamp);\n            std::unique_ptr<QMimeData> mimeData(new QMimeData());\n            mimeData->setHtml(p_html);\n            ClipboardUtils::setMimeDataToClipboard(QApplication::clipboard(), mimeData.release());\n          });\n\n  settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);\n}\n\nMarkdownViewerAdapter *MarkdownViewer::adapter() const { return m_adapter; }\n\nvoid MarkdownViewer::setPreviewHelper(PreviewHelper *p_previewHelper) {\n  connect(p_previewHelper, &PreviewHelper::graphPreviewRequested, this,\n          [this, p_previewHelper](quint64 p_id, TimeStamp p_timeStamp, const QString &p_lang,\n                                  const QString &p_text) {\n            if (m_adapter->isReady()) {\n              m_adapter->graphPreviewRequested(p_id, p_timeStamp, p_lang, p_text);\n            } else {\n              p_previewHelper->handleGraphPreviewData(MarkdownViewerAdapter::PreviewData());\n            }\n          });\n  connect(p_previewHelper, &PreviewHelper::mathPreviewRequested, this,\n          [this, p_previewHelper](quint64 p_id, TimeStamp p_timeStamp, const QString &p_text) {\n            if (m_adapter->isReady()) {\n              m_adapter->mathPreviewRequested(p_id, p_timeStamp, p_text);\n            } else {\n              p_previewHelper->handleMathPreviewData(MarkdownViewerAdapter::PreviewData());\n            }\n          });\n  connect(m_adapter, &MarkdownViewerAdapter::graphPreviewDataReady, p_previewHelper,\n          &PreviewHelper::handleGraphPreviewData);\n  connect(m_adapter, &MarkdownViewerAdapter::mathPreviewDataReady, p_previewHelper,\n          &PreviewHelper::handleMathPreviewData);\n}\n\nvoid MarkdownViewer::contextMenuEvent(QContextMenuEvent *p_event) {\n#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))\n  QMenu *menu(page()->createStandardContextMenu());\n#else\n  QMenu *menu(createStandardContextMenu());\n#endif\n\n  const QList<QAction *> actions = menu->actions();\n\n#if defined(Q_OS_WIN)\n  if (!m_copyImageUrlActionHooked) {\n    // \"Copy Image URL\" action will put the encoded URL to the clipboard as text\n    // and the URL as URLs. If the URL contains Chinese, OneNote or Word could not\n    // recognize it.\n    // We need to change it to only-space-encoded text.\n    QAction *copyImageUrlAct = pageAction(QWebEnginePage::CopyImageUrlToClipboard);\n    if (actions.contains(copyImageUrlAct)) {\n      connect(copyImageUrlAct, &QAction::triggered, this,\n              &MarkdownViewer::handleCopyImageUrlAction);\n      m_copyImageUrlActionHooked = true;\n    }\n  }\n#endif\n\n  if (!hasSelection() && m_viewWindow && m_viewWindow->getMode() == ViewWindowMode::Read) {\n    auto firstAct = actions.isEmpty() ? nullptr : actions[0];\n    auto editAct = new QAction(tr(\"&Edit\"), menu);\n    WidgetUtils::addActionShortcutText(editAct, ConfigMgr::getInst().getEditorConfig().getShortcut(\n                                                    EditorConfig::Shortcut::EditRead));\n    connect(editAct, &QAction::triggered, this, &MarkdownViewer::editRequested);\n    menu->insertAction(firstAct, editAct);\n    if (firstAct) {\n      menu->insertSeparator(firstAct);\n    }\n  }\n\n  // We need to replace the \"Copy Image\" action:\n  // - the default one use the fully-encoded URL to fetch the image while\n  // Windows seems to not recognize it.\n  // - We need to remove the html to let it be recognized by some web pages.\n  {\n    auto defaultCopyImageAct = pageAction(QWebEnginePage::CopyImageToClipboard);\n    if (actions.contains(defaultCopyImageAct)) {\n      QAction *copyImageAct = new QAction(defaultCopyImageAct->text(), menu);\n      copyImageAct->setToolTip(defaultCopyImageAct->toolTip());\n      connect(copyImageAct, &QAction::triggered, this, &MarkdownViewer::copyImage);\n      menu->insertAction(defaultCopyImageAct, copyImageAct);\n      defaultCopyImageAct->setVisible(false);\n    }\n  }\n\n  {\n    auto copyAct = pageAction(QWebEnginePage::Copy);\n    if (actions.contains(copyAct)) {\n      setupCrossCopyMenu(menu, copyAct);\n    }\n  }\n\n  hideUnusedActions(menu);\n\n  p_event->accept();\n\n  bool valid = false;\n  for (auto act : menu->actions()) {\n    // There may be one action visible with text being empty.\n    if (act->isVisible() && !act->text().isEmpty()) {\n      valid = true;\n      break;\n    }\n  }\n\n  if (valid) {\n    menu->exec(p_event->globalPos());\n  }\n\n  // For Qt 6, the menu is set with WA_DeleteOnClose.\n#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))\n  delete menu;\n#endif\n}\n\nvoid MarkdownViewer::handleCopyImageUrlAction() {\n  // To avoid failure of setting clipboard mime data.\n  QCoreApplication::processEvents();\n\n  QClipboard *clipboard = QApplication::clipboard();\n  const QMimeData *mimeData = clipboard->mimeData();\n  clipboard->setProperty(c_propertyImageUrlAltered, false);\n  if (clipboard->ownsClipboard() && mimeData->hasText() && mimeData->hasUrls()) {\n    QString text = mimeData->text();\n    QList<QUrl> urls = mimeData->urls();\n    if (urls.size() == 1 && urls[0].isLocalFile() && urls[0].toEncoded() == text) {\n      QString spaceOnlyText = urls[0].toString(QUrl::EncodeSpaces);\n      if (spaceOnlyText != text) {\n        // Set new mime data.\n        QMimeData *data = new QMimeData();\n        data->setUrls(urls);\n        data->setText(spaceOnlyText);\n        ClipboardUtils::setMimeDataToClipboard(clipboard, data, QClipboard::Clipboard);\n        clipboard->setProperty(c_propertyImageUrlAltered, true);\n        qDebug() << \"clipboard copy image URL altered\" << spaceOnlyText;\n      }\n    }\n  }\n}\n\nvoid MarkdownViewer::copyImage() {\n#if defined(Q_OS_WIN)\n  Q_ASSERT(m_copyImageUrlActionHooked);\n  // triggerPageAction(QWebEnginePage::CopyImageUrlToClipboard) will not really\n  // trigger the corresponding action. It just do the stuff directly.\n  QAction *copyImageUrlAct = pageAction(QWebEnginePage::CopyImageUrlToClipboard);\n  copyImageUrlAct->trigger();\n\n  QCoreApplication::processEvents();\n\n  QClipboard *clipboard = QApplication::clipboard();\n  if (clipboard->property(c_propertyImageUrlAltered).toBool()) {\n    const QMimeData *mimeData = clipboard->mimeData();\n    QString imgPath;\n    if (mimeData->hasUrls()) {\n      QList<QUrl> urls = mimeData->urls();\n      if (!urls.isEmpty() && urls[0].isLocalFile()) {\n        imgPath = urls[0].toLocalFile();\n      }\n    }\n\n    if (!imgPath.isEmpty()) {\n      QImage img = FileUtils::imageFromFile(imgPath);\n      if (!img.isNull()) {\n        m_copyImageTriggered = false;\n        ClipboardUtils::setImageToClipboard(clipboard, img, QClipboard::Clipboard);\n        return;\n      }\n    }\n  }\n#endif\n\n  m_copyImageTriggered = true;\n\n  // Fall back.\n  triggerPageAction(QWebEnginePage::CopyImageToClipboard);\n}\n\nvoid MarkdownViewer::handleClipboardChanged(QClipboard::Mode p_mode) {\n  if (!hasFocus() || p_mode != QClipboard::Clipboard) {\n    return;\n  }\n\n  QClipboard *clipboard = QApplication::clipboard();\n  if (!clipboard->ownsClipboard()) {\n    return;\n  }\n\n  const QMimeData *mimeData = clipboard->mimeData();\n  if (m_copyImageTriggered) {\n    m_copyImageTriggered = false;\n    removeHtmlFromImageData(clipboard, mimeData);\n    return;\n  }\n\n  if (clipboard->property(c_propertyCrossCopy).toBool()) {\n    clipboard->setProperty(c_propertyCrossCopy, false);\n    if (mimeData->hasHtml() && !mimeData->hasImage() && !m_crossCopyTarget.isEmpty()) {\n      crossCopy(m_crossCopyTarget, url().toString(), mimeData->html());\n    }\n  }\n}\n\nvoid MarkdownViewer::removeHtmlFromImageData(QClipboard *p_clipboard, const QMimeData *p_mimeData) {\n  if (!p_mimeData->hasImage()) {\n    return;\n  }\n\n  if (p_mimeData->hasHtml()) {\n    qDebug() << \"remove HTML from image QMimeData\" << p_mimeData->html();\n    QMimeData *data = new QMimeData();\n    data->setImageData(p_mimeData->imageData());\n    ClipboardUtils::setMimeDataToClipboard(p_clipboard, data, QClipboard::Clipboard);\n  }\n}\n\nvoid MarkdownViewer::hideUnusedActions(QMenu *p_menu) {\n  Q_UNUSED(p_menu);\n\n  QList<QAction *> unusedActions;\n\n  // QWebEnginePage uses different actions of Back/Forward/Reload before Qt 5.15.\n  // [Woboq](https://code.woboq.org/qt5/qtwebengine/src/webenginewidgets/api/qwebenginepage.cpp.html#1652)\n  // We tell these three actions by name.\n#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0))\n  const QStringList actionNames(\n      {QWebEnginePage::tr(\"&Back\"), QWebEnginePage::tr(\"&Forward\"), QWebEnginePage::tr(\"&Reload\")});\n\n  const QList<QAction *> actions = p_menu->actions();\n  for (auto it : actions) {\n    if (actionNames.contains(it->text())) {\n      unusedActions.append(it);\n    }\n  }\n#endif\n\n  QVector<QWebEnginePage::WebAction> pageActions = {QWebEnginePage::SavePage,\n                                                    QWebEnginePage::ViewSource,\n                                                    QWebEnginePage::DownloadImageToDisk,\n                                                    QWebEnginePage::DownloadLinkToDisk,\n                                                    QWebEnginePage::OpenLinkInThisWindow,\n                                                    QWebEnginePage::OpenLinkInNewBackgroundTab,\n                                                    QWebEnginePage::OpenLinkInNewTab,\n                                                    QWebEnginePage::OpenLinkInNewWindow,\n#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))\n                                                    QWebEnginePage::Forward,\n                                                    QWebEnginePage::Back,\n                                                    QWebEnginePage::Reload\n#endif\n  };\n\n  for (auto pageAct : pageActions) {\n    auto act = pageAction(pageAct);\n    unusedActions.append(act);\n  }\n\n  for (auto it : unusedActions) {\n    if (it) {\n      it->setVisible(false);\n    }\n  }\n}\n\nvoid MarkdownViewer::handleWebKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta) {\n  Q_UNUSED(p_shift);\n  Q_UNUSED(p_meta);\n  switch (p_key) {\n  // Esc\n  case 27:\n    break;\n\n  // Dash\n  case 189:\n    if (p_ctrl) {\n      // Zoom out.\n      zoomOut();\n    }\n    break;\n\n  // Equal\n  case 187:\n    if (p_ctrl) {\n      // Zoom in.\n      zoomIn();\n    }\n    break;\n\n  // 0\n  case 48:\n    if (p_ctrl) {\n      // Recover zoom.\n      restoreZoom();\n    }\n    break;\n\n  default:\n    break;\n  }\n}\n\nvoid MarkdownViewer::zoomOut() {\n  qreal factor = zoomFactor();\n  if (factor > 0.1) {\n    factor -= 0.1;\n    setZoomFactor(factor);\n    emit zoomFactorChanged(factor);\n  }\n}\n\nvoid MarkdownViewer::zoomIn() {\n  qreal factor = zoomFactor();\n  factor += 0.1;\n  setZoomFactor(factor);\n  emit zoomFactorChanged(factor);\n}\n\nvoid MarkdownViewer::restoreZoom() {\n  setZoomFactor(1);\n  emit zoomFactorChanged(1);\n}\n\nvoid MarkdownViewer::setupCrossCopyMenu(QMenu *p_menu, QAction *p_copyAct) {\n  const auto &targets = m_adapter->getCrossCopyTargets();\n  if (targets.isEmpty()) {\n    return;\n  }\n\n  auto subMenu = WidgetsFactory::createMenu(tr(\"Cross Copy\"), p_menu);\n\n  for (const auto &target : targets) {\n    auto act = subMenu->addAction(m_adapter->getCrossCopyTargetDisplayName(target));\n    act->setData(target);\n  }\n\n  connect(subMenu, &QMenu::triggered, this, [this](QAction *p_act) {\n    // selectedText() will return a plain text, so we trigger the Copy action here.\n    m_crossCopyTarget = p_act->data().toString();\n\n    QClipboard *clipboard = QApplication::clipboard();\n    clipboard->setProperty(c_propertyCrossCopy, true);\n    // Will handle the remaining logics in handleClipboardChanged().\n    triggerPageAction(QWebEnginePage::Copy);\n  });\n\n  auto menuAct = p_menu->insertMenu(p_copyAct, subMenu);\n  p_menu->removeAction(p_copyAct);\n  p_menu->insertAction(menuAct, p_copyAct);\n}\n\nvoid MarkdownViewer::crossCopy(const QString &p_target, const QString &p_baseUrl,\n                               const QString &p_html) {\n  emit m_adapter->crossCopyRequested(0, 0, p_target, p_baseUrl, p_html);\n}\n\nvoid MarkdownViewer::saveContent(const std::function<void(const QString &p_content)> &p_callback) {\n  page()->runJavaScript(\"document.getElementById('vx-content').textContent\",\n                        [p_callback](const QVariant &v) { p_callback(v.toString()); });\n}\n"
  },
  {
    "path": "src/widgets/editors/markdownviewer.h",
    "content": "#ifndef MARKDOWNVIEWER_H\n#define MARKDOWNVIEWER_H\n\n#include \"../webviewer.h\"\n\n#include <QClipboard>\n\nnamespace vnotex {\nclass MarkdownViewerAdapter;\nclass PreviewHelper;\nclass ViewWindow;\n\nclass MarkdownViewer : public WebViewer {\n  Q_OBJECT\npublic:\n  // @p_adapter will be managed by MarkdownViewer.\n  MarkdownViewer(MarkdownViewerAdapter *p_adapter, const QColor &p_background, qreal p_zoomFactor,\n                 QWidget *p_parent = nullptr);\n\n  MarkdownViewer(MarkdownViewerAdapter *p_adapter, const ViewWindow *p_viewWindow,\n                 const QColor &p_background, qreal p_zoomFactor, QWidget *p_parent = nullptr);\n\n  MarkdownViewerAdapter *adapter() const;\n\n  void setPreviewHelper(PreviewHelper *p_previewHelper);\n\n  void saveContent(const std::function<void(const QString &p_content)> &p_callback);\n\nsignals:\n  void zoomFactorChanged(qreal p_factor);\n\n  void editRequested();\n\nprotected:\n  void contextMenuEvent(QContextMenuEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void handleClipboardChanged(QClipboard::Mode p_mode);\n\n  void handleWebKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta);\n\nprivate:\n  void handleCopyImageUrlAction();\n\n  // Copy the clicked image.\n  // Used to replace the default CopyImageToClipboard action.\n  void copyImage();\n\n  void removeHtmlFromImageData(QClipboard *p_clipboard, const QMimeData *p_mimeData);\n\n  void hideUnusedActions(QMenu *p_menu);\n\n  void zoomOut();\n\n  void zoomIn();\n\n  void restoreZoom();\n\n  void setupCrossCopyMenu(QMenu *p_menu, QAction *p_copyAct);\n\n  // @p_baseUrl: if it is a folder, please end it with '/'. It is not used now in web side.\n  void crossCopy(const QString &p_target, const QString &p_baseUrl, const QString &p_html);\n\n  // Managed by QObject.\n  MarkdownViewerAdapter *m_adapter = nullptr;\n\n  // Nullable.\n  const ViewWindow *m_viewWindow = nullptr;\n\n  // Whether this view has hooked the Copy Image Url action.\n  bool m_copyImageUrlActionHooked = false;\n\n  // Whether CopyImage action has been triggered.\n  bool m_copyImageTriggered = false;\n\n  // Target name of cross copy going to execute.\n  QString m_crossCopyTarget;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNVIEWER_H\n"
  },
  {
    "path": "src/widgets/editors/markdownvieweradapter.cpp",
    "content": "#include \"markdownvieweradapter.h\"\n\n#include <QMap>\n\n#include \"../outlineprovider.h\"\n#include \"graphvizhelper.h\"\n#include \"plantumlhelper.h\"\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nMarkdownViewerAdapter::Position::Position(int p_lineNumber, const QString &p_anchor)\n    : m_lineNumber(p_lineNumber), m_anchor(p_anchor) {}\n\nQJsonObject MarkdownViewerAdapter::Position::toJson() const {\n  QJsonObject obj;\n  obj[\"lineNumber\"] = m_lineNumber;\n  obj[\"anchor\"] = m_anchor;\n  return obj;\n}\n\nMarkdownViewerAdapter::PreviewData::PreviewData(quint64 p_id, TimeStamp p_timeStamp,\n                                                const QString &p_format, const QByteArray &p_data,\n                                                bool p_needScale)\n    : m_id(p_id), m_timeStamp(p_timeStamp), m_format(p_format), m_data(p_data),\n      m_needScale(p_needScale) {}\n\nMarkdownViewerAdapter::Heading::Heading(const QString &p_name, int p_level, const QString &p_anchor)\n    : m_name(p_name), m_level(p_level), m_anchor(p_anchor) {}\n\nMarkdownViewerAdapter::Heading MarkdownViewerAdapter::Heading::fromJson(const QJsonObject &p_obj) {\n  return Heading(p_obj.value(QStringLiteral(\"name\")).toString(),\n                 p_obj.value(QStringLiteral(\"level\")).toInt(),\n                 p_obj.value(QStringLiteral(\"anchor\")).toString());\n}\n\nMarkdownViewerAdapter::CssRuleStyle\nMarkdownViewerAdapter::CssRuleStyle::fromJson(const QJsonObject &p_obj) {\n  CssRuleStyle style;\n  style.m_selector = p_obj[QStringLiteral(\"selector\")].toString();\n  style.m_color = p_obj[QStringLiteral(\"color\")].toString();\n  style.m_backgroundColor = p_obj[QStringLiteral(\"backgroundColor\")].toString();\n  style.m_fontWeight = p_obj[QStringLiteral(\"fontWeight\")].toString();\n  style.m_fontStyle = p_obj[QStringLiteral(\"fontStyle\")].toString();\n  return style;\n}\n\nQTextCharFormat MarkdownViewerAdapter::CssRuleStyle::toTextCharFormat() const {\n  QTextCharFormat fmt;\n  if (!m_color.isEmpty()) {\n    fmt.setForeground(Utils::toColor(m_color));\n  }\n  if (!m_backgroundColor.isEmpty()) {\n    fmt.setBackground(QColor(m_color));\n  }\n  if (m_fontWeight.contains(QStringLiteral(\"bold\"))) {\n    fmt.setFontWeight(QFont::Bold);\n  }\n  if (m_fontStyle.contains(QStringLiteral(\"italic\"))) {\n    fmt.setFontItalic(true);\n  }\n  return fmt;\n}\n\nMarkdownViewerAdapter::MarkdownViewerAdapter(QObject *p_parent) : WebViewAdapter(p_parent) {}\n\nMarkdownViewerAdapter::~MarkdownViewerAdapter() {}\n\nvoid MarkdownViewerAdapter::setText(int p_revision, const QString &p_text, int p_lineNumber) {\n  if (p_revision == m_revision && p_revision != 0) {\n    // Only sync line number position.\n    scrollToPosition(Position(p_lineNumber, \"\"));\n    return;\n  }\n\n  if (isReady()) {\n    m_revision = p_revision;\n    emit textUpdated(p_text);\n    scrollToPosition(Position(p_lineNumber, \"\"));\n  } else {\n    pendAction(std::bind(QOverload<int, const QString &, int>::of(&MarkdownViewerAdapter::setText),\n                         this, p_revision, p_text, p_lineNumber));\n  }\n}\n\nvoid MarkdownViewerAdapter::setText(const QString &p_text, int p_lineNumber) {\n  setText(0, p_text, p_lineNumber);\n}\n\nvoid MarkdownViewerAdapter::scrollToLine(int p_lineNumber) {\n  if (p_lineNumber == -1) {\n    return;\n  }\n\n  if (isReady()) {\n    m_topLineNumber = p_lineNumber;\n    emit editLineNumberUpdated(p_lineNumber);\n  } else {\n    pendAction(std::bind(&MarkdownViewerAdapter::scrollToLine, this, p_lineNumber));\n  }\n}\n\nvoid MarkdownViewerAdapter::setTopLineNumber(int p_lineNumber) {\n  if (m_topLineNumber == p_lineNumber) {\n    return;\n  }\n\n  m_topLineNumber = p_lineNumber;\n}\n\nvoid MarkdownViewerAdapter::scrollToPosition(const Position &p_pos) {\n  if (p_pos.m_lineNumber >= 0) {\n    scrollToLine(p_pos.m_lineNumber);\n  } else {\n    // Anchor.\n    scrollToAnchor(p_pos.m_anchor);\n  }\n}\n\nint MarkdownViewerAdapter::getTopLineNumber() const { return m_topLineNumber; }\n\nvoid MarkdownViewerAdapter::setGraphPreviewData(quint64 p_id, quint64 p_timeStamp,\n                                                const QString &p_format, const QString &p_data,\n                                                bool p_base64, bool p_needScale) {\n  auto ba = p_data.toUtf8();\n  if (p_base64 && !ba.isEmpty()) {\n    ba = QByteArray::fromBase64(ba);\n  }\n  emit graphPreviewDataReady(PreviewData(p_id, p_timeStamp, p_format, ba, p_needScale));\n}\n\nvoid MarkdownViewerAdapter::setMathPreviewData(quint64 p_id, quint64 p_timeStamp,\n                                               const QString &p_format, const QString &p_data,\n                                               bool p_base64, bool p_needScale) {\n  auto ba = p_data.toUtf8();\n  if (p_base64 && !ba.isEmpty()) {\n    ba = QByteArray::fromBase64(ba);\n  }\n  emit mathPreviewDataReady(PreviewData(p_id, p_timeStamp, p_format, ba, p_needScale));\n}\n\nvoid MarkdownViewerAdapter::setHeadings(const QJsonArray &p_headings) {\n  QVector<Heading> headings;\n  headings.reserve(p_headings.size());\n  for (auto const &arr : p_headings) {\n    headings.push_back(MarkdownViewerAdapter::Heading::fromJson(arr.toObject()));\n  }\n\n  OutlineProvider::makePerfectHeadings(headings, m_headings);\n  m_currentHeadingIndex = -1;\n\n  emit headingsChanged();\n}\n\nvoid MarkdownViewerAdapter::setCurrentHeadingAnchor(int p_index, const QString &p_anchor) {\n  m_currentHeadingIndex = -1;\n  if (p_index > -1) {\n    for (int i = p_index; i < m_headings.size(); ++i) {\n      if (m_headings[i].m_anchor == p_anchor) {\n        m_currentHeadingIndex = i;\n        break;\n      }\n    }\n  }\n\n  emit currentHeadingChanged();\n}\n\nconst QVector<MarkdownViewerAdapter::Heading> &MarkdownViewerAdapter::getHeadings() const {\n  return m_headings;\n}\n\nint MarkdownViewerAdapter::getCurrentHeadingIndex() const { return m_currentHeadingIndex; }\n\nvoid MarkdownViewerAdapter::scrollToHeading(int p_idx) {\n  if (p_idx < 0 || p_idx >= m_headings.size()) {\n    return;\n  }\n\n  if (m_headings[p_idx].m_anchor.isEmpty()) {\n    return;\n  }\n\n  scrollToPosition(Position(-1, m_headings[p_idx].m_anchor));\n}\n\nvoid MarkdownViewerAdapter::scrollToAnchor(const QString &p_anchor) {\n  if (p_anchor.isEmpty()) {\n    return;\n  }\n  Q_ASSERT(isReady());\n  m_currentHeadingIndex = -1;\n  emit anchorScrollRequested(p_anchor);\n}\n\nvoid MarkdownViewerAdapter::scroll(bool p_up) { emit scrollRequested(p_up); }\n\nvoid MarkdownViewerAdapter::setKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta) {\n  emit keyPressed(p_key, p_ctrl, p_shift, p_meta);\n}\n\nvoid MarkdownViewerAdapter::zoom(bool p_zoomIn) { emit zoomed(p_zoomIn); }\n\nvoid MarkdownViewerAdapter::setMarkdownFromHtml(quint64 p_id, quint64 p_timeStamp,\n                                                const QString &p_text) {\n  emit htmlToMarkdownReady(p_id, p_timeStamp, p_text);\n}\n\nvoid MarkdownViewerAdapter::setCodeBlockHighlightHtml(int p_idx, quint64 p_timeStamp,\n                                                      const QString &p_html) {\n  emit highlightCodeBlockReady(p_idx, p_timeStamp, p_html);\n}\n\nvoid MarkdownViewerAdapter::setCrossCopyTargets(const QJsonArray &p_targets) {\n  m_crossCopyTargets.clear();\n  for (const auto &target : p_targets) {\n    m_crossCopyTargets << target.toString();\n  }\n}\n\nconst QStringList &MarkdownViewerAdapter::getCrossCopyTargets() const { return m_crossCopyTargets; }\n\nQString MarkdownViewerAdapter::getCrossCopyTargetDisplayName(const QString &p_target) const {\n  static QMap<QString, QString> maps;\n  if (maps.isEmpty()) {\n    maps.insert(\"No Background\", tr(\"No Background\"));\n    maps.insert(\"Evernote\", tr(\"Evernote\"));\n    maps.insert(\"OneNote\", tr(\"OneNote\"));\n    maps.insert(\"Microsoft Word\", tr(\"Microsoft Word\"));\n    maps.insert(\"WeChat Public Account Editor\", tr(\"WeChat Public Account Editor\"));\n    maps.insert(\"Raw HTML\", tr(\"Raw HTML\"));\n  }\n\n  auto it = maps.find(p_target);\n  if (it != maps.end()) {\n    return *it;\n  }\n  qWarning() << \"missing cross copy target\" << p_target;\n  return p_target;\n}\n\nvoid MarkdownViewerAdapter::setCrossCopyResult(quint64 p_id, quint64 p_timeStamp,\n                                               const QString &p_html) {\n  emit crossCopyReady(p_id, p_timeStamp, p_html);\n}\n\nvoid MarkdownViewerAdapter::setWorkFinished() { emit workFinished(); }\n\nvoid MarkdownViewerAdapter::saveContent() { emit contentRequested(); }\n\nvoid MarkdownViewerAdapter::setSavedContent(const QString &p_headContent,\n                                            const QString &p_styleContent, const QString &p_content,\n                                            const QString &p_bodyClassList) {\n  emit contentReady(p_headContent, p_styleContent, p_content, p_bodyClassList);\n}\n\nvoid MarkdownViewerAdapter::reset() {\n  m_revision = 0;\n  setReady(false);\n  m_topLineNumber = -1;\n  m_headings.clear();\n  m_currentHeadingIndex = -1;\n  m_crossCopyTargets.clear();\n}\n\nvoid MarkdownViewerAdapter::renderGraph(quint64 p_id, quint64 p_index, const QString &p_format,\n                                        const QString &p_lang, const QString &p_text) {\n  if (p_text.isEmpty()) {\n    emit graphRenderDataReady(p_id, p_index, p_format, QString());\n    return;\n  }\n\n  if (p_lang == QStringLiteral(\"puml\")) {\n    PlantUmlHelper::getInst().process(\n        p_id, p_index, p_format, p_text, this,\n        [this](quint64 id, TimeStamp timeStamp, const QString &format, const QString &data) {\n          emit graphRenderDataReady(id, timeStamp, format, data);\n        });\n  } else if (p_lang == QStringLiteral(\"dot\")) {\n    GraphvizHelper::getInst().process(\n        p_id, p_index, p_format, p_text, this,\n        [this](quint64 id, TimeStamp timeStamp, const QString &format, const QString &data) {\n          emit graphRenderDataReady(id, timeStamp, format, data);\n        });\n  } else {\n    Q_ASSERT(false);\n  }\n}\n\nvoid MarkdownViewerAdapter::highlightCodeBlock(int p_idx, quint64 p_timeStamp,\n                                               const QString &p_text) {\n  if (isReady()) {\n    emit highlightCodeBlockRequested(p_idx, p_timeStamp, p_text);\n  } else {\n    pendAction(\n        std::bind(&MarkdownViewerAdapter::highlightCodeBlock, this, p_idx, p_timeStamp, p_text));\n  }\n}\n\nvoid MarkdownViewerAdapter::setStyleSheetStyles(quint64 p_id, const QJsonArray &p_styles) {\n  QVector<CssRuleStyle> ruleStyles;\n  ruleStyles.reserve(p_styles.size());\n  for (int i = 0; i < p_styles.size(); ++i) {\n    ruleStyles.push_back(CssRuleStyle::fromJson(p_styles[i].toObject()));\n  }\n\n  invokeCallback(p_id, &ruleStyles);\n}\n\nvoid MarkdownViewerAdapter::fetchStylesFromStyleSheet(\n    const QString &p_styleSheet,\n    const std::function<void(const QVector<CssRuleStyle> *)> &p_callback) {\n  if (p_styleSheet.isEmpty()) {\n    p_callback(nullptr);\n    return;\n  }\n\n  if (isReady()) {\n    const quint64 id = addCallback([p_callback](void *data) {\n      p_callback(reinterpret_cast<const QVector<CssRuleStyle> *>(data));\n    });\n    emit parseStyleSheetRequested(id, p_styleSheet);\n  } else {\n    pendAction(std::bind(&MarkdownViewerAdapter::fetchStylesFromStyleSheet, this, p_styleSheet,\n                         p_callback));\n  }\n}\n"
  },
  {
    "path": "src/widgets/editors/markdownvieweradapter.h",
    "content": "#ifndef MARKDOWNVIEWERADAPTER_H\n#define MARKDOWNVIEWERADAPTER_H\n\n#include \"webviewadapter.h\"\n\n#include <QJsonArray>\n#include <QJsonObject>\n#include <QScopedPointer>\n#include <QString>\n#include <QTextCharFormat>\n\n#include <core/global.h>\n\nnamespace vnotex {\n// Adapter and interface between CPP and JS.\nclass MarkdownViewerAdapter : public WebViewAdapter {\n  Q_OBJECT\npublic:\n  struct Position {\n    Position() = default;\n\n    Position(int p_lineNumber, const QString &p_anchor);\n\n    QJsonObject toJson() const;\n\n    int m_lineNumber = -1;\n\n    QString m_anchor;\n  };\n\n  struct PreviewData {\n    PreviewData() = default;\n\n    PreviewData(quint64 p_id, TimeStamp p_timeStamp, const QString &p_format,\n                const QByteArray &p_data, bool p_needScale);\n\n    quint64 m_id = 0;\n\n    quint64 m_timeStamp = 0;\n\n    QString m_format;\n\n    QByteArray m_data;\n\n    bool m_needScale = false;\n  };\n\n  struct Heading {\n    Heading() = default;\n\n    Heading(const QString &p_name, int p_level, const QString &p_anchor = QString());\n\n    static Heading fromJson(const QJsonObject &p_obj);\n\n    QString m_name;\n\n    int m_level = -1;\n\n    QString m_anchor;\n  };\n\n  struct CssRuleStyle {\n    QTextCharFormat toTextCharFormat() const;\n\n    static CssRuleStyle fromJson(const QJsonObject &p_obj);\n\n    QString m_selector;\n\n    QString m_color;\n\n    QString m_backgroundColor;\n\n    QString m_fontWeight;\n\n    QString m_fontStyle;\n  };\n\n  explicit MarkdownViewerAdapter(QObject *p_parent = nullptr);\n\n  virtual ~MarkdownViewerAdapter();\n\n  // @p_lineNumber: the line number needed to sync, -1 for invalid.\n  void setText(int p_revision, const QString &p_text, int p_lineNumber);\n\n  // @p_lineNumber: the line number needed to sync, -1 for invalid.\n  void setText(const QString &p_text, int p_lineNumber = -1);\n\n  void scrollToPosition(const Position &p_pos);\n\n  int getTopLineNumber() const;\n\n  const QVector<MarkdownViewerAdapter::Heading> &getHeadings() const;\n  int getCurrentHeadingIndex() const;\n\n  void scrollToHeading(int p_idx);\n\n  void scroll(bool p_up);\n\n  const QStringList &getCrossCopyTargets() const;\n\n  QString getCrossCopyTargetDisplayName(const QString &p_target) const;\n\n  void saveContent();\n\n  // Should be called before WebViewer.setHtml().\n  void reset();\n\n  void highlightCodeBlock(int p_idx, quint64 p_timeStamp, const QString &p_text);\n\n  // Parse style sheet and fetch the styles.\n  void\n  fetchStylesFromStyleSheet(const QString &p_styleSheet,\n                            const std::function<void(const QVector<CssRuleStyle> *)> &p_callback);\n\n  // Functions to be called from web side.\npublic slots:\n  void setWorkFinished();\n\n  // The line number at the top.\n  void setTopLineNumber(int p_lineNumber);\n\n  // Web sets back the preview result.\n  void setGraphPreviewData(quint64 p_id, quint64 p_timeStamp, const QString &p_format,\n                           const QString &p_data, bool p_base64 = false, bool p_needScale = false);\n\n  // Web sets back the preview result.\n  void setMathPreviewData(quint64 p_id, quint64 p_timeStamp, const QString &p_format,\n                          const QString &p_data, bool p_base64 = false, bool p_needScale = false);\n\n  // Set the headings.\n  void setHeadings(const QJsonArray &p_headings);\n\n  // Set current heading anchor.\n  void setCurrentHeadingAnchor(int p_index, const QString &p_anchor);\n\n  void setKeyPress(int p_key, bool p_ctrl, bool p_shift, bool p_meta);\n\n  void zoom(bool p_zoomIn);\n\n  // Set back the result of htmlToMarkdown() call.\n  void setMarkdownFromHtml(quint64 p_id, quint64 p_timeStamp, const QString &p_text);\n\n  void setCodeBlockHighlightHtml(int p_idx, quint64 p_timeStamp, const QString &p_html);\n\n  void setCrossCopyTargets(const QJsonArray &p_targets);\n\n  void setCrossCopyResult(quint64 p_id, quint64 p_timeStamp, const QString &p_html);\n\n  void setSavedContent(const QString &p_headContent, const QString &p_styleContent,\n                       const QString &p_content, const QString &p_bodyClassList);\n\n  // Call local CPP code to render graph.\n  void renderGraph(quint64 p_id, quint64 p_index, const QString &p_format, const QString &p_lang,\n                   const QString &p_text);\n\n  void setStyleSheetStyles(quint64 p_id, const QJsonArray &p_styles);\n\n  // Signals to be connected at web side.\nsignals:\n  // Current Markdown text is updated.\n  void textUpdated(const QString &p_text);\n\n  // Current editor line number is updated.\n  void editLineNumberUpdated(int p_lineNumber);\n\n  // Request to preview graph.\n  void graphPreviewRequested(quint64 p_id, quint64 p_timeStamp, const QString &p_lang,\n                             const QString &p_text);\n\n  // Request to preview math.\n  void mathPreviewRequested(quint64 p_id, quint64 p_timeStamp, const QString &p_text);\n\n  void anchorScrollRequested(const QString &p_anchor);\n\n  void scrollRequested(bool p_up);\n\n  void htmlToMarkdownRequested(quint64 p_id, quint64 p_timeStamp, const QString &p_html);\n\n  void crossCopyRequested(quint64 p_id, quint64 p_timeStamp, const QString &p_target,\n                          const QString &p_baseUrl, const QString &p_html);\n\n  // Request to get the whole HTML content.\n  void contentRequested();\n\n  void graphRenderDataReady(quint64 p_id, quint64 p_index, const QString &p_format,\n                            const QString &p_data);\n\n  void highlightCodeBlockRequested(int p_idx, quint64 p_timeStamp, const QString &p_text);\n\n  void parseStyleSheetRequested(quint64 p_id, const QString &p_styleSheet);\n\n  // Signals to be connected at cpp side.\nsignals:\n  void graphPreviewDataReady(const PreviewData &p_data);\n\n  void mathPreviewDataReady(const PreviewData &p_data);\n\n  // All rendering work has finished.\n  void workFinished();\n\n  void headingsChanged();\n\n  void currentHeadingChanged();\n\n  void keyPressed(int p_key, bool p_ctrl, bool p_shift, bool p_meta);\n\n  void zoomed(bool p_zoomIn);\n\n  void htmlToMarkdownReady(quint64 p_id, quint64 p_timeStamp, const QString &p_text);\n\n  void crossCopyReady(quint64 p_id, quint64 p_timeStamp, const QString &p_html);\n\n  void contentReady(const QString &p_headContent, const QString &p_styleContent,\n                    const QString &p_content, const QString &p_bodyClassList);\n\n  void highlightCodeBlockReady(int p_idx, quint64 p_timeStamp, const QString &p_html);\n\nprivate:\n  void scrollToLine(int p_lineNumber);\n\n  void scrollToAnchor(const QString &p_anchor);\n\n  int m_revision = 0;\n\n  // Source line number of the top element node at web side.\n  int m_topLineNumber = -1;\n\n  // Headings from web side.\n  QVector<Heading> m_headings;\n\n  int m_currentHeadingIndex = -1;\n\n  // Targets supported by cross copy. Set by web.\n  QStringList m_crossCopyTargets;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNVIEWERADAPTER_H\n"
  },
  {
    "path": "src/widgets/editors/mindmapeditor.cpp",
    "content": "#include \"mindmapeditor.h\"\n\n#include <QWebChannel>\n\n#include \"mindmapeditoradapter.h\"\n\nusing namespace vnotex;\n\nMindMapEditor::MindMapEditor(MindMapEditorAdapter *p_adapter, const QColor &p_background,\n                             qreal p_zoomFactor, QWidget *p_parent)\n    : WebViewer(p_background, p_zoomFactor, p_parent), m_adapter(p_adapter) {\n  setAcceptDrops(true);\n\n  m_adapter->setParent(this);\n  connect(m_adapter, &MindMapEditorAdapter::contentsChanged, this, [this]() {\n    m_modified = true;\n    emit contentsChanged();\n  });\n\n  auto channel = new QWebChannel(this);\n  channel->registerObject(QStringLiteral(\"vxAdapter\"), m_adapter);\n\n  page()->setWebChannel(channel);\n}\n\nMindMapEditorAdapter *MindMapEditor::adapter() const { return m_adapter; }\n\nvoid MindMapEditor::setModified(bool p_modified) { m_modified = p_modified; }\n\nbool MindMapEditor::isModified() const { return m_modified; }\n"
  },
  {
    "path": "src/widgets/editors/mindmapeditor.h",
    "content": "#ifndef MINDMAPEDITOR_H\n#define MINDMAPEDITOR_H\n\n#include \"../webviewer.h\"\n\nnamespace vnotex {\nclass MindMapEditorAdapter;\n\nclass MindMapEditor : public WebViewer {\n  Q_OBJECT\npublic:\n  MindMapEditor(MindMapEditorAdapter *p_adapter, const QColor &p_background, qreal p_zoomFactor,\n                QWidget *p_parent = nullptr);\n\n  MindMapEditorAdapter *adapter() const;\n\n  void setModified(bool p_modified);\n  bool isModified() const;\n\nsignals:\n  void contentsChanged();\n\nprivate:\n  // Managed by QObject.\n  MindMapEditorAdapter *m_adapter = nullptr;\n\n  bool m_modified = false;\n};\n} // namespace vnotex\n\n#endif // MINDMAPEDITOR_H\n"
  },
  {
    "path": "src/widgets/editors/mindmapeditoradapter.cpp",
    "content": "#include \"mindmapeditoradapter.h\"\n\nusing namespace vnotex;\n\nMindMapEditorAdapter::MindMapEditorAdapter(QObject *p_parent) : WebViewAdapter(p_parent) {\n  qDebug() << \"MindMapEditorAdapter: Constructor called\";\n}\n\nvoid MindMapEditorAdapter::setData(const QString &p_data) {\n  if (isReady()) {\n    emit dataUpdated(p_data);\n  } else {\n    pendAction(std::bind(&MindMapEditorAdapter::setData, this, p_data));\n  }\n}\n\nvoid MindMapEditorAdapter::saveData(const std::function<void(const QString &)> &p_callback) {\n  if (isReady()) {\n    const quint64 id = addCallback(\n        [p_callback](void *data) { p_callback(*reinterpret_cast<const QString *>(data)); });\n    emit saveDataRequested(id);\n  } else {\n    pendAction(std::bind(&MindMapEditorAdapter::saveData, this, p_callback));\n  }\n}\n\nvoid MindMapEditorAdapter::setSavedData(quint64 p_id, const QString &p_data) {\n  invokeCallback(p_id, (void *)&p_data);\n}\n\nvoid MindMapEditorAdapter::notifyContentsChanged() { emit contentsChanged(); }\n\nvoid MindMapEditorAdapter::urlClicked(const QString &p_url) {\n  if (p_url.isEmpty()) {\n    qWarning() << \"MindMapEditorAdapter::urlClicked: URL is empty\";\n    return;\n  }\n\n  qDebug() << \"MindMapEditorAdapter::urlClicked: Emitting urlClickRequested signal with URL:\"\n           << p_url;\n\n  emit urlClickRequested(p_url);\n}\n\nvoid MindMapEditorAdapter::urlClickedWithDirection(const QString &p_url,\n                                                   const QString &p_direction) {\n  if (p_url.isEmpty()) {\n    qWarning() << \"MindMapEditorAdapter::urlClickedWithDirection: URL is empty\";\n    return;\n  }\n\n  qDebug() << \"MindMapEditorAdapter::urlClickedWithDirection: URL:\" << p_url\n           << \"Direction:\" << p_direction;\n\n  emit urlClickWithDirectionRequested(p_url, p_direction);\n}\n"
  },
  {
    "path": "src/widgets/editors/mindmapeditoradapter.h",
    "content": "#ifndef MINDMAPEDITORADAPTER_H\n#define MINDMAPEDITORADAPTER_H\n\n#include \"webviewadapter.h\"\n\n#include <QJsonObject>\n#include <QString>\n\n#include <core/global.h>\n\nnamespace vnotex {\n// Adapter and interface between CPP and JS for MindMap.\nclass MindMapEditorAdapter : public WebViewAdapter {\n  Q_OBJECT\npublic:\n  explicit MindMapEditorAdapter(QObject *p_parent = nullptr);\n\n  ~MindMapEditorAdapter() = default;\n\n  void setData(const QString &p_data);\n\n  void saveData(const std::function<void(const QString &)> &p_callback);\n\n  // Functions to be called from web side.\npublic slots:\n  void setSavedData(quint64 p_id, const QString &p_data);\n\n  void notifyContentsChanged();\n\n  // 处理来自JavaScript的URL点击事件\n  void urlClicked(const QString &p_url);\n\n  // 处理来自JavaScript的带方向的URL点击事件\n  void urlClickedWithDirection(const QString &p_url, const QString &p_direction);\n\n  // Signals to be connected at web side.\nsignals:\n  void dataUpdated(const QString &p_data);\n\n  void saveDataRequested(quint64 p_id);\n\nsignals:\n  void contentsChanged();\n\n  // 发出URL点击信号，供其他组件处理\n  void urlClickRequested(const QString &p_url);\n\n  // 发出带方向的URL点击信号\n  void urlClickWithDirectionRequested(const QString &p_url, const QString &p_direction);\n\nprivate:\n};\n} // namespace vnotex\n\n#endif // MINDMAPEDITORADAPTER_H\n"
  },
  {
    "path": "src/widgets/editors/pdfviewer.cpp",
    "content": "#include \"pdfviewer.h\"\n\n#include <QWebChannel>\n\n#include \"pdfvieweradapter.h\"\n\nusing namespace vnotex;\n\nPdfViewer::PdfViewer(PdfViewerAdapter *p_adapter, const QColor &p_background, qreal p_zoomFactor,\n                     QWidget *p_parent)\n    : WebViewer(p_background, p_zoomFactor, p_parent), m_adapter(p_adapter) {\n  m_adapter->setParent(this);\n\n  auto channel = new QWebChannel(this);\n  channel->registerObject(QStringLiteral(\"vxAdapter\"), m_adapter);\n\n  page()->setWebChannel(channel);\n}\n\nPdfViewerAdapter *PdfViewer::adapter() const { return m_adapter; }\n"
  },
  {
    "path": "src/widgets/editors/pdfviewer.h",
    "content": "#ifndef PDFVIEWER_H\n#define PDFVIEWER_H\n\n#include \"../webviewer.h\"\n\nnamespace vnotex {\nclass PdfViewerAdapter;\n\nclass PdfViewer : public WebViewer {\n  Q_OBJECT\npublic:\n  PdfViewer(PdfViewerAdapter *p_adapter, const QColor &p_background, qreal p_zoomFactor,\n            QWidget *p_parent = nullptr);\n\n  PdfViewerAdapter *adapter() const;\n\nprivate:\n  // Managed by QObject.\n  PdfViewerAdapter *m_adapter = nullptr;\n};\n} // namespace vnotex\n\n#endif // PDFVIEWER_H\n"
  },
  {
    "path": "src/widgets/editors/pdfvieweradapter.cpp",
    "content": "#include \"pdfvieweradapter.h\"\n\nusing namespace vnotex;\n\nPdfViewerAdapter::PdfViewerAdapter(QObject *p_parent) : WebViewAdapter(p_parent) {}\n\nvoid PdfViewerAdapter::setUrl(const QString &p_url) {\n  // TODO: Not supported yet.\n  Q_ASSERT(false);\n  if (isReady()) {\n    emit urlUpdated(p_url);\n  } else {\n    pendAction(std::bind(&PdfViewerAdapter::setUrl, this, p_url));\n  }\n}\n"
  },
  {
    "path": "src/widgets/editors/pdfvieweradapter.h",
    "content": "#ifndef PDFVIEWERADAPTER_H\n#define PDFVIEWERADAPTER_H\n\n#include \"webviewadapter.h\"\n\nnamespace vnotex {\n// Adapter and interface between CPP and JS for PDF.\nclass PdfViewerAdapter : public WebViewAdapter {\n  Q_OBJECT\npublic:\n  explicit PdfViewerAdapter(QObject *p_parent = nullptr);\n\n  ~PdfViewerAdapter() = default;\n\n  void setUrl(const QString &p_url);\n\n  // Functions to be called from web side.\npublic slots:\n\n  // Signals to be connected at web side.\nsignals:\n  void urlUpdated(const QString &p_url);\n};\n} // namespace vnotex\n\n#endif // PDFVIEWERADAPTER_H\n"
  },
  {
    "path": "src/widgets/editors/plantumlhelper.cpp",
    "content": "#include \"plantumlhelper.h\"\n\n#include <QDebug>\n#include <QDir>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/markdowneditorconfig.h>\n#include <utils/pathutils.h>\n#include <utils/processutils.h>\n\nusing namespace vnotex;\n\nPlantUmlHelper &PlantUmlHelper::getInst() {\n  static bool initialized = false;\n  static PlantUmlHelper inst;\n  if (!initialized) {\n    initialized = true;\n    const auto &markdownEditorConfig =\n        ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n    inst.update(markdownEditorConfig.getPlantUmlJar(), markdownEditorConfig.getGraphvizExe(),\n                markdownEditorConfig.getPlantUmlCommand());\n  }\n  return inst;\n}\n\nvoid PlantUmlHelper::update(const QString &p_plantUmlJarFile, const QString &p_graphvizFile,\n                            const QString &p_overriddenCommand) {\n  m_overriddenCommand = p_overriddenCommand;\n  if (m_overriddenCommand.isEmpty()) {\n    prepareProgramAndArgs(p_plantUmlJarFile, p_graphvizFile, m_program, m_args);\n  } else {\n    m_program.clear();\n    m_args.clear();\n  }\n\n  checkValidProgram();\n\n  clearCache();\n}\n\nvoid PlantUmlHelper::prepareProgramAndArgs(const QString &p_plantUmlJarFile,\n                                           const QString &p_graphvizFile, QString &p_program,\n                                           QStringList &p_args) {\n  p_program.clear();\n  p_args.clear();\n\n#if defined(Q_OS_WIN)\n  p_program = \"java\";\n#else\n  p_program = \"/bin/sh\";\n  p_args << \"-c\";\n  p_args << \"java\";\n#endif\n\n#if defined(Q_OS_MACOS)\n  p_args << \"-Djava.awt.headless=true\";\n#endif\n\n  p_args << \"-jar\" << QDir::toNativeSeparators(PathUtils::absolutePath(p_plantUmlJarFile));\n\n  p_args << \"-charset\" << \"UTF-8\";\n\n  if (!p_graphvizFile.isEmpty()) {\n    p_args << \"-graphvizdot\" << QDir::toNativeSeparators(PathUtils::absolutePath(p_graphvizFile));\n  }\n\n  p_args << \"-pipe\";\n}\n\nQPair<bool, QString> PlantUmlHelper::testPlantUml(const QString &p_plantUmlJarFile) {\n  auto ret = qMakePair(false, QString());\n\n  QString program;\n  QStringList args;\n  prepareProgramAndArgs(p_plantUmlJarFile, QString(), program, args);\n\n  args << \"-tsvg\";\n  args = getArgsToUse(args);\n\n  const QString testGraph(\"VNote->Markdown : Hello\");\n\n  int exitCode = -1;\n  QByteArray outData;\n  QByteArray errData;\n  auto state = ProcessUtils::start(program, args, testGraph.toUtf8(), exitCode, outData, errData);\n  ret.first = (state == ProcessUtils::Succeeded) && (exitCode == 0);\n\n  ret.second = QStringLiteral(\"%1 %2\\n\\nExitcode: %3\\n\\nOutput: %4\\n\\nError: %5\")\n                   .arg(program, args.join(' '), QString::number(exitCode),\n                        QString::fromLocal8Bit(outData), QString::fromLocal8Bit(errData));\n\n  return ret;\n}\n\nQStringList PlantUmlHelper::getFormatArgs(const QString &p_format) {\n  QStringList args;\n  args << (\"-t\" + p_format);\n  return args;\n}\n"
  },
  {
    "path": "src/widgets/editors/plantumlhelper.h",
    "content": "#ifndef PLANTUMLHELPER_H\n#define PLANTUMLHELPER_H\n\n#include \"graphhelper.h\"\n\nnamespace vnotex {\nclass PlantUmlHelper : public GraphHelper {\npublic:\n  void update(const QString &p_plantUmlJarFile, const QString &p_graphvizFile,\n              const QString &p_overriddenCommand);\n\n  static PlantUmlHelper &getInst();\n\n  static QPair<bool, QString> testPlantUml(const QString &p_plantUmlJarFile);\n\nprivate:\n  PlantUmlHelper() = default;\n\n  QStringList getFormatArgs(const QString &p_format) Q_DECL_OVERRIDE;\n\n  static void prepareProgramAndArgs(const QString &p_plantUmlJarFile, const QString &p_graphvizFile,\n                                    QString &p_program, QStringList &p_args);\n};\n} // namespace vnotex\n\n#endif // PLANTUMLHELPER_H\n"
  },
  {
    "path": "src/widgets/editors/previewhelper.cpp",
    "content": "#include \"previewhelper.h\"\n\n#include <QDebug>\n#include <QTextBlock>\n#include <QTextDocument>\n#include <QTimer>\n\n#include <vtextedit/texteditorconfig.h>\n#include <vtextedit/textutils.h>\n\n#include <utils/utils.h>\n\n#include \"graphvizhelper.h\"\n#include \"markdowneditor.h\"\n#include \"plantumlhelper.h\"\n\nusing namespace vnotex;\n\nPreviewHelper::CodeBlockPreviewData::CodeBlockPreviewData(\n    const vte::peg::FencedCodeBlock &p_codeBlock)\n    : m_startBlock(p_codeBlock.m_startBlock), m_endBlock(p_codeBlock.m_endBlock),\n      m_lang(p_codeBlock.m_lang) {}\n\nvoid PreviewHelper::CodeBlockPreviewData::updateInplacePreview(QTextDocument *p_doc,\n                                                               const QPixmap &p_image,\n                                                               const QString &p_imageName,\n                                                               QRgb p_background,\n                                                               int p_tabStopWidth) {\n  const auto block = p_doc->findBlockByNumber(m_endBlock);\n  if (block.isValid()) {\n    m_inplacePreview.reset(new vte::PreviewItem());\n    m_inplacePreview->m_startPos = block.position();\n    m_inplacePreview->m_endPos = m_inplacePreview->m_startPos + block.length();\n    m_inplacePreview->m_blockPos = m_inplacePreview->m_startPos;\n    m_inplacePreview->m_blockNumber = m_endBlock;\n    m_inplacePreview->m_padding = vte::PreviewMgr::calculateBlockMargin(block, p_tabStopWidth);\n    m_inplacePreview->m_name = p_imageName;\n    m_inplacePreview->m_backgroundColor = p_background;\n    m_inplacePreview->m_isBlockwise = true;\n    m_inplacePreview->m_image = p_image;\n  } else {\n    m_inplacePreview.clear();\n  }\n}\n\nPreviewHelper::MathBlockPreviewData::MathBlockPreviewData(const vte::peg::MathBlock &p_mathBlock)\n    : m_blockNumber(p_mathBlock.m_blockNumber), m_previewedAsBlock(p_mathBlock.m_previewedAsBlock),\n      m_index(p_mathBlock.m_index), m_length(p_mathBlock.m_length) {}\n\nvoid PreviewHelper::MathBlockPreviewData::updateInplacePreview(QTextDocument *p_doc,\n                                                               const QPixmap &p_image,\n                                                               const QString &p_imageName,\n                                                               int p_tabStopWidth) {\n  const auto block = p_doc->findBlockByNumber(m_blockNumber);\n  if (block.isValid()) {\n    m_inplacePreview.reset(new vte::PreviewItem());\n    m_inplacePreview->m_startPos = block.position() + m_index;\n    m_inplacePreview->m_endPos = m_inplacePreview->m_startPos + m_length;\n    m_inplacePreview->m_blockPos = block.position();\n    m_inplacePreview->m_blockNumber = m_blockNumber;\n    m_inplacePreview->m_padding = vte::PreviewMgr::calculateBlockMargin(block, p_tabStopWidth);\n    m_inplacePreview->m_name = p_imageName;\n    m_inplacePreview->m_isBlockwise = m_previewedAsBlock;\n    m_inplacePreview->m_image = p_image;\n  } else {\n    m_inplacePreview.clear();\n  }\n}\n\nint PreviewHelper::GraphPreviewData::s_imageIndex = 0;\n\nPreviewHelper::GraphPreviewData::GraphPreviewData(TimeStamp p_timeStamp, const QString &p_format,\n                                                  const QByteArray &p_data, QRgb p_background,\n                                                  qreal p_scaleFactor)\n    : m_timeStamp(p_timeStamp), m_background(p_background) {\n  if (p_data.isEmpty()) {\n    return;\n  }\n\n  m_name = QString::number(++s_imageIndex);\n\n  bool needScale = p_scaleFactor > 1.01;\n  if (needScale) {\n    if (p_format == QStringLiteral(\"svg\")) {\n      m_image = Utils::svgToPixmap(p_data, p_background, p_scaleFactor);\n    } else {\n      QPixmap tmpImg;\n      tmpImg.loadFromData(p_data, p_format.toLocal8Bit().data());\n      m_image = tmpImg.scaledToWidth(tmpImg.width() * p_scaleFactor, Qt::SmoothTransformation);\n    }\n  } else {\n    m_image.loadFromData(p_data, p_format.toLocal8Bit().data());\n  }\n}\n\nbool PreviewHelper::GraphPreviewData::isNull() const { return m_timeStamp == 0; }\n\nPreviewHelper::PreviewHelper(MarkdownEditor *p_editor, QObject *p_parent)\n    : QObject(p_parent),\n      m_inplacePreviewSources(SourceFlag::FlowChart | SourceFlag::Mermaid | SourceFlag::WaveDrom |\n                              SourceFlag::PlantUml | SourceFlag::Graphviz | SourceFlag::Math),\n      m_codeBlockCache(100, nullptr), m_mathBlockCache(100, nullptr) {\n  setMarkdownEditor(p_editor);\n\n  const int interval = 1000;\n  m_codeBlockTimer = new QTimer(this);\n  m_codeBlockTimer->setSingleShot(true);\n  m_codeBlockTimer->setInterval(interval);\n  connect(m_codeBlockTimer, &QTimer::timeout, this, &PreviewHelper::handleCodeBlocksUpdate);\n\n  m_mathBlockTimer = new QTimer(this);\n  m_mathBlockTimer->setSingleShot(true);\n  m_mathBlockTimer->setInterval(interval);\n  connect(m_mathBlockTimer, &QTimer::timeout, this, &PreviewHelper::handleMathBlocksUpdate);\n}\n\nvoid PreviewHelper::codeBlocksUpdated(vte::TimeStamp p_timeStamp,\n                                      const QVector<vte::peg::FencedCodeBlock> &p_codeBlocks) {\n  Q_UNUSED(p_timeStamp);\n  if (!m_inplacePreviewCodeBlocksEnabled) {\n    return;\n  }\n\n  m_pendingCodeBlocks = p_codeBlocks;\n  m_codeBlockTimer->start();\n}\n\nvoid PreviewHelper::handleCodeBlocksUpdate() {\n  ++m_codeBlockTimeStamp;\n  m_codeBlocksData.clear();\n\n  QVector<int> needPreviewBlocks;\n\n  for (int i = 0; i < m_pendingCodeBlocks.size(); ++i) {\n    const auto &cb = m_pendingCodeBlocks[i];\n\n    const auto needPreview = isLangNeedPreview(cb.m_lang);\n    if (!needPreview.first && !needPreview.second) {\n      continue;\n    }\n\n    m_codeBlocksData.append(CodeBlockPreviewData(cb));\n    const int blockPreviewIdx = m_codeBlocksData.size() - 1;\n\n    bool cacheHit = false;\n    auto &cachedData = m_codeBlockCache.get(cb.m_text);\n    if (cachedData) {\n      cacheHit = true;\n      cachedData->m_timeStamp = m_codeBlockTimeStamp;\n      m_codeBlocksData[blockPreviewIdx].updateInplacePreview(\n          m_document, cachedData->m_image, cachedData->m_name, cachedData->m_background,\n          m_tabStopWidth);\n    }\n\n    if (m_inplacePreviewCodeBlocksEnabled && needPreview.first && !cacheHit) {\n      m_codeBlocksData[blockPreviewIdx].m_text = cb.m_text;\n      needPreviewBlocks.push_back(blockPreviewIdx);\n    }\n  }\n\n  for (auto idx : needPreviewBlocks) {\n    inplacePreviewCodeBlock(idx);\n  }\n\n  updateEditorInplacePreviewCodeBlock();\n\n  m_pendingCodeBlocks.clear();\n}\n\nbool PreviewHelper::checkPreviewSourceLang(SourceFlag p_flag, const QString &p_lang) const {\n  switch (p_flag) {\n  case SourceFlag::FlowChart:\n    return p_lang == QStringLiteral(\"flow\") || p_lang == QStringLiteral(\"flowchart\");\n\n  case SourceFlag::WaveDrom:\n    return p_lang == QStringLiteral(\"wavedrom\");\n\n  case SourceFlag::Mermaid:\n    return p_lang == QStringLiteral(\"mermaid\");\n\n  case SourceFlag::PlantUml:\n    return p_lang == QStringLiteral(\"puml\") || p_lang == QStringLiteral(\"plantuml\");\n\n  case SourceFlag::Graphviz:\n    return p_lang == QStringLiteral(\"dot\") || p_lang == QStringLiteral(\"graphviz\");\n\n  case SourceFlag::Math:\n    return p_lang == QStringLiteral(\"mathjax\");\n  }\n\n  return false;\n}\n\nQPair<bool, bool> PreviewHelper::isLangNeedPreview(const QString &p_lang) const {\n  QPair<bool, bool> res(false, false);\n  if ((isInplacePreviewSourceEnabled(SourceFlag::FlowChart) &&\n       checkPreviewSourceLang(SourceFlag::FlowChart, p_lang)) ||\n      (isInplacePreviewSourceEnabled(SourceFlag::WaveDrom) &&\n       checkPreviewSourceLang(SourceFlag::WaveDrom, p_lang)) ||\n      (isInplacePreviewSourceEnabled(SourceFlag::Mermaid) &&\n       checkPreviewSourceLang(SourceFlag::Mermaid, p_lang)) ||\n      (isInplacePreviewSourceEnabled(SourceFlag::PlantUml) &&\n       checkPreviewSourceLang(SourceFlag::PlantUml, p_lang)) ||\n      (isInplacePreviewSourceEnabled(SourceFlag::Graphviz) &&\n       checkPreviewSourceLang(SourceFlag::Graphviz, p_lang)) ||\n      (isInplacePreviewSourceEnabled(SourceFlag::Math) &&\n       checkPreviewSourceLang(SourceFlag::Math, p_lang))) {\n    res.first = res.second = true;\n  }\n  return res;\n}\n\nbool PreviewHelper::isInplacePreviewSourceEnabled(SourceFlag p_flag) const {\n  return m_inplacePreviewSources & p_flag;\n}\n\nvoid PreviewHelper::inplacePreviewCodeBlock(int p_blockPreviewIdx) {\n  const auto &blockData = m_codeBlocksData[p_blockPreviewIdx];\n  Q_ASSERT(!blockData.m_text.isEmpty());\n  if (checkPreviewSourceLang(SourceFlag::FlowChart, blockData.m_lang) ||\n      checkPreviewSourceLang(SourceFlag::WaveDrom, blockData.m_lang) ||\n      checkPreviewSourceLang(SourceFlag::Mermaid, blockData.m_lang) ||\n      (checkPreviewSourceLang(SourceFlag::PlantUml, blockData.m_lang) && m_webPlantUmlEnabled) ||\n      (checkPreviewSourceLang(SourceFlag::Graphviz, blockData.m_lang) && m_webGraphvizEnabled) ||\n      checkPreviewSourceLang(SourceFlag::Math, blockData.m_lang)) {\n    emit graphPreviewRequested(p_blockPreviewIdx, m_codeBlockTimeStamp, blockData.m_lang,\n                               vte::TextUtils::removeCodeBlockFence(blockData.m_text));\n    return;\n  }\n\n  if (!m_webPlantUmlEnabled && checkPreviewSourceLang(SourceFlag::PlantUml, blockData.m_lang)) {\n    // Local PlantUml.\n    PlantUmlHelper::getInst().process(\n        static_cast<quint64>(p_blockPreviewIdx), m_codeBlockTimeStamp, QStringLiteral(\"svg\"),\n        vte::TextUtils::removeCodeBlockFence(blockData.m_text), this,\n        [this](quint64 id, TimeStamp timeStamp, const QString &format, const QString &data) {\n          handleLocalData(id, timeStamp, format, data, true);\n        });\n    return;\n  }\n\n  if (!m_webGraphvizEnabled && checkPreviewSourceLang(SourceFlag::Graphviz, blockData.m_lang)) {\n    // Local PlantUml.\n    GraphvizHelper::getInst().process(\n        static_cast<quint64>(p_blockPreviewIdx), m_codeBlockTimeStamp, QStringLiteral(\"svg\"),\n        vte::TextUtils::removeCodeBlockFence(blockData.m_text), this,\n        [this](quint64 id, TimeStamp timeStamp, const QString &format, const QString &data) {\n          handleLocalData(id, timeStamp, format, data, false);\n        });\n    return;\n  }\n}\n\nvoid PreviewHelper::handleGraphPreviewData(const MarkdownViewerAdapter::PreviewData &p_data) {\n  if (p_data.m_timeStamp != m_codeBlockTimeStamp) {\n    return;\n  }\n  if (p_data.m_id >= static_cast<quint64>(m_codeBlocksData.size()) || p_data.m_data.isEmpty()) {\n    updateEditorInplacePreviewCodeBlock();\n    return;\n  }\n\n  auto &blockData = m_codeBlocksData[p_data.m_id];\n  const bool forcedBackground = needForcedBackground(blockData.m_lang);\n  auto previewData = QSharedPointer<GraphPreviewData>::create(\n      p_data.m_timeStamp, p_data.m_format, p_data.m_data,\n      forcedBackground ? m_editor->getPreviewBackground() : 0,\n      p_data.m_needScale ? getEditorScaleFactor() : 1);\n  m_codeBlockCache.set(blockData.m_text, previewData);\n  blockData.m_text.clear();\n\n  blockData.updateInplacePreview(m_document, previewData->m_image, previewData->m_name,\n                                 previewData->m_background, m_tabStopWidth);\n\n  updateEditorInplacePreviewCodeBlock();\n}\n\nvoid PreviewHelper::updateEditorInplacePreviewCodeBlock() {\n  QSet<int> obsoleteBlocks;\n  QVector<QSharedPointer<vte::PreviewItem>> previewItems;\n  previewItems.reserve(m_codeBlocksData.size());\n  for (const auto &blockData : m_codeBlocksData) {\n    if (blockData.m_inplacePreview) {\n      if (!blockData.m_inplacePreview->m_image.isNull()) {\n        previewItems.append(blockData.m_inplacePreview);\n      } else {\n        obsoleteBlocks.insert(blockData.m_inplacePreview->m_blockNumber);\n      }\n    } else {\n      obsoleteBlocks.insert(blockData.m_endBlock);\n    }\n  }\n\n  if (previewItems.isEmpty() && m_previousInplacePreviewCodeBlockSize == 0) {\n    return;\n  }\n\n  emit inplacePreviewCodeBlockUpdated(previewItems);\n\n  m_previousInplacePreviewCodeBlockSize = previewItems.size();\n\n  if (!obsoleteBlocks.isEmpty()) {\n    emit potentialObsoletePreviewBlocksUpdated(obsoleteBlocks.values());\n  }\n\n  m_codeBlockCache.setCapacityHint(m_codeBlocksData.size());\n}\n\nvoid PreviewHelper::setMarkdownEditor(MarkdownEditor *p_editor) {\n  Q_ASSERT(!m_editor);\n  m_editor = p_editor;\n  if (m_editor) {\n    m_document = m_editor->document();\n    m_tabStopWidth = m_editor->getConfig().m_tabStopWidth;\n  }\n}\n\nvoid PreviewHelper::mathBlocksUpdated(const QVector<vte::peg::MathBlock> &p_mathBlocks) {\n  if (!m_inplacePreviewMathBlocksEnabled || !isInplacePreviewSourceEnabled(SourceFlag::Math)) {\n    return;\n  }\n\n  m_pendingMathBlocks = p_mathBlocks;\n  m_mathBlockTimer->start();\n}\n\nvoid PreviewHelper::handleMathBlocksUpdate() {\n  ++m_mathBlockTimeStamp;\n  m_mathBlocksData.clear();\n  m_mathBlocksData.reserve(m_pendingMathBlocks.size());\n\n  bool needUpdateEditorInplacePreview = true;\n\n  for (const auto &mb : m_pendingMathBlocks) {\n    m_mathBlocksData.append(MathBlockPreviewData(mb));\n    const int blockPreviewIdx = m_mathBlocksData.size() - 1;\n\n    bool cacheHit = false;\n    auto &cachedData = m_mathBlockCache.get(mb.m_text);\n    if (cachedData) {\n      cacheHit = true;\n      cachedData->m_timeStamp = m_mathBlockTimeStamp;\n      m_mathBlocksData[blockPreviewIdx].updateInplacePreview(m_document, cachedData->m_image,\n                                                             cachedData->m_name, m_tabStopWidth);\n    }\n\n    if (!cacheHit) {\n      needUpdateEditorInplacePreview = false;\n      m_mathBlocksData[blockPreviewIdx].m_text = mb.m_text;\n      inplacePreviewMathBlock(blockPreviewIdx);\n    }\n  }\n\n  if (needUpdateEditorInplacePreview) {\n    updateEditorInplacePreviewMathBlock();\n  }\n\n  m_pendingMathBlocks.clear();\n}\n\nvoid PreviewHelper::inplacePreviewMathBlock(int p_blockPreviewIdx) {\n  const auto &blockData = m_mathBlocksData[p_blockPreviewIdx];\n  Q_ASSERT(!blockData.m_text.isEmpty());\n  emit mathPreviewRequested(p_blockPreviewIdx, m_mathBlockTimeStamp, blockData.m_text);\n}\n\nvoid PreviewHelper::updateEditorInplacePreviewMathBlock() {\n  QSet<int> obsoleteBlocks;\n  QVector<QSharedPointer<vte::PreviewItem>> previewItems;\n  previewItems.reserve(m_mathBlocksData.size());\n  for (const auto &blockData : m_mathBlocksData) {\n    if (blockData.m_inplacePreview) {\n      if (!blockData.m_inplacePreview->m_image.isNull()) {\n        previewItems.append(blockData.m_inplacePreview);\n      } else {\n        obsoleteBlocks.insert(blockData.m_inplacePreview->m_blockNumber);\n      }\n    } else {\n      obsoleteBlocks.insert(blockData.m_blockNumber);\n    }\n  }\n\n  if (previewItems.isEmpty() && m_previousInplacePreviewMathBlockSize == 0) {\n    return;\n  }\n\n  emit inplacePreviewMathBlockUpdated(previewItems);\n\n  m_previousInplacePreviewMathBlockSize = previewItems.size();\n\n  if (!obsoleteBlocks.isEmpty()) {\n    emit potentialObsoletePreviewBlocksUpdated(obsoleteBlocks.values());\n  }\n\n  m_mathBlockCache.setCapacityHint(m_mathBlocksData.size());\n}\n\nvoid PreviewHelper::handleMathPreviewData(const MarkdownViewerAdapter::PreviewData &p_data) {\n  if (p_data.m_timeStamp != m_mathBlockTimeStamp) {\n    return;\n  }\n  if (p_data.m_id >= static_cast<quint64>(m_mathBlocksData.size()) || p_data.m_data.isEmpty()) {\n    updateEditorInplacePreviewMathBlock();\n    return;\n  }\n\n  auto &blockData = m_mathBlocksData[p_data.m_id];\n  auto previewData =\n      QSharedPointer<GraphPreviewData>::create(p_data.m_timeStamp, p_data.m_format, p_data.m_data,\n                                               0, p_data.m_needScale ? getEditorScaleFactor() : 1);\n  m_mathBlockCache.set(blockData.m_text, previewData);\n  blockData.m_text.clear();\n\n  blockData.updateInplacePreview(m_document, previewData->m_image, previewData->m_name,\n                                 m_tabStopWidth);\n\n  updateEditorInplacePreviewMathBlock();\n}\n\nqreal PreviewHelper::getEditorScaleFactor() const {\n  if (m_editor) {\n    return m_editor->getConfig().m_scaleFactor;\n  }\n\n  return 1;\n}\n\nvoid PreviewHelper::setWebPlantUmlEnabled(bool p_enabled) { m_webPlantUmlEnabled = p_enabled; }\n\nvoid PreviewHelper::setWebGraphvizEnabled(bool p_enabled) { m_webGraphvizEnabled = p_enabled; }\n\nvoid PreviewHelper::handleLocalData(quint64 p_id, TimeStamp p_timeStamp, const QString &p_format,\n                                    const QString &p_data, bool p_forcedBackground) {\n  if (p_timeStamp != m_codeBlockTimeStamp) {\n    return;\n  }\n\n  Q_UNUSED(p_format);\n  Q_ASSERT(p_format == QStringLiteral(\"svg\"));\n\n  if (p_id >= static_cast<quint64>(m_codeBlocksData.size()) || p_data.isEmpty()) {\n    updateEditorInplacePreviewCodeBlock();\n    return;\n  }\n\n  auto &blockData = m_codeBlocksData[p_id];\n  auto previewData = QSharedPointer<GraphPreviewData>::create(\n      p_timeStamp, p_format, p_data.toUtf8(),\n      p_forcedBackground ? m_editor->getPreviewBackground() : 0, getEditorScaleFactor());\n  m_codeBlockCache.set(blockData.m_text, previewData);\n  blockData.m_text.clear();\n\n  blockData.updateInplacePreview(m_document, previewData->m_image, previewData->m_name,\n                                 previewData->m_background, m_tabStopWidth);\n\n  updateEditorInplacePreviewCodeBlock();\n}\n\nbool PreviewHelper::needForcedBackground(const QString &p_lang) const {\n  if (checkPreviewSourceLang(SourceFlag::PlantUml, p_lang)) {\n    return true;\n  }\n\n  return false;\n}\n\nvoid PreviewHelper::setInplacePreviewSources(SourceFlags p_srcs) {\n  m_inplacePreviewSources = p_srcs;\n}\n\nvoid PreviewHelper::setInplacePreviewCodeBlocksEnabled(bool p_enabled) {\n  m_inplacePreviewCodeBlocksEnabled = p_enabled;\n}\n\nvoid PreviewHelper::setInplacePreviewMathBlocksEnabled(bool p_enabled) {\n  m_inplacePreviewMathBlocksEnabled = p_enabled;\n}\n"
  },
  {
    "path": "src/widgets/editors/previewhelper.h",
    "content": "#ifndef PREVIEWHELPER_H\n#define PREVIEWHELPER_H\n\n#include <QObject>\n#include <QPixmap>\n\n#include <vtextedit/global.h>\n#include <vtextedit/lrucache.h>\n#include <vtextedit/pegmarkdownhighlighterdata.h>\n#include <vtextedit/previewmgr.h>\n\n#include \"markdownvieweradapter.h\"\n#include <core/global.h>\n\nclass QTimer;\nclass QTextDocument;\n\nnamespace vnotex {\nclass MarkdownEditor;\n\n// Helper to manage in-place preview and focus preview.\nclass PreviewHelper : public QObject {\n  Q_OBJECT\npublic:\n  enum SourceFlag {\n    FlowChart = 0x1,\n    Mermaid = 0x2,\n    WaveDrom = 0x4,\n    PlantUml = 0x8,\n    Graphviz = 0x10,\n    Math = 0x20\n  };\n  Q_DECLARE_FLAGS(SourceFlags, SourceFlag);\n\n  PreviewHelper(MarkdownEditor *p_editor, QObject *p_parent = nullptr);\n\n  void setMarkdownEditor(MarkdownEditor *p_editor);\n\n  void setWebPlantUmlEnabled(bool p_enabled);\n\n  void setWebGraphvizEnabled(bool p_enabled);\n\n  void setInplacePreviewSources(SourceFlags p_srcs);\n\n  void setInplacePreviewCodeBlocksEnabled(bool p_enabled);\n\n  void setInplacePreviewMathBlocksEnabled(bool p_enabled);\n\npublic slots:\n  void codeBlocksUpdated(vte::TimeStamp p_timeStamp,\n                         const QVector<vte::peg::FencedCodeBlock> &p_codeBlocks);\n\n  void mathBlocksUpdated(const QVector<vte::peg::MathBlock> &p_mathBlocks);\n\n  void handleGraphPreviewData(const MarkdownViewerAdapter::PreviewData &p_data);\n\n  void handleMathPreviewData(const MarkdownViewerAdapter::PreviewData &p_data);\n\nsignals:\n  // Request to preview graph.\n  // There must be a corresponding call to handleGraphPreviewData().\n  void graphPreviewRequested(quint64 p_id, TimeStamp p_timeStamp, const QString &p_lang,\n                             const QString &p_text);\n\n  // Request to preview math.\n  // There must be a corresponding call to handleMathPreviewData().\n  void mathPreviewRequested(quint64 p_id, TimeStamp p_timeStamp, const QString &p_text);\n\n  // Request to do in-place preview for @p_previewItems.\n  void\n  inplacePreviewCodeBlockUpdated(const QVector<QSharedPointer<vte::PreviewItem>> &p_previewItems);\n\n  // Request to do in-place preview for @p_previewItems.\n  void\n  inplacePreviewMathBlockUpdated(const QVector<QSharedPointer<vte::PreviewItem>> &p_previewItems);\n\n  void potentialObsoletePreviewBlocksUpdated(const QList<int> &p_blocks);\n\nprivate:\n  // Preview data of each related code block.\n  struct CodeBlockPreviewData {\n    CodeBlockPreviewData() = default;\n\n    CodeBlockPreviewData(const vte::peg::FencedCodeBlock &p_codeBlock);\n\n    void updateInplacePreview(QTextDocument *p_doc, const QPixmap &p_image,\n                              const QString &p_imageName, QRgb p_background, int p_tabStopWidth);\n\n    // Start and end block of the fenced code block.\n    int m_startBlock = 0;\n    int m_endBlock = 0;\n\n    QString m_lang;\n\n    // Including the fence text.\n    // Will be filled only when preview is needed.\n    QString m_text;\n\n    QSharedPointer<vte::PreviewItem> m_inplacePreview;\n  };\n\n  struct MathBlockPreviewData {\n    MathBlockPreviewData() = default;\n\n    MathBlockPreviewData(const vte::peg::MathBlock &p_mathBlock);\n\n    void updateInplacePreview(QTextDocument *p_doc, const QPixmap &p_image,\n                              const QString &p_imageName, int p_tabStopWidth);\n\n    // Block number for in-place preview.\n    int m_blockNumber = -1;\n\n    // Whether it should be previewed as block or not.\n    bool m_previewedAsBlock = false;\n\n    // Start index wihtin block with number m_blockNumber, including the start mark.\n    int m_index = -1;\n\n    // Length of this math in block with number m_blockNumber, including the end mark.\n    int m_length = -1;\n\n    // Including the guarding marks.\n    // Will be filled only when preview is needed.\n    QString m_text;\n\n    QSharedPointer<vte::PreviewItem> m_inplacePreview;\n  };\n\n  // Data of the preview result.\n  struct GraphPreviewData {\n    GraphPreviewData() = default;\n\n    GraphPreviewData(TimeStamp p_timeStamp, const QString &p_format, const QByteArray &p_data,\n                     QRgb p_background = 0x0, qreal p_scaleFactor = 1);\n\n    bool isNull() const;\n\n    TimeStamp m_timeStamp = 0;\n\n    QPixmap m_image;\n\n    // Name of the image for identification in resource manager.\n    QString m_name;\n\n    // Background color to override.\n    // 0x0 indicates it is not specified.\n    QRgb m_background = 0x0;\n\n    // An increasing index to used as the image name.\n    static int s_imageIndex;\n  };\n\n  // Return <InplacePreview, FocusPreview>.\n  QPair<bool, bool> isLangNeedPreview(const QString &p_lang) const;\n\n  bool isInplacePreviewSourceEnabled(SourceFlag p_flag) const;\n\n  bool checkPreviewSourceLang(SourceFlag p_flag, const QString &p_lang) const;\n\n  // Inplace preview code block m_codeBlocksData[@p_blockPreviewIdx].\n  void inplacePreviewCodeBlock(int p_blockPreviewIdx);\n\n  void inplacePreviewMathBlock(int p_blockPreviewIdx);\n\n  void updateEditorInplacePreviewCodeBlock();\n\n  void updateEditorInplacePreviewMathBlock();\n\n  void handleLocalData(quint64 p_id, TimeStamp p_timeStamp, const QString &p_format,\n                       const QString &p_data, bool p_forcedBackground);\n\n  qreal getEditorScaleFactor() const;\n\n  bool needForcedBackground(const QString &p_lang) const;\n\n  void handleCodeBlocksUpdate();\n\n  void handleMathBlocksUpdate();\n\n  MarkdownEditor *m_editor = nullptr;\n\n  QTextDocument *m_document = nullptr;\n\n  // Need to init it in the constructor.\n  SourceFlags m_inplacePreviewSources;\n\n  bool m_inplacePreviewCodeBlocksEnabled = true;\n\n  bool m_inplacePreviewMathBlocksEnabled = true;\n\n  TimeStamp m_codeBlockTimeStamp = 0;\n\n  TimeStamp m_mathBlockTimeStamp = 0;\n\n  // Sorted by startBlock in ascending order.\n  QVector<CodeBlockPreviewData> m_codeBlocksData;\n\n  QVector<MathBlockPreviewData> m_mathBlocksData;\n\n  // Tab stop width of the editor, used for block margin calculation.\n  int m_tabStopWidth = 4;\n\n  // To record the size of previous inplace preview of code block.\n  int m_previousInplacePreviewCodeBlockSize = 0;\n\n  // To record the size of previous inplace preview of math block.\n  int m_previousInplacePreviewMathBlockSize = 0;\n\n  // {text} -> GraphPreviewData.\n  vte::LruCache<QString, QSharedPointer<GraphPreviewData>> m_codeBlockCache;\n\n  vte::LruCache<QString, QSharedPointer<GraphPreviewData>> m_mathBlockCache;\n\n  bool m_webPlantUmlEnabled = true;\n\n  bool m_webGraphvizEnabled = true;\n\n  QVector<vte::peg::FencedCodeBlock> m_pendingCodeBlocks;\n\n  QTimer *m_codeBlockTimer = nullptr;\n\n  QVector<vte::peg::MathBlock> m_pendingMathBlocks;\n\n  QTimer *m_mathBlockTimer = nullptr;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::PreviewHelper::SourceFlags)\n\n#endif // PREVIEWHELPER_H\n"
  },
  {
    "path": "src/widgets/editors/statuswidget.cpp",
    "content": "#include \"statuswidget.h\"\n\n#include <QDebug>\n#include <QLabel>\n#include <QStackedLayout>\n#include <QTimer>\n\nusing namespace vnotex;\n\nStatusWidget::StatusWidget(QWidget *p_parent) : QWidget(p_parent) {\n  m_mainLayout = new QStackedLayout(this);\n  m_mainLayout->setContentsMargins(0, 0, 0, 0);\n  m_mainLayout->setSpacing(0);\n\n  m_messageLabel = new QLabel(this);\n  m_messageLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);\n  m_mainLayout->addWidget(m_messageLabel);\n\n  m_messageTimer = new QTimer(this);\n  m_messageTimer->setSingleShot(true);\n  connect(m_messageTimer, &QTimer::timeout, this, &StatusWidget::clearMessage);\n}\n\nStatusWidget::~StatusWidget() {\n  if (m_editorWidget) {\n    m_editorWidget->setParent(nullptr);\n  }\n}\n\nvoid StatusWidget::showMessage(const QString &p_msg, int p_milliseconds) {\n  if (p_msg.isEmpty()) {\n    clearMessage();\n    return;\n  }\n\n  m_messageLabel->setText(p_msg);\n  m_mainLayout->setCurrentWidget(m_messageLabel);\n\n  if (p_milliseconds > 0) {\n    m_messageTimer->start(p_milliseconds);\n  }\n}\n\nvoid StatusWidget::setEditorStatusWidget(const QSharedPointer<QWidget> &p_editorWidget) {\n  Q_ASSERT(!m_editorWidget);\n  m_editorWidget = p_editorWidget;\n  m_mainLayout->addWidget(m_editorWidget.data());\n  m_mainLayout->setCurrentWidget(m_editorWidget.data());\n}\n\nvoid StatusWidget::resizeEvent(QResizeEvent *p_event) {\n  QWidget::resizeEvent(p_event);\n\n  int maxWidth = width() - 10;\n  if (maxWidth <= 0) {\n    maxWidth = width();\n  }\n  m_messageLabel->setMaximumWidth(maxWidth);\n}\n\nvoid StatusWidget::clearMessage() {\n  m_messageLabel->clear();\n  if (m_editorWidget) {\n    m_mainLayout->setCurrentWidget(m_editorWidget.data());\n  }\n}\n"
  },
  {
    "path": "src/widgets/editors/statuswidget.h",
    "content": "#ifndef STATUSWIDGET_H\n#define STATUSWIDGET_H\n\n#include <QSharedPointer>\n#include <QWidget>\n\nclass QLabel;\nclass QTimer;\nclass QStackedLayout;\n\nnamespace vnotex {\n// A status widget wrapper for ViewWindow.\nclass StatusWidget : public QWidget {\n  Q_OBJECT\npublic:\n  explicit StatusWidget(QWidget *p_parent = nullptr);\n\n  ~StatusWidget();\n\n  void showMessage(const QString &p_msg, int p_milliseconds = 3000);\n\n  void setEditorStatusWidget(const QSharedPointer<QWidget> &p_editorWidget);\n\nprotected:\n  void resizeEvent(QResizeEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void clearMessage();\n\n  QStackedLayout *m_mainLayout = nullptr;\n\n  QLabel *m_messageLabel = nullptr;\n\n  QTimer *m_messageTimer = nullptr;\n\n  // Use shared pointer here to hold the widget.\n  // Should detach the widget in destructor.\n  QSharedPointer<QWidget> m_editorWidget;\n};\n} // namespace vnotex\n\n#endif // STATUSWIDGET_H\n"
  },
  {
    "path": "src/widgets/editors/texteditor.cpp",
    "content": "#include \"texteditor.h\"\n\n#include <QContextMenuEvent>\n#include <QMenu>\n\n#include <vtextedit/texteditorconfig.h>\n#include <vtextedit/vtextedit.h>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nTextEditor::TextEditor(const QSharedPointer<vte::TextEditorConfig> &p_config,\n                       const QSharedPointer<vte::TextEditorParameters> &p_paras, QWidget *p_parent)\n    : vte::VTextEditor(p_config, p_paras, p_parent) {\n  connect(m_textEdit, &vte::VTextEdit::contextMenuEventRequested, this,\n          &TextEditor::handleContextMenuEvent);\n}\n\nvoid TextEditor::handleContextMenuEvent(QContextMenuEvent *p_event, bool *p_handled,\n                                        QScopedPointer<QMenu> *p_menu) {\n  *p_handled = true;\n  p_menu->reset(m_textEdit->createStandardContextMenu(p_event->pos()));\n  auto menu = p_menu->data();\n\n  {\n    menu->addSeparator();\n\n    auto snippetAct =\n        menu->addAction(tr(\"Insert Snippet\"), this, &TextEditor::applySnippetRequested);\n    WidgetUtils::addActionShortcutText(\n        snippetAct,\n        ConfigMgr::getInst().getEditorConfig().getShortcut(EditorConfig::Shortcut::ApplySnippet));\n  }\n\n  appendSpellCheckMenu(p_event, menu);\n}\n"
  },
  {
    "path": "src/widgets/editors/texteditor.h",
    "content": "#ifndef TEXTEDITOR_H\n#define TEXTEDITOR_H\n\n#include <vtextedit/vtexteditor.h>\n\nnamespace vnotex {\nclass TextEditor : public vte::VTextEditor {\n  Q_OBJECT\npublic:\n  TextEditor(const QSharedPointer<vte::TextEditorConfig> &p_config,\n             const QSharedPointer<vte::TextEditorParameters> &p_paras, QWidget *p_parent = nullptr);\n\nsignals:\n  void applySnippetRequested();\n\nprivate slots:\n  void handleContextMenuEvent(QContextMenuEvent *p_event, bool *p_handled,\n                              QScopedPointer<QMenu> *p_menu);\n};\n} // namespace vnotex\n\n#endif // TEXTEDITOR_H\n"
  },
  {
    "path": "src/widgets/editors/webviewadapter.cpp",
    "content": "#include \"webviewadapter.h\"\n\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nQJsonObject WebViewAdapter::FindOption::toJson() const {\n  QJsonObject obj;\n  obj[\"findBackward\"] = m_findBackward;\n  obj[\"caseSensitive\"] = m_caseSensitive;\n  obj[\"wholeWordOnly\"] = m_wholeWordOnly;\n  obj[\"regularExpression\"] = m_regularExpression;\n  return obj;\n}\n\nWebViewAdapter::WebViewAdapter(QObject *p_parent) : QObject(p_parent) {}\n\nvoid WebViewAdapter::setReady(bool p_ready) {\n  if (m_ready == p_ready) {\n    return;\n  }\n\n  m_ready = p_ready;\n  if (m_ready) {\n    for (auto &act : m_pendingActions) {\n      act();\n    }\n    m_pendingActions.clear();\n    emit ready();\n  } else {\n    m_pendingActions.clear();\n  }\n}\n\nvoid WebViewAdapter::pendAction(const std::function<void()> &p_func) {\n  Q_ASSERT(!m_ready);\n  m_pendingActions.append(p_func);\n}\n\nbool WebViewAdapter::isReady() const { return m_ready; }\n\nvoid WebViewAdapter::invokeCallback(quint64 p_id, void *p_data) {\n  m_callbackPool.call(p_id, p_data);\n}\n\nquint64 WebViewAdapter::addCallback(const CallbackPool::Callback &p_callback) {\n  return m_callbackPool.add(p_callback);\n}\n\nvoid WebViewAdapter::findText(const QStringList &p_texts, FindOptions p_options,\n                              int p_currentMatchLine) {\n  FindOption opts;\n  if (p_options & vnotex::FindOption::FindBackward) {\n    opts.m_findBackward = true;\n  }\n  if (p_options & vnotex::FindOption::CaseSensitive) {\n    opts.m_caseSensitive = true;\n  }\n  if (p_options & vnotex::FindOption::WholeWordOnly) {\n    opts.m_wholeWordOnly = true;\n  }\n  if (p_options & vnotex::FindOption::RegularExpression) {\n    opts.m_regularExpression = true;\n  }\n\n  if (isReady()) {\n    emit findTextRequested(p_texts, opts.toJson(), p_currentMatchLine);\n  } else {\n    pendAction([this, p_texts, opts, p_currentMatchLine]() {\n      // FIXME: highlights will be clear once the page is ready. Add a delay here.\n      Utils::sleepWait(1000);\n      emit findTextRequested(p_texts, opts.toJson(), p_currentMatchLine);\n    });\n  }\n}\n\nvoid WebViewAdapter::setFindText(const QStringList &p_texts, int p_totalMatches,\n                                 int p_currentMatchIndex) {\n  emit findTextReady(p_texts, p_totalMatches, p_currentMatchIndex);\n}\n"
  },
  {
    "path": "src/widgets/editors/webviewadapter.h",
    "content": "#ifndef WEBVIEWADAPTER_H\n#define WEBVIEWADAPTER_H\n\n#include <QObject>\n\n#include <QVector>\n\n#include <core/global.h>\n#include <utils/callbackpool.h>\n\nnamespace vnotex {\n// Base class of adapter and interface between CPP and JS for WebView.\nclass WebViewAdapter : public QObject {\n  Q_OBJECT\npublic:\n  explicit WebViewAdapter(QObject *p_parent = nullptr);\n\n  bool isReady() const;\n\n  void findText(const QStringList &p_texts, FindOptions p_options, int p_currentMatchLine = -1);\n\n  // Functions to be called from web side.\npublic slots:\n  void setReady(bool p_ready);\n\n  void setFindText(const QStringList &p_texts, int p_totalMatches, int p_currentMatchIndex);\n\n  // Signals to be connected at cpp side.\nsignals:\n  void ready();\n\n  void findTextReady(const QStringList &p_texts, int p_totalMatches, int p_currentMatchIndex);\n\n  // Signals to be connected at web side.\nsignals:\n  void findTextRequested(const QStringList &p_texts, const QJsonObject &p_options,\n                         int p_currentMatchLine);\n\nprotected:\n  void pendAction(const std::function<void()> &p_func);\n\n  void invokeCallback(quint64 p_id, void *p_data);\n\n  quint64 addCallback(const CallbackPool::Callback &p_callback);\n\nprivate:\n  struct FindOption {\n    QJsonObject toJson() const;\n\n    bool m_findBackward = false;\n\n    bool m_caseSensitive = false;\n\n    bool m_wholeWordOnly = false;\n\n    bool m_regularExpression = false;\n  };\n\n  // Whether web side is ready.\n  bool m_ready = false;\n\n  // Pending actions for the editor once it is ready.\n  QVector<std::function<void()>> m_pendingActions;\n\n  CallbackPool m_callbackPool;\n};\n} // namespace vnotex\n\n#endif // WEBVIEWADAPTER_H\n"
  },
  {
    "path": "src/widgets/editreaddiscardaction.cpp",
    "content": "#include \"editreaddiscardaction.h\"\n\n#include <QDebug>\n#include <QMenu>\n\n#include \"widgetsfactory.h\"\n\nusing namespace vnotex;\n\nEditReadDiscardAction::EditReadDiscardAction(const QIcon &p_editIcon, const QString &p_editText,\n                                             const QIcon &p_readIcon, const QString &p_readText,\n                                             const QIcon &p_discardIcon,\n                                             const QString &p_discardText, QObject *p_parent)\n    : BiAction(p_editIcon, p_editText, p_readIcon, p_readText, p_parent) {\n  m_readMenu.reset(WidgetsFactory::createMenu(nullptr));\n  m_discardAct = m_readMenu->addAction(p_discardIcon, p_discardText, m_readMenu.data(),\n                                       [this]() { emit triggered(Action::Discard); });\n  setStateMenu(State::Alternative, m_readMenu.data());\n\n  connect(this, &BiAction::triggered, this, [this]() {\n    switch (previousState()) {\n    case State::Default:\n      emit triggered(Action::Edit);\n      break;\n\n    case State::Alternative:\n      emit triggered(Action::Read);\n      break;\n\n    default:\n      Q_ASSERT(false);\n      break;\n    }\n  });\n}\n\nEditReadDiscardAction::~EditReadDiscardAction() {}\n\nQAction *EditReadDiscardAction::getDiscardAction() const { return m_discardAct; }\n"
  },
  {
    "path": "src/widgets/editreaddiscardaction.h",
    "content": "#ifndef EDITREADDISCARDACTION_H\n#define EDITREADDISCARDACTION_H\n\n#include \"biaction.h\"\n\n#include <QScopedPointer>\n\nnamespace vnotex {\nclass EditReadDiscardAction : public BiAction {\n  Q_OBJECT\npublic:\n  enum Action { Edit, Read, Discard };\n\n  EditReadDiscardAction(const QIcon &p_editIcon, const QString &p_editText, const QIcon &p_readIcon,\n                        const QString &p_readText, const QIcon &p_discardIcon,\n                        const QString &p_discardText, QObject *p_parent = nullptr);\n\n  ~EditReadDiscardAction();\n\n  QAction *getDiscardAction() const;\n\nsignals:\n  void triggered(Action p_act);\n\nprivate:\n  QScopedPointer<QMenu> m_readMenu;\n\n  QAction *m_discardAct = nullptr;\n};\n} // namespace vnotex\n\n#endif // EDITREADDISCARDACTION_H\n"
  },
  {
    "path": "src/widgets/filesystemviewer.cpp",
    "content": "#include \"filesystemviewer.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QFileSystemModel>\n#include <QMenu>\n#include <QSharedPointer>\n#include <QVBoxLayout>\n\n#include \"dialogs/filepropertiesdialog.h\"\n#include \"treeview.h\"\n#include \"widgetsfactory.h\"\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/clipboardutils.h>\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nFileSystemViewer::FileSystemViewer(QWidget *p_parent) : QWidget(p_parent) { setupUI(); }\n\nvoid FileSystemViewer::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  auto fileModel = new QFileSystemModel(this);\n\n  m_viewer = new TreeView(this);\n  m_viewer->setModel(fileModel);\n  m_viewer->setSelectionMode(QAbstractItemView::ExtendedSelection);\n  m_viewer->setHeaderHidden(true);\n  // Show only the Name column.\n  for (int i = 1; i < fileModel->columnCount(); ++i) {\n    m_viewer->hideColumn(i);\n  }\n\n  if (m_contextMenuEnabled) {\n    m_viewer->setContextMenuPolicy(Qt::CustomContextMenu);\n    connect(m_viewer, &QTreeView::customContextMenuRequested, this,\n            &FileSystemViewer::handleContextMenuRequested);\n  }\n\n  connect(m_viewer, &QTreeView::activated, this, [this](const QModelIndex &p_index) {\n    if (!this->fileModel()->isDir(p_index)) {\n      QStringList files;\n      files << this->fileModel()->filePath(p_index);\n      emit openFiles(files);\n    }\n  });\n  connect(m_viewer->selectionModel(), &QItemSelectionModel::selectionChanged, this,\n          &FileSystemViewer::selectionChanged);\n\n  auto index = fileModel->setRootPath(QDir::homePath());\n  m_viewer->setRootIndex(index);\n\n  mainLayout->addWidget(m_viewer);\n\n  setFocusProxy(m_viewer);\n\n  connect(m_viewer, &QTreeView::expanded, this, &FileSystemViewer::resizeTreeToContents);\n  connect(m_viewer, &QTreeView::collapsed, this, &FileSystemViewer::resizeTreeToContents);\n  connect(fileModel, &QFileSystemModel::directoryLoaded, this,\n          &FileSystemViewer::resizeTreeToContents);\n}\n\nvoid FileSystemViewer::resizeTreeToContents() { m_viewer->resizeColumnToContents(0); }\n\nQFileSystemModel *FileSystemViewer::fileModel() const {\n  return static_cast<QFileSystemModel *>(m_viewer->model());\n}\n\nint FileSystemViewer::selectedCount() const {\n  return m_viewer->selectionModel()->selectedRows().size();\n}\n\nQModelIndex FileSystemViewer::getSelectedIndex() const {\n  const auto modelIndexList = m_viewer->selectionModel()->selectedRows();\n  return modelIndexList.size() == 1 ? modelIndexList[0] : QModelIndex();\n}\n\nvoid FileSystemViewer::setRootPath(const QString &p_rootPath) {\n  auto model = fileModel();\n  auto index = model->setRootPath(p_rootPath);\n  if (!index.isValid()) {\n    qWarning() << \"failed to set root path to\" << p_rootPath;\n    index = model->setRootPath(\"\");\n  }\n\n  m_viewer->setRootIndex(index);\n  resizeTreeToContents();\n}\n\nQString FileSystemViewer::rootPath() const { return fileModel()->rootPath(); }\n\nQStringList FileSystemViewer::getSelectedPaths() const {\n  const auto modelIndexList = m_viewer->selectionModel()->selectedRows();\n  auto model = fileModel();\n  QStringList filePaths;\n  for (const auto &index : modelIndexList) {\n    filePaths << model->filePath(index);\n  }\n\n  return filePaths;\n}\n\nvoid FileSystemViewer::createContextMenuOnItem(QMenu *p_menu) {\n  auto act = createAction(Action::Open, p_menu);\n  p_menu->addAction(act);\n\n  act = createAction(Action::Delete, p_menu);\n  p_menu->addAction(act);\n\n  if (selectedCount() == 1) {\n    act = createAction(Action::CopyPath, p_menu);\n    p_menu->addAction(act);\n\n    act = createAction(Action::Properties, p_menu);\n    p_menu->addAction(act);\n  }\n}\n\nQAction *FileSystemViewer::createAction(Action p_act, QObject *p_parent) {\n  QAction *act = nullptr;\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  switch (p_act) {\n  case Action::Open:\n    act = new QAction(tr(\"&Open\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      auto paths = getSelectedPaths();\n      Q_ASSERT(paths.size() > 0);\n      emit openFiles(paths);\n    });\n    break;\n\n  case Action::Delete:\n    act = new QAction(tr(\"&Delete\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      auto paths = getSelectedPaths();\n      emit removeFiles(paths);\n    });\n    break;\n\n  case Action::Properties:\n    act = new QAction(IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(\"properties.svg\")),\n                      tr(\"&Properties\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      auto paths = getSelectedPaths();\n      Q_ASSERT(paths.size() == 1);\n      FilePropertiesDialog dialog(paths[0], this);\n      int ret = dialog.exec();\n      if (ret) {\n        auto newName = dialog.getFileName();\n        if (newName != PathUtils::fileName(paths[0])) {\n          // Rename.\n          emit renameFile(paths[0], newName);\n        }\n      }\n    });\n    break;\n\n  case Action::CopyPath:\n    act = new QAction(tr(\"Cop&y Path\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      auto paths = getSelectedPaths();\n      Q_ASSERT(paths.size() == 1);\n      ClipboardUtils::setTextToClipboard(paths[0]);\n      VNoteX::getInst().showStatusMessageShort(tr(\"Copied path: %1\").arg(paths[0]));\n    });\n    break;\n  }\n  return act;\n}\n\nvoid FileSystemViewer::scrollToAndSelect(const QStringList &p_paths) {\n  auto selectionModel = m_viewer->selectionModel();\n  selectionModel->clear();\n\n  bool isFirst = true;\n  auto model = fileModel();\n  for (const auto &pa : p_paths) {\n    auto index = model->index(pa);\n    if (index.isValid()) {\n      if (isFirst) {\n        m_viewer->scrollTo(index);\n        isFirst = false;\n      }\n      selectionModel->select(index, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);\n    }\n  }\n}\n\nvoid FileSystemViewer::handleContextMenuRequested(const QPoint &p_pos) {\n  QScopedPointer<QMenu> menu(WidgetsFactory::createMenu());\n\n  auto index = m_viewer->indexAt(p_pos);\n  if (index.isValid()) {\n    auto selectionModel = m_viewer->selectionModel();\n    if (!selectionModel->isSelected(index)) {\n      // Must select entire row since we use selectedRows() to count.\n      selectionModel->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect |\n                                                 QItemSelectionModel::Rows);\n    }\n\n    m_viewer->update();\n\n    createContextMenuOnItem(menu.data());\n  }\n\n  m_viewer->update();\n\n  if (!menu->isEmpty()) {\n    menu->exec(m_viewer->mapToGlobal(p_pos));\n  }\n}\n"
  },
  {
    "path": "src/widgets/filesystemviewer.h",
    "content": "#ifndef FILESYSTEMVIEWER_H\n#define FILESYSTEMVIEWER_H\n\n#include <QModelIndex>\n#include <QWidget>\n\nclass QTreeView;\nclass QFileSystemModel;\nclass QMenu;\n\nnamespace vnotex {\nclass FileSystemViewer : public QWidget {\n  Q_OBJECT\npublic:\n  explicit FileSystemViewer(QWidget *p_parent = nullptr);\n\n  int selectedCount() const;\n\n  void setRootPath(const QString &p_rootPath);\n\n  QString rootPath() const;\n\n  QStringList getSelectedPaths() const;\n\n  void scrollToAndSelect(const QStringList &p_paths);\n\nsignals:\n  void renameFile(const QString &p_path, const QString &p_name);\n\n  // Should detect children relationship.\n  void removeFiles(const QStringList &p_paths);\n\n  void openFiles(const QStringList &p_paths);\n\n  void selectionChanged();\n\nprivate slots:\n  // Resize the first column.\n  void resizeTreeToContents();\n\n  void handleContextMenuRequested(const QPoint &p_pos);\n\nprivate:\n  enum Action { Open, Delete, Properties, CopyPath };\n\n  void setupUI();\n\n  QFileSystemModel *fileModel() const;\n\n  // Valid only when there is only one selected index.\n  QModelIndex getSelectedIndex() const;\n\n  void createContextMenuOnItem(QMenu *p_menu);\n\n  QAction *createAction(Action p_act, QObject *p_parent);\n\n  // Managed by QObject.\n  QTreeView *m_viewer = nullptr;\n\n  bool m_contextMenuEnabled = false;\n};\n} // namespace vnotex\n\n#endif // FILESYSTEMVIEWER_H\n"
  },
  {
    "path": "src/widgets/findandreplacewidget.cpp",
    "content": "#include \"findandreplacewidget.h\"\n\n#include <QAction>\n#include <QCheckBox>\n#include <QGridLayout>\n#include <QHBoxLayout>\n#include <QKeyEvent>\n#include <QLabel>\n#include <QPushButton>\n#include <QTimer>\n#include <QToolButton>\n#include <QVBoxLayout>\n\n#include \"lineedit.h\"\n#include \"propertydefs.h\"\n#include \"widgetsfactory.h\"\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n#include <utils/widgetutils.h>\n#include <widgetconfig.h>\n\nusing namespace vnotex;\n\nFindAndReplaceWidget::FindAndReplaceWidget(QWidget *p_parent) : QWidget(p_parent) {\n  m_findTextTimer = new QTimer(this);\n  m_findTextTimer->setSingleShot(true);\n  m_findTextTimer->setInterval(500);\n  connect(m_findTextTimer, &QTimer::timeout, this,\n          [this]() { emit findTextChanged(getFindText(), getOptions()); });\n\n  setupUI();\n\n  auto options = ConfigMgr::getInst().getWidgetConfig().getFindAndReplaceOptions();\n  setFindOptions(options);\n}\n\nvoid FindAndReplaceWidget::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n\n  // Title.\n  {\n    auto titleLayout = new QHBoxLayout();\n    titleLayout->setContentsMargins(0, 0, 0, 0);\n    mainLayout->addLayout(titleLayout);\n\n    auto label = new QLabel(tr(\"Find And Replace\"), this);\n    titleLayout->addWidget(label);\n\n    const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n    auto iconFile = themeMgr.getIconFile(QStringLiteral(\"close.svg\"));\n    auto closeBtn = new QToolButton(this);\n    closeBtn->setProperty(PropertyDefs::c_actionToolButton, true);\n    titleLayout->addWidget(closeBtn);\n\n    auto closeAct = new QAction(IconUtils::fetchIcon(iconFile), QString(), closeBtn);\n    closeAct->setToolTip(tr(\"Close\"));\n    closeBtn->setDefaultAction(closeAct);\n    connect(closeAct, &QAction::triggered, this, &FindAndReplaceWidget::close);\n  }\n\n  auto gridLayout = new QGridLayout();\n  gridLayout->setContentsMargins(0, 0, 0, 0);\n  mainLayout->addLayout(gridLayout);\n\n  // Find.\n  {\n    auto label = new QLabel(tr(\"Find:\"), this);\n\n    m_findLineEdit = WidgetsFactory::createLineEdit(this);\n    m_findLineEdit->setPlaceholderText(tr(\"Search\"));\n    m_findLineEdit->setClearButtonEnabled(true);\n    connect(m_findLineEdit, &QLineEdit::textChanged, m_findTextTimer,\n            QOverload<>::of(&QTimer::start));\n\n    setFocusProxy(m_findLineEdit);\n\n    const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n    auto findNextBtn = new QPushButton(tr(\"Find &Next\"), this);\n    WidgetUtils::addButtonShortcutText(findNextBtn,\n                                       editorConfig.getShortcut(EditorConfig::FindNext));\n    findNextBtn->setDefault(true);\n    connect(findNextBtn, &QPushButton::clicked, this, &FindAndReplaceWidget::findNext);\n\n    auto findPrevBtn = new QPushButton(tr(\"Find &Previous\"), this);\n    WidgetUtils::addButtonShortcutText(findPrevBtn,\n                                       editorConfig.getShortcut(EditorConfig::FindPrevious));\n    connect(findPrevBtn, &QPushButton::clicked, this, &FindAndReplaceWidget::findPrevious);\n\n    gridLayout->addWidget(label, 0, 0);\n    gridLayout->addWidget(m_findLineEdit, 0, 1);\n    gridLayout->addWidget(findNextBtn, 0, 2);\n    gridLayout->addWidget(findPrevBtn, 0, 3);\n  }\n\n  // Replace.\n  {\n    auto label = new QLabel(tr(\"Replace with:\"), this);\n\n    m_replaceLineEdit = WidgetsFactory::createLineEdit(this);\n    m_replaceLineEdit->setPlaceholderText(tr(\"\\\\1, \\\\2 for back reference in regular expression\"));\n    m_replaceRelatedWidgets.push_back(m_replaceLineEdit);\n\n    auto replaceBtn = new QPushButton(tr(\"Replace\"), this);\n    connect(replaceBtn, &QPushButton::clicked, this, &FindAndReplaceWidget::replace);\n    m_replaceRelatedWidgets.push_back(replaceBtn);\n\n    auto replaceFindBtn = new QPushButton(tr(\"Replace And Find\"), this);\n    connect(replaceFindBtn, &QPushButton::clicked, this, &FindAndReplaceWidget::replaceAndFind);\n    m_replaceRelatedWidgets.push_back(replaceFindBtn);\n\n    auto replaceAllBtn = new QPushButton(tr(\"Replace All\"), this);\n    connect(replaceAllBtn, &QPushButton::clicked, this, &FindAndReplaceWidget::replaceAll);\n    m_replaceRelatedWidgets.push_back(replaceAllBtn);\n\n    gridLayout->addWidget(label, 1, 0);\n    gridLayout->addWidget(m_replaceLineEdit, 1, 1);\n    gridLayout->addWidget(replaceBtn, 1, 2);\n    gridLayout->addWidget(replaceFindBtn, 1, 3);\n    gridLayout->addWidget(replaceAllBtn, 1, 4);\n  }\n\n  // Options.\n  {\n    auto optionLayout = new QHBoxLayout();\n    optionLayout->setContentsMargins(0, 0, 0, 0);\n    gridLayout->addLayout(optionLayout, 2, 1, 1, 4);\n\n    m_caseSensitiveCheckBox = WidgetsFactory::createCheckBox(tr(\"&Case sensitive\"), this);\n    connect(m_caseSensitiveCheckBox, &QCheckBox::stateChanged, this,\n            &FindAndReplaceWidget::updateFindOptions);\n    optionLayout->addWidget(m_caseSensitiveCheckBox);\n\n    m_wholeWordOnlyCheckBox = WidgetsFactory::createCheckBox(tr(\"&Whole word only\"), this);\n    connect(m_wholeWordOnlyCheckBox, &QCheckBox::stateChanged, this,\n            &FindAndReplaceWidget::updateFindOptions);\n    optionLayout->addWidget(m_wholeWordOnlyCheckBox);\n\n    m_regularExpressionCheckBox = WidgetsFactory::createCheckBox(tr(\"Re&gular expression\"), this);\n    connect(m_regularExpressionCheckBox, &QCheckBox::stateChanged, this,\n            &FindAndReplaceWidget::updateFindOptions);\n    optionLayout->addWidget(m_regularExpressionCheckBox);\n\n    m_incrementalSearchCheckBox = WidgetsFactory::createCheckBox(tr(\"&Incremental search\"), this);\n    connect(m_incrementalSearchCheckBox, &QCheckBox::stateChanged, this,\n            &FindAndReplaceWidget::updateFindOptions);\n    optionLayout->addWidget(m_incrementalSearchCheckBox);\n\n    optionLayout->addStretch();\n  }\n}\n\nvoid FindAndReplaceWidget::close() {\n  hide();\n  emit closed();\n}\n\nvoid FindAndReplaceWidget::setReplaceEnabled(bool p_enabled) {\n  for (auto widget : m_replaceRelatedWidgets) {\n    widget->setEnabled(p_enabled);\n  }\n}\n\nvoid FindAndReplaceWidget::keyPressEvent(QKeyEvent *p_event) {\n  switch (p_event->key()) {\n  case Qt::Key_Escape:\n    close();\n    return;\n\n  case Qt::Key_Return: {\n    const int modifiers = p_event->modifiers();\n    if (modifiers != Qt::ShiftModifier && modifiers != Qt::NoModifier) {\n      break;\n    }\n\n    if (!m_findLineEdit->hasFocus() && !m_replaceLineEdit->hasFocus()) {\n      break;\n    }\n\n    if (modifiers == Qt::ShiftModifier) {\n      findPrevious();\n    } else {\n      findNext();\n    }\n    return;\n  }\n\n  default:\n    break;\n  }\n  QWidget::keyPressEvent(p_event);\n}\n\nvoid FindAndReplaceWidget::findNext() {\n  m_findTextTimer->stop();\n  auto text = m_findLineEdit->text();\n  if (text.isEmpty()) {\n    return;\n  }\n  emit findNextRequested(text, m_options);\n}\n\nvoid FindAndReplaceWidget::findPrevious() {\n  m_findTextTimer->stop();\n  auto text = m_findLineEdit->text();\n  if (text.isEmpty()) {\n    return;\n  }\n  emit findNextRequested(text, m_options | FindOption::FindBackward);\n}\n\nvoid FindAndReplaceWidget::updateFindOptions() {\n  if (m_optionCheckBoxMuted) {\n    return;\n  }\n\n  FindOptions options = FindOption::FindNone;\n\n  if (m_caseSensitiveCheckBox->isChecked()) {\n    options |= FindOption::CaseSensitive;\n  }\n  if (m_wholeWordOnlyCheckBox->isChecked()) {\n    options |= FindOption::WholeWordOnly;\n  }\n  if (m_regularExpressionCheckBox->isChecked()) {\n    options |= FindOption::RegularExpression;\n  }\n  if (m_incrementalSearchCheckBox->isChecked()) {\n    options |= FindOption::IncrementalSearch;\n  }\n\n  if (options == m_options) {\n    return;\n  }\n  m_options = options;\n  ConfigMgr::getInst().getWidgetConfig().setFindAndReplaceOptions(m_options);\n  m_findTextTimer->start();\n}\n\nvoid FindAndReplaceWidget::replace() {\n  m_findTextTimer->stop();\n  auto text = m_findLineEdit->text();\n  if (text.isEmpty()) {\n    return;\n  }\n  emit replaceRequested(text, m_options, m_replaceLineEdit->text());\n}\n\nvoid FindAndReplaceWidget::replaceAndFind() {\n  m_findTextTimer->stop();\n  auto text = m_findLineEdit->text();\n  if (text.isEmpty()) {\n    return;\n  }\n  emit replaceRequested(text, m_options, m_replaceLineEdit->text());\n  emit findNextRequested(text, m_options);\n}\n\nvoid FindAndReplaceWidget::replaceAll() {\n  m_findTextTimer->stop();\n  auto text = m_findLineEdit->text();\n  if (text.isEmpty()) {\n    return;\n  }\n  emit replaceAllRequested(text, m_options, m_replaceLineEdit->text());\n}\n\nvoid FindAndReplaceWidget::setFindOptions(FindOptions p_options) {\n  if (p_options == m_options) {\n    return;\n  }\n\n  m_optionCheckBoxMuted = true;\n  m_options = p_options & ~FindOption::FindBackward;\n  m_caseSensitiveCheckBox->setChecked(m_options & FindOption::CaseSensitive);\n  m_wholeWordOnlyCheckBox->setChecked(m_options & FindOption::WholeWordOnly);\n  m_regularExpressionCheckBox->setChecked(m_options & FindOption::RegularExpression);\n  m_incrementalSearchCheckBox->setChecked(m_options & FindOption::IncrementalSearch);\n  m_optionCheckBoxMuted = false;\n}\n\nvoid FindAndReplaceWidget::open(const QString &p_text) {\n  show();\n\n  if (!p_text.isEmpty()) {\n    m_findLineEdit->setText(p_text);\n  }\n\n  m_findLineEdit->setFocus();\n  m_findLineEdit->selectAll();\n\n  emit opened();\n}\n\nQString FindAndReplaceWidget::getFindText() const { return m_findLineEdit->text(); }\n\nFindOptions FindAndReplaceWidget::getOptions() const { return m_options; }\n\nvoid FindAndReplaceWidget::setOptionsEnabled(FindOptions p_options, bool p_enabled) {\n  if (p_options & FindOption::CaseSensitive) {\n    m_caseSensitiveCheckBox->setEnabled(p_enabled);\n  }\n  if (p_options & FindOption::WholeWordOnly) {\n    m_wholeWordOnlyCheckBox->setEnabled(p_enabled);\n  }\n  if (p_options & FindOption::RegularExpression) {\n    m_regularExpressionCheckBox->setEnabled(p_enabled);\n  }\n  if (p_options & FindOption::IncrementalSearch) {\n    m_incrementalSearchCheckBox->setEnabled(p_enabled);\n  }\n}\n"
  },
  {
    "path": "src/widgets/findandreplacewidget.h",
    "content": "#ifndef FINDANDREPLACEWIDGET_H\n#define FINDANDREPLACEWIDGET_H\n\n#include <QWidget>\n\n#include <QVector>\n\n#include <core/global.h>\n\nclass QLineEdit;\nclass QCheckBox;\nclass QTimer;\n\nnamespace vnotex {\nclass FindAndReplaceWidget : public QWidget {\n  Q_OBJECT\npublic:\n  explicit FindAndReplaceWidget(QWidget *p_parent = nullptr);\n\n  void setReplaceEnabled(bool p_enabled);\n\n  void open(const QString &p_text);\n\n  void close();\n\n  QString getFindText() const;\n\n  FindOptions getOptions() const;\n\n  void setOptionsEnabled(FindOptions p_options, bool p_enabled);\n\nsignals:\n  void findTextChanged(const QString &p_text, FindOptions p_options);\n\n  void findNextRequested(const QString &p_text, FindOptions p_options);\n\n  void replaceRequested(const QString &p_text, FindOptions p_options, const QString &p_replaceText);\n\n  void replaceAllRequested(const QString &p_text, FindOptions p_options,\n                           const QString &p_replaceText);\n\n  void closed();\n\n  void opened();\n\nprotected:\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void findNext();\n\n  void findPrevious();\n\n  void updateFindOptions();\n\n  void replace();\n\n  void replaceAndFind();\n\n  void replaceAll();\n\nprivate:\n  void setupUI();\n\n  void setFindOptions(FindOptions p_options);\n\n  QLineEdit *m_findLineEdit = nullptr;\n\n  QLineEdit *m_replaceLineEdit = nullptr;\n\n  QVector<QWidget *> m_replaceRelatedWidgets;\n\n  QCheckBox *m_caseSensitiveCheckBox = nullptr;\n\n  QCheckBox *m_wholeWordOnlyCheckBox = nullptr;\n\n  QCheckBox *m_regularExpressionCheckBox = nullptr;\n\n  QCheckBox *m_incrementalSearchCheckBox = nullptr;\n\n  FindOptions m_options = FindOption::FindNone;\n\n  QTimer *m_findTextTimer = nullptr;\n\n  bool m_optionCheckBoxMuted = false;\n};\n} // namespace vnotex\n\n#endif // FINDANDREPLACEWIDGET_H\n"
  },
  {
    "path": "src/widgets/floatingwidget.cpp",
    "content": "#include \"floatingwidget.h\"\n\n#include <QMenu>\n\nusing namespace vnotex;\n\nFloatingWidget::FloatingWidget(QWidget *p_parent) : QWidget(p_parent) {}\n\nvoid FloatingWidget::showEvent(QShowEvent *p_event) {\n  QWidget::showEvent(p_event);\n\n  // May fix potential input method issue.\n  activateWindow();\n\n  setFocus();\n}\n\nvoid FloatingWidget::finish() {\n  if (m_menu) {\n    m_menu->hide();\n  }\n}\n\nvoid FloatingWidget::setMenu(QMenu *p_menu) { m_menu = p_menu; }\n"
  },
  {
    "path": "src/widgets/floatingwidget.h",
    "content": "#ifndef FLOATINGWIDGET_H\n#define FLOATINGWIDGET_H\n\n#include <QVariant>\n#include <QWidget>\n\nclass QMenu;\n\nnamespace vnotex {\n// Used for ViewWindow to show as a floating widget (usually via QMenu).\nclass FloatingWidget : public QWidget {\n  Q_OBJECT\npublic:\n  void setMenu(QMenu *p_menu);\n\n  virtual QVariant result() const = 0;\n\nprotected:\n  FloatingWidget(QWidget *p_parent = nullptr);\n\n  // Sub-class calls this to indicates completion.\n  void finish();\n\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  QMenu *m_menu = nullptr;\n};\n} // namespace vnotex\n\n#endif // FLOATINGWIDGET_H\n"
  },
  {
    "path": "src/widgets/framelessmainwindow/framelessmainwindow.cpp",
    "content": "#include \"framelessmainwindow.h\"\n\n#include <QEvent>\n\nusing namespace vnotex;\n\nFramelessMainWindow::FramelessMainWindow(bool p_frameless, QWidget *p_parent)\n    : QMainWindow(p_parent), m_frameless(p_frameless), m_defaultFlags(windowFlags()) {\n  if (m_frameless) {\n    setWindowFlags(m_defaultFlags | Qt::FramelessWindowHint);\n  }\n}\n\nbool FramelessMainWindow::isFrameless() const { return m_frameless; }\n\nvoid FramelessMainWindow::setTitleBar(QWidget *p_titleBar) {\n  Q_ASSERT(!m_titleBar && m_frameless);\n\n  m_titleBar = p_titleBar;\n}\n\nvoid FramelessMainWindow::changeEvent(QEvent *p_event) {\n  QMainWindow::changeEvent(p_event);\n\n  if (p_event->type() == QEvent::WindowStateChange) {\n    m_windowStates = windowState();\n    m_resizable = m_windowStates == Qt::WindowNoState;\n    m_movable = m_windowStates == Qt::WindowNoState;\n    emit windowStateChanged(m_windowStates);\n  }\n}\n\nbool FramelessMainWindow::isMaximized() const {\n  return (m_windowStates & Qt::WindowMaximized) && !(m_windowStates & Qt::WindowFullScreen);\n}\n\nvoid FramelessMainWindow::setWindowFlagsOnUpdate() {\n  // Do nothing by default.\n}\n"
  },
  {
    "path": "src/widgets/framelessmainwindow/framelessmainwindow.h",
    "content": "#ifndef FRAMELESSMAINWINDOW_H\n#define FRAMELESSMAINWINDOW_H\n\n#include <QMainWindow>\n#include <QMargins>\n\nclass QTimer;\n\nnamespace vnotex {\n// Base class. Use FramelessMainWindowImpl instead.\nclass FramelessMainWindow : public QMainWindow {\n  Q_OBJECT\npublic:\n  FramelessMainWindow(bool p_frameless, QWidget *p_parent = nullptr);\n\n  bool isFrameless() const;\n\n  virtual void setTitleBar(QWidget *p_titleBar);\n\nsignals:\n  void windowStateChanged(Qt::WindowStates p_state);\n\nprotected:\n  void changeEvent(QEvent *p_event) Q_DECL_OVERRIDE;\n\nprotected:\n  bool isMaximized() const;\n\n  virtual void setWindowFlagsOnUpdate();\n\n  const bool m_frameless = true;\n\n  bool m_movable = true;\n\n  bool m_resizable = true;\n\n  const Qt::WindowFlags m_defaultFlags;\n\n  QWidget *m_titleBar = nullptr;\n\n  Qt::WindowStates m_windowStates = Qt::WindowNoState;\n};\n} // namespace vnotex\n\n#endif // FRAMELESSMAINWINDOW_H\n"
  },
  {
    "path": "src/widgets/framelessmainwindow/framelessmainwindowimpl.h",
    "content": "#ifndef FRAMELESSMAINWINDOWIMPL_H\n#define FRAMELESSMAINWINDOWIMPL_H\n\n#include \"framelessmainwindowlinux.h\"\n#include \"framelessmainwindowwin.h\"\n\nnamespace vnotex {\n#ifdef Q_OS_WIN\ntypedef FramelessMainWindowWin FramelessMainWindowImpl;\n#else\ntypedef FramelessMainWindowLinux FramelessMainWindowImpl;\n#endif\n} // namespace vnotex\n\n#endif // FRAMELESSMAINWINDOWIMPL_H\n"
  },
  {
    "path": "src/widgets/framelessmainwindow/framelessmainwindowlinux.cpp",
    "content": "#include \"framelessmainwindowlinux.h\"\n\n#ifndef Q_OS_WIN\n\n#include <QDebug>\n#include <QEvent>\n#include <QGuiApplication>\n#include <QHoverEvent>\n#include <QMouseEvent>\n\nusing namespace vnotex;\n\nFramelessMainWindowLinux::FramelessMainWindowLinux(bool p_frameless, QWidget *p_parent)\n    : FramelessMainWindow(p_frameless, p_parent) {\n  if (m_frameless) {\n    // installEventFilter(this);\n  }\n}\n\nbool FramelessMainWindowLinux::eventFilter(QObject *p_obj, QEvent *p_event) {\n  if (!m_frameless) {\n    return FramelessMainWindow::eventFilter(p_obj, p_event);\n  }\n\n  if (p_obj == m_titleBar) {\n    const auto type = p_event->type();\n    if (type == QEvent::MouseButtonDblClick || type == QEvent::NonClientAreaMouseButtonDblClick) {\n      if (!(m_windowStates & Qt::WindowFullScreen)) {\n        if (m_windowStates & Qt::WindowMaximized) {\n          showNormal();\n        } else {\n          showMaximized();\n        }\n      }\n    }\n  } else if (p_obj == this) {\n    doResize(p_event);\n  }\n\n  return FramelessMainWindow::eventFilter(p_obj, p_event);\n}\n\nvoid FramelessMainWindowLinux::setTitleBar(QWidget *p_titleBar) {\n  FramelessMainWindow::setTitleBar(p_titleBar);\n\n  m_titleBar->installEventFilter(this);\n}\n\nvoid FramelessMainWindowLinux::mousePressEvent(QMouseEvent *p_event) {\n  FramelessMainWindow::mousePressEvent(p_event);\n\n  if (m_frameless) {\n    recordMousePress(p_event->pos());\n  }\n}\n\nvoid FramelessMainWindowLinux::recordMousePress(const QPoint &p_pos) {\n  m_mousePressed = true;\n  m_mousePressPoint = p_pos;\n  m_rectOnMousePress = geometry();\n  m_mousePressArea = hitArea(m_mousePressPoint);\n}\n\nvoid FramelessMainWindowLinux::mouseReleaseEvent(QMouseEvent *p_event) {\n  FramelessMainWindow::mouseReleaseEvent(p_event);\n\n  if (m_frameless) {\n    // setCursor(Qt::ArrowCursor);\n    m_mousePressed = false;\n  }\n}\n\nvoid FramelessMainWindowLinux::mouseMoveEvent(QMouseEvent *p_event) {\n  FramelessMainWindow::mouseMoveEvent(p_event);\n\n  if (m_frameless) {\n    Q_ASSERT(m_mousePressed);\n    if (m_movable && m_mousePressArea == Area::Caption) {\n      const auto delta = p_event->pos() - m_mousePressPoint;\n      move(pos() + delta);\n    }\n  }\n}\n\nvoid FramelessMainWindowLinux::doResize(QEvent *p_event) {\n  Q_UNUSED(p_event);\n#if 0\n    static bool needResetCursor = false;\n\n    switch (p_event->type()) {\n    case QEvent::HoverMove:\n    {\n        if (!m_resizable) {\n            return;\n        }\n\n        auto eve = static_cast<QHoverEvent *>(p_event);\n        const auto evePos = eve->pos();\n        const auto area = hitArea(evePos);\n        if (!m_mousePressed && area != Area::None && area != Area::Caption) {\n            // Mouse press event may be blocked by the children of QMainWindow.\n            if (QGuiApplication::mouseButtons() != Qt::NoButton) {\n                recordMousePress(evePos);\n                return;\n            }\n        }\n\n        if (m_mousePressed) {\n            const auto delta = evePos - m_mousePressPoint;\n            switch (m_mousePressArea) {\n            case Area::Left:\n            {\n                int newWidth = m_rectOnMousePress.width() - delta.x();\n                qDebug() << newWidth << minimumWidth();\n                if (minimumWidth() <= newWidth) {\n                    setGeometry(m_rectOnMousePress.x() + delta.x(),\n                                m_rectOnMousePress.y(),\n                                newWidth,\n                                m_rectOnMousePress.height());\n                }\n                break;\n            }\n\n            default:\n                break;\n            }\n        } else {\n            switch (area) {\n            case Area::Left:\n                Q_FALLTHROUGH();\n            case Area::Right:\n                needResetCursor = true;\n                setCursor(Qt::SizeHorCursor);\n                break;\n\n            case Area::Top:\n                Q_FALLTHROUGH();\n            case Area::Bottom:\n                needResetCursor = true;\n                setCursor(Qt::SizeVerCursor);\n                break;\n\n            case Area::TopLeft:\n                Q_FALLTHROUGH();\n            case Area::BottomRight:\n                needResetCursor = true;\n                setCursor(Qt::SizeFDiagCursor);\n                break;\n\n            case Area::TopRight:\n                Q_FALLTHROUGH();\n            case Area::BottomLeft:\n                needResetCursor = true;\n                setCursor(Qt::SizeBDiagCursor);\n                break;\n\n            default:\n                if (needResetCursor) {\n                    needResetCursor = false;\n                    setCursor(Qt::ArrowCursor);\n                }\n                break;\n            }\n        }\n\n        return;\n    }\n\n    default:\n        break;\n    }\n#endif\n}\n\nFramelessMainWindowLinux::Area FramelessMainWindowLinux::hitArea(const QPoint &p_pos) const {\n  const int x = p_pos.x();\n  const int y = p_pos.y();\n  Area area = Area::None;\n  if (x < m_resizeAreaWidth) {\n    // Left.\n    if (y < m_resizeAreaWidth) {\n      // Top.\n      area = Area::TopLeft;\n    } else if (y > height() - m_resizeAreaWidth) {\n      // Bottom.\n      area = Area::BottomLeft;\n    } else {\n      area = Area::Left;\n    }\n  } else if (x > width() - m_resizeAreaWidth) {\n    // Right.\n    if (y < m_resizeAreaWidth) {\n      // Top.\n      area = Area::TopRight;\n    } else if (y > height() - m_resizeAreaWidth) {\n      // Bottom.\n      area = Area::BottomRight;\n    } else {\n      area = Area::Right;\n    }\n  } else if (y < m_resizeAreaWidth) {\n    // Top.\n    area = Area::Top;\n  } else if (y > height() - m_resizeAreaWidth) {\n    // Bottom.\n    area = Area::Bottom;\n  } else if (y < m_titleBarHeight) {\n    area = Area::Caption;\n  }\n\n  return area;\n}\n\nvoid FramelessMainWindowLinux::showEvent(QShowEvent *p_event) {\n  FramelessMainWindow::showEvent(p_event);\n\n  if (m_frameless && m_titleBarHeight == 0 && m_titleBar) {\n    m_titleBarHeight = m_titleBar->height();\n  }\n}\n\n#endif\n"
  },
  {
    "path": "src/widgets/framelessmainwindow/framelessmainwindowlinux.h",
    "content": "#ifndef FRAMELESSMAINWINDOWLINUX_H\n#define FRAMELESSMAINWINDOWLINUX_H\n\n#include \"framelessmainwindow.h\"\n\n#include <QRect>\n#include <QVector>\n\nnamespace vnotex {\n#ifndef Q_OS_WIN\nclass FramelessMainWindowLinux : public FramelessMainWindow {\n  Q_OBJECT\npublic:\n  FramelessMainWindowLinux(bool p_frameless, QWidget *p_parent = nullptr);\n\n  void setTitleBar(QWidget *p_titleBar) Q_DECL_OVERRIDE;\n\nprotected:\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\n\n  void mousePressEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;\n\n  void mouseReleaseEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;\n\n  void mouseMoveEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;\n\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  enum Area {\n    Left = 0,\n    TopLeft,\n    Top,\n    TopRight,\n    Right,\n    BottomRight,\n    Bottom,\n    BottomLeft,\n    Caption,\n    None\n  };\n\n  Area hitArea(const QPoint &p_pos) const;\n\n  void doResize(QEvent *p_event);\n\n  void recordMousePress(const QPoint &p_pos);\n\n  const int m_resizeAreaWidth = 6;\n\n  int m_titleBarHeight = 0;\n\n  Area m_mousePressArea = Area::None;\n\n  QPoint m_mousePressPoint;\n\n  bool m_mousePressed = false;\n\n  QRect m_rectOnMousePress;\n};\n#else\nclass FramelessMainWindowLinuxDummy {\npublic:\n  FramelessMainWindowLinuxDummy() = default;\n};\n#endif\n} // namespace vnotex\n\n#endif // FRAMELESSMAINWINDOWLINUX_H\n"
  },
  {
    "path": "src/widgets/framelessmainwindow/framelessmainwindowwin.cpp",
    "content": "#include \"framelessmainwindowwin.h\"\n\n#ifdef Q_OS_WIN\n\n#include <QEvent>\n#include <QTimer>\n\n#include <dwmapi.h>\n#include <windows.h>\n#include <windowsx.h>\n#pragma comment(lib, \"dwmapi.lib\")\n#pragma comment(lib, \"user32.lib\")\n\nusing namespace vnotex;\n\nFramelessMainWindowWin::FramelessMainWindowWin(bool p_frameless, QWidget *p_parent)\n    : FramelessMainWindow(p_frameless, p_parent) {\n  if (m_frameless) {\n    m_resizeAreaWidth *= devicePixelRatio();\n\n    m_redrawTimer = new QTimer(this);\n    m_redrawTimer->setSingleShot(true);\n    m_redrawTimer->setInterval(500);\n    connect(m_redrawTimer, &QTimer::timeout, this, &FramelessMainWindowWin::forceRedraw);\n\n    connect(this, &FramelessMainWindow::windowStateChanged, this,\n            &FramelessMainWindowWin::updateMargins);\n\n    // Enable some window effects on Win, such as snap and maximizing.\n    // It will activate the title bar again. Need to remove it in WM_NCCALCSIZE msg.\n    HWND hwnd = reinterpret_cast<HWND>(winId());\n    DWORD style = ::GetWindowLong(hwnd, GWL_STYLE);\n    ::SetWindowLong(hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CAPTION);\n\n    // Leave 1 pixel width of border so OS will draw a window shadow.\n    const MARGINS shadow = {1, 1, 1, 1};\n    DwmExtendFrameIntoClientArea(hwnd, &shadow);\n  }\n}\n\n#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))\nbool FramelessMainWindowWin::nativeEvent(const QByteArray &p_eventType, void *p_message,\n                                         qintptr *p_result)\n#else\nbool FramelessMainWindowWin::nativeEvent(const QByteArray &p_eventType, void *p_message,\n                                         long *p_result)\n#endif\n{\n  if (!m_frameless) {\n    return FramelessMainWindow::nativeEvent(p_eventType, p_message, p_result);\n  }\n\n  if (p_eventType == QStringLiteral(\"windows_generic_MSG\")) {\n    MSG *msg = static_cast<MSG *>(p_message);\n\n    switch (msg->message) {\n    case WM_NCCALCSIZE:\n      *p_result = 0;\n      return true;\n\n    case WM_NCHITTEST: {\n      if (m_windowStates & Qt::WindowFullScreen) {\n        *p_result = HTCLIENT;\n        return true;\n      }\n\n      RECT windowRect;\n      ::GetWindowRect(msg->hwnd, &windowRect);\n\n      // x and y could not be compared with width() and height() in hidpi case.\n      const int x = static_cast<int>(GET_X_LPARAM(msg->lParam) - windowRect.left);\n      const int y = static_cast<int>(GET_Y_LPARAM(msg->lParam) - windowRect.top);\n\n      *p_result = 0;\n      if (m_resizable) {\n        if (x < m_resizeAreaWidth) {\n          // Left.\n          if (y < m_resizeAreaWidth) {\n            // Top.\n            *p_result = HTTOPLEFT;\n          } else if (y > windowRect.bottom - windowRect.top - m_resizeAreaWidth) {\n            // Bottom.\n            *p_result = HTBOTTOMLEFT;\n          } else {\n            *p_result = HTLEFT;\n          }\n        } else if (x > windowRect.right - windowRect.left - m_resizeAreaWidth) {\n          // Right.\n          if (y < m_resizeAreaWidth) {\n            // Top.\n            *p_result = HTTOPRIGHT;\n          } else if (y > windowRect.bottom - windowRect.top - m_resizeAreaWidth) {\n            // Bottom.\n            *p_result = HTBOTTOMRIGHT;\n          } else {\n            *p_result = HTRIGHT;\n          }\n        } else if (y < m_resizeAreaWidth) {\n          *p_result = HTTOP;\n        } else if (y > windowRect.bottom - windowRect.top - m_resizeAreaWidth) {\n          *p_result = HTBOTTOM;\n        }\n      }\n\n      if (0 != *p_result) {\n        return true;\n      }\n\n      if (m_titleBar) {\n        if (m_titleBarHeight == 0) {\n          m_titleBarHeight = m_titleBar->height() * devicePixelRatio();\n        }\n\n        if (y < m_titleBarHeight) {\n          QWidget *child = m_titleBar->childAt(m_titleBar->mapFromGlobal(QCursor::pos()));\n          if (!child) {\n            *p_result = HTCAPTION;\n            if (::GetAsyncKeyState(VK_LBUTTON) < 0 || ::GetAsyncKeyState(VK_RBUTTON) < 0) {\n              m_sizeBeforeMove = size();\n            }\n            return true;\n          }\n        }\n      }\n\n      break;\n    }\n\n    case WM_POWERBROADCAST: {\n      if (msg->wParam == PBT_APMSUSPEND) {\n        // Minimize when system is going to sleep to avoid bugs.\n        showMinimized();\n      }\n      break;\n    }\n\n    case WM_GETMINMAXINFO: {\n      // When maximized, OS will expand the content area. To avoid missing the real contents, set\n      // extra margins.\n      if (::IsZoomed(msg->hwnd)) {\n        RECT frame = {0, 0, 0, 0};\n        ::AdjustWindowRectEx(&frame, WS_OVERLAPPEDWINDOW, false, 0);\n        const int dpiScale = devicePixelRatio();\n        // Use bottom as top.\n        QMargins newMargins(qAbs(frame.left) / dpiScale, qAbs(frame.bottom) / dpiScale,\n                            frame.right / dpiScale, frame.bottom / dpiScale);\n        if (newMargins != m_maximizedMargins) {\n          m_maximizedMargins = newMargins;\n          updateMargins();\n        }\n      }\n      break;\n    }\n\n    default:\n      break;\n    }\n  }\n\n  return FramelessMainWindow::nativeEvent(p_eventType, p_message, p_result);\n}\n\nvoid FramelessMainWindowWin::moveEvent(QMoveEvent *p_event) {\n  FramelessMainWindow::moveEvent(p_event);\n\n  if (m_frameless) {\n    if (m_windowStates & Qt::WindowMaximized) {\n      m_redrawTimer->stop();\n    } else {\n      m_redrawTimer->start();\n    }\n  }\n}\n\nvoid FramelessMainWindowWin::updateMargins() {\n  if (!m_frameless) {\n    return;\n  }\n\n  int topMargin = 0;\n  if (isMaximized()) {\n    setContentsMargins(m_maximizedMargins);\n    topMargin = m_maximizedMargins.top();\n  } else {\n    setContentsMargins(0, 0, 0, 0);\n  }\n\n  if (m_titleBar) {\n    m_titleBarHeight = (m_titleBar->height() + topMargin) * devicePixelRatio();\n  }\n}\n\nvoid FramelessMainWindowWin::forceRedraw() {\n  Q_ASSERT(m_frameless);\n  if (m_windowStates & Qt::WindowMaximized) {\n    return;\n  }\n\n  const QSize sz = size();\n  RECT frame;\n  ::GetWindowRect((HWND)winId(), &frame);\n  const int clientWidth = (frame.right - frame.left) / devicePixelRatio();\n  const int clientHeight = (frame.bottom - frame.top) / devicePixelRatio();\n  if (clientWidth != sz.width() || clientHeight != sz.height()) {\n    // resize() may result to \"unable to set geometry\" warning.\n    // adjustsize() or resize() to another size before could solve this.\n    resize(sz.width() + 1, sz.height() + 1);\n    if (m_sizeBeforeMove.isEmpty()) {\n      resize(clientWidth, clientHeight);\n    } else {\n      resize(m_sizeBeforeMove);\n    }\n  }\n}\n\nvoid FramelessMainWindowWin::setWindowFlagsOnUpdate() {\n  if (m_frameless) {\n    // We need to re-set the window flags again in some cases, such as after StayOnTop.\n    HWND hwnd = reinterpret_cast<HWND>(winId());\n    DWORD style = ::GetWindowLong(hwnd, GWL_STYLE);\n    ::SetWindowLong(hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CAPTION);\n  }\n}\n\n#endif\n"
  },
  {
    "path": "src/widgets/framelessmainwindow/framelessmainwindowwin.h",
    "content": "#ifndef FRAMELESSMAINWINDOWWIN_H\n#define FRAMELESSMAINWINDOWWIN_H\n\n#include \"framelessmainwindow.h\"\n\nnamespace vnotex {\n#ifdef Q_OS_WIN\nclass FramelessMainWindowWin : public FramelessMainWindow {\n  Q_OBJECT\npublic:\n  FramelessMainWindowWin(bool p_frameless, QWidget *p_parent = nullptr);\n\nprotected:\n#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))\n  bool nativeEvent(const QByteArray &p_eventType, void *p_message,\n                   qintptr *p_result) Q_DECL_OVERRIDE;\n#else\n  bool nativeEvent(const QByteArray &p_eventType, void *p_message, long *p_result) Q_DECL_OVERRIDE;\n#endif\n\n  void moveEvent(QMoveEvent *p_event) Q_DECL_OVERRIDE;\n\n  void setWindowFlagsOnUpdate() Q_DECL_OVERRIDE;\n\nprivate:\n  // To fix some unkonwn bugs of the interface.\n  void forceRedraw();\n\n  void updateMargins();\n\n  int m_resizeAreaWidth = 6;\n\n  QTimer *m_redrawTimer = nullptr;\n\n  QSize m_sizeBeforeMove;\n\n  QMargins m_maximizedMargins;\n\n  int m_titleBarHeight = 0;\n};\n#else\nclass FramelessMainWindowWinDummy {\npublic:\n  FramelessMainWindowWinDummy() = default;\n};\n#endif\n} // namespace vnotex\n\n#endif // FRAMELESSMAINWINDOWWIN_H\n"
  },
  {
    "path": "src/widgets/fullscreentoggleaction.cpp",
    "content": "#include \"fullscreentoggleaction.h\"\n\n#include <QEvent>\n#include <QWidget>\n\nusing namespace vnotex;\n\nFullScreenToggleAction::FullScreenToggleAction(QWidget *p_window, const QIcon &p_icon,\n                                               QObject *p_parent)\n    : BiAction(p_icon, tr(\"F&ull Screen\"), QIcon(), tr(\"Exit F&ull Screen\"), p_parent),\n      m_window(p_window) {\n  setCheckable(true);\n\n  if (m_window) {\n    m_window->installEventFilter(this);\n  }\n\n  connect(this, &QAction::triggered, this, [this](bool p_checked) {\n    if ((p_checked && !m_window->isFullScreen()) || (!p_checked && m_window->isFullScreen())) {\n      setWindowFullScreen(m_window, p_checked);\n      emit fullScreenToggled(p_checked);\n    }\n  });\n}\n\nbool FullScreenToggleAction::eventFilter(QObject *p_object, QEvent *p_event) {\n  if (p_object == m_window) {\n    if (p_event->type() == QEvent::WindowStateChange) {\n      if (m_window->isFullScreen() != isChecked()) {\n        trigger();\n      }\n    }\n  }\n\n  return false;\n}\n\nvoid FullScreenToggleAction::setWindowFullScreen(QWidget *p_window, bool p_set) {\n  Q_ASSERT(p_window);\n  if (p_set) {\n    p_window->setWindowState(p_window->windowState() | Qt::WindowFullScreen);\n  } else {\n    p_window->setWindowState(p_window->windowState() & ~Qt::WindowFullScreen);\n  }\n}\n"
  },
  {
    "path": "src/widgets/fullscreentoggleaction.h",
    "content": "#ifndef FULLSCREENTOGGLEACTION_H\n#define FULLSCREENTOGGLEACTION_H\n\n#include \"biaction.h\"\n\nnamespace vnotex {\nclass FullScreenToggleAction : public BiAction {\n  Q_OBJECT\npublic:\n  FullScreenToggleAction(QWidget *p_window, const QIcon &p_icon, QObject *p_parent = nullptr);\n\nsignals:\n  bool fullScreenToggled(bool p_fullScreen);\n\nprotected:\n  bool eventFilter(QObject *p_object, QEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  static void setWindowFullScreen(QWidget *p_window, bool p_set);\n\n  QWidget *m_window = nullptr;\n};\n} // namespace vnotex\n\n#endif // FULLSCREENTOGGLEACTION_H\n"
  },
  {
    "path": "src/widgets/historypanel.cpp",
    "content": "#include \"historypanel.h\"\n\n#include <QListWidgetItem>\n#include <QToolButton>\n#include <QVBoxLayout>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/exception.h>\n#include <core/fileopenparameters.h>\n#include <core/historymgr.h>\n#include <core/notebookmgr.h>\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n\n#include \"listwidget.h\"\n#include \"mainwindow.h\"\n#include \"messageboxhelper.h\"\n#include \"navigationmodemgr.h\"\n#include \"titlebar.h\"\n\nusing namespace vnotex;\n\nHistoryPanel::HistoryPanel(QWidget *p_parent) : QFrame(p_parent) {\n  initIcons();\n\n  setupUI();\n\n  updateSeparators();\n}\n\nvoid HistoryPanel::initIcons() {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  m_fileIcon = IconUtils::fetchIcon(themeMgr.getIconFile(QStringLiteral(\"file_node.svg\")));\n}\n\nvoid HistoryPanel::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(mainLayout);\n\n  setupTitleBar(QString(), this);\n  mainLayout->addWidget(m_titleBar);\n\n  m_historyList = new ListWidget(true, this);\n  m_historyList->setContextMenuPolicy(Qt::CustomContextMenu);\n  m_historyList->setSelectionMode(QAbstractItemView::ExtendedSelection);\n  connect(m_historyList, &QListWidget::customContextMenuRequested, this,\n          &HistoryPanel::handleContextMenuRequested);\n  connect(m_historyList, &QListWidget::itemActivated, this, &HistoryPanel::openItem);\n  mainLayout->addWidget(m_historyList);\n\n  m_navigationWrapper.reset(new NavigationModeWrapper<QListWidget, QListWidgetItem>(m_historyList));\n  NavigationModeMgr::getInst().registerNavigationTarget(m_navigationWrapper.data());\n\n  setFocusProxy(m_historyList);\n}\n\nvoid HistoryPanel::setupTitleBar(const QString &p_title, QWidget *p_parent) {\n  m_titleBar = new TitleBar(p_title, false, TitleBar::Action::None, p_parent);\n  m_titleBar->setActionButtonsAlwaysShown(true);\n\n  {\n    auto clearBtn = m_titleBar->addActionButton(QStringLiteral(\"clear.svg\"), tr(\"Clear\"));\n    connect(clearBtn, &QToolButton::triggered, this, &HistoryPanel::clearHistory);\n  }\n}\n\nvoid HistoryPanel::handleContextMenuRequested(const QPoint &p_pos) {\n  auto item = m_historyList->itemAt(p_pos);\n  if (!isValidItem(item)) {\n    return;\n  }\n\n  QMenu menu(this);\n\n  const int selectedCount = m_historyList->selectedItems().size();\n\n  menu.addAction(tr(\"&Open\"), this, [this]() {\n    const auto selectedItems = m_historyList->selectedItems();\n    for (const auto &selectedItem : selectedItems) {\n      openItem(selectedItem);\n    }\n  });\n\n  if (selectedCount == 1) {\n    menu.addAction(tr(\"&Locate Node\"), &menu, [this]() {\n      auto item = m_historyList->currentItem();\n      if (!isValidItem(item)) {\n        return;\n      }\n\n      auto node = VNoteX::getInst().getNotebookMgr().loadNodeByPath(getPath(item));\n      if (node) {\n        emit VNoteX::getInst().locateNodeRequested(node.data());\n      }\n    });\n  }\n\n  menu.exec(m_historyList->mapToGlobal(p_pos));\n}\n\nvoid HistoryPanel::openItem(const QListWidgetItem *p_item) {\n  if (!isValidItem(p_item)) {\n    return;\n  }\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto paras = QSharedPointer<FileOpenParameters>::create();\n  paras->m_mode = coreConfig.getDefaultOpenMode();\n\n  emit VNoteX::getInst().openFileRequested(getPath(p_item), paras);\n}\n\nvoid HistoryPanel::clearHistory() {\n  int ret =\n      MessageBoxHelper::questionOkCancel(MessageBoxHelper::Warning, tr(\"Clear all the history?\"),\n                                         QString(), QString(), VNoteX::getInst().getMainWindow());\n  if (ret != QMessageBox::Ok) {\n    return;\n  }\n\n  HistoryMgr::getInst().clear();\n}\n\nbool HistoryPanel::isValidItem(const QListWidgetItem *p_item) const {\n  return p_item && !ListWidget::isSeparatorItem(p_item);\n}\n\nvoid HistoryPanel::updateHistoryList() {\n  m_historyList->clear();\n\n  const auto &history = HistoryMgr::getInst().getHistory();\n  int itemIdx = history.size() - 1;\n  for (int sepIdx = 0; sepIdx < m_separators.size() && itemIdx >= 0; ++sepIdx) {\n    const auto &separator = m_separators[sepIdx];\n    if (separator.m_dateUtc <= history[itemIdx]->m_item.m_lastAccessedTimeUtc) {\n      // Insert this separator.\n      auto sepItem = ListWidget::createSeparatorItem(separator.m_text);\n      m_historyList->addItem(sepItem);\n\n      addItem(*history[itemIdx]);\n      --itemIdx;\n\n      // Insert all qualified items.\n      for (; itemIdx >= 0 && separator.m_dateUtc <= history[itemIdx]->m_item.m_lastAccessedTimeUtc;\n           --itemIdx) {\n        addItem(*history[itemIdx]);\n      }\n    }\n  }\n\n  if (itemIdx >= 0) {\n    // Older.\n    auto sepItem = ListWidget::createSeparatorItem(tr(\"Older\"));\n    m_historyList->addItem(sepItem);\n\n    for (; itemIdx >= 0; --itemIdx) {\n      addItem(*history[itemIdx]);\n    }\n  }\n}\n\nvoid HistoryPanel::initialize() {\n  connect(&HistoryMgr::getInst(), &HistoryMgr::historyUpdated, this,\n          &HistoryPanel::updateHistoryList);\n\n  updateHistoryList();\n}\n\nvoid HistoryPanel::updateSeparators() {\n  m_separators.resize(3);\n\n  // Mid-night of today.\n  auto curDateTime = QDateTime::currentDateTime();\n  curDateTime.setTime(QTime());\n\n  m_separators[0].m_text = tr(\"Today\");\n  m_separators[0].m_dateUtc = curDateTime.toUTC();\n  m_separators[1].m_text = tr(\"Yesterday\");\n  m_separators[1].m_dateUtc = curDateTime.addDays(-1).toUTC();\n  m_separators[2].m_text = tr(\"Last 7 Days\");\n  m_separators[2].m_dateUtc = curDateTime.addDays(-7).toUTC();\n}\n\nvoid HistoryPanel::addItem(const HistoryItemFull &p_hisItem) {\n  auto item = new QListWidgetItem(m_historyList);\n\n  item->setText(PathUtils::fileNameCheap(p_hisItem.m_item.m_path));\n  item->setData(Qt::UserRole, p_hisItem.m_item.m_path);\n  item->setIcon(m_fileIcon);\n  if (p_hisItem.m_notebookName.isEmpty()) {\n    item->setToolTip(tr(\"%1\\n%2\").arg(\n        p_hisItem.m_item.m_path,\n        Utils::dateTimeString(p_hisItem.m_item.m_lastAccessedTimeUtc.toLocalTime())));\n  } else {\n    item->setToolTip(\n        tr(\"[%1] %2\\n%3\")\n            .arg(p_hisItem.m_notebookName, p_hisItem.m_item.m_path,\n                 Utils::dateTimeString(p_hisItem.m_item.m_lastAccessedTimeUtc.toLocalTime())));\n  }\n}\n\nQString HistoryPanel::getPath(const QListWidgetItem *p_item) const {\n  return p_item->data(Qt::UserRole).toString();\n}\n"
  },
  {
    "path": "src/widgets/historypanel.h",
    "content": "#ifndef HISTORYPANEL_H\n#define HISTORYPANEL_H\n\n#include <QDateTime>\n#include <QFrame>\n#include <QIcon>\n#include <QScopedPointer>\n\n#include \"navigationmodewrapper.h\"\n\nclass QListWidget;\nclass QListWidgetItem;\n\nnamespace vnotex {\nclass TitleBar;\nstruct HistoryItemFull;\n\nclass HistoryPanel : public QFrame {\n  Q_OBJECT\npublic:\n  explicit HistoryPanel(QWidget *p_parent = nullptr);\n\n  void initialize();\n\nprivate slots:\n  void handleContextMenuRequested(const QPoint &p_pos);\n\n  void openItem(const QListWidgetItem *p_item);\n\n  void clearHistory();\n\nprivate:\n  struct SeparatorData {\n    QString m_text;\n\n    QDateTime m_dateUtc;\n  };\n\n  void initIcons();\n\n  void setupUI();\n\n  void setupTitleBar(const QString &p_title, QWidget *p_parent = nullptr);\n\n  void updateHistoryList();\n\n  void updateSeparators();\n\n  void addItem(const HistoryItemFull &p_hisItem);\n\n  QString getPath(const QListWidgetItem *p_item) const;\n\n  bool isValidItem(const QListWidgetItem *p_item) const;\n\n  TitleBar *m_titleBar = nullptr;\n\n  QListWidget *m_historyList = nullptr;\n\n  QScopedPointer<NavigationModeWrapper<QListWidget, QListWidgetItem>> m_navigationWrapper;\n\n  QVector<SeparatorData> m_separators;\n\n  QIcon m_fileIcon;\n};\n} // namespace vnotex\n\n#endif // HISTORYPANEL_H\n"
  },
  {
    "path": "src/widgets/itemproxystyle.cpp",
    "content": "#include \"itemproxystyle.h\"\n\n#include <QDebug>\n#include <QPainter>\n#include <QStyleOptionViewItem>\n#include <QTextLayout>\n#include <QTextOption>\n\n#include \"styleditemdelegate.h\"\n\nusing namespace vnotex;\n\nItemProxyStyle::ItemProxyStyle(QStyle *p_style) : QProxyStyle(p_style) {}\n\nvoid ItemProxyStyle::drawControl(QStyle::ControlElement p_element, const QStyleOption *p_option,\n                                 QPainter *p_painter, const QWidget *p_widget) const {\n  if (p_element == QStyle::CE_ItemViewItem) {\n    if (drawItemViewItem(p_option, p_painter, p_widget)) {\n      return;\n    }\n  }\n\n  QProxyStyle::drawControl(p_element, p_option, p_painter, p_widget);\n}\n\nbool ItemProxyStyle::drawItemViewItem(const QStyleOption *p_option, QPainter *p_painter,\n                                      const QWidget *p_widget) const {\n  const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(p_option);\n  if (!vopt) {\n    return false;\n  }\n\n  const auto value = vopt->index.data(HighlightsRole);\n  if (!value.canConvert<QList<Segment>>()) {\n    return false;\n  }\n\n  auto segments = value.value<QList<Segment>>();\n  if (segments.isEmpty()) {\n    return false;\n  }\n\n  // Copied from qtbase/src/widgets/styles/qcommonstyle.cpp.\n\n  p_painter->save();\n  p_painter->setClipRect(vopt->rect);\n  QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt, p_widget);\n  QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt, p_widget);\n  QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, p_widget);\n\n  // Draw the background.\n  proxy()->drawPrimitive(PE_PanelItemViewItem, vopt, p_painter, p_widget);\n\n  // Draw the check mark.\n  if (vopt->features & QStyleOptionViewItem::HasCheckIndicator) {\n    QStyleOptionViewItem option(*vopt);\n    option.rect = checkRect;\n    option.state = option.state & ~QStyle::State_HasFocus;\n    switch (vopt->checkState) {\n    case Qt::Unchecked:\n      option.state |= QStyle::State_Off;\n      break;\n    case Qt::PartiallyChecked:\n      option.state |= QStyle::State_NoChange;\n      break;\n    case Qt::Checked:\n      option.state |= QStyle::State_On;\n      break;\n    }\n    proxy()->drawPrimitive(QStyle::PE_IndicatorItemViewItemCheck, &option, p_painter, p_widget);\n  }\n\n  // Draw the icon.\n  QIcon::Mode mode = QIcon::Normal;\n  if (!(vopt->state & QStyle::State_Enabled)) {\n    mode = QIcon::Disabled;\n  } else if (vopt->state & QStyle::State_Selected) {\n    mode = QIcon::Selected;\n  }\n  QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off;\n  vopt->icon.paint(p_painter, iconRect, vopt->decorationAlignment, mode, state);\n\n  // Draw the text.\n  if (!vopt->text.isEmpty()) {\n    QPalette::ColorGroup cg =\n        vopt->state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled;\n    if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) {\n      cg = QPalette::Inactive;\n    }\n    if (vopt->state & QStyle::State_Selected) {\n      p_painter->setPen(vopt->palette.color(cg, QPalette::HighlightedText));\n    } else {\n      p_painter->setPen(vopt->palette.color(cg, QPalette::Text));\n    }\n    if (vopt->state & QStyle::State_Editing) {\n      p_painter->setPen(vopt->palette.color(cg, QPalette::Text));\n      p_painter->drawRect(textRect.adjusted(0, 0, -1, -1));\n    }\n\n    viewItemDrawText(p_painter, vopt, textRect);\n  }\n\n  // Draw the focus rect.\n  if (vopt->state & QStyle::State_HasFocus) {\n    QStyleOptionFocusRect o;\n    o.QStyleOption::operator=(*vopt);\n    o.rect = proxy()->subElementRect(SE_ItemViewItemFocusRect, vopt, p_widget);\n    o.state |= QStyle::State_KeyboardFocusChange;\n    o.state |= QStyle::State_Item;\n    QPalette::ColorGroup cg =\n        (vopt->state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled;\n    o.backgroundColor = vopt->palette.color(\n        cg, (vopt->state & QStyle::State_Selected) ? QPalette::Highlight : QPalette::Window);\n    proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, p_painter, p_widget);\n  }\n\n  p_painter->restore();\n\n  return true;\n}\n\nstatic QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth, int maxHeight = -1,\n                                 int *lastVisibleLine = nullptr) {\n  if (lastVisibleLine)\n    *lastVisibleLine = -1;\n  qreal height = 0;\n  qreal widthUsed = 0;\n  textLayout.beginLayout();\n  int i = 0;\n  while (true) {\n    QTextLine line = textLayout.createLine();\n    if (!line.isValid())\n      break;\n    line.setLineWidth(lineWidth);\n    line.setPosition(QPointF(0, height));\n    height += line.height();\n    widthUsed = qMax(widthUsed, line.naturalTextWidth());\n    // we assume that the height of the next line is the same as the current one\n    if (maxHeight > 0 && lastVisibleLine && height + line.height() > maxHeight) {\n      const QTextLine nextLine = textLayout.createLine();\n      *lastVisibleLine = nextLine.isValid() ? i : -1;\n      break;\n    }\n    ++i;\n  }\n  textLayout.endLayout();\n  return QSizeF(widthUsed, height);\n}\n\nvoid ItemProxyStyle::viewItemDrawText(QPainter *p_painter, const QStyleOptionViewItem *p_option,\n                                      const QRect &p_rect) const {\n  // Copied from qtbase/src/widgets/styles/qcommonstyle.cpp.\n\n  const QWidget *widget = p_option->widget;\n  const int textMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, widget) + 1;\n  // Remove width padding.\n  QRect textRect = p_rect.adjusted(textMargin, 0, -textMargin, 0);\n  const bool wrapText = p_option->features & QStyleOptionViewItem::WrapText;\n  QTextOption textOption;\n  textOption.setWrapMode(wrapText ? QTextOption::WordWrap : QTextOption::ManualWrap);\n  textOption.setTextDirection(p_option->direction);\n  textOption.setAlignment(QStyle::visualAlignment(p_option->direction, p_option->displayAlignment));\n  QPointF paintPosition;\n  const QString newText = calculateElidedText(p_option->text, textOption, p_option->font, textRect,\n                                              p_option->displayAlignment, p_option->textElideMode,\n                                              0, true, &paintPosition);\n  QTextLayout textLayout(newText, p_option->font);\n  textLayout.setTextOption(textOption);\n  viewItemTextLayout(textLayout, textRect.width());\n  textLayout.draw(p_painter, paintPosition);\n}\n\nQString ItemProxyStyle::calculateElidedText(const QString &text, const QTextOption &textOption,\n                                            const QFont &font, const QRect &textRect,\n                                            const Qt::Alignment valign,\n                                            Qt::TextElideMode textElideMode, int flags,\n                                            bool lastVisibleLineShouldBeElided,\n                                            QPointF *paintStartPosition) const {\n  // Copied from qtbase/src/widgets/styles/qcommonstyle.cpp.\n\n  QTextLayout textLayout(text, font);\n  textLayout.setTextOption(textOption);\n  // In AlignVCenter mode when more than one line is displayed and the height only allows\n  // some of the lines it makes no sense to display those. From a users perspective it makes\n  // more sense to see the start of the text instead something inbetween.\n  const bool vAlignmentOptimization = paintStartPosition && valign.testFlag(Qt::AlignVCenter);\n  int lastVisibleLine = -1;\n  viewItemTextLayout(textLayout, textRect.width(), vAlignmentOptimization ? textRect.height() : -1,\n                     &lastVisibleLine);\n  const QRectF boundingRect = textLayout.boundingRect();\n  // don't care about LTR/RTL here, only need the height\n  const QRect layoutRect =\n      QStyle::alignedRect(Qt::LayoutDirectionAuto, valign, boundingRect.size().toSize(), textRect);\n  if (paintStartPosition)\n    *paintStartPosition = QPointF(textRect.x(), layoutRect.top());\n  QString ret;\n  qreal height = 0;\n  const int lineCount = textLayout.lineCount();\n  for (int i = 0; i < lineCount; ++i) {\n    const QTextLine line = textLayout.lineAt(i);\n    height += line.height();\n    // above visible rect\n    if (height + layoutRect.top() <= textRect.top()) {\n      if (paintStartPosition)\n        paintStartPosition->ry() += line.height();\n      continue;\n    }\n    const int start = line.textStart();\n    const int length = line.textLength();\n    const bool drawElided = line.naturalTextWidth() > textRect.width();\n    bool elideLastVisibleLine = lastVisibleLine == i;\n    if (!drawElided && i + 1 < lineCount && lastVisibleLineShouldBeElided) {\n      const QTextLine nextLine = textLayout.lineAt(i + 1);\n      const int nextHeight = height + nextLine.height() / 2;\n      // elide when less than the next half line is visible\n      if (nextHeight + layoutRect.top() > textRect.height() + textRect.top())\n        elideLastVisibleLine = true;\n    }\n    QString text = textLayout.text().mid(start, length);\n    if (drawElided || elideLastVisibleLine) {\n      Q_ASSERT(false);\n      if (elideLastVisibleLine) {\n        if (text.endsWith(QChar::LineSeparator))\n          text.chop(1);\n        text += QChar(0x2026);\n      }\n      /* TODO: QStackTextEngine is a private class.\n      const QStackTextEngine engine(text, font);\n      ret += engine.elidedText(textElideMode, textRect.width(), flags);\n      */\n      Q_UNUSED(flags);\n      Q_UNUSED(textElideMode);\n      ret += text;\n      // no newline for the last line (last visible or real)\n      // sometimes drawElided is true but no eliding is done so the text ends\n      // with QChar::LineSeparator - don't add another one. This happened with\n      // arabic text in the testcase for QTBUG-72805\n      if (i < lineCount - 1 && !ret.endsWith(QChar::LineSeparator))\n        ret += QChar::LineSeparator;\n    } else {\n      ret += text;\n    }\n    // below visible text, can stop\n    if ((height + layoutRect.top() >= textRect.bottom()) ||\n        (lastVisibleLine >= 0 && lastVisibleLine == i))\n      break;\n  }\n  return ret;\n}\n"
  },
  {
    "path": "src/widgets/itemproxystyle.h",
    "content": "#ifndef ITEMPROXYSTYLE_H\n#define ITEMPROXYSTYLE_H\n\n#include <QProxyStyle>\n\nclass QStyleOptionViewItem;\nclass QTextOption;\n\nnamespace vnotex {\n// Draw item with text segments highlighted.\nclass ItemProxyStyle : public QProxyStyle {\n  Q_OBJECT\npublic:\n  explicit ItemProxyStyle(QStyle *p_style = nullptr);\n\n  void drawControl(QStyle::ControlElement p_element, const QStyleOption *p_option,\n                   QPainter *p_painter, const QWidget *p_widget = nullptr) const Q_DECL_OVERRIDE;\n\nprivate:\n  bool drawItemViewItem(const QStyleOption *p_option, QPainter *p_painter,\n                        const QWidget *p_widget) const;\n\n  void viewItemDrawText(QPainter *p_painter, const QStyleOptionViewItem *p_option,\n                        const QRect &p_rect) const;\n\n  QString calculateElidedText(const QString &text, const QTextOption &textOption, const QFont &font,\n                              const QRect &textRect, const Qt::Alignment valign,\n                              Qt::TextElideMode textElideMode, int flags,\n                              bool lastVisibleLineShouldBeElided,\n                              QPointF *paintStartPosition) const;\n};\n} // namespace vnotex\n\n#endif // ITEMPROXYSTYLE_H\n"
  },
  {
    "path": "src/widgets/labelwithbuttonswidget.cpp",
    "content": "#include \"labelwithbuttonswidget.h\"\n\n#include <QAction>\n#include <QDebug>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QPainter>\n#include <QStyle>\n#include <QStyleOption>\n#include <QToolButton>\n\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n\nusing namespace vnotex;\n\nLabelWithButtonsWidget::LabelWithButtonsWidget(const QString &p_label, Buttons p_buttons,\n                                               QWidget *p_parent)\n    : QWidget(p_parent) {\n  setupUI(p_buttons);\n\n  setLabel(p_label);\n}\n\nvoid LabelWithButtonsWidget::setupUI(Buttons p_buttons) {\n  auto mainLayout = new QHBoxLayout(this);\n\n  m_label = new QLabel(this);\n  mainLayout->addWidget(m_label);\n\n  if (p_buttons & Button::Delete) {\n    auto btn = createButton(Button::Delete, this);\n    mainLayout->addWidget(btn);\n  }\n}\n\nvoid LabelWithButtonsWidget::setLabel(const QString &p_label) { m_label->setText(p_label); }\n\nvoid LabelWithButtonsWidget::paintEvent(QPaintEvent *p_event) {\n  Q_UNUSED(p_event);\n\n  QStyleOption opt;\n  opt.initFrom(this);\n  QPainter p(this);\n  style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);\n}\n\nQToolButton *LabelWithButtonsWidget::createButton(Button p_button, QWidget *p_parent) {\n  auto btn = new QToolButton(p_parent);\n  QAction *act = nullptr;\n  switch (p_button) {\n  case Button::Delete:\n    act = new QAction(generateIcon(QStringLiteral(\"delete.svg\")), tr(\"Delete\"), p_parent);\n    break;\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  if (act) {\n    act->setData(static_cast<int>(p_button));\n    btn->setDefaultAction(act);\n    connect(btn, &QToolButton::triggered, this,\n            [this](QAction *p_act) { emit triggered(static_cast<Button>(p_act->data().toInt())); });\n  }\n  return btn;\n}\n\nQIcon LabelWithButtonsWidget::generateIcon(const QString &p_name) const {\n  auto iconFile = VNoteX::getInst().getThemeMgr().getIconFile(p_name);\n  return IconUtils::fetchIcon(iconFile);\n}\n"
  },
  {
    "path": "src/widgets/labelwithbuttonswidget.h",
    "content": "#ifndef LABELWITHBUTTONSWIDGET_H\n#define LABELWITHBUTTONSWIDGET_H\n\n#include <QWidget>\n\nclass QLabel;\nclass QToolButton;\n\nnamespace vnotex {\nclass LabelWithButtonsWidget : public QWidget {\n  Q_OBJECT\npublic:\n  enum Button { NoButton, Delete };\n  Q_DECLARE_FLAGS(Buttons, Button);\n\n  LabelWithButtonsWidget(const QString &p_label, Buttons p_buttons = Button::NoButton,\n                         QWidget *p_parent = nullptr);\n\n  void setLabel(const QString &p_label);\n\nsignals:\n  void triggered(Button p_button);\n\nprotected:\n  void paintEvent(QPaintEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI(Buttons p_buttons);\n\n  QToolButton *createButton(Button p_button, QWidget *p_parent);\n\n  QIcon generateIcon(const QString &p_name) const;\n\n  QLabel *m_label = nullptr;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::LabelWithButtonsWidget::Buttons)\n\n#endif // LABELWITHBUTTONSWIDGET_H\n"
  },
  {
    "path": "src/widgets/lineedit.cpp",
    "content": "#include \"lineedit.h\"\n\n#include <QCoreApplication>\n#include <QGuiApplication>\n#include <QInputMethod>\n#include <QKeyEvent>\n\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nLineEdit::LineEdit(QWidget *p_parent) : QLineEdit(p_parent) {}\n\nLineEdit::LineEdit(const QString &p_contents, QWidget *p_parent)\n    : QLineEdit(p_contents, p_parent) {}\n\nvoid LineEdit::keyPressEvent(QKeyEvent *p_event) {\n  // Note that QKeyEvent starts with isAccepted() == true, so you do not\n  // need to call QKeyEvent::accept() - just do not call the base class\n  // implementation if you act upon the key.\n  bool accepted = false;\n  int modifiers = p_event->modifiers();\n  switch (p_event->key()) {\n  case Qt::Key_BracketLeft: {\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      auto escEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier);\n      QCoreApplication::postEvent(this, escEvent);\n      accepted = true;\n    }\n\n    break;\n  }\n\n  case Qt::Key_H: {\n    // Backspace.\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      backspace();\n      accepted = true;\n    }\n\n    break;\n  }\n\n  case Qt::Key_W: {\n    // Delete one word backward.\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      if (!hasSelectedText()) {\n        cursorWordBackward(true);\n      }\n\n      backspace();\n      accepted = true;\n    }\n\n    break;\n  }\n\n  case Qt::Key_U: {\n    if (WidgetUtils::isViControlModifier(modifiers)) {\n      if (hasSelectedText()) {\n        backspace();\n      } else {\n        int pos = cursorPosition();\n        if (pos > 0) {\n          cursorBackward(true, pos);\n          backspace();\n        }\n      }\n\n      accepted = true;\n    }\n\n    break;\n  }\n\n  default:\n    break;\n  }\n\n  if (!accepted) {\n    QLineEdit::keyPressEvent(p_event);\n  }\n}\n\nvoid LineEdit::selectBaseName(QLineEdit *p_lineEdit) {\n  auto name = p_lineEdit->text();\n  int dotIndex = name.lastIndexOf('.');\n  p_lineEdit->setSelection(0, (dotIndex == -1) ? name.size() : dotIndex);\n}\n\nQVariant LineEdit::inputMethodQuery(Qt::InputMethodQuery p_query) const {\n  if (p_query == Qt::ImEnabled) {\n    return m_inputMethodEnabled;\n  }\n\n  return QLineEdit::inputMethodQuery(p_query);\n}\n\nvoid LineEdit::setInputMethodEnabled(bool p_enabled) {\n  if (m_inputMethodEnabled != p_enabled) {\n    m_inputMethodEnabled = p_enabled;\n\n    updateInputMethod();\n  }\n}\n\nvoid LineEdit::showEvent(QShowEvent *p_event) {\n  QLineEdit::showEvent(p_event);\n\n  if (!m_inputMethodEnabled) {\n    updateInputMethod();\n  }\n}\n\nvoid LineEdit::updateInputMethod() const {\n  QInputMethod *im = QGuiApplication::inputMethod();\n  im->reset();\n  // Ask input method to query current state, which will call inputMethodQuery().\n  im->update(Qt::ImEnabled);\n}\n\nQRect LineEdit::cursorRect() const { return QLineEdit::cursorRect(); }\n"
  },
  {
    "path": "src/widgets/lineedit.h",
    "content": "#ifndef LINEEDIT_H\n#define LINEEDIT_H\n\n#include <QLineEdit>\n\nnamespace vnotex {\n// A line edit with Vi-like shortcuts like Ctlr+W/U/H.\nclass LineEdit : public QLineEdit {\n  Q_OBJECT\npublic:\n  explicit LineEdit(QWidget *p_parent = nullptr);\n\n  LineEdit(const QString &p_contents, QWidget *p_parent = nullptr);\n\n  QVariant inputMethodQuery(Qt::InputMethodQuery p_query) const Q_DECL_OVERRIDE;\n\n  void setInputMethodEnabled(bool p_enabled);\n\n  QRect cursorRect() const;\n\n  static void selectBaseName(QLineEdit *p_lineEdit);\n\nprotected:\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\n\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void updateInputMethod() const;\n\n  // Whether enable input method.\n  bool m_inputMethodEnabled = true;\n};\n} // namespace vnotex\n\n#endif // LINEEDIT_H\n"
  },
  {
    "path": "src/widgets/lineeditdelegate.cpp",
    "content": "#include \"lineeditdelegate.h\"\n\n#include \"lineedit.h\"\n\nusing namespace vnotex;\n\nLineEditDelegate::LineEditDelegate(QObject *p_parent) : QStyledItemDelegate(p_parent) {}\n\nQWidget *LineEditDelegate::createEditor(QWidget *p_parent, const QStyleOptionViewItem &p_option,\n                                        const QModelIndex &p_index) const {\n  Q_UNUSED(p_option);\n  Q_UNUSED(p_index);\n  return new LineEdit(p_parent);\n}\n\nvoid LineEditDelegate::setEditorData(QWidget *p_editor, const QModelIndex &p_index) const {\n  const auto text = p_index.model()->data(p_index, Qt::EditRole).toString();\n  auto edit = static_cast<LineEdit *>(p_editor);\n  edit->setText(text);\n}\n\nvoid LineEditDelegate::setModelData(QWidget *p_editor, QAbstractItemModel *p_model,\n                                    const QModelIndex &p_index) const {\n  auto edit = static_cast<LineEdit *>(p_editor);\n  p_model->setData(p_index, edit->text(), Qt::EditRole);\n}\n\nvoid LineEditDelegate::updateEditorGeometry(QWidget *p_editor, const QStyleOptionViewItem &p_option,\n                                            const QModelIndex &p_index) const {\n  Q_UNUSED(p_index);\n  p_editor->setGeometry(p_option.rect);\n}\n"
  },
  {
    "path": "src/widgets/lineeditdelegate.h",
    "content": "#ifndef LINEEDITDELEGATE_H\n#define LINEEDITDELEGATE_H\n\n#include <QStyledItemDelegate>\n\nnamespace vnotex {\nclass LineEditDelegate : public QStyledItemDelegate {\n  Q_OBJECT\npublic:\n  LineEditDelegate(QObject *p_parent = nullptr);\n\n  QWidget *createEditor(QWidget *p_parent, const QStyleOptionViewItem &p_option,\n                        const QModelIndex &p_index) const Q_DECL_OVERRIDE;\n\n  void setEditorData(QWidget *p_editor, const QModelIndex &p_index) const Q_DECL_OVERRIDE;\n\n  void setModelData(QWidget *p_editor, QAbstractItemModel *p_model,\n                    const QModelIndex &p_index) const Q_DECL_OVERRIDE;\n\n  void updateEditorGeometry(QWidget *p_editor, const QStyleOptionViewItem &p_option,\n                            const QModelIndex &p_index) const Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // LINEEDITDELEGATE_H\n"
  },
  {
    "path": "src/widgets/lineeditwithsnippet.cpp",
    "content": "#include \"lineeditwithsnippet.h\"\n\n#include <snippet/snippetmgr.h>\n\nusing namespace vnotex;\n\nLineEditWithSnippet::LineEditWithSnippet(QWidget *p_parent) : LineEdit(p_parent) { setTips(); }\n\nLineEditWithSnippet::LineEditWithSnippet(const QString &p_contents, QWidget *p_parent)\n    : LineEdit(p_contents, p_parent) {\n  setTips();\n}\n\nvoid LineEditWithSnippet::setTips() {\n  const auto tips = tr(\"Snippet is supported via \\\"%name%\\\"\");\n  setToolTip(tips);\n  setPlaceholderText(tips);\n}\n\nQString LineEditWithSnippet::evaluatedText() const {\n  return SnippetMgr::getInst().applySnippetBySymbol(text());\n}\n"
  },
  {
    "path": "src/widgets/lineeditwithsnippet.h",
    "content": "#ifndef LINEEDITWITHSNIPPET_H\n#define LINEEDITWITHSNIPPET_H\n\n#include \"lineedit.h\"\n\nnamespace vnotex {\n// A line edit with snippet support.\nclass LineEditWithSnippet : public LineEdit {\n  Q_OBJECT\npublic:\n  explicit LineEditWithSnippet(QWidget *p_parent = nullptr);\n\n  LineEditWithSnippet(const QString &p_contents, QWidget *p_parent = nullptr);\n\n  // Get text with snippets evaluated.\n  QString evaluatedText() const;\n\nprivate:\n  void setTips();\n};\n} // namespace vnotex\n\n#endif // LINEEDITWITHSNIPPET_H\n"
  },
  {
    "path": "src/widgets/listwidget.cpp",
    "content": "#include \"listwidget.h\"\n\n#include <QApplication>\n#include <QKeyEvent>\n#include <QTimer>\n\n#include \"styleditemdelegate.h\"\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nListWidget::ListWidget(QWidget *p_parent) : ListWidget(false, p_parent) {}\n\nListWidget::ListWidget(bool p_enhancedStyle, QWidget *p_parent) : QListWidget(p_parent) {\n  m_clickTimer = new QTimer(this);\n  m_clickTimer->setSingleShot(true);\n  connect(m_clickTimer, &QTimer::timeout, this, &ListWidget::handleItemClick);\n\n  connect(this, &QListWidget::itemClicked, this, [this](QListWidgetItem *item) {\n    if (m_isDoubleClick && m_clickedItem == item) {\n      // There will be a single click right after double click.\n      m_clickTimer->stop();\n      handleItemClick();\n      return;\n    }\n\n    m_isDoubleClick = false;\n    m_clickedItem = item;\n    m_clickTimer->start(QApplication::doubleClickInterval());\n  });\n\n  connect(this, &QListWidget::itemDoubleClicked, this, [this](QListWidgetItem *item) {\n    m_clickTimer->stop();\n    m_isDoubleClick = true;\n    m_clickedItem = item;\n  });\n\n  if (p_enhancedStyle) {\n    auto delegate = new StyledItemDelegate(\n        QSharedPointer<StyledItemDelegateListWidget>::create(this), StyledItemDelegate::None, this);\n    setItemDelegate(delegate);\n  }\n}\n\nvoid ListWidget::keyPressEvent(QKeyEvent *p_event) {\n  if (WidgetUtils::processKeyEventLikeVi(this, p_event)) {\n    return;\n  }\n\n  bool activateItem = false;\n  const int key = p_event->key();\n  if (key == Qt::Key_Return || key == Qt::Key_Enter) {\n    activateItem = true;\n  }\n  // On Mac OS X, it is `Command+O` to activate an item, instead of Return.\n#if defined(Q_OS_MACOS) || defined(Q_OS_MAC)\n  if (key == Qt::Key_O && p_event->modifiers() == Qt::ControlModifier) {\n    activateItem = true;\n  }\n#endif\n\n  if (activateItem) {\n    if (auto item = currentItem()) {\n      emit itemActivated(item);\n      emit itemActivatedPlus(item, ActivateReason::Button);\n    }\n    return;\n  }\n\n  QListWidget::keyPressEvent(p_event);\n}\n\nQVector<QListWidgetItem *> ListWidget::getVisibleItems(const QListWidget *p_widget) {\n  QVector<QListWidgetItem *> items;\n\n  auto firstItem = p_widget->itemAt(0, 0);\n  if (!firstItem) {\n    return items;\n  }\n\n  auto lastItem = p_widget->itemAt(p_widget->viewport()->rect().bottomLeft());\n\n  int firstRow = p_widget->row(firstItem);\n  int lastRow = lastItem ? p_widget->row(lastItem) : (p_widget->count() - 1);\n  for (int i = firstRow; i <= lastRow; ++i) {\n    auto item = p_widget->item(i);\n    if (!item->isHidden() && item->flags() != Qt::NoItemFlags) {\n      items.append(item);\n    }\n  }\n\n  return items;\n}\n\nstatic const QBrush &separatorForeground() {\n  static QBrush fg;\n  if (fg == QBrush()) {\n    const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n    fg = QColor(themeMgr.paletteColor(QStringLiteral(\"widgets#styleditemdelegate#separator#fg\")));\n  }\n  return fg;\n}\n\nstatic const QBrush &separatorBackground() {\n  static QBrush bg;\n  if (bg == QBrush()) {\n    const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n    bg = QColor(themeMgr.paletteColor(QStringLiteral(\"widgets#styleditemdelegate#separator#bg\")));\n  }\n  return bg;\n}\n\nQListWidgetItem *ListWidget::createSeparatorItem(const QString &p_text) {\n  QListWidgetItem *item = new QListWidgetItem(p_text, nullptr, ItemTypeSeparator);\n  item->setData(Qt::ForegroundRole, separatorForeground());\n  item->setData(Qt::BackgroundRole, separatorBackground());\n  item->setFlags(Qt::NoItemFlags);\n  return item;\n}\n\nbool ListWidget::isSeparatorItem(const QListWidgetItem *p_item) {\n  return p_item->type() == ItemTypeSeparator;\n}\n\nQListWidgetItem *ListWidget::findItem(const QListWidget *p_widget, const QVariant &p_data) {\n  QListWidgetItem *item = nullptr;\n  forEachItem(p_widget, [&item, &p_data](QListWidgetItem *itemIter) {\n    if (itemIter->data(Qt::UserRole) == p_data) {\n      item = itemIter;\n      return false;\n    }\n\n    return true;\n  });\n\n  return item;\n}\n\nvoid ListWidget::forEachItem(const QListWidget *p_widget,\n                             const std::function<bool(QListWidgetItem *p_item)> &p_func) {\n  int cnt = p_widget->count();\n  for (int i = 0; i < cnt; ++i) {\n    if (!p_func(p_widget->item(i))) {\n      return;\n    }\n  }\n}\n\nvoid ListWidget::handleItemClick() {\n  if (m_clickedItem) {\n    emit itemActivatedPlus(m_clickedItem, m_isDoubleClick ? ActivateReason::DoubleClick\n                                                          : ActivateReason::SingleClick);\n    m_isDoubleClick = false;\n    m_clickedItem = nullptr;\n  }\n}\n"
  },
  {
    "path": "src/widgets/listwidget.h",
    "content": "#ifndef LISTWIDGET_H\n#define LISTWIDGET_H\n\n#include <QListWidget>\n\n#include <functional>\n\n#include <QVector>\n\nclass QTimer;\n\nnamespace vnotex {\nclass ListWidget : public QListWidget {\n  Q_OBJECT\npublic:\n  enum ActivateReason { SingleClick = 0, DoubleClick, Button };\n\n  explicit ListWidget(QWidget *p_parent = nullptr);\n\n  ListWidget(bool p_enhancedStyle, QWidget *p_parent = nullptr);\n\n  static QVector<QListWidgetItem *> getVisibleItems(const QListWidget *p_widget);\n\n  static QListWidgetItem *createSeparatorItem(const QString &p_text);\n\n  static bool isSeparatorItem(const QListWidgetItem *p_item);\n\n  static QListWidgetItem *findItem(const QListWidget *p_widget, const QVariant &p_data);\n\n  // @p_func: return false to abort the iteration.\n  static void forEachItem(const QListWidget *p_widget,\n                          const std::function<bool(QListWidgetItem *p_item)> &p_func);\n\nsignals:\n  // Item activated not by mouse clicking.\n  void itemActivatedPlus(QListWidgetItem *p_item, ActivateReason p_source);\n\nprotected:\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  enum { ItemTypeSeparator = 2000 };\n\n  void handleItemClick();\n\n  QTimer *m_clickTimer = nullptr;\n\n  QListWidgetItem *m_clickedItem = nullptr;\n\n  bool m_isDoubleClick = false;\n};\n} // namespace vnotex\n\n#endif // LISTWIDGET_H\n"
  },
  {
    "path": "src/widgets/locationinputwithbrowsebutton.cpp",
    "content": "#include \"locationinputwithbrowsebutton.h\"\n\n#include <QHBoxLayout>\n#include <QLineEdit>\n#include <QPushButton>\n\n#include <widgets/widgetsfactory.h>\n\nusing namespace vnotex;\n\nLocationInputWithBrowseButton::LocationInputWithBrowseButton(QWidget *p_parent)\n    : QWidget(p_parent) {\n  auto layout = new QHBoxLayout(this);\n  layout->setContentsMargins(0, 0, 0, 0);\n\n  m_lineEdit = WidgetsFactory::createLineEdit(this);\n  layout->addWidget(m_lineEdit, 1);\n  connect(m_lineEdit, &QLineEdit::textChanged, this, &LocationInputWithBrowseButton::textChanged);\n\n  auto browseBtn = new QPushButton(tr(\"Browse\"), this);\n  layout->addWidget(browseBtn);\n  connect(browseBtn, &QPushButton::clicked, this, &LocationInputWithBrowseButton::clicked);\n}\n\nQString LocationInputWithBrowseButton::text() const { return m_lineEdit->text(); }\n\nvoid LocationInputWithBrowseButton::setText(const QString &p_text) { m_lineEdit->setText(p_text); }\n\nQString LocationInputWithBrowseButton::toolTip() const { return m_lineEdit->toolTip(); }\n\nvoid LocationInputWithBrowseButton::setToolTip(const QString &p_tip) {\n  m_lineEdit->setToolTip(p_tip);\n}\n\nvoid LocationInputWithBrowseButton::setPlaceholderText(const QString &p_text) {\n  m_lineEdit->setPlaceholderText(p_text);\n}\n"
  },
  {
    "path": "src/widgets/locationinputwithbrowsebutton.h",
    "content": "#ifndef LOCATIONINPUTWITHBROWSEBUTTON_H\n#define LOCATIONINPUTWITHBROWSEBUTTON_H\n\n#include <QWidget>\n\nclass QLineEdit;\nclass QPushButton;\n\nnamespace vnotex {\nclass LocationInputWithBrowseButton : public QWidget {\n  Q_OBJECT\npublic:\n  explicit LocationInputWithBrowseButton(QWidget *p_parent = nullptr);\n\n  QString text() const;\n\n  void setText(const QString &p_text);\n\n  QString toolTip() const;\n\n  void setToolTip(const QString &p_tip);\n\n  void setPlaceholderText(const QString &p_text);\n\nsignals:\n  void clicked();\n\n  void textChanged(const QString &p_text);\n\nprivate:\n  QLineEdit *m_lineEdit = nullptr;\n};\n} // namespace vnotex\n\n#endif // LOCATIONINPUTWITHBROWSEBUTTON_H\n"
  },
  {
    "path": "src/widgets/locationlist.cpp",
    "content": "#include \"locationlist.h\"\n\n#include <QHeaderView>\n#include <QLabel>\n#include <QToolButton>\n#include <QVBoxLayout>\n\n#include \"navigationmodemgr.h\"\n#include \"styleditemdelegate.h\"\n#include \"titlebar.h\"\n#include \"treewidget.h\"\n#include \"widgetsfactory.h\"\n\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nQIcon LocationList::s_bufferIcon;\n\nQIcon LocationList::s_fileIcon;\n\nQIcon LocationList::s_folderIcon;\n\nQIcon LocationList::s_notebookIcon;\n\nLocationList::LocationList(QWidget *p_parent) : QFrame(p_parent) { setupUI(); }\n\nvoid LocationList::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(mainLayout);\n\n  {\n    setupTitleBar(QString(), this);\n    mainLayout->addWidget(m_titleBar);\n  }\n\n  m_tree = new TreeWidget(TreeWidget::Flag::EnhancedStyle, this);\n  // When updated, pay attention to the Columns enum.\n  m_tree->setHeaderLabels(QStringList() << tr(\"Path\") << tr(\"Line\") << tr(\"Text\"));\n  m_tree->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);\n  m_tree->header()->setStretchLastSection(true);\n  connect(m_tree, &QTreeWidget::itemActivated, this, [this](QTreeWidgetItem *p_item, int p_col) {\n    Q_UNUSED(p_col);\n    if (!m_callback) {\n      return;\n    }\n    m_callback(getItemLocation(p_item));\n  });\n  mainLayout->addWidget(m_tree);\n\n  m_navigationWrapper.reset(new NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>(m_tree));\n  NavigationModeMgr::getInst().registerNavigationTarget(m_navigationWrapper.data());\n\n  setFocusProxy(m_tree);\n}\n\nconst QIcon &LocationList::getItemIcon(LocationType p_type) {\n  if (s_bufferIcon.isNull()) {\n    // Init.\n    const QString nodeIconFgName = \"widgets#locationlist#node_icon#fg\";\n    const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n    const auto fg = themeMgr.paletteColor(nodeIconFgName);\n\n    s_bufferIcon = IconUtils::fetchIcon(themeMgr.getIconFile(\"buffer.svg\"), fg);\n    s_fileIcon = IconUtils::fetchIcon(themeMgr.getIconFile(\"file_node.svg\"), fg);\n    s_folderIcon = IconUtils::fetchIcon(themeMgr.getIconFile(\"folder_node.svg\"), fg);\n    s_notebookIcon = IconUtils::fetchIcon(themeMgr.getIconFile(\"notebook_default.svg\"), fg);\n  }\n\n  switch (p_type) {\n  case LocationType::Buffer:\n    return s_bufferIcon;\n\n  case LocationType::File:\n    return s_fileIcon;\n\n  case LocationType::Folder:\n    return s_folderIcon;\n\n  case LocationType::Notebook:\n    Q_FALLTHROUGH();\n  default:\n    return s_notebookIcon;\n  }\n}\n\nvoid LocationList::setupTitleBar(const QString &p_title, QWidget *p_parent) {\n  m_titleBar = new TitleBar(p_title, true, TitleBar::Action::None, p_parent);\n  m_titleBar->setActionButtonsAlwaysShown(true);\n\n  {\n    auto clearBtn = m_titleBar->addActionButton(QStringLiteral(\"clear.svg\"), tr(\"Clear\"));\n    connect(clearBtn, &QToolButton::triggered, this, &LocationList::clear);\n  }\n}\n\nvoid LocationList::clear() {\n  m_tree->clear();\n\n  m_callback = LocationCallback();\n\n  updateItemsCountLabel();\n}\n\nvoid LocationList::setItemLocationLineAndText(QTreeWidgetItem *p_item,\n                                              const ComplexLocation::Line &p_line) {\n  p_item->setData(Columns::LineColumn, Qt::UserRole, p_line.m_lineNumber);\n  if (p_line.m_lineNumber != -1) {\n    p_item->setText(Columns::LineColumn, QString::number(p_line.m_lineNumber + 1));\n  }\n\n  // Truncate the text.\n  if (p_line.m_text.size() > 500) {\n    p_item->setText(Columns::TextColumn, p_line.m_text.left(500));\n  } else {\n    p_item->setText(Columns::TextColumn, p_line.m_text);\n  }\n\n  if (!p_line.m_segments.isEmpty()) {\n    p_item->setData(Columns::TextColumn, HighlightsRole, QVariant::fromValue(p_line.m_segments));\n  }\n}\n\nvoid LocationList::addLocation(const ComplexLocation &p_location) {\n  // Check if this path already exists\n  QTreeWidgetItem *existingItem = nullptr;\n  for (int i = 0; i < m_tree->topLevelItemCount(); ++i) {\n    auto item = m_tree->topLevelItem(i);\n    if (item->data(Columns::PathColumn, Qt::UserRole).toString() == p_location.m_path) {\n      existingItem = item;\n      break;\n    }\n  }\n\n  // Filter out empty lines\n  QVector<ComplexLocation::Line> validLines;\n  for (const auto &line : p_location.m_lines) {\n    if (line.m_lineNumber != -1 && !line.m_text.isEmpty()) {\n      validLines.append(line);\n    }\n  }\n\n  if (validLines.isEmpty()) {\n    // No valid lines, only add if this is a new path\n    if (!existingItem) {\n      auto item = new QTreeWidgetItem(m_tree);\n      item->setText(Columns::PathColumn, p_location.m_displayPath);\n      item->setIcon(Columns::PathColumn, getItemIcon(p_location.m_type));\n      item->setData(Columns::PathColumn, Qt::UserRole, p_location.m_path);\n      item->setToolTip(Columns::PathColumn, p_location.m_path);\n    }\n    return;\n  }\n\n  if (existingItem) {\n    // Replace existing item with new valid lines\n    delete existingItem;\n  }\n\n  auto item = new QTreeWidgetItem(m_tree);\n  item->setText(Columns::PathColumn, p_location.m_displayPath);\n  item->setIcon(Columns::PathColumn, getItemIcon(p_location.m_type));\n  item->setData(Columns::PathColumn, Qt::UserRole, p_location.m_path);\n  item->setToolTip(Columns::PathColumn, p_location.m_path);\n\n  if (validLines.size() == 1) {\n    setItemLocationLineAndText(item, validLines[0]);\n  } else if (validLines.size() > 1) {\n    // Add sub items.\n    for (const auto &line : validLines) {\n      auto subItem = new QTreeWidgetItem(item);\n      setItemLocationLineAndText(subItem, line);\n    }\n    item->setExpanded(true);\n  }\n\n  if (m_tree->topLevelItemCount() == 1) {\n    m_tree->setCurrentItem(item);\n  }\n\n  updateItemsCountLabel();\n}\n\nvoid LocationList::startSession(const LocationCallback &p_callback) { m_callback = p_callback; }\n\nLocation LocationList::getItemLocation(const QTreeWidgetItem *p_item) const {\n  Location loc;\n\n  if (!p_item) {\n    return loc;\n  }\n\n  auto paItem = p_item->parent() ? p_item->parent() : p_item;\n  loc.m_path = paItem->data(Columns::PathColumn, Qt::UserRole).toString();\n  loc.m_displayPath = paItem->text(Columns::PathColumn);\n\n  auto lineNumberData = p_item->data(Columns::LineColumn, Qt::UserRole);\n  if (lineNumberData.isValid()) {\n    loc.m_lineNumber = lineNumberData.toInt();\n  }\n  return loc;\n}\n\nvoid LocationList::updateItemsCountLabel() {\n  const auto cnt = m_tree->topLevelItemCount();\n  if (cnt == 0) {\n    m_titleBar->setInfoLabel(\"\");\n  } else {\n    m_titleBar->setInfoLabel(tr(\"%n Item(s)\", \"\", cnt));\n  }\n}\n\nQByteArray LocationList::saveState() const { return m_tree->header()->saveState(); }\n\nvoid LocationList::restoreState(const QByteArray &p_data) {\n  m_tree->header()->restoreState(p_data);\n}\n"
  },
  {
    "path": "src/widgets/locationlist.h",
    "content": "#ifndef LOCATIONLIST_H\n#define LOCATIONLIST_H\n\n#include <functional>\n\n#include <QFrame>\n#include <QIcon>\n#include <QScopedPointer>\n#include <QSharedPointer>\n\n#include <core/location.h>\n\n#include \"navigationmodewrapper.h\"\n\nnamespace vnotex {\nclass TitleBar;\n\nclass LocationList : public QFrame {\n  Q_OBJECT\npublic:\n  typedef std::function<void(const Location &)> LocationCallback;\n\n  explicit LocationList(QWidget *p_parent = nullptr);\n\n  void clear();\n\n  void addLocation(const ComplexLocation &p_location);\n\n  // Start a new session of the location list to set a callback for activation handling.\n  void startSession(const LocationCallback &p_callback);\n\n  QByteArray saveState() const;\n  void restoreState(const QByteArray &p_data);\n\nprivate:\n  enum Columns { PathColumn = 0, LineColumn, TextColumn };\n\n  void setupUI();\n\n  void setupTitleBar(const QString &p_title, QWidget *p_parent = nullptr);\n\n  void setItemLocationLineAndText(QTreeWidgetItem *p_item, const ComplexLocation::Line &p_line);\n\n  const QIcon &getItemIcon(LocationType p_type);\n\n  Location getItemLocation(const QTreeWidgetItem *p_item) const;\n\n  void updateItemsCountLabel();\n\n  TitleBar *m_titleBar = nullptr;\n\n  QTreeWidget *m_tree = nullptr;\n\n  QScopedPointer<NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>> m_navigationWrapper;\n\n  LocationCallback m_callback;\n\n  static QIcon s_bufferIcon;\n\n  static QIcon s_fileIcon;\n\n  static QIcon s_folderIcon;\n\n  static QIcon s_notebookIcon;\n};\n} // namespace vnotex\n\n#endif // LOCATIONLIST_H\n"
  },
  {
    "path": "src/widgets/mainwindow.cpp",
    "content": "#include \"mainwindow.h\"\n\n#include <QApplication>\n#include <QCloseEvent>\n#include <QCoreApplication>\n#include <QDebug>\n#include <QDockWidget>\n#include <QFileInfo>\n#include <QHotkey>\n#include <QProgressDialog>\n#include <QResizeEvent>\n#include <QShortcut>\n#include <QSplitter>\n#include <QStatusBar>\n#include <QSystemTrayIcon>\n#include <QTabBar>\n#include <QTextEdit>\n#include <QTimer>\n#include <QVBoxLayout>\n#include <QVariant>\n#include <QWebEngineView>\n#include <QWindowStateChangeEvent>\n\n#include \"buffermgr.h\"\n#include \"consoleviewer.h\"\n#include \"dialogs/updater.h\"\n#include \"historypanel.h\"\n#include \"locationlist.h\"\n#include \"messageboxhelper.h\"\n#include \"navigationmodemgr.h\"\n#include \"notebookexplorer.h\"\n#include \"notebookmgr.h\"\n#include \"outlineviewer.h\"\n#include \"searchinfoprovider.h\"\n#include \"searchpanel.h\"\n#include \"snippetpanel.h\"\n#include \"statusbarhelper.h\"\n#include \"systemtrayhelper.h\"\n#include \"tagexplorer.h\"\n#include \"titletoolbar.h\"\n#include \"toolbarhelper.h\"\n#include \"viewarea.h\"\n#include \"viewwindow.h\"\n#include \"vnotex.h\"\n#include \"windowspanel.h\"\n#include \"windowsprovider.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/events.h>\n#include <core/exception.h>\n#include <core/fileopenparameters.h>\n#include <core/mainconfig.h>\n#include <core/sessionconfig.h>\n#include <core/thememgr.h>\n#include <core/widgetconfig.h>\n#include <notebook/notebook.h>\n#include <utils/docsutils.h>\n#include <utils/iconutils.h>\n#include <utils/widgetutils.h>\n#include <vtextedit/spellchecker.h>\n#include <widgets/dialogs/exportdialog.h>\n\nusing namespace vnotex;\n\nMainWindow::MainWindow(QWidget *p_parent)\n    : FramelessMainWindowImpl(!ConfigMgr::getInst().getSessionConfig().getSystemTitleBarEnabled(),\n                              p_parent),\n      m_dockWidgetHelper(this) {\n  VNoteX::getInst().setMainWindow(this);\n\n  NavigationModeMgr::init(this);\n\n  setupUI();\n\n  setupShortcuts();\n\n  loadStateAndGeometry();\n\n  m_dockWidgetHelper.postSetup();\n\n  // The signal is particularly useful if your application has to do some last-second cleanup.\n  // Note that no user interaction is possible in this state.\n  connect(qApp, &QCoreApplication::aboutToQuit, this, &MainWindow::closeOnQuit);\n\n  connect(&VNoteX::getInst(), &VNoteX::exportRequested, this, &MainWindow::exportNotes);\n}\n\nMainWindow::~MainWindow() {\n  // Should be desturcted before status bar.\n  delete m_viewArea;\n  m_viewArea = nullptr;\n}\n\nvoid MainWindow::kickOffOnStart(const QStringList &p_paths) {\n  QTimer::singleShot(300, [this, p_paths]() {\n    if (m_dummyWebView) {\n      delete m_dummyWebView;\n      m_dummyWebView = nullptr;\n    }\n\n    loadStateAndGeometry();\n\n    {\n      QProgressDialog proDlg(tr(\"Initializing core components...\"), QString(), 0, 0, this);\n      proDlg.setWindowFlags(proDlg.windowFlags() & ~Qt::WindowCloseButtonHint);\n      proDlg.setWindowModality(Qt::WindowModal);\n      proDlg.setValue(0);\n\n      VNoteX::getInst().initLoad();\n\n      setupSpellCheck();\n    }\n\n    // Do necessary stuffs before emitting this signal.\n    emit mainWindowStarted();\n\n    emit layoutChanged();\n\n    checkNotebooksFailedToLoad();\n\n    loadWidgetsData();\n\n    demoWidget();\n\n    openFiles(p_paths);\n\n    if (MainConfig::isVersionChanged()) {\n      QString tips;\n      try {\n        tips = DocsUtils::getDocText(\"features_tips.txt\");\n      } catch (Exception &p_e) {\n        // Just ignore it.\n        Q_UNUSED(p_e);\n      }\n      if (!tips.isEmpty()) {\n        MessageBoxHelper::notify(MessageBoxHelper::Information, tips, this);\n      }\n\n      const auto file = DocsUtils::getDocFile(QStringLiteral(\"welcome.md\"));\n      if (!file.isEmpty()) {\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_readOnly = true;\n        paras->m_sessionEnabled = false;\n        emit VNoteX::getInst().openFileRequested(file, paras);\n      }\n    }\n\n    if (ConfigMgr::getInst().getCoreConfig().isCheckForUpdatesOnStartEnabled()) {\n      QTimer::singleShot(5 * 60 * 1000, this, &MainWindow::checkForUpdates);\n    }\n  });\n}\n\nvoid MainWindow::openFiles(const QStringList &p_files) {\n  for (const auto &file : p_files) {\n    emit VNoteX::getInst().openFileRequested(file, QSharedPointer<FileOpenParameters>::create());\n  }\n}\n\nvoid MainWindow::setupUI() {\n  setupCentralWidget();\n  setupDocks();\n  setupToolBar();\n  setupStatusBar();\n  setupTipsArea();\n  setupSystemTray();\n\n  m_dockWidgetHelper.activateDock(DockWidgetHelper::NavigationDock);\n\n#if defined(Q_OS_WIN)\n  m_dummyWebView = new QWebEngineView(this);\n  m_dummyWebView->setFixedSize(1, 1);\n#endif\n}\n\nvoid MainWindow::setupStatusBar() {\n  StatusBarHelper::setupStatusBar(this);\n  connect(&VNoteX::getInst(), &VNoteX::statusMessageRequested, statusBar(),\n          &QStatusBar::showMessage);\n}\n\nvoid MainWindow::setupTipsArea() {\n  connect(&VNoteX::getInst(), &VNoteX::tipsRequested, this, &MainWindow::showTips);\n}\n\nvoid MainWindow::createTipsArea() {\n  if (m_tipsLabel) {\n    return;\n  }\n\n  m_tipsLabel = new QLabel(this);\n  m_tipsLabel->setObjectName(\"MainWindowTipsLabel\");\n  m_tipsLabel->hide();\n\n  m_tipsTimer = new QTimer(this);\n  m_tipsTimer->setSingleShot(true);\n  m_tipsTimer->setInterval(3000);\n  connect(m_tipsTimer, &QTimer::timeout, this, [this]() { setTipsAreaVisible(false); });\n}\n\nvoid MainWindow::setupCentralWidget() {\n  m_viewArea = new ViewArea(this);\n  NavigationModeMgr::getInst().registerNavigationTarget(m_viewArea);\n  connect(&VNoteX::getInst().getBufferMgr(), &BufferMgr::bufferRequested, m_viewArea,\n          &ViewArea::openBuffer);\n\n  connect(m_viewArea, &ViewArea::statusWidgetChanged, this, [this](QWidget *p_widget) {\n    if (m_viewAreaStatusWidget) {\n      // Will hide it.\n      statusBar()->removeWidget(m_viewAreaStatusWidget);\n    }\n\n    m_viewAreaStatusWidget = p_widget;\n    if (m_viewAreaStatusWidget) {\n      statusBar()->addPermanentWidget(m_viewAreaStatusWidget);\n      m_viewAreaStatusWidget->show();\n    }\n  });\n  connect(m_viewArea, &ViewArea::currentViewWindowChanged, this,\n          [this]() { setWindowTitle(getViewAreaTitle()); });\n  connect(m_viewArea, &ViewArea::currentViewWindowUpdated, this,\n          [this]() { setWindowTitle(getViewAreaTitle()); });\n\n  {\n    auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n    connect(&notebookMgr, &NotebookMgr::notebookAboutToClose, this,\n            [this](const Notebook *p_notebook) { m_viewArea->close(p_notebook, true); });\n    connect(&notebookMgr, &NotebookMgr::notebookAboutToRemove, this,\n            [this](const Notebook *p_notebook) { m_viewArea->close(p_notebook, true); });\n  }\n\n  setCentralWidget(m_viewArea);\n}\n\nvoid MainWindow::setupDocks() {\n  setupNotebookExplorer();\n\n  setupTagExplorer();\n\n  setupOutlineViewer();\n\n  setupConsoleViewer();\n\n  setupHistoryPanel();\n\n  setupWindowsPanel();\n\n  setupSearchPanel();\n\n  setupSnippetPanel();\n\n  setupLocationList();\n\n  m_dockWidgetHelper.setupDocks();\n\n  NavigationModeMgr::getInst().registerNavigationTarget(&m_dockWidgetHelper);\n}\n\nvoid MainWindow::setupSearchPanel() {\n  m_searchPanel =\n      new SearchPanel(QSharedPointer<SearchInfoProvider>::create(\n                          m_viewArea, m_notebookExplorer, &VNoteX::getInst().getNotebookMgr()),\n                      this);\n  m_searchPanel->setObjectName(\"SearchPanel.vnotex\");\n}\n\nvoid MainWindow::setupSnippetPanel() {\n  m_snippetPanel = new SnippetPanel(this);\n  m_snippetPanel->setObjectName(\"SnippetPanel.vnotex\");\n  connect(m_snippetPanel, &SnippetPanel::applySnippetRequested, this,\n          [this](const QString &p_name) {\n            auto viewWindow = m_viewArea->getCurrentViewWindow();\n            if (viewWindow) {\n              viewWindow->applySnippet(p_name);\n              viewWindow->setFocus();\n            }\n          });\n}\n\nvoid MainWindow::setupHistoryPanel() {\n  m_historyPanel = new HistoryPanel(this);\n  m_historyPanel->setObjectName(\"HistoryPanel.vnotex\");\n}\n\nvoid MainWindow::setupWindowsPanel() {\n  m_windowsPanel = new WindowsPanel(QSharedPointer<WindowsProvider>::create(m_viewArea), this);\n  m_windowsPanel->setObjectName(\"WindowsPanel.vnotex\");\n}\n\nvoid MainWindow::setupLocationList() {\n  m_locationList = new LocationList(this);\n  m_locationList->setObjectName(\"LocationList.vnotex\");\n}\n\nvoid MainWindow::setupNotebookExplorer() {\n  m_notebookExplorer = new NotebookExplorer(this);\n  connect(&VNoteX::getInst(), &VNoteX::newNotebookRequested, m_notebookExplorer,\n          &NotebookExplorer::newNotebook);\n  connect(&VNoteX::getInst(), &VNoteX::newNotebookFromFolderRequested, m_notebookExplorer,\n          &NotebookExplorer::newNotebookFromFolder);\n  connect(&VNoteX::getInst(), &VNoteX::importNotebookRequested, m_notebookExplorer,\n          &NotebookExplorer::importNotebook);\n  connect(&VNoteX::getInst(), &VNoteX::newFolderRequested, m_notebookExplorer,\n          &NotebookExplorer::newFolder);\n  connect(&VNoteX::getInst(), &VNoteX::newNoteRequested, m_notebookExplorer,\n          &NotebookExplorer::newNote);\n  connect(&VNoteX::getInst(), &VNoteX::newQuickNoteRequested, m_notebookExplorer,\n          &NotebookExplorer::newQuickNote);\n  connect(&VNoteX::getInst(), &VNoteX::importFileRequested, m_notebookExplorer,\n          &NotebookExplorer::importFile);\n  connect(&VNoteX::getInst(), &VNoteX::importFolderRequested, m_notebookExplorer,\n          &NotebookExplorer::importFolder);\n  connect(&VNoteX::getInst(), &VNoteX::manageNotebooksRequested, m_notebookExplorer,\n          &NotebookExplorer::manageNotebooks);\n  connect(&VNoteX::getInst(), &VNoteX::locateNodeRequested, this, [this](Node *p_node) {\n    m_dockWidgetHelper.activateDock(DockWidgetHelper::NavigationDock);\n    m_notebookExplorer->locateNode(p_node);\n  });\n\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  connect(&notebookMgr, &NotebookMgr::notebooksUpdated, m_notebookExplorer,\n          &NotebookExplorer::loadNotebooks);\n  connect(&notebookMgr, &NotebookMgr::notebookUpdated, m_notebookExplorer,\n          &NotebookExplorer::reloadNotebook);\n  connect(&notebookMgr, &NotebookMgr::currentNotebookChanged, m_notebookExplorer,\n          &NotebookExplorer::setCurrentNotebook);\n  connect(m_notebookExplorer, &NotebookExplorer::notebookActivated, &notebookMgr,\n          &NotebookMgr::setCurrentNotebook);\n}\n\nvoid MainWindow::closeEvent(QCloseEvent *p_event) {\n  const int toTray = ConfigMgr::getInst().getSessionConfig().getMinimizeToSystemTray();\n  bool isExit = m_requestQuit > -1 || toTray == 0;\n  const int exitCode = m_requestQuit;\n  m_requestQuit = -1;\n\n#if defined(Q_OS_MACOS)\n  // Do not support minimized to tray on macOS.\n  isExit = true;\n#endif\n\n  bool needShowMessage = false;\n  if (!isExit && toTray == -1) {\n    int ret = MessageBoxHelper::questionYesNo(MessageBoxHelper::Question,\n                                              tr(\"Do you want to minimize %1 to system tray \"\n                                                 \"instead of quitting when closed?\")\n                                                  .arg(qApp->applicationName()),\n                                              tr(\"You could change the option in Settings later.\"),\n                                              QString(), this);\n    if (ret == QMessageBox::Yes) {\n      ConfigMgr::getInst().getSessionConfig().setMinimizeToSystemTray(true);\n      needShowMessage = true;\n    } else if (ret == QMessageBox::No) {\n      ConfigMgr::getInst().getSessionConfig().setMinimizeToSystemTray(false);\n      isExit = true;\n    } else {\n      p_event->ignore();\n      return;\n    }\n  }\n\n  if (isVisible()) {\n    // Avoid geometry corruption caused by fullscreen or minimized window.\n    const auto state = windowState();\n    if (state & (Qt::WindowMinimized | Qt::WindowFullScreen)) {\n      if (m_windowOldState & Qt::WindowMaximized) {\n        showMaximized();\n      } else {\n        showNormal();\n      }\n    }\n\n    // Do not expand the content area.\n    setContentAreaExpanded(false);\n\n    saveStateAndGeometry();\n  }\n\n  if (isExit || !m_trayIcon->isVisible()) {\n    // Signal out the close event.\n    auto event = QSharedPointer<Event>::create();\n    event->m_response = true;\n    emit mainWindowClosed(event);\n    if (!event->m_response.toBool()) {\n      // Stop the close.\n      p_event->ignore();\n      return;\n    }\n\n    m_trayIcon->hide();\n\n    FramelessMainWindowImpl::closeEvent(p_event);\n    qApp->exit(exitCode > -1 ? exitCode : 0);\n  } else {\n    emit minimizedToSystemTray();\n\n    hide();\n    p_event->ignore();\n    if (needShowMessage) {\n      m_trayIcon->showMessage(ConfigMgr::c_appName,\n                              tr(\"%1 is still running here.\").arg(ConfigMgr::c_appName));\n    }\n  }\n}\n\nvoid MainWindow::saveStateAndGeometry() {\n  if (m_layoutReset) {\n    return;\n  }\n\n  SessionConfig::MainWindowStateGeometry sg;\n  sg.m_mainState = saveState();\n  sg.m_mainGeometry = saveGeometry();\n  sg.m_visibleDocksBeforeExpand = m_visibleDocksBeforeExpand;\n  sg.m_tagExplorerState = m_tagExplorer->saveState();\n  sg.m_notebookExplorerState = m_notebookExplorer->saveState();\n  sg.m_locationListState = m_locationList->saveState();\n\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  sessionConfig.setMainWindowStateGeometry(sg);\n}\n\nvoid MainWindow::loadStateAndGeometry() {\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  const auto sg = sessionConfig.getMainWindowStateGeometry();\n\n  if (!sg.m_mainGeometry.isEmpty()) {\n    restoreGeometry(sg.m_mainGeometry);\n  }\n\n  if (!sg.m_mainState.isEmpty()) {\n    // Will also restore the state of dock widgets.\n    restoreState(sg.m_mainState);\n  }\n\n  m_visibleDocksBeforeExpand = sg.m_visibleDocksBeforeExpand;\n  if (m_visibleDocksBeforeExpand.isEmpty()) {\n    // Init (or init again if there is no visible dock).\n    m_visibleDocksBeforeExpand = m_dockWidgetHelper.getVisibleDocks();\n  }\n\n  if (!sg.m_tagExplorerState.isEmpty()) {\n    m_tagExplorer->restoreState(sg.m_tagExplorerState);\n  }\n\n  if (!sg.m_notebookExplorerState.isEmpty()) {\n    m_notebookExplorer->restoreState(sg.m_notebookExplorerState);\n  }\n\n  if (!sg.m_locationListState.isEmpty()) {\n    m_locationList->restoreState(sg.m_locationListState);\n  }\n}\n\nvoid MainWindow::resetStateAndGeometry() {\n  if (m_layoutReset) {\n    return;\n  }\n\n  m_layoutReset = true;\n  SessionConfig::MainWindowStateGeometry sg;\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  sessionConfig.setMainWindowStateGeometry(sg);\n}\n\nvoid MainWindow::setContentAreaExpanded(bool p_expanded) {\n  if (m_contentAreaExpanded == p_expanded) {\n    return;\n  }\n\n  m_contentAreaExpanded = p_expanded;\n  if (p_expanded) {\n    // Store the state and hide.\n    m_visibleDocksBeforeExpand = m_dockWidgetHelper.hideDocks();\n  } else {\n    // Restore the state.\n    m_dockWidgetHelper.restoreDocks(m_visibleDocksBeforeExpand);\n  }\n}\n\nbool MainWindow::isContentAreaExpanded() const { return m_contentAreaExpanded; }\n\nvoid MainWindow::demoWidget() {}\n\nQString MainWindow::getViewAreaTitle() const {\n  QString title;\n  const auto win = m_viewArea->getCurrentViewWindow();\n  if (win) {\n    title = win->getName();\n  }\n  return title.isEmpty() ? QString() : QStringLiteral(\"%1 - %2\").arg(title, ConfigMgr::c_appName);\n}\n\nvoid MainWindow::setupOutlineViewer() {\n  // Do not provide title here since there is one in the dock title.\n  m_outlineViewer = new OutlineViewer(QString(), this);\n  m_outlineViewer->setObjectName(\"OutlineViewer.vnotex\");\n\n  // There are OutlineViewers in each ViewWindow. We only need to register navigation mode for the\n  // outline panel.\n  NavigationModeMgr::getInst().registerNavigationTarget(\n      m_outlineViewer->getNavigationModeWrapper());\n\n  connect(m_viewArea, &ViewArea::currentViewWindowChanged, this, [this]() {\n    auto win = m_viewArea->getCurrentViewWindow();\n    m_outlineViewer->setOutlineProvider(win ? win->getOutlineProvider() : nullptr);\n  });\n  connect(m_outlineViewer, &OutlineViewer::focusViewArea, this, &MainWindow::focusViewArea);\n}\n\nvoid MainWindow::setupConsoleViewer() {\n  m_consoleViewer = new ConsoleViewer(this);\n  m_consoleViewer->setObjectName(\"ConsoleViewer.vnotex\");\n\n  connect(&VNoteX::getInst(), &VNoteX::showOutputRequested, this, [this](const QString &p_text) {\n    m_consoleViewer->append(p_text);\n    m_dockWidgetHelper.activateDock(DockWidgetHelper::ConsoleDock);\n  });\n}\n\nconst QVector<QDockWidget *> &MainWindow::getDocks() const { return m_dockWidgetHelper.getDocks(); }\n\nViewArea *MainWindow::getViewArea() const { return m_viewArea; }\n\nvoid MainWindow::focusViewArea() { m_viewArea->focus(); }\n\nNotebookExplorer *MainWindow::getNotebookExplorer() const {\n  Q_ASSERT(m_notebookExplorer);\n  return m_notebookExplorer;\n}\n\nvoid MainWindow::setupToolBar() {\n  const int sz = ConfigMgr::getInst().getCoreConfig().getToolBarIconSize();\n\n  if (isFrameless()) {\n    auto toolBar = new TitleToolBar(tr(\"Global\"), this);\n    toolBar->setIconSize(QSize(sz + 4, sz + 4));\n    ToolBarHelper::setupToolBars(this, toolBar);\n    toolBar->addTitleBarIcons(ToolBarHelper::generateIcon(QStringLiteral(\"minimize.svg\")),\n                              ToolBarHelper::generateIcon(QStringLiteral(\"maximize.svg\")),\n                              ToolBarHelper::generateIcon(QStringLiteral(\"maximize_restore.svg\")),\n                              ToolBarHelper::generateDangerousIcon(QStringLiteral(\"close.svg\")));\n    setTitleBar(toolBar);\n    connect(this, &FramelessMainWindowImpl::windowStateChanged, toolBar,\n            &TitleToolBar::updateMaximizeAct);\n  } else {\n    auto toolBar = new QToolBar(tr(\"Global\"), this);\n    toolBar->setIconSize(QSize(sz, sz));\n    ToolBarHelper::setupToolBars(this, toolBar);\n  }\n\n  // Disable the context menu above tool bar.\n  setContextMenuPolicy(Qt::NoContextMenu);\n}\n\nvoid MainWindow::closeOnQuit() {\n  // No user interaction is available.\n  emit mainWindowClosedOnQuit();\n\n  VNoteX::getInst().getNotebookMgr().close();\n}\n\nvoid MainWindow::setupShortcuts() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  // For cross-platform global shortcuts, the external library QHotkey is used.\n  QKeySequence wakeUp(coreConfig.getShortcut(CoreConfig::Global_WakeUp));\n  if (!wakeUp.isEmpty()) {\n    auto qHotkey = new QHotkey(wakeUp, true, this);\n    connect(qHotkey, &QHotkey::activated, this, &MainWindow::showMainWindow);\n  }\n}\n\nvoid MainWindow::setStayOnTop(bool p_enabled) {\n  bool shown = isVisible();\n  Qt::WindowFlags flags = windowFlags();\n\n  const Qt::WindowFlags magicFlag = Qt::WindowStaysOnTopHint;\n  if (p_enabled) {\n    setWindowFlags(flags | magicFlag);\n  } else {\n    setWindowFlags(flags ^ magicFlag);\n  }\n\n  setWindowFlagsOnUpdate();\n\n  if (shown) {\n    show();\n  }\n}\n\nvoid MainWindow::setupSystemTray() {\n  m_trayIcon = SystemTrayHelper::setupSystemTray(this);\n  m_trayIcon->show();\n}\n\nvoid MainWindow::restart() {\n  m_requestQuit = RESTART_EXIT_CODE;\n  close();\n}\n\nvoid MainWindow::changeEvent(QEvent *p_event) {\n  if (p_event->type() == QEvent::WindowStateChange) {\n    QWindowStateChangeEvent *eve = static_cast<QWindowStateChangeEvent *>(p_event);\n    m_windowOldState = eve->oldState();\n  }\n\n  FramelessMainWindowImpl::changeEvent(p_event);\n}\n\nvoid MainWindow::showMainWindow() {\n  if (isMinimized()) {\n    if (m_windowOldState & Qt::WindowMaximized) {\n      showMaximized();\n    } else if (m_windowOldState & Qt::WindowFullScreen) {\n      showFullScreen();\n    } else {\n      showNormal();\n    }\n  } else {\n    show();\n    // Need to call raise() in macOS.\n    raise();\n  }\n\n  activateWindow();\n}\n\nvoid MainWindow::quitApp() {\n  m_requestQuit = 0;\n  close();\n}\n\nvoid MainWindow::updateDockWidgetTabBar() { m_dockWidgetHelper.updateDockWidgetTabBar(); }\n\nvoid MainWindow::exportNotes() {\n  if (m_exportDialog) {\n    MessageBoxHelper::notify(MessageBoxHelper::Information,\n                             tr(\"There is one export dialog running. Please close it first.\"),\n                             this);\n    m_exportDialog->activateWindow();\n    m_exportDialog->show();\n    return;\n  }\n\n  auto currentNotebook = m_notebookExplorer->currentNotebook().data();\n  auto viewWindow = m_viewArea->getCurrentViewWindow();\n  auto folderNode = m_notebookExplorer->currentExploredFolderNode();\n  if (folderNode && (folderNode->isRoot())) {\n    folderNode = nullptr;\n  }\n  auto noteNode = m_notebookExplorer->currentExploredNode();\n  if (noteNode && !noteNode->hasContent()) {\n    noteNode = nullptr;\n  }\n\n  m_exportDialog = new ExportDialog(currentNotebook, folderNode, noteNode,\n                                    viewWindow ? viewWindow->getBuffer() : nullptr, nullptr);\n  connect(m_exportDialog, &QDialog::finished, this, [this]() {\n    m_exportDialog->deleteLater();\n    m_exportDialog = nullptr;\n  });\n\n  // Let it be able to run at background.\n  m_exportDialog->show();\n}\n\nvoid MainWindow::showTips(const QString &p_message, int p_timeoutMilliseconds) {\n  createTipsArea();\n\n  m_tipsTimer->stop();\n\n  setTipsAreaVisible(false);\n\n  if (p_message.isEmpty()) {\n    return;\n  }\n\n  m_tipsLabel->setText(p_message);\n  setTipsAreaVisible(true);\n\n  m_tipsTimer->start(p_timeoutMilliseconds);\n}\n\nvoid MainWindow::setTipsAreaVisible(bool p_visible) {\n  Q_ASSERT(m_tipsLabel);\n  if (p_visible) {\n    m_tipsLabel->adjustSize();\n    int labelW = m_tipsLabel->width();\n    int labelH = m_tipsLabel->height();\n    int x = (width() - labelW) / 2;\n    int y = (height() - labelH) / 3;\n    if (x < 0) {\n      x = 0;\n    }\n    if (y < 0) {\n      y = 0;\n    }\n\n    m_tipsLabel->move(x, y);\n    m_tipsLabel->show();\n  } else {\n    m_tipsLabel->hide();\n  }\n}\n\nLocationList *MainWindow::getLocationList() const { return m_locationList; }\n\nvoid MainWindow::setLocationListVisible(bool p_visible) {\n  if (p_visible) {\n    m_dockWidgetHelper.activateDock(DockWidgetHelper::LocationListDock);\n  } else {\n    m_dockWidgetHelper.getDock(DockWidgetHelper::LocationListDock)->hide();\n  }\n}\n\nvoid MainWindow::toggleLocationListVisible() {\n  bool visible = m_dockWidgetHelper.getDock(DockWidgetHelper::LocationListDock)->isVisible();\n  setLocationListVisible(!visible);\n}\n\nvoid MainWindow::setupSpellCheck() {\n  const auto &configMgr = ConfigMgr::getInst();\n  vte::SpellChecker::addDictionaryCustomSearchPaths(QStringList() << configMgr.getUserDictsFolder()\n                                                                  << configMgr.getAppDictsFolder());\n}\n\nvoid MainWindow::checkForUpdates() {\n  Updater::checkForUpdates(\n      this, [this](bool p_hasUpdate, const QString &p_version, const QString &p_errMsg) {\n        if (p_version.isEmpty()) {\n          statusBar()->showMessage(tr(\"Failed to check for updates (%1)\").arg(p_errMsg), 3000);\n        } else if (p_hasUpdate) {\n          statusBar()->showMessage(tr(\"Updates available: %1\").arg(p_version));\n        }\n      });\n}\n\nvoid MainWindow::checkNotebooksFailedToLoad() {\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  const auto &notebooks = notebookMgr.getNotebooksFailedToLoad();\n  if (notebooks.isEmpty()) {\n    return;\n  }\n\n  int ret = MessageBoxHelper::questionYesNo(\n      MessageBoxHelper::Warning, tr(\"Failed to load %n notebook(s).\", \"\", notebooks.size()),\n      tr(\"These notebooks may be moved or deleted. It is recommended to remove \"\n         \"them from configuration and open them with the correct root folder path later.\\n\"\n         \"Remove them from the configuration?\"),\n      notebooks.join(QLatin1Char('\\n')), this);\n  if (ret == QMessageBox::Yes) {\n    notebookMgr.clearNotebooksFailedToLoad();\n  }\n}\n\nvoid MainWindow::setupTagExplorer() {\n  m_tagExplorer = new TagExplorer(this);\n  connect(&VNoteX::getInst().getNotebookMgr(), &NotebookMgr::currentNotebookChanged, m_tagExplorer,\n          &TagExplorer::setNotebook);\n}\n\nvoid MainWindow::loadWidgetsData() {\n  m_historyPanel->initialize();\n\n  m_snippetPanel->initialize();\n}\n"
  },
  {
    "path": "src/widgets/mainwindow.h",
    "content": "#ifndef MAINWINDOW_H\n#define MAINWINDOW_H\n\n#include \"framelessmainwindow/framelessmainwindowimpl.h\"\n\n#include <QBitArray>\n#include <QSet>\n#include <QSharedPointer>\n\n#include \"dockwidgethelper.h\"\n\nclass QDockWidget;\nclass QSystemTrayIcon;\nclass QTimer;\nclass QLabel;\nclass QTextEdit;\nclass QWebEngineView;\n\nnamespace vnotex {\nclass NotebookExplorer;\nclass TagExplorer;\nclass ViewArea;\nclass Event;\nclass OutlineViewer;\nclass LocationList;\nclass SearchPanel;\nclass SnippetPanel;\nclass HistoryPanel;\nclass WindowsPanel;\nclass ExportDialog;\nclass ConsoleViewer;\n\nenum { RESTART_EXIT_CODE = 1000 };\n\nclass MainWindow : public FramelessMainWindowImpl {\n  Q_OBJECT\npublic:\n  friend class DockWidgetHelper;\n\n  explicit MainWindow(QWidget *p_parent = nullptr);\n\n  ~MainWindow();\n\n  MainWindow(const MainWindow &) = delete;\n  void operator=(const MainWindow &) = delete;\n\n  void kickOffOnStart(const QStringList &p_paths);\n\n  void resetStateAndGeometry();\n\n  const QVector<QDockWidget *> &getDocks() const;\n\n  ViewArea *getViewArea() const;\n\n  NotebookExplorer *getNotebookExplorer() const;\n\n  void setContentAreaExpanded(bool p_expanded);\n  // Should be called after MainWindow is shown.\n  bool isContentAreaExpanded() const;\n\n  void focusViewArea();\n\n  void setStayOnTop(bool p_enabled);\n\n  void restart();\n\n  void showMainWindow();\n\n  void quitApp();\n\n  void openFiles(const QStringList &p_files);\n\n  LocationList *getLocationList() const;\n\n  void setLocationListVisible(bool p_visible);\n\n  void toggleLocationListVisible();\n\n  void updateDockWidgetTabBar();\n\nsignals:\n  void mainWindowStarted();\n\n  // @m_response of @p_event: true to continue the close, false to stop the close.\n  void mainWindowClosed(const QSharedPointer<Event> &p_event);\n\n  void minimizedToSystemTray();\n\n  // No user interaction is available.\n  void mainWindowClosedOnQuit();\n\n  void layoutChanged();\n\nprotected:\n  void closeEvent(QCloseEvent *p_event) Q_DECL_OVERRIDE;\n\n  void changeEvent(QEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void closeOnQuit();\n\n  void exportNotes();\n\n  void showTips(const QString &p_message, int p_timeoutMilliseconds);\n\nprivate:\n  void setupUI();\n\n  void setupCentralWidget();\n\n  void setupOutlineViewer();\n\n  void setupConsoleViewer();\n\n  void setupSearchPanel();\n\n  void setupLocationList();\n\n  void setupSnippetPanel();\n\n  void setupHistoryPanel();\n\n  void setupWindowsPanel();\n\n  void setupNotebookExplorer();\n\n  void setupTagExplorer();\n\n  void setupDocks();\n\n  void setupStatusBar();\n\n  void setupTipsArea();\n\n  void createTipsArea();\n\n  void saveStateAndGeometry();\n\n  void loadStateAndGeometry();\n\n  // Used to test widget in development.\n  void demoWidget();\n\n  QString getViewAreaTitle() const;\n\n  void setupToolBar();\n\n  void setupShortcuts();\n\n  void setupSystemTray();\n\n  void setTipsAreaVisible(bool p_visible);\n\n  void setupSpellCheck();\n\n  void checkForUpdates();\n\n  void checkNotebooksFailedToLoad();\n\n  void loadWidgetsData();\n\n  // WebView to handle OpenGL blinking on Windows.\n  QWebEngineView *m_dummyWebView = nullptr;\n\n  DockWidgetHelper m_dockWidgetHelper;\n\n  NotebookExplorer *m_notebookExplorer = nullptr;\n\n  TagExplorer *m_tagExplorer = nullptr;\n\n  ViewArea *m_viewArea = nullptr;\n\n  QWidget *m_viewAreaStatusWidget = nullptr;\n\n  OutlineViewer *m_outlineViewer = nullptr;\n\n  ConsoleViewer *m_consoleViewer = nullptr;\n\n  LocationList *m_locationList = nullptr;\n\n  SearchPanel *m_searchPanel = nullptr;\n\n  SnippetPanel *m_snippetPanel = nullptr;\n\n  HistoryPanel *m_historyPanel = nullptr;\n\n  WindowsPanel *m_windowsPanel = nullptr;\n\n  ExportDialog *m_exportDialog = nullptr;\n\n  QSystemTrayIcon *m_trayIcon = nullptr;\n\n  QLabel *m_tipsLabel = nullptr;\n\n  QTimer *m_tipsTimer = nullptr;\n\n  bool m_layoutReset = false;\n\n  // -1: do not request to quit;\n  // 0 and above: exit code.\n  int m_requestQuit = -1;\n\n  Qt::WindowStates m_windowOldState = Qt::WindowMinimized;\n\n  QStringList m_visibleDocksBeforeExpand;\n\n  bool m_contentAreaExpanded = false;\n};\n} // namespace vnotex\n\n#endif // MAINWINDOW_H\n"
  },
  {
    "path": "src/widgets/markdownviewwindow.cpp",
    "content": "#include \"markdownviewwindow.h\"\n\n#include <QActionGroup>\n#include <QApplication>\n#include <QCoreApplication>\n#include <QEvent>\n#include <QLabel>\n#include <QMenu>\n#include <QPrinter>\n#include <QProgressDialog>\n#include <QScrollBar>\n#include <QSplitter>\n#include <QStackedWidget>\n#include <QTimer>\n#include <QToolBar>\n#include <QWebEngineSettings>\n\n#include \"dialogs/deleteconfirmdialog.h\"\n#include \"editors/graphvizhelper.h\"\n#include \"editors/markdowneditor.h\"\n#include \"editors/markdownviewer.h\"\n#include \"editors/markdownvieweradapter.h\"\n#include \"editors/plantumlhelper.h\"\n#include \"editors/previewhelper.h\"\n#include \"editors/statuswidget.h\"\n#include \"findandreplacewidget.h\"\n#include \"messageboxhelper.h\"\n#include \"outlineprovider.h\"\n#include \"textviewwindowhelper.h\"\n#include \"toolbarhelper.h\"\n#include <buffer/markdownbuffer.h>\n#include <core/coreconfig.h>\n#include <core/editorconfig.h>\n#include <core/exception.h>\n#include <core/fileopenparameters.h>\n#include <core/htmltemplatehelper.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <imagehost/imagehost.h>\n#include <imagehost/imagehostmgr.h>\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n#include <utils/printutils.h>\n#include <utils/widgetutils.h>\n#include <vtextedit/markdowneditorconfig.h>\n#include <vtextedit/pegmarkdownhighlighter.h>\n#include <vtextedit/vtextedit.h>\n\nusing namespace vnotex;\n\nMarkdownViewWindow::MarkdownViewWindow(QWidget *p_parent) : ViewWindow(p_parent) {\n  // Need to setup before setupUI() since the tool bar action will need the provider.\n  setupOutlineProvider();\n\n  setupUI();\n\n  setupPreviewHelper();\n}\n\nMarkdownViewWindow::~MarkdownViewWindow() {\n  if (m_textEditorStatusWidget) {\n    getMainStatusWidget()->removeWidget(m_textEditorStatusWidget.get());\n    m_textEditorStatusWidget->setParent(nullptr);\n  }\n\n  if (m_viewerStatusWidget) {\n    getMainStatusWidget()->removeWidget(m_viewerStatusWidget.get());\n    m_viewerStatusWidget->setParent(nullptr);\n  }\n\n  m_mainStatusWidget->setParent(nullptr);\n}\n\nvoid MarkdownViewWindow::setupUI() {\n  // Central widget.\n  m_splitter = new QSplitter(this);\n  m_splitter->setContentsMargins(0, 0, 0, 0);\n  setCentralWidget(m_splitter);\n\n  // Get the focus event from splitter.\n  m_splitter->installEventFilter(this);\n\n  // Status widget.\n  // We use a QTabWidget as status widget since we have two widgets for different modes.\n  {\n    auto statusWidget = QSharedPointer<StatusWidget>::create(this);\n    m_mainStatusWidget = QSharedPointer<QStackedWidget>::create(this);\n    m_mainStatusWidget->setContentsMargins(0, 0, 0, 0);\n    statusWidget->setEditorStatusWidget(m_mainStatusWidget);\n    setStatusWidget(statusWidget);\n  }\n\n  setupToolBar();\n}\n\nvoid MarkdownViewWindow::setMode(ViewWindowMode p_mode) { setModeInternal(p_mode, true); }\n\nvoid MarkdownViewWindow::setModeInternal(ViewWindowMode p_mode, bool p_syncBuffer) {\n  if (p_mode == m_mode) {\n    return;\n  }\n\n  m_previousMode = m_mode;\n  m_mode = p_mode;\n\n  switch (m_mode) {\n  case ViewWindowMode::Read: {\n    if (!m_viewer) {\n      setupViewer();\n      if (p_syncBuffer) {\n        syncViewerFromBuffer(true);\n      }\n    }\n\n    // Avoid focus glitch.\n    m_viewer->show();\n    m_viewer->setFocus();\n\n    if (m_editor) {\n      m_editor->hide();\n    }\n\n    getMainStatusWidget()->setCurrentWidget(m_viewerStatusWidget.get());\n    break;\n  }\n\n  case ViewWindowMode::Edit: {\n    if (!m_editor) {\n      // We need viewer to preview.\n      if (!m_viewer) {\n        setupViewer();\n\n        // Must show the viewer to let it init with the correct DPI.\n        // Will hide it when ready().\n        m_viewer->show();\n      }\n\n      setupTextEditor();\n\n      if (p_syncBuffer) {\n        syncTextEditorFromBuffer(true);\n      }\n\n      m_editor->show();\n\n      setEditViewMode(\n          ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig().getEditViewMode());\n    } else {\n      setEditViewMode(m_editViewMode);\n    }\n\n    // Avoid focus glitch.\n    m_editor->show();\n    m_editor->setFocus();\n\n    getMainStatusWidget()->setCurrentWidget(m_textEditorStatusWidget.get());\n    break;\n  }\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  // Let editor to show, or scrollToLine will not work correctly.\n  QCoreApplication::processEvents();\n\n  if (p_syncBuffer) {\n    doSyncEditorFromBufferContent(true);\n  }\n\n  emit modeChanged();\n\n  if (m_findAndReplace && m_findAndReplace->isVisible()) {\n    m_findAndReplace->setReplaceEnabled(!isReadMode());\n  }\n}\n\nvoid MarkdownViewWindow::setModified(bool p_modified) {\n  if (m_editor) {\n    m_editor->setModified(p_modified);\n  }\n}\n\nvoid MarkdownViewWindow::handleEditorConfigChange() {\n  if (updateConfigRevision()) {\n    const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n    const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();\n\n    updatePreviewHelperFromConfig(markdownEditorConfig);\n\n    HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig);\n\n    if (m_editor) {\n      auto config = createMarkdownEditorConfig(editorConfig, markdownEditorConfig);\n      m_editor->setConfig(config);\n\n      m_editor->updateFromConfig();\n\n      updateEditorFromConfig();\n    }\n\n    updateWebViewerConfig();\n  }\n}\n\nQString MarkdownViewWindow::getLatestContent() const {\n  Q_ASSERT(m_editor);\n  return m_editor->getText();\n}\n\nvoid MarkdownViewWindow::syncEditorFromBuffer() {\n  m_bufferRevision = getBuffer() ? getBuffer()->getRevision() : 0;\n  syncTextEditorFromBuffer(false);\n  syncViewerFromBuffer(false);\n}\n\nvoid MarkdownViewWindow::syncEditorFromBufferContent() { doSyncEditorFromBufferContent(false); }\n\nvoid MarkdownViewWindow::doSyncEditorFromBufferContent(bool p_syncPosition) {\n  auto buffer = getBuffer();\n  Q_ASSERT(buffer);\n  // m_bufferRevision may already be the same as the buffer revision, in which\n  // case we will call editor or viewer to update its content.\n  m_bufferRevision = buffer->getRevision();\n  switch (m_mode) {\n  case ViewWindowMode::Read:\n    syncViewerFromBufferContent(p_syncPosition);\n    break;\n\n  case ViewWindowMode::Edit:\n    syncTextEditorFromBufferContent(p_syncPosition);\n    break;\n\n  default:\n    Q_ASSERT(false);\n  }\n}\n\nvoid MarkdownViewWindow::handleBufferChangedInternal(\n    const QSharedPointer<FileOpenParameters> &p_paras) {\n  if (getBuffer()) {\n    // Will sync buffer right behind this.\n    setModeInternal(p_paras ? p_paras->m_mode : ViewWindowMode::Read, false);\n  }\n\n  TextViewWindowHelper::handleBufferChanged(this);\n\n  handleFileOpenParameters(p_paras, false);\n}\n\nvoid MarkdownViewWindow::setupToolBar() {\n  auto toolBar = createToolBar(this);\n  addToolBar(toolBar);\n\n  addAction(toolBar, ViewWindowToolBarHelper::EditReadDiscard);\n  addAction(toolBar, ViewWindowToolBarHelper::Save);\n  addAction(toolBar, ViewWindowToolBarHelper::ViewMode);\n  addAction(toolBar, ViewWindowToolBarHelper::WordCount);\n\n  toolBar->addSeparator();\n\n  addAction(toolBar, ViewWindowToolBarHelper::Attachment);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Tag);\n\n  toolBar->addSeparator();\n\n  addAction(toolBar, ViewWindowToolBarHelper::SectionNumber);\n\n  {\n    auto act = addAction(toolBar, ViewWindowToolBarHelper::InplacePreview);\n    connect(act, &QAction::triggered, this, [this](bool p_checked) {\n      if (!isReadMode()) {\n        m_editor->setInplacePreviewEnabled(p_checked);\n      }\n    });\n    connect(this, &ViewWindow::modeChanged, this,\n            [this, act]() { act->setEnabled(inModeCanInsert() && getBuffer()); });\n  }\n\n  addAction(toolBar, ViewWindowToolBarHelper::ImageHost);\n\n  toolBar->addSeparator();\n\n  addAction(toolBar, ViewWindowToolBarHelper::TypeHeading);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeBold);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeItalic);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeStrikethrough);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeMark);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeUnorderedList);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeOrderedList);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeTodoList);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeCheckedTodoList);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeCode);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeCodeBlock);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeMath);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeMathBlock);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeQuote);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeLink);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeImage);\n  addAction(toolBar, ViewWindowToolBarHelper::TypeTable);\n\n  ToolBarHelper::addSpacer(toolBar);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Outline);\n  addAction(toolBar, ViewWindowToolBarHelper::FindAndReplace);\n  addAction(toolBar, ViewWindowToolBarHelper::Print);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Debug);\n}\n\nvoid MarkdownViewWindow::setupTextEditor() {\n  Q_ASSERT(!m_editor);\n  Q_ASSERT(m_viewer);\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();\n\n  updateConfigRevision();\n\n  m_editor = new MarkdownEditor(\n      markdownEditorConfig, createMarkdownEditorConfig(editorConfig, markdownEditorConfig),\n      createMarkdownEditorParameters(editorConfig, markdownEditorConfig), this);\n  // Always editor comes first.\n  m_splitter->insertWidget(0, m_editor);\n\n  TextViewWindowHelper::connectEditor(this);\n\n  // Status widget.\n  m_textEditorStatusWidget = m_editor->statusWidget();\n  getMainStatusWidget()->addWidget(m_textEditorStatusWidget.get());\n  m_textEditorStatusWidget->show();\n\n  m_previewHelper->setMarkdownEditor(m_editor);\n  m_editor->setPreviewHelper(m_previewHelper);\n\n  m_editor->setImageHost(m_imageHost);\n\n  updateEditorFromConfig();\n\n  // Connect viewer and editor.\n  connect(adapter(), &MarkdownViewerAdapter::ready, m_editor->getHighlighter(),\n          &vte::PegMarkdownHighlighter::updateHighlight);\n  connect(m_editor, &MarkdownEditor::htmlToMarkdownRequested, adapter(),\n          &MarkdownViewerAdapter::htmlToMarkdownRequested);\n  connect(adapter(), &MarkdownViewerAdapter::htmlToMarkdownReady, m_editor,\n          &MarkdownEditor::handleHtmlToMarkdownData);\n  connect(m_editor, &vte::VMarkdownEditor::externalCodeBlockHighlightRequested, this,\n          &MarkdownViewWindow::handleExternalCodeBlockHighlightRequest);\n  connect(adapter(), &MarkdownViewerAdapter::highlightCodeBlockReady, m_editor,\n          &vte::VMarkdownEditor::handleExternalCodeBlockHighlightData);\n\n  // Connect outline pipeline.\n  connect(m_editor, &MarkdownEditor::headingsChanged, this, [this]() {\n    if (!isReadMode()) {\n      auto outline = headingsToOutline(m_editor->getHeadings());\n      m_outlineProvider->setOutline(outline);\n    }\n  });\n  connect(m_editor, &MarkdownEditor::currentHeadingChanged, this, [this]() {\n    if (!isReadMode()) {\n      m_outlineProvider->setCurrentHeadingIndex(m_editor->getCurrentHeadingIndex());\n    }\n  });\n\n  connect(m_editor, &MarkdownEditor::readRequested, this, [this]() { read(true); });\n\n  connect(m_editor, &MarkdownEditor::applySnippetRequested, this,\n          QOverload<>::of(&MarkdownViewWindow::applySnippet));\n\n#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))\n  connect(m_viewer, &MarkdownViewer::printFinished, this, &MarkdownViewWindow::onPrintFinished);\n#endif\n}\n\nQStackedWidget *MarkdownViewWindow::getMainStatusWidget() const {\n  return m_mainStatusWidget.data();\n}\n\nbool MarkdownViewWindow::eventFilter(QObject *p_obj, QEvent *p_event) {\n  if (p_obj == m_splitter) {\n    if (p_event->type() == QEvent::FocusIn) {\n      focusEditor();\n    }\n  }\n\n  return ViewWindow::eventFilter(p_obj, p_event);\n}\n\nvoid MarkdownViewWindow::focusEditor() {\n  switch (m_mode) {\n  case ViewWindowMode::Read:\n    m_viewer->setFocus();\n    break;\n\n  case ViewWindowMode::Edit:\n    m_editor->setFocus();\n    break;\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n}\n\nvoid MarkdownViewWindow::setupViewer() {\n  Q_ASSERT(!m_viewer);\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();\n\n  updateConfigRevision();\n\n  HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownEditorConfig);\n\n  auto adapter = new MarkdownViewerAdapter(this);\n  m_viewer = new MarkdownViewer(adapter, this, VNoteX::getInst().getThemeMgr().getBaseBackground(),\n                                markdownEditorConfig.getZoomFactorInReadMode(), this);\n  m_splitter->addWidget(m_viewer);\n\n  // Status widget.\n  {\n    // TODO: implement a real status widget for viewer.\n    auto label = new QLabel(tr(\"Markdown Viewer\"), this);\n    label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);\n    m_viewerStatusWidget.reset(label);\n    getMainStatusWidget()->addWidget(m_viewerStatusWidget.get());\n    m_viewerStatusWidget->show();\n  }\n\n  m_viewer->setPreviewHelper(m_previewHelper);\n\n  connect(m_viewer, &MarkdownViewer::zoomFactorChanged, this, [this](qreal p_factor) {\n    auto &markdownEditorConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n    markdownEditorConfig.setZoomFactorInReadMode(p_factor);\n    showZoomFactor(p_factor);\n  });\n\n  connect(m_viewer, &WebViewer::linkHovered, this,\n          [this](const QString &p_url) { showMessage(p_url); });\n\n  connect(m_viewer, &MarkdownViewer::editRequested, this, [this]() { edit(); });\n\n  // Connect outline pipeline.\n  connect(adapter, &MarkdownViewerAdapter::headingsChanged, this, [this]() {\n    if (isReadMode()) {\n      auto outline = headingsToOutline(this->adapter()->getHeadings());\n      m_outlineProvider->setOutline(outline);\n    }\n  });\n  connect(adapter, &MarkdownViewerAdapter::currentHeadingChanged, this, [this]() {\n    if (isReadMode()) {\n      m_outlineProvider->setCurrentHeadingIndex(this->adapter()->getCurrentHeadingIndex());\n    }\n  });\n  connect(adapter, &MarkdownViewerAdapter::findTextReady, this,\n          [this](const QStringList &p_texts, int p_totalMatches, int p_currentMatchIndex) {\n            this->showFindResult(p_texts, p_totalMatches, p_currentMatchIndex);\n          });\n  connect(adapter, &MarkdownViewerAdapter::ready, this, [this]() {\n    m_viewerReady = true;\n\n    if (m_mode == ViewWindowMode::Edit) {\n      setEditViewMode(m_editViewMode);\n    }\n  });\n}\n\nvoid MarkdownViewWindow::syncTextEditorFromBuffer(bool p_syncPositionFromReadMode) {\n  if (!m_editor) {\n    return;\n  }\n\n  const bool old = m_propogateEditorToBuffer;\n  m_propogateEditorToBuffer = false;\n\n  auto buffer = getBuffer();\n  m_editor->setBuffer(buffer);\n  if (buffer) {\n    m_editor->setReadOnly(buffer->isReadOnly());\n    m_editor->setBasePath(buffer->getResourcePath());\n    m_editor->setText(buffer->getContent());\n    m_editor->setModified(buffer->isModified());\n\n    int lineNumber = -1;\n    if (p_syncPositionFromReadMode) {\n      lineNumber = getReadLineNumber();\n    }\n    m_editor->scrollToLine(lineNumber, false);\n  } else {\n    m_editor->setReadOnly(true);\n    m_editor->setBasePath(\"\");\n    m_editor->setText(\"\");\n    m_editor->setModified(false);\n  }\n\n  m_textEditorBufferRevision = m_bufferRevision;\n  m_propogateEditorToBuffer = old;\n}\n\nvoid MarkdownViewWindow::syncViewerFromBuffer(bool p_syncPositionFromEditMode) {\n  if (!m_viewer) {\n    return;\n  }\n\n  auto buffer = getBuffer();\n  if (buffer) {\n    int lineNumber = -1;\n    if (p_syncPositionFromEditMode) {\n      lineNumber = getEditLineNumber();\n    }\n\n    // TODO: Check buffer for last position recover.\n\n    // Use getPath() instead of getBasePath() to make in-page anchor work.\n    adapter()->reset();\n    m_viewer->setHtml(HtmlTemplateHelper::getMarkdownViewerTemplate(),\n                      PathUtils::pathToUrl(buffer->getContentPath()));\n    adapter()->setText(m_bufferRevision, buffer->getContent(), lineNumber);\n  } else {\n    adapter()->reset();\n    m_viewer->setHtml(\"\");\n    adapter()->setText(0, \"\", -1);\n  }\n  m_viewerBufferRevision = m_bufferRevision;\n}\n\nvoid MarkdownViewWindow::syncTextEditorFromBufferContent(bool p_syncPosition) {\n  Q_ASSERT(m_editor);\n  if (m_textEditorBufferRevision == m_bufferRevision) {\n    if (p_syncPosition) {\n      m_editor->scrollToLine(getReadLineNumber(), false);\n    }\n    return;\n  }\n\n  const bool old = m_propogateEditorToBuffer;\n  m_propogateEditorToBuffer = false;\n\n  auto buffer = getBuffer();\n  Q_ASSERT(buffer);\n  m_editor->setText(buffer->getContent());\n  m_editor->setModified(buffer->isModified());\n\n  m_textEditorBufferRevision = m_bufferRevision;\n  m_propogateEditorToBuffer = old;\n}\n\nvoid MarkdownViewWindow::syncViewerFromBufferContent(bool p_syncPosition) {\n  Q_ASSERT(m_viewer);\n  if (m_viewerBufferRevision == m_bufferRevision) {\n    if (p_syncPosition) {\n      adapter()->scrollToPosition(MarkdownViewerAdapter::Position(getEditLineNumber(), QString()));\n    }\n    return;\n  }\n\n  auto buffer = getBuffer();\n  Q_ASSERT(buffer);\n  adapter()->setText(m_bufferRevision, buffer->getContent(),\n                     p_syncPosition ? getEditLineNumber() : -1);\n\n  m_viewerBufferRevision = m_bufferRevision;\n}\n\nvoid MarkdownViewWindow::setBufferRevisionAfterInvalidation(int p_bufferRevision) {\n  m_bufferRevision = p_bufferRevision;\n  switch (m_mode) {\n  case ViewWindowMode::Edit:\n    m_textEditorBufferRevision = p_bufferRevision;\n    break;\n\n  case ViewWindowMode::Read:\n    m_viewerBufferRevision = p_bufferRevision;\n    break;\n\n  default:\n    Q_ASSERT(false);\n  }\n}\n\nMarkdownViewerAdapter *MarkdownViewWindow::adapter() const {\n  if (m_viewer) {\n    return m_viewer->adapter();\n  }\n\n  return nullptr;\n}\n\nint MarkdownViewWindow::getEditLineNumber() const {\n  if (m_previousMode == ViewWindowMode::Edit) {\n    if (m_editor) {\n      return m_editor->getTopLine();\n    }\n  }\n\n  return -1;\n}\n\nint MarkdownViewWindow::getReadLineNumber() const {\n  if (m_previousMode == ViewWindowMode::Read) {\n    if (m_viewer) {\n      return adapter()->getTopLineNumber();\n    }\n  }\n\n  return -1;\n}\n\nvoid MarkdownViewWindow::handleTypeAction(TypeAction p_action) {\n  Q_ASSERT(inModeCanInsert() && m_editor);\n  Q_ASSERT(!getBuffer()->isReadOnly());\n  switch (p_action) {\n  case TypeAction::Heading1:\n    Q_FALLTHROUGH();\n  case TypeAction::Heading2:\n    Q_FALLTHROUGH();\n  case TypeAction::Heading3:\n    Q_FALLTHROUGH();\n  case TypeAction::Heading4:\n    Q_FALLTHROUGH();\n  case TypeAction::Heading5:\n    Q_FALLTHROUGH();\n  case TypeAction::Heading6:\n    m_editor->typeHeading(p_action - TypeAction::Heading1 + 1);\n    break;\n\n  case TypeAction::HeadingNone:\n    m_editor->typeHeading(0);\n    break;\n\n  case TypeAction::Bold:\n    m_editor->typeBold();\n    break;\n\n  case TypeAction::Italic:\n    m_editor->typeItalic();\n    break;\n\n  case TypeAction::Strikethrough:\n    m_editor->typeStrikethrough();\n    break;\n\n  case TypeAction::Mark:\n    m_editor->typeMark();\n    break;\n\n  case TypeAction::UnorderedList:\n    m_editor->typeUnorderedList();\n    break;\n\n  case TypeAction::OrderedList:\n    m_editor->typeOrderedList();\n    break;\n\n  case TypeAction::TodoList:\n    m_editor->typeTodoList(false);\n    break;\n\n  case TypeAction::CheckedTodoList:\n    m_editor->typeTodoList(true);\n    break;\n\n  case TypeAction::Code:\n    m_editor->typeCode();\n    break;\n\n  case TypeAction::CodeBlock:\n    m_editor->typeCodeBlock();\n    break;\n\n  case TypeAction::Math:\n    m_editor->typeMath();\n    break;\n\n  case TypeAction::MathBlock:\n    m_editor->typeMathBlock();\n    break;\n\n  case TypeAction::Quote:\n    m_editor->typeQuote();\n    break;\n\n  case TypeAction::Link:\n    m_editor->typeLink();\n    break;\n\n  case TypeAction::Image:\n    m_editor->typeImage();\n    break;\n\n  case TypeAction::Table:\n    m_editor->typeTable();\n    break;\n\n  default:\n    qWarning() << \"TypeAction not handled\" << p_action;\n    break;\n  }\n}\n\nvoid MarkdownViewWindow::handleSectionNumberOverride(OverrideState p_state) {\n  if (!isReadMode()) {\n    m_editor->overrideSectionNumber(p_state);\n  }\n}\n\nvoid MarkdownViewWindow::detachFromBufferInternal() {\n  auto buffer = getBuffer();\n  if (buffer && buffer->getAttachViewWindowCount() == 1) {\n    const auto state = buffer->state();\n    if (state == Buffer::StateFlag::Normal || state == Buffer::StateFlag::Discarded) {\n      // We are the last ViewWindow of this buffer. Clear obsolete images.\n      clearObsoleteImages();\n    }\n  }\n}\n\nvoid MarkdownViewWindow::clearObsoleteImages() {\n  const auto obsoleteImages = static_cast<MarkdownBuffer *>(getBuffer())->clearObsoleteImages();\n  if (obsoleteImages.isEmpty()) {\n    return;\n  }\n\n  auto buffer = getBuffer();\n  Q_ASSERT(buffer);\n  auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();\n  const bool clearRemote = editorConfig.isClearObsoleteImageAtImageHostEnabled();\n  const auto &hostMgr = ImageHostMgr::getInst();\n\n  QVector<QPair<QString, bool>> imagesToDelete;\n  imagesToDelete.reserve(obsoleteImages.size());\n\n  if (markdownEditorConfig.getConfirmBeforeClearObsoleteImages()) {\n    QVector<ConfirmItemInfo> items;\n    for (auto it = obsoleteImages.constBegin(); it != obsoleteImages.constEnd(); ++it) {\n      if (!it.value() || (clearRemote && hostMgr.findByImageUrl(it.key()))) {\n        const auto imgPath = it.key();\n        // Use the @m_data field to denote whether it is remote.\n        items.push_back(ConfirmItemInfo(imgPath, imgPath, imgPath,\n                                        it.value() ? reinterpret_cast<void *>(1ULL) : nullptr));\n      }\n    }\n\n    if (items.isEmpty()) {\n      return;\n    }\n\n    DeleteConfirmDialog dialog(\n        tr(\"Clear Obsolete Images\"),\n        tr(\"These images seems to be not in use anymore. Please confirm the deletion of them.\"),\n        tr(\"Deleted local images could be found in the recycle bin of notebook if it is from a \"\n           \"bundle notebook.\"),\n        items, DeleteConfirmDialog::Flag::AskAgain | DeleteConfirmDialog::Flag::Preview, false,\n        this);\n    if (dialog.exec() == QDialog::Accepted) {\n      items = dialog.getConfirmedItems();\n      markdownEditorConfig.setConfirmBeforeClearObsoleteImages(!dialog.isNoAskChecked());\n      for (const auto &item : items) {\n        imagesToDelete.push_back(qMakePair(item.m_path, item.m_data != nullptr));\n      }\n    }\n  } else {\n    for (auto it = obsoleteImages.constBegin(); it != obsoleteImages.constEnd(); ++it) {\n      if (clearRemote || !it.value()) {\n        imagesToDelete.push_back(qMakePair(it.key(), it.value()));\n      }\n    }\n  }\n\n  if (imagesToDelete.isEmpty()) {\n    return;\n  }\n\n  QProgressDialog proDlg(tr(\"Clearing obsolete images...\"), tr(\"Abort\"), 0, imagesToDelete.size(),\n                         this);\n  proDlg.setWindowModality(Qt::WindowModal);\n  proDlg.setWindowTitle(tr(\"Clear Obsolete Images\"));\n\n  int cnt = 0;\n  for (int i = 0; i < imagesToDelete.size(); ++i) {\n    proDlg.setValue(i + 1);\n    if (proDlg.wasCanceled()) {\n      break;\n    }\n\n    proDlg.setLabelText(tr(\"Clear image (%1)\").arg(imagesToDelete[i].first));\n    if (imagesToDelete[i].second) {\n      removeFromImageHost(imagesToDelete[i].first);\n    } else {\n      buffer->removeImage(imagesToDelete[i].first);\n    }\n    ++cnt;\n  }\n\n  proDlg.setValue(imagesToDelete.size());\n\n  // It may be deleted so showMessage() is not available.\n  VNoteX::getInst().showStatusMessageShort(tr(\"Cleared %n obsolete images\", \"\", cnt));\n}\n\nQSharedPointer<OutlineProvider> MarkdownViewWindow::getOutlineProvider() {\n  return m_outlineProvider;\n}\n\ntemplate <class T>\nQSharedPointer<Outline> MarkdownViewWindow::headingsToOutline(const QVector<T> &p_headings) {\n  auto outline = QSharedPointer<Outline>::create();\n  if (!p_headings.isEmpty()) {\n    outline->m_headings.reserve(p_headings.size());\n    for (const auto &heading : p_headings) {\n      outline->m_headings.push_back(Outline::Heading(heading.m_name, heading.m_level));\n    }\n  }\n\n  const auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n  if (markdownConfig.getSectionNumberMode() == MarkdownEditorConfig::SectionNumberMode::Edit) {\n    outline->m_sectionNumberBaseLevel = -1;\n  } else {\n    outline->m_sectionNumberBaseLevel = markdownConfig.getSectionNumberBaseLevel();\n    outline->m_sectionNumberEndingDot = markdownConfig.getSectionNumberStyle() ==\n                                        MarkdownEditorConfig::SectionNumberStyle::DigDotDigDot;\n  }\n\n  return outline;\n}\n\nvoid MarkdownViewWindow::setupOutlineProvider() {\n  m_outlineProvider.reset(new OutlineProvider(nullptr));\n  connect(m_outlineProvider.data(), &OutlineProvider::headingClicked, this, [this](int p_idx) {\n    switch (getMode()) {\n    case ViewWindowMode::Read:\n      adapter()->scrollToHeading(p_idx);\n      break;\n\n    default:\n      m_editor->scrollToHeading(p_idx);\n      break;\n    }\n  });\n}\n\nQSharedPointer<vte::MarkdownEditorConfig>\nMarkdownViewWindow::createMarkdownEditorConfig(const EditorConfig &p_editorConfig,\n                                               const MarkdownEditorConfig &p_config) {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n\n  auto textEditorConfig = TextViewWindowHelper::createTextEditorConfig(\n      p_config.getTextEditorConfig(), p_editorConfig.getViConfig(),\n      themeMgr.getFile(Theme::File::MarkdownEditorStyle),\n      themeMgr.getMarkdownEditorHighlightTheme(), p_editorConfig.getLineEndingPolicy());\n\n  auto editorConfig = QSharedPointer<vte::MarkdownEditorConfig>::create(textEditorConfig);\n  editorConfig->overrideTextFontFamily(p_config.getEditorOverriddenFontFamily());\n\n  editorConfig->m_constrainInplacePreviewWidthEnabled =\n      p_config.getConstrainInplacePreviewWidthEnabled();\n\n  {\n    auto srcs = p_config.getInplacePreviewSources();\n    vte::MarkdownEditorConfig::InplacePreviewSources editorSrcs =\n        vte::MarkdownEditorConfig::NoInplacePreview;\n    if (srcs & MarkdownEditorConfig::InplacePreviewSource::ImageLink) {\n      editorSrcs |= vte::MarkdownEditorConfig::ImageLink;\n    }\n    if (srcs & MarkdownEditorConfig::InplacePreviewSource::CodeBlock) {\n      editorSrcs |= vte::MarkdownEditorConfig::CodeBlock;\n    }\n    if (srcs & MarkdownEditorConfig::InplacePreviewSource::Math) {\n      editorSrcs |= vte::MarkdownEditorConfig::Math;\n    }\n    editorConfig->m_inplacePreviewSources = editorSrcs;\n  }\n\n  return editorConfig;\n}\n\nQSharedPointer<vte::TextEditorParameters>\nMarkdownViewWindow::createMarkdownEditorParameters(const EditorConfig &p_editorConfig,\n                                                   const MarkdownEditorConfig &p_config) {\n  auto paras = QSharedPointer<vte::TextEditorParameters>::create();\n  paras->m_spellCheckEnabled = p_config.isSpellCheckEnabled();\n  paras->m_autoDetectLanguageEnabled = p_editorConfig.isSpellCheckAutoDetectLanguageEnabled();\n  paras->m_defaultSpellCheckLanguage = p_editorConfig.getSpellCheckDefaultDictionary();\n  return paras;\n}\n\nvoid MarkdownViewWindow::scrollUp() {\n  if (isReadMode()) {\n    adapter()->scroll(true);\n  } else {\n    QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar();\n    if (vbar && (vbar->minimum() != vbar->maximum())) {\n      vbar->triggerAction(QAbstractSlider::SliderSingleStepAdd);\n    }\n  }\n}\n\nvoid MarkdownViewWindow::scrollDown() {\n  if (isReadMode()) {\n    adapter()->scroll(false);\n  } else {\n    QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar();\n    if (vbar && (vbar->minimum() != vbar->maximum())) {\n      vbar->triggerAction(QAbstractSlider::SliderSingleStepSub);\n    }\n  }\n}\n\nvoid MarkdownViewWindow::updateWebViewerConfig() {\n  if (!m_viewer) {\n    return;\n  }\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const auto &markdownEditorConfig = editorConfig.getMarkdownEditorConfig();\n\n  m_viewer->setZoomFactor(markdownEditorConfig.getZoomFactorInReadMode());\n}\n\nvoid MarkdownViewWindow::zoom(bool p_zoomIn) {\n  // Only editor will receive the wheel event.\n  Q_ASSERT(!isReadMode());\n  m_editor->zoom(m_editor->zoomDelta() + (p_zoomIn ? 1 : -1));\n  auto &textEditorConfig =\n      ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig().getTextEditorConfig();\n  textEditorConfig.setZoomDelta(m_editor->zoomDelta());\n  showZoomDelta(m_editor->zoomDelta());\n}\n\nvoid MarkdownViewWindow::handleFindTextChanged(const QString &p_text, FindOptions p_options) {\n  if (isReadMode()) {\n    if (p_options & FindOption::IncrementalSearch) {\n      adapter()->findText(QStringList(p_text), p_options);\n    }\n  } else {\n    TextViewWindowHelper::handleFindTextChanged(this, p_text, p_options);\n  }\n}\n\nvoid MarkdownViewWindow::handleFindNext(const QStringList &p_texts, FindOptions p_options) {\n  if (isReadMode()) {\n    adapter()->findText(p_texts, p_options);\n  } else {\n    TextViewWindowHelper::handleFindNext(this, p_texts, p_options);\n  }\n}\n\nvoid MarkdownViewWindow::handleReplace(const QString &p_text, FindOptions p_options,\n                                       const QString &p_replaceText) {\n  if (isReadMode()) {\n    showMessage(tr(\"Replace is not supported in read mode\"));\n  } else {\n    TextViewWindowHelper::handleReplace(this, p_text, p_options, p_replaceText);\n  }\n}\n\nvoid MarkdownViewWindow::handleReplaceAll(const QString &p_text, FindOptions p_options,\n                                          const QString &p_replaceText) {\n  if (isReadMode()) {\n    showMessage(tr(\"Replace is not supported in read mode\"));\n  } else {\n    TextViewWindowHelper::handleReplaceAll(this, p_text, p_options, p_replaceText);\n  }\n}\n\nvoid MarkdownViewWindow::handleFindAndReplaceWidgetClosed() {\n  if (isReadMode()) {\n    adapter()->findText(QStringList(), FindOption::FindNone);\n  } else {\n    TextViewWindowHelper::clearSearchHighlights(this);\n  }\n}\n\nvoid MarkdownViewWindow::clearHighlights() {\n  if (isReadMode()) {\n    adapter()->findText(QStringList(), FindOption::FindNone);\n  } else {\n    TextViewWindowHelper::clearSearchHighlights(this);\n  }\n}\n\nvoid MarkdownViewWindow::handleFindAndReplaceWidgetOpened() {\n  Q_ASSERT(m_findAndReplace);\n  m_findAndReplace->setReplaceEnabled(!isReadMode());\n}\n\nvoid MarkdownViewWindow::handleFileOpenParameters(const QSharedPointer<FileOpenParameters> &p_paras,\n                                                  bool p_twice) {\n  if (!p_paras) {\n    return;\n  }\n\n  auto buffer = getBuffer();\n  if (p_paras->m_newFile) {\n    Q_ASSERT(!isReadMode());\n    const auto &markdownEditorConfig =\n        ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n    if (markdownEditorConfig.getInsertFileNameAsTitle() && buffer->getContent().isEmpty()) {\n      const auto title =\n          QStringLiteral(\"# %1\\n\").arg(QFileInfo(buffer->getName()).completeBaseName());\n      m_editor->insertText(title);\n    }\n  } else {\n    if (!p_twice || p_paras->m_forceMode) {\n      setMode(p_paras->m_mode);\n    }\n\n    scrollToLine(p_paras->m_lineNumber);\n\n    if (p_paras->m_searchToken) {\n      findTextBySearchToken(p_paras->m_searchToken, p_paras->m_lineNumber);\n    }\n  }\n}\n\nvoid MarkdownViewWindow::scrollToLine(int p_lineNumber) {\n  if (p_lineNumber < 0) {\n    return;\n  }\n\n  if (isReadMode()) {\n    Q_ASSERT(m_viewer);\n    adapter()->scrollToPosition(MarkdownViewerAdapter::Position(p_lineNumber, QString()));\n  } else {\n    Q_ASSERT(m_editor);\n    m_editor->scrollToLine(p_lineNumber, true);\n  }\n}\n\nvoid MarkdownViewWindow::findTextBySearchToken(const QSharedPointer<SearchToken> &p_token,\n                                               int p_currentMatchLine) {\n  if (isReadMode()) {\n    Q_ASSERT(m_viewer);\n    const auto patterns = p_token->toPatterns();\n    updateLastFindInfo(patterns.first, patterns.second);\n    adapter()->findText(patterns.first, patterns.second, p_currentMatchLine);\n  } else {\n    Q_ASSERT(m_editor);\n    TextViewWindowHelper::findTextBySearchToken(this, p_token, p_currentMatchLine);\n  }\n}\n\nbool MarkdownViewWindow::isReadMode() const { return m_mode == ViewWindowMode::Read; }\n\nvoid MarkdownViewWindow::openTwice(const QSharedPointer<FileOpenParameters> &p_paras) {\n  Q_ASSERT(!p_paras || !p_paras->m_newFile);\n  handleFileOpenParameters(p_paras, true);\n}\n\nViewWindowSession MarkdownViewWindow::saveSession() const {\n  auto session = ViewWindow::saveSession();\n  if (getBuffer()) {\n    session.m_lineNumber =\n        isReadMode() ? adapter()->getTopLineNumber() : m_editor->getCursorPosition().first;\n  }\n  return session;\n}\n\nvoid MarkdownViewWindow::setupPreviewHelper() {\n  Q_ASSERT(!m_previewHelper);\n\n  m_previewHelper = new PreviewHelper(nullptr, this);\n\n  const auto &markdownEditorConfig =\n      ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n  updatePreviewHelperFromConfig(markdownEditorConfig);\n}\n\nvoid MarkdownViewWindow::updatePreviewHelperFromConfig(const MarkdownEditorConfig &p_config) {\n  m_previewHelper->setWebPlantUmlEnabled(p_config.getWebPlantUml());\n  m_previewHelper->setWebGraphvizEnabled(p_config.getWebGraphviz());\n\n  const auto srcs = p_config.getInplacePreviewSources();\n  m_previewHelper->setInplacePreviewCodeBlocksEnabled(srcs & MarkdownEditorConfig::CodeBlock);\n  m_previewHelper->setInplacePreviewMathBlocksEnabled(srcs & MarkdownEditorConfig::Math);\n}\n\nvoid MarkdownViewWindow::applySnippet(const QString &p_name) {\n  if (isReadMode()) {\n    qWarning() << \"failed to apply snippet in read mode\" << p_name;\n    return;\n  }\n\n  TextViewWindowHelper::applySnippet(this, p_name);\n}\n\nvoid MarkdownViewWindow::applySnippet() {\n  if (isReadMode()) {\n    qWarning() << \"failed to apply snippet in read mode\";\n    return;\n  }\n\n  TextViewWindowHelper::applySnippet(this);\n}\n\nQPoint MarkdownViewWindow::getFloatingWidgetPosition() {\n  return TextViewWindowHelper::getFloatingWidgetPosition(this);\n}\n\nQString MarkdownViewWindow::selectedText() const {\n  switch (m_mode) {\n  case ViewWindowMode::Read:\n    Q_ASSERT(m_viewer);\n    return m_viewer->selectedText();\n\n  case ViewWindowMode::Edit:\n    Q_ASSERT(m_editor);\n    return m_editor->getTextEdit()->selectedText();\n\n  default:\n    return QString();\n  }\n}\n\nvoid MarkdownViewWindow::handleImageHostChanged(const QString &p_hostName) {\n  m_imageHost = ImageHostMgr::getInst().find(p_hostName);\n\n  if (m_editor) {\n    m_editor->setImageHost(m_imageHost);\n  }\n}\n\nvoid MarkdownViewWindow::removeFromImageHost(const QString &p_url) {\n  auto host = ImageHostMgr::getInst().findByImageUrl(p_url);\n  if (!host) {\n    return;\n  }\n\n  QString errMsg;\n  QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));\n  auto ret = host->remove(p_url, errMsg);\n  QApplication::restoreOverrideCursor();\n\n  if (!ret) {\n    MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                             QStringLiteral(\"Failed to delete image (%1) from image host (%2).\")\n                                 .arg(p_url, host->getName()),\n                             QString(), errMsg, this);\n  }\n}\n\nbool MarkdownViewWindow::updateConfigRevision() {\n  bool changed = false;\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  if (m_editorConfigRevision != editorConfig.revision()) {\n    changed = true;\n    m_editorConfigRevision = editorConfig.revision();\n  }\n\n  if (m_textEditorConfigRevision != editorConfig.getTextEditorConfig().revision()) {\n    changed = true;\n    m_textEditorConfigRevision = editorConfig.getTextEditorConfig().revision();\n  }\n\n  if (m_markdownEditorConfigRevision != editorConfig.getMarkdownEditorConfig().revision()) {\n    changed = true;\n    m_markdownEditorConfigRevision = editorConfig.getMarkdownEditorConfig().revision();\n  }\n\n  return changed;\n}\n\nvoid MarkdownViewWindow::toggleDebug() {\n  Q_ASSERT(m_viewer);\n  if (m_debugViewer) {\n    bool shouldEnable = !m_debugViewer->isVisible();\n    m_debugViewer->setVisible(shouldEnable);\n    m_viewer->page()->setDevToolsPage(shouldEnable ? m_debugViewer->page() : nullptr);\n  } else {\n    setupDebugViewer();\n    m_viewer->page()->setDevToolsPage(m_debugViewer->page());\n  }\n}\n\nvoid MarkdownViewWindow::setupDebugViewer() {\n  Q_ASSERT(!m_debugViewer);\n\n  // Need a vertical QSplitter to hold the original QSplitter and the debug viewer.\n  auto mainSplitter = new QSplitter(this);\n  mainSplitter->setContentsMargins(0, 0, 0, 0);\n  mainSplitter->setOrientation(Qt::Vertical);\n\n  replaceCentralWidget(mainSplitter);\n\n  mainSplitter->addWidget(m_splitter);\n  mainSplitter->setFocusProxy(m_splitter);\n\n  m_debugViewer = new WebViewer(VNoteX::getInst().getThemeMgr().getBaseBackground(), this);\n  m_debugViewer->resize(m_splitter->width(), m_splitter->height() / 2);\n  mainSplitter->addWidget(m_debugViewer);\n}\n\nvoid MarkdownViewWindow::updateViewModeMenu(QMenu *p_menu) {\n  p_menu->clear();\n\n  if (isReadMode()) {\n    auto act = p_menu->addAction(tr(\"View Mode Not Supported In Read Mode\"));\n    act->setEnabled(false);\n    return;\n  }\n\n  if (!m_viewModeActionGroup) {\n    m_viewModeActionGroup = new QActionGroup(this);\n    connect(m_viewModeActionGroup, &QActionGroup::triggered, this, [this](QAction *act) {\n      auto mode = static_cast<MarkdownEditorConfig::EditViewMode>(act->data().toInt());\n      if (mode != m_editViewMode) {\n        ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig().setEditViewMode(mode);\n        setEditViewMode(mode);\n      }\n    });\n  }\n\n  {\n    auto act = p_menu->addAction(tr(\"Edit Only\"));\n    act->setCheckable(true);\n    act->setData(static_cast<int>(MarkdownEditorConfig::EditViewMode::EditOnly));\n    m_viewModeActionGroup->addAction(act);\n\n    if (act->data().toInt() == m_editViewMode) {\n      act->setChecked(true);\n    }\n  }\n\n  {\n    auto act = p_menu->addAction(tr(\"Edit with Preview\"));\n    act->setCheckable(true);\n    act->setData(static_cast<int>(MarkdownEditorConfig::EditViewMode::EditPreview));\n    m_viewModeActionGroup->addAction(act);\n\n    if (act->data().toInt() == m_editViewMode) {\n      act->setChecked(true);\n    }\n  }\n}\n\nvoid MarkdownViewWindow::setEditViewMode(MarkdownEditorConfig::EditViewMode p_mode) {\n  Q_ASSERT(m_mode == ViewWindowMode::Edit);\n\n  bool modeChanged = false;\n  if (m_editViewMode != p_mode) {\n    m_editViewMode = p_mode;\n    modeChanged = true;\n  }\n\n  switch (p_mode) {\n  case MarkdownEditorConfig::EditViewMode::EditOnly: {\n    if (m_viewerReady) {\n      m_viewer->hide();\n    }\n\n    if (modeChanged) {\n      disconnect(m_editor->getTextEdit(), &vte::VTextEdit::contentsChanged, m_syncPreviewTimer,\n                 QOverload<>::of(&QTimer::start));\n      disconnect(m_editor, &MarkdownEditor::topLineChanged, this,\n                 &MarkdownViewWindow::syncEditorPositionToPreview);\n    }\n    break;\n  }\n\n  case MarkdownEditorConfig::EditViewMode::EditPreview: {\n    m_viewer->show();\n    WidgetUtils::distributeWidgetsOfSplitter(m_splitter);\n\n    if (modeChanged) {\n      if (!m_syncPreviewTimer) {\n        m_syncPreviewTimer = new QTimer(this);\n        m_syncPreviewTimer->setSingleShot(true);\n        m_syncPreviewTimer->setInterval(300);\n        connect(m_syncPreviewTimer, &QTimer::timeout, this,\n                &MarkdownViewWindow::syncEditorContentsToPreview);\n      }\n\n      connect(m_editor->getTextEdit(), &vte::VTextEdit::contentsChanged, m_syncPreviewTimer,\n              QOverload<>::of(&QTimer::start), Qt::UniqueConnection);\n      connect(m_editor, &MarkdownEditor::topLineChanged, this,\n              &MarkdownViewWindow::syncEditorPositionToPreview, Qt::UniqueConnection);\n    }\n\n    syncEditorContentsToPreview();\n\n    break;\n  }\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n}\n\nvoid MarkdownViewWindow::syncEditorContentsToPreview() {\n  if (!m_viewerReady || isReadMode() ||\n      m_editViewMode == MarkdownEditorConfig::EditViewMode::EditOnly) {\n    return;\n  }\n\n  adapter()->setText(m_editor->getText(), m_editor->getTopLine());\n}\n\nvoid MarkdownViewWindow::syncEditorPositionToPreview() {\n  if (!m_viewerReady || isReadMode() ||\n      m_editViewMode == MarkdownEditorConfig::EditViewMode::EditOnly) {\n    return;\n  }\n\n  adapter()->scrollToPosition(MarkdownViewerAdapter::Position(m_editor->getTopLine(), QString()));\n}\n\nvoid MarkdownViewWindow::print() {\n  if (!m_viewer || !m_viewerReady) {\n    return;\n  }\n\n  m_printer = PrintUtils::promptForPrint(m_viewer->hasSelection(), this);\n  if (m_printer) {\n#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))\n    m_viewer->page()->print(m_printer.data(), std::bind(&MarkdownViewWindow::onPrintFinished, this,\n                                                        std::placeholders::_1));\n#else\n    m_printer->setOutputFormat(QPrinter::PdfFormat);\n    m_viewer->print(m_printer.get());\n#endif\n  }\n}\n\nvoid MarkdownViewWindow::onPrintFinished(bool succeeded) {\n  m_printer.reset();\n  showMessage(succeeded ? tr(\"Printed to PDF\") : tr(\"Failed to print to PDF\"));\n}\n\nvoid MarkdownViewWindow::handleExternalCodeBlockHighlightRequest(int p_idx, quint64 p_timeStamp,\n                                                                 const QString &p_text) {\n  static bool stylesInitialized = false;\n  if (!stylesInitialized) {\n    stylesInitialized = true;\n    const auto file = VNoteX::getInst().getThemeMgr().getFile(Theme::File::HighlightStyleSheet);\n    if (file.isEmpty()) {\n      qWarning() << \"no highlight style sheet specified for external code block highlight\";\n    } else {\n      QString content;\n      try {\n        content = FileUtils::readTextFile(file);\n      } catch (Exception &e) {\n        qWarning() << \"failed to read highlight style sheet for external code block highlight\"\n                   << file << e.what();\n      }\n      adapter()->fetchStylesFromStyleSheet(\n          content, [this](const QVector<MarkdownViewerAdapter::CssRuleStyle> *rules) {\n            MarkdownEditor::ExternalCodeBlockHighlightStyles styles;\n\n            const QString prefix(\".token.\");\n            for (const auto &rule : *rules) {\n              bool isFirst = true;\n              QTextCharFormat fmt;\n\n              // Just fetch `.token.attr` styles.\n              auto selects = rule.m_selector.split(QLatin1Char(','));\n              for (const auto &sel : selects) {\n                const auto ts = sel.trimmed();\n                if (!ts.startsWith(prefix)) {\n                  continue;\n                }\n                auto classList = ts.mid(prefix.size()).split(QLatin1Char('.'));\n                for (const auto &cla : classList) {\n                  if (isFirst) {\n                    fmt = rule.toTextCharFormat();\n                    isFirst = false;\n                  }\n                  styles.insert(cla, fmt);\n                }\n              }\n            }\n\n            MarkdownEditor::setExternalCodeBlockHighlihgtStyles(styles);\n          });\n    }\n  }\n\n  adapter()->highlightCodeBlock(p_idx, p_timeStamp, p_text);\n}\n\nvoid MarkdownViewWindow::updateEditorFromConfig() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  {\n    vte::Key leaderKey(coreConfig.getShortcutLeaderKey());\n    m_editor->setLeaderKeyToSkip(leaderKey.m_key, leaderKey.m_modifiers);\n  }\n}\n\nvoid MarkdownViewWindow::fetchWordCountInfo(\n    const std::function<void(const WordCountInfo &)> &p_callback) const {\n  auto text = selectedText();\n  if (!text.isEmpty()) {\n    auto info = TextViewWindowHelper::calculateWordCountInfo(text);\n    info.m_isSelection = true;\n    p_callback(info);\n    return;\n  }\n\n  switch (m_mode) {\n  case ViewWindowMode::Read: {\n    Q_ASSERT(m_viewer);\n    m_viewer->saveContent([p_callback](const QString &content) {\n      auto info = TextViewWindowHelper::calculateWordCountInfo(content);\n      info.m_isSelection = false;\n      p_callback(info);\n    });\n    break;\n  }\n\n  case ViewWindowMode::Edit: {\n    Q_ASSERT(m_editor);\n    auto info = TextViewWindowHelper::calculateWordCountInfo(m_editor->getText());\n    info.m_isSelection = false;\n    p_callback(info);\n    break;\n  }\n\n  default:\n    p_callback(WordCountInfo());\n    break;\n  }\n}\n"
  },
  {
    "path": "src/widgets/markdownviewwindow.h",
    "content": "#ifndef MARKDOWNVIEWWINDOW_H\n#define MARKDOWNVIEWWINDOW_H\n\n#include \"viewwindow.h\"\n\n#include <QScopedPointer>\n\n#include <core/markdowneditorconfig.h>\n\nclass QSplitter;\nclass QStackedWidget;\nclass QWebEngineView;\nclass QActionGroup;\nclass QTimer;\nclass QPrinter;\n\nnamespace vte {\nclass MarkdownEditorConfig;\nstruct TextEditorParameters;\n} // namespace vte\n\nnamespace vnotex {\nclass MarkdownEditor;\nclass MarkdownViewer;\nclass MarkdownViewerAdapter;\nclass PreviewHelper;\nstruct Outline;\nclass EditorConfig;\nclass ImageHost;\nclass SearchToken;\n\nclass MarkdownViewWindow : public ViewWindow {\n  Q_OBJECT\npublic:\n  friend class TextViewWindowHelper;\n\n  MarkdownViewWindow(QWidget *p_parent = nullptr);\n\n  ~MarkdownViewWindow();\n\n  QString getLatestContent() const Q_DECL_OVERRIDE;\n\n  QString selectedText() const Q_DECL_OVERRIDE;\n\n  void setMode(ViewWindowMode p_mode) Q_DECL_OVERRIDE;\n\n  QSharedPointer<OutlineProvider> getOutlineProvider() Q_DECL_OVERRIDE;\n\n  void openTwice(const QSharedPointer<FileOpenParameters> &p_paras) Q_DECL_OVERRIDE;\n\n  ViewWindowSession saveSession() const Q_DECL_OVERRIDE;\n\n  void applySnippet(const QString &p_name) Q_DECL_OVERRIDE;\n\n  void applySnippet() Q_DECL_OVERRIDE;\n\n  void fetchWordCountInfo(const std::function<void(const WordCountInfo &)> &p_callback) const\n      Q_DECL_OVERRIDE;\n\npublic slots:\n  void handleEditorConfigChange() Q_DECL_OVERRIDE;\n\n  void onPrintFinished(bool succeeded);\n\nprotected slots:\n  void setModified(bool p_modified) Q_DECL_OVERRIDE;\n\n  void\n  handleBufferChangedInternal(const QSharedPointer<FileOpenParameters> &p_paras) Q_DECL_OVERRIDE;\n\n  void handleTypeAction(TypeAction p_action) Q_DECL_OVERRIDE;\n\n  void handleSectionNumberOverride(OverrideState p_state) Q_DECL_OVERRIDE;\n\n  void handleImageHostChanged(const QString &p_hostName) Q_DECL_OVERRIDE;\n\n  void handleFindTextChanged(const QString &p_text, FindOptions p_options) Q_DECL_OVERRIDE;\n\n  void handleFindNext(const QStringList &p_texts, FindOptions p_options) Q_DECL_OVERRIDE;\n\n  void handleReplace(const QString &p_text, FindOptions p_options,\n                     const QString &p_replaceText) Q_DECL_OVERRIDE;\n\n  void handleReplaceAll(const QString &p_text, FindOptions p_options,\n                        const QString &p_replaceText) Q_DECL_OVERRIDE;\n\n  void handleFindAndReplaceWidgetClosed() Q_DECL_OVERRIDE;\n\n  void handleFindAndReplaceWidgetOpened() Q_DECL_OVERRIDE;\n\n  void toggleDebug() Q_DECL_OVERRIDE;\n\n  void print() Q_DECL_OVERRIDE;\n\n  void clearHighlights() Q_DECL_OVERRIDE;\n\nprotected:\n  void syncEditorFromBuffer() Q_DECL_OVERRIDE;\n\n  void syncEditorFromBufferContent() Q_DECL_OVERRIDE;\n\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\n\n  void detachFromBufferInternal() Q_DECL_OVERRIDE;\n\n  void scrollUp() Q_DECL_OVERRIDE;\n\n  void scrollDown() Q_DECL_OVERRIDE;\n\n  void zoom(bool p_zoomIn) Q_DECL_OVERRIDE;\n\n  QPoint getFloatingWidgetPosition() Q_DECL_OVERRIDE;\n\n  void updateViewModeMenu(QMenu *p_menu) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupToolBar();\n\n  void setupTextEditor();\n\n  QStackedWidget *getMainStatusWidget() const;\n\n  // Focus appropriate editor according to current mode.\n  void focusEditor();\n\n  void setupViewer();\n\n  void setupPreviewHelper();\n\n  void syncTextEditorFromBuffer(bool p_syncPositionFromReadMode);\n\n  void syncViewerFromBuffer(bool p_syncPositionFromEditMode);\n\n  // Non-virtual function of syncEditorFromBufferContent().\n  void doSyncEditorFromBufferContent(bool p_syncPosition);\n\n  void syncTextEditorFromBufferContent(bool p_syncPosition);\n\n  void syncViewerFromBufferContent(bool p_syncPosition);\n\n  // When we have new changes to the buffer content from our ViewWindow,\n  // we will invalidate the contents of the buffer and the buffer will\n  // call this function to tell us now the latest buffer revision.\n  void setBufferRevisionAfterInvalidation(int p_bufferRevision);\n\n  MarkdownViewerAdapter *adapter() const;\n\n  // Get the position to sync from editor.\n  // Return -1 for an invalid position.\n  int getEditLineNumber() const;\n\n  // Get the position to sync from viewer.\n  // Return -1 for an invalid position.\n  int getReadLineNumber() const;\n\n  void clearObsoleteImages();\n\n  void setupOutlineProvider();\n\n  void updateEditorFromConfig();\n\n  void updateWebViewerConfig();\n\n  void setModeInternal(ViewWindowMode p_mode, bool p_syncBuffer);\n\n  void handleFileOpenParameters(const QSharedPointer<FileOpenParameters> &p_paras, bool p_twice);\n\n  void scrollToLine(int p_lineNumber);\n\n  void findTextBySearchToken(const QSharedPointer<SearchToken> &p_token, int p_currentMatchLine);\n\n  bool isReadMode() const;\n\n  void updatePreviewHelperFromConfig(const MarkdownEditorConfig &p_config);\n\n  void removeFromImageHost(const QString &p_url);\n\n  bool updateConfigRevision();\n\n  void setupDebugViewer();\n\n  void setEditViewMode(MarkdownEditorConfig::EditViewMode p_mode);\n\n  void syncEditorContentsToPreview();\n\n  void syncEditorPositionToPreview();\n\n  void handleExternalCodeBlockHighlightRequest(int p_idx, quint64 p_timeStamp,\n                                               const QString &p_text);\n\n  template <class T> static QSharedPointer<Outline> headingsToOutline(const QVector<T> &p_headings);\n\n  static QSharedPointer<vte::MarkdownEditorConfig>\n  createMarkdownEditorConfig(const EditorConfig &p_editorConfig,\n                             const MarkdownEditorConfig &p_config);\n\n  static QSharedPointer<vte::TextEditorParameters>\n  createMarkdownEditorParameters(const EditorConfig &p_editorConfig,\n                                 const MarkdownEditorConfig &p_config);\n\n  // Splitter to hold editor and viewer.\n  QSplitter *m_splitter = nullptr;\n\n  // Managed by QObject.\n  MarkdownEditor *m_editor = nullptr;\n\n  // Managed by QObject.\n  MarkdownViewer *m_viewer = nullptr;\n\n  QSharedPointer<QWidget> m_textEditorStatusWidget;\n\n  QSharedPointer<QWidget> m_viewerStatusWidget;\n\n  QSharedPointer<QStackedWidget> m_mainStatusWidget;\n\n  // Used to debug web view.\n  QWebEngineView *m_debugViewer = nullptr;\n\n  // Managed by QObject.\n  PreviewHelper *m_previewHelper = nullptr;\n\n  // Whether propogate the state from editor to buffer.\n  bool m_propogateEditorToBuffer = false;\n\n  int m_textEditorBufferRevision = 0;\n\n  int m_viewerBufferRevision = 0;\n\n  int m_textEditorConfigRevision = 0;\n\n  int m_markdownEditorConfigRevision = 0;\n\n  ViewWindowMode m_previousMode = ViewWindowMode::Invalid;\n\n  QSharedPointer<OutlineProvider> m_outlineProvider;\n\n  ImageHost *m_imageHost = nullptr;\n\n  bool m_viewerReady = false;\n\n  QActionGroup *m_viewModeActionGroup = nullptr;\n\n  MarkdownEditorConfig::EditViewMode m_editViewMode = MarkdownEditorConfig::EditViewMode::EditOnly;\n\n  QTimer *m_syncPreviewTimer = nullptr;\n\n  QSharedPointer<QPrinter> m_printer;\n};\n} // namespace vnotex\n\n#endif // MARKDOWNVIEWWINDOW_H\n"
  },
  {
    "path": "src/widgets/messageboxhelper.cpp",
    "content": "#include \"messageboxhelper.h\"\n\n#include <QObject>\n\nusing namespace vnotex;\n\nQString MessageBoxHelper::TypeTitle(MessageBoxHelper::Type p_type) {\n  QString title;\n  switch (p_type) {\n  case Question:\n    title = QMessageBox::tr(\"Question\");\n    break;\n\n  case Information:\n    title = QMessageBox::tr(\"Information\");\n    break;\n\n  case Warning:\n    title = QMessageBox::tr(\"Warning\");\n    break;\n\n  case Critical:\n    title = QMessageBox::tr(\"Critical\");\n    break;\n  }\n\n  return title;\n}\n\nQMessageBox::Icon MessageBoxHelper::TypeIcon(MessageBoxHelper::Type p_type) {\n  auto icon = QMessageBox::NoIcon;\n  switch (p_type) {\n  case Question:\n    icon = QMessageBox::Question;\n    break;\n\n  case Information:\n    icon = QMessageBox::Information;\n    break;\n\n  case Warning:\n    icon = QMessageBox::Warning;\n    break;\n\n  case Critical:\n    icon = QMessageBox::Critical;\n    break;\n  }\n\n  return icon;\n}\n\nint MessageBoxHelper::showMessageBox(MessageBoxHelper::Type p_type, const QString &p_text,\n                                     const QString &p_informationText,\n                                     const QString &p_detailedText,\n                                     QMessageBox::StandardButtons p_buttons,\n                                     QMessageBox::StandardButton p_defaultButton,\n                                     QWidget *p_parent) {\n  return showMessageBox(TypeIcon(p_type), TypeTitle(p_type), p_text, p_informationText,\n                        p_detailedText, p_buttons, p_defaultButton, p_parent);\n}\n\nint MessageBoxHelper::showMessageBox(QMessageBox::Icon p_icon, const QString &p_title,\n                                     const QString &p_text, const QString &p_informationText,\n                                     const QString &p_detailedText,\n                                     QMessageBox::StandardButtons p_buttons,\n                                     QMessageBox::StandardButton p_defaultButton,\n                                     QWidget *p_parent) {\n  QMessageBox msgBox(p_icon, p_title, p_text, p_buttons, p_parent);\n  msgBox.setTextInteractionFlags(msgBox.textInteractionFlags() | Qt::TextSelectableByMouse);\n  msgBox.setInformativeText(p_informationText);\n  msgBox.setDetailedText(p_detailedText);\n  msgBox.setDefaultButton(p_defaultButton);\n  return msgBox.exec();\n}\n\nvoid MessageBoxHelper::notify(MessageBoxHelper::Type p_type, const QString &p_text,\n                              const QString &p_informationText, const QString &p_detailedText,\n                              QWidget *p_parent) {\n  showMessageBox(p_type, p_text, p_informationText, p_detailedText, QMessageBox::Ok,\n                 QMessageBox::Ok, p_parent);\n}\n\nvoid MessageBoxHelper::notify(MessageBoxHelper::Type p_type, const QString &p_text,\n                              QWidget *p_parent) {\n  showMessageBox(p_type, p_text, QString(), QString(), QMessageBox::Ok, QMessageBox::Ok, p_parent);\n}\n\nint MessageBoxHelper::questionOkCancel(MessageBoxHelper::Type p_type, const QString &p_text,\n                                       const QString &p_informationText,\n                                       const QString &p_detailedText, QWidget *p_parent) {\n  bool dangerous = p_type == Type::Warning || p_type == Type::Critical;\n  int ret = showMessageBox(p_type, p_text, p_informationText, p_detailedText,\n                           QMessageBox::Ok | QMessageBox::Cancel,\n                           dangerous ? QMessageBox::Cancel : QMessageBox::Ok, p_parent);\n  return ret;\n}\n\nint MessageBoxHelper::questionYesNo(MessageBoxHelper::Type p_type, const QString &p_text,\n                                    const QString &p_informationText, const QString &p_detailedText,\n                                    QWidget *p_parent) {\n  int ret = showMessageBox(p_type, p_text, p_informationText, p_detailedText,\n                           QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes, p_parent);\n  return ret;\n}\n\nint MessageBoxHelper::questionYesNoCancel(MessageBoxHelper::Type p_type, const QString &p_text,\n                                          const QString &p_informationText,\n                                          const QString &p_detailedText, QWidget *p_parent) {\n  int ret = showMessageBox(p_type, p_text, p_informationText, p_detailedText,\n                           QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,\n                           QMessageBox::Yes, p_parent);\n  return ret;\n}\n\nint MessageBoxHelper::questionSaveDiscardCancel(MessageBoxHelper::Type p_type,\n                                                const QString &p_text,\n                                                const QString &p_informationText,\n                                                const QString &p_detailedText, QWidget *p_parent) {\n  int ret = showMessageBox(p_type, p_text, p_informationText, p_detailedText,\n                           QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel,\n                           QMessageBox::Save, p_parent);\n  return ret;\n}\n"
  },
  {
    "path": "src/widgets/messageboxhelper.h",
    "content": "#ifndef MESSAGEBOXHELPER_H\n#define MESSAGEBOXHELPER_H\n\n#include <QMessageBox>\n\nnamespace vnotex {\nclass MessageBoxHelper {\npublic:\n  MessageBoxHelper() = delete;\n\n  enum Type { Question, Information, Warning, Critical };\n\n  // No choice required from user.\n  static void notify(MessageBoxHelper::Type p_type, const QString &p_text,\n                     const QString &p_informationText = QString(),\n                     const QString &p_detailedText = QString(), QWidget *p_parent = nullptr);\n\n  static void notify(MessageBoxHelper::Type p_type, const QString &p_text, QWidget *p_parent);\n\n  // Ask user for OK/Cancel action.\n  static int questionOkCancel(MessageBoxHelper::Type p_type, const QString &p_text,\n                              const QString &p_informationText = QString(),\n                              const QString &p_detailedText = QString(),\n                              QWidget *p_parent = nullptr);\n\n  // Ask user for Yes/No action.\n  static int questionYesNo(MessageBoxHelper::Type p_type, const QString &p_text,\n                           const QString &p_informationText = QString(),\n                           const QString &p_detailedText = QString(), QWidget *p_parent = nullptr);\n\n  // Ask user for Yes/No/Cancel action.\n  static int questionYesNoCancel(MessageBoxHelper::Type p_type, const QString &p_text,\n                                 const QString &p_informationText = QString(),\n                                 const QString &p_detailedText = QString(),\n                                 QWidget *p_parent = nullptr);\n\n  // Ask user for Save/Discard/Cancel action.\n  static int questionSaveDiscardCancel(MessageBoxHelper::Type p_type, const QString &p_text,\n                                       const QString &p_informationText = QString(),\n                                       const QString &p_detailedText = QString(),\n                                       QWidget *p_parent = nullptr);\n\nprivate:\n  // Use default title.\n  static int showMessageBox(MessageBoxHelper::Type p_type, const QString &p_text,\n                            const QString &p_informationText, const QString &p_detailedText,\n                            QMessageBox::StandardButtons p_buttons,\n                            QMessageBox::StandardButton p_defaultButton, QWidget *p_parent);\n\n  static int showMessageBox(QMessageBox::Icon p_icon, const QString &p_title, const QString &p_text,\n                            const QString &p_informationText, const QString &p_detailedText,\n                            QMessageBox::StandardButtons p_buttons,\n                            QMessageBox::StandardButton p_defaultButton, QWidget *p_parent);\n\n  static QString TypeTitle(MessageBoxHelper::Type p_type);\n\n  static QMessageBox::Icon TypeIcon(MessageBoxHelper::Type p_type);\n};\n} // namespace vnotex\n\n#endif // MESSAGEBOXHELPER_H\n"
  },
  {
    "path": "src/widgets/mindmapviewwindow.cpp",
    "content": "#include \"mindmapviewwindow.h\"\n\n#include <QDir>\n#include <QFileInfo>\n#include <QMetaObject>\n#include <QSplitter>\n#include <QTimer>\n#include <QToolBar>\n#include <QUrl>\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/htmltemplatehelper.h>\n#include <core/mindmapeditorconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/pathutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n\n#include \"editors/mindmapeditor.h\"\n#include \"editors/mindmapeditoradapter.h\"\n#include \"findandreplacewidget.h\"\n#include \"toolbarhelper.h\"\n#include \"viewarea.h\"\n\nusing namespace vnotex;\n\nMindMapViewWindow::MindMapViewWindow(QWidget *p_parent) : ViewWindow(p_parent) {\n  m_mode = ViewWindowMode::Edit;\n  setupUI();\n}\n\nvoid MindMapViewWindow::setupUI() {\n  setupEditor();\n  setCentralWidget(m_editor);\n\n  setupToolBar();\n}\n\nvoid MindMapViewWindow::setupEditor() {\n  Q_ASSERT(!m_editor);\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const auto &mindMapEditorConfig = editorConfig.getMindMapEditorConfig();\n\n  updateConfigRevision();\n\n  HtmlTemplateHelper::updateMindMapEditorTemplate(mindMapEditorConfig);\n\n  auto adapter = new MindMapEditorAdapter(nullptr);\n  qDebug() << \"MindMapViewWindow::setupEditor: Created adapter:\" << adapter;\n\n  m_editor =\n      new MindMapEditor(adapter, VNoteX::getInst().getThemeMgr().getBaseBackground(), 1.0, this);\n  qDebug() << \"MindMapViewWindow::setupEditor: Created editor:\" << m_editor;\n\n  connect(m_editor, &MindMapEditor::contentsChanged, this, [this]() {\n    getBuffer()->setModified(m_editor->isModified());\n    getBuffer()->invalidateContent(\n        this, [this](int p_revision) { this->setBufferRevisionAfterInvalidation(p_revision); });\n  });\n\n  // 连接URL点击信号\n  connect(adapter, &MindMapEditorAdapter::urlClickRequested, this,\n          &MindMapViewWindow::handleUrlClick);\n\n  // 连接带方向的URL点击信号\n  connect(adapter, &MindMapEditorAdapter::urlClickWithDirectionRequested, this,\n          &MindMapViewWindow::handleUrlClickWithDirection);\n}\n\nQString MindMapViewWindow::getLatestContent() const {\n  QString content;\n  adapter()->saveData([&content](const QString &p_data) { content = p_data; });\n\n  while (content.isNull()) {\n    Utils::sleepWait(50);\n  }\n\n  return content;\n}\n\nQString MindMapViewWindow::selectedText() const { return m_editor->selectedText(); }\n\nvoid MindMapViewWindow::setMode(ViewWindowMode p_mode) {\n  Q_UNUSED(p_mode);\n  Q_ASSERT(false);\n}\n\nvoid MindMapViewWindow::openTwice(const QSharedPointer<FileOpenParameters> &p_paras) {\n  Q_UNUSED(p_paras);\n}\n\nViewWindowSession MindMapViewWindow::saveSession() const {\n  auto session = ViewWindow::saveSession();\n  return session;\n}\n\nvoid MindMapViewWindow::applySnippet(const QString &p_name) { Q_UNUSED(p_name); }\n\nvoid MindMapViewWindow::applySnippet() {}\n\nvoid MindMapViewWindow::fetchWordCountInfo(\n    const std::function<void(const WordCountInfo &)> &p_callback) const {\n  Q_UNUSED(p_callback);\n}\n\nvoid MindMapViewWindow::handleEditorConfigChange() {\n  if (updateConfigRevision()) {\n    const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n    const auto &mindMapEditorConfig = editorConfig.getMindMapEditorConfig();\n\n    HtmlTemplateHelper::updateMindMapEditorTemplate(mindMapEditorConfig);\n  }\n}\n\nvoid MindMapViewWindow::setModified(bool p_modified) { m_editor->setModified(p_modified); }\n\nvoid MindMapViewWindow::print() {}\n\nvoid MindMapViewWindow::syncEditorFromBuffer() {\n  auto buffer = getBuffer();\n  if (buffer) {\n    m_editor->setHtml(HtmlTemplateHelper::getMindMapEditorTemplate(),\n                      PathUtils::pathToUrl(buffer->getContentPath()));\n    adapter()->setData(buffer->getContent());\n    m_editor->setModified(buffer->isModified());\n  } else {\n    m_editor->setHtml(\"\");\n    adapter()->setData(\"\");\n    m_editor->setModified(false);\n  }\n\n  m_bufferRevision = buffer ? buffer->getRevision() : 0;\n}\n\nvoid MindMapViewWindow::syncEditorFromBufferContent() {\n  auto buffer = getBuffer();\n  Q_ASSERT(buffer);\n  adapter()->setData(buffer->getContent());\n  m_editor->setModified(buffer->isModified());\n  m_bufferRevision = buffer->getRevision();\n}\n\nvoid MindMapViewWindow::scrollUp() {}\n\nvoid MindMapViewWindow::scrollDown() {}\n\nvoid MindMapViewWindow::zoom(bool p_zoomIn) { Q_UNUSED(p_zoomIn); }\n\nMindMapEditorAdapter *MindMapViewWindow::adapter() const {\n  if (m_editor) {\n    return dynamic_cast<MindMapEditorAdapter *>(m_editor->adapter());\n  }\n\n  return nullptr;\n}\n\nbool MindMapViewWindow::updateConfigRevision() {\n  bool changed = false;\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  if (m_editorConfigRevision != editorConfig.revision()) {\n    changed = true;\n    m_editorConfigRevision = editorConfig.revision();\n  }\n\n  if (m_editorConfigRevision != editorConfig.getMindMapEditorConfig().revision()) {\n    changed = true;\n    m_editorConfigRevision = editorConfig.getMindMapEditorConfig().revision();\n  }\n\n  return changed;\n}\n\nvoid MindMapViewWindow::setupToolBar() {\n  auto toolBar = createToolBar(this);\n  addToolBar(toolBar);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Save);\n\n  toolBar->addSeparator();\n\n  addAction(toolBar, ViewWindowToolBarHelper::Attachment);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Tag);\n\n  ToolBarHelper::addSpacer(toolBar);\n\n  addAction(toolBar, ViewWindowToolBarHelper::FindAndReplace);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Debug);\n}\n\nvoid MindMapViewWindow::toggleDebug() {\n  if (m_debugViewer) {\n    bool shouldEnable = !m_debugViewer->isVisible();\n    m_debugViewer->setVisible(shouldEnable);\n    m_editor->page()->setDevToolsPage(shouldEnable ? m_debugViewer->page() : nullptr);\n  } else {\n    setupDebugViewer();\n    m_editor->page()->setDevToolsPage(m_debugViewer->page());\n  }\n}\n\nvoid MindMapViewWindow::setupDebugViewer() {\n  Q_ASSERT(!m_debugViewer);\n\n  // Need a vertical QSplitter to hold the original QSplitter and the debug viewer.\n  auto mainSplitter = new QSplitter(this);\n  mainSplitter->setContentsMargins(0, 0, 0, 0);\n  mainSplitter->setOrientation(Qt::Vertical);\n\n  replaceCentralWidget(mainSplitter);\n\n  mainSplitter->addWidget(m_editor);\n  mainSplitter->setFocusProxy(m_editor);\n\n  m_debugViewer = new WebViewer(VNoteX::getInst().getThemeMgr().getBaseBackground(), this);\n  m_debugViewer->resize(m_editor->width(), m_editor->height() / 2);\n  mainSplitter->addWidget(m_debugViewer);\n}\n\nvoid MindMapViewWindow::handleFindTextChanged(const QString &p_text, FindOptions p_options) {\n  if (p_options & FindOption::IncrementalSearch) {\n    m_editor->findText(p_text, p_options);\n  }\n}\n\nvoid MindMapViewWindow::handleFindNext(const QStringList &p_texts, FindOptions p_options) {\n  // We do not use mark.js for searching as the contents are mainly SVG.\n  m_editor->findText(p_texts.empty() ? QString() : p_texts[0], p_options);\n}\n\nvoid MindMapViewWindow::handleReplace(const QString &p_text, FindOptions p_options,\n                                      const QString &p_replaceText) {\n  Q_UNUSED(p_text);\n  Q_UNUSED(p_options);\n  Q_UNUSED(p_replaceText);\n  showMessage(tr(\"Replace is not supported yet\"));\n}\n\nvoid MindMapViewWindow::handleReplaceAll(const QString &p_text, FindOptions p_options,\n                                         const QString &p_replaceText) {\n  Q_UNUSED(p_text);\n  Q_UNUSED(p_options);\n  Q_UNUSED(p_replaceText);\n  showMessage(tr(\"Replace is not supported yet\"));\n}\n\nvoid MindMapViewWindow::handleFindAndReplaceWidgetClosed() {\n  m_editor->findText(QString(), FindOption::FindNone);\n}\n\nvoid MindMapViewWindow::showFindAndReplaceWidget() {\n  bool isFirstTime = !m_findAndReplace;\n  ViewWindow::showFindAndReplaceWidget();\n  if (isFirstTime) {\n    m_findAndReplace->setReplaceEnabled(false);\n    m_findAndReplace->setOptionsEnabled(FindOption::WholeWordOnly | FindOption::RegularExpression,\n                                        false);\n  }\n}\n\n// 思维导图 link 增强功能, 支持打开 url 里的内容, 支持多方向打开\nvoid MindMapViewWindow::handleUrlClick(const QString &p_url) {\n  if (p_url.isEmpty()) {\n    return;\n  }\n\n  qDebug() << \"MindMapViewWindow: Handling URL click:\" << p_url;\n\n  // 检查是否为本地文件路径\n  QString filePath = p_url;\n\n  // 如果是相对路径，尝试相对于当前文件解析\n  if (QFileInfo(filePath).isRelative()) {\n    auto buffer = getBuffer();\n    if (buffer) {\n      const QString basePath = QFileInfo(buffer->getContentPath()).absolutePath();\n      filePath = QDir(basePath).absoluteFilePath(p_url);\n    }\n  }\n\n  // 检查文件是否存在\n  if (QFileInfo::exists(filePath)) {\n    // 获取当前脑图所在的ViewSplit\n    auto currentSplit = getViewSplit();\n    if (!currentSplit) {\n      // 如果无法获取当前split，使用原来的逻辑\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_alwaysNewWindow = true;\n      paras->m_focus = true;\n      emit VNoteX::getInst().openFileRequested(filePath, paras);\n      qInfo() << \"Requested to open file in new workspace (fallback):\" << filePath;\n      return;\n    }\n\n    // 查找ViewArea\n    ViewArea *viewArea = nullptr;\n    QWidget *parent = currentSplit->parentWidget();\n    while (parent && !viewArea) {\n      viewArea = dynamic_cast<ViewArea *>(parent);\n      parent = parent->parentWidget();\n    }\n\n    if (!viewArea) {\n      qWarning() << \"Could not find ViewArea, using fallback\";\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_alwaysNewWindow = true;\n      paras->m_focus = true;\n      emit VNoteX::getInst().openFileRequested(filePath, paras);\n      return;\n    }\n\n    // 查找是否已有合适的目标split（右边的split）\n    ViewSplit *targetSplit = nullptr;\n    const auto &allSplits = viewArea->getAllViewSplits();\n\n    // 尝试找到当前脑图右边的split\n    for (auto split : allSplits) {\n      if (split != currentSplit) {\n        // 简单策略：如果有其他split，就使用第一个找到的\n        targetSplit = split;\n        break;\n      }\n    }\n\n    if (targetSplit) {\n      // 如果找到了目标split，直接在其中打开文件\n      qDebug() << \"Found existing target split, opening file directly\";\n\n      // 设置目标split为当前split，这样文件会在那里打开\n      viewArea->setCurrentViewSplit(targetSplit, true);\n\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_alwaysNewWindow = true;\n      paras->m_focus = true;\n      emit VNoteX::getInst().openFileRequested(filePath, paras);\n\n      qInfo() << \"Opened file in existing target split:\" << filePath;\n    } else {\n      // 如果没有目标split，创建一个新的空split（默认右边）\n      emit currentSplit->emptySplitRequested(currentSplit, Direction::Right);\n\n      // 延迟打开文件\n      QTimer::singleShot(50, this, [filePath]() {\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_alwaysNewWindow = true;\n        paras->m_focus = true;\n        emit VNoteX::getInst().openFileRequested(filePath, paras);\n        qInfo() << \"Opened file in newly created empty split:\" << filePath;\n      });\n\n      qInfo() << \"Created new empty split and scheduled file opening:\" << filePath;\n    }\n\n  } else if (p_url.startsWith(\"http://\") || p_url.startsWith(\"https://\")) {\n    // 处理HTTP/HTTPS链接，使用系统默认程序打开\n    WidgetUtils::openUrlByDesktop(QUrl(p_url));\n    qInfo() << \"Opened URL with system default program:\" << p_url;\n  } else {\n    // 文件不存在或URL格式不支持\n    showMessage(tr(\"File does not exist or unsupported URL format: %1\").arg(p_url));\n    qWarning() << \"File does not exist or unsupported URL:\" << p_url;\n  }\n}\n\nvoid MindMapViewWindow::handleUrlClickWithDirection(const QString &p_url,\n                                                    const QString &p_direction) {\n  if (p_url.isEmpty()) {\n    return;\n  }\n\n  qDebug() << \"MindMapViewWindow: Handling URL click with direction:\" << p_url\n           << \"Direction:\" << p_direction;\n\n  // 将字符串方向转换为Direction枚举\n  Direction direction = Direction::Right; // 默认右边\n  if (p_direction == \"Up\") {\n    direction = Direction::Up;\n  } else if (p_direction == \"Down\") {\n    direction = Direction::Down;\n  } else if (p_direction == \"Left\") {\n    direction = Direction::Left;\n  } else if (p_direction == \"Right\") {\n    direction = Direction::Right;\n  }\n\n  // 检查是否为本地文件路径\n  QString filePath = p_url;\n\n  // 如果是相对路径，尝试相对于当前文件解析\n  if (QFileInfo(filePath).isRelative()) {\n    auto buffer = getBuffer();\n    if (buffer) {\n      const QString basePath = QFileInfo(buffer->getContentPath()).absolutePath();\n      filePath = QDir(basePath).absoluteFilePath(p_url);\n    }\n  }\n\n  // 检查文件是否存在\n  if (QFileInfo::exists(filePath)) {\n    // 获取当前脑图所在的ViewSplit\n    auto currentSplit = getViewSplit();\n    if (!currentSplit) {\n      // 如果无法获取当前split，使用原来的逻辑\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_alwaysNewWindow = true;\n      paras->m_focus = true;\n      emit VNoteX::getInst().openFileRequested(filePath, paras);\n      qInfo() << \"Requested to open file in new workspace (fallback):\" << filePath;\n      return;\n    }\n\n    // 查找ViewArea\n    ViewArea *viewArea = nullptr;\n    QWidget *parent = currentSplit->parentWidget();\n    while (parent && !viewArea) {\n      viewArea = dynamic_cast<ViewArea *>(parent);\n      parent = parent->parentWidget();\n    }\n\n    if (!viewArea) {\n      qWarning() << \"Could not find ViewArea, using fallback\";\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_alwaysNewWindow = true;\n      paras->m_focus = true;\n      emit VNoteX::getInst().openFileRequested(filePath, paras);\n      return;\n    }\n\n    // 清理无效的split引用\n    cleanupInvalidSplits(viewArea);\n\n    // 查找指定方向是否已有目标split\n    ViewSplit *targetSplit = m_directionSplits.value(p_direction, nullptr);\n\n    // 验证target split是否仍然有效\n    if (targetSplit) {\n      const auto &allSplits = viewArea->getAllViewSplits();\n      if (!allSplits.contains(targetSplit)) {\n        // split已经被删除，清除映射\n        m_directionSplits.remove(p_direction);\n        targetSplit = nullptr;\n        qDebug() << \"Removed invalid split for direction:\" << p_direction;\n      }\n    }\n\n    if (targetSplit && targetSplit != currentSplit) {\n      // 如果找到了有效的目标split，直接在其中打开文件\n      qDebug() << \"Found existing target split for direction:\" << p_direction;\n\n      viewArea->setCurrentViewSplit(targetSplit, true);\n\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_alwaysNewWindow = true;\n      paras->m_focus = true;\n      emit VNoteX::getInst().openFileRequested(filePath, paras);\n\n      qInfo() << \"Opened file in existing target split with direction:\" << p_direction << filePath;\n    } else {\n      // 如果没有目标split，根据指定方向创建新的空split\n      qDebug() << \"Creating new empty split in direction:\" << p_direction;\n      emit currentSplit->emptySplitRequested(currentSplit, direction);\n\n      // 延迟打开文件，并记录新创建的split\n      QTimer::singleShot(100, this, [this, filePath, p_direction, viewArea]() {\n        // 查找新创建的split（应该是最新的）\n        const auto &allSplits = viewArea->getAllViewSplits();\n        ViewSplit *newSplit = nullptr;\n\n        for (auto split : allSplits) {\n          if (split != getViewSplit() && !m_directionSplits.values().contains(split)) {\n            newSplit = split;\n            break;\n          }\n        }\n\n        if (newSplit) {\n          // 记录这个方向对应的split\n          m_directionSplits[p_direction] = newSplit;\n          qDebug() << \"Recorded new split for direction:\" << p_direction;\n        }\n\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_alwaysNewWindow = true;\n        paras->m_focus = true;\n        emit VNoteX::getInst().openFileRequested(filePath, paras);\n        qInfo() << \"Opened file in newly created empty split with direction:\" << p_direction\n                << filePath;\n      });\n\n      qInfo() << \"Created new empty split in direction:\" << p_direction\n              << \"and scheduled file opening:\" << filePath;\n    }\n\n  } else if (p_url.startsWith(\"http://\") || p_url.startsWith(\"https://\")) {\n    // 处理HTTP/HTTPS链接，使用系统默认程序打开\n    WidgetUtils::openUrlByDesktop(QUrl(p_url));\n    qInfo() << \"Opened URL with system default program:\" << p_url;\n  } else {\n    // 文件不存在或URL格式不支持\n    showMessage(tr(\"File does not exist or unsupported URL format: %1\").arg(p_url));\n    qWarning() << \"File does not exist or unsupported URL:\" << p_url;\n  }\n}\n\nvoid MindMapViewWindow::cleanupInvalidSplits(ViewArea *viewArea) {\n  if (!viewArea) {\n    return;\n  }\n\n  const auto &validSplits = viewArea->getAllViewSplits();\n  QStringList invalidDirections;\n\n  // 检查每个记录的split是否仍然有效\n  for (auto it = m_directionSplits.begin(); it != m_directionSplits.end(); ++it) {\n    if (!validSplits.contains(it.value())) {\n      invalidDirections.append(it.key());\n    }\n  }\n\n  // 移除无效的映射\n  for (const QString &direction : invalidDirections) {\n    m_directionSplits.remove(direction);\n    qDebug() << \"Cleaned up invalid split for direction:\" << direction;\n  }\n}\n"
  },
  {
    "path": "src/widgets/mindmapviewwindow.h",
    "content": "#ifndef MINDMAPVIEWWINDOW_H\n#define MINDMAPVIEWWINDOW_H\n\n#include \"viewwindow.h\"\n\n#include <QMap>\n#include <QScopedPointer>\n\nclass QWebEngineView;\n\nnamespace vnotex {\nclass MindMapEditor;\nclass MindMapEditorAdapter;\nclass ViewArea;\n\nclass MindMapViewWindow : public ViewWindow {\n  Q_OBJECT\npublic:\n  explicit MindMapViewWindow(QWidget *p_parent = nullptr);\n\n  QString getLatestContent() const Q_DECL_OVERRIDE;\n\n  QString selectedText() const Q_DECL_OVERRIDE;\n\n  void setMode(ViewWindowMode p_mode) Q_DECL_OVERRIDE;\n\n  void openTwice(const QSharedPointer<FileOpenParameters> &p_paras) Q_DECL_OVERRIDE;\n\n  ViewWindowSession saveSession() const Q_DECL_OVERRIDE;\n\n  void applySnippet(const QString &p_name) Q_DECL_OVERRIDE;\n\n  void applySnippet() Q_DECL_OVERRIDE;\n\n  void fetchWordCountInfo(const std::function<void(const WordCountInfo &)> &p_callback) const\n      Q_DECL_OVERRIDE;\n\npublic slots:\n  void handleEditorConfigChange() Q_DECL_OVERRIDE;\n\nprotected slots:\n  void setModified(bool p_modified) Q_DECL_OVERRIDE;\n\n  void print() Q_DECL_OVERRIDE;\n\n  void toggleDebug() Q_DECL_OVERRIDE;\n\n  void handleFindTextChanged(const QString &p_text, FindOptions p_options) Q_DECL_OVERRIDE;\n\n  void handleFindNext(const QStringList &p_texts, FindOptions p_options) Q_DECL_OVERRIDE;\n\n  void handleReplace(const QString &p_text, FindOptions p_options,\n                     const QString &p_replaceText) Q_DECL_OVERRIDE;\n\n  void handleReplaceAll(const QString &p_text, FindOptions p_options,\n                        const QString &p_replaceText) Q_DECL_OVERRIDE;\n\n  void handleFindAndReplaceWidgetClosed() Q_DECL_OVERRIDE;\n\n  void showFindAndReplaceWidget() Q_DECL_OVERRIDE;\n\nprotected:\n  void syncEditorFromBuffer() Q_DECL_OVERRIDE;\n\n  void syncEditorFromBufferContent() Q_DECL_OVERRIDE;\n\n  void scrollUp() Q_DECL_OVERRIDE;\n\n  void scrollDown() Q_DECL_OVERRIDE;\n\n  void zoom(bool p_zoomIn) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupToolBar();\n\n  void setupEditor();\n\n  MindMapEditorAdapter *adapter() const;\n\n  bool updateConfigRevision();\n\n  void setupDebugViewer();\n\n  void handleUrlClick(const QString &p_url);\n\n  void handleUrlClickWithDirection(const QString &p_url, const QString &p_direction);\n\n  void cleanupInvalidSplits(ViewArea *viewArea);\n\n  // Managed by QObject.\n  MindMapEditor *m_editor = nullptr;\n\n  // Used to debug web view.\n  QWebEngineView *m_debugViewer = nullptr;\n\n  int m_editorConfigRevision = 0;\n\n  // 记录每个方向对应的目标split，用于智能方向打开\n  QMap<QString, ViewSplit *> m_directionSplits;\n};\n} // namespace vnotex\n\n#endif // MINDMAPVIEWWINDOW_H\n"
  },
  {
    "path": "src/widgets/navigationmode.cpp",
    "content": "#include \"navigationmode.h\"\n\n#include <QFont>\n#include <QFontMetrics>\n#include <QLabel>\n#include <QListWidget>\n#include <QListWidgetItem>\n#include <QScrollBar>\n#include <QTreeWidget>\n#include <QTreeWidgetItem>\n\n#include \"treewidget.h\"\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nNavigationMode::NavigationMode(Type p_type, QWidget *p_widget)\n    : m_type(p_type), m_widget(p_widget) {}\n\nvoid NavigationMode::registerNavigation(QChar p_majorKey) { m_majorKey = p_majorKey; }\n\nvoid NavigationMode::hideNavigation() { clearNavigation(); }\n\nvoid NavigationMode::clearNavigation() {\n  m_secondKeyMap.clear();\n  for (auto label : m_navigationLabels) {\n    delete label;\n  }\n  m_navigationLabels.clear();\n\n  m_isMajorKeyConsumed = false;\n}\n\nQChar NavigationMode::generateSecondKey(int p_idx) {\n  if (p_idx < 0 || p_idx >= c_maxNumOfNavigationItems) {\n    return QChar();\n  }\n\n  if (p_idx < 26) {\n    return QChar('a' + p_idx);\n  } else {\n    return QChar('0' + p_idx - 26);\n  }\n}\n\nQString NavigationMode::generateLabelString(QChar p_secondKey) const {\n  return p_secondKey.isNull() ? QString(m_majorKey) : QString(m_majorKey) + p_secondKey;\n}\n\nstatic QString generateNavigationLabelStyle(const QString &p_str, bool p_tiny) {\n  static int lastLen = -1;\n  static int pxWidth = 24;\n  static int pxHeight = 24;\n  const int fontPt = p_tiny ? 12 : 15;\n\n  auto fontFamily = WidgetUtils::getMonospaceFont();\n\n  if (p_str.size() != lastLen) {\n    QFont font(fontFamily, fontPt);\n    font.setBold(true);\n    QFontMetrics fm(font);\n    pxWidth = fm.horizontalAdvance(p_str) + 5;\n    pxHeight = fm.capHeight() + 5;\n    lastLen = p_str.size();\n  }\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  QColor bg(themeMgr.paletteColor(QStringLiteral(\"widgets#navigationlabel#bg\")));\n  bg.setAlpha(200);\n\n  QString style = QStringLiteral(\"background-color: %1;\"\n                                 \"color: %2;\"\n                                 \"font-size: %3pt;\"\n                                 \"font: bold;\"\n                                 \"font-family: %4;\"\n                                 \"border-radius: 3px;\"\n                                 \"min-width: %5px;\"\n                                 \"max-width: %5px;\")\n                      .arg(bg.name(QColor::HexArgb))\n                      .arg(themeMgr.paletteColor(QStringLiteral(\"widgets#navigationlabel#fg\")))\n                      .arg(fontPt)\n                      .arg(fontFamily)\n                      .arg(pxWidth);\n\n  if (p_tiny) {\n    style += QStringLiteral(\"margin: 0px;\"\n                            \"padding: 0px;\"\n                            \"min-height: %1px;\"\n                            \"max-height: %1px;\")\n                 .arg(pxHeight);\n  }\n\n  return style;\n}\n\nQLabel *NavigationMode::createNavigationLabel(QChar p_secondKey, QWidget *p_parent) const {\n  QString labelStr = generateLabelString(p_secondKey);\n  QLabel *label = new QLabel(labelStr, p_parent);\n  label->setStyleSheet(generateNavigationLabelStyle(labelStr, false));\n  return label;\n}\n\nNavigationMode::Status NavigationMode::handleKeyNavigation(int p_key) {\n  Status sta;\n  auto keyChar = Utils::keyToChar(p_key, true);\n  if (m_isMajorKeyConsumed && !keyChar.isNull()) {\n    m_isMajorKeyConsumed = false;\n    sta.m_isTargetHit = true;\n    auto it = m_secondKeyMap.find(keyChar);\n    if (it != m_secondKeyMap.end()) {\n      sta.m_isKeyConsumed = true;\n      handleTargetHit(it.value());\n    }\n  } else if (keyChar == m_majorKey) {\n    // Major key pressed.\n    sta.m_isKeyConsumed = true;\n    switch (m_type) {\n    case Type::SingleKey:\n      sta.m_isTargetHit = true;\n      handleTargetHit(nullptr);\n      break;\n\n    case Type::StagedDoubleKeys:\n      // Hit the major stage.\n      handleTargetHit(nullptr);\n\n      // Show the second stage.\n      showNavigationWithDoubleKeys();\n\n      Q_FALLTHROUGH();\n\n    case Type::DoubleKeys:\n      if (m_secondKeyMap.isEmpty()) {\n        sta.m_isTargetHit = true;\n      } else {\n        m_isMajorKeyConsumed = true;\n      }\n      break;\n    }\n  }\n\n  return sta;\n}\n\nvoid NavigationMode::showNavigation() {\n  clearNavigation();\n\n  if (!isTargetVisible()) {\n    return;\n  }\n\n  switch (m_type) {\n  case Type::SingleKey:\n    Q_FALLTHROUGH();\n  case Type::StagedDoubleKeys: {\n    auto label = createNavigationLabel(QChar(), m_widget);\n    placeNavigationLabel(-1, nullptr, label);\n    label->show();\n    m_navigationLabels.append(label);\n    break;\n  }\n\n  case Type::DoubleKeys: {\n    showNavigationWithDoubleKeys();\n    break;\n  }\n  }\n}\n\nbool NavigationMode::isTargetVisible() { return m_widget->isVisible(); }\n\nQVector<void *> NavigationMode::getVisibleNavigationItems() { return QVector<void *>(); }\n\nvoid NavigationMode::showNavigationWithDoubleKeys() {\n  // Generate labels for visible items.\n  auto items = getVisibleNavigationItems();\n  for (int i = 0; i < items.size(); ++i) {\n    const auto key = generateSecondKey(i);\n    if (key.isNull()) {\n      break;\n    }\n\n    m_secondKeyMap[key] = items[i];\n\n    auto label = createNavigationLabel(key, m_widget);\n    placeNavigationLabel(i, items[i], label);\n    label->show();\n\n    m_navigationLabels.append(label);\n  }\n}\n"
  },
  {
    "path": "src/widgets/navigationmode.h",
    "content": "#ifndef NAVIGATIONMODE_H\n#define NAVIGATIONMODE_H\n\n#include <QChar>\n#include <QMap>\n#include <QVector>\n\n#include <utils/utils.h>\n\nclass QListWidget;\nclass QListWidgetItem;\nclass QTreeWidget;\nclass QTreeWidgetItem;\nclass QLabel;\nclass QWidget;\n\nnamespace vnotex {\n// Interface for Navigation Mode.\n// Need to inherit this class if one widget wants to support Navigation mode.\nclass NavigationMode {\npublic:\n  struct Status {\n    bool m_isKeyConsumed = false;\n    bool m_isTargetHit = false;\n  };\n\n  virtual ~NavigationMode() {}\n\n  virtual void registerNavigation(QChar p_majorKey);\n\n  virtual void showNavigation();\n\n  virtual void hideNavigation();\n\n  virtual NavigationMode::Status handleKeyNavigation(int p_key);\n\nprotected:\n  enum class Type { SingleKey, DoubleKeys, StagedDoubleKeys };\n\n  explicit NavigationMode(NavigationMode::Type p_type, QWidget *p_widget);\n\n  // @p_item: if it is null, that means it is a major key hit; otherwise, it is a second key hit.\n  virtual void handleTargetHit(void *p_item) = 0;\n\n  virtual bool isTargetVisible();\n\n  virtual QVector<void *> getVisibleNavigationItems();\n\n  // @p_idx: will be -1 for SingleKey case and the major stage of StagedDoubleKeys case.\n  virtual void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) = 0;\n\n  virtual void showNavigationWithDoubleKeys();\n\n  virtual void clearNavigation();\n\n  // a-z and 0-9 are allowed for second key.\n  static const int c_maxNumOfNavigationItems = 36;\n\nprivate:\n  QString generateLabelString(QChar p_secondKey) const;\n\n  QLabel *createNavigationLabel(QChar p_secondKey, QWidget *p_parent) const;\n\n  static QChar generateSecondKey(int p_idx);\n\n  Type m_type = Type::SingleKey;\n\n  QWidget *m_widget = nullptr;\n\n  QChar m_majorKey;\n\n  QMap<QChar, void *> m_secondKeyMap;\n\n  bool m_isMajorKeyConsumed = false;\n\n  QVector<QLabel *> m_navigationLabels;\n};\n} // namespace vnotex\n\n#endif // NAVIGATIONMODE_H\n"
  },
  {
    "path": "src/widgets/navigationmodemgr.cpp",
    "content": "#include \"navigationmodemgr.h\"\n\n#include <QCoreApplication>\n#include <QDebug>\n#include <QKeyEvent>\n#include <QMouseEvent>\n#include <QShortcut>\n\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <utils/widgetutils.h>\n#include <vtextedit/vtextedit.h>\n\n#include \"navigationmode.h\"\n\nusing namespace vnotex;\n\nQWidget *NavigationModeMgr::s_widget = nullptr;\n\nNavigationModeMgr::NavigationModeMgr() : QObject(nullptr) {\n  Q_ASSERT(s_widget);\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto keys = coreConfig.getShortcut(CoreConfig::Shortcut::NavigationMode);\n  auto shortcut = WidgetUtils::createShortcut(keys, s_widget, Qt::ApplicationShortcut);\n  if (!shortcut) {\n    qWarning() << \"failed to create shortcut for NavigationMode\" << keys;\n    return;\n  }\n  connect(shortcut, &QShortcut::activated, this, &NavigationModeMgr::triggerNavigationMode);\n}\n\nNavigationModeMgr::~NavigationModeMgr() {}\n\nNavigationModeMgr &NavigationModeMgr::getInst() {\n  static NavigationModeMgr mgr;\n  return mgr;\n}\n\nvoid NavigationModeMgr::registerNavigationTarget(NavigationMode *p_target) {\n  auto key = getNextMajorKey();\n  if (!key.isNull()) {\n    p_target->registerNavigation(key);\n    m_targets.push_back(Target(p_target, true));\n  } else {\n    qWarning() << \"failed to register navigation target for no major key available\" << p_target;\n  }\n}\n\nQChar NavigationModeMgr::getNextMajorKey() {\n  QChar ret = m_nextMajorKey;\n  if (m_nextMajorKey == 'z') {\n    m_nextMajorKey = QChar();\n  } else if (!m_nextMajorKey.isNull()) {\n    m_nextMajorKey = QChar(m_nextMajorKey.toLatin1() + 1);\n  }\n  return ret;\n}\n\nvoid NavigationModeMgr::triggerNavigationMode() {\n  if (m_targets.isEmpty()) {\n    qInfo() << \"no navigation target\";\n    return;\n  }\n\n  m_activated = true;\n\n  qApp->installEventFilter(this);\n\n  // Qt bug: the shortcut key sequence may be swallowed by input method first.\n  vte::VTextEdit::forceInputMethodDisabled(true);\n\n  for (auto &target : m_targets) {\n    target.m_available = true;\n    target.m_target->showNavigation();\n  }\n}\n\nvoid NavigationModeMgr::init(QWidget *p_widget) { s_widget = p_widget; }\n\nvoid NavigationModeMgr::exitNavigationMode() {\n  m_activated = false;\n  qApp->removeEventFilter(this);\n\n  vte::VTextEdit::forceInputMethodDisabled(false);\n\n  for (auto &target : m_targets) {\n    target.m_available = true;\n    target.m_target->hideNavigation();\n  }\n}\n\nbool NavigationModeMgr::eventFilter(QObject *p_obj, QEvent *p_event) {\n  if (m_activated) {\n    switch (p_event->type()) {\n    case QEvent::KeyPress: {\n      bool ret = handleKeyPress(static_cast<QKeyEvent *>(p_event));\n      if (ret) {\n        return true;\n      }\n      break;\n    }\n\n    case QEvent::MouseButtonPress:\n      exitNavigationMode();\n      break;\n\n    default:\n      break;\n    }\n  }\n\n  return QObject::eventFilter(p_obj, p_event);\n}\n\nbool NavigationModeMgr::handleKeyPress(QKeyEvent *p_event) {\n  int key = p_event->key();\n\n  if (WidgetUtils::isMetaKey(key)) {\n    return false;\n  }\n\n  bool hasConsumed = false;\n  bool pending = false;\n  for (auto &target : m_targets) {\n    if (hasConsumed) {\n      target.m_available = false;\n      target.m_target->hideNavigation();\n      continue;\n    }\n    if (target.m_available) {\n      auto sta = target.m_target->handleKeyNavigation(key);\n      if (sta.m_isKeyConsumed) {\n        hasConsumed = true;\n        if (!sta.m_isTargetHit) {\n          // Consumed but not hit. Need more keys.\n          pending = true;\n        }\n      } else {\n        // Do not ask this target any more.\n        target.m_available = false;\n        target.m_target->hideNavigation();\n      }\n    }\n  }\n\n  if (!pending) {\n    exitNavigationMode();\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/navigationmodemgr.h",
    "content": "#ifndef NAVIGATIONMODEMGR_H\n#define NAVIGATIONMODEMGR_H\n\n#include <QObject>\n\n#include <QChar>\n#include <QVector>\n\nclass QKeyEvent;\n\nnamespace vnotex {\nclass NavigationMode;\n\nclass NavigationModeMgr : public QObject {\n  Q_OBJECT\npublic:\n  ~NavigationModeMgr();\n\n  // Maybe we need a unregisterNavigationTarget()?\n  void registerNavigationTarget(NavigationMode *p_target);\n\n  static NavigationModeMgr &getInst();\n\n  static void init(QWidget *p_widget);\n\nprotected:\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void triggerNavigationMode();\n\nprivate:\n  struct Target {\n    Target() = default;\n\n    Target(NavigationMode *p_target, bool p_available)\n        : m_target(p_target), m_available(p_available) {}\n\n    NavigationMode *m_target = nullptr;\n\n    bool m_available = false;\n  };\n\n  NavigationModeMgr();\n\n  QChar getNextMajorKey();\n\n  void exitNavigationMode();\n\n  // Return true if the event is consumed.\n  bool handleKeyPress(QKeyEvent *p_event);\n\n  QChar m_nextMajorKey = 'a';\n\n  QVector<Target> m_targets;\n\n  bool m_activated = false;\n\n  static QWidget *s_widget;\n};\n} // namespace vnotex\n\n#endif // NAVIGATIONMODEMGR_H\n"
  },
  {
    "path": "src/widgets/navigationmodewrapper.h",
    "content": "#ifndef NAVIGATIONMODEWRAPPER_H\n#define NAVIGATIONMODEWRAPPER_H\n\n#include \"navigationmode.h\"\n\n#include <QLabel>\n#include <QScrollBar>\n\n#include <QListWidgetItem>\n#include <QTreeWidgetItem>\n\n#include \"listwidget.h\"\n#include \"treewidget.h\"\n\nnamespace vnotex {\ntemplate <typename T, typename I> class NavigationModeWrapper : public NavigationMode {\npublic:\n  NavigationModeWrapper(T *p_widget);\n\n  // NavigationMode.\nprotected:\n  QVector<void *> getVisibleNavigationItems() Q_DECL_OVERRIDE;\n\n  void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE;\n\n  void handleTargetHit(void *p_item) Q_DECL_OVERRIDE;\n\nprivate:\n  QVector<I *> getVisibleItems() const { return QVector<I *>(); }\n\n  T *m_widget = nullptr;\n};\n\ntemplate <typename T, typename I>\nNavigationModeWrapper<T, I>::NavigationModeWrapper(T *p_widget)\n    : NavigationMode(NavigationMode::Type::DoubleKeys, p_widget), m_widget(p_widget) {}\n\ntemplate <typename T, typename I>\nQVector<void *> NavigationModeWrapper<T, I>::getVisibleNavigationItems() {\n  QVector<void *> items;\n  auto rawItems = getVisibleItems();\n  items.reserve(rawItems.size());\n  for (auto it : rawItems) {\n    items.push_back(it);\n  }\n  return items;\n}\n\ntemplate <typename T, typename I>\nvoid NavigationModeWrapper<T, I>::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) {\n  Q_UNUSED(p_idx);\n  Q_ASSERT(p_item);\n\n  int extraWidth = p_label->width() + 2;\n  auto vbar = m_widget->verticalScrollBar();\n  if (vbar && vbar->minimum() != vbar->maximum()) {\n    extraWidth += vbar->width();\n  }\n\n  auto item = static_cast<I *>(p_item);\n  const auto rt = m_widget->visualItemRect(item);\n  const int x = rt.x() + m_widget->width() - extraWidth;\n  const int y = rt.y();\n  p_label->move(x, y);\n}\n\ntemplate <typename T, typename I> void NavigationModeWrapper<T, I>::handleTargetHit(void *p_item) {\n  Q_ASSERT(p_item);\n  auto item = static_cast<I *>(p_item);\n  m_widget->setCurrentItem(item);\n  m_widget->setFocus();\n}\n\ntemplate <>\ninline QVector<QTreeWidgetItem *>\nNavigationModeWrapper<QTreeWidget, QTreeWidgetItem>::getVisibleItems() const {\n  return TreeWidget::getVisibleItems(m_widget);\n}\n\ntemplate <>\ninline QVector<QListWidgetItem *>\nNavigationModeWrapper<QListWidget, QListWidgetItem>::getVisibleItems() const {\n  return ListWidget::getVisibleItems(m_widget);\n}\n} // namespace vnotex\n\n#endif // NAVIGATIONMODEWRAPPER_H\n"
  },
  {
    "path": "src/widgets/notebookexplorer.cpp",
    "content": "#include \"notebookexplorer.h\"\n\n#include <QActionGroup>\n#include <QFileDialog>\n#include <QMenu>\n#include <QProgressDialog>\n#include <QToolButton>\n#include <QVBoxLayout>\n\n#include \"dialogs/importfolderdialog.h\"\n#include \"dialogs/importnotebookdialog.h\"\n#include \"dialogs/managenotebooksdialog.h\"\n#include \"dialogs/newfolderdialog.h\"\n#include \"dialogs/newnotebookdialog.h\"\n#include \"dialogs/newnotebookfromfolderdialog.h\"\n#include \"dialogs/newnotedialog.h\"\n#include \"dialogs/selectdialog.h\"\n#include \"mainwindow.h\"\n#include \"messageboxhelper.h\"\n#include \"notebooknodeexplorer.h\"\n#include \"notebookselector.h\"\n#include \"titlebar.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/events.h>\n#include <core/exception.h>\n#include <core/fileopenparameters.h>\n#include <core/notebookmgr.h>\n#include <core/sessionconfig.h>\n#include <core/templatemgr.h>\n#include <core/vnotex.h>\n#include <core/widgetconfig.h>\n#include <notebook/notebook.h>\n#include <snippet/snippetmgr.h>\n#include <utils/fileutils.h>\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n#include <utils/widgetutils.h>\n\n#include \"navigationmodemgr.h\"\n#include \"widgetsfactory.h\"\n\nusing namespace vnotex;\n\nNotebookExplorer::NotebookExplorer(QWidget *p_parent) : QFrame(p_parent) {\n  setupUI();\n\n  auto mainWindow = VNoteX::getInst().getMainWindow();\n  connect(mainWindow, &MainWindow::mainWindowClosed, this,\n          [this](const QSharedPointer<Event> &p_event) {\n            if (p_event->m_handled) {\n              return;\n            }\n\n            saveSession();\n          });\n\n  connect(mainWindow, &MainWindow::mainWindowStarted, this, &NotebookExplorer::loadSession);\n}\n\nvoid NotebookExplorer::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(mainLayout);\n\n  // Title bar.\n  auto titleBar = setupTitleBar(this);\n  mainLayout->addWidget(titleBar);\n\n  const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();\n\n  // Selector.\n  m_selector = new NotebookSelector(this);\n  m_selector->setWhatsThis(tr(\"Select one of all the notebooks as current notebook.<br/>\"\n                              \"Move mouse on one item to check its details.\"));\n  NavigationModeMgr::getInst().registerNavigationTarget(m_selector);\n  m_selector->setViewOrder(widgetConfig.getNotebookSelectorViewOrder());\n  connect(m_selector, QOverload<int>::of(&QComboBox::activated), this, [this](int p_idx) {\n    auto id = static_cast<ID>(m_selector->itemData(p_idx).toULongLong());\n    emit notebookActivated(id);\n  });\n  connect(m_selector, &NotebookSelector::newNotebookRequested, this,\n          &NotebookExplorer::newNotebook);\n  mainLayout->addWidget(m_selector);\n\n  m_nodeExplorer = new NotebookNodeExplorer(this);\n  m_nodeExplorer->setViewOrder(widgetConfig.getNodeExplorerViewOrder());\n  m_nodeExplorer->setExploreMode(widgetConfig.getNodeExplorerExploreMode());\n  m_nodeExplorer->setExternalFilesVisible(widgetConfig.isNodeExplorerExternalFilesVisible());\n  connect(m_nodeExplorer, &NotebookNodeExplorer::nodeActivated, &VNoteX::getInst(),\n          &VNoteX::openNodeRequested);\n  connect(m_nodeExplorer, &NotebookNodeExplorer::fileActivated, &VNoteX::getInst(),\n          &VNoteX::openFileRequested);\n  connect(m_nodeExplorer, &NotebookNodeExplorer::nodeAboutToMove, &VNoteX::getInst(),\n          &VNoteX::nodeAboutToMove);\n  connect(m_nodeExplorer, &NotebookNodeExplorer::nodeAboutToRemove, &VNoteX::getInst(),\n          &VNoteX::nodeAboutToRemove);\n  connect(m_nodeExplorer, &NotebookNodeExplorer::nodeAboutToReload, &VNoteX::getInst(),\n          &VNoteX::nodeAboutToReload);\n  connect(m_nodeExplorer, &NotebookNodeExplorer::closeFileRequested, &VNoteX::getInst(),\n          &VNoteX::closeFileRequested);\n  mainLayout->addWidget(m_nodeExplorer);\n\n  setFocusProxy(m_nodeExplorer);\n}\n\nTitleBar *NotebookExplorer::setupTitleBar(QWidget *p_parent) {\n  const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();\n\n  auto titleBar = new TitleBar(tr(\"Notebook\"), false, TitleBar::Action::Menu, p_parent);\n  titleBar->setWhatsThis(\n      tr(\"This title bar contains buttons and menu to manage notebooks and notes.\"));\n  titleBar->setActionButtonsAlwaysShown(true);\n\n  {\n    auto viewMenu = WidgetsFactory::createMenu(titleBar);\n\n    auto notebookMenu = viewMenu->addMenu(tr(\"Notebooks\"));\n    setupViewMenu(notebookMenu, true);\n    auto nodeMenu = viewMenu->addMenu(tr(\"Notes\"));\n    setupViewMenu(nodeMenu, false);\n\n    titleBar->addActionButton(QStringLiteral(\"view.svg\"), tr(\"View By\"), viewMenu);\n  }\n\n  {\n    auto recycleBinMenu = WidgetsFactory::createMenu(titleBar);\n    setupRecycleBinMenu(recycleBinMenu);\n    titleBar->addActionButton(QStringLiteral(\"recycle_bin.svg\"), tr(\"Recycle Bin\"), recycleBinMenu);\n  }\n\n  {\n    auto btn = titleBar->addActionButton(QStringLiteral(\"scan_import.svg\"), tr(\"Scan and Import\"));\n    connect(btn, &QToolButton::clicked, this, [this]() {\n      if (!m_currentNotebook) {\n        MessageBoxHelper::notify(MessageBoxHelper::Warning, tr(\"Please select one notebook first.\"),\n                                 VNoteX::getInst().getMainWindow());\n        return;\n      }\n      int ret = MessageBoxHelper::questionOkCancel(\n          MessageBoxHelper::Warning,\n          tr(\"Scan the whole notebook (%1) and import external files automatically?\")\n              .arg(m_currentNotebook->getName()),\n          tr(\"This operation helps importing external files that are added outside from VNote. \"\n             \"It may import unexpected files.\"),\n          tr(\"It is recommended to always manage files within VNote.\"),\n          VNoteX::getInst().getMainWindow());\n      if (ret != QMessageBox::Ok) {\n        return;\n      }\n\n      auto importedFiles = m_currentNotebook->scanAndImportExternalFiles();\n      MessageBoxHelper::notify(MessageBoxHelper::Information,\n                               tr(\"Imported %n file(s).\", \"\", importedFiles.size()), QString(),\n                               importedFiles.join('\\n'), VNoteX::getInst().getMainWindow());\n      if (!importedFiles.isEmpty()) {\n        m_nodeExplorer->reload();\n      }\n    });\n  }\n\n  {\n    auto btn =\n        titleBar->addActionButton(QStringLiteral(\"manage_notebooks.svg\"), tr(\"Manage Notebooks\"));\n    connect(btn, &QToolButton::clicked, this, &NotebookExplorer::manageNotebooks);\n  }\n\n  titleBar->addMenuAction(tr(\"Rebuild Notebook Database\"), titleBar,\n                          [this]() { rebuildDatabase(); });\n\n  // External Files menu.\n  {\n    auto subMenu = titleBar->addMenuSubMenu(tr(\"External Files\"));\n    auto showAct = titleBar->addMenuAction(\n        subMenu, tr(\"Show External Files\"), titleBar, [this](bool p_checked) {\n          ConfigMgr::getInst().getWidgetConfig().setNodeExplorerExternalFilesVisible(p_checked);\n          m_nodeExplorer->setExternalFilesVisible(p_checked);\n        });\n    showAct->setCheckable(true);\n    showAct->setChecked(widgetConfig.isNodeExplorerExternalFilesVisible());\n\n    auto importAct = titleBar->addMenuAction(\n        subMenu, tr(\"Import External Files when Activated\"), titleBar, [](bool p_checked) {\n          ConfigMgr::getInst().getWidgetConfig().setNodeExplorerAutoImportExternalFilesEnabled(\n              p_checked);\n        });\n    importAct->setCheckable(true);\n    importAct->setChecked(widgetConfig.getNodeExplorerAutoImportExternalFilesEnabled());\n  }\n\n  {\n    auto act = titleBar->addMenuAction(\n        tr(\"Close File Before Open with External Program\"), titleBar, [](bool p_checked) {\n          ConfigMgr::getInst().getWidgetConfig().setNodeExplorerCloseBeforeOpenWithEnabled(\n              p_checked);\n        });\n    act->setCheckable(true);\n    act->setChecked(widgetConfig.getNodeExplorerCloseBeforeOpenWithEnabled());\n  }\n\n  setupExploreModeMenu(titleBar);\n\n  return titleBar;\n}\n\nvoid NotebookExplorer::loadNotebooks() { m_selector->loadNotebooks(); }\n\nvoid NotebookExplorer::reloadNotebook(const Notebook *p_notebook) {\n  m_selector->reloadNotebook(p_notebook);\n}\n\nvoid NotebookExplorer::setCurrentNotebook(const QSharedPointer<Notebook> &p_notebook) {\n  updateSession();\n\n  m_currentNotebook = p_notebook;\n\n  ID id = p_notebook ? p_notebook->getId() : static_cast<ID>(Notebook::InvalidId);\n  m_selector->setCurrentNotebook(id);\n\n  m_nodeExplorer->setNotebook(p_notebook);\n\n  recoverSession();\n}\n\nvoid NotebookExplorer::newNotebook() {\n  NewNotebookDialog dialog(VNoteX::getInst().getMainWindow());\n  dialog.exec();\n}\n\nvoid NotebookExplorer::importNotebook() {\n  ImportNotebookDialog dialog(VNoteX::getInst().getMainWindow());\n  dialog.exec();\n}\n\nvoid NotebookExplorer::newFolder() {\n  auto node = checkNotebookAndGetCurrentExploredFolderNode();\n  if (!node) {\n    return;\n  }\n\n  NewFolderDialog dialog(node, VNoteX::getInst().getMainWindow());\n  if (dialog.exec() == QDialog::Accepted) {\n    m_nodeExplorer->setCurrentNode(dialog.getNewNode().data());\n  }\n}\n\nvoid NotebookExplorer::newNote() {\n  auto node = checkNotebookAndGetCurrentExploredFolderNode();\n  if (!node) {\n    return;\n  }\n\n  NewNoteDialog dialog(node, VNoteX::getInst().getMainWindow());\n  if (dialog.exec() == QDialog::Accepted) {\n    m_nodeExplorer->setCurrentNode(dialog.getNewNode().data());\n    // Open it right now.\n    auto paras = QSharedPointer<FileOpenParameters>::create();\n    paras->m_mode = ViewWindowMode::Edit;\n    paras->m_newFile = true;\n    emit VNoteX::getInst().openNodeRequested(dialog.getNewNode().data(), paras);\n  }\n}\n\nvoid NotebookExplorer::newQuickNote() {\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  const auto &schemes = sessionConfig.getQuickNoteSchemes();\n  if (schemes.isEmpty()) {\n    MessageBoxHelper::notify(MessageBoxHelper::Information,\n                             tr(\"Please set up quick note schemes in the Settings dialog first.\"),\n                             VNoteX::getInst().getMainWindow());\n    return;\n  }\n\n  SelectDialog dialog(tr(\"New Quick Note\"), VNoteX::getInst().getMainWindow());\n  for (int i = 0; i < schemes.size(); ++i) {\n    dialog.addSelection(schemes[i].m_name, i);\n  }\n\n  if (dialog.exec() != QDialog::Accepted) {\n    return;\n  }\n\n  int selection = dialog.getSelection();\n  const auto &scheme = schemes[selection];\n\n  Notebook *notebook = m_currentNotebook.data();\n  Node *parentNode = currentExploredFolderNode();\n  if (!scheme.m_folderPath.isEmpty()) {\n    auto node = VNoteX::getInst().getNotebookMgr().loadNodeByPath(scheme.m_folderPath);\n    if (node) {\n      notebook = node->getNotebook();\n      parentNode = node.data();\n    }\n  }\n\n  if (!parentNode) {\n    MessageBoxHelper::notify(MessageBoxHelper::Information,\n                             tr(\"The quick note should be created within a notebook.\"),\n                             VNoteX::getInst().getMainWindow());\n    return;\n  }\n\n  QFileInfo finfo(SnippetMgr::getInst().applySnippetBySymbol(scheme.m_noteName));\n  QString newName = FileUtils::generateFileNameWithSequence(\n      parentNode->fetchAbsolutePath(), finfo.completeBaseName(), finfo.suffix());\n\n  QString errMsg;\n  auto newNode =\n      NewNoteDialog::newNote(notebook, parentNode, newName,\n                             TemplateMgr::getInst().getTemplateContent(scheme.m_template), errMsg);\n  if (!newNode) {\n    MessageBoxHelper::notify(\n        MessageBoxHelper::Information,\n        tr(\"Failed to create quick note from scheme (%1) (%2)\").arg(scheme.m_name, errMsg),\n        VNoteX::getInst().getMainWindow());\n    return;\n  }\n\n  if (notebook == m_currentNotebook.data()) {\n    m_nodeExplorer->setCurrentNode(newNode.data());\n  }\n\n  // Open it right now.\n  auto paras = QSharedPointer<FileOpenParameters>::create();\n  paras->m_mode = ViewWindowMode::Edit;\n  paras->m_newFile = true;\n  emit VNoteX::getInst().openNodeRequested(newNode.data(), paras);\n}\n\nNode *NotebookExplorer::currentExploredFolderNode() const {\n  return m_nodeExplorer->currentExploredFolderNode();\n}\n\nNode *NotebookExplorer::currentExploredNode() const {\n  return m_nodeExplorer->currentExploredNode();\n}\n\nNode *NotebookExplorer::checkNotebookAndGetCurrentExploredFolderNode() const {\n  if (!m_currentNotebook) {\n    MessageBoxHelper::notify(MessageBoxHelper::Information,\n                             tr(\"Please first create a notebook to hold your data.\"),\n                             VNoteX::getInst().getMainWindow());\n    return nullptr;\n  }\n\n  auto node = currentExploredFolderNode();\n  Q_ASSERT(m_currentNotebook.data() == node->getNotebook());\n  return node;\n}\n\nvoid NotebookExplorer::newNotebookFromFolder() {\n  NewNotebookFromFolderDialog dialog(VNoteX::getInst().getMainWindow());\n  dialog.exec();\n}\n\nvoid NotebookExplorer::importFile() {\n  auto node = checkNotebookAndGetCurrentExploredFolderNode();\n  if (!node) {\n    return;\n  }\n\n  static QString lastFolderPath = QDir::homePath();\n  QStringList files = QFileDialog::getOpenFileNames(VNoteX::getInst().getMainWindow(),\n                                                    tr(\"Select Files To Import\"), lastFolderPath);\n  if (files.isEmpty()) {\n    return;\n  }\n\n  QString errMsg;\n  for (const auto &file : files) {\n    try {\n      m_currentNotebook->copyAsNode(node, Node::Flag::Content, file);\n    } catch (Exception &p_e) {\n      errMsg += tr(\"Failed to add file (%1) as node (%2).\\n\").arg(file, p_e.what());\n    }\n  }\n\n  if (!errMsg.isEmpty()) {\n    MessageBoxHelper::notify(MessageBoxHelper::Critical, errMsg, VNoteX::getInst().getMainWindow());\n  }\n\n  emit m_currentNotebook->nodeUpdated(node);\n  m_nodeExplorer->setCurrentNode(node);\n}\n\nvoid NotebookExplorer::importFolder() {\n  auto node = checkNotebookAndGetCurrentExploredFolderNode();\n  if (!node) {\n    return;\n  }\n\n  ImportFolderDialog dialog(node, VNoteX::getInst().getMainWindow());\n  if (dialog.exec() == QDialog::Accepted) {\n    m_nodeExplorer->setCurrentNode(dialog.getNewNode().data());\n  }\n}\n\nvoid NotebookExplorer::manageNotebooks() {\n  ManageNotebooksDialog dialog(m_currentNotebook.data(), VNoteX::getInst().getMainWindow());\n  dialog.exec();\n}\n\nvoid NotebookExplorer::locateNode(Node *p_node) {\n  Q_ASSERT(p_node);\n  auto nb = p_node->getNotebook();\n  if (nb != m_currentNotebook) {\n    emit notebookActivated(nb->getId());\n  }\n  m_nodeExplorer->setCurrentNode(p_node);\n  m_nodeExplorer->setFocus();\n}\n\nconst QSharedPointer<Notebook> &NotebookExplorer::currentNotebook() const {\n  return m_currentNotebook;\n}\n\nvoid NotebookExplorer::setupViewMenu(QMenu *p_menu, bool p_isNotebookView) {\n  auto ag = new QActionGroup(p_menu);\n\n  auto act = ag->addAction(tr(\"View By Configuration\"));\n  act->setCheckable(true);\n  act->setChecked(true);\n  act->setData(ViewOrder::OrderedByConfiguration);\n  p_menu->addAction(act);\n\n  act = ag->addAction(tr(\"View By Name\"));\n  act->setCheckable(true);\n  act->setData(ViewOrder::OrderedByName);\n  p_menu->addAction(act);\n\n  act = ag->addAction(tr(\"View By Name (Reversed)\"));\n  act->setCheckable(true);\n  act->setData(ViewOrder::OrderedByNameReversed);\n  p_menu->addAction(act);\n\n  act = ag->addAction(tr(\"View By Created Time\"));\n  act->setCheckable(true);\n  act->setData(ViewOrder::OrderedByCreatedTime);\n  p_menu->addAction(act);\n\n  act = ag->addAction(tr(\"View By Created Time (Reversed)\"));\n  act->setCheckable(true);\n  act->setData(ViewOrder::OrderedByCreatedTimeReversed);\n  p_menu->addAction(act);\n\n  if (!p_isNotebookView) {\n    act = ag->addAction(tr(\"View By Modified Time\"));\n    act->setCheckable(true);\n    act->setData(ViewOrder::OrderedByModifiedTime);\n    p_menu->addAction(act);\n\n    act = ag->addAction(tr(\"View By Modified Time (Reversed)\"));\n    act->setCheckable(true);\n    act->setData(ViewOrder::OrderedByModifiedTimeReversed);\n    p_menu->addAction(act);\n  }\n\n  const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();\n  int viewOrder = p_isNotebookView ? widgetConfig.getNotebookSelectorViewOrder()\n                                   : widgetConfig.getNodeExplorerViewOrder();\n  for (const auto &act : ag->actions()) {\n    if (act->data().toInt() == viewOrder) {\n      act->setChecked(true);\n    }\n  }\n\n  connect(ag, &QActionGroup::triggered, this, [this, p_isNotebookView](QAction *p_action) {\n    const int order = p_action->data().toInt();\n    if (p_isNotebookView) {\n      ConfigMgr::getInst().getWidgetConfig().setNotebookSelectorViewOrder(order);\n      m_selector->setViewOrder(order);\n    } else {\n      ConfigMgr::getInst().getWidgetConfig().setNodeExplorerViewOrder(order);\n      m_nodeExplorer->setViewOrder(order);\n    }\n  });\n}\n\nvoid NotebookExplorer::setupRecycleBinMenu(QMenu *p_menu) {\n  p_menu->addAction(tr(\"Open Recycle Bin\"), this, [this]() {\n    if (m_currentNotebook) {\n      WidgetUtils::openUrlByDesktop(\n          QUrl::fromLocalFile(m_currentNotebook->getRecycleBinFolderAbsolutePath()));\n    }\n  });\n\n  p_menu->addAction(tr(\"Empty Recycle Bin\"), this, [this]() {\n    if (!m_currentNotebook) {\n      return;\n    }\n    int okRet = MessageBoxHelper::questionOkCancel(\n        MessageBoxHelper::Warning,\n        tr(\"Empty the recycle bin of notebook (%1)?\").arg(m_currentNotebook->getName()),\n        tr(\"CAUTION! All the files under the recycle bin folder will be deleted and \"\n           \"unrecoverable!\"),\n        tr(\"Recycle bin folder: %1\").arg(m_currentNotebook->getRecycleBinFolderAbsolutePath()),\n        VNoteX::getInst().getMainWindow());\n    if (okRet == QMessageBox::Ok) {\n      m_currentNotebook->emptyRecycleBin();\n    }\n  });\n}\n\nvoid NotebookExplorer::setupExploreModeMenu(TitleBar *p_titleBar) {\n  auto menu = p_titleBar->addMenuSubMenu(tr(\"Explore Mode\"));\n\n  auto ag = new QActionGroup(menu);\n\n  auto act = ag->addAction(tr(\"Combined\"));\n  act->setCheckable(true);\n  act->setChecked(true);\n  act->setData(NotebookNodeExplorer::ExploreMode::Combined);\n  menu->addAction(act);\n\n  act = ag->addAction(tr(\"Separate, Single Column\"));\n  act->setCheckable(true);\n  act->setChecked(true);\n  act->setData(NotebookNodeExplorer::ExploreMode::SeparateSingle);\n  menu->addAction(act);\n\n  act = ag->addAction(tr(\"Separate, Double Columns\"));\n  act->setCheckable(true);\n  act->setChecked(true);\n  act->setData(NotebookNodeExplorer::ExploreMode::SeparateDouble);\n  menu->addAction(act);\n\n  int mode = ConfigMgr::getInst().getWidgetConfig().getNodeExplorerExploreMode();\n  for (const auto &act : ag->actions()) {\n    if (act->data().toInt() == mode) {\n      act->setChecked(true);\n    }\n  }\n\n  connect(ag, &QActionGroup::triggered, this, [this](QAction *action) {\n    int mode = action->data().toInt();\n    ConfigMgr::getInst().getWidgetConfig().setNodeExplorerExploreMode(mode);\n    m_nodeExplorer->setExploreMode(mode);\n  });\n}\n\nvoid NotebookExplorer::saveSession() {\n  updateSession();\n\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  sessionConfig.setNotebookExplorerSession(m_session.serialize());\n}\n\nvoid NotebookExplorer::loadSession() {\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  m_session =\n      NotebookExplorerSession::deserialize(sessionConfig.getNotebookExplorerSessionAndClear());\n\n  m_sessionLoaded = true;\n\n  recoverSession();\n}\n\nvoid NotebookExplorer::updateSession() {\n  if (!m_sessionLoaded || !m_currentNotebook) {\n    return;\n  }\n\n  auto &nbSession = m_session.m_notebooks[m_currentNotebook->getRootFolderPath()];\n  nbSession.m_recovered = true;\n\n  auto node = currentExploredNode();\n  if (node) {\n    nbSession.m_currentNodePath = node->fetchPath();\n  } else {\n    nbSession.m_currentNodePath.clear();\n  }\n}\n\nvoid NotebookExplorer::recoverSession() {\n  if (!m_sessionLoaded || !m_currentNotebook) {\n    return;\n  }\n\n  auto it = m_session.m_notebooks.find(m_currentNotebook->getRootFolderPath());\n  if (it != m_session.m_notebooks.end()) {\n    if (it.value().m_recovered || it.value().m_currentNodePath.isEmpty()) {\n      return;\n    }\n\n    it.value().m_recovered = true;\n\n    auto node = m_currentNotebook->loadNodeByPath(it.value().m_currentNodePath);\n    if (node) {\n      m_nodeExplorer->setCurrentNode(node.data());\n    }\n  }\n}\n\nvoid NotebookExplorer::rebuildDatabase() {\n  if (m_currentNotebook) {\n    int okRet = MessageBoxHelper::questionOkCancel(\n        MessageBoxHelper::Warning,\n        tr(\"Rebuild the database of notebook (%1)?\").arg(m_currentNotebook->getName()),\n        tr(\"This operation will rebuild the notebook database from configuration files. It may \"\n           \"take time.\"),\n        tr(\"A notebook may use a database for cache, such as IDs of nodes and tags.\"),\n        VNoteX::getInst().getMainWindow());\n    if (okRet != QMessageBox::Ok) {\n      return;\n    }\n\n    QProgressDialog proDlg(tr(\"Rebuilding notebook database...\"), QString(), 0, 0, this);\n    proDlg.setWindowFlags(proDlg.windowFlags() & ~Qt::WindowCloseButtonHint);\n    proDlg.setWindowModality(Qt::WindowModal);\n    proDlg.setMinimumDuration(1000);\n    proDlg.setValue(0);\n\n    bool ret = m_currentNotebook->rebuildDatabase();\n\n    proDlg.cancel();\n\n    if (ret) {\n      MessageBoxHelper::notify(MessageBoxHelper::Type::Information,\n                               tr(\"Notebook database has been rebuilt.\"),\n                               VNoteX::getInst().getMainWindow());\n    } else {\n      MessageBoxHelper::notify(MessageBoxHelper::Type::Warning,\n                               tr(\"Failed to rebuild notebook database.\"),\n                               VNoteX::getInst().getMainWindow());\n    }\n  }\n}\n\nQByteArray NotebookExplorer::saveState() const { return m_nodeExplorer->saveState(); }\n\nvoid NotebookExplorer::restoreState(const QByteArray &p_data) {\n  m_nodeExplorer->restoreState(p_data);\n}\n"
  },
  {
    "path": "src/widgets/notebookexplorer.h",
    "content": "#ifndef NOTEBOOKEXPLORER_H\n#define NOTEBOOKEXPLORER_H\n\n#include <QFrame>\n#include <QSharedPointer>\n\n#include <core/global.h>\n\n#include \"notebookexplorersession.h\"\n\nclass QMenu;\n\nnamespace vnotex {\nclass Notebook;\nclass TitleBar;\nclass NotebookSelector;\nclass NotebookNodeExplorer;\nclass Node;\n\nclass NotebookExplorer : public QFrame {\n  Q_OBJECT\npublic:\n  explicit NotebookExplorer(QWidget *p_parent = nullptr);\n\n  const QSharedPointer<Notebook> &currentNotebook() const;\n\n  Node *currentExploredFolderNode() const;\n\n  Node *currentExploredNode() const;\n\n  QByteArray saveState() const;\n\n  void restoreState(const QByteArray &p_data);\n\npublic slots:\n  void newNotebook();\n\n  void newNotebookFromFolder();\n\n  void importNotebook();\n\n  void loadNotebooks();\n\n  void reloadNotebook(const Notebook *p_notebook);\n\n  void setCurrentNotebook(const QSharedPointer<Notebook> &p_notebook);\n\n  void newFolder();\n\n  void newNote();\n\n  void newQuickNote();\n\n  void importFile();\n\n  void importFolder();\n\n  void locateNode(Node *p_node);\n\n  void manageNotebooks();\n\nsignals:\n  void notebookActivated(ID p_notebookId);\n\nprivate:\n  void setupUI();\n\n  TitleBar *setupTitleBar(QWidget *p_parent = nullptr);\n\n  Node *checkNotebookAndGetCurrentExploredFolderNode() const;\n\n  void setupViewMenu(QMenu *p_menu, bool p_isNotebookView);\n\n  void setupRecycleBinMenu(QMenu *p_menu);\n\n  void setupExploreModeMenu(TitleBar *p_titleBar);\n\n  void saveSession();\n\n  void loadSession();\n\n  void updateSession();\n\n  void recoverSession();\n\n  void rebuildDatabase();\n\n  NotebookSelector *m_selector = nullptr;\n\n  NotebookNodeExplorer *m_nodeExplorer = nullptr;\n\n  QSharedPointer<Notebook> m_currentNotebook;\n\n  NotebookExplorerSession m_session;\n\n  bool m_sessionLoaded = false;\n};\n} // namespace vnotex\n\n#endif // NOTEBOOKEXPLORER_H\n"
  },
  {
    "path": "src/widgets/notebookexplorersession.cpp",
    "content": "#include \"notebookexplorersession.h\"\n#include <QIODevice>\n\nusing namespace vnotex;\n\nQDataStream & ::vnotex::operator<<(QDataStream &p_ds, const NotebookSession &p_session) {\n  p_ds << p_session.m_currentNodePath;\n  return p_ds;\n}\n\nQDataStream & ::vnotex::operator>>(QDataStream &p_ds, NotebookSession &p_session) {\n  p_ds >> p_session.m_currentNodePath;\n  return p_ds;\n}\n\nQByteArray NotebookExplorerSession::serialize() const {\n  QByteArray data;\n  QDataStream outs(&data, QIODevice::WriteOnly);\n  outs.setVersion(QDataStream::Qt_5_12);\n\n  outs << m_notebooks;\n\n  return data;\n}\n\nNotebookExplorerSession NotebookExplorerSession::deserialize(const QByteArray &p_data) {\n  NotebookExplorerSession session;\n  if (p_data.isEmpty()) {\n    return session;\n  }\n\n  QDataStream ins(p_data);\n  ins.setVersion(QDataStream::Qt_5_12);\n\n  ins >> session.m_notebooks;\n\n  return session;\n}\n"
  },
  {
    "path": "src/widgets/notebookexplorersession.h",
    "content": "#ifndef NOTEBOOKEXPLORERSESSION_H\n#define NOTEBOOKEXPLORERSESSION_H\n\n#include <QDataStream>\n#include <QHash>\n\nnamespace vnotex {\nstruct NotebookSession {\n  // Used to judge whether this session has been recovered.\n  bool m_recovered = false;\n\n  QString m_currentNodePath;\n};\n\nclass NotebookExplorerSession {\npublic:\n  QByteArray serialize() const;\n\n  static NotebookExplorerSession deserialize(const QByteArray &p_data);\n\n  // Notebook's path to its session.\n  QHash<QString, NotebookSession> m_notebooks;\n};\n\nextern QDataStream &operator<<(QDataStream &p_ds, const NotebookSession &p_session);\nextern QDataStream &operator>>(QDataStream &p_ds, NotebookSession &p_session);\n} // namespace vnotex\n\n#endif // NOTEBOOKEXPLORERSESSION_H\n"
  },
  {
    "path": "src/widgets/notebooknodeexplorer.cpp",
    "content": "#include \"notebooknodeexplorer.h\"\n\n#include <QAction>\n#include <QColorDialog>\n#include <QMenu>\n#include <QPainter>\n#include <QSet>\n#include <QShortcut>\n#include <QSplitter>\n#include <QStyleOptionViewItem>\n#include <QStyledItemDelegate>\n#include <QVBoxLayout>\n#include <functional>\n\n#include \"dialogs/deleteconfirmdialog.h\"\n#include \"dialogs/folderpropertiesdialog.h\"\n#include \"dialogs/notepropertiesdialog.h\"\n#include \"dialogs/sortdialog.h\"\n#include \"dialogs/viewtagsdialog.h\"\n#include \"listwidget.h\"\n#include \"mainwindow.h\"\n#include \"messageboxhelper.h\"\n#include \"navigationmodemgr.h\"\n#include \"notebookmgr.h\"\n#include \"treewidget.h\"\n#include \"vnotex.h\"\n#include \"widgetsfactory.h\"\n#include <core/exception.h>\n#include <notebook/externalnode.h>\n#include <notebook/node.h>\n#include <notebook/nodeparameters.h>\n#include <notebook/notebook.h>\n#include <notebookconfigmgr/inotebookconfigmgr.h>\n#include <utils/clipboardutils.h>\n#include <utils/docsutils.h>\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n#include <utils/vxurlutils.h>\n#include <utils/widgetutils.h>\n\n#include <buffer/filetypehelper.h>\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/events.h>\n#include <core/fileopenparameters.h>\n#include <core/historymgr.h>\n#include <core/sessionconfig.h>\n#include <core/widgetconfig.h>\n\nusing namespace vnotex;\n\nQIcon NotebookNodeExplorer::s_nodeIcons[NodeIcon::MaxIcons];\n\n// 节点视觉委托类 避免修改颜色后整个树刷新\nNodeColorDelegate::NodeColorDelegate(QObject *parent) : QStyledItemDelegate(parent) {}\n\nvoid NodeColorDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,\n                              const QModelIndex &index) const {\n  // 先绘制默认内容\n  QStyledItemDelegate::paint(painter, option, index);\n\n  // 获取节点数据\n  auto item = static_cast<QTreeWidgetItem *>(index.internalPointer());\n  if (!item) {\n    return;\n  }\n\n  // 从 item 的 UserRole 中获取颜色信息\n  QVariant borderColorVar = item->data(0, Qt::UserRole + 1000); // 使用特殊的角色存储边框颜色\n  if (borderColorVar.isValid() && !borderColorVar.toString().isEmpty()) {\n    QString borderColor = borderColorVar.toString();\n    QColor color(borderColor);\n\n    if (color.isValid()) {\n      painter->save();\n      QPen pen(color, 2, Qt::SolidLine);\n      painter->setPen(pen);\n      painter->drawRect(option.rect.adjusted(1, 1, -1, -1));\n      painter->restore();\n    }\n  }\n}\n\nNotebookNodeExplorer::NodeData::NodeData() {}\n\nNotebookNodeExplorer::NodeData::NodeData(Node *p_node, bool p_loaded)\n    : m_type(NodeType::Node), m_node(p_node), m_loaded(p_loaded) {}\n\nNotebookNodeExplorer::NodeData::NodeData(const QSharedPointer<ExternalNode> &p_externalNode)\n    : m_type(NodeType::ExternalNode), m_externalNode(p_externalNode), m_loaded(true) {}\n\nNotebookNodeExplorer::NodeData::NodeData(const NodeData &p_other) {\n  m_type = p_other.m_type;\n  switch (m_type) {\n  case NodeType::Node:\n    m_node = p_other.m_node;\n    break;\n\n  case NodeType::ExternalNode:\n    m_externalNode = p_other.m_externalNode;\n    break;\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  m_loaded = p_other.m_loaded;\n}\n\nNotebookNodeExplorer::NodeData::~NodeData() {}\n\nNotebookNodeExplorer::NodeData &NotebookNodeExplorer::NodeData::operator=(const NodeData &p_other) {\n  if (&p_other == this) {\n    return *this;\n  }\n\n  m_type = p_other.m_type;\n  switch (m_type) {\n  case NodeType::Node:\n    m_node = p_other.m_node;\n    break;\n\n  case NodeType::ExternalNode:\n    m_externalNode = p_other.m_externalNode;\n    break;\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  m_loaded = p_other.m_loaded;\n\n  return *this;\n}\n\nbool NotebookNodeExplorer::NodeData::isValid() const { return m_type != NodeType::Invalid; }\n\nbool NotebookNodeExplorer::NodeData::isNode() const { return m_type == NodeType::Node; }\n\nbool NotebookNodeExplorer::NodeData::isExternalNode() const {\n  return m_type == NodeType::ExternalNode;\n}\n\nNotebookNodeExplorer::NodeData::NodeType NotebookNodeExplorer::NodeData::getType() const {\n  return m_type;\n}\n\nNode *NotebookNodeExplorer::NodeData::getNode() const {\n  Q_ASSERT(isNode());\n  return m_node;\n}\n\nconst QSharedPointer<ExternalNode> &NotebookNodeExplorer::NodeData::getExternalNode() const {\n  Q_ASSERT(isExternalNode());\n  return m_externalNode;\n}\n\nvoid NotebookNodeExplorer::NodeData::clear() {\n  m_type = NodeType::Invalid;\n  m_node = nullptr;\n  m_externalNode.clear();\n  m_loaded = false;\n}\n\nbool NotebookNodeExplorer::NodeData::matched(const Node *p_node) const {\n  if (isNode() && m_node == p_node) {\n    return true;\n  }\n\n  return false;\n}\n\nbool NotebookNodeExplorer::NodeData::matched(const QString &p_name) const {\n  if (isNode()) {\n    return m_node->getName() == p_name;\n  } else {\n    return m_externalNode->getName() == p_name;\n  }\n}\n\nbool NotebookNodeExplorer::NodeData::isLoaded() const { return m_loaded; }\n\nvoid NotebookNodeExplorer::CacheData::clear() {\n  if (m_masterStateCache) {\n    m_masterStateCache->clear();\n  }\n  m_currentSlaveName.clear();\n}\n\nNotebookNodeExplorer::NotebookNodeExplorer(QWidget *p_parent) : QWidget(p_parent) {\n  initNodeIcons();\n\n  setupUI();\n\n  setupShortcuts();\n}\n\nvoid NotebookNodeExplorer::initNodeIcons() const {\n  if (!s_nodeIcons[0].isNull()) {\n    return;\n  }\n\n  const QString nodeIconFgName = \"widgets#notebookexplorer#node_icon#fg\";\n  const QString invalidNodeIconFgName = \"widgets#notebookexplorer#node_icon#invalid#fg\";\n  const QString externalNodeIconFgName = \"widgets#notebookexplorer#external_node_icon#fg\";\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const auto fg = themeMgr.paletteColor(nodeIconFgName);\n  const auto invalidFg = themeMgr.paletteColor(invalidNodeIconFgName);\n  const auto externalFg = themeMgr.paletteColor(externalNodeIconFgName);\n\n  const QString folderIconName(\"folder_node.svg\");\n  const QString fileIconName(\"file_node.svg\");\n\n  s_nodeIcons[NodeIcon::FolderNode] =\n      IconUtils::fetchIcon(themeMgr.getIconFile(folderIconName), fg);\n  s_nodeIcons[NodeIcon::FileNode] = IconUtils::fetchIcon(themeMgr.getIconFile(fileIconName), fg);\n  s_nodeIcons[NodeIcon::InvalidFolderNode] =\n      IconUtils::fetchIcon(themeMgr.getIconFile(folderIconName), invalidFg);\n  s_nodeIcons[NodeIcon::InvalidFileNode] =\n      IconUtils::fetchIcon(themeMgr.getIconFile(fileIconName), invalidFg);\n  s_nodeIcons[NodeIcon::ExternalFolderNode] =\n      IconUtils::fetchIcon(themeMgr.getIconFile(folderIconName), externalFg);\n  s_nodeIcons[NodeIcon::ExternalFileNode] =\n      IconUtils::fetchIcon(themeMgr.getIconFile(fileIconName), externalFg);\n}\n\nvoid NotebookNodeExplorer::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  m_splitter = new QSplitter(this);\n  mainLayout->addWidget(m_splitter);\n\n  setupMasterExplorer(m_splitter);\n  m_splitter->addWidget(m_masterExplorer);\n\n  setFocusProxy(m_masterExplorer);\n}\n\nvoid NotebookNodeExplorer::setupMasterExplorer(QWidget *p_parent) {\n  m_masterExplorer = new TreeWidget(TreeWidget::ClickSpaceToClearSelection, p_parent);\n  TreeWidget::setupSingleColumnHeaderlessTree(m_masterExplorer, true, true);\n  TreeWidget::showHorizontalScrollbar(m_masterExplorer);\n\n  m_masterNavigationWrapper.reset(\n      new NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>(m_masterExplorer));\n  NavigationModeMgr::getInst().registerNavigationTarget(m_masterNavigationWrapper.data());\n\n  connect(m_masterExplorer, &QTreeWidget::itemExpanded, this,\n          &NotebookNodeExplorer::loadMasterItemChildren);\n\n  connect(m_masterExplorer, &QTreeWidget::customContextMenuRequested, this,\n          [this](const QPoint &pos) {\n            if (!m_notebook) {\n              return;\n            }\n\n            auto item = m_masterExplorer->itemAt(pos);\n            QScopedPointer<QMenu> menu(WidgetsFactory::createMenu());\n            if (!item) {\n              createMasterContextMenuOnRoot(menu.data());\n            } else {\n              if (!isMasterAllSelectedItemsSameType()) {\n                return;\n              }\n\n              auto data = getItemNodeData(item);\n              if (data.isNode()) {\n                createContextMenuOnNode(menu.data(), data.getNode(), true);\n              } else if (data.isExternalNode()) {\n                createContextMenuOnExternalNode(menu.data(), data.getExternalNode().data(), true);\n              }\n            }\n\n            if (!menu->isEmpty()) {\n              menu->exec(m_masterExplorer->mapToGlobal(pos));\n            }\n          });\n\n  connect(m_masterExplorer, &QTreeWidget::itemActivated, this,\n          [this](QTreeWidgetItem *p_item, int p_column) {\n            Q_UNUSED(p_column);\n            if (!isCombinedExploreMode()) {\n              return;\n            }\n            auto data = getItemNodeData(p_item);\n            activateItemNode(data);\n          });\n\n  // 设置自定义委托以支持边框绘制\n  m_masterExplorer->setItemDelegate(new NodeColorDelegate(this));\n}\n\nvoid NotebookNodeExplorer::activateItemNode(const NodeData &p_data) {\n  if (!p_data.isValid()) {\n    return;\n  }\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto defaultMode = coreConfig.getDefaultOpenMode();\n\n  if (p_data.isNode()) {\n    if (checkInvalidNode(p_data.getNode())) {\n      return;\n    }\n    auto paras = QSharedPointer<FileOpenParameters>::create();\n    paras->m_mode = defaultMode;\n    emit nodeActivated(p_data.getNode(), paras);\n  } else if (p_data.isExternalNode()) {\n    // Import to config first.\n    if (m_autoImportExternalFiles) {\n      auto importedNode = importToIndex(p_data.getExternalNode());\n      if (importedNode) {\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_mode = defaultMode;\n        emit nodeActivated(importedNode.data(), paras);\n      }\n      return;\n    }\n\n    // Just open it.\n    auto paras = QSharedPointer<FileOpenParameters>::create();\n    paras->m_mode = defaultMode;\n    emit fileActivated(p_data.getExternalNode()->fetchAbsolutePath(), paras);\n  }\n}\n\nvoid NotebookNodeExplorer::setupSlaveExplorer() {\n  Q_ASSERT(!m_slaveExplorer);\n  m_slaveExplorer = new ListWidget(m_splitter);\n  m_splitter->addWidget(m_slaveExplorer);\n\n  m_slaveExplorer->setContextMenuPolicy(Qt::CustomContextMenu);\n  m_slaveExplorer->setSelectionMode(QAbstractItemView::ExtendedSelection);\n\n  connect(m_slaveExplorer, &QListWidget::customContextMenuRequested, this,\n          [this](const QPoint &pos) {\n            Q_ASSERT(!isCombinedExploreMode());\n            if (!m_notebook) {\n              return;\n            }\n\n            auto item = m_slaveExplorer->itemAt(pos);\n            QScopedPointer<QMenu> menu(WidgetsFactory::createMenu());\n            if (!item) {\n              createSlaveContextMenuOnMasterNode(menu.data());\n            } else {\n              if (!isSlaveAllSelectedItemsSameType()) {\n                return;\n              }\n\n              auto data = getItemNodeData(item);\n              if (data.isNode()) {\n                createContextMenuOnNode(menu.data(), data.getNode(), false);\n              } else if (data.isExternalNode()) {\n                createContextMenuOnExternalNode(menu.data(), data.getExternalNode().data(), false);\n              }\n            }\n\n            if (!menu->isEmpty()) {\n              menu->exec(m_slaveExplorer->mapToGlobal(pos));\n            }\n          });\n  connect(m_slaveExplorer, &QListWidget::itemActivated, this, [this](QListWidgetItem *p_item) {\n    Q_ASSERT(!isCombinedExploreMode());\n    auto data = getItemNodeData(p_item);\n    activateItemNode(data);\n  });\n\n  m_slaveNavigationWrapper.reset(\n      new NavigationModeWrapper<QListWidget, QListWidgetItem>(m_slaveExplorer));\n  NavigationModeMgr::getInst().registerNavigationTarget(m_slaveNavigationWrapper.data());\n}\n\nvoid NotebookNodeExplorer::setNotebook(const QSharedPointer<Notebook> &p_notebook) {\n  if (p_notebook == m_notebook) {\n    return;\n  }\n\n  if (m_notebook) {\n    disconnect(m_notebook.data(), nullptr, this, nullptr);\n  }\n\n  cacheState(true);\n\n  m_notebook = p_notebook;\n\n  if (m_notebook) {\n    connect(m_notebook.data(), &Notebook::nodeUpdated, this,\n            [this](const Node *p_node) { updateNode(p_node->getParent()); });\n  }\n\n  generateMasterNodeTree();\n}\n\nvoid NotebookNodeExplorer::generateMasterNodeTree() {\n  m_masterExplorer->clear();\n\n  if (!m_notebook) {\n    return;\n  }\n\n  try {\n    auto rootNode = m_notebook->getRootNode();\n\n    loadRootNode(rootNode.data());\n  } catch (Exception &p_e) {\n    QString msg =\n        tr(\"Failed to load nodes of notebook (%1) (%2).\").arg(m_notebook->getName(), p_e.what());\n    qCritical() << msg;\n    MessageBoxHelper::notify(MessageBoxHelper::Critical, msg, VNoteX::getInst().getMainWindow());\n  }\n\n  // Restore current item.\n  bool restored = false;\n  auto &cacheData = getCache();\n  auto curMasterNode = cacheData.m_masterStateCache->getCurrentItem();\n  if (curMasterNode) {\n    restored = true;\n    setCurrentMasterNode(curMasterNode);\n  } else if (!isCombinedExploreMode()) {\n    // Manually update slave explorer on first run of generation.\n    updateSlaveExplorer();\n  }\n  if (!cacheData.m_currentSlaveName.isEmpty() && !isCombinedExploreMode()) {\n    restored = true;\n    setCurrentSlaveNode(cacheData.m_currentSlaveName);\n  }\n  if (!restored) {\n    focusNormalNode();\n  }\n\n  cacheData.clear();\n}\n\nvoid NotebookNodeExplorer::loadRootNode(const Node *p_node) const {\n  Q_ASSERT(p_node->isLoaded() && p_node->isContainer());\n\n  // External children.\n  if (m_externalFilesVisible) {\n    auto externalChildren = p_node->fetchExternalChildren();\n    // TODO: Sort external children.\n    for (const auto &child : externalChildren) {\n      if (!belongsToMasterExplorer(child.data())) {\n        continue;\n      }\n\n      auto item = new QTreeWidgetItem(m_masterExplorer);\n      loadMasterExternalNode(item, child);\n    }\n  }\n\n  // Children.\n  auto children = p_node->getChildren();\n  sortNodes(children);\n  for (const auto &child : children) {\n    if (!belongsToMasterExplorer(child.data())) {\n      continue;\n    }\n\n    auto item = new QTreeWidgetItem(m_masterExplorer);\n    loadMasterNode(item, child.data(), 1);\n  }\n}\n\nstatic void clearTreeWidgetItemChildren(QTreeWidgetItem *p_item) {\n  auto children = p_item->takeChildren();\n  for (auto &child : children) {\n    delete child;\n  }\n}\n\nvoid NotebookNodeExplorer::loadMasterNode(QTreeWidgetItem *p_item, Node *p_node,\n                                          int p_level) const {\n  if (!p_node->isLoaded()) {\n    p_node->load();\n  }\n\n  clearTreeWidgetItemChildren(p_item);\n\n  fillMasterItem(p_item, p_node, p_level > 0);\n\n  loadMasterNodeChildren(p_item, p_node, p_level - 1);\n\n  if (getCache().m_masterStateCache->contains(p_item) && p_item->childCount() > 0) {\n    if (p_item->isExpanded()) {\n      loadMasterItemChildren(p_item);\n    } else {\n      // itemExpanded() will trigger loadMasterItemChildren().\n      p_item->setExpanded(true);\n    }\n  }\n}\n\nvoid NotebookNodeExplorer::loadMasterExternalNode(\n    QTreeWidgetItem *p_item, const QSharedPointer<ExternalNode> &p_node) const {\n  clearTreeWidgetItemChildren(p_item);\n\n  fillMasterItem(p_item, p_node);\n\n  // No children for external node.\n}\n\nvoid NotebookNodeExplorer::loadMasterNodeChildren(QTreeWidgetItem *p_item, Node *p_node,\n                                                  int p_level) const {\n  if (p_level < 0) {\n    return;\n  }\n\n  // External children.\n  if (m_externalFilesVisible && p_node->isContainer()) {\n    auto externalChildren = p_node->fetchExternalChildren();\n    // TODO: Sort external children.\n    for (const auto &child : externalChildren) {\n      if (!belongsToMasterExplorer(child.data())) {\n        continue;\n      }\n\n      auto item = new QTreeWidgetItem(p_item);\n      loadMasterExternalNode(item, child);\n    }\n  }\n\n  auto children = p_node->getChildren();\n  sortNodes(children);\n  for (const auto &child : children) {\n    if (!belongsToMasterExplorer(child.data())) {\n      continue;\n    }\n\n    auto item = new QTreeWidgetItem(p_item);\n    loadMasterNode(item, child.data(), p_level);\n  }\n}\n\nvoid NotebookNodeExplorer::fillMasterItem(QTreeWidgetItem *p_item, Node *p_node,\n                                          bool p_loaded) const {\n  setItemNodeData(p_item, NodeData(p_node, p_loaded));\n  p_item->setText(Column::Name, p_node->getName());\n  p_item->setIcon(Column::Name, getIcon(p_node));\n  p_item->setToolTip(Column::Name, generateToolTip(p_node));\n  applyNodeColors(p_item, p_node);\n}\n\nvoid NotebookNodeExplorer::fillMasterItem(QTreeWidgetItem *p_item,\n                                          const QSharedPointer<ExternalNode> &p_node) const {\n  setItemNodeData(p_item, NodeData(p_node));\n  p_item->setText(Column::Name, p_node->getName());\n  p_item->setIcon(Column::Name, getIcon(p_node.data()));\n  p_item->setToolTip(Column::Name, tr(\"[External] %1\").arg(p_node->getName()));\n}\n\nvoid NotebookNodeExplorer::fillSlaveItem(QListWidgetItem *p_item, Node *p_node) const {\n  setItemNodeData(p_item, NodeData(p_node, true));\n  p_item->setText(p_node->getName());\n  p_item->setIcon(getIcon(p_node));\n  p_item->setToolTip(generateToolTip(p_node));\n  applyNodeColors(p_item, p_node);\n}\n\nvoid NotebookNodeExplorer::fillSlaveItem(QListWidgetItem *p_item,\n                                         const QSharedPointer<ExternalNode> &p_node) const {\n  setItemNodeData(p_item, NodeData(p_node));\n  p_item->setText(p_node->getName());\n  p_item->setIcon(getIcon(p_node.data()));\n  p_item->setToolTip(tr(\"[External] %1\").arg(p_node->getName()));\n}\n\nvoid NotebookNodeExplorer::applyNodeColors(QTreeWidgetItem *p_item, Node *p_node) const {\n  if (!p_item || !p_node) {\n    return;\n  }\n\n  QString backgroundColor = p_node->getEffectiveBackgroundColor();\n  QString borderColor = p_node->getEffectiveBorderColor();\n  QString nameColor = p_node->getNameColor();\n\n  // 设置背景色\n  if (!backgroundColor.isEmpty()) {\n    p_item->setBackground(Column::Name, QBrush(QColor(backgroundColor)));\n  } else {\n    p_item->setBackground(Column::Name, QBrush());\n  }\n\n  // 设置节点名称颜色\n  if (!nameColor.isEmpty()) {\n    p_item->setForeground(Column::Name, QBrush(QColor(nameColor)));\n  } else {\n    p_item->setForeground(Column::Name, QBrush());\n  }\n\n  // 设置边框色（通过 UserRole 存储，由自定义委托绘制）\n  if (!borderColor.isEmpty()) {\n    p_item->setData(Column::Name, Qt::UserRole + 1000, borderColor);\n  } else {\n    p_item->setData(Column::Name, Qt::UserRole + 1000, QVariant());\n  }\n}\n\nvoid NotebookNodeExplorer::applyNodeColors(QListWidgetItem *p_item, Node *p_node) const {\n  if (!p_item || !p_node) {\n    return;\n  }\n\n  QString backgroundColor = p_node->getEffectiveBackgroundColor();\n  QString nameColor = p_node->getNameColor();\n\n  // 设置背景色\n  if (!backgroundColor.isEmpty()) {\n    p_item->setBackground(QBrush(QColor(backgroundColor)));\n  } else {\n    p_item->setBackground(QBrush());\n  }\n\n  // 设置节点名称颜色\n  if (!nameColor.isEmpty()) {\n    p_item->setForeground(QBrush(QColor(nameColor)));\n  } else {\n    p_item->setForeground(QBrush());\n  }\n\n  // 对于 ListWidget，边框效果暂时不实现\n  // TODO: 如果需要，也可以为 ListWidget 创建自定义委托\n}\n\nvoid NotebookNodeExplorer::updateCurrentNodeVisualDirectly(Node *p_node,\n                                                           const NodeVisual &p_visual) {\n  if (!p_node) {\n    return;\n  }\n\n  // 直接更新 Node 对象的视觉信息，但不发送刷新信号\n  p_node->setVisual(p_visual);\n\n  // 更新数据库\n  p_node->getConfigMgr()->updateNodeVisual(p_node, p_visual);\n\n  // 直接更新当前显示的 item，避免整个树刷新\n  auto treeItem = findCurrentTreeWidgetItem(p_node);\n  if (treeItem) {\n    applyNodeColors(treeItem, p_node);\n  }\n\n  auto listItem = findCurrentListWidgetItem(p_node);\n  if (listItem) {\n    applyNodeColors(listItem, p_node);\n  }\n}\n\nvoid NotebookNodeExplorer::setCascadeColorRecursively(Node *p_node,\n                                                      const QString &p_backgroundColor,\n                                                      const QString &p_borderColor,\n                                                      const QString &p_nameColor) {\n  if (!p_node) {\n    return;\n  }\n\n  // 设置当前节点的颜色\n  NodeVisual visual = p_node->getVisual();\n\n  visual.setBackgroundColor(p_backgroundColor);\n  visual.setBorderColor(p_borderColor);\n  visual.setNameColor(p_nameColor);\n\n  updateCurrentNodeVisualDirectly(p_node, visual);\n\n  // 如果是容器节点，递归设置所有子节点\n  if (p_node->isContainer() && p_node->isLoaded()) {\n    for (const auto &child : p_node->getChildrenRef()) {\n      setCascadeColorRecursively(child.data(), p_backgroundColor, p_borderColor, p_nameColor);\n    }\n  }\n}\n\nQTreeWidgetItem *NotebookNodeExplorer::findCurrentTreeWidgetItem(Node *p_node) const {\n  if (!p_node || !m_masterExplorer) {\n    return nullptr;\n  }\n\n  // 遍历所有可见的 TreeWidgetItem 查找匹配的节点\n  std::function<QTreeWidgetItem *(QTreeWidgetItem *)> findInTree =\n      [&](QTreeWidgetItem *parent) -> QTreeWidgetItem * {\n    if (!parent) {\n      // 搜索顶级项目\n      for (int i = 0; i < m_masterExplorer->topLevelItemCount(); ++i) {\n        auto item = m_masterExplorer->topLevelItem(i);\n        auto data = getItemNodeData(item);\n        if (data.isNode() && data.getNode() == p_node) {\n          return item;\n        }\n\n        // 递归搜索子项目\n        auto result = findInTree(item);\n        if (result) {\n          return result;\n        }\n      }\n    } else {\n      // 搜索子项目\n      for (int i = 0; i < parent->childCount(); ++i) {\n        auto item = parent->child(i);\n        auto data = getItemNodeData(item);\n        if (data.isNode() && data.getNode() == p_node) {\n          return item;\n        }\n\n        // 递归搜索子项目\n        auto result = findInTree(item);\n        if (result) {\n          return result;\n        }\n      }\n    }\n    return nullptr;\n  };\n\n  return findInTree(nullptr);\n}\n\nQListWidgetItem *NotebookNodeExplorer::findCurrentListWidgetItem(Node *p_node) const {\n  if (!p_node || !m_slaveExplorer) {\n    return nullptr;\n  }\n\n  // 遍历所有 ListWidgetItem 查找匹配的节点\n  for (int i = 0; i < m_slaveExplorer->count(); ++i) {\n    auto item = m_slaveExplorer->item(i);\n    auto data = getItemNodeData(item);\n    if (data.isNode() && data.getNode() == p_node) {\n      return item;\n    }\n  }\n\n  return nullptr;\n}\n\nconst QIcon &NotebookNodeExplorer::getIcon(const Node *p_node) const {\n  if (p_node->hasContent()) {\n    return p_node->exists() ? s_nodeIcons[NodeIcon::FileNode]\n                            : s_nodeIcons[NodeIcon::InvalidFileNode];\n  } else {\n    return p_node->exists() ? s_nodeIcons[NodeIcon::FolderNode]\n                            : s_nodeIcons[NodeIcon::InvalidFolderNode];\n  }\n}\n\nconst QIcon &NotebookNodeExplorer::getIcon(const ExternalNode *p_node) const {\n  return p_node->isFolder() ? s_nodeIcons[NodeIcon::ExternalFolderNode]\n                            : s_nodeIcons[NodeIcon::ExternalFileNode];\n}\n\nNode *NotebookNodeExplorer::getCurrentMasterNode() const {\n  auto item = m_masterExplorer->currentItem();\n  if (item) {\n    auto data = getItemNodeData(item);\n    while (item && !data.isNode()) {\n      item = item->parent();\n      if (item) {\n        data = getItemNodeData(item);\n      } else {\n        data.clear();\n      }\n    }\n\n    if (data.isNode()) {\n      return data.getNode();\n    }\n  }\n\n  return nullptr;\n}\n\nNode *NotebookNodeExplorer::getCurrentSlaveNode() const {\n  auto item = m_slaveExplorer->currentItem();\n  if (item) {\n    auto data = getItemNodeData(item);\n    if (data.isNode()) {\n      return data.getNode();\n    }\n  }\n\n  return nullptr;\n}\n\nNotebookNodeExplorer::NodeData NotebookNodeExplorer::getCurrentMasterNodeData() const {\n  auto item = m_masterExplorer->currentItem();\n  if (item) {\n    return getItemNodeData(item);\n  }\n  return NodeData();\n}\n\nNotebookNodeExplorer::NodeData NotebookNodeExplorer::getCurrentSlaveNodeData() const {\n  auto item = m_slaveExplorer->currentItem();\n  if (item) {\n    return getItemNodeData(item);\n  }\n  return NodeData();\n}\n\nvoid NotebookNodeExplorer::setItemNodeData(QTreeWidgetItem *p_item, const NodeData &p_data) {\n  p_item->setData(Column::Name, Qt::UserRole, QVariant::fromValue(p_data));\n}\n\nNotebookNodeExplorer::NodeData\nNotebookNodeExplorer::getItemNodeData(const QTreeWidgetItem *p_item) {\n  if (!p_item) {\n    return NodeData();\n  }\n\n  return p_item->data(Column::Name, Qt::UserRole).value<NotebookNodeExplorer::NodeData>();\n}\n\nvoid NotebookNodeExplorer::setItemNodeData(QListWidgetItem *p_item, const NodeData &p_data) {\n  p_item->setData(Qt::UserRole, QVariant::fromValue(p_data));\n}\n\nNotebookNodeExplorer::NodeData\nNotebookNodeExplorer::getItemNodeData(const QListWidgetItem *p_item) {\n  if (!p_item) {\n    return NodeData();\n  }\n\n  return p_item->data(Qt::UserRole).value<NotebookNodeExplorer::NodeData>();\n}\n\nvoid NotebookNodeExplorer::updateNode(Node *p_node) {\n  if (p_node && p_node->getNotebook() != m_notebook) {\n    return;\n  }\n\n  if (p_node && !belongsToMasterExplorer(p_node)) {\n    updateSlaveExplorer();\n    return;\n  }\n\n  auto item = findMasterNode(p_node);\n  if (item) {\n    bool expanded = item->isExpanded();\n    item->setExpanded(false);\n    loadMasterNode(item, p_node, 1);\n    item->setExpanded(expanded);\n\n    if (!isCombinedExploreMode()) {\n      updateSlaveExplorer();\n    }\n  } else {\n    cacheState(false);\n\n    generateMasterNodeTree();\n  }\n}\n\n// TODO: we could do it faster by going from the root node directly.\nQTreeWidgetItem *NotebookNodeExplorer::findMasterNode(const Node *p_node) const {\n  if (!p_node) {\n    return nullptr;\n  }\n\n  auto cnt = m_masterExplorer->topLevelItemCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto item = findMasterNode(m_masterExplorer->topLevelItem(i), p_node);\n    if (item) {\n      return item;\n    }\n  }\n\n  return nullptr;\n}\n\nQTreeWidgetItem *NotebookNodeExplorer::findMasterNode(QTreeWidgetItem *p_item,\n                                                      const Node *p_node) const {\n  auto data = getItemNodeData(p_item);\n  if (data.matched(p_node)) {\n    return p_item;\n  }\n\n  auto cnt = p_item->childCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto item = findMasterNode(p_item->child(i), p_node);\n    if (item) {\n      return item;\n    }\n  }\n\n  return nullptr;\n}\n\nQListWidgetItem *NotebookNodeExplorer::findSlaveNode(const Node *p_node) const {\n  for (int i = 0; i < m_slaveExplorer->count(); ++i) {\n    auto data = getItemNodeData(m_slaveExplorer->item(i));\n    if (data.matched(p_node)) {\n      return m_slaveExplorer->item(i);\n    }\n  }\n  return nullptr;\n}\n\nvoid NotebookNodeExplorer::setCurrentNode(Node *p_node) {\n  if (!p_node) {\n    m_masterExplorer->setCurrentItem(nullptr);\n    return;\n  }\n\n  Q_ASSERT(p_node->getNotebook() == m_notebook);\n\n  if (belongsToMasterExplorer(p_node)) {\n    setCurrentMasterNode(p_node);\n  } else {\n    setCurrentMasterNode(p_node->getParent());\n\n    setCurrentSlaveNode(p_node);\n  }\n}\n\nvoid NotebookNodeExplorer::setCurrentMasterNode(Node *p_node) {\n  if (!p_node || p_node->isRoot()) {\n    m_masterExplorer->setCurrentItem(nullptr);\n    return;\n  }\n\n  Q_ASSERT(p_node && belongsToMasterExplorer(p_node));\n\n  // (rootNode, p_node].\n  QList<Node *> nodes;\n  auto node = p_node;\n  while (!node->isRoot()) {\n    nodes.push_front(node);\n    node = node->getParent();\n  }\n\n  QList<QTreeWidgetItem *> items;\n  auto nodeIt = nodes.constBegin();\n  auto item = findMasterNodeInTopLevelItems(m_masterExplorer, *nodeIt);\n  if (!item) {\n    return;\n  }\n  items.push_back(item);\n\n  ++nodeIt;\n  while (nodeIt != nodes.constEnd()) {\n    if (!item) {\n      return;\n    }\n\n    // Find *nodeIt in children of item.\n    auto data = getItemNodeData(item);\n    Q_ASSERT(data.isNode());\n    if (!data.isLoaded()) {\n      loadMasterNode(item, data.getNode(), 1);\n    }\n\n    auto childItem = findMasterNodeInDirectChildren(item, *nodeIt);\n    if (!childItem) {\n      return;\n    }\n    item = childItem;\n    items.push_back(item);\n    ++nodeIt;\n  }\n\n  Q_ASSERT(getItemNodeData(item).getNode() == p_node);\n\n  // Do not expand the last item.\n  for (int i = 0; i < items.size() - 1; ++i) {\n    items[i]->setExpanded(true);\n  }\n\n  m_masterExplorer->setCurrentItem(item);\n}\n\nQTreeWidgetItem *NotebookNodeExplorer::findMasterNodeInDirectChildren(QTreeWidgetItem *p_item,\n                                                                      const Node *p_node) const {\n  auto cnt = p_item->childCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto child = p_item->child(i);\n    auto data = getItemNodeData(child);\n    if (data.matched(p_node)) {\n      return child;\n    }\n  }\n\n  return nullptr;\n}\n\nQTreeWidgetItem *NotebookNodeExplorer::findMasterNodeInTopLevelItems(QTreeWidget *p_tree,\n                                                                     const Node *p_node) const {\n  auto cnt = p_tree->topLevelItemCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto child = p_tree->topLevelItem(i);\n    auto data = getItemNodeData(child);\n    if (data.matched(p_node)) {\n      return child;\n    }\n  }\n\n  return nullptr;\n}\n\nvoid NotebookNodeExplorer::setCurrentSlaveNode(const Node *p_node) {\n  if (!p_node) {\n    m_slaveExplorer->setCurrentItem(nullptr);\n    return;\n  }\n\n  Q_ASSERT(!belongsToMasterExplorer(p_node));\n\n  ListWidget::forEachItem(m_slaveExplorer, [this, p_node](QListWidgetItem *item) {\n    auto data = getItemNodeData(item);\n    if (data.matched(p_node)) {\n      m_slaveExplorer->setCurrentItem(item);\n      return false;\n    }\n    return true;\n  });\n\n  if (m_slaveExplorer->currentItem() && m_masterExplorer->hasFocus()) {\n    // To get focus after creating a new note.\n    m_slaveExplorer->setFocus();\n  }\n}\n\nvoid NotebookNodeExplorer::setCurrentSlaveNode(const QString &p_name) {\n  if (p_name.isEmpty()) {\n    m_slaveExplorer->setCurrentItem(nullptr);\n    return;\n  }\n\n  ListWidget::forEachItem(m_slaveExplorer, [this, &p_name](QListWidgetItem *item) {\n    auto data = getItemNodeData(item);\n    if (data.matched(p_name)) {\n      m_slaveExplorer->setCurrentItem(item);\n      return false;\n    }\n    return true;\n  });\n}\n\nvoid NotebookNodeExplorer::cacheState(bool p_saveCurrent) {\n  if (m_notebook) {\n    auto &cacheData = getCache();\n    cacheData.m_masterStateCache->save(m_masterExplorer, p_saveCurrent);\n    if (p_saveCurrent && !isCombinedExploreMode()) {\n      cacheData.m_currentSlaveName.clear();\n      auto item = m_slaveExplorer->currentItem();\n      if (item) {\n        auto data = getItemNodeData(item);\n        if (data.isNode()) {\n          cacheData.m_currentSlaveName = data.getNode()->getName();\n        } else {\n          cacheData.m_currentSlaveName = data.getExternalNode()->getName();\n        }\n      }\n    }\n  }\n}\n\nNotebookNodeExplorer::CacheData &NotebookNodeExplorer::getCache() const {\n  Q_ASSERT(m_notebook);\n  auto it = const_cast<NotebookNodeExplorer *>(this)->m_cache.find(m_notebook.data());\n  if (it == const_cast<NotebookNodeExplorer *>(this)->m_cache.end()) {\n    auto keyFunc = [](const QTreeWidgetItem *p_item, bool &p_ok) {\n      auto data = NotebookNodeExplorer::getItemNodeData(p_item);\n      if (data.isNode()) {\n        p_ok = true;\n        return data.getNode();\n      }\n\n      p_ok = false;\n      return static_cast<Node *>(nullptr);\n    };\n    it = const_cast<NotebookNodeExplorer *>(this)->m_cache.insert(m_notebook.data(), CacheData());\n    it.value().m_masterStateCache = QSharedPointer<QTreeWidgetStateCache<Node *>>::create(keyFunc);\n  }\n\n  return it.value();\n}\n\nvoid NotebookNodeExplorer::clearCache(const Notebook *p_notebook) {\n  auto it = m_cache.find(p_notebook);\n  if (it != m_cache.end()) {\n    it.value().clear();\n  }\n}\n\nvoid NotebookNodeExplorer::createMasterContextMenuOnRoot(QMenu *p_menu) {\n  createAndAddAction(Action::NewNote, p_menu);\n\n  createAndAddAction(Action::NewFolder, p_menu);\n\n  if (isPasteOnNodeAvailable(nullptr)) {\n    p_menu->addSeparator();\n    createAndAddAction(Action::Paste, p_menu);\n  }\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::Reload, p_menu);\n\n  createAndAddAction(Action::ReloadIndex, p_menu);\n\n  createAndAddAction(Action::OpenLocation, p_menu);\n}\n\nvoid NotebookNodeExplorer::createContextMenuOnNode(QMenu *p_menu, const Node *p_node,\n                                                   bool p_master) {\n  const int selectedSize =\n      p_master ? m_masterExplorer->selectedItems().size() : m_slaveExplorer->selectedItems().size();\n\n  createAndAddAction(Action::Edit, p_menu, p_master);\n\n  createAndAddAction(Action::Read, p_menu, p_master);\n\n  addOpenWithMenu(p_menu, p_master);\n\n  p_menu->addSeparator();\n\n  if (selectedSize == 1 && p_node->isContainer()) {\n    createAndAddAction(Action::ExpandAll, p_menu, p_master);\n  }\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::NewNote, p_menu, p_master);\n\n  createAndAddAction(Action::NewFolder, p_menu, p_master);\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::Copy, p_menu, p_master);\n\n  createAndAddAction(Action::Cut, p_menu, p_master);\n\n  if (selectedSize == 1 && isPasteOnNodeAvailable(p_node)) {\n    createAndAddAction(Action::Paste, p_menu, p_master);\n  }\n\n  createAndAddAction(Action::Delete, p_menu, p_master);\n\n  createAndAddAction(Action::RemoveFromConfig, p_menu, p_master);\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::Reload, p_menu, p_master);\n\n  createAndAddAction(Action::Sort, p_menu, p_master);\n\n  if (selectedSize == 1 && m_notebook->tag() && !p_node->isContainer()) {\n    p_menu->addSeparator();\n\n    createAndAddAction(Action::Tag, p_menu, p_master);\n  }\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::PinToQuickAccess, p_menu, p_master);\n\n  if (selectedSize == 1) {\n    createAndAddAction(Action::CopyPath, p_menu, p_master);\n\n    createAndAddAction(Action::OpenLocation, p_menu, p_master);\n\n    // 添加视觉设置子菜单\n    auto visualMenu = WidgetsFactory::createMenu(tr(\"Visual Settings\"), p_menu);\n    createAndAddAction(Action::SetBackgroundColor, visualMenu, p_master);\n    createAndAddAction(Action::SetBorderColor, visualMenu, p_master);\n    createAndAddAction(Action::SetNameColor, visualMenu, p_master);\n\n    // 只有文件夹节点才能设置级联色\n    if (p_node->isContainer()) {\n      visualMenu->addSeparator();\n      auto cascadeMenu = WidgetsFactory::createMenu(tr(\"Cascade Color Settings\"), visualMenu);\n      createAndAddAction(Action::SetCascadeBackgroundColor, cascadeMenu, p_master);\n      createAndAddAction(Action::SetCascadeBorderColor, cascadeMenu, p_master);\n      createAndAddAction(Action::ClearCascadeColors, cascadeMenu, p_master);\n      visualMenu->addMenu(cascadeMenu);\n    }\n\n    visualMenu->addSeparator();\n    createAndAddAction(Action::ClearColors, visualMenu, p_master);\n    p_menu->addMenu(visualMenu);\n\n    createAndAddAction(Action::Properties, p_menu, p_master);\n  }\n}\n\nvoid NotebookNodeExplorer::createContextMenuOnExternalNode(QMenu *p_menu,\n                                                           const ExternalNode *p_node,\n                                                           bool p_master) {\n  Q_UNUSED(p_node);\n\n  const int selectedSize =\n      p_master ? m_masterExplorer->selectedItems().size() : m_slaveExplorer->selectedItems().size();\n\n  createAndAddAction(Action::Edit, p_menu, p_master);\n\n  createAndAddAction(Action::Read, p_menu, p_master);\n\n  addOpenWithMenu(p_menu, p_master);\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::ImportToConfig, p_menu, p_master);\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::PinToQuickAccess, p_menu, p_master);\n\n  if (selectedSize == 1) {\n    createAndAddAction(Action::CopyPath, p_menu, p_master);\n\n    createAndAddAction(Action::OpenLocation, p_menu, p_master);\n  }\n}\n\nvoid NotebookNodeExplorer::createSlaveContextMenuOnMasterNode(QMenu *p_menu) {\n  auto masterNode = getSlaveExplorerMasterNode();\n  if (!masterNode) {\n    // Current master node may be an external node.\n    return;\n  }\n\n  createAndAddAction(Action::NewNote, p_menu, false);\n\n  createAndAddAction(Action::NewFolder, p_menu, false);\n\n  if (isPasteOnNodeAvailable(masterNode)) {\n    p_menu->addSeparator();\n    createAndAddAction(Action::Paste, p_menu, false);\n  }\n\n  p_menu->addSeparator();\n\n  createAndAddAction(Action::Reload, p_menu, false);\n\n  createAndAddAction(Action::OpenLocation, p_menu, false);\n}\n\nstatic QIcon generateMenuActionIcon(const QString &p_name) {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  return IconUtils::fetchIconWithDisabledState(themeMgr.getIconFile(p_name));\n}\n\nQAction *NotebookNodeExplorer::createAction(Action p_act, QObject *p_parent, bool p_master) {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  QAction *act = nullptr;\n  switch (p_act) {\n  case Action::NewNote:\n    act = new QAction(generateMenuActionIcon(\"new_note.svg\"), tr(\"New &Note\"), p_parent);\n    connect(act, &QAction::triggered, this, []() { emit VNoteX::getInst().newNoteRequested(); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::NewNote));\n    break;\n\n  case Action::NewFolder:\n    act = new QAction(generateMenuActionIcon(\"new_folder.svg\"), tr(\"New &Folder\"), p_parent);\n    connect(act, &QAction::triggered, this, []() { emit VNoteX::getInst().newFolderRequested(); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::NewFolder));\n    break;\n\n  case Action::Properties:\n    act =\n        new QAction(generateMenuActionIcon(\"properties.svg\"), tr(\"&Properties (Rename)\"), p_parent);\n    connect(act, &QAction::triggered, this,\n            [this, p_master]() { openCurrentNodeProperties(p_master); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::Properties));\n    break;\n\n  case Action::OpenLocation:\n    act = new QAction(tr(\"Open Locat&ion\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      // Always use the master node no matter it is in master/slave explorer.\n      auto item = m_masterExplorer->currentItem();\n      if (!item) {\n        if (m_notebook) {\n          auto locationPath = m_notebook->getRootFolderAbsolutePath();\n          WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(locationPath));\n        }\n        return;\n      }\n\n      auto data = getItemNodeData(item);\n      Node *node = nullptr;\n      if (data.isNode()) {\n        node = data.getNode();\n      } else {\n        // Open the parent folder of the external node.\n        node = data.getExternalNode()->getNode();\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      auto locationPath = node->fetchAbsolutePath();\n      if (!node->isContainer()) {\n        locationPath = PathUtils::parentDirPath(locationPath);\n      }\n\n      if (!locationPath.isEmpty()) {\n        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(locationPath));\n      }\n    });\n    break;\n\n  case Action::CopyPath:\n    act = new QAction(tr(\"Cop&y Path\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      NodeData data = p_master ? getCurrentMasterNodeData() : getCurrentSlaveNodeData();\n      if (!data.isValid()) {\n        return;\n      }\n\n      QString nodePath;\n      if (data.isNode()) {\n        auto node = data.getNode();\n        if (checkInvalidNode(node)) {\n          return;\n        }\n        nodePath = node->fetchAbsolutePath();\n      } else if (data.isExternalNode()) {\n        nodePath = data.getExternalNode()->fetchAbsolutePath();\n      }\n      if (!nodePath.isEmpty()) {\n        ClipboardUtils::setTextToClipboard(nodePath);\n        VNoteX::getInst().showStatusMessageShort(tr(\"Copied path: %1\").arg(nodePath));\n      }\n    });\n    break;\n\n  case Action::Copy:\n    act = new QAction(tr(\"&Copy\"), p_parent);\n    connect(act, &QAction::triggered, this,\n            [this, p_master]() { copySelectedNodes(false, p_master); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::Copy));\n    break;\n\n  case Action::Cut:\n    act = new QAction(tr(\"C&ut\"), p_parent);\n    connect(act, &QAction::triggered, this,\n            [this, p_master]() { copySelectedNodes(true, p_master); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::Cut));\n    break;\n\n  case Action::Paste:\n    act = new QAction(tr(\"&Paste\"), p_parent);\n    connect(act, &QAction::triggered, this, &NotebookNodeExplorer::pasteNodesFromClipboard);\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::Paste));\n    break;\n\n  case Action::Delete:\n    act = new QAction(tr(\"&Delete\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() { removeSelectedNodes(p_master); });\n    break;\n\n  case Action::RemoveFromConfig:\n    act = new QAction(tr(\"Remo&ve From Index\"), p_parent);\n    connect(act, &QAction::triggered, this,\n            [this, p_master]() { removeSelectedNodesFromConfig(p_master); });\n    break;\n\n  case Action::Sort:\n    act = new QAction(generateMenuActionIcon(\"sort.svg\"), tr(\"&Sort\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() { manualSort(p_master); });\n    break;\n\n  case Action::Reload:\n    act = new QAction(tr(\"Re&load\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      auto node = currentExploredFolderNode();\n      updateNode(node);\n    });\n    break;\n\n  case Action::ReloadIndex:\n    act = new QAction(tr(\"Relo&ad Index Of Notebook From Disk\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      if (!m_notebook) {\n        return;\n      }\n\n      auto event = QSharedPointer<Event>::create();\n      emit nodeAboutToReload(m_notebook->getRootNode().data(), event);\n      if (!event->m_response.toBool()) {\n        return;\n      }\n\n      m_notebook->reloadNodes();\n      reload();\n    });\n    break;\n\n  case Action::ImportToConfig:\n    act = new QAction(tr(\"&Import To Index\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto nodes = p_master ? getMasterSelectedNodesAndExternalNodes().second\n                            : getSlaveSelectedNodesAndExternalNodes().second;\n      importToIndex(nodes);\n    });\n    break;\n\n  case Action::Open:\n    // Use Edit and Read instead.\n    Q_ASSERT(false);\n    act = new QAction(tr(\"&Open\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      // Support nodes and external nodes.\n      // Do nothing for folders.\n      auto selectedNodes = p_master ? getMasterSelectedNodesAndExternalNodes()\n                                    : getSlaveSelectedNodesAndExternalNodes();\n      for (const auto &externalNode : selectedNodes.second) {\n        if (!externalNode->isFolder()) {\n          emit fileActivated(externalNode->fetchAbsolutePath(),\n                             QSharedPointer<FileOpenParameters>::create());\n        }\n      }\n\n      for (const auto &node : selectedNodes.first) {\n        if (checkInvalidNode(node)) {\n          continue;\n        }\n\n        if (node->hasContent()) {\n          emit nodeActivated(node, QSharedPointer<FileOpenParameters>::create());\n        }\n      }\n    });\n    break;\n\n  case Action::Edit:\n    Q_FALLTHROUGH();\n  case Action::Read: {\n    const bool isEdit = p_act == Action::Edit;\n    act = new QAction(isEdit ? tr(\"&Edit\") : tr(\"&Read\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master, isEdit]() {\n      // Support nodes and external nodes.\n      // Do nothing for folders.\n      auto selectedNodes = p_master ? getMasterSelectedNodesAndExternalNodes()\n                                    : getSlaveSelectedNodesAndExternalNodes();\n      for (const auto &externalNode : selectedNodes.second) {\n        if (!externalNode->isFolder()) {\n          auto paras = QSharedPointer<FileOpenParameters>::create();\n          paras->m_mode = isEdit ? ViewWindowMode::Edit : ViewWindowMode::Read;\n          paras->m_forceMode = true;\n          emit fileActivated(externalNode->fetchAbsolutePath(), paras);\n        }\n      }\n\n      for (const auto &node : selectedNodes.first) {\n        if (checkInvalidNode(node)) {\n          continue;\n        }\n\n        if (node->hasContent()) {\n          auto paras = QSharedPointer<FileOpenParameters>::create();\n          paras->m_mode = isEdit ? ViewWindowMode::Edit : ViewWindowMode::Read;\n          paras->m_forceMode = true;\n          emit nodeActivated(node, paras);\n        }\n      }\n    });\n    break;\n  }\n\n  case Action::ExpandAll:\n    act = new QAction(tr(\"E&xpand All\\t*\"), p_parent);\n    connect(act, &QAction::triggered, this, [this]() {\n      auto item = m_masterExplorer->currentItem();\n      if (!item || item->childCount() == 0) {\n        return;\n      }\n      auto data = getItemNodeData(item);\n      if (!data.isNode()) {\n        return;\n      }\n\n      TreeWidget::expandRecursively(item);\n    });\n    break;\n\n  case Action::PinToQuickAccess:\n    act = new QAction(generateMenuActionIcon(QStringLiteral(\"quick_access_menu.svg\")),\n                      tr(\"Pin To &Quick Access\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto nodes = p_master ? getMasterSelectedNodesAndExternalNodes()\n                            : getSlaveSelectedNodesAndExternalNodes();\n      QStringList files;\n      QStringList vxUrls;\n      for (const auto &node : nodes.first) {\n        files.push_back(node->fetchAbsolutePath());\n      }\n      for (const auto &node : nodes.second) {\n        files.push_back(node->fetchAbsolutePath());\n      }\n      // find file signature and pinToQuickAccess as VxUrl.\n      for (const auto &file : files) {\n        QFileInfo fileInfo(file);\n        QString signature = VxUrlUtils::getSignatureFromFilePath(file);\n\n        if (!signature.isEmpty()) {\n          QString item = VxUrlUtils::generateVxURL(signature, file);\n          vxUrls.append(item);\n        }\n      }\n      if (!files.isEmpty()) {\n        emit VNoteX::getInst().pinToQuickAccessRequested(vxUrls);\n      }\n    });\n    break;\n\n  case Action::Tag:\n    act = new QAction(generateMenuActionIcon(QStringLiteral(\"tag.svg\")), tr(\"&Tags\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      Q_ASSERT(m_notebook->tag());\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      Q_ASSERT(node);\n      if (checkInvalidNode(node)) {\n        return;\n      }\n      ViewTagsDialog dialog(node, VNoteX::getInst().getMainWindow());\n      dialog.exec();\n    });\n    break;\n\n  case Action::SetBackgroundColor:\n    act = new QAction(tr(\"Set Background Color\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      if (!node) {\n        return;\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      QColor defaultColor = node->getBackgroundColor().isEmpty()\n                                ? QColor(Qt::white)\n                                : QColor(node->getBackgroundColor());\n      auto color = QColorDialog::getColor(defaultColor, this, tr(\"Select Background Color\"));\n      if (color.isValid()) {\n        NodeVisual visual = node->getVisual();\n        visual.setBackgroundColor(color.name());\n        updateCurrentNodeVisualDirectly(node, visual);\n      }\n    });\n    break;\n\n  case Action::SetBorderColor:\n    act = new QAction(tr(\"Set Border Color\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      if (!node) {\n        return;\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      QColor defaultColor =\n          node->getBorderColor().isEmpty() ? QColor(Qt::black) : QColor(node->getBorderColor());\n      auto color = QColorDialog::getColor(defaultColor, this, tr(\"Select Border Color\"));\n      if (color.isValid()) {\n        NodeVisual visual = node->getVisual();\n        visual.setBorderColor(color.name());\n        updateCurrentNodeVisualDirectly(node, visual);\n      }\n    });\n    break;\n\n  case Action::SetNameColor:\n    act = new QAction(tr(\"Set Name Color\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      if (!node) {\n        return;\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      QColor defaultColor =\n          node->getNameColor().isEmpty() ? QColor(Qt::black) : QColor(node->getNameColor());\n      auto color = QColorDialog::getColor(defaultColor, this, tr(\"Select Name Color\"));\n      if (color.isValid()) {\n        NodeVisual visual = node->getVisual();\n        visual.setNameColor(color.name());\n        updateCurrentNodeVisualDirectly(node, visual);\n      }\n    });\n    break;\n\n  case Action::SetCascadeBackgroundColor:\n    act = new QAction(tr(\"Set Cascade Background Color\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      if (!node) {\n        return;\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      if (!node->isContainer()) {\n        return; // 只有文件夹才能设置级联色\n      }\n\n      QColor defaultColor = node->getBackgroundColor().isEmpty()\n                                ? QColor(\"#e6f3ff\")\n                                : QColor(node->getBackgroundColor());\n      auto color =\n          QColorDialog::getColor(defaultColor, this, tr(\"Select Cascade Background Color\"));\n      if (color.isValid()) {\n        setCascadeColorRecursively(node, color.name(), QString(), QString());\n      }\n    });\n    break;\n\n  case Action::SetCascadeBorderColor:\n    act = new QAction(tr(\"Set Cascade Border Color\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      if (!node) {\n        return;\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      if (!node->isContainer()) {\n        return; // 只有文件夹才能设置级联色\n      }\n\n      QColor defaultColor =\n          node->getBorderColor().isEmpty() ? QColor(\"#3A75F2\") : QColor(node->getBorderColor());\n      auto color = QColorDialog::getColor(defaultColor, this, tr(\"Select Cascade Border Color\"));\n      if (color.isValid()) {\n        setCascadeColorRecursively(node, QString(), color.name(), QString());\n      }\n    });\n    break;\n\n  case Action::ClearCascadeColors:\n    act = new QAction(tr(\"Clear Cascade Colors\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      if (!node) {\n        return;\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      // 递归清除子节点\n      setCascadeColorRecursively(node, QString(), QString(), QString());\n    });\n    break;\n\n  case Action::ClearColors:\n    act = new QAction(tr(\"Clear Colors\"), p_parent);\n    connect(act, &QAction::triggered, this, [this, p_master]() {\n      auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n      if (!node) {\n        return;\n      }\n\n      if (checkInvalidNode(node)) {\n        return;\n      }\n\n      NodeVisual visual;\n      visual.clearAllColors();\n      updateCurrentNodeVisualDirectly(node, visual);\n    });\n    break;\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  return act;\n}\n\nQAction *NotebookNodeExplorer::createAndAddAction(Action p_act, QMenu *p_menu, bool p_master) {\n  auto act = createAction(p_act, p_menu, p_master);\n  p_menu->addAction(act);\n  return act;\n}\n\nvoid NotebookNodeExplorer::copySelectedNodes(bool p_move, bool p_master) {\n  auto nodes = p_master ? getMasterSelectedNodesAndExternalNodes().first\n                        : getSlaveSelectedNodesAndExternalNodes().first;\n  if (nodes.isEmpty()) {\n    return;\n  }\n\n  filterAwayChildrenNodes(nodes);\n\n  ClipboardData cdata(VNoteX::getInst().getInstanceId(),\n                      p_move ? ClipboardData::MoveNode : ClipboardData::CopyNode);\n  for (auto node : nodes) {\n    if (checkInvalidNode(node)) {\n      continue;\n    }\n\n    auto item = QSharedPointer<NodeClipboardDataItem>::create(node->getNotebook()->getId(),\n                                                              node->fetchPath());\n    cdata.addItem(item);\n  }\n\n  auto text = cdata.toJsonText();\n  ClipboardUtils::setTextToClipboard(text);\n\n  size_t nrItems = cdata.getData().size();\n  VNoteX::getInst().showStatusMessageShort(tr(\"Copied %n item(s)\", \"\", static_cast<int>(nrItems)));\n}\n\nQPair<QVector<Node *>, QVector<QSharedPointer<ExternalNode>>>\nNotebookNodeExplorer::getMasterSelectedNodesAndExternalNodes() const {\n  QPair<QVector<Node *>, QVector<QSharedPointer<ExternalNode>>> nodes;\n\n  auto items = m_masterExplorer->selectedItems();\n  for (auto &item : items) {\n    auto data = getItemNodeData(item);\n    if (data.isNode()) {\n      nodes.first.push_back(data.getNode());\n    } else if (data.isExternalNode()) {\n      nodes.second.push_back(data.getExternalNode());\n    }\n  }\n\n  return nodes;\n}\n\nQPair<QVector<Node *>, QVector<QSharedPointer<ExternalNode>>>\nNotebookNodeExplorer::getSlaveSelectedNodesAndExternalNodes() const {\n  QPair<QVector<Node *>, QVector<QSharedPointer<ExternalNode>>> nodes;\n\n  auto items = m_slaveExplorer->selectedItems();\n  for (auto &item : items) {\n    auto data = getItemNodeData(item);\n    if (data.isNode()) {\n      nodes.first.push_back(data.getNode());\n    } else if (data.isExternalNode()) {\n      nodes.second.push_back(data.getExternalNode());\n    }\n  }\n\n  return nodes;\n}\n\nQSharedPointer<ClipboardData> NotebookNodeExplorer::tryFetchClipboardData() {\n  auto text = ClipboardUtils::getTextFromClipboard();\n  return ClipboardData::fromJsonText(text);\n}\n\nstatic bool isValidClipboardData(const ClipboardData *p_data) {\n  if (!p_data) {\n    return false;\n  }\n\n  if (p_data->getInstanceId() != VNoteX::getInst().getInstanceId()) {\n    return false;\n  }\n\n  if (p_data->getData().isEmpty()) {\n    return false;\n  }\n\n  auto act = p_data->getAction();\n  if (act != ClipboardData::CopyNode && act != ClipboardData::MoveNode) {\n    return false;\n  }\n\n  return true;\n}\n\nbool NotebookNodeExplorer::isPasteOnNodeAvailable(const Node *p_node) const {\n  Q_UNUSED(p_node);\n  auto cdata = tryFetchClipboardData();\n  return isValidClipboardData(cdata.data());\n}\n\nstatic QSharedPointer<Node> getNodeFromClipboardDataItem(const NodeClipboardDataItem *p_item) {\n  Q_ASSERT(p_item);\n  auto notebook = VNoteX::getInst().getNotebookMgr().findNotebookById(p_item->m_notebookId);\n  if (!notebook) {\n    Exception::throwOne(\n        Exception::Type::InvalidArgument,\n        QStringLiteral(\"failed to find notebook by ID (%1)\").arg(p_item->m_notebookId));\n    return nullptr;\n  }\n\n  auto node = notebook->loadNodeByPath(p_item->m_nodeRelativePath);\n  Q_ASSERT(!node || node->fetchPath() == p_item->m_nodeRelativePath);\n  return node;\n}\n\nvoid NotebookNodeExplorer::pasteNodesFromClipboard() {\n  // Identify the dest node.\n  auto destNode = getCurrentMasterNode();\n  if (!destNode) {\n    if (!m_notebook) {\n      return;\n    }\n    destNode = m_notebook->getRootNode().data();\n  } else {\n    // Current node may be a file node.\n    if (!destNode->isContainer()) {\n      destNode = destNode->getParent();\n    } else if (checkInvalidNode(destNode)) {\n      return;\n    }\n  }\n\n  Q_ASSERT(destNode && destNode->isContainer());\n\n  // Fetch source nodes from clipboard.\n  auto cdata = tryFetchClipboardData();\n  if (!isValidClipboardData(cdata.data())) {\n    MessageBoxHelper::notify(MessageBoxHelper::Warning, tr(\"Invalid clipboard data to paste.\"),\n                             VNoteX::getInst().getMainWindow());\n    return;\n  }\n\n  QVector<QSharedPointer<Node>> srcNodes;\n  auto items = cdata->getData();\n  for (auto &item : items) {\n    auto nodeItem = dynamic_cast<NodeClipboardDataItem *>(item.data());\n    Q_ASSERT(nodeItem);\n    auto src = getNodeFromClipboardDataItem(nodeItem);\n    if (!src) {\n      continue;\n    } else if (src == destNode) {\n      MessageBoxHelper::notify(\n          MessageBoxHelper::Warning,\n          tr(\"Destination is detected in sources (%1). Operation is cancelled.\")\n              .arg(destNode->fetchAbsolutePath()),\n          VNoteX::getInst().getMainWindow());\n      return;\n    }\n\n    srcNodes.push_back(src);\n  }\n\n  bool isMove = cdata->getAction() == ClipboardData::MoveNode;\n  QVector<const Node *> pastedNodes;\n  QSet<Node *> nodesNeedUpdate;\n  for (auto srcNode : srcNodes) {\n    Q_ASSERT(srcNode->exists());\n\n    if (isMove) {\n      // Notice the view area to close any opened view windows.\n      auto event = QSharedPointer<Event>::create();\n      emit nodeAboutToMove(srcNode.data(), event);\n      if (!event->m_response.toBool()) {\n        continue;\n      }\n    }\n\n    auto srcPath = srcNode->fetchAbsolutePath();\n    auto srcParentNode = srcNode->getParent();\n\n    try {\n      auto notebook = destNode->getNotebook();\n      auto pastedNode = notebook->copyNodeAsChildOf(srcNode, destNode, isMove);\n      pastedNodes.push_back(pastedNode.data());\n    } catch (Exception &p_e) {\n      MessageBoxHelper::notify(MessageBoxHelper::Critical,\n                               tr(\"Failed to copy source (%1) to destination (%2) (%3).\")\n                                   .arg(srcPath, destNode->fetchAbsolutePath(), p_e.what()),\n                               VNoteX::getInst().getMainWindow());\n    }\n\n    if (isMove) {\n      nodesNeedUpdate.insert(srcParentNode);\n    }\n  }\n\n  for (auto node : nodesNeedUpdate) {\n    updateNode(node);\n\n    // Deleted src nodes may be the current node in cache. Clear the cache.\n    clearCache(node->getNotebook());\n  }\n\n  // Update and expand dest node. Select all pasted nodes.\n  updateAndExpandNode(destNode);\n  selectNodes(pastedNodes);\n\n  if (isMove) {\n    ClipboardUtils::clearClipboard();\n  }\n\n  VNoteX::getInst().showStatusMessageShort(tr(\"Pasted %n item(s)\", \"\", pastedNodes.size()));\n}\n\nvoid NotebookNodeExplorer::setMasterNodeExpanded(const Node *p_node, bool p_expanded) {\n  auto item = findMasterNode(p_node);\n  if (item) {\n    item->setExpanded(p_expanded);\n  }\n}\n\nvoid NotebookNodeExplorer::selectNodes(const QVector<const Node *> &p_nodes) {\n  if (p_nodes.isEmpty()) {\n    return;\n  }\n\n  // All the nodes should either belong to master or slave explorer.\n  if (belongsToMasterExplorer(p_nodes[0])) {\n    bool firstItem = true;\n    for (auto node : p_nodes) {\n      auto item = findMasterNode(node);\n      if (item) {\n        auto flags = firstItem ? QItemSelectionModel::ClearAndSelect : QItemSelectionModel::Select;\n        m_masterExplorer->setCurrentItem(item, 0, flags);\n        firstItem = false;\n      }\n    }\n  } else {\n    bool firstItem = true;\n    for (auto node : p_nodes) {\n      auto item = findSlaveNode(node);\n      if (item) {\n        auto flags = firstItem ? QItemSelectionModel::ClearAndSelect : QItemSelectionModel::Select;\n        m_slaveExplorer->setCurrentItem(item, flags);\n        firstItem = false;\n      }\n    }\n  }\n}\n\nvoid NotebookNodeExplorer::removeSelectedNodes(bool p_master) {\n  const QString text = tr(\"Delete these folders and notes?\");\n  const QString info = tr(\"Deleted files could be found in the recycle bin of notebook.\");\n  auto nodes = confirmSelectedNodes(tr(\"Confirm Deletion\"), text, info, p_master);\n  removeNodes(nodes, false);\n}\n\nQVector<Node *> NotebookNodeExplorer::confirmSelectedNodes(const QString &p_title,\n                                                           const QString &p_text,\n                                                           const QString &p_info,\n                                                           bool p_master) const {\n  auto nodes = p_master ? getMasterSelectedNodesAndExternalNodes().first\n                        : getSlaveSelectedNodesAndExternalNodes().first;\n  if (nodes.isEmpty()) {\n    return nodes;\n  }\n\n  QVector<ConfirmItemInfo> items;\n  for (const auto &node : nodes) {\n    items.push_back(ConfirmItemInfo(getIcon(node), node->getName(), node->fetchAbsolutePath(),\n                                    node->fetchAbsolutePath(), (void *)node));\n  }\n\n  DeleteConfirmDialog dialog(p_title, p_text, p_info, items, DeleteConfirmDialog::Flag::None, false,\n                             VNoteX::getInst().getMainWindow());\n\n  QVector<Node *> nodesToDelete;\n  if (dialog.exec()) {\n    items = dialog.getConfirmedItems();\n    for (const auto &item : items) {\n      nodesToDelete.push_back(static_cast<Node *>(item.m_data));\n    }\n  }\n\n  return nodesToDelete;\n}\n\nvoid NotebookNodeExplorer::removeNodes(QVector<Node *> p_nodes, bool p_configOnly) {\n  if (p_nodes.isEmpty()) {\n    return;\n  }\n\n  filterAwayChildrenNodes(p_nodes);\n\n  int nrDeleted = 0;\n  QSet<Node *> nodesNeedUpdate;\n  QVector<QString> pathsNeedRemove;\n  for (auto node : p_nodes) {\n    auto srcName = node->getName();\n    auto srcPath = node->fetchAbsolutePath();\n    auto srcParentNode = node->getParent();\n    try {\n      auto event = QSharedPointer<Event>::create();\n      emit nodeAboutToRemove(node, event);\n      if (!event->m_response.toBool()) {\n        continue;\n      }\n\n      if (p_configOnly) {\n        m_notebook->removeNode(node, false, true);\n      } else {\n        m_notebook->moveNodeToRecycleBin(node);\n      }\n\n      pathsNeedRemove.append(srcPath);\n\n      ++nrDeleted;\n    } catch (Exception &p_e) {\n      MessageBoxHelper::notify(\n          MessageBoxHelper::Critical,\n          tr(\"Failed to delete/remove item (%1) (%2) (%3).\").arg(srcName, srcPath, p_e.what()),\n          VNoteX::getInst().getMainWindow());\n    }\n\n    nodesNeedUpdate.insert(srcParentNode);\n  }\n\n  HistoryMgr::getInst().remove(pathsNeedRemove, m_notebook.data());\n\n  for (auto node : nodesNeedUpdate) {\n    updateNode(node);\n  }\n\n  VNoteX::getInst().showStatusMessageShort(tr(\"Deleted/Removed %n item(s)\", \"\", nrDeleted));\n}\n\nvoid NotebookNodeExplorer::removeSelectedNodesFromConfig(bool p_master) {\n  auto nodes = confirmSelectedNodes(\n      tr(\"Confirm Removal\"), tr(\"Remove these folders and notes from index?\"),\n      tr(\"Files are not touched but just removed from notebook index.\"), p_master);\n  removeNodes(nodes, true);\n}\n\nvoid NotebookNodeExplorer::filterAwayChildrenNodes(QVector<Node *> &p_nodes) {\n  for (int i = p_nodes.size() - 1; i >= 0; --i) {\n    // Check if j is i's ancestor.\n    for (int j = p_nodes.size() - 1; j >= 0; --j) {\n      if (i == j) {\n        continue;\n      }\n\n      if (Node::isAncestor(p_nodes[j], p_nodes[i])) {\n        p_nodes.remove(i);\n        break;\n      }\n    }\n  }\n}\n\nvoid NotebookNodeExplorer::updateAndExpandNode(Node *p_node) {\n  setMasterNodeExpanded(p_node, false);\n  updateNode(p_node);\n  setMasterNodeExpanded(p_node, true);\n}\n\nbool NotebookNodeExplorer::isMasterAllSelectedItemsSameType() const {\n  auto items = m_masterExplorer->selectedItems();\n  if (items.size() < 2) {\n    return true;\n  }\n\n  auto type = getItemNodeData(items.first()).getType();\n  for (int i = 1; i < items.size(); ++i) {\n    auto itype = getItemNodeData(items[i]).getType();\n    if (itype != type) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nbool NotebookNodeExplorer::isSlaveAllSelectedItemsSameType() const {\n  auto items = m_slaveExplorer->selectedItems();\n  if (items.size() < 2) {\n    return true;\n  }\n\n  auto type = getItemNodeData(items.first()).getType();\n  for (int i = 1; i < items.size(); ++i) {\n    auto itype = getItemNodeData(items[i]).getType();\n    if (itype != type) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvoid NotebookNodeExplorer::reload() { updateNode(nullptr); }\n\nvoid NotebookNodeExplorer::focusNormalNode() {\n  if (isCombinedExploreMode()) {\n    m_masterExplorer->setCurrentItem(m_masterExplorer->topLevelItem(0));\n  } else {\n    if (m_slaveExplorer->count() > 0) {\n      m_slaveExplorer->setCurrentRow(0);\n    }\n  }\n}\n\nvoid NotebookNodeExplorer::sortNodes(QVector<QSharedPointer<Node>> &p_nodes) const {\n  if (m_viewOrder == ViewOrder::OrderedByConfiguration) {\n    return;\n  }\n\n  // Put containers first.\n  int firstFileIndex = p_nodes.size();\n  for (int i = 0; i < p_nodes.size(); ++i) {\n    if (p_nodes[i]->isContainer()) {\n      // If it is a container, load it to set its created time and modified time.\n      p_nodes[i]->load();\n    } else {\n      firstFileIndex = i;\n      break;\n    }\n  }\n\n  // Sort containers.\n  sortNodes(p_nodes, 0, firstFileIndex, m_viewOrder);\n\n  // Sort non-containers.\n  sortNodes(p_nodes, firstFileIndex, p_nodes.size(), m_viewOrder);\n}\n\nvoid NotebookNodeExplorer::sortNodes(QVector<QSharedPointer<Node>> &p_nodes, int p_start, int p_end,\n                                     ViewOrder p_viewOrder) const {\n  if (p_start >= p_end) {\n    return;\n  }\n\n  bool reversed = false;\n  switch (p_viewOrder) {\n  case ViewOrder::OrderedByNameReversed:\n    reversed = true;\n    Q_FALLTHROUGH();\n  case ViewOrder::OrderedByName:\n    std::sort(p_nodes.begin() + p_start, p_nodes.begin() + p_end,\n              [reversed](const QSharedPointer<Node> &p_a, const QSharedPointer<Node> &p_b) {\n                if (reversed) {\n                  return p_b->getName().toLower() < p_a->getName().toLower();\n                } else {\n                  return p_a->getName().toLower() < p_b->getName().toLower();\n                }\n              });\n    break;\n\n  case ViewOrder::OrderedByCreatedTimeReversed:\n    reversed = true;\n    Q_FALLTHROUGH();\n  case ViewOrder::OrderedByCreatedTime:\n    std::sort(p_nodes.begin() + p_start, p_nodes.begin() + p_end,\n              [reversed](const QSharedPointer<Node> &p_a, const QSharedPointer<Node> &p_b) {\n                if (reversed) {\n                  return p_b->getCreatedTimeUtc() < p_a->getCreatedTimeUtc();\n                } else {\n                  return p_a->getCreatedTimeUtc() < p_b->getCreatedTimeUtc();\n                }\n              });\n    break;\n\n  case ViewOrder::OrderedByModifiedTimeReversed:\n    reversed = true;\n    Q_FALLTHROUGH();\n  case ViewOrder::OrderedByModifiedTime:\n    std::sort(p_nodes.begin() + p_start, p_nodes.begin() + p_end,\n              [reversed](const QSharedPointer<Node> &p_a, const QSharedPointer<Node> &p_b) {\n                if (reversed) {\n                  return p_b->getModifiedTimeUtc() < p_a->getModifiedTimeUtc();\n                } else {\n                  return p_a->getModifiedTimeUtc() < p_b->getModifiedTimeUtc();\n                }\n              });\n    break;\n\n  default:\n    break;\n  }\n}\n\nvoid NotebookNodeExplorer::setExternalFilesVisible(bool p_visible) {\n  if (m_externalFilesVisible == p_visible) {\n    return;\n  }\n\n  m_externalFilesVisible = p_visible;\n  reload();\n}\n\nvoid NotebookNodeExplorer::setAutoImportExternalFiles(bool p_enabled) {\n  if (m_autoImportExternalFiles == p_enabled) {\n    return;\n  }\n\n  m_autoImportExternalFiles = p_enabled;\n}\n\nvoid NotebookNodeExplorer::manualSort(bool p_master) {\n  auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n  if (!node) {\n    return;\n  }\n\n  auto parentNode = node->getParent();\n  bool isNotebook = parentNode->isRoot();\n\n  // Check whether sort files or folders based on current node type.\n  bool sortFolders = node->isContainer();\n\n  SortDialog sortDlg(sortFolders ? tr(\"Sort Folders\") : tr(\"Sort Notes\"),\n                     tr(\"Sort nodes under %1 (%2) in the configuration file.\")\n                         .arg(isNotebook ? tr(\"notebook\") : tr(\"folder\"),\n                              isNotebook ? m_notebook->getName() : parentNode->getName()),\n                     VNoteX::getInst().getMainWindow());\n\n  QVector<int> selectedIdx;\n\n  // Update the tree.\n  {\n    auto treeWidget = sortDlg.getTreeWidget();\n    treeWidget->clear();\n    treeWidget->setColumnCount(2);\n    treeWidget->setHeaderLabels({tr(\"Name\"), tr(\"Created Time\"), tr(\"Modified Time\")});\n\n    const auto &children = parentNode->getChildrenRef();\n    for (int i = 0; i < children.size(); ++i) {\n      const auto &child = children[i];\n      const bool selected = sortFolders ? child->isContainer() : !child->isContainer();\n      if (selected) {\n        selectedIdx.push_back(i);\n\n        QStringList cols{child->getName(),\n                         Utils::dateTimeString(child->getCreatedTimeUtc().toLocalTime()),\n                         Utils::dateTimeString(child->getModifiedTimeUtc().toLocalTime())};\n        QStringList comparisonCols{\n            QString(), Utils::dateTimeStringUniform(child->getCreatedTimeUtc().toLocalTime()),\n            Utils::dateTimeStringUniform(child->getModifiedTimeUtc().toLocalTime())};\n        auto item = sortDlg.addItem(cols, comparisonCols);\n        item->setData(0, Qt::UserRole, i);\n      }\n    }\n\n    sortDlg.updateTreeWidget();\n  }\n\n  if (sortDlg.exec() == QDialog::Accepted) {\n    const auto data = sortDlg.getSortedData();\n    Q_ASSERT(data.size() == selectedIdx.size());\n    QVector<int> sortedIdx(data.size(), -1);\n    for (int i = 0; i < data.size(); ++i) {\n      sortedIdx[i] = data[i].toInt();\n    }\n    parentNode->sortChildren(selectedIdx, sortedIdx);\n    updateNode(parentNode);\n  }\n}\n\nNode *NotebookNodeExplorer::currentExploredFolderNode() const {\n  if (!m_notebook) {\n    return nullptr;\n  }\n\n  auto node = getCurrentMasterNode();\n  if (node) {\n    if (!node->isContainer()) {\n      node = node->getParent();\n    }\n    Q_ASSERT(node && node->isContainer());\n  } else {\n    node = m_notebook->getRootNode().data();\n  }\n\n  return node;\n}\n\nNode *NotebookNodeExplorer::currentExploredNode() const {\n  if (!m_notebook) {\n    return nullptr;\n  }\n\n  if (isCombinedExploreMode()) {\n    return getCurrentMasterNode();\n  } else {\n    auto node = getCurrentSlaveNode();\n    if (!node) {\n      node = getCurrentMasterNode();\n    }\n    return node;\n  }\n}\n\nvoid NotebookNodeExplorer::setViewOrder(int p_order) {\n  if (m_viewOrder == p_order) {\n    return;\n  }\n\n  if (p_order >= 0 && p_order < ViewOrder::ViewOrderMax) {\n    m_viewOrder = static_cast<ViewOrder>(p_order);\n    reload();\n  }\n}\n\nvoid NotebookNodeExplorer::setExploreMode(int p_mode) {\n  if (m_exploreMode == p_mode) {\n    return;\n  }\n\n  if (p_mode >= 0 && p_mode < ExploreMode::ExploreModeMax) {\n    m_exploreMode = static_cast<ExploreMode>(p_mode);\n    switch (m_exploreMode) {\n    case ExploreMode::Combined:\n      setFocusProxy(m_masterExplorer);\n\n      WidgetUtils::distributeWidgetsOfSplitter(m_splitter);\n\n      Q_ASSERT(m_slaveExplorer);\n      m_slaveExplorer->clear();\n      m_slaveExplorer->hide();\n\n      disconnect(m_masterExplorer, &QTreeWidget::currentItemChanged, this,\n                 &NotebookNodeExplorer::updateSlaveExplorer);\n      break;\n\n    case ExploreMode::SeparateSingle:\n      Q_FALLTHROUGH();\n    case ExploreMode::SeparateDouble:\n      if (!m_slaveExplorer) {\n        setupSlaveExplorer();\n      }\n\n      setFocusProxy(m_slaveExplorer);\n\n      m_slaveExplorer->show();\n      m_splitter->setOrientation(m_exploreMode == ExploreMode::SeparateSingle ? Qt::Vertical\n                                                                              : Qt::Horizontal);\n      WidgetUtils::distributeWidgetsOfSplitter(m_splitter);\n\n      connect(m_masterExplorer, &QTreeWidget::currentItemChanged, this,\n              &NotebookNodeExplorer::updateSlaveExplorer);\n      break;\n\n    default:\n      Q_ASSERT(false);\n      return;\n    }\n\n    reload();\n  }\n}\n\nQStringList NotebookNodeExplorer::getSelectedNodesPath(bool p_master) const {\n  QStringList files;\n\n  // Support nodes and external nodes.\n  auto selectedNodes =\n      p_master ? getMasterSelectedNodesAndExternalNodes() : getSlaveSelectedNodesAndExternalNodes();\n  for (const auto &externalNode : selectedNodes.second) {\n    files << externalNode->fetchAbsolutePath();\n  }\n\n  for (const auto &node : selectedNodes.first) {\n    if (checkInvalidNode(node)) {\n      continue;\n    }\n    files << node->fetchAbsolutePath();\n  }\n\n  return files;\n}\n\nQSharedPointer<Node> NotebookNodeExplorer::importToIndex(QSharedPointer<ExternalNode> p_node) {\n  auto node = m_notebook->addAsNode(\n      p_node->getNode(), p_node->isFolder() ? Node::Flag::Container : Node::Flag::Content,\n      p_node->getName(), NodeParameters());\n  updateNode(p_node->getNode());\n  if (node) {\n    setCurrentNode(node.data());\n  }\n  return node;\n}\n\nvoid NotebookNodeExplorer::importToIndex(const QVector<QSharedPointer<ExternalNode>> &p_nodes) {\n  QSet<Node *> nodesToUpdate;\n  Node *currentNode = nullptr;\n\n  for (const auto &externalNode : p_nodes) {\n    auto node = m_notebook->addAsNode(externalNode->getNode(),\n                                      externalNode->isFolder() ? Node::Flag::Container\n                                                               : Node::Flag::Content,\n                                      externalNode->getName(), NodeParameters());\n    nodesToUpdate.insert(externalNode->getNode());\n    currentNode = node.data();\n  }\n\n  for (auto node : nodesToUpdate) {\n    updateNode(node);\n  }\n  if (currentNode) {\n    setCurrentNode(currentNode);\n  }\n}\n\nbool NotebookNodeExplorer::checkInvalidNode(Node *p_node) const {\n  if (!p_node) {\n    return true;\n  }\n\n  bool nodeExists = p_node->exists();\n  if (nodeExists) {\n    p_node->checkExists();\n    nodeExists = p_node->exists();\n  }\n\n  if (!nodeExists) {\n    MessageBoxHelper::notify(MessageBoxHelper::Warning,\n                             tr(\"Invalid node (%1).\").arg(p_node->getName()),\n                             tr(\"Please check if the node exists on the disk.\"),\n                             p_node->fetchAbsolutePath(), VNoteX::getInst().getMainWindow());\n    return true;\n  }\n\n  return false;\n}\n\nvoid NotebookNodeExplorer::addOpenWithMenu(QMenu *p_menu, bool p_master) {\n  auto subMenu = p_menu->addMenu(tr(\"Open &With\"));\n\n  const auto &types = FileTypeHelper::getInst().getAllFileTypes();\n\n  for (const auto &ft : types) {\n    if (ft.m_type == FileType::Others) {\n      continue;\n    }\n\n    QAction *act = subMenu->addAction(ft.m_displayName);\n    connect(act, &QAction::triggered, this, [this, act, p_master]() {\n      openSelectedNodesWithProgram(act->data().toString(), p_master);\n    });\n    act->setData(ft.m_typeName);\n  }\n\n  subMenu->addSeparator();\n\n  {\n    const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n    for (const auto &pro : sessionConfig.getExternalPrograms()) {\n      QAction *act = subMenu->addAction(pro.m_name);\n      connect(act, &QAction::triggered, this, [this, act, p_master]() {\n        openSelectedNodesWithProgram(act->data().toString(), p_master);\n      });\n      act->setData(pro.m_name);\n      WidgetUtils::addActionShortcutText(act, pro.m_shortcut);\n    }\n  }\n\n  subMenu->addSeparator();\n\n  {\n    auto defaultAct = subMenu->addAction(tr(\"System Default Program\"));\n    connect(defaultAct, &QAction::triggered, this,\n            [this, p_master]() { openSelectedNodesWithProgram(QString(), p_master); });\n    const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n    WidgetUtils::addActionShortcutText(defaultAct,\n                                       coreConfig.getShortcut(CoreConfig::OpenWithDefaultProgram));\n  }\n\n  subMenu->addAction(tr(\"Add External Program\"), this, []() {\n    const auto file = DocsUtils::getDocFile(QStringLiteral(\"external_programs.md\"));\n    if (!file.isEmpty()) {\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_readOnly = true;\n      emit VNoteX::getInst().openFileRequested(file, paras);\n    }\n  });\n}\n\n// Shortcut auxiliary, it can also be used to determine the browser.\nbool NotebookNodeExplorer::isActionFromMaster() const {\n  if (!isCombinedExploreMode()) {\n    return m_masterExplorer->hasFocus();\n  }\n  return true;\n}\n\nvoid NotebookNodeExplorer::setupShortcuts() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  // OpenWithDefaultProgram.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::OpenWithDefaultProgram),\n                                    this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { openSelectedNodesWithProgram(QString(), isActionFromMaster()); });\n    }\n  }\n\n  // Copy\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::Copy), this,\n                                                Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { copySelectedNodes(false, isActionFromMaster()); });\n    }\n  }\n\n  // Cut\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::Cut), this,\n                                                Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { copySelectedNodes(true, isActionFromMaster()); });\n    }\n  }\n\n  // Paste\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::Paste), this,\n                                                Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              &NotebookNodeExplorer::pasteNodesFromClipboard);\n    }\n  }\n\n  // Properties\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::Properties),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { openCurrentNodeProperties(isActionFromMaster()); });\n    }\n  }\n\n  const auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  for (const auto &pro : sessionConfig.getExternalPrograms()) {\n    auto shortcut =\n        WidgetUtils::createShortcut(pro.m_shortcut, this, Qt::WidgetWithChildrenShortcut);\n    const auto &name = pro.m_name;\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this, name]() {\n        bool isMaster = true;\n        if (!isCombinedExploreMode()) {\n          isMaster = m_masterExplorer->hasFocus();\n        }\n        openSelectedNodesWithProgram(name, isMaster);\n      });\n    }\n  }\n}\n\nvoid NotebookNodeExplorer::openSelectedNodesWithProgram(const QString &p_name, bool p_master) {\n  const bool closeBefore =\n      ConfigMgr::getInst().getWidgetConfig().getNodeExplorerCloseBeforeOpenWithEnabled();\n  const auto files = getSelectedNodesPath(p_master);\n  for (const auto &file : files) {\n    if (file.isEmpty()) {\n      continue;\n    }\n\n    if (closeBefore) {\n      auto event = QSharedPointer<Event>::create();\n      emit closeFileRequested(file, event);\n      if (!event->m_response.toBool()) {\n        continue;\n      }\n    }\n\n    if (p_name.isEmpty()) {\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(file));\n    } else {\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_fileType = p_name;\n      emit VNoteX::getInst().openFileRequested(file, paras);\n    }\n  }\n}\n\nvoid NotebookNodeExplorer::openCurrentNodeProperties(bool p_master) {\n  const int selectedSize =\n      p_master ? m_masterExplorer->selectedItems().size() : m_slaveExplorer->selectedItems().size();\n  if (selectedSize != 1) {\n    return;\n  }\n  auto node = p_master ? getCurrentMasterNode() : getCurrentSlaveNode();\n  if (checkInvalidNode(node)) {\n    return;\n  }\n  int ret = QDialog::Rejected;\n  if (node->hasContent()) {\n    NotePropertiesDialog dialog(node, VNoteX::getInst().getMainWindow());\n    ret = dialog.exec();\n  } else {\n    FolderPropertiesDialog dialog(node, VNoteX::getInst().getMainWindow());\n    ret = dialog.exec();\n  }\n  if (ret == QDialog::Accepted) {\n    setCurrentNode(node);\n  }\n}\n\nvoid NotebookNodeExplorer::loadMasterItemChildren(QTreeWidgetItem *p_item) const {\n  auto cnt = p_item->childCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto child = p_item->child(i);\n    auto data = getItemNodeData(child);\n    if (data.isNode() && !data.isLoaded()) {\n      loadMasterNode(child, data.getNode(), 1);\n    }\n  }\n}\n\nQString NotebookNodeExplorer::generateToolTip(const Node *p_node) {\n  Q_ASSERT(p_node->isLoaded());\n  const QString tip =\n      p_node->exists() ? p_node->getName() : (tr(\"[Invalid] %1\").arg(p_node->getName()));\n  return tip;\n}\n\nQByteArray NotebookNodeExplorer::saveState() const { return m_splitter->saveState(); }\n\nvoid NotebookNodeExplorer::restoreState(const QByteArray &p_data) {\n  m_splitter->restoreState(p_data);\n}\n\nbool NotebookNodeExplorer::belongsToMasterExplorer(const Node *p_node) const {\n  switch (m_exploreMode) {\n  case ExploreMode::Combined:\n    return true;\n\n  case ExploreMode::SeparateSingle:\n    Q_FALLTHROUGH();\n  case ExploreMode::SeparateDouble:\n    return p_node ? p_node->isContainer() : true;\n    break;\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  return true;\n}\n\nbool NotebookNodeExplorer::belongsToMasterExplorer(const ExternalNode *p_node) const {\n  if (isCombinedExploreMode()) {\n    return true;\n  } else {\n    return p_node ? p_node->isFolder() : false;\n  }\n}\n\nvoid NotebookNodeExplorer::updateSlaveExplorer() {\n  Q_ASSERT(!isCombinedExploreMode());\n  m_slaveExplorer->clear();\n\n  const Node *masterNode = nullptr;\n  auto item = m_masterExplorer->currentItem();\n  if (item) {\n    const int selectedSize = m_masterExplorer->selectedItems().size();\n    if (selectedSize > 1) {\n      return;\n    }\n\n    auto data = getItemNodeData(item);\n    if (data.isNode()) {\n      masterNode = data.getNode();\n      Q_ASSERT(masterNode->isContainer());\n    }\n  } else {\n    // Root node.\n    masterNode = m_notebook ? m_notebook->getRootNode().data() : nullptr;\n  }\n\n  if (!masterNode) {\n    return;\n  }\n\n  Q_ASSERT(masterNode->isContainer() && masterNode->isLoaded());\n\n  // External children.\n  if (m_externalFilesVisible) {\n    auto externalChildren = masterNode->fetchExternalChildren();\n    // TODO: Sort external children.\n    for (const auto &child : externalChildren) {\n      if (child->isFolder()) {\n        continue;\n      }\n\n      auto item = new QListWidgetItem(m_slaveExplorer);\n      fillSlaveItem(item, child);\n    }\n  }\n\n  auto children = masterNode->getChildren();\n  sortNodes(children);\n  for (const auto &child : children) {\n    if (child->isContainer()) {\n      continue;\n    }\n\n    Q_ASSERT(child->isLoaded());\n    auto item = new QListWidgetItem(m_slaveExplorer);\n    fillSlaveItem(item, child.data());\n  }\n}\n\nbool NotebookNodeExplorer::isCombinedExploreMode() const {\n  return m_exploreMode == ExploreMode::Combined;\n}\n\nNode *NotebookNodeExplorer::getSlaveExplorerMasterNode() const {\n  Q_ASSERT(!isCombinedExploreMode());\n  auto item = m_masterExplorer->currentItem();\n  if (item) {\n    const int selectedSize = m_masterExplorer->selectedItems().size();\n    if (selectedSize > 1) {\n      return nullptr;\n    }\n    return getCurrentMasterNode();\n  } else {\n    // Root node.\n    return (m_notebook ? m_notebook->getRootNode().data() : nullptr);\n  }\n}\n"
  },
  {
    "path": "src/widgets/notebooknodeexplorer.h",
    "content": "#ifndef NOTEBOOKNODEEXPLORER_H\n#define NOTEBOOKNODEEXPLORER_H\n\n#include <QHash>\n#include <QPair>\n#include <QScopedPointer>\n#include <QSharedPointer>\n#include <QStyledItemDelegate>\n#include <QWidget>\n\n#include \"clipboarddata.h\"\n#include \"global.h\"\n#include \"navigationmodewrapper.h\"\n#include \"qtreewidgetstatecache.h\"\n#include <notebook/nodevisual.h>\n\nclass QSplitter;\nclass QMenu;\nclass QPainter;\nclass QStyleOptionViewItem;\nclass QModelIndex;\n\nnamespace vnotex {\nclass Notebook;\nclass Node;\nclass TreeWidget;\nclass ListWidget;\nstruct FileOpenParameters;\nclass Event;\nclass ExternalNode;\n\n/*\n * 自定义委托类，用于绘制节点边框\n * 支持节点名称，背景颜色，边框颜色，节点名称颜色\n * 支持级联修改，包括背景颜色，边框颜色，节点名称颜色\n */\nclass NodeColorDelegate : public QStyledItemDelegate {\n  Q_OBJECT\npublic:\n  explicit NodeColorDelegate(QObject *parent = nullptr);\n\nprotected:\n  void paint(QPainter *painter, const QStyleOptionViewItem &option,\n             const QModelIndex &index) const override;\n};\n\nclass NotebookNodeExplorer : public QWidget {\n  Q_OBJECT\npublic:\n  // Used for a QTreeWidgetItem to hold the info of a node.\n  // Make it public since we need to hold it in a QTreeWidgetItem.\n  class NodeData {\n  public:\n    enum class NodeType { Node, ExternalNode, Invalid };\n\n    NodeData();\n\n    explicit NodeData(Node *p_node, bool p_loaded);\n\n    explicit NodeData(const QSharedPointer<ExternalNode> &p_externalNode);\n\n    NodeData(const NodeData &p_other);\n\n    ~NodeData();\n\n    NodeData &operator=(const NodeData &p_other);\n\n    bool isValid() const;\n\n    bool isNode() const;\n\n    bool isExternalNode() const;\n\n    NodeData::NodeType getType() const;\n\n    Node *getNode() const;\n\n    // Return shared ptr to avoid wild pointer after destruction of item.\n    const QSharedPointer<ExternalNode> &getExternalNode() const;\n\n    void clear();\n\n    bool matched(const Node *p_node) const;\n\n    bool matched(const QString &p_name) const;\n\n    bool isLoaded() const;\n\n  private:\n    NodeType m_type = NodeType::Invalid;\n\n    Node *m_node = nullptr;\n\n    QSharedPointer<ExternalNode> m_externalNode;\n\n    bool m_loaded = false;\n  };\n\n  enum ExploreMode { Combined = 0, SeparateSingle, SeparateDouble, ExploreModeMax };\n\n  explicit NotebookNodeExplorer(QWidget *p_parent = nullptr);\n\n  void setNotebook(const QSharedPointer<Notebook> &p_notebook);\n\n  void setCurrentNode(Node *p_node);\n\n  void reload();\n\n  void setViewOrder(int p_order);\n\n  void setExploreMode(int p_mode);\n\n  void setExternalFilesVisible(bool p_visible);\n\n  void setAutoImportExternalFiles(bool p_enabled);\n\n  Node *currentExploredFolderNode() const;\n\n  Node *currentExploredNode() const;\n\n  QByteArray saveState() const;\n\n  void restoreState(const QByteArray &p_data);\n\n  static QString generateToolTip(const Node *p_node);\n\nsignals:\n  void nodeActivated(Node *p_node, const QSharedPointer<FileOpenParameters> &p_paras);\n\n  void fileActivated(const QString &p_path, const QSharedPointer<FileOpenParameters> &p_paras);\n\n  // @m_response of @p_event: true to continue the move, false to cancel the move.\n  void nodeAboutToMove(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  // @m_response of @p_event: true to continue the removal, false to cancel the removal.\n  void nodeAboutToRemove(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  void nodeAboutToReload(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  // @p_filePath is either an external file or a node.\n  void closeFileRequested(const QString &p_filePath, const QSharedPointer<Event> &p_event);\n\nprivate:\n  enum Column { Name = 0 };\n\n  enum class Action {\n    NewNote,\n    NewFolder,\n    Properties,\n    OpenLocation,\n    CopyPath,\n    Copy,\n    Cut,\n    Paste,\n    Delete,\n    RemoveFromConfig,\n    Sort,\n    Reload,\n    ReloadIndex,\n    ImportToConfig,\n    Open,\n    Edit,\n    Read,\n    ExpandAll,\n    PinToQuickAccess,\n    Tag,\n    VisualSettings,\n    SetBackgroundColor,\n    SetBorderColor,\n    SetNameColor,\n    SetCascadeBackgroundColor,\n    SetCascadeBorderColor,\n    ClearCascadeColors,\n    ClearColors\n  };\n\n  struct CacheData {\n    void clear();\n\n    QSharedPointer<QTreeWidgetStateCache<Node *>> m_masterStateCache;\n\n    QString m_currentSlaveName;\n  };\n\n  void setupUI();\n\n  bool isActionFromMaster() const;\n\n  void setupShortcuts();\n\n  void setupMasterExplorer(QWidget *p_parent = nullptr);\n\n  void setupSlaveExplorer();\n\n  void generateMasterNodeTree();\n\n  void loadRootNode(const Node *p_node) const;\n\n  void loadMasterNode(QTreeWidgetItem *p_item, Node *p_node, int p_level) const;\n\n  void loadMasterNodeChildren(QTreeWidgetItem *p_item, Node *p_node, int p_level) const;\n\n  void loadMasterItemChildren(QTreeWidgetItem *p_item) const;\n\n  void loadMasterExternalNode(QTreeWidgetItem *p_item,\n                              const QSharedPointer<ExternalNode> &p_node) const;\n\n  void fillMasterItem(QTreeWidgetItem *p_item, Node *p_node, bool p_loaded) const;\n\n  void fillMasterItem(QTreeWidgetItem *p_item, const QSharedPointer<ExternalNode> &p_node) const;\n\n  void fillSlaveItem(QListWidgetItem *p_item, Node *p_node) const;\n\n  void fillSlaveItem(QListWidgetItem *p_item, const QSharedPointer<ExternalNode> &p_node) const;\n\n  void applyNodeColors(QTreeWidgetItem *p_item, Node *p_node) const;\n\n  void applyNodeColors(QListWidgetItem *p_item, Node *p_node) const;\n\n  void updateCurrentNodeVisualDirectly(Node *p_node, const NodeVisual &p_visual);\n\n  void setCascadeColorRecursively(Node *p_node, const QString &p_backgroundColor,\n                                  const QString &p_borderColor, const QString &p_nameColor);\n\n  QTreeWidgetItem *findCurrentTreeWidgetItem(Node *p_node) const;\n\n  QListWidgetItem *findCurrentListWidgetItem(Node *p_node) const;\n\n  const QIcon &getIcon(const Node *p_node) const;\n\n  const QIcon &getIcon(const ExternalNode *p_node) const;\n\n  void initNodeIcons() const;\n\n  QTreeWidgetItem *findMasterNode(const Node *p_node) const;\n\n  QTreeWidgetItem *findMasterNode(QTreeWidgetItem *p_item, const Node *p_node) const;\n\n  QTreeWidgetItem *findMasterNodeInDirectChildren(QTreeWidgetItem *p_item,\n                                                  const Node *p_node) const;\n\n  QTreeWidgetItem *findMasterNodeInTopLevelItems(QTreeWidget *p_tree, const Node *p_node) const;\n\n  QListWidgetItem *findSlaveNode(const Node *p_node) const;\n\n  void cacheState(bool p_saveCurrent);\n\n  // Get cache data of current notebook.\n  CacheData &getCache() const;\n\n  void clearCache(const Notebook *p_notebook);\n\n  void createMasterContextMenuOnRoot(QMenu *p_menu);\n\n  void createContextMenuOnNode(QMenu *p_menu, const Node *p_node, bool p_master);\n\n  void createContextMenuOnExternalNode(QMenu *p_menu, const ExternalNode *p_node, bool p_master);\n\n  void createSlaveContextMenuOnMasterNode(QMenu *p_menu);\n\n  // Factory function to create action.\n  QAction *createAction(Action p_act, QObject *p_parent, bool p_master);\n\n  QAction *createAndAddAction(Action p_act, QMenu *p_menu, bool p_master = true);\n\n  void copySelectedNodes(bool p_move, bool p_master);\n\n  void pasteNodesFromClipboard();\n\n  QPair<QVector<Node *>, QVector<QSharedPointer<ExternalNode>>>\n  getMasterSelectedNodesAndExternalNodes() const;\n\n  QPair<QVector<Node *>, QVector<QSharedPointer<ExternalNode>>>\n  getSlaveSelectedNodesAndExternalNodes() const;\n\n  void removeSelectedNodes(bool p_master);\n\n  void removeSelectedNodesFromConfig(bool p_master);\n\n  QVector<Node *> confirmSelectedNodes(const QString &p_title, const QString &p_text,\n                                       const QString &p_info, bool p_master) const;\n\n  static QSharedPointer<ClipboardData> tryFetchClipboardData();\n\n  bool isPasteOnNodeAvailable(const Node *p_node) const;\n\n  void setMasterNodeExpanded(const Node *p_node, bool p_expanded);\n\n  // Select both master and slave nodes.\n  void selectNodes(const QVector<const Node *> &p_nodes);\n\n  void removeNodes(QVector<Node *> p_nodes, bool p_configOnly);\n\n  void filterAwayChildrenNodes(QVector<Node *> &p_nodes);\n\n  void updateAndExpandNode(Node *p_node);\n\n  // Check if all selected items are the same type for operations.\n  bool isMasterAllSelectedItemsSameType() const;\n\n  bool isSlaveAllSelectedItemsSameType() const;\n\n  void focusNormalNode();\n\n  void sortNodes(QVector<QSharedPointer<Node>> &p_nodes) const;\n\n  // [p_start, p_end).\n  void sortNodes(QVector<QSharedPointer<Node>> &p_nodes, int p_start, int p_end,\n                 ViewOrder p_viewOrder) const;\n\n  // Sort nodes in config file.\n  void manualSort(bool p_master);\n\n  QSharedPointer<Node> importToIndex(QSharedPointer<ExternalNode> p_node);\n\n  void importToIndex(const QVector<QSharedPointer<ExternalNode>> &p_nodes);\n\n  // Check whether @p_node is a valid node. Will notify user.\n  // Return true if it is invalid.\n  bool checkInvalidNode(Node *p_node) const;\n\n  void addOpenWithMenu(QMenu *p_menu, bool p_master);\n\n  QStringList getSelectedNodesPath(bool p_master) const;\n\n  void openSelectedNodesWithProgram(const QString &p_name, bool p_master);\n\n  void openCurrentNodeProperties(bool p_master);\n\n  bool belongsToMasterExplorer(const Node *p_node) const;\n\n  bool belongsToMasterExplorer(const ExternalNode *p_node) const;\n\n  void updateSlaveExplorer();\n\n  Node *getCurrentMasterNode() const;\n\n  Node *getCurrentSlaveNode() const;\n\n  NodeData getCurrentMasterNodeData() const;\n\n  NodeData getCurrentSlaveNodeData() const;\n\n  Node *getSlaveExplorerMasterNode() const;\n\n  bool isCombinedExploreMode() const;\n\n  // Update the tree of @p_node if there is any. Or update the node itself if it is in slave\n  // explorer. If @p_node is null, update the whole tree.\n  void updateNode(Node *p_node);\n\n  void setCurrentMasterNode(Node *p_node);\n\n  void setCurrentSlaveNode(const Node *p_node);\n\n  void setCurrentSlaveNode(const QString &p_name);\n\n  void activateItemNode(const NodeData &p_data);\n\n  static NotebookNodeExplorer::NodeData getItemNodeData(const QTreeWidgetItem *p_item);\n\n  static NotebookNodeExplorer::NodeData getItemNodeData(const QListWidgetItem *p_item);\n\n  static void setItemNodeData(QTreeWidgetItem *p_item, const NodeData &p_data);\n\n  static void setItemNodeData(QListWidgetItem *p_item, const NodeData &p_data);\n\n  QSplitter *m_splitter = nullptr;\n\n  TreeWidget *m_masterExplorer = nullptr;\n\n  ListWidget *m_slaveExplorer = nullptr;\n\n  QSharedPointer<Notebook> m_notebook;\n\n  QHash<const Notebook *, CacheData> m_cache;\n\n  QScopedPointer<NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>> m_masterNavigationWrapper;\n\n  QScopedPointer<NavigationModeWrapper<QListWidget, QListWidgetItem>> m_slaveNavigationWrapper;\n\n  ViewOrder m_viewOrder = ViewOrder::OrderedByConfiguration;\n\n  ExploreMode m_exploreMode = ExploreMode::Combined;\n\n  bool m_externalFilesVisible = true;\n\n  bool m_autoImportExternalFiles = true;\n\n  enum NodeIcon {\n    FolderNode = 0,\n    FileNode,\n    InvalidFolderNode,\n    InvalidFileNode,\n    ExternalFolderNode,\n    ExternalFileNode,\n    MaxIcons\n  };\n\n  static QIcon s_nodeIcons[NodeIcon::MaxIcons];\n};\n} // namespace vnotex\n\nQ_DECLARE_METATYPE(vnotex::NotebookNodeExplorer::NodeData);\n\n#endif // NOTEBOOKNODEEXPLORER_H\n"
  },
  {
    "path": "src/widgets/notebookselector.cpp",
    "content": "#include \"notebookselector.h\"\n\n#include <QAbstractItemView>\n#include <QKeyEvent>\n#include <QLabel>\n#include <QListView>\n#include <QScrollBar>\n#include <QStyledItemDelegate>\n\n#include <core/notebookmgr.h>\n#include <core/vnotex.h>\n#include <notebook/notebook.h>\n#include <utils/iconutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nNotebookSelector::NotebookSelector(QWidget *p_parent)\n    : ComboBox(p_parent), NavigationMode(NavigationMode::Type::StagedDoubleKeys, this) {\n  auto itemDelegate = new QStyledItemDelegate(this);\n  setItemDelegate(itemDelegate);\n\n  view()->installEventFilter(this);\n\n  setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);\n}\n\nvoid NotebookSelector::loadNotebooks() {\n  clear();\n\n  auto &notebookMgr = VNoteX::getInst().getNotebookMgr();\n  auto notebooks = notebookMgr.getNotebooks();\n  sortNotebooks(notebooks);\n\n  for (auto &nb : notebooks) {\n    addNotebookItem(nb);\n  }\n\n  updateGeometry();\n\n  m_notebooksInitialized = true;\n}\n\nvoid NotebookSelector::sortNotebooks(QVector<QSharedPointer<Notebook>> &p_notebooks) const {\n  bool reversed = false;\n  switch (m_viewOrder) {\n  case ViewOrder::OrderedByNameReversed:\n    reversed = true;\n    Q_FALLTHROUGH();\n  case ViewOrder::OrderedByName:\n    std::sort(p_notebooks.begin(), p_notebooks.end(),\n              [reversed](const QSharedPointer<Notebook> &p_a, const QSharedPointer<Notebook> &p_b) {\n                if (reversed) {\n                  return p_b->getName().toLower() < p_a->getName().toLower();\n                } else {\n                  return p_a->getName().toLower() < p_b->getName().toLower();\n                }\n              });\n    break;\n\n  case ViewOrder::OrderedByCreatedTimeReversed:\n    reversed = true;\n    Q_FALLTHROUGH();\n  case ViewOrder::OrderedByCreatedTime:\n    std::sort(p_notebooks.begin(), p_notebooks.end(),\n              [reversed](const QSharedPointer<Notebook> &p_a, const QSharedPointer<Notebook> &p_b) {\n                if (reversed) {\n                  return p_b->getCreatedTimeUtc() < p_a->getCreatedTimeUtc();\n                } else {\n                  return p_a->getCreatedTimeUtc() < p_b->getCreatedTimeUtc();\n                }\n              });\n    break;\n\n  default:\n    break;\n  }\n}\n\nvoid NotebookSelector::reloadNotebook(const Notebook *p_notebook) {\n  Q_ASSERT(p_notebook);\n  int idx = findNotebook(p_notebook->getId());\n  Q_ASSERT(idx != -1);\n\n  setItemIcon(idx, generateItemIcon(p_notebook));\n  setItemText(idx, p_notebook->getName());\n  setItemToolTip(idx, generateItemToolTip(p_notebook));\n\n  int curIdx = currentIndex();\n  if (curIdx == idx) {\n    setToolTip(getItemToolTip(idx));\n  }\n}\n\nvoid NotebookSelector::addNotebookItem(const QSharedPointer<Notebook> &p_notebook) {\n  int idx = count();\n  addItem(generateItemIcon(p_notebook.data()), p_notebook->getName(), p_notebook->getId());\n  setItemToolTip(idx, generateItemToolTip(p_notebook.data()));\n}\n\nvoid NotebookSelector::fetchIconColor(const QString &p_name, QString &p_fg, QString &p_bg) {\n  static QVector<QString> backgroundColors = {\n      \"#80558c\", \"#df7861\", \"#f65a83\", \"#3b9ae1\", \"#277bc0\", \"#42855b\", \"#a62349\", \"#a66cff\",\n      \"#9c9efe\", \"#54bab9\", \"#79b4b7\", \"#57cc99\", \"#916bbf\", \"#5c7aea\", \"#6867ac\",\n  };\n\n  int hashVal = 0;\n  for (int i = 0; i < p_name.size(); ++i) {\n    hashVal += p_name[i].unicode();\n  }\n\n  p_fg = \"#ffffff\";\n  p_bg = backgroundColors[hashVal % backgroundColors.size()];\n}\n\nQIcon NotebookSelector::generateItemIcon(const Notebook *p_notebook) {\n  if (!p_notebook->getIcon().isNull()) {\n    return p_notebook->getIcon();\n  }\n\n  QString fg, bg;\n  fetchIconColor(p_notebook->getName(), fg, bg);\n  return IconUtils::drawTextRectIcon(p_notebook->getName().at(0).toUpper(), fg, bg, \"\", 50, 58);\n}\n\nQString NotebookSelector::generateItemToolTip(const Notebook *p_notebook) {\n  return tr(\"Notebook: %1\\nRoot folder: %2\\nDescription: %3\")\n      .arg(p_notebook->getName(), p_notebook->getRootFolderAbsolutePath(),\n           p_notebook->getDescription());\n}\n\nQString NotebookSelector::getItemToolTip(int p_idx) const {\n  return itemData(p_idx, Qt::ToolTipRole).toString();\n}\n\nvoid NotebookSelector::setItemToolTip(int p_idx, const QString &p_tooltip) {\n  setItemData(p_idx, p_tooltip, Qt::ToolTipRole);\n}\n\nvoid NotebookSelector::setCurrentNotebook(ID p_id) {\n  int idx = findNotebook(p_id);\n  setCurrentIndex(idx);\n  setToolTip(getItemToolTip(idx));\n}\n\nint NotebookSelector::findNotebook(ID p_id) const { return findData(p_id); }\n\nQVector<void *> NotebookSelector::getVisibleNavigationItems() {\n  QVector<void *> items;\n  auto listView = dynamic_cast<QListView *>(view());\n  if (listView) {\n    m_navigationIndexes = WidgetUtils::getVisibleIndexes(listView);\n    for (auto &index : m_navigationIndexes) {\n      items.push_back(&index);\n    }\n  }\n  return items;\n}\n\nvoid NotebookSelector::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) {\n  if (p_idx == -1) {\n    // Major.\n    p_label->move(rect().topRight() - QPoint(p_label->width() + 2, 2));\n  } else {\n    // Second.\n    // Reparent it to the list view.\n    auto listView = view();\n    p_label->setParent(listView);\n\n    auto index = *static_cast<QModelIndex *>(p_item);\n\n    int extraWidth = p_label->width() + 2;\n    auto vbar = listView->verticalScrollBar();\n    if (vbar && vbar->minimum() != vbar->maximum()) {\n      extraWidth += vbar->width();\n    }\n\n    const auto rt = listView->visualRect(index);\n    const int x = rt.x() + view()->width() - extraWidth;\n    const int y = rt.y();\n    p_label->move(x, y);\n  }\n}\n\nvoid NotebookSelector::handleTargetHit(void *p_item) {\n  if (!p_item) {\n    setFocus();\n    showPopup();\n  } else {\n    hidePopup();\n    auto index = *static_cast<QModelIndex *>(p_item);\n    setCurrentIndex(index.row());\n    emit activated(index.row());\n  }\n}\n\nbool NotebookSelector::eventFilter(QObject *p_obj, QEvent *p_event) {\n  if (p_event->type() == QEvent::KeyPress && p_obj == view()) {\n    if (WidgetUtils::processKeyEventLikeVi(view(), static_cast<QKeyEvent *>(p_event))) {\n      return true;\n    }\n  }\n  return ComboBox::eventFilter(p_obj, p_event);\n}\n\nvoid NotebookSelector::clearNavigation() {\n  m_navigationIndexes.clear();\n\n  NavigationMode::clearNavigation();\n}\n\nvoid NotebookSelector::mousePressEvent(QMouseEvent *p_event) {\n  // Only when notebooks are loaded and there is no notebook, we could prompt for new notebook.\n  if (m_notebooksInitialized && count() == 0) {\n    emit newNotebookRequested();\n    return;\n  }\n\n  ComboBox::mousePressEvent(p_event);\n}\n\nvoid NotebookSelector::setViewOrder(int p_order) {\n  if (m_viewOrder == p_order) {\n    return;\n  }\n\n  if (p_order >= 0 && p_order < ViewOrder::ViewOrderMax) {\n    m_viewOrder = static_cast<ViewOrder>(p_order);\n    loadNotebooks();\n  }\n}\n"
  },
  {
    "path": "src/widgets/notebookselector.h",
    "content": "#ifndef NOTEBOOKSELECTOR_H\n#define NOTEBOOKSELECTOR_H\n\n#include <QModelIndex>\n\n#include \"combobox.h\"\n#include \"global.h\"\n#include \"navigationmode.h\"\n#include \"notebooknodeexplorer.h\"\n\nnamespace vnotex {\nclass Notebook;\n\nclass NotebookSelector : public ComboBox, public NavigationMode {\n  Q_OBJECT\npublic:\n  explicit NotebookSelector(QWidget *p_parent = nullptr);\n\n  void loadNotebooks();\n\n  void reloadNotebook(const Notebook *p_notebook);\n\n  void setCurrentNotebook(ID p_id);\n\n  void setViewOrder(int p_order);\n\nsignals:\n  void newNotebookRequested();\n\n  // NavigationMode.\nprotected:\n  QVector<void *> getVisibleNavigationItems() Q_DECL_OVERRIDE;\n\n  void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE;\n\n  void handleTargetHit(void *p_item) Q_DECL_OVERRIDE;\n\n  void clearNavigation() Q_DECL_OVERRIDE;\n\nprotected:\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\n\n  void mousePressEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void addNotebookItem(const QSharedPointer<Notebook> &p_notebook);\n\n  QIcon generateItemIcon(const Notebook *p_notebook);\n\n  QString generateItemToolTip(const Notebook *p_notebook);\n\n  QString getItemToolTip(int p_idx) const;\n  void setItemToolTip(int p_idx, const QString &p_tooltip);\n\n  int findNotebook(ID p_id) const;\n\n  void sortNotebooks(QVector<QSharedPointer<Notebook>> &p_notebooks) const;\n\n  static void fetchIconColor(const QString &p_name, QString &p_fg, QString &p_bg);\n\n  bool m_notebooksInitialized = false;\n\n  QVector<QModelIndex> m_navigationIndexes;\n\n  ViewOrder m_viewOrder = ViewOrder::OrderedByConfiguration;\n};\n} // namespace vnotex\n\n#endif // NOTEBOOKSELECTOR_H\n"
  },
  {
    "path": "src/widgets/outlinepopup.cpp",
    "content": "#include \"outlinepopup.h\"\n\n#include <QToolButton>\n\n#include \"outlineviewer.h\"\n#include <core/global.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nOutlinePopup::OutlinePopup(QToolButton *p_btn, QWidget *p_parent) : ButtonPopup(p_btn, p_parent) {\n  setupUI();\n\n  connect(this, &QMenu::aboutToShow, this, [this]() { m_viewer->setFocus(); });\n}\n\nvoid OutlinePopup::setupUI() {\n  m_viewer = new OutlineViewer(tr(\"Outline\"), this);\n  m_viewer->setMinimumSize(320, 384);\n  addWidget(m_viewer);\n}\n\nvoid OutlinePopup::setOutlineProvider(const QSharedPointer<OutlineProvider> &p_provider) {\n  m_viewer->setOutlineProvider(p_provider);\n}\n\nvoid OutlinePopup::showEvent(QShowEvent *p_event) {\n  ButtonPopup::showEvent(p_event);\n\n  // Move it to be right-aligned.\n  if (m_button->isVisible()) {\n    const auto p = pos();\n    const auto btnRect = m_button->geometry();\n    move(p.x() + btnRect.width() - geometry().width(), p.y());\n  }\n}\n"
  },
  {
    "path": "src/widgets/outlinepopup.h",
    "content": "#ifndef OUTLINEPOPUP_H\n#define OUTLINEPOPUP_H\n\n#include \"buttonpopup.h\"\n\n#include <QSharedPointer>\n\nclass QToolButton;\n\nnamespace vnotex {\nclass OutlineProvider;\nclass OutlineViewer;\n\nclass OutlinePopup : public ButtonPopup {\n  Q_OBJECT\npublic:\n  OutlinePopup(QToolButton *p_btn, QWidget *p_parent = nullptr);\n\n  void setOutlineProvider(const QSharedPointer<OutlineProvider> &p_provider);\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  // Managed by QObject.\n  OutlineViewer *m_viewer = nullptr;\n};\n} // namespace vnotex\n\n#endif // OUTLINEPOPUP_H\n"
  },
  {
    "path": "src/widgets/outlineprovider.cpp",
    "content": "#include \"outlineprovider.h\"\n\nusing namespace vnotex;\n\nvoid Outline::clear() { m_headings.clear(); }\n\nbool Outline::operator==(const Outline &p_a) const { return m_headings == p_a.m_headings; }\n\nbool Outline::isEmpty() const { return m_headings.isEmpty(); }\n\nOutline::Heading::Heading(const QString &p_name, int p_level) : m_name(p_name), m_level(p_level) {}\n\nbool Outline::Heading::operator==(const Outline::Heading &p_a) const {\n  return m_level == p_a.m_level && m_name == p_a.m_name;\n}\n\nOutlineProvider::OutlineProvider(QObject *p_parent) : QObject(p_parent) {}\n\nOutlineProvider::~OutlineProvider() {}\n\nvoid OutlineProvider::setOutline(const QSharedPointer<Outline> &p_outline) {\n  m_outline = p_outline;\n  m_currentHeadingIndex = -1;\n  emit outlineChanged();\n}\n\nconst QSharedPointer<Outline> &OutlineProvider::getOutline() const { return m_outline; }\n\nint OutlineProvider::getCurrentHeadingIndex() const { return m_currentHeadingIndex; }\n\nvoid OutlineProvider::setCurrentHeadingIndex(int p_idx) {\n  if (m_currentHeadingIndex == p_idx) {\n    return;\n  }\n\n  m_currentHeadingIndex = p_idx;\n  emit currentHeadingChanged();\n}\n\nvoid OutlineProvider::increaseSectionNumber(SectionNumber &p_sectionNumber, int p_level,\n                                            int p_baseLevel) {\n  Q_ASSERT(p_level >= 1 && p_level < p_sectionNumber.size());\n  if (p_level < p_baseLevel) {\n    p_sectionNumber.fill(0);\n    return;\n  }\n\n  ++p_sectionNumber[p_level];\n  for (int i = p_level + 1; i < p_sectionNumber.size(); ++i) {\n    p_sectionNumber[i] = 0;\n  }\n}\n\nQString OutlineProvider::joinSectionNumber(const SectionNumber &p_sectionNumber, bool p_endingDot) {\n  QString res;\n  for (auto sec : p_sectionNumber) {\n    if (sec != 0) {\n      if (res.isEmpty()) {\n        res = QString::number(sec);\n      } else {\n        res += '.' + QString::number(sec);\n      }\n    } else if (res.isEmpty()) {\n      continue;\n    } else {\n      break;\n    }\n  }\n\n  if (p_endingDot && !res.isEmpty()) {\n    return res + '.';\n  } else {\n    return res;\n  }\n}\n"
  },
  {
    "path": "src/widgets/outlineprovider.h",
    "content": "#ifndef OUTLINEPROVIDER_H\n#define OUTLINEPROVIDER_H\n\n#include <QObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#include <limits.h>\n\nnamespace vnotex {\ntypedef QVector<int> SectionNumber;\n\n// Toc content.\nstruct Outline {\n  struct Heading {\n    Heading() = default;\n\n    Heading(const QString &p_name, int p_level);\n\n    bool operator==(const Heading &p_a) const;\n\n    QString m_name;\n\n    // Heading level, 1-based.\n    int m_level = -1;\n  };\n\n  void clear();\n\n  bool operator==(const Outline &p_a) const;\n\n  bool isEmpty() const;\n\n  QVector<Heading> m_headings;\n\n  // 1-based.\n  // -1 to disable section number by force.\n  int m_sectionNumberBaseLevel = 1;\n\n  bool m_sectionNumberEndingDot = true;\n};\n\n// Used to hold toc-related data of one ViewWindow.\nclass OutlineProvider : public QObject {\n  Q_OBJECT\npublic:\n  explicit OutlineProvider(QObject *p_parent = nullptr);\n\n  virtual ~OutlineProvider();\n\n  // Get the outline.\n  const QSharedPointer<Outline> &getOutline() const;\n  void setOutline(const QSharedPointer<Outline> &p_outline);\n\n  // Get current heading index in outline.\n  int getCurrentHeadingIndex() const;\n  void setCurrentHeadingIndex(int p_idx);\n\n  template <class T>\n  static void makePerfectHeadings(const QVector<T> &p_headings, QVector<T> &p_perfectHeadings);\n\n  static void increaseSectionNumber(SectionNumber &p_sectionNumber, int p_level, int p_baseLevel);\n\n  static QString joinSectionNumber(const SectionNumber &p_sectionNumber, bool p_endingDot);\n\nsignals:\n  void outlineChanged();\n\n  void currentHeadingChanged();\n\n  void headingClicked(int p_idx);\n\nprivate:\n  QSharedPointer<Outline> m_outline;\n\n  int m_currentHeadingIndex = -1;\n};\n\ntemplate <class T>\nvoid OutlineProvider::makePerfectHeadings(const QVector<T> &p_headings,\n                                          QVector<T> &p_perfectHeadings) {\n  p_perfectHeadings.clear();\n  if (p_headings.isEmpty()) {\n    return;\n  }\n\n  int baseLevel = INT_MAX;\n  for (const auto &heading : p_headings) {\n    if (heading.m_level < baseLevel) {\n      baseLevel = heading.m_level;\n    }\n  }\n\n  p_perfectHeadings.reserve(p_headings.size());\n  int curLevel = baseLevel - 1;\n  for (const auto &heading : p_headings) {\n    while (heading.m_level > curLevel + 1) {\n      curLevel += 1;\n\n      // Insert empty level which is an invalid header.\n      p_perfectHeadings.append(T(tr(\"[EMPTY]\"), curLevel));\n    }\n\n    p_perfectHeadings.append(heading);\n    curLevel = heading.m_level;\n  }\n}\n} // namespace vnotex\n\n#endif // OUTLINEPROVIDER_H\n"
  },
  {
    "path": "src/widgets/outlineviewer.cpp",
    "content": "#include \"outlineviewer.h\"\n\n#include <QDebug>\n#include <QHBoxLayout>\n#include <QShowEvent>\n#include <QTimer>\n#include <QToolButton>\n#include <QToolTip>\n#include <QTreeWidgetItem>\n#include <QVBoxLayout>\n\n#include <utils/widgetutils.h>\n\n#include \"titlebar.h\"\n#include \"treewidget.h\"\n\n#include \"navigationmodemgr.h\"\n#include <core/configmgr.h>\n#include <core/widgetconfig.h>\n\nusing namespace vnotex;\n\n// Use static expansion when the level is 6.\n#define STATIC_EXPANDED_LEVEL 6\n\nOutlineViewer::OutlineViewer(const QString &p_title, QWidget *p_parent) : QFrame(p_parent) {\n  setupUI(p_title);\n\n  m_autoExpandedLevel = ConfigMgr::getInst().getWidgetConfig().getOutlineAutoExpandedLevel();\n\n  m_expandTimer = new QTimer(this);\n  m_expandTimer->setSingleShot(true);\n  m_expandTimer->setInterval(1000);\n  connect(m_expandTimer, &QTimer::timeout, this, [this]() {\n    // Auto adjust items after current heading change.\n    if (m_autoExpandedLevel == STATIC_EXPANDED_LEVEL) {\n      return;\n    }\n\n    expandTree(m_autoExpandedLevel);\n\n    auto curItem = m_tree->currentItem();\n    if (curItem) {\n      m_tree->scrollToItem(curItem);\n    }\n  });\n}\n\nvoid OutlineViewer::setupUI(const QString &p_title) {\n  auto mainLayout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(mainLayout);\n\n  {\n    auto titleBar = setupTitleBar(p_title, this);\n    mainLayout->addWidget(titleBar);\n  }\n\n  m_tree = new TreeWidget(TreeWidget::Flag::None, this);\n  TreeWidget::setupSingleColumnHeaderlessTree(m_tree, false, false);\n  m_tree->setSelectionMode(QAbstractItemView::SingleSelection);\n  TreeWidget::showHorizontalScrollbar(m_tree);\n  mainLayout->addWidget(m_tree);\n  connect(m_tree, &QTreeWidget::currentItemChanged, this,\n          [this](QTreeWidgetItem *p_cur, QTreeWidgetItem *p_pre) {\n            Q_UNUSED(p_pre);\n            activateItem(p_cur);\n          });\n  connect(m_tree, &QTreeWidget::itemClicked, this, [this](QTreeWidgetItem *p_item, int p_col) {\n    Q_UNUSED(p_col);\n    // Will duplicate the signal. That's fine.\n    activateItem(p_item, true);\n  });\n\n  setFocusProxy(m_tree);\n}\n\nNavigationModeWrapper<QTreeWidget, QTreeWidgetItem> *OutlineViewer::getNavigationModeWrapper() {\n  if (!m_navigationWrapper) {\n    m_navigationWrapper.reset(new NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>(m_tree));\n  }\n  return m_navigationWrapper.data();\n}\n\nTitleBar *OutlineViewer::setupTitleBar(const QString &p_title, QWidget *p_parent) {\n  auto titleBar = new TitleBar(p_title, false, TitleBar::Action::Menu, p_parent);\n  titleBar->setActionButtonsAlwaysShown(true);\n\n  auto decreaseBtn = titleBar->addActionButton(QStringLiteral(\"decrease_outline_level.svg\"),\n                                               tr(\"Decrease Expansion Level\"));\n  connect(decreaseBtn, &QToolButton::clicked, this, [this]() {\n    auto &config = ConfigMgr::getInst().getWidgetConfig();\n    m_autoExpandedLevel = config.getOutlineAutoExpandedLevel() - 1;\n    if (m_autoExpandedLevel < 1) {\n      m_autoExpandedLevel = 1;\n    } else {\n      config.setOutlineAutoExpandedLevel(m_autoExpandedLevel);\n      expandTree(m_autoExpandedLevel);\n    }\n\n    showLevel();\n  });\n\n  auto increaseBtn = titleBar->addActionButton(QStringLiteral(\"increase_outline_level.svg\"),\n                                               tr(\"Increase Expansion Level\"));\n  connect(increaseBtn, &QToolButton::clicked, this, [this]() {\n    auto &config = ConfigMgr::getInst().getWidgetConfig();\n    m_autoExpandedLevel = config.getOutlineAutoExpandedLevel() + 1;\n    if (m_autoExpandedLevel > 6) {\n      m_autoExpandedLevel = 6;\n    } else {\n      config.setOutlineAutoExpandedLevel(m_autoExpandedLevel);\n      expandTree(m_autoExpandedLevel);\n    }\n\n    showLevel();\n  });\n\n  {\n    auto act = titleBar->addMenuAction(tr(\"Section Number\"), titleBar, [this](bool p_checked) {\n      ConfigMgr::getInst().getWidgetConfig().setOutlineSectionNumberEnabled(p_checked);\n      updateTree(true);\n    });\n    act->setCheckable(true);\n    act->setChecked(ConfigMgr::getInst().getWidgetConfig().getOutlineSectionNumberEnabled());\n  }\n\n  return titleBar;\n}\n\nvoid OutlineViewer::setOutlineProvider(const QSharedPointer<OutlineProvider> &p_provider) {\n  if (m_provider == p_provider) {\n    return;\n  }\n\n  if (m_provider) {\n    disconnect(m_provider.data(), 0, this, 0);\n    disconnect(this, 0, m_provider.data(), 0);\n  }\n\n  m_provider = p_provider;\n  if (m_provider) {\n    connect(m_provider.data(), &OutlineProvider::outlineChanged, this, [this]() {\n      if (isVisible()) {\n        updateOutline(m_provider->getOutline());\n      }\n    });\n    connect(m_provider.data(), &OutlineProvider::currentHeadingChanged, this,\n            [this]() { updateCurrentHeading(m_provider->getCurrentHeadingIndex()); });\n  }\n\n  if (isVisible()) {\n    updateTree();\n  }\n}\n\nvoid OutlineViewer::showEvent(QShowEvent *p_event) {\n  QFrame::showEvent(p_event);\n\n  updateTree();\n}\n\nvoid OutlineViewer::updateTree(bool p_force) {\n  if (p_force) {\n    m_outline.clear();\n  }\n\n  if (m_provider) {\n    updateOutline(m_provider->getOutline());\n    updateCurrentHeading(m_provider->getCurrentHeadingIndex());\n  } else {\n    updateOutline(nullptr);\n    updateCurrentHeading(-1);\n  }\n}\n\nvoid OutlineViewer::updateOutline(const QSharedPointer<Outline> &p_outline) {\n  if (!p_outline) {\n    if (m_outline.isEmpty()) {\n      return;\n    }\n    m_outline.clear();\n  } else {\n    if (m_outline == *p_outline) {\n      return;\n    }\n    m_outline = *p_outline;\n  }\n\n  m_muted = true;\n  updateTreeToOutline(m_tree, m_outline);\n\n  expandTree(m_autoExpandedLevel);\n  m_muted = false;\n}\n\nvoid OutlineViewer::updateCurrentHeading(int p_idx) {\n  if (m_currentHeadingIndex == p_idx) {\n    return;\n  }\n\n  m_currentHeadingIndex = p_idx;\n  if (m_currentHeadingIndex >= m_outline.m_headings.size()) {\n    m_currentHeadingIndex = -1;\n  }\n\n  m_muted = true;\n  highlightHeading(m_currentHeadingIndex);\n  m_muted = false;\n\n  m_expandTimer->start();\n}\n\nvoid OutlineViewer::updateTreeToOutline(QTreeWidget *p_tree, const Outline &p_outline) {\n  p_tree->clear();\n  if (p_outline.isEmpty()) {\n    p_tree->update();\n    return;\n  }\n\n  int sectionNumberBaseLevel = -1;\n  const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();\n  if (widgetConfig.getOutlineSectionNumberEnabled()) {\n    sectionNumberBaseLevel = p_outline.m_sectionNumberBaseLevel;\n  }\n\n  SectionNumber sectionNumber(7, 0);\n\n  int idx = 0;\n  renderTreeAtLevel(p_outline.m_headings, idx, 1, p_tree, nullptr, nullptr, sectionNumberBaseLevel,\n                    sectionNumber, p_outline.m_sectionNumberEndingDot);\n}\n\nvoid OutlineViewer::renderTreeAtLevel(const QVector<Outline::Heading> &p_headings, int &p_index,\n                                      int p_level, QTreeWidget *p_tree,\n                                      QTreeWidgetItem *p_parentItem, QTreeWidgetItem *p_lastItem,\n                                      int p_sectionNumberBaseLevel, SectionNumber &p_sectionNumber,\n                                      bool p_sectionNumberEndingDot) {\n  while (p_index < p_headings.size()) {\n    const auto &heading = p_headings[p_index];\n    if (heading.m_level < p_level) {\n      return;\n    }\n\n    QTreeWidgetItem *item = nullptr;\n    if (heading.m_level == p_level) {\n      QString sectionStr;\n      if (p_sectionNumberBaseLevel > 0) {\n        OutlineProvider::increaseSectionNumber(p_sectionNumber, heading.m_level,\n                                               p_sectionNumberBaseLevel);\n        sectionStr = OutlineProvider::joinSectionNumber(p_sectionNumber, p_sectionNumberEndingDot);\n      }\n\n      if (p_parentItem) {\n        item = new QTreeWidgetItem(p_parentItem);\n      } else {\n        item = new QTreeWidgetItem(p_tree);\n      }\n\n      fillTreeItem(item, heading, p_index, sectionStr);\n\n      p_lastItem = item;\n      ++p_index;\n    } else {\n      renderTreeAtLevel(p_headings, p_index, p_level + 1, p_tree, p_lastItem, nullptr,\n                        p_sectionNumberBaseLevel, p_sectionNumber, p_sectionNumberEndingDot);\n    }\n  }\n}\n\nvoid OutlineViewer::fillTreeItem(QTreeWidgetItem *p_item, const Outline::Heading &p_heading,\n                                 int p_index, const QString &p_sectionStr) {\n  p_item->setData(Column::Name, Qt::UserRole, p_index);\n  if (p_sectionStr.isEmpty()) {\n    p_item->setText(Column::Name, p_heading.m_name);\n  } else {\n    p_item->setText(Column::Name, tr(\"%1 %2\").arg(p_sectionStr, p_heading.m_name));\n  }\n  p_item->setToolTip(Column::Name, p_heading.m_name);\n}\n\nvoid OutlineViewer::highlightHeading(int p_idx) {\n  if (p_idx == -1) {\n    m_tree->setCurrentItem(nullptr);\n    return;\n  }\n\n  auto item = TreeWidget::findItem(m_tree, p_idx);\n  m_tree->setCurrentItem(item);\n}\n\nvoid OutlineViewer::expandTree(int p_level) {\n  int cnt = m_tree->topLevelItemCount();\n  if (cnt == 0) {\n    return;\n  }\n\n  // Get the base level from the first heading.\n  int baseLevel = m_outline.m_headings[0].m_level;\n  int delta = p_level - baseLevel;\n  if (delta <= 0) {\n    m_tree->collapseAll();\n  } else {\n    m_tree->expandToDepth(delta - 1);\n  }\n}\n\nvoid OutlineViewer::showLevel() {\n  QToolTip::showText(mapToGlobal(QPoint(0, 0)), tr(\"Expansion level: %1\").arg(m_autoExpandedLevel),\n                     this);\n}\n\nvoid OutlineViewer::activateItem(QTreeWidgetItem *p_item, bool p_focus) {\n  if (!p_item || m_tree->selectedItems().isEmpty()) {\n    return;\n  }\n\n  m_currentHeadingIndex = p_item->data(Column::Name, Qt::UserRole).toInt();\n  if (m_currentHeadingIndex != -1 && !m_muted) {\n    emit m_provider->headingClicked(m_currentHeadingIndex);\n    if (p_focus) {\n      emit focusViewArea();\n    }\n  }\n}\n"
  },
  {
    "path": "src/widgets/outlineviewer.h",
    "content": "#ifndef OUTLINEVIEWER_H\n#define OUTLINEVIEWER_H\n\n#include <QFrame>\n#include <QMap>\n#include <QScopedPointer>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"navigationmodewrapper.h\"\n#include \"outlineprovider.h\"\n\nclass QTreeWidget;\nclass QTreeWidgetItem;\nclass QTimer;\n\nnamespace vnotex {\nclass TitleBar;\n\nclass OutlineViewer : public QFrame {\n  Q_OBJECT\npublic:\n  OutlineViewer(const QString &p_title, QWidget *p_parent = nullptr);\n\n  void setOutlineProvider(const QSharedPointer<OutlineProvider> &p_provider);\n\n  NavigationModeWrapper<QTreeWidget, QTreeWidgetItem> *getNavigationModeWrapper();\n\nsignals:\n  void focusViewArea();\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  enum Column { Name = 0 };\n\n  void setupUI(const QString &p_title);\n\n  TitleBar *setupTitleBar(const QString &p_title, QWidget *p_parent = nullptr);\n\n  void updateTree(bool p_force = false);\n\n  void updateOutline(const QSharedPointer<Outline> &p_outline);\n\n  void updateCurrentHeading(int p_idx);\n\n  void highlightHeading(int p_idx);\n\n  void expandTree(int p_level);\n\n  void showLevel();\n\n  // Do not response if m_muted is true.\n  void activateItem(QTreeWidgetItem *p_item, bool p_focus = false);\n\n  static void renderTreeAtLevel(const QVector<Outline::Heading> &p_headings, int &p_index,\n                                int p_level, QTreeWidget *p_tree, QTreeWidgetItem *p_parentItem,\n                                QTreeWidgetItem *p_lastItem, int p_sectionNumberBaseLevel,\n                                SectionNumber &p_sectionNumber, bool p_sectionNumberEndingDot);\n\n  static void fillTreeItem(QTreeWidgetItem *p_item, const Outline::Heading &p_heading, int p_index,\n                           const QString &p_sectionStr);\n\n  static void updateTreeToOutline(QTreeWidget *p_tree, const Outline &p_outline);\n\n  bool m_muted = false;\n\n  QTimer *m_expandTimer = nullptr;\n\n  QTreeWidget *m_tree = nullptr;\n\n  QSharedPointer<OutlineProvider> m_provider;\n\n  Outline m_outline;\n\n  int m_currentHeadingIndex = -1;\n\n  int m_autoExpandedLevel = 6;\n\n  QScopedPointer<NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>> m_navigationWrapper;\n};\n} // namespace vnotex\n\n#endif // OUTLINEVIEWER_H\n"
  },
  {
    "path": "src/widgets/pdfviewwindow.cpp",
    "content": "#include \"pdfviewwindow.h\"\n\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/htmltemplatehelper.h>\n#include <core/pdfviewerconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/pathutils.h>\n\n#include \"editors/pdfviewer.h\"\n#include \"editors/pdfvieweradapter.h\"\n\nusing namespace vnotex;\n\nPdfViewWindow::PdfViewWindow(QWidget *p_parent) : ViewWindow(p_parent) {\n  m_mode = ViewWindowMode::Read;\n  setupUI();\n}\n\nvoid PdfViewWindow::setupUI() {\n  setupViewer();\n  setCentralWidget(m_viewer);\n\n  setupToolBar();\n}\n\nvoid PdfViewWindow::setupToolBar() {\n  auto toolBar = createToolBar(this);\n  addToolBar(toolBar);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Tag);\n}\n\nvoid PdfViewWindow::setupViewer() {\n  Q_ASSERT(!m_viewer);\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const auto &pdfViewerConfig = editorConfig.getPdfViewerConfig();\n\n  updateConfigRevision();\n\n  HtmlTemplateHelper::updatePdfViewerTemplate(pdfViewerConfig);\n\n  auto adapter = new PdfViewerAdapter(nullptr);\n  m_viewer = new PdfViewer(adapter, VNoteX::getInst().getThemeMgr().getBaseBackground(), 1.0, this);\n}\n\nQString PdfViewWindow::getLatestContent() const { return NULL; }\n\nQString PdfViewWindow::selectedText() const { return QString(); }\n\nvoid PdfViewWindow::setMode(ViewWindowMode p_mode) {\n  Q_UNUSED(p_mode);\n  Q_ASSERT(false);\n}\n\nvoid PdfViewWindow::openTwice(const QSharedPointer<FileOpenParameters> &p_paras) {\n  Q_UNUSED(p_paras);\n}\n\nViewWindowSession PdfViewWindow::saveSession() const {\n  auto session = ViewWindow::saveSession();\n  return session;\n}\n\nvoid PdfViewWindow::applySnippet(const QString &p_name) { Q_UNUSED(p_name); }\n\nvoid PdfViewWindow::applySnippet() {}\n\nvoid PdfViewWindow::fetchWordCountInfo(\n    const std::function<void(const WordCountInfo &)> &p_callback) const {\n  Q_UNUSED(p_callback);\n}\n\nvoid PdfViewWindow::handleEditorConfigChange() {\n  if (updateConfigRevision()) {\n    const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n    const auto &pdfViewerConfig = editorConfig.getPdfViewerConfig();\n\n    HtmlTemplateHelper::updatePdfViewerTemplate(pdfViewerConfig);\n  }\n}\n\nvoid PdfViewWindow::setModified(bool p_modified) { Q_UNUSED(p_modified); }\n\nvoid PdfViewWindow::print() {}\n\nvoid PdfViewWindow::syncEditorFromBuffer() {\n  auto buffer = getBuffer();\n  if (buffer) {\n    const auto url = PathUtils::pathToUrl(buffer->getContentPath());\n    // Solution to ASCII problems, like these file names with these symbols # + &.\n    const auto urlStr = QUrl::toPercentEncoding(url.toString(QUrl::FullyDecoded));\n    auto templateUrl = PathUtils::pathToUrl(HtmlTemplateHelper::getPdfViewerTemplatePath());\n    templateUrl.setQuery(\"file=\" + urlStr);\n    m_viewer->setHtml(HtmlTemplateHelper::getPdfViewerTemplate(), templateUrl);\n  } else {\n    m_viewer->setHtml(\"\");\n  }\n}\n\nvoid PdfViewWindow::syncEditorFromBufferContent() {}\n\nvoid PdfViewWindow::scrollUp() {}\n\nvoid PdfViewWindow::scrollDown() {}\n\nvoid PdfViewWindow::zoom(bool p_zoomIn) { Q_UNUSED(p_zoomIn); }\n\nPdfViewerAdapter *PdfViewWindow::adapter() const {\n  if (m_viewer) {\n    return dynamic_cast<PdfViewerAdapter *>(m_viewer->adapter());\n  }\n\n  return nullptr;\n}\n\nbool PdfViewWindow::updateConfigRevision() {\n  bool changed = false;\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  if (m_editorConfigRevision != editorConfig.revision()) {\n    changed = true;\n    m_editorConfigRevision = editorConfig.revision();\n  }\n\n  if (m_viewerConfigRevision != editorConfig.getPdfViewerConfig().revision()) {\n    changed = true;\n    m_viewerConfigRevision = editorConfig.getPdfViewerConfig().revision();\n  }\n\n  return changed;\n}\n"
  },
  {
    "path": "src/widgets/pdfviewwindow.h",
    "content": "#ifndef PDFVIEWWINDOW_H\n#define PDFVIEWWINDOW_H\n\n#include \"viewwindow.h\"\n\n#include <QScopedPointer>\n\nclass QWebEngineView;\n\nnamespace vnotex {\nclass PdfViewer;\nclass PdfViewerAdapter;\n\nclass PdfViewWindow : public ViewWindow {\n  Q_OBJECT\npublic:\n  explicit PdfViewWindow(QWidget *p_parent = nullptr);\n\n  QString getLatestContent() const Q_DECL_OVERRIDE;\n\n  QString selectedText() const Q_DECL_OVERRIDE;\n\n  void setMode(ViewWindowMode p_mode) Q_DECL_OVERRIDE;\n\n  void openTwice(const QSharedPointer<FileOpenParameters> &p_paras) Q_DECL_OVERRIDE;\n\n  ViewWindowSession saveSession() const Q_DECL_OVERRIDE;\n\n  void applySnippet(const QString &p_name) Q_DECL_OVERRIDE;\n\n  void applySnippet() Q_DECL_OVERRIDE;\n\n  void fetchWordCountInfo(const std::function<void(const WordCountInfo &)> &p_callback) const\n      Q_DECL_OVERRIDE;\n\npublic slots:\n  void handleEditorConfigChange() Q_DECL_OVERRIDE;\n\nprotected slots:\n  void setModified(bool p_modified) Q_DECL_OVERRIDE;\n\n  void print() Q_DECL_OVERRIDE;\n\nprotected:\n  void syncEditorFromBuffer() Q_DECL_OVERRIDE;\n\n  void syncEditorFromBufferContent() Q_DECL_OVERRIDE;\n\n  void scrollUp() Q_DECL_OVERRIDE;\n\n  void scrollDown() Q_DECL_OVERRIDE;\n\n  void zoom(bool p_zoomIn) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupToolBar();\n\n  void setupViewer();\n\n  PdfViewerAdapter *adapter() const;\n\n  bool updateConfigRevision();\n\n  // Managed by QObject.\n  PdfViewer *m_viewer = nullptr;\n\n  int m_viewerConfigRevision = 0;\n};\n} // namespace vnotex\n\n#endif // PDFVIEWWINDOW_H\n"
  },
  {
    "path": "src/widgets/propertydefs.cpp",
    "content": "#include \"propertydefs.h\"\n\nusing namespace vnotex;\n\nconst char *PropertyDefs::c_actionToolButton = \"ActionToolButton\";\n\nconst char *PropertyDefs::c_toolButtonWithoutMenuIndicator = \"NoMenuIndicator\";\n\nconst char *PropertyDefs::c_dangerButton = \"DangerButton\";\n\nconst char *PropertyDefs::c_dialogCentralWidget = \"DialogCentralWidget\";\n\nconst char *PropertyDefs::c_viewSplitCornerWidget = \"ViewSplitCornerWidget\";\n\nconst char *PropertyDefs::c_viewSplitFlash = \"ViewSplitFlash\";\n\nconst char *PropertyDefs::c_state = \"State\";\n\nconst char *PropertyDefs::c_viewWindowToolBar = \"ViewWindowToolBar\";\n\nconst char *PropertyDefs::c_consoleTextEdit = \"ConsoleTextEdit\";\n\nconst char *PropertyDefs::c_embeddedLineEdit = \"EmbeddedLineEdit\";\n\nconst char *PropertyDefs::c_dockWidgetIndex = \"DockIndex\";\n\nconst char *PropertyDefs::c_dockWidgetTitle = \"DockTitle\";\n\nconst char *PropertyDefs::c_hitSettingWidget = \"HitSettingWidget\";\n\nconst char *PropertyDefs::c_mainWindowSideBar = \"MainWindowSideBar\";\n"
  },
  {
    "path": "src/widgets/propertydefs.h",
    "content": "#ifndef PROPERTYDEFS_H\n#define PROPERTYDEFS_H\n\nnamespace vnotex {\n// Define properties used for QSS.\nclass PropertyDefs {\npublic:\n  PropertyDefs() = delete;\n\n  static const char *c_actionToolButton;\n\n  static const char *c_toolButtonWithoutMenuIndicator;\n\n  static const char *c_dangerButton;\n\n  static const char *c_dialogCentralWidget;\n\n  static const char *c_viewSplitCornerWidget;\n\n  static const char *c_viewSplitFlash;\n\n  static const char *c_viewWindowToolBar;\n\n  static const char *c_consoleTextEdit;\n\n  static const char *c_embeddedLineEdit;\n\n  // Values: info/warning/error.\n  static const char *c_state;\n\n  static const char *c_dockWidgetIndex;\n\n  static const char *c_dockWidgetTitle;\n\n  static const char *c_hitSettingWidget;\n\n  static const char *c_mainWindowSideBar;\n};\n} // namespace vnotex\n\n#endif // PROPERTYDEFS_H\n"
  },
  {
    "path": "src/widgets/qtreewidgetstatecache.h",
    "content": "#ifndef QTREEWIDGETSTATECACHE_H\n#define QTREEWIDGETSTATECACHE_H\n\n#include <functional>\n\n#include <QSet>\n#include <QTreeWidget>\n#include <QTreeWidgetItem>\n\nnamespace vnotex {\ntemplate <class Key> class QTreeWidgetStateCache {\npublic:\n  typedef std::function<Key(const QTreeWidgetItem *, bool &)> ItemKeyFunc;\n\n  explicit QTreeWidgetStateCache(const ItemKeyFunc &p_keyFunc)\n      : m_keyFunc(p_keyFunc), m_currentItem(0) {}\n\n  void save(QTreeWidget *p_tree, bool p_saveCurrentItem) {\n    clear();\n\n    auto cnt = p_tree->topLevelItemCount();\n    for (int i = 0; i < cnt; ++i) {\n      save(p_tree->topLevelItem(i));\n    }\n\n    if (p_saveCurrentItem) {\n      auto item = p_tree->currentItem();\n      bool ok;\n      Key key = m_keyFunc(item, ok);\n      if (ok) {\n        m_currentItem = key;\n      }\n    }\n  }\n\n  bool contains(QTreeWidgetItem *p_item) const {\n    bool ok;\n    Key key = m_keyFunc(p_item, ok);\n    if (ok) {\n      return m_expansionCache.contains(key);\n    }\n\n    return false;\n  }\n\n  void clear() {\n    m_expansionCache.clear();\n    m_currentItem = 0;\n  }\n\n  Key getCurrentItem() const { return m_currentItem; }\n\nprivate:\n  void save(QTreeWidgetItem *p_item) {\n    if (!p_item->isExpanded()) {\n      return;\n    }\n\n    bool ok;\n    Key key = m_keyFunc(p_item, ok);\n    if (ok) {\n      m_expansionCache.insert(key);\n    }\n\n    auto cnt = p_item->childCount();\n    for (int i = 0; i < cnt; ++i) {\n      save(p_item->child(i));\n    }\n  }\n\n  QSet<Key> m_expansionCache;\n\n  ItemKeyFunc m_keyFunc;\n\n  Key m_currentItem;\n};\n} // namespace vnotex\n\n#endif // QTREEWIDGETSTATECACHE_H\n"
  },
  {
    "path": "src/widgets/quickselector.cpp",
    "content": "#include \"quickselector.h\"\n\n#include <QDebug>\n#include <QKeyEvent>\n#include <QLabel>\n#include <QListWidgetItem>\n#include <QRegularExpression>\n#include <QVBoxLayout>\n\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/iconutils.h>\n#include <utils/widgetutils.h>\n\n#include \"lineedit.h\"\n#include \"listwidget.h\"\n#include \"widgetsfactory.h\"\n\nusing namespace vnotex;\n\nQuickSelectorItem::QuickSelectorItem(const QVariant &p_key, const QString &p_name,\n                                     const QString &p_tip, const QString &p_shortcut)\n    : m_key(p_key), m_name(p_name), m_tip(p_tip), m_shortcut(p_shortcut) {\n  Q_ASSERT(m_shortcut.size() < 3);\n}\n\nstatic bool selectorItemCmp(const QuickSelectorItem &p_a, const QuickSelectorItem &p_b) {\n  if (p_a.m_shortcut.isEmpty()) {\n    if (p_b.m_shortcut.isEmpty()) {\n      return p_a.m_name < p_b.m_name;\n    }\n    return false;\n  } else {\n    if (p_b.m_shortcut.isEmpty()) {\n      return true;\n    }\n\n    return p_a.m_shortcut < p_b.m_shortcut;\n  }\n}\n\nQuickSelector::QuickSelector(const QString &p_title, const QVector<QuickSelectorItem> &p_items,\n                             bool p_sortByShortcut, QWidget *p_parent)\n    : FloatingWidget(p_parent), m_items(p_items) {\n  if (p_sortByShortcut) {\n    std::sort(m_items.begin(), m_items.end(), selectorItemCmp);\n  }\n\n  setupUI(p_title);\n\n  updateItemList();\n}\n\nvoid QuickSelector::setupUI(const QString &p_title) {\n  auto mainLayout = new QVBoxLayout(this);\n\n  if (!p_title.isEmpty()) {\n    mainLayout->addWidget(new QLabel(p_title, this));\n  }\n\n  m_searchLineEdit = static_cast<LineEdit *>(WidgetsFactory::createLineEdit(this));\n  m_searchLineEdit->setInputMethodEnabled(false);\n  connect(m_searchLineEdit, &QLineEdit::textEdited, this, &QuickSelector::searchAndFilter);\n  connect(m_searchLineEdit, &QLineEdit::returnPressed, this,\n          [this]() { activateItem(m_itemList->currentItem()); });\n  mainLayout->addWidget(m_searchLineEdit);\n\n  setFocusProxy(m_searchLineEdit);\n  m_searchLineEdit->installEventFilter(this);\n\n  m_itemList = new ListWidget(this);\n  m_itemList->setWrapping(true);\n  m_itemList->setFlow(QListView::LeftToRight);\n  m_itemList->setIconSize(QSize(18, 18));\n  connect(m_itemList, &QListWidget::itemActivated, this, &QuickSelector::activateItem);\n  mainLayout->addWidget(m_itemList);\n\n  m_itemList->installEventFilter(this);\n}\n\nvoid QuickSelector::updateItemList() {\n  m_itemList->clear();\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n\n  const auto fg = themeMgr.paletteColor(QStringLiteral(\"widgets#quickselector#item_icon#fg\"));\n  const auto border =\n      themeMgr.paletteColor(QStringLiteral(\"widgets#quickselector#item_icon#border\"));\n\n  for (int i = 0; i < m_items.size(); ++i) {\n    const auto &item = m_items[i];\n\n    const auto icon = IconUtils::drawTextIcon(item.m_shortcut, fg, border);\n    auto listItem = new QListWidgetItem(icon, item.m_name, m_itemList);\n\n    listItem->setToolTip(item.m_tip);\n    listItem->setData(Qt::UserRole, i);\n  }\n\n  Q_ASSERT(!m_items.isEmpty());\n  m_itemList->setCurrentRow(0);\n}\n\nvoid QuickSelector::activateItem(const QListWidgetItem *p_item) {\n  if (p_item) {\n    m_selectedKey = getSelectorItem(p_item).m_key;\n  }\n  finish();\n}\n\nvoid QuickSelector::activate(const QuickSelectorItem *p_item) {\n  m_selectedKey = p_item->m_key;\n  finish();\n}\n\nQuickSelectorItem &QuickSelector::getSelectorItem(const QListWidgetItem *p_item) {\n  Q_ASSERT(p_item);\n  return m_items[p_item->data(Qt::UserRole).toInt()];\n}\n\nQVariant QuickSelector::result() const { return m_selectedKey; }\n\nbool QuickSelector::eventFilter(QObject *p_obj, QEvent *p_event) {\n  if ((p_obj == m_searchLineEdit || p_obj == m_itemList) && p_event->type() == QEvent::KeyPress) {\n    auto keyEve = static_cast<QKeyEvent *>(p_event);\n    const auto key = keyEve->key();\n    if (key == Qt::Key_Tab || key == Qt::Key_Backtab) {\n      // Change focus.\n      if (p_obj == m_searchLineEdit) {\n        m_itemList->setFocus();\n      } else {\n        m_searchLineEdit->setFocus();\n      }\n      return true;\n    }\n  }\n  return FloatingWidget::eventFilter(p_obj, p_event);\n}\n\nvoid QuickSelector::searchAndFilter(const QString &p_text) {\n  auto text = p_text.trimmed();\n  if (text.isEmpty()) {\n    // Show all items.\n    filterItems([](const QuickSelectorItem &) { return true; });\n    return;\n  } else if (text.size() < 3) {\n    // Check shortcut first.\n    const QuickSelectorItem *hitItem = nullptr;\n    int ret = filterItems([&text, &hitItem](const QuickSelectorItem &p_item) {\n      if (p_item.m_shortcut == text) {\n        hitItem = &p_item;\n        return true;\n      } else if (p_item.m_shortcut.startsWith(text)) {\n        return true;\n      }\n      return false;\n    });\n\n    if (hitItem) {\n      activate(hitItem);\n      return;\n    }\n\n    if (ret > 0) {\n      return;\n    }\n  }\n\n  // Check name.\n  auto parts = text.split(QLatin1Char(' '), Qt::SkipEmptyParts);\n  Q_ASSERT(!parts.isEmpty());\n  QRegularExpression regExp;\n  regExp.setPatternOptions(regExp.patternOptions() | QRegularExpression::CaseInsensitiveOption);\n  if (parts.size() == 1) {\n    regExp.setPattern(QRegularExpression::escape(parts[0]));\n  } else {\n    QString pattern = QRegularExpression::escape(parts[0]);\n    for (int i = 1; i < parts.size(); ++i) {\n      pattern += \".*\" + QRegularExpression::escape(parts[i]);\n    }\n    regExp.setPattern(pattern);\n  }\n  filterItems([&regExp](const QuickSelectorItem &p_item) {\n    if (p_item.m_name.indexOf(regExp) != -1) {\n      return true;\n    }\n    return false;\n  });\n}\n\nint QuickSelector::filterItems(const std::function<bool(const QuickSelectorItem &)> &p_judge) {\n  const int cnt = m_itemList->count();\n  int matchedCnt = 0;\n  int firstHit = -1;\n  for (int i = 0; i < cnt; ++i) {\n    auto item = m_itemList->item(i);\n    bool hit = p_judge(getSelectorItem(item));\n    if (hit) {\n      if (matchedCnt == 0) {\n        firstHit = i;\n      }\n      ++matchedCnt;\n    }\n    item->setHidden(!hit);\n  }\n  m_itemList->setCurrentRow(firstHit);\n  return matchedCnt;\n}\n"
  },
  {
    "path": "src/widgets/quickselector.h",
    "content": "#ifndef QUICKSELECTOR_H\n#define QUICKSELECTOR_H\n\n#include \"floatingwidget.h\"\n\n#include <QVariant>\n#include <QVector>\n\nclass QListWidget;\nclass QListWidgetItem;\n\nnamespace vnotex {\nclass LineEdit;\n\nstruct QuickSelectorItem {\n  QuickSelectorItem() = default;\n\n  QuickSelectorItem(const QVariant &p_key, const QString &p_name, const QString &p_tip,\n                    const QString &p_shortcut);\n\n  QVariant m_key;\n\n  QString m_name;\n\n  QString m_tip;\n\n  // Empty or size < 3.\n  QString m_shortcut;\n};\n\nclass QuickSelector : public FloatingWidget {\n  Q_OBJECT\npublic:\n  QuickSelector(const QString &p_title, const QVector<QuickSelectorItem> &p_items,\n                bool p_sortByShortcut, QWidget *p_parent = nullptr);\n\n  QVariant result() const Q_DECL_OVERRIDE;\n\nprotected:\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI(const QString &p_title);\n\n  void updateItemList();\n\n  void activateItem(const QListWidgetItem *p_item);\n\n  void activate(const QuickSelectorItem *p_item);\n\n  void searchAndFilter(const QString &p_text);\n\n  // Return the number of items that hit @p_judge.\n  int filterItems(const std::function<bool(const QuickSelectorItem &)> &p_judge);\n\n  QuickSelectorItem &getSelectorItem(const QListWidgetItem *p_item);\n\n  QVector<QuickSelectorItem> m_items;\n\n  LineEdit *m_searchLineEdit = nullptr;\n\n  QListWidget *m_itemList = nullptr;\n\n  QVariant m_selectedKey;\n};\n} // namespace vnotex\n\n#endif // QUICKSELECTOR_H\n"
  },
  {
    "path": "src/widgets/searchinfoprovider.cpp",
    "content": "#include \"searchinfoprovider.h\"\n\n#include \"mainwindow.h\"\n#include \"notebookexplorer.h\"\n#include \"notebookmgr.h\"\n#include \"viewarea.h\"\n#include <core/vnotex.h>\n\nusing namespace vnotex;\n\nSearchInfoProvider::SearchInfoProvider(const ViewArea *p_viewArea,\n                                       const NotebookExplorer *p_notebookExplorer,\n                                       const NotebookMgr *p_notebookMgr)\n    : m_viewArea(p_viewArea), m_notebookExplorer(p_notebookExplorer), m_notebookMgr(p_notebookMgr) {\n}\n\nQList<Buffer *> SearchInfoProvider::getBuffers() const {\n  return m_viewArea->getAllBuffersInViewSplits();\n}\n\nNode *SearchInfoProvider::getCurrentFolder() const {\n  return m_notebookExplorer->currentExploredFolderNode();\n}\n\nNotebook *SearchInfoProvider::getCurrentNotebook() const {\n  return m_notebookExplorer->currentNotebook().data();\n}\n\nQVector<Notebook *> SearchInfoProvider::getNotebooks() const {\n  auto notebooks = m_notebookMgr->getNotebooks();\n  QVector<Notebook *> nbs;\n  nbs.reserve(notebooks.size());\n  for (const auto &nb : notebooks) {\n    nbs.push_back(nb.data());\n  }\n\n  return nbs;\n}\n\nQSharedPointer<SearchInfoProvider> SearchInfoProvider::create(const MainWindow *p_mainWindow) {\n  return QSharedPointer<SearchInfoProvider>::create(p_mainWindow->getViewArea(),\n                                                    p_mainWindow->getNotebookExplorer(),\n                                                    &VNoteX::getInst().getNotebookMgr());\n}\n"
  },
  {
    "path": "src/widgets/searchinfoprovider.h",
    "content": "#ifndef SEARCHINFOPROVIDER_H\n#define SEARCHINFOPROVIDER_H\n\n#include <search/isearchinfoprovider.h>\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass ViewArea;\nclass NotebookExplorer;\nclass NotebookMgr;\nclass MainWindow;\n\nclass SearchInfoProvider : public ISearchInfoProvider {\npublic:\n  SearchInfoProvider(const ViewArea *p_viewArea, const NotebookExplorer *p_notebookExplorer,\n                     const NotebookMgr *p_notebookMgr);\n\n  QList<Buffer *> getBuffers() const Q_DECL_OVERRIDE;\n\n  Node *getCurrentFolder() const Q_DECL_OVERRIDE;\n\n  Notebook *getCurrentNotebook() const Q_DECL_OVERRIDE;\n\n  QVector<Notebook *> getNotebooks() const Q_DECL_OVERRIDE;\n\n  static QSharedPointer<SearchInfoProvider> create(const MainWindow *p_mainWindow);\n\nprivate:\n  const ViewArea *m_viewArea = nullptr;\n\n  const NotebookExplorer *m_notebookExplorer = nullptr;\n\n  const NotebookMgr *m_notebookMgr = nullptr;\n};\n} // namespace vnotex\n\n#endif // SEARCHINFOPROVIDER_H\n"
  },
  {
    "path": "src/widgets/searchpanel.cpp",
    "content": "#include \"searchpanel.h\"\n\n#include <QButtonGroup>\n#include <QCheckBox>\n#include <QComboBox>\n#include <QCompleter>\n#include <QCoreApplication>\n#include <QFormLayout>\n#include <QGridLayout>\n#include <QLabel>\n#include <QLineEdit>\n#include <QPlainTextEdit>\n#include <QProgressBar>\n#include <QRadioButton>\n#include <QScrollArea>\n#include <QToolButton>\n#include <QVBoxLayout>\n\n#include \"locationlist.h\"\n#include \"mainwindow.h\"\n#include \"propertydefs.h\"\n#include \"titlebar.h\"\n#include \"widgetsfactory.h\"\n#include <core/configmgr.h>\n#include <core/fileopenparameters.h>\n#include <core/sessionconfig.h>\n#include <core/vnotex.h>\n#include <core/widgetconfig.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <search/isearchinfoprovider.h>\n#include <search/searchhelper.h>\n#include <search/searchresultitem.h>\n#include <search/searchtoken.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nSearchPanel::SearchPanel(const QSharedPointer<ISearchInfoProvider> &p_provider, QWidget *p_parent)\n    : QFrame(p_parent), m_provider(p_provider) {\n  qRegisterMetaType<QVector<QSharedPointer<SearchResultItem>>>(\n      \"QVector<QSharedPointer<SearchResultItem>>\");\n\n  qRegisterMetaType<QSharedPointer<SearchResultItem>>(\"QSharedPointer<SearchResultItem>\");\n\n  qRegisterMetaType<SearchState>(\"SearchState\");\n\n  setupUI();\n\n  initOptions();\n\n  restoreFields(*m_option);\n}\n\nvoid SearchPanel::setupUI() {\n  auto layout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(layout);\n\n  // Title.\n  {\n    auto titleBar = setupTitleBar(QString(), this);\n    layout->addWidget(titleBar);\n  }\n\n  // Body.\n  auto scrollArea = new QScrollArea(this);\n  scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);\n  scrollArea->setWidgetResizable(true);\n  layout->addWidget(scrollArea);\n\n  auto mainWidget = new QWidget(scrollArea);\n  scrollArea->setWidget(mainWidget);\n\n  m_mainLayout = new QVBoxLayout(mainWidget);\n  WidgetUtils::setContentsMargins(m_mainLayout);\n\n  auto inputsLayout = WidgetsFactory::createFormLayout();\n  m_mainLayout->addLayout(inputsLayout);\n\n  m_keywordComboBox = WidgetsFactory::createComboBox(mainWidget);\n  m_keywordComboBox->setToolTip(SearchToken::getHelpText());\n  m_keywordComboBox->setEditable(true);\n  m_keywordComboBox->setLineEdit(WidgetsFactory::createLineEdit(mainWidget));\n  m_keywordComboBox->lineEdit()->setProperty(PropertyDefs::c_embeddedLineEdit, true);\n  m_keywordComboBox->lineEdit()->setClearButtonEnabled(true);\n  m_keywordComboBox->completer()->setCaseSensitivity(Qt::CaseSensitive);\n  connect(m_keywordComboBox->lineEdit(), &QLineEdit::returnPressed, this,\n          [this]() { m_searchBtn->animateClick(); });\n  inputsLayout->addRow(tr(\"Keyword:\"), m_keywordComboBox);\n\n  m_searchScopeComboBox = WidgetsFactory::createComboBox(mainWidget);\n  m_searchScopeComboBox->addItem(tr(\"Buffers\"), static_cast<int>(SearchScope::Buffers));\n  m_searchScopeComboBox->addItem(tr(\"Current Folder\"),\n                                 static_cast<int>(SearchScope::CurrentFolder));\n  m_searchScopeComboBox->addItem(tr(\"Current Notebook\"),\n                                 static_cast<int>(SearchScope::CurrentNotebook));\n  m_searchScopeComboBox->addItem(tr(\"All Notebooks\"), static_cast<int>(SearchScope::AllNotebooks));\n  inputsLayout->addRow(tr(\"Scope:\"), m_searchScopeComboBox);\n\n  {\n    // Advanced settings.\n    m_advancedSettings = new QWidget(mainWidget);\n    inputsLayout->addRow(m_advancedSettings);\n\n    auto advLayout = WidgetsFactory::createFormLayout(m_advancedSettings);\n    advLayout->setContentsMargins(0, 0, 0, 0);\n\n    setupSearchObject(advLayout, m_advancedSettings);\n\n    setupSearchTarget(advLayout, m_advancedSettings);\n\n    m_filePatternComboBox = WidgetsFactory::createComboBox(m_advancedSettings);\n    m_filePatternComboBox->setEditable(true);\n    m_filePatternComboBox->setLineEdit(WidgetsFactory::createLineEdit(m_advancedSettings));\n    m_filePatternComboBox->lineEdit()->setPlaceholderText(\n        tr(\"Wildcard pattern of files to search\"));\n    m_filePatternComboBox->lineEdit()->setProperty(PropertyDefs::c_embeddedLineEdit, true);\n    m_filePatternComboBox->completer()->setCaseSensitivity(Qt::CaseSensitive);\n    advLayout->addRow(tr(\"File pattern:\"), m_filePatternComboBox);\n\n    setupFindOption(advLayout, m_advancedSettings);\n  }\n\n  {\n    // TODO: use a global progress bar.\n    m_progressBar = new QProgressBar(mainWidget);\n    m_progressBar->setRange(0, 0);\n    m_progressBar->hide();\n    m_mainLayout->addWidget(m_progressBar);\n  }\n\n  m_mainLayout->addStretch();\n}\n\nTitleBar *SearchPanel::setupTitleBar(const QString &p_title, QWidget *p_parent) {\n  auto titleBar = new TitleBar(p_title, false, TitleBar::Action::None, p_parent);\n  titleBar->setActionButtonsAlwaysShown(true);\n\n  {\n    m_searchBtn = titleBar->addActionButton(QStringLiteral(\"search.svg\"), tr(\"Search\"));\n    connect(m_searchBtn, &QToolButton::triggered, this, &SearchPanel::startSearch);\n\n    auto cancelBtn = titleBar->addActionButton(QStringLiteral(\"cancel.svg\"), tr(\"Cancel\"));\n    connect(cancelBtn, &QToolButton::triggered, this, &SearchPanel::stopSearch);\n\n    auto toggleLocationListBtn = titleBar->addActionButton(\n        QStringLiteral(\"search_location_list.svg\"), tr(\"Toggle Location List\"));\n    connect(toggleLocationListBtn, &QToolButton::triggered, this,\n            []() { VNoteX::getInst().getMainWindow()->toggleLocationListVisible(); });\n\n    m_advancedSettingsBtn =\n        titleBar->addActionButton(QStringLiteral(\"advanced_settings.svg\"), tr(\"Advanced Settings\"));\n    m_advancedSettingsBtn->defaultAction()->setCheckable(true);\n    connect(m_advancedSettingsBtn, &QToolButton::triggered, this,\n            [this](QAction *p_act) { m_advancedSettings->setVisible(p_act->isChecked()); });\n  }\n\n  return titleBar;\n}\n\nvoid SearchPanel::setupSearchObject(QFormLayout *p_layout, QWidget *p_parent) {\n  auto gridLayout = new QGridLayout();\n  gridLayout->setContentsMargins(0, 0, 0, 0);\n  p_layout->addRow(tr(\"Object:\"), gridLayout);\n\n  m_searchObjectNameCheckBox = WidgetsFactory::createCheckBox(tr(\"Name\"), p_parent);\n  gridLayout->addWidget(m_searchObjectNameCheckBox, 0, 0);\n\n  m_searchObjectContentCheckBox = WidgetsFactory::createCheckBox(tr(\"Content\"), p_parent);\n  gridLayout->addWidget(m_searchObjectContentCheckBox, 0, 1);\n\n  m_searchObjectTagCheckBox = WidgetsFactory::createCheckBox(tr(\"Tag\"), p_parent);\n  gridLayout->addWidget(m_searchObjectTagCheckBox, 1, 0);\n\n  m_searchObjectPathCheckBox = WidgetsFactory::createCheckBox(tr(\"Path\"), p_parent);\n  gridLayout->addWidget(m_searchObjectPathCheckBox, 1, 1);\n}\n\nvoid SearchPanel::setupSearchTarget(QFormLayout *p_layout, QWidget *p_parent) {\n  auto gridLayout = new QGridLayout();\n  gridLayout->setContentsMargins(0, 0, 0, 0);\n  p_layout->addRow(tr(\"Target:\"), gridLayout);\n\n  m_searchTargetFileCheckBox = WidgetsFactory::createCheckBox(tr(\"File\"), p_parent);\n  gridLayout->addWidget(m_searchTargetFileCheckBox, 0, 0);\n\n  m_searchTargetFolderCheckBox = WidgetsFactory::createCheckBox(tr(\"Folder\"), p_parent);\n  gridLayout->addWidget(m_searchTargetFolderCheckBox, 0, 1);\n\n  m_searchTargetNotebookCheckBox = WidgetsFactory::createCheckBox(tr(\"Notebook\"), p_parent);\n  gridLayout->addWidget(m_searchTargetNotebookCheckBox, 1, 0);\n}\n\nvoid SearchPanel::setupFindOption(QFormLayout *p_layout, QWidget *p_parent) {\n  auto gridLayout = new QGridLayout();\n  gridLayout->setContentsMargins(0, 0, 0, 0);\n  p_layout->addRow(tr(\"Option:\"), gridLayout);\n\n  m_caseSensitiveCheckBox = WidgetsFactory::createCheckBox(tr(\"&Case sensitive\"), p_parent);\n  gridLayout->addWidget(m_caseSensitiveCheckBox, 0, 0);\n\n  {\n    QButtonGroup *btnGroup = new QButtonGroup(p_parent);\n\n    m_plainTextRadioBtn = WidgetsFactory::createRadioButton(tr(\"&Plain text\"), p_parent);\n    btnGroup->addButton(m_plainTextRadioBtn);\n    gridLayout->addWidget(m_plainTextRadioBtn, 1, 0);\n\n    m_wholeWordOnlyRadioBtn = WidgetsFactory::createRadioButton(tr(\"&Whole word only\"), p_parent);\n    btnGroup->addButton(m_wholeWordOnlyRadioBtn);\n    gridLayout->addWidget(m_wholeWordOnlyRadioBtn, 2, 0);\n\n    m_fuzzySearchRadioBtn = WidgetsFactory::createRadioButton(tr(\"&Fuzzy search\"), p_parent);\n    btnGroup->addButton(m_fuzzySearchRadioBtn);\n    gridLayout->addWidget(m_fuzzySearchRadioBtn, 3, 0);\n\n    m_regularExpressionRadioBtn =\n        WidgetsFactory::createRadioButton(tr(\"Re&gular expression\"), p_parent);\n    btnGroup->addButton(m_regularExpressionRadioBtn);\n    gridLayout->addWidget(m_regularExpressionRadioBtn, 4, 0);\n  }\n}\n\nvoid SearchPanel::initOptions() {\n  // Read search option from config.\n  m_option = QSharedPointer<SearchOption>::create(\n      ConfigMgr::getInst().getSessionConfig().getSearchOption());\n\n  connect(VNoteX::getInst().getMainWindow(), &MainWindow::mainWindowClosedOnQuit, this, [this]() {\n    saveFields(*m_option);\n    ConfigMgr::getInst().getSessionConfig().setSearchOption(*m_option);\n  });\n\n  // Init layout.\n  const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();\n  m_advancedSettingsBtn->defaultAction()->setChecked(\n      widgetConfig.isSearchPanelAdvancedSettingsVisible());\n}\n\nvoid SearchPanel::restoreFields(const SearchOption &p_option) {\n  m_keywordComboBox->setEditText(p_option.m_keyword);\n  m_filePatternComboBox->setEditText(p_option.m_filePattern);\n\n  {\n    int idx = m_searchScopeComboBox->findData(static_cast<int>(p_option.m_scope));\n    if (idx != -1) {\n      m_searchScopeComboBox->setCurrentIndex(idx);\n    }\n  }\n\n  {\n    m_searchObjectNameCheckBox->setChecked(p_option.m_objects & SearchObject::SearchName);\n    m_searchObjectContentCheckBox->setChecked(p_option.m_objects & SearchObject::SearchContent);\n    m_searchObjectTagCheckBox->setChecked(p_option.m_objects & SearchObject::SearchTag);\n    m_searchObjectPathCheckBox->setChecked(p_option.m_objects & SearchObject::SearchPath);\n  }\n\n  {\n    m_searchTargetFileCheckBox->setChecked(p_option.m_targets & SearchTarget::SearchFile);\n    m_searchTargetFolderCheckBox->setChecked(p_option.m_targets & SearchTarget::SearchFolder);\n    m_searchTargetNotebookCheckBox->setChecked(p_option.m_targets & SearchTarget::SearchNotebook);\n  }\n\n  {\n    m_plainTextRadioBtn->setChecked(true);\n\n    m_caseSensitiveCheckBox->setChecked(p_option.m_findOptions & FindOption::CaseSensitive);\n    m_wholeWordOnlyRadioBtn->setChecked(p_option.m_findOptions & FindOption::WholeWordOnly);\n    m_fuzzySearchRadioBtn->setChecked(p_option.m_findOptions & FindOption::FuzzySearch);\n    m_regularExpressionRadioBtn->setChecked(p_option.m_findOptions & FindOption::RegularExpression);\n  }\n}\n\nvoid SearchPanel::updateUIOnSearch() {\n  if (m_searchOngoing) {\n    m_progressBar->setMaximum(0);\n    m_progressBar->show();\n  } else {\n    m_progressBar->hide();\n  }\n}\n\nvoid SearchPanel::startSearch() {\n  if (m_searchOngoing) {\n    return;\n  }\n\n  // On start.\n  {\n    clearLog();\n    m_searchOngoing = true;\n    updateUIOnSearch();\n\n    prepareLocationList();\n  }\n\n  saveFields(*m_option);\n\n  QString msg;\n  auto state = SearchHelper::searchOnProvider(getSearcher(), m_option, m_provider, msg);\n  if (!msg.isEmpty()) {\n    appendLog(msg);\n  }\n\n  // On end.\n  handleSearchFinished(state);\n}\n\nvoid SearchPanel::handleSearchFinished(SearchState p_state) {\n  Q_ASSERT(m_searchOngoing);\n  Q_ASSERT(p_state != SearchState::Idle);\n\n  if (p_state != SearchState::Busy) {\n    appendLog(tr(\"Search finished: %1\").arg(SearchStateToString(p_state)));\n\n    getSearcher()->clear();\n    m_searchOngoing = false;\n    updateUIOnSearch();\n  }\n}\n\nvoid SearchPanel::stopSearch() {\n  if (!m_searchOngoing) {\n    return;\n  }\n\n  getSearcher()->stop();\n}\n\nvoid SearchPanel::appendLog(const QString &p_text) {\n  if (p_text.isEmpty()) {\n    return;\n  }\n\n  if (!m_infoTextEdit) {\n    m_infoTextEdit = WidgetsFactory::createPlainTextConsole(this);\n    m_infoTextEdit->setMaximumHeight(m_infoTextEdit->minimumSizeHint().height());\n    // Before progress bar.\n    m_mainLayout->insertWidget(m_mainLayout->count() - 1, m_infoTextEdit);\n  }\n\n  m_infoTextEdit->appendPlainText(\">>> \" + p_text);\n  m_infoTextEdit->ensureCursorVisible();\n  m_infoTextEdit->show();\n\n  QCoreApplication::sendPostedEvents();\n}\n\nvoid SearchPanel::clearLog() {\n  if (!m_infoTextEdit) {\n    return;\n  }\n\n  m_infoTextEdit->clear();\n  m_infoTextEdit->hide();\n}\n\nvoid SearchPanel::saveFields(SearchOption &p_option) {\n  p_option.m_keyword = m_keywordComboBox->currentText().trimmed();\n  p_option.m_filePattern = m_filePatternComboBox->currentText().trimmed();\n  p_option.m_scope = static_cast<SearchScope>(m_searchScopeComboBox->currentData().toInt());\n\n  {\n    p_option.m_objects = SearchObject::ObjectNone;\n    if (m_searchObjectNameCheckBox->isChecked()) {\n      p_option.m_objects |= SearchObject::SearchName;\n    }\n    if (m_searchObjectContentCheckBox->isChecked()) {\n      p_option.m_objects |= SearchObject::SearchContent;\n    }\n    if (m_searchObjectTagCheckBox->isChecked()) {\n      p_option.m_objects |= SearchObject::SearchTag;\n    }\n    if (m_searchObjectPathCheckBox->isChecked()) {\n      p_option.m_objects |= SearchObject::SearchPath;\n    }\n  }\n\n  {\n    p_option.m_targets = SearchTarget::TargetNone;\n    if (m_searchTargetFileCheckBox->isChecked()) {\n      p_option.m_targets |= SearchTarget::SearchFile;\n    }\n    if (m_searchTargetFolderCheckBox->isChecked()) {\n      p_option.m_targets |= SearchTarget::SearchFolder;\n    }\n    if (m_searchTargetNotebookCheckBox->isChecked()) {\n      p_option.m_targets |= SearchTarget::SearchNotebook;\n    }\n  }\n\n  p_option.m_engine = SearchEngine::Internal;\n\n  {\n    p_option.m_findOptions = FindOption::FindNone;\n    if (m_caseSensitiveCheckBox->isChecked()) {\n      p_option.m_findOptions |= FindOption::CaseSensitive;\n    }\n    if (m_wholeWordOnlyRadioBtn->isChecked()) {\n      p_option.m_findOptions |= FindOption::WholeWordOnly;\n    }\n    if (m_fuzzySearchRadioBtn->isChecked()) {\n      p_option.m_findOptions |= FindOption::FuzzySearch;\n    }\n    if (m_regularExpressionRadioBtn->isChecked()) {\n      p_option.m_findOptions |= FindOption::RegularExpression;\n    }\n  }\n}\n\nSearcher *SearchPanel::getSearcher() {\n  if (!m_searcher) {\n    m_searcher = new Searcher(this);\n    connect(m_searcher, &Searcher::progressUpdated, this, &SearchPanel::updateProgress);\n    connect(m_searcher, &Searcher::logRequested, this, &SearchPanel::appendLog);\n    connect(m_searcher, &Searcher::resultItemAdded, this,\n            [this](const QSharedPointer<SearchResultItem> &p_item) {\n              m_locationList->addLocation(p_item->m_location);\n            });\n    connect(m_searcher, &Searcher::resultItemsAdded, this,\n            [this](const QVector<QSharedPointer<SearchResultItem>> &p_items) {\n              for (const auto &item : p_items) {\n                m_locationList->addLocation(item->m_location);\n              }\n            });\n    connect(m_searcher, &Searcher::finished, this, &SearchPanel::handleSearchFinished);\n  }\n  return m_searcher;\n}\n\nvoid SearchPanel::updateProgress(int p_val, int p_maximum) {\n  m_progressBar->setMaximum(p_maximum);\n  m_progressBar->setValue(p_val);\n}\n\nvoid SearchPanel::prepareLocationList() {\n  auto mainWindow = VNoteX::getInst().getMainWindow();\n  mainWindow->setLocationListVisible(true);\n\n  if (!m_locationList) {\n    m_locationList = mainWindow->getLocationList();\n  }\n\n  m_locationList->clear();\n\n  m_searchTokenOfSession.clear();\n\n  m_locationList->startSession(\n      [this](const Location &p_location) { handleLocationActivated(p_location); });\n}\n\nvoid SearchPanel::handleLocationActivated(const Location &p_location) {\n  Q_ASSERT(m_searcher);\n\n  if (!m_searchTokenOfSession) {\n    if (m_option->m_objects & SearchObject::SearchContent) {\n      m_searchTokenOfSession = QSharedPointer<SearchToken>::create(m_searcher->getToken());\n    }\n  }\n\n  // TODO: decode the path of location and handle different types of destination.\n  auto paras = QSharedPointer<FileOpenParameters>::create();\n  paras->m_lineNumber = p_location.m_lineNumber;\n  paras->m_searchToken = m_searchTokenOfSession;\n  emit VNoteX::getInst().openFileRequested(p_location.m_path, paras);\n}\n\nvoid SearchPanel::focusInEvent(QFocusEvent *p_event) {\n  QFrame::focusInEvent(p_event);\n\n  WidgetUtils::selectBaseName(m_keywordComboBox->lineEdit());\n  m_keywordComboBox->setFocus();\n}\n"
  },
  {
    "path": "src/widgets/searchpanel.h",
    "content": "#ifndef SEARCHPANEL_H\n#define SEARCHPANEL_H\n\n#include <QFrame>\n#include <QSharedPointer>\n\n#include <search/searchdata.h>\n#include <search/searcher.h>\n\nclass QComboBox;\nclass QCheckBox;\nclass QFormLayout;\nclass QProgressBar;\nclass QToolButton;\nclass QPlainTextEdit;\nclass QRadioButton;\nclass QButtonGroup;\nclass QVBoxLayout;\n\nnamespace vnotex {\nclass TitleBar;\nclass LocationList;\nstruct Location;\nclass SearchToken;\nclass ISearchInfoProvider;\n\nclass SearchPanel : public QFrame {\n  Q_OBJECT\npublic:\n  SearchPanel(const QSharedPointer<ISearchInfoProvider> &p_provider, QWidget *p_parent = nullptr);\n\nprotected:\n  void focusInEvent(QFocusEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void startSearch();\n\n  void stopSearch();\n\n  void handleSearchFinished(SearchState p_state);\n\n  void updateProgress(int p_val, int p_maximum);\n\n  void appendLog(const QString &p_text);\n\nprivate:\n  void setupUI();\n\n  TitleBar *setupTitleBar(const QString &p_title, QWidget *p_parent = nullptr);\n\n  void setupSearchObject(QFormLayout *p_layout, QWidget *p_parent = nullptr);\n\n  void setupSearchTarget(QFormLayout *p_layout, QWidget *p_parent = nullptr);\n\n  void setupFindOption(QFormLayout *p_layout, QWidget *p_parent = nullptr);\n\n  void initOptions();\n\n  void restoreFields(const SearchOption &p_option);\n\n  void saveFields(SearchOption &p_option);\n\n  void updateUIOnSearch();\n\n  void clearLog();\n\n  Searcher *getSearcher();\n\n  void prepareLocationList();\n\n  void handleLocationActivated(const Location &p_location);\n\n  QSharedPointer<ISearchInfoProvider> m_provider;\n\n  QVBoxLayout *m_mainLayout = nullptr;\n\n  QToolButton *m_searchBtn = nullptr;\n\n  QToolButton *m_advancedSettingsBtn = nullptr;\n\n  QComboBox *m_keywordComboBox = nullptr;\n\n  QComboBox *m_searchScopeComboBox = nullptr;\n\n  QCheckBox *m_searchObjectNameCheckBox = nullptr;\n\n  QCheckBox *m_searchObjectContentCheckBox = nullptr;\n\n  QCheckBox *m_searchObjectTagCheckBox = nullptr;\n\n  QCheckBox *m_searchObjectPathCheckBox = nullptr;\n\n  QCheckBox *m_searchTargetFileCheckBox = nullptr;\n\n  QCheckBox *m_searchTargetFolderCheckBox = nullptr;\n\n  QCheckBox *m_searchTargetNotebookCheckBox = nullptr;\n\n  QComboBox *m_filePatternComboBox = nullptr;\n\n  QCheckBox *m_caseSensitiveCheckBox = nullptr;\n\n  // WholeWordOnly/RegularExpression/FuzzySearch is exclusive.\n  QRadioButton *m_plainTextRadioBtn = nullptr;\n\n  QRadioButton *m_wholeWordOnlyRadioBtn = nullptr;\n\n  QRadioButton *m_fuzzySearchRadioBtn = nullptr;\n\n  QRadioButton *m_regularExpressionRadioBtn = nullptr;\n\n  QWidget *m_advancedSettings = nullptr;\n\n  QProgressBar *m_progressBar = nullptr;\n\n  QPlainTextEdit *m_infoTextEdit = nullptr;\n\n  QSharedPointer<SearchOption> m_option;\n\n  bool m_searchOngoing = false;\n\n  Searcher *m_searcher = nullptr;\n\n  LocationList *m_locationList = nullptr;\n\n  QSharedPointer<SearchToken> m_searchTokenOfSession;\n};\n} // namespace vnotex\n\n#endif // SEARCHPANEL_H\n"
  },
  {
    "path": "src/widgets/simplesegmenthighlighter.cpp",
    "content": "#include \"simplesegmenthighlighter.h\"\n\n#include <QTextDocument>\n\nusing namespace vnotex;\n\nSimpleSegmentHighlighter::SimpleSegmentHighlighter(QTextDocument *p_parent)\n    : QSyntaxHighlighter(p_parent) {}\n\nvoid SimpleSegmentHighlighter::highlightBlock(const QString &p_text) {\n  if (m_segments.isEmpty() || !m_highlightFormat.isValid()) {\n    return;\n  }\n\n  const int len = p_text.size();\n  for (const auto &seg : m_segments) {\n    if (seg.m_offset >= 0 && seg.m_offset < len) {\n      setFormat(seg.m_offset, qMin(seg.m_length, len - seg.m_offset), m_highlightFormat);\n    }\n  }\n}\n\nvoid SimpleSegmentHighlighter::setSegments(const QList<Segment> &p_segments) {\n  m_segments = p_segments;\n}\n\nvoid SimpleSegmentHighlighter::setHighlightFormat(const QBrush &p_foreground,\n                                                  const QBrush &p_background) {\n  m_highlightFormat.setForeground(p_foreground);\n  m_highlightFormat.setBackground(p_background);\n}\n"
  },
  {
    "path": "src/widgets/simplesegmenthighlighter.h",
    "content": "#ifndef SIMPLESEGMENTHIGHLIGHTER_H\n#define SIMPLESEGMENTHIGHLIGHTER_H\n\n#include <QList>\n#include <QSyntaxHighlighter>\n\n#include <core/global.h>\n\nnamespace vnotex {\nclass SimpleSegmentHighlighter : public QSyntaxHighlighter {\n  Q_OBJECT\npublic:\n  explicit SimpleSegmentHighlighter(QTextDocument *p_parent);\n\n  void setSegments(const QList<Segment> &p_segments);\n\n  void setHighlightFormat(const QBrush &p_foreground, const QBrush &p_background);\n\nprotected:\n  void highlightBlock(const QString &p_text) Q_DECL_OVERRIDE;\n\nprivate:\n  QTextCharFormat m_highlightFormat;\n\n  QList<Segment> m_segments;\n};\n} // namespace vnotex\n\n#endif // SIMPLESEGMENTHIGHLIGHTER_H\n"
  },
  {
    "path": "src/widgets/snippetpanel.cpp",
    "content": "#include \"snippetpanel.h\"\n\n#include <QListWidgetItem>\n#include <QToolButton>\n#include <QVBoxLayout>\n\n#include <core/configmgr.h>\n#include <core/exception.h>\n#include <core/vnotex.h>\n#include <core/widgetconfig.h>\n#include <snippet/snippetmgr.h>\n#include <utils/widgetutils.h>\n\n#include \"dialogs/deleteconfirmdialog.h\"\n#include \"dialogs/newsnippetdialog.h\"\n#include \"dialogs/snippetpropertiesdialog.h\"\n#include \"listwidget.h\"\n#include \"mainwindow.h\"\n#include \"messageboxhelper.h\"\n#include \"titlebar.h\"\n\nusing namespace vnotex;\n\nSnippetPanel::SnippetPanel(QWidget *p_parent) : QFrame(p_parent) {\n  m_builtInSnippetsVisible =\n      ConfigMgr::getInst().getWidgetConfig().isSnippetPanelBuiltInSnippetsVisible();\n  setupUI();\n}\n\nvoid SnippetPanel::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(mainLayout);\n\n  {\n    setupTitleBar(QString(), this);\n    mainLayout->addWidget(m_titleBar);\n  }\n\n  m_snippetList = new ListWidget(this);\n  m_snippetList->setContextMenuPolicy(Qt::CustomContextMenu);\n  m_snippetList->setSelectionMode(QAbstractItemView::ExtendedSelection);\n  connect(m_snippetList, &QListWidget::customContextMenuRequested, this,\n          &SnippetPanel::handleContextMenuRequested);\n  connect(m_snippetList, &QListWidget::itemActivated, this, &SnippetPanel::applySnippet);\n  mainLayout->addWidget(m_snippetList);\n\n  setFocusProxy(m_snippetList);\n}\n\nvoid SnippetPanel::initialize() { updateSnippetList(); }\n\nvoid SnippetPanel::setupTitleBar(const QString &p_title, QWidget *p_parent) {\n  m_titleBar = new TitleBar(p_title, true, TitleBar::Action::Menu, p_parent);\n  m_titleBar->setActionButtonsAlwaysShown(true);\n\n  {\n    auto newBtn = m_titleBar->addActionButton(QStringLiteral(\"add.svg\"), tr(\"New Snippet\"));\n    connect(newBtn, &QToolButton::triggered, this, &SnippetPanel::newSnippet);\n  }\n\n  {\n    auto openFolderBtn =\n        m_titleBar->addActionButton(QStringLiteral(\"open_folder.svg\"), tr(\"Open Folder\"));\n    connect(openFolderBtn, &QToolButton::triggered, this, []() {\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(SnippetMgr::getInst().getSnippetFolder()));\n    });\n  }\n\n  auto showAct =\n      m_titleBar->addMenuAction(tr(\"Show Built-In Snippets\"), m_titleBar, [this](bool p_checked) {\n        ConfigMgr::getInst().getWidgetConfig().setSnippetPanelBuiltInSnippetsVisible(p_checked);\n        setBuiltInSnippetsVisible(p_checked);\n      });\n  showAct->setCheckable(true);\n  showAct->setChecked(m_builtInSnippetsVisible);\n}\n\nvoid SnippetPanel::newSnippet() {\n  NewSnippetDialog dialog(VNoteX::getInst().getMainWindow());\n  if (dialog.exec() == QDialog::Accepted) {\n    updateSnippetList();\n  }\n}\n\nvoid SnippetPanel::updateItemsCountLabel() {\n  const auto cnt = m_snippetList->count();\n  if (cnt == 0) {\n    m_titleBar->setInfoLabel(\"\");\n  } else {\n    m_titleBar->setInfoLabel(tr(\"%n Item(s)\", \"\", cnt));\n  }\n}\n\nvoid SnippetPanel::updateSnippetList() {\n  m_snippetList->clear();\n\n  const auto &snippets = SnippetMgr::getInst().getSnippets();\n  for (const auto &snippet : snippets) {\n    if (snippet->isReadOnly() && !m_builtInSnippetsVisible) {\n      continue;\n    }\n\n    auto item = new QListWidgetItem(m_snippetList);\n    QString suffix;\n    if (snippet->isReadOnly()) {\n      suffix = QLatin1Char('*');\n    }\n    if (snippet->getShortcut() == Snippet::InvalidShortcut) {\n      item->setText(snippet->getName() + suffix);\n    } else {\n      item->setText(tr(\"%1%2 [%3]\").arg(snippet->getName(), suffix, snippet->getShortcutString()));\n    }\n\n    item->setData(Qt::UserRole, snippet->getName());\n    item->setToolTip(snippet->getDescription());\n  }\n\n  updateItemsCountLabel();\n}\n\nvoid SnippetPanel::handleContextMenuRequested(const QPoint &p_pos) {\n  auto item = m_snippetList->itemAt(p_pos);\n  if (!item) {\n    return;\n  }\n\n  QMenu menu(this);\n\n  const int selectedCount = m_snippetList->selectedItems().size();\n  if (selectedCount == 1) {\n    menu.addAction(tr(\"&Apply\"), &menu, [this]() { applySnippet(m_snippetList->currentItem()); });\n  }\n\n  menu.addAction(tr(\"&Delete\"), this, &SnippetPanel::removeSelectedSnippets);\n\n  if (selectedCount == 1) {\n    menu.addAction(tr(\"&Properties (Rename)\"), &menu, [this]() {\n      auto item = m_snippetList->currentItem();\n      if (!item) {\n        return;\n      }\n\n      auto snippet = SnippetMgr::getInst().find(getSnippetName(item));\n      if (!snippet) {\n        qWarning() << \"failed to find snippet for properties\" << getSnippetName(item);\n        return;\n      }\n\n      SnippetPropertiesDialog dialog(snippet.data(), VNoteX::getInst().getMainWindow());\n      if (dialog.exec()) {\n        updateSnippetList();\n      }\n    });\n  }\n\n  menu.exec(m_snippetList->mapToGlobal(p_pos));\n}\n\nQString SnippetPanel::getSnippetName(const QListWidgetItem *p_item) {\n  return p_item->data(Qt::UserRole).toString();\n}\n\nvoid SnippetPanel::removeSelectedSnippets() {\n  const auto selectedItems = m_snippetList->selectedItems();\n  if (selectedItems.isEmpty()) {\n    return;\n  }\n\n  QVector<ConfirmItemInfo> items;\n  for (const auto &selectedItem : selectedItems) {\n    const auto name = getSnippetName(selectedItem);\n    items.push_back(ConfirmItemInfo(name, name, QString(), nullptr));\n  }\n\n  DeleteConfirmDialog dialog(tr(\"Confirm Deletion\"), tr(\"Delete these snippets permanently?\"),\n                             tr(\"Files will be deleted permanently and could not be found even \"\n                                \"in operating system's recycle bin.\"),\n                             items, DeleteConfirmDialog::Flag::None, false,\n                             VNoteX::getInst().getMainWindow());\n\n  QStringList snippetsToDelete;\n  if (dialog.exec()) {\n    items = dialog.getConfirmedItems();\n    for (const auto &item : items) {\n      snippetsToDelete << item.m_name;\n    }\n  }\n\n  if (snippetsToDelete.isEmpty()) {\n    return;\n  }\n\n  for (const auto &snippetName : snippetsToDelete) {\n    try {\n      SnippetMgr::getInst().removeSnippet(snippetName);\n    } catch (Exception &p_e) {\n      QString msg = tr(\"Failed to remove snippet (%1) (%2).\").arg(snippetName, p_e.what());\n      qCritical() << msg;\n      MessageBoxHelper::notify(MessageBoxHelper::Critical, msg, VNoteX::getInst().getMainWindow());\n    }\n  }\n\n  updateSnippetList();\n}\n\nvoid SnippetPanel::applySnippet(const QListWidgetItem *p_item) {\n  if (!p_item) {\n    return;\n  }\n  const auto name = getSnippetName(p_item);\n  if (!name.isEmpty()) {\n    emit applySnippetRequested(name);\n  }\n}\n\nvoid SnippetPanel::setBuiltInSnippetsVisible(bool p_visible) {\n  if (m_builtInSnippetsVisible == p_visible) {\n    return;\n  }\n\n  m_builtInSnippetsVisible = p_visible;\n\n  updateSnippetList();\n}\n"
  },
  {
    "path": "src/widgets/snippetpanel.h",
    "content": "#ifndef SNIPPETPANEL_H\n#define SNIPPETPANEL_H\n\n#include <QFrame>\n\nclass QListWidget;\nclass QListWidgetItem;\n\nnamespace vnotex {\nclass TitleBar;\n\nclass SnippetPanel : public QFrame {\n  Q_OBJECT\npublic:\n  explicit SnippetPanel(QWidget *p_parent = nullptr);\n\n  void initialize();\n\nsignals:\n  void applySnippetRequested(const QString &p_name);\n\nprivate slots:\n  void newSnippet();\n\n  void handleContextMenuRequested(const QPoint &p_pos);\n\n  void removeSelectedSnippets();\n\n  void applySnippet(const QListWidgetItem *p_item);\n\nprivate:\n  void setupUI();\n\n  void setupTitleBar(const QString &p_title, QWidget *p_parent = nullptr);\n\n  void updateItemsCountLabel();\n\n  void updateSnippetList();\n\n  QString getSnippetName(const QListWidgetItem *p_item);\n\n  void setBuiltInSnippetsVisible(bool p_visible);\n\n  TitleBar *m_titleBar = nullptr;\n\n  QListWidget *m_snippetList = nullptr;\n\n  bool m_builtInSnippetsVisible = true;\n};\n} // namespace vnotex\n\n#endif // SNIPPETPANEL_H\n"
  },
  {
    "path": "src/widgets/statusbarhelper.cpp",
    "content": "#include \"statusbarhelper.h\"\n\n#include <QStatusBar>\n\n#include \"mainwindow.h\"\n\nusing namespace vnotex;\n\nvoid StatusBarHelper::setupStatusBar(MainWindow *p_mainWindow) {\n  auto bar = new QStatusBar(p_mainWindow);\n  p_mainWindow->setStatusBar(bar);\n}\n"
  },
  {
    "path": "src/widgets/statusbarhelper.h",
    "content": "#ifndef STATUSBARHELPER_H\n#define STATUSBARHELPER_H\n\nnamespace vnotex {\nclass MainWindow;\n\nclass StatusBarHelper {\npublic:\n  StatusBarHelper() = delete;\n\n  static void setupStatusBar(MainWindow *p_mainWindow);\n};\n} // namespace vnotex\n\n#endif // STATUSBARHELPER_H\n"
  },
  {
    "path": "src/widgets/styleditemdelegate.cpp",
    "content": "#include \"styleditemdelegate.h\"\n\n#include <QAbstractTextDocumentLayout>\n#include <QApplication>\n#include <QListWidgetItem>\n#include <QPainter>\n#include <QStyle>\n#include <QTextDocument>\n\n#include \"listwidget.h\"\n#include \"simplesegmenthighlighter.h\"\n#include \"treewidget.h\"\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n\nusing namespace vnotex;\n\nStyledItemDelegateListWidget::StyledItemDelegateListWidget(const ListWidget *p_listWidget) {\n  Q_UNUSED(p_listWidget);\n}\n\nStyledItemDelegateTreeWidget::StyledItemDelegateTreeWidget(const TreeWidget *p_treeWidget) {\n  Q_UNUSED(p_treeWidget);\n}\n\nQBrush StyledItemDelegate::s_highlightForeground;\n\nQBrush StyledItemDelegate::s_highlightBackground;\n\nStyledItemDelegate::StyledItemDelegate(\n    const QSharedPointer<StyledItemDelegateInterface> &p_interface, DelegateFlags p_flags,\n    QObject *p_parent)\n    : QStyledItemDelegate(p_parent), m_interface(p_interface), m_flags(p_flags) {\n  initialize();\n\n  if (m_flags & DelegateFlag::Highlights) {\n    m_document = new QTextDocument(this);\n    m_highlighter = new SimpleSegmentHighlighter(m_document);\n    m_highlighter->setHighlightFormat(s_highlightForeground, s_highlightBackground);\n  }\n}\n\nvoid StyledItemDelegate::initialize() {\n  static bool initialized = false;\n  if (!initialized) {\n    initialized = true;\n\n    const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n    s_highlightForeground =\n        QColor(themeMgr.paletteColor(QStringLiteral(\"widgets#styleditemdelegate#highlight#fg\")));\n    s_highlightBackground =\n        QColor(themeMgr.paletteColor(QStringLiteral(\"widgets#styleditemdelegate#highlight#bg\")));\n  }\n}\n\nvoid StyledItemDelegate::paint(QPainter *p_painter, const QStyleOptionViewItem &p_option,\n                               const QModelIndex &p_index) const {\n  // [Qt's BUG] Qt does not draw the background from Qt::BackgroundRole. Do it manually.\n  auto bgBrushVal = p_index.data(Qt::BackgroundRole);\n  if (bgBrushVal.canConvert<QBrush>()) {\n    auto brush = qvariant_cast<QBrush>(bgBrushVal);\n    if (brush.style() != Qt::NoBrush) {\n      p_painter->fillRect(p_option.rect, brush);\n    }\n  }\n\n  if (m_flags & DelegateFlag::Highlights) {\n    const auto value = p_index.data(HighlightsRole);\n    if (value.canConvert<QList<Segment>>()) {\n      auto segments = value.value<QList<Segment>>();\n      if (!segments.isEmpty()) {\n        paintWithHighlights(p_painter, p_option, p_index, segments);\n        return;\n      }\n    }\n  }\n\n  QStyledItemDelegate::paint(p_painter, p_option, p_index);\n}\n\nstatic void drawContents(const QStyleOptionViewItem &p_option, QTextDocument *p_doc,\n                         QPainter *p_painter, const QRectF &p_rect) {\n  // From qtbase/src/gui/text/qtextdocument.cpp.\n\n  p_painter->save();\n\n  QAbstractTextDocumentLayout::PaintContext ctx;\n  if (p_rect.isValid()) {\n    p_painter->setClipRect(p_rect);\n    ctx.clip = p_rect;\n  }\n\n  // Update palette.\n  ctx.palette.setBrush(QPalette::Text, p_option.palette.brush(QPalette::Text));\n\n  p_doc->documentLayout()->draw(p_painter, ctx);\n\n  p_painter->restore();\n}\n\nvoid StyledItemDelegate::paintWithHighlights(QPainter *p_painter,\n                                             const QStyleOptionViewItem &p_option,\n                                             const QModelIndex &p_index,\n                                             const QList<Segment> &p_segments) const {\n  QStyleOptionViewItem opt(p_option);\n  initStyleOption(&opt, p_index);\n\n  m_highlighter->setSegments(p_segments);\n  m_document->clear();\n  m_document->setDefaultFont(opt.font);\n  m_document->setPlainText(opt.text);\n\n  p_painter->save();\n\n  // Draw the item without text.\n  opt.text = \"\";\n  auto style = opt.widget ? opt.widget->style() : QApplication::style();\n  style->drawControl(QStyle::CE_ItemViewItem, &opt, p_painter, opt.widget);\n\n  // Draw the text via QTextDocument.\n  p_painter->translate(opt.rect.left(), opt.rect.top());\n  const QRect clip(0, 0, opt.rect.width(), opt.rect.height());\n  drawContents(opt, m_document, p_painter, clip);\n\n  p_painter->restore();\n}\n\nQSize StyledItemDelegate::sizeHint(const QStyleOptionViewItem &p_option,\n                                   const QModelIndex &p_index) const {\n  if (m_flags & DelegateFlag::Highlights) {\n    const auto value = p_index.data(HighlightsRole);\n    if (value.canConvert<QList<Segment>>()) {\n      auto segments = value.value<QList<Segment>>();\n      if (!segments.isEmpty()) {\n        QStyleOptionViewItem opt(p_option);\n        initStyleOption(&opt, p_index);\n\n        m_document->setPlainText(opt.text);\n        return QSize(m_document->idealWidth(), m_document->size().height());\n      }\n    }\n  }\n\n  return QStyledItemDelegate::sizeHint(p_option, p_index);\n}\n"
  },
  {
    "path": "src/widgets/styleditemdelegate.h",
    "content": "#ifndef STYLEDITEMDELEGATE_H\n#define STYLEDITEMDELEGATE_H\n\n#include <QBrush>\n#include <QList>\n#include <QSharedPointer>\n#include <QStyledItemDelegate>\n\n#include <core/global.h>\n\nclass QTextDocument;\n\nnamespace vnotex {\nclass ListWidget;\nclass TreeWidget;\nclass SimpleSegmentHighlighter;\n\nclass StyledItemDelegateInterface {\npublic:\n  virtual ~StyledItemDelegateInterface() = default;\n};\n\nclass StyledItemDelegateListWidget : public StyledItemDelegateInterface {\npublic:\n  explicit StyledItemDelegateListWidget(const ListWidget *p_listWidget);\n};\n\nclass StyledItemDelegateTreeWidget : public StyledItemDelegateInterface {\npublic:\n  explicit StyledItemDelegateTreeWidget(const TreeWidget *p_treeWidget);\n};\n\n// Template is not supported with QObject.\nclass StyledItemDelegate : public QStyledItemDelegate {\n  Q_OBJECT\npublic:\n  enum DelegateFlag { None = 0, Highlights = 0x1 };\n  Q_DECLARE_FLAGS(DelegateFlags, DelegateFlag);\n\n  StyledItemDelegate(const QSharedPointer<StyledItemDelegateInterface> &p_interface,\n                     DelegateFlags p_flags = DelegateFlag::None, QObject *p_parent = nullptr);\n\n  void paint(QPainter *p_painter, const QStyleOptionViewItem &p_option,\n             const QModelIndex &p_index) const Q_DECL_OVERRIDE;\n\n  QSize sizeHint(const QStyleOptionViewItem &p_option,\n                 const QModelIndex &p_index) const Q_DECL_OVERRIDE;\n\n  static QBrush s_highlightForeground;\n\n  static QBrush s_highlightBackground;\n\nprivate:\n  void initialize();\n\n  void paintWithHighlights(QPainter *p_painter, const QStyleOptionViewItem &p_option,\n                           const QModelIndex &p_index, const QList<Segment> &p_segments) const;\n\n  QSharedPointer<StyledItemDelegateInterface> m_interface;\n\n  DelegateFlags m_flags = DelegateFlag::None;\n\n  QTextDocument *m_document = nullptr;\n\n  SimpleSegmentHighlighter *m_highlighter = nullptr;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::StyledItemDelegate::DelegateFlags)\n\n#endif // STYLEDITEMDELEGATE_H\n"
  },
  {
    "path": "src/widgets/systemtrayhelper.cpp",
    "content": "#include \"systemtrayhelper.h\"\n\n#include <QApplication>\n#include <QIcon>\n#include <QMenu>\n#include <QSystemTrayIcon>\n\n#include \"mainwindow.h\"\n#include \"widgetsfactory.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nQSystemTrayIcon *SystemTrayHelper::setupSystemTray(MainWindow *p_win) {\n#if defined(Q_OS_MACOS)\n  QIcon icon(\":/vnotex/data/core/logo/vnote_mono.png\");\n  icon.setIsMask(true);\n#else\n  QIcon icon(\":/vnotex/data/core/logo/256x256/vnote.png\");\n#endif\n\n  auto trayIcon = new QSystemTrayIcon(icon, p_win);\n  trayIcon->setToolTip(qApp->applicationName());\n\n  MainWindow::connect(trayIcon, &QSystemTrayIcon::activated, p_win,\n                      [p_win](QSystemTrayIcon::ActivationReason p_reason) {\n                        Q_UNUSED(p_reason);\n#if !defined(Q_OS_MACOS)\n                        if (p_reason == QSystemTrayIcon::Trigger) {\n                          p_win->showMainWindow();\n                        }\n#endif\n                      });\n\n  auto menu = WidgetsFactory::createMenu(p_win);\n  trayIcon->setContextMenu(menu);\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  {\n    auto act = menu->addAction(MainWindow::tr(\"Show Main Window\"), menu,\n                               [p_win]() { p_win->showMainWindow(); });\n\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::Global_WakeUp));\n  }\n\n  menu->addSeparator();\n\n  menu->addAction(MainWindow::tr(\"Quit\"), menu, [p_win]() { p_win->quitApp(); });\n\n  return trayIcon;\n}\n"
  },
  {
    "path": "src/widgets/systemtrayhelper.h",
    "content": "#ifndef SYSTEMTRAYHELPER_H\n#define SYSTEMTRAYHELPER_H\n\nclass QSystemTrayIcon;\n\nnamespace vnotex {\nclass MainWindow;\n\nclass SystemTrayHelper {\npublic:\n  SystemTrayHelper() = delete;\n\n  static QSystemTrayIcon *setupSystemTray(MainWindow *p_win);\n};\n} // namespace vnotex\n\n#endif // SYSTEMTRAYHELPER_H\n"
  },
  {
    "path": "src/widgets/tagexplorer.cpp",
    "content": "#include \"tagexplorer.h\"\r\n\r\n#include <QAbstractItemModel>\r\n#include <QCompleter>\r\n#include <QDebug>\r\n#include <QLineEdit>\r\n#include <QListWidgetItem>\r\n#include <QMenu>\r\n#include <QSplitter>\r\n#include <QTimer>\r\n#include <QToolButton>\r\n#include <QTreeWidgetItem>\r\n#include <QVBoxLayout>\r\n\r\n#include \"propertydefs.h\"\r\n#include \"titlebar.h\"\r\n\r\n#include <core/configmgr.h>\r\n#include <core/fileopenparameters.h>\r\n#include <core/notebookmgr.h>\r\n#include <core/vnotex.h>\r\n#include <core/widgetconfig.h>\r\n#include <notebook/notebook.h>\r\n#include <notebook/tagi.h>\r\n#include <utils/iconutils.h>\r\n#include <utils/widgetutils.h>\r\n\r\n#include \"dialogs/newtagdialog.h\"\r\n#include \"dialogs/renametagdialog.h\"\r\n#include \"listwidget.h\"\r\n#include \"mainwindow.h\"\r\n#include \"messageboxhelper.h\"\r\n#include \"navigationmodemgr.h\"\r\n#include \"notebooknodeexplorer.h\"\r\n#include \"treewidget.h\"\r\n#include \"widgetsfactory.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nTagExplorer::TagExplorer(QWidget *p_parent) : QFrame(p_parent) {\r\n  initIcons();\r\n\r\n  setupUI();\r\n}\r\n\r\nvoid TagExplorer::initIcons() {\r\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\r\n  m_tagIcon = IconUtils::fetchIcon(themeMgr.getIconFile(QStringLiteral(\"tag.svg\")));\r\n  m_nodeIcon = IconUtils::fetchIcon(themeMgr.getIconFile(QStringLiteral(\"file_node.svg\")));\r\n}\r\n\r\nvoid TagExplorer::setupUI() {\r\n  auto mainLayout = new QVBoxLayout(this);\r\n  WidgetUtils::setContentsMargins(mainLayout);\r\n\r\n  setupTitleBar(this);\r\n  mainLayout->addWidget(m_titleBar);\r\n\r\n  m_tagSearchEdit = WidgetsFactory::createComboBox(this);\r\n  m_tagSearchEdit->setEditable(true);\r\n  m_tagSearchEdit->setLineEdit(WidgetsFactory::createLineEdit(this));\r\n  m_tagSearchEdit->lineEdit()->setProperty(PropertyDefs::c_embeddedLineEdit, true);\r\n  m_tagSearchEdit->lineEdit()->setPlaceholderText(tr(\"\"));\r\n  m_tagSearchEdit->lineEdit()->setClearButtonEnabled(true);\r\n  m_tagSearchEdit->completer()->setCaseSensitivity(Qt::CaseSensitive);\r\n\r\n  connect(m_tagSearchEdit->lineEdit(), &QLineEdit::textChanged, this, &TagExplorer::filterTags);\r\n\r\n  mainLayout->addWidget(m_tagSearchEdit);\r\n\r\n  m_splitter = new QSplitter(this);\r\n  mainLayout->addWidget(m_splitter);\r\n\r\n  setTwoColumnsEnabled(ConfigMgr::getInst().getWidgetConfig().getTagExplorerTwoColumnsEnabled());\r\n\r\n  setupTagTree(m_splitter);\r\n  m_splitter->addWidget(m_tagTree);\r\n\r\n  setupNodeList(m_splitter);\r\n  m_splitter->addWidget(m_nodeList);\r\n\r\n  setFocusProxy(m_tagTree);\r\n}\r\n\r\nvoid TagExplorer::setupTitleBar(QWidget *p_parent) {\r\n  m_titleBar = new TitleBar(QString(), false, TitleBar::Action::Menu, p_parent);\r\n  m_titleBar->setActionButtonsAlwaysShown(true);\r\n\r\n  auto twoColumnsAct =\r\n      m_titleBar->addMenuAction(tr(\"Two Columns\"), m_titleBar, [this](bool p_checked) {\r\n        ConfigMgr::getInst().getWidgetConfig().setTagExplorerTwoColumnsEnabled(p_checked);\r\n        setTwoColumnsEnabled(p_checked);\r\n      });\r\n  twoColumnsAct->setCheckable(true);\r\n  twoColumnsAct->setChecked(\r\n      ConfigMgr::getInst().getWidgetConfig().getTagExplorerTwoColumnsEnabled());\r\n}\r\n\r\nvoid TagExplorer::setTwoColumnsEnabled(bool p_enabled) {\r\n  if (m_splitter) {\r\n    m_splitter->setOrientation(p_enabled ? Qt::Horizontal : Qt::Vertical);\r\n  }\r\n}\r\n\r\nvoid TagExplorer::setupTagTree(QWidget *p_parent) {\r\n  auto timer = new QTimer(this);\r\n  timer->setSingleShot(true);\r\n  timer->setInterval(500);\r\n  connect(timer, &QTimer::timeout, this, &TagExplorer::activateTagItem);\r\n\r\n  m_tagTree = new TreeWidget(TreeWidget::ClickSpaceToClearSelection, p_parent);\r\n  TreeWidget::setupSingleColumnHeaderlessTree(m_tagTree, true, false);\r\n  TreeWidget::showHorizontalScrollbar(m_tagTree);\r\n  m_tagTree->setDragDropMode(QAbstractItemView::InternalMove);\r\n  m_tagTree->setSelectionMode(QAbstractItemView::MultiSelection);\r\n  connect(m_tagTree, &QTreeWidget::itemSelectionChanged, this, [this, timer]() {\r\n    auto selectedItems = m_tagTree->selectedItems();\r\n\r\n    // Enable all items first\r\n    std::function<void(QTreeWidgetItem *)> enableAllItems = [&](QTreeWidgetItem *p_item) {\r\n      p_item->setDisabled(false);\r\n      for (int i = 0; i < p_item->childCount(); ++i) {\r\n        enableAllItems(p_item->child(i));\r\n      }\r\n    };\r\n    for (int i = 0; i < m_tagTree->topLevelItemCount(); ++i) {\r\n      enableAllItems(m_tagTree->topLevelItem(i));\r\n    }\r\n    // no-bold when no item selected\r\n    if (selectedItems.isEmpty()) {\r\n      timer->start();\r\n      std::function<void(QTreeWidgetItem *)> unboldAllItems = [&](QTreeWidgetItem *p_item) {\r\n        QFont font = p_item->font(Column::Name);\r\n        font.setBold(false);\r\n        p_item->setFont(Column::Name, font);\r\n        for (int i = 0; i < p_item->childCount(); ++i) {\r\n          unboldAllItems(p_item->child(i));\r\n        }\r\n      };\r\n      for (int i = 0; i < m_tagTree->topLevelItemCount(); ++i) {\r\n        unboldAllItems(m_tagTree->topLevelItem(i));\r\n      }\r\n      return;\r\n    }\r\n\r\n    // Get common nodes for selected tags\r\n    QSet<QString> commonNodes;\r\n    auto tagI = m_notebook->tag();\r\n    if (Q_UNLIKELY(!tagI)) {\r\n      return; // Tag interface not initialized\r\n    }\r\n    for (const auto &item : selectedItems) {\r\n      auto tag = itemTag(item);\r\n      auto nodes = tagI->findNodesOfTag(tag);\r\n      if (commonNodes.isEmpty()) {\r\n        commonNodes = QSet<QString>(nodes.begin(), nodes.end());\r\n      } else {\r\n        commonNodes.intersect(QSet<QString>(nodes.begin(), nodes.end()));\r\n      }\r\n    }\r\n\r\n    // Disable incompatible tags\r\n    // *Since parent tags affect the disabled state of child tags,\r\n    // *keep the parent tag enabled (even if incompatible) when child tags are matched.\r\n    std::function<void(QTreeWidgetItem *)> disableIncompatibleItems = [&](QTreeWidgetItem *p_item) {\r\n      if (!selectedItems.contains(p_item)) {\r\n        // Disable parent tag only if all child tags are incompatible.\r\n        // Otherwise, keep it enabled.\r\n        bool hasEnabledChild = false;\r\n        for (int i = 0; i < p_item->childCount(); ++i) {\r\n          auto child = p_item->child(i);\r\n          disableIncompatibleItems(child);\r\n          if (!child->isDisabled()) {\r\n            hasEnabledChild = true;\r\n          }\r\n        }\r\n\r\n        if (!hasEnabledChild) {\r\n          auto tag = itemTag(p_item);\r\n          auto nodes = tagI->findNodesOfTag(tag);\r\n          QSet<QString> nodeSet(nodes.begin(), nodes.end());\r\n          if (!nodeSet.intersects(commonNodes)) {\r\n            p_item->setDisabled(true);\r\n          }\r\n        }\r\n        return;\r\n      }\r\n\r\n      for (int i = 0; i < p_item->childCount(); ++i) {\r\n        disableIncompatibleItems(p_item->child(i));\r\n      }\r\n    };\r\n    for (int i = 0; i < m_tagTree->topLevelItemCount(); ++i) {\r\n      disableIncompatibleItems(m_tagTree->topLevelItem(i));\r\n    }\r\n\r\n    // Update font for all items\r\n    std::function<void(QTreeWidgetItem *)> updateItemFont = [&](QTreeWidgetItem *p_item) {\r\n      QFont font = p_item->font(Column::Name);\r\n      // set bold when item is selected or enabled\r\n      bool shouldBold = !selectedItems.isEmpty() &&\r\n                        (selectedItems.contains(p_item) || (p_item->flags() & Qt::ItemIsEnabled));\r\n      font.setBold(shouldBold);\r\n      p_item->setFont(Column::Name, font);\r\n      for (int i = 0; i < p_item->childCount(); ++i) {\r\n        updateItemFont(p_item->child(i));\r\n      }\r\n    };\r\n    for (int i = 0; i < m_tagTree->topLevelItemCount(); ++i) {\r\n      updateItemFont(m_tagTree->topLevelItem(i));\r\n    }\r\n\r\n    timer->start();\r\n  });\r\n  connect(m_tagTree, &QTreeWidget::customContextMenuRequested, this,\r\n          &TagExplorer::handleTagTreeContextMenuRequested);\r\n  connect(m_tagTree, &TreeWidget::itemMoved, this, &TagExplorer::handleTagMoved);\r\n\r\n  m_tagTreeNavigationWrapper.reset(\r\n      new NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>(m_tagTree));\r\n  NavigationModeMgr::getInst().registerNavigationTarget(m_tagTreeNavigationWrapper.data());\r\n}\r\n\r\nvoid TagExplorer::setupNodeList(QWidget *p_parent) {\r\n  m_nodeList = new ListWidget(p_parent);\r\n  m_nodeList->setContextMenuPolicy(Qt::CustomContextMenu);\r\n  m_nodeList->setSelectionMode(QAbstractItemView::ExtendedSelection);\r\n  connect(m_nodeList, &QListWidget::customContextMenuRequested, this,\r\n          &TagExplorer::handleNodeListContextMenuRequested);\r\n  connect(m_nodeList, &QListWidget::itemActivated, this, &TagExplorer::openItem);\r\n\r\n  m_nodeListNavigationWrapper.reset(\r\n      new NavigationModeWrapper<QListWidget, QListWidgetItem>(m_nodeList));\r\n  NavigationModeMgr::getInst().registerNavigationTarget(m_nodeListNavigationWrapper.data());\r\n}\r\n\r\nQByteArray TagExplorer::saveState() const { return m_splitter->saveState(); }\r\n\r\nvoid TagExplorer::restoreState(const QByteArray &p_data) { m_splitter->restoreState(p_data); }\r\n\r\nvoid TagExplorer::setNotebook(const QSharedPointer<Notebook> &p_notebook) {\r\n  if (m_notebook == p_notebook) {\r\n    return;\r\n  }\r\n\r\n  if (m_notebook) {\r\n    disconnect(m_notebook.data(), nullptr, this, nullptr);\r\n  }\r\n\r\n  m_notebook = p_notebook;\r\n  if (m_notebook) {\r\n    connect(m_notebook.data(), &Notebook::tagsUpdated, this, &TagExplorer::updateTags);\r\n  }\r\n\r\n  m_lastTagName.clear();\r\n\r\n  updateTags();\r\n}\r\n\r\nvoid TagExplorer::updateTags() {\r\n  m_tagTree->clear();\r\n\r\n  auto tagI = m_notebook ? m_notebook->tag() : nullptr;\r\n  if (!tagI) {\r\n    return;\r\n  }\r\n\r\n  const auto &topLevelTags = tagI->getTopLevelTags();\r\n  for (const auto &tag : topLevelTags) {\r\n    auto item = new QTreeWidgetItem(m_tagTree);\r\n    fillTagItem(tag, item);\r\n    loadTagChildren(tag, item);\r\n  }\r\n\r\n  m_tagTree->expandAll();\r\n\r\n  scrollToTag(m_lastTagName);\r\n}\r\n\r\nvoid TagExplorer::loadTagChildren(const QSharedPointer<Tag> &p_tag, QTreeWidgetItem *p_parentItem) {\r\n  for (const auto &child : p_tag->getChildren()) {\r\n    auto item = new QTreeWidgetItem(p_parentItem);\r\n    fillTagItem(child, item);\r\n    loadTagChildren(child, item);\r\n  }\r\n}\r\n\r\nvoid TagExplorer::fillTagItem(const QSharedPointer<Tag> &p_tag, QTreeWidgetItem *p_item) const {\r\n  p_item->setText(Column::Name, p_tag->name());\r\n  p_item->setToolTip(Column::Name, p_tag->name());\r\n  p_item->setIcon(Column::Name, m_tagIcon);\r\n  p_item->setData(Column::Name, Qt::UserRole, p_tag->name());\r\n  // set no-bold when init\r\n  QFont font = p_item->font(Column::Name);\r\n  font.setBold(false);\r\n  p_item->setFont(Column::Name, font);\r\n}\r\n\r\nvoid TagExplorer::activateTagItem() {\r\n  auto items = m_tagTree->selectedItems();\r\n  if (items.isEmpty()) {\r\n    m_lastTagName.clear();\r\n    m_nodeList->clear();\r\n    return;\r\n  }\r\n\r\n  QStringList tags;\r\n  for (const auto &item : items) {\r\n    tags.append(itemTag(item));\r\n  }\r\n\r\n  updateNodeList(tags);\r\n}\r\n\r\nQString TagExplorer::itemTag(const QTreeWidgetItem *p_item) const {\r\n  return p_item->data(Column::Name, Qt::UserRole).toString();\r\n}\r\n\r\nQString TagExplorer::itemNode(const QListWidgetItem *p_item) const {\r\n  return p_item->data(Qt::UserRole).toString();\r\n}\r\n\r\nvoid TagExplorer::updateNodeList(const QStringList &p_tags) {\r\n  m_nodeList->clear();\r\n\r\n  Q_ASSERT(m_notebook);\r\n  auto tagI = m_notebook->tag();\r\n  Q_ASSERT(tagI);\r\n\r\n  QSet<QString> nodePaths;\r\n  for (const auto &tag : p_tags) {\r\n    const auto paths = tagI->findNodesOfTag(tag);\r\n    if (nodePaths.isEmpty()) {\r\n      nodePaths.unite(QSet<QString>(paths.begin(), paths.end()));\r\n    } else {\r\n      nodePaths.intersect(QSet<QString>(paths.begin(), paths.end()));\r\n    }\r\n  }\r\n\r\n  for (const auto &pa : nodePaths) {\r\n    auto node = m_notebook->loadNodeByPath(pa);\r\n    if (!node) {\r\n      qWarning() << \"node belongs to tag in DB but not exists\" << p_tags.join(\", \") << pa;\r\n      continue;\r\n    }\r\n\r\n    auto item = new QListWidgetItem(m_nodeList);\r\n    item->setText(node->getName());\r\n    item->setToolTip(NotebookNodeExplorer::generateToolTip(node.data()));\r\n    item->setIcon(m_nodeIcon);\r\n    item->setData(Qt::UserRole, pa);\r\n  }\r\n\r\n  VNoteX::getInst().showStatusMessageShort(\r\n      tr(\"Search of tags succeeded: %1\").arg(p_tags.join(\", \")));\r\n}\r\n\r\nvoid TagExplorer::handleNodeListContextMenuRequested(const QPoint &p_pos) {\r\n  if (!m_notebook) {\r\n    return;\r\n  }\r\n\r\n  auto item = m_nodeList->itemAt(p_pos);\r\n  if (!item) {\r\n    return;\r\n  }\r\n\r\n  QMenu menu(this);\r\n\r\n  const int selectedCount = m_nodeList->selectedItems().size();\r\n\r\n  menu.addAction(tr(\"&Open\"), &menu, [this]() {\r\n    const auto selectedItems = m_nodeList->selectedItems();\r\n    for (const auto &selectedItem : selectedItems) {\r\n      openItem(selectedItem);\r\n    }\r\n  });\r\n\r\n  if (selectedCount == 1) {\r\n    menu.addAction(tr(\"&Locate Node\"), &menu, [this]() {\r\n      auto item = m_nodeList->currentItem();\r\n      if (!item) {\r\n        return;\r\n      }\r\n\r\n      auto node = m_notebook->loadNodeByPath(itemNode(item));\r\n      Q_ASSERT(node);\r\n      if (node) {\r\n        emit VNoteX::getInst().locateNodeRequested(node.data());\r\n      }\r\n    });\r\n  }\r\n\r\n  menu.exec(m_nodeList->mapToGlobal(p_pos));\r\n}\r\n\r\nvoid TagExplorer::openItem(const QListWidgetItem *p_item) {\r\n  if (!p_item) {\r\n    return;\r\n  }\r\n\r\n  Q_ASSERT(m_notebook);\r\n  auto node = m_notebook->loadNodeByPath(itemNode(p_item));\r\n  if (node) {\r\n    emit VNoteX::getInst().openNodeRequested(node.data(),\r\n                                             QSharedPointer<FileOpenParameters>::create());\r\n  }\r\n}\r\n\r\nvoid TagExplorer::handleTagTreeContextMenuRequested(const QPoint &p_pos) {\r\n  if (!m_notebook) {\r\n    return;\r\n  }\r\n\r\n  QMenu menu(this);\r\n\r\n  auto item = m_tagTree->itemAt(p_pos);\r\n\r\n  menu.addAction(tr(\"&New Tag\"), this, &TagExplorer::newTag);\r\n\r\n  if (item && m_tagTree->selectedItems().size() == 1) {\r\n    menu.addAction(tr(\"&Rename\"), this, &TagExplorer::renameTag);\r\n\r\n    menu.addAction(tr(\"&Delete\"), this, &TagExplorer::removeTag);\r\n  }\r\n\r\n  menu.exec(m_tagTree->mapToGlobal(p_pos));\r\n}\r\n\r\nvoid TagExplorer::newTag() {\r\n  Q_ASSERT(m_notebook);\r\n\r\n  QSharedPointer<Tag> parentTag;\r\n\r\n  auto item = m_tagTree->currentItem();\r\n  if (item) {\r\n    const auto tagName = itemTag(item);\r\n    parentTag = m_notebook->tag()->findTag(tagName);\r\n    Q_ASSERT(parentTag);\r\n  }\r\n\r\n  NewTagDialog dialog(m_notebook->tag(), parentTag.data(), VNoteX::getInst().getMainWindow());\r\n  dialog.exec();\r\n}\r\n\r\nvoid TagExplorer::renameTag() {\r\n  Q_ASSERT(m_notebook);\r\n  auto item = m_tagTree->currentItem();\r\n  if (!item) {\r\n    return;\r\n  }\r\n\r\n  RenameTagDialog dialog(m_notebook->tag(), itemTag(item), VNoteX::getInst().getMainWindow());\r\n  if (dialog.exec() == QDialog::Accepted) {\r\n    scrollToTag(dialog.getTagName());\r\n  }\r\n}\r\n\r\nvoid TagExplorer::removeTag() {\r\n  Q_ASSERT(m_notebook);\r\n  auto item = m_tagTree->currentItem();\r\n  if (!item) {\r\n    return;\r\n  }\r\n\r\n  const auto tagName = itemTag(item);\r\n  int okRet = MessageBoxHelper::questionOkCancel(\r\n      MessageBoxHelper::Warning, tr(\"Delete the tag and all its chlidren tags?\"),\r\n      tr(\"Only tags and the references of them will be deleted.\"), QString(),\r\n      VNoteX::getInst().getMainWindow());\r\n  if (okRet != QMessageBox::Ok) {\r\n    return;\r\n  }\r\n\r\n  if (m_notebook->tag()->removeTag(tagName)) {\r\n    VNoteX::getInst().showStatusMessageShort(tr(\"Tag deleted\"));\r\n  } else {\r\n    VNoteX::getInst().showStatusMessageShort(tr(\"Failed to delete tag: %1\").arg(tagName));\r\n  }\r\n}\r\n\r\nvoid TagExplorer::handleTagMoved(QTreeWidgetItem *p_item) {\r\n  const auto tagName = itemTag(p_item);\r\n  auto tag = m_notebook->tag()->findTag(tagName);\r\n  Q_ASSERT(tag);\r\n  const auto oldParentName = tag->getParent() ? tag->getParent()->name() : QString();\r\n  const auto newParentName = p_item->parent() ? itemTag(p_item->parent()) : QString();\r\n  if (oldParentName == newParentName) {\r\n    // Sorting tags is not supported for now.\r\n    return;\r\n  }\r\n\r\n  qDebug() << \"re-parent tag\" << tagName << oldParentName << \"->\" << newParentName;\r\n  bool ret = m_notebook->tag()->moveTag(tagName, newParentName);\r\n  if (!ret) {\r\n    MessageBoxHelper::notify(MessageBoxHelper::Type::Warning,\r\n                             tr(\"Failed to move tag (%1).\").arg(tagName),\r\n                             VNoteX::getInst().getMainWindow());\r\n  }\r\n}\r\n\r\nvoid TagExplorer::scrollToTag(const QString &p_name) {\r\n  if (p_name.isEmpty()) {\r\n    return;\r\n  }\r\n\r\n  auto item = TreeWidget::findItem(m_tagTree, p_name, Column::Name);\r\n  if (item) {\r\n    m_tagTree->setCurrentItem(item);\r\n    m_tagTree->scrollToItem(item);\r\n  }\r\n}\r\n\r\nvoid TagExplorer::filterTags(const QString &p_text) {\r\n  std::function<void(QTreeWidgetItem *)> processItem = [&](QTreeWidgetItem *p_item) {\r\n    bool show = p_item->text(Column::Name).contains(p_text, Qt::CaseInsensitive);\r\n\r\n    for (int i = 0; i < p_item->childCount(); ++i) {\r\n      processItem(p_item->child(i));\r\n      if (!p_item->child(i)->isHidden()) {\r\n        show = true;\r\n      }\r\n    }\r\n\r\n    p_item->setHidden(!show);\r\n  };\r\n\r\n  for (int i = 0; i < m_tagTree->topLevelItemCount(); ++i) {\r\n    processItem(m_tagTree->topLevelItem(i));\r\n  }\r\n}\r\n"
  },
  {
    "path": "src/widgets/tagexplorer.h",
    "content": "#ifndef TAGEXPLORER_H\r\n#define TAGEXPLORER_H\r\n\r\n#include <QComboBox>\r\n#include <QFrame>\r\n#include <QScopedPointer>\r\n#include <QSharedPointer>\r\n\r\n#include \"navigationmodewrapper.h\"\r\n\r\nclass QListWidget;\r\nclass QListWidgetItem;\r\nclass QTreeWidget;\r\nclass QTreeWidgetItem;\r\nclass QSplitter;\r\n\r\nnamespace vnotex {\r\nclass TitleBar;\r\nclass Notebook;\r\nclass Tag;\r\nclass TreeWidget;\r\n\r\nclass TagExplorer : public QFrame {\r\n  Q_OBJECT\r\npublic:\r\n  explicit TagExplorer(QWidget *p_parent = nullptr);\r\n\r\n  QByteArray saveState() const;\r\n\r\n  void restoreState(const QByteArray &p_data);\r\n\r\npublic slots:\r\n  void setNotebook(const QSharedPointer<Notebook> &p_notebook);\r\n\r\nprivate slots:\r\n  void handleNodeListContextMenuRequested(const QPoint &p_pos);\r\n\r\n  void handleTagTreeContextMenuRequested(const QPoint &p_pos);\r\n\r\n  void handleTagMoved(QTreeWidgetItem *p_item);\r\n\r\n  void filterTags(const QString &p_text);\r\n\r\nprivate:\r\n  enum Column { Name = 0 };\r\n\r\n  void initIcons();\r\n\r\n  void setupUI();\r\n\r\n  void setupTitleBar(QWidget *p_parent = nullptr);\r\n\r\n  void setupTagTree(QWidget *p_parent = nullptr);\r\n\r\n  void setupNodeList(QWidget *p_parent = nullptr);\r\n\r\n  void setTwoColumnsEnabled(bool p_enabled);\r\n\r\n  void updateTags();\r\n\r\n  void loadTagChildren(const QSharedPointer<Tag> &p_tag, QTreeWidgetItem *p_parentItem);\r\n\r\n  void fillTagItem(const QSharedPointer<Tag> &p_tag, QTreeWidgetItem *p_item) const;\r\n\r\n  void activateTagItem();\r\n\r\n  QString itemTag(const QTreeWidgetItem *p_item) const;\r\n\r\n  QString itemNode(const QListWidgetItem *p_item) const;\r\n\r\n  void updateNodeList(const QStringList &p_tags);\r\n\r\n  void openItem(const QListWidgetItem *p_item);\r\n\r\n  void newTag();\r\n\r\n  void renameTag();\r\n\r\n  void removeTag();\r\n\r\n  void scrollToTag(const QString &p_name);\r\n\r\n  QSharedPointer<Notebook> m_notebook;\r\n\r\n  // Used to cache current selected tag after update.\r\n  QString m_lastTagName;\r\n\r\n  TitleBar *m_titleBar = nullptr;\r\n\r\n  QSplitter *m_splitter = nullptr;\r\n\r\n  TreeWidget *m_tagTree = nullptr;\r\n\r\n  QScopedPointer<NavigationModeWrapper<QTreeWidget, QTreeWidgetItem>> m_tagTreeNavigationWrapper;\r\n\r\n  QListWidget *m_nodeList = nullptr;\r\n\r\n  QScopedPointer<NavigationModeWrapper<QListWidget, QListWidgetItem>> m_nodeListNavigationWrapper;\r\n\r\n  QIcon m_tagIcon;\r\n\r\n  QIcon m_nodeIcon;\r\n\r\n  QComboBox *m_tagSearchEdit = nullptr;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // TAGEXPLORER_H\r\n"
  },
  {
    "path": "src/widgets/tagpopup.cpp",
    "content": "#include \"tagpopup.h\"\r\n\r\n#include <buffer/buffer.h>\r\n#include <utils/widgetutils.h>\r\n\r\n#include \"tagviewer.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nTagPopup::TagPopup(QToolButton *p_btn, QWidget *p_parent) : ButtonPopup(p_btn, p_parent) {\r\n  setupUI();\r\n\r\n  connect(this, &QMenu::aboutToShow, this, [this]() {\r\n    m_tagViewer->setNode(m_buffer ? m_buffer->getNode() : nullptr);\r\n    // Enable input method.\r\n    m_tagViewer->activateWindow();\r\n    m_tagViewer->setFocus();\r\n  });\r\n\r\n  connect(this, &QMenu::aboutToHide, m_tagViewer, &TagViewer::save);\r\n}\r\n\r\nvoid TagPopup::setupUI() {\r\n  m_tagViewer = new TagViewer(true, this);\r\n  m_tagViewer->setMinimumSize(256, 320);\r\n  addWidget(m_tagViewer);\r\n}\r\n\r\nvoid TagPopup::setBuffer(Buffer *p_buffer) {\r\n  if (m_buffer == p_buffer) {\r\n    return;\r\n  }\r\n\r\n  m_buffer = p_buffer;\r\n}\r\n"
  },
  {
    "path": "src/widgets/tagpopup.h",
    "content": "#ifndef TAGPOPUP_H\r\n#define TAGPOPUP_H\r\n\r\n#include \"buttonpopup.h\"\r\n\r\nclass QToolButton;\r\n\r\nnamespace vnotex {\r\nclass Buffer;\r\nclass TagViewer;\r\n\r\nclass TagPopup : public ButtonPopup {\r\n  Q_OBJECT\r\npublic:\r\n  TagPopup(QToolButton *p_btn, QWidget *p_parent = nullptr);\r\n\r\n  void setBuffer(Buffer *p_buffer);\r\n\r\nprivate:\r\n  void setupUI();\r\n\r\n  Buffer *m_buffer = nullptr;\r\n\r\n  // Managed by QObject.\r\n  TagViewer *m_tagViewer = nullptr;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // TAGPOPUP_H\r\n"
  },
  {
    "path": "src/widgets/tagviewer.cpp",
    "content": "#include \"tagviewer.h\"\r\n\r\n#include <QGuiApplication>\r\n#include <QHash>\r\n#include <QKeyEvent>\r\n#include <QLabel>\r\n#include <QListWidgetItem>\r\n#include <QRegularExpression>\r\n#include <QRegularExpressionValidator>\r\n#include <QVBoxLayout>\r\n\r\n#include <core/vnotex.h>\r\n#include <notebook/node.h>\r\n#include <notebook/notebook.h>\r\n#include <notebook/tagi.h>\r\n#include <utils/iconutils.h>\r\n#include <utils/widgetutils.h>\r\n\r\n#include \"lineedit.h\"\r\n#include \"listwidget.h\"\r\n#include \"mainwindow.h\"\r\n#include \"messageboxhelper.h\"\r\n#include \"styleditemdelegate.h\"\r\n#include \"widgetsfactory.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nQIcon TagViewer::s_tagIcon;\r\n\r\nQIcon TagViewer::s_selectedTagIcon;\r\n\r\nTagViewer::TagViewer(bool p_isPopup, QWidget *p_parent) : QFrame(p_parent), m_isPopup(p_isPopup) {\r\n  initIcons();\r\n\r\n  setupUI();\r\n}\r\n\r\nvoid TagViewer::setupUI() {\r\n  auto mainLayout = new QVBoxLayout(this);\r\n\r\n  m_searchLineEdit = static_cast<LineEdit *>(WidgetsFactory::createLineEdit(this));\r\n  m_searchLineEdit->setPlaceholderText(tr(\"Enter to add a tag\"));\r\n  m_searchLineEdit->setToolTip(tr(\"[Shift+Enter] to add current selected tag in the list\"));\r\n  connect(m_searchLineEdit, &QLineEdit::textChanged, this, &TagViewer::searchAndFilter);\r\n  connect(m_searchLineEdit, &QLineEdit::returnPressed, this,\r\n          &TagViewer::handleSearchLineEditReturnPressed);\r\n  mainLayout->addWidget(m_searchLineEdit);\r\n\r\n  auto tagNameValidator =\r\n      new QRegularExpressionValidator(QRegularExpression(\"[^>]*\"), m_searchLineEdit);\r\n  m_searchLineEdit->setValidator(tagNameValidator);\r\n\r\n  setFocusProxy(m_searchLineEdit);\r\n  if (m_isPopup) {\r\n    m_searchLineEdit->installEventFilter(this);\r\n  }\r\n\r\n  m_tagList = new ListWidget(this);\r\n  m_tagList->setWrapping(true);\r\n  m_tagList->setFlow(QListView::LeftToRight);\r\n  m_tagList->setIconSize(QSize(18, 18));\r\n  connect(m_tagList, &QListWidget::itemClicked, this, &TagViewer::toggleItemTag);\r\n  connect(m_tagList, &QListWidget::itemActivated, this, &TagViewer::toggleItemTag);\r\n  mainLayout->addWidget(m_tagList);\r\n\r\n  if (m_isPopup) {\r\n    m_tagList->installEventFilter(this);\r\n  }\r\n}\r\n\r\nbool TagViewer::eventFilter(QObject *p_obj, QEvent *p_event) {\r\n  if (m_isPopup && (p_obj == m_searchLineEdit || p_obj == m_tagList) &&\r\n      p_event->type() == QEvent::KeyPress) {\r\n    auto keyEve = static_cast<QKeyEvent *>(p_event);\r\n    const auto key = keyEve->key();\r\n    if (key == Qt::Key_Tab || key == Qt::Key_Backtab) {\r\n      // Change focus.\r\n      if (p_obj == m_searchLineEdit) {\r\n        m_tagList->setFocus();\r\n      } else {\r\n        m_searchLineEdit->setFocus();\r\n      }\r\n      return true;\r\n    }\r\n  }\r\n\r\n  return QFrame::eventFilter(p_obj, p_event);\r\n}\r\n\r\nvoid TagViewer::setNode(Node *p_node) {\r\n  // Since there may be update on tags, always update the list.\r\n  // When first time viewing the tags of one node, it is a good chance to sync the node's tag to DB.\r\n  if (m_node != p_node) {\r\n    m_node = p_node;\r\n    if (m_node) {\r\n      bool ret = tagI()->updateNodeTags(m_node);\r\n      if (!ret) {\r\n        qWarning() << \"failed to update tags of node\" << m_node->fetchPath();\r\n      }\r\n    }\r\n  }\r\n\r\n  m_hasChange = false;\r\n\r\n  updateTagList();\r\n}\r\n\r\nvoid TagViewer::updateTagList() {\r\n  m_tagList->clear();\r\n  if (!m_node) {\r\n    return;\r\n  }\r\n\r\n  QSet<QString> tagsAdded;\r\n  const auto &nodeTags = m_node->getTags();\r\n  for (const auto &tag : nodeTags) {\r\n    if (tagsAdded.contains(tag)) {\r\n      continue;\r\n    }\r\n\r\n    tagsAdded.insert(tag);\r\n    addTagItem(tag, true);\r\n  }\r\n\r\n  const auto &allTags = tagI()->getTopLevelTags();\r\n  for (const auto &tag : allTags) {\r\n    addTags(tag, tagsAdded);\r\n  }\r\n\r\n  if (!tagsAdded.isEmpty()) {\r\n    m_tagList->setCurrentRow(0);\r\n    // Qt's BUG: need to set it again to make it in grid form after setCurrentRow().\r\n    m_tagList->setWrapping(true);\r\n  }\r\n}\r\n\r\nvoid TagViewer::addTags(const QSharedPointer<Tag> &p_tag, QSet<QString> &p_addedTags) {\r\n  // Itself.\r\n  if (!p_addedTags.contains(p_tag->name())) {\r\n    p_addedTags.insert(p_tag->name());\r\n    addTagItem(p_tag->name(), false);\r\n  }\r\n\r\n  // Children.\r\n  for (const auto &child : p_tag->getChildren()) {\r\n    addTags(child, p_addedTags);\r\n  }\r\n}\r\n\r\nvoid TagViewer::initIcons() {\r\n  if (!s_tagIcon.isNull()) {\r\n    return;\r\n  }\r\n\r\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\r\n  s_tagIcon = IconUtils::fetchIcon(themeMgr.getIconFile(QStringLiteral(\"tag.svg\")));\r\n  s_selectedTagIcon =\r\n      IconUtils::fetchIcon(themeMgr.getIconFile(QStringLiteral(\"tag_selected.svg\")));\r\n}\r\n\r\nvoid TagViewer::addTagItem(const QString &p_tagName, bool p_selected, bool p_prepend) {\r\n  auto item = new QListWidgetItem(p_tagName);\r\n  if (!p_prepend) {\r\n    m_tagList->addItem(item);\r\n  } else {\r\n    m_tagList->insertItem(0, item);\r\n  }\r\n\r\n  item->setToolTip(p_tagName);\r\n  item->setData(Qt::UserRole, p_tagName);\r\n  setItemTagSelected(item, p_selected);\r\n}\r\n\r\nQString TagViewer::itemTag(const QListWidgetItem *p_item) const {\r\n  return p_item->data(Qt::UserRole).toString();\r\n}\r\n\r\nbool TagViewer::isItemTagSelected(const QListWidgetItem *p_item) const {\r\n  return p_item->data(UserRole2).toBool();\r\n}\r\n\r\nTagI *TagViewer::tagI() { return m_node->getNotebook()->tag(); }\r\n\r\nvoid TagViewer::searchAndFilter(const QString &p_text) {\r\n  // Take the last tag for search.\r\n  const auto text = p_text.trimmed();\r\n\r\n  if (text.isEmpty()) {\r\n    // Show all items.\r\n    filterItems([](const QListWidgetItem *) { return true; });\r\n    return;\r\n  }\r\n\r\n  filterItems([this, &text](const QListWidgetItem *p_item) {\r\n    if (itemTag(p_item).contains(text)) {\r\n      return true;\r\n    }\r\n    return false;\r\n  });\r\n}\r\n\r\nvoid TagViewer::filterItems(const std::function<bool(const QListWidgetItem *)> &p_judge) {\r\n  QListWidgetItem *firstHit = nullptr;\r\n  ListWidget::forEachItem(m_tagList, [&firstHit, &p_judge](QListWidgetItem *itemIter) {\r\n    if (p_judge(itemIter)) {\r\n      if (!firstHit) {\r\n        firstHit = itemIter;\r\n      }\r\n      itemIter->setHidden(false);\r\n    } else {\r\n      itemIter->setHidden(true);\r\n    }\r\n    return true;\r\n  });\r\n  m_tagList->setCurrentItem(firstHit);\r\n}\r\n\r\nvoid TagViewer::handleSearchLineEditReturnPressed() {\r\n  if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) {\r\n    // Add current selected tag in the list.\r\n    auto item = m_tagList->currentItem();\r\n    if (item && !isItemTagSelected(item)) {\r\n      setItemTagSelected(item, true);\r\n      m_searchLineEdit->clear();\r\n      m_hasChange = true;\r\n    }\r\n  } else {\r\n    // Decode input text and add tags.\r\n    const auto tagName = m_searchLineEdit->text().trimmed();\r\n    if (tagName.isEmpty()) {\r\n      return;\r\n    }\r\n\r\n    if (auto item = findItem(tagName)) {\r\n      // Add existing tag.\r\n      setItemTagSelected(item, true);\r\n    } else {\r\n      // Add new tag.\r\n      addTagItem(tagName, true, true);\r\n    }\r\n\r\n    m_searchLineEdit->clear();\r\n    m_hasChange = true;\r\n  }\r\n}\r\n\r\nvoid TagViewer::toggleItemTag(QListWidgetItem *p_item) {\r\n  m_hasChange = true;\r\n  setItemTagSelected(p_item, !isItemTagSelected(p_item));\r\n}\r\n\r\nvoid TagViewer::setItemTagSelected(QListWidgetItem *p_item, bool p_selected) {\r\n  p_item->setIcon(p_selected ? s_selectedTagIcon : s_tagIcon);\r\n  p_item->setData(UserRole2, p_selected);\r\n}\r\n\r\nQListWidgetItem *TagViewer::findItem(const QString &p_tagName) const {\r\n  return ListWidget::findItem(m_tagList, p_tagName);\r\n}\r\n\r\nvoid TagViewer::save() {\r\n  if (!m_node || !m_hasChange) {\r\n    return;\r\n  }\r\n\r\n  QHash<QString, int> selectedTags;\r\n  ListWidget::forEachItem(m_tagList, [this, &selectedTags](QListWidgetItem *itemIter) {\r\n    if (isItemTagSelected(itemIter)) {\r\n      selectedTags.insert(itemTag(itemIter), 0);\r\n    }\r\n    return true;\r\n  });\r\n\r\n  if (selectedTags.size() == m_node->getTags().size()) {\r\n    bool same = true;\r\n    for (const auto &tag : m_node->getTags()) {\r\n      auto iter = selectedTags.find(tag);\r\n      if (iter == selectedTags.end()) {\r\n        same = false;\r\n        break;\r\n      } else {\r\n        iter.value()++;\r\n        if (iter.value() > 1) {\r\n          same = false;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (same) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  bool ret = tagI()->updateNodeTags(m_node, selectedTags.keys());\r\n  if (ret) {\r\n    VNoteX::getInst().showStatusMessageShort(\r\n        tr(\"Tags updated: %1\").arg(m_node->getTags().join(QLatin1String(\"; \"))));\r\n  } else {\r\n    MessageBoxHelper::notify(MessageBoxHelper::Type::Warning,\r\n                             tr(\"Failed to update tags of node (%1).\").arg(m_node->getName()),\r\n                             VNoteX::getInst().getMainWindow());\r\n  }\r\n}\r\n"
  },
  {
    "path": "src/widgets/tagviewer.h",
    "content": "#ifndef TAGVIEWER_H\r\n#define TAGVIEWER_H\r\n\r\n#include <QFrame>\r\n\r\n#include <functional>\r\n\r\n#include <QIcon>\r\n#include <QSet>\r\n#include <QSharedPointer>\r\n\r\nclass QListWidget;\r\nclass QListWidgetItem;\r\n\r\nnamespace vnotex {\r\nclass LineEdit;\r\nclass Node;\r\nclass TagI;\r\nclass Tag;\r\n\r\nclass TagViewer : public QFrame {\r\n  Q_OBJECT\r\npublic:\r\n  TagViewer(bool p_isPopup, QWidget *p_parent = nullptr);\r\n\r\n  void setNode(Node *p_node);\r\n\r\n  void save();\r\n\r\nprotected:\r\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\r\n\r\nprivate:\r\n  void setupUI();\r\n\r\n  void updateTagList();\r\n\r\n  TagI *tagI();\r\n\r\n  void addTagItem(const QString &p_tagName, bool p_selected, bool p_prepend = false);\r\n\r\n  QString itemTag(const QListWidgetItem *p_item) const;\r\n\r\n  bool isItemTagSelected(const QListWidgetItem *p_item) const;\r\n\r\n  void addTags(const QSharedPointer<Tag> &p_tag, QSet<QString> &p_addedTags);\r\n\r\n  void searchAndFilter(const QString &p_text);\r\n\r\n  void filterItems(const std::function<bool(const QListWidgetItem *)> &p_judge);\r\n\r\n  void handleSearchLineEditReturnPressed();\r\n\r\n  void toggleItemTag(QListWidgetItem *p_item);\r\n\r\n  void setItemTagSelected(QListWidgetItem *p_item, bool p_selected);\r\n\r\n  QListWidgetItem *findItem(const QString &p_tagName) const;\r\n\r\n  static void initIcons();\r\n\r\n  bool m_isPopup = false;\r\n\r\n  // View the tags of @m_node.\r\n  Node *m_node = nullptr;\r\n\r\n  bool m_hasChange = false;\r\n\r\n  LineEdit *m_searchLineEdit = nullptr;\r\n\r\n  QListWidget *m_tagList = nullptr;\r\n\r\n  static QIcon s_tagIcon;\r\n\r\n  static QIcon s_selectedTagIcon;\r\n};\r\n} // namespace vnotex\r\n\r\n#endif // TAGVIEWER_H\r\n"
  },
  {
    "path": "src/widgets/textviewwindow.cpp",
    "content": "#include \"textviewwindow.h\"\n\n#include <QDebug>\n#include <QPrinter>\n#include <QScrollBar>\n#include <QTextDocument>\n#include <QToolBar>\n\n#include <core/coreconfig.h>\n#include <core/editorconfig.h>\n#include <vtextedit/vtextedit.h>\n\n#include \"editors/statuswidget.h\"\n#include \"editors/texteditor.h\"\n#include \"textviewwindowhelper.h\"\n#include \"toolbarhelper.h\"\n#include <core/fileopenparameters.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/printutils.h>\n\nusing namespace vnotex;\n\nTextViewWindow::TextViewWindow(QWidget *p_parent) : ViewWindow(p_parent) {\n  m_mode = ViewWindowMode::Edit;\n  setupUI();\n}\n\nvoid TextViewWindow::setupUI() {\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const auto &textEditorConfig = editorConfig.getTextEditorConfig();\n\n  updateConfigRevision();\n\n  // Central widget.\n  {\n    m_editor = new TextEditor(createTextEditorConfig(editorConfig, textEditorConfig),\n                              createTextEditorParameters(editorConfig, textEditorConfig), this);\n    setCentralWidget(m_editor);\n\n    connect(m_editor, &TextEditor::applySnippetRequested, this,\n            QOverload<>::of(&TextViewWindow::applySnippet));\n\n    updateEditorFromConfig();\n  }\n\n  TextViewWindowHelper::connectEditor(this);\n\n  // Status widget.\n  {\n    auto statusWidget = QSharedPointer<StatusWidget>::create();\n    statusWidget->setEditorStatusWidget(m_editor->statusWidget());\n    setStatusWidget(statusWidget);\n  }\n\n  setupToolBar();\n}\n\nvoid TextViewWindow::setupToolBar() {\n  auto toolBar = createToolBar(this);\n  addToolBar(toolBar);\n\n  addAction(toolBar, ViewWindowToolBarHelper::Save);\n  addAction(toolBar, ViewWindowToolBarHelper::WordCount);\n\n  toolBar->addSeparator();\n\n  addAction(toolBar, ViewWindowToolBarHelper::Attachment);\n  addAction(toolBar, ViewWindowToolBarHelper::Tag);\n\n  ToolBarHelper::addSpacer(toolBar);\n\n  addAction(toolBar, ViewWindowToolBarHelper::FindAndReplace);\n  addAction(toolBar, ViewWindowToolBarHelper::Print);\n}\n\nvoid TextViewWindow::handleBufferChangedInternal(\n    const QSharedPointer<FileOpenParameters> &p_paras) {\n  Q_UNUSED(p_paras);\n  TextViewWindowHelper::handleBufferChanged(this);\n\n  handleFileOpenParameters(p_paras);\n}\n\nvoid TextViewWindow::syncEditorFromBuffer() {\n  const bool old = m_propogateEditorToBuffer;\n  m_propogateEditorToBuffer = false;\n\n  auto buffer = getBuffer();\n  if (buffer) {\n    m_editor->setSyntax(QFileInfo(buffer->getPath()).suffix());\n    m_editor->setReadOnly(buffer->isReadOnly());\n    m_editor->setText(buffer->getContent());\n    m_editor->setModified(buffer->isModified());\n  } else {\n    m_editor->setSyntax(\"\");\n    m_editor->setReadOnly(true);\n    m_editor->setText(\"\");\n    m_editor->setModified(false);\n  }\n\n  m_bufferRevision = buffer ? buffer->getRevision() : 0;\n  m_propogateEditorToBuffer = old;\n}\n\nvoid TextViewWindow::syncEditorFromBufferContent() {\n  const bool old = m_propogateEditorToBuffer;\n  m_propogateEditorToBuffer = false;\n\n  auto buffer = getBuffer();\n  Q_ASSERT(buffer);\n  m_editor->setText(buffer->getContent());\n  m_editor->setModified(buffer->isModified());\n\n  m_bufferRevision = buffer->getRevision();\n  m_propogateEditorToBuffer = old;\n}\n\nQString TextViewWindow::getLatestContent() const { return m_editor->getText(); }\n\nvoid TextViewWindow::setModified(bool p_modified) { m_editor->setModified(p_modified); }\n\nvoid TextViewWindow::handleEditorConfigChange() {\n  if (updateConfigRevision()) {\n    const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n    const auto &textEditorConfig = editorConfig.getTextEditorConfig();\n\n    auto config = createTextEditorConfig(editorConfig, textEditorConfig);\n    m_editor->setConfig(config);\n\n    updateEditorFromConfig();\n  }\n}\n\nbool TextViewWindow::updateConfigRevision() {\n  bool changed = false;\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  if (m_editorConfigRevision != editorConfig.revision()) {\n    changed = true;\n    m_editorConfigRevision = editorConfig.revision();\n  }\n\n  if (m_textEditorConfigRevision != editorConfig.getTextEditorConfig().revision()) {\n    changed = true;\n    m_textEditorConfigRevision = editorConfig.getTextEditorConfig().revision();\n  }\n\n  return changed;\n}\n\nvoid TextViewWindow::setMode(ViewWindowMode p_mode) {\n  Q_UNUSED(p_mode);\n  Q_ASSERT(false);\n}\n\nQSharedPointer<vte::TextEditorConfig>\nTextViewWindow::createTextEditorConfig(const EditorConfig &p_editorConfig,\n                                       const TextEditorConfig &p_config) {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  auto config = TextViewWindowHelper::createTextEditorConfig(\n      p_config, p_editorConfig.getViConfig(), themeMgr.getFile(Theme::File::TextEditorStyle),\n      themeMgr.getEditorHighlightTheme(), p_editorConfig.getLineEndingPolicy());\n  return config;\n}\n\nQSharedPointer<vte::TextEditorParameters>\nTextViewWindow::createTextEditorParameters(const EditorConfig &p_editorConfig,\n                                           const TextEditorConfig &p_config) {\n  auto paras = QSharedPointer<vte::TextEditorParameters>::create();\n  paras->m_spellCheckEnabled = p_config.isSpellCheckEnabled();\n  paras->m_autoDetectLanguageEnabled = p_editorConfig.isSpellCheckAutoDetectLanguageEnabled();\n  paras->m_defaultSpellCheckLanguage = p_editorConfig.getSpellCheckDefaultDictionary();\n  return paras;\n}\n\nvoid TextViewWindow::scrollUp() {\n  QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar();\n  if (vbar && (vbar->minimum() != vbar->maximum())) {\n    vbar->triggerAction(QAbstractSlider::SliderSingleStepAdd);\n  }\n}\n\nvoid TextViewWindow::scrollDown() {\n  QScrollBar *vbar = m_editor->getTextEdit()->verticalScrollBar();\n  if (vbar && (vbar->minimum() != vbar->maximum())) {\n    vbar->triggerAction(QAbstractSlider::SliderSingleStepSub);\n  }\n}\n\nvoid TextViewWindow::zoom(bool p_zoomIn) {\n  m_editor->zoom(m_editor->zoomDelta() + (p_zoomIn ? 1 : -1));\n  auto &textEditorConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig();\n  textEditorConfig.setZoomDelta(m_editor->zoomDelta());\n  showZoomDelta(m_editor->zoomDelta());\n}\n\nvoid TextViewWindow::handleFindTextChanged(const QString &p_text, FindOptions p_options) {\n  TextViewWindowHelper::handleFindTextChanged(this, p_text, p_options);\n}\n\nvoid TextViewWindow::handleFindNext(const QStringList &p_texts, FindOptions p_options) {\n  TextViewWindowHelper::handleFindNext(this, p_texts, p_options);\n}\n\nvoid TextViewWindow::handleReplace(const QString &p_text, FindOptions p_options,\n                                   const QString &p_replaceText) {\n  TextViewWindowHelper::handleReplace(this, p_text, p_options, p_replaceText);\n}\n\nvoid TextViewWindow::handleReplaceAll(const QString &p_text, FindOptions p_options,\n                                      const QString &p_replaceText) {\n  TextViewWindowHelper::handleReplaceAll(this, p_text, p_options, p_replaceText);\n}\n\nvoid TextViewWindow::handleFindAndReplaceWidgetClosed() {\n  TextViewWindowHelper::clearSearchHighlights(this);\n}\n\nvoid TextViewWindow::updateEditorFromConfig() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const auto &textEditorConfig = editorConfig.getTextEditorConfig();\n\n  if (textEditorConfig.getZoomDelta() != 0) {\n    m_editor->zoom(textEditorConfig.getZoomDelta());\n  }\n\n  {\n    vte::Key leaderKey(coreConfig.getShortcutLeaderKey());\n    m_editor->setLeaderKeyToSkip(leaderKey.m_key, leaderKey.m_modifiers);\n  }\n}\n\nvoid TextViewWindow::openTwice(const QSharedPointer<FileOpenParameters> &p_paras) {\n  handleFileOpenParameters(p_paras);\n}\n\nvoid TextViewWindow::handleFileOpenParameters(const QSharedPointer<FileOpenParameters> &p_paras) {\n  if (!p_paras) {\n    return;\n  }\n\n  if (p_paras->m_lineNumber > -1) {\n    m_editor->scrollToLine(p_paras->m_lineNumber, true);\n  }\n\n  if (p_paras->m_searchToken) {\n    TextViewWindowHelper::findTextBySearchToken(this, p_paras->m_searchToken,\n                                                p_paras->m_lineNumber);\n  }\n}\n\nViewWindowSession TextViewWindow::saveSession() const {\n  auto session = ViewWindow::saveSession();\n  if (getBuffer()) {\n    session.m_lineNumber = m_editor->getCursorPosition().first;\n  }\n  return session;\n}\n\nvoid TextViewWindow::applySnippet(const QString &p_name) {\n  TextViewWindowHelper::applySnippet(this, p_name);\n}\n\nvoid TextViewWindow::applySnippet() { TextViewWindowHelper::applySnippet(this); }\n\nQPoint TextViewWindow::getFloatingWidgetPosition() {\n  return TextViewWindowHelper::getFloatingWidgetPosition(this);\n}\n\nQString TextViewWindow::selectedText() const {\n  Q_ASSERT(m_editor);\n  return m_editor->getTextEdit()->selectedText();\n}\n\nvoid TextViewWindow::print() {\n  auto printer = PrintUtils::promptForPrint(m_editor->getTextEdit()->hasSelection(), this);\n  if (printer) {\n    m_editor->getTextEdit()->print(printer.data());\n  }\n}\n\nvoid TextViewWindow::clearHighlights() { TextViewWindowHelper::clearSearchHighlights(this); }\n\nvoid TextViewWindow::fetchWordCountInfo(\n    const std::function<void(const WordCountInfo &)> &p_callback) const {\n  auto text = selectedText();\n  if (text.isEmpty()) {\n    text = getLatestContent();\n    auto info = TextViewWindowHelper::calculateWordCountInfo(text);\n    info.m_isSelection = false;\n    p_callback(info);\n  } else {\n    auto info = TextViewWindowHelper::calculateWordCountInfo(text);\n    info.m_isSelection = true;\n    p_callback(info);\n  }\n}\n"
  },
  {
    "path": "src/widgets/textviewwindow.h",
    "content": "#ifndef TEXTVIEWWINDOW_H\n#define TEXTVIEWWINDOW_H\n\n#include \"viewwindow.h\"\n\nnamespace vte {\nclass TextEditorConfig;\nstruct TextEditorParameters;\n} // namespace vte\n\nnamespace vnotex {\nclass TextEditor;\nclass TextEditorConfig;\nclass EditorConfig;\n\nclass TextViewWindow : public ViewWindow {\n  Q_OBJECT\npublic:\n  friend class TextViewWindowHelper;\n\n  explicit TextViewWindow(QWidget *p_parent = nullptr);\n\n  QString getLatestContent() const Q_DECL_OVERRIDE;\n\n  QString selectedText() const Q_DECL_OVERRIDE;\n\n  void setMode(ViewWindowMode p_mode) Q_DECL_OVERRIDE;\n\n  void openTwice(const QSharedPointer<FileOpenParameters> &p_paras) Q_DECL_OVERRIDE;\n\n  ViewWindowSession saveSession() const Q_DECL_OVERRIDE;\n\n  void applySnippet(const QString &p_name) Q_DECL_OVERRIDE;\n\n  void applySnippet() Q_DECL_OVERRIDE;\n\n  void fetchWordCountInfo(const std::function<void(const WordCountInfo &)> &p_callback) const\n      Q_DECL_OVERRIDE;\n\npublic slots:\n  void handleEditorConfigChange() Q_DECL_OVERRIDE;\n\nprotected slots:\n  void setModified(bool p_modified) Q_DECL_OVERRIDE;\n\n  void\n  handleBufferChangedInternal(const QSharedPointer<FileOpenParameters> &p_paras) Q_DECL_OVERRIDE;\n\n  void handleFindTextChanged(const QString &p_text, FindOptions p_options) Q_DECL_OVERRIDE;\n\n  void handleFindNext(const QStringList &p_texts, FindOptions p_options) Q_DECL_OVERRIDE;\n\n  void handleReplace(const QString &p_text, FindOptions p_options,\n                     const QString &p_replaceText) Q_DECL_OVERRIDE;\n\n  void handleReplaceAll(const QString &p_text, FindOptions p_options,\n                        const QString &p_replaceText) Q_DECL_OVERRIDE;\n\n  void handleFindAndReplaceWidgetClosed() Q_DECL_OVERRIDE;\n\n  void print() Q_DECL_OVERRIDE;\n\nprotected:\n  void syncEditorFromBuffer() Q_DECL_OVERRIDE;\n\n  void syncEditorFromBufferContent() Q_DECL_OVERRIDE;\n\n  void scrollUp() Q_DECL_OVERRIDE;\n\n  void scrollDown() Q_DECL_OVERRIDE;\n\n  void zoom(bool p_zoomIn) Q_DECL_OVERRIDE;\n\n  QPoint getFloatingWidgetPosition() Q_DECL_OVERRIDE;\n\n  void clearHighlights() Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void setupToolBar();\n\n  void updateEditorFromConfig();\n\n  void handleFileOpenParameters(const QSharedPointer<FileOpenParameters> &p_paras);\n\n  bool updateConfigRevision();\n\n  static QSharedPointer<vte::TextEditorConfig>\n  createTextEditorConfig(const EditorConfig &p_editorConfig, const TextEditorConfig &p_config);\n\n  static QSharedPointer<vte::TextEditorParameters>\n  createTextEditorParameters(const EditorConfig &p_editorConfig, const TextEditorConfig &p_config);\n\n  // Managed by QObject.\n  TextEditor *m_editor = nullptr;\n\n  // Whether propogate the state from editor to buffer.\n  bool m_propogateEditorToBuffer = false;\n\n  int m_textEditorConfigRevision = 0;\n};\n} // namespace vnotex\n\n#endif // TEXTVIEWWINDOW_H\n"
  },
  {
    "path": "src/widgets/textviewwindowhelper.h",
    "content": "#ifndef TEXTVIEWWINDOWHELPER_H\n#define TEXTVIEWWINDOWHELPER_H\n\n#include <QFileInfo>\n#include <QRegularExpression>\n#include <QSharedPointer>\n#include <QTextBlock>\n#include <QTextCursor>\n\n#include <core/configmgr.h>\n#include <core/texteditorconfig.h>\n#include <search/searchtoken.h>\n#include <snippet/snippetmgr.h>\n#include <utils/widgetutils.h>\n#include <vtextedit/texteditorconfig.h>\n#include <vtextedit/vtextedit.h>\n\n#include \"quickselector.h\"\n#include \"viewwindow.h\"\n\nnamespace vte {\nclass ViConfig;\n}\n\nnamespace vnotex {\nclass TextEditorConfig;\n\n// Abstract some common logics for TextViewWindow and MarkdownViewWindow.\nclass TextViewWindowHelper {\npublic:\n  TextViewWindowHelper() = delete;\n\n  template <typename _ViewWindow> static void connectEditor(_ViewWindow *p_win) {\n    auto editor = p_win->m_editor;\n    p_win->connect(editor, &vte::VTextEditor::focusIn, p_win,\n                   [p_win]() { emit p_win->focused(p_win); });\n\n    p_win->connect(editor->getTextEdit(), &vte::VTextEdit::contentsChanged, p_win,\n                   [p_win, editor]() {\n                     if (p_win->m_propogateEditorToBuffer) {\n                       p_win->getBuffer()->setModified(editor->isModified());\n                       p_win->getBuffer()->invalidateContent(p_win, [p_win](int p_revision) {\n                         p_win->setBufferRevisionAfterInvalidation(p_revision);\n                       });\n                     }\n                   });\n  }\n\n  template <typename _ViewWindow> static void handleBufferChanged(_ViewWindow *p_win) {\n    p_win->m_propogateEditorToBuffer = false;\n    p_win->syncEditorFromBuffer();\n    p_win->m_propogateEditorToBuffer = true;\n\n    emit p_win->statusChanged();\n    emit p_win->modeChanged();\n  }\n\n  static QSharedPointer<vte::TextEditorConfig>\n  createTextEditorConfig(const TextEditorConfig &p_config,\n                         const QSharedPointer<vte::ViConfig> &p_viConfig,\n                         const QString &p_themeFile, const QString &p_syntaxTheme,\n                         LineEndingPolicy p_lineEndingPolicy) {\n    auto editorConfig = QSharedPointer<vte::TextEditorConfig>::create();\n\n    editorConfig->m_viConfig = p_viConfig;\n\n    if (!p_themeFile.isEmpty()) {\n      editorConfig->m_theme = vte::Theme::createThemeFromFile(p_themeFile);\n    }\n\n    editorConfig->m_syntaxTheme = p_syntaxTheme;\n\n    switch (p_config.getLineNumberType()) {\n    case TextEditorConfig::LineNumberType::Absolute:\n      editorConfig->m_lineNumberType = vte::VTextEditor::LineNumberType::Absolute;\n      break;\n\n    case TextEditorConfig::LineNumberType::Relative:\n      editorConfig->m_lineNumberType = vte::VTextEditor::LineNumberType::Relative;\n      break;\n\n    case TextEditorConfig::LineNumberType::None:\n      editorConfig->m_lineNumberType = vte::VTextEditor::LineNumberType::None;\n      break;\n    }\n\n    editorConfig->m_textFoldingEnabled = p_config.getTextFoldingEnabled();\n\n    switch (p_config.getInputMode()) {\n    case TextEditorConfig::InputMode::ViMode:\n      editorConfig->m_inputMode = vte::InputMode::ViMode;\n      break;\n\n    case TextEditorConfig::InputMode::VscodeMode:\n      editorConfig->m_inputMode = vte::InputMode::VscodeMode;\n      break;\n\n    default:\n      editorConfig->m_inputMode = vte::InputMode::NormalMode;\n      break;\n    }\n\n    editorConfig->m_scaleFactor = WidgetUtils::calculateScaleFactor();\n\n    switch (p_config.getCenterCursor()) {\n    case TextEditorConfig::CenterCursor::NeverCenter:\n      editorConfig->m_centerCursor = vte::CenterCursor::NeverCenter;\n      break;\n\n    case TextEditorConfig::CenterCursor::AlwaysCenter:\n      editorConfig->m_centerCursor = vte::CenterCursor::AlwaysCenter;\n      break;\n\n    case TextEditorConfig::CenterCursor::CenterOnBottom:\n      editorConfig->m_centerCursor = vte::CenterCursor::CenterOnBottom;\n      break;\n    }\n\n    switch (p_config.getWrapMode()) {\n    case TextEditorConfig::WrapMode::NoWrap:\n      editorConfig->m_wrapMode = vte::WrapMode::NoWrap;\n      break;\n\n    case TextEditorConfig::WrapMode::WordWrap:\n      editorConfig->m_wrapMode = vte::WrapMode::WordWrap;\n      break;\n\n    case TextEditorConfig::WrapMode::WrapAnywhere:\n      editorConfig->m_wrapMode = vte::WrapMode::WrapAnywhere;\n      break;\n\n    case TextEditorConfig::WrapMode::WordWrapOrAnywhere:\n      editorConfig->m_wrapMode = vte::WrapMode::WordWrapOrAnywhere;\n      break;\n    }\n\n    editorConfig->m_expandTab = p_config.getExpandTabEnabled();\n    editorConfig->m_tabStopWidth = p_config.getTabStopWidth();\n\n    editorConfig->m_highlightWhitespace = p_config.getHighlightWhitespaceEnabled();\n\n    switch (p_lineEndingPolicy) {\n    case LineEndingPolicy::Platform:\n      editorConfig->m_lineEndingPolicy = vte::LineEndingPolicy::Platform;\n      break;\n    case LineEndingPolicy::File:\n      editorConfig->m_lineEndingPolicy = vte::LineEndingPolicy::File;\n      break;\n    case LineEndingPolicy::LF:\n      editorConfig->m_lineEndingPolicy = vte::LineEndingPolicy::LF;\n      break;\n    case LineEndingPolicy::CRLF:\n      editorConfig->m_lineEndingPolicy = vte::LineEndingPolicy::CRLF;\n      break;\n    case LineEndingPolicy::CR:\n      editorConfig->m_lineEndingPolicy = vte::LineEndingPolicy::CR;\n      break;\n    }\n\n    return editorConfig;\n  }\n\n  static vte::FindFlags toEditorFindFlags(FindOptions p_options) {\n    vte::FindFlags flags;\n    if (p_options & FindOption::FindBackward) {\n      flags |= vte::FindFlag::FindBackward;\n    }\n    if (p_options & FindOption::CaseSensitive) {\n      flags |= vte::FindFlag::CaseSensitive;\n    }\n    if (p_options & FindOption::WholeWordOnly) {\n      flags |= vte::FindFlag::WholeWordOnly;\n    }\n    if (p_options & FindOption::RegularExpression) {\n      flags |= vte::FindFlag::RegularExpression;\n    }\n    return flags;\n  }\n\n  template <typename _ViewWindow>\n  static void handleFindTextChanged(_ViewWindow *p_win, const QString &p_text,\n                                    FindOptions p_options) {\n    if (p_options & FindOption::IncrementalSearch) {\n      p_win->m_editor->peekText(p_text, toEditorFindFlags(p_options));\n    }\n  }\n\n  template <typename _ViewWindow>\n  static void handleFindNext(_ViewWindow *p_win, const QStringList &p_texts,\n                             FindOptions p_options) {\n    const auto result = p_win->m_editor->findText(p_texts, toEditorFindFlags(p_options));\n    p_win->showFindResult(p_texts, result.m_totalMatches, result.m_currentMatchIndex);\n  }\n\n  template <typename _ViewWindow>\n  static void handleReplace(_ViewWindow *p_win, const QString &p_text, FindOptions p_options,\n                            const QString &p_replaceText) {\n    const auto result =\n        p_win->m_editor->replaceText(p_text, toEditorFindFlags(p_options), p_replaceText);\n    p_win->showReplaceResult(p_text, result.m_totalMatches);\n  }\n\n  template <typename _ViewWindow>\n  static void handleReplaceAll(_ViewWindow *p_win, const QString &p_text, FindOptions p_options,\n                               const QString &p_replaceText) {\n    const auto result =\n        p_win->m_editor->replaceAll(p_text, toEditorFindFlags(p_options), p_replaceText);\n    p_win->showReplaceResult(p_text, result.m_totalMatches);\n  }\n\n  template <typename _ViewWindow> static void clearSearchHighlights(_ViewWindow *p_win) {\n    p_win->m_editor->clearIncrementalSearchHighlight();\n    p_win->m_editor->clearSearchHighlight();\n  }\n\n  template <typename _ViewWindow>\n  static void applySnippet(_ViewWindow *p_win, const QString &p_name) {\n    if (p_win->m_editor->isReadOnly() || p_name.isEmpty()) {\n      qWarning() << \"failed to apply snippet\" << p_name << \"to a read-only buffer\";\n      return;\n    }\n\n    SnippetMgr::getInst().applySnippet(p_name, p_win->m_editor->getTextEdit(),\n                                       SnippetMgr::generateOverrides(p_win->getBuffer()));\n    p_win->m_editor->enterInsertModeIfApplicable();\n    p_win->showMessage(vnotex::ViewWindow::tr(\"Snippet applied: %1\").arg(p_name));\n  }\n\n  template <typename _ViewWindow> static void applySnippet(_ViewWindow *p_win) {\n    if (p_win->m_editor->isReadOnly()) {\n      qWarning() << \"failed to apply snippet to a read-only buffer\";\n      return;\n    }\n\n    QString snippetName;\n\n    auto textEdit = p_win->m_editor->getTextEdit();\n    if (!textEdit->hasSelection()) {\n      // Fetch the snippet symbol containing current cursor.\n      auto cursor = textEdit->textCursor();\n      const auto block = cursor.block();\n      const auto text = block.text();\n      const int pib = cursor.positionInBlock();\n      QRegularExpression regExp(SnippetMgr::c_snippetSymbolRegExp);\n      QRegularExpressionMatch match;\n      int idx = text.lastIndexOf(regExp, pib, &match);\n      if (idx >= 0 && (idx + match.capturedLength(0) >= pib)) {\n        // Found one symbol under current cursor.\n        snippetName = match.captured(1);\n        if (!SnippetMgr::getInst().find(snippetName)) {\n          p_win->showMessage(vnotex::ViewWindow::tr(\"Snippet (%1) not found\").arg(snippetName));\n          return;\n        }\n\n        // Remove the symbol and apply snippet later.\n        cursor.setPosition(block.position() + idx);\n        cursor.setPosition(block.position() + idx + match.capturedLength(0),\n                           QTextCursor::KeepAnchor);\n        cursor.removeSelectedText();\n        textEdit->setTextCursor(cursor);\n      }\n    }\n\n    if (snippetName.isEmpty()) {\n      // Prompt for snippet.\n      snippetName = promptForSnippet(p_win);\n    }\n\n    if (!snippetName.isEmpty()) {\n      applySnippet(p_win, snippetName);\n    }\n  }\n\n  template <typename _ViewWindow> static QString promptForSnippet(_ViewWindow *p_win) {\n    const auto snippets = SnippetMgr::getInst().getSnippets();\n    if (snippets.isEmpty()) {\n      p_win->showMessage(vnotex::ViewWindow::tr(\"Snippet not available\"));\n      return QString();\n    }\n\n    QVector<QuickSelectorItem> items;\n    for (const auto &snip : snippets) {\n      items.push_back(QuickSelectorItem(snip->getName(), snip->getName(), snip->getDescription(),\n                                        snip->getShortcutString()));\n    }\n\n    // Ownership will be transferred to showFloatingWidget().\n    auto selector = new QuickSelector(vnotex::ViewWindow::tr(\"Select Snippet\"), items, true, p_win);\n    auto ret = p_win->showFloatingWidget(selector);\n    return ret.toString();\n  }\n\n  template <typename _ViewWindow> static QPoint getFloatingWidgetPosition(_ViewWindow *p_win) {\n    auto textEdit = p_win->m_editor->getTextEdit();\n    auto localPos = textEdit->cursorRect().bottomRight();\n    if (!textEdit->rect().contains(localPos)) {\n      localPos = QPoint(5, 5);\n    }\n    return textEdit->mapToGlobal(localPos);\n  }\n\n  template <typename _ViewWindow>\n  static void findTextBySearchToken(_ViewWindow *p_win, const QSharedPointer<SearchToken> &p_token,\n                                    int p_currentMatchLine) {\n    const auto patterns = p_token->toPatterns();\n    p_win->updateLastFindInfo(patterns.first, patterns.second);\n    const auto result = p_win->m_editor->findText(\n        patterns.first, toEditorFindFlags(patterns.second), 0, -1, p_currentMatchLine);\n    p_win->showFindResult(patterns.first, result.m_totalMatches, result.m_currentMatchIndex);\n  }\n\n  static ViewWindow::WordCountInfo calculateWordCountInfo(const QString &p_text) {\n    ViewWindow::WordCountInfo info;\n\n    // Char without spaces.\n    int cns = 0;\n    int wc = 0;\n    // Remove th ending new line.\n    int cc = p_text.size();\n    // 0 - not in word;\n    // 1 - in English word;\n    // 2 - in non-English word;\n    int state = 0;\n\n    for (int i = 0; i < cc; ++i) {\n      QChar ch = p_text[i];\n      if (ch.isSpace()) {\n        if (state) {\n          state = 0;\n        }\n\n        continue;\n      } else if (ch.unicode() < 128) {\n        if (state != 1) {\n          state = 1;\n          ++wc;\n        }\n      } else {\n        state = 2;\n        ++wc;\n      }\n\n      ++cns;\n    }\n\n    info.m_wordCount = wc;\n    info.m_charWithoutSpaceCount = cns;\n    info.m_charWithSpaceCount = cc;\n    return info;\n  }\n};\n} // namespace vnotex\n\n#endif\n"
  },
  {
    "path": "src/widgets/titlebar.cpp",
    "content": "#include \"titlebar.h\"\n\n#include <QAction>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QToolButton>\n\n#include \"thememgr.h\"\n#include \"vnotex.h\"\n#include \"widgetsfactory.h\"\n#include <utils/iconutils.h>\n\n#include \"propertydefs.h\"\n\nusing namespace vnotex;\n\nconst char *TitleBar::c_titleProp = \"TitleBarTitle\";\n\nconst QString TitleBar::c_actionButtonForegroundName = \"widgets#titlebar#button#fg\";\n\nconst QString TitleBar::c_menuIconForegroundName = \"widgets#titlebar#menu_icon#fg\";\n\nconst QString TitleBar::c_menuIconDisabledForegroundName = \"widgets#titlebar#menu_icon#disabled#fg\";\n\nTitleBar::TitleBar(const QString &p_title, bool p_hasInfoLabel, TitleBar::Actions p_actionFlags,\n                   QWidget *p_parent)\n    : QFrame(p_parent) {\n  setupUI(p_title, p_hasInfoLabel, p_actionFlags);\n}\n\nvoid TitleBar::setupUI(const QString &p_title, bool p_hasInfoLabel,\n                       TitleBar::Actions p_actionFlags) {\n  auto mainLayout = new QHBoxLayout(this);\n  mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  // Title label.\n  // Should always add it even if title is empty. Otherwise, we could not catch the hover event to\n  // show actions.\n  {\n    auto titleLabel = new QLabel(p_title, this);\n    titleLabel->setProperty(c_titleProp, true);\n    mainLayout->addWidget(titleLabel);\n  }\n\n  mainLayout->addStretch();\n\n  {\n    m_buttonWidget = new QWidget(this);\n    mainLayout->addWidget(m_buttonWidget);\n\n    auto btnLayout = new QHBoxLayout(m_buttonWidget);\n    btnLayout->setContentsMargins(0, 0, 0, 0);\n\n    setupActionButtons(p_actionFlags);\n\n    setActionButtonsVisible(false);\n  }\n\n  // Info label.\n  if (p_hasInfoLabel) {\n    m_infoLabel = new QLabel(this);\n    m_infoLabel->setProperty(c_titleProp, true);\n    mainLayout->addWidget(m_infoLabel);\n  }\n\n  setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);\n}\n\nQToolButton *TitleBar::newActionButton(const QString &p_iconName, const QString &p_text,\n                                       QWidget *p_parent) {\n  auto btn = new QToolButton(p_parent);\n  btn->setProperty(PropertyDefs::c_actionToolButton, true);\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  auto iconFile = themeMgr.getIconFile(p_iconName);\n  const auto fg = themeMgr.paletteColor(c_actionButtonForegroundName);\n  auto icon = IconUtils::fetchIcon(iconFile, fg);\n\n  auto act = new QAction(icon, p_text, btn);\n  btn->setDefaultAction(act);\n  return btn;\n}\n\nvoid TitleBar::setupActionButtons(TitleBar::Actions p_actionFlags) {\n  if (p_actionFlags & Action::Menu) {\n    m_menu = WidgetsFactory::createMenu(this);\n    addActionButton(\"menu.svg\", tr(\"Menu\"), m_menu);\n  }\n\n  if (p_actionFlags & Action::Settings) {\n    auto btn = addActionButton(\"settings.svg\", tr(\"Settings\"));\n    connect(btn, &QToolButton::triggered, this, []() {\n      // TODO.\n    });\n  }\n}\n\n#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))\nvoid TitleBar::enterEvent(QEvent *p_event)\n#else\nvoid TitleBar::enterEvent(QEnterEvent *p_event)\n#endif\n{\n  QFrame::enterEvent(p_event);\n  setActionButtonsVisible(true);\n}\n\nvoid TitleBar::leaveEvent(QEvent *p_event) {\n  QWidget::leaveEvent(p_event);\n  setActionButtonsVisible(m_actionButtonsForcedShown || m_actionButtonsAlwaysShown);\n}\n\nvoid TitleBar::setActionButtonsVisible(bool p_visible) { m_buttonWidget->setVisible(p_visible); }\n\nQIcon TitleBar::generateMenuActionIcon(const QString &p_iconName) {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const auto fg = themeMgr.paletteColor(c_menuIconForegroundName);\n  const auto disabledFg = themeMgr.paletteColor(c_menuIconDisabledForegroundName);\n\n  QVector<IconUtils::OverriddenColor> colors;\n  colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal));\n  colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled));\n\n  auto iconFile = themeMgr.getIconFile(p_iconName);\n  return IconUtils::fetchIcon(iconFile, colors);\n}\n\nQAction *TitleBar::addMenuAction(const QString &p_iconName, const QString &p_text) {\n  auto act = m_menu->addAction(generateMenuActionIcon(p_iconName), p_text);\n  return act;\n}\n\nQMenu *TitleBar::addMenuSubMenu(const QString &p_text) { return m_menu->addMenu(p_text); }\n\nvoid TitleBar::addMenuSeparator() {\n  Q_ASSERT(m_menu);\n  m_menu->addSeparator();\n}\n\nQToolButton *TitleBar::addActionButton(const QString &p_iconName, const QString &p_text) {\n  auto btn = newActionButton(p_iconName, p_text, this);\n  auto layout = actionButtonLayout();\n  if (!m_menu) {\n    m_actionButtons.push_back(btn);\n    layout->addWidget(btn);\n  } else {\n    int idx = m_actionButtons.size() - 1;\n    if (idx < 0) {\n      idx = 0;\n    }\n    m_actionButtons.insert(idx, btn);\n    layout->insertWidget(idx, btn);\n  }\n  return btn;\n}\n\nQToolButton *TitleBar::addActionButton(const QString &p_iconName, const QString &p_text,\n                                       QMenu *p_menu) {\n  p_menu->setParent(this);\n\n  auto btn = addActionButton(p_iconName, p_text);\n  btn->setPopupMode(QToolButton::InstantPopup);\n  btn->setMenu(p_menu);\n  connect(p_menu, &QMenu::aboutToShow, this, [this]() {\n    m_actionButtonsForcedShown = true;\n    setActionButtonsVisible(true);\n  });\n  connect(p_menu, &QMenu::aboutToHide, this, [this]() {\n    m_actionButtonsForcedShown = false;\n    setActionButtonsVisible(m_actionButtonsAlwaysShown);\n  });\n  return btn;\n}\n\nQHBoxLayout *TitleBar::actionButtonLayout() const {\n  return static_cast<QHBoxLayout *>(m_buttonWidget->layout());\n}\n\nvoid TitleBar::setInfoLabel(const QString &p_info) {\n  Q_ASSERT(m_infoLabel);\n  if (m_infoLabel) {\n    m_infoLabel->setText(p_info);\n  }\n}\n\nvoid TitleBar::setActionButtonsAlwaysShown(bool p_shown) {\n  m_actionButtonsAlwaysShown = p_shown;\n  setActionButtonsVisible(m_actionButtonsForcedShown || m_actionButtonsAlwaysShown);\n}\n"
  },
  {
    "path": "src/widgets/titlebar.h",
    "content": "#ifndef TITLEBAR_H\n#define TITLEBAR_H\n\n#include <QFrame>\n#include <QMenu>\n#include <QVector>\n\nclass QToolButton;\nclass QHBoxLayout;\nclass QLabel;\n\nnamespace vnotex {\nclass TitleBar : public QFrame {\n  Q_OBJECT\npublic:\n  enum Action { None = 0, Settings = 0x1, Menu = 0x2 };\n  Q_DECLARE_FLAGS(Actions, Action)\n\n  TitleBar(const QString &p_title, bool p_hasInfoLabel, TitleBar::Actions p_actionFlags,\n           QWidget *p_parent = nullptr);\n\n  QToolButton *addActionButton(const QString &p_iconName, const QString &p_text);\n\n  QToolButton *addActionButton(const QString &p_iconName, const QString &p_text, QMenu *p_menu);\n\n  // Add action to the menu.\n  QAction *addMenuAction(const QString &p_iconName, const QString &p_text);\n\n  template <typename Functor>\n  QAction *addMenuAction(const QString &p_iconName, const QString &p_text, const QObject *p_context,\n                         Functor p_functor);\n\n  template <typename Functor>\n  QAction *addMenuAction(const QString &p_text, const QObject *p_context, Functor p_functor);\n\n  template <typename Functor>\n  QAction *addMenuAction(QMenu *p_subMenu, const QString &p_text, const QObject *p_context,\n                         Functor p_functor);\n\n  QMenu *addMenuSubMenu(const QString &p_text);\n\n  void addMenuSeparator();\n\n  void setInfoLabel(const QString &p_info);\n\n  void setActionButtonsAlwaysShown(bool p_shown);\n\nprotected:\n#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))\n  void enterEvent(QEvent *p_event) Q_DECL_OVERRIDE;\n#else\n  void enterEvent(QEnterEvent *p_event) Q_DECL_OVERRIDE;\n#endif\n\n  void leaveEvent(QEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI(const QString &p_title, bool p_hasInfoLabel, TitleBar::Actions p_actionFlags);\n\n  void setupActionButtons(TitleBar::Actions p_actionFlags);\n\n  void setActionButtonsVisible(bool p_visible);\n\n  QHBoxLayout *actionButtonLayout() const;\n\n  static QToolButton *newActionButton(const QString &p_iconName, const QString &p_text,\n                                      QWidget *p_parent);\n\n  static QIcon generateMenuActionIcon(const QString &p_iconName);\n\n  QLabel *m_infoLabel = nullptr;\n\n  QVector<QToolButton *> m_actionButtons;\n\n  QWidget *m_buttonWidget = nullptr;\n\n  bool m_actionButtonsAlwaysShown = false;\n\n  bool m_actionButtonsForcedShown = false;\n\n  QMenu *m_menu = nullptr;\n\n  static const char *c_titleProp;\n\n  static const QString c_actionButtonForegroundName;\n\n  static const QString c_menuIconForegroundName;\n\n  static const QString c_menuIconDisabledForegroundName;\n};\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(TitleBar::Actions)\n\ntemplate <typename Functor>\nQAction *TitleBar::addMenuAction(const QString &p_iconName, const QString &p_text,\n                                 const QObject *p_context, Functor p_functor) {\n  auto act = m_menu->addAction(generateMenuActionIcon(p_iconName), p_text, p_context, p_functor);\n  return act;\n}\n\ntemplate <typename Functor>\nQAction *TitleBar::addMenuAction(const QString &p_text, const QObject *p_context,\n                                 Functor p_functor) {\n  auto act = m_menu->addAction(p_text, p_context, p_functor);\n  return act;\n}\n\ntemplate <typename Functor>\nQAction *TitleBar::addMenuAction(QMenu *p_subMenu, const QString &p_text, const QObject *p_context,\n                                 Functor p_functor) {\n  Q_ASSERT(p_subMenu->parent() == m_menu);\n  auto act = p_subMenu->addAction(p_text, p_context, p_functor);\n  return act;\n}\n} // namespace vnotex\n\n#endif // TITLEBAR_H\n"
  },
  {
    "path": "src/widgets/titletoolbar.cpp",
    "content": "#include \"titletoolbar.h\"\n\n#include <QToolButton>\n\n#include \"propertydefs.h\"\n\nusing namespace vnotex;\n\nTitleToolBar::TitleToolBar(QWidget *p_parent) : QToolBar(p_parent), m_window(p_parent) {\n  setupUI();\n}\n\nTitleToolBar::TitleToolBar(const QString &p_title, QWidget *p_parent)\n    : QToolBar(p_title, p_parent), m_window(p_parent) {\n  setupUI();\n}\n\nvoid TitleToolBar::setupUI() {}\n\nvoid TitleToolBar::maximizeRestoreWindow() {\n  m_window->isMaximized() ? m_window->showNormal() : m_window->showMaximized();\n}\n\nvoid TitleToolBar::addTitleBarIcons(const QIcon &p_minimizeIcon, const QIcon &p_maximizeIcon,\n                                    const QIcon &p_restoreIcon, const QIcon &p_closeIcon) {\n  addSeparator();\n\n  addAction(p_minimizeIcon, tr(\"Minimize\"), this, [this]() { m_window->showMinimized(); });\n\n  m_maximizeIcon = p_maximizeIcon;\n  m_restoreIcon = p_restoreIcon;\n  m_maximizeAct =\n      addAction(p_maximizeIcon, tr(\"Maximize\"), this, [this]() { maximizeRestoreWindow(); });\n\n  {\n    auto closeAct = addAction(p_closeIcon, tr(\"Close\"), this, [this]() { m_window->close(); });\n    auto btn = static_cast<QToolButton *>(widgetForAction(closeAct));\n    btn->setProperty(PropertyDefs::c_dangerButton, true);\n  }\n\n  updateMaximizeAct();\n}\n\nvoid TitleToolBar::updateMaximizeAct() {\n  if (m_window->isMaximized()) {\n    m_maximizeAct->setIcon(m_restoreIcon);\n    m_maximizeAct->setText(tr(\"Restore Down\"));\n  } else {\n    m_maximizeAct->setIcon(m_maximizeIcon);\n    m_maximizeAct->setText(tr(\"Maximize\"));\n  }\n}\n"
  },
  {
    "path": "src/widgets/titletoolbar.h",
    "content": "#ifndef TITLETOOLBAR_H\n#define TITLETOOLBAR_H\n\n#include <QIcon>\n#include <QToolBar>\n\nnamespace vnotex {\nclass TitleToolBar : public QToolBar {\n  Q_OBJECT\npublic:\n  explicit TitleToolBar(QWidget *p_parent = nullptr);\n\n  TitleToolBar(const QString &p_title, QWidget *p_parent = nullptr);\n\n  void addTitleBarIcons(const QIcon &p_minimizeIcon, const QIcon &p_maximizeIcon,\n                        const QIcon &p_restoreIcon, const QIcon &p_closeIcon);\n\n  void updateMaximizeAct();\n\nprivate:\n  void setupUI();\n\n  void maximizeRestoreWindow();\n\n  QWidget *m_window = nullptr;\n\n  QAction *m_maximizeAct = nullptr;\n\n  QIcon m_maximizeIcon;\n\n  QIcon m_restoreIcon;\n};\n} // namespace vnotex\n\n#endif // VTOOLBAR_H\n"
  },
  {
    "path": "src/widgets/toolbarhelper.cpp",
    "content": "#include \"toolbarhelper.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <QDockWidget>\n#include <QFileDialog>\n#include <QMenu>\n#include <QToolBar>\n#include <QToolButton>\n#include <QUrl>\n#include <QWhatsThis>\n#include <QWidgetAction>\n\n#include \"dialogs/settings/settingsdialog.h\"\n#include \"dialogs/updater.h\"\n#include \"fullscreentoggleaction.h\"\n#include \"labelwithbuttonswidget.h\"\n#include \"mainwindow.h\"\n#include \"messageboxhelper.h\"\n#include \"propertydefs.h\"\n#include \"widgetsfactory.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/editorconfig.h>\n#include <core/exception.h>\n#include <core/fileopenparameters.h>\n#include <core/htmltemplatehelper.h>\n#include <core/markdowneditorconfig.h>\n#include <core/notebookmgr.h>\n#include <core/sessionconfig.h>\n#include <core/vnotex.h>\n#include <task/taskmgr.h>\n#include <unitedentry/unitedentry.h>\n#include <utils/docsutils.h>\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n#include <utils/vxurlutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nstatic QToolBar *createToolBar(MainWindow *p_win, const QString &p_title, const QString &p_name) {\n  auto tb = p_win->addToolBar(p_title);\n  tb->setObjectName(p_name);\n  tb->setMovable(false);\n  return tb;\n}\n\nQToolBar *ToolBarHelper::setupFileToolBar(MainWindow *p_win, QToolBar *p_toolBar) {\n  auto tb = p_toolBar;\n  if (!tb) {\n    tb = createToolBar(p_win, MainWindow::tr(\"File\"), \"FileToolBar\");\n  }\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  // Notebook.\n  {\n    auto act = tb->addAction(generateIcon(\"notebook_menu.svg\"), MainWindow::tr(\"Notebook\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    auto btnMenu = WidgetsFactory::createMenu(tb);\n    toolBtn->setMenu(btnMenu);\n\n    btnMenu->addAction(MainWindow::tr(\"New Notebook\"), btnMenu,\n                       []() { emit VNoteX::getInst().newNotebookRequested(); });\n\n    // New notebook from folder.\n    btnMenu->addAction(MainWindow::tr(\"New Notebook From Folder\"), btnMenu,\n                       []() { emit VNoteX::getInst().newNotebookFromFolderRequested(); });\n\n    btnMenu->addSeparator();\n\n    // Import notebook.\n    btnMenu->addAction(MainWindow::tr(\"Open Notebook\"), btnMenu,\n                       []() { emit VNoteX::getInst().importNotebookRequested(); });\n\n    btnMenu->addSeparator();\n\n    // Manage notebook.\n    btnMenu->addAction(MainWindow::tr(\"Manage Notebooks\"), btnMenu,\n                       []() { emit VNoteX::getInst().manageNotebooksRequested(); });\n  }\n\n  // New Note.\n  {\n    auto newBtn = WidgetsFactory::createToolButton(tb);\n    newBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);\n\n    // Popup menu.\n    auto newMenu = WidgetsFactory::createMenu(tb);\n    newBtn->setMenu(newMenu);\n\n    // New note.\n    const auto text = MainWindow::tr(\"New Note\");\n    auto newNoteAct = newMenu->addAction(generateIcon(\"new_note.svg\"), text, newMenu,\n                                         []() { emit VNoteX::getInst().newNoteRequested(); });\n    WidgetUtils::addActionShortcut(newNoteAct,\n                                   coreConfig.getShortcut(CoreConfig::Shortcut::NewNote));\n    newBtn->setDefaultAction(newNoteAct);\n    // To hide the shortcut text shown in button.\n    newBtn->setText(text);\n\n    // New quick note.\n    auto newQuickNoteAct =\n        newMenu->addAction(generateIcon(\"new_note.svg\"), MainWindow::tr(\"New Quick Note\"), newMenu,\n                           []() { emit VNoteX::getInst().newQuickNoteRequested(); });\n    WidgetUtils::addActionShortcut(newQuickNoteAct,\n                                   coreConfig.getShortcut(CoreConfig::Shortcut::NewQuickNote));\n\n    // New folder.\n    auto newFolderAct =\n        newMenu->addAction(generateIcon(\"new_folder.svg\"), MainWindow::tr(\"New Folder\"), newMenu,\n                           []() { emit VNoteX::getInst().newFolderRequested(); });\n    WidgetUtils::addActionShortcut(newFolderAct,\n                                   coreConfig.getShortcut(CoreConfig::Shortcut::NewFolder));\n\n    newMenu->addSeparator();\n\n    // Import file.\n    newMenu->addAction(generateIcon(\"import_menu.svg\"), MainWindow::tr(\"Import File\"), newMenu,\n                       []() { emit VNoteX::getInst().importFileRequested(); });\n\n    // Import folder.\n    newMenu->addAction(MainWindow::tr(\"Import Folder\"), newMenu,\n                       []() { emit VNoteX::getInst().importFolderRequested(); });\n\n    newMenu->addSeparator();\n\n    // Open file.\n    newMenu->addAction(MainWindow::tr(\"Open File\"), newMenu, [p_win]() {\n      static QString lastDirPath = QDir::homePath();\n      auto files = QFileDialog::getOpenFileNames(p_win, MainWindow::tr(\"Open File\"), lastDirPath);\n      if (files.isEmpty()) {\n        return;\n      }\n\n      lastDirPath = QFileInfo(files[0]).path();\n\n      for (const auto &file : files) {\n        emit VNoteX::getInst().openFileRequested(file,\n                                                 QSharedPointer<FileOpenParameters>::create());\n      }\n    });\n\n    tb->addWidget(newBtn);\n  }\n\n  // Export.\n  {\n    auto act =\n        tb->addAction(generateIcon(\"export_menu.svg\"), MainWindow::tr(\"Export (Convert Format)\"),\n                      []() { emit VNoteX::getInst().exportRequested(); });\n    auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));\n    btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);\n    WidgetUtils::addActionShortcut(act, coreConfig.getShortcut(CoreConfig::Shortcut::Export));\n    btn->setText(MainWindow::tr(\"Export\"));\n  }\n\n  return tb;\n}\n\nQToolBar *ToolBarHelper::setupQuickAccessToolBar(MainWindow *p_win, QToolBar *p_toolBar) {\n  auto tb = p_toolBar;\n  if (!tb) {\n    tb = createToolBar(p_win, MainWindow::tr(\"Quick Access\"), \"QuickAccessToolBar\");\n  }\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  // Flash Page.\n  {\n    const auto text = MainWindow::tr(\"Flash Page\");\n    auto flashPageAct = tb->addAction(generateIcon(\"flash_page_menu.svg\"), text, tb, [p_win]() {\n      const auto &flashPage = ConfigMgr::getInst().getSessionConfig().getFlashPage();\n      if (flashPage.isEmpty()) {\n        MessageBoxHelper::notify(\n            MessageBoxHelper::Type::Information,\n            MainWindow::tr(\"Please set the Flash Page location in the Settings dialog first.\"),\n            MainWindow::tr(\"Flash Page is a temporary page for a flash of inspiration.\"), QString(),\n            p_win);\n        return;\n      }\n\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_mode = ViewWindowMode::Edit;\n      emit VNoteX::getInst().openFileRequested(flashPage, paras);\n    });\n    auto toolBtn = dynamic_cast<QToolButton *>(tb->widgetForAction(flashPageAct));\n    toolBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);\n    WidgetUtils::addActionShortcut(flashPageAct,\n                                   coreConfig.getShortcut(CoreConfig::Shortcut::FlashPage));\n    // To hide the shortcut text shown in button.\n    toolBtn->setText(text);\n  }\n\n  // Quick Access.\n  {\n    auto toolBtn = WidgetsFactory::createToolButton(tb);\n    toolBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);\n\n    auto btnMenu = WidgetsFactory::createMenu(tb);\n    toolBtn->setMenu(btnMenu);\n\n    // Quick Acces.\n    const auto text = MainWindow::tr(\"Quick Access\");\n    auto quickAccessAct = btnMenu->addAction(generateIcon(\"quick_access_menu.svg\"), text);\n    MainWindow::connect(quickAccessAct, &QAction::triggered, p_win, [p_win]() {\n      const auto &quickAccess = ConfigMgr::getInst().getSessionConfig().getQuickAccessFiles();\n      if (quickAccess.isEmpty()) {\n        MessageBoxHelper::notify(\n            MessageBoxHelper::Type::Information,\n            MainWindow::tr(\"Please pin files to Quick Access first.\"),\n            MainWindow::tr(\"Files could be pinned to Quick Access via context menu.\"),\n            MainWindow::tr(\"Quick Access could be managed in the Settings dialog.\"), p_win);\n        return;\n      }\n\n      activateQuickAccess(quickAccess.first());\n    });\n    WidgetUtils::addActionShortcut(quickAccessAct,\n                                   coreConfig.getShortcut(CoreConfig::Shortcut::QuickAccess));\n    toolBtn->setDefaultAction(quickAccessAct);\n    // To hide the shortcut text shown in button.\n    toolBtn->setText(text);\n\n    MainWindow::connect(btnMenu, &QMenu::aboutToShow, btnMenu,\n                        [btnMenu]() { ToolBarHelper::updateQuickAccessMenu(btnMenu); });\n    MainWindow::connect(btnMenu, &QMenu::triggered, btnMenu,\n                        [](QAction *p_act) { activateQuickAccess(p_act->data().toString()); });\n    tb->addWidget(toolBtn);\n  }\n\n  // Task.\n  {\n    auto act = tb->addAction(generateIcon(\"task_menu.svg\"), MainWindow::tr(\"Task\"));\n    auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));\n    btn->setPopupMode(QToolButton::InstantPopup);\n    btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);\n    btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    auto taskMenu = WidgetsFactory::createMenu(tb);\n    setupTaskActionMenu(taskMenu);\n    btn->setMenu(taskMenu);\n    MainWindow::connect(taskMenu, &QMenu::triggered, taskMenu, [](QAction *act) {\n      auto task = reinterpret_cast<Task *>(act->data().toULongLong());\n      if (task) {\n        task->run();\n      }\n    });\n    MainWindow::connect(&VNoteX::getInst().getTaskMgr(), &TaskMgr::tasksUpdated, taskMenu,\n                        [taskMenu]() { setupTaskMenu(taskMenu); });\n  }\n\n  // United Entry.\n  {\n    // Managed by QObject.\n    auto ue = new UnitedEntry(p_win);\n    auto act = ue->getTriggerAction();\n    tb->addAction(act);\n    auto btn = dynamic_cast<QToolButton *>(tb->widgetForAction(act));\n    btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);\n    btn->setText(ue->getTriggerActionText());\n  }\n\n  return tb;\n}\n\nvoid ToolBarHelper::setupTaskMenu(QMenu *p_menu) {\n  p_menu->clear();\n\n  setupTaskActionMenu(p_menu);\n\n  p_menu->addSeparator();\n\n  const auto &taskMgr = VNoteX::getInst().getTaskMgr();\n  for (const auto &task : taskMgr.getAppTasks()) {\n    addTaskMenu(p_menu, task.data());\n  }\n\n  p_menu->addSeparator();\n\n  for (const auto &task : taskMgr.getUserTasks()) {\n    addTaskMenu(p_menu, task.data());\n  }\n\n  p_menu->addSeparator();\n\n  for (const auto &task : taskMgr.getNotebookTasks()) {\n    addTaskMenu(p_menu, task.data());\n  }\n}\n\nvoid ToolBarHelper::setupTaskActionMenu(QMenu *p_menu) {\n  p_menu->addAction(MainWindow::tr(\"Add Task\"), p_menu, []() {\n    WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(ConfigMgr::getInst().getUserTaskFolder()));\n  });\n\n  p_menu->addAction(MainWindow::tr(\"Reload\"), p_menu,\n                    []() { VNoteX::getInst().getTaskMgr().reload(); });\n}\n\nvoid ToolBarHelper::addTaskMenu(QMenu *p_menu, Task *p_task) {\n  QAction *action = nullptr;\n\n  const auto &children = p_task->getChildren();\n\n  auto label = p_task->getLabel();\n  // '&' will be considered shortuct symbol in QAction.\n  label.replace(\"&\", \"&&\");\n\n  if (children.isEmpty()) {\n    action = p_menu->addAction(label);\n  } else {\n    auto subMenu = p_menu->addMenu(label);\n    for (auto task : children) {\n      addTaskMenu(subMenu, task);\n    }\n    action = subMenu->menuAction();\n  }\n\n  QIcon icon;\n  try {\n    auto taskIcon = p_task->getIcon();\n    if (!taskIcon.isEmpty()) {\n      icon = generateIcon(p_task->getIcon());\n    }\n  } catch (Exception &e) {\n    if (e.m_type != Exception::Type::FailToReadFile) {\n      throw e;\n    }\n  }\n  action->setIcon(icon);\n\n  action->setData(reinterpret_cast<qulonglong>(p_task));\n\n  WidgetUtils::addActionShortcut(action, p_task->getShortcut());\n}\n\nQToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_toolBar) {\n  auto tb = p_toolBar;\n  if (!tb) {\n    tb = createToolBar(p_win, MainWindow::tr(\"Settings\"), \"SettingsToolBar\");\n  }\n\n  addSpacer(tb);\n\n  setupExpandButton(p_win, tb);\n\n  setupMenuButton(p_win, tb);\n\n  return tb;\n}\n\nstatic const QString c_fgPalette = QStringLiteral(\"widgets#toolbar#icon#fg\");\nstatic const QString c_disabledPalette = QStringLiteral(\"widgets#toolbar#icon#disabled#fg\");\nstatic const QString c_dangerousPalette = QStringLiteral(\"widgets#toolbar#icon#danger#fg\");\n\nQIcon ToolBarHelper::generateIcon(const QString &p_iconName) {\n  static QVector<IconUtils::OverriddenColor> colors;\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n\n  if (colors.isEmpty()) {\n    const auto fg = themeMgr.paletteColor(c_fgPalette);\n    const auto disabledFg = themeMgr.paletteColor(c_disabledPalette);\n\n    colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal));\n    colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled));\n  }\n\n  auto iconFile = themeMgr.getIconFile(p_iconName);\n  return IconUtils::fetchIcon(iconFile, colors);\n}\n\nQIcon ToolBarHelper::generateDangerousIcon(const QString &p_iconName) {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const auto fg = themeMgr.paletteColor(c_fgPalette);\n  const auto disabledFg = themeMgr.paletteColor(c_disabledPalette);\n  const auto dangerousFg = themeMgr.paletteColor(c_dangerousPalette);\n\n  QVector<IconUtils::OverriddenColor> colors;\n  colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal));\n  colors.push_back(IconUtils::OverriddenColor(disabledFg, QIcon::Disabled));\n  colors.push_back(IconUtils::OverriddenColor(dangerousFg, QIcon::Active));\n\n  auto iconFile = themeMgr.getIconFile(p_iconName);\n  return IconUtils::fetchIcon(iconFile, colors);\n}\n\nvoid ToolBarHelper::setupToolBars(MainWindow *p_mainWindow) {\n  setupFileToolBar(p_mainWindow, nullptr);\n\n  setupQuickAccessToolBar(p_mainWindow, nullptr);\n\n  setupSettingsToolBar(p_mainWindow, nullptr);\n}\n\nvoid ToolBarHelper::setupToolBars(MainWindow *p_mainWindow, QToolBar *p_toolBar) {\n  p_toolBar->setObjectName(QStringLiteral(\"UnifiedToolBar\"));\n  p_toolBar->setMovable(false);\n  p_mainWindow->addToolBar(p_toolBar);\n\n  setupFileToolBar(p_mainWindow, p_toolBar);\n  setupQuickAccessToolBar(p_mainWindow, p_toolBar);\n  setupSettingsToolBar(p_mainWindow, p_toolBar);\n}\n\nvoid ToolBarHelper::addSpacer(QToolBar *p_toolBar) {\n  auto spacer = new QWidget(p_toolBar);\n  spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);\n  auto act = p_toolBar->addWidget(spacer);\n  act->setEnabled(false);\n}\n\nvoid ToolBarHelper::updateQuickAccessMenu(QMenu *p_menu) {\n  p_menu->clear();\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  sessionConfig.tryCorrectQuickAccessFiles();\n\n  const auto &quickAccess = sessionConfig.getQuickAccessFiles();\n  if (quickAccess.isEmpty()) {\n    auto act = p_menu->addAction(MainWindow::tr(\"Quick Access Not Set\"));\n    act->setEnabled(false);\n    return;\n  }\n\n  for (const auto &file : quickAccess) {\n    auto act = new QWidgetAction(p_menu);\n    QString displayName = PathUtils::fileName(file);\n    QString displayFullName = VxUrlUtils::getFilePathFromVxURL(file);\n\n    auto widget = new LabelWithButtonsWidget(displayName, LabelWithButtonsWidget::Delete);\n    p_menu->connect(widget, &LabelWithButtonsWidget::triggered, p_menu, [p_menu, act]() {\n      const auto qaFile = act->data().toString();\n      ConfigMgr::getInst().getSessionConfig().removeQuickAccessFile(qaFile);\n      p_menu->removeAction(act);\n      if (p_menu->isEmpty()) {\n        p_menu->hide();\n      }\n    });\n    // @act will own @widget.\n    act->setDefaultWidget(widget);\n    act->setData(file);\n    act->setToolTip(displayFullName);\n\n    // Must call after setDefaultWidget().\n    p_menu->addAction(act);\n  }\n}\n\nvoid ToolBarHelper::setupExpandButton(MainWindow *p_win, QToolBar *p_toolBar) {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  auto btn = WidgetsFactory::createToolButton(p_toolBar);\n\n  auto menu = WidgetsFactory::createMenu(p_toolBar);\n  btn->setMenu(menu);\n\n  auto expandAct =\n      menu->addAction(generateIcon(\"expand.svg\"), MainWindow::tr(\"Expand Content Area\"));\n  WidgetUtils::addActionShortcut(expandAct,\n                                 coreConfig.getShortcut(CoreConfig::Shortcut::ExpandContentArea));\n  expandAct->setCheckable(true);\n  MainWindow::connect(expandAct, &QAction::triggered, p_win, &MainWindow::setContentAreaExpanded);\n  MainWindow::connect(p_win, &MainWindow::layoutChanged, [expandAct, p_win]() {\n    expandAct->setChecked(p_win->isContentAreaExpanded());\n  });\n  btn->setDefaultAction(expandAct);\n\n  {\n    auto fullScreenAct = new FullScreenToggleAction(p_win, generateIcon(\"fullscreen.svg\"), menu);\n    const auto shortcut = coreConfig.getShortcut(CoreConfig::Shortcut::FullScreen);\n    WidgetUtils::addActionShortcut(fullScreenAct, shortcut);\n    MainWindow::connect(fullScreenAct, &FullScreenToggleAction::fullScreenToggled, p_win,\n                        [shortcut](bool p_fullScreen) {\n                          if (p_fullScreen) {\n                            VNoteX::getInst().showTips(\n                                MainWindow::tr(\"Press %1 To Exit Full Screen\").arg(shortcut));\n                          } else {\n                            VNoteX::getInst().showTips(\"\");\n                          }\n                        });\n    menu->addAction(fullScreenAct);\n  }\n\n  auto stayOnTopAct =\n      menu->addAction(generateIcon(\"stay_on_top.svg\"), MainWindow::tr(\"Stay on Top\"), p_win,\n                      &MainWindow::setStayOnTop);\n  stayOnTopAct->setCheckable(true);\n  WidgetUtils::addActionShortcut(stayOnTopAct,\n                                 coreConfig.getShortcut(CoreConfig::Shortcut::StayOnTop));\n\n  menu->addSeparator();\n\n  {\n    // Windows.\n    // MainWindow will clear the title of the dock widget for the tab bar, so we need to use\n    // another action to wrap the no-text action.\n    auto subMenu = menu->addMenu(MainWindow::tr(\"Windows\"));\n    for (auto dock : p_win->getDocks()) {\n      // @act is owned by the QDockWidget.\n      auto act = dock->toggleViewAction();\n      auto actWrapper = subMenu->addAction(act->text());\n      actWrapper->setCheckable(act->isCheckable());\n      actWrapper->setChecked(act->isChecked());\n      MainWindow::connect(act, &QAction::toggled, actWrapper, [actWrapper](bool checked) {\n        if (actWrapper->isChecked() != checked) {\n          actWrapper->setChecked(checked);\n        }\n      });\n      MainWindow::connect(actWrapper, &QAction::triggered, act, [p_win, act]() {\n        act->trigger();\n        p_win->updateDockWidgetTabBar();\n      });\n    }\n  }\n\n  p_toolBar->addWidget(btn);\n}\n\nvoid ToolBarHelper::setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar) {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  auto act = p_toolBar->addAction(generateIcon(\"menu.svg\"), MainWindow::tr(\"Menu\"));\n  auto btn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));\n  Q_ASSERT(btn);\n  btn->setPopupMode(QToolButton::InstantPopup);\n  btn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n  auto menu = WidgetsFactory::createMenu(p_toolBar);\n  btn->setMenu(menu);\n\n  {\n    auto settingsAct = menu->addAction(MainWindow::tr(\"Settings\"), menu, [p_win]() {\n      SettingsDialog dialog(p_win);\n      dialog.exec();\n    });\n    WidgetUtils::addActionShortcut(settingsAct,\n                                   coreConfig.getShortcut(CoreConfig::Shortcut::Settings));\n\n    menu->addSeparator();\n\n    menu->addAction(MainWindow::tr(\"Edit User Configuration File\"), menu, []() {\n      auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::User);\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_sessionEnabled = false;\n      emit VNoteX::getInst().openFileRequested(file, paras);\n    });\n\n    menu->addAction(MainWindow::tr(\"Open User Configuration Folder\"), menu, []() {\n      auto folderPath = ConfigMgr::getInst().getUserFolder();\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));\n    });\n\n    menu->addAction(MainWindow::tr(\"Open Default Configuration Folder\"), menu, []() {\n      auto folderPath = ConfigMgr::getInst().getAppFolder();\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));\n    });\n\n    menu->addSeparator();\n\n    {\n      auto act = menu->addAction(MainWindow::tr(\"Edit Markdown User Styles\"), menu, []() {\n        const auto file = ConfigMgr::getInst().getUserMarkdownUserStyleFile();\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_sessionEnabled = false;\n        paras->m_hooks[FileOpenParameters::PostSave] = []() {\n          qDebug() << \"post save\";\n          const auto &markdownConfig =\n              ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n          HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownConfig, true);\n        };\n        emit VNoteX::getInst().openFileRequested(file, paras);\n      });\n      act->setStatusTip(MainWindow::tr(\"Edit the user styles of Markdown editor read mode\"));\n    }\n\n    menu->addSeparator();\n\n    menu->addAction(MainWindow::tr(\"Reset Main Window Layout\"), menu,\n                    [p_win]() { p_win->resetStateAndGeometry(); });\n  }\n\n  menu->addSeparator();\n\n  menu->addAction(MainWindow::tr(\"View Logs\"), menu, []() {\n    const auto file = ConfigMgr::getInst().getLogFile();\n    if (QFileInfo::exists(file)) {\n      auto paras = QSharedPointer<FileOpenParameters>::create();\n      paras->m_readOnly = true;\n      paras->m_sessionEnabled = false;\n      emit VNoteX::getInst().openFileRequested(file, paras);\n    }\n  });\n\n  {\n    menu->addSeparator();\n\n    menu->addAction(MainWindow::tr(\"Shortcuts Help\"), menu, []() {\n      const auto file = DocsUtils::getDocFile(QStringLiteral(\"shortcuts.md\"));\n      if (!file.isEmpty()) {\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_readOnly = true;\n        paras->m_sessionEnabled = false;\n        emit VNoteX::getInst().openFileRequested(file, paras);\n      }\n    });\n\n    menu->addAction(MainWindow::tr(\"Markdown Guide\"), menu, []() {\n      const auto file = DocsUtils::getDocFile(QStringLiteral(\"markdown_guide.md\"));\n      if (!file.isEmpty()) {\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_readOnly = true;\n        paras->m_sessionEnabled = false;\n        emit VNoteX::getInst().openFileRequested(file, paras);\n      }\n    });\n\n    auto helpMenu = menu->addMenu(MainWindow::tr(\"Help\"));\n\n    helpMenu->addAction(MainWindow::tr(\"Home Page\"), helpMenu, []() {\n      WidgetUtils::openUrlByDesktop(QUrl(\"https://vnotex.github.io/vnote\"));\n    });\n\n    helpMenu->addAction(MainWindow::tr(\"Documentation\"), helpMenu, []() {\n      WidgetUtils::openUrlByDesktop(QUrl(\"https://vnotex.github.io/vnote/en_us/#!docs/vx.json\"));\n    });\n\n    helpMenu->addAction(MainWindow::tr(\"Feedback and Discussions\"), helpMenu, []() {\n      WidgetUtils::openUrlByDesktop(QUrl(\"https://github.com/vnotex/vnote/discussions\"));\n    });\n\n    helpMenu->addSeparator();\n\n    helpMenu->addAction(MainWindow::tr(\"Contributors\"), helpMenu, []() {\n      WidgetUtils::openUrlByDesktop(QUrl(\"https://github.com/vnotex/vnote/graphs/contributors\"));\n    });\n\n    helpMenu->addAction(MainWindow::tr(\"About\"), helpMenu, [p_win]() {\n      auto info = MainWindow::tr(\"<h3>%1</h3>\\n<span>%2</span>\\n\")\n                      .arg(qApp->applicationDisplayName(), qApp->applicationVersion());\n      const auto text = DocsUtils::getDocText(QStringLiteral(\"about_vnotex.txt\"));\n      QMessageBox::about(p_win, MainWindow::tr(\"About\"), info + text);\n    });\n\n    auto aboutQtAct = helpMenu->addAction(MainWindow::tr(\"About Qt\"));\n    aboutQtAct->setMenuRole(QAction::AboutQtRole);\n    MainWindow::connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt);\n  }\n\n  menu->addSeparator();\n\n  menu->addAction(MainWindow::tr(\"Check for Updates\"), menu, [p_win]() {\n    Updater updater(p_win);\n    updater.exec();\n  });\n\n  menu->addAction(MainWindow::tr(\"Restart\"), menu, [p_win]() { p_win->restart(); });\n\n  auto quitAct = menu->addAction(MainWindow::tr(\"Quit\"), menu, [p_win]() { p_win->quitApp(); });\n  quitAct->setMenuRole(QAction::QuitRole);\n  WidgetUtils::addActionShortcut(quitAct, coreConfig.getShortcut(CoreConfig::Shortcut::Quit));\n}\n\nvoid ToolBarHelper::activateQuickAccess(const QString &p_file) {\n  if (p_file.startsWith('#')) {\n    activateQuickAccessFromVxUrl(p_file);\n  } else {\n    activateQuickAccessFilePath(p_file);\n  }\n}\n\nvoid ToolBarHelper::activateQuickAccessFilePath(const QString &p_file) {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto paras = QSharedPointer<FileOpenParameters>::create();\n  paras->m_mode = coreConfig.getDefaultOpenMode();\n\n  emit VNoteX::getInst().openFileRequested(p_file, paras);\n}\n\nvoid ToolBarHelper::activateQuickAccessFromVxUrl(const QString &p_vx_url) {\n  auto notebook = VNoteX::getInst().getNotebookMgr().getCurrentNotebook();\n  if (!notebook) {\n    return;\n  }\n\n  // get 'signature' from format '#signature:filename'\n  QString signature = VxUrlUtils::getSignatureFromVxURL(p_vx_url);\n\n  // get FilePath from Signature from currentNotebook\n  const QString rootPath = notebook->getRootFolderAbsolutePath();\n  const QString filePath = VxUrlUtils::getFilePathFromSignature(rootPath, signature);\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n  auto paras = QSharedPointer<FileOpenParameters>::create();\n  paras->m_mode = coreConfig.getDefaultOpenMode();\n\n  if (filePath.isEmpty()) {\n    return;\n  }\n\n  emit VNoteX::getInst().openFileRequested(filePath, paras);\n}\n"
  },
  {
    "path": "src/widgets/toolbarhelper.h",
    "content": "#ifndef TOOLBARHELPER_H\n#define TOOLBARHELPER_H\n\n#include <QIcon>\n\nclass QToolBar;\nclass QMenu;\n\nnamespace vnotex {\nclass MainWindow;\nclass Task;\n\n// Tool bar helper for MainWindow.\nclass ToolBarHelper {\npublic:\n  ToolBarHelper() = delete;\n\n  // Setup all tool bars of main window.\n  static void setupToolBars(MainWindow *p_mainWindow);\n\n  // Setup tool bars of main window into one unified tool bar.\n  static void setupToolBars(MainWindow *p_mainWindow, QToolBar *p_toolBar);\n\n  static QIcon generateIcon(const QString &p_iconName);\n\n  static QIcon generateDangerousIcon(const QString &p_iconName);\n\n  static void addSpacer(QToolBar *p_toolBar);\n\nprivate:\n  static QToolBar *setupFileToolBar(MainWindow *p_win, QToolBar *p_toolBar);\n\n  static QToolBar *setupQuickAccessToolBar(MainWindow *p_win, QToolBar *p_toolBar);\n\n  static void setupTaskMenu(QMenu *p_menu);\n\n  static void setupTaskActionMenu(QMenu *p_menu);\n\n  static void addTaskMenu(QMenu *p_menu, Task *p_task);\n\n  static QToolBar *setupSettingsToolBar(MainWindow *p_win, QToolBar *p_toolBar);\n\n  static void updateQuickAccessMenu(QMenu *p_menu);\n\n  static void setupExpandButton(MainWindow *p_win, QToolBar *p_toolBar);\n\n  static void setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar);\n\n  static void activateQuickAccess(const QString &p_file);\n\n  static void activateQuickAccessFilePath(const QString &p_file);\n\n  static void activateQuickAccessFromVxUrl(const QString &p_vx_url);\n};\n} // namespace vnotex\n\n#endif // TOOLBARHELPER_H\n"
  },
  {
    "path": "src/widgets/toolbox.cpp",
    "content": "#include \"toolbox.h\"\n\n#include <QAction>\n#include <QHBoxLayout>\n#include <QLabel>\n#include <QStackedLayout>\n#include <QToolButton>\n#include <QVBoxLayout>\n#include <QVariant>\n\n#include \"global.h\"\n#include \"thememgr.h\"\n#include \"vnotex.h\"\n#include <QActionGroup>\n#include <utils/iconutils.h>\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nconst char *ToolBox::c_titleProp = \"ToolBoxTitle\";\n\nconst char *ToolBox::c_titleButtonProp = \"ToolBoxTitleButton\";\n\nconst QString ToolBox::c_titleButtonForegroundName = \"widgets#toolbox#title#button#fg\";\n\nconst QString ToolBox::c_titleButtonActiveForegroundName = \"widgets#toolbox#title#button#active#fg\";\n\nToolBox::ToolBox(QWidget *p_parent)\n    : QFrame(p_parent), NavigationMode(NavigationMode::Type::DoubleKeys, this),\n      m_buttonLayout(nullptr), m_widgetLayout(nullptr), m_buttonActionGroup(nullptr),\n      m_currentIndex(-1) {\n  setupUI();\n}\n\nvoid ToolBox::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  mainLayout->setContentsMargins(CONTENTS_MARGIN, 0, CONTENTS_MARGIN, 0);\n\n  auto titleWid = new QWidget(this);\n  titleWid->setProperty(c_titleProp, true);\n  mainLayout->addWidget(titleWid);\n\n  m_buttonLayout = new QHBoxLayout(titleWid);\n  m_buttonLayout->addStretch();\n  m_buttonLayout->setContentsMargins(0, 0, 0, 0);\n  m_buttonLayout->setSpacing(0);\n\n  m_buttonActionGroup = new QActionGroup(titleWid);\n\n  m_widgetLayout = new QStackedLayout();\n  mainLayout->addLayout(m_widgetLayout);\n}\n\nint ToolBox::addItem(QWidget *p_widget, const QString &p_iconFile, const QString &p_text,\n                     QWidget *p_focusWidget) {\n  int idx = m_items.size();\n\n  auto icon = generateTitleIcon(p_iconFile);\n  auto btn = generateItemButton(icon, p_text, idx);\n  m_buttonLayout->insertWidget(idx, btn);\n  m_widgetLayout->insertWidget(idx, p_widget);\n\n  ItemInfo item;\n  item.m_widget = p_widget;\n  item.m_focusWidget = p_focusWidget;\n  item.m_text = p_text;\n  item.m_button = btn;\n\n  m_items.push_back(item);\n\n  if (idx == 0) {\n    setCurrentIndex(idx, false);\n  }\n\n  return idx;\n}\n\nQVector<void *> ToolBox::getVisibleNavigationItems() {\n  QVector<void *> items;\n  items.reserve(m_items.size());\n  for (const auto &item : m_items) {\n    items.push_back(item.m_widget);\n  }\n  return items;\n}\n\nvoid ToolBox::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) {\n  Q_UNUSED(p_item);\n  QRect rect = m_items[p_idx].m_button->geometry();\n  p_label->move(rect.x(), rect.y() + rect.height() / 2);\n}\n\nvoid ToolBox::handleTargetHit(void *p_item) {\n  if (p_item) {\n    auto widget = static_cast<QWidget *>(p_item);\n    setCurrentWidget(widget, true);\n  }\n}\n\nvoid ToolBox::setCurrentWidget(QWidget *p_widget, bool p_focus) {\n  int idx = -1;\n  for (int i = 0; i < m_items.size(); ++i) {\n    if (m_items[i].m_widget == p_widget) {\n      idx = i;\n      break;\n    }\n  }\n\n  setCurrentIndex(idx, p_focus);\n}\n\nQIcon ToolBox::generateTitleIcon(const QString &p_iconFile) const {\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const auto fg = themeMgr.paletteColor(c_titleButtonForegroundName);\n  const auto activeFg = themeMgr.paletteColor(c_titleButtonActiveForegroundName);\n\n  QVector<IconUtils::OverriddenColor> colors;\n  colors.push_back(IconUtils::OverriddenColor(fg, QIcon::Normal, QIcon::Off));\n  colors.push_back(IconUtils::OverriddenColor(activeFg, QIcon::Normal, QIcon::On));\n\n  return IconUtils::fetchIcon(p_iconFile, colors);\n}\n\nQToolButton *ToolBox::generateItemButton(const QIcon &p_icon, const QString &p_text,\n                                         int p_itemIdx) const {\n  auto btn = new QToolButton();\n  btn->setProperty(c_titleButtonProp, true);\n\n  auto act = new QAction(p_icon, p_text, m_buttonActionGroup);\n  act->setCheckable(true);\n  act->setData(p_itemIdx);\n\n  btn->setDefaultAction(act);\n  connect(btn, &QToolButton::triggered, this, [this](QAction *p_action) {\n    const_cast<ToolBox *>(this)->setCurrentIndex(p_action->data().toInt(), true);\n  });\n\n  return btn;\n}\n\nvoid ToolBox::setCurrentIndex(int p_idx, bool p_focus) {\n  if (p_idx < 0 || p_idx >= m_items.size()) {\n    m_currentIndex = m_items.isEmpty() ? -1 : 0;\n  } else {\n    m_currentIndex = p_idx;\n  }\n\n  setCurrentButtonIndex(m_currentIndex);\n  m_widgetLayout->setCurrentIndex(m_currentIndex);\n\n  auto widget = m_widgetLayout->widget(m_currentIndex);\n  if (widget && p_focus) {\n    if (m_items[m_currentIndex].m_focusWidget) {\n      m_items[m_currentIndex].m_focusWidget->setFocus();\n    } else {\n      widget->setFocus();\n    }\n  }\n}\n\nvoid ToolBox::setCurrentButtonIndex(int p_idx) {\n  for (int i = 0; i < m_items.size(); ++i) {\n    auto btn = m_items[i].m_button;\n    btn->setChecked(p_idx == i);\n    btn->setToolButtonStyle(p_idx == i ? Qt::ToolButtonTextBesideIcon : Qt::ToolButtonIconOnly);\n  }\n}\n\nvoid ToolBox::focusInEvent(QFocusEvent *p_event) {\n  QFrame::focusInEvent(p_event);\n\n  // Focus current tab.\n  setCurrentIndex(m_currentIndex, true);\n}\n"
  },
  {
    "path": "src/widgets/toolbox.h",
    "content": "#ifndef TOOLBOX_H\n#define TOOLBOX_H\n\n#include <QFrame>\n#include <QIcon>\n#include <QVector>\n\n#include \"navigationmode.h\"\n\nclass QToolButton;\nclass QStackedLayout;\nclass QBoxLayout;\nclass QActionGroup;\n\nnamespace vnotex {\nclass ThemeMgr;\n\nclass ToolBox : public QFrame, public NavigationMode {\n  Q_OBJECT\npublic:\n  explicit ToolBox(QWidget *p_parent = nullptr);\n\n  // Returns the index of newly added item.\n  int addItem(QWidget *p_widget, const QString &p_iconFile, const QString &p_text,\n              QWidget *p_focusWidget = nullptr);\n\n  void setCurrentIndex(int p_idx, bool p_focus);\n\n  void setCurrentWidget(QWidget *p_widget, bool p_focus);\n\n  // NavigationMode.\nprotected:\n  QVector<void *> getVisibleNavigationItems() Q_DECL_OVERRIDE;\n\n  void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE;\n\n  void handleTargetHit(void *p_item) Q_DECL_OVERRIDE;\n\nprotected:\n  void focusInEvent(QFocusEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  struct ItemInfo {\n    ItemInfo() : m_widget(nullptr), m_focusWidget(nullptr), m_button(nullptr) {}\n\n    QWidget *m_widget;\n    QWidget *m_focusWidget;\n    QString m_text;\n    QToolButton *m_button;\n  };\n\n  void setupUI();\n\n  QToolButton *generateItemButton(const QIcon &p_icon, const QString &p_text, int p_itemIdx) const;\n\n  QIcon generateTitleIcon(const QString &p_iconFile) const;\n\n  void setCurrentButtonIndex(int p_idx);\n\n  QBoxLayout *m_buttonLayout;\n\n  QStackedLayout *m_widgetLayout;\n\n  QActionGroup *m_buttonActionGroup;\n\n  int m_currentIndex;\n\n  QVector<ItemInfo> m_items;\n\n  static const char *c_titleProp;\n\n  static const char *c_titleButtonProp;\n\n  static const QString c_titleButtonForegroundName;\n\n  static const QString c_titleButtonActiveForegroundName;\n};\n} // namespace vnotex\n\n#endif // TOOLBOX_H\n"
  },
  {
    "path": "src/widgets/treeview.cpp",
    "content": "#include \"treeview.h\"\n\n#include <QKeyEvent>\n\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nTreeView::TreeView(QWidget *p_parent) : QTreeView(p_parent) {}\n\nvoid TreeView::keyPressEvent(QKeyEvent *p_event) {\n  if (WidgetUtils::processKeyEventLikeVi(this, p_event)) {\n    return;\n  }\n\n  QTreeView::keyPressEvent(p_event);\n}\n"
  },
  {
    "path": "src/widgets/treeview.h",
    "content": "#ifndef TREEVIEW_H\n#define TREEVIEW_H\n\n#include <QTreeView>\n#include <QVariant>\n\nnamespace vnotex {\nclass TreeView : public QTreeView {\n  Q_OBJECT\npublic:\n  explicit TreeView(QWidget *p_parent = nullptr);\n\nprotected:\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // TREEVIEW_H\n"
  },
  {
    "path": "src/widgets/treewidget.cpp",
    "content": "#include \"treewidget.h\"\n\n#include <QDropEvent>\n#include <QHeaderView>\n#include <QKeyEvent>\n#include <QMouseEvent>\n\n#include \"styleditemdelegate.h\"\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nTreeWidget::TreeWidget(QWidget *p_parent) : QTreeWidget(p_parent) {}\n\nTreeWidget::TreeWidget(TreeWidget::Flags p_flags, QWidget *p_parent)\n    : QTreeWidget(p_parent), m_flags(p_flags) {\n  if (m_flags & Flag::EnhancedStyle) {\n    auto interface = QSharedPointer<StyledItemDelegateTreeWidget>::create(this);\n    auto delegate = new StyledItemDelegate(interface, StyledItemDelegate::Highlights, this);\n    setItemDelegate(delegate);\n  }\n}\n\nvoid TreeWidget::mousePressEvent(QMouseEvent *p_event) {\n  QTreeWidget::mousePressEvent(p_event);\n\n  if (m_flags & Flag::ClickSpaceToClearSelection) {\n    auto idx = indexAt(p_event->pos());\n    if (!idx.isValid()) {\n      clearSelection();\n      setCurrentItem(NULL);\n    }\n  }\n}\n\nvoid TreeWidget::setupSingleColumnHeaderlessTree(QTreeWidget *p_widget, bool p_contextMenu,\n                                                 bool p_extendedSelection) {\n  p_widget->setColumnCount(1);\n  p_widget->setHeaderHidden(true);\n  if (p_contextMenu) {\n    p_widget->setContextMenuPolicy(Qt::CustomContextMenu);\n  }\n  if (p_extendedSelection) {\n    p_widget->setSelectionMode(QAbstractItemView::ExtendedSelection);\n  }\n}\n\nvoid TreeWidget::showHorizontalScrollbar(QTreeWidget *p_tree) {\n  p_tree->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);\n  p_tree->header()->setSectionResizeMode(QHeaderView::ResizeToContents);\n  p_tree->header()->setStretchLastSection(false);\n}\n\nQTreeWidgetItem *TreeWidget::findItem(const QTreeWidget *p_widget, const QVariant &p_data,\n                                      int p_column) {\n  int nrTop = p_widget->topLevelItemCount();\n  for (int i = 0; i < nrTop; ++i) {\n    auto item = findItemHelper(p_widget->topLevelItem(i), p_data, p_column);\n    if (item) {\n      return item;\n    }\n  }\n\n  return nullptr;\n}\n\nQTreeWidgetItem *TreeWidget::findItemHelper(QTreeWidgetItem *p_item, const QVariant &p_data,\n                                            int p_column) {\n  if (!p_item) {\n    return nullptr;\n  }\n\n  if (p_item->data(0, Qt::UserRole) == p_data) {\n    return p_item;\n  }\n\n  int nrChild = p_item->childCount();\n  for (int i = 0; i < nrChild; ++i) {\n    auto item = findItemHelper(p_item->child(i), p_data, p_column);\n    if (item) {\n      return item;\n    }\n  }\n\n  return nullptr;\n}\n\nvoid TreeWidget::keyPressEvent(QKeyEvent *p_event) {\n  if (WidgetUtils::processKeyEventLikeVi(this, p_event)) {\n    return;\n  }\n\n  // On Mac OS X, it is `Command+O` to activate an item, instead of Return.\n#if defined(Q_OS_MACOS) || defined(Q_OS_MAC)\n  if (p_event->key() == Qt::Key_Return || p_event->key() == Qt::Key_Enter) {\n    if (auto item = currentItem()) {\n      emit itemActivated(item, currentColumn());\n    }\n    return;\n  }\n#endif\n\n  QTreeWidget::keyPressEvent(p_event);\n}\n\nQTreeWidgetItem *TreeWidget::nextItem(const QTreeWidget *p_tree, QTreeWidgetItem *p_item,\n                                      bool p_forward) {\n  QTreeWidgetItem *nItem = NULL;\n  if (p_forward) {\n    if (p_item->isExpanded() && p_item->childCount() > 0) {\n      nItem = p_item->child(0);\n    } else {\n      while (!nItem && p_item) {\n        nItem = nextSibling(p_tree, p_item, true);\n        p_item = p_item->parent();\n      }\n    }\n  } else {\n    nItem = nextSibling(p_tree, p_item, false);\n    if (!nItem) {\n      nItem = p_item->parent();\n    } else {\n      nItem = lastItemOfTree(nItem);\n    }\n  }\n\n  return nItem;\n}\n\nQTreeWidgetItem *TreeWidget::lastItemOfTree(QTreeWidgetItem *p_item) {\n  if (p_item->isExpanded() && p_item->childCount() > 0) {\n    return p_item->child(p_item->childCount() - 1);\n  } else {\n    return p_item;\n  }\n}\n\nQTreeWidgetItem *TreeWidget::nextSibling(const QTreeWidget *p_tree, QTreeWidgetItem *p_item,\n                                         bool p_forward) {\n  if (!p_item) {\n    return NULL;\n  }\n\n  QTreeWidgetItem *pa = p_item->parent();\n  if (pa) {\n    int idx = pa->indexOfChild(p_item);\n    if (p_forward) {\n      ++idx;\n      if (idx >= pa->childCount()) {\n        return NULL;\n      }\n    } else {\n      --idx;\n      if (idx < 0) {\n        return NULL;\n      }\n    }\n\n    return pa->child(idx);\n  } else {\n    // Top level item.\n    int idx = p_tree->indexOfTopLevelItem(p_item);\n    if (p_forward) {\n      ++idx;\n      if (idx >= p_tree->topLevelItemCount()) {\n        return NULL;\n      }\n    } else {\n      --idx;\n      if (idx < 0) {\n        return NULL;\n      }\n    }\n\n    return p_tree->topLevelItem(idx);\n  }\n}\n\nQVector<QTreeWidgetItem *> TreeWidget::getVisibleItems(const QTreeWidget *p_widget) {\n  QVector<QTreeWidgetItem *> items;\n\n  auto firstItem = p_widget->itemAt(0, 0);\n  if (!firstItem) {\n    return items;\n  }\n\n  auto lastItem = p_widget->itemAt(p_widget->viewport()->rect().bottomLeft());\n\n  auto item = firstItem;\n  while (item) {\n    items.append(item);\n    if (item == lastItem) {\n      break;\n    }\n\n    item = nextItem(p_widget, item, true);\n  }\n\n  return items;\n}\n\nvoid TreeWidget::dropEvent(QDropEvent *p_event) {\n  auto dragItems = selectedItems();\n\n  QTreeWidget::dropEvent(p_event);\n\n  if (dragItems.size() == 1) {\n    emit itemMoved(dragItems[0]);\n  }\n}\n\nvoid TreeWidget::forEachItem(const QTreeWidget *p_widget,\n                             const std::function<bool(QTreeWidgetItem *p_item)> &p_func) {\n  const int cnt = p_widget->topLevelItemCount();\n  for (int i = 0; i < cnt; ++i) {\n    if (!forEachItem(p_widget->topLevelItem(i), p_func)) {\n      break;\n    }\n  }\n}\n\nbool TreeWidget::forEachItem(QTreeWidgetItem *p_item,\n                             const std::function<bool(QTreeWidgetItem *p_item)> &p_func) {\n  if (!p_item) {\n    return true;\n  }\n\n  if (!p_func(p_item)) {\n    return false;\n  }\n\n  const int cnt = p_item->childCount();\n  for (int i = 0; i < cnt; ++i) {\n    if (!forEachItem(p_item->child(i), p_func)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvoid TreeWidget::mark(QTreeWidgetItem *p_item, int p_column) {\n  p_item->setData(p_column, Qt::ForegroundRole, StyledItemDelegate::s_highlightForeground);\n  p_item->setData(p_column, Qt::BackgroundRole, StyledItemDelegate::s_highlightBackground);\n}\n\nvoid TreeWidget::unmark(QTreeWidgetItem *p_item, int p_column) {\n  p_item->setData(p_column, Qt::ForegroundRole, QVariant());\n  p_item->setData(p_column, Qt::BackgroundRole, QVariant());\n}\n\nvoid TreeWidget::expandRecursively(QTreeWidgetItem *p_item) {\n  if (!p_item) {\n    return;\n  }\n\n  p_item->setExpanded(true);\n  const int cnt = p_item->childCount();\n  if (cnt == 0) {\n    return;\n  }\n\n  for (int i = 0; i < cnt; ++i) {\n    expandRecursively(p_item->child(i));\n  }\n}\n\nvoid TreeWidget::selectParentItem(QTreeWidget *p_widget) {\n  auto item = p_widget->currentItem();\n  if (item) {\n    auto pitem = item->parent();\n    if (pitem) {\n      p_widget->setCurrentItem(pitem, 0, QItemSelectionModel::ClearAndSelect);\n    }\n  }\n}\n\nstatic bool isItemTreeExpanded(const QTreeWidgetItem *p_item) {\n  if (!p_item) {\n    return true;\n  }\n\n  if (p_item->isHidden() || !p_item->isExpanded()) {\n    return false;\n  }\n\n  int cnt = p_item->childCount();\n  for (int i = 0; i < cnt; ++i) {\n    if (!isItemTreeExpanded(p_item->child(i))) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nbool TreeWidget::isExpanded(const QTreeWidget *p_widget) {\n  int cnt = p_widget->topLevelItemCount();\n  for (int i = 0; i < cnt; ++i) {\n    if (!isItemTreeExpanded(p_widget->topLevelItem(i))) {\n      return false;\n    }\n  }\n\n  return true;\n}\n"
  },
  {
    "path": "src/widgets/treewidget.h",
    "content": "#ifndef TREEWIDGET_H\n#define TREEWIDGET_H\n\n#include <QTreeWidget>\n#include <QVariant>\n\nnamespace vnotex {\nclass TreeWidget : public QTreeWidget {\n  Q_OBJECT\npublic:\n  enum Flag { None = 0, ClickSpaceToClearSelection = 0x1, EnhancedStyle = 0x2 };\n  Q_DECLARE_FLAGS(Flags, Flag)\n\n  explicit TreeWidget(QWidget *p_parent = nullptr);\n\n  TreeWidget(TreeWidget::Flags p_flags, QWidget *p_parent = nullptr);\n\n  void mark(QTreeWidgetItem *p_item, int p_column);\n\n  void unmark(QTreeWidgetItem *p_item, int p_column);\n\n  static void setupSingleColumnHeaderlessTree(QTreeWidget *p_widget, bool p_contextMenu,\n                                              bool p_extendedSelection);\n\n  static void showHorizontalScrollbar(QTreeWidget *p_tree);\n\n  static QTreeWidgetItem *findItem(const QTreeWidget *p_widget, const QVariant &p_data,\n                                   int p_column = 0);\n\n  // Next visible item.\n  static QTreeWidgetItem *nextItem(const QTreeWidget *p_tree, QTreeWidgetItem *p_item,\n                                   bool p_forward);\n\n  static QVector<QTreeWidgetItem *> getVisibleItems(const QTreeWidget *p_widget);\n\n  // @p_func: return false to abort the iteration.\n  static void forEachItem(const QTreeWidget *p_widget,\n                          const std::function<bool(QTreeWidgetItem *p_item)> &p_func);\n\n  static void expandRecursively(QTreeWidgetItem *p_item);\n\n  static void selectParentItem(QTreeWidget *p_widget);\n\n  static bool isExpanded(const QTreeWidget *p_widget);\n\nsignals:\n  // Emit when single item is selected and Drag&Drop to move internally.\n  void itemMoved(QTreeWidgetItem *p_item);\n\nprotected:\n  void mousePressEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;\n\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\n\n  void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  static QTreeWidgetItem *findItemHelper(QTreeWidgetItem *p_item, const QVariant &p_data,\n                                         int p_column);\n\n  static QTreeWidgetItem *nextSibling(const QTreeWidget *p_widget, QTreeWidgetItem *p_item,\n                                      bool p_forward);\n\n  static QTreeWidgetItem *lastItemOfTree(QTreeWidgetItem *p_item);\n\n  // @p_func: return false to abort the iteration.\n  // Return false to abort the ieration.\n  static bool forEachItem(QTreeWidgetItem *p_item,\n                          const std::function<bool(QTreeWidgetItem *p_item)> &p_func);\n\n  Flags m_flags = Flag::None;\n};\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(TreeWidget::Flags)\n} // namespace vnotex\n\n#endif // TREEWIDGET_H\n"
  },
  {
    "path": "src/widgets/treewidgetitem.cpp",
    "content": "#include \"treewidgetitem.h\"\n\n#include <QTreeWidget>\n#include <QVariant>\n\n#include <core/global.h>\n\nusing namespace vnotex;\n\nTreeWidgetItem::TreeWidgetItem(QTreeWidget *p_parent, const QStringList &p_strings, int p_type)\n    : QTreeWidgetItem(p_parent, p_strings, p_type) {}\n\nbool TreeWidgetItem::operator<(const QTreeWidgetItem &p_other) const {\n  int column = treeWidget() ? treeWidget()->sortColumn() : 0;\n\n  // Check ComparisonRole first.\n  QVariant v1 = data(column, Role::ComparisonRole);\n  QVariant v2 = p_other.data(column, Role::ComparisonRole);\n  if (v1.isNull() || v2.isNull()) {\n    v1 = data(column, Qt::DisplayRole);\n    v2 = p_other.data(column, Qt::DisplayRole);\n  }\n\n  if (v1.canConvert<QString>() && v2.canConvert<QString>()) {\n    const auto s1 = v1.toString().toLower();\n    const auto s2 = v2.toString().toLower();\n    return s1 < s2;\n  }\n\n  return QTreeWidgetItem::operator<(p_other);\n}\n"
  },
  {
    "path": "src/widgets/treewidgetitem.h",
    "content": "#ifndef TREEWIDGETITEM_H\n#define TREEWIDGETITEM_H\n\n#include <QTreeWidgetItem>\n\nnamespace vnotex {\n// Provide additional features:\n// 1. Sorting case-insensitive.\nclass TreeWidgetItem : public QTreeWidgetItem {\npublic:\n  TreeWidgetItem(QTreeWidget *p_parent, const QStringList &p_strings, int p_type = Type);\n\n  bool operator<(const QTreeWidgetItem &p_other) const Q_DECL_OVERRIDE;\n};\n} // namespace vnotex\n\n#endif // TREEWIDGETITEM_H\n"
  },
  {
    "path": "src/widgets/viewarea.cpp",
    "content": "#include \"viewarea.h\"\n\n#include <QApplication>\n#include <QCoreApplication>\n#include <QDragEnterEvent>\n#include <QDropEvent>\n#include <QHash>\n#include <QLabel>\n#include <QLayout>\n#include <QSet>\n#include <QShortcut>\n#include <QSize>\n#include <QSplitter>\n#include <QTabBar>\n#include <QTimer>\n\n#include \"editors/graphvizhelper.h\"\n#include \"editors/plantumlhelper.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/editorconfig.h>\n#include <core/events.h>\n#include <core/fileopenparameters.h>\n#include <core/historymgr.h>\n#include <core/markdowneditorconfig.h>\n#include <core/notebookmgr.h>\n#include <core/sessionconfig.h>\n#include <core/vnotex.h>\n#include <notebook/node.h>\n#include <notebook/notebook.h>\n#include <utils/docsutils.h>\n#include <utils/urldragdroputils.h>\n#include <utils/widgetutils.h>\n#include <widgets/dialogs/selectdialog.h>\n\n#include \"mainwindow.h\"\n#include \"messageboxhelper.h\"\n#include \"propertydefs.h\"\n#include \"viewwindow.h\"\n\nusing namespace vnotex;\n\nViewArea::ViewArea(QWidget *p_parent)\n    : QWidget(p_parent), NavigationMode(NavigationMode::Type::DoubleKeys, this) {\n  setupUI();\n\n  setAcceptDrops(true);\n\n  setupShortcuts();\n\n  connect(this, &ViewArea::viewSplitsCountChanged, this, &ViewArea::handleViewSplitsCountChange);\n\n  auto mainWindow = VNoteX::getInst().getMainWindow();\n  connect(mainWindow, &MainWindow::mainWindowClosed, this,\n          [this](const QSharedPointer<Event> &p_event) {\n            if (p_event->m_handled) {\n              return;\n            }\n\n            if (ConfigMgr::getInst().getCoreConfig().isRecoverLastSessionOnStartEnabled()) {\n              saveSession();\n            }\n\n            bool ret = close(false);\n            if (!ret) {\n              p_event->m_response = false;\n              p_event->m_handled = true;\n            }\n          });\n  connect(mainWindow, &MainWindow::minimizedToSystemTray, this, [this]() {\n    if (ConfigMgr::getInst().getCoreConfig().isRecoverLastSessionOnStartEnabled()) {\n      // Save it here, too. Avoid losing session when VNote is closed unexpectedly.\n      saveSession();\n    }\n  });\n\n  connect(mainWindow, &MainWindow::mainWindowClosedOnQuit, this, [this]() { close(true); });\n\n  connect(mainWindow, &MainWindow::mainWindowStarted, this, &ViewArea::loadSession);\n\n  connect(&VNoteX::getInst(), &VNoteX::nodeAboutToMove, this, &ViewArea::handleNodeChange);\n\n  connect(&VNoteX::getInst(), &VNoteX::nodeAboutToRemove, this, &ViewArea::handleNodeChange);\n\n  connect(&VNoteX::getInst(), &VNoteX::nodeAboutToRename, this, &ViewArea::handleNodeChange);\n\n  connect(&VNoteX::getInst(), &VNoteX::nodeAboutToReload, this, &ViewArea::handleNodeChange);\n\n  connect(&VNoteX::getInst(), &VNoteX::closeFileRequested, this, &ViewArea::closeFile);\n\n  auto &configMgr = ConfigMgr::getInst();\n  connect(&configMgr, &ConfigMgr::editorConfigChanged, this, [this]() {\n    forEachViewWindow([](ViewWindow *p_win) {\n      p_win->handleEditorConfigChange();\n      return true;\n    });\n\n    const auto &markdownEditorConfig =\n        ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();\n    PlantUmlHelper::getInst().update(markdownEditorConfig.getPlantUmlJar(),\n                                     markdownEditorConfig.getGraphvizExe(),\n                                     markdownEditorConfig.getPlantUmlCommand());\n    GraphvizHelper::getInst().update(markdownEditorConfig.getGraphvizExe());\n  });\n\n  m_fileCheckTimer = new QTimer(this);\n  m_fileCheckTimer->setSingleShot(false);\n  m_fileCheckTimer->setInterval(2000);\n  connect(m_fileCheckTimer, &QTimer::timeout, this, [this]() {\n    auto win = getCurrentViewWindow();\n    if (win) {\n      win->checkFileMissingOrChangedOutsidePeriodically();\n    }\n  });\n\n  connect(qApp, &QApplication::focusChanged, this, [this](QWidget *p_old, QWidget *p_now) {\n    if (!p_now) {\n      m_fileCheckTimer->stop();\n    } else if (!p_old && m_currentSplit) {\n      m_fileCheckTimer->start();\n    }\n  });\n}\n\nViewArea::~ViewArea() {\n  // All splits/workspaces/windows should be released during close() before destruction.\n  Q_ASSERT(m_splits.isEmpty() && m_currentSplit == nullptr);\n  Q_ASSERT(m_workspaces.isEmpty());\n}\n\nvoid ViewArea::handleNodeChange(Node *p_node, const QSharedPointer<Event> &p_event) {\n  if (p_event->m_handled) {\n    return;\n  }\n\n  bool ret = close(p_node, false);\n  p_event->m_response = ret;\n  p_event->m_handled = !ret;\n}\n\nvoid ViewArea::setupUI() {\n  setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);\n\n  m_mainLayout = new QVBoxLayout(this);\n  m_mainLayout->setContentsMargins(0, 0, 0, 0);\n}\n\nQSize ViewArea::sizeHint() const {\n  const QSize preferredSize(400, 300);\n  auto sz = QWidget::sizeHint();\n  if (sz.width() < preferredSize.width()) {\n    sz = preferredSize;\n  }\n\n  return sz;\n}\n\nvoid ViewArea::openBuffer(Buffer *p_buffer, const QSharedPointer<FileOpenParameters> &p_paras) {\n  // We allow multiple ViewWindows of the same buffer in different workspaces by default.\n  QVector<ViewWindow *> wins;\n  if (!p_paras->m_alwaysNewWindow) {\n    wins = findBufferInViewSplits(p_buffer);\n  }\n  if (wins.isEmpty()) {\n    if (!m_currentSplit) {\n      addFirstViewSplit();\n    }\n\n    Q_ASSERT(m_currentSplit);\n\n    // Create a ViewWindow from @p_buffer.\n    auto window = p_buffer->createViewWindow(p_paras, nullptr);\n    m_currentSplit->addViewWindow(window);\n    setCurrentViewWindow(window);\n  } else {\n    auto selectedWin = wins.first();\n    for (auto win : wins) {\n      // Prefer window in current split.\n      if (win->getViewSplit() == m_currentSplit) {\n        selectedWin = win;\n        break;\n      }\n    }\n\n    selectedWin->openTwice(p_paras);\n\n    setCurrentViewWindow(selectedWin);\n  }\n\n  if (p_paras->m_focus) {\n    auto win = getCurrentViewWindow();\n    if (win) {\n      win->setFocus(Qt::OtherFocusReason);\n    }\n  }\n}\n\nQVector<ViewWindow *> ViewArea::findBufferInViewSplits(const Buffer *p_buffer) const {\n  QVector<ViewWindow *> wins;\n  for (auto split : m_splits) {\n    auto winsInSplit = split->findBuffer(p_buffer);\n    if (!winsInSplit.isEmpty()) {\n      wins.append(winsInSplit);\n    }\n  }\n\n  return wins;\n}\n\nViewSplit *ViewArea::createViewSplit(QWidget *p_parent, ID p_viewSplitId) {\n  auto workspace = createWorkspace();\n  m_workspaces.push_back(workspace);\n\n  if (p_viewSplitId == InvalidViewSplitId) {\n    p_viewSplitId = m_nextViewSplitId++;\n  } else if (p_viewSplitId >= m_nextViewSplitId) {\n    m_nextViewSplitId = p_viewSplitId + 1;\n  }\n\n  auto split = new ViewSplit(m_workspaces, workspace, p_viewSplitId, p_parent);\n  connect(split, &ViewSplit::viewWindowCloseRequested, this, [this](ViewWindow *p_win) {\n    closeViewWindow(p_win, false, true);\n    emit windowsChanged();\n  });\n  connect(split, &ViewSplit::verticalSplitRequested, this, [this](ViewSplit *p_split) {\n    splitViewSplit(p_split, SplitType::Vertical);\n    emit windowsChanged();\n  });\n  connect(split, &ViewSplit::horizontalSplitRequested, this, [this](ViewSplit *p_split) {\n    splitViewSplit(p_split, SplitType::Horizontal);\n    emit windowsChanged();\n  });\n  // 连接空split创建信号, 方便思维导图, 看板, 等其他前端与后端笔记联动\n  connect(split, &ViewSplit::emptySplitRequested, this,\n          [this](ViewSplit *p_split, Direction p_direction) {\n            // 根据方向确定split类型\n            SplitType splitType =\n                (p_direction == Direction::Left || p_direction == Direction::Right)\n                    ? SplitType::Vertical\n                    : SplitType::Horizontal;\n            // 创建空的split（p_cloneViewWindow = false）\n            auto newSplit = splitViewSplit(p_split, splitType, false);\n\n            // 如果是左边或上边，需要调整split位置\n            if (p_direction == Direction::Left || p_direction == Direction::Up) {\n              auto splitter = tryGetParentSplitter(newSplit);\n              if (splitter && splitter->indexOf(newSplit) == 1) {\n                splitter->insertWidget(0, newSplit);\n              }\n            }\n\n            // 设置新split为当前split\n            setCurrentViewSplit(newSplit, true);\n            emit windowsChanged();\n          });\n  connect(split, &ViewSplit::maximizeSplitRequested, this, &ViewArea::maximizeViewSplit);\n  connect(split, &ViewSplit::distributeSplitsRequested, this, &ViewArea::distributeViewSplits);\n  connect(split, &ViewSplit::removeSplitRequested, this, [this](ViewSplit *p_split) {\n    removeViewSplit(p_split, false);\n    emit windowsChanged();\n  });\n  connect(split, &ViewSplit::removeSplitAndWorkspaceRequested, this, [this](ViewSplit *p_split) {\n    removeViewSplit(p_split, true);\n    emit windowsChanged();\n  });\n  connect(split, &ViewSplit::newWorkspaceRequested, this, [this](ViewSplit *p_split) {\n    newWorkspaceInViewSplit(p_split);\n    emit windowsChanged();\n  });\n  connect(split, &ViewSplit::removeWorkspaceRequested, this, [this](ViewSplit *p_split) {\n    removeWorkspaceInViewSplit(p_split, true);\n    emit windowsChanged();\n  });\n  connect(split, &ViewSplit::focused, this, [this](ViewSplit *p_split) {\n    setCurrentViewSplit(p_split, false);\n    checkCurrentViewWindowChange();\n  });\n  connect(split, &ViewSplit::currentViewWindowChanged, this, [this](ViewWindow *p_win) {\n    checkCurrentViewWindowChange();\n    if (shouldUseGlobalStatusWidget()) {\n      if (p_win) {\n        p_win->setStatusWidgetVisible(false);\n      }\n      m_currentStatusWidget = p_win ? p_win->statusWidget() : nullptr;\n      emit statusWidgetChanged(m_currentStatusWidget.get());\n    } else {\n      Q_ASSERT(!m_currentStatusWidget);\n      if (p_win) {\n        p_win->setStatusWidgetVisible(true);\n      }\n    }\n    emit windowsChanged();\n  });\n  connect(split, &ViewSplit::moveViewWindowOneSplitRequested, this,\n          [this](ViewSplit *p_split, ViewWindow *p_win, Direction p_direction) {\n            moveViewWindowOneSplit(p_split, p_win, p_direction);\n            emit windowsChanged();\n          });\n  return split;\n}\n\nvoid ViewArea::showSceneWidget() {\n  Q_ASSERT(!m_sceneWidget);\n  Q_ASSERT(m_splits.isEmpty());\n  if (m_sceneWidget || !m_splits.isEmpty()) {\n    // Double check.\n    return;\n  }\n  auto text = DocsUtils::getDocText(QStringLiteral(\"get_started.txt\"));\n  // TODO: a more informative widget, such as adding workspace list and LRU files.\n  m_sceneWidget = new QLabel(text, this);\n  m_mainLayout->addWidget(m_sceneWidget);\n}\n\nvoid ViewArea::hideSceneWidget() {\n  Q_ASSERT(m_sceneWidget);\n  if (!m_sceneWidget) {\n    // Double check.\n    return;\n  }\n  m_mainLayout->removeWidget(m_sceneWidget);\n  delete m_sceneWidget;\n  m_sceneWidget = nullptr;\n}\n\nvoid ViewArea::addFirstViewSplit() {\n  Q_ASSERT(!m_currentSplit && m_splits.isEmpty());\n\n  auto split = createViewSplit(this);\n\n  m_splits.push_back(split);\n\n  hideSceneWidget();\n  m_mainLayout->addWidget(split);\n\n  postFirstViewSplit();\n}\n\nvoid ViewArea::postFirstViewSplit() {\n  Q_ASSERT(!m_splits.isEmpty());\n  auto currentSplit = m_splits.first();\n  // Check if any split has focus. If there is any, then set it as current split.\n  auto focusWidget = QApplication::focusWidget();\n  if (focusWidget) {\n    for (const auto &split : m_splits) {\n      if (split == focusWidget || split->isAncestorOf(focusWidget)) {\n        currentSplit = split;\n        break;\n      }\n    }\n  }\n  setCurrentViewSplit(currentSplit, false);\n\n  emit viewSplitsCountChanged();\n  checkCurrentViewWindowChange();\n\n  m_fileCheckTimer->start();\n}\n\nstatic ViewSplit *fetchFirstChildViewSplit(const QSplitter *p_splitter) {\n  if (p_splitter->count() == 0) {\n    return nullptr;\n  }\n\n  auto child = p_splitter->widget(0);\n  auto split = dynamic_cast<ViewSplit *>(child);\n  if (split) {\n    return split;\n  }\n\n  auto childSplitter = dynamic_cast<QSplitter *>(child);\n  Q_ASSERT(childSplitter);\n  return fetchFirstChildViewSplit(childSplitter);\n}\n\nvoid ViewArea::removeViewSplit(ViewSplit *p_split, bool p_removeWorkspace) {\n  if (p_removeWorkspace) {\n    // Remove workspace.\n    bool ret = removeWorkspaceInViewSplit(p_split, false);\n    if (!ret) {\n      return;\n    }\n  } else {\n    // Detach workspace.\n    p_split->setWorkspace(nullptr);\n  }\n\n  // Remove split.\n  disconnect(p_split, 0, this, 0);\n  disconnect(this, 0, p_split, 0);\n  m_splits.removeAll(p_split);\n\n  // Get new current split.\n  ViewSplit *newCurrentSplit = nullptr;\n  auto splitter = tryGetParentSplitter(p_split);\n  if (splitter) {\n    Q_ASSERT(splitter->count() >= 2);\n    p_split->hide();\n    p_split->setParent(this);\n\n    newCurrentSplit = fetchFirstChildViewSplit(splitter);\n\n    if (splitter->count() == 1) {\n      // Remove the splitter if there is only one child in it after the removal.\n      unwrapSplitter(splitter);\n    }\n  } else {\n    m_mainLayout->removeWidget(p_split);\n    if (!m_splits.isEmpty()) {\n      newCurrentSplit = m_splits.first();\n    }\n  }\n\n  p_split->deleteLater();\n\n  // Show scene widget and update current split.\n  if (m_splits.isEmpty()) {\n    Q_ASSERT(newCurrentSplit == nullptr);\n    setCurrentViewSplit(newCurrentSplit, false);\n    showSceneWidget();\n\n    m_fileCheckTimer->stop();\n  } else if (m_currentSplit == p_split) {\n    setCurrentViewSplit(newCurrentSplit, true);\n  }\n\n  emit viewSplitsCountChanged();\n  checkCurrentViewWindowChange();\n}\n\nViewWindow *ViewArea::getCurrentViewWindow() const {\n  auto split = getCurrentViewSplit();\n  if (split) {\n    return split->getCurrentViewWindow();\n  }\n\n  return nullptr;\n}\n\nvoid ViewArea::setCurrentViewWindow(ViewWindow *p_win) {\n  auto split = p_win->getViewSplit();\n  Q_ASSERT(split);\n\n  split->setCurrentViewWindow(p_win);\n\n  setCurrentViewSplit(split, false);\n\n  checkCurrentViewWindowChange();\n}\n\nViewSplit *ViewArea::getCurrentViewSplit() const { return m_currentSplit; }\n\nvoid ViewArea::setCurrentViewSplit(ViewSplit *p_split, bool p_focus) {\n  Q_ASSERT(!p_split || m_splits.contains(p_split));\n  if (p_split == m_currentSplit) {\n    if (p_split && p_focus) {\n      p_split->focus();\n    }\n    return;\n  }\n\n  if (m_currentSplit) {\n    m_currentSplit->setActive(false);\n  }\n\n  m_currentSplit = p_split;\n  if (m_currentSplit) {\n    m_currentSplit->setActive(true);\n    if (p_focus) {\n      m_currentSplit->focus();\n    }\n  }\n}\n\nbool ViewArea::closeViewWindow(ViewWindow *p_win, bool p_force, bool p_removeSplitIfEmpty) {\n  Q_ASSERT(p_win && p_win->getViewSplit());\n  // Make it current ViewWindow.\n  setCurrentViewWindow(p_win);\n\n  // Get info before close.\n  const auto session = p_win->saveSession();\n  Notebook *notebook = nullptr;\n  if (p_win->getBuffer()) {\n    auto node = p_win->getBuffer()->getNode();\n    if (node) {\n      notebook = node->getNotebook();\n    }\n  }\n\n  if (!p_win->aboutToClose(p_force)) {\n    return false;\n  }\n\n  // Update history.\n  updateHistory(session, notebook);\n\n  // Remove the status widget.\n  if (m_currentStatusWidget && p_win == getCurrentViewWindow()) {\n    Q_ASSERT(m_currentStatusWidget == p_win->statusWidget());\n    emit statusWidgetChanged(nullptr);\n  }\n\n  auto split = p_win->getViewSplit();\n  split->takeViewWindow(p_win);\n\n  delete p_win;\n\n  if (p_removeSplitIfEmpty && split->getViewWindowCount() == 0) {\n    // Remove this split and workspace.\n    removeViewSplit(split, true);\n  }\n\n  return true;\n}\n\nQSharedPointer<ViewWorkspace> ViewArea::createWorkspace() {\n  // Get the id of the workspace.\n  ID id = 1;\n  QSet<ID> usedIds;\n  for (auto ws : m_workspaces) {\n    usedIds.insert(ws->m_id);\n  }\n\n  while (true) {\n    if (usedIds.contains(id)) {\n      ++id;\n    } else {\n      break;\n    }\n  }\n\n  return QSharedPointer<ViewWorkspace>::create(id);\n}\n\nViewSplit *ViewArea::splitViewSplit(ViewSplit *p_split, SplitType p_type, bool p_cloneViewWindow) {\n  Q_ASSERT(p_split);\n  // Create the new split.\n  auto newSplit = createViewSplit(this);\n\n  // Clone a ViewWindow for the same buffer to display in the new split.\n  if (p_cloneViewWindow) {\n    auto win = p_split->getCurrentViewWindow();\n    if (win) {\n      auto buffer = win->getBuffer();\n      auto newWindow =\n          buffer->createViewWindow(QSharedPointer<FileOpenParameters>::create(), newSplit);\n      newSplit->addViewWindow(newWindow);\n    }\n  }\n\n  // Obey Vim's practice, which is the opposite of Qt.\n  auto orientation = p_type == SplitType::Vertical ? Qt::Horizontal : Qt::Vertical;\n  auto splitter = tryGetParentSplitter(p_split);\n  if (splitter) {\n    int idx = splitter->indexOf(p_split);\n    if (splitter->orientation() == orientation) {\n      // Same orientation.\n      splitter->insertWidget(idx + 1, newSplit);\n    } else {\n      // Split it further.\n      auto newSplitter = createSplitter(orientation, this);\n      splitter->replaceWidget(idx, newSplitter);\n\n      newSplitter->addWidget(p_split);\n      newSplitter->addWidget(newSplit);\n    }\n  } else {\n    Q_ASSERT(p_split->parent() == this);\n    m_mainLayout->removeWidget(p_split);\n\n    auto newSplitter = createSplitter(orientation, this);\n    newSplitter->addWidget(p_split);\n    newSplitter->addWidget(newSplit);\n\n    m_mainLayout->addWidget(newSplitter);\n  }\n\n  m_splits.push_back(newSplit);\n  setCurrentViewSplit(newSplit, true);\n\n  // Let Qt decide the size of splitter first.\n  QCoreApplication::sendPostedEvents();\n\n  distributeViewSplitsOfSplitter(tryGetParentSplitter(newSplit));\n\n  emit viewSplitsCountChanged();\n  checkCurrentViewWindowChange();\n\n  return newSplit;\n}\n\nQSplitter *ViewArea::createSplitter(Qt::Orientation p_orientation, QWidget *p_parent) const {\n  auto splitter = new QSplitter(p_orientation, p_parent);\n  splitter->setChildrenCollapsible(false);\n  return splitter;\n}\n\nQSplitter *ViewArea::tryGetParentSplitter(const QWidget *p_widget) const {\n  return dynamic_cast<QSplitter *>(p_widget->parent());\n}\n\nvoid ViewArea::distributeViewSplitsOfSplitter(QSplitter *p_splitter) {\n  if (!WidgetUtils::distributeWidgetsOfSplitter(p_splitter)) {\n    return;\n  }\n\n  // Distribute child splitter.\n  for (int i = 0; i < p_splitter->count(); ++i) {\n    auto childSplitter = dynamic_cast<QSplitter *>(p_splitter->widget(i));\n    if (childSplitter) {\n      distributeViewSplitsOfSplitter(childSplitter);\n    }\n  }\n\n  return;\n}\n\nvoid ViewArea::unwrapSplitter(QSplitter *p_splitter) {\n  Q_ASSERT(p_splitter->count() == 1);\n  auto paSplitter = tryGetParentSplitter(p_splitter);\n  if (paSplitter) {\n    Q_ASSERT(paSplitter->count() >= 2);\n    int idx = paSplitter->indexOf(p_splitter);\n    auto child = p_splitter->widget(0);\n    child->setParent(this);\n    paSplitter->replaceWidget(idx, child);\n  } else {\n    // This is the top child of ViewArea.\n    Q_ASSERT(p_splitter->parent() == this);\n    m_mainLayout->removeWidget(p_splitter);\n    // Maybe another splitter or ViewSplit.\n    auto child = p_splitter->widget(0);\n    child->setParent(this);\n    m_mainLayout->addWidget(child);\n  }\n\n  delete p_splitter;\n}\n\nvoid ViewArea::maximizeViewSplit(ViewSplit *p_split) {\n  QWidget *widget = p_split;\n  while (widget && widget != this) {\n    maximizeWidgetOfSplitter(widget);\n    widget = dynamic_cast<QWidget *>(widget->parent());\n  }\n}\n\nvoid ViewArea::maximizeWidgetOfSplitter(QWidget *p_widget) {\n  auto splitter = tryGetParentSplitter(p_widget);\n  if (!splitter || splitter->count() <= 1) {\n    return;\n  }\n\n  const int minSplitWidth = 20 * WidgetUtils::calculateScaleFactor();\n  auto sizes = splitter->sizes();\n  int totalWidth = 0;\n  for (auto sz : sizes) {\n    totalWidth += sz;\n  }\n\n  int newWidth = totalWidth - minSplitWidth * (sizes.size() - 1);\n  if (newWidth <= 0) {\n    return;\n  }\n\n  int idx = splitter->indexOf(p_widget);\n  for (int i = 0; i < sizes.size(); ++i) {\n    sizes[i] = (i == idx) ? newWidth : minSplitWidth;\n  }\n\n  splitter->setSizes(sizes);\n}\n\nvoid ViewArea::distributeViewSplits() {\n  // Get the top splitter if there is any.\n  auto splitter = dynamic_cast<QSplitter *>(m_mainLayout->itemAt(0)->widget());\n  if (!splitter) {\n    return;\n  }\n\n  distributeViewSplitsOfSplitter(splitter);\n}\n\nvoid ViewArea::removeWorkspace(QSharedPointer<ViewWorkspace> p_workspace) {\n  if (!p_workspace) {\n    return;\n  }\n  Q_ASSERT(!p_workspace->m_visible && p_workspace->m_viewWindows.isEmpty());\n\n  p_workspace->clear();\n  m_workspaces.removeAll(p_workspace);\n}\n\nvoid ViewArea::newWorkspaceInViewSplit(ViewSplit *p_split) {\n  auto workspace = createWorkspace();\n  m_workspaces.push_back(workspace);\n\n  p_split->setWorkspace(workspace);\n  setCurrentViewSplit(p_split, true);\n}\n\nbool ViewArea::removeWorkspaceInViewSplit(ViewSplit *p_split, bool p_insertNew) {\n  // Close all the ViewWindows.\n  setCurrentViewSplit(p_split, true);\n  auto wins = p_split->getAllViewWindows();\n  for (const auto win : wins) {\n    if (!closeViewWindow(win, false, false)) {\n      return false;\n    }\n  }\n\n  Q_ASSERT(p_split->getViewWindowCount() == 0);\n  auto workspace = p_split->getWorkspace();\n  p_split->setWorkspace(nullptr);\n  removeWorkspace(workspace);\n\n  if (p_insertNew) {\n    // Find an invisible workspace.\n    bool found = false;\n    for (auto &ws : m_workspaces) {\n      if (!ws->m_visible) {\n        p_split->setWorkspace(ws);\n        found = true;\n        break;\n      }\n    }\n\n    // No invisible workspace. Create a new empty workspace.\n    if (!found) {\n      newWorkspaceInViewSplit(p_split);\n    }\n  }\n\n  return true;\n}\n\nbool ViewArea::shouldUseGlobalStatusWidget() const { return m_splits.size() <= 1; }\n\nvoid ViewArea::handleViewSplitsCountChange() {\n  if (shouldUseGlobalStatusWidget()) {\n    // Hide the status widget for all ViewWindows.\n    forEachViewWindow([](ViewWindow *p_win) {\n      p_win->setStatusWidgetVisible(false);\n      return true;\n    });\n\n    // Show global status widget for current ViewWindow.\n    auto win = getCurrentViewWindow();\n    m_currentStatusWidget = win ? win->statusWidget() : nullptr;\n    emit statusWidgetChanged(m_currentStatusWidget.get());\n  } else {\n    // Show standalone status widget for all ViewWindows.\n    emit statusWidgetChanged(nullptr);\n    m_currentStatusWidget = nullptr;\n\n    forEachViewWindow([](ViewWindow *p_win) {\n      p_win->setStatusWidgetVisible(true);\n      return true;\n    });\n  }\n}\n\nvoid ViewArea::forEachViewWindow(const ViewSplit::ViewWindowSelector &p_func) {\n  for (auto split : m_splits) {\n    if (!split->forEachViewWindow(p_func)) {\n      return;\n    }\n  }\n\n  for (auto &ws : m_workspaces) {\n    if (!ws->m_visible) {\n      for (auto win : ws->m_viewWindows) {\n        if (!p_func(win)) {\n          return;\n        }\n      }\n    }\n  }\n}\n\nbool ViewArea::close(bool p_force) {\n  return closeIf(\n      p_force,\n      [](ViewWindow *p_win) {\n        Q_UNUSED(p_win);\n        return true;\n      },\n      true);\n}\n\nvoid ViewArea::setupShortcuts() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  // CloseTab.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::CloseTab), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto win = getCurrentViewWindow();\n        if (win) {\n          closeViewWindow(win, false, true);\n        }\n      });\n    }\n  }\n\n  // CloseAllTabs\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::CloseAllTabs), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        getCurrentViewSplit()->closeMultipleTabs(ViewSplit::CloseTabMode::CloseAllTabs);\n      });\n    }\n  }\n\n  // CloseOtherTabs\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::CloseOtherTabs), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        getCurrentViewSplit()->closeMultipleTabs(ViewSplit::CloseTabMode::CloseOtherTabs);\n      });\n    }\n  }\n\n  // CloseTabsToTheLeft\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::CloseTabsToTheLeft), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        getCurrentViewSplit()->closeMultipleTabs(ViewSplit::CloseTabMode::CloseTabsToTheLeft);\n      });\n    }\n  }\n\n  // CloseTabsToTheRight\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::CloseTabsToTheRight), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        getCurrentViewSplit()->closeMultipleTabs(ViewSplit::CloseTabMode::CloseTabsToTheRight);\n      });\n    }\n  }\n\n  // LocateNode.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::LocateNode), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto win = getCurrentViewWindow();\n        if (win) {\n          auto node = win->getBuffer()->getNode();\n          if (node) {\n            emit VNoteX::getInst().locateNodeRequested(node);\n          }\n        }\n      });\n    }\n  }\n\n  // FocusContentArea.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::FocusContentArea), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto win = getCurrentViewWindow();\n        if (win) {\n          win->setFocus();\n        } else {\n          setFocus();\n        }\n      });\n    }\n  }\n\n  // OneSplitLeft.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::OneSplitLeft), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { focusSplitByDirection(Direction::Left); });\n    }\n  }\n\n  // OneSplitDown.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::OneSplitDown), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { focusSplitByDirection(Direction::Down); });\n    }\n  }\n\n  // OneSplitUp.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::OneSplitUp), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { focusSplitByDirection(Direction::Up); });\n    }\n  }\n\n  // OneSplitRight.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::OneSplitRight), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { focusSplitByDirection(Direction::Right); });\n    }\n  }\n\n  // OpenLastClosedFile.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::OpenLastClosedFile), this);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto file = HistoryMgr::getInst().popLastClosedFile();\n        if (file.m_path.isEmpty()) {\n          VNoteX::getInst().showStatusMessageShort(tr(\"No recently closed file\"));\n          return;\n        }\n        auto paras = QSharedPointer<FileOpenParameters>::create();\n        paras->m_lineNumber = file.m_lineNumber;\n        paras->m_mode = file.m_mode;\n        paras->m_readOnly = file.m_readOnly;\n        emit VNoteX::getInst().openFileRequested(file.m_path, paras);\n      });\n    }\n  }\n}\n\nbool ViewArea::close(Node *p_node, bool p_force) {\n  return closeIf(\n      p_force,\n      [p_node](ViewWindow *p_win) {\n        auto buffer = p_win->getBuffer();\n        return buffer->match(p_node) || buffer->isChildOf(p_node);\n      },\n      true);\n}\n\nbool ViewArea::close(const Notebook *p_notebook, bool p_force) {\n  return close(p_notebook->getRootNode().data(), p_force);\n}\n\nvoid ViewArea::checkCurrentViewWindowChange() {\n  auto win = getCurrentViewWindow();\n  if (win == m_currentWindow) {\n    return;\n  }\n\n  m_currentWindow = win;\n  emit currentViewWindowChanged();\n}\n\nbool ViewArea::closeIf(bool p_force, const ViewSplit::ViewWindowSelector &p_func,\n                       bool p_closeEmptySplit) {\n  // Go through all hidden workspace. Use current split to show the workspace.\n  if (m_workspaces.size() > m_splits.size()) {\n    if (!m_currentSplit) {\n      // Create at least one split.\n      addFirstViewSplit();\n    }\n\n    // Need to restore it.\n    auto currentWorkspace = m_currentSplit->getWorkspace();\n\n    QVector<QSharedPointer<ViewWorkspace>> hiddenWorkspaces;\n    for (auto &ws : m_workspaces) {\n      if (!ws->m_visible) {\n        Q_ASSERT(ws != currentWorkspace);\n        hiddenWorkspaces.push_back(ws);\n      }\n    }\n\n    Q_ASSERT(!hiddenWorkspaces.isEmpty());\n    for (auto &ws : hiddenWorkspaces) {\n      m_currentSplit->setWorkspace(ws);\n\n      // Go through this split.\n      auto wins = getAllViewWindows(m_currentSplit, p_func);\n      for (const auto win : wins) {\n        // Do not remove the split even if it is empty.\n        bool ret = closeViewWindow(win, p_force, false);\n        if (!ret) {\n          // User cancels the close of one ViewWindow. No need to restore the workspace.\n          return false;\n        }\n      }\n\n      m_currentSplit->setWorkspace(nullptr);\n\n      // Remove this workspace if it is empty.\n      if (ws->m_viewWindows.isEmpty()) {\n        removeWorkspace(ws);\n      }\n    }\n\n    // Restore.\n    m_currentSplit->setWorkspace(currentWorkspace);\n  }\n\n  // Go through all splits.\n  // Collect the ViewWindows first. Collect empty splits.\n  QVector<ViewWindow *> wins;\n  QVector<ViewSplit *> emptySplits;\n  for (auto split : m_splits) {\n    if (p_closeEmptySplit && split->getViewWindowCount() == 0) {\n      emptySplits.push_back(split);\n      continue;\n    }\n\n    wins.append(getAllViewWindows(split, p_func));\n  }\n\n  if (!emptySplits.isEmpty()) {\n    // Remove empty splits.\n    for (auto split : emptySplits) {\n      removeViewSplit(split, true);\n    }\n  }\n\n  if (wins.isEmpty()) {\n    return true;\n  }\n\n  // Close the ViewWindow.\n  for (auto win : wins) {\n    bool ret = closeViewWindow(win, p_force, true);\n    if (!ret) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvoid ViewArea::focus() {\n  auto split = getCurrentViewSplit();\n  if (split) {\n    split->focus();\n  }\n}\n\nQVector<void *> ViewArea::getVisibleNavigationItems() {\n  QVector<void *> items;\n  m_navigationItems.clear();\n\n  int idx = 0;\n  for (auto split : m_splits) {\n    if (split->getViewWindowCount() == 0) {\n      continue;\n    }\n    if (idx >= NavigationMode::c_maxNumOfNavigationItems) {\n      break;\n    }\n    auto info = split->getNavigationModeInfo();\n    for (int i = 0; i < info.size() && idx < NavigationMode::c_maxNumOfNavigationItems;\n         ++i, ++idx) {\n      items.push_back(info[i].m_viewWindow);\n      m_navigationItems.push_back(info[i]);\n    }\n  }\n  return items;\n}\n\nvoid ViewArea::placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) {\n  Q_UNUSED(p_item);\n  Q_ASSERT(p_idx > -1);\n  p_label->setParent(m_navigationItems[p_idx].m_viewWindow->getViewSplit());\n  p_label->move(m_navigationItems[p_idx].m_topLeft);\n}\n\nvoid ViewArea::handleTargetHit(void *p_item) {\n  if (p_item) {\n    setCurrentViewWindow(static_cast<ViewWindow *>(p_item));\n    focus();\n  }\n}\n\nvoid ViewArea::clearNavigation() {\n  NavigationMode::clearNavigation();\n\n  m_navigationItems.clear();\n}\n\nvoid ViewArea::dragEnterEvent(QDragEnterEvent *p_event) {\n  if (UrlDragDropUtils::handleDragEnterEvent(p_event)) {\n    return;\n  }\n\n  QWidget::dragEnterEvent(p_event);\n}\n\nvoid ViewArea::dropEvent(QDropEvent *p_event) {\n  if (UrlDragDropUtils::handleDropEvent(p_event, [](const QStringList &p_files) {\n        for (const auto &file : p_files) {\n          emit VNoteX::getInst().openFileRequested(file,\n                                                   QSharedPointer<FileOpenParameters>::create());\n        }\n      })) {\n    return;\n  }\n\n  QWidget::dropEvent(p_event);\n}\n\nQVector<ViewWindow *>\nViewArea::getAllViewWindows(ViewSplit *p_split, const ViewSplit::ViewWindowSelector &p_func) const {\n  QVector<ViewWindow *> wins;\n  p_split->forEachViewWindow([p_func, &wins](ViewWindow *p_win) {\n    if (p_func(p_win)) {\n      wins.push_back(p_win);\n    }\n    return true;\n  });\n  return wins;\n}\n\nconst QVector<ViewSplit *> &ViewArea::getAllViewSplits() const { return m_splits; }\n\nQList<Buffer *> ViewArea::getAllBuffersInViewSplits() const {\n  QSet<Buffer *> bufferSet;\n\n  for (auto split : m_splits) {\n    auto wins = split->getAllViewWindows();\n    for (auto win : wins) {\n      bufferSet.insert(win->getBuffer());\n    }\n  }\n\n  return bufferSet.values();\n}\n\nvoid ViewArea::loadSession() {\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  // Clear it if recover is disabled.\n  auto sessionData = sessionConfig.getViewAreaSessionAndClear();\n\n  if (!ConfigMgr::getInst().getCoreConfig().isRecoverLastSessionOnStartEnabled()) {\n    showSceneWidget();\n    return;\n  }\n\n  auto session = ViewAreaSession::deserialize(sessionData);\n\n  // Load widgets layout.\n  if (session.m_root.isEmpty()) {\n    showSceneWidget();\n  } else {\n    Q_ASSERT(m_splits.isEmpty());\n    if (session.m_root.m_type == ViewAreaSession::Node::Type::Splitter) {\n      // Splitter.\n      auto splitter = createSplitter(session.m_root.m_orientation, this);\n      m_mainLayout->addWidget(splitter);\n\n      loadSplitterFromSession(session.m_root, splitter);\n    } else {\n      // Just only one ViewSplit.\n      Q_ASSERT(session.m_root.m_type == ViewAreaSession::Node::Type::ViewSplit);\n      auto split = createViewSplit(this, session.m_root.m_viewSplitId);\n      m_splits.push_back(split);\n      m_mainLayout->addWidget(split);\n    }\n\n    QHash<ID, int> viewSplitToWorkspace;\n\n    setCurrentViewSplit(m_splits.first(), false);\n\n    // Load invisible workspace.\n    for (int i = 0; i < session.m_workspaces.size(); ++i) {\n      const auto &ws = session.m_workspaces[i];\n      if (ws.m_viewSplitId != InvalidViewSplitId) {\n        viewSplitToWorkspace.insert(ws.m_viewSplitId, i);\n        continue;\n      }\n\n      for (const auto &winSession : ws.m_viewWindows) {\n        openViewWindowFromSession(winSession);\n      }\n\n      // Check if there is any window.\n      if (m_currentSplit->getViewWindowCount() > 0) {\n        m_currentSplit->setCurrentViewWindow(ws.m_currentViewWindowIndex);\n\n        // New another workspace.\n        auto newWs = createWorkspace();\n        m_workspaces.push_back(newWs);\n        m_currentSplit->setWorkspace(newWs);\n      }\n    }\n\n    // Load visible workspace.\n    for (auto split : m_splits) {\n      setCurrentViewSplit(split, false);\n\n      auto it = viewSplitToWorkspace.find(split->getId());\n      Q_ASSERT(it != viewSplitToWorkspace.end());\n\n      const auto &ws = session.m_workspaces[it.value()];\n\n      for (const auto &winSession : ws.m_viewWindows) {\n        openViewWindowFromSession(winSession);\n      }\n\n      if (m_currentSplit->getViewWindowCount() > 0) {\n        m_currentSplit->setCurrentViewWindow(ws.m_currentViewWindowIndex);\n      }\n    }\n\n    postFirstViewSplit();\n\n    distributeViewSplits();\n  }\n}\n\nvoid ViewArea::saveSession() const {\n  ViewAreaSession session;\n  takeSnapshot(session);\n\n  auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();\n  sessionConfig.setViewAreaSession(session.serialize());\n}\n\nstatic void takeSnapshotOfWidgetNodes(ViewAreaSession::Node &p_node, const QWidget *p_widget,\n                                      QHash<ID, ID> &p_workspaceToViewSplit) {\n  p_node.clear();\n\n  // Splitter.\n  auto splitter = dynamic_cast<const QSplitter *>(p_widget);\n  if (splitter) {\n    p_node.m_type = ViewAreaSession::Node::Type::Splitter;\n    p_node.m_orientation = splitter->orientation();\n    p_node.m_children.resize(splitter->count());\n\n    for (int i = 0; i < p_node.m_children.size(); ++i) {\n      takeSnapshotOfWidgetNodes(p_node.m_children[i], splitter->widget(i), p_workspaceToViewSplit);\n    }\n\n    return;\n  }\n\n  // ViewSplit.\n  auto viewSplit = dynamic_cast<const ViewSplit *>(p_widget);\n  Q_ASSERT(viewSplit);\n  p_node.m_type = ViewAreaSession::Node::Type::ViewSplit;\n  p_node.m_viewSplitId = viewSplit->getId();\n\n  auto ws = viewSplit->getWorkspace();\n  if (ws) {\n    viewSplit->updateStateToWorkspace();\n    p_workspaceToViewSplit.insert(ws->m_id, viewSplit->getId());\n  }\n}\n\nvoid ViewArea::takeSnapshot(ViewAreaSession &p_session) const {\n  QHash<ID, ID> workspaceToViewSplit;\n\n  // Widget hirarchy.\n  p_session.m_root.clear();\n  if (!m_splits.isEmpty()) {\n    auto topWidget = m_mainLayout->itemAt(0)->widget();\n    takeSnapshotOfWidgetNodes(p_session.m_root, topWidget, workspaceToViewSplit);\n  }\n\n  // Workspaces.\n  p_session.m_workspaces.clear();\n  p_session.m_workspaces.reserve(m_workspaces.size());\n  for (const auto &ws : m_workspaces) {\n    p_session.m_workspaces.push_back(ViewAreaSession::Workspace());\n    auto &wsSnap = p_session.m_workspaces.last();\n    if (ws->m_visible) {\n      auto it = workspaceToViewSplit.find(ws->m_id);\n      Q_ASSERT(it != workspaceToViewSplit.end());\n      wsSnap.m_viewSplitId = it.value();\n    }\n    wsSnap.m_currentViewWindowIndex = ws->m_currentViewWindowIndex;\n    for (auto win : ws->m_viewWindows) {\n      if (win->isSessionEnabled()) {\n        wsSnap.m_viewWindows.push_back(win->saveSession());\n      }\n    }\n  }\n}\n\nvoid ViewArea::loadSplitterFromSession(const ViewAreaSession::Node &p_node, QSplitter *p_splitter) {\n  // @p_splitter is the splitter corresponding to @p_node.\n  Q_ASSERT(p_node.m_type == ViewAreaSession::Node::Type::Splitter);\n\n  for (const auto &child : p_node.m_children) {\n    if (child.m_type == ViewAreaSession::Node::Type::Splitter) {\n      auto childSplitter = createSplitter(child.m_orientation, p_splitter);\n      p_splitter->addWidget(childSplitter);\n\n      loadSplitterFromSession(child, childSplitter);\n    } else {\n      Q_ASSERT(child.m_type == ViewAreaSession::Node::Type::ViewSplit);\n      auto childSplit = createViewSplit(this, child.m_viewSplitId);\n      m_splits.push_back(childSplit);\n      p_splitter->addWidget(childSplit);\n    }\n  }\n}\n\nvoid ViewArea::openViewWindowFromSession(const ViewWindowSession &p_session) {\n  if (p_session.m_bufferPath.isEmpty()) {\n    return;\n  }\n\n  auto paras = QSharedPointer<FileOpenParameters>::create();\n  paras->m_mode = p_session.m_viewWindowMode;\n  paras->m_readOnly = p_session.m_readOnly;\n  paras->m_lineNumber = p_session.m_lineNumber;\n  paras->m_alwaysNewWindow = true;\n\n  emit VNoteX::getInst().openFileRequested(p_session.m_bufferPath, paras);\n}\n\nvoid ViewArea::focusSplitByDirection(Direction p_direction) {\n  auto split = findSplitByDirection(m_currentSplit, p_direction);\n  if (!split) {\n    qWarning() << \"failed to focus split by direction\";\n    return;\n  }\n\n  setCurrentViewSplit(split, true);\n  flashViewSplit(split);\n}\n\nViewSplit *ViewArea::findSplitByDirection(ViewSplit *p_split, Direction p_direction) {\n  if (!p_split) {\n    return nullptr;\n  }\n\n  QWidget *widget = p_split;\n  const auto targetSplitType = splitTypeOfDirection(p_direction);\n  int splitIdx = 0;\n\n  QSplitter *targetSplitter = nullptr;\n  while (true) {\n    auto splitter = tryGetParentSplitter(widget);\n    if (!splitter) {\n      return nullptr;\n    }\n\n    if (checkSplitType(splitter) == targetSplitType) {\n      targetSplitter = splitter;\n      splitIdx = splitter->indexOf(widget);\n      break;\n    } else {\n      widget = splitter;\n    }\n  }\n\n  Q_ASSERT(targetSplitter);\n  switch (p_direction) {\n  case Direction::Left:\n    --splitIdx;\n    break;\n\n  case Direction::Right:\n    ++splitIdx;\n    break;\n\n  case Direction::Up:\n    --splitIdx;\n    break;\n\n  case Direction::Down:\n    ++splitIdx;\n    break;\n  }\n\n  if (splitIdx < 0 || splitIdx >= targetSplitter->count()) {\n    return nullptr;\n  }\n\n  auto targetWidget = targetSplitter->widget(splitIdx);\n  // Find first split from targetWidget.\n  while (true) {\n    auto splitter = dynamic_cast<QSplitter *>(targetWidget);\n    if (splitter) {\n      if (splitter->count() == 0) {\n        // Should not be an empty splitter.\n        Q_ASSERT(false);\n        return nullptr;\n      }\n      targetWidget = splitter->widget(0);\n    } else {\n      auto viewSplit = dynamic_cast<ViewSplit *>(targetWidget);\n      Q_ASSERT(viewSplit);\n      return viewSplit;\n    }\n  }\n}\n\nViewArea::SplitType ViewArea::checkSplitType(const QSplitter *p_splitter) const {\n  return p_splitter->orientation() == Qt::Horizontal ? SplitType::Vertical : SplitType::Horizontal;\n}\n\nvoid ViewArea::flashViewSplit(ViewSplit *p_split) {\n  auto tabBar = p_split->tabBar();\n  if (!tabBar) {\n    return;\n  }\n\n  // Directly set the property of ViewSplit won't work.\n  WidgetUtils::setPropertyDynamically(tabBar, PropertyDefs::c_viewSplitFlash, true);\n  QTimer::singleShot(1000, tabBar, [tabBar]() {\n    WidgetUtils::setPropertyDynamically(tabBar, PropertyDefs::c_viewSplitFlash, false);\n  });\n}\n\nvoid ViewArea::moveViewWindowOneSplit(ViewSplit *p_split, ViewWindow *p_win,\n                                      Direction p_direction) {\n  bool splitCountChanged = false;\n  auto targetSplit = findSplitByDirection(p_split, p_direction);\n  if (!targetSplit) {\n    if (p_split->getViewWindowCount() == 1) {\n      // Only one ViewWindow left. Skip it.\n      return;\n    }\n\n    // Create a new split.\n    targetSplit = splitViewSplit(p_split, splitTypeOfDirection(p_direction), false);\n    if (p_direction == Direction::Left || p_direction == Direction::Up) {\n      // Need to swap the position of the two splits.\n      auto splitter = tryGetParentSplitter(targetSplit);\n      Q_ASSERT(splitter);\n      Q_ASSERT(splitter->indexOf(targetSplit) == 1);\n      splitter->insertWidget(0, targetSplit);\n    }\n    splitCountChanged = true;\n  }\n\n  // Take ViewWindow out of @p_split.\n  p_split->takeViewWindow(p_win);\n  if (p_split->getViewWindowCount() == 0) {\n    removeViewSplit(p_split, true);\n    splitCountChanged = true;\n  }\n\n  targetSplit->addViewWindow(p_win);\n\n  setCurrentViewWindow(p_win);\n\n  flashViewSplit(targetSplit);\n\n  if (splitCountChanged) {\n    emit viewSplitsCountChanged();\n  }\n}\n\nViewArea::SplitType ViewArea::splitTypeOfDirection(Direction p_direction) {\n  if (p_direction == Direction::Up || p_direction == Direction::Down) {\n    return SplitType::Horizontal;\n  } else {\n    return SplitType::Vertical;\n  }\n}\n\nvoid ViewArea::updateHistory(const ViewWindowSession &p_session, Notebook *p_notebook) const {\n  HistoryMgr::getInst().add(p_session.m_bufferPath, p_session.m_lineNumber,\n                            p_session.m_viewWindowMode, p_session.m_readOnly, p_notebook);\n}\n\nvoid ViewArea::closeFile(const QString &p_filePath, const QSharedPointer<Event> &p_event) {\n  if (p_event->m_handled) {\n    return;\n  }\n\n  auto node = VNoteX::getInst().getNotebookMgr().loadNodeByPath(p_filePath);\n  bool done = false;\n  if (node) {\n    done = close(node.data(), false);\n  } else {\n    done = closeIf(\n        false,\n        [p_filePath](ViewWindow *p_win) {\n          auto buffer = p_win->getBuffer();\n          return buffer->match(p_filePath);\n        },\n        true);\n  }\n\n  p_event->m_response = done;\n  p_event->m_handled = !done;\n}\n\nvoid ViewArea::setCurrentViewWindow(ID p_splitId, int p_windowIndex) {\n  auto split = findSplitById(p_splitId);\n  if (split) {\n    setCurrentViewSplit(split, true);\n    split->setCurrentViewWindow(p_windowIndex);\n  }\n}\n\nViewSplit *ViewArea::findSplitById(ID p_splitId) const {\n  for (auto split : m_splits) {\n    if (split->getId() == p_splitId) {\n      return split;\n    }\n  }\n\n  return nullptr;\n}\n"
  },
  {
    "path": "src/widgets/viewarea.h",
    "content": "#ifndef VIEWAREA_H\n#define VIEWAREA_H\n\n#include <QSharedPointer>\n#include <QWidget>\n\n#include <functional>\n\n#include \"navigationmode.h\"\n#include \"viewareasession.h\"\n#include \"viewsplit.h\"\n#include <buffer/buffer.h>\n#include <core/global.h>\n\nclass QLayout;\nclass QSplitter;\n\nnamespace vnotex {\nclass Buffer;\nclass ViewWindow;\nclass Event;\nclass Notebook;\nstruct FileOpenParameters;\n\n// Hold a list of ViewWindow. A ViewSplit could display any ViewWorkspace.\n// A ViewWorkspace could only be displayed by one ViewSplit at a time.\n// If a ViewWorkspace is visible, it is managed by its ViewSplit and\n// its state may not reflect the real fact.\nstruct ViewWorkspace {\n  explicit ViewWorkspace(ID p_id) : m_id(p_id) {}\n\n  ~ViewWorkspace() { Q_ASSERT(m_viewWindows.isEmpty()); }\n\n  void clear() {\n    m_visible = false;\n    m_viewWindows.clear();\n    m_currentViewWindowIndex = 0;\n  }\n\n  const ID m_id = 0;\n\n  // Whether it is displayed by a ViewSplit now.\n  bool m_visible = false;\n\n  QVector<ViewWindow *> m_viewWindows;\n\n  int m_currentViewWindowIndex = 0;\n};\n\n// ViewArea -- ViewSplit -- ViewWindow.\n// ViewSplit may be put within a splitter.\n// There may be multiple ViewWindow for the same buffer.\nclass ViewArea : public QWidget, public NavigationMode {\n  Q_OBJECT\npublic:\n  explicit ViewArea(QWidget *p_parent = nullptr);\n\n  ~ViewArea();\n\n  QSize sizeHint() const Q_DECL_OVERRIDE;\n\n  // Not all Workspace. Just all ViewSplits.\n  QList<Buffer *> getAllBuffersInViewSplits() const;\n\n  ViewWindow *getCurrentViewWindow() const;\n\n  const QVector<ViewSplit *> &getAllViewSplits() const;\n\n  void setCurrentViewWindow(ID p_splitId, int p_windowIndex);\n\n  // 调整设置当前 ViewSplit 为 public 方法, 方便思维导图, 看板, 等其他前端与后端笔记联动\n  void setCurrentViewSplit(ViewSplit *p_split, bool p_focus = true);\n\npublic slots:\n  void openBuffer(Buffer *p_buffer, const QSharedPointer<FileOpenParameters> &p_paras);\n\n  bool close(const Notebook *p_notebook, bool p_force);\n\n  void focus();\n\n  // NavigationMode.\nprotected:\n  QVector<void *> getVisibleNavigationItems() Q_DECL_OVERRIDE;\n\n  void placeNavigationLabel(int p_idx, void *p_item, QLabel *p_label) Q_DECL_OVERRIDE;\n\n  void handleTargetHit(void *p_item) Q_DECL_OVERRIDE;\n\n  void clearNavigation() Q_DECL_OVERRIDE;\n\nprotected:\n  // To accept specific drop.\n  void dragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE;\n\n  // Drop the data.\n  void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE;\n\nsignals:\n  // Status widget of ViewArea is changed.\n  // MainWindow should set the corresponding status widget accordingly.\n  void statusWidgetChanged(QWidget *p_widget);\n\n  // Count of ViewSplit is changed.\n  // Used internally.\n  void viewSplitsCountChanged();\n\n  void currentViewWindowChanged();\n\n  // State of current view window has update.\n  void currentViewWindowUpdated();\n\n  // ViewWindow reordered/added/removed/updated.\n  // ViewSplit added/removed/updated.\n  void windowsChanged();\n\nprivate slots:\n  // Return true if @p_win is closed.\n  // @p_removeSplitIfEmpty: whether remove the workspace and split if @p_win is that only ViewWindow\n  // left.\n  bool closeViewWindow(ViewWindow *p_win, bool p_force, bool p_removeSplitIfEmpty);\n\n  void maximizeViewSplit(ViewSplit *p_split);\n\n  void distributeViewSplits();\n\n  void newWorkspaceInViewSplit(ViewSplit *p_split);\n\n  // @p_insertNew: whether to find an available workspace for @p_split after removal.\n  // Return true if removed.\n  bool removeWorkspaceInViewSplit(ViewSplit *p_split, bool p_insertNew);\n\n  void handleViewSplitsCountChange();\n\n  bool close(bool p_force);\n\n  void handleNodeChange(Node *p_node, const QSharedPointer<Event> &p_event);\n\n  void loadSession();\n\n  void saveSession() const;\n\n  void moveViewWindowOneSplit(ViewSplit *p_split, ViewWindow *p_win, Direction p_direction);\n\n  void closeFile(const QString &p_filePath, const QSharedPointer<Event> &p_event);\n\nprivate:\n  enum class SplitType { Vertical, Horizontal };\n\n  void setupUI();\n\n  // Find given @p_buffer among all view splits.\n  // Does not search invisible work spaces.\n  QVector<ViewWindow *> findBufferInViewSplits(const Buffer *p_buffer) const;\n\n  ViewSplit *createViewSplit(QWidget *p_parent, ID p_viewSplitId = InvalidViewSplitId);\n\n  // A Scene widget will be used when there is no split.\n  // Usually it is used to show some help message.\n  void showSceneWidget();\n\n  void hideSceneWidget();\n\n  void addFirstViewSplit();\n\n  // Close all the ViewWindows in @p_split if @p_removeWorkspace is true.\n  // Otherwise, detach the Workpace from it and remove the split.\n  void removeViewSplit(ViewSplit *p_split, bool p_removeWorkspace);\n\n  void setCurrentViewWindow(ViewWindow *p_win);\n\n  ViewSplit *getCurrentViewSplit() const;\n\n  QSharedPointer<ViewWorkspace> createWorkspace();\n\n  ViewSplit *splitViewSplit(ViewSplit *p_split, SplitType p_type, bool p_cloneViewWindow = true);\n\n  QSplitter *tryGetParentSplitter(const QWidget *p_widget) const;\n\n  // Distribute all splits within @p_splitter recursively.\n  void distributeViewSplitsOfSplitter(QSplitter *p_splitter);\n\n  void unwrapSplitter(QSplitter *p_splitter);\n\n  void maximizeWidgetOfSplitter(QWidget *p_widget);\n\n  QSplitter *createSplitter(Qt::Orientation p_orientation, QWidget *p_parent) const;\n\n  // Do not use the reference since it will remove the value in @m_workspaces.\n  // Should have done the clean up of ViewWindow before calling this.\n  void removeWorkspace(QSharedPointer<ViewWorkspace> p_workspace);\n\n  bool shouldUseGlobalStatusWidget() const;\n\n  // Iterate through all ViewWindows including both ViewSplits and Workspaces.\n  // Should NOT use this function to close ViewWindow.\n  void forEachViewWindow(const ViewSplit::ViewWindowSelector &p_func);\n\n  void setupShortcuts();\n\n  // Close all ViewWindows related to @p_node.\n  bool close(Node *p_node, bool p_force);\n\n  // Go through all ViewWindows and judge whether to close it by @p_func.\n  bool closeIf(bool p_force, const ViewSplit::ViewWindowSelector &p_func, bool p_closeEmptySplit);\n\n  void checkCurrentViewWindowChange();\n\n  QVector<ViewWindow *> getAllViewWindows(ViewSplit *p_split,\n                                          const ViewSplit::ViewWindowSelector &p_func) const;\n\n  void takeSnapshot(ViewAreaSession &p_session) const;\n\n  void postFirstViewSplit();\n\n  void loadSplitterFromSession(const ViewAreaSession::Node &p_node, QSplitter *p_splitter);\n\n  void openViewWindowFromSession(const ViewWindowSession &p_session);\n\n  void focusSplitByDirection(Direction p_direction);\n\n  ViewSplit *findSplitByDirection(ViewSplit *p_split, Direction p_direction);\n\n  ViewSplit *findSplitById(ID p_splitId) const;\n\n  SplitType checkSplitType(const QSplitter *p_splitter) const;\n\n  void flashViewSplit(ViewSplit *p_split);\n\n  void updateHistory(const ViewWindowSession &p_session, Notebook *p_notebook) const;\n\n  static SplitType splitTypeOfDirection(Direction p_direction);\n\n  QLayout *m_mainLayout = nullptr;\n\n  QWidget *m_sceneWidget = nullptr;\n\n  QVector<ViewSplit *> m_splits;\n\n  QVector<QSharedPointer<ViewWorkspace>> m_workspaces;\n\n  ViewSplit *m_currentSplit = nullptr;\n\n  ViewWindow *m_currentWindow = nullptr;\n\n  // Current global status widget.\n  // When there is no split window, we will make the status widget global.\n  // Otherwise, we will display the status widget at the bottom of each view window.\n  QSharedPointer<QWidget> m_currentStatusWidget;\n\n  QVector<ViewSplit::ViewWindowNavigationModeInfo> m_navigationItems;\n\n  // Timer to check file change outside periodically.\n  QTimer *m_fileCheckTimer = nullptr;\n\n  ID m_nextViewSplitId = InvalidViewSplitId + 1;\n};\n} // namespace vnotex\n\n#endif // VIEWAREA_H\n"
  },
  {
    "path": "src/widgets/viewareasession.cpp",
    "content": "#include \"viewareasession.h\"\n\n#include <QDebug>\n#include <QIODevice>\n#include <QLayout>\n#include <QSplitter>\n\nusing namespace vnotex;\n\nQDataStream & ::vnotex::operator<<(QDataStream &p_ds, const ViewAreaSession::Node &p_node) {\n  p_ds << static_cast<qint8>(p_node.m_type);\n  p_ds << static_cast<qint8>(p_node.m_orientation);\n  p_ds << p_node.m_viewSplitId;\n  p_ds << p_node.m_children;\n  return p_ds;\n}\n\nQDataStream & ::vnotex::operator>>(QDataStream &p_ds, ViewAreaSession::Node &p_node) {\n  qint8 tmp = 0;\n\n  p_ds >> tmp;\n  p_node.m_type = static_cast<ViewAreaSession::Node::Type>(tmp);\n\n  p_ds >> tmp;\n  p_node.m_orientation = static_cast<Qt::Orientation>(tmp);\n\n  p_ds >> p_node.m_viewSplitId;\n  p_ds >> p_node.m_children;\n  return p_ds;\n}\n\nQDataStream & ::vnotex::operator<<(QDataStream &p_ds,\n                                   const ViewAreaSession::Workspace &p_workspace) {\n  p_ds << p_workspace.m_viewSplitId;\n\n  p_ds << p_workspace.m_viewWindows;\n\n  p_ds << static_cast<qint32>(p_workspace.m_currentViewWindowIndex);\n\n  return p_ds;\n}\n\nQDataStream & ::vnotex::operator>>(QDataStream &p_ds, ViewAreaSession::Workspace &p_workspace) {\n  p_ds >> p_workspace.m_viewSplitId;\n\n  p_ds >> p_workspace.m_viewWindows;\n\n  {\n    qint32 tmp = 0;\n    p_ds >> tmp;\n    p_workspace.m_currentViewWindowIndex = tmp;\n  }\n\n  return p_ds;\n}\n\nvoid ViewAreaSession::Node::clear() {\n  m_type = Type::Empty;\n  m_orientation = Qt::Horizontal;\n  m_viewSplitId = InvalidViewSplitId;\n  m_children.clear();\n}\n\nbool ViewAreaSession::Node::isEmpty() const { return m_type == Type::Empty; }\n\nQByteArray ViewAreaSession::serialize() const {\n  QByteArray data;\n  QDataStream outs(&data, QIODevice::WriteOnly);\n  outs.setVersion(QDataStream::Qt_5_12);\n\n  outs << m_root;\n\n  outs << m_workspaces;\n\n  return data;\n}\n\nViewAreaSession ViewAreaSession::deserialize(const QByteArray &p_data) {\n  ViewAreaSession session;\n  if (p_data.isEmpty()) {\n    return session;\n  }\n\n  QDataStream ins(p_data);\n  ins.setVersion(QDataStream::Qt_5_12);\n\n  ins >> session.m_root;\n\n  ins >> session.m_workspaces;\n\n  return session;\n}\n"
  },
  {
    "path": "src/widgets/viewareasession.h",
    "content": "#ifndef VIEWAREASESSION_H\n#define VIEWAREASESSION_H\n\n#include <QDataStream>\n#include <QHash>\n#include <QVector>\n\n#include <core/global.h>\n\n#include \"viewwindowsession.h\"\n\nnamespace vnotex {\nstruct ViewAreaSession {\n  // A node for splitter and ViewSplit hirarchy.\n  struct Node {\n    enum Type { Splitter, ViewSplit, Empty };\n\n    void clear();\n\n    bool isEmpty() const;\n\n    Type m_type = Type::Empty;\n\n    Qt::Orientation m_orientation = Qt::Horizontal;\n\n    ID m_viewSplitId = InvalidViewSplitId;\n\n    QVector<Node> m_children;\n  };\n\n  struct Workspace {\n    ID m_viewSplitId = InvalidViewSplitId;\n\n    QVector<ViewWindowSession> m_viewWindows;\n\n    int m_currentViewWindowIndex = 0;\n  };\n\n  QByteArray serialize() const;\n\n  static ViewAreaSession deserialize(const QByteArray &p_data);\n\n  Node m_root;\n\n  QVector<Workspace> m_workspaces;\n};\n\nextern QDataStream &operator<<(QDataStream &p_ds, const ViewAreaSession::Node &p_node);\nextern QDataStream &operator>>(QDataStream &p_ds, ViewAreaSession::Node &p_node);\n\nextern QDataStream &operator<<(QDataStream &p_ds, const ViewAreaSession::Workspace &p_workspace);\nextern QDataStream &operator>>(QDataStream &p_ds, ViewAreaSession::Workspace &p_workspace);\n} // namespace vnotex\n\n#endif // VIEWAREASESSION_H\n"
  },
  {
    "path": "src/widgets/viewsplit.cpp",
    "content": "#include \"viewsplit.h\"\n\n#include <QAction>\n#include <QActionGroup>\n#include <QDragEnterEvent>\n#include <QDropEvent>\n#include <QFileInfo>\n#include <QHBoxLayout>\n#include <QMenu>\n#include <QMimeData>\n#include <QShortcut>\n#include <QTabBar>\n#include <QToolButton>\n\n#include \"fileopenparameters.h\"\n#include \"propertydefs.h\"\n#include \"viewarea.h\"\n#include \"viewwindow.h\"\n#include \"widgetsfactory.h\"\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/thememgr.h>\n#include <core/vnotex.h>\n#include <utils/clipboardutils.h>\n#include <utils/iconutils.h>\n#include <utils/pathutils.h>\n#include <utils/urldragdroputils.h>\n#include <utils/vxurlutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nQIcon ViewSplit::s_windowListIcon;\n\nQIcon ViewSplit::s_windowListActiveIcon;\n\nQIcon ViewSplit::s_menuIcon;\n\nQIcon ViewSplit::s_menuActiveIcon;\n\nconst QString ViewSplit::c_activeActionButtonForegroundName =\n    \"widgets#viewsplit#action_button#active#fg\";\n\nconst QString ViewSplit::c_actionButtonForegroundName = \"widgets#viewsplit#action_button#fg\";\n\nViewSplit::ViewSplit(const QVector<QSharedPointer<ViewWorkspace>> &p_allWorkspaces,\n                     const QSharedPointer<ViewWorkspace> &p_workspace, ID p_id, QWidget *p_parent)\n    : QTabWidget(p_parent), m_id(p_id), m_allWorkspaces(p_allWorkspaces) {\n  setAcceptDrops(true);\n\n  setupUI();\n\n  setupShortcuts();\n\n  setWorkspace(p_workspace);\n}\n\nViewSplit::~ViewSplit() { Q_ASSERT(!m_workspace); }\n\nvoid ViewSplit::setupUI() {\n  // Property of QTabWidget.\n  setUsesScrollButtons(true);\n  setElideMode(Qt::ElideNone);\n  setTabsClosable(true);\n  setMovable(true);\n  setDocumentMode(true);\n\n  setupCornerWidget();\n  setupTabBar();\n\n  connect(this, &QTabWidget::tabCloseRequested, this, [this](int p_idx) {\n    emit focused(this);\n    closeTab(p_idx);\n  });\n  connect(this, &QTabWidget::tabBarDoubleClicked, this, [this](int p_idx) {\n    if (p_idx == -1) {\n      emit VNoteX::getInst().newQuickNoteRequested();\n    } else {\n      closeTab(p_idx);\n    }\n  });\n  connect(this, &QTabWidget::tabBarClicked, this, [this](int p_idx) {\n    Q_UNUSED(p_idx);\n    focusCurrentViewWindow();\n    emit focused(this);\n  });\n  connect(this, &QTabWidget::currentChanged, this, [this](int p_idx) {\n    Q_UNUSED(p_idx);\n    focusCurrentViewWindow();\n    emit currentViewWindowChanged(getCurrentViewWindow());\n  });\n}\n\nvoid ViewSplit::focusCurrentViewWindow() {\n  auto win = getCurrentViewWindow();\n  if (win) {\n    win->setFocus();\n  } else {\n    setFocus();\n  }\n\n  m_lastViewWindow = m_currentViewWindow;\n  m_currentViewWindow = win;\n}\n\nvoid ViewSplit::setupCornerWidget() {\n  initIcons();\n\n  // Container.\n  auto widget = new QWidget(this);\n  widget->setProperty(PropertyDefs::c_viewSplitCornerWidget, true);\n  auto layout = new QHBoxLayout(widget);\n  layout->setContentsMargins(0, 0, 0, 0);\n\n  // Widnow list button.\n  {\n    m_windowListButton = new QToolButton(this);\n    m_windowListButton->setPopupMode(QToolButton::InstantPopup);\n    m_windowListButton->setProperty(PropertyDefs::c_actionToolButton, true);\n\n    auto act = new QAction(s_windowListIcon, tr(\"Open Windows\"), m_windowListButton);\n    m_windowListButton->setDefaultAction(act);\n\n    auto menu = WidgetsFactory::createMenu(m_windowListButton);\n    connect(menu, &QMenu::aboutToShow, this, [this, menu]() { updateWindowList(menu); });\n    connect(menu, &QMenu::triggered, this, [this](QAction *p_act) {\n      int idx = p_act->data().toInt();\n      setCurrentViewWindow(getViewWindow(idx));\n    });\n    m_windowListButton->setMenu(menu);\n\n    layout->addWidget(m_windowListButton);\n  }\n\n  // Menu button.\n  {\n    m_menuButton = new QToolButton(this);\n    m_menuButton->setPopupMode(QToolButton::InstantPopup);\n    m_menuButton->setProperty(PropertyDefs::c_actionToolButton, true);\n\n    auto act = new QAction(s_menuIcon, tr(\"Menu\"), m_menuButton);\n    m_menuButton->setDefaultAction(act);\n\n    auto menu = WidgetsFactory::createMenu(m_menuButton);\n    connect(menu, &QMenu::aboutToShow, this, [this, menu]() { updateMenu(menu); });\n    m_menuButton->setMenu(menu);\n\n    layout->addWidget(m_menuButton);\n  }\n\n  widget->installEventFilter(this);\n\n  setCornerWidget(widget, Qt::TopRightCorner);\n}\n\nbool ViewSplit::eventFilter(QObject *p_object, QEvent *p_event) {\n  if (p_object == cornerWidget()) {\n    if (p_event->type() == QEvent::Resize) {\n      auto resizeEve = static_cast<QResizeEvent *>(p_event);\n      int height = resizeEve->size().height();\n      if (height > 0) {\n        // Make corner widget visible even when there is no tab.\n        cornerWidget()->setMinimumHeight(height);\n      }\n    }\n  } else if (p_object == tabBar()) {\n    if (p_event->type() == QEvent::MouseButtonRelease) {\n      auto mouseEve = static_cast<QMouseEvent *>(p_event);\n      if (mouseEve->button() == Qt::MiddleButton) {\n        int idx = tabBar()->tabAt(mouseEve->pos());\n        closeTab(idx);\n      }\n    }\n  }\n\n  return QTabWidget::eventFilter(p_object, p_event);\n}\n\nvoid ViewSplit::setupTabBar() {\n  auto bar = tabBar();\n  // If DrawBase is true, there is a border that we could not control the style.\n  bar->setDrawBase(false);\n  bar->setContextMenuPolicy(Qt::CustomContextMenu);\n\n  // Middle click to close tab.\n  bar->installEventFilter(this);\n\n  connect(bar, &QTabBar::customContextMenuRequested, this, [this](const QPoint &p_pos) {\n    int idx = tabBar()->tabAt(p_pos);\n    if (idx == -1) {\n      return;\n    }\n\n    QScopedPointer<QMenu> menu(WidgetsFactory::createMenu());\n    createContextMenuOnTabBar(menu.data(), idx);\n\n    if (!menu->isEmpty()) {\n      menu->exec(tabBar()->mapToGlobal(p_pos));\n    }\n  });\n}\n\nvoid ViewSplit::initIcons() {\n  if (!s_windowListIcon.isNull()) {\n    return;\n  }\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const QString windowListIconName(\"split_window_list.svg\");\n  const QString menuIconName(\"split_menu.svg\");\n  const QString fg = themeMgr.paletteColor(c_actionButtonForegroundName);\n  const QString activeFg = themeMgr.paletteColor(c_activeActionButtonForegroundName);\n\n  s_windowListIcon = IconUtils::fetchIcon(themeMgr.getIconFile(windowListIconName), fg);\n  s_windowListActiveIcon = IconUtils::fetchIcon(themeMgr.getIconFile(windowListIconName), activeFg);\n\n  s_menuIcon = IconUtils::fetchIcon(themeMgr.getIconFile(menuIconName), fg);\n  s_menuActiveIcon = IconUtils::fetchIcon(themeMgr.getIconFile(menuIconName), activeFg);\n}\n\nvoid ViewSplit::setWorkspace(const QSharedPointer<ViewWorkspace> &p_workspace) {\n  if (m_workspace == p_workspace) {\n    return;\n  }\n\n  updateAndTakeCurrentWorkspace();\n\n  m_workspace = p_workspace;\n  if (m_workspace) {\n    Q_ASSERT(!m_workspace->m_visible);\n\n    for (auto win : m_workspace->m_viewWindows) {\n      addViewWindow(win);\n    }\n\n    int idx = m_workspace->m_currentViewWindowIndex;\n    if (idx >= 0 && idx < m_workspace->m_viewWindows.size()) {\n      setCurrentViewWindow(m_workspace->m_viewWindows[idx]);\n    }\n\n    m_workspace->m_visible = true;\n  }\n}\n\nvoid ViewSplit::updateAndTakeCurrentWorkspace() {\n  if (m_workspace) {\n    updateStateToWorkspace();\n\n    // Take all the view windows out.\n    int cnt = getViewWindowCount();\n    for (int i = cnt - 1; i >= 0; --i) {\n      takeViewWindow(getViewWindow(i));\n    }\n\n    m_workspace->m_visible = false;\n\n    m_workspace = nullptr;\n  } else {\n    Q_ASSERT(getViewWindowCount() == 0);\n  }\n}\n\nvoid ViewSplit::updateStateToWorkspace() const {\n  if (!m_workspace) {\n    return;\n  }\n\n  Q_ASSERT(m_workspace->m_visible);\n\n  m_workspace->m_currentViewWindowIndex = currentIndex();\n\n  int cnt = getViewWindowCount();\n  m_workspace->m_viewWindows.resize(cnt);\n  for (int i = cnt - 1; i >= 0; --i) {\n    m_workspace->m_viewWindows[i] = getViewWindow(i);\n  }\n}\n\nQVector<ViewWindow *> ViewSplit::findBuffer(const Buffer *p_buffer) const {\n  QVector<ViewWindow *> wins;\n  int cnt = getViewWindowCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto win = getViewWindow(i);\n    if (win->getBuffer() == p_buffer) {\n      wins.push_back(win);\n    }\n  }\n\n  return wins;\n}\n\nViewWindow *ViewSplit::getViewWindow(int p_idx) const {\n  return dynamic_cast<ViewWindow *>(widget(p_idx));\n}\n\nQVector<ViewWindow *> ViewSplit::getAllViewWindows() const {\n  QVector<ViewWindow *> wins;\n  int cnt = getViewWindowCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto win = getViewWindow(i);\n    wins.push_back(win);\n  }\n\n  return wins;\n}\n\nint ViewSplit::getViewWindowCount() const { return count(); }\n\nvoid ViewSplit::addViewWindow(ViewWindow *p_win) {\n  int idx = addTab(p_win, p_win->getIcon(), p_win->getName());\n  setTabToolTip(idx, p_win->getTitle());\n\n  p_win->setViewSplit(this);\n  p_win->setVisible(true);\n\n  connect(p_win, &ViewWindow::focused, this, [this]() { emit focused(this); });\n\n  connect(p_win, &ViewWindow::statusChanged, this, [this]() {\n    auto win = dynamic_cast<ViewWindow *>(sender());\n    int idx = indexOf(win);\n    Q_ASSERT(idx != -1);\n    setTabIcon(idx, win->getIcon());\n  });\n\n  connect(p_win, &ViewWindow::nameChanged, this, [this]() {\n    auto win = dynamic_cast<ViewWindow *>(sender());\n    int idx = indexOf(win);\n    Q_ASSERT(idx != -1);\n    setTabText(idx, win->getName());\n  });\n}\n\nViewWindow *ViewSplit::getCurrentViewWindow() const {\n  return dynamic_cast<ViewWindow *>(currentWidget());\n}\n\nvoid ViewSplit::setCurrentViewWindow(ViewWindow *p_win) {\n  if (!p_win) {\n    return;\n  }\n\n  Q_ASSERT(p_win->getViewSplit() == this);\n  setCurrentWidget(p_win);\n}\n\nvoid ViewSplit::takeViewWindow(ViewWindow *p_win) {\n  Q_ASSERT(p_win->getViewSplit() == this);\n  p_win->setViewSplit(nullptr);\n\n  int idx = indexOf(p_win);\n  Q_ASSERT(idx != -1);\n  removeTab(idx);\n\n  disconnect(p_win, 0, this, 0);\n\n  p_win->setVisible(false);\n  p_win->setParent(nullptr);\n}\n\nQSharedPointer<ViewWorkspace> ViewSplit::getWorkspace() const { return m_workspace; }\n\nvoid ViewSplit::setActive(bool p_active) {\n  if (p_active) {\n    m_windowListButton->defaultAction()->setIcon(s_windowListActiveIcon);\n    m_menuButton->defaultAction()->setIcon(s_menuActiveIcon);\n  } else {\n    m_windowListButton->defaultAction()->setIcon(s_windowListIcon);\n    m_menuButton->defaultAction()->setIcon(s_menuIcon);\n  }\n}\n\nvoid ViewSplit::updateWindowList(QMenu *p_menu) {\n  p_menu->clear();\n\n  if (!m_windowListActionGroup) {\n    m_windowListActionGroup = new QActionGroup(p_menu);\n  } else {\n    WidgetUtils::clearActionGroup(m_windowListActionGroup);\n  }\n\n  auto currentViewWindow = getCurrentViewWindow();\n  int cnt = getViewWindowCount();\n  if (cnt == 0) {\n    // Add a dummy entry.\n    auto act = p_menu->addAction(tr(\"No Window To Show\"));\n    act->setEnabled(false);\n    return;\n  }\n\n  for (int i = 0; i < cnt; ++i) {\n    auto window = getViewWindow(i);\n\n    auto act = new QAction(window->getName(), m_windowListActionGroup);\n    act->setToolTip(window->getTitle());\n    act->setData(i);\n    act->setCheckable(true);\n    p_menu->addAction(act);\n\n    if (currentViewWindow == window) {\n      act->setChecked(true);\n    }\n  }\n}\n\nvoid ViewSplit::updateMenu(QMenu *p_menu) {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  p_menu->clear();\n\n  // Workspaces.\n  {\n    p_menu->addSection(tr(\"Workspaces\"));\n    if (!m_workspaceActionGroup) {\n      m_workspaceActionGroup = new QActionGroup(p_menu);\n      connect(m_workspaceActionGroup, &QActionGroup::triggered, this, [this](QAction *p_act) {\n        int idx = p_act->data().toInt();\n        const auto &newWorkspace = m_allWorkspaces[idx];\n        if (newWorkspace != m_workspace) {\n          setWorkspace(newWorkspace);\n        }\n      });\n    } else {\n      WidgetUtils::clearActionGroup(m_workspaceActionGroup);\n    }\n\n    for (int i = 0; i < m_allWorkspaces.size(); ++i) {\n      auto act =\n          new QAction(tr(\"Workspace %1\").arg(m_allWorkspaces[i]->m_id), m_workspaceActionGroup);\n      act->setData(i);\n      act->setCheckable(true);\n      act->setEnabled(!m_allWorkspaces[i]->m_visible);\n      p_menu->addAction(act);\n\n      if (m_allWorkspaces[i] == m_workspace) {\n        act->setEnabled(true);\n        act->setChecked(true);\n      }\n    }\n\n    p_menu->addSeparator();\n\n    {\n      auto act =\n          p_menu->addAction(tr(\"New Workspace\"), [this]() { emit newWorkspaceRequested(this); });\n      WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::NewWorkspace));\n    }\n\n    p_menu->addAction(tr(\"Remove Workspace\"), [this]() { emit removeWorkspaceRequested(this); });\n  }\n\n  // Splits.\n  {\n    // Do not add icon here since it will consume too much space.\n    p_menu->addSection(tr(\"Split\"));\n    auto act =\n        p_menu->addAction(tr(\"Vertical Split\"), [this]() { emit verticalSplitRequested(this); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::VerticalSplit));\n\n    act = p_menu->addAction(tr(\"Horizontal Split\"),\n                            [this]() { emit horizontalSplitRequested(this); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::HorizontalSplit));\n\n    act = p_menu->addAction(tr(\"Maximize Split\"), [this]() { emit maximizeSplitRequested(this); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::MaximizeSplit));\n\n    act =\n        p_menu->addAction(tr(\"Distribute Splits\"), [this]() { emit distributeSplitsRequested(); });\n    WidgetUtils::addActionShortcutText(act, coreConfig.getShortcut(CoreConfig::DistributeSplits));\n\n    act = p_menu->addAction(tr(\"Remove Split\"), [this]() { emit removeSplitRequested(this); });\n\n    act = p_menu->addAction(tr(\"Remove Split And Workspace\"),\n                            [this]() { emit removeSplitAndWorkspaceRequested(this); });\n    WidgetUtils::addActionShortcutText(act,\n                                       coreConfig.getShortcut(CoreConfig::RemoveSplitAndWorkspace));\n  }\n}\n\nvoid ViewSplit::createContextMenuOnTabBar(QMenu *p_menu, int p_tabIdx) {\n  Q_ASSERT(p_tabIdx > -1);\n\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  // Close Tab.\n  {\n    auto closeTabAct =\n        p_menu->addAction(tr(\"Close Tab\"), [this, p_tabIdx]() { closeTab(p_tabIdx); });\n    WidgetUtils::addActionShortcutText(closeTabAct,\n                                       coreConfig.getShortcut(CoreConfig::Shortcut::CloseTab));\n  }\n\n  // Close All Tabs.\n  {\n    auto closeTabAct = p_menu->addAction(tr(\"Close All Tabs\"), [this, p_tabIdx]() {\n      closeMultipleTabs(p_tabIdx, CloseTabMode::CloseAllTabs);\n    });\n    WidgetUtils::addActionShortcutText(closeTabAct,\n                                       coreConfig.getShortcut(CoreConfig::Shortcut::CloseAllTabs));\n  }\n\n  // Close Other Tabs.\n  {\n    auto closeTabAct = p_menu->addAction(tr(\"Close Other Tabs\"), [this, p_tabIdx]() {\n      closeMultipleTabs(p_tabIdx, CloseTabMode::CloseOtherTabs);\n    });\n    WidgetUtils::addActionShortcutText(\n        closeTabAct, coreConfig.getShortcut(CoreConfig::Shortcut::CloseOtherTabs));\n  }\n\n  // Close Tabs To The Left\n  {\n    auto closeTabAct = p_menu->addAction(tr(\"Close Tabs To The Left\"), [this, p_tabIdx]() {\n      closeMultipleTabs(p_tabIdx, CloseTabMode::CloseTabsToTheLeft);\n    });\n    WidgetUtils::addActionShortcutText(\n        closeTabAct, coreConfig.getShortcut(CoreConfig::Shortcut::CloseTabsToTheLeft));\n  }\n\n  // Close Tabs To The Right.\n  {\n    auto closeTabAct = p_menu->addAction(tr(\"Close Tabs To The Right\"), [this, p_tabIdx]() {\n      closeMultipleTabs(p_tabIdx, CloseTabMode::CloseTabsToTheRight);\n    });\n    WidgetUtils::addActionShortcutText(\n        closeTabAct, coreConfig.getShortcut(CoreConfig::Shortcut::CloseTabsToTheRight));\n  }\n\n  p_menu->addSeparator();\n\n  {\n    auto act = p_menu->addAction(tr(\"Auto Reload\"));\n    act->setToolTip(tr(\"Reload file from disk automatically if it is changed outside\"));\n    act->setCheckable(true);\n    auto win = getViewWindow(p_tabIdx);\n    Q_ASSERT(win);\n    act->setChecked(win->getWindowFlags() & ViewWindow::AutoReload);\n    connect(act, &QAction::triggered, this, [win](bool p_checked) {\n      if (p_checked) {\n        win->setWindowFlags(win->getWindowFlags() | ViewWindow::AutoReload);\n      } else {\n        win->setWindowFlags(win->getWindowFlags() & ~ViewWindow::AutoReload);\n      }\n    });\n  }\n\n  p_menu->addSeparator();\n\n  // Copy Path.\n  p_menu->addAction(tr(\"Copy Path\"), [this, p_tabIdx]() {\n    auto win = getViewWindow(p_tabIdx);\n    if (win) {\n      const auto filePath = win->getBuffer()->getPath();\n      ClipboardUtils::setTextToClipboard(filePath);\n      VNoteX::getInst().showStatusMessageShort(tr(\"Copied path: %1\").arg(filePath));\n    }\n  });\n\n  // Open Location.\n  p_menu->addAction(tr(\"Open Location\"), [this, p_tabIdx]() {\n    auto win = getViewWindow(p_tabIdx);\n    if (win) {\n      const auto location = PathUtils::parentDirPath(win->getBuffer()->getPath());\n      WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(location));\n    }\n  });\n\n  // Locate Node.\n  auto win = getViewWindow(p_tabIdx);\n  if (win && win->getBuffer()->getNode()) {\n    auto locateNodeAct = p_menu->addAction(tr(\"Locate Node\"), [this, p_tabIdx]() {\n      auto win = getViewWindow(p_tabIdx);\n      auto node = win->getBuffer()->getNode();\n      if (node) {\n        emit VNoteX::getInst().locateNodeRequested(node);\n      }\n    });\n    WidgetUtils::addActionShortcutText(locateNodeAct,\n                                       coreConfig.getShortcut(CoreConfig::Shortcut::LocateNode));\n  }\n\n  // Pin To Quick Access.\n  p_menu->addAction(tr(\"Pin To Quick Access\"), [this, p_tabIdx]() {\n    auto win = getViewWindow(p_tabIdx);\n    if (win) {\n      const QString filePath = win->getBuffer()->getPath();\n      QString signature = VxUrlUtils::getSignatureFromFilePath(filePath);\n\n      if (!signature.isEmpty()) {\n        QString quickAccessItem = VxUrlUtils::generateVxURL(signature, filePath);\n        const QStringList files(quickAccessItem);\n        emit VNoteX::getInst().pinToQuickAccessRequested(files);\n      }\n    }\n  });\n\n  p_menu->addSeparator();\n\n  {\n    auto splitAct = p_menu->addAction(tr(\"Move One Split Left\"), [this, p_tabIdx]() {\n      auto win = getViewWindow(p_tabIdx);\n      if (win) {\n        emit moveViewWindowOneSplitRequested(this, win, Direction::Left);\n      }\n    });\n    WidgetUtils::addActionShortcutText(\n        splitAct, coreConfig.getShortcut(CoreConfig::Shortcut::MoveOneSplitLeft));\n  }\n\n  {\n    auto splitAct = p_menu->addAction(tr(\"Move One Split Right\"), [this, p_tabIdx]() {\n      auto win = getViewWindow(p_tabIdx);\n      if (win) {\n        emit moveViewWindowOneSplitRequested(this, win, Direction::Right);\n      }\n    });\n    WidgetUtils::addActionShortcutText(\n        splitAct, coreConfig.getShortcut(CoreConfig::Shortcut::MoveOneSplitRight));\n  }\n\n  {\n    auto splitAct = p_menu->addAction(tr(\"Move One Split Up\"), [this, p_tabIdx]() {\n      auto win = getViewWindow(p_tabIdx);\n      if (win) {\n        emit moveViewWindowOneSplitRequested(this, win, Direction::Up);\n      }\n    });\n    WidgetUtils::addActionShortcutText(\n        splitAct, coreConfig.getShortcut(CoreConfig::Shortcut::MoveOneSplitUp));\n  }\n\n  {\n    auto splitAct = p_menu->addAction(tr(\"Move One Split Down\"), [this, p_tabIdx]() {\n      auto win = getViewWindow(p_tabIdx);\n      if (win) {\n        emit moveViewWindowOneSplitRequested(this, win, Direction::Down);\n      }\n    });\n    WidgetUtils::addActionShortcutText(\n        splitAct, coreConfig.getShortcut(CoreConfig::Shortcut::MoveOneSplitDown));\n  }\n}\n\nvoid ViewSplit::closeTab(int p_idx) {\n  auto win = getViewWindow(p_idx);\n  if (win) {\n    emit viewWindowCloseRequested(win);\n  }\n}\n\nvoid ViewSplit::closeMultipleTabs(CloseTabMode p_ctm) { closeMultipleTabs(currentIndex(), p_ctm); }\n\nvoid ViewSplit::closeMultipleTabs(int p_idx, CloseTabMode p_ctm) {\n  QVector<ViewWindow *> windowsNeedToClose;\n  int cnt = getViewWindowCount();\n\n  switch (p_ctm) {\n  case CloseTabMode::CloseAllTabs:\n    for (int i = 0; i < cnt; i++) {\n      windowsNeedToClose.push_back(getViewWindow(i));\n    }\n    break;\n  case CloseTabMode::CloseOtherTabs:\n    for (int i = 0; i < cnt; i++) {\n      if (i != p_idx) {\n        windowsNeedToClose.push_back(getViewWindow(i));\n      }\n    }\n    break;\n  case CloseTabMode::CloseTabsToTheLeft:\n    for (int i = 0; i < p_idx; i++) {\n      windowsNeedToClose.push_back(getViewWindow(i));\n    }\n    break;\n  case CloseTabMode::CloseTabsToTheRight:\n    for (int i = cnt - 1; i > p_idx; i--) {\n      windowsNeedToClose.push_back(getViewWindow(i));\n    }\n    break;\n  }\n\n  for (auto win : windowsNeedToClose) {\n    emit viewWindowCloseRequested(win);\n  }\n}\n\nvoid ViewSplit::mousePressEvent(QMouseEvent *p_event) {\n  QTabWidget::mousePressEvent(p_event);\n\n  // For an empty QTabWidget, we need to focus this split when user press\n  // the space of widget.\n  emit focused(this);\n}\n\nbool ViewSplit::forEachViewWindow(const ViewWindowSelector &p_func) const {\n  int cnt = getViewWindowCount();\n  for (int i = 0; i < cnt; ++i) {\n    auto win = getViewWindow(i);\n    if (!p_func(win)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nQVector<ViewSplit::ViewWindowNavigationModeInfo> ViewSplit::getNavigationModeInfo() const {\n  QVector<ViewWindowNavigationModeInfo> infos;\n  auto bar = tabBar();\n  for (int i = 0; i < bar->count(); ++i) {\n    QPoint tl = bar->tabRect(i).topLeft();\n    if (tl.x() < 0 || tl.x() >= bar->width()) {\n      continue;\n    }\n\n    ViewWindowNavigationModeInfo info;\n    info.m_topLeft = bar->mapToParent(tl);\n    info.m_viewWindow = getViewWindow(i);\n    infos.append(info);\n  }\n\n  return infos;\n}\n\nvoid ViewSplit::dragEnterEvent(QDragEnterEvent *p_event) {\n  if (UrlDragDropUtils::handleDragEnterEvent(p_event)) {\n    return;\n  }\n\n  QTabWidget::dragEnterEvent(p_event);\n}\n\nvoid ViewSplit::dropEvent(QDropEvent *p_event) {\n  if (UrlDragDropUtils::handleDropEvent(p_event, [](const QStringList &p_files) {\n        for (const auto &file : p_files) {\n          emit VNoteX::getInst().openFileRequested(file,\n                                                   QSharedPointer<FileOpenParameters>::create());\n        }\n      })) {\n    return;\n  }\n\n  QTabWidget::dropEvent(p_event);\n}\n\nvoid ViewSplit::setupShortcuts() {\n  const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();\n\n  // NewWorkspace.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::NewWorkspace),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { emit newWorkspaceRequested(this); });\n    }\n  }\n\n  // VerticalSplit.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::VerticalSplit),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { emit verticalSplitRequested(this); });\n    }\n  }\n\n  // HorizontalSplit.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::HorizontalSplit),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { emit horizontalSplitRequested(this); });\n    }\n  }\n\n  // MaximizeSplit.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::MaximizeSplit),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { emit maximizeSplitRequested(this); });\n    }\n  }\n\n  // DistributeSplits.\n  {\n    auto shortcut = WidgetUtils::createShortcut(\n        coreConfig.getShortcut(CoreConfig::DistributeSplits), this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { emit distributeSplitsRequested(); });\n    }\n  }\n\n  // RemoveSplitAndWorkspace.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::RemoveSplitAndWorkspace),\n                                    this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this,\n              [this]() { emit removeSplitAndWorkspaceRequested(this); });\n    }\n  }\n\n  // ActivateTab1.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab1),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(0); });\n    }\n  }\n\n  // ActivateTab2.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab2),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(1); });\n    }\n  }\n\n  // ActivateTab3.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab3),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(2); });\n    }\n  }\n\n  // ActivateTab4.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab4),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(3); });\n    }\n  }\n\n  // ActivateTab5.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab5),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(4); });\n    }\n  }\n\n  // ActivateTab6.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab6),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(5); });\n    }\n  }\n\n  // ActivateTab7.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab7),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(6); });\n    }\n  }\n\n  // ActivateTab8.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab8),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(7); });\n    }\n  }\n\n  // ActivateTab9.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateTab9),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { setCurrentViewWindow(8); });\n    }\n  }\n\n  // AlternateTab.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::AlternateTab),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, &ViewSplit::alternateTab);\n    }\n  }\n\n  // ActivateNextTab.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivateNextTab),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { activateNextTab(false); });\n    }\n  }\n\n  // ActivatePreviousTab.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::ActivatePreviousTab), this,\n                                    Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { activateNextTab(true); });\n    }\n  }\n\n  // MoveOneSplitLeft.\n  {\n    auto shortcut = WidgetUtils::createShortcut(\n        coreConfig.getShortcut(CoreConfig::MoveOneSplitLeft), this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto win = getCurrentViewWindow();\n        if (win) {\n          emit moveViewWindowOneSplitRequested(this, win, Direction::Left);\n        }\n      });\n    }\n  }\n\n  // MoveOneSplitDown.\n  {\n    auto shortcut = WidgetUtils::createShortcut(\n        coreConfig.getShortcut(CoreConfig::MoveOneSplitDown), this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto win = getCurrentViewWindow();\n        if (win) {\n          emit moveViewWindowOneSplitRequested(this, win, Direction::Down);\n        }\n      });\n    }\n  }\n\n  // MoveOneSplitUp.\n  {\n    auto shortcut = WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::MoveOneSplitUp),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto win = getCurrentViewWindow();\n        if (win) {\n          emit moveViewWindowOneSplitRequested(this, win, Direction::Up);\n        }\n      });\n    }\n  }\n\n  // MoveOneSplitRight.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(coreConfig.getShortcut(CoreConfig::MoveOneSplitRight), this,\n                                    Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() {\n        auto win = getCurrentViewWindow();\n        if (win) {\n          emit moveViewWindowOneSplitRequested(this, win, Direction::Right);\n        }\n      });\n    }\n  }\n}\n\nvoid ViewSplit::focus() { focusCurrentViewWindow(); }\n\nID ViewSplit::getId() const { return m_id; }\n\nvoid ViewSplit::setCurrentViewWindow(int p_idx) {\n  auto win = getViewWindow(p_idx);\n  setCurrentViewWindow(win);\n}\n\nvoid ViewSplit::alternateTab() {\n  if (!m_lastViewWindow) {\n    return;\n  }\n\n  // It is fine even when m_lastViewWindow is a wild pointer. The implementation will just\n  // compare its value without dereferencing it.\n  if (-1 != indexOf(m_lastViewWindow)) {\n    setCurrentViewWindow(m_lastViewWindow);\n  } else {\n    m_lastViewWindow = nullptr;\n  }\n}\n\nvoid ViewSplit::activateNextTab(bool p_backward) {\n  int idx = currentIndex();\n  if (idx == -1 || count() == 1) {\n    return;\n  }\n\n  if (p_backward) {\n    --idx;\n    if (idx < 0) {\n      idx = count() - 1;\n    }\n  } else {\n    ++idx;\n    if (idx >= count()) {\n      idx = 0;\n    }\n  }\n\n  setCurrentViewWindow(idx);\n}\n"
  },
  {
    "path": "src/widgets/viewsplit.h",
    "content": "#ifndef VIEWSPLIT_H\n#define VIEWSPLIT_H\n\n#include <QTabWidget>\n\n#include <functional>\n\n#include <buffer/buffer.h>\n#include <core/global.h>\n\nclass QToolButton;\nclass QMenu;\nclass QActionGroup;\n\nnamespace vnotex {\nclass ViewWindow;\nstruct ViewWorkspace;\n\nclass ViewSplit : public QTabWidget {\n  Q_OBJECT\npublic:\n  typedef std::function<bool(ViewWindow *)> ViewWindowSelector;\n\n  struct ViewWindowNavigationModeInfo {\n    // Top left position of the ViewWindow relative to the view split.\n    QPoint m_topLeft;\n\n    ViewWindow *m_viewWindow = nullptr;\n  };\n\n  ViewSplit(const QVector<QSharedPointer<ViewWorkspace>> &p_allWorkspaces,\n            const QSharedPointer<ViewWorkspace> &p_workspace, ID p_id, QWidget *p_parent = nullptr);\n\n  ~ViewSplit();\n\n  QVector<ViewWindow *> findBuffer(const Buffer *p_buffer) const;\n\n  int getViewWindowCount() const;\n\n  void addViewWindow(ViewWindow *p_win);\n\n  ViewWindow *getCurrentViewWindow() const;\n  void setCurrentViewWindow(ViewWindow *p_win);\n\n  void setCurrentViewWindow(int p_idx);\n\n  QVector<ViewWindow *> getAllViewWindows() const;\n\n  // @p_win is not deleted.\n  void takeViewWindow(ViewWindow *p_win);\n\n  void setWorkspace(const QSharedPointer<ViewWorkspace> &p_workspace);\n\n  QSharedPointer<ViewWorkspace> getWorkspace() const;\n\n  void setActive(bool p_active);\n\n  // @p_func: return true if going well, return false to stop the iteration.\n  // Return false if there is a break.\n  bool forEachViewWindow(const ViewWindowSelector &p_func) const;\n\n  QVector<ViewWindowNavigationModeInfo> getNavigationModeInfo() const;\n\n  void focus();\n\n  ID getId() const;\n\n  void updateStateToWorkspace() const;\n\n  enum class CloseTabMode { CloseAllTabs, CloseOtherTabs, CloseTabsToTheLeft, CloseTabsToTheRight };\n\n  void closeMultipleTabs(CloseTabMode p_ctm);\n\nsignals:\n  void viewWindowCloseRequested(ViewWindow *p_win);\n\n  void verticalSplitRequested(ViewSplit *p_split);\n\n  void horizontalSplitRequested(ViewSplit *p_split);\n\n  // 创建空的 split 的信号, 方便思维导图, 看板, 等其他前端与后端笔记联动\n  void emptySplitRequested(ViewSplit *p_split, Direction p_direction);\n\n  void maximizeSplitRequested(ViewSplit *p_split);\n\n  void distributeSplitsRequested();\n\n  void newQuickNoteRequested();\n\n  void removeSplitRequested(ViewSplit *p_split);\n\n  void removeSplitAndWorkspaceRequested(ViewSplit *p_split);\n\n  void newWorkspaceRequested(ViewSplit *p_split);\n\n  void removeWorkspaceRequested(ViewSplit *p_split);\n\n  void focused(ViewSplit *p_split);\n\n  void currentViewWindowChanged(ViewWindow *p_win);\n\n  void moveViewWindowOneSplitRequested(ViewSplit *p_split, ViewWindow *p_win,\n                                       Direction p_direction);\n\nprotected:\n  bool eventFilter(QObject *p_object, QEvent *p_event) Q_DECL_OVERRIDE;\n\n  void mousePressEvent(QMouseEvent *p_event) Q_DECL_OVERRIDE;\n\n  // To accept specific drop.\n  void dragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE;\n\n  // Drop the data.\n  void dropEvent(QDropEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate slots:\n  void closeTab(int p_idx);\n\nprivate:\n  void setupUI();\n\n  void setupCornerWidget();\n\n  void setupTabBar();\n\n  void setupShortcuts();\n\n  ViewWindow *getViewWindow(int p_idx) const;\n\n  void updateAndTakeCurrentWorkspace();\n\n  void initIcons();\n\n  void updateWindowList(QMenu *p_menu);\n\n  void updateMenu(QMenu *p_menu);\n\n  void createContextMenuOnTabBar(QMenu *p_menu, int p_tabIdx);\n\n  void focusCurrentViewWindow();\n\n  void alternateTab();\n\n  void activateNextTab(bool p_backward);\n\n  void closeMultipleTabs(int p_idx, CloseTabMode ctm);\n\n  ID m_id = 0;\n\n  const QVector<QSharedPointer<ViewWorkspace>> &m_allWorkspaces;\n\n  QSharedPointer<ViewWorkspace> m_workspace;\n\n  QToolButton *m_windowListButton = nullptr;\n\n  QToolButton *m_menuButton = nullptr;\n\n  QActionGroup *m_windowListActionGroup = nullptr;\n\n  QActionGroup *m_workspaceActionGroup = nullptr;\n\n  // Used for AlternateTab.\n  ViewWindow *m_currentViewWindow = nullptr;\n  ViewWindow *m_lastViewWindow = nullptr;\n\n  static QIcon s_windowListIcon;\n\n  static QIcon s_windowListActiveIcon;\n\n  static QIcon s_menuIcon;\n\n  static QIcon s_menuActiveIcon;\n\n  static const QString c_activeActionButtonForegroundName;\n\n  static const QString c_actionButtonForegroundName;\n};\n} // namespace vnotex\n\n#endif // VIEWSPLIT_H\n"
  },
  {
    "path": "src/widgets/viewwindow.cpp",
    "content": "#include \"viewwindow.h\"\n\n#include <QAction>\n#include <QActionGroup>\n#include <QApplication>\n#include <QDebug>\n#include <QDragEnterEvent>\n#include <QFileInfo>\n#include <QFocusEvent>\n#include <QMenu>\n#include <QShortcut>\n#include <QTimer>\n#include <QToolBar>\n#include <QToolButton>\n#include <QVBoxLayout>\n#include <QWheelEvent>\n#include <QWidgetAction>\n\n#include \"attachmentdragdropareaindicator.h\"\n#include \"attachmentpopup.h\"\n#include \"dragdropareaindicator.h\"\n#include \"editors/statuswidget.h\"\n#include \"editreaddiscardaction.h\"\n#include \"exception.h\"\n#include \"findandreplacewidget.h\"\n#include \"floatingwidget.h\"\n#include \"messageboxhelper.h\"\n#include \"outlinepopup.h\"\n#include \"propertydefs.h\"\n#include \"tagpopup.h\"\n#include \"toolbarhelper.h\"\n#include \"viewsplit.h\"\n#include \"vnotex.h\"\n#include \"widgetsfactory.h\"\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <imagehost/imagehostmgr.h>\n#include <utils/iconutils.h>\n#include <utils/utils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nQIcon ViewWindow::s_savedIcon;\n\nQIcon ViewWindow::s_modifiedIcon;\n\nViewWindow::ViewWindow(QWidget *p_parent) : QFrame(p_parent) {\n  setupUI();\n\n  initIcons();\n\n  setupShortcuts();\n\n  // Need to use this global-wise way, especially for the WebView.\n  connect(qApp, &QApplication::focusChanged, this, [this](QWidget *p_old, QWidget *p_now) {\n    if (p_now == this || isAncestorOf(p_now)) {\n      bool hadFocus = p_old && (p_old == this || isAncestorOf(p_old));\n      if (!hadFocus) {\n        emit focused(this);\n      }\n    }\n  });\n\n  m_syncBufferContentTimer = new QTimer(this);\n  m_syncBufferContentTimer->setSingleShot(true);\n  m_syncBufferContentTimer->setInterval(500);\n  connect(m_syncBufferContentTimer, &QTimer::timeout, this, [this]() {\n    Q_ASSERT(getBuffer());\n    if (getBuffer()->getRevision() != m_bufferRevision) {\n      syncEditorFromBufferContent();\n    }\n  });\n}\n\nViewWindow::~ViewWindow() {\n  Q_ASSERT(!m_buffer);\n  if (m_statusWidget) {\n    m_statusWidget->setParent(nullptr);\n  }\n}\n\nvoid ViewWindow::setupUI() {\n  m_mainLayout = new QVBoxLayout(this);\n  m_mainLayout->setSpacing(0);\n  m_mainLayout->setContentsMargins(0, 0, 0, 0);\n\n  m_topLayout = new QVBoxLayout();\n  m_topLayout->setContentsMargins(0, 0, 0, 0);\n  m_topLayout->setSpacing(0);\n  m_mainLayout->addLayout(m_topLayout, 0);\n\n  m_bottomLayout = new QVBoxLayout();\n  m_bottomLayout->setContentsMargins(0, 0, 0, 0);\n  m_bottomLayout->setSpacing(0);\n  m_mainLayout->addLayout(m_bottomLayout, 0);\n}\n\nvoid ViewWindow::initIcons() {\n  if (!s_savedIcon.isNull()) {\n    return;\n  }\n\n  const auto &themeMgr = VNoteX::getInst().getThemeMgr();\n  const QString savedIconName(\"buffer.svg\");\n  const QString unsavedIconFg(\"base#icon#warning#fg\");\n  s_savedIcon = IconUtils::fetchIcon(themeMgr.getIconFile(savedIconName));\n  s_modifiedIcon = IconUtils::fetchIcon(themeMgr.getIconFile(savedIconName),\n                                        themeMgr.paletteColor(unsavedIconFg));\n}\n\nBuffer *ViewWindow::getBuffer() const { return m_buffer; }\n\nvoid ViewWindow::handleBufferChanged(const QSharedPointer<FileOpenParameters> &p_paras) {\n  auto buffer = getBuffer();\n  if (buffer) {\n    connect(buffer, &Buffer::modified, this, &ViewWindow::statusChanged);\n\n    // To make it convenient to disconnect, do not connect directly to\n    // the timer.\n    connect(buffer, &Buffer::contentsChanged, this,\n            [this]() { m_syncBufferContentTimer->start(); });\n\n    connect(buffer, &Buffer::nameChanged, this, &ViewWindow::nameChanged);\n\n    connect(buffer, &Buffer::attachmentChanged, this, &ViewWindow::attachmentChanged);\n\n    connect(buffer, &Buffer::autoSaved, this,\n            [this]() { executeHook(FileOpenParameters::PostSave); });\n  }\n\n  m_sessionEnabled = p_paras->m_sessionEnabled;\n\n  m_openParas = p_paras;\n\n  handleBufferChangedInternal(p_paras);\n\n  emit bufferChanged();\n}\n\nvoid ViewWindow::handleBufferChangedInternal(const QSharedPointer<FileOpenParameters> &p_paras) {\n  Q_UNUSED(p_paras);\n  syncEditorFromBuffer();\n}\n\nvoid ViewWindow::attachToBuffer(Buffer *p_buffer,\n                                const QSharedPointer<FileOpenParameters> &p_paras) {\n  Q_ASSERT(p_buffer);\n  Q_ASSERT(m_buffer != p_buffer);\n\n  detachFromBuffer();\n\n  m_buffer = p_buffer;\n  m_buffer->attachViewWindow(this);\n\n  handleBufferChanged(p_paras);\n\n  if (m_buffer->getAttachViewWindowCount() == 1) {\n    QTimer::singleShot(1000, this, &ViewWindow::checkBackupFileOfPreviousSession);\n  }\n}\n\nvoid ViewWindow::detachFromBuffer(bool p_quiet) {\n  if (!m_buffer) {\n    return;\n  }\n\n  detachFromBufferInternal();\n\n  disconnect(this, 0, m_buffer, 0);\n  disconnect(m_buffer, 0, this, 0);\n\n  m_buffer->detachViewWindow(this);\n  m_buffer = nullptr;\n\n  if (!p_quiet) {\n    handleBufferChanged(nullptr);\n  }\n}\n\nQIcon ViewWindow::getIcon() const {\n  if (m_buffer) {\n    return m_buffer->isModified() ? s_modifiedIcon : s_savedIcon;\n  } else {\n    return s_savedIcon;\n  }\n}\n\nQString ViewWindow::getName() const {\n  if (m_buffer) {\n    return m_buffer->getName();\n  } else {\n    return tr(\"[No Buffer]\");\n  }\n}\n\nViewSplit *ViewWindow::getViewSplit() const { return m_viewSplit; }\n\nvoid ViewWindow::setViewSplit(ViewSplit *p_split) { m_viewSplit = p_split; }\n\nQString ViewWindow::getTitle() const {\n  if (m_buffer) {\n    return m_buffer->getPath();\n  } else {\n    return tr(\"[No Buffer]\");\n  }\n}\n\nvoid ViewWindow::setCentralWidget(QWidget *p_widget) {\n  Q_ASSERT(!m_centralWidget);\n  m_centralWidget = p_widget;\n\n  // Insert after top layout.\n  m_mainLayout->insertWidget(1, m_centralWidget, 1);\n\n  setFocusProxy(m_centralWidget);\n  m_centralWidget->show();\n}\n\nvoid ViewWindow::replaceCentralWidget(QWidget *p_widget) {\n  Q_ASSERT(m_centralWidget);\n  m_mainLayout->replaceWidget(m_centralWidget, p_widget);\n\n  m_centralWidget = p_widget;\n  setFocusProxy(m_centralWidget);\n  m_centralWidget->show();\n}\n\nvoid ViewWindow::addTopWidget(QWidget *p_widget) { m_topLayout->addWidget(p_widget); }\n\nvoid ViewWindow::addBottomWidget(QWidget *p_widget) {\n  if (m_statusWidgetInBottomLayout) {\n    m_bottomLayout->insertWidget(m_bottomLayout->count() - 1, p_widget);\n  } else {\n    m_bottomLayout->addWidget(p_widget);\n  }\n}\n\nvoid ViewWindow::setStatusWidget(const QSharedPointer<StatusWidget> &p_widget) {\n  m_statusWidget = p_widget;\n  m_bottomLayout->addWidget(p_widget.data());\n  p_widget->show();\n  m_statusWidgetInBottomLayout = true;\n}\n\nQSharedPointer<QWidget> ViewWindow::statusWidget() { return m_statusWidget; }\n\nvoid ViewWindow::setStatusWidgetVisible(bool p_visible) {\n  if (m_statusWidget) {\n    if (p_visible) {\n      // Need to add it to the right layout again since global status widget will set it as\n      // a child of the main status bar.\n      setStatusWidget(m_statusWidget);\n    } else {\n      m_statusWidget->hide();\n      m_statusWidgetInBottomLayout = false;\n    }\n  }\n}\n\nQAction *ViewWindow::addAction(QToolBar *p_toolBar, ViewWindowToolBarHelper::Action p_action) {\n  QAction *act = nullptr;\n  switch (p_action) {\n  case ViewWindowToolBarHelper::Save: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(this, &ViewWindow::statusChanged, this, [this, act]() {\n      auto buffer = getBuffer();\n      act->setEnabled(buffer ? !buffer->isReadOnly() && buffer->isModified() : false);\n    });\n    connect(act, &QAction::triggered, this, [this]() {\n      if (Normal != checkFileMissingOrChangedOutside()) {\n        return;\n      }\n\n      save(false);\n    });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::EditReadDiscard: {\n    // A combined button with Edit/Read/Discard.\n    Q_ASSERT(!m_editReadDiscardAct);\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    m_editReadDiscardAct = dynamic_cast<EditReadDiscardAction *>(act);\n    connect(this, &ViewWindow::modeChanged, this,\n            [this]() { updateEditReadDiscardActionState(m_editReadDiscardAct); });\n    connect(m_editReadDiscardAct,\n            QOverload<EditReadDiscardAction::Action>::of(&EditReadDiscardAction::triggered), this,\n            [this](EditReadDiscardAction::Action p_act) {\n              switch (p_act) {\n              case EditReadDiscardAction::Action::Edit:\n                edit();\n                break;\n              case EditReadDiscardAction::Action::Read:\n                read(true);\n                break;\n              case EditReadDiscardAction::Action::Discard:\n                read(false);\n                break;\n              }\n            });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::ViewMode: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(this, &ViewWindow::bufferChanged, this,\n            [this, act]() { act->setEnabled(getBuffer()); });\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    auto menu = WidgetsFactory::createMenu(p_toolBar);\n    toolBtn->setMenu(menu);\n    connect(menu, &QMenu::aboutToShow, this, [this, menu]() { updateViewModeMenu(menu); });\n\n    // Add shortcut to alternate among view modes.\n    const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n    auto shortcut =\n        WidgetUtils::createShortcut(editorConfig.getShortcut(EditorConfig::AlternateViewMode), this,\n                                    Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this, act, menu] {\n        if (!act->isEnabled()) {\n          return;\n        }\n        updateViewModeMenu(menu);\n        auto actions = menu->actions();\n        int idx = -1;\n        for (int i = 0; i < actions.size(); ++i) {\n          if (actions[i]->isChecked()) {\n            idx = i + 1;\n            break;\n          }\n        }\n        if (idx == -1) {\n          return;\n        }\n        if (idx >= actions.size()) {\n          idx = 0;\n        }\n        actions[idx]->trigger();\n      });\n    }\n    break;\n  }\n\n  case ViewWindowToolBarHelper::TypeHeading: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(this, &ViewWindow::modeChanged, this, [this, act]() {\n      act->setEnabled(inModeCanInsert() && getBuffer() && !getBuffer()->isReadOnly());\n    });\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    // MUST use the menu for the event. QToolButton won't trigger the event\n    // if we call action->trigger().\n    connect(toolBtn->menu(), &QMenu::triggered, this, [this](QAction *p_act) {\n      TypeAction action = static_cast<TypeAction>(TypeAction::Heading1 + p_act->data().toInt() - 1);\n      handleTypeAction(action);\n    });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::TypeBold:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeItalic:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeStrikethrough:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeUnorderedList:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeOrderedList:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeTodoList:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeCheckedTodoList:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeCode:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeCodeBlock:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeMath:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeMathBlock:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeQuote:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeLink:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeImage:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeTable:\n    Q_FALLTHROUGH();\n  case ViewWindowToolBarHelper::TypeMark: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(this, &ViewWindow::modeChanged, this, [this, act]() {\n      act->setEnabled(inModeCanInsert() && getBuffer() && !getBuffer()->isReadOnly());\n    });\n    connect(act, &QAction::triggered, this,\n            [this, p_action]() { handleTypeAction(toolBarActionToTypeAction(p_action)); });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::Attachment: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    auto popup = static_cast<AttachmentPopup *>(\n        static_cast<QToolButton *>(p_toolBar->widgetForAction(act))->menu());\n    connect(this, &ViewWindow::bufferChanged, this, [this, act, popup]() {\n      auto buffer = getBuffer();\n      act->setEnabled(buffer ? buffer->isAttachmentSupported() : false);\n      act->setIcon(getAttachmentIcon(buffer));\n      popup->setBuffer(buffer);\n    });\n    connect(this, &ViewWindow::attachmentChanged, this,\n            [this, act]() { act->setIcon(getAttachmentIcon(getBuffer())); });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::Tag: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    auto popup = static_cast<TagPopup *>(\n        static_cast<QToolButton *>(p_toolBar->widgetForAction(act))->menu());\n    connect(this, &ViewWindow::bufferChanged, this, [this, act, popup]() {\n      auto buffer = getBuffer();\n      act->setEnabled(buffer ? buffer->isTagSupported() : false);\n      popup->setBuffer(buffer);\n    });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::WordCount: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    break;\n  }\n\n  case ViewWindowToolBarHelper::Outline: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    auto popup = static_cast<OutlinePopup *>(\n        static_cast<QToolButton *>(p_toolBar->widgetForAction(act))->menu());\n    popup->setOutlineProvider(getOutlineProvider());\n    break;\n  }\n\n  case ViewWindowToolBarHelper::FindAndReplace: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(act, &QAction::triggered, this, [this]() {\n      if (findAndReplaceWidgetVisible()) {\n        const auto focusWidget = QApplication::focusWidget();\n        if (m_findAndReplace == focusWidget || m_findAndReplace->isAncestorOf(focusWidget)) {\n          hideFindAndReplaceWidget();\n        } else {\n          showFindAndReplaceWidget();\n        }\n      } else {\n        showFindAndReplaceWidget();\n      }\n    });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::SectionNumber: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(this, &ViewWindow::modeChanged, this, [this, act]() {\n      act->setEnabled(inModeCanInsert() && getBuffer() && !getBuffer()->isReadOnly());\n    });\n    auto toolBtn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    connect(toolBtn->menu(), &QMenu::triggered, this, [this](QAction *p_act) {\n      OverrideState state = static_cast<OverrideState>(p_act->data().toInt());\n      handleSectionNumberOverride(state);\n    });\n    break;\n  }\n\n  case ViewWindowToolBarHelper::InplacePreview: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    break;\n  }\n\n  case ViewWindowToolBarHelper::ImageHost: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(this, &ViewWindow::modeChanged, this, [this, act]() {\n      act->setEnabled(inModeCanInsert() && getBuffer() && !getBuffer()->isReadOnly());\n    });\n    auto toolBtn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    m_imageHostMenu = toolBtn->menu();\n    Q_ASSERT(m_imageHostMenu);\n    updateImageHostMenu();\n    connect(m_imageHostMenu, &QMenu::triggered, this,\n            [this](QAction *p_act) { handleImageHostChanged(p_act->data().toString()); });\n\n    connect(&ImageHostMgr::getInst(), &ImageHostMgr::imageHostChanged, this,\n            &ViewWindow::updateImageHostMenu);\n    break;\n  }\n\n  case ViewWindowToolBarHelper::Debug: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(act, &QAction::triggered, this, &ViewWindow::toggleDebug);\n    break;\n  }\n\n  case ViewWindowToolBarHelper::Print: {\n    act = ViewWindowToolBarHelper::addAction(p_toolBar, p_action);\n    connect(act, &QAction::triggered, this, &ViewWindow::print);\n    break;\n  }\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  return act;\n}\n\nconst QIcon &ViewWindow::getAttachmentIcon(Buffer *p_buffer) const {\n  static QIcon emptyIcon = ToolBarHelper::generateIcon(\"attachment_editor.svg\");\n  static QIcon fullIcon = ToolBarHelper::generateIcon(\"attachment_full_editor.svg\");\n  if (p_buffer && p_buffer->hasAttachment()) {\n    return fullIcon;\n  } else {\n    return emptyIcon;\n  }\n}\n\nbool ViewWindow::saveInternal(bool p_force) {\n  if (m_buffer) {\n    auto code = m_buffer->save(p_force);\n    if (code == Buffer::OperationCode::Success) {\n      setModified(false);\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\n\nbool ViewWindow::aboutToClose(bool p_force) {\n  if (!aboutToCloseInternal(p_force)) {\n    return false;\n  }\n\n  if (m_buffer) {\n    m_buffer->syncContent(this);\n\n    if (m_buffer->getAttachViewWindowCount() == 1) {\n      // Update the buffer state.\n      m_buffer->checkFileExistsOnDisk();\n      m_buffer->checkFileChangedOutside();\n      if (m_buffer->isModified()) {\n        if (p_force) {\n          // Just discard.\n          m_buffer->discard();\n        } else {\n          // Check file missing or changed outside.\n          int ret = checkFileMissingOrChangedOutside();\n          switch (ret) {\n          case Normal:\n            Q_FALLTHROUGH();\n          case SavedOrReloaded:\n            break;\n\n          case Discarded:\n            m_buffer->discard();\n            break;\n\n          default:\n            return false;\n          }\n\n          if (m_buffer->isModified()) {\n            // Ask to save changes.\n            ret = MessageBoxHelper::questionSaveDiscardCancel(\n                MessageBoxHelper::Question,\n                tr(\"Save changes before closing note (%1)?\").arg(m_buffer->getName()),\n                tr(\"Note path (%1).\").arg(m_buffer->getPath()), \"\", this);\n            switch (ret) {\n            case QMessageBox::Save: {\n              if (!save(false)) {\n                return false;\n              }\n              break;\n            }\n\n            case QMessageBox::Discard:\n              m_buffer->discard();\n              break;\n\n            case QMessageBox::Cancel:\n              Q_FALLTHROUGH();\n            default:\n              return false;\n            }\n          }\n        }\n      }\n    }\n\n    detachFromBuffer(true);\n  }\n\n  return true;\n}\n\nViewWindowMode ViewWindow::getMode() const { return m_mode; }\n\nbool ViewWindow::reload() {\n  if (m_buffer) {\n    auto code = m_buffer->reload();\n    if (code == Buffer::OperationCode::Success) {\n      setModified(false);\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\n\nvoid ViewWindow::discardChangesAndRead() {\n  auto buffer = getBuffer();\n  Q_ASSERT(buffer);\n  buffer->syncContent(this);\n\n  if (buffer->isModified()) {\n    // Ask to save changes.\n    int ret = MessageBoxHelper::questionSaveDiscardCancel(\n        MessageBoxHelper::Question, tr(\"Discard changes to note (%1)?\").arg(buffer->getName()),\n        tr(\"Note path (%1).\").arg(buffer->getPath()), \"\", this);\n    switch (ret) {\n    case QMessageBox::Save:\n      // Save and read.\n      if (!save(false)) {\n        return;\n      }\n      break;\n\n    case QMessageBox::Discard:\n      // Reload buffer and read.\n      if (!reload()) {\n        return;\n      }\n      break;\n\n    case QMessageBox::Cancel:\n      Q_FALLTHROUGH();\n    default:\n      return;\n    }\n  }\n  setMode(ViewWindowMode::Read);\n}\n\nbool ViewWindow::inModeCanInsert() const { return m_mode == ViewWindowMode::Edit; }\n\nvoid ViewWindow::handleTypeAction(TypeAction p_action) {\n  Q_UNUSED(p_action);\n  Q_ASSERT(false);\n}\n\nvoid ViewWindow::handleSectionNumberOverride(OverrideState p_state) {\n  Q_UNUSED(p_state);\n  Q_ASSERT(false);\n}\n\nvoid ViewWindow::handleImageHostChanged(const QString &p_hostName) {\n  Q_UNUSED(p_hostName);\n  Q_ASSERT(false);\n}\n\nQString ViewWindow::selectedText() const { return QString(); }\n\nViewWindow::TypeAction\nViewWindow::toolBarActionToTypeAction(ViewWindowToolBarHelper::Action p_action) {\n  Q_ASSERT(p_action >= ViewWindowToolBarHelper::Action::TypeBold &&\n           p_action <= ViewWindowToolBarHelper::Action::TypeMax);\n  return static_cast<TypeAction>(TypeAction::Bold +\n                                 (p_action - ViewWindowToolBarHelper::Action::TypeBold));\n}\n\nvoid ViewWindow::detachFromBufferInternal() {}\n\nvoid ViewWindow::checkBackupFileOfPreviousSession() {\n  Q_ASSERT(m_buffer);\n  const auto &backupFile = m_buffer->getBackupFileOfPreviousSession();\n  if (backupFile.isEmpty()) {\n    return;\n  }\n\n  qDebug() << \"checkBackupFileOfPreviousSession\" << backupFile;\n\n  // Ask to whether save or discard backup file.\n  const auto fileModifiedTime =\n      Utils::dateTimeString(QFileInfo(m_buffer->getContentPath()).lastModified());\n  const auto backupFileModifiedTime = Utils::dateTimeString(QFileInfo(backupFile).lastModified());\n  int ret = MessageBoxHelper::questionYesNoCancel(\n      MessageBoxHelper::Warning,\n      tr(\"Found backup file (%1) of file (%2). Do you want to recover from backup file?\")\n          .arg(backupFile, m_buffer->getPath()),\n      tr(\"'Yes' to recover from backup file, 'No' to discard it, and 'Cancel' to exit.\"),\n      tr(\"It may be caused by crash while editing this file before.\\n\\n\"\n         \"File last modified time: %1\\n\"\n         \"Backup file last modified time: %2\")\n          .arg(fileModifiedTime, backupFileModifiedTime),\n      this);\n  switch (ret) {\n  case QMessageBox::Yes:\n    m_buffer->recoverFromBackupFileOfPreviousSession();\n    break;\n\n  case QMessageBox::No:\n    // Simply delete the backup file.\n    m_buffer->discardBackupFileOfPreviousSession();\n    break;\n\n  case QMessageBox::Cancel:\n    Q_FALLTHROUGH();\n  default:\n    // Close ViewWindow.\n    Q_ASSERT(m_viewSplit);\n    emit m_viewSplit->viewWindowCloseRequested(this);\n    break;\n  }\n}\n\nDragDropAreaIndicator *ViewWindow::getAttachmentDragDropArea() {\n  if (!m_attachmentDragDropIndicator) {\n    m_attachmentDragDropIndicatorInterface.reset(new AttachmentDragDropAreaIndicator(this));\n    m_attachmentDragDropIndicator = new DragDropAreaIndicator(\n        m_attachmentDragDropIndicatorInterface.data(), tr(\"Drag And Drop Files To Attach\"), this);\n\n    m_attachmentDragDropIndicator->hide();\n    addTopWidget(m_attachmentDragDropIndicator);\n  }\n\n  return m_attachmentDragDropIndicator;\n}\n\nvoid ViewWindow::addToolBar(QToolBar *p_bar) {\n  Q_ASSERT(!m_toolBar && !m_attachmentDragDropIndicator);\n\n  m_toolBar = p_bar;\n  addTopWidget(p_bar);\n\n  p_bar->setAcceptDrops(true);\n\n  // Enable Drag&Drop on it.\n  p_bar->installEventFilter(this);\n}\n\nbool ViewWindow::eventFilter(QObject *p_obj, QEvent *p_event) {\n  if (p_obj == m_toolBar) {\n    switch (p_event->type()) {\n    case QEvent::DragEnter:\n      if (m_buffer && m_buffer->isAttachmentSupported() &&\n          AttachmentDragDropAreaIndicator::isAccepted(dynamic_cast<QDragEnterEvent *>(p_event))) {\n        getAttachmentDragDropArea()->show();\n      }\n      break;\n\n    case QEvent::HoverLeave:\n      if (m_attachmentDragDropIndicator) {\n        m_attachmentDragDropIndicator->hide();\n      }\n      break;\n\n    default:\n      break;\n    }\n  }\n  return QFrame::eventFilter(p_obj, p_event);\n}\n\nbool ViewWindow::aboutToCloseInternal(bool p_force) {\n  Q_UNUSED(p_force);\n  return true;\n}\n\nQSharedPointer<OutlineProvider> ViewWindow::getOutlineProvider() { return nullptr; }\n\nint ViewWindow::checkFileMissingOrChangedOutside() {\n  if (!m_buffer) {\n    return Normal;\n  }\n\n  if (!m_buffer->checkFileExistsOnDisk()) {\n    int ret = MessageBoxHelper::questionSaveDiscardCancel(\n        MessageBoxHelper::Warning, tr(\"File is missing on disk (%1).\").arg(m_buffer->getPath()),\n        tr(\"Do you want to force to save the buffer to the file?\"),\n        tr(\"The file may be deleted from outside. Please choose to save the buffer to a new file \"\n           \"or just discard it.\"),\n        this);\n    switch (ret) {\n    case QMessageBox::Save:\n      if (!save(true)) {\n        return Failed;\n      } else {\n        m_fileChangeCheckEnabled = true;\n        return SavedOrReloaded;\n      }\n      break;\n\n    case QMessageBox::Discard:\n      return Discarded;\n\n    default:\n      return Failed;\n    }\n  } else if (m_buffer->checkFileChangedOutside()) {\n    int ret = QMessageBox::Discard;\n    if (!(getWindowFlags() & WindowFlag::AutoReload)) {\n      ret = MessageBoxHelper::questionSaveDiscardCancel(\n          MessageBoxHelper::Warning,\n          tr(\"File is changed from outside (%1).\").arg(m_buffer->getPath()),\n          tr(\"Do you want to save the buffer to the file to override, or discard the buffer?\"),\n          tr(\"The file is changed from outside. Please choose to save the buffer to the file or \"\n             \"just discard the buffer and reload the file.\"),\n          this);\n    }\n    switch (ret) {\n    case QMessageBox::Save:\n      if (!save(true)) {\n        return Failed;\n      } else {\n        m_fileChangeCheckEnabled = true;\n        return SavedOrReloaded;\n      }\n\n    case QMessageBox::Discard:\n      if (!reload()) {\n        // Return Discarded here to let ViewWindow be closed.\n        return Discarded;\n      } else {\n        return SavedOrReloaded;\n      }\n\n    default:\n      return Failed;\n    }\n  }\n\n  m_fileChangeCheckEnabled = true;\n  return Normal;\n}\n\nvoid ViewWindow::checkFileMissingOrChangedOutsidePeriodically() {\n  if (m_fileChangeCheckEnabled) {\n    // Disable it first.\n    m_fileChangeCheckEnabled = false;\n    int ret = checkFileMissingOrChangedOutside();\n    m_fileChangeCheckEnabled = ret != Discarded;\n  }\n}\n\nbool ViewWindow::save(bool p_force) {\n  if (!p_force && !m_buffer->isModified()) {\n    return true;\n  }\n\n  if (m_buffer->isReadOnly()) {\n    MessageBoxHelper::notify(\n        MessageBoxHelper::Warning,\n        tr(\"This is a read-only note (%1), on which modification is not allowed.\")\n            .arg(m_buffer->getName()),\n        tr(\"Please save your changes to another note.\"), \"\", this);\n    return false;\n  }\n\n  if (!saveInternal(p_force)) {\n    MessageBoxHelper::notify(\n        MessageBoxHelper::Warning, tr(\"Failed to save note (%1).\").arg(m_buffer->getName()),\n        tr(\"Please check the file (%1) and try it again.\").arg(m_buffer->getPath()),\n        tr(\"Maybe the file is occupied by another service temporarily.\"), this);\n    return false;\n  }\n\n  executeHook(FileOpenParameters::PostSave);\n\n  return true;\n}\n\nvoid ViewWindow::executeHook(FileOpenParameters::Hook p_hook) const {\n  if (m_openParas && m_openParas->m_hooks[p_hook]) {\n    m_openParas->m_hooks[p_hook]();\n  }\n}\n\nvoid ViewWindow::updateEditReadDiscardActionState(EditReadDiscardAction *p_act) {\n  switch (getMode()) {\n  case ViewWindowMode::Read:\n    p_act->setState(BiAction::State::Default);\n    break;\n\n  default:\n    p_act->setState(BiAction::State::Alternative);\n    break;\n  }\n}\n\nvoid ViewWindow::setupShortcuts() {\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  // FindNext.\n  {\n    auto shortcut = WidgetUtils::createShortcut(editorConfig.getShortcut(EditorConfig::FindNext),\n                                                this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { findNextOnLastFind(true); });\n    }\n  }\n\n  // FindPrevious.\n  {\n    auto shortcut = WidgetUtils::createShortcut(\n        editorConfig.getShortcut(EditorConfig::FindPrevious), this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { findNextOnLastFind(false); });\n    }\n  }\n\n  // ApplySnippet.\n  {\n    auto shortcut = WidgetUtils::createShortcut(\n        editorConfig.getShortcut(EditorConfig::ApplySnippet), this, Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { applySnippet(); });\n    }\n  }\n\n  // ClearHighlights.\n  {\n    auto shortcut =\n        WidgetUtils::createShortcut(editorConfig.getShortcut(EditorConfig::ClearHighlights), this,\n                                    Qt::WidgetWithChildrenShortcut);\n    if (shortcut) {\n      connect(shortcut, &QShortcut::activated, this, [this]() { clearHighlights(); });\n    }\n  }\n}\n\nvoid ViewWindow::wheelEvent(QWheelEvent *p_event) {\n  if (p_event->modifiers() & Qt::ControlModifier) {\n    QPoint angle = p_event->angleDelta();\n    if (!angle.isNull() && (angle.y() != 0)) {\n      // Zoom in/out current tab.\n      zoom(angle.y() > 0);\n    }\n\n    p_event->accept();\n    return;\n  }\n\n  QFrame::wheelEvent(p_event);\n}\n\nvoid ViewWindow::showZoomFactor(qreal p_factor) {\n  showMessage(tr(\"Zoomed: %1%\").arg(p_factor * 100));\n}\n\nvoid ViewWindow::showZoomDelta(int p_delta) {\n  showMessage(tr(\"Zoomed: %1%2\").arg(p_delta > 0 ? \"+\" : \"\").arg(p_delta));\n}\n\nvoid ViewWindow::showFindAndReplaceWidget() {\n  if (!m_findAndReplace) {\n    m_findAndReplace = new FindAndReplaceWidget(this);\n    m_mainLayout->addWidget(m_findAndReplace);\n\n    // Connect it to slots.\n    connect(m_findAndReplace, &FindAndReplaceWidget::findTextChanged, this,\n            &ViewWindow::handleFindTextChanged);\n    connect(m_findAndReplace, &FindAndReplaceWidget::findNextRequested, this,\n            &ViewWindow::findNext);\n    connect(m_findAndReplace, &FindAndReplaceWidget::replaceRequested, this, &ViewWindow::replace);\n    connect(m_findAndReplace, &FindAndReplaceWidget::replaceAllRequested, this,\n            &ViewWindow::replaceAll);\n    connect(m_findAndReplace, &FindAndReplaceWidget::closed, this, [this]() {\n      setFocus();\n      handleFindAndReplaceWidgetClosed();\n    });\n    connect(m_findAndReplace, &FindAndReplaceWidget::opened, this,\n            &ViewWindow::handleFindAndReplaceWidgetOpened);\n  }\n\n  m_findAndReplace->open(selectedText());\n}\n\nvoid ViewWindow::hideFindAndReplaceWidget() {\n  if (m_findAndReplace) {\n    m_findAndReplace->close();\n  }\n}\n\nvoid ViewWindow::keyPressEvent(QKeyEvent *p_event) {\n  switch (p_event->key()) {\n  case Qt::Key_Escape:\n    if (findAndReplaceWidgetVisible()) {\n      hideFindAndReplaceWidget();\n      return;\n    }\n    break;\n\n  default:\n    break;\n  }\n  QFrame::keyPressEvent(p_event);\n}\n\nbool ViewWindow::findAndReplaceWidgetVisible() const {\n  return m_findAndReplace && m_findAndReplace->isVisible();\n}\n\nvoid ViewWindow::handleFindTextChanged(const QString &p_text, FindOptions p_options) {\n  Q_UNUSED(p_text);\n  Q_UNUSED(p_options);\n}\n\nvoid ViewWindow::handleFindNext(const QStringList &p_texts, FindOptions p_options) {\n  Q_UNUSED(p_texts);\n  Q_UNUSED(p_options);\n}\n\nvoid ViewWindow::handleReplace(const QString &p_text, FindOptions p_options,\n                               const QString &p_replaceText) {\n  Q_UNUSED(p_text);\n  Q_UNUSED(p_options);\n  Q_UNUSED(p_replaceText);\n}\n\nvoid ViewWindow::handleReplaceAll(const QString &p_text, FindOptions p_options,\n                                  const QString &p_replaceText) {\n  Q_UNUSED(p_text);\n  Q_UNUSED(p_options);\n  Q_UNUSED(p_replaceText);\n}\n\nvoid ViewWindow::handleFindAndReplaceWidgetClosed() {}\n\nvoid ViewWindow::handleFindAndReplaceWidgetOpened() {}\n\nvoid ViewWindow::findNextOnLastFind(bool p_forward) {\n  // Check if need to update the find info.\n  if (m_findAndReplace && m_findAndReplace->isVisible()) {\n    m_findInfo.m_texts = QStringList(m_findAndReplace->getFindText());\n    m_findInfo.m_options = m_findAndReplace->getOptions();\n  }\n\n  if (m_findInfo.m_texts.isEmpty()) {\n    return;\n  }\n\n  if (p_forward) {\n    handleFindNext(m_findInfo.m_texts, m_findInfo.m_options & ~FindOption::FindBackward);\n  } else {\n    handleFindNext(m_findInfo.m_texts, m_findInfo.m_options | FindOption::FindBackward);\n  }\n}\n\nvoid ViewWindow::findNext(const QString &p_text, FindOptions p_options) {\n  const QStringList texts(p_text);\n\n  m_findInfo.m_texts = texts;\n  m_findInfo.m_options = p_options;\n  handleFindNext(texts, p_options);\n}\n\nvoid ViewWindow::replace(const QString &p_text, FindOptions p_options,\n                         const QString &p_replaceText) {\n  m_findInfo.m_texts = QStringList(p_text);\n  m_findInfo.m_options = p_options;\n  handleReplace(p_text, p_options, p_replaceText);\n}\n\nvoid ViewWindow::replaceAll(const QString &p_text, FindOptions p_options,\n                            const QString &p_replaceText) {\n  m_findInfo.m_texts = QStringList(p_text);\n  m_findInfo.m_options = p_options;\n  handleReplaceAll(p_text, p_options, p_replaceText);\n}\n\nvoid ViewWindow::showFindResult(const QStringList &p_texts, int p_totalMatches,\n                                int p_currentMatchIndex) {\n  if (p_texts.isEmpty() || p_texts[0].isEmpty()) {\n    showMessage(QString());\n    return;\n  }\n\n  if (p_totalMatches == 0) {\n    showMessage(tr(\"Pattern not found: %1\").arg(p_texts.join(QStringLiteral(\"; \"))));\n  } else {\n    showMessage(tr(\"Match found: %1/%2\").arg(p_currentMatchIndex + 1).arg(p_totalMatches));\n  }\n}\n\nvoid ViewWindow::showReplaceResult(const QString &p_text, int p_totalReplaces) {\n  if (p_totalReplaces == 0) {\n    showMessage(tr(\"Pattern not found: %1\").arg(p_text));\n  } else {\n    showMessage(tr(\"Replaced %n match(es)\", \"\", p_totalReplaces));\n  }\n}\n\nvoid ViewWindow::showMessage(const QString p_msg) {\n  if (m_statusWidget) {\n    m_statusWidget->showMessage(p_msg);\n  } else {\n    VNoteX::getInst().showStatusMessageShort(p_msg);\n  }\n}\n\nvoid ViewWindow::edit() {\n  int ret = checkFileMissingOrChangedOutside();\n  if (Normal != ret && SavedOrReloaded != ret) {\n    // Recover the icon of the action.\n    updateEditReadDiscardActionState(m_editReadDiscardAct);\n    return;\n  }\n\n  setMode(ViewWindowMode::Edit);\n  setFocus();\n}\n\nvoid ViewWindow::read(bool p_save) {\n  int ret = checkFileMissingOrChangedOutside();\n  if (Normal != ret && SavedOrReloaded != ret) {\n    // Recover the icon of the action.\n    updateEditReadDiscardActionState(m_editReadDiscardAct);\n    return;\n  }\n\n  if (p_save) {\n    if (save(false)) {\n      setMode(ViewWindowMode::Read);\n    }\n  } else {\n    discardChangesAndRead();\n  }\n  setFocus();\n}\n\nQToolBar *ViewWindow::createToolBar(QWidget *p_parent) {\n  auto toolBar = new QToolBar(p_parent);\n  toolBar->setProperty(PropertyDefs::c_viewWindowToolBar, true);\n\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n  const int iconSize = editorConfig.getToolBarIconSize();\n  toolBar->setIconSize(QSize(iconSize, iconSize));\n\n  /*\n  // The extension button of tool bar.\n  auto extBtn = toolBar->findChild<QToolButton *>(QLatin1String(\"qt_toolbar_ext_button\"));\n  Q_ASSERT(extBtn);\n  */\n\n  return toolBar;\n}\n\nViewWindowSession ViewWindow::saveSession() const {\n  ViewWindowSession session;\n  if (m_buffer) {\n    session.m_bufferPath = m_buffer->getPath();\n    session.m_readOnly = m_buffer->isReadOnly();\n  }\n  session.m_viewWindowMode = getMode();\n  return session;\n}\n\nViewWindow::WindowFlags ViewWindow::getWindowFlags() const { return m_flags; }\n\nvoid ViewWindow::setWindowFlags(WindowFlags p_flags) { m_flags = p_flags; }\n\nQVariant ViewWindow::showFloatingWidget(FloatingWidget *p_widget) {\n  // Show the widget through a QWidgetAction in menu.\n  QMenu menu;\n\n  auto act = new QWidgetAction(&menu);\n  // @act will own @p_widget.\n  act->setDefaultWidget(p_widget);\n  menu.addAction(act);\n\n  p_widget->setMenu(&menu);\n\n  menu.exec(getFloatingWidgetPosition());\n  return p_widget->result();\n}\n\nQPoint ViewWindow::getFloatingWidgetPosition() { return mapToGlobal(QPoint(5, 5)); }\n\nvoid ViewWindow::updateImageHostMenu() {\n  Q_ASSERT(m_imageHostMenu);\n  m_imageHostMenu->clear();\n\n  if (m_imageHostActionGroup) {\n    m_imageHostActionGroup->deleteLater();\n  }\n\n  m_imageHostActionGroup = new QActionGroup(m_imageHostMenu);\n\n  auto act = m_imageHostActionGroup->addAction(tr(\"Local\"));\n  act->setCheckable(true);\n  m_imageHostMenu->addAction(act);\n  act->setChecked(true);\n\n  const auto &hosts = ImageHostMgr::getInst().getImageHosts();\n  auto curHost = ImageHostMgr::getInst().getDefaultImageHost();\n\n  for (const auto &host : hosts) {\n    auto act = m_imageHostActionGroup->addAction(host->getName());\n    act->setCheckable(true);\n    act->setData(host->getName());\n    m_imageHostMenu->addAction(act);\n\n    if (curHost == host) {\n      act->setChecked(true);\n    }\n  }\n\n  handleImageHostChanged(curHost ? curHost->getName() : nullptr);\n}\n\nvoid ViewWindow::updateLastFindInfo(const QStringList &p_texts, FindOptions p_options) {\n  m_findInfo.m_texts = p_texts;\n  m_findInfo.m_options = p_options;\n}\n\nbool ViewWindow::isSessionEnabled() const { return m_sessionEnabled; }\n\nvoid ViewWindow::toggleDebug() { qWarning() << \"debug is not supported\"; }\n\nvoid ViewWindow::updateViewModeMenu(QMenu *p_menu) {\n  p_menu->clear();\n\n  auto act = p_menu->addAction(tr(\"View Mode Not Supported\"));\n  act->setEnabled(false);\n}\n\nvoid ViewWindow::print() { qWarning() << \"print is not supported\"; }\n\nvoid ViewWindow::clearHighlights() {}\n\nvoid ViewWindow::setBufferRevisionAfterInvalidation(int p_bufferRevision) {\n  m_bufferRevision = p_bufferRevision;\n}\n"
  },
  {
    "path": "src/widgets/viewwindow.h",
    "content": "#ifndef VIEWWINDOW_H\n#define VIEWWINDOW_H\n\n#include <QFrame>\n#include <QIcon>\n#include <QSharedPointer>\n\n#include <buffer/buffer.h>\n#include <core/fileopenparameters.h>\n#include <core/global.h>\n\n#include \"viewwindowsession.h\"\n#include \"viewwindowtoolbarhelper.h\"\n\nclass QVBoxLayout;\nclass QTimer;\nclass QToolBar;\nclass QMenu;\nclass QActionGroup;\n\nnamespace vnotex {\nclass ViewSplit;\nclass DragDropAreaIndicator;\nclass DragDropAreaIndicatorInterface;\nclass OutlineProvider;\nclass EditReadDiscardAction;\nclass FindAndReplaceWidget;\nclass StatusWidget;\nclass FloatingWidget;\n\nclass ViewWindow : public QFrame {\n  Q_OBJECT\npublic:\n  enum WindowFlag { None = 0, AutoReload = 0x1 };\n  Q_DECLARE_FLAGS(WindowFlags, WindowFlag);\n\n  struct WordCountInfo {\n    bool m_isSelection = false;\n    int m_wordCount = 0;\n    int m_charWithoutSpaceCount = 0;\n    int m_charWithSpaceCount = 0;\n  };\n\n  explicit ViewWindow(QWidget *p_parent = nullptr);\n\n  virtual ~ViewWindow();\n\n  Buffer *getBuffer() const;\n\n  void attachToBuffer(Buffer *p_buffer, const QSharedPointer<FileOpenParameters> &p_paras);\n\n  void detachFromBuffer(bool p_quiet = false);\n\n  // User request to open the buffer attached to this ViewWindow again.\n  virtual void openTwice(const QSharedPointer<FileOpenParameters> &p_paras) = 0;\n\n  virtual QIcon getIcon() const;\n\n  virtual QString getName() const;\n\n  QString getTitle() const;\n\n  ViewSplit *getViewSplit() const;\n  void setViewSplit(ViewSplit *p_split);\n\n  QSharedPointer<QWidget> statusWidget();\n\n  // Whether should show standalone status widget.\n  void setStatusWidgetVisible(bool p_visible);\n\n  // Get latest content from editor instead of buffer.\n  virtual QString getLatestContent() const = 0;\n\n  // Will be called before close.\n  // Return true if it is OK to proceed.\n  bool aboutToClose(bool p_force);\n\n  ViewWindowMode getMode() const;\n  virtual void setMode(ViewWindowMode p_mode) = 0;\n\n  virtual QSharedPointer<OutlineProvider> getOutlineProvider();\n\n  // Called by upside.\n  void checkFileMissingOrChangedOutsidePeriodically();\n\n  virtual ViewWindowSession saveSession() const;\n\n  WindowFlags getWindowFlags() const;\n  void setWindowFlags(WindowFlags p_flags);\n\n  virtual void applySnippet(const QString &p_name) = 0;\n\n  virtual void applySnippet() = 0;\n\n  // Take ownership of @p_widget.\n  // Return the result from the FloatingWidget.\n  QVariant showFloatingWidget(FloatingWidget *p_widget);\n\n  bool isSessionEnabled() const;\n\n  virtual QString selectedText() const;\n\n  virtual void\n  fetchWordCountInfo(const std::function<void(const WordCountInfo &)> &p_callback) const = 0;\n\npublic slots:\n  virtual void handleEditorConfigChange() = 0;\n\n  void findNext(const QString &p_text, FindOptions p_options);\n\n  void replace(const QString &p_text, FindOptions p_options, const QString &p_replaceText);\n\n  void replaceAll(const QString &p_text, FindOptions p_options, const QString &p_replaceText);\n\nsignals:\n  // Emit when the attached buffer is changed.\n  void bufferChanged();\n\n  // Emit when this ViewWindow get focused.\n  void focused(ViewWindow *p_win);\n\n  // Emit when the status of this ViewWindow has changed,\n  // such as modification state.\n  void statusChanged();\n\n  void modeChanged();\n\n  void nameChanged();\n\n  void attachmentChanged();\n\nprotected:\n  enum TypeAction {\n    Heading1,\n    Heading2,\n    Heading3,\n    Heading4,\n    Heading5,\n    Heading6,\n    HeadingNone,\n\n    // Make sure the order is identical with ViewWindowToolBarHelper::Action.\n    Bold,\n    Italic,\n    Strikethrough,\n    UnorderedList,\n    OrderedList,\n    TodoList,\n    CheckedTodoList,\n    Code,\n    CodeBlock,\n    Math,\n    MathBlock,\n    Quote,\n    Link,\n    Image,\n    Table,\n    Mark\n  };\n\nprotected slots:\n  // Handle current buffer change.\n  virtual void handleBufferChangedInternal(const QSharedPointer<FileOpenParameters> &p_paras);\n\n  // Handle all kinds of type action.\n  virtual void handleTypeAction(TypeAction p_action);\n\n  virtual void handleSectionNumberOverride(OverrideState p_state);\n\n  virtual void handleImageHostChanged(const QString &p_hostName);\n\n  virtual void handleFindTextChanged(const QString &p_text, FindOptions p_options);\n\n  virtual void handleFindNext(const QStringList &p_texts, FindOptions p_options);\n\n  virtual void handleReplace(const QString &p_text, FindOptions p_options,\n                             const QString &p_replaceText);\n\n  virtual void handleReplaceAll(const QString &p_text, FindOptions p_options,\n                                const QString &p_replaceText);\n\n  virtual void handleFindAndReplaceWidgetClosed();\n\n  virtual void handleFindAndReplaceWidgetOpened();\n\n  virtual void toggleDebug();\n\n  virtual void print();\n\nprotected:\n  bool eventFilter(QObject *p_obj, QEvent *p_event) Q_DECL_OVERRIDE;\n\n  void wheelEvent(QWheelEvent *p_event) Q_DECL_OVERRIDE;\n\n  void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;\n\nprotected:\n  void setCentralWidget(QWidget *p_widget);\n\n  void replaceCentralWidget(QWidget *p_widget);\n\n  void addTopWidget(QWidget *p_widget);\n\n  void addToolBar(QToolBar *p_bar);\n\n  void addBottomWidget(QWidget *p_widget);\n\n  void setStatusWidget(const QSharedPointer<StatusWidget> &p_widget);\n\n  // Provide some common actions of tool bar for ViewWindow.\n  QAction *addAction(QToolBar *p_toolBar, ViewWindowToolBarHelper::Action p_action);\n\n  // ViewWindow should set editor's modification state.\n  virtual void setModified(bool p_modified) = 0;\n\n  // Return true if it is OK to proceed.\n  virtual bool aboutToCloseInternal(bool p_force);\n\n  // Sync buffer changes to editor.\n  virtual void syncEditorFromBuffer() = 0;\n\n  // Sync buffer content changes to editor.\n  virtual void syncEditorFromBufferContent() = 0;\n\n  // When we have new changes to the buffer content from our ViewWindow,\n  // we will invalidate the contents of the buffer and the buffer will\n  // call this function to tell us now the latest buffer revision.\n  void setBufferRevisionAfterInvalidation(int p_bufferRevision);\n\n  // Whether we are in a mode that enable us to insert text.\n  bool inModeCanInsert() const;\n\n  virtual void detachFromBufferInternal();\n\n  virtual void scrollUp() = 0;\n\n  virtual void scrollDown() = 0;\n\n  virtual void zoom(bool p_zoomIn) = 0;\n\n  void showZoomFactor(qreal p_factor);\n\n  void showZoomDelta(int p_delta);\n\n  virtual void showFindAndReplaceWidget();\n\n  void hideFindAndReplaceWidget();\n\n  bool findAndReplaceWidgetVisible() const;\n\n  // @p_currentMatchIndex: 0-based.\n  void showFindResult(const QStringList &p_texts, int p_totalMatches, int p_currentMatchIndex);\n\n  void showReplaceResult(const QString &p_text, int p_totalReplaces);\n\n  void edit();\n\n  void read(bool p_save);\n\n  // Show message in status widget if exists. Otherwise, show it in the mainwindow's status widget.\n  void showMessage(const QString p_msg);\n\n  void updateLastFindInfo(const QStringList &p_texts, FindOptions p_options);\n\n  virtual QPoint getFloatingWidgetPosition();\n\n  virtual void updateViewModeMenu(QMenu *p_menu);\n\n  virtual void clearHighlights();\n\n  static QToolBar *createToolBar(QWidget *p_parent = nullptr);\n\n  // The revision of the buffer of the last sync content.\n  int m_bufferRevision = 0;\n\n  // Whether there is change of editor config since last update.\n  // Subclass should maintain it.\n  int m_editorConfigRevision = 0;\n\n  ViewWindowMode m_mode = ViewWindowMode::Invalid;\n\n  // Managed by QObject.\n  FindAndReplaceWidget *m_findAndReplace = nullptr;\n\n  QSharedPointer<FileOpenParameters> m_openParas;\n\nprivate:\n  struct FindInfo {\n    QStringList m_texts;\n    FindOptions m_options;\n  };\n\n  void setupUI();\n\n  void initIcons();\n\n  void setupShortcuts();\n\n  void discardChangesAndRead();\n\n  void checkBackupFileOfPreviousSession();\n\n  DragDropAreaIndicator *getAttachmentDragDropArea();\n\n  const QIcon &getAttachmentIcon(Buffer *p_buffer) const;\n\n  // A wrapper of saveInternal().\n  bool save(bool p_force = false);\n\n  // Save buffer content to file.\n  bool saveInternal(bool p_force = false);\n\n  // Discard changes and reload buffer content from file.\n  bool reload();\n\n  void updateEditReadDiscardActionState(EditReadDiscardAction *p_act);\n\n  // Return code of checkFileMissingOrChangedOutside().\n  enum {\n    // File is not missing or changed outside.\n    Normal,\n    // Force save the buffer to file or reload the buffer from file.\n    SavedOrReloaded,\n    // Discard the buffer.\n    Discarded,\n    // User do not handle it.\n    Failed\n  };\n  int checkFileMissingOrChangedOutside();\n\n  void findNextOnLastFind(bool p_forward = true);\n\n  void handleBufferChanged(const QSharedPointer<FileOpenParameters> &p_paras);\n\n  void updateImageHostMenu();\n\n  void executeHook(FileOpenParameters::Hook p_hook) const;\n\n  static ViewWindow::TypeAction toolBarActionToTypeAction(ViewWindowToolBarHelper::Action p_action);\n\n  Buffer *m_buffer = nullptr;\n\n  // Whether check file missing or changed outside.\n  bool m_fileChangeCheckEnabled = true;\n\n  // Last find info.\n  FindInfo m_findInfo;\n\n  // Whether this ViewWindow should be recored to session.\n  bool m_sessionEnabled = true;\n\n  // Null if this window has not been added to any split.\n  ViewSplit *m_viewSplit = nullptr;\n\n  // Managed by QObject.\n  QWidget *m_centralWidget = nullptr;\n\n  // Managed by QObject.\n  QVBoxLayout *m_mainLayout = nullptr;\n\n  // Managed by QObject.\n  QVBoxLayout *m_topLayout = nullptr;\n\n  // Managed by QObject.\n  QVBoxLayout *m_bottomLayout = nullptr;\n\n  QTimer *m_syncBufferContentTimer = nullptr;\n\n  // Managed by QObject.\n  // Allocated on necessary. Use getAttachmentDragDropArea() to access.\n  DragDropAreaIndicator *m_attachmentDragDropIndicator = nullptr;\n\n  QScopedPointer<DragDropAreaIndicatorInterface> m_attachmentDragDropIndicatorInterface;\n\n  // Managed by QObject.\n  QToolBar *m_toolBar = nullptr;\n\n  QSharedPointer<StatusWidget> m_statusWidget;\n\n  EditReadDiscardAction *m_editReadDiscardAct = nullptr;\n\n  WindowFlags m_flags = WindowFlag::None;\n\n  QMenu *m_imageHostMenu = nullptr;\n\n  QActionGroup *m_imageHostActionGroup = nullptr;\n\n  bool m_statusWidgetInBottomLayout = false;\n\n  static QIcon s_savedIcon;\n  static QIcon s_modifiedIcon;\n};\n} // namespace vnotex\n\nQ_DECLARE_OPERATORS_FOR_FLAGS(vnotex::ViewWindow::WindowFlags)\n\n#endif // VIEWWINDOW_H\n"
  },
  {
    "path": "src/widgets/viewwindowsession.cpp",
    "content": "#include \"viewwindowsession.h\"\n\nusing namespace vnotex;\n\nQDataStream & ::vnotex::operator<<(QDataStream &p_ds, const ViewWindowSession &p_session) {\n  p_ds << p_session.m_bufferPath;\n  p_ds << static_cast<qint8>(p_session.m_readOnly);\n  p_ds << static_cast<qint8>(p_session.m_viewWindowMode);\n  p_ds << static_cast<qint32>(p_session.m_lineNumber);\n  return p_ds;\n}\n\nQDataStream & ::vnotex::operator>>(QDataStream &p_ds, ViewWindowSession &p_session) {\n  p_ds >> p_session.m_bufferPath;\n\n  qint8 tmp8 = 0;\n\n  p_ds >> tmp8;\n  p_session.m_readOnly = tmp8 > 0;\n\n  p_ds >> tmp8;\n  p_session.m_viewWindowMode = static_cast<ViewWindowMode>(tmp8);\n\n  {\n    qint32 tmp = 0;\n    p_ds >> tmp;\n    p_session.m_lineNumber = static_cast<int>(tmp);\n  }\n\n  return p_ds;\n}\n"
  },
  {
    "path": "src/widgets/viewwindowsession.h",
    "content": "#ifndef VIEWWINDOWSESSION_H\n#define VIEWWINDOWSESSION_H\n\n#include <QDataStream>\n\n#include <core/global.h>\n\nnamespace vnotex {\nstruct ViewWindowSession {\n  QString m_bufferPath;\n\n  bool m_readOnly = false;\n\n  ViewWindowMode m_viewWindowMode = ViewWindowMode::Read;\n\n  // 0-based.\n  int m_lineNumber = -1;\n};\n\nextern QDataStream &operator<<(QDataStream &p_ds, const ViewWindowSession &p_session);\nextern QDataStream &operator>>(QDataStream &p_ds, ViewWindowSession &p_session);\n} // namespace vnotex\n\n#endif // VIEWWINDOWSESSION_H\n"
  },
  {
    "path": "src/widgets/viewwindowtoolbarhelper.cpp",
    "content": "#include \"viewwindowtoolbarhelper.h\"\n\n#include <QAction>\n#include <QActionGroup>\n#include <QCoreApplication>\n#include <QDebug>\n#include <QKeySequence>\n#include <QMenu>\n#include <QShortcut>\n#include <QToolBar>\n#include <QToolButton>\n\n#include \"attachmentpopup.h\"\n#include \"editreaddiscardaction.h\"\n#include \"outlinepopup.h\"\n#include \"propertydefs.h\"\n#include \"tagpopup.h\"\n#include \"toolbarhelper.h\"\n#include \"viewwindow.h\"\n#include \"widgetsfactory.h\"\n#include \"wordcountpopup.h\"\n#include <core/configmgr.h>\n#include <core/editorconfig.h>\n#include <core/global.h>\n#include <utils/iconutils.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\ntypedef EditorConfig::Shortcut Shortcut;\n\n// To get the right shortcut context, we use a separate QShrotcut for the action shortcut.\n// @p_parentAction: the parent action of @p_action which is in a menu of @p_parentAction.\nvoid ViewWindowToolBarHelper::addActionShortcut(QAction *p_action, const QString &p_shortcut,\n                                                QWidget *p_widget, QAction *p_parentAction) {\n  auto shortcut = WidgetUtils::createShortcut(p_shortcut, p_widget, Qt::WidgetWithChildrenShortcut);\n  if (!shortcut) {\n    return;\n  }\n\n  QObject::connect(shortcut, &QShortcut::activated, p_action, [p_action, p_parentAction]() {\n    if (p_action->isEnabled()) {\n      if (p_parentAction) {\n        if (p_parentAction->isEnabled()) {\n          p_action->trigger();\n        }\n      } else {\n        p_action->trigger();\n      }\n    }\n  });\n  QObject::connect(shortcut, &QShortcut::activatedAmbiguously, p_action, [p_action]() {\n    qWarning() << \"ViewWindow shortcut activated ambiguously\" << p_action->text();\n  });\n  p_action->setText(QStringLiteral(\"%1\\t%2\").arg(\n      p_action->text(), shortcut->key().toString(QKeySequence::NativeText)));\n}\n\nvoid ViewWindowToolBarHelper::addButtonShortcut(QToolButton *p_btn, const QString &p_shortcut,\n                                                QWidget *p_widget) {\n  auto shortcut = WidgetUtils::createShortcut(p_shortcut, p_widget, Qt::WidgetWithChildrenShortcut);\n  if (!shortcut) {\n    return;\n  }\n\n  QObject::connect(shortcut, &QShortcut::activated, p_btn, [p_btn]() {\n    if (p_btn->isEnabled()) {\n      p_btn->click();\n    }\n  });\n  auto act = p_btn->defaultAction();\n  if (act) {\n    act->setText(QStringLiteral(\"%1\\t%2\").arg(act->text(),\n                                              shortcut->key().toString(QKeySequence::NativeText)));\n  } else {\n    p_btn->setText(QStringLiteral(\"%1\\t%2\").arg(\n        p_btn->text(), shortcut->key().toString(QKeySequence::NativeText)));\n  }\n}\n\nQAction *ViewWindowToolBarHelper::addAction(QToolBar *p_tb, Action p_action) {\n  auto viewWindow = static_cast<ViewWindow *>(p_tb->parent());\n  const auto &editorConfig = ConfigMgr::getInst().getEditorConfig();\n\n  QAction *act = nullptr;\n  switch (p_action) {\n  case Action::Save:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"save_editor.svg\"), ViewWindow::tr(\"Save\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::Save), viewWindow);\n    break;\n\n  case Action::EditReadDiscard: {\n    auto erdAct = new EditReadDiscardAction(\n        ToolBarHelper::generateIcon(\"edit_editor.svg\"), ViewWindow::tr(\"Edit\"),\n        ToolBarHelper::generateIcon(\"read_editor.svg\"), ViewWindow::tr(\"Read\"),\n        ToolBarHelper::generateIcon(\"discard_editor.svg\"), ViewWindow::tr(\"Discard\"), p_tb);\n    act = erdAct;\n    addActionShortcut(erdAct, editorConfig.getShortcut(Shortcut::EditRead), viewWindow);\n\n    auto discardAct = erdAct->getDiscardAction();\n    addActionShortcut(discardAct, editorConfig.getShortcut(Shortcut::Discard), viewWindow);\n\n    p_tb->addAction(erdAct);\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(erdAct));\n    Q_ASSERT(toolBtn);\n    erdAct->setToolButtonForAction(toolBtn);\n    break;\n  }\n\n  case Action::ViewMode: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"view_mode_editor.svg\"),\n                          ViewWindow::tr(\"View Mode\"));\n\n    WidgetUtils::addActionShortcutText(act, editorConfig.getShortcut(Shortcut::AlternateViewMode));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n    break;\n  }\n\n  case Action::TypeHeading: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_heading_editor.svg\"),\n                          ViewWindow::tr(\"Heading\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    auto menu = WidgetsFactory::createMenu(p_tb);\n\n    auto act1 = menu->addAction(ViewWindow::tr(\"Heading 1\"));\n    addActionShortcut(act1, editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading1),\n                      viewWindow, act);\n    act1->setData(1);\n\n    auto act2 = menu->addAction(ViewWindow::tr(\"Heading 2\"));\n    addActionShortcut(act2, editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading2),\n                      viewWindow, act);\n    act2->setData(2);\n\n    auto act3 = menu->addAction(ViewWindow::tr(\"Heading 3\"));\n    addActionShortcut(act3, editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading3),\n                      viewWindow, act);\n    act3->setData(3);\n\n    auto act4 = menu->addAction(ViewWindow::tr(\"Heading 4\"));\n    addActionShortcut(act4, editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading4),\n                      viewWindow, act);\n    act4->setData(4);\n\n    auto act5 = menu->addAction(ViewWindow::tr(\"Heading 5\"));\n    addActionShortcut(act5, editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading5),\n                      viewWindow, act);\n    act5->setData(5);\n\n    auto act6 = menu->addAction(ViewWindow::tr(\"Heading 6\"));\n    addActionShortcut(act6, editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeading6),\n                      viewWindow, act);\n    act6->setData(6);\n\n    auto act7 = menu->addAction(ViewWindow::tr(\"Clear\"));\n    addActionShortcut(act7, editorConfig.getShortcut(EditorConfig::Shortcut::TypeHeadingNone),\n                      viewWindow, act);\n    act7->setData(7);\n\n    toolBtn->setMenu(menu);\n    break;\n  }\n\n  case Action::TypeBold:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_bold_editor.svg\"),\n                          ViewWindow::tr(\"Bold\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeBold), viewWindow);\n    break;\n\n  case Action::TypeItalic:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_italic_editor.svg\"),\n                          ViewWindow::tr(\"Italic\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeItalic), viewWindow);\n    break;\n\n  case Action::TypeStrikethrough:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_strikethrough_editor.svg\"),\n                          ViewWindow::tr(\"Strikethrough\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeStrikethrough), viewWindow);\n    break;\n\n  case Action::TypeUnorderedList:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_unordered_list_editor.svg\"),\n                          ViewWindow::tr(\"Unordered List\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeUnorderedList), viewWindow);\n    break;\n\n  case Action::TypeOrderedList:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_ordered_list_editor.svg\"),\n                          ViewWindow::tr(\"Ordered List\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeOrderedList), viewWindow);\n    break;\n\n  case Action::TypeTodoList:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_todo_list_editor.svg\"),\n                          ViewWindow::tr(\"Todo List\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeTodoList), viewWindow);\n    break;\n\n  case Action::TypeCheckedTodoList:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_checked_todo_list_editor.svg\"),\n                          ViewWindow::tr(\"Checked Todo List\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeCheckedTodoList), viewWindow);\n    break;\n\n  case Action::TypeCode:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_code_editor.svg\"),\n                          ViewWindow::tr(\"Code\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeCode), viewWindow);\n    break;\n\n  case Action::TypeCodeBlock:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_code_block_editor.svg\"),\n                          ViewWindow::tr(\"Code Block\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeCodeBlock), viewWindow);\n    break;\n\n  case Action::TypeMath:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_math_editor.svg\"),\n                          ViewWindow::tr(\"Math\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeMath), viewWindow);\n    break;\n\n  case Action::TypeMathBlock:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_math_block_editor.svg\"),\n                          ViewWindow::tr(\"Math Block\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeMathBlock), viewWindow);\n    break;\n\n  case Action::TypeQuote:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_quote_editor.svg\"),\n                          ViewWindow::tr(\"Quote\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeQuote), viewWindow);\n    break;\n\n  case Action::TypeLink:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_link_editor.svg\"),\n                          ViewWindow::tr(\"Link\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeLink), viewWindow);\n    break;\n\n  case Action::TypeImage:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_image_editor.svg\"),\n                          ViewWindow::tr(\"Image\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeImage), viewWindow);\n    break;\n\n  case Action::TypeTable:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_table_editor.svg\"),\n                          ViewWindow::tr(\"Table\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeTable), viewWindow);\n    break;\n\n  case Action::TypeMark:\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"type_mark_editor.svg\"),\n                          ViewWindow::tr(\"Mark\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::TypeMark), viewWindow);\n    break;\n\n  case Action::Attachment: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"attachment_editor.svg\"),\n                          ViewWindow::tr(\"Attachments\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    addButtonShortcut(toolBtn, editorConfig.getShortcut(Shortcut::Attachment), viewWindow);\n\n    auto menu = new AttachmentPopup(toolBtn, p_tb);\n    toolBtn->setMenu(menu);\n    break;\n  }\n\n  case Action::Tag: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"tag_editor.svg\"), ViewWindow::tr(\"Tags\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    addButtonShortcut(toolBtn, editorConfig.getShortcut(Shortcut::Tag), viewWindow);\n\n    auto menu = new TagPopup(toolBtn, p_tb);\n    toolBtn->setMenu(menu);\n    break;\n  }\n\n  case Action::Outline: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"outline_editor.svg\"),\n                          ViewWindow::tr(\"Outline\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    addButtonShortcut(toolBtn, editorConfig.getShortcut(Shortcut::Outline), viewWindow);\n\n    auto menu = new OutlinePopup(toolBtn, p_tb);\n    toolBtn->setMenu(menu);\n    break;\n  }\n\n  case Action::FindAndReplace: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"find_replace_editor.svg\"),\n                          ViewWindow::tr(\"Find And Replace\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::FindAndReplace), viewWindow);\n    break;\n  }\n\n  case Action::SectionNumber: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"section_number_editor.svg\"),\n                          ViewWindow::tr(\"Section Number\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    auto menu = WidgetsFactory::createMenu(p_tb);\n\n    auto actGroup = new QActionGroup(menu);\n    auto act1 = actGroup->addAction(ViewWindow::tr(\"Follow Configuration\"));\n    act1->setCheckable(true);\n    act1->setChecked(true);\n    act1->setData(OverrideState::NoOverride);\n    menu->addAction(act1);\n\n    act1 = actGroup->addAction(ViewWindow::tr(\"Enabled\"));\n    act1->setCheckable(true);\n    act1->setData(OverrideState::ForceEnable);\n    menu->addAction(act1);\n\n    act1 = actGroup->addAction(ViewWindow::tr(\"Disabled\"));\n    act1->setCheckable(true);\n    act1->setData(OverrideState::ForceDisable);\n    menu->addAction(act1);\n\n    toolBtn->setMenu(menu);\n    break;\n  }\n\n  case Action::InplacePreview: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"inplace_preview_editor.svg\"),\n                          ViewWindow::tr(\"Toggle In-Place Preview\"));\n    act->setCheckable(true);\n    act->setChecked(true);\n    break;\n  }\n\n  case Action::ImageHost: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"image_host_editor.svg\"),\n                          ViewWindow::tr(\"Image Host\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    auto menu = WidgetsFactory::createMenu(p_tb);\n    toolBtn->setMenu(menu);\n    break;\n  }\n\n  case Action::Debug: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"debug_editor.svg\"), ViewWindow::tr(\"Debug\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::Debug), viewWindow);\n    break;\n  }\n\n  case Action::Print: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"print_editor.svg\"), ViewWindow::tr(\"Print\"));\n    addActionShortcut(act, editorConfig.getShortcut(Shortcut::Print), viewWindow);\n    break;\n  }\n\n  case Action::WordCount: {\n    act = p_tb->addAction(ToolBarHelper::generateIcon(\"word_count_editor.svg\"),\n                          ViewWindow::tr(\"Word Count\"));\n\n    auto toolBtn = dynamic_cast<QToolButton *>(p_tb->widgetForAction(act));\n    Q_ASSERT(toolBtn);\n    toolBtn->setPopupMode(QToolButton::InstantPopup);\n    toolBtn->setProperty(PropertyDefs::c_toolButtonWithoutMenuIndicator, true);\n\n    addButtonShortcut(toolBtn, editorConfig.getShortcut(Shortcut::WordCount), viewWindow);\n\n    auto menu = new WordCountPopup(toolBtn, viewWindow, p_tb);\n    toolBtn->setMenu(menu);\n    break;\n  }\n\n  default:\n    Q_ASSERT(false);\n    break;\n  }\n\n  return act;\n}\n"
  },
  {
    "path": "src/widgets/viewwindowtoolbarhelper.h",
    "content": "#ifndef VIEWWINDOWTOOLBARHELPER_H\n#define VIEWWINDOWTOOLBARHELPER_H\n\nclass QToolBar;\nclass QAction;\nclass QWidget;\nclass QString;\nclass QToolButton;\n\nnamespace vnotex {\n// Help to setup common buttons of ViewWindow tool bar.\nclass ViewWindowToolBarHelper {\npublic:\n  enum Action {\n    Save,\n    EditReadDiscard,\n    ViewMode,\n\n    // Make sure they are put together.\n    // Including Heading1-6 and HeadingNone.\n    TypeHeading,\n    TypeBold,\n    TypeItalic,\n    TypeStrikethrough,\n    TypeUnorderedList,\n    TypeOrderedList,\n    TypeTodoList,\n    TypeCheckedTodoList,\n    TypeCode,\n    TypeCodeBlock,\n    TypeMath,\n    TypeMathBlock,\n    TypeQuote,\n    TypeLink,\n    TypeImage,\n    TypeTable,\n    TypeMark,\n    // Ending TypeXXX.\n    TypeMax,\n\n    Attachment,\n    Tag,\n    Outline,\n    FindAndReplace,\n    SectionNumber,\n    InplacePreview,\n    ImageHost,\n    Debug,\n    Print,\n    WordCount\n  };\n\n  static QAction *addAction(QToolBar *p_tb, Action p_action);\n\n  static void addActionShortcut(QAction *p_action, const QString &p_shortcut, QWidget *p_widget,\n                                QAction *p_parentAction = nullptr);\n\n  static void addButtonShortcut(QToolButton *p_btn, const QString &p_shortcut, QWidget *p_widget);\n\n  ViewWindowToolBarHelper() = delete;\n};\n} // namespace vnotex\n\n#endif // VIEWWINDOWTOOLBARHELPER_H\n"
  },
  {
    "path": "src/widgets/webpage.cpp",
    "content": "#include \"webpage.h\"\n\n#include <QDebug>\n\n#include <core/fileopenparameters.h>\n#include <core/vnotex.h>\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nWebPage::WebPage(QWidget *p_parent) : QWebEnginePage(p_parent) {}\n\nbool WebPage::acceptNavigationRequest(const QUrl &p_url, NavigationType p_type,\n                                      bool p_isMainFrame) {\n  Q_UNUSED(p_type);\n  if (p_url.isLocalFile()) {\n    emit VNoteX::getInst().openFileRequested(p_url.toLocalFile(),\n                                             QSharedPointer<FileOpenParameters>::create());\n    return false;\n  }\n  if (!p_isMainFrame) {\n    return true;\n  }\n\n  const auto scheme = p_url.scheme();\n  if (scheme == QStringLiteral(\"data\")) {\n    // Qt 5.12 and above will trigger this when calling QWebEngineView::setHtml().\n    return true;\n  } else if (scheme == QStringLiteral(\"chrome-devtools\") || scheme == QStringLiteral(\"devtools\")) {\n    return true;\n  }\n\n  WidgetUtils::openUrlByDesktop(p_url);\n  return false;\n}\n\nvoid WebPage::javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message,\n                                       int lineNumber, const QString &sourceID) {\n  if (level == QWebEnginePage::InfoMessageLevel) {\n    qDebug() << \"JS(\" << sourceID << \":\" << lineNumber << \"):\" << message;\n  }\n  QWebEnginePage::javaScriptConsoleMessage(level, message, lineNumber, sourceID);\n}\n"
  },
  {
    "path": "src/widgets/webpage.h",
    "content": "#ifndef WEBPAGE_H\n#define WEBPAGE_H\n\n#include <QWebEnginePage>\n\nnamespace vnotex {\nclass WebPage : public QWebEnginePage {\n  Q_OBJECT\npublic:\n  explicit WebPage(QWidget *p_parent = nullptr);\n\nprotected:\n  bool acceptNavigationRequest(const QUrl &p_url, NavigationType p_type,\n                               bool p_isMainFrame) Q_DECL_OVERRIDE;\n\n  void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message,\n                                int lineNumber, const QString &sourceID) override;\n};\n} // namespace vnotex\n\n#endif // WEBPAGE_H\n"
  },
  {
    "path": "src/widgets/webviewer.cpp",
    "content": "#include \"webviewer.h\"\n\n#include \"webpage.h\"\n\n#include <QWebEnginePage>\n\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nWebViewer::WebViewer(const QColor &p_background, qreal p_zoomFactor, QWidget *p_parent)\n    : QWebEngineView(p_parent) {\n  setAcceptDrops(false);\n\n  auto viewPage = new WebPage(this);\n  setPage(viewPage);\n\n  connect(viewPage, &QWebEnginePage::linkHovered, this, &WebViewer::linkHovered);\n\n  // Avoid white flash before loading content.\n  // Setting Qt::transparent will force GrayScale antialias rendering.\n  if (p_background.isValid()) {\n    viewPage->setBackgroundColor(p_background);\n  }\n\n  if (!Utils::fuzzyEqual(p_zoomFactor, 1.0)) {\n    setZoomFactor(p_zoomFactor);\n  }\n}\n\nWebViewer::WebViewer(const QColor &p_background, QWidget *p_parent)\n    : WebViewer(p_background, 1.0, p_parent) {}\n\nWebViewer::~WebViewer() {}\n\nvoid WebViewer::findText(const QString &p_text, FindOptions p_options) {\n  if (p_options & FindOption::RegularExpression) {\n    return;\n  }\n\n  QWebEnginePage::FindFlags flags;\n  if (p_options & FindOption::FindBackward) {\n    flags |= QWebEnginePage::FindFlag::FindBackward;\n  }\n  if (p_options & FindOption::CaseSensitive) {\n    flags |= QWebEnginePage::FindFlag::FindCaseSensitively;\n  }\n\n  QWebEngineView::findText(p_text, flags);\n}\n"
  },
  {
    "path": "src/widgets/webviewer.h",
    "content": "#ifndef WEBVIEWER_H\n#define WEBVIEWER_H\n\n#include <QWebEngineView>\n\n#include <core/global.h>\n\nnamespace vnotex {\nclass WebViewer : public QWebEngineView {\n  Q_OBJECT\npublic:\n  WebViewer(const QColor &p_background, qreal p_zoomFactor, QWidget *p_parent = nullptr);\n\n  WebViewer(const QColor &p_background, QWidget *p_parent = nullptr);\n\n  virtual ~WebViewer();\n\n  void findText(const QString &p_text, FindOptions p_options);\n\nsignals:\n  void linkHovered(const QString &p_url);\n};\n} // namespace vnotex\n\n#endif // WEBVIEWER_H\n"
  },
  {
    "path": "src/widgets/widgetsfactory.cpp",
    "content": "#include \"widgetsfactory.h\"\n\n#include <QCheckBox>\n#include <QComboBox>\n#include <QDoubleSpinBox>\n#include <QFormLayout>\n#include <QMenu>\n#include <QPlainTextEdit>\n#include <QRadioButton>\n#include <QSpinBox>\n#include <QStyledItemDelegate>\n#include <QToolButton>\n\n#include \"combobox.h\"\n#include \"lineeditwithsnippet.h\"\n\nusing namespace vnotex;\n\nQMenu *WidgetsFactory::createMenu(QWidget *p_parent) {\n  auto menu = new QMenu(p_parent);\n  menu->setToolTipsVisible(true);\n  return menu;\n}\n\nQMenu *WidgetsFactory::createMenu(const QString &p_title, QWidget *p_parent) {\n  auto menu = new QMenu(p_title, p_parent);\n  menu->setToolTipsVisible(true);\n  return menu;\n}\n\nQLineEdit *WidgetsFactory::createLineEdit(QWidget *p_parent) { return new LineEdit(p_parent); }\n\nQLineEdit *WidgetsFactory::createLineEdit(const QString &p_contents, QWidget *p_parent) {\n  return new LineEdit(p_contents, p_parent);\n}\n\nLineEditWithSnippet *WidgetsFactory::createLineEditWithSnippet(QWidget *p_parent) {\n  return new LineEditWithSnippet(p_parent);\n}\n\nLineEditWithSnippet *WidgetsFactory::createLineEditWithSnippet(const QString &p_contents,\n                                                               QWidget *p_parent) {\n  return new LineEditWithSnippet(p_contents, p_parent);\n}\n\nQComboBox *WidgetsFactory::createComboBox(QWidget *p_parent) {\n  auto comboBox = new ComboBox(p_parent);\n  auto itemDelegate = new QStyledItemDelegate(comboBox);\n  comboBox->setItemDelegate(itemDelegate);\n  return comboBox;\n}\n\nQCheckBox *WidgetsFactory::createCheckBox(const QString &p_text, QWidget *p_parent) {\n  return new QCheckBox(p_text, p_parent);\n}\n\nQRadioButton *WidgetsFactory::createRadioButton(const QString &p_text, QWidget *p_parent) {\n  return new QRadioButton(p_text, p_parent);\n}\n\nQSpinBox *WidgetsFactory::createSpinBox(QWidget *p_parent) { return new QSpinBox(p_parent); }\n\nQDoubleSpinBox *WidgetsFactory::createDoubleSpinBox(QWidget *p_parent) {\n  return new QDoubleSpinBox(p_parent);\n}\n\nQToolButton *WidgetsFactory::createToolButton(QWidget *p_parent) {\n  auto tb = new QToolButton(p_parent);\n  tb->setPopupMode(QToolButton::MenuButtonPopup);\n  return tb;\n}\n\nQFormLayout *WidgetsFactory::createFormLayout(QWidget *p_parent) {\n  auto layout = new QFormLayout(p_parent);\n\n#if defined(Q_OS_MACOS)\n  layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);\n  layout->setFormAlignment(Qt::AlignLeft | Qt::AlignTop);\n#endif\n\n  return layout;\n}\n\nQPlainTextEdit *WidgetsFactory::createPlainTextConsole(QWidget *p_parent) {\n  auto edit = new QPlainTextEdit(p_parent);\n  edit->setProperty(\"ConsoleTextEdit\", true);\n  edit->setReadOnly(true);\n  edit->setLineWrapMode(QPlainTextEdit::WidgetWidth);\n  return edit;\n}\n\nQPlainTextEdit *WidgetsFactory::createPlainTextEdit(QWidget *p_parent) {\n  auto edit = new QPlainTextEdit(p_parent);\n  edit->setProperty(\"ConsoleTextEdit\", true);\n  return edit;\n}\n"
  },
  {
    "path": "src/widgets/widgetsfactory.h",
    "content": "#ifndef WIDGETSFACTORY_H\n#define WIDGETSFACTORY_H\n\nclass QMenu;\nclass QWidget;\nclass QLineEdit;\nclass QString;\nclass QComboBox;\nclass QCheckBox;\nclass QSpinBox;\nclass QToolButton;\nclass QDoubleSpinBox;\nclass QFormLayout;\nclass QPlainTextEdit;\nclass QRadioButton;\n\nnamespace vnotex {\nclass LineEditWithSnippet;\n\nclass WidgetsFactory {\npublic:\n  WidgetsFactory() = delete;\n\n  static QMenu *createMenu(QWidget *p_parent = nullptr);\n\n  static QMenu *createMenu(const QString &p_title, QWidget *p_parent = nullptr);\n\n  static QLineEdit *createLineEdit(QWidget *p_parent = nullptr);\n\n  static QLineEdit *createLineEdit(const QString &p_contents, QWidget *p_parent = nullptr);\n\n  static LineEditWithSnippet *createLineEditWithSnippet(QWidget *p_parent = nullptr);\n\n  static LineEditWithSnippet *createLineEditWithSnippet(const QString &p_contents,\n                                                        QWidget *p_parent = nullptr);\n\n  static QComboBox *createComboBox(QWidget *p_parent = nullptr);\n\n  static QCheckBox *createCheckBox(const QString &p_text, QWidget *p_parent = nullptr);\n\n  static QRadioButton *createRadioButton(const QString &p_text, QWidget *p_parent = nullptr);\n\n  static QSpinBox *createSpinBox(QWidget *p_parent = nullptr);\n\n  static QDoubleSpinBox *createDoubleSpinBox(QWidget *p_parent = nullptr);\n\n  static QToolButton *createToolButton(QWidget *p_parent = nullptr);\n\n  static QFormLayout *createFormLayout(QWidget *p_parent = nullptr);\n\n  static QPlainTextEdit *createPlainTextConsole(QWidget *p_parent = nullptr);\n\n  static QPlainTextEdit *createPlainTextEdit(QWidget *p_parent = nullptr);\n};\n} // namespace vnotex\n\n#endif // WIDGETSFACTORY_H\n"
  },
  {
    "path": "src/widgets/windowspanel.cpp",
    "content": "#include \"windowspanel.h\"\n\n#include <QListWidgetItem>\n#include <QVBoxLayout>\n\n#include <utils/widgetutils.h>\n\n#include \"listwidget.h\"\n#include \"navigationmodemgr.h\"\n#include \"windowsprovider.h\"\n\nusing namespace vnotex;\n\nWindowsPanel::WindowsPanel(const QSharedPointer<WindowsProvider> &p_provider, QWidget *p_parent)\n    : QFrame(p_parent), m_provider(p_provider) {\n  Q_ASSERT(m_provider);\n  setupUI();\n\n  connect(m_provider.data(), &WindowsProvider::windowsChanged, this,\n          &WindowsPanel::updateWindowsList);\n}\n\nvoid WindowsPanel::setupUI() {\n  auto mainLayout = new QVBoxLayout(this);\n  WidgetUtils::setContentsMargins(mainLayout);\n\n  m_windows = new ListWidget(true, this);\n  mainLayout->addWidget(m_windows);\n\n  connect(m_windows, &ListWidget::itemActivatedPlus, this,\n          [this](QListWidgetItem *item, ListWidget::ActivateReason reason) {\n            if (reason == ListWidget::ActivateReason::Button) {\n              activateItem(item);\n            }\n          });\n  connect(m_windows, &QListWidget::itemClicked, this, [this](QListWidgetItem *item) {\n    // It is fine to trigger multiple times.\n    activateItem(item);\n  });\n\n  m_navigationWrapper.reset(new NavigationModeWrapper<QListWidget, QListWidgetItem>(m_windows));\n  NavigationModeMgr::getInst().registerNavigationTarget(m_navigationWrapper.data());\n\n  setFocusProxy(m_windows);\n}\n\nvoid WindowsPanel::updateWindowsList() {\n  m_windows->clear();\n  if (!isVisible()) {\n    return;\n  }\n\n  const auto wins = m_provider->getWindows();\n  for (const auto &splitWins : wins) {\n    for (const auto &win : splitWins.m_viewWindows) {\n      addItem(splitWins.m_viewSplitId, win);\n    }\n  }\n}\n\nvoid WindowsPanel::addItem(ID p_viewSplitId, const WindowsProvider::WindowData &p_data) {\n  auto item = new QListWidgetItem(m_windows);\n\n  item->setText(p_data.m_name);\n  item->setToolTip(p_data.m_name);\n  item->setData(Qt::UserRole, p_viewSplitId);\n  item->setData(Role::UserRole2, p_data.m_index);\n}\n\nvoid WindowsPanel::showEvent(QShowEvent *p_event) {\n  QFrame::showEvent(p_event);\n\n  updateWindowsList();\n}\n\nvoid WindowsPanel::activateItem(QListWidgetItem *p_item) {\n  Q_ASSERT(p_item);\n  m_provider->setCurrentWindow(p_item->data(Qt::UserRole).toULongLong(),\n                               p_item->data(Role::UserRole2).toInt());\n}\n"
  },
  {
    "path": "src/widgets/windowspanel.h",
    "content": "#ifndef WINDOWSPANEL_H\n#define WINDOWSPANEL_H\n\n#include <QFrame>\n#include <QScopedPointer>\n#include <QSharedPointer>\n\n#include \"navigationmodewrapper.h\"\n#include \"windowsprovider.h\"\n\nclass QListWidgetItem;\n\nnamespace vnotex {\nclass ListWidget;\n\nclass WindowsPanel : public QFrame {\n  Q_OBJECT\npublic:\n  WindowsPanel(const QSharedPointer<WindowsProvider> &p_provider, QWidget *p_parent = nullptr);\n\nprotected:\n  void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;\n\nprivate:\n  void setupUI();\n\n  void updateWindowsList();\n\n  void addItem(ID p_viewSplitId, const WindowsProvider::WindowData &p_data);\n\n  void activateItem(QListWidgetItem *p_item);\n\n  QSharedPointer<WindowsProvider> m_provider;\n\n  ListWidget *m_windows = nullptr;\n\n  QScopedPointer<NavigationModeWrapper<QListWidget, QListWidgetItem>> m_navigationWrapper;\n};\n} // namespace vnotex\n\n#endif // WINDOWSPANEL_H\n"
  },
  {
    "path": "src/widgets/windowsprovider.cpp",
    "content": "#include \"windowsprovider.h\"\n\n#include \"viewarea.h\"\n#include \"viewsplit.h\"\n#include \"viewwindow.h\"\n\nusing namespace vnotex;\n\nWindowsProvider::WindowsProvider(ViewArea *p_viewArea) : QObject(nullptr), m_viewArea(p_viewArea) {\n  Q_ASSERT(m_viewArea);\n  connect(m_viewArea, &ViewArea::windowsChanged, this, &WindowsProvider::windowsChanged);\n}\n\nQVector<WindowsProvider::ViewSplitWindows> WindowsProvider::getWindows() const {\n  QVector<WindowsProvider::ViewSplitWindows> windows;\n\n  const auto &splits = m_viewArea->getAllViewSplits();\n  for (auto split : splits) {\n    auto wins = split->getAllViewWindows();\n    if (wins.empty()) {\n      continue;\n    }\n\n    windows.push_back(ViewSplitWindows());\n    auto &tmp = windows.back();\n    tmp.m_viewSplitId = split->getId();\n    for (int idx = 0; idx < wins.size(); ++idx) {\n      WindowData data;\n      data.m_index = idx;\n      data.m_name = wins[idx]->getName();\n      tmp.m_viewWindows.push_back(data);\n    }\n  }\n\n  return windows;\n}\n\nvoid WindowsProvider::setCurrentWindow(ID p_viewSplitId, int p_windowIndex) {\n  m_viewArea->setCurrentViewWindow(p_viewSplitId, p_windowIndex);\n}\n"
  },
  {
    "path": "src/widgets/windowsprovider.h",
    "content": "#ifndef WINDOWSPROVIDER_H\n#define WINDOWSPROVIDER_H\n\n#include <QObject>\n\n#include <QVector>\n\n#include <core/global.h>\n\nnamespace vnotex {\nclass ViewArea;\n\nclass WindowsProvider : public QObject {\n  Q_OBJECT\npublic:\n  struct WindowData {\n    int m_index = -1;\n\n    QString m_name;\n  };\n\n  struct ViewSplitWindows {\n    ID m_viewSplitId = 0;\n\n    QVector<WindowData> m_viewWindows;\n  };\n\n  explicit WindowsProvider(ViewArea *p_viewArea);\n\n  QVector<ViewSplitWindows> getWindows() const;\n\n  void setCurrentWindow(ID p_viewSplitId, int p_windowIndex);\n\nsignals:\n  void windowsChanged();\n\nprivate:\n  ViewArea *m_viewArea = nullptr;\n};\n} // namespace vnotex\n\n#endif // WINDOWSPROVIDER_H\n"
  },
  {
    "path": "src/widgets/wordcountpopup.cpp",
    "content": "#include \"wordcountpopup.h\"\n\n#include <QFormLayout>\n#include <QGroupBox>\n#include <QLabel>\n#include <QPointer>\n\n#include <utils/widgetutils.h>\n\nusing namespace vnotex;\n\nWordCountPanel::WordCountPanel(QWidget *p_parent) : QWidget(p_parent) {\n  auto mainLayout = new QFormLayout(this);\n\n  m_selectionLabel = new QLabel(tr(\"Selection Area\"), this);\n  mainLayout->addRow(m_selectionLabel);\n  m_selectionLabel->hide();\n\n  const auto alignment = Qt::AlignRight | Qt::AlignVCenter;\n  m_wordLabel = new QLabel(\"0\", this);\n  m_wordLabel->setAlignment(alignment);\n  mainLayout->addRow(tr(\"Words\"), m_wordLabel);\n\n  m_charWithoutSpaceLabel = new QLabel(\"0\", this);\n  m_charWithoutSpaceLabel->setAlignment(alignment);\n  mainLayout->addRow(tr(\"Characters (no spaces)\"), m_charWithoutSpaceLabel);\n\n  m_charWithSpaceLabel = new QLabel(\"0\", this);\n  m_charWithSpaceLabel->setAlignment(alignment);\n  mainLayout->addRow(tr(\"Characters (with spaces)\"), m_charWithSpaceLabel);\n}\n\nvoid WordCountPanel::updateCount(bool p_isSelection, int p_words, int p_charsWithoutSpace,\n                                 int p_charsWithSpace) {\n  m_selectionLabel->setVisible(p_isSelection);\n  m_wordLabel->setText(QString::number(p_words));\n  m_charWithoutSpaceLabel->setText(QString::number(p_charsWithoutSpace));\n  m_charWithSpaceLabel->setText(QString::number(p_charsWithSpace));\n}\n\nWordCountPopup::WordCountPopup(QToolButton *p_btn, const ViewWindow *p_viewWindow,\n                               QWidget *p_parent)\n    : ButtonPopup(p_btn, p_parent), m_viewWindow(p_viewWindow) {\n  setupUI();\n\n  connect(this, &QMenu::aboutToShow, this, [this]() {\n    QPointer<WordCountPopup> popup(this);\n    m_viewWindow->fetchWordCountInfo([popup](const ViewWindow::WordCountInfo &info) {\n      if (popup) {\n        popup->updateCount(info);\n      }\n    });\n  });\n}\n\nvoid WordCountPopup::updateCount(const ViewWindow::WordCountInfo &p_info) {\n  m_panel->updateCount(p_info.m_isSelection, p_info.m_wordCount, p_info.m_charWithoutSpaceCount,\n                       p_info.m_charWithSpaceCount);\n}\n\nvoid WordCountPopup::setupUI() {\n  m_panel = new WordCountPanel(this);\n  addWidget(m_panel);\n}\n"
  },
  {
    "path": "src/widgets/wordcountpopup.h",
    "content": "#ifndef WORDCOUNTPOPUP_H\n#define WORDCOUNTPOPUP_H\n\n#include \"buttonpopup.h\"\n\n#include \"viewwindow.h\"\n\nclass QToolButton;\nclass QLabel;\n\nnamespace vnotex {\nclass WordCountPanel : public QWidget {\n  Q_OBJECT\npublic:\n  explicit WordCountPanel(QWidget *p_parent = nullptr);\n\n  void updateCount(bool p_isSelection, int p_words, int p_charsWithoutSpace, int p_charsWithSpace);\n\nprivate:\n  QLabel *m_selectionLabel = nullptr;\n  QLabel *m_wordLabel = nullptr;\n  QLabel *m_charWithoutSpaceLabel = nullptr;\n  QLabel *m_charWithSpaceLabel = nullptr;\n};\n\nclass WordCountPopup : public ButtonPopup {\n  Q_OBJECT\npublic:\n  WordCountPopup(QToolButton *p_btn, const ViewWindow *p_viewWindow, QWidget *p_parent = nullptr);\n\n  void updateCount(const ViewWindow::WordCountInfo &p_info);\n\nprivate:\n  void setupUI();\n\n  WordCountPanel *m_panel = nullptr;\n\n  const ViewWindow *m_viewWindow = nullptr;\n};\n} // namespace vnotex\n\n#endif // WORDCOUNTPOPUP_H\n"
  },
  {
    "path": "tests/CMakeLists.txt",
    "content": "add_subdirectory(test_core)\nadd_subdirectory(test_task)\nadd_subdirectory(test_utils)\n"
  },
  {
    "path": "tests/test_core/CMakeLists.txt",
    "content": "add_subdirectory(test_notebook)\nadd_subdirectory(test_theme)\n"
  },
  {
    "path": "tests/test_core/test_notebook/CMakeLists.txt",
    "content": ""
  },
  {
    "path": "tests/test_core/test_notebook/dummynode.cpp",
    "content": "#include \"dummynode.h\"\r\n\r\n#include <utils/pathutils.h>\r\n#include <notebook/nodeparameters.h>\r\n\r\nusing namespace tests;\r\n\r\nusing namespace vnotex;\r\n\r\nDummyNode::DummyNode(Flags p_flags, ID p_id, const QString &p_name, Notebook *p_notebook, Node *p_parent)\r\n    : Node(p_flags,\r\n           p_name,\r\n           NodeParameters(p_id),\r\n           p_notebook,\r\n           p_parent)\r\n{\r\n}\r\n\r\nQString DummyNode::fetchAbsolutePath() const\r\n{\r\n    return PathUtils::concatenateFilePath(\"/\", fetchPath());\r\n}\r\n\r\nQSharedPointer<File> DummyNode::getContentFile()\r\n{\r\n    return nullptr;\r\n}\r\n\r\nQStringList DummyNode::addAttachment(const QString &p_destFolderPath, const QStringList &p_files)\r\n{\r\n    Q_UNUSED(p_destFolderPath);\r\n    Q_UNUSED(p_files);\r\n    return QStringList();\r\n}\r\n\r\nQString DummyNode::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name)\r\n{\r\n    Q_UNUSED(p_destFolderPath);\r\n    Q_UNUSED(p_name);\r\n    return QString();\r\n}\r\n\r\nQString DummyNode::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name)\r\n{\r\n    Q_UNUSED(p_destFolderPath);\r\n    Q_UNUSED(p_name);\r\n    return QString();\r\n}\r\n\r\nQString DummyNode::renameAttachment(const QString &p_path, const QString &p_name)\r\n{\r\n    Q_UNUSED(p_path);\r\n    Q_UNUSED(p_name);\r\n    return QString();\r\n}\r\n\r\nvoid DummyNode::removeAttachment(const QStringList &p_paths)\r\n{\r\n    Q_UNUSED(p_paths);\r\n}\r\n\r\nvoid DummyNode::load()\r\n{\r\n    m_loaded = true;\r\n}\r\n\r\nvoid DummyNode::save()\r\n{\r\n}\r\n"
  },
  {
    "path": "tests/test_core/test_notebook/dummynode.h",
    "content": "#ifndef DUMMYNODE_H\r\n#define DUMMYNODE_H\r\n\r\n#include <notebook/node.h>\r\n\r\nnamespace tests\r\n{\r\n    class DummyNode : public vnotex::Node\r\n    {\r\n    public:\r\n        DummyNode(Flags p_flags, vnotex::ID p_id, const QString &p_name, vnotex::Notebook *p_notebook, Node *p_parent);\r\n\r\n        QString fetchAbsolutePath() const Q_DECL_OVERRIDE;\r\n\r\n        QSharedPointer<vnotex::File> getContentFile() Q_DECL_OVERRIDE;\r\n\r\n        QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files) Q_DECL_OVERRIDE;\r\n\r\n        QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE;\r\n\r\n        QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE;\r\n\r\n        QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE;\r\n\r\n        void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE;\r\n\r\n        void load() Q_DECL_OVERRIDE;\r\n\r\n        void save() Q_DECL_OVERRIDE;\r\n    };\r\n}\r\n\r\n#endif // DUMMYNODE_H\r\n"
  },
  {
    "path": "tests/test_core/test_notebook/dummynotebook.cpp",
    "content": "#include \"dummynotebook.h\"\r\n\r\n#include <notebook/node.h>\r\n\r\nusing namespace tests;\r\n\r\nusing namespace vnotex;\r\n\r\nDummyNotebook::DummyNotebook(const QString &p_name, QObject *p_parent)\r\n    : Notebook(p_name, p_parent)\r\n{\r\n}\r\n\r\nvoid DummyNotebook::updateNotebookConfig()\r\n{\r\n}\r\n\r\nvoid DummyNotebook::removeNotebookConfig()\r\n{\r\n}\r\n\r\nvoid DummyNotebook::remove()\r\n{\r\n}\r\n\r\nvoid DummyNotebook::initializeInternal()\r\n{\r\n}\r\n\r\nconst QJsonObject &DummyNotebook::getExtraConfigs() const\r\n{\r\n    return m_extraConfigs;\r\n}\r\n\r\nvoid DummyNotebook::setExtraConfig(const QString &p_key, const QJsonObject &p_obj)\r\n{\r\n    Q_UNUSED(p_key);\r\n    Q_UNUSED(p_obj);\r\n}\r\n\r\nQSharedPointer<vnotex::Node> DummyNotebook::loadNodeByPath(const QString &p_path)\r\n{\r\n    Q_UNUSED(p_path);\r\n    return nullptr;\r\n}\r\n"
  },
  {
    "path": "tests/test_core/test_notebook/dummynotebook.h",
    "content": "#ifndef DUMMYNOTEBOOK_H\r\n#define DUMMYNOTEBOOK_H\r\n\r\n#include <notebook/notebook.h>\r\n\r\nnamespace tests\r\n{\r\n    class DummyNotebook : public vnotex::Notebook\r\n    {\r\n        Q_OBJECT\r\n    public:\r\n        DummyNotebook(const QString &p_name, QObject *p_parent = nullptr);\r\n\r\n        void updateNotebookConfig() Q_DECL_OVERRIDE;\r\n\r\n        void removeNotebookConfig() Q_DECL_OVERRIDE;\r\n\r\n        void remove() Q_DECL_OVERRIDE;\r\n\r\n        const QJsonObject &getExtraConfigs() const Q_DECL_OVERRIDE;\r\n        void setExtraConfig(const QString &p_key, const QJsonObject &p_obj) Q_DECL_OVERRIDE;\r\n\r\n        QSharedPointer<vnotex::Node> loadNodeByPath(const QString &p_path) Q_DECL_OVERRIDE;\r\n\r\n    protected:\r\n        void initializeInternal() Q_DECL_OVERRIDE;\r\n\r\n        QJsonObject m_extraConfigs;\r\n    };\r\n}\r\n\r\n#endif // DUMMYNOTEBOOK_H\r\n"
  },
  {
    "path": "tests/test_core/test_notebook/test_notebook.cpp",
    "content": "#include \"test_notebook.h\"\n\n#include <QDebug>\n#include <QTemporaryDir>\n#include <QFileInfo>\n\n#include <versioncontroller/dummyversioncontrollerfactory.h>\n#include <versioncontroller/iversioncontroller.h>\n#include <notebookconfigmgr/vxnotebookconfigmgrfactory.h>\n#include <notebookconfigmgr/inotebookconfigmgr.h>\n#include <notebookconfigmgr/bundlenotebookconfigmgr.h>\n#include <notebookbackend/localnotebookbackendfactory.h>\n#include <notebookbackend/inotebookbackend.h>\n#include <notebook/bundlenotebookfactory.h>\n#include <notebook/notebook.h>\n#include <notebook/notebookparameters.h>\n#include <utils/pathutils.h>\n\n#include \"testnotebookdatabase.h\"\n\nusing namespace tests;\n\nusing namespace vnotex;\n\nTestNotebook::TestNotebook(QObject *p_parent)\n    : QObject(p_parent)\n{\n}\n\nvoid TestNotebook::testNotebookDatabase()\n{\n    TestNotebookDatabase test;\n    test.test();\n}\n\nQTEST_MAIN(tests::TestNotebook)\n"
  },
  {
    "path": "tests/test_core/test_notebook/test_notebook.h",
    "content": "#ifndef TEST_NOTEBOOK_H\n#define TEST_NOTEBOOK_H\n\n#include <QtTest>\n#include <QSharedPointer>\n\n#include <namebasedserver.h>\n\nclass QTemporaryDir;\n\nnamespace vnotex\n{\n    class IVersionControllerFactory;\n    class INotebookConfigMgrFactory;\n    class INotebookBackendFactory;\n    class INotebookFactory;\n}\n\nnamespace tests\n{\n    class TestNotebook : public QObject\n    {\n        Q_OBJECT\n    public:\n        explicit TestNotebook(QObject *p_parent = nullptr);\n\n    private slots:\n        // Define test cases here per slot.\n        void testNotebookDatabase();\n    };\n} // ns tests\n\n#endif // TEST_NOTEBOOK_H\n"
  },
  {
    "path": "tests/test_core/test_notebook/testnotebookdatabase.cpp",
    "content": "#include \"testnotebookdatabase.h\"\r\n\r\n#include <QtTest>\r\n\r\n#include \"dummynode.h\"\r\n#include \"dummynotebook.h\"\r\n\r\nusing namespace tests;\r\n\r\nusing namespace vnotex;\r\n\r\ntemplate <typename T>\r\nstatic void checkStringListEqual(T p_actual, T p_expected)\r\n{\r\n    std::sort(p_actual.begin(), p_actual.end());\r\n    std::sort(p_expected.begin(), p_expected.end());\r\n    QCOMPARE(p_actual, p_expected);\r\n}\r\n\r\nTestNotebookDatabase::TestNotebookDatabase()\r\n{\r\n    QVERIFY(m_testDir.isValid());\r\n\r\n    m_notebook.reset(new DummyNotebook(\"test_notebook\"));\r\n\r\n    m_dbAccess.reset(new NotebookDatabaseAccess(m_notebook.data(), m_testDir.filePath(\"test.db\")));\r\n\r\n    m_dbAccess->initialize(0);\r\n    QVERIFY(m_dbAccess->isFresh());\r\n    QVERIFY(m_dbAccess->isValid());\r\n}\r\n\r\nTestNotebookDatabase::~TestNotebookDatabase()\r\n{\r\n    m_dbAccess->close();\r\n    m_dbAccess.reset();\r\n}\r\n\r\nvoid TestNotebookDatabase::test()\r\n{\r\n    testNode();\r\n\r\n    testTag();\r\n\r\n    testNodeTag();\r\n}\r\n\r\nvoid TestNotebookDatabase::testNode()\r\n{\r\n    // Invlaid node.\r\n    {\r\n        auto nodeRec = m_dbAccess->queryNode(1);\r\n        QVERIFY(nodeRec == nullptr);\r\n    }\r\n\r\n    // Root node.\r\n    QScopedPointer<DummyNode> rootNode(new DummyNode(Node::Flag::Container, 0, \"\", m_notebook.data(), nullptr));\r\n    addAndQueryNode(rootNode.data(), true);\r\n\r\n    // Node 1.\r\n    QScopedPointer<DummyNode> node1(new DummyNode(Node::Flag::Content, 10, \"a\", m_notebook.data(), rootNode.data()));\r\n    addAndQueryNode(node1.data(), true);\r\n\r\n    // Node 2, respect id.\r\n    QScopedPointer<DummyNode> node2(new DummyNode(Node::Flag::Content, 50, \"b\", m_notebook.data(), rootNode.data()));\r\n    addAndQueryNode(node2.data(), false);\r\n    QCOMPARE(node2->getId(), 50);\r\n\r\n    // Node 3, respect id with invalid id.\r\n    QScopedPointer<DummyNode> node3(new DummyNode(Node::Flag::Container, 0, \"c\", m_notebook.data(), rootNode.data()));\r\n    addAndQueryNode(node3.data(), false);\r\n    QVERIFY(node3->getId() != 0);\r\n\r\n    // Node 4, deep level.\r\n    QScopedPointer<DummyNode> node4(new DummyNode(Node::Flag::Container, 11, \"ca\", m_notebook.data(), node3.data()));\r\n    addAndQueryNode(node4.data(), false);\r\n\r\n    // Node 5, deep level.\r\n    QScopedPointer<DummyNode> node5(new DummyNode(Node::Flag::Content, 60, \"caa\", m_notebook.data(), node4.data()));\r\n    addAndQueryNode(node5.data(), false);\r\n\r\n    // Node 6, deep level.\r\n    QScopedPointer<DummyNode> node6(new DummyNode(Node::Flag::Content, 5, \"cab\", m_notebook.data(), node4.data()));\r\n    addAndQueryNode(node6.data(), false);\r\n\r\n    // Node 7/8, with non-exist parent.\r\n    QScopedPointer<DummyNode> node7(new DummyNode(Node::Flag::Content, 55, \"caba\", m_notebook.data(), node6.data()));\r\n    QScopedPointer<DummyNode> node8(new DummyNode(Node::Flag::Content, 555, \"cabaa\", m_notebook.data(), node7.data()));\r\n    {\r\n        bool ret = m_dbAccess->addNode(node8.data(), false);\r\n        QVERIFY(!ret);\r\n\r\n        ret = m_dbAccess->addNodeRecursively(node8.data(), false);\r\n        queryAndVerifyNode(node7.data());\r\n        QVERIFY(m_dbAccess->existsNode(node7.data()));\r\n        queryAndVerifyNode(node8.data());\r\n        QVERIFY(m_dbAccess->existsNode(node8.data()));\r\n    }\r\n\r\n    // queryNodeParentPath().\r\n    {\r\n        testQueryNodeParentPath(rootNode.data());\r\n        testQueryNodeParentPath(node1.data());\r\n        testQueryNodeParentPath(node2.data());\r\n        testQueryNodeParentPath(node3.data());\r\n        testQueryNodeParentPath(node4.data());\r\n        testQueryNodeParentPath(node5.data());\r\n        testQueryNodeParentPath(node6.data());\r\n    }\r\n\r\n    // updateNode().\r\n    {\r\n        node6->setParent(node5.data());\r\n        node6->setName(\"caaa\");\r\n        bool ret = m_dbAccess->updateNode(node6.data());\r\n        QVERIFY(ret);\r\n        queryAndVerifyNode(node6.data());\r\n    }\r\n\r\n    // removeNode().\r\n    {\r\n        QVERIFY(m_dbAccess->existsNode(node6.data()));\r\n        bool ret = m_dbAccess->removeNode(node6->getId());\r\n        QVERIFY(ret);\r\n        QVERIFY(!m_dbAccess->existsNode(node6.data()));\r\n\r\n        // DELETE CASCADE.\r\n        QVERIFY(m_dbAccess->existsNode(node3.data()));\r\n        QVERIFY(m_dbAccess->existsNode(node4.data()));\r\n        QVERIFY(m_dbAccess->existsNode(node5.data()));\r\n        ret = m_dbAccess->removeNode(node3->getId());\r\n        QVERIFY(ret);\r\n        QVERIFY(!m_dbAccess->existsNode(node3.data()));\r\n        QVERIFY(!m_dbAccess->existsNode(node4.data()));\r\n        QVERIFY(!m_dbAccess->existsNode(node5.data()));\r\n\r\n        // Add back nodes.\r\n        addAndQueryNode(node3.data(), false);\r\n        addAndQueryNode(node4.data(), false);\r\n        addAndQueryNode(node5.data(), false);\r\n        addAndQueryNode(node6.data(), false);\r\n    }\r\n}\r\n\r\nvoid TestNotebookDatabase::addAndQueryNode(Node *p_node, bool p_ignoreId)\r\n{\r\n    bool ret = m_dbAccess->addNode(p_node, p_ignoreId);\r\n    QVERIFY(ret);\r\n    QVERIFY(p_node->getId() != NotebookDatabaseAccess::InvalidId);\r\n    queryAndVerifyNode(p_node);\r\n    QVERIFY(m_dbAccess->existsNode(p_node));\r\n}\r\n\r\nvoid TestNotebookDatabase::queryAndVerifyNode(const vnotex::Node *p_node)\r\n{\r\n    auto nodeRec = m_dbAccess->queryNode(p_node->getId());\r\n    QVERIFY(nodeRec);\r\n    QCOMPARE(nodeRec->m_id, p_node->getId());\r\n    QCOMPARE(nodeRec->m_name, p_node->getName());\r\n    QCOMPARE(nodeRec->m_signature, p_node->getSignature());\r\n    QCOMPARE(nodeRec->m_parentId, p_node->getParent() ? p_node->getParent()->getId() : NotebookDatabaseAccess::InvalidId);\r\n}\r\n\r\nvoid TestNotebookDatabase::testQueryNodeParentPath(const vnotex::Node *p_node)\r\n{\r\n    auto nodePath = m_dbAccess->queryNodeParentPath(p_node->getId());\r\n    auto node = p_node;\r\n    for (int i = nodePath.size() - 1; i >= 0; --i) {\r\n        QVERIFY(node);\r\n        QCOMPARE(nodePath[i], node->getName());\r\n        node = node->getParent();\r\n    }\r\n    QVERIFY(m_dbAccess->checkNodePath(p_node, nodePath));\r\n\r\n    QCOMPARE(m_dbAccess->queryNodePath(p_node->getId()), p_node->fetchPath());\r\n}\r\n\r\nvoid TestNotebookDatabase::testTag()\r\n{\r\n    // Invalid tag.\r\n    {\r\n        auto nodeRec = m_dbAccess->queryTag(\"1\");\r\n        QVERIFY(nodeRec == nullptr);\r\n    }\r\n\r\n    // Tag 1.\r\n    const QString tag1(\"1\");\r\n    addAndQueryTag(tag1, \"\");\r\n\r\n    // Tag 2.\r\n    QString tag2(\"2\");\r\n    addAndQueryTag(tag2, \"\");\r\n\r\n    // Tag 3 as child of tag 2.\r\n    QString tag3(\"21\");\r\n    addAndQueryTag(tag3, tag2);\r\n    checkStringListEqual({tag2, tag3}, m_dbAccess->queryTagAndChildren(tag2));\r\n\r\n    // Tag 4 as child of tag 2.\r\n    const QString tag4(\"22\");\r\n    addAndQueryTag(tag4, tag2);\r\n    checkStringListEqual({tag2, tag3, tag4}, m_dbAccess->queryTagAndChildren(tag2));\r\n\r\n    // Tag 5 as child of tag 4.\r\n    const QString tag5(\"221\");\r\n    addAndQueryTag(tag5, tag4);\r\n    checkStringListEqual({tag4, tag5}, m_dbAccess->queryTagAndChildren(tag4));\r\n    checkStringListEqual({tag2, tag3, tag4, tag5}, m_dbAccess->queryTagAndChildren(tag2));\r\n\r\n    // Add with update.\r\n    addAndQueryTag(tag3, tag1);\r\n\r\n    // Add without update.\r\n    {\r\n        bool ret = m_dbAccess->addTag(tag3);\r\n        QVERIFY(ret);\r\n        queryAndVerifyTag(tag3, tag1);\r\n\r\n        ret = m_dbAccess->addTag(\"3\");\r\n        QVERIFY(ret);\r\n        queryAndVerifyTag(\"3\", \"\");\r\n    }\r\n\r\n    // Rename.\r\n    {\r\n        bool ret = m_dbAccess->renameTag(tag3, \"11\");\r\n        QVERIFY(ret);\r\n        queryAndVerifyTag(\"11\", tag1);\r\n\r\n        // Tag should be gone.\r\n        QVERIFY(!m_dbAccess->queryTag(tag3));\r\n        tag3 = \"11\";\r\n\r\n        ret = m_dbAccess->renameTag(tag2, \"new2\");\r\n        QVERIFY(ret);\r\n        queryAndVerifyTag(\"new2\", \"\");\r\n\r\n        QVERIFY(!m_dbAccess->queryTag(tag2));\r\n        tag2 = \"new2\";\r\n\r\n        queryAndVerifyTag(tag4, tag2);\r\n        queryAndVerifyTag(tag5, tag4);\r\n    }\r\n\r\n    // removeTag().\r\n    {\r\n        bool ret = m_dbAccess->removeTag(tag3);\r\n        QVERIFY(ret);\r\n        QVERIFY(!m_dbAccess->queryTag(tag3));\r\n\r\n        ret = m_dbAccess->removeTag(tag2);\r\n        QVERIFY(ret);\r\n        QVERIFY(!m_dbAccess->queryTag(tag2));\r\n        QVERIFY(!m_dbAccess->queryTag(tag4));\r\n        QVERIFY(!m_dbAccess->queryTag(tag5));\r\n\r\n        // Add back tags.\r\n        addAndQueryTag(tag3, tag1);\r\n        addAndQueryTag(tag2, \"\");\r\n        addAndQueryTag(tag4, tag2);\r\n        addAndQueryTag(tag5, tag4);\r\n    }\r\n}\r\n\r\nvoid TestNotebookDatabase::addAndQueryTag(const QString &p_name, const QString &p_parentName)\r\n{\r\n    bool ret = m_dbAccess->addTag(p_name, p_parentName);\r\n    QVERIFY(ret);\r\n    queryAndVerifyTag(p_name, p_parentName);\r\n}\r\n\r\nvoid TestNotebookDatabase::queryAndVerifyTag(const QString &p_name, const QString &p_parentName)\r\n{\r\n    auto tagRec = m_dbAccess->queryTag(p_name);\r\n    QVERIFY(tagRec);\r\n    QCOMPARE(tagRec->m_name, p_name);\r\n    QCOMPARE(tagRec->m_parentName, p_parentName);\r\n}\r\n\r\nvoid TestNotebookDatabase::testNodeTag()\r\n{\r\n    // Dummy root.\r\n    QScopedPointer<DummyNode> rootNode(new DummyNode(Node::Flag::Container, 1, \"\", m_notebook.data(), nullptr));\r\n\r\n    // Node 10 -> tag1.\r\n    QScopedPointer<DummyNode> node10(new DummyNode(Node::Flag::Content, 0, \"o\", m_notebook.data(), rootNode.data()));\r\n    addAndQueryNode(node10.data(), true);\r\n    node10->updateTags({\"1\"});\r\n    updateNodeTagsAndCheck(node10.data());\r\n\r\n    // Node 11 -> tag2, tag3, tag1.\r\n    QScopedPointer<DummyNode> node11(new DummyNode(Node::Flag::Container, 0, \"p\", m_notebook.data(), rootNode.data()));\r\n    addAndQueryNode(node11.data(), true);\r\n    node11->updateTags({\"new2\", \"11\", \"1\"});\r\n    updateNodeTagsAndCheck(node11.data());\r\n\r\n    // Node 12 -> tag4, tag100.\r\n    QScopedPointer<DummyNode> node12(new DummyNode(Node::Flag::Content, 0, \"pa\", m_notebook.data(), node11.data()));\r\n    addAndQueryNode(node12.data(), true);\r\n    node12->updateTags({\"22\", \"100\"});\r\n    updateNodeTagsAndCheck(node12.data());\r\n\r\n    // Node 13 -> tag5.\r\n    QScopedPointer<DummyNode> node13(new DummyNode(Node::Flag::Content, 0, \"pb\", m_notebook.data(), node11.data()));\r\n    addAndQueryNode(node13.data(), true);\r\n    node13->updateTags({\"221\"});\r\n    updateNodeTagsAndCheck(node13.data());\r\n\r\n    checkStringListEqual(m_dbAccess->queryTagNodes(\"1\"), {node10->getId(), node11->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodes(\"11\"), {node11->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodes(\"new2\"), {node11->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodes(\"22\"), {node12->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodes(\"100\"), {node12->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodes(\"221\"), {node13->getId()});\r\n\r\n    checkStringListEqual(m_dbAccess->queryTagNodesRecursive(\"1\"), {node10->getId(), node11->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodesRecursive(\"new2\"), {node11->getId(), node12->getId(), node13->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodesRecursive(\"22\"), {node12->getId(), node13->getId()});\r\n    checkStringListEqual(m_dbAccess->queryTagNodesRecursive(\"221\"), {node13->getId()});\r\n}\r\n\r\nvoid TestNotebookDatabase::updateNodeTagsAndCheck(vnotex::Node *p_node)\r\n{\r\n    m_dbAccess->updateNodeTags(p_node);\r\n    checkStringListEqual(m_dbAccess->queryNodeTags(p_node->getId()), p_node->getTags());\r\n}\r\n"
  },
  {
    "path": "tests/test_core/test_notebook/testnotebookdatabase.h",
    "content": "#ifndef TESTNOTEBOOKDATABASE_H\r\n#define TESTNOTEBOOKDATABASE_H\r\n\r\n#include <QScopedPointer>\r\n#include <QTemporaryDir>\r\n\r\n#include <notebook/notebookdatabaseaccess.h>\r\n\r\nnamespace tests\r\n{\r\n    class TestNotebookDatabase\r\n    {\r\n    public:\r\n        TestNotebookDatabase();\r\n\r\n        ~TestNotebookDatabase();\r\n\r\n        void test();\r\n\r\n    private:\r\n        void testNode();\r\n\r\n        void testTag();\r\n\r\n        void testNodeTag();\r\n\r\n    private:\r\n        void addAndQueryNode(vnotex::Node *p_node, bool p_ignoreId);\r\n\r\n        void testQueryNodeParentPath(const vnotex::Node *p_node);\r\n\r\n        void queryAndVerifyNode(const vnotex::Node *p_node);\r\n\r\n        void addAndQueryTag(const QString &p_name, const QString &p_parentName);\r\n\r\n        void queryAndVerifyTag(const QString &p_name, const QString &p_parentName);\r\n\r\n        void updateNodeTagsAndCheck(vnotex::Node *p_node);\r\n\r\n        QTemporaryDir m_testDir;\r\n\r\n        QScopedPointer<vnotex::Notebook> m_notebook;\r\n\r\n        QScopedPointer<vnotex::NotebookDatabaseAccess> m_dbAccess;\r\n    };\r\n}\r\n\r\n#endif // TESTNOTEBOOKDATABASE_H\r\n"
  },
  {
    "path": "tests/test_core/test_theme/test_theme.cpp",
    "content": "#include \"test_theme.h\"\n\n#include <QHash>\n\n#include <theme.h>\n\nusing namespace tests;\n\nusing namespace vnotex;\n\nTestTheme::TestTheme(QObject *p_parent)\n    : QObject(p_parent)\n{\n\n}\n\nvoid TestTheme::checkKeyValue(const QJsonObject &p_obj,\n                              const QString &p_key,\n                              const QString &p_val)\n{\n    auto val = Theme::findValueByKeyPath(p_obj, p_key);\n    QCOMPARE(val.toString(), p_val);\n}\n\nvoid TestTheme::testTranslatePaletteObject()\n{\n    QJsonObject palette;\n\n    // Normal.\n    {\n        QJsonObject base;\n        base[\"a\"] = \"green\";\n        base[\"b\"] = \"blue\";\n        palette[\"base\"] = base;\n\n        auto ret = Theme::translatePaletteObjectOnce(palette, palette, \"base\");\n        QCOMPARE(ret.first, false);\n        QCOMPARE(ret.second, 0);\n\n        checkKeyValue(palette, \"base#a\", \"green\");\n        checkKeyValue(palette, \"base#b\", \"blue\");\n    }\n\n    // @.\n    {\n        auto baseObj = palette[\"base\"].toObject();\n        baseObj[\"c\"] = \"@base#b\";\n        palette[\"base\"] = baseObj;\n\n        auto ret = Theme::translatePaletteObjectOnce(palette, palette, \"base\");\n        QCOMPARE(ret.first, true);\n        QCOMPARE(ret.second, 0);\n        checkKeyValue(palette, \"base#a\", \"green\");\n        checkKeyValue(palette, \"base#b\", \"blue\");\n        checkKeyValue(palette, \"base#c\", \"blue\");\n    }\n\n    // @&@.\n    {\n        auto baseObj = palette[\"base\"].toObject();\n        baseObj[\"e\"] = \"@base#d\";\n        baseObj[\"d\"] = \"@base#a\";\n        palette[\"base\"] = baseObj;\n\n        auto ret = Theme::translatePaletteObjectOnce(palette, palette, \"base\");\n        QCOMPARE(ret.first, true);\n        QCOMPARE(ret.second, 1);\n\n        ret = Theme::translatePaletteObjectOnce(palette, palette, \"base\");\n        QCOMPARE(ret.first, true);\n        QCOMPARE(ret.second, 0);\n\n        checkKeyValue(palette, \"base#d\", \"green\");\n        checkKeyValue(palette, \"base#e\", \"green\");\n    }\n\n    // Cyclic @.\n    {\n        auto baseObj = palette[\"base\"].toObject();\n        baseObj[\"f\"] = \"@base#g\";\n        baseObj[\"g\"] = \"@base#h\";\n        baseObj[\"h\"] = \"@base#f\";\n        palette[\"base\"] = baseObj;\n\n        auto ret = Theme::translatePaletteObjectOnce(palette, palette, \"base\");\n        QCOMPARE(ret.first, true);\n        QCOMPARE(ret.second, 3);\n\n        ret = Theme::translatePaletteObjectOnce(palette, palette, \"base\");\n        QCOMPARE(ret.first, true);\n        QCOMPARE(ret.second, 3);\n\n        checkKeyValue(palette, \"base#a\", \"green\");\n        checkKeyValue(palette, \"base#b\", \"blue\");\n        checkKeyValue(palette, \"base#c\", \"blue\");\n        checkKeyValue(palette, \"base#d\", \"green\");\n        checkKeyValue(palette, \"base#e\", \"green\");\n\n        QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, \"base#f\").toString()));\n        QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, \"base#g\").toString()));\n        QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, \"base#h\").toString()));\n    }\n}\n\nvoid TestTheme::testTranslateStyleByPalette()\n{\n    QJsonObject palette;\n\n    {\n        QJsonObject baseObj;\n        baseObj[\"a\"] = \"green\";\n        baseObj[\"b\"] = \"blue\";\n        baseObj[\"c\"] = \"red\";\n        palette[\"base\"] = baseObj;\n    }\n\n    // Space or column prefix.\n    {\n        QString style = \"color: @base#a;\\n background:@base#b;\";\n        Theme::translateStyleByPalette(palette, style);\n        QVERIFY(style == \"color: green;\\n background:blue;\");\n    }\n\n    // Reference beyond palette.\n    {\n        QString style = \"color: @base#a;\\n background: @base#d;\";\n        Theme::translateStyleByPalette(palette, style);\n        QVERIFY(style == \"color: green;\\n background: @base#d;\");\n    }\n}\n\nvoid TestTheme::testTranslateUrlToAbsolute()\n{\n#if defined(Q_OS_WIN)\n    const QString basePath(\"C:\\\\vnotex\\\\theme\");\n\n    QString style = \"image: url(menu.svg); image:url(c:/vnotex/abs.svg);\";\n    Theme::translateUrlToAbsolute(basePath, style);\n    QVERIFY(style == \"image: url(C:/vnotex/theme/menu.svg); image:url(c:/vnotex/abs.svg);\");\n#else\n    const QString basePath(\"/usr/bin/vnotex/theme\");\n    QString style = \"image: url(menu.svg); image:url(/usr/bin/abs.svg);\";\n    Theme::translateUrlToAbsolute(basePath, style);\n    QVERIFY(style == \"image: url(/usr/bin/vnotex/theme/menu.svg); image:url(/usr/bin/abs.svg);\");\n#endif\n}\n\nvoid TestTheme::testTranslateScaledSize()\n{\n    const qreal factor = 1.5;\n\n    {\n    QString style = \"width: $20px; height:$-4px;\";\n    Theme::translateScaledSize(factor, style);\n    QVERIFY(style == \"width: 30px; height:-6px;\");\n    }\n}\n\nQTEST_MAIN(tests::TestTheme)\n"
  },
  {
    "path": "tests/test_core/test_theme/test_theme.h",
    "content": "#ifndef TEST_THEME_H\n#define TEST_THEME_H\n\n#include <QtTest>\n\nnamespace vnotex\n{\n    class IVersionControllerFactory;\n    class INotebookConfigMgrFactory;\n    class INotebookBackendFactory;\n    class INotebookFactory;\n}\n\nnamespace tests\n{\n    class TestTheme : public QObject\n    {\n        Q_OBJECT\n    public:\n        explicit TestTheme(QObject *p_parent = nullptr);\n\n    private slots:\n        // Define test cases here per slot.\n        void testTranslatePaletteObject();\n\n        void testTranslateStyleByPalette();\n\n        void testTranslateUrlToAbsolute();\n\n        void testTranslateScaledSize();\n\n    private:\n        void checkKeyValue(const QJsonObject &p_obj,\n                           const QString &p_key,\n                           const QString &p_val);\n    };\n} // ns tests\n\n#endif // TEST_THEME_H\n"
  },
  {
    "path": "tests/test_task/test_task.cpp",
    "content": "#include \"test_task.h\"\n\n#include <QDebug>\n#include <QProcessEnvironment>\n\n#include <task/taskvariablemgr.h>\n#include <task/task.h>\n#include <core/configmgr.h>\n#include <core/coreconfig.h>\n#include <core/sessionconfig.h>\n\nusing namespace tests;\n\nusing namespace vnotex;\n\nTestTask::TestTask(QObject *p_parent)\n    : QObject(p_parent)\n{\n}\n\nvoid TestTask::initTestCase()\n{\n    ConfigMgr::initForUnitTest();\n}\n\nvoid TestTask::TestTaskVariableMgr()\n{\n    TaskVariableMgr mgr(nullptr);\n    mgr.init();\n\n    mgr.overrideVariable(\"notebookFolder\", [](const Task *, const QString &val) {\n        Q_ASSERT(val.isEmpty());\n        return \"/home/vnotex/vnote\";\n    });\n\n    mgr.overrideVariable(\"notebookFolderName\", [](const Task *, const QString &val) {\n        Q_ASSERT(val.isEmpty());\n        return \"vnote\";\n    });\n\n    mgr.overrideVariable(\"magic\", [](const Task *, const QString &val) {\n        if (val.isEmpty()) {\n            return QString();\n        } else {\n            return val;\n        }\n    });\n\n    auto task = createTask();\n\n    auto result = mgr.evaluate(task.data(), \"start ${notebookFolder} end\");\n    QCOMPARE(result, \"start /home/vnotex/vnote end\");\n\n    result = mgr.evaluate(task.data(), \"start ${notebookFolder} mid ${notebookFolderName} end\");\n    QCOMPARE(result, \"start /home/vnotex/vnote mid vnote end\");\n\n    result = mgr.evaluate(task.data(), \"${magic:yyyy} ${magic:MM} ${magic:dd}\");\n    QCOMPARE(\"yyyy MM dd\", result);\n\n    {\n        const auto env = QProcessEnvironment::systemEnvironment();\n        result = mgr.evaluate(task.data(), \"${env:PATH} ${env:QT_PATH} ${env:nonexist}\");\n        QCOMPARE(result, QStringLiteral(\"%1 %2 %3\").arg(env.value(\"PATH\"), env.value(\"QT_PATH\"), env.value(\"nonexist\")));\n    }\n\n    result = mgr.evaluate(task.data(), \"${config:main.core.toolbar_icon_size} ${config:main.core.nonexists} ${config:session.core.system_title_bar}\");\n    QCOMPARE(result, QStringLiteral(\"%1  %2\").arg(ConfigMgr::getInst().getCoreConfig().getToolBarIconSize())\n                                      .arg(ConfigMgr::getInst().getSessionConfig().getSystemTitleBarEnabled()));\n}\n\nQSharedPointer<vnotex::Task> TestTask::createTask() const\n{\n    return QSharedPointer<Task>(new Task(\"en_US\", \"dummy_file\", nullptr, nullptr));\n}\n\nQTEST_MAIN(tests::TestTask)\n\n"
  },
  {
    "path": "tests/test_task/test_task.h",
    "content": "#ifndef TESTS_TASK_TEST_TASK_H\n#define TESTS_TASK_TEST_TASK_H\n\n#include <QtTest>\n#include <QSharedPointer>\n\nnamespace vnotex\n{\n    class Task;\n}\n\nnamespace tests\n{\n    class TestTask : public QObject\n    {\n        Q_OBJECT\n    public:\n        explicit TestTask(QObject *p_parent = nullptr);\n\n    private slots:\n        void initTestCase();\n\n        // Define test cases here per slot.\n        void TestTaskVariableMgr();\n\n    private:\n        QSharedPointer<vnotex::Task> createTask() const;\n    };\n} // ns tests\n\n#endif // TESTS_UTILS_TEST_UTILS_H\n"
  },
  {
    "path": "tests/test_utils/test_utils.cpp",
    "content": "#include \"test_utils.h\"\n\n#include <QDebug>\n#include <QTemporaryDir>\n#include <QJsonArray>\n\n#include <utils/utils.h>\n#include <utils/pathutils.h>\n#include <utils/fileutils.h>\n\nusing namespace tests;\n\nusing namespace vnotex;\n\nTestUtils::TestUtils(QObject *p_parent)\n    : QObject(p_parent)\n{\n}\n\nvoid TestUtils::initTestCase()\n{\n    m_obj[\"a\"] = \"a\";\n\n    {\n        QJsonObject objb;\n        objb[\"a\"] = \"ba\";\n        objb[\"b\"] = 2;\n\n        {\n            QJsonObject objbc;\n            objbc[\"a\"] = \"bca\";\n\n            objb[\"c\"] = objbc;\n        }\n\n        m_obj[\"b\"] = objb;\n    }\n\n    {\n        QJsonObject objc;\n        objc[\"a\"] = \"ca\";\n\n        QJsonArray arr;\n        arr.append(\"cb0\");\n        arr.append(\"cb1\");\n        arr.append(\"cb2\");\n        objc[\"b\"] = arr;\n\n        m_obj[\"c\"] = objc;\n    }\n}\n\nvoid TestUtils::testParseAndReadJson_data()\n{\n    QTest::addColumn<QString>(\"exp\");\n    QTest::addColumn<QJsonValue>(\"result\");\n\n    QTest::newRow(\"empty\") << \"\" << QJsonValue(m_obj);\n    QTest::newRow(\"a\") << \"a\" << QJsonValue(\"a\");\n    QTest::newRow(\"ba\") << \"b.a\" << QJsonValue(\"ba\");\n    QTest::newRow(\"bb\") << \"b.b\" << QJsonValue(2);\n    QTest::newRow(\"bca\") << \"b.c.a\" << QJsonValue(\"bca\");\n    QTest::newRow(\"ca\") << \"c.a\" << QJsonValue(\"ca\");\n    QTest::newRow(\"cb0\") << \"c.b[0]\" << QJsonValue(\"cb0\");\n    QTest::newRow(\"cb1\") << \"c.b[1]\" << QJsonValue(\"cb1\");\n    QTest::newRow(\"cb2\") << \"c.b[2]\" << QJsonValue(\"cb2\");\n}\n\nvoid TestUtils::testParseAndReadJson()\n{\n    QFETCH(QString, exp);\n    QFETCH(QJsonValue, result);\n\n    QCOMPARE(Utils::parseAndReadJson(m_obj, exp), result);\n}\n\nvoid TestUtils::testParentDirPath_data()\n{\n    QTest::addColumn<QString>(\"path\");\n    QTest::addColumn<QString>(\"result\");\n\n    QTest::newRow(\"empty\") << \"\" << \"\";\n\n#if defined(Q_OS_WIN)\n    QTest::newRow(\"win_root\") << \"c:\\\\\" << \"C:/\";\n    QTest::newRow(\"win_normal\") << \"c:\\\\users\\\\tamlok\" << \"C:/users\";\n    QTest::newRow(\"win_slash\") << \"c:\\\\users\\\\tamlok\\\\\" << \"C:/users/tamlok\";\n    QTest::newRow(\"win_ext\") << \"c:\\\\users\\\\tamlok\\\\vnotex.md\" << \"C:/users/tamlok\";\n    QTest::newRow(\"win_case\") << \"c:\\\\users\\\\Tamlok\\\\Vnotex.md\" << \"C:/users/Tamlok\";\n    QTest::newRow(\"win_sep\") << \"c:/users/tamlok/vnotex.md\" << \"C:/users/tamlok\";\n#else\n    QTest::newRow(\"linux_root\") << \"/home\" << \"/\";\n    QTest::newRow(\"linux_normal\") << \"/home/tamlok\" << \"/home\";\n    QTest::newRow(\"linux_slash\") << \"/home/tamlok/\" << \"/home/tamlok\";\n    QTest::newRow(\"linux_ext\") << \"/home/tamlok/vnotex.md\" << \"/home/tamlok\";\n    QTest::newRow(\"linux_case\") << \"/home/Tamlok/vnotex.md\" << \"/home/Tamlok\";\n#endif\n}\n\nvoid TestUtils::testParentDirPath()\n{\n    QFETCH(QString, path);\n    QFETCH(QString, result);\n\n    QCOMPARE(PathUtils::parentDirPath(path), result);\n}\n\nvoid TestUtils::testCleanPath_data()\n{\n    QTest::addColumn<QString>(\"path\");\n    QTest::addColumn<QString>(\"result\");\n\n    QTest::newRow(\"empty\") << \"\" << \"\";\n\n#if defined(Q_OS_WIN)\n    QTest::newRow(\"win_root\") << \"c:\" << \"c:\";\n    QTest::newRow(\"win_normal\") << \"c:\\\\users\\\\tamlok\" << \"c:/users/tamlok\";\n    QTest::newRow(\"win_slash\") << \"c:\\\\users\\\\tamlok\\\\\" << \"c:/users/tamlok\";\n    QTest::newRow(\"win_ext\") << \"C:\\\\users\\\\tamlok\\\\vnotex.md\" << \"C:/users/tamlok/vnotex.md\";\n    QTest::newRow(\"win_case\") << \"c:\\\\users\\\\Tamlok\" << \"c:/users/Tamlok\";\n    QTest::newRow(\"win_sep\") << \"c:/users/tamlok\" << \"c:/users/tamlok\";\n#else\n    QTest::newRow(\"linux_root\") << \"/home\" << \"/home\";\n    QTest::newRow(\"linux_normal\") << \"/home/tamlok\" << \"/home/tamlok\";\n    QTest::newRow(\"linux_slash\") << \"/home/tamlok/\" << \"/home/tamlok\";\n    QTest::newRow(\"linux_ext\") << \"/home/tamlok/vnotex.md\" << \"/home/tamlok/vnotex.md\";\n    QTest::newRow(\"linux_case\") << \"/home/Tamlok/vnotex.md\" << \"/home/Tamlok/vnotex.md\";\n#endif\n}\n\nvoid TestUtils::testCleanPath()\n{\n    QFETCH(QString, path);\n    QFETCH(QString, result);\n\n    QCOMPARE(PathUtils::cleanPath(path), result);\n}\n\nvoid TestUtils::testAreSamePaths_data()\n{\n    QTest::addColumn<QString>(\"patha\");\n    QTest::addColumn<QString>(\"pathb\");\n    QTest::addColumn<bool>(\"result\");\n\n    QTest::newRow(\"empty\") << \"\" << \"\" << true;\n\n#if defined(Q_OS_WIN)\n    QTest::newRow(\"win_normal\") << \"c:\\\\users\\\\tamlok\" << \"c:\\\\users\\\\tamlok\" << true;\n    QTest::newRow(\"win_slash\") << \"c:\\\\users\\\\vnotex\\\\\" << \"c:/users/vnotex\" << true;\n    QTest::newRow(\"win_file\") << \"C:\\\\users\\\\tamlok\\\\vnotex.md\" << \"C:/users/tamlok/vnotex.md\" << true;\n    QTest::newRow(\"win_file_false\") << \"C:\\\\users\\\\tamlok\\\\vnote.md\" << \"C:/users/tamlok/vnotex.md\" << false;\n    QTest::newRow(\"win_case\") << \"c:\\\\users\\\\Tamlok\" << \"C:/users/tamlok\" << true;\n#else\n    QTest::newRow(\"linux_normal\") << \"/home/tamlok\" << \"/home/tamlok\" << true;\n    QTest::newRow(\"linux_slash\") << \"/home/tamlok/\" << \"/home/tamlok\" << true;\n    QTest::newRow(\"linux_file\") << \"/home/tamlok/vnotex.md\" << \"/home/tamlok/vnotex.md\" << true;\n    QTest::newRow(\"linux_file_false\") << \"/home/tamlok/vnote.md\" << \"/home/tamlok/vnotex.md\" << false;\n    QTest::newRow(\"linux_case\") << \"/home/Tamlok/vnotex.md\" << \"/home/tamlok/vnotex.md\" << false;\n#endif\n}\n\nvoid TestUtils::testAreSamePaths()\n{\n    QFETCH(QString, patha);\n    QFETCH(QString, pathb);\n    QFETCH(bool, result);\n\n    QCOMPARE(PathUtils::areSamePaths(patha, pathb), result);\n}\n\nvoid TestUtils::testPathContains_data()\n{\n    QTest::addColumn<QString>(\"patha\");\n    QTest::addColumn<QString>(\"pathb\");\n    QTest::addColumn<bool>(\"result\");\n\n    QTest::newRow(\"empty\") << \"\" << \"\" << true;\n\n#if defined(Q_OS_WIN)\n    QTest::newRow(\"win_same\") << \"c:\\\\users\\\\tamlok\" << \"c:\\\\users\\\\tamlok\" << true;\n    QTest::newRow(\"win_slash\") << \"c:\\\\users\\\\vnotex\\\\\" << \"c:\\\\users\\\\vnotex\" << true;\n    QTest::newRow(\"win_file\") << \"C:\\\\users\\\\tamlok\" << \"C:/users/tamlok/vnotex.md\" << true;\n    QTest::newRow(\"win_relative\") << \"C:\\\\users\\\\tamlok\" << \"tamlok/vnotex.md\" << true;\n    QTest::newRow(\"win_root\") << \"c:\\\\users\\\\Tamlok\" << \"D:/users/tamlok\" << false;\n    QTest::newRow(\"win_case\") << \"c:\\\\users\\\\Tamlok\" << \"c:/users/tamlok/abc\" << true;\n    QTest::newRow(\"win_parent\") << \"c:\\\\users\\\\Tamlok\\\\abc\" << \"c:/users/tamlok\" << false;\n    QTest::newRow(\"win_parents\") << \"c:\\\\users\\\\Tamlok\\\\abc\\\\def\" << \"c:/users/tamlok\" << false;\n#else\n    QTest::newRow(\"linux_same\") << \"/home/tamlok\" << \"/home/tamlok\" << true;\n    QTest::newRow(\"linux_slash\") << \"/home/tamlok/\" << \"/home/tamlok\" << true;\n    QTest::newRow(\"linux_file\") << \"/home/tamlok\" << \"/home/tamlok/vnotex.md\" << true;\n    QTest::newRow(\"linux_relative\") << \"/home/tamlok\" << \"tamlok/vnotex.md\" << true;\n    QTest::newRow(\"linux_root\") << \"/home/tamlok\" << \"/tamlok/vnotex.md\" << false;\n    QTest::newRow(\"linux_case\") << \"/home/Tamlok\" << \"/home/tamlok/vnotex.md\" << false;\n    QTest::newRow(\"linux_parent\") << \"/home/tamlok/abc\" << \"/home/tamlok\" << false;\n    QTest::newRow(\"linux_parents\") << \"/home/tamlok/abc/def\" << \"/home/tamlok\" << false;\n#endif\n}\n\nvoid TestUtils::testPathContains()\n{\n    QFETCH(QString, patha);\n    QFETCH(QString, pathb);\n    QFETCH(bool, result);\n\n    QCOMPARE(PathUtils::pathContains(patha, pathb), result);\n}\n\nvoid TestUtils::testConcatenateFilePath_data()\n{\n    QTest::addColumn<QString>(\"dirPath\");\n    QTest::addColumn<QString>(\"name\");\n    QTest::addColumn<QString>(\"result\");\n\n    QTest::newRow(\"emptyDir\") << \"\" << \"filea\" << \"filea\";\n\n#if defined(Q_OS_WIN)\n    QTest::newRow(\"win_absolute\") << \"c:\\\\users\\\\tamlok\" << \"filea\" << \"c:/users/tamlok/filea\";\n    QTest::newRow(\"win_slash\") << \"c:\\\\users\\\\vnotex\\\\\" << \"filea\" << \"c:/users/vnotex/filea\";\n    QTest::newRow(\"win_slash2\") << \"C:/users/tamlok///\" << \"filea\" << \"C:/users/tamlok/filea\";\n    QTest::newRow(\"win_relative\") << \"users\\\\tamlok\" << \"filea\" << \"users/tamlok/filea\";\n    QTest::newRow(\"win_path\") << \"c:\\\\users\\\\tamlok\" << \"folder/filea\" << \"c:/users/tamlok/folder/filea\";\n#else\n    QTest::newRow(\"linux_absolute\") << \"/home/tamlok\" << \"filea\" << \"/home/tamlok/filea\";\n    QTest::newRow(\"linux_slash\") << \"/home/tamlok///\" << \"filea\" << \"/home/tamlok/filea\";\n    QTest::newRow(\"linux_relative\") << \"home/tamlok\" << \"filea\" << \"home/tamlok/filea\";\n    QTest::newRow(\"linux_path\") << \"/home/tamloK\" << \"folder/filea\" << \"/home/tamloK/folder/filea\";\n#endif\n}\n\nvoid TestUtils::testConcatenateFilePath()\n{\n    QFETCH(QString, dirPath);\n    QFETCH(QString, name);\n    QFETCH(QString, result);\n\n    QCOMPARE(PathUtils::concatenateFilePath(dirPath, name), result);\n}\n\nvoid TestUtils::testRenameFile()\n{\n    QTemporaryDir dir;\n    const QString testFolderPath(dir.path());\n\n    // File.\n    {\n        QString fileAPath = testFolderPath + \"/filea.md\";\n        QFile fileA(fileAPath);\n        QVERIFY(fileA.open(QIODevice::WriteOnly | QIODevice::Text));\n        fileA.write(QByteArray());\n        fileA.close();\n        QVERIFY(QFileInfo::exists(fileAPath));\n        FileUtils::renameFile(fileAPath, \"fileb.md\");\n        QString newFileAPath = testFolderPath + \"/fileb.md\";\n        QVERIFY(QFileInfo::exists(newFileAPath));\n    }\n\n    // Folder.\n    {\n        QDir paDir(testFolderPath);\n        QString dirAPath = testFolderPath + \"/dira\";\n        QVERIFY(paDir.mkdir(\"dira\"));\n        FileUtils::renameFile(dirAPath, \"dirb\");\n        QVERIFY(paDir.exists(\"dirb\"));\n    }\n}\n\nvoid TestUtils::testIsText()\n{\n    QTemporaryDir dir;\n    const QString testFolderPath(dir.path());\n\n    {\n        auto filePath = testFolderPath + \"/text\";\n        QFile file(filePath);\n        QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));\n        file.write(QByteArray(5, 'v'));\n        file.close();\n        QVERIFY(QFileInfo::exists(filePath));\n        QVERIFY(FileUtils::isText(filePath));\n    }\n\n    {\n        auto filePath = testFolderPath + \"/bin\";\n        QFile file(filePath);\n        QVERIFY(file.open(QIODevice::WriteOnly));\n        file.write(reinterpret_cast<const char *>(&file), sizeof(file));\n        file.close();\n        QVERIFY(QFileInfo::exists(filePath));\n        QVERIFY(!FileUtils::isText(filePath));\n    }\n}\n\nQTEST_MAIN(tests::TestUtils)\n"
  },
  {
    "path": "tests/test_utils/test_utils.h",
    "content": "#ifndef TESTS_UTILS_TEST_UTILS_H\n#define TESTS_UTILS_TEST_UTILS_H\n\n#include <QtTest>\n#include <QJsonObject>\n\nnamespace tests\n{\n    class TestUtils : public QObject\n    {\n        Q_OBJECT\n    public:\n        explicit TestUtils(QObject *p_parent = nullptr);\n\n    private slots:\n        void initTestCase();\n\n        // Define test cases here per slot.\n\n        // Utils tests.\n        void testParseAndReadJson_data();\n        void testParseAndReadJson();\n\n        // PathUtils Tests.\n        void testParentDirPath_data();\n        void testParentDirPath();\n\n        void testCleanPath_data();\n        void testCleanPath();\n\n        void testAreSamePaths_data();\n        void testAreSamePaths();\n\n        void testPathContains_data();\n        void testPathContains();\n\n        void testConcatenateFilePath_data();\n        void testConcatenateFilePath();\n\n        // FileUtils Tests.\n        void testRenameFile();\n\n        void testIsText();\n\n    private:\n        QJsonObject m_obj;\n    };\n} // ns tests\n\n#endif // TESTS_UTILS_TEST_UTILS_H\n"
  }
]